@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
@@ -37,7 +37,7 @@ var hueShades = [
37
37
  var roles = [
38
38
  "fill",
39
39
  "surface",
40
- "surface-text",
40
+ "foreground",
41
41
  "text",
42
42
  "border"
43
43
  ];
@@ -48,19 +48,46 @@ var cardMinBlockSize = 18;
48
48
  var cardMaxBlockSize = 30;
49
49
 
50
50
  // src/fragments/density.ts
51
- var fineBlockSize = "min-h-[2.5rem] pointer-fine:min-h-[2rem]";
52
- var coarseBlockSize = "min-h-[2.5rem]";
53
- var fineDimensions = `${fineBlockSize} px-2`;
54
- var coarseDimensions = `${coarseBlockSize} px-3`;
55
- var densityDimensions = (density = "fine") => density === "fine" ? fineDimensions : coarseDimensions;
56
- var densityBlockSize = (density = "fine") => density === "fine" ? fineBlockSize : coarseBlockSize;
51
+ var lgBlockSize = "min-h-[2.5rem]";
52
+ var mdBlockSize = "min-h-[2.5rem] pointer-fine:min-h-[2rem]";
53
+ var smBlockSize = "min-h-[1.75rem]";
54
+ var xsBlockSize = "min-h-[1.5rem]";
55
+ var lgDimensions = `${lgBlockSize} px-3`;
56
+ var mdDimensions = `${mdBlockSize} px-2`;
57
+ var smDimensions = `${smBlockSize} px-1.5`;
58
+ var xsDimensions = `${xsBlockSize} px-1`;
59
+ var densityDimensions = (density = "md") => {
60
+ switch (density) {
61
+ case "lg":
62
+ return lgDimensions;
63
+ case "sm":
64
+ return smDimensions;
65
+ case "xs":
66
+ return xsDimensions;
67
+ case "md":
68
+ default:
69
+ return mdDimensions;
70
+ }
71
+ };
72
+ var densityBlockSize = (density = "md") => {
73
+ switch (density) {
74
+ case "lg":
75
+ return lgBlockSize;
76
+ case "sm":
77
+ return smBlockSize;
78
+ case "xs":
79
+ return xsBlockSize;
80
+ case "md":
81
+ default:
82
+ return mdBlockSize;
83
+ }
84
+ };
57
85
 
58
86
  // src/fragments/disabled.ts
59
87
  var staticDisabled = "opacity-40 cursor-not-allowed shadow-none";
60
88
  var dataDisabled = "data-[disabled]:opacity-40 data-[disabled]:cursor-not-allowed";
61
89
 
62
90
  // src/fragments/hover.ts
63
- var subtleHover = "hover:bg-hover-overlay";
64
91
  var ghostHover = "hover:bg-hover-surface";
65
92
  var ghostFocusWithin = "focus-within:bg-hover-surface";
66
93
  var hoverableControls = "[--controls-opacity:1] hover-hover:[--controls-opacity:0] hover-hover:hover:[--controls-opacity:1]";
@@ -109,146 +136,146 @@ var surfaceZIndex = ({ level, elevation }) => {
109
136
  // src/util/hash-styles.ts
110
137
  var neutral = {
111
138
  hue: "neutral",
112
- fill: "bg-neutral-fill",
139
+ bg: "bg-neutral-bg",
113
140
  surface: "bg-neutral-surface",
114
- surfaceText: "text-neutral-surface-text",
141
+ fg: "text-neutral-fg",
115
142
  text: "text-neutral-text",
116
143
  border: "border-neutral-border"
117
144
  };
118
145
  var styles = [
119
146
  {
120
147
  hue: "red",
121
- fill: "bg-red-fill",
148
+ bg: "bg-red-bg",
122
149
  surface: "bg-red-surface",
123
- surfaceText: "text-red-surface-text",
150
+ fg: "text-red-fg",
124
151
  text: "text-red-text",
125
152
  border: "border-red-border"
126
153
  },
127
154
  {
128
155
  hue: "orange",
129
- fill: "bg-orange-fill",
156
+ bg: "bg-orange-bg",
130
157
  surface: "bg-orange-surface",
131
- surfaceText: "text-orange-surface-text",
158
+ fg: "text-orange-fg",
132
159
  text: "text-orange-text",
133
160
  border: "border-orange-border"
134
161
  },
135
162
  {
136
163
  hue: "amber",
137
- fill: "bg-amber-fill",
164
+ bg: "bg-amber-bg",
138
165
  surface: "bg-amber-surface",
139
- surfaceText: "text-amber-surface-text",
166
+ fg: "text-amber-fg",
140
167
  text: "text-amber-text",
141
168
  border: "border-amber-border"
142
169
  },
143
170
  {
144
171
  hue: "yellow",
145
- fill: "bg-yellow-fill",
172
+ bg: "bg-yellow-bg",
146
173
  surface: "bg-yellow-surface",
147
- surfaceText: "text-yellow-surface-text",
174
+ fg: "text-yellow-fg",
148
175
  text: "text-yellow-text",
149
176
  border: "border-yellow-border"
150
177
  },
151
178
  {
152
179
  hue: "lime",
153
- fill: "bg-lime-fill",
180
+ bg: "bg-lime-bg",
154
181
  surface: "bg-lime-surface",
155
- surfaceText: "text-lime-surface-text",
182
+ fg: "text-lime-fg",
156
183
  text: "text-lime-text",
157
184
  border: "border-lime-border"
158
185
  },
159
186
  {
160
187
  hue: "green",
161
- fill: "bg-green-fill",
188
+ bg: "bg-green-bg",
162
189
  surface: "bg-green-surface",
163
- surfaceText: "text-green-surface-text",
190
+ fg: "text-green-fg",
164
191
  text: "text-green-text",
165
192
  border: "border-green-border"
166
193
  },
167
194
  {
168
195
  hue: "emerald",
169
- fill: "bg-emerald-fill",
196
+ bg: "bg-emerald-bg",
170
197
  surface: "bg-emerald-surface",
171
- surfaceText: "text-emerald-surface-text",
198
+ fg: "text-emerald-fg",
172
199
  text: "text-emerald-text",
173
200
  border: "border-emerald-border"
174
201
  },
175
202
  {
176
203
  hue: "teal",
177
- fill: "bg-teal-fill",
204
+ bg: "bg-teal-bg",
178
205
  surface: "bg-teal-surface",
179
- surfaceText: "text-teal-surface-text",
206
+ fg: "text-teal-fg",
180
207
  text: "text-teal-text",
181
208
  border: "border-teal-border"
182
209
  },
183
210
  {
184
211
  hue: "cyan",
185
- fill: "bg-cyan-fill",
212
+ bg: "bg-cyan-bg",
186
213
  surface: "bg-cyan-surface",
187
- surfaceText: "text-cyan-surface-text",
214
+ fg: "text-cyan-fg",
188
215
  text: "text-cyan-text",
189
216
  border: "border-cyan-border"
190
217
  },
191
218
  {
192
219
  hue: "sky",
193
- fill: "bg-sky-fill",
220
+ bg: "bg-sky-bg",
194
221
  surface: "bg-sky-surface",
195
- surfaceText: "text-sky-surface-text",
222
+ fg: "text-sky-fg",
196
223
  text: "text-sky-text",
197
224
  border: "border-sky-border"
198
225
  },
199
226
  {
200
227
  hue: "blue",
201
- fill: "bg-blue-fill",
228
+ bg: "bg-blue-bg",
202
229
  surface: "bg-blue-surface",
203
- surfaceText: "text-blue-surface-text",
230
+ fg: "text-blue-fg",
204
231
  text: "text-blue-text",
205
232
  border: "border-blue-border"
206
233
  },
207
234
  {
208
235
  hue: "indigo",
209
- fill: "bg-indigo-fill",
236
+ bg: "bg-indigo-bg",
210
237
  surface: "bg-indigo-surface",
211
- surfaceText: "text-indigo-surface-text",
238
+ fg: "text-indigo-fg",
212
239
  text: "text-indigo-text",
213
240
  border: "border-indigo-border"
214
241
  },
215
242
  {
216
243
  hue: "violet",
217
- fill: "bg-violet-fill",
244
+ bg: "bg-violet-bg",
218
245
  surface: "bg-violet-surface",
219
- surfaceText: "text-violet-surface-text",
246
+ fg: "text-violet-fg",
220
247
  text: "text-violet-text",
221
248
  border: "border-violet-border"
222
249
  },
223
250
  {
224
251
  hue: "purple",
225
- fill: "bg-purple-fill",
252
+ bg: "bg-purple-bg",
226
253
  surface: "bg-purple-surface",
227
- surfaceText: "text-purple-surface-text",
254
+ fg: "text-purple-fg",
228
255
  text: "text-purple-text",
229
256
  border: "border-purple-border"
230
257
  },
231
258
  {
232
259
  hue: "fuchsia",
233
- fill: "bg-fuchsia-fill",
260
+ bg: "bg-fuchsia-bg",
234
261
  surface: "bg-fuchsia-surface",
235
- surfaceText: "text-fuchsia-surface-text",
262
+ fg: "text-fuchsia-fg",
236
263
  text: "text-fuchsia-text",
237
264
  border: "border-fuchsia-border"
238
265
  },
239
266
  {
240
267
  hue: "pink",
241
- fill: "bg-pink-fill",
268
+ bg: "bg-pink-bg",
242
269
  surface: "bg-pink-surface",
243
- surfaceText: "text-pink-surface-text",
270
+ fg: "text-pink-fg",
244
271
  text: "text-pink-text",
245
272
  border: "border-pink-border"
246
273
  },
247
274
  {
248
275
  hue: "rose",
249
- fill: "bg-rose-fill",
276
+ bg: "bg-rose-bg",
250
277
  surface: "bg-rose-surface",
251
- surfaceText: "text-rose-surface-text",
278
+ fg: "text-rose-fg",
252
279
  text: "text-rose-text",
253
280
  border: "border-rose-border"
254
281
  }
@@ -257,6 +284,11 @@ var palette = {
257
284
  neutral,
258
285
  hues: styles
259
286
  };
287
+ var validHues = /* @__PURE__ */ new Set([
288
+ neutral.hue,
289
+ ...styles.map((s) => s.hue)
290
+ ]);
291
+ var toHue = (hue) => hue && validHues.has(hue) ? hue : "neutral";
260
292
  var getStyles = (hue) => {
261
293
  return styles.find((color) => color.hue === hue) || neutral;
262
294
  };
@@ -269,10 +301,7 @@ var getHashHue = (id) => {
269
301
  var getHash = (id) => id.split("").reduce((acc, char) => acc + char.charCodeAt(0), 0);
270
302
 
271
303
  // src/util/mx.ts
272
- import { Children, createElement, forwardRef, isValidElement } from "react";
273
304
  import { extendTailwindMerge, validators } from "tailwind-merge";
274
- import { log } from "@dxos/log";
275
- var __dxlog_file = "/__w/dxos/dxos/packages/ui/ui-theme/src/util/mx.ts";
276
305
  var mx = extendTailwindMerge({
277
306
  extend: {
278
307
  classGroups: {
@@ -295,8 +324,9 @@ var mx = extendTailwindMerge({
295
324
  validators.isArbitraryNumber
296
325
  ],
297
326
  density: [
298
- "dx-density-fine",
299
- "dx-density-coarse"
327
+ "dx-density-sm",
328
+ "dx-density-md",
329
+ "dx-density-lg"
300
330
  ],
301
331
  "dx-focus-ring": [
302
332
  "dx-focus-ring",
@@ -317,60 +347,6 @@ var mx = extendTailwindMerge({
317
347
  }
318
348
  }
319
349
  });
320
- var composableProps = ({ className, classNames, role, style, ...props }, { classNames: defaultClassNames, ...defaults } = {}) => ({
321
- // Default props.
322
- ...defaults,
323
- // Spread supplied props.
324
- ...props,
325
- // Prefer explicit role, then defaults role, then 'none'.
326
- role: role ?? defaults.role ?? "none",
327
- // Merge styles.
328
- style: {
329
- ...defaults.style,
330
- ...style
331
- },
332
- // Compose classnames.
333
- className: mx(defaultClassNames, className, classNames)
334
- });
335
- var COMPOSABLE = /* @__PURE__ */ Symbol.for("dxos.composable");
336
- function slottable(render) {
337
- const wrapped = (props, forwardedRef) => {
338
- let warn = false;
339
- if (props.asChild) {
340
- try {
341
- const child = Children.only(props.children);
342
- if (isValidElement(child) && typeof child.type !== "string" && !child.type[COMPOSABLE]) {
343
- warn = true;
344
- log.warn("slot child is not composable; create it with composable() or slottable()", {
345
- child: child.type.displayName ?? child.type.name
346
- }, {
347
- F: __dxlog_file,
348
- L: 125,
349
- S: this,
350
- C: (f, a) => f(...a)
351
- });
352
- }
353
- } catch {
354
- }
355
- }
356
- const result = render(props, forwardedRef);
357
- if (warn) {
358
- return createElement("div", {
359
- role: "none",
360
- className: "dx-slot-warning"
361
- }, result);
362
- }
363
- return result;
364
- };
365
- const component = forwardRef(wrapped);
366
- component[COMPOSABLE] = true;
367
- return component;
368
- }
369
- function composable(render) {
370
- const component = forwardRef(render);
371
- component[COMPOSABLE] = true;
372
- return component;
373
- }
374
350
 
375
351
  // src/util/size.ts
376
352
  var sizeMap = {
@@ -561,710 +537,42 @@ var textValence = (valence) => {
561
537
  return "font-medium text-warning-text";
562
538
  case "error":
563
539
  return "font-medium text-error-text";
540
+ default:
541
+ return "font-medium";
564
542
  }
565
543
  };
566
544
  var messageValence = (valence) => {
567
545
  switch (valence) {
568
546
  case "success":
569
- return "font-medium text-success-text border-success-text bg-success-surface";
547
+ return "font-medium border-success-text text-success-fg bg-success-surface";
570
548
  case "info":
571
- return "font-medium text-info-text border-info-text bg-info-surface";
549
+ return "font-medium border-info-text text-info-fg bg-info-surface";
572
550
  case "warning":
573
- return "font-medium text-warning-text border-warning-text bg-warning-surface";
551
+ return "font-medium border-warning-text text-warning-fg bg-warning-surface";
574
552
  case "error":
575
- return "font-medium text-error-text border-error-text bg-error-surface";
553
+ return "font-medium border-error-text text-error-fg bg-error-surface";
576
554
  default:
577
- return "font-medium text-neutral-text border-neutral-text bg-neutral-surface";
578
- }
579
- };
580
-
581
- // src/theme/components/avatar.ts
582
- var avatarRoot = ({ size = 10, inGroup }, ...etc) => mx("relative inline-flex shrink-0", getSize(size), inGroup && (size === "px" || size <= 3 ? "-mr-1" : "-mr-2"), ...etc);
583
- var avatarLabel = ({ srOnly }, ...etc) => mx(srOnly && "sr-only", ...etc);
584
- var avatarDescription = ({ srOnly }, ...etc) => mx("text-description", srOnly && "sr-only", ...etc);
585
- var avatarFrame = ({ variant }, ...etc) => mx("h-full w-full bg-(--surface-bg)", variant === "circle" ? "rounded-full" : "rounded-sm", ...etc);
586
- var avatarStatusIcon = ({ status, size = 3 }, ...etc) => mx("absolute bottom-0 end-0", getSize(size), status === "inactive" ? "text-amber-400 dark:text-amber-300" : status === "active" ? "text-emerald-400 dark:text-emerald-300" : "text-neutral-400 dark:text-neutral-300", ...etc);
587
- var avatarRing = ({ status, variant, animation }, ...etc) => mx("absolute inset-0 border-2", variant === "circle" ? "rounded-full" : "rounded-sm", status === "current" ? "border-primary-400 dark:border-primary-500" : status === "active" ? "border-emerald-400 dark:border-emerald-400" : status === "error" ? "border-rose-400 dark:border-rose-500" : status === "warning" ? "border-amber-400 dark:border-amber-500" : status === "inactive" ? "border-separator" : status === "internal" ? "border-fuchsia-600" : "border-[color:var(--surface-bg)]", animation === "pulse" ? "animate-halo-pulse" : "", ...etc);
588
- var avatarFallbackText = (_props, ...etc) => mx("fill-white", ...etc);
589
- var avatarGroup = (_props, ...etc) => mx("inline-flex items-center", ...etc);
590
- var avatarGroupLabel = ({ size, srOnly }, ...etc) => mx(srOnly ? "sr-only" : "rounded-full truncate text-sm leading-none py-1 px-2 relative z-[1] flex items-center justify-center", size && getHeight(size), ...etc);
591
- var avatarGroupDescription = ({ srOnly }, ...etc) => mx(srOnly ? "sr-only" : "text-description", ...etc);
592
- var avatarTheme = {
593
- root: avatarRoot,
594
- label: avatarLabel,
595
- description: avatarDescription,
596
- statusIcon: avatarStatusIcon,
597
- frame: avatarFrame,
598
- ring: avatarRing,
599
- fallbackText: avatarFallbackText,
600
- group: avatarGroup,
601
- groupLabel: avatarGroupLabel,
602
- groupDescription: avatarGroupDescription
603
- };
604
-
605
- // src/theme/components/breadcrumb.ts
606
- var breadcrumbRoot = (_props, ...etc) => mx("shrink-0 flex items-center", ...etc);
607
- var breadcrumbList = (_props, ...etc) => mx("contents", ...etc);
608
- var breadcrumbListItem = (_props, ...etc) => mx("contents", ...etc);
609
- var breadcrumbCurrent = (_props, ...etc) => mx(...etc);
610
- var breadcrumbSeparator = (_props, ...etc) => mx("opacity-50", ...etc);
611
- var breadcrumbTheme = {
612
- root: breadcrumbRoot,
613
- list: breadcrumbList,
614
- listItem: breadcrumbListItem,
615
- current: breadcrumbCurrent,
616
- separator: breadcrumbSeparator
617
- };
618
-
619
- // src/theme/components/card.ts
620
- var cardRoot = ({ border, fullWidth }, ...etc) => mx("dx-card dx-card-min-width dx-card-max-width min-h-(--dx-rail-item) group/card relative overflow-hidden", border && "bg-card-surface border border-separator dark:border-subdued-separator rounded-xs dx-focus-ring-group-y-indicator", fullWidth && "max-w-none!", ...etc);
621
- var cardToolbar = (_, ...etc) => mx("dx-card__toolbar dx-density-fine bg-transparent p-0! gap-0! col-span-3 grid! grid-cols-subgrid! [contain:none]", ...etc);
622
- var cardTitle = (_props, ...etc) => mx("dx-card__title grow truncate", ...etc);
623
- var cardContent = (_props, ...etc) => mx("dx-card__content contents pb-1 last:pb-0", ...etc);
624
- var cardHeading = ({ variant = "default" }, ...etc) => mx("dx-card__heading", variant === "default" && "py-1", variant === "subtitle" && "py-2 text-xs text-description font-medium uppercase", ...etc);
625
- var cardText = ({ variant = "default", truncate: _truncate }, ...etc) => mx("dx-card__text items-center overflow-hidden", variant === "default" && "py-1", variant === "description" && "py-1.5 text-description", ...etc);
626
- var cardTextSpan = ({ variant = "default", truncate }, ...etc) => mx(variant === "description" && "text-sm text-description line-clamp-3", truncate && "truncate", ...etc);
627
- var cardPoster = (_props, ...etc) => mx("dx-card__poster col-span-3 max-h-[200px]", ...etc);
628
- var cardPosterIcon = (_props, ...etc) => mx("dx-card__poster-icon col-span-3 grid place-items-center bg-input-surface text-subdued max-h-[200px]", ...etc);
629
- var cardAction = (_props, ...etc) => mx("dx-card__acztion col-span-3 !grid grid-cols-subgrid p-0! w-full text-start overflow-hidden", ...etc);
630
- var cardActionLabel = (_props, ...etc) => mx("dx-card__action-label min-w-0 flex-1 truncate", ...etc);
631
- var cardLink = (_props, ...etc) => mx("dx-card__link col-span-3 !grid grid-cols-subgrid group p-0! dx-button dx-focus-ring min-h-1!", ...etc);
632
- var cardLinkLabel = (_props, ...etc) => mx("dx-card__link-label min-w-0 flex-1 truncate", ...etc);
633
- var cardRow = (_, ...etc) => mx("dx-card__row col-span-3 grid grid-cols-subgrid", ...etc);
634
- var cardIconBlock = ({ padding }, ...etc) => mx("dx-card__icon-block grid h-[var(--dx-rail-item)] w-[var(--dx-rail-item)] place-items-center", padding && "[&>*]:p-1", ...etc);
635
- var cardTheme = {
636
- root: cardRoot,
637
- toolbar: cardToolbar,
638
- title: cardTitle,
639
- content: cardContent,
640
- row: cardRow,
641
- heading: cardHeading,
642
- text: cardText,
643
- "text-span": cardTextSpan,
644
- poster: cardPoster,
645
- "poster-icon": cardPosterIcon,
646
- action: cardAction,
647
- "action-label": cardActionLabel,
648
- link: cardLink,
649
- "link-label": cardLinkLabel,
650
- "icon-block": cardIconBlock
651
- };
652
-
653
- // src/theme/components/button.ts
654
- var primaryButtonColors = "text-accent-surface-text bg-accent-surface hover:bg-accent-surface-hover aria-pressed:bg-primary-500 dark:aria-pressed:bg-primary-500 data-[state=open]:bg-primary-500 dark:data-[state=open]:bg-primary-500 aria-checked:bg-primary-500 dark:aria-checked:bg-primary-500 aria-checked:text-primary-100";
655
- var staticDefaultButtonColors = "bg-input-surface text-input-surface-text";
656
- var defaultButtonColors = mx(staticDefaultButtonColors, "data-[state=open]:bg-input-surface aria-pressed:text-accent-text aria-pressed:bg-base-surface aria-checked:text-accent-text aria-checked:bg-base-surface");
657
- var ghostButtonColors = mx(ghostHover, "hover:text-inherit data-[state=open]:bg-input-surface aria-pressed:text-accent-text aria-pressed:bg-base-surface aria-checked:text-accent-text aria-checked:bg-base-surface");
658
- var buttonRoot = (_props, ...etc) => {
659
- return mx("dx-button dx-focus-ring group [&_span]:truncate", ...etc);
660
- };
661
- var buttonGroup = (_props, ...etc) => {
662
- return mx("inline-flex rounded-xs [&>:first-child]:rounded-w-sm [&>:last-child]:rounded-ie-sm [&>button]:relative", ...etc);
663
- };
664
- var buttonTheme = {
665
- root: buttonRoot,
666
- group: buttonGroup
667
- };
668
-
669
- // src/theme/primitives/column.ts
670
- var withColumn = {
671
- /** Centers element in the Column grid via --dx-col. No-op outside Column or inside ScrollArea. */
672
- center: () => "[grid-column:var(--dx-col,auto)]",
673
- /** Propagates the Column grid to children via subgrid. No-op outside Column.
674
- * Direct children default to center column unless they are a dx-container (ScrollArea). */
675
- propagate: () => "[.dx-column-root_&]:col-span-full [.dx-column-root_&]:grid [.dx-column-root_&]:grid-cols-subgrid [.dx-column-root_&]:[&>*:not(.dx-container)]:[grid-column:var(--dx-col,auto)]",
676
- /** Resets --dx-col after consuming --gutter. Applied by ScrollArea.Viewport. */
677
- consumed: () => "[--dx-col:auto]"
678
- };
679
- var columnRoot = (_, ...etc) => {
680
- return mx("dx-column-root grid", ...etc);
681
- };
682
- var columnRow = (_, ...etc) => {
683
- return mx("col-span-3 grid grid-cols-subgrid", ...etc);
684
- };
685
- var columnBleed = (_, ...etc) => {
686
- return mx("col-span-full grid grid-cols-subgrid min-h-0", ...etc);
687
- };
688
- var columnCenter = (_, ...etc) => {
689
- return mx(withColumn.center(), "min-h-0", ...etc);
690
- };
691
- var columnTheme = {
692
- root: columnRoot,
693
- row: columnRow,
694
- bleed: columnBleed,
695
- center: columnCenter
696
- };
697
-
698
- // src/theme/components/dialog.ts
699
- var sizeMap2 = {
700
- sm: "md:max-w-[24rem]",
701
- md: "md:max-w-[32rem]!",
702
- lg: "md:max-w-[40rem]!",
703
- xl: "md:max-w-[60rem]!"
704
- };
705
- var dialogOverlay = (_props, ...etc) => mx("dx-dialog__overlay", ...etc);
706
- var dialogContent = ({ inOverlayLayout, size = "md" }, ...etc) => {
707
- return mx("@container", "dx-dialog__content dx-focus-ring dx-modal-surface dx-density-coarse py-4", !inOverlayLayout && "fixed z-50 top-[50%] left-[50%] -translate-x-[50%] -translate-y-[50%]", sizeMap2[size], ...etc);
708
- };
709
- var dialogHeader = (_props, ...etc) => mx("dx-dialog__header flex pb-4 items-center justify-between", withColumn.center(), ...etc);
710
- var dialogBody = (_props, ...etc) => mx("dx-dialog__body dx-expander", withColumn.propagate(), ...etc);
711
- var dialogActionBar = (_props, ...etc) => mx("dx-dialog__actionbar flex items-center pt-4 gap-2 dx-density-coarse", withColumn.center(), ...etc);
712
- var dialogTitle = ({ srOnly }, ...etc) => mx("dx-dialog__title", srOnly && "sr-only", ...etc);
713
- var dialogDescription = ({ srOnly }, ...etc) => mx("dx-dialog__description", "text-description", srOnly && "sr-only", ...etc);
714
- var dialogTheme = {
715
- overlay: dialogOverlay,
716
- content: dialogContent,
717
- header: dialogHeader,
718
- body: dialogBody,
719
- actionbar: dialogActionBar,
720
- title: dialogTitle,
721
- description: dialogDescription
722
- };
723
-
724
- // src/theme/components/focus.ts
725
- var focusRing = ({ border }, ...etc) => mx("dx-ring-pseudo outline-hidden", "focus:after:ring-neutral-focus-indicator", "data-[focus-state=active]:after:ring-neutral-focus-indicator", "data-[focus-state=error]:after:ring-rose-500", border && "border border-separator", ...etc);
726
- var focusTheme = {
727
- group: focusRing,
728
- item: focusRing
729
- };
730
-
731
- // src/theme/components/icon.ts
732
- var iconRoot = ({ size }, etc) => {
733
- return mx("shrink-0 text-[var(--icons-color,currentColor)]", size ? getSize(size) : "[width:var(--icon-size,var(--dx-default-icons-size))] [height:var(--icon-size,var(--dx-default-icons-size))]", etc);
734
- };
735
- var iconTheme = {
736
- root: iconRoot
737
- };
738
-
739
- // src/theme/components/icon-button.ts
740
- var iconButtonRoot = ({ iconOnly }, ...etc) => {
741
- return mx("px-1.5", !iconOnly && "gap-2", ...etc);
742
- };
743
- var iconButtonTheme = {
744
- root: iconButtonRoot
745
- };
746
-
747
- // src/theme/components/input.ts
748
- var inputTextLabel = "py-1 text-sm text-description";
749
- var textInputSurfaceFocus = "transition-colors bg-input-surface focus:bg-focus-surface border border-separator focus:border-separator";
750
- var textInputSurfaceHover = "hover:bg-focus-surface";
751
- var booleanInputSurface = "shadow-inner transition-colors bg-un-accent aria-checked:bg-accent-surface aria-[checked=mixed]:bg-accent-surface";
752
- var booleanInputSurfaceHover = "hover:bg-un-accent-hover hover:aria-checked:bg-accent-surface-hover hover:aria-[checked=mixed]:bg-accent-surface-hover";
753
- var inputValence = (valence) => {
754
- switch (valence) {
755
- case "success":
756
- return "shadow-emerald-500/50 dark:shadow-emerald-600/50";
757
- case "info":
758
- return "shadow-cyan-500/50 dark:shadow-cyan-600/50";
759
- case "warning":
760
- return "shadow-amber-500/50 dark:shadow-amber-600/50";
761
- case "error":
762
- return "shadow-rose-500/50 dark:shadow-rose-600/50";
763
- }
764
- };
765
- var sharedSubduedInputStyles = (props) => [
766
- '[[data-drag-autoscroll="active"]_&]:pointer-events-none',
767
- "py-0 w-full bg-transparent text-current placeholder-placeholder",
768
- "dx-focus-subdued",
769
- densityDimensions(props.density),
770
- props.disabled && staticDisabled
771
- ];
772
- var sharedDefaultInputStyles = (props) => [
773
- '[[data-drag-autoscroll="active"]_&]:pointer-events-none',
774
- "py-0 w-full text-base-surface-text rounded-xs placeholder-placeholder",
775
- textInputSurfaceFocus,
776
- densityDimensions(props.density),
777
- props.disabled ? staticDisabled : textInputSurfaceHover
778
- ];
779
- var sharedStaticInputStyles = (props) => [
780
- '[[data-drag-autoscroll="active"]_&]:pointer-events-none',
781
- "py-0 w-full text-base-surface-text rounded-xs placeholder-placeholder",
782
- textInputSurfaceFocus,
783
- textInputSurfaceHover,
784
- props.focused && "bg-attention-surface",
785
- inputValence(props.validationValence),
786
- props.disabled && staticDisabled,
787
- props.focused && "dx-focus-static"
788
- ];
789
- var inputInput = (props, ...etc) => props.variant === "subdued" ? mx(...sharedSubduedInputStyles(props), ...etc) : props.variant === "static" ? mx(...sharedStaticInputStyles(props), ...etc) : mx(...sharedDefaultInputStyles(props), !props.disabled && "dx-focus-ring", inputValence(props.validationValence), ...etc);
790
- var inputTextArea = (props, ...etc) => inputInput(props, ...etc);
791
- var inputCheckbox = ({ size = 5 }, ...etc) => mx("dx-checkbox dx-focus-ring", getSize(size), ...etc);
792
- var inputCheckboxIndicator = ({ size = 5, checked }, ...etc) => mx(getSize(snapSize(sizeValue(size) * 0.65, 4)), !checked && "invisible", ...etc);
793
- var inputSwitch = ({ size = 5, disabled }, ...etc) => mx(
794
- getHeight(size),
795
- getWidth(snapSize(sizeValue(size) * 1.75, 9)),
796
- booleanInputSurface,
797
- !disabled && booleanInputSurfaceHover,
798
- // TODO(burdon): Added m-1 margin to make 40px width to align with 40px icon button.
799
- "cursor-pointer shrink-0 rounded-full px-1 mx-1 relative",
800
- "dx-focus-ring",
801
- ...etc
802
- );
803
- var inputSwitchThumb = ({ size = 5 }, ...etc) => mx(getSize(size === "px" ? "px" : size - 2), "block bg-white rounded-full transition-transform duration-100 will-change-transform data-[state=checked]:translate-x-[100%]", ...etc);
804
- var inputWithSegmentsInput = (props, ...etc) => mx("font-mono selection:bg-transparent mx-auto", props.density === "fine" ? "text-base pointer-fine:text-sm" : "text-lg", props.disabled && "cursor-not-allowed", ...etc);
805
- var inputSegment = (props, ...etc) => mx("flex items-center justify-center font-mono", props.density === "fine" ? "size-10 pointer-fine:size-8 rounded-xs" : "size-12 rounded-xs", "bg-input-surface text-base-surface-text transition-colors border border-separator", "data-[focused]:bg-attention-surface data-[focused]:border-neutral-focus-indicator", "data-[focused]:ring-2 data-[focused]:ring-offset-0 data-[focused]:ring-neutral-focus-indicator", inputValence(props.validationValence), props.disabled && staticDisabled, ...etc);
806
- var inputLabel = (props, ...etc) => mx("block", inputTextLabel, props.srOnly && "sr-only", ...etc);
807
- var inputDescription = (props, ...etc) => mx("text-description", props.srOnly && "sr-only", ...etc);
808
- var inputDescriptionAndValidation = (props, ...etc) => mx("leading-none my-1.5", props.srOnly && "sr-only", ...etc);
809
- var inputValidation = (props, ...etc) => mx(inputTextLabel, props.srOnly ? "sr-only" : textValence(props.validationValence), ...etc);
810
- var inputTheme = {
811
- input: inputInput,
812
- textArea: inputTextArea,
813
- inputWithSegments: inputWithSegmentsInput,
814
- segment: inputSegment,
815
- checkbox: inputCheckbox,
816
- checkboxIndicator: inputCheckboxIndicator,
817
- label: inputLabel,
818
- description: inputDescription,
819
- switch: inputSwitch,
820
- switchThumb: inputSwitchThumb,
821
- validation: inputValidation,
822
- descriptionAndValidation: inputDescriptionAndValidation
823
- };
824
-
825
- // src/theme/components/link.ts
826
- var linkRoot = ({ variant }, ...etc) => mx("underline decoration-1 underline-offset-2 transition-color rounded-xs", variant === "neutral" ? "text-inherit hover:opacity-90 visited:text-inherit visited:hover:opacity-90" : "text-accent-text hover:text-accent-text-hover visited:text-accent-text visited:hover:text-accent-text-hover", "dx-focus-ring", ...etc);
827
- var linkTheme = {
828
- root: linkRoot
829
- };
830
-
831
- // src/theme/components/list.ts
832
- var listRoot = (_, ...etc) => mx(...etc);
833
- var listItem = ({ collapsible }, ...etc) => mx(!collapsible && "flex", ...etc);
834
- var listItemEndcap = ({ density }, ...etc) => mx(density === "fine" ? getSize(8) : getSize(10), "shrink-0 flex items-center justify-center", ...etc);
835
- var listItemHeading = ({ density }, ...etc) => mx(densityBlockSize(density), "flex items-center overflow-hidden [&>span]:truncate", ...etc);
836
- var listItemDragHandleIcon = (_props, ...etc) => mx(getSize(5), "mt-2.5", ...etc);
837
- var listItemOpenTrigger = ({ density }, ...etc) => mx("w-5 rounded-sm flex justify-center items-center", densityBlockSize(density), ghostHover, "dx-focus-ring", ...etc);
838
- var listItemOpenTriggerIcon = (_props, ...etc) => {
839
- return mx(getSize(5), ...etc);
840
- };
841
- var listTheme = {
842
- root: listRoot,
843
- item: {
844
- root: listItem,
845
- endcap: listItemEndcap,
846
- heading: listItemHeading,
847
- dragHandleIcon: listItemDragHandleIcon,
848
- openTrigger: listItemOpenTrigger,
849
- openTriggerIcon: listItemOpenTriggerIcon
555
+ return "font-medium border-neutral-text text-neutral-fg bg-neutral-surface";
850
556
  }
851
557
  };
852
-
853
- // src/theme/components/main.ts
854
- var topbarBlockPaddingStart = "py-(--dx-topbar-size) dx-sticky-top-from-topbar-bottom";
855
- var bottombarBlockPaddingEnd = "pb-(--dx-statusbar-size) dx-sticky-bottom-from-statusbar-bottom";
856
- var mainPadding = "dx-main-content-padding";
857
- var mainPaddingTransitions = "dx-main-content-padding-transitions";
858
- var mainIntrinsicSize = "dx-main-intrinsic-size";
859
- var mainContent = ({ bounce }, ...etc) => mx(mainPadding, mainPaddingTransitions, bounce && "dx-main-bounce-layout", "dx-focus-ring-main", ...etc);
860
- var mainSidebar = (_, ...etc) => mx("dx-main-sidebar", "dx-focus-ring-inset-over-all", ...etc);
861
- var mainOverlay = (_, ...etc) => mx("dx-main-overlay", ...etc);
862
- var mainTheme = {
863
- content: mainContent,
864
- sidebar: mainSidebar,
865
- overlay: mainOverlay
866
- };
867
-
868
- // src/theme/components/menu.ts
869
- var menuContent = ({ elevation }, ...etc) => mx("dx-modal-surface w-48 rounded-sm md:w-56 border border-separator", surfaceZIndex({
870
- elevation,
871
- level: "menu"
872
- }), surfaceShadow({
873
- elevation: "positioned"
874
- }), ...etc);
875
- var menuViewport = (_props, ...etc) => mx("rounded-sm p-1 max-h-[var(--radix-dropdown-menu-content-available-height)] overflow-y-auto", ...etc);
876
- var menuItem = (_props, ...etc) => mx("flex cursor-pointer select-none items-center gap-2 rounded-xs px-2 py-2 text-sm", "hover:bg-hover-surface data-[highlighted]:bg-hover-surface", "dx-focus-subdued", dataDisabled, ...etc);
877
- var menuSeparator = (_props, ...etc) => mx("my-1 mx-2 h-px bg-separator", ...etc);
878
- var menuGroupLabel = (_props, ...etc) => mx("text-description", "select-none px-2 py-2", ...etc);
879
- var menuArrow = (_props, ...etc) => mx("fill-separator", ...etc);
880
- var menuTheme = {
881
- content: menuContent,
882
- viewport: menuViewport,
883
- item: menuItem,
884
- separator: menuSeparator,
885
- groupLabel: menuGroupLabel,
886
- arrow: menuArrow
887
- };
888
-
889
- // src/theme/components/message.ts
890
- var messageRoot = ({ valence }, etc) => {
891
- return mx("grid grid-cols-[min-content_1fr] gap-x-2 p-trim-sm rounded-sm", messageValence(valence), etc);
892
- };
893
- var messageHeader = (_, etc) => {
894
- return mx("col-span-2 grid grid-cols-subgrid items-center", etc);
895
- };
896
- var messageTitle = (_, etc) => {
897
- return mx("col-start-2 gap-trim-sm [&>svg]:inline-block", etc);
898
- };
899
- var messageIcon = (_, etc) => {
900
- return mx("col-start-1", etc);
901
- };
902
- var messageContent = (_, etc) => {
903
- return mx("grid grid-cols-subgrid col-start-2 first:font-medium", etc);
904
- };
905
- var messageTheme = {
906
- root: messageRoot,
907
- header: messageHeader,
908
- icon: messageIcon,
909
- title: messageTitle,
910
- content: messageContent
911
- };
912
-
913
- // src/theme/components/popover.ts
914
- var popoverContent = ({ elevation }, ...etc) => mx("dx-modal-surface border border-separator rounded-sm", surfaceShadow({
915
- elevation: "positioned"
916
- }), surfaceZIndex({
917
- elevation,
918
- level: "menu"
919
- }), "dx-focus-ring", ...etc);
920
- var popoverViewport = ({ constrainBlock, constrainInline }, ...etc) => mx("grid grid-rows-[1fr] min-h-0 min-w-popover-min-width", (constrainBlock || constrainInline) && "overflow-hidden", constrainBlock && "max-h-(--radix-popover-content-available-height)", constrainBlock && "max-h-[min(var(--radix-popover-content-available-height),calc(100dvh-var(--spacing-screen-border)*2))]", constrainInline && "max-w-(--radix-popover-content-available-width)", ...etc);
921
- var popoverArrow = (_props, ...etc) => mx("fill-separator", ...etc);
922
- var popoverTheme = {
923
- content: popoverContent,
924
- viewport: popoverViewport,
925
- arrow: popoverArrow
926
- };
927
-
928
- // src/theme/components/scroll-area.ts
929
- var scrollbar = {
930
- thin: {
931
- size: 4,
932
- padding: 4
933
- },
934
- coarse: {
935
- size: 8,
936
- padding: 8
937
- }
938
- };
939
- var scrollAreaRoot = ({ orientation }, ...etc) => mx(
940
- // Expand
941
- "dx-container",
942
- orientation === "vertical" && "group/scroll-v flex flex-col",
943
- orientation === "horizontal" && "group/scroll-h flex",
944
- orientation === "all" && "group/scroll-all",
945
- // Apply col-span-full only when inside a Column.Root grid (detected via dx-column-root marker).
946
- "[.dx-column-root_&]:col-span-full",
947
- ...etc
948
- );
949
- var scrollAreaViewport = ({ orientation, centered, padding, snap, autoHide }, ...etc) => {
950
- return mx(
951
- "flex-1 min-h-0 w-full",
952
- // Reset --dx-col so nested components don't try to grid-position themselves.
953
- // ScrollArea has already consumed --gutter for padding.
954
- withColumn.consumed(),
955
- orientation === "vertical" && "overflow-y-scroll",
956
- orientation === "horizontal" && "flex overflow-x-scroll overscroll-x-contain",
957
- orientation === "all" && "overflow-scroll",
958
- "[&::-webkit-scrollbar-corner]:bg-transparent",
959
- "[&::-webkit-scrollbar-track]:bg-transparent",
960
- "[&::-webkit-scrollbar-thumb]:rounded-none",
961
- "[&::-webkit-scrollbar]:w-[var(--scroll-width)] [&::-webkit-scrollbar]:h-[var(--scroll-width)]",
962
- // If contained within Column.Root grid the gutter is set by that component (--gutter CSS variable).
963
- // If centered, left padding compensates for scrollbar width so content is visually centered.
964
- (orientation === "vertical" || orientation === "all") && (padding ? [
965
- centered ? "pl-[var(--gutter,calc(var(--scroll-width)+var(--scroll-padding)))]" : "pl-[var(--gutter,0)]",
966
- "pr-[calc(var(--gutter,calc(var(--scroll-width)+var(--scroll-padding)))-var(--scroll-width))]"
967
- ] : centered && "pl-[var(--scroll-width)]"),
968
- (orientation === "horizontal" || orientation === "all") && (padding ? [
969
- centered && "pt-[calc(var(--scroll-width)+var(--scroll-padding))]",
970
- "pb-[var(--scroll-padding)]"
971
- ] : centered && "pt-[var(--scroll-width)]"),
972
- snap && [
973
- orientation === "vertical" && "snap-y snap-mandatory",
974
- orientation === "horizontal" && "snap-x snap-mandatory",
975
- orientation === "all" && "snap-both snap-mandatory"
976
- ],
977
- autoHide ? [
978
- orientation === "vertical" && "group-hover/scroll-v:[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb",
979
- orientation === "horizontal" && "group-hover/scroll-h:[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb",
980
- orientation === "all" && "group-hover/scroll-all:[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb"
981
- ] : [
982
- orientation === "vertical" && "[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb",
983
- orientation === "horizontal" && "[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb",
984
- orientation === "all" && "[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb"
985
- ],
986
- ...etc
987
- );
988
- };
989
- var scrollAreaTheme = {
990
- root: scrollAreaRoot,
991
- viewport: scrollAreaViewport
992
- };
993
-
994
- // src/theme/components/select.ts
995
- var selectContent = ({ elevation }, ...etc) => {
996
- return mx("dx-modal-surface rounded-sm border border-separator", "min-w-(--radix-select-trigger-width) max-h-(--radix-select-content-available-height)", surfaceShadow({
997
- elevation: "positioned"
998
- }), surfaceZIndex({
999
- elevation,
1000
- level: "menu"
1001
- }), ...etc);
1002
- };
1003
- var selectViewport = (_props, ...etc) => mx(...etc);
1004
- var selectItem = (_props, ...etc) => mx("flex items-center min-h-[2rem] px-3 py-1 gap-2", "text-base-surface-text leading-none select-none outline-hidden", "[&>svg]:invisible [&[data-state=checked]>svg]:visible", "dx-highlighted", ...etc);
1005
- var selectItemIndicator = (_props, ...etc) => mx("items-center", ...etc);
1006
- var selectArrow = (_props, ...etc) => mx("fill-separator", ...etc);
1007
- var selectSeparator = (_props, ...etc) => mx("self-stretch border-b my-1 border-separator", ...etc);
1008
- var selectScrollButton = (_props, ...etc) => mx("dx-modal-surface flex items-center justify-center cursor-default h-6 w-full", ...etc);
1009
- var selectTheme = {
1010
- content: selectContent,
1011
- viewport: selectViewport,
1012
- item: selectItem,
1013
- itemIndicator: selectItemIndicator,
1014
- arrow: selectArrow,
1015
- separator: selectSeparator,
1016
- scrollButton: selectScrollButton
1017
- };
1018
-
1019
- // src/theme/components/splitter.ts
1020
- var splitterRoot = (_props, ...etc) => mx("relative h-full overflow-hidden", ...etc);
1021
- var splitterPanel = (_props, ...etc) => mx("absolute inset-x-0 flex flex-col overflow-hidden", ...etc);
1022
- var splitterTheme = {
1023
- root: splitterRoot,
1024
- panel: splitterPanel
1025
- };
1026
-
1027
- // src/theme/components/separator.ts
1028
- var separatorRoot = ({ orientation, subdued }, ...etc) => mx("self-stretch", orientation === "vertical" ? "border-e mx-1" : "border-b my-1", subdued ? "border-subdued-separator" : "border-separator", ...etc);
1029
- var separatorTheme = {
1030
- root: separatorRoot
1031
- };
1032
-
1033
- // src/theme/components/skeleton.ts
1034
- var skeletonRoot = ({ variant = "default" }, ...etc) => mx("animate-pulse bg-neutral-300 dark:bg-neutral-700 rounded-md", variant === "circle" && "rounded-full", variant === "text" && "rounded-sm", ...etc);
1035
- var skeletonTheme = {
1036
- root: skeletonRoot
1037
- };
1038
-
1039
- // src/theme/components/status.ts
1040
- var statusRoot = ({ variant = "default" }, ...etc) => mx("h-1 relative rounded-full overflow-hidden", variant === "main-bottom" ? "w-full block" : "inline-20 inline-block bg-base-surface", ...etc);
1041
- var statusBar = ({ variant = "default", indeterminate }, ...etc) => mx("absolute inset-y-0 block rounded-full", variant === "main-bottom" ? "bg-composer-300" : "bg-un-accent", indeterminate ? "animate-progress-indeterminate" : "start-0", ...etc);
1042
- var statusTheme = {
1043
- root: statusRoot,
1044
- bar: statusBar
1045
- };
1046
-
1047
- // src/theme/components/tag.ts
1048
- var tagRoot = (_, ...etc) => mx("dx-tag", ...etc);
1049
- var tagTheme = {
1050
- root: tagRoot
1051
- };
1052
-
1053
- // src/theme/components/toast.ts
1054
- var toastViewport = (_props, ...etc) => mx(
1055
- // TODO(burdon): block-end should take into account status bar.
1056
- "z-40 fixed bottom-[calc(env(safe-area-inset-bottom)+1rem)] inset-start-[calc(env(safe-area-inset-left)+1rem)] inset-end-[calc(env(safe-area-inset-right)+1rem)] w-auto md:end-[calc(env(safe-area-inset-right)+1rem)] md:left-auto md:w-full md:max-w-sm",
1057
- "rounded-md flex flex-col gap-2",
1058
- ...etc
1059
- );
1060
- var toastRoot = (_props, ...etc) => mx("dx-modal-surface rounded-md flex p-2 gap-2", surfaceShadow({
1061
- elevation: "toast"
1062
- }), "radix-state-open:animate-toast-slide-in-bottom md:radix-state-open:animate-toast-slide-in-right", "radix-state-closed:animate-toast-hide", "radix-swipe-end:animate-toast-swipe-out", "translate-x-radix-toast-swipe-move-x", "radix-swipe-cancel:translate-x-0 radix-swipe-cancel:duration-200 radix-swipe-cancel:ease-[ease]", "dx-focus-ring", ...etc);
1063
- var toastBody = (_props, ...etc) => mx("grow flex flex-col gap-1 justify-center pl-2", ...etc);
1064
- var toastActions = (_props, ...etc) => mx("shrink-0 flex flex-col gap-1 justify-center", ...etc);
1065
- var toastTitle = ({ srOnly }, ...etc) => mx("shrink-0 font-medium", srOnly && "sr-only", ...etc);
1066
- var toastDescription = ({ srOnly }, ...etc) => mx("text-description", "shrink-0", srOnly && "sr-only", ...etc);
1067
- var toastTheme = {
1068
- viewport: toastViewport,
1069
- root: toastRoot,
1070
- body: toastBody,
1071
- title: toastTitle,
1072
- description: toastDescription,
1073
- actions: toastActions
1074
- };
1075
-
1076
- // src/theme/components/toolbar.ts
1077
- var toolbarLayout = "w-full shrink-0 flex flex-nowrap p-1 gap-1 items-center overflow-x-auto scrollbar-none dx-contain-layout";
1078
- var toolbarRoot = ({ density, disabled, layoutManaged }, ...etc) => {
1079
- return mx("bg-toolbar-surface dx-toolbar", density === "coarse" && "h-(--dx-rail-size) px-3!", disabled && "*:opacity-20", !layoutManaged && toolbarLayout, ...etc);
1080
- };
1081
- var toolbarText = (_, ...etc) => {
1082
- return mx("px-2 grow truncate items-center", ...etc);
1083
- };
1084
- var toolbarTheme = {
1085
- root: toolbarRoot,
1086
- text: toolbarText
1087
- };
1088
-
1089
- // src/theme/components/tooltip.ts
1090
- var tooltipContent = ({ elevation }, ...etc) => mx("inline-flex items-center p-1 max-w-64 text-sm bg-inverse-surface text-inverse-surface-text rounded-sm", surfaceShadow({
1091
- elevation: "positioned"
1092
- }), surfaceZIndex({
1093
- elevation,
1094
- level: "tooltip"
1095
- }), ...etc);
1096
- var tooltipArrow = (_props, ...etc) => mx("fill-inverse-surface", ...etc);
1097
- var tooltipTheme = {
1098
- content: tooltipContent,
1099
- arrow: tooltipArrow
1100
- };
1101
-
1102
- // src/theme/components/treegrid.ts
1103
- var levelStyles = /* @__PURE__ */ new Map([
1104
- [
1105
- 1,
1106
- "[&>.indent:first-of-type]:pl-0 font-medium"
1107
- ],
1108
- [
1109
- 2,
1110
- "[&>.indent:first-of-type]:pl-0"
1111
- ],
1112
- [
1113
- 3,
1114
- "[&>.indent:first-of-type]:pl-1"
1115
- ],
1116
- [
1117
- 4,
1118
- "[&>.indent:first-of-type]:pl-2"
1119
- ],
1120
- [
1121
- 5,
1122
- "[&>.indent:first-of-type]:pl-3"
1123
- ],
1124
- [
1125
- 6,
1126
- "[&>.indent:first-of-type]:pl-4"
1127
- ],
1128
- [
1129
- 7,
1130
- "[&>.indent:first-of-type]:pl-5"
1131
- ],
1132
- [
1133
- 8,
1134
- "[&>.indent:first-of-type]:pl-6"
1135
- ]
1136
- ]);
1137
- var treegridRoot = (_, ...etc) => mx("grid", ...etc);
1138
- var treegridRow = ({ level = 1 }, ...etc) => mx(levelStyles.get(Math.min(Math.max(Math.round(level), 1), 8)), ...etc);
1139
- var treegridCell = ({ indent }, ...etc) => mx(indent && "indent", ...etc);
1140
- var treegridTheme = {
1141
- root: treegridRoot,
1142
- row: treegridRow,
1143
- cell: treegridCell
1144
- };
1145
-
1146
- // src/theme/primitives/panel.ts
1147
- var sizes = {
1148
- lg: "h-(--dx-topbar-size)",
1149
- md: "h-(--dx-toolbar-size)",
1150
- sm: "h-(--dx-statusbar-size)"
1151
- };
1152
- var panelRoot = (_, ...etc) => mx(
1153
- // prettier-ignore
1154
- "dx-container grid grid-cols-[100%] overflow-hidden",
1155
- // Add uncategorized children to content slot.
1156
- "[&>*:not([data-slot])]:[grid-area:content]",
1157
- ...etc
1158
- );
1159
- var panelToolbar = ({ size = "md" }, ...etc) => mx("[grid-area:toolbar]", "shrink-0", sizes[size], ...etc);
1160
- var panelContent = (_, ...etc) => mx("[grid-area:content] min-h-0", ...etc);
1161
- var panelStatusbar = ({ size = "md" }, ...etc) => mx("[grid-area:statusbar]", "shrink-0", sizes[size], ...etc);
1162
- var panelTheme = {
1163
- root: panelRoot,
1164
- toolbar: panelToolbar,
1165
- content: panelContent,
1166
- statusbar: panelStatusbar
1167
- };
1168
-
1169
- // src/theme/theme.ts
1170
- import { getDeep } from "@dxos/util";
1171
- var defaultTheme = {
1172
- themeName: () => "default",
1173
- //
1174
- // Primitives
1175
- //
1176
- column: columnTheme,
1177
- panel: panelTheme,
1178
- //
1179
- // Components
1180
- //
1181
- avatar: avatarTheme,
1182
- breadcrumb: breadcrumbTheme,
1183
- button: buttonTheme,
1184
- card: cardTheme,
1185
- dialog: dialogTheme,
1186
- focus: focusTheme,
1187
- icon: iconTheme,
1188
- iconButton: iconButtonTheme,
1189
- input: inputTheme,
1190
- link: linkTheme,
1191
- list: listTheme,
1192
- main: mainTheme,
1193
- message: messageTheme,
1194
- menu: menuTheme,
1195
- popover: popoverTheme,
1196
- scrollArea: scrollAreaTheme,
1197
- select: selectTheme,
1198
- separator: separatorTheme,
1199
- skeleton: skeletonTheme,
1200
- splitter: splitterTheme,
1201
- status: statusTheme,
1202
- tag: tagTheme,
1203
- toast: toastTheme,
1204
- toolbar: toolbarTheme,
1205
- tooltip: tooltipTheme,
1206
- treegrid: treegridTheme
1207
- };
1208
- var bindTheme = (theme) => {
1209
- return (path, styleProps, ...etc) => {
1210
- const result = getDeep(theme, path.split("."));
1211
- return typeof result === "function" ? result(styleProps ?? {}, ...etc) : void 0;
1212
- };
1213
- };
1214
- var defaultTx = bindTheme(defaultTheme);
558
+ var buttonValence = (_valence) => "text-(--dx-valence-text) bg-(--dx-valence-bg) hover:bg-(--dx-valence-bg-hover)";
1215
559
  export {
1216
- avatarDescription,
1217
- avatarFallbackText,
1218
- avatarFrame,
1219
- avatarGroup,
1220
- avatarGroupDescription,
1221
- avatarGroupLabel,
1222
- avatarLabel,
1223
- avatarRing,
1224
- avatarRoot,
1225
- avatarStatusIcon,
1226
- avatarTheme,
1227
- bindTheme,
1228
- bottombarBlockPaddingEnd,
1229
- breadcrumbCurrent,
1230
- breadcrumbList,
1231
- breadcrumbListItem,
1232
- breadcrumbRoot,
1233
- breadcrumbSeparator,
1234
- breadcrumbTheme,
1235
- buttonTheme,
560
+ buttonValence,
1236
561
  cardDefaultInlineSize,
1237
562
  cardMaxBlockSize,
1238
563
  cardMaxInlineSize,
1239
564
  cardMinBlockSize,
1240
565
  cardMinInlineSize,
1241
- cardTheme,
1242
- columnTheme,
1243
- composable,
1244
- composableProps,
1245
566
  dataDisabled,
1246
- defaultButtonColors,
1247
- defaultTheme,
1248
- defaultTx,
1249
567
  densityBlockSize,
1250
568
  densityDimensions,
1251
569
  descriptionMessage,
1252
- dialogActionBar,
1253
- dialogBody,
1254
- dialogContent,
1255
- dialogDescription,
1256
- dialogHeader,
1257
- dialogOverlay,
1258
- dialogTheme,
1259
- dialogTitle,
1260
- focusTheme,
1261
570
  getHashHue,
1262
571
  getHashStyles,
1263
572
  getHeight,
1264
573
  getSize,
1265
574
  getStyles,
1266
575
  getWidth,
1267
- ghostButtonColors,
1268
576
  ghostFocusWithin,
1269
577
  ghostHover,
1270
578
  groupHoverControlItemWithTransition,
@@ -1275,105 +583,19 @@ export {
1275
583
  hoverableOpenControlItem,
1276
584
  hueShades,
1277
585
  hues,
1278
- iconButtonRoot,
1279
- iconButtonTheme,
1280
- iconRoot,
1281
586
  iconSize,
1282
- iconTheme,
1283
- inputTextLabel,
1284
- inputTheme,
1285
- linkRoot,
1286
- linkTheme,
1287
- listItem,
1288
- listItemDragHandleIcon,
1289
- listItemEndcap,
1290
- listItemHeading,
1291
- listItemOpenTrigger,
1292
- listItemOpenTriggerIcon,
1293
- listRoot,
1294
- listTheme,
1295
- mainContent,
1296
- mainIntrinsicSize,
1297
- mainOverlay,
1298
- mainPadding,
1299
- mainPaddingTransitions,
1300
- mainSidebar,
1301
- mainTheme,
1302
- menuArrow,
1303
- menuContent,
1304
- menuGroupLabel,
1305
- menuItem,
1306
- menuSeparator,
1307
- menuTheme,
1308
- menuViewport,
1309
- messageContent,
1310
- messageHeader,
1311
- messageIcon,
1312
- messageRoot,
1313
- messageTheme,
1314
- messageTitle,
1315
587
  messageValence,
1316
588
  mx,
1317
589
  osTranslations,
1318
590
  palette,
1319
- panelTheme,
1320
- popoverArrow,
1321
- popoverContent,
1322
- popoverTheme,
1323
- popoverViewport,
1324
- primaryButtonColors,
1325
591
  roles,
1326
- scrollAreaRoot,
1327
- scrollAreaTheme,
1328
- scrollAreaViewport,
1329
- scrollbar,
1330
- selectArrow,
1331
- selectContent,
1332
- selectItem,
1333
- selectItemIndicator,
1334
- selectScrollButton,
1335
- selectSeparator,
1336
- selectTheme,
1337
- selectViewport,
1338
- separatorRoot,
1339
- separatorTheme,
1340
592
  sizeToRem,
1341
593
  sizeValue,
1342
- skeletonRoot,
1343
- skeletonTheme,
1344
- slottable,
1345
594
  snapSize,
1346
- splitterTheme,
1347
- staticDefaultButtonColors,
1348
595
  staticDisabled,
1349
- statusBar,
1350
- statusRoot,
1351
- statusTheme,
1352
- subtleHover,
1353
596
  surfaceShadow,
1354
597
  surfaceZIndex,
1355
- tagRoot,
1356
- tagTheme,
1357
598
  textValence,
1358
- toastActions,
1359
- toastBody,
1360
- toastDescription,
1361
- toastRoot,
1362
- toastTheme,
1363
- toastTitle,
1364
- toastViewport,
1365
- toolbarLayout,
1366
- toolbarRoot,
1367
- toolbarText,
1368
- toolbarTheme,
1369
- tooltipArrow,
1370
- tooltipContent,
1371
- tooltipTheme,
1372
- topbarBlockPaddingStart,
1373
- treegridCell,
1374
- treegridRoot,
1375
- treegridRow,
1376
- treegridTheme,
1377
- withColumn
599
+ toHue
1378
600
  };
1379
601
  //# sourceMappingURL=index.mjs.map