@uisatin/ui 0.2.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +27 -0
- package/README.md +10 -1
- package/{chunk-P4O6TGDR.js → chunk-3VVO5MY5.js} +28 -26
- package/chunk-47DDBME3.js +87 -0
- package/{chunk-SHDFUXYV.js → chunk-5663JVE5.js} +16 -18
- package/chunk-67CBFB6Y.js +99 -0
- package/chunk-6DWLTGRQ.js +130 -0
- package/chunk-6GNMUJQ4.js +45 -0
- package/chunk-6JTSZAGO.js +177 -0
- package/chunk-6RLSRMB5.js +14 -0
- package/chunk-6Y6CY2DP.js +55 -0
- package/{chunk-O7F3CIDV.js → chunk-7NV53EL5.js} +10 -12
- package/{chunk-BNZVTLHV.js → chunk-7SVMERPH.js} +25 -21
- package/chunk-A52HUWVM.js +24 -0
- package/chunk-AKEZCWNW.js +29 -0
- package/{chunk-SH6NG6VN.js → chunk-APRVUOD6.js} +6 -8
- package/{chunk-QUF2IPOZ.js → chunk-C435UD7V.js} +14 -15
- package/{chunk-B2K45IUR.js → chunk-C6WRJ7DG.js} +5 -7
- package/{chunk-PF3YBUKT.js → chunk-CQFAMWZI.js} +16 -15
- package/chunk-DAKVTPYZ.js +86 -0
- package/{chunk-VAGIAREV.js → chunk-DMZW4LGU.js} +29 -26
- package/chunk-EBZHGRM5.js +46 -0
- package/chunk-EHEXE2UV.js +44 -0
- package/{chunk-72OCFAPT.js → chunk-EQAFDIPE.js} +26 -23
- package/{chunk-LLHTVIM3.js → chunk-EXKSKYG3.js} +7 -9
- package/chunk-FB6DG3LR.js +35 -0
- package/chunk-GH2DEOGO.js +67 -0
- package/{chunk-YG7JOOLJ.js → chunk-GKDMCY2S.js} +5 -7
- package/chunk-GTFUAA6H.js +42 -0
- package/{chunk-TX3H3QMA.js → chunk-HI6QIG55.js} +71 -70
- package/{chunk-6QMSWITQ.js → chunk-HZV7EXGU.js} +24 -26
- package/{chunk-A5XEM3GF.js → chunk-IKJIR6VL.js} +34 -36
- package/{chunk-DO3TBNSC.js → chunk-INJWE2LD.js} +15 -17
- package/chunk-J5UQPROI.js +56 -0
- package/{chunk-6YXUBP27.js → chunk-JCR5TWTF.js} +72 -67
- package/chunk-JKOBDLP3.js +25 -0
- package/chunk-JR3VVDV6.js +37 -0
- package/chunk-JYGCZWET.js +112 -0
- package/{chunk-UGRSWP6U.js → chunk-K5G5OEV5.js} +10 -12
- package/{chunk-B6V4VSGH.js → chunk-KDU7AT2T.js} +14 -15
- package/chunk-KITXKIYW.js +104 -0
- package/{chunk-NN6PKJWS.js → chunk-KQNA22D3.js} +7 -9
- package/{chunk-YPNKBE5X.js → chunk-L5PPN42A.js} +14 -9
- package/chunk-LAOE6Y57.js +95 -0
- package/chunk-LI5VYDLN.js +195 -0
- package/{chunk-7TXHCRAG.js → chunk-LKSFTNPF.js} +8 -10
- package/chunk-LLW3X4ZJ.js +39 -0
- package/{chunk-RTJ76X5U.js → chunk-LWRB4DED.js} +2 -4
- package/{chunk-NSRTTYQ4.js → chunk-M7RILZVW.js} +42 -35
- package/{chunk-LW3TRU5W.js → chunk-MOGWOUCN.js} +28 -16
- package/chunk-NCIRJ5V2.js +108 -0
- package/chunk-NQL6SIIB.js +168 -0
- package/chunk-NTSU44FY.js +81 -0
- package/{chunk-3DINAQLL.js → chunk-P36KBUYD.js} +33 -29
- package/chunk-P6RHT2VM.js +147 -0
- package/{chunk-CL2II6BX.js → chunk-PD2KD5OR.js} +11 -13
- package/{chunk-XL75JRUA.js → chunk-PP46SY7M.js} +42 -22
- package/{chunk-L6NCCSIP.js → chunk-PTK4QAOQ.js} +36 -29
- package/{chunk-HL42K2NH.js → chunk-Q7KVC5B4.js} +17 -17
- package/{chunk-H4NU7NPO.js → chunk-R3DTMBDT.js} +62 -61
- package/{chunk-KNUWZNFV.js → chunk-R4KPFBMK.js} +4 -6
- package/chunk-R5TQ3HNB.js +71 -0
- package/chunk-RFSPJECL.js +84 -0
- package/chunk-RPL6FRVX.js +88 -0
- package/{chunk-AN2RNJLR.js → chunk-STYOBAC7.js} +16 -16
- package/{chunk-X3PQANZO.js → chunk-SVUWR3HD.js} +47 -46
- package/chunk-T7P3OEBP.js +128 -0
- package/{chunk-QS4N4MNP.js → chunk-TB3ZRV3Y.js} +18 -20
- package/{chunk-MYEZXZZC.js → chunk-TOY6YPTG.js} +23 -25
- package/{chunk-XILQ7GXE.js → chunk-U6X6ODDJ.js} +11 -13
- package/{chunk-XZNHT6MO.js → chunk-UAJ6M34K.js} +115 -61
- package/chunk-W2EH6RY5.js +42 -0
- package/{chunk-FDKIX4DC.js → chunk-W2QQQWNE.js} +7 -9
- package/{chunk-LZMKSFCF.js → chunk-WALANB3V.js} +10 -12
- package/chunk-WCUR44O6.js +88 -0
- package/{chunk-BNTPPZCK.js → chunk-WJYJMX5S.js} +37 -39
- package/chunk-WZSLDYUU.js +131 -0
- package/{chunk-J3NSDRVH.js → chunk-XETMIETJ.js} +0 -2
- package/chunk-XU6JJDMZ.js +117 -0
- package/{chunk-BKZBWPUH.js → chunk-XWPH7C2W.js} +9 -11
- package/{chunk-GICKPMJU.js → chunk-YXWXSRXG.js} +31 -31
- package/{chunk-2HKBZFIK.js → chunk-YY236ZSJ.js} +31 -31
- package/{chunk-YX5VNRJX.js → chunk-YYFAZQ25.js} +0 -2
- package/{chunk-Y5AYU7PK.js → chunk-ZHFIWDGF.js} +0 -2
- package/components/accordion.js +2 -4
- package/components/action-button.d.ts +37 -0
- package/components/action-button.js +5 -0
- package/components/agent-loading.d.ts +2 -0
- package/components/agent-loading.js +2 -4
- package/components/agent-picker.js +5 -5
- package/components/agent-suggestion.js +5 -6
- package/components/alert.d.ts +37 -0
- package/components/alert.js +5 -0
- package/components/announcement-bar.js +7 -7
- package/components/attachment.js +5 -5
- package/components/avatar.js +4 -6
- package/components/badge.js +2 -4
- package/components/banner-mesh.js +1 -3
- package/components/banner.js +6 -6
- package/components/bar-chart.js +10 -11
- package/components/breadcrumb.js +5 -6
- package/components/button-group.d.ts +26 -0
- package/components/button-group.js +5 -0
- package/components/button.d.ts +13 -1
- package/components/button.js +4 -4
- package/components/card.js +5 -5
- package/components/channel-chart.js +10 -11
- package/components/chart.js +9 -10
- package/components/checkbox.js +2 -4
- package/components/chip.js +2 -4
- package/components/citations.d.ts +6 -4
- package/components/citations.js +4 -5
- package/components/code-block.js +5 -5
- package/components/combobox.d.ts +12 -3
- package/components/combobox.js +10 -10
- package/components/command-menu.d.ts +6 -2
- package/components/command-menu.js +5 -6
- package/components/context-menu.d.ts +12 -5
- package/components/context-menu.js +5 -6
- package/components/cookie-consent.js +5 -5
- package/components/date-picker.d.ts +26 -14
- package/components/date-picker.js +9 -9
- package/components/decision-card.js +7 -7
- package/components/dialog.d.ts +6 -8
- package/components/dialog.js +6 -5
- package/components/donut-chart.js +10 -11
- package/components/dot.js +2 -4
- package/components/dropdown.d.ts +6 -1
- package/components/dropdown.js +4 -5
- package/components/empty-state.js +2 -4
- package/components/field-group.d.ts +27 -0
- package/components/field-group.js +3 -0
- package/components/file-upload.js +7 -7
- package/components/floating.js +1 -3
- package/components/form-field.d.ts +38 -1
- package/components/form-field.js +2 -4
- package/components/form.d.ts +47 -0
- package/components/form.js +3 -0
- package/components/hover-card.d.ts +5 -2
- package/components/hover-card.js +2 -4
- package/components/input-group.d.ts +21 -0
- package/components/input-group.js +6 -0
- package/components/input-otp.d.ts +4 -2
- package/components/input-otp.js +7 -8
- package/components/input.d.ts +5 -1
- package/components/input.js +3 -5
- package/components/kbd.js +2 -4
- package/components/labels.d.ts +86 -0
- package/components/labels.js +1 -0
- package/components/line-chart.js +11 -12
- package/components/link.d.ts +20 -0
- package/components/link.js +3 -0
- package/components/list.d.ts +46 -0
- package/components/list.js +2 -0
- package/components/message-actions.js +5 -5
- package/components/message.js +8 -8
- package/components/number-input.d.ts +4 -2
- package/components/number-input.js +7 -8
- package/components/pagination.js +6 -6
- package/components/password-input.d.ts +16 -0
- package/components/password-input.js +7 -0
- package/components/popover.d.ts +11 -5
- package/components/popover.js +3 -4
- package/components/progress.js +2 -4
- package/components/prompt-bar.js +6 -6
- package/components/radio.js +2 -4
- package/components/search-bar.js +3 -5
- package/components/segmented-control.d.ts +4 -2
- package/components/segmented-control.js +3 -5
- package/components/select.d.ts +11 -2
- package/components/select.js +6 -7
- package/components/selectable-card.d.ts +37 -0
- package/components/selectable-card.js +2 -0
- package/components/selectable-checkbox.d.ts +14 -0
- package/components/selectable-checkbox.js +4 -0
- package/components/selectable-radio.d.ts +16 -0
- package/components/selectable-radio.js +3 -0
- package/components/separator.d.ts +18 -0
- package/components/separator.js +2 -0
- package/components/sheet.d.ts +4 -2
- package/components/sheet.js +7 -6
- package/components/sidebar.js +2 -4
- package/components/skeleton.js +2 -4
- package/components/slider.d.ts +6 -2
- package/components/slider.js +7 -8
- package/components/sliding-indicator.js +1 -3
- package/components/spinner.d.ts +18 -0
- package/components/spinner.js +3 -0
- package/components/split-button.d.ts +24 -0
- package/components/split-button.js +8 -0
- package/components/streaming-text.js +2 -4
- package/components/switch.js +2 -4
- package/components/table.d.ts +16 -5
- package/components/table.js +4 -5
- package/components/tabs.d.ts +4 -2
- package/components/tabs.js +3 -5
- package/components/textarea.js +3 -5
- package/components/thinking.js +3 -5
- package/components/toast.js +5 -5
- package/components/toggle.js +2 -4
- package/components/tooltip.d.ts +5 -2
- package/components/tooltip.js +3 -5
- package/index.d.ts +17 -2
- package/index.js +82 -231
- package/lib/utils.d.ts +8 -1
- package/lib/utils.js +1 -3
- package/package.json +11 -1
- package/styles.css +1 -1
- package/theme/create-theme.d.ts +6 -2
- package/theme/index.js +1 -0
- package/chunk-2HKBZFIK.js.map +0 -1
- package/chunk-3DINAQLL.js.map +0 -1
- package/chunk-3ERGAHKA.js +0 -179
- package/chunk-3ERGAHKA.js.map +0 -1
- package/chunk-6C7CGJX2.js +0 -86
- package/chunk-6C7CGJX2.js.map +0 -1
- package/chunk-6QMSWITQ.js.map +0 -1
- package/chunk-6YXUBP27.js.map +0 -1
- package/chunk-72OCFAPT.js.map +0 -1
- package/chunk-7TXHCRAG.js.map +0 -1
- package/chunk-A5XEM3GF.js.map +0 -1
- package/chunk-AN2RNJLR.js.map +0 -1
- package/chunk-B2K45IUR.js.map +0 -1
- package/chunk-B6V4VSGH.js.map +0 -1
- package/chunk-BKZBWPUH.js.map +0 -1
- package/chunk-BNTPPZCK.js.map +0 -1
- package/chunk-BNZVTLHV.js.map +0 -1
- package/chunk-CL2II6BX.js.map +0 -1
- package/chunk-D7RZNTFC.js +0 -95
- package/chunk-D7RZNTFC.js.map +0 -1
- package/chunk-DETGJAIC.js +0 -147
- package/chunk-DETGJAIC.js.map +0 -1
- package/chunk-DO3TBNSC.js.map +0 -1
- package/chunk-ESC5JCVQ.js +0 -90
- package/chunk-ESC5JCVQ.js.map +0 -1
- package/chunk-FDKIX4DC.js.map +0 -1
- package/chunk-GICKPMJU.js.map +0 -1
- package/chunk-GQA24FYG.js +0 -57
- package/chunk-GQA24FYG.js.map +0 -1
- package/chunk-H4NU7NPO.js.map +0 -1
- package/chunk-H63FYCMY.js +0 -11
- package/chunk-H63FYCMY.js.map +0 -1
- package/chunk-HL42K2NH.js.map +0 -1
- package/chunk-HNQUX43Z.js +0 -109
- package/chunk-HNQUX43Z.js.map +0 -1
- package/chunk-HRKPV66B.js +0 -32
- package/chunk-HRKPV66B.js.map +0 -1
- package/chunk-J3NSDRVH.js.map +0 -1
- package/chunk-JPNWHWAQ.js +0 -151
- package/chunk-JPNWHWAQ.js.map +0 -1
- package/chunk-KNUWZNFV.js.map +0 -1
- package/chunk-L6NCCSIP.js.map +0 -1
- package/chunk-LLHTVIM3.js.map +0 -1
- package/chunk-LW3TRU5W.js.map +0 -1
- package/chunk-LZMKSFCF.js.map +0 -1
- package/chunk-MR3JDI7E.js +0 -122
- package/chunk-MR3JDI7E.js.map +0 -1
- package/chunk-MYEZXZZC.js.map +0 -1
- package/chunk-NN6PKJWS.js.map +0 -1
- package/chunk-NSRTTYQ4.js.map +0 -1
- package/chunk-O7F3CIDV.js.map +0 -1
- package/chunk-P4O6TGDR.js.map +0 -1
- package/chunk-PF3YBUKT.js.map +0 -1
- package/chunk-PVOLDO4G.js +0 -47
- package/chunk-PVOLDO4G.js.map +0 -1
- package/chunk-QS4N4MNP.js.map +0 -1
- package/chunk-QUF2IPOZ.js.map +0 -1
- package/chunk-RTJ76X5U.js.map +0 -1
- package/chunk-SH6NG6VN.js.map +0 -1
- package/chunk-SHDFUXYV.js.map +0 -1
- package/chunk-TKO44NDI.js +0 -84
- package/chunk-TKO44NDI.js.map +0 -1
- package/chunk-TX3H3QMA.js.map +0 -1
- package/chunk-UBNHSZSE.js +0 -88
- package/chunk-UBNHSZSE.js.map +0 -1
- package/chunk-UC3ZJWOD.js +0 -73
- package/chunk-UC3ZJWOD.js.map +0 -1
- package/chunk-UGRSWP6U.js.map +0 -1
- package/chunk-VAGIAREV.js.map +0 -1
- package/chunk-WTMZT3IT.js +0 -105
- package/chunk-WTMZT3IT.js.map +0 -1
- package/chunk-WX6BP5ZP.js +0 -39
- package/chunk-WX6BP5ZP.js.map +0 -1
- package/chunk-X3PQANZO.js.map +0 -1
- package/chunk-XILQ7GXE.js.map +0 -1
- package/chunk-XL75JRUA.js.map +0 -1
- package/chunk-XZNHT6MO.js.map +0 -1
- package/chunk-Y5AYU7PK.js.map +0 -1
- package/chunk-YG7JOOLJ.js.map +0 -1
- package/chunk-YPJYW624.js +0 -195
- package/chunk-YPJYW624.js.map +0 -1
- package/chunk-YPNKBE5X.js.map +0 -1
- package/chunk-YX5VNRJX.js.map +0 -1
- package/components/accordion.js.map +0 -1
- package/components/agent-loading.js.map +0 -1
- package/components/agent-picker.js.map +0 -1
- package/components/agent-suggestion.js.map +0 -1
- package/components/announcement-bar.js.map +0 -1
- package/components/attachment.js.map +0 -1
- package/components/avatar.js.map +0 -1
- package/components/badge.js.map +0 -1
- package/components/banner-mesh.js.map +0 -1
- package/components/banner.js.map +0 -1
- package/components/bar-chart.js.map +0 -1
- package/components/breadcrumb.js.map +0 -1
- package/components/button.js.map +0 -1
- package/components/card.js.map +0 -1
- package/components/channel-chart.js.map +0 -1
- package/components/chart.js.map +0 -1
- package/components/checkbox.js.map +0 -1
- package/components/chip.js.map +0 -1
- package/components/citations.js.map +0 -1
- package/components/code-block.js.map +0 -1
- package/components/combobox.js.map +0 -1
- package/components/command-menu.js.map +0 -1
- package/components/context-menu.js.map +0 -1
- package/components/cookie-consent.js.map +0 -1
- package/components/date-picker.js.map +0 -1
- package/components/decision-card.js.map +0 -1
- package/components/dialog.js.map +0 -1
- package/components/donut-chart.js.map +0 -1
- package/components/dot.js.map +0 -1
- package/components/dropdown.js.map +0 -1
- package/components/empty-state.js.map +0 -1
- package/components/file-upload.js.map +0 -1
- package/components/floating.js.map +0 -1
- package/components/form-field.js.map +0 -1
- package/components/hover-card.js.map +0 -1
- package/components/input-otp.js.map +0 -1
- package/components/input.js.map +0 -1
- package/components/kbd.js.map +0 -1
- package/components/line-chart.js.map +0 -1
- package/components/message-actions.js.map +0 -1
- package/components/message.js.map +0 -1
- package/components/number-input.js.map +0 -1
- package/components/pagination.js.map +0 -1
- package/components/popover.js.map +0 -1
- package/components/progress.js.map +0 -1
- package/components/prompt-bar.js.map +0 -1
- package/components/radio.js.map +0 -1
- package/components/search-bar.js.map +0 -1
- package/components/segmented-control.js.map +0 -1
- package/components/select.js.map +0 -1
- package/components/sheet.js.map +0 -1
- package/components/sidebar.js.map +0 -1
- package/components/skeleton.js.map +0 -1
- package/components/slider.js.map +0 -1
- package/components/sliding-indicator.js.map +0 -1
- package/components/streaming-text.js.map +0 -1
- package/components/switch.js.map +0 -1
- package/components/table.js.map +0 -1
- package/components/tabs.js.map +0 -1
- package/components/textarea.js.map +0 -1
- package/components/thinking.js.map +0 -1
- package/components/toast.js.map +0 -1
- package/components/toggle.js.map +0 -1
- package/components/tooltip.js.map +0 -1
- package/index.js.map +0 -1
- package/lib/utils.js.map +0 -1
package/chunk-XZNHT6MO.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/date-picker.tsx"],"names":["_","CalendarIcon","PopoverPrimitive"],"mappings":";;;;;;;;AA6BA,IAAM,MAAA,GAAS,CAAC,SAAA,EAAW,UAAA,EAAY,OAAA,EAAS,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,QAAA,EAAU,WAAA,EAAa,SAAA,EAAW,YAAY,UAAU,CAAA;AACxI,IAAM,GAAA,GAAM,CAAC,GAAA,EAAK,GAAA,EAAK,KAAK,GAAA,EAAK,GAAA,EAAK,KAAK,GAAG,CAAA;AAC9C,IAAM,QAAA,GAAW,CAAC,QAAA,EAAU,SAAA,EAAW,aAAa,UAAA,EAAY,QAAA,EAAU,YAAY,QAAQ,CAAA;AAE9F,IAAM,UAAA,GAAa,CAAC,CAAA,KAAY,IAAI,IAAA,CAAK,CAAA,CAAE,WAAA,EAAY,EAAG,CAAA,CAAE,QAAA,EAAS,EAAG,CAAA,CAAE,SAAS,CAAA;AACnF,IAAM,OAAA,GAAU,CAAC,CAAA,EAAiB,CAAA,KAAoB,CAAC,CAAC,CAAA,IAAK,CAAC,CAAC,CAAA,IAAK,CAAA,CAAE,WAAA,EAAY,KAAM,EAAE,WAAA,EAAY,IAAK,CAAA,CAAE,QAAA,EAAS,KAAM,CAAA,CAAE,QAAA,EAAS,IAAK,CAAA,CAAE,OAAA,EAAQ,KAAM,CAAA,CAAE,OAAA,EAAQ;AACtK,IAAM,OAAA,GAAU,CAAC,CAAA,EAAS,CAAA,KAAc,IAAI,IAAA,CAAK,CAAA,CAAE,WAAA,EAAY,EAAG,EAAE,QAAA,EAAS,EAAG,CAAA,CAAE,OAAA,KAAY,CAAC,CAAA;AAC/F,IAAM,SAAA,GAAY,CAAC,CAAA,EAAS,CAAA,KAAc,IAAI,IAAA,CAAK,CAAA,CAAE,WAAA,EAAY,EAAG,CAAA,CAAE,QAAA,EAAS,GAAI,GAAG,CAAC,CAAA;AACvF,IAAM,QAAA,GAAW,IAAI,IAAA,CAAK,cAAA,CAAe,SAAS,EAAE,OAAA,EAAS,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,GAAA,EAAK,SAAA,EAAW,IAAA,EAAM,WAAW,CAAA;AAC9G,IAAM,aAAa,CAAC,CAAA,KAAY,IAAI,IAAA,CAAK,eAAe,OAAA,EAAS,EAAE,KAAA,EAAO,OAAA,EAAS,KAAK,SAAA,EAAW,IAAA,EAAM,WAAW,CAAA,CAAE,OAAO,CAAC;AAC9H,IAAM,WAAA,GAAc,CAAC,EAAE,IAAA,EAAM,IAAG,KAAiB;AACtD,EAAA,IAAI,CAAC,MAAM,OAAO,EAAA;AAClB,EAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAA,EAAG,OAAO,WAAW,IAAI,CAAA;AACpD,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,WAAA,EAAY,KAAM,GAAG,WAAA,EAAY;AACvD,EAAA,MAAM,CAAA,GAAI,IAAI,IAAA,CAAK,cAAA,CAAe,SAAS,EAAE,KAAA,EAAO,SAAS,GAAA,EAAK,SAAA,EAAW,GAAI,QAAA,GAAW,KAAK,EAAE,IAAA,EAAM,WAAU,EAAI,CAAA,CAAE,MAAA,CAAO,IAAI,CAAA;AACpI,EAAA,OAAO,CAAA,EAAG,CAAC,CAAA,QAAA,EAAM,UAAA,CAAW,EAAE,CAAC,CAAA,CAAA;AACjC;AAMA,SAAS,QAAQ,KAAA,EAAa;AAC5B,EAAA,MAAM,KAAA,GAAQ,IAAI,IAAA,CAAK,KAAA,CAAM,aAAY,EAAG,KAAA,CAAM,QAAA,EAAS,EAAG,CAAC,CAAA;AAC/D,EAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,EAAO,EAAA,CAAG,MAAM,MAAA,EAAO,GAAI,KAAK,CAAA,CAAE,CAAA;AACxD,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,CAAA,IAAK,CAAC,CAAA,EAAG,CAAA,KAAM,KAAA,CAAM,IAAA,CAAK,EAAE,QAAQ,CAAA,EAAE,EAAG,CAACA,EAAAA,EAAG,CAAA,KAAM,OAAA,CAAQ,OAAO,CAAA,GAAI,CAAA,GAAI,CAAC,CAAC,CAAC,CAAA;AAC3G;AAuBO,SAAS,QAAA,CAAS;AAAA,EACvB,IAAA,GAAO,QAAA;AAAA,EACP,KAAA;AAAA,EACA,aAAA;AAAA,EACA,KAAA;AAAA,EACA,aAAA;AAAA,EACA,KAAA,EAAO,SAAA;AAAA,EACP,aAAA;AAAA,EACA,MAAA,GAAS,CAAA;AAAA,EACT,MAAA,GAAS,OAAA;AAAA,EACT,GAAA;AAAA,EACA,GAAA;AAAA,EACA,KAAA,EAAO,SAAA;AAAA,EACP;AACF,CAAA,EAAkB;AAChB,EAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,SAAA,oBAAa,IAAI,MAAM,CAAA;AAChD,EAAA,MAAM,MAAA,GAAS,IAAA,KAAS,OAAA,GAAU,KAAA,EAAO,IAAA,GAAO,KAAA;AAChD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAU,KAAA,CAAA,QAAA,CAAS,MAAM,SAAA,CAAU,MAAA,IAAU,KAAA,EAAO,CAAC,CAAC,CAAA;AACtF,EAAA,MAAM,KAAA,GAAQ,SAAA,GAAY,SAAA,CAAU,SAAA,EAAW,CAAC,CAAA,GAAI,UAAA;AACpD,EAAA,MAAM,QAAA,GAAW,CAAC,CAAA,KAAY;AAC5B,IAAA,IAAI,CAAC,SAAA,EAAW,aAAA,CAAc,CAAC,CAAA;AAC/B,IAAA,aAAA,GAAgB,CAAC,CAAA;AAAA,EACnB,CAAA;AACA,EAAA,MAAM,CAAC,OAAO,QAAQ,CAAA,GAAU,eAAe,MAAM,UAAA,CAAW,MAAA,IAAU,KAAK,CAAC,CAAA;AAChF,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAU,eAAsB,IAAI,CAAA;AAC1D,EAAA,MAAM,OAAA,GAAgB,aAAuB,IAAI,CAAA;AAEjD,EAAA,MAAM,QAAA,GAAW,CAAC,CAAA,KAAa,GAAA,IAAO,CAAA,GAAI,UAAA,CAAW,GAAG,CAAA,IAAO,GAAA,IAAO,CAAA,GAAI,UAAA,CAAW,GAAG,CAAA,IAAM,KAAA;AAC9F,EAAA,MAAM,OAAA,GAAU,SAAS,OAAA,IAAW,CAAC,CAAC,KAAA,EAAO,IAAA,IAAQ,CAAC,KAAA,EAAO,EAAA;AAE7D,EAAA,MAAM,IAAA,GAAO,CAAC,CAAA,KAAY;AACxB,IAAA,IAAI,QAAA,CAAS,CAAC,CAAA,EAAG;AACjB,IAAA,IAAI,IAAA,KAAS,QAAA,EAAU,OAAO,aAAA,GAAgB,CAAC,CAAA;AAC/C,IAAA,IAAI,CAAC,KAAA,EAAO,IAAA,IAAQ,KAAA,CAAM,EAAA,EAAI,OAAO,aAAA,GAAgB,EAAE,IAAA,EAAM,CAAA,EAAG,EAAA,EAAI,IAAA,EAAM,CAAA;AAC1E,IAAA,aAAA,GAAgB,IAAI,KAAA,CAAM,IAAA,GAAO,EAAE,IAAA,EAAM,GAAG,EAAA,EAAI,KAAA,CAAM,IAAA,EAAK,GAAI,EAAE,IAAA,EAAM,KAAA,CAAM,IAAA,EAAM,EAAA,EAAI,GAAG,CAAA;AAAA,EAC5F,CAAA;AAEA,EAAA,MAAM,SAAA,GAAY,CAAC,CAAA,KAAY;AAC7B,IAAA,QAAA,CAAS,CAAC,CAAA;AACV,IAAA,MAAM,IAAA,GAAO,SAAA,CAAU,KAAA,EAAO,MAAA,GAAS,CAAC,CAAA;AACxC,IAAA,IAAI,IAAI,KAAA,EAAO,QAAA,CAAS,SAAA,CAAU,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,SAAA,IAC9B,CAAA,IAAK,SAAA,CAAU,IAAA,EAAM,CAAC,CAAA,EAAG,QAAA,CAAS,SAAA,CAAU,CAAA,EAAG,EAAE,MAAA,GAAS,CAAA,CAAE,CAAC,CAAA;AACtE,IAAA,qBAAA,CAAsB,MAAM,OAAA,CAAQ,OAAA,EAAS,cAA2B,cAAc,CAAA,EAAG,OAAO,CAAA;AAAA,EAClG,CAAA;AAEA,EAAA,MAAM,SAAA,GAAY,CAAC,CAAA,KAA2B;AAC5C,IAAA,MAAM,GAAA,GAAkC;AAAA,MACtC,SAAA,EAAW,MAAM,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAAA,MAClC,UAAA,EAAY,MAAM,OAAA,CAAQ,KAAA,EAAO,CAAC,CAAA;AAAA,MAClC,OAAA,EAAS,MAAM,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAAA,MAChC,SAAA,EAAW,MAAM,OAAA,CAAQ,KAAA,EAAO,CAAC,CAAA;AAAA,MACjC,MAAA,EAAQ,MAAM,IAAI,IAAA,CAAK,KAAA,CAAM,WAAA,EAAY,EAAG,KAAA,CAAM,QAAA,EAAS,GAAI,CAAA,EAAG,KAAA,CAAM,SAAS,CAAA;AAAA,MACjF,QAAA,EAAU,MAAM,IAAI,IAAA,CAAK,KAAA,CAAM,WAAA,EAAY,EAAG,KAAA,CAAM,QAAA,EAAS,GAAI,CAAA,EAAG,KAAA,CAAM,SAAS,CAAA;AAAA,MACnF,IAAA,EAAM,MAAM,OAAA,CAAQ,KAAA,EAAO,GAAG,KAAA,CAAM,MAAA,EAAO,GAAI,CAAA,IAAK,CAAA,CAAE,CAAA;AAAA,MACtD,GAAA,EAAK,MAAM,OAAA,CAAQ,KAAA,EAAO,KAAM,KAAA,CAAM,MAAA,EAAO,GAAI,CAAA,IAAK,CAAE;AAAA,KAC1D;AACA,IAAA,IAAI,GAAA,CAAI,CAAA,CAAE,GAAG,CAAA,EAAG;AACd,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,MAAM,IAAA,GAAO,GAAA,CAAI,CAAA,CAAE,GAAG,CAAA,EAAE;AACxB,MAAA,SAAA,CAAU,IAAI,CAAA;AACd,MAAA,IAAI,OAAA,WAAkB,IAAI,CAAA;AAAA,IAC5B,WAAW,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AAC7C,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,IAAA,CAAK,KAAK,CAAA;AAAA,IACZ;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,MAAA,GAAS,CAAC,GAAA,EAAa,KAAA,EAAe,OAAA,qBAC1C,GAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,UAAA,EAAW,IAAA,EAAK,IAAA,EAAK,QAAA,EAAQ,IAAA,EAAC,YAAA,EAAY,KAAA,EAAO,OAAA,EAC9D,QAAA,EAAA,GAAA,GAAM,CAAA,mBAAI,GAAA,CAAC,YAAA,EAAA,EAAa,aAAA,EAAW,IAAA,EAAC,CAAA,mBAAK,GAAA,CAAC,aAAA,EAAA,EAAc,aAAA,EAAW,IAAA,EAAC,CAAA,EACvE,CAAA;AAGF,EAAA,MAAM,WAAA,GAAc,CAAC,CAAA,EAAS,CAAA,KAAc;AAC1C,IAAA,MAAM,GAAA,GAAM,KAAA,EAAO,EAAA,KAAO,OAAA,GAAU,KAAA,GAAQ,IAAA,CAAA;AAC5C,IAAA,MAAM,EAAA,GAAK,OAAO,IAAA,IAAQ,GAAA,GAAO,MAAM,KAAA,CAAM,IAAA,GAAO,GAAA,GAAM,KAAA,CAAM,IAAA,GAAQ,IAAA;AACxE,IAAA,MAAM,EAAA,GAAK,OAAO,IAAA,IAAQ,GAAA,GAAO,MAAM,KAAA,CAAM,IAAA,GAAO,KAAA,CAAM,IAAA,GAAO,GAAA,GAAO,IAAA;AACxE,IAAA,MAAM,OAAA,GAAU,OAAO,CAAA,CAAE,WAAA,EAAa,CAAA,CAAA,EAAI,CAAA,CAAE,UAAU,CAAA,CAAA;AACtD,IAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAY,SAAA,EAAU,wCAAA,EAEpB,QAAA,EAAA;AAAA,MAAA,MAAA,KAAW,YAAY,MAAA,KAAW,CAAA,mBACjC,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,6BAAA,EACb,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACZ,QAAA,EAAA;AAAA,UAAA,MAAA,CAAO,EAAA,EAAI,kBAAkB,MAAM,QAAA,CAAS,UAAU,KAAA,EAAO,EAAE,CAAC,CAAC,CAAA;AAAA,0BAClE,GAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAI,OAAA,EAAS,SAAA,EAAU,4EAC1B,QAAA,EAAA,MAAA,CAAO,CAAA,CAAE,QAAA,EAAU,CAAA,EACtB,CAAA;AAAA,UACC,MAAA,CAAO,GAAG,YAAA,EAAc,MAAM,SAAS,SAAA,CAAU,KAAA,EAAO,CAAC,CAAC,CAAC;AAAA,SAAA,EAC9D,CAAA;AAAA,wBACA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,CAAA;AAAA,wBAEzB,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,IAAA;AAAA,YACL,YAAA,EAAW,MAAA;AAAA,YACX,KAAA,EAAO,MAAA,CAAO,CAAA,CAAE,WAAA,EAAa,CAAA;AAAA,YAC7B,aAAA,EAAe,CAAC,CAAA,KAAM,QAAA,CAAS,IAAI,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,CAAE,QAAA,EAAS,EAAG,CAAC,CAAC,CAAA;AAAA,YACnE,OAAA,EAAS,YAAY,CAAA,CAAE,WAAA,IAAe,KAAA,CAAM,WAAA,EAAY,EAAG,GAAA,EAAK,GAAG,CAAA;AAAA,YACnE,gBAAA,EAAiB,iBAAA;AAAA,YACjB,SAAA,EAAU;AAAA;AAAA;AACZ,OAAA,EACF,CAAA,mBAEA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EAGZ,QAAA,EAAA;AAAA,QAAA,MAAA,KAAW,MAAM,CAAA,KAAM,CAAA,GAAI,OAAO,EAAA,EAAI,gBAAA,EAAkB,MAAM,QAAA,CAAS,SAAA,CAAU,OAAO,EAAE,CAAC,CAAC,CAAA,mBAAI,GAAA,CAAC,UAAK,aAAA,EAAW,IAAA,EAAC,WAAU,iBAAA,EAAkB,CAAA,CAAA;AAAA,wBAC/I,IAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAI,OAAA,EAAS,SAAA,EAAW,GAAG,wDAAA,EAA0D,MAAA,KAAW,CAAA,IAAK,aAAa,CAAA,EACrH,QAAA,EAAA;AAAA,UAAA,MAAA,CAAO,CAAA,CAAE,UAAU,CAAA;AAAA,UAAE,GAAA;AAAA,UAAE,EAAE,WAAA;AAAY,SAAA,EACxC,CAAA;AAAA,QACC,MAAA,KAAW,CAAA,IAAK,MAAA,CAAO,EAAA,EAAI,gBAAA,EAAkB,MAAM,QAAA,CAAS,SAAA,CAAU,KAAA,EAAO,EAAE,CAAC,CAAC,CAAA;AAAA,QACjF,MAAA,KAAW,KAAK,CAAA,KAAM,CAAA,wBAAM,MAAA,EAAA,EAAK,aAAA,EAAW,IAAA,EAAC,SAAA,EAAU,iBAAA,EAAkB,CAAA;AAAA,QAAA,CACxE,MAAA,KAAW,CAAA,IAAK,CAAA,KAAM,CAAA,KAAM,MAAA,CAAO,CAAA,EAAG,YAAA,EAAc,MAAM,QAAA,CAAS,SAAA,CAAU,KAAA,EAAO,CAAC,CAAC,CAAC;AAAA,OAAA,EAC3F,CAAA;AAAA,sBAIA,IAAA,CAAC,SAAI,IAAA,EAAK,MAAA,EAAO,mBAAiB,OAAA,EAAS,SAAA,EAAU,uBAAsB,SAAA,EACzE,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,MAAK,KAAA,EAAM,SAAA,EAAU,QACvB,QAAA,EAAA,GAAA,CAAI,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,qBACX,GAAA,CAAC,UAAa,IAAA,EAAK,cAAA,EAAe,YAAA,EAAY,QAAA,CAAS,CAAC,CAAA,EAAG,WAAU,0DAAA,EAClE,QAAA,EAAA,CAAA,EAAA,EADQ,CAEX,CACD,CAAA,EACH,CAAA;AAAA,QACC,QAAQ,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,MAAM,CAAA,qBACrB,GAAA,CAAC,KAAA,EAAA,EAAY,IAAA,EAAK,OAAM,SAAA,EAAU,MAAA,EAC/B,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM;AACf,UAAA,MAAM,GAAA,GAAM,CAAA,CAAE,QAAA,EAAS,KAAM,EAAE,QAAA,EAAS;AACxC,UAAA,MAAM,QAAA,GAAW,IAAA,KAAS,QAAA,IAAY,OAAA,CAAQ,GAAG,KAAK,CAAA;AACtD,UAAA,MAAM,KAAA,GAAQ,IAAA,KAAS,OAAA,IAAW,CAAC,GAAA,KAAQ,OAAA,CAAQ,CAAA,EAAG,KAAA,EAAO,IAAI,CAAA,IAAK,OAAA,CAAQ,CAAA,EAAG,OAAO,EAAE,CAAA,CAAA;AAC1F,UAAA,MAAM,MAAA,GAAS,IAAA,KAAS,OAAA,IAAW,CAAC,OAAO,EAAA,IAAM,EAAA,IAAM,CAAC,OAAA,CAAQ,EAAA,EAAI,EAAE,CAAA,IAAK,CAAA,IAAK,MAAM,CAAA,IAAK,EAAA;AAC3F,UAAA,MAAM,WAAW,MAAA,IAAU,OAAA,CAAQ,CAAA,EAAG,EAAE,IAAI,UAAA,GAAa,QAAA;AACzD,UAAA,MAAM,SAAS,MAAA,IAAU,OAAA,CAAQ,CAAA,EAAG,EAAE,IAAI,WAAA,GAAc,SAAA;AACxD,UAAA,MAAM,UAAA,GAAa,WAAW,CAAC,GAAA,IAAO,QAAQ,CAAA,EAAG,KAAK,KAAK,CAAC,KAAA;AAC5D,UAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,CAAA,EAAG,KAAK,CAAA;AAChC,UAAA,MAAM,GAAA,GAAM,SAAS,CAAC,CAAA;AACtB,UAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,CAAA,EAAG,KAAK,KAAK,CAAC,GAAA;AACtC,UAAA,uBACE,IAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cAEC,IAAA,EAAK,UAAA;AAAA,cACL,eAAA,EAAe,YAAY,KAAA,IAAS,MAAA;AAAA,cAGpC,cAAA,EAAgB,MAAM,OAAA,IAAW,CAAC,OAAO,CAAC,GAAA,IAAO,SAAS,CAAC,CAAA;AAAA,cAC3D,SAAA,EAAU,0CAAA;AAAA,cAET,QAAA,EAAA;AAAA,gBAAA,MAAA,oBAAU,GAAA,CAAC,UAAK,aAAA,EAAW,IAAA,EAAC,WAAW,EAAA,CAAG,yCAAA,EAA2C,QAAA,EAAU,MAAM,CAAA,EAAG,CAAA;AAAA,gCACzG,IAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAK,QAAA;AAAA,oBACL,QAAA,EAAU,UAAU,CAAA,GAAI,EAAA;AAAA,oBACxB,cAAY,OAAA,IAAW,MAAA;AAAA,oBACvB,QAAA,EAAU,GAAA;AAAA,oBACV,YAAA,EAAY,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA;AAAA,oBAC7B,cAAA,EAAc,UAAU,MAAA,GAAS,MAAA;AAAA,oBACjC,SAAS,MAAM;AACb,sBAAA,QAAA,CAAS,CAAC,CAAA;AACV,sBAAA,IAAA,CAAK,CAAC,CAAA;AAAA,oBACR,CAAA;AAAA,oBACA,OAAA,EAAS,MAAM,QAAA,CAAS,CAAC,CAAA;AAAA,oBACzB,SAAA,EAAW,EAAA;AAAA,sBACT,oFAAA;AAAA;AAAA;AAAA,sBAGA,CAAC,OAAA,IAAW,kFAAA;AAAA,sBACZ,gHAAA;AAAA,sBACA,QAAQ,YAAA,GAAe,cAAA;AAAA,sBACvB,QAAA,IAAY,KAAA,GACR,yCAAA,GACA,EAAA,CAAG,GAAA,GAAM,kBAAA,GAAqB,mBAAA,EAAqB,UAAA,GAAa,aAAA,GAAgB,CAAC,MAAA,IAAU,mBAAmB;AAAA,qBACpH;AAAA,oBAEC,QAAA,EAAA;AAAA,sBAAA,CAAA,CAAE,OAAA,EAAQ;AAAA,sBACV,OAAA,IAAW,CAAC,QAAA,IAAY,CAAC,KAAA,wBACvB,MAAA,EAAA,EAAK,aAAA,EAAW,IAAA,EAAC,SAAA,EAAU,yFAAA,EAA0F;AAAA;AAAA;AAAA;AAE1H;AAAA,aAAA;AAAA,YArCK,EAAE,WAAA;AAAY,WAsCrB;AAAA,QAEJ,CAAC,CAAA,EAAA,EAtDO,CAuDV,CACD;AAAA,OAAA,EACH;AAAA,KAAA,EAAA,EAxGM,CA0GV,CAAA;AAAA,EAEJ,CAAA;AAEA,EAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,OAAA,EAAS,aAAU,UAAA,EAAW,SAAA,EAAW,EAAA,CAAG,YAAA,EAAc,SAAS,CAAA,EAAG,cAAA,EAAgB,MAAM,SAAS,IAAI,CAAA,EAChH,QAAA,EAAA,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,MAAA,EAAO,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM,WAAA,CAAY,SAAA,CAAU,KAAA,EAAO,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA,EAC/E,CAAA;AAEJ;AAGA,SAAS,WAAA,CAAY,KAAA,EAAe,QAAA,EAAkB,GAAA,EAAY,GAAA,EAAY;AAC5E,EAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,WAAA,KAAgB,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,QAAA,GAAW,GAAG,CAAA;AACrE,EAAA,MAAM,EAAA,GAAK,MAAM,GAAA,CAAI,WAAA,KAAgB,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,QAAA,GAAW,EAAE,CAAA;AAClE,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,EAAA,GAAK,OAAO,CAAA,EAAE,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM;AACrD,IAAA,MAAM,CAAA,GAAI,MAAA,CAAO,EAAA,GAAK,CAAC,CAAA;AACvB,IAAA,OAAO,EAAE,KAAA,EAAO,CAAA,EAAG,KAAA,EAAO,CAAA,EAAE;AAAA,EAC9B,CAAC,CAAA;AACH;AAKA,IAAM,YAAA,GAAe,EAAA;AAAA,EACnB,uDAAA;AAAA,EACA;AACF,CAAA;AACA,IAAM,QAAA,GAAW,EAAA;AAAA,EACf,mBAAA;AAAA,EACA;AACF,CAAA;AAeA,SAAS,OAAA,CAAQ,EAAE,IAAA,EAAM,WAAA,EAAa,MAAA,EAAQ,MAAM,IAAA,EAAM,SAAA,EAAW,GAAG,KAAA,EAAM,EAAmL;AAC/P,EAAA,uBACE,IAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,IAAI,MAAA,CAAO,SAAA;AAAA,MACX,WAAA,EAAU,qBAAA;AAAA,MACV,WAAA,EAAW,IAAA;AAAA,MACX,aAAA,EAAa,OAAO,IAAA,GAAO,MAAA;AAAA,MAC3B,cAAA,EAAc,OAAO,OAAA,IAAW,MAAA;AAAA,MAChC,eAAA,EAAe,OAAO,QAAA,IAAY,MAAA;AAAA,MAClC,YAAA,EAAY,OAAO,MAAA,GAAS,QAAA;AAAA,MAC5B,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,cAAA,EAAc,OAAO,OAAA,IAAW,MAAA;AAAA,MAChC,oBAAkB,MAAA,CAAO,WAAA;AAAA,MACzB,SAAA,EAAW,EAAA,CAAG,sCAAA,EAAwC,SAAS,CAAA;AAAA,MAC9D,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,UAAK,SAAA,EAAU,kBAAA,EAAmB,eAAW,IAAA,EAC5C,QAAA,kBAAA,GAAA,CAACC,cAAa,CAAA,EAChB,CAAA;AAAA,wBACA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,EAAA,CAAG,yBAAA,EAA2B,OAAO,mBAAA,GAAsB,uBAAuB,CAAA,EAAI,QAAA,EAAA,IAAA,IAAQ,WAAA,EAAY,CAAA;AAAA,wBAC3H,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kBAAA,EAAmB,eAAW,IAAA,EAC5C,QAAA,kBAAA,GAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAW,EAAA,CAAG,mEAAA,EAAqE,IAAA,IAAQ,YAAY,GAAG,CAAA,EAC1H;AAAA;AAAA;AAAA,GACF;AAEJ;AAYO,SAAS,eAAA,CAAgB,EAAE,KAAA,EAAO,aAAA,EAAe,KAAK,GAAA,EAAK,KAAA,EAAO,WAAU,EAAyB;AAC1G,EAAA,2BACG,KAAA,EAAA,EAAI,WAAA,EAAU,qBAAoB,SAAA,EAAW,EAAA,CAAG,cAAc,WAAA,EAAa,SAAS,GACnF,QAAA,kBAAA,GAAA,CAAC,QAAA,EAAA,EAAS,QAAO,QAAA,EAAS,KAAA,EAAc,eAA8B,GAAA,EAAU,GAAA,EAAU,OAAc,CAAA,EAC1G,CAAA;AAEJ;AAcO,SAAS,UAAA,CAAW;AAAA,EACzB,KAAA,EAAO,SAAA;AAAA,EACP,YAAA,GAAe,IAAA;AAAA,EACf,aAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA,GAAc,aAAA;AAAA,EACd,QAAA;AAAA,EACA,EAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,SAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF,CAAA,EAAoB;AAClB,EAAA,MAAM,SAAS,cAAA,CAAe,EAAE,IAAI,QAAA,EAAU,KAAA,EAAO,MAAM,CAAA;AAC3D,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAU,eAAsB,YAAY,CAAA;AAClE,EAAA,MAAM,KAAA,GAAQ,SAAA,KAAc,MAAA,GAAY,SAAA,GAAY,KAAA;AACpD,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAU,eAAS,KAAK,CAAA;AAC5C,EAAA,uBACE,GAAA,CAAC,WAAA,EAAA,EAAY,KAAA,EAAc,MAAA,EAAgB,SAAA,EAAW,gBAAA,EACpD,QAAA,kBAAA,IAAA,CAACC,OAAA,CAAiB,IAAA,EAAjB,EAAsB,IAAA,EAAY,YAAA,EAAc,OAAA,EAC/C,QAAA,EAAA;AAAA,oBAAA,GAAA,CAACA,QAAiB,OAAA,EAAjB,EAAyB,SAAO,IAAA,EAC/B,QAAA,kBAAA,GAAA,CAAC,WAAQ,IAAA,EAAM,KAAA,GAAQ,UAAA,CAAW,KAAK,IAAI,EAAA,EAAI,WAAA,EAA0B,QAAgB,IAAA,EAAY,IAAA,EAAY,WAAsB,CAAA,EACzI,CAAA;AAAA,wBACCA,OAAA,CAAiB,MAAA,EAAjB,EAAwB,SAAA,EACvB,QAAA,kBAAA,GAAA,CAACA,QAAiB,OAAA,EAAjB,EAAyB,WAAA,EAAU,aAAA,EAAc,OAAM,OAAA,EAAQ,UAAA,EAAY,GAAG,gBAAA,EAAkB,CAAA,EAAG,WAAW,QAAA,EAC7G,QAAA,kBAAA,GAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,KAAA;AAAA,QACA,aAAA,EAAe,CAAC,CAAA,KAAM;AACpB,UAAA,IAAI,SAAA,KAAc,MAAA,EAAW,QAAA,CAAS,CAAC,CAAA;AACvC,UAAA,aAAA,GAAgB,CAAC,CAAA;AACjB,UAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,QACf;AAAA;AAAA,OAEJ,CAAA,EACF;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AAEA,IAAM,SAAA,GAAY,MAAM,UAAA,iBAAW,IAAI,MAAM,CAAA;AAmBtC,SAAS,eAAA,CAAgB;AAAA,EAC9B,KAAA,EAAO,SAAA;AAAA,EACP,YAAA,GAAe,EAAE,IAAA,EAAM,IAAA,EAAM,IAAI,IAAA,EAAK;AAAA,EACtC,aAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA,GAAc,YAAA;AAAA,EACd,QAAA;AAAA,EACA,EAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,UAAA,GAAa,OAAA;AAAA,EACb,WAAA,GAAc,QAAA;AAAA,EACd,SAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF,CAAA,EAAyB;AACvB,EAAA,MAAM,SAAS,cAAA,CAAe,EAAE,IAAI,QAAA,EAAU,KAAA,EAAO,MAAM,CAAA;AAC3D,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAU,eAAoB,YAAY,CAAA;AAChE,EAAA,MAAM,QAAQ,SAAA,IAAa,KAAA;AAC3B,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAU,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,MAAA,GAAS,CAAC,CAAA,KAAiB;AAC/B,IAAA,IAAI,CAAC,SAAA,EAAW,QAAA,CAAS,CAAC,CAAA;AAC1B,IAAA,aAAA,GAAgB,CAAC,CAAA;AACjB,IAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,EACf,CAAA;AACA,EAAA,uBACE,GAAA,CAAC,WAAA,EAAA,EAAY,KAAA,EAAc,MAAA,EAAgB,SAAA,EAAW,gBAAA,EACpD,QAAA,kBAAA,IAAA,CAACA,OAAA,CAAiB,IAAA,EAAjB,EAAsB,IAAA,EAAY,YAAA,EAAc,OAAA,EAC/C,QAAA,EAAA;AAAA,oBAAA,GAAA,CAACA,QAAiB,OAAA,EAAjB,EAAyB,OAAA,EAAO,IAAA,EAC/B,8BAAC,OAAA,EAAA,EAAQ,IAAA,EAAM,WAAA,CAAY,KAAK,GAAG,WAAA,EAA0B,MAAA,EAAgB,IAAA,EAAY,IAAA,EAAY,WAAsB,CAAA,EAC7H,CAAA;AAAA,wBACCA,OAAA,CAAiB,MAAA,EAAjB,EAAwB,SAAA,EACvB,QAAA,kBAAA,GAAA,CAACA,QAAiB,OAAA,EAAjB,EAAyB,WAAA,EAAU,mBAAA,EAAoB,OAAM,OAAA,EAAQ,UAAA,EAAY,GAAG,gBAAA,EAAkB,CAAA,EAAG,WAAW,QAAA,EACnH,QAAA,kBAAA,GAAA;AAAA,MAAC,oBAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,KAAA;AAAA,QACA,UAAA;AAAA,QACA,WAAA;AAAA,QACA,OAAA,EAAS,MAAA;AAAA,QACT,QAAA,EAAU,MAAM,OAAA,CAAQ,KAAK;AAAA;AAAA,OAEjC,CAAA,EACF;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AAiBO,SAAS,oBAAA,CAAqB;AAAA,EACnC,KAAA,GAAQ,EAAE,IAAA,EAAM,IAAA,EAAM,IAAI,IAAA,EAAK;AAAA,EAC/B,OAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA,GAAa,OAAA;AAAA,EACb,WAAA,GAAc,QAAA;AAAA,EACd;AACF,CAAA,EAA8B;AAC5B,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAU,eAAoB,KAAK,CAAA;AACzD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAU,KAAA,CAAA,QAAA,CAAS,MAAM,SAAA,CAAU,KAAA,CAAM,IAAA,IAAQ,KAAA,IAAS,SAAA,EAAU,EAAG,CAAC,CAAC,CAAA;AAC/F,EAAA,uBACE,IAAA,CAAC,SAAI,WAAA,EAAU,yBAAA,EAA0B,WAAW,EAAA,CAAG,YAAA,EAAc,8CAAA,EAAgD,SAAS,CAAA,EAC5H,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,SAAI,SAAA,EAAU,KAAA,EACb,8BAAC,QAAA,EAAA,EAAS,IAAA,EAAK,SAAQ,MAAA,EAAQ,CAAA,EAAG,OAAO,KAAA,EAAO,aAAA,EAAe,UAAU,KAAA,EAAc,aAAA,EAAe,UAAU,GAAA,EAAU,GAAA,EAAU,OAAc,CAAA,EACpJ,CAAA;AAAA,oBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6EAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,OAAA,EAAS,MAAM;AAAE,QAAA,QAAA,CAAS,KAAK,CAAA;AAAG,QAAA,QAAA,IAAW;AAAA,MAAE,GACxE,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,sBACA,GAAA,CAAC,MAAA,EAAA,EAAO,QAAA,EAAU,CAAC,MAAM,IAAA,IAAQ,CAAC,KAAA,CAAM,EAAA,EAAI,OAAA,EAAS,MAAM,OAAA,GAAU,KAAK,GACvE,QAAA,EAAA,UAAA,EACH;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ","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"]}
|
package/chunk-Y5AYU7PK.js.map
DELETED
|
@@ -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"]}
|
package/chunk-YG7JOOLJ.js.map
DELETED
|
@@ -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"]}
|
package/chunk-YPJYW624.js
DELETED
|
@@ -1,195 +0,0 @@
|
|
|
1
|
-
import { Floating } from './chunk-Y5AYU7PK.js';
|
|
2
|
-
import { Select } from './chunk-72OCFAPT.js';
|
|
3
|
-
import { Badge } from './chunk-O7F3CIDV.js';
|
|
4
|
-
import { cn } from './chunk-H63FYCMY.js';
|
|
5
|
-
import * as React from 'react';
|
|
6
|
-
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
7
|
-
|
|
8
|
-
var defaultFormat = (n) => n.toLocaleString("en-US");
|
|
9
|
-
function ChartCard({
|
|
10
|
-
title,
|
|
11
|
-
range,
|
|
12
|
-
total,
|
|
13
|
-
change,
|
|
14
|
-
periods,
|
|
15
|
-
value,
|
|
16
|
-
onPeriodChange,
|
|
17
|
-
className,
|
|
18
|
-
children,
|
|
19
|
-
...props
|
|
20
|
-
}) {
|
|
21
|
-
const titleId = React.useId();
|
|
22
|
-
return /* @__PURE__ */ jsxs(
|
|
23
|
-
"div",
|
|
24
|
-
{
|
|
25
|
-
"data-slot": "chart-card",
|
|
26
|
-
role: "figure",
|
|
27
|
-
"aria-labelledby": titleId,
|
|
28
|
-
className: cn("@container flex flex-col gap-4 overflow-hidden rounded-2xl border border-border-default bg-bg-card p-4", className),
|
|
29
|
-
...props,
|
|
30
|
-
children: [
|
|
31
|
-
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
|
|
32
|
-
/* @__PURE__ */ jsxs("div", { className: "flex min-h-7 items-center gap-3", children: [
|
|
33
|
-
/* @__PURE__ */ jsx("p", { id: titleId, className: "min-w-0 flex-1 truncate text-lg leading-6 font-medium text-text-default", children: title }),
|
|
34
|
-
periods && /* @__PURE__ */ jsx(PeriodSelect, { periods, value, onValueChange: onPeriodChange })
|
|
35
|
-
] }),
|
|
36
|
-
total == null && /* @__PURE__ */ jsx("p", { className: "text-sm leading-(--text-sm--line-height) text-text-muted", children: range })
|
|
37
|
-
] }),
|
|
38
|
-
total != null && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-0.5", children: [
|
|
39
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
40
|
-
/* @__PURE__ */ jsx("span", { className: "text-xl leading-(--text-xl--line-height) font-semibold text-text-default tabular-nums", children: total }),
|
|
41
|
-
change && /* @__PURE__ */ jsx(
|
|
42
|
-
Badge,
|
|
43
|
-
{
|
|
44
|
-
tone: /^[−-]/.test(change) ? "red" : "green",
|
|
45
|
-
size: "sm",
|
|
46
|
-
className: "[box-shadow:inset_0_0_0_1px_var(--tone-border)]",
|
|
47
|
-
children: change
|
|
48
|
-
}
|
|
49
|
-
)
|
|
50
|
-
] }),
|
|
51
|
-
/* @__PURE__ */ jsx("p", { className: "text-sm leading-(--text-sm--line-height) text-text-muted", children: range })
|
|
52
|
-
] }),
|
|
53
|
-
children
|
|
54
|
-
]
|
|
55
|
-
}
|
|
56
|
-
);
|
|
57
|
-
}
|
|
58
|
-
function PeriodSelect({
|
|
59
|
-
periods,
|
|
60
|
-
value,
|
|
61
|
-
onValueChange
|
|
62
|
-
}) {
|
|
63
|
-
const groups = Array.isArray(periods[0]) ? periods : [periods];
|
|
64
|
-
return /* @__PURE__ */ jsx(
|
|
65
|
-
Select,
|
|
66
|
-
{
|
|
67
|
-
size: "sm",
|
|
68
|
-
"aria-label": "Period",
|
|
69
|
-
options: groups.map((g) => ({ options: g.map((p) => ({ value: p, label: p })) })),
|
|
70
|
-
value,
|
|
71
|
-
onValueChange,
|
|
72
|
-
wrapperClassName: "w-[132px] shrink-0"
|
|
73
|
-
}
|
|
74
|
-
);
|
|
75
|
-
}
|
|
76
|
-
function ChartLegendPill({
|
|
77
|
-
color,
|
|
78
|
-
label,
|
|
79
|
-
value,
|
|
80
|
-
variant = "outline",
|
|
81
|
-
active,
|
|
82
|
-
dimmed,
|
|
83
|
-
className,
|
|
84
|
-
...props
|
|
85
|
-
}) {
|
|
86
|
-
const plain = variant === "plain";
|
|
87
|
-
return /* @__PURE__ */ jsxs(
|
|
88
|
-
"div",
|
|
89
|
-
{
|
|
90
|
-
"data-slot": "chart-legend-pill",
|
|
91
|
-
"data-variant": variant,
|
|
92
|
-
className: cn(
|
|
93
|
-
"inline-flex h-8 items-center gap-1.5 rounded-pill text-sm leading-(--text-sm--line-height) whitespace-nowrap",
|
|
94
|
-
"transition-[border-color,background-color] duration-(--duration-fast) ease-(--ease-out)",
|
|
95
|
-
"*:transition-opacity *:duration-(--duration-fast) *:ease-(--ease-out)",
|
|
96
|
-
plain ? "px-2" : "border px-2.5",
|
|
97
|
-
!plain && (active ? "border-border-strong" : "border-border-default"),
|
|
98
|
-
plain && active && "bg-bg-hover",
|
|
99
|
-
dimmed && "*:opacity-45",
|
|
100
|
-
className
|
|
101
|
-
),
|
|
102
|
-
...props,
|
|
103
|
-
children: [
|
|
104
|
-
/* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "size-2 shrink-0 rounded-full", style: { background: color } }),
|
|
105
|
-
/* @__PURE__ */ jsx("span", { className: "min-w-0 truncate text-text-default", children: label }),
|
|
106
|
-
value != null && /* @__PURE__ */ jsx("span", { className: "font-medium text-text-default tabular-nums", children: value })
|
|
107
|
-
]
|
|
108
|
-
}
|
|
109
|
-
);
|
|
110
|
-
}
|
|
111
|
-
var pointerPath = "M1.17721 0.5H13.1772L8.23721 5.62C7.65721 6.22 6.69721 6.22 6.11721 5.62L1.17721 0.5Z";
|
|
112
|
-
var tooltipShadow = "[filter:drop-shadow(0_2px_2px_var(--effect-shadow-sm))_drop-shadow(0_4px_3px_var(--effect-shadow-sm))]";
|
|
113
|
-
function TooltipPill({ label, value }) {
|
|
114
|
-
return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5 rounded-md bg-text-default px-2.5 py-1.5 text-sm leading-(--text-sm--line-height) whitespace-nowrap text-bg-canvas", children: [
|
|
115
|
-
/* @__PURE__ */ jsx("span", { className: "font-medium", children: label }),
|
|
116
|
-
/* @__PURE__ */ jsx("span", { className: "opacity-72", children: value })
|
|
117
|
-
] });
|
|
118
|
-
}
|
|
119
|
-
function ChartTooltip({
|
|
120
|
-
label,
|
|
121
|
-
value,
|
|
122
|
-
anchor,
|
|
123
|
-
sideOffset = 4,
|
|
124
|
-
className,
|
|
125
|
-
...props
|
|
126
|
-
}) {
|
|
127
|
-
if (anchor !== void 0) {
|
|
128
|
-
return /* @__PURE__ */ jsx(Floating, { anchor, side: "top", sideOffset: sideOffset + 5, className: "pointer-events-none", children: ({ side, arrowRef, arrowStyle }) => /* @__PURE__ */ jsxs("div", { "data-slot": "chart-tooltip", className: cn("relative", tooltipShadow, className), ...props, children: [
|
|
129
|
-
/* @__PURE__ */ jsx(TooltipPill, { label, value }),
|
|
130
|
-
/* @__PURE__ */ jsx(
|
|
131
|
-
"svg",
|
|
132
|
-
{
|
|
133
|
-
ref: arrowRef,
|
|
134
|
-
width: "12",
|
|
135
|
-
height: "6",
|
|
136
|
-
viewBox: "1.17 0.5 12 5.57",
|
|
137
|
-
"aria-hidden": true,
|
|
138
|
-
className: cn("absolute block text-text-default", side === "bottom" ? "bottom-full -mb-px rotate-180" : "top-full -mt-px"),
|
|
139
|
-
style: arrowStyle,
|
|
140
|
-
children: /* @__PURE__ */ jsx("path", { d: pointerPath, fill: "currentColor" })
|
|
141
|
-
}
|
|
142
|
-
)
|
|
143
|
-
] }) });
|
|
144
|
-
}
|
|
145
|
-
return /* @__PURE__ */ jsxs(
|
|
146
|
-
"div",
|
|
147
|
-
{
|
|
148
|
-
"data-slot": "chart-tooltip",
|
|
149
|
-
className: cn("pointer-events-none flex flex-col items-center", tooltipShadow, className),
|
|
150
|
-
...props,
|
|
151
|
-
children: [
|
|
152
|
-
/* @__PURE__ */ jsx(TooltipPill, { label, value }),
|
|
153
|
-
/* @__PURE__ */ jsx("svg", { width: "12", height: "6", viewBox: "1.17 0.5 12 5.57", "aria-hidden": true, className: "-mt-px block text-text-default", children: /* @__PURE__ */ jsx("path", { d: pointerPath, fill: "currentColor" }) })
|
|
154
|
-
]
|
|
155
|
-
}
|
|
156
|
-
);
|
|
157
|
-
}
|
|
158
|
-
function ChartLegendRow({
|
|
159
|
-
color,
|
|
160
|
-
label,
|
|
161
|
-
value,
|
|
162
|
-
note,
|
|
163
|
-
active,
|
|
164
|
-
dimmed,
|
|
165
|
-
className,
|
|
166
|
-
...props
|
|
167
|
-
}) {
|
|
168
|
-
return /* @__PURE__ */ jsxs(
|
|
169
|
-
"div",
|
|
170
|
-
{
|
|
171
|
-
"data-slot": "chart-legend-row",
|
|
172
|
-
className: cn(
|
|
173
|
-
"flex h-8 items-center gap-2 rounded-md px-2 py-1.5 text-sm leading-(--text-sm--line-height)",
|
|
174
|
-
// The dim fades the row's content, never its ground: on the row itself it would multiply
|
|
175
|
-
// the leaving highlight's fade-out and cut it short.
|
|
176
|
-
"transition-[background-color] duration-(--duration-fast) ease-(--ease-out)",
|
|
177
|
-
"*:transition-opacity *:duration-(--duration-fast) *:ease-(--ease-out)",
|
|
178
|
-
active && "bg-bg-muted",
|
|
179
|
-
dimmed && "*:opacity-45",
|
|
180
|
-
className
|
|
181
|
-
),
|
|
182
|
-
...props,
|
|
183
|
-
children: [
|
|
184
|
-
/* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "size-2 shrink-0 rounded-full", style: { background: color } }),
|
|
185
|
-
/* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 text-text-default", children: label }),
|
|
186
|
-
/* @__PURE__ */ jsx("span", { className: "shrink-0 font-medium whitespace-nowrap text-text-default", children: value }),
|
|
187
|
-
note && /* @__PURE__ */ jsx("span", { className: "shrink-0 text-right whitespace-nowrap text-text-muted", children: note })
|
|
188
|
-
]
|
|
189
|
-
}
|
|
190
|
-
);
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
export { ChartCard, ChartLegendPill, ChartLegendRow, ChartTooltip, defaultFormat };
|
|
194
|
-
//# sourceMappingURL=chunk-YPJYW624.js.map
|
|
195
|
-
//# sourceMappingURL=chunk-YPJYW624.js.map
|
package/chunk-YPJYW624.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/chart.tsx"],"names":[],"mappings":"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","file":"chunk-YPJYW624.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../lib/utils'\nimport { Badge } from './badge'\nimport { Floating } from './floating'\nimport { Select } from './select'\n\n/**\n * The parts every chart card shares, 1:1 with the uiKit `chart/barCard` (3607:18253) and `chart/channelCard`\n * (3608:18797) frames and the parts `chart/legendRow`\n * (3602:17559) and `chart/tooltip` (3602:17522). Plain React and CSS, no chart library.\n *\n * Every card sits in ChartCard: the title and a period Select on one row, the KPI with its\n * change and the range under it, then the chart.\n *\n * The tooltip is a text/default pill with bg/canvas text, medium label + value at 72%, 10×6\n * padding, radius-md, a 12×6 pointer and a two-step sm shadow.\n */\n\nexport type ChartDatum = {\n label: string\n value: number\n /** Tooltip title; defaults to the label. */\n tooltipLabel?: string\n}\n\nexport type Periods = string[] | string[][]\n\nexport interface ChartCardBaseProps extends Omit<React.ComponentProps<'div'>, 'title'> {\n title: string\n /** The dates the card covers, under the KPI, e.g. \"Oct 26 – Nov 1, 2026 · vs previous 7 days\". */\n range: string\n data: ChartDatum[]\n /** The KPI under the title, e.g. \"€48,260\". Cards that have one default it to the formatted sum. */\n total?: string\n /** The change badge after the KPI, e.g. \"+5.2%\". A leading minus turns it red. */\n change?: string\n /** Periods for the Select in the header. Nested arrays become titled-less groups split by a rule. */\n periods?: Periods\n /** The selected period. */\n value?: string\n onPeriodChange?: (period: string) => void\n /** Formats values in the tooltip, the legend and the axis. */\n formatValue?: (value: number) => string\n /** Index of the datum shown as hovered (state sheets, docs). */\n highlight?: number\n}\n\nexport const defaultFormat = (n: number) => n.toLocaleString('en-US')\n\n/* ---------- shared parts ---------- */\n\n/**\n * The card every chart sits in (uiKit \"chart explorations\" A, 4084:3591): bg/card, 1px\n * border-default, radius-2xl, 16px in and 16 between rows. Row one: the title (16/24 medium,\n * text/default) and, when there are `periods`, a small Select for the period at the right. Row\n * two: the KPI (text/xl semibold) with its change badge, and the range under it in text/muted, 2px\n * apart; without a KPI the range sits 4px under the title. Then the chart. The card is a size\n * container, so a chart can lay itself out wider from 560px (`@min-[560px]:`).\n */\nexport function ChartCard({\n title,\n range,\n total,\n change,\n periods,\n value,\n onPeriodChange,\n className,\n children,\n ...props\n}: Omit<ChartCardBaseProps, 'data' | 'formatValue' | 'highlight'>) {\n const titleId = React.useId()\n return (\n <div\n data-slot=\"chart-card\"\n role=\"figure\"\n aria-labelledby={titleId}\n className={cn('@container flex flex-col gap-4 overflow-hidden rounded-2xl border border-border-default bg-bg-card p-4', className)}\n {...props}\n >\n <div className=\"flex flex-col gap-1\">\n <div className=\"flex min-h-7 items-center gap-3\">\n <p id={titleId} className=\"min-w-0 flex-1 truncate text-lg leading-6 font-medium text-text-default\">\n {title}\n </p>\n {periods && <PeriodSelect periods={periods} value={value} onValueChange={onPeriodChange} />}\n </div>\n {/* Without a KPI the range sits right under the title. */}\n {total == null && <p className=\"text-sm leading-(--text-sm--line-height) text-text-muted\">{range}</p>}\n </div>\n {total != null && (\n <div className=\"flex flex-col gap-0.5\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xl leading-(--text-xl--line-height) font-semibold text-text-default tabular-nums\">{total}</span>\n {change && (\n <Badge\n tone={/^[−-]/.test(change) ? 'red' : 'green'}\n size=\"sm\"\n className=\"[box-shadow:inset_0_0_0_1px_var(--tone-border)]\"\n >\n {change}\n </Badge>\n )}\n </div>\n <p className=\"text-sm leading-(--text-sm--line-height) text-text-muted\">{range}</p>\n </div>\n )}\n {children}\n </div>\n )\n}\n\nfunction PeriodSelect({\n periods,\n value,\n onValueChange,\n}: {\n periods: Periods\n value?: string\n onValueChange?: (v: string) => void\n}) {\n const groups: string[][] = Array.isArray(periods[0]) ? (periods as string[][]) : [periods as string[]]\n return (\n <Select\n size=\"sm\"\n aria-label=\"Period\"\n options={groups.map((g) => ({ options: g.map((p) => ({ value: p, label: p })) }))}\n value={value}\n onValueChange={onValueChange}\n wrapperClassName=\"w-[132px] shrink-0\"\n />\n )\n}\n\n/**\n * chart/legendPill (4061:4182).\n * - `outline`: an outline pill with no fill — 8px swatch, label, value 6 apart, 6 / 10 in. Active\n * turns the ring border-strong.\n * - `plain` (the Donut legend): no ring and no value, 6 / 8 in; active fills bg/hover, as plain\n * controls do on hover.\n * Dimmed fades the content to 45%, never the ground.\n */\nexport function ChartLegendPill({\n color,\n label,\n value,\n variant = 'outline',\n active,\n dimmed,\n className,\n ...props\n}: {\n color: string\n label: React.ReactNode\n value?: React.ReactNode\n variant?: 'outline' | 'plain'\n active?: boolean\n dimmed?: boolean\n} & React.ComponentProps<'div'>) {\n const plain = variant === 'plain'\n return (\n <div\n data-slot=\"chart-legend-pill\"\n data-variant={variant}\n className={cn(\n 'inline-flex h-8 items-center gap-1.5 rounded-pill text-sm leading-(--text-sm--line-height) whitespace-nowrap',\n 'transition-[border-color,background-color] duration-(--duration-fast) ease-(--ease-out)',\n '*:transition-opacity *:duration-(--duration-fast) *:ease-(--ease-out)',\n plain ? 'px-2' : 'border px-2.5',\n !plain && (active ? 'border-border-strong' : 'border-border-default'),\n plain && active && 'bg-bg-hover',\n dimmed && '*:opacity-45',\n className,\n )}\n {...props}\n >\n <span aria-hidden className=\"size-2 shrink-0 rounded-full\" style={{ background: color }} />\n <span className=\"min-w-0 truncate text-text-default\">{label}</span>\n {value != null && <span className=\"font-medium text-text-default tabular-nums\">{value}</span>}\n </div>\n )\n}\n\nconst pointerPath = 'M1.17721 0.5H13.1772L8.23721 5.62C7.65721 6.22 6.69721 6.22 6.11721 5.62L1.17721 0.5Z'\nconst tooltipShadow = '[filter:drop-shadow(0_2px_2px_var(--effect-shadow-sm))_drop-shadow(0_4px_3px_var(--effect-shadow-sm))]'\n\nfunction TooltipPill({ label, value }: { label: React.ReactNode; value: React.ReactNode }) {\n return (\n <div className=\"flex items-center gap-1.5 rounded-md bg-text-default px-2.5 py-1.5 text-sm leading-(--text-sm--line-height) whitespace-nowrap text-bg-canvas\">\n <span className=\"font-medium\">{label}</span>\n <span className=\"opacity-72\">{value}</span>\n </div>\n )\n}\n\n/**\n * The chart tooltip pill with its pointer. Exported for custom charts.\n * With `anchor` it floats over the page (see Floating): it never gets cut off by the card,\n * flips below when there's no room above, slides in from the screen edge, and its pointer\n * keeps pointing at the anchor. Without it, it renders in place.\n */\nexport function ChartTooltip({\n label,\n value,\n anchor,\n sideOffset = 4,\n className,\n ...props\n}: {\n label: React.ReactNode\n value: React.ReactNode\n /** The element it points at. */\n anchor?: Element | null\n /** Gap between the anchor and the pointer's tip. */\n sideOffset?: number\n} & React.ComponentProps<'div'>) {\n if (anchor !== undefined) {\n // The pointer is 6 high and overlaps the pill by 1px.\n return (\n <Floating anchor={anchor} side=\"top\" sideOffset={sideOffset + 5} className=\"pointer-events-none\">\n {({ side, arrowRef, arrowStyle }) => (\n <div data-slot=\"chart-tooltip\" className={cn('relative', tooltipShadow, className)} {...props}>\n <TooltipPill label={label} value={value} />\n <svg\n ref={arrowRef as React.Ref<SVGSVGElement>}\n width=\"12\"\n height=\"6\"\n viewBox=\"1.17 0.5 12 5.57\"\n aria-hidden\n className={cn('absolute block text-text-default', side === 'bottom' ? 'bottom-full -mb-px rotate-180' : 'top-full -mt-px')}\n style={arrowStyle}\n >\n <path d={pointerPath} fill=\"currentColor\" />\n </svg>\n </div>\n )}\n </Floating>\n )\n }\n return (\n <div\n data-slot=\"chart-tooltip\"\n className={cn('pointer-events-none flex flex-col items-center', tooltipShadow, className)}\n {...props}\n >\n <TooltipPill label={label} value={value} />\n <svg width=\"12\" height=\"6\" viewBox=\"1.17 0.5 12 5.57\" aria-hidden className=\"-mt-px block text-text-default\">\n <path d={pointerPath} fill=\"currentColor\" />\n </svg>\n </div>\n )\n}\n\n/** One legend row: 8px swatch, label, value and an optional note. */\nexport function ChartLegendRow({\n color,\n label,\n value,\n note,\n active,\n dimmed,\n className,\n ...props\n}: {\n color: string\n label: React.ReactNode\n value: React.ReactNode\n note?: React.ReactNode\n active?: boolean\n dimmed?: boolean\n} & React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"chart-legend-row\"\n className={cn(\n 'flex h-8 items-center gap-2 rounded-md px-2 py-1.5 text-sm leading-(--text-sm--line-height)',\n // The dim fades the row's content, never its ground: on the row itself it would multiply\n // the leaving highlight's fade-out and cut it short.\n 'transition-[background-color] duration-(--duration-fast) ease-(--ease-out)',\n '*:transition-opacity *:duration-(--duration-fast) *:ease-(--ease-out)',\n active && 'bg-bg-muted',\n dimmed && '*:opacity-45',\n className,\n )}\n {...props}\n >\n <span aria-hidden className=\"size-2 shrink-0 rounded-full\" style={{ background: color }} />\n <span className=\"min-w-0 flex-1 text-text-default\">{label}</span>\n <span className=\"shrink-0 font-medium whitespace-nowrap text-text-default\">{value}</span>\n {note && <span className=\"shrink-0 text-right whitespace-nowrap text-text-muted\">{note}</span>}\n </div>\n )\n}\n\n/** Rounds the top of the axis up to a nice number that splits into four steps. */\n"]}
|
package/chunk-YPNKBE5X.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/input.tsx"],"names":[],"mappings":";;;;;AAiCO,SAAS,KAAA,CAAM;AAAA,EACpB,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,WAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,gBAAA;AAAA,EACA,EAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,kBAAA,EAAoB,eAAA;AAAA,EACpB,YAAA,EAAc,KAAA;AAAA,EACd,GAAG;AACL,CAAA,EAAe;AACb,EAAA,MAAM,QAAQ,YAAA,EAAa;AAC3B,EAAA,MAAM,SAAe,KAAA,CAAA,KAAA,EAAM;AAC3B,EAAA,MAAM,OAAA,GAAU,EAAA,IAAM,KAAA,EAAO,EAAA,IAAM,MAAA;AACnC,EAAA,MAAM,UAAA,GAAa,QAAA,IAAY,KAAA,EAAO,QAAA,IAAY,KAAA;AAClD,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,KAAK,CAAA,KAAM,OAAO,OAAA,IAAW,KAAA,CAAA;AACrD,EAAA,MAAM,UAAU,OAAO,KAAA,KAAU,YAAkB,KAAA,CAAA,cAAA,CAAe,KAAK,IAAI,KAAA,GAAQ,IAAA;AACnF,EAAA,MAAM,SAAA,GAAY,OAAA,GAAU,CAAA,EAAG,OAAO,CAAA,KAAA,CAAA,GAAU,MAAA;AAChD,EAAA,MAAM,WAAA,GAAc,CAAC,eAAA,EAAiB,KAAA,EAAO,WAAA,EAAa,SAAS,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,IAAK,MAAA;AAGlG,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAU,KAAA,CAAA,QAAA;AAAA,IACxD,YAAA,IAAgB,IAAA,IAAQ,MAAA,CAAO,YAAY,EAAE,MAAA,GAAS;AAAA,GACxD;AACA,EAAA,MAAM,SAAS,KAAA,IAAS,IAAA,GAAO,OAAO,KAAK,CAAA,CAAE,SAAS,CAAA,GAAI,kBAAA;AAE1D,EAAA,MAAM,QAAA,GAAiB,aAAyB,IAAI,CAAA;AAEpD,EAAA,uBACE,IAAA,CAAC,SAAI,WAAA,EAAU,eAAA,EAAgB,WAAW,EAAA,CAAG,mBAAA,EAAqB,gBAAgB,CAAA,EAC/E,QAAA,EAAA;AAAA,IAAA,KAAA,oBACC,GAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,OAAA;AAAA,QACT,SAAA,EAAU,sDAAA;AAAA,QAET,QAAA,EAAA;AAAA;AAAA,KACH;AAAA,oBAEF,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,WAAA,EAAU,aAAA;AAAA,QACV,WAAA,EAAW,IAAA;AAAA,QACX,eAAa,MAAA,IAAU,MAAA;AAAA,QACvB,gBAAc,OAAA,IAAW,MAAA;AAAA,QACzB,iBAAe,UAAA,IAAc,MAAA;AAAA,QAC7B,YAAA,EAAY,KAAA;AAAA,QACZ,SAAA,EAAW,EAAA,CAAG,aAAA,EAAe,SAAS,CAAA;AAAA,QAEtC,WAAA,EAAa,CAAC,CAAA,KAAM;AAClB,UAAA,MAAM,SAAS,CAAA,CAAE,MAAA;AACjB,UAAA,IAAI,MAAA,KAAW,SAAS,OAAA,IAAW,CAAC,cAAc,CAAC,MAAA,CAAO,OAAA,CAAQ,4BAA4B,CAAA,EAAG;AAC/F,YAAA,CAAA,CAAE,cAAA,EAAe;AACjB,YAAA,QAAA,CAAS,SAAS,KAAA,EAAM;AAAA,UAC1B;AAAA,QACF,CAAA;AAAA,QAEC,QAAA,EAAA;AAAA,UAAA,WAAA,wBACE,MAAA,EAAA,EAAK,SAAA,EAAU,kBAAA,EAAmB,aAAA,EAAW,MAC3C,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,0BAEF,GAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,GAAA,EAAK,QAAA;AAAA,cACL,EAAA,EAAI,OAAA;AAAA,cACJ,WAAA,EAAU,OAAA;AAAA,cACV,SAAA,EAAU,mBAAA;AAAA,cACV,QAAA,EAAU,UAAA;AAAA,cACV,QAAA,EAAU,YAAY,KAAA,EAAO,QAAA;AAAA,cAC7B,gBAAc,OAAA,IAAW,MAAA;AAAA,cACzB,kBAAA,EAAkB,WAAA;AAAA,cAClB,KAAA;AAAA,cACA,YAAA;AAAA,cACA,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,gBAAA,IAAI,SAAS,IAAA,EAAM,qBAAA,CAAsB,EAAE,MAAA,CAAO,KAAA,CAAM,SAAS,CAAC,CAAA;AAClE,gBAAA,QAAA,GAAW,CAAC,CAAA;AAAA,cACd,CAAA;AAAA,cACC,GAAG;AAAA;AAAA,WACN;AAAA,UACC,YAAA;AAAA,0BAEC,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kBAAA,EACb,QAAA,EAAA,YAAA,EACH;AAAA;AAAA;AAAA,KAEJ;AAAA,IACC,OAAA,oBACC,GAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAI,SAAA;AAAA,QACJ,SAAA,EAAW,EAAA,CAAG,SAAA,EAAW,OAAO,KAAA,KAAU,YAAkB,KAAA,CAAA,cAAA,CAAe,KAAK,CAAA,GAAI,4BAAA,GAA+B,iBAAiB,CAAA;AAAA,QAEnI,QAAA,EAAA;AAAA;AAAA;AACH,GAAA,EAEJ,CAAA;AAEJ","file":"chunk-YPNKBE5X.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../lib/utils'\nimport { useFormField } from './form-field'\n\n/**\n * Input, 1:1 with the uiKit `Input` set (820:51657): a label (medium), the field, and a hint\n * (13/19.5, muted) 8px apart. The label is 13px at every size. Three sizes: sm 28 with a 13px\n * value, md 32 and lg 36 with 14px (lg at radius-xl), fixed whatever the theme's body size; 12px side padding,\n * optional 16px leading and trailing icons 8px from the text.\n *\n * Placeholder is text/muted; a value is text/default and turns the icons from muted to\n * default (Figma's `filled`). `error` swaps the hint for the message in action/destructive/bg\n * and sets `aria-invalid`. Hover, focus and the error ring are styles/components/input.css.\n *\n * Inside a FormField, leave out `label`, `hint` and `error`: the field supplies the id,\n * description and invalid state.\n */\nexport interface InputProps extends Omit<React.ComponentProps<'input'>, 'size'> {\n label?: React.ReactNode\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 size?: 'sm' | 'md' | 'lg'\n leadingIcon?: React.ReactNode\n trailingIcon?: React.ReactNode\n /** Classes for the outer wrapper (label + field + hint). `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 Input({\n label,\n hint,\n error,\n size = 'md',\n leadingIcon,\n trailingIcon,\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}: InputProps) {\n const field = useFormField()\n const autoId = React.useId()\n const inputId = id ?? field?.id ?? autoId\n const isDisabled = disabled ?? field?.disabled ?? false\n const invalid = Boolean(error) || (field?.invalid ?? false)\n const message = typeof error === 'string' || React.isValidElement(error) ? error : hint\n const messageId = message ? `${inputId}-hint` : undefined\n const describedBy = [ariaDescribedBy, field?.describedBy, messageId].filter(Boolean).join(' ') || undefined\n\n // Figma's `filled`: track whether there is a value, controlled or not.\n const [uncontrolledFilled, setUncontrolledFilled] = React.useState(\n defaultValue != null && String(defaultValue).length > 0,\n )\n const filled = value != null ? String(value).length > 0 : uncontrolledFilled\n\n const inputRef = React.useRef<HTMLInputElement>(null)\n\n return (\n <div data-slot=\"input-wrapper\" className={cn('grid w-full gap-2', wrapperClassName)}>\n {label && (\n <label\n htmlFor={inputId}\n className=\"text-sm leading-[18px] font-medium text-text-default\"\n >\n {label}\n </label>\n )}\n <div\n data-slot=\"input-field\"\n data-size={size}\n data-filled={filled || undefined}\n data-invalid={invalid || undefined}\n data-disabled={isDisabled || undefined}\n data-force={force}\n className={cn('satin-field', className)}\n // Clicking the padding or an icon focuses the input; buttons in the icon slots keep their click.\n onMouseDown={(e) => {\n const target = e.target as HTMLElement\n if (target !== inputRef.current && !isDisabled && !target.closest('button, a, [role=\"button\"]')) {\n e.preventDefault()\n inputRef.current?.focus()\n }\n }}\n >\n {leadingIcon && (\n <span className=\"satin-field-icon\" aria-hidden>\n {leadingIcon}\n </span>\n )}\n <input\n ref={inputRef}\n id={inputId}\n data-slot=\"input\"\n className=\"satin-field-input\"\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) setUncontrolledFilled(e.target.value.length > 0)\n onChange?.(e)\n }}\n {...props}\n />\n {trailingIcon && (\n // Not aria-hidden: the trailing slot may hold an action, such as a clear button.\n <span className=\"satin-field-icon\">\n {trailingIcon}\n </span>\n )}\n </div>\n {message && (\n <p\n id={messageId}\n className={cn('text-sm', typeof error === 'string' || React.isValidElement(error) ? 'text-action-destructive-bg' : 'text-text-muted')}\n >\n {message}\n </p>\n )}\n </div>\n )\n}\n"]}
|