@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 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-P22YCUVM.cjs"}
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkC77FAR3F_cjs = require('./chunk-C77FAR3F.cjs');
|
|
4
|
+
var chunkGKDHMNUA_cjs = require('./chunk-GKDHMNUA.cjs');
|
|
5
|
+
var chunkYVL3XATO_cjs = require('./chunk-YVL3XATO.cjs');
|
|
6
|
+
var chunkANMX7YDL_cjs = require('./chunk-ANMX7YDL.cjs');
|
|
7
|
+
var chunkDXEPYK3I_cjs = require('./chunk-DXEPYK3I.cjs');
|
|
8
|
+
var chunkS5RVSXDV_cjs = require('./chunk-S5RVSXDV.cjs');
|
|
9
|
+
var React = require('react');
|
|
10
|
+
var classVarianceAuthority = require('class-variance-authority');
|
|
11
|
+
var lucideReact = require('lucide-react');
|
|
12
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
13
|
+
|
|
14
|
+
function _interopNamespace(e) {
|
|
15
|
+
if (e && e.__esModule) return e;
|
|
16
|
+
var n = Object.create(null);
|
|
17
|
+
if (e) {
|
|
18
|
+
Object.keys(e).forEach(function (k) {
|
|
19
|
+
if (k !== 'default') {
|
|
20
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
21
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
get: function () { return e[k]; }
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
n.default = e;
|
|
29
|
+
return Object.freeze(n);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
33
|
+
|
|
34
|
+
var defaultRecordHeaderLabels = {
|
|
35
|
+
back: "Back",
|
|
36
|
+
moreActions: "More actions",
|
|
37
|
+
meta: "Details"
|
|
38
|
+
};
|
|
39
|
+
var recordHeaderVariants = classVarianceAuthority.cva(
|
|
40
|
+
"border-border bg-background flex flex-col gap-3 border-b px-4 py-4 sm:px-6",
|
|
41
|
+
{
|
|
42
|
+
variants: {
|
|
43
|
+
sticky: {
|
|
44
|
+
true: "sticky top-0 z-20",
|
|
45
|
+
false: ""
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
defaultVariants: { sticky: false }
|
|
49
|
+
}
|
|
50
|
+
);
|
|
51
|
+
var menuLinkClass = "text-foreground hover:bg-muted focus-visible:bg-muted flex w-full items-center gap-3 rounded-lg px-3 py-2 text-start text-sm font-medium focus:outline-none";
|
|
52
|
+
var RecordHeader = React__namespace.forwardRef(
|
|
53
|
+
({
|
|
54
|
+
title,
|
|
55
|
+
headingLevel: Heading = "h1",
|
|
56
|
+
subtitle,
|
|
57
|
+
avatar,
|
|
58
|
+
icon: Icon,
|
|
59
|
+
media,
|
|
60
|
+
badges,
|
|
61
|
+
meta,
|
|
62
|
+
actions = [],
|
|
63
|
+
maxVisibleActions = 2,
|
|
64
|
+
presence,
|
|
65
|
+
breadcrumbs,
|
|
66
|
+
onBack,
|
|
67
|
+
backHref,
|
|
68
|
+
sticky,
|
|
69
|
+
labels: labelsProp,
|
|
70
|
+
className,
|
|
71
|
+
children,
|
|
72
|
+
...rest
|
|
73
|
+
}, ref) => {
|
|
74
|
+
const labels = { ...defaultRecordHeaderLabels, ...labelsProp };
|
|
75
|
+
const [menuOpen, setMenuOpen] = React__namespace.useState(false);
|
|
76
|
+
const hasOverflow = actions.length > maxVisibleActions;
|
|
77
|
+
const variantOf = (a, i) => a.variant ?? (i === 0 ? "primary" : "outline");
|
|
78
|
+
const leading = media ? /* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "record-header-media", className: "shrink-0", children: media }) : avatar ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
79
|
+
chunkGKDHMNUA_cjs.Avatar,
|
|
80
|
+
{
|
|
81
|
+
"data-slot": "record-header-media",
|
|
82
|
+
size: "lg",
|
|
83
|
+
src: avatar.src,
|
|
84
|
+
name: avatar.name,
|
|
85
|
+
alt: "",
|
|
86
|
+
className: "shrink-0"
|
|
87
|
+
}
|
|
88
|
+
) : Icon ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
89
|
+
"div",
|
|
90
|
+
{
|
|
91
|
+
"data-slot": "record-header-media",
|
|
92
|
+
className: "bg-muted text-muted-foreground flex h-12 w-12 shrink-0 items-center justify-center rounded-lg",
|
|
93
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "h-6 w-6", "aria-hidden": "true" })
|
|
94
|
+
}
|
|
95
|
+
) : null;
|
|
96
|
+
const backClass = chunkS5RVSXDV_cjs.cn(
|
|
97
|
+
chunkDXEPYK3I_cjs.buttonVariants({ variant: "ghost", size: "icon" }),
|
|
98
|
+
"shrink-0 rtl:[&_svg]:-scale-x-100"
|
|
99
|
+
);
|
|
100
|
+
const back = backHref ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
101
|
+
"a",
|
|
102
|
+
{
|
|
103
|
+
href: backHref,
|
|
104
|
+
onClick: onBack,
|
|
105
|
+
"aria-label": labels.back,
|
|
106
|
+
className: backClass,
|
|
107
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowLeft, { className: "h-5 w-5", "aria-hidden": "true" })
|
|
108
|
+
}
|
|
109
|
+
) : onBack ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
110
|
+
"button",
|
|
111
|
+
{
|
|
112
|
+
type: "button",
|
|
113
|
+
onClick: onBack,
|
|
114
|
+
"aria-label": labels.back,
|
|
115
|
+
className: backClass,
|
|
116
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowLeft, { className: "h-5 w-5", "aria-hidden": "true" })
|
|
117
|
+
}
|
|
118
|
+
) : null;
|
|
119
|
+
const renderButton = (a, i) => {
|
|
120
|
+
const ActionIcon = a.icon;
|
|
121
|
+
const iconEl = ActionIcon ? /* @__PURE__ */ jsxRuntime.jsx(ActionIcon, { className: "h-4 w-4", "aria-hidden": "true" }) : void 0;
|
|
122
|
+
const hiddenOnMobile = "hidden sm:inline-flex";
|
|
123
|
+
if (a.href && !a.disabled) {
|
|
124
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
125
|
+
"a",
|
|
126
|
+
{
|
|
127
|
+
href: a.href,
|
|
128
|
+
onClick: a.onClick,
|
|
129
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
130
|
+
chunkDXEPYK3I_cjs.buttonVariants({ variant: variantOf(a, i), size: "sm" }),
|
|
131
|
+
"gap-2",
|
|
132
|
+
hiddenOnMobile
|
|
133
|
+
),
|
|
134
|
+
children: [
|
|
135
|
+
iconEl,
|
|
136
|
+
a.label
|
|
137
|
+
]
|
|
138
|
+
},
|
|
139
|
+
a.id
|
|
140
|
+
);
|
|
141
|
+
}
|
|
142
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
143
|
+
chunkANMX7YDL_cjs.Button,
|
|
144
|
+
{
|
|
145
|
+
size: "sm",
|
|
146
|
+
variant: variantOf(a, i),
|
|
147
|
+
leftIcon: iconEl,
|
|
148
|
+
onClick: a.onClick,
|
|
149
|
+
disabled: a.disabled,
|
|
150
|
+
className: hiddenOnMobile,
|
|
151
|
+
children: a.label
|
|
152
|
+
},
|
|
153
|
+
a.id
|
|
154
|
+
);
|
|
155
|
+
};
|
|
156
|
+
const renderMenuItem = (a, i) => {
|
|
157
|
+
const ActionIcon = a.icon;
|
|
158
|
+
const iconEl = ActionIcon ? /* @__PURE__ */ jsxRuntime.jsx(ActionIcon, { className: "h-4 w-4", "aria-hidden": "true" }) : void 0;
|
|
159
|
+
const mobileOnly = i < maxVisibleActions && "sm:hidden";
|
|
160
|
+
const select = (event) => {
|
|
161
|
+
setMenuOpen(false);
|
|
162
|
+
a.onClick?.(event);
|
|
163
|
+
};
|
|
164
|
+
if (a.href && !a.disabled) {
|
|
165
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
166
|
+
"a",
|
|
167
|
+
{
|
|
168
|
+
role: "menuitem",
|
|
169
|
+
"data-slot": "dropdown-item",
|
|
170
|
+
href: a.href,
|
|
171
|
+
onClick: select,
|
|
172
|
+
className: chunkS5RVSXDV_cjs.cn(menuLinkClass, mobileOnly),
|
|
173
|
+
children: [
|
|
174
|
+
iconEl && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "h-4 w-4 shrink-0", children: iconEl }),
|
|
175
|
+
a.label
|
|
176
|
+
]
|
|
177
|
+
},
|
|
178
|
+
a.id
|
|
179
|
+
);
|
|
180
|
+
}
|
|
181
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
182
|
+
chunkC77FAR3F_cjs.DropdownItem,
|
|
183
|
+
{
|
|
184
|
+
icon: iconEl,
|
|
185
|
+
variant: variantOf(a, i) === "danger" ? "danger" : "default",
|
|
186
|
+
disabled: a.disabled,
|
|
187
|
+
onClick: select,
|
|
188
|
+
className: chunkS5RVSXDV_cjs.cn(mobileOnly),
|
|
189
|
+
children: a.label
|
|
190
|
+
},
|
|
191
|
+
a.id
|
|
192
|
+
);
|
|
193
|
+
};
|
|
194
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
195
|
+
"header",
|
|
196
|
+
{
|
|
197
|
+
ref,
|
|
198
|
+
"data-slot": "record-header",
|
|
199
|
+
className: chunkS5RVSXDV_cjs.cn(recordHeaderVariants({ sticky }), className),
|
|
200
|
+
...rest,
|
|
201
|
+
children: [
|
|
202
|
+
breadcrumbs && /* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "record-header-breadcrumbs", children: breadcrumbs }),
|
|
203
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
204
|
+
"div",
|
|
205
|
+
{
|
|
206
|
+
"data-slot": "record-header-row",
|
|
207
|
+
className: "flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between",
|
|
208
|
+
children: [
|
|
209
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-1 items-start gap-3 sm:gap-4", children: [
|
|
210
|
+
back,
|
|
211
|
+
leading,
|
|
212
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
213
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [
|
|
214
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
215
|
+
Heading,
|
|
216
|
+
{
|
|
217
|
+
"data-slot": "record-header-title",
|
|
218
|
+
className: "text-foreground min-w-0 text-xl font-semibold break-words",
|
|
219
|
+
children: title
|
|
220
|
+
}
|
|
221
|
+
),
|
|
222
|
+
badges?.map((b) => /* @__PURE__ */ jsxRuntime.jsx(chunkYVL3XATO_cjs.Badge, { size: "sm", variant: b.variant, children: b.label }, b.id))
|
|
223
|
+
] }),
|
|
224
|
+
subtitle && /* @__PURE__ */ jsxRuntime.jsx(
|
|
225
|
+
"p",
|
|
226
|
+
{
|
|
227
|
+
"data-slot": "record-header-subtitle",
|
|
228
|
+
className: "text-muted-foreground mt-0.5 text-sm",
|
|
229
|
+
children: subtitle
|
|
230
|
+
}
|
|
231
|
+
),
|
|
232
|
+
meta && meta.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
233
|
+
"ul",
|
|
234
|
+
{
|
|
235
|
+
"data-slot": "record-header-meta",
|
|
236
|
+
"aria-label": labels.meta,
|
|
237
|
+
className: "text-muted-foreground mt-1.5 flex flex-wrap items-center gap-x-4 gap-y-1 text-sm",
|
|
238
|
+
children: meta.map(({ id, label, icon: MetaIcon, href }) => {
|
|
239
|
+
const content = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
240
|
+
MetaIcon && /* @__PURE__ */ jsxRuntime.jsx(
|
|
241
|
+
MetaIcon,
|
|
242
|
+
{
|
|
243
|
+
className: "h-4 w-4 shrink-0",
|
|
244
|
+
"aria-hidden": "true"
|
|
245
|
+
}
|
|
246
|
+
),
|
|
247
|
+
label
|
|
248
|
+
] });
|
|
249
|
+
return /* @__PURE__ */ jsxRuntime.jsx("li", { className: "inline-flex items-center gap-1.5", children: href ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
250
|
+
"a",
|
|
251
|
+
{
|
|
252
|
+
href,
|
|
253
|
+
className: "hover:text-foreground focus-visible:ring-ring inline-flex items-center gap-1.5 rounded-sm underline-offset-2 hover:underline focus-visible:ring-2 focus-visible:outline-none",
|
|
254
|
+
children: content
|
|
255
|
+
}
|
|
256
|
+
) : content }, id);
|
|
257
|
+
})
|
|
258
|
+
}
|
|
259
|
+
)
|
|
260
|
+
] })
|
|
261
|
+
] }),
|
|
262
|
+
(presence || actions.length > 0) && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
263
|
+
"div",
|
|
264
|
+
{
|
|
265
|
+
"data-slot": "record-header-actions",
|
|
266
|
+
className: "flex shrink-0 items-center gap-2 sm:justify-end",
|
|
267
|
+
children: [
|
|
268
|
+
presence,
|
|
269
|
+
actions.slice(0, maxVisibleActions).map(renderButton),
|
|
270
|
+
actions.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
271
|
+
chunkC77FAR3F_cjs.Dropdown,
|
|
272
|
+
{
|
|
273
|
+
open: menuOpen,
|
|
274
|
+
onOpenChange: setMenuOpen,
|
|
275
|
+
placement: "bottom-end",
|
|
276
|
+
trigger: /* @__PURE__ */ jsxRuntime.jsx(
|
|
277
|
+
chunkANMX7YDL_cjs.Button,
|
|
278
|
+
{
|
|
279
|
+
variant: "outline",
|
|
280
|
+
size: "sm",
|
|
281
|
+
"aria-label": labels.moreActions,
|
|
282
|
+
className: chunkS5RVSXDV_cjs.cn(!hasOverflow && "sm:hidden"),
|
|
283
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MoreHorizontal, { className: "h-4 w-4", "aria-hidden": "true" })
|
|
284
|
+
}
|
|
285
|
+
),
|
|
286
|
+
children: actions.map(renderMenuItem)
|
|
287
|
+
}
|
|
288
|
+
)
|
|
289
|
+
]
|
|
290
|
+
}
|
|
291
|
+
)
|
|
292
|
+
]
|
|
293
|
+
}
|
|
294
|
+
),
|
|
295
|
+
children
|
|
296
|
+
]
|
|
297
|
+
}
|
|
298
|
+
);
|
|
299
|
+
}
|
|
300
|
+
);
|
|
301
|
+
RecordHeader.displayName = "RecordHeader";
|
|
302
|
+
|
|
303
|
+
exports.RecordHeader = RecordHeader;
|
|
304
|
+
exports.defaultRecordHeaderLabels = defaultRecordHeaderLabels;
|
|
305
|
+
//# sourceMappingURL=chunk-P55LNEDH.cjs.map
|
|
306
|
+
//# sourceMappingURL=chunk-P55LNEDH.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/RecordHeader/RecordHeader.tsx"],"names":["cva","React","jsx","Avatar","cn","buttonVariants","ArrowLeft","jsxs","Button","DropdownItem","Badge","Fragment","Dropdown","MoreHorizontal"],"mappings":"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","file":"chunk-P55LNEDH.cjs","sourcesContent":["import * as React from 'react';\nimport { cva } from 'class-variance-authority';\nimport { ArrowLeft, MoreHorizontal, type LucideIcon } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport { Avatar } from '../Avatar/Avatar';\nimport { Badge, type BadgeProps } from '../Badge/Badge';\nimport { Button, type ButtonProps } from '../Button/Button';\nimport { buttonVariants } from '../Button/button-variants';\nimport { Dropdown, DropdownItem } from '../Dropdown/Dropdown';\n\nexport interface RecordHeaderBadge {\n id: string;\n label: string;\n variant?: BadgeProps['variant'];\n}\n\nexport interface RecordHeaderMetaItem {\n id: string;\n label: string;\n icon?: LucideIcon;\n href?: string;\n}\n\nexport interface RecordHeaderAction {\n id: string;\n label: string;\n icon?: LucideIcon;\n /** With `href`, call `event.preventDefault()` to route client-side. */\n onClick?: (event: React.MouseEvent<HTMLElement>) => void;\n href?: string;\n /** Defaults to `primary` for the first action and `outline` for the rest. */\n variant?: ButtonProps['variant'];\n disabled?: boolean;\n}\n\nexport interface RecordHeaderLabels {\n back: string;\n moreActions: string;\n meta: string;\n}\n\nexport const defaultRecordHeaderLabels: RecordHeaderLabels = {\n back: 'Back',\n moreActions: 'More actions',\n meta: 'Details',\n};\n\nconst recordHeaderVariants = cva(\n 'border-border bg-background flex flex-col gap-3 border-b px-4 py-4 sm:px-6',\n {\n variants: {\n sticky: {\n true: 'sticky top-0 z-20',\n false: '',\n },\n },\n defaultVariants: { sticky: false },\n }\n);\n\nexport interface RecordHeaderProps extends Omit<\n React.HTMLAttributes<HTMLElement>,\n 'title'\n> {\n title: React.ReactNode;\n headingLevel?: 'h1' | 'h2' | 'h3';\n subtitle?: React.ReactNode;\n avatar?: { src?: string | null; name: string };\n icon?: LucideIcon;\n /** Replaces avatar/icon, e.g. a company logo. */\n media?: React.ReactNode;\n badges?: RecordHeaderBadge[];\n meta?: RecordHeaderMetaItem[];\n actions?: RecordHeaderAction[];\n /** Actions shown as buttons from `sm` up; the rest go to the overflow menu. */\n maxVisibleActions?: number;\n presence?: React.ReactNode;\n breadcrumbs?: React.ReactNode;\n onBack?: (event: React.MouseEvent<HTMLElement>) => void;\n backHref?: string;\n sticky?: boolean;\n labels?: Partial<RecordHeaderLabels>;\n}\n\nconst menuLinkClass =\n 'text-foreground hover:bg-muted focus-visible:bg-muted flex w-full items-center gap-3 rounded-lg px-3 py-2 text-start text-sm font-medium focus:outline-none';\n\nexport const RecordHeader = React.forwardRef<HTMLElement, RecordHeaderProps>(\n (\n {\n title,\n headingLevel: Heading = 'h1',\n subtitle,\n avatar,\n icon: Icon,\n media,\n badges,\n meta,\n actions = [],\n maxVisibleActions = 2,\n presence,\n breadcrumbs,\n onBack,\n backHref,\n sticky,\n labels: labelsProp,\n className,\n children,\n ...rest\n },\n ref\n ) => {\n const labels = { ...defaultRecordHeaderLabels, ...labelsProp };\n const [menuOpen, setMenuOpen] = React.useState(false);\n const hasOverflow = actions.length > maxVisibleActions;\n const variantOf = (a: RecordHeaderAction, i: number) =>\n a.variant ?? (i === 0 ? 'primary' : 'outline');\n\n const leading = media ? (\n <div data-slot=\"record-header-media\" className=\"shrink-0\">\n {media}\n </div>\n ) : avatar ? (\n <Avatar\n data-slot=\"record-header-media\"\n size=\"lg\"\n src={avatar.src}\n name={avatar.name}\n // The title already names the record; don't announce it twice.\n alt=\"\"\n className=\"shrink-0\"\n />\n ) : Icon ? (\n <div\n data-slot=\"record-header-media\"\n className=\"bg-muted text-muted-foreground flex h-12 w-12 shrink-0 items-center justify-center rounded-lg\"\n >\n <Icon className=\"h-6 w-6\" aria-hidden=\"true\" />\n </div>\n ) : null;\n\n const backClass = cn(\n buttonVariants({ variant: 'ghost', size: 'icon' }),\n 'shrink-0 rtl:[&_svg]:-scale-x-100'\n );\n const back = backHref ? (\n <a\n href={backHref}\n onClick={onBack}\n aria-label={labels.back}\n className={backClass}\n >\n <ArrowLeft className=\"h-5 w-5\" aria-hidden=\"true\" />\n </a>\n ) : onBack ? (\n <button\n type=\"button\"\n onClick={onBack}\n aria-label={labels.back}\n className={backClass}\n >\n <ArrowLeft className=\"h-5 w-5\" aria-hidden=\"true\" />\n </button>\n ) : null;\n\n const renderButton = (a: RecordHeaderAction, i: number) => {\n const ActionIcon = a.icon;\n const iconEl = ActionIcon ? (\n <ActionIcon className=\"h-4 w-4\" aria-hidden=\"true\" />\n ) : undefined;\n const hiddenOnMobile = 'hidden sm:inline-flex';\n if (a.href && !a.disabled) {\n return (\n <a\n key={a.id}\n href={a.href}\n onClick={a.onClick}\n className={cn(\n buttonVariants({ variant: variantOf(a, i), size: 'sm' }),\n 'gap-2',\n hiddenOnMobile\n )}\n >\n {iconEl}\n {a.label}\n </a>\n );\n }\n return (\n <Button\n key={a.id}\n size=\"sm\"\n variant={variantOf(a, i)}\n leftIcon={iconEl}\n onClick={a.onClick}\n disabled={a.disabled}\n className={hiddenOnMobile}\n >\n {a.label}\n </Button>\n );\n };\n\n const renderMenuItem = (a: RecordHeaderAction, i: number) => {\n const ActionIcon = a.icon;\n const iconEl = ActionIcon ? (\n <ActionIcon className=\"h-4 w-4\" aria-hidden=\"true\" />\n ) : undefined;\n // Items that are also buttons only appear in the menu below `sm`.\n const mobileOnly = i < maxVisibleActions && 'sm:hidden';\n const select = (event: React.MouseEvent<HTMLElement>) => {\n setMenuOpen(false);\n a.onClick?.(event);\n };\n if (a.href && !a.disabled) {\n return (\n <a\n key={a.id}\n role=\"menuitem\"\n data-slot=\"dropdown-item\"\n href={a.href}\n onClick={select}\n className={cn(menuLinkClass, mobileOnly)}\n >\n {iconEl && <span className=\"h-4 w-4 shrink-0\">{iconEl}</span>}\n {a.label}\n </a>\n );\n }\n return (\n <DropdownItem\n key={a.id}\n icon={iconEl}\n variant={variantOf(a, i) === 'danger' ? 'danger' : 'default'}\n disabled={a.disabled}\n onClick={select}\n className={cn(mobileOnly)}\n >\n {a.label}\n </DropdownItem>\n );\n };\n\n return (\n <header\n ref={ref}\n data-slot=\"record-header\"\n className={cn(recordHeaderVariants({ sticky }), className)}\n {...rest}\n >\n {breadcrumbs && (\n <div data-slot=\"record-header-breadcrumbs\">{breadcrumbs}</div>\n )}\n <div\n data-slot=\"record-header-row\"\n className=\"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between\"\n >\n <div className=\"flex min-w-0 flex-1 items-start gap-3 sm:gap-4\">\n {back}\n {leading}\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <Heading\n data-slot=\"record-header-title\"\n className=\"text-foreground min-w-0 text-xl font-semibold break-words\"\n >\n {title}\n </Heading>\n {badges?.map((b) => (\n <Badge key={b.id} size=\"sm\" variant={b.variant}>\n {b.label}\n </Badge>\n ))}\n </div>\n {subtitle && (\n <p\n data-slot=\"record-header-subtitle\"\n className=\"text-muted-foreground mt-0.5 text-sm\"\n >\n {subtitle}\n </p>\n )}\n {meta && meta.length > 0 && (\n <ul\n data-slot=\"record-header-meta\"\n aria-label={labels.meta}\n className=\"text-muted-foreground mt-1.5 flex flex-wrap items-center gap-x-4 gap-y-1 text-sm\"\n >\n {meta.map(({ id, label, icon: MetaIcon, href }) => {\n const content = (\n <>\n {MetaIcon && (\n <MetaIcon\n className=\"h-4 w-4 shrink-0\"\n aria-hidden=\"true\"\n />\n )}\n {label}\n </>\n );\n return (\n <li key={id} className=\"inline-flex items-center gap-1.5\">\n {href ? (\n <a\n href={href}\n className=\"hover:text-foreground focus-visible:ring-ring inline-flex items-center gap-1.5 rounded-sm underline-offset-2 hover:underline focus-visible:ring-2 focus-visible:outline-none\"\n >\n {content}\n </a>\n ) : (\n content\n )}\n </li>\n );\n })}\n </ul>\n )}\n </div>\n </div>\n {(presence || actions.length > 0) && (\n <div\n data-slot=\"record-header-actions\"\n className=\"flex shrink-0 items-center gap-2 sm:justify-end\"\n >\n {presence}\n {actions.slice(0, maxVisibleActions).map(renderButton)}\n {actions.length > 0 && (\n <Dropdown\n open={menuOpen}\n onOpenChange={setMenuOpen}\n placement=\"bottom-end\"\n trigger={\n <Button\n variant=\"outline\"\n size=\"sm\"\n aria-label={labels.moreActions}\n className={cn(!hasOverflow && 'sm:hidden')}\n >\n <MoreHorizontal className=\"h-4 w-4\" aria-hidden=\"true\" />\n </Button>\n }\n >\n {actions.map(renderMenuItem)}\n </Dropdown>\n )}\n </div>\n )}\n </div>\n {children}\n </header>\n );\n }\n);\n\nRecordHeader.displayName = 'RecordHeader';\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { FenceBlock } from './chunk-
|
|
2
|
-
import { Button } from './chunk-
|
|
1
|
+
import { FenceBlock } from './chunk-HDY7YQFX.js';
|
|
2
|
+
import { Button } from './chunk-WFBUBT54.js';
|
|
3
3
|
import { Download } from 'lucide-react';
|
|
4
4
|
import { useState, useEffect, useMemo, useCallback } from 'react';
|
|
5
5
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
@@ -178,5 +178,5 @@ var CsvBlock = ({ code, id }) => {
|
|
|
178
178
|
};
|
|
179
179
|
|
|
180
180
|
export { CsvBlock };
|
|
181
|
-
//# sourceMappingURL=chunk-
|
|
182
|
-
//# sourceMappingURL=chunk-
|
|
181
|
+
//# sourceMappingURL=chunk-P7D7BYFE.js.map
|
|
182
|
+
//# sourceMappingURL=chunk-P7D7BYFE.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Markdown/CsvBlock.tsx"],"names":[],"mappings":"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","file":"chunk-R6KPWIGO.js","sourcesContent":["/** CSV data rendered as a sortable table. Requires `papaparse`. */\nimport { Download } from 'lucide-react';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { Button } from '../Button';\nimport { FenceBlock } from './FenceBlock';\n\ninterface CsvBlockProps {\n code: string;\n id: string;\n}\n\ninterface SortConfig {\n column: string;\n direction: 'asc' | 'desc';\n}\n\ntype CsvRow = Record<string, unknown>;\n// Minimal surface of papaparse we actually use, avoiding overload conflicts.\ninterface PapaApi {\n parse(\n input: string,\n config?: Record<string, unknown>\n ): {\n meta: { fields?: string[] };\n data: CsvRow[];\n errors: Array<{ message: string }>;\n };\n unparse(data: unknown): string;\n}\n\nlet papaPromise: Promise<PapaApi> | null = null;\nfunction loadPapa() {\n if (!papaPromise) {\n papaPromise = import(/* @vite-ignore */ 'papaparse')\n .then((mod: { default?: PapaApi } & Partial<PapaApi>) => {\n const api: PapaApi = (mod.default ?? mod) as PapaApi;\n if (!api?.parse) throw new Error('papaparse export not found');\n return api;\n })\n .catch((err) => {\n papaPromise = null;\n throw err as Error;\n });\n }\n return papaPromise;\n}\n\ninterface ParsedCsv {\n headers: string[];\n rows: CsvRow[];\n error: string | null;\n}\n\nexport const CsvBlock: React.FC<CsvBlockProps> = ({ code, id }) => {\n const [sortConfig, setSortConfig] = useState<SortConfig | null>(null);\n const [papa, setPapa] = useState<PapaApi | null>(null);\n const [loadError, setLoadError] = useState<string | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n loadPapa()\n .then((api) => {\n if (!cancelled) setPapa(api);\n })\n .catch(() => {\n if (!cancelled)\n setLoadError(\n 'CSV preview requires the `papaparse` package. Install it with `npm install papaparse`.'\n );\n });\n return () => {\n cancelled = true;\n };\n }, []);\n\n const parsed = useMemo<ParsedCsv>(() => {\n if (!papa) return { headers: [], rows: [], error: null };\n try {\n const result = papa.parse(code, {\n header: true,\n dynamicTyping: true,\n skipEmptyLines: 'greedy',\n });\n if (result.errors?.length) {\n return {\n headers: result.meta.fields ?? [],\n rows: result.data,\n error: result.errors.map((e) => e.message).join('; '),\n };\n }\n return {\n headers: result.meta.fields ?? [],\n rows: result.data,\n error: null,\n };\n } catch (err) {\n return { headers: [], rows: [], error: (err as Error).message };\n }\n }, [code, papa]);\n\n const sortedRows = useMemo(() => {\n if (!sortConfig || parsed.error) return parsed.rows;\n return [...parsed.rows].sort((a, b) => {\n const aVal = a[sortConfig.column];\n const bVal = b[sortConfig.column];\n if (aVal == null && bVal == null) return 0;\n if (aVal == null) return 1;\n if (bVal == null) return -1;\n const cmp =\n typeof aVal === 'number' && typeof bVal === 'number'\n ? aVal - bVal\n : String(aVal).localeCompare(String(bVal));\n return sortConfig.direction === 'asc' ? cmp : -cmp;\n });\n }, [parsed.rows, sortConfig, parsed.error]);\n\n const handleSort = useCallback((column: string) => {\n setSortConfig((prev) => {\n if (prev?.column === column) {\n return prev.direction === 'asc' ? { column, direction: 'desc' } : null;\n }\n return { column, direction: 'asc' };\n });\n }, []);\n\n const handleExportCsv = useCallback(() => {\n if (!papa) return;\n const csvContent = papa.unparse(sortedRows);\n const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = `data-${id}.csv`;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n setTimeout(() => URL.revokeObjectURL(url), 100);\n }, [sortedRows, id, papa]);\n\n if (loadError) {\n return (\n <FenceBlock code={code} language=\"csv\" error={loadError}>\n <div />\n </FenceBlock>\n );\n }\n\n if (!papa) {\n return (\n <FenceBlock code={code} language=\"csv\" supportsRawView>\n <div className=\"flex items-center justify-center p-6 text-sm text-neutral-500\">\n Loading CSV parser…\n </div>\n </FenceBlock>\n );\n }\n\n if (parsed.error) {\n return (\n <FenceBlock code={code} language=\"csv\" error={parsed.error}>\n <div />\n </FenceBlock>\n );\n }\n\n return (\n <FenceBlock code={code} language=\"csv\" supportsRawView>\n <div className=\"relative\">\n <div className=\"flex items-center justify-between border-b border-neutral-200 px-3 py-1.5 dark:border-neutral-700\">\n <span className=\"text-xs text-neutral-500 dark:text-neutral-400\">\n {sortedRows.length} row{sortedRows.length !== 1 ? 's' : ''} ×{' '}\n {parsed.headers.length} column\n {parsed.headers.length !== 1 ? 's' : ''}\n </span>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleExportCsv}\n aria-label=\"Export CSV\"\n className=\"h-7 gap-1 px-2 text-xs\"\n >\n <Download className=\"h-3 w-3\" />\n Export\n </Button>\n </div>\n\n <div className=\"max-h-96 overflow-auto\">\n <table className=\"min-w-full text-sm\">\n <thead className=\"sticky top-0 bg-neutral-100 dark:bg-neutral-800\">\n <tr>\n {parsed.headers.map((header) => {\n const isSorted = sortConfig?.column === header;\n const ariaSort = isSorted\n ? sortConfig.direction === 'asc'\n ? 'ascending'\n : 'descending'\n : 'none';\n return (\n <th\n key={header}\n scope=\"col\"\n aria-sort={ariaSort}\n className=\"px-3 py-2 text-start text-xs font-medium whitespace-nowrap text-neutral-600 dark:text-neutral-400\"\n >\n <button\n type=\"button\"\n onClick={() => handleSort(header)}\n className=\"flex w-full cursor-pointer items-center gap-1 text-start font-medium select-none hover:text-neutral-900 dark:hover:text-neutral-200\"\n >\n {header}\n {isSorted && (\n <span aria-hidden=\"true\">\n {sortConfig.direction === 'asc' ? '↑' : '↓'}\n </span>\n )}\n </button>\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody className=\"divide-y divide-neutral-200 dark:divide-neutral-700\">\n {sortedRows.map((row, i) => (\n <tr\n key={i}\n className=\"hover:bg-neutral-50 dark:hover:bg-neutral-800/50\"\n >\n {parsed.headers.map((header) => (\n <td\n key={header}\n className=\"px-3 py-1.5 whitespace-nowrap text-neutral-700 dark:text-neutral-300\"\n >\n {row[header] != null ? String(row[header]) : ''}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n </FenceBlock>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Markdown/CsvBlock.tsx"],"names":[],"mappings":"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","file":"chunk-P7D7BYFE.js","sourcesContent":["/** CSV data rendered as a sortable table. Requires `papaparse`. */\nimport { Download } from 'lucide-react';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { Button } from '../Button';\nimport { FenceBlock } from './FenceBlock';\n\ninterface CsvBlockProps {\n code: string;\n id: string;\n}\n\ninterface SortConfig {\n column: string;\n direction: 'asc' | 'desc';\n}\n\ntype CsvRow = Record<string, unknown>;\n// Minimal surface of papaparse we actually use, avoiding overload conflicts.\ninterface PapaApi {\n parse(\n input: string,\n config?: Record<string, unknown>\n ): {\n meta: { fields?: string[] };\n data: CsvRow[];\n errors: Array<{ message: string }>;\n };\n unparse(data: unknown): string;\n}\n\nlet papaPromise: Promise<PapaApi> | null = null;\nfunction loadPapa() {\n if (!papaPromise) {\n papaPromise = import(/* @vite-ignore */ 'papaparse')\n .then((mod: { default?: PapaApi } & Partial<PapaApi>) => {\n const api: PapaApi = (mod.default ?? mod) as PapaApi;\n if (!api?.parse) throw new Error('papaparse export not found');\n return api;\n })\n .catch((err) => {\n papaPromise = null;\n throw err as Error;\n });\n }\n return papaPromise;\n}\n\ninterface ParsedCsv {\n headers: string[];\n rows: CsvRow[];\n error: string | null;\n}\n\nexport const CsvBlock: React.FC<CsvBlockProps> = ({ code, id }) => {\n const [sortConfig, setSortConfig] = useState<SortConfig | null>(null);\n const [papa, setPapa] = useState<PapaApi | null>(null);\n const [loadError, setLoadError] = useState<string | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n loadPapa()\n .then((api) => {\n if (!cancelled) setPapa(api);\n })\n .catch(() => {\n if (!cancelled)\n setLoadError(\n 'CSV preview requires the `papaparse` package. Install it with `npm install papaparse`.'\n );\n });\n return () => {\n cancelled = true;\n };\n }, []);\n\n const parsed = useMemo<ParsedCsv>(() => {\n if (!papa) return { headers: [], rows: [], error: null };\n try {\n const result = papa.parse(code, {\n header: true,\n dynamicTyping: true,\n skipEmptyLines: 'greedy',\n });\n if (result.errors?.length) {\n return {\n headers: result.meta.fields ?? [],\n rows: result.data,\n error: result.errors.map((e) => e.message).join('; '),\n };\n }\n return {\n headers: result.meta.fields ?? [],\n rows: result.data,\n error: null,\n };\n } catch (err) {\n return { headers: [], rows: [], error: (err as Error).message };\n }\n }, [code, papa]);\n\n const sortedRows = useMemo(() => {\n if (!sortConfig || parsed.error) return parsed.rows;\n return [...parsed.rows].sort((a, b) => {\n const aVal = a[sortConfig.column];\n const bVal = b[sortConfig.column];\n if (aVal == null && bVal == null) return 0;\n if (aVal == null) return 1;\n if (bVal == null) return -1;\n const cmp =\n typeof aVal === 'number' && typeof bVal === 'number'\n ? aVal - bVal\n : String(aVal).localeCompare(String(bVal));\n return sortConfig.direction === 'asc' ? cmp : -cmp;\n });\n }, [parsed.rows, sortConfig, parsed.error]);\n\n const handleSort = useCallback((column: string) => {\n setSortConfig((prev) => {\n if (prev?.column === column) {\n return prev.direction === 'asc' ? { column, direction: 'desc' } : null;\n }\n return { column, direction: 'asc' };\n });\n }, []);\n\n const handleExportCsv = useCallback(() => {\n if (!papa) return;\n const csvContent = papa.unparse(sortedRows);\n const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = `data-${id}.csv`;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n setTimeout(() => URL.revokeObjectURL(url), 100);\n }, [sortedRows, id, papa]);\n\n if (loadError) {\n return (\n <FenceBlock code={code} language=\"csv\" error={loadError}>\n <div />\n </FenceBlock>\n );\n }\n\n if (!papa) {\n return (\n <FenceBlock code={code} language=\"csv\" supportsRawView>\n <div className=\"flex items-center justify-center p-6 text-sm text-neutral-500\">\n Loading CSV parser…\n </div>\n </FenceBlock>\n );\n }\n\n if (parsed.error) {\n return (\n <FenceBlock code={code} language=\"csv\" error={parsed.error}>\n <div />\n </FenceBlock>\n );\n }\n\n return (\n <FenceBlock code={code} language=\"csv\" supportsRawView>\n <div className=\"relative\">\n <div className=\"flex items-center justify-between border-b border-neutral-200 px-3 py-1.5 dark:border-neutral-700\">\n <span className=\"text-xs text-neutral-500 dark:text-neutral-400\">\n {sortedRows.length} row{sortedRows.length !== 1 ? 's' : ''} ×{' '}\n {parsed.headers.length} column\n {parsed.headers.length !== 1 ? 's' : ''}\n </span>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleExportCsv}\n aria-label=\"Export CSV\"\n className=\"h-7 gap-1 px-2 text-xs\"\n >\n <Download className=\"h-3 w-3\" />\n Export\n </Button>\n </div>\n\n <div className=\"max-h-96 overflow-auto\">\n <table className=\"min-w-full text-sm\">\n <thead className=\"sticky top-0 bg-neutral-100 dark:bg-neutral-800\">\n <tr>\n {parsed.headers.map((header) => {\n const isSorted = sortConfig?.column === header;\n const ariaSort = isSorted\n ? sortConfig.direction === 'asc'\n ? 'ascending'\n : 'descending'\n : 'none';\n return (\n <th\n key={header}\n scope=\"col\"\n aria-sort={ariaSort}\n className=\"px-3 py-2 text-start text-xs font-medium whitespace-nowrap text-neutral-600 dark:text-neutral-400\"\n >\n <button\n type=\"button\"\n onClick={() => handleSort(header)}\n className=\"flex w-full cursor-pointer items-center gap-1 text-start font-medium select-none hover:text-neutral-900 dark:hover:text-neutral-200\"\n >\n {header}\n {isSorted && (\n <span aria-hidden=\"true\">\n {sortConfig.direction === 'asc' ? '↑' : '↓'}\n </span>\n )}\n </button>\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody className=\"divide-y divide-neutral-200 dark:divide-neutral-700\">\n {sortedRows.map((row, i) => (\n <tr\n key={i}\n className=\"hover:bg-neutral-50 dark:hover:bg-neutral-800/50\"\n >\n {parsed.headers.map((header) => (\n <td\n key={header}\n className=\"px-3 py-1.5 whitespace-nowrap text-neutral-700 dark:text-neutral-300\"\n >\n {row[header] != null ? String(row[header]) : ''}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n </FenceBlock>\n );\n};\n"]}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
var chunk4NCDU5IG_cjs = require('./chunk-4NCDU5IG.cjs');
|
|
4
4
|
var chunkXXVUHLQN_cjs = require('./chunk-XXVUHLQN.cjs');
|
|
5
5
|
var chunkL7L5S2HO_cjs = require('./chunk-L7L5S2HO.cjs');
|
|
6
|
-
var
|
|
6
|
+
var chunkANMX7YDL_cjs = require('./chunk-ANMX7YDL.cjs');
|
|
7
7
|
var chunkS5RVSXDV_cjs = require('./chunk-S5RVSXDV.cjs');
|
|
8
8
|
var React = require('react');
|
|
9
9
|
var classVarianceAuthority = require('class-variance-authority');
|
|
@@ -129,7 +129,7 @@ function ListView({
|
|
|
129
129
|
body = state(
|
|
130
130
|
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
131
131
|
/* @__PURE__ */ jsxRuntime.jsx("p", { role: "alert", className: "text-destructive", children: text.error }),
|
|
132
|
-
onRetry && /* @__PURE__ */ jsxRuntime.jsx(
|
|
132
|
+
onRetry && /* @__PURE__ */ jsxRuntime.jsx(chunkANMX7YDL_cjs.Button, { variant: "ghost", size: "sm", onClick: onRetry, children: text.retry })
|
|
133
133
|
] })
|
|
134
134
|
);
|
|
135
135
|
} else if (loading) {
|
|
@@ -277,5 +277,5 @@ function ListView({
|
|
|
277
277
|
|
|
278
278
|
exports.ListView = ListView;
|
|
279
279
|
exports.itemVariants = itemVariants;
|
|
280
|
-
//# sourceMappingURL=chunk-
|
|
281
|
-
//# sourceMappingURL=chunk-
|
|
280
|
+
//# sourceMappingURL=chunk-PYI2IWNX.cjs.map
|
|
281
|
+
//# sourceMappingURL=chunk-PYI2IWNX.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/ListView/ListView.tsx"],"names":["cva","defaultViewLabels","React","jsx","cn","jsxs","Fragment","Button","Spinner","ChevronRight","ChevronDown","accentClasses"],"mappings":"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","file":"chunk-GU5OS7JJ.cjs","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport { Button } from '../Button';\nimport { Spinner } from '../Spinner';\nimport { ChevronDownIcon, ChevronRightIcon } from '../Icons';\nimport {\n accentClasses,\n defaultViewLabels,\n type Stage,\n type ViewBaseProps,\n} from '../../views/types';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type ListViewSlot =\n | 'group'\n | 'groupHeader'\n | 'item'\n | 'selectedItem'\n | 'state';\n\nexport interface ListViewProps<T>\n extends ViewBaseProps<T>, VariantProps<typeof itemVariants> {\n /**\n * Group rows by `accessors.getStatus`, using these stages for order and\n * labels. Items whose status matches no stage are appended under their own\n * heading rather than dropped.\n */\n stages?: readonly Stage[];\n /** Group by `accessors.getGroup` instead of by stage. */\n groupBy?: 'status' | 'group' | 'none';\n /** Groups that start collapsed. Uncontrolled; the user can reopen them. */\n defaultCollapsedGroups?: readonly string[];\n /** Retries the failed load. Renders the retry action only when provided. */\n onRetry?: () => void;\n classNames?: Partial<Record<ListViewSlot, string>>;\n /** Heading level for group headers, under the page's own heading. */\n headingLevel?: 'h2' | 'h3' | 'h4';\n}\n\ninterface Group<T> {\n id: string;\n label: string;\n accent?: Stage['accent'];\n items: T[];\n}\n\n// =============================================================================\n// Variants\n// =============================================================================\n\nconst itemVariants = cva(\n [\n 'flex w-full items-start gap-3 border-b border-border px-3 text-start',\n 'last:border-b-0',\n 'transition-colors',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring',\n ],\n {\n variants: {\n density: {\n comfortable: 'py-3',\n compact: 'py-2',\n },\n interactive: {\n true: 'cursor-pointer hover:bg-muted',\n false: '',\n },\n selected: {\n true: 'bg-primary-500/10',\n false: '',\n },\n },\n defaultVariants: {\n density: 'comfortable',\n interactive: false,\n selected: false,\n },\n }\n);\n\n// =============================================================================\n// Grouping\n// =============================================================================\n\nfunction buildGroups<T>(\n items: T[],\n groupBy: 'status' | 'group' | 'none',\n accessors: ListViewProps<T>['accessors'],\n ungrouped: string,\n stages?: readonly Stage[]\n): Group<T>[] {\n if (groupBy === 'none') return [{ id: '', label: '', items }];\n\n const read = groupBy === 'status' ? accessors.getStatus : accessors.getGroup;\n if (!read) return [{ id: '', label: '', items }];\n\n const buckets = new Map<string, T[]>();\n for (const item of items) {\n const key = read(item) ?? '';\n const bucket = buckets.get(key);\n if (bucket) bucket.push(item);\n else buckets.set(key, [item]);\n }\n\n const groups: Group<T>[] = [];\n // Stages fix the order, and an empty stage still shows — a board column that\n // disappears when it empties hides the fact that the stage exists. This only\n // applies to `groupBy=\"status\"`: stages name statuses, so seeding them under\n // `groupBy=\"group\"` would print an empty \"Backlog\"/\"In progress\" above the\n // real buckets. `ViewSet` always passes its shared stages, so that case is\n // reachable with nothing more than `listProps={{ groupBy: 'group' }}`.\n for (const stage of (groupBy === 'status' ? stages : undefined) ?? []) {\n groups.push({\n id: stage.id,\n label: stage.label,\n accent: stage.accent,\n items: buckets.get(stage.id) ?? [],\n });\n buckets.delete(stage.id);\n }\n for (const [key, bucket] of buckets) {\n groups.push({ id: key, label: key || ungrouped, items: bucket });\n }\n return groups;\n}\n\n// =============================================================================\n// Component\n// =============================================================================\n\n/**\n * Declared `parameters.catalog.collection` — the three load states below are\n * part of this component's API, not decoration.\n */\nexport function ListView<T>({\n items,\n accessors,\n loading = false,\n error = null,\n selectedId = null,\n onOpen,\n getHref,\n renderItem,\n emptyState,\n labels,\n stages,\n groupBy = stages ? 'status' : 'none',\n defaultCollapsedGroups,\n onRetry,\n density,\n className,\n classNames,\n headingLevel: Heading = 'h3',\n}: ListViewProps<T>) {\n const text = { ...defaultViewLabels, ...labels };\n // Ids come from position, not from the status text: two distinct statuses can\n // normalise to the same string, and a duplicate id makes `aria-labelledby`\n // resolve to the wrong heading.\n const baseId = React.useId();\n const [collapsed, setCollapsed] = React.useState<Set<string>>(\n () => new Set(defaultCollapsedGroups ?? [])\n );\n\n const groups = React.useMemo(\n () => buildGroups(items, groupBy, accessors, text.ungrouped, stages),\n [items, groupBy, accessors, text.ungrouped, stages]\n );\n\n const state = (content: React.ReactNode) => (\n <div\n data-slot=\"list-view-state\"\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 classNames?.state\n )}\n >\n {content}\n </div>\n );\n\n let body: React.ReactNode;\n if (error) {\n body = state(\n <>\n <p role=\"alert\" className=\"text-destructive\">\n {text.error}\n </p>\n {onRetry && (\n <Button variant=\"ghost\" size=\"sm\" onClick={onRetry}>\n {text.retry}\n </Button>\n )}\n </>\n );\n } else if (loading) {\n // Spinner is the status region and carries the accessible name; the visible\n // copy beside it would otherwise be announced twice.\n body = state(\n <span className=\"flex items-center gap-2\">\n <Spinner size=\"sm\" label={text.loading} />\n <span aria-hidden>{text.loading}</span>\n </span>\n );\n } else if (items.length === 0) {\n body = emptyState ?? state(text.empty);\n } else {\n body = groups.map((group, groupIndex) => {\n const isCollapsed = collapsed.has(group.id);\n const headerId = `${baseId}-group-${groupIndex}`;\n return (\n <section\n key={group.id}\n data-slot=\"list-view-group\"\n className={cn(classNames?.group)}\n >\n {group.label && (\n <Heading className=\"sticky top-0 z-10\">\n <button\n type=\"button\"\n id={headerId}\n aria-expanded={!isCollapsed}\n onClick={() =>\n setCollapsed((prev) => {\n const next = new Set(prev);\n if (!next.delete(group.id)) next.add(group.id);\n return next;\n })\n }\n data-slot=\"list-view-group-header\"\n className={cn(\n 'border-border bg-muted text-muted-foreground flex w-full items-center gap-2 border-b px-3 py-2 text-start text-xs font-semibold tracking-wide uppercase',\n 'focus-visible:ring-ring focus-visible:ring-2 focus-visible:outline-none focus-visible:ring-inset',\n classNames?.groupHeader\n )}\n >\n {isCollapsed ? (\n <ChevronRightIcon\n className=\"size-3.5 rtl:rotate-180\"\n aria-hidden\n />\n ) : (\n <ChevronDownIcon className=\"size-3.5\" aria-hidden />\n )}\n {group.accent && (\n <span\n aria-hidden\n className={cn(\n 'size-2 shrink-0 rounded-full',\n accentClasses[group.accent].marker\n )}\n />\n )}\n <span>{group.label}</span>\n <span className=\"ms-auto font-normal tabular-nums\">\n {group.items.length}\n </span>\n </button>\n </Heading>\n )}\n {!isCollapsed && (\n <ul aria-labelledby={group.label ? headerId : undefined}>\n {group.items.map((item) => {\n const id = accessors.getId(item);\n const selected = id === selectedId;\n const accent = accessors.getAccent?.(item);\n const subtitle = accessors.getSubtitle?.(item);\n const content = renderItem?.(item, { view: 'list' }) ?? (\n <>\n {accent && (\n <span\n aria-hidden\n className={cn(\n 'mt-1.5 size-2 shrink-0 rounded-full',\n accentClasses[accent].marker\n )}\n />\n )}\n <span className=\"min-w-0 flex-1\">\n <span className=\"text-foreground block truncate font-medium\">\n {accessors.getTitle(item)}\n </span>\n {subtitle && (\n <span className=\"text-muted-foreground block truncate text-sm\">\n {subtitle}\n </span>\n )}\n </span>\n </>\n );\n const classes = cn(\n itemVariants({\n density,\n interactive: Boolean(onOpen || getHref),\n selected,\n }),\n classNames?.item,\n selected && classNames?.selectedItem\n );\n const href = getHref?.(id, item);\n return (\n <li key={id}>\n {href ? (\n // An anchor, not a handler, so the row is middle-clickable\n // and crawlable; onOpen still runs for router navigation.\n <a\n href={href}\n aria-current={selected ? 'true' : undefined}\n data-slot=\"list-view-item\"\n className={classes}\n onClick={(event) => {\n if (\n !onOpen ||\n event.defaultPrevented ||\n event.metaKey ||\n event.ctrlKey ||\n event.shiftKey ||\n event.button !== 0\n )\n return;\n event.preventDefault();\n onOpen(id, item);\n }}\n >\n {content}\n </a>\n ) : onOpen ? (\n <button\n type=\"button\"\n aria-current={selected ? 'true' : undefined}\n data-slot=\"list-view-item\"\n className={classes}\n onClick={() => onOpen(id, item)}\n >\n {content}\n </button>\n ) : (\n <div data-slot=\"list-view-item\" className={classes}>\n {content}\n </div>\n )}\n </li>\n );\n })}\n {group.items.length === 0 && (\n <li className=\"text-muted-foreground px-3 py-2 text-sm\">\n {text.empty}\n </li>\n )}\n </ul>\n )}\n </section>\n );\n });\n }\n\n return (\n <div\n data-slot=\"list-view\"\n className={cn(\n 'border-border bg-card overflow-hidden rounded-lg border',\n className\n )}\n >\n {body}\n </div>\n );\n}\n\nexport { itemVariants as listViewItemVariants };\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/ListView/ListView.tsx"],"names":["cva","defaultViewLabels","React","jsx","cn","jsxs","Fragment","Button","Spinner","ChevronRight","ChevronDown","accentClasses"],"mappings":"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","file":"chunk-PYI2IWNX.cjs","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport { Button } from '../Button';\nimport { Spinner } from '../Spinner';\nimport { ChevronDownIcon, ChevronRightIcon } from '../Icons';\nimport {\n accentClasses,\n defaultViewLabels,\n type Stage,\n type ViewBaseProps,\n} from '../../views/types';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type ListViewSlot =\n | 'group'\n | 'groupHeader'\n | 'item'\n | 'selectedItem'\n | 'state';\n\nexport interface ListViewProps<T>\n extends ViewBaseProps<T>, VariantProps<typeof itemVariants> {\n /**\n * Group rows by `accessors.getStatus`, using these stages for order and\n * labels. Items whose status matches no stage are appended under their own\n * heading rather than dropped.\n */\n stages?: readonly Stage[];\n /** Group by `accessors.getGroup` instead of by stage. */\n groupBy?: 'status' | 'group' | 'none';\n /** Groups that start collapsed. Uncontrolled; the user can reopen them. */\n defaultCollapsedGroups?: readonly string[];\n /** Retries the failed load. Renders the retry action only when provided. */\n onRetry?: () => void;\n classNames?: Partial<Record<ListViewSlot, string>>;\n /** Heading level for group headers, under the page's own heading. */\n headingLevel?: 'h2' | 'h3' | 'h4';\n}\n\ninterface Group<T> {\n id: string;\n label: string;\n accent?: Stage['accent'];\n items: T[];\n}\n\n// =============================================================================\n// Variants\n// =============================================================================\n\nconst itemVariants = cva(\n [\n 'flex w-full items-start gap-3 border-b border-border px-3 text-start',\n 'last:border-b-0',\n 'transition-colors',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring',\n ],\n {\n variants: {\n density: {\n comfortable: 'py-3',\n compact: 'py-2',\n },\n interactive: {\n true: 'cursor-pointer hover:bg-muted',\n false: '',\n },\n selected: {\n true: 'bg-primary-500/10',\n false: '',\n },\n },\n defaultVariants: {\n density: 'comfortable',\n interactive: false,\n selected: false,\n },\n }\n);\n\n// =============================================================================\n// Grouping\n// =============================================================================\n\nfunction buildGroups<T>(\n items: T[],\n groupBy: 'status' | 'group' | 'none',\n accessors: ListViewProps<T>['accessors'],\n ungrouped: string,\n stages?: readonly Stage[]\n): Group<T>[] {\n if (groupBy === 'none') return [{ id: '', label: '', items }];\n\n const read = groupBy === 'status' ? accessors.getStatus : accessors.getGroup;\n if (!read) return [{ id: '', label: '', items }];\n\n const buckets = new Map<string, T[]>();\n for (const item of items) {\n const key = read(item) ?? '';\n const bucket = buckets.get(key);\n if (bucket) bucket.push(item);\n else buckets.set(key, [item]);\n }\n\n const groups: Group<T>[] = [];\n // Stages fix the order, and an empty stage still shows — a board column that\n // disappears when it empties hides the fact that the stage exists. This only\n // applies to `groupBy=\"status\"`: stages name statuses, so seeding them under\n // `groupBy=\"group\"` would print an empty \"Backlog\"/\"In progress\" above the\n // real buckets. `ViewSet` always passes its shared stages, so that case is\n // reachable with nothing more than `listProps={{ groupBy: 'group' }}`.\n for (const stage of (groupBy === 'status' ? stages : undefined) ?? []) {\n groups.push({\n id: stage.id,\n label: stage.label,\n accent: stage.accent,\n items: buckets.get(stage.id) ?? [],\n });\n buckets.delete(stage.id);\n }\n for (const [key, bucket] of buckets) {\n groups.push({ id: key, label: key || ungrouped, items: bucket });\n }\n return groups;\n}\n\n// =============================================================================\n// Component\n// =============================================================================\n\n/**\n * Declared `parameters.catalog.collection` — the three load states below are\n * part of this component's API, not decoration.\n */\nexport function ListView<T>({\n items,\n accessors,\n loading = false,\n error = null,\n selectedId = null,\n onOpen,\n getHref,\n renderItem,\n emptyState,\n labels,\n stages,\n groupBy = stages ? 'status' : 'none',\n defaultCollapsedGroups,\n onRetry,\n density,\n className,\n classNames,\n headingLevel: Heading = 'h3',\n}: ListViewProps<T>) {\n const text = { ...defaultViewLabels, ...labels };\n // Ids come from position, not from the status text: two distinct statuses can\n // normalise to the same string, and a duplicate id makes `aria-labelledby`\n // resolve to the wrong heading.\n const baseId = React.useId();\n const [collapsed, setCollapsed] = React.useState<Set<string>>(\n () => new Set(defaultCollapsedGroups ?? [])\n );\n\n const groups = React.useMemo(\n () => buildGroups(items, groupBy, accessors, text.ungrouped, stages),\n [items, groupBy, accessors, text.ungrouped, stages]\n );\n\n const state = (content: React.ReactNode) => (\n <div\n data-slot=\"list-view-state\"\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 classNames?.state\n )}\n >\n {content}\n </div>\n );\n\n let body: React.ReactNode;\n if (error) {\n body = state(\n <>\n <p role=\"alert\" className=\"text-destructive\">\n {text.error}\n </p>\n {onRetry && (\n <Button variant=\"ghost\" size=\"sm\" onClick={onRetry}>\n {text.retry}\n </Button>\n )}\n </>\n );\n } else if (loading) {\n // Spinner is the status region and carries the accessible name; the visible\n // copy beside it would otherwise be announced twice.\n body = state(\n <span className=\"flex items-center gap-2\">\n <Spinner size=\"sm\" label={text.loading} />\n <span aria-hidden>{text.loading}</span>\n </span>\n );\n } else if (items.length === 0) {\n body = emptyState ?? state(text.empty);\n } else {\n body = groups.map((group, groupIndex) => {\n const isCollapsed = collapsed.has(group.id);\n const headerId = `${baseId}-group-${groupIndex}`;\n return (\n <section\n key={group.id}\n data-slot=\"list-view-group\"\n className={cn(classNames?.group)}\n >\n {group.label && (\n <Heading className=\"sticky top-0 z-10\">\n <button\n type=\"button\"\n id={headerId}\n aria-expanded={!isCollapsed}\n onClick={() =>\n setCollapsed((prev) => {\n const next = new Set(prev);\n if (!next.delete(group.id)) next.add(group.id);\n return next;\n })\n }\n data-slot=\"list-view-group-header\"\n className={cn(\n 'border-border bg-muted text-muted-foreground flex w-full items-center gap-2 border-b px-3 py-2 text-start text-xs font-semibold tracking-wide uppercase',\n 'focus-visible:ring-ring focus-visible:ring-2 focus-visible:outline-none focus-visible:ring-inset',\n classNames?.groupHeader\n )}\n >\n {isCollapsed ? (\n <ChevronRightIcon\n className=\"size-3.5 rtl:rotate-180\"\n aria-hidden\n />\n ) : (\n <ChevronDownIcon className=\"size-3.5\" aria-hidden />\n )}\n {group.accent && (\n <span\n aria-hidden\n className={cn(\n 'size-2 shrink-0 rounded-full',\n accentClasses[group.accent].marker\n )}\n />\n )}\n <span>{group.label}</span>\n <span className=\"ms-auto font-normal tabular-nums\">\n {group.items.length}\n </span>\n </button>\n </Heading>\n )}\n {!isCollapsed && (\n <ul aria-labelledby={group.label ? headerId : undefined}>\n {group.items.map((item) => {\n const id = accessors.getId(item);\n const selected = id === selectedId;\n const accent = accessors.getAccent?.(item);\n const subtitle = accessors.getSubtitle?.(item);\n const content = renderItem?.(item, { view: 'list' }) ?? (\n <>\n {accent && (\n <span\n aria-hidden\n className={cn(\n 'mt-1.5 size-2 shrink-0 rounded-full',\n accentClasses[accent].marker\n )}\n />\n )}\n <span className=\"min-w-0 flex-1\">\n <span className=\"text-foreground block truncate font-medium\">\n {accessors.getTitle(item)}\n </span>\n {subtitle && (\n <span className=\"text-muted-foreground block truncate text-sm\">\n {subtitle}\n </span>\n )}\n </span>\n </>\n );\n const classes = cn(\n itemVariants({\n density,\n interactive: Boolean(onOpen || getHref),\n selected,\n }),\n classNames?.item,\n selected && classNames?.selectedItem\n );\n const href = getHref?.(id, item);\n return (\n <li key={id}>\n {href ? (\n // An anchor, not a handler, so the row is middle-clickable\n // and crawlable; onOpen still runs for router navigation.\n <a\n href={href}\n aria-current={selected ? 'true' : undefined}\n data-slot=\"list-view-item\"\n className={classes}\n onClick={(event) => {\n if (\n !onOpen ||\n event.defaultPrevented ||\n event.metaKey ||\n event.ctrlKey ||\n event.shiftKey ||\n event.button !== 0\n )\n return;\n event.preventDefault();\n onOpen(id, item);\n }}\n >\n {content}\n </a>\n ) : onOpen ? (\n <button\n type=\"button\"\n aria-current={selected ? 'true' : undefined}\n data-slot=\"list-view-item\"\n className={classes}\n onClick={() => onOpen(id, item)}\n >\n {content}\n </button>\n ) : (\n <div data-slot=\"list-view-item\" className={classes}>\n {content}\n </div>\n )}\n </li>\n );\n })}\n {group.items.length === 0 && (\n <li className=\"text-muted-foreground px-3 py-2 text-sm\">\n {text.empty}\n </li>\n )}\n </ul>\n )}\n </section>\n );\n });\n }\n\n return (\n <div\n data-slot=\"list-view\"\n className={cn(\n 'border-border bg-card overflow-hidden rounded-lg border',\n className\n )}\n >\n {body}\n </div>\n );\n}\n\nexport { itemVariants as listViewItemVariants };\n"]}
|