@dxos/ui-theme 0.8.4-main.d05539e30a → 0.8.4-main.d9fc60f731

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