@solace-health/ui 0.10.680 → 0.10.681
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/dist/Animate/style.cjs +2 -2
- package/dist/Animate/style.js +1 -1
- package/dist/Avatar/index.cjs +1 -1
- package/dist/Avatar/index.js +1 -1
- package/dist/Avatar/style.cjs +1 -1
- package/dist/Avatar/style.js +1 -1
- package/dist/BackLink/BackLink.cjs +1 -1
- package/dist/BackLink/BackLink.js +1 -1
- package/dist/Card/illustrations/index.cjs +1 -1
- package/dist/Card/illustrations/index.js +1 -1
- package/dist/Card/index.cjs +1 -1
- package/dist/Card/index.js +1 -1
- package/dist/Checkbox/index.cjs +1 -1
- package/dist/Checkbox/index.js +1 -1
- package/dist/Checkbox/style.cjs +1 -1
- package/dist/Checkbox/style.js +1 -1
- package/dist/DateDropdown/index.cjs +1 -1
- package/dist/DateDropdown/index.js +1 -1
- package/dist/DateSelectCalendar/DateSelectCalendar.cjs +1 -1
- package/dist/DateSelectCalendar/DateSelectCalendar.js +1 -1
- package/dist/Error/index.cjs +1 -1
- package/dist/Error/index.js +1 -1
- package/dist/ExpandableDrawer/index.cjs +1 -1
- package/dist/ExpandableDrawer/index.js +1 -1
- package/dist/File/index.cjs +1 -1
- package/dist/File/index.js +1 -1
- package/dist/Form/AddressSelect/index.cjs +1 -1
- package/dist/Form/AddressSelect/index.js +1 -1
- package/dist/Form/Checkbox/index.cjs +1 -1
- package/dist/Form/Checkbox/index.js +1 -1
- package/dist/Form/Checkbox/styles.cjs +1 -1
- package/dist/Form/Checkbox/styles.js +1 -1
- package/dist/Form/DateDropdown/index.cjs +1 -1
- package/dist/Form/DateDropdown/index.js +1 -1
- package/dist/Form/DateDropdown/styles.cjs +1 -1
- package/dist/Form/DateDropdown/styles.js +1 -1
- package/dist/Form/DateSelect/index.cjs +1 -1
- package/dist/Form/DateSelect/index.js +1 -1
- package/dist/Form/DateTextMaskInput/index.cjs +1 -1
- package/dist/Form/DateTextMaskInput/index.js +1 -1
- package/dist/Form/FileUpload/index.cjs +1 -1
- package/dist/Form/FileUpload/index.js +1 -1
- package/dist/Form/FileUpload/styles.cjs +1 -1
- package/dist/Form/FileUpload/styles.js +1 -1
- package/dist/Form/Keyword/index.cjs +1 -1
- package/dist/Form/Keyword/index.js +1 -1
- package/dist/Form/LocationSelect/index.cjs +1 -1
- package/dist/Form/LocationSelect/index.js +1 -1
- package/dist/Form/LocationSelect/style.cjs +1 -1
- package/dist/Form/LocationSelect/style.js +1 -1
- package/dist/Form/Number/index.cjs +1 -1
- package/dist/Form/Number/index.js +1 -1
- package/dist/Form/OTP/index.cjs +1 -1
- package/dist/Form/OTP/index.js +1 -1
- package/dist/Form/Radio/index.cjs +1 -1
- package/dist/Form/Radio/index.js +1 -1
- package/dist/Form/Radio/styles.cjs +1 -1
- package/dist/Form/Radio/styles.js +1 -1
- package/dist/Form/Select/index.cjs +1 -1
- package/dist/Form/Select/index.js +1 -1
- package/dist/Form/Select/styles.cjs +1 -1
- package/dist/Form/Select/styles.js +1 -1
- package/dist/Form/SelectMenu/index.cjs +1 -1
- package/dist/Form/SelectMenu/index.js +1 -1
- package/dist/Form/SentimentSelector/index.cjs +1 -1
- package/dist/Form/SentimentSelector/index.js +1 -1
- package/dist/Form/Signature/index.cjs +1 -1
- package/dist/Form/Signature/index.js +1 -1
- package/dist/Form/Signature/styles.cjs +1 -1
- package/dist/Form/Signature/styles.js +1 -1
- package/dist/Form/Text/index.cjs +1 -1
- package/dist/Form/Text/index.js +1 -1
- package/dist/Form/TextInput/index.cjs +1 -1
- package/dist/Form/TextInput/index.js +1 -1
- package/dist/Form/TextInput/styles.cjs +1 -1
- package/dist/Form/TextInput/styles.js +1 -1
- package/dist/Form/TimePicker/index.cjs +1 -1
- package/dist/Form/TimePicker/index.js +1 -1
- package/dist/Form/TimeSelect/index.cjs +1 -1
- package/dist/Form/TimeSelect/index.js +1 -1
- package/dist/Form/Tree/index.cjs +1 -1
- package/dist/Form/Tree/index.js +1 -1
- package/dist/Form/index.cjs +1 -1
- package/dist/Form/index.js +1 -1
- package/dist/Form/shared/FormInputLabel.cjs +1 -1
- package/dist/Form/shared/FormInputLabel.js +1 -1
- package/dist/Form/shared/HelpModal.cjs +1 -1
- package/dist/Form/shared/HelpModal.js +1 -1
- package/dist/Form/shared/styles.cjs +1 -1
- package/dist/Form/shared/styles.js +1 -1
- package/dist/IconSelector/IconSelector.cjs +1 -1
- package/dist/IconSelector/IconSelector.js +1 -1
- package/dist/Icons/index.cjs +1 -1
- package/dist/Icons/index.js +1 -1
- package/dist/Illustration/index.cjs +1 -1
- package/dist/Illustration/index.js +1 -1
- package/dist/InfoContainer/index.cjs +1 -1
- package/dist/InfoContainer/index.js +1 -1
- package/dist/InfoContainer/style.cjs +1 -1
- package/dist/InfoContainer/style.js +1 -1
- package/dist/Input/Mask/index.cjs +1 -1
- package/dist/Input/Mask/index.js +1 -1
- package/dist/Input/index.cjs +1 -1
- package/dist/Input/index.js +1 -1
- package/dist/Menu/ExpandIcon.cjs +1 -1
- package/dist/Menu/ExpandIcon.js +1 -1
- package/dist/Menu/index.cjs +1 -1
- package/dist/Menu/index.js +1 -1
- package/dist/Molecules/ButtonWithIcon/index.cjs +1 -1
- package/dist/Molecules/ButtonWithIcon/index.js +1 -1
- package/dist/Molecules/ButtonWithIcon/style.cjs +1 -1
- package/dist/Molecules/ButtonWithIcon/style.js +1 -1
- package/dist/Molecules/FilterPopover/FiltersMenu/FiltersMenu.cjs +1 -1
- package/dist/Molecules/FilterPopover/FiltersMenu/FiltersMenu.js +1 -1
- package/dist/Molecules/FilterPopover/index.cjs +1 -1
- package/dist/Molecules/FilterPopover/index.js +1 -1
- package/dist/NavigationMenu/ExpandIcon.cjs +1 -1
- package/dist/NavigationMenu/ExpandIcon.js +1 -1
- package/dist/NavigationMenu/index.cjs +1 -1
- package/dist/NavigationMenu/index.js +1 -1
- package/dist/Overlay/Overlay.cjs +1 -1
- package/dist/Overlay/Overlay.js +1 -1
- package/dist/Overlay/OverlayTitle.cjs +1 -1
- package/dist/Overlay/OverlayTitle.js +1 -1
- package/dist/PreviewDrawer/PreviewDrawer.cjs +1 -1
- package/dist/PreviewDrawer/PreviewDrawer.js +1 -1
- package/dist/Radio/index.cjs +1 -1
- package/dist/Radio/index.js +1 -1
- package/dist/Radio/style.cjs +1 -1
- package/dist/Radio/style.js +1 -1
- package/dist/Search/index.cjs +1 -1
- package/dist/Search/index.js +1 -1
- package/dist/SelectClient/index.cjs +2 -2
- package/dist/SelectClient/index.js +1 -1
- package/dist/SentimentSelector/index.cjs +1 -1
- package/dist/SentimentSelector/index.js +1 -1
- package/dist/SortableList/index.cjs +1 -1
- package/dist/SortableList/index.js +1 -1
- package/dist/Status/Status.cjs +1 -1
- package/dist/Status/Status.js +1 -1
- package/dist/Table/index.cjs +1 -1
- package/dist/Table/index.js +1 -1
- package/dist/TimeSelect/styles.cjs +4 -4
- package/dist/TimeSelect/styles.js +1 -1
- package/dist/Tree/index.cjs +1 -1
- package/dist/Tree/index.js +1 -1
- package/dist/Typography/Body/index.stories.cjs +1 -1
- package/dist/Typography/Body/index.stories.js +1 -1
- package/dist/Typography/Display/index.stories.cjs +1 -1
- package/dist/Typography/Display/index.stories.js +1 -1
- package/dist/Typography/Header/index.stories.cjs +1 -1
- package/dist/Typography/Header/index.stories.js +1 -1
- package/dist/Typography/Truncated/index.stories.cjs +1 -1
- package/dist/Typography/Truncated/index.stories.js +1 -1
- package/dist/Typography/index.cjs +1 -1
- package/dist/Typography/index.js +1 -1
- package/dist/VantaLogo/index.cjs +1 -1
- package/dist/VantaLogo/index.js +1 -1
- package/dist/{chunk-JX6IZMJN.cjs → chunk-2LAJH2RP.cjs} +2 -2
- package/dist/{chunk-JX6IZMJN.cjs.map → chunk-2LAJH2RP.cjs.map} +1 -1
- package/dist/{chunk-4DZVLNTX.cjs → chunk-2RVGETNN.cjs} +2 -2
- package/dist/{chunk-4DZVLNTX.cjs.map → chunk-2RVGETNN.cjs.map} +1 -1
- package/dist/{chunk-ZK5EVH4P.cjs → chunk-2Z75NLB2.cjs} +2 -2
- package/dist/{chunk-ZK5EVH4P.cjs.map → chunk-2Z75NLB2.cjs.map} +1 -1
- package/dist/{chunk-FWTM4IIL.js → chunk-33G563Q2.js} +3 -3
- package/dist/{chunk-FWTM4IIL.js.map → chunk-33G563Q2.js.map} +1 -1
- package/dist/{chunk-2LPWHSFQ.js → chunk-3GWTFO2L.js} +2 -2
- package/dist/{chunk-2LPWHSFQ.js.map → chunk-3GWTFO2L.js.map} +1 -1
- package/dist/chunk-3J2DAGRX.cjs +2 -0
- package/dist/{chunk-IWIYGWAU.cjs.map → chunk-3J2DAGRX.cjs.map} +1 -1
- package/dist/chunk-3KRYWKCE.js +2 -0
- package/dist/{chunk-YVYP2VJD.js.map → chunk-3KRYWKCE.js.map} +1 -1
- package/dist/{chunk-BBZ2JUWF.cjs → chunk-3LMQL6VN.cjs} +2 -2
- package/dist/{chunk-BBZ2JUWF.cjs.map → chunk-3LMQL6VN.cjs.map} +1 -1
- package/dist/{chunk-ZXSJ2KZF.js → chunk-3UDVPE7J.js} +2 -2
- package/dist/{chunk-ZXSJ2KZF.js.map → chunk-3UDVPE7J.js.map} +1 -1
- package/dist/{chunk-Y2WVHDQV.js → chunk-3Y3DYEHP.js} +3 -3
- package/dist/{chunk-Y2WVHDQV.js.map → chunk-3Y3DYEHP.js.map} +1 -1
- package/dist/{chunk-PBWJLXMX.cjs → chunk-4DM2CCF4.cjs} +3 -3
- package/dist/{chunk-PBWJLXMX.cjs.map → chunk-4DM2CCF4.cjs.map} +1 -1
- package/dist/chunk-4K7BYV7X.js +2 -0
- package/dist/{chunk-IN7MQOHF.js.map → chunk-4K7BYV7X.js.map} +1 -1
- package/dist/{chunk-NKPJYK4U.js → chunk-4LY6OPFZ.js} +3 -3
- package/dist/{chunk-NKPJYK4U.js.map → chunk-4LY6OPFZ.js.map} +1 -1
- package/dist/{chunk-CLWV76AW.cjs → chunk-4TRHLIZM.cjs} +5 -5
- package/dist/{chunk-CLWV76AW.cjs.map → chunk-4TRHLIZM.cjs.map} +1 -1
- package/dist/{chunk-DQWZGAA5.js → chunk-4VPIGOTA.js} +3 -3
- package/dist/{chunk-DQWZGAA5.js.map → chunk-4VPIGOTA.js.map} +1 -1
- package/dist/{chunk-AE4TA5U2.cjs → chunk-5KVJIZS3.cjs} +4 -4
- package/dist/{chunk-AE4TA5U2.cjs.map → chunk-5KVJIZS3.cjs.map} +1 -1
- package/dist/{chunk-BM5PIB6W.cjs → chunk-5PBEG4CA.cjs} +4 -4
- package/dist/{chunk-BM5PIB6W.cjs.map → chunk-5PBEG4CA.cjs.map} +1 -1
- package/dist/{chunk-BCMHNRD7.js → chunk-5SPPADJS.js} +3 -3
- package/dist/{chunk-BCMHNRD7.js.map → chunk-5SPPADJS.js.map} +1 -1
- package/dist/{chunk-3XXSEP7E.js → chunk-6VFGUMEX.js} +2 -2
- package/dist/{chunk-3XXSEP7E.js.map → chunk-6VFGUMEX.js.map} +1 -1
- package/dist/{chunk-CGZQ4UV7.cjs → chunk-72ND2NHW.cjs} +2 -2
- package/dist/{chunk-CGZQ4UV7.cjs.map → chunk-72ND2NHW.cjs.map} +1 -1
- package/dist/{chunk-2NVNTAL5.js → chunk-76ZYXSAZ.js} +2 -2
- package/dist/{chunk-2NVNTAL5.js.map → chunk-76ZYXSAZ.js.map} +1 -1
- package/dist/{chunk-HLHHTNKY.js → chunk-7OKSLNLM.js} +3 -3
- package/dist/{chunk-HLHHTNKY.js.map → chunk-7OKSLNLM.js.map} +1 -1
- package/dist/{chunk-QLYOQV3Y.cjs → chunk-ALRYQXCN.cjs} +2 -2
- package/dist/{chunk-QLYOQV3Y.cjs.map → chunk-ALRYQXCN.cjs.map} +1 -1
- package/dist/{chunk-YQUBY66F.js → chunk-ATNYLSSK.js} +2 -2
- package/dist/{chunk-YQUBY66F.js.map → chunk-ATNYLSSK.js.map} +1 -1
- package/dist/{chunk-2KSGTBVN.js → chunk-AYHXJ2V7.js} +3 -3
- package/dist/{chunk-2KSGTBVN.js.map → chunk-AYHXJ2V7.js.map} +1 -1
- package/dist/{chunk-CE72EJFK.js → chunk-BBKQDSGL.js} +2 -2
- package/dist/{chunk-CE72EJFK.js.map → chunk-BBKQDSGL.js.map} +1 -1
- package/dist/{chunk-NGS5S5UC.js → chunk-BUDZOPTY.js} +2 -2
- package/dist/{chunk-NGS5S5UC.js.map → chunk-BUDZOPTY.js.map} +1 -1
- package/dist/{chunk-244KN63O.cjs → chunk-BZQS4TPS.cjs} +2 -2
- package/dist/{chunk-244KN63O.cjs.map → chunk-BZQS4TPS.cjs.map} +1 -1
- package/dist/{chunk-GSGGIS24.cjs → chunk-D64XUA3Z.cjs} +5 -5
- package/dist/{chunk-GSGGIS24.cjs.map → chunk-D64XUA3Z.cjs.map} +1 -1
- package/dist/{chunk-3QS4H3CC.cjs → chunk-DCQW4ICN.cjs} +5 -5
- package/dist/{chunk-3QS4H3CC.cjs.map → chunk-DCQW4ICN.cjs.map} +1 -1
- package/dist/{chunk-GEM5DGTW.js → chunk-EBF7CNPN.js} +3 -3
- package/dist/{chunk-GEM5DGTW.js.map → chunk-EBF7CNPN.js.map} +1 -1
- package/dist/chunk-ETU65IIX.cjs +2 -0
- package/dist/{chunk-CWBOHDTU.cjs.map → chunk-ETU65IIX.cjs.map} +1 -1
- package/dist/{chunk-RK5KIXLZ.cjs → chunk-EWCALFBF.cjs} +2 -2
- package/dist/{chunk-RK5KIXLZ.cjs.map → chunk-EWCALFBF.cjs.map} +1 -1
- package/dist/chunk-FMTJDPSB.js +2 -0
- package/dist/{chunk-E62FFEBT.js.map → chunk-FMTJDPSB.js.map} +1 -1
- package/dist/chunk-FSOKTK3P.cjs +2 -0
- package/dist/chunk-FSOKTK3P.cjs.map +1 -0
- package/dist/{chunk-N3WKOFF5.cjs → chunk-FWDL3NH4.cjs} +4 -4
- package/dist/{chunk-N3WKOFF5.cjs.map → chunk-FWDL3NH4.cjs.map} +1 -1
- package/dist/{chunk-L6PIFK7A.js → chunk-G5G7LYK3.js} +2 -2
- package/dist/{chunk-L6PIFK7A.js.map → chunk-G5G7LYK3.js.map} +1 -1
- package/dist/chunk-GW4NIANM.js +2 -0
- package/dist/{chunk-XLNV6ZRJ.js.map → chunk-GW4NIANM.js.map} +1 -1
- package/dist/{chunk-2KZYFEKJ.cjs → chunk-HCMJMPCZ.cjs} +3 -3
- package/dist/{chunk-2KZYFEKJ.cjs.map → chunk-HCMJMPCZ.cjs.map} +1 -1
- package/dist/chunk-I3WHD5JH.js +2 -0
- package/dist/chunk-I3WHD5JH.js.map +1 -0
- package/dist/{chunk-CHGA3ZIX.js → chunk-IDC4CQDY.js} +2 -2
- package/dist/{chunk-CHGA3ZIX.js.map → chunk-IDC4CQDY.js.map} +1 -1
- package/dist/chunk-JOYA5H5O.cjs +2 -0
- package/dist/{chunk-235PPUQG.cjs.map → chunk-JOYA5H5O.cjs.map} +1 -1
- package/dist/{chunk-RZHZWMZG.cjs → chunk-KN7KOQEA.cjs} +2 -2
- package/dist/{chunk-RZHZWMZG.cjs.map → chunk-KN7KOQEA.cjs.map} +1 -1
- package/dist/{chunk-YJOJ6GVJ.js → chunk-KQA2BZWZ.js} +3 -3
- package/dist/{chunk-YJOJ6GVJ.js.map → chunk-KQA2BZWZ.js.map} +1 -1
- package/dist/{chunk-62PW3DHB.js → chunk-L4WGCCAE.js} +2 -2
- package/dist/{chunk-62PW3DHB.js.map → chunk-L4WGCCAE.js.map} +1 -1
- package/dist/{chunk-EANBBNS3.js → chunk-LDJ7CXCM.js} +2 -2
- package/dist/{chunk-EANBBNS3.js.map → chunk-LDJ7CXCM.js.map} +1 -1
- package/dist/{chunk-FGV63AF5.cjs → chunk-LKI35W6B.cjs} +4 -4
- package/dist/{chunk-FGV63AF5.cjs.map → chunk-LKI35W6B.cjs.map} +1 -1
- package/dist/{chunk-YU4AV3YH.js → chunk-LQCLGICI.js} +3 -3
- package/dist/{chunk-YU4AV3YH.js.map → chunk-LQCLGICI.js.map} +1 -1
- package/dist/{chunk-6NPE4D6P.cjs → chunk-LTTQUCB6.cjs} +3 -3
- package/dist/{chunk-6NPE4D6P.cjs.map → chunk-LTTQUCB6.cjs.map} +1 -1
- package/dist/{chunk-M4ZHJETF.js → chunk-LVH5P4W4.js} +2 -2
- package/dist/{chunk-M4ZHJETF.js.map → chunk-LVH5P4W4.js.map} +1 -1
- package/dist/{chunk-MHRTFY7E.cjs → chunk-MAJY7TMQ.cjs} +2 -2
- package/dist/{chunk-MHRTFY7E.cjs.map → chunk-MAJY7TMQ.cjs.map} +1 -1
- package/dist/{chunk-SJZI4TT5.js → chunk-MMB6CIJS.js} +3 -3
- package/dist/{chunk-SJZI4TT5.js.map → chunk-MMB6CIJS.js.map} +1 -1
- package/dist/{chunk-IE23T3ZB.cjs → chunk-NCAR2BSS.cjs} +10 -10
- package/dist/{chunk-IE23T3ZB.cjs.map → chunk-NCAR2BSS.cjs.map} +1 -1
- package/dist/{chunk-KWP5XBVJ.cjs → chunk-NI5ICT4S.cjs} +5 -5
- package/dist/{chunk-KWP5XBVJ.cjs.map → chunk-NI5ICT4S.cjs.map} +1 -1
- package/dist/{chunk-UORYB6QZ.js → chunk-NQYJJTC5.js} +3 -3
- package/dist/{chunk-UORYB6QZ.js.map → chunk-NQYJJTC5.js.map} +1 -1
- package/dist/{chunk-PCQIT2LN.js → chunk-NUYCR4PO.js} +2 -2
- package/dist/{chunk-PCQIT2LN.js.map → chunk-NUYCR4PO.js.map} +1 -1
- package/dist/{chunk-LGI3ZCPE.cjs → chunk-O3ZLU46O.cjs} +4 -4
- package/dist/{chunk-LGI3ZCPE.cjs.map → chunk-O3ZLU46O.cjs.map} +1 -1
- package/dist/chunk-OO6LZUV6.cjs +2 -0
- package/dist/{chunk-4UIWR2XN.cjs.map → chunk-OO6LZUV6.cjs.map} +1 -1
- package/dist/{chunk-I7HUARM6.cjs → chunk-PIIJSAJL.cjs} +4 -4
- package/dist/{chunk-I7HUARM6.cjs.map → chunk-PIIJSAJL.cjs.map} +1 -1
- package/dist/{chunk-VGPGNCB5.js → chunk-PRMZHIOK.js} +3 -3
- package/dist/{chunk-VGPGNCB5.js.map → chunk-PRMZHIOK.js.map} +1 -1
- package/dist/{chunk-HFY4SYVJ.js → chunk-Q66VID6N.js} +3 -3
- package/dist/{chunk-HFY4SYVJ.js.map → chunk-Q66VID6N.js.map} +1 -1
- package/dist/{chunk-TBZVHQ3Y.js → chunk-QLHKZWHA.js} +2 -2
- package/dist/{chunk-TBZVHQ3Y.js.map → chunk-QLHKZWHA.js.map} +1 -1
- package/dist/{chunk-JANFY6JA.cjs → chunk-RR74CF6V.cjs} +2 -2
- package/dist/{chunk-JANFY6JA.cjs.map → chunk-RR74CF6V.cjs.map} +1 -1
- package/dist/chunk-SRCNOZIY.cjs +2 -0
- package/dist/{chunk-XN7HXB3L.cjs.map → chunk-SRCNOZIY.cjs.map} +1 -1
- package/dist/{chunk-GGYC2NHL.cjs → chunk-SS7XU6DP.cjs} +2 -2
- package/dist/{chunk-GGYC2NHL.cjs.map → chunk-SS7XU6DP.cjs.map} +1 -1
- package/dist/chunk-SUWIJYAN.cjs +2 -0
- package/dist/{chunk-V5NBWPV4.cjs.map → chunk-SUWIJYAN.cjs.map} +1 -1
- package/dist/{chunk-UMNVIB5F.js → chunk-TP3L65F4.js} +2 -2
- package/dist/{chunk-UMNVIB5F.js.map → chunk-TP3L65F4.js.map} +1 -1
- package/dist/chunk-TTWR6UDE.js +2 -0
- package/dist/{chunk-UOJ2V7M2.js.map → chunk-TTWR6UDE.js.map} +1 -1
- package/dist/chunk-U5MOQHBL.js +2 -0
- package/dist/{chunk-IFGTEXJY.js.map → chunk-U5MOQHBL.js.map} +1 -1
- package/dist/{chunk-FYRPRVYH.cjs → chunk-UI7DVJ6S.cjs} +5 -5
- package/dist/{chunk-FYRPRVYH.cjs.map → chunk-UI7DVJ6S.cjs.map} +1 -1
- package/dist/{chunk-BWMJ4XXR.js → chunk-UPX2X3IK.js} +2 -2
- package/dist/{chunk-BWMJ4XXR.js.map → chunk-UPX2X3IK.js.map} +1 -1
- package/dist/{chunk-5CLOPWXC.cjs → chunk-UUJBL6HC.cjs} +2 -2
- package/dist/{chunk-5CLOPWXC.cjs.map → chunk-UUJBL6HC.cjs.map} +1 -1
- package/dist/{chunk-TPJVQ5HW.js → chunk-V7KPCC3O.js} +3 -3
- package/dist/{chunk-TPJVQ5HW.js.map → chunk-V7KPCC3O.js.map} +1 -1
- package/dist/{chunk-532X67JI.js → chunk-VNSKGKQF.js} +3 -3
- package/dist/{chunk-532X67JI.js.map → chunk-VNSKGKQF.js.map} +1 -1
- package/dist/{chunk-QC6GHZWB.cjs → chunk-W7BUAA6F.cjs} +3 -3
- package/dist/{chunk-QC6GHZWB.cjs.map → chunk-W7BUAA6F.cjs.map} +1 -1
- package/dist/{chunk-FSHM3QP4.js → chunk-WYJUKW2K.js} +3 -3
- package/dist/{chunk-FSHM3QP4.js.map → chunk-WYJUKW2K.js.map} +1 -1
- package/dist/{chunk-7LWN7ALJ.cjs → chunk-XSNK4HFH.cjs} +4 -4
- package/dist/{chunk-7LWN7ALJ.cjs.map → chunk-XSNK4HFH.cjs.map} +1 -1
- package/dist/{chunk-6PH6EIR7.js → chunk-XUPJJY3S.js} +2 -2
- package/dist/{chunk-6PH6EIR7.js.map → chunk-XUPJJY3S.js.map} +1 -1
- package/dist/{chunk-DMCDCCR6.cjs → chunk-XWIFC5YM.cjs} +2 -2
- package/dist/{chunk-DMCDCCR6.cjs.map → chunk-XWIFC5YM.cjs.map} +1 -1
- package/dist/{chunk-HA5FDZWT.js → chunk-Y2X75EOD.js} +2 -2
- package/dist/{chunk-HA5FDZWT.js.map → chunk-Y2X75EOD.js.map} +1 -1
- package/dist/chunk-Y7Y434UN.cjs +2 -0
- package/dist/{chunk-AAYRFIJ4.cjs.map → chunk-Y7Y434UN.cjs.map} +1 -1
- package/dist/chunk-YKM7MVIP.cjs +2 -0
- package/dist/{chunk-GA6MRNGB.cjs.map → chunk-YKM7MVIP.cjs.map} +1 -1
- package/dist/{chunk-S7P3YEK4.cjs → chunk-YZH53VFW.cjs} +2 -2
- package/dist/{chunk-S7P3YEK4.cjs.map → chunk-YZH53VFW.cjs.map} +1 -1
- package/dist/{chunk-LZNOUUFK.js → chunk-ZGCNACVO.js} +3 -3
- package/dist/{chunk-LZNOUUFK.js.map → chunk-ZGCNACVO.js.map} +1 -1
- package/dist/{chunk-HWI67LGY.cjs → chunk-ZMFI2NIG.cjs} +4 -4
- package/dist/{chunk-HWI67LGY.cjs.map → chunk-ZMFI2NIG.cjs.map} +1 -1
- package/dist/{chunk-2E7IHWVD.cjs → chunk-ZP5TG7V6.cjs} +2 -2
- package/dist/{chunk-2E7IHWVD.cjs.map → chunk-ZP5TG7V6.cjs.map} +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/metafile-cjs.json +1 -1
- package/dist/metafile-esm.json +1 -1
- package/dist/v2/button/button.cjs +1 -1
- package/dist/v2/button/button.js +1 -1
- package/dist/v2/calendar/calendar.cjs +1 -1
- package/dist/v2/calendar/calendar.js +1 -1
- package/dist/v2/carousel/carousel.cjs +1 -1
- package/dist/v2/carousel/carousel.js +1 -1
- package/dist/v2/checkbox/button-checkbox.cjs +1 -1
- package/dist/v2/checkbox/button-checkbox.js +1 -1
- package/dist/v2/checkbox-group/checkbox-group.cjs +1 -1
- package/dist/v2/checkbox-group/checkbox-group.js +1 -1
- package/dist/v2/combobox/combobox.cjs +1 -1
- package/dist/v2/combobox/combobox.js +1 -1
- package/dist/v2/command/command.cjs +1 -1
- package/dist/v2/command/command.js +1 -1
- package/dist/v2/date-picker/date-picker-input.cjs +1 -1
- package/dist/v2/date-picker/date-picker-input.js +1 -1
- package/dist/v2/date-picker/date-picker.cjs +1 -1
- package/dist/v2/date-picker/date-picker.js +1 -1
- package/dist/v2/dialog/dialog.cjs +1 -1
- package/dist/v2/dialog/dialog.js +1 -1
- package/dist/v2/drawer/drawer.cjs +1 -1
- package/dist/v2/drawer/drawer.js +1 -1
- package/dist/v2/flex-drawer/flex-drawer.cjs +1 -1
- package/dist/v2/flex-drawer/flex-drawer.js +1 -1
- package/dist/v2/image-preview/image-preview.cjs +1 -1
- package/dist/v2/image-preview/image-preview.js +1 -1
- package/dist/v2/index.cjs +1 -1
- package/dist/v2/index.d.ts +1 -0
- package/dist/v2/index.js +1 -1
- package/dist/v2/multiselect/components/MultiSelectCommandGroup.cjs +1 -1
- package/dist/v2/multiselect/components/MultiSelectCommandGroup.js +1 -1
- package/dist/v2/multiselect/components/MultiSelectDropdown.cjs +1 -1
- package/dist/v2/multiselect/components/MultiSelectDropdown.js +1 -1
- package/dist/v2/multiselect/multiselect.cjs +1 -1
- package/dist/v2/multiselect/multiselect.js +1 -1
- package/dist/v2/scrolling-sidebar/scrolling-sidebar.cjs +2 -0
- package/dist/v2/scrolling-sidebar/scrolling-sidebar.cjs.map +1 -0
- package/dist/v2/scrolling-sidebar/scrolling-sidebar.d.ts +155 -0
- package/dist/v2/scrolling-sidebar/scrolling-sidebar.js +2 -0
- package/dist/v2/scrolling-sidebar/scrolling-sidebar.js.map +1 -0
- package/dist/v2/scrolling-sidebar/scrolling-sidebar.stories.d.ts +44 -0
- package/dist/v2/time-select/time-select.cjs +1 -1
- package/dist/v2/time-select/time-select.js +1 -1
- package/dist/v2/verified-advocate/verified-advocate.cjs +1 -1
- package/dist/v2/verified-advocate/verified-advocate.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-235PPUQG.cjs +0 -2
- package/dist/chunk-4UIWR2XN.cjs +0 -2
- package/dist/chunk-AAYRFIJ4.cjs +0 -2
- package/dist/chunk-CWBOHDTU.cjs +0 -2
- package/dist/chunk-E62FFEBT.js +0 -2
- package/dist/chunk-GA6MRNGB.cjs +0 -2
- package/dist/chunk-IFGTEXJY.js +0 -2
- package/dist/chunk-IN7MQOHF.js +0 -2
- package/dist/chunk-IWIYGWAU.cjs +0 -2
- package/dist/chunk-UOJ2V7M2.js +0 -2
- package/dist/chunk-V5NBWPV4.cjs +0 -2
- package/dist/chunk-XLNV6ZRJ.js +0 -2
- package/dist/chunk-XN7HXB3L.cjs +0 -2
- package/dist/chunk-YVYP2VJD.js +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/v2/multiselect/components/MultiSelectDropdown.tsx"],"names":["MultiSelectDropdown","uniqueId","open","loading","options","selected","toggleOption","onSearch","scrollbarRef","inputRef","emptyIndicator","loadingIndicator","selectFirstItem","jsx","CommandList","jsxs","Fragment","EmptyItem","CommandItem","MultiSelectCommandGroup"],"mappings":"+MAgBO,IAAMA,CAAAA,CAAsB,CAAC,CAClC,QAAA,CAAAC,CAAAA,CACA,KAAAC,CAAAA,CACA,OAAA,CAAAC,CAAAA,CACA,OAAA,CAAAC,CAAAA,CACA,QAAA,CAAAC,EACA,YAAA,CAAAC,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,YAAA,CAAAC,CAAAA,CACA,SAAAC,CAAAA,CACA,cAAA,CAAAC,CAAAA,CACA,gBAAA,CAAAC,CAAAA,CACA,eAAA,CAAAC,CACF,CAAA,GAEIC,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,UAAA,CACZ,QAAA,CAAAX,GACCW,cAAAA,CAACC,mBAAAA,CAAA,CACC,EAAA,CAAIb,CAAAA,CACJ,SAAA,CAAU,mHAAA,CACV,YAAA,CAAc,IAAM,CAElBO,CAAAA,CAAa,OAAA,CAAU,MAEzB,CAAA,CACA,aAAc,IAAM,CAElBA,CAAAA,CAAa,OAAA,CAAU,KAEzB,CAAA,CACA,UAAW,IAAM,CACfC,CAAAA,EAAU,OAAA,EAAS,KAAA,GACrB,EAEC,QAAA,CAAAN,CAAAA,EAAWQ,CAAAA,CACVA,CAAAA,CAEAI,eAAAA,CAAAC,mBAAAA,CAAA,CACE,QAAA,CAAA,CAAAH,cAAAA,CAACI,mBAAAA,CAAA,CAAgB,QAAA,CAAAV,CAAAA,CAAU,OAAA,CAAAH,EAAS,cAAA,CAAAM,CAAAA,CAAkB,CAAA,CACrD,CAACE,CAAAA,EAAmBC,cAAAA,CAACK,oBAAA,CAAY,KAAA,CAAM,GAAA,CAAI,SAAA,CAAU,QAAA,CAAS,CAAA,CAC/DL,eAACM,mBAAAA,CAAA,CAA8B,OAAA,CAAAf,CAAAA,CAAS,QAAA,CAAAH,CAAAA,CAAU,QAAA,CAAAI,CAAAA,CAAU,YAAA,CAAAC,CAAAA,CAAgB,CAAA,CAAA,CAC9E,CAAA,CAEJ,CAAA,CAEJ","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/v2/multiselect/components/MultiSelectDropdown.tsx"],"names":["MultiSelectDropdown","uniqueId","open","loading","options","selected","toggleOption","onSearch","scrollbarRef","inputRef","emptyIndicator","loadingIndicator","selectFirstItem","jsx","CommandList","jsxs","Fragment","EmptyItem","CommandItem","MultiSelectCommandGroup"],"mappings":"+MAgBO,IAAMA,CAAAA,CAAsB,CAAC,CAClC,QAAA,CAAAC,CAAAA,CACA,KAAAC,CAAAA,CACA,OAAA,CAAAC,CAAAA,CACA,OAAA,CAAAC,CAAAA,CACA,QAAA,CAAAC,EACA,YAAA,CAAAC,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,YAAA,CAAAC,CAAAA,CACA,SAAAC,CAAAA,CACA,cAAA,CAAAC,CAAAA,CACA,gBAAA,CAAAC,CAAAA,CACA,eAAA,CAAAC,CACF,CAAA,GAEIC,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,UAAA,CACZ,QAAA,CAAAX,GACCW,cAAAA,CAACC,mBAAAA,CAAA,CACC,EAAA,CAAIb,CAAAA,CACJ,SAAA,CAAU,mHAAA,CACV,YAAA,CAAc,IAAM,CAElBO,CAAAA,CAAa,OAAA,CAAU,MAEzB,CAAA,CACA,aAAc,IAAM,CAElBA,CAAAA,CAAa,OAAA,CAAU,KAEzB,CAAA,CACA,UAAW,IAAM,CACfC,CAAAA,EAAU,OAAA,EAAS,KAAA,GACrB,EAEC,QAAA,CAAAN,CAAAA,EAAWQ,CAAAA,CACVA,CAAAA,CAEAI,eAAAA,CAAAC,mBAAAA,CAAA,CACE,QAAA,CAAA,CAAAH,cAAAA,CAACI,mBAAAA,CAAA,CAAgB,QAAA,CAAAV,CAAAA,CAAU,OAAA,CAAAH,EAAS,cAAA,CAAAM,CAAAA,CAAkB,CAAA,CACrD,CAACE,CAAAA,EAAmBC,cAAAA,CAACK,oBAAA,CAAY,KAAA,CAAM,GAAA,CAAI,SAAA,CAAU,QAAA,CAAS,CAAA,CAC/DL,eAACM,mBAAAA,CAAA,CAA8B,OAAA,CAAAf,CAAAA,CAAS,QAAA,CAAAH,CAAAA,CAAU,QAAA,CAAAI,CAAAA,CAAU,YAAA,CAAAC,CAAAA,CAAgB,CAAA,CAAA,CAC9E,CAAA,CAEJ,CAAA,CAEJ","file":"chunk-EWCALFBF.cjs","sourcesContent":["import { CommandItem, CommandList } from '@/v2/command/command';\nimport { MultiSelectProps } from '../types';\nimport { MultiSelectCommandGroup } from './MultiSelectCommandGroup';\nimport { EmptyItem } from './EmptyItem';\nimport type { UseRefsReturn } from '../hooks/useRefs';\nimport { UseMultiSelectReturn } from '../hooks/useMultiSelect';\nimport { UseInteractionsReturn } from '../hooks/useInteractions';\n\ntype Props = Pick<\n MultiSelectProps,\n 'loading' | 'loadingIndicator' | 'emptyIndicator' | 'onSearch' | 'selectFirstItem'\n> &\n Pick<UseRefsReturn, 'inputRef' | 'scrollbarRef'> &\n Pick<UseMultiSelectReturn, 'uniqueId' | 'open' | 'selected' | 'options'> &\n Pick<UseInteractionsReturn, 'toggleOption'>;\n\nexport const MultiSelectDropdown = ({\n uniqueId,\n open,\n loading,\n options,\n selected,\n toggleOption,\n onSearch,\n scrollbarRef,\n inputRef,\n emptyIndicator,\n loadingIndicator,\n selectFirstItem,\n}: Props) => {\n return (\n <div className=\"relative\">\n {open && (\n <CommandList\n id={uniqueId}\n className=\"bg-popover text-popover-foreground animate-in absolute top-1 z-10 w-full rounded-md border shadow-xs outline-none\"\n onMouseLeave={() => {\n // eslint-disable-next-line no-param-reassign\n scrollbarRef.current = false;\n // setOnScrollbar(false);\n }}\n onMouseEnter={() => {\n // eslint-disable-next-line no-param-reassign\n scrollbarRef.current = true;\n // setOnScrollbar(true);\n }}\n onMouseUp={() => {\n inputRef?.current?.focus();\n }}\n >\n {loading && loadingIndicator ? (\n loadingIndicator\n ) : (\n <>\n <EmptyItem {...{ onSearch, options, emptyIndicator }} />\n {!selectFirstItem && <CommandItem value=\"-\" className=\"hidden\" />}\n <MultiSelectCommandGroup {...{ options, uniqueId, selected, toggleOption }} />\n </>\n )}\n </CommandList>\n )}\n </div>\n );\n};\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {a}from'./chunk-FCBKZAPC.js';import {a as a$1}from'./chunk-A4LZMZHH.js';import {jsx}from'react/jsx-runtime';function p({children:o,width:t,styles:l,...a$2}){return jsx(a,{width:t??"58rem",styles:a$1.overlay,placement:"right",...a$2,children:o})}export{p as a};//# sourceMappingURL=chunk-FMTJDPSB.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-FMTJDPSB.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/Overlay/Overlay.tsx"],"names":["Overlay","children","width","styles","rest","jsx","Drawer_default","DrawerTheme"],"mappings":"mHASe,SAARA,CAAAA,CAAyB,CAAE,QAAA,CAAAC,CAAAA,CAAU,KAAA,CAAAC,CAAAA,CAAO,MAAA,CAAAC,CAAAA,CAAQ,GAAGC,GAAK,CAAA,CAAU,CAC3E,OACEC,GAAAA,CAACC,CAAAA,CAAA,CAAO,KAAA,CAAOJ,CAAAA,EAAS,QAAS,MAAA,CAAQK,GAAAA,CAAY,OAAA,CAAS,SAAA,CAAU,OAAA,CAAS,GAAGH,GAAAA,CACjF,QAAA,CAAAH,EACH,CAEJ","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/Overlay/Overlay.tsx"],"names":["Overlay","children","width","styles","rest","jsx","Drawer_default","DrawerTheme"],"mappings":"mHASe,SAARA,CAAAA,CAAyB,CAAE,QAAA,CAAAC,CAAAA,CAAU,KAAA,CAAAC,CAAAA,CAAO,MAAA,CAAAC,CAAAA,CAAQ,GAAGC,GAAK,CAAA,CAAU,CAC3E,OACEC,GAAAA,CAACC,CAAAA,CAAA,CAAO,KAAA,CAAOJ,CAAAA,EAAS,QAAS,MAAA,CAAQK,GAAAA,CAAY,OAAA,CAAS,SAAA,CAAU,OAAA,CAAS,GAAGH,GAAAA,CACjF,QAAA,CAAAH,EACH,CAEJ","file":"chunk-FMTJDPSB.js","sourcesContent":["import { DrawerProps } from 'antd';\nimport Drawer from '../Drawer';\nimport { DrawerTheme } from '../Drawer/theme';\n\ntype Props = {\n children: React.ReactNode;\n} & DrawerProps;\n\n/** @deprecated Use the Drawer component from @solace-health/ui/v2 instead. */\nexport default function Overlay({ children, width, styles, ...rest }: Props) {\n return (\n <Drawer width={width ?? '58rem'} styles={DrawerTheme.overlay} placement=\"right\" {...rest}>\n {children}\n </Drawer>\n );\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkQRO22BPZ_cjs=require('./chunk-QRO22BPZ.cjs'),react=require('react'),lu=require('react-icons/lu'),jsxRuntime=require('react/jsx-runtime');function Q({sections:e,activeSectionId:r=void 0,onSectionSelect:n,collapsedLabel:u="Contents",ariaLabel:c="Section navigation",sticky:f=true,stickyOffset:L=void 0,classNames:a={}}){let[g,v]=react.useState(false),w=react.useRef(null),h=r??e[0]?.id,M=e.find(t=>t.id===h);react.useEffect(()=>{if(!g)return;let t=i=>{w.current&&!w.current.contains(i.target)&&v(false);};return document.addEventListener("mousedown",t),()=>{document.removeEventListener("mousedown",t);}},[g]);let T=t=>{n(t),v(false);};return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs("div",{ref:w,className:chunkQRO22BPZ_cjs.a("z-20 @lg:hidden",f&&"sticky",f&&(L??"top-4"),a.mobileWrapper),children:[jsxRuntime.jsxs("button",{type:"button",onClick:()=>v(t=>!t),"aria-expanded":g,"aria-label":c,className:chunkQRO22BPZ_cjs.a("flex w-full items-center justify-between rounded-lg border border-green-500 bg-white px-4 py-2 text-left shadow-sm",a.trigger),children:[jsxRuntime.jsx("span",{className:"text-sm font-semibold text-green-800",children:M?.label??u}),g?jsxRuntime.jsx(lu.LuChevronUp,{size:16,className:"shrink-0 text-green-800"}):jsxRuntime.jsx(lu.LuChevronDown,{size:16,className:"shrink-0 text-green-800"})]}),g&&jsxRuntime.jsx("nav",{"aria-label":c,className:chunkQRO22BPZ_cjs.a("absolute top-full right-0 left-0 mt-1 overflow-hidden rounded-lg border border-green-500 bg-white shadow-lg",a.dropdown),children:e.map(t=>{let i=h===t.id;return jsxRuntime.jsx("button",{type:"button",onClick:()=>T(t.id),"aria-current":i?"true":void 0,className:chunkQRO22BPZ_cjs.a("block w-full px-4 py-2.5 text-left text-sm transition-colors",i?"bg-green-200 font-semibold text-green-800":"text-gray-700 hover:bg-green-100 hover:text-green-800",a.dropdownItem,i&&a.activeItem),children:t.label},t.id)})})]}),jsxRuntime.jsx("aside",{className:chunkQRO22BPZ_cjs.a("hidden h-fit w-[290px] shrink-0 @lg:block",f&&"sticky",f&&(L??"top-0"),a.sidebar),children:jsxRuntime.jsx("nav",{"aria-label":c,className:"relative mt-4 flex flex-col gap-0.5 pl-3 before:absolute before:top-0 before:bottom-0 before:left-0 before:w-px before:bg-green-500",children:e.map(t=>{let i=h===t.id;return jsxRuntime.jsx("button",{type:"button",onClick:()=>n(t.id),"aria-current":i?"true":void 0,className:chunkQRO22BPZ_cjs.a("relative h-8 cursor-pointer rounded-r-md px-3 text-left text-base leading-normal transition-colors",i?"font-bold text-green-800 before:absolute before:top-0 before:bottom-0 before:-left-3 before:w-[2px] before:rounded-full before:bg-green-800":"text-gray-700 hover:text-green-800",a.sidebarItem,i&&a.activeItem),children:t.label},t.id)})})})]})}var O=2,Z=3e3;function W(e){let r=e;for(;r;){let{overflowY:n}=window.getComputedStyle(r);if((n==="auto"||n==="scroll"||n==="overlay")&&r.scrollHeight>r.clientHeight)return r;r=r.parentElement;}return window}function z(e){return e instanceof Window?0:e.getBoundingClientRect().top}function I(e){return e instanceof Window?window.scrollY:e.scrollTop}function ee(e,r,n){let u=I(e)+(r.getBoundingClientRect().top-z(e))-n,c=e instanceof Window?document.documentElement.scrollHeight-window.innerHeight:e.scrollHeight-e.clientHeight;return Math.max(0,Math.min(u,c))}function te(e,r,n){if(e instanceof Window){window.scrollTo({top:r,behavior:n});return}e.scrollTo({top:r,behavior:n});}function ne({id:e,children:r,className:n=void 0}){return jsxRuntime.jsx("section",{id:e,"data-scrolling-sidebar-section":"",className:n,children:r})}function D(e,r){react.Children.forEach(e,n=>{if(react.isValidElement(n)){if(n.type===ne){let{id:u,label:c}=n.props;r.push({id:u,label:c});return}n.type===react.Fragment&&D(n.props.children,r);}});}function se({children:e,defaultActiveSectionId:r=void 0,onActiveSectionChange:n=void 0,onSectionSelect:u=void 0,scrollOffset:c=0,scrollBehavior:f="smooth",collapsedLabel:L=void 0,ariaLabel:a=void 0,sticky:g=void 0,stickyOffset:v=void 0,className:w=void 0,contentClassName:h=void 0,sidebarClassNames:M=void 0}){let T=react.useMemo(()=>{let o=[];return D(e,o),o},[e]),t=react.useRef(null),i=react.useRef(false),E=react.useRef(null),[H,q]=react.useState(r??T[0]?.id??""),P=react.useRef(H),B=react.useRef(n);B.current=n;let A=react.useCallback(o=>{P.current!==o&&(P.current=o,q(o),B.current?.(o));},[]),G=o=>t.current?.querySelector(`#${CSS.escape(o)}`)??null;react.useEffect(()=>()=>E.current?.(),[]),react.useEffect(()=>{let o=t.current;if(!o)return;let x=W(o),R=x,s=()=>{if(i.current)return;let b=Array.from(o.querySelectorAll("[data-scrolling-sidebar-section]"));if(b.length===0)return;let C=z(x)+c+1,y=b.filter(m=>m.getBoundingClientRect().top<=C).sort((m,p)=>p.getBoundingClientRect().top-m.getBoundingClientRect().top)[0]??b[0];A(y.id);};return R.addEventListener("scroll",s,{passive:true}),window.addEventListener("resize",s),s(),()=>{R.removeEventListener("scroll",s),window.removeEventListener("resize",s);}},[c,A]);let V=o=>{u?.(o),A(o);let x=t.current,R=G(o);if(!x||!R)return;let s=W(x),b=s,C=ee(s,R,c);if(E.current?.(),Math.abs(I(s)-C)<=O)return;i.current=true,te(s,C,f);let y=new AbortController,m=0,p=()=>{window.clearTimeout(m),y.abort(),E.current=null,i.current=false;},X=()=>{Math.abs(I(s)-C)<=O&&p();};E.current=p,b.addEventListener("scroll",X,{passive:true,signal:y.signal}),b.addEventListener("scrollend",p,{signal:y.signal}),m=window.setTimeout(p,Z);};return jsxRuntime.jsx("div",{ref:t,className:chunkQRO22BPZ_cjs.a("@container",w),children:jsxRuntime.jsxs("div",{className:"flex flex-col gap-8 @lg:flex-row @lg:gap-10",children:[jsxRuntime.jsx(Q,{sections:T,activeSectionId:H,onSectionSelect:V,collapsedLabel:L,ariaLabel:a,sticky:g,stickyOffset:v,classNames:M}),jsxRuntime.jsx("div",{className:chunkQRO22BPZ_cjs.a("min-w-0 flex-1",h),children:e})]})})}exports.a=Q;exports.b=ne;exports.c=se;//# sourceMappingURL=chunk-FSOKTK3P.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-FSOKTK3P.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/v2/scrolling-sidebar/scrolling-sidebar.tsx"],"names":["ScrollingSidebar","sections","activeSectionId","onSectionSelect","collapsedLabel","ariaLabel","sticky","stickyOffset","classNames","isOpen","setIsOpen","useState","dropdownRef","useRef","resolvedActiveId","activeSection","section","useEffect","handleClickOutside","event","handleSelect","sectionId","jsxs","Fragment","cn","prev","jsx","LuChevronUp","LuChevronDown","isActive","PROGRAMMATIC_SCROLL_ARRIVAL_PX","PROGRAMMATIC_SCROLL_MAX_MS","getScrollParent","node","current","overflowY","scrollRootTop","root","currentScrollTop","sectionScrollTop","element","offset","desired","max","scrollRootTo","top","behavior","ScrollingSidebarContent","id","children","className","collectSections","acc","Children","child","isValidElement","label","ScrollingSidebarContainer","defaultActiveSectionId","onActiveSectionChange","scrollOffset","scrollBehavior","contentClassName","sidebarClassNames","useMemo","collected","containerRef","isProgrammaticScrollRef","cancelSettleRef","setActiveSectionId","activeSectionIdRef","onActiveSectionChangeRef","commitActive","useCallback","findSection","container","scrollTarget","updateActive","elements","threshold","next","a","b","targetTop","controller","maxTimer","finish","onScroll"],"mappings":"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","file":"chunk-FSOKTK3P.cjs","sourcesContent":["import {\n Children,\n Fragment,\n isValidElement,\n ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { LuChevronDown, LuChevronUp } from 'react-icons/lu';\n\nimport { cn } from '@/lib/utils';\n\nexport type ScrollingSidebarSection = {\n /** Unique identifier for the section. Typically matches the `id` of the target element to scroll to. */\n id: string;\n /** Content rendered for the section entry in the sidebar/dropdown. */\n label: ReactNode;\n};\n\nexport type ScrollingSidebarProps = {\n /** Ordered list of sections to render. Works with any number of sections. */\n sections: ReadonlyArray<ScrollingSidebarSection>;\n /** The `id` of the currently active section. When omitted, the first section is highlighted. */\n activeSectionId?: string;\n /** Invoked with the section `id` when a section entry is selected. */\n onSectionSelect: (sectionId: string) => void;\n /**\n * Label shown on the collapsed (narrow-container) trigger when no section is active.\n * Defaults to `'Contents'`.\n */\n collapsedLabel?: string;\n /** Accessible label applied to the navigation landmarks. Defaults to `'Section navigation'`. */\n ariaLabel?: string;\n /**\n * Whether both variants stick to the top of the scroll container while scrolling.\n * Defaults to `true` — sticky behavior is core to the pattern. Set to `false` to opt out\n * and let the component scroll away with the page.\n */\n sticky?: boolean;\n /**\n * Tailwind `top-*` class controlling the sticky offset for both variants — useful when the\n * page has a fixed/sticky header to clear (e.g. `'top-16'`). Overrides the built-in defaults\n * (`top-4` collapsed, `top-0` expanded). Ignored when `sticky` is `false`. For per-variant\n * control, use `classNames.mobileWrapper` / `classNames.sidebar` instead.\n */\n stickyOffset?: string;\n classNames?: {\n /** Applied to the collapsed-variant sticky wrapper (the outer container that sticks). */\n mobileWrapper?: string;\n /** Applied to the collapsed-variant trigger button. */\n trigger?: string;\n /** Applied to the collapsed-variant dropdown container. */\n dropdown?: string;\n /** Applied to each collapsed-variant dropdown item. */\n dropdownItem?: string;\n /** Applied to the expanded-variant sidebar `<aside>`. */\n sidebar?: string;\n /** Applied to each expanded-variant sidebar item. */\n sidebarItem?: string;\n /** Applied to the active item (both variants). */\n activeItem?: string;\n };\n};\n\n/**\n * A sticky navigation sidebar that tracks the active section of a long, scrollable page.\n *\n * Renders a collapsible dropdown when its container is narrow (below the `@lg` container\n * breakpoint) and an always-visible vertical sidebar when it is wide. The switch is driven by\n * container queries — the width of the component's own container, not the viewport — so it\n * collapses correctly even when placed in a column that doesn't span the full screen. The\n * component is presentational and controlled — scroll tracking and scrolling-into-view are\n * owned by the consumer via `activeSectionId` and `onSectionSelect`.\n *\n * It renders its two responsive variants as sibling elements (no wrapping element) so the\n * desktop sidebar can participate directly in the parent layout. Place it as a direct child of\n * a flex container next to the scrollable content, and mark an ancestor `@container` so the\n * container queries have a context to measure, e.g.\n * `<div className=\"@container flex flex-col @lg:flex-row\">` — so the sidebar's `position: sticky`\n * is anchored to the scroll container rather than a wrapper. ({@link ScrollingSidebarContainer}\n * sets up the `@container` for you.)\n *\n * Both variants stick to the top by default. Use `stickyOffset` to clear a fixed header,\n * or `sticky={false}` to opt out entirely.\n */\nexport function ScrollingSidebar({\n sections,\n activeSectionId = undefined,\n onSectionSelect,\n collapsedLabel = 'Contents',\n ariaLabel = 'Section navigation',\n sticky = true,\n stickyOffset = undefined,\n classNames = {},\n}: ScrollingSidebarProps) {\n const [isOpen, setIsOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n const resolvedActiveId = activeSectionId ?? sections[0]?.id;\n const activeSection = sections.find((section) => section.id === resolvedActiveId);\n\n // Close the dropdown when clicking outside of it.\n useEffect(() => {\n if (!isOpen) return undefined;\n\n const handleClickOutside = (event: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isOpen]);\n\n const handleSelect = (sectionId: string) => {\n onSectionSelect(sectionId);\n setIsOpen(false);\n };\n\n return (\n <>\n {/* Mobile/tablet: collapsible dropdown */}\n <div\n ref={dropdownRef}\n className={cn(\n 'z-20 @lg:hidden',\n sticky && 'sticky',\n sticky && (stickyOffset ?? 'top-4'),\n classNames.mobileWrapper,\n )}\n >\n <button\n type=\"button\"\n onClick={() => setIsOpen((prev) => !prev)}\n aria-expanded={isOpen}\n aria-label={ariaLabel}\n className={cn(\n 'flex w-full items-center justify-between rounded-lg border border-green-500 bg-white px-4 py-2 text-left shadow-sm',\n classNames.trigger,\n )}\n >\n <span className=\"text-sm font-semibold text-green-800\">\n {activeSection?.label ?? collapsedLabel}\n </span>\n {isOpen ? (\n <LuChevronUp size={16} className=\"shrink-0 text-green-800\" />\n ) : (\n <LuChevronDown size={16} className=\"shrink-0 text-green-800\" />\n )}\n </button>\n\n {isOpen && (\n <nav\n aria-label={ariaLabel}\n className={cn(\n 'absolute top-full right-0 left-0 mt-1 overflow-hidden rounded-lg border border-green-500 bg-white shadow-lg',\n classNames.dropdown,\n )}\n >\n {sections.map((section) => {\n const isActive = resolvedActiveId === section.id;\n\n return (\n <button\n key={section.id}\n type=\"button\"\n onClick={() => handleSelect(section.id)}\n aria-current={isActive ? 'true' : undefined}\n className={cn(\n 'block w-full px-4 py-2.5 text-left text-sm transition-colors',\n isActive\n ? 'bg-green-200 font-semibold text-green-800'\n : 'text-gray-700 hover:bg-green-100 hover:text-green-800',\n classNames.dropdownItem,\n isActive && classNames.activeItem,\n )}\n >\n {section.label}\n </button>\n );\n })}\n </nav>\n )}\n </div>\n\n {/* Desktop: always-visible sidebar */}\n <aside\n className={cn(\n 'hidden h-fit w-[290px] shrink-0 @lg:block',\n sticky && 'sticky',\n sticky && (stickyOffset ?? 'top-0'),\n classNames.sidebar,\n )}\n >\n <nav\n aria-label={ariaLabel}\n className=\"relative mt-4 flex flex-col gap-0.5 pl-3 before:absolute before:top-0 before:bottom-0 before:left-0 before:w-px before:bg-green-500\"\n >\n {sections.map((section) => {\n const isActive = resolvedActiveId === section.id;\n\n return (\n <button\n key={section.id}\n type=\"button\"\n onClick={() => onSectionSelect(section.id)}\n aria-current={isActive ? 'true' : undefined}\n className={cn(\n 'relative h-8 cursor-pointer rounded-r-md px-3 text-left text-base leading-normal transition-colors',\n isActive\n ? 'font-bold text-green-800 before:absolute before:top-0 before:bottom-0 before:-left-3 before:w-[2px] before:rounded-full before:bg-green-800'\n : 'text-gray-700 hover:text-green-800',\n classNames.sidebarItem,\n isActive && classNames.activeItem,\n )}\n >\n {section.label}\n </button>\n );\n })}\n </nav>\n </aside>\n </>\n );\n}\n\ntype ScrollRoot = HTMLElement | Window;\n\n/** Distance (px) from the target scroll position at which a programmatic scroll counts as arrived. */\nconst PROGRAMMATIC_SCROLL_ARRIVAL_PX = 2;\n/** Hard cap so the scroll-spy always resumes even if the scroll never quite reaches the target. */\nconst PROGRAMMATIC_SCROLL_MAX_MS = 3000;\n\n/**\n * Finds the nearest scrollable ancestor of `node` (inclusive), falling back to `window` when\n * the page itself is the scroll container. Lets the container work whether it establishes its\n * own scroll region (via `overflow`) or sits inside a scrolling app shell.\n */\nfunction getScrollParent(node: HTMLElement): ScrollRoot {\n let current: HTMLElement | null = node;\n while (current) {\n const { overflowY } = window.getComputedStyle(current);\n const isScrollable = overflowY === 'auto' || overflowY === 'scroll' || overflowY === 'overlay';\n if (isScrollable && current.scrollHeight > current.clientHeight) return current;\n current = current.parentElement;\n }\n return window;\n}\n\nfunction scrollRootTop(root: ScrollRoot): number {\n return root instanceof Window ? 0 : root.getBoundingClientRect().top;\n}\n\nfunction currentScrollTop(root: ScrollRoot): number {\n return root instanceof Window ? window.scrollY : root.scrollTop;\n}\n\n/** The scroll position (clamped to the scrollable range) that lands `element` at the top, minus `offset`. */\nfunction sectionScrollTop(root: ScrollRoot, element: HTMLElement, offset: number): number {\n const desired =\n currentScrollTop(root) + (element.getBoundingClientRect().top - scrollRootTop(root)) - offset;\n const max =\n root instanceof Window\n ? document.documentElement.scrollHeight - window.innerHeight\n : root.scrollHeight - root.clientHeight;\n return Math.max(0, Math.min(desired, max));\n}\n\nfunction scrollRootTo(root: ScrollRoot, top: number, behavior: ScrollBehavior): void {\n if (root instanceof Window) {\n window.scrollTo({ top, behavior });\n return;\n }\n root.scrollTo({ top, behavior });\n}\n\nexport type ScrollingSidebarContentProps = {\n /** Unique identifier for the section — used as the scroll-target `id` and to match the sidebar entry. */\n id: string;\n /**\n * Content rendered for this section's entry in the sidebar/dropdown. Read by the parent\n * {@link ScrollingSidebarContainer} when it scans its children — not rendered by this component.\n */\n // eslint-disable-next-line react/no-unused-prop-types\n label: ReactNode;\n /** The section body. */\n children: ReactNode;\n /** Applied to the rendered `<section>` wrapper. */\n className?: string;\n};\n\n/**\n * A section within a {@link ScrollingSidebarContainer}. Renders its `children` inside a\n * `<section id={id}>` scroll target and declares — via its `id` and `label` — the sidebar entry\n * the container should generate for it. The container discovers these by scanning its `children`\n * for `ScrollingSidebarContent` elements, so there's no separate `sections` list to keep in sync.\n *\n * ```tsx\n * <ScrollingSidebarContainer>\n * <ScrollingSidebarContent id=\"general\" label=\"General\">…</ScrollingSidebarContent>\n * <ScrollingSidebarContent id=\"exams\" label={<div>Exams</div>}>…</ScrollingSidebarContent>\n * </ScrollingSidebarContainer>\n * ```\n */\nexport function ScrollingSidebarContent({\n id,\n children,\n className = undefined,\n}: ScrollingSidebarContentProps) {\n return (\n <section id={id} data-scrolling-sidebar-section=\"\" className={className}>\n {children}\n </section>\n );\n}\n\n/**\n * Walks `children` (descending into fragments) and collects a `{ id, label }` entry for every\n * {@link ScrollingSidebarContent} it finds, preserving document order. This is what lets the\n * container derive its navigation from the content instead of a parallel `sections` prop.\n */\nfunction collectSections(children: ReactNode, acc: ScrollingSidebarSection[]): void {\n Children.forEach(children, (child) => {\n if (!isValidElement(child)) return;\n if (child.type === ScrollingSidebarContent) {\n const { id, label } = child.props as ScrollingSidebarContentProps;\n acc.push({ id, label });\n return;\n }\n if (child.type === Fragment) {\n collectSections((child.props as { children?: ReactNode }).children, acc);\n }\n });\n}\n\nexport type ScrollingSidebarContainerProps = {\n /**\n * The scrollable page content. Each {@link ScrollingSidebarContent} child becomes a sidebar\n * entry — the container reads its `id` and `label` to build the navigation and to track/scroll\n * to it. Non-`ScrollingSidebarContent` children render normally but aren't tracked.\n */\n children: ReactNode;\n /** The section highlighted before the user scrolls or selects. Defaults to the first section. */\n defaultActiveSectionId?: string;\n /** Called whenever the active section changes, from scrolling or selection. */\n onActiveSectionChange?: (sectionId: string) => void;\n /** Called when the user selects a section from the sidebar (before the scroll animation). */\n onSectionSelect?: (sectionId: string) => void;\n /**\n * Pixels from the top of the scroll container used both to decide the active section and as\n * the landing offset when scrolling to one — increase it to clear a fixed header. Defaults to `0`.\n */\n scrollOffset?: number;\n /** Scroll animation used when selecting a section. Defaults to `'smooth'`. */\n scrollBehavior?: ScrollBehavior;\n /** @see ScrollingSidebarProps.collapsedLabel */\n collapsedLabel?: string;\n /** @see ScrollingSidebarProps.ariaLabel */\n ariaLabel?: string;\n /** @see ScrollingSidebarProps.sticky */\n sticky?: boolean;\n /** @see ScrollingSidebarProps.stickyOffset */\n stickyOffset?: string;\n /** Applied to the outer `@container` wrapper. Add `overflow-y-auto` + a height here to make the container its own scroll region. */\n className?: string;\n /** Applied to the content column that wraps `children`. */\n contentClassName?: string;\n /** Forwarded to the underlying `ScrollingSidebar` `classNames`. */\n sidebarClassNames?: ScrollingSidebarProps['classNames'];\n};\n\n/**\n * A batteries-included wrapper around {@link ScrollingSidebar} that owns everything a consumer\n * would otherwise wire up by hand: the layout, the scroll container detection, active-section\n * tracking while scrolling, and smooth scrolling to a section on select.\n *\n * Compose the page from {@link ScrollingSidebarContent} children — each one's `id` and `label`\n * become a sidebar entry, so the navigation is derived from the content and there's no parallel\n * `sections` list to keep in sync.\n *\n * ```tsx\n * <ScrollingSidebarContainer>\n * <ScrollingSidebarContent id=\"general\" label=\"General\">…</ScrollingSidebarContent>\n * <ScrollingSidebarContent id=\"exams\" label={<div>Exams</div>}>…</ScrollingSidebarContent>\n * </ScrollingSidebarContainer>\n * ```\n *\n * The container tracks scrolling on its nearest scrollable ancestor, or on the container itself\n * when you give it `overflow-y-auto` and a height via `className`.\n */\nexport function ScrollingSidebarContainer({\n children,\n defaultActiveSectionId = undefined,\n onActiveSectionChange = undefined,\n onSectionSelect = undefined,\n scrollOffset = 0,\n scrollBehavior = 'smooth',\n collapsedLabel = undefined,\n ariaLabel = undefined,\n sticky = undefined,\n stickyOffset = undefined,\n className = undefined,\n contentClassName = undefined,\n sidebarClassNames = undefined,\n}: ScrollingSidebarContainerProps) {\n // Derive the navigation from the `ScrollingSidebarContent` children rather than a parallel prop,\n // so the sidebar and the content can never drift out of sync.\n const sections = useMemo(() => {\n const collected: ScrollingSidebarSection[] = [];\n collectSections(children, collected);\n return collected;\n }, [children]);\n\n const containerRef = useRef<HTMLDivElement>(null);\n const isProgrammaticScrollRef = useRef(false);\n const cancelSettleRef = useRef<(() => void) | null>(null);\n const [activeSectionId, setActiveSectionId] = useState(\n defaultActiveSectionId ?? sections[0]?.id ?? '',\n );\n const activeSectionIdRef = useRef(activeSectionId);\n const onActiveSectionChangeRef = useRef(onActiveSectionChange);\n onActiveSectionChangeRef.current = onActiveSectionChange;\n\n const commitActive = useCallback((sectionId: string) => {\n if (activeSectionIdRef.current === sectionId) return;\n activeSectionIdRef.current = sectionId;\n setActiveSectionId(sectionId);\n onActiveSectionChangeRef.current?.(sectionId);\n }, []);\n\n const findSection = (sectionId: string) =>\n containerRef.current?.querySelector<HTMLElement>(`#${CSS.escape(sectionId)}`) ?? null;\n\n // Tear down any in-flight programmatic-scroll guard (timers + listeners) on unmount.\n useEffect(() => () => cancelSettleRef.current?.(), []);\n\n // Track the active section as the user scrolls the nearest scroll container.\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return undefined;\n\n const root = getScrollParent(container);\n const scrollTarget: EventTarget = root;\n\n const updateActive = () => {\n if (isProgrammaticScrollRef.current) return;\n const elements = Array.from(\n container.querySelectorAll<HTMLElement>('[data-scrolling-sidebar-section]'),\n );\n if (elements.length === 0) return;\n\n const threshold = scrollRootTop(root) + scrollOffset + 1;\n const next =\n elements\n .filter((element) => element.getBoundingClientRect().top <= threshold)\n .sort((a, b) => b.getBoundingClientRect().top - a.getBoundingClientRect().top)[0] ??\n elements[0];\n commitActive(next.id);\n };\n\n scrollTarget.addEventListener('scroll', updateActive, { passive: true });\n window.addEventListener('resize', updateActive);\n updateActive();\n\n return () => {\n scrollTarget.removeEventListener('scroll', updateActive);\n window.removeEventListener('resize', updateActive);\n };\n }, [scrollOffset, commitActive]);\n\n const handleSelect = (sectionId: string) => {\n onSectionSelect?.(sectionId);\n commitActive(sectionId);\n\n const container = containerRef.current;\n const element = findSection(sectionId);\n if (!container || !element) return;\n\n const root = getScrollParent(container);\n const scrollTarget: EventTarget = root;\n const targetTop = sectionScrollTop(root, element, scrollOffset);\n\n // Cancel any in-flight guard from a previous selection before starting a new scroll.\n cancelSettleRef.current?.();\n\n // Nothing to animate — just leave the highlight on the (already committed) target.\n if (Math.abs(currentScrollTop(root) - targetTop) <= PROGRAMMATIC_SCROLL_ARRIVAL_PX) return;\n\n isProgrammaticScrollRef.current = true;\n scrollRootTo(root, targetTop, scrollBehavior);\n\n // Suppress the scroll-spy until the scroll actually reaches the target. A fixed timeout is\n // wrong — a long scroll outlasts it and the spy re-activates mid-flight, flashing the\n // sections passing under the threshold. Holding the guard until we arrive (or the scroll\n // ends) releases it the instant we're there and never suppresses later user scrolls.\n const controller = new AbortController();\n let maxTimer = 0;\n const finish = () => {\n window.clearTimeout(maxTimer);\n controller.abort();\n cancelSettleRef.current = null;\n isProgrammaticScrollRef.current = false;\n };\n const onScroll = () => {\n if (Math.abs(currentScrollTop(root) - targetTop) <= PROGRAMMATIC_SCROLL_ARRIVAL_PX) finish();\n };\n\n cancelSettleRef.current = finish;\n scrollTarget.addEventListener('scroll', onScroll, { passive: true, signal: controller.signal });\n scrollTarget.addEventListener('scrollend', finish, { signal: controller.signal });\n maxTimer = window.setTimeout(finish, PROGRAMMATIC_SCROLL_MAX_MS);\n };\n\n return (\n // `@container` establishes the query context so every `@lg:` variant below responds to this\n // element's width rather than the viewport. The flex layout lives on an inner element because\n // container-query variants apply to a query container's descendants, never to itself — putting\n // `@lg:flex-row` here (a descendant) is what lets the layout switch; on the `@container`\n // element it would silently never match.\n <div ref={containerRef} className={cn('@container', className)}>\n <div className=\"flex flex-col gap-8 @lg:flex-row @lg:gap-10\">\n <ScrollingSidebar\n sections={sections}\n activeSectionId={activeSectionId}\n onSectionSelect={handleSelect}\n collapsedLabel={collapsedLabel}\n ariaLabel={ariaLabel}\n sticky={sticky}\n stickyOffset={stickyOffset}\n classNames={sidebarClassNames}\n />\n <div className={cn('min-w-0 flex-1', contentClassName)}>{children}</div>\n </div>\n </div>\n );\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var chunkY7Y434UN_cjs=require('./chunk-Y7Y434UN.cjs'),antd=require('antd'),e=require('@emotion/styled');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var e__default=/*#__PURE__*/_interopDefault(e);var i=e__default.default(antd.Avatar)`
|
|
2
2
|
flex: none;
|
|
3
3
|
display: flex;
|
|
4
4
|
align-items: center;
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
background-color: ${o=>o.backgroundColor?o.backgroundColor:"#285E50"};
|
|
7
7
|
padding: ${o=>o.hasImage?0:o.size*.2}px;
|
|
8
8
|
color: #fff;
|
|
9
|
-
`,l=e__default.default(
|
|
9
|
+
`,l=e__default.default(chunkY7Y434UN_cjs.a.Display)`
|
|
10
10
|
color: white;
|
|
11
|
-
`;exports.a=i;exports.b=l;//# sourceMappingURL=chunk-
|
|
12
|
-
//# sourceMappingURL=chunk-
|
|
11
|
+
`;exports.a=i;exports.b=l;//# sourceMappingURL=chunk-FWDL3NH4.cjs.map
|
|
12
|
+
//# sourceMappingURL=chunk-FWDL3NH4.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/Avatar/style.tsx"],"names":["VendorAvatar","styled","Avatar","p","Name","Typography_default"],"mappings":"qOAKO,IAAMA,CAAAA,CAAeC,kBAAAA,CAAOC,WAAM,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAA,EAUlBC,CAAAA,EAAOA,CAAAA,CAAE,eAAA,CAAkBA,CAAAA,CAAE,gBAAkB,SAAU,CAAA;AAAA,WAAA,EAClEA,GAAOA,CAAAA,CAAE,QAAA,CAAW,CAAA,CAAIA,CAAAA,CAAE,KAAO,EAAI,CAAA;AAAA;AAAA,CAAA,CAItCC,CAAAA,CAAOH,kBAAAA,CAAOI,mBAAAA,CAAW,OAAO,CAAA;AAAA","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/Avatar/style.tsx"],"names":["VendorAvatar","styled","Avatar","p","Name","Typography_default"],"mappings":"qOAKO,IAAMA,CAAAA,CAAeC,kBAAAA,CAAOC,WAAM,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAA,EAUlBC,CAAAA,EAAOA,CAAAA,CAAE,eAAA,CAAkBA,CAAAA,CAAE,gBAAkB,SAAU,CAAA;AAAA,WAAA,EAClEA,GAAOA,CAAAA,CAAE,QAAA,CAAW,CAAA,CAAIA,CAAAA,CAAE,KAAO,EAAI,CAAA;AAAA;AAAA,CAAA,CAItCC,CAAAA,CAAOH,kBAAAA,CAAOI,mBAAAA,CAAW,OAAO,CAAA;AAAA","file":"chunk-FWDL3NH4.cjs","sourcesContent":["import { Avatar } from 'antd';\nimport styled from '@emotion/styled';\nimport Typography from '../Typography';\nimport { UserTypes } from '.';\n\nexport const VendorAvatar = styled(Avatar)<{\n type?: UserTypes;\n size: number;\n hasImage?: boolean;\n backgroundColor?: string;\n}>`\n flex: none;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: ${(p) => (p.backgroundColor ? p.backgroundColor : '#285E50')};\n padding: ${(p) => (p.hasImage ? 0 : p.size * 0.2)}px;\n color: #fff;\n`;\n\nexport const Name = styled(Typography.Display)`\n color: white;\n`;\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {b
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {b,a,d,c}from'./chunk-KJ7WKKNI.js';import {b as b$1,a as a$1}from'./chunk-RGT3EDAB.js';import {useState,useMemo}from'react';import {jsxs,jsx}from'react/jsx-runtime';var h=({previewOnly:c$1=false,format:e,onAccept:d$1=void 0,...a$2})=>{let[s,l]=useState(false),k=a$2?.status==="error",t=["SSN"].some(y=>y===e),f=useMemo(()=>{switch(e){case "phone":return "(000) 000-0000";case "MBI":return "****-***-****";case "date":return "00/00/0000";case "email":return /^\S*@?\S*$/;case "SSN":return [{mask:s?"000-00-0000":"XXX-XX-XXXX",definitions:{X:{mask:"0",displayChar:"\u25CF"}},lazy:true,overwrite:"shift"}];case "SSN":return "00000";case "currency":return [{mask:"$num",lazy:false,blocks:{num:{mask:Number,scale:2,thousandsSeparator:",",padFractionalZeros:true,radix:".",mapToRadix:["."]}}}];default:return e}},[e,s]);return jsxs(b,{children:[jsx(a,{format:e,mask:f,unmask:true,onAccept:d$1,disabled:c$1,error:k,...a$2}),!t&&jsx(d,{children:a$2.suffix}),t&&jsx(c,{onClick:()=>l(!s),children:s?jsx(b$1,{}):jsx(a$1,{})})]})},C=h;export{C as a};//# sourceMappingURL=chunk-G5G7LYK3.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-G5G7LYK3.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/Input/Mask/index.tsx"],"names":["Mask","previewOnly","format","onAccept","inputProps","showDigits","setShowDigits","useState","hasError","isHidden","maskName","mask","useMemo","jsxs","MaskWrap","jsx","StyledMaskedInput","SuffixContainer","RevealToggle","OpenEye","ClosedEye","Mask_default"],"mappings":"4KAaA,IAAMA,CAAAA,CAAO,CAAC,CAAE,WAAA,CAAAC,IAAc,KAAA,CAAO,MAAA,CAAAC,EAAQ,QAAA,CAAAC,GAAAA,CAAW,OAAW,GAAGC,GAAW,IAAiB,CAChG,GAAM,CAACC,CAAAA,CAAYC,CAAa,EAAIC,QAAAA,CAAS,KAAK,EAE5CC,CAAAA,CAAWJ,GAAAA,EAAY,SAAW,OAAA,CAElCK,CAAAA,CADmB,MAAe,CAAA,CACN,IAAA,CAAMC,GAAaA,CAAAA,GAAaR,CAAM,EAElES,CAAAA,CAAOC,OAAAA,CAAQ,IAAM,CACzB,OAAQV,GACN,KAAA,OAAA,CACE,OAAO,gBAAA,CACT,KAAA,KAAA,CACE,OAAO,eAAA,CACT,KAAA,MAAA,CACE,OAAO,YAAA,CACT,KAAA,OAAA,CACE,OAAO,YAAA,CACT,KAAA,KAAA,CACE,OAAO,CACL,CACE,KAAMG,CAAAA,CAAa,aAAA,CAAgB,cACnC,WAAA,CAAa,CACX,EAAG,CACD,IAAA,CAAM,IACN,WAAA,CAAa,QACf,CACF,CAAA,CACA,IAAA,CAAM,KACN,SAAA,CAAW,OACb,CACF,CAAA,CACF,KAAA,KAAA,CACE,OAAO,OAAA,CACT,KAAA,UAAA,CACE,OAAO,CACL,CACE,KAAM,MAAA,CACN,IAAA,CAAM,MACN,MAAA,CAAQ,CACN,IAAK,CACH,IAAA,CAAM,OACN,KAAA,CAAO,CAAA,CACP,mBAAoB,GAAA,CACpB,kBAAA,CAAoB,KACpB,KAAA,CAAO,GAAA,CACP,WAAY,CAAC,GAAG,CAClB,CACF,CACF,CACF,CAAA,CACF,QACE,OAAOH,CACX,CACF,EAAG,CAACA,CAAAA,CAAQG,CAAU,CAAC,CAAA,CACvB,OACEQ,IAAAA,CAACC,CAAAA,CAAA,CACC,QAAA,CAAA,CAAAC,GAAAA,CAACC,EAAA,CAEC,MAAA,CAAQd,EAER,IAAA,CAAMS,CAAAA,CACN,OAAM,IAAA,CACN,QAAA,CAAUR,IACV,QAAA,CAAUF,GAAAA,CACV,MAAOO,CAAAA,CACN,GAAGJ,IACN,CAAA,CACC,CAACK,GAAYM,GAAAA,CAACE,CAAAA,CAAA,CAAiB,QAAA,CAAAb,GAAAA,CAAW,OAAO,CAAA,CACjDK,CAAAA,EACCM,IAACG,CAAAA,CAAA,CAAa,QAAS,IAAMZ,CAAAA,CAAc,CAACD,CAAU,CAAA,CACnD,SAAAA,CAAAA,CAAaU,GAAAA,CAACI,IAAA,EAAQ,CAAA,CAAKJ,IAACK,GAAAA,CAAA,EAAU,EACzC,CAAA,CAAA,CAEJ,CAEJ,EACOC,CAAAA,CAAQrB","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/Input/Mask/index.tsx"],"names":["Mask","previewOnly","format","onAccept","inputProps","showDigits","setShowDigits","useState","hasError","isHidden","maskName","mask","useMemo","jsxs","MaskWrap","jsx","StyledMaskedInput","SuffixContainer","RevealToggle","OpenEye","ClosedEye","Mask_default"],"mappings":"4KAaA,IAAMA,CAAAA,CAAO,CAAC,CAAE,WAAA,CAAAC,IAAc,KAAA,CAAO,MAAA,CAAAC,EAAQ,QAAA,CAAAC,GAAAA,CAAW,OAAW,GAAGC,GAAW,IAAiB,CAChG,GAAM,CAACC,CAAAA,CAAYC,CAAa,EAAIC,QAAAA,CAAS,KAAK,EAE5CC,CAAAA,CAAWJ,GAAAA,EAAY,SAAW,OAAA,CAElCK,CAAAA,CADmB,MAAe,CAAA,CACN,IAAA,CAAMC,GAAaA,CAAAA,GAAaR,CAAM,EAElES,CAAAA,CAAOC,OAAAA,CAAQ,IAAM,CACzB,OAAQV,GACN,KAAA,OAAA,CACE,OAAO,gBAAA,CACT,KAAA,KAAA,CACE,OAAO,eAAA,CACT,KAAA,MAAA,CACE,OAAO,YAAA,CACT,KAAA,OAAA,CACE,OAAO,YAAA,CACT,KAAA,KAAA,CACE,OAAO,CACL,CACE,KAAMG,CAAAA,CAAa,aAAA,CAAgB,cACnC,WAAA,CAAa,CACX,EAAG,CACD,IAAA,CAAM,IACN,WAAA,CAAa,QACf,CACF,CAAA,CACA,IAAA,CAAM,KACN,SAAA,CAAW,OACb,CACF,CAAA,CACF,KAAA,KAAA,CACE,OAAO,OAAA,CACT,KAAA,UAAA,CACE,OAAO,CACL,CACE,KAAM,MAAA,CACN,IAAA,CAAM,MACN,MAAA,CAAQ,CACN,IAAK,CACH,IAAA,CAAM,OACN,KAAA,CAAO,CAAA,CACP,mBAAoB,GAAA,CACpB,kBAAA,CAAoB,KACpB,KAAA,CAAO,GAAA,CACP,WAAY,CAAC,GAAG,CAClB,CACF,CACF,CACF,CAAA,CACF,QACE,OAAOH,CACX,CACF,EAAG,CAACA,CAAAA,CAAQG,CAAU,CAAC,CAAA,CACvB,OACEQ,IAAAA,CAACC,CAAAA,CAAA,CACC,QAAA,CAAA,CAAAC,GAAAA,CAACC,EAAA,CAEC,MAAA,CAAQd,EAER,IAAA,CAAMS,CAAAA,CACN,OAAM,IAAA,CACN,QAAA,CAAUR,IACV,QAAA,CAAUF,GAAAA,CACV,MAAOO,CAAAA,CACN,GAAGJ,IACN,CAAA,CACC,CAACK,GAAYM,GAAAA,CAACE,CAAAA,CAAA,CAAiB,QAAA,CAAAb,GAAAA,CAAW,OAAO,CAAA,CACjDK,CAAAA,EACCM,IAACG,CAAAA,CAAA,CAAa,QAAS,IAAMZ,CAAAA,CAAc,CAACD,CAAU,CAAA,CACnD,SAAAA,CAAAA,CAAaU,GAAAA,CAACI,IAAA,EAAQ,CAAA,CAAKJ,IAACK,GAAAA,CAAA,EAAU,EACzC,CAAA,CAAA,CAEJ,CAEJ,EACOC,CAAAA,CAAQrB","file":"chunk-G5G7LYK3.js","sourcesContent":["import { InputProps } from 'antd';\nimport { useMemo, useState } from 'react';\nimport { FormatType } from '../../Form/types';\nimport { SuffixContainer, MaskWrap, RevealToggle, StyledMaskedInput } from './style';\nimport { ClosedEye, OpenEye } from '../shared/icons';\n\ntype MaskProps = {\n previewOnly?: boolean;\n format: FormatType | string;\n onAccept?: (value: string) => void;\n} & InputProps;\n\n/** @deprecated Use the Input component from @solace-health/ui/v2 instead. */\nconst Mask = ({ previewOnly = false, format, onAccept = undefined, ...inputProps }: MaskProps) => {\n const [showDigits, setShowDigits] = useState(false);\n\n const hasError = inputProps?.status === 'error';\n const hiddenDigitMasks = [FormatType.SSN];\n const isHidden = hiddenDigitMasks.some((maskName) => maskName === format);\n\n const mask = useMemo(() => {\n switch (format) {\n case FormatType.Phone:\n return '(000) 000-0000';\n case FormatType.MBI:\n return '****-***-****';\n case FormatType.Date:\n return '00/00/0000';\n case FormatType.Email:\n return /^\\S*@?\\S*$/;\n case FormatType.SSN:\n return [\n {\n mask: showDigits ? '000-00-0000' : 'XXX-XX-XXXX',\n definitions: {\n X: {\n mask: '0',\n displayChar: '●',\n },\n },\n lazy: true,\n overwrite: 'shift',\n },\n ];\n case FormatType.Zip:\n return '00000';\n case FormatType.Currency:\n return [\n {\n mask: '$num',\n lazy: false,\n blocks: {\n num: {\n mask: Number,\n scale: 2,\n thousandsSeparator: ',',\n padFractionalZeros: true,\n radix: '.',\n mapToRadix: ['.'],\n },\n },\n },\n ];\n default:\n return format;\n }\n }, [format, showDigits]);\n return (\n <MaskWrap>\n <StyledMaskedInput\n // @ts-expect-error weird mask type error\n format={format}\n // @ts-expect-error weird mask type error\n mask={mask}\n unmask\n onAccept={onAccept}\n disabled={previewOnly}\n error={hasError}\n {...inputProps}\n />\n {!isHidden && <SuffixContainer>{inputProps.suffix}</SuffixContainer>}\n {isHidden && (\n <RevealToggle onClick={() => setShowDigits(!showDigits)}>\n {showDigits ? <OpenEye /> : <ClosedEye />}\n </RevealToggle>\n )}\n </MaskWrap>\n );\n};\nexport default Mask;\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {a as a$4,d,c as c$1,g,i}from'./chunk-MGE3NPBN.js';import {a as a$3}from'./chunk-WEDRHQPW.js';import {a as a$2,b,c}from'./chunk-QXJK4OO3.js';import {a as a$1,b as b$3}from'./chunk-7QWN4Z56.js';import {b as b$2}from'./chunk-SFZYM6JO.js';import {b as b$1}from'./chunk-6ZOLJV4E.js';import {a}from'./chunk-YTIIAU4W.js';import {useState,useRef,useEffect,useMemo}from'react';import {LuCalendar,LuZoomOut,LuZoomIn,LuRefreshCcw}from'react-icons/lu';import M from'dayjs';import Te from'dayjs/plugin/customParseFormat.js';import {useIMask}from'react-imask';import {isMatch}from'react-day-picker';import {jsxs,jsx}from'react/jsx-runtime';import ve from'react-easy-crop';import {DateTime,Duration}from'luxon';function fe(a){let o=a.replace(/\D/g,"").slice(0,8);return o.length<=2?o:o.length<=4?`${o.slice(0,2)}/${o.slice(2)}`:`${o.slice(0,2)}/${o.slice(2,4)}/${o.slice(4)}`}function ge(a){if(a.length!==10)return;let o=a.split("/");if(o.length!==3||o[2].length!==4)return;let e=parseInt(o[0],10),n=parseInt(o[1],10),t=parseInt(o[2],10);if(Number.isNaN(e)||Number.isNaN(n)||Number.isNaN(t))return;let l=new Date(t,e-1,n);if(!(l.getFullYear()!==t||l.getMonth()!==e-1||l.getDate()!==n))return l}function De({className:a$3,wrapperClassName:o,value:e,onChange:n,disabled:t=false,calendarProps:l,placeholder:b$3="MM/DD/YYYY",variant:g}){let[c$1,u]=useState(false),[v,h]=useState(e),[I,i]=useState(e?M(e).format("MM/DD/YYYY"):""),s=useRef(e?M(e).format("MM/DD/YYYY"):"");useEffect(()=>{let r=e?M(e).format("MM/DD/YYYY"):"";r!==s.current&&(s.current=r,i(r),e&&h(e));},[e]);let D=r=>{let f=fe(r.target.value);i(f);let T=ge(f);T?(s.current=f,n?.(T)):f===""&&(s.current="",n?.(void 0));},d=r=>{r.key==="ArrowDown"&&(r.preventDefault(),u(true)),!/[0-9/]/.test(r.key)&&!["Backspace","Delete","ArrowLeft","ArrowRight","ArrowUp","Tab"].includes(r.key)&&!r.metaKey&&!r.ctrlKey&&r.preventDefault();};return jsxs("div",{className:a("relative w-full",o),children:[jsx("input",{type:"text","data-slot":"input",className:a(a$1({variant:g}),"pr-10",a$3),value:I,placeholder:b$3,onChange:D,onKeyDown:d,disabled:t}),jsxs(a$2,{open:!t&&c$1,onOpenChange:u,children:[jsx(b,{asChild:true,children:jsx(b$1,{variant:"ghost-icon",size:"sm",className:"absolute top-1/2 right-1 -translate-y-1/2",disabled:t,"aria-label":"Select date",type:"button",children:jsx(LuCalendar,{})})}),jsx(c,{className:"w-auto overflow-hidden p-0",align:"end",sideOffset:10,children:jsx(b$2,{mode:"single",selected:e,month:v,onMonthChange:h,onSelect:r=>{let f=r?M(r).format("MM/DD/YYYY"):"";s.current=f,i(f),n?.(r),u(false);},...l})})]})]})}var Pe=({alt:a$1,className:o="",containerClassName:e="",imagePreview:n=void 0,cropper:t=void 0})=>{let[l,b]=useState(false),g=!n||!l,c=!!t;return jsxs("div",{className:a("flex max-w-[386px] flex-col",o),children:[jsxs("div",{className:a("relative h-60 rounded-md border",e),children:[n&&c?jsx(ve,{image:n,crop:t.crop,zoom:t.zoom,aspect:t.aspect,objectFit:"contain",onCropChange:t.setCrop,onZoomChange:t.setZoom,onCropComplete:t.onCropComplete,onMediaLoaded:()=>b(true),showGrid:false}):n&&jsx("img",{alt:a$1,className:`m-auto h-full w-full object-contain transition-opacity duration-300 ${l?"opacity-100":"opacity-0"}`,src:n,onLoad:()=>b(true),draggable:false}),g&&jsx("div",{"aria-label":n?"Loading image":"Awaiting image",className:"from-grey-300 to-grey-300 absolute inset-0 animate-pulse bg-gradient-to-r"})]}),!g&&c&&jsxs("div",{className:"mt-3 flex flex-col items-center justify-between gap-1 px-1 sm:flex-row sm:gap-4",children:[jsxs("div",{className:"flex w-full items-center gap-3",children:[jsx(b$1,{"aria-label":"zoom out",onClick:()=>t.setZoom(Math.max(t.zoom-.1,1)),className:"h-8",variant:"ghost-icon",children:jsx(LuZoomOut,{})}),jsx(a$3,{value:[t.zoom],min:1,max:3,step:.01,onValueChange:u=>t.setZoom(u[0]),className:"w-full sm:flex-50",classNames:{thumb:"border-2 border-green-800",range:"bg-green-900"}}),jsx(b$1,{"aria-label":"zoom in",onClick:()=>t.setZoom(Math.min(t.zoom+.1,3)),variant:"ghost-icon",className:"h-8",children:jsx(LuZoomIn,{})})]}),jsxs(b$1,{onClick:t.reset,variant:"ghost",className:"h-8 p-2",children:[jsx(LuRefreshCcw,{}),"Reset"]})]})]})};var W="00:00",ee="24:00",te=a=>DateTime.fromFormat(a,"HH:mm").isValid,oe=({startTime:a$1=W,endTime:o=ee,interval:e=30,onChange:n=void 0,className:t="",placeholder:l="Select one",size:b="default",portal:g$1=true,triggerIcon:c,getSublabel:u,...v})=>{te(a$1)||(console.error(`Invalid startTime: ${a$1}`),a$1=W),te(o)||(console.error(`Invalid endTime: ${o}`),o=ee);let h=useMemo(()=>{let i=DateTime.fromFormat(o,"HH:mm"),s=Duration.fromObject({minutes:e}),D=[],d=DateTime.fromFormat(a$1,"HH:mm");for(;d<=i;){let r=d.toFormat("HH:mm");r==="00:00"&&d.equals(i)&&(r="24:00"),D.push({label:d.toFormat("h:mm a"),value:{hour:d.toFormat("HH"),min:d.toFormat("mm"),raw:r,formatted:d.toFormat("h:mm a")}}),d=d.plus(s);}return D},[a$1,o,e]);return jsxs(a$4,{onValueChange:i=>{let s=h.find(D=>D.value.raw===i);s&&n?.(s);},...v,children:[jsx(d,{className:a("max-w-[240px] md:w-[150px]",t),size:b,triggerIcon:c,children:jsx(c$1,{placeholder:l})}),jsx(g,{position:"popper",className:"max-h-90",portal:g$1,children:h.map(i$1=>{let s=u?.(i$1);return jsx(i,{className:a(s?"h-auto py-2":"h-10"),value:i$1.value.raw,sublabel:s,children:i$1.label},i$1.value.raw)})})]})},Qe=oe;M.extend(Te);var ae="MM/DD/YYYY",Fe="00/00/0000",X=["MM/DD/YYYY","MM/D/YYYY","M/DD/YYYY","M/D/YYYY","YYYY-MM-DD"];function w(a){return a?M(a).format(ae):""}function Me({className:a$3="",wrapperClassName:o="",value:e=void 0,onChange:n=void 0,disabled:t=false,calendarProps:l=void 0,placeholder:b$1,inputProps:g=void 0,showCalendarIcon:c$1=true,editable:u=false}){let[v,h]=useState(false),I=b$1??(u?ae:"Pick a date"),[i,s]=useState(void 0),D=useRef(e);e!==D.current&&(D.current=e,i!==void 0&&s(void 0));let d=i??e,r=p=>l?.disabled?!isMatch(p,l.disabled):true,f=useRef(n);f.current=n;let T=useRef(r);T.current=r;let{ref:q,setValue:B}=useIMask({mask:Fe,lazy:true,overwrite:false},{onComplete:p=>{let C=M(p,X,true);C.isValid()&&T.current(C.toDate())&&f.current?.(C.toDate());}}),ie=p=>{n?.(p),B(w(p)),h(false);},se=p=>{let C=p.clipboardData.getData("text").trim(),L=M(C,X,true);if(L.isValid()&&r(L.toDate())){p.preventDefault();let J=L.toDate();n?.(J),B(w(J));}},pe=()=>{B(w(e));},le=()=>{let p=q.current?.value??"";if(p===""){e!==void 0&&n?.(void 0);return}let C=M(p,X,true);C.isValid()&&r(C.toDate())&&n?.(C.toDate()),B(w(e));},me=a(a$1(),c$1&&"pl-10",v?"border-dark-green":"",a$3);return jsxs(a$2,{open:!t&&v,onOpenChange:h,children:[jsx(b,{asChild:true,children:jsxs("div",{className:a("relative flex w-full items-center rounded-md",o),children:[u?jsx("input",{ref:q,defaultValue:w(e),className:me,placeholder:I,disabled:t,onFocus:pe,onPaste:se,onBlur:p=>{le(),g?.onBlur?.(p);}}):jsx(b$3,{className:a(c$1&&"pl-10",v?"border-dark-green":"",a$3),...g,value:w(e),placeholder:I,readOnly:true,disabled:t}),c$1&&jsx("div",{className:a("absolute top-1/2 left-4 h-4 w-4 -translate-y-1/2",t?"text-gray-400":"cursor-pointer text-black"),children:jsx(LuCalendar,{size:16})})]})}),jsx(c,{className:"w-auto overflow-hidden p-0",align:"start",onOpenAutoFocus:u?p=>p.preventDefault():void 0,children:jsx(b$2,{mode:"single",selected:e?M(e).toDate():void 0,onSelect:ie,...u?{month:d,onMonthChange:s}:{},...l})})]})}export{Me as a,De as b,Pe as c,oe as d,Qe as e};//# sourceMappingURL=chunk-GW4NIANM.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-GW4NIANM.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/v2/date-picker/date-picker-input.tsx","../src/v2/image-preview/image-preview.tsx","../src/v2/time-select/time-select.tsx","../src/v2/date-picker/date-picker.tsx"],"names":["maskDate","value","digits","parseDate","parts","month","day","year","date","DatePickerInput","className","wrapperClassName","onChange","disabled","calendarProps","placeholder","variant","open","setOpen","useState","setMonth","inputValue","setInputValue","dayjs","lastSyncedRef","useRef","useEffect","formatted","handleInputChange","e","masked","parsed","handleKeyDown","jsxs","cn","jsx","inputVariants","Popover","PopoverTrigger","Button","LuCalendar","PopoverContent","Calendar","d","ImagePreview","alt","containerClassName","imagePreview","cropper","loaded","setLoaded","showLoader","enableCrop","Cropper","LuZoomOut","Slider","v","LuZoomIn","LuRefreshCcw","START_TIME_DEFAULT","END_TIME_DEFAULT","isValidTime","time","DateTime","TimeSelect","startTime","endTime","interval","size","portal","triggerIcon","getSublabel","inputProps","intervals","useMemo","dtEnd","durationInterval","Duration","res","i","raw","Select","SelectTrigger","SelectValue","SelectContent","sublabel","SelectItem","time_select_default","customParseFormat","DISPLAY_FORMAT","INPUT_MASK","ACCEPTED_INPUT_FORMATS","formatDate","DatePicker","placeholderProp","showCalendarIcon","editable","navigatedMonth","setNavigatedMonth","prevValueForMonth","calendarMonth","isDateAllowed","isMatch","onChangeRef","isDateAllowedRef","maskRef","setMaskValue","useIMask","maskedValue","handleSelect","val","handlePaste","pasted","handleFocus","handleBlur","current","inputClasses","Input"],"mappings":"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","file":"chunk-XLNV6ZRJ.js","sourcesContent":["import * as React from 'react';\nimport { ComponentProps, useEffect, useRef, useState } from 'react';\nimport { LuCalendar } from 'react-icons/lu';\nimport dayjs from 'dayjs';\nimport { Calendar, Button, Popover, PopoverContent, PopoverTrigger } from '@/v2';\nimport { cn } from '@/lib/utils';\nimport { inputVariants } from '../input/input';\n\nfunction maskDate(value: string): string {\n const digits = value.replace(/\\D/g, '').slice(0, 8);\n if (digits.length <= 2) return digits;\n if (digits.length <= 4) return `${digits.slice(0, 2)}/${digits.slice(2)}`;\n return `${digits.slice(0, 2)}/${digits.slice(2, 4)}/${digits.slice(4)}`;\n}\n\nfunction parseDate(value: string): Date | undefined {\n if (value.length !== 10) return undefined;\n const parts = value.split('/');\n if (parts.length !== 3 || parts[2].length !== 4) return undefined;\n const month = parseInt(parts[0], 10);\n const day = parseInt(parts[1], 10);\n const year = parseInt(parts[2], 10);\n if (Number.isNaN(month) || Number.isNaN(day) || Number.isNaN(year)) return undefined;\n const date = new Date(year, month - 1, day);\n if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {\n return undefined;\n }\n return date;\n}\n\nexport type DatePickerInputProps = {\n className?: string;\n wrapperClassName?: string;\n value?: Date;\n onChange?: (value: Date | undefined) => void;\n disabled?: boolean;\n calendarProps?: Omit<ComponentProps<typeof Calendar>, 'mode' | 'selected' | 'onSelect'>;\n placeholder?: string;\n variant?: 'default' | 'invalid';\n};\n\nexport function DatePickerInput({\n className,\n wrapperClassName,\n value,\n onChange,\n disabled = false,\n calendarProps,\n placeholder = 'MM/DD/YYYY',\n variant,\n}: DatePickerInputProps) {\n const [open, setOpen] = useState(false);\n const [month, setMonth] = useState<Date | undefined>(value);\n const [inputValue, setInputValue] = useState<string>(\n value ? dayjs(value).format('MM/DD/YYYY') : '',\n );\n // Track the last value we synced from props to avoid overwriting partial user input\n const lastSyncedRef = useRef(value ? dayjs(value).format('MM/DD/YYYY') : '');\n\n useEffect(() => {\n const formatted = value ? dayjs(value).format('MM/DD/YYYY') : '';\n if (formatted !== lastSyncedRef.current) {\n lastSyncedRef.current = formatted;\n setInputValue(formatted);\n if (value) setMonth(value);\n }\n }, [value]);\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const masked = maskDate(e.target.value);\n setInputValue(masked);\n const parsed = parseDate(masked);\n if (parsed) {\n lastSyncedRef.current = masked;\n onChange?.(parsed);\n } else if (masked === '') {\n lastSyncedRef.current = '';\n onChange?.(undefined);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n setOpen(true);\n }\n if (\n !/[0-9/]/.test(e.key) &&\n !['Backspace', 'Delete', 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'Tab'].includes(e.key) &&\n !e.metaKey &&\n !e.ctrlKey\n ) {\n e.preventDefault();\n }\n };\n\n return (\n <div className={cn('relative w-full', wrapperClassName)}>\n <input\n type=\"text\"\n data-slot=\"input\"\n className={cn(inputVariants({ variant }), 'pr-10', className)}\n value={inputValue}\n placeholder={placeholder}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n />\n <Popover open={!disabled && open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"ghost-icon\"\n size=\"sm\"\n className=\"absolute top-1/2 right-1 -translate-y-1/2\"\n disabled={disabled}\n aria-label=\"Select date\"\n type=\"button\"\n >\n <LuCalendar />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto overflow-hidden p-0\" align=\"end\" sideOffset={10}>\n <Calendar\n mode=\"single\"\n selected={value}\n month={month}\n onMonthChange={setMonth}\n onSelect={(d) => {\n const formatted = d ? dayjs(d).format('MM/DD/YYYY') : '';\n lastSyncedRef.current = formatted;\n setInputValue(formatted);\n onChange?.(d);\n setOpen(false);\n }}\n {...calendarProps}\n />\n </PopoverContent>\n </Popover>\n </div>\n );\n}\n","import { useState } from 'react';\nimport { LuRefreshCcw, LuZoomIn, LuZoomOut } from 'react-icons/lu';\nimport Cropper from 'react-easy-crop';\nimport { Button, Slider } from '../index';\nimport type { UseImageCropper } from './useImageCropper';\nimport { cn } from '@/lib/utils';\n\nexport type ImagePreviewProps = {\n alt: string;\n className?: string;\n containerClassName?: string;\n imagePreview?: string; // optional so we can show skeleton while awaiting URL\n cropper?: UseImageCropper; // when provided, show cropping UI\n};\n\nexport const ImagePreview = ({\n alt,\n className = '',\n containerClassName = '',\n imagePreview = undefined,\n cropper = undefined,\n}: ImagePreviewProps) => {\n const [loaded, setLoaded] = useState(false);\n const showLoader = !imagePreview || !loaded;\n const enableCrop = !!cropper;\n\n return (\n <div className={cn(`flex max-w-[386px] flex-col`, className)}>\n <div className={cn('relative h-60 rounded-md border', containerClassName)}>\n {imagePreview && enableCrop ? (\n <Cropper\n image={imagePreview}\n crop={cropper.crop}\n zoom={cropper.zoom}\n aspect={cropper.aspect}\n objectFit=\"contain\"\n onCropChange={cropper.setCrop}\n onZoomChange={cropper.setZoom}\n onCropComplete={cropper.onCropComplete}\n onMediaLoaded={() => setLoaded(true)}\n showGrid={false}\n />\n ) : (\n imagePreview && (\n <img\n alt={alt}\n className={`m-auto h-full w-full object-contain transition-opacity duration-300 ${loaded ? 'opacity-100' : 'opacity-0'}`}\n src={imagePreview}\n onLoad={() => setLoaded(true)}\n draggable={false}\n />\n )\n )}\n\n {showLoader && (\n <div\n aria-label={imagePreview ? 'Loading image' : 'Awaiting image'}\n className=\"from-grey-300 to-grey-300 absolute inset-0 animate-pulse bg-gradient-to-r\"\n />\n )}\n </div>\n\n {!showLoader && enableCrop && (\n <div className=\"mt-3 flex flex-col items-center justify-between gap-1 px-1 sm:flex-row sm:gap-4\">\n <div className=\"flex w-full items-center gap-3\">\n <Button\n aria-label=\"zoom out\"\n onClick={() => cropper.setZoom(Math.max(cropper.zoom - 0.1, 1))}\n className=\"h-8\"\n variant=\"ghost-icon\"\n >\n <LuZoomOut />\n </Button>\n\n <Slider\n value={[cropper.zoom]}\n min={1}\n max={3}\n step={0.01}\n onValueChange={(v: number[]) => cropper.setZoom(v[0])}\n className=\"w-full sm:flex-50\"\n classNames={{ thumb: 'border-2 border-green-800', range: 'bg-green-900' }}\n />\n\n <Button\n aria-label=\"zoom in\"\n onClick={() => cropper.setZoom(Math.min(cropper.zoom + 0.1, 3))}\n variant=\"ghost-icon\"\n className=\"h-8\"\n >\n <LuZoomIn />\n </Button>\n </div>\n\n <Button onClick={cropper.reset} variant=\"ghost\" className=\"h-8 p-2\">\n <LuRefreshCcw />\n Reset\n </Button>\n </div>\n )}\n </div>\n );\n};\n","import { DateTime, Duration } from 'luxon';\nimport { useMemo } from 'react';\nimport type { ReactElement, ReactNode } from 'react';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/v2';\nimport { cn } from '@/lib/utils';\n\nexport type Interval = {\n label: string;\n value: {\n hour: string;\n min: string;\n raw: string;\n formatted: string;\n };\n};\n\ntype Props = {\n startTime?: string;\n endTime?: string;\n interval?: number;\n onChange?: (e: Interval) => void;\n className?: string;\n placeholder?: string;\n size?: 'default' | 'sm';\n portal?: boolean;\n triggerIcon?: ReactElement;\n getSublabel?: (interval: Interval) => ReactNode;\n [inputProps: string]: unknown;\n};\n\nconst START_TIME_DEFAULT = '00:00';\nconst END_TIME_DEFAULT = '24:00';\n\nconst isValidTime = (time: string) => {\n const dt = DateTime.fromFormat(time, 'HH:mm');\n return dt.isValid;\n};\n\nexport const TimeSelect = ({\n startTime = START_TIME_DEFAULT,\n endTime = END_TIME_DEFAULT,\n interval = 30,\n onChange = undefined,\n className = '',\n placeholder = 'Select one',\n size = 'default',\n portal = true,\n triggerIcon,\n getSublabel,\n ...inputProps\n}: Props) => {\n if (!isValidTime(startTime)) {\n console.error(`Invalid startTime: ${startTime}`);\n // eslint-disable-next-line no-param-reassign\n startTime = START_TIME_DEFAULT;\n }\n if (!isValidTime(endTime)) {\n console.error(`Invalid endTime: ${endTime}`);\n // eslint-disable-next-line no-param-reassign\n endTime = END_TIME_DEFAULT;\n }\n\n const intervals = useMemo((): Interval[] => {\n const dtEnd = DateTime.fromFormat(endTime, 'HH:mm');\n const durationInterval = Duration.fromObject({ minutes: interval });\n const res = [];\n let i = DateTime.fromFormat(startTime, 'HH:mm');\n while (i <= dtEnd) {\n let raw = i.toFormat('HH:mm');\n // Avoid duplicate keys for \"00:00\" and \"00:00\" (end of day)\n if (raw === '00:00' && i.equals(dtEnd)) raw = '24:00';\n\n res.push({\n label: i.toFormat('h:mm a'),\n value: {\n hour: i.toFormat('HH'),\n min: i.toFormat('mm'),\n raw,\n formatted: i.toFormat('h:mm a'),\n },\n });\n i = i.plus(durationInterval);\n }\n\n return res;\n }, [startTime, endTime, interval]);\n\n const handleOnSelect = (e: unknown) => {\n const interval = intervals.find((time) => time.value.raw === e);\n\n if (!interval) return;\n\n onChange?.(interval);\n };\n\n return (\n <Select onValueChange={handleOnSelect} {...inputProps}>\n <SelectTrigger\n className={cn('max-w-[240px] md:w-[150px]', className)}\n size={size}\n triggerIcon={triggerIcon}\n >\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n <SelectContent position=\"popper\" className=\"max-h-90\" portal={portal}>\n {intervals.map((time) => {\n const sublabel = getSublabel?.(time);\n return (\n <SelectItem\n className={cn(sublabel ? 'h-auto py-2' : 'h-10')}\n key={time.value.raw}\n value={time.value.raw}\n sublabel={sublabel}\n >\n {time.label}\n </SelectItem>\n );\n })}\n </SelectContent>\n </Select>\n );\n};\n\nexport default TimeSelect;\n","import { ComponentProps, useRef, useState } from 'react';\nimport { LuCalendar } from 'react-icons/lu';\nimport dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat.js';\nimport { useIMask } from 'react-imask';\nimport { isMatch } from 'react-day-picker';\nimport { Calendar, Input, Popover, PopoverContent, PopoverTrigger } from '@/v2';\nimport { cn } from '@/lib/utils';\nimport { inputVariants } from '@/v2/input/input';\nimport type { InputProps } from '@/v2/input/input';\n\ndayjs.extend(customParseFormat);\n\n/** Display and input format for dates. Also used as the placeholder when `editable` is true. */\nconst DISPLAY_FORMAT = 'MM/DD/YYYY';\n\n/** IMask pattern — each `0` is a required digit, slashes are fixed literals. */\nconst INPUT_MASK = '00/00/0000';\n\n/**\n * Formats accepted when parsing typed or pasted input (dayjs strict mode).\n * Ordered from most specific to least specific to avoid ambiguous matches.\n */\nconst ACCEPTED_INPUT_FORMATS = ['MM/DD/YYYY', 'MM/D/YYYY', 'M/DD/YYYY', 'M/D/YYYY', 'YYYY-MM-DD'];\n\nexport type DatePickerProps = {\n /** Additional class name(s) applied to the input element. */\n className?: string;\n /** Additional class name(s) applied to the outer popover trigger wrapper. */\n wrapperClassName?: string;\n /** The currently selected date. `undefined` means no date is selected. */\n value?: Date;\n /** Called when the selected date changes. Receives `undefined` when the date is cleared. */\n onChange?: (value: Date | undefined) => void;\n /** When `true`, the picker is non-interactive. */\n disabled?: boolean;\n /**\n * Props forwarded to the underlying `Calendar` component (react-day-picker).\n * Use `disabled` within this object to restrict selectable dates — these\n * constraints apply to both calendar clicks and typed input when `editable` is `true`.\n *\n * @example\n * ```tsx\n * <DatePicker calendarProps={{ disabled: [{ before: new Date() }] }} />\n * ```\n */\n calendarProps?: Omit<ComponentProps<typeof Calendar>, 'mode' | 'selected' | 'onSelect'>;\n /**\n * Input placeholder text. Defaults to `\"Pick a date\"` in read-only mode\n * and `\"MM/DD/YYYY\"` when `editable` is `true`.\n */\n placeholder?: string;\n /** Props forwarded to the underlying `Input` component. */\n inputProps?: InputProps;\n /** Whether to show the calendar icon inside the input. @default true */\n showCalendarIcon?: boolean;\n /**\n * When `true`, the input accepts typed and pasted dates in `MM/DD/YYYY` format.\n * Slashes are auto-inserted, non-numeric characters are rejected, and common\n * formats like `M/D/YYYY` and `YYYY-MM-DD` are accepted on paste.\n * Dates that fall in `calendarProps.disabled` ranges are rejected.\n *\n * When `false` (default), the input is read-only and dates can only be\n * selected via the calendar popover.\n *\n * @default false\n */\n editable?: boolean;\n};\n\nfunction formatDate(date: Date | undefined): string {\n return date ? dayjs(date).format(DISPLAY_FORMAT) : '';\n}\n\n/**\n * A date picker that combines a text input with a calendar popover.\n *\n * By default the input is read-only — dates are selected via the calendar.\n * Set `editable` to allow typing or pasting dates in `MM/DD/YYYY` format.\n */\nexport function DatePicker({\n className = '',\n wrapperClassName = '',\n value = undefined,\n onChange = undefined,\n disabled = false,\n calendarProps = undefined,\n placeholder: placeholderProp,\n inputProps = undefined,\n showCalendarIcon = true,\n editable = false,\n}: DatePickerProps) {\n const [open, setOpen] = useState(false);\n const placeholder = placeholderProp ?? (editable ? DISPLAY_FORMAT : 'Pick a date');\n\n // Calendar month: derived from value, with user navigation override.\n // When value changes, navigation resets to the new value's month.\n const [navigatedMonth, setNavigatedMonth] = useState<Date | undefined>(undefined);\n const prevValueForMonth = useRef(value);\n if (value !== prevValueForMonth.current) {\n prevValueForMonth.current = value;\n if (navigatedMonth !== undefined) {\n setNavigatedMonth(undefined);\n }\n }\n const calendarMonth = navigatedMonth ?? value;\n\n const isDateAllowed = (date: Date): boolean => {\n if (!calendarProps?.disabled) {\n return true;\n }\n return !isMatch(date, calendarProps.disabled);\n };\n\n // Refs ensure IMask callbacks always see the latest values without re-creating the mask\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n const isDateAllowedRef = useRef(isDateAllowed);\n isDateAllowedRef.current = isDateAllowed;\n\n const { ref: maskRef, setValue: setMaskValue } = useIMask<HTMLInputElement>(\n { mask: INPUT_MASK, lazy: true, overwrite: false },\n {\n onComplete: (maskedValue) => {\n const parsed = dayjs(maskedValue, ACCEPTED_INPUT_FORMATS, true);\n if (parsed.isValid() && isDateAllowedRef.current(parsed.toDate())) {\n onChangeRef.current?.(parsed.toDate());\n }\n },\n },\n );\n\n const handleSelect = (val: Date | undefined) => {\n onChange?.(val);\n setMaskValue(formatDate(val));\n setOpen(false);\n };\n\n const handlePaste = (e: React.ClipboardEvent<HTMLInputElement>) => {\n const pasted = e.clipboardData.getData('text').trim();\n const parsed = dayjs(pasted, ACCEPTED_INPUT_FORMATS, true);\n if (parsed.isValid() && isDateAllowed(parsed.toDate())) {\n e.preventDefault();\n const date = parsed.toDate();\n onChange?.(date);\n setMaskValue(formatDate(date));\n }\n // If we can't parse it, let IMask handle it naturally\n };\n\n const handleFocus = () => {\n // Sync the mask to the current value on focus — handles external parent resets\n setMaskValue(formatDate(value));\n };\n\n const handleBlur = () => {\n const current = maskRef.current?.value ?? '';\n if (current === '') {\n if (value !== undefined) {\n onChange?.(undefined);\n }\n return;\n }\n const parsed = dayjs(current, ACCEPTED_INPUT_FORMATS, true);\n if (parsed.isValid() && isDateAllowed(parsed.toDate())) {\n onChange?.(parsed.toDate());\n }\n // Revert to last valid display value\n setMaskValue(formatDate(value));\n };\n\n const inputClasses = cn(\n inputVariants(),\n showCalendarIcon && 'pl-10',\n open ? 'border-dark-green' : '',\n className,\n );\n\n return (\n <Popover open={!disabled && open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <div className={cn('relative flex w-full items-center rounded-md', wrapperClassName)}>\n {editable ? (\n <input\n ref={maskRef}\n defaultValue={formatDate(value)}\n className={inputClasses}\n placeholder={placeholder}\n disabled={disabled}\n onFocus={handleFocus}\n onPaste={handlePaste}\n onBlur={(e) => {\n handleBlur();\n inputProps?.onBlur?.(e);\n }}\n />\n ) : (\n <Input\n className={cn(\n showCalendarIcon && 'pl-10',\n open ? 'border-dark-green' : '',\n className,\n )}\n {...inputProps}\n value={formatDate(value)}\n placeholder={placeholder}\n readOnly\n disabled={disabled}\n />\n )}\n {showCalendarIcon && (\n <div\n className={cn(\n 'absolute top-1/2 left-4 h-4 w-4 -translate-y-1/2',\n disabled ? 'text-gray-400' : 'cursor-pointer text-black',\n )}\n >\n <LuCalendar size={16} />\n </div>\n )}\n </div>\n </PopoverTrigger>\n <PopoverContent\n className=\"w-auto overflow-hidden p-0\"\n align=\"start\"\n onOpenAutoFocus={editable ? (e) => e.preventDefault() : undefined}\n >\n <Calendar\n mode=\"single\"\n selected={value ? dayjs(value).toDate() : undefined}\n onSelect={handleSelect}\n {...(editable ? { month: calendarMonth, onMonthChange: setNavigatedMonth } : {})}\n {...calendarProps}\n />\n </PopoverContent>\n </Popover>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/v2/date-picker/date-picker-input.tsx","../src/v2/image-preview/image-preview.tsx","../src/v2/time-select/time-select.tsx","../src/v2/date-picker/date-picker.tsx"],"names":["maskDate","value","digits","parseDate","parts","month","day","year","date","DatePickerInput","className","wrapperClassName","onChange","disabled","calendarProps","placeholder","variant","open","setOpen","useState","setMonth","inputValue","setInputValue","dayjs","lastSyncedRef","useRef","useEffect","formatted","handleInputChange","e","masked","parsed","handleKeyDown","jsxs","cn","jsx","inputVariants","Popover","PopoverTrigger","Button","LuCalendar","PopoverContent","Calendar","d","ImagePreview","alt","containerClassName","imagePreview","cropper","loaded","setLoaded","showLoader","enableCrop","Cropper","LuZoomOut","Slider","v","LuZoomIn","LuRefreshCcw","START_TIME_DEFAULT","END_TIME_DEFAULT","isValidTime","time","DateTime","TimeSelect","startTime","endTime","interval","size","portal","triggerIcon","getSublabel","inputProps","intervals","useMemo","dtEnd","durationInterval","Duration","res","i","raw","Select","SelectTrigger","SelectValue","SelectContent","sublabel","SelectItem","time_select_default","customParseFormat","DISPLAY_FORMAT","INPUT_MASK","ACCEPTED_INPUT_FORMATS","formatDate","DatePicker","placeholderProp","showCalendarIcon","editable","navigatedMonth","setNavigatedMonth","prevValueForMonth","calendarMonth","isDateAllowed","isMatch","onChangeRef","isDateAllowedRef","maskRef","setMaskValue","useIMask","maskedValue","handleSelect","val","handlePaste","pasted","handleFocus","handleBlur","current","inputClasses","Input"],"mappings":"gsBAQA,SAASA,EAAAA,CAASC,CAAAA,CAAuB,CACvC,IAAMC,CAAAA,CAASD,EAAM,OAAA,CAAQ,KAAA,CAAO,EAAE,CAAA,CAAE,KAAA,CAAM,EAAG,CAAC,CAAA,CAClD,OAAIC,CAAAA,CAAO,MAAA,EAAU,EAAUA,CAAAA,CAC3BA,CAAAA,CAAO,QAAU,CAAA,CAAU,CAAA,EAAGA,CAAAA,CAAO,KAAA,CAAM,EAAG,CAAC,CAAC,IAAIA,CAAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,CAChE,GAAGA,CAAAA,CAAO,KAAA,CAAM,EAAG,CAAC,CAAC,IAAIA,CAAAA,CAAO,KAAA,CAAM,EAAG,CAAC,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAO,MAAM,CAAC,CAAC,EACvE,CAEA,SAASC,GAAUF,CAAAA,CAAiC,CAClD,GAAIA,CAAAA,CAAM,MAAA,GAAW,GAAI,OACzB,IAAMG,EAAQH,CAAAA,CAAM,KAAA,CAAM,GAAG,CAAA,CAC7B,GAAIG,CAAAA,CAAM,MAAA,GAAW,GAAKA,CAAAA,CAAM,CAAC,EAAE,MAAA,GAAW,CAAA,CAAG,OACjD,IAAMC,CAAAA,CAAQ,SAASD,CAAAA,CAAM,CAAC,EAAG,EAAE,CAAA,CAC7BE,EAAM,QAAA,CAASF,CAAAA,CAAM,CAAC,CAAA,CAAG,EAAE,CAAA,CAC3BG,CAAAA,CAAO,SAASH,CAAAA,CAAM,CAAC,EAAG,EAAE,CAAA,CAClC,GAAI,MAAA,CAAO,KAAA,CAAMC,CAAK,CAAA,EAAK,MAAA,CAAO,MAAMC,CAAG,CAAA,EAAK,OAAO,KAAA,CAAMC,CAAI,EAAG,OACpE,IAAMC,CAAAA,CAAO,IAAI,KAAKD,CAAAA,CAAMF,CAAAA,CAAQ,EAAGC,CAAG,CAAA,CAC1C,GAAI,EAAAE,CAAAA,CAAK,aAAY,GAAMD,CAAAA,EAAQC,EAAK,QAAA,EAAS,GAAMH,EAAQ,CAAA,EAAKG,CAAAA,CAAK,SAAQ,GAAMF,CAAAA,CAAAA,CAGvF,OAAOE,CACT,CAaO,SAASC,EAAAA,CAAgB,CAC9B,SAAA,CAAAC,GAAAA,CACA,iBAAAC,CAAAA,CACA,KAAA,CAAAV,EACA,QAAA,CAAAW,CAAAA,CACA,SAAAC,CAAAA,CAAW,KAAA,CACX,cAAAC,CAAAA,CACA,WAAA,CAAAC,IAAc,YAAA,CACd,OAAA,CAAAC,CACF,CAAA,CAAyB,CACvB,GAAM,CAACC,IAAMC,CAAO,CAAA,CAAIC,SAAS,KAAK,CAAA,CAChC,CAACd,CAAAA,CAAOe,CAAQ,EAAID,QAAAA,CAA2BlB,CAAK,EACpD,CAACoB,CAAAA,CAAYC,CAAa,CAAA,CAAIH,QAAAA,CAClClB,CAAAA,CAAQsB,CAAAA,CAAMtB,CAAK,CAAA,CAAE,MAAA,CAAO,YAAY,CAAA,CAAI,EAC9C,EAEMuB,CAAAA,CAAgBC,MAAAA,CAAOxB,EAAQsB,CAAAA,CAAMtB,CAAK,EAAE,MAAA,CAAO,YAAY,EAAI,EAAE,CAAA,CAE3EyB,UAAU,IAAM,CACd,IAAMC,CAAAA,CAAY1B,EAAQsB,CAAAA,CAAMtB,CAAK,EAAE,MAAA,CAAO,YAAY,EAAI,EAAA,CAC1D0B,CAAAA,GAAcH,EAAc,OAAA,GAC9BA,CAAAA,CAAc,QAAUG,CAAAA,CACxBL,CAAAA,CAAcK,CAAS,CAAA,CACnB1B,CAAAA,EAAOmB,EAASnB,CAAK,CAAA,EAE7B,CAAA,CAAG,CAACA,CAAK,CAAC,CAAA,CAEV,IAAM2B,CAAAA,CAAqBC,CAAAA,EAA2C,CACpE,IAAMC,CAAAA,CAAS9B,GAAS6B,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CACtCP,CAAAA,CAAcQ,CAAM,CAAA,CACpB,IAAMC,EAAS5B,EAAAA,CAAU2B,CAAM,CAAA,CAC3BC,CAAAA,EACFP,EAAc,OAAA,CAAUM,CAAAA,CACxBlB,IAAWmB,CAAM,CAAA,EACRD,IAAW,EAAA,GACpBN,CAAAA,CAAc,QAAU,EAAA,CACxBZ,CAAAA,GAAW,MAAS,CAAA,EAExB,CAAA,CAEMoB,EAAiBH,CAAAA,EAA6C,CAC9DA,EAAE,GAAA,GAAQ,WAAA,GACZA,CAAAA,CAAE,cAAA,GACFX,CAAAA,CAAQ,IAAI,GAGZ,CAAC,QAAA,CAAS,KAAKW,CAAAA,CAAE,GAAG,GACpB,CAAC,CAAC,YAAa,QAAA,CAAU,WAAA,CAAa,aAAc,SAAA,CAAW,KAAK,EAAE,QAAA,CAASA,CAAAA,CAAE,GAAG,CAAA,EACpF,CAACA,CAAAA,CAAE,OAAA,EACH,CAACA,CAAAA,CAAE,OAAA,EAEHA,EAAE,cAAA,GAEN,EAEA,OACEI,IAAAA,CAAC,OAAI,SAAA,CAAWC,CAAAA,CAAG,kBAAmBvB,CAAgB,CAAA,CACpD,UAAAwB,GAAAA,CAAC,OAAA,CAAA,CACC,IAAA,CAAK,MAAA,CACL,YAAU,OAAA,CACV,SAAA,CAAWD,EAAGE,GAAAA,CAAc,CAAE,QAAApB,CAAQ,CAAC,EAAG,OAAA,CAASN,GAAS,EAC5D,KAAA,CAAOW,CAAAA,CACP,YAAaN,GAAAA,CACb,QAAA,CAAUa,EACV,SAAA,CAAWI,CAAAA,CACX,QAAA,CAAUnB,CAAAA,CACZ,EACAoB,IAAAA,CAACI,GAAAA,CAAA,CAAQ,IAAA,CAAM,CAACxB,GAAYI,GAAAA,CAAM,YAAA,CAAcC,EAC9C,QAAA,CAAA,CAAAiB,GAAAA,CAACG,EAAA,CAAe,OAAA,CAAO,KACrB,QAAA,CAAAH,GAAAA,CAACI,IAAA,CACC,OAAA,CAAQ,YAAA,CACR,IAAA,CAAK,KACL,SAAA,CAAU,2CAAA,CACV,SAAU1B,CAAAA,CACV,YAAA,CAAW,cACX,IAAA,CAAK,QAAA,CAEL,SAAAsB,GAAAA,CAACK,UAAAA,CAAA,EAAW,CAAA,CACd,CAAA,CACF,EACAL,GAAAA,CAACM,CAAAA,CAAA,CAAe,SAAA,CAAU,4BAAA,CAA6B,KAAA,CAAM,KAAA,CAAM,WAAY,EAAA,CAC7E,QAAA,CAAAN,IAACO,GAAAA,CAAA,CACC,KAAK,QAAA,CACL,QAAA,CAAUzC,EACV,KAAA,CAAOI,CAAAA,CACP,cAAee,CAAAA,CACf,QAAA,CAAWuB,GAAM,CACf,IAAMhB,EAAYgB,CAAAA,CAAIpB,CAAAA,CAAMoB,CAAC,CAAA,CAAE,OAAO,YAAY,CAAA,CAAI,GACtDnB,CAAAA,CAAc,OAAA,CAAUG,EACxBL,CAAAA,CAAcK,CAAS,EACvBf,CAAAA,GAAW+B,CAAC,EACZzB,CAAAA,CAAQ,KAAK,EACf,CAAA,CACC,GAAGJ,EACN,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CC7HO,IAAM8B,GAAe,CAAC,CAC3B,IAAAC,GAAAA,CACA,SAAA,CAAAnC,EAAY,EAAA,CACZ,kBAAA,CAAAoC,EAAqB,EAAA,CACrB,YAAA,CAAAC,EAAe,MAAA,CACf,OAAA,CAAAC,EAAU,MACZ,CAAA,GAAyB,CACvB,GAAM,CAACC,CAAAA,CAAQC,CAAS,EAAI/B,QAAAA,CAAS,KAAK,EACpCgC,CAAAA,CAAa,CAACJ,GAAgB,CAACE,CAAAA,CAC/BG,EAAa,CAAC,CAACJ,EAErB,OACEf,IAAAA,CAAC,OAAI,SAAA,CAAWC,CAAAA,CAAG,8BAA+BxB,CAAS,CAAA,CACzD,QAAA,CAAA,CAAAuB,IAAAA,CAAC,OAAI,SAAA,CAAWC,CAAAA,CAAG,kCAAmCY,CAAkB,CAAA,CACrE,UAAAC,CAAAA,EAAgBK,CAAAA,CACfjB,IAACkB,EAAAA,CAAA,CACC,MAAON,CAAAA,CACP,IAAA,CAAMC,EAAQ,IAAA,CACd,IAAA,CAAMA,EAAQ,IAAA,CACd,MAAA,CAAQA,CAAAA,CAAQ,MAAA,CAChB,UAAU,SAAA,CACV,YAAA,CAAcA,EAAQ,OAAA,CACtB,YAAA,CAAcA,EAAQ,OAAA,CACtB,cAAA,CAAgBA,EAAQ,cAAA,CACxB,aAAA,CAAe,IAAME,CAAAA,CAAU,IAAI,EACnC,QAAA,CAAU,KAAA,CACZ,EAEAH,CAAAA,EACEZ,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKU,IACL,SAAA,CAAW,CAAA,oEAAA,EAAuEI,EAAS,aAAA,CAAgB,WAAW,GACtH,GAAA,CAAKF,CAAAA,CACL,OAAQ,IAAMG,CAAAA,CAAU,IAAI,CAAA,CAC5B,SAAA,CAAW,MACb,CAAA,CAIHC,CAAAA,EACChB,IAAC,KAAA,CAAA,CACC,YAAA,CAAYY,CAAAA,CAAe,eAAA,CAAkB,iBAC7C,SAAA,CAAU,2EAAA,CACZ,GAEJ,CAAA,CAEC,CAACI,GAAcC,CAAAA,EACdnB,IAAAA,CAAC,OAAI,SAAA,CAAU,iFAAA,CACb,UAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,gCAAA,CACb,QAAA,CAAA,CAAAE,IAACI,GAAAA,CAAA,CACC,YAAA,CAAW,UAAA,CACX,QAAS,IAAMS,CAAAA,CAAQ,QAAQ,IAAA,CAAK,GAAA,CAAIA,EAAQ,IAAA,CAAO,EAAA,CAAK,CAAC,CAAC,CAAA,CAC9D,UAAU,KAAA,CACV,OAAA,CAAQ,aAER,QAAA,CAAAb,GAAAA,CAACmB,UAAA,EAAU,CAAA,CACb,CAAA,CAEAnB,GAAAA,CAACoB,IAAA,CACC,KAAA,CAAO,CAACP,CAAAA,CAAQ,IAAI,EACpB,GAAA,CAAK,CAAA,CACL,IAAK,CAAA,CACL,IAAA,CAAM,IACN,aAAA,CAAgBQ,CAAAA,EAAgBR,EAAQ,OAAA,CAAQQ,CAAAA,CAAE,CAAC,CAAC,CAAA,CACpD,SAAA,CAAU,mBAAA,CACV,WAAY,CAAE,KAAA,CAAO,4BAA6B,KAAA,CAAO,cAAe,EAC1E,CAAA,CAEArB,GAAAA,CAACI,IAAA,CACC,YAAA,CAAW,UACX,OAAA,CAAS,IAAMS,EAAQ,OAAA,CAAQ,IAAA,CAAK,IAAIA,CAAAA,CAAQ,IAAA,CAAO,GAAK,CAAC,CAAC,EAC9D,OAAA,CAAQ,YAAA,CACR,UAAU,KAAA,CAEV,QAAA,CAAAb,IAACsB,QAAAA,CAAA,EAAS,EACZ,CAAA,CAAA,CACF,CAAA,CAEAxB,KAACM,GAAAA,CAAA,CAAO,QAASS,CAAAA,CAAQ,KAAA,CAAO,QAAQ,OAAA,CAAQ,SAAA,CAAU,SAAA,CACxD,QAAA,CAAA,CAAAb,IAACuB,YAAAA,CAAA,EAAa,EAAE,OAAA,CAAA,CAElB,CAAA,CAAA,CACF,GAEJ,CAEJ,ECxEA,IAAMC,EAAqB,OAAA,CACrBC,EAAAA,CAAmB,QAEnBC,EAAAA,CAAeC,CAAAA,EACRC,SAAS,UAAA,CAAWD,CAAAA,CAAM,OAAO,CAAA,CAClC,OAAA,CAGCE,GAAa,CAAC,CACzB,UAAAC,GAAAA,CAAYN,CAAAA,CACZ,OAAA,CAAAO,CAAAA,CAAUN,GACV,QAAA,CAAAO,CAAAA,CAAW,GACX,QAAA,CAAAvD,CAAAA,CAAW,OACX,SAAA,CAAAF,CAAAA,CAAY,GACZ,WAAA,CAAAK,CAAAA,CAAc,aACd,IAAA,CAAAqD,CAAAA,CAAO,UACP,MAAA,CAAAC,GAAAA,CAAS,KACT,WAAA,CAAAC,CAAAA,CACA,WAAA,CAAAC,CAAAA,CACA,GAAGC,CACL,CAAA,GAAa,CACNX,EAAAA,CAAYI,GAAS,IACxB,OAAA,CAAQ,KAAA,CAAM,sBAAsBA,GAAS,CAAA,CAAE,EAE/CA,GAAAA,CAAYN,CAAAA,CAAAA,CAETE,GAAYK,CAAO,CAAA,GACtB,QAAQ,KAAA,CAAM,CAAA,iBAAA,EAAoBA,CAAO,CAAA,CAAE,EAE3CA,CAAAA,CAAUN,EAAAA,CAAAA,CAGZ,IAAMa,CAAAA,CAAYC,OAAAA,CAAQ,IAAkB,CAC1C,IAAMC,EAAQZ,QAAAA,CAAS,UAAA,CAAWG,EAAS,OAAO,CAAA,CAC5CU,EAAmBC,QAAAA,CAAS,UAAA,CAAW,CAAE,OAAA,CAASV,CAAS,CAAC,CAAA,CAC5DW,EAAM,EAAC,CACTC,EAAIhB,QAAAA,CAAS,UAAA,CAAWE,IAAW,OAAO,CAAA,CAC9C,KAAOc,CAAAA,EAAKJ,CAAAA,EAAO,CACjB,IAAIK,CAAAA,CAAMD,EAAE,QAAA,CAAS,OAAO,EAExBC,CAAAA,GAAQ,OAAA,EAAWD,CAAAA,CAAE,MAAA,CAAOJ,CAAK,CAAA,GAAGK,CAAAA,CAAM,SAE9CF,CAAAA,CAAI,IAAA,CAAK,CACP,KAAA,CAAOC,CAAAA,CAAE,SAAS,QAAQ,CAAA,CAC1B,MAAO,CACL,IAAA,CAAMA,EAAE,QAAA,CAAS,IAAI,EACrB,GAAA,CAAKA,CAAAA,CAAE,QAAA,CAAS,IAAI,EACpB,GAAA,CAAAC,CAAAA,CACA,UAAWD,CAAAA,CAAE,QAAA,CAAS,QAAQ,CAChC,CACF,CAAC,CAAA,CACDA,CAAAA,CAAIA,EAAE,IAAA,CAAKH,CAAgB,EAC7B,CAEA,OAAOE,CACT,CAAA,CAAG,CAACb,GAAAA,CAAWC,CAAAA,CAASC,CAAQ,CAAC,CAAA,CAUjC,OACElC,IAAAA,CAACgD,GAAAA,CAAA,CAAO,aAAA,CATcpD,CAAAA,EAAe,CACrC,IAAMsC,CAAAA,CAAWM,EAAU,IAAA,CAAMX,CAAAA,EAASA,EAAK,KAAA,CAAM,GAAA,GAAQjC,CAAC,CAAA,CAEzDsC,CAAAA,EAELvD,CAAAA,GAAWuD,CAAQ,EACrB,CAAA,CAG0C,GAAGK,EACzC,QAAA,CAAA,CAAArC,GAAAA,CAAC+C,EAAA,CACC,SAAA,CAAWhD,EAAG,4BAAA,CAA8BxB,CAAS,EACrD,IAAA,CAAM0D,CAAAA,CACN,YAAaE,CAAAA,CAEb,QAAA,CAAAnC,IAACgD,GAAAA,CAAA,CAAY,WAAA,CAAapE,CAAAA,CAAa,EACzC,CAAA,CACAoB,GAAAA,CAACiD,EAAA,CAAc,QAAA,CAAS,SAAS,SAAA,CAAU,UAAA,CAAW,OAAQf,GAAAA,CAC3D,QAAA,CAAAI,EAAU,GAAA,CAAKX,GAAAA,EAAS,CACvB,IAAMuB,CAAAA,CAAWd,IAAcT,GAAI,CAAA,CACnC,OACE3B,GAAAA,CAACmD,EAAA,CACC,SAAA,CAAWpD,EAAGmD,CAAAA,CAAW,aAAA,CAAgB,MAAM,CAAA,CAE/C,KAAA,CAAOvB,IAAK,KAAA,CAAM,GAAA,CAClB,SAAUuB,CAAAA,CAET,QAAA,CAAAvB,IAAK,KAAA,CAAA,CAJDA,GAAAA,CAAK,MAAM,GAKlB,CAEJ,CAAC,CAAA,CACH,GACF,CAEJ,CAAA,CAEOyB,GAAQvB,GChHfzC,CAAAA,CAAM,OAAOiE,EAAiB,CAAA,CAG9B,IAAMC,EAAAA,CAAiB,YAAA,CAGjBC,GAAa,YAAA,CAMbC,CAAAA,CAAyB,CAAC,YAAA,CAAc,YAAa,WAAA,CAAa,UAAA,CAAY,YAAY,CAAA,CA+ChG,SAASC,EAAWpF,CAAAA,CAAgC,CAClD,OAAOA,CAAAA,CAAOe,CAAAA,CAAMf,CAAI,CAAA,CAAE,MAAA,CAAOiF,EAAc,CAAA,CAAI,EACrD,CAQO,SAASI,EAAAA,CAAW,CACzB,SAAA,CAAAnF,IAAY,EAAA,CACZ,gBAAA,CAAAC,EAAmB,EAAA,CACnB,KAAA,CAAAV,EAAQ,MAAA,CACR,QAAA,CAAAW,EAAW,MAAA,CACX,QAAA,CAAAC,EAAW,KAAA,CACX,aAAA,CAAAC,EAAgB,MAAA,CAChB,WAAA,CAAagF,IACb,UAAA,CAAAtB,CAAAA,CAAa,MAAA,CACb,gBAAA,CAAAuB,IAAmB,IAAA,CACnB,QAAA,CAAAC,EAAW,KACb,CAAA,CAAoB,CAClB,GAAM,CAAC/E,EAAMC,CAAO,CAAA,CAAIC,SAAS,KAAK,CAAA,CAChCJ,EAAc+E,GAAAA,GAAoBE,CAAAA,CAAWP,GAAiB,aAAA,CAAA,CAI9D,CAACQ,CAAAA,CAAgBC,CAAiB,EAAI/E,QAAAA,CAA2B,MAAS,EAC1EgF,CAAAA,CAAoB1E,MAAAA,CAAOxB,CAAK,CAAA,CAClCA,CAAAA,GAAUkG,EAAkB,OAAA,GAC9BA,CAAAA,CAAkB,QAAUlG,CAAAA,CACxBgG,CAAAA,GAAmB,QACrBC,CAAAA,CAAkB,MAAS,GAG/B,IAAME,CAAAA,CAAgBH,CAAAA,EAAkBhG,CAAAA,CAElCoG,EAAiB7F,CAAAA,EAChBM,CAAAA,EAAe,SAGb,CAACwF,OAAAA,CAAQ9F,EAAMM,CAAAA,CAAc,QAAQ,EAFnC,IAAA,CAMLyF,CAAAA,CAAc9E,OAAOb,CAAQ,CAAA,CACnC2F,EAAY,OAAA,CAAU3F,CAAAA,CACtB,IAAM4F,CAAAA,CAAmB/E,MAAAA,CAAO4E,CAAa,CAAA,CAC7CG,EAAiB,OAAA,CAAUH,CAAAA,CAE3B,GAAM,CAAE,GAAA,CAAKI,EAAS,QAAA,CAAUC,CAAa,EAAIC,QAAAA,CAC/C,CAAE,KAAMjB,EAAAA,CAAY,IAAA,CAAM,KAAM,SAAA,CAAW,KAAM,EACjD,CACE,UAAA,CAAakB,CAAAA,EAAgB,CAC3B,IAAM7E,CAAAA,CAASR,CAAAA,CAAMqF,EAAajB,CAAAA,CAAwB,IAAI,EAC1D5D,CAAAA,CAAO,OAAA,IAAayE,CAAAA,CAAiB,OAAA,CAAQzE,EAAO,MAAA,EAAQ,GAC9DwE,CAAAA,CAAY,OAAA,GAAUxE,EAAO,MAAA,EAAQ,EAEzC,CACF,CACF,CAAA,CAEM8E,EAAAA,CAAgBC,GAA0B,CAC9ClG,CAAAA,GAAWkG,CAAG,CAAA,CACdJ,CAAAA,CAAad,EAAWkB,CAAG,CAAC,EAC5B5F,CAAAA,CAAQ,KAAK,EACf,CAAA,CAEM6F,EAAAA,CAAelF,GAA8C,CACjE,IAAMmF,CAAAA,CAASnF,CAAAA,CAAE,cAAc,OAAA,CAAQ,MAAM,EAAE,IAAA,EAAK,CAC9CE,EAASR,CAAAA,CAAMyF,CAAAA,CAAQrB,EAAwB,IAAI,CAAA,CACzD,GAAI5D,CAAAA,CAAO,OAAA,IAAasE,CAAAA,CAActE,CAAAA,CAAO,QAAQ,CAAA,CAAG,CACtDF,CAAAA,CAAE,gBAAe,CACjB,IAAMrB,EAAOuB,CAAAA,CAAO,MAAA,GACpBnB,CAAAA,GAAWJ,CAAI,EACfkG,CAAAA,CAAad,CAAAA,CAAWpF,CAAI,CAAC,EAC/B,CAEF,CAAA,CAEMyG,EAAAA,CAAc,IAAM,CAExBP,CAAAA,CAAad,CAAAA,CAAW3F,CAAK,CAAC,EAChC,CAAA,CAEMiH,GAAa,IAAM,CACvB,IAAMC,CAAAA,CAAUV,CAAAA,CAAQ,SAAS,KAAA,EAAS,EAAA,CAC1C,GAAIU,CAAAA,GAAY,EAAA,CAAI,CACdlH,CAAAA,GAAU,MAAA,EACZW,IAAW,MAAS,CAAA,CAEtB,MACF,CACA,IAAMmB,CAAAA,CAASR,CAAAA,CAAM4F,EAASxB,CAAAA,CAAwB,IAAI,EACtD5D,CAAAA,CAAO,OAAA,IAAasE,CAAAA,CAActE,CAAAA,CAAO,QAAQ,CAAA,EACnDnB,IAAWmB,CAAAA,CAAO,MAAA,EAAQ,CAAA,CAG5B2E,CAAAA,CAAad,CAAAA,CAAW3F,CAAK,CAAC,EAChC,CAAA,CAEMmH,GAAelF,CAAAA,CACnBE,GAAAA,GACA2D,GAAAA,EAAoB,OAAA,CACpB9E,EAAO,mBAAA,CAAsB,EAAA,CAC7BP,GACF,CAAA,CAEA,OACEuB,KAACI,GAAAA,CAAA,CAAQ,KAAM,CAACxB,CAAAA,EAAYI,CAAAA,CAAM,YAAA,CAAcC,EAC9C,QAAA,CAAA,CAAAiB,GAAAA,CAACG,EAAA,CAAe,OAAA,CAAO,KACrB,QAAA,CAAAL,IAAAA,CAAC,OAAI,SAAA,CAAWC,CAAAA,CAAG,+CAAgDvB,CAAgB,CAAA,CAChF,UAAAqF,CAAAA,CACC7D,GAAAA,CAAC,SACC,GAAA,CAAKsE,CAAAA,CACL,YAAA,CAAcb,CAAAA,CAAW3F,CAAK,CAAA,CAC9B,SAAA,CAAWmH,GACX,WAAA,CAAarG,CAAAA,CACb,SAAUF,CAAAA,CACV,OAAA,CAASoG,GACT,OAAA,CAASF,EAAAA,CACT,OAASlF,CAAAA,EAAM,CACbqF,IAAW,CACX1C,CAAAA,EAAY,SAAS3C,CAAC,EACxB,CAAA,CACF,CAAA,CAEAM,IAACkF,GAAAA,CAAA,CACC,UAAWnF,CAAAA,CACT6D,GAAAA,EAAoB,QACpB9E,CAAAA,CAAO,mBAAA,CAAsB,GAC7BP,GACF,CAAA,CACC,GAAG8D,CAAAA,CACJ,KAAA,CAAOoB,EAAW3F,CAAK,CAAA,CACvB,YAAac,CAAAA,CACb,QAAA,CAAQ,IAAA,CACR,QAAA,CAAUF,EACZ,CAAA,CAEDkF,GAAAA,EACC5D,IAAC,KAAA,CAAA,CACC,SAAA,CAAWD,EACT,kDAAA,CACArB,CAAAA,CAAW,gBAAkB,2BAC/B,CAAA,CAEA,SAAAsB,GAAAA,CAACK,UAAAA,CAAA,CAAW,IAAA,CAAM,EAAA,CAAI,EACxB,CAAA,CAAA,CAEJ,CAAA,CACF,CAAA,CACAL,GAAAA,CAACM,EAAA,CACC,SAAA,CAAU,6BACV,KAAA,CAAM,OAAA,CACN,gBAAiBuD,CAAAA,CAAYnE,CAAAA,EAAMA,EAAE,cAAA,EAAe,CAAI,OAExD,QAAA,CAAAM,GAAAA,CAACO,IAAA,CACC,IAAA,CAAK,SACL,QAAA,CAAUzC,CAAAA,CAAQsB,EAAMtB,CAAK,CAAA,CAAE,QAAO,CAAI,MAAA,CAC1C,SAAU4G,EAAAA,CACT,GAAIb,EAAW,CAAE,KAAA,CAAOI,EAAe,aAAA,CAAeF,CAAkB,EAAI,EAAC,CAC7E,GAAGpF,CAAAA,CACN,CAAA,CACF,GACF,CAEJ","file":"chunk-GW4NIANM.js","sourcesContent":["import * as React from 'react';\nimport { ComponentProps, useEffect, useRef, useState } from 'react';\nimport { LuCalendar } from 'react-icons/lu';\nimport dayjs from 'dayjs';\nimport { Calendar, Button, Popover, PopoverContent, PopoverTrigger } from '@/v2';\nimport { cn } from '@/lib/utils';\nimport { inputVariants } from '../input/input';\n\nfunction maskDate(value: string): string {\n const digits = value.replace(/\\D/g, '').slice(0, 8);\n if (digits.length <= 2) return digits;\n if (digits.length <= 4) return `${digits.slice(0, 2)}/${digits.slice(2)}`;\n return `${digits.slice(0, 2)}/${digits.slice(2, 4)}/${digits.slice(4)}`;\n}\n\nfunction parseDate(value: string): Date | undefined {\n if (value.length !== 10) return undefined;\n const parts = value.split('/');\n if (parts.length !== 3 || parts[2].length !== 4) return undefined;\n const month = parseInt(parts[0], 10);\n const day = parseInt(parts[1], 10);\n const year = parseInt(parts[2], 10);\n if (Number.isNaN(month) || Number.isNaN(day) || Number.isNaN(year)) return undefined;\n const date = new Date(year, month - 1, day);\n if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {\n return undefined;\n }\n return date;\n}\n\nexport type DatePickerInputProps = {\n className?: string;\n wrapperClassName?: string;\n value?: Date;\n onChange?: (value: Date | undefined) => void;\n disabled?: boolean;\n calendarProps?: Omit<ComponentProps<typeof Calendar>, 'mode' | 'selected' | 'onSelect'>;\n placeholder?: string;\n variant?: 'default' | 'invalid';\n};\n\nexport function DatePickerInput({\n className,\n wrapperClassName,\n value,\n onChange,\n disabled = false,\n calendarProps,\n placeholder = 'MM/DD/YYYY',\n variant,\n}: DatePickerInputProps) {\n const [open, setOpen] = useState(false);\n const [month, setMonth] = useState<Date | undefined>(value);\n const [inputValue, setInputValue] = useState<string>(\n value ? dayjs(value).format('MM/DD/YYYY') : '',\n );\n // Track the last value we synced from props to avoid overwriting partial user input\n const lastSyncedRef = useRef(value ? dayjs(value).format('MM/DD/YYYY') : '');\n\n useEffect(() => {\n const formatted = value ? dayjs(value).format('MM/DD/YYYY') : '';\n if (formatted !== lastSyncedRef.current) {\n lastSyncedRef.current = formatted;\n setInputValue(formatted);\n if (value) setMonth(value);\n }\n }, [value]);\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const masked = maskDate(e.target.value);\n setInputValue(masked);\n const parsed = parseDate(masked);\n if (parsed) {\n lastSyncedRef.current = masked;\n onChange?.(parsed);\n } else if (masked === '') {\n lastSyncedRef.current = '';\n onChange?.(undefined);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n setOpen(true);\n }\n if (\n !/[0-9/]/.test(e.key) &&\n !['Backspace', 'Delete', 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'Tab'].includes(e.key) &&\n !e.metaKey &&\n !e.ctrlKey\n ) {\n e.preventDefault();\n }\n };\n\n return (\n <div className={cn('relative w-full', wrapperClassName)}>\n <input\n type=\"text\"\n data-slot=\"input\"\n className={cn(inputVariants({ variant }), 'pr-10', className)}\n value={inputValue}\n placeholder={placeholder}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n />\n <Popover open={!disabled && open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"ghost-icon\"\n size=\"sm\"\n className=\"absolute top-1/2 right-1 -translate-y-1/2\"\n disabled={disabled}\n aria-label=\"Select date\"\n type=\"button\"\n >\n <LuCalendar />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto overflow-hidden p-0\" align=\"end\" sideOffset={10}>\n <Calendar\n mode=\"single\"\n selected={value}\n month={month}\n onMonthChange={setMonth}\n onSelect={(d) => {\n const formatted = d ? dayjs(d).format('MM/DD/YYYY') : '';\n lastSyncedRef.current = formatted;\n setInputValue(formatted);\n onChange?.(d);\n setOpen(false);\n }}\n {...calendarProps}\n />\n </PopoverContent>\n </Popover>\n </div>\n );\n}\n","import { useState } from 'react';\nimport { LuRefreshCcw, LuZoomIn, LuZoomOut } from 'react-icons/lu';\nimport Cropper from 'react-easy-crop';\nimport { Button, Slider } from '../index';\nimport type { UseImageCropper } from './useImageCropper';\nimport { cn } from '@/lib/utils';\n\nexport type ImagePreviewProps = {\n alt: string;\n className?: string;\n containerClassName?: string;\n imagePreview?: string; // optional so we can show skeleton while awaiting URL\n cropper?: UseImageCropper; // when provided, show cropping UI\n};\n\nexport const ImagePreview = ({\n alt,\n className = '',\n containerClassName = '',\n imagePreview = undefined,\n cropper = undefined,\n}: ImagePreviewProps) => {\n const [loaded, setLoaded] = useState(false);\n const showLoader = !imagePreview || !loaded;\n const enableCrop = !!cropper;\n\n return (\n <div className={cn(`flex max-w-[386px] flex-col`, className)}>\n <div className={cn('relative h-60 rounded-md border', containerClassName)}>\n {imagePreview && enableCrop ? (\n <Cropper\n image={imagePreview}\n crop={cropper.crop}\n zoom={cropper.zoom}\n aspect={cropper.aspect}\n objectFit=\"contain\"\n onCropChange={cropper.setCrop}\n onZoomChange={cropper.setZoom}\n onCropComplete={cropper.onCropComplete}\n onMediaLoaded={() => setLoaded(true)}\n showGrid={false}\n />\n ) : (\n imagePreview && (\n <img\n alt={alt}\n className={`m-auto h-full w-full object-contain transition-opacity duration-300 ${loaded ? 'opacity-100' : 'opacity-0'}`}\n src={imagePreview}\n onLoad={() => setLoaded(true)}\n draggable={false}\n />\n )\n )}\n\n {showLoader && (\n <div\n aria-label={imagePreview ? 'Loading image' : 'Awaiting image'}\n className=\"from-grey-300 to-grey-300 absolute inset-0 animate-pulse bg-gradient-to-r\"\n />\n )}\n </div>\n\n {!showLoader && enableCrop && (\n <div className=\"mt-3 flex flex-col items-center justify-between gap-1 px-1 sm:flex-row sm:gap-4\">\n <div className=\"flex w-full items-center gap-3\">\n <Button\n aria-label=\"zoom out\"\n onClick={() => cropper.setZoom(Math.max(cropper.zoom - 0.1, 1))}\n className=\"h-8\"\n variant=\"ghost-icon\"\n >\n <LuZoomOut />\n </Button>\n\n <Slider\n value={[cropper.zoom]}\n min={1}\n max={3}\n step={0.01}\n onValueChange={(v: number[]) => cropper.setZoom(v[0])}\n className=\"w-full sm:flex-50\"\n classNames={{ thumb: 'border-2 border-green-800', range: 'bg-green-900' }}\n />\n\n <Button\n aria-label=\"zoom in\"\n onClick={() => cropper.setZoom(Math.min(cropper.zoom + 0.1, 3))}\n variant=\"ghost-icon\"\n className=\"h-8\"\n >\n <LuZoomIn />\n </Button>\n </div>\n\n <Button onClick={cropper.reset} variant=\"ghost\" className=\"h-8 p-2\">\n <LuRefreshCcw />\n Reset\n </Button>\n </div>\n )}\n </div>\n );\n};\n","import { DateTime, Duration } from 'luxon';\nimport { useMemo } from 'react';\nimport type { ReactElement, ReactNode } from 'react';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/v2';\nimport { cn } from '@/lib/utils';\n\nexport type Interval = {\n label: string;\n value: {\n hour: string;\n min: string;\n raw: string;\n formatted: string;\n };\n};\n\ntype Props = {\n startTime?: string;\n endTime?: string;\n interval?: number;\n onChange?: (e: Interval) => void;\n className?: string;\n placeholder?: string;\n size?: 'default' | 'sm';\n portal?: boolean;\n triggerIcon?: ReactElement;\n getSublabel?: (interval: Interval) => ReactNode;\n [inputProps: string]: unknown;\n};\n\nconst START_TIME_DEFAULT = '00:00';\nconst END_TIME_DEFAULT = '24:00';\n\nconst isValidTime = (time: string) => {\n const dt = DateTime.fromFormat(time, 'HH:mm');\n return dt.isValid;\n};\n\nexport const TimeSelect = ({\n startTime = START_TIME_DEFAULT,\n endTime = END_TIME_DEFAULT,\n interval = 30,\n onChange = undefined,\n className = '',\n placeholder = 'Select one',\n size = 'default',\n portal = true,\n triggerIcon,\n getSublabel,\n ...inputProps\n}: Props) => {\n if (!isValidTime(startTime)) {\n console.error(`Invalid startTime: ${startTime}`);\n // eslint-disable-next-line no-param-reassign\n startTime = START_TIME_DEFAULT;\n }\n if (!isValidTime(endTime)) {\n console.error(`Invalid endTime: ${endTime}`);\n // eslint-disable-next-line no-param-reassign\n endTime = END_TIME_DEFAULT;\n }\n\n const intervals = useMemo((): Interval[] => {\n const dtEnd = DateTime.fromFormat(endTime, 'HH:mm');\n const durationInterval = Duration.fromObject({ minutes: interval });\n const res = [];\n let i = DateTime.fromFormat(startTime, 'HH:mm');\n while (i <= dtEnd) {\n let raw = i.toFormat('HH:mm');\n // Avoid duplicate keys for \"00:00\" and \"00:00\" (end of day)\n if (raw === '00:00' && i.equals(dtEnd)) raw = '24:00';\n\n res.push({\n label: i.toFormat('h:mm a'),\n value: {\n hour: i.toFormat('HH'),\n min: i.toFormat('mm'),\n raw,\n formatted: i.toFormat('h:mm a'),\n },\n });\n i = i.plus(durationInterval);\n }\n\n return res;\n }, [startTime, endTime, interval]);\n\n const handleOnSelect = (e: unknown) => {\n const interval = intervals.find((time) => time.value.raw === e);\n\n if (!interval) return;\n\n onChange?.(interval);\n };\n\n return (\n <Select onValueChange={handleOnSelect} {...inputProps}>\n <SelectTrigger\n className={cn('max-w-[240px] md:w-[150px]', className)}\n size={size}\n triggerIcon={triggerIcon}\n >\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n <SelectContent position=\"popper\" className=\"max-h-90\" portal={portal}>\n {intervals.map((time) => {\n const sublabel = getSublabel?.(time);\n return (\n <SelectItem\n className={cn(sublabel ? 'h-auto py-2' : 'h-10')}\n key={time.value.raw}\n value={time.value.raw}\n sublabel={sublabel}\n >\n {time.label}\n </SelectItem>\n );\n })}\n </SelectContent>\n </Select>\n );\n};\n\nexport default TimeSelect;\n","import { ComponentProps, useRef, useState } from 'react';\nimport { LuCalendar } from 'react-icons/lu';\nimport dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat.js';\nimport { useIMask } from 'react-imask';\nimport { isMatch } from 'react-day-picker';\nimport { Calendar, Input, Popover, PopoverContent, PopoverTrigger } from '@/v2';\nimport { cn } from '@/lib/utils';\nimport { inputVariants } from '@/v2/input/input';\nimport type { InputProps } from '@/v2/input/input';\n\ndayjs.extend(customParseFormat);\n\n/** Display and input format for dates. Also used as the placeholder when `editable` is true. */\nconst DISPLAY_FORMAT = 'MM/DD/YYYY';\n\n/** IMask pattern — each `0` is a required digit, slashes are fixed literals. */\nconst INPUT_MASK = '00/00/0000';\n\n/**\n * Formats accepted when parsing typed or pasted input (dayjs strict mode).\n * Ordered from most specific to least specific to avoid ambiguous matches.\n */\nconst ACCEPTED_INPUT_FORMATS = ['MM/DD/YYYY', 'MM/D/YYYY', 'M/DD/YYYY', 'M/D/YYYY', 'YYYY-MM-DD'];\n\nexport type DatePickerProps = {\n /** Additional class name(s) applied to the input element. */\n className?: string;\n /** Additional class name(s) applied to the outer popover trigger wrapper. */\n wrapperClassName?: string;\n /** The currently selected date. `undefined` means no date is selected. */\n value?: Date;\n /** Called when the selected date changes. Receives `undefined` when the date is cleared. */\n onChange?: (value: Date | undefined) => void;\n /** When `true`, the picker is non-interactive. */\n disabled?: boolean;\n /**\n * Props forwarded to the underlying `Calendar` component (react-day-picker).\n * Use `disabled` within this object to restrict selectable dates — these\n * constraints apply to both calendar clicks and typed input when `editable` is `true`.\n *\n * @example\n * ```tsx\n * <DatePicker calendarProps={{ disabled: [{ before: new Date() }] }} />\n * ```\n */\n calendarProps?: Omit<ComponentProps<typeof Calendar>, 'mode' | 'selected' | 'onSelect'>;\n /**\n * Input placeholder text. Defaults to `\"Pick a date\"` in read-only mode\n * and `\"MM/DD/YYYY\"` when `editable` is `true`.\n */\n placeholder?: string;\n /** Props forwarded to the underlying `Input` component. */\n inputProps?: InputProps;\n /** Whether to show the calendar icon inside the input. @default true */\n showCalendarIcon?: boolean;\n /**\n * When `true`, the input accepts typed and pasted dates in `MM/DD/YYYY` format.\n * Slashes are auto-inserted, non-numeric characters are rejected, and common\n * formats like `M/D/YYYY` and `YYYY-MM-DD` are accepted on paste.\n * Dates that fall in `calendarProps.disabled` ranges are rejected.\n *\n * When `false` (default), the input is read-only and dates can only be\n * selected via the calendar popover.\n *\n * @default false\n */\n editable?: boolean;\n};\n\nfunction formatDate(date: Date | undefined): string {\n return date ? dayjs(date).format(DISPLAY_FORMAT) : '';\n}\n\n/**\n * A date picker that combines a text input with a calendar popover.\n *\n * By default the input is read-only — dates are selected via the calendar.\n * Set `editable` to allow typing or pasting dates in `MM/DD/YYYY` format.\n */\nexport function DatePicker({\n className = '',\n wrapperClassName = '',\n value = undefined,\n onChange = undefined,\n disabled = false,\n calendarProps = undefined,\n placeholder: placeholderProp,\n inputProps = undefined,\n showCalendarIcon = true,\n editable = false,\n}: DatePickerProps) {\n const [open, setOpen] = useState(false);\n const placeholder = placeholderProp ?? (editable ? DISPLAY_FORMAT : 'Pick a date');\n\n // Calendar month: derived from value, with user navigation override.\n // When value changes, navigation resets to the new value's month.\n const [navigatedMonth, setNavigatedMonth] = useState<Date | undefined>(undefined);\n const prevValueForMonth = useRef(value);\n if (value !== prevValueForMonth.current) {\n prevValueForMonth.current = value;\n if (navigatedMonth !== undefined) {\n setNavigatedMonth(undefined);\n }\n }\n const calendarMonth = navigatedMonth ?? value;\n\n const isDateAllowed = (date: Date): boolean => {\n if (!calendarProps?.disabled) {\n return true;\n }\n return !isMatch(date, calendarProps.disabled);\n };\n\n // Refs ensure IMask callbacks always see the latest values without re-creating the mask\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n const isDateAllowedRef = useRef(isDateAllowed);\n isDateAllowedRef.current = isDateAllowed;\n\n const { ref: maskRef, setValue: setMaskValue } = useIMask<HTMLInputElement>(\n { mask: INPUT_MASK, lazy: true, overwrite: false },\n {\n onComplete: (maskedValue) => {\n const parsed = dayjs(maskedValue, ACCEPTED_INPUT_FORMATS, true);\n if (parsed.isValid() && isDateAllowedRef.current(parsed.toDate())) {\n onChangeRef.current?.(parsed.toDate());\n }\n },\n },\n );\n\n const handleSelect = (val: Date | undefined) => {\n onChange?.(val);\n setMaskValue(formatDate(val));\n setOpen(false);\n };\n\n const handlePaste = (e: React.ClipboardEvent<HTMLInputElement>) => {\n const pasted = e.clipboardData.getData('text').trim();\n const parsed = dayjs(pasted, ACCEPTED_INPUT_FORMATS, true);\n if (parsed.isValid() && isDateAllowed(parsed.toDate())) {\n e.preventDefault();\n const date = parsed.toDate();\n onChange?.(date);\n setMaskValue(formatDate(date));\n }\n // If we can't parse it, let IMask handle it naturally\n };\n\n const handleFocus = () => {\n // Sync the mask to the current value on focus — handles external parent resets\n setMaskValue(formatDate(value));\n };\n\n const handleBlur = () => {\n const current = maskRef.current?.value ?? '';\n if (current === '') {\n if (value !== undefined) {\n onChange?.(undefined);\n }\n return;\n }\n const parsed = dayjs(current, ACCEPTED_INPUT_FORMATS, true);\n if (parsed.isValid() && isDateAllowed(parsed.toDate())) {\n onChange?.(parsed.toDate());\n }\n // Revert to last valid display value\n setMaskValue(formatDate(value));\n };\n\n const inputClasses = cn(\n inputVariants(),\n showCalendarIcon && 'pl-10',\n open ? 'border-dark-green' : '',\n className,\n );\n\n return (\n <Popover open={!disabled && open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <div className={cn('relative flex w-full items-center rounded-md', wrapperClassName)}>\n {editable ? (\n <input\n ref={maskRef}\n defaultValue={formatDate(value)}\n className={inputClasses}\n placeholder={placeholder}\n disabled={disabled}\n onFocus={handleFocus}\n onPaste={handlePaste}\n onBlur={(e) => {\n handleBlur();\n inputProps?.onBlur?.(e);\n }}\n />\n ) : (\n <Input\n className={cn(\n showCalendarIcon && 'pl-10',\n open ? 'border-dark-green' : '',\n className,\n )}\n {...inputProps}\n value={formatDate(value)}\n placeholder={placeholder}\n readOnly\n disabled={disabled}\n />\n )}\n {showCalendarIcon && (\n <div\n className={cn(\n 'absolute top-1/2 left-4 h-4 w-4 -translate-y-1/2',\n disabled ? 'text-gray-400' : 'cursor-pointer text-black',\n )}\n >\n <LuCalendar size={16} />\n </div>\n )}\n </div>\n </PopoverTrigger>\n <PopoverContent\n className=\"w-auto overflow-hidden p-0\"\n align=\"start\"\n onOpenAutoFocus={editable ? (e) => e.preventDefault() : undefined}\n >\n <Calendar\n mode=\"single\"\n selected={value ? dayjs(value).toDate() : undefined}\n onSelect={handleSelect}\n {...(editable ? { month: calendarMonth, onMonthChange: setNavigatedMonth } : {})}\n {...calendarProps}\n />\n </PopoverContent>\n </Popover>\n );\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var chunkO4VBODYC_cjs=require('./chunk-O4VBODYC.cjs'),chunkWTNXRFXW_cjs=require('./chunk-WTNXRFXW.cjs'),core=require('@dnd-kit/core'),sortable=require('@dnd-kit/sortable'),N=require('@emotion/styled'),jsxRuntime=require('react/jsx-runtime');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var N__default=/*#__PURE__*/_interopDefault(N);var P=N__default.default.div`
|
|
2
2
|
display: flex;
|
|
3
3
|
flex-direction: column;
|
|
4
|
-
`;function k({id:c,onClickElement:i=()=>null,elements:t=[],onChange:E,onDragOver:p=()=>null,className:x="",disabled:h=false}){let{setNodeRef:u}=core.useDroppable({id:c}),v=({active:n,over:r,delta:o})=>{if(Math.abs(o.x)<1&&Math.abs(o.y)<1)return i(n.id);let d=t.findIndex(e=>e.id===n.id),a=t.findIndex(e=>e.id===r?.id),l=e=>sortable.arrayMove(e,d,a);return r?.id&&p(l(t)),false},S=({active:n,over:r,delta:o})=>{if(Math.abs(o.x)<1&&Math.abs(o.y)<1)return i(n.id);let d=t.findIndex(e=>e.id===n.id),a=t.findIndex(e=>e.id===r?.id),l=e=>sortable.arrayMove(e,d,a);return r?.id&&E(l(t)),null},y=core.useSensors(core.useSensor(chunkWTNXRFXW_cjs.a),core.useSensor(chunkWTNXRFXW_cjs.b));return jsxRuntime.jsx(core.DndContext,{collisionDetection:core.closestCorners,onDragOver:v,onDragEnd:S,sensors:y,children:jsxRuntime.jsx(sortable.SortableContext,{id:c,items:t,strategy:sortable.verticalListSortingStrategy,children:jsxRuntime.jsx(P,{ref:u,className:x,children:t.map(n=>jsxRuntime.jsx(chunkO4VBODYC_cjs.a,{onClickElement:i,id:n.id,disabled:h,children:n.children},n.id))})})})}exports.a=k;//# sourceMappingURL=chunk-
|
|
5
|
-
//# sourceMappingURL=chunk-
|
|
4
|
+
`;function k({id:c,onClickElement:i=()=>null,elements:t=[],onChange:E,onDragOver:p=()=>null,className:x="",disabled:h=false}){let{setNodeRef:u}=core.useDroppable({id:c}),v=({active:n,over:r,delta:o})=>{if(Math.abs(o.x)<1&&Math.abs(o.y)<1)return i(n.id);let d=t.findIndex(e=>e.id===n.id),a=t.findIndex(e=>e.id===r?.id),l=e=>sortable.arrayMove(e,d,a);return r?.id&&p(l(t)),false},S=({active:n,over:r,delta:o})=>{if(Math.abs(o.x)<1&&Math.abs(o.y)<1)return i(n.id);let d=t.findIndex(e=>e.id===n.id),a=t.findIndex(e=>e.id===r?.id),l=e=>sortable.arrayMove(e,d,a);return r?.id&&E(l(t)),null},y=core.useSensors(core.useSensor(chunkWTNXRFXW_cjs.a),core.useSensor(chunkWTNXRFXW_cjs.b));return jsxRuntime.jsx(core.DndContext,{collisionDetection:core.closestCorners,onDragOver:v,onDragEnd:S,sensors:y,children:jsxRuntime.jsx(sortable.SortableContext,{id:c,items:t,strategy:sortable.verticalListSortingStrategy,children:jsxRuntime.jsx(P,{ref:u,className:x,children:t.map(n=>jsxRuntime.jsx(chunkO4VBODYC_cjs.a,{onClickElement:i,id:n.id,disabled:h,children:n.children},n.id))})})})}exports.a=k;//# sourceMappingURL=chunk-HCMJMPCZ.cjs.map
|
|
5
|
+
//# sourceMappingURL=chunk-HCMJMPCZ.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/SortableList/index.tsx"],"names":["ElementsContainer","styled","SortableList","id","onClickElement","elements","onChange","onDragOver","className","disabled","setNodeRef","useDroppable","handleDragOver","active","over","delta","activeIndex","element","overIndex","updatedItems","elementToUpdate","arrayMove","handleDragEnd","sensors","useSensors","useSensor","MouseSensor","KeyboardSensor","jsx","DndContext","closestCorners","SortableContext","verticalListSortingStrategy","SortableElement"],"mappings":"8WAeA,IAAMA,CAAAA,CAAoBC,kBAAAA,CAAO,GAAA;AAAA;AAAA;AAAA,CAAA,CAoBlB,SAARC,CAAAA,CAA8B,CACnC,EAAA,CAAAC,CAAAA,CACA,eAAAC,CAAAA,CAAiB,IAAM,IAAA,CACvB,QAAA,CAAAC,CAAAA,CAAW,GACX,QAAA,CAAAC,CAAAA,CACA,UAAA,CAAAC,CAAAA,CAAa,IAAM,IAAA,CACnB,SAAA,CAAAC,CAAAA,CAAY,EAAA,CACZ,QAAA,CAAAC,CAAAA,CAAW,KACb,CAAA,CAAsB,CACpB,GAAM,CAAE,UAAA,CAAAC,CAAW,CAAA,CAAIC,iBAAAA,CAAa,CAAE,GAAAR,CAAG,CAAC,CAAA,CAEpCS,CAAAA,CAAiB,CAAC,CAAE,OAAAC,CAAAA,CAAQ,IAAA,CAAAC,CAAAA,CAAM,KAAA,CAAAC,CAAM,CAAA,GAAqB,CAEjE,GADmC,IAAA,CAAK,GAAA,CAAIA,CAAAA,CAAM,CAAC,CAAA,CAAI,CAAA,EAAK,KAAK,GAAA,CAAIA,CAAAA,CAAM,CAAC,CAAA,CAAI,CAAA,CAE9E,OAAOX,EAAeS,CAAAA,CAAO,EAAY,CAAA,CAG3C,IAAMG,CAAAA,CAAcX,CAAAA,CAAS,UAAWY,CAAAA,EAAYA,CAAAA,CAAQ,EAAA,GAAOJ,CAAAA,CAAO,EAAE,CAAA,CACtEK,CAAAA,CAAYb,CAAAA,CAAS,SAAA,CAAWY,CAAAA,EAAYA,CAAAA,CAAQ,EAAA,GAAOH,CAAAA,EAAM,EAAE,EAEnEK,CAAAA,CAAgBC,CAAAA,EACpBC,kBAAAA,CAAmBD,CAAAA,CAAiBJ,CAAAA,CAAaE,CAAS,CAAA,CAE5D,OAAIJ,CAAAA,EAAM,EAAA,EACRP,CAAAA,CAAWY,CAAAA,CAAad,CAAQ,CAAC,EAE5B,KACT,CAAA,CAEMiB,CAAAA,CAAgB,CAAC,CAAE,MAAA,CAAAT,CAAAA,CAAQ,IAAA,CAAAC,CAAAA,CAAM,KAAA,CAAAC,CAAM,CAAA,GAAoB,CAE/D,GADmC,KAAK,GAAA,CAAIA,CAAAA,CAAM,CAAC,CAAA,CAAI,CAAA,EAAK,IAAA,CAAK,IAAIA,CAAAA,CAAM,CAAC,CAAA,CAAI,CAAA,CAE9E,OAAOX,CAAAA,CAAeS,EAAO,EAAY,CAAA,CAG3C,IAAMG,CAAAA,CAAcX,CAAAA,CAAS,SAAA,CAAWY,CAAAA,EAAYA,CAAAA,CAAQ,EAAA,GAAOJ,CAAAA,CAAO,EAAE,CAAA,CACtEK,CAAAA,CAAYb,CAAAA,CAAS,UAAWY,CAAAA,EAAYA,CAAAA,CAAQ,EAAA,GAAOH,CAAAA,EAAM,EAAE,CAAA,CAEnEK,EAAgBC,CAAAA,EACpBC,kBAAAA,CAAmBD,CAAAA,CAAiBJ,CAAAA,CAAaE,CAAS,CAAA,CAE5D,OAAIJ,CAAAA,EAAM,EAAA,EACRR,CAAAA,CAASa,CAAAA,CAAad,CAAQ,CAAC,CAAA,CAG1B,IACT,CAAA,CAEMkB,CAAAA,CAAUC,eAAAA,CAAWC,cAAAA,CAAUC,mBAAW,CAAA,CAAGD,eAAUE,mBAAc,CAAC,CAAA,CAE5E,OACEC,cAAAA,CAACC,eAAAA,CAAA,CACC,kBAAA,CAAoBC,mBAAAA,CACpB,UAAA,CAAYlB,CAAAA,CACZ,SAAA,CAAWU,CAAAA,CACX,QAASC,CAAAA,CAET,QAAA,CAAAK,cAAAA,CAACG,wBAAAA,CAAA,CAAgB,EAAA,CAAI5B,CAAAA,CAAI,KAAA,CAAOE,CAAAA,CAAU,QAAA,CAAU2B,oCAAAA,CAClD,QAAA,CAAAJ,cAAAA,CAAC5B,CAAAA,CAAA,CAAkB,GAAA,CAAKU,CAAAA,CAAY,SAAA,CAAWF,CAAAA,CAC5C,QAAA,CAAAH,CAAAA,CAAS,GAAA,CAAKY,CAAAA,EACbW,cAAAA,CAACK,mBAAAA,CAAA,CAEC,cAAA,CAAgB7B,CAAAA,CAChB,EAAA,CAAIa,EAAQ,EAAA,CACZ,QAAA,CAAUR,CAAAA,CAET,QAAA,CAAAQ,CAAAA,CAAQ,QAAA,CAAA,CALJA,CAAAA,CAAQ,EAMf,CACD,CAAA,CACH,CAAA,CACF,CAAA,CACF,CAEJ","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/SortableList/index.tsx"],"names":["ElementsContainer","styled","SortableList","id","onClickElement","elements","onChange","onDragOver","className","disabled","setNodeRef","useDroppable","handleDragOver","active","over","delta","activeIndex","element","overIndex","updatedItems","elementToUpdate","arrayMove","handleDragEnd","sensors","useSensors","useSensor","MouseSensor","KeyboardSensor","jsx","DndContext","closestCorners","SortableContext","verticalListSortingStrategy","SortableElement"],"mappings":"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","file":"chunk-HCMJMPCZ.cjs","sourcesContent":["import {\n useDroppable,\n DndContext,\n DragEndEvent,\n DragOverEvent,\n closestCorners,\n useSensor,\n useSensors,\n} from '@dnd-kit/core';\nimport { SortableContext, arrayMove, verticalListSortingStrategy } from '@dnd-kit/sortable';\n\nimport styled from '@emotion/styled';\nimport { KeyboardSensor, MouseSensor } from './sensors';\nimport SortableElement from './SortableElement';\n\nconst ElementsContainer = styled.div`\n display: flex;\n flex-direction: column;\n`;\n\nexport type Element = {\n id: string;\n children: JSX.Element;\n};\n\nexport type SortableListProps = {\n id: string;\n elements: Element[];\n onChange: (elements: Element[]) => void;\n onDragOver?: (elements: Element[]) => void;\n onClickElement?: (elementId: string) => void;\n className: string;\n disabled?: boolean;\n};\n\nexport default function SortableList({\n id,\n onClickElement = () => null,\n elements = [],\n onChange,\n onDragOver = () => null,\n className = '',\n disabled = false,\n}: SortableListProps) {\n const { setNodeRef } = useDroppable({ id });\n\n const handleDragOver = ({ active, over, delta }: DragOverEvent) => {\n const belowDragDistanceThreshold = Math.abs(delta.x) < 1 && Math.abs(delta.y) < 1;\n if (belowDragDistanceThreshold) {\n return onClickElement(active.id as string);\n }\n\n const activeIndex = elements.findIndex((element) => element.id === active.id);\n const overIndex = elements.findIndex((element) => element.id === over?.id);\n\n const updatedItems = (elementToUpdate: any) =>\n arrayMove<Element>(elementToUpdate, activeIndex, overIndex);\n\n if (over?.id) {\n onDragOver(updatedItems(elements));\n }\n return false;\n };\n\n const handleDragEnd = ({ active, over, delta }: DragEndEvent) => {\n const belowDragDistanceThreshold = Math.abs(delta.x) < 1 && Math.abs(delta.y) < 1;\n if (belowDragDistanceThreshold) {\n return onClickElement(active.id as string);\n }\n\n const activeIndex = elements.findIndex((element) => element.id === active.id);\n const overIndex = elements.findIndex((element) => element.id === over?.id);\n\n const updatedItems = (elementToUpdate: any) =>\n arrayMove<Element>(elementToUpdate, activeIndex, overIndex);\n\n if (over?.id) {\n onChange(updatedItems(elements));\n }\n\n return null;\n };\n\n const sensors = useSensors(useSensor(MouseSensor), useSensor(KeyboardSensor));\n\n return (\n <DndContext\n collisionDetection={closestCorners}\n onDragOver={handleDragOver}\n onDragEnd={handleDragEnd}\n sensors={sensors}\n >\n <SortableContext id={id} items={elements} strategy={verticalListSortingStrategy}>\n <ElementsContainer ref={setNodeRef} className={className}>\n {elements.map((element) => (\n <SortableElement\n key={element.id}\n onClickElement={onClickElement}\n id={element.id}\n disabled={disabled}\n >\n {element.children}\n </SortableElement>\n ))}\n </ElementsContainer>\n </SortableContext>\n </DndContext>\n );\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {a}from'./chunk-YTIIAU4W.js';import {useState,useRef,useEffect,useMemo,useCallback,Children,isValidElement,Fragment as Fragment$1}from'react';import {LuChevronUp,LuChevronDown}from'react-icons/lu';import {jsxs,Fragment,jsx}from'react/jsx-runtime';function Q({sections:e,activeSectionId:r=void 0,onSectionSelect:n,collapsedLabel:u="Contents",ariaLabel:c="Section navigation",sticky:f=true,stickyOffset:L=void 0,classNames:a$1={}}){let[g,v]=useState(false),w=useRef(null),h=r??e[0]?.id,M=e.find(t=>t.id===h);useEffect(()=>{if(!g)return;let t=i=>{w.current&&!w.current.contains(i.target)&&v(false);};return document.addEventListener("mousedown",t),()=>{document.removeEventListener("mousedown",t);}},[g]);let T=t=>{n(t),v(false);};return jsxs(Fragment,{children:[jsxs("div",{ref:w,className:a("z-20 @lg:hidden",f&&"sticky",f&&(L??"top-4"),a$1.mobileWrapper),children:[jsxs("button",{type:"button",onClick:()=>v(t=>!t),"aria-expanded":g,"aria-label":c,className:a("flex w-full items-center justify-between rounded-lg border border-green-500 bg-white px-4 py-2 text-left shadow-sm",a$1.trigger),children:[jsx("span",{className:"text-sm font-semibold text-green-800",children:M?.label??u}),g?jsx(LuChevronUp,{size:16,className:"shrink-0 text-green-800"}):jsx(LuChevronDown,{size:16,className:"shrink-0 text-green-800"})]}),g&&jsx("nav",{"aria-label":c,className:a("absolute top-full right-0 left-0 mt-1 overflow-hidden rounded-lg border border-green-500 bg-white shadow-lg",a$1.dropdown),children:e.map(t=>{let i=h===t.id;return jsx("button",{type:"button",onClick:()=>T(t.id),"aria-current":i?"true":void 0,className:a("block w-full px-4 py-2.5 text-left text-sm transition-colors",i?"bg-green-200 font-semibold text-green-800":"text-gray-700 hover:bg-green-100 hover:text-green-800",a$1.dropdownItem,i&&a$1.activeItem),children:t.label},t.id)})})]}),jsx("aside",{className:a("hidden h-fit w-[290px] shrink-0 @lg:block",f&&"sticky",f&&(L??"top-0"),a$1.sidebar),children:jsx("nav",{"aria-label":c,className:"relative mt-4 flex flex-col gap-0.5 pl-3 before:absolute before:top-0 before:bottom-0 before:left-0 before:w-px before:bg-green-500",children:e.map(t=>{let i=h===t.id;return jsx("button",{type:"button",onClick:()=>n(t.id),"aria-current":i?"true":void 0,className:a("relative h-8 cursor-pointer rounded-r-md px-3 text-left text-base leading-normal transition-colors",i?"font-bold text-green-800 before:absolute before:top-0 before:bottom-0 before:-left-3 before:w-[2px] before:rounded-full before:bg-green-800":"text-gray-700 hover:text-green-800",a$1.sidebarItem,i&&a$1.activeItem),children:t.label},t.id)})})})]})}var O=2,Z=3e3;function W(e){let r=e;for(;r;){let{overflowY:n}=window.getComputedStyle(r);if((n==="auto"||n==="scroll"||n==="overlay")&&r.scrollHeight>r.clientHeight)return r;r=r.parentElement;}return window}function z(e){return e instanceof Window?0:e.getBoundingClientRect().top}function I(e){return e instanceof Window?window.scrollY:e.scrollTop}function ee(e,r,n){let u=I(e)+(r.getBoundingClientRect().top-z(e))-n,c=e instanceof Window?document.documentElement.scrollHeight-window.innerHeight:e.scrollHeight-e.clientHeight;return Math.max(0,Math.min(u,c))}function te(e,r,n){if(e instanceof Window){window.scrollTo({top:r,behavior:n});return}e.scrollTo({top:r,behavior:n});}function ne({id:e,children:r,className:n=void 0}){return jsx("section",{id:e,"data-scrolling-sidebar-section":"",className:n,children:r})}function D(e,r){Children.forEach(e,n=>{if(isValidElement(n)){if(n.type===ne){let{id:u,label:c}=n.props;r.push({id:u,label:c});return}n.type===Fragment$1&&D(n.props.children,r);}});}function se({children:e,defaultActiveSectionId:r=void 0,onActiveSectionChange:n=void 0,onSectionSelect:u=void 0,scrollOffset:c=0,scrollBehavior:f="smooth",collapsedLabel:L=void 0,ariaLabel:a$1=void 0,sticky:g=void 0,stickyOffset:v=void 0,className:w=void 0,contentClassName:h=void 0,sidebarClassNames:M=void 0}){let T=useMemo(()=>{let o=[];return D(e,o),o},[e]),t=useRef(null),i=useRef(false),E=useRef(null),[H,q]=useState(r??T[0]?.id??""),P=useRef(H),B=useRef(n);B.current=n;let A=useCallback(o=>{P.current!==o&&(P.current=o,q(o),B.current?.(o));},[]),G=o=>t.current?.querySelector(`#${CSS.escape(o)}`)??null;useEffect(()=>()=>E.current?.(),[]),useEffect(()=>{let o=t.current;if(!o)return;let x=W(o),R=x,s=()=>{if(i.current)return;let b=Array.from(o.querySelectorAll("[data-scrolling-sidebar-section]"));if(b.length===0)return;let C=z(x)+c+1,y=b.filter(m=>m.getBoundingClientRect().top<=C).sort((m,p)=>p.getBoundingClientRect().top-m.getBoundingClientRect().top)[0]??b[0];A(y.id);};return R.addEventListener("scroll",s,{passive:true}),window.addEventListener("resize",s),s(),()=>{R.removeEventListener("scroll",s),window.removeEventListener("resize",s);}},[c,A]);let V=o=>{u?.(o),A(o);let x=t.current,R=G(o);if(!x||!R)return;let s=W(x),b=s,C=ee(s,R,c);if(E.current?.(),Math.abs(I(s)-C)<=O)return;i.current=true,te(s,C,f);let y=new AbortController,m=0,p=()=>{window.clearTimeout(m),y.abort(),E.current=null,i.current=false;},X=()=>{Math.abs(I(s)-C)<=O&&p();};E.current=p,b.addEventListener("scroll",X,{passive:true,signal:y.signal}),b.addEventListener("scrollend",p,{signal:y.signal}),m=window.setTimeout(p,Z);};return jsx("div",{ref:t,className:a("@container",w),children:jsxs("div",{className:"flex flex-col gap-8 @lg:flex-row @lg:gap-10",children:[jsx(Q,{sections:T,activeSectionId:H,onSectionSelect:V,collapsedLabel:L,ariaLabel:a$1,sticky:g,stickyOffset:v,classNames:M}),jsx("div",{className:a("min-w-0 flex-1",h),children:e})]})})}export{Q as a,ne as b,se as c};//# sourceMappingURL=chunk-I3WHD5JH.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-I3WHD5JH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/v2/scrolling-sidebar/scrolling-sidebar.tsx"],"names":["ScrollingSidebar","sections","activeSectionId","onSectionSelect","collapsedLabel","ariaLabel","sticky","stickyOffset","classNames","isOpen","setIsOpen","useState","dropdownRef","useRef","resolvedActiveId","activeSection","section","useEffect","handleClickOutside","event","handleSelect","sectionId","jsxs","Fragment","cn","prev","jsx","LuChevronUp","LuChevronDown","isActive","PROGRAMMATIC_SCROLL_ARRIVAL_PX","PROGRAMMATIC_SCROLL_MAX_MS","getScrollParent","node","current","overflowY","scrollRootTop","root","currentScrollTop","sectionScrollTop","element","offset","desired","max","scrollRootTo","top","behavior","ScrollingSidebarContent","id","children","className","collectSections","acc","Children","child","isValidElement","label","ScrollingSidebarContainer","defaultActiveSectionId","onActiveSectionChange","scrollOffset","scrollBehavior","contentClassName","sidebarClassNames","useMemo","collected","containerRef","isProgrammaticScrollRef","cancelSettleRef","setActiveSectionId","activeSectionIdRef","onActiveSectionChangeRef","commitActive","useCallback","findSection","container","scrollTarget","updateActive","elements","threshold","next","a","b","targetTop","controller","maxTimer","finish","onScroll"],"mappings":"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","file":"chunk-I3WHD5JH.js","sourcesContent":["import {\n Children,\n Fragment,\n isValidElement,\n ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { LuChevronDown, LuChevronUp } from 'react-icons/lu';\n\nimport { cn } from '@/lib/utils';\n\nexport type ScrollingSidebarSection = {\n /** Unique identifier for the section. Typically matches the `id` of the target element to scroll to. */\n id: string;\n /** Content rendered for the section entry in the sidebar/dropdown. */\n label: ReactNode;\n};\n\nexport type ScrollingSidebarProps = {\n /** Ordered list of sections to render. Works with any number of sections. */\n sections: ReadonlyArray<ScrollingSidebarSection>;\n /** The `id` of the currently active section. When omitted, the first section is highlighted. */\n activeSectionId?: string;\n /** Invoked with the section `id` when a section entry is selected. */\n onSectionSelect: (sectionId: string) => void;\n /**\n * Label shown on the collapsed (narrow-container) trigger when no section is active.\n * Defaults to `'Contents'`.\n */\n collapsedLabel?: string;\n /** Accessible label applied to the navigation landmarks. Defaults to `'Section navigation'`. */\n ariaLabel?: string;\n /**\n * Whether both variants stick to the top of the scroll container while scrolling.\n * Defaults to `true` — sticky behavior is core to the pattern. Set to `false` to opt out\n * and let the component scroll away with the page.\n */\n sticky?: boolean;\n /**\n * Tailwind `top-*` class controlling the sticky offset for both variants — useful when the\n * page has a fixed/sticky header to clear (e.g. `'top-16'`). Overrides the built-in defaults\n * (`top-4` collapsed, `top-0` expanded). Ignored when `sticky` is `false`. For per-variant\n * control, use `classNames.mobileWrapper` / `classNames.sidebar` instead.\n */\n stickyOffset?: string;\n classNames?: {\n /** Applied to the collapsed-variant sticky wrapper (the outer container that sticks). */\n mobileWrapper?: string;\n /** Applied to the collapsed-variant trigger button. */\n trigger?: string;\n /** Applied to the collapsed-variant dropdown container. */\n dropdown?: string;\n /** Applied to each collapsed-variant dropdown item. */\n dropdownItem?: string;\n /** Applied to the expanded-variant sidebar `<aside>`. */\n sidebar?: string;\n /** Applied to each expanded-variant sidebar item. */\n sidebarItem?: string;\n /** Applied to the active item (both variants). */\n activeItem?: string;\n };\n};\n\n/**\n * A sticky navigation sidebar that tracks the active section of a long, scrollable page.\n *\n * Renders a collapsible dropdown when its container is narrow (below the `@lg` container\n * breakpoint) and an always-visible vertical sidebar when it is wide. The switch is driven by\n * container queries — the width of the component's own container, not the viewport — so it\n * collapses correctly even when placed in a column that doesn't span the full screen. The\n * component is presentational and controlled — scroll tracking and scrolling-into-view are\n * owned by the consumer via `activeSectionId` and `onSectionSelect`.\n *\n * It renders its two responsive variants as sibling elements (no wrapping element) so the\n * desktop sidebar can participate directly in the parent layout. Place it as a direct child of\n * a flex container next to the scrollable content, and mark an ancestor `@container` so the\n * container queries have a context to measure, e.g.\n * `<div className=\"@container flex flex-col @lg:flex-row\">` — so the sidebar's `position: sticky`\n * is anchored to the scroll container rather than a wrapper. ({@link ScrollingSidebarContainer}\n * sets up the `@container` for you.)\n *\n * Both variants stick to the top by default. Use `stickyOffset` to clear a fixed header,\n * or `sticky={false}` to opt out entirely.\n */\nexport function ScrollingSidebar({\n sections,\n activeSectionId = undefined,\n onSectionSelect,\n collapsedLabel = 'Contents',\n ariaLabel = 'Section navigation',\n sticky = true,\n stickyOffset = undefined,\n classNames = {},\n}: ScrollingSidebarProps) {\n const [isOpen, setIsOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n const resolvedActiveId = activeSectionId ?? sections[0]?.id;\n const activeSection = sections.find((section) => section.id === resolvedActiveId);\n\n // Close the dropdown when clicking outside of it.\n useEffect(() => {\n if (!isOpen) return undefined;\n\n const handleClickOutside = (event: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isOpen]);\n\n const handleSelect = (sectionId: string) => {\n onSectionSelect(sectionId);\n setIsOpen(false);\n };\n\n return (\n <>\n {/* Mobile/tablet: collapsible dropdown */}\n <div\n ref={dropdownRef}\n className={cn(\n 'z-20 @lg:hidden',\n sticky && 'sticky',\n sticky && (stickyOffset ?? 'top-4'),\n classNames.mobileWrapper,\n )}\n >\n <button\n type=\"button\"\n onClick={() => setIsOpen((prev) => !prev)}\n aria-expanded={isOpen}\n aria-label={ariaLabel}\n className={cn(\n 'flex w-full items-center justify-between rounded-lg border border-green-500 bg-white px-4 py-2 text-left shadow-sm',\n classNames.trigger,\n )}\n >\n <span className=\"text-sm font-semibold text-green-800\">\n {activeSection?.label ?? collapsedLabel}\n </span>\n {isOpen ? (\n <LuChevronUp size={16} className=\"shrink-0 text-green-800\" />\n ) : (\n <LuChevronDown size={16} className=\"shrink-0 text-green-800\" />\n )}\n </button>\n\n {isOpen && (\n <nav\n aria-label={ariaLabel}\n className={cn(\n 'absolute top-full right-0 left-0 mt-1 overflow-hidden rounded-lg border border-green-500 bg-white shadow-lg',\n classNames.dropdown,\n )}\n >\n {sections.map((section) => {\n const isActive = resolvedActiveId === section.id;\n\n return (\n <button\n key={section.id}\n type=\"button\"\n onClick={() => handleSelect(section.id)}\n aria-current={isActive ? 'true' : undefined}\n className={cn(\n 'block w-full px-4 py-2.5 text-left text-sm transition-colors',\n isActive\n ? 'bg-green-200 font-semibold text-green-800'\n : 'text-gray-700 hover:bg-green-100 hover:text-green-800',\n classNames.dropdownItem,\n isActive && classNames.activeItem,\n )}\n >\n {section.label}\n </button>\n );\n })}\n </nav>\n )}\n </div>\n\n {/* Desktop: always-visible sidebar */}\n <aside\n className={cn(\n 'hidden h-fit w-[290px] shrink-0 @lg:block',\n sticky && 'sticky',\n sticky && (stickyOffset ?? 'top-0'),\n classNames.sidebar,\n )}\n >\n <nav\n aria-label={ariaLabel}\n className=\"relative mt-4 flex flex-col gap-0.5 pl-3 before:absolute before:top-0 before:bottom-0 before:left-0 before:w-px before:bg-green-500\"\n >\n {sections.map((section) => {\n const isActive = resolvedActiveId === section.id;\n\n return (\n <button\n key={section.id}\n type=\"button\"\n onClick={() => onSectionSelect(section.id)}\n aria-current={isActive ? 'true' : undefined}\n className={cn(\n 'relative h-8 cursor-pointer rounded-r-md px-3 text-left text-base leading-normal transition-colors',\n isActive\n ? 'font-bold text-green-800 before:absolute before:top-0 before:bottom-0 before:-left-3 before:w-[2px] before:rounded-full before:bg-green-800'\n : 'text-gray-700 hover:text-green-800',\n classNames.sidebarItem,\n isActive && classNames.activeItem,\n )}\n >\n {section.label}\n </button>\n );\n })}\n </nav>\n </aside>\n </>\n );\n}\n\ntype ScrollRoot = HTMLElement | Window;\n\n/** Distance (px) from the target scroll position at which a programmatic scroll counts as arrived. */\nconst PROGRAMMATIC_SCROLL_ARRIVAL_PX = 2;\n/** Hard cap so the scroll-spy always resumes even if the scroll never quite reaches the target. */\nconst PROGRAMMATIC_SCROLL_MAX_MS = 3000;\n\n/**\n * Finds the nearest scrollable ancestor of `node` (inclusive), falling back to `window` when\n * the page itself is the scroll container. Lets the container work whether it establishes its\n * own scroll region (via `overflow`) or sits inside a scrolling app shell.\n */\nfunction getScrollParent(node: HTMLElement): ScrollRoot {\n let current: HTMLElement | null = node;\n while (current) {\n const { overflowY } = window.getComputedStyle(current);\n const isScrollable = overflowY === 'auto' || overflowY === 'scroll' || overflowY === 'overlay';\n if (isScrollable && current.scrollHeight > current.clientHeight) return current;\n current = current.parentElement;\n }\n return window;\n}\n\nfunction scrollRootTop(root: ScrollRoot): number {\n return root instanceof Window ? 0 : root.getBoundingClientRect().top;\n}\n\nfunction currentScrollTop(root: ScrollRoot): number {\n return root instanceof Window ? window.scrollY : root.scrollTop;\n}\n\n/** The scroll position (clamped to the scrollable range) that lands `element` at the top, minus `offset`. */\nfunction sectionScrollTop(root: ScrollRoot, element: HTMLElement, offset: number): number {\n const desired =\n currentScrollTop(root) + (element.getBoundingClientRect().top - scrollRootTop(root)) - offset;\n const max =\n root instanceof Window\n ? document.documentElement.scrollHeight - window.innerHeight\n : root.scrollHeight - root.clientHeight;\n return Math.max(0, Math.min(desired, max));\n}\n\nfunction scrollRootTo(root: ScrollRoot, top: number, behavior: ScrollBehavior): void {\n if (root instanceof Window) {\n window.scrollTo({ top, behavior });\n return;\n }\n root.scrollTo({ top, behavior });\n}\n\nexport type ScrollingSidebarContentProps = {\n /** Unique identifier for the section — used as the scroll-target `id` and to match the sidebar entry. */\n id: string;\n /**\n * Content rendered for this section's entry in the sidebar/dropdown. Read by the parent\n * {@link ScrollingSidebarContainer} when it scans its children — not rendered by this component.\n */\n // eslint-disable-next-line react/no-unused-prop-types\n label: ReactNode;\n /** The section body. */\n children: ReactNode;\n /** Applied to the rendered `<section>` wrapper. */\n className?: string;\n};\n\n/**\n * A section within a {@link ScrollingSidebarContainer}. Renders its `children` inside a\n * `<section id={id}>` scroll target and declares — via its `id` and `label` — the sidebar entry\n * the container should generate for it. The container discovers these by scanning its `children`\n * for `ScrollingSidebarContent` elements, so there's no separate `sections` list to keep in sync.\n *\n * ```tsx\n * <ScrollingSidebarContainer>\n * <ScrollingSidebarContent id=\"general\" label=\"General\">…</ScrollingSidebarContent>\n * <ScrollingSidebarContent id=\"exams\" label={<div>Exams</div>}>…</ScrollingSidebarContent>\n * </ScrollingSidebarContainer>\n * ```\n */\nexport function ScrollingSidebarContent({\n id,\n children,\n className = undefined,\n}: ScrollingSidebarContentProps) {\n return (\n <section id={id} data-scrolling-sidebar-section=\"\" className={className}>\n {children}\n </section>\n );\n}\n\n/**\n * Walks `children` (descending into fragments) and collects a `{ id, label }` entry for every\n * {@link ScrollingSidebarContent} it finds, preserving document order. This is what lets the\n * container derive its navigation from the content instead of a parallel `sections` prop.\n */\nfunction collectSections(children: ReactNode, acc: ScrollingSidebarSection[]): void {\n Children.forEach(children, (child) => {\n if (!isValidElement(child)) return;\n if (child.type === ScrollingSidebarContent) {\n const { id, label } = child.props as ScrollingSidebarContentProps;\n acc.push({ id, label });\n return;\n }\n if (child.type === Fragment) {\n collectSections((child.props as { children?: ReactNode }).children, acc);\n }\n });\n}\n\nexport type ScrollingSidebarContainerProps = {\n /**\n * The scrollable page content. Each {@link ScrollingSidebarContent} child becomes a sidebar\n * entry — the container reads its `id` and `label` to build the navigation and to track/scroll\n * to it. Non-`ScrollingSidebarContent` children render normally but aren't tracked.\n */\n children: ReactNode;\n /** The section highlighted before the user scrolls or selects. Defaults to the first section. */\n defaultActiveSectionId?: string;\n /** Called whenever the active section changes, from scrolling or selection. */\n onActiveSectionChange?: (sectionId: string) => void;\n /** Called when the user selects a section from the sidebar (before the scroll animation). */\n onSectionSelect?: (sectionId: string) => void;\n /**\n * Pixels from the top of the scroll container used both to decide the active section and as\n * the landing offset when scrolling to one — increase it to clear a fixed header. Defaults to `0`.\n */\n scrollOffset?: number;\n /** Scroll animation used when selecting a section. Defaults to `'smooth'`. */\n scrollBehavior?: ScrollBehavior;\n /** @see ScrollingSidebarProps.collapsedLabel */\n collapsedLabel?: string;\n /** @see ScrollingSidebarProps.ariaLabel */\n ariaLabel?: string;\n /** @see ScrollingSidebarProps.sticky */\n sticky?: boolean;\n /** @see ScrollingSidebarProps.stickyOffset */\n stickyOffset?: string;\n /** Applied to the outer `@container` wrapper. Add `overflow-y-auto` + a height here to make the container its own scroll region. */\n className?: string;\n /** Applied to the content column that wraps `children`. */\n contentClassName?: string;\n /** Forwarded to the underlying `ScrollingSidebar` `classNames`. */\n sidebarClassNames?: ScrollingSidebarProps['classNames'];\n};\n\n/**\n * A batteries-included wrapper around {@link ScrollingSidebar} that owns everything a consumer\n * would otherwise wire up by hand: the layout, the scroll container detection, active-section\n * tracking while scrolling, and smooth scrolling to a section on select.\n *\n * Compose the page from {@link ScrollingSidebarContent} children — each one's `id` and `label`\n * become a sidebar entry, so the navigation is derived from the content and there's no parallel\n * `sections` list to keep in sync.\n *\n * ```tsx\n * <ScrollingSidebarContainer>\n * <ScrollingSidebarContent id=\"general\" label=\"General\">…</ScrollingSidebarContent>\n * <ScrollingSidebarContent id=\"exams\" label={<div>Exams</div>}>…</ScrollingSidebarContent>\n * </ScrollingSidebarContainer>\n * ```\n *\n * The container tracks scrolling on its nearest scrollable ancestor, or on the container itself\n * when you give it `overflow-y-auto` and a height via `className`.\n */\nexport function ScrollingSidebarContainer({\n children,\n defaultActiveSectionId = undefined,\n onActiveSectionChange = undefined,\n onSectionSelect = undefined,\n scrollOffset = 0,\n scrollBehavior = 'smooth',\n collapsedLabel = undefined,\n ariaLabel = undefined,\n sticky = undefined,\n stickyOffset = undefined,\n className = undefined,\n contentClassName = undefined,\n sidebarClassNames = undefined,\n}: ScrollingSidebarContainerProps) {\n // Derive the navigation from the `ScrollingSidebarContent` children rather than a parallel prop,\n // so the sidebar and the content can never drift out of sync.\n const sections = useMemo(() => {\n const collected: ScrollingSidebarSection[] = [];\n collectSections(children, collected);\n return collected;\n }, [children]);\n\n const containerRef = useRef<HTMLDivElement>(null);\n const isProgrammaticScrollRef = useRef(false);\n const cancelSettleRef = useRef<(() => void) | null>(null);\n const [activeSectionId, setActiveSectionId] = useState(\n defaultActiveSectionId ?? sections[0]?.id ?? '',\n );\n const activeSectionIdRef = useRef(activeSectionId);\n const onActiveSectionChangeRef = useRef(onActiveSectionChange);\n onActiveSectionChangeRef.current = onActiveSectionChange;\n\n const commitActive = useCallback((sectionId: string) => {\n if (activeSectionIdRef.current === sectionId) return;\n activeSectionIdRef.current = sectionId;\n setActiveSectionId(sectionId);\n onActiveSectionChangeRef.current?.(sectionId);\n }, []);\n\n const findSection = (sectionId: string) =>\n containerRef.current?.querySelector<HTMLElement>(`#${CSS.escape(sectionId)}`) ?? null;\n\n // Tear down any in-flight programmatic-scroll guard (timers + listeners) on unmount.\n useEffect(() => () => cancelSettleRef.current?.(), []);\n\n // Track the active section as the user scrolls the nearest scroll container.\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return undefined;\n\n const root = getScrollParent(container);\n const scrollTarget: EventTarget = root;\n\n const updateActive = () => {\n if (isProgrammaticScrollRef.current) return;\n const elements = Array.from(\n container.querySelectorAll<HTMLElement>('[data-scrolling-sidebar-section]'),\n );\n if (elements.length === 0) return;\n\n const threshold = scrollRootTop(root) + scrollOffset + 1;\n const next =\n elements\n .filter((element) => element.getBoundingClientRect().top <= threshold)\n .sort((a, b) => b.getBoundingClientRect().top - a.getBoundingClientRect().top)[0] ??\n elements[0];\n commitActive(next.id);\n };\n\n scrollTarget.addEventListener('scroll', updateActive, { passive: true });\n window.addEventListener('resize', updateActive);\n updateActive();\n\n return () => {\n scrollTarget.removeEventListener('scroll', updateActive);\n window.removeEventListener('resize', updateActive);\n };\n }, [scrollOffset, commitActive]);\n\n const handleSelect = (sectionId: string) => {\n onSectionSelect?.(sectionId);\n commitActive(sectionId);\n\n const container = containerRef.current;\n const element = findSection(sectionId);\n if (!container || !element) return;\n\n const root = getScrollParent(container);\n const scrollTarget: EventTarget = root;\n const targetTop = sectionScrollTop(root, element, scrollOffset);\n\n // Cancel any in-flight guard from a previous selection before starting a new scroll.\n cancelSettleRef.current?.();\n\n // Nothing to animate — just leave the highlight on the (already committed) target.\n if (Math.abs(currentScrollTop(root) - targetTop) <= PROGRAMMATIC_SCROLL_ARRIVAL_PX) return;\n\n isProgrammaticScrollRef.current = true;\n scrollRootTo(root, targetTop, scrollBehavior);\n\n // Suppress the scroll-spy until the scroll actually reaches the target. A fixed timeout is\n // wrong — a long scroll outlasts it and the spy re-activates mid-flight, flashing the\n // sections passing under the threshold. Holding the guard until we arrive (or the scroll\n // ends) releases it the instant we're there and never suppresses later user scrolls.\n const controller = new AbortController();\n let maxTimer = 0;\n const finish = () => {\n window.clearTimeout(maxTimer);\n controller.abort();\n cancelSettleRef.current = null;\n isProgrammaticScrollRef.current = false;\n };\n const onScroll = () => {\n if (Math.abs(currentScrollTop(root) - targetTop) <= PROGRAMMATIC_SCROLL_ARRIVAL_PX) finish();\n };\n\n cancelSettleRef.current = finish;\n scrollTarget.addEventListener('scroll', onScroll, { passive: true, signal: controller.signal });\n scrollTarget.addEventListener('scrollend', finish, { signal: controller.signal });\n maxTimer = window.setTimeout(finish, PROGRAMMATIC_SCROLL_MAX_MS);\n };\n\n return (\n // `@container` establishes the query context so every `@lg:` variant below responds to this\n // element's width rather than the viewport. The flex layout lives on an inner element because\n // container-query variants apply to a query container's descendants, never to itself — putting\n // `@lg:flex-row` here (a descendant) is what lets the layout switch; on the `@container`\n // element it would silently never match.\n <div ref={containerRef} className={cn('@container', className)}>\n <div className=\"flex flex-col gap-8 @lg:flex-row @lg:gap-10\">\n <ScrollingSidebar\n sections={sections}\n activeSectionId={activeSectionId}\n onSectionSelect={handleSelect}\n collapsedLabel={collapsedLabel}\n ariaLabel={ariaLabel}\n sticky={sticky}\n stickyOffset={stickyOffset}\n classNames={sidebarClassNames}\n />\n <div className={cn('min-w-0 flex-1', contentClassName)}>{children}</div>\n </div>\n </div>\n );\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {a}from'./chunk-7GJG2HUA.js';import {a as a$3}from'./chunk-4GCD4SP5.js';import {a as a$4}from'./chunk-274XPO4S.js';import {a as a$5}from'./chunk-XJ7ZDJZG.js';import {a as a$9}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {a as a$1}from'./chunk-Q27GDY4Y.js';import {a}from'./chunk-7GJG2HUA.js';import {a as a$3}from'./chunk-4GCD4SP5.js';import {a as a$4}from'./chunk-274XPO4S.js';import {a as a$5}from'./chunk-XJ7ZDJZG.js';import {a as a$9}from'./chunk-UPX2X3IK.js';import {a as a$8}from'./chunk-ZF7TZTE3.js';import {a as a$7}from'./chunk-44OJTSLO.js';import {a as a$2}from'./chunk-HDSZKGQO.js';import {a as a$6}from'./chunk-NUYCR4PO.js';import {a as a$a}from'./chunk-YTIIAU4W.js';import {forwardRef,useImperativeHandle,useCallback}from'react';import {jsxs,jsx}from'react/jsx-runtime';var ae=forwardRef((C,P)=>{let{id:x,value:s,onChange:D,placeholder:F,defaultOptions:T=[],options:K=[],delay:V,onSearch:n,triggerSearchOnOpen:W,loading:B=false,loadingIndicator:E,emptyIndicator:H,maxSelected:k=0,onMaxSelected:q,hidePlaceholderWhenSelected:L=true,disabled:a$b,className:Y,classNames:z,badgeWrapperClassName:A,badgeClassName:G,getBadgeClassName:J=()=>"",selectFirstItem:Q=true,commandProps:e,inputProps:U,persistInputOnSelect:X=false,persistInputOnBlur:Z=false}=C,{inputRef:t,commandRef:c,onSearchRef:_,scrollbarRef:u,prevExternalOptionsRef:$}=a({onSearch:n}),{uniqueId:p,open:o,setOpen:m,selected:r,setSelected:l,options:j,setOptions:ee,inputSearchValue:te,setInputSearchValue:d,debouncedSearchTerm:re}=a$1({id:x,value:s,defaultOptions:T,delay:V}),{toggleOption:f,handleKeyDown:oe}=a$2({open:o,selected:r,maxSelected:k,onChange:D,onMaxSelected:q,setInputSearchValue:d,commandRef:c,inputRef:t,setSelected:l,setOpen:m,persistInputOnSelect:X});a$3({debouncedSearchTerm:re,open:o,onSearchRef:_,triggerSearchOnOpen:W}),a$4({externalOptions:K,setOptions:ee,prevExternalOptionsRef:$}),a$5({value:s,setSelected:l}),useImperativeHandle(P,()=>({selectedValue:[...r],input:t.current,focus:()=>t?.current?.focus(),reset:()=>l([])}),[r,t,l]);let le=useCallback(()=>{if(e?.filter)return e.filter},[e?.filter]);return jsxs(a$6,{ref:c,...e,onKeyDown:S=>{oe(S),e?.onKeyDown?.(S);},className:a$a("h-auto overflow-visible bg-transparent",e?.className),shouldFilter:e?.shouldFilter!==void 0?e.shouldFilter:!n,filter:le(),children:[jsx(a$7,{open:o,disabled:a$b,inputRef:t,selected:r,uniqueId:p,className:Y,children:jsx(a$8,{selected:r,scrollbarRef:u,toggleOption:f,inputProps:U,inputRef:t,open:o,setOpen:m,placeholder:F,hidePlaceholderWhenSelected:L,disabled:a$b,classNames:z,badgeWrapperClassName:A,badgeClassName:G,getBadgeClassName:J,inputSearchValue:te,setInputSearchValue:d,persistInputOnBlur:Z})}),jsx(a$9,{uniqueId:p,scrollbarRef:u,open:o,loading:B,options:j,selected:r,toggleOption:f,onSearch:n,inputRef:t,emptyIndicator:H,loadingIndicator:E,selectFirstItem:Q})]})});ae.displayName="MultiSelect";export{ae as a};//# sourceMappingURL=chunk-IDC4CQDY.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-IDC4CQDY.js.map
|