@uisatin/ui 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/README.md +10 -1
- package/chunk-3DHJXU45.js +147 -0
- package/{chunk-6YXUBP27.js → chunk-5725MFGQ.js} +72 -67
- package/{chunk-BKZBWPUH.js → chunk-57QEOCDZ.js} +9 -11
- package/{chunk-RTJ76X5U.js → chunk-5KTBSMQU.js} +2 -4
- package/{chunk-B2K45IUR.js → chunk-5XTUFBZI.js} +5 -7
- package/{chunk-LW3TRU5W.js → chunk-674SRBZK.js} +28 -16
- package/{chunk-XZNHT6MO.js → chunk-6VKV36OK.js} +115 -61
- package/{chunk-GICKPMJU.js → chunk-73Z7NMQQ.js} +31 -31
- package/chunk-7Q76HLRQ.js +128 -0
- package/{chunk-JPNWHWAQ.js → chunk-AIMQNLPY.js} +38 -35
- package/{chunk-MYEZXZZC.js → chunk-BN7FDKCJ.js} +23 -25
- package/{chunk-3DINAQLL.js → chunk-BR2B4OIT.js} +33 -29
- package/{chunk-2HKBZFIK.js → chunk-CGOH5IYX.js} +31 -31
- package/chunk-CVNRZ2YV.js +112 -0
- package/{chunk-QUF2IPOZ.js → chunk-DPYIBFQD.js} +12 -14
- package/chunk-EF5GT4OG.js +87 -0
- package/chunk-FAJ3OVL4.js +37 -0
- package/{chunk-L6NCCSIP.js → chunk-FB5HTCO2.js} +36 -29
- package/chunk-GI2SMFZL.js +55 -0
- package/{chunk-B6V4VSGH.js → chunk-GMETYACH.js} +14 -15
- package/chunk-HK6WINL6.js +95 -0
- package/{chunk-HL42K2NH.js → chunk-IKO3GQFE.js} +17 -17
- package/{chunk-DO3TBNSC.js → chunk-ISYKZCPJ.js} +15 -17
- package/{chunk-YG7JOOLJ.js → chunk-J7RMFN54.js} +5 -7
- package/{chunk-SHDFUXYV.js → chunk-JBKBRAC4.js} +16 -18
- package/{chunk-LZMKSFCF.js → chunk-JCXI7VQL.js} +10 -12
- package/{chunk-NN6PKJWS.js → chunk-JYOZUQNU.js} +7 -9
- package/{chunk-LLHTVIM3.js → chunk-LB37KTJH.js} +7 -9
- package/{chunk-NSRTTYQ4.js → chunk-LB7Z6BSK.js} +42 -35
- package/{chunk-BNZVTLHV.js → chunk-LFGUJHFF.js} +25 -21
- package/{chunk-7TXHCRAG.js → chunk-M2HEVFQ3.js} +8 -10
- package/{chunk-SH6NG6VN.js → chunk-NH3EHMIL.js} +6 -8
- package/chunk-NL574STL.js +88 -0
- package/chunk-NQL6SIIB.js +168 -0
- package/chunk-O46O6LFQ.js +25 -0
- package/{chunk-YPNKBE5X.js → chunk-OURZQM27.js} +5 -7
- package/{chunk-XL75JRUA.js → chunk-OVKPPXK5.js} +42 -22
- package/chunk-PD6YPFYN.js +42 -0
- package/{chunk-XILQ7GXE.js → chunk-PHNR6ZQ7.js} +11 -13
- package/{chunk-BNTPPZCK.js → chunk-PUWSL5XW.js} +37 -39
- package/{chunk-A5XEM3GF.js → chunk-RHQHDYTE.js} +34 -36
- package/chunk-S7QHBVPX.js +45 -0
- package/{chunk-TX3H3QMA.js → chunk-SAYNV7B3.js} +71 -70
- package/{chunk-6QMSWITQ.js → chunk-SDOTDMYG.js} +24 -26
- package/{chunk-UGRSWP6U.js → chunk-SPGUZMCC.js} +10 -12
- package/chunk-SSOFFQ5T.js +74 -0
- package/{chunk-AN2RNJLR.js → chunk-SZJIVBOD.js} +16 -16
- package/chunk-T6L32XXH.js +107 -0
- package/{chunk-QS4N4MNP.js → chunk-TT2N5752.js} +18 -20
- package/{chunk-72OCFAPT.js → chunk-UCCNXGLG.js} +22 -21
- package/{chunk-KNUWZNFV.js → chunk-UGIVCXGN.js} +4 -6
- package/{chunk-H4NU7NPO.js → chunk-UUCVRIVP.js} +62 -61
- package/{chunk-P4O6TGDR.js → chunk-UZ4DXU6W.js} +28 -26
- package/{chunk-UBNHSZSE.js → chunk-VUOAPWTF.js} +10 -12
- package/{chunk-VAGIAREV.js → chunk-W472DBMT.js} +29 -26
- package/{chunk-X3PQANZO.js → chunk-W4RDTP6W.js} +47 -46
- package/{chunk-CL2II6BX.js → chunk-WLQD5BN2.js} +11 -13
- package/{chunk-FDKIX4DC.js → chunk-X2GNMNZQ.js} +7 -9
- package/{chunk-PF3YBUKT.js → chunk-X66KTATQ.js} +16 -15
- package/{chunk-J3NSDRVH.js → chunk-XETMIETJ.js} +0 -2
- package/chunk-XH56JGYC.js +71 -0
- package/{chunk-O7F3CIDV.js → chunk-XUOSJMEJ.js} +10 -12
- package/chunk-YJK4MGSI.js +86 -0
- package/{chunk-YX5VNRJX.js → chunk-YYFAZQ25.js} +0 -2
- package/chunk-Z7S2KQZS.js +177 -0
- package/chunk-ZBZ3ZQRB.js +195 -0
- package/{chunk-Y5AYU7PK.js → chunk-ZHFIWDGF.js} +0 -2
- package/components/accordion.js +2 -4
- package/components/agent-loading.d.ts +2 -0
- package/components/agent-loading.js +2 -4
- package/components/agent-picker.js +4 -5
- package/components/agent-suggestion.js +5 -6
- package/components/announcement-bar.js +6 -7
- package/components/attachment.js +4 -5
- package/components/avatar.js +4 -6
- package/components/badge.js +2 -4
- package/components/banner-mesh.js +1 -3
- package/components/banner.js +4 -6
- package/components/bar-chart.js +10 -11
- package/components/breadcrumb.js +5 -6
- package/components/button.js +2 -4
- package/components/card.js +3 -5
- package/components/channel-chart.js +10 -11
- package/components/chart.js +9 -10
- package/components/checkbox.js +2 -4
- package/components/chip.js +2 -4
- package/components/citations.d.ts +6 -4
- package/components/citations.js +4 -5
- package/components/code-block.js +3 -5
- package/components/combobox.d.ts +12 -3
- package/components/combobox.js +9 -10
- package/components/command-menu.d.ts +6 -2
- package/components/command-menu.js +5 -6
- package/components/context-menu.d.ts +12 -5
- package/components/context-menu.js +5 -6
- package/components/cookie-consent.js +3 -5
- package/components/date-picker.d.ts +26 -14
- package/components/date-picker.js +8 -9
- package/components/decision-card.js +6 -7
- package/components/dialog.d.ts +5 -2
- package/components/dialog.js +4 -5
- package/components/donut-chart.js +10 -11
- package/components/dot.js +2 -4
- package/components/dropdown.d.ts +6 -1
- package/components/dropdown.js +4 -5
- package/components/empty-state.js +2 -4
- package/components/file-upload.js +6 -7
- package/components/floating.js +1 -3
- package/components/form-field.js +2 -4
- package/components/hover-card.d.ts +5 -2
- package/components/hover-card.js +2 -4
- package/components/input-otp.d.ts +4 -2
- package/components/input-otp.js +7 -8
- package/components/input.js +3 -5
- package/components/kbd.js +2 -4
- package/components/labels.d.ts +79 -0
- package/components/labels.js +1 -0
- package/components/line-chart.js +11 -12
- package/components/message-actions.js +4 -5
- package/components/message.js +7 -8
- package/components/number-input.d.ts +4 -2
- package/components/number-input.js +7 -8
- package/components/pagination.js +4 -6
- package/components/popover.d.ts +11 -5
- package/components/popover.js +3 -4
- package/components/progress.js +2 -4
- package/components/prompt-bar.js +5 -6
- package/components/radio.js +2 -4
- package/components/search-bar.js +3 -5
- package/components/segmented-control.d.ts +4 -2
- package/components/segmented-control.js +3 -5
- package/components/select.d.ts +10 -2
- package/components/select.js +6 -7
- package/components/sheet.d.ts +4 -2
- package/components/sheet.js +5 -6
- package/components/sidebar.js +2 -4
- package/components/skeleton.js +2 -4
- package/components/slider.d.ts +6 -2
- package/components/slider.js +7 -8
- package/components/sliding-indicator.js +1 -3
- package/components/streaming-text.js +2 -4
- package/components/switch.js +2 -4
- package/components/table.d.ts +16 -5
- package/components/table.js +4 -5
- package/components/tabs.d.ts +4 -2
- package/components/tabs.js +3 -5
- package/components/textarea.js +3 -5
- package/components/thinking.js +3 -5
- package/components/toast.js +4 -5
- package/components/toggle.js +2 -4
- package/components/tooltip.d.ts +5 -2
- package/components/tooltip.js +3 -5
- package/index.d.ts +1 -0
- package/index.js +67 -231
- package/lib/utils.d.ts +8 -1
- package/lib/utils.js +1 -3
- package/package.json +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.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.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-JPNWHWAQ.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/dialog.tsx"],"names":["DialogPrimitive"],"mappings":"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","file":"chunk-JPNWHWAQ.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'\n\n/**\n * Dialog, 1:1 with the uiKit `Dialog` set (465:66873): variant default or destructive.\n * A 425px popover surface (min 360, max 560, never wider or taller than the screen less 16px a side; the body scrolls), radius-2xl, border/default, the shadcn `lg`\n * shadow. Header 16 / 16 / 8 with a 14px medium title and a 13px muted description, a body\n * 16px in with a 12px gap (body text, any content, an optional `DialogAlert`), then a\n * right-aligned footer with 16px padding on both variants, on the same inset as the header and\n * body. The close button is a 36px tertiary icon button 8px from the top-right corner.\n *\n * Built on the Radix Dialog. The destructive variant keeps the same primitive but takes\n * `role=\"alertdialog\"`, so screen readers announce it as an alert. Pass `container` to portal\n * it into a positioned element (the docs stage) instead of the page; the dialog then centres\n * inside that element rather than the viewport.\n */\nexport type DialogVariant = 'default' | 'destructive'\n\nexport interface DialogProps {\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n /** Optional element that opens the dialog (rendered with `asChild`, so pass a Button). */\n trigger?: React.ReactNode\n title: React.ReactNode\n description?: React.ReactNode\n variant?: DialogVariant\n /** A `DialogAlert` shown under the body, for a side effect the user must know about. */\n alert?: React.ReactNode\n /** The actions on the right of the footer. Leave it out for a read-only dialog. */\n footer?: React.ReactNode\n /** Figma's `footerSlot`: content on the left of the footer, e.g. a \"Don't ask again\" checkbox. */\n footerStart?: React.ReactNode\n /** Body. A string renders as body text (13px, text/default). */\n children?: React.ReactNode\n /** Show the close button in the corner. */\n closeButton?: 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 /** Called when focus moves into the dialog on open; `preventDefault()` keeps it where it was. */\n onOpenAutoFocus?: (event: Event) => void\n className?: string\n}\n\n/** The X from Figma's close button (`icon` 16px, 1.25 stroke). */\nexport function CloseIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path\n d=\"M4.50551 11.4951L8.0006 8M8.0006 8L11.4957 4.50491M8.0006 8L4.50551 4.50491M8.0006 8L11.4957 11.4951\"\n stroke=\"currentColor\"\n strokeWidth=\"1.25\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )\n}\n\nexport function Dialog({\n open,\n defaultOpen,\n onOpenChange,\n trigger,\n title,\n description,\n variant = 'default',\n alert,\n footer,\n footerStart,\n children,\n closeButton = true,\n modal = true,\n container,\n onOpenAutoFocus,\n className,\n}: DialogProps) {\n // Inside a container the dialog is laid out against it, not the viewport.\n const position = container ? 'absolute' : 'fixed'\n const hasBody = children != null || alert != null\n\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 {/* No overlay in Figma; black-a40 is the kit's scrim colour. Only drawn when modal. */}\n <DialogPrimitive.Overlay\n className={cn(\n position,\n 'inset-0 z-50 bg-black-a40',\n )}\n />\n <div className={cn(position, 'pointer-events-none inset-0 z-50 grid grid-cols-[minmax(0,1fr)] grid-rows-[minmax(0,1fr)] place-items-center p-4')}>\n <DialogPrimitive.Content\n role={variant === 'destructive' ? 'alertdialog' : 'dialog'}\n data-slot=\"dialog\"\n data-variant={variant}\n onOpenAutoFocus={onOpenAutoFocus}\n // No description: tell Radix on purpose, so it doesn't warn.\n {...(description ? {} : { 'aria-describedby': undefined })}\n className={cn(\n 'pointer-events-auto relative flex max-h-full w-[425px] max-w-[min(560px,100%)] min-w-[min(360px,100%)] flex-col overflow-clip',\n 'rounded-2xl border border-border-default bg-bg-popover',\n '[box-shadow:0_4px_6px_-4px_var(--effect-shadow-sm),0_10px_15px_-3px_var(--effect-shadow-sm)]',\n 'focus-visible:outline-none',\n 'data-[state=open]:animate-[satin-enter_var(--duration-base)_var(--ease-out)]',\n className,\n )}\n >\n <div className=\"flex min-h-0 flex-col gap-3\">\n <div className=\"flex shrink-0 flex-col gap-0.5 px-4 pt-4 pb-2\">\n <DialogPrimitive.Title className=\"pr-8 text-base leading-[14px] font-medium tracking-normal text-text-default\">\n {title}\n </DialogPrimitive.Title>\n {description ? (\n <DialogPrimitive.Description className=\"text-body text-text-muted\">{description}</DialogPrimitive.Description>\n ) : null}\n </div>\n {hasBody && (\n <div className=\"flex min-h-0 flex-col gap-3 overflow-y-auto px-4 pb-3\">\n {typeof children === 'string' ? <p className=\"text-body text-text-default\">{children}</p> : children}\n {alert}\n </div>\n )}\n </div>\n\n {(footer || footerStart) && (\n <div className=\"flex shrink-0 flex-wrap items-center justify-end gap-3 p-4\">\n {footerStart && <div className=\"flex min-w-0 flex-1 items-center\">{footerStart}</div>}\n <div className=\"flex shrink-0 items-center gap-2\">{footer}</div>\n </div>\n )}\n\n {closeButton && (\n <DialogPrimitive.Close asChild>\n <Button\n variant=\"tertiary\"\n size=\"xl\"\n iconOnly\n aria-label=\"Close\"\n className=\"absolute top-[7px] right-[7px] rounded-lg\"\n >\n <CloseIcon />\n </Button>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </div>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n )\n}\n\n/** Wrap a footer button in this to make it close the dialog: `<DialogClose asChild><Button…/></DialogClose>`. */\nexport const DialogClose = DialogPrimitive.Close\n\n/* ------------------------------------------------------------------------------------------ */\n\nexport type DialogAlertIntent = 'info' | 'success' | 'warning' | 'error'\n\n/**\n * Alert, 1:1 with the uiKit `Alert` set (475:27871): the inline notice inside a dialog.\n * radius-xl, 16 / 12 padding, the intent's status bg, a 16px status icon in the intent's\n * status fg, a 14px medium title over a 13px muted description, and an optional 28px close.\n */\nexport interface DialogAlertProps extends Omit<React.ComponentProps<'div'>, 'title'> {\n intent?: DialogAlertIntent\n title: React.ReactNode\n description?: React.ReactNode\n /** Hide the status icon. */\n icon?: boolean\n /** Shows the close button; called when it is pressed. */\n onDismiss?: () => void\n}\n\nconst alertTint: Record<DialogAlertIntent, string> = {\n info: 'bg-status-sky-bg text-status-sky-fg',\n success: 'bg-status-green-bg text-status-green-fg',\n warning: 'bg-status-amber-bg text-status-amber-fg',\n error: 'bg-status-red-bg text-status-red-fg',\n}\n\n/** The four status glyphs from Figma (16px, 1.25 stroke), drawn in currentColor. */\nexport function StatusIcon({ intent }: { intent: DialogAlertIntent }) {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden className=\"shrink-0\">\n <g stroke=\"currentColor\" style={{ strokeWidth: 1.25 }} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n {intent === 'success' ? (\n <path d=\"M3.33333 8.66667L6 11.3333L12.6667 4.66667\" />\n ) : (\n <>\n {intent === 'info' ? (\n <>\n <path d=\"M8 7.70494V10.6557\" />\n <path d=\"M8 5.35022L8.0059 5.34366\" />\n </>\n ) : (\n <>\n <path d=\"M8 5.34428V8.29506\" />\n <path d=\"M8 10.6563L8.0059 10.6498\" />\n </>\n )}\n <path d=\"M8 13.9015C11.2593 13.9015 13.9015 11.2593 13.9015 8C13.9015 4.74066 11.2593 2.09845 8 2.09845C4.74066 2.09845 2.09845 4.74066 2.09845 8C2.09845 11.2593 4.74066 13.9015 8 13.9015Z\" />\n </>\n )}\n </g>\n </svg>\n )\n}\n\nexport function DialogAlert({\n intent = 'info',\n title,\n description,\n icon = true,\n onDismiss,\n className,\n ...props\n}: DialogAlertProps) {\n return (\n <div\n role={intent === 'error' || intent === 'warning' ? 'alert' : 'status'}\n data-slot=\"dialog-alert\"\n data-intent={intent}\n className={cn('flex w-full items-center gap-3 rounded-xl px-4 py-3', alertTint[intent], className)}\n {...props}\n >\n <div className=\"flex min-w-0 flex-1 items-center gap-2.5\">\n {icon && <StatusIcon intent={intent} />}\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <p className=\"text-base font-medium text-text-default\">{title}</p>\n {description ? <p className=\"text-body text-text-muted\">{description}</p> : null}\n </div>\n </div>\n {onDismiss && (\n <Button variant=\"tertiary\" iconOnly aria-label=\"Dismiss\" onClick={onDismiss}>\n <CloseIcon />\n </Button>\n )}\n </div>\n )\n}\n"]}
|
package/chunk-KNUWZNFV.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/agent-loading.tsx"],"names":["falls","clears","loop","TetrisMark"],"mappings":"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","file":"chunk-KNUWZNFV.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../lib/utils'\n\n/**\n * Loading: what shows while an agent works, before there is anything to read. The mark playing,\n * the label shimmering and the elapsed time in text/subtle, 12px apart, 4px padding (28 high),\n * announced politely to screen readers. Once the agent is done, Thinking takes its place.\n *\n * The agent's loading marks, from the uiKit: the tetris mark (uiKit \"tetris\", 3215:81593, beside\n * its label in thinkingHeader, 3215:81620) and the flappy bird (flappyAgent, 1215:69019).\n *\n * Tetris: the kit's grid of 5 × 4 dots on a 16px mark, tetrominoes falling into it a row at a\n * time. A full row fades back to the grid and what stood on it comes down; five rounds of five\n * pieces, each ending on an empty board. As a row clears a band of light crosses the dots (and\n * only the dots) and runs on through the label: `glimmer=\"color\"` is glimm.dev's prism,\n * `neutral` a band of text/default. Plain CSS animations on transform and opacity; the\n * keyframes are written from the script below into one <style>, put back on mount if a\n * router dropped it, the static rules are in\n * styles/components/agent-loading.css.\n *\n * Flappy: the 17 × 12 pixel bird running in place. It has one frame, so it is stacked as clipped\n * copies of itself — the body and the wing — and the wing and the whole bird step one sprite\n * pixel on a four-beat cycle.\n */\nexport type Glimmer = 'color' | 'neutral'\n\nconst COLS = 5\nconst ROWS = 4\n\n/** Every shape the game has, in every turn used here, as [row, col] from its top left. */\nconst PIECES = {\n I: [[0, 0], [0, 1], [0, 2], [0, 3]],\n 'I|': [[0, 0], [1, 0], [2, 0], [3, 0]],\n O: [[0, 0], [0, 1], [1, 0], [1, 1]],\n T: [[0, 1], [1, 0], [1, 1], [1, 2]],\n 'T↓': [[0, 0], [0, 1], [0, 2], [1, 1]],\n 'T>': [[0, 0], [1, 0], [1, 1], [2, 0]],\n 'T<': [[0, 1], [1, 0], [1, 1], [2, 1]],\n S: [[0, 1], [0, 2], [1, 0], [1, 1]],\n 'S|': [[0, 0], [1, 0], [1, 1], [2, 1]],\n Z: [[0, 0], [0, 1], [1, 1], [1, 2]],\n 'Z|': [[0, 1], [1, 0], [1, 1], [2, 0]],\n L: [[0, 2], [1, 0], [1, 1], [1, 2]],\n 'L|': [[0, 0], [1, 0], [2, 0], [2, 1]],\n 'L↓': [[0, 0], [0, 1], [0, 2], [1, 0]],\n 'L|↓': [[0, 0], [0, 1], [1, 1], [2, 1]],\n J: [[0, 0], [1, 0], [1, 1], [1, 2]],\n 'J|': [[0, 1], [1, 1], [2, 0], [2, 1]],\n 'J↓': [[0, 0], [0, 1], [0, 2], [1, 2]],\n 'J|↓': [[0, 0], [0, 1], [1, 0], [2, 0]]\n} as const satisfies Record<string, readonly (readonly [number, number])[]>\n\ntype Piece = keyof typeof PIECES\n/** A piece and the column its left edge comes down. */\ntype Drop = [Piece, number]\n\n/**\n * Five rounds of five pieces each. Twenty dots fill the board exactly, so\n * every round ends empty — the last piece clears what is left — and the next\n * one starts on the bare grid. Between them the rounds use all seven shapes.\n */\nconst ROUNDS: Drop[][] = [\n // after Figma's frames: two Js build a tower in the middle, then the sides fill in and it goes in two clears\n [['J|', 1], ['J|↓', 1], ['O', 3], ['I|', 0], ['O', 3]],\n // a square and an L lay the floor; four clears, nearly a row a piece\n [['O', 0], ['L', 2], ['S', 2], ['J', 0], ['I', 1]],\n // a T to start, a J standing in the corner, a bar laid over both\n [['T', 0], ['J|', 3], ['I', 0], ['S', 2], ['L↓', 0]],\n // a pillar on the left, an L and a J lean on it, a Z and a T close it\n [['I|', 0], ['L|', 1], ['J↓', 2], ['Z|', 3], ['T↓', 1]],\n // a bar off the left edge, a Z tucked under the gap, a square in the corner\n [['I', 1], ['Z|', 0], ['J', 2], ['O', 3], ['L↓', 0]]\n]\n\n/** Milliseconds. One row of fall, the glide inside it, and everything between. */\nconst T = {\n step: 90,\n glide: 60,\n /** after a piece rests, before a clear or the next piece */\n lock: 220,\n /** a cleared row fading back to the board */\n clear: 260,\n /** what was above it coming down */\n settle: 200,\n /** between the settle and the next piece */\n next: 80,\n /** the empty board between rounds */\n rest: 150,\n /** the glimm band crossing the mark at a clear, and its fade once across */\n sweep: 520,\n outro: 120,\n /** how long before the fade the band sets off */\n lead: 120,\n /** the same band in the label: it picks up after the mark, a little slower across the longer text */\n textDelay: 220,\n textSweep: 600\n}\n\n/** One row down, in px — the Figma grid's 2 px dot and 1 px gap. */\nconst PITCH = 3\n\n/** A moment on a timeline: an offset down in px (and, for a dot, how visible); `glide` eases into the next key. */\ntype Key = { t: number; y: number; on?: number; glide?: boolean }\n/** A dot rests at its place on the board; its keys only move it down after a clear and fade it out. */\ntype Dot = { col: number; row: number; keys: Key[] }\n/** A piece falls as one: its keys bring its dots from above the board to where they rest. */\ntype Fall = { keys: Key[]; dots: Dot[] }\n\n/** Every piece of every round with its timeline over the whole loop, and the loop's length. */\nfunction playRounds(rounds: Drop[][] = ROUNDS): { falls: Fall[]; clears: number[]; loop: number } {\n const falls: Fall[] = []\n /** when each clear starts, for the glimm band */\n const clears: number[] = []\n let t = 0\n\n for (const [n, round] of rounds.entries()) {\n // where each resting dot is now, for collisions and clears\n const board: { dot: Dot; row: number }[] = []\n\n for (const [name, x] of round) {\n const shape = PIECES[name]\n const height = Math.max(...shape.map(([r]) => r)) + 1\n const taken = (r: number, c: number) => r >= ROWS || board.some((b) => b.row === r && b.dot.col === c)\n // the lowest top row it can rest at, falling straight down from above the board\n let top = -height\n while (!shape.some(([r, c]) => taken(top + 1 + r, x + c))) top++\n if (shape.some(([r]) => top + r < 0)) throw new Error(`tetris round ${n + 1}: ${name} at ${x} sticks out of the top`)\n if (shape.some(([, c]) => x + c >= COLS)) throw new Error(`tetris round ${n + 1}: ${name} at ${x} sticks out of the side`)\n\n // from just above the board (clipped), a row a step: a quick glide, then a beat at rest\n const rows = top + height\n const fall: Fall = { keys: [{ t: 0, y: -rows * PITCH }], dots: [] }\n for (let s = 0; s < rows; s++) {\n fall.keys.push({ t, y: (s - rows) * PITCH, glide: true }, { t: t + T.glide, y: (s + 1 - rows) * PITCH })\n t += T.step\n }\n for (const [r, c] of shape) {\n const dot: Dot = { col: x + c, row: top + r, keys: [{ t: 0, y: 0, on: 1 }] }\n fall.dots.push(dot)\n board.push({ dot, row: dot.row })\n }\n falls.push(fall)\n t += T.lock\n\n const full = [...new Set(board.map((b) => b.row))].filter((r) => board.filter((b) => b.row === r).length === COLS)\n if (!full.length) continue\n clears.push(t)\n\n // the full rows fade back to the board; what stood above them comes down\n for (const { dot, row } of board.filter((b) => full.includes(b.row))) {\n const y = (row - dot.row) * PITCH\n dot.keys.push({ t, y, on: 1, glide: true }, { t: t + T.clear, y, on: 0 })\n }\n t += T.clear\n const kept = board.filter((b) => !full.includes(b.row))\n for (const b of kept) {\n const down = full.filter((r) => r > b.row).length\n if (!down) continue\n b.dot.keys.push({ t, y: (b.row - b.dot.row) * PITCH, on: 1, glide: true }, { t: t + T.settle, y: (b.row + down - b.dot.row) * PITCH, on: 1 })\n b.row += down\n }\n board.splice(0, board.length, ...kept)\n t += T.settle + T.next\n }\n\n if (board.length) throw new Error(`tetris round ${n + 1} leaves ${board.length} dots on the board`)\n t += T.rest\n }\n\n return { falls, clears, loop: t }\n}\n\n// movement on the kit's ease-out, a quick start that settles; a fade on plain ease, so the full row is seen going\nconst GLIDE = 'animation-timing-function:cubic-bezier(0.22,1,0.36,1)'\nconst FADE = 'animation-timing-function:ease'\n\n/**\n * The CSS: `satin-tetris-f<i>` for each piece's fall, `satin-tetris-d<i>` for each of its\n * dots, `satin-tetris-glimm` for the band on the mark and `satin-tetris-glimm-text` for\n * it in the label, over a loop of `loop` ms.\n *\n * The band (glimm.dev's sweep) crosses the mark left to right as a row\n * clears, on glimm's default `ease`, then fades out past the right edge; it\n * carries on into the label as the mark's sweep runs out. Between sweeps it\n * goes back invisible.\n */\nfunction keyframes(falls: Fall[], clears: number[], loop: number): string {\n const pct = (t: number) => `${+((t / loop) * 100).toFixed(3)}%`\n const block = (name: string, keys: Key[]) => {\n const all = [...keys, { ...keys[keys.length - 1], t: loop, glide: false }]\n const frames = all.map((k) => {\n const props = [`transform:translateY(${k.y}px)`]\n if (k.on !== undefined) props.push(`opacity:${k.on}`)\n if (k.glide) props.push(k.on === 1 && keys[keys.indexOf(k) + 1]?.on === 0 ? FADE : GLIDE)\n return `${pct(k.t)}{${props.join(';')}}`\n })\n return `@keyframes ${name}{${frames.join('')}}`\n }\n let d = 0\n const pieces = falls.flatMap((f, i) => [block(`satin-tetris-f${i}`, f.keys), ...f.dots.map((dot) => block(`satin-tetris-d${d++}`, dot.keys))])\n const band = (x: number, on: number, ease = '') => `{transform:translateX(${x}%);opacity:${on}${ease}}`\n // it sets off a beat before the fade, so the light runs over the full row as it goes\n const sweeps = clears.map((c) => c - T.lead).flatMap((t) => [\n `${pct(t - 1)}${band(-100, 0)}`,\n `${pct(t)}${band(-100, 1, ';animation-timing-function:ease')}`,\n `${pct(t + T.sweep)}${band(100, 1, ';animation-timing-function:ease-out')}`,\n `${pct(t + T.sweep + T.outro)}${band(100, 0)}`\n ])\n const glimm = `@keyframes satin-tetris-glimm{0%${band(-100, 0)}${sweeps.join('')}100%${band(100, 0)}}`\n // in the label the band is a text-clipped background three widths wide: 100% is off the left, 0% off the right\n const text = (x: number, on: number, ease = '') => `{background-position:${x}% 0;opacity:${on}${ease}}`\n const textSweeps = clears.map((c) => c - T.lead + T.textDelay).flatMap((t) => [\n `${pct(t - 1)}${text(100, 0)}`,\n `${pct(t)}${text(100, 1, ';animation-timing-function:ease')}`,\n `${pct(t + T.textSweep)}${text(0, 1, ';animation-timing-function:ease-out')}`,\n `${pct(t + T.textSweep + T.outro)}${text(0, 0)}`\n ])\n const glimmText = `@keyframes satin-tetris-glimm-text{0%${text(100, 0)}${textSweeps.join('')}100%${text(0, 0)}}`\n return [...pieces, glimm, glimmText].join('\\n')\n}\n\n\nconst { falls, clears, loop } = playRounds()\n\nlet css: string | undefined\n\n/**\n * Writes the keyframes into <head> if they aren't there. Called on every mount, not once per\n * module: routers that swap <head> on navigation (Astro's ClientRouter, for one) drop the\n * style, and the module never runs again, so a mark on the next page would stand still.\n */\nfunction useTetrisKeyframes() {\n React.useInsertionEffect(() => {\n if (document.querySelector('style[data-satin-tetris]')) return\n const style = document.createElement('style')\n style.dataset.satinTetris = ''\n style.textContent = css ??= keyframes(falls, clears, loop)\n document.head.append(style)\n }, [])\n}\n\nconst GRID = Array.from({ length: COLS * ROWS }, (_, i) => i)\n\n/** The tetris mark. Memoised: its 125 animated elements never re-render with their parent. */\nexport const TetrisMark = React.memo(function TetrisMark({ glimmer = 'color', className }: { glimmer?: Glimmer; className?: string }) {\n useTetrisKeyframes()\n let d = 0\n return (\n <span\n aria-hidden\n data-glimmer={glimmer}\n className={cn('satin-tetris', className)}\n style={{ '--satin-tetris-loop': `${loop}ms` } as React.CSSProperties}\n >\n <span className=\"satin-tetris__board\">\n {GRID.map((i) => (\n <i key={i} />\n ))}\n {falls.map((fall, f) => (\n <span key={f} className=\"satin-tetris__fall\" style={{ animationName: `satin-tetris-f${f}` }}>\n {fall.dots.map((dot) => (\n <b key={d} style={{ '--c': dot.col, '--r': dot.row, animationName: `satin-tetris-d${d++}` } as React.CSSProperties} />\n ))}\n </span>\n ))}\n <span className=\"satin-tetris__glimm\">\n <span />\n </span>\n </span>\n </span>\n )\n})\n\n/** The tetris mark at rest, every dot filled: the finished header's mark. */\nexport function TetrisStill({ className }: { className?: string }) {\n return (\n <span aria-hidden data-still className={cn('satin-tetris', className)}>\n <span className=\"satin-tetris__board\">\n {GRID.map((i) => (\n <i key={i} />\n ))}\n </span>\n </span>\n )\n}\n\n/**\n * The label beside the mark: a shimmer, and on top a copy of the text the band crosses after the\n * mark, on the same loop, so the light runs from the icon on through the word.\n */\nexport function TetrisLabel({ children, glimmer = 'color', className }: { children: React.ReactNode; glimmer?: Glimmer; className?: string }) {\n useTetrisKeyframes()\n return (\n <span\n data-glimmer={glimmer}\n className={cn('satin-tetris-label', className)}\n style={{ '--satin-tetris-loop': `${loop}ms` } as React.CSSProperties}\n >\n <span className=\"satin-shimmer\">{children}</span>\n <span className=\"satin-tetris-label__glimm\" aria-hidden>\n <span>{children}</span>\n </span>\n </span>\n )\n}\n\n/** The label shimmer alone (a band of ink passing through muted text), for the flappy header. */\nexport function ShimmerLabel({ children, className }: { children: React.ReactNode; className?: string }) {\n return <span className={cn('satin-shimmer', className)}>{children}</span>\n}\n\nconst FLAPPY = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAMCAYAAACEJVa/AAAAa0lEQVR42mNgwA3+48BEAbDi/6+tUTBYDAiIMQhDM7IBMIDLIBQn4zMEl4v+owN0g8gyhJBB2A0BKUQGME1YvIUvtjBtxRYu4UoYGMMgeMAeZEfBMANISTcYhiAbhM8V2BMcFoPIScFEaQAAya9DoeSCRfcAAAAASUVORK5CYII='\n// [top, right, bottom, left) in sprite pixels: the body in three bands around the wing, and the wing.\nconst FLAPPY_PARTS: { role: 'body' | 'wing'; rect: [number, number, number, number] }[] = [\n { role: 'body', rect: [0, 17, 3, 0] },\n { role: 'body', rect: [3, 17, 8, 6] },\n { role: 'body', rect: [8, 17, 12, 0] },\n { role: 'wing', rect: [3, 6, 8, 0] },\n]\n\n/** The flappy bird fitted into a `size` square; `run` plays the run in place. */\nexport function FlappySprite({ size = 16, run = true, className }: { size?: number; run?: boolean; className?: string }) {\n const cols = 17\n const rows = 12\n return (\n <span\n aria-hidden\n data-run={run || undefined}\n className={cn('satin-sprite', className)}\n style={{ width: size, height: size, '--rows': rows, '--cols': cols } as React.CSSProperties}\n >\n <span className=\"satin-sprite__frame\" style={{ width: size, height: (size * rows) / cols }}>\n {FLAPPY_PARTS.map(({ role, rect: [t, r, b, l] }, i) => (\n <img\n key={i}\n src={FLAPPY}\n alt=\"\"\n draggable={false}\n data-role={role}\n className=\"satin-sprite__part\"\n style={{ clipPath: `inset(${(t / rows) * 100}% ${(1 - r / cols) * 100}% ${(1 - b / rows) * 100}% ${(l / cols) * 100}%)` }}\n />\n ))}\n </span>\n </span>\n )\n}\n\n/** What runs beside the label: the tetris mark, or the flappy bird. */\nexport type AgentLoadingIndicator = 'tetris' | 'flappy'\n\nexport interface AgentLoadingProps extends React.ComponentProps<'div'> {\n /** The live label. */\n label?: React.ReactNode\n /** Elapsed time after the label, e.g. \"1.2s\". */\n time?: React.ReactNode\n /** The mark beside the label. */\n indicator?: AgentLoadingIndicator\n /** The light that crosses the tetris mark and its label as rows clear: glimm's prism, or neutral. */\n glimmer?: Glimmer\n}\n\nexport function AgentLoading({ label = 'Thinking…', time, indicator = 'tetris', glimmer = 'color', className, ...props }: AgentLoadingProps) {\n return (\n <div data-slot=\"agent-loading\" role=\"status\" aria-live=\"polite\" className={cn('flex items-center gap-3 p-1', className)} {...props}>\n {indicator === 'flappy' ? <FlappySprite size={16} /> : <TetrisMark glimmer={glimmer} />}\n {indicator === 'tetris' ? (\n <TetrisLabel glimmer={glimmer} className=\"text-sm whitespace-nowrap\">\n {label}\n </TetrisLabel>\n ) : (\n <ShimmerLabel className=\"text-sm whitespace-nowrap\">{label}</ShimmerLabel>\n )}\n {time != null && <span className=\"text-sm whitespace-nowrap text-text-subtle tabular-nums\">{time}</span>}\n </div>\n )\n}\n"]}
|
package/chunk-L6NCCSIP.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/slider.tsx"],"names":["SliderPrimitive"],"mappings":"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","file":"chunk-L6NCCSIP.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { Slider as SliderPrimitive } from 'radix-ui'\nimport { cn } from '../lib/utils'\nimport { Input } from './input'\nimport { TooltipBubble } from './tooltip'\n\n/**\n * Slider, 1:1 with the uiKit `Slider` set (4025:3621): a 4px bg/muted track with the picked\n * part in action/primary/bg, and 16px bg/popover thumbs with a border/strong ring and the\n * shadow-sm drop (0 1 3). Hover turns the ring text/subtle, keyboard focus adds a 2px focus\n * ring, disabled fades the whole slider to 50%. 20px tall, so the thumbs have room.\n *\n * One value or a range: pass a number or a `[from, to]` pair as `value` / `defaultValue`.\n *\n * Around it, all optional:\n * - `label` on the left above the track and, on the same line at the right, the picked value\n * (`showValue`, on by default, \"40\" or \"20 – 80\", through `formatValue`).\n * - `inputs`: small number fields beside the track to type a value: the range's from on the\n * left and to on the right, a single value on the right. They take the readout's place.\n * A typed value is clamped, snapped to `step` and kept in order on Enter or blur; Escape\n * puts the current value back.\n * - `tooltip`: the value in a Tooltip bubble over the thumb while it is dragged or moved with\n * the keys.\n * - `orientation=\"vertical\"`: the track runs bottom to top (160px unless styled), the inputs\n * go above (to) and below (from or the single value).\n *\n * Built on the Radix Slider: arrow keys, Page Up/Down, Home/End, a native form value (`name`)\n * and a `slider` role per thumb, with `formatValue` as its spoken value.\n */\nexport interface SliderProps {\n /** A number, or a `[from, to]` pair for a range. */\n value?: number | [number, number]\n defaultValue?: number | [number, number]\n /** Every change while it moves. Gets a number or a pair, as given. */\n onValueChange?: (value: number | [number, number]) => void\n /** Once, when a drag ends or a key or a typed value changes it. */\n onValueCommit?: (value: number | [number, number]) => void\n min?: number\n max?: number\n step?: number\n /** Smallest gap between the range's thumbs, in steps. */\n minStepsBetweenThumbs?: number\n label?: React.ReactNode\n /** The picked value at the right of the label's line. Hidden while `inputs` are on. */\n showValue?: boolean\n /** Small number fields beside the track to type the value. */\n inputs?: boolean\n /** The value in a bubble over the thumb while it moves. */\n tooltip?: boolean\n orientation?: 'horizontal' | 'vertical'\n /** How a value reads in the readout, the bubble, the fields' neighbours and to screen readers. */\n formatValue?: (value: number) => string\n disabled?: boolean\n /** Form field name, for a native form submit. */\n name?: string\n id?: string\n /** Names the slider when there is no `label`. */\n 'aria-label'?: string\n /** Classes for the outer wrapper. */\n className?: string\n}\n\nconst decimals = (n: number) => (String(n).split('.')[1] ?? '').length\n\nexport function Slider({\n value: valueProp,\n defaultValue,\n onValueChange,\n onValueCommit,\n min = 0,\n max = 100,\n step = 1,\n minStepsBetweenThumbs = 0,\n label,\n showValue = true,\n inputs = false,\n tooltip = false,\n orientation = 'horizontal',\n formatValue = String,\n disabled = false,\n name,\n id,\n 'aria-label': ariaLabel,\n className,\n}: SliderProps) {\n const autoId = React.useId()\n const sliderId = id ?? autoId\n const labelId = `${sliderId}-label`\n const vertical = orientation === 'vertical'\n\n const range = Array.isArray(valueProp ?? defaultValue)\n const toArray = (v: number | [number, number] | undefined) => (v == null ? (range ? [min, max] : [min]) : Array.isArray(v) ? [...v] : [v])\n const toOut = (a: number[]) => (range ? ([a[0], a[1]] as [number, number]) : a[0])\n\n const [uncontrolled, setUncontrolled] = React.useState(() => toArray(defaultValue))\n const values = valueProp != null ? toArray(valueProp) : uncontrolled\n const change = (next: number[]) => {\n if (valueProp == null) setUncontrolled(next)\n onValueChange?.(toOut(next))\n }\n\n // The bubble shows on the thumb that moves: while a pointer drags it, or for a moment after a key.\n const [dragging, setDragging] = React.useState(false)\n const [keying, setKeying] = React.useState(false)\n const [focused, setFocused] = React.useState<number | null>(null)\n const keyTimer = React.useRef<ReturnType<typeof setTimeout>>(undefined)\n React.useEffect(() => {\n if (!dragging) return\n const end = () => setDragging(false)\n window.addEventListener('pointerup', end)\n window.addEventListener('pointercancel', end)\n return () => {\n window.removeEventListener('pointerup', end)\n window.removeEventListener('pointercancel', end)\n }\n }, [dragging])\n React.useEffect(() => () => clearTimeout(keyTimer.current), [])\n\n const readout = range ? `${formatValue(values[0])} – ${formatValue(values[1])}` : formatValue(values[0])\n const thumbLabel = (i: number) => (range ? (i === 0 ? 'From' : 'To') : undefined)\n const fieldLabel = (i: number) => (range ? (i === 0 ? 'From' : 'To') : 'Value')\n\n // A typed value: clamped, snapped to the step and kept on its side of the other thumb.\n const commitTyped = (i: number, typed: number) => {\n const places = decimals(step)\n let v = Math.round((typed - min) / step) * step + min\n v = Number(Math.min(max, Math.max(min, v)).toFixed(places))\n const gap = minStepsBetweenThumbs * step\n if (range) v = i === 0 ? Math.min(v, values[1] - gap) : Math.max(v, values[0] + gap)\n const next = values.map((x, j) => (j === i ? v : x))\n change(next)\n onValueCommit?.(toOut(next))\n }\n\n const field = (i: number) => (\n <SliderInput\n key={i}\n value={values[i]}\n disabled={disabled}\n aria-label={fieldLabel(i)}\n onCommit={(v) => commitTyped(i, v)}\n />\n )\n\n const slider = (\n <SliderPrimitive.Root\n id={sliderId}\n data-slot=\"slider\"\n value={values}\n onValueChange={change}\n onValueCommit={(v) => onValueCommit?.(toOut(v))}\n min={min}\n max={max}\n step={step}\n minStepsBetweenThumbs={minStepsBetweenThumbs}\n orientation={orientation}\n disabled={disabled}\n name={name}\n aria-labelledby={label ? labelId : undefined}\n onPointerDown={() => !disabled && setDragging(true)}\n className={cn(\n 'relative flex shrink-0 touch-none items-center select-none data-[disabled]:cursor-not-allowed',\n vertical ? 'h-40 w-5 flex-col' : 'h-5 w-full min-w-0 flex-1',\n )}\n >\n <SliderPrimitive.Track\n className={cn('relative grow cursor-pointer overflow-hidden rounded-full bg-bg-muted', vertical ? 'w-1' : 'h-1')}\n >\n <SliderPrimitive.Range className={cn('absolute rounded-full bg-action-primary-bg', vertical ? 'w-full' : 'h-full')} />\n </SliderPrimitive.Track>\n {values.map((v, i) => (\n <SliderPrimitive.Thumb\n key={i}\n aria-label={thumbLabel(i) ?? (label ? undefined : ariaLabel)}\n aria-labelledby={!range && label ? labelId : undefined}\n aria-valuetext={formatValue(v)}\n onFocus={() => setFocused(i)}\n onBlur={() => {\n setFocused(null)\n setKeying(false)\n }}\n onKeyDown={(e) => {\n if (!/^(Arrow|Page|Home|End)/.test(e.key)) return\n setKeying(true)\n clearTimeout(keyTimer.current)\n keyTimer.current = setTimeout(() => setKeying(false), 1000)\n }}\n className={cn(\n 'relative block size-4 cursor-grab rounded-full border border-border-strong bg-bg-popover outline-none active:cursor-grabbing',\n '[box-shadow:0_1px_3px_0_var(--effect-shadow-sm)]',\n 'transition-[border-color,box-shadow] duration-(--duration-fast) ease-(--ease-out)',\n 'hover:border-text-subtle focus-visible:[box-shadow:0_0_0_2px_var(--action-focus-ring)]',\n 'data-[disabled]:cursor-not-allowed data-[disabled]:hover:border-border-strong',\n )}\n >\n {tooltip && (\n <TooltipBubble\n aria-hidden\n label={formatValue(v)}\n data-visible={(dragging || keying) && focused === i ? '' : undefined}\n className={cn(\n 'pointer-events-none absolute tabular-nums opacity-0 transition-[opacity,translate] duration-(--duration-fast) ease-(--ease-out) data-[visible]:opacity-100',\n vertical\n ? 'top-1/2 left-full ml-2 -translate-x-0.5 -translate-y-1/2 data-[visible]:translate-x-0'\n : 'bottom-full left-1/2 mb-2 -translate-x-1/2 translate-y-0.5 data-[visible]:translate-y-0',\n )}\n />\n )}\n </SliderPrimitive.Thumb>\n ))}\n </SliderPrimitive.Root>\n )\n\n const head = (label || (showValue && !inputs)) && (\n <div className={cn('flex h-[18px] items-center justify-between gap-3 whitespace-nowrap', vertical && 'min-w-full')}>\n {label ? (\n <span id={labelId} className=\"text-sm leading-[18px] font-medium text-text-default\">\n {label}\n </span>\n ) : (\n <span />\n )}\n {showValue && !inputs && (\n <span aria-hidden className=\"text-sm leading-[18px] text-text-muted tabular-nums\">\n {readout}\n </span>\n )}\n </div>\n )\n\n return (\n <div\n data-slot=\"slider-field\"\n data-orientation={orientation}\n data-disabled={disabled || undefined}\n className={cn('flex flex-col gap-2', vertical ? 'w-max items-center' : 'w-full', className)}\n >\n {head}\n {vertical ? (\n <div className={cn('flex flex-col items-center gap-2', disabled && 'opacity-50')}>\n {inputs && range && field(1)}\n {slider}\n {inputs && field(0)}\n </div>\n ) : (\n <div className={cn('flex items-center gap-3', disabled && 'opacity-50')}>\n {inputs && range && field(0)}\n {slider}\n {inputs && field(range ? 1 : 0)}\n </div>\n )}\n </div>\n )\n}\n\n/** A small Input for one value: free typing, then committed on Enter or blur; Escape undoes. */\nfunction SliderInput({\n value,\n disabled,\n onCommit,\n 'aria-label': ariaLabel,\n}: {\n value: number\n disabled?: boolean\n onCommit: (value: number) => void\n 'aria-label': string\n}) {\n const [draft, setDraft] = React.useState<string | null>(null)\n const commit = () => {\n if (draft == null) return\n const n = Number(draft.replace(',', '.'))\n setDraft(null)\n if (draft.trim() !== '' && Number.isFinite(n) && n !== value) onCommit(n)\n }\n return (\n <Input\n size=\"sm\"\n inputMode=\"decimal\"\n aria-label={ariaLabel}\n disabled={disabled}\n value={draft ?? String(value)}\n onChange={(e) => setDraft(e.target.value)}\n onBlur={commit}\n onKeyDown={(e) => {\n if (e.key === 'Enter') commit()\n if (e.key === 'Escape') setDraft(null)\n }}\n wrapperClassName=\"w-16 shrink-0\"\n className=\"[&_input]:text-center [&_input]:tabular-nums\"\n />\n )\n}\n"]}
|
package/chunk-LLHTVIM3.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/radio.tsx"],"names":["RadioGroupPrimitive"],"mappings":";;;;;AAqBO,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAoB;AACnE,EAAA,uBAAO,GAAA,CAACA,YAAA,CAAoB,IAAA,EAApB,EAAyB,WAAA,EAAU,aAAA,EAAc,SAAA,EAAW,EAAA,CAAG,YAAA,EAAc,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAC9G;AAWO,SAAS,KAAA,CAAM,EAAE,SAAA,EAAW,KAAA,EAAO,WAAA,EAAa,SAAA,GAAY,MAAA,EAAQ,EAAA,EAAI,QAAA,EAAU,GAAG,KAAA,EAAM,EAAe;AAC/G,EAAA,MAAM,SAAe,KAAA,CAAA,KAAA,EAAM;AAC3B,EAAA,MAAM,UAAU,EAAA,IAAM,MAAA;AACtB,EAAA,MAAM,OAAA,GAAU,KAAA,GAAQ,CAAA,EAAG,OAAO,CAAA,MAAA,CAAA,GAAW,MAAA;AAC7C,EAAA,MAAM,aAAA,GAAgB,WAAA,GAAc,CAAA,EAAG,OAAO,CAAA,YAAA,CAAA,GAAiB,MAAA;AAE/D,EAAA,MAAM,MAAA,mBACJ,GAAA;AAAA,IAACA,YAAA,CAAoB,IAAA;AAAA,IAApB;AAAA,MACC,EAAA,EAAI,OAAA;AAAA,MACJ,WAAA,EAAU,OAAA;AAAA,MACV,iBAAA,EAAiB,OAAA;AAAA,MACjB,kBAAA,EAAkB,aAAA;AAAA,MAClB,QAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,kBAAA,EAAoB,SAAS,CAAA;AAAA,MAC1C,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAA,GAAA,CAACA,YAAA,CAAoB,SAAA,EAApB,EAA8B,WAAU,iBAAA,EAAkB;AAAA;AAAA,GAC7D;AAGF,EAAA,IAAI,CAAC,KAAA,IAAS,CAAC,WAAA,EAAa,OAAO,MAAA;AAEnC,EAAA;AAAA;AAAA,oBAEE,IAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,OAAA;AAAA,QACT,WAAA,EAAU,aAAA;AAAA,QAEV,SAAA,EAAW,EAAA,CAAG,oIAAA,EAAsI,SAAA,KAAc,WAAW,kCAAkC,CAAA;AAAA,QAE9M,QAAA,EAAA;AAAA,UAAA,MAAA;AAAA,0BAED,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4HAAA,EACZ,QAAA,EAAA;AAAA,YAAA,KAAA,wBACE,MAAA,EAAA,EAAK,EAAA,EAAI,OAAA,EAAS,SAAA,EAAU,+BAC1B,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,YAED,+BACC,GAAA,CAAC,MAAA,EAAA,EAAK,IAAI,aAAA,EAAe,SAAA,EAAU,mCAChC,QAAA,EAAA,WAAA,EACH;AAAA,WAAA,EAEJ;AAAA;AAAA;AAAA;AACF;AAEJ","file":"chunk-LLHTVIM3.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { RadioGroup as RadioGroupPrimitive } from 'radix-ui'\nimport { cn } from '../lib/utils'\n\n/**\n * Radio, 1:1 with the uiKit `_radioBase` (852:22410) and `Radio` (852:22426) sets: a 16px\n * circle, checked as a solid primary fill with a 6px dot, with an optional label (14/20 medium,\n * text/default) and description (14/20 regular, muted) 2px apart, 8px from the circle, on either\n * side. Disabled turns both texts text/subtle. The look of every state is\n * styles/components/radio.css.\n *\n * A Radio lives in a RadioGroup (Radix): the group owns the value, so `checked` (Figma's\n * property) follows from the group's `value` / `defaultValue`, and arrow keys move between\n * options. With a label or description the whole field is a `<label>`, so a click anywhere on\n * it (circle, label, description) picks the option, and hovering it hovers the circle; the label\n * names the circle, the description is wired with `aria-describedby`.\n */\nexport interface RadioGroupProps extends React.ComponentProps<typeof RadioGroupPrimitive.Root> {}\n\nexport function RadioGroup({ className, ...props }: RadioGroupProps) {\n return <RadioGroupPrimitive.Root data-slot=\"radio-group\" className={cn('grid gap-3', className)} {...props} />\n}\n\nexport interface RadioProps extends React.ComponentProps<typeof RadioGroupPrimitive.Item> {\n label?: React.ReactNode\n description?: React.ReactNode\n /** Which side of the text the circle sits on. */\n placement?: 'left' | 'right'\n /** Show a state without interacting, for state sheets. */\n 'data-force'?: 'hover' | 'focus' | 'pressed'\n}\n\nexport function Radio({ className, label, description, placement = 'left', id, disabled, ...props }: RadioProps) {\n const autoId = React.useId()\n const radioId = id ?? autoId\n const labelId = label ? `${radioId}-label` : undefined\n const descriptionId = description ? `${radioId}-description` : undefined\n\n const circle = (\n <RadioGroupPrimitive.Item\n id={radioId}\n data-slot=\"radio\"\n aria-labelledby={labelId}\n aria-describedby={descriptionId}\n disabled={disabled}\n className={cn('peer satin-radio', className)}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"satin-radio-dot\" />\n </RadioGroupPrimitive.Item>\n )\n\n if (!label && !description) return circle\n\n return (\n // The whole field is the <label>: the control, its label and its description all toggle it.\n <label\n htmlFor={radioId}\n data-slot=\"radio-field\"\n // The 16px circle sits on the middle of the label's first 20px line.\n className={cn('flex cursor-pointer items-start gap-2 has-disabled:cursor-not-allowed has-data-disabled:cursor-not-allowed [&>:first-child]:mt-0.5', placement === 'right' && 'flex-row-reverse justify-between')}\n >\n {circle}\n {/* Disabled (on the item or the whole group) turns both texts text/subtle. */}\n <div className=\"grid min-w-0 gap-0.5 text-base text-text-default peer-data-disabled:text-text-subtle peer-data-disabled:*:text-text-subtle\">\n {label && (\n <span id={labelId} className=\"block leading-5 font-medium\">\n {label}\n </span>\n )}\n {description && (\n <span id={descriptionId} className=\"block leading-5 text-text-muted\">\n {description}\n </span>\n )}\n </div>\n </label>\n )\n}\n"]}
|
package/chunk-LW3TRU5W.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/number-input.tsx"],"names":[],"mappings":"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","file":"chunk-LW3TRU5W.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { Minus, Plus } from 'iconoir-react'\nimport { cn } from '../lib/utils'\nimport { FieldChrome, useFieldChrome } from './select'\n\n/**\n * NumberInput, 1:1 with the uiKit design (🆕 input otp & number): Input's field skin and sizes\n * (sm 28, md 32, lg 36) with − and + at its ends and the value centred, tabular. The buttons are\n * 24px squares (radius-md, hover bg/hover, text/muted → text/default); at `min` or `max` the one\n * that would cross it fades to 40% and stops.\n *\n * It's a spinbutton: ArrowUp / ArrowDown step, PageUp / PageDown step ten times, Home / End jump\n * to `min` / `max`. Typing is free while focused; Enter or leaving the field clamps it, snaps it to\n * `step` and commits; Escape puts the last value back.\n */\nexport interface NumberInputProps {\n value?: number\n defaultValue?: number\n onValueChange?: (value: number) => void\n min?: number\n max?: number\n step?: number\n size?: 'sm' | 'md' | 'lg'\n /** How the value reads in the field and to screen readers. */\n formatValue?: (value: number) => string\n label?: React.ReactNode\n hint?: React.ReactNode\n error?: React.ReactNode | boolean\n disabled?: boolean\n id?: string\n name?: string\n 'aria-label'?: string\n /** Classes for the outer wrapper (label + field + hint). `className` styles the field. */\n wrapperClassName?: string\n className?: string\n}\n\nconst decimals = (n: number) => (String(n).split('.')[1] ?? '').length\n\nexport function NumberInput({\n value: valueProp,\n defaultValue = 0,\n onValueChange,\n min = -Infinity,\n max = Infinity,\n step = 1,\n size = 'md',\n formatValue = String,\n label,\n hint,\n error,\n disabled,\n id,\n name,\n wrapperClassName,\n className,\n ...props\n}: NumberInputProps) {\n const chrome = useFieldChrome({ id, disabled, error, hint })\n const [inner, setInner] = React.useState(defaultValue)\n const value = valueProp ?? inner\n const [draft, setDraft] = React.useState<string | null>(null)\n\n const clamp = (n: number) => {\n const snapped = Number.isFinite(min) ? Math.round((n - min) / step) * step + min : Math.round(n / step) * step\n return Number(Math.min(max, Math.max(min, snapped)).toFixed(decimals(step)))\n }\n const commit = (n: number) => {\n const next = clamp(n)\n setDraft(null)\n if (next === value) return\n if (valueProp == null) setInner(next)\n onValueChange?.(next)\n }\n const by = (k: number) => commit(value + k * step)\n\n const atMin = value <= min\n const atMax = value >= max\n const btn = cn(\n 'grid size-6 shrink-0 place-items-center rounded-md text-text-muted outline-none',\n 'transition-[background-color,color,opacity] duration-(--duration-fast) ease-(--ease-out)',\n 'hover:bg-bg-hover hover:text-text-default focus-visible:[box-shadow:0_0_0_2px_var(--action-focus-ring)]',\n 'disabled:pointer-events-none disabled:opacity-40 [&_svg]:size-4 [&_svg]:[stroke-width:1.875]',\n )\n\n return (\n <FieldChrome label={label} chrome={chrome} className={wrapperClassName}>\n <div\n data-slot=\"number-input\"\n data-size={size}\n data-filled\n data-invalid={chrome.invalid || undefined}\n data-disabled={chrome.disabled || undefined}\n className={cn('satin-field gap-1 px-1', className)}\n >\n <button\n type=\"button\"\n tabIndex={-1}\n aria-label=\"Decrease\"\n aria-controls={chrome.controlId}\n disabled={chrome.disabled || atMin}\n onClick={() => by(-1)}\n className={btn}\n >\n <Minus aria-hidden />\n </button>\n <input\n id={chrome.controlId}\n name={name}\n role=\"spinbutton\"\n inputMode=\"decimal\"\n aria-valuenow={value}\n aria-valuemin={Number.isFinite(min) ? min : undefined}\n aria-valuemax={Number.isFinite(max) ? max : undefined}\n aria-valuetext={formatValue(value)}\n aria-invalid={chrome.invalid || undefined}\n aria-describedby={chrome.describedBy}\n aria-label={props['aria-label']}\n disabled={chrome.disabled}\n value={draft ?? formatValue(value)}\n onChange={(e) => setDraft(e.target.value)}\n onBlur={() => draft != null && commit(Number(draft.replace(',', '.').replace(/[^\\d.-]/g, '')) || 0)}\n onKeyDown={(e) => {\n const keys: Record<string, () => void> = {\n ArrowUp: () => by(1),\n ArrowDown: () => by(-1),\n PageUp: () => by(10),\n PageDown: () => by(-10),\n Home: () => Number.isFinite(min) && commit(min),\n End: () => Number.isFinite(max) && commit(max),\n Enter: () => draft != null && commit(Number(draft.replace(',', '.').replace(/[^\\d.-]/g, '')) || 0),\n Escape: () => setDraft(null),\n }\n if (keys[e.key]) {\n e.preventDefault()\n keys[e.key]()\n }\n }}\n className=\"satin-field-input text-center tabular-nums\"\n />\n <button\n type=\"button\"\n tabIndex={-1}\n aria-label=\"Increase\"\n aria-controls={chrome.controlId}\n disabled={chrome.disabled || atMax}\n onClick={() => by(1)}\n className={btn}\n >\n <Plus aria-hidden />\n </button>\n </div>\n </FieldChrome>\n )\n}\n"]}
|
package/chunk-LZMKSFCF.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/channel-chart.tsx"],"names":[],"mappings":"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","file":"chunk-LZMKSFCF.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../lib/utils'\nimport { ChartCard, ChartLegendRow, ChartTooltip, defaultFormat, type ChartCardBaseProps } from './chart'\n\n/**\n * Channel chart, 1:1 with the uiKit `chart/channelCard` (3608:18797), in the shared card\n * frame (chart.tsx).\n *\n * ChannelCard: the KPI (the sum unless given) with its change badge, a 14px stacked bar of fr\n * segments 2px apart in chart/1–5 (4px outer corners, 1.5px inner), and a legend row per\n * channel (8px swatch, label, value, 32 high, 2px apart), in two columns from 560px. Hover (or `highlight`) fades the\n * other segments to 15% and the other rows to 45%, and fills the row bg/muted.\n */\nexport interface ChannelCardProps extends ChartCardBaseProps {}\n\nconst seriesColor = (i: number) => `var(--chart-${(i % 5) + 1})`\n\nexport function ChannelCard({\n data,\n formatValue = defaultFormat,\n highlight,\n total,\n ...props\n}: ChannelCardProps) {\n const [hovered, setHovered] = React.useState<number | null>(null)\n const [anchor, setAnchor] = React.useState<HTMLElement | null>(null)\n const active = hovered ?? highlight ?? null\n const sum = data.reduce((n, d) => n + d.value, 0)\n const last = data.length - 1\n\n return (\n <ChartCard total={total ?? formatValue(sum)} {...props}>\n <div className=\"relative flex flex-col gap-4\" onPointerLeave={() => setHovered(null)}>\n <div\n aria-hidden\n className=\"relative grid h-3.5 gap-x-0.5\"\n style={{ gridTemplateColumns: data.map((d) => `minmax(0, ${Math.max(d.value, 0)}fr)`).join(' ') }}\n >\n {data.map((d, i) => (\n <span\n key={d.label}\n ref={active === i ? setAnchor : undefined}\n onPointerEnter={() => setHovered(i)}\n className={cn(\n 'relative rounded-[1.5px] transition-opacity duration-(--duration-fast) ease-(--ease-out)',\n i === 0 && 'rounded-l-[4px]',\n i === last && 'rounded-r-[4px]',\n active !== null && active !== i && 'opacity-15',\n )}\n style={{ background: seriesColor(i) }}\n >\n {active === i && (\n <ChartTooltip anchor={anchor} sideOffset={8} label={d.tooltipLabel ?? d.label} value={formatValue(d.value)} />\n )}\n </span>\n ))}\n </div>\n <ul\n className=\"flex flex-col gap-0.5 @min-[560px]:grid @min-[560px]:grid-flow-col @min-[560px]:auto-cols-fr @min-[560px]:gap-x-6\"\n style={{ gridTemplateRows: `repeat(${Math.ceil(data.length / 2)}, auto)` }}\n aria-label={props.title}\n >\n {data.map((d, i) => (\n <li\n key={d.label}\n tabIndex={0}\n onPointerEnter={() => setHovered(i)}\n onFocus={() => setHovered(i)}\n onBlur={() => setHovered(null)}\n aria-label={`${d.label}: ${formatValue(d.value)}, ${Math.round((d.value / (sum || 1)) * 100)}%`}\n className=\"rounded-md focus-visible:outline-none focus-visible:[box-shadow:0_0_0_2px_var(--action-focus-ring)]\"\n >\n <ChartLegendRow\n color={seriesColor(i)}\n label={d.label}\n value={formatValue(d.value)}\n active={active === i}\n dimmed={active !== null && active !== i}\n />\n </li>\n ))}\n </ul>\n </div>\n </ChartCard>\n )\n}\n"]}
|
package/chunk-MR3JDI7E.js
DELETED
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
import { Progress } from './chunk-7TXHCRAG.js';
|
|
2
|
-
import { Badge } from './chunk-O7F3CIDV.js';
|
|
3
|
-
import { cn } from './chunk-H63FYCMY.js';
|
|
4
|
-
import * as React from 'react';
|
|
5
|
-
import { ArrowRight } from 'iconoir-react';
|
|
6
|
-
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
7
|
-
|
|
8
|
-
function AgentSuggestion({
|
|
9
|
-
kind,
|
|
10
|
-
icon,
|
|
11
|
-
meta,
|
|
12
|
-
title,
|
|
13
|
-
description,
|
|
14
|
-
actions,
|
|
15
|
-
children,
|
|
16
|
-
className,
|
|
17
|
-
...props
|
|
18
|
-
}) {
|
|
19
|
-
const titleId = React.useId();
|
|
20
|
-
return /* @__PURE__ */ jsxs(
|
|
21
|
-
"section",
|
|
22
|
-
{
|
|
23
|
-
"data-slot": "agent-suggestion",
|
|
24
|
-
"aria-labelledby": title ? titleId : void 0,
|
|
25
|
-
className: cn(
|
|
26
|
-
"flex w-full max-w-[400px] flex-col gap-3 rounded-xl border border-border-subtle bg-bg-card p-3 text-text-default [box-shadow:0_1px_3px_0_var(--effect-shadow-sm),0_1px_2px_-1px_var(--effect-shadow-sm)]",
|
|
27
|
-
className
|
|
28
|
-
),
|
|
29
|
-
...props,
|
|
30
|
-
children: [
|
|
31
|
-
/* @__PURE__ */ jsxs("div", { className: "flex min-h-6 items-center gap-1.5", children: [
|
|
32
|
-
/* @__PURE__ */ jsx("div", { className: "flex min-w-0 flex-1", children: /* @__PURE__ */ jsxs(
|
|
33
|
-
Badge,
|
|
34
|
-
{
|
|
35
|
-
size: "lg",
|
|
36
|
-
tone: "neutral",
|
|
37
|
-
variant: "outline",
|
|
38
|
-
className: "max-w-full [&_img]:size-3.5 [&_img]:shrink-0",
|
|
39
|
-
children: [
|
|
40
|
-
icon,
|
|
41
|
-
/* @__PURE__ */ jsx("span", { className: "truncate", children: kind })
|
|
42
|
-
]
|
|
43
|
-
}
|
|
44
|
-
) }),
|
|
45
|
-
meta && /* @__PURE__ */ jsx("div", { className: "flex shrink-0 items-center", children: meta })
|
|
46
|
-
] }),
|
|
47
|
-
(title || description) && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
|
|
48
|
-
title && /* @__PURE__ */ jsx("div", { id: titleId, className: "text-base leading-[14px] font-medium tracking-normal text-text-default", children: title }),
|
|
49
|
-
description && /* @__PURE__ */ jsx("div", { className: "text-base text-text-muted", children: description })
|
|
50
|
-
] }),
|
|
51
|
-
children,
|
|
52
|
-
actions && /* @__PURE__ */ jsx("div", { className: "flex flex-wrap items-center justify-end gap-2 pt-1", children: actions })
|
|
53
|
-
]
|
|
54
|
-
}
|
|
55
|
-
);
|
|
56
|
-
}
|
|
57
|
-
function AgentSuggestionQuote({
|
|
58
|
-
from,
|
|
59
|
-
avatar,
|
|
60
|
-
children,
|
|
61
|
-
className
|
|
62
|
-
}) {
|
|
63
|
-
return /* @__PURE__ */ jsxs("blockquote", { "data-slot": "agent-suggestion-quote", className: cn("m-0 flex flex-col gap-1 rounded-lg bg-bg-muted px-3 py-2", className), children: [
|
|
64
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
|
|
65
|
-
avatar,
|
|
66
|
-
/* @__PURE__ */ jsx("span", { className: "text-xs leading-3 font-medium tracking-normal text-text-default", children: from })
|
|
67
|
-
] }),
|
|
68
|
-
/* @__PURE__ */ jsx("p", { className: "m-0 text-base text-text-muted", children })
|
|
69
|
-
] });
|
|
70
|
-
}
|
|
71
|
-
function AgentSuggestionMetric({
|
|
72
|
-
value,
|
|
73
|
-
unit,
|
|
74
|
-
used,
|
|
75
|
-
max,
|
|
76
|
-
className
|
|
77
|
-
}) {
|
|
78
|
-
return /* @__PURE__ */ jsxs("div", { "data-slot": "agent-suggestion-metric", className: cn("flex flex-col gap-2", className), children: [
|
|
79
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-baseline gap-2", children: [
|
|
80
|
-
/* @__PURE__ */ jsx("span", { className: "text-2xl leading-[1.5] font-medium tabular-nums", children: value }),
|
|
81
|
-
unit && /* @__PURE__ */ jsx("span", { className: "text-base text-text-muted", children: unit })
|
|
82
|
-
] }),
|
|
83
|
-
used != null && max != null && /* @__PURE__ */ jsx(
|
|
84
|
-
Progress,
|
|
85
|
-
{
|
|
86
|
-
value: used,
|
|
87
|
-
max,
|
|
88
|
-
showValue: false,
|
|
89
|
-
"aria-label": typeof unit === "string" ? unit : void 0,
|
|
90
|
-
className: "[&_[role=progressbar]]:h-1.5"
|
|
91
|
-
}
|
|
92
|
-
)
|
|
93
|
-
] });
|
|
94
|
-
}
|
|
95
|
-
function AgentSuggestionDiff({ before, after, className }) {
|
|
96
|
-
return /* @__PURE__ */ jsxs("div", { "data-slot": "agent-suggestion-diff", className: cn("flex flex-col gap-1 text-base", className), children: [
|
|
97
|
-
/* @__PURE__ */ jsxs("del", { className: "rounded-lg bg-bg-muted px-2 py-1.5 text-text-muted", children: [
|
|
98
|
-
/* @__PURE__ */ jsx("span", { className: "sr-only", children: "Remove: " }),
|
|
99
|
-
before
|
|
100
|
-
] }),
|
|
101
|
-
/* @__PURE__ */ jsxs("ins", { className: "rounded-lg bg-status-green-bg px-2 py-1.5 text-status-green-fg no-underline", children: [
|
|
102
|
-
/* @__PURE__ */ jsx("span", { className: "sr-only", children: "Add: " }),
|
|
103
|
-
after
|
|
104
|
-
] })
|
|
105
|
-
] });
|
|
106
|
-
}
|
|
107
|
-
function AgentSuggestionChanges({ changes, className }) {
|
|
108
|
-
return /* @__PURE__ */ jsx("dl", { "data-slot": "agent-suggestion-changes", className: cn("m-0 flex flex-col gap-2 text-base", className), children: changes.map((c, i) => /* @__PURE__ */ jsxs("div", { className: "flex min-h-[21px] items-center gap-2", children: [
|
|
109
|
-
/* @__PURE__ */ jsx("dt", { className: "w-[88px] shrink-0 text-text-muted", children: c.field }),
|
|
110
|
-
/* @__PURE__ */ jsxs("dd", { className: "m-0 flex min-w-0 items-center gap-2", children: [
|
|
111
|
-
c.from != null && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
112
|
-
/* @__PURE__ */ jsx("del", { className: "text-text-subtle", children: c.from }),
|
|
113
|
-
/* @__PURE__ */ jsx(ArrowRight, { "aria-hidden": true, className: "size-4 shrink-0 text-text-subtle [stroke-width:1.875]" })
|
|
114
|
-
] }),
|
|
115
|
-
typeof c.to === "string" ? /* @__PURE__ */ jsx("span", { className: "font-medium text-text-default", children: c.to }) : c.to
|
|
116
|
-
] })
|
|
117
|
-
] }, i)) });
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
export { AgentSuggestion, AgentSuggestionChanges, AgentSuggestionDiff, AgentSuggestionMetric, AgentSuggestionQuote };
|
|
121
|
-
//# sourceMappingURL=chunk-MR3JDI7E.js.map
|
|
122
|
-
//# sourceMappingURL=chunk-MR3JDI7E.js.map
|
package/chunk-MR3JDI7E.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/agent-suggestion.tsx"],"names":[],"mappings":"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","file":"chunk-MR3JDI7E.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { ArrowRight } from 'iconoir-react'\nimport { cn } from '../lib/utils'\nimport { Badge } from './badge'\nimport { Progress } from './progress'\n\n/**\n * AgentSuggestion, 1:1 with the uiKit `AgentSuggestion` set (🆕 agent suggestions, 4126:3903):\n * something the agent has prepared and the user only approves — an email, a reply, a meeting,\n * tasks, an insight, an edit or a CRM update.\n *\n * A bg/card card, border/subtle, radius-xl, shadow-sm, 12px in and 12px between its parts:\n *\n * - the kind row: what it is, as a neutral Large Outline Badge (white, border/default) with a 14px icon\n * or app logo (`kind`, `icon`), and on the right who or what it concerns (`meta`: avatars, a\n * small Badge with the source);\n * - `title` in Label/lg (14/14 medium) and `description` in Body/lg text/muted, 8px apart;\n * - `children`: whatever the suggestion needs (time slots, tasks, a diff, changed fields);\n * - `actions`, right-aligned 8px apart, 4px further down: a secondary or tertiary button and the\n * primary one that carries it out.\n *\n * The parts below cover the usual bodies: `AgentSuggestionQuote` (the message being answered),\n * `AgentSuggestionMetric` (a number against a limit), `AgentSuggestionDiff` (old text → new) and\n * `AgentSuggestionChanges` (fields from → to).\n */\nexport interface AgentSuggestionProps extends Omit<React.ComponentProps<'section'>, 'title'> {\n /** What kind of suggestion: \"Email suggestion\", \"Next steps\", \"CRM update\". */\n kind: React.ReactNode\n /** A 14px icon or app logo before the kind. */\n icon?: React.ReactNode\n /** Right of the kind: avatars of the people it concerns, or a small Badge with the source. */\n meta?: React.ReactNode\n title?: React.ReactNode\n description?: React.ReactNode\n /** Buttons, right-aligned: the alternative first, the primary action last. */\n actions?: React.ReactNode\n}\n\nexport function AgentSuggestion({\n kind,\n icon,\n meta,\n title,\n description,\n actions,\n children,\n className,\n ...props\n}: AgentSuggestionProps) {\n const titleId = React.useId()\n return (\n <section\n data-slot=\"agent-suggestion\"\n aria-labelledby={title ? titleId : undefined}\n className={cn(\n 'flex w-full max-w-[400px] flex-col gap-3 rounded-xl border border-border-subtle bg-bg-card p-3 text-text-default [box-shadow:0_1px_3px_0_var(--effect-shadow-sm),0_1px_2px_-1px_var(--effect-shadow-sm)]',\n className,\n )}\n {...props}\n >\n <div className=\"flex min-h-6 items-center gap-1.5\">\n <div className=\"flex min-w-0 flex-1\">\n <Badge\n size=\"lg\"\n tone=\"neutral\"\n variant=\"outline\"\n className=\"max-w-full [&_img]:size-3.5 [&_img]:shrink-0\"\n >\n {icon}\n <span className=\"truncate\">{kind}</span>\n </Badge>\n </div>\n {meta && <div className=\"flex shrink-0 items-center\">{meta}</div>}\n </div>\n\n {(title || description) && (\n <div className=\"flex flex-col gap-2\">\n {title && (\n <div id={titleId} className=\"text-base leading-[14px] font-medium tracking-normal text-text-default\">\n {title}\n </div>\n )}\n {description && <div className=\"text-base text-text-muted\">{description}</div>}\n </div>\n )}\n\n {children}\n\n {actions && <div className=\"flex flex-wrap items-center justify-end gap-2 pt-1\">{actions}</div>}\n </section>\n )\n}\n\n/** The message the suggestion answers: who sent it and what they wrote, on bg/muted. */\nexport function AgentSuggestionQuote({\n from,\n avatar,\n children,\n className,\n}: {\n /** The sender's name. */\n from: React.ReactNode\n /** A 20px Avatar. */\n avatar?: React.ReactNode\n children: React.ReactNode\n className?: string\n}) {\n return (\n <blockquote data-slot=\"agent-suggestion-quote\" className={cn('m-0 flex flex-col gap-1 rounded-lg bg-bg-muted px-3 py-2', className)}>\n <div className=\"flex items-center gap-1.5\">\n {avatar}\n <span className=\"text-xs leading-3 font-medium tracking-normal text-text-default\">{from}</span>\n </div>\n <p className=\"m-0 text-base text-text-muted\">{children}</p>\n </blockquote>\n )\n}\n\n/** A number against its limit: the value in Display/sm, its unit, and a 6px bar of how much is used. */\nexport function AgentSuggestionMetric({\n value,\n unit,\n used,\n max,\n className,\n}: {\n /** As shown: \"47 / 50\". */\n value: React.ReactNode\n unit?: React.ReactNode\n /** With `max`, draws the bar. */\n used?: number\n max?: number\n className?: string\n}) {\n return (\n <div data-slot=\"agent-suggestion-metric\" className={cn('flex flex-col gap-2', className)}>\n <div className=\"flex items-baseline gap-2\">\n <span className=\"text-2xl leading-[1.5] font-medium tabular-nums\">{value}</span>\n {unit && <span className=\"text-base text-text-muted\">{unit}</span>}\n </div>\n {used != null && max != null && (\n <Progress\n value={used}\n max={max}\n showValue={false}\n aria-label={typeof unit === 'string' ? unit : undefined}\n className=\"[&_[role=progressbar]]:h-1.5\"\n />\n )}\n </div>\n )\n}\n\n/** Old text struck through on bg/muted, the new text in status/green below it. */\nexport function AgentSuggestionDiff({ before, after, className }: { before: React.ReactNode; after: React.ReactNode; className?: string }) {\n return (\n <div data-slot=\"agent-suggestion-diff\" className={cn('flex flex-col gap-1 text-base', className)}>\n <del className=\"rounded-lg bg-bg-muted px-2 py-1.5 text-text-muted\">\n <span className=\"sr-only\">Remove: </span>\n {before}\n </del>\n <ins className=\"rounded-lg bg-status-green-bg px-2 py-1.5 text-status-green-fg no-underline\">\n <span className=\"sr-only\">Add: </span>\n {after}\n </ins>\n </div>\n )\n}\n\nexport interface AgentSuggestionChange {\n field: React.ReactNode\n from?: React.ReactNode\n /** A string reads as Body/md Strong; pass a Badge for a stage or status. */\n to: React.ReactNode\n}\n\n/** Fields the agent will change: name, the old value struck through, an arrow and the new one. */\nexport function AgentSuggestionChanges({ changes, className }: { changes: AgentSuggestionChange[]; className?: string }) {\n return (\n <dl data-slot=\"agent-suggestion-changes\" className={cn('m-0 flex flex-col gap-2 text-base', className)}>\n {changes.map((c, i) => (\n <div key={i} className=\"flex min-h-[21px] items-center gap-2\">\n <dt className=\"w-[88px] shrink-0 text-text-muted\">{c.field}</dt>\n <dd className=\"m-0 flex min-w-0 items-center gap-2\">\n {c.from != null && (\n <>\n <del className=\"text-text-subtle\">{c.from}</del>\n <ArrowRight aria-hidden className=\"size-4 shrink-0 text-text-subtle [stroke-width:1.875]\" />\n </>\n )}\n {typeof c.to === 'string' ? <span className=\"font-medium text-text-default\">{c.to}</span> : c.to}\n </dd>\n </div>\n ))}\n </dl>\n )\n}\n"]}
|
package/chunk-MYEZXZZC.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/avatar.tsx"],"names":[],"mappings":"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","file":"chunk-MYEZXZZC.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { createPortal } from 'react-dom'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../lib/utils'\nimport { Tooltip, TooltipBubble } from './tooltip'\n\nexport type AvatarTone = 'neutral' | 'brand' | 'sky' | 'green' | 'amber' | 'red' | 'fuchsia' | 'plum'\nexport type AvatarSize = 16 | 20 | 24 | 32 | 40 | 48\n\n/**\n * Avatar, 1:1 with the uiKit `Avatar` set (992:20199): initials on a tone fill, the same eight\n * hue pairs as Badge (`tone/bg` fill, `tone/fg` text, no border), six px sizes and a Circle or\n * Rounded shape. Rounded steps the radius with the size: 4 / 4 / 6 / 8 / 10 / 12.\n *\n * Type per size, from Figma: 16 → SemiBold 7/8, 20 → SemiBold 9/10 (no kit token for either),\n * 24 → text/2xs SemiBold, 32 → Label/sm 13/16, 40 → Label/lg 14/14, 48 → text/lg Medium.\n * Groups (docs example 3889:7365) overlap with -8px and stack the first on top.\n *\n * With `name` the avatar says who it is: it becomes an image named after the person, takes\n * keyboard focus, and shows the name in a Tooltip. On hover the tooltip waits 400 ms — the middle\n * of the 0.3–0.5 s NN/g recommends, so a pointer passing over a row of faces doesn't flash names —\n * and stays 150 ms after the pointer leaves. Keyboard focus shows it at once.\n *\n * Avatars side by side go in an `AvatarGroup`: the row shares one tooltip. The first name waits\n * the same 400 ms; after that, moving to the next person slides the tooltip over to them and\n * eases its width to the new name, instead of closing one tooltip and opening another.\n */\nconst avatarVariants = cva(\n 'inline-flex shrink-0 items-center justify-center overflow-clip bg-tone-bg text-center whitespace-nowrap text-tone-fg select-none',\n {\n variants: {\n size: {\n 16: 'size-4 text-[7px] leading-[8px] font-semibold tracking-normal',\n 20: 'size-5 text-[9px] leading-[10px] font-semibold tracking-normal',\n 24: 'size-6 text-2xs font-semibold',\n 32: 'size-8 text-sm leading-4 font-medium tracking-normal',\n 40: 'size-10 text-base leading-[14px] font-medium tracking-normal',\n 48: 'size-12 text-lg font-medium',\n },\n shape: {\n circle: 'rounded-full',\n rounded: '',\n },\n },\n compoundVariants: [\n { shape: 'rounded', size: 16, className: 'rounded-xs' },\n { shape: 'rounded', size: 20, className: 'rounded-xs' },\n { shape: 'rounded', size: 24, className: 'rounded-sm' },\n { shape: 'rounded', size: 32, className: 'rounded-md' },\n { shape: 'rounded', size: 40, className: 'rounded-lg' },\n { shape: 'rounded', size: 48, className: 'rounded-xl' },\n ],\n defaultVariants: { size: 32, shape: 'circle' },\n },\n)\n\nexport interface AvatarProps\n extends Omit<React.ComponentProps<'span'>, 'children'>,\n Omit<VariantProps<typeof avatarVariants>, 'size'> {\n /** One or two letters, or a count like \"+3\" at the end of a group. */\n initials: string\n tone?: AvatarTone\n size?: AvatarSize\n /** The person's name: shown in a tooltip on hover and focus, and read by screen readers. */\n name?: string\n}\n\n/** NN/g: wait 0.3–0.5 s before showing hidden content on hover; we take the middle. */\nexport const AVATAR_TOOLTIP_DELAY = 400\nconst AVATAR_TOOLTIP_CLOSE = 150\n\ntype AvatarGroupApi = { show: (el: HTMLElement, name: string, now?: boolean) => void; hide: (now?: boolean) => void }\nconst AvatarGroupContext = React.createContext<AvatarGroupApi | null>(null)\n\nexport function Avatar({ className, initials, tone = 'neutral', size = 32, shape, name, ...props }: AvatarProps) {\n const group = React.useContext(AvatarGroupContext)\n const grouped = group && name ? group : null\n const avatar = (\n <span\n data-slot=\"avatar\"\n data-tone={tone}\n {...(name ? { role: 'img', 'aria-label': name, tabIndex: 0 } : {})}\n className={cn(\n avatarVariants({ size, shape }),\n name && 'outline-none focus-visible:[box-shadow:0_0_0_2px_var(--action-focus-ring)]',\n className,\n )}\n {...props}\n {...(grouped && {\n onPointerEnter: (e: React.PointerEvent<HTMLSpanElement>) => (props.onPointerEnter?.(e), grouped.show(e.currentTarget, name!)),\n onPointerLeave: (e: React.PointerEvent<HTMLSpanElement>) => (props.onPointerLeave?.(e), grouped.hide()),\n onFocus: (e: React.FocusEvent<HTMLSpanElement>) => (props.onFocus?.(e), grouped.show(e.currentTarget, name!, true)),\n onBlur: (e: React.FocusEvent<HTMLSpanElement>) => (props.onBlur?.(e), grouped.hide(true)),\n onKeyDown: (e: React.KeyboardEvent<HTMLSpanElement>) => (props.onKeyDown?.(e), e.key === 'Escape' && grouped.hide(true)),\n })}\n >\n <span aria-hidden={name ? true : undefined}>{initials}</span>\n </span>\n )\n if (!name || grouped) return avatar\n return (\n <Tooltip label={name} delay={AVATAR_TOOLTIP_DELAY} closeDelay={AVATAR_TOOLTIP_CLOSE}>\n {avatar}\n </Tooltip>\n )\n}\n\nexport interface AvatarGroupProps extends React.ComponentProps<'div'> {\n /** Where the shared name tooltip sits. */\n side?: 'top' | 'bottom'\n}\n\n/** Space the tooltip keeps from the avatar and from the viewport edge, as Tooltip does. */\nconst GAP = 8\n/** The bubble's side padding (10 + 10), added to the measured name for its width. */\nconst BUBBLE_PADDING = 20\n\n/**\n * A row of avatars sharing one name tooltip. It opens after AVATAR_TOOLTIP_DELAY on the first\n * person; while it's open, the next person gets it at once: it slides along the row (transform,\n * 200 ms, ease-out) and its width eases to the new name, which fades in. It closes\n * AVATAR_TOOLTIP_CLOSE after the pointer leaves the row, so the gaps between faces don't\n * close it. Focus shows it at once, Escape and blur hide it.\n */\nexport function AvatarGroup({ className, side = 'top', children, ...props }: AvatarGroupProps) {\n const [target, setTarget] = React.useState<{ el: HTMLElement; name: string } | null>(null)\n const [open, setOpen] = React.useState(false)\n const shown = React.useRef(false)\n const openTimer = React.useRef<ReturnType<typeof setTimeout>>(undefined)\n const closeTimer = React.useRef<ReturnType<typeof setTimeout>>(undefined)\n\n const api = React.useMemo<AvatarGroupApi>(() => {\n const set = (next: boolean) => {\n shown.current = next\n setOpen(next)\n }\n return {\n show(el, name, now) {\n clearTimeout(closeTimer.current)\n clearTimeout(openTimer.current)\n setTarget({ el, name })\n if (shown.current || now) set(true)\n else openTimer.current = setTimeout(() => set(true), AVATAR_TOOLTIP_DELAY)\n },\n hide(now) {\n clearTimeout(openTimer.current)\n clearTimeout(closeTimer.current)\n if (now) set(false)\n else closeTimer.current = setTimeout(() => set(false), AVATAR_TOOLTIP_CLOSE)\n },\n }\n }, [])\n React.useEffect(\n () => () => {\n clearTimeout(openTimer.current)\n clearTimeout(closeTimer.current)\n },\n [],\n )\n\n return (\n <AvatarGroupContext.Provider value={api}>\n <div data-slot=\"avatar-group\" role=\"group\" className={cn('flex items-center gap-2', className)} {...props}>\n {children}\n </div>\n {open && target && <GroupTooltip anchor={target.el} name={target.name} side={side} />}\n </AvatarGroupContext.Provider>\n )\n}\n\nfunction GroupTooltip({ anchor, name, side }: { anchor: HTMLElement; name: string; side: 'top' | 'bottom' }) {\n const label = React.useRef<HTMLSpanElement>(null)\n const [width, setWidth] = React.useState<number>()\n const [point, setPoint] = React.useState<{ x: number; y: number }>()\n\n React.useLayoutEffect(() => {\n if (label.current) setWidth(label.current.offsetWidth + BUBBLE_PADDING)\n }, [name])\n\n React.useLayoutEffect(() => {\n const place = () => {\n const r = anchor.getBoundingClientRect()\n const half = (width ?? 0) / 2\n const x = Math.min(Math.max(r.left + r.width / 2, half + GAP), window.innerWidth - half - GAP)\n setPoint({ x, y: side === 'top' ? r.top - GAP : r.bottom + GAP })\n }\n place()\n addEventListener('scroll', place, true)\n addEventListener('resize', place)\n return () => {\n removeEventListener('scroll', place, true)\n removeEventListener('resize', place)\n }\n }, [anchor, side, width])\n\n if (!point) return null\n return createPortal(\n // A point at the avatar's edge, moved with transform so a change of person slides; the\n // bubble hangs off it, centred, so a width change grows evenly on both sides.\n <div\n aria-hidden\n data-side={side}\n className=\"pointer-events-none fixed top-0 left-0 z-50 transition-transform duration-(--duration-base) ease-(--ease-out) motion-reduce:transition-none\"\n style={{ transform: `translate(${point.x}px, ${point.y}px)` }}\n >\n <div\n className={cn(\n '-translate-x-1/2 transition-[opacity,translate] duration-(--duration-fast) ease-(--ease-out) starting:opacity-0',\n side === 'top' ? '-translate-y-full starting:-translate-y-[calc(100%-4px)]' : 'starting:translate-y-[-4px]',\n )}\n >\n <TooltipBubble\n className=\"overflow-hidden transition-[width] duration-(--duration-base) ease-(--ease-out) motion-reduce:transition-none\"\n style={{ width }}\n label={\n <span key={name} ref={label} className=\"inline-block shrink-0 transition-opacity duration-(--duration-fast) ease-(--ease-out) starting:opacity-0\">\n {name}\n </span>\n }\n />\n </div>\n </div>,\n document.body,\n )\n}\n\nexport { avatarVariants }\n"]}
|
package/chunk-NN6PKJWS.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/cookie-consent.tsx"],"names":[],"mappings":";;;;;AA+BO,SAAS,aAAA,CAAc;AAAA,EAC5B,QAAA,GAAW,iIAAA;AAAA,EACX,QAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA,GAAc,YAAA;AAAA,EACd,WAAA,GAAc,YAAA;AAAA,EACd,cAAA,GAAiB,WAAA;AAAA,EACjB,QAAA,GAAW,KAAA;AAAA,EACX,SAAA;AAAA,EACA,cAAc,SAAA,GAAY,gBAAA;AAAA,EAC1B,GAAG;AACL,CAAA,EAAuB;AACrB,EAAA,uBACE,IAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,gBAAA;AAAA,MACV,YAAA,EAAY,SAAA;AAAA,MACZ,SAAA,EAAW,EAAA;AAAA,QACT,8NAAA;AAAA,QACA,QAAA,IAAY,gEAAA;AAAA,QACZ;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,mEAAA,EAAqE,QAAA,EAAS,CAAA;AAAA,wBAC3F,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0CAAA,EACZ,QAAA,EAAA;AAAA,UAAA,WAAA,oBACC,GAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,UAAA,EAAW,IAAA,EAAK,IAAA,EAAK,KAAA,EAAM,SAAA,EAAU,SAAA,EAAU,iBAAA,EAAkB,OAAA,EAAS,WAAA,EACvF,QAAA,EAAA,cAAA,EACH,CAAA;AAAA,0BAEF,GAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAK,KAAA,EAAM,SAAA,EAAU,OAAA,EAAS,QAAA,EAC5D,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,0BACA,GAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,SAAA,EAAU,IAAA,EAAK,MAAK,KAAA,EAAM,SAAA,EAAU,OAAA,EAAS,QAAA,EAC1D,QAAA,EAAA,WAAA,EACH;AAAA,SAAA,EACF;AAAA;AAAA;AAAA,GACF;AAEJ","file":"chunk-NN6PKJWS.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../lib/utils'\nimport { Button } from './button'\n\n/**\n * CookieConsent: what the site stores and the three answers, in one floating card at the\n * bottom of the page. bg/popover, border/subtle, radius-3xl, the shadcn lg shadow; 20 × 16 in.\n *\n * The message (Body/lg, text/muted) is kept to a narrow column so it reads in three short\n * lines; the actions sit to its right: Customize as a tertiary button in text/muted, then\n * Reject all as a rounded secondary button and Accept all as the rounded primary one. Below 640px the actions wrap under the message.\n *\n * `floating` pins it 16px above the bottom of the viewport, centred; leave it off to place the\n * card yourself. It is a labelled region, not a modal: the page stays usable behind it.\n */\nexport interface CookieConsentProps extends Omit<React.ComponentProps<'section'>, 'children'> {\n /** What the site stores and why. */\n children?: React.ReactNode\n onAccept?: () => void\n onReject?: () => void\n /** Shows Customize; open your settings from here. */\n onCustomize?: () => void\n acceptLabel?: string\n rejectLabel?: string\n customizeLabel?: string\n /** Fixed to the bottom of the viewport, centred, 16px up. */\n floating?: boolean\n}\n\nexport function CookieConsent({\n children = \"We use essential cookies to run this site. With your OK, we'd also use optional ones to remember settings and learn what helps.\",\n onAccept,\n onReject,\n onCustomize,\n acceptLabel = 'Accept all',\n rejectLabel = 'Reject all',\n customizeLabel = 'Customize',\n floating = false,\n className,\n 'aria-label': ariaLabel = 'Cookie consent',\n ...props\n}: CookieConsentProps) {\n return (\n <section\n data-slot=\"cookie-consent\"\n aria-label={ariaLabel}\n className={cn(\n 'flex w-fit max-w-full flex-wrap items-center gap-x-5 gap-y-3 rounded-3xl border border-border-subtle bg-bg-popover px-5 py-4 [box-shadow:0_1px_3px_0_var(--effect-shadow-ambient),0_16px_40px_-12px_var(--effect-shadow-lg)]',\n floating && 'fixed inset-x-4 bottom-4 z-50 mx-auto max-w-[calc(100vw-32px)]',\n className,\n )}\n {...props}\n >\n <p className=\"m-0 w-[280px] max-w-full min-w-0 shrink text-base text-text-muted\">{children}</p>\n <div className=\"ml-auto flex shrink-0 items-center gap-2\">\n {onCustomize && (\n <Button variant=\"tertiary\" size=\"lg\" shape=\"rounded\" className=\"text-text-muted\" onClick={onCustomize}>\n {customizeLabel}\n </Button>\n )}\n <Button variant=\"secondary\" size=\"lg\" shape=\"rounded\" onClick={onReject}>\n {rejectLabel}\n </Button>\n <Button variant=\"primary\" size=\"lg\" shape=\"rounded\" onClick={onAccept}>\n {acceptLabel}\n </Button>\n </div>\n </section>\n )\n}\n"]}
|
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"]}
|