raft-ui 0.0.6 → 0.0.8

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 (138) hide show
  1. package/CHANGELOG.md +7 -5
  2. package/dist/index.d.mts +618 -2
  3. package/dist/index.mjs +1205 -12
  4. package/{src → dist}/styles.css +0 -2
  5. package/{src/lib/styled-props.ts → dist/tv-UUMwNowu.d.mts} +6 -1
  6. package/dist/use-theme-Y_h1DKll.mjs +34 -0
  7. package/dist/wip.d.mts +15 -133
  8. package/dist/wip.mjs +23 -296
  9. package/package.json +4 -4
  10. package/dist/button-CJqMhTPQ.mjs +0 -621
  11. package/dist/index-CpGciYPW.d.mts +0 -267
  12. package/src/components/alert-dialog/alert-dialog.tsx +0 -215
  13. package/src/components/alert-dialog/index.ts +0 -30
  14. package/src/components/avatar/avatar.tsx +0 -375
  15. package/src/components/avatar/index.ts +0 -17
  16. package/src/components/badge/badge.tsx +0 -393
  17. package/src/components/badge/index.ts +0 -2
  18. package/src/components/banner/banner.tsx +0 -269
  19. package/src/components/banner/index.ts +0 -8
  20. package/src/components/bottom-sheet/bottom-sheet.tsx +0 -152
  21. package/src/components/bottom-sheet/index.ts +0 -22
  22. package/src/components/button/button.tsx +0 -499
  23. package/src/components/button/index.ts +0 -2
  24. package/src/components/checkbox/checkbox-indicator.tsx +0 -128
  25. package/src/components/checkbox/checkbox.tsx +0 -350
  26. package/src/components/checkbox/index.ts +0 -2
  27. package/src/components/combobox/combobox.tsx +0 -603
  28. package/src/components/combobox/index.ts +0 -52
  29. package/src/components/context-menu/context-menu.tsx +0 -380
  30. package/src/components/context-menu/index.ts +0 -34
  31. package/src/components/conversation-preview-card/conversation-preview-card.tsx +0 -336
  32. package/src/components/conversation-preview-card/index.ts +0 -32
  33. package/src/components/description-list/description-list.tsx +0 -116
  34. package/src/components/description-list/index.ts +0 -14
  35. package/src/components/dialog/dialog.tsx +0 -152
  36. package/src/components/dialog/index.ts +0 -26
  37. package/src/components/dropdown-menu/dropdown-menu.tsx +0 -405
  38. package/src/components/dropdown-menu/index.ts +0 -38
  39. package/src/components/empty-state/empty-state.tsx +0 -177
  40. package/src/components/empty-state/index.ts +0 -16
  41. package/src/components/field/field.tsx +0 -125
  42. package/src/components/field/index.ts +0 -18
  43. package/src/components/inline-code/index.ts +0 -2
  44. package/src/components/inline-code/inline-code.tsx +0 -35
  45. package/src/components/input/index.ts +0 -2
  46. package/src/components/input/input.tsx +0 -76
  47. package/src/components/input-group/index.ts +0 -7
  48. package/src/components/input-group/input-group.tsx +0 -215
  49. package/src/components/kbd/index.ts +0 -2
  50. package/src/components/kbd/kbd.tsx +0 -43
  51. package/src/components/label/index.ts +0 -2
  52. package/src/components/label/label.tsx +0 -99
  53. package/src/components/lightbox/index.ts +0 -24
  54. package/src/components/lightbox/lightbox.tsx +0 -245
  55. package/src/components/list-item/index.ts +0 -20
  56. package/src/components/list-item/list-item.tsx +0 -263
  57. package/src/components/media-list-item/index.ts +0 -20
  58. package/src/components/media-list-item/media-list-item.tsx +0 -169
  59. package/src/components/notification-center/index.ts +0 -39
  60. package/src/components/notification-center/notification-center.tsx +0 -558
  61. package/src/components/panel-header/index.ts +0 -22
  62. package/src/components/panel-header/panel-header.tsx +0 -199
  63. package/src/components/popover/index.ts +0 -30
  64. package/src/components/popover/popover.tsx +0 -248
  65. package/src/components/preview-shell/index.ts +0 -2
  66. package/src/components/preview-shell/preview-shell.tsx +0 -51
  67. package/src/components/quoted-message-card/index.ts +0 -36
  68. package/src/components/quoted-message-card/quoted-message-card.tsx +0 -391
  69. package/src/components/radio-group/index.ts +0 -2
  70. package/src/components/radio-group/radio-group.tsx +0 -119
  71. package/src/components/section-header/index.ts +0 -16
  72. package/src/components/section-header/section-header.tsx +0 -117
  73. package/src/components/section-label/index.ts +0 -2
  74. package/src/components/section-label/section-label.tsx +0 -38
  75. package/src/components/segmented-control/index.ts +0 -12
  76. package/src/components/segmented-control/segmented-control.tsx +0 -129
  77. package/src/components/select/index.ts +0 -40
  78. package/src/components/select/select.tsx +0 -382
  79. package/src/components/separator/index.ts +0 -2
  80. package/src/components/separator/separator.tsx +0 -40
  81. package/src/components/spinner/index.ts +0 -2
  82. package/src/components/spinner/spinner.tsx +0 -228
  83. package/src/components/status/index.ts +0 -2
  84. package/src/components/status/status.tsx +0 -152
  85. package/src/components/tabs/index.ts +0 -24
  86. package/src/components/tabs/tabs.tsx +0 -451
  87. package/src/components/text/index.ts +0 -2
  88. package/src/components/text/text.tsx +0 -131
  89. package/src/components/textarea/index.ts +0 -2
  90. package/src/components/textarea/textarea.tsx +0 -136
  91. package/src/components/toggle-group/index.ts +0 -7
  92. package/src/components/toggle-group/toggle-group.tsx +0 -111
  93. package/src/components/tooltip/index.ts +0 -8
  94. package/src/components/tooltip/tooltip.tsx +0 -212
  95. package/src/index.ts +0 -429
  96. package/src/legacy/AttentionDot.tsx +0 -28
  97. package/src/legacy/AvatarListRow.tsx +0 -87
  98. package/src/legacy/AvatarSlot.tsx +0 -157
  99. package/src/legacy/Badge.tsx +0 -95
  100. package/src/legacy/Banner.tsx +0 -74
  101. package/src/legacy/BottomSheet.tsx +0 -76
  102. package/src/legacy/CheckMarker.tsx +0 -72
  103. package/src/legacy/Checkbox.tsx +0 -81
  104. package/src/legacy/ConversationPreviewCard.tsx +0 -169
  105. package/src/legacy/DismissBackdrop.tsx +0 -68
  106. package/src/legacy/EmptyState.tsx +0 -63
  107. package/src/legacy/ExperimentalBadge.tsx +0 -19
  108. package/src/legacy/FormField.tsx +0 -106
  109. package/src/legacy/KeyValueRow.tsx +0 -67
  110. package/src/legacy/Lightbox.tsx +0 -119
  111. package/src/legacy/NotificationCenter.tsx +0 -217
  112. package/src/legacy/PanelHeader.tsx +0 -94
  113. package/src/legacy/PreviewShell.tsx +0 -40
  114. package/src/legacy/QuotedMessageCard.tsx +0 -181
  115. package/src/legacy/ReorderablePanelTabs.tsx +0 -156
  116. package/src/legacy/SandboxedPreviewFrame.tsx +0 -59
  117. package/src/legacy/SearchInput.tsx +0 -23
  118. package/src/legacy/SectionEyebrow.tsx +0 -60
  119. package/src/legacy/SectionHeader.tsx +0 -68
  120. package/src/legacy/SegmentedControl.tsx +0 -74
  121. package/src/legacy/SlugInput.tsx +0 -29
  122. package/src/legacy/Spinner.tsx +0 -89
  123. package/src/legacy/StatusDot.tsx +0 -51
  124. package/src/legacy/SurfaceListItem.tsx +0 -32
  125. package/src/legacy/Textarea.tsx +0 -137
  126. package/src/legacy/button.tsx +0 -100
  127. package/src/legacy/context-menu-divider.tsx +0 -12
  128. package/src/legacy/menu-item.tsx +0 -66
  129. package/src/legacy/selection-popover.tsx +0 -212
  130. package/src/legacy/server-switcher-menu.tsx +0 -203
  131. package/src/legacy/source.css +0 -240
  132. package/src/lib/cn.ts +0 -1
  133. package/src/lib/theme/theme-context.ts +0 -28
  134. package/src/lib/theme/theme-provider.tsx +0 -181
  135. package/src/lib/theme/use-theme.ts +0 -12
  136. package/src/lib/tv.ts +0 -29
  137. package/src/lib/without-children.ts +0 -6
  138. package/src/wip.ts +0 -291
@@ -1,621 +0,0 @@
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 };