@uisatin/ui 0.1.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +33 -0
- package/README.md +20 -3
- package/chunk-3DHJXU45.js +147 -0
- package/{chunk-6YXUBP27.js → chunk-5725MFGQ.js} +72 -67
- package/{chunk-BKZBWPUH.js → chunk-57QEOCDZ.js} +9 -11
- package/{chunk-RTJ76X5U.js → chunk-5KTBSMQU.js} +2 -4
- package/{chunk-B2K45IUR.js → chunk-5XTUFBZI.js} +5 -7
- package/{chunk-LW3TRU5W.js → chunk-674SRBZK.js} +28 -16
- package/{chunk-XZNHT6MO.js → chunk-6VKV36OK.js} +115 -61
- package/{chunk-GICKPMJU.js → chunk-73Z7NMQQ.js} +31 -31
- package/chunk-7Q76HLRQ.js +128 -0
- package/{chunk-JPNWHWAQ.js → chunk-AIMQNLPY.js} +38 -35
- package/chunk-BN7FDKCJ.js +164 -0
- package/{chunk-3DINAQLL.js → chunk-BR2B4OIT.js} +33 -29
- package/{chunk-2HKBZFIK.js → chunk-CGOH5IYX.js} +31 -31
- package/chunk-CVNRZ2YV.js +112 -0
- package/{chunk-QUF2IPOZ.js → chunk-DPYIBFQD.js} +12 -14
- package/chunk-EF5GT4OG.js +87 -0
- package/chunk-FAJ3OVL4.js +37 -0
- package/{chunk-L6NCCSIP.js → chunk-FB5HTCO2.js} +36 -29
- package/chunk-GI2SMFZL.js +55 -0
- package/{chunk-B6V4VSGH.js → chunk-GMETYACH.js} +14 -15
- package/chunk-HK6WINL6.js +95 -0
- package/{chunk-HL42K2NH.js → chunk-IKO3GQFE.js} +17 -17
- package/{chunk-DO3TBNSC.js → chunk-ISYKZCPJ.js} +15 -17
- package/{chunk-YG7JOOLJ.js → chunk-J7RMFN54.js} +5 -7
- package/{chunk-SHDFUXYV.js → chunk-JBKBRAC4.js} +16 -18
- package/{chunk-LZMKSFCF.js → chunk-JCXI7VQL.js} +10 -12
- package/{chunk-NN6PKJWS.js → chunk-JYOZUQNU.js} +7 -9
- package/{chunk-LLHTVIM3.js → chunk-LB37KTJH.js} +7 -9
- package/{chunk-NSRTTYQ4.js → chunk-LB7Z6BSK.js} +42 -35
- package/{chunk-BNZVTLHV.js → chunk-LFGUJHFF.js} +25 -21
- package/{chunk-7TXHCRAG.js → chunk-M2HEVFQ3.js} +8 -10
- package/{chunk-SH6NG6VN.js → chunk-NH3EHMIL.js} +6 -8
- package/chunk-NL574STL.js +88 -0
- package/chunk-NQL6SIIB.js +168 -0
- package/chunk-O46O6LFQ.js +25 -0
- package/{chunk-YPNKBE5X.js → chunk-OURZQM27.js} +5 -7
- package/{chunk-XL75JRUA.js → chunk-OVKPPXK5.js} +42 -22
- package/chunk-PD6YPFYN.js +42 -0
- package/{chunk-XILQ7GXE.js → chunk-PHNR6ZQ7.js} +11 -13
- package/{chunk-BNTPPZCK.js → chunk-PUWSL5XW.js} +37 -39
- package/{chunk-A5XEM3GF.js → chunk-RHQHDYTE.js} +34 -36
- package/chunk-S7QHBVPX.js +45 -0
- package/{chunk-TX3H3QMA.js → chunk-SAYNV7B3.js} +71 -70
- package/{chunk-6QMSWITQ.js → chunk-SDOTDMYG.js} +24 -26
- package/{chunk-UGRSWP6U.js → chunk-SPGUZMCC.js} +10 -12
- package/chunk-SSOFFQ5T.js +74 -0
- package/{chunk-AN2RNJLR.js → chunk-SZJIVBOD.js} +16 -16
- package/chunk-T6L32XXH.js +107 -0
- package/{chunk-QS4N4MNP.js → chunk-TT2N5752.js} +18 -20
- package/{chunk-72OCFAPT.js → chunk-UCCNXGLG.js} +22 -21
- package/{chunk-KNUWZNFV.js → chunk-UGIVCXGN.js} +4 -6
- package/{chunk-H4NU7NPO.js → chunk-UUCVRIVP.js} +62 -61
- package/{chunk-P4O6TGDR.js → chunk-UZ4DXU6W.js} +28 -26
- package/{chunk-UBNHSZSE.js → chunk-VUOAPWTF.js} +10 -12
- package/{chunk-VAGIAREV.js → chunk-W472DBMT.js} +29 -26
- package/{chunk-X3PQANZO.js → chunk-W4RDTP6W.js} +47 -46
- package/{chunk-CL2II6BX.js → chunk-WLQD5BN2.js} +11 -13
- package/{chunk-FDKIX4DC.js → chunk-X2GNMNZQ.js} +7 -9
- package/{chunk-PF3YBUKT.js → chunk-X66KTATQ.js} +16 -15
- package/{chunk-J3NSDRVH.js → chunk-XETMIETJ.js} +0 -2
- package/chunk-XH56JGYC.js +71 -0
- package/{chunk-O7F3CIDV.js → chunk-XUOSJMEJ.js} +10 -12
- package/chunk-YJK4MGSI.js +86 -0
- package/{chunk-YX5VNRJX.js → chunk-YYFAZQ25.js} +0 -2
- package/chunk-Z7S2KQZS.js +177 -0
- package/chunk-ZBZ3ZQRB.js +195 -0
- package/{chunk-Y5AYU7PK.js → chunk-ZHFIWDGF.js} +0 -2
- package/components/accordion.js +2 -4
- package/components/agent-loading.d.ts +2 -0
- package/components/agent-loading.js +2 -4
- package/components/agent-picker.js +4 -5
- package/components/agent-suggestion.js +5 -6
- package/components/announcement-bar.js +6 -7
- package/components/attachment.js +4 -5
- package/components/avatar.d.ts +16 -0
- package/components/avatar.js +4 -6
- package/components/badge.js +2 -4
- package/components/banner-mesh.js +1 -3
- package/components/banner.js +4 -6
- package/components/bar-chart.js +10 -11
- package/components/breadcrumb.js +5 -6
- package/components/button.js +2 -4
- package/components/card.js +3 -5
- package/components/channel-chart.js +10 -11
- package/components/chart.js +9 -10
- package/components/checkbox.js +2 -4
- package/components/chip.js +2 -4
- package/components/citations.d.ts +6 -4
- package/components/citations.js +4 -5
- package/components/code-block.js +3 -5
- package/components/combobox.d.ts +12 -3
- package/components/combobox.js +9 -10
- package/components/command-menu.d.ts +6 -2
- package/components/command-menu.js +5 -6
- package/components/context-menu.d.ts +12 -5
- package/components/context-menu.js +5 -6
- package/components/cookie-consent.js +3 -5
- package/components/date-picker.d.ts +26 -14
- package/components/date-picker.js +8 -9
- package/components/decision-card.js +6 -7
- package/components/dialog.d.ts +5 -2
- package/components/dialog.js +4 -5
- package/components/donut-chart.js +10 -11
- package/components/dot.js +2 -4
- package/components/dropdown.d.ts +6 -1
- package/components/dropdown.js +4 -5
- package/components/empty-state.js +2 -4
- package/components/file-upload.js +6 -7
- package/components/floating.js +1 -3
- package/components/form-field.js +2 -4
- package/components/hover-card.d.ts +5 -2
- package/components/hover-card.js +2 -4
- package/components/input-otp.d.ts +4 -2
- package/components/input-otp.js +7 -8
- package/components/input.js +3 -5
- package/components/kbd.js +2 -4
- package/components/labels.d.ts +79 -0
- package/components/labels.js +1 -0
- package/components/line-chart.js +11 -12
- package/components/message-actions.js +4 -5
- package/components/message.js +7 -8
- package/components/number-input.d.ts +4 -2
- package/components/number-input.js +7 -8
- package/components/pagination.js +4 -6
- package/components/popover.d.ts +11 -5
- package/components/popover.js +3 -4
- package/components/progress.js +2 -4
- package/components/prompt-bar.js +5 -6
- package/components/radio.js +2 -4
- package/components/search-bar.js +3 -5
- package/components/segmented-control.d.ts +4 -2
- package/components/segmented-control.js +3 -5
- package/components/select.d.ts +10 -2
- package/components/select.js +6 -7
- package/components/sheet.d.ts +4 -2
- package/components/sheet.js +5 -6
- package/components/sidebar.js +2 -4
- package/components/skeleton.js +2 -4
- package/components/slider.d.ts +6 -2
- package/components/slider.js +7 -8
- package/components/sliding-indicator.js +1 -3
- package/components/streaming-text.js +2 -4
- package/components/switch.js +2 -4
- package/components/table.d.ts +16 -5
- package/components/table.js +4 -5
- package/components/tabs.d.ts +4 -2
- package/components/tabs.js +3 -5
- package/components/textarea.js +3 -5
- package/components/thinking.js +3 -5
- package/components/toast.js +4 -5
- package/components/toggle.js +2 -4
- package/components/tooltip.d.ts +5 -2
- package/components/tooltip.js +3 -5
- package/index.d.ts +1 -0
- package/index.js +67 -231
- package/lib/utils.d.ts +8 -1
- package/lib/utils.js +1 -3
- package/package.json +22 -1
- package/styles.css +1 -1
- package/theme/create-theme.d.ts +6 -2
- package/theme/index.js +1 -0
- package/chunk-2HKBZFIK.js.map +0 -1
- package/chunk-3DINAQLL.js.map +0 -1
- package/chunk-3ERGAHKA.js +0 -179
- package/chunk-3ERGAHKA.js.map +0 -1
- package/chunk-6C7CGJX2.js +0 -86
- package/chunk-6C7CGJX2.js.map +0 -1
- package/chunk-6QMSWITQ.js.map +0 -1
- package/chunk-6YXUBP27.js.map +0 -1
- package/chunk-72OCFAPT.js.map +0 -1
- package/chunk-7TXHCRAG.js.map +0 -1
- package/chunk-A5XEM3GF.js.map +0 -1
- package/chunk-AN2RNJLR.js.map +0 -1
- package/chunk-B2K45IUR.js.map +0 -1
- package/chunk-B6V4VSGH.js.map +0 -1
- package/chunk-BKZBWPUH.js.map +0 -1
- package/chunk-BNTPPZCK.js.map +0 -1
- package/chunk-BNZVTLHV.js.map +0 -1
- package/chunk-CL2II6BX.js.map +0 -1
- package/chunk-D7RZNTFC.js +0 -95
- package/chunk-D7RZNTFC.js.map +0 -1
- package/chunk-DETGJAIC.js +0 -147
- package/chunk-DETGJAIC.js.map +0 -1
- package/chunk-DO3TBNSC.js.map +0 -1
- package/chunk-ESC5JCVQ.js +0 -90
- package/chunk-ESC5JCVQ.js.map +0 -1
- package/chunk-FDKIX4DC.js.map +0 -1
- package/chunk-GICKPMJU.js.map +0 -1
- package/chunk-GQA24FYG.js +0 -57
- package/chunk-GQA24FYG.js.map +0 -1
- package/chunk-H4NU7NPO.js.map +0 -1
- package/chunk-H63FYCMY.js +0 -11
- package/chunk-H63FYCMY.js.map +0 -1
- package/chunk-HL42K2NH.js.map +0 -1
- package/chunk-HNQUX43Z.js +0 -109
- package/chunk-HNQUX43Z.js.map +0 -1
- package/chunk-HRKPV66B.js +0 -32
- package/chunk-HRKPV66B.js.map +0 -1
- package/chunk-J3NSDRVH.js.map +0 -1
- package/chunk-JPNWHWAQ.js.map +0 -1
- package/chunk-KNUWZNFV.js.map +0 -1
- package/chunk-L6NCCSIP.js.map +0 -1
- package/chunk-LLHTVIM3.js.map +0 -1
- package/chunk-LW3TRU5W.js.map +0 -1
- package/chunk-LZMKSFCF.js.map +0 -1
- package/chunk-MR3JDI7E.js +0 -122
- package/chunk-MR3JDI7E.js.map +0 -1
- package/chunk-NN6PKJWS.js.map +0 -1
- package/chunk-NSRTTYQ4.js.map +0 -1
- package/chunk-O7F3CIDV.js.map +0 -1
- package/chunk-P4O6TGDR.js.map +0 -1
- package/chunk-PF3YBUKT.js.map +0 -1
- package/chunk-PVOLDO4G.js +0 -47
- package/chunk-PVOLDO4G.js.map +0 -1
- package/chunk-QS4N4MNP.js.map +0 -1
- package/chunk-QUF2IPOZ.js.map +0 -1
- package/chunk-RTJ76X5U.js.map +0 -1
- package/chunk-SH6NG6VN.js.map +0 -1
- package/chunk-SHDFUXYV.js.map +0 -1
- package/chunk-TKO44NDI.js +0 -84
- package/chunk-TKO44NDI.js.map +0 -1
- package/chunk-TVLGZGYN.js +0 -59
- package/chunk-TVLGZGYN.js.map +0 -1
- package/chunk-TX3H3QMA.js.map +0 -1
- package/chunk-UBNHSZSE.js.map +0 -1
- package/chunk-UC3ZJWOD.js +0 -73
- package/chunk-UC3ZJWOD.js.map +0 -1
- package/chunk-UGRSWP6U.js.map +0 -1
- package/chunk-VAGIAREV.js.map +0 -1
- package/chunk-WTMZT3IT.js +0 -105
- package/chunk-WTMZT3IT.js.map +0 -1
- package/chunk-WX6BP5ZP.js +0 -39
- package/chunk-WX6BP5ZP.js.map +0 -1
- package/chunk-X3PQANZO.js.map +0 -1
- package/chunk-XILQ7GXE.js.map +0 -1
- package/chunk-XL75JRUA.js.map +0 -1
- package/chunk-XZNHT6MO.js.map +0 -1
- package/chunk-Y5AYU7PK.js.map +0 -1
- package/chunk-YG7JOOLJ.js.map +0 -1
- package/chunk-YPJYW624.js +0 -195
- package/chunk-YPJYW624.js.map +0 -1
- package/chunk-YPNKBE5X.js.map +0 -1
- package/chunk-YX5VNRJX.js.map +0 -1
- package/components/accordion.js.map +0 -1
- package/components/agent-loading.js.map +0 -1
- package/components/agent-picker.js.map +0 -1
- package/components/agent-suggestion.js.map +0 -1
- package/components/announcement-bar.js.map +0 -1
- package/components/attachment.js.map +0 -1
- package/components/avatar.js.map +0 -1
- package/components/badge.js.map +0 -1
- package/components/banner-mesh.js.map +0 -1
- package/components/banner.js.map +0 -1
- package/components/bar-chart.js.map +0 -1
- package/components/breadcrumb.js.map +0 -1
- package/components/button.js.map +0 -1
- package/components/card.js.map +0 -1
- package/components/channel-chart.js.map +0 -1
- package/components/chart.js.map +0 -1
- package/components/checkbox.js.map +0 -1
- package/components/chip.js.map +0 -1
- package/components/citations.js.map +0 -1
- package/components/code-block.js.map +0 -1
- package/components/combobox.js.map +0 -1
- package/components/command-menu.js.map +0 -1
- package/components/context-menu.js.map +0 -1
- package/components/cookie-consent.js.map +0 -1
- package/components/date-picker.js.map +0 -1
- package/components/decision-card.js.map +0 -1
- package/components/dialog.js.map +0 -1
- package/components/donut-chart.js.map +0 -1
- package/components/dot.js.map +0 -1
- package/components/dropdown.js.map +0 -1
- package/components/empty-state.js.map +0 -1
- package/components/file-upload.js.map +0 -1
- package/components/floating.js.map +0 -1
- package/components/form-field.js.map +0 -1
- package/components/hover-card.js.map +0 -1
- package/components/input-otp.js.map +0 -1
- package/components/input.js.map +0 -1
- package/components/kbd.js.map +0 -1
- package/components/line-chart.js.map +0 -1
- package/components/message-actions.js.map +0 -1
- package/components/message.js.map +0 -1
- package/components/number-input.js.map +0 -1
- package/components/pagination.js.map +0 -1
- package/components/popover.js.map +0 -1
- package/components/progress.js.map +0 -1
- package/components/prompt-bar.js.map +0 -1
- package/components/radio.js.map +0 -1
- package/components/search-bar.js.map +0 -1
- package/components/segmented-control.js.map +0 -1
- package/components/select.js.map +0 -1
- package/components/sheet.js.map +0 -1
- package/components/sidebar.js.map +0 -1
- package/components/skeleton.js.map +0 -1
- package/components/slider.js.map +0 -1
- package/components/sliding-indicator.js.map +0 -1
- package/components/streaming-text.js.map +0 -1
- package/components/switch.js.map +0 -1
- package/components/table.js.map +0 -1
- package/components/tabs.js.map +0 -1
- package/components/textarea.js.map +0 -1
- package/components/thinking.js.map +0 -1
- package/components/toast.js.map +0 -1
- package/components/toggle.js.map +0 -1
- package/components/tooltip.js.map +0 -1
- package/index.js.map +0 -1
- package/lib/utils.js.map +0 -1
package/chunk-QS4N4MNP.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/pagination.tsx"],"names":["className","dir"],"mappings":"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","file":"chunk-QS4N4MNP.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { NavArrowLeft, NavArrowRight } from 'iconoir-react'\nimport { cn } from '../lib/utils'\nimport { Button } from './button'\nimport { SLIDE_MS, useSlidingIndicator } from './sliding-indicator'\n\n/**\n * Pagination, 1:1 with the uiKit `Pagination` set (4025:3807), two layouts:\n * - full: Previous and Next (tertiary md buttons with their arrows) around the page numbers,\n * 4px apart: the first and last page, the current one with `siblings` on each side, and an\n * ellipsis where pages are skipped. Pages are 28px squares, radius 10, 13px text/muted;\n * hover bg/hover and text/default; the current page bg/selected, text/default, medium.\n * - compact: icon-only Previous and Next around \"Page 5 of 12\" (13px, text/muted), 8px apart.\n *\n * Moving between pages (`motion`), the pages keep their places and only their numbers change:\n * - scroll (default): the pages are a strip. Each page slides from where it was to its new place,\n * a page coming into view slides out from under the ellipsis on the side the reader pages\n * towards, one leaving slides under the other and fades, and the pill under the current\n * page moves on the same 300 ms curve (sliding-indicator.tsx, shared with Tabs and the\n * Segmented control). Nothing is clipped and no number changes in place.\n * - slide: the current page's bg/selected pill slides under the numbers to the new\n * page, like the Segmented control's, 200 ms on ease-out; a number that changes in place\n * fades out before the new one fades in.\n * - none: no motion; the current page simply takes the pill.\n *\n * Previous and Next are disabled at the ends. With `getHref`, every page is a link (for pages\n * the server renders); without it they are buttons that call `onPageChange`.\n *\n * A `nav` named \"Pagination\"; the current page has aria-current=\"page\".\n */\nexport interface PaginationProps extends Omit<React.ComponentProps<'nav'>, 'children'> {\n /** How many pages there are. */\n pageCount: number\n /** The current page, from 1. */\n page?: number\n defaultPage?: number\n onPageChange?: (page: number) => void\n /** Each page's URL: pages become links. */\n getHref?: (page: number) => string\n layout?: 'full' | 'compact'\n /** Pages shown on each side of the current one (full layout). */\n siblings?: number\n previousLabel?: string\n nextLabel?: string\n /** How the row moves when the page changes. */\n motion?: 'slide' | 'scroll' | 'none'\n}\n\n/** The pages to show, with 'gap' where an ellipsis stands for skipped ones. Always 2 × siblings + 5 slots when there are enough pages, so the bar keeps its width. */\nexport function paginationRange(page: number, pageCount: number, siblings = 1): (number | 'gap')[] {\n const slots = siblings * 2 + 5\n const span = (a: number, b: number) => Array.from({ length: b - a + 1 }, (_, i) => a + i)\n if (pageCount <= slots) return span(1, pageCount)\n const left = Math.max(page - siblings, 1)\n const right = Math.min(page + siblings, pageCount)\n const showLeftGap = left > 3\n const showRightGap = right < pageCount - 2\n if (!showLeftGap) return [...span(1, slots - 2), 'gap', pageCount]\n if (!showRightGap) return [1, 'gap', ...span(pageCount - (slots - 3), pageCount)]\n return [1, 'gap', ...span(left, right), 'gap', pageCount]\n}\n\nconst pageClass = cn(\n 'relative z-10 grid h-control-height min-w-control-height place-items-center overflow-hidden rounded-lg px-1.5 text-sm text-text-muted tabular-nums',\n 'transition-colors duration-(--duration-fast) ease-(--ease-out) outline-none focus-visible:shadow-border-focus',\n 'hover:bg-bg-hover hover:text-text-default',\n 'aria-[current=page]:font-medium aria-[current=page]:text-text-default aria-[current=page]:hover:bg-transparent',\n)\n\ntype Dir = 'next' | 'prev'\n\n/** The strip's move, ms, and one page's step along it (a 28px page and the 4px gap), px. */\nconst STRIP_MS = SLIDE_MS\nconst STEP_PX = 32\n\n/**\n * A slot's number. When it changes, the old one stays on top of the new one for the length of\n * its exit, both in one grid cell, so the slot keeps the wider of the two and nothing jumps.\n */\nfunction PageText({ text, dir, motion }: { text: string; dir: Dir; motion: 'fade' | 'scroll' | 'none' }) {\n const [state, setState] = React.useState({ text, old: null as string | null, dir, n: 0 })\n if (state.text !== text) setState({ text, old: motion === 'none' ? null : state.text, dir, n: state.n + 1 })\n const animate = motion !== 'none' && state.n > 0\n return (\n // Clipped to the wider number, so in the compact \"Page 5 of 12\" a moving number never runs\n // into the words around it.\n <span className=\"inline-grid overflow-hidden align-bottom\">\n {state.old != null && (\n <span\n key={`o${state.n}`}\n aria-hidden\n data-motion={motion}\n data-phase=\"out\"\n data-dir={state.dir}\n className=\"satin-page-text col-start-1 row-start-1 text-center\"\n onAnimationEnd={() => setState((s) => ({ ...s, old: null }))}\n >\n {state.old}\n </span>\n )}\n <span\n key={`n${state.n}`}\n data-motion={animate ? motion : undefined}\n data-phase={animate ? 'in' : undefined}\n data-dir={state.dir}\n className=\"satin-page-text col-start-1 row-start-1 text-center\"\n >\n {state.text}\n </span>\n </span>\n )\n}\n\nexport function Pagination({\n pageCount,\n page: pageProp,\n defaultPage = 1,\n onPageChange,\n getHref,\n layout = 'full',\n siblings = 1,\n previousLabel = 'Previous',\n nextLabel = 'Next',\n motion = 'scroll',\n className,\n 'aria-label': ariaLabel = 'Pagination',\n ...props\n}: PaginationProps) {\n const [uncontrolled, setUncontrolled] = React.useState(defaultPage)\n const page = Math.min(Math.max(pageProp ?? uncontrolled, 1), Math.max(pageCount, 1))\n const go = (p: number) => {\n if (p < 1 || p > pageCount || p === page) return\n // Where every page is on screen right now (mid-move too), for the strip to move from.\n if (motion === 'scroll') snapshot()\n if (pageProp == null) setUncontrolled(p)\n onPageChange?.(p)\n }\n\n // Which way the reader is paging, for the scroll motion.\n const prevPage = React.useRef(page)\n const dir: Dir = page >= prevPage.current ? 'next' : 'prev'\n React.useEffect(() => {\n prevPage.current = page\n }, [page])\n\n // The pill under the current page slides to the new one (sliding-indicator.tsx); with\n // motion off it just moves.\n const listRef = React.useRef<HTMLUListElement>(null)\n const pill = useSlidingIndicator<HTMLLIElement>(listRef, '[aria-current=\"page\"]', `${page}|${pageCount}|${layout}|${siblings}`, {\n animate: motion !== 'none',\n })\n const textMotion = motion === 'slide' ? 'fade' : 'none'\n\n /* ---- scroll: the pages are a strip that moves (FLIP) ---- */\n // Each page is its own element, keyed by its number. When the page changes, every page that\n // stays slides from where it was to where it now is; a page coming into view slides in from\n // the side the reader is paging towards, out from under the ellipsis; one leaving slides\n // the other way and fades as it goes under the other ellipsis. The pill under the current\n // page moves on the same curve, so a page sliding into it lands with it.\n const ghostRef = React.useRef<HTMLLIElement>(null)\n const before = React.useRef<Map<string, { x: number; node: HTMLElement }> | null>(null)\n function snapshot() {\n const list = listRef.current\n if (!list) return\n const base = list.getBoundingClientRect().left\n const map = new Map<string, { x: number; node: HTMLElement }>()\n list.querySelectorAll<HTMLElement>('[data-cell]').forEach((li) => {\n const face = li.firstElementChild as HTMLElement | null\n if (face) map.set(li.dataset.cell!, { x: li.getBoundingClientRect().left - base, node: face.cloneNode(true) as HTMLElement })\n })\n before.current = map\n }\n React.useLayoutEffect(() => {\n const prev = before.current\n before.current = null\n const list = listRef.current\n if (!prev || !list || motion !== 'scroll' || layout !== 'full') return\n if (typeof window !== 'undefined' && window.matchMedia?.('(prefers-reduced-motion: reduce)').matches) return\n const sign = dir === 'next' ? 1 : -1\n const timing: KeyframeAnimationOptions = { duration: STRIP_MS, easing: 'cubic-bezier(0.23, 1, 0.32, 1)' }\n const seen = new Set<string>()\n list.querySelectorAll<HTMLElement>('[data-cell]').forEach((li) => {\n const key = li.dataset.cell!\n seen.add(key)\n li.getAnimations().forEach((a) => a.cancel())\n const from = prev.get(key)\n if (from) {\n const dx = from.x - li.offsetLeft\n if (Math.abs(dx) > 0.5) li.animate([{ transform: `translateX(${dx}px)` }, { transform: 'none' }], timing)\n } else {\n li.animate([{ transform: `translateX(${sign * STEP_PX}px)`, opacity: 0 }, { transform: 'none', opacity: 1 }], timing)\n }\n })\n // Pages that left: a copy of each, where it was, sliding off and fading.\n const layer = ghostRef.current\n if (!layer) return\n for (const [key, { x, node }] of prev) {\n if (seen.has(key)) continue\n node.removeAttribute('aria-current')\n node.style.cssText = `position:absolute;top:0;left:${x}px;margin:0`\n layer.appendChild(node)\n node\n .animate([{ transform: 'none', opacity: 1 }, { transform: `translateX(${-sign * STEP_PX}px)`, opacity: 0 }], {\n ...timing,\n duration: STRIP_MS * 0.6,\n })\n .finished.then(\n () => node.remove(),\n () => node.remove(),\n )\n }\n }, [page, motion, layout, dir])\n\n // A page as a link or a button; the same skin either way.\n const target = (p: number, className: string, children: React.ReactNode, extra?: React.HTMLAttributes<HTMLElement>) =>\n getHref ? (\n <a href={getHref(p)} className={className} onClick={() => go(p)} {...extra}>\n {children}\n </a>\n ) : (\n <button type=\"button\" className={cn('cursor-pointer', className)} onClick={() => go(p)} {...extra}>\n {children}\n </button>\n )\n\n const step = (dir: -1 | 1) => {\n const to = page + dir\n const disabled = to < 1 || to > pageCount\n const label = dir < 0 ? previousLabel : nextLabel\n const icon = dir < 0 ? <NavArrowLeft aria-hidden /> : <NavArrowRight aria-hidden />\n const compact = layout === 'compact'\n const content = compact ? icon : dir < 0 ? <>{icon}{label}</> : <>{label}{icon}</>\n // A link can't be disabled: at the ends it is a disabled button instead.\n return getHref && !disabled ? (\n <Button asChild variant=\"tertiary\" iconOnly={compact} aria-label={compact ? label : undefined}>\n <a href={getHref(to)} rel={dir < 0 ? 'prev' : 'next'} onClick={() => go(to)}>\n {content}\n </a>\n </Button>\n ) : (\n <Button variant=\"tertiary\" iconOnly={compact} aria-label={compact ? label : undefined} disabled={disabled} onClick={() => go(to)}>\n {content}\n </Button>\n )\n }\n\n return (\n <nav data-slot=\"pagination\" data-layout={layout} aria-label={ariaLabel} className={cn('flex items-center', className)} {...props}>\n {layout === 'compact' ? (\n <div className=\"flex items-center gap-2\">\n {step(-1)}\n <span className=\"text-sm text-text-muted tabular-nums\" aria-live=\"polite\">\n Page <PageText text={String(page)} dir={dir} motion={motion === 'scroll' ? 'scroll' : textMotion} /> of {pageCount}\n </span>\n {step(1)}\n </div>\n ) : (\n <ul ref={listRef} className=\"relative flex items-center gap-1\">\n <li\n ref={pill.ref}\n aria-hidden\n role=\"presentation\"\n className=\"pointer-events-none absolute top-0 left-0 h-control-height rounded-lg bg-bg-selected opacity-0\"\n />\n {/* Copies of the pages that just left, playing out; under the live pages. */}\n <li ref={ghostRef} aria-hidden role=\"presentation\" className=\"pointer-events-none absolute inset-0 overflow-visible\" />\n <li>{step(-1)}</li>\n {motion === 'scroll'\n ? // The strip: pages keyed by their number, the two ellipses by their side.\n paginationRange(page, pageCount, siblings).map((p, i, all) => {\n const key = p === 'gap' ? (i < all.length / 2 ? 'gap-start' : 'gap-end') : `p${p}`\n return (\n <li key={key} data-cell={key} className=\"relative\">\n {p === 'gap' ? (\n <span aria-hidden className={cn(pageClass, 'pointer-events-none')}>\n …\n </span>\n ) : (\n target(p, pageClass, p, {\n 'aria-current': p === page ? 'page' : undefined,\n 'aria-label': `Page ${p}`,\n } as React.HTMLAttributes<HTMLElement>)\n )}\n </li>\n )\n })\n : // Slots keep their places (keyed by position), so paging changes numbers, not elements.\n paginationRange(page, pageCount, siblings).map((p, i) => {\n const gap = p === 'gap'\n // A slot is the same element whether it holds a page or the ellipsis, so a page\n // coming out from behind \"…\" (or going behind it) plays the same motion as a number.\n const text = <PageText text={gap ? '…' : String(p)} dir={dir} motion={textMotion} />\n return (\n <li key={i}>\n {gap\n ? React.createElement(getHref ? 'a' : 'button', {\n className: cn(pageClass, 'pointer-events-none'),\n 'aria-hidden': true,\n tabIndex: -1,\n ...(getHref ? {} : { type: 'button', disabled: true }),\n children: text,\n })\n : target(p, pageClass, text, {\n 'aria-current': p === page ? 'page' : undefined,\n 'aria-label': `Page ${p}`,\n } as React.HTMLAttributes<HTMLElement>)}\n </li>\n )\n })}\n <li>{step(1)}</li>\n </ul>\n )}\n </nav>\n )\n}\n"]}
|
package/chunk-QUF2IPOZ.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/textarea.tsx"],"names":[],"mappings":"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","file":"chunk-QUF2IPOZ.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../lib/utils'\nimport { useFormField } from './form-field'\n\n/**\n * Textarea, 1:1 with the uiKit `Textarea` set (3647:17812): the Input skin (surface fill,\n * border/default, radius-lg, shadow xs; border/strong on hover, border/focus and the focus\n * ring on focus, action/destructive/bg on error) at 96px tall with a resize grip. Above it a\n * label (medium 13/18) with an optional \"(Optional)\" in muted 13; under it a hint row: the\n * hint (muted) and, with `maxLength`, a counter (text/subtle) on the right. An error message\n * replaces the hint and turns the whole row action/destructive/bg. Disabled is bg/muted with\n * text/subtle and the whole field at 60%.\n *\n * `maxLength` drives the counter and is not enforced, so a pasted text can run over and show\n * it (134/120); pair it with `error` to say what to fix. The look is styles/components/\n * input.css (`.satin-field`) plus textarea.css.\n */\nexport interface TextareaProps extends Omit<React.ComponentProps<'textarea'>, 'onChange' | 'maxLength'> {\n label?: React.ReactNode\n /** Adds a muted \"(Optional)\" after the label. */\n optional?: boolean\n hint?: React.ReactNode\n /** An error message (replaces the hint), or `true` to mark the field invalid without one. */\n error?: React.ReactNode | boolean\n /** Shows a `length/maxLength` counter. */\n maxLength?: number\n onChange?: (value: string) => void\n /** Classes for the outer wrapper (label + field + hint row). `className` styles the field. */\n wrapperClassName?: string\n /** Show a state without interacting, for state sheets. */\n 'data-force'?: 'hover' | 'focus'\n}\n\nexport function Textarea({\n label,\n optional,\n hint,\n error,\n maxLength,\n className,\n wrapperClassName,\n id,\n disabled,\n required,\n value,\n defaultValue,\n onChange,\n 'aria-describedby': ariaDescribedBy,\n 'data-force': force,\n ...props\n}: TextareaProps) {\n const field = useFormField()\n const autoId = React.useId()\n const textareaId = id ?? field?.id ?? autoId\n const isDisabled = disabled ?? field?.disabled ?? false\n const hasMessage = typeof error === 'string' || React.isValidElement(error)\n const invalid = Boolean(error) || (field?.invalid ?? false)\n const message = hasMessage ? error : hint\n\n const [uncontrolled, setUncontrolled] = React.useState(defaultValue != null ? String(defaultValue) : '')\n const text = value != null ? String(value) : uncontrolled\n\n const messageId = message ? `${textareaId}-hint` : undefined\n const counterId = maxLength != null ? `${textareaId}-counter` : undefined\n const describedBy =\n [ariaDescribedBy, field?.describedBy, messageId, counterId].filter(Boolean).join(' ') || undefined\n\n return (\n <div\n data-slot=\"textarea-wrapper\"\n data-disabled={isDisabled || undefined}\n className={cn('satin-textarea-root grid w-full gap-2', wrapperClassName)}\n >\n {label && (\n <div className=\"flex items-center gap-1\">\n <label htmlFor={textareaId} className=\"text-sm leading-[18px] font-medium text-text-default\">\n {label}\n </label>\n {optional && <span className=\"text-sm text-text-muted\">(Optional)</span>}\n </div>\n )}\n <div className=\"relative flex\">\n <textarea\n id={textareaId}\n data-slot=\"textarea\"\n data-filled={text.length > 0 || undefined}\n data-invalid={invalid || undefined}\n data-disabled={isDisabled || undefined}\n data-force={force}\n className={cn('satin-field satin-textarea', className)}\n disabled={isDisabled}\n required={required ?? field?.required}\n aria-invalid={invalid || undefined}\n aria-describedby={describedBy}\n value={value}\n defaultValue={defaultValue}\n onChange={(e) => {\n if (value == null) setUncontrolled(e.target.value)\n onChange?.(e.target.value)\n }}\n {...props}\n />\n {/* Figma's resizeHandle, 7px at 1px in text/subtle. */}\n <svg className=\"satin-textarea-grip\" viewBox=\"0 0 7 7\" fill=\"none\" aria-hidden>\n <path d=\"M6.5 0.5L0.5 6.5M6.5 4L4 6.5\" stroke=\"currentColor\" strokeLinecap=\"round\" />\n </svg>\n </div>\n {(message || maxLength != null) && (\n <div\n className={cn(\n 'flex items-start gap-2 text-sm',\n hasMessage ? 'text-action-destructive-bg' : 'text-text-muted',\n )}\n >\n <p id={messageId} className=\"min-w-0 flex-1\">\n {message}\n </p>\n {maxLength != null && (\n <p id={counterId} className={cn('shrink-0 whitespace-nowrap', !hasMessage && 'text-text-muted')}>\n <span className=\"sr-only\">Characters used: </span>\n {text.length}/{maxLength}\n </p>\n )}\n </div>\n )}\n </div>\n )\n}\n"]}
|
package/chunk-RTJ76X5U.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/streaming-text.tsx"],"names":["last"],"mappings":"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","file":"chunk-RTJ76X5U.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../lib/utils'\n\n/**\n * Streaming text: an agent's answer writing itself out as it arrives, in the assistant\n * Message's type (text/default 13/19.5).\n *\n * Give it the text received so far and keep it growing; `streaming` while more is coming. A\n * model sends text in uneven chunks, so the component doesn't print them as they land: it\n * writes at an even pace (`speed`, letters a second), stops briefly after a full stop or a\n * comma, and speeds up when it falls behind, so a backlog never takes more than about a second\n * to catch up. A caret (2px, action/primary/bg) sits at the end while it writes.\n *\n * `reveal` is how each piece comes in: `blur` (default) fades every letter in from a 2px blur\n * over 220 ms, `fade` without the blur, `word` a word at a time, `none` prints letters as they\n * come with no motion. Only the letters arriving animate; the rest carry no filter.\n *\n * The whole text received is in the DOM from the start (letters not yet written are only\n * transparent), so screen readers get it at once; the box is aria-busy while it streams.\n * With reduced motion it shows everything received straight away.\n */\nexport interface StreamingTextProps extends Omit<React.ComponentProps<'div'>, 'children'> {\n /** Everything received so far. Grow it as chunks arrive. */\n text: string\n /** More is coming: keeps the caret and the pace going. */\n streaming?: boolean\n /** Letters written a second at the even pace. */\n speed?: number\n reveal?: 'blur' | 'fade' | 'word' | 'none'\n /** The caret at the end while it writes. */\n caret?: boolean\n /** Called once everything received is written and `streaming` is off. */\n onDone?: () => void\n}\n\n/** Extra pause after these, ms, at the even pace. */\nconst PAUSE: Record<string, number> = { '.': 140, '!': 140, '?': 140, ',': 50, ';': 50, ':': 50, '\\n': 90 }\n/** A backlog is cleared within about this long, s. */\nconst CATCH_UP_S = 0.9\n/** The caret sits after the last letter lit at least this long ago, ms: one already readable,\n * not one still coming in from transparent, so it never runs ahead of the visible text. */\nconst CARET_LAG = 90\n\n/** Letters, or words with the space after them, each one unit to light. */\nfunction split(text: string, byWord: boolean) {\n return byWord ? (text.match(/\\S+\\s*|\\s+/g) ?? []) : Array.from(text)\n}\n\nexport function StreamingText({\n text,\n streaming = false,\n speed = 80,\n reveal = 'blur',\n caret = true,\n onDone,\n className,\n ...props\n}: StreamingTextProps) {\n const units = React.useMemo(() => split(text, reveal === 'word'), [text, reveal])\n const box = React.useRef<HTMLDivElement>(null)\n const shown = React.useRef(0)\n const caretEl = React.useRef<HTMLSpanElement | null>(null)\n const done = React.useRef(onDone)\n done.current = onDone\n const finished = React.useRef(false)\n\n // Start over when the text is replaced rather than extended (a new answer).\n const prevText = React.useRef(text)\n if (!text.startsWith(prevText.current)) {\n shown.current = 0\n finished.current = false\n }\n prevText.current = text\n\n React.useEffect(() => {\n const el = box.current\n if (!el) return\n const spans = [...el.querySelectorAll<HTMLElement>('.satin-stream-unit')]\n // Spans re-rendered from scratch (a reset) lose their lit state: put it back up to `shown`.\n for (let i = 0; i < spans.length; i++) {\n if (i < shown.current) spans[i].setAttribute('data-on', '')\n else spans[i].removeAttribute('data-on')\n }\n\n let mark = caretEl.current\n if (!mark) {\n mark = document.createElement('span')\n mark.className = 'satin-stream-caret'\n mark.setAttribute('aria-hidden', 'true')\n caretEl.current = mark\n }\n const litAt: number[] = []\n const placeCaret = (now = Infinity) => {\n if (!caret || (!streaming && shown.current >= spans.length)) return mark!.remove()\n let i = shown.current - 1\n if (reveal !== 'none') while (i >= 0 && litAt[i] !== undefined && now - litAt[i] < CARET_LAG) i--\n const last = spans[i]\n if (last) {\n if (last.nextSibling !== mark) last.after(mark!)\n } else el.prepend(mark!)\n }\n const finish = () => {\n placeCaret()\n if (!streaming && shown.current >= spans.length && !finished.current) {\n finished.current = true\n done.current?.()\n }\n }\n\n if (typeof window !== 'undefined' && window.matchMedia?.('(prefers-reduced-motion: reduce)').matches) {\n spans.forEach((s) => s.setAttribute('data-on', ''))\n shown.current = spans.length\n finish()\n return\n }\n\n let raf = 0\n let last = performance.now()\n let wait = 0 // ms left of a pause\n let budget = 0 // units owed at the current pace\n const tick = (now: number) => {\n const dt = Math.min(now - last, 100)\n last = now\n const backlog = spans.length - shown.current\n // Letters (or words) a second: the even pace, or faster to clear a backlog in time.\n const unitsPerLetter = reveal === 'word' ? 5 : 1\n const rate = Math.max(speed / unitsPerLetter, backlog / CATCH_UP_S)\n const catchingUp = backlog / CATCH_UP_S > speed / unitsPerLetter\n if (wait > 0 && !catchingUp) wait -= dt\n else {\n budget += (rate * dt) / 1000\n while (budget >= 1 && shown.current < spans.length) {\n const s = spans[shown.current++]\n s.setAttribute('data-on', '')\n litAt[shown.current - 1] = now\n budget -= 1\n const ch = (s.textContent ?? '').trimEnd().slice(-1) || (s.textContent ?? '')\n const pause = PAUSE[ch]\n if (pause && !catchingUp) {\n wait = pause\n budget = 0\n break\n }\n }\n if (shown.current >= spans.length) budget = 0\n }\n placeCaret(now)\n if (shown.current < spans.length) raf = requestAnimationFrame(tick)\n else finish()\n }\n if (shown.current < spans.length) raf = requestAnimationFrame(tick)\n else finish()\n return () => cancelAnimationFrame(raf)\n }, [units, streaming, speed, reveal, caret])\n\n React.useEffect(() => () => caretEl.current?.remove(), [])\n\n return (\n <div\n ref={box}\n data-slot=\"streaming-text\"\n data-reveal={reveal}\n aria-busy={streaming || undefined}\n className={cn('satin-stream text-body whitespace-pre-wrap text-text-default', className)}\n {...props}\n >\n {units.map((u, i) => (\n <span key={i} className=\"satin-stream-unit\">\n {u}\n </span>\n ))}\n </div>\n )\n}\n"]}
|
package/chunk-SH6NG6VN.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/switch.tsx"],"names":["SwitchPrimitive"],"mappings":";;;;;AAmBO,SAAS,MAAA,CAAO,EAAE,SAAA,EAAW,KAAA,EAAO,WAAA,EAAa,YAAY,MAAA,EAAQ,EAAA,EAAI,GAAG,KAAA,EAAM,EAAgB;AACvG,EAAA,MAAM,SAAe,KAAA,CAAA,KAAA,EAAM;AAC3B,EAAA,MAAM,WAAW,EAAA,IAAM,MAAA;AACvB,EAAA,MAAM,aAAA,GAAgB,WAAA,GAAc,CAAA,EAAG,QAAQ,CAAA,YAAA,CAAA,GAAiB,MAAA;AAEhE,EAAA,MAAM,OAAA,mBACJ,GAAA;AAAA,IAACA,QAAA,CAAgB,IAAA;AAAA,IAAhB;AAAA,MACC,EAAA,EAAI,QAAA;AAAA,MACJ,WAAA,EAAU,QAAA;AAAA,MACV,kBAAA,EAAkB,aAAA;AAAA,MAClB,SAAA,EAAW,EAAA,CAAG,mBAAA,EAAqB,SAAS,CAAA;AAAA,MAC3C,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAA,GAAA,CAACA,QAAA,CAAgB,KAAA,EAAhB,EAAsB,WAAU,oBAAA,EAAqB;AAAA;AAAA,GACxD;AAGF,EAAA,IAAI,CAAC,KAAA,IAAS,CAAC,WAAA,EAAa,OAAO,OAAA;AAEnC,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,0BAAA,EAA4B,SAAA,KAAc,WAAW,kCAAkC,CAAA;AAAA,MAEpG,QAAA,EAAA;AAAA,QAAA,OAAA;AAAA,wBACD,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gEAAA,EACZ,QAAA,EAAA;AAAA,UAAA,KAAA,wBACE,OAAA,EAAA,EAAM,OAAA,EAAS,QAAA,EAAU,SAAA,EAAU,iCACjC,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,UAED,+BACC,GAAA,CAAC,GAAA,EAAA,EAAE,IAAI,aAAA,EAAe,SAAA,EAAU,mBAC7B,QAAA,EAAA,WAAA,EACH;AAAA,SAAA,EAEJ;AAAA;AAAA;AAAA,GACF;AAEJ","file":"chunk-SH6NG6VN.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { Switch as SwitchPrimitive } from 'radix-ui'\nimport { cn } from '../lib/utils'\n\n/**\n * Switch, 1:1 with the uiKit `_switchBase` (3647:17617) and `Switch` (3647:17714) sets: a\n * 32 × 18 track (border/input off, calm green on, each with its hover), a 14px white thumb,\n * a 2px focus ring, 50% when disabled. Label medium 13/19.5, description muted, 10px from\n * the track. Use it for settings that apply at once; use a checkbox inside a form.\n * The look of every state lives in styles/components.css.\n */\nexport interface SwitchProps extends React.ComponentProps<typeof SwitchPrimitive.Root> {\n label?: React.ReactNode\n description?: React.ReactNode\n placement?: 'left' | 'right'\n}\n\nexport function Switch({ className, label, description, placement = 'left', id, ...props }: SwitchProps) {\n const autoId = React.useId()\n const switchId = id ?? autoId\n const descriptionId = description ? `${switchId}-description` : undefined\n\n const control = (\n <SwitchPrimitive.Root\n id={switchId}\n data-slot=\"switch\"\n aria-describedby={descriptionId}\n className={cn('peer satin-switch', className)}\n {...props}\n >\n <SwitchPrimitive.Thumb className=\"satin-switch-thumb\" />\n </SwitchPrimitive.Root>\n )\n\n if (!label && !description) return control\n\n return (\n <div\n data-slot=\"switch-field\"\n className={cn('flex items-start gap-2.5', placement === 'right' && 'flex-row-reverse justify-between')}\n >\n {control}\n <div className=\"grid gap-0.5 text-sm leading-[19.5px] peer-disabled:opacity-50\">\n {label && (\n <label htmlFor={switchId} className=\"font-medium text-text-default\">\n {label}\n </label>\n )}\n {description && (\n <p id={descriptionId} className=\"text-text-muted\">\n {description}\n </p>\n )}\n </div>\n </div>\n )\n}\n"]}
|
package/chunk-SHDFUXYV.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/line-chart.tsx"],"names":["Fragment"],"mappings":"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","file":"chunk-SHDFUXYV.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../lib/utils'\nimport { niceMax } from './bar-chart'\nimport { ChartCard, ChartTooltip, defaultFormat, type ChartCardBaseProps } from './chart'\n\n/**\n * Line and Area chart, 1:1 with the uiKit `chart/lineCard` (4076:6759) and `chart/areaCard`\n * (4070:7627), in the shared ChartCard (chart.tsx).\n *\n * One metric over the period: a smooth 2px line in chart/3 (monotone, so it never overshoots a\n * point) over a 180px plot with a 32px axis gutter and 4 dashed border-subtle gridlines at nice\n * ticks, the x labels 6px under it (at most about seven, evenly picked). `AreaCard` fills under\n * the line with chart/3 fading from 28% to nothing at the baseline. No legend: the title says\n * what is plotted and the KPI above gives its total.\n *\n * Hover (or `highlight`) picks the nearest point: a dashed border-strong drop line from it to the\n * baseline, an 8px dot ringed in chart/3 on bg/card, the tooltip above it (date and value) and\n * its x label in text/default. Every point is also reachable with the keyboard (arrow keys on the\n * focused plot). When the data changes the plot fades in on its new scale, unless motion is\n * reduced.\n */\nexport interface LineCardProps extends ChartCardBaseProps {\n /** Unit after the value in the tooltip (\"orders\"). */\n unit?: string\n /** Fill under the line. `AreaCard` sets it. */\n area?: boolean\n /** Swap the plot without the fade when the data changes, as under prefers-reduced-motion. */\n reducedMotion?: boolean\n}\n\nconst TRACK = 180\n\n/** Monotone cubic (Fritsch–Carlson) through the points, as an SVG path. */\nfunction smoothPath(pts: [number, number][]) {\n const n = pts.length\n if (n === 0) return ''\n if (n === 1) return `M ${pts[0][0]} ${pts[0][1]}`\n const dx: number[] = [], dy: number[] = [], m: number[] = []\n for (let i = 0; i < n - 1; i++) {\n dx[i] = pts[i + 1][0] - pts[i][0]\n dy[i] = (pts[i + 1][1] - pts[i][1]) / dx[i]\n }\n m[0] = dy[0]\n m[n - 1] = dy[n - 2]\n for (let i = 1; i < n - 1; i++) m[i] = dy[i - 1] * dy[i] <= 0 ? 0 : (dy[i - 1] + dy[i]) / 2\n for (let i = 0; i < n - 1; i++) {\n if (dy[i] === 0) {\n m[i] = 0\n m[i + 1] = 0\n continue\n }\n const a = m[i] / dy[i], b = m[i + 1] / dy[i], h = a * a + b * b\n if (h > 9) {\n const t = 3 / Math.sqrt(h)\n m[i] = t * a * dy[i]\n m[i + 1] = t * b * dy[i]\n }\n }\n let d = `M ${pts[0][0]} ${pts[0][1]}`\n for (let i = 0; i < n - 1; i++) {\n const h = dx[i] / 3\n d += ` C ${pts[i][0] + h} ${pts[i][1] + m[i] * h} ${pts[i + 1][0] - h} ${pts[i + 1][1] - m[i + 1] * h} ${pts[i + 1][0]} ${pts[i + 1][1]}`\n }\n return d\n}\n\nexport function LineCard({\n data,\n formatValue = defaultFormat,\n highlight,\n unit,\n area = false,\n reducedMotion,\n total,\n ...props\n}: LineCardProps) {\n const gradientId = React.useId()\n const [hovered, setHovered] = React.useState<number | null>(null)\n const [anchor, setAnchor] = React.useState<HTMLElement | null>(null)\n const n = data.length\n const active = (hovered != null && hovered < n ? hovered : null) ?? highlight ?? null\n\n const signature = data.map((d) => `${d.label}:${d.value}`).join('|')\n const [redraw, setRedraw] = React.useState({ signature, n: 0 })\n if (redraw.signature !== signature) setRedraw({ signature, n: redraw.n + 1 })\n const fade = redraw.n > 0 && !reducedMotion\n\n const max = niceMax(Math.max(0, ...data.map((d) => d.value)))\n const ticks = [4, 3, 2, 1, 0].map((i) => (max / 4) * i)\n const sum = data.reduce((s, d) => s + d.value, 0)\n // x in 0–100 (percent of the plot), y in px down from the top of the track.\n const x = (i: number) => (n <= 1 ? 50 : (i / (n - 1)) * 100)\n const y = (v: number) => TRACK - (v / max) * TRACK\n const pts = data.map((d, i) => [x(i), y(d.value)] as [number, number])\n const line = smoothPath(pts)\n const step = Math.max(1, Math.ceil(n / 7))\n const showLabel = (i: number) => (n - 1 - i) % step === 0\n\n const pick = (e: React.PointerEvent<HTMLDivElement>) => {\n const r = e.currentTarget.getBoundingClientRect()\n const f = (e.clientX - r.left) / r.width\n setHovered(Math.max(0, Math.min(n - 1, Math.round(f * (n - 1)))))\n }\n const fmt = (v: number) => `${formatValue(v)}${unit ? ` ${unit}` : ''}`\n\n return (\n <ChartCard total={total ?? defaultFormat(sum)} {...props}>\n <div className=\"relative pt-2 pl-8\">\n {ticks.map((t, i) => (\n <React.Fragment key={i}>\n {i < 4 && (\n <span\n aria-hidden\n className=\"absolute right-0 left-8 h-px border-t border-dashed border-border-subtle\"\n style={{ top: 8 + (TRACK / 4) * i }}\n />\n )}\n <span\n aria-hidden\n key={`${redraw.n}-${i}`}\n className={cn('absolute left-6 w-6 -translate-x-full text-right text-xs leading-[18px] text-text-muted', fade && 'satin-bar-fade')}\n style={{ top: 8 + (TRACK / 4) * i - 9 }}\n >\n {formatValue(t)}\n </span>\n </React.Fragment>\n ))}\n <div\n role=\"group\"\n aria-label={`${props.title}, ${n} points`}\n tabIndex={0}\n className=\"relative rounded-md outline-none focus-visible:[box-shadow:0_0_0_2px_var(--action-focus-ring)]\"\n style={{ height: TRACK }}\n onPointerMove={pick}\n onPointerLeave={() => setHovered(null)}\n onFocus={() => setHovered((h) => h ?? n - 1)}\n onBlur={() => setHovered(null)}\n onKeyDown={(e) => {\n if (e.key !== 'ArrowLeft' && e.key !== 'ArrowRight') return\n e.preventDefault()\n setHovered((h) => Math.max(0, Math.min(n - 1, (h ?? n - 1) + (e.key === 'ArrowRight' ? 1 : -1))))\n }}\n >\n <svg\n key={redraw.n}\n aria-hidden\n viewBox={`0 0 100 ${TRACK}`}\n preserveAspectRatio=\"none\"\n className={cn('absolute inset-0 size-full overflow-visible', fade && 'satin-bar-fade')}\n >\n {area && (\n <>\n <defs>\n <linearGradient id={gradientId} x1=\"0\" x2=\"0\" y1=\"0\" y2=\"1\">\n <stop offset=\"0\" stopColor=\"var(--chart-3)\" stopOpacity=\"0.28\" />\n <stop offset=\"1\" stopColor=\"var(--chart-3)\" stopOpacity=\"0\" />\n </linearGradient>\n </defs>\n <path d={`${line} L 100 ${TRACK} L 0 ${TRACK} Z`} fill={`url(#${gradientId})`} />\n </>\n )}\n {active != null && (\n <line\n x1={x(active)}\n x2={x(active)}\n y1={y(data[active].value) + 4}\n y2={TRACK}\n stroke=\"var(--border-strong)\"\n strokeDasharray=\"4 4\"\n vectorEffect=\"non-scaling-stroke\"\n />\n )}\n <path\n d={line}\n fill=\"none\"\n stroke=\"var(--chart-3)\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n vectorEffect=\"non-scaling-stroke\"\n />\n </svg>\n {active != null && (\n <>\n <span\n ref={setAnchor}\n aria-hidden\n className=\"pointer-events-none absolute size-2 -translate-1/2 rounded-full border-2 border-chart-3 bg-bg-card\"\n style={{ left: `${x(active)}%`, top: y(data[active].value) }}\n />\n <ChartTooltip anchor={anchor} sideOffset={6} label={data[active].tooltipLabel ?? data[active].label} value={fmt(data[active].value)} />\n <span className=\"sr-only\" aria-live=\"polite\">\n {`${data[active].tooltipLabel ?? data[active].label}: ${fmt(data[active].value)}`}\n </span>\n </>\n )}\n </div>\n <div aria-hidden className=\"relative mt-1.5 h-5\">\n {data.map((d, i) =>\n showLabel(i) ? (\n <span\n key={`${redraw.n}-${d.label}-${i}`}\n className={cn(\n 'absolute -translate-x-1/2 text-sm leading-(--text-sm--line-height) whitespace-nowrap',\n i === active ? 'font-medium text-text-default' : 'text-text-muted',\n fade && 'satin-bar-fade',\n )}\n style={{ left: `${x(i)}%` }}\n >\n {d.label}\n </span>\n ) : null,\n )}\n </div>\n </div>\n </ChartCard>\n )\n}\n\n/** The Line chart with the gradient under its line. */\nexport function AreaCard(props: Omit<LineCardProps, 'area'>) {\n return <LineCard {...props} area />\n}\n"]}
|
package/chunk-TKO44NDI.js
DELETED
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import { CloseIcon } from './chunk-JPNWHWAQ.js';
|
|
2
|
-
import { Button } from './chunk-HNQUX43Z.js';
|
|
3
|
-
import { cn } from './chunk-H63FYCMY.js';
|
|
4
|
-
import 'react';
|
|
5
|
-
import { Dialog } from 'radix-ui';
|
|
6
|
-
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
7
|
-
|
|
8
|
-
function Sheet({
|
|
9
|
-
open,
|
|
10
|
-
defaultOpen,
|
|
11
|
-
onOpenChange,
|
|
12
|
-
trigger,
|
|
13
|
-
side = "right",
|
|
14
|
-
title,
|
|
15
|
-
description,
|
|
16
|
-
footer,
|
|
17
|
-
children,
|
|
18
|
-
modal = true,
|
|
19
|
-
container,
|
|
20
|
-
onOpenAutoFocus,
|
|
21
|
-
className
|
|
22
|
-
}) {
|
|
23
|
-
const position = container ? "absolute" : "fixed";
|
|
24
|
-
return /* @__PURE__ */ jsxs(Dialog.Root, { open, defaultOpen, onOpenChange, modal, children: [
|
|
25
|
-
trigger && /* @__PURE__ */ jsx(Dialog.Trigger, { asChild: true, children: trigger }),
|
|
26
|
-
/* @__PURE__ */ jsxs(Dialog.Portal, { container, children: [
|
|
27
|
-
/* @__PURE__ */ jsx(
|
|
28
|
-
Dialog.Overlay,
|
|
29
|
-
{
|
|
30
|
-
className: cn(
|
|
31
|
-
position,
|
|
32
|
-
"inset-0 z-50 bg-black-a40",
|
|
33
|
-
"data-[state=open]:animate-[satin-fade-in_var(--duration-slow)_var(--ease-out)]",
|
|
34
|
-
"data-[state=closed]:animate-[satin-fade-out_var(--duration-base)_var(--ease-out)]"
|
|
35
|
-
)
|
|
36
|
-
}
|
|
37
|
-
),
|
|
38
|
-
/* @__PURE__ */ jsxs(
|
|
39
|
-
Dialog.Content,
|
|
40
|
-
{
|
|
41
|
-
"data-slot": "sheet",
|
|
42
|
-
"data-side": side,
|
|
43
|
-
onOpenAutoFocus,
|
|
44
|
-
...description ? {} : { "aria-describedby": void 0 },
|
|
45
|
-
className: cn(
|
|
46
|
-
position,
|
|
47
|
-
"z-50 flex flex-col gap-4 bg-bg-card p-4 outline-none",
|
|
48
|
-
"[box-shadow:0_4px_6px_-4px_var(--effect-shadow-sm),0_10px_15px_-3px_var(--effect-shadow-sm)]",
|
|
49
|
-
// Flush with its edge: no radius and no border on the side that touches it.
|
|
50
|
-
side === "bottom" && "inset-x-0 bottom-0 max-h-[85%] rounded-t-2xl border-t border-border-subtle pt-6",
|
|
51
|
-
side === "right" && "inset-y-0 right-0 w-[400px] max-w-[calc(100%-32px)] rounded-l-2xl border-l border-border-subtle",
|
|
52
|
-
side === "left" && "inset-y-0 left-0 w-[400px] max-w-[calc(100%-32px)] rounded-r-2xl border-r border-border-subtle",
|
|
53
|
-
side === "bottom" && "data-[state=open]:animate-[satin-sheet-up_var(--duration-slow)_var(--ease-out)] data-[state=closed]:animate-[satin-sheet-down_var(--duration-base)_var(--ease-out)]",
|
|
54
|
-
side === "right" && "data-[state=open]:animate-[satin-sheet-left_var(--duration-slow)_var(--ease-out)] data-[state=closed]:animate-[satin-sheet-right_var(--duration-base)_var(--ease-out)]",
|
|
55
|
-
side === "left" && "data-[state=open]:animate-[satin-sheet-from-left_var(--duration-slow)_var(--ease-out)] data-[state=closed]:animate-[satin-sheet-to-left_var(--duration-base)_var(--ease-out)]",
|
|
56
|
-
className
|
|
57
|
-
),
|
|
58
|
-
children: [
|
|
59
|
-
side === "bottom" && /* @__PURE__ */ jsx(
|
|
60
|
-
Dialog.Close,
|
|
61
|
-
{
|
|
62
|
-
"aria-label": "Close",
|
|
63
|
-
className: "absolute inset-x-4 top-0 flex h-6 cursor-pointer items-center justify-center rounded-lg outline-none focus-visible:ring-2 focus-visible:ring-action-focus-ring",
|
|
64
|
-
children: /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "h-1 w-9 rounded-full bg-border-strong" })
|
|
65
|
-
}
|
|
66
|
-
),
|
|
67
|
-
/* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-0.5", side !== "bottom" && "pr-8"), children: [
|
|
68
|
-
/* @__PURE__ */ jsx(Dialog.Title, { className: "text-base leading-[21px] font-medium text-text-default", children: title }),
|
|
69
|
-
description ? /* @__PURE__ */ jsx(Dialog.Description, { className: "text-sm text-text-muted", children: description }) : null
|
|
70
|
-
] }),
|
|
71
|
-
children != null && /* @__PURE__ */ jsx("div", { className: "flex min-h-0 flex-1 flex-col overflow-y-auto", children }),
|
|
72
|
-
footer && /* @__PURE__ */ jsx("div", { className: cn("flex shrink-0 items-center justify-end gap-2", side === "bottom" && "*:flex-1"), children: footer }),
|
|
73
|
-
side !== "bottom" && /* @__PURE__ */ jsx(Dialog.Close, { asChild: true, children: /* @__PURE__ */ jsx(Button, { variant: "tertiary", size: "xl", iconOnly: true, "aria-label": "Close", className: "absolute top-[7px] right-[7px] rounded-lg", children: /* @__PURE__ */ jsx(CloseIcon, {}) }) })
|
|
74
|
-
]
|
|
75
|
-
}
|
|
76
|
-
)
|
|
77
|
-
] })
|
|
78
|
-
] });
|
|
79
|
-
}
|
|
80
|
-
var SheetClose = Dialog.Close;
|
|
81
|
-
|
|
82
|
-
export { Sheet, SheetClose };
|
|
83
|
-
//# sourceMappingURL=chunk-TKO44NDI.js.map
|
|
84
|
-
//# sourceMappingURL=chunk-TKO44NDI.js.map
|
package/chunk-TKO44NDI.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/sheet.tsx"],"names":["DialogPrimitive"],"mappings":"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","file":"chunk-TKO44NDI.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { Dialog as DialogPrimitive } from 'radix-ui'\nimport { cn } from '../lib/utils'\nimport { Button } from './button'\nimport { CloseIcon } from './dialog'\n\n/**\n * Sheet, 1:1 with the uiKit `Sheet` set (4025:3504): a panel that slides in from an edge and sits\n * flush with it, square and borderless on that side. bottom for phones (full width, radius-2xl\n * on the top corners, a 24px handle band with a 36 × 4 border/strong grip); right or left for\n * wider screens (400px, full height, radius-2xl on the inner corners, the Dialog's 36px close\n * button 7px from the top-right corner). Both are bg/card with a\n * border/subtle edge on the open side and the shadcn `lg` shadow, 16px in and 16px between a\n * header (14px medium title over a 13px muted description, 2px apart), the content and a\n * right-aligned footer of buttons 8px apart (on the bottom sheet they share the width).\n *\n * Built on the Radix Dialog: focus moves in on open and back to the trigger on close; Escape,\n * the backdrop or the handle closes it. It slides in over 250 ms on ease-out and out over 200.\n */\nexport interface SheetProps {\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n /** Optional element that opens the sheet (rendered with `asChild`, so pass a Button). */\n trigger?: React.ReactNode\n side?: 'bottom' | 'right' | 'left'\n title: React.ReactNode\n description?: React.ReactNode\n /** The buttons at the bottom. Wrap one in `SheetClose` to make it close the sheet. */\n footer?: React.ReactNode\n children?: React.ReactNode\n /** Modal blocks the page and shows the overlay; turn it off for inline previews. */\n modal?: boolean\n /** Portal target. Defaults to `document.body`. */\n container?: HTMLElement | null\n onOpenAutoFocus?: (event: Event) => void\n className?: string\n}\n\nexport function Sheet({\n open,\n defaultOpen,\n onOpenChange,\n trigger,\n side = 'right',\n title,\n description,\n footer,\n children,\n modal = true,\n container,\n onOpenAutoFocus,\n className,\n}: SheetProps) {\n const position = container ? 'absolute' : 'fixed'\n return (\n <DialogPrimitive.Root open={open} defaultOpen={defaultOpen} onOpenChange={onOpenChange} modal={modal}>\n {trigger && <DialogPrimitive.Trigger asChild>{trigger}</DialogPrimitive.Trigger>}\n <DialogPrimitive.Portal container={container}>\n <DialogPrimitive.Overlay\n className={cn(\n position,\n 'inset-0 z-50 bg-black-a40',\n 'data-[state=open]:animate-[satin-fade-in_var(--duration-slow)_var(--ease-out)]',\n 'data-[state=closed]:animate-[satin-fade-out_var(--duration-base)_var(--ease-out)]',\n )}\n />\n <DialogPrimitive.Content\n data-slot=\"sheet\"\n data-side={side}\n onOpenAutoFocus={onOpenAutoFocus}\n {...(description ? {} : { 'aria-describedby': undefined })}\n className={cn(\n position,\n 'z-50 flex flex-col gap-4 bg-bg-card p-4 outline-none',\n '[box-shadow:0_4px_6px_-4px_var(--effect-shadow-sm),0_10px_15px_-3px_var(--effect-shadow-sm)]',\n // Flush with its edge: no radius and no border on the side that touches it.\n side === 'bottom' && 'inset-x-0 bottom-0 max-h-[85%] rounded-t-2xl border-t border-border-subtle pt-6',\n side === 'right' && 'inset-y-0 right-0 w-[400px] max-w-[calc(100%-32px)] rounded-l-2xl border-l border-border-subtle',\n side === 'left' && 'inset-y-0 left-0 w-[400px] max-w-[calc(100%-32px)] rounded-r-2xl border-r border-border-subtle',\n side === 'bottom' &&\n 'data-[state=open]:animate-[satin-sheet-up_var(--duration-slow)_var(--ease-out)] data-[state=closed]:animate-[satin-sheet-down_var(--duration-base)_var(--ease-out)]',\n side === 'right' &&\n 'data-[state=open]:animate-[satin-sheet-left_var(--duration-slow)_var(--ease-out)] data-[state=closed]:animate-[satin-sheet-right_var(--duration-base)_var(--ease-out)]',\n side === 'left' &&\n 'data-[state=open]:animate-[satin-sheet-from-left_var(--duration-slow)_var(--ease-out)] data-[state=closed]:animate-[satin-sheet-to-left_var(--duration-base)_var(--ease-out)]',\n className,\n )}\n >\n {side === 'bottom' && (\n <DialogPrimitive.Close\n aria-label=\"Close\"\n className=\"absolute inset-x-4 top-0 flex h-6 cursor-pointer items-center justify-center rounded-lg outline-none focus-visible:ring-2 focus-visible:ring-action-focus-ring\"\n >\n <span aria-hidden className=\"h-1 w-9 rounded-full bg-border-strong\" />\n </DialogPrimitive.Close>\n )}\n\n <div className={cn('flex flex-col gap-0.5', side !== 'bottom' && 'pr-8')}>\n <DialogPrimitive.Title className=\"text-base leading-[21px] font-medium text-text-default\">{title}</DialogPrimitive.Title>\n {description ? (\n <DialogPrimitive.Description className=\"text-sm text-text-muted\">{description}</DialogPrimitive.Description>\n ) : null}\n </div>\n\n {children != null && <div className=\"flex min-h-0 flex-1 flex-col overflow-y-auto\">{children}</div>}\n\n {footer && (\n <div className={cn('flex shrink-0 items-center justify-end gap-2', side === 'bottom' && '*:flex-1')}>{footer}</div>\n )}\n\n {side !== 'bottom' && (\n <DialogPrimitive.Close asChild>\n <Button variant=\"tertiary\" size=\"xl\" iconOnly aria-label=\"Close\" className=\"absolute top-[7px] right-[7px] rounded-lg\">\n <CloseIcon />\n </Button>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n )\n}\n\n/** Wrap a footer button in this to make it close the sheet: `<SheetClose asChild><Button…/></SheetClose>`. */\nexport const SheetClose = DialogPrimitive.Close\n"]}
|
package/chunk-TVLGZGYN.js
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { Tooltip } from './chunk-B6V4VSGH.js';
|
|
2
|
-
import { cn } from './chunk-H63FYCMY.js';
|
|
3
|
-
import 'react';
|
|
4
|
-
import { cva } from 'class-variance-authority';
|
|
5
|
-
import { jsx } from 'react/jsx-runtime';
|
|
6
|
-
|
|
7
|
-
var avatarVariants = cva(
|
|
8
|
-
"inline-flex shrink-0 items-center justify-center overflow-clip bg-tone-bg text-center whitespace-nowrap text-tone-fg select-none",
|
|
9
|
-
{
|
|
10
|
-
variants: {
|
|
11
|
-
size: {
|
|
12
|
-
16: "size-4 text-[7px] leading-[8px] font-semibold tracking-normal",
|
|
13
|
-
20: "size-5 text-[9px] leading-[10px] font-semibold tracking-normal",
|
|
14
|
-
24: "size-6 text-2xs font-semibold",
|
|
15
|
-
32: "size-8 text-sm leading-4 font-medium tracking-normal",
|
|
16
|
-
40: "size-10 text-base leading-[14px] font-medium tracking-normal",
|
|
17
|
-
48: "size-12 text-lg font-medium"
|
|
18
|
-
},
|
|
19
|
-
shape: {
|
|
20
|
-
circle: "rounded-full",
|
|
21
|
-
rounded: ""
|
|
22
|
-
}
|
|
23
|
-
},
|
|
24
|
-
compoundVariants: [
|
|
25
|
-
{ shape: "rounded", size: 16, className: "rounded-xs" },
|
|
26
|
-
{ shape: "rounded", size: 20, className: "rounded-xs" },
|
|
27
|
-
{ shape: "rounded", size: 24, className: "rounded-sm" },
|
|
28
|
-
{ shape: "rounded", size: 32, className: "rounded-md" },
|
|
29
|
-
{ shape: "rounded", size: 40, className: "rounded-lg" },
|
|
30
|
-
{ shape: "rounded", size: 48, className: "rounded-xl" }
|
|
31
|
-
],
|
|
32
|
-
defaultVariants: { size: 32, shape: "circle" }
|
|
33
|
-
}
|
|
34
|
-
);
|
|
35
|
-
var AVATAR_TOOLTIP_DELAY = 400;
|
|
36
|
-
var AVATAR_TOOLTIP_CLOSE = 150;
|
|
37
|
-
function Avatar({ className, initials, tone = "neutral", size = 32, shape, name, ...props }) {
|
|
38
|
-
const avatar = /* @__PURE__ */ jsx(
|
|
39
|
-
"span",
|
|
40
|
-
{
|
|
41
|
-
"data-slot": "avatar",
|
|
42
|
-
"data-tone": tone,
|
|
43
|
-
...name ? { role: "img", "aria-label": name, tabIndex: 0 } : {},
|
|
44
|
-
className: cn(
|
|
45
|
-
avatarVariants({ size, shape }),
|
|
46
|
-
name && "outline-none focus-visible:[box-shadow:0_0_0_2px_var(--action-focus-ring)]",
|
|
47
|
-
className
|
|
48
|
-
),
|
|
49
|
-
...props,
|
|
50
|
-
children: /* @__PURE__ */ jsx("span", { "aria-hidden": name ? true : void 0, children: initials })
|
|
51
|
-
}
|
|
52
|
-
);
|
|
53
|
-
if (!name) return avatar;
|
|
54
|
-
return /* @__PURE__ */ jsx(Tooltip, { label: name, delay: AVATAR_TOOLTIP_DELAY, closeDelay: AVATAR_TOOLTIP_CLOSE, children: avatar });
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export { AVATAR_TOOLTIP_DELAY, Avatar, avatarVariants };
|
|
58
|
-
//# sourceMappingURL=chunk-TVLGZGYN.js.map
|
|
59
|
-
//# sourceMappingURL=chunk-TVLGZGYN.js.map
|
package/chunk-TVLGZGYN.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/avatar.tsx"],"names":[],"mappings":";;;;;;AAwBA,IAAM,cAAA,GAAiB,GAAA;AAAA,EACrB,kIAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,+DAAA;AAAA,QACJ,EAAA,EAAI,gEAAA;AAAA,QACJ,EAAA,EAAI,+BAAA;AAAA,QACJ,EAAA,EAAI,sDAAA;AAAA,QACJ,EAAA,EAAI,8DAAA;AAAA,QACJ,EAAA,EAAI;AAAA,OACN;AAAA,MACA,KAAA,EAAO;AAAA,QACL,MAAA,EAAQ,cAAA;AAAA,QACR,OAAA,EAAS;AAAA;AACX,KACF;AAAA,IACA,gBAAA,EAAkB;AAAA,MAChB,EAAE,KAAA,EAAO,SAAA,EAAW,IAAA,EAAM,EAAA,EAAI,WAAW,YAAA,EAAa;AAAA,MACtD,EAAE,KAAA,EAAO,SAAA,EAAW,IAAA,EAAM,EAAA,EAAI,WAAW,YAAA,EAAa;AAAA,MACtD,EAAE,KAAA,EAAO,SAAA,EAAW,IAAA,EAAM,EAAA,EAAI,WAAW,YAAA,EAAa;AAAA,MACtD,EAAE,KAAA,EAAO,SAAA,EAAW,IAAA,EAAM,EAAA,EAAI,WAAW,YAAA,EAAa;AAAA,MACtD,EAAE,KAAA,EAAO,SAAA,EAAW,IAAA,EAAM,EAAA,EAAI,WAAW,YAAA,EAAa;AAAA,MACtD,EAAE,KAAA,EAAO,SAAA,EAAW,IAAA,EAAM,EAAA,EAAI,WAAW,YAAA;AAAa,KACxD;AAAA,IACA,eAAA,EAAiB,EAAE,IAAA,EAAM,EAAA,EAAI,OAAO,QAAA;AAAS;AAEjD;AAcO,IAAM,oBAAA,GAAuB;AACpC,IAAM,oBAAA,GAAuB,GAAA;AAEtB,SAAS,MAAA,CAAO,EAAE,SAAA,EAAW,QAAA,EAAU,IAAA,GAAO,SAAA,EAAW,IAAA,GAAO,EAAA,EAAI,KAAA,EAAO,IAAA,EAAM,GAAG,KAAA,EAAM,EAAgB;AAC/G,EAAA,MAAM,MAAA,mBACJ,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,QAAA;AAAA,MACV,WAAA,EAAW,IAAA;AAAA,MACV,GAAI,IAAA,GAAO,EAAE,IAAA,EAAM,KAAA,EAAO,cAAc,IAAA,EAAM,QAAA,EAAU,CAAA,EAAE,GAAI,EAAC;AAAA,MAChE,SAAA,EAAW,EAAA;AAAA,QACT,cAAA,CAAe,EAAE,IAAA,EAAM,KAAA,EAAO,CAAA;AAAA,QAC9B,IAAA,IAAQ,4EAAA;AAAA,QACR;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,8BAAC,MAAA,EAAA,EAAK,aAAA,EAAa,IAAA,GAAO,IAAA,GAAO,QAAY,QAAA,EAAA,QAAA,EAAS;AAAA;AAAA,GACxD;AAEF,EAAA,IAAI,CAAC,MAAM,OAAO,MAAA;AAClB,EAAA,uBACE,GAAA,CAAC,WAAQ,KAAA,EAAO,IAAA,EAAM,OAAO,oBAAA,EAAsB,UAAA,EAAY,sBAC5D,QAAA,EAAA,MAAA,EACH,CAAA;AAEJ","file":"chunk-TVLGZGYN.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../lib/utils'\nimport { Tooltip } 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 */\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\nexport function Avatar({ className, initials, tone = 'neutral', size = 32, shape, name, ...props }: AvatarProps) {\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 >\n <span aria-hidden={name ? true : undefined}>{initials}</span>\n </span>\n )\n if (!name) return avatar\n return (\n <Tooltip label={name} delay={AVATAR_TOOLTIP_DELAY} closeDelay={AVATAR_TOOLTIP_CLOSE}>\n {avatar}\n </Tooltip>\n )\n}\n\nexport { avatarVariants }\n"]}
|
package/chunk-TX3H3QMA.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/decision-card.tsx"],"names":["Fragment"],"mappings":"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","file":"chunk-TX3H3QMA.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { RadioGroup } from 'radix-ui'\nimport { Check, EditPencil, NavArrowLeft, NavArrowRight } from 'iconoir-react'\nimport { cn } from '../lib/utils'\nimport { Button } from './button'\nimport { Checkbox } from './checkbox'\nimport { SLIDE_MS } from './sliding-indicator'\n\n/**\n * DecisionCard, 1:1 with the uiKit `DecisionCard` set (3096:1626) and its `decisionItem` rows\n * (3092:61608): one question an agent asks, its answers, and Skip / Continue.\n *\n * The card is 364 wide, bg/popover, border/default, radius-2xl, shadow-xs. The header is the\n * medium 14/20 title with an optional step navigator (24px icon buttons around \"1/3\"); the\n * footer is a tertiary Skip in text/muted and a primary Continue, 16px above and 12px below.\n *\n * - `radio` / `checkbox`: rows of 20px with 4px padding, hover bg action/secondary, 2px apart.\n * - `chips`: wrapping 28px pills 6px apart; selected ones turn status/brand (fill, border, text).\n * - `ranking`: 10px-radius rows with a grip, a rank dot (primary for #1) and the label. Drag to\n * reorder, or Alt + Arrow keys; the dragged row lifts with border/strong and the md shadow.\n * - `draft`: the agent's text in a bubble (radius-2xl, 4px top-left); Rewrite makes it editable.\n * - `summary`: what the card collapses to once answered, with a Change action.\n *\n * Stepping between questions moves like Pagination: the new title and answers slide in 24px from\n * the side of the step (from the right going forward), the old ones slide the other way and fade\n * out a little faster, and the card eases to its new height, all 300 ms on the kit ease-out. The\n * step navigator and the footer stay put. Stepping again mid-slide carries on from where things\n * are. Under reduced motion the parts only cross-fade (150 ms) and the height snaps.\n */\n\nexport type DecisionOption = {\n value: string\n label: string\n /** 14px icon, used by `chips`. */\n icon?: React.ReactNode\n}\n\nexport type DecisionValue = string | string[]\n\nexport interface DecisionCardProps\n extends Omit<React.ComponentProps<'div'>, 'title' | 'defaultValue' | 'onChange'> {\n type?: 'radio' | 'checkbox' | 'chips' | 'ranking' | 'draft' | 'summary'\n title: string\n /** \"1/3\". Shows the step navigator. */\n step?: string\n onPreviousStep?: () => void\n onNextStep?: () => void\n /** A muted line under the title, e.g. \"Select up to 5\". */\n hint?: string\n options?: DecisionOption[]\n /**\n * radio: the chosen value. checkbox / chips: the chosen values. ranking: every value in order.\n * draft: the text. summary: the values to list.\n */\n value?: DecisionValue\n defaultValue?: DecisionValue\n onValueChange?: (value: DecisionValue) => void\n /** chips: how many can be picked. */\n max?: number\n /** draft: the bold first line of the draft, e.g. the subject. */\n draftTitle?: string\n onContinue?: (value: DecisionValue) => void\n onSkip?: () => void\n /** summary: reopens the question. */\n onEdit?: () => void\n /** draft: called when Rewrite is pressed, after the field becomes editable. */\n onRewrite?: () => void\n continueLabel?: string\n skipLabel?: string\n}\n\nexport function DecisionCard({\n className,\n type = 'radio',\n title,\n step,\n onPreviousStep,\n onNextStep,\n hint,\n options = [],\n value: valueProp,\n defaultValue,\n onValueChange,\n max,\n draftTitle,\n onContinue,\n onSkip,\n onEdit,\n onRewrite,\n continueLabel,\n skipLabel = 'Skip',\n ...props\n}: DecisionCardProps) {\n const [inner, setInner] = React.useState<DecisionValue>(\n () => defaultValue ?? initialValue(type, options),\n )\n // A new question (another step or title) starts from its own default, not the last one's picks.\n const question = step ?? title\n const [innerFor, setInnerFor] = React.useState(question)\n if (innerFor !== question) {\n setInnerFor(question)\n setInner(defaultValue ?? initialValue(type, options))\n }\n const value = valueProp ?? inner\n const set = (next: DecisionValue) => {\n setInner(next)\n onValueChange?.(next)\n }\n const titleId = React.useId()\n const cardRef = React.useRef<HTMLDivElement>(null)\n const titleRef = React.useRef<HTMLDivElement>(null)\n const bodyRef = React.useRef<HTMLDivElement>(null)\n useStepSlide(question, step, cardRef, [titleRef, bodyRef])\n\n const card = cn(\n 'flex w-[364px] max-w-full flex-col overflow-clip rounded-2xl border border-border-default bg-bg-popover',\n '[box-shadow:0_1px_2px_0_var(--effect-shadow-xs)]',\n className,\n )\n\n if (type === 'summary') {\n const values = asArray(value)\n const labels = values.map((v) => options.find((o) => o.value === v)?.label ?? v)\n return (\n <div data-slot=\"decision-card\" data-type=\"summary\" className={card} {...props}>\n <div className=\"flex items-center gap-2.5 py-2.5 pr-2.5 pl-3\">\n <span className=\"flex size-6 shrink-0 items-center justify-center rounded-full bg-action-primary-bg text-action-primary-fg\">\n <Check aria-hidden className=\"size-icon-size-sm [stroke-width:1.875]\" />\n </span>\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <span className=\"truncate text-xs text-text-muted\">{title}</span>\n <span className=\"truncate text-sm font-medium text-text-default\">{labels.join(' · ')}</span>\n </div>\n {onEdit && (\n <Button variant=\"tertiary\" onClick={onEdit} className=\"text-text-muted\" aria-label={`Change ${title}`}>\n Change\n </Button>\n )}\n </div>\n </div>\n )\n }\n\n const empty =\n type === 'radio' ? !value : type === 'checkbox' || type === 'chips' ? asArray(value).length === 0 : false\n\n return (\n <div\n ref={cardRef}\n role=\"group\"\n aria-labelledby={titleId}\n data-slot=\"decision-card\"\n data-type={type}\n className={card}\n {...props}\n >\n <Header\n titleRef={titleRef}\n titleId={titleId}\n title={title}\n step={step}\n hint={hint}\n onPreviousStep={onPreviousStep}\n onNextStep={onNextStep}\n />\n <div className=\"relative\">\n <div ref={bodyRef}>\n\n {type === 'radio' && (\n <RadioGroup.Root\n aria-labelledby={titleId}\n value={typeof value === 'string' ? value : ''}\n onValueChange={set}\n className=\"flex flex-col gap-0.5 px-2\"\n >\n {options.map((option) => (\n <DecisionItem key={option.value}>\n <RadioRow option={option} />\n </DecisionItem>\n ))}\n </RadioGroup.Root>\n )}\n\n {type === 'checkbox' && (\n <div className=\"flex flex-col gap-0.5 px-2\">\n {options.map((option) => {\n const checked = asArray(value).includes(option.value)\n return (\n <DecisionItem key={option.value}>\n <CheckboxRow\n option={option}\n checked={checked}\n onCheckedChange={(on) => set(toggle(asArray(value), option.value, on))}\n />\n </DecisionItem>\n )\n })}\n </div>\n )}\n\n {type === 'chips' && (\n <div className=\"flex flex-wrap gap-1.5 px-3 pb-1\">\n {options.map((option) => {\n const chosen = asArray(value)\n const selected = chosen.includes(option.value)\n const full = max !== undefined && chosen.length >= max && !selected\n return (\n <DecisionChip\n key={option.value}\n option={option}\n selected={selected}\n disabled={full}\n onPressedChange={(on) => set(toggle(chosen, option.value, on))}\n />\n )\n })}\n </div>\n )}\n\n {type === 'ranking' && (\n <Ranking key={question} options={options} value={asArray(value)} onValueChange={set} labelledBy={titleId} />\n )}\n\n {type === 'draft' && (\n <Draft\n key={question}\n title={draftTitle}\n value={typeof value === 'string' ? value : ''}\n onValueChange={set}\n onRewrite={onRewrite}\n onSkip={onSkip}\n onContinue={() => onContinue?.(value)}\n continueLabel={continueLabel ?? 'Use reply'}\n skipLabel={skipLabel}\n />\n )}\n\n </div>\n </div>\n\n {type !== 'draft' && (\n <div className=\"flex items-center justify-end gap-2 px-3 pt-4 pb-3\">\n {onSkip && (\n <Button variant=\"tertiary\" onClick={onSkip} className=\"text-text-muted\">\n {skipLabel}\n </Button>\n )}\n <Button onClick={() => onContinue?.(value)} disabled={empty}>\n {continueLabel ?? 'Continue'}\n </Button>\n </div>\n )}\n </div>\n )\n}\n\nfunction Header({\n titleRef,\n titleId,\n title,\n step,\n hint,\n onPreviousStep,\n onNextStep,\n}: {\n titleRef: React.Ref<HTMLDivElement>\n titleId: string\n title: string\n step?: string\n hint?: string\n onPreviousStep?: () => void\n onNextStep?: () => void\n}) {\n return (\n <div className=\"flex items-start gap-0.5 py-3 pr-px pl-3\">\n {/* The title and hint move with the question; the step navigator stays. */}\n <div className=\"relative min-w-0 flex-1\">\n <div ref={titleRef} className=\"flex flex-col gap-0.5\">\n <p id={titleId} className=\"text-base leading-5 font-medium tracking-normal text-text-default\">\n {title}\n </p>\n {hint && <p className=\"text-base text-text-muted\">{hint}</p>}\n </div>\n </div>\n {step && (\n <div className=\"flex h-[21px] shrink-0 items-center gap-1 pr-2\">\n <Button\n variant=\"tertiary\"\n size=\"xs\"\n shape=\"rounded\"\n iconOnly\n aria-label=\"Previous question\"\n disabled={!onPreviousStep}\n onClick={onPreviousStep}\n >\n <NavArrowLeft aria-hidden />\n </Button>\n <span aria-live=\"polite\" className=\"text-sm whitespace-nowrap text-text-muted tabular-nums\">{step}</span>\n <Button\n variant=\"tertiary\"\n size=\"xs\"\n shape=\"rounded\"\n iconOnly\n aria-label=\"Next question\"\n disabled={!onNextStep}\n onClick={onNextStep}\n >\n <NavArrowRight aria-hidden />\n </Button>\n </div>\n )}\n </div>\n )\n}\n\nconst SLIDE_PX = 24\nconst EASE = 'cubic-bezier(0.23, 1, 0.32, 1)'\n\n/**\n * Slides the parts in `refs` when `key` changes, the way Pagination moves its pages: each part\n * comes in SLIDE_PX from the side of the step while a copy of how it looked slides out the other\n * way and fades, and the card eases between its old and new height. The direction comes from the\n * \"2/3\" step; without one it moves forward.\n */\nfunction useStepSlide(\n key: string,\n step: string | undefined,\n cardRef: React.RefObject<HTMLDivElement | null>,\n refs: React.RefObject<HTMLDivElement | null>[],\n) {\n const last = React.useRef<{ key: string; index: number; height: number; copies: (Node | null)[] } | null>(null)\n const index = step ? parseInt(step, 10) || 0 : 0\n\n React.useLayoutEffect(() => {\n const card = cardRef.current\n const prev = last.current\n // The card's own height, not a frame of a running resize.\n let height = card && card.getAnimations().length > 0 && prev ? prev.height : (card?.getBoundingClientRect().height ?? 0)\n const reduce = typeof window !== 'undefined' && window.matchMedia?.('(prefers-reduced-motion: reduce)').matches\n\n if (card && prev && prev.key !== key) {\n const sign = index < prev.index ? -1 : 1\n // Under reduced motion the parts only cross-fade, quicker, and the card snaps to its height.\n const dx = reduce ? 0 : SLIDE_PX\n const timing: KeyframeAnimationOptions = { duration: reduce ? 150 : SLIDE_MS, easing: EASE }\n refs.forEach((ref, i) => {\n const el = ref.current\n const copy = prev.copies[i] as HTMLElement | null\n if (!el) return\n // Stepping again mid-slide: the copy leaves from where the part was, not from rest.\n const midway = el.getAnimations().length > 0\n const from = midway ? getComputedStyle(el) : null\n const start: Keyframe = { transform: from?.transform && from.transform !== 'none' ? from.transform : 'none', opacity: from ? Number(from.opacity) : 1 }\n el.getAnimations().forEach((a) => a.cancel())\n el.parentElement?.querySelectorAll(':scope > [data-step-copy]').forEach((n) => n.remove())\n el.animate([{ transform: `translateX(${sign * dx}px)`, opacity: 0 }, { transform: 'none', opacity: 1 }], timing)\n const host = el.parentElement\n if (!copy || !host) return\n copy.setAttribute('data-step-copy', '')\n copy.setAttribute('aria-hidden', 'true')\n copy.setAttribute('inert', '')\n copy.querySelectorAll('[id]').forEach((n) => n.removeAttribute('id'))\n copy.style.cssText += ';position:absolute;top:0;left:0;right:0;pointer-events:none'\n host.appendChild(copy)\n copy\n .animate([start, { transform: `translateX(${-sign * dx}px)`, opacity: 0 }], {\n ...timing,\n duration: (timing.duration as number) * 0.6,\n })\n .finished.then(\n () => copy.remove(),\n () => copy.remove(),\n )\n })\n // Mid-resize, the card goes on from the height it shows now.\n const running = card.getAnimations().length > 0\n const fromHeight = running ? card.getBoundingClientRect().height : prev.height\n card.getAnimations().forEach((a) => a.cancel())\n const toHeight = card.getBoundingClientRect().height\n height = toHeight\n if (!reduce && Math.abs(fromHeight - toHeight) > 0.5) {\n card.animate([{ height: `${fromHeight}px` }, { height: `${toHeight}px` }], timing)\n }\n }\n\n last.current = { key, index, height, copies: refs.map((r) => r.current?.cloneNode(true) ?? null) }\n })\n}\n\n/** `decisionItem` (3092:61608): 4px padding, radius-md, action/secondary fill on hover. */\nfunction DecisionItem({ children, 'data-force': force }: { children: React.ReactNode; 'data-force'?: 'hover' }) {\n return (\n <div\n data-force={force}\n className=\"rounded-md p-1 transition-[background-color] duration-(--duration-fast) ease-(--ease-out) satin-hover:bg-action-secondary-bg\"\n >\n {children}\n </div>\n )\n}\n\nfunction RadioRow({ option }: { option: DecisionOption }) {\n const id = React.useId()\n return (\n <div className=\"flex h-5 items-center gap-2\">\n <RadioGroup.Item\n id={id}\n value={option.value}\n className={cn(\n 'flex size-4 shrink-0 items-center justify-center rounded-full border border-border-strong bg-bg-field outline-none',\n '[box-shadow:0_1px_2px_0_var(--effect-shadow-xs)]',\n 'transition-[background-color,border-color,box-shadow] duration-(--duration-fast) ease-(--ease-out)',\n 'data-[state=checked]:border-action-primary-bg data-[state=checked]:bg-action-primary-bg data-[state=checked]:[box-shadow:none]',\n 'focus-visible:[box-shadow:0_0_0_2px_var(--action-focus-ring)] data-[state=checked]:focus-visible:[box-shadow:0_0_0_2px_var(--action-focus-ring)]',\n )}\n >\n <RadioGroup.Indicator className=\"size-1.5 rounded-full bg-text-on-solid\" />\n </RadioGroup.Item>\n <label htmlFor={id} className=\"min-w-0 flex-1 text-base text-text-default\">\n {option.label}\n </label>\n </div>\n )\n}\n\nfunction CheckboxRow({\n option,\n checked,\n onCheckedChange,\n}: {\n option: DecisionOption\n checked: boolean\n onCheckedChange: (checked: boolean) => void\n}) {\n const id = React.useId()\n return (\n <div className=\"flex h-5 items-center gap-2\">\n <Checkbox id={id} checked={checked} onCheckedChange={(c) => onCheckedChange(c === true)} />\n <label htmlFor={id} className=\"min-w-0 flex-1 text-base text-text-default\">\n {option.label}\n </label>\n </div>\n )\n}\n\nfunction DecisionChip({\n option,\n selected,\n disabled,\n onPressedChange,\n}: {\n option: DecisionOption\n selected: boolean\n disabled?: boolean\n onPressedChange: (pressed: boolean) => void\n}) {\n return (\n <button\n type=\"button\"\n aria-pressed={selected}\n disabled={disabled}\n onClick={() => onPressedChange(!selected)}\n className={cn(\n 'inline-flex h-control-height shrink-0 items-center gap-1.5 rounded-pill border pr-2.5 pl-2 text-base font-medium outline-none select-none',\n 'transition-[background-color,border-color,color,box-shadow,transform] duration-(--duration-fast) ease-(--ease-out) active:scale-[0.97]',\n '[&_svg]:size-icon-size-sm [&_svg]:shrink-0 [&_svg]:[stroke-width:1.875]',\n 'focus-visible:[box-shadow:0_0_0_2px_var(--action-focus-ring)]',\n 'disabled:pointer-events-none disabled:opacity-50',\n selected\n ? 'border-status-brand-fg bg-status-brand-bg text-status-brand-fg'\n : 'border-border-default bg-bg-popover text-text-default hover:border-border-strong [&_svg]:text-text-muted',\n )}\n >\n {option.icon}\n {option.label}\n </button>\n )\n}\n\nfunction Ranking({\n options,\n value,\n onValueChange,\n labelledBy,\n}: {\n options: DecisionOption[]\n value: string[]\n onValueChange: (value: string[]) => void\n labelledBy: string\n}) {\n const order = value.length ? value : options.map((o) => o.value)\n const [dragging, setDragging] = React.useState<string | null>(null)\n const [announcement, setAnnouncement] = React.useState('')\n const listRef = React.useRef<HTMLOListElement>(null)\n const label = (v: string) => options.find((o) => o.value === v)?.label ?? v\n\n const move = (from: number, to: number) => {\n if (to < 0 || to >= order.length || from === to) return\n const next = [...order]\n const [item] = next.splice(from, 1)\n next.splice(to, 0, item)\n onValueChange(next)\n return next\n }\n\n const onPointerDown = (e: React.PointerEvent<HTMLLIElement>, item: string) => {\n if (e.button !== 0) return\n e.currentTarget.setPointerCapture(e.pointerId)\n setDragging(item)\n }\n const onPointerMove = (e: React.PointerEvent<HTMLLIElement>) => {\n if (!dragging || !listRef.current) return\n const rows = Array.from(listRef.current.children) as HTMLElement[]\n const from = order.indexOf(dragging)\n let to = from\n rows.forEach((row, i) => {\n const box = row.getBoundingClientRect()\n const mid = box.top + box.height / 2\n if (i < from && e.clientY < mid) to = Math.min(to, i)\n if (i > from && e.clientY > mid) to = Math.max(to, i)\n })\n if (to !== from) move(from, to)\n }\n const onPointerUp = () => {\n if (dragging) setAnnouncement(`${label(dragging)}, position ${order.indexOf(dragging) + 1} of ${order.length}`)\n setDragging(null)\n }\n\n const onKeyDown = (e: React.KeyboardEvent<HTMLLIElement>, index: number) => {\n if (e.key !== 'ArrowUp' && e.key !== 'ArrowDown') return\n e.preventDefault()\n const to = index + (e.key === 'ArrowUp' ? -1 : 1)\n if (e.altKey) {\n const next = move(index, to)\n if (next) {\n setAnnouncement(`${label(next[to])}, position ${to + 1} of ${next.length}`)\n requestAnimationFrame(() => (listRef.current?.children[to] as HTMLElement | undefined)?.focus())\n }\n } else {\n ;(listRef.current?.children[to] as HTMLElement | undefined)?.focus()\n }\n }\n\n return (\n <div className=\"px-3 pb-1\">\n <ol ref={listRef} aria-labelledby={labelledBy} className=\"flex flex-col gap-1.5\">\n {order.map((item, i) => {\n const lifted = dragging === item\n return (\n <li\n key={item}\n tabIndex={0}\n aria-roledescription=\"sortable item\"\n aria-description=\"Alt and arrow keys to move\"\n data-dragging={lifted || undefined}\n onPointerDown={(e) => onPointerDown(e, item)}\n onPointerMove={onPointerMove}\n onPointerUp={onPointerUp}\n onPointerCancel={onPointerUp}\n onKeyDown={(e) => onKeyDown(e, i)}\n className={cn(\n 'group/rank flex cursor-grab touch-none items-center gap-2 rounded-lg border border-border-default bg-bg-popover py-2 pr-2.5 pl-2 outline-none select-none',\n 'transition-[border-color,box-shadow] duration-(--duration-fast) ease-(--ease-out)',\n 'hover:border-border-strong focus-visible:[box-shadow:0_0_0_2px_var(--action-focus-ring)]',\n 'data-dragging:cursor-grabbing data-dragging:border-border-strong',\n 'data-dragging:[box-shadow:0_4px_6px_-1px_var(--effect-shadow-sm),0_2px_4px_-2px_var(--effect-shadow-sm)]',\n )}\n >\n <Grip />\n <span\n className={cn(\n 'flex size-5 shrink-0 items-center justify-center rounded-full text-xs tabular-nums',\n i === 0 ? 'bg-action-primary-bg text-action-primary-fg' : 'bg-bg-muted text-text-muted',\n )}\n >\n {i + 1}\n </span>\n <span className=\"min-w-0 flex-1 text-base font-medium text-text-default\">{label(item)}</span>\n </li>\n )\n })}\n </ol>\n <span aria-live=\"polite\" className=\"sr-only\">\n {announcement}\n </span>\n </div>\n )\n}\n\n/** The 8 × 14 six-dot grip from Figma: text/subtle at rest, text/muted while dragging. */\nfunction Grip() {\n return (\n <svg\n width=\"8\"\n height=\"14\"\n viewBox=\"0 0 8 14\"\n aria-hidden\n className=\"shrink-0 fill-current text-text-subtle group-data-dragging/rank:text-text-muted\"\n >\n {[1.25, 6.75, 12.25].map((cy) => (\n <React.Fragment key={cy}>\n <circle cx=\"1.25\" cy={cy} r=\"1.25\" />\n <circle cx=\"6.25\" cy={cy} r=\"1.25\" />\n </React.Fragment>\n ))}\n </svg>\n )\n}\n\nfunction Draft({\n title,\n value,\n onValueChange,\n onRewrite,\n onSkip,\n onContinue,\n continueLabel,\n skipLabel,\n}: {\n title?: string\n value: string\n onValueChange: (value: string) => void\n onRewrite?: () => void\n onSkip?: () => void\n onContinue: () => void\n continueLabel: string\n skipLabel: string\n}) {\n const [editing, setEditing] = React.useState(false)\n const areaRef = React.useRef<HTMLTextAreaElement>(null)\n\n React.useLayoutEffect(() => {\n const el = areaRef.current\n if (!el) return\n el.style.height = '0px'\n el.style.height = `${el.scrollHeight}px`\n }, [value, editing])\n\n return (\n <>\n <div className=\"px-3 pb-1\">\n <div\n className={cn(\n 'flex flex-col gap-2 rounded-2xl rounded-tl-[4px] border border-border-default bg-bg-popover px-3 py-2.5 text-base text-text-default',\n '[box-shadow:0_1px_2px_0_var(--effect-shadow-xs)]',\n 'transition-[box-shadow,border-color] duration-(--duration-fast) ease-(--ease-out)',\n 'has-[textarea:focus-visible]:border-border-strong has-[textarea:focus-visible]:[box-shadow:0_0_0_2px_var(--action-focus-ring)]',\n )}\n >\n {title && <p className=\"leading-[18px] font-medium\">{title}</p>}\n {editing ? (\n <textarea\n ref={areaRef}\n aria-label=\"Draft\"\n value={value}\n onChange={(e) => onValueChange(e.target.value)}\n className=\"w-full resize-none bg-transparent outline-none\"\n />\n ) : (\n <p className=\"whitespace-pre-wrap\">{value}</p>\n )}\n </div>\n </div>\n <div className=\"flex items-center justify-between gap-2 px-3 pt-4 pb-3\">\n <Button\n variant=\"tertiary\"\n className=\"text-text-muted\"\n aria-pressed={editing}\n onClick={() => {\n setEditing(true)\n requestAnimationFrame(() => areaRef.current?.focus())\n onRewrite?.()\n }}\n >\n <EditPencil aria-hidden />\n Rewrite\n </Button>\n <div className=\"flex items-center gap-2\">\n {onSkip && (\n <Button variant=\"tertiary\" onClick={onSkip} className=\"text-text-muted\">\n {skipLabel}\n </Button>\n )}\n <Button onClick={onContinue} disabled={!value.trim()}>\n {continueLabel}\n </Button>\n </div>\n </div>\n </>\n )\n}\n\n/** A static `decisionItem` row in its hover state, for state sheets. */\nexport function DecisionItemPreview({ children, hover }: { children: React.ReactNode; hover?: boolean }) {\n return <DecisionItem data-force={hover ? 'hover' : undefined}>{children}</DecisionItem>\n}\n\nfunction initialValue(type: DecisionCardProps['type'], options: DecisionOption[]): DecisionValue {\n if (type === 'ranking') return options.map((o) => o.value)\n if (type === 'radio' || type === 'draft') return ''\n return []\n}\n\nfunction asArray(value: DecisionValue | undefined): string[] {\n if (Array.isArray(value)) return value\n return value ? [value] : []\n}\n\nfunction toggle(list: string[], item: string, on: boolean) {\n return on ? (list.includes(item) ? list : [...list, item]) : list.filter((v) => v !== item)\n}\n"]}
|
package/chunk-UBNHSZSE.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/form-field.tsx"],"names":[],"mappings":";;;;AAwBA,IAAM,gBAAA,GAAyB,oBAA4C,IAAI,CAAA;AAGxE,SAAS,YAAA,GAAe;AAC7B,EAAA,OAAa,iBAAW,gBAAgB,CAAA;AAC1C;AAgBO,SAAS,SAAA,CAAU;AAAA,EACxB,KAAA;AAAA,EACA,WAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA,GAAS,UAAA;AAAA,EACT,QAAA,GAAW,KAAA;AAAA,EACX,QAAA,GAAW,KAAA;AAAA,EACX,OAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAmB;AACjB,EAAA,MAAM,SAAe,KAAA,CAAA,KAAA,EAAM;AAC3B,EAAA,MAAM,KAAK,OAAA,IAAW,MAAA;AACtB,EAAA,MAAM,OAAA,GAAU,QAAQ,KAAK,CAAA;AAC7B,EAAA,MAAM,SAAA,GAAY,UAAU,CAAA,EAAG,EAAE,WAAW,WAAA,GAAc,CAAA,EAAG,EAAE,CAAA,YAAA,CAAA,GAAiB,MAAA;AAEhF,EAAA,MAAM,OAAA,GAAgB,KAAA,CAAA,OAAA;AAAA,IACpB,OAAO,EAAE,EAAA,EAAI,aAAa,SAAA,EAAW,OAAA,EAAS,UAAU,QAAA,EAAS,CAAA;AAAA,IACjE,CAAC,EAAA,EAAI,SAAA,EAAW,OAAA,EAAS,UAAU,QAAQ;AAAA,GAC7C;AAEA,EAAA,uBACE,GAAA,CAAC,gBAAA,CAAiB,QAAA,EAAjB,EAA0B,OAAO,OAAA,EAChC,QAAA,kBAAA,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,YAAA;AAAA,MACV,aAAA,EAAa,MAAA;AAAA,MACb,gBAAc,OAAA,IAAW,MAAA;AAAA,MACzB,iBAAe,QAAA,IAAY,MAAA;AAAA,MAC3B,WAAW,EAAA,CAAG,yBAAA,EAA2B,WAAW,UAAA,GAAa,gBAAA,GAAmB,SAAS,SAAS,CAAA;AAAA,MACrG,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,IAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,EAAA;AAAA,YACT,SAAA,EAAW,EAAA;AAAA,cACT,+EAAA;AAAA,cACA,WAAW,YAAA,IAAgB,eAAA;AAAA,cAC3B,QAAA,IAAY;AAAA,aACd;AAAA,YAEC,QAAA,EAAA;AAAA,cAAA,KAAA;AAAA,cACA,QAAA;AAAA,kCAEE,KAAA,EAAA,EAAI,KAAA,EAAM,KAAI,MAAA,EAAO,GAAA,EAAI,SAAQ,SAAA,EAAU,IAAA,EAAK,cAAA,EAAe,aAAA,EAAW,MAAC,SAAA,EAAU,UAAA,EACpF,8BAAC,MAAA,EAAA,EAAK,CAAA,EAAE,iNAAgN,CAAA,EAC1N;AAAA;AAAA;AAAA,SAEJ;AAAA,wBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CAAA,EACZ,QAAA,EAAA;AAAA,UAAA,QAAA;AAAA,UACA,0BACC,IAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAI,SAAA,EAAW,WAAU,6DAAA,EAE1B,QAAA,EAAA;AAAA,4BAAA,IAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAM,IAAA;AAAA,gBACN,MAAA,EAAO,IAAA;AAAA,gBACP,OAAA,EAAQ,WAAA;AAAA,gBACR,IAAA,EAAK,MAAA;AAAA,gBACL,MAAA,EAAO,cAAA;AAAA,gBACP,WAAA,EAAY,SAAA;AAAA,gBACZ,aAAA,EAAc,OAAA;AAAA,gBACd,cAAA,EAAe,OAAA;AAAA,gBACf,aAAA,EAAW,IAAA;AAAA,gBACX,SAAA,EAAU,sBAAA;AAAA,gBAEV,QAAA,EAAA;AAAA,kCAAA,GAAA,CAAC,MAAA,EAAA,EAAK,GAAE,oBAAA,EAAqB,CAAA;AAAA,kCAC7B,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,2BAAA,EAA4B,CAAA;AAAA,kCACpC,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,mNAAA,EAAoN;AAAA;AAAA;AAAA,aAC9N;AAAA,4BACA,GAAA,CAAC,UAAM,QAAA,EAAA,KAAA,EAAM;AAAA,WAAA,EACf,CAAA,GAEA,WAAA,oBACE,GAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAI,SAAA,EAAW,SAAA,EAAW,EAAA,CAAG,yBAAA,EAA2B,QAAA,IAAY,YAAY,CAAA,EAChF,QAAA,EAAA,WAAA,EACH;AAAA,SAAA,EAGN;AAAA;AAAA;AAAA,GACF,EACF,CAAA;AAEJ","file":"chunk-UBNHSZSE.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../lib/utils'\n\n/**\n * Form field, 1:1 with the uiKit `FormField` set (3649:17775): a label, a control slot, then a\n * description or, when `error` is set, an error message in its place. Vertical puts the label\n * 8px above the control; horizontal puts it in a 160px column, 24px to the left. Description\n * and error sit 6px under the control. Disabled dims the label and description to 50% and\n * disables the control.\n *\n * The control is wired through context: Input and Textarea pick up the field's id (so the\n * label points at them), `aria-describedby` (description or error), `aria-invalid` and\n * `disabled`. Any other control can read the same values with `useFormField()`.\n */\nexport interface FormFieldContextValue {\n id: string\n describedBy?: string\n invalid: boolean\n disabled: boolean\n required: boolean\n}\n\nconst FormFieldContext = React.createContext<FormFieldContextValue | null>(null)\n\n/** The id, describedby, invalid, disabled and required of the surrounding FormField, if any. */\nexport function useFormField() {\n return React.useContext(FormFieldContext)\n}\n\nexport interface FormFieldProps extends Omit<React.ComponentProps<'div'>, 'children'> {\n label: React.ReactNode\n description?: React.ReactNode\n /** An error message. It replaces the description and marks the control invalid. */\n error?: React.ReactNode\n layout?: 'vertical' | 'horizontal'\n disabled?: boolean\n /** Shows the required mark after the label and sets `required` on the control. */\n required?: boolean\n /** The id given to the control. Generated when left out. */\n htmlFor?: string\n children: React.ReactNode\n}\n\nexport function FormField({\n label,\n description,\n error,\n layout = 'vertical',\n disabled = false,\n required = false,\n htmlFor,\n className,\n children,\n ...props\n}: FormFieldProps) {\n const autoId = React.useId()\n const id = htmlFor ?? autoId\n const invalid = Boolean(error)\n const messageId = invalid ? `${id}-error` : description ? `${id}-description` : undefined\n\n const context = React.useMemo<FormFieldContextValue>(\n () => ({ id, describedBy: messageId, invalid, disabled, required }),\n [id, messageId, invalid, disabled, required],\n )\n\n return (\n <FormFieldContext.Provider value={context}>\n <div\n data-slot=\"form-field\"\n data-layout={layout}\n data-invalid={invalid || undefined}\n data-disabled={disabled || undefined}\n className={cn('flex w-full items-start', layout === 'vertical' ? 'flex-col gap-2' : 'gap-6', className)}\n {...props}\n >\n <label\n htmlFor={id}\n className={cn(\n 'flex items-start gap-0.5 text-sm leading-[18px] font-medium text-text-default',\n layout === 'horizontal' && 'w-40 shrink-0',\n disabled && 'opacity-50',\n )}\n >\n {label}\n {required && (\n // The required mark from Figma (the `sparkle 2` glyph in _label), 6px, in the label colour.\n <svg width=\"6\" height=\"6\" viewBox=\"0 0 6 6\" fill=\"currentColor\" aria-hidden className=\"shrink-0\">\n <path d=\"M3.63636 2.18023L5.55372 1.41279L6 2.75581L4.04959 3.43605L5.27273 5.14535L4.18182 6L2.95868 4.20349L1.80165 6L0.694215 5.14535L1.91736 3.43605L0 2.75581L0.446281 1.41279L2.31405 2.18023V0H3.63636V2.18023Z\" />\n </svg>\n )}\n </label>\n <div className=\"flex w-full min-w-0 flex-1 flex-col gap-1.5\">\n {children}\n {invalid ? (\n <p id={messageId} className=\"flex items-start gap-1.5 text-sm text-action-destructive-bg\">\n {/* Figma's 14px warning circle at 1.09px. */}\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.09375\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className=\"mt-[2.75px] shrink-0\"\n >\n <path d=\"M7 4.67613V7.25806\" />\n <path d=\"M7 9.32422L7.0059 9.31766\" />\n <path d=\"M6.99995 12.1638C9.85184 12.1638 12.1638 9.85184 12.1638 6.99995C12.1638 4.14803 9.85184 1.83609 6.99995 1.83609C4.14803 1.83609 1.83609 4.14803 1.83609 6.99995C1.83609 9.85184 4.14803 12.1638 6.99995 12.1638Z\" />\n </svg>\n <span>{error}</span>\n </p>\n ) : (\n description && (\n <p id={messageId} className={cn('text-sm text-text-muted', disabled && 'opacity-50')}>\n {description}\n </p>\n )\n )}\n </div>\n </div>\n </FormFieldContext.Provider>\n )\n}\n"]}
|
package/chunk-UC3ZJWOD.js
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { cn } from './chunk-H63FYCMY.js';
|
|
2
|
-
import 'react';
|
|
3
|
-
import { Toggle as Toggle$1 } from 'radix-ui';
|
|
4
|
-
import { cva } from 'class-variance-authority';
|
|
5
|
-
import { jsxs } from 'react/jsx-runtime';
|
|
6
|
-
|
|
7
|
-
var toggleVariants = cva(
|
|
8
|
-
[
|
|
9
|
-
"inline-flex shrink-0 items-center justify-center gap-2 border font-medium whitespace-nowrap select-none text-text-muted",
|
|
10
|
-
"transition-[background-color,border-color,color,box-shadow,border-radius] duration-(--duration-fast) ease-(--ease-out)",
|
|
11
|
-
"focus-visible:outline-none disabled:pointer-events-none disabled:text-text-subtle",
|
|
12
|
-
"satin-hover:text-text-default satin-focus:text-text-default data-[state=on]:text-text-default",
|
|
13
|
-
// Figma icons are 1.25px at 16; on Iconoir's 24 grid that is 1.875.
|
|
14
|
-
"[&_svg]:pointer-events-none [&_svg]:size-icon-size [&_svg]:shrink-0 [&_svg]:[stroke-width:1.875]"
|
|
15
|
-
],
|
|
16
|
-
{
|
|
17
|
-
variants: {
|
|
18
|
-
variant: {
|
|
19
|
-
outline: [
|
|
20
|
-
"rounded-lg border-border-default bg-bg-popover",
|
|
21
|
-
"satin-hover:border-border-strong satin-hover:bg-bg-muted",
|
|
22
|
-
"satin-focus:border-action-primary-bg satin-focus:bg-bg-popover satin-focus:[box-shadow:0_0_0_2px_var(--action-focus-ring)]",
|
|
23
|
-
"data-[state=on]:border-border-strong data-[state=on]:bg-action-secondary-bg-pressed",
|
|
24
|
-
"data-[state=on]:satin-hover:border-border-strong data-[state=on]:satin-hover:bg-action-secondary-bg-pressed",
|
|
25
|
-
"data-[state=on]:satin-focus:border-action-primary-bg data-[state=on]:satin-focus:bg-action-secondary-bg-pressed",
|
|
26
|
-
"disabled:border-border-default disabled:bg-bg-muted",
|
|
27
|
-
"disabled:data-[state=on]:border-border-default disabled:data-[state=on]:bg-action-secondary-bg-pressed"
|
|
28
|
-
],
|
|
29
|
-
ghost: [
|
|
30
|
-
"rounded-md border-transparent bg-transparent",
|
|
31
|
-
"satin-hover:rounded-lg satin-hover:bg-bg-muted",
|
|
32
|
-
// Figma's ghost focus is the primary border alone (its ring is 0px); pressed + focus has the ring.
|
|
33
|
-
"satin-focus:rounded-lg satin-focus:border-action-primary-bg satin-focus:[box-shadow:none]",
|
|
34
|
-
"data-[state=on]:rounded-lg data-[state=on]:bg-action-secondary-bg-pressed",
|
|
35
|
-
"data-[state=on]:satin-hover:bg-action-secondary-bg-pressed",
|
|
36
|
-
"data-[state=on]:satin-focus:[box-shadow:0_0_0_2px_var(--action-focus-ring)]",
|
|
37
|
-
"disabled:rounded-md disabled:data-[state=on]:rounded-md"
|
|
38
|
-
]
|
|
39
|
-
},
|
|
40
|
-
size: {
|
|
41
|
-
md: "h-control-height-lg px-2.5 text-base",
|
|
42
|
-
sm: "h-control-height px-2.5 text-sm leading-[18px]"
|
|
43
|
-
},
|
|
44
|
-
iconOnly: {
|
|
45
|
-
true: "px-0",
|
|
46
|
-
false: ""
|
|
47
|
-
}
|
|
48
|
-
},
|
|
49
|
-
compoundVariants: [
|
|
50
|
-
{ iconOnly: true, size: "md", className: "w-control-height-lg" },
|
|
51
|
-
{ iconOnly: true, size: "sm", className: "w-control-height" }
|
|
52
|
-
],
|
|
53
|
-
defaultVariants: { variant: "outline", size: "md", iconOnly: false }
|
|
54
|
-
}
|
|
55
|
-
);
|
|
56
|
-
function Toggle({ className, variant, size, iconOnly, icon, children, ...props }) {
|
|
57
|
-
return /* @__PURE__ */ jsxs(
|
|
58
|
-
Toggle$1.Root,
|
|
59
|
-
{
|
|
60
|
-
"data-slot": "toggle",
|
|
61
|
-
className: cn(toggleVariants({ variant, size, iconOnly }), className),
|
|
62
|
-
...props,
|
|
63
|
-
children: [
|
|
64
|
-
icon,
|
|
65
|
-
!iconOnly && children
|
|
66
|
-
]
|
|
67
|
-
}
|
|
68
|
-
);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
export { Toggle, toggleVariants };
|
|
72
|
-
//# sourceMappingURL=chunk-UC3ZJWOD.js.map
|
|
73
|
-
//# sourceMappingURL=chunk-UC3ZJWOD.js.map
|
package/chunk-UC3ZJWOD.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/toggle.tsx"],"names":["TogglePrimitive"],"mappings":";;;;;;AAqBA,IAAM,cAAA,GAAiB,GAAA;AAAA,EACrB;AAAA,IACE,yHAAA;AAAA,IACA,wHAAA;AAAA,IACA,mFAAA;AAAA,IACA,+FAAA;AAAA;AAAA,IAEA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS;AAAA,UACP,gDAAA;AAAA,UACA,0DAAA;AAAA,UACA,4HAAA;AAAA,UACA,qFAAA;AAAA,UACA,6GAAA;AAAA,UACA,iHAAA;AAAA,UACA,qDAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,KAAA,EAAO;AAAA,UACL,8CAAA;AAAA,UACA,gDAAA;AAAA;AAAA,UAEA,2FAAA;AAAA,UACA,2EAAA;AAAA,UACA,4DAAA;AAAA,UACA,6EAAA;AAAA,UACA;AAAA;AACF,OACF;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,sCAAA;AAAA,QACJ,EAAA,EAAI;AAAA,OACN;AAAA,MACA,QAAA,EAAU;AAAA,QACR,IAAA,EAAM,MAAA;AAAA,QACN,KAAA,EAAO;AAAA;AACT,KACF;AAAA,IACA,gBAAA,EAAkB;AAAA,MAChB,EAAE,QAAA,EAAU,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,WAAW,qBAAA,EAAsB;AAAA,MAC/D,EAAE,QAAA,EAAU,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,WAAW,kBAAA;AAAmB,KAC9D;AAAA,IACA,iBAAiB,EAAE,OAAA,EAAS,WAAW,IAAA,EAAM,IAAA,EAAM,UAAU,KAAA;AAAM;AAEvE;AAWO,SAAS,MAAA,CAAO,EAAE,SAAA,EAAW,OAAA,EAAS,IAAA,EAAM,UAAU,IAAA,EAAM,QAAA,EAAU,GAAG,KAAA,EAAM,EAAgB;AACpG,EAAA,uBACE,IAAA;AAAA,IAACA,QAAA,CAAgB,IAAA;AAAA,IAAhB;AAAA,MACC,WAAA,EAAU,QAAA;AAAA,MACV,SAAA,EAAW,GAAG,cAAA,CAAe,EAAE,SAAS,IAAA,EAAM,QAAA,EAAU,CAAA,EAAG,SAAS,CAAA;AAAA,MACnE,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,IAAA;AAAA,QACA,CAAC,QAAA,IAAY;AAAA;AAAA;AAAA,GAChB;AAEJ","file":"chunk-UC3ZJWOD.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { Toggle as TogglePrimitive } from 'radix-ui'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../lib/utils'\n\n/**\n * Toggle, 1:1 with the uiKit `Toggle` set (852:21771): a button that stays pressed. Two\n * variants, outline (bg/popover, border/default, radius-lg) and ghost (no fill, radius-md),\n * two sizes, md 32 (14/21) and sm 28 (13/18), 10px side padding, a 16px icon 8px from the\n * label, and a square icon-only form.\n *\n * At rest the label and icon are text/muted. Hover: bg/muted (outline adds border/strong).\n * Focus: an action/primary border, plus the 2px focus ring on outline. Pressed:\n * action/secondary/bg-pressed (outline with border/strong), text/default; pressed + focus\n * adds the ring on both. Disabled: text/subtle, outline on bg/muted. Ghost rounds to radius-lg\n * whenever it is hovered, focused or pressed, as in Figma.\n *\n * States use satin-hover / satin-focus (or data-force), pressed is Radix's data-state=\"on\".\n */\nconst toggleVariants = cva(\n [\n 'inline-flex shrink-0 items-center justify-center gap-2 border font-medium whitespace-nowrap select-none text-text-muted',\n 'transition-[background-color,border-color,color,box-shadow,border-radius] duration-(--duration-fast) ease-(--ease-out)',\n 'focus-visible:outline-none disabled:pointer-events-none disabled:text-text-subtle',\n 'satin-hover:text-text-default satin-focus:text-text-default data-[state=on]:text-text-default',\n // Figma icons are 1.25px at 16; on Iconoir's 24 grid that is 1.875.\n '[&_svg]:pointer-events-none [&_svg]:size-icon-size [&_svg]:shrink-0 [&_svg]:[stroke-width:1.875]',\n ],\n {\n variants: {\n variant: {\n outline: [\n 'rounded-lg border-border-default bg-bg-popover',\n 'satin-hover:border-border-strong satin-hover:bg-bg-muted',\n 'satin-focus:border-action-primary-bg satin-focus:bg-bg-popover satin-focus:[box-shadow:0_0_0_2px_var(--action-focus-ring)]',\n 'data-[state=on]:border-border-strong data-[state=on]:bg-action-secondary-bg-pressed',\n 'data-[state=on]:satin-hover:border-border-strong data-[state=on]:satin-hover:bg-action-secondary-bg-pressed',\n 'data-[state=on]:satin-focus:border-action-primary-bg data-[state=on]:satin-focus:bg-action-secondary-bg-pressed',\n 'disabled:border-border-default disabled:bg-bg-muted',\n 'disabled:data-[state=on]:border-border-default disabled:data-[state=on]:bg-action-secondary-bg-pressed',\n ],\n ghost: [\n 'rounded-md border-transparent bg-transparent',\n 'satin-hover:rounded-lg satin-hover:bg-bg-muted',\n // Figma's ghost focus is the primary border alone (its ring is 0px); pressed + focus has the ring.\n 'satin-focus:rounded-lg satin-focus:border-action-primary-bg satin-focus:[box-shadow:none]',\n 'data-[state=on]:rounded-lg data-[state=on]:bg-action-secondary-bg-pressed',\n 'data-[state=on]:satin-hover:bg-action-secondary-bg-pressed',\n 'data-[state=on]:satin-focus:[box-shadow:0_0_0_2px_var(--action-focus-ring)]',\n 'disabled:rounded-md disabled:data-[state=on]:rounded-md',\n ],\n },\n size: {\n md: 'h-control-height-lg px-2.5 text-base',\n sm: 'h-control-height px-2.5 text-sm leading-[18px]',\n },\n iconOnly: {\n true: 'px-0',\n false: '',\n },\n },\n compoundVariants: [\n { iconOnly: true, size: 'md', className: 'w-control-height-lg' },\n { iconOnly: true, size: 'sm', className: 'w-control-height' },\n ],\n defaultVariants: { variant: 'outline', size: 'md', iconOnly: false },\n },\n)\n\nexport interface ToggleProps\n extends React.ComponentProps<typeof TogglePrimitive.Root>,\n VariantProps<typeof toggleVariants> {\n /** A 16px icon before the label, or the only content when `iconOnly` (then pass an aria-label). */\n icon?: React.ReactNode\n /** Show a state without interacting, for state sheets. */\n 'data-force'?: 'hover' | 'focus'\n}\n\nexport function Toggle({ className, variant, size, iconOnly, icon, children, ...props }: ToggleProps) {\n return (\n <TogglePrimitive.Root\n data-slot=\"toggle\"\n className={cn(toggleVariants({ variant, size, iconOnly }), className)}\n {...props}\n >\n {icon}\n {!iconOnly && children}\n </TogglePrimitive.Root>\n )\n}\n\nexport { toggleVariants }\n"]}
|
package/chunk-UGRSWP6U.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/search-bar.tsx"],"names":["SearchBar"],"mappings":";;;;;;AA0BO,IAAM,YAAkB,KAAA,CAAA,UAAA,CAA6C,SAASA,UAAAA,CACnF,EAAE,WAAW,IAAA,EAAM,MAAA,GAAS,QAAA,EAAU,gBAAA,EAAkB,WAAW,WAAA,GAAc,WAAA,EAAa,WAAW,GAAG,KAAA,IAC5G,SAAA,EACA;AACA,EAAA,MAAM,KAAA,GAAc,aAAyB,IAAI,CAAA;AACjD,EAAM,KAAA,CAAA,mBAAA,CAAoB,SAAA,EAAW,MAAM,KAAA,CAAM,OAA2B,CAAA;AAE5E,EAAM,gBAAU,MAAM;AACpB,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,KAAqB;AAClC,MAAA,IAAA,CAAK,CAAA,CAAE,WAAW,CAAA,CAAE,OAAA,KAAY,EAAE,GAAA,CAAI,WAAA,OAAkB,GAAA,EAAK;AAC3D,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,KAAA,CAAM,SAAS,KAAA,EAAM;AACrB,QAAA,KAAA,CAAM,SAAS,MAAA,EAAO;AAAA,MACxB;AAAA,IACF,CAAA;AACA,IAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,KAAK,CAAA;AAC1C,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,SAAA,EAAW,KAAK,CAAA;AAAA,EAC5D,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,uBACE,IAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,YAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,wHAAA;AAAA,QACA,oIAAA;AAAA,QACA,4BAAA;AAAA,QACA,yHAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,MAAA,EAAA,EAAO,aAAA,EAAW,IAAA,EAAC,SAAA,EAAU,sDAAA,EAAuD,CAAA;AAAA,wBACrF,GAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,KAAA;AAAA,YACL,IAAA,EAAK,QAAA;AAAA,YACL,WAAA;AAAA,YACA,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,cAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,QAAA,IAAY,CAAA,CAAE,cAAc,KAAA,EAAO;AAC/C,gBAAA,CAAA,CAAE,cAAA,EAAe;AACjB,gBAAA,MAAM,MAAM,MAAA,CAAO,wBAAA,CAAyB,gBAAA,CAAiB,SAAA,EAAW,OAAO,CAAA,EAAG,GAAA;AAClF,gBAAA,GAAA,EAAK,IAAA,CAAK,CAAA,CAAE,aAAA,EAAe,EAAE,CAAA;AAC7B,gBAAA,CAAA,CAAE,aAAA,CAAc,cAAc,IAAI,KAAA,CAAM,SAAS,EAAE,OAAA,EAAS,IAAA,EAAM,CAAC,CAAA;AAAA,cACrE;AACA,cAAA,SAAA,GAAY,CAAC,CAAA;AAAA,YACf,CAAA;AAAA,YACA,SAAA,EAAW,EAAA;AAAA,cACT,uHAAA;AAAA,cACA,mDAAA;AAAA,cACA;AAAA,aACF;AAAA,YACC,GAAG;AAAA;AAAA,SACN;AAAA,QACC,4BACC,IAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAW,IAAA,EAAC,WAAU,oCAAA,EAC1B,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,OAAI,QAAA,EAAA,QAAA,EAAC,CAAA;AAAA,0BACN,GAAA,CAAC,OAAI,QAAA,EAAA,GAAA,EAAC;AAAA,SAAA,EACR;AAAA;AAAA;AAAA,GAEJ;AAEJ,CAAC","file":"chunk-UGRSWP6U.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { Search } from 'iconoir-react'\nimport { cn } from '../lib/utils'\nimport { Kbd } from './kbd'\n\n/**\n * SearchBar, 1:1 with the uiKit `searchBar` (3233:18871): a 32px field for the sidebar that\n * fills its container. A 16px search icon in text/muted, 13px text (placeholder text/subtle),\n * 8px padding and gaps, radius-lg, border/default on bg/card with the xs shadow; hover takes\n * border/strong, focus border/focus with the 2px focus ring. The ⌘K keys (Kbd sm) can be hidden\n * with `shortcut={false}`.\n *\n * With `shortcut`, ⌘K or Ctrl+K anywhere on the page focuses it; Escape clears it.\n */\nexport interface SearchBarProps extends Omit<React.ComponentProps<'input'>, 'size'> {\n /** Show the ⌘K keycaps and listen for the shortcut. */\n shortcut?: boolean\n /** Listen for ⌘K / Ctrl+K. Defaults to `shortcut`; turn it off when something else owns the\n * shortcut (a Command menu this bar opens) but the keycaps should still show. */\n hotkey?: boolean\n /** Classes for the outer field; `className` styles the input. */\n wrapperClassName?: string\n}\n\nexport const SearchBar = React.forwardRef<HTMLInputElement, SearchBarProps>(function SearchBar(\n { shortcut = true, hotkey = shortcut, wrapperClassName, className, placeholder = 'Search...', onKeyDown, ...props },\n forwarded,\n) {\n const inner = React.useRef<HTMLInputElement>(null)\n React.useImperativeHandle(forwarded, () => inner.current as HTMLInputElement)\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 inner.current?.focus()\n inner.current?.select()\n }\n }\n document.addEventListener('keydown', onKey)\n return () => document.removeEventListener('keydown', onKey)\n }, [hotkey])\n\n return (\n <label\n data-slot=\"search-bar\"\n className={cn(\n 'flex h-control-height-lg w-full cursor-text items-center gap-2 rounded-lg border border-border-default bg-bg-card px-2',\n '[box-shadow:0_1px_1px_0_var(--effect-shadow-xs)] transition-[border-color,box-shadow] duration-(--duration-fast) ease-(--ease-out)',\n 'hover:border-border-strong',\n 'has-[input:focus-visible]:border-border-focus has-[input:focus-visible]:[box-shadow:0_0_0_2px_var(--action-focus-ring)]',\n wrapperClassName,\n )}\n >\n <Search aria-hidden className=\"size-4 shrink-0 text-text-muted [stroke-width:1.875]\" />\n <input\n ref={inner}\n type=\"search\"\n placeholder={placeholder}\n onKeyDown={(e) => {\n if (e.key === 'Escape' && e.currentTarget.value) {\n e.preventDefault()\n const set = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set\n set?.call(e.currentTarget, '')\n e.currentTarget.dispatchEvent(new Event('input', { bubbles: true }))\n }\n onKeyDown?.(e)\n }}\n className={cn(\n 'min-w-0 flex-1 bg-transparent text-sm text-text-default outline-none placeholder:text-text-muted focus-visible:ring-0',\n '[&::-webkit-search-cancel-button]:appearance-none',\n className,\n )}\n {...props}\n />\n {shortcut && (\n <span aria-hidden className=\"flex shrink-0 items-center gap-0.5\">\n <Kbd>⌘</Kbd>\n <Kbd>K</Kbd>\n </span>\n )}\n </label>\n )\n})\n"]}
|