@uisatin/ui 0.2.0 → 0.4.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 +27 -0
- package/README.md +10 -1
- package/{chunk-P4O6TGDR.js → chunk-3VVO5MY5.js} +28 -26
- package/chunk-47DDBME3.js +87 -0
- package/{chunk-SHDFUXYV.js → chunk-5663JVE5.js} +16 -18
- package/chunk-67CBFB6Y.js +99 -0
- package/chunk-6DWLTGRQ.js +130 -0
- package/chunk-6GNMUJQ4.js +45 -0
- package/chunk-6JTSZAGO.js +177 -0
- package/chunk-6RLSRMB5.js +14 -0
- package/chunk-6Y6CY2DP.js +55 -0
- package/{chunk-O7F3CIDV.js → chunk-7NV53EL5.js} +10 -12
- package/{chunk-BNZVTLHV.js → chunk-7SVMERPH.js} +25 -21
- package/chunk-A52HUWVM.js +24 -0
- package/chunk-AKEZCWNW.js +29 -0
- package/{chunk-SH6NG6VN.js → chunk-APRVUOD6.js} +6 -8
- package/{chunk-QUF2IPOZ.js → chunk-C435UD7V.js} +14 -15
- package/{chunk-B2K45IUR.js → chunk-C6WRJ7DG.js} +5 -7
- package/{chunk-PF3YBUKT.js → chunk-CQFAMWZI.js} +16 -15
- package/chunk-DAKVTPYZ.js +86 -0
- package/{chunk-VAGIAREV.js → chunk-DMZW4LGU.js} +29 -26
- package/chunk-EBZHGRM5.js +46 -0
- package/chunk-EHEXE2UV.js +44 -0
- package/{chunk-72OCFAPT.js → chunk-EQAFDIPE.js} +26 -23
- package/{chunk-LLHTVIM3.js → chunk-EXKSKYG3.js} +7 -9
- package/chunk-FB6DG3LR.js +35 -0
- package/chunk-GH2DEOGO.js +67 -0
- package/{chunk-YG7JOOLJ.js → chunk-GKDMCY2S.js} +5 -7
- package/chunk-GTFUAA6H.js +42 -0
- package/{chunk-TX3H3QMA.js → chunk-HI6QIG55.js} +71 -70
- package/{chunk-6QMSWITQ.js → chunk-HZV7EXGU.js} +24 -26
- package/{chunk-A5XEM3GF.js → chunk-IKJIR6VL.js} +34 -36
- package/{chunk-DO3TBNSC.js → chunk-INJWE2LD.js} +15 -17
- package/chunk-J5UQPROI.js +56 -0
- package/{chunk-6YXUBP27.js → chunk-JCR5TWTF.js} +72 -67
- package/chunk-JKOBDLP3.js +25 -0
- package/chunk-JR3VVDV6.js +37 -0
- package/chunk-JYGCZWET.js +112 -0
- package/{chunk-UGRSWP6U.js → chunk-K5G5OEV5.js} +10 -12
- package/{chunk-B6V4VSGH.js → chunk-KDU7AT2T.js} +14 -15
- package/chunk-KITXKIYW.js +104 -0
- package/{chunk-NN6PKJWS.js → chunk-KQNA22D3.js} +7 -9
- package/{chunk-YPNKBE5X.js → chunk-L5PPN42A.js} +14 -9
- package/chunk-LAOE6Y57.js +95 -0
- package/chunk-LI5VYDLN.js +195 -0
- package/{chunk-7TXHCRAG.js → chunk-LKSFTNPF.js} +8 -10
- package/chunk-LLW3X4ZJ.js +39 -0
- package/{chunk-RTJ76X5U.js → chunk-LWRB4DED.js} +2 -4
- package/{chunk-NSRTTYQ4.js → chunk-M7RILZVW.js} +42 -35
- package/{chunk-LW3TRU5W.js → chunk-MOGWOUCN.js} +28 -16
- package/chunk-NCIRJ5V2.js +108 -0
- package/chunk-NQL6SIIB.js +168 -0
- package/chunk-NTSU44FY.js +81 -0
- package/{chunk-3DINAQLL.js → chunk-P36KBUYD.js} +33 -29
- package/chunk-P6RHT2VM.js +147 -0
- package/{chunk-CL2II6BX.js → chunk-PD2KD5OR.js} +11 -13
- package/{chunk-XL75JRUA.js → chunk-PP46SY7M.js} +42 -22
- package/{chunk-L6NCCSIP.js → chunk-PTK4QAOQ.js} +36 -29
- package/{chunk-HL42K2NH.js → chunk-Q7KVC5B4.js} +17 -17
- package/{chunk-H4NU7NPO.js → chunk-R3DTMBDT.js} +62 -61
- package/{chunk-KNUWZNFV.js → chunk-R4KPFBMK.js} +4 -6
- package/chunk-R5TQ3HNB.js +71 -0
- package/chunk-RFSPJECL.js +84 -0
- package/chunk-RPL6FRVX.js +88 -0
- package/{chunk-AN2RNJLR.js → chunk-STYOBAC7.js} +16 -16
- package/{chunk-X3PQANZO.js → chunk-SVUWR3HD.js} +47 -46
- package/chunk-T7P3OEBP.js +128 -0
- package/{chunk-QS4N4MNP.js → chunk-TB3ZRV3Y.js} +18 -20
- package/{chunk-MYEZXZZC.js → chunk-TOY6YPTG.js} +23 -25
- package/{chunk-XILQ7GXE.js → chunk-U6X6ODDJ.js} +11 -13
- package/{chunk-XZNHT6MO.js → chunk-UAJ6M34K.js} +115 -61
- package/chunk-W2EH6RY5.js +42 -0
- package/{chunk-FDKIX4DC.js → chunk-W2QQQWNE.js} +7 -9
- package/{chunk-LZMKSFCF.js → chunk-WALANB3V.js} +10 -12
- package/chunk-WCUR44O6.js +88 -0
- package/{chunk-BNTPPZCK.js → chunk-WJYJMX5S.js} +37 -39
- package/chunk-WZSLDYUU.js +131 -0
- package/{chunk-J3NSDRVH.js → chunk-XETMIETJ.js} +0 -2
- package/chunk-XU6JJDMZ.js +117 -0
- package/{chunk-BKZBWPUH.js → chunk-XWPH7C2W.js} +9 -11
- package/{chunk-GICKPMJU.js → chunk-YXWXSRXG.js} +31 -31
- package/{chunk-2HKBZFIK.js → chunk-YY236ZSJ.js} +31 -31
- package/{chunk-YX5VNRJX.js → chunk-YYFAZQ25.js} +0 -2
- package/{chunk-Y5AYU7PK.js → chunk-ZHFIWDGF.js} +0 -2
- package/components/accordion.js +2 -4
- package/components/action-button.d.ts +37 -0
- package/components/action-button.js +5 -0
- package/components/agent-loading.d.ts +2 -0
- package/components/agent-loading.js +2 -4
- package/components/agent-picker.js +5 -5
- package/components/agent-suggestion.js +5 -6
- package/components/alert.d.ts +37 -0
- package/components/alert.js +5 -0
- package/components/announcement-bar.js +7 -7
- package/components/attachment.js +5 -5
- package/components/avatar.js +4 -6
- package/components/badge.js +2 -4
- package/components/banner-mesh.js +1 -3
- package/components/banner.js +6 -6
- package/components/bar-chart.js +10 -11
- package/components/breadcrumb.js +5 -6
- package/components/button-group.d.ts +26 -0
- package/components/button-group.js +5 -0
- package/components/button.d.ts +13 -1
- package/components/button.js +4 -4
- package/components/card.js +5 -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 +5 -5
- package/components/combobox.d.ts +12 -3
- package/components/combobox.js +10 -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 +5 -5
- package/components/date-picker.d.ts +26 -14
- package/components/date-picker.js +9 -9
- package/components/decision-card.js +7 -7
- package/components/dialog.d.ts +6 -8
- package/components/dialog.js +6 -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/field-group.d.ts +27 -0
- package/components/field-group.js +3 -0
- package/components/file-upload.js +7 -7
- package/components/floating.js +1 -3
- package/components/form-field.d.ts +38 -1
- package/components/form-field.js +2 -4
- package/components/form.d.ts +47 -0
- package/components/form.js +3 -0
- package/components/hover-card.d.ts +5 -2
- package/components/hover-card.js +2 -4
- package/components/input-group.d.ts +21 -0
- package/components/input-group.js +6 -0
- package/components/input-otp.d.ts +4 -2
- package/components/input-otp.js +7 -8
- package/components/input.d.ts +5 -1
- package/components/input.js +3 -5
- package/components/kbd.js +2 -4
- package/components/labels.d.ts +86 -0
- package/components/labels.js +1 -0
- package/components/line-chart.js +11 -12
- package/components/link.d.ts +20 -0
- package/components/link.js +3 -0
- package/components/list.d.ts +46 -0
- package/components/list.js +2 -0
- package/components/message-actions.js +5 -5
- package/components/message.js +8 -8
- package/components/number-input.d.ts +4 -2
- package/components/number-input.js +7 -8
- package/components/pagination.js +6 -6
- package/components/password-input.d.ts +16 -0
- package/components/password-input.js +7 -0
- package/components/popover.d.ts +11 -5
- package/components/popover.js +3 -4
- package/components/progress.js +2 -4
- package/components/prompt-bar.js +6 -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 +11 -2
- package/components/select.js +6 -7
- package/components/selectable-card.d.ts +37 -0
- package/components/selectable-card.js +2 -0
- package/components/selectable-checkbox.d.ts +14 -0
- package/components/selectable-checkbox.js +4 -0
- package/components/selectable-radio.d.ts +16 -0
- package/components/selectable-radio.js +3 -0
- package/components/separator.d.ts +18 -0
- package/components/separator.js +2 -0
- package/components/sheet.d.ts +4 -2
- package/components/sheet.js +7 -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/spinner.d.ts +18 -0
- package/components/spinner.js +3 -0
- package/components/split-button.d.ts +24 -0
- package/components/split-button.js +8 -0
- 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 +5 -5
- package/components/toggle.js +2 -4
- package/components/tooltip.d.ts +5 -2
- package/components/tooltip.js +3 -5
- package/index.d.ts +17 -2
- package/index.js +82 -231
- package/lib/utils.d.ts +8 -1
- package/lib/utils.js +1 -3
- package/package.json +11 -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 +0 -151
- 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-MYEZXZZC.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-TX3H3QMA.js.map +0 -1
- package/chunk-UBNHSZSE.js +0 -88
- 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-NSRTTYQ4.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/combobox.tsx"],"names":["PopoverPrimitive"],"mappings":"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","file":"chunk-NSRTTYQ4.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { Popover as PopoverPrimitive } from 'radix-ui'\nimport { Search } from 'iconoir-react'\nimport { cn } from '../lib/utils'\nimport { Button } from './button'\nimport { Chip } from './chip'\nimport { MenuItemContent, menuItemClass, menuSurfaceClass } from './dropdown'\nimport { FieldChrome, SelectChevron, useFieldChrome, type SelectOption } from './select'\n\n/**\n * Combobox, 1:1 with the uiKit `Combobox` set (4023:3549): Select's field, opening a searchable\n * list. The panel is the menu surface at the field's width (240 at least): a 36px search row\n * (16px icon, 14px query, 12px in) over a border/subtle rule, then the matching options as\n * inline menu rows 2px apart in 4px of padding.\n *\n * Single: a pick fills the field with its label and closes the list. Multiple: each pick\n * toggles and the list stays open; the field shows the picks as small outline chips, 4px\n * apart, each with its own remove button, and grows a row at a time as they wrap. The chips sit\n * 3px from the field's edge, so their labels start where a value's text would. With more than\n * one pick, Clear (the xs tertiary button) shows on the label's line at the field's right edge.\n *\n * `footer` adds Cancel (secondary) and Apply (primary) under a border/subtle rule, 8px in: picks\n * then wait for Apply, which stays disabled until something is picked; Cancel or Escape drops\n * them.\n *\n * Typing filters by label and description. Arrow keys move the highlight, Enter picks it, the\n * pointer highlights what it is over. The query field is a `combobox` that owns the `listbox`.\n */\nexport interface ComboboxProps {\n options: SelectOption[]\n /** The applied picks. */\n value?: string[]\n defaultValue?: string[]\n onValueChange?: (value: string[]) => void\n multiple?: boolean\n /** Cancel and Apply under the list; picks apply only with Apply. */\n footer?: boolean\n placeholder?: string\n searchPlaceholder?: string\n /** Shown when nothing matches the query. */\n emptyText?: React.ReactNode\n applyLabel?: string\n cancelLabel?: string\n clearLabel?: string\n label?: React.ReactNode\n hint?: React.ReactNode\n error?: React.ReactNode | boolean\n size?: 'sm' | 'md' | 'lg'\n leadingIcon?: React.ReactNode\n disabled?: boolean\n id?: string\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n /** Portal target. Defaults to `document.body`. */\n container?: HTMLElement | null\n /** Keep focus where it is when the panel opens (inline previews). */\n onOpenAutoFocus?: (event: Event) => void\n /** A press outside the panel; `preventDefault()` keeps it open. */\n onInteractOutside?: (event: Event) => void\n 'aria-label'?: string\n wrapperClassName?: string\n className?: string\n}\n\nconst matches = (o: SelectOption, q: string) => {\n const t = q.trim().toLowerCase()\n if (!t) return true\n return o.label.toLowerCase().includes(t) || (typeof o.description === 'string' && o.description.toLowerCase().includes(t))\n}\n\nexport function Combobox({\n options,\n value,\n defaultValue = [],\n onValueChange,\n multiple = false,\n footer = false,\n placeholder = 'Select…',\n searchPlaceholder = 'Search…',\n emptyText = 'No results',\n applyLabel = 'Apply',\n cancelLabel = 'Cancel',\n clearLabel = 'Clear',\n label,\n hint,\n error,\n size = 'md',\n leadingIcon,\n disabled,\n id,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n container,\n onOpenAutoFocus,\n onInteractOutside,\n wrapperClassName,\n className,\n ...props\n}: ComboboxProps) {\n const chrome = useFieldChrome({ id, disabled, error, hint })\n const listId = `${chrome.controlId}-list`\n\n const [uncontrolledValue, setUncontrolledValue] = React.useState(defaultValue)\n const applied = value ?? uncontrolledValue\n const commit = (next: string[]) => {\n if (value == null) setUncontrolledValue(next)\n onValueChange?.(next)\n }\n\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen)\n const open = openProp ?? uncontrolledOpen\n\n // With a footer, picks wait here for Apply; without one they apply at once.\n const [pending, setPending] = React.useState<string[]>(applied)\n const picks = footer ? pending : applied\n const [query, setQuery] = React.useState('')\n const [active, setActive] = React.useState(0)\n\n const setOpen = (next: boolean) => {\n if (next) {\n setPending(applied)\n setQuery('')\n setActive(0)\n }\n if (openProp == null) setUncontrolledOpen(next)\n onOpenChange?.(next)\n }\n\n const shown = options.filter((o) => matches(o, query))\n const pick = (v: string) => {\n const next = multiple ? (picks.includes(v) ? picks.filter((x) => x !== v) : [...picks, v]) : picks[0] === v && footer ? [] : [v]\n if (footer) return setPending(next)\n commit(next)\n if (!multiple) setOpen(false)\n }\n const apply = () => {\n commit(pending)\n setOpen(false)\n }\n\n const chosen = applied.map((v) => options.find((o) => o.value === v)).filter(Boolean) as SelectOption[]\n const chips = multiple && chosen.length > 0\n const triggerText = !multiple && chosen[0] ? chosen[0].label : chips ? null : placeholder\n // As in Select: left out, a single pick's own icon leads the field.\n const lead = leadingIcon ?? (!multiple ? chosen[0]?.icon : undefined)\n\n return (\n <FieldChrome\n label={label}\n chrome={chrome}\n className={wrapperClassName}\n action={\n label && multiple && chosen.length > 1 ? (\n <Button variant=\"tertiary\" size=\"xs\" disabled={chrome.disabled} onClick={() => commit([])}>\n {clearLabel}\n </Button>\n ) : undefined\n }\n >\n <PopoverPrimitive.Root open={open} onOpenChange={setOpen}>\n <PopoverPrimitive.Anchor asChild>\n <div\n data-slot=\"combobox-field\"\n data-size={size}\n data-multiple={chips || undefined}\n data-leading={lead ? true : undefined}\n data-filled={chosen.length ? true : undefined}\n data-invalid={chrome.invalid || undefined}\n data-disabled={chrome.disabled || undefined}\n data-state={open ? 'open' : 'closed'}\n className={cn('satin-field satin-select satin-combobox relative', className)}\n >\n {/* The trigger covers the whole field under the chips, so a click anywhere but a\n chip's remove button or Clear opens the list, and it takes no room in the rows. */}\n <PopoverPrimitive.Trigger\n id={chrome.controlId}\n data-slot=\"combobox-trigger\"\n disabled={chrome.disabled}\n aria-invalid={chrome.invalid || undefined}\n aria-describedby={chrome.describedBy}\n aria-label={props['aria-label']}\n aria-haspopup=\"listbox\"\n className=\"absolute inset-0 cursor-pointer rounded-[inherit] outline-none focus-visible:ring-0 disabled:cursor-not-allowed\"\n >\n <span className=\"sr-only\">{chosen.length ? chosen.map((o) => o.label).join(', ') : placeholder}</span>\n </PopoverPrimitive.Trigger>\n {lead && (\n <span className=\"satin-field-icon satin-combobox-icon pointer-events-none\" aria-hidden>\n {lead}\n </span>\n )}\n <div className=\"pointer-events-none flex min-w-0 flex-1 flex-wrap items-center gap-1 *:pointer-events-auto\">\n {chips &&\n chosen.map((o) => (\n <Chip\n key={o.value}\n size=\"sm\"\n variant=\"outline\"\n disabled={chrome.disabled}\n removeLabel={`Remove ${o.label}`}\n onRemove={() => commit(applied.filter((v) => v !== o.value))}\n className=\"relative\"\n >\n {o.label}\n </Chip>\n ))}\n {triggerText && (\n <span aria-hidden className={cn('pointer-events-none! min-w-0 flex-1 truncate', chosen.length ? 'text-text-default' : 'text-text-muted')}>\n {triggerText}\n </span>\n )}\n {/* Without a label there is no line above the field for Clear: it follows the chips. */}\n {!label && chips && chosen.length > 1 && (\n <Button\n variant=\"tertiary\"\n size=\"xs\"\n disabled={chrome.disabled}\n className=\"relative ml-auto\"\n onClick={() => commit([])}\n >\n {clearLabel}\n </Button>\n )}\n </div>\n <SelectChevron className=\"satin-combobox-icon pointer-events-none\" />\n </div>\n </PopoverPrimitive.Anchor>\n\n <PopoverPrimitive.Portal container={container}>\n <PopoverPrimitive.Content\n data-slot=\"combobox\"\n side=\"bottom\"\n align=\"start\"\n sideOffset={4}\n collisionPadding={8}\n onOpenAutoFocus={onOpenAutoFocus}\n onInteractOutside={onInteractOutside}\n className={cn(\n 'pointer-events-auto z-50 flex w-(--radix-popover-trigger-width) min-w-60 max-w-[520px] flex-col overflow-hidden',\n menuSurfaceClass,\n 'origin-(--radix-popover-content-transform-origin) outline-none',\n 'data-[state=open]:animate-[satin-enter_var(--duration-base)_var(--ease-out)]',\n )}\n >\n <label className=\"flex h-9 shrink-0 items-center gap-2 border-b border-border-subtle px-3 text-text-muted\">\n <Search aria-hidden className=\"size-4 shrink-0 [stroke-width:1.875]\" />\n <input\n role=\"combobox\"\n aria-expanded\n aria-controls={listId}\n aria-autocomplete=\"list\"\n aria-activedescendant={shown[active] ? `${listId}-${shown[active].value}` : undefined}\n aria-label={searchPlaceholder}\n value={query}\n placeholder={searchPlaceholder}\n onChange={(e) => {\n setQuery(e.target.value)\n setActive(0)\n }}\n onKeyDown={(e) => {\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault()\n const step = e.key === 'ArrowDown' ? 1 : -1\n setActive((a) => (shown.length ? (a + step + shown.length) % shown.length : 0))\n } else if (e.key === 'Enter' && shown[active]) {\n e.preventDefault()\n if (!shown[active].disabled) pick(shown[active].value)\n }\n }}\n className=\"min-w-0 flex-1 bg-transparent text-base leading-[21px] text-text-default outline-none placeholder:text-text-muted focus-visible:ring-0\"\n />\n </label>\n\n <div\n id={listId}\n role=\"listbox\"\n aria-multiselectable={multiple || undefined}\n className=\"flex max-h-60 flex-col gap-0.5 overflow-y-auto p-1\"\n >\n {shown.length === 0 ? (\n <p className=\"px-3 py-6 text-center text-sm text-text-muted\">{emptyText}</p>\n ) : (\n shown.map((o, i) => {\n const picked = picks.includes(o.value)\n return (\n <div\n key={o.value}\n id={`${listId}-${o.value}`}\n role=\"option\"\n aria-selected={picked}\n aria-disabled={o.disabled || undefined}\n data-highlighted={i === active ? '' : undefined}\n data-disabled={o.disabled ? '' : undefined}\n onPointerMove={() => setActive(i)}\n // Keep focus in the query field.\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => !o.disabled && pick(o.value)}\n className={cn(menuItemClass, picked && 'bg-bg-selected')}\n >\n <MenuItemContent\n label={o.label}\n description={o.description}\n icon={o.icon}\n layout=\"inline\"\n shortcut={o.shortcut}\n selected={picked}\n />\n </div>\n )\n })\n )}\n </div>\n\n {footer && (\n <div className=\"flex shrink-0 items-center justify-end gap-2 border-t border-border-subtle p-2\">\n <Button variant=\"secondary\" onClick={() => setOpen(false)}>\n {cancelLabel}\n </Button>\n <Button disabled={pending.length === 0} onClick={apply}>\n {applyLabel}\n </Button>\n </div>\n )}\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n </FieldChrome>\n )\n}\n"]}
|
package/chunk-O7F3CIDV.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/badge.tsx"],"names":[],"mappings":";;;;;AAcA,IAAM,aAAA,GAAgB,GAAA;AAAA,EACpB;AAAA,IACE,sHAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,WAAA;AAAA,QACJ,EAAA,EAAI;AAAA,OACN;AAAA,MACA,OAAA,EAAS;AAAA,QACP,IAAA,EAAM,YAAA;AAAA,QACN,KAAA,EAAO,gBAAA;AAAA;AAAA,QAEP,OAAA,EAAS;AAAA,OACX;AAAA,MACA,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,YAAA;AAAA,QACT,OAAA,EAAS;AAAA;AACX,KACF;AAAA,IACA,iBAAiB,EAAE,IAAA,EAAM,MAAM,OAAA,EAAS,MAAA,EAAQ,OAAO,SAAA;AAAU;AAErE;AAMO,SAAS,KAAA,CAAM,EAAE,SAAA,EAAW,IAAA,GAAO,SAAA,EAAW,MAAM,OAAA,EAAS,KAAA,EAAO,GAAG,KAAA,EAAM,EAAe;AACjG,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,OAAA;AAAA,MACV,WAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAW,GAAG,aAAA,CAAc,EAAE,MAAM,OAAA,EAAS,KAAA,EAAO,CAAA,EAAG,SAAS,CAAA;AAAA,MAC/D,GAAG;AAAA;AAAA,GACN;AAEJ","file":"chunk-O7F3CIDV.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../lib/utils'\n\nexport type BadgeTone = 'neutral' | 'brand' | 'sky' | 'green' | 'amber' | 'red' | 'fuchsia' | 'plum'\n\n/**\n * Badge, 1:1 with the uiKit `Badge` set (988:20203): eight tones, Large (8 × 4 padding, 24\n * high) or Small (6 × 2, 20 high), Soft (tone fill), Plain (no fill) or Outline (bg/card with a border/default edge), radius-sm or full.\n * Label medium 13/16, icon 14px in the tone colour, 4px apart. No border, no shadow.\n * The tone comes from `data-tone`, which repoints the `tone/*` tokens.\n */\nconst badgeVariants = cva(\n [\n 'inline-flex shrink-0 items-center gap-1 text-sm leading-4 font-medium tracking-normal whitespace-nowrap text-tone-fg',\n '[&_svg]:pointer-events-none [&_svg]:size-icon-size-sm [&_svg]:shrink-0 [&_svg]:[stroke-width:1.875]',\n ],\n {\n variants: {\n size: {\n lg: 'px-2 py-1',\n sm: 'px-1.5 py-0.5',\n },\n variant: {\n soft: 'bg-tone-bg',\n plain: 'bg-transparent',\n // White (bg/card) inside a 1px border/default edge, drawn inset so the size stays put.\n outline: 'bg-bg-card [box-shadow:inset_0_0_0_1px_var(--border-default)]',\n },\n shape: {\n default: 'rounded-sm',\n rounded: 'rounded-pill',\n },\n },\n defaultVariants: { size: 'lg', variant: 'soft', shape: 'default' },\n },\n)\n\nexport interface BadgeProps extends React.ComponentProps<'span'>, VariantProps<typeof badgeVariants> {\n tone?: BadgeTone\n}\n\nexport function Badge({ className, tone = 'neutral', size, variant, shape, ...props }: BadgeProps) {\n return (\n <span\n data-slot=\"badge\"\n data-tone={tone}\n className={cn(badgeVariants({ size, variant, shape }), className)}\n {...props}\n />\n )\n}\n\nexport { badgeVariants }\n"]}
|
package/chunk-P4O6TGDR.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/command-menu.tsx"],"names":["DialogPrimitive"],"mappings":"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","file":"chunk-P4O6TGDR.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { Dialog as DialogPrimitive } from 'radix-ui'\nimport { Search } from 'iconoir-react'\nimport { cn } from '../lib/utils'\nimport { menuItemClass, MenuItemContent } from './dropdown'\nimport { Kbd, KbdArrowDown, KbdArrowUp, KbdHint, KbdReturn } from './kbd'\n\n/**\n * Command menu, 1:1 with the uiKit `Command menu` set (4024:3582): the ⌘K palette. A 520px\n * popover surface (radius-2xl, border/subtle, the shadcn `lg` shadow) with a 48px search row\n * (16px icon, 14px query, an Esc key, 16px in) over a border/subtle rule; titled groups 8px\n * apart in 8px of padding, each with a 24px heading (12px medium, text/muted) and inline menu\n * rows; and a 40px footer of key hints (Navigate, Open on the left, Close on the right).\n *\n * Rows are the Dropdown's: a 16px icon, the label, an optional description after it and an\n * optional `shortcut` (Kbd sm) on the right. The highlighted row takes the menu highlight,\n * bg/selected, whether the pointer or the arrow keys put it there. The first match is\n * highlighted; Enter runs it and closes the menu.\n *\n * It sits in the middle of the screen (or of its `container`).\n *\n * Built on the Radix Dialog (focus trap, Escape, focus back to where it was). With `hotkey`,\n * ⌘K or Ctrl+K anywhere on the page toggles it.\n */\nexport interface CommandItem {\n id: string\n label: string\n description?: string\n icon?: React.ReactNode\n /** Keys that run it outside the menu, e.g. \"⌘N\". Optional. */\n shortcut?: string\n /** More words to match on. */\n keywords?: string[]\n disabled?: boolean\n onSelect?: () => void\n}\n\nexport interface CommandGroup {\n label: React.ReactNode\n items: CommandItem[]\n}\n\nexport interface CommandMenuProps {\n groups: CommandGroup[]\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n /** Toggle the menu with ⌘K / Ctrl+K. */\n hotkey?: boolean\n placeholder?: string\n /** Shown when nothing matches; gets the query. */\n emptyText?: (query: string) => React.ReactNode\n /** Show the footer of key hints. */\n hints?: boolean\n /** Modal blocks the page and shows the overlay; turn it off for inline previews. */\n modal?: boolean\n /** Portal target. Defaults to `document.body`. */\n container?: HTMLElement | null\n onOpenAutoFocus?: (event: Event) => void\n className?: string\n}\n\nconst hit = (item: CommandItem, q: string) => {\n const t = q.trim().toLowerCase()\n if (!t) return true\n return [item.label, item.description ?? '', ...(item.keywords ?? [])].some((s) => s.toLowerCase().includes(t))\n}\n\nexport function CommandMenu({\n groups,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n hotkey = true,\n placeholder = 'Type a command or search…',\n emptyText = (q) => `No results for “${q}”`,\n hints = true,\n modal = true,\n container,\n onOpenAutoFocus,\n className,\n}: CommandMenuProps) {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen)\n const open = openProp ?? uncontrolledOpen\n const setOpen = React.useCallback(\n (next: boolean) => {\n if (openProp == null) setUncontrolledOpen(next)\n onOpenChange?.(next)\n },\n [openProp, onOpenChange],\n )\n\n const [query, setQuery] = React.useState('')\n const [active, setActive] = React.useState(0)\n const listId = React.useId()\n const listRef = React.useRef<HTMLDivElement>(null)\n\n React.useEffect(() => {\n if (!hotkey) return\n const onKey = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === 'k') {\n e.preventDefault()\n setOpen(!open)\n }\n }\n document.addEventListener('keydown', onKey)\n return () => document.removeEventListener('keydown', onKey)\n }, [hotkey, open, setOpen])\n\n // A fresh query every time it opens.\n React.useEffect(() => {\n if (open) {\n setQuery('')\n setActive(0)\n }\n }, [open])\n\n const shown = groups.map((g) => ({ ...g, items: g.items.filter((i) => hit(i, query)) })).filter((g) => g.items.length)\n const flat = shown.flatMap((g) => g.items)\n const optionId = (i: number) => `${listId}-${i}`\n\n // Keep the highlighted row in view as the arrows move it.\n React.useEffect(() => {\n listRef.current?.querySelector(`[id=\"${optionId(active)}\"]`)?.scrollIntoView({ block: 'nearest' })\n }, [active])\n\n const run = (item: CommandItem | undefined) => {\n if (!item || item.disabled) return\n setOpen(false)\n item.onSelect?.()\n }\n\n const position = container ? 'absolute' : 'fixed'\n let index = -1\n\n return (\n <DialogPrimitive.Root open={open} onOpenChange={setOpen} modal={modal}>\n <DialogPrimitive.Portal container={container}>\n <DialogPrimitive.Overlay className={cn(position, 'inset-0 z-50 bg-black-a40')} />\n <div className={cn(position, 'pointer-events-none inset-0 z-50 flex items-center justify-center p-4')}>\n <DialogPrimitive.Content\n data-slot=\"command-menu\"\n aria-describedby={undefined}\n onOpenAutoFocus={onOpenAutoFocus}\n className={cn(\n 'pointer-events-auto flex h-fit max-h-[min(480px,76vh)] w-[520px] max-w-full flex-col overflow-hidden',\n 'rounded-2xl border border-border-subtle bg-bg-popover',\n '[box-shadow:0_4px_6px_-4px_var(--effect-shadow-sm),0_10px_15px_-3px_var(--effect-shadow-sm)]',\n 'outline-none data-[state=open]:animate-[satin-enter_var(--duration-base)_var(--ease-out)]',\n className,\n )}\n >\n <DialogPrimitive.Title className=\"sr-only\">Command menu</DialogPrimitive.Title>\n <label className=\"flex h-12 shrink-0 items-center gap-2 border-b border-border-subtle px-4 text-text-muted\">\n <Search aria-hidden className=\"size-4 shrink-0 [stroke-width:1.875]\" />\n <input\n role=\"combobox\"\n aria-expanded\n aria-controls={listId}\n aria-autocomplete=\"list\"\n aria-activedescendant={flat[active] ? optionId(active) : undefined}\n aria-label=\"Search commands\"\n value={query}\n placeholder={placeholder}\n onChange={(e) => {\n setQuery(e.target.value)\n setActive(0)\n }}\n onKeyDown={(e) => {\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault()\n const step = e.key === 'ArrowDown' ? 1 : -1\n setActive((a) => (flat.length ? (a + step + flat.length) % flat.length : 0))\n } else if (e.key === 'Enter') {\n e.preventDefault()\n run(flat[active])\n }\n }}\n className=\"min-w-0 flex-1 bg-transparent text-base leading-[21px] text-text-default outline-none placeholder:text-text-muted focus-visible:ring-0\"\n />\n <Kbd size=\"md\" aria-hidden>\n Esc\n </Kbd>\n </label>\n\n <div ref={listRef} id={listId} role=\"listbox\" aria-label=\"Commands\" className=\"flex min-h-0 flex-col gap-2 overflow-y-auto p-2\">\n {flat.length === 0 ? (\n <p className=\"px-2 py-8 text-center text-sm text-text-muted\">{emptyText(query)}</p>\n ) : (\n shown.map((g, gi) => (\n <div key={gi} role=\"group\" aria-labelledby={`${listId}-g${gi}`} className=\"flex flex-col\">\n <div id={`${listId}-g${gi}`} className=\"flex h-6 items-center px-2 text-xs leading-3 font-medium tracking-normal text-text-muted\">\n {g.label}\n </div>\n {g.items.map((item) => {\n index += 1\n const i = index\n return (\n <div\n key={item.id}\n id={optionId(i)}\n role=\"option\"\n aria-selected={i === active}\n aria-disabled={item.disabled || undefined}\n data-highlighted={i === active ? '' : undefined}\n data-disabled={item.disabled ? '' : undefined}\n onPointerMove={() => setActive(i)}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => run(item)}\n className={menuItemClass}\n >\n <MenuItemContent\n label={item.label}\n description={item.description}\n icon={item.icon}\n layout=\"inline\"\n shortcut={item.shortcut}\n />\n </div>\n )\n })}\n </div>\n ))\n )}\n </div>\n\n {hints && (\n <div aria-hidden className=\"flex h-10 shrink-0 items-center gap-4 border-t border-border-subtle px-4\">\n <KbdHint keys={[<KbdArrowUp key=\"up\" />, <KbdArrowDown key=\"down\" />]} label=\"Navigate\" />\n <KbdHint keys={[<KbdReturn key=\"return\" />]} label=\"Open\" />\n <KbdHint className=\"ml-auto\" keys={['Esc']} label=\"Close\" />\n </div>\n )}\n </DialogPrimitive.Content>\n </div>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n )\n}\n"]}
|
package/chunk-PF3YBUKT.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/context-menu.tsx"],"names":["ContextPrimitive"],"mappings":"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","file":"chunk-PF3YBUKT.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { ContextMenu as ContextPrimitive } from 'radix-ui'\nimport { NavArrowRight } from 'iconoir-react'\nimport { cn } from '../lib/utils'\nimport { MenuItemContent, menuItemClass, menuSurfaceClass, type MenuItemContentProps } from './dropdown'\n\n/**\n * ContextMenu, 1:1 with the uiKit design (🆕 context menu & hover card): DropdownMenu's surface\n * and rows, opened by right-click (or a long press) on its target, at the pointer. 255 wide, 4px\n * in, rows 0 apart, separators a 1px bg/muted rule. Shortcuts on the right as Kbd; a submenu row\n * ends in a text/muted chevron (the kit's `showSubmenu`) and opens beside it, 4px off; destructive\n * rows are action/destructive/fg (red-400 in dark), icon included, and go last.\n *\n * Built on the Radix ContextMenu: arrow keys, typeahead, Escape, Shift+F10 / the menu key on the\n * focused target.\n */\nexport interface ContextMenuProps {\n /** What right-click opens the menu on. Rendered with `asChild`, so pass one element. */\n trigger: React.ReactNode\n /** `ContextMenuItem`s, `ContextMenuSub`s and `ContextMenuSeparator`s. */\n children: React.ReactNode\n onOpenChange?: (open: boolean) => void\n /** Portal target. Defaults to `document.body`. */\n container?: HTMLElement | null\n /** Modal menus block the rest of the page while open. */\n modal?: boolean\n /** Focus moved outside a non-modal menu; call `preventDefault()` to keep it open. */\n onFocusOutside?: (event: Event) => void\n className?: string\n}\n\nconst contentClass = cn(\n 'pointer-events-auto z-50 flex w-[255px] max-w-[calc(100vw-16px)] flex-col overflow-x-clip overflow-y-auto p-1',\n menuSurfaceClass,\n 'outline-none data-[state=open]:animate-[satin-enter_var(--duration-base)_var(--ease-out)]',\n)\n\nexport function ContextMenu({\n trigger,\n children,\n onOpenChange,\n container,\n modal = true,\n onFocusOutside,\n className,\n}: ContextMenuProps) {\n return (\n <ContextPrimitive.Root onOpenChange={onOpenChange} modal={modal}>\n <ContextPrimitive.Trigger asChild>{trigger}</ContextPrimitive.Trigger>\n <ContextPrimitive.Portal container={container}>\n <ContextPrimitive.Content\n data-slot=\"context-menu\"\n collisionPadding={8}\n onFocusOutside={onFocusOutside}\n className={cn(contentClass, 'origin-(--radix-context-menu-content-transform-origin)', 'max-h-(--radix-context-menu-content-available-height)', className)}\n >\n {children}\n </ContextPrimitive.Content>\n </ContextPrimitive.Portal>\n </ContextPrimitive.Root>\n )\n}\n\nexport interface ContextMenuItemProps\n extends Omit<React.ComponentProps<typeof ContextPrimitive.Item>, 'children'>,\n Pick<MenuItemContentProps, 'icon' | 'shortcut' | 'description'> {\n label: string\n /** Deletes or removes: action/destructive/fg, and best placed last. */\n destructive?: boolean\n}\n\nexport function ContextMenuItem({ label, icon, shortcut, description, destructive, className, ...props }: ContextMenuItemProps) {\n return (\n <ContextPrimitive.Item\n data-slot=\"context-menu-item\"\n textValue={label}\n className={cn(menuItemClass, destructive && '[&_*]:text-action-destructive-fg', className)}\n {...props}\n >\n <MenuItemContent label={label} icon={icon} shortcut={shortcut} description={description} layout=\"inline\" />\n </ContextPrimitive.Item>\n )\n}\n\nexport interface ContextMenuSubProps extends Pick<MenuItemContentProps, 'icon'> {\n label: string\n /** The submenu's items. */\n children: React.ReactNode\n disabled?: boolean\n}\n\n/** A row that opens a submenu beside it (hover, →, or Enter). */\nexport function ContextMenuSub({ label, icon, children, disabled }: ContextMenuSubProps) {\n return (\n <ContextPrimitive.Sub>\n <ContextPrimitive.SubTrigger\n data-slot=\"context-menu-sub\"\n disabled={disabled}\n textValue={label}\n className={cn(menuItemClass, 'data-[state=open]:bg-bg-selected')}\n >\n <MenuItemContent label={label} icon={icon} layout=\"inline\" />\n <NavArrowRight aria-hidden className=\"size-4 text-text-muted [stroke-width:1.875]\" />\n </ContextPrimitive.SubTrigger>\n <ContextPrimitive.Portal>\n <ContextPrimitive.SubContent\n sideOffset={4}\n alignOffset={-5}\n collisionPadding={8}\n className={cn(contentClass, 'w-[220px] origin-(--radix-context-menu-content-transform-origin)')}\n >\n {children}\n </ContextPrimitive.SubContent>\n </ContextPrimitive.Portal>\n </ContextPrimitive.Sub>\n )\n}\n\n/** A 1px bg/muted rule between groups of rows. */\nexport function ContextMenuSeparator({ className }: { className?: string }) {\n return <ContextPrimitive.Separator className={cn('-mx-1 my-1 h-px bg-bg-muted', className)} />\n}\n"]}
|
package/chunk-PVOLDO4G.js
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { Thinking } from './chunk-ESC5JCVQ.js';
|
|
2
|
-
import { MessageActions } from './chunk-AN2RNJLR.js';
|
|
3
|
-
import { cn } from './chunk-H63FYCMY.js';
|
|
4
|
-
import 'react';
|
|
5
|
-
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
6
|
-
|
|
7
|
-
function Message({
|
|
8
|
-
role = "assistant",
|
|
9
|
-
thinking,
|
|
10
|
-
thinkingLabel = "Thought for a moment",
|
|
11
|
-
source,
|
|
12
|
-
actions = true,
|
|
13
|
-
timestamp,
|
|
14
|
-
onFeedback,
|
|
15
|
-
onCopy,
|
|
16
|
-
onShare,
|
|
17
|
-
className,
|
|
18
|
-
children,
|
|
19
|
-
...props
|
|
20
|
-
}) {
|
|
21
|
-
if (role === "user") {
|
|
22
|
-
return /* @__PURE__ */ jsxs("div", { "data-slot": "message", "data-role": "user", className: cn("flex flex-col items-end gap-2", className), ...props, children: [
|
|
23
|
-
source && /* @__PURE__ */ jsx(SourceCard, { source }),
|
|
24
|
-
/* @__PURE__ */ jsx("div", { className: "max-w-full rounded-xl rounded-br-xs bg-action-inverse-bg px-3 py-2", children: /* @__PURE__ */ jsx("div", { className: "max-w-64 text-body break-words text-text-on-inverse", children }) })
|
|
25
|
-
] });
|
|
26
|
-
}
|
|
27
|
-
return /* @__PURE__ */ jsxs("div", { "data-slot": "message", "data-role": "assistant", className: cn("flex flex-col items-start gap-3", className), ...props, children: [
|
|
28
|
-
thinking && thinking.length > 0 && /* @__PURE__ */ jsx(Thinking, { state: "collapsed", label: thinkingLabel, steps: thinking }),
|
|
29
|
-
/* @__PURE__ */ jsx("div", { className: "w-full text-body break-words text-text-default", children }),
|
|
30
|
-
actions && /* @__PURE__ */ jsx(MessageActions, { timestamp, onFeedback, onCopy, onShare })
|
|
31
|
-
] });
|
|
32
|
-
}
|
|
33
|
-
function SourceCard({ source }) {
|
|
34
|
-
const body = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
35
|
-
source.icon && /* @__PURE__ */ jsx("span", { className: "flex size-4 shrink-0 items-center justify-center [&>*]:size-4", children: source.icon }),
|
|
36
|
-
/* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-col overflow-clip whitespace-nowrap", children: [
|
|
37
|
-
/* @__PURE__ */ jsx("span", { className: "truncate text-sm leading-[18px] font-medium text-text-default", children: source.title }),
|
|
38
|
-
source.url != null && /* @__PURE__ */ jsx("span", { className: "truncate text-xs leading-3 tracking-normal text-text-muted", children: source.url })
|
|
39
|
-
] })
|
|
40
|
-
] });
|
|
41
|
-
const cls = "flex max-w-full items-center gap-2.5 overflow-clip rounded-lg border border-border-subtle bg-bg-canvas py-2 pr-3 pl-2.5";
|
|
42
|
-
return source.href ? /* @__PURE__ */ jsx("a", { href: source.href, className: cls, children: body }) : /* @__PURE__ */ jsx("div", { className: cls, children: body });
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export { Message };
|
|
46
|
-
//# sourceMappingURL=chunk-PVOLDO4G.js.map
|
|
47
|
-
//# sourceMappingURL=chunk-PVOLDO4G.js.map
|
package/chunk-PVOLDO4G.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/message.tsx"],"names":[],"mappings":";;;;;;AA6CO,SAAS,OAAA,CAAQ;AAAA,EACtB,IAAA,GAAO,WAAA;AAAA,EACP,QAAA;AAAA,EACA,aAAA,GAAgB,sBAAA;AAAA,EAChB,MAAA;AAAA,EACA,OAAA,GAAU,IAAA;AAAA,EACV,SAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAiB;AACf,EAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,IAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,WAAA,EAAU,SAAA,EAAU,WAAA,EAAU,MAAA,EAAO,SAAA,EAAW,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA,EAAI,GAAG,KAAA,EACtG,QAAA,EAAA;AAAA,MAAA,MAAA,oBAAU,GAAA,CAAC,cAAW,MAAA,EAAgB,CAAA;AAAA,sBACvC,GAAA,CAAC,SAAI,SAAA,EAAU,oEAAA,EACb,8BAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qDAAA,EAAuD,QAAA,EAAS,CAAA,EACjF;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,WAAA,EAAU,SAAA,EAAU,WAAA,EAAU,WAAA,EAAY,SAAA,EAAW,EAAA,CAAG,iCAAA,EAAmC,SAAS,CAAA,EAAI,GAAG,KAAA,EAC7G,QAAA,EAAA;AAAA,IAAA,QAAA,IAAY,QAAA,CAAS,MAAA,GAAS,CAAA,oBAAK,GAAA,CAAC,QAAA,EAAA,EAAS,OAAM,WAAA,EAAY,KAAA,EAAO,aAAA,EAAe,KAAA,EAAO,QAAA,EAAU,CAAA;AAAA,oBACvG,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gDAAA,EAAkD,QAAA,EAAS,CAAA;AAAA,IACzE,2BAAW,GAAA,CAAC,cAAA,EAAA,EAAe,SAAA,EAAsB,UAAA,EAAwB,QAAgB,OAAA,EAAkB;AAAA,GAAA,EAC9G,CAAA;AAEJ;AAEA,SAAS,UAAA,CAAW,EAAE,MAAA,EAAO,EAA8B;AACzD,EAAA,MAAM,uBACJ,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,MAAA,CAAO,wBAAQ,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+DAAA,EAAiE,iBAAO,IAAA,EAAK,CAAA;AAAA,oBAC7G,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uDAAA,EACd,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+DAAA,EAAiE,QAAA,EAAA,MAAA,CAAO,KAAA,EAAM,CAAA;AAAA,MAC7F,MAAA,CAAO,OAAO,IAAA,oBACb,GAAA,CAAC,UAAK,SAAA,EAAU,4DAAA,EAA8D,iBAAO,GAAA,EAAI;AAAA,KAAA,EAE7F;AAAA,GAAA,EACF,CAAA;AAEF,EAAA,MAAM,GAAA,GAAM,yHAAA;AACZ,EAAA,OAAO,MAAA,CAAO,IAAA,mBACZ,GAAA,CAAC,GAAA,EAAA,EAAE,MAAM,MAAA,CAAO,IAAA,EAAM,SAAA,EAAW,GAAA,EAC9B,gBACH,CAAA,mBAEA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,KAAM,QAAA,EAAA,IAAA,EAAK,CAAA;AAE/B","file":"chunk-PVOLDO4G.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../lib/utils'\nimport { MessageActions, type MessageFeedback } from './message-actions'\nimport { Thinking, type ThinkingStep } from './thinking'\n\n/**\n * Message, 1:1 with the uiKit Message docs view (3890:70165), composed from `_chat/userMessage`\n * (901:20155), `_chat/source` and `_chat/answerActions` (901:20164, see MessageActions).\n *\n * user: a right-aligned action/inverse bubble (12px corners, 4px bottom-right), 12 × 8\n * padding, text/on-inverse 13/19.5, wrapping at 256px of text. A source card sits 8px above\n * it: bg/canvas, border/subtle, radius 10, 16px logo, title medium 13/18, url 12/12 muted.\n *\n * assistant: no bubble, so long answers read like a document — text/default 13/19.5, with\n * the collapsed Thinking above and the actions below, 12px apart.\n */\nexport interface MessageSource {\n /** The page or message title, \"Q3 pipeline review\". */\n title: React.ReactNode\n /** Shown under the title, \"docs.sature.app/q3-review\". */\n url?: React.ReactNode\n /** A 16px logo or favicon. */\n icon?: React.ReactNode\n /** Makes the card a link. */\n href?: string\n}\n\nexport interface MessageProps extends React.ComponentProps<'div'> {\n role?: 'user' | 'assistant'\n /** The steps the agent ran; shows a collapsed Thinking above an assistant answer. */\n thinking?: ThinkingStep[]\n /** The summary on that Thinking header. */\n thinkingLabel?: React.ReactNode\n /** A page or message the user brought in, shown as a card above their bubble. */\n source?: MessageSource\n /** Feedback, copy and share under an assistant answer. Off while it streams. */\n actions?: boolean\n timestamp?: string\n onFeedback?: (value: MessageFeedback) => void\n onCopy?: () => void\n onShare?: () => void\n}\n\nexport function Message({\n role = 'assistant',\n thinking,\n thinkingLabel = 'Thought for a moment',\n source,\n actions = true,\n timestamp,\n onFeedback,\n onCopy,\n onShare,\n className,\n children,\n ...props\n}: MessageProps) {\n if (role === 'user') {\n return (\n <div data-slot=\"message\" data-role=\"user\" className={cn('flex flex-col items-end gap-2', className)} {...props}>\n {source && <SourceCard source={source} />}\n <div className=\"max-w-full rounded-xl rounded-br-xs bg-action-inverse-bg px-3 py-2\">\n <div className=\"max-w-64 text-body break-words text-text-on-inverse\">{children}</div>\n </div>\n </div>\n )\n }\n\n return (\n <div data-slot=\"message\" data-role=\"assistant\" className={cn('flex flex-col items-start gap-3', className)} {...props}>\n {thinking && thinking.length > 0 && <Thinking state=\"collapsed\" label={thinkingLabel} steps={thinking} />}\n <div className=\"w-full text-body break-words text-text-default\">{children}</div>\n {actions && <MessageActions timestamp={timestamp} onFeedback={onFeedback} onCopy={onCopy} onShare={onShare} />}\n </div>\n )\n}\n\nfunction SourceCard({ source }: { source: MessageSource }) {\n const body = (\n <>\n {source.icon && <span className=\"flex size-4 shrink-0 items-center justify-center [&>*]:size-4\">{source.icon}</span>}\n <span className=\"flex min-w-0 flex-col overflow-clip whitespace-nowrap\">\n <span className=\"truncate text-sm leading-[18px] font-medium text-text-default\">{source.title}</span>\n {source.url != null && (\n <span className=\"truncate text-xs leading-3 tracking-normal text-text-muted\">{source.url}</span>\n )}\n </span>\n </>\n )\n const cls = 'flex max-w-full items-center gap-2.5 overflow-clip rounded-lg border border-border-subtle bg-bg-canvas py-2 pr-3 pl-2.5'\n return source.href ? (\n <a href={source.href} className={cls}>\n {body}\n </a>\n ) : (\n <div className={cls}>{body}</div>\n )\n}\n"]}
|
package/chunk-QS4N4MNP.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/pagination.tsx"],"names":["className","dir"],"mappings":"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","file":"chunk-QS4N4MNP.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { NavArrowLeft, NavArrowRight } from 'iconoir-react'\nimport { cn } from '../lib/utils'\nimport { Button } from './button'\nimport { SLIDE_MS, useSlidingIndicator } from './sliding-indicator'\n\n/**\n * Pagination, 1:1 with the uiKit `Pagination` set (4025:3807), two layouts:\n * - full: Previous and Next (tertiary md buttons with their arrows) around the page numbers,\n * 4px apart: the first and last page, the current one with `siblings` on each side, and an\n * ellipsis where pages are skipped. Pages are 28px squares, radius 10, 13px text/muted;\n * hover bg/hover and text/default; the current page bg/selected, text/default, medium.\n * - compact: icon-only Previous and Next around \"Page 5 of 12\" (13px, text/muted), 8px apart.\n *\n * Moving between pages (`motion`), the pages keep their places and only their numbers change:\n * - scroll (default): the pages are a strip. Each page slides from where it was to its new place,\n * a page coming into view slides out from under the ellipsis on the side the reader pages\n * towards, one leaving slides under the other and fades, and the pill under the current\n * page moves on the same 300 ms curve (sliding-indicator.tsx, shared with Tabs and the\n * Segmented control). Nothing is clipped and no number changes in place.\n * - slide: the current page's bg/selected pill slides under the numbers to the new\n * page, like the Segmented control's, 200 ms on ease-out; a number that changes in place\n * fades out before the new one fades in.\n * - none: no motion; the current page simply takes the pill.\n *\n * Previous and Next are disabled at the ends. With `getHref`, every page is a link (for pages\n * the server renders); without it they are buttons that call `onPageChange`.\n *\n * A `nav` named \"Pagination\"; the current page has aria-current=\"page\".\n */\nexport interface PaginationProps extends Omit<React.ComponentProps<'nav'>, 'children'> {\n /** How many pages there are. */\n pageCount: number\n /** The current page, from 1. */\n page?: number\n defaultPage?: number\n onPageChange?: (page: number) => void\n /** Each page's URL: pages become links. */\n getHref?: (page: number) => string\n layout?: 'full' | 'compact'\n /** Pages shown on each side of the current one (full layout). */\n siblings?: number\n previousLabel?: string\n nextLabel?: string\n /** How the row moves when the page changes. */\n motion?: 'slide' | 'scroll' | 'none'\n}\n\n/** The pages to show, with 'gap' where an ellipsis stands for skipped ones. Always 2 × siblings + 5 slots when there are enough pages, so the bar keeps its width. */\nexport function paginationRange(page: number, pageCount: number, siblings = 1): (number | 'gap')[] {\n const slots = siblings * 2 + 5\n const span = (a: number, b: number) => Array.from({ length: b - a + 1 }, (_, i) => a + i)\n if (pageCount <= slots) return span(1, pageCount)\n const left = Math.max(page - siblings, 1)\n const right = Math.min(page + siblings, pageCount)\n const showLeftGap = left > 3\n const showRightGap = right < pageCount - 2\n if (!showLeftGap) return [...span(1, slots - 2), 'gap', pageCount]\n if (!showRightGap) return [1, 'gap', ...span(pageCount - (slots - 3), pageCount)]\n return [1, 'gap', ...span(left, right), 'gap', pageCount]\n}\n\nconst pageClass = cn(\n 'relative z-10 grid h-control-height min-w-control-height place-items-center overflow-hidden rounded-lg px-1.5 text-sm text-text-muted tabular-nums',\n 'transition-colors duration-(--duration-fast) ease-(--ease-out) outline-none focus-visible:shadow-border-focus',\n 'hover:bg-bg-hover hover:text-text-default',\n 'aria-[current=page]:font-medium aria-[current=page]:text-text-default aria-[current=page]:hover:bg-transparent',\n)\n\ntype Dir = 'next' | 'prev'\n\n/** The strip's move, ms, and one page's step along it (a 28px page and the 4px gap), px. */\nconst STRIP_MS = SLIDE_MS\nconst STEP_PX = 32\n\n/**\n * A slot's number. When it changes, the old one stays on top of the new one for the length of\n * its exit, both in one grid cell, so the slot keeps the wider of the two and nothing jumps.\n */\nfunction PageText({ text, dir, motion }: { text: string; dir: Dir; motion: 'fade' | 'scroll' | 'none' }) {\n const [state, setState] = React.useState({ text, old: null as string | null, dir, n: 0 })\n if (state.text !== text) setState({ text, old: motion === 'none' ? null : state.text, dir, n: state.n + 1 })\n const animate = motion !== 'none' && state.n > 0\n return (\n // Clipped to the wider number, so in the compact \"Page 5 of 12\" a moving number never runs\n // into the words around it.\n <span className=\"inline-grid overflow-hidden align-bottom\">\n {state.old != null && (\n <span\n key={`o${state.n}`}\n aria-hidden\n data-motion={motion}\n data-phase=\"out\"\n data-dir={state.dir}\n className=\"satin-page-text col-start-1 row-start-1 text-center\"\n onAnimationEnd={() => setState((s) => ({ ...s, old: null }))}\n >\n {state.old}\n </span>\n )}\n <span\n key={`n${state.n}`}\n data-motion={animate ? motion : undefined}\n data-phase={animate ? 'in' : undefined}\n data-dir={state.dir}\n className=\"satin-page-text col-start-1 row-start-1 text-center\"\n >\n {state.text}\n </span>\n </span>\n )\n}\n\nexport function Pagination({\n pageCount,\n page: pageProp,\n defaultPage = 1,\n onPageChange,\n getHref,\n layout = 'full',\n siblings = 1,\n previousLabel = 'Previous',\n nextLabel = 'Next',\n motion = 'scroll',\n className,\n 'aria-label': ariaLabel = 'Pagination',\n ...props\n}: PaginationProps) {\n const [uncontrolled, setUncontrolled] = React.useState(defaultPage)\n const page = Math.min(Math.max(pageProp ?? uncontrolled, 1), Math.max(pageCount, 1))\n const go = (p: number) => {\n if (p < 1 || p > pageCount || p === page) return\n // Where every page is on screen right now (mid-move too), for the strip to move from.\n if (motion === 'scroll') snapshot()\n if (pageProp == null) setUncontrolled(p)\n onPageChange?.(p)\n }\n\n // Which way the reader is paging, for the scroll motion.\n const prevPage = React.useRef(page)\n const dir: Dir = page >= prevPage.current ? 'next' : 'prev'\n React.useEffect(() => {\n prevPage.current = page\n }, [page])\n\n // The pill under the current page slides to the new one (sliding-indicator.tsx); with\n // motion off it just moves.\n const listRef = React.useRef<HTMLUListElement>(null)\n const pill = useSlidingIndicator<HTMLLIElement>(listRef, '[aria-current=\"page\"]', `${page}|${pageCount}|${layout}|${siblings}`, {\n animate: motion !== 'none',\n })\n const textMotion = motion === 'slide' ? 'fade' : 'none'\n\n /* ---- scroll: the pages are a strip that moves (FLIP) ---- */\n // Each page is its own element, keyed by its number. When the page changes, every page that\n // stays slides from where it was to where it now is; a page coming into view slides in from\n // the side the reader is paging towards, out from under the ellipsis; one leaving slides\n // the other way and fades as it goes under the other ellipsis. The pill under the current\n // page moves on the same curve, so a page sliding into it lands with it.\n const ghostRef = React.useRef<HTMLLIElement>(null)\n const before = React.useRef<Map<string, { x: number; node: HTMLElement }> | null>(null)\n function snapshot() {\n const list = listRef.current\n if (!list) return\n const base = list.getBoundingClientRect().left\n const map = new Map<string, { x: number; node: HTMLElement }>()\n list.querySelectorAll<HTMLElement>('[data-cell]').forEach((li) => {\n const face = li.firstElementChild as HTMLElement | null\n if (face) map.set(li.dataset.cell!, { x: li.getBoundingClientRect().left - base, node: face.cloneNode(true) as HTMLElement })\n })\n before.current = map\n }\n React.useLayoutEffect(() => {\n const prev = before.current\n before.current = null\n const list = listRef.current\n if (!prev || !list || motion !== 'scroll' || layout !== 'full') return\n if (typeof window !== 'undefined' && window.matchMedia?.('(prefers-reduced-motion: reduce)').matches) return\n const sign = dir === 'next' ? 1 : -1\n const timing: KeyframeAnimationOptions = { duration: STRIP_MS, easing: 'cubic-bezier(0.23, 1, 0.32, 1)' }\n const seen = new Set<string>()\n list.querySelectorAll<HTMLElement>('[data-cell]').forEach((li) => {\n const key = li.dataset.cell!\n seen.add(key)\n li.getAnimations().forEach((a) => a.cancel())\n const from = prev.get(key)\n if (from) {\n const dx = from.x - li.offsetLeft\n if (Math.abs(dx) > 0.5) li.animate([{ transform: `translateX(${dx}px)` }, { transform: 'none' }], timing)\n } else {\n li.animate([{ transform: `translateX(${sign * STEP_PX}px)`, opacity: 0 }, { transform: 'none', opacity: 1 }], timing)\n }\n })\n // Pages that left: a copy of each, where it was, sliding off and fading.\n const layer = ghostRef.current\n if (!layer) return\n for (const [key, { x, node }] of prev) {\n if (seen.has(key)) continue\n node.removeAttribute('aria-current')\n node.style.cssText = `position:absolute;top:0;left:${x}px;margin:0`\n layer.appendChild(node)\n node\n .animate([{ transform: 'none', opacity: 1 }, { transform: `translateX(${-sign * STEP_PX}px)`, opacity: 0 }], {\n ...timing,\n duration: STRIP_MS * 0.6,\n })\n .finished.then(\n () => node.remove(),\n () => node.remove(),\n )\n }\n }, [page, motion, layout, dir])\n\n // A page as a link or a button; the same skin either way.\n const target = (p: number, className: string, children: React.ReactNode, extra?: React.HTMLAttributes<HTMLElement>) =>\n getHref ? (\n <a href={getHref(p)} className={className} onClick={() => go(p)} {...extra}>\n {children}\n </a>\n ) : (\n <button type=\"button\" className={cn('cursor-pointer', className)} onClick={() => go(p)} {...extra}>\n {children}\n </button>\n )\n\n const step = (dir: -1 | 1) => {\n const to = page + dir\n const disabled = to < 1 || to > pageCount\n const label = dir < 0 ? previousLabel : nextLabel\n const icon = dir < 0 ? <NavArrowLeft aria-hidden /> : <NavArrowRight aria-hidden />\n const compact = layout === 'compact'\n const content = compact ? icon : dir < 0 ? <>{icon}{label}</> : <>{label}{icon}</>\n // A link can't be disabled: at the ends it is a disabled button instead.\n return getHref && !disabled ? (\n <Button asChild variant=\"tertiary\" iconOnly={compact} aria-label={compact ? label : undefined}>\n <a href={getHref(to)} rel={dir < 0 ? 'prev' : 'next'} onClick={() => go(to)}>\n {content}\n </a>\n </Button>\n ) : (\n <Button variant=\"tertiary\" iconOnly={compact} aria-label={compact ? label : undefined} disabled={disabled} onClick={() => go(to)}>\n {content}\n </Button>\n )\n }\n\n return (\n <nav data-slot=\"pagination\" data-layout={layout} aria-label={ariaLabel} className={cn('flex items-center', className)} {...props}>\n {layout === 'compact' ? (\n <div className=\"flex items-center gap-2\">\n {step(-1)}\n <span className=\"text-sm text-text-muted tabular-nums\" aria-live=\"polite\">\n Page <PageText text={String(page)} dir={dir} motion={motion === 'scroll' ? 'scroll' : textMotion} /> of {pageCount}\n </span>\n {step(1)}\n </div>\n ) : (\n <ul ref={listRef} className=\"relative flex items-center gap-1\">\n <li\n ref={pill.ref}\n aria-hidden\n role=\"presentation\"\n className=\"pointer-events-none absolute top-0 left-0 h-control-height rounded-lg bg-bg-selected opacity-0\"\n />\n {/* Copies of the pages that just left, playing out; under the live pages. */}\n <li ref={ghostRef} aria-hidden role=\"presentation\" className=\"pointer-events-none absolute inset-0 overflow-visible\" />\n <li>{step(-1)}</li>\n {motion === 'scroll'\n ? // The strip: pages keyed by their number, the two ellipses by their side.\n paginationRange(page, pageCount, siblings).map((p, i, all) => {\n const key = p === 'gap' ? (i < all.length / 2 ? 'gap-start' : 'gap-end') : `p${p}`\n return (\n <li key={key} data-cell={key} className=\"relative\">\n {p === 'gap' ? (\n <span aria-hidden className={cn(pageClass, 'pointer-events-none')}>\n …\n </span>\n ) : (\n target(p, pageClass, p, {\n 'aria-current': p === page ? 'page' : undefined,\n 'aria-label': `Page ${p}`,\n } as React.HTMLAttributes<HTMLElement>)\n )}\n </li>\n )\n })\n : // Slots keep their places (keyed by position), so paging changes numbers, not elements.\n paginationRange(page, pageCount, siblings).map((p, i) => {\n const gap = p === 'gap'\n // A slot is the same element whether it holds a page or the ellipsis, so a page\n // coming out from behind \"…\" (or going behind it) plays the same motion as a number.\n const text = <PageText text={gap ? '…' : String(p)} dir={dir} motion={textMotion} />\n return (\n <li key={i}>\n {gap\n ? React.createElement(getHref ? 'a' : 'button', {\n className: cn(pageClass, 'pointer-events-none'),\n 'aria-hidden': true,\n tabIndex: -1,\n ...(getHref ? {} : { type: 'button', disabled: true }),\n children: text,\n })\n : target(p, pageClass, text, {\n 'aria-current': p === page ? 'page' : undefined,\n 'aria-label': `Page ${p}`,\n } as React.HTMLAttributes<HTMLElement>)}\n </li>\n )\n })}\n <li>{step(1)}</li>\n </ul>\n )}\n </nav>\n )\n}\n"]}
|
package/chunk-QUF2IPOZ.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/textarea.tsx"],"names":[],"mappings":"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","file":"chunk-QUF2IPOZ.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../lib/utils'\nimport { useFormField } from './form-field'\n\n/**\n * Textarea, 1:1 with the uiKit `Textarea` set (3647:17812): the Input skin (surface fill,\n * border/default, radius-lg, shadow xs; border/strong on hover, border/focus and the focus\n * ring on focus, action/destructive/bg on error) at 96px tall with a resize grip. Above it a\n * label (medium 13/18) with an optional \"(Optional)\" in muted 13; under it a hint row: the\n * hint (muted) and, with `maxLength`, a counter (text/subtle) on the right. An error message\n * replaces the hint and turns the whole row action/destructive/bg. Disabled is bg/muted with\n * text/subtle and the whole field at 60%.\n *\n * `maxLength` drives the counter and is not enforced, so a pasted text can run over and show\n * it (134/120); pair it with `error` to say what to fix. The look is styles/components/\n * input.css (`.satin-field`) plus textarea.css.\n */\nexport interface TextareaProps extends Omit<React.ComponentProps<'textarea'>, 'onChange' | 'maxLength'> {\n label?: React.ReactNode\n /** Adds a muted \"(Optional)\" after the label. */\n optional?: boolean\n hint?: React.ReactNode\n /** An error message (replaces the hint), or `true` to mark the field invalid without one. */\n error?: React.ReactNode | boolean\n /** Shows a `length/maxLength` counter. */\n maxLength?: number\n onChange?: (value: string) => void\n /** Classes for the outer wrapper (label + field + hint row). `className` styles the field. */\n wrapperClassName?: string\n /** Show a state without interacting, for state sheets. */\n 'data-force'?: 'hover' | 'focus'\n}\n\nexport function Textarea({\n label,\n optional,\n hint,\n error,\n maxLength,\n className,\n wrapperClassName,\n id,\n disabled,\n required,\n value,\n defaultValue,\n onChange,\n 'aria-describedby': ariaDescribedBy,\n 'data-force': force,\n ...props\n}: TextareaProps) {\n const field = useFormField()\n const autoId = React.useId()\n const textareaId = id ?? field?.id ?? autoId\n const isDisabled = disabled ?? field?.disabled ?? false\n const hasMessage = typeof error === 'string' || React.isValidElement(error)\n const invalid = Boolean(error) || (field?.invalid ?? false)\n const message = hasMessage ? error : hint\n\n const [uncontrolled, setUncontrolled] = React.useState(defaultValue != null ? String(defaultValue) : '')\n const text = value != null ? String(value) : uncontrolled\n\n const messageId = message ? `${textareaId}-hint` : undefined\n const counterId = maxLength != null ? `${textareaId}-counter` : undefined\n const describedBy =\n [ariaDescribedBy, field?.describedBy, messageId, counterId].filter(Boolean).join(' ') || undefined\n\n return (\n <div\n data-slot=\"textarea-wrapper\"\n data-disabled={isDisabled || undefined}\n className={cn('satin-textarea-root grid w-full gap-2', wrapperClassName)}\n >\n {label && (\n <div className=\"flex items-center gap-1\">\n <label htmlFor={textareaId} className=\"text-sm leading-[18px] font-medium text-text-default\">\n {label}\n </label>\n {optional && <span className=\"text-sm text-text-muted\">(Optional)</span>}\n </div>\n )}\n <div className=\"relative flex\">\n <textarea\n id={textareaId}\n data-slot=\"textarea\"\n data-filled={text.length > 0 || undefined}\n data-invalid={invalid || undefined}\n data-disabled={isDisabled || undefined}\n data-force={force}\n className={cn('satin-field satin-textarea', className)}\n disabled={isDisabled}\n required={required ?? field?.required}\n aria-invalid={invalid || undefined}\n aria-describedby={describedBy}\n value={value}\n defaultValue={defaultValue}\n onChange={(e) => {\n if (value == null) setUncontrolled(e.target.value)\n onChange?.(e.target.value)\n }}\n {...props}\n />\n {/* Figma's resizeHandle, 7px at 1px in text/subtle. */}\n <svg className=\"satin-textarea-grip\" viewBox=\"0 0 7 7\" fill=\"none\" aria-hidden>\n <path d=\"M6.5 0.5L0.5 6.5M6.5 4L4 6.5\" stroke=\"currentColor\" strokeLinecap=\"round\" />\n </svg>\n </div>\n {(message || maxLength != null) && (\n <div\n className={cn(\n 'flex items-start gap-2 text-sm',\n hasMessage ? 'text-action-destructive-bg' : 'text-text-muted',\n )}\n >\n <p id={messageId} className=\"min-w-0 flex-1\">\n {message}\n </p>\n {maxLength != null && (\n <p id={counterId} className={cn('shrink-0 whitespace-nowrap', !hasMessage && 'text-text-muted')}>\n <span className=\"sr-only\">Characters used: </span>\n {text.length}/{maxLength}\n </p>\n )}\n </div>\n )}\n </div>\n )\n}\n"]}
|
package/chunk-RTJ76X5U.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/streaming-text.tsx"],"names":["last"],"mappings":"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","file":"chunk-RTJ76X5U.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../lib/utils'\n\n/**\n * Streaming text: an agent's answer writing itself out as it arrives, in the assistant\n * Message's type (text/default 13/19.5).\n *\n * Give it the text received so far and keep it growing; `streaming` while more is coming. A\n * model sends text in uneven chunks, so the component doesn't print them as they land: it\n * writes at an even pace (`speed`, letters a second), stops briefly after a full stop or a\n * comma, and speeds up when it falls behind, so a backlog never takes more than about a second\n * to catch up. A caret (2px, action/primary/bg) sits at the end while it writes.\n *\n * `reveal` is how each piece comes in: `blur` (default) fades every letter in from a 2px blur\n * over 220 ms, `fade` without the blur, `word` a word at a time, `none` prints letters as they\n * come with no motion. Only the letters arriving animate; the rest carry no filter.\n *\n * The whole text received is in the DOM from the start (letters not yet written are only\n * transparent), so screen readers get it at once; the box is aria-busy while it streams.\n * With reduced motion it shows everything received straight away.\n */\nexport interface StreamingTextProps extends Omit<React.ComponentProps<'div'>, 'children'> {\n /** Everything received so far. Grow it as chunks arrive. */\n text: string\n /** More is coming: keeps the caret and the pace going. */\n streaming?: boolean\n /** Letters written a second at the even pace. */\n speed?: number\n reveal?: 'blur' | 'fade' | 'word' | 'none'\n /** The caret at the end while it writes. */\n caret?: boolean\n /** Called once everything received is written and `streaming` is off. */\n onDone?: () => void\n}\n\n/** Extra pause after these, ms, at the even pace. */\nconst PAUSE: Record<string, number> = { '.': 140, '!': 140, '?': 140, ',': 50, ';': 50, ':': 50, '\\n': 90 }\n/** A backlog is cleared within about this long, s. */\nconst CATCH_UP_S = 0.9\n/** The caret sits after the last letter lit at least this long ago, ms: one already readable,\n * not one still coming in from transparent, so it never runs ahead of the visible text. */\nconst CARET_LAG = 90\n\n/** Letters, or words with the space after them, each one unit to light. */\nfunction split(text: string, byWord: boolean) {\n return byWord ? (text.match(/\\S+\\s*|\\s+/g) ?? []) : Array.from(text)\n}\n\nexport function StreamingText({\n text,\n streaming = false,\n speed = 80,\n reveal = 'blur',\n caret = true,\n onDone,\n className,\n ...props\n}: StreamingTextProps) {\n const units = React.useMemo(() => split(text, reveal === 'word'), [text, reveal])\n const box = React.useRef<HTMLDivElement>(null)\n const shown = React.useRef(0)\n const caretEl = React.useRef<HTMLSpanElement | null>(null)\n const done = React.useRef(onDone)\n done.current = onDone\n const finished = React.useRef(false)\n\n // Start over when the text is replaced rather than extended (a new answer).\n const prevText = React.useRef(text)\n if (!text.startsWith(prevText.current)) {\n shown.current = 0\n finished.current = false\n }\n prevText.current = text\n\n React.useEffect(() => {\n const el = box.current\n if (!el) return\n const spans = [...el.querySelectorAll<HTMLElement>('.satin-stream-unit')]\n // Spans re-rendered from scratch (a reset) lose their lit state: put it back up to `shown`.\n for (let i = 0; i < spans.length; i++) {\n if (i < shown.current) spans[i].setAttribute('data-on', '')\n else spans[i].removeAttribute('data-on')\n }\n\n let mark = caretEl.current\n if (!mark) {\n mark = document.createElement('span')\n mark.className = 'satin-stream-caret'\n mark.setAttribute('aria-hidden', 'true')\n caretEl.current = mark\n }\n const litAt: number[] = []\n const placeCaret = (now = Infinity) => {\n if (!caret || (!streaming && shown.current >= spans.length)) return mark!.remove()\n let i = shown.current - 1\n if (reveal !== 'none') while (i >= 0 && litAt[i] !== undefined && now - litAt[i] < CARET_LAG) i--\n const last = spans[i]\n if (last) {\n if (last.nextSibling !== mark) last.after(mark!)\n } else el.prepend(mark!)\n }\n const finish = () => {\n placeCaret()\n if (!streaming && shown.current >= spans.length && !finished.current) {\n finished.current = true\n done.current?.()\n }\n }\n\n if (typeof window !== 'undefined' && window.matchMedia?.('(prefers-reduced-motion: reduce)').matches) {\n spans.forEach((s) => s.setAttribute('data-on', ''))\n shown.current = spans.length\n finish()\n return\n }\n\n let raf = 0\n let last = performance.now()\n let wait = 0 // ms left of a pause\n let budget = 0 // units owed at the current pace\n const tick = (now: number) => {\n const dt = Math.min(now - last, 100)\n last = now\n const backlog = spans.length - shown.current\n // Letters (or words) a second: the even pace, or faster to clear a backlog in time.\n const unitsPerLetter = reveal === 'word' ? 5 : 1\n const rate = Math.max(speed / unitsPerLetter, backlog / CATCH_UP_S)\n const catchingUp = backlog / CATCH_UP_S > speed / unitsPerLetter\n if (wait > 0 && !catchingUp) wait -= dt\n else {\n budget += (rate * dt) / 1000\n while (budget >= 1 && shown.current < spans.length) {\n const s = spans[shown.current++]\n s.setAttribute('data-on', '')\n litAt[shown.current - 1] = now\n budget -= 1\n const ch = (s.textContent ?? '').trimEnd().slice(-1) || (s.textContent ?? '')\n const pause = PAUSE[ch]\n if (pause && !catchingUp) {\n wait = pause\n budget = 0\n break\n }\n }\n if (shown.current >= spans.length) budget = 0\n }\n placeCaret(now)\n if (shown.current < spans.length) raf = requestAnimationFrame(tick)\n else finish()\n }\n if (shown.current < spans.length) raf = requestAnimationFrame(tick)\n else finish()\n return () => cancelAnimationFrame(raf)\n }, [units, streaming, speed, reveal, caret])\n\n React.useEffect(() => () => caretEl.current?.remove(), [])\n\n return (\n <div\n ref={box}\n data-slot=\"streaming-text\"\n data-reveal={reveal}\n aria-busy={streaming || undefined}\n className={cn('satin-stream text-body whitespace-pre-wrap text-text-default', className)}\n {...props}\n >\n {units.map((u, i) => (\n <span key={i} className=\"satin-stream-unit\">\n {u}\n </span>\n ))}\n </div>\n )\n}\n"]}
|
package/chunk-SH6NG6VN.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/switch.tsx"],"names":["SwitchPrimitive"],"mappings":";;;;;AAmBO,SAAS,MAAA,CAAO,EAAE,SAAA,EAAW,KAAA,EAAO,WAAA,EAAa,YAAY,MAAA,EAAQ,EAAA,EAAI,GAAG,KAAA,EAAM,EAAgB;AACvG,EAAA,MAAM,SAAe,KAAA,CAAA,KAAA,EAAM;AAC3B,EAAA,MAAM,WAAW,EAAA,IAAM,MAAA;AACvB,EAAA,MAAM,aAAA,GAAgB,WAAA,GAAc,CAAA,EAAG,QAAQ,CAAA,YAAA,CAAA,GAAiB,MAAA;AAEhE,EAAA,MAAM,OAAA,mBACJ,GAAA;AAAA,IAACA,QAAA,CAAgB,IAAA;AAAA,IAAhB;AAAA,MACC,EAAA,EAAI,QAAA;AAAA,MACJ,WAAA,EAAU,QAAA;AAAA,MACV,kBAAA,EAAkB,aAAA;AAAA,MAClB,SAAA,EAAW,EAAA,CAAG,mBAAA,EAAqB,SAAS,CAAA;AAAA,MAC3C,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAA,GAAA,CAACA,QAAA,CAAgB,KAAA,EAAhB,EAAsB,WAAU,oBAAA,EAAqB;AAAA;AAAA,GACxD;AAGF,EAAA,IAAI,CAAC,KAAA,IAAS,CAAC,WAAA,EAAa,OAAO,OAAA;AAEnC,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,0BAAA,EAA4B,SAAA,KAAc,WAAW,kCAAkC,CAAA;AAAA,MAEpG,QAAA,EAAA;AAAA,QAAA,OAAA;AAAA,wBACD,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gEAAA,EACZ,QAAA,EAAA;AAAA,UAAA,KAAA,wBACE,OAAA,EAAA,EAAM,OAAA,EAAS,QAAA,EAAU,SAAA,EAAU,iCACjC,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,UAED,+BACC,GAAA,CAAC,GAAA,EAAA,EAAE,IAAI,aAAA,EAAe,SAAA,EAAU,mBAC7B,QAAA,EAAA,WAAA,EACH;AAAA,SAAA,EAEJ;AAAA;AAAA;AAAA,GACF;AAEJ","file":"chunk-SH6NG6VN.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { Switch as SwitchPrimitive } from 'radix-ui'\nimport { cn } from '../lib/utils'\n\n/**\n * Switch, 1:1 with the uiKit `_switchBase` (3647:17617) and `Switch` (3647:17714) sets: a\n * 32 × 18 track (border/input off, calm green on, each with its hover), a 14px white thumb,\n * a 2px focus ring, 50% when disabled. Label medium 13/19.5, description muted, 10px from\n * the track. Use it for settings that apply at once; use a checkbox inside a form.\n * The look of every state lives in styles/components.css.\n */\nexport interface SwitchProps extends React.ComponentProps<typeof SwitchPrimitive.Root> {\n label?: React.ReactNode\n description?: React.ReactNode\n placement?: 'left' | 'right'\n}\n\nexport function Switch({ className, label, description, placement = 'left', id, ...props }: SwitchProps) {\n const autoId = React.useId()\n const switchId = id ?? autoId\n const descriptionId = description ? `${switchId}-description` : undefined\n\n const control = (\n <SwitchPrimitive.Root\n id={switchId}\n data-slot=\"switch\"\n aria-describedby={descriptionId}\n className={cn('peer satin-switch', className)}\n {...props}\n >\n <SwitchPrimitive.Thumb className=\"satin-switch-thumb\" />\n </SwitchPrimitive.Root>\n )\n\n if (!label && !description) return control\n\n return (\n <div\n data-slot=\"switch-field\"\n className={cn('flex items-start gap-2.5', placement === 'right' && 'flex-row-reverse justify-between')}\n >\n {control}\n <div className=\"grid gap-0.5 text-sm leading-[19.5px] peer-disabled:opacity-50\">\n {label && (\n <label htmlFor={switchId} className=\"font-medium text-text-default\">\n {label}\n </label>\n )}\n {description && (\n <p id={descriptionId} className=\"text-text-muted\">\n {description}\n </p>\n )}\n </div>\n </div>\n )\n}\n"]}
|
package/chunk-SHDFUXYV.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/line-chart.tsx"],"names":["Fragment"],"mappings":"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","file":"chunk-SHDFUXYV.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../lib/utils'\nimport { niceMax } from './bar-chart'\nimport { ChartCard, ChartTooltip, defaultFormat, type ChartCardBaseProps } from './chart'\n\n/**\n * Line and Area chart, 1:1 with the uiKit `chart/lineCard` (4076:6759) and `chart/areaCard`\n * (4070:7627), in the shared ChartCard (chart.tsx).\n *\n * One metric over the period: a smooth 2px line in chart/3 (monotone, so it never overshoots a\n * point) over a 180px plot with a 32px axis gutter and 4 dashed border-subtle gridlines at nice\n * ticks, the x labels 6px under it (at most about seven, evenly picked). `AreaCard` fills under\n * the line with chart/3 fading from 28% to nothing at the baseline. No legend: the title says\n * what is plotted and the KPI above gives its total.\n *\n * Hover (or `highlight`) picks the nearest point: a dashed border-strong drop line from it to the\n * baseline, an 8px dot ringed in chart/3 on bg/card, the tooltip above it (date and value) and\n * its x label in text/default. Every point is also reachable with the keyboard (arrow keys on the\n * focused plot). When the data changes the plot fades in on its new scale, unless motion is\n * reduced.\n */\nexport interface LineCardProps extends ChartCardBaseProps {\n /** Unit after the value in the tooltip (\"orders\"). */\n unit?: string\n /** Fill under the line. `AreaCard` sets it. */\n area?: boolean\n /** Swap the plot without the fade when the data changes, as under prefers-reduced-motion. */\n reducedMotion?: boolean\n}\n\nconst TRACK = 180\n\n/** Monotone cubic (Fritsch–Carlson) through the points, as an SVG path. */\nfunction smoothPath(pts: [number, number][]) {\n const n = pts.length\n if (n === 0) return ''\n if (n === 1) return `M ${pts[0][0]} ${pts[0][1]}`\n const dx: number[] = [], dy: number[] = [], m: number[] = []\n for (let i = 0; i < n - 1; i++) {\n dx[i] = pts[i + 1][0] - pts[i][0]\n dy[i] = (pts[i + 1][1] - pts[i][1]) / dx[i]\n }\n m[0] = dy[0]\n m[n - 1] = dy[n - 2]\n for (let i = 1; i < n - 1; i++) m[i] = dy[i - 1] * dy[i] <= 0 ? 0 : (dy[i - 1] + dy[i]) / 2\n for (let i = 0; i < n - 1; i++) {\n if (dy[i] === 0) {\n m[i] = 0\n m[i + 1] = 0\n continue\n }\n const a = m[i] / dy[i], b = m[i + 1] / dy[i], h = a * a + b * b\n if (h > 9) {\n const t = 3 / Math.sqrt(h)\n m[i] = t * a * dy[i]\n m[i + 1] = t * b * dy[i]\n }\n }\n let d = `M ${pts[0][0]} ${pts[0][1]}`\n for (let i = 0; i < n - 1; i++) {\n const h = dx[i] / 3\n d += ` C ${pts[i][0] + h} ${pts[i][1] + m[i] * h} ${pts[i + 1][0] - h} ${pts[i + 1][1] - m[i + 1] * h} ${pts[i + 1][0]} ${pts[i + 1][1]}`\n }\n return d\n}\n\nexport function LineCard({\n data,\n formatValue = defaultFormat,\n highlight,\n unit,\n area = false,\n reducedMotion,\n total,\n ...props\n}: LineCardProps) {\n const gradientId = React.useId()\n const [hovered, setHovered] = React.useState<number | null>(null)\n const [anchor, setAnchor] = React.useState<HTMLElement | null>(null)\n const n = data.length\n const active = (hovered != null && hovered < n ? hovered : null) ?? highlight ?? null\n\n const signature = data.map((d) => `${d.label}:${d.value}`).join('|')\n const [redraw, setRedraw] = React.useState({ signature, n: 0 })\n if (redraw.signature !== signature) setRedraw({ signature, n: redraw.n + 1 })\n const fade = redraw.n > 0 && !reducedMotion\n\n const max = niceMax(Math.max(0, ...data.map((d) => d.value)))\n const ticks = [4, 3, 2, 1, 0].map((i) => (max / 4) * i)\n const sum = data.reduce((s, d) => s + d.value, 0)\n // x in 0–100 (percent of the plot), y in px down from the top of the track.\n const x = (i: number) => (n <= 1 ? 50 : (i / (n - 1)) * 100)\n const y = (v: number) => TRACK - (v / max) * TRACK\n const pts = data.map((d, i) => [x(i), y(d.value)] as [number, number])\n const line = smoothPath(pts)\n const step = Math.max(1, Math.ceil(n / 7))\n const showLabel = (i: number) => (n - 1 - i) % step === 0\n\n const pick = (e: React.PointerEvent<HTMLDivElement>) => {\n const r = e.currentTarget.getBoundingClientRect()\n const f = (e.clientX - r.left) / r.width\n setHovered(Math.max(0, Math.min(n - 1, Math.round(f * (n - 1)))))\n }\n const fmt = (v: number) => `${formatValue(v)}${unit ? ` ${unit}` : ''}`\n\n return (\n <ChartCard total={total ?? defaultFormat(sum)} {...props}>\n <div className=\"relative pt-2 pl-8\">\n {ticks.map((t, i) => (\n <React.Fragment key={i}>\n {i < 4 && (\n <span\n aria-hidden\n className=\"absolute right-0 left-8 h-px border-t border-dashed border-border-subtle\"\n style={{ top: 8 + (TRACK / 4) * i }}\n />\n )}\n <span\n aria-hidden\n key={`${redraw.n}-${i}`}\n className={cn('absolute left-6 w-6 -translate-x-full text-right text-xs leading-[18px] text-text-muted', fade && 'satin-bar-fade')}\n style={{ top: 8 + (TRACK / 4) * i - 9 }}\n >\n {formatValue(t)}\n </span>\n </React.Fragment>\n ))}\n <div\n role=\"group\"\n aria-label={`${props.title}, ${n} points`}\n tabIndex={0}\n className=\"relative rounded-md outline-none focus-visible:[box-shadow:0_0_0_2px_var(--action-focus-ring)]\"\n style={{ height: TRACK }}\n onPointerMove={pick}\n onPointerLeave={() => setHovered(null)}\n onFocus={() => setHovered((h) => h ?? n - 1)}\n onBlur={() => setHovered(null)}\n onKeyDown={(e) => {\n if (e.key !== 'ArrowLeft' && e.key !== 'ArrowRight') return\n e.preventDefault()\n setHovered((h) => Math.max(0, Math.min(n - 1, (h ?? n - 1) + (e.key === 'ArrowRight' ? 1 : -1))))\n }}\n >\n <svg\n key={redraw.n}\n aria-hidden\n viewBox={`0 0 100 ${TRACK}`}\n preserveAspectRatio=\"none\"\n className={cn('absolute inset-0 size-full overflow-visible', fade && 'satin-bar-fade')}\n >\n {area && (\n <>\n <defs>\n <linearGradient id={gradientId} x1=\"0\" x2=\"0\" y1=\"0\" y2=\"1\">\n <stop offset=\"0\" stopColor=\"var(--chart-3)\" stopOpacity=\"0.28\" />\n <stop offset=\"1\" stopColor=\"var(--chart-3)\" stopOpacity=\"0\" />\n </linearGradient>\n </defs>\n <path d={`${line} L 100 ${TRACK} L 0 ${TRACK} Z`} fill={`url(#${gradientId})`} />\n </>\n )}\n {active != null && (\n <line\n x1={x(active)}\n x2={x(active)}\n y1={y(data[active].value) + 4}\n y2={TRACK}\n stroke=\"var(--border-strong)\"\n strokeDasharray=\"4 4\"\n vectorEffect=\"non-scaling-stroke\"\n />\n )}\n <path\n d={line}\n fill=\"none\"\n stroke=\"var(--chart-3)\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n vectorEffect=\"non-scaling-stroke\"\n />\n </svg>\n {active != null && (\n <>\n <span\n ref={setAnchor}\n aria-hidden\n className=\"pointer-events-none absolute size-2 -translate-1/2 rounded-full border-2 border-chart-3 bg-bg-card\"\n style={{ left: `${x(active)}%`, top: y(data[active].value) }}\n />\n <ChartTooltip anchor={anchor} sideOffset={6} label={data[active].tooltipLabel ?? data[active].label} value={fmt(data[active].value)} />\n <span className=\"sr-only\" aria-live=\"polite\">\n {`${data[active].tooltipLabel ?? data[active].label}: ${fmt(data[active].value)}`}\n </span>\n </>\n )}\n </div>\n <div aria-hidden className=\"relative mt-1.5 h-5\">\n {data.map((d, i) =>\n showLabel(i) ? (\n <span\n key={`${redraw.n}-${d.label}-${i}`}\n className={cn(\n 'absolute -translate-x-1/2 text-sm leading-(--text-sm--line-height) whitespace-nowrap',\n i === active ? 'font-medium text-text-default' : 'text-text-muted',\n fade && 'satin-bar-fade',\n )}\n style={{ left: `${x(i)}%` }}\n >\n {d.label}\n </span>\n ) : null,\n )}\n </div>\n </div>\n </ChartCard>\n )\n}\n\n/** The Line chart with the gradient under its line. */\nexport function AreaCard(props: Omit<LineCardProps, 'area'>) {\n return <LineCard {...props} area />\n}\n"]}
|
package/chunk-TKO44NDI.js
DELETED
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import { CloseIcon } from './chunk-JPNWHWAQ.js';
|
|
2
|
-
import { Button } from './chunk-HNQUX43Z.js';
|
|
3
|
-
import { cn } from './chunk-H63FYCMY.js';
|
|
4
|
-
import 'react';
|
|
5
|
-
import { Dialog } from 'radix-ui';
|
|
6
|
-
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
7
|
-
|
|
8
|
-
function Sheet({
|
|
9
|
-
open,
|
|
10
|
-
defaultOpen,
|
|
11
|
-
onOpenChange,
|
|
12
|
-
trigger,
|
|
13
|
-
side = "right",
|
|
14
|
-
title,
|
|
15
|
-
description,
|
|
16
|
-
footer,
|
|
17
|
-
children,
|
|
18
|
-
modal = true,
|
|
19
|
-
container,
|
|
20
|
-
onOpenAutoFocus,
|
|
21
|
-
className
|
|
22
|
-
}) {
|
|
23
|
-
const position = container ? "absolute" : "fixed";
|
|
24
|
-
return /* @__PURE__ */ jsxs(Dialog.Root, { open, defaultOpen, onOpenChange, modal, children: [
|
|
25
|
-
trigger && /* @__PURE__ */ jsx(Dialog.Trigger, { asChild: true, children: trigger }),
|
|
26
|
-
/* @__PURE__ */ jsxs(Dialog.Portal, { container, children: [
|
|
27
|
-
/* @__PURE__ */ jsx(
|
|
28
|
-
Dialog.Overlay,
|
|
29
|
-
{
|
|
30
|
-
className: cn(
|
|
31
|
-
position,
|
|
32
|
-
"inset-0 z-50 bg-black-a40",
|
|
33
|
-
"data-[state=open]:animate-[satin-fade-in_var(--duration-slow)_var(--ease-out)]",
|
|
34
|
-
"data-[state=closed]:animate-[satin-fade-out_var(--duration-base)_var(--ease-out)]"
|
|
35
|
-
)
|
|
36
|
-
}
|
|
37
|
-
),
|
|
38
|
-
/* @__PURE__ */ jsxs(
|
|
39
|
-
Dialog.Content,
|
|
40
|
-
{
|
|
41
|
-
"data-slot": "sheet",
|
|
42
|
-
"data-side": side,
|
|
43
|
-
onOpenAutoFocus,
|
|
44
|
-
...description ? {} : { "aria-describedby": void 0 },
|
|
45
|
-
className: cn(
|
|
46
|
-
position,
|
|
47
|
-
"z-50 flex flex-col gap-4 bg-bg-card p-4 outline-none",
|
|
48
|
-
"[box-shadow:0_4px_6px_-4px_var(--effect-shadow-sm),0_10px_15px_-3px_var(--effect-shadow-sm)]",
|
|
49
|
-
// Flush with its edge: no radius and no border on the side that touches it.
|
|
50
|
-
side === "bottom" && "inset-x-0 bottom-0 max-h-[85%] rounded-t-2xl border-t border-border-subtle pt-6",
|
|
51
|
-
side === "right" && "inset-y-0 right-0 w-[400px] max-w-[calc(100%-32px)] rounded-l-2xl border-l border-border-subtle",
|
|
52
|
-
side === "left" && "inset-y-0 left-0 w-[400px] max-w-[calc(100%-32px)] rounded-r-2xl border-r border-border-subtle",
|
|
53
|
-
side === "bottom" && "data-[state=open]:animate-[satin-sheet-up_var(--duration-slow)_var(--ease-out)] data-[state=closed]:animate-[satin-sheet-down_var(--duration-base)_var(--ease-out)]",
|
|
54
|
-
side === "right" && "data-[state=open]:animate-[satin-sheet-left_var(--duration-slow)_var(--ease-out)] data-[state=closed]:animate-[satin-sheet-right_var(--duration-base)_var(--ease-out)]",
|
|
55
|
-
side === "left" && "data-[state=open]:animate-[satin-sheet-from-left_var(--duration-slow)_var(--ease-out)] data-[state=closed]:animate-[satin-sheet-to-left_var(--duration-base)_var(--ease-out)]",
|
|
56
|
-
className
|
|
57
|
-
),
|
|
58
|
-
children: [
|
|
59
|
-
side === "bottom" && /* @__PURE__ */ jsx(
|
|
60
|
-
Dialog.Close,
|
|
61
|
-
{
|
|
62
|
-
"aria-label": "Close",
|
|
63
|
-
className: "absolute inset-x-4 top-0 flex h-6 cursor-pointer items-center justify-center rounded-lg outline-none focus-visible:ring-2 focus-visible:ring-action-focus-ring",
|
|
64
|
-
children: /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "h-1 w-9 rounded-full bg-border-strong" })
|
|
65
|
-
}
|
|
66
|
-
),
|
|
67
|
-
/* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-0.5", side !== "bottom" && "pr-8"), children: [
|
|
68
|
-
/* @__PURE__ */ jsx(Dialog.Title, { className: "text-base leading-[21px] font-medium text-text-default", children: title }),
|
|
69
|
-
description ? /* @__PURE__ */ jsx(Dialog.Description, { className: "text-sm text-text-muted", children: description }) : null
|
|
70
|
-
] }),
|
|
71
|
-
children != null && /* @__PURE__ */ jsx("div", { className: "flex min-h-0 flex-1 flex-col overflow-y-auto", children }),
|
|
72
|
-
footer && /* @__PURE__ */ jsx("div", { className: cn("flex shrink-0 items-center justify-end gap-2", side === "bottom" && "*:flex-1"), children: footer }),
|
|
73
|
-
side !== "bottom" && /* @__PURE__ */ jsx(Dialog.Close, { asChild: true, children: /* @__PURE__ */ jsx(Button, { variant: "tertiary", size: "xl", iconOnly: true, "aria-label": "Close", className: "absolute top-[7px] right-[7px] rounded-lg", children: /* @__PURE__ */ jsx(CloseIcon, {}) }) })
|
|
74
|
-
]
|
|
75
|
-
}
|
|
76
|
-
)
|
|
77
|
-
] })
|
|
78
|
-
] });
|
|
79
|
-
}
|
|
80
|
-
var SheetClose = Dialog.Close;
|
|
81
|
-
|
|
82
|
-
export { Sheet, SheetClose };
|
|
83
|
-
//# sourceMappingURL=chunk-TKO44NDI.js.map
|
|
84
|
-
//# sourceMappingURL=chunk-TKO44NDI.js.map
|
package/chunk-TKO44NDI.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/sheet.tsx"],"names":["DialogPrimitive"],"mappings":"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","file":"chunk-TKO44NDI.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { Dialog as DialogPrimitive } from 'radix-ui'\nimport { cn } from '../lib/utils'\nimport { Button } from './button'\nimport { CloseIcon } from './dialog'\n\n/**\n * Sheet, 1:1 with the uiKit `Sheet` set (4025:3504): a panel that slides in from an edge and sits\n * flush with it, square and borderless on that side. bottom for phones (full width, radius-2xl\n * on the top corners, a 24px handle band with a 36 × 4 border/strong grip); right or left for\n * wider screens (400px, full height, radius-2xl on the inner corners, the Dialog's 36px close\n * button 7px from the top-right corner). Both are bg/card with a\n * border/subtle edge on the open side and the shadcn `lg` shadow, 16px in and 16px between a\n * header (14px medium title over a 13px muted description, 2px apart), the content and a\n * right-aligned footer of buttons 8px apart (on the bottom sheet they share the width).\n *\n * Built on the Radix Dialog: focus moves in on open and back to the trigger on close; Escape,\n * the backdrop or the handle closes it. It slides in over 250 ms on ease-out and out over 200.\n */\nexport interface SheetProps {\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n /** Optional element that opens the sheet (rendered with `asChild`, so pass a Button). */\n trigger?: React.ReactNode\n side?: 'bottom' | 'right' | 'left'\n title: React.ReactNode\n description?: React.ReactNode\n /** The buttons at the bottom. Wrap one in `SheetClose` to make it close the sheet. */\n footer?: React.ReactNode\n children?: React.ReactNode\n /** Modal blocks the page and shows the overlay; turn it off for inline previews. */\n modal?: boolean\n /** Portal target. Defaults to `document.body`. */\n container?: HTMLElement | null\n onOpenAutoFocus?: (event: Event) => void\n className?: string\n}\n\nexport function Sheet({\n open,\n defaultOpen,\n onOpenChange,\n trigger,\n side = 'right',\n title,\n description,\n footer,\n children,\n modal = true,\n container,\n onOpenAutoFocus,\n className,\n}: SheetProps) {\n const position = container ? 'absolute' : 'fixed'\n return (\n <DialogPrimitive.Root open={open} defaultOpen={defaultOpen} onOpenChange={onOpenChange} modal={modal}>\n {trigger && <DialogPrimitive.Trigger asChild>{trigger}</DialogPrimitive.Trigger>}\n <DialogPrimitive.Portal container={container}>\n <DialogPrimitive.Overlay\n className={cn(\n position,\n 'inset-0 z-50 bg-black-a40',\n 'data-[state=open]:animate-[satin-fade-in_var(--duration-slow)_var(--ease-out)]',\n 'data-[state=closed]:animate-[satin-fade-out_var(--duration-base)_var(--ease-out)]',\n )}\n />\n <DialogPrimitive.Content\n data-slot=\"sheet\"\n data-side={side}\n onOpenAutoFocus={onOpenAutoFocus}\n {...(description ? {} : { 'aria-describedby': undefined })}\n className={cn(\n position,\n 'z-50 flex flex-col gap-4 bg-bg-card p-4 outline-none',\n '[box-shadow:0_4px_6px_-4px_var(--effect-shadow-sm),0_10px_15px_-3px_var(--effect-shadow-sm)]',\n // Flush with its edge: no radius and no border on the side that touches it.\n side === 'bottom' && 'inset-x-0 bottom-0 max-h-[85%] rounded-t-2xl border-t border-border-subtle pt-6',\n side === 'right' && 'inset-y-0 right-0 w-[400px] max-w-[calc(100%-32px)] rounded-l-2xl border-l border-border-subtle',\n side === 'left' && 'inset-y-0 left-0 w-[400px] max-w-[calc(100%-32px)] rounded-r-2xl border-r border-border-subtle',\n side === 'bottom' &&\n 'data-[state=open]:animate-[satin-sheet-up_var(--duration-slow)_var(--ease-out)] data-[state=closed]:animate-[satin-sheet-down_var(--duration-base)_var(--ease-out)]',\n side === 'right' &&\n 'data-[state=open]:animate-[satin-sheet-left_var(--duration-slow)_var(--ease-out)] data-[state=closed]:animate-[satin-sheet-right_var(--duration-base)_var(--ease-out)]',\n side === 'left' &&\n 'data-[state=open]:animate-[satin-sheet-from-left_var(--duration-slow)_var(--ease-out)] data-[state=closed]:animate-[satin-sheet-to-left_var(--duration-base)_var(--ease-out)]',\n className,\n )}\n >\n {side === 'bottom' && (\n <DialogPrimitive.Close\n aria-label=\"Close\"\n className=\"absolute inset-x-4 top-0 flex h-6 cursor-pointer items-center justify-center rounded-lg outline-none focus-visible:ring-2 focus-visible:ring-action-focus-ring\"\n >\n <span aria-hidden className=\"h-1 w-9 rounded-full bg-border-strong\" />\n </DialogPrimitive.Close>\n )}\n\n <div className={cn('flex flex-col gap-0.5', side !== 'bottom' && 'pr-8')}>\n <DialogPrimitive.Title className=\"text-base leading-[21px] font-medium text-text-default\">{title}</DialogPrimitive.Title>\n {description ? (\n <DialogPrimitive.Description className=\"text-sm text-text-muted\">{description}</DialogPrimitive.Description>\n ) : null}\n </div>\n\n {children != null && <div className=\"flex min-h-0 flex-1 flex-col overflow-y-auto\">{children}</div>}\n\n {footer && (\n <div className={cn('flex shrink-0 items-center justify-end gap-2', side === 'bottom' && '*:flex-1')}>{footer}</div>\n )}\n\n {side !== 'bottom' && (\n <DialogPrimitive.Close asChild>\n <Button variant=\"tertiary\" size=\"xl\" iconOnly aria-label=\"Close\" className=\"absolute top-[7px] right-[7px] rounded-lg\">\n <CloseIcon />\n </Button>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n )\n}\n\n/** Wrap a footer button in this to make it close the sheet: `<SheetClose asChild><Button…/></SheetClose>`. */\nexport const SheetClose = DialogPrimitive.Close\n"]}
|
package/chunk-TX3H3QMA.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/decision-card.tsx"],"names":["Fragment"],"mappings":"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","file":"chunk-TX3H3QMA.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { RadioGroup } from 'radix-ui'\nimport { Check, EditPencil, NavArrowLeft, NavArrowRight } from 'iconoir-react'\nimport { cn } from '../lib/utils'\nimport { Button } from './button'\nimport { Checkbox } from './checkbox'\nimport { SLIDE_MS } from './sliding-indicator'\n\n/**\n * DecisionCard, 1:1 with the uiKit `DecisionCard` set (3096:1626) and its `decisionItem` rows\n * (3092:61608): one question an agent asks, its answers, and Skip / Continue.\n *\n * The card is 364 wide, bg/popover, border/default, radius-2xl, shadow-xs. The header is the\n * medium 14/20 title with an optional step navigator (24px icon buttons around \"1/3\"); the\n * footer is a tertiary Skip in text/muted and a primary Continue, 16px above and 12px below.\n *\n * - `radio` / `checkbox`: rows of 20px with 4px padding, hover bg action/secondary, 2px apart.\n * - `chips`: wrapping 28px pills 6px apart; selected ones turn status/brand (fill, border, text).\n * - `ranking`: 10px-radius rows with a grip, a rank dot (primary for #1) and the label. Drag to\n * reorder, or Alt + Arrow keys; the dragged row lifts with border/strong and the md shadow.\n * - `draft`: the agent's text in a bubble (radius-2xl, 4px top-left); Rewrite makes it editable.\n * - `summary`: what the card collapses to once answered, with a Change action.\n *\n * Stepping between questions moves like Pagination: the new title and answers slide in 24px from\n * the side of the step (from the right going forward), the old ones slide the other way and fade\n * out a little faster, and the card eases to its new height, all 300 ms on the kit ease-out. The\n * step navigator and the footer stay put. Stepping again mid-slide carries on from where things\n * are. Under reduced motion the parts only cross-fade (150 ms) and the height snaps.\n */\n\nexport type DecisionOption = {\n value: string\n label: string\n /** 14px icon, used by `chips`. */\n icon?: React.ReactNode\n}\n\nexport type DecisionValue = string | string[]\n\nexport interface DecisionCardProps\n extends Omit<React.ComponentProps<'div'>, 'title' | 'defaultValue' | 'onChange'> {\n type?: 'radio' | 'checkbox' | 'chips' | 'ranking' | 'draft' | 'summary'\n title: string\n /** \"1/3\". Shows the step navigator. */\n step?: string\n onPreviousStep?: () => void\n onNextStep?: () => void\n /** A muted line under the title, e.g. \"Select up to 5\". */\n hint?: string\n options?: DecisionOption[]\n /**\n * radio: the chosen value. checkbox / chips: the chosen values. ranking: every value in order.\n * draft: the text. summary: the values to list.\n */\n value?: DecisionValue\n defaultValue?: DecisionValue\n onValueChange?: (value: DecisionValue) => void\n /** chips: how many can be picked. */\n max?: number\n /** draft: the bold first line of the draft, e.g. the subject. */\n draftTitle?: string\n onContinue?: (value: DecisionValue) => void\n onSkip?: () => void\n /** summary: reopens the question. */\n onEdit?: () => void\n /** draft: called when Rewrite is pressed, after the field becomes editable. */\n onRewrite?: () => void\n continueLabel?: string\n skipLabel?: string\n}\n\nexport function DecisionCard({\n className,\n type = 'radio',\n title,\n step,\n onPreviousStep,\n onNextStep,\n hint,\n options = [],\n value: valueProp,\n defaultValue,\n onValueChange,\n max,\n draftTitle,\n onContinue,\n onSkip,\n onEdit,\n onRewrite,\n continueLabel,\n skipLabel = 'Skip',\n ...props\n}: DecisionCardProps) {\n const [inner, setInner] = React.useState<DecisionValue>(\n () => defaultValue ?? initialValue(type, options),\n )\n // A new question (another step or title) starts from its own default, not the last one's picks.\n const question = step ?? title\n const [innerFor, setInnerFor] = React.useState(question)\n if (innerFor !== question) {\n setInnerFor(question)\n setInner(defaultValue ?? initialValue(type, options))\n }\n const value = valueProp ?? inner\n const set = (next: DecisionValue) => {\n setInner(next)\n onValueChange?.(next)\n }\n const titleId = React.useId()\n const cardRef = React.useRef<HTMLDivElement>(null)\n const titleRef = React.useRef<HTMLDivElement>(null)\n const bodyRef = React.useRef<HTMLDivElement>(null)\n useStepSlide(question, step, cardRef, [titleRef, bodyRef])\n\n const card = cn(\n 'flex w-[364px] max-w-full flex-col overflow-clip rounded-2xl border border-border-default bg-bg-popover',\n '[box-shadow:0_1px_2px_0_var(--effect-shadow-xs)]',\n className,\n )\n\n if (type === 'summary') {\n const values = asArray(value)\n const labels = values.map((v) => options.find((o) => o.value === v)?.label ?? v)\n return (\n <div data-slot=\"decision-card\" data-type=\"summary\" className={card} {...props}>\n <div className=\"flex items-center gap-2.5 py-2.5 pr-2.5 pl-3\">\n <span className=\"flex size-6 shrink-0 items-center justify-center rounded-full bg-action-primary-bg text-action-primary-fg\">\n <Check aria-hidden className=\"size-icon-size-sm [stroke-width:1.875]\" />\n </span>\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <span className=\"truncate text-xs text-text-muted\">{title}</span>\n <span className=\"truncate text-sm font-medium text-text-default\">{labels.join(' · ')}</span>\n </div>\n {onEdit && (\n <Button variant=\"tertiary\" onClick={onEdit} className=\"text-text-muted\" aria-label={`Change ${title}`}>\n Change\n </Button>\n )}\n </div>\n </div>\n )\n }\n\n const empty =\n type === 'radio' ? !value : type === 'checkbox' || type === 'chips' ? asArray(value).length === 0 : false\n\n return (\n <div\n ref={cardRef}\n role=\"group\"\n aria-labelledby={titleId}\n data-slot=\"decision-card\"\n data-type={type}\n className={card}\n {...props}\n >\n <Header\n titleRef={titleRef}\n titleId={titleId}\n title={title}\n step={step}\n hint={hint}\n onPreviousStep={onPreviousStep}\n onNextStep={onNextStep}\n />\n <div className=\"relative\">\n <div ref={bodyRef}>\n\n {type === 'radio' && (\n <RadioGroup.Root\n aria-labelledby={titleId}\n value={typeof value === 'string' ? value : ''}\n onValueChange={set}\n className=\"flex flex-col gap-0.5 px-2\"\n >\n {options.map((option) => (\n <DecisionItem key={option.value}>\n <RadioRow option={option} />\n </DecisionItem>\n ))}\n </RadioGroup.Root>\n )}\n\n {type === 'checkbox' && (\n <div className=\"flex flex-col gap-0.5 px-2\">\n {options.map((option) => {\n const checked = asArray(value).includes(option.value)\n return (\n <DecisionItem key={option.value}>\n <CheckboxRow\n option={option}\n checked={checked}\n onCheckedChange={(on) => set(toggle(asArray(value), option.value, on))}\n />\n </DecisionItem>\n )\n })}\n </div>\n )}\n\n {type === 'chips' && (\n <div className=\"flex flex-wrap gap-1.5 px-3 pb-1\">\n {options.map((option) => {\n const chosen = asArray(value)\n const selected = chosen.includes(option.value)\n const full = max !== undefined && chosen.length >= max && !selected\n return (\n <DecisionChip\n key={option.value}\n option={option}\n selected={selected}\n disabled={full}\n onPressedChange={(on) => set(toggle(chosen, option.value, on))}\n />\n )\n })}\n </div>\n )}\n\n {type === 'ranking' && (\n <Ranking key={question} options={options} value={asArray(value)} onValueChange={set} labelledBy={titleId} />\n )}\n\n {type === 'draft' && (\n <Draft\n key={question}\n title={draftTitle}\n value={typeof value === 'string' ? value : ''}\n onValueChange={set}\n onRewrite={onRewrite}\n onSkip={onSkip}\n onContinue={() => onContinue?.(value)}\n continueLabel={continueLabel ?? 'Use reply'}\n skipLabel={skipLabel}\n />\n )}\n\n </div>\n </div>\n\n {type !== 'draft' && (\n <div className=\"flex items-center justify-end gap-2 px-3 pt-4 pb-3\">\n {onSkip && (\n <Button variant=\"tertiary\" onClick={onSkip} className=\"text-text-muted\">\n {skipLabel}\n </Button>\n )}\n <Button onClick={() => onContinue?.(value)} disabled={empty}>\n {continueLabel ?? 'Continue'}\n </Button>\n </div>\n )}\n </div>\n )\n}\n\nfunction Header({\n titleRef,\n titleId,\n title,\n step,\n hint,\n onPreviousStep,\n onNextStep,\n}: {\n titleRef: React.Ref<HTMLDivElement>\n titleId: string\n title: string\n step?: string\n hint?: string\n onPreviousStep?: () => void\n onNextStep?: () => void\n}) {\n return (\n <div className=\"flex items-start gap-0.5 py-3 pr-px pl-3\">\n {/* The title and hint move with the question; the step navigator stays. */}\n <div className=\"relative min-w-0 flex-1\">\n <div ref={titleRef} className=\"flex flex-col gap-0.5\">\n <p id={titleId} className=\"text-base leading-5 font-medium tracking-normal text-text-default\">\n {title}\n </p>\n {hint && <p className=\"text-base text-text-muted\">{hint}</p>}\n </div>\n </div>\n {step && (\n <div className=\"flex h-[21px] shrink-0 items-center gap-1 pr-2\">\n <Button\n variant=\"tertiary\"\n size=\"xs\"\n shape=\"rounded\"\n iconOnly\n aria-label=\"Previous question\"\n disabled={!onPreviousStep}\n onClick={onPreviousStep}\n >\n <NavArrowLeft aria-hidden />\n </Button>\n <span aria-live=\"polite\" className=\"text-sm whitespace-nowrap text-text-muted tabular-nums\">{step}</span>\n <Button\n variant=\"tertiary\"\n size=\"xs\"\n shape=\"rounded\"\n iconOnly\n aria-label=\"Next question\"\n disabled={!onNextStep}\n onClick={onNextStep}\n >\n <NavArrowRight aria-hidden />\n </Button>\n </div>\n )}\n </div>\n )\n}\n\nconst SLIDE_PX = 24\nconst EASE = 'cubic-bezier(0.23, 1, 0.32, 1)'\n\n/**\n * Slides the parts in `refs` when `key` changes, the way Pagination moves its pages: each part\n * comes in SLIDE_PX from the side of the step while a copy of how it looked slides out the other\n * way and fades, and the card eases between its old and new height. The direction comes from the\n * \"2/3\" step; without one it moves forward.\n */\nfunction useStepSlide(\n key: string,\n step: string | undefined,\n cardRef: React.RefObject<HTMLDivElement | null>,\n refs: React.RefObject<HTMLDivElement | null>[],\n) {\n const last = React.useRef<{ key: string; index: number; height: number; copies: (Node | null)[] } | null>(null)\n const index = step ? parseInt(step, 10) || 0 : 0\n\n React.useLayoutEffect(() => {\n const card = cardRef.current\n const prev = last.current\n // The card's own height, not a frame of a running resize.\n let height = card && card.getAnimations().length > 0 && prev ? prev.height : (card?.getBoundingClientRect().height ?? 0)\n const reduce = typeof window !== 'undefined' && window.matchMedia?.('(prefers-reduced-motion: reduce)').matches\n\n if (card && prev && prev.key !== key) {\n const sign = index < prev.index ? -1 : 1\n // Under reduced motion the parts only cross-fade, quicker, and the card snaps to its height.\n const dx = reduce ? 0 : SLIDE_PX\n const timing: KeyframeAnimationOptions = { duration: reduce ? 150 : SLIDE_MS, easing: EASE }\n refs.forEach((ref, i) => {\n const el = ref.current\n const copy = prev.copies[i] as HTMLElement | null\n if (!el) return\n // Stepping again mid-slide: the copy leaves from where the part was, not from rest.\n const midway = el.getAnimations().length > 0\n const from = midway ? getComputedStyle(el) : null\n const start: Keyframe = { transform: from?.transform && from.transform !== 'none' ? from.transform : 'none', opacity: from ? Number(from.opacity) : 1 }\n el.getAnimations().forEach((a) => a.cancel())\n el.parentElement?.querySelectorAll(':scope > [data-step-copy]').forEach((n) => n.remove())\n el.animate([{ transform: `translateX(${sign * dx}px)`, opacity: 0 }, { transform: 'none', opacity: 1 }], timing)\n const host = el.parentElement\n if (!copy || !host) return\n copy.setAttribute('data-step-copy', '')\n copy.setAttribute('aria-hidden', 'true')\n copy.setAttribute('inert', '')\n copy.querySelectorAll('[id]').forEach((n) => n.removeAttribute('id'))\n copy.style.cssText += ';position:absolute;top:0;left:0;right:0;pointer-events:none'\n host.appendChild(copy)\n copy\n .animate([start, { transform: `translateX(${-sign * dx}px)`, opacity: 0 }], {\n ...timing,\n duration: (timing.duration as number) * 0.6,\n })\n .finished.then(\n () => copy.remove(),\n () => copy.remove(),\n )\n })\n // Mid-resize, the card goes on from the height it shows now.\n const running = card.getAnimations().length > 0\n const fromHeight = running ? card.getBoundingClientRect().height : prev.height\n card.getAnimations().forEach((a) => a.cancel())\n const toHeight = card.getBoundingClientRect().height\n height = toHeight\n if (!reduce && Math.abs(fromHeight - toHeight) > 0.5) {\n card.animate([{ height: `${fromHeight}px` }, { height: `${toHeight}px` }], timing)\n }\n }\n\n last.current = { key, index, height, copies: refs.map((r) => r.current?.cloneNode(true) ?? null) }\n })\n}\n\n/** `decisionItem` (3092:61608): 4px padding, radius-md, action/secondary fill on hover. */\nfunction DecisionItem({ children, 'data-force': force }: { children: React.ReactNode; 'data-force'?: 'hover' }) {\n return (\n <div\n data-force={force}\n className=\"rounded-md p-1 transition-[background-color] duration-(--duration-fast) ease-(--ease-out) satin-hover:bg-action-secondary-bg\"\n >\n {children}\n </div>\n )\n}\n\nfunction RadioRow({ option }: { option: DecisionOption }) {\n const id = React.useId()\n return (\n <div className=\"flex h-5 items-center gap-2\">\n <RadioGroup.Item\n id={id}\n value={option.value}\n className={cn(\n 'flex size-4 shrink-0 items-center justify-center rounded-full border border-border-strong bg-bg-field outline-none',\n '[box-shadow:0_1px_2px_0_var(--effect-shadow-xs)]',\n 'transition-[background-color,border-color,box-shadow] duration-(--duration-fast) ease-(--ease-out)',\n 'data-[state=checked]:border-action-primary-bg data-[state=checked]:bg-action-primary-bg data-[state=checked]:[box-shadow:none]',\n 'focus-visible:[box-shadow:0_0_0_2px_var(--action-focus-ring)] data-[state=checked]:focus-visible:[box-shadow:0_0_0_2px_var(--action-focus-ring)]',\n )}\n >\n <RadioGroup.Indicator className=\"size-1.5 rounded-full bg-text-on-solid\" />\n </RadioGroup.Item>\n <label htmlFor={id} className=\"min-w-0 flex-1 text-base text-text-default\">\n {option.label}\n </label>\n </div>\n )\n}\n\nfunction CheckboxRow({\n option,\n checked,\n onCheckedChange,\n}: {\n option: DecisionOption\n checked: boolean\n onCheckedChange: (checked: boolean) => void\n}) {\n const id = React.useId()\n return (\n <div className=\"flex h-5 items-center gap-2\">\n <Checkbox id={id} checked={checked} onCheckedChange={(c) => onCheckedChange(c === true)} />\n <label htmlFor={id} className=\"min-w-0 flex-1 text-base text-text-default\">\n {option.label}\n </label>\n </div>\n )\n}\n\nfunction DecisionChip({\n option,\n selected,\n disabled,\n onPressedChange,\n}: {\n option: DecisionOption\n selected: boolean\n disabled?: boolean\n onPressedChange: (pressed: boolean) => void\n}) {\n return (\n <button\n type=\"button\"\n aria-pressed={selected}\n disabled={disabled}\n onClick={() => onPressedChange(!selected)}\n className={cn(\n 'inline-flex h-control-height shrink-0 items-center gap-1.5 rounded-pill border pr-2.5 pl-2 text-base font-medium outline-none select-none',\n 'transition-[background-color,border-color,color,box-shadow,transform] duration-(--duration-fast) ease-(--ease-out) active:scale-[0.97]',\n '[&_svg]:size-icon-size-sm [&_svg]:shrink-0 [&_svg]:[stroke-width:1.875]',\n 'focus-visible:[box-shadow:0_0_0_2px_var(--action-focus-ring)]',\n 'disabled:pointer-events-none disabled:opacity-50',\n selected\n ? 'border-status-brand-fg bg-status-brand-bg text-status-brand-fg'\n : 'border-border-default bg-bg-popover text-text-default hover:border-border-strong [&_svg]:text-text-muted',\n )}\n >\n {option.icon}\n {option.label}\n </button>\n )\n}\n\nfunction Ranking({\n options,\n value,\n onValueChange,\n labelledBy,\n}: {\n options: DecisionOption[]\n value: string[]\n onValueChange: (value: string[]) => void\n labelledBy: string\n}) {\n const order = value.length ? value : options.map((o) => o.value)\n const [dragging, setDragging] = React.useState<string | null>(null)\n const [announcement, setAnnouncement] = React.useState('')\n const listRef = React.useRef<HTMLOListElement>(null)\n const label = (v: string) => options.find((o) => o.value === v)?.label ?? v\n\n const move = (from: number, to: number) => {\n if (to < 0 || to >= order.length || from === to) return\n const next = [...order]\n const [item] = next.splice(from, 1)\n next.splice(to, 0, item)\n onValueChange(next)\n return next\n }\n\n const onPointerDown = (e: React.PointerEvent<HTMLLIElement>, item: string) => {\n if (e.button !== 0) return\n e.currentTarget.setPointerCapture(e.pointerId)\n setDragging(item)\n }\n const onPointerMove = (e: React.PointerEvent<HTMLLIElement>) => {\n if (!dragging || !listRef.current) return\n const rows = Array.from(listRef.current.children) as HTMLElement[]\n const from = order.indexOf(dragging)\n let to = from\n rows.forEach((row, i) => {\n const box = row.getBoundingClientRect()\n const mid = box.top + box.height / 2\n if (i < from && e.clientY < mid) to = Math.min(to, i)\n if (i > from && e.clientY > mid) to = Math.max(to, i)\n })\n if (to !== from) move(from, to)\n }\n const onPointerUp = () => {\n if (dragging) setAnnouncement(`${label(dragging)}, position ${order.indexOf(dragging) + 1} of ${order.length}`)\n setDragging(null)\n }\n\n const onKeyDown = (e: React.KeyboardEvent<HTMLLIElement>, index: number) => {\n if (e.key !== 'ArrowUp' && e.key !== 'ArrowDown') return\n e.preventDefault()\n const to = index + (e.key === 'ArrowUp' ? -1 : 1)\n if (e.altKey) {\n const next = move(index, to)\n if (next) {\n setAnnouncement(`${label(next[to])}, position ${to + 1} of ${next.length}`)\n requestAnimationFrame(() => (listRef.current?.children[to] as HTMLElement | undefined)?.focus())\n }\n } else {\n ;(listRef.current?.children[to] as HTMLElement | undefined)?.focus()\n }\n }\n\n return (\n <div className=\"px-3 pb-1\">\n <ol ref={listRef} aria-labelledby={labelledBy} className=\"flex flex-col gap-1.5\">\n {order.map((item, i) => {\n const lifted = dragging === item\n return (\n <li\n key={item}\n tabIndex={0}\n aria-roledescription=\"sortable item\"\n aria-description=\"Alt and arrow keys to move\"\n data-dragging={lifted || undefined}\n onPointerDown={(e) => onPointerDown(e, item)}\n onPointerMove={onPointerMove}\n onPointerUp={onPointerUp}\n onPointerCancel={onPointerUp}\n onKeyDown={(e) => onKeyDown(e, i)}\n className={cn(\n 'group/rank flex cursor-grab touch-none items-center gap-2 rounded-lg border border-border-default bg-bg-popover py-2 pr-2.5 pl-2 outline-none select-none',\n 'transition-[border-color,box-shadow] duration-(--duration-fast) ease-(--ease-out)',\n 'hover:border-border-strong focus-visible:[box-shadow:0_0_0_2px_var(--action-focus-ring)]',\n 'data-dragging:cursor-grabbing data-dragging:border-border-strong',\n 'data-dragging:[box-shadow:0_4px_6px_-1px_var(--effect-shadow-sm),0_2px_4px_-2px_var(--effect-shadow-sm)]',\n )}\n >\n <Grip />\n <span\n className={cn(\n 'flex size-5 shrink-0 items-center justify-center rounded-full text-xs tabular-nums',\n i === 0 ? 'bg-action-primary-bg text-action-primary-fg' : 'bg-bg-muted text-text-muted',\n )}\n >\n {i + 1}\n </span>\n <span className=\"min-w-0 flex-1 text-base font-medium text-text-default\">{label(item)}</span>\n </li>\n )\n })}\n </ol>\n <span aria-live=\"polite\" className=\"sr-only\">\n {announcement}\n </span>\n </div>\n )\n}\n\n/** The 8 × 14 six-dot grip from Figma: text/subtle at rest, text/muted while dragging. */\nfunction Grip() {\n return (\n <svg\n width=\"8\"\n height=\"14\"\n viewBox=\"0 0 8 14\"\n aria-hidden\n className=\"shrink-0 fill-current text-text-subtle group-data-dragging/rank:text-text-muted\"\n >\n {[1.25, 6.75, 12.25].map((cy) => (\n <React.Fragment key={cy}>\n <circle cx=\"1.25\" cy={cy} r=\"1.25\" />\n <circle cx=\"6.25\" cy={cy} r=\"1.25\" />\n </React.Fragment>\n ))}\n </svg>\n )\n}\n\nfunction Draft({\n title,\n value,\n onValueChange,\n onRewrite,\n onSkip,\n onContinue,\n continueLabel,\n skipLabel,\n}: {\n title?: string\n value: string\n onValueChange: (value: string) => void\n onRewrite?: () => void\n onSkip?: () => void\n onContinue: () => void\n continueLabel: string\n skipLabel: string\n}) {\n const [editing, setEditing] = React.useState(false)\n const areaRef = React.useRef<HTMLTextAreaElement>(null)\n\n React.useLayoutEffect(() => {\n const el = areaRef.current\n if (!el) return\n el.style.height = '0px'\n el.style.height = `${el.scrollHeight}px`\n }, [value, editing])\n\n return (\n <>\n <div className=\"px-3 pb-1\">\n <div\n className={cn(\n 'flex flex-col gap-2 rounded-2xl rounded-tl-[4px] border border-border-default bg-bg-popover px-3 py-2.5 text-base text-text-default',\n '[box-shadow:0_1px_2px_0_var(--effect-shadow-xs)]',\n 'transition-[box-shadow,border-color] duration-(--duration-fast) ease-(--ease-out)',\n 'has-[textarea:focus-visible]:border-border-strong has-[textarea:focus-visible]:[box-shadow:0_0_0_2px_var(--action-focus-ring)]',\n )}\n >\n {title && <p className=\"leading-[18px] font-medium\">{title}</p>}\n {editing ? (\n <textarea\n ref={areaRef}\n aria-label=\"Draft\"\n value={value}\n onChange={(e) => onValueChange(e.target.value)}\n className=\"w-full resize-none bg-transparent outline-none\"\n />\n ) : (\n <p className=\"whitespace-pre-wrap\">{value}</p>\n )}\n </div>\n </div>\n <div className=\"flex items-center justify-between gap-2 px-3 pt-4 pb-3\">\n <Button\n variant=\"tertiary\"\n className=\"text-text-muted\"\n aria-pressed={editing}\n onClick={() => {\n setEditing(true)\n requestAnimationFrame(() => areaRef.current?.focus())\n onRewrite?.()\n }}\n >\n <EditPencil aria-hidden />\n Rewrite\n </Button>\n <div className=\"flex items-center gap-2\">\n {onSkip && (\n <Button variant=\"tertiary\" onClick={onSkip} className=\"text-text-muted\">\n {skipLabel}\n </Button>\n )}\n <Button onClick={onContinue} disabled={!value.trim()}>\n {continueLabel}\n </Button>\n </div>\n </div>\n </>\n )\n}\n\n/** A static `decisionItem` row in its hover state, for state sheets. */\nexport function DecisionItemPreview({ children, hover }: { children: React.ReactNode; hover?: boolean }) {\n return <DecisionItem data-force={hover ? 'hover' : undefined}>{children}</DecisionItem>\n}\n\nfunction initialValue(type: DecisionCardProps['type'], options: DecisionOption[]): DecisionValue {\n if (type === 'ranking') return options.map((o) => o.value)\n if (type === 'radio' || type === 'draft') return ''\n return []\n}\n\nfunction asArray(value: DecisionValue | undefined): string[] {\n if (Array.isArray(value)) return value\n return value ? [value] : []\n}\n\nfunction toggle(list: string[], item: string, on: boolean) {\n return on ? (list.includes(item) ? list : [...list, item]) : list.filter((v) => v !== item)\n}\n"]}
|