@dxos/ui-theme 0.8.4-main.fcc0d83b33 → 0.8.4-staging.60fe92afc8

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