@fluixi-ui/tokens 0.4.0-alpha.1 → 0.4.0-alpha.10

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.
Files changed (57) hide show
  1. package/dist/css/accordion.css +81 -3
  2. package/dist/css/alert.css +52 -23
  3. package/dist/css/avatar.css +19 -0
  4. package/dist/css/badge.css +129 -5
  5. package/dist/css/base.css +3 -1
  6. package/dist/css/bottom-sheet.css +4 -4
  7. package/dist/css/breadcrumb.css +1 -1
  8. package/dist/css/bulk-editor.css +2 -17
  9. package/dist/css/button.css +76 -16
  10. package/dist/css/calendar.css +9 -7
  11. package/dist/css/card.css +5 -1
  12. package/dist/css/carousel.css +80 -0
  13. package/dist/css/checkbox-radio.css +55 -1
  14. package/dist/css/date-field.css +1 -1
  15. package/dist/css/date-picker.css +2 -2
  16. package/dist/css/descriptions.css +29 -0
  17. package/dist/css/drawer.css +4 -4
  18. package/dist/css/empty.css +40 -0
  19. package/dist/css/fab.css +48 -0
  20. package/dist/css/field-variants.css +139 -0
  21. package/dist/css/file-upload.css +40 -0
  22. package/dist/css/glow.css +127 -0
  23. package/dist/css/icon-button.css +42 -0
  24. package/dist/css/image.css +67 -0
  25. package/dist/css/input.css +15 -0
  26. package/dist/css/layout.css +10 -0
  27. package/dist/css/navigation-menu.css +8 -7
  28. package/dist/css/number-field.css +3 -3
  29. package/dist/css/pagination.css +3 -3
  30. package/dist/css/parts/listbox.css +9 -4
  31. package/dist/css/pin-input.css +40 -0
  32. package/dist/css/progress.css +56 -0
  33. package/dist/css/rating.css +59 -0
  34. package/dist/css/scroll-area.css +44 -0
  35. package/dist/css/select-combobox.css +19 -4
  36. package/dist/css/sidenav.css +180 -10
  37. package/dist/css/slider.css +4 -4
  38. package/dist/css/speed-dial.css +85 -0
  39. package/dist/css/statistic.css +34 -0
  40. package/dist/css/stepper.css +3 -3
  41. package/dist/css/surface.css +71 -0
  42. package/dist/css/switch.css +12 -0
  43. package/dist/css/table.css +11 -0
  44. package/dist/css/tabs.css +10 -1
  45. package/dist/css/tags-input.css +91 -0
  46. package/dist/css/timeline.css +59 -0
  47. package/dist/css/toggle.css +6 -0
  48. package/dist/css/tree-view.css +70 -0
  49. package/dist/lib/css/index.d.ts +8 -12
  50. package/dist/lib/css/index.d.ts.map +1 -1
  51. package/dist/lib/css/index.js +19 -7
  52. package/dist/lib/reference/colors.d.ts.map +1 -1
  53. package/dist/lib/reference/colors.js +15 -1
  54. package/dist/preset.css +20 -1
  55. package/dist/tokens.css +52 -4
  56. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  57. package/package.json +2 -2
@@ -34,6 +34,12 @@
34
34
  border-color: var(--flx-ui-color-primary);
35
35
  color: var(--flx-ui-color-primary-active);
36
36
  }
37
+ :where([aria-pressed]:focus-visible) {
38
+ outline: none;
39
+ position: relative;
40
+ z-index: 2;
41
+ box-shadow: var(--flx-ui-ctl-ring);
42
+ }
37
43
  :where([aria-pressed][data-disabled]) {
38
44
  opacity: var(--flx-ui-opacity-disabled);
39
45
  pointer-events: none;
@@ -0,0 +1,70 @@
1
+ @layer flx.components {
2
+ /* Tree view (from @fluixi-ui/tree-view). Rows indent by depth via the
3
+ `--flx-tree-depth` custom property the component sets per item. */
4
+ :where([data-tree-view]),
5
+ :where([data-tree-item-group]) {
6
+ list-style: none;
7
+ margin: 0;
8
+ padding: 0;
9
+ }
10
+ :where([data-tree-item]) {
11
+ outline: none;
12
+ }
13
+ :where([data-tree-item-row]) {
14
+ display: flex;
15
+ align-items: center;
16
+ gap: var(--flx-ui-space-1);
17
+ padding: var(--flx-ui-space-1) var(--flx-ui-space-2);
18
+ padding-inline-start: calc(
19
+ var(--flx-ui-space-2) + var(--flx-tree-depth, 0) * var(--flx-ui-space-4)
20
+ );
21
+ border-radius: var(--flx-ui-radius-sm);
22
+ font-size: var(--flx-ui-font-size-sm);
23
+ color: var(--flx-ui-color-fg);
24
+ cursor: pointer;
25
+ user-select: none;
26
+ transition: background var(--flx-ui-duration-fast) var(--flx-ui-ease-standard);
27
+ }
28
+ :where([data-tree-item-row]:hover) {
29
+ background: var(--flx-ui-color-bg-subtle);
30
+ }
31
+ :where([data-tree-item][data-selected] > [data-tree-item-row]) {
32
+ background: var(--flx-ui-color-primary-subtle);
33
+ color: var(--flx-ui-color-primary);
34
+ }
35
+ :where([data-tree-item][data-disabled] > [data-tree-item-row]) {
36
+ opacity: 0.5;
37
+ cursor: not-allowed;
38
+ }
39
+ :where([data-tree-item]:focus-visible > [data-tree-item-row]) {
40
+ outline: none;
41
+ box-shadow: var(--flx-ui-ctl-ring);
42
+ }
43
+
44
+ /* Expand/collapse caret; points right, rotates down when the branch is open. */
45
+ :where([data-tree-item-indicator]) {
46
+ flex: none;
47
+ width: 0.62em;
48
+ height: 0.62em;
49
+ background: currentcolor;
50
+ opacity: 0.55;
51
+ clip-path: polygon(30% 15%, 30% 85%, 80% 50%);
52
+ transition: transform var(--flx-ui-duration-fast) var(--flx-ui-ease-standard);
53
+ }
54
+ :where([data-tree-item][data-state='expanded'] > [data-tree-item-row] [data-tree-item-indicator]) {
55
+ transform: rotate(90deg);
56
+ }
57
+ /* Keeps leaf labels aligned with branch labels. */
58
+ :where([data-tree-item-spacer]) {
59
+ flex: none;
60
+ width: 0.62em;
61
+ height: 0.62em;
62
+ }
63
+ :where([data-tree-item-label]) {
64
+ flex: 1;
65
+ min-width: 0;
66
+ overflow: hidden;
67
+ text-overflow: ellipsis;
68
+ white-space: nowrap;
69
+ }
70
+ }
@@ -1,20 +1,16 @@
1
1
  export declare const TOKEN_PREFIX = "flx-ui";
2
2
  /**
3
- * Cascade layer order (low → high): tokens (vars) → components (the default
4
- * "fluixi" look, `preset.css`) → skin (an alternate skin's overrides, e.g.
5
- * `@fluixi-ui/skin-material`). Consumer CSS stays unlayered, so it always wins.
6
- * Declared first in every stylesheet we emit so ordering is deterministic
7
- * regardless of load order; redeclarations are no-ops.
3
+ * Cascade layer order (low → high): reset (preflight — fluixi-css's reset lives
4
+ * here) → base (opinionated element defaults; also where a consumer's own reset/base
5
+ * belongs) → tokens (vars) → components (the default "fluixi" look, `preset.css`) →
6
+ * skin (an alternate skin's overrides, e.g. `@fluixi-ui/skin-material`). We reserve
7
+ * `reset`/`base` (never fill them) so a reset always sits below our components.
8
+ * Consumer CSS stays unlayered, so it always wins. Declared first in every stylesheet
9
+ * we emit so ordering is deterministic regardless of load order; redeclarations are no-ops.
8
10
  */
9
- export declare const LAYER_ORDER = "@layer flx.tokens, flx.components, flx.skin;";
11
+ export declare const LAYER_ORDER = "@layer flx.reset, flx.base, flx.tokens, flx.components, flx.skin;";
10
12
  export declare function cssVar(name: string): string;
11
13
  export declare function cssVarRef(name: string): string;
12
- /**
13
- * Generate the full token stylesheet: static reference tokens and the light
14
- * scales plus semantic aliases on `:root`, with dark and high-contrast themes
15
- * overriding only the scales (and a few semantics). Dark also applies
16
- * automatically via `prefers-color-scheme` when no explicit theme is set.
17
- */
18
14
  export declare function generateTokensCss(): string;
19
15
  export declare const tokensCss: string;
20
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/css/index.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,YAAY,WAAW,CAAC;AAErC;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,iDAAiD,CAAC;AAE1E,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C;AA4FD;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAkC1C;AAED,eAAO,MAAM,SAAS,EAAE,MAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/css/index.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,YAAY,WAAW,CAAC;AAErC;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,sEAAsE,CAAC;AAE/F,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C;AA4GD,wBAAgB,iBAAiB,IAAI,MAAM,CAmC1C;AAED,eAAO,MAAM,SAAS,EAAE,MAA4B,CAAC"}
@@ -2,13 +2,15 @@ import { staticTokens } from '../reference/index.js';
2
2
  import { accentPresets, colorScales, semanticColors, semanticOverrides, } from '../reference/colors.js';
3
3
  export const TOKEN_PREFIX = 'flx-ui';
4
4
  /**
5
- * Cascade layer order (low → high): tokens (vars) → components (the default
6
- * "fluixi" look, `preset.css`) → skin (an alternate skin's overrides, e.g.
7
- * `@fluixi-ui/skin-material`). Consumer CSS stays unlayered, so it always wins.
8
- * Declared first in every stylesheet we emit so ordering is deterministic
9
- * regardless of load order; redeclarations are no-ops.
5
+ * Cascade layer order (low → high): reset (preflight — fluixi-css's reset lives
6
+ * here) → base (opinionated element defaults; also where a consumer's own reset/base
7
+ * belongs) → tokens (vars) → components (the default "fluixi" look, `preset.css`) →
8
+ * skin (an alternate skin's overrides, e.g. `@fluixi-ui/skin-material`). We reserve
9
+ * `reset`/`base` (never fill them) so a reset always sits below our components.
10
+ * Consumer CSS stays unlayered, so it always wins. Declared first in every stylesheet
11
+ * we emit so ordering is deterministic regardless of load order; redeclarations are no-ops.
10
12
  */
11
- export const LAYER_ORDER = '@layer flx.tokens, flx.components, flx.skin;';
13
+ export const LAYER_ORDER = '@layer flx.reset, flx.base, flx.tokens, flx.components, flx.skin;';
12
14
  export function cssVar(name) {
13
15
  return `--${TOKEN_PREFIX}-${name}`;
14
16
  }
@@ -105,6 +107,15 @@ function accentBlocks(name, preset) {
105
107
  * overriding only the scales (and a few semantics). Dark also applies
106
108
  * automatically via `prefers-color-scheme` when no explicit theme is set.
107
109
  */
110
+ // A dark shadow on a dark surface is nearly invisible, so dark mode needs its
111
+ // own elevation: pure black at a much higher alpha with more spread, which reads
112
+ // as a halo of shade around a raised surface instead of a faint drop.
113
+ const darkShadows = {
114
+ [cssVar('shadow-sm')]: '0 1px 2px rgba(0, 0, 0, 0.4)',
115
+ [cssVar('shadow-md')]: '0 2px 6px rgba(0, 0, 0, 0.44), 0 1px 2px rgba(0, 0, 0, 0.3)',
116
+ [cssVar('shadow-lg')]: '0 8px 20px rgba(0, 0, 0, 0.5), 0 2px 6px rgba(0, 0, 0, 0.36)',
117
+ [cssVar('shadow-xl')]: '0 16px 36px rgba(0, 0, 0, 0.6), 0 4px 12px rgba(0, 0, 0, 0.42)',
118
+ };
108
119
  export function generateTokensCss() {
109
120
  const root = block(":root, [data-theme='light']", {
110
121
  ...staticVars(),
@@ -118,13 +129,14 @@ export function generateTokensCss() {
118
129
  ...scaleVars('dark'),
119
130
  ...semanticVars(),
120
131
  ...overrideVars('dark'),
132
+ ...darkShadows,
121
133
  });
122
134
  const highContrast = block("[data-theme='high-contrast']", {
123
135
  ...scaleVars('high-contrast'),
124
136
  ...semanticVars(),
125
137
  ...overrideVars('high-contrast'),
126
138
  });
127
- const autoDark = `@media (prefers-color-scheme: dark) {\n${block(':root:not([data-theme])', { ...scaleVars('dark'), ...semanticVars(), ...overrideVars('dark') })
139
+ const autoDark = `@media (prefers-color-scheme: dark) {\n${block(':root:not([data-theme])', { ...scaleVars('dark'), ...semanticVars(), ...overrideVars('dark'), ...darkShadows })
128
140
  .split('\n')
129
141
  .map((line) => ` ${line}`)
130
142
  .join('\n')}\n}`;
@@ -1 +1 @@
1
- {"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../../src/lib/reference/colors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,eAAe,CAAC;AAE3D,4FAA4F;AAC5F,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;AAC9D,eAAO,MAAM,cAAc,EAAE,UAAmB,CAAC;AAEjD,KAAK,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAsGpC,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQjE,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAwBjD,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAUhF,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,KAAK,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,YAAY,CAc3E,CAAC"}
1
+ {"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../../src/lib/reference/colors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,eAAe,CAAC;AAE3D,4FAA4F;AAC5F,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;AAC9D,eAAO,MAAM,cAAc,EAAE,UAAmB,CAAC;AAEjD,KAAK,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AA+GpC,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQjE,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA6BjD,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAUhF,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,KAAK,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,YAAY,CAc3E,CAAC"}
@@ -66,23 +66,32 @@ const statusLight = {
66
66
  'danger-solid': '#e5484d',
67
67
  'danger-subtle': '#feebec',
68
68
  'danger-fg': '#ffffff',
69
+ // `-text`: a darker, saturated shade that stays legible ON the `-subtle`
70
+ // background (the solid shade is too light for text — notably amber).
71
+ 'danger-text': '#cd2b31',
69
72
  'success-solid': '#30a46c',
70
73
  'success-subtle': '#e6f6ec',
71
74
  'success-fg': '#ffffff',
75
+ 'success-text': '#18794e',
72
76
  'warning-solid': '#ffb224',
73
77
  'warning-subtle': '#fff4d5',
74
78
  'warning-fg': '#1c2024',
79
+ 'warning-text': '#ad5700',
75
80
  };
76
81
  const statusDark = {
77
82
  'danger-solid': '#ff6369',
78
83
  'danger-subtle': '#3b1219',
79
84
  'danger-fg': '#ffffff',
85
+ // On dark, `-text` is a bright shade legible on the dark `-subtle` bg.
86
+ 'danger-text': '#ff9592',
80
87
  'success-solid': '#3dd68c',
81
88
  'success-subtle': '#0f291e',
82
89
  'success-fg': '#ffffff',
90
+ 'success-text': '#4cc38a',
83
91
  'warning-solid': '#ffca16',
84
92
  'warning-subtle': '#3a2e00',
85
93
  'warning-fg': '#1c2024',
94
+ 'warning-text': '#ffca16',
86
95
  };
87
96
  function scaleRecord(gray, accent, status) {
88
97
  const out = {};
@@ -104,22 +113,27 @@ export const semanticColors = {
104
113
  'color-fg': 'var(--flx-ui-gray-12)',
105
114
  'color-fg-muted': 'var(--flx-ui-gray-11)',
106
115
  'color-border': 'var(--flx-ui-gray-6)',
107
- 'color-border-strong': 'var(--flx-ui-gray-8)',
116
+ 'color-border-strong': 'var(--flx-ui-gray-7)',
108
117
  'color-focus-ring': 'var(--flx-ui-accent-8)',
109
118
  'color-primary': 'var(--flx-ui-accent-9)',
110
119
  'color-primary-hover': 'var(--flx-ui-accent-10)',
111
120
  'color-primary-active': 'var(--flx-ui-accent-11)',
112
121
  'color-primary-fg': '#ffffff',
113
122
  'color-primary-subtle': 'var(--flx-ui-accent-3)',
123
+ // Legible text shade for a tinted (subtle) background.
124
+ 'color-primary-text': 'var(--flx-ui-accent-11)',
114
125
  'color-danger': 'var(--flx-ui-danger-solid)',
115
126
  'color-danger-fg': 'var(--flx-ui-danger-fg)',
116
127
  'color-danger-subtle': 'var(--flx-ui-danger-subtle)',
128
+ 'color-danger-text': 'var(--flx-ui-danger-text)',
117
129
  'color-success': 'var(--flx-ui-success-solid)',
118
130
  'color-success-fg': 'var(--flx-ui-success-fg)',
119
131
  'color-success-subtle': 'var(--flx-ui-success-subtle)',
132
+ 'color-success-text': 'var(--flx-ui-success-text)',
120
133
  'color-warning': 'var(--flx-ui-warning-solid)',
121
134
  'color-warning-fg': 'var(--flx-ui-warning-fg)',
122
135
  'color-warning-subtle': 'var(--flx-ui-warning-subtle)',
136
+ 'color-warning-text': 'var(--flx-ui-warning-text)',
123
137
  'color-overlay': 'rgba(0, 0, 0, 0.4)',
124
138
  };
125
139
  export const semanticOverrides = {
package/dist/preset.css CHANGED
@@ -7,10 +7,15 @@
7
7
  * non-bundler consumers get every component's CSS in one import.
8
8
  */
9
9
 
10
- @layer flx.tokens, flx.components, flx.skin;
10
+ @layer flx.reset, flx.base, flx.tokens, flx.components, flx.skin;
11
11
 
12
12
  @import './css/base.css';
13
+ @import './css/layout.css';
14
+ @import './css/scroll-area.css';
13
15
  @import './css/button.css';
16
+ @import './css/icon-button.css';
17
+ @import './css/fab.css';
18
+ @import './css/speed-dial.css';
14
19
  @import './css/badge.css';
15
20
  @import './css/toggle.css';
16
21
  @import './css/toolbar.css';
@@ -18,13 +23,21 @@
18
23
  @import './css/field.css';
19
24
  @import './css/input.css';
20
25
  @import './css/number-field.css';
26
+ @import './css/pin-input.css';
27
+ @import './css/tags-input.css';
28
+ @import './css/image.css';
29
+ @import './css/file-upload.css';
21
30
  @import './css/slider.css';
22
31
  @import './css/hover-card.css';
23
32
  @import './css/alert.css';
24
33
  @import './css/skeleton.css';
25
34
  @import './css/kbd.css';
35
+ @import './css/empty.css';
36
+ @import './css/statistic.css';
37
+ @import './css/descriptions.css';
26
38
  @import './css/switch.css';
27
39
  @import './css/checkbox-radio.css';
40
+ @import './css/rating.css';
28
41
  @import './css/tabs.css';
29
42
  @import './css/accordion.css';
30
43
  @import './css/progress.css';
@@ -32,10 +45,15 @@
32
45
  @import './css/separator.css';
33
46
  @import './css/breadcrumb.css';
34
47
  @import './css/pagination.css';
48
+ @import './css/timeline.css';
49
+ @import './css/surface.css';
35
50
  @import './css/card.css';
51
+ @import './css/glow.css';
36
52
  @import './css/aspect-ratio.css';
53
+ @import './css/carousel.css';
37
54
  @import './css/stepper.css';
38
55
  @import './css/select-combobox.css';
56
+ @import './css/field-variants.css';
39
57
  @import './css/parts/listbox.css';
40
58
  @import './css/parts/overlays.css';
41
59
  @import './css/drawer.css';
@@ -44,6 +62,7 @@
44
62
  @import './css/menubar.css';
45
63
  @import './css/navigation-menu.css';
46
64
  @import './css/sidenav.css';
65
+ @import './css/tree-view.css';
47
66
  @import './css/toast.css';
48
67
  @import './css/command.css';
49
68
  @import './css/tooltip.css';
package/dist/tokens.css CHANGED
@@ -1,4 +1,4 @@
1
- @layer flx.tokens, flx.components, flx.skin;
1
+ @layer flx.reset, flx.base, flx.tokens, flx.components, flx.skin;
2
2
 
3
3
  @layer flx.tokens {
4
4
  :root, [data-theme='light'] {
@@ -117,34 +117,41 @@
117
117
  --flx-ui-danger-solid: #e5484d;
118
118
  --flx-ui-danger-subtle: #feebec;
119
119
  --flx-ui-danger-fg: #ffffff;
120
+ --flx-ui-danger-text: #cd2b31;
120
121
  --flx-ui-success-solid: #30a46c;
121
122
  --flx-ui-success-subtle: #e6f6ec;
122
123
  --flx-ui-success-fg: #ffffff;
124
+ --flx-ui-success-text: #18794e;
123
125
  --flx-ui-warning-solid: #ffb224;
124
126
  --flx-ui-warning-subtle: #fff4d5;
125
127
  --flx-ui-warning-fg: #1c2024;
128
+ --flx-ui-warning-text: #ad5700;
126
129
  --flx-ui-color-bg: var(--flx-ui-gray-1);
127
130
  --flx-ui-color-bg-subtle: var(--flx-ui-gray-2);
128
131
  --flx-ui-color-bg-muted: var(--flx-ui-gray-3);
129
132
  --flx-ui-color-fg: var(--flx-ui-gray-12);
130
133
  --flx-ui-color-fg-muted: var(--flx-ui-gray-11);
131
134
  --flx-ui-color-border: var(--flx-ui-gray-6);
132
- --flx-ui-color-border-strong: var(--flx-ui-gray-8);
135
+ --flx-ui-color-border-strong: var(--flx-ui-gray-7);
133
136
  --flx-ui-color-focus-ring: var(--flx-ui-accent-8);
134
137
  --flx-ui-color-primary: var(--flx-ui-accent-9);
135
138
  --flx-ui-color-primary-hover: var(--flx-ui-accent-10);
136
139
  --flx-ui-color-primary-active: var(--flx-ui-accent-11);
137
140
  --flx-ui-color-primary-fg: #ffffff;
138
141
  --flx-ui-color-primary-subtle: var(--flx-ui-accent-3);
142
+ --flx-ui-color-primary-text: var(--flx-ui-accent-11);
139
143
  --flx-ui-color-danger: var(--flx-ui-danger-solid);
140
144
  --flx-ui-color-danger-fg: var(--flx-ui-danger-fg);
141
145
  --flx-ui-color-danger-subtle: var(--flx-ui-danger-subtle);
146
+ --flx-ui-color-danger-text: var(--flx-ui-danger-text);
142
147
  --flx-ui-color-success: var(--flx-ui-success-solid);
143
148
  --flx-ui-color-success-fg: var(--flx-ui-success-fg);
144
149
  --flx-ui-color-success-subtle: var(--flx-ui-success-subtle);
150
+ --flx-ui-color-success-text: var(--flx-ui-success-text);
145
151
  --flx-ui-color-warning: var(--flx-ui-warning-solid);
146
152
  --flx-ui-color-warning-fg: var(--flx-ui-warning-fg);
147
153
  --flx-ui-color-warning-subtle: var(--flx-ui-warning-subtle);
154
+ --flx-ui-color-warning-text: var(--flx-ui-warning-text);
148
155
  --flx-ui-color-overlay: rgba(0, 0, 0, 0.4);
149
156
  }
150
157
 
@@ -176,35 +183,46 @@
176
183
  --flx-ui-danger-solid: #ff6369;
177
184
  --flx-ui-danger-subtle: #3b1219;
178
185
  --flx-ui-danger-fg: #ffffff;
186
+ --flx-ui-danger-text: #ff9592;
179
187
  --flx-ui-success-solid: #3dd68c;
180
188
  --flx-ui-success-subtle: #0f291e;
181
189
  --flx-ui-success-fg: #ffffff;
190
+ --flx-ui-success-text: #4cc38a;
182
191
  --flx-ui-warning-solid: #ffca16;
183
192
  --flx-ui-warning-subtle: #3a2e00;
184
193
  --flx-ui-warning-fg: #1c2024;
194
+ --flx-ui-warning-text: #ffca16;
185
195
  --flx-ui-color-bg: var(--flx-ui-gray-1);
186
196
  --flx-ui-color-bg-subtle: var(--flx-ui-gray-2);
187
197
  --flx-ui-color-bg-muted: var(--flx-ui-gray-3);
188
198
  --flx-ui-color-fg: var(--flx-ui-gray-12);
189
199
  --flx-ui-color-fg-muted: var(--flx-ui-gray-11);
190
200
  --flx-ui-color-border: var(--flx-ui-gray-6);
191
- --flx-ui-color-border-strong: var(--flx-ui-gray-8);
201
+ --flx-ui-color-border-strong: var(--flx-ui-gray-7);
192
202
  --flx-ui-color-focus-ring: var(--flx-ui-accent-8);
193
203
  --flx-ui-color-primary: var(--flx-ui-accent-9);
194
204
  --flx-ui-color-primary-hover: var(--flx-ui-accent-10);
195
205
  --flx-ui-color-primary-active: var(--flx-ui-accent-11);
196
206
  --flx-ui-color-primary-fg: #ffffff;
197
207
  --flx-ui-color-primary-subtle: var(--flx-ui-accent-3);
208
+ --flx-ui-color-primary-text: var(--flx-ui-accent-11);
198
209
  --flx-ui-color-danger: var(--flx-ui-danger-solid);
199
210
  --flx-ui-color-danger-fg: var(--flx-ui-danger-fg);
200
211
  --flx-ui-color-danger-subtle: var(--flx-ui-danger-subtle);
212
+ --flx-ui-color-danger-text: var(--flx-ui-danger-text);
201
213
  --flx-ui-color-success: var(--flx-ui-success-solid);
202
214
  --flx-ui-color-success-fg: var(--flx-ui-success-fg);
203
215
  --flx-ui-color-success-subtle: var(--flx-ui-success-subtle);
216
+ --flx-ui-color-success-text: var(--flx-ui-success-text);
204
217
  --flx-ui-color-warning: var(--flx-ui-warning-solid);
205
218
  --flx-ui-color-warning-fg: var(--flx-ui-warning-fg);
206
219
  --flx-ui-color-warning-subtle: var(--flx-ui-warning-subtle);
220
+ --flx-ui-color-warning-text: var(--flx-ui-warning-text);
207
221
  --flx-ui-color-overlay: rgba(0, 0, 0, 0.6);
222
+ --flx-ui-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.4);
223
+ --flx-ui-shadow-md: 0 2px 6px rgba(0, 0, 0, 0.44), 0 1px 2px rgba(0, 0, 0, 0.3);
224
+ --flx-ui-shadow-lg: 0 8px 20px rgba(0, 0, 0, 0.5), 0 2px 6px rgba(0, 0, 0, 0.36);
225
+ --flx-ui-shadow-xl: 0 16px 36px rgba(0, 0, 0, 0.6), 0 4px 12px rgba(0, 0, 0, 0.42);
208
226
  }
209
227
 
210
228
  [data-theme='high-contrast'] {
@@ -235,12 +253,15 @@
235
253
  --flx-ui-danger-solid: #e5484d;
236
254
  --flx-ui-danger-subtle: #feebec;
237
255
  --flx-ui-danger-fg: #ffffff;
256
+ --flx-ui-danger-text: #cd2b31;
238
257
  --flx-ui-success-solid: #30a46c;
239
258
  --flx-ui-success-subtle: #e6f6ec;
240
259
  --flx-ui-success-fg: #ffffff;
260
+ --flx-ui-success-text: #18794e;
241
261
  --flx-ui-warning-solid: #ffb224;
242
262
  --flx-ui-warning-subtle: #fff4d5;
243
263
  --flx-ui-warning-fg: #1c2024;
264
+ --flx-ui-warning-text: #ad5700;
244
265
  --flx-ui-color-bg: var(--flx-ui-gray-1);
245
266
  --flx-ui-color-bg-subtle: var(--flx-ui-gray-2);
246
267
  --flx-ui-color-bg-muted: var(--flx-ui-gray-3);
@@ -254,15 +275,19 @@
254
275
  --flx-ui-color-primary-active: var(--flx-ui-accent-11);
255
276
  --flx-ui-color-primary-fg: #ffffff;
256
277
  --flx-ui-color-primary-subtle: var(--flx-ui-accent-3);
278
+ --flx-ui-color-primary-text: var(--flx-ui-accent-11);
257
279
  --flx-ui-color-danger: var(--flx-ui-danger-solid);
258
280
  --flx-ui-color-danger-fg: var(--flx-ui-danger-fg);
259
281
  --flx-ui-color-danger-subtle: var(--flx-ui-danger-subtle);
282
+ --flx-ui-color-danger-text: var(--flx-ui-danger-text);
260
283
  --flx-ui-color-success: var(--flx-ui-success-solid);
261
284
  --flx-ui-color-success-fg: var(--flx-ui-success-fg);
262
285
  --flx-ui-color-success-subtle: var(--flx-ui-success-subtle);
286
+ --flx-ui-color-success-text: var(--flx-ui-success-text);
263
287
  --flx-ui-color-warning: var(--flx-ui-warning-solid);
264
288
  --flx-ui-color-warning-fg: var(--flx-ui-warning-fg);
265
289
  --flx-ui-color-warning-subtle: var(--flx-ui-warning-subtle);
290
+ --flx-ui-color-warning-text: var(--flx-ui-warning-text);
266
291
  --flx-ui-color-overlay: rgba(0, 0, 0, 0.4);
267
292
  }
268
293
 
@@ -295,35 +320,46 @@
295
320
  --flx-ui-danger-solid: #ff6369;
296
321
  --flx-ui-danger-subtle: #3b1219;
297
322
  --flx-ui-danger-fg: #ffffff;
323
+ --flx-ui-danger-text: #ff9592;
298
324
  --flx-ui-success-solid: #3dd68c;
299
325
  --flx-ui-success-subtle: #0f291e;
300
326
  --flx-ui-success-fg: #ffffff;
327
+ --flx-ui-success-text: #4cc38a;
301
328
  --flx-ui-warning-solid: #ffca16;
302
329
  --flx-ui-warning-subtle: #3a2e00;
303
330
  --flx-ui-warning-fg: #1c2024;
331
+ --flx-ui-warning-text: #ffca16;
304
332
  --flx-ui-color-bg: var(--flx-ui-gray-1);
305
333
  --flx-ui-color-bg-subtle: var(--flx-ui-gray-2);
306
334
  --flx-ui-color-bg-muted: var(--flx-ui-gray-3);
307
335
  --flx-ui-color-fg: var(--flx-ui-gray-12);
308
336
  --flx-ui-color-fg-muted: var(--flx-ui-gray-11);
309
337
  --flx-ui-color-border: var(--flx-ui-gray-6);
310
- --flx-ui-color-border-strong: var(--flx-ui-gray-8);
338
+ --flx-ui-color-border-strong: var(--flx-ui-gray-7);
311
339
  --flx-ui-color-focus-ring: var(--flx-ui-accent-8);
312
340
  --flx-ui-color-primary: var(--flx-ui-accent-9);
313
341
  --flx-ui-color-primary-hover: var(--flx-ui-accent-10);
314
342
  --flx-ui-color-primary-active: var(--flx-ui-accent-11);
315
343
  --flx-ui-color-primary-fg: #ffffff;
316
344
  --flx-ui-color-primary-subtle: var(--flx-ui-accent-3);
345
+ --flx-ui-color-primary-text: var(--flx-ui-accent-11);
317
346
  --flx-ui-color-danger: var(--flx-ui-danger-solid);
318
347
  --flx-ui-color-danger-fg: var(--flx-ui-danger-fg);
319
348
  --flx-ui-color-danger-subtle: var(--flx-ui-danger-subtle);
349
+ --flx-ui-color-danger-text: var(--flx-ui-danger-text);
320
350
  --flx-ui-color-success: var(--flx-ui-success-solid);
321
351
  --flx-ui-color-success-fg: var(--flx-ui-success-fg);
322
352
  --flx-ui-color-success-subtle: var(--flx-ui-success-subtle);
353
+ --flx-ui-color-success-text: var(--flx-ui-success-text);
323
354
  --flx-ui-color-warning: var(--flx-ui-warning-solid);
324
355
  --flx-ui-color-warning-fg: var(--flx-ui-warning-fg);
325
356
  --flx-ui-color-warning-subtle: var(--flx-ui-warning-subtle);
357
+ --flx-ui-color-warning-text: var(--flx-ui-warning-text);
326
358
  --flx-ui-color-overlay: rgba(0, 0, 0, 0.6);
359
+ --flx-ui-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.4);
360
+ --flx-ui-shadow-md: 0 2px 6px rgba(0, 0, 0, 0.44), 0 1px 2px rgba(0, 0, 0, 0.3);
361
+ --flx-ui-shadow-lg: 0 8px 20px rgba(0, 0, 0, 0.5), 0 2px 6px rgba(0, 0, 0, 0.36);
362
+ --flx-ui-shadow-xl: 0 16px 36px rgba(0, 0, 0, 0.6), 0 4px 12px rgba(0, 0, 0, 0.42);
327
363
  }
328
364
  }
329
365
 
@@ -345,6 +381,7 @@
345
381
  --flx-ui-color-primary-hover: var(--flx-ui-accent-10);
346
382
  --flx-ui-color-primary-active: var(--flx-ui-accent-11);
347
383
  --flx-ui-color-primary-subtle: var(--flx-ui-accent-3);
384
+ --flx-ui-color-primary-text: var(--flx-ui-accent-11);
348
385
  }
349
386
 
350
387
  [data-theme='dark'][data-accent='violet'] {
@@ -365,6 +402,7 @@
365
402
  --flx-ui-color-primary-hover: var(--flx-ui-accent-10);
366
403
  --flx-ui-color-primary-active: var(--flx-ui-accent-11);
367
404
  --flx-ui-color-primary-subtle: var(--flx-ui-accent-3);
405
+ --flx-ui-color-primary-text: var(--flx-ui-accent-11);
368
406
  }
369
407
 
370
408
  [data-theme='high-contrast'][data-accent='violet'] {
@@ -385,6 +423,7 @@
385
423
  --flx-ui-color-primary-hover: var(--flx-ui-accent-10);
386
424
  --flx-ui-color-primary-active: var(--flx-ui-accent-11);
387
425
  --flx-ui-color-primary-subtle: var(--flx-ui-accent-3);
426
+ --flx-ui-color-primary-text: var(--flx-ui-accent-11);
388
427
  }
389
428
 
390
429
  @media (prefers-color-scheme: dark) {
@@ -406,6 +445,7 @@
406
445
  --flx-ui-color-primary-hover: var(--flx-ui-accent-10);
407
446
  --flx-ui-color-primary-active: var(--flx-ui-accent-11);
408
447
  --flx-ui-color-primary-subtle: var(--flx-ui-accent-3);
448
+ --flx-ui-color-primary-text: var(--flx-ui-accent-11);
409
449
  }
410
450
  }
411
451
 
@@ -427,6 +467,7 @@
427
467
  --flx-ui-color-primary-hover: var(--flx-ui-accent-10);
428
468
  --flx-ui-color-primary-active: var(--flx-ui-accent-11);
429
469
  --flx-ui-color-primary-subtle: var(--flx-ui-accent-3);
470
+ --flx-ui-color-primary-text: var(--flx-ui-accent-11);
430
471
  }
431
472
 
432
473
  [data-theme='dark'][data-accent='rose'] {
@@ -447,6 +488,7 @@
447
488
  --flx-ui-color-primary-hover: var(--flx-ui-accent-10);
448
489
  --flx-ui-color-primary-active: var(--flx-ui-accent-11);
449
490
  --flx-ui-color-primary-subtle: var(--flx-ui-accent-3);
491
+ --flx-ui-color-primary-text: var(--flx-ui-accent-11);
450
492
  }
451
493
 
452
494
  [data-theme='high-contrast'][data-accent='rose'] {
@@ -467,6 +509,7 @@
467
509
  --flx-ui-color-primary-hover: var(--flx-ui-accent-10);
468
510
  --flx-ui-color-primary-active: var(--flx-ui-accent-11);
469
511
  --flx-ui-color-primary-subtle: var(--flx-ui-accent-3);
512
+ --flx-ui-color-primary-text: var(--flx-ui-accent-11);
470
513
  }
471
514
 
472
515
  @media (prefers-color-scheme: dark) {
@@ -488,6 +531,7 @@
488
531
  --flx-ui-color-primary-hover: var(--flx-ui-accent-10);
489
532
  --flx-ui-color-primary-active: var(--flx-ui-accent-11);
490
533
  --flx-ui-color-primary-subtle: var(--flx-ui-accent-3);
534
+ --flx-ui-color-primary-text: var(--flx-ui-accent-11);
491
535
  }
492
536
  }
493
537
 
@@ -510,6 +554,7 @@
510
554
  --flx-ui-color-primary-hover: var(--flx-ui-accent-10);
511
555
  --flx-ui-color-primary-active: var(--flx-ui-accent-11);
512
556
  --flx-ui-color-primary-subtle: var(--flx-ui-accent-3);
557
+ --flx-ui-color-primary-text: var(--flx-ui-accent-11);
513
558
  }
514
559
 
515
560
  [data-theme='dark'][data-accent='green'] {
@@ -531,6 +576,7 @@
531
576
  --flx-ui-color-primary-hover: var(--flx-ui-accent-10);
532
577
  --flx-ui-color-primary-active: var(--flx-ui-accent-11);
533
578
  --flx-ui-color-primary-subtle: var(--flx-ui-accent-3);
579
+ --flx-ui-color-primary-text: var(--flx-ui-accent-11);
534
580
  }
535
581
 
536
582
  [data-theme='high-contrast'][data-accent='green'] {
@@ -552,6 +598,7 @@
552
598
  --flx-ui-color-primary-hover: var(--flx-ui-accent-10);
553
599
  --flx-ui-color-primary-active: var(--flx-ui-accent-11);
554
600
  --flx-ui-color-primary-subtle: var(--flx-ui-accent-3);
601
+ --flx-ui-color-primary-text: var(--flx-ui-accent-11);
555
602
  }
556
603
 
557
604
  @media (prefers-color-scheme: dark) {
@@ -574,6 +621,7 @@
574
621
  --flx-ui-color-primary-hover: var(--flx-ui-accent-10);
575
622
  --flx-ui-color-primary-active: var(--flx-ui-accent-11);
576
623
  --flx-ui-color-primary-subtle: var(--flx-ui-accent-3);
624
+ --flx-ui-color-primary-text: var(--flx-ui-accent-11);
577
625
  }
578
626
  }
579
627
  }