@uisatin/ui 0.1.1 → 0.3.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/CHANGELOG.md +33 -0
- package/README.md +20 -3
- package/chunk-3DHJXU45.js +147 -0
- package/{chunk-6YXUBP27.js → chunk-5725MFGQ.js} +72 -67
- package/{chunk-BKZBWPUH.js → chunk-57QEOCDZ.js} +9 -11
- package/{chunk-RTJ76X5U.js → chunk-5KTBSMQU.js} +2 -4
- package/{chunk-B2K45IUR.js → chunk-5XTUFBZI.js} +5 -7
- package/{chunk-LW3TRU5W.js → chunk-674SRBZK.js} +28 -16
- package/{chunk-XZNHT6MO.js → chunk-6VKV36OK.js} +115 -61
- package/{chunk-GICKPMJU.js → chunk-73Z7NMQQ.js} +31 -31
- package/chunk-7Q76HLRQ.js +128 -0
- package/{chunk-JPNWHWAQ.js → chunk-AIMQNLPY.js} +38 -35
- package/chunk-BN7FDKCJ.js +164 -0
- package/{chunk-3DINAQLL.js → chunk-BR2B4OIT.js} +33 -29
- package/{chunk-2HKBZFIK.js → chunk-CGOH5IYX.js} +31 -31
- package/chunk-CVNRZ2YV.js +112 -0
- package/{chunk-QUF2IPOZ.js → chunk-DPYIBFQD.js} +12 -14
- package/chunk-EF5GT4OG.js +87 -0
- package/chunk-FAJ3OVL4.js +37 -0
- package/{chunk-L6NCCSIP.js → chunk-FB5HTCO2.js} +36 -29
- package/chunk-GI2SMFZL.js +55 -0
- package/{chunk-B6V4VSGH.js → chunk-GMETYACH.js} +14 -15
- package/chunk-HK6WINL6.js +95 -0
- package/{chunk-HL42K2NH.js → chunk-IKO3GQFE.js} +17 -17
- package/{chunk-DO3TBNSC.js → chunk-ISYKZCPJ.js} +15 -17
- package/{chunk-YG7JOOLJ.js → chunk-J7RMFN54.js} +5 -7
- package/{chunk-SHDFUXYV.js → chunk-JBKBRAC4.js} +16 -18
- package/{chunk-LZMKSFCF.js → chunk-JCXI7VQL.js} +10 -12
- package/{chunk-NN6PKJWS.js → chunk-JYOZUQNU.js} +7 -9
- package/{chunk-LLHTVIM3.js → chunk-LB37KTJH.js} +7 -9
- package/{chunk-NSRTTYQ4.js → chunk-LB7Z6BSK.js} +42 -35
- package/{chunk-BNZVTLHV.js → chunk-LFGUJHFF.js} +25 -21
- package/{chunk-7TXHCRAG.js → chunk-M2HEVFQ3.js} +8 -10
- package/{chunk-SH6NG6VN.js → chunk-NH3EHMIL.js} +6 -8
- package/chunk-NL574STL.js +88 -0
- package/chunk-NQL6SIIB.js +168 -0
- package/chunk-O46O6LFQ.js +25 -0
- package/{chunk-YPNKBE5X.js → chunk-OURZQM27.js} +5 -7
- package/{chunk-XL75JRUA.js → chunk-OVKPPXK5.js} +42 -22
- package/chunk-PD6YPFYN.js +42 -0
- package/{chunk-XILQ7GXE.js → chunk-PHNR6ZQ7.js} +11 -13
- package/{chunk-BNTPPZCK.js → chunk-PUWSL5XW.js} +37 -39
- package/{chunk-A5XEM3GF.js → chunk-RHQHDYTE.js} +34 -36
- package/chunk-S7QHBVPX.js +45 -0
- package/{chunk-TX3H3QMA.js → chunk-SAYNV7B3.js} +71 -70
- package/{chunk-6QMSWITQ.js → chunk-SDOTDMYG.js} +24 -26
- package/{chunk-UGRSWP6U.js → chunk-SPGUZMCC.js} +10 -12
- package/chunk-SSOFFQ5T.js +74 -0
- package/{chunk-AN2RNJLR.js → chunk-SZJIVBOD.js} +16 -16
- package/chunk-T6L32XXH.js +107 -0
- package/{chunk-QS4N4MNP.js → chunk-TT2N5752.js} +18 -20
- package/{chunk-72OCFAPT.js → chunk-UCCNXGLG.js} +22 -21
- package/{chunk-KNUWZNFV.js → chunk-UGIVCXGN.js} +4 -6
- package/{chunk-H4NU7NPO.js → chunk-UUCVRIVP.js} +62 -61
- package/{chunk-P4O6TGDR.js → chunk-UZ4DXU6W.js} +28 -26
- package/{chunk-UBNHSZSE.js → chunk-VUOAPWTF.js} +10 -12
- package/{chunk-VAGIAREV.js → chunk-W472DBMT.js} +29 -26
- package/{chunk-X3PQANZO.js → chunk-W4RDTP6W.js} +47 -46
- package/{chunk-CL2II6BX.js → chunk-WLQD5BN2.js} +11 -13
- package/{chunk-FDKIX4DC.js → chunk-X2GNMNZQ.js} +7 -9
- package/{chunk-PF3YBUKT.js → chunk-X66KTATQ.js} +16 -15
- package/{chunk-J3NSDRVH.js → chunk-XETMIETJ.js} +0 -2
- package/chunk-XH56JGYC.js +71 -0
- package/{chunk-O7F3CIDV.js → chunk-XUOSJMEJ.js} +10 -12
- package/chunk-YJK4MGSI.js +86 -0
- package/{chunk-YX5VNRJX.js → chunk-YYFAZQ25.js} +0 -2
- package/chunk-Z7S2KQZS.js +177 -0
- package/chunk-ZBZ3ZQRB.js +195 -0
- package/{chunk-Y5AYU7PK.js → chunk-ZHFIWDGF.js} +0 -2
- package/components/accordion.js +2 -4
- package/components/agent-loading.d.ts +2 -0
- package/components/agent-loading.js +2 -4
- package/components/agent-picker.js +4 -5
- package/components/agent-suggestion.js +5 -6
- package/components/announcement-bar.js +6 -7
- package/components/attachment.js +4 -5
- package/components/avatar.d.ts +16 -0
- package/components/avatar.js +4 -6
- package/components/badge.js +2 -4
- package/components/banner-mesh.js +1 -3
- package/components/banner.js +4 -6
- package/components/bar-chart.js +10 -11
- package/components/breadcrumb.js +5 -6
- package/components/button.js +2 -4
- package/components/card.js +3 -5
- package/components/channel-chart.js +10 -11
- package/components/chart.js +9 -10
- package/components/checkbox.js +2 -4
- package/components/chip.js +2 -4
- package/components/citations.d.ts +6 -4
- package/components/citations.js +4 -5
- package/components/code-block.js +3 -5
- package/components/combobox.d.ts +12 -3
- package/components/combobox.js +9 -10
- package/components/command-menu.d.ts +6 -2
- package/components/command-menu.js +5 -6
- package/components/context-menu.d.ts +12 -5
- package/components/context-menu.js +5 -6
- package/components/cookie-consent.js +3 -5
- package/components/date-picker.d.ts +26 -14
- package/components/date-picker.js +8 -9
- package/components/decision-card.js +6 -7
- package/components/dialog.d.ts +5 -2
- package/components/dialog.js +4 -5
- package/components/donut-chart.js +10 -11
- package/components/dot.js +2 -4
- package/components/dropdown.d.ts +6 -1
- package/components/dropdown.js +4 -5
- package/components/empty-state.js +2 -4
- package/components/file-upload.js +6 -7
- package/components/floating.js +1 -3
- package/components/form-field.js +2 -4
- package/components/hover-card.d.ts +5 -2
- package/components/hover-card.js +2 -4
- package/components/input-otp.d.ts +4 -2
- package/components/input-otp.js +7 -8
- package/components/input.js +3 -5
- package/components/kbd.js +2 -4
- package/components/labels.d.ts +79 -0
- package/components/labels.js +1 -0
- package/components/line-chart.js +11 -12
- package/components/message-actions.js +4 -5
- package/components/message.js +7 -8
- package/components/number-input.d.ts +4 -2
- package/components/number-input.js +7 -8
- package/components/pagination.js +4 -6
- package/components/popover.d.ts +11 -5
- package/components/popover.js +3 -4
- package/components/progress.js +2 -4
- package/components/prompt-bar.js +5 -6
- package/components/radio.js +2 -4
- package/components/search-bar.js +3 -5
- package/components/segmented-control.d.ts +4 -2
- package/components/segmented-control.js +3 -5
- package/components/select.d.ts +10 -2
- package/components/select.js +6 -7
- package/components/sheet.d.ts +4 -2
- package/components/sheet.js +5 -6
- package/components/sidebar.js +2 -4
- package/components/skeleton.js +2 -4
- package/components/slider.d.ts +6 -2
- package/components/slider.js +7 -8
- package/components/sliding-indicator.js +1 -3
- package/components/streaming-text.js +2 -4
- package/components/switch.js +2 -4
- package/components/table.d.ts +16 -5
- package/components/table.js +4 -5
- package/components/tabs.d.ts +4 -2
- package/components/tabs.js +3 -5
- package/components/textarea.js +3 -5
- package/components/thinking.js +3 -5
- package/components/toast.js +4 -5
- package/components/toggle.js +2 -4
- package/components/tooltip.d.ts +5 -2
- package/components/tooltip.js +3 -5
- package/index.d.ts +1 -0
- package/index.js +67 -231
- package/lib/utils.d.ts +8 -1
- package/lib/utils.js +1 -3
- package/package.json +22 -1
- package/styles.css +1 -1
- package/theme/create-theme.d.ts +6 -2
- package/theme/index.js +1 -0
- package/chunk-2HKBZFIK.js.map +0 -1
- package/chunk-3DINAQLL.js.map +0 -1
- package/chunk-3ERGAHKA.js +0 -179
- package/chunk-3ERGAHKA.js.map +0 -1
- package/chunk-6C7CGJX2.js +0 -86
- package/chunk-6C7CGJX2.js.map +0 -1
- package/chunk-6QMSWITQ.js.map +0 -1
- package/chunk-6YXUBP27.js.map +0 -1
- package/chunk-72OCFAPT.js.map +0 -1
- package/chunk-7TXHCRAG.js.map +0 -1
- package/chunk-A5XEM3GF.js.map +0 -1
- package/chunk-AN2RNJLR.js.map +0 -1
- package/chunk-B2K45IUR.js.map +0 -1
- package/chunk-B6V4VSGH.js.map +0 -1
- package/chunk-BKZBWPUH.js.map +0 -1
- package/chunk-BNTPPZCK.js.map +0 -1
- package/chunk-BNZVTLHV.js.map +0 -1
- package/chunk-CL2II6BX.js.map +0 -1
- package/chunk-D7RZNTFC.js +0 -95
- package/chunk-D7RZNTFC.js.map +0 -1
- package/chunk-DETGJAIC.js +0 -147
- package/chunk-DETGJAIC.js.map +0 -1
- package/chunk-DO3TBNSC.js.map +0 -1
- package/chunk-ESC5JCVQ.js +0 -90
- package/chunk-ESC5JCVQ.js.map +0 -1
- package/chunk-FDKIX4DC.js.map +0 -1
- package/chunk-GICKPMJU.js.map +0 -1
- package/chunk-GQA24FYG.js +0 -57
- package/chunk-GQA24FYG.js.map +0 -1
- package/chunk-H4NU7NPO.js.map +0 -1
- package/chunk-H63FYCMY.js +0 -11
- package/chunk-H63FYCMY.js.map +0 -1
- package/chunk-HL42K2NH.js.map +0 -1
- package/chunk-HNQUX43Z.js +0 -109
- package/chunk-HNQUX43Z.js.map +0 -1
- package/chunk-HRKPV66B.js +0 -32
- package/chunk-HRKPV66B.js.map +0 -1
- package/chunk-J3NSDRVH.js.map +0 -1
- package/chunk-JPNWHWAQ.js.map +0 -1
- package/chunk-KNUWZNFV.js.map +0 -1
- package/chunk-L6NCCSIP.js.map +0 -1
- package/chunk-LLHTVIM3.js.map +0 -1
- package/chunk-LW3TRU5W.js.map +0 -1
- package/chunk-LZMKSFCF.js.map +0 -1
- package/chunk-MR3JDI7E.js +0 -122
- package/chunk-MR3JDI7E.js.map +0 -1
- package/chunk-NN6PKJWS.js.map +0 -1
- package/chunk-NSRTTYQ4.js.map +0 -1
- package/chunk-O7F3CIDV.js.map +0 -1
- package/chunk-P4O6TGDR.js.map +0 -1
- package/chunk-PF3YBUKT.js.map +0 -1
- package/chunk-PVOLDO4G.js +0 -47
- package/chunk-PVOLDO4G.js.map +0 -1
- package/chunk-QS4N4MNP.js.map +0 -1
- package/chunk-QUF2IPOZ.js.map +0 -1
- package/chunk-RTJ76X5U.js.map +0 -1
- package/chunk-SH6NG6VN.js.map +0 -1
- package/chunk-SHDFUXYV.js.map +0 -1
- package/chunk-TKO44NDI.js +0 -84
- package/chunk-TKO44NDI.js.map +0 -1
- package/chunk-TVLGZGYN.js +0 -59
- package/chunk-TVLGZGYN.js.map +0 -1
- package/chunk-TX3H3QMA.js.map +0 -1
- package/chunk-UBNHSZSE.js.map +0 -1
- package/chunk-UC3ZJWOD.js +0 -73
- package/chunk-UC3ZJWOD.js.map +0 -1
- package/chunk-UGRSWP6U.js.map +0 -1
- package/chunk-VAGIAREV.js.map +0 -1
- package/chunk-WTMZT3IT.js +0 -105
- package/chunk-WTMZT3IT.js.map +0 -1
- package/chunk-WX6BP5ZP.js +0 -39
- package/chunk-WX6BP5ZP.js.map +0 -1
- package/chunk-X3PQANZO.js.map +0 -1
- package/chunk-XILQ7GXE.js.map +0 -1
- package/chunk-XL75JRUA.js.map +0 -1
- package/chunk-XZNHT6MO.js.map +0 -1
- package/chunk-Y5AYU7PK.js.map +0 -1
- package/chunk-YG7JOOLJ.js.map +0 -1
- package/chunk-YPJYW624.js +0 -195
- package/chunk-YPJYW624.js.map +0 -1
- package/chunk-YPNKBE5X.js.map +0 -1
- package/chunk-YX5VNRJX.js.map +0 -1
- package/components/accordion.js.map +0 -1
- package/components/agent-loading.js.map +0 -1
- package/components/agent-picker.js.map +0 -1
- package/components/agent-suggestion.js.map +0 -1
- package/components/announcement-bar.js.map +0 -1
- package/components/attachment.js.map +0 -1
- package/components/avatar.js.map +0 -1
- package/components/badge.js.map +0 -1
- package/components/banner-mesh.js.map +0 -1
- package/components/banner.js.map +0 -1
- package/components/bar-chart.js.map +0 -1
- package/components/breadcrumb.js.map +0 -1
- package/components/button.js.map +0 -1
- package/components/card.js.map +0 -1
- package/components/channel-chart.js.map +0 -1
- package/components/chart.js.map +0 -1
- package/components/checkbox.js.map +0 -1
- package/components/chip.js.map +0 -1
- package/components/citations.js.map +0 -1
- package/components/code-block.js.map +0 -1
- package/components/combobox.js.map +0 -1
- package/components/command-menu.js.map +0 -1
- package/components/context-menu.js.map +0 -1
- package/components/cookie-consent.js.map +0 -1
- package/components/date-picker.js.map +0 -1
- package/components/decision-card.js.map +0 -1
- package/components/dialog.js.map +0 -1
- package/components/donut-chart.js.map +0 -1
- package/components/dot.js.map +0 -1
- package/components/dropdown.js.map +0 -1
- package/components/empty-state.js.map +0 -1
- package/components/file-upload.js.map +0 -1
- package/components/floating.js.map +0 -1
- package/components/form-field.js.map +0 -1
- package/components/hover-card.js.map +0 -1
- package/components/input-otp.js.map +0 -1
- package/components/input.js.map +0 -1
- package/components/kbd.js.map +0 -1
- package/components/line-chart.js.map +0 -1
- package/components/message-actions.js.map +0 -1
- package/components/message.js.map +0 -1
- package/components/number-input.js.map +0 -1
- package/components/pagination.js.map +0 -1
- package/components/popover.js.map +0 -1
- package/components/progress.js.map +0 -1
- package/components/prompt-bar.js.map +0 -1
- package/components/radio.js.map +0 -1
- package/components/search-bar.js.map +0 -1
- package/components/segmented-control.js.map +0 -1
- package/components/select.js.map +0 -1
- package/components/sheet.js.map +0 -1
- package/components/sidebar.js.map +0 -1
- package/components/skeleton.js.map +0 -1
- package/components/slider.js.map +0 -1
- package/components/sliding-indicator.js.map +0 -1
- package/components/streaming-text.js.map +0 -1
- package/components/switch.js.map +0 -1
- package/components/table.js.map +0 -1
- package/components/tabs.js.map +0 -1
- package/components/textarea.js.map +0 -1
- package/components/thinking.js.map +0 -1
- package/components/toast.js.map +0 -1
- package/components/toggle.js.map +0 -1
- package/components/tooltip.js.map +0 -1
- package/index.js.map +0 -1
- package/lib/utils.js.map +0 -1
package/chunk-ESC5JCVQ.js
DELETED
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import { FlappySprite, TetrisStill } from './chunk-KNUWZNFV.js';
|
|
2
|
-
import { cn } from './chunk-H63FYCMY.js';
|
|
3
|
-
import * as React from 'react';
|
|
4
|
-
import { NavArrowDown, Check, EditPencil } from 'iconoir-react';
|
|
5
|
-
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
6
|
-
|
|
7
|
-
function Thinking({
|
|
8
|
-
state = "collapsed",
|
|
9
|
-
label = "Thought",
|
|
10
|
-
steps = [],
|
|
11
|
-
indicator = "tetris",
|
|
12
|
-
onToggle,
|
|
13
|
-
className,
|
|
14
|
-
...props
|
|
15
|
-
}) {
|
|
16
|
-
const [open, setOpen] = React.useState(state === "expanded");
|
|
17
|
-
React.useEffect(() => setOpen(state === "expanded"), [state]);
|
|
18
|
-
const bodyId = `${React.useId()}-steps`;
|
|
19
|
-
return /* @__PURE__ */ jsxs("div", { "data-slot": "thinking", "data-state": open ? "expanded" : "collapsed", className: cn("w-full", className), ...props, children: [
|
|
20
|
-
/* @__PURE__ */ jsxs(
|
|
21
|
-
"button",
|
|
22
|
-
{
|
|
23
|
-
type: "button",
|
|
24
|
-
"aria-expanded": open,
|
|
25
|
-
"aria-controls": bodyId,
|
|
26
|
-
onClick: () => {
|
|
27
|
-
setOpen(!open);
|
|
28
|
-
onToggle?.(!open);
|
|
29
|
-
},
|
|
30
|
-
className: "group flex w-fit cursor-pointer items-center gap-3 rounded-md p-1 outline-none select-none focus-visible:[box-shadow:0_0_0_2px_var(--action-focus-ring)]",
|
|
31
|
-
children: [
|
|
32
|
-
/* @__PURE__ */ jsx(ThinkingMark, { indicator }),
|
|
33
|
-
/* @__PURE__ */ jsx("span", { className: "text-sm whitespace-nowrap text-text-muted", children: label }),
|
|
34
|
-
/* @__PURE__ */ jsx(
|
|
35
|
-
NavArrowDown,
|
|
36
|
-
{
|
|
37
|
-
"aria-hidden": true,
|
|
38
|
-
className: cn(
|
|
39
|
-
"size-icon-size-sm shrink-0 text-text-muted transition-transform duration-(--duration-base) ease-(--ease-out) [stroke-width:1.875]",
|
|
40
|
-
open && "rotate-180"
|
|
41
|
-
)
|
|
42
|
-
}
|
|
43
|
-
)
|
|
44
|
-
]
|
|
45
|
-
}
|
|
46
|
-
),
|
|
47
|
-
/* @__PURE__ */ jsx("div", { id: bodyId, "data-state": open ? "open" : "closed", className: "satin-expand", children: /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsxs("div", { className: "flex gap-3 pt-2 pl-1", children: [
|
|
48
|
-
/* @__PURE__ */ jsx("div", { "aria-hidden": true, className: "relative w-4 shrink-0 self-stretch", children: /* @__PURE__ */ jsx("div", { className: "absolute inset-y-0 left-1/2 w-px -translate-x-1/2 bg-linear-to-b from-component-rail-edge via-component-rail-center to-component-rail-edge" }) }),
|
|
49
|
-
/* @__PURE__ */ jsx("ol", { className: "flex min-w-0 flex-1 flex-col gap-2", children: steps.map((step, i) => /* @__PURE__ */ jsx("li", { className: "min-w-0", children: /* @__PURE__ */ jsx(Step, { step }) }, i)) })
|
|
50
|
-
] }) }) })
|
|
51
|
-
] });
|
|
52
|
-
}
|
|
53
|
-
function Step({ step }) {
|
|
54
|
-
switch (step.type) {
|
|
55
|
-
case "text":
|
|
56
|
-
return /* @__PURE__ */ jsx("p", { className: "text-body text-text-muted", children: step.text });
|
|
57
|
-
case "more":
|
|
58
|
-
return /* @__PURE__ */ jsx("p", { className: "text-sm whitespace-nowrap text-text-muted", children: step.label });
|
|
59
|
-
case "source":
|
|
60
|
-
return /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-3 p-1 text-sm", children: [
|
|
61
|
-
/* @__PURE__ */ jsx("span", { className: "flex size-4 shrink-0 items-center justify-center overflow-clip rounded-xs [&>*]:size-4", children: step.icon }),
|
|
62
|
-
/* @__PURE__ */ jsx("span", { className: "max-w-full shrink-0 truncate text-text-default", children: step.label }),
|
|
63
|
-
step.meta != null && /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate text-text-muted", children: step.meta })
|
|
64
|
-
] });
|
|
65
|
-
case "tool":
|
|
66
|
-
return /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-2 p-1 text-sm [&>svg]:size-icon-size [&>svg]:shrink-0 [&>svg]:text-text-muted [&>svg]:[stroke-width:1.875]", children: [
|
|
67
|
-
step.icon ?? /* @__PURE__ */ jsx(EditPencil, {}),
|
|
68
|
-
/* @__PURE__ */ jsx("span", { className: "shrink-0 whitespace-nowrap text-text-default", children: step.label }),
|
|
69
|
-
/* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate font-mono tracking-normal text-text-muted", children: step.target }),
|
|
70
|
-
(step.added != null || step.removed != null) && /* @__PURE__ */ jsxs("span", { className: "flex shrink-0 gap-1.5 font-mono tracking-normal whitespace-nowrap", children: [
|
|
71
|
-
step.added != null && /* @__PURE__ */ jsx("span", { className: "text-status-green-fg", children: step.added }),
|
|
72
|
-
step.removed != null && /* @__PURE__ */ jsx("span", { className: "text-status-red-fg", children: step.removed })
|
|
73
|
-
] }),
|
|
74
|
-
step.meta != null && /* @__PURE__ */ jsx("span", { className: "shrink-0 whitespace-nowrap text-text-muted", children: step.meta })
|
|
75
|
-
] });
|
|
76
|
-
default:
|
|
77
|
-
return /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-3 p-1 text-sm", children: [
|
|
78
|
-
/* @__PURE__ */ jsx(Check, { "aria-hidden": true, className: "size-icon-size-sm shrink-0 text-status-green-fg [stroke-width:1.875]" }),
|
|
79
|
-
/* @__PURE__ */ jsx("span", { className: "max-w-full shrink-0 truncate text-text-default", children: step.label }),
|
|
80
|
-
step.meta != null && /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate text-text-muted", children: step.meta })
|
|
81
|
-
] });
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
function ThinkingMark({ indicator }) {
|
|
85
|
-
return indicator === "flappy" ? /* @__PURE__ */ jsx(FlappySprite, { size: 16, run: false }) : /* @__PURE__ */ jsx(TetrisStill, {});
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
export { Thinking };
|
|
89
|
-
//# sourceMappingURL=chunk-ESC5JCVQ.js.map
|
|
90
|
-
//# sourceMappingURL=chunk-ESC5JCVQ.js.map
|
package/chunk-ESC5JCVQ.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/thinking.tsx"],"names":[],"mappings":"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","file":"chunk-ESC5JCVQ.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { Check, EditPencil, NavArrowDown } from 'iconoir-react'\nimport { cn } from '../lib/utils'\nimport { FlappySprite, TetrisStill, type AgentLoadingIndicator } from './agent-loading'\n\n/**\n * Thinking, 1:1 with the uiKit `Thinking` set (3239:20908) and its parts thinking/header\n * (3239:20766), thinking/step (3239:20791) and thinking/_mark (3239:20674).\n *\n * What an agent did, once it is done; while it works, AgentLoading (agent-loading.tsx) shows\n * instead. collapsed: the mark at rest (the full tetris board, or the flappy bird), summary\n * and a 14px chevron. expanded: the same header with the chevron turned up, then 8px down a body\n * with 4px left inset: a 16px rail (1px line, rail-edge → rail-center → rail-edge) and, 12px\n * on, the steps 8px apart.\n *\n * The header is a button (click, Enter, Space) that opens and folds the body with the\n * Accordion's motion; the folded body stays mounted but leaves tab order and screen readers.\n * `state` sets the starting state and follows later changes, `onToggle` reports them.\n */\nexport type ThinkingStep =\n /** A finished action: green check, label, muted meta that truncates. */\n | { type?: 'task'; label: React.ReactNode; meta?: React.ReactNode }\n /** A thought, wrapping in text/muted. */\n | { type: 'text'; text: React.ReactNode }\n /** A page that was read: 16px favicon, title, muted meta. */\n | { type: 'source'; icon?: React.ReactNode; label: React.ReactNode; meta?: React.ReactNode }\n /** A dev tool call: icon (pencil by default), name, mono target, +added −removed, meta. */\n | {\n type: 'tool'\n icon?: React.ReactNode\n label: React.ReactNode\n target?: React.ReactNode\n added?: React.ReactNode\n removed?: React.ReactNode\n meta?: React.ReactNode\n }\n /** The rest, folded: \"+5 more\". */\n | { type: 'more'; label: React.ReactNode }\n\nexport type ThinkingState = 'collapsed' | 'expanded'\n/** The mark beside the summary, matching the AgentLoading that ran before it. */\nexport type ThinkingIndicator = AgentLoadingIndicator\n\nexport interface ThinkingProps extends Omit<React.ComponentProps<'div'>, 'onToggle'> {\n /** collapsed once the agent is done, expanded when people open it. */\n state?: ThinkingState\n /** The summary, e.g. \"Thought for 2m 45s\". */\n label?: React.ReactNode\n steps?: ThinkingStep[]\n /** The mark beside the summary. */\n indicator?: ThinkingIndicator\n onToggle?: (open: boolean) => void\n}\n\nexport function Thinking({\n state = 'collapsed',\n label = 'Thought',\n steps = [],\n indicator = 'tetris',\n onToggle,\n className,\n ...props\n}: ThinkingProps) {\n const [open, setOpen] = React.useState(state === 'expanded')\n React.useEffect(() => setOpen(state === 'expanded'), [state])\n const bodyId = `${React.useId()}-steps`\n\n return (\n <div data-slot=\"thinking\" data-state={open ? 'expanded' : 'collapsed'} className={cn('w-full', className)} {...props}>\n <button\n type=\"button\"\n aria-expanded={open}\n aria-controls={bodyId}\n onClick={() => {\n setOpen(!open)\n onToggle?.(!open)\n }}\n className=\"group flex w-fit cursor-pointer items-center gap-3 rounded-md p-1 outline-none select-none focus-visible:[box-shadow:0_0_0_2px_var(--action-focus-ring)]\"\n >\n <ThinkingMark indicator={indicator} />\n <span className=\"text-sm whitespace-nowrap text-text-muted\">{label}</span>\n <NavArrowDown\n aria-hidden\n className={cn(\n 'size-icon-size-sm shrink-0 text-text-muted transition-transform duration-(--duration-base) ease-(--ease-out) [stroke-width:1.875]',\n open && 'rotate-180',\n )}\n />\n </button>\n {/* The Accordion's motion (satin-expand): the body grows down from under the header, which\n never moves, and its steps settle in from the top edge; closing is quicker. */}\n <div id={bodyId} data-state={open ? 'open' : 'closed'} className=\"satin-expand\">\n <div>\n <div className=\"flex gap-3 pt-2 pl-1\">\n <div aria-hidden className=\"relative w-4 shrink-0 self-stretch\">\n <div className=\"absolute inset-y-0 left-1/2 w-px -translate-x-1/2 bg-linear-to-b from-component-rail-edge via-component-rail-center to-component-rail-edge\" />\n </div>\n <ol className=\"flex min-w-0 flex-1 flex-col gap-2\">\n {steps.map((step, i) => (\n <li key={i} className=\"min-w-0\">\n <Step step={step} />\n </li>\n ))}\n </ol>\n </div>\n </div>\n </div>\n </div>\n )\n}\n\nfunction Step({ step }: { step: ThinkingStep }) {\n switch (step.type) {\n case 'text':\n return <p className=\"text-body text-text-muted\">{step.text}</p>\n case 'more':\n return <p className=\"text-sm whitespace-nowrap text-text-muted\">{step.label}</p>\n case 'source':\n return (\n <div className=\"flex min-w-0 items-center gap-3 p-1 text-sm\">\n <span className=\"flex size-4 shrink-0 items-center justify-center overflow-clip rounded-xs [&>*]:size-4\">\n {step.icon}\n </span>\n <span className=\"max-w-full shrink-0 truncate text-text-default\">{step.label}</span>\n {step.meta != null && <span className=\"min-w-0 flex-1 truncate text-text-muted\">{step.meta}</span>}\n </div>\n )\n case 'tool':\n return (\n <div className=\"flex min-w-0 items-center gap-2 p-1 text-sm [&>svg]:size-icon-size [&>svg]:shrink-0 [&>svg]:text-text-muted [&>svg]:[stroke-width:1.875]\">\n {step.icon ?? <EditPencil />}\n <span className=\"shrink-0 whitespace-nowrap text-text-default\">{step.label}</span>\n <span className=\"min-w-0 flex-1 truncate font-mono tracking-normal text-text-muted\">{step.target}</span>\n {(step.added != null || step.removed != null) && (\n <span className=\"flex shrink-0 gap-1.5 font-mono tracking-normal whitespace-nowrap\">\n {step.added != null && <span className=\"text-status-green-fg\">{step.added}</span>}\n {step.removed != null && <span className=\"text-status-red-fg\">{step.removed}</span>}\n </span>\n )}\n {step.meta != null && <span className=\"shrink-0 whitespace-nowrap text-text-muted\">{step.meta}</span>}\n </div>\n )\n default:\n return (\n <div className=\"flex min-w-0 items-center gap-3 p-1 text-sm\">\n <Check aria-hidden className=\"size-icon-size-sm shrink-0 text-status-green-fg [stroke-width:1.875]\" />\n <span className=\"max-w-full shrink-0 truncate text-text-default\">{step.label}</span>\n {step.meta != null && <span className=\"min-w-0 flex-1 truncate text-text-muted\">{step.meta}</span>}\n </div>\n )\n }\n}\n\n/** thinking/_mark: the tetris board filled, or the flappy bird at rest. */\nfunction ThinkingMark({ indicator }: { indicator: ThinkingIndicator }) {\n return indicator === 'flappy' ? <FlappySprite size={16} run={false} /> : <TetrisStill />\n}\n"]}
|
package/chunk-FDKIX4DC.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/checkbox.tsx"],"names":["CheckboxPrimitive"],"mappings":";;;;;AAqBO,SAAS,QAAA,CAAS,EAAE,SAAA,EAAW,KAAA,EAAO,WAAA,EAAa,YAAY,MAAA,EAAQ,EAAA,EAAI,GAAG,KAAA,EAAM,EAAkB;AAC3G,EAAA,MAAM,SAAe,KAAA,CAAA,KAAA,EAAM;AAC3B,EAAA,MAAM,QAAQ,EAAA,IAAM,MAAA;AACpB,EAAA,MAAM,OAAA,GAAU,KAAA,GAAQ,CAAA,EAAG,KAAK,CAAA,MAAA,CAAA,GAAW,MAAA;AAC3C,EAAA,MAAM,aAAA,GAAgB,WAAA,GAAc,CAAA,EAAG,KAAK,CAAA,YAAA,CAAA,GAAiB,MAAA;AAE7D,EAAA,MAAM,GAAA,mBACJ,GAAA;AAAA,IAACA,UAAA,CAAkB,IAAA;AAAA,IAAlB;AAAA,MACC,EAAA,EAAI,KAAA;AAAA,MACJ,WAAA,EAAU,UAAA;AAAA,MACV,iBAAA,EAAiB,OAAA;AAAA,MACjB,kBAAA,EAAkB,aAAA;AAAA,MAClB,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA;AAAA,MAC7C,GAAG,KAAA;AAAA,MAGJ,QAAA,kBAAA,GAAA,CAACA,UAAA,CAAkB,SAAA,EAAlB,EAA4B,SAAA,EAAU,sCAAA,EAErC,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,SAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,aAAA,EAAW,IAAA,EACpE,QAAA,EAAA,KAAA,CAAM,OAAA,KAAY,eAAA,uBAChB,MAAA,EAAA,EAAK,CAAA,EAAE,aAAA,EAAc,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,MAAA,EAAO,aAAA,EAAc,SAAQ,CAAA,mBAErF,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,CAAA,EAAE,4CAAA;AAAA,UACF,MAAA,EAAO,cAAA;AAAA,UACP,WAAA,EAAY,MAAA;AAAA,UACZ,aAAA,EAAc,OAAA;AAAA,UACd,cAAA,EAAe;AAAA;AAAA,SAGrB,CAAA,EACF;AAAA;AAAA,GACF;AAGF,EAAA,IAAI,CAAC,KAAA,IAAS,CAAC,WAAA,EAAa,OAAO,GAAA;AAEnC,EAAA;AAAA;AAAA,oBAEE,IAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,KAAA;AAAA,QACT,WAAA,EAAU,gBAAA;AAAA,QAEV,SAAA,EAAW,EAAA,CAAG,oIAAA,EAAsI,SAAA,KAAc,WAAW,kCAAkC,CAAA;AAAA,QAE9M,QAAA,EAAA;AAAA,UAAA,GAAA;AAAA,0BACD,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EACZ,QAAA,EAAA;AAAA,YAAA,KAAA,wBACE,MAAA,EAAA,EAAK,EAAA,EAAI,OAAA,EAAS,SAAA,EAAU,iDAC1B,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,YAED,+BACC,GAAA,CAAC,MAAA,EAAA,EAAK,IAAI,aAAA,EAAe,SAAA,EAAU,mCAChC,QAAA,EAAA,WAAA,EACH;AAAA,WAAA,EAEJ;AAAA;AAAA;AAAA;AACF;AAEJ","file":"chunk-FDKIX4DC.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { Checkbox as CheckboxPrimitive } from 'radix-ui'\nimport { cn } from '../lib/utils'\n\n/**\n * Checkbox, 1:1 with the uiKit `checkboxBase` (849:57531) and `checkbox` (849:57577) sets:\n * a 16px box, radius-sm, with checked and indeterminate states and an optional label and\n * description on either side, both 14px whatever the theme's body size (label medium,\n * description regular). With a label or description the whole field is a `<label>`, so a\n * click anywhere on it (box, label, description) toggles the box, and hovering it hovers the\n * box; the label names the box, the description is wired up with `aria-describedby`. The look of every state lives in styles/components.css.\n */\nexport interface CheckboxProps extends React.ComponentProps<typeof CheckboxPrimitive.Root> {\n label?: React.ReactNode\n description?: React.ReactNode\n /** Which side of the text the box sits on. */\n placement?: 'left' | 'right'\n}\n\nexport function Checkbox({ className, label, description, placement = 'left', id, ...props }: CheckboxProps) {\n const autoId = React.useId()\n const boxId = id ?? autoId\n const labelId = label ? `${boxId}-label` : undefined\n const descriptionId = description ? `${boxId}-description` : undefined\n\n const box = (\n <CheckboxPrimitive.Root\n id={boxId}\n data-slot=\"checkbox\"\n aria-labelledby={labelId}\n aria-describedby={descriptionId}\n className={cn('peer satin-checkbox', className)}\n {...props}\n >\n {/* -1px so the 16px glyph sits on the box, not inside its 1px border. */}\n <CheckboxPrimitive.Indicator className=\"-m-px grid size-4 place-items-center\">\n {/* The Check and Indeterminate glyphs from Figma, 16px at 1.25. */}\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n {props.checked === 'indeterminate' ? (\n <path d=\"M3.6 8H12.4\" stroke=\"currentColor\" strokeWidth=\"1.25\" strokeLinecap=\"round\" />\n ) : (\n <path\n d=\"M3.33333 8.66667L6 11.3333L12.6667 4.66667\"\n stroke=\"currentColor\"\n strokeWidth=\"1.25\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n )}\n </svg>\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n )\n\n if (!label && !description) return box\n\n return (\n // The whole field is the <label>: the control, its label and its description all toggle it.\n <label\n htmlFor={boxId}\n data-slot=\"checkbox-field\"\n // The 16px box sits on the middle of the label's first 20px line.\n className={cn('flex cursor-pointer items-start gap-2 has-disabled:cursor-not-allowed has-data-disabled:cursor-not-allowed [&>:first-child]:mt-0.5', placement === 'right' && 'flex-row-reverse justify-between')}\n >\n {box}\n <div className=\"grid gap-0.5 text-base\">\n {label && (\n <span id={labelId} className=\"block leading-5 font-medium text-text-default\">\n {label}\n </span>\n )}\n {description && (\n <span id={descriptionId} className=\"block leading-5 text-text-muted\">\n {description}\n </span>\n )}\n </div>\n </label>\n )\n}\n"]}
|
package/chunk-GICKPMJU.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/file-upload.tsx"],"names":[],"mappings":";;;;;;;;AA+EO,IAAM,WAAA,GAAc,CAAC,CAAA,KAAc;AACxC,EAAA,IAAI,CAAA,GAAI,IAAA,EAAM,OAAO,CAAA,EAAG,CAAC,CAAA,EAAA,CAAA;AACzB,EAAA,IAAI,CAAA,GAAI,OAAO,IAAA,EAAM,OAAO,GAAG,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,IAAI,CAAC,CAAA,GAAA,CAAA;AACnD,EAAA,MAAM,EAAA,GAAK,KAAK,IAAA,GAAO,IAAA,CAAA;AACvB,EAAA,OAAO,CAAA,EAAG,EAAA,GAAK,EAAA,GAAK,EAAA,CAAG,OAAA,CAAQ,CAAC,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,EAAE,CAAC,CAAA,GAAA,CAAA;AACpD;AAGA,IAAM,MAAA,GAAS,CAAC,KAAA,EAAe,OAAA,KAAoB;AACjD,EAAA,MAAM,IAAA,GAAQ,QAAQ,OAAA,GAAW,GAAA;AACjC,EAAA,IAAI,QAAQ,IAAA,EAAM,OAAO,OAAO,IAAA,CAAK,KAAA,CAAM,IAAI,CAAC,CAAA;AAChD,EAAA,IAAI,KAAA,GAAQ,OAAO,IAAA,EAAM,OAAO,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,GAAO,IAAI,CAAC,CAAA;AAC9D,EAAA,MAAM,EAAA,GAAK,SAAS,IAAA,GAAO,IAAA,CAAA;AAC3B,EAAA,OAAO,EAAA,GAAK,EAAA,GAAA,CAAM,IAAA,IAAQ,IAAA,GAAO,OAAO,OAAA,CAAQ,CAAC,CAAA,GAAI,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,IAAA,IAAQ,IAAA,GAAO,KAAK,CAAC,CAAA;AAC9F,CAAA;AAEA,IAAM,GAAA,GAAM,CAAC,IAAA,KAAkB,IAAA,CAAK,SAAS,GAAG,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,EAAI,CAAG,aAAY,GAAI,EAAA;AAE3F,SAAS,OAAA,CAAQ,MAAY,MAAA,EAAiB;AAC5C,EAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AACpB,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,WAAA,EAAY;AACnC,EAAA,MAAM,CAAA,GAAI,CAAA,CAAA,EAAI,GAAA,CAAI,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAC5B,EAAA,OAAO,OACJ,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAK,CAAE,aAAa,CAAA,CACjC,OAAO,OAAO,CAAA,CACd,KAAK,CAAC,IAAA,KAAU,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,GAAI,IAAA,KAAS,CAAA,GAAI,IAAA,CAAK,SAAS,IAAI,CAAA,GAAI,IAAA,CAAK,UAAA,CAAW,KAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,GAAI,SAAS,IAAK,CAAA;AAClI;AAGO,SAAS,YAAY,IAAA,EAAc;AACxC,EAAA,MAAM,CAAA,GAAI,IAAI,IAAI,CAAA;AAClB,EAAA,IAAI,MAAM,KAAA,EAAO,uBAAO,GAAA,CAAC,QAAA,EAAA,EAAS,MAAK,KAAA,EAAM,CAAA;AAC7C,EAAA,IAAI,CAAC,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,SAAS,CAAA,CAAE,QAAA,CAAS,CAAC,CAAA,EAAG,uBAAO,GAAA,CAAC,QAAA,EAAA,EAAS,MAAK,MAAA,EAAO,CAAA;AAChF,EAAA,uBAAO,GAAA,CAAC,IAAA,EAAA,EAAK,aAAA,EAAW,IAAA,EAAC,WAAU,qDAAA,EAAsD,CAAA;AAC3F;AAEO,SAAS,UAAA,CAAW;AAAA,EACzB,QAAQ,EAAC;AAAA,EACT,MAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA,GAAW,IAAA;AAAA,EACX,QAAA,GAAW,KAAA;AAAA,EACX,KAAA,GAAQ,iBAAA;AAAA,EACR,SAAA,GAAY,gBAAA;AAAA,EACZ,WAAA;AAAA,EACA,WAAA,GAAc,cAAA;AAAA,EACd,QAAA;AAAA,EACA,YAAA;AAAA,EACA,eAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAoB;AAClB,EAAA,MAAM,QAAA,GAAiB,aAAyB,IAAI,CAAA;AACpD,EAAA,MAAM,gBAAsB,KAAA,CAAA,KAAA,EAAM;AAClC,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAU,eAAS,KAAK,CAAA;AAGpD,EAAA,MAAM,KAAA,GAAc,aAAO,CAAC,CAAA;AAC5B,EAAA,MAAM,IAAA,GAAO,QAAA,IAAY,KAAA,CAAM,YAAY,CAAA,KAAM,MAAA;AAEjD,EAAA,MAAM,IAAA,GAAO,CAAC,IAAA,KAA0B;AACtC,IAAA,IAAI,CAAC,QAAQ,QAAA,EAAU;AACvB,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,IAAI,EAAE,KAAA,CAAM,CAAA,EAAG,QAAA,GAAW,MAAA,GAAY,CAAC,CAAA;AACjE,IAAA,MAAM,KAAa,EAAC;AACpB,IAAA,MAAM,WAAkC,EAAC;AACzC,IAAA,KAAA,MAAW,QAAQ,MAAA,EAAQ;AACzB,MAAA,IAAI,CAAC,OAAA,CAAQ,IAAA,EAAM,MAAM,CAAA,EAAG,QAAA,CAAS,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAS,sBAAsB,CAAA;AAAA,WAAA,IACxF,WAAW,IAAA,IAAQ,IAAA,CAAK,IAAA,GAAO,OAAA,WAAkB,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,QAAQ,OAAA,EAAS,CAAA,YAAA,EAAe,YAAY,OAAO,CAAC,IAAI,CAAA;AAAA,WAClI,EAAA,CAAG,KAAK,IAAI,CAAA;AAAA,IACnB;AACA,IAAA,IAAI,EAAA,CAAG,MAAA,EAAQ,YAAA,GAAe,EAAE,CAAA;AAChC,IAAA,IAAI,QAAA,CAAS,MAAA,EAAQ,eAAA,GAAkB,QAAQ,CAAA;AAAA,EACjD,CAAA;AAEA,EAAA,MAAM,OAAO,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,MAAM,CAAA;AACpD,EAAA,MAAM,OAAO,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,MAAM,CAAA;AAEpD,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,WAAA,EAAU,aAAA,EAAc,SAAA,EAAW,GAAG,4BAAA,EAA8B,SAAS,CAAA,EAAI,GAAG,KAAA,EACvF,QAAA,EAAA;AAAA,oBAAA,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,WAAA,EAAU,kBAAA;AAAA,QACV,iBAAe,IAAA,IAAQ,MAAA;AAAA,QACvB,iBAAe,QAAA,IAAY,MAAA;AAAA,QAC3B,WAAA,EAAa,CAAC,CAAA,KAAM;AAClB,UAAA,IAAI,YAAY,CAAC,CAAA,CAAE,aAAa,KAAA,CAAM,QAAA,CAAS,OAAO,CAAA,EAAG;AACzD,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,KAAA,CAAM,OAAA,IAAW,CAAA;AACjB,UAAA,WAAA,CAAY,IAAI,CAAA;AAAA,QAClB,CAAA;AAAA,QACA,UAAA,EAAY,CAAC,CAAA,KAAM;AACjB,UAAA,IAAI,YAAY,CAAC,CAAA,CAAE,aAAa,KAAA,CAAM,QAAA,CAAS,OAAO,CAAA,EAAG;AACzD,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,CAAA,CAAE,aAAa,UAAA,GAAa,MAAA;AAAA,QAC9B,CAAA;AAAA,QACA,aAAa,MAAM;AACjB,UAAA,KAAA,CAAM,UAAU,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAA,CAAM,UAAU,CAAC,CAAA;AAC7C,UAAA,IAAI,KAAA,CAAM,OAAA,KAAY,CAAA,EAAG,WAAA,CAAY,KAAK,CAAA;AAAA,QAC5C,CAAA;AAAA,QACA,MAAA,EAAQ,CAAC,CAAA,KAAM;AACb,UAAA,IAAI,QAAA,EAAU;AACd,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,KAAA,CAAM,OAAA,GAAU,CAAA;AAChB,UAAA,WAAA,CAAY,KAAK,CAAA;AACjB,UAAA,IAAA,CAAK,CAAA,CAAE,aAAa,KAAK,CAAA;AAAA,QAC3B,CAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,+GAAA;AAAA,UACA,yFAAA;AAAA,UACA,wEAAA;AAAA,UACA;AAAA,SACF;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,cAAW,IAAA,EAAY,CAAA;AAAA,0BACxB,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,yCAAA,EAA2C,QAAA,EAAA,IAAA,GAAO,YAAY,KAAA,EAAM,CAAA;AAAA,YAChF,+BACC,GAAA,CAAC,GAAA,EAAA,EAAE,IAAI,aAAA,EAAe,SAAA,EAAU,2BAC7B,QAAA,EAAA,WAAA,EACH;AAAA,WAAA,EAEJ,CAAA;AAAA,0BACA,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,WAAA;AAAA,cACR,UAAU,QAAA,IAAY,IAAA;AAAA,cACtB,kBAAA,EAAkB,cAAc,aAAA,GAAgB,MAAA;AAAA,cAChD,SAAS,MAAO,QAAA,GAAW,UAAS,GAAI,QAAA,CAAS,SAAS,KAAA,EAAM;AAAA,cAE/D,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,0BACA,GAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,GAAA,EAAK,QAAA;AAAA,cACL,IAAA,EAAK,MAAA;AAAA,cACL,MAAA,EAAM,IAAA;AAAA,cACN,QAAA,EAAU,EAAA;AAAA,cACV,MAAA;AAAA,cACA,QAAA;AAAA,cACA,QAAA;AAAA,cACA,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,gBAAA,IAAA,CAAK,CAAA,CAAE,cAAc,KAAK,CAAA;AAC1B,gBAAA,CAAA,CAAE,cAAc,KAAA,GAAQ,EAAA;AAAA,cAC1B;AAAA;AAAA;AACF;AAAA;AAAA,KACF;AAAA,IAEC,IAAA,CAAK,MAAA,GAAS,CAAA,oBACb,GAAA,CAAC,IAAA,EAAA,EAAG,WAAU,qBAAA,EAAsB,YAAA,EAAW,OAAA,EAC5C,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,sBACT,GAAA,CAAC,IAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,cAAA,EAAA,EAAe,IAAA,EAAM,CAAA,EAAG,QAAA,EAAoB,QAAA,EAAoB,CAAA,EAAA,EAD1D,CAAA,CAAE,EAEX,CACD,CAAA,EACH,CAAA;AAAA,IAGD,IAAA,CAAK,MAAA,GAAS,CAAA,oBACb,GAAA,CAAC,QAAG,SAAA,EAAU,qBAAA,EAAsB,YAAA,EAAW,gBAAA,EAC5C,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,yBACR,IAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,MAAM,CAAA,CAAE,IAAA;AAAA,QACR,IAAA,EAAM,CAAC,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA,CAAE,WAAA,IAAe,CAAA,CAAE,IAAA,IAAQ,OAAO,WAAA,CAAY,CAAA,CAAE,IAAI,CAAA,GAAI,IAAI,EAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,QAAK,CAAA;AAAA,QACzG,IAAA,EAAM,CAAA,CAAE,IAAA,IAAQ,WAAA,CAAY,EAAE,IAAI,CAAA;AAAA,QAClC,QAAA,EAAU,QAAA,GAAW,MAAM,QAAA,CAAS,CAAC,CAAA,GAAI,MAAA;AAAA,QACzC,MAAA,EAAQ,MAAA,GAAS,MAAM,MAAA,CAAO,CAAC,CAAA,GAAI,MAAA;AAAA,QAGnC,SAAA,EAAU;AAAA;AAAA,KACZ,EAAA,EAVO,CAAA,CAAE,EAWX,CACD,CAAA,EACH;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAGO,SAAS,cAAA,CAAe;AAAA,EAC7B,IAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,IAAI,IAAA,CAAK,WAAW,OAAA,EAAS;AAC3B,IAAA,uBACE,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,WAAA,EAAU,kBAAA;AAAA,QACV,aAAA,EAAY,OAAA;AAAA,QACZ,IAAA,EAAK,OAAA;AAAA,QACL,SAAA,EAAW,EAAA,CAAG,4GAAA,EAA8G,SAAS,CAAA;AAAA,QAErI,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,aAAA,EAAA,EAAc,aAAA,EAAW,IAAA,EAAC,SAAA,EAAU,iEAAA,EAAkE,CAAA;AAAA,0BACvG,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uDAAA,EAAyD,eAAK,IAAA,EAAK,CAAA;AAAA,8BAClF,MAAA,EAAA,EAAK,SAAA,EAAU,6BAAA,EAA+B,QAAA,EAAA,IAAA,CAAK,SAAS,eAAA,EAAgB,CAAA;AAAA,UAC5E,QAAA,oBACC,GAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,UAAA,EAAW,MAAK,IAAA,EAAK,KAAA,EAAM,SAAA,EAAU,QAAA,EAAQ,IAAA,EAAC,YAAA,EAAY,UAAU,IAAA,CAAK,IAAI,CAAA,CAAA,EAAI,OAAA,EAAS,MAAM,QAAA,CAAS,IAAI,CAAA,EAC3H,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAM,aAAA,EAAW,IAAA,EAAC,CAAA,EACrB;AAAA;AAAA;AAAA,KAEJ;AAAA,EAEJ;AAEA,EAAA,MAAM,KAAA,GAAQ,KAAK,QAAA,IAAY,IAAA;AAC/B,EAAA,MAAM,CAAA,GAAI,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,QAAS,CAAC,CAAA,GAAI,CAAA;AAC/D,EAAA,MAAM,IAAA,GAAO,CAAC,KAAA,GACV,eAAA,GACA,IAAA,CAAK,IAAA,IAAQ,IAAA,GACX,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,IAAA,EAAM,CAAC,CAAC,CAAA,IAAA,EAAO,WAAA,CAAY,IAAA,CAAK,IAAI,CAAC,CAAA,MAAA,EAAM,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,CAAA,GACvE,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,CAAA;AAEtB,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,kBAAA;AAAA,MACV,aAAA,EAAY,WAAA;AAAA,MACZ,SAAA,EAAW,EAAA,CAAG,wFAAA,EAA0F,SAAS,CAAA;AAAA,MAEjH,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,WAAU,gGAAA,EACb,QAAA,EAAA,IAAA,CAAK,QAAQ,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA,EACrC,CAAA;AAAA,wBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sCAAA,EACb,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uDAAA,EAAyD,QAAA,EAAA,IAAA,CAAK,IAAA,EAAK,CAAA;AAAA,4BACnF,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uCAAA,EAAyC,QAAA,EAAA,IAAA,EAAK;AAAA,WAAA,EAChE,CAAA;AAAA,0BACA,GAAA,CAAC,QAAA,EAAA,EAAS,KAAA,EAAO,KAAA,GAAQ,CAAA,GAAI,MAAA,EAAW,SAAA,EAAW,KAAA,EAAO,YAAA,EAAY,CAAA,UAAA,EAAa,IAAA,CAAK,IAAI,CAAA,CAAA,EAAI;AAAA,SAAA,EAClG,CAAA;AAAA,QACC,QAAA,oBACC,GAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,UAAA,EAAW,MAAK,IAAA,EAAK,KAAA,EAAM,SAAA,EAAU,QAAA,EAAQ,IAAA,EAAC,YAAA,EAAY,UAAU,IAAA,CAAK,IAAI,CAAA,CAAA,EAAI,OAAA,EAAS,MAAM,QAAA,CAAS,IAAI,CAAA,EAC3H,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAM,aAAA,EAAW,IAAA,EAAC,CAAA,EACrB;AAAA;AAAA;AAAA,GAEJ;AAEJ;AAGA,SAAS,UAAA,CAAW,EAAE,IAAA,EAAK,EAAuB;AAChD,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,aAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAW,EAAA;AAAA,QACT,yIAAA;AAAA,QACA,OAAO,YAAA,GAAe;AAAA,OACxB;AAAA,MAEA,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,SAAA,EAAU,kBAAA,EACpE,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,4HAAA;AAAA,YACF,IAAA,EAAK;AAAA;AAAA,SACP;AAAA,4BACC,MAAA,EAAA,EAAK,CAAA,EAAE,uEAAsE,IAAA,EAAK,cAAA,EAAe,SAAQ,KAAA,EAAM,CAAA;AAAA,wBAChH,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,0CAAA;AAAA,YACF,MAAA,EAAO,iBAAA;AAAA,YACP,WAAA,EAAY,MAAA;AAAA,YACZ,aAAA,EAAc,OAAA;AAAA,YACd,cAAA,EAAe;AAAA;AAAA;AACjB,OAAA,EACF;AAAA;AAAA,GACF;AAEJ","file":"chunk-GICKPMJU.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { Page, WarningCircle, Xmark } from 'iconoir-react'\nimport { cn } from '../lib/utils'\nimport { Attachment, FileIcon } from './attachment'\nimport { Button } from './button'\nimport { Progress } from './progress'\n\n/**\n * FileUpload, 1:1 with the uiKit `FileUpload` set (4068:3717), its `FileUploadItem` rows\n * (4068:3453) and the `fileUpload/_icon` mark (4068:3405).\n *\n * The drop zone is the dashed EmptyState: a 40px bg/muted tile with a filled file and an up\n * arrow, the title (text/base medium), what it takes (Body/md, text/muted) and Browse files\n * (secondary), 16 apart, 32 / 24 in, radius-2xl. While files are dragged over it the zone fills\n * bg/hover with a status/brand dashed border, the tile turns bg/card, the title says \"Drop to\n * upload\" and Browse files is disabled.\n *\n * Under the zone, 8 apart, one row per file the app is handling (`files`):\n * - uploading: the type icon on a 36px tile, the name and \"1.0 of 2.4 MB · 40%\" over a small\n * Progress (indeterminate while `progress` is left out), Cancel on the right.\n * - error: status/red ground and border, a red warning mark, the name, what went wrong, Remove.\n * - done: the file as an lg Attachment, full width, one under another.\n *\n * Dropping or browsing checks every file against `accept` and `maxSize`. What passes goes to\n * `onFilesAdded`; what fails goes to `onFilesRejected` with the reason, so the app can show it\n * as an error row. The upload itself is the app's: it keeps `files` up to date.\n */\nexport type FileUploadStatus = 'uploading' | 'error' | 'done'\n\nexport interface FileUploadFile {\n id: string\n name: string\n /** In bytes; feeds \"1.0 of 2.4 MB\" and the attachment's meta. */\n size?: number\n status: FileUploadStatus\n /** 0–100 while uploading; left out, the bar runs indeterminate and the meta says \"Waiting…\". */\n progress?: number\n /** What went wrong, for `error`. */\n error?: React.ReactNode\n /** Type icon; picked from the name when left out. */\n icon?: React.ReactNode\n}\n\nexport interface FileUploadRejection {\n file: File\n reason: 'type' | 'size'\n /** A ready message, e.g. \"Type not supported\" or \"Larger than 10 MB\". */\n message: string\n}\n\nexport interface FileUploadProps extends Omit<React.ComponentProps<'div'>, 'title' | 'onDrop'> {\n files?: FileUploadFile[]\n /** As on `<input type=\"file\">`: MIME types, `image/*` or extensions, comma separated. */\n accept?: string\n /** Largest file, in bytes. */\n maxSize?: number\n multiple?: boolean\n disabled?: boolean\n title?: React.ReactNode\n /** Shown while files are dragged over the zone. */\n dropTitle?: React.ReactNode\n /** What the zone takes, e.g. \"PDF, images, CSV · up to 10 MB\". */\n description?: React.ReactNode\n browseLabel?: string\n /** Called instead of opening the file picker (demos, or an app that brings its own picker). */\n onBrowse?: () => void\n onFilesAdded?: (files: File[]) => void\n onFilesRejected?: (rejections: FileUploadRejection[]) => void\n /** Cancel on an uploading row. */\n onCancel?: (file: FileUploadFile) => void\n /** Remove on an error row or a done chip. */\n onRemove?: (file: FileUploadFile) => void\n onOpen?: (file: FileUploadFile) => void\n /** Shows the drag-over look (state sheets, docs). */\n 'data-force'?: 'drag'\n}\n\nexport const formatBytes = (n: number) => {\n if (n < 1024) return `${n} B`\n if (n < 1024 * 1024) return `${Math.round(n / 1024)} KB`\n const mb = n / (1024 * 1024)\n return `${mb < 10 ? mb.toFixed(1) : Math.round(mb)} MB`\n}\n\n/** The sent part in the total's own unit, so it reads \"1.0 of 2.4 MB\". */\nconst sentOf = (total: number, percent: number) => {\n const sent = (total * percent) / 100\n if (total < 1024) return String(Math.round(sent))\n if (total < 1024 * 1024) return String(Math.round(sent / 1024))\n const mb = total / (1024 * 1024)\n return mb < 10 ? (sent / (1024 * 1024)).toFixed(1) : String(Math.round(sent / (1024 * 1024)))\n}\n\nconst ext = (name: string) => (name.includes('.') ? name.split('.').pop()!.toLowerCase() : '')\n\nfunction accepts(file: File, accept?: string) {\n if (!accept) return true\n const type = file.type.toLowerCase()\n const e = `.${ext(file.name)}`\n return accept\n .split(',')\n .map((s) => s.trim().toLowerCase())\n .filter(Boolean)\n .some((rule) => (rule.startsWith('.') ? rule === e : rule.endsWith('/*') ? type.startsWith(rule.slice(0, -1)) : rule === type))\n}\n\n/** The type icon for a file name: PDF, spreadsheet, or a plain page. */\nexport function fileIconFor(name: string) {\n const e = ext(name)\n if (e === 'pdf') return <FileIcon type=\"pdf\" />\n if (['xls', 'xlsx', 'csv', 'numbers'].includes(e)) return <FileIcon type=\"xlsx\" />\n return <Page aria-hidden className=\"size-icon-size text-text-muted [stroke-width:1.875]\" />\n}\n\nexport function FileUpload({\n files = [],\n accept,\n maxSize,\n multiple = true,\n disabled = false,\n title = 'Drop files here',\n dropTitle = 'Drop to upload',\n description,\n browseLabel = 'Browse files',\n onBrowse,\n onFilesAdded,\n onFilesRejected,\n onCancel,\n onRemove,\n onOpen,\n className,\n ...props\n}: FileUploadProps) {\n const inputRef = React.useRef<HTMLInputElement>(null)\n const descriptionId = React.useId()\n const [dragging, setDragging] = React.useState(false)\n // dragenter/dragleave fire for every child; count them so the zone only lets go when the\n // pointer really leaves it.\n const depth = React.useRef(0)\n const over = dragging || props['data-force'] === 'drag'\n\n const take = (list: FileList | null) => {\n if (!list || disabled) return\n const picked = Array.from(list).slice(0, multiple ? undefined : 1)\n const ok: File[] = []\n const rejected: FileUploadRejection[] = []\n for (const file of picked) {\n if (!accepts(file, accept)) rejected.push({ file, reason: 'type', message: 'Type not supported' })\n else if (maxSize != null && file.size > maxSize) rejected.push({ file, reason: 'size', message: `Larger than ${formatBytes(maxSize)}` })\n else ok.push(file)\n }\n if (ok.length) onFilesAdded?.(ok)\n if (rejected.length) onFilesRejected?.(rejected)\n }\n\n const rows = files.filter((f) => f.status !== 'done')\n const done = files.filter((f) => f.status === 'done')\n\n return (\n <div data-slot=\"file-upload\" className={cn('flex w-full flex-col gap-2', className)} {...props}>\n <div\n data-slot=\"file-upload-zone\"\n data-dragging={over || undefined}\n data-disabled={disabled || undefined}\n onDragEnter={(e) => {\n if (disabled || !e.dataTransfer.types.includes('Files')) return\n e.preventDefault()\n depth.current += 1\n setDragging(true)\n }}\n onDragOver={(e) => {\n if (disabled || !e.dataTransfer.types.includes('Files')) return\n e.preventDefault()\n e.dataTransfer.dropEffect = 'copy'\n }}\n onDragLeave={() => {\n depth.current = Math.max(0, depth.current - 1)\n if (depth.current === 0) setDragging(false)\n }}\n onDrop={(e) => {\n if (disabled) return\n e.preventDefault()\n depth.current = 0\n setDragging(false)\n take(e.dataTransfer.files)\n }}\n className={cn(\n 'flex flex-col items-center gap-4 rounded-2xl border border-dashed border-border-default px-6 py-8 text-center',\n 'transition-[background-color,border-color] duration-(--duration-fast) ease-(--ease-out)',\n 'data-[dragging]:border-status-brand-border data-[dragging]:bg-bg-hover',\n 'data-[disabled]:opacity-50',\n )}\n >\n <UploadMark over={over} />\n <div className=\"flex w-full flex-col items-center gap-1\">\n <p className=\"text-base font-medium text-text-default\">{over ? dropTitle : title}</p>\n {description && (\n <p id={descriptionId} className=\"text-sm text-text-muted\">\n {description}\n </p>\n )}\n </div>\n <Button\n variant=\"secondary\"\n disabled={disabled || over}\n aria-describedby={description ? descriptionId : undefined}\n onClick={() => (onBrowse ? onBrowse() : inputRef.current?.click())}\n >\n {browseLabel}\n </Button>\n <input\n ref={inputRef}\n type=\"file\"\n hidden\n tabIndex={-1}\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n onChange={(e) => {\n take(e.currentTarget.files)\n e.currentTarget.value = ''\n }}\n />\n </div>\n\n {rows.length > 0 && (\n <ul className=\"flex flex-col gap-2\" aria-label=\"Files\">\n {rows.map((f) => (\n <li key={f.id}>\n <FileUploadItem file={f} onCancel={onCancel} onRemove={onRemove} />\n </li>\n ))}\n </ul>\n )}\n\n {done.length > 0 && (\n <ul className=\"flex flex-col gap-2\" aria-label=\"Attached files\">\n {done.map((f) => (\n <li key={f.id}>\n <Attachment\n name={f.name}\n meta={[ext(f.name).toUpperCase(), f.size != null ? formatBytes(f.size) : null].filter(Boolean).join(' · ')}\n icon={f.icon ?? fileIconFor(f.name)}\n onRemove={onRemove ? () => onRemove(f) : undefined}\n onOpen={onOpen ? () => onOpen(f) : undefined}\n // Full width, one under another: the name takes the room and the remove button\n // sits at the right edge.\n className=\"flex w-full [&_[data-attachment-main]]:flex-1 [&_[data-attachment-name]]:max-w-none\"\n />\n </li>\n ))}\n </ul>\n )}\n </div>\n )\n}\n\n/** One file while it uploads or after it failed (FileUploadItem 4068:3453). */\nexport function FileUploadItem({\n file,\n onCancel,\n onRemove,\n className,\n}: {\n file: FileUploadFile\n onCancel?: (file: FileUploadFile) => void\n onRemove?: (file: FileUploadFile) => void\n className?: string\n}) {\n if (file.status === 'error') {\n return (\n <div\n data-slot=\"file-upload-item\"\n data-status=\"error\"\n role=\"alert\"\n className={cn('flex items-center gap-2 rounded-xl border border-status-red-border bg-status-red-bg py-2 pr-2 pl-3 text-sm', className)}\n >\n <WarningCircle aria-hidden className=\"size-icon-size shrink-0 text-status-red-fg [stroke-width:1.875]\" />\n <span className=\"min-w-0 flex-1 truncate font-medium text-text-default\">{file.name}</span>\n <span className=\"shrink-0 text-status-red-fg\">{file.error ?? 'Upload failed'}</span>\n {onRemove && (\n <Button variant=\"tertiary\" size=\"xs\" shape=\"rounded\" iconOnly aria-label={`Remove ${file.name}`} onClick={() => onRemove(file)}>\n <Xmark aria-hidden />\n </Button>\n )}\n </div>\n )\n }\n\n const known = file.progress != null\n const p = known ? Math.min(100, Math.max(0, file.progress!)) : 0\n const meta = !known\n ? 'Waiting…'\n : file.size != null\n ? `${sentOf(file.size, p)} of ${formatBytes(file.size)} · ${Math.round(p)}%`\n : `${Math.round(p)}%`\n\n return (\n <div\n data-slot=\"file-upload-item\"\n data-status=\"uploading\"\n className={cn('flex items-center gap-2 rounded-xl border border-border-default bg-bg-card p-2 text-sm', className)}\n >\n <span className=\"flex size-9 shrink-0 items-center justify-center rounded-lg bg-bg-muted [&_svg]:size-icon-size\">\n {file.icon ?? fileIconFor(file.name)}\n </span>\n <div className=\"flex min-w-0 flex-1 flex-col gap-1.5\">\n <div className=\"flex items-center gap-2\">\n <span className=\"min-w-0 flex-1 truncate font-medium text-text-default\">{file.name}</span>\n <span className=\"shrink-0 text-text-muted tabular-nums\">{meta}</span>\n </div>\n <Progress value={known ? p : undefined} showValue={false} aria-label={`Uploading ${file.name}`} />\n </div>\n {onCancel && (\n <Button variant=\"tertiary\" size=\"xs\" shape=\"rounded\" iconOnly aria-label={`Cancel ${file.name}`} onClick={() => onCancel(file)}>\n <Xmark aria-hidden />\n </Button>\n )}\n </div>\n )\n}\n\n/** fileUpload/_icon: a filled file with its corner folded and an up arrow cut out of it. */\nfunction UploadMark({ over }: { over?: boolean }) {\n return (\n <span\n aria-hidden\n className={cn(\n 'flex size-10 shrink-0 items-center justify-center rounded-xl transition-[background-color] duration-(--duration-fast) ease-(--ease-out)',\n over ? 'bg-bg-card' : 'bg-bg-muted',\n )}\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" className=\"text-text-subtle\">\n <path\n d=\"M6 1.5H11.5V4.5C11.5 5.33 12.17 6 13 6H16V16.5C16 17.6 15.1 18.5 14 18.5H6C4.9 18.5 4 17.6 4 16.5V3.5C4 2.4 4.9 1.5 6 1.5Z\"\n fill=\"currentColor\"\n />\n <path d=\"M12.75 1.75L15.75 4.75H13.25C12.97 4.75 12.75 4.53 12.75 4.25V1.75Z\" fill=\"currentColor\" opacity=\"0.6\" />\n <path\n d=\"M10 15V9.25M7.75 11.5L10 9.25L12.25 11.5\"\n stroke=\"var(--bg-muted)\"\n strokeWidth=\"1.25\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n )\n}\n"]}
|
package/chunk-GQA24FYG.js
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { cn } from './chunk-H63FYCMY.js';
|
|
2
|
-
import 'react';
|
|
3
|
-
import { Accordion as Accordion$1 } from 'radix-ui';
|
|
4
|
-
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
5
|
-
|
|
6
|
-
function Accordion({ className, ...props }) {
|
|
7
|
-
return /* @__PURE__ */ jsx(Accordion$1.Root, { "data-slot": "accordion", className: cn("flex w-full flex-col", className), ...props });
|
|
8
|
-
}
|
|
9
|
-
function AccordionItem({ title, icon, children, className, "data-force": force, ...props }) {
|
|
10
|
-
return /* @__PURE__ */ jsxs(Accordion$1.Item, { "data-slot": "accordion-item", className: cn("border-b border-border-subtle py-1", className), ...props, children: [
|
|
11
|
-
/* @__PURE__ */ jsx(Accordion$1.Header, { className: "flex", children: /* @__PURE__ */ jsxs(
|
|
12
|
-
Accordion$1.Trigger,
|
|
13
|
-
{
|
|
14
|
-
"data-force": force,
|
|
15
|
-
className: cn(
|
|
16
|
-
"group flex h-10 w-full cursor-pointer items-center gap-3 rounded-lg px-2 text-left outline-none",
|
|
17
|
-
"transition-[background-color,box-shadow] duration-(--duration-fast) ease-(--ease-out)",
|
|
18
|
-
"hover:bg-bg-hover data-[force=hover]:bg-bg-hover",
|
|
19
|
-
"focus-visible:bg-bg-hover focus-visible:[box-shadow:0_0_0_2px_var(--action-focus-ring)]",
|
|
20
|
-
"data-[force=focus]:bg-bg-hover data-[force=focus]:[box-shadow:0_0_0_2px_var(--action-focus-ring)]",
|
|
21
|
-
"disabled:cursor-not-allowed disabled:opacity-50"
|
|
22
|
-
),
|
|
23
|
-
children: [
|
|
24
|
-
icon && /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "grid size-4 shrink-0 place-items-center text-text-muted [&_svg]:size-4 [&_svg]:[stroke-width:1.875]", children: icon }),
|
|
25
|
-
/* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 text-base leading-[21px] font-medium text-text-default", children: title }),
|
|
26
|
-
/* @__PURE__ */ jsx(
|
|
27
|
-
"svg",
|
|
28
|
-
{
|
|
29
|
-
width: "16",
|
|
30
|
-
height: "16",
|
|
31
|
-
viewBox: "0 0 16 16",
|
|
32
|
-
fill: "none",
|
|
33
|
-
"aria-hidden": true,
|
|
34
|
-
className: "shrink-0 text-text-muted transition-transform duration-(--duration-base) ease-(--ease-out) group-data-[state=open]:rotate-180",
|
|
35
|
-
children: /* @__PURE__ */ jsx("path", { d: "M4 6L8 10L12 6", stroke: "currentColor", strokeWidth: "1.25", strokeLinecap: "round", strokeLinejoin: "round" })
|
|
36
|
-
}
|
|
37
|
-
)
|
|
38
|
-
]
|
|
39
|
-
}
|
|
40
|
-
) }),
|
|
41
|
-
/* @__PURE__ */ jsx(Accordion$1.Content, { "data-slot": "accordion-content", className: "satin-accordion-content", children: /* @__PURE__ */ jsx(
|
|
42
|
-
"div",
|
|
43
|
-
{
|
|
44
|
-
className: cn(
|
|
45
|
-
"pt-1 pr-2 pb-3 text-base leading-[21px] text-text-muted",
|
|
46
|
-
// Lined up with the title: past the icon and its gap when there is one.
|
|
47
|
-
icon ? "pl-9" : "pl-2"
|
|
48
|
-
),
|
|
49
|
-
children
|
|
50
|
-
}
|
|
51
|
-
) })
|
|
52
|
-
] });
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
export { Accordion, AccordionItem };
|
|
56
|
-
//# sourceMappingURL=chunk-GQA24FYG.js.map
|
|
57
|
-
//# sourceMappingURL=chunk-GQA24FYG.js.map
|
package/chunk-GQA24FYG.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/accordion.tsx"],"names":["AccordionPrimitive"],"mappings":";;;;;AAuBO,SAAS,SAAA,CAAU,EAAE,SAAA,EAAW,GAAG,OAAM,EAAmB;AACjE,EAAA,uBAAO,GAAA,CAACA,WAAA,CAAmB,IAAA,EAAnB,EAAwB,WAAA,EAAU,WAAA,EAAY,SAAA,EAAW,EAAA,CAAG,sBAAA,EAAwB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AACrH;AAUO,SAAS,aAAA,CAAc,EAAE,KAAA,EAAO,IAAA,EAAM,QAAA,EAAU,WAAW,YAAA,EAAc,KAAA,EAAO,GAAG,KAAA,EAAM,EAAuB;AACrH,EAAA,uBACE,IAAA,CAACA,WAAA,CAAmB,IAAA,EAAnB,EAAwB,WAAA,EAAU,gBAAA,EAAiB,SAAA,EAAW,EAAA,CAAG,oCAAA,EAAsC,SAAS,CAAA,EAAI,GAAG,KAAA,EACtH,QAAA,EAAA;AAAA,oBAAA,GAAA,CAACA,WAAA,CAAmB,MAAA,EAAnB,EAA0B,SAAA,EAAU,MAAA,EACnC,QAAA,kBAAA,IAAA;AAAA,MAACA,WAAA,CAAmB,OAAA;AAAA,MAAnB;AAAA,QACC,YAAA,EAAY,KAAA;AAAA,QACZ,SAAA,EAAW,EAAA;AAAA,UACT,iGAAA;AAAA,UACA,uFAAA;AAAA,UACA,kDAAA;AAAA,UACA,yFAAA;AAAA,UACA,mGAAA;AAAA,UACA;AAAA,SACF;AAAA,QAEC,QAAA,EAAA;AAAA,UAAA,IAAA,wBACE,MAAA,EAAA,EAAK,aAAA,EAAW,IAAA,EAAC,SAAA,EAAU,uGACzB,QAAA,EAAA,IAAA,EACH,CAAA;AAAA,0BAEF,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uEAAA,EAAyE,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,0BAC/F,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAM,IAAA;AAAA,cACN,MAAA,EAAO,IAAA;AAAA,cACP,OAAA,EAAQ,WAAA;AAAA,cACR,IAAA,EAAK,MAAA;AAAA,cACL,aAAA,EAAW,IAAA;AAAA,cACX,SAAA,EAAU,+HAAA;AAAA,cAEV,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,gBAAA,EAAiB,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,MAAA,EAAO,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ;AAAA;AAAA;AACjH;AAAA;AAAA,KACF,EACF,CAAA;AAAA,wBACCA,WAAA,CAAmB,OAAA,EAAnB,EAA2B,WAAA,EAAU,mBAAA,EAAoB,WAAU,yBAAA,EAClE,QAAA,kBAAA,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,yDAAA;AAAA;AAAA,UAEA,OAAO,MAAA,GAAS;AAAA,SAClB;AAAA,QAEC;AAAA;AAAA,KACH,EACF;AAAA,GAAA,EACF,CAAA;AAEJ","file":"chunk-GQA24FYG.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { Accordion as AccordionPrimitive } from 'radix-ui'\nimport { cn } from '../lib/utils'\n\n/**\n * Accordion, 1:1 with the uiKit `Accordion / Item` set (4025:3554): sections under a\n * border/subtle rule, 4px top and bottom. The header is a 40px row, 8px in, radius-lg, with an\n * optional 16px lead icon (text/muted), the 14px medium title and a 16px chevron, 12px apart;\n * hover fills it bg/hover, keyboard focus adds the 2px focus ring. Open, the chevron turns up\n * and the content follows in 14px text/muted, 4 / 8 / 12 / 8 in, lined up with the title.\n *\n * Built on the Radix Accordion: the header is a button with aria-expanded, Enter or Space\n * toggles it, arrow keys move between headers. `type=\"single\"` keeps one section open\n * (`collapsible` lets it close too); `type=\"multiple\"` opens any number.\n *\n * Opening, the header stays put and the section grows downwards to its content's height over\n * 250 ms on the kit's ease-out, while the content settles from 98% scale (from its top edge) and\n * 92% opacity to full; closing runs the same way back in 200 ms.\n */\nexport type AccordionProps = React.ComponentProps<typeof AccordionPrimitive.Root>\n\nexport function Accordion({ className, ...props }: AccordionProps) {\n return <AccordionPrimitive.Root data-slot=\"accordion\" className={cn('flex w-full flex-col', className)} {...props} />\n}\n\nexport interface AccordionItemProps extends Omit<React.ComponentProps<typeof AccordionPrimitive.Item>, 'title'> {\n title: React.ReactNode\n /** A 16px icon before the title. */\n icon?: React.ReactNode\n /** Show a state without interacting, for state sheets. */\n 'data-force'?: 'hover' | 'focus'\n}\n\nexport function AccordionItem({ title, icon, children, className, 'data-force': force, ...props }: AccordionItemProps) {\n return (\n <AccordionPrimitive.Item data-slot=\"accordion-item\" className={cn('border-b border-border-subtle py-1', className)} {...props}>\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n data-force={force}\n className={cn(\n 'group flex h-10 w-full cursor-pointer items-center gap-3 rounded-lg px-2 text-left outline-none',\n 'transition-[background-color,box-shadow] duration-(--duration-fast) ease-(--ease-out)',\n 'hover:bg-bg-hover data-[force=hover]:bg-bg-hover',\n 'focus-visible:bg-bg-hover focus-visible:[box-shadow:0_0_0_2px_var(--action-focus-ring)]',\n 'data-[force=focus]:bg-bg-hover data-[force=focus]:[box-shadow:0_0_0_2px_var(--action-focus-ring)]',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n )}\n >\n {icon && (\n <span aria-hidden className=\"grid size-4 shrink-0 place-items-center text-text-muted [&_svg]:size-4 [&_svg]:[stroke-width:1.875]\">\n {icon}\n </span>\n )}\n <span className=\"min-w-0 flex-1 text-base leading-[21px] font-medium text-text-default\">{title}</span>\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden\n className=\"shrink-0 text-text-muted transition-transform duration-(--duration-base) ease-(--ease-out) group-data-[state=open]:rotate-180\"\n >\n <path d=\"M4 6L8 10L12 6\" stroke=\"currentColor\" strokeWidth=\"1.25\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n <AccordionPrimitive.Content data-slot=\"accordion-content\" className=\"satin-accordion-content\">\n <div\n className={cn(\n 'pt-1 pr-2 pb-3 text-base leading-[21px] text-text-muted',\n // Lined up with the title: past the icon and its gap when there is one.\n icon ? 'pl-9' : 'pl-2',\n )}\n >\n {children}\n </div>\n </AccordionPrimitive.Content>\n </AccordionPrimitive.Item>\n )\n}\n"]}
|
package/chunk-H4NU7NPO.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/attachment.tsx"],"names":[],"mappings":"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","file":"chunk-H4NU7NPO.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { HoverCard } from 'radix-ui'\nimport { ArrowUpRight, NavArrowDown, NavArrowUp, Xmark } from 'iconoir-react'\nimport { cn } from '../lib/utils'\nimport { Button } from './button'\n\n/**\n * Attachment, 1:1 with the uiKit `Attachment` set (3141:20409), plus `AttachmentGroup`\n * (3144:21146) and `AttachmentPreview` (3142:20419).\n *\n * - size `sm`: a 28px chip — 16px file icon, medium 13 name (max 200, truncated), remove button.\n * Radius-md, or full when `shape=\"rounded\"`.\n * - size `lg`: a 32px icon tile (bg/muted) + name + 12px text/muted meta line. Radius-xl with 6px\n * vertical padding (52 high), or full with 4px (48 high).\n * - States: default bg/popover, border/default, 0 1 1 shadow-xs. Hover border/strong (sm also\n * turns bg/canvas). Pressed bg/muted, border/strong, and the lg tile turns bg/card. Focus keeps\n * border/default and adds the 2px focus ring. All answer to `data-force` as well.\n * - The remove button is the DS Button (tertiary, xs, icon only, rounded), as in Figma.\n * - The whole chip opens the file (`onOpen`); `preview` shows an AttachmentPreview above it on hover.\n */\n\nexport interface AttachmentProps extends Omit<React.ComponentProps<'div'>, 'children'> {\n name: string\n /** Type and size, e.g. \"PDF · 2.4 MB\". Shown on `lg` only. */\n meta?: string\n /** File type icon. Defaults to the PDF icon. */\n icon?: React.ReactNode\n size?: 'sm' | 'lg'\n /** Rounded inside the composer and chat, Default inside cards and tables. */\n shape?: 'default' | 'rounded'\n /** Shows the remove button. Leave it out once the message is sent. */\n onRemove?: () => void\n onOpen?: () => void\n /** Content for the hover preview, usually an `<AttachmentPreview>`. */\n preview?: React.ReactNode\n 'data-force'?: 'hover' | 'pressed' | 'focus'\n}\n\nexport function Attachment({\n className,\n name,\n meta,\n icon,\n size = 'lg',\n shape = 'default',\n onRemove,\n onOpen,\n preview,\n ...props\n}: AttachmentProps) {\n const fileIcon = icon ?? <FileIcon type=\"pdf\" />\n const lg = size === 'lg'\n const rounded = shape === 'rounded'\n\n const chip = (\n <div\n data-slot=\"attachment\"\n className={cn(\n 'group/attachment relative inline-flex max-w-full shrink-0 items-center border border-border-default bg-bg-popover',\n '[box-shadow:0_1px_1px_0_var(--effect-shadow-xs)]',\n 'transition-[background-color,border-color,box-shadow] duration-(--duration-fast) ease-(--ease-out)',\n lg ? 'gap-2.5 px-2' : 'h-control-height gap-1.5 pl-2',\n !lg && (onRemove ? 'pr-0.5' : 'pr-2.5'),\n lg && (rounded ? 'rounded-pill py-1' : 'rounded-xl py-1.5'),\n !lg && (rounded ? 'rounded-pill' : 'rounded-md'),\n // Hover (satin-pressed, declared later, wins while pressed)\n 'satin-hover:border-border-strong',\n !lg && 'satin-hover:bg-bg-canvas',\n // Pressed\n 'satin-pressed:border-border-strong satin-pressed:bg-bg-muted',\n // Focus\n 'has-[[data-attachment-main]:focus-visible]:border-border-default has-[[data-attachment-main]:focus-visible]:bg-bg-popover',\n 'has-[[data-attachment-main]:focus-visible]:[box-shadow:0_1px_2px_0_var(--effect-shadow-xs),0_0_0_2px_var(--action-focus-ring)]',\n 'data-[force=focus]:border-border-default data-[force=focus]:bg-bg-popover',\n 'data-[force=focus]:[box-shadow:0_1px_2px_0_var(--effect-shadow-xs),0_0_0_2px_var(--action-focus-ring)]',\n className,\n )}\n {...props}\n >\n <button\n type=\"button\"\n data-attachment-main=\"\"\n onClick={onOpen}\n className={cn(\n 'flex min-w-0 items-center text-left outline-none',\n // The whole chip is the click target; the remove button sits above it.\n 'after:absolute after:inset-0 after:rounded-[inherit]',\n lg ? 'gap-2.5' : 'gap-1.5',\n )}\n >\n {lg ? (\n <>\n <span\n className={cn(\n 'flex size-8 shrink-0 items-center justify-center bg-bg-muted [&_svg]:size-icon-size',\n rounded ? 'rounded-xl' : 'rounded-md',\n 'group-active/attachment:bg-bg-card group-data-[force=pressed]/attachment:bg-bg-card',\n )}\n >\n {fileIcon}\n </span>\n <span className=\"flex min-w-0 flex-col\">\n <span data-attachment-name=\"\" className=\"max-w-[200px] truncate text-sm font-medium text-text-default\">{name}</span>\n {meta && <span className=\"sr-only\">, </span>}\n {meta && <span className=\"truncate text-xs text-text-muted\">{meta}</span>}\n </span>\n </>\n ) : (\n <>\n <span className=\"flex shrink-0 [&_svg]:size-icon-size\">{fileIcon}</span>\n <span data-attachment-name=\"\" className=\"max-w-[200px] truncate text-sm font-medium text-text-default\">{name}</span>\n {meta && <span className=\"sr-only\">, {meta}</span>}\n </>\n )}\n </button>\n {onRemove && (\n <Button\n variant=\"tertiary\"\n size=\"xs\"\n shape=\"rounded\"\n iconOnly\n aria-label={`Remove ${name}`}\n onClick={onRemove}\n className=\"relative z-10\"\n >\n <Xmark aria-hidden />\n </Button>\n )}\n </div>\n )\n\n if (!preview) return chip\n return (\n <HoverCard.Root openDelay={300} closeDelay={100}>\n <HoverCard.Trigger asChild>{chip}</HoverCard.Trigger>\n <HoverCard.Portal>\n <HoverCard.Content\n side=\"top\"\n align=\"start\"\n sideOffset={8}\n className=\"z-50 outline-none data-[state=open]:[animation:satin-enter_var(--duration-fast)_var(--ease-out)]\"\n >\n {preview}\n </HoverCard.Content>\n </HoverCard.Portal>\n </HoverCard.Root>\n )\n}\n\nexport interface AttachmentGroupProps extends React.ComponentProps<'div'> {}\n\n/** AttachmentGroup (3144:21146): files wrap onto new rows at 576px, 4px apart. */\nexport function AttachmentGroup({ className, ...props }: AttachmentGroupProps) {\n return (\n <div\n data-slot=\"attachment-group\"\n className={cn('flex max-w-[576px] flex-wrap items-start gap-1 [&>*]:shrink-0', className)}\n {...props}\n />\n )\n}\n\nexport interface AttachmentPreviewProps extends Omit<React.ComponentProps<'div'>, 'children'> {\n name: string\n icon?: React.ReactNode\n /** The first page or the first rows. Scrolls inside a fixed 176px viewport. */\n children?: React.ReactNode\n /** Left side of the footer: an `AttachmentPreviewPager` or `AttachmentPreviewSheets`. */\n navigation?: React.ReactNode\n onOpen?: () => void\n openLabel?: string\n}\n\n/**\n * AttachmentPreview (3142:20419): 296 wide, bg/popover, border/default, radius-xl, shadcn md\n * shadow. A header with the file, a 176px scrolling viewport with a fade at the bottom, a\n * border/subtle divider and a footer that moves between pages or sheets and opens the file.\n */\nexport function AttachmentPreview({\n className,\n name,\n icon,\n children,\n navigation,\n onOpen,\n openLabel = 'Open',\n ...props\n}: AttachmentPreviewProps) {\n return (\n <div\n data-slot=\"attachment-preview\"\n className={cn(\n 'flex w-[296px] flex-col overflow-clip rounded-xl border border-border-default bg-bg-popover',\n '[box-shadow:0_4px_6px_-1px_var(--effect-shadow-sm),0_2px_4px_-2px_var(--effect-shadow-sm)]',\n className,\n )}\n {...props}\n >\n <div className=\"flex items-center gap-2 px-3 py-2 [&_svg]:size-icon-size\">\n <span className=\"flex shrink-0\">{icon ?? <FileIcon type=\"pdf\" />}</span>\n <span className=\"min-w-0 flex-1 truncate text-sm font-medium text-text-default\">{name}</span>\n </div>\n <div className=\"relative\">\n <div\n tabIndex={0}\n aria-label={`Preview of ${name}`}\n className={cn(\n 'h-[176px] overflow-x-clip overflow-y-auto pr-4 pl-3 outline-none',\n '[scrollbar-color:var(--border-strong)_transparent] [scrollbar-width:thin]',\n 'focus-visible:[box-shadow:inset_0_0_0_2px_var(--action-focus-ring)]',\n )}\n >\n <div className=\"flex flex-col gap-2 pt-2 pb-3\">{children}</div>\n </div>\n <div\n aria-hidden\n className=\"pointer-events-none absolute right-2.5 bottom-0 left-0 h-8 bg-linear-to-b from-transparent to-bg-popover\"\n />\n </div>\n <div className=\"h-px bg-border-subtle\" />\n <div className=\"flex items-center gap-2 px-2 py-1.5\">\n <div className=\"flex min-w-0 flex-1 items-center gap-1\">{navigation}</div>\n <Button variant=\"tertiary\" size=\"xs\" onClick={onOpen}>\n {openLabel}\n <ArrowUpRight aria-hidden />\n </Button>\n </div>\n </div>\n )\n}\n\n/** Document footer: previous / next section and \"Page 1 of 3\". */\nexport function AttachmentPreviewPager({\n page,\n total,\n onPrevious,\n onNext,\n}: {\n page: number\n total: number\n onPrevious?: () => void\n onNext?: () => void\n}) {\n return (\n <>\n <Button variant=\"tertiary\" size=\"xs\" shape=\"rounded\" iconOnly aria-label=\"Previous section\" disabled={page <= 1} onClick={onPrevious}>\n <NavArrowUp aria-hidden />\n </Button>\n <Button variant=\"tertiary\" size=\"xs\" shape=\"rounded\" iconOnly aria-label=\"Next section\" disabled={page >= total} onClick={onNext}>\n <NavArrowDown aria-hidden />\n </Button>\n <span className=\"text-xs whitespace-nowrap text-text-muted\" aria-live=\"polite\">\n Page {page} of {total}\n </span>\n </>\n )\n}\n\n/** Spreadsheet footer: one tab per sheet; the current one is filled bg/muted. */\nexport function AttachmentPreviewSheets({\n sheets,\n value,\n onValueChange,\n}: {\n sheets: string[]\n value: string\n onValueChange?: (sheet: string) => void\n}) {\n return (\n <div role=\"tablist\" aria-label=\"Sheets\" className=\"flex items-center gap-1\">\n {sheets.map((sheet) => {\n const selected = sheet === value\n return (\n <button\n key={sheet}\n type=\"button\"\n role=\"tab\"\n aria-selected={selected}\n onClick={() => onValueChange?.(sheet)}\n className={cn(\n 'rounded-sm px-2 py-0.5 text-xs whitespace-nowrap outline-none',\n 'transition-[background-color,color,box-shadow] duration-(--duration-fast) ease-(--ease-out)',\n 'focus-visible:[box-shadow:0_0_0_2px_var(--action-focus-ring)]',\n selected ? 'bg-bg-muted text-text-default' : 'text-text-muted hover:text-text-default',\n )}\n >\n {sheet}\n </button>\n )\n })}\n </div>\n )\n}\n\n/**\n * File type icons from uiKit `icon` (filePdf 3138:39947, fileXlsx 3138:39967). They keep their\n * own colours (library primitives), so they don't follow currentColor.\n */\nexport function FileIcon({ type, className }: { type: 'pdf' | 'xlsx'; className?: string }) {\n const page = type === 'pdf' ? 'var(--color-red-500)' : 'var(--color-green-700)'\n const fold = type === 'pdf' ? 'var(--color-red-300)' : 'var(--color-green-300)'\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden className={cn('size-icon-size shrink-0', className)}>\n <path\n d=\"M2.66673 3.33327C2.66673 2.22873 3.56218 1.33327 4.66673 1.33327H5.72127C5.86673 1.33327 6.00339 1.36788 6.13127 1.43709L13.1416 5.22945C13.2695 5.29867 13.3335 5.406 13.3335 5.55145V12.6665C13.3335 13.7711 12.438 14.6665 11.3335 14.6665H4.66673C3.56218 14.6665 2.66673 13.7711 2.66673 12.6665V3.33327Z\"\n fill={page}\n />\n <path\n d=\"M5.93945 1.33327L13.3335 5.33327L10.8985 6.92509C10.2898 7.32303 9.78648 7.21764 9.38855 6.60891L5.93945 1.33327Z\"\n fill={fold}\n />\n {type === 'pdf' ? (\n <g fill=\"var(--color-white)\">\n <path d=\"M4.62457 12.9938V10.3491H5.66796C5.86855 10.3491 6.03943 10.3874 6.18062 10.4641C6.3218 10.5398 6.42941 10.6453 6.50345 10.7804C6.57835 10.9147 6.61579 11.0697 6.61579 11.2453C6.61579 11.4209 6.57792 11.5759 6.50216 11.7102C6.4264 11.8445 6.31664 11.9491 6.17287 12.024C6.02996 12.0989 5.85693 12.1363 5.65376 12.1363H4.98873V11.6882H5.56337C5.67098 11.6882 5.75965 11.6697 5.82938 11.6327C5.89997 11.5948 5.95248 11.5428 5.98692 11.4765C6.02222 11.4093 6.03986 11.3323 6.03986 11.2453C6.03986 11.1575 6.02222 11.0809 5.98692 11.0155C5.95248 10.9492 5.89997 10.898 5.82938 10.8618C5.75879 10.8248 5.66925 10.8063 5.56078 10.8063H5.18372V12.9938H4.62457Z\" />\n <path d=\"M7.91648 12.9938H6.97898V10.3491H7.92423C8.19024 10.3491 8.41923 10.4021 8.61121 10.508C8.80319 10.613 8.95083 10.7641 9.05413 10.9612C9.1583 11.1584 9.21038 11.3943 9.21038 11.6689C9.21038 11.9444 9.1583 12.1811 9.05413 12.3791C8.95083 12.5771 8.80233 12.729 8.60863 12.8349C8.41579 12.9408 8.18507 12.9938 7.91648 12.9938ZM7.53812 12.5147H7.89323C8.05852 12.5147 8.19756 12.4854 8.31033 12.4269C8.42397 12.3675 8.5092 12.2758 8.56601 12.1518C8.62369 12.027 8.65253 11.866 8.65253 11.6689C8.65253 11.4735 8.62369 11.3138 8.56601 11.1898C8.5092 11.0658 8.4244 10.9746 8.31162 10.916C8.19885 10.8575 8.05981 10.8282 7.89453 10.8282H7.53812V12.5147Z\" />\n <path d=\"M9.62457 12.9938V10.3491H11.3756V10.8101H10.1837V11.4403H11.2594V11.9013H10.1837V12.9938H9.62457Z\" />\n </g>\n ) : (\n <g fill=\"var(--color-white)\">\n <path d=\"M4.54258 10.5469L4.99589 11.3131H5.01346L5.46897 10.5469H6.00571L5.31969 11.6709L6.02107 12.7949H5.47446L5.01346 12.0276H4.99589L4.53489 12.7949H3.99047L4.69405 11.6709L4.00364 10.5469H4.54258Z\" />\n <path d=\"M6.30646 12.7949V10.5469H6.78173V12.403H7.74544V12.7949H6.30646Z\" />\n <path d=\"M9.27965 11.1934C9.27086 11.1049 9.23318 11.0361 9.16659 10.9871C9.1 10.9381 9.00963 10.9135 8.89548 10.9135C8.81791 10.9135 8.75242 10.9245 8.699 10.9465C8.64559 10.9677 8.60461 10.9973 8.57607 11.0354C8.54826 11.0734 8.53436 11.1166 8.53436 11.1649C8.5329 11.2051 8.54131 11.2403 8.5596 11.2703C8.57863 11.3003 8.60461 11.3263 8.63754 11.3482C8.67046 11.3694 8.70852 11.3881 8.75169 11.4042C8.79486 11.4196 8.84096 11.4327 8.88999 11.4437L9.09195 11.492C9.19001 11.5139 9.28001 11.5432 9.36197 11.5798C9.44392 11.6164 9.5149 11.6614 9.57491 11.7148C9.63491 11.7682 9.68138 11.8312 9.71431 11.9036C9.74797 11.976 9.76516 12.0591 9.76589 12.1528C9.76516 12.2903 9.73004 12.4096 9.66052 12.5106C9.59174 12.6108 9.49222 12.6888 9.36197 12.7444C9.23245 12.7993 9.07622 12.8267 8.89328 12.8267C8.71181 12.8267 8.55375 12.7989 8.41911 12.7433C8.2852 12.6877 8.18056 12.6054 8.10519 12.4963C8.03055 12.3866 7.9914 12.2508 7.98774 12.0891H8.44765C8.45277 12.1645 8.47436 12.2274 8.51241 12.2779C8.55119 12.3277 8.60278 12.3653 8.66717 12.3909C8.7323 12.4158 8.80584 12.4283 8.88779 12.4283C8.96829 12.4283 9.03817 12.4166 9.09744 12.3931C9.15744 12.3697 9.20391 12.3372 9.23684 12.2955C9.26977 12.2537 9.28623 12.2058 9.28623 12.1517C9.28623 12.1012 9.27123 12.0587 9.24123 12.0243C9.21196 11.9899 9.16879 11.9607 9.11171 11.9365C9.05536 11.9124 8.98621 11.8904 8.90426 11.8707L8.65949 11.8092C8.46997 11.7631 8.32032 11.691 8.21056 11.593C8.1008 11.4949 8.04628 11.3628 8.04701 11.1967C8.04628 11.0606 8.0825 10.9417 8.15568 10.84C8.22959 10.7383 8.33093 10.6589 8.45972 10.6018C8.58851 10.5447 8.73486 10.5162 8.89877 10.5162C9.06561 10.5162 9.21123 10.5447 9.33562 10.6018C9.46075 10.6589 9.55808 10.7383 9.62759 10.84C9.69711 10.9417 9.73296 11.0595 9.73516 11.1934H9.27965Z\" />\n <path d=\"M10.5312 10.5469L10.9845 11.3131H11.0021L11.4576 10.5469H11.9943L11.3083 11.6709L12.0097 12.7949H11.4631L11.0021 12.0276H10.9845L10.5235 12.7949H9.97911L10.6827 11.6709L9.99228 10.5469H10.5312Z\" />\n </g>\n )}\n </svg>\n )\n}\n"]}
|
package/chunk-H63FYCMY.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { clsx } from 'clsx';
|
|
2
|
-
import { twMerge } from 'tailwind-merge';
|
|
3
|
-
|
|
4
|
-
// src/lib/utils.ts
|
|
5
|
-
function cn(...inputs) {
|
|
6
|
-
return twMerge(clsx(inputs));
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export { cn };
|
|
10
|
-
//# sourceMappingURL=chunk-H63FYCMY.js.map
|
|
11
|
-
//# sourceMappingURL=chunk-H63FYCMY.js.map
|
package/chunk-H63FYCMY.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/utils.ts"],"names":[],"mappings":";;;;AAIO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B","file":"chunk-H63FYCMY.js","sourcesContent":["import { clsx, type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\n/** Joins class names and lets the later Tailwind class win, like shadcn's `cn`. */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n"]}
|
package/chunk-HL42K2NH.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/breadcrumb.tsx"],"names":["Fragment"],"mappings":"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","file":"chunk-HL42K2NH.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { MoreHoriz, NavArrowRight } from 'iconoir-react'\nimport { cn } from '../lib/utils'\nimport { DropdownMenu, DropdownMenuItem } from './dropdown'\n\n/**\n * Breadcrumb, 1:1 with the uiKit `Breadcrumb` set (4025:3711): the path to the current page,\n * items 4px apart with a 14px chevron (text/subtle) between them. An item is 13px text/muted\n * in 2px × 4px of padding, radius 6; it turns text/default on hover. The last item is the\n * current page: text/default, medium, not a link.\n *\n * An item can lead with a 14px `icon`, 8px before its label and centred on it; usually the first one (Home, the\n * workspace). With `hideLabel` only the icon shows, and the label names it for screen readers.\n *\n * With more items than `maxItems`, the middle ones fold into a \"…\" button (24px) that lists\n * them in a Dropdown; the first item and the last `maxItems - 1` stay.\n *\n * A `nav` named \"Breadcrumb\" around an ordered list; the current page has aria-current=\"page\".\n */\nexport interface BreadcrumbItem {\n label: string\n /** A 14px icon before the label, usually on the first item. */\n icon?: React.ReactNode\n /** Show only the icon; the label still names the item for screen readers. */\n hideLabel?: boolean\n /** Where it goes. Left out (or on the current page) it is plain text, or a button with `onSelect`. */\n href?: string\n onSelect?: () => void\n}\n\nexport interface BreadcrumbProps extends Omit<React.ComponentProps<'nav'>, 'children'> {\n /** From the top level down; the last one is the current page. */\n items: BreadcrumbItem[]\n /** Fold the middle into \"…\" when there are more items than this. */\n maxItems?: number\n}\n\nconst itemClass = cn(\n 'inline-flex h-6 items-center gap-2 rounded-md px-1 text-sm leading-5 whitespace-nowrap text-text-muted',\n '[&_svg]:size-3.5 [&_svg]:shrink-0 [&_svg]:[stroke-width:1.875]',\n 'transition-colors duration-(--duration-fast) ease-(--ease-out) outline-none focus-visible:shadow-border-focus',\n)\nconst linkClass = 'cursor-pointer hover:text-text-default'\n\nfunction Separator() {\n return (\n <li role=\"presentation\" aria-hidden className=\"flex text-text-subtle [&_svg]:size-3.5 [&_svg]:[stroke-width:1.875]\">\n <NavArrowRight />\n </li>\n )\n}\n\nexport function Breadcrumb({ items, maxItems, className, 'aria-label': ariaLabel = 'Breadcrumb', ...props }: BreadcrumbProps) {\n const fold = maxItems != null && maxItems >= 2 && items.length > maxItems\n const head = fold ? items.slice(0, 1) : items\n const hidden = fold ? items.slice(1, items.length - (maxItems - 1)) : []\n const tail = fold ? items.slice(items.length - (maxItems - 1)) : []\n const last = items.length - 1\n\n const crumb = (item: BreadcrumbItem, index: number) => {\n const current = index === last\n const content = item.icon ? (\n <>\n <span aria-hidden className=\"grid size-3.5 shrink-0 place-items-center\">\n {item.icon}\n </span>\n <span className={item.hideLabel ? 'sr-only' : undefined}>{item.label}</span>\n </>\n ) : (\n item.label\n )\n const el = current ? (\n <span aria-current=\"page\" className={cn(itemClass, 'font-medium text-text-default')}>\n {content}\n </span>\n ) : item.href ? (\n <a href={item.href} onClick={item.onSelect} className={cn(itemClass, linkClass)}>\n {content}\n </a>\n ) : item.onSelect ? (\n <button type=\"button\" onClick={item.onSelect} className={cn(itemClass, linkClass)}>\n {content}\n </button>\n ) : (\n <span className={itemClass}>{content}</span>\n )\n return <li className=\"flex\">{el}</li>\n }\n\n return (\n <nav data-slot=\"breadcrumb\" aria-label={ariaLabel} className={className} {...props}>\n <ol className=\"flex flex-wrap items-center gap-1\">\n {head.map((item, i) => (\n <React.Fragment key={`h${i}`}>\n {i > 0 && <Separator />}\n {crumb(item, i)}\n </React.Fragment>\n ))}\n {fold && (\n <>\n <Separator />\n <li className=\"flex\">\n <DropdownMenu\n aria-label=\"Hidden pages\"\n align=\"start\"\n trigger={\n <button\n type=\"button\"\n aria-label={`Show ${hidden.length} more`}\n className={cn(itemClass, linkClass, 'w-6 justify-center px-0 hover:bg-bg-hover [&_svg]:size-4')}\n >\n <MoreHoriz aria-hidden />\n </button>\n }\n >\n {hidden.map((item, i) => (\n <DropdownMenuItem\n key={i}\n label={item.label}\n icon={item.icon}\n onSelect={() => {\n item.onSelect?.()\n if (item.href) window.location.assign(item.href)\n }}\n />\n ))}\n </DropdownMenu>\n </li>\n {tail.map((item, i) => (\n <React.Fragment key={`t${i}`}>\n <Separator />\n {crumb(item, items.length - tail.length + i)}\n </React.Fragment>\n ))}\n </>\n )}\n </ol>\n </nav>\n )\n}\n"]}
|
package/chunk-HNQUX43Z.js
DELETED
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import { cn } from './chunk-H63FYCMY.js';
|
|
2
|
-
import 'react';
|
|
3
|
-
import { Slot } from 'radix-ui';
|
|
4
|
-
import { cva } from 'class-variance-authority';
|
|
5
|
-
import { jsx } from 'react/jsx-runtime';
|
|
6
|
-
|
|
7
|
-
var buttonVariants = cva(
|
|
8
|
-
[
|
|
9
|
-
"inline-flex shrink-0 items-center justify-center overflow-clip font-medium whitespace-nowrap select-none",
|
|
10
|
-
"transition-[background-color,border-color,color,box-shadow,transform] duration-(--duration-fast) ease-(--ease-out)",
|
|
11
|
-
// A menu or popover trigger snaps back to full size the moment it opens (no scale, no
|
|
12
|
-
// transform transition), so the menu measures the button's real edge and never jumps.
|
|
13
|
-
"not-aria-expanded:active:scale-[0.97] aria-expanded:[transition-property:background-color,border-color,color,box-shadow]",
|
|
14
|
-
"disabled:pointer-events-none disabled:opacity-50",
|
|
15
|
-
"focus-visible:outline-none [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
|
16
|
-
// Figma icons are 1.25px at 16 and 1.09px at 14; on Iconoir's 24 grid both are 1.875.
|
|
17
|
-
"[&_svg]:[stroke-width:1.875]"
|
|
18
|
-
],
|
|
19
|
-
{
|
|
20
|
-
variants: {
|
|
21
|
-
variant: {
|
|
22
|
-
primary: [
|
|
23
|
-
"border border-action-primary-border bg-action-primary-bg text-action-primary-fg",
|
|
24
|
-
"[box-shadow:0_0_0_1px_var(--action-primary-bg),0_3px_6px_0_var(--action-primary-shadow)]",
|
|
25
|
-
"satin-hover:bg-action-primary-bg-hover satin-hover:[box-shadow:0_0_0_1px_var(--action-primary-bg-hover),0_3px_6px_0_var(--action-primary-shadow)]",
|
|
26
|
-
"satin-focus:[box-shadow:0_0_0_1px_var(--action-primary-bg),0_3px_6px_0_var(--action-primary-shadow),0_0_0_2px_var(--action-focus-ring)]",
|
|
27
|
-
"satin-pressed:bg-action-primary-bg-pressed satin-pressed:[box-shadow:0_0_0_1px_var(--action-primary-bg-pressed)]",
|
|
28
|
-
"[&[aria-haspopup][aria-expanded=true]:focus-visible]:[box-shadow:0_0_0_1px_var(--action-primary-bg-pressed),0_0_0_2px_var(--action-focus-ring)]"
|
|
29
|
-
],
|
|
30
|
-
destructive: [
|
|
31
|
-
"border border-action-destructive-border bg-action-destructive-bg text-text-on-solid",
|
|
32
|
-
"[box-shadow:0_0_0_1px_var(--action-destructive-bg),0_3px_6px_0_var(--action-primary-shadow)]",
|
|
33
|
-
"satin-hover:bg-action-destructive-bg-hover satin-hover:[box-shadow:0_0_0_1px_var(--action-destructive-bg-hover),0_3px_6px_0_var(--action-primary-shadow)]",
|
|
34
|
-
"satin-focus:[box-shadow:0_0_0_1px_var(--action-destructive-bg),0_3px_6px_0_var(--action-primary-shadow),0_0_0_2px_var(--action-focus-ring)]",
|
|
35
|
-
"satin-pressed:bg-action-destructive-bg-pressed satin-pressed:[box-shadow:0_0_0_1px_var(--action-destructive-bg-pressed)]",
|
|
36
|
-
"[&[aria-haspopup][aria-expanded=true]:focus-visible]:[box-shadow:0_0_0_1px_var(--action-destructive-bg-pressed),0_0_0_2px_var(--action-focus-ring)]"
|
|
37
|
-
],
|
|
38
|
-
inverse: [
|
|
39
|
-
"border border-action-inverse-border bg-action-inverse-bg text-text-on-inverse",
|
|
40
|
-
"[box-shadow:0_0_0_1px_var(--action-inverse-bg),0_3px_6px_0_var(--action-primary-shadow)]",
|
|
41
|
-
"satin-hover:bg-action-inverse-bg-hover satin-hover:[box-shadow:0_0_0_1px_var(--action-inverse-bg-hover),0_3px_6px_0_var(--action-primary-shadow)]",
|
|
42
|
-
"satin-focus:[box-shadow:0_0_0_1px_var(--action-inverse-bg),0_3px_6px_0_var(--action-primary-shadow),0_0_0_2px_var(--action-focus-ring)]",
|
|
43
|
-
"satin-pressed:bg-action-inverse-bg-pressed satin-pressed:[box-shadow:0_0_0_1px_var(--action-inverse-bg-pressed)]",
|
|
44
|
-
"[&[aria-haspopup][aria-expanded=true]:focus-visible]:[box-shadow:0_0_0_1px_var(--action-inverse-bg-pressed),0_0_0_2px_var(--action-focus-ring)]"
|
|
45
|
-
],
|
|
46
|
-
// The outline is a 1px ring outside the box, like the filled variants' ring, so all of
|
|
47
|
-
// them read the same height; the border underneath takes the fill.
|
|
48
|
-
secondary: [
|
|
49
|
-
"border border-transparent bg-bg-popover text-text-default [&_svg]:text-text-muted",
|
|
50
|
-
"[box-shadow:0_0_0_1px_var(--border-default),0_1px_2px_1px_var(--effect-shadow-xs)]",
|
|
51
|
-
"disabled:[box-shadow:0_0_0_1px_var(--border-strong)]",
|
|
52
|
-
"satin-hover:bg-action-secondary-bg-hover satin-hover:[box-shadow:0_0_0_1px_var(--border-strong),0_1px_2px_1px_var(--effect-shadow-xs)]",
|
|
53
|
-
"satin-focus:bg-bg-popover satin-focus:[box-shadow:0_0_0_1px_var(--border-strong),0_0_0_2px_var(--action-focus-ring)]",
|
|
54
|
-
"satin-pressed:bg-action-secondary-bg-pressed satin-pressed:[box-shadow:0_0_0_1px_var(--border-strong)]",
|
|
55
|
-
"[&[aria-haspopup][aria-expanded=true]:focus-visible]:[box-shadow:0_0_0_1px_var(--border-strong),0_0_0_2px_var(--action-focus-ring)]"
|
|
56
|
-
],
|
|
57
|
-
tertiary: [
|
|
58
|
-
"bg-transparent text-text-default [&_svg]:text-text-muted",
|
|
59
|
-
"satin-hover:bg-bg-hover",
|
|
60
|
-
"satin-focus:bg-bg-hover satin-focus:[box-shadow:0_0_0_2px_var(--action-focus-ring)]",
|
|
61
|
-
"satin-pressed:bg-border-input",
|
|
62
|
-
"[&[aria-haspopup][aria-expanded=true]:focus-visible]:[box-shadow:0_0_0_2px_var(--action-focus-ring)]"
|
|
63
|
-
]
|
|
64
|
-
},
|
|
65
|
-
size: {
|
|
66
|
-
xs: "h-control-height-xs gap-1 px-2 text-sm [&_svg]:size-icon-size-sm",
|
|
67
|
-
md: "h-control-height gap-1.5 px-2.5 text-sm [&_svg]:size-icon-size",
|
|
68
|
-
lg: "h-control-height-lg gap-1.5 px-3 text-sm [&_svg]:size-icon-size",
|
|
69
|
-
xl: "h-control-height-xl gap-2 px-3 text-base [&_svg]:size-icon-size"
|
|
70
|
-
},
|
|
71
|
-
shape: {
|
|
72
|
-
default: "",
|
|
73
|
-
rounded: "rounded-pill"
|
|
74
|
-
},
|
|
75
|
-
iconOnly: {
|
|
76
|
-
true: "px-0",
|
|
77
|
-
false: ""
|
|
78
|
-
}
|
|
79
|
-
},
|
|
80
|
-
compoundVariants: [
|
|
81
|
-
// Default shape: the radius grows with the size (8 / 10 / 10 / 12).
|
|
82
|
-
{ shape: "default", size: "xs", className: "rounded-md" },
|
|
83
|
-
{ shape: "default", size: "md", className: "rounded-lg" },
|
|
84
|
-
{ shape: "default", size: "lg", className: "rounded-lg" },
|
|
85
|
-
{ shape: "default", size: "xl", className: "rounded-xl" },
|
|
86
|
-
{ iconOnly: true, size: "xs", className: "w-control-height-xs" },
|
|
87
|
-
{ iconOnly: true, size: "md", className: "w-control-height" },
|
|
88
|
-
{ iconOnly: true, size: "lg", className: "w-control-height-lg" },
|
|
89
|
-
{ iconOnly: true, size: "xl", className: "w-control-height-xl" }
|
|
90
|
-
],
|
|
91
|
-
defaultVariants: { variant: "primary", size: "md", shape: "default", iconOnly: false }
|
|
92
|
-
}
|
|
93
|
-
);
|
|
94
|
-
function Button({ className, variant, size, shape, iconOnly, asChild = false, type, ...props }) {
|
|
95
|
-
const Comp = asChild ? Slot.Root : "button";
|
|
96
|
-
return /* @__PURE__ */ jsx(
|
|
97
|
-
Comp,
|
|
98
|
-
{
|
|
99
|
-
"data-slot": "button",
|
|
100
|
-
type: asChild ? void 0 : type ?? "button",
|
|
101
|
-
className: cn(buttonVariants({ variant, size, shape, iconOnly }), className),
|
|
102
|
-
...props
|
|
103
|
-
}
|
|
104
|
-
);
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
export { Button, buttonVariants };
|
|
108
|
-
//# sourceMappingURL=chunk-HNQUX43Z.js.map
|
|
109
|
-
//# sourceMappingURL=chunk-HNQUX43Z.js.map
|
package/chunk-HNQUX43Z.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/button.tsx"],"names":[],"mappings":"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","file":"chunk-HNQUX43Z.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { Slot } from 'radix-ui'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../lib/utils'\n\n/**\n * Button, 1:1 with the uiKit `button` component set (10:1838): five styles, four sizes\n * xs / md / lg / xl (24 / 28 / 32 / 36), Default or Rounded shape, and an icon-only form.\n *\n * Solid styles (primary, destructive, inverse) are a 1px border in the style's `border`\n * token, a 1px outer ring in the current background and a 0 3 6 drop shadow (gone when\n * pressed); no inner glow. Focus adds a 2px `action/focus-ring` spread; disabled\n * is the default look at 50% opacity. Icons take the label colour on solid styles and\n * text/muted on secondary and tertiary.\n *\n * Shadows are written as plain box-shadow, not Tailwind's shadow utilities: those compose\n * five custom properties, and a browser that drops one of them drops the whole shadow.\n *\n * States use the satin-hover / satin-focus / satin-pressed variants (styles/index.css):\n * the real pseudo-classes, or `data-force=\"hover\" | \"focus\" | \"pressed\"` for state sheets.\n * An open menu's trigger looks pressed, which hides the ring; with keyboard focus on it the\n * `[aria-haspopup][aria-expanded=true]:focus-visible` rules bring the ring back.\n */\nconst buttonVariants = cva(\n [\n 'inline-flex shrink-0 items-center justify-center overflow-clip font-medium whitespace-nowrap select-none',\n 'transition-[background-color,border-color,color,box-shadow,transform] duration-(--duration-fast) ease-(--ease-out)',\n // A menu or popover trigger snaps back to full size the moment it opens (no scale, no\n // transform transition), so the menu measures the button's real edge and never jumps.\n 'not-aria-expanded:active:scale-[0.97] aria-expanded:[transition-property:background-color,border-color,color,box-shadow]',\n 'disabled:pointer-events-none disabled:opacity-50',\n 'focus-visible:outline-none [&_svg]:pointer-events-none [&_svg]:shrink-0',\n // Figma icons are 1.25px at 16 and 1.09px at 14; on Iconoir's 24 grid both are 1.875.\n '[&_svg]:[stroke-width:1.875]',\n ],\n {\n variants: {\n variant: {\n primary: [\n 'border border-action-primary-border bg-action-primary-bg text-action-primary-fg',\n '[box-shadow:0_0_0_1px_var(--action-primary-bg),0_3px_6px_0_var(--action-primary-shadow)]',\n 'satin-hover:bg-action-primary-bg-hover satin-hover:[box-shadow:0_0_0_1px_var(--action-primary-bg-hover),0_3px_6px_0_var(--action-primary-shadow)]',\n 'satin-focus:[box-shadow:0_0_0_1px_var(--action-primary-bg),0_3px_6px_0_var(--action-primary-shadow),0_0_0_2px_var(--action-focus-ring)]',\n 'satin-pressed:bg-action-primary-bg-pressed satin-pressed:[box-shadow:0_0_0_1px_var(--action-primary-bg-pressed)]',\n '[&[aria-haspopup][aria-expanded=true]:focus-visible]:[box-shadow:0_0_0_1px_var(--action-primary-bg-pressed),0_0_0_2px_var(--action-focus-ring)]',\n ],\n destructive: [\n 'border border-action-destructive-border bg-action-destructive-bg text-text-on-solid',\n '[box-shadow:0_0_0_1px_var(--action-destructive-bg),0_3px_6px_0_var(--action-primary-shadow)]',\n 'satin-hover:bg-action-destructive-bg-hover satin-hover:[box-shadow:0_0_0_1px_var(--action-destructive-bg-hover),0_3px_6px_0_var(--action-primary-shadow)]',\n 'satin-focus:[box-shadow:0_0_0_1px_var(--action-destructive-bg),0_3px_6px_0_var(--action-primary-shadow),0_0_0_2px_var(--action-focus-ring)]',\n 'satin-pressed:bg-action-destructive-bg-pressed satin-pressed:[box-shadow:0_0_0_1px_var(--action-destructive-bg-pressed)]',\n '[&[aria-haspopup][aria-expanded=true]:focus-visible]:[box-shadow:0_0_0_1px_var(--action-destructive-bg-pressed),0_0_0_2px_var(--action-focus-ring)]',\n ],\n inverse: [\n 'border border-action-inverse-border bg-action-inverse-bg text-text-on-inverse',\n '[box-shadow:0_0_0_1px_var(--action-inverse-bg),0_3px_6px_0_var(--action-primary-shadow)]',\n 'satin-hover:bg-action-inverse-bg-hover satin-hover:[box-shadow:0_0_0_1px_var(--action-inverse-bg-hover),0_3px_6px_0_var(--action-primary-shadow)]',\n 'satin-focus:[box-shadow:0_0_0_1px_var(--action-inverse-bg),0_3px_6px_0_var(--action-primary-shadow),0_0_0_2px_var(--action-focus-ring)]',\n 'satin-pressed:bg-action-inverse-bg-pressed satin-pressed:[box-shadow:0_0_0_1px_var(--action-inverse-bg-pressed)]',\n '[&[aria-haspopup][aria-expanded=true]:focus-visible]:[box-shadow:0_0_0_1px_var(--action-inverse-bg-pressed),0_0_0_2px_var(--action-focus-ring)]',\n ],\n // The outline is a 1px ring outside the box, like the filled variants' ring, so all of\n // them read the same height; the border underneath takes the fill.\n secondary: [\n 'border border-transparent bg-bg-popover text-text-default [&_svg]:text-text-muted',\n '[box-shadow:0_0_0_1px_var(--border-default),0_1px_2px_1px_var(--effect-shadow-xs)]',\n 'disabled:[box-shadow:0_0_0_1px_var(--border-strong)]',\n 'satin-hover:bg-action-secondary-bg-hover satin-hover:[box-shadow:0_0_0_1px_var(--border-strong),0_1px_2px_1px_var(--effect-shadow-xs)]',\n 'satin-focus:bg-bg-popover satin-focus:[box-shadow:0_0_0_1px_var(--border-strong),0_0_0_2px_var(--action-focus-ring)]',\n 'satin-pressed:bg-action-secondary-bg-pressed satin-pressed:[box-shadow:0_0_0_1px_var(--border-strong)]',\n '[&[aria-haspopup][aria-expanded=true]:focus-visible]:[box-shadow:0_0_0_1px_var(--border-strong),0_0_0_2px_var(--action-focus-ring)]',\n ],\n tertiary: [\n 'bg-transparent text-text-default [&_svg]:text-text-muted',\n 'satin-hover:bg-bg-hover',\n 'satin-focus:bg-bg-hover satin-focus:[box-shadow:0_0_0_2px_var(--action-focus-ring)]',\n 'satin-pressed:bg-border-input',\n '[&[aria-haspopup][aria-expanded=true]:focus-visible]:[box-shadow:0_0_0_2px_var(--action-focus-ring)]',\n ],\n },\n size: {\n xs: 'h-control-height-xs gap-1 px-2 text-sm [&_svg]:size-icon-size-sm',\n md: 'h-control-height gap-1.5 px-2.5 text-sm [&_svg]:size-icon-size',\n lg: 'h-control-height-lg gap-1.5 px-3 text-sm [&_svg]:size-icon-size',\n xl: 'h-control-height-xl gap-2 px-3 text-base [&_svg]:size-icon-size',\n },\n shape: {\n default: '',\n rounded: 'rounded-pill',\n },\n iconOnly: {\n true: 'px-0',\n false: '',\n },\n },\n compoundVariants: [\n // Default shape: the radius grows with the size (8 / 10 / 10 / 12).\n { shape: 'default', size: 'xs', className: 'rounded-md' },\n { shape: 'default', size: 'md', className: 'rounded-lg' },\n { shape: 'default', size: 'lg', className: 'rounded-lg' },\n { shape: 'default', size: 'xl', className: 'rounded-xl' },\n { iconOnly: true, size: 'xs', className: 'w-control-height-xs' },\n { iconOnly: true, size: 'md', className: 'w-control-height' },\n { iconOnly: true, size: 'lg', className: 'w-control-height-lg' },\n { iconOnly: true, size: 'xl', className: 'w-control-height-xl' },\n ],\n defaultVariants: { variant: 'primary', size: 'md', shape: 'default', iconOnly: false },\n },\n)\n\nexport interface ButtonProps\n extends React.ComponentProps<'button'>,\n VariantProps<typeof buttonVariants> {\n /** Render the child element (a link, say) with the button's styles instead of a `<button>`. */\n asChild?: boolean\n}\n\nexport function Button({ className, variant, size, shape, iconOnly, asChild = false, type, ...props }: ButtonProps) {\n const Comp = asChild ? Slot.Root : 'button'\n return (\n <Comp\n data-slot=\"button\"\n type={asChild ? undefined : (type ?? 'button')}\n className={cn(buttonVariants({ variant, size, shape, iconOnly }), className)}\n {...props}\n />\n )\n}\n\nexport { buttonVariants }\n"]}
|
package/chunk-HRKPV66B.js
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { cn } from './chunk-H63FYCMY.js';
|
|
2
|
-
import 'react';
|
|
3
|
-
import { HoverCard as HoverCard$1 } from 'radix-ui';
|
|
4
|
-
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
5
|
-
|
|
6
|
-
function HoverCard({
|
|
7
|
-
trigger,
|
|
8
|
-
children,
|
|
9
|
-
side = "bottom",
|
|
10
|
-
align = "start",
|
|
11
|
-
openDelay = 400,
|
|
12
|
-
closeDelay = 150,
|
|
13
|
-
open,
|
|
14
|
-
defaultOpen,
|
|
15
|
-
onOpenChange,
|
|
16
|
-
container,
|
|
17
|
-
className
|
|
18
|
-
}) {
|
|
19
|
-
return /* @__PURE__ */ jsxs(HoverCard$1.Root, { openDelay, closeDelay, open, defaultOpen, onOpenChange, children: [
|
|
20
|
-
/* @__PURE__ */ jsx(HoverCard$1.Trigger, { asChild: true, children: trigger }),
|
|
21
|
-
/* @__PURE__ */ jsx(HoverCard$1.Portal, { container, children: /* @__PURE__ */ jsx(HoverCard$1.Content, { side, align, sideOffset: 8, collisionPadding: 8, className: cn(hoverCardClass, className), children }) })
|
|
22
|
-
] });
|
|
23
|
-
}
|
|
24
|
-
var hoverCardClass = cn(
|
|
25
|
-
"z-50 flex w-80 max-w-[calc(100vw-16px)] flex-col gap-3 rounded-xl border border-border-default bg-bg-popover p-4 outline-none",
|
|
26
|
-
"[box-shadow:0_4px_6px_-4px_var(--effect-shadow-sm),0_10px_15px_-3px_var(--effect-shadow-sm)]",
|
|
27
|
-
"origin-(--radix-hover-card-content-transform-origin) data-[state=open]:animate-[satin-enter_var(--duration-base)_var(--ease-out)]"
|
|
28
|
-
);
|
|
29
|
-
|
|
30
|
-
export { HoverCard, hoverCardClass };
|
|
31
|
-
//# sourceMappingURL=chunk-HRKPV66B.js.map
|
|
32
|
-
//# sourceMappingURL=chunk-HRKPV66B.js.map
|
package/chunk-HRKPV66B.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/hover-card.tsx"],"names":["HoverCardPrimitive"],"mappings":";;;;;AAiCO,SAAS,SAAA,CAAU;AAAA,EACxB,OAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA,GAAO,QAAA;AAAA,EACP,KAAA,GAAQ,OAAA;AAAA,EACR,SAAA,GAAY,GAAA;AAAA,EACZ,UAAA,GAAa,GAAA;AAAA,EACb,IAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAmB;AACjB,EAAA,uBACE,IAAA,CAACA,YAAmB,IAAA,EAAnB,EAAwB,WAAsB,UAAA,EAAwB,IAAA,EAAY,aAA0B,YAAA,EAC3G,QAAA,EAAA;AAAA,oBAAA,GAAA,CAACA,WAAA,CAAmB,OAAA,EAAnB,EAA2B,OAAA,EAAO,MAAE,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,oBAC7C,GAAA,CAACA,YAAmB,MAAA,EAAnB,EAA0B,WACzB,QAAA,kBAAA,GAAA,CAACA,WAAA,CAAmB,SAAnB,EAA2B,IAAA,EAAY,OAAc,UAAA,EAAY,CAAA,EAAG,kBAAkB,CAAA,EAAG,SAAA,EAAW,GAAG,cAAA,EAAgB,SAAS,CAAA,EAC9H,QAAA,EACH,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AAGO,IAAM,cAAA,GAAiB,EAAA;AAAA,EAC5B,+HAAA;AAAA,EACA,8FAAA;AAAA,EACA;AACF","file":"chunk-HRKPV66B.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { HoverCard as HoverCardPrimitive } from 'radix-ui'\nimport { cn } from '../lib/utils'\n\n/**\n * HoverCard, 1:1 with the uiKit design (🆕 context menu & hover card): a preview of a person,\n * place or file over its link — the Popover surface (bg/popover, border/default, radius-xl, the\n * lg shadow), 320 wide, 16px in. It opens after the pointer rests 400 ms on the trigger (the\n * middle of NN/g's 0.3–0.5 s, so passing over a link doesn't flash it), stays while the pointer\n * moves into it, and closes 150 ms after it leaves both. Keyboard focus on the trigger opens it.\n *\n * Only for extra context the page works without: anything someone needs to act on belongs in a\n * Popover they open on purpose.\n */\nexport interface HoverCardProps {\n /** The link or name it previews. Rendered with `asChild`. */\n trigger: React.ReactNode\n children: React.ReactNode\n side?: 'top' | 'right' | 'bottom' | 'left'\n align?: 'start' | 'center' | 'end'\n /** ms the pointer rests before it opens. */\n openDelay?: number\n /** ms after the pointer leaves before it closes. */\n closeDelay?: number\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n container?: HTMLElement | null\n className?: string\n}\n\nexport function HoverCard({\n trigger,\n children,\n side = 'bottom',\n align = 'start',\n openDelay = 400,\n closeDelay = 150,\n open,\n defaultOpen,\n onOpenChange,\n container,\n className,\n}: HoverCardProps) {\n return (\n <HoverCardPrimitive.Root openDelay={openDelay} closeDelay={closeDelay} open={open} defaultOpen={defaultOpen} onOpenChange={onOpenChange}>\n <HoverCardPrimitive.Trigger asChild>{trigger}</HoverCardPrimitive.Trigger>\n <HoverCardPrimitive.Portal container={container}>\n <HoverCardPrimitive.Content side={side} align={align} sideOffset={8} collisionPadding={8} className={cn(hoverCardClass, className)}>\n {children}\n </HoverCardPrimitive.Content>\n </HoverCardPrimitive.Portal>\n </HoverCardPrimitive.Root>\n )\n}\n\n/** The hover card's surface, for previews you place yourself. */\nexport const hoverCardClass = cn(\n 'z-50 flex w-80 max-w-[calc(100vw-16px)] flex-col gap-3 rounded-xl border border-border-default bg-bg-popover p-4 outline-none',\n '[box-shadow:0_4px_6px_-4px_var(--effect-shadow-sm),0_10px_15px_-3px_var(--effect-shadow-sm)]',\n 'origin-(--radix-hover-card-content-transform-origin) data-[state=open]:animate-[satin-enter_var(--duration-base)_var(--ease-out)]',\n)\n"]}
|
package/chunk-J3NSDRVH.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/sliding-indicator.tsx"],"names":[],"mappings":"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","file":"chunk-J3NSDRVH.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\n\n/**\n * The background (or underline) that slides under the selected item of Tabs, Segmented control\n * and Pagination, all on one motion: 300 ms on the kit's ease-out, the leading edge (the one\n * on the side it is heading to) moving straight away and the trailing edge 30 ms behind, so it\n * stretches a little towards the new item and settles there. A change mid-move carries on from\n * wherever it is. Only a change of selection animates; a resize just puts it in place. With\n * reduced motion it moves at once.\n *\n * `listRef` is the positioned element the items sit in, `selector` finds the selected item in\n * it, `selected` is whatever names the selection. Render the indicator absolutely at left 0 of\n * the list with the returned `ref`; until it is placed (`ready`), let the selected item paint\n * its own fill so the server render isn't bare.\n */\nexport const SLIDE_MS = 300\nconst TRAIL_MS = 30\nconst STEPS = 24\n\n/** cubic-bezier(0.23, 1, 0.32, 1), the kit's --ease-out, as a function of time 0..1. */\nfunction easeOut(t: number) {\n const [x1, y1, x2, y2] = [0.23, 1, 0.32, 1]\n const bez = (a: number, b: number, s: number) => 3 * a * s * (1 - s) ** 2 + 3 * b * s ** 2 * (1 - s) + s ** 3\n let lo = 0\n let hi = 1\n for (let i = 0; i < 24; i++) {\n const mid = (lo + hi) / 2\n if (bez(x1, x2, mid) < t) lo = mid\n else hi = mid\n }\n return bez(y1, y2, (lo + hi) / 2)\n}\n\nexport function useSlidingIndicator<T extends HTMLElement = HTMLSpanElement>(\n listRef: React.RefObject<HTMLElement | null>,\n selector: string,\n selected: unknown,\n /** Off: it moves to the new item at once. */\n { animate: motionOn = true }: { animate?: boolean } = {},\n) {\n const ref = React.useRef<T>(null)\n const [ready, setReady] = React.useState(false)\n const placed = React.useRef(false)\n\n const place = React.useCallback(\n (animate: boolean) => {\n const list = listRef.current\n const el = ref.current\n if (!list || !el) return\n const target = list.querySelector<HTMLElement>(selector)\n if (!target) {\n el.style.opacity = '0'\n return\n }\n // The target's place in the list, from layout (transforms on it don't count).\n let x = target.offsetLeft\n for (let p = target.offsetParent as HTMLElement | null; p && p !== list; p = p.offsetParent as HTMLElement | null) x += p.offsetLeft\n const w = target.offsetWidth\n // Where the indicator is on screen right now, mid-move included.\n const box = el.getBoundingClientRect()\n const from = { x: box.left - list.getBoundingClientRect().left, w: box.width }\n el.getAnimations().forEach((a) => a.cancel())\n el.style.opacity = '1'\n el.style.width = `${w}px`\n el.style.transform = `translateX(${x}px)`\n\n const reduced = typeof window !== 'undefined' && window.matchMedia?.('(prefers-reduced-motion: reduce)').matches\n if (!animate || !motionOn || !placed.current || reduced || (Math.abs(from.x - x) < 0.5 && Math.abs(from.w - w) < 0.5)) {\n placed.current = true\n return\n }\n // Two edges on their own clocks: the one leading the way goes first.\n const right = x > from.x\n const L0 = from.x\n const R0 = from.x + from.w\n const L1 = x\n const R1 = x + w\n const lead = (t: number) => easeOut(t)\n const trail = (t: number) => easeOut(Math.max(0, (t * SLIDE_MS - TRAIL_MS) / (SLIDE_MS - TRAIL_MS)))\n const frames: Keyframe[] = []\n for (let i = 0; i <= STEPS; i++) {\n const t = i / STEPS\n const pl = right ? trail(t) : lead(t)\n const pr = right ? lead(t) : trail(t)\n const l = L0 + (L1 - L0) * pl\n const r = R0 + (R1 - R0) * pr\n frames.push({ offset: t, transform: `translateX(${l}px)`, width: `${Math.max(r - l, 0)}px` })\n }\n el.animate(frames, { duration: SLIDE_MS, easing: 'linear' })\n },\n [listRef, selector, motionOn],\n )\n\n React.useLayoutEffect(() => {\n place(true)\n setReady(true)\n }, [place, selected])\n\n React.useEffect(() => {\n const list = listRef.current\n if (!list) return\n const observer = new ResizeObserver(() => place(false))\n observer.observe(list)\n return () => observer.disconnect()\n }, [listRef, place])\n\n return { ref, ready }\n}\n"]}
|