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