@dxos/ui-theme 0.8.4-main.8360d9e660 → 0.8.4-main.8baae0fced

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 (157) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/browser/index.mjs +414 -479
  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 +414 -479
  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/{theme.css → main.css} +189 -122
  10. package/dist/plugin/node-cjs/main.css.map +7 -0
  11. package/dist/plugin/node-cjs/meta.json +1 -1
  12. package/dist/plugin/node-cjs/plugins/ThemePlugin.cjs +8 -15
  13. package/dist/plugin/node-cjs/plugins/ThemePlugin.cjs.map +3 -3
  14. package/dist/plugin/node-esm/{theme.css → main.css} +189 -122
  15. package/dist/plugin/node-esm/main.css.map +7 -0
  16. package/dist/plugin/node-esm/meta.json +1 -1
  17. package/dist/plugin/node-esm/plugins/ThemePlugin.mjs +8 -15
  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 +1 -4
  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/fragments/index.d.ts +0 -4
  27. package/dist/types/src/fragments/index.d.ts.map +1 -1
  28. package/dist/types/src/fragments/text.d.ts +0 -1
  29. package/dist/types/src/fragments/text.d.ts.map +1 -1
  30. package/dist/types/src/index.d.ts +1 -1
  31. package/dist/types/src/index.d.ts.map +1 -1
  32. package/dist/types/src/plugins/ThemePlugin.d.ts +1 -1
  33. package/dist/types/src/plugins/ThemePlugin.d.ts.map +1 -1
  34. package/dist/types/src/theme/components/avatar.d.ts.map +1 -1
  35. package/dist/types/src/theme/components/button.d.ts +2 -2
  36. package/dist/types/src/theme/components/button.d.ts.map +1 -1
  37. package/dist/types/src/theme/components/card.d.ts +1 -0
  38. package/dist/types/src/theme/components/card.d.ts.map +1 -1
  39. package/dist/types/src/theme/components/dialog.d.ts.map +1 -1
  40. package/dist/types/src/theme/components/focus.d.ts +6 -0
  41. package/dist/types/src/theme/components/focus.d.ts.map +1 -0
  42. package/dist/types/src/theme/components/icon-button.d.ts +1 -0
  43. package/dist/types/src/theme/components/icon-button.d.ts.map +1 -1
  44. package/dist/types/src/theme/components/icon.d.ts.map +1 -1
  45. package/dist/types/src/theme/components/index.d.ts +1 -0
  46. package/dist/types/src/theme/components/index.d.ts.map +1 -1
  47. package/dist/types/src/theme/components/input.d.ts +8 -8
  48. package/dist/types/src/theme/components/input.d.ts.map +1 -1
  49. package/dist/types/src/theme/components/link.d.ts.map +1 -1
  50. package/dist/types/src/theme/components/list.d.ts.map +1 -1
  51. package/dist/types/src/theme/components/main.d.ts.map +1 -1
  52. package/dist/types/src/theme/components/message.d.ts.map +1 -1
  53. package/dist/types/src/theme/components/popover.d.ts.map +1 -1
  54. package/dist/types/src/theme/components/scroll-area.d.ts +12 -2
  55. package/dist/types/src/theme/components/scroll-area.d.ts.map +1 -1
  56. package/dist/types/src/theme/components/select.d.ts.map +1 -1
  57. package/dist/types/src/theme/components/status.d.ts +1 -1
  58. package/dist/types/src/theme/components/status.d.ts.map +1 -1
  59. package/dist/types/src/theme/components/toast.d.ts.map +1 -1
  60. package/dist/types/src/theme/components/tooltip.d.ts.map +1 -1
  61. package/dist/types/src/theme/components/treegrid.d.ts.map +1 -1
  62. package/dist/types/src/theme/index.d.ts +1 -0
  63. package/dist/types/src/theme/index.d.ts.map +1 -1
  64. package/dist/types/src/theme/primitives/column.d.ts +25 -3
  65. package/dist/types/src/theme/primitives/column.d.ts.map +1 -1
  66. package/dist/types/src/theme/primitives/panel.d.ts +9 -5
  67. package/dist/types/src/theme/primitives/panel.d.ts.map +1 -1
  68. package/dist/types/src/theme/theme.d.ts.map +1 -1
  69. package/dist/types/src/util/elevation.d.ts.map +1 -0
  70. package/dist/types/src/util/hash-styles.d.ts +1 -1
  71. package/dist/types/src/util/hash-styles.d.ts.map +1 -1
  72. package/dist/types/src/util/index.d.ts +3 -0
  73. package/dist/types/src/util/index.d.ts.map +1 -1
  74. package/dist/types/src/util/mx.d.ts +49 -284
  75. package/dist/types/src/util/mx.d.ts.map +1 -1
  76. package/dist/types/src/util/size.d.ts +27 -0
  77. package/dist/types/src/util/size.d.ts.map +1 -0
  78. package/dist/types/src/util/valence.d.ts +4 -0
  79. package/dist/types/src/util/valence.d.ts.map +1 -0
  80. package/dist/types/tsconfig.tsbuildinfo +1 -1
  81. package/package.json +14 -18
  82. package/src/Theme.stories.tsx +5 -5
  83. package/src/css/DESIGN_SYSTEM.md +159 -0
  84. package/src/css/base/base.css +2 -2
  85. package/src/css/components/button.css +4 -3
  86. package/src/css/components/checkbox.css +1 -1
  87. package/src/css/components/{focus-ring.css → focus.css} +27 -13
  88. package/src/css/components/icon.css +9 -0
  89. package/src/css/components/link.css +3 -0
  90. package/src/css/components/panel.css +45 -45
  91. package/src/css/components/selected.css +63 -10
  92. package/src/css/components/selected.md +101 -0
  93. package/src/css/components/surface.css +4 -4
  94. package/src/css/components/tag.css +25 -23
  95. package/src/css/integrations/codemirror.css +5 -3
  96. package/src/css/integrations/tldraw.css +1 -0
  97. package/src/css/layout/main.css +0 -7
  98. package/src/css/layout/size.css +16 -26
  99. package/src/css/theme/animation.css +31 -0
  100. package/src/css/theme/palette.css +6 -0
  101. package/src/css/theme/semantic.css +47 -46
  102. package/src/css/theme/spacing.css +31 -17
  103. package/src/css/theme/styles.css +22 -22
  104. package/src/css/utilities.css +114 -3
  105. package/src/defs.ts +1 -1
  106. package/src/fragments/AUDIT.md +55 -0
  107. package/src/fragments/density.ts +8 -5
  108. package/src/fragments/hover.ts +0 -2
  109. package/src/fragments/index.ts +1 -5
  110. package/src/fragments/text.ts +1 -1
  111. package/src/index.ts +1 -1
  112. package/src/{theme.css → main.css} +47 -10
  113. package/src/plugins/ThemePlugin.ts +12 -24
  114. package/src/plugins/main.css +45 -0
  115. package/src/theme/components/avatar.ts +3 -4
  116. package/src/theme/components/button.ts +2 -2
  117. package/src/theme/components/card.ts +15 -6
  118. package/src/theme/components/dialog.ts +4 -3
  119. package/src/theme/components/focus.ts +33 -0
  120. package/src/theme/components/icon-button.ts +6 -5
  121. package/src/theme/components/icon.ts +7 -5
  122. package/src/theme/components/index.ts +1 -0
  123. package/src/theme/components/input.ts +18 -33
  124. package/src/theme/components/link.ts +1 -2
  125. package/src/theme/components/list.ts +4 -4
  126. package/src/theme/components/menu.ts +4 -4
  127. package/src/theme/components/message.ts +6 -7
  128. package/src/theme/components/popover.ts +4 -5
  129. package/src/theme/components/scroll-area.ts +58 -46
  130. package/src/theme/components/select.ts +2 -3
  131. package/src/theme/components/status.ts +5 -5
  132. package/src/theme/components/toast.ts +2 -3
  133. package/src/theme/components/tooltip.ts +2 -3
  134. package/src/theme/components/treegrid.ts +1 -1
  135. package/src/theme/index.ts +1 -0
  136. package/src/theme/primitives/column.ts +49 -8
  137. package/src/theme/primitives/panel.ts +18 -25
  138. package/src/theme/theme.ts +2 -0
  139. package/src/typings.d.ts +3 -0
  140. package/src/util/hash-styles.ts +19 -19
  141. package/src/util/index.ts +3 -0
  142. package/src/util/mx.ts +112 -7
  143. package/src/util/size.ts +103 -0
  144. package/dist/plugin/node-cjs/theme.css.map +0 -7
  145. package/dist/plugin/node-esm/theme.css.map +0 -7
  146. package/dist/types/src/fragments/elevation.d.ts.map +0 -1
  147. package/dist/types/src/fragments/focus.d.ts +0 -4
  148. package/dist/types/src/fragments/focus.d.ts.map +0 -1
  149. package/dist/types/src/fragments/size.d.ts +0 -9
  150. package/dist/types/src/fragments/size.d.ts.map +0 -1
  151. package/dist/types/src/fragments/valence.d.ts +0 -4
  152. package/dist/types/src/fragments/valence.d.ts.map +0 -1
  153. package/src/fragments/focus.ts +0 -11
  154. package/src/fragments/size.ts +0 -123
  155. /package/dist/types/src/{fragments → util}/elevation.d.ts +0 -0
  156. /package/src/{fragments → util}/elevation.ts +0 -0
  157. /package/src/{fragments → util}/valence.ts +0 -0
@@ -37,7 +37,7 @@ var hueShades = [
37
37
  var roles = [
38
38
  "fill",
39
39
  "surface",
40
- "surface-text",
40
+ "foreground",
41
41
  "text",
42
42
  "border"
43
43
  ];
@@ -48,17 +48,31 @@ var cardMinBlockSize = 18;
48
48
  var cardMaxBlockSize = 30;
49
49
 
50
50
  // src/fragments/density.ts
51
- var coarseBlockSize = "min-h-[2.5rem]";
52
- var coarseDimensions = `${coarseBlockSize} px-3`;
53
51
  var fineBlockSize = "min-h-[2.5rem] pointer-fine:min-h-[2rem]";
52
+ var coarseBlockSize = "min-h-[2.5rem]";
54
53
  var fineDimensions = `${fineBlockSize} px-2`;
55
- var densityBlockSize = (density = "coarse") => density === "fine" ? fineBlockSize : coarseBlockSize;
54
+ var coarseDimensions = `${coarseBlockSize} px-3`;
55
+ var densityDimensions = (density = "fine") => density === "fine" ? fineDimensions : coarseDimensions;
56
+ var densityBlockSize = (density = "fine") => density === "fine" ? fineBlockSize : coarseBlockSize;
56
57
 
57
58
  // src/fragments/disabled.ts
58
59
  var staticDisabled = "opacity-40 cursor-not-allowed shadow-none";
59
60
  var dataDisabled = "data-[disabled]:opacity-40 data-[disabled]:cursor-not-allowed";
60
61
 
61
- // src/fragments/elevation.ts
62
+ // src/fragments/hover.ts
63
+ var ghostHover = "hover:bg-hover-surface";
64
+ var ghostFocusWithin = "focus-within:bg-hover-surface";
65
+ var hoverableControls = "[--controls-opacity:1] hover-hover:[--controls-opacity:0] hover-hover:hover:[--controls-opacity:1]";
66
+ var groupHoverControlItemWithTransition = "transition-opacity duration-200 opacity-0 group-hover:opacity-100";
67
+ var hoverableFocusedKeyboardControls = "focus-visible:[--controls-opacity:1]";
68
+ var hoverableFocusedWithinControls = "focus-within:[--controls-opacity:1]";
69
+ var hoverableOpenControlItem = "hover-hover:aria-[expanded=true]:[--controls-opacity:1]";
70
+ var hoverableControlItem = "opacity-(--controls-opacity)";
71
+
72
+ // src/fragments/text.ts
73
+ var descriptionMessage = "text-description border border-dashed border-separator rounded-sm p-4";
74
+
75
+ // src/util/elevation.ts
62
76
  var surfaceShadow = ({ elevation }) => [
63
77
  elevation === "positioned" ? "shadow-sm" : elevation === "dialog" || elevation === "toast" ? "shadow-md" : "shadow-none"
64
78
  ];
@@ -91,28 +105,12 @@ var surfaceZIndex = ({ level, elevation }) => {
91
105
  }
92
106
  };
93
107
 
94
- // src/fragments/focus.ts
95
- var focusRing = "dx-focus-ring";
96
- var subduedFocus = "focus:outline-hidden focus-visible:outline-hidden focus:ring-0 ring-0 focus:border-0 border-0";
97
- var staticFocusRing = "ring-2 ring-offset-0 ring-primary-350 ring-offset-white dark:ring-primary-450 dark:ring-offset-black";
98
-
99
- // src/fragments/hover.ts
100
- var subtleHover = "hover:bg-hover-overlay";
101
- var ghostHover = "hover:bg-hover-surface";
102
- var ghostFocusWithin = "focus-within:bg-hover-surface";
103
- var hoverableControls = "[--controls-opacity:1] hover-hover:[--controls-opacity:0] hover-hover:hover:[--controls-opacity:1]";
104
- var groupHoverControlItemWithTransition = "transition-opacity duration-200 opacity-0 group-hover:opacity-100";
105
- var hoverableFocusedKeyboardControls = "focus-visible:[--controls-opacity:1]";
106
- var hoverableFocusedWithinControls = "focus-within:[--controls-opacity:1]";
107
- var hoverableOpenControlItem = "hover-hover:aria-[expanded=true]:[--controls-opacity:1]";
108
- var hoverableControlItem = "opacity-(--controls-opacity)";
109
-
110
108
  // src/util/hash-styles.ts
111
109
  var neutral = {
112
110
  hue: "neutral",
113
111
  fill: "bg-neutral-fill",
114
112
  surface: "bg-neutral-surface",
115
- surfaceText: "text-neutral-surface-text",
113
+ foreground: "text-neutral-foreground",
116
114
  text: "text-neutral-text",
117
115
  border: "border-neutral-border"
118
116
  };
@@ -121,7 +119,7 @@ var styles = [
121
119
  hue: "red",
122
120
  fill: "bg-red-fill",
123
121
  surface: "bg-red-surface",
124
- surfaceText: "text-red-surface-text",
122
+ foreground: "text-red-foreground",
125
123
  text: "text-red-text",
126
124
  border: "border-red-border"
127
125
  },
@@ -129,7 +127,7 @@ var styles = [
129
127
  hue: "orange",
130
128
  fill: "bg-orange-fill",
131
129
  surface: "bg-orange-surface",
132
- surfaceText: "text-orange-surface-text",
130
+ foreground: "text-orange-foreground",
133
131
  text: "text-orange-text",
134
132
  border: "border-orange-border"
135
133
  },
@@ -137,7 +135,7 @@ var styles = [
137
135
  hue: "amber",
138
136
  fill: "bg-amber-fill",
139
137
  surface: "bg-amber-surface",
140
- surfaceText: "text-amber-surface-text",
138
+ foreground: "text-amber-foreground",
141
139
  text: "text-amber-text",
142
140
  border: "border-amber-border"
143
141
  },
@@ -145,7 +143,7 @@ var styles = [
145
143
  hue: "yellow",
146
144
  fill: "bg-yellow-fill",
147
145
  surface: "bg-yellow-surface",
148
- surfaceText: "text-yellow-surface-text",
146
+ foreground: "text-yellow-foreground",
149
147
  text: "text-yellow-text",
150
148
  border: "border-yellow-border"
151
149
  },
@@ -153,7 +151,7 @@ var styles = [
153
151
  hue: "lime",
154
152
  fill: "bg-lime-fill",
155
153
  surface: "bg-lime-surface",
156
- surfaceText: "text-lime-surface-text",
154
+ foreground: "text-lime-foreground",
157
155
  text: "text-lime-text",
158
156
  border: "border-lime-border"
159
157
  },
@@ -161,7 +159,7 @@ var styles = [
161
159
  hue: "green",
162
160
  fill: "bg-green-fill",
163
161
  surface: "bg-green-surface",
164
- surfaceText: "text-green-surface-text",
162
+ foreground: "text-green-foreground",
165
163
  text: "text-green-text",
166
164
  border: "border-green-border"
167
165
  },
@@ -169,7 +167,7 @@ var styles = [
169
167
  hue: "emerald",
170
168
  fill: "bg-emerald-fill",
171
169
  surface: "bg-emerald-surface",
172
- surfaceText: "text-emerald-surface-text",
170
+ foreground: "text-emerald-foreground",
173
171
  text: "text-emerald-text",
174
172
  border: "border-emerald-border"
175
173
  },
@@ -177,7 +175,7 @@ var styles = [
177
175
  hue: "teal",
178
176
  fill: "bg-teal-fill",
179
177
  surface: "bg-teal-surface",
180
- surfaceText: "text-teal-surface-text",
178
+ foreground: "text-teal-foreground",
181
179
  text: "text-teal-text",
182
180
  border: "border-teal-border"
183
181
  },
@@ -185,7 +183,7 @@ var styles = [
185
183
  hue: "cyan",
186
184
  fill: "bg-cyan-fill",
187
185
  surface: "bg-cyan-surface",
188
- surfaceText: "text-cyan-surface-text",
186
+ foreground: "text-cyan-foreground",
189
187
  text: "text-cyan-text",
190
188
  border: "border-cyan-border"
191
189
  },
@@ -193,7 +191,7 @@ var styles = [
193
191
  hue: "sky",
194
192
  fill: "bg-sky-fill",
195
193
  surface: "bg-sky-surface",
196
- surfaceText: "text-sky-surface-text",
194
+ foreground: "text-sky-foreground",
197
195
  text: "text-sky-text",
198
196
  border: "border-sky-border"
199
197
  },
@@ -201,7 +199,7 @@ var styles = [
201
199
  hue: "blue",
202
200
  fill: "bg-blue-fill",
203
201
  surface: "bg-blue-surface",
204
- surfaceText: "text-blue-surface-text",
202
+ foreground: "text-blue-foreground",
205
203
  text: "text-blue-text",
206
204
  border: "border-blue-border"
207
205
  },
@@ -209,7 +207,7 @@ var styles = [
209
207
  hue: "indigo",
210
208
  fill: "bg-indigo-fill",
211
209
  surface: "bg-indigo-surface",
212
- surfaceText: "text-indigo-surface-text",
210
+ foreground: "text-indigo-foreground",
213
211
  text: "text-indigo-text",
214
212
  border: "border-indigo-border"
215
213
  },
@@ -217,7 +215,7 @@ var styles = [
217
215
  hue: "violet",
218
216
  fill: "bg-violet-fill",
219
217
  surface: "bg-violet-surface",
220
- surfaceText: "text-violet-surface-text",
218
+ foreground: "text-violet-foreground",
221
219
  text: "text-violet-text",
222
220
  border: "border-violet-border"
223
221
  },
@@ -225,7 +223,7 @@ var styles = [
225
223
  hue: "purple",
226
224
  fill: "bg-purple-fill",
227
225
  surface: "bg-purple-surface",
228
- surfaceText: "text-purple-surface-text",
226
+ foreground: "text-purple-foreground",
229
227
  text: "text-purple-text",
230
228
  border: "border-purple-border"
231
229
  },
@@ -233,7 +231,7 @@ var styles = [
233
231
  hue: "fuchsia",
234
232
  fill: "bg-fuchsia-fill",
235
233
  surface: "bg-fuchsia-surface",
236
- surfaceText: "text-fuchsia-surface-text",
234
+ foreground: "text-fuchsia-foreground",
237
235
  text: "text-fuchsia-text",
238
236
  border: "border-fuchsia-border"
239
237
  },
@@ -241,7 +239,7 @@ var styles = [
241
239
  hue: "pink",
242
240
  fill: "bg-pink-fill",
243
241
  surface: "bg-pink-surface",
244
- surfaceText: "text-pink-surface-text",
242
+ foreground: "text-pink-foreground",
245
243
  text: "text-pink-text",
246
244
  border: "border-pink-border"
247
245
  },
@@ -249,7 +247,7 @@ var styles = [
249
247
  hue: "rose",
250
248
  fill: "bg-rose-fill",
251
249
  surface: "bg-rose-surface",
252
- surfaceText: "text-rose-surface-text",
250
+ foreground: "text-rose-foreground",
253
251
  text: "text-rose-text",
254
252
  border: "border-rose-border"
255
253
  }
@@ -270,7 +268,10 @@ var getHashHue = (id) => {
270
268
  var getHash = (id) => id.split("").reduce((acc, char) => acc + char.charCodeAt(0), 0);
271
269
 
272
270
  // src/util/mx.ts
271
+ import { Children, createElement, forwardRef, isValidElement } from "react";
273
272
  import { extendTailwindMerge, validators } from "tailwind-merge";
273
+ import { log } from "@dxos/log";
274
+ var __dxlog_file = "/__w/dxos/dxos/packages/ui/ui-theme/src/util/mx.ts";
274
275
  var mx = extendTailwindMerge({
275
276
  extend: {
276
277
  classGroups: {
@@ -315,336 +316,235 @@ var mx = extendTailwindMerge({
315
316
  }
316
317
  }
317
318
  });
318
- var composableProps = ({ className, classNames, ...props }, { className: defaultClassNames, ...defaults } = {}) => ({
319
+ var composableProps = ({ className, classNames, role, style, ...props }, { classNames: defaultClassNames, ...defaults } = {}) => ({
320
+ // Default props.
319
321
  ...defaults,
322
+ // Spread supplied props.
320
323
  ...props,
324
+ // Prefer explicit role, then defaults role, then 'none'.
325
+ role: role ?? defaults.role ?? "none",
326
+ // Merge styles.
327
+ style: {
328
+ ...defaults.style,
329
+ ...style
330
+ },
331
+ // Compose classnames.
321
332
  className: mx(defaultClassNames, className, classNames)
322
333
  });
334
+ var COMPOSABLE = /* @__PURE__ */ Symbol.for("dxos.composable");
335
+ function slottable(render) {
336
+ const wrapped = (props, forwardedRef) => {
337
+ let warn = false;
338
+ if (props.asChild) {
339
+ try {
340
+ const child = Children.only(props.children);
341
+ if (isValidElement(child) && typeof child.type !== "string" && !child.type[COMPOSABLE]) {
342
+ warn = true;
343
+ log.warn("slot child is not composable; create it with composable() or slottable()", {
344
+ child: child.type.displayName ?? child.type.name
345
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 100, S: this });
346
+ }
347
+ } catch {
348
+ }
349
+ }
350
+ const result = render(props, forwardedRef);
351
+ if (warn) {
352
+ return createElement("div", {
353
+ role: "none",
354
+ className: "dx-slot-warning"
355
+ }, result);
356
+ }
357
+ return result;
358
+ };
359
+ const component = forwardRef(wrapped);
360
+ component[COMPOSABLE] = true;
361
+ return component;
362
+ }
363
+ function composable(render) {
364
+ const component = forwardRef(render);
365
+ component[COMPOSABLE] = true;
366
+ return component;
367
+ }
323
368
 
324
- // src/fragments/size.ts
325
- var largeIconSize = {
326
- "--icon-size": "1.25rem"
369
+ // src/util/size.ts
370
+ var sizeMap = {
371
+ 0: {
372
+ w: "w-0",
373
+ h: "h-0"
374
+ },
375
+ px: {
376
+ w: "w-px",
377
+ h: "h-px"
378
+ },
379
+ 0.5: {
380
+ w: "w-0.5",
381
+ h: "h-0.5"
382
+ },
383
+ 1: {
384
+ w: "w-1",
385
+ h: "h-1"
386
+ },
387
+ 1.5: {
388
+ w: "w-1.5",
389
+ h: "h-1.5"
390
+ },
391
+ 2: {
392
+ w: "w-2",
393
+ h: "h-2"
394
+ },
395
+ 2.5: {
396
+ w: "w-2.5",
397
+ h: "h-2.5"
398
+ },
399
+ 3: {
400
+ w: "w-3",
401
+ h: "h-3"
402
+ },
403
+ 3.5: {
404
+ w: "w-3.5",
405
+ h: "h-3.5"
406
+ },
407
+ 4: {
408
+ w: "w-4",
409
+ h: "h-4"
410
+ },
411
+ 5: {
412
+ w: "w-5",
413
+ h: "h-5"
414
+ },
415
+ 6: {
416
+ w: "w-6",
417
+ h: "h-6"
418
+ },
419
+ 7: {
420
+ w: "w-7",
421
+ h: "h-7"
422
+ },
423
+ 8: {
424
+ w: "w-8",
425
+ h: "h-8"
426
+ },
427
+ 9: {
428
+ w: "w-9",
429
+ h: "h-9"
430
+ },
431
+ 10: {
432
+ w: "w-10",
433
+ h: "h-10"
434
+ },
435
+ 11: {
436
+ w: "w-11",
437
+ h: "h-11"
438
+ },
439
+ 12: {
440
+ w: "w-12",
441
+ h: "h-12"
442
+ },
443
+ 14: {
444
+ w: "w-14",
445
+ h: "h-14"
446
+ },
447
+ 16: {
448
+ w: "w-16",
449
+ h: "h-16"
450
+ },
451
+ 20: {
452
+ w: "w-20",
453
+ h: "h-20"
454
+ },
455
+ 24: {
456
+ w: "w-24",
457
+ h: "h-24"
458
+ },
459
+ 28: {
460
+ w: "w-28",
461
+ h: "h-28"
462
+ },
463
+ 32: {
464
+ w: "w-32",
465
+ h: "h-32"
466
+ },
467
+ 36: {
468
+ w: "w-36",
469
+ h: "h-36"
470
+ },
471
+ 40: {
472
+ w: "w-40",
473
+ h: "h-40"
474
+ },
475
+ 44: {
476
+ w: "w-44",
477
+ h: "h-44"
478
+ },
479
+ 48: {
480
+ w: "w-48",
481
+ h: "h-48"
482
+ },
483
+ 52: {
484
+ w: "w-52",
485
+ h: "h-52"
486
+ },
487
+ 56: {
488
+ w: "w-56",
489
+ h: "h-56"
490
+ },
491
+ 60: {
492
+ w: "w-60",
493
+ h: "h-60"
494
+ },
495
+ 64: {
496
+ w: "w-64",
497
+ h: "h-64"
498
+ },
499
+ 72: {
500
+ w: "w-72",
501
+ h: "h-72"
502
+ },
503
+ 80: {
504
+ w: "w-80",
505
+ h: "h-80"
506
+ },
507
+ 96: {
508
+ w: "w-96",
509
+ h: "h-96"
510
+ }
327
511
  };
328
- var sizeWidthMap = /* @__PURE__ */ new Map([
329
- [
330
- 0,
331
- "w-0"
332
- ],
333
- [
334
- "px",
335
- "w-px"
336
- ],
337
- [
338
- 0.5,
339
- "w-0.5"
340
- ],
341
- [
342
- 1,
343
- "w-1"
344
- ],
345
- [
346
- 1.5,
347
- "w-1.5"
348
- ],
349
- [
350
- 2,
351
- "w-2"
352
- ],
353
- [
354
- 2.5,
355
- "w-2.5"
356
- ],
357
- [
358
- 3,
359
- "w-3"
360
- ],
361
- [
362
- 3.5,
363
- "w-3.5"
364
- ],
365
- [
366
- 4,
367
- "w-4"
368
- ],
369
- [
370
- 5,
371
- "w-5"
372
- ],
373
- [
374
- 6,
375
- "w-6"
376
- ],
377
- [
378
- 7,
379
- "w-7"
380
- ],
381
- [
382
- 8,
383
- "w-8"
384
- ],
385
- [
386
- 9,
387
- "w-9"
388
- ],
389
- [
390
- 10,
391
- "w-10"
392
- ],
393
- [
394
- 11,
395
- "w-11"
396
- ],
397
- [
398
- 12,
399
- "w-12"
400
- ],
401
- [
402
- 14,
403
- "w-14"
404
- ],
405
- [
406
- 16,
407
- "w-16"
408
- ],
409
- [
410
- 20,
411
- "w-20"
412
- ],
413
- [
414
- 24,
415
- "w-24"
416
- ],
417
- [
418
- 28,
419
- "w-28"
420
- ],
421
- [
422
- 32,
423
- "w-32"
424
- ],
425
- [
426
- 36,
427
- "w-36"
428
- ],
429
- [
430
- 40,
431
- "w-40"
432
- ],
433
- [
434
- 44,
435
- "w-44"
436
- ],
437
- [
438
- 48,
439
- "w-48"
440
- ],
441
- [
442
- 52,
443
- "w-52"
444
- ],
445
- [
446
- 56,
447
- "w-56"
448
- ],
449
- [
450
- 60,
451
- "w-60"
452
- ],
453
- [
454
- 64,
455
- "w-64"
456
- ],
457
- [
458
- 72,
459
- "w-72"
460
- ],
461
- [
462
- 80,
463
- "w-80"
464
- ],
465
- [
466
- 96,
467
- "w-96"
468
- ]
469
- ]);
470
- var sizeHeightMap = /* @__PURE__ */ new Map([
471
- [
472
- 0,
473
- "h-0"
474
- ],
475
- [
476
- "px",
477
- "h-px"
478
- ],
479
- [
480
- 0.5,
481
- "h-0.5"
482
- ],
483
- [
484
- 1,
485
- "h-1"
486
- ],
487
- [
488
- 1.5,
489
- "h-1.5"
490
- ],
491
- [
492
- 2,
493
- "h-2"
494
- ],
495
- [
496
- 2.5,
497
- "h-2.5"
498
- ],
499
- [
500
- 3,
501
- "h-3"
502
- ],
503
- [
504
- 3.5,
505
- "h-3.5"
506
- ],
507
- [
508
- 4,
509
- "h-4"
510
- ],
511
- [
512
- 5,
513
- "h-5"
514
- ],
515
- [
516
- 6,
517
- "h-6"
518
- ],
519
- [
520
- 7,
521
- "h-7"
522
- ],
523
- [
524
- 8,
525
- "h-8"
526
- ],
527
- [
528
- 9,
529
- "h-9"
530
- ],
531
- [
532
- 10,
533
- "h-10"
534
- ],
535
- [
536
- 11,
537
- "h-11"
538
- ],
539
- [
540
- 12,
541
- "h-12"
542
- ],
543
- [
544
- 14,
545
- "h-14"
546
- ],
547
- [
548
- 16,
549
- "h-16"
550
- ],
551
- [
552
- 20,
553
- "h-20"
554
- ],
555
- [
556
- 24,
557
- "h-24"
558
- ],
559
- [
560
- 28,
561
- "h-28"
562
- ],
563
- [
564
- 32,
565
- "h-32"
566
- ],
567
- [
568
- 36,
569
- "h-36"
570
- ],
571
- [
572
- 40,
573
- "h-40"
574
- ],
575
- [
576
- 44,
577
- "h-44"
578
- ],
579
- [
580
- 48,
581
- "h-48"
582
- ],
583
- [
584
- 52,
585
- "h-52"
586
- ],
587
- [
588
- 56,
589
- "h-56"
590
- ],
591
- [
592
- 60,
593
- "h-60"
594
- ],
595
- [
596
- 64,
597
- "h-64"
598
- ],
599
- [
600
- 72,
601
- "h-72"
602
- ],
603
- [
604
- 80,
605
- "h-80"
606
- ],
607
- [
608
- 96,
609
- "h-96"
610
- ]
611
- ]);
612
- var sizes = new Set(sizeWidthMap.keys());
613
- var getSizeHeight = sizeHeightMap.get.bind(sizeHeightMap);
614
- var getSizeWidth = sizeWidthMap.get.bind(sizeWidthMap);
615
- var getSize = (size) => mx(getSizeHeight(size), getSizeWidth(size));
616
- var computeSize = (value, defaultSize) => {
617
- if (sizes.has(value)) {
512
+ var SIZE_VALUES = Object.keys(sizeMap).map((key) => key === "px" ? "px" : Number(key));
513
+ var getHeight = (size) => sizeMap[size]?.h;
514
+ var getWidth = (size) => sizeMap[size]?.w;
515
+ var getSize = (size) => mx(getHeight(size), getWidth(size));
516
+ var sizeValue = (size) => size === "px" ? 1 : size;
517
+ var sizeToRem = (size) => size === "px" ? "1px" : `${size * 0.25}rem`;
518
+ var iconSize = (size) => ({
519
+ "--icon-size": size ? sizeToRem(size) : "initial"
520
+ });
521
+ var snapSize = (value, defaultSize) => {
522
+ if (SIZE_VALUES.includes(value)) {
618
523
  return value;
619
524
  } else if (value <= 0) {
620
525
  return 0;
621
- } else if (value === 1) {
526
+ } else if (value < 0.5) {
622
527
  return "px";
623
528
  } else {
624
529
  const wholeSeries = Math.floor(value);
625
530
  const halfSeries = Math.floor(value * 2) / 2;
626
531
  const doubleSeries = Math.floor(value / 2) * 2;
627
532
  const quadrupleSeries = Math.floor(value / 4) * 4;
628
- if (sizes.has(halfSeries)) {
533
+ if (SIZE_VALUES.includes(halfSeries)) {
629
534
  return halfSeries;
630
- } else if (sizes.has(wholeSeries)) {
535
+ } else if (SIZE_VALUES.includes(wholeSeries)) {
631
536
  return wholeSeries;
632
- } else if (sizes.has(doubleSeries)) {
537
+ } else if (SIZE_VALUES.includes(doubleSeries)) {
633
538
  return doubleSeries;
634
- } else if (sizes.has(quadrupleSeries)) {
539
+ } else if (SIZE_VALUES.includes(quadrupleSeries)) {
635
540
  return quadrupleSeries;
636
541
  } else {
637
542
  return defaultSize;
638
543
  }
639
544
  }
640
545
  };
641
- var sizeValue = (size) => size === "px" ? 1 : size;
642
-
643
- // src/fragments/text.ts
644
- var descriptionTextPrimary = "text-sm font-normal text-base-surface-text";
645
- var descriptionMessage = "text-description border border-dashed border-separator rounded-sm p-4";
646
546
 
647
- // src/fragments/valence.ts
547
+ // src/util/valence.ts
648
548
  var textValence = (valence) => {
649
549
  switch (valence) {
650
550
  case "success":
@@ -676,12 +576,12 @@ var messageValence = (valence) => {
676
576
  var avatarRoot = ({ size = 10, inGroup }, ...etc) => mx("relative inline-flex shrink-0", getSize(size), inGroup && (size === "px" || size <= 3 ? "-mr-1" : "-mr-2"), ...etc);
677
577
  var avatarLabel = ({ srOnly }, ...etc) => mx(srOnly && "sr-only", ...etc);
678
578
  var avatarDescription = ({ srOnly }, ...etc) => mx("text-description", srOnly && "sr-only", ...etc);
679
- var avatarFrame = ({ variant }, ...etc) => mx("w-full h-full bg-(--surface-bg)", variant === "circle" ? "rounded-full" : "rounded-sm", ...etc);
579
+ var avatarFrame = ({ variant }, ...etc) => mx("h-full w-full bg-(--surface-bg)", variant === "circle" ? "rounded-full" : "rounded-sm", ...etc);
680
580
  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);
681
581
  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);
682
582
  var avatarFallbackText = (_props, ...etc) => mx("fill-white", ...etc);
683
583
  var avatarGroup = (_props, ...etc) => mx("inline-flex items-center", ...etc);
684
- 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 && getSizeHeight(size), ...etc);
584
+ 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);
685
585
  var avatarGroupDescription = ({ srOnly }, ...etc) => mx(srOnly ? "sr-only" : "text-description", ...etc);
686
586
  var avatarTheme = {
687
587
  root: avatarRoot,
@@ -711,12 +611,12 @@ var breadcrumbTheme = {
711
611
  };
712
612
 
713
613
  // src/theme/components/card.ts
714
- var cardRoot = ({ border, fullWidth }, ...etc) => mx("dx-card group/card relative flex flex-col w-full min-h-(--dx-rail-item) dx-card-min-width 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 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);
715
615
  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);
716
616
  var cardTitle = (_props, ...etc) => mx("dx-card__title grow truncate", ...etc);
717
- var cardContent = (_props, ...etc) => mx("dx-card__content contents [&>:last-child]:pb-1", ...etc);
617
+ var cardContent = (_props, ...etc) => mx("dx-card__content contents pb-1 last:pb-0", ...etc);
718
618
  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);
719
- var cardText = ({ variant = "default", truncate: _truncate }, ...etc) => mx("dx-card__text flex overflow-hidden", variant === "default" && "py-1", variant === "description" && "py-1.5", ...etc);
619
+ 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);
720
620
  var cardTextSpan = ({ variant = "default", truncate }, ...etc) => mx(variant === "description" && "text-sm text-description line-clamp-3", truncate && "truncate", ...etc);
721
621
  var cardPoster = (_props, ...etc) => mx("dx-card__poster col-span-3 max-h-[200px]", ...etc);
722
622
  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);
@@ -724,12 +624,14 @@ var cardAction = (_props, ...etc) => mx("dx-card__acztion col-span-3 !grid grid-
724
624
  var cardActionLabel = (_props, ...etc) => mx("dx-card__action-label min-w-0 flex-1 truncate", ...etc);
725
625
  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);
726
626
  var cardLinkLabel = (_props, ...etc) => mx("dx-card__link-label min-w-0 flex-1 truncate", ...etc);
727
- var cardIconBlock = (_props, ...etc) => mx("dx-card__icon-block grid h-[var(--dx-rail-item)] w-[var(--dx-rail-item)] place-items-center [&>*]:p-1", ...etc);
627
+ var cardRow = (_, ...etc) => mx("dx-card__row col-span-3 grid grid-cols-subgrid", ...etc);
628
+ 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);
728
629
  var cardTheme = {
729
630
  root: cardRoot,
730
631
  toolbar: cardToolbar,
731
632
  title: cardTitle,
732
633
  content: cardContent,
634
+ row: cardRow,
733
635
  heading: cardHeading,
734
636
  text: cardText,
735
637
  "text-span": cardTextSpan,
@@ -743,8 +645,8 @@ var cardTheme = {
743
645
  };
744
646
 
745
647
  // src/theme/components/button.ts
746
- 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";
747
- var staticDefaultButtonColors = "bg-input-surface text-input-surface-text";
648
+ 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";
649
+ var staticDefaultButtonColors = "bg-input-surface text-input-foreground";
748
650
  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");
749
651
  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");
750
652
  var buttonRoot = (_props, ...etc) => {
@@ -758,8 +660,37 @@ var buttonTheme = {
758
660
  group: buttonGroup
759
661
  };
760
662
 
663
+ // src/theme/primitives/column.ts
664
+ var withColumn = {
665
+ /** Centers element in the Column grid via --dx-col. No-op outside Column or inside ScrollArea. */
666
+ center: () => "[grid-column:var(--dx-col,auto)]",
667
+ /** Propagates the Column grid to children via subgrid. No-op outside Column.
668
+ * Direct children default to center column unless they are a dx-container (ScrollArea). */
669
+ 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)]",
670
+ /** Resets --dx-col after consuming --gutter. Applied by ScrollArea.Viewport. */
671
+ consumed: () => "[--dx-col:auto]"
672
+ };
673
+ var columnRoot = (_, ...etc) => {
674
+ return mx("dx-column-root grid", ...etc);
675
+ };
676
+ var columnRow = (_, ...etc) => {
677
+ return mx("col-span-3 grid grid-cols-subgrid", ...etc);
678
+ };
679
+ var columnBleed = (_, ...etc) => {
680
+ return mx("col-span-full grid grid-cols-subgrid min-h-0", ...etc);
681
+ };
682
+ var columnCenter = (_, ...etc) => {
683
+ return mx(withColumn.center(), "min-h-0", ...etc);
684
+ };
685
+ var columnTheme = {
686
+ root: columnRoot,
687
+ row: columnRow,
688
+ bleed: columnBleed,
689
+ center: columnCenter
690
+ };
691
+
761
692
  // src/theme/components/dialog.ts
762
- var sizeMap = {
693
+ var sizeMap2 = {
763
694
  sm: "md:max-w-[24rem]",
764
695
  md: "md:max-w-[32rem]!",
765
696
  lg: "md:max-w-[40rem]!",
@@ -767,11 +698,11 @@ var sizeMap = {
767
698
  };
768
699
  var dialogOverlay = (_props, ...etc) => mx("dx-dialog__overlay", ...etc);
769
700
  var dialogContent = ({ inOverlayLayout, size = "md" }, ...etc) => {
770
- 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%]", sizeMap[size], ...etc);
701
+ 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);
771
702
  };
772
- var dialogHeader = (_props, ...etc) => mx("dx-dialog__header flex pb-4 items-center justify-between", ...etc);
773
- var dialogBody = (_props, ...etc) => mx("dx-dialog__body flex flex-col h-full py-2 gap-2", ...etc);
774
- var dialogActionBar = (_props, ...etc) => mx("dx-dialog__actionbar flex items-center pt-4 gap-2 dx-density-coarse", ...etc);
703
+ var dialogHeader = (_props, ...etc) => mx("dx-dialog__header flex pb-4 items-center justify-between", withColumn.center(), ...etc);
704
+ var dialogBody = (_props, ...etc) => mx("dx-dialog__body dx-expander", withColumn.propagate(), ...etc);
705
+ var dialogActionBar = (_props, ...etc) => mx("dx-dialog__actionbar flex items-center pt-4 gap-2 dx-density-coarse", withColumn.center(), ...etc);
775
706
  var dialogTitle = ({ srOnly }, ...etc) => mx("dx-dialog__title", srOnly && "sr-only", ...etc);
776
707
  var dialogDescription = ({ srOnly }, ...etc) => mx("dx-dialog__description", "text-description", srOnly && "sr-only", ...etc);
777
708
  var dialogTheme = {
@@ -784,15 +715,24 @@ var dialogTheme = {
784
715
  description: dialogDescription
785
716
  };
786
717
 
718
+ // src/theme/components/focus.ts
719
+ 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);
720
+ var focusTheme = {
721
+ group: focusRing,
722
+ item: focusRing
723
+ };
724
+
787
725
  // src/theme/components/icon.ts
788
- var iconRoot = ({ size }, etc) => mx("shrink-0 text-[var(--icons-color,currentColor)]", size ? getSize(size) : "[width:var(--icon-size,1em)] [height:var(--icon-size,1em)]", etc);
726
+ var iconRoot = ({ size }, etc) => {
727
+ 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);
728
+ };
789
729
  var iconTheme = {
790
730
  root: iconRoot
791
731
  };
792
732
 
793
733
  // src/theme/components/icon-button.ts
794
- var iconButtonRoot = ({ iconOnly }, ...etc) => {
795
- return mx("gap-2", iconOnly && "p-icon-button-padding min-h-0", ...etc);
734
+ var iconButtonRoot = ({ iconOnly, square }, ...etc) => {
735
+ return mx("px-1.5", !iconOnly && "gap-1.5", square && "aspect-square", ...etc);
796
736
  };
797
737
  var iconButtonTheme = {
798
738
  root: iconButtonRoot
@@ -817,49 +757,46 @@ var inputValence = (valence) => {
817
757
  }
818
758
  };
819
759
  var sharedSubduedInputStyles = (props) => [
820
- "py-0 w-full bg-transparent text-current placeholder-placeholder",
821
760
  '[[data-drag-autoscroll="active"]_&]:pointer-events-none',
822
- props.density === "fine" ? fineBlockSize : coarseBlockSize,
823
- subduedFocus,
761
+ "py-0 w-full bg-transparent text-current placeholder-placeholder",
762
+ "dx-focus-subdued",
763
+ densityDimensions(props.density),
824
764
  props.disabled && staticDisabled
825
765
  ];
826
766
  var sharedDefaultInputStyles = (props) => [
827
- "py-0 w-full text-base-surface-text rounded-xs placeholder-placeholder",
828
767
  '[[data-drag-autoscroll="active"]_&]:pointer-events-none',
768
+ "py-0 w-full text-base-foreground rounded-xs placeholder-placeholder",
829
769
  textInputSurfaceFocus,
830
- props.density === "fine" ? fineDimensions : coarseDimensions,
770
+ densityDimensions(props.density),
831
771
  props.disabled ? staticDisabled : textInputSurfaceHover
832
772
  ];
833
773
  var sharedStaticInputStyles = (props) => [
834
- "py-0 w-full text-base-surface-text rounded-xs placeholder-placeholder",
835
774
  '[[data-drag-autoscroll="active"]_&]:pointer-events-none',
775
+ "py-0 w-full text-base-foreground rounded-xs placeholder-placeholder",
836
776
  textInputSurfaceFocus,
837
777
  textInputSurfaceHover,
838
778
  props.focused && "bg-attention-surface",
839
779
  inputValence(props.validationValence),
840
780
  props.disabled && staticDisabled,
841
- props.focused && staticFocusRing
781
+ props.focused && "dx-focus-static"
842
782
  ];
843
- var inputInput = (props, ...etc) => props.variant === "subdued" ? mx(...sharedSubduedInputStyles(props), ...etc) : props.variant === "static" ? mx(...sharedStaticInputStyles(props), ...etc) : mx(...sharedDefaultInputStyles(props), !props.disabled && focusRing, inputValence(props.validationValence), ...etc);
844
- var inputTextArea = (props, ...etc) => inputInput(props, ...[
845
- "-mb-1.5",
846
- ...etc
847
- ]);
783
+ 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);
784
+ var inputTextArea = (props, ...etc) => inputInput(props, ...etc);
848
785
  var inputCheckbox = ({ size = 5 }, ...etc) => mx("dx-checkbox dx-focus-ring", getSize(size), ...etc);
849
- var inputCheckboxIndicator = ({ size = 5, checked }, ...etc) => mx(getSize(computeSize(sizeValue(size) * 0.65, 4)), !checked && "invisible", ...etc);
786
+ var inputCheckboxIndicator = ({ size = 5, checked }, ...etc) => mx(getSize(snapSize(sizeValue(size) * 0.65, 4)), !checked && "invisible", ...etc);
850
787
  var inputSwitch = ({ size = 5, disabled }, ...etc) => mx(
851
- getSizeHeight(size),
852
- getSizeWidth(computeSize(sizeValue(size) * 1.75, 9)),
788
+ getHeight(size),
789
+ getWidth(snapSize(sizeValue(size) * 1.75, 9)),
853
790
  booleanInputSurface,
854
791
  !disabled && booleanInputSurfaceHover,
855
792
  // TODO(burdon): Added m-1 margin to make 40px width to align with 40px icon button.
856
793
  "cursor-pointer shrink-0 rounded-full px-1 mx-1 relative",
857
- focusRing,
794
+ "dx-focus-ring",
858
795
  ...etc
859
796
  );
860
797
  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);
861
798
  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);
862
- 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 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);
863
800
  var inputLabel = (props, ...etc) => mx("block", inputTextLabel, props.srOnly && "sr-only", ...etc);
864
801
  var inputDescription = (props, ...etc) => mx("text-description", props.srOnly && "sr-only", ...etc);
865
802
  var inputDescriptionAndValidation = (props, ...etc) => mx("leading-none my-1.5", props.srOnly && "sr-only", ...etc);
@@ -880,7 +817,7 @@ var inputTheme = {
880
817
  };
881
818
 
882
819
  // src/theme/components/link.ts
883
- 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", focusRing, ...etc);
820
+ 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);
884
821
  var linkTheme = {
885
822
  root: linkRoot
886
823
  };
@@ -889,9 +826,9 @@ var linkTheme = {
889
826
  var listRoot = (_, ...etc) => mx(...etc);
890
827
  var listItem = ({ collapsible }, ...etc) => mx(!collapsible && "flex", ...etc);
891
828
  var listItemEndcap = ({ density }, ...etc) => mx(density === "fine" ? getSize(8) : getSize(10), "shrink-0 flex items-center justify-center", ...etc);
892
- var listItemHeading = ({ density }, ...etc) => mx(densityBlockSize(density), "flex items-center", ...etc);
829
+ var listItemHeading = ({ density }, ...etc) => mx(densityBlockSize(density), "flex items-center overflow-hidden [&>span]:truncate", ...etc);
893
830
  var listItemDragHandleIcon = (_props, ...etc) => mx(getSize(5), "mt-2.5", ...etc);
894
- var listItemOpenTrigger = ({ density }, ...etc) => mx("w-5 rounded-sm flex justify-center items-center", densityBlockSize(density), ghostHover, focusRing, ...etc);
831
+ var listItemOpenTrigger = ({ density }, ...etc) => mx("w-5 rounded-sm flex justify-center items-center", densityBlockSize(density), ghostHover, "dx-focus-ring", ...etc);
895
832
  var listItemOpenTriggerIcon = (_props, ...etc) => {
896
833
  return mx(getSize(5), ...etc);
897
834
  };
@@ -930,7 +867,7 @@ var menuContent = ({ elevation }, ...etc) => mx("dx-modal-surface w-48 rounded-s
930
867
  elevation: "positioned"
931
868
  }), ...etc);
932
869
  var menuViewport = (_props, ...etc) => mx("rounded-sm p-1 max-h-[var(--radix-dropdown-menu-content-available-height)] overflow-y-auto", ...etc);
933
- var menuItem = (_props, ...etc) => mx("flex cursor-pointer select-none items-center gap-2 rounded-xs px-2 py-2 text-sm", "data-[highlighted]:bg-hover-surface", subduedFocus, dataDisabled, ...etc);
870
+ 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);
934
871
  var menuSeparator = (_props, ...etc) => mx("my-1 mx-2 h-px bg-separator", ...etc);
935
872
  var menuGroupLabel = (_props, ...etc) => mx("text-description", "select-none px-2 py-2", ...etc);
936
873
  var menuArrow = (_props, ...etc) => mx("fill-separator", ...etc);
@@ -945,19 +882,19 @@ var menuTheme = {
945
882
 
946
883
  // src/theme/components/message.ts
947
884
  var messageRoot = ({ valence }, etc) => {
948
- return mx("grid grid-cols-[min-content_1fr] gap-x-2 p-trim-sm rounded-sm", messageValence(valence), etc);
885
+ return mx("grid grid-cols-[2rem_1fr_2rem] p-1 rounded-sm", messageValence(valence), etc);
949
886
  };
950
887
  var messageHeader = (_, etc) => {
951
- return mx("col-span-2 grid grid-cols-subgrid items-center", etc);
888
+ return mx("col-span-full grid grid-cols-subgrid items-center", etc);
952
889
  };
953
890
  var messageTitle = (_, etc) => {
954
- return mx("col-start-2 text-lg gap-trim-sm [&>svg]:inline-block", etc);
891
+ return mx("col-start-2 truncate", etc);
955
892
  };
956
893
  var messageIcon = (_, etc) => {
957
- return mx("col-start-1", etc);
894
+ return mx("col-start-1 grid place-items-center", etc);
958
895
  };
959
896
  var messageContent = (_, etc) => {
960
- return mx("grid grid-cols-subgrid col-start-2 first:font-medium", etc);
897
+ return mx("col-start-2 grid grid-cols-subgrid inline first:font-medium", etc);
961
898
  };
962
899
  var messageTheme = {
963
900
  root: messageRoot,
@@ -973,15 +910,8 @@ var popoverContent = ({ elevation }, ...etc) => mx("dx-modal-surface border bord
973
910
  }), surfaceZIndex({
974
911
  elevation,
975
912
  level: "menu"
976
- }), focusRing, ...etc);
977
- var popoverViewport = ({ constrainBlock, constrainInline }, ...etc) => mx(
978
- "flex flex-col min-h-0 min-w-popover-min-width",
979
- (constrainBlock || constrainInline) && "overflow-hidden",
980
- // Ensures it respects available height from Radix (or 100dvh).
981
- constrainBlock && "max-h-[min(var(--radix-popover-content-available-height),calc(100dvh-var(--spacing-screen-border)*2))]",
982
- constrainInline && "max-w-(--radix-popover-content-available-width)",
983
- ...etc
984
- );
913
+ }), "dx-focus-ring", ...etc);
914
+ 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);
985
915
  var popoverArrow = (_props, ...etc) => mx("fill-separator", ...etc);
986
916
  var popoverTheme = {
987
917
  content: popoverContent,
@@ -990,40 +920,66 @@ var popoverTheme = {
990
920
  };
991
921
 
992
922
  // src/theme/components/scroll-area.ts
993
- var scrollAreaRoot = ({ orientation, margin, thin }, ...etc) => mx(
994
- "overflow-hidden",
995
- orientation === "vertical" && "group/scroll-v dx-container",
996
- orientation === "horizontal" && "group/scroll-h dx-container",
997
- orientation === "all" && "group/scroll-all dx-container",
998
- // TODO(burdon): Audit composition.
999
- // Apply col-span-full only when inside a Column.Root grid (detected via dx-column marker).
1000
- "[.dx-column_&]:col-span-full",
1001
- // NOTE: Uses --gutter CSS variable
1002
- // If contained within Column.Root grid, the gutter is set by that component.
1003
- margin && [
1004
- orientation === "vertical" && (thin ? "pl-[var(--gutter,4px)] pr-[calc(var(--gutter,4px)-4px)]" : "pl-[var(--gutter,8px)] pr-[calc(var(--gutter,8px)-8px)]"),
1005
- orientation === "horizontal" && (thin ? "py-[var(--gutter,4px)]" : "py-[var(--gutter,8px)]"),
1006
- orientation === "all" && (thin ? "pl-[var(--gutter,4px)] py-[var(--gutter,8px)]" : "pl-[var(--gutter,8px)] py-[var(--gutter,8px)]")
1007
- ],
923
+ var scrollbar = {
924
+ thin: {
925
+ size: 4,
926
+ padding: 4
927
+ },
928
+ coarse: {
929
+ size: 8,
930
+ padding: 8
931
+ }
932
+ };
933
+ var scrollAreaRoot = ({ orientation }, ...etc) => mx(
934
+ // Expand
935
+ "dx-container",
936
+ orientation === "vertical" && "group/scroll-v flex flex-col",
937
+ orientation === "horizontal" && "group/scroll-h flex",
938
+ orientation === "all" && "group/scroll-all",
939
+ // Apply col-span-full only when inside a Column.Root grid (detected via dx-column-root marker).
940
+ "[.dx-column-root_&]:col-span-full",
1008
941
  ...etc
1009
942
  );
1010
- var scrollAreaViewport = ({ orientation, autoHide, padding, snap, thin }, ...etc) => mx("h-full w-full", orientation === "vertical" && "flex flex-col overflow-y-scroll", orientation === "horizontal" && "flex overflow-x-scroll", orientation === "all" && "overflow-scroll", thin ? "[&::-webkit-scrollbar]:w-[4px] [&::-webkit-scrollbar]:h-[4px]" : "[&::-webkit-scrollbar]:w-[8px] [&::-webkit-scrollbar]:h-[8px]", "[&::-webkit-scrollbar-corner]:bg-transparent", "[&::-webkit-scrollbar-track]:bg-transparent", "[&::-webkit-scrollbar-thumb]:rounded-none", autoHide ? [
1011
- orientation === "vertical" && "group-hover/scroll-v:[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb",
1012
- orientation === "horizontal" && "group-hover/scroll-h:[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb",
1013
- orientation === "all" && "group-hover/scroll-all:[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb"
1014
- ] : [
1015
- orientation === "vertical" && "[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb",
1016
- orientation === "horizontal" && "[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb",
1017
- orientation === "all" && "[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb"
1018
- ], padding && [
1019
- orientation === "vertical" && "px-[4px]",
1020
- orientation === "horizontal" && "pb-[4px]",
1021
- orientation === "all" && "pl-[4px] pb-[4px]"
1022
- ], snap && [
1023
- orientation === "vertical" && "snap-y snap-mandatory",
1024
- orientation === "horizontal" && "snap-x snap-mandatory",
1025
- orientation === "all" && "snap-both snap-mandatory"
1026
- ], ...etc);
943
+ var scrollAreaViewport = ({ orientation, centered, padding, snap, autoHide }, ...etc) => {
944
+ return mx(
945
+ "flex-1 min-h-0 w-full",
946
+ // Reset --dx-col so nested components don't try to grid-position themselves.
947
+ // ScrollArea has already consumed --gutter for padding.
948
+ withColumn.consumed(),
949
+ orientation === "vertical" && "overflow-y-scroll",
950
+ orientation === "horizontal" && "flex overflow-x-scroll overscroll-x-contain",
951
+ orientation === "all" && "overflow-scroll",
952
+ "[&::-webkit-scrollbar-corner]:bg-transparent",
953
+ "[&::-webkit-scrollbar-track]:bg-transparent",
954
+ "[&::-webkit-scrollbar-thumb]:rounded-none",
955
+ "[&::-webkit-scrollbar]:w-[var(--scroll-width)] [&::-webkit-scrollbar]:h-[var(--scroll-width)]",
956
+ // If contained within Column.Root grid the gutter is set by that component (--gutter CSS variable).
957
+ // If centered, left padding compensates for scrollbar width so content is visually centered.
958
+ (orientation === "vertical" || orientation === "all") && (padding ? [
959
+ centered ? "pl-[var(--gutter,calc(var(--scroll-width)+var(--scroll-padding)))]" : "pl-[var(--gutter,0)]",
960
+ "pr-[calc(var(--gutter,calc(var(--scroll-width)+var(--scroll-padding)))-var(--scroll-width))]"
961
+ ] : centered && "pl-[var(--scroll-width)]"),
962
+ (orientation === "horizontal" || orientation === "all") && (padding ? [
963
+ centered && "pt-[calc(var(--scroll-width)+var(--scroll-padding))]",
964
+ "pb-[var(--scroll-padding)]"
965
+ ] : centered && "pt-[var(--scroll-width)]"),
966
+ snap && [
967
+ orientation === "vertical" && "snap-y snap-mandatory",
968
+ orientation === "horizontal" && "snap-x snap-mandatory",
969
+ orientation === "all" && "snap-both snap-mandatory"
970
+ ],
971
+ autoHide ? [
972
+ orientation === "vertical" && "group-hover/scroll-v:[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb",
973
+ orientation === "horizontal" && "group-hover/scroll-h:[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb",
974
+ orientation === "all" && "group-hover/scroll-all:[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb"
975
+ ] : [
976
+ orientation === "vertical" && "[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb",
977
+ orientation === "horizontal" && "[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb",
978
+ orientation === "all" && "[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb"
979
+ ],
980
+ ...etc
981
+ );
982
+ };
1027
983
  var scrollAreaTheme = {
1028
984
  root: scrollAreaRoot,
1029
985
  viewport: scrollAreaViewport
@@ -1039,7 +995,7 @@ var selectContent = ({ elevation }, ...etc) => {
1039
995
  }), ...etc);
1040
996
  };
1041
997
  var selectViewport = (_props, ...etc) => mx(...etc);
1042
- 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 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);
1043
999
  var selectItemIndicator = (_props, ...etc) => mx("items-center", ...etc);
1044
1000
  var selectArrow = (_props, ...etc) => mx("fill-separator", ...etc);
1045
1001
  var selectSeparator = (_props, ...etc) => mx("self-stretch border-b my-1 border-separator", ...etc);
@@ -1075,8 +1031,8 @@ var skeletonTheme = {
1075
1031
  };
1076
1032
 
1077
1033
  // src/theme/components/status.ts
1078
- var statusRoot = ({ variant = "default" }, ...etc) => mx("h-1 relative bg-hover-overlay rounded-full overflow-hidden", variant === "main-bottom" ? "w-full block" : "inline-20 inline-block", ...etc);
1079
- var statusBar = ({ indeterminate, variant = "default" }, ...etc) => mx("absolute inset-y-0 block rounded-full", variant === "main-bottom" ? "bg-accent-surface" : "bg-un-accent", indeterminate ? "animate-progress-indeterminate" : "start-0", ...etc);
1034
+ 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);
1035
+ 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);
1080
1036
  var statusTheme = {
1081
1037
  root: statusRoot,
1082
1038
  bar: statusBar
@@ -1097,7 +1053,7 @@ var toastViewport = (_props, ...etc) => mx(
1097
1053
  );
1098
1054
  var toastRoot = (_props, ...etc) => mx("dx-modal-surface rounded-md flex p-2 gap-2", surfaceShadow({
1099
1055
  elevation: "toast"
1100
- }), "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]", focusRing, ...etc);
1056
+ }), "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);
1101
1057
  var toastBody = (_props, ...etc) => mx("grow flex flex-col gap-1 justify-center pl-2", ...etc);
1102
1058
  var toastActions = (_props, ...etc) => mx("shrink-0 flex flex-col gap-1 justify-center", ...etc);
1103
1059
  var toastTitle = ({ srOnly }, ...etc) => mx("shrink-0 font-medium", srOnly && "sr-only", ...etc);
@@ -1125,7 +1081,7 @@ var toolbarTheme = {
1125
1081
  };
1126
1082
 
1127
1083
  // src/theme/components/tooltip.ts
1128
- 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
+ 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({
1129
1085
  elevation: "positioned"
1130
1086
  }), surfaceZIndex({
1131
1087
  elevation,
@@ -1173,7 +1129,7 @@ var levelStyles = /* @__PURE__ */ new Map([
1173
1129
  ]
1174
1130
  ]);
1175
1131
  var treegridRoot = (_, ...etc) => mx("grid", ...etc);
1176
- var treegridRow = ({ level = 1 }, ...etc) => mx("contents", levelStyles.get(Math.min(Math.max(Math.round(level), 1), 8)), ...etc);
1132
+ var treegridRow = ({ level = 1 }, ...etc) => mx(levelStyles.get(Math.min(Math.max(Math.round(level), 1), 8)), ...etc);
1177
1133
  var treegridCell = ({ indent }, ...etc) => mx(indent && "indent", ...etc);
1178
1134
  var treegridTheme = {
1179
1135
  root: treegridRoot,
@@ -1181,45 +1137,22 @@ var treegridTheme = {
1181
1137
  cell: treegridCell
1182
1138
  };
1183
1139
 
1184
- // src/theme/theme.ts
1185
- import { getDeep } from "@dxos/util";
1186
-
1187
- // src/theme/primitives/column.ts
1188
- var columnRoot = (_, ...etc) => mx("dx-column w-full min-w-0 grid", ...etc);
1189
- var columnRow = (_, ...etc) => mx("col-span-3 grid grid-cols-subgrid", ...etc);
1190
- var columnSegment = (_, ...etc) => mx("col-start-2 col-span-1 min-w-0", ...etc);
1191
- var columnTheme = {
1192
- root: columnRoot,
1193
- row: columnRow,
1194
- segment: columnSegment
1195
- };
1196
-
1197
1140
  // src/theme/primitives/panel.ts
1141
+ var sizes = {
1142
+ lg: "h-(--dx-topbar-size)",
1143
+ md: "h-(--dx-toolbar-size)",
1144
+ sm: "h-(--dx-statusbar-size)"
1145
+ };
1198
1146
  var panelRoot = (_, ...etc) => mx(
1199
1147
  // prettier-ignore
1200
- "h-full w-full grid grid-cols-[100%] overflow-hidden",
1148
+ "dx-container grid grid-cols-[100%] overflow-hidden",
1201
1149
  // Add uncategorized children to content slot.
1202
1150
  "[&>*:not([data-slot])]:[grid-area:content]",
1203
1151
  ...etc
1204
1152
  );
1205
- var panelToolbar = (_, ...etc) => mx(
1206
- // prettier-ignore
1207
- "[grid-area:toolbar]",
1208
- "h-(--dx-toolbar-size)",
1209
- "[.dx-main-mobile-layout_&]:px-3",
1210
- ...etc
1211
- );
1212
- var panelContent = (_, ...etc) => mx(
1213
- // prettier-ignore
1214
- "[grid-area:content] overflow-hidden min-h-0",
1215
- ...etc
1216
- );
1217
- var panelStatusbar = (_, ...etc) => mx(
1218
- // prettier-ignore
1219
- "[grid-area:statusbar]",
1220
- "h-(--dx-statusbar-size)",
1221
- ...etc
1222
- );
1153
+ var panelToolbar = ({ size = "md" }, ...etc) => mx("[grid-area:toolbar]", "shrink-0", sizes[size], ...etc);
1154
+ var panelContent = (_, ...etc) => mx("[grid-area:content] min-h-0", ...etc);
1155
+ var panelStatusbar = ({ size = "md" }, ...etc) => mx("[grid-area:statusbar]", "shrink-0", sizes[size], ...etc);
1223
1156
  var panelTheme = {
1224
1157
  root: panelRoot,
1225
1158
  toolbar: panelToolbar,
@@ -1228,6 +1161,7 @@ var panelTheme = {
1228
1161
  };
1229
1162
 
1230
1163
  // src/theme/theme.ts
1164
+ import { getDeep } from "@dxos/util";
1231
1165
  var defaultTheme = {
1232
1166
  themeName: () => "default",
1233
1167
  //
@@ -1243,6 +1177,7 @@ var defaultTheme = {
1243
1177
  button: buttonTheme,
1244
1178
  card: cardTheme,
1245
1179
  dialog: dialogTheme,
1180
+ focus: focusTheme,
1246
1181
  icon: iconTheme,
1247
1182
  iconButton: iconButtonTheme,
1248
1183
  input: inputTheme,
@@ -1298,17 +1233,16 @@ export {
1298
1233
  cardMinBlockSize,
1299
1234
  cardMinInlineSize,
1300
1235
  cardTheme,
1301
- coarseBlockSize,
1302
- coarseDimensions,
1236
+ columnTheme,
1237
+ composable,
1303
1238
  composableProps,
1304
- computeSize,
1305
1239
  dataDisabled,
1306
1240
  defaultButtonColors,
1307
1241
  defaultTheme,
1308
1242
  defaultTx,
1309
1243
  densityBlockSize,
1244
+ densityDimensions,
1310
1245
  descriptionMessage,
1311
- descriptionTextPrimary,
1312
1246
  dialogActionBar,
1313
1247
  dialogBody,
1314
1248
  dialogContent,
@@ -1317,15 +1251,13 @@ export {
1317
1251
  dialogOverlay,
1318
1252
  dialogTheme,
1319
1253
  dialogTitle,
1320
- fineBlockSize,
1321
- fineDimensions,
1322
- focusRing,
1254
+ focusTheme,
1323
1255
  getHashHue,
1324
1256
  getHashStyles,
1257
+ getHeight,
1325
1258
  getSize,
1326
- getSizeHeight,
1327
- getSizeWidth,
1328
1259
  getStyles,
1260
+ getWidth,
1329
1261
  ghostButtonColors,
1330
1262
  ghostFocusWithin,
1331
1263
  ghostHover,
@@ -1340,10 +1272,10 @@ export {
1340
1272
  iconButtonRoot,
1341
1273
  iconButtonTheme,
1342
1274
  iconRoot,
1275
+ iconSize,
1343
1276
  iconTheme,
1344
1277
  inputTextLabel,
1345
1278
  inputTheme,
1346
- largeIconSize,
1347
1279
  linkRoot,
1348
1280
  linkTheme,
1349
1281
  listItem,
@@ -1378,6 +1310,7 @@ export {
1378
1310
  mx,
1379
1311
  osTranslations,
1380
1312
  palette,
1313
+ panelTheme,
1381
1314
  popoverArrow,
1382
1315
  popoverContent,
1383
1316
  popoverTheme,
@@ -1387,6 +1320,7 @@ export {
1387
1320
  scrollAreaRoot,
1388
1321
  scrollAreaTheme,
1389
1322
  scrollAreaViewport,
1323
+ scrollbar,
1390
1324
  selectArrow,
1391
1325
  selectContent,
1392
1326
  selectItem,
@@ -1397,18 +1331,18 @@ export {
1397
1331
  selectViewport,
1398
1332
  separatorRoot,
1399
1333
  separatorTheme,
1334
+ sizeToRem,
1400
1335
  sizeValue,
1401
1336
  skeletonRoot,
1402
1337
  skeletonTheme,
1338
+ slottable,
1339
+ snapSize,
1403
1340
  splitterTheme,
1404
1341
  staticDefaultButtonColors,
1405
1342
  staticDisabled,
1406
- staticFocusRing,
1407
1343
  statusBar,
1408
1344
  statusRoot,
1409
1345
  statusTheme,
1410
- subduedFocus,
1411
- subtleHover,
1412
1346
  surfaceShadow,
1413
1347
  surfaceZIndex,
1414
1348
  tagRoot,
@@ -1432,6 +1366,7 @@ export {
1432
1366
  treegridCell,
1433
1367
  treegridRoot,
1434
1368
  treegridRow,
1435
- treegridTheme
1369
+ treegridTheme,
1370
+ withColumn
1436
1371
  };
1437
1372
  //# sourceMappingURL=index.mjs.map