@mieweb/ui 0.7.1-dev.7 → 0.7.1-dev.9
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-LVJARITD.cjs +15 -0
- package/dist/{CsvBlock-2A5VEDD3.cjs.map → CsvBlock-LVJARITD.cjs.map} +1 -1
- package/dist/CsvBlock-VTYNQ75L.js +6 -0
- package/dist/{CsvBlock-D6PWAJ5X.js.map → CsvBlock-VTYNQ75L.js.map} +1 -1
- package/dist/HtmlPreviewBlock-F33P37UD.cjs +15 -0
- package/dist/{HtmlPreviewBlock-SYXCV5RH.cjs.map → HtmlPreviewBlock-F33P37UD.cjs.map} +1 -1
- package/dist/HtmlPreviewBlock-N4PPVJLJ.js +6 -0
- package/dist/{HtmlPreviewBlock-PEHTJ6C3.js.map → HtmlPreviewBlock-N4PPVJLJ.js.map} +1 -1
- package/dist/MermaidBlock-G5X4FPUN.cjs +15 -0
- package/dist/{MermaidBlock-AFXNP5NK.cjs.map → MermaidBlock-G5X4FPUN.cjs.map} +1 -1
- package/dist/MermaidBlock-HUT53CRG.js +6 -0
- package/dist/{MermaidBlock-7NK3AVK2.js.map → MermaidBlock-HUT53CRG.js.map} +1 -1
- package/dist/SurveyBlock-ORTPGA5T.cjs +15 -0
- package/dist/{SurveyBlock-6KRNKFH5.cjs.map → SurveyBlock-ORTPGA5T.cjs.map} +1 -1
- package/dist/SurveyBlock-PM3ZMWWR.js +6 -0
- package/dist/{SurveyBlock-NNDGXGG4.js.map → SurveyBlock-PM3ZMWWR.js.map} +1 -1
- package/dist/ag-grid.cjs +8 -8
- package/dist/ag-grid.js +1 -1
- package/dist/{chunk-4DMZAVB2.js → chunk-23AYDOCH.js} +3 -3
- package/dist/{chunk-4DMZAVB2.js.map → chunk-23AYDOCH.js.map} +1 -1
- package/dist/{chunk-TRZXK57D.js → chunk-2DW4PUJD.js} +3 -3
- package/dist/{chunk-TRZXK57D.js.map → chunk-2DW4PUJD.js.map} +1 -1
- package/dist/{chunk-AES2BKEW.cjs → chunk-2GQ7VPCS.cjs} +8 -8
- package/dist/{chunk-AES2BKEW.cjs.map → chunk-2GQ7VPCS.cjs.map} +1 -1
- package/dist/{chunk-B77UC56R.js → chunk-2YDKLURF.js} +20 -2
- package/dist/chunk-2YDKLURF.js.map +1 -0
- package/dist/{chunk-J7Z7467B.js → chunk-34LGPMO4.js} +3 -3
- package/dist/{chunk-J7Z7467B.js.map → chunk-34LGPMO4.js.map} +1 -1
- package/dist/{chunk-T5F565OC.cjs → chunk-3OME4UHL.cjs} +20 -2
- package/dist/chunk-3OME4UHL.cjs.map +1 -0
- package/dist/{chunk-Q2EWNXIB.cjs → chunk-3SZQRMHM.cjs} +9 -9
- package/dist/{chunk-Q2EWNXIB.cjs.map → chunk-3SZQRMHM.cjs.map} +1 -1
- package/dist/{chunk-NIEIRA5A.cjs → chunk-4AE2L6AO.cjs} +13 -13
- package/dist/{chunk-NIEIRA5A.cjs.map → chunk-4AE2L6AO.cjs.map} +1 -1
- package/dist/{chunk-XP6HELVG.cjs → chunk-5IDYOJHO.cjs} +13 -13
- package/dist/{chunk-XP6HELVG.cjs.map → chunk-5IDYOJHO.cjs.map} +1 -1
- package/dist/{chunk-MSRU3XBH.cjs → chunk-5PHGIWDN.cjs} +6 -6
- package/dist/{chunk-MSRU3XBH.cjs.map → chunk-5PHGIWDN.cjs.map} +1 -1
- package/dist/{chunk-3CJBUAJ4.js → chunk-5U6GETAW.js} +3 -3
- package/dist/{chunk-3CJBUAJ4.js.map → chunk-5U6GETAW.js.map} +1 -1
- package/dist/{chunk-HEH3QXOQ.js → chunk-5Y5FSR4N.js} +3 -3
- package/dist/{chunk-HEH3QXOQ.js.map → chunk-5Y5FSR4N.js.map} +1 -1
- package/dist/{chunk-TN33E2VN.cjs → chunk-62TFTZWT.cjs} +12 -12
- package/dist/{chunk-TN33E2VN.cjs.map → chunk-62TFTZWT.cjs.map} +1 -1
- package/dist/{chunk-MV3MTHWQ.js → chunk-6EWJGRC3.js} +3 -3
- package/dist/{chunk-MV3MTHWQ.js.map → chunk-6EWJGRC3.js.map} +1 -1
- package/dist/{chunk-7WMSUXOQ.js → chunk-6OCYG6J2.js} +4 -4
- package/dist/{chunk-7WMSUXOQ.js.map → chunk-6OCYG6J2.js.map} +1 -1
- package/dist/{chunk-JCNPVK74.cjs → chunk-6OQE4ZMG.cjs} +8 -8
- package/dist/{chunk-JCNPVK74.cjs.map → chunk-6OQE4ZMG.cjs.map} +1 -1
- package/dist/{chunk-KBEKQMVY.cjs → chunk-6QVI6DAO.cjs} +5 -5
- package/dist/{chunk-KBEKQMVY.cjs.map → chunk-6QVI6DAO.cjs.map} +1 -1
- package/dist/{chunk-5BQE6BEL.js → chunk-6XGESZ4S.js} +3 -3
- package/dist/{chunk-5BQE6BEL.js.map → chunk-6XGESZ4S.js.map} +1 -1
- package/dist/{chunk-CVC4NWFA.cjs → chunk-7AMOKHTW.cjs} +4 -4
- package/dist/{chunk-CVC4NWFA.cjs.map → chunk-7AMOKHTW.cjs.map} +1 -1
- package/dist/{chunk-44CK4CT2.cjs → chunk-7EB7665B.cjs} +13 -13
- package/dist/{chunk-44CK4CT2.cjs.map → chunk-7EB7665B.cjs.map} +1 -1
- package/dist/{chunk-F3PPRNFI.js → chunk-7OIUA7PW.js} +14 -14
- package/dist/{chunk-F3PPRNFI.js.map → chunk-7OIUA7PW.js.map} +1 -1
- package/dist/{chunk-JLBT76WH.js → chunk-7V6SUOBV.js} +3 -3
- package/dist/{chunk-JLBT76WH.js.map → chunk-7V6SUOBV.js.map} +1 -1
- package/dist/{chunk-BB4WQ4LV.cjs → chunk-ABAOZASX.cjs} +8 -8
- package/dist/{chunk-BB4WQ4LV.cjs.map → chunk-ABAOZASX.cjs.map} +1 -1
- package/dist/{chunk-6LFG4JFF.js → chunk-AFGADE3B.js} +3 -3
- package/dist/{chunk-6LFG4JFF.js.map → chunk-AFGADE3B.js.map} +1 -1
- package/dist/{chunk-T3C4RNJ4.js → chunk-BJKAVWED.js} +3 -3
- package/dist/{chunk-T3C4RNJ4.js.map → chunk-BJKAVWED.js.map} +1 -1
- package/dist/{chunk-43GBCUSQ.js → chunk-BS5NOKZD.js} +3 -3
- package/dist/{chunk-43GBCUSQ.js.map → chunk-BS5NOKZD.js.map} +1 -1
- package/dist/{chunk-C2544GKZ.js → chunk-BX5ZODPF.js} +4 -4
- package/dist/{chunk-C2544GKZ.js.map → chunk-BX5ZODPF.js.map} +1 -1
- package/dist/{chunk-VPNURIAY.cjs → chunk-C2NNNOSU.cjs} +8 -8
- package/dist/{chunk-VPNURIAY.cjs.map → chunk-C2NNNOSU.cjs.map} +1 -1
- package/dist/{chunk-IYIYL2SQ.js → chunk-CEQJGUAS.js} +3 -3
- package/dist/{chunk-IYIYL2SQ.js.map → chunk-CEQJGUAS.js.map} +1 -1
- package/dist/{chunk-6ZYE6JUK.cjs → chunk-CKRRJO7T.cjs} +11 -11
- package/dist/{chunk-6ZYE6JUK.cjs.map → chunk-CKRRJO7T.cjs.map} +1 -1
- package/dist/{chunk-ZHBANUBI.cjs → chunk-CPUDOVWH.cjs} +21 -21
- package/dist/{chunk-ZHBANUBI.cjs.map → chunk-CPUDOVWH.cjs.map} +1 -1
- package/dist/{chunk-WO5CAOAN.js → chunk-DCBMTFLE.js} +3 -3
- package/dist/{chunk-WO5CAOAN.js.map → chunk-DCBMTFLE.js.map} +1 -1
- package/dist/{chunk-YZT62IMX.js → chunk-DKICBJTM.js} +4 -4
- package/dist/{chunk-YZT62IMX.js.map → chunk-DKICBJTM.js.map} +1 -1
- package/dist/{chunk-MUYTGWGE.js → chunk-DVOQ3JNO.js} +3 -3
- package/dist/{chunk-MUYTGWGE.js.map → chunk-DVOQ3JNO.js.map} +1 -1
- package/dist/{chunk-EL2RSQTJ.cjs → chunk-EFEKAPS2.cjs} +4 -4
- package/dist/{chunk-EL2RSQTJ.cjs.map → chunk-EFEKAPS2.cjs.map} +1 -1
- package/dist/{chunk-PVUDXJAI.js → chunk-EJPV3QY3.js} +3 -3
- package/dist/{chunk-PVUDXJAI.js.map → chunk-EJPV3QY3.js.map} +1 -1
- package/dist/{chunk-WGPMTW36.cjs → chunk-EPQPUFS6.cjs} +7 -7
- package/dist/{chunk-WGPMTW36.cjs.map → chunk-EPQPUFS6.cjs.map} +1 -1
- package/dist/{chunk-KL2S36FM.js → chunk-ET5JGGVL.js} +3 -3
- package/dist/{chunk-KL2S36FM.js.map → chunk-ET5JGGVL.js.map} +1 -1
- package/dist/{chunk-J3BU3JBX.js → chunk-FDUA6OGN.js} +3 -3
- package/dist/{chunk-J3BU3JBX.js.map → chunk-FDUA6OGN.js.map} +1 -1
- package/dist/{chunk-KQAXXJ4G.cjs → chunk-FF235PKY.cjs} +7 -7
- package/dist/{chunk-KQAXXJ4G.cjs.map → chunk-FF235PKY.cjs.map} +1 -1
- package/dist/{chunk-FZJBFJJR.js → chunk-FJ7YPVKV.js} +3 -3
- package/dist/{chunk-FZJBFJJR.js.map → chunk-FJ7YPVKV.js.map} +1 -1
- package/dist/{chunk-ZAIEQWRA.js → chunk-G45PAVQI.js} +4 -4
- package/dist/{chunk-ZAIEQWRA.js.map → chunk-G45PAVQI.js.map} +1 -1
- package/dist/{chunk-ZGSC2CB2.js → chunk-GTHNWP4P.js} +36 -5
- package/dist/chunk-GTHNWP4P.js.map +1 -0
- package/dist/{chunk-6AHYYWVB.js → chunk-H3HF36ZL.js} +5 -5
- package/dist/{chunk-6AHYYWVB.js.map → chunk-H3HF36ZL.js.map} +1 -1
- package/dist/{chunk-IWDQPSJN.cjs → chunk-HEV52I7A.cjs} +25 -25
- package/dist/{chunk-IWDQPSJN.cjs.map → chunk-HEV52I7A.cjs.map} +1 -1
- package/dist/{chunk-UOOH356R.cjs → chunk-HIAUNNOW.cjs} +4 -4
- package/dist/{chunk-UOOH356R.cjs.map → chunk-HIAUNNOW.cjs.map} +1 -1
- package/dist/{chunk-BIT27PPD.js → chunk-HS25RPDW.js} +3 -3
- package/dist/{chunk-BIT27PPD.js.map → chunk-HS25RPDW.js.map} +1 -1
- package/dist/{chunk-BWYYA3LQ.cjs → chunk-I2ECTLON.cjs} +5 -5
- package/dist/{chunk-BWYYA3LQ.cjs.map → chunk-I2ECTLON.cjs.map} +1 -1
- package/dist/{chunk-BT3ZQJGT.cjs → chunk-IUDY6S7I.cjs} +6 -6
- package/dist/{chunk-BT3ZQJGT.cjs.map → chunk-IUDY6S7I.cjs.map} +1 -1
- package/dist/{chunk-FJH7P5WG.js → chunk-IVDIT3TJ.js} +6 -6
- package/dist/{chunk-FJH7P5WG.js.map → chunk-IVDIT3TJ.js.map} +1 -1
- package/dist/{chunk-UM6NA7HL.js → chunk-IXWRD4AP.js} +3 -3
- package/dist/{chunk-UM6NA7HL.js.map → chunk-IXWRD4AP.js.map} +1 -1
- package/dist/{chunk-MKWGKASO.js → chunk-JJNCQMR5.js} +3 -3
- package/dist/{chunk-MKWGKASO.js.map → chunk-JJNCQMR5.js.map} +1 -1
- package/dist/{chunk-TR2OJKQ4.cjs → chunk-JTSKPDPH.cjs} +8 -8
- package/dist/{chunk-TR2OJKQ4.cjs.map → chunk-JTSKPDPH.cjs.map} +1 -1
- package/dist/{chunk-NVHAQOHH.cjs → chunk-JY4U2QWO.cjs} +7 -7
- package/dist/{chunk-NVHAQOHH.cjs.map → chunk-JY4U2QWO.cjs.map} +1 -1
- package/dist/{chunk-XCLQZ4FV.js → chunk-KFLDXJEE.js} +3 -3
- package/dist/{chunk-XCLQZ4FV.js.map → chunk-KFLDXJEE.js.map} +1 -1
- package/dist/{chunk-IHTRKWBG.js → chunk-KQGGKE36.js} +4 -4
- package/dist/{chunk-IHTRKWBG.js.map → chunk-KQGGKE36.js.map} +1 -1
- package/dist/{chunk-PJAQDAMZ.cjs → chunk-KZ7QKUJS.cjs} +4 -4
- package/dist/{chunk-PJAQDAMZ.cjs.map → chunk-KZ7QKUJS.cjs.map} +1 -1
- package/dist/{chunk-A2QVQF54.cjs → chunk-M26KJKZG.cjs} +4 -4
- package/dist/{chunk-A2QVQF54.cjs.map → chunk-M26KJKZG.cjs.map} +1 -1
- package/dist/{chunk-JHYFHEHS.js → chunk-MHD5HZ4X.js} +4 -4
- package/dist/{chunk-JHYFHEHS.js.map → chunk-MHD5HZ4X.js.map} +1 -1
- package/dist/{chunk-UFYXU7KV.js → chunk-MWPPOX6F.js} +4 -4
- package/dist/{chunk-UFYXU7KV.js.map → chunk-MWPPOX6F.js.map} +1 -1
- package/dist/{chunk-KJ5BSGEO.cjs → chunk-NGPEXCC7.cjs} +11 -11
- package/dist/{chunk-KJ5BSGEO.cjs.map → chunk-NGPEXCC7.cjs.map} +1 -1
- package/dist/{chunk-T3RWXOCM.js → chunk-NU6QKULE.js} +3 -3
- package/dist/{chunk-T3RWXOCM.js.map → chunk-NU6QKULE.js.map} +1 -1
- package/dist/{chunk-BYUV3IZV.cjs → chunk-OGPJ3LRF.cjs} +4 -4
- package/dist/{chunk-BYUV3IZV.cjs.map → chunk-OGPJ3LRF.cjs.map} +1 -1
- package/dist/{chunk-DAPZPT5N.cjs → chunk-OJEXXH5D.cjs} +11 -11
- package/dist/{chunk-DAPZPT5N.cjs.map → chunk-OJEXXH5D.cjs.map} +1 -1
- package/dist/{chunk-XL7TTKHP.js → chunk-OLFTGCGD.js} +7 -7
- package/dist/{chunk-XL7TTKHP.js.map → chunk-OLFTGCGD.js.map} +1 -1
- package/dist/{chunk-BX6BTDTR.js → chunk-OQWZYKJM.js} +3 -3
- package/dist/{chunk-BX6BTDTR.js.map → chunk-OQWZYKJM.js.map} +1 -1
- package/dist/{chunk-JBB25LFB.js → chunk-OTQ72WX3.js} +3 -3
- package/dist/{chunk-JBB25LFB.js.map → chunk-OTQ72WX3.js.map} +1 -1
- package/dist/{chunk-AFKKJEV5.cjs → chunk-OZOSWBSI.cjs} +4 -4
- package/dist/{chunk-AFKKJEV5.cjs.map → chunk-OZOSWBSI.cjs.map} +1 -1
- package/dist/{chunk-KJPOFUF5.cjs → chunk-P2VTQ5AR.cjs} +10 -10
- package/dist/{chunk-KJPOFUF5.cjs.map → chunk-P2VTQ5AR.cjs.map} +1 -1
- package/dist/{chunk-QASIWBXU.cjs → chunk-P7UMS4E6.cjs} +7 -7
- package/dist/{chunk-QASIWBXU.cjs.map → chunk-P7UMS4E6.cjs.map} +1 -1
- package/dist/{chunk-QUUFKGDF.cjs → chunk-PGETZ2FP.cjs} +15 -15
- package/dist/{chunk-QUUFKGDF.cjs.map → chunk-PGETZ2FP.cjs.map} +1 -1
- package/dist/{chunk-5M2YSPJH.cjs → chunk-PNJAFZDC.cjs} +59 -59
- package/dist/{chunk-5M2YSPJH.cjs.map → chunk-PNJAFZDC.cjs.map} +1 -1
- package/dist/{chunk-KOCTIB6U.js → chunk-PS5INHGC.js} +3 -3
- package/dist/{chunk-KOCTIB6U.js.map → chunk-PS5INHGC.js.map} +1 -1
- package/dist/{chunk-Y2S6QMKU.js → chunk-PTZB2GKL.js} +3 -3
- package/dist/{chunk-Y2S6QMKU.js.map → chunk-PTZB2GKL.js.map} +1 -1
- package/dist/{chunk-NQME7MCK.js → chunk-QKKYMNR2.js} +4 -4
- package/dist/{chunk-NQME7MCK.js.map → chunk-QKKYMNR2.js.map} +1 -1
- package/dist/{chunk-GOAW2UCP.js → chunk-QNUPTRW7.js} +9 -9
- package/dist/{chunk-GOAW2UCP.js.map → chunk-QNUPTRW7.js.map} +1 -1
- package/dist/{chunk-EZKRAW2X.js → chunk-QUUBTNMH.js} +3 -3
- package/dist/{chunk-EZKRAW2X.js.map → chunk-QUUBTNMH.js.map} +1 -1
- package/dist/{chunk-T42BCIUA.js → chunk-REPZI2YO.js} +3 -3
- package/dist/{chunk-T42BCIUA.js.map → chunk-REPZI2YO.js.map} +1 -1
- package/dist/{chunk-CKD554XR.cjs → chunk-RUEEDOE3.cjs} +5 -5
- package/dist/{chunk-CKD554XR.cjs.map → chunk-RUEEDOE3.cjs.map} +1 -1
- package/dist/{chunk-RHYIFIT5.js → chunk-RZFSJD67.js} +3 -3
- package/dist/{chunk-RHYIFIT5.js.map → chunk-RZFSJD67.js.map} +1 -1
- package/dist/{chunk-DFCZPVG4.cjs → chunk-S3MKIDYG.cjs} +8 -8
- package/dist/{chunk-DFCZPVG4.cjs.map → chunk-S3MKIDYG.cjs.map} +1 -1
- package/dist/chunk-S5RVSXDV.cjs +45 -0
- package/dist/chunk-S5RVSXDV.cjs.map +1 -0
- package/dist/{chunk-4LVPQ44A.js → chunk-SAJSA4TS.js} +3 -3
- package/dist/{chunk-4LVPQ44A.js.map → chunk-SAJSA4TS.js.map} +1 -1
- package/dist/{chunk-XDFDVF2O.js → chunk-SH6B4MG5.js} +4 -4
- package/dist/{chunk-XDFDVF2O.js.map → chunk-SH6B4MG5.js.map} +1 -1
- package/dist/{chunk-5MAGWW5X.cjs → chunk-STCRP652.cjs} +11 -11
- package/dist/{chunk-5MAGWW5X.cjs.map → chunk-STCRP652.cjs.map} +1 -1
- package/dist/{chunk-3MGHTTZW.js → chunk-SVSHA7XV.js} +3 -3
- package/dist/{chunk-3MGHTTZW.js.map → chunk-SVSHA7XV.js.map} +1 -1
- package/dist/chunk-TQONQSJO.js +42 -0
- package/dist/chunk-TQONQSJO.js.map +1 -0
- package/dist/{chunk-V25Z5GR6.cjs → chunk-TU36DBH2.cjs} +9 -9
- package/dist/{chunk-V25Z5GR6.cjs.map → chunk-TU36DBH2.cjs.map} +1 -1
- package/dist/{chunk-FQ3UCZUX.cjs → chunk-U3JU6BI5.cjs} +7 -7
- package/dist/{chunk-FQ3UCZUX.cjs.map → chunk-U3JU6BI5.cjs.map} +1 -1
- package/dist/{chunk-VCO2IZOG.js → chunk-UA7E7PDS.js} +3 -3
- package/dist/{chunk-VCO2IZOG.js.map → chunk-UA7E7PDS.js.map} +1 -1
- package/dist/{chunk-I2W24RHW.js → chunk-VE6OUO7X.js} +3 -3
- package/dist/{chunk-I2W24RHW.js.map → chunk-VE6OUO7X.js.map} +1 -1
- package/dist/{chunk-STPK44AU.js → chunk-VNWJTCBQ.js} +3 -3
- package/dist/{chunk-STPK44AU.js.map → chunk-VNWJTCBQ.js.map} +1 -1
- package/dist/{chunk-ZNZZCB2M.cjs → chunk-VPIYTQCV.cjs} +9 -9
- package/dist/{chunk-ZNZZCB2M.cjs.map → chunk-VPIYTQCV.cjs.map} +1 -1
- package/dist/{chunk-DLNJLCNO.cjs → chunk-VTKXM7IE.cjs} +4 -4
- package/dist/{chunk-DLNJLCNO.cjs.map → chunk-VTKXM7IE.cjs.map} +1 -1
- package/dist/{chunk-EUUQVDXX.cjs → chunk-W4Q4UEXA.cjs} +14 -14
- package/dist/{chunk-EUUQVDXX.cjs.map → chunk-W4Q4UEXA.cjs.map} +1 -1
- package/dist/{chunk-ZVSW2KS6.js → chunk-WRYZ2752.js} +3 -3
- package/dist/{chunk-ZVSW2KS6.js.map → chunk-WRYZ2752.js.map} +1 -1
- package/dist/{chunk-U3ABLVYH.cjs → chunk-WUNWHOLA.cjs} +6 -6
- package/dist/{chunk-U3ABLVYH.cjs.map → chunk-WUNWHOLA.cjs.map} +1 -1
- package/dist/{chunk-RH43XBNV.cjs → chunk-WWJIW2IH.cjs} +4 -4
- package/dist/{chunk-RH43XBNV.cjs.map → chunk-WWJIW2IH.cjs.map} +1 -1
- package/dist/{chunk-6NXQSQ3A.cjs → chunk-X4LBUPJO.cjs} +10 -10
- package/dist/{chunk-6NXQSQ3A.cjs.map → chunk-X4LBUPJO.cjs.map} +1 -1
- package/dist/{chunk-O4PGFGUW.cjs → chunk-X732DPW4.cjs} +122 -122
- package/dist/{chunk-O4PGFGUW.cjs.map → chunk-X732DPW4.cjs.map} +1 -1
- package/dist/{chunk-4GXECTPS.cjs → chunk-XB54G7WS.cjs} +37 -3
- package/dist/chunk-XB54G7WS.cjs.map +1 -0
- package/dist/{chunk-MAMY5HTT.cjs → chunk-XCVBCY7L.cjs} +20 -20
- package/dist/{chunk-MAMY5HTT.cjs.map → chunk-XCVBCY7L.cjs.map} +1 -1
- package/dist/{chunk-BLPCYP4D.cjs → chunk-XD6GRTH2.cjs} +29 -29
- package/dist/{chunk-BLPCYP4D.cjs.map → chunk-XD6GRTH2.cjs.map} +1 -1
- package/dist/{chunk-IUFDGB5O.js → chunk-XMCIXHGH.js} +3 -3
- package/dist/{chunk-IUFDGB5O.js.map → chunk-XMCIXHGH.js.map} +1 -1
- package/dist/{chunk-KAKH2UZA.js → chunk-XO3WLK65.js} +3 -3
- package/dist/{chunk-KAKH2UZA.js.map → chunk-XO3WLK65.js.map} +1 -1
- package/dist/{chunk-DUPR6FEL.js → chunk-XPNKDFRL.js} +3 -3
- package/dist/{chunk-DUPR6FEL.js.map → chunk-XPNKDFRL.js.map} +1 -1
- package/dist/{chunk-DEZ7XSTG.cjs → chunk-XXVUHLQN.cjs} +7 -7
- package/dist/{chunk-DEZ7XSTG.cjs.map → chunk-XXVUHLQN.cjs.map} +1 -1
- package/dist/{chunk-MZPF2QGM.cjs → chunk-Y5F2OASC.cjs} +13 -13
- package/dist/{chunk-MZPF2QGM.cjs.map → chunk-Y5F2OASC.cjs.map} +1 -1
- package/dist/{chunk-3GGET5LK.cjs → chunk-YGA35Z2P.cjs} +7 -7
- package/dist/{chunk-3GGET5LK.cjs.map → chunk-YGA35Z2P.cjs.map} +1 -1
- package/dist/{chunk-GOKC4CCZ.cjs → chunk-YMHOF6WA.cjs} +8 -8
- package/dist/{chunk-GOKC4CCZ.cjs.map → chunk-YMHOF6WA.cjs.map} +1 -1
- package/dist/{chunk-OXYFTCRW.cjs → chunk-YP5T6NZD.cjs} +4 -4
- package/dist/{chunk-OXYFTCRW.cjs.map → chunk-YP5T6NZD.cjs.map} +1 -1
- package/dist/{chunk-OX2RIVN7.js → chunk-YTLTI5Q2.js} +4 -4
- package/dist/{chunk-OX2RIVN7.js.map → chunk-YTLTI5Q2.js.map} +1 -1
- package/dist/{chunk-372IIHUA.cjs → chunk-YXHX2DAK.cjs} +53 -53
- package/dist/{chunk-372IIHUA.cjs.map → chunk-YXHX2DAK.cjs.map} +1 -1
- package/dist/{chunk-ST2RE5UB.cjs → chunk-Z5KFXHDP.cjs} +6 -6
- package/dist/{chunk-ST2RE5UB.cjs.map → chunk-Z5KFXHDP.cjs.map} +1 -1
- package/dist/{chunk-4Z6ZZKIY.js → chunk-ZIUADGAR.js} +3 -3
- package/dist/{chunk-4Z6ZZKIY.js.map → chunk-ZIUADGAR.js.map} +1 -1
- package/dist/{chunk-LOTMAKUG.cjs → chunk-ZZJ4ZVYR.cjs} +11 -11
- package/dist/{chunk-LOTMAKUG.cjs.map → chunk-ZZJ4ZVYR.cjs.map} +1 -1
- package/dist/components/Alert/index.cjs +6 -6
- package/dist/components/Alert/index.js +2 -2
- package/dist/components/AlertDialog/index.cjs +5 -5
- package/dist/components/AlertDialog/index.js +4 -4
- package/dist/components/AudioPlayer/index.cjs +7 -7
- package/dist/components/AudioPlayer/index.js +2 -2
- package/dist/components/AudioRecorder/index.cjs +7 -7
- package/dist/components/AudioRecorder/index.js +2 -2
- package/dist/components/Autocomplete/index.cjs +4 -4
- package/dist/components/Autocomplete/index.js +3 -3
- package/dist/components/Avatar/index.cjs +6 -6
- package/dist/components/Avatar/index.js +2 -2
- package/dist/components/Badge/index.cjs +4 -4
- package/dist/components/Badge/index.js +2 -2
- package/dist/components/Breadcrumb/index.cjs +4 -4
- package/dist/components/Breadcrumb/index.js +2 -2
- package/dist/components/Button/index.cjs +4 -4
- package/dist/components/Button/index.js +2 -2
- package/dist/components/Card/index.cjs +16 -16
- package/dist/components/Card/index.js +2 -2
- package/dist/components/Checkbox/index.cjs +5 -5
- package/dist/components/Checkbox/index.js +2 -2
- package/dist/components/CollabStatus/index.cjs +5 -5
- package/dist/components/CollabStatus/index.js +2 -2
- package/dist/components/Collapsible/index.cjs +5 -5
- package/dist/components/Collapsible/index.js +2 -2
- package/dist/components/CountryCodeDropdown/index.cjs +5 -5
- package/dist/components/CountryCodeDropdown/index.js +2 -2
- package/dist/components/DateInput/index.cjs +4 -4
- package/dist/components/DateInput/index.js +3 -3
- package/dist/components/Dropdown/index.cjs +9 -9
- package/dist/components/Dropdown/index.js +3 -3
- package/dist/components/FloatingWindow/index.cjs +5 -5
- package/dist/components/FloatingWindow/index.js +3 -3
- package/dist/components/Input/index.cjs +4 -4
- package/dist/components/Input/index.js +2 -2
- package/dist/components/Label/index.cjs +4 -4
- package/dist/components/Label/index.js +2 -2
- package/dist/components/Markdown/index.cjs +17 -17
- package/dist/components/Markdown/index.js +8 -8
- package/dist/components/MediaEditor/index.cjs +14 -14
- package/dist/components/MediaEditor/index.js +9 -9
- package/dist/components/MediaPlayer/index.cjs +6 -6
- package/dist/components/MediaPlayer/index.js +3 -3
- package/dist/components/Modal/index.cjs +10 -10
- package/dist/components/Modal/index.js +2 -2
- package/dist/components/Pagination/index.cjs +5 -5
- package/dist/components/Pagination/index.js +2 -2
- package/dist/components/PhoneInput/index.cjs +5 -5
- package/dist/components/PhoneInput/index.js +3 -3
- package/dist/components/Progress/index.cjs +7 -7
- package/dist/components/Progress/index.js +2 -2
- package/dist/components/QuickAction/index.cjs +7 -7
- package/dist/components/QuickAction/index.js +2 -2
- package/dist/components/Radio/index.cjs +5 -5
- package/dist/components/Radio/index.js +2 -2
- package/dist/components/RecordButton/index.cjs +5 -5
- package/dist/components/RecordButton/index.js +2 -2
- package/dist/components/RichTextEditor/index.cjs +9 -9
- package/dist/components/RichTextEditor/index.js +6 -6
- package/dist/components/SchedulePicker/index.cjs +11 -11
- package/dist/components/SchedulePicker/index.js +2 -2
- package/dist/components/ScrollArea/index.cjs +4 -4
- package/dist/components/ScrollArea/index.js +2 -2
- package/dist/components/Select/index.cjs +4 -4
- package/dist/components/Select/index.js +2 -2
- package/dist/components/Separator/index.cjs +4 -4
- package/dist/components/Separator/index.js +2 -2
- package/dist/components/Sheet/index.cjs +11 -11
- package/dist/components/Sheet/index.d.cts +1 -1
- package/dist/components/Sheet/index.d.ts +1 -1
- package/dist/components/Sheet/index.js +2 -2
- package/dist/components/Skeleton/index.cjs +7 -7
- package/dist/components/Skeleton/index.js +2 -2
- package/dist/components/Slider/index.cjs +6 -6
- package/dist/components/Slider/index.js +2 -2
- package/dist/components/Spinner/index.cjs +6 -6
- package/dist/components/Spinner/index.js +2 -2
- package/dist/components/SuperChat/index.cjs +45 -45
- package/dist/components/SuperChat/index.js +8 -8
- package/dist/components/SuperChat/plugins/index.cjs +9 -9
- package/dist/components/SuperChat/plugins/index.js +3 -3
- package/dist/components/Switch/index.cjs +5 -5
- package/dist/components/Switch/index.js +2 -2
- package/dist/components/Table/index.cjs +10 -10
- package/dist/components/Table/index.js +2 -2
- package/dist/components/Tabs/index.cjs +8 -8
- package/dist/components/Tabs/index.js +2 -2
- package/dist/components/Text/index.cjs +5 -5
- package/dist/components/Text/index.d.cts +1 -1
- package/dist/components/Text/index.d.ts +1 -1
- package/dist/components/Text/index.js +2 -2
- package/dist/components/Textarea/index.cjs +4 -4
- package/dist/components/Textarea/index.js +2 -2
- package/dist/components/ThemeProvider/index.cjs +9 -9
- package/dist/components/ThemeProvider/index.js +3 -3
- package/dist/components/Toggle/index.cjs +4 -4
- package/dist/components/Toggle/index.js +2 -2
- package/dist/components/Tooltip/index.cjs +3 -3
- package/dist/components/Tooltip/index.js +2 -2
- package/dist/datavis.cjs +7 -7
- package/dist/datavis.js +3 -3
- package/dist/esheet.cjs +16 -16
- package/dist/esheet.js +13 -13
- package/dist/hooks/index.cjs +23 -11
- package/dist/hooks/index.d.cts +29 -1
- package/dist/hooks/index.d.ts +29 -1
- package/dist/hooks/index.js +1 -1
- package/dist/index.cjs +1696 -1680
- package/dist/index.d.cts +24 -3
- package/dist/index.d.ts +24 -3
- package/dist/index.js +88 -88
- package/dist/styles.css +1 -1
- package/dist/tailwind-preset.cjs +4 -4
- package/dist/tailwind-preset.js +1 -1
- package/dist/utils/index.cjs +6 -2
- package/dist/utils/index.d.cts +6 -1
- package/dist/utils/index.d.ts +6 -1
- package/dist/utils/index.js +1 -1
- package/package.json +3 -1
- package/dist/CsvBlock-2A5VEDD3.cjs +0 -15
- package/dist/CsvBlock-D6PWAJ5X.js +0 -6
- package/dist/HtmlPreviewBlock-PEHTJ6C3.js +0 -6
- package/dist/HtmlPreviewBlock-SYXCV5RH.cjs +0 -15
- package/dist/MermaidBlock-7NK3AVK2.js +0 -6
- package/dist/MermaidBlock-AFXNP5NK.cjs +0 -15
- package/dist/SurveyBlock-6KRNKFH5.cjs +0 -15
- package/dist/SurveyBlock-NNDGXGG4.js +0 -6
- package/dist/chunk-4GXECTPS.cjs.map +0 -1
- package/dist/chunk-B77UC56R.js.map +0 -1
- package/dist/chunk-F3SOEIN2.js +0 -11
- package/dist/chunk-F3SOEIN2.js.map +0 -1
- package/dist/chunk-OR5DRJCW.cjs +0 -13
- package/dist/chunk-OR5DRJCW.cjs.map +0 -1
- package/dist/chunk-T5F565OC.cjs.map +0 -1
- package/dist/chunk-ZGSC2CB2.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Select/Select.tsx"],"names":["cva","React","useClickOutside","useEscapeKey","useAnchoredPosition","jsxs","cn","jsx","createPortal"],"mappings":"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","file":"chunk-DAPZPT5N.cjs","sourcesContent":["import * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport { useEscapeKey } from '../../hooks/useEscapeKey';\nimport { useClickOutside } from '../../hooks/useClickOutside';\nimport { useAnchoredPosition } from '../../hooks/useAnchoredPosition';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface SelectOption {\n /** Unique value for the option */\n value: string;\n /** Display label for the option */\n label: string;\n /** Whether the option is disabled */\n disabled?: boolean;\n /** Optional group this option belongs to */\n group?: string;\n}\n\nexport interface SelectGroup {\n /** Group label */\n label: string;\n /** Options in this group */\n options: SelectOption[];\n}\n\n// ============================================================================\n// Variants\n// ============================================================================\n\nconst selectTriggerVariants = cva(\n [\n 'flex w-full items-center justify-between gap-2',\n 'border border-input rounded-lg',\n 'bg-background text-foreground',\n 'transition-colors duration-200',\n 'focus:outline-none focus:ring-2 focus:ring-ring focus:border-transparent',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n ],\n {\n variants: {\n size: {\n sm: 'h-8 px-3 text-sm',\n md: 'h-10 px-3 text-base',\n lg: 'h-12 px-4 text-lg',\n },\n hasError: {\n true: 'border-destructive focus:ring-destructive',\n false: '',\n },\n },\n defaultVariants: {\n size: 'md',\n hasError: false,\n },\n }\n);\n\n// ============================================================================\n// Select Component\n// ============================================================================\n\nexport interface SelectProps extends VariantProps<\n typeof selectTriggerVariants\n> {\n /** Array of options or groups */\n options: (SelectOption | SelectGroup)[];\n /** Controlled value */\n value?: string;\n /** Default value (uncontrolled) */\n defaultValue?: string;\n /** Callback when value changes */\n onValueChange?: (value: string) => void;\n /** Placeholder text */\n placeholder?: string;\n /** Whether the select is disabled */\n disabled?: boolean;\n /** Label for the select */\n label?: string;\n /** Hide the label visually */\n hideLabel?: boolean;\n /** Error message */\n error?: string;\n /** Helper text */\n helperText?: string;\n /** Enable search/filter */\n searchable?: boolean;\n /** Search placeholder */\n searchPlaceholder?: string;\n /** No results text */\n noResultsText?: string;\n /** Accessible label for the trigger (used when no `label` prop is provided) */\n 'aria-label'?: string;\n /** Additional class name */\n className?: string;\n /** ID for the select */\n id?: string;\n}\n\n/**\n * An accessible select/dropdown component with search support.\n *\n * @example\n * ```tsx\n * <Select\n * label=\"Country\"\n * placeholder=\"Select a country\"\n * options={[\n * { value: 'us', label: 'United States' },\n * { value: 'ca', label: 'Canada' },\n * { value: 'uk', label: 'United Kingdom' },\n * ]}\n * onValueChange={(value) => console.log(value)}\n * />\n * ```\n */\nfunction Select({\n options,\n value: controlledValue,\n defaultValue,\n onValueChange,\n placeholder = 'Select an option',\n disabled = false,\n label,\n hideLabel = false,\n error,\n helperText,\n size,\n hasError,\n 'aria-label': ariaLabel,\n searchable = false,\n searchPlaceholder = 'Search...',\n noResultsText = 'No results found',\n className,\n id,\n}: SelectProps) {\n const [isOpen, setIsOpen] = React.useState(false);\n const [uncontrolledValue, setUncontrolledValue] = React.useState(\n defaultValue || ''\n );\n const [searchQuery, setSearchQuery] = React.useState('');\n const [highlightedIndex, setHighlightedIndex] = React.useState(-1);\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n const searchInputRef = React.useRef<HTMLInputElement>(null);\n const listRef = React.useRef<HTMLUListElement>(null);\n const dropdownRef = React.useRef<HTMLDivElement>(null);\n const typeaheadRef = React.useRef<{ query: string; timer: number | null }>({\n query: '',\n timer: null,\n });\n\n const generatedId = React.useId();\n const selectId = id || generatedId;\n const listboxId = `${selectId}-listbox`;\n const errorId = `${selectId}-error`;\n const helperId = `${selectId}-helper`;\n\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : uncontrolledValue;\n\n // Flatten options for easy access\n const flatOptions = React.useMemo(() => {\n const result: SelectOption[] = [];\n for (const item of options) {\n if ('options' in item) {\n result.push(...item.options);\n } else {\n result.push(item);\n }\n }\n return result;\n }, [options]);\n\n // Filter options based on search query\n const filteredOptions = React.useMemo(() => {\n if (!searchQuery) return options;\n\n const query = searchQuery.toLowerCase();\n const result: (SelectOption | SelectGroup)[] = [];\n\n for (const item of options) {\n if ('options' in item) {\n const filteredGroupOptions = item.options.filter((opt) =>\n opt.label.toLowerCase().includes(query)\n );\n if (filteredGroupOptions.length > 0) {\n result.push({ ...item, options: filteredGroupOptions });\n }\n } else {\n if (item.label.toLowerCase().includes(query)) {\n result.push(item);\n }\n }\n }\n\n return result;\n }, [options, searchQuery]);\n\n // Get filtered flat options for keyboard navigation\n const filteredFlatOptions = React.useMemo(() => {\n const result: SelectOption[] = [];\n for (const item of filteredOptions) {\n if ('options' in item) {\n result.push(...item.options.filter((opt) => !opt.disabled));\n } else if (!item.disabled) {\n result.push(item);\n }\n }\n return result;\n }, [filteredOptions]);\n\n // Get selected option\n const selectedOption = flatOptions.find((opt) => opt.value === value);\n\n // Close dropdown on click outside (handles both container and portaled dropdown)\n const outsideRefs = React.useMemo(() => [containerRef, dropdownRef], []);\n useClickOutside(outsideRefs, () => setIsOpen(false), isOpen);\n\n useEscapeKey(() => {\n if (isOpen) {\n setIsOpen(false);\n triggerRef.current?.focus();\n }\n }, isOpen);\n\n // Track trigger position for portal dropdown\n const {\n anchorRef,\n floatingRef,\n style: dropdownStyle,\n } = useAnchoredPosition<HTMLButtonElement, HTMLDivElement>({\n open: isOpen,\n matchWidth: true,\n maxHeight: 300,\n });\n\n // Handle value change\n const handleValueChange = React.useCallback(\n (newValue: string) => {\n if (!isControlled) {\n setUncontrolledValue(newValue);\n }\n onValueChange?.(newValue);\n setIsOpen(false);\n setSearchQuery('');\n triggerRef.current?.focus();\n },\n [isControlled, onValueChange]\n );\n\n // Handle keyboard navigation\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n // Typeahead (native-select style): when not using the dedicated search\n // input, typing printable characters jumps to the first option whose\n // label starts with the typed string. Repeating the same key cycles\n // through matches. The buffer clears after a short pause.\n if (\n !searchable &&\n e.key.length === 1 &&\n e.key !== ' ' &&\n !e.metaKey &&\n !e.ctrlKey &&\n !e.altKey\n ) {\n e.preventDefault();\n if (!isOpen) setIsOpen(true);\n\n const hadPendingQuery = typeaheadRef.current.query !== '';\n if (typeaheadRef.current.timer !== null) {\n window.clearTimeout(typeaheadRef.current.timer);\n }\n const query = (typeaheadRef.current.query + e.key).toLowerCase();\n typeaheadRef.current.query = query;\n typeaheadRef.current.timer = window.setTimeout(() => {\n typeaheadRef.current.query = '';\n typeaheadRef.current.timer = null;\n }, 600);\n\n const len = filteredFlatOptions.length;\n if (len > 0) {\n const allSameChar = query.split('').every((c) => c === query[0]);\n const needle = allSameChar ? query[0] : query;\n const matches = (opt: SelectOption) =>\n opt.label.toLowerCase().startsWith(needle);\n\n // A fresh keystroke (or refining a multi-char query) searches from\n // the current option inclusive so typing \"car\" stays on \"Cardiology\";\n // repeating the same key cycles to the next match.\n const startInclusive = !hadPendingQuery || !allSameChar;\n const base = startInclusive\n ? Math.max(highlightedIndex, 0)\n : highlightedIndex + 1;\n\n for (let i = 0; i < len; i++) {\n const idx = (base + i) % len;\n if (matches(filteredFlatOptions[idx])) {\n setHighlightedIndex(idx);\n break;\n }\n }\n }\n return;\n }\n\n // Let Space type normally in the search input (e.g. \"new york\")\n // instead of being captured by the open/select handler below.\n if (e.key === ' ' && e.target === searchInputRef.current) {\n return;\n }\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n } else {\n setHighlightedIndex((prev) =>\n prev < filteredFlatOptions.length - 1 ? prev + 1 : 0\n );\n }\n break;\n case 'ArrowUp':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n } else {\n setHighlightedIndex((prev) =>\n prev > 0 ? prev - 1 : filteredFlatOptions.length - 1\n );\n }\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (isOpen && highlightedIndex >= 0) {\n handleValueChange(filteredFlatOptions[highlightedIndex].value);\n } else if (!isOpen) {\n setIsOpen(true);\n }\n break;\n case 'Home':\n e.preventDefault();\n setHighlightedIndex(0);\n break;\n case 'End':\n e.preventDefault();\n setHighlightedIndex(filteredFlatOptions.length - 1);\n break;\n }\n },\n [\n isOpen,\n highlightedIndex,\n filteredFlatOptions,\n handleValueChange,\n searchable,\n ]\n );\n\n // Focus search input when dropdown opens\n React.useEffect(() => {\n if (isOpen && searchable && searchInputRef.current) {\n searchInputRef.current.focus();\n }\n }, [isOpen, searchable]);\n\n // Reset highlighted index when search changes\n React.useEffect(() => {\n setHighlightedIndex(filteredFlatOptions.length > 0 ? 0 : -1);\n }, [searchQuery, filteredFlatOptions.length]);\n\n // Keep the highlighted option visible within the listbox during keyboard\n // navigation. We adjust only the list's own scrollTop instead of calling the\n // native scrollIntoView: the dropdown is portaled to <body> with\n // position: fixed, and scrollIntoView would also scroll ancestor/window,\n // yanking the whole page.\n React.useEffect(() => {\n if (!isOpen || highlightedIndex < 0) return;\n const list = listRef.current;\n const el = list?.querySelector<HTMLElement>('[data-highlighted=\"true\"]');\n if (!list || !el) return;\n const listRect = list.getBoundingClientRect();\n const elRect = el.getBoundingClientRect();\n if (elRect.top < listRect.top) {\n list.scrollTop -= listRect.top - elRect.top;\n } else if (elRect.bottom > listRect.bottom) {\n list.scrollTop += elRect.bottom - listRect.bottom;\n }\n }, [highlightedIndex, isOpen]);\n\n // Reset the typeahead buffer whenever the dropdown closes (Escape, click\n // outside, selection) so a stale query doesn't carry over on a quick reopen,\n // and clear any pending timer on unmount.\n const resetTypeahead = React.useCallback(() => {\n if (typeaheadRef.current.timer !== null) {\n window.clearTimeout(typeaheadRef.current.timer);\n typeaheadRef.current.timer = null;\n }\n typeaheadRef.current.query = '';\n }, []);\n\n React.useEffect(() => {\n if (!isOpen) resetTypeahead();\n }, [isOpen, resetTypeahead]);\n\n React.useEffect(() => resetTypeahead, [resetTypeahead]);\n\n // Build aria-describedby\n const describedByIds = [\n error ? errorId : null,\n helperText && !error ? helperId : null,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n data-slot=\"select-wrapper\"\n className={cn('flex flex-col gap-1.5', className)}\n >\n {label && (\n <label\n data-slot=\"select-label\"\n htmlFor={selectId}\n className={cn(\n 'text-foreground text-sm font-medium',\n hideLabel && 'sr-only'\n )}\n >\n {label}\n </label>\n )}\n\n <div ref={containerRef} className=\"relative\">\n {/* Trigger Button */}\n <button\n data-slot=\"select-trigger\"\n ref={(node) => {\n triggerRef.current = node;\n anchorRef.current = node;\n }}\n id={selectId}\n type=\"button\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-controls={listboxId}\n aria-invalid={hasError || !!error}\n aria-label={!label ? ariaLabel : undefined}\n aria-describedby={describedByIds || undefined}\n disabled={disabled}\n onClick={() => setIsOpen(!isOpen)}\n onKeyDown={handleKeyDown}\n className={cn(\n selectTriggerVariants({ size, hasError: hasError || !!error })\n )}\n >\n <span\n className={cn(\n 'truncate',\n !selectedOption && 'text-muted-foreground'\n )}\n >\n {selectedOption?.label || placeholder}\n </span>\n <ChevronDownIcon\n className={cn(\n 'text-muted-foreground h-4 w-4 shrink-0 transition-transform',\n isOpen && 'rotate-180'\n )}\n />\n </button>\n\n {/* Dropdown (portaled to body to avoid overflow clipping) */}\n {isOpen &&\n createPortal(\n <div\n data-slot=\"select-dropdown\"\n ref={(node) => {\n dropdownRef.current = node;\n floatingRef.current = node;\n }}\n style={dropdownStyle}\n className={cn(\n 'border-border bg-card rounded-lg border shadow-lg',\n 'flex flex-col overflow-hidden',\n 'animate-in fade-in zoom-in-95 duration-100'\n )}\n >\n {/* Search Input */}\n {searchable && (\n <div\n data-slot=\"select-search\"\n className=\"border-border border-b p-2\"\n >\n <input\n ref={searchInputRef}\n type=\"text\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={searchPlaceholder}\n className={cn(\n 'border-input bg-background w-full rounded-md border px-3 py-2 text-sm',\n 'placeholder:text-muted-foreground',\n 'focus:ring-ring focus:ring-2 focus:outline-none'\n )}\n aria-label=\"Search options\"\n />\n </div>\n )}\n\n {/* Options List */}\n <ul\n ref={listRef}\n id={listboxId}\n role=\"listbox\"\n aria-label={label || 'Options'}\n data-slot=\"select-listbox\"\n className=\"flex-1 overflow-auto p-1\"\n >\n {filteredFlatOptions.length === 0 ? (\n <li className=\"text-muted-foreground px-3 py-2 text-center text-sm\">\n {noResultsText}\n </li>\n ) : (\n filteredOptions.map((item) => {\n if ('options' in item) {\n // Render group\n return (\n <li key={`group-${item.label}`} role=\"presentation\">\n <div\n data-slot=\"select-group-label\"\n className=\"text-muted-foreground px-3 py-1.5 text-xs font-semibold tracking-wider uppercase\"\n >\n {item.label}\n </div>\n <ul role=\"group\" aria-label={item.label}>\n {item.options.map((option) => (\n <SelectOptionItem\n key={option.value}\n option={option}\n isSelected={option.value === value}\n isHighlighted={\n filteredFlatOptions[highlightedIndex]\n ?.value === option.value\n }\n onSelect={() => handleValueChange(option.value)}\n onMouseEnter={() => {\n const idx = filteredFlatOptions.findIndex(\n (o) => o.value === option.value\n );\n setHighlightedIndex(idx);\n }}\n />\n ))}\n </ul>\n </li>\n );\n }\n\n // Render single option\n return (\n <SelectOptionItem\n key={item.value}\n option={item}\n isSelected={item.value === value}\n isHighlighted={\n filteredFlatOptions[highlightedIndex]?.value ===\n item.value\n }\n onSelect={() => handleValueChange(item.value)}\n onMouseEnter={() => {\n const idx = filteredFlatOptions.findIndex(\n (o) => o.value === item.value\n );\n setHighlightedIndex(idx);\n }}\n />\n );\n })\n )}\n </ul>\n </div>,\n document.body\n )}\n </div>\n\n {/* Error Message */}\n {error && (\n <p\n id={errorId}\n data-slot=\"select-error\"\n className=\"text-destructive-700 dark:text-destructive-400 text-sm\"\n role=\"alert\"\n >\n {error}\n </p>\n )}\n\n {/* Helper Text */}\n {helperText && !error && (\n <p\n id={helperId}\n data-slot=\"select-helper\"\n className=\"text-muted-foreground text-sm\"\n >\n {helperText}\n </p>\n )}\n </div>\n );\n}\n\nSelect.displayName = 'Select';\n\n// ============================================================================\n// Select Option Item (Internal)\n// ============================================================================\n\ninterface SelectOptionItemProps {\n option: SelectOption;\n isSelected: boolean;\n isHighlighted: boolean;\n onSelect: () => void;\n onMouseEnter: () => void;\n}\n\nfunction SelectOptionItem({\n option,\n isSelected,\n isHighlighted,\n onSelect,\n onMouseEnter,\n}: SelectOptionItemProps) {\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n if (!option.disabled) {\n onSelect();\n }\n }\n };\n\n return (\n <li\n data-slot=\"select-option\"\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled}\n data-highlighted={isHighlighted}\n data-disabled={option.disabled}\n tabIndex={isHighlighted ? 0 : -1}\n onClick={option.disabled ? undefined : onSelect}\n onKeyDown={handleKeyDown}\n onMouseEnter={option.disabled ? undefined : onMouseEnter}\n className={cn(\n 'flex cursor-pointer items-center gap-2 rounded-md px-3 py-2 text-sm',\n 'transition-colors outline-none',\n isHighlighted && 'bg-muted',\n isSelected &&\n 'bg-primary-50 text-primary-900 dark:bg-primary-950 dark:text-primary-100',\n option.disabled && 'cursor-not-allowed opacity-50'\n )}\n >\n <span className=\"flex-1 truncate\">{option.label}</span>\n {isSelected && (\n <CheckIcon className=\"text-primary-800 h-4 w-4 shrink-0\" />\n )}\n </li>\n );\n}\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nfunction ChevronDownIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden=\"true\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n );\n}\n\nfunction CheckIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden=\"true\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n );\n}\n\nexport { Select, selectTriggerVariants };\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Select/Select.tsx"],"names":["cva","React","useClickOutside","useEscapeKey","useAnchoredPosition","jsxs","cn","jsx","createPortal"],"mappings":"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","file":"chunk-OJEXXH5D.cjs","sourcesContent":["import * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport { useEscapeKey } from '../../hooks/useEscapeKey';\nimport { useClickOutside } from '../../hooks/useClickOutside';\nimport { useAnchoredPosition } from '../../hooks/useAnchoredPosition';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface SelectOption {\n /** Unique value for the option */\n value: string;\n /** Display label for the option */\n label: string;\n /** Whether the option is disabled */\n disabled?: boolean;\n /** Optional group this option belongs to */\n group?: string;\n}\n\nexport interface SelectGroup {\n /** Group label */\n label: string;\n /** Options in this group */\n options: SelectOption[];\n}\n\n// ============================================================================\n// Variants\n// ============================================================================\n\nconst selectTriggerVariants = cva(\n [\n 'flex w-full items-center justify-between gap-2',\n 'border border-input rounded-lg',\n 'bg-background text-foreground',\n 'transition-colors duration-200',\n 'focus:outline-none focus:ring-2 focus:ring-ring focus:border-transparent',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n ],\n {\n variants: {\n size: {\n sm: 'h-8 px-3 text-sm',\n md: 'h-10 px-3 text-base',\n lg: 'h-12 px-4 text-lg',\n },\n hasError: {\n true: 'border-destructive focus:ring-destructive',\n false: '',\n },\n },\n defaultVariants: {\n size: 'md',\n hasError: false,\n },\n }\n);\n\n// ============================================================================\n// Select Component\n// ============================================================================\n\nexport interface SelectProps extends VariantProps<\n typeof selectTriggerVariants\n> {\n /** Array of options or groups */\n options: (SelectOption | SelectGroup)[];\n /** Controlled value */\n value?: string;\n /** Default value (uncontrolled) */\n defaultValue?: string;\n /** Callback when value changes */\n onValueChange?: (value: string) => void;\n /** Placeholder text */\n placeholder?: string;\n /** Whether the select is disabled */\n disabled?: boolean;\n /** Label for the select */\n label?: string;\n /** Hide the label visually */\n hideLabel?: boolean;\n /** Error message */\n error?: string;\n /** Helper text */\n helperText?: string;\n /** Enable search/filter */\n searchable?: boolean;\n /** Search placeholder */\n searchPlaceholder?: string;\n /** No results text */\n noResultsText?: string;\n /** Accessible label for the trigger (used when no `label` prop is provided) */\n 'aria-label'?: string;\n /** Additional class name */\n className?: string;\n /** ID for the select */\n id?: string;\n}\n\n/**\n * An accessible select/dropdown component with search support.\n *\n * @example\n * ```tsx\n * <Select\n * label=\"Country\"\n * placeholder=\"Select a country\"\n * options={[\n * { value: 'us', label: 'United States' },\n * { value: 'ca', label: 'Canada' },\n * { value: 'uk', label: 'United Kingdom' },\n * ]}\n * onValueChange={(value) => console.log(value)}\n * />\n * ```\n */\nfunction Select({\n options,\n value: controlledValue,\n defaultValue,\n onValueChange,\n placeholder = 'Select an option',\n disabled = false,\n label,\n hideLabel = false,\n error,\n helperText,\n size,\n hasError,\n 'aria-label': ariaLabel,\n searchable = false,\n searchPlaceholder = 'Search...',\n noResultsText = 'No results found',\n className,\n id,\n}: SelectProps) {\n const [isOpen, setIsOpen] = React.useState(false);\n const [uncontrolledValue, setUncontrolledValue] = React.useState(\n defaultValue || ''\n );\n const [searchQuery, setSearchQuery] = React.useState('');\n const [highlightedIndex, setHighlightedIndex] = React.useState(-1);\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n const searchInputRef = React.useRef<HTMLInputElement>(null);\n const listRef = React.useRef<HTMLUListElement>(null);\n const dropdownRef = React.useRef<HTMLDivElement>(null);\n const typeaheadRef = React.useRef<{ query: string; timer: number | null }>({\n query: '',\n timer: null,\n });\n\n const generatedId = React.useId();\n const selectId = id || generatedId;\n const listboxId = `${selectId}-listbox`;\n const errorId = `${selectId}-error`;\n const helperId = `${selectId}-helper`;\n\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : uncontrolledValue;\n\n // Flatten options for easy access\n const flatOptions = React.useMemo(() => {\n const result: SelectOption[] = [];\n for (const item of options) {\n if ('options' in item) {\n result.push(...item.options);\n } else {\n result.push(item);\n }\n }\n return result;\n }, [options]);\n\n // Filter options based on search query\n const filteredOptions = React.useMemo(() => {\n if (!searchQuery) return options;\n\n const query = searchQuery.toLowerCase();\n const result: (SelectOption | SelectGroup)[] = [];\n\n for (const item of options) {\n if ('options' in item) {\n const filteredGroupOptions = item.options.filter((opt) =>\n opt.label.toLowerCase().includes(query)\n );\n if (filteredGroupOptions.length > 0) {\n result.push({ ...item, options: filteredGroupOptions });\n }\n } else {\n if (item.label.toLowerCase().includes(query)) {\n result.push(item);\n }\n }\n }\n\n return result;\n }, [options, searchQuery]);\n\n // Get filtered flat options for keyboard navigation\n const filteredFlatOptions = React.useMemo(() => {\n const result: SelectOption[] = [];\n for (const item of filteredOptions) {\n if ('options' in item) {\n result.push(...item.options.filter((opt) => !opt.disabled));\n } else if (!item.disabled) {\n result.push(item);\n }\n }\n return result;\n }, [filteredOptions]);\n\n // Get selected option\n const selectedOption = flatOptions.find((opt) => opt.value === value);\n\n // Close dropdown on click outside (handles both container and portaled dropdown)\n const outsideRefs = React.useMemo(() => [containerRef, dropdownRef], []);\n useClickOutside(outsideRefs, () => setIsOpen(false), isOpen);\n\n useEscapeKey(() => {\n if (isOpen) {\n setIsOpen(false);\n triggerRef.current?.focus();\n }\n }, isOpen);\n\n // Track trigger position for portal dropdown\n const {\n anchorRef,\n floatingRef,\n style: dropdownStyle,\n } = useAnchoredPosition<HTMLButtonElement, HTMLDivElement>({\n open: isOpen,\n matchWidth: true,\n maxHeight: 300,\n });\n\n // Handle value change\n const handleValueChange = React.useCallback(\n (newValue: string) => {\n if (!isControlled) {\n setUncontrolledValue(newValue);\n }\n onValueChange?.(newValue);\n setIsOpen(false);\n setSearchQuery('');\n triggerRef.current?.focus();\n },\n [isControlled, onValueChange]\n );\n\n // Handle keyboard navigation\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n // Typeahead (native-select style): when not using the dedicated search\n // input, typing printable characters jumps to the first option whose\n // label starts with the typed string. Repeating the same key cycles\n // through matches. The buffer clears after a short pause.\n if (\n !searchable &&\n e.key.length === 1 &&\n e.key !== ' ' &&\n !e.metaKey &&\n !e.ctrlKey &&\n !e.altKey\n ) {\n e.preventDefault();\n if (!isOpen) setIsOpen(true);\n\n const hadPendingQuery = typeaheadRef.current.query !== '';\n if (typeaheadRef.current.timer !== null) {\n window.clearTimeout(typeaheadRef.current.timer);\n }\n const query = (typeaheadRef.current.query + e.key).toLowerCase();\n typeaheadRef.current.query = query;\n typeaheadRef.current.timer = window.setTimeout(() => {\n typeaheadRef.current.query = '';\n typeaheadRef.current.timer = null;\n }, 600);\n\n const len = filteredFlatOptions.length;\n if (len > 0) {\n const allSameChar = query.split('').every((c) => c === query[0]);\n const needle = allSameChar ? query[0] : query;\n const matches = (opt: SelectOption) =>\n opt.label.toLowerCase().startsWith(needle);\n\n // A fresh keystroke (or refining a multi-char query) searches from\n // the current option inclusive so typing \"car\" stays on \"Cardiology\";\n // repeating the same key cycles to the next match.\n const startInclusive = !hadPendingQuery || !allSameChar;\n const base = startInclusive\n ? Math.max(highlightedIndex, 0)\n : highlightedIndex + 1;\n\n for (let i = 0; i < len; i++) {\n const idx = (base + i) % len;\n if (matches(filteredFlatOptions[idx])) {\n setHighlightedIndex(idx);\n break;\n }\n }\n }\n return;\n }\n\n // Let Space type normally in the search input (e.g. \"new york\")\n // instead of being captured by the open/select handler below.\n if (e.key === ' ' && e.target === searchInputRef.current) {\n return;\n }\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n } else {\n setHighlightedIndex((prev) =>\n prev < filteredFlatOptions.length - 1 ? prev + 1 : 0\n );\n }\n break;\n case 'ArrowUp':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n } else {\n setHighlightedIndex((prev) =>\n prev > 0 ? prev - 1 : filteredFlatOptions.length - 1\n );\n }\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (isOpen && highlightedIndex >= 0) {\n handleValueChange(filteredFlatOptions[highlightedIndex].value);\n } else if (!isOpen) {\n setIsOpen(true);\n }\n break;\n case 'Home':\n e.preventDefault();\n setHighlightedIndex(0);\n break;\n case 'End':\n e.preventDefault();\n setHighlightedIndex(filteredFlatOptions.length - 1);\n break;\n }\n },\n [\n isOpen,\n highlightedIndex,\n filteredFlatOptions,\n handleValueChange,\n searchable,\n ]\n );\n\n // Focus search input when dropdown opens\n React.useEffect(() => {\n if (isOpen && searchable && searchInputRef.current) {\n searchInputRef.current.focus();\n }\n }, [isOpen, searchable]);\n\n // Reset highlighted index when search changes\n React.useEffect(() => {\n setHighlightedIndex(filteredFlatOptions.length > 0 ? 0 : -1);\n }, [searchQuery, filteredFlatOptions.length]);\n\n // Keep the highlighted option visible within the listbox during keyboard\n // navigation. We adjust only the list's own scrollTop instead of calling the\n // native scrollIntoView: the dropdown is portaled to <body> with\n // position: fixed, and scrollIntoView would also scroll ancestor/window,\n // yanking the whole page.\n React.useEffect(() => {\n if (!isOpen || highlightedIndex < 0) return;\n const list = listRef.current;\n const el = list?.querySelector<HTMLElement>('[data-highlighted=\"true\"]');\n if (!list || !el) return;\n const listRect = list.getBoundingClientRect();\n const elRect = el.getBoundingClientRect();\n if (elRect.top < listRect.top) {\n list.scrollTop -= listRect.top - elRect.top;\n } else if (elRect.bottom > listRect.bottom) {\n list.scrollTop += elRect.bottom - listRect.bottom;\n }\n }, [highlightedIndex, isOpen]);\n\n // Reset the typeahead buffer whenever the dropdown closes (Escape, click\n // outside, selection) so a stale query doesn't carry over on a quick reopen,\n // and clear any pending timer on unmount.\n const resetTypeahead = React.useCallback(() => {\n if (typeaheadRef.current.timer !== null) {\n window.clearTimeout(typeaheadRef.current.timer);\n typeaheadRef.current.timer = null;\n }\n typeaheadRef.current.query = '';\n }, []);\n\n React.useEffect(() => {\n if (!isOpen) resetTypeahead();\n }, [isOpen, resetTypeahead]);\n\n React.useEffect(() => resetTypeahead, [resetTypeahead]);\n\n // Build aria-describedby\n const describedByIds = [\n error ? errorId : null,\n helperText && !error ? helperId : null,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n data-slot=\"select-wrapper\"\n className={cn('flex flex-col gap-1.5', className)}\n >\n {label && (\n <label\n data-slot=\"select-label\"\n htmlFor={selectId}\n className={cn(\n 'text-foreground text-sm font-medium',\n hideLabel && 'sr-only'\n )}\n >\n {label}\n </label>\n )}\n\n <div ref={containerRef} className=\"relative\">\n {/* Trigger Button */}\n <button\n data-slot=\"select-trigger\"\n ref={(node) => {\n triggerRef.current = node;\n anchorRef.current = node;\n }}\n id={selectId}\n type=\"button\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-controls={listboxId}\n aria-invalid={hasError || !!error}\n aria-label={!label ? ariaLabel : undefined}\n aria-describedby={describedByIds || undefined}\n disabled={disabled}\n onClick={() => setIsOpen(!isOpen)}\n onKeyDown={handleKeyDown}\n className={cn(\n selectTriggerVariants({ size, hasError: hasError || !!error })\n )}\n >\n <span\n className={cn(\n 'truncate',\n !selectedOption && 'text-muted-foreground'\n )}\n >\n {selectedOption?.label || placeholder}\n </span>\n <ChevronDownIcon\n className={cn(\n 'text-muted-foreground h-4 w-4 shrink-0 transition-transform',\n isOpen && 'rotate-180'\n )}\n />\n </button>\n\n {/* Dropdown (portaled to body to avoid overflow clipping) */}\n {isOpen &&\n createPortal(\n <div\n data-slot=\"select-dropdown\"\n ref={(node) => {\n dropdownRef.current = node;\n floatingRef.current = node;\n }}\n style={dropdownStyle}\n className={cn(\n 'border-border bg-card rounded-lg border shadow-lg',\n 'flex flex-col overflow-hidden',\n 'animate-in fade-in zoom-in-95 duration-100'\n )}\n >\n {/* Search Input */}\n {searchable && (\n <div\n data-slot=\"select-search\"\n className=\"border-border border-b p-2\"\n >\n <input\n ref={searchInputRef}\n type=\"text\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={searchPlaceholder}\n className={cn(\n 'border-input bg-background w-full rounded-md border px-3 py-2 text-sm',\n 'placeholder:text-muted-foreground',\n 'focus:ring-ring focus:ring-2 focus:outline-none'\n )}\n aria-label=\"Search options\"\n />\n </div>\n )}\n\n {/* Options List */}\n <ul\n ref={listRef}\n id={listboxId}\n role=\"listbox\"\n aria-label={label || 'Options'}\n data-slot=\"select-listbox\"\n className=\"flex-1 overflow-auto p-1\"\n >\n {filteredFlatOptions.length === 0 ? (\n <li className=\"text-muted-foreground px-3 py-2 text-center text-sm\">\n {noResultsText}\n </li>\n ) : (\n filteredOptions.map((item) => {\n if ('options' in item) {\n // Render group\n return (\n <li key={`group-${item.label}`} role=\"presentation\">\n <div\n data-slot=\"select-group-label\"\n className=\"text-muted-foreground px-3 py-1.5 text-xs font-semibold tracking-wider uppercase\"\n >\n {item.label}\n </div>\n <ul role=\"group\" aria-label={item.label}>\n {item.options.map((option) => (\n <SelectOptionItem\n key={option.value}\n option={option}\n isSelected={option.value === value}\n isHighlighted={\n filteredFlatOptions[highlightedIndex]\n ?.value === option.value\n }\n onSelect={() => handleValueChange(option.value)}\n onMouseEnter={() => {\n const idx = filteredFlatOptions.findIndex(\n (o) => o.value === option.value\n );\n setHighlightedIndex(idx);\n }}\n />\n ))}\n </ul>\n </li>\n );\n }\n\n // Render single option\n return (\n <SelectOptionItem\n key={item.value}\n option={item}\n isSelected={item.value === value}\n isHighlighted={\n filteredFlatOptions[highlightedIndex]?.value ===\n item.value\n }\n onSelect={() => handleValueChange(item.value)}\n onMouseEnter={() => {\n const idx = filteredFlatOptions.findIndex(\n (o) => o.value === item.value\n );\n setHighlightedIndex(idx);\n }}\n />\n );\n })\n )}\n </ul>\n </div>,\n document.body\n )}\n </div>\n\n {/* Error Message */}\n {error && (\n <p\n id={errorId}\n data-slot=\"select-error\"\n className=\"text-destructive-700 dark:text-destructive-400 text-sm\"\n role=\"alert\"\n >\n {error}\n </p>\n )}\n\n {/* Helper Text */}\n {helperText && !error && (\n <p\n id={helperId}\n data-slot=\"select-helper\"\n className=\"text-muted-foreground text-sm\"\n >\n {helperText}\n </p>\n )}\n </div>\n );\n}\n\nSelect.displayName = 'Select';\n\n// ============================================================================\n// Select Option Item (Internal)\n// ============================================================================\n\ninterface SelectOptionItemProps {\n option: SelectOption;\n isSelected: boolean;\n isHighlighted: boolean;\n onSelect: () => void;\n onMouseEnter: () => void;\n}\n\nfunction SelectOptionItem({\n option,\n isSelected,\n isHighlighted,\n onSelect,\n onMouseEnter,\n}: SelectOptionItemProps) {\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n if (!option.disabled) {\n onSelect();\n }\n }\n };\n\n return (\n <li\n data-slot=\"select-option\"\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled}\n data-highlighted={isHighlighted}\n data-disabled={option.disabled}\n tabIndex={isHighlighted ? 0 : -1}\n onClick={option.disabled ? undefined : onSelect}\n onKeyDown={handleKeyDown}\n onMouseEnter={option.disabled ? undefined : onMouseEnter}\n className={cn(\n 'flex cursor-pointer items-center gap-2 rounded-md px-3 py-2 text-sm',\n 'transition-colors outline-none',\n isHighlighted && 'bg-muted',\n isSelected &&\n 'bg-primary-50 text-primary-900 dark:bg-primary-950 dark:text-primary-100',\n option.disabled && 'cursor-not-allowed opacity-50'\n )}\n >\n <span className=\"flex-1 truncate\">{option.label}</span>\n {isSelected && (\n <CheckIcon className=\"text-primary-800 h-4 w-4 shrink-0\" />\n )}\n </li>\n );\n}\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nfunction ChevronDownIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden=\"true\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n );\n}\n\nfunction CheckIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden=\"true\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n );\n}\n\nexport { Select, selectTriggerVariants };\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FenceBlock } from './chunk-
|
|
1
|
+
import { FenceBlock } from './chunk-RZFSJD67.js';
|
|
2
2
|
import { lazy, useRef, useCallback, useMemo, useState, useEffect, Suspense } from 'react';
|
|
3
3
|
import DOMPurify from 'dompurify';
|
|
4
4
|
import hljs from 'highlight.js/lib/core';
|
|
@@ -236,16 +236,16 @@ var CodeBlock = ({ code, language }) => {
|
|
|
236
236
|
) });
|
|
237
237
|
};
|
|
238
238
|
var CsvBlock = lazy(
|
|
239
|
-
() => import('./CsvBlock-
|
|
239
|
+
() => import('./CsvBlock-VTYNQ75L.js').then((m) => ({ default: m.CsvBlock }))
|
|
240
240
|
);
|
|
241
241
|
var HtmlPreviewBlock = lazy(
|
|
242
|
-
() => import('./HtmlPreviewBlock-
|
|
242
|
+
() => import('./HtmlPreviewBlock-N4PPVJLJ.js').then((m) => ({ default: m.HtmlPreviewBlock }))
|
|
243
243
|
);
|
|
244
244
|
var MermaidBlock = lazy(
|
|
245
|
-
() => import('./MermaidBlock-
|
|
245
|
+
() => import('./MermaidBlock-HUT53CRG.js').then((m) => ({ default: m.MermaidBlock }))
|
|
246
246
|
);
|
|
247
247
|
var SurveyBlock = lazy(
|
|
248
|
-
() => import('./SurveyBlock-
|
|
248
|
+
() => import('./SurveyBlock-PM3ZMWWR.js').then((m) => ({ default: m.SurveyBlock }))
|
|
249
249
|
);
|
|
250
250
|
var BlockFallback = () => /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center p-4 text-sm text-neutral-500", children: "Loading\u2026" });
|
|
251
251
|
var BLOCK_RE = /<div data-block-type="([^"]+)" data-block-id="([^"]+)" data-code="([^"]*)"([^>]*\bdata-md-fence="1"[^>]*)><\/div>/g;
|
|
@@ -323,5 +323,5 @@ var MarkdownRenderer = ({
|
|
|
323
323
|
};
|
|
324
324
|
|
|
325
325
|
export { CodeBlock, MarkdownRenderer, highlightCode, useMarkdown };
|
|
326
|
-
//# sourceMappingURL=chunk-
|
|
327
|
-
//# sourceMappingURL=chunk-
|
|
326
|
+
//# sourceMappingURL=chunk-OLFTGCGD.js.map
|
|
327
|
+
//# sourceMappingURL=chunk-OLFTGCGD.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Markdown/useMarkdown.ts","../src/components/Markdown/CodeBlock.tsx","../src/components/Markdown/MarkdownRenderer.tsx"],"names":["useMemo","jsx"],"mappings":"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","file":"chunk-XL7TTKHP.js","sourcesContent":["/** useMarkdown — converts markdown to sanitised HTML with hljs highlighting and special fence blocks. */\nimport DOMPurify from 'dompurify';\nimport hljs from 'highlight.js/lib/core';\n\nfunction escapeHtml(str: string): string {\n return str\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\nimport bash from 'highlight.js/lib/languages/bash';\nimport css from 'highlight.js/lib/languages/css';\nimport javascript from 'highlight.js/lib/languages/javascript';\nimport json from 'highlight.js/lib/languages/json';\nimport markdown from 'highlight.js/lib/languages/markdown';\nimport python from 'highlight.js/lib/languages/python';\nimport sql from 'highlight.js/lib/languages/sql';\nimport typescript from 'highlight.js/lib/languages/typescript';\nimport xml from 'highlight.js/lib/languages/xml';\nimport yaml from 'highlight.js/lib/languages/yaml';\nimport { marked, type MarkedOptions, type Tokens } from 'marked';\nimport { useCallback, useMemo, useRef } from 'react';\n\nhljs.registerLanguage('javascript', javascript);\nhljs.registerLanguage('typescript', typescript);\nhljs.registerLanguage('python', python);\nhljs.registerLanguage('json', json);\nhljs.registerLanguage('xml', xml);\nhljs.registerLanguage('html', xml);\nhljs.registerLanguage('css', css);\nhljs.registerLanguage('bash', bash);\nhljs.registerLanguage('shell', bash);\nhljs.registerLanguage('sql', sql);\nhljs.registerLanguage('yaml', yaml);\nhljs.registerLanguage('yml', yaml);\nhljs.registerLanguage('markdown', markdown);\nhljs.registerLanguage('md', markdown);\n\nconst lazyLanguages: Record<string, () => Promise<unknown>> = {\n java: () => import('highlight.js/lib/languages/java'),\n cpp: () => import('highlight.js/lib/languages/cpp'),\n 'c++': () => import('highlight.js/lib/languages/cpp'),\n c: () => import('highlight.js/lib/languages/c'),\n csharp: () => import('highlight.js/lib/languages/csharp'),\n php: () => import('highlight.js/lib/languages/php'),\n ruby: () => import('highlight.js/lib/languages/ruby'),\n go: () => import('highlight.js/lib/languages/go'),\n rust: () => import('highlight.js/lib/languages/rust'),\n perl: () => import('highlight.js/lib/languages/perl'),\n r: () => import('highlight.js/lib/languages/r'),\n makefile: () => import('highlight.js/lib/languages/makefile'),\n dockerfile: () => import('highlight.js/lib/languages/dockerfile'),\n};\n\nconst loadedLanguages = new Set<string>([\n 'javascript',\n 'typescript',\n 'python',\n 'json',\n 'xml',\n 'html',\n 'css',\n 'bash',\n 'shell',\n 'sql',\n 'yaml',\n 'yml',\n 'markdown',\n 'md',\n]);\n\nasync function ensureLanguage(lang: string): Promise<boolean> {\n const key = lang.toLowerCase();\n if (loadedLanguages.has(key)) return true;\n const loader = lazyLanguages[key];\n if (!loader) return false;\n try {\n const mod = (await loader()) as { default: unknown };\n hljs.registerLanguage(\n key,\n mod.default as Parameters<typeof hljs.registerLanguage>[1]\n );\n loadedLanguages.add(key);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function highlightCode(code: string, lang?: string): string {\n if (lang && loadedLanguages.has(lang.toLowerCase())) {\n try {\n return hljs.highlight(code, { language: lang.toLowerCase() }).value;\n } catch {\n /* fall through */\n }\n }\n try {\n const result = hljs.highlightAuto(code);\n if (result.relevance > 5) return result.value;\n } catch {\n /* fall through */\n }\n return escapeHtml(code);\n}\n\nfunction sanitise(html: string): string {\n return DOMPurify.sanitize(html, {\n ADD_ATTR: [\n 'target',\n 'rel',\n 'data-block-type',\n 'data-block-id',\n 'data-code',\n 'data-lang',\n 'data-md-fence',\n ],\n }) as string;\n}\n\n// Use globalThis to prevent duplicate DOMPurify hook registration across HMR reloads.\nconst _g = globalThis as unknown as Record<string, boolean>;\n// Guard against SSR: DOMPurify hooks operate on the DOM, so only register in the browser.\nif (typeof document !== 'undefined' && !_g.__markdownAnchorHookInstalled) {\n _g.__markdownAnchorHookInstalled = true;\n DOMPurify.addHook('afterSanitizeAttributes', (node: Element) => {\n const isAnchor =\n (typeof HTMLAnchorElement !== 'undefined' &&\n node instanceof HTMLAnchorElement) ||\n node.nodeName === 'A';\n if (isAnchor) {\n node.setAttribute('target', '_blank');\n node.setAttribute('rel', 'noopener noreferrer');\n }\n });\n}\n\nlet blockCounter = 0;\n\nfunction createRenderer() {\n const renderer = new marked.Renderer();\n\n renderer.code = function (this: unknown, token: Tokens.Code) {\n const { text: code, lang = '' } = token;\n const normalised = lang.toLowerCase().trim();\n const blockId = `block-${++blockCounter}`;\n const encodedCode = encodeURIComponent(code);\n const sentinel = 'data-md-fence=\"1\"';\n\n switch (normalised) {\n case 'mermaid':\n return `<div data-block-type=\"mermaid\" data-block-id=\"${blockId}\" data-code=\"${encodedCode}\" ${sentinel}></div>`;\n case 'csv':\n return `<div data-block-type=\"csv\" data-block-id=\"${blockId}\" data-code=\"${encodedCode}\" ${sentinel}></div>`;\n case 'survey':\n return `<div data-block-type=\"survey\" data-block-id=\"${blockId}\" data-code=\"${encodedCode}\" ${sentinel}></div>`;\n case 'html':\n return `<div data-block-type=\"html-preview\" data-block-id=\"${blockId}\" data-code=\"${encodedCode}\" ${sentinel}></div>`;\n default:\n return `<div data-block-type=\"code\" data-block-id=\"${blockId}\" data-code=\"${encodedCode}\" data-lang=\"${escapeHtml(normalised)}\" ${sentinel}></div>`;\n }\n };\n\n renderer.link = function (this: unknown, token: Tokens.Link) {\n const { href, title, tokens } = token;\n const text =\n this && typeof (this as Record<string, unknown>).parser === 'object'\n ? (\n this as {\n parser: { parseInline: (t: Tokens.Link['tokens']) => string };\n }\n ).parser.parseInline(tokens)\n : token.text;\n const titleAttr = title ? ` title=\"${escapeHtml(title)}\"` : '';\n return `<a href=\"${escapeHtml(href)}\" target=\"_blank\" rel=\"noopener noreferrer\"${titleAttr}>${text}</a>`;\n };\n\n renderer.table = function (this: unknown, token: Tokens.Table) {\n const headerCells = token.header\n .map((cell) => {\n const content =\n this && typeof (this as Record<string, unknown>).parser === 'object'\n ? (\n this as {\n parser: {\n parseInline: (t: Tokens.TableCell['tokens']) => string;\n };\n }\n ).parser.parseInline(cell.tokens)\n : cell.text;\n return `<th>${content}</th>`;\n })\n .join('');\n\n const bodyRows = token.rows\n .map((row) => {\n const cells = row\n .map((cell) => {\n const content =\n this &&\n typeof (this as Record<string, unknown>).parser === 'object'\n ? (\n this as {\n parser: {\n parseInline: (t: Tokens.TableCell['tokens']) => string;\n };\n }\n ).parser.parseInline(cell.tokens)\n : cell.text;\n return `<td>${content}</td>`;\n })\n .join('');\n return `<tr>${cells}</tr>`;\n })\n .join('');\n\n return `<div class=\"overflow-x-auto\"><table class=\"min-w-full divide-y divide-neutral-200 dark:divide-neutral-700\"><thead><tr>${headerCells}</tr></thead><tbody class=\"divide-y divide-neutral-200 dark:divide-neutral-700\">${bodyRows}</tbody></table></div>`;\n };\n\n return renderer;\n}\n\nfunction makeMarkedOptions(): MarkedOptions {\n return { gfm: true, breaks: true, renderer: createRenderer() };\n}\n\nconst CACHE_MAX = 100;\nconst renderCache = new Map<string, string>();\nfunction cacheSet(key: string, value: string) {\n if (renderCache.size >= CACHE_MAX) {\n renderCache.delete(renderCache.keys().next().value as string);\n }\n renderCache.set(key, value);\n}\n\nexport interface UseMarkdownResult {\n /** Render markdown text to sanitised HTML string */\n render: (text: string, cacheKey?: string) => string;\n /** Async-render that lazy-loads needed languages first */\n renderAsync: (text: string, cacheKey?: string) => Promise<string>;\n /** Clear the render cache */\n clearCache: () => void;\n}\n\nexport function useMarkdown(): UseMarkdownResult {\n const cacheRef = useRef(renderCache);\n\n const render = useCallback((text: string, cacheKey?: string): string => {\n if (!text) return '';\n const key = cacheKey ?? text;\n const cached = cacheRef.current.get(key);\n if (cached) return cached;\n\n const raw = marked.parse(text, {\n ...makeMarkedOptions(),\n async: false,\n }) as string;\n const clean = sanitise(raw);\n cacheSet(key, clean);\n return clean;\n }, []);\n\n const renderAsync = useCallback(\n async (text: string, cacheKey?: string): Promise<string> => {\n if (!text) return '';\n const key = cacheKey ?? text;\n const cached = cacheRef.current.get(key);\n if (cached) return cached;\n\n // Allow `+`, `-`, `.` in language identifiers (c++, objective-c, bash-session, etc.)\n const fenceRegex = /^```([\\w+\\-.]+)\\s*$/gm;\n let match: RegExpExecArray | null;\n const langs: string[] = [];\n while ((match = fenceRegex.exec(text)) !== null) {\n langs.push(match[1]);\n }\n await Promise.all(langs.map((l) => ensureLanguage(l)));\n\n const raw = await marked.parse(text, makeMarkedOptions());\n const clean = sanitise(raw);\n cacheSet(key, clean);\n return clean;\n },\n []\n );\n\n const clearCache = useCallback(() => {\n cacheRef.current.clear();\n }, []);\n\n return useMemo(\n () => ({ render, renderAsync, clearCache }),\n [render, renderAsync, clearCache]\n );\n}\n","/**\n * CodeBlock — Renders a syntax-highlighted code fence using FenceBlock.\n *\n * Used by `MarkdownRenderer` for plain (non-special) fenced code blocks.\n * Highlighting is performed synchronously via the `highlightCode` helper from\n * `useMarkdown`; if the language was not pre-registered with highlight.js the\n * helper falls back to escaped raw text.\n */\nimport React, { useMemo } from 'react';\n\nimport { FenceBlock } from './FenceBlock';\nimport { highlightCode } from './useMarkdown';\n\ninterface CodeBlockProps {\n code: string;\n language?: string;\n}\n\nexport const CodeBlock: React.FC<CodeBlockProps> = ({ code, language }) => {\n const html = useMemo(() => highlightCode(code, language), [code, language]);\n\n return (\n <FenceBlock code={code} language={language}>\n {/* Focusable so keyboard users can horizontally scroll long lines\n (axe: scrollable-region-focusable). */}\n <pre\n className=\"m-0 overflow-x-auto !bg-transparent p-3 text-sm\"\n // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex -- scrollable code needs keyboard focus\n tabIndex={0}\n role=\"region\"\n aria-label={language ? `${language} code` : 'Code'}\n >\n <code\n className=\"hljs bg-transparent p-0\"\n dangerouslySetInnerHTML={{ __html: html }}\n />\n </pre>\n </FenceBlock>\n );\n};\n","/**\n * MarkdownRenderer — renders markdown with React components for special fence blocks.\n */\nimport React, { Suspense, lazy, useEffect, useState } from 'react';\n\nimport './styles.css';\nimport { CodeBlock } from './CodeBlock';\nimport { useMarkdown } from './useMarkdown';\n\n// Block components are lazy-loaded so optional peer deps (papaparse, js-yaml, mermaid)\n// aren't bundled unless actually rendered.\nconst CsvBlock = lazy(() =>\n import('./CsvBlock').then((m) => ({ default: m.CsvBlock }))\n);\nconst HtmlPreviewBlock = lazy(() =>\n import('./HtmlPreviewBlock').then((m) => ({ default: m.HtmlPreviewBlock }))\n);\nconst MermaidBlock = lazy(() =>\n import('./MermaidBlock').then((m) => ({ default: m.MermaidBlock }))\n);\nconst SurveyBlock = lazy(() =>\n import('./SurveyBlock').then((m) => ({ default: m.SurveyBlock }))\n);\n\nconst BlockFallback: React.FC = () => (\n <div className=\"flex items-center justify-center p-4 text-sm text-neutral-500\">\n Loading…\n </div>\n);\n\nexport interface MarkdownRendererProps {\n /** Raw markdown text */\n text: string;\n /** Cache key (e.g., message._id + revisionNumber) */\n cacheKey?: string;\n /** Additional CSS classes */\n className?: string;\n /** Whether the message is still streaming (may have incomplete blocks) */\n streaming?: boolean;\n}\n\n// Matches fence block markers emitted by useMarkdown (sentinel data-md-fence prevents raw-HTML injection)\nconst BLOCK_RE =\n /<div data-block-type=\"([^\"]+)\" data-block-id=\"([^\"]+)\" data-code=\"([^\"]*)\"([^>]*\\bdata-md-fence=\"1\"[^>]*)><\\/div>/g;\n\ninterface HtmlSegment {\n html: string;\n}\ninterface BlockSegment {\n type: string;\n id: string;\n code: string;\n lang?: string;\n}\ntype Segment = HtmlSegment | BlockSegment;\n\nfunction splitHtml(html: string): Segment[] {\n const segments: Segment[] = [];\n let last = 0;\n for (const m of html.matchAll(BLOCK_RE)) {\n if (m.index > last) segments.push({ html: html.slice(last, m.index) });\n const langMatch = m[4]?.match(/data-lang=\"([^\"]*)\"/)?.[1];\n segments.push({\n type: m[1],\n id: m[2],\n code: (() => {\n try {\n return decodeURIComponent(m[3]);\n } catch {\n return m[3];\n }\n })(),\n lang: langMatch ?? undefined,\n });\n last = m.index + m[0].length;\n }\n if (last < html.length) segments.push({ html: html.slice(last) });\n return segments;\n}\n\nfunction renderBlock(seg: BlockSegment): React.ReactNode {\n const wrap = (node: React.ReactNode) => (\n <Suspense key={seg.id} fallback={<BlockFallback />}>\n {node}\n </Suspense>\n );\n switch (seg.type) {\n case 'mermaid':\n return wrap(<MermaidBlock code={seg.code} id={seg.id} />);\n case 'csv':\n return wrap(<CsvBlock code={seg.code} id={seg.id} />);\n case 'survey':\n return wrap(<SurveyBlock code={seg.code} id={seg.id} />);\n case 'html-preview':\n return wrap(<HtmlPreviewBlock code={seg.code} id={seg.id} />);\n case 'code':\n return wrap(\n <CodeBlock code={seg.code} language={seg.lang || undefined} />\n );\n default:\n return null;\n }\n}\n\nexport const MarkdownRenderer: React.FC<MarkdownRendererProps> = ({\n text,\n cacheKey,\n className = '',\n streaming = false,\n}) => {\n const { render, renderAsync } = useMarkdown();\n const [html, setHtml] = useState('');\n\n useEffect(() => {\n let cancelled = false;\n\n // While streaming, append text length to the cache key so each delta\n // produces a fresh render rather than a stale hit on the messageId.\n const effectiveKey = streaming\n ? cacheKey\n ? `${cacheKey}::${text.length}`\n : undefined\n : cacheKey;\n\n async function doRender() {\n const rendered = await renderAsync(text, effectiveKey);\n if (!cancelled) setHtml(rendered);\n }\n\n if (streaming) {\n setHtml(render(text, effectiveKey));\n } else {\n void doRender();\n }\n\n return () => {\n cancelled = true;\n };\n }, [text, cacheKey, streaming, render, renderAsync]);\n\n const segments = splitHtml(html);\n const proseClass = `md-prose ${className}`.trim();\n\n return (\n <div className={proseClass}>\n {segments.map((seg, i) =>\n 'html' in seg ? (\n <div key={i} dangerouslySetInnerHTML={{ __html: seg.html }} />\n ) : (\n renderBlock(seg)\n )\n )}\n </div>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Markdown/useMarkdown.ts","../src/components/Markdown/CodeBlock.tsx","../src/components/Markdown/MarkdownRenderer.tsx"],"names":["useMemo","jsx"],"mappings":"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","file":"chunk-OLFTGCGD.js","sourcesContent":["/** useMarkdown — converts markdown to sanitised HTML with hljs highlighting and special fence blocks. */\nimport DOMPurify from 'dompurify';\nimport hljs from 'highlight.js/lib/core';\n\nfunction escapeHtml(str: string): string {\n return str\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\nimport bash from 'highlight.js/lib/languages/bash';\nimport css from 'highlight.js/lib/languages/css';\nimport javascript from 'highlight.js/lib/languages/javascript';\nimport json from 'highlight.js/lib/languages/json';\nimport markdown from 'highlight.js/lib/languages/markdown';\nimport python from 'highlight.js/lib/languages/python';\nimport sql from 'highlight.js/lib/languages/sql';\nimport typescript from 'highlight.js/lib/languages/typescript';\nimport xml from 'highlight.js/lib/languages/xml';\nimport yaml from 'highlight.js/lib/languages/yaml';\nimport { marked, type MarkedOptions, type Tokens } from 'marked';\nimport { useCallback, useMemo, useRef } from 'react';\n\nhljs.registerLanguage('javascript', javascript);\nhljs.registerLanguage('typescript', typescript);\nhljs.registerLanguage('python', python);\nhljs.registerLanguage('json', json);\nhljs.registerLanguage('xml', xml);\nhljs.registerLanguage('html', xml);\nhljs.registerLanguage('css', css);\nhljs.registerLanguage('bash', bash);\nhljs.registerLanguage('shell', bash);\nhljs.registerLanguage('sql', sql);\nhljs.registerLanguage('yaml', yaml);\nhljs.registerLanguage('yml', yaml);\nhljs.registerLanguage('markdown', markdown);\nhljs.registerLanguage('md', markdown);\n\nconst lazyLanguages: Record<string, () => Promise<unknown>> = {\n java: () => import('highlight.js/lib/languages/java'),\n cpp: () => import('highlight.js/lib/languages/cpp'),\n 'c++': () => import('highlight.js/lib/languages/cpp'),\n c: () => import('highlight.js/lib/languages/c'),\n csharp: () => import('highlight.js/lib/languages/csharp'),\n php: () => import('highlight.js/lib/languages/php'),\n ruby: () => import('highlight.js/lib/languages/ruby'),\n go: () => import('highlight.js/lib/languages/go'),\n rust: () => import('highlight.js/lib/languages/rust'),\n perl: () => import('highlight.js/lib/languages/perl'),\n r: () => import('highlight.js/lib/languages/r'),\n makefile: () => import('highlight.js/lib/languages/makefile'),\n dockerfile: () => import('highlight.js/lib/languages/dockerfile'),\n};\n\nconst loadedLanguages = new Set<string>([\n 'javascript',\n 'typescript',\n 'python',\n 'json',\n 'xml',\n 'html',\n 'css',\n 'bash',\n 'shell',\n 'sql',\n 'yaml',\n 'yml',\n 'markdown',\n 'md',\n]);\n\nasync function ensureLanguage(lang: string): Promise<boolean> {\n const key = lang.toLowerCase();\n if (loadedLanguages.has(key)) return true;\n const loader = lazyLanguages[key];\n if (!loader) return false;\n try {\n const mod = (await loader()) as { default: unknown };\n hljs.registerLanguage(\n key,\n mod.default as Parameters<typeof hljs.registerLanguage>[1]\n );\n loadedLanguages.add(key);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function highlightCode(code: string, lang?: string): string {\n if (lang && loadedLanguages.has(lang.toLowerCase())) {\n try {\n return hljs.highlight(code, { language: lang.toLowerCase() }).value;\n } catch {\n /* fall through */\n }\n }\n try {\n const result = hljs.highlightAuto(code);\n if (result.relevance > 5) return result.value;\n } catch {\n /* fall through */\n }\n return escapeHtml(code);\n}\n\nfunction sanitise(html: string): string {\n return DOMPurify.sanitize(html, {\n ADD_ATTR: [\n 'target',\n 'rel',\n 'data-block-type',\n 'data-block-id',\n 'data-code',\n 'data-lang',\n 'data-md-fence',\n ],\n }) as string;\n}\n\n// Use globalThis to prevent duplicate DOMPurify hook registration across HMR reloads.\nconst _g = globalThis as unknown as Record<string, boolean>;\n// Guard against SSR: DOMPurify hooks operate on the DOM, so only register in the browser.\nif (typeof document !== 'undefined' && !_g.__markdownAnchorHookInstalled) {\n _g.__markdownAnchorHookInstalled = true;\n DOMPurify.addHook('afterSanitizeAttributes', (node: Element) => {\n const isAnchor =\n (typeof HTMLAnchorElement !== 'undefined' &&\n node instanceof HTMLAnchorElement) ||\n node.nodeName === 'A';\n if (isAnchor) {\n node.setAttribute('target', '_blank');\n node.setAttribute('rel', 'noopener noreferrer');\n }\n });\n}\n\nlet blockCounter = 0;\n\nfunction createRenderer() {\n const renderer = new marked.Renderer();\n\n renderer.code = function (this: unknown, token: Tokens.Code) {\n const { text: code, lang = '' } = token;\n const normalised = lang.toLowerCase().trim();\n const blockId = `block-${++blockCounter}`;\n const encodedCode = encodeURIComponent(code);\n const sentinel = 'data-md-fence=\"1\"';\n\n switch (normalised) {\n case 'mermaid':\n return `<div data-block-type=\"mermaid\" data-block-id=\"${blockId}\" data-code=\"${encodedCode}\" ${sentinel}></div>`;\n case 'csv':\n return `<div data-block-type=\"csv\" data-block-id=\"${blockId}\" data-code=\"${encodedCode}\" ${sentinel}></div>`;\n case 'survey':\n return `<div data-block-type=\"survey\" data-block-id=\"${blockId}\" data-code=\"${encodedCode}\" ${sentinel}></div>`;\n case 'html':\n return `<div data-block-type=\"html-preview\" data-block-id=\"${blockId}\" data-code=\"${encodedCode}\" ${sentinel}></div>`;\n default:\n return `<div data-block-type=\"code\" data-block-id=\"${blockId}\" data-code=\"${encodedCode}\" data-lang=\"${escapeHtml(normalised)}\" ${sentinel}></div>`;\n }\n };\n\n renderer.link = function (this: unknown, token: Tokens.Link) {\n const { href, title, tokens } = token;\n const text =\n this && typeof (this as Record<string, unknown>).parser === 'object'\n ? (\n this as {\n parser: { parseInline: (t: Tokens.Link['tokens']) => string };\n }\n ).parser.parseInline(tokens)\n : token.text;\n const titleAttr = title ? ` title=\"${escapeHtml(title)}\"` : '';\n return `<a href=\"${escapeHtml(href)}\" target=\"_blank\" rel=\"noopener noreferrer\"${titleAttr}>${text}</a>`;\n };\n\n renderer.table = function (this: unknown, token: Tokens.Table) {\n const headerCells = token.header\n .map((cell) => {\n const content =\n this && typeof (this as Record<string, unknown>).parser === 'object'\n ? (\n this as {\n parser: {\n parseInline: (t: Tokens.TableCell['tokens']) => string;\n };\n }\n ).parser.parseInline(cell.tokens)\n : cell.text;\n return `<th>${content}</th>`;\n })\n .join('');\n\n const bodyRows = token.rows\n .map((row) => {\n const cells = row\n .map((cell) => {\n const content =\n this &&\n typeof (this as Record<string, unknown>).parser === 'object'\n ? (\n this as {\n parser: {\n parseInline: (t: Tokens.TableCell['tokens']) => string;\n };\n }\n ).parser.parseInline(cell.tokens)\n : cell.text;\n return `<td>${content}</td>`;\n })\n .join('');\n return `<tr>${cells}</tr>`;\n })\n .join('');\n\n return `<div class=\"overflow-x-auto\"><table class=\"min-w-full divide-y divide-neutral-200 dark:divide-neutral-700\"><thead><tr>${headerCells}</tr></thead><tbody class=\"divide-y divide-neutral-200 dark:divide-neutral-700\">${bodyRows}</tbody></table></div>`;\n };\n\n return renderer;\n}\n\nfunction makeMarkedOptions(): MarkedOptions {\n return { gfm: true, breaks: true, renderer: createRenderer() };\n}\n\nconst CACHE_MAX = 100;\nconst renderCache = new Map<string, string>();\nfunction cacheSet(key: string, value: string) {\n if (renderCache.size >= CACHE_MAX) {\n renderCache.delete(renderCache.keys().next().value as string);\n }\n renderCache.set(key, value);\n}\n\nexport interface UseMarkdownResult {\n /** Render markdown text to sanitised HTML string */\n render: (text: string, cacheKey?: string) => string;\n /** Async-render that lazy-loads needed languages first */\n renderAsync: (text: string, cacheKey?: string) => Promise<string>;\n /** Clear the render cache */\n clearCache: () => void;\n}\n\nexport function useMarkdown(): UseMarkdownResult {\n const cacheRef = useRef(renderCache);\n\n const render = useCallback((text: string, cacheKey?: string): string => {\n if (!text) return '';\n const key = cacheKey ?? text;\n const cached = cacheRef.current.get(key);\n if (cached) return cached;\n\n const raw = marked.parse(text, {\n ...makeMarkedOptions(),\n async: false,\n }) as string;\n const clean = sanitise(raw);\n cacheSet(key, clean);\n return clean;\n }, []);\n\n const renderAsync = useCallback(\n async (text: string, cacheKey?: string): Promise<string> => {\n if (!text) return '';\n const key = cacheKey ?? text;\n const cached = cacheRef.current.get(key);\n if (cached) return cached;\n\n // Allow `+`, `-`, `.` in language identifiers (c++, objective-c, bash-session, etc.)\n const fenceRegex = /^```([\\w+\\-.]+)\\s*$/gm;\n let match: RegExpExecArray | null;\n const langs: string[] = [];\n while ((match = fenceRegex.exec(text)) !== null) {\n langs.push(match[1]);\n }\n await Promise.all(langs.map((l) => ensureLanguage(l)));\n\n const raw = await marked.parse(text, makeMarkedOptions());\n const clean = sanitise(raw);\n cacheSet(key, clean);\n return clean;\n },\n []\n );\n\n const clearCache = useCallback(() => {\n cacheRef.current.clear();\n }, []);\n\n return useMemo(\n () => ({ render, renderAsync, clearCache }),\n [render, renderAsync, clearCache]\n );\n}\n","/**\n * CodeBlock — Renders a syntax-highlighted code fence using FenceBlock.\n *\n * Used by `MarkdownRenderer` for plain (non-special) fenced code blocks.\n * Highlighting is performed synchronously via the `highlightCode` helper from\n * `useMarkdown`; if the language was not pre-registered with highlight.js the\n * helper falls back to escaped raw text.\n */\nimport React, { useMemo } from 'react';\n\nimport { FenceBlock } from './FenceBlock';\nimport { highlightCode } from './useMarkdown';\n\ninterface CodeBlockProps {\n code: string;\n language?: string;\n}\n\nexport const CodeBlock: React.FC<CodeBlockProps> = ({ code, language }) => {\n const html = useMemo(() => highlightCode(code, language), [code, language]);\n\n return (\n <FenceBlock code={code} language={language}>\n {/* Focusable so keyboard users can horizontally scroll long lines\n (axe: scrollable-region-focusable). */}\n <pre\n className=\"m-0 overflow-x-auto !bg-transparent p-3 text-sm\"\n // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex -- scrollable code needs keyboard focus\n tabIndex={0}\n role=\"region\"\n aria-label={language ? `${language} code` : 'Code'}\n >\n <code\n className=\"hljs bg-transparent p-0\"\n dangerouslySetInnerHTML={{ __html: html }}\n />\n </pre>\n </FenceBlock>\n );\n};\n","/**\n * MarkdownRenderer — renders markdown with React components for special fence blocks.\n */\nimport React, { Suspense, lazy, useEffect, useState } from 'react';\n\nimport './styles.css';\nimport { CodeBlock } from './CodeBlock';\nimport { useMarkdown } from './useMarkdown';\n\n// Block components are lazy-loaded so optional peer deps (papaparse, js-yaml, mermaid)\n// aren't bundled unless actually rendered.\nconst CsvBlock = lazy(() =>\n import('./CsvBlock').then((m) => ({ default: m.CsvBlock }))\n);\nconst HtmlPreviewBlock = lazy(() =>\n import('./HtmlPreviewBlock').then((m) => ({ default: m.HtmlPreviewBlock }))\n);\nconst MermaidBlock = lazy(() =>\n import('./MermaidBlock').then((m) => ({ default: m.MermaidBlock }))\n);\nconst SurveyBlock = lazy(() =>\n import('./SurveyBlock').then((m) => ({ default: m.SurveyBlock }))\n);\n\nconst BlockFallback: React.FC = () => (\n <div className=\"flex items-center justify-center p-4 text-sm text-neutral-500\">\n Loading…\n </div>\n);\n\nexport interface MarkdownRendererProps {\n /** Raw markdown text */\n text: string;\n /** Cache key (e.g., message._id + revisionNumber) */\n cacheKey?: string;\n /** Additional CSS classes */\n className?: string;\n /** Whether the message is still streaming (may have incomplete blocks) */\n streaming?: boolean;\n}\n\n// Matches fence block markers emitted by useMarkdown (sentinel data-md-fence prevents raw-HTML injection)\nconst BLOCK_RE =\n /<div data-block-type=\"([^\"]+)\" data-block-id=\"([^\"]+)\" data-code=\"([^\"]*)\"([^>]*\\bdata-md-fence=\"1\"[^>]*)><\\/div>/g;\n\ninterface HtmlSegment {\n html: string;\n}\ninterface BlockSegment {\n type: string;\n id: string;\n code: string;\n lang?: string;\n}\ntype Segment = HtmlSegment | BlockSegment;\n\nfunction splitHtml(html: string): Segment[] {\n const segments: Segment[] = [];\n let last = 0;\n for (const m of html.matchAll(BLOCK_RE)) {\n if (m.index > last) segments.push({ html: html.slice(last, m.index) });\n const langMatch = m[4]?.match(/data-lang=\"([^\"]*)\"/)?.[1];\n segments.push({\n type: m[1],\n id: m[2],\n code: (() => {\n try {\n return decodeURIComponent(m[3]);\n } catch {\n return m[3];\n }\n })(),\n lang: langMatch ?? undefined,\n });\n last = m.index + m[0].length;\n }\n if (last < html.length) segments.push({ html: html.slice(last) });\n return segments;\n}\n\nfunction renderBlock(seg: BlockSegment): React.ReactNode {\n const wrap = (node: React.ReactNode) => (\n <Suspense key={seg.id} fallback={<BlockFallback />}>\n {node}\n </Suspense>\n );\n switch (seg.type) {\n case 'mermaid':\n return wrap(<MermaidBlock code={seg.code} id={seg.id} />);\n case 'csv':\n return wrap(<CsvBlock code={seg.code} id={seg.id} />);\n case 'survey':\n return wrap(<SurveyBlock code={seg.code} id={seg.id} />);\n case 'html-preview':\n return wrap(<HtmlPreviewBlock code={seg.code} id={seg.id} />);\n case 'code':\n return wrap(\n <CodeBlock code={seg.code} language={seg.lang || undefined} />\n );\n default:\n return null;\n }\n}\n\nexport const MarkdownRenderer: React.FC<MarkdownRendererProps> = ({\n text,\n cacheKey,\n className = '',\n streaming = false,\n}) => {\n const { render, renderAsync } = useMarkdown();\n const [html, setHtml] = useState('');\n\n useEffect(() => {\n let cancelled = false;\n\n // While streaming, append text length to the cache key so each delta\n // produces a fresh render rather than a stale hit on the messageId.\n const effectiveKey = streaming\n ? cacheKey\n ? `${cacheKey}::${text.length}`\n : undefined\n : cacheKey;\n\n async function doRender() {\n const rendered = await renderAsync(text, effectiveKey);\n if (!cancelled) setHtml(rendered);\n }\n\n if (streaming) {\n setHtml(render(text, effectiveKey));\n } else {\n void doRender();\n }\n\n return () => {\n cancelled = true;\n };\n }, [text, cacheKey, streaming, render, renderAsync]);\n\n const segments = splitHtml(html);\n const proseClass = `md-prose ${className}`.trim();\n\n return (\n <div className={proseClass}>\n {segments.map((seg, i) =>\n 'html' in seg ? (\n <div key={i} dangerouslySetInnerHTML={{ __html: seg.html }} />\n ) : (\n renderBlock(seg)\n )\n )}\n </div>\n );\n};\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { cn } from './chunk-
|
|
1
|
+
import { cn } from './chunk-TQONQSJO.js';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { cva } from 'class-variance-authority';
|
|
4
4
|
import { jsx } from 'react/jsx-runtime';
|
|
@@ -30,5 +30,5 @@ var Separator = React.forwardRef(
|
|
|
30
30
|
Separator.displayName = "Separator";
|
|
31
31
|
|
|
32
32
|
export { Separator, separatorVariants };
|
|
33
|
-
//# sourceMappingURL=chunk-
|
|
34
|
-
//# sourceMappingURL=chunk-
|
|
33
|
+
//# sourceMappingURL=chunk-OQWZYKJM.js.map
|
|
34
|
+
//# sourceMappingURL=chunk-OQWZYKJM.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Separator/Separator.tsx"],"names":[],"mappings":";;;;;AAIA,IAAM,iBAAA,GAAoB,IAAI,oBAAA,EAAsB;AAAA,EAClD,QAAA,EAAU;AAAA,IACR,WAAA,EAAa;AAAA,MACX,UAAA,EAAY,aAAA;AAAA,MACZ,QAAA,EAAU;AAAA;AACZ,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,WAAA,EAAa;AAAA;AAEjB,CAAC;AAuBD,IAAM,SAAA,GAAkB,KAAA,CAAA,UAAA;AAAA,EACtB,CACE,EAAE,SAAA,EAAW,WAAA,GAAc,YAAA,EAAc,aAAa,IAAA,EAAM,GAAG,KAAA,EAAM,EACrE,GAAA,qBAEA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,WAAA,EAAU,WAAA;AAAA,MACV,IAAA,EAAM,aAAa,MAAA,GAAS,WAAA;AAAA,MAC5B,kBAAA,EAAkB,UAAA,GAAa,MAAA,GAAa,WAAA,IAAe,YAAA;AAAA,MAC3D,WAAW,EAAA,CAAG,iBAAA,CAAkB,EAAE,WAAA,EAAa,GAAG,SAAS,CAAA;AAAA,MAC1D,GAAG;AAAA;AAAA;AAGV;AAEA,SAAA,CAAU,WAAA,GAAc,WAAA","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/Separator/Separator.tsx"],"names":[],"mappings":";;;;;AAIA,IAAM,iBAAA,GAAoB,IAAI,oBAAA,EAAsB;AAAA,EAClD,QAAA,EAAU;AAAA,IACR,WAAA,EAAa;AAAA,MACX,UAAA,EAAY,aAAA;AAAA,MACZ,QAAA,EAAU;AAAA;AACZ,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,WAAA,EAAa;AAAA;AAEjB,CAAC;AAuBD,IAAM,SAAA,GAAkB,KAAA,CAAA,UAAA;AAAA,EACtB,CACE,EAAE,SAAA,EAAW,WAAA,GAAc,YAAA,EAAc,aAAa,IAAA,EAAM,GAAG,KAAA,EAAM,EACrE,GAAA,qBAEA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,WAAA,EAAU,WAAA;AAAA,MACV,IAAA,EAAM,aAAa,MAAA,GAAS,WAAA;AAAA,MAC5B,kBAAA,EAAkB,UAAA,GAAa,MAAA,GAAa,WAAA,IAAe,YAAA;AAAA,MAC3D,WAAW,EAAA,CAAG,iBAAA,CAAkB,EAAE,WAAA,EAAa,GAAG,SAAS,CAAA;AAAA,MAC1D,GAAG;AAAA;AAAA;AAGV;AAEA,SAAA,CAAU,WAAA,GAAc,WAAA","file":"chunk-OQWZYKJM.js","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\nconst separatorVariants = cva('shrink-0 bg-border', {\n variants: {\n orientation: {\n horizontal: 'h-px w-full',\n vertical: 'h-full w-px',\n },\n },\n defaultVariants: {\n orientation: 'horizontal',\n },\n});\n\nexport interface SeparatorProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof separatorVariants> {\n /**\n * Whether the separator is purely decorative. When `true` (default) the\n * separator is hidden from assistive technologies. Set to `false` when the\n * separator conveys meaningful structure.\n */\n decorative?: boolean;\n}\n\n/**\n * A visual or semantic divider between content.\n *\n * @example\n * ```tsx\n * <Separator />\n * <Separator orientation=\"vertical\" />\n * ```\n */\nconst Separator = React.forwardRef<HTMLDivElement, SeparatorProps>(\n (\n { className, orientation = 'horizontal', decorative = true, ...props },\n ref\n ) => (\n <div\n ref={ref}\n data-slot=\"separator\"\n role={decorative ? 'none' : 'separator'}\n aria-orientation={decorative ? undefined : (orientation ?? 'horizontal')}\n className={cn(separatorVariants({ orientation }), className)}\n {...props}\n />\n )\n);\n\nSeparator.displayName = 'Separator';\n\nexport { Separator, separatorVariants };\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { cn } from './chunk-
|
|
1
|
+
import { cn } from './chunk-TQONQSJO.js';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { cva } from 'class-variance-authority';
|
|
4
4
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
@@ -355,5 +355,5 @@ var Slider = React.forwardRef(
|
|
|
355
355
|
Slider.displayName = "Slider";
|
|
356
356
|
|
|
357
357
|
export { Slider, sliderRangeVariants, sliderThumbVariants, sliderTrackVariants };
|
|
358
|
-
//# sourceMappingURL=chunk-
|
|
359
|
-
//# sourceMappingURL=chunk-
|
|
358
|
+
//# sourceMappingURL=chunk-OTQ72WX3.js.map
|
|
359
|
+
//# sourceMappingURL=chunk-OTQ72WX3.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Slider/Slider.tsx"],"names":[],"mappings":"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","file":"chunk-JBB25LFB.js","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\n// ============================================================================\n// Slider Variants\n// ============================================================================\n\nconst sliderTrackVariants = cva(\n [\n 'relative w-full overflow-hidden rounded-full',\n 'bg-neutral-200 dark:bg-neutral-700',\n 'cursor-pointer',\n 'group-data-[disabled=true]:cursor-not-allowed group-data-[disabled=true]:opacity-50',\n ],\n {\n variants: {\n size: {\n sm: 'h-1',\n md: 'h-2',\n lg: 'h-3',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\nconst sliderRangeVariants = cva(\n ['absolute h-full rounded-full transition-all duration-75 ease-out'],\n {\n variants: {\n variant: {\n default: 'bg-primary-800',\n success: 'bg-green-500',\n warning: 'bg-yellow-500',\n danger: 'bg-red-500',\n neutral: 'bg-neutral-500',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n);\n\nconst sliderThumbVariants = cva(\n [\n 'absolute top-1/2 -translate-y-1/2 -translate-x-1/2',\n 'rounded-full border-2 bg-white',\n 'shadow-md transition-shadow duration-150',\n 'cursor-grab active:cursor-grabbing',\n 'hover:shadow-lg',\n 'active:shadow-xl active:scale-110',\n 'group-focus-visible:outline-none group-focus-visible:ring-2 group-focus-visible:ring-ring group-focus-visible:ring-offset-2',\n 'group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50',\n ],\n {\n variants: {\n size: {\n sm: 'h-3.5 w-3.5',\n md: 'h-5 w-5',\n lg: 'h-6 w-6',\n },\n variant: {\n default: 'border-primary-500',\n success: 'border-green-500',\n warning: 'border-yellow-500',\n danger: 'border-red-500',\n neutral: 'border-neutral-500',\n },\n },\n defaultVariants: {\n size: 'md',\n variant: 'default',\n },\n }\n);\n\n// ============================================================================\n// Slider Component\n// ============================================================================\n\nexport interface SliderProps\n extends\n VariantProps<typeof sliderTrackVariants>,\n VariantProps<typeof sliderRangeVariants> {\n /** Current value (controlled) */\n value?: number;\n /** Default value (uncontrolled) */\n defaultValue?: number;\n /** Minimum value */\n min?: number;\n /** Maximum value */\n max?: number;\n /** Step increment */\n step?: number;\n /** Callback when value changes */\n onValueChange?: (value: number) => void;\n /** Callback when interaction ends (mouseup / touchend) */\n onValueCommit?: (value: number) => void;\n /** Whether the slider is disabled */\n disabled?: boolean;\n /** Label for the slider */\n label?: string;\n /** Show the current value */\n showValue?: boolean;\n /** Format the displayed value */\n formatValue?: (value: number) => string;\n /** Description text below the label */\n description?: string;\n /** Min label displayed below the track (left) */\n minLabel?: string;\n /** Max label displayed below the track (right) */\n maxLabel?: string;\n /** Additional class name for the root container */\n className?: string;\n /** Additional class name for the track */\n trackClassName?: string;\n /** ID for the underlying input */\n id?: string;\n /** Name for form submission */\n name?: string;\n /** Accessible label for the slider */\n 'aria-label'?: string;\n /** ID of the element that labels the slider */\n 'aria-labelledby'?: string;\n}\n\n/**\n * A fully branded, accessible slider/range input component.\n *\n * Uses brand design tokens for colors, border-radius, and sizing.\n * Supports controlled and uncontrolled usage, labels, descriptions,\n * min/max labels, value display, and multiple color variants.\n *\n * @example\n * ```tsx\n * <Slider label=\"Volume\" min={0} max={100} defaultValue={50} />\n * <Slider\n * label=\"Border Radius\"\n * min={0}\n * max={32}\n * value={radius}\n * onValueChange={setRadius}\n * showValue\n * formatValue={(v) => `${v}px`}\n * minLabel=\"Square\"\n * maxLabel=\"Rounded\"\n * />\n * ```\n */\nconst Slider = React.forwardRef<HTMLInputElement, SliderProps>(\n (\n {\n value: controlledValue,\n defaultValue = 0,\n min = 0,\n max = 100,\n step = 1,\n onValueChange,\n onValueCommit,\n disabled = false,\n label,\n showValue = false,\n formatValue,\n description,\n minLabel,\n maxLabel,\n variant,\n size,\n className,\n trackClassName,\n id,\n name,\n 'aria-label': ariaLabelProp,\n 'aria-labelledby': ariaLabelledByProp,\n },\n ref\n ) => {\n const hasExplicitLabel = !!label;\n const labelId = React.useId();\n const descriptionId = React.useId();\n const ariaLabelledBy =\n ariaLabelledByProp ?? (hasExplicitLabel ? labelId : undefined);\n const ariaDescribedBy = description ? descriptionId : undefined;\n const ariaLabel =\n ariaLabelProp ??\n (!hasExplicitLabel && !ariaLabelledByProp ? 'Slider' : undefined);\n const [uncontrolledValue, setUncontrolledValue] =\n React.useState(defaultValue);\n const isControlled = controlledValue !== undefined;\n const currentValue = isControlled ? controlledValue : uncontrolledValue;\n\n // Clamp value to min/max\n const clampedValue = Math.min(Math.max(currentValue, min), max);\n\n // Percentage for visual fill\n const percentage =\n max !== min ? ((clampedValue - min) / (max - min)) * 100 : 0;\n\n const generatedId = React.useId();\n const inputId = id ?? generatedId;\n\n const trackRef = React.useRef<HTMLDivElement>(null);\n const latestValueRef = React.useRef(clampedValue);\n latestValueRef.current = clampedValue;\n\n const safeStep = step > 0 ? step : 1;\n\n const computeValueFromPointer = React.useCallback(\n (clientX: number) => {\n const track = trackRef.current;\n if (!track) return clampedValue;\n const rect = track.getBoundingClientRect();\n const ratio = Math.min(\n Math.max((clientX - rect.left) / rect.width, 0),\n 1\n );\n const raw = min + ratio * (max - min);\n // Snap to step relative to min\n const stepped = min + Math.round((raw - min) / safeStep) * safeStep;\n return Math.min(Math.max(stepped, min), max);\n },\n [min, max, safeStep, clampedValue]\n );\n\n const setValue = React.useCallback(\n (newValue: number) => {\n latestValueRef.current = newValue;\n if (!isControlled) {\n setUncontrolledValue(newValue);\n }\n onValueChange?.(newValue);\n },\n [isControlled, onValueChange]\n );\n\n const handlePointerDown = React.useCallback(\n (e: React.PointerEvent) => {\n if (disabled) return;\n e.preventDefault();\n (e.currentTarget as HTMLElement).focus();\n (e.target as HTMLElement).setPointerCapture(e.pointerId);\n const newValue = computeValueFromPointer(e.clientX);\n setValue(newValue);\n },\n [disabled, computeValueFromPointer, setValue]\n );\n\n const handlePointerMove = React.useCallback(\n (e: React.PointerEvent) => {\n if (disabled) return;\n if (!(e.target as HTMLElement).hasPointerCapture(e.pointerId)) return;\n const newValue = computeValueFromPointer(e.clientX);\n setValue(newValue);\n },\n [disabled, computeValueFromPointer, setValue]\n );\n\n const handlePointerUp = React.useCallback(\n (e: React.PointerEvent) => {\n if (disabled) return;\n (e.target as HTMLElement).releasePointerCapture(e.pointerId);\n onValueCommit?.(latestValueRef.current);\n },\n [disabled, onValueCommit]\n );\n\n const handleLostPointerCapture = React.useCallback(() => {\n onValueCommit?.(latestValueRef.current);\n }, [onValueCommit]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = parseFloat(e.target.value);\n if (!isControlled) {\n setUncontrolledValue(newValue);\n }\n onValueChange?.(newValue);\n };\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n if (disabled) return;\n let newValue: number | null = null;\n switch (e.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n newValue = Math.min(clampedValue + safeStep, max);\n break;\n case 'ArrowLeft':\n case 'ArrowDown':\n newValue = Math.max(clampedValue - safeStep, min);\n break;\n case 'Home':\n newValue = min;\n break;\n case 'End':\n newValue = max;\n break;\n default:\n return;\n }\n e.preventDefault();\n setValue(newValue);\n onValueCommit?.(newValue);\n },\n [disabled, clampedValue, safeStep, min, max, setValue, onValueCommit]\n );\n\n const displayValue = formatValue\n ? formatValue(clampedValue)\n : String(clampedValue);\n\n return (\n <div\n data-slot=\"slider\"\n className={cn('relative w-full', className)}\n data-disabled={disabled || undefined}\n >\n {/* Label row */}\n {(label || showValue) && (\n <div\n data-slot=\"slider-label-row\"\n className=\"mb-1.5 flex items-baseline justify-between\"\n >\n {label && (\n <label\n id={labelId}\n htmlFor={inputId}\n data-slot=\"slider-label\"\n className={cn(\n 'text-foreground text-sm font-medium',\n disabled && 'opacity-50'\n )}\n >\n {label}\n {showValue && (\n <span\n data-slot=\"slider-value\"\n className=\"text-muted-foreground ml-1\"\n >\n {displayValue}\n </span>\n )}\n </label>\n )}\n {!label && showValue && (\n <span\n data-slot=\"slider-value\"\n className=\"text-muted-foreground text-sm\"\n >\n {displayValue}\n </span>\n )}\n </div>\n )}\n\n {/* Description */}\n {description && (\n <p\n id={descriptionId}\n data-slot=\"slider-description\"\n className={cn(\n 'text-muted-foreground mb-2 text-xs',\n disabled && 'opacity-50'\n )}\n >\n {description}\n </p>\n )}\n\n {/* Track + Thumb */}\n <div\n ref={trackRef}\n data-slot=\"slider-track-wrapper\"\n className=\"group focus-visible:ring-ring relative rounded py-2 outline-none focus-visible:ring-2 focus-visible:ring-offset-2\"\n style={{ touchAction: disabled ? 'auto' : 'none' }}\n role=\"slider\"\n tabIndex={disabled ? -1 : 0}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={clampedValue}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={ariaDescribedBy}\n aria-disabled={disabled || undefined}\n data-disabled={disabled || undefined}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onLostPointerCapture={handleLostPointerCapture}\n onKeyDown={handleKeyDown}\n >\n {/* Visual track background */}\n <div\n data-slot=\"slider-track\"\n className={cn(sliderTrackVariants({ size }), trackClassName)}\n >\n {/* Filled range */}\n <div\n data-slot=\"slider-range\"\n className={sliderRangeVariants({ variant })}\n style={{ width: `${percentage}%` }}\n />\n </div>\n\n {/* Thumb indicator */}\n <div\n data-slot=\"slider-thumb\"\n className={sliderThumbVariants({ size, variant })}\n style={{ left: `${percentage}%` }}\n aria-hidden=\"true\"\n />\n </div>\n\n {/* Native range input — for form submission only, rendered outside role=\"slider\" to avoid nested-interactive */}\n <input\n ref={ref}\n type=\"range\"\n className=\"pointer-events-none absolute inset-0 h-full w-full opacity-0\"\n tabIndex={-1}\n aria-hidden=\"true\"\n id={inputId}\n name={name}\n min={min}\n max={max}\n step={step}\n value={clampedValue}\n onChange={handleChange}\n disabled={disabled}\n />\n\n {/* Min / Max labels */}\n {(minLabel || maxLabel) && (\n <div\n data-slot=\"slider-minmax\"\n className={cn(\n 'text-muted-foreground mt-1 flex justify-between text-xs',\n disabled && 'opacity-50'\n )}\n >\n <span>{minLabel}</span>\n <span>{maxLabel}</span>\n </div>\n )}\n </div>\n );\n }\n);\n\nSlider.displayName = 'Slider';\n\nexport {\n Slider,\n sliderTrackVariants,\n sliderRangeVariants,\n sliderThumbVariants,\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Slider/Slider.tsx"],"names":[],"mappings":"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","file":"chunk-OTQ72WX3.js","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\n// ============================================================================\n// Slider Variants\n// ============================================================================\n\nconst sliderTrackVariants = cva(\n [\n 'relative w-full overflow-hidden rounded-full',\n 'bg-neutral-200 dark:bg-neutral-700',\n 'cursor-pointer',\n 'group-data-[disabled=true]:cursor-not-allowed group-data-[disabled=true]:opacity-50',\n ],\n {\n variants: {\n size: {\n sm: 'h-1',\n md: 'h-2',\n lg: 'h-3',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\nconst sliderRangeVariants = cva(\n ['absolute h-full rounded-full transition-all duration-75 ease-out'],\n {\n variants: {\n variant: {\n default: 'bg-primary-800',\n success: 'bg-green-500',\n warning: 'bg-yellow-500',\n danger: 'bg-red-500',\n neutral: 'bg-neutral-500',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n);\n\nconst sliderThumbVariants = cva(\n [\n 'absolute top-1/2 -translate-y-1/2 -translate-x-1/2',\n 'rounded-full border-2 bg-white',\n 'shadow-md transition-shadow duration-150',\n 'cursor-grab active:cursor-grabbing',\n 'hover:shadow-lg',\n 'active:shadow-xl active:scale-110',\n 'group-focus-visible:outline-none group-focus-visible:ring-2 group-focus-visible:ring-ring group-focus-visible:ring-offset-2',\n 'group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50',\n ],\n {\n variants: {\n size: {\n sm: 'h-3.5 w-3.5',\n md: 'h-5 w-5',\n lg: 'h-6 w-6',\n },\n variant: {\n default: 'border-primary-500',\n success: 'border-green-500',\n warning: 'border-yellow-500',\n danger: 'border-red-500',\n neutral: 'border-neutral-500',\n },\n },\n defaultVariants: {\n size: 'md',\n variant: 'default',\n },\n }\n);\n\n// ============================================================================\n// Slider Component\n// ============================================================================\n\nexport interface SliderProps\n extends\n VariantProps<typeof sliderTrackVariants>,\n VariantProps<typeof sliderRangeVariants> {\n /** Current value (controlled) */\n value?: number;\n /** Default value (uncontrolled) */\n defaultValue?: number;\n /** Minimum value */\n min?: number;\n /** Maximum value */\n max?: number;\n /** Step increment */\n step?: number;\n /** Callback when value changes */\n onValueChange?: (value: number) => void;\n /** Callback when interaction ends (mouseup / touchend) */\n onValueCommit?: (value: number) => void;\n /** Whether the slider is disabled */\n disabled?: boolean;\n /** Label for the slider */\n label?: string;\n /** Show the current value */\n showValue?: boolean;\n /** Format the displayed value */\n formatValue?: (value: number) => string;\n /** Description text below the label */\n description?: string;\n /** Min label displayed below the track (left) */\n minLabel?: string;\n /** Max label displayed below the track (right) */\n maxLabel?: string;\n /** Additional class name for the root container */\n className?: string;\n /** Additional class name for the track */\n trackClassName?: string;\n /** ID for the underlying input */\n id?: string;\n /** Name for form submission */\n name?: string;\n /** Accessible label for the slider */\n 'aria-label'?: string;\n /** ID of the element that labels the slider */\n 'aria-labelledby'?: string;\n}\n\n/**\n * A fully branded, accessible slider/range input component.\n *\n * Uses brand design tokens for colors, border-radius, and sizing.\n * Supports controlled and uncontrolled usage, labels, descriptions,\n * min/max labels, value display, and multiple color variants.\n *\n * @example\n * ```tsx\n * <Slider label=\"Volume\" min={0} max={100} defaultValue={50} />\n * <Slider\n * label=\"Border Radius\"\n * min={0}\n * max={32}\n * value={radius}\n * onValueChange={setRadius}\n * showValue\n * formatValue={(v) => `${v}px`}\n * minLabel=\"Square\"\n * maxLabel=\"Rounded\"\n * />\n * ```\n */\nconst Slider = React.forwardRef<HTMLInputElement, SliderProps>(\n (\n {\n value: controlledValue,\n defaultValue = 0,\n min = 0,\n max = 100,\n step = 1,\n onValueChange,\n onValueCommit,\n disabled = false,\n label,\n showValue = false,\n formatValue,\n description,\n minLabel,\n maxLabel,\n variant,\n size,\n className,\n trackClassName,\n id,\n name,\n 'aria-label': ariaLabelProp,\n 'aria-labelledby': ariaLabelledByProp,\n },\n ref\n ) => {\n const hasExplicitLabel = !!label;\n const labelId = React.useId();\n const descriptionId = React.useId();\n const ariaLabelledBy =\n ariaLabelledByProp ?? (hasExplicitLabel ? labelId : undefined);\n const ariaDescribedBy = description ? descriptionId : undefined;\n const ariaLabel =\n ariaLabelProp ??\n (!hasExplicitLabel && !ariaLabelledByProp ? 'Slider' : undefined);\n const [uncontrolledValue, setUncontrolledValue] =\n React.useState(defaultValue);\n const isControlled = controlledValue !== undefined;\n const currentValue = isControlled ? controlledValue : uncontrolledValue;\n\n // Clamp value to min/max\n const clampedValue = Math.min(Math.max(currentValue, min), max);\n\n // Percentage for visual fill\n const percentage =\n max !== min ? ((clampedValue - min) / (max - min)) * 100 : 0;\n\n const generatedId = React.useId();\n const inputId = id ?? generatedId;\n\n const trackRef = React.useRef<HTMLDivElement>(null);\n const latestValueRef = React.useRef(clampedValue);\n latestValueRef.current = clampedValue;\n\n const safeStep = step > 0 ? step : 1;\n\n const computeValueFromPointer = React.useCallback(\n (clientX: number) => {\n const track = trackRef.current;\n if (!track) return clampedValue;\n const rect = track.getBoundingClientRect();\n const ratio = Math.min(\n Math.max((clientX - rect.left) / rect.width, 0),\n 1\n );\n const raw = min + ratio * (max - min);\n // Snap to step relative to min\n const stepped = min + Math.round((raw - min) / safeStep) * safeStep;\n return Math.min(Math.max(stepped, min), max);\n },\n [min, max, safeStep, clampedValue]\n );\n\n const setValue = React.useCallback(\n (newValue: number) => {\n latestValueRef.current = newValue;\n if (!isControlled) {\n setUncontrolledValue(newValue);\n }\n onValueChange?.(newValue);\n },\n [isControlled, onValueChange]\n );\n\n const handlePointerDown = React.useCallback(\n (e: React.PointerEvent) => {\n if (disabled) return;\n e.preventDefault();\n (e.currentTarget as HTMLElement).focus();\n (e.target as HTMLElement).setPointerCapture(e.pointerId);\n const newValue = computeValueFromPointer(e.clientX);\n setValue(newValue);\n },\n [disabled, computeValueFromPointer, setValue]\n );\n\n const handlePointerMove = React.useCallback(\n (e: React.PointerEvent) => {\n if (disabled) return;\n if (!(e.target as HTMLElement).hasPointerCapture(e.pointerId)) return;\n const newValue = computeValueFromPointer(e.clientX);\n setValue(newValue);\n },\n [disabled, computeValueFromPointer, setValue]\n );\n\n const handlePointerUp = React.useCallback(\n (e: React.PointerEvent) => {\n if (disabled) return;\n (e.target as HTMLElement).releasePointerCapture(e.pointerId);\n onValueCommit?.(latestValueRef.current);\n },\n [disabled, onValueCommit]\n );\n\n const handleLostPointerCapture = React.useCallback(() => {\n onValueCommit?.(latestValueRef.current);\n }, [onValueCommit]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = parseFloat(e.target.value);\n if (!isControlled) {\n setUncontrolledValue(newValue);\n }\n onValueChange?.(newValue);\n };\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n if (disabled) return;\n let newValue: number | null = null;\n switch (e.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n newValue = Math.min(clampedValue + safeStep, max);\n break;\n case 'ArrowLeft':\n case 'ArrowDown':\n newValue = Math.max(clampedValue - safeStep, min);\n break;\n case 'Home':\n newValue = min;\n break;\n case 'End':\n newValue = max;\n break;\n default:\n return;\n }\n e.preventDefault();\n setValue(newValue);\n onValueCommit?.(newValue);\n },\n [disabled, clampedValue, safeStep, min, max, setValue, onValueCommit]\n );\n\n const displayValue = formatValue\n ? formatValue(clampedValue)\n : String(clampedValue);\n\n return (\n <div\n data-slot=\"slider\"\n className={cn('relative w-full', className)}\n data-disabled={disabled || undefined}\n >\n {/* Label row */}\n {(label || showValue) && (\n <div\n data-slot=\"slider-label-row\"\n className=\"mb-1.5 flex items-baseline justify-between\"\n >\n {label && (\n <label\n id={labelId}\n htmlFor={inputId}\n data-slot=\"slider-label\"\n className={cn(\n 'text-foreground text-sm font-medium',\n disabled && 'opacity-50'\n )}\n >\n {label}\n {showValue && (\n <span\n data-slot=\"slider-value\"\n className=\"text-muted-foreground ml-1\"\n >\n {displayValue}\n </span>\n )}\n </label>\n )}\n {!label && showValue && (\n <span\n data-slot=\"slider-value\"\n className=\"text-muted-foreground text-sm\"\n >\n {displayValue}\n </span>\n )}\n </div>\n )}\n\n {/* Description */}\n {description && (\n <p\n id={descriptionId}\n data-slot=\"slider-description\"\n className={cn(\n 'text-muted-foreground mb-2 text-xs',\n disabled && 'opacity-50'\n )}\n >\n {description}\n </p>\n )}\n\n {/* Track + Thumb */}\n <div\n ref={trackRef}\n data-slot=\"slider-track-wrapper\"\n className=\"group focus-visible:ring-ring relative rounded py-2 outline-none focus-visible:ring-2 focus-visible:ring-offset-2\"\n style={{ touchAction: disabled ? 'auto' : 'none' }}\n role=\"slider\"\n tabIndex={disabled ? -1 : 0}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={clampedValue}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={ariaDescribedBy}\n aria-disabled={disabled || undefined}\n data-disabled={disabled || undefined}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onLostPointerCapture={handleLostPointerCapture}\n onKeyDown={handleKeyDown}\n >\n {/* Visual track background */}\n <div\n data-slot=\"slider-track\"\n className={cn(sliderTrackVariants({ size }), trackClassName)}\n >\n {/* Filled range */}\n <div\n data-slot=\"slider-range\"\n className={sliderRangeVariants({ variant })}\n style={{ width: `${percentage}%` }}\n />\n </div>\n\n {/* Thumb indicator */}\n <div\n data-slot=\"slider-thumb\"\n className={sliderThumbVariants({ size, variant })}\n style={{ left: `${percentage}%` }}\n aria-hidden=\"true\"\n />\n </div>\n\n {/* Native range input — for form submission only, rendered outside role=\"slider\" to avoid nested-interactive */}\n <input\n ref={ref}\n type=\"range\"\n className=\"pointer-events-none absolute inset-0 h-full w-full opacity-0\"\n tabIndex={-1}\n aria-hidden=\"true\"\n id={inputId}\n name={name}\n min={min}\n max={max}\n step={step}\n value={clampedValue}\n onChange={handleChange}\n disabled={disabled}\n />\n\n {/* Min / Max labels */}\n {(minLabel || maxLabel) && (\n <div\n data-slot=\"slider-minmax\"\n className={cn(\n 'text-muted-foreground mt-1 flex justify-between text-xs',\n disabled && 'opacity-50'\n )}\n >\n <span>{minLabel}</span>\n <span>{maxLabel}</span>\n </div>\n )}\n </div>\n );\n }\n);\n\nSlider.displayName = 'Slider';\n\nexport {\n Slider,\n sliderTrackVariants,\n sliderRangeVariants,\n sliderThumbVariants,\n};\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkS5RVSXDV_cjs = require('./chunk-S5RVSXDV.cjs');
|
|
4
4
|
var React = require('react');
|
|
5
5
|
var classVarianceAuthority = require('class-variance-authority');
|
|
6
6
|
var jsxRuntime = require('react/jsx-runtime');
|
|
@@ -58,7 +58,7 @@ var ScrollArea = React__namespace.forwardRef(
|
|
|
58
58
|
"data-slot": "scroll-area",
|
|
59
59
|
role: "region",
|
|
60
60
|
tabIndex: 0,
|
|
61
|
-
className:
|
|
61
|
+
className: chunkS5RVSXDV_cjs.cn(scrollAreaVariants({ orientation }), className),
|
|
62
62
|
...props,
|
|
63
63
|
children
|
|
64
64
|
}
|
|
@@ -68,5 +68,5 @@ ScrollArea.displayName = "ScrollArea";
|
|
|
68
68
|
|
|
69
69
|
exports.ScrollArea = ScrollArea;
|
|
70
70
|
exports.scrollAreaVariants = scrollAreaVariants;
|
|
71
|
-
//# sourceMappingURL=chunk-
|
|
72
|
-
//# sourceMappingURL=chunk-
|
|
71
|
+
//# sourceMappingURL=chunk-OZOSWBSI.cjs.map
|
|
72
|
+
//# sourceMappingURL=chunk-OZOSWBSI.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/ScrollArea/ScrollArea.tsx"],"names":["cva","React","jsx","cn"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,IAAM,kBAAA,GAAqBA,0BAAA;AAAA,EACzB;AAAA,IACE,wBAAA;AAAA;AAAA,IAEA,wBAAA;AAAA,IACA,kDAAA;AAAA,IACA,uDAAA;AAAA,IACA,6CAAA;AAAA,IACA,2CAAA;AAAA,IACA,wCAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,WAAA,EAAa;AAAA,QACX,QAAA,EAAU,mCAAA;AAAA,QACV,UAAA,EAAY,mCAAA;AAAA,QACZ,IAAA,EAAM;AAAA;AACR,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,WAAA,EAAa;AAAA;AACf;AAEJ;AAkBA,IAAM,UAAA,GAAmBC,gBAAA,CAAA,UAAA;AAAA,EACvB,CAAC,EAAE,SAAA,EAAW,WAAA,EAAa,UAAU,GAAG,KAAA,IAAS,GAAA,qBAC/CC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,WAAA,EAAU,aAAA;AAAA,MACV,IAAA,EAAK,QAAA;AAAA,MACL,QAAA,EAAU,CAAA;AAAA,MACV,WAAWC,oBAAA,CAAG,kBAAA,CAAmB,EAAE,WAAA,EAAa,GAAG,SAAS,CAAA;AAAA,MAC3D,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA;AAGP;AAGA,UAAA,CAAW,WAAA,GAAc,YAAA","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/ScrollArea/ScrollArea.tsx"],"names":["cva","React","jsx","cn"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,IAAM,kBAAA,GAAqBA,0BAAA;AAAA,EACzB;AAAA,IACE,wBAAA;AAAA;AAAA,IAEA,wBAAA;AAAA,IACA,kDAAA;AAAA,IACA,uDAAA;AAAA,IACA,6CAAA;AAAA,IACA,2CAAA;AAAA,IACA,wCAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,WAAA,EAAa;AAAA,QACX,QAAA,EAAU,mCAAA;AAAA,QACV,UAAA,EAAY,mCAAA;AAAA,QACZ,IAAA,EAAM;AAAA;AACR,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,WAAA,EAAa;AAAA;AACf;AAEJ;AAkBA,IAAM,UAAA,GAAmBC,gBAAA,CAAA,UAAA;AAAA,EACvB,CAAC,EAAE,SAAA,EAAW,WAAA,EAAa,UAAU,GAAG,KAAA,IAAS,GAAA,qBAC/CC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,WAAA,EAAU,aAAA;AAAA,MACV,IAAA,EAAK,QAAA;AAAA,MACL,QAAA,EAAU,CAAA;AAAA,MACV,WAAWC,oBAAA,CAAG,kBAAA,CAAmB,EAAE,WAAA,EAAa,GAAG,SAAS,CAAA;AAAA,MAC3D,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA;AAGP;AAGA,UAAA,CAAW,WAAA,GAAc,YAAA","file":"chunk-OZOSWBSI.cjs","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\nconst scrollAreaVariants = cva(\n [\n 'relative overflow-auto',\n // Thin, theme-aware scrollbars\n '[scrollbar-width:thin]',\n '[scrollbar-color:hsl(var(--border))_transparent]',\n '[&::-webkit-scrollbar]:w-2 [&::-webkit-scrollbar]:h-2',\n '[&::-webkit-scrollbar-track]:bg-transparent',\n '[&::-webkit-scrollbar-thumb]:rounded-full',\n '[&::-webkit-scrollbar-thumb]:bg-border',\n 'hover:[&::-webkit-scrollbar-thumb]:bg-muted-foreground/40',\n ],\n {\n variants: {\n orientation: {\n vertical: 'overflow-x-hidden overflow-y-auto',\n horizontal: 'overflow-x-auto overflow-y-hidden',\n both: 'overflow-auto',\n },\n },\n defaultVariants: {\n orientation: 'vertical',\n },\n }\n);\n\nexport interface ScrollAreaProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof scrollAreaVariants> {}\n\n/**\n * A scrollable container with consistent, theme-aware scrollbar styling.\n *\n * @example\n * ```tsx\n * <ScrollArea className=\"h-64\">\n * <LongContent />\n * </ScrollArea>\n * ```\n */\n/* eslint-disable jsx-a11y/no-noninteractive-tabindex */\nconst ScrollArea = React.forwardRef<HTMLDivElement, ScrollAreaProps>(\n ({ className, orientation, children, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"scroll-area\"\n role=\"region\"\n tabIndex={0}\n className={cn(scrollAreaVariants({ orientation }), className)}\n {...props}\n >\n {children}\n </div>\n )\n);\n/* eslint-enable jsx-a11y/no-noninteractive-tabindex */\n\nScrollArea.displayName = 'ScrollArea';\n\nexport { ScrollArea, scrollAreaVariants };\n"]}
|