@dxos/ui-theme 0.0.0 → 0.8.4-main.05e74ebcff

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 (260) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/browser/index.mjs +1370 -0
  4. package/dist/lib/browser/index.mjs.map +7 -0
  5. package/dist/lib/browser/meta.json +1 -0
  6. package/dist/lib/node-esm/index.mjs +1372 -0
  7. package/dist/lib/node-esm/index.mjs.map +7 -0
  8. package/dist/lib/node-esm/meta.json +1 -0
  9. package/dist/plugin/node-cjs/main.css +1573 -0
  10. package/dist/plugin/node-cjs/main.css.map +7 -0
  11. package/dist/plugin/node-cjs/meta.json +1 -0
  12. package/dist/plugin/node-cjs/plugins/ThemePlugin.cjs +137 -0
  13. package/dist/plugin/node-cjs/plugins/ThemePlugin.cjs.map +7 -0
  14. package/dist/plugin/node-esm/main.css +1573 -0
  15. package/dist/plugin/node-esm/main.css.map +7 -0
  16. package/dist/plugin/node-esm/meta.json +1 -0
  17. package/dist/plugin/node-esm/plugins/ThemePlugin.mjs +105 -0
  18. package/dist/plugin/node-esm/plugins/ThemePlugin.mjs.map +7 -0
  19. package/dist/types/src/Theme.stories.d.ts +27 -0
  20. package/dist/types/src/Theme.stories.d.ts.map +1 -0
  21. package/dist/types/src/defs.d.ts +21 -0
  22. package/dist/types/src/defs.d.ts.map +1 -0
  23. package/dist/types/src/fragments/density.d.ts +4 -0
  24. package/dist/types/src/fragments/density.d.ts.map +1 -0
  25. package/dist/types/src/fragments/disabled.d.ts +3 -0
  26. package/dist/types/src/fragments/disabled.d.ts.map +1 -0
  27. package/dist/types/src/fragments/hover.d.ts +9 -0
  28. package/dist/types/src/fragments/hover.d.ts.map +1 -0
  29. package/dist/types/src/fragments/index.d.ts +5 -0
  30. package/dist/types/src/fragments/index.d.ts.map +1 -0
  31. package/dist/types/src/fragments/text.d.ts +2 -0
  32. package/dist/types/src/fragments/text.d.ts.map +1 -0
  33. package/dist/types/src/index.d.ts +5 -0
  34. package/dist/types/src/index.d.ts.map +1 -0
  35. package/dist/types/src/plugins/ThemePlugin.d.ts +16 -0
  36. package/dist/types/src/plugins/ThemePlugin.d.ts.map +1 -0
  37. package/dist/types/src/plugins/dark-mode.d.ts +1 -0
  38. package/dist/types/src/plugins/dark-mode.d.ts.map +1 -0
  39. package/dist/types/src/theme/components/avatar.d.ts +21 -0
  40. package/dist/types/src/theme/components/avatar.d.ts.map +1 -0
  41. package/dist/types/src/theme/components/breadcrumb.d.ts +9 -0
  42. package/dist/types/src/theme/components/breadcrumb.d.ts.map +1 -0
  43. package/dist/types/src/theme/components/button.d.ts +15 -0
  44. package/dist/types/src/theme/components/button.d.ts.map +1 -0
  45. package/dist/types/src/theme/components/card.d.ts +12 -0
  46. package/dist/types/src/theme/components/card.d.ts.map +1 -0
  47. package/dist/types/src/theme/components/dialog.d.ts +17 -0
  48. package/dist/types/src/theme/components/dialog.d.ts.map +1 -0
  49. package/dist/types/src/theme/components/focus.d.ts +6 -0
  50. package/dist/types/src/theme/components/focus.d.ts.map +1 -0
  51. package/dist/types/src/theme/components/icon-button.d.ts +9 -0
  52. package/dist/types/src/theme/components/icon-button.d.ts.map +1 -0
  53. package/dist/types/src/theme/components/icon.d.ts +10 -0
  54. package/dist/types/src/theme/components/icon.d.ts.map +1 -0
  55. package/dist/types/src/theme/components/index.d.ts +27 -0
  56. package/dist/types/src/theme/components/index.d.ts.map +1 -0
  57. package/dist/types/src/theme/components/input.d.ts +115 -0
  58. package/dist/types/src/theme/components/input.d.ts.map +1 -0
  59. package/dist/types/src/theme/components/link.d.ts +7 -0
  60. package/dist/types/src/theme/components/link.d.ts.map +1 -0
  61. package/dist/types/src/theme/components/list.d.ts +14 -0
  62. package/dist/types/src/theme/components/list.d.ts.map +1 -0
  63. package/dist/types/src/theme/components/main.d.ts +28 -0
  64. package/dist/types/src/theme/components/main.d.ts.map +1 -0
  65. package/dist/types/src/theme/components/menu.d.ts +13 -0
  66. package/dist/types/src/theme/components/menu.d.ts.map +1 -0
  67. package/dist/types/src/theme/components/message.d.ts +12 -0
  68. package/dist/types/src/theme/components/message.d.ts.map +1 -0
  69. package/dist/types/src/theme/components/popover.d.ts +11 -0
  70. package/dist/types/src/theme/components/popover.d.ts.map +1 -0
  71. package/dist/types/src/theme/components/scroll-area.d.ts +32 -0
  72. package/dist/types/src/theme/components/scroll-area.d.ts.map +1 -0
  73. package/dist/types/src/theme/components/select.d.ts +13 -0
  74. package/dist/types/src/theme/components/select.d.ts.map +1 -0
  75. package/dist/types/src/theme/components/separator.d.ts +8 -0
  76. package/dist/types/src/theme/components/separator.d.ts.map +1 -0
  77. package/dist/types/src/theme/components/skeleton.d.ts +7 -0
  78. package/dist/types/src/theme/components/skeleton.d.ts.map +1 -0
  79. package/dist/types/src/theme/components/splitter.d.ts +4 -0
  80. package/dist/types/src/theme/components/splitter.d.ts.map +1 -0
  81. package/dist/types/src/theme/components/status.d.ts +9 -0
  82. package/dist/types/src/theme/components/status.d.ts.map +1 -0
  83. package/dist/types/src/theme/components/tag.d.ts +7 -0
  84. package/dist/types/src/theme/components/tag.d.ts.map +1 -0
  85. package/dist/types/src/theme/components/toast.d.ts +12 -0
  86. package/dist/types/src/theme/components/toast.d.ts.map +1 -0
  87. package/dist/types/src/theme/components/toolbar.d.ts +11 -0
  88. package/dist/types/src/theme/components/toolbar.d.ts.map +1 -0
  89. package/dist/types/src/theme/components/tooltip.d.ts +8 -0
  90. package/dist/types/src/theme/components/tooltip.d.ts.map +1 -0
  91. package/dist/types/src/theme/components/treegrid.d.ts +10 -0
  92. package/dist/types/src/theme/components/treegrid.d.ts.map +1 -0
  93. package/dist/types/src/theme/index.d.ts +4 -0
  94. package/dist/types/src/theme/index.d.ts.map +1 -0
  95. package/dist/types/src/theme/primitives/column.d.ts +29 -0
  96. package/dist/types/src/theme/primitives/column.d.ts.map +1 -0
  97. package/dist/types/src/theme/primitives/index.d.ts +3 -0
  98. package/dist/types/src/theme/primitives/index.d.ts.map +1 -0
  99. package/dist/types/src/theme/primitives/panel.d.ts +13 -0
  100. package/dist/types/src/theme/primitives/panel.d.ts.map +1 -0
  101. package/dist/types/src/theme/theme.d.ts +5 -0
  102. package/dist/types/src/theme/theme.d.ts.map +1 -0
  103. package/dist/types/src/util/elevation.d.ts +9 -0
  104. package/dist/types/src/util/elevation.d.ts.map +1 -0
  105. package/dist/types/src/util/hash-styles.d.ts +18 -0
  106. package/dist/types/src/util/hash-styles.d.ts.map +1 -0
  107. package/dist/types/src/util/index.d.ts +6 -0
  108. package/dist/types/src/util/index.d.ts.map +1 -0
  109. package/dist/types/src/util/mx.d.ts +58 -0
  110. package/dist/types/src/util/mx.d.ts.map +1 -0
  111. package/dist/types/src/util/size.d.ts +27 -0
  112. package/dist/types/src/util/size.d.ts.map +1 -0
  113. package/dist/types/src/util/valence.d.ts +4 -0
  114. package/dist/types/src/util/valence.d.ts.map +1 -0
  115. package/dist/types/tsconfig.tsbuildinfo +1 -0
  116. package/package.json +32 -39
  117. package/src/Theme.stories.tsx +224 -0
  118. package/src/css/DESIGN_SYSTEM.md +159 -0
  119. package/src/css/base/base.css +43 -0
  120. package/src/{styles/layers → css/base}/typography.css +21 -3
  121. package/src/{styles/layers → css/components}/button.css +23 -14
  122. package/src/{styles/layers → css/components}/checkbox.css +12 -8
  123. package/src/css/components/dialog.css +78 -0
  124. package/src/{styles/layers/focus-ring.css → css/components/focus.css} +60 -41
  125. package/src/css/components/icon.css +9 -0
  126. package/src/css/components/link.css +12 -0
  127. package/src/css/components/panel.css +117 -0
  128. package/src/css/components/scrollbar.css +24 -0
  129. package/src/css/components/selected.css +76 -0
  130. package/src/css/components/selected.md +101 -0
  131. package/src/css/components/surface.css +34 -0
  132. package/src/css/components/tag.css +132 -0
  133. package/src/css/components/text.css +124 -0
  134. package/src/css/integrations/codemirror.css +34 -0
  135. package/src/css/integrations/tldraw.css +14 -0
  136. package/src/css/layout/main.css +205 -0
  137. package/src/{styles/layers → css/layout}/native.css +6 -4
  138. package/src/css/layout/positioning.css +19 -0
  139. package/src/{styles/layers → css/layout}/size.css +130 -102
  140. package/src/css/theme/animation.css +260 -0
  141. package/src/css/theme/border.css +23 -0
  142. package/src/css/theme/palette.css +36 -0
  143. package/src/css/theme/semantic.css +112 -0
  144. package/src/css/theme/spacing.css +147 -0
  145. package/src/css/theme/styles.css +145 -0
  146. package/src/css/theme/text.css +37 -0
  147. package/src/css/utilities.css +118 -0
  148. package/src/defs.ts +48 -0
  149. package/src/fragments/AUDIT.md +55 -0
  150. package/src/fragments/density.ts +16 -0
  151. package/src/fragments/hover.ts +16 -0
  152. package/src/fragments/index.ts +10 -0
  153. package/src/fragments/text.ts +6 -0
  154. package/src/index.ts +3 -14
  155. package/src/main.css +121 -0
  156. package/src/plugins/ThemePlugin.ts +125 -0
  157. package/src/plugins/dark-mode.ts +22 -0
  158. package/src/plugins/main.css +45 -0
  159. package/src/{styles → theme}/components/avatar.ts +12 -13
  160. package/src/theme/components/button.ts +48 -0
  161. package/src/theme/components/card.ts +102 -0
  162. package/src/theme/components/dialog.ts +61 -0
  163. package/src/theme/components/focus.ts +33 -0
  164. package/src/{styles → theme}/components/icon-button.ts +6 -5
  165. package/src/theme/components/icon.ts +28 -0
  166. package/src/{styles → theme}/components/index.ts +4 -1
  167. package/src/theme/components/input.ts +171 -0
  168. package/src/{styles → theme}/components/link.ts +3 -4
  169. package/src/{styles → theme}/components/list.ts +5 -5
  170. package/src/{styles → theme}/components/main.ts +9 -11
  171. package/src/{styles → theme}/components/menu.ts +11 -21
  172. package/src/{styles → theme}/components/message.ts +11 -7
  173. package/src/{styles → theme}/components/popover.ts +13 -12
  174. package/src/theme/components/scroll-area.ts +115 -0
  175. package/src/{styles → theme}/components/select.ts +8 -16
  176. package/src/{styles → theme}/components/separator.ts +3 -3
  177. package/src/theme/components/skeleton.ts +23 -0
  178. package/src/theme/components/splitter.ts +20 -0
  179. package/src/{styles → theme}/components/status.ts +7 -7
  180. package/src/{styles → theme}/components/tag.ts +1 -1
  181. package/src/{styles → theme}/components/toast.ts +6 -8
  182. package/src/theme/components/toolbar.ts +35 -0
  183. package/src/{styles → theme}/components/tooltip.ts +4 -6
  184. package/src/{styles → theme}/components/treegrid.ts +9 -9
  185. package/src/{styles → theme}/index.ts +2 -2
  186. package/src/theme/primitives/column.ts +71 -0
  187. package/src/theme/primitives/index.ts +6 -0
  188. package/src/theme/primitives/panel.ts +43 -0
  189. package/src/{styles → theme}/theme.ts +27 -9
  190. package/src/typings.d.ts +3 -1
  191. package/src/{styles/fragments → util}/elevation.ts +6 -8
  192. package/src/util/hash-styles.ts +118 -98
  193. package/src/util/index.ts +3 -0
  194. package/src/util/mx.ts +165 -43
  195. package/src/util/size.ts +103 -0
  196. package/src/util/valence.ts +33 -0
  197. package/src/Tokens.stories.tsx +0 -88
  198. package/src/config/index.ts +0 -6
  199. package/src/config/tailwind.ts +0 -250
  200. package/src/config/tokens/alias-colors.ts +0 -39
  201. package/src/config/tokens/index.ts +0 -92
  202. package/src/config/tokens/lengths.ts +0 -97
  203. package/src/config/tokens/physical-colors.ts +0 -125
  204. package/src/config/tokens/semantic-colors.ts +0 -27
  205. package/src/config/tokens/sememes-calls.ts +0 -17
  206. package/src/config/tokens/sememes-codemirror.ts +0 -50
  207. package/src/config/tokens/sememes-hue.ts +0 -54
  208. package/src/config/tokens/sememes-sheet.ts +0 -62
  209. package/src/config/tokens/sememes-system.ts +0 -302
  210. package/src/config/tokens/sizes.ts +0 -7
  211. package/src/config/tokens/types.ts +0 -9
  212. package/src/docs/theme.drawio.svg +0 -635
  213. package/src/plugins/esbuild-plugin.ts +0 -65
  214. package/src/plugins/plugin.ts +0 -130
  215. package/src/plugins/resolveContent.ts +0 -51
  216. package/src/styles/components/README.md +0 -6
  217. package/src/styles/components/anchored-overflow.ts +0 -20
  218. package/src/styles/components/button.ts +0 -48
  219. package/src/styles/components/dialog.ts +0 -36
  220. package/src/styles/components/icon.ts +0 -19
  221. package/src/styles/components/input.ts +0 -177
  222. package/src/styles/components/scroll-area.ts +0 -43
  223. package/src/styles/components/toolbar.ts +0 -29
  224. package/src/styles/fragments/density.ts +0 -17
  225. package/src/styles/fragments/dimension.ts +0 -8
  226. package/src/styles/fragments/focus.ts +0 -16
  227. package/src/styles/fragments/group.ts +0 -12
  228. package/src/styles/fragments/hover.ts +0 -25
  229. package/src/styles/fragments/index.ts +0 -20
  230. package/src/styles/fragments/layout.ts +0 -7
  231. package/src/styles/fragments/motion.ts +0 -6
  232. package/src/styles/fragments/ornament.ts +0 -10
  233. package/src/styles/fragments/selected.ts +0 -45
  234. package/src/styles/fragments/shimmer.ts +0 -9
  235. package/src/styles/fragments/size.ts +0 -117
  236. package/src/styles/fragments/surface.ts +0 -29
  237. package/src/styles/fragments/text.ts +0 -12
  238. package/src/styles/fragments/valence.ts +0 -46
  239. package/src/styles/layers/README.md +0 -15
  240. package/src/styles/layers/anchored-overflow.css +0 -9
  241. package/src/styles/layers/animation.css +0 -17
  242. package/src/styles/layers/attention.css +0 -8
  243. package/src/styles/layers/base.css +0 -25
  244. package/src/styles/layers/can-scroll.css +0 -26
  245. package/src/styles/layers/dialog.css +0 -42
  246. package/src/styles/layers/drag-preview.css +0 -18
  247. package/src/styles/layers/hues.css +0 -110
  248. package/src/styles/layers/index.css +0 -26
  249. package/src/styles/layers/main.css +0 -160
  250. package/src/styles/layers/positioning.css +0 -23
  251. package/src/styles/layers/surfaces.css +0 -31
  252. package/src/styles/layers/tag.css +0 -132
  253. package/src/styles/layers/tldraw.css +0 -91
  254. package/src/styles/layers/tokens.css +0 -45
  255. package/src/tailwind.ts +0 -5
  256. package/src/theme.css +0 -9
  257. package/src/types.ts +0 -7
  258. package/src/util/withLogical.ts +0 -114
  259. /package/src/{styles/fragments → fragments}/disabled.ts +0 -0
  260. /package/src/{styles → theme}/components/breadcrumb.ts +0 -0
@@ -0,0 +1,1372 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+
3
+ // src/defs.ts
4
+ var osTranslations = "org.dxos.i18n.os";
5
+ var hues = [
6
+ "red",
7
+ "orange",
8
+ "amber",
9
+ "yellow",
10
+ "lime",
11
+ "green",
12
+ "emerald",
13
+ "teal",
14
+ "cyan",
15
+ "sky",
16
+ "blue",
17
+ "indigo",
18
+ "violet",
19
+ "purple",
20
+ "fuchsia",
21
+ "pink",
22
+ "rose"
23
+ ];
24
+ var hueShades = [
25
+ 50,
26
+ 100,
27
+ 200,
28
+ 300,
29
+ 400,
30
+ 500,
31
+ 600,
32
+ 700,
33
+ 800,
34
+ 900,
35
+ 950
36
+ ];
37
+ var roles = [
38
+ "fill",
39
+ "surface",
40
+ "foreground",
41
+ "text",
42
+ "border"
43
+ ];
44
+ var cardMinInlineSize = 18;
45
+ var cardDefaultInlineSize = 20;
46
+ var cardMaxInlineSize = 22;
47
+ var cardMinBlockSize = 18;
48
+ var cardMaxBlockSize = 30;
49
+
50
+ // src/fragments/density.ts
51
+ var fineBlockSize = "min-h-[2.5rem] pointer-fine:min-h-[2rem]";
52
+ var coarseBlockSize = "min-h-[2.5rem]";
53
+ var fineDimensions = `${fineBlockSize} px-2`;
54
+ var coarseDimensions = `${coarseBlockSize} px-3`;
55
+ var densityDimensions = (density = "fine") => density === "fine" ? fineDimensions : coarseDimensions;
56
+ var densityBlockSize = (density = "fine") => density === "fine" ? fineBlockSize : coarseBlockSize;
57
+
58
+ // src/fragments/disabled.ts
59
+ var staticDisabled = "opacity-40 cursor-not-allowed shadow-none";
60
+ var dataDisabled = "data-[disabled]:opacity-40 data-[disabled]:cursor-not-allowed";
61
+
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
76
+ var surfaceShadow = ({ elevation }) => [
77
+ elevation === "positioned" ? "shadow-sm" : elevation === "dialog" || elevation === "toast" ? "shadow-md" : "shadow-none"
78
+ ];
79
+ var surfaceZIndex = ({ level, elevation }) => {
80
+ switch (level) {
81
+ case "tooltip":
82
+ return elevation === "dialog" ? [
83
+ "z-[53]"
84
+ ] : elevation === "toast" ? [
85
+ "z-[43]"
86
+ ] : [
87
+ "z-50"
88
+ ];
89
+ case "menu":
90
+ return elevation === "dialog" ? [
91
+ "z-[52]"
92
+ ] : elevation === "toast" ? [
93
+ "z-[42]"
94
+ ] : [
95
+ "z-20"
96
+ ];
97
+ default:
98
+ return elevation === "dialog" ? [
99
+ "z-[51]"
100
+ ] : elevation === "toast" ? [
101
+ "z-[41]"
102
+ ] : [
103
+ "z-[1]"
104
+ ];
105
+ }
106
+ };
107
+
108
+ // src/util/hash-styles.ts
109
+ var neutral = {
110
+ hue: "neutral",
111
+ fill: "bg-neutral-fill",
112
+ surface: "bg-neutral-surface",
113
+ foreground: "text-neutral-foreground",
114
+ text: "text-neutral-text",
115
+ border: "border-neutral-border"
116
+ };
117
+ var styles = [
118
+ {
119
+ hue: "red",
120
+ fill: "bg-red-fill",
121
+ surface: "bg-red-surface",
122
+ foreground: "text-red-foreground",
123
+ text: "text-red-text",
124
+ border: "border-red-border"
125
+ },
126
+ {
127
+ hue: "orange",
128
+ fill: "bg-orange-fill",
129
+ surface: "bg-orange-surface",
130
+ foreground: "text-orange-foreground",
131
+ text: "text-orange-text",
132
+ border: "border-orange-border"
133
+ },
134
+ {
135
+ hue: "amber",
136
+ fill: "bg-amber-fill",
137
+ surface: "bg-amber-surface",
138
+ foreground: "text-amber-foreground",
139
+ text: "text-amber-text",
140
+ border: "border-amber-border"
141
+ },
142
+ {
143
+ hue: "yellow",
144
+ fill: "bg-yellow-fill",
145
+ surface: "bg-yellow-surface",
146
+ foreground: "text-yellow-foreground",
147
+ text: "text-yellow-text",
148
+ border: "border-yellow-border"
149
+ },
150
+ {
151
+ hue: "lime",
152
+ fill: "bg-lime-fill",
153
+ surface: "bg-lime-surface",
154
+ foreground: "text-lime-foreground",
155
+ text: "text-lime-text",
156
+ border: "border-lime-border"
157
+ },
158
+ {
159
+ hue: "green",
160
+ fill: "bg-green-fill",
161
+ surface: "bg-green-surface",
162
+ foreground: "text-green-foreground",
163
+ text: "text-green-text",
164
+ border: "border-green-border"
165
+ },
166
+ {
167
+ hue: "emerald",
168
+ fill: "bg-emerald-fill",
169
+ surface: "bg-emerald-surface",
170
+ foreground: "text-emerald-foreground",
171
+ text: "text-emerald-text",
172
+ border: "border-emerald-border"
173
+ },
174
+ {
175
+ hue: "teal",
176
+ fill: "bg-teal-fill",
177
+ surface: "bg-teal-surface",
178
+ foreground: "text-teal-foreground",
179
+ text: "text-teal-text",
180
+ border: "border-teal-border"
181
+ },
182
+ {
183
+ hue: "cyan",
184
+ fill: "bg-cyan-fill",
185
+ surface: "bg-cyan-surface",
186
+ foreground: "text-cyan-foreground",
187
+ text: "text-cyan-text",
188
+ border: "border-cyan-border"
189
+ },
190
+ {
191
+ hue: "sky",
192
+ fill: "bg-sky-fill",
193
+ surface: "bg-sky-surface",
194
+ foreground: "text-sky-foreground",
195
+ text: "text-sky-text",
196
+ border: "border-sky-border"
197
+ },
198
+ {
199
+ hue: "blue",
200
+ fill: "bg-blue-fill",
201
+ surface: "bg-blue-surface",
202
+ foreground: "text-blue-foreground",
203
+ text: "text-blue-text",
204
+ border: "border-blue-border"
205
+ },
206
+ {
207
+ hue: "indigo",
208
+ fill: "bg-indigo-fill",
209
+ surface: "bg-indigo-surface",
210
+ foreground: "text-indigo-foreground",
211
+ text: "text-indigo-text",
212
+ border: "border-indigo-border"
213
+ },
214
+ {
215
+ hue: "violet",
216
+ fill: "bg-violet-fill",
217
+ surface: "bg-violet-surface",
218
+ foreground: "text-violet-foreground",
219
+ text: "text-violet-text",
220
+ border: "border-violet-border"
221
+ },
222
+ {
223
+ hue: "purple",
224
+ fill: "bg-purple-fill",
225
+ surface: "bg-purple-surface",
226
+ foreground: "text-purple-foreground",
227
+ text: "text-purple-text",
228
+ border: "border-purple-border"
229
+ },
230
+ {
231
+ hue: "fuchsia",
232
+ fill: "bg-fuchsia-fill",
233
+ surface: "bg-fuchsia-surface",
234
+ foreground: "text-fuchsia-foreground",
235
+ text: "text-fuchsia-text",
236
+ border: "border-fuchsia-border"
237
+ },
238
+ {
239
+ hue: "pink",
240
+ fill: "bg-pink-fill",
241
+ surface: "bg-pink-surface",
242
+ foreground: "text-pink-foreground",
243
+ text: "text-pink-text",
244
+ border: "border-pink-border"
245
+ },
246
+ {
247
+ hue: "rose",
248
+ fill: "bg-rose-fill",
249
+ surface: "bg-rose-surface",
250
+ foreground: "text-rose-foreground",
251
+ text: "text-rose-text",
252
+ border: "border-rose-border"
253
+ }
254
+ ];
255
+ var palette = {
256
+ neutral,
257
+ hues: styles
258
+ };
259
+ var getStyles = (hue) => {
260
+ return styles.find((color) => color.hue === hue) || neutral;
261
+ };
262
+ var getHashStyles = (id) => {
263
+ return getStyles(getHashHue(id));
264
+ };
265
+ var getHashHue = (id) => {
266
+ return id ? styles[getHash(id) % styles.length].hue : "neutral";
267
+ };
268
+ var getHash = (id) => id.split("").reduce((acc, char) => acc + char.charCodeAt(0), 0);
269
+
270
+ // src/util/mx.ts
271
+ import { Children, createElement, forwardRef, isValidElement } from "react";
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";
275
+ var mx = extendTailwindMerge({
276
+ extend: {
277
+ classGroups: {
278
+ "font-family": [
279
+ "font-body",
280
+ "font-mono"
281
+ ],
282
+ "font-weight": [
283
+ // App weights
284
+ "font-thin",
285
+ "font-extralight",
286
+ "font-light",
287
+ "font-normal",
288
+ "font-medium",
289
+ "font-semibold",
290
+ "font-bold",
291
+ "font-extrabold",
292
+ "font-black",
293
+ // Arbitrary numbers
294
+ validators.isArbitraryNumber
295
+ ],
296
+ density: [
297
+ "dx-density-fine",
298
+ "dx-density-coarse"
299
+ ],
300
+ "dx-focus-ring": [
301
+ "dx-focus-ring",
302
+ "dx-focus-ring-inset",
303
+ "dx-focus-ring-always",
304
+ "dx-focus-ring-inset-always",
305
+ "dx-focus-ring-group",
306
+ "dx-focus-ring-group-x",
307
+ "dx-focus-ring-group-y",
308
+ "dx-focus-ring-group-always",
309
+ "dx-focus-ring-group-x-always",
310
+ "dx-focus-ring-group-y-always",
311
+ "dx-focus-ring-inset-over-all",
312
+ "dx-focus-ring-inset-over-all-always",
313
+ "dx-focus-ring-main",
314
+ "dx-focus-ring-main-always"
315
+ ]
316
+ }
317
+ }
318
+ });
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)
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
+ }
368
+
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)) {
523
+ return value;
524
+ } else if (value <= 0) {
525
+ return 0;
526
+ } else if (value < 0.5) {
527
+ return "px";
528
+ } else {
529
+ const wholeSeries = Math.floor(value);
530
+ const halfSeries = Math.floor(value * 2) / 2;
531
+ const doubleSeries = Math.floor(value / 2) * 2;
532
+ const quadrupleSeries = Math.floor(value / 4) * 4;
533
+ if (SIZE_VALUES.includes(halfSeries)) {
534
+ return halfSeries;
535
+ } else if (SIZE_VALUES.includes(wholeSeries)) {
536
+ return wholeSeries;
537
+ } else if (SIZE_VALUES.includes(doubleSeries)) {
538
+ return doubleSeries;
539
+ } else if (SIZE_VALUES.includes(quadrupleSeries)) {
540
+ return quadrupleSeries;
541
+ } else {
542
+ return defaultSize;
543
+ }
544
+ }
545
+ };
546
+
547
+ // src/util/valence.ts
548
+ var textValence = (valence) => {
549
+ switch (valence) {
550
+ case "success":
551
+ return "font-medium text-success-text";
552
+ case "info":
553
+ return "font-medium text-info-text";
554
+ case "warning":
555
+ return "font-medium text-warning-text";
556
+ case "error":
557
+ return "font-medium text-error-text";
558
+ }
559
+ };
560
+ var messageValence = (valence) => {
561
+ switch (valence) {
562
+ case "success":
563
+ return "font-medium text-success-text border-success-text bg-success-surface";
564
+ case "info":
565
+ return "font-medium text-info-text border-info-text bg-info-surface";
566
+ case "warning":
567
+ return "font-medium text-warning-text border-warning-text bg-warning-surface";
568
+ case "error":
569
+ return "font-medium text-error-text border-error-text bg-error-surface";
570
+ default:
571
+ return "font-medium text-neutral-text border-neutral-text bg-neutral-surface";
572
+ }
573
+ };
574
+
575
+ // src/theme/components/avatar.ts
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);
577
+ var avatarLabel = ({ srOnly }, ...etc) => mx(srOnly && "sr-only", ...etc);
578
+ var avatarDescription = ({ srOnly }, ...etc) => mx("text-description", srOnly && "sr-only", ...etc);
579
+ var avatarFrame = ({ variant }, ...etc) => mx("h-full w-full bg-(--surface-bg)", variant === "circle" ? "rounded-full" : "rounded-sm", ...etc);
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);
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);
582
+ var avatarFallbackText = (_props, ...etc) => mx("fill-white", ...etc);
583
+ var avatarGroup = (_props, ...etc) => mx("inline-flex items-center", ...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);
585
+ var avatarGroupDescription = ({ srOnly }, ...etc) => mx(srOnly ? "sr-only" : "text-description", ...etc);
586
+ var avatarTheme = {
587
+ root: avatarRoot,
588
+ label: avatarLabel,
589
+ description: avatarDescription,
590
+ statusIcon: avatarStatusIcon,
591
+ frame: avatarFrame,
592
+ ring: avatarRing,
593
+ fallbackText: avatarFallbackText,
594
+ group: avatarGroup,
595
+ groupLabel: avatarGroupLabel,
596
+ groupDescription: avatarGroupDescription
597
+ };
598
+
599
+ // src/theme/components/breadcrumb.ts
600
+ var breadcrumbRoot = (_props, ...etc) => mx("shrink-0 flex items-center", ...etc);
601
+ var breadcrumbList = (_props, ...etc) => mx("contents", ...etc);
602
+ var breadcrumbListItem = (_props, ...etc) => mx("contents", ...etc);
603
+ var breadcrumbCurrent = (_props, ...etc) => mx(...etc);
604
+ var breadcrumbSeparator = (_props, ...etc) => mx("opacity-50", ...etc);
605
+ var breadcrumbTheme = {
606
+ root: breadcrumbRoot,
607
+ list: breadcrumbList,
608
+ listItem: breadcrumbListItem,
609
+ current: breadcrumbCurrent,
610
+ separator: breadcrumbSeparator
611
+ };
612
+
613
+ // src/theme/components/card.ts
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);
616
+ var cardTitle = (_props, ...etc) => mx("dx-card__title grow truncate", ...etc);
617
+ var cardContent = (_props, ...etc) => mx("dx-card__content contents pb-1 last:pb-0", ...etc);
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);
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);
620
+ var cardTextSpan = ({ variant = "default", truncate }, ...etc) => mx(variant === "description" && "text-sm text-description line-clamp-3", truncate && "truncate", ...etc);
621
+ var cardPoster = (_props, ...etc) => mx("dx-card__poster col-span-3 max-h-[200px]", ...etc);
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);
623
+ var cardAction = (_props, ...etc) => mx("dx-card__acztion col-span-3 !grid grid-cols-subgrid p-0! w-full text-start overflow-hidden", ...etc);
624
+ var cardActionLabel = (_props, ...etc) => mx("dx-card__action-label min-w-0 flex-1 truncate", ...etc);
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);
626
+ var cardLinkLabel = (_props, ...etc) => mx("dx-card__link-label min-w-0 flex-1 truncate", ...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);
629
+ var cardTheme = {
630
+ root: cardRoot,
631
+ toolbar: cardToolbar,
632
+ title: cardTitle,
633
+ content: cardContent,
634
+ row: cardRow,
635
+ heading: cardHeading,
636
+ text: cardText,
637
+ "text-span": cardTextSpan,
638
+ poster: cardPoster,
639
+ "poster-icon": cardPosterIcon,
640
+ action: cardAction,
641
+ "action-label": cardActionLabel,
642
+ link: cardLink,
643
+ "link-label": cardLinkLabel,
644
+ "icon-block": cardIconBlock
645
+ };
646
+
647
+ // src/theme/components/button.ts
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";
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");
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");
652
+ var buttonRoot = (_props, ...etc) => {
653
+ return mx("dx-button dx-focus-ring group [&_span]:truncate", ...etc);
654
+ };
655
+ var buttonGroup = (_props, ...etc) => {
656
+ return mx("inline-flex rounded-xs [&>:first-child]:rounded-w-sm [&>:last-child]:rounded-ie-sm [&>button]:relative", ...etc);
657
+ };
658
+ var buttonTheme = {
659
+ root: buttonRoot,
660
+ group: buttonGroup
661
+ };
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
+
692
+ // src/theme/components/dialog.ts
693
+ var sizeMap2 = {
694
+ sm: "md:max-w-[24rem]",
695
+ md: "md:max-w-[32rem]!",
696
+ lg: "md:max-w-[40rem]!",
697
+ xl: "md:max-w-[60rem]!"
698
+ };
699
+ var dialogOverlay = (_props, ...etc) => mx("dx-dialog__overlay", ...etc);
700
+ var dialogContent = ({ inOverlayLayout, size = "md" }, ...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);
702
+ };
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);
706
+ var dialogTitle = ({ srOnly }, ...etc) => mx("dx-dialog__title", srOnly && "sr-only", ...etc);
707
+ var dialogDescription = ({ srOnly }, ...etc) => mx("dx-dialog__description", "text-description", srOnly && "sr-only", ...etc);
708
+ var dialogTheme = {
709
+ overlay: dialogOverlay,
710
+ content: dialogContent,
711
+ header: dialogHeader,
712
+ body: dialogBody,
713
+ actionbar: dialogActionBar,
714
+ title: dialogTitle,
715
+ description: dialogDescription
716
+ };
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
+
725
+ // src/theme/components/icon.ts
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
+ };
729
+ var iconTheme = {
730
+ root: iconRoot
731
+ };
732
+
733
+ // src/theme/components/icon-button.ts
734
+ var iconButtonRoot = ({ iconOnly, square }, ...etc) => {
735
+ return mx("px-1.5", !iconOnly && "gap-1.5", square && "aspect-square", ...etc);
736
+ };
737
+ var iconButtonTheme = {
738
+ root: iconButtonRoot
739
+ };
740
+
741
+ // src/theme/components/input.ts
742
+ var inputTextLabel = "py-1 text-sm text-description";
743
+ var textInputSurfaceFocus = "transition-colors bg-input-surface focus:bg-focus-surface border border-separator focus:border-separator";
744
+ var textInputSurfaceHover = "hover:bg-focus-surface";
745
+ var booleanInputSurface = "shadow-inner transition-colors bg-un-accent aria-checked:bg-accent-surface aria-[checked=mixed]:bg-accent-surface";
746
+ var booleanInputSurfaceHover = "hover:bg-un-accent-hover hover:aria-checked:bg-accent-surface-hover hover:aria-[checked=mixed]:bg-accent-surface-hover";
747
+ var inputValence = (valence) => {
748
+ switch (valence) {
749
+ case "success":
750
+ return "shadow-emerald-500/50 dark:shadow-emerald-600/50";
751
+ case "info":
752
+ return "shadow-cyan-500/50 dark:shadow-cyan-600/50";
753
+ case "warning":
754
+ return "shadow-amber-500/50 dark:shadow-amber-600/50";
755
+ case "error":
756
+ return "shadow-rose-500/50 dark:shadow-rose-600/50";
757
+ }
758
+ };
759
+ var sharedSubduedInputStyles = (props) => [
760
+ '[[data-drag-autoscroll="active"]_&]:pointer-events-none',
761
+ "py-0 w-full bg-transparent text-current placeholder-placeholder",
762
+ "dx-focus-subdued",
763
+ densityDimensions(props.density),
764
+ props.disabled && staticDisabled
765
+ ];
766
+ var sharedDefaultInputStyles = (props) => [
767
+ '[[data-drag-autoscroll="active"]_&]:pointer-events-none',
768
+ "py-0 w-full text-base-foreground rounded-xs placeholder-placeholder",
769
+ textInputSurfaceFocus,
770
+ densityDimensions(props.density),
771
+ props.disabled ? staticDisabled : textInputSurfaceHover
772
+ ];
773
+ var sharedStaticInputStyles = (props) => [
774
+ '[[data-drag-autoscroll="active"]_&]:pointer-events-none',
775
+ "py-0 w-full text-base-foreground rounded-xs placeholder-placeholder",
776
+ textInputSurfaceFocus,
777
+ textInputSurfaceHover,
778
+ props.focused && "bg-attention-surface",
779
+ inputValence(props.validationValence),
780
+ props.disabled && staticDisabled,
781
+ props.focused && "dx-focus-static"
782
+ ];
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);
785
+ var inputCheckbox = ({ size = 5 }, ...etc) => mx("dx-checkbox dx-focus-ring", getSize(size), ...etc);
786
+ var inputCheckboxIndicator = ({ size = 5, checked }, ...etc) => mx(getSize(snapSize(sizeValue(size) * 0.65, 4)), !checked && "invisible", ...etc);
787
+ var inputSwitch = ({ size = 5, disabled }, ...etc) => mx(
788
+ getHeight(size),
789
+ getWidth(snapSize(sizeValue(size) * 1.75, 9)),
790
+ booleanInputSurface,
791
+ !disabled && booleanInputSurfaceHover,
792
+ // TODO(burdon): Added m-1 margin to make 40px width to align with 40px icon button.
793
+ "cursor-pointer shrink-0 rounded-full px-1 mx-1 relative",
794
+ "dx-focus-ring",
795
+ ...etc
796
+ );
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);
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);
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);
800
+ var inputLabel = (props, ...etc) => mx("block", inputTextLabel, props.srOnly && "sr-only", ...etc);
801
+ var inputDescription = (props, ...etc) => mx("text-description", props.srOnly && "sr-only", ...etc);
802
+ var inputDescriptionAndValidation = (props, ...etc) => mx("leading-none my-1.5", props.srOnly && "sr-only", ...etc);
803
+ var inputValidation = (props, ...etc) => mx(inputTextLabel, props.srOnly ? "sr-only" : textValence(props.validationValence), ...etc);
804
+ var inputTheme = {
805
+ input: inputInput,
806
+ textArea: inputTextArea,
807
+ inputWithSegments: inputWithSegmentsInput,
808
+ segment: inputSegment,
809
+ checkbox: inputCheckbox,
810
+ checkboxIndicator: inputCheckboxIndicator,
811
+ label: inputLabel,
812
+ description: inputDescription,
813
+ switch: inputSwitch,
814
+ switchThumb: inputSwitchThumb,
815
+ validation: inputValidation,
816
+ descriptionAndValidation: inputDescriptionAndValidation
817
+ };
818
+
819
+ // src/theme/components/link.ts
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);
821
+ var linkTheme = {
822
+ root: linkRoot
823
+ };
824
+
825
+ // src/theme/components/list.ts
826
+ var listRoot = (_, ...etc) => mx(...etc);
827
+ var listItem = ({ collapsible }, ...etc) => mx(!collapsible && "flex", ...etc);
828
+ var listItemEndcap = ({ density }, ...etc) => mx(density === "fine" ? getSize(8) : getSize(10), "shrink-0 flex items-center justify-center", ...etc);
829
+ var listItemHeading = ({ density }, ...etc) => mx(densityBlockSize(density), "flex items-center overflow-hidden [&>span]:truncate", ...etc);
830
+ var listItemDragHandleIcon = (_props, ...etc) => mx(getSize(5), "mt-2.5", ...etc);
831
+ var listItemOpenTrigger = ({ density }, ...etc) => mx("w-5 rounded-sm flex justify-center items-center", densityBlockSize(density), ghostHover, "dx-focus-ring", ...etc);
832
+ var listItemOpenTriggerIcon = (_props, ...etc) => {
833
+ return mx(getSize(5), ...etc);
834
+ };
835
+ var listTheme = {
836
+ root: listRoot,
837
+ item: {
838
+ root: listItem,
839
+ endcap: listItemEndcap,
840
+ heading: listItemHeading,
841
+ dragHandleIcon: listItemDragHandleIcon,
842
+ openTrigger: listItemOpenTrigger,
843
+ openTriggerIcon: listItemOpenTriggerIcon
844
+ }
845
+ };
846
+
847
+ // src/theme/components/main.ts
848
+ var topbarBlockPaddingStart = "py-(--dx-topbar-size) dx-sticky-top-from-topbar-bottom";
849
+ var bottombarBlockPaddingEnd = "pb-(--dx-statusbar-size) dx-sticky-bottom-from-statusbar-bottom";
850
+ var mainPadding = "dx-main-content-padding";
851
+ var mainPaddingTransitions = "dx-main-content-padding-transitions";
852
+ var mainIntrinsicSize = "dx-main-intrinsic-size";
853
+ var mainContent = ({ bounce }, ...etc) => mx(mainPadding, mainPaddingTransitions, bounce && "dx-main-bounce-layout", "dx-focus-ring-main", ...etc);
854
+ var mainSidebar = (_, ...etc) => mx("dx-main-sidebar", "dx-focus-ring-inset-over-all", ...etc);
855
+ var mainOverlay = (_, ...etc) => mx("dx-main-overlay", ...etc);
856
+ var mainTheme = {
857
+ content: mainContent,
858
+ sidebar: mainSidebar,
859
+ overlay: mainOverlay
860
+ };
861
+
862
+ // src/theme/components/menu.ts
863
+ var menuContent = ({ elevation }, ...etc) => mx("dx-modal-surface w-48 rounded-sm md:w-56 border border-separator", surfaceZIndex({
864
+ elevation,
865
+ level: "menu"
866
+ }), surfaceShadow({
867
+ elevation: "positioned"
868
+ }), ...etc);
869
+ var menuViewport = (_props, ...etc) => mx("rounded-sm p-1 max-h-[var(--radix-dropdown-menu-content-available-height)] overflow-y-auto", ...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);
871
+ var menuSeparator = (_props, ...etc) => mx("my-1 mx-2 h-px bg-separator", ...etc);
872
+ var menuGroupLabel = (_props, ...etc) => mx("text-description", "select-none px-2 py-2", ...etc);
873
+ var menuArrow = (_props, ...etc) => mx("fill-separator", ...etc);
874
+ var menuTheme = {
875
+ content: menuContent,
876
+ viewport: menuViewport,
877
+ item: menuItem,
878
+ separator: menuSeparator,
879
+ groupLabel: menuGroupLabel,
880
+ arrow: menuArrow
881
+ };
882
+
883
+ // src/theme/components/message.ts
884
+ var messageRoot = ({ valence }, etc) => {
885
+ return mx("grid grid-cols-[2rem_1fr_2rem] p-1 rounded-sm", messageValence(valence), etc);
886
+ };
887
+ var messageHeader = (_, etc) => {
888
+ return mx("col-span-full grid grid-cols-subgrid items-center", etc);
889
+ };
890
+ var messageTitle = (_, etc) => {
891
+ return mx("col-start-2 truncate", etc);
892
+ };
893
+ var messageIcon = (_, etc) => {
894
+ return mx("col-start-1 grid place-items-center", etc);
895
+ };
896
+ var messageContent = (_, etc) => {
897
+ return mx("col-start-2 grid grid-cols-subgrid inline first:font-medium", etc);
898
+ };
899
+ var messageTheme = {
900
+ root: messageRoot,
901
+ header: messageHeader,
902
+ icon: messageIcon,
903
+ title: messageTitle,
904
+ content: messageContent
905
+ };
906
+
907
+ // src/theme/components/popover.ts
908
+ var popoverContent = ({ elevation }, ...etc) => mx("dx-modal-surface border border-separator rounded-sm", surfaceShadow({
909
+ elevation: "positioned"
910
+ }), surfaceZIndex({
911
+ elevation,
912
+ level: "menu"
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);
915
+ var popoverArrow = (_props, ...etc) => mx("fill-separator", ...etc);
916
+ var popoverTheme = {
917
+ content: popoverContent,
918
+ viewport: popoverViewport,
919
+ arrow: popoverArrow
920
+ };
921
+
922
+ // src/theme/components/scroll-area.ts
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",
941
+ ...etc
942
+ );
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
+ };
983
+ var scrollAreaTheme = {
984
+ root: scrollAreaRoot,
985
+ viewport: scrollAreaViewport
986
+ };
987
+
988
+ // src/theme/components/select.ts
989
+ var selectContent = ({ elevation }, ...etc) => {
990
+ return mx("dx-modal-surface rounded-sm border border-separator", "min-w-(--radix-select-trigger-width) max-h-(--radix-select-content-available-height)", surfaceShadow({
991
+ elevation: "positioned"
992
+ }), surfaceZIndex({
993
+ elevation,
994
+ level: "menu"
995
+ }), ...etc);
996
+ };
997
+ var selectViewport = (_props, ...etc) => mx(...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);
999
+ var selectItemIndicator = (_props, ...etc) => mx("items-center", ...etc);
1000
+ var selectArrow = (_props, ...etc) => mx("fill-separator", ...etc);
1001
+ var selectSeparator = (_props, ...etc) => mx("self-stretch border-b my-1 border-separator", ...etc);
1002
+ var selectScrollButton = (_props, ...etc) => mx("dx-modal-surface flex items-center justify-center cursor-default h-6 w-full", ...etc);
1003
+ var selectTheme = {
1004
+ content: selectContent,
1005
+ viewport: selectViewport,
1006
+ item: selectItem,
1007
+ itemIndicator: selectItemIndicator,
1008
+ arrow: selectArrow,
1009
+ separator: selectSeparator,
1010
+ scrollButton: selectScrollButton
1011
+ };
1012
+
1013
+ // src/theme/components/splitter.ts
1014
+ var splitterRoot = (_props, ...etc) => mx("relative h-full overflow-hidden", ...etc);
1015
+ var splitterPanel = (_props, ...etc) => mx("absolute inset-x-0 flex flex-col overflow-hidden", ...etc);
1016
+ var splitterTheme = {
1017
+ root: splitterRoot,
1018
+ panel: splitterPanel
1019
+ };
1020
+
1021
+ // src/theme/components/separator.ts
1022
+ var separatorRoot = ({ orientation, subdued }, ...etc) => mx("self-stretch", orientation === "vertical" ? "border-e mx-1" : "border-b my-1", subdued ? "border-subdued-separator" : "border-separator", ...etc);
1023
+ var separatorTheme = {
1024
+ root: separatorRoot
1025
+ };
1026
+
1027
+ // src/theme/components/skeleton.ts
1028
+ var skeletonRoot = ({ variant = "default" }, ...etc) => mx("animate-pulse bg-neutral-300 dark:bg-neutral-700 rounded-md", variant === "circle" && "rounded-full", variant === "text" && "rounded-sm", ...etc);
1029
+ var skeletonTheme = {
1030
+ root: skeletonRoot
1031
+ };
1032
+
1033
+ // src/theme/components/status.ts
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);
1036
+ var statusTheme = {
1037
+ root: statusRoot,
1038
+ bar: statusBar
1039
+ };
1040
+
1041
+ // src/theme/components/tag.ts
1042
+ var tagRoot = (_, ...etc) => mx("dx-tag", ...etc);
1043
+ var tagTheme = {
1044
+ root: tagRoot
1045
+ };
1046
+
1047
+ // src/theme/components/toast.ts
1048
+ var toastViewport = (_props, ...etc) => mx(
1049
+ // TODO(burdon): block-end should take into account status bar.
1050
+ "z-40 fixed bottom-[calc(env(safe-area-inset-bottom)+1rem)] inset-start-[calc(env(safe-area-inset-left)+1rem)] inset-end-[calc(env(safe-area-inset-right)+1rem)] w-auto md:end-[calc(env(safe-area-inset-right)+1rem)] md:left-auto md:w-full md:max-w-sm",
1051
+ "rounded-md flex flex-col gap-2",
1052
+ ...etc
1053
+ );
1054
+ var toastRoot = (_props, ...etc) => mx("dx-modal-surface rounded-md flex p-2 gap-2", surfaceShadow({
1055
+ elevation: "toast"
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);
1057
+ var toastBody = (_props, ...etc) => mx("grow flex flex-col gap-1 justify-center pl-2", ...etc);
1058
+ var toastActions = (_props, ...etc) => mx("shrink-0 flex flex-col gap-1 justify-center", ...etc);
1059
+ var toastTitle = ({ srOnly }, ...etc) => mx("shrink-0 font-medium", srOnly && "sr-only", ...etc);
1060
+ var toastDescription = ({ srOnly }, ...etc) => mx("text-description", "shrink-0", srOnly && "sr-only", ...etc);
1061
+ var toastTheme = {
1062
+ viewport: toastViewport,
1063
+ root: toastRoot,
1064
+ body: toastBody,
1065
+ title: toastTitle,
1066
+ description: toastDescription,
1067
+ actions: toastActions
1068
+ };
1069
+
1070
+ // src/theme/components/toolbar.ts
1071
+ var toolbarLayout = "w-full shrink-0 flex flex-nowrap p-1 gap-1 items-center overflow-x-auto scrollbar-none dx-contain-layout";
1072
+ var toolbarRoot = ({ density, disabled, layoutManaged }, ...etc) => {
1073
+ return mx("bg-toolbar-surface dx-toolbar", density === "coarse" && "h-(--dx-rail-size) px-3!", disabled && "*:opacity-20", !layoutManaged && toolbarLayout, ...etc);
1074
+ };
1075
+ var toolbarText = (_, ...etc) => {
1076
+ return mx("px-2 grow truncate items-center", ...etc);
1077
+ };
1078
+ var toolbarTheme = {
1079
+ root: toolbarRoot,
1080
+ text: toolbarText
1081
+ };
1082
+
1083
+ // src/theme/components/tooltip.ts
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({
1085
+ elevation: "positioned"
1086
+ }), surfaceZIndex({
1087
+ elevation,
1088
+ level: "tooltip"
1089
+ }), ...etc);
1090
+ var tooltipArrow = (_props, ...etc) => mx("fill-inverse-surface", ...etc);
1091
+ var tooltipTheme = {
1092
+ content: tooltipContent,
1093
+ arrow: tooltipArrow
1094
+ };
1095
+
1096
+ // src/theme/components/treegrid.ts
1097
+ var levelStyles = /* @__PURE__ */ new Map([
1098
+ [
1099
+ 1,
1100
+ "[&>.indent:first-of-type]:pl-0 font-medium"
1101
+ ],
1102
+ [
1103
+ 2,
1104
+ "[&>.indent:first-of-type]:pl-0"
1105
+ ],
1106
+ [
1107
+ 3,
1108
+ "[&>.indent:first-of-type]:pl-1"
1109
+ ],
1110
+ [
1111
+ 4,
1112
+ "[&>.indent:first-of-type]:pl-2"
1113
+ ],
1114
+ [
1115
+ 5,
1116
+ "[&>.indent:first-of-type]:pl-3"
1117
+ ],
1118
+ [
1119
+ 6,
1120
+ "[&>.indent:first-of-type]:pl-4"
1121
+ ],
1122
+ [
1123
+ 7,
1124
+ "[&>.indent:first-of-type]:pl-5"
1125
+ ],
1126
+ [
1127
+ 8,
1128
+ "[&>.indent:first-of-type]:pl-6"
1129
+ ]
1130
+ ]);
1131
+ var treegridRoot = (_, ...etc) => mx("grid", ...etc);
1132
+ var treegridRow = ({ level = 1 }, ...etc) => mx(levelStyles.get(Math.min(Math.max(Math.round(level), 1), 8)), ...etc);
1133
+ var treegridCell = ({ indent }, ...etc) => mx(indent && "indent", ...etc);
1134
+ var treegridTheme = {
1135
+ root: treegridRoot,
1136
+ row: treegridRow,
1137
+ cell: treegridCell
1138
+ };
1139
+
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
+ };
1146
+ var panelRoot = (_, ...etc) => mx(
1147
+ // prettier-ignore
1148
+ "dx-container grid grid-cols-[100%] overflow-hidden",
1149
+ // Add uncategorized children to content slot.
1150
+ "[&>*:not([data-slot])]:[grid-area:content]",
1151
+ ...etc
1152
+ );
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);
1156
+ var panelTheme = {
1157
+ root: panelRoot,
1158
+ toolbar: panelToolbar,
1159
+ content: panelContent,
1160
+ statusbar: panelStatusbar
1161
+ };
1162
+
1163
+ // src/theme/theme.ts
1164
+ import { getDeep } from "@dxos/util";
1165
+ var defaultTheme = {
1166
+ themeName: () => "default",
1167
+ //
1168
+ // Primitives
1169
+ //
1170
+ column: columnTheme,
1171
+ panel: panelTheme,
1172
+ //
1173
+ // Components
1174
+ //
1175
+ avatar: avatarTheme,
1176
+ breadcrumb: breadcrumbTheme,
1177
+ button: buttonTheme,
1178
+ card: cardTheme,
1179
+ dialog: dialogTheme,
1180
+ focus: focusTheme,
1181
+ icon: iconTheme,
1182
+ iconButton: iconButtonTheme,
1183
+ input: inputTheme,
1184
+ link: linkTheme,
1185
+ list: listTheme,
1186
+ main: mainTheme,
1187
+ message: messageTheme,
1188
+ menu: menuTheme,
1189
+ popover: popoverTheme,
1190
+ scrollArea: scrollAreaTheme,
1191
+ select: selectTheme,
1192
+ separator: separatorTheme,
1193
+ skeleton: skeletonTheme,
1194
+ splitter: splitterTheme,
1195
+ status: statusTheme,
1196
+ tag: tagTheme,
1197
+ toast: toastTheme,
1198
+ toolbar: toolbarTheme,
1199
+ tooltip: tooltipTheme,
1200
+ treegrid: treegridTheme
1201
+ };
1202
+ var bindTheme = (theme) => {
1203
+ return (path, styleProps, ...etc) => {
1204
+ const result = getDeep(theme, path.split("."));
1205
+ return typeof result === "function" ? result(styleProps ?? {}, ...etc) : void 0;
1206
+ };
1207
+ };
1208
+ var defaultTx = bindTheme(defaultTheme);
1209
+ export {
1210
+ avatarDescription,
1211
+ avatarFallbackText,
1212
+ avatarFrame,
1213
+ avatarGroup,
1214
+ avatarGroupDescription,
1215
+ avatarGroupLabel,
1216
+ avatarLabel,
1217
+ avatarRing,
1218
+ avatarRoot,
1219
+ avatarStatusIcon,
1220
+ avatarTheme,
1221
+ bindTheme,
1222
+ bottombarBlockPaddingEnd,
1223
+ breadcrumbCurrent,
1224
+ breadcrumbList,
1225
+ breadcrumbListItem,
1226
+ breadcrumbRoot,
1227
+ breadcrumbSeparator,
1228
+ breadcrumbTheme,
1229
+ buttonTheme,
1230
+ cardDefaultInlineSize,
1231
+ cardMaxBlockSize,
1232
+ cardMaxInlineSize,
1233
+ cardMinBlockSize,
1234
+ cardMinInlineSize,
1235
+ cardTheme,
1236
+ columnTheme,
1237
+ composable,
1238
+ composableProps,
1239
+ dataDisabled,
1240
+ defaultButtonColors,
1241
+ defaultTheme,
1242
+ defaultTx,
1243
+ densityBlockSize,
1244
+ densityDimensions,
1245
+ descriptionMessage,
1246
+ dialogActionBar,
1247
+ dialogBody,
1248
+ dialogContent,
1249
+ dialogDescription,
1250
+ dialogHeader,
1251
+ dialogOverlay,
1252
+ dialogTheme,
1253
+ dialogTitle,
1254
+ focusTheme,
1255
+ getHashHue,
1256
+ getHashStyles,
1257
+ getHeight,
1258
+ getSize,
1259
+ getStyles,
1260
+ getWidth,
1261
+ ghostButtonColors,
1262
+ ghostFocusWithin,
1263
+ ghostHover,
1264
+ groupHoverControlItemWithTransition,
1265
+ hoverableControlItem,
1266
+ hoverableControls,
1267
+ hoverableFocusedKeyboardControls,
1268
+ hoverableFocusedWithinControls,
1269
+ hoverableOpenControlItem,
1270
+ hueShades,
1271
+ hues,
1272
+ iconButtonRoot,
1273
+ iconButtonTheme,
1274
+ iconRoot,
1275
+ iconSize,
1276
+ iconTheme,
1277
+ inputTextLabel,
1278
+ inputTheme,
1279
+ linkRoot,
1280
+ linkTheme,
1281
+ listItem,
1282
+ listItemDragHandleIcon,
1283
+ listItemEndcap,
1284
+ listItemHeading,
1285
+ listItemOpenTrigger,
1286
+ listItemOpenTriggerIcon,
1287
+ listRoot,
1288
+ listTheme,
1289
+ mainContent,
1290
+ mainIntrinsicSize,
1291
+ mainOverlay,
1292
+ mainPadding,
1293
+ mainPaddingTransitions,
1294
+ mainSidebar,
1295
+ mainTheme,
1296
+ menuArrow,
1297
+ menuContent,
1298
+ menuGroupLabel,
1299
+ menuItem,
1300
+ menuSeparator,
1301
+ menuTheme,
1302
+ menuViewport,
1303
+ messageContent,
1304
+ messageHeader,
1305
+ messageIcon,
1306
+ messageRoot,
1307
+ messageTheme,
1308
+ messageTitle,
1309
+ messageValence,
1310
+ mx,
1311
+ osTranslations,
1312
+ palette,
1313
+ panelTheme,
1314
+ popoverArrow,
1315
+ popoverContent,
1316
+ popoverTheme,
1317
+ popoverViewport,
1318
+ primaryButtonColors,
1319
+ roles,
1320
+ scrollAreaRoot,
1321
+ scrollAreaTheme,
1322
+ scrollAreaViewport,
1323
+ scrollbar,
1324
+ selectArrow,
1325
+ selectContent,
1326
+ selectItem,
1327
+ selectItemIndicator,
1328
+ selectScrollButton,
1329
+ selectSeparator,
1330
+ selectTheme,
1331
+ selectViewport,
1332
+ separatorRoot,
1333
+ separatorTheme,
1334
+ sizeToRem,
1335
+ sizeValue,
1336
+ skeletonRoot,
1337
+ skeletonTheme,
1338
+ slottable,
1339
+ snapSize,
1340
+ splitterTheme,
1341
+ staticDefaultButtonColors,
1342
+ staticDisabled,
1343
+ statusBar,
1344
+ statusRoot,
1345
+ statusTheme,
1346
+ surfaceShadow,
1347
+ surfaceZIndex,
1348
+ tagRoot,
1349
+ tagTheme,
1350
+ textValence,
1351
+ toastActions,
1352
+ toastBody,
1353
+ toastDescription,
1354
+ toastRoot,
1355
+ toastTheme,
1356
+ toastTitle,
1357
+ toastViewport,
1358
+ toolbarLayout,
1359
+ toolbarRoot,
1360
+ toolbarText,
1361
+ toolbarTheme,
1362
+ tooltipArrow,
1363
+ tooltipContent,
1364
+ tooltipTheme,
1365
+ topbarBlockPaddingStart,
1366
+ treegridCell,
1367
+ treegridRoot,
1368
+ treegridRow,
1369
+ treegridTheme,
1370
+ withColumn
1371
+ };
1372
+ //# sourceMappingURL=index.mjs.map