@evinvest/uikit 0.18.0 → 0.20.0
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.
- package/README.md +210 -13
- package/dist/chunk-3IPB4QQJ.js +306 -0
- package/dist/chunk-3IPB4QQJ.js.map +1 -0
- package/dist/components/accordion.js +136 -0
- package/dist/components/accordion.js.map +1 -0
- package/dist/components/alert-dialog.js +175 -0
- package/dist/components/alert-dialog.js.map +1 -0
- package/dist/components/alert.js +49 -0
- package/dist/components/alert.js.map +1 -0
- package/dist/components/avatar.js +54 -0
- package/dist/components/avatar.js.map +1 -0
- package/dist/components/badge.js +25 -0
- package/dist/components/badge.js.map +1 -0
- package/dist/components/band.js +75 -0
- package/dist/components/band.js.map +1 -0
- package/dist/components/breadcrumb.js +132 -0
- package/dist/components/breadcrumb.js.map +1 -0
- package/dist/components/button-group.js +61 -0
- package/dist/components/button-group.js.map +1 -0
- package/dist/components/button.js +55 -0
- package/dist/components/button.js.map +1 -0
- package/dist/components/calendar.js +226 -0
- package/dist/components/calendar.js.map +1 -0
- package/dist/components/card.js +98 -0
- package/dist/components/card.js.map +1 -0
- package/dist/components/carousel.js +262 -0
- package/dist/components/carousel.js.map +1 -0
- package/dist/components/chart.js +151 -0
- package/dist/components/chart.js.map +1 -0
- package/dist/components/checkbox.js +68 -0
- package/dist/components/checkbox.js.map +1 -0
- package/dist/components/collapsible.js +60 -0
- package/dist/components/collapsible.js.map +1 -0
- package/dist/components/command.js +274 -0
- package/dist/components/command.js.map +1 -0
- package/dist/components/container.js +18 -0
- package/dist/components/container.js.map +1 -0
- package/dist/components/context-menu.js +337 -0
- package/dist/components/context-menu.js.map +1 -0
- package/dist/components/date-time-picker.js +301 -0
- package/dist/components/date-time-picker.js.map +1 -0
- package/dist/components/dialog.js +207 -0
- package/dist/components/dialog.js.map +1 -0
- package/dist/components/drawer.js +351 -0
- package/dist/components/drawer.js.map +1 -0
- package/dist/components/dropdown-menu.js +356 -0
- package/dist/components/dropdown-menu.js.map +1 -0
- package/dist/components/empty.js +91 -0
- package/dist/components/empty.js.map +1 -0
- package/dist/components/field-context.js +30 -0
- package/dist/components/field-context.js.map +1 -0
- package/dist/components/field.js +216 -0
- package/dist/components/field.js.map +1 -0
- package/dist/components/footer.js +89 -0
- package/dist/components/footer.js.map +1 -0
- package/dist/components/form.js +101 -0
- package/dist/components/form.js.map +1 -0
- package/dist/components/hover-card.js +90 -0
- package/dist/components/hover-card.js.map +1 -0
- package/dist/components/info-tip.js +161 -0
- package/dist/components/info-tip.js.map +1 -0
- package/dist/components/input-group.js +124 -0
- package/dist/components/input-group.js.map +1 -0
- package/dist/components/input-otp.js +120 -0
- package/dist/components/input-otp.js.map +1 -0
- package/dist/components/input.js +26 -0
- package/dist/components/input.js.map +1 -0
- package/dist/components/item.js +167 -0
- package/dist/components/item.js.map +1 -0
- package/dist/components/kbd.js +29 -0
- package/dist/components/kbd.js.map +1 -0
- package/dist/components/label.js +11 -0
- package/dist/components/label.js.map +1 -0
- package/dist/components/logo.js +41 -0
- package/dist/components/logo.js.map +1 -0
- package/dist/components/menubar.js +330 -0
- package/dist/components/menubar.js.map +1 -0
- package/dist/components/native-select.js +62 -0
- package/dist/components/native-select.js.map +1 -0
- package/dist/components/navigation-menu.js +204 -0
- package/dist/components/navigation-menu.js.map +1 -0
- package/dist/components/pagination.js +138 -0
- package/dist/components/pagination.js.map +1 -0
- package/dist/components/popover.js +104 -0
- package/dist/components/popover.js.map +1 -0
- package/dist/components/progress.js +30 -0
- package/dist/components/progress.js.map +1 -0
- package/dist/components/radio-group.js +113 -0
- package/dist/components/radio-group.js.map +1 -0
- package/dist/components/resizable.js +193 -0
- package/dist/components/resizable.js.map +1 -0
- package/dist/components/scroll-area.js +40 -0
- package/dist/components/scroll-area.js.map +1 -0
- package/dist/components/section-descriptor.js +88 -0
- package/dist/components/section-descriptor.js.map +1 -0
- package/dist/components/select-chevron.js +25 -0
- package/dist/components/select-chevron.js.map +1 -0
- package/dist/components/select.js +288 -0
- package/dist/components/select.js.map +1 -0
- package/dist/components/separator.js +31 -0
- package/dist/components/separator.js.map +1 -0
- package/dist/components/sheet.js +200 -0
- package/dist/components/sheet.js.map +1 -0
- package/dist/components/sidebar.js +326 -0
- package/dist/components/sidebar.js.map +1 -0
- package/dist/components/skeleton.js +18 -0
- package/dist/components/skeleton.js.map +1 -0
- package/dist/components/slider.js +138 -0
- package/dist/components/slider.js.map +1 -0
- package/dist/components/sonner.js +319 -0
- package/dist/components/sonner.js.map +1 -0
- package/dist/components/spinner.js +23 -0
- package/dist/components/spinner.js.map +1 -0
- package/dist/components/status-screen.js +145 -0
- package/dist/components/status-screen.js.map +1 -0
- package/dist/components/switch.js +54 -0
- package/dist/components/switch.js.map +1 -0
- package/dist/components/table.js +124 -0
- package/dist/components/table.js.map +1 -0
- package/dist/components/tabs.js +133 -0
- package/dist/components/tabs.js.map +1 -0
- package/dist/components/terminal.js +206 -0
- package/dist/components/terminal.js.map +1 -0
- package/dist/components/textarea.js +22 -0
- package/dist/components/textarea.js.map +1 -0
- package/dist/components/toggle-group.js +105 -0
- package/dist/components/toggle-group.js.map +1 -0
- package/dist/components/toggle.js +53 -0
- package/dist/components/toggle.js.map +1 -0
- package/dist/components/tooltip.js +102 -0
- package/dist/components/tooltip.js.map +1 -0
- package/dist/generated/accent.js +27 -0
- package/dist/generated/accent.js.map +1 -0
- package/dist/generated/accordion.js +13 -0
- package/dist/generated/accordion.js.map +1 -0
- package/dist/generated/alert-dialog.js +15 -0
- package/dist/generated/alert-dialog.js.map +1 -0
- package/dist/generated/alert.js +16 -0
- package/dist/generated/alert.js.map +1 -0
- package/dist/generated/avatar.js +9 -0
- package/dist/generated/avatar.js.map +1 -0
- package/dist/generated/badge.js +13 -0
- package/dist/generated/badge.js.map +1 -0
- package/dist/generated/band.js +39 -0
- package/dist/generated/band.js.map +1 -0
- package/dist/generated/breadcrumb.js +15 -0
- package/dist/generated/breadcrumb.js.map +1 -0
- package/dist/generated/button-group.js +14 -0
- package/dist/generated/button-group.js.map +1 -0
- package/dist/generated/button.js +30 -0
- package/dist/generated/button.js.map +1 -0
- package/dist/generated/calendar.js +29 -0
- package/dist/generated/calendar.js.map +1 -0
- package/dist/generated/card.js +17 -0
- package/dist/generated/card.js.map +1 -0
- package/dist/generated/carousel.js +31 -0
- package/dist/generated/carousel.js.map +1 -0
- package/dist/generated/chart.js +9 -0
- package/dist/generated/chart.js.map +1 -0
- package/dist/generated/checkbox.js +7 -0
- package/dist/generated/checkbox.js.map +1 -0
- package/dist/generated/command.js +27 -0
- package/dist/generated/command.js.map +1 -0
- package/dist/generated/container.js +5 -0
- package/dist/generated/container.js.map +1 -0
- package/dist/generated/context-menu.js +19 -0
- package/dist/generated/context-menu.js.map +1 -0
- package/dist/generated/date-time-picker.js +15 -0
- package/dist/generated/date-time-picker.js.map +1 -0
- package/dist/generated/dialog.js +17 -0
- package/dist/generated/dialog.js.map +1 -0
- package/dist/generated/drawer.js +26 -0
- package/dist/generated/drawer.js.map +1 -0
- package/dist/generated/dropdown-menu.js +21 -0
- package/dist/generated/dropdown-menu.js.map +1 -0
- package/dist/generated/empty.js +20 -0
- package/dist/generated/empty.js.map +1 -0
- package/dist/generated/field.js +33 -0
- package/dist/generated/field.js.map +1 -0
- package/dist/generated/focus.js +5 -0
- package/dist/generated/focus.js.map +1 -0
- package/dist/generated/form.js +11 -0
- package/dist/generated/form.js.map +1 -0
- package/dist/generated/hover-card.js +5 -0
- package/dist/generated/hover-card.js.map +1 -0
- package/dist/generated/input-group.js +29 -0
- package/dist/generated/input-group.js.map +1 -0
- package/dist/generated/input-otp.js +15 -0
- package/dist/generated/input-otp.js.map +1 -0
- package/dist/generated/input.js +11 -0
- package/dist/generated/input.js.map +1 -0
- package/dist/generated/item.js +40 -0
- package/dist/generated/item.js.map +1 -0
- package/dist/generated/kbd.js +7 -0
- package/dist/generated/kbd.js.map +1 -0
- package/dist/generated/label.js +5 -0
- package/dist/generated/label.js.map +1 -0
- package/dist/generated/menubar.js +27 -0
- package/dist/generated/menubar.js.map +1 -0
- package/dist/generated/navigation-menu.js +19 -0
- package/dist/generated/navigation-menu.js.map +1 -0
- package/dist/generated/popover.js +5 -0
- package/dist/generated/popover.js.map +1 -0
- package/dist/generated/progress.js +7 -0
- package/dist/generated/progress.js.map +1 -0
- package/dist/generated/radio-group.js +7 -0
- package/dist/generated/radio-group.js.map +1 -0
- package/dist/generated/resizable.js +11 -0
- package/dist/generated/resizable.js.map +1 -0
- package/dist/generated/scroll-area.js +14 -0
- package/dist/generated/scroll-area.js.map +1 -0
- package/dist/generated/select.js +15 -0
- package/dist/generated/select.js.map +1 -0
- package/dist/generated/separator.js +10 -0
- package/dist/generated/separator.js.map +1 -0
- package/dist/generated/sheet.js +25 -0
- package/dist/generated/sheet.js.map +1 -0
- package/dist/generated/sidebar.js +41 -0
- package/dist/generated/sidebar.js.map +1 -0
- package/dist/generated/skeleton.js +5 -0
- package/dist/generated/skeleton.js.map +1 -0
- package/dist/generated/slider.js +11 -0
- package/dist/generated/slider.js.map +1 -0
- package/dist/generated/sonner.js +30 -0
- package/dist/generated/sonner.js.map +1 -0
- package/dist/generated/switch.js +7 -0
- package/dist/generated/switch.js.map +1 -0
- package/dist/generated/table.js +21 -0
- package/dist/generated/table.js.map +1 -0
- package/dist/generated/tabs.js +11 -0
- package/dist/generated/tabs.js.map +1 -0
- package/dist/generated/terminal.js +70 -0
- package/dist/generated/terminal.js.map +1 -0
- package/dist/generated/textarea.js +11 -0
- package/dist/generated/textarea.js.map +1 -0
- package/dist/generated/toggle.js +18 -0
- package/dist/generated/toggle.js.map +1 -0
- package/dist/generated/tooltip.js +5 -0
- package/dist/generated/tooltip.js.map +1 -0
- package/dist/index.d.ts +141 -34
- package/dist/index.js +73 -8623
- package/dist/lib/cn.js +12 -0
- package/dist/lib/cn.js.map +1 -0
- package/dist/lib/focus.js +5 -0
- package/dist/lib/focus.js.map +1 -0
- package/dist/palette-cli.js +41 -0
- package/dist/palette-cli.js.map +1 -0
- package/dist/palette.d.ts +80 -0
- package/dist/palette.js +25 -0
- package/dist/palette.js.map +1 -0
- package/dist/primitives/dismissable-layer.js +35 -0
- package/dist/primitives/dismissable-layer.js.map +1 -0
- package/dist/primitives/focus-scope.js +58 -0
- package/dist/primitives/focus-scope.js.map +1 -0
- package/dist/primitives/merge-refs.js +13 -0
- package/dist/primitives/merge-refs.js.map +1 -0
- package/dist/primitives/portal.js +19 -0
- package/dist/primitives/portal.js.map +1 -0
- package/dist/primitives/presence.js +45 -0
- package/dist/primitives/presence.js.map +1 -0
- package/dist/primitives/slot.js +39 -0
- package/dist/primitives/slot.js.map +1 -0
- package/dist/primitives/use-controllable-state.js +24 -0
- package/dist/primitives/use-controllable-state.js.map +1 -0
- package/dist/primitives/use-floating.js +128 -0
- package/dist/primitives/use-floating.js.map +1 -0
- package/dist/primitives/use-hover-intent.js +50 -0
- package/dist/primitives/use-hover-intent.js.map +1 -0
- package/dist/primitives/use-roving-focus.js +40 -0
- package/dist/primitives/use-roving-focus.js.map +1 -0
- package/dist/primitives/walk-elements.js +13 -0
- package/dist/primitives/walk-elements.js.map +1 -0
- package/package.json +15 -5
- package/styles/ev.css +73 -0
- package/styles/theme.css +470 -0
- package/styles/tokens.css +129 -90
- package/dist/index.js.map +0 -1
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { cn } from "../lib/cn.js";
|
|
5
|
+
import { useControllableState } from "../primitives/use-controllable-state.js";
|
|
6
|
+
import {
|
|
7
|
+
ACCORDION_CONTENT,
|
|
8
|
+
ACCORDION_CONTENT_INNER,
|
|
9
|
+
ACCORDION_HEADER,
|
|
10
|
+
ACCORDION_ITEM,
|
|
11
|
+
ACCORDION_TRIGGER
|
|
12
|
+
} from "../generated/accordion.js";
|
|
13
|
+
const AccordionContext = React.createContext(null);
|
|
14
|
+
function useAccordion() {
|
|
15
|
+
const ctx = React.useContext(AccordionContext);
|
|
16
|
+
if (!ctx) throw new Error("Accordion parts must be used within <Accordion>");
|
|
17
|
+
return ctx;
|
|
18
|
+
}
|
|
19
|
+
const ItemContext = React.createContext(null);
|
|
20
|
+
function useItemValue() {
|
|
21
|
+
const value = React.useContext(ItemContext);
|
|
22
|
+
if (value === null)
|
|
23
|
+
throw new Error("AccordionTrigger/Content must be used within <AccordionItem>");
|
|
24
|
+
return value;
|
|
25
|
+
}
|
|
26
|
+
function Accordion({
|
|
27
|
+
type = "single",
|
|
28
|
+
collapsible = false,
|
|
29
|
+
value,
|
|
30
|
+
defaultValue = [],
|
|
31
|
+
onValueChange,
|
|
32
|
+
children,
|
|
33
|
+
...props
|
|
34
|
+
}) {
|
|
35
|
+
const [open, setOpen] = useControllableState({
|
|
36
|
+
...value !== void 0 ? { value } : {},
|
|
37
|
+
defaultValue,
|
|
38
|
+
...onValueChange ? { onChange: onValueChange } : {}
|
|
39
|
+
});
|
|
40
|
+
const isOpen = (v) => open.includes(v);
|
|
41
|
+
const toggle = (v) => {
|
|
42
|
+
if (type === "multiple") {
|
|
43
|
+
setOpen(open.includes(v) ? open.filter((x) => x !== v) : [...open, v]);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
if (open.includes(v)) setOpen(collapsible ? [] : open);
|
|
47
|
+
else setOpen([v]);
|
|
48
|
+
};
|
|
49
|
+
return /* @__PURE__ */ jsx(AccordionContext.Provider, { value: { isOpen, toggle }, children: /* @__PURE__ */ jsx("div", { "data-slot": "accordion", ...props, children }) });
|
|
50
|
+
}
|
|
51
|
+
function AccordionItem({
|
|
52
|
+
className,
|
|
53
|
+
value,
|
|
54
|
+
children,
|
|
55
|
+
...props
|
|
56
|
+
}) {
|
|
57
|
+
return /* @__PURE__ */ jsx(ItemContext.Provider, { value, children: /* @__PURE__ */ jsx(
|
|
58
|
+
"div",
|
|
59
|
+
{
|
|
60
|
+
"data-slot": "accordion-item",
|
|
61
|
+
className: cn(ACCORDION_ITEM, className),
|
|
62
|
+
...props,
|
|
63
|
+
children
|
|
64
|
+
}
|
|
65
|
+
) });
|
|
66
|
+
}
|
|
67
|
+
function AccordionTrigger({
|
|
68
|
+
className,
|
|
69
|
+
children,
|
|
70
|
+
onClick,
|
|
71
|
+
...props
|
|
72
|
+
}) {
|
|
73
|
+
const { isOpen, toggle } = useAccordion();
|
|
74
|
+
const value = useItemValue();
|
|
75
|
+
const open = isOpen(value);
|
|
76
|
+
return /* @__PURE__ */ jsx("h3", { className: ACCORDION_HEADER, "data-slot": "accordion-header", children: /* @__PURE__ */ jsxs(
|
|
77
|
+
"button",
|
|
78
|
+
{
|
|
79
|
+
type: "button",
|
|
80
|
+
"data-slot": "accordion-trigger",
|
|
81
|
+
"data-state": open ? "open" : "closed",
|
|
82
|
+
"aria-expanded": open,
|
|
83
|
+
className: cn(ACCORDION_TRIGGER, className),
|
|
84
|
+
onClick: (e) => {
|
|
85
|
+
onClick?.(e);
|
|
86
|
+
toggle(value);
|
|
87
|
+
},
|
|
88
|
+
...props,
|
|
89
|
+
children: [
|
|
90
|
+
children,
|
|
91
|
+
/* @__PURE__ */ jsx(
|
|
92
|
+
"svg",
|
|
93
|
+
{
|
|
94
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
95
|
+
width: "24",
|
|
96
|
+
height: "24",
|
|
97
|
+
viewBox: "0 0 24 24",
|
|
98
|
+
fill: "none",
|
|
99
|
+
stroke: "currentColor",
|
|
100
|
+
strokeWidth: "2",
|
|
101
|
+
strokeLinecap: "round",
|
|
102
|
+
strokeLinejoin: "round",
|
|
103
|
+
className: "text-ink-soft pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200",
|
|
104
|
+
children: /* @__PURE__ */ jsx("path", { d: "m6 9 6 6 6-6" })
|
|
105
|
+
}
|
|
106
|
+
)
|
|
107
|
+
]
|
|
108
|
+
}
|
|
109
|
+
) });
|
|
110
|
+
}
|
|
111
|
+
function AccordionContent({
|
|
112
|
+
className,
|
|
113
|
+
children,
|
|
114
|
+
...props
|
|
115
|
+
}) {
|
|
116
|
+
const { isOpen } = useAccordion();
|
|
117
|
+
const value = useItemValue();
|
|
118
|
+
if (!isOpen(value)) return null;
|
|
119
|
+
return /* @__PURE__ */ jsx(
|
|
120
|
+
"div",
|
|
121
|
+
{
|
|
122
|
+
"data-slot": "accordion-content",
|
|
123
|
+
"data-state": "open",
|
|
124
|
+
className: ACCORDION_CONTENT,
|
|
125
|
+
...props,
|
|
126
|
+
children: /* @__PURE__ */ jsx("div", { className: cn(ACCORDION_CONTENT_INNER, className), children })
|
|
127
|
+
}
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
export {
|
|
131
|
+
Accordion,
|
|
132
|
+
AccordionContent,
|
|
133
|
+
AccordionItem,
|
|
134
|
+
AccordionTrigger
|
|
135
|
+
};
|
|
136
|
+
//# sourceMappingURL=accordion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/accordion.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport {\n ACCORDION_CONTENT,\n ACCORDION_CONTENT_INNER,\n ACCORDION_HEADER,\n ACCORDION_ITEM,\n ACCORDION_TRIGGER,\n} from \"../generated/accordion\";\n\ntype AccordionType = \"single\" | \"multiple\";\n\ninterface AccordionContextValue {\n isOpen: (value: string) => boolean;\n toggle: (value: string) => void;\n}\n\nconst AccordionContext = React.createContext<AccordionContextValue | null>(null);\n\nfunction useAccordion(): AccordionContextValue {\n const ctx = React.useContext(AccordionContext);\n if (!ctx) throw new Error(\"Accordion parts must be used within <Accordion>\");\n return ctx;\n}\n\nconst ItemContext = React.createContext<string | null>(null);\n\nfunction useItemValue(): string {\n const value = React.useContext(ItemContext);\n if (value === null)\n throw new Error(\"AccordionTrigger/Content must be used within <AccordionItem>\");\n return value;\n}\n\nexport interface AccordionProps\n extends Omit<React.ComponentProps<\"div\">, \"onChange\"> {\n type?: AccordionType;\n collapsible?: boolean;\n value?: string[];\n defaultValue?: string[];\n onValueChange?: (value: string[]) => void;\n}\n\nexport function Accordion({\n type = \"single\",\n collapsible = false,\n value,\n defaultValue = [],\n onValueChange,\n children,\n ...props\n}: AccordionProps) {\n const [open, setOpen] = useControllableState<string[]>({\n ...(value !== undefined ? { value } : {}),\n defaultValue,\n ...(onValueChange ? { onChange: onValueChange } : {}),\n });\n\n const isOpen = (v: string) => open.includes(v);\n const toggle = (v: string) => {\n if (type === \"multiple\") {\n setOpen(open.includes(v) ? open.filter((x) => x !== v) : [...open, v]);\n return;\n }\n if (open.includes(v)) setOpen(collapsible ? [] : open);\n else setOpen([v]);\n };\n\n return (\n <AccordionContext.Provider value={{ isOpen, toggle }}>\n <div data-slot=\"accordion\" {...props}>\n {children}\n </div>\n </AccordionContext.Provider>\n );\n}\n\nexport interface AccordionItemProps extends React.ComponentProps<\"div\"> {\n value: string;\n}\n\nexport function AccordionItem({\n className,\n value,\n children,\n ...props\n}: AccordionItemProps) {\n return (\n <ItemContext.Provider value={value}>\n <div\n data-slot=\"accordion-item\"\n className={cn(ACCORDION_ITEM, className)}\n {...props}\n >\n {children}\n </div>\n </ItemContext.Provider>\n );\n}\n\nexport function AccordionTrigger({\n className,\n children,\n onClick,\n ...props\n}: React.ComponentProps<\"button\">) {\n const { isOpen, toggle } = useAccordion();\n const value = useItemValue();\n const open = isOpen(value);\n return (\n <h3 className={ACCORDION_HEADER} data-slot=\"accordion-header\">\n <button\n type=\"button\"\n data-slot=\"accordion-trigger\"\n data-state={open ? \"open\" : \"closed\"}\n aria-expanded={open}\n className={cn(ACCORDION_TRIGGER, className)}\n onClick={(e) => {\n onClick?.(e);\n toggle(value);\n }}\n {...props}\n >\n {children}\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"text-ink-soft pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n </h3>\n );\n}\n\nexport function AccordionContent({\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\">) {\n const { isOpen } = useAccordion();\n const value = useItemValue();\n if (!isOpen(value)) return null;\n return (\n <div\n data-slot=\"accordion-content\"\n data-state=\"open\"\n className={ACCORDION_CONTENT}\n {...props}\n >\n <div className={cn(ACCORDION_CONTENT_INNER, className)}>{children}</div>\n </div>\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { cn } from "../lib/cn.js";
|
|
5
|
+
import { buttonVariants } from "./button.js";
|
|
6
|
+
import { useControllableState } from "../primitives/use-controllable-state.js";
|
|
7
|
+
import { useDismissableLayer } from "../primitives/dismissable-layer.js";
|
|
8
|
+
import { useFocusScope } from "../primitives/focus-scope.js";
|
|
9
|
+
import { usePresence } from "../primitives/presence.js";
|
|
10
|
+
import { mergeRefs } from "../primitives/merge-refs.js";
|
|
11
|
+
import { Portal } from "../primitives/portal.js";
|
|
12
|
+
import { Slot } from "../primitives/slot.js";
|
|
13
|
+
import {
|
|
14
|
+
ALERT_DIALOG_CONTENT,
|
|
15
|
+
ALERT_DIALOG_DESCRIPTION,
|
|
16
|
+
ALERT_DIALOG_FOOTER,
|
|
17
|
+
ALERT_DIALOG_HEADER,
|
|
18
|
+
ALERT_DIALOG_OVERLAY,
|
|
19
|
+
ALERT_DIALOG_TITLE
|
|
20
|
+
} from "../generated/alert-dialog.js";
|
|
21
|
+
const AlertDialogContext = React.createContext(null);
|
|
22
|
+
function useAlertDialog() {
|
|
23
|
+
const ctx = React.useContext(AlertDialogContext);
|
|
24
|
+
if (!ctx) throw new Error("AlertDialog parts must be used within <AlertDialog>");
|
|
25
|
+
return ctx;
|
|
26
|
+
}
|
|
27
|
+
function AlertDialog({ open, defaultOpen = false, onOpenChange, children }) {
|
|
28
|
+
const [isOpen, setOpen] = useControllableState({
|
|
29
|
+
...open !== void 0 ? { value: open } : {},
|
|
30
|
+
defaultValue: defaultOpen,
|
|
31
|
+
...onOpenChange ? { onChange: onOpenChange } : {}
|
|
32
|
+
});
|
|
33
|
+
const triggerRef = React.useRef(null);
|
|
34
|
+
return /* @__PURE__ */ jsx(AlertDialogContext.Provider, { value: { open: isOpen, setOpen, triggerRef }, children });
|
|
35
|
+
}
|
|
36
|
+
function AlertDialogTrigger({ asChild = false, onClick, ...props }) {
|
|
37
|
+
const { open, setOpen, triggerRef } = useAlertDialog();
|
|
38
|
+
const Comp = asChild ? Slot : "button";
|
|
39
|
+
return /* @__PURE__ */ jsx(
|
|
40
|
+
Comp,
|
|
41
|
+
{
|
|
42
|
+
"data-slot": "alert-dialog-trigger",
|
|
43
|
+
"aria-expanded": open,
|
|
44
|
+
ref: triggerRef,
|
|
45
|
+
onClick: (e) => {
|
|
46
|
+
onClick?.(e);
|
|
47
|
+
setOpen(true);
|
|
48
|
+
},
|
|
49
|
+
...props
|
|
50
|
+
}
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
function AlertDialogOverlay({ className, ...props }) {
|
|
54
|
+
const { open, setOpen } = useAlertDialog();
|
|
55
|
+
return /* @__PURE__ */ jsx(
|
|
56
|
+
"div",
|
|
57
|
+
{
|
|
58
|
+
"data-slot": "alert-dialog-overlay",
|
|
59
|
+
"data-state": open ? "open" : "closed",
|
|
60
|
+
onClick: () => setOpen(false),
|
|
61
|
+
className: cn(ALERT_DIALOG_OVERLAY, className),
|
|
62
|
+
...props
|
|
63
|
+
}
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
function AlertDialogContent({ className, children, ...props }) {
|
|
67
|
+
const { open, setOpen, triggerRef } = useAlertDialog();
|
|
68
|
+
const { isPresent, ref: presRef } = usePresence(open);
|
|
69
|
+
const focusRef = useFocusScope(open);
|
|
70
|
+
const dismissRef = useDismissableLayer({
|
|
71
|
+
enabled: open,
|
|
72
|
+
onDismiss: () => setOpen(false),
|
|
73
|
+
exclude: [triggerRef]
|
|
74
|
+
});
|
|
75
|
+
if (!isPresent) return null;
|
|
76
|
+
return /* @__PURE__ */ jsxs(Portal, { children: [
|
|
77
|
+
/* @__PURE__ */ jsx(AlertDialogOverlay, {}),
|
|
78
|
+
/* @__PURE__ */ jsx(
|
|
79
|
+
"div",
|
|
80
|
+
{
|
|
81
|
+
"data-slot": "alert-dialog-content",
|
|
82
|
+
role: "alertdialog",
|
|
83
|
+
"aria-modal": "true",
|
|
84
|
+
"data-state": open ? "open" : "closed",
|
|
85
|
+
ref: mergeRefs(focusRef, dismissRef, presRef),
|
|
86
|
+
className: cn(ALERT_DIALOG_CONTENT, className),
|
|
87
|
+
...props,
|
|
88
|
+
children
|
|
89
|
+
}
|
|
90
|
+
)
|
|
91
|
+
] });
|
|
92
|
+
}
|
|
93
|
+
function AlertDialogHeader({ className, ...props }) {
|
|
94
|
+
return /* @__PURE__ */ jsx(
|
|
95
|
+
"div",
|
|
96
|
+
{
|
|
97
|
+
"data-slot": "alert-dialog-header",
|
|
98
|
+
className: cn(ALERT_DIALOG_HEADER, className),
|
|
99
|
+
...props
|
|
100
|
+
}
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
function AlertDialogFooter({ className, ...props }) {
|
|
104
|
+
return /* @__PURE__ */ jsx(
|
|
105
|
+
"div",
|
|
106
|
+
{
|
|
107
|
+
"data-slot": "alert-dialog-footer",
|
|
108
|
+
className: cn(ALERT_DIALOG_FOOTER, className),
|
|
109
|
+
...props
|
|
110
|
+
}
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
function AlertDialogTitle({ className, ...props }) {
|
|
114
|
+
return /* @__PURE__ */ jsx(
|
|
115
|
+
"h2",
|
|
116
|
+
{
|
|
117
|
+
"data-slot": "alert-dialog-title",
|
|
118
|
+
className: cn(ALERT_DIALOG_TITLE, className),
|
|
119
|
+
...props
|
|
120
|
+
}
|
|
121
|
+
);
|
|
122
|
+
}
|
|
123
|
+
function AlertDialogDescription({ className, ...props }) {
|
|
124
|
+
return /* @__PURE__ */ jsx(
|
|
125
|
+
"p",
|
|
126
|
+
{
|
|
127
|
+
"data-slot": "alert-dialog-description",
|
|
128
|
+
className: cn(ALERT_DIALOG_DESCRIPTION, className),
|
|
129
|
+
...props
|
|
130
|
+
}
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
function AlertDialogAction({ className, onClick, ...props }) {
|
|
134
|
+
const { setOpen } = useAlertDialog();
|
|
135
|
+
return /* @__PURE__ */ jsx(
|
|
136
|
+
"button",
|
|
137
|
+
{
|
|
138
|
+
"data-slot": "alert-dialog-action",
|
|
139
|
+
className: cn(buttonVariants(), className),
|
|
140
|
+
onClick: (e) => {
|
|
141
|
+
onClick?.(e);
|
|
142
|
+
setOpen(false);
|
|
143
|
+
},
|
|
144
|
+
...props
|
|
145
|
+
}
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
function AlertDialogCancel({ className, onClick, ...props }) {
|
|
149
|
+
const { setOpen } = useAlertDialog();
|
|
150
|
+
return /* @__PURE__ */ jsx(
|
|
151
|
+
"button",
|
|
152
|
+
{
|
|
153
|
+
"data-slot": "alert-dialog-cancel",
|
|
154
|
+
className: cn(buttonVariants({ variant: "outline" }), className),
|
|
155
|
+
onClick: (e) => {
|
|
156
|
+
onClick?.(e);
|
|
157
|
+
setOpen(false);
|
|
158
|
+
},
|
|
159
|
+
...props
|
|
160
|
+
}
|
|
161
|
+
);
|
|
162
|
+
}
|
|
163
|
+
export {
|
|
164
|
+
AlertDialog,
|
|
165
|
+
AlertDialogAction,
|
|
166
|
+
AlertDialogCancel,
|
|
167
|
+
AlertDialogContent,
|
|
168
|
+
AlertDialogDescription,
|
|
169
|
+
AlertDialogFooter,
|
|
170
|
+
AlertDialogHeader,
|
|
171
|
+
AlertDialogOverlay,
|
|
172
|
+
AlertDialogTitle,
|
|
173
|
+
AlertDialogTrigger
|
|
174
|
+
};
|
|
175
|
+
//# sourceMappingURL=alert-dialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/alert-dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { buttonVariants } from \"./button\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport { useDismissableLayer } from \"../primitives/dismissable-layer\";\nimport { useFocusScope } from \"../primitives/focus-scope\";\nimport { usePresence } from \"../primitives/presence\";\nimport { mergeRefs } from \"../primitives/merge-refs\";\nimport { Portal } from \"../primitives/portal\";\nimport { Slot } from \"../primitives/slot\";\nimport {\n ALERT_DIALOG_CONTENT,\n ALERT_DIALOG_DESCRIPTION,\n ALERT_DIALOG_FOOTER,\n ALERT_DIALOG_HEADER,\n ALERT_DIALOG_OVERLAY,\n ALERT_DIALOG_TITLE,\n} from \"../generated/alert-dialog\";\n\ninterface AlertDialogContextValue {\n open: boolean;\n setOpen: (next: boolean) => void;\n triggerRef: React.RefObject<HTMLElement | null>;\n}\n\nconst AlertDialogContext = React.createContext<AlertDialogContextValue | null>(null);\n\nfunction useAlertDialog(): AlertDialogContextValue {\n const ctx = React.useContext(AlertDialogContext);\n if (!ctx) throw new Error(\"AlertDialog parts must be used within <AlertDialog>\");\n return ctx;\n}\n\nexport interface AlertDialogProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n}\n\nexport function AlertDialog({ open, defaultOpen = false, onOpenChange, children }: AlertDialogProps) {\n const [isOpen, setOpen] = useControllableState<boolean>({\n ...(open !== undefined ? { value: open } : {}),\n defaultValue: defaultOpen,\n ...(onOpenChange ? { onChange: onOpenChange } : {}),\n });\n const triggerRef = React.useRef<HTMLElement | null>(null);\n return (\n <AlertDialogContext.Provider value={{ open: isOpen, setOpen, triggerRef }}>\n {children}\n </AlertDialogContext.Provider>\n );\n}\n\nexport interface AlertDialogTriggerProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n}\n\nexport function AlertDialogTrigger({ asChild = false, onClick, ...props }: AlertDialogTriggerProps) {\n const { open, setOpen, triggerRef } = useAlertDialog();\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n data-slot=\"alert-dialog-trigger\"\n aria-expanded={open}\n ref={triggerRef as React.Ref<HTMLButtonElement>}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n setOpen(true);\n }}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport interface AlertDialogOverlayProps extends React.ComponentProps<\"div\"> {}\n\nexport function AlertDialogOverlay({ className, ...props }: AlertDialogOverlayProps) {\n const { open, setOpen } = useAlertDialog();\n return (\n <div\n data-slot=\"alert-dialog-overlay\"\n data-state={open ? \"open\" : \"closed\"}\n onClick={() => setOpen(false)}\n className={cn(ALERT_DIALOG_OVERLAY, className)}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport interface AlertDialogContentProps extends React.ComponentProps<\"div\"> {}\n\nexport function AlertDialogContent({ className, children, ...props }: AlertDialogContentProps) {\n const { open, setOpen, triggerRef } = useAlertDialog();\n const { isPresent, ref: presRef } = usePresence(open);\n const focusRef = useFocusScope(open);\n const dismissRef = useDismissableLayer({\n enabled: open,\n onDismiss: () => setOpen(false),\n exclude: [triggerRef],\n });\n if (!isPresent) return null;\n return (\n <Portal>\n <AlertDialogOverlay />\n <div\n data-slot=\"alert-dialog-content\"\n role=\"alertdialog\"\n aria-modal=\"true\"\n data-state={open ? \"open\" : \"closed\"}\n ref={mergeRefs(focusRef, dismissRef, presRef as React.Ref<HTMLDivElement>)}\n className={cn(ALERT_DIALOG_CONTENT, className)}\n {...(props as Record<string, unknown>)}\n >\n {children}\n </div>\n </Portal>\n );\n}\n\nexport function AlertDialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(ALERT_DIALOG_HEADER, className)}\n {...props}\n />\n );\n}\n\nexport function AlertDialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(ALERT_DIALOG_FOOTER, className)}\n {...props}\n />\n );\n}\n\nexport function AlertDialogTitle({ className, ...props }: React.ComponentProps<\"h2\">) {\n return (\n <h2\n data-slot=\"alert-dialog-title\"\n className={cn(ALERT_DIALOG_TITLE, className)}\n {...props}\n />\n );\n}\n\nexport function AlertDialogDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"alert-dialog-description\"\n className={cn(ALERT_DIALOG_DESCRIPTION, className)}\n {...props}\n />\n );\n}\n\nexport interface AlertDialogActionProps extends React.ComponentProps<\"button\"> {}\n\nexport function AlertDialogAction({ className, onClick, ...props }: AlertDialogActionProps) {\n const { setOpen } = useAlertDialog();\n return (\n <button\n data-slot=\"alert-dialog-action\"\n className={cn(buttonVariants(), className)}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n setOpen(false);\n }}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport interface AlertDialogCancelProps extends React.ComponentProps<\"button\"> {}\n\nexport function AlertDialogCancel({ className, onClick, ...props }: AlertDialogCancelProps) {\n const { setOpen } = useAlertDialog();\n return (\n <button\n data-slot=\"alert-dialog-cancel\"\n className={cn(buttonVariants({ variant: \"outline\" }), className)}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n setOpen(false);\n }}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { cn } from "../lib/cn.js";
|
|
4
|
+
import {
|
|
5
|
+
ALERT_BASE,
|
|
6
|
+
ALERT_DESCRIPTION,
|
|
7
|
+
ALERT_TITLE,
|
|
8
|
+
alertVariants
|
|
9
|
+
} from "../generated/alert.js";
|
|
10
|
+
function Alert({ className, variant = "neutral", ...props }) {
|
|
11
|
+
return /* @__PURE__ */ jsx(
|
|
12
|
+
"div",
|
|
13
|
+
{
|
|
14
|
+
"data-slot": "alert",
|
|
15
|
+
role: "alert",
|
|
16
|
+
className: cn(ALERT_BASE, alertVariants[variant], className),
|
|
17
|
+
...props
|
|
18
|
+
}
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
function AlertTitle({ className, ...props }) {
|
|
22
|
+
return /* @__PURE__ */ jsx(
|
|
23
|
+
"div",
|
|
24
|
+
{
|
|
25
|
+
"data-slot": "alert-title",
|
|
26
|
+
className: cn(ALERT_TITLE, className),
|
|
27
|
+
...props
|
|
28
|
+
}
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
function AlertDescription({
|
|
32
|
+
className,
|
|
33
|
+
...props
|
|
34
|
+
}) {
|
|
35
|
+
return /* @__PURE__ */ jsx(
|
|
36
|
+
"div",
|
|
37
|
+
{
|
|
38
|
+
"data-slot": "alert-description",
|
|
39
|
+
className: cn(ALERT_DESCRIPTION, className),
|
|
40
|
+
...props
|
|
41
|
+
}
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
export {
|
|
45
|
+
Alert,
|
|
46
|
+
AlertDescription,
|
|
47
|
+
AlertTitle
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=alert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/alert.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport {\n ALERT_BASE,\n ALERT_DESCRIPTION,\n ALERT_TITLE,\n alertVariants,\n type AlertVariant,\n} from \"../generated/alert\";\n\nexport type { AlertVariant };\n\nexport interface AlertProps extends React.ComponentProps<\"div\"> {\n variant?: AlertVariant;\n}\n\nexport function Alert({ className, variant = \"neutral\", ...props }: AlertProps) {\n return (\n <div\n data-slot=\"alert\"\n role=\"alert\"\n className={cn(ALERT_BASE, alertVariants[variant], className)}\n {...props}\n />\n );\n}\n\nexport function AlertTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn(ALERT_TITLE, className)}\n {...props}\n />\n );\n}\n\nexport function AlertDescription({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(ALERT_DESCRIPTION, className)}\n {...props}\n />\n );\n}\n"],"mappings":"AAkBI;AAlBJ,YAAY,WAAW;AACvB,SAAS,UAAU;AACnB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AAQA,SAAS,MAAM,EAAE,WAAW,UAAU,WAAW,GAAG,MAAM,GAAe;AAC9E,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,MAAK;AAAA,MACL,WAAW,GAAG,YAAY,cAAc,OAAO,GAAG,SAAS;AAAA,MAC1D,GAAG;AAAA;AAAA,EACN;AAEJ;AAEO,SAAS,WAAW,EAAE,WAAW,GAAG,MAAM,GAAgC;AAC/E,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,aAAa,SAAS;AAAA,MACnC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA,GAAG;AACL,GAAgC;AAC9B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,mBAAmB,SAAS;AAAA,MACzC,GAAG;AAAA;AAAA,EACN;AAEJ;","names":[]}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { cn } from "../lib/cn.js";
|
|
5
|
+
import { AVATAR, AVATAR_IMAGE, AVATAR_FALLBACK } from "../generated/avatar.js";
|
|
6
|
+
function Avatar({ className, ...props }) {
|
|
7
|
+
return /* @__PURE__ */ jsx(
|
|
8
|
+
"div",
|
|
9
|
+
{
|
|
10
|
+
"data-slot": "avatar",
|
|
11
|
+
className: cn(AVATAR, className),
|
|
12
|
+
...props
|
|
13
|
+
}
|
|
14
|
+
);
|
|
15
|
+
}
|
|
16
|
+
function AvatarImage({
|
|
17
|
+
className,
|
|
18
|
+
onError,
|
|
19
|
+
...props
|
|
20
|
+
}) {
|
|
21
|
+
const [errored, setErrored] = React.useState(false);
|
|
22
|
+
if (errored) return null;
|
|
23
|
+
return /* @__PURE__ */ jsx(
|
|
24
|
+
"img",
|
|
25
|
+
{
|
|
26
|
+
"data-slot": "avatar-image",
|
|
27
|
+
className: cn(AVATAR_IMAGE, className),
|
|
28
|
+
onError: (e) => {
|
|
29
|
+
onError?.(e);
|
|
30
|
+
setErrored(true);
|
|
31
|
+
},
|
|
32
|
+
...props
|
|
33
|
+
}
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
function AvatarFallback({
|
|
37
|
+
className,
|
|
38
|
+
...props
|
|
39
|
+
}) {
|
|
40
|
+
return /* @__PURE__ */ jsx(
|
|
41
|
+
"div",
|
|
42
|
+
{
|
|
43
|
+
"data-slot": "avatar-fallback",
|
|
44
|
+
className: cn(AVATAR_FALLBACK, className),
|
|
45
|
+
...props
|
|
46
|
+
}
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
export {
|
|
50
|
+
Avatar,
|
|
51
|
+
AvatarFallback,
|
|
52
|
+
AvatarImage
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=avatar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/avatar.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { AVATAR, AVATAR_IMAGE, AVATAR_FALLBACK } from \"../generated/avatar\";\n\nexport function Avatar({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"avatar\"\n className={cn(AVATAR, className)}\n {...props}\n />\n );\n}\n\nexport function AvatarImage({\n className,\n onError,\n ...props\n}: React.ComponentProps<\"img\">) {\n const [errored, setErrored] = React.useState(false);\n if (errored) return null;\n return (\n <img\n data-slot=\"avatar-image\"\n className={cn(AVATAR_IMAGE, className)}\n onError={(e) => {\n onError?.(e);\n setErrored(true);\n }}\n {...props}\n />\n );\n}\n\nexport function AvatarFallback({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"avatar-fallback\"\n className={cn(AVATAR_FALLBACK, className)}\n {...props}\n />\n );\n}\n"],"mappings":";AAQI;AANJ,YAAY,WAAW;AACvB,SAAS,UAAU;AACnB,SAAS,QAAQ,cAAc,uBAAuB;AAE/C,SAAS,OAAO,EAAE,WAAW,GAAG,MAAM,GAAgC;AAC3E,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,QAAQ,SAAS;AAAA,MAC9B,GAAG;AAAA;AAAA,EACN;AAEJ;AAEO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAgC;AAC9B,QAAM,CAAC,SAAS,UAAU,IAAI,MAAM,SAAS,KAAK;AAClD,MAAI,QAAS,QAAO;AACpB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,cAAc,SAAS;AAAA,MACrC,SAAS,CAAC,MAAM;AACd,kBAAU,CAAC;AACX,mBAAW,IAAI;AAAA,MACjB;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEO,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA,GAAG;AACL,GAAgC;AAC9B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,iBAAiB,SAAS;AAAA,MACvC,GAAG;AAAA;AAAA,EACN;AAEJ;","names":[]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { cn } from "../lib/cn.js";
|
|
4
|
+
import { Slot } from "../primitives/slot.js";
|
|
5
|
+
import { BADGE_BASE, badgeVariants } from "../generated/badge.js";
|
|
6
|
+
function Badge({
|
|
7
|
+
className,
|
|
8
|
+
variant = "primary",
|
|
9
|
+
asChild = false,
|
|
10
|
+
...props
|
|
11
|
+
}) {
|
|
12
|
+
const Comp = asChild ? Slot : "span";
|
|
13
|
+
return /* @__PURE__ */ jsx(
|
|
14
|
+
Comp,
|
|
15
|
+
{
|
|
16
|
+
"data-slot": "badge",
|
|
17
|
+
className: cn(BADGE_BASE, badgeVariants[variant], className),
|
|
18
|
+
...props
|
|
19
|
+
}
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
export {
|
|
23
|
+
Badge
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=badge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/badge.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Slot } from \"../primitives/slot\";\nimport { BADGE_BASE, badgeVariants, type BadgeVariant } from \"../generated/badge\";\n\nexport type { BadgeVariant };\n\nexport interface BadgeProps extends React.ComponentProps<\"span\"> {\n variant?: BadgeVariant;\n asChild?: boolean;\n}\n\nexport function Badge({\n className,\n variant = \"primary\",\n asChild = false,\n ...props\n}: BadgeProps) {\n const Comp = asChild ? Slot : \"span\";\n return (\n <Comp\n data-slot=\"badge\"\n className={cn(BADGE_BASE, badgeVariants[variant], className)}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n"],"mappings":"AAoBI;AApBJ,YAAY,WAAW;AACvB,SAAS,UAAU;AACnB,SAAS,YAAY;AACrB,SAAS,YAAY,qBAAwC;AAStD,SAAS,MAAM;AAAA,EACpB;AAAA,EACA,UAAU;AAAA,EACV,UAAU;AAAA,EACV,GAAG;AACL,GAAe;AACb,QAAM,OAAO,UAAU,OAAO;AAC9B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,YAAY,cAAc,OAAO,GAAG,SAAS;AAAA,MAC1D,GAAI;AAAA;AAAA,EACP;AAEJ;","names":[]}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { cn } from "../lib/cn.js";
|
|
4
|
+
import {
|
|
5
|
+
CHECK,
|
|
6
|
+
DISPLAY_BASE,
|
|
7
|
+
EYEBROW,
|
|
8
|
+
LEDE,
|
|
9
|
+
PROSE,
|
|
10
|
+
polarityClasses,
|
|
11
|
+
SECTION_BASE,
|
|
12
|
+
SECTION_HEAD,
|
|
13
|
+
SECTION_PY,
|
|
14
|
+
SECTION_PY_TIGHT,
|
|
15
|
+
STAT,
|
|
16
|
+
STAT_FIGURE,
|
|
17
|
+
STAT_LABEL,
|
|
18
|
+
surfaceClasses
|
|
19
|
+
} from "../generated/band.js";
|
|
20
|
+
function Section({
|
|
21
|
+
polarity,
|
|
22
|
+
surface = "background",
|
|
23
|
+
tight = false,
|
|
24
|
+
className,
|
|
25
|
+
...props
|
|
26
|
+
}) {
|
|
27
|
+
return /* @__PURE__ */ jsx(
|
|
28
|
+
"section",
|
|
29
|
+
{
|
|
30
|
+
"data-slot": "section",
|
|
31
|
+
className: cn(
|
|
32
|
+
// conflict-free by construction — a gutter, a scope class, a plane and a
|
|
33
|
+
// rhythm — so only the caller override is worth a merge
|
|
34
|
+
`${SECTION_BASE} ${polarity ? polarityClasses[polarity] : ""} ${surfaceClasses[surface]} ${tight ? SECTION_PY_TIGHT : SECTION_PY}`,
|
|
35
|
+
className
|
|
36
|
+
),
|
|
37
|
+
...props
|
|
38
|
+
}
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
function Eyebrow({ className, ...props }) {
|
|
42
|
+
return /* @__PURE__ */ jsx("p", { "data-slot": "eyebrow", className: cn(EYEBROW, className), ...props });
|
|
43
|
+
}
|
|
44
|
+
function Display({ className, ...props }) {
|
|
45
|
+
return /* @__PURE__ */ jsx("h2", { "data-slot": "display", className: cn(DISPLAY_BASE, className), ...props });
|
|
46
|
+
}
|
|
47
|
+
function SectionHead({ eyebrow, title, lede, className, ...props }) {
|
|
48
|
+
return /* @__PURE__ */ jsxs("div", { "data-slot": "section-head", className: cn(SECTION_HEAD, className), ...props, children: [
|
|
49
|
+
/* @__PURE__ */ jsx(Eyebrow, { children: eyebrow }),
|
|
50
|
+
/* @__PURE__ */ jsx(Display, { children: title }),
|
|
51
|
+
lede && /* @__PURE__ */ jsx("p", { className: LEDE, children: lede })
|
|
52
|
+
] });
|
|
53
|
+
}
|
|
54
|
+
function Prose({ className, ...props }) {
|
|
55
|
+
return /* @__PURE__ */ jsx("p", { "data-slot": "prose", className: cn(PROSE, className), ...props });
|
|
56
|
+
}
|
|
57
|
+
function Stat({ figure, label, className, ...props }) {
|
|
58
|
+
return /* @__PURE__ */ jsxs("span", { "data-slot": "stat", className: cn(STAT, className), ...props, children: [
|
|
59
|
+
/* @__PURE__ */ jsx("span", { className: STAT_FIGURE, children: figure }),
|
|
60
|
+
/* @__PURE__ */ jsx("span", { className: STAT_LABEL, children: label })
|
|
61
|
+
] });
|
|
62
|
+
}
|
|
63
|
+
function Check({ className, ...props }) {
|
|
64
|
+
return /* @__PURE__ */ jsx("span", { "data-slot": "check", "aria-hidden": true, className: cn(CHECK, className), ...props, children: "\u2713" });
|
|
65
|
+
}
|
|
66
|
+
export {
|
|
67
|
+
Check,
|
|
68
|
+
Display,
|
|
69
|
+
Eyebrow,
|
|
70
|
+
Prose,
|
|
71
|
+
Section,
|
|
72
|
+
SectionHead,
|
|
73
|
+
Stat
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=band.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/band.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport {\n CHECK,\n DISPLAY_BASE,\n EYEBROW,\n LEDE,\n PROSE,\n polarityClasses,\n SECTION_BASE,\n SECTION_HEAD,\n SECTION_PY,\n SECTION_PY_TIGHT,\n STAT,\n STAT_FIGURE,\n STAT_LABEL,\n surfaceClasses,\n type Polarity,\n type Surface,\n} from \"../generated/band\";\n\nexport type { Polarity, Surface };\n\n/**\n * Full-bleed page bands and the type vocabulary that goes in them. A page built\n * from these writes no spacing or type-scale class of its own: the rhythm is\n * `--band-py`, the gutter `--page-px` and the headline scale `--display-scale`,\n * so a global retune is one edit in the consumer's tokens.\n */\nexport interface SectionProps extends React.ComponentProps<\"section\"> {\n polarity?: Polarity;\n surface?: Surface;\n tight?: boolean;\n}\n\n/**\n * `polarity` sets the token scope on the element, so everything inside reads\n * `text-ink` / `border-border` / `text-ink-soft` and resolves correctly on\n * either side. Omitted, the band sets no scope and inherits its parent's: a\n * default of `light` would flip every band of a dark-first brand. `tight` is\n * the shorter vertical rhythm.\n */\nexport function Section({\n polarity,\n surface = \"background\",\n tight = false,\n className,\n ...props\n}: SectionProps) {\n return (\n <section\n data-slot=\"section\"\n className={cn(\n // conflict-free by construction — a gutter, a scope class, a plane and a\n // rhythm — so only the caller override is worth a merge\n `${SECTION_BASE} ${polarity ? polarityClasses[polarity] : \"\"} ${surfaceClasses[surface]} ${\n tight ? SECTION_PY_TIGHT : SECTION_PY\n }`,\n className,\n )}\n {...props}\n />\n );\n}\n\n/** The label above a headline, in the interactive role's colour. */\nexport function Eyebrow({ className, ...props }: React.ComponentProps<\"p\">) {\n return <p data-slot=\"eyebrow\" className={cn(EYEBROW, className)} {...props} />;\n}\n\n/** The headline. One scale for every band on the site, so a retune is one number. */\nexport function Display({ className, ...props }: React.ComponentProps<\"h2\">) {\n return <h2 data-slot=\"display\" className={cn(DISPLAY_BASE, className)} {...props} />;\n}\n\nexport interface SectionHeadProps extends Omit<React.ComponentProps<\"div\">, \"title\"> {\n eyebrow: React.ReactNode;\n title: React.ReactNode;\n lede?: React.ReactNode;\n}\n\n/** Eyebrow → headline → lede, the head a band shares. */\nexport function SectionHead({ eyebrow, title, lede, className, ...props }: SectionHeadProps) {\n return (\n <div data-slot=\"section-head\" className={cn(SECTION_HEAD, className)} {...props}>\n <Eyebrow>{eyebrow}</Eyebrow>\n <Display>{title}</Display>\n {lede && <p className={LEDE}>{lede}</p>}\n </div>\n );\n}\n\n/** Body copy at the reading measure. */\nexport function Prose({ className, ...props }: React.ComponentProps<\"p\">) {\n return <p data-slot=\"prose\" className={cn(PROSE, className)} {...props} />;\n}\n\nexport interface StatProps extends React.ComponentProps<\"span\"> {\n figure: React.ReactNode;\n label: React.ReactNode;\n}\n\n/** A figure with its label beside it. */\nexport function Stat({ figure, label, className, ...props }: StatProps) {\n return (\n <span data-slot=\"stat\" className={cn(STAT, className)} {...props}>\n <span className={STAT_FIGURE}>{figure}</span>\n <span className={STAT_LABEL}>{label}</span>\n </span>\n );\n}\n\n/**\n * The affirmative tick. Positive is a valence, not a significance rung — see the\n * kit's `docs/spec/accents.md`.\n */\nexport function Check({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span data-slot=\"check\" aria-hidden className={cn(CHECK, className)} {...props}>\n ✓\n </span>\n );\n}\n"],"mappings":"AAkDI,cAkCA,YAlCA;AAlDJ,YAAY,WAAW;AACvB,SAAS,UAAU;AACnB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AAuBA,SAAS,QAAQ;AAAA,EACtB;AAAA,EACA,UAAU;AAAA,EACV,QAAQ;AAAA,EACR;AAAA,EACA,GAAG;AACL,GAAiB;AACf,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA;AAAA;AAAA,QAGT,GAAG,YAAY,IAAI,WAAW,gBAAgB,QAAQ,IAAI,EAAE,IAAI,eAAe,OAAO,CAAC,IACrF,QAAQ,mBAAmB,UAC7B;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAGO,SAAS,QAAQ,EAAE,WAAW,GAAG,MAAM,GAA8B;AAC1E,SAAO,oBAAC,OAAE,aAAU,WAAU,WAAW,GAAG,SAAS,SAAS,GAAI,GAAG,OAAO;AAC9E;AAGO,SAAS,QAAQ,EAAE,WAAW,GAAG,MAAM,GAA+B;AAC3E,SAAO,oBAAC,QAAG,aAAU,WAAU,WAAW,GAAG,cAAc,SAAS,GAAI,GAAG,OAAO;AACpF;AASO,SAAS,YAAY,EAAE,SAAS,OAAO,MAAM,WAAW,GAAG,MAAM,GAAqB;AAC3F,SACE,qBAAC,SAAI,aAAU,gBAAe,WAAW,GAAG,cAAc,SAAS,GAAI,GAAG,OACxE;AAAA,wBAAC,WAAS,mBAAQ;AAAA,IAClB,oBAAC,WAAS,iBAAM;AAAA,IACf,QAAQ,oBAAC,OAAE,WAAW,MAAO,gBAAK;AAAA,KACrC;AAEJ;AAGO,SAAS,MAAM,EAAE,WAAW,GAAG,MAAM,GAA8B;AACxE,SAAO,oBAAC,OAAE,aAAU,SAAQ,WAAW,GAAG,OAAO,SAAS,GAAI,GAAG,OAAO;AAC1E;AAQO,SAAS,KAAK,EAAE,QAAQ,OAAO,WAAW,GAAG,MAAM,GAAc;AACtE,SACE,qBAAC,UAAK,aAAU,QAAO,WAAW,GAAG,MAAM,SAAS,GAAI,GAAG,OACzD;AAAA,wBAAC,UAAK,WAAW,aAAc,kBAAO;AAAA,IACtC,oBAAC,UAAK,WAAW,YAAa,iBAAM;AAAA,KACtC;AAEJ;AAMO,SAAS,MAAM,EAAE,WAAW,GAAG,MAAM,GAAiC;AAC3E,SACE,oBAAC,UAAK,aAAU,SAAQ,eAAW,MAAC,WAAW,GAAG,OAAO,SAAS,GAAI,GAAG,OAAO,oBAEhF;AAEJ;","names":[]}
|