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,393 +0,0 @@
1
- import { mergeProps } from "@base-ui/react/merge-props";
2
- import { useRender } from "@base-ui/react/use-render";
3
- import { tv, type VariantProps } from "../../lib/tv";
4
- import { useThemeFamily } from "../../lib/theme/use-theme";
5
-
6
- export const badge = tv({
7
- slots: {
8
- root: [
9
- "inline-flex h-5 w-fit shrink-0 min-w-0 max-w-full items-center gap-1 px-1.5",
10
- "overflow-hidden whitespace-nowrap",
11
- "text-[10px] font-bold leading-none",
12
- "[&_[data-slot='spinner']]:!size-3 [&_[data-slot='spinner']]:!text-xs",
13
- ],
14
- },
15
- variants: {
16
- theme: {
17
- brutal: {
18
- root: ["border border-line-strong"],
19
- },
20
- elegant: {
21
- root: [
22
- "gap-1.5 rounded-full border border-transparent px-2.5 py-0.5",
23
- "[&:has(svg)]:px-2",
24
- "[&_svg]:shrink-0 [&_svg]:translate-y-[0.5px]",
25
- "text-[11px] font-medium leading-3 tracking-[0.22px]",
26
- ],
27
- },
28
- },
29
- appearance: {
30
- solid: {
31
- root: "",
32
- },
33
- soft: {
34
- root: "",
35
- },
36
- outline: {
37
- root: "",
38
- },
39
- },
40
- variant: {
41
- default: {
42
- root: "bg-layer-panel text-foreground-strong",
43
- },
44
- primary: {
45
- root: "bg-primary-400 text-primary-950",
46
- },
47
- information: {
48
- root: "bg-info-base text-foreground-inverse",
49
- },
50
- muted: {
51
- root: "bg-secondary-400 text-foreground-strong",
52
- },
53
- accent: {
54
- root: "bg-accent-400 text-accent-950",
55
- },
56
- success: {
57
- root: "bg-success-base text-success-dark",
58
- },
59
- warning: {
60
- root: "bg-warning-base text-foreground-inverse",
61
- },
62
- danger: {
63
- root: "bg-[oklch(0.66_0.19_31)] text-foreground-strong",
64
- },
65
- },
66
- // Enables the old brutal casing recipe when a badge should read as a compact
67
- // label. It defaults off so case-sensitive content stays intact.
68
- uppercase: {
69
- true: {
70
- root: "uppercase tracking-wide",
71
- },
72
- false: {
73
- root: "",
74
- },
75
- },
76
- },
77
- defaultVariants: {
78
- appearance: "solid",
79
- variant: "default",
80
- uppercase: false,
81
- },
82
- compoundVariants: [
83
- {
84
- theme: "brutal",
85
- appearance: "solid",
86
- variant: "success",
87
- class: { root: "bg-brutal-lime text-black" },
88
- },
89
- {
90
- theme: "brutal",
91
- appearance: "solid",
92
- variant: "danger",
93
- class: { root: "bg-brutal-red text-black" },
94
- },
95
- {
96
- theme: "brutal",
97
- appearance: "solid",
98
- variant: "information",
99
- class: { root: "bg-info-base text-info-dark" },
100
- },
101
- {
102
- theme: "brutal",
103
- appearance: "solid",
104
- variant: "warning",
105
- class: { root: "bg-warning-base text-black" },
106
- },
107
- {
108
- theme: "brutal",
109
- appearance: "soft",
110
- variant: "default",
111
- class: { root: "bg-layer-muted text-foreground-strong" },
112
- },
113
- {
114
- theme: "brutal",
115
- appearance: "soft",
116
- variant: "muted",
117
- class: { root: "bg-secondary-100 text-secondary-900" },
118
- },
119
- {
120
- theme: "brutal",
121
- appearance: "soft",
122
- variant: "primary",
123
- class: { root: "bg-[oklch(0.958_0.047_86)] text-primary-950" },
124
- },
125
- {
126
- theme: "brutal",
127
- appearance: "soft",
128
- variant: "information",
129
- class: { root: "bg-info-lighter text-info-dark" },
130
- },
131
- {
132
- theme: "brutal",
133
- appearance: "soft",
134
- variant: "accent",
135
- class: { root: "bg-accent-100 text-accent-950" },
136
- },
137
- {
138
- theme: "brutal",
139
- appearance: "soft",
140
- variant: "success",
141
- class: { root: "bg-success-lighter text-success-dark" },
142
- },
143
- {
144
- theme: "brutal",
145
- appearance: "soft",
146
- variant: "warning",
147
- class: { root: "bg-warning-lighter text-warning-dark" },
148
- },
149
- {
150
- theme: "brutal",
151
- appearance: "soft",
152
- variant: "danger",
153
- class: { root: "bg-danger-lighter text-danger-dark" },
154
- },
155
- {
156
- theme: "brutal",
157
- appearance: "outline",
158
- variant: "default",
159
- class: { root: "bg-transparent text-foreground-strong" },
160
- },
161
- {
162
- theme: "brutal",
163
- appearance: "outline",
164
- variant: "muted",
165
- class: { root: "bg-transparent text-secondary-900" },
166
- },
167
- {
168
- theme: "brutal",
169
- appearance: "outline",
170
- variant: "primary",
171
- class: { root: "bg-transparent text-primary-700" },
172
- },
173
- {
174
- theme: "brutal",
175
- appearance: "outline",
176
- variant: "information",
177
- class: { root: "bg-transparent text-info-dark" },
178
- },
179
- {
180
- theme: "brutal",
181
- appearance: "outline",
182
- variant: "accent",
183
- class: { root: "bg-transparent text-accent-700" },
184
- },
185
- {
186
- theme: "brutal",
187
- appearance: "outline",
188
- variant: "success",
189
- class: { root: "bg-transparent text-[oklch(0.48_0.12_153.079)]" },
190
- },
191
- {
192
- theme: "brutal",
193
- appearance: "outline",
194
- variant: "warning",
195
- class: { root: "bg-transparent text-warning-dark" },
196
- },
197
- {
198
- theme: "brutal",
199
- appearance: "outline",
200
- variant: "danger",
201
- class: { root: "bg-transparent text-[oklch(0.54_0.19_31)]" },
202
- },
203
- {
204
- theme: "elegant",
205
- appearance: "solid",
206
- variant: "default",
207
- class: {
208
- root: "bg-line-muted text-foreground-muted",
209
- },
210
- },
211
- {
212
- theme: "elegant",
213
- appearance: "solid",
214
- variant: "muted",
215
- class: { root: "bg-[oklch(0.46_0.004_286)] text-[oklch(0.94_0.001_286)]" },
216
- },
217
- {
218
- theme: "elegant",
219
- appearance: "solid",
220
- variant: "primary",
221
- class: { root: "bg-primary-400 text-primary-950" },
222
- },
223
- {
224
- theme: "elegant",
225
- appearance: "solid",
226
- variant: "information",
227
- class: { root: "bg-info-base text-foreground-inverse" },
228
- },
229
- {
230
- theme: "elegant",
231
- appearance: "solid",
232
- variant: "accent",
233
- class: { root: "bg-accent-400 text-foreground-inverse" },
234
- },
235
- {
236
- theme: "elegant",
237
- appearance: "solid",
238
- variant: "success",
239
- class: { root: "bg-success-base text-foreground-inverse" },
240
- },
241
- {
242
- theme: "elegant",
243
- appearance: "solid",
244
- variant: "warning",
245
- class: { root: "bg-warning-base text-foreground-inverse" },
246
- },
247
- {
248
- theme: "elegant",
249
- appearance: "solid",
250
- variant: "danger",
251
- class: { root: "bg-[oklch(0.68_0.22_26.758)] text-foreground-inverse" },
252
- },
253
- {
254
- theme: "elegant",
255
- appearance: "soft",
256
- variant: "default",
257
- class: { root: "border-transparent bg-layer-muted text-foreground-strong" },
258
- },
259
- {
260
- theme: "elegant",
261
- appearance: "soft",
262
- variant: "muted",
263
- class: { root: "border-transparent bg-secondary-100 text-secondary-900" },
264
- },
265
- {
266
- theme: "elegant",
267
- appearance: "soft",
268
- variant: "primary",
269
- class: { root: "border-transparent bg-[oklch(0.958_0.047_86)] text-primary-950" },
270
- },
271
- {
272
- theme: "elegant",
273
- appearance: "soft",
274
- variant: "information",
275
- class: { root: "border-transparent bg-info-lighter text-info-dark" },
276
- },
277
- {
278
- theme: "elegant",
279
- appearance: "soft",
280
- variant: "accent",
281
- class: { root: "border-transparent bg-accent-100 text-accent-950" },
282
- },
283
- {
284
- theme: "elegant",
285
- appearance: "soft",
286
- variant: "success",
287
- class: { root: "border-transparent bg-success-lighter text-success-dark" },
288
- },
289
- {
290
- theme: "elegant",
291
- appearance: "soft",
292
- variant: "warning",
293
- class: { root: "border-transparent bg-warning-lighter text-warning-dark" },
294
- },
295
- {
296
- theme: "elegant",
297
- appearance: "soft",
298
- variant: "danger",
299
- class: { root: "border-transparent bg-danger-lighter text-danger-dark" },
300
- },
301
- {
302
- theme: "elegant",
303
- appearance: "outline",
304
- variant: "default",
305
- class: { root: "border-line-subtle bg-transparent text-foreground-strong" },
306
- },
307
- {
308
- theme: "elegant",
309
- appearance: "outline",
310
- variant: "muted",
311
- class: { root: "border-secondary-500 bg-transparent text-secondary-900" },
312
- },
313
- {
314
- theme: "elegant",
315
- appearance: "outline",
316
- variant: "primary",
317
- class: { root: "border-primary-500 bg-transparent text-primary-800" },
318
- },
319
- {
320
- theme: "elegant",
321
- appearance: "outline",
322
- variant: "information",
323
- class: { root: "border-info-base bg-transparent text-[oklch(0.48_0.09_219.2)]" },
324
- },
325
- {
326
- theme: "elegant",
327
- appearance: "outline",
328
- variant: "accent",
329
- class: { root: "border-accent-500 bg-transparent text-accent-800" },
330
- },
331
- {
332
- theme: "elegant",
333
- appearance: "outline",
334
- variant: "success",
335
- class: { root: "border-success-base bg-transparent text-success-dark" },
336
- },
337
- {
338
- theme: "elegant",
339
- appearance: "outline",
340
- variant: "warning",
341
- class: { root: "border-warning-base bg-transparent text-warning-dark" },
342
- },
343
- {
344
- theme: "elegant",
345
- appearance: "outline",
346
- variant: "danger",
347
- class: { root: "border-danger-base bg-transparent text-danger-dark" },
348
- },
349
- ],
350
- });
351
-
352
- export type BadgeProps = useRender.ComponentProps<"span"> &
353
- Omit<VariantProps<typeof badge>, "theme">;
354
-
355
- function BadgeRoot({ appearance, variant, uppercase, className, render, ...props }: BadgeProps) {
356
- const theme = useThemeFamily();
357
- const resolvedAppearance = appearance ?? "solid";
358
- const resolvedUppercase = uppercase ?? false;
359
- const { root } = badge({
360
- theme,
361
- appearance: resolvedAppearance,
362
- variant,
363
- uppercase: resolvedUppercase,
364
- });
365
- const defaultProps: useRender.ElementProps<"span"> = {
366
- className: root({ className }),
367
- };
368
-
369
- return useRender({
370
- defaultTagName: "span",
371
- render,
372
- props: mergeProps<"span">(defaultProps, props),
373
- state: {
374
- slot: "badge",
375
- appearance: resolvedAppearance,
376
- variant,
377
- uppercase: resolvedUppercase,
378
- },
379
- });
380
- }
381
-
382
- // Fixed success + uppercase "Experimental" preset. The visual identity lives in
383
- // Badge, so every experimental surface stays identical. Attached as a static
384
- // because it only presets props.
385
- function Experimental(props: Omit<BadgeProps, "appearance" | "variant" | "uppercase">) {
386
- return (
387
- <BadgeRoot variant="success" uppercase {...props}>
388
- Experimental
389
- </BadgeRoot>
390
- );
391
- }
392
-
393
- export const Badge = Object.assign(BadgeRoot, { Experimental });
@@ -1,2 +0,0 @@
1
- export { Badge } from "./badge";
2
- export type { BadgeProps } from "./badge";
@@ -1,269 +0,0 @@
1
- import { mergeProps } from "@base-ui/react/merge-props";
2
- import { useRender } from "@base-ui/react/use-render";
3
- import { tv, type VariantProps } from "../../lib/tv";
4
- import { useThemeFamily } from "../../lib/theme/use-theme";
5
-
6
- const banner = tv({
7
- slots: {
8
- root: [""],
9
- title: [""],
10
- description: [""],
11
- action: [""],
12
- },
13
- variants: {
14
- theme: {
15
- brutal: {
16
- root: [
17
- "group/banner grid grid-cols-[0_minmax(0,1fr)] items-start border-2 border-line-strong",
18
- "has-[>[data-slot=banner-action]]:grid-cols-[0_minmax(0,1fr)_auto]",
19
- "has-[>svg]:grid-cols-[18px_minmax(0,1fr)]",
20
- "[&:has(>svg):has(>[data-slot=banner-action])]:grid-cols-[18px_minmax(0,1fr)_auto]",
21
- "[&>svg]:col-start-1 [&>svg]:row-span-2 [&>svg]:mt-0.5",
22
- "[&>svg]:size-[18px] [&>svg]:shrink-0 [&>svg]:text-foreground-strong",
23
- ],
24
- title: [
25
- "col-start-2 mb-0.5 text-sm font-bold text-foreground-strong",
26
- "group-data-[size=sm]/banner:text-xs",
27
- ],
28
- description: [
29
- "col-start-2 min-w-0 text-sm text-foreground-strong",
30
- "group-data-[size=sm]/banner:text-xs",
31
- ],
32
- action: ["col-start-3 row-span-2 row-start-1 shrink-0"],
33
- },
34
- elegant: {
35
- root: [
36
- "group/banner grid w-full items-center gap-x-2 gap-y-0 rounded-sm border-0",
37
- "text-[0.8125rem] leading-5 tracking-[-0.005em] text-foreground-strong",
38
- "grid-cols-[minmax(0,1fr)]",
39
- "has-[>svg]:grid-cols-[auto_minmax(0,1fr)]",
40
- "has-[>[data-slot=banner-action]]:grid-cols-[minmax(0,1fr)_auto]",
41
- "has-[>svg]:has-[>[data-slot=banner-action]]:grid-cols-[auto_minmax(0,1fr)_auto]",
42
- "has-[>[data-slot=banner-title]]:has-[>[data-slot=banner-description]]:items-start",
43
- "has-[>[data-slot=banner-title]]:has-[>[data-slot=banner-description]]:grid-rows-[auto_auto]",
44
- "has-[>[data-slot=banner-title]]:has-[>[data-slot=banner-description]]:gap-y-1",
45
- "[&>svg]:col-start-1 [&>svg]:row-start-1 [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:self-center",
46
- ],
47
- title: [
48
- "col-start-1 row-start-1 flex h-5 min-w-0 items-center text-[0.84375rem] font-medium leading-5 text-foreground-strong",
49
- "group-has-[>svg]/banner:col-start-2",
50
- "group-data-[size=sm]/banner:h-4 group-data-[size=sm]/banner:text-[0.8125rem] group-data-[size=sm]/banner:leading-4",
51
- "group-data-[size=lg]/banner:h-6 group-data-[size=lg]/banner:text-[0.90625rem] group-data-[size=lg]/banner:leading-6",
52
- "group-data-[status=warning]/banner:text-[oklch(0.476_0.114_61.907)]",
53
- ],
54
- description: [
55
- "col-start-1 row-start-1 min-w-0 font-normal leading-4 text-foreground-muted",
56
- "group-has-[>svg]/banner:col-start-2",
57
- "group-has-[>[data-slot=banner-title]]/banner:row-start-2",
58
- "group-data-[size=sm]/banner:text-xs group-data-[size=sm]/banner:leading-4",
59
- "group-data-[size=lg]/banner:text-[0.875rem] group-data-[size=lg]/banner:leading-5",
60
- "group-data-[status=warning]/banner:text-[oklch(0.476_0.114_61.907)]",
61
- ],
62
- action: [
63
- "col-start-2 row-start-1 flex h-5 shrink-0 items-center gap-2",
64
- "group-has-[>svg]/banner:col-start-3",
65
- "group-has-[>[data-slot=banner-title]+[data-slot=banner-description]]/banner:row-span-2",
66
- "[&>button:has(svg):last-child]:size-5 [&>button:has(svg):last-child]:min-h-5 [&>button:has(svg):last-child]:min-w-5",
67
- "[&>button:has(svg):last-child]:rounded-sm",
68
- "[&>button:has(svg):last-child]:border-transparent [&>button:has(svg):last-child]:bg-transparent [&>button:has(svg):last-child]:shadow-none",
69
- "[&>button:has(svg):last-child]:text-current/45",
70
- "[&>button:has(svg):last-child]:transition-colors [&>button:has(svg):last-child]:duration-200",
71
- "[&>button:has(svg):last-child]:hover:border-transparent [&>button:has(svg):last-child]:hover:bg-foreground/5",
72
- "[&>button:has(svg):last-child]:hover:text-current/70",
73
- "[&>button:has(svg):last-child>svg]:size-4",
74
- "group-data-[size=sm]/banner:h-4 group-data-[size=sm]/banner:[&>button:has(svg):last-child]:size-4",
75
- "group-data-[size=sm]/banner:[&>button:has(svg):last-child]:min-h-4 group-data-[size=sm]/banner:[&>button:has(svg):last-child]:min-w-4",
76
- "group-data-[size=sm]/banner:[&>button:has(svg):last-child>svg]:size-3",
77
- "group-data-[size=lg]/banner:h-6 group-data-[size=lg]/banner:[&>button:has(svg):last-child]:size-6",
78
- "group-data-[size=lg]/banner:[&>button:has(svg):last-child]:min-h-6 group-data-[size=lg]/banner:[&>button:has(svg):last-child]:min-w-6",
79
- ],
80
- },
81
- },
82
- status: {
83
- default: {},
84
- destructive: {},
85
- warning: {},
86
- info: {},
87
- success: {},
88
- },
89
- size: {
90
- sm: {},
91
- md: {},
92
- lg: {},
93
- },
94
- align: {
95
- top: { action: "self-start" },
96
- middle: { action: "self-center" },
97
- },
98
- },
99
- defaultVariants: {
100
- size: "md",
101
- align: "middle",
102
- },
103
- compoundVariants: [
104
- { theme: "brutal", status: "default", class: { root: "bg-layer-panel" } },
105
- { theme: "brutal", status: "destructive", class: { root: "bg-danger-base/20" } },
106
- { theme: "brutal", status: "warning", class: { root: "bg-warning-base/20" } },
107
- { theme: "brutal", status: "info", class: { root: "bg-primary-400/30" } },
108
- { theme: "brutal", status: "success", class: { root: "bg-success-base/20" } },
109
- {
110
- theme: "brutal",
111
- size: "sm",
112
- class: { root: "gap-y-0 p-2 has-[>svg]:gap-x-2 has-[>[data-slot=banner-action]]:gap-x-2" },
113
- },
114
- {
115
- theme: "brutal",
116
- size: "md",
117
- class: { root: "gap-y-0 p-3 has-[>svg]:gap-x-3 has-[>[data-slot=banner-action]]:gap-x-3" },
118
- },
119
- {
120
- theme: "brutal",
121
- size: "lg",
122
- class: {
123
- root: "gap-y-0 p-4 shadow-sm has-[>svg]:gap-x-3 has-[>[data-slot=banner-action]]:gap-x-3",
124
- },
125
- },
126
- {
127
- theme: "elegant",
128
- status: "default",
129
- class: {
130
- root: "bg-layer-muted [&>svg]:text-foreground-muted",
131
- },
132
- },
133
- {
134
- theme: "elegant",
135
- status: "success",
136
- class: {
137
- root: "bg-[oklch(0.94_0.035_153.079)] [&>svg]:text-success-base",
138
- },
139
- },
140
- {
141
- theme: "elegant",
142
- status: "warning",
143
- class: {
144
- root: "bg-[oklch(0.973_0.071_103.193)] text-[oklch(0.476_0.114_61.907)] [&>svg]:text-[oklch(0.476_0.114_61.907)]",
145
- },
146
- },
147
- {
148
- theme: "elegant",
149
- status: "info",
150
- class: {
151
- root: "bg-info-lighter [&>svg]:text-[oklch(0.55_0.11_220)]",
152
- },
153
- },
154
- {
155
- theme: "elegant",
156
- status: "destructive",
157
- class: {
158
- root: "bg-danger-lighter [&>svg]:text-danger-base",
159
- },
160
- },
161
- {
162
- theme: "elegant",
163
- size: "sm",
164
- class: {
165
- root: "py-2.5 pl-2.5 pr-2 text-xs leading-4 [&>svg]:size-3.5",
166
- },
167
- },
168
- {
169
- theme: "elegant",
170
- size: "md",
171
- class: {
172
- root: "px-3 py-3",
173
- },
174
- },
175
- {
176
- theme: "elegant",
177
- size: "lg",
178
- class: {
179
- root: "gap-x-2 px-3.5 py-3 text-sm leading-5 [&>svg]:size-[18px]",
180
- },
181
- },
182
- ],
183
- });
184
-
185
- export type BannerStatus = NonNullable<VariantProps<typeof banner>["status"]>;
186
-
187
- export type BannerProps = useRender.ComponentProps<"div"> &
188
- Omit<VariantProps<typeof banner>, "theme" | "align"> & {
189
- status: BannerStatus;
190
- };
191
-
192
- export function Banner({ status, size = "md", className, render, ...props }: BannerProps) {
193
- const theme = useThemeFamily();
194
- const { root } = banner({ theme, status, size });
195
- const defaultProps: useRender.ElementProps<"div"> = {
196
- className: root({ className }),
197
- role: "alert",
198
- };
199
-
200
- return useRender({
201
- defaultTagName: "div",
202
- render,
203
- props: mergeProps<"div">(defaultProps, props),
204
- state: {
205
- slot: "banner",
206
- size,
207
- status,
208
- },
209
- });
210
- }
211
-
212
- export type BannerTitleProps = useRender.ComponentProps<"div">;
213
-
214
- export function BannerTitle({ render, className, ...props }: BannerTitleProps) {
215
- const theme = useThemeFamily();
216
- const { title } = banner({ theme });
217
- const defaultProps: useRender.ElementProps<"div"> = {
218
- className: title({ className }),
219
- };
220
-
221
- return useRender({
222
- defaultTagName: "div",
223
- render,
224
- props: mergeProps<"div">(defaultProps, props),
225
- state: {
226
- slot: "banner-title",
227
- },
228
- });
229
- }
230
-
231
- export type BannerDescriptionProps = useRender.ComponentProps<"div">;
232
-
233
- export function BannerDescription({ render, className, ...props }: BannerDescriptionProps) {
234
- const theme = useThemeFamily();
235
- const { description } = banner({ theme });
236
- const defaultProps: useRender.ElementProps<"div"> = {
237
- className: description({ className }),
238
- };
239
-
240
- return useRender({
241
- defaultTagName: "div",
242
- render,
243
- props: mergeProps<"div">(defaultProps, props),
244
- state: {
245
- slot: "banner-description",
246
- },
247
- });
248
- }
249
-
250
- export type BannerActionProps = Omit<useRender.ComponentProps<"div">, "align"> &
251
- Pick<VariantProps<typeof banner>, "align">;
252
-
253
- export function BannerAction({ align = "middle", render, className, ...props }: BannerActionProps) {
254
- const theme = useThemeFamily();
255
- const { action } = banner({ theme, align });
256
- const defaultProps: useRender.ElementProps<"div"> = {
257
- className: action({ className }),
258
- };
259
-
260
- return useRender({
261
- defaultTagName: "div",
262
- render,
263
- props: mergeProps<"div">(defaultProps, props),
264
- state: {
265
- slot: "banner-action",
266
- align,
267
- },
268
- });
269
- }
@@ -1,8 +0,0 @@
1
- export { Banner, BannerAction, BannerDescription, BannerTitle } from "./banner";
2
- export type {
3
- BannerActionProps,
4
- BannerDescriptionProps,
5
- BannerProps,
6
- BannerStatus,
7
- BannerTitleProps,
8
- } from "./banner";