Calculate styles dynamically

This commit is contained in:
Nate Butler
2022-10-09 16:11:02 -04:00
parent 393d728769
commit c4028ef116
+46 -453
View File
@@ -139,9 +139,9 @@ function elevation(ramps: RampSet, isLight: boolean, shadow?: Shadow): Elevation
return {
ramps,
bottom: bottomLayer("bottom", ramps, isLight),
middle: middleLayer("middle", ramps, isLight),
top: topLayer("top", ramps, isLight),
bottom: bottomLayer(ramps, isLight),
middle: middleLayer(ramps, isLight),
top: topLayer(ramps, isLight),
shadow,
};
@@ -184,477 +184,70 @@ function buildStyleSet(ramp: Scale, styleDefinitions: {
}
}
function buildLayer(layer: string) {
let base: number
let step: number
if (layer == "bottom") {
base = 0.2
step = 0.05
}
if (layer == "middle") {
base = 0.1
step = 0.05
}
if (layer == "top") {
base = 0
step = 0.05
}
function buildLayer(fgLayer: number, bgBase: number, fgBase: number, step: number) {
return {
background: {
default: base,
hovered: base + step,
pressed: base + (step * 2),
active: base + (step * 3),
disabled: base,
default: bgBase,
hovered: bgBase + step,
pressed: bgBase + (step * 1.5),
active: bgBase + (step * 2.5),
disabled: bgBase,
},
border: {
default: base + step,
hovered: base + step,
pressed: base + step,
active: base + step,
disabled: base + step,
default: bgBase + step,
hovered: bgBase + step,
pressed: bgBase + step,
active: bgBase + step,
disabled: bgBase + step,
},
foreground: {
default: 1,
hovered: 1 - step,
pressed: 1 - (step * 2),
active: 1 - (step * 4),
disabled: 1,
default: fgBase,
hovered: fgBase - step,
pressed: fgBase - step,
active: fgBase,
disabled: fgLayer - (step * 4),
},
}
}
function bottomLayer(layer = "bottom", ramps: RampSet, isLight: boolean): Layer {
let baseSet = buildStyleSet(ramps.neutral, buildLayer(layer));
let variantSet = buildStyleSet(ramps.neutral, {
background: {
default: 0.16,
hovered: 0.31,
pressed: 0.41,
active: 1,
disabled: 0.16,
},
border: {
default: 0.2,
hovered: 0.2,
pressed: 0.2,
active: 0.5,
disabled: 0.2,
},
foreground: {
default: 0.7,
hovered: 1,
pressed: 1,
active: 0,
disabled: 0.4,
},
});
let onSet = buildStyleSet(ramps.neutral, {
background: {
default: 0.08,
hovered: 0.23,
pressed: 0.33,
active: 1,
disabled: 0.08,
},
border: {
default: 0.2,
hovered: 0.2,
pressed: 0.2,
active: 0.5,
disabled: 0.2,
},
foreground: {
default: 1,
hovered: 1,
pressed: 1,
active: 0,
disabled: 0.4,
},
});
let infoSet = buildStyleSet(ramps.blue, buildLayer(layer))
let positiveSet = buildStyleSet(ramps.green, {
background: {
default: 0,
hovered: 0.1,
pressed: 0.2,
active: 0.4,
disabled: 0,
},
border: {
default: 0.2,
hovered: 0.2,
pressed: 0.2,
active: 0.6,
disabled: 0.1,
},
foreground: {
default: 0.9,
hovered: 0.9,
pressed: 0.9,
active: 0.9,
disabled: 0.2,
},
});
let warningSet = buildStyleSet(ramps.yellow, {
background: {
default: 0.1,
hovered: 0.1,
pressed: 0.2,
active: 0.4,
disabled: 0,
},
border: {
default: 0.2,
hovered: 0.2,
pressed: 0.2,
active: 0.6,
disabled: 0.1,
},
foreground: {
default: 0.6,
hovered: 0.9,
pressed: 0.9,
active: 0.9,
disabled: 0.2,
},
});
let negativeSet = buildStyleSet(ramps.red, {
background: {
default: 0,
hovered: 0.1,
pressed: 0.2,
active: 0.4,
disabled: 0,
},
border: {
default: 0.1,
hovered: 0.2,
pressed: 0.2,
active: 0.6,
disabled: 0.1,
},
foreground: {
default: 0.9,
hovered: 0.9,
pressed: 0.9,
active: 0.9,
disabled: 0.2,
},
});
function bottomLayer(ramps: RampSet, isLight: boolean): Layer {
let fgLayer = 1
return {
base: baseSet,
variant: variantSet,
on: onSet,
info: infoSet,
positive: positiveSet,
warning: warningSet,
negative: negativeSet
base: buildStyleSet(ramps.neutral, buildLayer(fgLayer, 0.2, 1, 0.08)),
variant: buildStyleSet(ramps.neutral, buildLayer(fgLayer, 0.2, 0.7, 0.08)),
on: buildStyleSet(ramps.neutral, buildLayer(fgLayer, 0.1, 1, 0.08)),
info: buildStyleSet(ramps.blue, buildLayer(fgLayer, 0.2, 1, 0.08)),
positive: buildStyleSet(ramps.green, buildLayer(fgLayer, 0.2, 1, 0.08)),
warning: buildStyleSet(ramps.yellow, buildLayer(fgLayer, 0.2, 1, 0.08)),
negative: buildStyleSet(ramps.red, buildLayer(fgLayer, 0.2, 1, 0.08))
};
}
function middleLayer(layer: string = "middle", ramps: RampSet, isLight: boolean): Layer {
let baseSet = buildStyleSet(ramps.neutral, buildLayer(layer));
let variantSet = buildStyleSet(ramps.neutral, {
background: {
default: 0.08,
hovered: 0.23,
pressed: 0.33,
active: 1,
disabled: 0.08,
},
border: {
default: 0.2,
hovered: 0.2,
pressed: 0.2,
active: 0.5,
disabled: 0.2,
},
foreground: {
default: 0.7,
hovered: 0.7,
pressed: 0.7,
active: 0,
disabled: 0.4,
},
});
let onSet = buildStyleSet(ramps.neutral, {
background: {
default: 0,
hovered: 0.15,
pressed: 0.25,
active: 1,
disabled: 0,
},
border: {
default: 0.2,
hovered: 0.2,
pressed: 0.2,
active: 0.5,
disabled: 0.2,
},
foreground: {
default: 1,
hovered: 1,
pressed: 1,
active: 0,
disabled: 0.4,
},
});
let infoSet = buildStyleSet(ramps.blue, buildLayer(layer))
let positiveSet = buildStyleSet(ramps.green, {
background: {
default: 0,
hovered: 0.1,
pressed: 0.2,
active: 0.4,
disabled: 0,
},
border: {
default: 0.2,
hovered: 0.2,
pressed: 0.2,
active: 0.6,
disabled: 0.1,
},
foreground: {
default: 0.9,
hovered: 0.9,
pressed: 0.9,
active: 0.9,
disabled: 0.2,
},
});
let warningSet = buildStyleSet(ramps.yellow, {
background: {
default: 0,
hovered: 0.1,
pressed: 0.2,
active: 0.4,
disabled: 0,
},
border: {
default: 0.2,
hovered: 0.2,
pressed: 0.2,
active: 0.6,
disabled: 0.1,
},
foreground: {
default: 0.9,
hovered: 0.9,
pressed: 0.9,
active: 0.9,
disabled: 0.2,
},
});
let negativeSet = buildStyleSet(ramps.red, {
background: {
default: 0,
hovered: 0.1,
pressed: 0.2,
active: 0.4,
disabled: 0,
},
border: {
default: 0.2,
hovered: 0.2,
pressed: 0.2,
active: 0.6,
disabled: 0.1,
},
foreground: {
default: 0.9,
hovered: 0.9,
pressed: 0.9,
active: 0.9,
disabled: 0.2,
},
});
function middleLayer(ramps: RampSet, isLight: boolean): Layer {
let fgLayer = 1
return {
base: baseSet,
variant: variantSet,
on: onSet,
info: infoSet,
positive: positiveSet,
warning: warningSet,
negative: negativeSet
base: buildStyleSet(ramps.neutral, buildLayer(fgLayer, 0.1, 1, 0.08)),
variant: buildStyleSet(ramps.neutral, buildLayer(fgLayer, 0.1, 0.7, 0.08)),
on: buildStyleSet(ramps.neutral, buildLayer(fgLayer, 0, 1, 0.08)),
info: buildStyleSet(ramps.blue, buildLayer(fgLayer, 0.1, 1, 0.08)),
positive: buildStyleSet(ramps.green, buildLayer(fgLayer, 0.1, 1, 0.08)),
warning: buildStyleSet(ramps.yellow, buildLayer(fgLayer, 0.1, 1, 0.08)),
negative: buildStyleSet(ramps.red, buildLayer(fgLayer, 0.1, 1, 0.08))
};
}
function topLayer(layer: string = "top", ramps: RampSet, isLight: boolean): Layer {
let baseSet = buildStyleSet(ramps.neutral, buildLayer(layer));
let variantSet = buildStyleSet(ramps.neutral, {
background: {
default: 0,
hovered: 0.15,
pressed: 0.25,
active: 1,
disabled: 0,
},
border: {
default: 0.2,
hovered: 0.2,
pressed: 0.2,
active: 0.5,
disabled: 0.2,
},
foreground: {
default: 0.7,
hovered: 0.7,
pressed: 0.7,
active: 0,
disabled: 0.4,
},
});
let onSet = buildStyleSet(ramps.neutral, {
background: {
default: 0.15,
hovered: 0.3,
pressed: 0.4,
active: 1,
disabled: 0,
},
border: {
default: 0.2,
hovered: 0.2,
pressed: 0.2,
active: 0.5,
disabled: 0.2,
},
foreground: {
default: 1,
hovered: 1,
pressed: 1,
active: 0,
disabled: 0.4,
},
});
let infoSet = buildStyleSet(ramps.blue, {
background: {
default: 0,
hovered: 0.1,
pressed: 0.2,
active: 0.4,
disabled: 0,
},
border: {
default: 0.2,
hovered: 0.2,
pressed: 0.2,
active: 0.6,
disabled: 0.1,
},
foreground: {
default: 0.6,
hovered: 0.9,
pressed: 0.9,
active: 0.3,
disabled: 0.2,
},
});
let positiveSet = buildStyleSet(ramps.green, {
background: {
default: 0,
hovered: 0.1,
pressed: 0.2,
active: 0.4,
disabled: 0,
},
border: {
default: 0.2,
hovered: 0.2,
pressed: 0.2,
active: 0.6,
disabled: 0.1,
},
foreground: {
default: 0.9,
hovered: 0.9,
pressed: 0.9,
active: 0.9,
disabled: 0.2,
},
});
let warningSet = buildStyleSet(ramps.yellow, {
background: {
default: 0,
hovered: 0.1,
pressed: 0.2,
active: 0.4,
disabled: 0,
},
border: {
default: 0.2,
hovered: 0.2,
pressed: 0.2,
active: 0.6,
disabled: 0.1,
},
foreground: {
default: 0.9,
hovered: 0.9,
pressed: 0.9,
active: 0.9,
disabled: 0.2,
},
});
let negativeSet = buildStyleSet(ramps.red, {
background: {
default: 0,
hovered: 0.1,
pressed: 0.2,
active: 0.4,
disabled: 0,
},
border: {
default: 0.2,
hovered: 0.2,
pressed: 0.2,
active: 0.6,
disabled: 0.1,
},
foreground: {
default: 0.9,
hovered: 0.9,
pressed: 0.9,
active: 0.9,
disabled: 0.2,
},
});
function topLayer(ramps: RampSet, isLight: boolean): Layer {
let fgLayer = 1
return {
base: baseSet,
variant: variantSet,
on: onSet,
info: infoSet,
positive: positiveSet,
warning: warningSet,
negative: negativeSet
base: buildStyleSet(ramps.neutral, buildLayer(fgLayer, 0, 1, 0.08)),
variant: buildStyleSet(ramps.neutral, buildLayer(fgLayer, 0, 0.7, 0.08)),
on: buildStyleSet(ramps.neutral, buildLayer(fgLayer, 0.1, 1, 0.08)),
info: buildStyleSet(ramps.blue, buildLayer(fgLayer, 0, 1, 0.08)),
positive: buildStyleSet(ramps.green, buildLayer(fgLayer, 0, 1, 0.08)),
warning: buildStyleSet(ramps.yellow, buildLayer(fgLayer, 0, 1, 0.08)),
negative: buildStyleSet(ramps.red, buildLayer(fgLayer, 0, 1, 0.08))
};
}