@techsio/ui-kit 0.11.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.storybook/main.d.ts.map +1 -1
- package/dist/.storybook/preview.d.ts.map +1 -1
- package/dist/organisms/footer.figma.js +51 -0
- package/dist/organisms/footer.js +11 -11
- package/dist/organisms/gallery.figma.js +34 -0
- package/dist/organisms/header.figma.js +58 -0
- package/dist/organisms/table.figma.js +87 -0
- package/dist/organisms/table.js +6 -6
- package/dist/src/organisms/footer.d.ts.map +1 -1
- package/dist/src/organisms/footer.figma.d.ts +2 -0
- package/dist/src/organisms/footer.figma.d.ts.map +1 -0
- package/dist/src/organisms/gallery.figma.d.ts +2 -0
- package/dist/src/organisms/gallery.figma.d.ts.map +1 -0
- package/dist/src/organisms/header.figma.d.ts +2 -0
- package/dist/src/organisms/header.figma.d.ts.map +1 -0
- package/dist/src/organisms/table.figma.d.ts +2 -0
- package/dist/src/organisms/table.figma.d.ts.map +1 -0
- package/dist/src/theme/theme-config.d.ts +41 -0
- package/dist/src/theme/theme-config.d.ts.map +1 -0
- package/dist/src/theme/theme-provider.d.ts +37 -0
- package/dist/src/theme/theme-provider.d.ts.map +1 -0
- package/dist/src/theme/theme-toggle.d.ts +4 -0
- package/dist/src/theme/theme-toggle.d.ts.map +1 -0
- package/dist/theme/theme-config.js +46 -0
- package/dist/theme/theme-provider.js +101 -0
- package/dist/theme/theme-toggle.js +71 -0
- package/package.json +34 -31
- package/src/tokens/_tokens-base.css +6 -0
- package/src/tokens/components/organisms/_footer.css +8 -82
- package/src/tokens/components/organisms/_gallery.css +11 -33
- package/src/tokens/components/organisms/_header.css +11 -80
- package/src/tokens/components/organisms/_table.css +15 -61
- package/src/tokens/figma/brand-overrides.css +49 -0
- package/src/tokens/figma/dark/variables.css +10 -6
- package/src/tokens/figma/light/variables.css +10 -6
- package/src/tokens/figma/neo/variables.css +1792 -0
- package/src/tokens/figma/neo-dark/variables.css +1792 -0
- package/src/tokens/figma/variables.css +13 -8
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Button } from "../atoms/button.js";
|
|
4
|
+
import { tv } from "../utils.js";
|
|
5
|
+
import { getBrand } from "./theme-config.js";
|
|
6
|
+
import { useAppTheme } from "./theme-provider.js";
|
|
7
|
+
const themeToggle = tv({
|
|
8
|
+
slots: {
|
|
9
|
+
root: "",
|
|
10
|
+
group: "flex flex-col gap-100",
|
|
11
|
+
modeGroup: "mt-150 flex flex-col gap-100",
|
|
12
|
+
label: "text-sm",
|
|
13
|
+
row: "flex gap-50"
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
const MODE_LABELS = {
|
|
17
|
+
light: "Light",
|
|
18
|
+
dark: "Dark",
|
|
19
|
+
system: "System"
|
|
20
|
+
};
|
|
21
|
+
function ThemeToggle({ className }) {
|
|
22
|
+
const { brand, brands, setBrand, mode, setMode, availableModes, mounted } = useAppTheme();
|
|
23
|
+
const showModes = availableModes.length > 1;
|
|
24
|
+
const { root, group, modeGroup, label, row } = themeToggle();
|
|
25
|
+
return /*#__PURE__*/ jsxs("div", {
|
|
26
|
+
className: root({
|
|
27
|
+
className
|
|
28
|
+
}),
|
|
29
|
+
children: [
|
|
30
|
+
/*#__PURE__*/ jsxs("div", {
|
|
31
|
+
className: group(),
|
|
32
|
+
children: [
|
|
33
|
+
/*#__PURE__*/ jsx("span", {
|
|
34
|
+
className: label(),
|
|
35
|
+
children: "Brand"
|
|
36
|
+
}),
|
|
37
|
+
/*#__PURE__*/ jsx("div", {
|
|
38
|
+
className: row(),
|
|
39
|
+
children: brands.map((key)=>/*#__PURE__*/ jsx(Button, {
|
|
40
|
+
onClick: ()=>setBrand(key),
|
|
41
|
+
size: "sm",
|
|
42
|
+
theme: mounted && key === brand ? "solid" : "outlined",
|
|
43
|
+
variant: "primary",
|
|
44
|
+
children: getBrand(key).label
|
|
45
|
+
}, key))
|
|
46
|
+
})
|
|
47
|
+
]
|
|
48
|
+
}),
|
|
49
|
+
showModes && /*#__PURE__*/ jsxs("div", {
|
|
50
|
+
className: modeGroup(),
|
|
51
|
+
children: [
|
|
52
|
+
/*#__PURE__*/ jsx("span", {
|
|
53
|
+
className: label(),
|
|
54
|
+
children: "Mode"
|
|
55
|
+
}),
|
|
56
|
+
/*#__PURE__*/ jsx("div", {
|
|
57
|
+
className: row(),
|
|
58
|
+
children: availableModes.map((value)=>/*#__PURE__*/ jsx(Button, {
|
|
59
|
+
onClick: ()=>setMode(value),
|
|
60
|
+
size: "sm",
|
|
61
|
+
theme: mounted && value === mode ? "solid" : "outlined",
|
|
62
|
+
variant: "secondary",
|
|
63
|
+
children: MODE_LABELS[value]
|
|
64
|
+
}, value))
|
|
65
|
+
})
|
|
66
|
+
]
|
|
67
|
+
})
|
|
68
|
+
]
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
export { ThemeToggle };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@techsio/ui-kit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.13.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -44,6 +44,10 @@
|
|
|
44
44
|
"types": "./dist/src/templates/*.d.ts",
|
|
45
45
|
"import": "./dist/templates/*.js"
|
|
46
46
|
},
|
|
47
|
+
"./theme/*": {
|
|
48
|
+
"types": "./dist/src/theme/*.d.ts",
|
|
49
|
+
"import": "./dist/theme/*.js"
|
|
50
|
+
},
|
|
47
51
|
"./utils": {
|
|
48
52
|
"types": "./dist/src/utils.d.ts",
|
|
49
53
|
"import": "./dist/utils.js"
|
|
@@ -78,27 +82,28 @@
|
|
|
78
82
|
"@iconify-json/mdi-light": "^1.2.2",
|
|
79
83
|
"@iconify-json/svg-spinners": "^1.2.4",
|
|
80
84
|
"@iconify/tailwind4": "^1.1.0",
|
|
81
|
-
"@zag-js/accordion": "^1.
|
|
82
|
-
"@zag-js/carousel": "^1.
|
|
83
|
-
"@zag-js/checkbox": "^1.
|
|
84
|
-
"@zag-js/combobox": "^1.
|
|
85
|
-
"@zag-js/dialog": "^1.
|
|
86
|
-
"@zag-js/i18n-utils": "^1.
|
|
87
|
-
"@zag-js/menu": "^1.
|
|
88
|
-
"@zag-js/number-input": "^1.
|
|
89
|
-
"@zag-js/pagination": "^1.
|
|
90
|
-
"@zag-js/popover": "^1.
|
|
91
|
-
"@zag-js/radio-group": "^1.
|
|
92
|
-
"@zag-js/rating-group": "^1.
|
|
93
|
-
"@zag-js/react": "^1.
|
|
94
|
-
"@zag-js/select": "^1.
|
|
95
|
-
"@zag-js/slider": "^1.
|
|
96
|
-
"@zag-js/steps": "^1.
|
|
97
|
-
"@zag-js/switch": "^1.
|
|
98
|
-
"@zag-js/tabs": "^1.
|
|
99
|
-
"@zag-js/toast": "^1.
|
|
100
|
-
"@zag-js/tooltip": "^1.
|
|
101
|
-
"@zag-js/tree-view": "^1.
|
|
85
|
+
"@zag-js/accordion": "^1.41.2",
|
|
86
|
+
"@zag-js/carousel": "^1.41.2",
|
|
87
|
+
"@zag-js/checkbox": "^1.41.2",
|
|
88
|
+
"@zag-js/combobox": "^1.41.2",
|
|
89
|
+
"@zag-js/dialog": "^1.41.2",
|
|
90
|
+
"@zag-js/i18n-utils": "^1.41.2",
|
|
91
|
+
"@zag-js/menu": "^1.41.2",
|
|
92
|
+
"@zag-js/number-input": "^1.41.2",
|
|
93
|
+
"@zag-js/pagination": "^1.41.2",
|
|
94
|
+
"@zag-js/popover": "^1.41.2",
|
|
95
|
+
"@zag-js/radio-group": "^1.41.2",
|
|
96
|
+
"@zag-js/rating-group": "^1.41.2",
|
|
97
|
+
"@zag-js/react": "^1.41.2",
|
|
98
|
+
"@zag-js/select": "^1.41.2",
|
|
99
|
+
"@zag-js/slider": "^1.41.2",
|
|
100
|
+
"@zag-js/steps": "^1.41.2",
|
|
101
|
+
"@zag-js/switch": "^1.41.2",
|
|
102
|
+
"@zag-js/tabs": "^1.41.2",
|
|
103
|
+
"@zag-js/toast": "^1.41.2",
|
|
104
|
+
"@zag-js/tooltip": "^1.41.2",
|
|
105
|
+
"@zag-js/tree-view": "^1.41.2",
|
|
106
|
+
"better-themes": "^1.1.0",
|
|
102
107
|
"libphonenumber-js": "^1.13.2",
|
|
103
108
|
"tailwind-merge": "^3.4.0",
|
|
104
109
|
"tailwind-variants": "^3.1.1",
|
|
@@ -117,12 +122,10 @@
|
|
|
117
122
|
"@semantic-release/github": "^12.0.2",
|
|
118
123
|
"@semantic-release/npm": "^13.1.2",
|
|
119
124
|
"@semantic-release/release-notes-generator": "^14.1.0",
|
|
120
|
-
"@storybook/addon-a11y": "^10.
|
|
121
|
-
"@storybook/addon-
|
|
122
|
-
"@storybook/
|
|
123
|
-
"@storybook/
|
|
124
|
-
"@storybook/react": "^10.0.2",
|
|
125
|
-
"@storybook/test-runner": "^0.24.2",
|
|
125
|
+
"@storybook/addon-a11y": "^10.4.4",
|
|
126
|
+
"@storybook/addon-themes": "^10.4.4",
|
|
127
|
+
"@storybook/react": "^10.4.4",
|
|
128
|
+
"@storybook/test-runner": "^0.24.4",
|
|
126
129
|
"@tailwindcss/postcss": "^4.1.17",
|
|
127
130
|
"@techsio/storybook-a11y-reporter": "0.1.3",
|
|
128
131
|
"@techsio/storybook-better-a11y": "0.1.3",
|
|
@@ -133,9 +136,9 @@
|
|
|
133
136
|
"postcss": "^8.5.6",
|
|
134
137
|
"rsbuild-plugin-publint": "^0.3.3",
|
|
135
138
|
"semantic-release": "^25.0.2",
|
|
136
|
-
"storybook": "^10.
|
|
137
|
-
"storybook-addon-rslib": "^
|
|
138
|
-
"storybook-react-rsbuild": "^
|
|
139
|
+
"storybook": "^10.4.4",
|
|
140
|
+
"storybook-addon-rslib": "^3.3.4",
|
|
141
|
+
"storybook-react-rsbuild": "^3.3.4",
|
|
139
142
|
"tailwindcss": "^4.1.17",
|
|
140
143
|
"typescript": "^5.9.3"
|
|
141
144
|
},
|
|
@@ -20,6 +20,12 @@
|
|
|
20
20
|
* Generated by merge-figma-themes.mjs from figma/{light,dark}/variables.css. */
|
|
21
21
|
@import "./figma/variables.css";
|
|
22
22
|
|
|
23
|
+
/* Brand theme overrides ([data-theme="…"]). Imported AFTER variables.css so
|
|
24
|
+
* the unlayered selectors win over the @theme base values, while their
|
|
25
|
+
* light-dark() halves still follow `color-scheme`. Only non-base brands
|
|
26
|
+
* (e.g. neo) emit tokens here; base is the default @theme above. */
|
|
27
|
+
@import "./figma/brand-overrides.css";
|
|
28
|
+
|
|
23
29
|
/* Base styles */
|
|
24
30
|
:root {
|
|
25
31
|
color-scheme: light dark;
|
|
@@ -1,85 +1,11 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Footer — runtime tokens come entirely from
|
|
3
|
+
* libs/ui/src/tokens/figma/variables.css.
|
|
4
|
+
*
|
|
5
|
+
* Kept: `--footer-cols` runtime grid-template-columns value
|
|
6
|
+
* (repeat/minmax can't be expressed as a Figma variable).
|
|
7
|
+
*/
|
|
8
|
+
|
|
1
9
|
@theme static {
|
|
2
10
|
--footer-cols: repeat(auto-fit, minmax(22%, 1fr));
|
|
3
|
-
|
|
4
|
-
/* === COLORS === */
|
|
5
|
-
--color-footer: var(--color-surface);
|
|
6
|
-
|
|
7
|
-
/* Background */
|
|
8
|
-
--color-footer-bg: var(--color-footer);
|
|
9
|
-
--color-footer-container-bg: var(--color-footer);
|
|
10
|
-
--color-footer-section-bg: var(--color-footer);
|
|
11
|
-
--color-footer-list-bg: var(--color-footer);
|
|
12
|
-
--color-footer-bottom-bg: var(--color-footer);
|
|
13
|
-
|
|
14
|
-
/* Foreground */
|
|
15
|
-
--color-footer-fg-primary: var(--color-fg-primary);
|
|
16
|
-
--color-footer-fg-secondary: var(--color-fg-secondary);
|
|
17
|
-
|
|
18
|
-
--color-footer-title-fg: var(--color-footer-fg-primary);
|
|
19
|
-
--color-footer-title-fg-hover: var(--color-primary);
|
|
20
|
-
--color-footer-link-fg: var(--color-footer-fg-secondary);
|
|
21
|
-
--color-footer-link-fg-hover: var(--color-primary);
|
|
22
|
-
--color-footer-text-fg: var(--color-footer-fg-secondary);
|
|
23
|
-
|
|
24
|
-
/* Divider & Bottom */
|
|
25
|
-
--color-footer-divider-bg: var(--color-fg-reverse);
|
|
26
|
-
|
|
27
|
-
/* === TYPOGRAPHY === */
|
|
28
|
-
--text-footer-title-sm: var(--text-md);
|
|
29
|
-
--text-footer-title-md: var(--text-lg);
|
|
30
|
-
--text-footer-title-lg: var(--text-xl);
|
|
31
|
-
|
|
32
|
-
--text-footer-link-sm: var(--text-sm);
|
|
33
|
-
--text-footer-link-md: var(--text-md);
|
|
34
|
-
--text-footer-link-lg: var(--text-lg);
|
|
35
|
-
|
|
36
|
-
--text-footer-text-sm: var(--text-xs);
|
|
37
|
-
--text-footer-text-md: var(--text-sm);
|
|
38
|
-
--text-footer-text-lg: var(--text-md);
|
|
39
|
-
|
|
40
|
-
--font-weight-footer-title: var(--font-weight-semibold);
|
|
41
|
-
--font-weight-footer-link: var(--font-weight-normal);
|
|
42
|
-
|
|
43
|
-
/* === SIZES === */
|
|
44
|
-
--container-footer-max: var(--container-max-w);
|
|
45
|
-
|
|
46
|
-
/* === SPACING === */
|
|
47
|
-
/* Root padding */
|
|
48
|
-
--padding-footer-root-sm: var(--spacing-100);
|
|
49
|
-
--padding-footer-root-md: var(--spacing-200);
|
|
50
|
-
--padding-footer-root-lg: var(--spacing-300);
|
|
51
|
-
|
|
52
|
-
/* Container spacing */
|
|
53
|
-
--spacing-footer-container-sm: var(--spacing-300);
|
|
54
|
-
--spacing-footer-container-md: var(--spacing-400);
|
|
55
|
-
--spacing-footer-container-lg: var(--spacing-500);
|
|
56
|
-
|
|
57
|
-
/* Section spacing */
|
|
58
|
-
--spacing-footer-section-sm: var(--spacing-50);
|
|
59
|
-
--spacing-footer-section-md: var(--spacing-100);
|
|
60
|
-
--spacing-footer-section-lg: var(--spacing-150);
|
|
61
|
-
|
|
62
|
-
/* List spacing */
|
|
63
|
-
--spacing-footer-list-gap: var(--spacing-100);
|
|
64
|
-
--spacing-footer-list-gap-sm: var(--spacing-50);
|
|
65
|
-
--spacing-footer-list-gap-md: var(--spacing-100);
|
|
66
|
-
--spacing-footer-list-gap-lg: var(--spacing-150);
|
|
67
|
-
|
|
68
|
-
/* Bottom padding */
|
|
69
|
-
--padding-footer-bottom: var(--spacing-300);
|
|
70
|
-
--padding-footer-bottom-sm: var(--spacing-200);
|
|
71
|
-
--padding-footer-bottom-md: var(--spacing-300);
|
|
72
|
-
--padding-footer-bottom-lg: var(--spacing-400);
|
|
73
|
-
|
|
74
|
-
/* Divider margins */
|
|
75
|
-
--margin-footer-divider-sm: var(--spacing-200);
|
|
76
|
-
--margin-footer-divider-md: var(--spacing-300);
|
|
77
|
-
--margin-footer-divider-lg: var(--spacing-400);
|
|
78
|
-
|
|
79
|
-
/* === BORDERS & EFFECTS === */
|
|
80
|
-
--border-width-footer: var(--border-width-md);
|
|
81
|
-
--color-footer-border: var(--color-border-primary);
|
|
82
|
-
--height-footer-divider: 2px;
|
|
83
|
-
|
|
84
|
-
--radius-footer: 0;
|
|
85
11
|
}
|
|
@@ -1,35 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
);
|
|
13
|
-
--color-gallery-trigger-border: var(--color-border-primary);
|
|
14
|
-
--color-gallery-trigger-border-active: var(--color-gallery-accent);
|
|
15
|
-
--color-gallery-trigger-ring: var(--color-ring);
|
|
16
|
-
|
|
17
|
-
/* === SPACING === */
|
|
18
|
-
--spacing-gallery-xs: var(--spacing-50);
|
|
19
|
-
--spacing-gallery-sm: var(--spacing-100);
|
|
20
|
-
--spacing-gallery-md: var(--spacing-200);
|
|
21
|
-
--spacing-gallery-lg: var(--spacing-300);
|
|
22
|
-
--spacing-gallery-root: var(--spacing-200);
|
|
23
|
-
--padding-gallery-trigger: 0 0;
|
|
24
|
-
|
|
25
|
-
/* === DIMENSIONS === */
|
|
1
|
+
/*
|
|
2
|
+
* Gallery — runtime tokens come entirely from
|
|
3
|
+
* libs/ui/src/tokens/figma/variables.css.
|
|
4
|
+
*
|
|
5
|
+
* Kept: `--height-gallery` responsive cap. Figma flattens it to a fixed
|
|
6
|
+
* dimension (576px); the `min(60svh, 36rem)` viewport behaviour can't be
|
|
7
|
+
* expressed as a Figma variable, so an unlayered `:root` override (which
|
|
8
|
+
* beats Figma's `@theme static`) restores it.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
:root {
|
|
26
12
|
--height-gallery: min(60svh, 36rem);
|
|
27
|
-
|
|
28
|
-
/* === EFFECTS === */
|
|
29
|
-
--brightness-gallery-trigger: 70%;
|
|
30
|
-
--brightness-gallery-trigger-active: 100%;
|
|
31
|
-
--shadow-gallery-trigger: var(--shadow-sm);
|
|
32
|
-
|
|
33
|
-
/* === BORDERS === */
|
|
34
|
-
--radius-gallery-trigger: var(--radius-sm);
|
|
35
13
|
}
|
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Header — runtime tokens come entirely from
|
|
3
|
+
* libs/ui/src/tokens/figma/variables.css.
|
|
4
|
+
*
|
|
5
|
+
* Kept:
|
|
6
|
+
* - `:root @media (width < 48rem)` nav-spacing override (responsive,
|
|
7
|
+
* conditional value — can't be expressed as a Figma variable).
|
|
8
|
+
* - glyph utilities mapping the menu/close icons.
|
|
9
|
+
*/
|
|
10
|
+
|
|
1
11
|
:root {
|
|
2
12
|
@media (width < 48rem) {
|
|
3
13
|
--spacing-header-nav-sm: var(--spacing-50);
|
|
@@ -6,89 +16,10 @@
|
|
|
6
16
|
}
|
|
7
17
|
}
|
|
8
18
|
|
|
9
|
-
@theme static {
|
|
10
|
-
/* === REFERENCE LAYER === */
|
|
11
|
-
/* These tokens reference semantic tokens from _semantic.css */
|
|
12
|
-
--color-header: var(--color-surface);
|
|
13
|
-
--color-header-accent: var(--color-primary);
|
|
14
|
-
|
|
15
|
-
/* Reference typhography */
|
|
16
|
-
--text-header-sm: var(--text-sm);
|
|
17
|
-
--text-header-md: var(--text-md);
|
|
18
|
-
--text-header-lg: var(--text-lg);
|
|
19
|
-
|
|
20
|
-
/* === DERIVED COLORS === */
|
|
21
|
-
/* Background colors */
|
|
22
|
-
--color-header-bg: var(--color-header);
|
|
23
|
-
|
|
24
|
-
/* === ITEMS === */
|
|
25
|
-
--color-header-nav-item-bg: transparent;
|
|
26
|
-
--color-header-nav-item-bg-hover: transparent;
|
|
27
|
-
|
|
28
|
-
--text-header-item-sm: var(--text-header-sm);
|
|
29
|
-
--text-header-item-md: var(--text-header-md);
|
|
30
|
-
--text-header-item-lg: var(--text-header-lg);
|
|
31
|
-
|
|
32
|
-
/* === ACTIONS === */
|
|
33
|
-
|
|
34
|
-
/* Foreground colors */
|
|
35
|
-
--color-header-fg: var(--color-fg-primary);
|
|
36
|
-
--color-header-nav-fg: var(--color-fg-secondary);
|
|
37
|
-
--color-header-nav-fg-hover: var(--color-header-fg);
|
|
38
|
-
--color-header-nav-fg-active: var(--color-header-accent);
|
|
39
|
-
--color-header-actions-fg: var(--color-primary);
|
|
40
|
-
--color-header-actions-fg-hover: var(--color-header-fg);
|
|
41
|
-
|
|
42
|
-
/* Border colors */
|
|
43
|
-
|
|
44
|
-
/* === SIZE === */
|
|
45
|
-
/* Width constraints */
|
|
46
|
-
--width-header-max: 100%;
|
|
47
|
-
|
|
48
|
-
/* === SPACING === */
|
|
49
|
-
/* Section spacing */
|
|
50
|
-
--spacing-header-container: var(--spacing-100);
|
|
51
|
-
|
|
52
|
-
--padding-header-item-sm: var(--spacing-100);
|
|
53
|
-
--padding-header-item-md: var(--spacing-150);
|
|
54
|
-
--padding-header-item-lg: var(--spacing-200);
|
|
55
|
-
|
|
56
|
-
--spacing-header-nav-sm: var(--spacing-200);
|
|
57
|
-
--spacing-header-nav-md: var(--spacing-300);
|
|
58
|
-
--spacing-header-nav-lg: var(--spacing-400);
|
|
59
|
-
|
|
60
|
-
--spacing-header-actions-sm: var(--spacing-200);
|
|
61
|
-
--spacing-header-actions-md: var(--spacing-300);
|
|
62
|
-
--spacing-header-actions-lg: var(--spacing-400);
|
|
63
|
-
|
|
64
|
-
/* === TYPOGRAPHY === */
|
|
65
|
-
--font-weight-header-nav: var(--font-weight-medium);
|
|
66
|
-
--font-weight-header-nav-active: var(--font-weight-semibold);
|
|
67
|
-
|
|
68
|
-
/* === Z-INDEX === */
|
|
69
|
-
/* Mobile menu hamburger colors */
|
|
70
|
-
--color-header-hamburger-fg: var(--color-fg-primary);
|
|
71
|
-
--color-header-hamburger-fg-hover: var(--color-fg-secondary);
|
|
72
|
-
|
|
73
|
-
/* hamburger button */
|
|
74
|
-
--text-header-hamburger-sm: var(--text-header-sm);
|
|
75
|
-
--text-header-hamburger-md: var(--text-header-md);
|
|
76
|
-
--text-header-hamburger-lg: var(--text-header-lg);
|
|
77
|
-
|
|
78
|
-
--padding-header-hamburger-sm: var(--spacing-100);
|
|
79
|
-
--padding-header-hamburger-md: var(--spacing-150);
|
|
80
|
-
--padding-header-hamburger-lg: var(--spacing-200);
|
|
81
|
-
|
|
82
|
-
/* breakpoint */
|
|
83
|
-
--container-header-desktop: 48rem;
|
|
84
|
-
|
|
85
|
-
--duration-header: 300ms;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
19
|
@utility token-icon-header-menu {
|
|
89
20
|
@apply token-icon-menu;
|
|
90
21
|
}
|
|
91
22
|
|
|
92
23
|
@utility token-icon-header-close {
|
|
93
24
|
@apply token-icon-close;
|
|
94
|
-
}
|
|
25
|
+
}
|
|
@@ -1,63 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
--color-table-bg: var(--color-table);
|
|
10
|
-
--color-table-header-bg: oklch(
|
|
11
|
-
from var(--color-table-bg) calc(l - var(--surface-increment)) c h
|
|
12
|
-
);
|
|
13
|
-
--color-table-footer-bg: var(--color-table-header-bg);
|
|
14
|
-
--color-table-row-bg: transparent;
|
|
15
|
-
--color-table-row-bg-hover: oklch(
|
|
16
|
-
from var(--color-table-bg) calc(l + var(--state-hover)) c h
|
|
17
|
-
);
|
|
18
|
-
--color-table-row-bg-selected: --alpha(var(--color-table-accent) / 0.1);
|
|
19
|
-
--color-table-row-striped-bg-primary: oklch(
|
|
20
|
-
from var(--color-table-bg) calc(l - var(--surface-increment)) c h
|
|
21
|
-
);
|
|
22
|
-
--color-table-row-striped-bg-secondary: var(--color-table-row-bg);
|
|
23
|
-
|
|
24
|
-
/* Foreground colors */
|
|
25
|
-
--color-table-fg: var(--color-fg-primary);
|
|
26
|
-
--color-table-header-fg: var(--color-fg-primary);
|
|
27
|
-
--color-table-footer-fg: var(--color-fg-secondary);
|
|
28
|
-
--color-table-caption-fg: var(--color-fg-secondary);
|
|
29
|
-
|
|
30
|
-
/* === SPACING === */
|
|
31
|
-
/* Cell padding */
|
|
32
|
-
--padding-table-cell-sm: var(--spacing-100) var(--spacing-150);
|
|
33
|
-
--padding-table-cell-md: var(--spacing-150) var(--spacing-200);
|
|
34
|
-
--padding-table-cell-lg: var(--spacing-200) var(--spacing-250);
|
|
35
|
-
|
|
36
|
-
/* Caption padding */
|
|
37
|
-
--padding-table-caption-sm: var(--spacing-100);
|
|
38
|
-
--padding-table-caption-md: var(--spacing-150);
|
|
39
|
-
--padding-table-caption-lg: var(--spacing-200);
|
|
1
|
+
/*
|
|
2
|
+
* Table — runtime tokens come entirely from
|
|
3
|
+
* libs/ui/src/tokens/figma/variables.css.
|
|
4
|
+
*
|
|
5
|
+
* Kept: `--padding-table-cell-{sm,md,lg}` composites. Figma exports the cell
|
|
6
|
+
* padding split into `-x`/`-y`; the `p-table-cell-*` shorthand utilities are
|
|
7
|
+
* rebuilt here (padding: y x) from those Figma halves.
|
|
8
|
+
*/
|
|
40
9
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
--
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
--text-table-sm: var(--text-sm);
|
|
49
|
-
--text-table-md: var(--text-md);
|
|
50
|
-
--text-table-lg: var(--text-lg);
|
|
51
|
-
|
|
52
|
-
/* Caption text sizes */
|
|
53
|
-
--text-table-caption-sm: var(--text-xs);
|
|
54
|
-
--text-table-caption-md: var(--text-sm);
|
|
55
|
-
--text-table-caption-lg: var(--text-md);
|
|
56
|
-
|
|
57
|
-
/* === BORDERS & RADIUS === */
|
|
58
|
-
--border-width-table: var(--border-width-sm);
|
|
59
|
-
--radius-table: var(--radius-sm);
|
|
60
|
-
|
|
61
|
-
/* === SHADOWS === */
|
|
62
|
-
--shadow-table-outline: var(--shadow-sm);
|
|
10
|
+
@theme static {
|
|
11
|
+
--padding-table-cell-sm: var(--padding-table-cell-sm-y)
|
|
12
|
+
var(--padding-table-cell-sm-x);
|
|
13
|
+
--padding-table-cell-md: var(--padding-table-cell-md-y)
|
|
14
|
+
var(--padding-table-cell-md-x);
|
|
15
|
+
--padding-table-cell-lg: var(--padding-table-cell-lg-y)
|
|
16
|
+
var(--padding-table-cell-lg-x);
|
|
63
17
|
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Brand theme overrides — non-base brands keyed by [data-theme].
|
|
3
|
+
* Generated by merge-figma-themes.mjs. DO NOT EDIT BY HAND.
|
|
4
|
+
*
|
|
5
|
+
* Only tokens whose merged value differs from the base brand are
|
|
6
|
+
* emitted; everything else inherits base via var() chains. Plain
|
|
7
|
+
* (unlayered) selectors so they win over @theme while still
|
|
8
|
+
* respecting `color-scheme` for the light-dark() halves.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
[data-theme="neo"] {
|
|
12
|
+
--color-badge-fg-primary: var(--color-fg-reverse);
|
|
13
|
+
--color-bg-light-primary-active: var(--color-primary-300);
|
|
14
|
+
--color-bg-light-primary-base: var(--color-primary-100);
|
|
15
|
+
--color-bg-light-primary-hover: var(--color-primary-200);
|
|
16
|
+
--color-bg-outlined-primary-active: var(--color-primary-200);
|
|
17
|
+
--color-bg-outlined-primary-hover: var(--color-primary-100);
|
|
18
|
+
--color-bg-primary-active: var(--color-primary-800);
|
|
19
|
+
--color-bg-primary-base: var(--color-primary-600);
|
|
20
|
+
--color-bg-primary-hover: var(--color-primary-700);
|
|
21
|
+
--color-button-fg-primary: var(--color-fg-reverse);
|
|
22
|
+
--color-fg-accent-primary: var(--color-primary-600);
|
|
23
|
+
--color-primary-100: oklch(0.936 0.032 17.738);
|
|
24
|
+
--color-primary-200: oklch(0.883 0.062 18.386);
|
|
25
|
+
--color-primary-300: oklch(0.805 0.111 19.782);
|
|
26
|
+
--color-primary-400: light-dark(oklch(0.702 0.189 22.228), oklch(0.745 0.155 20.548));
|
|
27
|
+
--color-primary-500: light-dark(oklch(0.638 0.237 25.436), oklch(0.702 0.189 22.228));
|
|
28
|
+
--color-primary-600: oklch(0.581 0.238 29.234);
|
|
29
|
+
--color-primary-700: light-dark(oklch(0.509 0.209 28.513), oklch(0.583 0.239 28.476));
|
|
30
|
+
--color-primary-800: light-dark(oklch(0.445 0.177 26.787), oklch(0.509 0.209 28.513));
|
|
31
|
+
--color-primary-900: light-dark(oklch(0.397 0.141 25.714), oklch(0.445 0.177 26.787));
|
|
32
|
+
--color-primary-alpha-10: oklch(0.581 0.238 29.234 / 0.1);
|
|
33
|
+
--color-product-card-button-cart-fg: var(--color-fg-reverse);
|
|
34
|
+
--color-radio-card-addon-fg-solid-checked: var(--color-fg-reverse);
|
|
35
|
+
--color-radio-card-item-description-fg-solid-checked: var(--color-fg-reverse);
|
|
36
|
+
--color-radio-card-item-indicator-bg-solid-checked: var(--color-fg-reverse);
|
|
37
|
+
--color-radio-card-item-indicator-border-solid-checked: var(--color-fg-reverse);
|
|
38
|
+
--color-secondary-100: #fef3c7;
|
|
39
|
+
--color-secondary-200: #fde68a;
|
|
40
|
+
--color-secondary-300: #fcd34d;
|
|
41
|
+
--color-secondary-400: #fbbf24;
|
|
42
|
+
--color-secondary-500: #f59e0b;
|
|
43
|
+
--color-secondary-600: #d97706;
|
|
44
|
+
--color-secondary-700: #b45309;
|
|
45
|
+
--color-secondary-800: #92400e;
|
|
46
|
+
--color-secondary-900: #78350f;
|
|
47
|
+
--color-steps-indicator-fg-solid: var(--color-fg-reverse);
|
|
48
|
+
--color-tabs-trigger-fg-solid-selected: var(--color-fg-reverse);
|
|
49
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* Design tokens exported from Figma
|
|
3
|
-
* Exported at: 2026-06-
|
|
3
|
+
* Exported at: 2026-06-16T10:13:13.205Z
|
|
4
4
|
* Format: Raw CSS variables grouped by kind
|
|
5
5
|
*/
|
|
6
6
|
:root {
|
|
@@ -291,6 +291,7 @@
|
|
|
291
291
|
--color-fill-highlight: var(--color-neutral-700);
|
|
292
292
|
--color-fill-hover: var(--color-white-10);
|
|
293
293
|
--color-fill-overlay: var(--color-neutral-800);
|
|
294
|
+
--color-fill-selected: var(--color-primary-alpha-10);
|
|
294
295
|
--color-fill-surface: var(--color-neutral-800);
|
|
295
296
|
--color-float: var(--color-fill-highlight);
|
|
296
297
|
--color-footer-bg: var(--color-fill-surface);
|
|
@@ -483,6 +484,7 @@
|
|
|
483
484
|
--color-primary-900: oklch(0.391 0.089 240.611);
|
|
484
485
|
--color-primary-accent-fg: var(--color-fg-accent-primary);
|
|
485
486
|
--color-primary-active: var(--color-bg-primary-active);
|
|
487
|
+
--color-primary-alpha-10: oklch(0.807 0.101 250.446 / 0.1);
|
|
486
488
|
--color-primary-disabled: var(--color-bg-disabled);
|
|
487
489
|
--color-primary-hover: var(--color-bg-primary-hover);
|
|
488
490
|
--color-primary-light: var(--color-bg-light-primary-base);
|
|
@@ -741,14 +743,14 @@
|
|
|
741
743
|
--color-table-border: var(--color-border-primary);
|
|
742
744
|
--color-table-caption-fg: var(--color-fg-secondary);
|
|
743
745
|
--color-table-fg: var(--color-fg-primary);
|
|
744
|
-
--color-table-footer-bg: var(--color-
|
|
746
|
+
--color-table-footer-bg: var(--color-fill-base);
|
|
745
747
|
--color-table-footer-fg: var(--color-fg-secondary);
|
|
746
|
-
--color-table-header-bg: var(--color-
|
|
748
|
+
--color-table-header-bg: var(--color-fill-base);
|
|
747
749
|
--color-table-header-fg: var(--color-fg-primary);
|
|
748
750
|
--color-table-row-bg: var(--color-bg-transparent);
|
|
749
|
-
--color-table-row-bg-hover: var(--color-
|
|
750
|
-
--color-table-row-bg-selected: var(--color-
|
|
751
|
-
--color-table-row-striped-primary: var(--color-
|
|
751
|
+
--color-table-row-bg-hover: var(--color-fill-hover);
|
|
752
|
+
--color-table-row-bg-selected: var(--color-fill-selected);
|
|
753
|
+
--color-table-row-striped-primary: var(--color-fill-base);
|
|
752
754
|
--color-table-row-striped-secondary: var(--color-bg-transparent);
|
|
753
755
|
--color-tabs-bg: var(--color-fill-surface);
|
|
754
756
|
--color-tabs-border-base: var(--color-border-primary);
|
|
@@ -1329,6 +1331,7 @@
|
|
|
1329
1331
|
--shadow-accordion-root-md: var(--shadow-xl);
|
|
1330
1332
|
--shadow-accordion-root-sm: var(--shadow-primary);
|
|
1331
1333
|
--shadow-dialog-content: var(--shadow-primary);
|
|
1334
|
+
--shadow-gallery-trigger: var(--shadow-sm);
|
|
1332
1335
|
--shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1);
|
|
1333
1336
|
--shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1);
|
|
1334
1337
|
--shadow-menu-content: var(--shadow-lg);
|
|
@@ -1338,6 +1341,7 @@
|
|
|
1338
1341
|
--shadow-select-content: var(--shadow-md);
|
|
1339
1342
|
--shadow-slider-thumb: var(--shadow-sm);
|
|
1340
1343
|
--shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
|
|
1344
|
+
--shadow-table-outline: var(--shadow-sm);
|
|
1341
1345
|
--shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.15), 0 10px 10px rgba(0, 0, 0, 0.04);
|
|
1342
1346
|
--size-1: 0.06rem;
|
|
1343
1347
|
--size-12: 0.75rem;
|