@mieweb/ui 0.10.0-dev.30 → 0.10.0-dev.32
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/CsvBlock-CFXSDPBI.js +9 -0
- package/dist/{CsvBlock-VLMG7GUO.js.map → CsvBlock-CFXSDPBI.js.map} +1 -1
- package/dist/CsvBlock-RGO7JXHJ.cjs +18 -0
- package/dist/{CsvBlock-FX5YNGNE.cjs.map → CsvBlock-RGO7JXHJ.cjs.map} +1 -1
- package/dist/HtmlPreviewBlock-VBYXCXVT.cjs +18 -0
- package/dist/{HtmlPreviewBlock-UO37JQ3K.cjs.map → HtmlPreviewBlock-VBYXCXVT.cjs.map} +1 -1
- package/dist/HtmlPreviewBlock-Z2GCK325.js +9 -0
- package/dist/{HtmlPreviewBlock-5JE7L3GR.js.map → HtmlPreviewBlock-Z2GCK325.js.map} +1 -1
- package/dist/MermaidBlock-I2R2BQOX.cjs +18 -0
- package/dist/{MermaidBlock-RZ75RPZA.cjs.map → MermaidBlock-I2R2BQOX.cjs.map} +1 -1
- package/dist/MermaidBlock-XCAK7IA5.js +9 -0
- package/dist/{MermaidBlock-3XHFBAMV.js.map → MermaidBlock-XCAK7IA5.js.map} +1 -1
- package/dist/SurveyBlock-KI5JOWCL.js +9 -0
- package/dist/{SurveyBlock-MUVJ3JUI.js.map → SurveyBlock-KI5JOWCL.js.map} +1 -1
- package/dist/SurveyBlock-UKSGISRT.cjs +18 -0
- package/dist/{SurveyBlock-VH47YXZC.cjs.map → SurveyBlock-UKSGISRT.cjs.map} +1 -1
- package/dist/brands/index.cjs +7 -7
- package/dist/brands/index.js +2 -2
- package/dist/{chunk-6ZPTZTKN.js → chunk-24AFHH4J.js} +3 -3
- package/dist/{chunk-6ZPTZTKN.js.map → chunk-24AFHH4J.js.map} +1 -1
- package/dist/{chunk-TYE5K5WV.cjs → chunk-32ZCJOSR.cjs} +4 -4
- package/dist/{chunk-TYE5K5WV.cjs.map → chunk-32ZCJOSR.cjs.map} +1 -1
- package/dist/{chunk-SD7ONW6S.js → chunk-3DLLTITK.js} +4 -4
- package/dist/{chunk-SD7ONW6S.js.map → chunk-3DLLTITK.js.map} +1 -1
- package/dist/chunk-47P5QLX4.cjs +42 -0
- package/dist/chunk-47P5QLX4.cjs.map +1 -0
- package/dist/chunk-4ZB7RSMY.cjs +306 -0
- package/dist/chunk-4ZB7RSMY.cjs.map +1 -0
- package/dist/{chunk-WXFGHDTV.cjs → chunk-57G3O552.cjs} +13 -13
- package/dist/{chunk-WXFGHDTV.cjs.map → chunk-57G3O552.cjs.map} +1 -1
- package/dist/{chunk-D22GE27K.js → chunk-5A4SL436.js} +4 -4
- package/dist/{chunk-D22GE27K.js.map → chunk-5A4SL436.js.map} +1 -1
- package/dist/chunk-6BNZLN4B.cjs +548 -0
- package/dist/chunk-6BNZLN4B.cjs.map +1 -0
- package/dist/chunk-6JSFT2J5.js +130 -0
- package/dist/chunk-6JSFT2J5.js.map +1 -0
- package/dist/{chunk-NKV76R65.cjs → chunk-6M63CM7X.cjs} +26 -26
- package/dist/{chunk-NKV76R65.cjs.map → chunk-6M63CM7X.cjs.map} +1 -1
- package/dist/chunk-6N7NMOSV.js +233 -0
- package/dist/chunk-6N7NMOSV.js.map +1 -0
- package/dist/chunk-6TTCZY3P.cjs +4 -0
- package/dist/chunk-6TTCZY3P.cjs.map +1 -0
- package/dist/{chunk-TTSSUOEV.cjs → chunk-7C5W744U.cjs} +8 -8
- package/dist/{chunk-TTSSUOEV.cjs.map → chunk-7C5W744U.cjs.map} +1 -1
- package/dist/chunk-7HUTR6RX.js +178 -0
- package/dist/chunk-7HUTR6RX.js.map +1 -0
- package/dist/chunk-7IRTD4JT.cjs +61 -0
- package/dist/chunk-7IRTD4JT.cjs.map +1 -0
- package/dist/{chunk-YU55JD35.js → chunk-7QW6TU4X.js} +3 -3
- package/dist/{chunk-YU55JD35.js.map → chunk-7QW6TU4X.js.map} +1 -1
- package/dist/chunk-7WJ6MBF5.cjs +47 -0
- package/dist/chunk-7WJ6MBF5.cjs.map +1 -0
- package/dist/chunk-A4W5CSK7.cjs +216 -0
- package/dist/chunk-A4W5CSK7.cjs.map +1 -0
- package/dist/chunk-AMYFRY7K.js +3 -0
- package/dist/chunk-AMYFRY7K.js.map +1 -0
- package/dist/{chunk-X6A27RGO.cjs → chunk-ANMX7YDL.cjs} +2 -2
- package/dist/{chunk-X6A27RGO.cjs.map → chunk-ANMX7YDL.cjs.map} +1 -1
- package/dist/{chunk-DVOQ3JNO.js → chunk-B4CKCNWD.js} +16 -8
- package/dist/chunk-B4CKCNWD.js.map +1 -0
- package/dist/chunk-BJ6ABRSQ.cjs +256 -0
- package/dist/chunk-BJ6ABRSQ.cjs.map +1 -0
- package/dist/chunk-BXRQ6HEP.cjs +4 -0
- package/dist/chunk-BXRQ6HEP.cjs.map +1 -0
- package/dist/{chunk-TJCX4OML.cjs → chunk-C77FAR3F.cjs} +2 -2
- package/dist/{chunk-TJCX4OML.cjs.map → chunk-C77FAR3F.cjs.map} +1 -1
- package/dist/chunk-CBBKWRLG.js +213 -0
- package/dist/chunk-CBBKWRLG.js.map +1 -0
- package/dist/{chunk-BNH4SXJB.js → chunk-CMF7VCGP.js} +5 -5
- package/dist/{chunk-BNH4SXJB.js.map → chunk-CMF7VCGP.js.map} +1 -1
- package/dist/chunk-CPDNX3LS.cjs +47 -0
- package/dist/chunk-CPDNX3LS.cjs.map +1 -0
- package/dist/chunk-CVNPNZMX.js +44 -0
- package/dist/chunk-CVNPNZMX.js.map +1 -0
- package/dist/chunk-DHGCLPFZ.js +91 -0
- package/dist/chunk-DHGCLPFZ.js.map +1 -0
- package/dist/chunk-DO2YN46R.cjs +201 -0
- package/dist/chunk-DO2YN46R.cjs.map +1 -0
- package/dist/chunk-DVDT7TX7.js +151 -0
- package/dist/chunk-DVDT7TX7.js.map +1 -0
- package/dist/{chunk-R5Z7AOVU.cjs → chunk-DZ3JTMKM.cjs} +9 -9
- package/dist/{chunk-R5Z7AOVU.cjs.map → chunk-DZ3JTMKM.cjs.map} +1 -1
- package/dist/chunk-EACNRR3C.cjs +4 -0
- package/dist/chunk-EACNRR3C.cjs.map +1 -0
- package/dist/{chunk-E2PBPQGS.js → chunk-EEOGIGIA.js} +2 -2
- package/dist/{chunk-E2PBPQGS.js.map → chunk-EEOGIGIA.js.map} +1 -1
- package/dist/{chunk-QURJVPRH.cjs → chunk-EMRWTCCN.cjs} +41 -2
- package/dist/chunk-EMRWTCCN.cjs.map +1 -0
- package/dist/chunk-EPCUPHEO.js +193 -0
- package/dist/chunk-EPCUPHEO.js.map +1 -0
- package/dist/chunk-EPTP3VKT.js +283 -0
- package/dist/chunk-EPTP3VKT.js.map +1 -0
- package/dist/{chunk-HIZWOAWY.cjs → chunk-ERACGSDY.cjs} +8 -8
- package/dist/{chunk-HIZWOAWY.cjs.map → chunk-ERACGSDY.cjs.map} +1 -1
- package/dist/{chunk-VOQJHSXN.cjs → chunk-F2FOG4EG.cjs} +9 -9
- package/dist/{chunk-VOQJHSXN.cjs.map → chunk-F2FOG4EG.cjs.map} +1 -1
- package/dist/{chunk-GBUVIGD5.js → chunk-F3EWRDIT.js} +99 -3
- package/dist/chunk-F3EWRDIT.js.map +1 -0
- package/dist/{chunk-ZTMYKAVU.cjs → chunk-FCV7GBNQ.cjs} +24 -23
- package/dist/chunk-FCV7GBNQ.cjs.map +1 -0
- package/dist/{chunk-GVLNXPJX.js → chunk-FGLIP6YR.js} +4 -4
- package/dist/{chunk-GVLNXPJX.js.map → chunk-FGLIP6YR.js.map} +1 -1
- package/dist/chunk-FKGFOBC2.js +314 -0
- package/dist/chunk-FKGFOBC2.js.map +1 -0
- package/dist/chunk-FSGJXCBG.cjs +318 -0
- package/dist/chunk-FSGJXCBG.cjs.map +1 -0
- package/dist/chunk-FTEZNCRI.js +29 -0
- package/dist/chunk-FTEZNCRI.js.map +1 -0
- package/dist/{chunk-COM7RNZU.cjs → chunk-FYQZWLAM.cjs} +2 -2
- package/dist/{chunk-COM7RNZU.cjs.map → chunk-FYQZWLAM.cjs.map} +1 -1
- package/dist/{chunk-YVPC65ZJ.cjs → chunk-GF2BE4FB.cjs} +91 -32
- package/dist/chunk-GF2BE4FB.cjs.map +1 -0
- package/dist/{chunk-JEIW7BSV.cjs → chunk-GKDHMNUA.cjs} +2 -52
- package/dist/chunk-GKDHMNUA.cjs.map +1 -0
- package/dist/{chunk-N7C4OEP7.cjs → chunk-GM32IDVL.cjs} +6 -6
- package/dist/{chunk-N7C4OEP7.cjs.map → chunk-GM32IDVL.cjs.map} +1 -1
- package/dist/chunk-GNOQFTLL.cjs +286 -0
- package/dist/chunk-GNOQFTLL.cjs.map +1 -0
- package/dist/chunk-GY5SP4ST.js +3 -0
- package/dist/chunk-GY5SP4ST.js.map +1 -0
- package/dist/chunk-H2Y7HZV5.js +3 -0
- package/dist/chunk-H2Y7HZV5.js.map +1 -0
- package/dist/chunk-H3QPREIJ.js +195 -0
- package/dist/chunk-H3QPREIJ.js.map +1 -0
- package/dist/{chunk-QOVJ6Z6R.js → chunk-HDY7YQFX.js} +3 -3
- package/dist/{chunk-QOVJ6Z6R.js.map → chunk-HDY7YQFX.js.map} +1 -1
- package/dist/chunk-HNFFFFYH.cjs +114 -0
- package/dist/chunk-HNFFFFYH.cjs.map +1 -0
- package/dist/chunk-HNXLLDPN.js +25 -0
- package/dist/chunk-HNXLLDPN.js.map +1 -0
- package/dist/chunk-I2MMUFCN.cjs +154 -0
- package/dist/chunk-I2MMUFCN.cjs.map +1 -0
- package/dist/{chunk-GYXUS65N.cjs → chunk-IGDO62KR.cjs} +5 -5
- package/dist/{chunk-GYXUS65N.cjs.map → chunk-IGDO62KR.cjs.map} +1 -1
- package/dist/{chunk-JBIGSP2T.js → chunk-ILDLYRTP.js} +5 -4
- package/dist/chunk-ILDLYRTP.js.map +1 -0
- package/dist/{chunk-HC3NAN55.cjs → chunk-IPL2O2OL.cjs} +19 -19
- package/dist/{chunk-HC3NAN55.cjs.map → chunk-IPL2O2OL.cjs.map} +1 -1
- package/dist/chunk-ISUIKUX7.cjs +337 -0
- package/dist/chunk-ISUIKUX7.cjs.map +1 -0
- package/dist/{chunk-N5O47VGS.cjs → chunk-IVGI353O.cjs} +2 -2
- package/dist/{chunk-N5O47VGS.cjs.map → chunk-IVGI353O.cjs.map} +1 -1
- package/dist/chunk-IWRBJHO3.cjs +51 -0
- package/dist/chunk-IWRBJHO3.cjs.map +1 -0
- package/dist/{chunk-KRU6IGV7.js → chunk-JUJGWUAN.js} +28 -6
- package/dist/chunk-JUJGWUAN.js.map +1 -0
- package/dist/{chunk-BUT6MF5K.cjs → chunk-KQ6GLYFZ.cjs} +4 -4
- package/dist/{chunk-BUT6MF5K.cjs.map → chunk-KQ6GLYFZ.cjs.map} +1 -1
- package/dist/chunk-L6K4PRZK.cjs +4 -0
- package/dist/chunk-L6K4PRZK.cjs.map +1 -0
- package/dist/{chunk-P7UMS4E6.cjs → chunk-LC7PVBXH.cjs} +16 -8
- package/dist/chunk-LC7PVBXH.cjs.map +1 -0
- package/dist/chunk-LRRSD7LR.js +248 -0
- package/dist/chunk-LRRSD7LR.js.map +1 -0
- package/dist/chunk-LSMS6DY7.cjs +331 -0
- package/dist/chunk-LSMS6DY7.cjs.map +1 -0
- package/dist/chunk-M3VPGJMV.js +283 -0
- package/dist/chunk-M3VPGJMV.js.map +1 -0
- package/dist/{chunk-2JICT4A2.js → chunk-N54FYWG6.js} +3 -3
- package/dist/{chunk-2JICT4A2.js.map → chunk-N54FYWG6.js.map} +1 -1
- package/dist/chunk-N5JDL4VE.js +3 -0
- package/dist/chunk-N5JDL4VE.js.map +1 -0
- package/dist/{chunk-KGKBZN3T.cjs → chunk-NAH65KPK.cjs} +8 -8
- package/dist/{chunk-KGKBZN3T.cjs.map → chunk-NAH65KPK.cjs.map} +1 -1
- package/dist/chunk-O4WGSOJI.js +261 -0
- package/dist/chunk-O4WGSOJI.js.map +1 -0
- package/dist/{chunk-SVSHA7XV.js → chunk-O6XDA3SI.js} +31 -33
- package/dist/chunk-O6XDA3SI.js.map +1 -0
- package/dist/chunk-OIF34LEN.cjs +425 -0
- package/dist/chunk-OIF34LEN.cjs.map +1 -0
- package/dist/chunk-ORCCJ5VY.cjs +218 -0
- package/dist/chunk-ORCCJ5VY.cjs.map +1 -0
- package/dist/{chunk-CRS2CQWM.js → chunk-OSTSZDQC.js} +3 -3
- package/dist/{chunk-CRS2CQWM.js.map → chunk-OSTSZDQC.js.map} +1 -1
- package/dist/{chunk-MLAWXPRY.js → chunk-OZ5CKVQN.js} +41 -2
- package/dist/chunk-OZ5CKVQN.js.map +1 -0
- package/dist/chunk-P22YCUVM.cjs +4 -0
- package/dist/chunk-P22YCUVM.cjs.map +1 -0
- package/dist/chunk-P55LNEDH.cjs +306 -0
- package/dist/chunk-P55LNEDH.cjs.map +1 -0
- package/dist/{chunk-R6KPWIGO.js → chunk-P7D7BYFE.js} +4 -4
- package/dist/{chunk-R6KPWIGO.js.map → chunk-P7D7BYFE.js.map} +1 -1
- package/dist/{chunk-GU5OS7JJ.cjs → chunk-PYI2IWNX.cjs} +4 -4
- package/dist/{chunk-GU5OS7JJ.cjs.map → chunk-PYI2IWNX.cjs.map} +1 -1
- package/dist/chunk-Q3YVLO52.cjs +174 -0
- package/dist/chunk-Q3YVLO52.cjs.map +1 -0
- package/dist/{chunk-K34DXMLZ.js → chunk-QJ2L5RU6.js} +7 -7
- package/dist/{chunk-K34DXMLZ.js.map → chunk-QJ2L5RU6.js.map} +1 -1
- package/dist/{chunk-X4LBUPJO.cjs → chunk-QX6AAVDE.cjs} +31 -33
- package/dist/chunk-QX6AAVDE.cjs.map +1 -0
- package/dist/{chunk-LFPJ3OUM.cjs → chunk-RIUQP2QS.cjs} +5 -5
- package/dist/{chunk-LFPJ3OUM.cjs.map → chunk-RIUQP2QS.cjs.map} +1 -1
- package/dist/{chunk-JHG3ELS2.js → chunk-RPFATYUI.js} +2 -2
- package/dist/{chunk-JHG3ELS2.js.map → chunk-RPFATYUI.js.map} +1 -1
- package/dist/{chunk-FZURBQJ2.js → chunk-RSJGTWLM.js} +3 -3
- package/dist/{chunk-FZURBQJ2.js.map → chunk-RSJGTWLM.js.map} +1 -1
- package/dist/{chunk-XBTKZCZF.js → chunk-RZSSQ7AT.js} +3 -3
- package/dist/{chunk-XBTKZCZF.js.map → chunk-RZSSQ7AT.js.map} +1 -1
- package/dist/{chunk-VROIMIHB.cjs → chunk-SHBCUXFS.cjs} +28 -6
- package/dist/chunk-SHBCUXFS.cjs.map +1 -0
- package/dist/{chunk-JELTRRR5.cjs → chunk-SW2E7XKY.cjs} +9 -9
- package/dist/{chunk-JELTRRR5.cjs.map → chunk-SW2E7XKY.cjs.map} +1 -1
- package/dist/chunk-SZSRGUVO.js +402 -0
- package/dist/chunk-SZSRGUVO.js.map +1 -0
- package/dist/{chunk-HZ4MBUC3.js → chunk-TI3TQQ7F.js} +4 -53
- package/dist/chunk-TI3TQQ7F.js.map +1 -0
- package/dist/{chunk-H2IAMSHK.js → chunk-TVEJKKIM.js} +3 -3
- package/dist/{chunk-H2IAMSHK.js.map → chunk-TVEJKKIM.js.map} +1 -1
- package/dist/{chunk-LHBWRMNC.cjs → chunk-TVU4KB27.cjs} +130 -12
- package/dist/chunk-TVU4KB27.cjs.map +1 -0
- package/dist/{chunk-ZYL4SNOR.js → chunk-UJDWFDKE.js} +3 -3
- package/dist/{chunk-ZYL4SNOR.js.map → chunk-UJDWFDKE.js.map} +1 -1
- package/dist/{chunk-4HC2IBOX.js → chunk-UNFDIBKJ.js} +3 -3
- package/dist/{chunk-4HC2IBOX.js.map → chunk-UNFDIBKJ.js.map} +1 -1
- package/dist/{chunk-IYWG72DM.js → chunk-VEE46VTX.js} +4 -4
- package/dist/{chunk-IYWG72DM.js.map → chunk-VEE46VTX.js.map} +1 -1
- package/dist/{chunk-Y4E2WRUR.cjs → chunk-VFFV7EMT.cjs} +6 -6
- package/dist/{chunk-Y4E2WRUR.cjs.map → chunk-VFFV7EMT.cjs.map} +1 -1
- package/dist/chunk-VNEAQCY2.js +308 -0
- package/dist/chunk-VNEAQCY2.js.map +1 -0
- package/dist/chunk-VOYLX32A.cjs +271 -0
- package/dist/chunk-VOYLX32A.cjs.map +1 -0
- package/dist/{chunk-7ZV67VZE.js → chunk-VSRO4PAI.js} +21 -3
- package/dist/chunk-VSRO4PAI.js.map +1 -0
- package/dist/{chunk-L6MDULYB.js → chunk-VU3ZMJBN.js} +2 -2
- package/dist/{chunk-L6MDULYB.js.map → chunk-VU3ZMJBN.js.map} +1 -1
- package/dist/{chunk-35Y4ILCU.cjs → chunk-VXW7D5LR.cjs} +21 -3
- package/dist/chunk-VXW7D5LR.cjs.map +1 -0
- package/dist/{chunk-7YO7DNUV.js → chunk-WFBUBT54.js} +2 -2
- package/dist/{chunk-7YO7DNUV.js.map → chunk-WFBUBT54.js.map} +1 -1
- package/dist/chunk-WQHBMZSC.js +295 -0
- package/dist/chunk-WQHBMZSC.js.map +1 -0
- package/dist/chunk-X5JOEZVR.js +525 -0
- package/dist/chunk-X5JOEZVR.js.map +1 -0
- package/dist/chunk-XBAAHOCP.js +3 -0
- package/dist/chunk-XBAAHOCP.js.map +1 -0
- package/dist/chunk-XNPDZANN.cjs +238 -0
- package/dist/chunk-XNPDZANN.cjs.map +1 -0
- package/dist/chunk-XXA4NZUC.js +3 -0
- package/dist/chunk-XXA4NZUC.js.map +1 -0
- package/dist/chunk-Y424YL55.js +59 -0
- package/dist/chunk-Y424YL55.js.map +1 -0
- package/dist/chunk-YGS2TRMP.js +38 -0
- package/dist/chunk-YGS2TRMP.js.map +1 -0
- package/dist/chunk-YUMOM3KE.js +167 -0
- package/dist/chunk-YUMOM3KE.js.map +1 -0
- package/dist/{chunk-3KPDQG5O.cjs → chunk-ZG6FXMDX.cjs} +5 -5
- package/dist/{chunk-3KPDQG5O.cjs.map → chunk-ZG6FXMDX.cjs.map} +1 -1
- package/dist/chunk-ZNUMOJOI.cjs +4 -0
- package/dist/chunk-ZNUMOJOI.cjs.map +1 -0
- package/dist/components/Accordion/index.cjs +2 -2
- package/dist/components/Accordion/index.d.cts +6 -0
- package/dist/components/Accordion/index.d.ts +6 -0
- package/dist/components/Accordion/index.js +1 -1
- package/dist/components/ActionPlan/index.cjs +34 -0
- package/dist/components/ActionPlan/index.cjs.map +1 -0
- package/dist/components/ActionPlan/index.d.cts +65 -0
- package/dist/components/ActionPlan/index.d.ts +65 -0
- package/dist/components/ActionPlan/index.js +21 -0
- package/dist/components/ActionPlan/index.js.map +1 -0
- package/dist/components/ActivityFeed/index.cjs +31 -0
- package/dist/components/ActivityFeed/index.cjs.map +1 -0
- package/dist/components/ActivityFeed/index.d.cts +99 -0
- package/dist/components/ActivityFeed/index.d.ts +99 -0
- package/dist/components/ActivityFeed/index.js +18 -0
- package/dist/components/ActivityFeed/index.js.map +1 -0
- package/dist/components/AlertDialog/index.cjs +16 -3
- package/dist/components/AlertDialog/index.d.cts +66 -13
- package/dist/components/AlertDialog/index.d.ts +66 -13
- package/dist/components/AlertDialog/index.js +3 -2
- package/dist/components/AssociationList/index.cjs +29 -0
- package/dist/components/AssociationList/index.cjs.map +1 -0
- package/dist/components/AssociationList/index.d.cts +50 -0
- package/dist/components/AssociationList/index.d.ts +50 -0
- package/dist/components/AssociationList/index.js +16 -0
- package/dist/components/AssociationList/index.js.map +1 -0
- package/dist/components/Avatar/index.cjs +9 -7
- package/dist/components/Avatar/index.d.cts +45 -14
- package/dist/components/Avatar/index.d.ts +45 -14
- package/dist/components/Avatar/index.js +3 -1
- package/dist/components/AvatarGroup/index.cjs +20 -0
- package/dist/components/AvatarGroup/index.cjs.map +1 -0
- package/dist/components/AvatarGroup/index.d.cts +57 -0
- package/dist/components/AvatarGroup/index.d.ts +57 -0
- package/dist/components/AvatarGroup/index.js +7 -0
- package/dist/components/AvatarGroup/index.js.map +1 -0
- package/dist/components/Button/index.cjs +3 -2
- package/dist/components/Button/index.js +2 -1
- package/dist/components/CalendarHeatmap/index.cjs +18 -0
- package/dist/components/CalendarHeatmap/index.cjs.map +1 -0
- package/dist/components/CalendarHeatmap/index.d.cts +47 -0
- package/dist/components/CalendarHeatmap/index.d.ts +47 -0
- package/dist/components/CalendarHeatmap/index.js +5 -0
- package/dist/components/CalendarHeatmap/index.js.map +1 -0
- package/dist/components/CalendarView/index.cjs +5 -4
- package/dist/components/CalendarView/index.js +3 -2
- package/dist/components/ClampedText/index.cjs +3 -2
- package/dist/components/ClampedText/index.js +2 -1
- package/dist/components/CollabStatus/index.cjs +6 -4
- package/dist/components/CollabStatus/index.d.cts +11 -0
- package/dist/components/CollabStatus/index.d.ts +11 -0
- package/dist/components/CollabStatus/index.js +3 -1
- package/dist/components/Collapsible/index.cjs +4 -4
- package/dist/components/Collapsible/index.d.cts +6 -0
- package/dist/components/Collapsible/index.d.ts +6 -0
- package/dist/components/Collapsible/index.js +1 -1
- package/dist/components/CompletenessMeter/index.cjs +22 -0
- package/dist/components/CompletenessMeter/index.cjs.map +1 -0
- package/dist/components/CompletenessMeter/index.d.cts +52 -0
- package/dist/components/CompletenessMeter/index.d.ts +52 -0
- package/dist/components/CompletenessMeter/index.js +5 -0
- package/dist/components/CompletenessMeter/index.js.map +1 -0
- package/dist/components/CustomizableDashboard/index.cjs +10 -9
- package/dist/components/CustomizableDashboard/index.js +3 -2
- package/dist/components/DateInput/index.d.cts +36 -4
- package/dist/components/DateInput/index.d.ts +36 -4
- package/dist/components/Dropdown/index.cjs +9 -8
- package/dist/components/Dropdown/index.js +2 -1
- package/dist/components/FieldHistory/index.cjs +34 -0
- package/dist/components/FieldHistory/index.cjs.map +1 -0
- package/dist/components/FieldHistory/index.d.cts +66 -0
- package/dist/components/FieldHistory/index.d.ts +66 -0
- package/dist/components/FieldHistory/index.js +21 -0
- package/dist/components/FieldHistory/index.js.map +1 -0
- package/dist/components/FloatingWindow/index.cjs +5 -4
- package/dist/components/FloatingWindow/index.js +3 -2
- package/dist/components/InlineEdit/index.cjs +20 -0
- package/dist/components/InlineEdit/index.cjs.map +1 -0
- package/dist/components/InlineEdit/index.d.cts +56 -0
- package/dist/components/InlineEdit/index.d.ts +56 -0
- package/dist/components/InlineEdit/index.js +7 -0
- package/dist/components/InlineEdit/index.js.map +1 -0
- package/dist/components/ListView/index.cjs +5 -4
- package/dist/components/ListView/index.js +3 -2
- package/dist/components/LogoUploader/index.cjs +18 -0
- package/dist/components/LogoUploader/index.cjs.map +1 -0
- package/dist/components/LogoUploader/index.d.cts +49 -0
- package/dist/components/LogoUploader/index.d.ts +49 -0
- package/dist/components/LogoUploader/index.js +5 -0
- package/dist/components/LogoUploader/index.js.map +1 -0
- package/dist/components/Markdown/index.cjs +17 -16
- package/dist/components/Markdown/index.js +8 -7
- package/dist/components/MediaEditor/index.cjs +9 -8
- package/dist/components/MediaEditor/index.js +4 -3
- package/dist/components/MediaFeed/index.cjs +8 -5
- package/dist/components/MediaFeed/index.js +7 -4
- package/dist/components/MediaPlayer/index.cjs +6 -5
- package/dist/components/MediaPlayer/index.js +3 -2
- package/dist/components/MegaMenu/index.cjs +2 -1
- package/dist/components/MegaMenu/index.js +2 -1
- package/dist/components/PhiMask/index.cjs +18 -0
- package/dist/components/PhiMask/index.cjs.map +1 -0
- package/dist/components/PhiMask/index.d.cts +45 -0
- package/dist/components/PhiMask/index.d.ts +45 -0
- package/dist/components/PhiMask/index.js +5 -0
- package/dist/components/PhiMask/index.js.map +1 -0
- package/dist/components/PhoneInput/index.d.cts +3 -36
- package/dist/components/PhoneInput/index.d.ts +3 -36
- package/dist/components/PropertyList/index.cjs +25 -0
- package/dist/components/PropertyList/index.cjs.map +1 -0
- package/dist/components/PropertyList/index.d.cts +71 -0
- package/dist/components/PropertyList/index.d.ts +71 -0
- package/dist/components/PropertyList/index.js +12 -0
- package/dist/components/PropertyList/index.js.map +1 -0
- package/dist/components/RadialExplorer/index.cjs +2 -1
- package/dist/components/RadialExplorer/index.js +2 -1
- package/dist/components/Rating/index.cjs +28 -0
- package/dist/components/Rating/index.cjs.map +1 -0
- package/dist/components/Rating/index.d.cts +85 -0
- package/dist/components/Rating/index.d.ts +85 -0
- package/dist/components/Rating/index.js +7 -0
- package/dist/components/Rating/index.js.map +1 -0
- package/dist/components/RecordHeader/index.cjs +29 -0
- package/dist/components/RecordHeader/index.cjs.map +1 -0
- package/dist/components/RecordHeader/index.d.cts +86 -0
- package/dist/components/RecordHeader/index.d.ts +86 -0
- package/dist/components/RecordHeader/index.js +16 -0
- package/dist/components/RecordHeader/index.js.map +1 -0
- package/dist/components/RecordLayout/index.cjs +21 -0
- package/dist/components/RecordLayout/index.cjs.map +1 -0
- package/dist/components/RecordLayout/index.d.cts +40 -0
- package/dist/components/RecordLayout/index.d.ts +40 -0
- package/dist/components/RecordLayout/index.js +8 -0
- package/dist/components/RecordLayout/index.js.map +1 -0
- package/dist/components/RichTextEditor/index.cjs +8 -6
- package/dist/components/RichTextEditor/index.js +5 -3
- package/dist/components/SectionSpyNav/index.cjs +2 -1
- package/dist/components/SectionSpyNav/index.js +2 -1
- package/dist/components/SuperChat/index.cjs +50 -22
- package/dist/components/SuperChat/index.cjs.map +1 -1
- package/dist/components/SuperChat/index.d.cts +93 -2
- package/dist/components/SuperChat/index.d.ts +93 -2
- package/dist/components/SuperChat/index.js +38 -10
- package/dist/components/SuperChat/index.js.map +1 -1
- package/dist/components/SuperChat/plugins/index.cjs +5 -4
- package/dist/components/SuperChat/plugins/index.cjs.map +1 -1
- package/dist/components/SuperChat/plugins/index.js +4 -3
- package/dist/components/SuperChat/plugins/index.js.map +1 -1
- package/dist/components/Tabs/index.cjs +9 -7
- package/dist/components/Tabs/index.d.cts +12 -1
- package/dist/components/Tabs/index.d.ts +12 -1
- package/dist/components/Tabs/index.js +3 -1
- package/dist/components/TagEditor/index.cjs +20 -0
- package/dist/components/TagEditor/index.cjs.map +1 -0
- package/dist/components/TagEditor/index.d.cts +46 -0
- package/dist/components/TagEditor/index.d.ts +46 -0
- package/dist/components/TagEditor/index.js +7 -0
- package/dist/components/TagEditor/index.js.map +1 -0
- package/dist/components/UserPicker/index.cjs +24 -0
- package/dist/components/UserPicker/index.cjs.map +1 -0
- package/dist/components/UserPicker/index.d.cts +60 -0
- package/dist/components/UserPicker/index.d.ts +60 -0
- package/dist/components/UserPicker/index.js +11 -0
- package/dist/components/UserPicker/index.js.map +1 -0
- package/dist/components/ViewSet/index.cjs +6 -5
- package/dist/components/ViewSet/index.d.cts +2 -1
- package/dist/components/ViewSet/index.d.ts +2 -1
- package/dist/components/ViewSet/index.js +5 -4
- package/dist/components/ViewSwitcher/index.d.cts +39 -4
- package/dist/components/ViewSwitcher/index.d.ts +39 -4
- package/dist/datavis.cjs +3 -2
- package/dist/datavis.cjs.map +1 -1
- package/dist/datavis.js +2 -1
- package/dist/datavis.js.map +1 -1
- package/dist/esheet.cjs +8 -6
- package/dist/esheet.cjs.map +1 -1
- package/dist/esheet.js +5 -3
- package/dist/esheet.js.map +1 -1
- package/dist/hooks/index.cjs +53 -27
- package/dist/hooks/index.d.cts +91 -6
- package/dist/hooks/index.d.ts +91 -6
- package/dist/hooks/index.js +5 -3
- package/dist/index.cjs +1258 -714
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1253 -168
- package/dist/index.d.ts +1253 -168
- package/dist/index.js +536 -168
- package/dist/index.js.map +1 -1
- package/dist/org-chart.cjs +1302 -0
- package/dist/org-chart.cjs.map +1 -0
- package/dist/org-chart.d.cts +164 -0
- package/dist/org-chart.d.ts +164 -0
- package/dist/org-chart.js +1277 -0
- package/dist/org-chart.js.map +1 -0
- package/dist/styles.css +1 -1
- package/dist/tailwind-preset.cjs +4 -4
- package/dist/tailwind-preset.js +1 -1
- package/dist/{index-DoYYWsNc.d.cts → types-CDeBNZiE.d.cts} +1 -36
- package/dist/{index-DoYYWsNc.d.ts → types-CDeBNZiE.d.ts} +1 -36
- package/package.json +22 -2
- package/dist/CsvBlock-FX5YNGNE.cjs +0 -17
- package/dist/CsvBlock-VLMG7GUO.js +0 -8
- package/dist/HtmlPreviewBlock-5JE7L3GR.js +0 -8
- package/dist/HtmlPreviewBlock-UO37JQ3K.cjs +0 -17
- package/dist/MermaidBlock-3XHFBAMV.js +0 -8
- package/dist/MermaidBlock-RZ75RPZA.cjs +0 -17
- package/dist/SurveyBlock-MUVJ3JUI.js +0 -8
- package/dist/SurveyBlock-VH47YXZC.cjs +0 -17
- package/dist/chunk-35Y4ILCU.cjs.map +0 -1
- package/dist/chunk-6N6LIAUJ.cjs +0 -80
- package/dist/chunk-6N6LIAUJ.cjs.map +0 -1
- package/dist/chunk-7ZV67VZE.js.map +0 -1
- package/dist/chunk-7ZVTLTJF.js +0 -109
- package/dist/chunk-7ZVTLTJF.js.map +0 -1
- package/dist/chunk-DVOQ3JNO.js.map +0 -1
- package/dist/chunk-GBUVIGD5.js.map +0 -1
- package/dist/chunk-HZ4MBUC3.js.map +0 -1
- package/dist/chunk-JBIGSP2T.js.map +0 -1
- package/dist/chunk-JEIW7BSV.cjs.map +0 -1
- package/dist/chunk-KRU6IGV7.js.map +0 -1
- package/dist/chunk-LHBWRMNC.cjs.map +0 -1
- package/dist/chunk-MLAWXPRY.js.map +0 -1
- package/dist/chunk-P7UMS4E6.cjs.map +0 -1
- package/dist/chunk-QURJVPRH.cjs.map +0 -1
- package/dist/chunk-SVSHA7XV.js.map +0 -1
- package/dist/chunk-UBSH27C2.js +0 -78
- package/dist/chunk-UBSH27C2.js.map +0 -1
- package/dist/chunk-VROIMIHB.cjs.map +0 -1
- package/dist/chunk-X4LBUPJO.cjs.map +0 -1
- package/dist/chunk-YVPC65ZJ.cjs.map +0 -1
- package/dist/chunk-ZTMYKAVU.cjs.map +0 -1
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkIVGI353O_cjs = require('./chunk-IVGI353O.cjs');
|
|
4
|
+
var chunkGKDHMNUA_cjs = require('./chunk-GKDHMNUA.cjs');
|
|
5
|
+
var chunkS5RVSXDV_cjs = require('./chunk-S5RVSXDV.cjs');
|
|
6
|
+
var React = require('react');
|
|
7
|
+
var classVarianceAuthority = require('class-variance-authority');
|
|
8
|
+
var lucideReact = require('lucide-react');
|
|
9
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
10
|
+
var luxon = require('luxon');
|
|
11
|
+
|
|
12
|
+
function _interopNamespace(e) {
|
|
13
|
+
if (e && e.__esModule) return e;
|
|
14
|
+
var n = Object.create(null);
|
|
15
|
+
if (e) {
|
|
16
|
+
Object.keys(e).forEach(function (k) {
|
|
17
|
+
if (k !== 'default') {
|
|
18
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
19
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
20
|
+
enumerable: true,
|
|
21
|
+
get: function () { return e[k]; }
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
n.default = e;
|
|
27
|
+
return Object.freeze(n);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
31
|
+
|
|
32
|
+
var defaultRatingLabels = {
|
|
33
|
+
value: (value, max) => `${value} out of ${max}`,
|
|
34
|
+
group: "Rating",
|
|
35
|
+
option: (value) => `${value} ${value === 1 ? "star" : "stars"}`
|
|
36
|
+
};
|
|
37
|
+
var starVariants = classVarianceAuthority.cva("shrink-0", {
|
|
38
|
+
variants: {
|
|
39
|
+
size: { sm: "h-3.5 w-3.5", md: "h-5 w-5", lg: "h-6 w-6" }
|
|
40
|
+
},
|
|
41
|
+
defaultVariants: { size: "md" }
|
|
42
|
+
});
|
|
43
|
+
function StarIcon({ fill, size }) {
|
|
44
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "relative inline-flex", "aria-hidden": "true", children: [
|
|
45
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
46
|
+
lucideReact.Star,
|
|
47
|
+
{
|
|
48
|
+
className: chunkS5RVSXDV_cjs.cn(starVariants({ size }), "text-muted-foreground/40")
|
|
49
|
+
}
|
|
50
|
+
),
|
|
51
|
+
fill > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
52
|
+
"span",
|
|
53
|
+
{
|
|
54
|
+
className: "absolute inset-y-0 start-0 overflow-hidden",
|
|
55
|
+
style: { width: `${fill * 100}%` },
|
|
56
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
57
|
+
lucideReact.Star,
|
|
58
|
+
{
|
|
59
|
+
className: chunkS5RVSXDV_cjs.cn(starVariants({ size }), "text-warning-500"),
|
|
60
|
+
fill: "currentColor"
|
|
61
|
+
}
|
|
62
|
+
)
|
|
63
|
+
}
|
|
64
|
+
)
|
|
65
|
+
] });
|
|
66
|
+
}
|
|
67
|
+
var Rating = React__namespace.forwardRef(
|
|
68
|
+
function Rating2({
|
|
69
|
+
value,
|
|
70
|
+
max = 5,
|
|
71
|
+
size = "md",
|
|
72
|
+
onChange,
|
|
73
|
+
disabled = false,
|
|
74
|
+
labels: labelOverrides,
|
|
75
|
+
className,
|
|
76
|
+
...props
|
|
77
|
+
}, ref) {
|
|
78
|
+
const labels = { ...defaultRatingLabels, ...labelOverrides };
|
|
79
|
+
const radios = React__namespace.useRef([]);
|
|
80
|
+
const stars = Array.from({ length: max }, (_, i) => i + 1);
|
|
81
|
+
if (!onChange) {
|
|
82
|
+
const rounded = Math.min(max, Math.max(0, Math.round(value * 2) / 2));
|
|
83
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
84
|
+
"div",
|
|
85
|
+
{
|
|
86
|
+
ref,
|
|
87
|
+
role: "img",
|
|
88
|
+
"aria-label": labels.value(rounded, max),
|
|
89
|
+
"data-slot": "rating",
|
|
90
|
+
className: chunkS5RVSXDV_cjs.cn("inline-flex items-center gap-0.5", className),
|
|
91
|
+
...props,
|
|
92
|
+
children: stars.map((n) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
93
|
+
StarIcon,
|
|
94
|
+
{
|
|
95
|
+
size,
|
|
96
|
+
fill: Math.min(1, Math.max(0, rounded - n + 1))
|
|
97
|
+
},
|
|
98
|
+
n
|
|
99
|
+
))
|
|
100
|
+
}
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
const current = Math.min(max, Math.max(0, Math.round(value)));
|
|
104
|
+
const select = (next) => {
|
|
105
|
+
const clamped = Math.min(max, Math.max(1, next));
|
|
106
|
+
onChange(clamped);
|
|
107
|
+
radios.current[clamped - 1]?.focus();
|
|
108
|
+
};
|
|
109
|
+
const onKeyDown = (e) => {
|
|
110
|
+
const rtl = getComputedStyle(e.currentTarget).direction === "rtl";
|
|
111
|
+
const step = {
|
|
112
|
+
ArrowUp: 1,
|
|
113
|
+
ArrowDown: -1,
|
|
114
|
+
ArrowRight: rtl ? -1 : 1,
|
|
115
|
+
ArrowLeft: rtl ? 1 : -1
|
|
116
|
+
};
|
|
117
|
+
if (e.key === "Home") select(1);
|
|
118
|
+
else if (e.key === "End") select(max);
|
|
119
|
+
else if (step[e.key]) select((current || 0) + step[e.key]);
|
|
120
|
+
else return;
|
|
121
|
+
e.preventDefault();
|
|
122
|
+
};
|
|
123
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
124
|
+
"div",
|
|
125
|
+
{
|
|
126
|
+
ref,
|
|
127
|
+
role: "radiogroup",
|
|
128
|
+
"aria-label": labels.group,
|
|
129
|
+
"aria-disabled": disabled || void 0,
|
|
130
|
+
"data-slot": "rating",
|
|
131
|
+
className: chunkS5RVSXDV_cjs.cn("inline-flex items-center gap-0.5", className),
|
|
132
|
+
...props,
|
|
133
|
+
children: stars.map((n) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
134
|
+
"button",
|
|
135
|
+
{
|
|
136
|
+
ref: (el) => {
|
|
137
|
+
radios.current[n - 1] = el;
|
|
138
|
+
},
|
|
139
|
+
type: "button",
|
|
140
|
+
role: "radio",
|
|
141
|
+
"aria-checked": n === current,
|
|
142
|
+
"aria-label": labels.option(n, max),
|
|
143
|
+
tabIndex: n === (current || 1) ? 0 : -1,
|
|
144
|
+
disabled,
|
|
145
|
+
onClick: () => select(n),
|
|
146
|
+
onKeyDown: disabled ? void 0 : onKeyDown,
|
|
147
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
148
|
+
"rounded-sm disabled:cursor-not-allowed disabled:opacity-50",
|
|
149
|
+
"focus-visible:ring-ring focus-visible:ring-2 focus-visible:outline-none",
|
|
150
|
+
"motion-safe:transition-transform motion-safe:enabled:hover:scale-110"
|
|
151
|
+
),
|
|
152
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(StarIcon, { size, fill: n <= current ? 1 : 0 })
|
|
153
|
+
},
|
|
154
|
+
n
|
|
155
|
+
))
|
|
156
|
+
}
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
);
|
|
160
|
+
var defaultReviewCardLabels = {
|
|
161
|
+
source: (source) => `via ${source}`,
|
|
162
|
+
reply: "Reply",
|
|
163
|
+
showMore: "Show more",
|
|
164
|
+
showLess: "Show less"
|
|
165
|
+
};
|
|
166
|
+
var ReviewCard = React__namespace.forwardRef(
|
|
167
|
+
function ReviewCard2({
|
|
168
|
+
author,
|
|
169
|
+
date,
|
|
170
|
+
dateStyle = "relative",
|
|
171
|
+
locale,
|
|
172
|
+
rating,
|
|
173
|
+
body,
|
|
174
|
+
source,
|
|
175
|
+
reply,
|
|
176
|
+
bodyLines = 4,
|
|
177
|
+
labels: labelOverrides,
|
|
178
|
+
ratingLabels,
|
|
179
|
+
className,
|
|
180
|
+
...props
|
|
181
|
+
}, ref) {
|
|
182
|
+
const labels = { ...defaultReviewCardLabels, ...labelOverrides };
|
|
183
|
+
const parsed = typeof date === "string" ? luxon.DateTime.fromISO(date) : luxon.DateTime.fromJSDate(date);
|
|
184
|
+
const dt = locale ? parsed.setLocale(locale) : parsed;
|
|
185
|
+
const absolute = dt.toLocaleString(luxon.DateTime.DATE_MED);
|
|
186
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
187
|
+
"article",
|
|
188
|
+
{
|
|
189
|
+
ref,
|
|
190
|
+
"data-slot": "review-card",
|
|
191
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
192
|
+
"bg-card text-card-foreground border-border rounded-lg border p-4",
|
|
193
|
+
className
|
|
194
|
+
),
|
|
195
|
+
...props,
|
|
196
|
+
children: [
|
|
197
|
+
/* @__PURE__ */ jsxRuntime.jsxs("header", { className: "flex items-start gap-3", children: [
|
|
198
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkGKDHMNUA_cjs.Avatar, { name: author.name, src: author.avatarUrl, alt: "", size: "md" }),
|
|
199
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
200
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-foreground truncate text-sm font-medium", children: author.name }),
|
|
201
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-muted-foreground flex flex-wrap items-center gap-x-2 gap-y-1 text-xs", children: [
|
|
202
|
+
/* @__PURE__ */ jsxRuntime.jsx(Rating, { value: rating, size: "sm", labels: ratingLabels }),
|
|
203
|
+
/* @__PURE__ */ jsxRuntime.jsx("time", { dateTime: dt.toISO() ?? void 0, title: absolute, children: dateStyle === "relative" ? dt.toRelative() : absolute }),
|
|
204
|
+
source && /* @__PURE__ */ jsxRuntime.jsx("span", { children: labels.source(source) })
|
|
205
|
+
] })
|
|
206
|
+
] })
|
|
207
|
+
] }),
|
|
208
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
209
|
+
chunkIVGI353O_cjs.ClampedText,
|
|
210
|
+
{
|
|
211
|
+
text: body,
|
|
212
|
+
lines: bodyLines,
|
|
213
|
+
showMoreLabel: labels.showMore,
|
|
214
|
+
showLessLabel: labels.showLess,
|
|
215
|
+
className: "text-foreground mt-3 block text-sm"
|
|
216
|
+
}
|
|
217
|
+
),
|
|
218
|
+
reply && /* @__PURE__ */ jsxRuntime.jsx(
|
|
219
|
+
"section",
|
|
220
|
+
{
|
|
221
|
+
"aria-label": labels.reply,
|
|
222
|
+
"data-slot": "review-card-reply",
|
|
223
|
+
className: "border-border text-muted-foreground mt-3 border-s-2 ps-3 text-sm",
|
|
224
|
+
children: reply
|
|
225
|
+
}
|
|
226
|
+
)
|
|
227
|
+
]
|
|
228
|
+
}
|
|
229
|
+
);
|
|
230
|
+
}
|
|
231
|
+
);
|
|
232
|
+
|
|
233
|
+
exports.Rating = Rating;
|
|
234
|
+
exports.ReviewCard = ReviewCard;
|
|
235
|
+
exports.defaultRatingLabels = defaultRatingLabels;
|
|
236
|
+
exports.defaultReviewCardLabels = defaultReviewCardLabels;
|
|
237
|
+
//# sourceMappingURL=chunk-XNPDZANN.cjs.map
|
|
238
|
+
//# sourceMappingURL=chunk-XNPDZANN.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Rating/Rating.tsx","../src/components/Rating/ReviewCard.tsx"],"names":["cva","jsxs","jsx","Star","cn","React","Rating","React2","ReviewCard","DateTime","Avatar","ClampedText"],"mappings":"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","file":"chunk-XNPDZANN.cjs","sourcesContent":["import * as React from 'react';\nimport { cva } from 'class-variance-authority';\nimport { Star } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface RatingLabels {\n /** Accessible text of the read-only display, e.g. `4.5 out of 5`. */\n value: (value: number, max: number) => string;\n /** Accessible name of the interactive radio group. */\n group: string;\n /** Accessible name of one option, e.g. `3 stars`. */\n option: (value: number, max: number) => string;\n}\n\nexport const defaultRatingLabels: RatingLabels = {\n value: (value, max) => `${value} out of ${max}`,\n group: 'Rating',\n option: (value) => `${value} ${value === 1 ? 'star' : 'stars'}`,\n};\n\nconst starVariants = cva('shrink-0', {\n variants: {\n size: { sm: 'h-3.5 w-3.5', md: 'h-5 w-5', lg: 'h-6 w-6' },\n },\n defaultVariants: { size: 'md' },\n});\n\nexport interface RatingProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'onChange'\n> {\n /** Current rating; read-only displays round to the nearest half. */\n value: number;\n /** Number of stars. */\n max?: number;\n /** Star size. */\n size?: 'sm' | 'md' | 'lg';\n /** Makes the rating editable as a radio group of whole stars. */\n onChange?: (value: number) => void;\n /** Disables the interactive mode. */\n disabled?: boolean;\n /** Overrides for any user-facing string. */\n labels?: Partial<RatingLabels>;\n}\n\nfunction StarIcon({ fill, size }: { fill: number; size: RatingProps['size'] }) {\n return (\n <span className=\"relative inline-flex\" aria-hidden=\"true\">\n <Star\n className={cn(starVariants({ size }), 'text-muted-foreground/40')}\n />\n {fill > 0 && (\n <span\n className=\"absolute inset-y-0 start-0 overflow-hidden\"\n style={{ width: `${fill * 100}%` }}\n >\n <Star\n className={cn(starVariants({ size }), 'text-warning-500')}\n fill=\"currentColor\"\n />\n </span>\n )}\n </span>\n );\n}\n\n/**\n * Star rating: a read-only display with half-star precision, or — with\n * `onChange` — a keyboard-operable radio group.\n *\n * @example\n * ```tsx\n * <Rating value={4.5} />\n * <Rating value={stars} onChange={setStars} />\n * ```\n */\nexport const Rating = React.forwardRef<HTMLDivElement, RatingProps>(\n function Rating(\n {\n value,\n max = 5,\n size = 'md',\n onChange,\n disabled = false,\n labels: labelOverrides,\n className,\n ...props\n },\n ref\n ) {\n const labels = { ...defaultRatingLabels, ...labelOverrides };\n const radios = React.useRef<(HTMLButtonElement | null)[]>([]);\n const stars = Array.from({ length: max }, (_, i) => i + 1);\n\n if (!onChange) {\n const rounded = Math.min(max, Math.max(0, Math.round(value * 2) / 2));\n return (\n <div\n ref={ref}\n role=\"img\"\n aria-label={labels.value(rounded, max)}\n data-slot=\"rating\"\n className={cn('inline-flex items-center gap-0.5', className)}\n {...props}\n >\n {stars.map((n) => (\n <StarIcon\n key={n}\n size={size}\n fill={Math.min(1, Math.max(0, rounded - n + 1))}\n />\n ))}\n </div>\n );\n }\n\n const current = Math.min(max, Math.max(0, Math.round(value)));\n const select = (next: number) => {\n const clamped = Math.min(max, Math.max(1, next));\n onChange(clamped);\n radios.current[clamped - 1]?.focus();\n };\n\n const onKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n const rtl = getComputedStyle(e.currentTarget).direction === 'rtl';\n const step: Record<string, number> = {\n ArrowUp: 1,\n ArrowDown: -1,\n ArrowRight: rtl ? -1 : 1,\n ArrowLeft: rtl ? 1 : -1,\n };\n if (e.key === 'Home') select(1);\n else if (e.key === 'End') select(max);\n else if (step[e.key]) select((current || 0) + step[e.key]);\n else return;\n e.preventDefault();\n };\n\n return (\n <div\n ref={ref}\n role=\"radiogroup\"\n aria-label={labels.group}\n aria-disabled={disabled || undefined}\n data-slot=\"rating\"\n className={cn('inline-flex items-center gap-0.5', className)}\n {...props}\n >\n {stars.map((n) => (\n <button\n key={n}\n ref={(el) => {\n radios.current[n - 1] = el;\n }}\n type=\"button\"\n role=\"radio\"\n aria-checked={n === current}\n aria-label={labels.option(n, max)}\n tabIndex={n === (current || 1) ? 0 : -1}\n disabled={disabled}\n onClick={() => select(n)}\n onKeyDown={disabled ? undefined : onKeyDown}\n className={cn(\n 'rounded-sm disabled:cursor-not-allowed disabled:opacity-50',\n 'focus-visible:ring-ring focus-visible:ring-2 focus-visible:outline-none',\n 'motion-safe:transition-transform motion-safe:enabled:hover:scale-110'\n )}\n >\n <StarIcon size={size} fill={n <= current ? 1 : 0} />\n </button>\n ))}\n </div>\n );\n }\n);\n","import * as React from 'react';\nimport { DateTime } from 'luxon';\nimport { cn } from '../../utils/cn';\nimport { Avatar } from '../Avatar/Avatar';\nimport { ClampedText } from '../ClampedText/ClampedText';\nimport { Rating, type RatingLabels } from './Rating';\n\nexport interface ReviewCardLabels {\n /** Source line, e.g. `via Google`. */\n source: (source: string) => string;\n /** Accessible name of the reply region. */\n reply: string;\n showMore: string;\n showLess: string;\n}\n\nexport const defaultReviewCardLabels: ReviewCardLabels = {\n source: (source) => `via ${source}`,\n reply: 'Reply',\n showMore: 'Show more',\n showLess: 'Show less',\n};\n\nexport interface ReviewCardProps extends React.HTMLAttributes<HTMLElement> {\n /** Who wrote the review. */\n author: { name: string; avatarUrl?: string | null };\n /** When it was written — ISO string or Date. */\n date: string | Date;\n /** Show the date as `3 days ago` (default) or as a localized date. */\n dateStyle?: 'relative' | 'absolute';\n /** BCP 47 locale for the date; defaults to the runtime locale. */\n locale?: string;\n /** Star rating, half-star precision. */\n rating: number;\n /** Review text; long bodies clamp with a Show more toggle. */\n body: string;\n /** Where the review came from, e.g. `Google`. */\n source?: string;\n /** Owner response shown under the review. */\n reply?: React.ReactNode;\n /** Lines shown before the body clamps. */\n bodyLines?: 2 | 3 | 4 | 5 | 6;\n /** Overrides for any user-facing string. */\n labels?: Partial<ReviewCardLabels>;\n /** Forwarded to the embedded Rating. */\n ratingLabels?: Partial<RatingLabels>;\n}\n\n/**\n * One review: author, star rating, date, source, clamped body and an optional\n * owner reply.\n *\n * @example\n * ```tsx\n * <ReviewCard author={{ name: 'Ann L.' }} date=\"2026-09-01\" rating={4} body={text} source=\"Google\" />\n * ```\n */\nexport const ReviewCard = React.forwardRef<HTMLElement, ReviewCardProps>(\n function ReviewCard(\n {\n author,\n date,\n dateStyle = 'relative',\n locale,\n rating,\n body,\n source,\n reply,\n bodyLines = 4,\n labels: labelOverrides,\n ratingLabels,\n className,\n ...props\n },\n ref\n ) {\n const labels = { ...defaultReviewCardLabels, ...labelOverrides };\n const parsed =\n typeof date === 'string'\n ? DateTime.fromISO(date)\n : DateTime.fromJSDate(date);\n const dt = locale ? parsed.setLocale(locale) : parsed;\n const absolute = dt.toLocaleString(DateTime.DATE_MED);\n\n return (\n <article\n ref={ref}\n data-slot=\"review-card\"\n className={cn(\n 'bg-card text-card-foreground border-border rounded-lg border p-4',\n className\n )}\n {...props}\n >\n <header className=\"flex items-start gap-3\">\n <Avatar name={author.name} src={author.avatarUrl} alt=\"\" size=\"md\" />\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-foreground truncate text-sm font-medium\">\n {author.name}\n </p>\n <div className=\"text-muted-foreground flex flex-wrap items-center gap-x-2 gap-y-1 text-xs\">\n <Rating value={rating} size=\"sm\" labels={ratingLabels} />\n <time dateTime={dt.toISO() ?? undefined} title={absolute}>\n {dateStyle === 'relative' ? dt.toRelative() : absolute}\n </time>\n {source && <span>{labels.source(source)}</span>}\n </div>\n </div>\n </header>\n <ClampedText\n text={body}\n lines={bodyLines}\n showMoreLabel={labels.showMore}\n showLessLabel={labels.showLess}\n className=\"text-foreground mt-3 block text-sm\"\n />\n {reply && (\n <section\n aria-label={labels.reply}\n data-slot=\"review-card-reply\"\n className=\"border-border text-muted-foreground mt-3 border-s-2 ps-3 text-sm\"\n >\n {reply}\n </section>\n )}\n </article>\n );\n }\n);\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-XXA4NZUC.js"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Skeleton } from './chunk-ZIUADGAR.js';
|
|
2
|
+
import { Button } from './chunk-WFBUBT54.js';
|
|
3
|
+
import { cn } from './chunk-TQONQSJO.js';
|
|
4
|
+
import { TriangleAlert } from 'lucide-react';
|
|
5
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
6
|
+
|
|
7
|
+
function RecordState({
|
|
8
|
+
kind,
|
|
9
|
+
slot,
|
|
10
|
+
message,
|
|
11
|
+
retryLabel,
|
|
12
|
+
onRetry,
|
|
13
|
+
rows = 3,
|
|
14
|
+
className,
|
|
15
|
+
children
|
|
16
|
+
}) {
|
|
17
|
+
if (kind === "loading") {
|
|
18
|
+
return /* @__PURE__ */ jsxs(
|
|
19
|
+
"div",
|
|
20
|
+
{
|
|
21
|
+
role: "status",
|
|
22
|
+
"data-slot": slot,
|
|
23
|
+
className: cn("space-y-4 p-4", className),
|
|
24
|
+
children: [
|
|
25
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: message }),
|
|
26
|
+
Array.from({ length: rows }, (_, i) => /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
|
|
27
|
+
/* @__PURE__ */ jsx(Skeleton, { circle: true, width: 28, height: 28, className: "shrink-0" }),
|
|
28
|
+
/* @__PURE__ */ jsxs("div", { className: "flex-1 space-y-2", children: [
|
|
29
|
+
/* @__PURE__ */ jsx(Skeleton, { variant: "text", width: "60%" }),
|
|
30
|
+
/* @__PURE__ */ jsx(Skeleton, { variant: "text", width: "35%" })
|
|
31
|
+
] })
|
|
32
|
+
] }, i))
|
|
33
|
+
]
|
|
34
|
+
}
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
return /* @__PURE__ */ jsxs(
|
|
38
|
+
"div",
|
|
39
|
+
{
|
|
40
|
+
"data-slot": slot,
|
|
41
|
+
className: cn(
|
|
42
|
+
"text-muted-foreground flex flex-col items-center justify-center gap-2 px-4 py-10 text-center text-sm",
|
|
43
|
+
className
|
|
44
|
+
),
|
|
45
|
+
children: [
|
|
46
|
+
kind === "error" ? /* @__PURE__ */ jsxs("p", { role: "alert", className: "text-foreground flex items-center gap-2", children: [
|
|
47
|
+
/* @__PURE__ */ jsx(TriangleAlert, { className: "text-destructive size-4", "aria-hidden": true }),
|
|
48
|
+
message
|
|
49
|
+
] }) : /* @__PURE__ */ jsx("p", { children: message }),
|
|
50
|
+
onRetry && retryLabel && /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onClick: onRetry, children: retryLabel }),
|
|
51
|
+
children
|
|
52
|
+
]
|
|
53
|
+
}
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export { RecordState };
|
|
58
|
+
//# sourceMappingURL=chunk-Y424YL55.js.map
|
|
59
|
+
//# sourceMappingURL=chunk-Y424YL55.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/ActivityFeed/RecordState.tsx"],"names":[],"mappings":";;;;;;AAuBO,SAAS,WAAA,CAAY;AAAA,EAC1B,IAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA,GAAO,CAAA;AAAA,EACP,SAAA;AAAA,EACA;AACF,CAAA,EAAqB;AACnB,EAAA,IAAI,SAAS,SAAA,EAAW;AACtB,IAAA,uBACE,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,WAAA,EAAW,IAAA;AAAA,QACX,SAAA,EAAW,EAAA,CAAG,eAAA,EAAiB,SAAS,CAAA;AAAA,QAExC,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAW,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,UAClC,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,IAAA,EAAK,EAAG,CAAC,CAAA,EAAG,CAAA,qBAChC,IAAA,CAAC,KAAA,EAAA,EAAY,SAAA,EAAU,yBAAA,EACrB,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,QAAA,EAAA,EAAS,QAAM,IAAA,EAAC,KAAA,EAAO,IAAI,MAAA,EAAQ,EAAA,EAAI,WAAU,UAAA,EAAW,CAAA;AAAA,4BAC7D,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EACb,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,QAAA,EAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,KAAA,EAAM,KAAA,EAAM,CAAA;AAAA,8BACrC,GAAA,CAAC,QAAA,EAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,OAAM,KAAA,EAAM;AAAA,aAAA,EACvC;AAAA,WAAA,EAAA,EALQ,CAMV,CACD;AAAA;AAAA;AAAA,KACH;AAAA,EAEJ;AACA,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAW,EAAA;AAAA,QACT,sGAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,IAAA,KAAS,0BACR,IAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAK,OAAA,EAAQ,WAAU,yCAAA,EACxB,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAU,yBAAA,EAA0B,aAAA,EAAW,IAAA,EAAC,CAAA;AAAA,UAC9D;AAAA,SAAA,EACH,CAAA,mBAEA,GAAA,CAAC,GAAA,EAAA,EAAG,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,QAEb,OAAA,IAAW,UAAA,oBACV,GAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,SAAQ,IAAA,EAAK,IAAA,EAAK,OAAA,EAAS,OAAA,EACxC,QAAA,EAAA,UAAA,EACH,CAAA;AAAA,QAED;AAAA;AAAA;AAAA,GACH;AAEJ","file":"chunk-Y424YL55.js","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { TriangleAlert } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport { Button } from '../Button';\nimport { Skeleton } from '../Skeleton';\n\nexport interface RecordStateProps {\n kind: 'loading' | 'error' | 'empty';\n /** `data-slot` value, so each module keeps its own slot name. */\n slot: string;\n message: string;\n retryLabel?: string;\n onRetry?: () => void;\n /** Skeleton rows while loading. */\n rows?: number;\n className?: string;\n /** Extra actions under an empty or error message. */\n children?: React.ReactNode;\n}\n\n/** The loading, error and empty states shared by the Records modules. */\nexport function RecordState({\n kind,\n slot,\n message,\n retryLabel,\n onRetry,\n rows = 3,\n className,\n children,\n}: RecordStateProps) {\n if (kind === 'loading') {\n return (\n <div\n role=\"status\"\n data-slot={slot}\n className={cn('space-y-4 p-4', className)}\n >\n <span className=\"sr-only\">{message}</span>\n {Array.from({ length: rows }, (_, i) => (\n <div key={i} className=\"flex items-center gap-3\">\n <Skeleton circle width={28} height={28} className=\"shrink-0\" />\n <div className=\"flex-1 space-y-2\">\n <Skeleton variant=\"text\" width=\"60%\" />\n <Skeleton variant=\"text\" width=\"35%\" />\n </div>\n </div>\n ))}\n </div>\n );\n }\n return (\n <div\n data-slot={slot}\n className={cn(\n 'text-muted-foreground flex flex-col items-center justify-center gap-2 px-4 py-10 text-center text-sm',\n className\n )}\n >\n {kind === 'error' ? (\n <p role=\"alert\" className=\"text-foreground flex items-center gap-2\">\n <TriangleAlert className=\"text-destructive size-4\" aria-hidden />\n {message}\n </p>\n ) : (\n <p>{message}</p>\n )}\n {onRetry && retryLabel && (\n <Button variant=\"ghost\" size=\"sm\" onClick={onRetry}>\n {retryLabel}\n </Button>\n )}\n {children}\n </div>\n );\n}\n"]}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { toDateTime } from './chunk-3YBS4WUQ.js';
|
|
2
|
+
import { DateTime } from 'luxon';
|
|
3
|
+
|
|
4
|
+
function withLocale(dt, locale) {
|
|
5
|
+
return locale ? dt.setLocale(locale) : dt;
|
|
6
|
+
}
|
|
7
|
+
var millis = (dt) => dt ? dt.toMillis() : Number.NEGATIVE_INFINITY;
|
|
8
|
+
function groupByDay(items, getDate, zone) {
|
|
9
|
+
const dated = items.map((item) => ({ item, dt: toDateTime(getDate(item), zone) })).sort((a, b) => millis(b.dt) - millis(a.dt) || 0);
|
|
10
|
+
const groups = [];
|
|
11
|
+
for (const { item, dt } of dated) {
|
|
12
|
+
const key = dt?.toISODate() ?? "";
|
|
13
|
+
const last = groups[groups.length - 1];
|
|
14
|
+
if (last?.key === key) last.items.push(item);
|
|
15
|
+
else groups.push({ key, items: [item] });
|
|
16
|
+
}
|
|
17
|
+
return groups;
|
|
18
|
+
}
|
|
19
|
+
function formatDayLabel(key, options) {
|
|
20
|
+
if (!key) return options.undated;
|
|
21
|
+
const day = withLocale(
|
|
22
|
+
DateTime.fromISO(key, { zone: options.zone }),
|
|
23
|
+
options.locale
|
|
24
|
+
);
|
|
25
|
+
const today = DateTime.fromJSDate(options.now, { zone: options.zone });
|
|
26
|
+
if (day.hasSame(today, "day")) return options.today;
|
|
27
|
+
if (day.hasSame(today.minus({ days: 1 }), "day")) return options.yesterday;
|
|
28
|
+
return day.toLocaleString({
|
|
29
|
+
weekday: "long",
|
|
30
|
+
month: "long",
|
|
31
|
+
day: "numeric",
|
|
32
|
+
...day.year !== today.year && { year: "numeric" }
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export { formatDayLabel, groupByDay, withLocale };
|
|
37
|
+
//# sourceMappingURL=chunk-YGS2TRMP.js.map
|
|
38
|
+
//# sourceMappingURL=chunk-YGS2TRMP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/ActivityFeed/dayGroups.ts"],"names":[],"mappings":";;;AAkBO,SAAS,UAAA,CAAW,IAAc,MAAA,EAA2B;AAClE,EAAA,OAAO,MAAA,GAAS,EAAA,CAAG,SAAA,CAAU,MAAM,CAAA,GAAI,EAAA;AACzC;AAEA,IAAM,SAAS,CAAC,EAAA,KACd,KAAK,EAAA,CAAG,QAAA,KAAa,MAAA,CAAO,iBAAA;AAGvB,SAAS,UAAA,CACd,KAAA,EACA,OAAA,EACA,IAAA,EACe;AACf,EAAA,MAAM,KAAA,GAAQ,KAAA,CACX,GAAA,CAAI,CAAC,IAAA,MAAU,EAAE,IAAA,EAAM,EAAA,EAAI,UAAA,CAAW,OAAA,CAAQ,IAAI,CAAA,EAAG,IAAI,CAAA,EAAE,CAAE,CAAA,CAC7D,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,MAAA,CAAO,CAAA,CAAE,EAAE,CAAA,GAAI,MAAA,CAAO,CAAA,CAAE,EAAE,CAAA,IAAK,CAAC,CAAA;AAElD,EAAA,MAAM,SAAwB,EAAC;AAC/B,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,EAAA,EAAG,IAAK,KAAA,EAAO;AAChC,IAAA,MAAM,GAAA,GAAM,EAAA,EAAI,SAAA,EAAU,IAAK,EAAA;AAC/B,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AACrC,IAAA,IAAI,MAAM,GAAA,KAAQ,GAAA,EAAK,IAAA,CAAK,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,SACtC,MAAA,CAAO,KAAK,EAAE,GAAA,EAAK,OAAO,CAAC,IAAI,GAAG,CAAA;AAAA,EACzC;AACA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,cAAA,CAAe,KAAa,OAAA,EAAkC;AAC5E,EAAA,IAAI,CAAC,GAAA,EAAK,OAAO,OAAA,CAAQ,OAAA;AACzB,EAAA,MAAM,GAAA,GAAM,UAAA;AAAA,IACV,SAAS,OAAA,CAAQ,GAAA,EAAK,EAAE,IAAA,EAAM,OAAA,CAAQ,MAAM,CAAA;AAAA,IAC5C,OAAA,CAAQ;AAAA,GACV;AACA,EAAA,MAAM,KAAA,GAAQ,SAAS,UAAA,CAAW,OAAA,CAAQ,KAAK,EAAE,IAAA,EAAM,OAAA,CAAQ,IAAA,EAAM,CAAA;AACrE,EAAA,IAAI,IAAI,OAAA,CAAQ,KAAA,EAAO,KAAK,CAAA,SAAU,OAAA,CAAQ,KAAA;AAC9C,EAAA,IAAI,GAAA,CAAI,OAAA,CAAQ,KAAA,CAAM,KAAA,CAAM,EAAE,IAAA,EAAM,CAAA,EAAG,CAAA,EAAG,KAAK,CAAA,EAAG,OAAO,OAAA,CAAQ,SAAA;AACjE,EAAA,OAAO,IAAI,cAAA,CAAe;AAAA,IACxB,OAAA,EAAS,MAAA;AAAA,IACT,KAAA,EAAO,MAAA;AAAA,IACP,GAAA,EAAK,SAAA;AAAA,IACL,GAAI,GAAA,CAAI,IAAA,KAAS,MAAM,IAAA,IAAQ,EAAE,MAAM,SAAA;AAAU,GAClD,CAAA;AACH","file":"chunk-YGS2TRMP.js","sourcesContent":["import { DateTime } from 'luxon';\nimport { toDateTime } from '../../views/types';\n\nexport interface DayGroup<T> {\n /** ISO date (`yyyy-MM-dd`) in the display zone; `''` for undated items. */\n key: string;\n items: T[];\n}\n\nexport interface DayLabelOptions {\n now: Date;\n zone: string;\n locale?: string;\n today: string;\n yesterday: string;\n undated: string;\n}\n\nexport function withLocale(dt: DateTime, locale?: string): DateTime {\n return locale ? dt.setLocale(locale) : dt;\n}\n\nconst millis = (dt: DateTime | null) =>\n dt ? dt.toMillis() : Number.NEGATIVE_INFINITY;\n\n/** Buckets items by calendar day in `zone`, newest first; undated items last. */\nexport function groupByDay<T>(\n items: readonly T[],\n getDate: (item: T) => Date | string | null | undefined,\n zone: string\n): DayGroup<T>[] {\n const dated = items\n .map((item) => ({ item, dt: toDateTime(getDate(item), zone) }))\n .sort((a, b) => millis(b.dt) - millis(a.dt) || 0);\n\n const groups: DayGroup<T>[] = [];\n for (const { item, dt } of dated) {\n const key = dt?.toISODate() ?? '';\n const last = groups[groups.length - 1];\n if (last?.key === key) last.items.push(item);\n else groups.push({ key, items: [item] });\n }\n return groups;\n}\n\nexport function formatDayLabel(key: string, options: DayLabelOptions): string {\n if (!key) return options.undated;\n const day = withLocale(\n DateTime.fromISO(key, { zone: options.zone }),\n options.locale\n );\n const today = DateTime.fromJSDate(options.now, { zone: options.zone });\n if (day.hasSame(today, 'day')) return options.today;\n if (day.hasSame(today.minus({ days: 1 }), 'day')) return options.yesterday;\n return day.toLocaleString({\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n ...(day.year !== today.year && { year: 'numeric' }),\n });\n}\n"]}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { useLiveAnnouncement } from './chunk-HNXLLDPN.js';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
|
|
4
|
+
function reorderIds(ids, draggedId, targetId, after) {
|
|
5
|
+
if (draggedId === targetId) return ids;
|
|
6
|
+
if (!ids.includes(draggedId)) return ids;
|
|
7
|
+
const without = ids.filter((i) => i !== draggedId);
|
|
8
|
+
const idx = without.indexOf(targetId);
|
|
9
|
+
if (idx === -1) return ids;
|
|
10
|
+
without.splice(after ? idx + 1 : idx, 0, draggedId);
|
|
11
|
+
return without;
|
|
12
|
+
}
|
|
13
|
+
function moveIdBy(ids, id, delta) {
|
|
14
|
+
const from = ids.indexOf(id);
|
|
15
|
+
if (from === -1) return ids;
|
|
16
|
+
const to = Math.max(0, Math.min(ids.length - 1, from + delta));
|
|
17
|
+
if (to === from) return ids;
|
|
18
|
+
const next = ids.filter((i) => i !== id);
|
|
19
|
+
next.splice(to, 0, id);
|
|
20
|
+
return next;
|
|
21
|
+
}
|
|
22
|
+
var DEFAULT_DRAG_REORDER_LABELS = {
|
|
23
|
+
moveUp: "Move up",
|
|
24
|
+
moveDown: "Move down",
|
|
25
|
+
moved: (position, total) => `Moved to position ${position} of ${total}`
|
|
26
|
+
};
|
|
27
|
+
function useDragReorder({
|
|
28
|
+
ids,
|
|
29
|
+
onReorder,
|
|
30
|
+
canDropOn,
|
|
31
|
+
keyboard = false,
|
|
32
|
+
announce,
|
|
33
|
+
getDragPreview,
|
|
34
|
+
labels: labelsProp
|
|
35
|
+
}) {
|
|
36
|
+
const labels = { ...DEFAULT_DRAG_REORDER_LABELS, ...labelsProp };
|
|
37
|
+
const [announcement, announceLive] = useLiveAnnouncement();
|
|
38
|
+
const [draggingId, setDraggingId] = React.useState(null);
|
|
39
|
+
const draggingRef = React.useRef(null);
|
|
40
|
+
const [over, setOver] = React.useState(null);
|
|
41
|
+
const enabled = Boolean(onReorder);
|
|
42
|
+
const reset = React.useCallback(() => {
|
|
43
|
+
draggingRef.current = null;
|
|
44
|
+
setDraggingId(null);
|
|
45
|
+
setOver(null);
|
|
46
|
+
}, []);
|
|
47
|
+
const reachable = (id, delta) => {
|
|
48
|
+
const from = ids.indexOf(id);
|
|
49
|
+
if (!enabled || from === -1) return 0;
|
|
50
|
+
const step = Math.sign(delta);
|
|
51
|
+
let reach = 0;
|
|
52
|
+
while (reach !== delta) {
|
|
53
|
+
const t = from + reach + step;
|
|
54
|
+
if (t < 0 || t >= ids.length || canDropOn && !canDropOn(id, ids[t]))
|
|
55
|
+
break;
|
|
56
|
+
reach += step;
|
|
57
|
+
}
|
|
58
|
+
return reach;
|
|
59
|
+
};
|
|
60
|
+
const moveBy = (id, delta) => {
|
|
61
|
+
const next = moveIdBy(ids, id, reachable(id, delta));
|
|
62
|
+
if (next === ids) return;
|
|
63
|
+
onReorder?.(next);
|
|
64
|
+
const message = labels.moved(next.indexOf(id) + 1, next.length, id);
|
|
65
|
+
if (announce) announce(message);
|
|
66
|
+
else announceLive(message);
|
|
67
|
+
};
|
|
68
|
+
const moveButtonProps = (id, direction, label) => {
|
|
69
|
+
const delta = direction === "up" ? -1 : 1;
|
|
70
|
+
return {
|
|
71
|
+
type: "button",
|
|
72
|
+
onClick: (e) => {
|
|
73
|
+
e.stopPropagation();
|
|
74
|
+
moveBy(id, delta);
|
|
75
|
+
},
|
|
76
|
+
disabled: reachable(id, delta) === 0,
|
|
77
|
+
"aria-label": label ?? (direction === "up" ? labels.moveUp : labels.moveDown)
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
const moveByRef = React.useRef(moveBy);
|
|
81
|
+
moveByRef.current = moveBy;
|
|
82
|
+
const rowProps = React.useCallback(
|
|
83
|
+
(id) => {
|
|
84
|
+
if (!enabled) return {};
|
|
85
|
+
const keyProps = keyboard ? {
|
|
86
|
+
tabIndex: 0,
|
|
87
|
+
"aria-keyshortcuts": "Alt+ArrowUp Alt+ArrowDown",
|
|
88
|
+
onKeyDown: (e) => {
|
|
89
|
+
if (e.target !== e.currentTarget || !e.altKey) return;
|
|
90
|
+
if (e.key !== "ArrowUp" && e.key !== "ArrowDown") return;
|
|
91
|
+
e.preventDefault();
|
|
92
|
+
moveByRef.current(id, e.key === "ArrowUp" ? -1 : 1);
|
|
93
|
+
}
|
|
94
|
+
} : {};
|
|
95
|
+
return {
|
|
96
|
+
...keyProps,
|
|
97
|
+
draggable: true,
|
|
98
|
+
// WebKit (iPadOS Safari, incl. remote-pointer sessions) starts a text
|
|
99
|
+
// selection instead of a drag when the drag source contains selectable
|
|
100
|
+
// text — suppress selection and explicitly mark the row as the drag
|
|
101
|
+
// element so press-drag reliably initiates drag-and-drop.
|
|
102
|
+
style: {
|
|
103
|
+
userSelect: "none",
|
|
104
|
+
WebkitUserSelect: "none",
|
|
105
|
+
WebkitUserDrag: "element"
|
|
106
|
+
},
|
|
107
|
+
onDragStart: (e) => {
|
|
108
|
+
e.dataTransfer.effectAllowed = "move";
|
|
109
|
+
e.dataTransfer.setData("text/plain", id);
|
|
110
|
+
const preview = getDragPreview?.(id);
|
|
111
|
+
if (preview) e.dataTransfer.setDragImage(preview, 0, 0);
|
|
112
|
+
draggingRef.current = id;
|
|
113
|
+
setDraggingId(id);
|
|
114
|
+
},
|
|
115
|
+
onDragEnd: reset,
|
|
116
|
+
onDragOver: (e) => {
|
|
117
|
+
const dragged = draggingRef.current;
|
|
118
|
+
if (!dragged || dragged === id || canDropOn && !canDropOn(dragged, id)) {
|
|
119
|
+
setOver(null);
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
e.preventDefault();
|
|
123
|
+
e.dataTransfer.dropEffect = "move";
|
|
124
|
+
const r = e.currentTarget.getBoundingClientRect();
|
|
125
|
+
const after = e.clientY > r.top + r.height / 2;
|
|
126
|
+
setOver(
|
|
127
|
+
(prev) => prev?.id === id && prev.after === after ? prev : { id, after }
|
|
128
|
+
);
|
|
129
|
+
},
|
|
130
|
+
onDragLeave: () => {
|
|
131
|
+
setOver((prev) => prev?.id === id ? null : prev);
|
|
132
|
+
},
|
|
133
|
+
onDrop: (e) => {
|
|
134
|
+
e.preventDefault();
|
|
135
|
+
const dragged = draggingRef.current ?? e.dataTransfer.getData("text/plain");
|
|
136
|
+
reset();
|
|
137
|
+
if (!dragged || dragged === id) return;
|
|
138
|
+
if (canDropOn && !canDropOn(dragged, id)) return;
|
|
139
|
+
const r = e.currentTarget.getBoundingClientRect();
|
|
140
|
+
const after = e.clientY > r.top + r.height / 2;
|
|
141
|
+
onReorder?.(reorderIds(ids, dragged, id, after));
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
},
|
|
145
|
+
[enabled, keyboard, ids, onReorder, canDropOn, getDragPreview, reset]
|
|
146
|
+
);
|
|
147
|
+
return {
|
|
148
|
+
enabled,
|
|
149
|
+
draggingId,
|
|
150
|
+
over,
|
|
151
|
+
rowProps,
|
|
152
|
+
moveBy,
|
|
153
|
+
moveButtonProps,
|
|
154
|
+
announcement: announce ? "" : announcement
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
function dragIndicatorClasses(drag, id) {
|
|
158
|
+
return [
|
|
159
|
+
drag.draggingId === id ? "opacity-40" : "",
|
|
160
|
+
drag.over?.id === id && !drag.over.after ? "shadow-[inset_0_2px_0_0_var(--color-primary-500,#3b82f6)]" : "",
|
|
161
|
+
drag.over?.id === id && drag.over.after ? "shadow-[inset_0_-2px_0_0_var(--color-primary-500,#3b82f6)]" : ""
|
|
162
|
+
].filter(Boolean).join(" ");
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
export { DEFAULT_DRAG_REORDER_LABELS, dragIndicatorClasses, moveIdBy, reorderIds, useDragReorder };
|
|
166
|
+
//# sourceMappingURL=chunk-YUMOM3KE.js.map
|
|
167
|
+
//# sourceMappingURL=chunk-YUMOM3KE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/hooks/useDragReorder.ts"],"names":[],"mappings":"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","file":"chunk-YUMOM3KE.js","sourcesContent":["'use client';\n\nimport * as React from 'react';\n\nimport { useLiveAnnouncement } from './useLiveAnnouncement';\n\n/** Insert `draggedId` before/after `targetId` in `ids`. */\nexport function reorderIds(\n ids: string[],\n draggedId: string,\n targetId: string,\n after: boolean\n): string[] {\n if (draggedId === targetId) return ids;\n // Ignore drags that originate outside this list (stale payloads would\n // otherwise be inserted as unknown ids).\n if (!ids.includes(draggedId)) return ids;\n const without = ids.filter((i) => i !== draggedId);\n const idx = without.indexOf(targetId);\n if (idx === -1) return ids;\n without.splice(after ? idx + 1 : idx, 0, draggedId);\n return without;\n}\n\n/** Move `id` by `delta` positions (clamped). Returns `ids` unchanged when it can't move. */\nexport function moveIdBy(ids: string[], id: string, delta: number): string[] {\n const from = ids.indexOf(id);\n if (from === -1) return ids;\n const to = Math.max(0, Math.min(ids.length - 1, from + delta));\n if (to === from) return ids;\n const next = ids.filter((i) => i !== id);\n next.splice(to, 0, id);\n return next;\n}\n\nexport interface DragReorderLabels {\n moveUp: string;\n moveDown: string;\n /** Announced after a keyboard/button move */\n moved: (position: number, total: number, id: string) => string;\n}\n\nexport const DEFAULT_DRAG_REORDER_LABELS: DragReorderLabels = {\n moveUp: 'Move up',\n moveDown: 'Move down',\n moved: (position, total) => `Moved to position ${position} of ${total}`,\n};\n\nexport interface UseDragReorderOptions {\n /** Current flat order of item ids (props order) */\n ids: string[];\n /** Called with the full new id order after a drop or move. Omit to disable reordering. */\n onReorder?: (ids: string[]) => void;\n /** Restrict drops, e.g. to the same status group */\n canDropOn?: (draggedId: string, targetId: string) => boolean;\n /** Add Alt+ArrowUp / Alt+ArrowDown handling (and `tabIndex={0}`) to `rowProps`. Off by default so rows with their own `onKeyDown` keep working. */\n keyboard?: boolean;\n /** Receives move announcements instead of the returned `announcement` string. */\n announce?: (message: string) => void;\n /** Element rendered as the drag image (`dataTransfer.setDragImage`). */\n getDragPreview?: (id: string) => Element | null;\n labels?: Partial<DragReorderLabels>;\n}\n\nexport interface DragOverState {\n id: string;\n /** Drop indicator position relative to the hovered row */\n after: boolean;\n}\n\nexport interface UseDragReorderReturn {\n /** Whether drag reordering is active (onReorder provided) */\n enabled: boolean;\n /** Id currently being dragged, if any */\n draggingId: string | null;\n /** Row currently hovered as a drop target */\n over: DragOverState | null;\n /** Spread onto each row element (must be keyed by a stable id) */\n rowProps: (id: string) => React.HTMLAttributes<HTMLElement>;\n /** Move an item by `delta` positions; no-op at the ends or across `canDropOn` boundaries. */\n moveBy: (id: string, delta: number) => void;\n /** Props for a visible move button */\n moveButtonProps: (\n id: string,\n direction: 'up' | 'down',\n label?: string\n ) => {\n type: 'button';\n onClick: (e: React.MouseEvent) => void;\n disabled: boolean;\n 'aria-label': string;\n };\n /** Latest move message; render in an `aria-live=\"polite\"` region (empty when `announce` is given). */\n announcement: string;\n}\n\n/**\n * HTML5 drag-and-drop list reordering. Rows spread `rowProps(id)`; on drop the\n * hook computes the full new id order and reports it via `onReorder` — the\n * consumer persists it (e.g. on the encounter/patient object) and feeds the\n * list back in props order.\n *\n * Drag-and-drop is pointer-only, so pair it with `moveButtonProps` buttons\n * and/or `keyboard: true` (Alt+↑/↓ on focused rows), and render\n * `announcement` in a polite live region.\n *\n * @example\n * ```tsx\n * const drag = useDragReorder({ ids: items.map((i) => i.id), onReorder, keyboard: true });\n * // <li {...drag.rowProps(item.id)} className={cn(dragIndicatorClasses(drag, item.id))}>\n * // <button {...drag.moveButtonProps(item.id, 'up')}><ChevronUp /></button>\n * // <div aria-live=\"polite\" className=\"sr-only\">{drag.announcement}</div>\n * ```\n */\nexport function useDragReorder({\n ids,\n onReorder,\n canDropOn,\n keyboard = false,\n announce,\n getDragPreview,\n labels: labelsProp,\n}: UseDragReorderOptions): UseDragReorderReturn {\n const labels = { ...DEFAULT_DRAG_REORDER_LABELS, ...labelsProp };\n const [announcement, announceLive] = useLiveAnnouncement();\n const [draggingId, setDraggingId] = React.useState<string | null>(null);\n // dragover can fire before the dragstart state update is visible, so the\n // authoritative dragged id lives in a ref (set synchronously)\n const draggingRef = React.useRef<string | null>(null);\n const [over, setOver] = React.useState<DragOverState | null>(null);\n const enabled = Boolean(onReorder);\n\n const reset = React.useCallback(() => {\n draggingRef.current = null;\n setDraggingId(null);\n setOver(null);\n }, []);\n\n /** How far `id` can move toward `delta`: stops at the ends or the first slot canDropOn rejects. */\n const reachable = (id: string, delta: number): number => {\n const from = ids.indexOf(id);\n if (!enabled || from === -1) return 0;\n const step = Math.sign(delta);\n let reach = 0;\n while (reach !== delta) {\n const t = from + reach + step;\n if (t < 0 || t >= ids.length || (canDropOn && !canDropOn(id, ids[t])))\n break;\n reach += step;\n }\n return reach;\n };\n\n const moveBy = (id: string, delta: number) => {\n const next = moveIdBy(ids, id, reachable(id, delta));\n if (next === ids) return;\n onReorder?.(next);\n const message = labels.moved(next.indexOf(id) + 1, next.length, id);\n if (announce) announce(message);\n else announceLive(message);\n };\n\n const moveButtonProps: UseDragReorderReturn['moveButtonProps'] = (\n id,\n direction,\n label\n ) => {\n const delta = direction === 'up' ? -1 : 1;\n return {\n type: 'button',\n onClick: (e) => {\n e.stopPropagation();\n moveBy(id, delta);\n },\n disabled: reachable(id, delta) === 0,\n 'aria-label':\n label ?? (direction === 'up' ? labels.moveUp : labels.moveDown),\n };\n };\n\n const moveByRef = React.useRef(moveBy);\n moveByRef.current = moveBy;\n\n const rowProps = React.useCallback(\n (id: string): React.HTMLAttributes<HTMLElement> => {\n if (!enabled) return {};\n const keyProps: React.HTMLAttributes<HTMLElement> = keyboard\n ? {\n tabIndex: 0,\n 'aria-keyshortcuts': 'Alt+ArrowUp Alt+ArrowDown',\n onKeyDown: (e) => {\n if (e.target !== e.currentTarget || !e.altKey) return;\n if (e.key !== 'ArrowUp' && e.key !== 'ArrowDown') return;\n e.preventDefault();\n moveByRef.current(id, e.key === 'ArrowUp' ? -1 : 1);\n },\n }\n : {};\n return {\n ...keyProps,\n draggable: true,\n // WebKit (iPadOS Safari, incl. remote-pointer sessions) starts a text\n // selection instead of a drag when the drag source contains selectable\n // text — suppress selection and explicitly mark the row as the drag\n // element so press-drag reliably initiates drag-and-drop.\n style: {\n userSelect: 'none',\n WebkitUserSelect: 'none',\n WebkitUserDrag: 'element',\n } as React.CSSProperties,\n onDragStart: (e) => {\n e.dataTransfer.effectAllowed = 'move';\n e.dataTransfer.setData('text/plain', id);\n const preview = getDragPreview?.(id);\n if (preview) e.dataTransfer.setDragImage(preview, 0, 0);\n draggingRef.current = id;\n setDraggingId(id);\n },\n onDragEnd: reset,\n onDragOver: (e) => {\n const dragged = draggingRef.current;\n if (\n !dragged ||\n dragged === id ||\n (canDropOn && !canDropOn(dragged, id))\n ) {\n // hovering an invalid target: clear any stale indicator\n setOver(null);\n return;\n }\n e.preventDefault();\n e.dataTransfer.dropEffect = 'move';\n const r = e.currentTarget.getBoundingClientRect();\n const after = e.clientY > r.top + r.height / 2;\n setOver((prev) =>\n prev?.id === id && prev.after === after ? prev : { id, after }\n );\n },\n onDragLeave: () => {\n setOver((prev) => (prev?.id === id ? null : prev));\n },\n onDrop: (e) => {\n e.preventDefault();\n const dragged =\n draggingRef.current ?? e.dataTransfer.getData('text/plain');\n reset();\n if (!dragged || dragged === id) return;\n if (canDropOn && !canDropOn(dragged, id)) return;\n const r = e.currentTarget.getBoundingClientRect();\n const after = e.clientY > r.top + r.height / 2;\n onReorder?.(reorderIds(ids, dragged, id, after));\n },\n };\n },\n [enabled, keyboard, ids, onReorder, canDropOn, getDragPreview, reset]\n );\n\n return {\n enabled,\n draggingId,\n over,\n rowProps,\n moveBy,\n moveButtonProps,\n announcement: announce ? '' : announcement,\n };\n}\n\n/** Tailwind classes for the drag state of a row: drop indicator + dragging dim. */\nexport function dragIndicatorClasses(\n drag: Pick<UseDragReorderReturn, 'draggingId' | 'over'>,\n id: string\n): string {\n return [\n drag.draggingId === id ? 'opacity-40' : '',\n drag.over?.id === id && !drag.over.after\n ? 'shadow-[inset_0_2px_0_0_var(--color-primary-500,#3b82f6)]'\n : '',\n drag.over?.id === id && drag.over.after\n ? 'shadow-[inset_0_-2px_0_0_var(--color-primary-500,#3b82f6)]'\n : '',\n ]\n .filter(Boolean)\n .join(' ');\n}\n"]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var chunkPLMXN23Q_cjs = require('./chunk-PLMXN23Q.cjs');
|
|
4
4
|
var chunkRS5VA6QU_cjs = require('./chunk-RS5VA6QU.cjs');
|
|
5
|
-
var
|
|
5
|
+
var chunkANMX7YDL_cjs = require('./chunk-ANMX7YDL.cjs');
|
|
6
6
|
var chunkS5RVSXDV_cjs = require('./chunk-S5RVSXDV.cjs');
|
|
7
7
|
var React2 = require('react');
|
|
8
8
|
var reactDom = require('react-dom');
|
|
@@ -124,7 +124,7 @@ function DashboardCustomizePanel({
|
|
|
124
124
|
] }, category || "general"))
|
|
125
125
|
] }),
|
|
126
126
|
onReset && /* @__PURE__ */ jsxRuntime.jsx(chunkRS5VA6QU_cjs.SheetFooter, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
127
|
-
|
|
127
|
+
chunkANMX7YDL_cjs.Button,
|
|
128
128
|
{
|
|
129
129
|
variant: "outline",
|
|
130
130
|
size: "sm",
|
|
@@ -632,7 +632,7 @@ var CustomizableDashboard = React2__namespace.forwardRef(function CustomizableDa
|
|
|
632
632
|
const toolbar = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-end gap-3 pb-2", children: [
|
|
633
633
|
title && /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-foreground me-auto text-lg font-semibold", children: title }),
|
|
634
634
|
widgets && widgets.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
635
|
-
|
|
635
|
+
chunkANMX7YDL_cjs.Button,
|
|
636
636
|
{
|
|
637
637
|
variant: "outline",
|
|
638
638
|
size: "sm",
|
|
@@ -732,5 +732,5 @@ exports.mergeColumnOrder = mergeColumnOrder;
|
|
|
732
732
|
exports.moveAcrossColumns = moveAcrossColumns;
|
|
733
733
|
exports.reorderOnDrop = reorderOnDrop;
|
|
734
734
|
exports.requiredColumns = requiredColumns;
|
|
735
|
-
//# sourceMappingURL=chunk-
|
|
736
|
-
//# sourceMappingURL=chunk-
|
|
735
|
+
//# sourceMappingURL=chunk-ZG6FXMDX.cjs.map
|
|
736
|
+
//# sourceMappingURL=chunk-ZG6FXMDX.cjs.map
|