@mieweb/ui 0.10.0-dev.31 → 0.10.0-dev.33
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-BNH4SXJB.js → chunk-2X54ZLT6.js} +6 -6
- package/dist/{chunk-BNH4SXJB.js.map → chunk-2X54ZLT6.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-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-56VTM4OX.js +261 -0
- package/dist/chunk-56VTM4OX.js.map +1 -0
- 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-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-WXFGHDTV.cjs → chunk-AJPFQF3H.cjs} +18 -18
- package/dist/{chunk-WXFGHDTV.cjs.map → chunk-AJPFQF3H.cjs.map} +1 -1
- 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-ZTMYKAVU.cjs → chunk-CCAVJSWL.cjs} +49 -48
- package/dist/chunk-CCAVJSWL.cjs.map +1 -0
- 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-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-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-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-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-BIQ7GSO2.js → chunk-JMAZ2GKT.js} +3 -3
- package/dist/{chunk-BIQ7GSO2.js.map → chunk-JMAZ2GKT.js.map} +1 -1
- 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-T4L7Q5FA.cjs → chunk-LC3JL2HB.cjs} +6 -2
- package/dist/chunk-LC3JL2HB.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-QURJVPRH.cjs → chunk-MJJJDQ5P.cjs} +46 -2
- package/dist/chunk-MJJJDQ5P.cjs.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-NKV76R65.cjs → chunk-O6BJMVGT.cjs} +45 -45
- package/dist/{chunk-NKV76R65.cjs.map → chunk-O6BJMVGT.cjs.map} +1 -1
- 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-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-SD7ONW6S.js → chunk-S2JZL4JC.js} +5 -5
- package/dist/{chunk-SD7ONW6S.js.map → chunk-S2JZL4JC.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-MLAWXPRY.js → chunk-TKWNXAFI.js} +46 -2
- package/dist/chunk-TKWNXAFI.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-ENMXHZNE.js → chunk-TWQSMUE6.js} +6 -2
- package/dist/chunk-TWQSMUE6.js.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-UTIPENPW.cjs +286 -0
- package/dist/chunk-UTIPENPW.cjs.map +1 -0
- 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-CPPUT74P.cjs → chunk-VV2U36T6.cjs} +9 -9
- package/dist/{chunk-CPPUT74P.cjs.map → chunk-VV2U36T6.cjs.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-JBIGSP2T.js → chunk-YMILRSRO.js} +6 -5
- package/dist/chunk-YMILRSRO.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 +17 -4
- package/dist/components/AlertDialog/index.d.cts +66 -13
- package/dist/components/AlertDialog/index.d.ts +66 -13
- package/dist/components/AlertDialog/index.js +4 -3
- 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/KeyboardShortcutsOverlay/index.cjs +4 -4
- package/dist/components/KeyboardShortcutsOverlay/index.js +2 -2
- 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 +10 -9
- package/dist/components/MediaEditor/index.js +5 -4
- package/dist/components/MediaFeed/index.cjs +9 -6
- package/dist/components/MediaFeed/index.js +8 -5
- 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/Modal/index.cjs +9 -9
- package/dist/components/Modal/index.js +1 -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 +23 -19
- package/dist/components/SuperChat/index.cjs.map +1 -1
- package/dist/components/SuperChat/index.js +11 -7
- 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 +9 -7
- package/dist/esheet.cjs.map +1 -1
- package/dist/esheet.js +6 -4
- 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 +1391 -847
- 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 +539 -171
- 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-ENMXHZNE.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-T4L7Q5FA.cjs.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,318 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkS5RVSXDV_cjs = require('./chunk-S5RVSXDV.cjs');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var classVarianceAuthority = require('class-variance-authority');
|
|
6
|
+
var lucideReact = require('lucide-react');
|
|
7
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
8
|
+
|
|
9
|
+
function _interopNamespace(e) {
|
|
10
|
+
if (e && e.__esModule) return e;
|
|
11
|
+
var n = Object.create(null);
|
|
12
|
+
if (e) {
|
|
13
|
+
Object.keys(e).forEach(function (k) {
|
|
14
|
+
if (k !== 'default') {
|
|
15
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
16
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
get: function () { return e[k]; }
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
n.default = e;
|
|
24
|
+
return Object.freeze(n);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
28
|
+
|
|
29
|
+
var defaultLogoUploaderLabels = {
|
|
30
|
+
upload: "Upload logo",
|
|
31
|
+
replace: "Replace logo",
|
|
32
|
+
remove: "Remove logo",
|
|
33
|
+
dropHint: "Drop an image or click to browse",
|
|
34
|
+
uploading: "Uploading\u2026",
|
|
35
|
+
removing: "Removing\u2026",
|
|
36
|
+
invalidType: "That file type is not supported.",
|
|
37
|
+
tooLarge: (maxBytes) => `Files must be ${formatBytes(maxBytes)} or smaller.`,
|
|
38
|
+
uploadFailed: "Upload failed. Try again.",
|
|
39
|
+
removeFailed: "Could not remove the logo. Try again.",
|
|
40
|
+
previewAlt: "Current logo"
|
|
41
|
+
};
|
|
42
|
+
function formatBytes(bytes) {
|
|
43
|
+
if (bytes < 1024) return `${bytes} B`;
|
|
44
|
+
const kb = bytes / 1024;
|
|
45
|
+
if (kb < 1024) return `${Math.round(kb)} KB`;
|
|
46
|
+
return `${Math.round(kb / 1024 * 10) / 10} MB`;
|
|
47
|
+
}
|
|
48
|
+
function safeImageSrc(url) {
|
|
49
|
+
const trimmed = url?.trim();
|
|
50
|
+
if (!trimmed) return null;
|
|
51
|
+
const scheme = /^([a-z][a-z\d+.-]*):/i.exec(trimmed)?.[1].toLowerCase();
|
|
52
|
+
if (!scheme || ["http", "https", "blob"].includes(scheme)) return trimmed;
|
|
53
|
+
return /^data:image\//i.test(trimmed) ? trimmed : null;
|
|
54
|
+
}
|
|
55
|
+
function matchesAccept(file, accept) {
|
|
56
|
+
return accept.split(",").map((token) => token.trim().toLowerCase()).some((token) => {
|
|
57
|
+
if (!token) return false;
|
|
58
|
+
if (token.startsWith(".")) return file.name.toLowerCase().endsWith(token);
|
|
59
|
+
if (token.endsWith("/*")) return file.type.startsWith(token.slice(0, -1));
|
|
60
|
+
return file.type === token;
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
function FilePreview({ file, alt }) {
|
|
64
|
+
const canvasRef = React__namespace.useRef(null);
|
|
65
|
+
React__namespace.useEffect(() => {
|
|
66
|
+
if (typeof globalThis.createImageBitmap !== "function") return;
|
|
67
|
+
let cancelled = false;
|
|
68
|
+
globalThis.createImageBitmap(file).then((bitmap) => {
|
|
69
|
+
const canvas = canvasRef.current;
|
|
70
|
+
if (!cancelled && canvas) {
|
|
71
|
+
canvas.width = bitmap.width;
|
|
72
|
+
canvas.height = bitmap.height;
|
|
73
|
+
canvas.getContext("2d")?.drawImage(bitmap, 0, 0);
|
|
74
|
+
}
|
|
75
|
+
bitmap.close();
|
|
76
|
+
}).catch(() => {
|
|
77
|
+
});
|
|
78
|
+
return () => {
|
|
79
|
+
cancelled = true;
|
|
80
|
+
};
|
|
81
|
+
}, [file]);
|
|
82
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
83
|
+
"canvas",
|
|
84
|
+
{
|
|
85
|
+
ref: canvasRef,
|
|
86
|
+
role: "img",
|
|
87
|
+
"aria-label": alt,
|
|
88
|
+
className: "h-full w-full object-contain"
|
|
89
|
+
}
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
var targetVariants = classVarianceAuthority.cva(
|
|
93
|
+
[
|
|
94
|
+
"relative flex cursor-pointer items-center justify-center overflow-hidden border-2 border-dashed bg-muted/40 text-muted-foreground",
|
|
95
|
+
"transition-colors motion-reduce:transition-none hover:border-primary-500 hover:text-foreground",
|
|
96
|
+
"peer-focus-visible:ring-ring peer-focus-visible:ring-2 peer-focus-visible:ring-offset-2",
|
|
97
|
+
"peer-disabled:cursor-not-allowed peer-disabled:opacity-50"
|
|
98
|
+
],
|
|
99
|
+
{
|
|
100
|
+
variants: {
|
|
101
|
+
shape: { square: "rounded-lg", circle: "rounded-full" },
|
|
102
|
+
size: { sm: "h-16 w-16", md: "h-24 w-24", lg: "h-32 w-32" },
|
|
103
|
+
dragging: {
|
|
104
|
+
true: "border-primary-500 bg-primary-500/10",
|
|
105
|
+
false: "border-border"
|
|
106
|
+
},
|
|
107
|
+
filled: { true: "border-solid bg-card", false: "" }
|
|
108
|
+
},
|
|
109
|
+
defaultVariants: {
|
|
110
|
+
shape: "square",
|
|
111
|
+
size: "md",
|
|
112
|
+
dragging: false,
|
|
113
|
+
filled: false
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
);
|
|
117
|
+
var LogoUploader = React__namespace.forwardRef(
|
|
118
|
+
function LogoUploader2({
|
|
119
|
+
value,
|
|
120
|
+
onUpload,
|
|
121
|
+
onRemove,
|
|
122
|
+
accept = "image/*",
|
|
123
|
+
maxSizeBytes,
|
|
124
|
+
disabled,
|
|
125
|
+
shape,
|
|
126
|
+
size,
|
|
127
|
+
labels: labelOverrides,
|
|
128
|
+
className,
|
|
129
|
+
...props
|
|
130
|
+
}, ref) {
|
|
131
|
+
const labels = { ...defaultLogoUploaderLabels, ...labelOverrides };
|
|
132
|
+
const [busy, setBusy] = React__namespace.useState(
|
|
133
|
+
null
|
|
134
|
+
);
|
|
135
|
+
const [preview, setPreview] = React__namespace.useState(null);
|
|
136
|
+
const [localFile, setLocalFile] = React__namespace.useState(null);
|
|
137
|
+
const [error, setError] = React__namespace.useState(null);
|
|
138
|
+
const [dragging, setDragging] = React__namespace.useState(false);
|
|
139
|
+
const inputRef = React__namespace.useRef(null);
|
|
140
|
+
const generation = React__namespace.useRef(0);
|
|
141
|
+
const id = React__namespace.useId();
|
|
142
|
+
const inputId = `${id}-input`;
|
|
143
|
+
const errorId = `${id}-error`;
|
|
144
|
+
React__namespace.useEffect(() => {
|
|
145
|
+
generation.current += 1;
|
|
146
|
+
setPreview(null);
|
|
147
|
+
setLocalFile(null);
|
|
148
|
+
}, [value]);
|
|
149
|
+
const shown = localFile ? null : safeImageSrc(preview ?? value);
|
|
150
|
+
const filled = !!localFile || !!shown;
|
|
151
|
+
const inactive = disabled || busy !== null;
|
|
152
|
+
const refocusInput = React__namespace.useRef(false);
|
|
153
|
+
React__namespace.useEffect(() => {
|
|
154
|
+
if (busy === null && refocusInput.current) {
|
|
155
|
+
refocusInput.current = false;
|
|
156
|
+
inputRef.current?.focus();
|
|
157
|
+
}
|
|
158
|
+
}, [busy]);
|
|
159
|
+
const handleFile = async (file) => {
|
|
160
|
+
if (!file || inactive) return;
|
|
161
|
+
if (!matchesAccept(file, accept)) return setError(labels.invalidType);
|
|
162
|
+
if (maxSizeBytes !== void 0 && file.size > maxSizeBytes) {
|
|
163
|
+
return setError(labels.tooLarge(maxSizeBytes));
|
|
164
|
+
}
|
|
165
|
+
setError(null);
|
|
166
|
+
const request = ++generation.current;
|
|
167
|
+
setPreview(null);
|
|
168
|
+
setLocalFile(file);
|
|
169
|
+
setBusy("uploading");
|
|
170
|
+
try {
|
|
171
|
+
const url = await onUpload(file);
|
|
172
|
+
if (url && request === generation.current) {
|
|
173
|
+
setLocalFile(null);
|
|
174
|
+
setPreview(url);
|
|
175
|
+
}
|
|
176
|
+
} catch {
|
|
177
|
+
if (request === generation.current) {
|
|
178
|
+
setLocalFile(null);
|
|
179
|
+
setError(labels.uploadFailed);
|
|
180
|
+
}
|
|
181
|
+
} finally {
|
|
182
|
+
setBusy(null);
|
|
183
|
+
}
|
|
184
|
+
};
|
|
185
|
+
const handleRemove = async () => {
|
|
186
|
+
if (!onRemove || inactive) return;
|
|
187
|
+
setError(null);
|
|
188
|
+
setBusy("removing");
|
|
189
|
+
try {
|
|
190
|
+
await onRemove();
|
|
191
|
+
setPreview(null);
|
|
192
|
+
setLocalFile(null);
|
|
193
|
+
} catch {
|
|
194
|
+
setError(labels.removeFailed);
|
|
195
|
+
} finally {
|
|
196
|
+
refocusInput.current = true;
|
|
197
|
+
setBusy(null);
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
201
|
+
"div",
|
|
202
|
+
{
|
|
203
|
+
ref,
|
|
204
|
+
"data-slot": "logo-uploader",
|
|
205
|
+
"aria-busy": busy !== null || void 0,
|
|
206
|
+
className: chunkS5RVSXDV_cjs.cn("inline-flex flex-col items-start gap-2", className),
|
|
207
|
+
...props,
|
|
208
|
+
children: [
|
|
209
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
|
|
210
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
211
|
+
"input",
|
|
212
|
+
{
|
|
213
|
+
ref: inputRef,
|
|
214
|
+
id: inputId,
|
|
215
|
+
type: "file",
|
|
216
|
+
accept,
|
|
217
|
+
disabled: inactive,
|
|
218
|
+
"aria-label": filled ? labels.replace : labels.upload,
|
|
219
|
+
"aria-describedby": error ? errorId : void 0,
|
|
220
|
+
"aria-invalid": error ? true : void 0,
|
|
221
|
+
onChange: (e) => {
|
|
222
|
+
void handleFile(e.target.files?.[0]);
|
|
223
|
+
e.target.value = "";
|
|
224
|
+
},
|
|
225
|
+
className: "peer sr-only"
|
|
226
|
+
}
|
|
227
|
+
),
|
|
228
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
229
|
+
"label",
|
|
230
|
+
{
|
|
231
|
+
htmlFor: inputId,
|
|
232
|
+
"data-slot": "logo-uploader-target",
|
|
233
|
+
onDragOver: (e) => {
|
|
234
|
+
e.preventDefault();
|
|
235
|
+
if (!inactive) setDragging(true);
|
|
236
|
+
},
|
|
237
|
+
onDragLeave: () => setDragging(false),
|
|
238
|
+
onDrop: (e) => {
|
|
239
|
+
e.preventDefault();
|
|
240
|
+
setDragging(false);
|
|
241
|
+
void handleFile(e.dataTransfer.files?.[0]);
|
|
242
|
+
},
|
|
243
|
+
className: targetVariants({
|
|
244
|
+
shape,
|
|
245
|
+
size,
|
|
246
|
+
dragging,
|
|
247
|
+
filled
|
|
248
|
+
}),
|
|
249
|
+
children: [
|
|
250
|
+
localFile ? /* @__PURE__ */ jsxRuntime.jsx(FilePreview, { file: localFile, alt: labels.previewAlt }) : shown ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
251
|
+
"img",
|
|
252
|
+
{
|
|
253
|
+
src: shown,
|
|
254
|
+
alt: labels.previewAlt,
|
|
255
|
+
className: "h-full w-full object-contain"
|
|
256
|
+
}
|
|
257
|
+
) : /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex flex-col items-center gap-1 px-2 text-center text-xs", children: [
|
|
258
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ImagePlus, { "aria-hidden": "true", className: "h-5 w-5" }),
|
|
259
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: labels.dropHint })
|
|
260
|
+
] }),
|
|
261
|
+
busy && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
262
|
+
"span",
|
|
263
|
+
{
|
|
264
|
+
role: "status",
|
|
265
|
+
className: "bg-background/70 absolute inset-0 flex items-center justify-center",
|
|
266
|
+
children: [
|
|
267
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
268
|
+
lucideReact.Loader2,
|
|
269
|
+
{
|
|
270
|
+
"aria-hidden": "true",
|
|
271
|
+
className: "text-foreground h-5 w-5 animate-spin motion-reduce:animate-none"
|
|
272
|
+
}
|
|
273
|
+
),
|
|
274
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: busy === "uploading" ? labels.uploading : labels.removing })
|
|
275
|
+
]
|
|
276
|
+
}
|
|
277
|
+
)
|
|
278
|
+
]
|
|
279
|
+
}
|
|
280
|
+
),
|
|
281
|
+
filled && onRemove && /* @__PURE__ */ jsxRuntime.jsx(
|
|
282
|
+
"button",
|
|
283
|
+
{
|
|
284
|
+
type: "button",
|
|
285
|
+
"aria-label": labels.remove,
|
|
286
|
+
title: labels.remove,
|
|
287
|
+
disabled: inactive,
|
|
288
|
+
onClick: () => void handleRemove(),
|
|
289
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
290
|
+
"border-border bg-card text-muted-foreground absolute -end-2 -top-2 rounded-full border p-1 shadow-sm",
|
|
291
|
+
"hover:text-destructive focus-visible:ring-ring focus-visible:ring-2 focus-visible:outline-none",
|
|
292
|
+
"disabled:cursor-not-allowed disabled:opacity-50"
|
|
293
|
+
),
|
|
294
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Trash2, { "aria-hidden": "true", className: "h-3.5 w-3.5" })
|
|
295
|
+
}
|
|
296
|
+
)
|
|
297
|
+
] }),
|
|
298
|
+
error && /* @__PURE__ */ jsxRuntime.jsx(
|
|
299
|
+
"p",
|
|
300
|
+
{
|
|
301
|
+
id: errorId,
|
|
302
|
+
role: "alert",
|
|
303
|
+
"data-slot": "logo-uploader-error",
|
|
304
|
+
className: "text-destructive-700 dark:text-destructive-400 text-sm",
|
|
305
|
+
children: error
|
|
306
|
+
}
|
|
307
|
+
)
|
|
308
|
+
]
|
|
309
|
+
}
|
|
310
|
+
);
|
|
311
|
+
}
|
|
312
|
+
);
|
|
313
|
+
LogoUploader.displayName = "LogoUploader";
|
|
314
|
+
|
|
315
|
+
exports.LogoUploader = LogoUploader;
|
|
316
|
+
exports.defaultLogoUploaderLabels = defaultLogoUploaderLabels;
|
|
317
|
+
//# sourceMappingURL=chunk-FSGJXCBG.cjs.map
|
|
318
|
+
//# sourceMappingURL=chunk-FSGJXCBG.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/LogoUploader/LogoUploader.tsx"],"names":["React","jsx","cva","LogoUploader","jsxs","cn","ImagePlus","Loader2","Trash2"],"mappings":"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","file":"chunk-FSGJXCBG.cjs","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { ImagePlus, Loader2, Trash2 } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface LogoUploaderLabels {\n /** Accessible name of the file input. */\n upload: string;\n replace: string;\n remove: string;\n /** Text inside the empty drop target. */\n dropHint: string;\n uploading: string;\n removing: string;\n invalidType: string;\n tooLarge: (maxBytes: number) => string;\n uploadFailed: string;\n removeFailed: string;\n /** Alt text of the preview image. */\n previewAlt: string;\n}\n\nexport const defaultLogoUploaderLabels: LogoUploaderLabels = {\n upload: 'Upload logo',\n replace: 'Replace logo',\n remove: 'Remove logo',\n dropHint: 'Drop an image or click to browse',\n uploading: 'Uploading…',\n removing: 'Removing…',\n invalidType: 'That file type is not supported.',\n tooLarge: (maxBytes) => `Files must be ${formatBytes(maxBytes)} or smaller.`,\n uploadFailed: 'Upload failed. Try again.',\n removeFailed: 'Could not remove the logo. Try again.',\n previewAlt: 'Current logo',\n};\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n const kb = bytes / 1024;\n if (kb < 1024) return `${Math.round(kb)} KB`;\n return `${Math.round((kb / 1024) * 10) / 10} MB`;\n}\n\n/** Relative URLs, http(s), blob: and data:image/ only — nothing else reaches `<img src>`. */\nfunction safeImageSrc(url: string | null | undefined): string | null {\n const trimmed = url?.trim();\n if (!trimmed) return null;\n const scheme = /^([a-z][a-z\\d+.-]*):/i.exec(trimmed)?.[1].toLowerCase();\n if (!scheme || ['http', 'https', 'blob'].includes(scheme)) return trimmed;\n return /^data:image\\//i.test(trimmed) ? trimmed : null;\n}\n\n/** True when `file` matches an `accept` attribute value. */\nfunction matchesAccept(file: File, accept: string): boolean {\n return accept\n .split(',')\n .map((token) => token.trim().toLowerCase())\n .some((token) => {\n if (!token) return false;\n if (token.startsWith('.')) return file.name.toLowerCase().endsWith(token);\n if (token.endsWith('/*')) return file.type.startsWith(token.slice(0, -1));\n return file.type === token;\n });\n}\n\n/**\n * Local preview of a picked file. Drawn to a canvas so the file never becomes\n * an `<img src>` string (no object URL to sanitize or revoke).\n */\nfunction FilePreview({ file, alt }: { file: File; alt: string }) {\n const canvasRef = React.useRef<HTMLCanvasElement>(null);\n React.useEffect(() => {\n // Without the API (older engines, jsdom) the target keeps its spinner,\n // same as an undecodable image.\n if (typeof globalThis.createImageBitmap !== 'function') return;\n let cancelled = false;\n globalThis\n .createImageBitmap(file)\n .then((bitmap) => {\n const canvas = canvasRef.current;\n if (!cancelled && canvas) {\n canvas.width = bitmap.width;\n canvas.height = bitmap.height;\n canvas.getContext('2d')?.drawImage(bitmap, 0, 0);\n }\n bitmap.close();\n })\n .catch(() => {\n // Undecodable image: the target keeps its border and spinner.\n });\n return () => {\n cancelled = true;\n };\n }, [file]);\n return (\n <canvas\n ref={canvasRef}\n role=\"img\"\n aria-label={alt}\n className=\"h-full w-full object-contain\"\n />\n );\n}\n\nconst targetVariants = cva(\n [\n 'relative flex cursor-pointer items-center justify-center overflow-hidden border-2 border-dashed bg-muted/40 text-muted-foreground',\n 'transition-colors motion-reduce:transition-none hover:border-primary-500 hover:text-foreground',\n 'peer-focus-visible:ring-ring peer-focus-visible:ring-2 peer-focus-visible:ring-offset-2',\n 'peer-disabled:cursor-not-allowed peer-disabled:opacity-50',\n ],\n {\n variants: {\n shape: { square: 'rounded-lg', circle: 'rounded-full' },\n size: { sm: 'h-16 w-16', md: 'h-24 w-24', lg: 'h-32 w-32' },\n dragging: {\n true: 'border-primary-500 bg-primary-500/10',\n false: 'border-border',\n },\n filled: { true: 'border-solid bg-card', false: '' },\n },\n defaultVariants: {\n shape: 'square',\n size: 'md',\n dragging: false,\n filled: false,\n },\n }\n);\n\nexport interface LogoUploaderProps\n extends\n Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'>,\n Pick<VariantProps<typeof targetVariants>, 'shape' | 'size'> {\n /** URL of the current logo. */\n value?: string | null;\n /** Upload the file. Resolve with the new URL to preview it until `value` updates. */\n onUpload: (file: File) => Promise<string | void>;\n /** Remove the logo. Omit to hide the remove button. */\n onRemove?: () => void | Promise<void>;\n /** `accept` attribute for the file input. */\n accept?: string;\n /** Reject files larger than this. */\n maxSizeBytes?: number;\n disabled?: boolean;\n /** Translatable strings. */\n labels?: Partial<LogoUploaderLabels>;\n}\n\n/**\n * Square or circular logo drop target with click-to-browse, preview and\n * remove.\n */\nexport const LogoUploader = React.forwardRef<HTMLDivElement, LogoUploaderProps>(\n function LogoUploader(\n {\n value,\n onUpload,\n onRemove,\n accept = 'image/*',\n maxSizeBytes,\n disabled,\n shape,\n size,\n labels: labelOverrides,\n className,\n ...props\n },\n ref\n ) {\n const labels = { ...defaultLogoUploaderLabels, ...labelOverrides };\n const [busy, setBusy] = React.useState<'uploading' | 'removing' | null>(\n null\n );\n const [preview, setPreview] = React.useState<string | null>(null);\n const [localFile, setLocalFile] = React.useState<File | null>(null);\n const [error, setError] = React.useState<string | null>(null);\n const [dragging, setDragging] = React.useState(false);\n const inputRef = React.useRef<HTMLInputElement>(null);\n // Bumped by each upload and each new `value`; stale uploads check it.\n const generation = React.useRef(0);\n const id = React.useId();\n const inputId = `${id}-input`;\n const errorId = `${id}-error`;\n\n // A fresh `value` from the caller supersedes any local preview.\n React.useEffect(() => {\n generation.current += 1;\n setPreview(null);\n setLocalFile(null);\n }, [value]);\n\n const shown = localFile ? null : safeImageSrc(preview ?? value);\n const filled = !!localFile || !!shown;\n const inactive = disabled || busy !== null;\n\n // The input is disabled while busy, so focus it once it re-enables.\n const refocusInput = React.useRef(false);\n React.useEffect(() => {\n if (busy === null && refocusInput.current) {\n refocusInput.current = false;\n inputRef.current?.focus();\n }\n }, [busy]);\n\n const handleFile = async (file: File | undefined) => {\n if (!file || inactive) return;\n if (!matchesAccept(file, accept)) return setError(labels.invalidType);\n if (maxSizeBytes !== undefined && file.size > maxSizeBytes) {\n return setError(labels.tooLarge(maxSizeBytes));\n }\n setError(null);\n const request = ++generation.current;\n setPreview(null);\n setLocalFile(file);\n setBusy('uploading');\n try {\n const url = await onUpload(file);\n if (url && request === generation.current) {\n setLocalFile(null);\n setPreview(url);\n }\n } catch {\n if (request === generation.current) {\n setLocalFile(null);\n setError(labels.uploadFailed);\n }\n } finally {\n setBusy(null);\n }\n };\n\n const handleRemove = async () => {\n if (!onRemove || inactive) return;\n setError(null);\n setBusy('removing');\n try {\n await onRemove();\n setPreview(null);\n setLocalFile(null);\n } catch {\n setError(labels.removeFailed);\n } finally {\n refocusInput.current = true;\n setBusy(null);\n }\n };\n\n return (\n <div\n ref={ref}\n data-slot=\"logo-uploader\"\n aria-busy={busy !== null || undefined}\n className={cn('inline-flex flex-col items-start gap-2', className)}\n {...props}\n >\n <div className=\"relative\">\n <input\n ref={inputRef}\n id={inputId}\n type=\"file\"\n accept={accept}\n disabled={inactive}\n aria-label={filled ? labels.replace : labels.upload}\n aria-describedby={error ? errorId : undefined}\n aria-invalid={error ? true : undefined}\n onChange={(e) => {\n void handleFile(e.target.files?.[0]);\n e.target.value = '';\n }}\n className=\"peer sr-only\"\n />\n <label\n htmlFor={inputId}\n data-slot=\"logo-uploader-target\"\n onDragOver={(e) => {\n e.preventDefault();\n if (!inactive) setDragging(true);\n }}\n onDragLeave={() => setDragging(false)}\n onDrop={(e) => {\n e.preventDefault();\n setDragging(false);\n void handleFile(e.dataTransfer.files?.[0]);\n }}\n className={targetVariants({\n shape,\n size,\n dragging,\n filled,\n })}\n >\n {localFile ? (\n <FilePreview file={localFile} alt={labels.previewAlt} />\n ) : shown ? (\n <img\n src={shown}\n alt={labels.previewAlt}\n className=\"h-full w-full object-contain\"\n />\n ) : (\n <span className=\"flex flex-col items-center gap-1 px-2 text-center text-xs\">\n <ImagePlus aria-hidden=\"true\" className=\"h-5 w-5\" />\n <span>{labels.dropHint}</span>\n </span>\n )}\n {busy && (\n <span\n role=\"status\"\n className=\"bg-background/70 absolute inset-0 flex items-center justify-center\"\n >\n <Loader2\n aria-hidden=\"true\"\n className=\"text-foreground h-5 w-5 animate-spin motion-reduce:animate-none\"\n />\n <span className=\"sr-only\">\n {busy === 'uploading' ? labels.uploading : labels.removing}\n </span>\n </span>\n )}\n </label>\n {filled && onRemove && (\n <button\n type=\"button\"\n aria-label={labels.remove}\n title={labels.remove}\n disabled={inactive}\n onClick={() => void handleRemove()}\n className={cn(\n 'border-border bg-card text-muted-foreground absolute -end-2 -top-2 rounded-full border p-1 shadow-sm',\n 'hover:text-destructive focus-visible:ring-ring focus-visible:ring-2 focus-visible:outline-none',\n 'disabled:cursor-not-allowed disabled:opacity-50'\n )}\n >\n <Trash2 aria-hidden=\"true\" className=\"h-3.5 w-3.5\" />\n </button>\n )}\n </div>\n {error && (\n <p\n id={errorId}\n role=\"alert\"\n data-slot=\"logo-uploader-error\"\n className=\"text-destructive-700 dark:text-destructive-400 text-sm\"\n >\n {error}\n </p>\n )}\n </div>\n );\n }\n);\n\nLogoUploader.displayName = 'LogoUploader';\n"]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
|
|
3
|
+
// src/components/ActivityFeed/usePendingOverrides.ts
|
|
4
|
+
function usePendingOverrides() {
|
|
5
|
+
const [overrides, setOverrides] = React.useState(
|
|
6
|
+
() => /* @__PURE__ */ new Map()
|
|
7
|
+
);
|
|
8
|
+
const run = React.useCallback(
|
|
9
|
+
async (id, value, action) => {
|
|
10
|
+
setOverrides((prev) => new Map(prev).set(id, value));
|
|
11
|
+
try {
|
|
12
|
+
await action();
|
|
13
|
+
} catch {
|
|
14
|
+
} finally {
|
|
15
|
+
setOverrides((prev) => {
|
|
16
|
+
const next = new Map(prev);
|
|
17
|
+
next.delete(id);
|
|
18
|
+
return next;
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
[]
|
|
23
|
+
);
|
|
24
|
+
return [overrides, run];
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export { usePendingOverrides };
|
|
28
|
+
//# sourceMappingURL=chunk-FTEZNCRI.js.map
|
|
29
|
+
//# sourceMappingURL=chunk-FTEZNCRI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/ActivityFeed/usePendingOverrides.ts"],"names":[],"mappings":";;;AASO,SAAS,mBAAA,GAGd;AACA,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAU,KAAA,CAAA,QAAA;AAAA,IACtC,0BAAU,GAAA;AAAI,GAChB;AAEA,EAAA,MAAM,GAAA,GAAY,KAAA,CAAA,WAAA;AAAA,IAChB,OAAO,EAAA,EAAY,KAAA,EAAU,MAAA,KAAuC;AAClE,MAAA,YAAA,CAAa,CAAC,SAAS,IAAI,GAAA,CAAI,IAAI,CAAA,CAAE,GAAA,CAAI,EAAA,EAAI,KAAK,CAAC,CAAA;AACnD,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,EAAO;AAAA,MACf,CAAA,CAAA,MAAQ;AAAA,MAER,CAAA,SAAE;AACA,QAAA,YAAA,CAAa,CAAC,IAAA,KAAS;AACrB,UAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,IAAI,CAAA;AACzB,UAAA,IAAA,CAAK,OAAO,EAAE,CAAA;AACd,UAAA,OAAO,IAAA;AAAA,QACT,CAAC,CAAA;AAAA,MACH;AAAA,IACF,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,OAAO,CAAC,WAAW,GAAG,CAAA;AACxB","file":"chunk-FTEZNCRI.js","sourcesContent":["'use client';\n\nimport * as React from 'react';\n\n/**\n * Optimistic per-id state for async callbacks: `run` sets an override, awaits\n * the action, then drops it — on success the caller's props take over, on\n * rejection the previous value shows again. Surfacing the error is the caller's job.\n */\nexport function usePendingOverrides<V>(): [\n ReadonlyMap<string, V>,\n (id: string, value: V, action: () => void | Promise<void>) => Promise<void>,\n] {\n const [overrides, setOverrides] = React.useState<ReadonlyMap<string, V>>(\n () => new Map()\n );\n\n const run = React.useCallback(\n async (id: string, value: V, action: () => void | Promise<void>) => {\n setOverrides((prev) => new Map(prev).set(id, value));\n try {\n await action();\n } catch {\n // Restored below; the caller owns error reporting.\n } finally {\n setOverrides((prev) => {\n const next = new Map(prev);\n next.delete(id);\n return next;\n });\n }\n },\n []\n );\n\n return [overrides, run];\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/brands/index.ts"],"names":[],"mappings":";;;AAkCO,IAAM,MAAA,GAAS;AAAA,EACpB,QAAA,EAAU,MAAM,OAAO,uBAAY,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,CAAA;AAAA,EAChE,IAAA,EAAM,MAAM,OAAO,mBAAQ,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,CAAA;AAAA,EACpD,OAAA,EAAS,MAAM,OAAO,wBAAW,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,YAAY,CAAA;AAAA,EAC7D,mBAAA,EAAqB,MACnB,OAAO,kCAAqB,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,qBAAqB,CAAA;AAAA,EACnE,MAAA,EAAQ,MAAM,OAAO,uBAAU,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,CAAA;AAAA,EAC1D,MAAA,EAAQ,MAAM,OAAO,qBAAU,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,CAAA;AAAA,EAC1D,UAAA,EAAY,MAAM,OAAO,2BAAc,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,eAAe,CAAA;AAAA,EACtE,QAAA,EAAU,MAAM,OAAO,yBAAY,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa;AAClE","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/brands/index.ts"],"names":[],"mappings":";;;AAkCO,IAAM,MAAA,GAAS;AAAA,EACpB,QAAA,EAAU,MAAM,OAAO,uBAAY,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,CAAA;AAAA,EAChE,IAAA,EAAM,MAAM,OAAO,mBAAQ,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,CAAA;AAAA,EACpD,OAAA,EAAS,MAAM,OAAO,wBAAW,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,YAAY,CAAA;AAAA,EAC7D,mBAAA,EAAqB,MACnB,OAAO,kCAAqB,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,qBAAqB,CAAA;AAAA,EACnE,MAAA,EAAQ,MAAM,OAAO,uBAAU,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,CAAA;AAAA,EAC1D,MAAA,EAAQ,MAAM,OAAO,qBAAU,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,CAAA;AAAA,EAC1D,UAAA,EAAY,MAAM,OAAO,2BAAc,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,eAAe,CAAA;AAAA,EACtE,QAAA,EAAU,MAAM,OAAO,yBAAY,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa;AAClE","file":"chunk-FYQZWLAM.cjs","sourcesContent":["/**\n * @mieweb/ui Brand System\n *\n * Export all brand-related types, utilities, and configurations.\n */\n\n// Types and utilities\nexport type {\n BrandConfig,\n BrandColors,\n BrandTypography,\n BrandBorderRadius,\n BrandBoxShadow,\n ColorScale,\n SemanticColors,\n} from './types';\n\nexport {\n generateBrandCSS,\n generateTailwindTheme,\n createBrandPreset,\n} from './types';\n\n// Brand configurations\nexport { bluehiveBrand } from './bluehive';\nexport { ccmeBrand } from './ccme';\nexport { defaultBrand } from './default';\nexport { enterpriseHealthBrand } from './enterprise-health';\nexport { miewebBrand } from './mieweb';\nexport { ozwellBrand } from './ozwell';\nexport { wagglelineBrand } from './waggleline';\nexport { webchartBrand } from './webchart';\n\n// All brands for iteration\nexport const brands = {\n bluehive: () => import('./bluehive').then((m) => m.bluehiveBrand),\n ccme: () => import('./ccme').then((m) => m.ccmeBrand),\n default: () => import('./default').then((m) => m.defaultBrand),\n 'enterprise-health': () =>\n import('./enterprise-health').then((m) => m.enterpriseHealthBrand),\n mieweb: () => import('./mieweb').then((m) => m.miewebBrand),\n ozwell: () => import('./ozwell').then((m) => m.ozwellBrand),\n waggleline: () => import('./waggleline').then((m) => m.wagglelineBrand),\n webchart: () => import('./webchart').then((m) => m.webchartBrand),\n} as const;\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkCPDNX3LS_cjs = require('./chunk-CPDNX3LS.cjs');
|
|
4
|
+
var React = require('react');
|
|
4
5
|
|
|
5
6
|
function _interopNamespace(e) {
|
|
6
7
|
if (e && e.__esModule) return e;
|
|
@@ -20,27 +21,8 @@ function _interopNamespace(e) {
|
|
|
20
21
|
return Object.freeze(n);
|
|
21
22
|
}
|
|
22
23
|
|
|
23
|
-
var
|
|
24
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
24
25
|
|
|
25
|
-
// src/hooks/useLiveAnnouncement.ts
|
|
26
|
-
function useLiveAnnouncement() {
|
|
27
|
-
const [message, setMessage] = React2__namespace.useState("");
|
|
28
|
-
const timerRef = React2__namespace.useRef(
|
|
29
|
-
void 0
|
|
30
|
-
);
|
|
31
|
-
const announce = React2__namespace.useCallback((next) => {
|
|
32
|
-
setMessage("");
|
|
33
|
-
if (timerRef.current !== void 0) clearTimeout(timerRef.current);
|
|
34
|
-
timerRef.current = setTimeout(() => setMessage(next), 50);
|
|
35
|
-
}, []);
|
|
36
|
-
React2__namespace.useEffect(
|
|
37
|
-
() => () => {
|
|
38
|
-
if (timerRef.current !== void 0) clearTimeout(timerRef.current);
|
|
39
|
-
},
|
|
40
|
-
[]
|
|
41
|
-
);
|
|
42
|
-
return [message, announce];
|
|
43
|
-
}
|
|
44
26
|
function reorderIds(ids, draggedId, targetId, after) {
|
|
45
27
|
if (draggedId === targetId) return ids;
|
|
46
28
|
if (!ids.includes(draggedId)) return ids;
|
|
@@ -50,24 +32,90 @@ function reorderIds(ids, draggedId, targetId, after) {
|
|
|
50
32
|
without.splice(after ? idx + 1 : idx, 0, draggedId);
|
|
51
33
|
return without;
|
|
52
34
|
}
|
|
35
|
+
function moveIdBy(ids, id, delta) {
|
|
36
|
+
const from = ids.indexOf(id);
|
|
37
|
+
if (from === -1) return ids;
|
|
38
|
+
const to = Math.max(0, Math.min(ids.length - 1, from + delta));
|
|
39
|
+
if (to === from) return ids;
|
|
40
|
+
const next = ids.filter((i) => i !== id);
|
|
41
|
+
next.splice(to, 0, id);
|
|
42
|
+
return next;
|
|
43
|
+
}
|
|
44
|
+
var DEFAULT_DRAG_REORDER_LABELS = {
|
|
45
|
+
moveUp: "Move up",
|
|
46
|
+
moveDown: "Move down",
|
|
47
|
+
moved: (position, total) => `Moved to position ${position} of ${total}`
|
|
48
|
+
};
|
|
53
49
|
function useDragReorder({
|
|
54
50
|
ids,
|
|
55
51
|
onReorder,
|
|
56
|
-
canDropOn
|
|
52
|
+
canDropOn,
|
|
53
|
+
keyboard = false,
|
|
54
|
+
announce,
|
|
55
|
+
getDragPreview,
|
|
56
|
+
labels: labelsProp
|
|
57
57
|
}) {
|
|
58
|
-
const
|
|
59
|
-
const
|
|
60
|
-
const [
|
|
58
|
+
const labels = { ...DEFAULT_DRAG_REORDER_LABELS, ...labelsProp };
|
|
59
|
+
const [announcement, announceLive] = chunkCPDNX3LS_cjs.useLiveAnnouncement();
|
|
60
|
+
const [draggingId, setDraggingId] = React__namespace.useState(null);
|
|
61
|
+
const draggingRef = React__namespace.useRef(null);
|
|
62
|
+
const [over, setOver] = React__namespace.useState(null);
|
|
61
63
|
const enabled = Boolean(onReorder);
|
|
62
|
-
const reset =
|
|
64
|
+
const reset = React__namespace.useCallback(() => {
|
|
63
65
|
draggingRef.current = null;
|
|
64
66
|
setDraggingId(null);
|
|
65
67
|
setOver(null);
|
|
66
68
|
}, []);
|
|
67
|
-
const
|
|
69
|
+
const reachable = (id, delta) => {
|
|
70
|
+
const from = ids.indexOf(id);
|
|
71
|
+
if (!enabled || from === -1) return 0;
|
|
72
|
+
const step = Math.sign(delta);
|
|
73
|
+
let reach = 0;
|
|
74
|
+
while (reach !== delta) {
|
|
75
|
+
const t = from + reach + step;
|
|
76
|
+
if (t < 0 || t >= ids.length || canDropOn && !canDropOn(id, ids[t]))
|
|
77
|
+
break;
|
|
78
|
+
reach += step;
|
|
79
|
+
}
|
|
80
|
+
return reach;
|
|
81
|
+
};
|
|
82
|
+
const moveBy = (id, delta) => {
|
|
83
|
+
const next = moveIdBy(ids, id, reachable(id, delta));
|
|
84
|
+
if (next === ids) return;
|
|
85
|
+
onReorder?.(next);
|
|
86
|
+
const message = labels.moved(next.indexOf(id) + 1, next.length, id);
|
|
87
|
+
if (announce) announce(message);
|
|
88
|
+
else announceLive(message);
|
|
89
|
+
};
|
|
90
|
+
const moveButtonProps = (id, direction, label) => {
|
|
91
|
+
const delta = direction === "up" ? -1 : 1;
|
|
92
|
+
return {
|
|
93
|
+
type: "button",
|
|
94
|
+
onClick: (e) => {
|
|
95
|
+
e.stopPropagation();
|
|
96
|
+
moveBy(id, delta);
|
|
97
|
+
},
|
|
98
|
+
disabled: reachable(id, delta) === 0,
|
|
99
|
+
"aria-label": label ?? (direction === "up" ? labels.moveUp : labels.moveDown)
|
|
100
|
+
};
|
|
101
|
+
};
|
|
102
|
+
const moveByRef = React__namespace.useRef(moveBy);
|
|
103
|
+
moveByRef.current = moveBy;
|
|
104
|
+
const rowProps = React__namespace.useCallback(
|
|
68
105
|
(id) => {
|
|
69
106
|
if (!enabled) return {};
|
|
107
|
+
const keyProps = keyboard ? {
|
|
108
|
+
tabIndex: 0,
|
|
109
|
+
"aria-keyshortcuts": "Alt+ArrowUp Alt+ArrowDown",
|
|
110
|
+
onKeyDown: (e) => {
|
|
111
|
+
if (e.target !== e.currentTarget || !e.altKey) return;
|
|
112
|
+
if (e.key !== "ArrowUp" && e.key !== "ArrowDown") return;
|
|
113
|
+
e.preventDefault();
|
|
114
|
+
moveByRef.current(id, e.key === "ArrowUp" ? -1 : 1);
|
|
115
|
+
}
|
|
116
|
+
} : {};
|
|
70
117
|
return {
|
|
118
|
+
...keyProps,
|
|
71
119
|
draggable: true,
|
|
72
120
|
// WebKit (iPadOS Safari, incl. remote-pointer sessions) starts a text
|
|
73
121
|
// selection instead of a drag when the drag source contains selectable
|
|
@@ -81,6 +129,8 @@ function useDragReorder({
|
|
|
81
129
|
onDragStart: (e) => {
|
|
82
130
|
e.dataTransfer.effectAllowed = "move";
|
|
83
131
|
e.dataTransfer.setData("text/plain", id);
|
|
132
|
+
const preview = getDragPreview?.(id);
|
|
133
|
+
if (preview) e.dataTransfer.setDragImage(preview, 0, 0);
|
|
84
134
|
draggingRef.current = id;
|
|
85
135
|
setDraggingId(id);
|
|
86
136
|
},
|
|
@@ -114,9 +164,17 @@ function useDragReorder({
|
|
|
114
164
|
}
|
|
115
165
|
};
|
|
116
166
|
},
|
|
117
|
-
[enabled, ids, onReorder, canDropOn, reset]
|
|
167
|
+
[enabled, keyboard, ids, onReorder, canDropOn, getDragPreview, reset]
|
|
118
168
|
);
|
|
119
|
-
return {
|
|
169
|
+
return {
|
|
170
|
+
enabled,
|
|
171
|
+
draggingId,
|
|
172
|
+
over,
|
|
173
|
+
rowProps,
|
|
174
|
+
moveBy,
|
|
175
|
+
moveButtonProps,
|
|
176
|
+
announcement: announce ? "" : announcement
|
|
177
|
+
};
|
|
120
178
|
}
|
|
121
179
|
function dragIndicatorClasses(drag, id) {
|
|
122
180
|
return [
|
|
@@ -126,9 +184,10 @@ function dragIndicatorClasses(drag, id) {
|
|
|
126
184
|
].filter(Boolean).join(" ");
|
|
127
185
|
}
|
|
128
186
|
|
|
187
|
+
exports.DEFAULT_DRAG_REORDER_LABELS = DEFAULT_DRAG_REORDER_LABELS;
|
|
129
188
|
exports.dragIndicatorClasses = dragIndicatorClasses;
|
|
189
|
+
exports.moveIdBy = moveIdBy;
|
|
130
190
|
exports.reorderIds = reorderIds;
|
|
131
191
|
exports.useDragReorder = useDragReorder;
|
|
132
|
-
|
|
133
|
-
//# sourceMappingURL=chunk-
|
|
134
|
-
//# sourceMappingURL=chunk-YVPC65ZJ.cjs.map
|
|
192
|
+
//# sourceMappingURL=chunk-GF2BE4FB.cjs.map
|
|
193
|
+
//# sourceMappingURL=chunk-GF2BE4FB.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/hooks/useDragReorder.ts"],"names":["useLiveAnnouncement","React"],"mappings":"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","file":"chunk-GF2BE4FB.cjs","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"]}
|