@dxos/ui-theme 0.8.4-main.4a85c3132b → 0.8.4-main.4f23b4e393

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