@dxos/ui-theme 0.8.4-main.6fa680abb7 → 0.8.4-main.765dc60934

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