raft-ui 0.0.5 → 0.0.7

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 (133) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/dist/button-CJqMhTPQ.mjs +621 -0
  3. package/dist/index-CpGciYPW.d.mts +267 -0
  4. package/dist/index.d.mts +11 -253
  5. package/dist/index.mjs +32 -587
  6. package/{src → dist}/styles.css +0 -2
  7. package/dist/wip.d.mts +133 -15
  8. package/dist/wip.mjs +289 -16
  9. package/package.json +7 -10
  10. package/dist/styled-props-B3SNekJg.d.mts +0 -16
  11. package/dist/use-theme-Y_h1DKll.mjs +0 -34
  12. package/src/components/avatar/avatar.tsx +0 -375
  13. package/src/components/avatar/index.ts +0 -17
  14. package/src/components/badge/badge.tsx +0 -393
  15. package/src/components/badge/index.ts +0 -2
  16. package/src/components/banner/banner.tsx +0 -269
  17. package/src/components/banner/index.ts +0 -8
  18. package/src/components/bottom-sheet/bottom-sheet.tsx +0 -152
  19. package/src/components/bottom-sheet/index.ts +0 -22
  20. package/src/components/button/button.tsx +0 -497
  21. package/src/components/button/index.ts +0 -2
  22. package/src/components/checkbox/checkbox-indicator.tsx +0 -128
  23. package/src/components/checkbox/checkbox.tsx +0 -350
  24. package/src/components/checkbox/index.ts +0 -2
  25. package/src/components/combobox/combobox.tsx +0 -603
  26. package/src/components/combobox/index.ts +0 -52
  27. package/src/components/context-menu/context-menu.tsx +0 -380
  28. package/src/components/context-menu/index.ts +0 -34
  29. package/src/components/conversation-preview-card/conversation-preview-card.tsx +0 -336
  30. package/src/components/conversation-preview-card/index.ts +0 -32
  31. package/src/components/description-list/description-list.tsx +0 -116
  32. package/src/components/description-list/index.ts +0 -14
  33. package/src/components/dropdown-menu/dropdown-menu.tsx +0 -405
  34. package/src/components/dropdown-menu/index.ts +0 -38
  35. package/src/components/empty-state/empty-state.tsx +0 -177
  36. package/src/components/empty-state/index.ts +0 -16
  37. package/src/components/field/field.tsx +0 -125
  38. package/src/components/field/index.ts +0 -18
  39. package/src/components/inline-code/index.ts +0 -2
  40. package/src/components/inline-code/inline-code.tsx +0 -35
  41. package/src/components/input/index.ts +0 -2
  42. package/src/components/input/input.tsx +0 -76
  43. package/src/components/input-group/index.ts +0 -7
  44. package/src/components/input-group/input-group.tsx +0 -215
  45. package/src/components/kbd/index.ts +0 -2
  46. package/src/components/kbd/kbd.tsx +0 -43
  47. package/src/components/label/index.ts +0 -7
  48. package/src/components/label/label.tsx +0 -99
  49. package/src/components/lightbox/index.ts +0 -24
  50. package/src/components/lightbox/lightbox.tsx +0 -245
  51. package/src/components/list-item/index.ts +0 -20
  52. package/src/components/list-item/list-item.tsx +0 -263
  53. package/src/components/media-list-item/index.ts +0 -20
  54. package/src/components/media-list-item/media-list-item.tsx +0 -169
  55. package/src/components/notification-center/index.ts +0 -39
  56. package/src/components/notification-center/notification-center.tsx +0 -558
  57. package/src/components/panel-header/index.ts +0 -22
  58. package/src/components/panel-header/panel-header.tsx +0 -199
  59. package/src/components/popover/index.ts +0 -30
  60. package/src/components/popover/popover.tsx +0 -248
  61. package/src/components/preview-shell/index.ts +0 -2
  62. package/src/components/preview-shell/preview-shell.tsx +0 -51
  63. package/src/components/quoted-message-card/index.ts +0 -36
  64. package/src/components/quoted-message-card/quoted-message-card.tsx +0 -391
  65. package/src/components/radio-group/index.ts +0 -6
  66. package/src/components/radio-group/radio-group.tsx +0 -119
  67. package/src/components/section-header/index.ts +0 -16
  68. package/src/components/section-header/section-header.tsx +0 -117
  69. package/src/components/section-label/index.ts +0 -2
  70. package/src/components/section-label/section-label.tsx +0 -38
  71. package/src/components/segmented-control/index.ts +0 -12
  72. package/src/components/segmented-control/segmented-control.tsx +0 -129
  73. package/src/components/select/index.ts +0 -40
  74. package/src/components/select/select.tsx +0 -382
  75. package/src/components/spinner/index.ts +0 -2
  76. package/src/components/spinner/spinner.tsx +0 -228
  77. package/src/components/status/index.ts +0 -2
  78. package/src/components/status/status.tsx +0 -152
  79. package/src/components/tabs/index.ts +0 -24
  80. package/src/components/tabs/tabs.tsx +0 -451
  81. package/src/components/text/index.ts +0 -2
  82. package/src/components/text/text.tsx +0 -131
  83. package/src/components/textarea/index.ts +0 -2
  84. package/src/components/textarea/textarea.tsx +0 -136
  85. package/src/components/toggle-group/index.ts +0 -12
  86. package/src/components/toggle-group/toggle-group.tsx +0 -111
  87. package/src/components/tooltip/index.ts +0 -14
  88. package/src/components/tooltip/tooltip.tsx +0 -212
  89. package/src/index.ts +0 -426
  90. package/src/legacy/AttentionDot.tsx +0 -28
  91. package/src/legacy/AvatarListRow.tsx +0 -87
  92. package/src/legacy/AvatarSlot.tsx +0 -157
  93. package/src/legacy/Badge.tsx +0 -95
  94. package/src/legacy/Banner.tsx +0 -74
  95. package/src/legacy/BottomSheet.tsx +0 -76
  96. package/src/legacy/CheckMarker.tsx +0 -72
  97. package/src/legacy/Checkbox.tsx +0 -81
  98. package/src/legacy/ConversationPreviewCard.tsx +0 -169
  99. package/src/legacy/DismissBackdrop.tsx +0 -68
  100. package/src/legacy/EmptyState.tsx +0 -63
  101. package/src/legacy/ExperimentalBadge.tsx +0 -19
  102. package/src/legacy/FormField.tsx +0 -106
  103. package/src/legacy/KeyValueRow.tsx +0 -67
  104. package/src/legacy/Lightbox.tsx +0 -119
  105. package/src/legacy/NotificationCenter.tsx +0 -217
  106. package/src/legacy/PanelHeader.tsx +0 -94
  107. package/src/legacy/PreviewShell.tsx +0 -40
  108. package/src/legacy/QuotedMessageCard.tsx +0 -181
  109. package/src/legacy/ReorderablePanelTabs.tsx +0 -156
  110. package/src/legacy/SandboxedPreviewFrame.tsx +0 -59
  111. package/src/legacy/SearchInput.tsx +0 -23
  112. package/src/legacy/SectionEyebrow.tsx +0 -60
  113. package/src/legacy/SectionHeader.tsx +0 -68
  114. package/src/legacy/SegmentedControl.tsx +0 -74
  115. package/src/legacy/SlugInput.tsx +0 -29
  116. package/src/legacy/Spinner.tsx +0 -89
  117. package/src/legacy/StatusDot.tsx +0 -51
  118. package/src/legacy/SurfaceListItem.tsx +0 -32
  119. package/src/legacy/Textarea.tsx +0 -137
  120. package/src/legacy/button.tsx +0 -100
  121. package/src/legacy/context-menu-divider.tsx +0 -12
  122. package/src/legacy/menu-item.tsx +0 -66
  123. package/src/legacy/selection-popover.tsx +0 -212
  124. package/src/legacy/server-switcher-menu.tsx +0 -203
  125. package/src/legacy/source.css +0 -240
  126. package/src/lib/cn.ts +0 -1
  127. package/src/lib/styled-props.ts +0 -11
  128. package/src/lib/theme/theme-context.ts +0 -28
  129. package/src/lib/theme/theme-provider.tsx +0 -181
  130. package/src/lib/theme/use-theme.ts +0 -12
  131. package/src/lib/tv.ts +0 -29
  132. package/src/lib/without-children.ts +0 -6
  133. package/src/wip.ts +0 -233
package/CHANGELOG.md ADDED
@@ -0,0 +1,5 @@
1
+ ## [0.0.7](https://github.com/botiverse/rui/compare/v0.0.6...v0.0.7) (2026-06-25)
2
+
3
+ ### Bug Fixes
4
+
5
+ - **ui:** publish styles from dist ([1fed16f](https://github.com/botiverse/rui/commit/1fed16f7bc0f0982523fbe3de337d1ece926737c))
@@ -0,0 +1,621 @@
1
+ import { Button } from "@base-ui/react/button";
2
+ import { cn } from "cnfast";
3
+ import { tv } from "tailwind-variants/lite";
4
+ import { createContext, use } from "react";
5
+ import { mergeProps } from "@base-ui/react/merge-props";
6
+ import { useRender } from "@base-ui/react/use-render";
7
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
8
+ //#region src/lib/tv.ts
9
+ const tv$1 = ((options) => {
10
+ const recipe = tv(options);
11
+ const wrappedRecipe = ((props) => {
12
+ const result = recipe(props);
13
+ if (typeof result === "string") return cn(result);
14
+ return Object.fromEntries(Object.entries(result).map(([slotName, slot]) => [slotName, (slotProps) => cn(slot(slotProps))]));
15
+ });
16
+ return Object.assign(wrappedRecipe, recipe);
17
+ });
18
+ //#endregion
19
+ //#region src/lib/theme/theme-context.ts
20
+ const ThemeContext = createContext("brutal");
21
+ const ThemeStateContext = createContext({
22
+ theme: "brutal",
23
+ setTheme: () => void 0,
24
+ mode: "light",
25
+ resolvedMode: "light"
26
+ });
27
+ //#endregion
28
+ //#region src/lib/theme/use-theme.ts
29
+ /** Read the active style family for theme-aware component recipes. */
30
+ function useThemeFamily() {
31
+ return use(ThemeContext);
32
+ }
33
+ /** Read and update the application-level RUI theme selection. */
34
+ function useTheme() {
35
+ return use(ThemeStateContext);
36
+ }
37
+ //#endregion
38
+ //#region src/components/spinner/spinner.tsx
39
+ const SPINNER_STYLE = `
40
+ @keyframes raft-braille-spinner {
41
+ 0%,
42
+ 9.99% {
43
+ content: "⠋";
44
+ }
45
+ 10%,
46
+ 19.99% {
47
+ content: "⠙";
48
+ }
49
+ 20%,
50
+ 29.99% {
51
+ content: "⠹";
52
+ }
53
+ 30%,
54
+ 39.99% {
55
+ content: "⠸";
56
+ }
57
+ 40%,
58
+ 49.99% {
59
+ content: "⠼";
60
+ }
61
+ 50%,
62
+ 59.99% {
63
+ content: "⠴";
64
+ }
65
+ 60%,
66
+ 69.99% {
67
+ content: "⠦";
68
+ }
69
+ 70%,
70
+ 79.99% {
71
+ content: "⠧";
72
+ }
73
+ 80%,
74
+ 89.99% {
75
+ content: "⠇";
76
+ }
77
+ 90%,
78
+ 100% {
79
+ content: "⠏";
80
+ }
81
+ }
82
+
83
+ [data-slot="spinner"] [data-spinner-glyph]::before {
84
+ content: "⠋";
85
+ animation: raft-braille-spinner 800ms steps(1, end) infinite;
86
+ }
87
+
88
+ @media (prefers-reduced-motion: reduce) {
89
+ [data-slot="spinner"] [data-spinner-glyph]::before {
90
+ animation-duration: 1600ms;
91
+ }
92
+ }
93
+
94
+ @keyframes raft-elegant-spinner-spin {
95
+ to {
96
+ transform: rotate(360deg);
97
+ }
98
+ }
99
+
100
+ @keyframes raft-elegant-spinner-dash {
101
+ 0% {
102
+ stroke-dasharray: 1 150;
103
+ stroke-dashoffset: 0;
104
+ }
105
+ 50% {
106
+ stroke-dasharray: 90 150;
107
+ stroke-dashoffset: -35;
108
+ }
109
+ 100% {
110
+ stroke-dasharray: 90 150;
111
+ stroke-dashoffset: -124;
112
+ }
113
+ }
114
+
115
+ [data-slot="spinner"] [data-spinner-ring] {
116
+ animation: raft-elegant-spinner-spin 1600ms linear infinite;
117
+ transform-box: fill-box;
118
+ transform-origin: center;
119
+ will-change: transform;
120
+ }
121
+
122
+ [data-slot="spinner"] [data-spinner-arc] {
123
+ animation: raft-elegant-spinner-dash 1400ms cubic-bezier(0.42, 0, 0.58, 1) infinite;
124
+ stroke-dasharray: 1 150;
125
+ stroke-dashoffset: 0;
126
+ }
127
+
128
+ @media (prefers-reduced-motion: reduce) {
129
+ [data-slot="spinner"] [data-spinner-ring] {
130
+ animation-duration: 2400ms;
131
+ will-change: auto;
132
+ }
133
+
134
+ [data-slot="spinner"] [data-spinner-arc] {
135
+ animation: none;
136
+ stroke-dasharray: 72 150;
137
+ stroke-dashoffset: -30;
138
+ }
139
+ }
140
+ `;
141
+ const spinner = tv$1({
142
+ slots: {
143
+ root: ["relative inline-flex shrink-0 items-center justify-center", "leading-none text-current"],
144
+ glyph: "inline-block min-w-[1ch] font-mono tabular-nums",
145
+ ring: "block size-full shrink-0"
146
+ },
147
+ variants: {
148
+ theme: {
149
+ brutal: {},
150
+ elegant: {}
151
+ },
152
+ size: {
153
+ sm: {},
154
+ lg: {}
155
+ }
156
+ },
157
+ defaultVariants: { size: "sm" },
158
+ compoundVariants: [
159
+ {
160
+ theme: "brutal",
161
+ size: "sm",
162
+ class: { root: "h-4 text-base" }
163
+ },
164
+ {
165
+ theme: "brutal",
166
+ size: "lg",
167
+ class: { root: "h-6 text-xl" }
168
+ },
169
+ {
170
+ theme: "elegant",
171
+ size: "sm",
172
+ class: { root: "size-3.5" }
173
+ },
174
+ {
175
+ theme: "elegant",
176
+ size: "lg",
177
+ class: { root: "size-[18px]" }
178
+ }
179
+ ]
180
+ });
181
+ const spinnerStyle = /* @__PURE__ */ jsx("style", {
182
+ href: "raft-ui-spinner",
183
+ precedence: "default",
184
+ children: SPINNER_STYLE
185
+ });
186
+ function Spinner({ size = "sm", className, render, ...props }) {
187
+ const theme = useThemeFamily();
188
+ const { root, glyph, ring } = spinner({
189
+ theme,
190
+ size
191
+ });
192
+ const children = theme === "elegant" ? /* @__PURE__ */ jsxs(Fragment, { children: [spinnerStyle, /* @__PURE__ */ jsxs("svg", {
193
+ "data-spinner-ring": "",
194
+ "aria-hidden": "true",
195
+ className: ring(),
196
+ xmlns: "http://www.w3.org/2000/svg",
197
+ fill: "none",
198
+ viewBox: "0 0 24 24",
199
+ children: [/* @__PURE__ */ jsx("circle", {
200
+ className: "opacity-20",
201
+ cx: "12",
202
+ cy: "12",
203
+ r: "10",
204
+ stroke: "currentColor",
205
+ strokeWidth: "2.5"
206
+ }), /* @__PURE__ */ jsx("circle", {
207
+ "data-spinner-arc": "",
208
+ className: "opacity-80",
209
+ cx: "12",
210
+ cy: "12",
211
+ r: "10",
212
+ fill: "none",
213
+ pathLength: "150",
214
+ stroke: "currentColor",
215
+ strokeLinecap: "round",
216
+ strokeWidth: "2.5"
217
+ })]
218
+ })] }) : /* @__PURE__ */ jsxs(Fragment, { children: [spinnerStyle, /* @__PURE__ */ jsx("span", {
219
+ "data-spinner-glyph": "",
220
+ "aria-hidden": "true",
221
+ className: glyph()
222
+ })] });
223
+ return useRender({
224
+ defaultTagName: "span",
225
+ render,
226
+ props: mergeProps({
227
+ role: "status",
228
+ "aria-label": "Loading",
229
+ className: root({ className }),
230
+ children
231
+ }, props),
232
+ state: {
233
+ slot: "spinner",
234
+ size
235
+ }
236
+ });
237
+ }
238
+ //#endregion
239
+ //#region src/components/button/button.tsx
240
+ const buttonVariants = tv$1({
241
+ slots: {
242
+ root: [
243
+ "relative inline-flex shrink-0 items-center justify-center",
244
+ "font-heading leading-none whitespace-nowrap select-none",
245
+ "border-line rounded-none",
246
+ "shadow-sm transition-all duration-100",
247
+ "outline outline-[1px] outline-offset-2 outline-transparent",
248
+ "data-[loading=true]:cursor-wait",
249
+ "disabled:pointer-events-none disabled:opacity-40 data-[loading=true]:opacity-100",
250
+ "disabled:transform-none",
251
+ "[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4"
252
+ ],
253
+ content: "relative z-10 inline-flex items-center justify-center gap-[inherit] data-[loading=true]:invisible",
254
+ loadingIndicator: "pointer-events-none absolute inset-0 z-10 flex items-center justify-center"
255
+ },
256
+ variants: {
257
+ theme: {
258
+ brutal: { root: ["border-2 font-bold focus-visible:outline-transparent"] },
259
+ elegant: { root: [
260
+ "overflow-clip border-0 font-sans font-medium antialiased",
261
+ "focus-visible:outline-[var(--button-focus-outline,transparent)]",
262
+ "shadow-[inset_0_1px_0.5px_oklch(1_0_0_/_0.05),0_0_0_1px_var(--line-subtle)]",
263
+ "before:pointer-events-none before:absolute before:inset-0 before:z-0 before:rounded-[inherit]",
264
+ "active:not-aria-[haspopup]:scale-[0.985]"
265
+ ] }
266
+ },
267
+ variant: {
268
+ primary: { root: ["border-line-strong bg-primary-400 text-primary-950", "hover:bg-primary-500"] },
269
+ default: { root: ["border-line-strong bg-layer-panel text-foreground-strong", "hover:bg-layer-panel"] },
270
+ information: { root: ["border-line-strong bg-info-base text-foreground-inverse", "hover:bg-info-base"] },
271
+ muted: { root: ["border-line-strong bg-secondary-400 text-secondary-950", "hover:border-line-strong hover:bg-secondary-400"] },
272
+ accent: { root: ["border-line-strong bg-accent-400 text-accent-950", "hover:bg-accent-500"] },
273
+ warning: { root: ["border-line-strong bg-warning-base text-foreground-inverse", "hover:bg-warning-base"] },
274
+ outline: { root: [
275
+ "border-line-strong bg-transparent text-foreground-strong",
276
+ "hover:bg-layer-muted",
277
+ "shadow-none"
278
+ ] },
279
+ ghost: { root: ["border-transparent bg-transparent text-foreground shadow-none", "hover:border-line-strong hover:bg-layer-muted"] },
280
+ link: { root: ["border-transparent bg-transparent text-foreground-strong shadow-none underline-offset-4", "hover:underline"] },
281
+ "danger-secondary": { root: ["border-line-strong bg-danger-lighter text-danger-base", "hover:bg-danger-lighter"] },
282
+ danger: { root: ["border-line-strong bg-danger-base text-foreground-inverse", "hover:border-[oklch(0.595_0.241_26.758)] hover:bg-[oklch(0.595_0.241_26.758)]"] },
283
+ "danger-outline": { root: [
284
+ "border-line-strong bg-transparent text-danger-base",
285
+ "hover:bg-layer-muted",
286
+ "shadow-none"
287
+ ] }
288
+ },
289
+ size: {
290
+ xs: { root: [
291
+ "gap-1 px-2 py-[5px] text-[11px]",
292
+ "has-data-[icon=inline-start]:pl-1.5 has-data-[icon=inline-end]:pr-1.5",
293
+ "[&_svg:not([class*='size-'])]:size-3"
294
+ ] },
295
+ sm: { root: [
296
+ "gap-1.5 px-2.5 py-[6px] text-xs",
297
+ "has-data-[icon=inline-start]:pl-2 has-data-[icon=inline-end]:pr-2",
298
+ "[&_svg:not([class*='size-'])]:size-3.5"
299
+ ] },
300
+ md: { root: ["gap-2 px-3 py-2 text-sm", "has-data-[icon=inline-start]:pl-2.5 has-data-[icon=inline-end]:pr-2.5"] },
301
+ lg: { root: [
302
+ "gap-2 px-3.5 py-2.5 text-base",
303
+ "has-data-[icon=inline-start]:pl-3 has-data-[icon=inline-end]:pr-3",
304
+ "[&_svg:not([class*='size-'])]:size-4"
305
+ ] },
306
+ "icon-xs": { root: ["p-[5px] text-[11px]", "[&_svg:not([class*='size-'])]:size-3"] },
307
+ "icon-sm": { root: ["p-[6px] text-xs", "[&_svg:not([class*='size-'])]:size-3.5"] },
308
+ "icon-md": { root: ["p-2 text-sm", "[&_svg:not([class*='size-'])]:size-4"] },
309
+ "icon-lg": { root: ["p-3 text-sm", "[&_svg:not([class*='size-'])]:size-4"] }
310
+ }
311
+ },
312
+ defaultVariants: {
313
+ variant: "default",
314
+ size: "md"
315
+ },
316
+ compoundVariants: [
317
+ {
318
+ theme: "elegant",
319
+ size: ["xs", "icon-xs"],
320
+ class: { root: "rounded-sm" }
321
+ },
322
+ {
323
+ theme: "elegant",
324
+ size: ["sm", "icon-sm"],
325
+ class: { root: "rounded" }
326
+ },
327
+ {
328
+ theme: "elegant",
329
+ size: ["md", "icon-md"],
330
+ class: { root: "rounded-md" }
331
+ },
332
+ {
333
+ theme: "elegant",
334
+ size: ["lg", "icon-lg"],
335
+ class: { root: "rounded-md" }
336
+ },
337
+ {
338
+ theme: "brutal",
339
+ variant: "primary",
340
+ class: { root: "bg-brutal-yellow text-black hover:bg-brutal-yellow" }
341
+ },
342
+ {
343
+ theme: "brutal",
344
+ variant: "default",
345
+ class: { root: "bg-white text-black hover:bg-white" }
346
+ },
347
+ {
348
+ theme: "brutal",
349
+ variant: "outline",
350
+ class: { root: "bg-white text-black shadow-sm hover:bg-white" }
351
+ },
352
+ {
353
+ theme: "brutal",
354
+ variant: "information",
355
+ class: { root: "bg-brutal-cyan text-black hover:bg-brutal-cyan" }
356
+ },
357
+ {
358
+ theme: "brutal",
359
+ variant: "muted",
360
+ class: { root: "bg-brutal-stone text-black hover:bg-brutal-stone" }
361
+ },
362
+ {
363
+ theme: "brutal",
364
+ variant: "accent",
365
+ class: { root: "bg-brutal-pink text-black hover:bg-brutal-pink" }
366
+ },
367
+ {
368
+ theme: "brutal",
369
+ variant: "danger",
370
+ class: { root: "bg-brutal-red text-black hover:bg-brutal-red" }
371
+ },
372
+ {
373
+ theme: "brutal",
374
+ variant: "warning",
375
+ class: { root: "bg-[oklch(0.785_0.123_50.11)] text-black hover:bg-[oklch(0.785_0.123_50.11)]" }
376
+ },
377
+ {
378
+ theme: "brutal",
379
+ size: "xs",
380
+ class: { root: "h-6 px-2 py-0 text-[11px]" }
381
+ },
382
+ {
383
+ theme: "brutal",
384
+ size: "sm",
385
+ class: { root: "h-7 px-2.5 py-0 text-xs" }
386
+ },
387
+ {
388
+ theme: "brutal",
389
+ size: "md",
390
+ class: { root: "h-8 px-3 py-0 text-sm" }
391
+ },
392
+ {
393
+ theme: "brutal",
394
+ size: "lg",
395
+ class: { root: "h-10 px-4 py-0 text-sm" }
396
+ },
397
+ {
398
+ theme: "brutal",
399
+ size: "icon-xs",
400
+ class: { root: "size-6 p-0 text-[11px]" }
401
+ },
402
+ {
403
+ theme: "brutal",
404
+ size: "icon-sm",
405
+ class: { root: "size-7 p-0 text-xs" }
406
+ },
407
+ {
408
+ theme: "brutal",
409
+ size: "icon-md",
410
+ class: { root: "size-8 p-0 text-sm" }
411
+ },
412
+ {
413
+ theme: "brutal",
414
+ size: "icon-lg",
415
+ class: { root: "size-10 p-0 text-sm" }
416
+ },
417
+ {
418
+ theme: "elegant",
419
+ variant: "default",
420
+ class: { root: [
421
+ "bg-foreground-strong text-foreground-inverse",
422
+ "[--button-focus-outline:var(--foreground-strong)]",
423
+ "shadow-[inset_0_1px_0.5px_oklch(1_0_0_/_0.12),0_0_0_1px_var(--foreground-strong)]",
424
+ "before:bg-[linear-gradient(in_oklab_180deg,oklab(100%_0_0_/_8%)_0%,oklab(0%_0_0_/_0%)_100%)]",
425
+ "hover:bg-[oklch(0.31_0.006_285)]"
426
+ ] }
427
+ },
428
+ {
429
+ theme: "elegant",
430
+ variant: "primary",
431
+ class: { root: [
432
+ "bg-primary-400 text-primary-950",
433
+ "[--button-focus-outline:var(--primary-400)]",
434
+ "shadow-[inset_0_1px_0.5px_oklch(1_0_0_/_0.15),0_0_0_1px_oklch(0.83_0.14_91.89_/_0.83)]",
435
+ "before:bg-[linear-gradient(in_oklab_180deg,oklab(100%_0_0_/_11%)_0%,oklab(100%_0_0_/_0%)_0%,oklab(0%_0_0_/_0%)_100%)]",
436
+ "hover:bg-[oklch(0.86_0.15_91.89)]"
437
+ ] }
438
+ },
439
+ {
440
+ theme: "elegant",
441
+ variant: "outline",
442
+ class: { root: [
443
+ "bg-layer-panel text-foreground-strong",
444
+ "[--button-focus-outline:var(--layer-panel)]",
445
+ "shadow-[inset_0_1px_0.5px_oklch(1_0_0_/_0.05),0_0_0_1px_var(--line-subtle)]",
446
+ "before:bg-[linear-gradient(in_oklab_180deg,oklab(0%_0_0_/_0%)_30%,oklab(0%_0_0_/_1%)_100%)]",
447
+ "hover:bg-layer-muted"
448
+ ] }
449
+ },
450
+ {
451
+ theme: "elegant",
452
+ variant: "ghost",
453
+ class: { root: [
454
+ "bg-transparent text-foreground-muted shadow-none",
455
+ "[--button-focus-outline:var(--line-muted)]",
456
+ "before:bg-transparent hover:bg-line-muted"
457
+ ] }
458
+ },
459
+ {
460
+ theme: "elegant",
461
+ variant: "danger-secondary",
462
+ class: { root: [
463
+ "bg-danger-lighter text-danger-base",
464
+ "[--button-focus-outline:var(--state-danger-lighter)]",
465
+ "shadow-[inset_0_1px_0.5px_oklch(1_0_0_/_0.18),0_0_0_1px_var(--state-danger-light)]",
466
+ "before:bg-[linear-gradient(in_oklab_180deg,oklab(100%_0_0_/_9%)_0%,oklab(0%_0_0_/_1%)_100%)]",
467
+ "hover:bg-danger-light"
468
+ ] }
469
+ },
470
+ {
471
+ theme: "elegant",
472
+ variant: "danger",
473
+ class: { root: [
474
+ "bg-danger-base text-foreground-inverse",
475
+ "[--button-focus-outline:var(--state-danger-base)]",
476
+ "shadow-[inset_0_1px_0.5px_oklch(1_0_0_/_0.12),0_0_0_1px_var(--state-danger-base)]",
477
+ "before:bg-[linear-gradient(in_oklab_180deg,oklab(100%_0_0_/_10%)_0%,oklab(0%_0_0_/_0%)_100%)]",
478
+ "hover:bg-[oklch(0.56_0.23_26.758)]"
479
+ ] }
480
+ },
481
+ {
482
+ theme: "brutal",
483
+ variant: "danger",
484
+ class: { root: [
485
+ "border-line-strong bg-brutal-red text-black",
486
+ "shadow-sm",
487
+ "hover:border-line-strong hover:bg-brutal-red",
488
+ "hover:-translate-y-px hover:shadow-md",
489
+ "active:not-aria-[haspopup]:translate-x-px active:not-aria-[haspopup]:translate-y-px",
490
+ "active:shadow-xs"
491
+ ] }
492
+ },
493
+ {
494
+ theme: "brutal",
495
+ variant: "danger-secondary",
496
+ class: { root: [
497
+ "border-line-strong bg-danger-lighter text-[color-mix(in_oklab,var(--state-danger-base)_72%,transparent)]",
498
+ "shadow-sm",
499
+ "hover:border-line-strong hover:bg-danger-lighter",
500
+ "hover:-translate-y-px hover:shadow-md",
501
+ "active:not-aria-[haspopup]:translate-x-px active:not-aria-[haspopup]:translate-y-px",
502
+ "active:shadow-xs"
503
+ ] }
504
+ },
505
+ {
506
+ theme: "elegant",
507
+ variant: "danger-outline",
508
+ class: { root: [
509
+ "bg-layer-panel text-danger-base",
510
+ "[--button-focus-outline:var(--layer-panel)]",
511
+ "shadow-[inset_0_1px_0.5px_oklch(1_0_0_/_0.05),0_0_0_1px_var(--state-danger-light)]",
512
+ "before:bg-[linear-gradient(in_oklab_180deg,oklab(0%_0_0_/_0%)_30%,oklab(0%_0_0_/_1%)_100%)]",
513
+ "hover:bg-danger-lighter"
514
+ ] }
515
+ },
516
+ {
517
+ theme: "elegant",
518
+ variant: "accent",
519
+ class: { root: [
520
+ "bg-accent-400 text-white",
521
+ "[--button-focus-outline:var(--accent-400)]",
522
+ "shadow-[inset_0_1px_0.5px_oklch(1_0_0_/_0.12),0_0_0_1px_var(--accent-400)]",
523
+ "before:bg-[linear-gradient(in_oklab_180deg,oklab(100%_0_0_/_8%)_0%,oklab(0%_0_0_/_0%)_100%)]",
524
+ "hover:bg-[oklch(0.72_0.15_0.71)]"
525
+ ] }
526
+ },
527
+ {
528
+ theme: "elegant",
529
+ variant: "warning",
530
+ class: { root: [
531
+ "bg-warning-base text-foreground-inverse",
532
+ "[--button-focus-outline:var(--state-warning-base)]",
533
+ "shadow-[inset_0_1px_0.5px_oklch(1_0_0_/_0.14),0_0_0_1px_var(--state-warning-base)]",
534
+ "before:bg-[linear-gradient(in_oklab_180deg,oklab(100%_0_0_/_10%)_0%,oklab(0%_0_0_/_0%)_100%)]",
535
+ "hover:bg-[oklch(0.65_0.19_44.441)]"
536
+ ] }
537
+ },
538
+ {
539
+ theme: "elegant",
540
+ variant: "link",
541
+ class: { root: [
542
+ "bg-transparent text-foreground-muted shadow-none",
543
+ "[--button-focus-outline:transparent]",
544
+ "before:bg-transparent hover:bg-transparent hover:text-foreground-muted"
545
+ ] }
546
+ },
547
+ {
548
+ theme: "elegant",
549
+ variant: "information",
550
+ class: { root: [
551
+ "bg-info-base text-foreground-inverse",
552
+ "[--button-focus-outline:var(--state-info-base)]",
553
+ "shadow-[inset_0_1px_0.5px_oklch(1_0_0_/_0.12),0_0_0_1px_var(--state-info-base)]",
554
+ "before:bg-[linear-gradient(in_oklab_180deg,oklab(100%_0_0_/_8%)_0%,oklab(0%_0_0_/_0%)_100%)]",
555
+ "hover:bg-[oklch(0.74_0.13_219.2)]"
556
+ ] }
557
+ },
558
+ {
559
+ theme: "elegant",
560
+ variant: "muted",
561
+ class: { root: [
562
+ "bg-layer-muted text-foreground-placeholder",
563
+ "[--button-focus-outline:var(--layer-muted)]",
564
+ "shadow-[inset_0_1px_0.5px_oklch(1_0_0_/_0.05),0_0_0_1px_var(--line-subtle)]",
565
+ "before:bg-[linear-gradient(in_oklab_180deg,oklab(100%_0_0_/_5%)_0%,oklab(0%_0_0_/_1%)_100%)]",
566
+ "hover:bg-line-subtle"
567
+ ] }
568
+ },
569
+ {
570
+ theme: "brutal",
571
+ variant: [
572
+ "primary",
573
+ "default",
574
+ "information",
575
+ "muted",
576
+ "accent",
577
+ "warning",
578
+ "outline"
579
+ ],
580
+ class: { root: [
581
+ "hover:-translate-y-px hover:shadow-md",
582
+ "active:not-aria-[haspopup]:translate-x-px active:not-aria-[haspopup]:translate-y-px",
583
+ "active:shadow-xs"
584
+ ] }
585
+ }
586
+ ]
587
+ });
588
+ function defaultNativeButton(render) {
589
+ if (!render || typeof render !== "object" || !("type" in render)) return;
590
+ const element = render;
591
+ if (typeof element.type === "string") return element.type === "button";
592
+ }
593
+ function Button$1({ variant, size, loading = false, loadingLabel = "Loading", disabled, className, children, render, nativeButton, ...props }) {
594
+ const { root, content, loadingIndicator } = buttonVariants({
595
+ theme: useThemeFamily(),
596
+ variant,
597
+ size
598
+ });
599
+ return /* @__PURE__ */ jsxs(Button, {
600
+ ...props,
601
+ render,
602
+ nativeButton: nativeButton ?? defaultNativeButton(render),
603
+ "data-slot": "button",
604
+ className: root({ className }),
605
+ "data-loading": loading ? "true" : void 0,
606
+ disabled: disabled || loading,
607
+ "aria-disabled": loading || void 0,
608
+ children: [loading ? /* @__PURE__ */ jsx("span", {
609
+ "data-slot": "button-loading-indicator",
610
+ className: loadingIndicator(),
611
+ children: /* @__PURE__ */ jsx(Spinner, { "aria-label": loadingLabel })
612
+ }) : null, /* @__PURE__ */ jsx("span", {
613
+ "data-slot": "button-content",
614
+ "data-loading": loading ? "true" : void 0,
615
+ className: content(),
616
+ children
617
+ })]
618
+ });
619
+ }
620
+ //#endregion
621
+ export { useThemeFamily as a, tv$1 as c, useTheme as i, buttonVariants as n, ThemeContext as o, Spinner as r, ThemeStateContext as s, Button$1 as t };