Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
Kevin Lint committed Jun 27, 2024
1 parent 17ce72c commit c9c3a9d
Show file tree
Hide file tree
Showing 20 changed files with 710 additions and 255 deletions.
234 changes: 147 additions & 87 deletions docs/scripts/ui.js

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions docs/scripts/ui.js.map

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
},
"scripts": {},
"dependencies": {
"@linttrap/oem": "^0.1.11",
"@linttrap/oem": "^0.1.12",
"css.gg": "^2.1.1"
}
}
8 changes: 4 additions & 4 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

25 changes: 0 additions & 25 deletions src/components/button/button-vars.ts

This file was deleted.

19 changes: 18 additions & 1 deletion src/components/button/button.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,22 @@
import { theme, themes } from "../../state";
import { DEFAULT_BUTTON_SETTINGS } from "./button-vars";

export type ButtonSettings = {
bgColorHoverToken: `--${string}`;
bgColorToken: `--${string}`;
borderColorToken: `--${string}`;
borerColorHoverToken: `--${string}`;
colorHoverToken: `--${string}`;
colorToken: `--${string}`;
};

export const DEFAULT_BUTTON_SETTINGS: ButtonSettings = {
bgColorHoverToken: "--background-700",
bgColorToken: "--background-500",
borderColorToken: "--foreground-100",
borerColorHoverToken: "--foreground-200",
colorHoverToken: "--text-500",
colorToken: "--text-500",
};

export const buttonStyleSheet = new CSSStyleSheet();

Expand Down
25 changes: 0 additions & 25 deletions src/components/dropdown/dropdown-vars.ts

This file was deleted.

38 changes: 31 additions & 7 deletions src/components/dropdown/dropdown.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,26 @@
import { theme, themes } from "../../state";
import { DEFAULT_DROPDOWN_SETTINGS } from "./dropdown-vars";

export type DropdownSettings = {
bgColorHoverToken: `--${string}`;
bgColorToken: `--${string}`;
borderColorToken: `--${string}`;
borderColorHoverToken: `--${string}`;
borderRadiusToken: `--${string}`;
borderWidthToken: `--${string}`;
colorHoverToken: `--${string}`;
colorToken: `--${string}`;
};

export const DEFAULT_DROPDOWN_SETTINGS: DropdownSettings = {
bgColorHoverToken: "--background-700",
bgColorToken: "--background-500",
borderColorToken: "--foreground-100",
borderColorHoverToken: "--foreground-200",
borderRadiusToken: "--radius-scaling",
borderWidthToken: "--borders-scaling",
colorHoverToken: "--text-500",
colorToken: "--text-500",
};

export const dropdownStyleSheet = new CSSStyleSheet();

Expand All @@ -12,14 +33,14 @@ export const renderDropdownStyleSheet = () => {
--dropdown-bg-color: var(${settings.bgColorToken}, white);
--dropdown-bg-color-hover: var(${settings.bgColorHoverToken}, rgba(0, 0, 0, 0.1));
--dropdown-border-color: var(${settings.borderColorToken}, black);
--dropdown-border-radius: ${settings.borderRadius}ch;
--dropdown-border-width: ${settings.borderWidth}ch;
--dropdown-color: var(${settings.colorToken}, black);
--dropdown-color-hover: var(${settings.colorHoverToken}, black);
--dropdown-font-size: ${settings.fontSize}ch;
--dropdown-font-weight: ${settings.fontWeight};
--dropdown-line-height: ${settings.lineHeight}ch;
--dropdown-arrow-size: ${settings.lineHeight * 0.21}ch;
--dropdown-border-radius: calc(0.5 * var(${settings.borderRadiusToken}, 1));
--dropdown-border-width: calc(0.25 * var(${settings.borderWidthToken}, 1));
--dropdown-font-size: calc(1.5 * var(--font-scaling));
--dropdown-font-weight: 500;
--dropdown-line-height: calc(4 * var(--font-scaling));
--dropdown-arrow-size: calc(0.8 * var(--font-scaling));
appearance: none;
border-radius: var(--dropdown-border-radius);
Expand Down Expand Up @@ -47,8 +68,11 @@ export const renderDropdownStyleSheet = () => {
calc(100% - calc(var(--dropdown-line-height) / 2) - calc(var(--dropdown-arrow-size) / 2) + var(--dropdown-arrow-size)) center,
calc(100% - calc(var(--dropdown-line-height) * 1.25 + var(--dropdown-border-width) - calc(var(--dropdown-arrow-size) / 2))) center;
background-repeat: no-repeat;
position: relative;
}
.dropdown[disabled] {
cursor: not-allowed;
opacity: 0.45;
Expand Down
67 changes: 67 additions & 0 deletions src/components/slider/slider.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
import { theme, themes } from "../../state";

export type SliderSettings = {
bgColorHoverToken: `--${string}`;
bgColorToken: `--${string}`;
borderColorToken: `--${string}`;
borderColorHoverToken: `--${string}`;
borderRadius: `--${string}`;
borderWidth: `--${string}`;
colorHoverToken: `--${string}`;
colorToken: `--${string}`;
};

export const DEFAULT_SLIDER_SETTINGS: SliderSettings = {
bgColorHoverToken: "--background-100",
bgColorToken: "--background-100",
borderColorToken: "--foreground-100",
borderColorHoverToken: "--foreground-200",
borderRadius: "--border-radius-500",
borderWidth: "--border-width-100",
colorHoverToken: "--foreground-500",
colorToken: "--foreground-500",
};

export const sliderStyleSheet = new CSSStyleSheet();

export const renderSliderStyleSheet = () => {
const settings = theme.get() !== "none" ? themes.get()[theme.get()].slider : DEFAULT_SLIDER_SETTINGS;

return sliderStyleSheet.replaceSync(`
.slider {
--slider-bg-color: var(${settings.bgColorToken}, black);
--slider-bg-color-hover: var(${settings.bgColorHoverToken}, rgba(0, 0, 0, 0.1));
--slider-border-color: var(${settings.borderColorToken}, black);
--slider-border-radius: ${settings.borderRadius}ch;
--slider-border-width: ${settings.borderWidth}ch;
--slider-color: var(${settings.colorToken}, white);
--slider-color-hover: var(${settings.colorHoverToken}, black);
}
.slider {
-webkit-appearance: none;
appearance: none;
background: var(--slider-bg-color);
border-radius: var(--slider-border-radius);
height: 20px;
width: 100%;
}
.slider:hover {
background: var(--slider-bg-color-hover);
}
.slider::-webkit-slider-thumb {
appearance: none;
width: 20px;
height: 20px;
border-radius: 50%;
background: var(--slider-color);
cursor: pointer;
}
.slider::-webkit-slider-thumb:hover {
background: var(--slider-color-hover);
}
`);
};
41 changes: 25 additions & 16 deletions src/components/tokens/tokens.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import { themes } from "../../state";
import { generateColorVariation } from "../../util/generators";
import { generateColorVariation, scaleNumbers } from "../../util/helpers";

export const tokensStyleSheet = new CSSStyleSheet();
const variation = [10, 20, 30, 40, 50, 60, 70, 80, 90];

const colorScaling = [10, 20, 30, 40, 50, 60, 70, 80, 90];

export const renderTokensStyleSheet = () => {
let tokens = "";
Expand All @@ -12,12 +13,12 @@ export const renderTokensStyleSheet = () => {
// palette
for (const key in themes.get()[theme].colors.palette) {
const value = (themes.get()[theme].colors.palette as any)[key];
for (const num of variation) {
for (const num of colorScaling) {
const hsl = generateColorVariation(
value,
num,
themes.get()[theme].colors.lightnessRange,
themes.get()[theme].colors.saturationRange
themes.get()[theme].scaling.lightness,
themes.get()[theme].scaling.saturation
);
const color = `hsl(${hsl.hue}, ${hsl.saturation}%, ${hsl.lightness}%)`;
tokens += `--${key}-${num}0: ${color};\n`;
Expand All @@ -28,30 +29,38 @@ export const renderTokensStyleSheet = () => {
for (const key in themes.get()[theme].colors.semantic) {
const colorKey = (themes.get()[theme].colors.semantic as any)[key];
const value = (themes.get()[theme].colors.palette as any)[colorKey];
for (const num of variation) {
for (const num of colorScaling) {
const hsl = generateColorVariation(
value,
num,
themes.get()[theme].colors.lightnessRange,
themes.get()[theme].colors.saturationRange
themes.get()[theme].scaling.lightness,
themes.get()[theme].scaling.saturation
);
const color = `hsl(${hsl.hue}, ${hsl.saturation}%, ${hsl.lightness}%)`;
tokens += `--${key}-${num}0: ${color};\n`;
}
}

// inputs
tokens += `--icon-scaling: ${themes.get()[theme].scaling.icon}ch;\n`;
tokens += `--text-scaling: ${themes.get()[theme].scaling.text}ch;\n`;
tokens += `--col-gap-scaling: ${themes.get()[theme].scaling.colGap}ch;\n`;
tokens += `--row-gap-scaling: ${themes.get()[theme].scaling.rowGap}ch;\n`;
tokens += `--padding-scaling: ${themes.get()[theme].scaling.padding}ch;\n`;
tokens += `--borders-scaling: ${themes.get()[theme].scaling.borders}ch;\n`;
tokens += `--weight-scaling: ${themes.get()[theme].scaling.weight}ch;\n`;
const scaling = themes.get()[theme].scaling;
const borders = scaleNumbers(10, 1, 9, scaling.borderWidth, 1);
for (let n = 1; n <= borders.length; n++) tokens += `--border-width-${n}00: ${borders[n - 1]}px;\n`;
const radii = scaleNumbers(10, 1, 9, scaling.borderRadius, 1);
for (let n = 1; n <= radii.length; n++) tokens += `--border-radius-${n}00: ${radii[n - 1]}px;\n`;
const columns = scaleNumbers(10, 1, 9, scaling.columnWidth, 1);
for (let n = 1; n <= columns.length; n++) tokens += `--column-width-${n}00: ${columns[n - 1]}ch;\n`;
const fontSizes = scaleNumbers(10, 1, 9, scaling.fontSize, 1);
for (let n = 1; n <= fontSizes.length; n++) tokens += `--font-size-${n}00: ${fontSizes[n - 1]}ch;\n`;
const iconSizes = scaleNumbers(10, 1, 9, scaling.iconSize, 1);
for (let n = 1; n <= iconSizes.length; n++) tokens += `--icon-size-${n}00: ${iconSizes[n - 1]}ch;\n`;
const rowWidths = scaleNumbers(10, 1, 9, scaling.rowWidth, 1);
for (let n = 1; n <= rowWidths.length; n++) tokens += `--row-width-${n}00: ${rowWidths[n - 1]}ch;\n`;
const paddings = scaleNumbers(10, 1, 9, scaling.padding, 1);
for (let n = 1; n <= paddings.length; n++) tokens += `--padding-${n}00: ${paddings[n - 1]}ch;\n`;

tokens += `}\n`;
}

// console.log(tokens);
console.log(tokens);
tokensStyleSheet.replaceSync(tokens);
};
48 changes: 48 additions & 0 deletions src/components/typography/typography.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import { theme, themes } from "../../state";

export type TypographySettings = {
colorToken: `--${string}`;
fontSizeBase: number;
fontSizeSpread: number;
fontWeight: number;
lineHeight: number;
};

export const DEFAULT_TYPOGRAPHY_SETTINGS: TypographySettings = {
colorToken: "--text-500",
fontSizeBase: 1.5,
fontSizeSpread: 0.25,
fontWeight: 500,
lineHeight: 1.5,
};

export const typographyStylesheet = new CSSStyleSheet();

export const renderTypographyStylesheet = () => {
const settings = theme.get() !== "none" ? themes.get()[theme.get()].typography : DEFAULT_TYPOGRAPHY_SETTINGS;
const typographyTagList = ".h1, .h2, .h3, .h4, .h5, .h6, .p, .span, .div, .li, .td, .th, .summary";
const styles = `
${typographyTagList} {
--text-color: var(${settings.colorToken}, white);
--text-font-size-base: ${settings.fontSizeBase}ch;
--text-font-weight: ${settings.fontWeight};
--text-line-height: ${settings.lineHeight}ch;
}
.h1 { font-size: calc(var(--text-font-size-base) * 2); }
.h2 { font-size: calc(var(--text-font-size-base) * 1.5); }
.h3 { font-size: calc(var(--text-font-size-base) * 1.25); }
.h4 { font-size: var(--text-font-size-base); }
.h5 { font-size: calc(var(--text-font-size-base) * 0.75); }
.h6 { font-size: calc(var(--text-font-size-base) * 0.5); }
.p { font-size: var(--text-font-size-base); }
.span { font-size: var(--text-font-size-base); }
.div { font-size: var(--text-font-size-base); }
.li { font-size: var(--text-font-size-base); }
.td { font-size: var(--text-font-size-base); }
.th { font-size: var(--text-font-size-base); }
.summary { font-size: var(--text-font-size-base); }
`;

return typographyStylesheet.replaceSync(styles);
};
Loading

0 comments on commit c9c3a9d

Please sign in to comment.