@dxos/ui-theme 0.8.4-staging.ac66bdf99f → 0.9.1-main.c7dcc2e112

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 (169) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/browser/index.mjs +89 -867
  4. package/dist/lib/browser/index.mjs.map +4 -4
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/node-esm/index.mjs +89 -867
  7. package/dist/lib/node-esm/index.mjs.map +4 -4
  8. package/dist/lib/node-esm/meta.json +1 -1
  9. package/dist/plugin/node-cjs/main.css +279 -120
  10. package/dist/plugin/node-cjs/main.css.map +3 -3
  11. package/dist/plugin/node-cjs/meta.json +1 -1
  12. package/dist/plugin/node-cjs/plugins/ThemePlugin.cjs +82 -10
  13. package/dist/plugin/node-cjs/plugins/ThemePlugin.cjs.map +3 -3
  14. package/dist/plugin/node-esm/main.css +279 -120
  15. package/dist/plugin/node-esm/main.css.map +3 -3
  16. package/dist/plugin/node-esm/meta.json +1 -1
  17. package/dist/plugin/node-esm/plugins/ThemePlugin.mjs +84 -12
  18. package/dist/plugin/node-esm/plugins/ThemePlugin.mjs.map +3 -3
  19. package/dist/types/src/Theme.stories.d.ts.map +1 -1
  20. package/dist/types/src/defs.d.ts +1 -1
  21. package/dist/types/src/defs.d.ts.map +1 -1
  22. package/dist/types/src/fragments/density.d.ts +2 -2
  23. package/dist/types/src/fragments/density.d.ts.map +1 -1
  24. package/dist/types/src/fragments/hover.d.ts +0 -1
  25. package/dist/types/src/fragments/hover.d.ts.map +1 -1
  26. package/dist/types/src/index.d.ts +0 -1
  27. package/dist/types/src/index.d.ts.map +1 -1
  28. package/dist/types/src/plugins/ThemePlugin.d.ts +3 -2
  29. package/dist/types/src/plugins/ThemePlugin.d.ts.map +1 -1
  30. package/dist/types/src/util/hash-styles.d.ts +12 -2
  31. package/dist/types/src/util/hash-styles.d.ts.map +1 -1
  32. package/dist/types/src/util/mx.d.ts +0 -36
  33. package/dist/types/src/util/mx.d.ts.map +1 -1
  34. package/dist/types/src/util/size.d.ts.map +1 -1
  35. package/dist/types/src/util/valence.d.ts +8 -2
  36. package/dist/types/src/util/valence.d.ts.map +1 -1
  37. package/dist/types/tsconfig.tsbuildinfo +1 -1
  38. package/package.json +14 -21
  39. package/src/Theme.stories.tsx +94 -27
  40. package/src/css/DESIGN_SYSTEM.md +187 -0
  41. package/src/css/base/base.css +2 -2
  42. package/src/css/components/button.css +57 -12
  43. package/src/css/components/card.css +14 -0
  44. package/src/css/components/checkbox.css +3 -3
  45. package/src/css/components/focus.css +12 -12
  46. package/src/css/components/link.css +4 -1
  47. package/src/css/components/panel.css +45 -45
  48. package/src/css/components/state.css +76 -0
  49. package/src/css/components/state.md +101 -0
  50. package/src/css/components/surface.css +86 -11
  51. package/src/css/components/tag.css +25 -24
  52. package/src/css/integrations/codemirror.css +4 -3
  53. package/src/css/integrations/tldraw.css +1 -1
  54. package/src/css/layout/main.css +6 -0
  55. package/src/css/layout/size.css +17 -4
  56. package/src/css/theme/animation.css +31 -0
  57. package/src/css/theme/palette.css +34 -0
  58. package/src/css/theme/semantic.css +190 -68
  59. package/src/css/theme/spacing.css +30 -13
  60. package/src/css/theme/styles.css +172 -119
  61. package/src/css/utilities.css +42 -0
  62. package/src/defs.ts +3 -1
  63. package/src/fragments/AUDIT.md +0 -2
  64. package/src/fragments/density.ts +34 -7
  65. package/src/fragments/hover.ts +0 -2
  66. package/src/index.ts +1 -1
  67. package/src/main.css +68 -9
  68. package/src/plugins/ThemePlugin.ts +102 -14
  69. package/src/plugins/main.css +10 -7
  70. package/src/util/hash-styles.ts +54 -42
  71. package/src/util/mx.ts +1 -126
  72. package/src/util/valence.ts +15 -5
  73. package/dist/types/src/theme/components/avatar.d.ts +0 -21
  74. package/dist/types/src/theme/components/avatar.d.ts.map +0 -1
  75. package/dist/types/src/theme/components/breadcrumb.d.ts +0 -9
  76. package/dist/types/src/theme/components/breadcrumb.d.ts.map +0 -1
  77. package/dist/types/src/theme/components/button.d.ts +0 -15
  78. package/dist/types/src/theme/components/button.d.ts.map +0 -1
  79. package/dist/types/src/theme/components/card.d.ts +0 -12
  80. package/dist/types/src/theme/components/card.d.ts.map +0 -1
  81. package/dist/types/src/theme/components/dialog.d.ts +0 -17
  82. package/dist/types/src/theme/components/dialog.d.ts.map +0 -1
  83. package/dist/types/src/theme/components/focus.d.ts +0 -6
  84. package/dist/types/src/theme/components/focus.d.ts.map +0 -1
  85. package/dist/types/src/theme/components/icon-button.d.ts +0 -8
  86. package/dist/types/src/theme/components/icon-button.d.ts.map +0 -1
  87. package/dist/types/src/theme/components/icon.d.ts +0 -10
  88. package/dist/types/src/theme/components/icon.d.ts.map +0 -1
  89. package/dist/types/src/theme/components/index.d.ts +0 -27
  90. package/dist/types/src/theme/components/index.d.ts.map +0 -1
  91. package/dist/types/src/theme/components/input.d.ts +0 -115
  92. package/dist/types/src/theme/components/input.d.ts.map +0 -1
  93. package/dist/types/src/theme/components/link.d.ts +0 -7
  94. package/dist/types/src/theme/components/link.d.ts.map +0 -1
  95. package/dist/types/src/theme/components/list.d.ts +0 -14
  96. package/dist/types/src/theme/components/list.d.ts.map +0 -1
  97. package/dist/types/src/theme/components/main.d.ts +0 -28
  98. package/dist/types/src/theme/components/main.d.ts.map +0 -1
  99. package/dist/types/src/theme/components/menu.d.ts +0 -13
  100. package/dist/types/src/theme/components/menu.d.ts.map +0 -1
  101. package/dist/types/src/theme/components/message.d.ts +0 -12
  102. package/dist/types/src/theme/components/message.d.ts.map +0 -1
  103. package/dist/types/src/theme/components/popover.d.ts +0 -11
  104. package/dist/types/src/theme/components/popover.d.ts.map +0 -1
  105. package/dist/types/src/theme/components/scroll-area.d.ts +0 -32
  106. package/dist/types/src/theme/components/scroll-area.d.ts.map +0 -1
  107. package/dist/types/src/theme/components/select.d.ts +0 -13
  108. package/dist/types/src/theme/components/select.d.ts.map +0 -1
  109. package/dist/types/src/theme/components/separator.d.ts +0 -8
  110. package/dist/types/src/theme/components/separator.d.ts.map +0 -1
  111. package/dist/types/src/theme/components/skeleton.d.ts +0 -7
  112. package/dist/types/src/theme/components/skeleton.d.ts.map +0 -1
  113. package/dist/types/src/theme/components/splitter.d.ts +0 -4
  114. package/dist/types/src/theme/components/splitter.d.ts.map +0 -1
  115. package/dist/types/src/theme/components/status.d.ts +0 -9
  116. package/dist/types/src/theme/components/status.d.ts.map +0 -1
  117. package/dist/types/src/theme/components/tag.d.ts +0 -7
  118. package/dist/types/src/theme/components/tag.d.ts.map +0 -1
  119. package/dist/types/src/theme/components/toast.d.ts +0 -12
  120. package/dist/types/src/theme/components/toast.d.ts.map +0 -1
  121. package/dist/types/src/theme/components/toolbar.d.ts +0 -11
  122. package/dist/types/src/theme/components/toolbar.d.ts.map +0 -1
  123. package/dist/types/src/theme/components/tooltip.d.ts +0 -8
  124. package/dist/types/src/theme/components/tooltip.d.ts.map +0 -1
  125. package/dist/types/src/theme/components/treegrid.d.ts +0 -10
  126. package/dist/types/src/theme/components/treegrid.d.ts.map +0 -1
  127. package/dist/types/src/theme/index.d.ts +0 -4
  128. package/dist/types/src/theme/index.d.ts.map +0 -1
  129. package/dist/types/src/theme/primitives/column.d.ts +0 -29
  130. package/dist/types/src/theme/primitives/column.d.ts.map +0 -1
  131. package/dist/types/src/theme/primitives/index.d.ts +0 -3
  132. package/dist/types/src/theme/primitives/index.d.ts.map +0 -1
  133. package/dist/types/src/theme/primitives/panel.d.ts +0 -13
  134. package/dist/types/src/theme/primitives/panel.d.ts.map +0 -1
  135. package/dist/types/src/theme/theme.d.ts +0 -5
  136. package/dist/types/src/theme/theme.d.ts.map +0 -1
  137. package/src/css/components/selected.css +0 -30
  138. package/src/theme/components/avatar.ts +0 -95
  139. package/src/theme/components/breadcrumb.ts +0 -29
  140. package/src/theme/components/button.ts +0 -48
  141. package/src/theme/components/card.ts +0 -102
  142. package/src/theme/components/dialog.ts +0 -61
  143. package/src/theme/components/focus.ts +0 -33
  144. package/src/theme/components/icon-button.ts +0 -18
  145. package/src/theme/components/icon.ts +0 -28
  146. package/src/theme/components/index.ts +0 -30
  147. package/src/theme/components/input.ts +0 -171
  148. package/src/theme/components/link.ts +0 -25
  149. package/src/theme/components/list.ts +0 -46
  150. package/src/theme/components/main.ts +0 -34
  151. package/src/theme/components/menu.ts +0 -50
  152. package/src/theme/components/message.ts +0 -40
  153. package/src/theme/components/popover.ts +0 -41
  154. package/src/theme/components/scroll-area.ts +0 -115
  155. package/src/theme/components/select.ts +0 -52
  156. package/src/theme/components/separator.ts +0 -24
  157. package/src/theme/components/skeleton.ts +0 -23
  158. package/src/theme/components/splitter.ts +0 -20
  159. package/src/theme/components/status.ts +0 -32
  160. package/src/theme/components/tag.ts +0 -23
  161. package/src/theme/components/toast.ts +0 -53
  162. package/src/theme/components/toolbar.ts +0 -35
  163. package/src/theme/components/tooltip.ts +0 -27
  164. package/src/theme/components/treegrid.ts +0 -37
  165. package/src/theme/index.ts +0 -7
  166. package/src/theme/primitives/column.ts +0 -71
  167. package/src/theme/primitives/index.ts +0 -6
  168. package/src/theme/primitives/panel.ts +0 -43
  169. package/src/theme/theme.ts +0 -87
@@ -31,10 +31,10 @@
31
31
  /** Minimal trim to allow for ring/outline. */
32
32
  --spacing-form-chrome: var(--spacing-trim-xs);
33
33
  --spacing-form-gap: var(--spacing-trim-sm);
34
- --spacing-form-section-gap: var(--spacing-trim-lg);
34
+ --spacing-form-section-gap: var(--spacing-trim-md);
35
35
 
36
36
  /**
37
- * Density: fine
37
+ * Density: md (default).
38
38
  */
39
39
  --spacing-form-padding: var(--spacing-trim-sm);
40
40
  --spacing-icon-button-padding: var(--spacing-trim-xs);
@@ -43,15 +43,31 @@
43
43
 
44
44
  @layer dx-tokens {
45
45
  /**
46
- * TODO(burdon): Density: coarse
46
+ * Density: lg — large touch targets (~40px controls).
47
47
  */
48
- /*
49
- .dx-density-coarse {
48
+ .dx-density-lg {
50
49
  --spacing-form-padding: var(--spacing-trim-md);
51
50
  --spacing-icon-button-padding: var(--spacing-trim-sm);
52
51
  --spacing-scroll-padding: 8px;
53
52
  }
54
- */
53
+
54
+ /**
55
+ * Density: sm — compact (~28px controls).
56
+ */
57
+ .dx-density-sm {
58
+ --spacing-form-padding: var(--spacing-trim-xs);
59
+ --spacing-icon-button-padding: var(--spacing-trim-xs);
60
+ --spacing-scroll-padding: 2px;
61
+ }
62
+
63
+ /**
64
+ * Density: xs — ultra-compact (~24px controls).
65
+ */
66
+ .dx-density-xs {
67
+ --spacing-form-padding: var(--spacing-trim-xs);
68
+ --spacing-icon-button-padding: var(--spacing-trim-xs);
69
+ --spacing-scroll-padding: 2px;
70
+ }
55
71
  }
56
72
 
57
73
  /**
@@ -69,9 +85,9 @@
69
85
  --dx-lacuna-6: 0.75rem;
70
86
 
71
87
  --dx-gutter-xs: 0.25rem; /* Input rings */
72
- --dx-gutter-sm: 1rem;
73
- --dx-gutter-md: 2rem; /* 32px (fine card) */
74
- --dx-gutter-lg: 2.5rem; /* 40px (dialog, coarse card) */
88
+ --dx-gutter-sm: 1rem; /* 16px (sm density card) */
89
+ --dx-gutter-md: 2rem; /* 32px (md density card — default) */
90
+ --dx-gutter-lg: 2.5rem; /* 40px (dialog, lg density card) */
75
91
  }
76
92
 
77
93
  :root {
@@ -91,10 +107,11 @@
91
107
  --dx-modal-line: var(--dx-hair-line);
92
108
  --dx-grid-focus-indicator-width: var(--dx-hair-line);
93
109
 
94
- --dx-input-fine: var(--dx-lacuna-3);
95
- --dx-input-coarse: var(--dx-lacuna-4);
110
+ --dx-input-md: var(--dx-lacuna-3);
111
+ --dx-input-lg: var(--dx-lacuna-4);
112
+ --dx-input-sm: var(--dx-lacuna-3);
96
113
 
97
- --dx-default-icons-size: 1.25rem; /* size=5 */
114
+ --dx-default-icons-size: 1rem; /* size=4 */
98
115
  }
99
116
 
100
117
  [data-grid-focus-indicator-variant='stack'] {
@@ -124,7 +141,7 @@
124
141
  --dx-l0-avatar-size: 3rem;
125
142
  --dx-l1-size: calc(var(--dx-nav-sidebar-size) - var(--dx-l0-size));
126
143
  --dx-r0-size: var(--dx-rail-size);
127
- --dx-r1-size: calc(var(--dx-complementary-sidebar-size) - var(--dx-r0-size));
144
+ --dx-r1-size: calc(var(--dx-complementary-sidebar-size) - var(--dx-r0-size) - 1px);
128
145
  }
129
146
 
130
147
  :root {
@@ -1,145 +1,198 @@
1
1
  /**
2
- * Color styles
2
+ * Color styles.
3
+ *
4
+ * Roles:
5
+ * -bg background fill (e.g., button)
6
+ * -bg-hover hover background fill
7
+ * -fg foreground for text on surface
8
+ * -surface background for surface
9
+ * -text text on base surface
10
+ * -border border for surface
11
+ *
12
+ * Hue/role tokens: each hue exposes bg / bg-hover / surface / fg / text / border.
13
+ * `fg` is the on-color for a colored bg/surface; `text` is the hue as standalone
14
+ * colored text on the neutral background. Semantic names (primary, error, …) alias a source hue.
15
+ *
16
+ * These tokens are literal custom properties on disk (not expanded at PostCSS time) because
17
+ * several pipelines read the theme without our Vite plugin chain — notably Tailwind's
18
+ * `@reference "…/main.css"` loader used by the lit-* packages, and tailwindcss's design-system
19
+ * loader used in tests. Edit them here directly.
3
20
  */
4
21
 
5
22
  @theme {
6
23
  /*
7
- * Semantic
24
+ * Semantic — each name aliases a source hue.
8
25
  */
9
26
 
10
- --color-info-fill: var(--color-cyan-fill);
27
+ --color-primary-bg: var(--color-blue-bg);
28
+ --color-primary-bg-hover: var(--color-blue-bg-hover);
29
+ --color-primary-fg: var(--color-blue-fg);
30
+ --color-primary-surface: var(--color-blue-surface);
31
+ --color-primary-text: var(--color-blue-text);
32
+ --color-primary-border: var(--color-blue-border);
33
+
34
+ --color-secondary-bg: var(--color-green-bg);
35
+ --color-secondary-bg-hover: var(--color-green-bg-hover);
36
+ --color-secondary-fg: var(--color-green-fg);
37
+ --color-secondary-surface: var(--color-green-surface);
38
+ --color-secondary-text: var(--color-green-text);
39
+ --color-secondary-border: var(--color-green-border);
40
+
41
+ --color-info-bg: var(--color-cyan-bg);
42
+ --color-info-bg-hover: var(--color-cyan-bg-hover);
43
+ --color-info-fg: var(--color-cyan-fg);
11
44
  --color-info-surface: var(--color-cyan-surface);
12
- --color-info-surface-text: var(--color-cyan-surface-text);
13
45
  --color-info-text: var(--color-cyan-text);
14
46
  --color-info-border: var(--color-cyan-border);
15
47
 
16
- --color-success-fill: var(--color-emerald-fill);
48
+ --color-success-bg: var(--color-emerald-bg);
49
+ --color-success-bg-hover: var(--color-emerald-bg-hover);
50
+ --color-success-fg: var(--color-emerald-fg);
17
51
  --color-success-surface: var(--color-emerald-surface);
18
- --color-success-surface-text: var(--color-emerald-surface-text);
19
52
  --color-success-text: var(--color-emerald-text);
20
53
  --color-success-border: var(--color-emerald-border);
21
54
 
22
- --color-warning-fill: var(--color-amber-fill);
55
+ --color-warning-bg: var(--color-amber-bg);
56
+ --color-warning-bg-hover: var(--color-amber-bg-hover);
57
+ --color-warning-fg: var(--color-amber-fg);
23
58
  --color-warning-surface: var(--color-amber-surface);
24
- --color-warning-surface-text: var(--color-amber-surface-text);
25
59
  --color-warning-text: var(--color-amber-text);
26
60
  --color-warning-border: var(--color-amber-border);
27
61
 
28
- --color-error-fill: var(--color-rose-fill);
62
+ --color-error-bg: var(--color-rose-bg);
63
+ --color-error-bg-hover: var(--color-rose-bg-hover);
64
+ --color-error-fg: var(--color-rose-fg);
29
65
  --color-error-surface: var(--color-rose-surface);
30
- --color-error-surface-text: var(--color-rose-surface-text);
31
66
  --color-error-text: var(--color-rose-text);
32
67
  --color-error-border: var(--color-rose-border);
33
68
 
34
- /**
35
- * Hue
69
+ /*
70
+ * Hue.
36
71
  */
37
72
 
38
- --color-neutral-fill: light-dark(var(--color-neutral-300), var(--color-neutral-700));
39
- --color-neutral-surface: light-dark(var(--color-neutral-200), var(--color-neutral-800));
40
- --color-neutral-surface-text: light-dark(var(--color-neutral-800), var(--color-neutral-200));
41
- --color-neutral-text: light-dark(var(--color-neutral-700), var(--color-neutral-300));
42
- --color-neutral-border: light-dark(var(--color-neutral-400), var(--color-neutral-600));
43
-
44
- --color-red-fill: light-dark(var(--color-red-300), var(--color-red-700));
45
- --color-red-surface: light-dark(var(--color-red-200), var(--color-red-800));
46
- --color-red-surface-text: light-dark(var(--color-red-800), var(--color-red-200));
47
- --color-red-text: light-dark(var(--color-red-700), var(--color-red-300));
48
- --color-red-border: light-dark(var(--color-red-400), var(--color-red-600));
49
-
50
- --color-orange-fill: light-dark(var(--color-orange-300), var(--color-orange-700));
51
- --color-orange-surface: light-dark(var(--color-orange-200), var(--color-orange-800));
52
- --color-orange-surface-text: light-dark(var(--color-orange-800), var(--color-orange-200));
53
- --color-orange-text: light-dark(var(--color-orange-700), var(--color-orange-300));
54
- --color-orange-border: light-dark(var(--color-orange-400), var(--color-orange-600));
55
-
56
- --color-amber-fill: light-dark(var(--color-amber-300), var(--color-amber-700));
57
- --color-amber-surface: light-dark(var(--color-amber-200), var(--color-amber-800));
58
- --color-amber-surface-text: light-dark(var(--color-amber-800), var(--color-amber-200));
59
- --color-amber-text: light-dark(var(--color-amber-700), var(--color-amber-300));
60
- --color-amber-border: light-dark(var(--color-amber-400), var(--color-amber-600));
61
-
62
- --color-yellow-fill: light-dark(var(--color-yellow-300), var(--color-yellow-700));
63
- --color-yellow-surface: light-dark(var(--color-yellow-200), var(--color-yellow-800));
64
- --color-yellow-surface-text: light-dark(var(--color-yellow-800), var(--color-yellow-200));
65
- --color-yellow-text: light-dark(var(--color-yellow-700), var(--color-yellow-300));
66
- --color-yellow-border: light-dark(var(--color-yellow-400), var(--color-yellow-600));
67
-
68
- --color-lime-fill: light-dark(var(--color-lime-300), var(--color-lime-700));
69
- --color-lime-surface: light-dark(var(--color-lime-200), var(--color-lime-800));
70
- --color-lime-surface-text: light-dark(var(--color-lime-800), var(--color-lime-200));
71
- --color-lime-text: light-dark(var(--color-lime-700), var(--color-lime-300));
72
- --color-lime-border: light-dark(var(--color-lime-400), var(--color-lime-600));
73
-
74
- --color-green-fill: light-dark(var(--color-green-300), var(--color-green-700));
75
- --color-green-surface: light-dark(var(--color-green-200), var(--color-green-800));
76
- --color-green-surface-text: light-dark(var(--color-green-800), var(--color-green-200));
77
- --color-green-text: light-dark(var(--color-green-700), var(--color-green-300));
78
- --color-green-border: light-dark(var(--color-green-400), var(--color-green-600));
79
-
80
- --color-emerald-fill: light-dark(var(--color-emerald-300), var(--color-emerald-700));
81
- --color-emerald-surface: light-dark(var(--color-emerald-200), var(--color-emerald-800));
82
- --color-emerald-surface-text: light-dark(var(--color-emerald-800), var(--color-emerald-200));
83
- --color-emerald-text: light-dark(var(--color-emerald-700), var(--color-emerald-300));
84
- --color-emerald-border: light-dark(var(--color-emerald-400), var(--color-emerald-600));
85
-
86
- --color-teal-fill: light-dark(var(--color-teal-300), var(--color-teal-700));
87
- --color-teal-surface: light-dark(var(--color-teal-200), var(--color-teal-800));
88
- --color-teal-surface-text: light-dark(var(--color-teal-800), var(--color-teal-200));
89
- --color-teal-text: light-dark(var(--color-teal-700), var(--color-teal-300));
90
- --color-teal-border: light-dark(var(--color-teal-400), var(--color-teal-600));
91
-
92
- --color-cyan-fill: light-dark(var(--color-cyan-300), var(--color-cyan-700));
93
- --color-cyan-surface: light-dark(var(--color-cyan-200), var(--color-cyan-800));
94
- --color-cyan-surface-text: light-dark(var(--color-cyan-800), var(--color-cyan-200));
95
- --color-cyan-text: light-dark(var(--color-cyan-700), var(--color-cyan-300));
96
- --color-cyan-border: light-dark(var(--color-cyan-400), var(--color-cyan-600));
97
-
98
- --color-sky-fill: light-dark(var(--color-sky-300), var(--color-sky-700));
99
- --color-sky-surface: light-dark(var(--color-sky-200), var(--color-sky-800));
100
- --color-sky-surface-text: light-dark(var(--color-sky-800), var(--color-sky-200));
101
- --color-sky-text: light-dark(var(--color-sky-700), var(--color-sky-300));
102
- --color-sky-border: light-dark(var(--color-sky-400), var(--color-sky-600));
103
-
104
- --color-blue-fill: light-dark(var(--color-blue-300), var(--color-blue-700));
105
- --color-blue-surface: light-dark(var(--color-blue-200), var(--color-blue-800));
106
- --color-blue-surface-text: light-dark(var(--color-blue-800), var(--color-blue-200));
107
- --color-blue-text: light-dark(var(--color-blue-700), var(--color-blue-300));
108
- --color-blue-border: light-dark(var(--color-blue-400), var(--color-blue-600));
109
-
110
- --color-indigo-fill: light-dark(var(--color-indigo-300), var(--color-indigo-700));
111
- --color-indigo-surface: light-dark(var(--color-indigo-200), var(--color-indigo-800));
112
- --color-indigo-surface-text: light-dark(var(--color-indigo-800), var(--color-indigo-200));
113
- --color-indigo-text: light-dark(var(--color-indigo-700), var(--color-indigo-300));
114
- --color-indigo-border: light-dark(var(--color-indigo-400), var(--color-indigo-600));
115
-
116
- --color-violet-fill: light-dark(var(--color-violet-300), var(--color-violet-700));
117
- --color-violet-surface: light-dark(var(--color-violet-200), var(--color-violet-800));
118
- --color-violet-surface-text: light-dark(var(--color-violet-800), var(--color-violet-200));
119
- --color-violet-text: light-dark(var(--color-violet-700), var(--color-violet-300));
120
- --color-violet-border: light-dark(var(--color-violet-400), var(--color-violet-600));
121
-
122
- --color-purple-fill: light-dark(var(--color-purple-300), var(--color-purple-700));
123
- --color-purple-surface: light-dark(var(--color-purple-200), var(--color-purple-800));
124
- --color-purple-surface-text: light-dark(var(--color-purple-800), var(--color-purple-200));
125
- --color-purple-text: light-dark(var(--color-purple-700), var(--color-purple-300));
126
- --color-purple-border: light-dark(var(--color-purple-400), var(--color-purple-600));
127
-
128
- --color-fuchsia-fill: light-dark(var(--color-fuchsia-300), var(--color-fuchsia-700));
129
- --color-fuchsia-surface: light-dark(var(--color-fuchsia-200), var(--color-fuchsia-800));
130
- --color-fuchsia-surface-text: light-dark(var(--color-fuchsia-800), var(--color-fuchsia-200));
131
- --color-fuchsia-text: light-dark(var(--color-fuchsia-700), var(--color-fuchsia-300));
132
- --color-fuchsia-border: light-dark(var(--color-fuchsia-400), var(--color-fuchsia-600));
133
-
134
- --color-pink-fill: light-dark(var(--color-pink-300), var(--color-pink-700));
135
- --color-pink-surface: light-dark(var(--color-pink-200), var(--color-pink-800));
136
- --color-pink-surface-text: light-dark(var(--color-pink-800), var(--color-pink-200));
137
- --color-pink-text: light-dark(var(--color-pink-700), var(--color-pink-300));
138
- --color-pink-border: light-dark(var(--color-pink-400), var(--color-pink-600));
139
-
140
- --color-rose-fill: light-dark(var(--color-rose-300), var(--color-rose-700));
141
- --color-rose-surface: light-dark(var(--color-rose-200), var(--color-rose-800));
142
- --color-rose-surface-text: light-dark(var(--color-rose-800), var(--color-rose-200));
143
- --color-rose-text: light-dark(var(--color-rose-700), var(--color-rose-300));
144
- --color-rose-border: light-dark(var(--color-rose-400), var(--color-rose-600));
73
+ --color-neutral-bg: var(--color-neutral-600);
74
+ --color-neutral-bg-hover: var(--color-neutral-700);
75
+ --color-neutral-fg: var(--color-neutral-900);
76
+ --color-neutral-surface: var(--color-neutral-400);
77
+ --color-neutral-text: light-dark(var(--color-neutral-800), var(--color-neutral-500));
78
+ --color-neutral-border: var(--color-neutral-600);
79
+
80
+ --color-red-bg: var(--color-red-600);
81
+ --color-red-bg-hover: var(--color-red-700);
82
+ --color-red-fg: var(--color-red-900);
83
+ --color-red-surface: var(--color-red-400);
84
+ --color-red-text: light-dark(var(--color-red-800), var(--color-red-500));
85
+ --color-red-border: var(--color-red-600);
86
+
87
+ --color-orange-bg: var(--color-orange-600);
88
+ --color-orange-bg-hover: var(--color-orange-700);
89
+ --color-orange-fg: var(--color-orange-900);
90
+ --color-orange-surface: var(--color-orange-400);
91
+ --color-orange-text: light-dark(var(--color-orange-800), var(--color-orange-500));
92
+ --color-orange-border: var(--color-orange-600);
93
+
94
+ --color-amber-bg: var(--color-amber-600);
95
+ --color-amber-bg-hover: var(--color-amber-700);
96
+ --color-amber-fg: var(--color-amber-900);
97
+ --color-amber-surface: var(--color-amber-400);
98
+ --color-amber-text: light-dark(var(--color-amber-800), var(--color-amber-500));
99
+ --color-amber-border: var(--color-amber-600);
100
+
101
+ --color-yellow-bg: var(--color-yellow-600);
102
+ --color-yellow-bg-hover: var(--color-yellow-700);
103
+ --color-yellow-fg: var(--color-yellow-900);
104
+ --color-yellow-surface: var(--color-yellow-400);
105
+ --color-yellow-text: light-dark(var(--color-yellow-800), var(--color-yellow-500));
106
+ --color-yellow-border: var(--color-yellow-600);
107
+
108
+ --color-lime-bg: var(--color-lime-600);
109
+ --color-lime-bg-hover: var(--color-lime-700);
110
+ --color-lime-fg: var(--color-lime-900);
111
+ --color-lime-surface: var(--color-lime-400);
112
+ --color-lime-text: light-dark(var(--color-lime-800), var(--color-lime-500));
113
+ --color-lime-border: var(--color-lime-600);
114
+
115
+ --color-green-bg: var(--color-green-600);
116
+ --color-green-bg-hover: var(--color-green-700);
117
+ --color-green-fg: var(--color-green-900);
118
+ --color-green-surface: var(--color-green-400);
119
+ --color-green-text: light-dark(var(--color-green-800), var(--color-green-500));
120
+ --color-green-border: var(--color-green-600);
121
+
122
+ --color-emerald-bg: var(--color-emerald-600);
123
+ --color-emerald-bg-hover: var(--color-emerald-700);
124
+ --color-emerald-fg: var(--color-emerald-900);
125
+ --color-emerald-surface: var(--color-emerald-400);
126
+ --color-emerald-text: light-dark(var(--color-emerald-800), var(--color-emerald-500));
127
+ --color-emerald-border: var(--color-emerald-600);
128
+
129
+ --color-teal-bg: var(--color-teal-600);
130
+ --color-teal-bg-hover: var(--color-teal-700);
131
+ --color-teal-fg: var(--color-teal-900);
132
+ --color-teal-surface: var(--color-teal-400);
133
+ --color-teal-text: light-dark(var(--color-teal-800), var(--color-teal-500));
134
+ --color-teal-border: var(--color-teal-600);
135
+
136
+ --color-cyan-bg: var(--color-cyan-600);
137
+ --color-cyan-bg-hover: var(--color-cyan-700);
138
+ --color-cyan-fg: var(--color-cyan-900);
139
+ --color-cyan-surface: var(--color-cyan-400);
140
+ --color-cyan-text: light-dark(var(--color-cyan-800), var(--color-cyan-500));
141
+ --color-cyan-border: var(--color-cyan-600);
142
+
143
+ --color-sky-bg: var(--color-sky-600);
144
+ --color-sky-bg-hover: var(--color-sky-700);
145
+ --color-sky-fg: var(--color-sky-900);
146
+ --color-sky-surface: var(--color-sky-400);
147
+ --color-sky-text: light-dark(var(--color-sky-800), var(--color-sky-500));
148
+ --color-sky-border: var(--color-sky-600);
149
+
150
+ --color-blue-bg: var(--color-blue-600);
151
+ --color-blue-bg-hover: var(--color-blue-700);
152
+ --color-blue-fg: var(--color-blue-900);
153
+ --color-blue-surface: var(--color-blue-400);
154
+ --color-blue-text: light-dark(var(--color-blue-800), var(--color-blue-500));
155
+ --color-blue-border: var(--color-blue-600);
156
+
157
+ --color-indigo-bg: var(--color-indigo-600);
158
+ --color-indigo-bg-hover: var(--color-indigo-700);
159
+ --color-indigo-fg: var(--color-indigo-900);
160
+ --color-indigo-surface: var(--color-indigo-400);
161
+ --color-indigo-text: light-dark(var(--color-indigo-800), var(--color-indigo-500));
162
+ --color-indigo-border: var(--color-indigo-600);
163
+
164
+ --color-violet-bg: var(--color-violet-600);
165
+ --color-violet-bg-hover: var(--color-violet-700);
166
+ --color-violet-fg: var(--color-violet-900);
167
+ --color-violet-surface: var(--color-violet-400);
168
+ --color-violet-text: light-dark(var(--color-violet-800), var(--color-violet-500));
169
+ --color-violet-border: var(--color-violet-600);
170
+
171
+ --color-purple-bg: var(--color-purple-600);
172
+ --color-purple-bg-hover: var(--color-purple-700);
173
+ --color-purple-fg: var(--color-purple-900);
174
+ --color-purple-surface: var(--color-purple-400);
175
+ --color-purple-text: light-dark(var(--color-purple-800), var(--color-purple-500));
176
+ --color-purple-border: var(--color-purple-600);
177
+
178
+ --color-fuchsia-bg: var(--color-fuchsia-600);
179
+ --color-fuchsia-bg-hover: var(--color-fuchsia-700);
180
+ --color-fuchsia-fg: var(--color-fuchsia-900);
181
+ --color-fuchsia-surface: var(--color-fuchsia-400);
182
+ --color-fuchsia-text: light-dark(var(--color-fuchsia-800), var(--color-fuchsia-500));
183
+ --color-fuchsia-border: var(--color-fuchsia-600);
184
+
185
+ --color-pink-bg: var(--color-pink-600);
186
+ --color-pink-bg-hover: var(--color-pink-700);
187
+ --color-pink-fg: var(--color-pink-900);
188
+ --color-pink-surface: var(--color-pink-400);
189
+ --color-pink-text: light-dark(var(--color-pink-800), var(--color-pink-500));
190
+ --color-pink-border: var(--color-pink-600);
191
+
192
+ --color-rose-bg: var(--color-rose-600);
193
+ --color-rose-bg-hover: var(--color-rose-700);
194
+ --color-rose-fg: var(--color-rose-900);
195
+ --color-rose-surface: var(--color-rose-400);
196
+ --color-rose-text: light-dark(var(--color-rose-800), var(--color-rose-500));
197
+ --color-rose-border: var(--color-rose-600);
145
198
  }
@@ -74,3 +74,45 @@
74
74
  @apply relative after:content-[""] after:absolute after:inset-0 after:rounded-[inherit]
75
75
  after:pointer-events-none after:ring after:ring-inset after:ring-transparent;
76
76
  }
77
+
78
+ /**
79
+ * Shimmer text — animates opacity left → right across the contained text.
80
+ * See @keyframes shimmer-text in theme/animation.css for the keyframe definition.
81
+ * Geometry: mask-size 200% 100% with mask-repeat: repeat-x means each tile is
82
+ * 2× the element width; the keyframe slides mask-position-x by 200% (one full
83
+ * tile period), giving a seamless loop. The 5-stop gradient (0.4 → 1.0 → 0.4)
84
+ * produces a single bright pulse per cycle that traverses left → right during
85
+ * the first half, with a brief calm interval during the second half.
86
+ */
87
+ @utility shimmer-text {
88
+ mask-image: linear-gradient(
89
+ 90deg,
90
+ rgba(0, 0, 0, 0.4) 0%,
91
+ rgba(0, 0, 0, 0.4) 30%,
92
+ rgba(0, 0, 0, 1) 50%,
93
+ rgba(0, 0, 0, 0.4) 70%,
94
+ rgba(0, 0, 0, 0.4) 100%
95
+ );
96
+ -webkit-mask-image: linear-gradient(
97
+ 90deg,
98
+ rgba(0, 0, 0, 0.4) 0%,
99
+ rgba(0, 0, 0, 0.4) 30%,
100
+ rgba(0, 0, 0, 1) 50%,
101
+ rgba(0, 0, 0, 0.4) 70%,
102
+ rgba(0, 0, 0, 0.4) 100%
103
+ );
104
+ mask-size: 200% 100%;
105
+ -webkit-mask-size: 200% 100%;
106
+ mask-repeat: repeat-x;
107
+ -webkit-mask-repeat: repeat-x;
108
+ animation: shimmer-text 2s linear infinite;
109
+ }
110
+
111
+ @media (prefers-reduced-motion: reduce) {
112
+ .shimmer-text {
113
+ animation: none;
114
+ mask-image: none;
115
+ -webkit-mask-image: none;
116
+ opacity: 0.6;
117
+ }
118
+ }
package/src/defs.ts CHANGED
@@ -34,7 +34,9 @@ export const hues: ChromaticPalette[] = [
34
34
 
35
35
  export const hueShades = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950] as const;
36
36
 
37
- export const roles = ['fill', 'surface', 'surface-text', 'text', 'border'] as const;
37
+ // NOTE: These are the JS-side style-API role keys (see ColorStyles in util/hash-styles.ts), kept
38
+ // distinct from the renamed CSS custom-property suffixes (`-bg`/`-fg`).
39
+ export const roles = ['fill', 'surface', 'foreground', 'text', 'border'] as const;
38
40
 
39
41
  /**
40
42
  * Card size constants (Tailwind spacing units).
@@ -16,7 +16,6 @@ External packages importing fragment definitions from `ui-theme/src/fragments`.
16
16
  | `focus.ts` | `focusRing` | 2 | 5 |
17
17
  | `focus.ts` | `subduedFocus` | - | 2 |
18
18
  | `focus.ts` | `staticFocusRing` | - | 1 |
19
- | `hover.ts` | `subtleHover` | 4 | - |
20
19
  | `hover.ts` | `ghostHover` | 8 | 2 |
21
20
  | `hover.ts` | `ghostFocusWithin` | 1 | - |
22
21
  | `hover.ts` | `hoverableControls` | 9 | - |
@@ -53,5 +52,4 @@ External packages importing fragment definitions from `ui-theme/src/fragments`.
53
52
 
54
53
  **Completely unused:** 7 fragments
55
54
 
56
- - `subtleHover` from `hover.ts`
57
55
  - `hoverableOpenControlItem`, `groupHoverControlItemWithTransition` from `hover.ts` (only 2-3 uses)
@@ -4,13 +4,40 @@
4
4
 
5
5
  import { type Density } from '@dxos/ui-types';
6
6
 
7
- const fineBlockSize = 'min-h-[2.5rem] pointer-fine:min-h-[2rem]';
8
- const coarseBlockSize = 'min-h-[2.5rem]';
7
+ const lgBlockSize = 'min-h-[2.5rem]';
8
+ const mdBlockSize = 'min-h-[2.5rem] pointer-fine:min-h-[2rem]';
9
+ const smBlockSize = 'min-h-[1.75rem]';
10
+ const xsBlockSize = 'min-h-[1.5rem]';
9
11
 
10
- const fineDimensions = `${fineBlockSize} px-2`;
11
- const coarseDimensions = `${coarseBlockSize} px-3`;
12
+ const lgDimensions = `${lgBlockSize} px-3`;
13
+ const mdDimensions = `${mdBlockSize} px-2`;
14
+ const smDimensions = `${smBlockSize} px-1.5`;
15
+ const xsDimensions = `${xsBlockSize} px-1`;
12
16
 
13
- export const densityDimensions = (density: Density = 'fine') =>
14
- density === 'fine' ? fineDimensions : coarseDimensions;
17
+ export const densityDimensions = (density: Density = 'md') => {
18
+ switch (density) {
19
+ case 'lg':
20
+ return lgDimensions;
21
+ case 'sm':
22
+ return smDimensions;
23
+ case 'xs':
24
+ return xsDimensions;
25
+ case 'md':
26
+ default:
27
+ return mdDimensions;
28
+ }
29
+ };
15
30
 
16
- export const densityBlockSize = (density: Density = 'fine') => (density === 'fine' ? fineBlockSize : coarseBlockSize);
31
+ export const densityBlockSize = (density: Density = 'md') => {
32
+ switch (density) {
33
+ case 'lg':
34
+ return lgBlockSize;
35
+ case 'sm':
36
+ return smBlockSize;
37
+ case 'xs':
38
+ return xsBlockSize;
39
+ case 'md':
40
+ default:
41
+ return mdBlockSize;
42
+ }
43
+ };
@@ -2,8 +2,6 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- export const subtleHover = 'hover:bg-hover-overlay';
6
-
7
5
  export const ghostHover = 'hover:bg-hover-surface';
8
6
  export const ghostFocusWithin = 'focus-within:bg-hover-surface';
9
7
 
package/src/index.ts CHANGED
@@ -4,5 +4,5 @@
4
4
 
5
5
  export * from './defs';
6
6
  export * from './fragments';
7
- export * from './theme';
7
+
8
8
  export * from './util';