@uisatin/ui 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (309) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +10 -1
  3. package/chunk-3DHJXU45.js +147 -0
  4. package/{chunk-6YXUBP27.js → chunk-5725MFGQ.js} +72 -67
  5. package/{chunk-BKZBWPUH.js → chunk-57QEOCDZ.js} +9 -11
  6. package/{chunk-RTJ76X5U.js → chunk-5KTBSMQU.js} +2 -4
  7. package/{chunk-B2K45IUR.js → chunk-5XTUFBZI.js} +5 -7
  8. package/{chunk-LW3TRU5W.js → chunk-674SRBZK.js} +28 -16
  9. package/{chunk-XZNHT6MO.js → chunk-6VKV36OK.js} +115 -61
  10. package/{chunk-GICKPMJU.js → chunk-73Z7NMQQ.js} +31 -31
  11. package/chunk-7Q76HLRQ.js +128 -0
  12. package/{chunk-JPNWHWAQ.js → chunk-AIMQNLPY.js} +38 -35
  13. package/{chunk-MYEZXZZC.js → chunk-BN7FDKCJ.js} +23 -25
  14. package/{chunk-3DINAQLL.js → chunk-BR2B4OIT.js} +33 -29
  15. package/{chunk-2HKBZFIK.js → chunk-CGOH5IYX.js} +31 -31
  16. package/chunk-CVNRZ2YV.js +112 -0
  17. package/{chunk-QUF2IPOZ.js → chunk-DPYIBFQD.js} +12 -14
  18. package/chunk-EF5GT4OG.js +87 -0
  19. package/chunk-FAJ3OVL4.js +37 -0
  20. package/{chunk-L6NCCSIP.js → chunk-FB5HTCO2.js} +36 -29
  21. package/chunk-GI2SMFZL.js +55 -0
  22. package/{chunk-B6V4VSGH.js → chunk-GMETYACH.js} +14 -15
  23. package/chunk-HK6WINL6.js +95 -0
  24. package/{chunk-HL42K2NH.js → chunk-IKO3GQFE.js} +17 -17
  25. package/{chunk-DO3TBNSC.js → chunk-ISYKZCPJ.js} +15 -17
  26. package/{chunk-YG7JOOLJ.js → chunk-J7RMFN54.js} +5 -7
  27. package/{chunk-SHDFUXYV.js → chunk-JBKBRAC4.js} +16 -18
  28. package/{chunk-LZMKSFCF.js → chunk-JCXI7VQL.js} +10 -12
  29. package/{chunk-NN6PKJWS.js → chunk-JYOZUQNU.js} +7 -9
  30. package/{chunk-LLHTVIM3.js → chunk-LB37KTJH.js} +7 -9
  31. package/{chunk-NSRTTYQ4.js → chunk-LB7Z6BSK.js} +42 -35
  32. package/{chunk-BNZVTLHV.js → chunk-LFGUJHFF.js} +25 -21
  33. package/{chunk-7TXHCRAG.js → chunk-M2HEVFQ3.js} +8 -10
  34. package/{chunk-SH6NG6VN.js → chunk-NH3EHMIL.js} +6 -8
  35. package/chunk-NL574STL.js +88 -0
  36. package/chunk-NQL6SIIB.js +168 -0
  37. package/chunk-O46O6LFQ.js +25 -0
  38. package/{chunk-YPNKBE5X.js → chunk-OURZQM27.js} +5 -7
  39. package/{chunk-XL75JRUA.js → chunk-OVKPPXK5.js} +42 -22
  40. package/chunk-PD6YPFYN.js +42 -0
  41. package/{chunk-XILQ7GXE.js → chunk-PHNR6ZQ7.js} +11 -13
  42. package/{chunk-BNTPPZCK.js → chunk-PUWSL5XW.js} +37 -39
  43. package/{chunk-A5XEM3GF.js → chunk-RHQHDYTE.js} +34 -36
  44. package/chunk-S7QHBVPX.js +45 -0
  45. package/{chunk-TX3H3QMA.js → chunk-SAYNV7B3.js} +71 -70
  46. package/{chunk-6QMSWITQ.js → chunk-SDOTDMYG.js} +24 -26
  47. package/{chunk-UGRSWP6U.js → chunk-SPGUZMCC.js} +10 -12
  48. package/chunk-SSOFFQ5T.js +74 -0
  49. package/{chunk-AN2RNJLR.js → chunk-SZJIVBOD.js} +16 -16
  50. package/chunk-T6L32XXH.js +107 -0
  51. package/{chunk-QS4N4MNP.js → chunk-TT2N5752.js} +18 -20
  52. package/{chunk-72OCFAPT.js → chunk-UCCNXGLG.js} +22 -21
  53. package/{chunk-KNUWZNFV.js → chunk-UGIVCXGN.js} +4 -6
  54. package/{chunk-H4NU7NPO.js → chunk-UUCVRIVP.js} +62 -61
  55. package/{chunk-P4O6TGDR.js → chunk-UZ4DXU6W.js} +28 -26
  56. package/{chunk-UBNHSZSE.js → chunk-VUOAPWTF.js} +10 -12
  57. package/{chunk-VAGIAREV.js → chunk-W472DBMT.js} +29 -26
  58. package/{chunk-X3PQANZO.js → chunk-W4RDTP6W.js} +47 -46
  59. package/{chunk-CL2II6BX.js → chunk-WLQD5BN2.js} +11 -13
  60. package/{chunk-FDKIX4DC.js → chunk-X2GNMNZQ.js} +7 -9
  61. package/{chunk-PF3YBUKT.js → chunk-X66KTATQ.js} +16 -15
  62. package/{chunk-J3NSDRVH.js → chunk-XETMIETJ.js} +0 -2
  63. package/chunk-XH56JGYC.js +71 -0
  64. package/{chunk-O7F3CIDV.js → chunk-XUOSJMEJ.js} +10 -12
  65. package/chunk-YJK4MGSI.js +86 -0
  66. package/{chunk-YX5VNRJX.js → chunk-YYFAZQ25.js} +0 -2
  67. package/chunk-Z7S2KQZS.js +177 -0
  68. package/chunk-ZBZ3ZQRB.js +195 -0
  69. package/{chunk-Y5AYU7PK.js → chunk-ZHFIWDGF.js} +0 -2
  70. package/components/accordion.js +2 -4
  71. package/components/agent-loading.d.ts +2 -0
  72. package/components/agent-loading.js +2 -4
  73. package/components/agent-picker.js +4 -5
  74. package/components/agent-suggestion.js +5 -6
  75. package/components/announcement-bar.js +6 -7
  76. package/components/attachment.js +4 -5
  77. package/components/avatar.js +4 -6
  78. package/components/badge.js +2 -4
  79. package/components/banner-mesh.js +1 -3
  80. package/components/banner.js +4 -6
  81. package/components/bar-chart.js +10 -11
  82. package/components/breadcrumb.js +5 -6
  83. package/components/button.js +2 -4
  84. package/components/card.js +3 -5
  85. package/components/channel-chart.js +10 -11
  86. package/components/chart.js +9 -10
  87. package/components/checkbox.js +2 -4
  88. package/components/chip.js +2 -4
  89. package/components/citations.d.ts +6 -4
  90. package/components/citations.js +4 -5
  91. package/components/code-block.js +3 -5
  92. package/components/combobox.d.ts +12 -3
  93. package/components/combobox.js +9 -10
  94. package/components/command-menu.d.ts +6 -2
  95. package/components/command-menu.js +5 -6
  96. package/components/context-menu.d.ts +12 -5
  97. package/components/context-menu.js +5 -6
  98. package/components/cookie-consent.js +3 -5
  99. package/components/date-picker.d.ts +26 -14
  100. package/components/date-picker.js +8 -9
  101. package/components/decision-card.js +6 -7
  102. package/components/dialog.d.ts +5 -2
  103. package/components/dialog.js +4 -5
  104. package/components/donut-chart.js +10 -11
  105. package/components/dot.js +2 -4
  106. package/components/dropdown.d.ts +6 -1
  107. package/components/dropdown.js +4 -5
  108. package/components/empty-state.js +2 -4
  109. package/components/file-upload.js +6 -7
  110. package/components/floating.js +1 -3
  111. package/components/form-field.js +2 -4
  112. package/components/hover-card.d.ts +5 -2
  113. package/components/hover-card.js +2 -4
  114. package/components/input-otp.d.ts +4 -2
  115. package/components/input-otp.js +7 -8
  116. package/components/input.js +3 -5
  117. package/components/kbd.js +2 -4
  118. package/components/labels.d.ts +79 -0
  119. package/components/labels.js +1 -0
  120. package/components/line-chart.js +11 -12
  121. package/components/message-actions.js +4 -5
  122. package/components/message.js +7 -8
  123. package/components/number-input.d.ts +4 -2
  124. package/components/number-input.js +7 -8
  125. package/components/pagination.js +4 -6
  126. package/components/popover.d.ts +11 -5
  127. package/components/popover.js +3 -4
  128. package/components/progress.js +2 -4
  129. package/components/prompt-bar.js +5 -6
  130. package/components/radio.js +2 -4
  131. package/components/search-bar.js +3 -5
  132. package/components/segmented-control.d.ts +4 -2
  133. package/components/segmented-control.js +3 -5
  134. package/components/select.d.ts +10 -2
  135. package/components/select.js +6 -7
  136. package/components/sheet.d.ts +4 -2
  137. package/components/sheet.js +5 -6
  138. package/components/sidebar.js +2 -4
  139. package/components/skeleton.js +2 -4
  140. package/components/slider.d.ts +6 -2
  141. package/components/slider.js +7 -8
  142. package/components/sliding-indicator.js +1 -3
  143. package/components/streaming-text.js +2 -4
  144. package/components/switch.js +2 -4
  145. package/components/table.d.ts +16 -5
  146. package/components/table.js +4 -5
  147. package/components/tabs.d.ts +4 -2
  148. package/components/tabs.js +3 -5
  149. package/components/textarea.js +3 -5
  150. package/components/thinking.js +3 -5
  151. package/components/toast.js +4 -5
  152. package/components/toggle.js +2 -4
  153. package/components/tooltip.d.ts +5 -2
  154. package/components/tooltip.js +3 -5
  155. package/index.d.ts +1 -0
  156. package/index.js +67 -231
  157. package/lib/utils.d.ts +8 -1
  158. package/lib/utils.js +1 -3
  159. package/package.json +11 -1
  160. package/styles.css +1 -1
  161. package/theme/create-theme.d.ts +6 -2
  162. package/theme/index.js +1 -0
  163. package/chunk-2HKBZFIK.js.map +0 -1
  164. package/chunk-3DINAQLL.js.map +0 -1
  165. package/chunk-3ERGAHKA.js +0 -179
  166. package/chunk-3ERGAHKA.js.map +0 -1
  167. package/chunk-6C7CGJX2.js +0 -86
  168. package/chunk-6C7CGJX2.js.map +0 -1
  169. package/chunk-6QMSWITQ.js.map +0 -1
  170. package/chunk-6YXUBP27.js.map +0 -1
  171. package/chunk-72OCFAPT.js.map +0 -1
  172. package/chunk-7TXHCRAG.js.map +0 -1
  173. package/chunk-A5XEM3GF.js.map +0 -1
  174. package/chunk-AN2RNJLR.js.map +0 -1
  175. package/chunk-B2K45IUR.js.map +0 -1
  176. package/chunk-B6V4VSGH.js.map +0 -1
  177. package/chunk-BKZBWPUH.js.map +0 -1
  178. package/chunk-BNTPPZCK.js.map +0 -1
  179. package/chunk-BNZVTLHV.js.map +0 -1
  180. package/chunk-CL2II6BX.js.map +0 -1
  181. package/chunk-D7RZNTFC.js +0 -95
  182. package/chunk-D7RZNTFC.js.map +0 -1
  183. package/chunk-DETGJAIC.js +0 -147
  184. package/chunk-DETGJAIC.js.map +0 -1
  185. package/chunk-DO3TBNSC.js.map +0 -1
  186. package/chunk-ESC5JCVQ.js +0 -90
  187. package/chunk-ESC5JCVQ.js.map +0 -1
  188. package/chunk-FDKIX4DC.js.map +0 -1
  189. package/chunk-GICKPMJU.js.map +0 -1
  190. package/chunk-GQA24FYG.js +0 -57
  191. package/chunk-GQA24FYG.js.map +0 -1
  192. package/chunk-H4NU7NPO.js.map +0 -1
  193. package/chunk-H63FYCMY.js +0 -11
  194. package/chunk-H63FYCMY.js.map +0 -1
  195. package/chunk-HL42K2NH.js.map +0 -1
  196. package/chunk-HNQUX43Z.js +0 -109
  197. package/chunk-HNQUX43Z.js.map +0 -1
  198. package/chunk-HRKPV66B.js +0 -32
  199. package/chunk-HRKPV66B.js.map +0 -1
  200. package/chunk-J3NSDRVH.js.map +0 -1
  201. package/chunk-JPNWHWAQ.js.map +0 -1
  202. package/chunk-KNUWZNFV.js.map +0 -1
  203. package/chunk-L6NCCSIP.js.map +0 -1
  204. package/chunk-LLHTVIM3.js.map +0 -1
  205. package/chunk-LW3TRU5W.js.map +0 -1
  206. package/chunk-LZMKSFCF.js.map +0 -1
  207. package/chunk-MR3JDI7E.js +0 -122
  208. package/chunk-MR3JDI7E.js.map +0 -1
  209. package/chunk-MYEZXZZC.js.map +0 -1
  210. package/chunk-NN6PKJWS.js.map +0 -1
  211. package/chunk-NSRTTYQ4.js.map +0 -1
  212. package/chunk-O7F3CIDV.js.map +0 -1
  213. package/chunk-P4O6TGDR.js.map +0 -1
  214. package/chunk-PF3YBUKT.js.map +0 -1
  215. package/chunk-PVOLDO4G.js +0 -47
  216. package/chunk-PVOLDO4G.js.map +0 -1
  217. package/chunk-QS4N4MNP.js.map +0 -1
  218. package/chunk-QUF2IPOZ.js.map +0 -1
  219. package/chunk-RTJ76X5U.js.map +0 -1
  220. package/chunk-SH6NG6VN.js.map +0 -1
  221. package/chunk-SHDFUXYV.js.map +0 -1
  222. package/chunk-TKO44NDI.js +0 -84
  223. package/chunk-TKO44NDI.js.map +0 -1
  224. package/chunk-TX3H3QMA.js.map +0 -1
  225. package/chunk-UBNHSZSE.js.map +0 -1
  226. package/chunk-UC3ZJWOD.js +0 -73
  227. package/chunk-UC3ZJWOD.js.map +0 -1
  228. package/chunk-UGRSWP6U.js.map +0 -1
  229. package/chunk-VAGIAREV.js.map +0 -1
  230. package/chunk-WTMZT3IT.js +0 -105
  231. package/chunk-WTMZT3IT.js.map +0 -1
  232. package/chunk-WX6BP5ZP.js +0 -39
  233. package/chunk-WX6BP5ZP.js.map +0 -1
  234. package/chunk-X3PQANZO.js.map +0 -1
  235. package/chunk-XILQ7GXE.js.map +0 -1
  236. package/chunk-XL75JRUA.js.map +0 -1
  237. package/chunk-XZNHT6MO.js.map +0 -1
  238. package/chunk-Y5AYU7PK.js.map +0 -1
  239. package/chunk-YG7JOOLJ.js.map +0 -1
  240. package/chunk-YPJYW624.js +0 -195
  241. package/chunk-YPJYW624.js.map +0 -1
  242. package/chunk-YPNKBE5X.js.map +0 -1
  243. package/chunk-YX5VNRJX.js.map +0 -1
  244. package/components/accordion.js.map +0 -1
  245. package/components/agent-loading.js.map +0 -1
  246. package/components/agent-picker.js.map +0 -1
  247. package/components/agent-suggestion.js.map +0 -1
  248. package/components/announcement-bar.js.map +0 -1
  249. package/components/attachment.js.map +0 -1
  250. package/components/avatar.js.map +0 -1
  251. package/components/badge.js.map +0 -1
  252. package/components/banner-mesh.js.map +0 -1
  253. package/components/banner.js.map +0 -1
  254. package/components/bar-chart.js.map +0 -1
  255. package/components/breadcrumb.js.map +0 -1
  256. package/components/button.js.map +0 -1
  257. package/components/card.js.map +0 -1
  258. package/components/channel-chart.js.map +0 -1
  259. package/components/chart.js.map +0 -1
  260. package/components/checkbox.js.map +0 -1
  261. package/components/chip.js.map +0 -1
  262. package/components/citations.js.map +0 -1
  263. package/components/code-block.js.map +0 -1
  264. package/components/combobox.js.map +0 -1
  265. package/components/command-menu.js.map +0 -1
  266. package/components/context-menu.js.map +0 -1
  267. package/components/cookie-consent.js.map +0 -1
  268. package/components/date-picker.js.map +0 -1
  269. package/components/decision-card.js.map +0 -1
  270. package/components/dialog.js.map +0 -1
  271. package/components/donut-chart.js.map +0 -1
  272. package/components/dot.js.map +0 -1
  273. package/components/dropdown.js.map +0 -1
  274. package/components/empty-state.js.map +0 -1
  275. package/components/file-upload.js.map +0 -1
  276. package/components/floating.js.map +0 -1
  277. package/components/form-field.js.map +0 -1
  278. package/components/hover-card.js.map +0 -1
  279. package/components/input-otp.js.map +0 -1
  280. package/components/input.js.map +0 -1
  281. package/components/kbd.js.map +0 -1
  282. package/components/line-chart.js.map +0 -1
  283. package/components/message-actions.js.map +0 -1
  284. package/components/message.js.map +0 -1
  285. package/components/number-input.js.map +0 -1
  286. package/components/pagination.js.map +0 -1
  287. package/components/popover.js.map +0 -1
  288. package/components/progress.js.map +0 -1
  289. package/components/prompt-bar.js.map +0 -1
  290. package/components/radio.js.map +0 -1
  291. package/components/search-bar.js.map +0 -1
  292. package/components/segmented-control.js.map +0 -1
  293. package/components/select.js.map +0 -1
  294. package/components/sheet.js.map +0 -1
  295. package/components/sidebar.js.map +0 -1
  296. package/components/skeleton.js.map +0 -1
  297. package/components/slider.js.map +0 -1
  298. package/components/sliding-indicator.js.map +0 -1
  299. package/components/streaming-text.js.map +0 -1
  300. package/components/switch.js.map +0 -1
  301. package/components/table.js.map +0 -1
  302. package/components/tabs.js.map +0 -1
  303. package/components/textarea.js.map +0 -1
  304. package/components/thinking.js.map +0 -1
  305. package/components/toast.js.map +0 -1
  306. package/components/toggle.js.map +0 -1
  307. package/components/tooltip.js.map +0 -1
  308. package/index.js.map +0 -1
  309. package/lib/utils.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/agent-picker.tsx"],"names":[],"mappings":"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","file":"chunk-VAGIAREV.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { DropdownMenu } from 'radix-ui'\nimport { Check, NavArrowDown, Plus } from 'iconoir-react'\nimport { cn } from '../lib/utils'\nimport { Button } from './button'\nimport type { BadgeTone } from './badge'\n\n/**\n * AgentPicker, from the uiKit Agent picker docs view (3890:47473): a rounded Button with the\n * current agent's avatar, name and a chevron, opening a menu of agents. Menu rows are 1:1\n * with `DropdownMenu/Item` (653:19165): 8px side padding, radius-lg, medium 13/13 label and a\n * 13px text/muted description 4px under it (`layout=stacked`, 20px avatar), or the label alone\n * (`layout=inline`, 16px avatar) when `showDescription` is off. Hover and the selected row\n * fill bg/selected; the selected row also shows a check in status/green, so selection never\n * relies on colour alone. The menu is bg/popover, a border/subtle hairline, radius-xl, 4px\n * padding, 255 wide, with the shadcn sm shadow.\n *\n * Built on Radix DropdownMenu (radio group semantics, arrow keys, typeahead, Escape).\n * The avatar is a small local one on the Badge hue pairs, so this file has no dependency\n * on a separate Avatar component.\n */\n\nexport type Agent = {\n id: string\n name: string\n /** One line on what the agent does. */\n description?: string\n /** Two letters for the avatar; taken from the name when left out. */\n initials?: string\n /** Avatar hue, same pairs as Badge. */\n tone?: BadgeTone\n /** Initials on the tone, or the flappy bird painted in it. */\n avatar?: 'initials' | 'flappy'\n}\n\nexport interface AgentPickerProps {\n agents: Agent[]\n /** The selected agent's id. */\n value?: string\n defaultValue?: string\n onValueChange?: (id: string) => void\n /** Show the one-line description under each name. Turn it off once agents are familiar. */\n showDescription?: boolean\n /** Secondary under the composer, Tertiary inside dense toolbars. */\n variant?: 'secondary' | 'tertiary'\n /** md is the 28px trigger, xs the 24px one. */\n size?: 'md' | 'xs'\n /** Adds a \"New agent\" action under the list. */\n onCreate?: () => void\n /** Label for the create action. */\n createLabel?: string\n /** Shown on the trigger when nothing is selected. */\n placeholder?: string\n /** Controlled open state, e.g. to show the menu open on a docs stage. */\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n /** Render the menu in place instead of in a portal. */\n disablePortal?: boolean\n className?: string\n}\n\nexport function AgentPicker({\n agents,\n value: valueProp,\n defaultValue,\n onValueChange,\n showDescription = true,\n variant = 'secondary',\n size = 'md',\n onCreate,\n createLabel = 'New agent',\n placeholder = 'Choose an agent',\n open,\n defaultOpen,\n onOpenChange,\n disablePortal = false,\n className,\n}: AgentPickerProps) {\n const [inner, setInner] = React.useState(defaultValue ?? agents[0]?.id)\n const value = valueProp ?? inner\n const current = agents.find((a) => a.id === value)\n\n const select = (id: string) => {\n setInner(id)\n onValueChange?.(id)\n }\n\n const content = (\n <AgentMenu\n agents={agents}\n value={value}\n onValueChange={select}\n showDescription={showDescription}\n onCreate={onCreate}\n createLabel={createLabel}\n />\n )\n\n return (\n <DropdownMenu.Root open={open} defaultOpen={defaultOpen} onOpenChange={onOpenChange} modal={false}>\n <DropdownMenu.Trigger asChild>\n <Button\n variant={variant}\n size={size}\n shape=\"rounded\"\n className={cn('data-[state=open]:bg-action-secondary-bg-hover', className)}\n >\n {current && <AgentAvatar agent={current} size={16} />}\n <span className=\"truncate\">\n {current && <span className=\"sr-only\">Agent: </span>}\n {current ? current.name : placeholder}\n </span>\n <NavArrowDown aria-hidden data-chevron />\n </Button>\n </DropdownMenu.Trigger>\n {disablePortal ? content : <DropdownMenu.Portal>{content}</DropdownMenu.Portal>}\n </DropdownMenu.Root>\n )\n}\n\nfunction AgentMenu({\n agents,\n value,\n onValueChange,\n showDescription,\n onCreate,\n createLabel,\n}: {\n agents: Agent[]\n value?: string\n onValueChange: (id: string) => void\n showDescription: boolean\n onCreate?: () => void\n createLabel: string\n}) {\n return (\n <DropdownMenu.Content\n align=\"start\"\n sideOffset={8}\n className={cn(\n 'z-50 flex w-[255px] max-w-[520px] flex-col gap-1 rounded-xl border border-border-subtle bg-bg-popover p-1 outline-none',\n '[box-shadow:0_1px_3px_0_var(--effect-shadow-sm),0_1px_2px_-1px_var(--effect-shadow-sm)]',\n 'data-[state=open]:[animation:satin-enter_var(--duration-fast)_var(--ease-out)]',\n )}\n >\n <DropdownMenu.RadioGroup value={value} onValueChange={onValueChange} className=\"flex flex-col\">\n {agents.map((agent) => (\n <AgentMenuItem key={agent.id} agent={agent} showDescription={showDescription} />\n ))}\n </DropdownMenu.RadioGroup>\n {onCreate && (\n <DropdownMenu.Item\n onSelect={onCreate}\n className={cn(\n 'flex h-control-height-xs items-center gap-1 self-start rounded-md px-2 text-sm font-medium text-text-default outline-none select-none',\n 'transition-[background-color,box-shadow] duration-(--duration-fast) ease-(--ease-out)',\n '[&_svg]:size-icon-size-sm [&_svg]:text-text-muted [&_svg]:[stroke-width:1.875]',\n 'data-highlighted:bg-bg-hover',\n )}\n >\n <Plus aria-hidden />\n {createLabel}\n </DropdownMenu.Item>\n )}\n </DropdownMenu.Content>\n )\n}\n\nexport interface AgentMenuItemProps\n extends Omit<React.ComponentProps<typeof DropdownMenu.RadioItem>, 'value' | 'children'> {\n agent: Agent\n showDescription?: boolean\n 'data-force'?: 'hover'\n}\n\n/** One row of the menu, `DropdownMenu/Item` (653:19165). Must sit inside the picker's radio group. */\nexport function AgentMenuItem({ agent, showDescription = true, className, ...props }: AgentMenuItemProps) {\n const stacked = showDescription && !!agent.description\n return (\n <DropdownMenu.RadioItem\n value={agent.id}\n className={cn(agentRowClass, className)}\n {...props}\n >\n <AgentAvatar agent={agent} size={stacked ? 20 : 16} />\n <AgentRowText agent={agent} stacked={stacked} />\n <DropdownMenu.ItemIndicator className=\"flex shrink-0\">\n <Check aria-hidden className=\"size-icon-size text-status-green-fg [stroke-width:1.875]\" />\n </DropdownMenu.ItemIndicator>\n </DropdownMenu.RadioItem>\n )\n}\n\nconst agentRowClass = cn(\n 'flex min-h-8 w-full items-center gap-2 rounded-lg px-2 py-1.5 text-left outline-none select-none',\n 'transition-[background-color] duration-(--duration-fast) ease-(--ease-out)',\n 'data-highlighted:bg-bg-selected data-[force=hover]:bg-bg-selected data-[state=checked]:bg-bg-selected',\n)\n\nfunction AgentRowText({ agent, stacked }: { agent: Agent; stacked: boolean }) {\n return (\n <span className=\"flex min-w-0 flex-1 flex-col justify-center gap-1\">\n <span className=\"text-sm leading-[13px] font-medium text-text-default\">{agent.name}</span>\n {stacked && <span className=\"text-sm font-normal text-text-muted\">{agent.description}</span>}\n </span>\n )\n}\n\n/**\n * A static menu row for state sheets and docs (no menu around it): the same look as a menu\n * item, with `state` forced to default, hover or selected.\n */\nexport function AgentPickerRow({\n agent,\n state = 'default',\n showDescription = true,\n className,\n}: {\n agent: Agent\n state?: 'default' | 'hover' | 'selected'\n showDescription?: boolean\n className?: string\n}) {\n const stacked = showDescription && !!agent.description\n return (\n <div\n data-force={state === 'hover' ? 'hover' : undefined}\n data-state={state === 'selected' ? 'checked' : undefined}\n className={cn(agentRowClass, className)}\n >\n <AgentAvatar agent={agent} size={stacked ? 20 : 16} />\n <AgentRowText agent={agent} stacked={stacked} />\n {state === 'selected' && (\n <Check aria-hidden className=\"size-icon-size shrink-0 text-status-green-fg [stroke-width:1.875]\" />\n )}\n </div>\n )\n}\n\n/**\n * Initials on a Badge hue pair, round. 16px uses semibold 7/8, 20px semibold 9/10, as on\n * the uiKit Avatar (992:20199). These sizes have no type token, so they stay raw.\n * `avatar=\"flappy\"` draws the flappy bird instead, in the agent's tone.\n */\nexport function AgentAvatar({ agent, size = 16 }: { agent: Agent; size?: 16 | 20 }) {\n if (agent.avatar === 'flappy') return <FlappyAvatar tone={agent.tone ?? 'brand'} size={size} />\n const initials = agent.initials ?? toInitials(agent.name)\n return (\n <span\n aria-hidden\n data-tone={agent.tone ?? 'brand'}\n className={cn(\n 'inline-flex shrink-0 items-center justify-center rounded-full bg-tone-bg font-semibold tracking-normal text-tone-fg',\n size === 16 ? 'size-4 text-[7px] leading-2' : 'size-5 text-[9px] leading-[10px]',\n )}\n >\n {initials}\n </span>\n )\n}\n\n/**\n * The flappy bird (uiKit flappyAgent, 1215:69019) as a 17 × 12 pixel grid: 0 outline, 1 body,\n * 2 eye and wing, 3 beak, 4 belly. Body and belly take the tone's hue at a fixed, bright\n * lightness (0.8 and 0.68 in OKLCH, chroma up a third), so each agent gets its own bird on the\n * Badge hues and it stays as vivid as the original yellow one in both themes.\n */\nconst FLAPPY_GRID = [\n '......000000.....',\n '....001111020....',\n '...01111102220...',\n '.00001111022020..',\n '022220111022020..',\n '022222011102220..',\n '0122210111100000.',\n '.0111011110333330',\n '..00044440300000.',\n '....044444033330.',\n '.....00444400000.',\n '.......0000......',\n]\nconst FLAPPY_FILL = [\n '#000',\n 'oklch(from var(--tone-fg) 0.8 calc(c * 1.33) h)',\n '#fff',\n '#ff5722',\n 'oklch(from var(--tone-fg) 0.68 calc(c * 1.33) h)',\n]\n\nfunction FlappyAvatar({ tone, size }: { tone: BadgeTone; size: 16 | 20 }) {\n return (\n <svg\n aria-hidden\n data-tone={tone}\n width={size}\n height={size}\n viewBox=\"0 -2.5 17 17\"\n shapeRendering=\"crispEdges\"\n className=\"shrink-0\"\n >\n {FLAPPY_GRID.flatMap((row, y) =>\n [...row].map((c, x) => (c === '.' ? null : <rect key={`${x}-${y}`} x={x} y={y} width={1} height={1} fill={FLAPPY_FILL[+c]} />)),\n )}\n </svg>\n )\n}\n\nfunction toInitials(name: string) {\n const words = name.trim().split(/\\s+/)\n const letters = words.length > 1 ? words[0][0] + words[1][0] : name.slice(0, 2)\n return letters.toUpperCase()\n}\n"]}
package/chunk-WTMZT3IT.js DELETED
@@ -1,105 +0,0 @@
1
- import { useSlidingIndicator } from './chunk-J3NSDRVH.js';
2
- import { cn } from './chunk-H63FYCMY.js';
3
- import * as React from 'react';
4
- import { ToggleGroup } from 'radix-ui';
5
- import { cva } from 'class-variance-authority';
6
- import { jsxs, jsx } from 'react/jsx-runtime';
7
-
8
- var track = cva("relative isolate inline-flex items-center gap-0.5 bg-bg-muted p-1", {
9
- variants: {
10
- shape: { default: "rounded-lg", rounded: "rounded-pill" },
11
- border: { true: "border border-border-subtle", false: "" },
12
- fullWidth: { true: "flex w-full", false: "" }
13
- }
14
- });
15
- var segment = cva(
16
- [
17
- "relative z-10 inline-flex items-center justify-center font-medium whitespace-nowrap text-text-muted select-none",
18
- "transition-[color,background-color,box-shadow] duration-(--duration-fast) ease-(--ease-out)",
19
- "satin-hover:text-text-default data-[state=on]:text-text-default",
20
- "satin-pressed:bg-component-segmented-pressed satin-pressed:text-text-default",
21
- "focus-visible:outline-none satin-focus:text-text-default satin-focus:[box-shadow:0_0_0_2px_var(--action-focus-ring)]",
22
- "disabled:pointer-events-none disabled:text-text-subtle",
23
- "[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:[stroke-width:1.875]"
24
- ],
25
- {
26
- variants: {
27
- size: {
28
- xs: "h-control-height-xs gap-1 px-2.5 text-sm [&_svg]:size-icon-size-sm",
29
- md: "h-control-height gap-1.5 px-3 text-sm [&_svg]:size-icon-size",
30
- lg: "h-control-height-lg gap-1.5 px-4 text-base [&_svg]:size-icon-size"
31
- },
32
- shape: { default: "rounded-sm", rounded: "rounded-pill" },
33
- fullWidth: { true: "flex-1", false: "" }
34
- }
35
- }
36
- );
37
- function SegmentedControl({
38
- items,
39
- value: valueProp,
40
- defaultValue,
41
- onValueChange,
42
- size = "md",
43
- shape = "default",
44
- border = false,
45
- fullWidth = false,
46
- className,
47
- ...aria
48
- }) {
49
- const [inner, setInner] = React.useState(defaultValue ?? items[0]?.value ?? "");
50
- const value = valueProp ?? inner;
51
- const trackRef = React.useRef(null);
52
- const pill = useSlidingIndicator(trackRef, '[data-state="on"]', `${value}|${size}|${fullWidth}|${items.length}`);
53
- return /* @__PURE__ */ jsxs(
54
- ToggleGroup.Root,
55
- {
56
- ref: trackRef,
57
- type: "single",
58
- value,
59
- onValueChange: (next) => {
60
- if (!next) return;
61
- setInner(next);
62
- onValueChange?.(next);
63
- },
64
- "data-slot": "segmented-control",
65
- className: cn(track({ shape, border, fullWidth }), className),
66
- ...aria,
67
- children: [
68
- /* @__PURE__ */ jsx(
69
- "span",
70
- {
71
- ref: pill.ref,
72
- "aria-hidden": true,
73
- className: cn(
74
- "pointer-events-none absolute top-1 bottom-1 left-0 z-0 bg-component-segmented-selected opacity-0 [box-shadow:0_1px_3px_0_var(--effect-shadow-sm),0_1px_2px_-1px_var(--effect-shadow-sm)]",
75
- shape === "rounded" ? "rounded-pill" : "rounded-sm"
76
- )
77
- }
78
- ),
79
- items.map((item) => /* @__PURE__ */ jsxs(
80
- ToggleGroup.Item,
81
- {
82
- value: item.value,
83
- disabled: item.disabled,
84
- className: cn(
85
- segment({ size, shape, fullWidth }),
86
- // Unselected focus: bg/muted under the ring. Selected focus keeps the pill's fill.
87
- "data-[state=off]:satin-focus:bg-bg-muted",
88
- // Before the pill is measured (server render), the selected segment paints its own fill.
89
- !pill.ready && "data-[state=on]:bg-component-segmented-selected data-[state=on]:[box-shadow:0_1px_3px_0_var(--effect-shadow-sm),0_1px_2px_-1px_var(--effect-shadow-sm)]"
90
- ),
91
- children: [
92
- item.icon,
93
- item.label
94
- ]
95
- },
96
- item.value
97
- ))
98
- ]
99
- }
100
- );
101
- }
102
-
103
- export { SegmentedControl };
104
- //# sourceMappingURL=chunk-WTMZT3IT.js.map
105
- //# sourceMappingURL=chunk-WTMZT3IT.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/segmented-control.tsx"],"names":[],"mappings":"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","file":"chunk-WTMZT3IT.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { ToggleGroup } from 'radix-ui'\nimport { cva } from 'class-variance-authority'\nimport { cn } from '../lib/utils'\nimport { useSlidingIndicator } from './sliding-indicator'\n\n/**\n * SegmentedControl, from the uiKit `segmented control` page: 2–5 segments that switch\n * views or filters in place. One segment is always selected; the selected pill slides under\n * the labels to the new segment, as in Tabs and Pagination (sliding-indicator.tsx: 300 ms,\n * the leading edge first): a white card with Shadow/sm in Light. Arrow keys move between segments.\n * Values 1:1 with the uiKit `_segmentedControl/item` (3080:20278) and `SegmentedControl` (3080:21247) sets.\n */\ntype Size = 'xs' | 'md' | 'lg'\ntype Shape = 'default' | 'rounded'\n\nexport interface SegmentedControlItem {\n value: string\n label: React.ReactNode\n icon?: React.ReactNode\n disabled?: boolean\n}\n\nexport interface SegmentedControlProps {\n items: SegmentedControlItem[]\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n size?: Size\n shape?: Shape\n /** A 1px border-subtle outline around the track. */\n border?: boolean\n fullWidth?: boolean\n /** Required when the segments have no visible text of their own. */\n 'aria-label'?: string\n className?: string\n}\n\nconst track = cva('relative isolate inline-flex items-center gap-0.5 bg-bg-muted p-1', {\n variants: {\n shape: { default: 'rounded-lg', rounded: 'rounded-pill' },\n border: { true: 'border border-border-subtle', false: '' },\n fullWidth: { true: 'flex w-full', false: '' },\n },\n})\n\nconst segment = cva(\n [\n 'relative z-10 inline-flex items-center justify-center font-medium whitespace-nowrap text-text-muted select-none',\n 'transition-[color,background-color,box-shadow] duration-(--duration-fast) ease-(--ease-out)',\n 'satin-hover:text-text-default data-[state=on]:text-text-default',\n 'satin-pressed:bg-component-segmented-pressed satin-pressed:text-text-default',\n 'focus-visible:outline-none satin-focus:text-text-default satin-focus:[box-shadow:0_0_0_2px_var(--action-focus-ring)]',\n 'disabled:pointer-events-none disabled:text-text-subtle',\n '[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:[stroke-width:1.875]',\n ],\n {\n variants: {\n size: {\n xs: 'h-control-height-xs gap-1 px-2.5 text-sm [&_svg]:size-icon-size-sm',\n md: 'h-control-height gap-1.5 px-3 text-sm [&_svg]:size-icon-size',\n lg: 'h-control-height-lg gap-1.5 px-4 text-base [&_svg]:size-icon-size',\n },\n shape: { default: 'rounded-sm', rounded: 'rounded-pill' },\n fullWidth: { true: 'flex-1', false: '' },\n },\n },\n)\n\nexport function SegmentedControl({\n items,\n value: valueProp,\n defaultValue,\n onValueChange,\n size = 'md',\n shape = 'default',\n border = false,\n fullWidth = false,\n className,\n ...aria\n}: SegmentedControlProps) {\n const [inner, setInner] = React.useState(defaultValue ?? items[0]?.value ?? '')\n const value = valueProp ?? inner\n const trackRef = React.useRef<HTMLDivElement>(null)\n // The pill slides under the selected segment (sliding-indicator.tsx).\n const pill = useSlidingIndicator(trackRef, '[data-state=\"on\"]', `${value}|${size}|${fullWidth}|${items.length}`)\n\n return (\n <ToggleGroup.Root\n ref={trackRef}\n type=\"single\"\n value={value}\n onValueChange={(next) => {\n // A segmented control never ends up with nothing selected.\n if (!next) return\n setInner(next)\n onValueChange?.(next)\n }}\n data-slot=\"segmented-control\"\n className={cn(track({ shape, border, fullWidth }), className)}\n {...aria}\n >\n <span\n ref={pill.ref}\n aria-hidden\n className={cn(\n 'pointer-events-none absolute top-1 bottom-1 left-0 z-0 bg-component-segmented-selected opacity-0 [box-shadow:0_1px_3px_0_var(--effect-shadow-sm),0_1px_2px_-1px_var(--effect-shadow-sm)]',\n shape === 'rounded' ? 'rounded-pill' : 'rounded-sm',\n )}\n />\n {items.map((item) => (\n <ToggleGroup.Item\n key={item.value}\n value={item.value}\n disabled={item.disabled}\n className={cn(\n segment({ size, shape, fullWidth }),\n // Unselected focus: bg/muted under the ring. Selected focus keeps the pill's fill.\n 'data-[state=off]:satin-focus:bg-bg-muted',\n // Before the pill is measured (server render), the selected segment paints its own fill.\n !pill.ready && 'data-[state=on]:bg-component-segmented-selected data-[state=on]:[box-shadow:0_1px_3px_0_var(--effect-shadow-sm),0_1px_2px_-1px_var(--effect-shadow-sm)]',\n )}\n >\n {item.icon}\n {item.label}\n </ToggleGroup.Item>\n ))}\n </ToggleGroup.Root>\n )\n}\n"]}
package/chunk-WX6BP5ZP.js DELETED
@@ -1,39 +0,0 @@
1
- import { cn } from './chunk-H63FYCMY.js';
2
- import 'react';
3
- import { cva } from 'class-variance-authority';
4
- import { jsxs, jsx } from 'react/jsx-runtime';
5
-
6
- var emptyStateVariants = cva(
7
- "flex w-[350px] max-w-[560px] min-w-[min(320px,100%)] flex-col items-center gap-4 rounded-2xl px-4 pt-4 pb-5 text-center",
8
- {
9
- variants: {
10
- border: {
11
- ghost: "",
12
- dashed: "border border-dashed border-border-default",
13
- outline: "border border-border-default"
14
- }
15
- },
16
- defaultVariants: { border: "ghost" }
17
- }
18
- );
19
- function EmptyState({ className, border, title, description, icon, actions, ...props }) {
20
- return /* @__PURE__ */ jsxs("div", { "data-slot": "empty-state", className: cn(emptyStateVariants({ border }), className), ...props, children: [
21
- icon && /* @__PURE__ */ jsx(
22
- "div",
23
- {
24
- "aria-hidden": true,
25
- className: "flex shrink-0 items-center justify-center rounded-lg bg-bg-muted p-2.5 text-text-default [&_svg]:size-4 [&_svg]:[stroke-width:1.875]",
26
- children: icon
27
- }
28
- ),
29
- /* @__PURE__ */ jsxs("div", { className: "flex w-full flex-col items-center gap-2", children: [
30
- /* @__PURE__ */ jsx("p", { className: "w-full text-lg font-medium text-text-default", children: title }),
31
- description && /* @__PURE__ */ jsx("p", { className: "w-full text-body-lg text-text-muted", children: description })
32
- ] }),
33
- actions && /* @__PURE__ */ jsx("div", { className: "flex flex-wrap items-start justify-center gap-2", children: actions })
34
- ] });
35
- }
36
-
37
- export { EmptyState, emptyStateVariants };
38
- //# sourceMappingURL=chunk-WX6BP5ZP.js.map
39
- //# sourceMappingURL=chunk-WX6BP5ZP.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/empty-state.tsx"],"names":[],"mappings":";;;;;AAgBA,IAAM,kBAAA,GAAqB,GAAA;AAAA,EACzB,yHAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,KAAA,EAAO,EAAA;AAAA,QACP,MAAA,EAAQ,4CAAA;AAAA,QACR,OAAA,EAAS;AAAA;AACX,KACF;AAAA,IACA,eAAA,EAAiB,EAAE,MAAA,EAAQ,OAAA;AAAQ;AAEvC;AAaO,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,MAAA,EAAQ,KAAA,EAAO,aAAa,IAAA,EAAM,OAAA,EAAS,GAAG,KAAA,EAAM,EAAoB;AAC9G,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,WAAA,EAAU,aAAA,EAAc,WAAW,EAAA,CAAG,kBAAA,CAAmB,EAAE,MAAA,EAAQ,CAAA,EAAG,SAAS,CAAA,EAAI,GAAG,KAAA,EACxF,QAAA,EAAA;AAAA,IAAA,IAAA,oBACC,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,aAAA,EAAW,IAAA;AAAA,QACX,SAAA,EAAU,sIAAA;AAAA,QAET,QAAA,EAAA;AAAA;AAAA,KACH;AAAA,oBAEF,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,8CAAA,EAAgD,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,MAClE,WAAA,oBAAe,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,uCAAuC,QAAA,EAAA,WAAA,EAAY;AAAA,KAAA,EAClF,CAAA;AAAA,IACC,OAAA,oBAAW,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAmD,QAAA,EAAA,OAAA,EAAQ;AAAA,GAAA,EACxF,CAAA;AAEJ","file":"chunk-WX6BP5ZP.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../lib/utils'\n\n/**\n * EmptyState, 1:1 with the uiKit `EmptyState` set (852:51897) and its `_buttonGroup`\n * (852:51922): a centred column 350 wide (320–560), padding 16 / 16 / 20, 16 apart, radius-2xl.\n *\n * - icon: a 16px glyph in text/default on a bg/muted tile, 10 padding, radius-lg (36 square).\n * - title in text/lg medium (16/24), description in Body/lg (14/21) text/muted, 8 apart, centred.\n * - actions: a row of Buttons 8 apart: Primary + Secondary, Secondary alone, or a Tertiary\n * \"Learn more\" with a trailing arrow. Pass them as `<Button>` elements.\n * - border: ghost (none), dashed or outline, both 1px border/default.\n */\nconst emptyStateVariants = cva(\n 'flex w-[350px] max-w-[560px] min-w-[min(320px,100%)] flex-col items-center gap-4 rounded-2xl px-4 pt-4 pb-5 text-center',\n {\n variants: {\n border: {\n ghost: '',\n dashed: 'border border-dashed border-border-default',\n outline: 'border border-border-default',\n },\n },\n defaultVariants: { border: 'ghost' },\n },\n)\n\nexport interface EmptyStateProps\n extends Omit<React.ComponentProps<'div'>, 'title'>,\n VariantProps<typeof emptyStateVariants> {\n title: React.ReactNode\n description?: React.ReactNode\n /** A 16px icon, e.g. from iconoir-react. */\n icon?: React.ReactNode\n /** One or two Buttons. */\n actions?: React.ReactNode\n}\n\nexport function EmptyState({ className, border, title, description, icon, actions, ...props }: EmptyStateProps) {\n return (\n <div data-slot=\"empty-state\" className={cn(emptyStateVariants({ border }), className)} {...props}>\n {icon && (\n <div\n aria-hidden\n className=\"flex shrink-0 items-center justify-center rounded-lg bg-bg-muted p-2.5 text-text-default [&_svg]:size-4 [&_svg]:[stroke-width:1.875]\"\n >\n {icon}\n </div>\n )}\n <div className=\"flex w-full flex-col items-center gap-2\">\n <p className=\"w-full text-lg font-medium text-text-default\">{title}</p>\n {description && <p className=\"w-full text-body-lg text-text-muted\">{description}</p>}\n </div>\n {actions && <div className=\"flex flex-wrap items-start justify-center gap-2\">{actions}</div>}\n </div>\n )\n}\n\nexport { emptyStateVariants }\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/table.tsx"],"names":[],"mappings":"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","file":"chunk-X3PQANZO.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../lib/utils'\nimport { Checkbox } from './checkbox'\n\n/**\n * Table, 1:1 with the uiKit `Table` set (3411:21610) and its parts: table/header (3410:17835),\n * table/row (3410:18040), table/cell (3409:17760), table/headerCell (3409:17734) and\n * table/checkboxCell (3409:17703). A real `<table>`.\n *\n * - Frame: bg/card, 1px border-subtle, radius-xl, clipped.\n * - Header row: component/table-header fill, 1px border-subtle under it. Header cells pad\n * 4 / 8 / 4 / 4 around a label button (8px sides, 3px top and bottom, radius-md, medium\n * 13/18, text-muted); hover tints the button bg-hover. Sortable headers cycle\n * none → asc → desc with a 14px arrow 10px after the label, and set aria-sort.\n * - Cells: 12 left, 10 right, 8 top and bottom, at least 40 high, regular 13/19.5, clipped\n * with an ellipsis. Chips and other nodes sit in a row 4px apart.\n * - Checkbox column: 8px left padding, no right padding; the header box selects all.\n * - zebra: every second row on component/table-zebra.\n * - Row hover lifts the row: bg-hover, 1px border-strong edge, radius-xl, shadow sm.\n * - overflow=\"fit\": columns are proportional (`width` is an fr weight). overflow=\"scroll\":\n * columns keep their pixel `width`, the first column stays in place, a 64px fade marks\n * the clipped edge and a 6px scrollbar (bg-muted track, border-strong thumb) sits below.\n *\n * The row edge is drawn with inset shadows on the cells, since table rows can't take a\n * border radius. `data-force=\"hover\"` on a `<tr>` shows the hover state.\n */\n\nexport type Sort = { key: string; direction: 'asc' | 'desc' } | null\n\nexport type Row = { id: string } & Record<string, unknown>\n\nexport interface Column<R extends Row = Row> {\n key: string\n header: React.ReactNode\n /** fr weight with overflow=\"fit\" (default 1), pixels with overflow=\"scroll\" (default 160). */\n width?: number\n sortable?: boolean\n /** Renders the cell; defaults to the row's value at `key`. */\n cell?: (row: R) => React.ReactNode\n align?: 'left' | 'right'\n}\n\nexport interface TableProps<R extends Row = Row> extends Omit<React.ComponentProps<'div'>, 'children'> {\n columns: Column<R>[]\n rows: R[]\n selectable?: boolean\n zebra?: boolean\n overflow?: 'fit' | 'scroll'\n /** Called with the new sort; rows are sorted by value unless `manualSort` is set. */\n onSortChange?: (sort: Sort) => void\n defaultSort?: Sort\n /** Leave rows in the order given (sort them yourself in onSortChange). */\n manualSort?: boolean\n selected?: string[]\n onSelectedChange?: (ids: string[]) => void\n /** Accessible name of the table. */\n label?: string\n}\n\n/** The Figma sort arrow, 14 at 1.09. Pointing down for descending. */\nfunction SortIcon({ direction }: { direction: 'asc' | 'desc' }) {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n aria-hidden\n className={cn('shrink-0 text-text-muted', direction === 'desc' && 'rotate-180')}\n >\n <path\n d=\"M7.00025 11.4515L7.00025 2.54852M11.2044 6.7527L7.00025 2.54852L2.79608 6.7527\"\n stroke=\"currentColor\"\n strokeWidth=\"1.09375\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )\n}\n\n// Hover styles for the cells of a hovered (or data-force=\"hover\") row. Written out in full so\n// Tailwind sees every class.\nconst cellHover = {\n first: [\n 'group-hover/row:rounded-l-xl group-hover/row:bg-bg-hover group-hover/row:[box-shadow:inset_1px_0_0_var(--border-strong),inset_0_1px_0_var(--border-strong),inset_0_-1px_0_var(--border-strong)]',\n 'group-data-[force=hover]/row:rounded-l-xl group-data-[force=hover]/row:bg-bg-hover group-data-[force=hover]/row:[box-shadow:inset_1px_0_0_var(--border-strong),inset_0_1px_0_var(--border-strong),inset_0_-1px_0_var(--border-strong)]',\n ].join(' '),\n middle: [\n 'group-hover/row:bg-bg-hover group-hover/row:[box-shadow:inset_0_1px_0_var(--border-strong),inset_0_-1px_0_var(--border-strong)]',\n 'group-data-[force=hover]/row:bg-bg-hover group-data-[force=hover]/row:[box-shadow:inset_0_1px_0_var(--border-strong),inset_0_-1px_0_var(--border-strong)]',\n ].join(' '),\n last: [\n 'group-hover/row:rounded-r-xl group-hover/row:bg-bg-hover group-hover/row:[box-shadow:inset_-1px_0_0_var(--border-strong),inset_0_1px_0_var(--border-strong),inset_0_-1px_0_var(--border-strong)]',\n 'group-data-[force=hover]/row:rounded-r-xl group-data-[force=hover]/row:bg-bg-hover group-data-[force=hover]/row:[box-shadow:inset_-1px_0_0_var(--border-strong),inset_0_1px_0_var(--border-strong),inset_0_-1px_0_var(--border-strong)]',\n ].join(' '),\n only: [\n 'group-hover/row:rounded-xl group-hover/row:bg-bg-hover group-hover/row:[box-shadow:inset_0_0_0_1px_var(--border-strong)]',\n 'group-data-[force=hover]/row:rounded-xl group-data-[force=hover]/row:bg-bg-hover group-data-[force=hover]/row:[box-shadow:inset_0_0_0_1px_var(--border-strong)]',\n ].join(' '),\n}\n\n// Shadow sm under a hovered row (Figma: 0 1 1 and 0 1 1.5 in effect/shadow-sm).\nconst rowHover =\n 'hover:[filter:drop-shadow(0_1px_1px_var(--effect-shadow-sm))_drop-shadow(0_1px_1.5px_var(--effect-shadow-sm))] data-[force=hover]:[filter:drop-shadow(0_1px_1px_var(--effect-shadow-sm))_drop-shadow(0_1px_1.5px_var(--effect-shadow-sm))]'\n\nfunction compare(a: unknown, b: unknown) {\n if (typeof a === 'number' && typeof b === 'number') return a - b\n return String(a ?? '').localeCompare(String(b ?? ''), undefined, { numeric: true })\n}\n\nexport function Table<R extends Row = Row>({\n columns,\n rows,\n selectable = false,\n zebra = false,\n overflow = 'fit',\n onSortChange,\n defaultSort = null,\n manualSort = false,\n selected: selectedProp,\n onSelectedChange,\n label,\n className,\n ...props\n}: TableProps<R>) {\n const [sort, setSort] = React.useState<Sort>(defaultSort)\n const [selectedState, setSelectedState] = React.useState<string[]>([])\n const selected = selectedProp ?? selectedState\n const setSelected = (ids: string[]) => {\n if (selectedProp === undefined) setSelectedState(ids)\n onSelectedChange?.(ids)\n }\n\n const cycleSort = (key: string) => {\n const next: Sort =\n sort?.key !== key ? { key, direction: 'asc' } : sort.direction === 'asc' ? { key, direction: 'desc' } : null\n setSort(next)\n onSortChange?.(next)\n }\n\n const sortedRows = React.useMemo(() => {\n if (!sort || manualSort) return rows\n const s = [...rows].sort((a, b) => compare(a[sort.key], b[sort.key]))\n return sort.direction === 'desc' ? s.reverse() : s\n }, [rows, sort, manualSort])\n\n const scroll = overflow === 'scroll'\n const allSelected = rows.length > 0 && rows.every((r) => selected.includes(r.id))\n const someSelected = !allSelected && rows.some((r) => selected.includes(r.id))\n\n // Column widths: fr weights as percentages, or fixed pixels when scrolling.\n const totalFr = columns.reduce((n, c) => n + (c.width ?? 1), 0)\n const colWidth = (c: Column<R>) => (scroll ? `${c.width ?? 160}px` : `${((c.width ?? 1) / totalFr) * 100}%`)\n const tableWidth = scroll ? columns.reduce((n, c) => n + (c.width ?? 160), selectable ? 24 : 0) : undefined\n\n // The custom scrollbar and the edge fade follow the viewport's scroll position.\n const viewport = React.useRef<HTMLDivElement>(null)\n const [bar, setBar] = React.useState({ size: 1, offset: 0, atEnd: true })\n React.useEffect(() => {\n const el = viewport.current\n if (!scroll || !el) return\n const update = () => {\n const size = el.clientWidth / el.scrollWidth\n const max = el.scrollWidth - el.clientWidth\n setBar({ size, offset: max > 0 ? el.scrollLeft / el.scrollWidth : 0, atEnd: el.scrollLeft >= max - 1 })\n }\n update()\n el.addEventListener('scroll', update, { passive: true })\n const ro = new ResizeObserver(update)\n ro.observe(el)\n return () => {\n el.removeEventListener('scroll', update)\n ro.disconnect()\n }\n }, [scroll, columns, rows])\n\n // The leading column(s) stay put while the rest scroll.\n const stickyFirst = (bg: string) => (scroll ? cn('sticky z-[1]', bg) : '')\n const firstDataLeft = selectable ? 'left-6' : 'left-0'\n\n const cellPosition = (index: number, count: number) =>\n count === 1 ? cellHover.only : index === 0 ? cellHover.first : index === count - 1 ? cellHover.last : cellHover.middle\n const cellCount = columns.length + (selectable ? 1 : 0)\n\n const table = (\n <table\n aria-label={label}\n className=\"w-full table-fixed border-separate border-spacing-0 text-left\"\n // With overflow=\"fit\" the columns keep at least 120px each, so a phone scrolls instead of crushing them.\n style={tableWidth ? { width: tableWidth, minWidth: '100%' } : { minWidth: columns.length * 120 + (selectable ? 24 : 0) }}\n >\n <colgroup>\n {selectable && <col style={{ width: 24 }} />}\n {columns.map((c) => (\n <col key={c.key} style={{ width: colWidth(c) }} />\n ))}\n </colgroup>\n <thead>\n <tr className=\"bg-component-table-header\">\n {selectable && (\n <th\n scope=\"col\"\n className={cn('border-b border-border-subtle py-2 pl-2 align-middle', stickyFirst('left-0 bg-component-table-header'))}\n >\n <Checkbox\n aria-label=\"Select all rows\"\n checked={allSelected ? true : someSelected ? 'indeterminate' : false}\n onCheckedChange={(v) => setSelected(v === true ? rows.map((r) => r.id) : [])}\n className=\"align-middle\"\n />\n </th>\n )}\n {columns.map((c, i) => {\n const active = sort?.key === c.key ? sort.direction : undefined\n const labelClass =\n 'inline-flex max-w-full items-center gap-2.5 overflow-hidden rounded-md px-2 py-[3px] text-sm leading-[18px] font-medium whitespace-nowrap text-text-muted'\n return (\n <th\n key={c.key}\n scope=\"col\"\n aria-sort={c.sortable ? (active === 'asc' ? 'ascending' : active === 'desc' ? 'descending' : 'none') : undefined}\n className={cn(\n 'h-8 overflow-hidden border-b border-border-subtle py-1 pr-2 pl-1 align-middle font-medium',\n c.align === 'right' && 'text-right',\n i === 0 && stickyFirst(cn(firstDataLeft, 'bg-component-table-header')),\n )}\n >\n {c.sortable ? (\n <button\n type=\"button\"\n onClick={() => cycleSort(c.key)}\n className={cn(\n labelClass,\n 'transition-colors duration-(--duration-fast) ease-(--ease-out) focus-visible:outline-none',\n 'satin-hover:bg-bg-hover satin-focus:bg-bg-hover satin-focus:[box-shadow:0_0_0_2px_var(--action-focus-ring)]',\n )}\n >\n <span className=\"truncate\">{c.header}</span>\n {active && <SortIcon direction={active} />}\n </button>\n ) : (\n <span className={labelClass}>{c.header}</span>\n )}\n </th>\n )\n })}\n </tr>\n </thead>\n <tbody>\n {sortedRows.map((row, r) => {\n const isSelected = selected.includes(row.id)\n const rowBg = zebra && r % 2 === 1 ? 'bg-component-table-zebra' : 'bg-bg-card'\n return (\n <tr key={row.id} data-state={isSelected ? 'selected' : undefined} className={cn('group/row', rowBg, rowHover)}>\n {selectable && (\n <td className={cn('py-2 pl-2 align-middle', cellPosition(0, cellCount), stickyFirst(cn('left-0', rowBg)))}>\n <Checkbox\n aria-label={`Select row ${r + 1}`}\n checked={isSelected}\n onCheckedChange={(v) =>\n setSelected(v === true ? [...selected, row.id] : selected.filter((id) => id !== row.id))\n }\n className=\"align-middle\"\n />\n </td>\n )}\n {columns.map((c, i) => {\n const content = c.cell ? c.cell(row) : (row[c.key] as React.ReactNode)\n const plain = typeof content === 'string' || typeof content === 'number'\n return (\n <td\n key={c.key}\n className={cn(\n 'h-10 overflow-hidden py-2 pr-2.5 pl-3 align-middle text-body leading-(--text-body--line-height) text-text-default',\n c.align === 'right' && 'text-right',\n cellPosition(i + (selectable ? 1 : 0), cellCount),\n i === 0 && stickyFirst(cn(firstDataLeft, rowBg)),\n )}\n >\n {plain ? (\n <span className=\"block truncate\">{content}</span>\n ) : (\n <div className={cn('flex min-w-0 items-center gap-1 overflow-hidden', c.align === 'right' && 'justify-end')}>\n {content}\n </div>\n )}\n </td>\n )\n })}\n </tr>\n )\n })}\n </tbody>\n </table>\n )\n\n return (\n <div\n data-slot=\"table\"\n className={cn('relative overflow-hidden rounded-xl border border-border-subtle bg-bg-card', className)}\n {...props}\n >\n {scroll ? (\n <>\n <div className=\"relative\">\n <div\n ref={viewport}\n tabIndex={0}\n role=\"region\"\n aria-label={label ? `${label}, scrolls sideways` : 'Table, scrolls sideways'}\n className=\"overflow-x-auto [scrollbar-width:none] focus-visible:outline-none [&::-webkit-scrollbar]:hidden\"\n >\n {table}\n </div>\n <div\n aria-hidden\n className={cn(\n 'pointer-events-none absolute inset-y-0 right-0 w-16 bg-linear-to-r from-bg-card-fade to-bg-card',\n 'transition-opacity duration-(--duration-fast) ease-(--ease-out)',\n bar.atEnd && 'opacity-0',\n )}\n />\n </div>\n <div aria-hidden className=\"px-3 pt-1.5 pb-1\">\n <div className=\"relative h-1.5 overflow-hidden rounded-full bg-bg-muted\">\n <div\n className=\"absolute inset-y-0 left-0 rounded-full bg-border-strong\"\n style={{ width: `${bar.size * 100}%`, transform: `translateX(${(bar.offset / bar.size) * 100}%)` }}\n />\n </div>\n </div>\n </>\n ) : (\n <div className=\"overflow-x-auto overscroll-x-contain\">{table}</div>\n )}\n </div>\n )\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/card.tsx"],"names":[],"mappings":";;;;;;;AAoBA,IAAM,YAAA,GAAe,GAAA;AAAA,EACnB,+GAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,qCAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB,EAAE,IAAA,EAAM,IAAA;AAAK;AAElC;AAYO,SAAS,IAAA,CAAK;AAAA,EACnB,SAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA,GAAa,OAAA;AAAA,EACb,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAc;AACZ,EAAA,MAAM,UAAgB,KAAA,CAAA,KAAA,EAAM;AAC5B,EAAA,MAAM,SAAA,GAAY,KAAA,IAAS,IAAA,IAAQ,WAAA,IAAe,IAAA;AAClD,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,MAAA;AAAA,MACV,IAAA,EAAM,KAAA,IAAS,IAAA,GAAO,OAAA,GAAU,MAAA;AAAA,MAChC,iBAAA,EAAiB,KAAA,IAAS,IAAA,GAAO,OAAA,GAAU,MAAA;AAAA,MAC3C,WAAW,EAAA,CAAG,YAAA,CAAa,EAAE,IAAA,EAAM,GAAG,SAAS,CAAA;AAAA,MAC9C,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,SAAA,oBACC,IAAA,CAAC,SAAI,WAAA,EAAU,aAAA,EAAc,WAAW,EAAA,CAAG,uDAAA,EAAyD,OAAA,IAAW,OAAO,CAAA,EACnH,QAAA,EAAA;AAAA,UAAA,KAAA,IAAS,wBACR,GAAA,CAAC,KAAA,EAAA,EAAI,IAAI,OAAA,EAAS,SAAA,EAAU,0EACzB,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,UAED,eAAe,IAAA,oBAAQ,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,6BAA6B,QAAA,EAAA,WAAA,EAAY;AAAA,SAAA,EAChF,CAAA;AAAA,QAED,QAAA,IAAY,wBACX,GAAA,CAAC,KAAA,EAAA,EAAI,aAAU,WAAA,EAAY,SAAA,EAAU,sCAClC,QAAA,EACH,CAAA;AAAA,QAED,MAAA,IAAU,wBACT,GAAA,CAAC,KAAA,EAAA,EAAI,aAAU,aAAA,EAAc,SAAA,EAAU,0CACpC,QAAA,EAAA,MAAA,EACH,CAAA;AAAA,QAED,OAAA,oBACC,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,UAAA;AAAA,YACR,QAAA,EAAQ,IAAA;AAAA,YACR,YAAA,EAAY,UAAA;AAAA,YACZ,OAAA,EAAS,OAAA;AAAA,YACT,SAAA,EAAU,gCAAA;AAAA,YAEV,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAM,aAAA,EAAW,IAAA,EAAC;AAAA;AAAA;AACrB;AAAA;AAAA,GAEJ;AAEJ","file":"chunk-XILQ7GXE.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { Xmark } from 'iconoir-react'\nimport { cn } from '../lib/utils'\nimport { Button } from './button'\n\n/**\n * Card, 1:1 with the uiKit `Card` set (1122:20156): bg/card, 1px border/default, radius-2xl (16),\n * no shadow, 405 wide by default. Three stacked sections with no gap between them:\n *\n * - header: title in Label/lg (14/14 medium), description in text/sm muted, 2px apart.\n * Padding 16 / 16 / 0 on md, 12 / 12 / 0 on sm (no bottom padding: the body's top padding\n * is the space under it).\n * - body (children): 16 padding on md, 12 on sm, children 8 apart.\n * - footer: same padding as the body; its items sit in a row, 8 apart.\n *\n * `onClose` adds a tertiary 28px icon button 7px from the top-right corner.\n */\nconst cardVariants = cva(\n 'relative flex w-[405px] max-w-full flex-col overflow-clip rounded-2xl border border-border-default bg-bg-card',\n {\n variants: {\n size: {\n md: '[--card-pad:calc(var(--spacing)*4)]',\n sm: '[--card-pad:calc(var(--spacing)*3)]',\n },\n },\n defaultVariants: { size: 'md' },\n },\n)\n\nexport interface CardProps extends Omit<React.ComponentProps<'div'>, 'title'>, VariantProps<typeof cardVariants> {\n title?: React.ReactNode\n description?: React.ReactNode\n footer?: React.ReactNode\n /** Shows the close button. */\n onClose?: () => void\n /** Accessible name of the close button. */\n closeLabel?: string\n}\n\nexport function Card({\n className,\n size,\n title,\n description,\n footer,\n onClose,\n closeLabel = 'Close',\n children,\n ...props\n}: CardProps) {\n const titleId = React.useId()\n const hasHeader = title != null || description != null\n return (\n <div\n data-slot=\"card\"\n role={title != null ? 'group' : undefined}\n aria-labelledby={title != null ? titleId : undefined}\n className={cn(cardVariants({ size }), className)}\n {...props}\n >\n {hasHeader && (\n <div data-slot=\"card-header\" className={cn('flex flex-col gap-0.5 px-(--card-pad) pt-(--card-pad)', onClose && 'pr-10')}>\n {title != null && (\n <div id={titleId} className=\"text-base leading-[14px] font-medium tracking-normal text-text-default\">\n {title}\n </div>\n )}\n {description != null && <p className=\"text-body text-text-muted\">{description}</p>}\n </div>\n )}\n {children != null && (\n <div data-slot=\"card-body\" className=\"flex flex-col gap-2 p-(--card-pad)\">\n {children}\n </div>\n )}\n {footer != null && (\n <div data-slot=\"card-footer\" className=\"flex items-center gap-2 p-(--card-pad)\">\n {footer}\n </div>\n )}\n {onClose && (\n <Button\n variant=\"tertiary\"\n iconOnly\n aria-label={closeLabel}\n onClick={onClose}\n className=\"absolute top-[7px] right-[7px]\"\n >\n <Xmark aria-hidden />\n </Button>\n )}\n </div>\n )\n}\n\nexport { cardVariants }\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/input-otp.tsx"],"names":[],"mappings":"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","file":"chunk-XL75JRUA.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { CheckCircle } from 'iconoir-react'\nimport { cn } from '../lib/utils'\nimport { FieldChrome, useFieldChrome } from './select'\n\n/**\n * InputOTP, 1:1 with the uiKit design (🆕 input otp & number): a one-time code as 36×36 cells,\n * 8px apart, in groups (3 + 3 by default) split by an 8px border/strong dash. Each cell wears the\n * field skin (bg/field, border/default, radius-lg, shadow xs); the cell the next digit goes into\n * gets the focus border and ring and a blinking caret while the field has focus. A digit is\n * text/base medium. With an error every cell turns action/destructive and the message replaces the\n * hint under the cells; label, hint and error sit like Input's. With `success` (the code checked\n * out) every cell's border turns status/green/fg and the message, in the same colour, leads with a\n * 16px check.\n *\n * The message never moves the cells: it is as wide as the cells (it wraps rather than widening\n * the field, which would shift a centred field sideways) and keeps a 20px line even while empty,\n * so swapping hint → \"Checking…\" → success or error leaves the code where it is.\n *\n * The field is as wide as its cells, so it centres wherever it is placed. Focus shows only on\n * the active cell: the real input carries no ring of its own.\n *\n * One real <input> lies over the cells (transparent text and caret), so typing, deleting, paste\n * and the browser's SMS autofill (`autocomplete=\"one-time-code\"`) all work as in any field, and\n * screen readers hear one text box. Only digits by default (`pattern`); `onComplete` fires when\n * every cell is filled.\n */\nexport interface InputOTPProps {\n /** How many characters. */\n length?: number\n /** Cells per group; groups are split by a dash. 0 for one group. */\n groupSize?: number\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n /** Every cell is filled. */\n onComplete?: (value: string) => void\n /** Which characters are allowed. Digits by default. */\n pattern?: RegExp\n label?: React.ReactNode\n hint?: React.ReactNode\n /** An error message (replaces the hint), or `true` to mark the cells invalid without one. */\n error?: React.ReactNode | boolean\n /** The code checked out: a message under the cells (replaces the hint), or `true` for green cells alone. Ignored while there is an error. */\n success?: React.ReactNode | boolean\n disabled?: boolean\n autoFocus?: boolean\n id?: string\n name?: string\n 'aria-label'?: string\n className?: string\n}\n\nexport function InputOTP({\n length = 6,\n groupSize = 3,\n value: valueProp,\n defaultValue = '',\n onValueChange,\n onComplete,\n pattern = /^\\d$/,\n label,\n hint,\n error,\n success,\n disabled,\n autoFocus,\n id,\n name,\n className,\n ...props\n}: InputOTPProps) {\n // The message under the cells is drawn here, so the chrome only gets whether there is an error.\n const chrome = useFieldChrome({ id, disabled, error: error ? true : undefined })\n const isError = typeof error === 'string' || React.isValidElement(error)\n const isSuccess = !chrome.invalid && Boolean(success)\n const successMessage = isSuccess && success !== true ? (success as React.ReactNode) : null\n const message = isError ? (error as React.ReactNode) : successMessage ?? (chrome.invalid ? null : hint)\n const messageId = message ? `${chrome.controlId}-message` : undefined\n const describedBy = [chrome.describedBy, messageId].filter(Boolean).join(' ') || undefined\n const [inner, setInner] = React.useState(defaultValue)\n const value = (valueProp ?? inner).slice(0, length)\n const [focused, setFocused] = React.useState(false)\n const inputRef = React.useRef<HTMLInputElement>(null)\n\n const set = (raw: string) => {\n const next = [...raw].filter((c) => pattern.test(c)).join('').slice(0, length)\n if (valueProp == null) setInner(next)\n onValueChange?.(next)\n if (next.length === length && next !== value) onComplete?.(next)\n }\n\n const active = Math.min(value.length, length - 1)\n const cells = Array.from({ length }, (_, i) => i)\n\n return (\n <FieldChrome label={label} chrome={chrome} className={cn('w-fit', className)}>\n <div\n data-slot=\"input-otp\"\n data-disabled={chrome.disabled || undefined}\n className={cn('relative flex w-fit items-center gap-2', chrome.disabled && 'opacity-50')}\n >\n {cells.map((i) => {\n const isActive = focused && i === active\n return (\n <React.Fragment key={i}>\n {groupSize > 0 && i > 0 && i % groupSize === 0 && (\n <span aria-hidden className=\"h-px w-2 shrink-0 bg-border-strong\" />\n )}\n <span\n aria-hidden\n data-active={isActive || undefined}\n className={cn(\n 'relative grid size-9 shrink-0 place-items-center rounded-lg border bg-bg-field text-base leading-[21px] font-medium text-text-default',\n '[box-shadow:0_1px_2px_0_var(--effect-shadow-xs)]',\n 'transition-[border-color,box-shadow] duration-(--duration-fast) ease-(--ease-out)',\n chrome.invalid ? 'border-action-destructive-bg' : isSuccess ? 'border-status-green-fg' : 'border-border-default',\n isActive &&\n (chrome.invalid\n ? '[box-shadow:0_0_0_2px_var(--action-destructive-glow)]'\n : isSuccess\n ? '[box-shadow:0_0_0_2px_var(--status-green-border)]'\n : 'border-border-focus [box-shadow:0_0_0_2px_var(--action-focus-ring)]'),\n )}\n >\n {value[i] ?? ''}\n {isActive && value.length < length && (\n <span className=\"absolute h-[18px] w-px animate-[satin-caret_1s_steps(1)_infinite] bg-text-default\" />\n )}\n </span>\n </React.Fragment>\n )\n })}\n <input\n ref={inputRef}\n id={chrome.controlId}\n name={name}\n value={value}\n onChange={(e) => set(e.target.value)}\n onFocus={(e) => {\n setFocused(true)\n // Always type at the end: the cells show where.\n const end = e.currentTarget.value.length\n requestAnimationFrame(() => inputRef.current?.setSelectionRange(end, end))\n }}\n onBlur={() => setFocused(false)}\n onSelect={(e) => {\n const end = e.currentTarget.value.length\n if (e.currentTarget.selectionStart !== end) e.currentTarget.setSelectionRange(end, end)\n }}\n maxLength={length}\n inputMode={pattern.test('5') && !pattern.test('a') ? 'numeric' : 'text'}\n autoComplete=\"one-time-code\"\n autoFocus={autoFocus}\n disabled={chrome.disabled}\n aria-invalid={chrome.invalid || undefined}\n aria-describedby={describedBy}\n aria-label={props['aria-label']}\n spellCheck={false}\n className=\"absolute inset-0 w-full cursor-text bg-transparent text-transparent caret-transparent outline-none selection:bg-transparent focus-visible:outline-none focus-visible:ring-0 focus-visible:[box-shadow:none] disabled:cursor-not-allowed\"\n />\n </div>\n {/* 0 wide and min-w-full: as wide as the cells, never wider; min-h-5 holds the line while empty. */}\n <p\n id={messageId}\n aria-live=\"polite\"\n className={cn(\n 'flex min-h-5 w-0 min-w-full items-start gap-1.5 text-sm leading-5',\n isError ? 'text-action-destructive-bg' : successMessage ? 'text-status-green-fg' : 'text-text-muted',\n )}\n >\n {successMessage && <CheckCircle aria-hidden className=\"mt-0.5 size-4 shrink-0 [stroke-width:1.875]\" />}\n {message}\n </p>\n </FieldChrome>\n )\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/date-picker.tsx"],"names":["_","CalendarIcon","PopoverPrimitive"],"mappings":"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","file":"chunk-XZNHT6MO.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { Popover as PopoverPrimitive } from 'radix-ui'\nimport { Calendar as CalendarIcon, NavArrowDown, NavArrowLeft, NavArrowRight } from 'iconoir-react'\nimport { cn } from '../lib/utils'\nimport { Button } from './button'\nimport { FieldChrome, Select, useFieldChrome } from './select'\n\n/**\n * Calendar, DatePicker and DateRangePicker, 1:1 with the uiKit design (🆕 date picker).\n *\n * Calendar: one month (or two side by side), Monday first, weekdays as one letter in text/xs muted.\n * Days are 36px in 40px cells, their numbers text/sm (13px) medium. A picked day is a primary circle; the two ends of a range are\n * primary squares rounded radius-md, with a band in status/brand/bg — a tint of the brand —\n * from the middle of the first to the middle of the last. While the end is being picked the day\n * under the pointer gets a bg/hover circle and the band runs up to it. Today is a 12×2 primary\n * dash under its number; days of other months are text/subtle.\n *\n * Header: \"November 2026\" in text/sm (13px) medium, with arrows, or (`header=\"picker\"`) \"‹ November ›\" on the left and the\n * year as a small Select on the right, newest first, the shown year checked. Always six weeks, so\n * the height never jumps between months.\n *\n * Keyboard: the grid is one tab stop; arrows move a day or a week, Page Up / Down a month, Home /\n * End the week, Enter or Space picks.\n */\n\nexport type DateRange = { from: Date | null; to: Date | null }\n\nconst MONTHS = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\nconst DOW = ['M', 'T', 'W', 'T', 'F', 'S', 'S']\nconst DOW_FULL = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']\n\nconst startOfDay = (d: Date) => new Date(d.getFullYear(), d.getMonth(), d.getDate())\nconst sameDay = (a?: Date | null, b?: Date | null) => !!a && !!b && a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate()\nconst addDays = (d: Date, n: number) => new Date(d.getFullYear(), d.getMonth(), d.getDate() + n)\nconst addMonths = (d: Date, n: number) => new Date(d.getFullYear(), d.getMonth() + n, 1)\nconst fullDate = new Intl.DateTimeFormat('en-US', { weekday: 'long', month: 'long', day: 'numeric', year: 'numeric' })\nexport const formatDate = (d: Date) => new Intl.DateTimeFormat('en-US', { month: 'short', day: 'numeric', year: 'numeric' }).format(d)\nexport const formatRange = ({ from, to }: DateRange) => {\n if (!from) return ''\n if (!to || sameDay(from, to)) return formatDate(from)\n const sameYear = from.getFullYear() === to.getFullYear()\n const f = new Intl.DateTimeFormat('en-US', { month: 'short', day: 'numeric', ...(sameYear ? {} : { year: 'numeric' }) }).format(from)\n return `${f} – ${formatDate(to)}`\n}\n\n/**\n * Always six weeks, Monday first, filled with the end of the month before and the start of the\n * one after, so the calendar keeps its height from month to month.\n */\nfunction weeksOf(month: Date) {\n const first = new Date(month.getFullYear(), month.getMonth(), 1)\n const start = addDays(first, -((first.getDay() + 6) % 7))\n return Array.from({ length: 6 }, (_, w) => Array.from({ length: 7 }, (_, i) => addDays(start, w * 7 + i)))\n}\n\nexport interface CalendarProps {\n mode?: 'single' | 'range'\n /** single: the picked day. */\n value?: Date | null\n onValueChange?: (value: Date) => void\n /** range: the picked range. */\n range?: DateRange\n onRangeChange?: (range: DateRange) => void\n /** The first month shown. Defaults to the value's month, or today's. */\n month?: Date\n onMonthChange?: (month: Date) => void\n /** Two months side by side (the range picker). */\n months?: 1 | 2\n header?: 'title' | 'picker'\n min?: Date\n max?: Date\n /** Today, for the dash. Defaults to now. */\n today?: Date\n className?: string\n}\n\nexport function Calendar({\n mode = 'single',\n value,\n onValueChange,\n range,\n onRangeChange,\n month: monthProp,\n onMonthChange,\n months = 1,\n header = 'title',\n min,\n max,\n today: todayProp,\n className,\n}: CalendarProps) {\n const today = startOfDay(todayProp ?? new Date())\n const anchor = mode === 'range' ? range?.from : value\n const [innerMonth, setInnerMonth] = React.useState(() => addMonths(anchor ?? today, 0))\n const month = monthProp ? addMonths(monthProp, 0) : innerMonth\n const setMonth = (m: Date) => {\n if (!monthProp) setInnerMonth(m)\n onMonthChange?.(m)\n }\n const [focus, setFocus] = React.useState<Date>(() => startOfDay(anchor ?? today))\n const [hover, setHover] = React.useState<Date | null>(null)\n const gridRef = React.useRef<HTMLDivElement>(null)\n\n const disabled = (d: Date) => (min && d < startOfDay(min)) || (max && d > startOfDay(max)) || false\n const picking = mode === 'range' && !!range?.from && !range?.to\n\n const pick = (d: Date) => {\n if (disabled(d)) return\n if (mode === 'single') return onValueChange?.(d)\n if (!range?.from || range.to) return onRangeChange?.({ from: d, to: null })\n onRangeChange?.(d < range.from ? { from: d, to: range.from } : { from: range.from, to: d })\n }\n\n const moveFocus = (d: Date) => {\n setFocus(d)\n const last = addMonths(month, months - 1)\n if (d < month) setMonth(addMonths(d, 0))\n else if (d >= addMonths(last, 1)) setMonth(addMonths(d, -(months - 1)))\n requestAnimationFrame(() => gridRef.current?.querySelector<HTMLElement>('[data-focus]')?.focus())\n }\n\n const onKeyDown = (e: React.KeyboardEvent) => {\n const map: Record<string, () => Date> = {\n ArrowLeft: () => addDays(focus, -1),\n ArrowRight: () => addDays(focus, 1),\n ArrowUp: () => addDays(focus, -7),\n ArrowDown: () => addDays(focus, 7),\n PageUp: () => new Date(focus.getFullYear(), focus.getMonth() - 1, focus.getDate()),\n PageDown: () => new Date(focus.getFullYear(), focus.getMonth() + 1, focus.getDate()),\n Home: () => addDays(focus, -((focus.getDay() + 6) % 7)),\n End: () => addDays(focus, 6 - ((focus.getDay() + 6) % 7)),\n }\n if (map[e.key]) {\n e.preventDefault()\n const next = map[e.key]()\n moveFocus(next)\n if (picking) setHover(next)\n } else if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n pick(focus)\n }\n }\n\n const navBtn = (dir: -1 | 1, label: string, onClick: () => void) => (\n <Button variant=\"tertiary\" size=\"xs\" iconOnly aria-label={label} onClick={onClick}>\n {dir < 0 ? <NavArrowLeft aria-hidden /> : <NavArrowRight aria-hidden />}\n </Button>\n )\n\n const renderMonth = (m: Date, i: number) => {\n const end = range?.to ?? (picking ? hover : null)\n const lo = range?.from && end ? (end < range.from ? end : range.from) : null\n const hi = range?.from && end ? (end < range.from ? range.from : end) : null\n const titleId = `cal-${m.getFullYear()}-${m.getMonth()}`\n return (\n <div key={i} className=\"flex w-[280px] shrink-0 flex-col gap-2\">\n {/* Header */}\n {header === 'picker' && months === 1 ? (\n <div className=\"flex h-8 items-center gap-1\">\n <div className=\"flex items-center gap-1\">\n {navBtn(-1, 'Previous month', () => setMonth(addMonths(month, -1)))}\n <span id={titleId} className=\"min-w-[72px] text-center text-sm leading-5 font-medium text-text-default\">\n {MONTHS[m.getMonth()]}\n </span>\n {navBtn(1, 'Next month', () => setMonth(addMonths(month, 1)))}\n </div>\n <span className=\"flex-1\" />\n {/* The year: a plain Select, the shown year checked. */}\n <Select\n size=\"sm\"\n aria-label=\"Year\"\n value={String(m.getFullYear())}\n onValueChange={(y) => setMonth(new Date(Number(y), m.getMonth(), 1))}\n options={yearOptions(m.getFullYear(), today.getFullYear(), min, max)}\n wrapperClassName=\"w-auto shrink-0\"\n className=\"w-[92px]\"\n />\n </div>\n ) : (\n <div className=\"flex h-8 items-center gap-1\">\n {/* Two months: each title centred over its own month, an empty slot the arrow's size\n balancing the arrow on the other side. */}\n {months === 2 && (i === 0 ? navBtn(-1, 'Previous month', () => setMonth(addMonths(month, -1))) : <span aria-hidden className=\"size-6 shrink-0\" />)}\n <span id={titleId} className={cn('flex-1 text-sm leading-5 font-medium text-text-default', months === 2 && 'text-center')}>\n {MONTHS[m.getMonth()]} {m.getFullYear()}\n </span>\n {months === 1 && navBtn(-1, 'Previous month', () => setMonth(addMonths(month, -1)))}\n {months === 2 && i === 0 && <span aria-hidden className=\"size-6 shrink-0\" />}\n {(months === 1 || i === 1) && navBtn(1, 'Next month', () => setMonth(addMonths(month, 1)))}\n </div>\n )}\n\n {(\n <div role=\"grid\" aria-labelledby={titleId} className=\"flex flex-col gap-1\" onKeyDown={onKeyDown}>\n <div role=\"row\" className=\"flex\">\n {DOW.map((d, k) => (\n <span key={k} role=\"columnheader\" aria-label={DOW_FULL[k]} className=\"grid h-6 w-10 place-items-center text-xs text-text-muted\">\n {d}\n </span>\n ))}\n </div>\n {weeksOf(m).map((week, w) => (\n <div key={w} role=\"row\" className=\"flex\">\n {week.map((d) => {\n const out = d.getMonth() !== m.getMonth()\n const isSingle = mode === 'single' && sameDay(d, value)\n const isEnd = mode === 'range' && !out && (sameDay(d, range?.from) || sameDay(d, range?.to))\n const inBand = mode === 'range' && !out && lo && hi && !sameDay(lo, hi) && d >= lo && d <= hi\n const bandFrom = inBand && sameDay(d, lo) ? 'left-1/2' : 'left-0'\n const bandTo = inBand && sameDay(d, hi) ? 'right-1/2' : 'right-0'\n const isHoverEnd = picking && !out && sameDay(d, hover) && !isEnd\n const isToday = sameDay(d, today)\n const off = disabled(d)\n const focused = sameDay(d, focus) && !out\n return (\n <div\n key={d.toISOString()}\n role=\"gridcell\"\n aria-selected={isSingle || isEnd || undefined}\n // The whole 40px cell tracks the pointer, so the preview never stalls in the\n // gaps between the 36px days.\n onPointerEnter={() => picking && !out && !off && setHover(d)}\n className=\"relative grid size-10 place-items-center\"\n >\n {inBand && <span aria-hidden className={cn('absolute inset-y-0.5 bg-status-brand-bg', bandFrom, bandTo)} />}\n <button\n type=\"button\"\n tabIndex={focused ? 0 : -1}\n data-focus={focused || undefined}\n disabled={off}\n aria-label={fullDate.format(d)}\n aria-current={isToday ? 'date' : undefined}\n onClick={() => {\n setFocus(d)\n pick(d)\n }}\n onFocus={() => setFocus(d)}\n className={cn(\n 'relative grid size-9 place-items-center text-sm leading-5 font-medium outline-none',\n // While the end is being picked the band and the end circle move together,\n // so neither fades: a fade here would trail the pointer.\n !picking && 'transition-[background-color,color] duration-(--duration-fast) ease-(--ease-out)',\n 'focus-visible:[box-shadow:0_0_0_2px_var(--action-focus-ring)] disabled:pointer-events-none disabled:opacity-40',\n isEnd ? 'rounded-md' : 'rounded-full',\n isSingle || isEnd\n ? 'bg-action-primary-bg text-text-on-solid'\n : cn(out ? 'text-text-subtle' : 'text-text-default', isHoverEnd ? 'bg-bg-hover' : !inBand && 'hover:bg-bg-hover'),\n )}\n >\n {d.getDate()}\n {isToday && !isSingle && !isEnd && (\n <span aria-hidden className=\"absolute bottom-1 left-1/2 h-0.5 w-3 -translate-x-1/2 rounded-full bg-action-primary-bg\" />\n )}\n </button>\n </div>\n )\n })}\n </div>\n ))}\n </div>\n )}\n </div>\n )\n }\n\n return (\n <div ref={gridRef} data-slot=\"calendar\" className={cn('flex gap-6', className)} onPointerLeave={() => setHover(null)}>\n {Array.from({ length: months }, (_, i) => renderMonth(addMonths(month, i), i))}\n </div>\n )\n}\n\n/** Years for the dropdown: within min/max, or 100 back and 20 ahead of today. */\nfunction yearOptions(shown: number, thisYear: number, min?: Date, max?: Date) {\n const from = min ? min.getFullYear() : Math.min(shown, thisYear - 100)\n const to = max ? max.getFullYear() : Math.max(shown, thisYear + 20)\n return Array.from({ length: to - from + 1 }, (_, i) => {\n const y = String(to - i)\n return { value: y, label: y }\n })\n}\n\n/* ---------- pickers ---------- */\n\n/** The panels' surface: Popover's bg, border, radius and lg shadow. */\nconst surfaceClass = cn(\n 'rounded-xl border border-border-default bg-bg-popover',\n '[box-shadow:0_4px_6px_-4px_var(--effect-shadow-sm),0_10px_15px_-3px_var(--effect-shadow-sm)]',\n)\nconst popClass = cn(\n 'z-50 outline-none',\n 'origin-(--radix-popover-content-transform-origin) data-[state=open]:animate-[satin-enter_var(--duration-base)_var(--ease-out)]',\n)\n\ninterface FieldBits {\n label?: React.ReactNode\n hint?: React.ReactNode\n error?: React.ReactNode | boolean\n placeholder?: string\n disabled?: boolean\n id?: string\n size?: 'sm' | 'md' | 'lg'\n /** Classes for the outer wrapper (label + field + hint). `className` styles the field. */\n wrapperClassName?: string\n className?: string\n}\n\nfunction Trigger({ text, placeholder, chrome, size, open, className, ...props }: { text: string; placeholder: string; chrome: ReturnType<typeof useFieldChrome>; size: 'sm' | 'md' | 'lg'; open: boolean; className?: string } & React.ComponentProps<'button'>) {\n return (\n <button\n type=\"button\"\n id={chrome.controlId}\n data-slot=\"date-picker-trigger\"\n data-size={size}\n data-filled={text ? true : undefined}\n data-invalid={chrome.invalid || undefined}\n data-disabled={chrome.disabled || undefined}\n data-state={open ? 'open' : 'closed'}\n disabled={chrome.disabled}\n aria-invalid={chrome.invalid || undefined}\n aria-describedby={chrome.describedBy}\n className={cn('satin-field cursor-pointer text-left', className)}\n {...props}\n >\n <span className=\"satin-field-icon\" aria-hidden>\n <CalendarIcon />\n </span>\n <span className={cn('min-w-0 flex-1 truncate', text ? 'text-text-default' : 'text-text-placeholder')}>{text || placeholder}</span>\n <span className=\"satin-field-icon\" aria-hidden>\n <NavArrowDown className={cn('transition-transform duration-(--duration-fast) ease-(--ease-out)', open && 'rotate-180')} />\n </span>\n </button>\n )\n}\n\nexport interface DatePickerPanelProps {\n value?: Date | null\n onValueChange?: (value: Date) => void\n min?: Date\n max?: Date\n today?: Date\n className?: string\n}\n\n/** The date picker's panel on its own, in place: the popover surface with the Calendar, month and year to pick. */\nexport function DatePickerPanel({ value, onValueChange, min, max, today, className }: DatePickerPanelProps) {\n return (\n <div data-slot=\"date-picker-panel\" className={cn(surfaceClass, 'w-fit p-3', className)}>\n <Calendar header=\"picker\" value={value} onValueChange={onValueChange} min={min} max={max} today={today} />\n </div>\n )\n}\n\nexport interface DatePickerProps extends FieldBits {\n value?: Date | null\n defaultValue?: Date | null\n onValueChange?: (value: Date) => void\n min?: Date\n max?: Date\n today?: Date\n /** Portal target. */\n container?: HTMLElement | null\n}\n\n/** A date field: the kit Input's skin with a calendar icon; the Calendar opens 4px below, with month and year to pick. */\nexport function DatePicker({\n value: valueProp,\n defaultValue = null,\n onValueChange,\n min,\n max,\n today,\n label,\n hint,\n error,\n placeholder = 'Pick a date',\n disabled,\n id,\n size = 'md',\n container,\n wrapperClassName,\n className,\n}: DatePickerProps) {\n const chrome = useFieldChrome({ id, disabled, error, hint })\n const [inner, setInner] = React.useState<Date | null>(defaultValue)\n const value = valueProp !== undefined ? valueProp : inner\n const [open, setOpen] = React.useState(false)\n return (\n <FieldChrome label={label} chrome={chrome} className={wrapperClassName}>\n <PopoverPrimitive.Root open={open} onOpenChange={setOpen}>\n <PopoverPrimitive.Trigger asChild>\n <Trigger text={value ? formatDate(value) : ''} placeholder={placeholder} chrome={chrome} size={size} open={open} className={className} />\n </PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal container={container}>\n <PopoverPrimitive.Content data-slot=\"date-picker\" align=\"start\" sideOffset={4} collisionPadding={8} className={popClass}>\n <DatePickerPanel\n value={value}\n min={min}\n max={max}\n today={today}\n onValueChange={(d) => {\n if (valueProp === undefined) setInner(d)\n onValueChange?.(d)\n setOpen(false)\n }}\n />\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n </FieldChrome>\n )\n}\n\nconst todayDate = () => startOfDay(new Date())\n\nexport interface DateRangePickerProps extends FieldBits {\n value?: DateRange\n defaultValue?: DateRange\n /** Called on Apply. */\n onValueChange?: (value: DateRange) => void\n min?: Date\n max?: Date\n today?: Date\n applyLabel?: string\n cancelLabel?: string\n container?: HTMLElement | null\n}\n\n/**\n * A range field: two months, Cancel and Apply in the footer. Picks wait for Apply. Picking an\n * end before the start swaps them.\n */\nexport function DateRangePicker({\n value: valueProp,\n defaultValue = { from: null, to: null },\n onValueChange,\n min,\n max,\n today,\n label,\n hint,\n error,\n placeholder = 'Pick dates',\n disabled,\n id,\n size = 'md',\n applyLabel = 'Apply',\n cancelLabel = 'Cancel',\n container,\n wrapperClassName,\n className,\n}: DateRangePickerProps) {\n const chrome = useFieldChrome({ id, disabled, error, hint })\n const [inner, setInner] = React.useState<DateRange>(defaultValue)\n const value = valueProp ?? inner\n const [open, setOpen] = React.useState(false)\n const commit = (r: DateRange) => {\n if (!valueProp) setInner(r)\n onValueChange?.(r)\n setOpen(false)\n }\n return (\n <FieldChrome label={label} chrome={chrome} className={wrapperClassName}>\n <PopoverPrimitive.Root open={open} onOpenChange={setOpen}>\n <PopoverPrimitive.Trigger asChild>\n <Trigger text={formatRange(value)} placeholder={placeholder} chrome={chrome} size={size} open={open} className={className} />\n </PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal container={container}>\n <PopoverPrimitive.Content data-slot=\"date-range-picker\" align=\"start\" sideOffset={4} collisionPadding={8} className={popClass}>\n <DateRangePickerPanel\n value={value}\n min={min}\n max={max}\n today={today}\n applyLabel={applyLabel}\n cancelLabel={cancelLabel}\n onApply={commit}\n onCancel={() => setOpen(false)}\n />\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n </FieldChrome>\n )\n}\n\nexport interface DateRangePickerPanelProps {\n /** The range the panel starts from; picks stay in the panel until Apply. */\n value?: DateRange\n /** Apply. */\n onApply?: (value: DateRange) => void\n onCancel?: () => void\n min?: Date\n max?: Date\n today?: Date\n applyLabel?: string\n cancelLabel?: string\n className?: string\n}\n\n/** The range picker's panel on its own, in place: two months, Cancel and Apply. */\nexport function DateRangePickerPanel({\n value = { from: null, to: null },\n onApply,\n onCancel,\n min,\n max,\n today,\n applyLabel = 'Apply',\n cancelLabel = 'Cancel',\n className,\n}: DateRangePickerPanelProps) {\n const [draft, setDraft] = React.useState<DateRange>(value)\n const [month, setMonth] = React.useState(() => addMonths(value.from ?? today ?? todayDate(), 0))\n return (\n <div data-slot=\"date-range-picker-panel\" className={cn(surfaceClass, 'flex w-fit shrink-0 flex-col overflow-hidden', className)}>\n <div className=\"p-3\">\n <Calendar mode=\"range\" months={2} range={draft} onRangeChange={setDraft} month={month} onMonthChange={setMonth} min={min} max={max} today={today} />\n </div>\n <div className=\"flex items-center justify-end gap-2 border-t border-border-subtle px-3 py-2\">\n <Button variant=\"secondary\" onClick={() => { setDraft(value); onCancel?.() }}>\n {cancelLabel}\n </Button>\n <Button disabled={!draft.from || !draft.to} onClick={() => onApply?.(draft)}>\n {applyLabel}\n </Button>\n </div>\n </div>\n )\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/floating.tsx"],"names":[],"mappings":";;;;;;AAoCO,SAAS,QAAA,CAAS,EAAE,MAAA,EAAQ,IAAA,GAAO,KAAA,EAAO,UAAA,GAAa,CAAA,EAAG,gBAAA,GAAmB,CAAA,EAAG,SAAA,EAAW,QAAA,EAAS,EAAkB;AAC3H,EAAA,MAAM,QAAA,GAAiB,aAA2B,IAAI,CAAA;AACtD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAU,eAAS,KAAK,CAAA;AAClD,EAAM,gBAAU,MAAM,UAAA,CAAW,IAAI,CAAA,EAAG,EAAE,CAAA;AAE1C,EAAA,MAAM,EAAE,IAAA,EAAM,cAAA,EAAgB,WAAW,cAAA,EAAgB,YAAA,KAAiB,WAAA,CAAY;AAAA,IACpF,QAAA,EAAU,OAAA;AAAA,IACV,SAAA,EAAW,IAAA;AAAA,IACX,QAAA,EAAU,EAAE,SAAA,EAAW,MAAA,EAAO;AAAA,IAC9B,oBAAA,EAAsB,UAAA;AAAA,IACtB,UAAA,EAAY;AAAA,MACV,OAAO,UAAU,CAAA;AAAA,MACjB,IAAA,CAAK,EAAE,OAAA,EAAS,gBAAA,EAAkB,CAAA;AAAA,MAClC,KAAA,CAAM,EAAE,OAAA,EAAS,gBAAA,EAAkB,CAAA;AAAA,MACnC,MAAM,EAAE,OAAA,EAAS,QAAA,EAAU,OAAA,EAAS,GAAG;AAAA;AACzC,GACD,CAAA;AAED,EAAA,IAAI,CAAC,OAAA,IAAW,CAAC,MAAA,EAAQ,OAAO,IAAA;AAChC,EAAA,MAAM,MAAA,GAAS,SAAA,CAAU,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AACrC,EAAA,MAAM,EAAE,CAAA,EAAG,CAAA,EAAE,GAAI,cAAA,CAAe,SAAS,EAAC;AAC1C,EAAA,MAAM,UAAA,GAAkC,MAAA,KAAW,KAAA,IAAS,MAAA,KAAW,QAAA,GAAW,EAAE,IAAA,EAAM,CAAA,IAAK,MAAA,EAAU,GAAI,EAAE,GAAA,EAAK,KAAK,MAAA,EAAU;AAEnI,EAAA,OAAO,YAAA;AAAA,oBACL,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,KAAK,IAAA,CAAK,WAAA;AAAA,QACV,WAAA,EAAW,MAAA;AAAA,QACX,SAAA;AAAA,QAEA,KAAA,EAAO,EAAE,GAAG,cAAA,EAAgB,QAAQ,EAAA,EAAI,UAAA,EAAY,YAAA,GAAe,MAAA,GAAY,QAAA,EAAS;AAAA,QAEvF,mBAAS,EAAE,IAAA,EAAM,MAAA,EAAQ,QAAA,EAAU,YAAY;AAAA;AAAA,KAClD;AAAA,IACA,QAAA,CAAS;AAAA,GACX;AACF","file":"chunk-Y5AYU7PK.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { createPortal } from 'react-dom'\nimport { arrow, autoUpdate, flip, offset, shift, useFloating } from '@floating-ui/react-dom'\n\n/**\n * Anchored positioning for anything that floats next to an element: tooltips, chart\n * tooltips, small hints. Built on Floating UI (the engine Radix uses for Tooltip, Popover and\n * DropdownMenu), so every floating layer in Satin keeps the same rules:\n *\n * - it renders in a portal on `body`, so a card's `overflow: hidden` never cuts it off;\n * - it flips to the other side when there's no room and slides along the edge to stay\n * 8px inside the viewport;\n * - its pointer follows the anchor when it slides;\n * - it follows the anchor on scroll and resize.\n */\nexport type FloatingSide = 'top' | 'right' | 'bottom' | 'left'\n\nexport interface FloatingProps {\n /** The element it points at. Nothing renders while it's null. */\n anchor: Element | null\n side?: FloatingSide\n /** Gap between the anchor and the layer, pointer included. */\n sideOffset?: number\n /** How close to the viewport edge it may go. */\n collisionPadding?: number\n className?: string\n /** Gets the side it ended up on and the pointer's props (ref and position). */\n children: (state: {\n side: FloatingSide\n arrowRef: React.RefObject<HTMLElement | null>\n arrowStyle: React.CSSProperties\n }) => React.ReactNode\n}\n\nexport function Floating({ anchor, side = 'top', sideOffset = 8, collisionPadding = 8, className, children }: FloatingProps) {\n const arrowRef = React.useRef<HTMLElement | null>(null)\n const [mounted, setMounted] = React.useState(false)\n React.useEffect(() => setMounted(true), [])\n\n const { refs, floatingStyles, placement, middlewareData, isPositioned } = useFloating({\n strategy: 'fixed',\n placement: side,\n elements: { reference: anchor },\n whileElementsMounted: autoUpdate,\n middleware: [\n offset(sideOffset),\n flip({ padding: collisionPadding }),\n shift({ padding: collisionPadding }),\n arrow({ element: arrowRef, padding: 8 }),\n ],\n })\n\n if (!mounted || !anchor) return null\n const actual = placement.split('-')[0] as FloatingSide\n const { x, y } = middlewareData.arrow ?? {}\n const arrowStyle: React.CSSProperties = actual === 'top' || actual === 'bottom' ? { left: x ?? undefined } : { top: y ?? undefined }\n\n return createPortal(\n <div\n ref={refs.setFloating}\n data-side={actual}\n className={className}\n // Hidden until the first position lands, so it never flashes in the corner.\n style={{ ...floatingStyles, zIndex: 60, visibility: isPositioned ? undefined : 'hidden' }}\n >\n {children({ side: actual, arrowRef, arrowStyle })}\n </div>,\n document.body,\n )\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/skeleton.tsx"],"names":[],"mappings":";;;;AAsBO,SAAS,QAAA,CAAS,EAAE,KAAA,GAAQ,MAAA,EAAQ,QAAA,GAAW,KAAA,EAAO,KAAA,EAAO,MAAA,EAAQ,SAAA,EAAW,KAAA,EAAO,GAAG,KAAA,EAAM,EAAkB;AACvH,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,aAAA,EAAW,IAAA;AAAA,MACX,WAAA,EAAU,UAAA;AAAA,MACV,YAAA,EAAY,KAAA;AAAA,MACZ,iBAAe,QAAA,IAAY,MAAA;AAAA,MAC3B,SAAA,EAAW,EAAA;AAAA,QACT,8DAAA;AAAA,QACA,UAAU,MAAA,IAAU,gCAAA;AAAA,QACpB,UAAU,QAAA,IAAY,qBAAA;AAAA,QACtB,UAAU,MAAA,IAAU,iCAAA;AAAA,QACpB;AAAA,OACF;AAAA,MACA,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,GAAG,KAAA,EAAM;AAAA,MAChC,GAAG;AAAA;AAAA,GACN;AAEJ","file":"chunk-YG7JOOLJ.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../lib/utils'\n\n/**\n * Skeleton, 1:1 with the uiKit `Skeleton` set (4025:3862): a bg/muted placeholder in three\n * shapes. text is a 12px line at radius-sm (240 wide by default), circle 32px round, rect\n * 240 × 120 at radius-lg. Size it with `width` / `height` or classes.\n *\n * `animated` runs a soft band across the block (a 6% wash of text/default, so it lightens in\n * Dark and darkens in Light), 1.6 s a pass on ease-in-out; with reduced motion it stays still.\n *\n * The blocks are aria-hidden: put `aria-busy` on the region that is loading.\n */\nexport interface SkeletonProps extends React.ComponentProps<'div'> {\n shape?: 'text' | 'circle' | 'rect'\n animated?: boolean\n width?: number | string\n height?: number | string\n}\n\nexport function Skeleton({ shape = 'text', animated = false, width, height, className, style, ...props }: SkeletonProps) {\n return (\n <div\n aria-hidden\n data-slot=\"skeleton\"\n data-shape={shape}\n data-animated={animated || undefined}\n className={cn(\n 'satin-skeleton relative shrink-0 overflow-hidden bg-bg-muted',\n shape === 'text' && 'h-3 w-60 max-w-full rounded-sm',\n shape === 'circle' && 'size-8 rounded-full',\n shape === 'rect' && 'h-30 w-60 max-w-full rounded-lg',\n className,\n )}\n style={{ width, height, ...style }}\n {...props}\n />\n )\n}\n"]}