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

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