@rinzai/zen 0.5.0 → 0.6.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 +2 -2
- package/dist/animated-number/index.js +33 -0
- package/dist/avatar/index.js +38 -0
- package/dist/backdrop/index.d.ts +7 -3
- package/dist/backdrop/index.d.ts.map +1 -1
- package/dist/backdrop/index.js +98 -0
- package/dist/badge/index.d.ts +1 -1
- package/dist/badge/index.js +24 -0
- package/dist/button/index.d.ts +10 -3
- package/dist/button/index.d.ts.map +1 -1
- package/dist/button/index.js +54 -0
- package/dist/calendar/index.d.ts +44 -0
- package/dist/calendar/index.d.ts.map +1 -0
- package/dist/calendar/index.js +161 -0
- package/dist/card/index.d.ts +15 -6
- package/dist/card/index.d.ts.map +1 -1
- package/dist/card/index.js +60 -0
- package/dist/chart/donut.d.ts +30 -0
- package/dist/chart/donut.d.ts.map +1 -0
- package/dist/chart/donut.js +96 -0
- package/dist/chart/index.d.ts +81 -0
- package/dist/chart/index.d.ts.map +1 -0
- package/dist/chart/index.js +362 -0
- package/dist/chart/tooltip.d.ts +25 -0
- package/dist/chart/tooltip.d.ts.map +1 -0
- package/dist/chart/tooltip.js +51 -0
- package/dist/checkbox/index.d.ts +20 -0
- package/dist/checkbox/index.d.ts.map +1 -0
- package/dist/checkbox/index.js +61 -0
- package/dist/chip/index.d.ts +12 -0
- package/dist/chip/index.d.ts.map +1 -0
- package/dist/chip/index.js +14 -0
- package/dist/code-block/index.js +36 -0
- package/dist/collapse/index.d.ts +17 -7
- package/dist/collapse/index.d.ts.map +1 -1
- package/dist/collapse/index.js +82 -0
- package/dist/combobox/index.d.ts +89 -0
- package/dist/combobox/index.d.ts.map +1 -0
- package/dist/combobox/index.js +262 -0
- package/dist/confirm-dialog/index.d.ts.map +1 -1
- package/dist/confirm-dialog/index.js +25 -0
- package/dist/date-picker/index.d.ts +48 -0
- package/dist/date-picker/index.d.ts.map +1 -0
- package/dist/date-picker/index.js +112 -0
- package/dist/dialog/index.d.ts +14 -2
- package/dist/dialog/index.d.ts.map +1 -1
- package/dist/dialog/index.js +77 -0
- package/dist/disclosure/index.d.ts +25 -0
- package/dist/disclosure/index.d.ts.map +1 -0
- package/dist/disclosure/index.js +66 -0
- package/dist/editable-cell/index.js +24 -0
- package/dist/field/index.d.ts +42 -3
- package/dist/field/index.d.ts.map +1 -1
- package/dist/field/index.js +66 -0
- package/dist/header/index.js +17 -0
- package/dist/icons/chevron-down.js +21 -0
- package/dist/icons/chevron-left.js +21 -0
- package/dist/icons/chevron-right.js +21 -0
- package/dist/icons/chevron-up.js +21 -0
- package/dist/icons/ellipsis.d.ts +4 -0
- package/dist/icons/ellipsis.d.ts.map +1 -0
- package/dist/icons/ellipsis.js +31 -0
- package/dist/icons/index.d.ts +1 -0
- package/dist/icons/index.d.ts.map +1 -1
- package/dist/icons/search.js +21 -0
- package/dist/icons/x-mark.js +21 -0
- package/dist/index.d.ts +22 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/input/index.d.ts.map +1 -1
- package/dist/input/index.js +16 -0
- package/dist/input-group/index.d.ts.map +1 -1
- package/dist/input-group/index.js +36 -0
- package/dist/inset/index.d.ts +16 -0
- package/dist/inset/index.d.ts.map +1 -0
- package/dist/inset/index.js +23 -0
- package/dist/lib.js +74 -0
- package/dist/menu/index.d.ts +55 -0
- package/dist/menu/index.d.ts.map +1 -0
- package/dist/menu/index.js +118 -0
- package/dist/meter/index.js +41 -0
- package/dist/money-input/index.d.ts +77 -7
- package/dist/money-input/index.d.ts.map +1 -1
- package/dist/money-input/index.js +304 -0
- package/dist/month-picker/index.d.ts +4 -3
- package/dist/month-picker/index.d.ts.map +1 -1
- package/dist/month-picker/index.js +93 -0
- package/dist/page-header/index.js +26 -0
- package/dist/pills/index.d.ts +35 -0
- package/dist/pills/index.d.ts.map +1 -0
- package/dist/pills/index.js +50 -0
- package/dist/popover/index.d.ts +41 -22
- package/dist/popover/index.d.ts.map +1 -1
- package/dist/popover/index.js +75 -0
- package/dist/progress-ring/index.js +49 -0
- package/dist/radio-cards/index.d.ts +34 -0
- package/dist/radio-cards/index.d.ts.map +1 -0
- package/dist/radio-cards/index.js +48 -0
- package/dist/radio-group/index.d.ts +39 -0
- package/dist/radio-group/index.d.ts.map +1 -0
- package/dist/radio-group/index.js +63 -0
- package/dist/segmented/index.d.ts +16 -6
- package/dist/segmented/index.d.ts.map +1 -1
- package/dist/segmented/index.js +58 -0
- package/dist/select/index.d.ts +28 -14
- package/dist/select/index.d.ts.map +1 -1
- package/dist/select/index.js +187 -0
- package/dist/side-nav/index.js +37 -0
- package/dist/skeleton/index.js +12 -0
- package/dist/slider/index.js +34 -0
- package/dist/spinner/index.js +14 -0
- package/dist/tab-bar/index.d.ts +3 -0
- package/dist/tab-bar/index.d.ts.map +1 -1
- package/dist/tab-bar/index.js +34 -0
- package/dist/table/index.js +148 -0
- package/dist/table-of-contents/index.js +37 -0
- package/dist/tabs/index.d.ts +3 -2
- package/dist/tabs/index.d.ts.map +1 -1
- package/dist/tabs/index.js +114 -0
- package/dist/tailwind.css +1 -1
- package/dist/textarea/index.d.ts.map +1 -1
- package/dist/textarea/index.js +16 -0
- package/dist/theme-toggle/index.js +43 -0
- package/dist/theme.css +178 -13
- package/dist/toast/index.d.ts +6 -1
- package/dist/toast/index.d.ts.map +1 -1
- package/dist/toast/index.js +248 -0
- package/dist/toggle/index.d.ts.map +1 -1
- package/dist/toggle/index.js +26 -0
- package/dist/tooltip/index.d.ts +25 -0
- package/dist/tooltip/index.d.ts.map +1 -0
- package/dist/tooltip/index.js +108 -0
- package/dist/tree/index.d.ts.map +1 -1
- package/dist/tree/index.js +135 -0
- package/dist/utils/cva.js +25 -0
- package/dist/utils/cx.js +6 -0
- package/dist/utils/date.d.ts +37 -0
- package/dist/utils/date.d.ts.map +1 -0
- package/dist/utils/date.js +68 -0
- package/dist/utils/field-chevron.js +19 -0
- package/dist/utils/fx.d.ts +30 -0
- package/dist/utils/fx.d.ts.map +1 -0
- package/dist/utils/fx.js +21 -0
- package/dist/utils/graphics.js +33 -0
- package/dist/utils/indicator.d.ts +24 -0
- package/dist/utils/indicator.d.ts.map +1 -0
- package/dist/utils/indicator.js +37 -0
- package/dist/utils/merge.js +305 -0
- package/dist/utils/money.js +73 -0
- package/dist/utils/month.js +46 -0
- package/dist/utils/slot.d.ts +9 -5
- package/dist/utils/slot.d.ts.map +1 -1
- package/dist/utils/slot.js +25 -0
- package/dist/utils/status-icons.js +48 -0
- package/dist/utils/styles.d.ts +6 -6
- package/dist/utils/styles.d.ts.map +1 -1
- package/dist/utils/styles.js +6 -0
- package/dist/utils/theme.js +200 -0
- package/dist/utils/useAnchoredPopup.d.ts +8 -2
- package/dist/utils/useAnchoredPopup.d.ts.map +1 -1
- package/dist/utils/useAnchoredPopup.js +63 -0
- package/dist/utils/useHydrated.js +9 -0
- package/dist/utils/useVirtualList.js +45 -0
- package/dist/variables.css +22 -0
- package/dist/zen.css +1 -1
- package/package.json +9 -4
- package/dist/actions-menu/index.d.ts +0 -18
- package/dist/actions-menu/index.d.ts.map +0 -1
- package/dist/dropdown/index.d.ts +0 -28
- package/dist/dropdown/index.d.ts.map +0 -1
- package/dist/nav-pills/index.d.ts +0 -31
- package/dist/nav-pills/index.d.ts.map +0 -1
- package/dist/zen.js +0 -2970
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cx as e } from "../utils/cx.js";
|
|
3
|
+
import { useAnchoredPopup as t } from "../utils/useAnchoredPopup.js";
|
|
4
|
+
import n from "../badge/index.js";
|
|
5
|
+
import r from "../button/index.js";
|
|
6
|
+
import { POPUP as i, TRIGGER as a } from "../utils/styles.js";
|
|
7
|
+
import o from "../collapse/index.js";
|
|
8
|
+
import { CheckIcon as s } from "../utils/status-icons.js";
|
|
9
|
+
import { useField as c } from "../field/index.js";
|
|
10
|
+
import l from "../icons/search.js";
|
|
11
|
+
import u from "../icons/x-mark.js";
|
|
12
|
+
import { InputGroupAddon as d, InputGroupInput as f } from "../input-group/index.js";
|
|
13
|
+
import { FieldChevron as p } from "../utils/field-chevron.js";
|
|
14
|
+
import { useVirtualList as m } from "../utils/useVirtualList.js";
|
|
15
|
+
import { createContext as h, useContext as g, useEffect as _, useMemo as v, useRef as y, useState as b } from "react";
|
|
16
|
+
import { Fragment as x, jsx as S, jsxs as C } from "react/jsx-runtime";
|
|
17
|
+
//#region packages/combobox/index.tsx
|
|
18
|
+
var w = h(null), T = () => {
|
|
19
|
+
let e = g(w);
|
|
20
|
+
if (!e) throw Error("Combobox parts must be inside a Combobox");
|
|
21
|
+
return e;
|
|
22
|
+
};
|
|
23
|
+
function E(e) {
|
|
24
|
+
let { items: n, itemKey: r = (e) => e.key, itemText: i = (e) => e.text, filter: a = (e, t) => i(e).toLowerCase().includes(t.toLowerCase()), selectedItems: o = [], children: s } = e, c = e.multiple === !0, l = c ? e.value : e.value === null ? [] : [e.value], [u, d] = b(""), [f, p] = b(null), m = y(null), h = y(null), g = y(null), _ = y(35), x = v(() => u ? n.filter((e) => a(e, u)) : n, [
|
|
25
|
+
n,
|
|
26
|
+
u,
|
|
27
|
+
a
|
|
28
|
+
]), C = t({
|
|
29
|
+
offset: 5,
|
|
30
|
+
onOpenChange: (e) => {
|
|
31
|
+
e || (p(null), d(""), C.popupRef.current?.contains(document.activeElement) && h.current?.focus());
|
|
32
|
+
}
|
|
33
|
+
}), T = {
|
|
34
|
+
multiple: c,
|
|
35
|
+
keyOf: r,
|
|
36
|
+
textOf: i,
|
|
37
|
+
items: n,
|
|
38
|
+
selectedItems: o,
|
|
39
|
+
matches: x,
|
|
40
|
+
chosen: l,
|
|
41
|
+
toggle: (t) => {
|
|
42
|
+
if (e.multiple === !0) {
|
|
43
|
+
let n = e.value.includes(t);
|
|
44
|
+
e.onValueChange(n ? e.value.filter((e) => e !== t) : [...e.value, t]);
|
|
45
|
+
} else e.onValueChange(t), C.setOpen(!1);
|
|
46
|
+
},
|
|
47
|
+
query: u,
|
|
48
|
+
setQuery: d,
|
|
49
|
+
active: f,
|
|
50
|
+
setActive: p,
|
|
51
|
+
create: m,
|
|
52
|
+
popup: C,
|
|
53
|
+
triggerRef: h,
|
|
54
|
+
listRef: g,
|
|
55
|
+
optionId: (e) => `${C.id}-option-${e}`,
|
|
56
|
+
itemHeight: _
|
|
57
|
+
};
|
|
58
|
+
return /* @__PURE__ */ S(w.Provider, {
|
|
59
|
+
value: T,
|
|
60
|
+
children: s
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
function D({ placeholder: t = "Select an Item", disabled: n, className: r, style: i, children: o, ...s }) {
|
|
64
|
+
let l = T(), { popup: u } = l, d = c(), f = y(!1), m = () => !n && u.setOpen(!0);
|
|
65
|
+
return /* @__PURE__ */ C("div", {
|
|
66
|
+
id: d?.id,
|
|
67
|
+
"aria-labelledby": s["aria-label"] ? void 0 : d?.labelId,
|
|
68
|
+
"aria-invalid": d?.["aria-invalid"],
|
|
69
|
+
...s,
|
|
70
|
+
"aria-describedby": e(d?.["aria-describedby"], s["aria-describedby"]).trim() || void 0,
|
|
71
|
+
ref: l.triggerRef,
|
|
72
|
+
role: "combobox",
|
|
73
|
+
tabIndex: n ? -1 : 0,
|
|
74
|
+
"aria-haspopup": "listbox",
|
|
75
|
+
"aria-expanded": u.open,
|
|
76
|
+
"aria-controls": u.id,
|
|
77
|
+
"aria-disabled": n || void 0,
|
|
78
|
+
"data-popup-open": u.triggerProps["data-popup-open"],
|
|
79
|
+
style: {
|
|
80
|
+
...u.triggerProps.style,
|
|
81
|
+
...i
|
|
82
|
+
},
|
|
83
|
+
onPointerDown: (e) => {
|
|
84
|
+
s.onPointerDown?.(e), f.current = u.open;
|
|
85
|
+
},
|
|
86
|
+
onClick: (e) => {
|
|
87
|
+
s.onClick?.(e), e.preventDefault(), f.current ? u.setOpen(!1) : m(), f.current = !1;
|
|
88
|
+
},
|
|
89
|
+
onKeyDown: (e) => {
|
|
90
|
+
s.onKeyDown?.(e), [
|
|
91
|
+
"Enter",
|
|
92
|
+
" ",
|
|
93
|
+
"ArrowDown"
|
|
94
|
+
].includes(e.key) && (e.preventDefault(), m());
|
|
95
|
+
},
|
|
96
|
+
className: e(a, "w-56 shrink-0", n ? "cursor-not-allowed opacity-50" : "cursor-pointer", u.open && "border-glow/60 [--glow-border-color:transparent] shadow-[0_0_0_3px_oklch(var(--glow)/0.16),0_0_24px_-6px_oklch(var(--glow)/0.6)]", r),
|
|
97
|
+
children: [/* @__PURE__ */ S("div", {
|
|
98
|
+
className: e("flex min-w-0 flex-1 items-center gap-1 overflow-hidden text-sm", n ? "text-muted-foreground" : "text-foreground"),
|
|
99
|
+
children: o ?? /* @__PURE__ */ S(O, { placeholder: t })
|
|
100
|
+
}), /* @__PURE__ */ S(p, { open: u.open })]
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
function O({ placeholder: e }) {
|
|
104
|
+
let t = T(), i = new Map([...t.selectedItems, ...t.items].map((e) => [t.keyOf(e), e])), a = t.chosen.flatMap((e) => {
|
|
105
|
+
let n = i.has(e) ? t.textOf(i.get(e)) : void 0;
|
|
106
|
+
return n ? [{
|
|
107
|
+
key: e,
|
|
108
|
+
text: n
|
|
109
|
+
}] : [];
|
|
110
|
+
});
|
|
111
|
+
return a.length ? t.multiple ? /* @__PURE__ */ S(o, {
|
|
112
|
+
items: a.map((e) => e.text),
|
|
113
|
+
data: a,
|
|
114
|
+
badgeVariant: "secondary",
|
|
115
|
+
badgeClassName: "h-6 min-w-min gap-2",
|
|
116
|
+
className: "w-full gap-1",
|
|
117
|
+
children: (e, i, a) => /* @__PURE__ */ C(n, {
|
|
118
|
+
className: "flex h-6 min-w-min gap-2 pr-1",
|
|
119
|
+
variant: "secondary",
|
|
120
|
+
children: [e, /* @__PURE__ */ S(r, {
|
|
121
|
+
"aria-label": `Remove ${e}`,
|
|
122
|
+
onClick: (e) => {
|
|
123
|
+
e.stopPropagation(), a && t.toggle(a.key);
|
|
124
|
+
},
|
|
125
|
+
variant: "icon",
|
|
126
|
+
size: "icon",
|
|
127
|
+
className: "group relative -top-px size-4 rounded-sm p-0.5",
|
|
128
|
+
children: /* @__PURE__ */ S(u, { className: "size-3 transition duration-300 group-hover:rotate-90" })
|
|
129
|
+
})]
|
|
130
|
+
}, a?.key ?? i)
|
|
131
|
+
}) : /* @__PURE__ */ S(x, { children: a[0].text }) : /* @__PURE__ */ S("span", {
|
|
132
|
+
className: t.multiple ? "text-muted-foreground" : void 0,
|
|
133
|
+
children: e
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
function k({ className: t, children: n }) {
|
|
137
|
+
let { popup: r } = T();
|
|
138
|
+
return /* @__PURE__ */ S("div", {
|
|
139
|
+
...r.popupProps,
|
|
140
|
+
className: e("zen__popover", i, "w-[anchor-size(width)] min-w-0 overflow-visible p-0", t),
|
|
141
|
+
children: /* @__PURE__ */ S("div", {
|
|
142
|
+
className: "divide-tint/10 flex w-full flex-col divide-y overflow-hidden rounded-xl",
|
|
143
|
+
children: n
|
|
144
|
+
})
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
function A({ placeholder: e = "Search", "aria-label": t = "Search options" }) {
|
|
148
|
+
let n = T(), r = y(null);
|
|
149
|
+
_(() => {
|
|
150
|
+
n.popup.open && r.current?.focus();
|
|
151
|
+
}, [n.popup.open]);
|
|
152
|
+
let i = n.matches.map(n.keyOf);
|
|
153
|
+
return /* @__PURE__ */ C("div", {
|
|
154
|
+
className: "flex h-10 grow items-center gap-2 px-3",
|
|
155
|
+
children: [/* @__PURE__ */ S(d, { children: /* @__PURE__ */ S(l, {}) }), /* @__PURE__ */ S(f, {
|
|
156
|
+
ref: r,
|
|
157
|
+
placeholder: e,
|
|
158
|
+
"aria-label": t,
|
|
159
|
+
"aria-controls": `${n.popup.id}-list`,
|
|
160
|
+
"aria-activedescendant": n.active === null ? void 0 : n.optionId(n.active),
|
|
161
|
+
value: n.query,
|
|
162
|
+
onChange: (e) => {
|
|
163
|
+
n.setQuery(e.target.value), n.setActive(null);
|
|
164
|
+
},
|
|
165
|
+
onKeyDown: (e) => {
|
|
166
|
+
let t = n.active === null ? -1 : i.indexOf(n.active), r = (t) => {
|
|
167
|
+
if (e.preventDefault(), !i.length) return;
|
|
168
|
+
let r = i[(t + i.length) % i.length];
|
|
169
|
+
n.setActive(r), j(n.listRef.current, i.indexOf(r), n.itemHeight.current);
|
|
170
|
+
};
|
|
171
|
+
e.key === "ArrowDown" ? r(t + 1) : e.key === "ArrowUp" ? r(t === -1 ? i.length - 1 : t - 1) : e.key === "Enter" && (e.preventDefault(), n.active === null ? !i.length && n.query && n.create.current && (n.create.current(n.query), n.setQuery("")) : n.toggle(n.active));
|
|
172
|
+
}
|
|
173
|
+
})]
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
var j = (e, t, n) => {
|
|
177
|
+
if (!e || t < 0) return;
|
|
178
|
+
let r = t * n;
|
|
179
|
+
r < e.scrollTop ? e.scrollTop = r : r + n > e.scrollTop + e.clientHeight && (e.scrollTop = r + n - e.clientHeight);
|
|
180
|
+
}, M = h(null);
|
|
181
|
+
function N({ renderItem: e, itemHeight: t = 35, children: n }) {
|
|
182
|
+
let r = T();
|
|
183
|
+
r.itemHeight.current = t;
|
|
184
|
+
let i = m({
|
|
185
|
+
count: r.matches.length,
|
|
186
|
+
itemHeight: t,
|
|
187
|
+
scrollRef: r.listRef
|
|
188
|
+
});
|
|
189
|
+
return _(() => {
|
|
190
|
+
r.listRef.current && (r.listRef.current.scrollTop = 0);
|
|
191
|
+
}, [r.query, r.listRef]), /* @__PURE__ */ C("ul", {
|
|
192
|
+
id: `${r.popup.id}-list`,
|
|
193
|
+
role: "listbox",
|
|
194
|
+
"aria-multiselectable": r.multiple || void 0,
|
|
195
|
+
className: "max-h-72 grow overflow-y-auto py-1 focus:ring-0 focus:outline-hidden",
|
|
196
|
+
ref: r.listRef,
|
|
197
|
+
children: [/* @__PURE__ */ S("div", {
|
|
198
|
+
style: {
|
|
199
|
+
height: `${i.totalSize}px`,
|
|
200
|
+
width: "100%",
|
|
201
|
+
position: "relative"
|
|
202
|
+
},
|
|
203
|
+
children: i.items.map((t) => {
|
|
204
|
+
let n = r.matches[t.index];
|
|
205
|
+
return /* @__PURE__ */ S(M.Provider, {
|
|
206
|
+
value: {
|
|
207
|
+
start: t.start,
|
|
208
|
+
size: t.size
|
|
209
|
+
},
|
|
210
|
+
children: e ? e(n) : /* @__PURE__ */ S(P, { item: n })
|
|
211
|
+
}, r.keyOf(n));
|
|
212
|
+
})
|
|
213
|
+
}), n]
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
function P({ item: t, className: n, children: r }) {
|
|
217
|
+
let i = T(), a = g(M), o = i.keyOf(t), c = i.chosen.includes(o);
|
|
218
|
+
return /* @__PURE__ */ C("li", {
|
|
219
|
+
id: i.optionId(o),
|
|
220
|
+
role: "option",
|
|
221
|
+
"aria-selected": c,
|
|
222
|
+
"data-highlighted": i.active === o || void 0,
|
|
223
|
+
style: a ? {
|
|
224
|
+
height: `${a.size}px`,
|
|
225
|
+
transform: `translateY(${a.start}px)`
|
|
226
|
+
} : void 0,
|
|
227
|
+
onMouseMove: () => i.active !== o && i.setActive(o),
|
|
228
|
+
onClick: () => i.toggle(o),
|
|
229
|
+
className: e("hover:bg-muted data-highlighted:bg-muted grid w-full cursor-pointer grid-cols-[1rem_1fr] items-center gap-2 px-3 py-2 text-sm outline-hidden select-none", a && "absolute top-0 left-0", n),
|
|
230
|
+
children: [/* @__PURE__ */ S("span", {
|
|
231
|
+
className: "text-primary col-start-1",
|
|
232
|
+
"aria-hidden": !0,
|
|
233
|
+
children: c && /* @__PURE__ */ S(s, {})
|
|
234
|
+
}), /* @__PURE__ */ S("span", {
|
|
235
|
+
className: "col-start-2 truncate",
|
|
236
|
+
children: r ?? i.textOf(t)
|
|
237
|
+
})]
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
function F({ children: e = "No results found" }) {
|
|
241
|
+
let t = T();
|
|
242
|
+
return !t.query || t.matches.length ? null : /* @__PURE__ */ S("li", {
|
|
243
|
+
className: "text-muted-foreground cursor-not-allowed px-3 py-2 text-sm",
|
|
244
|
+
children: e
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
function I({ onCreate: e, children: t = (e) => `Add ${e}` }) {
|
|
248
|
+
let n = T(), { create: r } = n;
|
|
249
|
+
return _(() => (r.current = e, () => {
|
|
250
|
+
r.current = null;
|
|
251
|
+
}), [r, e]), !n.query || n.matches.length ? null : /* @__PURE__ */ S("li", {
|
|
252
|
+
role: "option",
|
|
253
|
+
"aria-selected": !1,
|
|
254
|
+
className: "hover:bg-muted cursor-pointer px-3 py-2 text-sm select-none",
|
|
255
|
+
onClick: () => {
|
|
256
|
+
e(n.query), n.setQuery("");
|
|
257
|
+
},
|
|
258
|
+
children: t(n.query)
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
//#endregion
|
|
262
|
+
export { I as ComboboxCreate, F as ComboboxEmpty, P as ComboboxItem, N as ComboboxList, k as ComboboxPopup, A as ComboboxSearch, D as ComboboxTrigger, E as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/confirm-dialog/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/confirm-dialog/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,2GAA2G;AAC3G,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EAClC,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,WAAW,EACX,YAAY,EACZ,WAAsB,EACtB,WAAmB,EACnB,SAAS,GACZ,EAAE,kBAAkB,+BAoBpB;AAED,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,MAAM,IAAI,CAAC;CACzB"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import e, { DialogClose as t, DialogFooter as n } from "../dialog/index.js";
|
|
3
|
+
import { jsx as r, jsxs as i } from "react/jsx-runtime";
|
|
4
|
+
//#region packages/confirm-dialog/index.tsx
|
|
5
|
+
function a({ open: a, onOpenChange: o, title: s, description: c, confirmLabel: l, cancelLabel: u = "Cancel", destructive: d = !1, onConfirm: f }) {
|
|
6
|
+
return /* @__PURE__ */ r(e, {
|
|
7
|
+
role: "alertdialog",
|
|
8
|
+
open: a,
|
|
9
|
+
onOpenChange: o,
|
|
10
|
+
title: s,
|
|
11
|
+
description: c,
|
|
12
|
+
className: "w-[26rem]",
|
|
13
|
+
children: /* @__PURE__ */ i(n, { children: [/* @__PURE__ */ r(t, {
|
|
14
|
+
variant: "outline",
|
|
15
|
+
autoFocus: !0,
|
|
16
|
+
children: u
|
|
17
|
+
}), /* @__PURE__ */ r(t, {
|
|
18
|
+
variant: d ? "destructive" : "default",
|
|
19
|
+
onClick: f,
|
|
20
|
+
children: l
|
|
21
|
+
})] })
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
export { a as default };
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { DateRange, DateString } from '../utils/date';
|
|
2
|
+
import { ComponentProps } from 'react';
|
|
3
|
+
/**
|
|
4
|
+
* Date field: shows the date ("Sep 30, 2026" for the locale) and opens a
|
|
5
|
+
* Calendar to pick one, focused on the chosen date so the keyboard works at
|
|
6
|
+
* once. Dates are "YYYY-MM-DD" strings. With `onClear`, the popup also offers
|
|
7
|
+
* `clearLabel` to empty it.
|
|
8
|
+
*/
|
|
9
|
+
export default function DatePicker({ value, onChange, locale, min, max, isDisabled, weekStartsOn, placeholder, onClear, clearLabel, ...rest }: DatePickerProps): import('react').JSX.Element;
|
|
10
|
+
/**
|
|
11
|
+
* Date range field: pick a start and then an end in a Calendar (the days
|
|
12
|
+
* between are previewed while pointing); it closes once the range is complete.
|
|
13
|
+
* Shows the range the locale's way, e.g. "Sep 3 – 10, 2026".
|
|
14
|
+
*/
|
|
15
|
+
export declare function DateRangePicker({ value, onChange, locale, min, max, isDisabled, weekStartsOn, months, placeholder, onClear, clearLabel, ...rest }: DateRangePickerProps): import('react').JSX.Element;
|
|
16
|
+
interface PickerProps extends Omit<ComponentProps<'button'>, 'value' | 'onChange' | 'defaultValue'> {
|
|
17
|
+
/** Decides the date format, month and weekday names, and the first day of the week, e.g. "en-IN". */
|
|
18
|
+
locale: string;
|
|
19
|
+
/** Earliest date that can be picked ("YYYY-MM-DD"). */
|
|
20
|
+
min?: DateString;
|
|
21
|
+
/** Latest date that can be picked. */
|
|
22
|
+
max?: DateString;
|
|
23
|
+
/** Dates that can't be picked, e.g. weekends or booked days. */
|
|
24
|
+
isDisabled?: (date: DateString) => boolean;
|
|
25
|
+
/** 0 for Sunday … 6 for Saturday. Defaults to the locale's. */
|
|
26
|
+
weekStartsOn?: number;
|
|
27
|
+
/** Classes for the trigger (e.g. a width, instead of the default full width). */
|
|
28
|
+
className?: string;
|
|
29
|
+
placeholder?: string;
|
|
30
|
+
/** Offers a clear option in the popup (shown when a value is set). */
|
|
31
|
+
onClear?: () => void;
|
|
32
|
+
clearLabel?: string;
|
|
33
|
+
}
|
|
34
|
+
/** Also takes the trigger button's props (aria-*, data-*, onBlur…), so Field can wire it up. */
|
|
35
|
+
export interface DatePickerProps extends PickerProps {
|
|
36
|
+
/** "YYYY-MM-DD", or null for none. */
|
|
37
|
+
value: DateString | null;
|
|
38
|
+
onChange: (date: DateString) => void;
|
|
39
|
+
}
|
|
40
|
+
export interface DateRangePickerProps extends PickerProps {
|
|
41
|
+
/** The range; `end` is null while only the start is picked. */
|
|
42
|
+
value: DateRange | null;
|
|
43
|
+
onChange: (range: DateRange) => void;
|
|
44
|
+
/** Months shown side by side (2 suits wide screens). */
|
|
45
|
+
months?: number;
|
|
46
|
+
}
|
|
47
|
+
export {};
|
|
48
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/date-picker/index.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAA+B,MAAM,iBAAiB,CAAC;AAG/F,OAAO,EAAE,cAAc,EAAa,MAAM,OAAO,CAAC;AAElD;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EAC/B,KAAK,EACL,QAAQ,EACR,MAAM,EACN,GAAG,EACH,GAAG,EACH,UAAU,EACV,YAAY,EACZ,WAA2B,EAC3B,OAAO,EACP,UAAoB,EACpB,GAAG,IAAI,EACV,EAAE,eAAe,+BAsBjB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,EAC5B,KAAK,EACL,QAAQ,EACR,MAAM,EACN,GAAG,EACH,GAAG,EACH,UAAU,EACV,YAAY,EACZ,MAAU,EACV,WAA0B,EAC1B,OAAO,EACP,UAAoB,EACpB,GAAG,IAAI,EACV,EAAE,oBAAoB,+BA4BtB;AA8ED,UAAU,WAAY,SAAQ,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,cAAc,CAAC;IAC/F,qGAAqG;IACrG,MAAM,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,sCAAsC;IACtC,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,gEAAgE;IAChE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC;IAC3C,+DAA+D;IAC/D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,gGAAgG;AAChG,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAChD,sCAAsC;IACtC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;CACxC;AAED,MAAM,WAAW,oBAAqB,SAAQ,WAAW;IACrD,+DAA+D;IAC/D,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IACrC,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cx as e } from "../utils/cx.js";
|
|
3
|
+
import { useAnchoredPopup as t } from "../utils/useAnchoredPopup.js";
|
|
4
|
+
import { POPUP as n, TRIGGER as r } from "../utils/styles.js";
|
|
5
|
+
import { useFieldProps as i } from "../field/index.js";
|
|
6
|
+
import { formatDate as a, formatDateRange as o } from "../utils/date.js";
|
|
7
|
+
import s from "../calendar/index.js";
|
|
8
|
+
import { Fragment as c, jsx as l, jsxs as u } from "react/jsx-runtime";
|
|
9
|
+
//#region packages/date-picker/index.tsx
|
|
10
|
+
function d({ value: e, onChange: t, locale: n, min: r, max: i, isDisabled: o, weekStartsOn: c, placeholder: u = "Pick a date", onClear: d, clearLabel: f = "Clear", ...m }) {
|
|
11
|
+
return /* @__PURE__ */ l(p, {
|
|
12
|
+
...m,
|
|
13
|
+
shown: e ? a(e, n) : null,
|
|
14
|
+
placeholder: u,
|
|
15
|
+
label: "Choose date",
|
|
16
|
+
onClear: e ? d : void 0,
|
|
17
|
+
clearLabel: f,
|
|
18
|
+
calendar: (a) => /* @__PURE__ */ l(s, {
|
|
19
|
+
autoFocus: !0,
|
|
20
|
+
value: e,
|
|
21
|
+
onChange: (e) => {
|
|
22
|
+
t(e), a();
|
|
23
|
+
},
|
|
24
|
+
locale: n,
|
|
25
|
+
min: r,
|
|
26
|
+
max: i,
|
|
27
|
+
isDisabled: o,
|
|
28
|
+
weekStartsOn: c
|
|
29
|
+
})
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
function f({ value: e, onChange: t, locale: n, min: r, max: i, isDisabled: c, weekStartsOn: u, months: d = 1, placeholder: f = "Pick dates", onClear: m, clearLabel: h = "Clear", ...g }) {
|
|
33
|
+
let _ = e ? e.end ? o(e.start, e.end, n) : `${a(e.start, n)} – …` : null;
|
|
34
|
+
return /* @__PURE__ */ l(p, {
|
|
35
|
+
...g,
|
|
36
|
+
shown: _,
|
|
37
|
+
placeholder: f,
|
|
38
|
+
label: "Choose dates",
|
|
39
|
+
onClear: e ? m : void 0,
|
|
40
|
+
clearLabel: h,
|
|
41
|
+
calendar: (a) => /* @__PURE__ */ l(s, {
|
|
42
|
+
autoFocus: !0,
|
|
43
|
+
mode: "range",
|
|
44
|
+
value: e,
|
|
45
|
+
onChange: (e) => {
|
|
46
|
+
t(e), e.end && a();
|
|
47
|
+
},
|
|
48
|
+
locale: n,
|
|
49
|
+
min: r,
|
|
50
|
+
max: i,
|
|
51
|
+
isDisabled: c,
|
|
52
|
+
weekStartsOn: u,
|
|
53
|
+
months: d
|
|
54
|
+
})
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
function p({ shown: a, placeholder: o, label: s, calendar: d, onClear: f, clearLabel: p, id: h, className: g, disabled: _ = !1, style: v, ...y }) {
|
|
58
|
+
let b = t(), x = i({
|
|
59
|
+
...y,
|
|
60
|
+
id: h
|
|
61
|
+
}), S = () => b.setOpen(!1);
|
|
62
|
+
return /* @__PURE__ */ u(c, { children: [/* @__PURE__ */ u("button", {
|
|
63
|
+
type: "button",
|
|
64
|
+
...y,
|
|
65
|
+
...x,
|
|
66
|
+
id: h,
|
|
67
|
+
disabled: _,
|
|
68
|
+
...b.triggerProps,
|
|
69
|
+
style: {
|
|
70
|
+
...b.triggerProps.style,
|
|
71
|
+
...v
|
|
72
|
+
},
|
|
73
|
+
className: e("zen__date-picker group", r, "w-full", b.open && "border-glow/60 [--glow-border-color:transparent] shadow-[0_0_0_3px_oklch(var(--glow)/0.16),0_0_24px_-6px_oklch(var(--glow)/0.6)]", g),
|
|
74
|
+
children: [/* @__PURE__ */ l("span", {
|
|
75
|
+
className: e("truncate", !a && "text-muted-foreground"),
|
|
76
|
+
children: a ?? o
|
|
77
|
+
}), /* @__PURE__ */ l(m, {})]
|
|
78
|
+
}), /* @__PURE__ */ u("div", {
|
|
79
|
+
...b.popupProps,
|
|
80
|
+
role: "dialog",
|
|
81
|
+
"aria-label": s,
|
|
82
|
+
className: e("zen__popover", n, "p-3"),
|
|
83
|
+
children: [b.open && d(S), f && /* @__PURE__ */ l("button", {
|
|
84
|
+
type: "button",
|
|
85
|
+
onClick: () => {
|
|
86
|
+
f(), S();
|
|
87
|
+
},
|
|
88
|
+
className: "border-tint/[0.06] text-muted-foreground hover:text-foreground focus-visible:ring-ring/40 mt-2 w-full rounded-lg border-t px-2 pt-2.5 pb-1.5 text-sm outline-hidden focus-visible:ring-2",
|
|
89
|
+
children: p
|
|
90
|
+
})]
|
|
91
|
+
})] });
|
|
92
|
+
}
|
|
93
|
+
function m() {
|
|
94
|
+
return /* @__PURE__ */ u("svg", {
|
|
95
|
+
viewBox: "0 0 16 16",
|
|
96
|
+
fill: "none",
|
|
97
|
+
stroke: "currentColor",
|
|
98
|
+
strokeWidth: "1.5",
|
|
99
|
+
strokeLinecap: "round",
|
|
100
|
+
"aria-hidden": !0,
|
|
101
|
+
className: "text-muted-foreground group-data-popup-open:text-foreground size-4 shrink-0 transition-colors",
|
|
102
|
+
children: [/* @__PURE__ */ l("rect", {
|
|
103
|
+
x: "2.5",
|
|
104
|
+
y: "3.5",
|
|
105
|
+
width: "11",
|
|
106
|
+
height: "10",
|
|
107
|
+
rx: "2"
|
|
108
|
+
}), /* @__PURE__ */ l("path", { d: "M2.5 6.5h11M5.5 2v3M10.5 2v3" })]
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
//#endregion
|
|
112
|
+
export { f as DateRangePicker, d as default };
|
package/dist/dialog/index.d.ts
CHANGED
|
@@ -1,10 +1,20 @@
|
|
|
1
|
+
import { ButtonProps } from '../button';
|
|
1
2
|
import { ComponentProps, ReactNode, RefObject } from 'react';
|
|
2
3
|
/**
|
|
3
4
|
* Modal dialog on the native <dialog> element: focus is trapped and restored,
|
|
4
5
|
* the page behind is inert, and Escape closes it. `dismissible={false}` is for
|
|
5
|
-
* flows the user must finish (no Escape or outside-click close).
|
|
6
|
+
* flows the user must finish (no Escape or outside-click close). With `side`,
|
|
7
|
+
* it's a sheet that slides in from that edge: a bottom sheet on phones, a side
|
|
8
|
+
* panel for filters or details.
|
|
6
9
|
*/
|
|
7
|
-
export default function Dialog({ open, onOpenChange, title, description, children, dismissible, initialFocus, size, className, role, }: DialogProps): import('react').JSX.Element;
|
|
10
|
+
export default function Dialog({ open, onOpenChange, title, description, children, dismissible, initialFocus, size, side, className, role, }: DialogProps): import('react').JSX.Element;
|
|
11
|
+
/** The row of actions at the end of a dialog, right-aligned. */
|
|
12
|
+
export declare function DialogFooter({ className, ...rest }: ComponentProps<'div'>): import('react').JSX.Element;
|
|
13
|
+
/**
|
|
14
|
+
* A button that closes its dialog (after its own onClick, unless that calls
|
|
15
|
+
* preventDefault). Takes every Button prop: variant, size, asChild…
|
|
16
|
+
*/
|
|
17
|
+
export declare function DialogClose({ onClick, ...rest }: ButtonProps): import('react').JSX.Element;
|
|
8
18
|
export interface DialogProps {
|
|
9
19
|
open: boolean;
|
|
10
20
|
onOpenChange?: (open: boolean) => void;
|
|
@@ -16,6 +26,8 @@ export interface DialogProps {
|
|
|
16
26
|
initialFocus?: RefObject<HTMLElement | null>;
|
|
17
27
|
/** "lg" for dialogs holding a whole tool rather than a short form. */
|
|
18
28
|
size?: 'md' | 'lg';
|
|
29
|
+
/** Slide in from this edge as a sheet, instead of appearing in the middle. */
|
|
30
|
+
side?: 'bottom' | 'left' | 'right';
|
|
19
31
|
className?: string;
|
|
20
32
|
role?: ComponentProps<'dialog'>['role'];
|
|
21
33
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/dialog/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/dialog/index.tsx"],"names":[],"mappings":"AACA,OAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAGlD,OAAO,EACH,cAAc,EAGd,SAAS,EACT,SAAS,EAKZ,MAAM,OAAO,CAAC;AAKf;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAC3B,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,WAAW,EACX,QAAQ,EACR,WAAkB,EAClB,YAAY,EACZ,IAAW,EACX,IAAI,EACJ,SAAS,EACT,IAAI,GACP,EAAE,WAAW,+BAwEb;AAED,gEAAgE;AAChE,wBAAgB,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,cAAc,CAAC,KAAK,CAAC,+BAEzE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE,WAAW,+BAW5D;AAED,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iFAAiF;IACjF,YAAY,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC7C,sEAAsE;IACtE,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,8EAA8E;IAC9E,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;CAC3C"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cx as e } from "../utils/cx.js";
|
|
3
|
+
import { useGraphicsMode as t } from "../utils/graphics.js";
|
|
4
|
+
import n from "../button/index.js";
|
|
5
|
+
import { useToastHost as r } from "../toast/index.js";
|
|
6
|
+
import { createContext as i, useContext as a, useEffect as o, useId as s, useRef as c } from "react";
|
|
7
|
+
import { jsx as l, jsxs as u } from "react/jsx-runtime";
|
|
8
|
+
//#region packages/dialog/index.tsx
|
|
9
|
+
var d = i(() => {});
|
|
10
|
+
function f({ open: n, onOpenChange: i, title: a, description: f, children: p, dismissible: m = !0, initialFocus: h, size: g = "md", side: _, className: v, role: y }) {
|
|
11
|
+
t();
|
|
12
|
+
let b = c(null), x = s(), S = s();
|
|
13
|
+
return o(() => {
|
|
14
|
+
let e = b.current;
|
|
15
|
+
if (e) {
|
|
16
|
+
if (n && !e.open) {
|
|
17
|
+
let t = document.documentElement;
|
|
18
|
+
t.toggleAttribute("data-zen-scrollbar", window.innerWidth > t.clientWidth), e.showModal(), h?.current?.focus();
|
|
19
|
+
} else !n && e.open && e.close();
|
|
20
|
+
}
|
|
21
|
+
}, [n, h]), r(b, n), /* @__PURE__ */ l("dialog", {
|
|
22
|
+
ref: b,
|
|
23
|
+
role: y,
|
|
24
|
+
"aria-labelledby": x,
|
|
25
|
+
"aria-describedby": f ? S : void 0,
|
|
26
|
+
"data-side": _,
|
|
27
|
+
className: e("zen__dialog glass glass-blur glow-edge text-card-foreground bg-card/90! overflow-visible p-0", !_ && "m-auto max-h-[calc(100dvh-2rem)] max-w-[calc(100vw-2rem)] rounded-xl", !_ && (g === "lg" ? "w-[60rem]" : "w-[28rem]"), _ === "bottom" && "mx-auto mt-auto mb-0 max-h-[85dvh] w-full max-w-2xl rounded-t-2xl", (_ === "left" || _ === "right") && "my-0 h-dvh max-h-dvh w-[24rem] max-w-[calc(100vw-2.5rem)]", _ === "right" && "mr-0 ml-auto rounded-l-2xl", _ === "left" && "mr-auto ml-0 rounded-r-2xl", "backdrop:bg-black/50 backdrop:backdrop-blur-sm pointer-coarse:backdrop:backdrop-blur-none", v),
|
|
28
|
+
onCancel: (e) => {
|
|
29
|
+
e.preventDefault(), m && i?.(!1);
|
|
30
|
+
},
|
|
31
|
+
onClick: (e) => {
|
|
32
|
+
e.target === e.currentTarget && m && i?.(!1);
|
|
33
|
+
},
|
|
34
|
+
children: /* @__PURE__ */ u("div", {
|
|
35
|
+
className: e("flex flex-col gap-4 overflow-x-hidden overflow-y-auto p-6", _ ? _ === "bottom" ? "max-h-[85dvh] pt-3" : "h-full" : "max-h-[calc(100dvh-2rem)]"),
|
|
36
|
+
children: [
|
|
37
|
+
_ === "bottom" && /* @__PURE__ */ l("div", {
|
|
38
|
+
"aria-hidden": !0,
|
|
39
|
+
className: "bg-tint/20 mx-auto h-1 w-10 shrink-0 rounded-full"
|
|
40
|
+
}),
|
|
41
|
+
/* @__PURE__ */ u("div", {
|
|
42
|
+
className: "flex flex-col gap-2",
|
|
43
|
+
children: [/* @__PURE__ */ l("h2", {
|
|
44
|
+
id: x,
|
|
45
|
+
className: "text-lg font-semibold tracking-tight",
|
|
46
|
+
children: a
|
|
47
|
+
}), f && /* @__PURE__ */ l("p", {
|
|
48
|
+
id: S,
|
|
49
|
+
className: "text-muted-foreground mt-0! text-sm leading-5",
|
|
50
|
+
children: f
|
|
51
|
+
})]
|
|
52
|
+
}),
|
|
53
|
+
/* @__PURE__ */ l(d.Provider, {
|
|
54
|
+
value: () => i?.(!1),
|
|
55
|
+
children: p
|
|
56
|
+
})
|
|
57
|
+
]
|
|
58
|
+
})
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
function p({ className: t, ...n }) {
|
|
62
|
+
return /* @__PURE__ */ l("div", {
|
|
63
|
+
className: e("flex justify-end gap-2", t),
|
|
64
|
+
...n
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
function m({ onClick: e, ...t }) {
|
|
68
|
+
let r = a(d);
|
|
69
|
+
return /* @__PURE__ */ l(n, {
|
|
70
|
+
...t,
|
|
71
|
+
onClick: (t) => {
|
|
72
|
+
e?.(t), t.defaultPrevented || r();
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
//#endregion
|
|
77
|
+
export { m as DialogClose, p as DialogFooter, f as default };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ComponentProps, ReactNode } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* A section that a button shows and hides, e.g. "Past (3)" under a list. Put
|
|
4
|
+
* a DisclosureTrigger and a DisclosureContent inside (it adds no element of its
|
|
5
|
+
* own). Opens and closes on its own, or follows `open`/`onOpenChange`.
|
|
6
|
+
*/
|
|
7
|
+
export default function Disclosure({ open, defaultOpen, onOpenChange, children }: DisclosureProps): import('react').JSX.Element;
|
|
8
|
+
/** The button: your label after a chevron that turns down as the section opens. Brightens on hover and while open. */
|
|
9
|
+
export declare function DisclosureTrigger({ className, onClick, children, ...rest }: ComponentProps<'button'>): import('react').JSX.Element;
|
|
10
|
+
/**
|
|
11
|
+
* What the trigger shows and hides. It grows open and folds shut (the height
|
|
12
|
+
* animates, the content fades and settles). While closed it isn't rendered at
|
|
13
|
+
* all, so what's inside costs nothing and can't be found, focused or read; it
|
|
14
|
+
* mounts as it opens and unmounts once it has folded shut. className goes on
|
|
15
|
+
* the content itself.
|
|
16
|
+
*/
|
|
17
|
+
export declare function DisclosureContent({ className, children, ...rest }: ComponentProps<'div'>): import('react').JSX.Element | null;
|
|
18
|
+
export interface DisclosureProps {
|
|
19
|
+
/** Show or hide it from your state; leave it out to let the trigger do it. */
|
|
20
|
+
open?: boolean;
|
|
21
|
+
defaultOpen?: boolean;
|
|
22
|
+
onOpenChange?: (open: boolean) => void;
|
|
23
|
+
children?: ReactNode;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/disclosure/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAiB,SAAS,EAAkD,MAAM,OAAO,CAAC;AAgBjH;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EAAE,IAAI,EAAE,WAAmB,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,eAAe,+BAWxG;AAED,sHAAsH;AACtH,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,cAAc,CAAC,QAAQ,CAAC,+BA0BpG;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,cAAc,CAAC,KAAK,CAAC,sCAuDxF;AAED,MAAM,WAAW,eAAe;IAC5B,8EAA8E;IAC9E,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,QAAQ,CAAC,EAAE,SAAS,CAAC;CACxB"}
|