@mieweb/ui 0.7.1 → 0.7.2
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 +13 -13
- package/dist/ag-grid.js +2 -2
- package/dist/brands/index.cjs +7 -7
- package/dist/brands/index.js +2 -2
- 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-MAMY5HTT.cjs → chunk-26DPQUSB.cjs} +22 -22
- package/dist/{chunk-MAMY5HTT.cjs.map → chunk-26DPQUSB.cjs.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-OX2RIVN7.js → chunk-3D4ITDLO.js} +4 -4
- package/dist/{chunk-OX2RIVN7.js.map → chunk-3D4ITDLO.js.map} +1 -1
- package/dist/{chunk-PJAQDAMZ.cjs → chunk-3IAA3KCE.cjs} +15 -6
- package/dist/chunk-3IAA3KCE.cjs.map +1 -0
- package/dist/chunk-3PXOIAF6.js +3 -0
- package/dist/{chunk-DHKYGVP7.js.map → chunk-3PXOIAF6.js.map} +1 -1
- package/dist/{chunk-6D5F7EDM.js → chunk-3SRBIXQX.js} +18 -17
- package/dist/chunk-3SRBIXQX.js.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-JLBT76WH.js → chunk-3YSIZ2CK.js} +14 -5
- package/dist/chunk-3YSIZ2CK.js.map +1 -0
- 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-PFWHWIXS.cjs → chunk-54OW6ZPL.cjs} +124 -3
- package/dist/chunk-54OW6ZPL.cjs.map +1 -0
- package/dist/{chunk-FJH7P5WG.js → chunk-5BDCQBYW.js} +6 -6
- package/dist/{chunk-FJH7P5WG.js.map → chunk-5BDCQBYW.js.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-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-MSRU3XBH.cjs → chunk-6ECKH4DJ.cjs} +7 -7
- package/dist/{chunk-MSRU3XBH.cjs.map → chunk-6ECKH4DJ.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-AES2BKEW.cjs → chunk-6J7UGYT5.cjs} +10 -10
- package/dist/{chunk-AES2BKEW.cjs.map → chunk-6J7UGYT5.cjs.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-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-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-UOOH356R.cjs → chunk-AIJAFPGJ.cjs} +5 -5
- package/dist/{chunk-UOOH356R.cjs.map → chunk-AIJAFPGJ.cjs.map} +1 -1
- package/dist/{chunk-43GBCUSQ.js → chunk-AQ564XO7.js} +6 -6
- package/dist/chunk-AQ564XO7.js.map +1 -0
- package/dist/{chunk-CYMZ2QS5.js → chunk-BCJFOSZX.js} +2 -2
- package/dist/{chunk-CYMZ2QS5.js.map → chunk-BCJFOSZX.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-MKWGKASO.js → chunk-BMRQ4VME.js} +4 -4
- package/dist/{chunk-MKWGKASO.js.map → chunk-BMRQ4VME.js.map} +1 -1
- package/dist/{chunk-T42BCIUA.js → chunk-BMSG4NBH.js} +4 -4
- package/dist/{chunk-T42BCIUA.js.map → chunk-BMSG4NBH.js.map} +1 -1
- package/dist/{chunk-QA6ZDHFP.js → chunk-BOOJDRJO.js} +35 -11
- package/dist/chunk-BOOJDRJO.js.map +1 -0
- 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-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-WO5CAOAN.js → chunk-DCBMTFLE.js} +3 -3
- package/dist/{chunk-WO5CAOAN.js.map → chunk-DCBMTFLE.js.map} +1 -1
- package/dist/{chunk-J7Z7467B.js → chunk-DLBV42JD.js} +4 -4
- package/dist/{chunk-J7Z7467B.js.map → chunk-DLBV42JD.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-LJ2ZWIX6.js → chunk-DWIF6VXZ.js} +124 -3
- package/dist/chunk-DWIF6VXZ.js.map +1 -0
- package/dist/{chunk-IHTRKWBG.js → chunk-EGWWTIWS.js} +119 -75
- package/dist/chunk-EGWWTIWS.js.map +1 -0
- package/dist/{chunk-UM6NA7HL.js → chunk-EKRT7K2K.js} +4 -4
- package/dist/{chunk-UM6NA7HL.js.map → chunk-EKRT7K2K.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-J3BU3JBX.js → chunk-FDUA6OGN.js} +3 -3
- package/dist/{chunk-J3BU3JBX.js.map → chunk-FDUA6OGN.js.map} +1 -1
- package/dist/{chunk-JHYFHEHS.js → chunk-FDV7EQWH.js} +4 -4
- package/dist/{chunk-JHYFHEHS.js.map → chunk-FDV7EQWH.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-5MAGWW5X.cjs → chunk-FKLUSYFP.cjs} +11 -11
- package/dist/{chunk-5MAGWW5X.cjs.map → chunk-FKLUSYFP.cjs.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-YZT62IMX.js → chunk-HIDV32ZX.js} +5 -5
- package/dist/{chunk-YZT62IMX.js.map → chunk-HIDV32ZX.js.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-DUPR6FEL.js → chunk-I3WGZPI6.js} +4 -4
- package/dist/{chunk-DUPR6FEL.js.map → chunk-I3WGZPI6.js.map} +1 -1
- package/dist/{chunk-TN33E2VN.cjs → chunk-IJYTASQQ.cjs} +15 -15
- package/dist/{chunk-TN33E2VN.cjs.map → chunk-IJYTASQQ.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-TR2OJKQ4.cjs → chunk-JTSKPDPH.cjs} +8 -8
- package/dist/{chunk-TR2OJKQ4.cjs.map → chunk-JTSKPDPH.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-4LVPQ44A.js → chunk-LMBXJZLG.js} +9 -5
- package/dist/chunk-LMBXJZLG.js.map +1 -0
- 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-ZHBANUBI.cjs → chunk-MJWFNV3L.cjs} +31 -27
- package/dist/chunk-MJWFNV3L.cjs.map +1 -0
- 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-ZDEYV373.cjs → chunk-MYFZYUPR.cjs} +35 -11
- package/dist/chunk-MYFZYUPR.cjs.map +1 -0
- package/dist/{chunk-MCCO4A23.js → chunk-NGLI2MSM.js} +256 -45
- package/dist/chunk-NGLI2MSM.js.map +1 -0
- package/dist/{chunk-FCBQP2U4.cjs → chunk-NPKPCYAT.cjs} +142 -16
- package/dist/chunk-NPKPCYAT.cjs.map +1 -0
- 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-QUUFKGDF.cjs → chunk-OAHORW4N.cjs} +130 -86
- package/dist/chunk-OAHORW4N.cjs.map +1 -0
- 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-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-ZAIEQWRA.js → chunk-P6L74SKG.js} +5 -5
- package/dist/{chunk-ZAIEQWRA.js.map → chunk-P6L74SKG.js.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-PAM5UUBL.cjs +740 -0
- package/dist/{chunk-UTYUT5YY.cjs.map → chunk-PAM5UUBL.cjs.map} +1 -1
- package/dist/{chunk-NVHAQOHH.cjs → chunk-PLMXN23Q.cjs} +10 -10
- package/dist/chunk-PLMXN23Q.cjs.map +1 -0
- 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-7VF6WO7H.cjs → chunk-Q5VBO3I5.cjs} +310 -99
- package/dist/chunk-Q5VBO3I5.cjs.map +1 -0
- package/dist/{chunk-BLPCYP4D.cjs → chunk-QI2SB6U3.cjs} +29 -29
- package/dist/{chunk-BLPCYP4D.cjs.map → chunk-QI2SB6U3.cjs.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-5BQE6BEL.js → chunk-QYSUYB3S.js} +13 -9
- package/dist/chunk-QYSUYB3S.js.map +1 -0
- package/dist/{chunk-MZPF2QGM.cjs → chunk-RBS3GHDZ.cjs} +15 -15
- package/dist/{chunk-MZPF2QGM.cjs.map → chunk-RBS3GHDZ.cjs.map} +1 -1
- package/dist/{chunk-KJ5BSGEO.cjs → chunk-RS5VA6QU.cjs} +17 -13
- package/dist/chunk-RS5VA6QU.cjs.map +1 -0
- 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-372IIHUA.cjs → chunk-RYQ3S3KO.cjs} +53 -53
- package/dist/{chunk-372IIHUA.cjs.map → chunk-RYQ3S3KO.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-NQME7MCK.js → chunk-RZJXCI53.js} +191 -204
- package/dist/chunk-RZJXCI53.js.map +1 -0
- 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-XDFDVF2O.js → chunk-SH6B4MG5.js} +4 -4
- package/dist/{chunk-XDFDVF2O.js.map → chunk-SH6B4MG5.js.map} +1 -1
- package/dist/chunk-SVSHA7XV.js +487 -0
- package/dist/chunk-SVSHA7XV.js.map +1 -0
- package/dist/{chunk-KL2S36FM.js → chunk-TNUL4LGG.js} +6 -6
- package/dist/{chunk-KL2S36FM.js.map → chunk-TNUL4LGG.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-OOYEHBYJ.js → chunk-UUI7WXI5.js} +142 -16
- package/dist/chunk-UUI7WXI5.js.map +1 -0
- package/dist/{chunk-SNEQXSC5.cjs → chunk-VA7QN4DX.cjs} +2 -2
- package/dist/{chunk-SNEQXSC5.cjs.map → chunk-VA7QN4DX.cjs.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-VPNURIAY.cjs → chunk-VVI32P7L.cjs} +10 -10
- package/dist/{chunk-VPNURIAY.cjs.map → chunk-VVI32P7L.cjs.map} +1 -1
- package/dist/{chunk-PWHK7SWN.cjs → chunk-VWCMOWGH.cjs} +150 -149
- package/dist/chunk-VWCMOWGH.cjs.map +1 -0
- 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-X4LBUPJO.cjs +511 -0
- package/dist/chunk-X4LBUPJO.cjs.map +1 -0
- package/dist/{chunk-4GXECTPS.cjs → chunk-XB54G7WS.cjs} +37 -3
- package/dist/chunk-XB54G7WS.cjs.map +1 -0
- 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-IWDQPSJN.cjs → chunk-XS35KPBZ.cjs} +211 -223
- package/dist/chunk-XS35KPBZ.cjs.map +1 -0
- 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-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-EL2RSQTJ.cjs → chunk-YVL3XATO.cjs} +5 -5
- package/dist/{chunk-EL2RSQTJ.cjs.map → chunk-YVL3XATO.cjs.map} +1 -1
- package/dist/{chunk-PVUDXJAI.js → chunk-YXCE2HSK.js} +4 -4
- package/dist/{chunk-PVUDXJAI.js.map → chunk-YXCE2HSK.js.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-DAPZPT5N.cjs → chunk-ZBI52NP2.cjs} +13 -13
- package/dist/{chunk-DAPZPT5N.cjs.map → chunk-ZBI52NP2.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/collabKit-QZL4P5T5.js +48 -0
- package/dist/collabKit-QZL4P5T5.js.map +1 -0
- package/dist/collabKit-UF7E6V3N.cjs +72 -0
- package/dist/collabKit-UF7E6V3N.cjs.map +1 -0
- 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 +5 -5
- package/dist/components/Autocomplete/index.js +4 -4
- 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.d.cts +8 -3
- package/dist/components/Card/index.d.ts +8 -3
- 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 +21 -0
- package/dist/components/CollabStatus/index.cjs.map +1 -0
- package/dist/components/CollabStatus/index.d.cts +222 -0
- package/dist/components/CollabStatus/index.d.ts +222 -0
- package/dist/components/CollabStatus/index.js +4 -0
- package/dist/components/CollabStatus/index.js.map +1 -0
- package/dist/components/Collapsible/index.cjs +5 -5
- package/dist/components/Collapsible/index.js +2 -2
- package/dist/components/CountryCodeDropdown/index.cjs +6 -6
- package/dist/components/CountryCodeDropdown/index.js +3 -3
- package/dist/components/DateInput/index.cjs +5 -5
- package/dist/components/DateInput/index.d.cts +3 -1
- package/dist/components/DateInput/index.d.ts +3 -1
- package/dist/components/DateInput/index.js +4 -4
- package/dist/components/Dropdown/index.cjs +10 -10
- package/dist/components/Dropdown/index.d.cts +1 -1
- package/dist/components/Dropdown/index.d.ts +1 -1
- package/dist/components/Dropdown/index.js +4 -4
- 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 +16 -16
- package/dist/components/MediaEditor/index.d.cts +34 -1
- package/dist/components/MediaEditor/index.d.ts +34 -1
- package/dist/components/MediaEditor/index.js +11 -11
- 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 +10 -10
- package/dist/components/RichTextEditor/index.js +7 -7
- 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 +5 -5
- package/dist/components/Select/index.js +3 -3
- 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 +46 -46
- package/dist/components/SuperChat/index.d.cts +4 -4
- package/dist/components/SuperChat/index.d.ts +4 -4
- package/dist/components/SuperChat/index.js +9 -9
- package/dist/components/SuperChat/plugins/index.cjs +10 -10
- package/dist/components/SuperChat/plugins/index.d.cts +3 -3
- package/dist/components/SuperChat/plugins/index.d.ts +3 -3
- package/dist/components/SuperChat/plugins/index.js +4 -4
- 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 +18 -18
- package/dist/esheet.js +15 -15
- package/dist/hooks/index.cjs +34 -22
- package/dist/hooks/index.d.cts +31 -3
- package/dist/hooks/index.d.ts +31 -3
- package/dist/hooks/index.js +3 -3
- package/dist/index.cjs +3422 -1875
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +212 -22
- package/dist/index.d.ts +212 -22
- package/dist/index.js +918 -124
- package/dist/index.js.map +1 -1
- package/dist/kerebron.cjs +60 -17
- package/dist/kerebron.cjs.map +1 -1
- package/dist/kerebron.d.cts +39 -1
- package/dist/kerebron.d.ts +39 -1
- package/dist/kerebron.js +60 -17
- package/dist/kerebron.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/tailwind-preset.cjs +4 -4
- package/dist/tailwind-preset.js +1 -1
- package/dist/{types-BYnLjEFg.d.ts → types-B2RLmdVd.d.cts} +3 -1
- package/dist/{types-BYnLjEFg.d.cts → types-B2RLmdVd.d.ts} +3 -1
- package/dist/{types-CyCwYBlr.d.ts → types-BoTeTPdH.d.ts} +1 -1
- package/dist/{types-CBh8Zlje.d.cts → types-DyIB9HYT.d.cts} +1 -1
- package/dist/{useAnchoredPosition-nXdSFKHf.d.cts → useAnchoredPosition-C7PNglzD.d.cts} +6 -2
- package/dist/{useAnchoredPosition-nXdSFKHf.d.ts → useAnchoredPosition-C7PNglzD.d.ts} +6 -2
- package/dist/{useTranscriptEdits-Hy0Vm-H8.d.cts → useTranscriptEdits-CGzlemHT.d.cts} +16 -3
- package/dist/{useTranscriptEdits-C2BbMU37.d.ts → useTranscriptEdits-D32bLs0l.d.ts} +16 -3
- package/dist/utils/index.cjs +15 -11
- package/dist/utils/index.d.cts +6 -1
- package/dist/utils/index.d.ts +6 -1
- package/dist/utils/index.js +2 -2
- package/package.json +30 -12
- 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-43GBCUSQ.js.map +0 -1
- package/dist/chunk-4GXECTPS.cjs.map +0 -1
- package/dist/chunk-4LVPQ44A.js.map +0 -1
- package/dist/chunk-5BQE6BEL.js.map +0 -1
- package/dist/chunk-6D5F7EDM.js.map +0 -1
- package/dist/chunk-7VF6WO7H.cjs.map +0 -1
- package/dist/chunk-DHKYGVP7.js +0 -3
- package/dist/chunk-F3SOEIN2.js +0 -11
- package/dist/chunk-F3SOEIN2.js.map +0 -1
- package/dist/chunk-FCBQP2U4.cjs.map +0 -1
- package/dist/chunk-IHTRKWBG.js.map +0 -1
- package/dist/chunk-IWDQPSJN.cjs.map +0 -1
- package/dist/chunk-JLBT76WH.js.map +0 -1
- package/dist/chunk-KJ5BSGEO.cjs.map +0 -1
- package/dist/chunk-LJ2ZWIX6.js.map +0 -1
- package/dist/chunk-MCCO4A23.js.map +0 -1
- package/dist/chunk-NQME7MCK.js.map +0 -1
- package/dist/chunk-NVHAQOHH.cjs.map +0 -1
- package/dist/chunk-OOYEHBYJ.js.map +0 -1
- package/dist/chunk-OR5DRJCW.cjs +0 -13
- package/dist/chunk-OR5DRJCW.cjs.map +0 -1
- package/dist/chunk-PFWHWIXS.cjs.map +0 -1
- package/dist/chunk-PJAQDAMZ.cjs.map +0 -1
- package/dist/chunk-PWHK7SWN.cjs.map +0 -1
- package/dist/chunk-QA6ZDHFP.js.map +0 -1
- package/dist/chunk-QUUFKGDF.cjs.map +0 -1
- package/dist/chunk-UTYUT5YY.cjs +0 -240
- package/dist/chunk-ZDEYV373.cjs.map +0 -1
- package/dist/chunk-ZGSC2CB2.js.map +0 -1
- package/dist/chunk-ZHBANUBI.cjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/AudioRecorder/AudioRecorder.tsx"],"names":[],"mappings":"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","file":"chunk-TRZXK57D.js","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\n// ============================================================================\n// Types & Interfaces\n// ============================================================================\n\nexport type AudioRecorderState =\n | 'idle'\n | 'listening'\n | 'recording'\n | 'paused'\n | 'stopped'\n | 'playback';\n\nexport interface AudioRecorderProps extends VariantProps<\n typeof audioRecorderVariants\n> {\n /** Current state of the recorder */\n state?: AudioRecorderState;\n /** Callback when state changes */\n onStateChange?: (state: AudioRecorderState) => void;\n /** Callback when recording is complete with the audio blob */\n onRecordingComplete?: (blob: Blob, duration: number) => void;\n /** Callback when recording starts */\n onRecordingStart?: () => void;\n /** Callback when an error occurs */\n onError?: (error: Error) => void;\n /** Maximum recording duration in seconds (0 for unlimited) */\n maxDuration?: number;\n /** Audio MIME type */\n mimeType?: string;\n /** Waveform color (uses theme primary by default) */\n waveColor?: string;\n /** Progress/recorded waveform color */\n progressColor?: string;\n /** Cursor color */\n cursorColor?: string;\n /** Height of the waveform display */\n waveformHeight?: number;\n /** Show time display */\n showTime?: boolean;\n /** Show waveform visualization */\n showWaveform?: boolean;\n /** Additional class name */\n className?: string;\n /** Accessible label */\n 'aria-label'?: string;\n /** Pre-loaded audio URL for playback mode */\n audioUrl?: string;\n /** Whether the component is disabled */\n disabled?: boolean;\n /** Custom controls render function */\n renderControls?: (props: AudioRecorderControlsRenderProps) => React.ReactNode;\n}\n\nexport interface AudioRecorderControlsRenderProps {\n state: AudioRecorderState;\n currentTime: number;\n duration: number;\n isRecording: boolean;\n isPaused: boolean;\n isPlaying: boolean;\n onRecord: () => void;\n onPause: () => void;\n onResume: () => void;\n onStop: () => void;\n onPlay: () => void;\n onSeek: (time: number) => void;\n formatTime: (seconds: number) => string;\n}\n\n// ============================================================================\n// Variants\n// ============================================================================\n\nconst audioRecorderVariants = cva(\n [\n 'relative flex flex-col gap-3',\n 'rounded-xl border border-border',\n 'bg-card text-card-foreground',\n 'transition-all duration-200',\n ],\n {\n variants: {\n size: {\n sm: 'p-3',\n md: 'p-4',\n lg: 'p-5',\n },\n variant: {\n default: '',\n minimal: 'border-none bg-transparent shadow-none',\n elevated: 'shadow-lg border-0',\n },\n },\n defaultVariants: {\n size: 'md',\n variant: 'default',\n },\n }\n);\n\nconst waveformContainerVariants = cva(\n [\n 'relative w-full overflow-hidden rounded-lg',\n 'bg-neutral-100 dark:bg-neutral-800',\n 'transition-all duration-200',\n ],\n {\n variants: {\n state: {\n idle: 'opacity-50',\n listening: 'opacity-75',\n recording: '',\n paused: 'opacity-90',\n stopped: '',\n playback: '',\n },\n },\n defaultVariants: {\n state: 'idle',\n },\n }\n);\n\nconst controlButtonVariants = cva(\n [\n 'inline-flex items-center justify-center',\n 'rounded-full transition-all duration-200',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'disabled:pointer-events-none disabled:opacity-50',\n 'active:scale-95',\n ],\n {\n variants: {\n variant: {\n primary: [\n 'bg-primary-800 text-white',\n 'hover:bg-primary-900',\n 'active:bg-primary-800',\n ],\n secondary: [\n 'bg-neutral-200 text-neutral-700',\n 'hover:bg-neutral-300',\n 'dark:bg-neutral-700 dark:text-neutral-200',\n 'dark:hover:bg-neutral-600',\n ],\n danger: [\n 'bg-red-600 text-white',\n 'hover:bg-red-700',\n 'active:bg-red-800',\n ],\n ghost: [\n 'bg-transparent text-neutral-600',\n 'hover:bg-neutral-100',\n 'dark:text-neutral-400 dark:hover:bg-neutral-800',\n ],\n },\n size: {\n sm: 'h-8 w-8',\n md: 'h-10 w-10',\n lg: 'h-12 w-12',\n },\n },\n defaultVariants: {\n variant: 'primary',\n size: 'md',\n },\n }\n);\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\nfunction formatTime(seconds: number): string {\n const mins = Math.floor(seconds / 60);\n const secs = Math.floor(seconds % 60);\n return `${mins}:${secs.toString().padStart(2, '0')}`;\n}\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nfunction MicrophoneIcon({ className }: { className?: string }) {\n return (\n <svg\n className={className}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={2}\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M12 18.75a6 6 0 006-6v-1.5m-6 7.5a6 6 0 01-6-6v-1.5m6 7.5v3.75m-3.75 0h7.5M12 15.75a3 3 0 01-3-3V4.5a3 3 0 116 0v8.25a3 3 0 01-3 3z\"\n />\n </svg>\n );\n}\n\nfunction StopIcon({ className }: { className?: string }) {\n return (\n <svg\n className={className}\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" rx=\"2\" />\n </svg>\n );\n}\n\nfunction PlayIcon({ className }: { className?: string }) {\n return (\n <svg\n className={className}\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path d=\"M8 5.14v14l11-7-11-7z\" />\n </svg>\n );\n}\n\nfunction PauseIcon({ className }: { className?: string }) {\n return (\n <svg\n className={className}\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path d=\"M6 4h4v16H6V4zm8 0h4v16h-4V4z\" />\n </svg>\n );\n}\n\nfunction TrashIcon({ className }: { className?: string }) {\n return (\n <svg\n className={className}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={2}\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M14.74 9l-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 01-2.244 2.077H8.084a2.25 2.25 0 01-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 00-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 013.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 00-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 00-7.5 0\"\n />\n </svg>\n );\n}\n\n// ============================================================================\n// Recording Indicator\n// ============================================================================\n\ninterface RecordingIndicatorProps {\n isRecording: boolean;\n isPaused: boolean;\n}\n\nfunction RecordingIndicator({\n isRecording,\n isPaused,\n}: RecordingIndicatorProps) {\n if (!isRecording && !isPaused) return null;\n\n return (\n <div\n className=\"flex items-center gap-2\"\n data-slot=\"audio-recorder-indicator\"\n >\n <div\n className={cn(\n 'h-3 w-3 rounded-full',\n isRecording && !isPaused\n ? 'animate-pulse bg-red-500'\n : 'bg-yellow-500'\n )}\n aria-hidden=\"true\"\n />\n <span className=\"text-muted-foreground text-sm font-medium\">\n {isPaused ? 'Paused' : 'Recording'}\n </span>\n </div>\n );\n}\n\n// ============================================================================\n// Time Display\n// ============================================================================\n\ninterface TimeDisplayProps {\n currentTime: number;\n duration: number;\n maxDuration?: number;\n showMax?: boolean;\n}\n\nfunction TimeDisplay({\n currentTime,\n duration,\n maxDuration,\n showMax,\n}: TimeDisplayProps) {\n return (\n <div\n className=\"text-muted-foreground flex items-center gap-1 font-mono text-sm\"\n data-slot=\"audio-recorder-time\"\n >\n <span>{formatTime(currentTime)}</span>\n <span>/</span>\n <span>{formatTime(showMax && maxDuration ? maxDuration : duration)}</span>\n </div>\n );\n}\n\n// ============================================================================\n// Live Visualizer (for recording mode without WaveSurfer)\n// ============================================================================\n\ninterface LiveVisualizerProps {\n analyser: AnalyserNode | null;\n isActive: boolean;\n height: number;\n barColor?: string;\n}\n\nfunction LiveVisualizer({\n analyser,\n isActive,\n height,\n barColor,\n}: LiveVisualizerProps) {\n const canvasRef = React.useRef<HTMLCanvasElement>(null);\n const animationRef = React.useRef<number | undefined>(undefined);\n\n React.useEffect(() => {\n if (!analyser || !canvasRef.current || !isActive) return;\n\n const canvas = canvasRef.current;\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n const bufferLength = analyser.frequencyBinCount;\n const dataArray = new Uint8Array(bufferLength);\n\n const draw = () => {\n if (!isActive) return;\n\n analyser.getByteFrequencyData(dataArray);\n\n ctx.fillStyle = 'transparent';\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n const barWidth = (canvas.width / bufferLength) * 2.5;\n let x = 0;\n\n for (let i = 0; i < bufferLength; i++) {\n const barHeight = (dataArray[i] / 255) * canvas.height;\n\n // Use CSS variable for primary color or fallback\n ctx.fillStyle =\n barColor ||\n getComputedStyle(document.documentElement).getPropertyValue(\n '--color-primary-500'\n ) ||\n '#3b82f6';\n\n ctx.fillRect(x, canvas.height - barHeight, barWidth, barHeight);\n\n x += barWidth + 1;\n }\n\n animationRef.current = requestAnimationFrame(draw);\n };\n\n draw();\n\n return () => {\n if (animationRef.current) {\n cancelAnimationFrame(animationRef.current);\n }\n };\n }, [analyser, isActive, barColor]);\n\n return (\n <canvas\n ref={canvasRef}\n width={600}\n height={height}\n className=\"w-full\"\n style={{ height }}\n />\n );\n}\n\n// ============================================================================\n// Main Component\n// ============================================================================\n\n/**\n * An audio recorder component with waveform visualization and custom controls.\n * Uses the Web Audio API and WaveSurfer.js for visualization.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <AudioRecorder\n * onRecordingComplete={(blob, duration) => {\n * console.log('Recording complete:', blob, duration);\n * }}\n * />\n *\n * // With max duration and custom styling\n * <AudioRecorder\n * maxDuration={60}\n * variant=\"elevated\"\n * size=\"lg\"\n * waveColor=\"#3b82f6\"\n * progressColor=\"#1d4ed8\"\n * />\n *\n * // Playback mode with pre-loaded audio\n * <AudioRecorder\n * audioUrl=\"/audio/message.wav\"\n * state=\"stopped\"\n * />\n * ```\n */\nfunction AudioRecorder({\n state: controlledState,\n onStateChange,\n onRecordingComplete,\n onRecordingStart,\n onError,\n maxDuration = 0,\n mimeType = 'audio/webm',\n waveColor,\n progressColor,\n cursorColor,\n waveformHeight = 80,\n showTime = true,\n showWaveform = true,\n size,\n variant,\n className,\n 'aria-label': ariaLabel = 'Audio recorder',\n audioUrl,\n disabled = false,\n renderControls,\n}: AudioRecorderProps) {\n // State\n const [internalState, setInternalState] =\n React.useState<AudioRecorderState>('idle');\n const state = controlledState ?? internalState;\n\n const [currentTime, setCurrentTime] = React.useState(0);\n const [duration, setDuration] = React.useState(0);\n const [audioBlob, setAudioBlob] = React.useState<Blob | null>(null);\n const [audioObjectUrl, setAudioObjectUrl] = React.useState<string | null>(\n null\n );\n const [pendingBlob, setPendingBlob] = React.useState<Blob | null>(null);\n\n // Refs\n const waveformRef = React.useRef<HTMLDivElement>(null);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const wavesurferRef = React.useRef<any>(null);\n const mediaRecorderRef = React.useRef<MediaRecorder | null>(null);\n const audioContextRef = React.useRef<AudioContext | null>(null);\n const analyserRef = React.useRef<AnalyserNode | null>(null);\n const streamRef = React.useRef<MediaStream | null>(null);\n const chunksRef = React.useRef<Blob[]>([]);\n const timerRef = React.useRef<number | undefined>(undefined);\n const startTimeRef = React.useRef<number>(0);\n const handleStopRef = React.useRef<() => void>(() => {});\n\n // Update state\n const updateState = React.useCallback(\n (newState: AudioRecorderState) => {\n if (!controlledState) {\n setInternalState(newState);\n }\n onStateChange?.(newState);\n },\n [controlledState, onStateChange]\n );\n\n // Initialize WaveSurfer for playback\n const initWaveSurfer = React.useCallback(async () => {\n if (!waveformRef.current || !showWaveform) return;\n\n // Dynamically import WaveSurfer\n const WaveSurferModule = await import('wavesurfer.js');\n const WaveSurfer = WaveSurferModule.default;\n\n // Destroy existing instance\n if (wavesurferRef.current) {\n wavesurferRef.current.destroy();\n }\n\n // Get computed styles for theming\n const computedStyle = getComputedStyle(document.documentElement);\n const defaultWaveColor =\n computedStyle.getPropertyValue('--color-primary-400').trim() || '#60a5fa';\n const defaultProgressColor =\n computedStyle.getPropertyValue('--color-primary-600').trim() || '#2563eb';\n const defaultCursorColor =\n computedStyle.getPropertyValue('--color-primary-800').trim() || '#1e40af';\n\n wavesurferRef.current = WaveSurfer.create({\n container: waveformRef.current,\n waveColor: waveColor || defaultWaveColor,\n progressColor: progressColor || defaultProgressColor,\n cursorColor: cursorColor || defaultCursorColor,\n cursorWidth: 2,\n height: waveformHeight,\n barWidth: 2,\n barGap: 1,\n barRadius: 2,\n normalize: true,\n hideScrollbar: true,\n });\n\n const ws = wavesurferRef.current;\n\n ws.on('timeupdate', (time: number) => {\n setCurrentTime(time);\n });\n\n ws.on('ready', () => {\n if (wavesurferRef.current) {\n setDuration(wavesurferRef.current.getDuration());\n }\n });\n\n ws.on('finish', () => {\n updateState('stopped');\n });\n }, [\n showWaveform,\n waveColor,\n progressColor,\n cursorColor,\n waveformHeight,\n updateState,\n ]);\n\n // Load audio URL if provided\n React.useEffect(() => {\n if (audioUrl && wavesurferRef.current) {\n wavesurferRef.current.load(audioUrl);\n updateState('stopped');\n }\n }, [audioUrl, updateState]);\n\n // Load pending blob into WaveSurfer after the waveform container becomes available\n React.useEffect(() => {\n if (pendingBlob && waveformRef.current && state === 'stopped') {\n const loadBlob = async () => {\n // Initialize WaveSurfer if needed\n if (!wavesurferRef.current) {\n await initWaveSurfer();\n }\n // Load the blob\n if (wavesurferRef.current && pendingBlob) {\n wavesurferRef.current.loadBlob(pendingBlob);\n setPendingBlob(null);\n }\n };\n // Small delay to ensure the DOM is ready\n const timer = setTimeout(loadBlob, 50);\n return () => clearTimeout(timer);\n }\n }, [pendingBlob, state, initWaveSurfer]);\n\n // Initialize on mount\n React.useEffect(() => {\n initWaveSurfer();\n\n return () => {\n if (wavesurferRef.current) {\n wavesurferRef.current.destroy();\n }\n if (audioContextRef.current) {\n audioContextRef.current.close();\n }\n if (streamRef.current) {\n streamRef.current.getTracks().forEach((track) => track.stop());\n }\n if (audioObjectUrl) {\n URL.revokeObjectURL(audioObjectUrl);\n }\n if (timerRef.current) {\n clearInterval(timerRef.current);\n }\n };\n }, [initWaveSurfer, audioObjectUrl]);\n\n // Start recording\n const handleRecord = React.useCallback(async () => {\n if (disabled) return;\n\n try {\n // Request microphone access\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\n streamRef.current = stream;\n\n // Create audio context for visualization\n audioContextRef.current = new AudioContext();\n const source = audioContextRef.current.createMediaStreamSource(stream);\n analyserRef.current = audioContextRef.current.createAnalyser();\n analyserRef.current.fftSize = 256;\n source.connect(analyserRef.current);\n\n // Create media recorder\n const options = { mimeType };\n if (!MediaRecorder.isTypeSupported(mimeType)) {\n // Fallback to default\n mediaRecorderRef.current = new MediaRecorder(stream);\n } else {\n mediaRecorderRef.current = new MediaRecorder(stream, options);\n }\n\n chunksRef.current = [];\n\n mediaRecorderRef.current.ondataavailable = (e) => {\n if (e.data.size > 0) {\n chunksRef.current.push(e.data);\n }\n };\n\n mediaRecorderRef.current.onstop = async () => {\n const blob = new Blob(chunksRef.current, { type: mimeType });\n setAudioBlob(blob);\n\n // Clean up old URL\n if (audioObjectUrl) {\n URL.revokeObjectURL(audioObjectUrl);\n }\n\n const url = URL.createObjectURL(blob);\n setAudioObjectUrl(url);\n\n // Store the blob to load after the waveform container is rendered\n setPendingBlob(blob);\n\n onRecordingComplete?.(blob, duration);\n updateState('stopped');\n };\n\n // Start recording\n mediaRecorderRef.current.start(100);\n startTimeRef.current = Date.now();\n updateState('recording');\n onRecordingStart?.();\n\n // Start timer\n timerRef.current = window.setInterval(() => {\n const elapsed = (Date.now() - startTimeRef.current) / 1000;\n setCurrentTime(elapsed);\n setDuration(elapsed);\n\n // Check max duration\n if (maxDuration > 0 && elapsed >= maxDuration) {\n handleStopRef.current();\n }\n }, 100);\n } catch (error) {\n onError?.(error as Error);\n updateState('idle');\n }\n }, [\n disabled,\n mimeType,\n maxDuration,\n audioObjectUrl,\n duration,\n onRecordingComplete,\n onRecordingStart,\n onError,\n updateState,\n ]);\n\n // Pause recording\n const handlePause = React.useCallback(() => {\n if (\n mediaRecorderRef.current &&\n mediaRecorderRef.current.state === 'recording'\n ) {\n mediaRecorderRef.current.pause();\n if (timerRef.current) {\n clearInterval(timerRef.current);\n }\n updateState('paused');\n } else if (\n wavesurferRef.current &&\n (state === 'playback' || state === 'stopped')\n ) {\n wavesurferRef.current.pause();\n updateState('paused');\n }\n }, [state, updateState]);\n\n // Resume recording\n const handleResume = React.useCallback(() => {\n if (\n mediaRecorderRef.current &&\n mediaRecorderRef.current.state === 'paused'\n ) {\n mediaRecorderRef.current.resume();\n const pausedTime = currentTime;\n startTimeRef.current = Date.now() - pausedTime * 1000;\n timerRef.current = window.setInterval(() => {\n const elapsed = (Date.now() - startTimeRef.current) / 1000;\n setCurrentTime(elapsed);\n setDuration(elapsed);\n\n if (maxDuration > 0 && elapsed >= maxDuration) {\n handleStopRef.current();\n }\n }, 100);\n updateState('recording');\n } else if (wavesurferRef.current && state === 'paused') {\n wavesurferRef.current.play();\n updateState('playback');\n }\n }, [currentTime, maxDuration, state, updateState]);\n\n // Stop recording\n const handleStop = React.useCallback(() => {\n if (timerRef.current) {\n clearInterval(timerRef.current);\n }\n\n if (\n mediaRecorderRef.current &&\n (mediaRecorderRef.current.state === 'recording' ||\n mediaRecorderRef.current.state === 'paused')\n ) {\n mediaRecorderRef.current.stop();\n }\n\n if (streamRef.current) {\n streamRef.current.getTracks().forEach((track) => track.stop());\n }\n\n if (audioContextRef.current) {\n audioContextRef.current.close();\n audioContextRef.current = null;\n }\n\n analyserRef.current = null;\n // State will be updated in onstop handler\n }, []);\n\n // Keep ref updated for use inside intervals\n handleStopRef.current = handleStop;\n\n // Play recording\n const handlePlay = React.useCallback(() => {\n if (wavesurferRef.current) {\n wavesurferRef.current.play();\n updateState('playback');\n }\n }, [updateState]);\n\n // Seek\n const handleSeek = React.useCallback((time: number) => {\n if (wavesurferRef.current) {\n const progress = time / wavesurferRef.current.getDuration();\n wavesurferRef.current.seekTo(progress);\n setCurrentTime(time);\n }\n }, []);\n\n // Delete recording\n const handleDelete = React.useCallback(() => {\n setAudioBlob(null);\n if (audioObjectUrl) {\n URL.revokeObjectURL(audioObjectUrl);\n setAudioObjectUrl(null);\n }\n setCurrentTime(0);\n setDuration(0);\n updateState('idle');\n }, [audioObjectUrl, updateState]);\n\n // Computed values\n const isRecording = state === 'recording';\n const isPaused = state === 'paused';\n const isPlaying = state === 'playback';\n const hasRecording = audioBlob !== null || audioUrl !== undefined;\n\n // Control render props\n const controlRenderProps: AudioRecorderControlsRenderProps = {\n state,\n currentTime,\n duration,\n isRecording,\n isPaused,\n isPlaying,\n onRecord: handleRecord,\n onPause: handlePause,\n onResume: handleResume,\n onStop: handleStop,\n onPlay: handlePlay,\n onSeek: handleSeek,\n formatTime,\n };\n\n return (\n <div\n className={cn(audioRecorderVariants({ size, variant }), className)}\n data-slot=\"audio-recorder\"\n role=\"group\"\n aria-label={ariaLabel}\n >\n {/* Waveform / Visualizer */}\n {showWaveform && (\n <div\n className={cn(waveformContainerVariants({ state }))}\n data-slot=\"audio-recorder-waveform\"\n style={{ height: waveformHeight }}\n >\n {(state === 'recording' || state === 'listening') && !hasRecording ? (\n <LiveVisualizer\n analyser={analyserRef.current}\n isActive={isRecording}\n height={waveformHeight}\n barColor={waveColor}\n />\n ) : (\n <div ref={waveformRef} className=\"w-full\" />\n )}\n </div>\n )}\n\n {/* Status and Time */}\n {showTime && (\n <div\n className=\"flex items-center justify-between\"\n data-slot=\"audio-recorder-status\"\n >\n <RecordingIndicator isRecording={isRecording} isPaused={isPaused} />\n <TimeDisplay\n currentTime={currentTime}\n duration={duration}\n maxDuration={maxDuration}\n showMax={isRecording || isPaused}\n />\n </div>\n )}\n\n {/* Controls */}\n {renderControls ? (\n renderControls(controlRenderProps)\n ) : (\n <DefaultControls\n {...controlRenderProps}\n disabled={disabled}\n hasRecording={hasRecording}\n onDelete={handleDelete}\n />\n )}\n </div>\n );\n}\n\nAudioRecorder.displayName = 'AudioRecorder';\n\n// ============================================================================\n// Default Controls\n// ============================================================================\n\ninterface DefaultControlsProps extends AudioRecorderControlsRenderProps {\n disabled?: boolean;\n hasRecording: boolean;\n onDelete: () => void;\n}\n\nfunction DefaultControls({\n state,\n isRecording,\n isPaused,\n isPlaying,\n hasRecording,\n disabled,\n onRecord,\n onPause,\n onResume,\n onStop,\n onPlay,\n onDelete,\n}: DefaultControlsProps) {\n return (\n <div\n className=\"flex items-center justify-center gap-3\"\n data-slot=\"audio-recorder-controls\"\n >\n {/* Delete button - only when we have a recording */}\n {hasRecording && !isRecording && (\n <button\n type=\"button\"\n onClick={onDelete}\n disabled={disabled}\n className={cn(\n controlButtonVariants({ variant: 'ghost', size: 'md' })\n )}\n aria-label=\"Delete recording\"\n >\n <TrashIcon className=\"h-5 w-5\" />\n </button>\n )}\n\n {/* Main control button */}\n {state === 'idle' && (\n <button\n type=\"button\"\n onClick={onRecord}\n disabled={disabled}\n className={cn(\n controlButtonVariants({ variant: 'danger', size: 'lg' })\n )}\n aria-label=\"Start recording\"\n >\n <MicrophoneIcon className=\"h-6 w-6\" />\n </button>\n )}\n\n {isRecording && (\n <>\n <button\n type=\"button\"\n onClick={onPause}\n disabled={disabled}\n className={cn(\n controlButtonVariants({ variant: 'secondary', size: 'md' })\n )}\n aria-label=\"Pause recording\"\n >\n <PauseIcon className=\"h-5 w-5\" />\n </button>\n <button\n type=\"button\"\n onClick={onStop}\n disabled={disabled}\n className={cn(\n controlButtonVariants({ variant: 'danger', size: 'lg' })\n )}\n aria-label=\"Stop recording\"\n >\n <StopIcon className=\"h-6 w-6\" />\n </button>\n </>\n )}\n\n {isPaused && !hasRecording && (\n <>\n <button\n type=\"button\"\n onClick={onResume}\n disabled={disabled}\n className={cn(\n controlButtonVariants({ variant: 'danger', size: 'lg' })\n )}\n aria-label=\"Resume recording\"\n >\n <MicrophoneIcon className=\"h-6 w-6\" />\n </button>\n <button\n type=\"button\"\n onClick={onStop}\n disabled={disabled}\n className={cn(\n controlButtonVariants({ variant: 'secondary', size: 'md' })\n )}\n aria-label=\"Stop recording\"\n >\n <StopIcon className=\"h-5 w-5\" />\n </button>\n </>\n )}\n\n {(state === 'stopped' || (isPaused && hasRecording)) && hasRecording && (\n <button\n type=\"button\"\n onClick={isPlaying || isPaused ? onPause : onPlay}\n disabled={disabled}\n className={cn(\n controlButtonVariants({ variant: 'primary', size: 'lg' })\n )}\n aria-label={\n isPaused\n ? 'Resume playback'\n : isPlaying\n ? 'Pause playback'\n : 'Play recording'\n }\n >\n {isPaused || !isPlaying ? (\n <PlayIcon className=\"h-6 w-6\" />\n ) : (\n <PauseIcon className=\"h-6 w-6\" />\n )}\n </button>\n )}\n\n {isPlaying && (\n <button\n type=\"button\"\n onClick={onPause}\n disabled={disabled}\n className={cn(\n controlButtonVariants({ variant: 'primary', size: 'lg' })\n )}\n aria-label=\"Pause playback\"\n >\n <PauseIcon className=\"h-6 w-6\" />\n </button>\n )}\n </div>\n );\n}\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport {\n AudioRecorder,\n audioRecorderVariants,\n waveformContainerVariants,\n controlButtonVariants,\n formatTime,\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/AudioRecorder/AudioRecorder.tsx"],"names":[],"mappings":"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","file":"chunk-2DW4PUJD.js","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\n// ============================================================================\n// Types & Interfaces\n// ============================================================================\n\nexport type AudioRecorderState =\n | 'idle'\n | 'listening'\n | 'recording'\n | 'paused'\n | 'stopped'\n | 'playback';\n\nexport interface AudioRecorderProps extends VariantProps<\n typeof audioRecorderVariants\n> {\n /** Current state of the recorder */\n state?: AudioRecorderState;\n /** Callback when state changes */\n onStateChange?: (state: AudioRecorderState) => void;\n /** Callback when recording is complete with the audio blob */\n onRecordingComplete?: (blob: Blob, duration: number) => void;\n /** Callback when recording starts */\n onRecordingStart?: () => void;\n /** Callback when an error occurs */\n onError?: (error: Error) => void;\n /** Maximum recording duration in seconds (0 for unlimited) */\n maxDuration?: number;\n /** Audio MIME type */\n mimeType?: string;\n /** Waveform color (uses theme primary by default) */\n waveColor?: string;\n /** Progress/recorded waveform color */\n progressColor?: string;\n /** Cursor color */\n cursorColor?: string;\n /** Height of the waveform display */\n waveformHeight?: number;\n /** Show time display */\n showTime?: boolean;\n /** Show waveform visualization */\n showWaveform?: boolean;\n /** Additional class name */\n className?: string;\n /** Accessible label */\n 'aria-label'?: string;\n /** Pre-loaded audio URL for playback mode */\n audioUrl?: string;\n /** Whether the component is disabled */\n disabled?: boolean;\n /** Custom controls render function */\n renderControls?: (props: AudioRecorderControlsRenderProps) => React.ReactNode;\n}\n\nexport interface AudioRecorderControlsRenderProps {\n state: AudioRecorderState;\n currentTime: number;\n duration: number;\n isRecording: boolean;\n isPaused: boolean;\n isPlaying: boolean;\n onRecord: () => void;\n onPause: () => void;\n onResume: () => void;\n onStop: () => void;\n onPlay: () => void;\n onSeek: (time: number) => void;\n formatTime: (seconds: number) => string;\n}\n\n// ============================================================================\n// Variants\n// ============================================================================\n\nconst audioRecorderVariants = cva(\n [\n 'relative flex flex-col gap-3',\n 'rounded-xl border border-border',\n 'bg-card text-card-foreground',\n 'transition-all duration-200',\n ],\n {\n variants: {\n size: {\n sm: 'p-3',\n md: 'p-4',\n lg: 'p-5',\n },\n variant: {\n default: '',\n minimal: 'border-none bg-transparent shadow-none',\n elevated: 'shadow-lg border-0',\n },\n },\n defaultVariants: {\n size: 'md',\n variant: 'default',\n },\n }\n);\n\nconst waveformContainerVariants = cva(\n [\n 'relative w-full overflow-hidden rounded-lg',\n 'bg-neutral-100 dark:bg-neutral-800',\n 'transition-all duration-200',\n ],\n {\n variants: {\n state: {\n idle: 'opacity-50',\n listening: 'opacity-75',\n recording: '',\n paused: 'opacity-90',\n stopped: '',\n playback: '',\n },\n },\n defaultVariants: {\n state: 'idle',\n },\n }\n);\n\nconst controlButtonVariants = cva(\n [\n 'inline-flex items-center justify-center',\n 'rounded-full transition-all duration-200',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'disabled:pointer-events-none disabled:opacity-50',\n 'active:scale-95',\n ],\n {\n variants: {\n variant: {\n primary: [\n 'bg-primary-800 text-white',\n 'hover:bg-primary-900',\n 'active:bg-primary-800',\n ],\n secondary: [\n 'bg-neutral-200 text-neutral-700',\n 'hover:bg-neutral-300',\n 'dark:bg-neutral-700 dark:text-neutral-200',\n 'dark:hover:bg-neutral-600',\n ],\n danger: [\n 'bg-red-600 text-white',\n 'hover:bg-red-700',\n 'active:bg-red-800',\n ],\n ghost: [\n 'bg-transparent text-neutral-600',\n 'hover:bg-neutral-100',\n 'dark:text-neutral-400 dark:hover:bg-neutral-800',\n ],\n },\n size: {\n sm: 'h-8 w-8',\n md: 'h-10 w-10',\n lg: 'h-12 w-12',\n },\n },\n defaultVariants: {\n variant: 'primary',\n size: 'md',\n },\n }\n);\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\nfunction formatTime(seconds: number): string {\n const mins = Math.floor(seconds / 60);\n const secs = Math.floor(seconds % 60);\n return `${mins}:${secs.toString().padStart(2, '0')}`;\n}\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nfunction MicrophoneIcon({ className }: { className?: string }) {\n return (\n <svg\n className={className}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={2}\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M12 18.75a6 6 0 006-6v-1.5m-6 7.5a6 6 0 01-6-6v-1.5m6 7.5v3.75m-3.75 0h7.5M12 15.75a3 3 0 01-3-3V4.5a3 3 0 116 0v8.25a3 3 0 01-3 3z\"\n />\n </svg>\n );\n}\n\nfunction StopIcon({ className }: { className?: string }) {\n return (\n <svg\n className={className}\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" rx=\"2\" />\n </svg>\n );\n}\n\nfunction PlayIcon({ className }: { className?: string }) {\n return (\n <svg\n className={className}\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path d=\"M8 5.14v14l11-7-11-7z\" />\n </svg>\n );\n}\n\nfunction PauseIcon({ className }: { className?: string }) {\n return (\n <svg\n className={className}\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path d=\"M6 4h4v16H6V4zm8 0h4v16h-4V4z\" />\n </svg>\n );\n}\n\nfunction TrashIcon({ className }: { className?: string }) {\n return (\n <svg\n className={className}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={2}\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M14.74 9l-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 01-2.244 2.077H8.084a2.25 2.25 0 01-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 00-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 013.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 00-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 00-7.5 0\"\n />\n </svg>\n );\n}\n\n// ============================================================================\n// Recording Indicator\n// ============================================================================\n\ninterface RecordingIndicatorProps {\n isRecording: boolean;\n isPaused: boolean;\n}\n\nfunction RecordingIndicator({\n isRecording,\n isPaused,\n}: RecordingIndicatorProps) {\n if (!isRecording && !isPaused) return null;\n\n return (\n <div\n className=\"flex items-center gap-2\"\n data-slot=\"audio-recorder-indicator\"\n >\n <div\n className={cn(\n 'h-3 w-3 rounded-full',\n isRecording && !isPaused\n ? 'animate-pulse bg-red-500'\n : 'bg-yellow-500'\n )}\n aria-hidden=\"true\"\n />\n <span className=\"text-muted-foreground text-sm font-medium\">\n {isPaused ? 'Paused' : 'Recording'}\n </span>\n </div>\n );\n}\n\n// ============================================================================\n// Time Display\n// ============================================================================\n\ninterface TimeDisplayProps {\n currentTime: number;\n duration: number;\n maxDuration?: number;\n showMax?: boolean;\n}\n\nfunction TimeDisplay({\n currentTime,\n duration,\n maxDuration,\n showMax,\n}: TimeDisplayProps) {\n return (\n <div\n className=\"text-muted-foreground flex items-center gap-1 font-mono text-sm\"\n data-slot=\"audio-recorder-time\"\n >\n <span>{formatTime(currentTime)}</span>\n <span>/</span>\n <span>{formatTime(showMax && maxDuration ? maxDuration : duration)}</span>\n </div>\n );\n}\n\n// ============================================================================\n// Live Visualizer (for recording mode without WaveSurfer)\n// ============================================================================\n\ninterface LiveVisualizerProps {\n analyser: AnalyserNode | null;\n isActive: boolean;\n height: number;\n barColor?: string;\n}\n\nfunction LiveVisualizer({\n analyser,\n isActive,\n height,\n barColor,\n}: LiveVisualizerProps) {\n const canvasRef = React.useRef<HTMLCanvasElement>(null);\n const animationRef = React.useRef<number | undefined>(undefined);\n\n React.useEffect(() => {\n if (!analyser || !canvasRef.current || !isActive) return;\n\n const canvas = canvasRef.current;\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n const bufferLength = analyser.frequencyBinCount;\n const dataArray = new Uint8Array(bufferLength);\n\n const draw = () => {\n if (!isActive) return;\n\n analyser.getByteFrequencyData(dataArray);\n\n ctx.fillStyle = 'transparent';\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n const barWidth = (canvas.width / bufferLength) * 2.5;\n let x = 0;\n\n for (let i = 0; i < bufferLength; i++) {\n const barHeight = (dataArray[i] / 255) * canvas.height;\n\n // Use CSS variable for primary color or fallback\n ctx.fillStyle =\n barColor ||\n getComputedStyle(document.documentElement).getPropertyValue(\n '--color-primary-500'\n ) ||\n '#3b82f6';\n\n ctx.fillRect(x, canvas.height - barHeight, barWidth, barHeight);\n\n x += barWidth + 1;\n }\n\n animationRef.current = requestAnimationFrame(draw);\n };\n\n draw();\n\n return () => {\n if (animationRef.current) {\n cancelAnimationFrame(animationRef.current);\n }\n };\n }, [analyser, isActive, barColor]);\n\n return (\n <canvas\n ref={canvasRef}\n width={600}\n height={height}\n className=\"w-full\"\n style={{ height }}\n />\n );\n}\n\n// ============================================================================\n// Main Component\n// ============================================================================\n\n/**\n * An audio recorder component with waveform visualization and custom controls.\n * Uses the Web Audio API and WaveSurfer.js for visualization.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <AudioRecorder\n * onRecordingComplete={(blob, duration) => {\n * console.log('Recording complete:', blob, duration);\n * }}\n * />\n *\n * // With max duration and custom styling\n * <AudioRecorder\n * maxDuration={60}\n * variant=\"elevated\"\n * size=\"lg\"\n * waveColor=\"#3b82f6\"\n * progressColor=\"#1d4ed8\"\n * />\n *\n * // Playback mode with pre-loaded audio\n * <AudioRecorder\n * audioUrl=\"/audio/message.wav\"\n * state=\"stopped\"\n * />\n * ```\n */\nfunction AudioRecorder({\n state: controlledState,\n onStateChange,\n onRecordingComplete,\n onRecordingStart,\n onError,\n maxDuration = 0,\n mimeType = 'audio/webm',\n waveColor,\n progressColor,\n cursorColor,\n waveformHeight = 80,\n showTime = true,\n showWaveform = true,\n size,\n variant,\n className,\n 'aria-label': ariaLabel = 'Audio recorder',\n audioUrl,\n disabled = false,\n renderControls,\n}: AudioRecorderProps) {\n // State\n const [internalState, setInternalState] =\n React.useState<AudioRecorderState>('idle');\n const state = controlledState ?? internalState;\n\n const [currentTime, setCurrentTime] = React.useState(0);\n const [duration, setDuration] = React.useState(0);\n const [audioBlob, setAudioBlob] = React.useState<Blob | null>(null);\n const [audioObjectUrl, setAudioObjectUrl] = React.useState<string | null>(\n null\n );\n const [pendingBlob, setPendingBlob] = React.useState<Blob | null>(null);\n\n // Refs\n const waveformRef = React.useRef<HTMLDivElement>(null);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const wavesurferRef = React.useRef<any>(null);\n const mediaRecorderRef = React.useRef<MediaRecorder | null>(null);\n const audioContextRef = React.useRef<AudioContext | null>(null);\n const analyserRef = React.useRef<AnalyserNode | null>(null);\n const streamRef = React.useRef<MediaStream | null>(null);\n const chunksRef = React.useRef<Blob[]>([]);\n const timerRef = React.useRef<number | undefined>(undefined);\n const startTimeRef = React.useRef<number>(0);\n const handleStopRef = React.useRef<() => void>(() => {});\n\n // Update state\n const updateState = React.useCallback(\n (newState: AudioRecorderState) => {\n if (!controlledState) {\n setInternalState(newState);\n }\n onStateChange?.(newState);\n },\n [controlledState, onStateChange]\n );\n\n // Initialize WaveSurfer for playback\n const initWaveSurfer = React.useCallback(async () => {\n if (!waveformRef.current || !showWaveform) return;\n\n // Dynamically import WaveSurfer\n const WaveSurferModule = await import('wavesurfer.js');\n const WaveSurfer = WaveSurferModule.default;\n\n // Destroy existing instance\n if (wavesurferRef.current) {\n wavesurferRef.current.destroy();\n }\n\n // Get computed styles for theming\n const computedStyle = getComputedStyle(document.documentElement);\n const defaultWaveColor =\n computedStyle.getPropertyValue('--color-primary-400').trim() || '#60a5fa';\n const defaultProgressColor =\n computedStyle.getPropertyValue('--color-primary-600').trim() || '#2563eb';\n const defaultCursorColor =\n computedStyle.getPropertyValue('--color-primary-800').trim() || '#1e40af';\n\n wavesurferRef.current = WaveSurfer.create({\n container: waveformRef.current,\n waveColor: waveColor || defaultWaveColor,\n progressColor: progressColor || defaultProgressColor,\n cursorColor: cursorColor || defaultCursorColor,\n cursorWidth: 2,\n height: waveformHeight,\n barWidth: 2,\n barGap: 1,\n barRadius: 2,\n normalize: true,\n hideScrollbar: true,\n });\n\n const ws = wavesurferRef.current;\n\n ws.on('timeupdate', (time: number) => {\n setCurrentTime(time);\n });\n\n ws.on('ready', () => {\n if (wavesurferRef.current) {\n setDuration(wavesurferRef.current.getDuration());\n }\n });\n\n ws.on('finish', () => {\n updateState('stopped');\n });\n }, [\n showWaveform,\n waveColor,\n progressColor,\n cursorColor,\n waveformHeight,\n updateState,\n ]);\n\n // Load audio URL if provided\n React.useEffect(() => {\n if (audioUrl && wavesurferRef.current) {\n wavesurferRef.current.load(audioUrl);\n updateState('stopped');\n }\n }, [audioUrl, updateState]);\n\n // Load pending blob into WaveSurfer after the waveform container becomes available\n React.useEffect(() => {\n if (pendingBlob && waveformRef.current && state === 'stopped') {\n const loadBlob = async () => {\n // Initialize WaveSurfer if needed\n if (!wavesurferRef.current) {\n await initWaveSurfer();\n }\n // Load the blob\n if (wavesurferRef.current && pendingBlob) {\n wavesurferRef.current.loadBlob(pendingBlob);\n setPendingBlob(null);\n }\n };\n // Small delay to ensure the DOM is ready\n const timer = setTimeout(loadBlob, 50);\n return () => clearTimeout(timer);\n }\n }, [pendingBlob, state, initWaveSurfer]);\n\n // Initialize on mount\n React.useEffect(() => {\n initWaveSurfer();\n\n return () => {\n if (wavesurferRef.current) {\n wavesurferRef.current.destroy();\n }\n if (audioContextRef.current) {\n audioContextRef.current.close();\n }\n if (streamRef.current) {\n streamRef.current.getTracks().forEach((track) => track.stop());\n }\n if (audioObjectUrl) {\n URL.revokeObjectURL(audioObjectUrl);\n }\n if (timerRef.current) {\n clearInterval(timerRef.current);\n }\n };\n }, [initWaveSurfer, audioObjectUrl]);\n\n // Start recording\n const handleRecord = React.useCallback(async () => {\n if (disabled) return;\n\n try {\n // Request microphone access\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\n streamRef.current = stream;\n\n // Create audio context for visualization\n audioContextRef.current = new AudioContext();\n const source = audioContextRef.current.createMediaStreamSource(stream);\n analyserRef.current = audioContextRef.current.createAnalyser();\n analyserRef.current.fftSize = 256;\n source.connect(analyserRef.current);\n\n // Create media recorder\n const options = { mimeType };\n if (!MediaRecorder.isTypeSupported(mimeType)) {\n // Fallback to default\n mediaRecorderRef.current = new MediaRecorder(stream);\n } else {\n mediaRecorderRef.current = new MediaRecorder(stream, options);\n }\n\n chunksRef.current = [];\n\n mediaRecorderRef.current.ondataavailable = (e) => {\n if (e.data.size > 0) {\n chunksRef.current.push(e.data);\n }\n };\n\n mediaRecorderRef.current.onstop = async () => {\n const blob = new Blob(chunksRef.current, { type: mimeType });\n setAudioBlob(blob);\n\n // Clean up old URL\n if (audioObjectUrl) {\n URL.revokeObjectURL(audioObjectUrl);\n }\n\n const url = URL.createObjectURL(blob);\n setAudioObjectUrl(url);\n\n // Store the blob to load after the waveform container is rendered\n setPendingBlob(blob);\n\n onRecordingComplete?.(blob, duration);\n updateState('stopped');\n };\n\n // Start recording\n mediaRecorderRef.current.start(100);\n startTimeRef.current = Date.now();\n updateState('recording');\n onRecordingStart?.();\n\n // Start timer\n timerRef.current = window.setInterval(() => {\n const elapsed = (Date.now() - startTimeRef.current) / 1000;\n setCurrentTime(elapsed);\n setDuration(elapsed);\n\n // Check max duration\n if (maxDuration > 0 && elapsed >= maxDuration) {\n handleStopRef.current();\n }\n }, 100);\n } catch (error) {\n onError?.(error as Error);\n updateState('idle');\n }\n }, [\n disabled,\n mimeType,\n maxDuration,\n audioObjectUrl,\n duration,\n onRecordingComplete,\n onRecordingStart,\n onError,\n updateState,\n ]);\n\n // Pause recording\n const handlePause = React.useCallback(() => {\n if (\n mediaRecorderRef.current &&\n mediaRecorderRef.current.state === 'recording'\n ) {\n mediaRecorderRef.current.pause();\n if (timerRef.current) {\n clearInterval(timerRef.current);\n }\n updateState('paused');\n } else if (\n wavesurferRef.current &&\n (state === 'playback' || state === 'stopped')\n ) {\n wavesurferRef.current.pause();\n updateState('paused');\n }\n }, [state, updateState]);\n\n // Resume recording\n const handleResume = React.useCallback(() => {\n if (\n mediaRecorderRef.current &&\n mediaRecorderRef.current.state === 'paused'\n ) {\n mediaRecorderRef.current.resume();\n const pausedTime = currentTime;\n startTimeRef.current = Date.now() - pausedTime * 1000;\n timerRef.current = window.setInterval(() => {\n const elapsed = (Date.now() - startTimeRef.current) / 1000;\n setCurrentTime(elapsed);\n setDuration(elapsed);\n\n if (maxDuration > 0 && elapsed >= maxDuration) {\n handleStopRef.current();\n }\n }, 100);\n updateState('recording');\n } else if (wavesurferRef.current && state === 'paused') {\n wavesurferRef.current.play();\n updateState('playback');\n }\n }, [currentTime, maxDuration, state, updateState]);\n\n // Stop recording\n const handleStop = React.useCallback(() => {\n if (timerRef.current) {\n clearInterval(timerRef.current);\n }\n\n if (\n mediaRecorderRef.current &&\n (mediaRecorderRef.current.state === 'recording' ||\n mediaRecorderRef.current.state === 'paused')\n ) {\n mediaRecorderRef.current.stop();\n }\n\n if (streamRef.current) {\n streamRef.current.getTracks().forEach((track) => track.stop());\n }\n\n if (audioContextRef.current) {\n audioContextRef.current.close();\n audioContextRef.current = null;\n }\n\n analyserRef.current = null;\n // State will be updated in onstop handler\n }, []);\n\n // Keep ref updated for use inside intervals\n handleStopRef.current = handleStop;\n\n // Play recording\n const handlePlay = React.useCallback(() => {\n if (wavesurferRef.current) {\n wavesurferRef.current.play();\n updateState('playback');\n }\n }, [updateState]);\n\n // Seek\n const handleSeek = React.useCallback((time: number) => {\n if (wavesurferRef.current) {\n const progress = time / wavesurferRef.current.getDuration();\n wavesurferRef.current.seekTo(progress);\n setCurrentTime(time);\n }\n }, []);\n\n // Delete recording\n const handleDelete = React.useCallback(() => {\n setAudioBlob(null);\n if (audioObjectUrl) {\n URL.revokeObjectURL(audioObjectUrl);\n setAudioObjectUrl(null);\n }\n setCurrentTime(0);\n setDuration(0);\n updateState('idle');\n }, [audioObjectUrl, updateState]);\n\n // Computed values\n const isRecording = state === 'recording';\n const isPaused = state === 'paused';\n const isPlaying = state === 'playback';\n const hasRecording = audioBlob !== null || audioUrl !== undefined;\n\n // Control render props\n const controlRenderProps: AudioRecorderControlsRenderProps = {\n state,\n currentTime,\n duration,\n isRecording,\n isPaused,\n isPlaying,\n onRecord: handleRecord,\n onPause: handlePause,\n onResume: handleResume,\n onStop: handleStop,\n onPlay: handlePlay,\n onSeek: handleSeek,\n formatTime,\n };\n\n return (\n <div\n className={cn(audioRecorderVariants({ size, variant }), className)}\n data-slot=\"audio-recorder\"\n role=\"group\"\n aria-label={ariaLabel}\n >\n {/* Waveform / Visualizer */}\n {showWaveform && (\n <div\n className={cn(waveformContainerVariants({ state }))}\n data-slot=\"audio-recorder-waveform\"\n style={{ height: waveformHeight }}\n >\n {(state === 'recording' || state === 'listening') && !hasRecording ? (\n <LiveVisualizer\n analyser={analyserRef.current}\n isActive={isRecording}\n height={waveformHeight}\n barColor={waveColor}\n />\n ) : (\n <div ref={waveformRef} className=\"w-full\" />\n )}\n </div>\n )}\n\n {/* Status and Time */}\n {showTime && (\n <div\n className=\"flex items-center justify-between\"\n data-slot=\"audio-recorder-status\"\n >\n <RecordingIndicator isRecording={isRecording} isPaused={isPaused} />\n <TimeDisplay\n currentTime={currentTime}\n duration={duration}\n maxDuration={maxDuration}\n showMax={isRecording || isPaused}\n />\n </div>\n )}\n\n {/* Controls */}\n {renderControls ? (\n renderControls(controlRenderProps)\n ) : (\n <DefaultControls\n {...controlRenderProps}\n disabled={disabled}\n hasRecording={hasRecording}\n onDelete={handleDelete}\n />\n )}\n </div>\n );\n}\n\nAudioRecorder.displayName = 'AudioRecorder';\n\n// ============================================================================\n// Default Controls\n// ============================================================================\n\ninterface DefaultControlsProps extends AudioRecorderControlsRenderProps {\n disabled?: boolean;\n hasRecording: boolean;\n onDelete: () => void;\n}\n\nfunction DefaultControls({\n state,\n isRecording,\n isPaused,\n isPlaying,\n hasRecording,\n disabled,\n onRecord,\n onPause,\n onResume,\n onStop,\n onPlay,\n onDelete,\n}: DefaultControlsProps) {\n return (\n <div\n className=\"flex items-center justify-center gap-3\"\n data-slot=\"audio-recorder-controls\"\n >\n {/* Delete button - only when we have a recording */}\n {hasRecording && !isRecording && (\n <button\n type=\"button\"\n onClick={onDelete}\n disabled={disabled}\n className={cn(\n controlButtonVariants({ variant: 'ghost', size: 'md' })\n )}\n aria-label=\"Delete recording\"\n >\n <TrashIcon className=\"h-5 w-5\" />\n </button>\n )}\n\n {/* Main control button */}\n {state === 'idle' && (\n <button\n type=\"button\"\n onClick={onRecord}\n disabled={disabled}\n className={cn(\n controlButtonVariants({ variant: 'danger', size: 'lg' })\n )}\n aria-label=\"Start recording\"\n >\n <MicrophoneIcon className=\"h-6 w-6\" />\n </button>\n )}\n\n {isRecording && (\n <>\n <button\n type=\"button\"\n onClick={onPause}\n disabled={disabled}\n className={cn(\n controlButtonVariants({ variant: 'secondary', size: 'md' })\n )}\n aria-label=\"Pause recording\"\n >\n <PauseIcon className=\"h-5 w-5\" />\n </button>\n <button\n type=\"button\"\n onClick={onStop}\n disabled={disabled}\n className={cn(\n controlButtonVariants({ variant: 'danger', size: 'lg' })\n )}\n aria-label=\"Stop recording\"\n >\n <StopIcon className=\"h-6 w-6\" />\n </button>\n </>\n )}\n\n {isPaused && !hasRecording && (\n <>\n <button\n type=\"button\"\n onClick={onResume}\n disabled={disabled}\n className={cn(\n controlButtonVariants({ variant: 'danger', size: 'lg' })\n )}\n aria-label=\"Resume recording\"\n >\n <MicrophoneIcon className=\"h-6 w-6\" />\n </button>\n <button\n type=\"button\"\n onClick={onStop}\n disabled={disabled}\n className={cn(\n controlButtonVariants({ variant: 'secondary', size: 'md' })\n )}\n aria-label=\"Stop recording\"\n >\n <StopIcon className=\"h-5 w-5\" />\n </button>\n </>\n )}\n\n {(state === 'stopped' || (isPaused && hasRecording)) && hasRecording && (\n <button\n type=\"button\"\n onClick={isPlaying || isPaused ? onPause : onPlay}\n disabled={disabled}\n className={cn(\n controlButtonVariants({ variant: 'primary', size: 'lg' })\n )}\n aria-label={\n isPaused\n ? 'Resume playback'\n : isPlaying\n ? 'Pause playback'\n : 'Play recording'\n }\n >\n {isPaused || !isPlaying ? (\n <PlayIcon className=\"h-6 w-6\" />\n ) : (\n <PauseIcon className=\"h-6 w-6\" />\n )}\n </button>\n )}\n\n {isPlaying && (\n <button\n type=\"button\"\n onClick={onPause}\n disabled={disabled}\n className={cn(\n controlButtonVariants({ variant: 'primary', size: 'lg' })\n )}\n aria-label=\"Pause playback\"\n >\n <PauseIcon className=\"h-6 w-6\" />\n </button>\n )}\n </div>\n );\n}\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport {\n AudioRecorder,\n audioRecorderVariants,\n waveformContainerVariants,\n controlButtonVariants,\n formatTime,\n};\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Input } from './chunk-
|
|
1
|
+
import { Input } from './chunk-YXCE2HSK.js';
|
|
2
2
|
import { formatPhoneNumber, unformatPhoneNumber, isValidPhoneNumber } from './chunk-ZVPJ2MH6.js';
|
|
3
|
-
import { cn } from './chunk-
|
|
3
|
+
import { cn } from './chunk-TQONQSJO.js';
|
|
4
4
|
import * as React from 'react';
|
|
5
5
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
6
6
|
|
|
@@ -245,5 +245,5 @@ function PhoneInputGroup({
|
|
|
245
245
|
PhoneInputGroup.displayName = "PhoneInputGroup";
|
|
246
246
|
|
|
247
247
|
export { PhoneInput, PhoneInputGroup };
|
|
248
|
-
//# sourceMappingURL=chunk-
|
|
249
|
-
//# sourceMappingURL=chunk-
|
|
248
|
+
//# sourceMappingURL=chunk-3D4ITDLO.js.map
|
|
249
|
+
//# sourceMappingURL=chunk-3D4ITDLO.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/PhoneInput/PhoneInput.tsx"],"names":[],"mappings":"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","file":"chunk-OX2RIVN7.js","sourcesContent":["import * as React from 'react';\nimport { cn } from '../../utils/cn';\nimport {\n formatPhoneNumber,\n unformatPhoneNumber,\n isValidPhoneNumber,\n} from '../../utils/phone';\nimport { Input, type InputProps } from '../Input';\n\nexport interface PhoneInputProps extends Omit<\n InputProps,\n 'type' | 'onChange' | 'value'\n> {\n /** The phone number value (can be formatted or unformatted) */\n value?: string;\n /** Callback fired when the value changes, receives the unformatted value */\n onChange?: (value: string) => void;\n /** Callback fired when the formatted value changes */\n onFormattedChange?: (formattedValue: string) => void;\n /** Whether to validate and show error state for incomplete phone numbers */\n validateOnBlur?: boolean;\n}\n\n/**\n * A phone number input that automatically formats to US format: (XXX) XXX-XXXX\n *\n * @example\n * ```tsx\n * const [phone, setPhone] = useState('');\n * <PhoneInput\n * label=\"Phone Number\"\n * value={phone}\n * onChange={setPhone}\n * validateOnBlur\n * />\n * ```\n */\nconst PhoneInput = React.forwardRef<HTMLInputElement, PhoneInputProps>(\n (\n {\n value = '',\n onChange,\n onFormattedChange,\n validateOnBlur,\n className,\n onBlur,\n hasError,\n error,\n ...props\n },\n ref\n ) => {\n const [displayValue, setDisplayValue] = React.useState(() =>\n formatPhoneNumber(value)\n );\n const [localError, setLocalError] = React.useState<string | undefined>();\n\n // Sync external value changes\n React.useEffect(() => {\n setDisplayValue(formatPhoneNumber(value));\n }, [value]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const formatted = formatPhoneNumber(e.target.value);\n setDisplayValue(formatted);\n\n const unformatted = unformatPhoneNumber(formatted);\n onChange?.(unformatted);\n onFormattedChange?.(formatted);\n\n // Clear error when user starts typing again\n if (localError) {\n setLocalError(undefined);\n }\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n onBlur?.(e);\n\n if (validateOnBlur) {\n const unformatted = unformatPhoneNumber(displayValue);\n if (unformatted.length > 0 && !isValidPhoneNumber(displayValue)) {\n setLocalError('Please enter a valid 10-digit phone number');\n } else {\n setLocalError(undefined);\n }\n }\n };\n\n return (\n <Input\n ref={ref}\n type=\"tel\"\n inputMode=\"numeric\"\n autoComplete=\"tel-national\"\n placeholder=\"(555) 555-5555\"\n value={displayValue}\n onChange={handleChange}\n onBlur={handleBlur}\n hasError={hasError || !!localError}\n error={error || localError}\n className={cn(className)}\n {...props}\n />\n );\n }\n);\n\nPhoneInput.displayName = 'PhoneInput';\n\n// =============================================================================\n// Phone Types\n// =============================================================================\n\nexport type PhoneType = 'cell' | 'landline' | 'home' | 'work' | 'fax';\n\nexport interface PhoneEntry {\n number: string;\n type: PhoneType;\n}\n\nconst PHONE_TYPES: { value: PhoneType; label: string }[] = [\n { value: 'cell', label: 'Cell' },\n { value: 'landline', label: 'Landline' },\n { value: 'home', label: 'Home' },\n { value: 'work', label: 'Work' },\n { value: 'fax', label: 'Fax' },\n];\n\n// =============================================================================\n// PhoneInputGroup\n// =============================================================================\n\nexport interface PhoneInputGroupProps {\n /** Array of phone entries */\n value: PhoneEntry[];\n /** Callback when phone entries change */\n onChange: (phones: PhoneEntry[]) => void;\n /** Minimum number of phone entries (default: 1) */\n minEntries?: number;\n /** Maximum number of phone entries (default: 5) */\n maxEntries?: number;\n /** Whether the first entry is required */\n required?: boolean;\n /** Whether all inputs are disabled */\n disabled?: boolean;\n /** Validate on blur */\n validateOnBlur?: boolean;\n /** Label for the phone input */\n label?: string;\n /** Labels for type options (for i18n) */\n typeLabels?: Record<PhoneType, string>;\n /** Custom className */\n className?: string;\n}\n\n/**\n * A group of phone inputs with type selection and add/remove functionality.\n *\n * @example\n * ```tsx\n * const [phones, setPhones] = useState<PhoneEntry[]>([\n * { number: '', type: 'cell' }\n * ]);\n *\n * <PhoneInputGroup\n * value={phones}\n * onChange={setPhones}\n * required\n * />\n * ```\n */\nfunction PhoneInputGroup({\n value,\n onChange,\n minEntries = 1,\n maxEntries = 5,\n required = false,\n disabled = false,\n validateOnBlur = false,\n label,\n typeLabels,\n className,\n}: PhoneInputGroupProps) {\n // Ensure we always have at least minEntries\n const phones = React.useMemo(() => {\n if (value.length >= minEntries) return value;\n const padding: PhoneEntry[] = Array(minEntries - value.length)\n .fill(null)\n .map(() => ({ number: '', type: 'cell' as PhoneType }));\n return [...value, ...padding];\n }, [value, minEntries]);\n\n const handlePhoneChange = (index: number, number: string) => {\n const updated = [...phones];\n updated[index] = { ...updated[index], number };\n onChange(updated);\n };\n\n const handleTypeChange = (index: number, type: PhoneType) => {\n const updated = [...phones];\n updated[index] = { ...updated[index], type };\n onChange(updated);\n };\n\n const handleAdd = () => {\n if (phones.length < maxEntries) {\n onChange([...phones, { number: '', type: 'cell' }]);\n }\n };\n\n const handleRemove = (index: number) => {\n if (phones.length > minEntries) {\n onChange(phones.filter((_, i) => i !== index));\n }\n };\n\n const getTypeLabel = (type: PhoneType): string => {\n if (typeLabels?.[type]) return typeLabels[type];\n return PHONE_TYPES.find((t) => t.value === type)?.label || type;\n };\n\n const canAdd = phones.length < maxEntries;\n const canRemove = phones.length > minEntries;\n\n return (\n <div data-slot=\"phone-group\" className={cn('space-y-3', className)}>\n {phones.map((phone, index) => (\n <div\n key={index}\n data-slot=\"phone-row\"\n className=\"flex items-start gap-2\"\n >\n {/* Phone number input */}\n <div className=\"flex-1\">\n <PhoneInput\n label={index === 0 ? label : undefined}\n value={phone.number}\n onChange={(num) => handlePhoneChange(index, num)}\n disabled={disabled}\n validateOnBlur={validateOnBlur}\n required={required && index === 0}\n />\n </div>\n\n {/* Type selector */}\n <div className=\"w-24 shrink-0 sm:w-32\">\n <label htmlFor={`phone-type-${index}`} className=\"sr-only\">\n Phone type\n </label>\n <select\n id={`phone-type-${index}`}\n data-slot=\"phone-type-select\"\n value={phone.type}\n onChange={(e) =>\n handleTypeChange(index, e.target.value as PhoneType)\n }\n disabled={disabled}\n className={cn(\n 'h-10 w-full rounded-md border px-3 py-2 text-sm',\n 'border-gray-300 bg-white text-gray-900',\n 'focus:border-brand-500 focus:ring-brand-500/20 focus:ring-2 focus:outline-none',\n 'disabled:text-muted-foreground disabled:cursor-not-allowed disabled:bg-gray-50',\n 'dark:border-gray-600 dark:bg-gray-800 dark:text-gray-100',\n 'dark:focus:border-brand-400 dark:focus:ring-brand-400/20',\n index === 0 && label ? 'mt-[26px]' : ''\n )}\n >\n {PHONE_TYPES.map((type) => (\n <option key={type.value} value={type.value}>\n {getTypeLabel(type.value)}\n </option>\n ))}\n </select>\n </div>\n\n {/* Add/Remove buttons */}\n <div\n data-slot=\"phone-action\"\n className={cn(\n 'flex shrink-0 items-center',\n index === 0 && label ? 'mt-[26px]' : ''\n )}\n >\n {index === 0 ? (\n <button\n type=\"button\"\n data-slot=\"phone-add-btn\"\n onClick={handleAdd}\n disabled={disabled || !canAdd}\n className={cn(\n 'rounded-full p-2 transition-colors',\n 'text-brand-600 hover:bg-brand-50',\n 'disabled:cursor-not-allowed disabled:text-gray-300 disabled:hover:bg-transparent',\n 'dark:text-brand-400 dark:hover:bg-brand-900/20',\n 'dark:disabled:text-muted-foreground'\n )}\n aria-label=\"Add phone number\"\n >\n <svg\n aria-hidden=\"true\"\n data-slot=\"phone-add-icon\"\n className=\"h-5 w-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 4v16m8-8H4\"\n />\n </svg>\n </button>\n ) : (\n <button\n type=\"button\"\n data-slot=\"phone-remove-btn\"\n onClick={() => handleRemove(index)}\n disabled={disabled || !canRemove}\n className={cn(\n 'rounded-full p-2 transition-colors',\n 'text-red-600 hover:bg-red-50',\n 'disabled:cursor-not-allowed disabled:text-gray-300 disabled:hover:bg-transparent',\n 'dark:text-red-400 dark:hover:bg-red-900/20',\n 'dark:disabled:text-muted-foreground'\n )}\n aria-label=\"Remove phone number\"\n >\n <svg\n aria-hidden=\"true\"\n data-slot=\"phone-remove-icon\"\n className=\"h-5 w-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M20 12H4\"\n />\n </svg>\n </button>\n )}\n </div>\n </div>\n ))}\n </div>\n );\n}\n\nPhoneInputGroup.displayName = 'PhoneInputGroup';\n\nexport { PhoneInput, PhoneInputGroup };\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/PhoneInput/PhoneInput.tsx"],"names":[],"mappings":"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","file":"chunk-3D4ITDLO.js","sourcesContent":["import * as React from 'react';\nimport { cn } from '../../utils/cn';\nimport {\n formatPhoneNumber,\n unformatPhoneNumber,\n isValidPhoneNumber,\n} from '../../utils/phone';\nimport { Input, type InputProps } from '../Input';\n\nexport interface PhoneInputProps extends Omit<\n InputProps,\n 'type' | 'onChange' | 'value'\n> {\n /** The phone number value (can be formatted or unformatted) */\n value?: string;\n /** Callback fired when the value changes, receives the unformatted value */\n onChange?: (value: string) => void;\n /** Callback fired when the formatted value changes */\n onFormattedChange?: (formattedValue: string) => void;\n /** Whether to validate and show error state for incomplete phone numbers */\n validateOnBlur?: boolean;\n}\n\n/**\n * A phone number input that automatically formats to US format: (XXX) XXX-XXXX\n *\n * @example\n * ```tsx\n * const [phone, setPhone] = useState('');\n * <PhoneInput\n * label=\"Phone Number\"\n * value={phone}\n * onChange={setPhone}\n * validateOnBlur\n * />\n * ```\n */\nconst PhoneInput = React.forwardRef<HTMLInputElement, PhoneInputProps>(\n (\n {\n value = '',\n onChange,\n onFormattedChange,\n validateOnBlur,\n className,\n onBlur,\n hasError,\n error,\n ...props\n },\n ref\n ) => {\n const [displayValue, setDisplayValue] = React.useState(() =>\n formatPhoneNumber(value)\n );\n const [localError, setLocalError] = React.useState<string | undefined>();\n\n // Sync external value changes\n React.useEffect(() => {\n setDisplayValue(formatPhoneNumber(value));\n }, [value]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const formatted = formatPhoneNumber(e.target.value);\n setDisplayValue(formatted);\n\n const unformatted = unformatPhoneNumber(formatted);\n onChange?.(unformatted);\n onFormattedChange?.(formatted);\n\n // Clear error when user starts typing again\n if (localError) {\n setLocalError(undefined);\n }\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n onBlur?.(e);\n\n if (validateOnBlur) {\n const unformatted = unformatPhoneNumber(displayValue);\n if (unformatted.length > 0 && !isValidPhoneNumber(displayValue)) {\n setLocalError('Please enter a valid 10-digit phone number');\n } else {\n setLocalError(undefined);\n }\n }\n };\n\n return (\n <Input\n ref={ref}\n type=\"tel\"\n inputMode=\"numeric\"\n autoComplete=\"tel-national\"\n placeholder=\"(555) 555-5555\"\n value={displayValue}\n onChange={handleChange}\n onBlur={handleBlur}\n hasError={hasError || !!localError}\n error={error || localError}\n className={cn(className)}\n {...props}\n />\n );\n }\n);\n\nPhoneInput.displayName = 'PhoneInput';\n\n// =============================================================================\n// Phone Types\n// =============================================================================\n\nexport type PhoneType = 'cell' | 'landline' | 'home' | 'work' | 'fax';\n\nexport interface PhoneEntry {\n number: string;\n type: PhoneType;\n}\n\nconst PHONE_TYPES: { value: PhoneType; label: string }[] = [\n { value: 'cell', label: 'Cell' },\n { value: 'landline', label: 'Landline' },\n { value: 'home', label: 'Home' },\n { value: 'work', label: 'Work' },\n { value: 'fax', label: 'Fax' },\n];\n\n// =============================================================================\n// PhoneInputGroup\n// =============================================================================\n\nexport interface PhoneInputGroupProps {\n /** Array of phone entries */\n value: PhoneEntry[];\n /** Callback when phone entries change */\n onChange: (phones: PhoneEntry[]) => void;\n /** Minimum number of phone entries (default: 1) */\n minEntries?: number;\n /** Maximum number of phone entries (default: 5) */\n maxEntries?: number;\n /** Whether the first entry is required */\n required?: boolean;\n /** Whether all inputs are disabled */\n disabled?: boolean;\n /** Validate on blur */\n validateOnBlur?: boolean;\n /** Label for the phone input */\n label?: string;\n /** Labels for type options (for i18n) */\n typeLabels?: Record<PhoneType, string>;\n /** Custom className */\n className?: string;\n}\n\n/**\n * A group of phone inputs with type selection and add/remove functionality.\n *\n * @example\n * ```tsx\n * const [phones, setPhones] = useState<PhoneEntry[]>([\n * { number: '', type: 'cell' }\n * ]);\n *\n * <PhoneInputGroup\n * value={phones}\n * onChange={setPhones}\n * required\n * />\n * ```\n */\nfunction PhoneInputGroup({\n value,\n onChange,\n minEntries = 1,\n maxEntries = 5,\n required = false,\n disabled = false,\n validateOnBlur = false,\n label,\n typeLabels,\n className,\n}: PhoneInputGroupProps) {\n // Ensure we always have at least minEntries\n const phones = React.useMemo(() => {\n if (value.length >= minEntries) return value;\n const padding: PhoneEntry[] = Array(minEntries - value.length)\n .fill(null)\n .map(() => ({ number: '', type: 'cell' as PhoneType }));\n return [...value, ...padding];\n }, [value, minEntries]);\n\n const handlePhoneChange = (index: number, number: string) => {\n const updated = [...phones];\n updated[index] = { ...updated[index], number };\n onChange(updated);\n };\n\n const handleTypeChange = (index: number, type: PhoneType) => {\n const updated = [...phones];\n updated[index] = { ...updated[index], type };\n onChange(updated);\n };\n\n const handleAdd = () => {\n if (phones.length < maxEntries) {\n onChange([...phones, { number: '', type: 'cell' }]);\n }\n };\n\n const handleRemove = (index: number) => {\n if (phones.length > minEntries) {\n onChange(phones.filter((_, i) => i !== index));\n }\n };\n\n const getTypeLabel = (type: PhoneType): string => {\n if (typeLabels?.[type]) return typeLabels[type];\n return PHONE_TYPES.find((t) => t.value === type)?.label || type;\n };\n\n const canAdd = phones.length < maxEntries;\n const canRemove = phones.length > minEntries;\n\n return (\n <div data-slot=\"phone-group\" className={cn('space-y-3', className)}>\n {phones.map((phone, index) => (\n <div\n key={index}\n data-slot=\"phone-row\"\n className=\"flex items-start gap-2\"\n >\n {/* Phone number input */}\n <div className=\"flex-1\">\n <PhoneInput\n label={index === 0 ? label : undefined}\n value={phone.number}\n onChange={(num) => handlePhoneChange(index, num)}\n disabled={disabled}\n validateOnBlur={validateOnBlur}\n required={required && index === 0}\n />\n </div>\n\n {/* Type selector */}\n <div className=\"w-24 shrink-0 sm:w-32\">\n <label htmlFor={`phone-type-${index}`} className=\"sr-only\">\n Phone type\n </label>\n <select\n id={`phone-type-${index}`}\n data-slot=\"phone-type-select\"\n value={phone.type}\n onChange={(e) =>\n handleTypeChange(index, e.target.value as PhoneType)\n }\n disabled={disabled}\n className={cn(\n 'h-10 w-full rounded-md border px-3 py-2 text-sm',\n 'border-gray-300 bg-white text-gray-900',\n 'focus:border-brand-500 focus:ring-brand-500/20 focus:ring-2 focus:outline-none',\n 'disabled:text-muted-foreground disabled:cursor-not-allowed disabled:bg-gray-50',\n 'dark:border-gray-600 dark:bg-gray-800 dark:text-gray-100',\n 'dark:focus:border-brand-400 dark:focus:ring-brand-400/20',\n index === 0 && label ? 'mt-[26px]' : ''\n )}\n >\n {PHONE_TYPES.map((type) => (\n <option key={type.value} value={type.value}>\n {getTypeLabel(type.value)}\n </option>\n ))}\n </select>\n </div>\n\n {/* Add/Remove buttons */}\n <div\n data-slot=\"phone-action\"\n className={cn(\n 'flex shrink-0 items-center',\n index === 0 && label ? 'mt-[26px]' : ''\n )}\n >\n {index === 0 ? (\n <button\n type=\"button\"\n data-slot=\"phone-add-btn\"\n onClick={handleAdd}\n disabled={disabled || !canAdd}\n className={cn(\n 'rounded-full p-2 transition-colors',\n 'text-brand-600 hover:bg-brand-50',\n 'disabled:cursor-not-allowed disabled:text-gray-300 disabled:hover:bg-transparent',\n 'dark:text-brand-400 dark:hover:bg-brand-900/20',\n 'dark:disabled:text-muted-foreground'\n )}\n aria-label=\"Add phone number\"\n >\n <svg\n aria-hidden=\"true\"\n data-slot=\"phone-add-icon\"\n className=\"h-5 w-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 4v16m8-8H4\"\n />\n </svg>\n </button>\n ) : (\n <button\n type=\"button\"\n data-slot=\"phone-remove-btn\"\n onClick={() => handleRemove(index)}\n disabled={disabled || !canRemove}\n className={cn(\n 'rounded-full p-2 transition-colors',\n 'text-red-600 hover:bg-red-50',\n 'disabled:cursor-not-allowed disabled:text-gray-300 disabled:hover:bg-transparent',\n 'dark:text-red-400 dark:hover:bg-red-900/20',\n 'dark:disabled:text-muted-foreground'\n )}\n aria-label=\"Remove phone number\"\n >\n <svg\n aria-hidden=\"true\"\n data-slot=\"phone-remove-icon\"\n className=\"h-5 w-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M20 12H4\"\n />\n </svg>\n </button>\n )}\n </div>\n </div>\n ))}\n </div>\n );\n}\n\nPhoneInputGroup.displayName = 'PhoneInputGroup';\n\nexport { PhoneInput, PhoneInputGroup };\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');
|
|
@@ -51,9 +51,18 @@ var textVariants = classVarianceAuthority.cva("", {
|
|
|
51
51
|
bold: "font-bold"
|
|
52
52
|
},
|
|
53
53
|
align: {
|
|
54
|
-
|
|
54
|
+
/**
|
|
55
|
+
* Alignment is direction-aware (logical): `left`/`start` align to the
|
|
56
|
+
* reading start and `right`/`end` to the reading end, so layouts mirror
|
|
57
|
+
* correctly in RTL. Prefer `start`/`end`; `left`/`right` are kept as
|
|
58
|
+
* aliases. For physical alignment regardless of direction, pass the
|
|
59
|
+
* physical Tailwind alignment utility via `className` instead.
|
|
60
|
+
*/
|
|
61
|
+
left: "text-start",
|
|
62
|
+
start: "text-start",
|
|
55
63
|
center: "text-center",
|
|
56
|
-
right: "text-
|
|
64
|
+
right: "text-end",
|
|
65
|
+
end: "text-end"
|
|
57
66
|
}
|
|
58
67
|
},
|
|
59
68
|
defaultVariants: {
|
|
@@ -78,7 +87,7 @@ var Text = React__namespace.forwardRef(
|
|
|
78
87
|
Component,
|
|
79
88
|
{
|
|
80
89
|
ref,
|
|
81
|
-
className:
|
|
90
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
82
91
|
textVariants({ variant, size, weight, align }),
|
|
83
92
|
truncate && "truncate",
|
|
84
93
|
className
|
|
@@ -95,5 +104,5 @@ SmallMuted.displayName = "SmallMuted";
|
|
|
95
104
|
exports.SmallMuted = SmallMuted;
|
|
96
105
|
exports.Text = Text;
|
|
97
106
|
exports.textVariants = textVariants;
|
|
98
|
-
//# sourceMappingURL=chunk-
|
|
99
|
-
//# sourceMappingURL=chunk-
|
|
107
|
+
//# sourceMappingURL=chunk-3IAA3KCE.cjs.map
|
|
108
|
+
//# sourceMappingURL=chunk-3IAA3KCE.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Text/Text.tsx"],"names":["cva","React","jsx","cn"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,IAAM,YAAA,GAAeA,2BAAI,EAAA,EAAI;AAAA,EAC3B,QAAA,EAAU;AAAA,IACR,OAAA,EAAS;AAAA,MACP,OAAA,EAAS,iBAAA;AAAA,MACT,KAAA,EAAO,uBAAA;AAAA,MACP,OAAA,EAAS,wCAAA;AAAA,MACT,WAAA,EAAa,kBAAA;AAAA,MACb,OAAA,EAAS,wCAAA;AAAA,MACT,OAAA,EAAS;AAAA,KACX;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,EAAA,EAAI,SAAA;AAAA,MACJ,EAAA,EAAI,SAAA;AAAA,MACJ,IAAA,EAAM,WAAA;AAAA,MACN,EAAA,EAAI,SAAA;AAAA,MACJ,EAAA,EAAI,SAAA;AAAA,MACJ,KAAA,EAAO,UAAA;AAAA,MACP,KAAA,EAAO;AAAA,KACT;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,MAAA,EAAQ,aAAA;AAAA,MACR,MAAA,EAAQ,aAAA;AAAA,MACR,QAAA,EAAU,eAAA;AAAA,MACV,IAAA,EAAM;AAAA,KACR;AAAA,IACA,KAAA,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQL,IAAA,EAAM,YAAA;AAAA,MACN,KAAA,EAAO,YAAA;AAAA,MACP,MAAA,EAAQ,aAAA;AAAA,MACR,KAAA,EAAO,UAAA;AAAA,MACP,GAAA,EAAK;AAAA;AACP,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,OAAA,EAAS,SAAA;AAAA,IACT,IAAA,EAAM,MAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,KAAA,EAAO;AAAA;AAEX,CAAC;AAgCD,IAAM,IAAA,GAAaC,gBAAA,CAAA,UAAA;AAAA,EACjB,CACE;AAAA,IACE,SAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAI,SAAA,GAAY,GAAA;AAAA,IAChB,QAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,uBACEC,cAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QAEC,GAAA;AAAA,QACA,SAAA,EAAWC,oBAAA;AAAA,UACT,aAAa,EAAE,OAAA,EAAS,IAAA,EAAM,MAAA,EAAQ,OAAO,CAAA;AAAA,UAC7C,QAAA,IAAY,UAAA;AAAA,UACZ;AAAA,SACF;AAAA,QACC,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;AAEA,IAAA,CAAK,WAAA,GAAc,MAAA;AAMnB,IAAM,aAAmBF,gBAAA,CAAA,UAAA,CAGvB,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,EAAG,GAAA,oCACzB,IAAA,EAAA,EAAK,GAAA,EAAU,SAAQ,OAAA,EAAQ,IAAA,EAAK,MAAK,SAAA,EAAuB,GAAG,OAAO,CAC5E;AAED,UAAA,CAAW,WAAA,GAAc,YAAA","file":"chunk-3IAA3KCE.cjs","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\nconst textVariants = cva('', {\n variants: {\n variant: {\n default: 'text-foreground',\n muted: 'text-muted-foreground',\n primary: 'text-primary-800 dark:text-primary-400',\n destructive: 'text-destructive',\n success: 'text-success-700 dark:text-success-400',\n warning: 'text-warning-700 dark:text-warning-400',\n },\n size: {\n xs: 'text-xs',\n sm: 'text-sm',\n base: 'text-base',\n lg: 'text-lg',\n xl: 'text-xl',\n '2xl': 'text-2xl',\n '3xl': 'text-3xl',\n },\n weight: {\n normal: 'font-normal',\n medium: 'font-medium',\n semibold: 'font-semibold',\n bold: 'font-bold',\n },\n align: {\n /**\n * Alignment is direction-aware (logical): `left`/`start` align to the\n * reading start and `right`/`end` to the reading end, so layouts mirror\n * correctly in RTL. Prefer `start`/`end`; `left`/`right` are kept as\n * aliases. For physical alignment regardless of direction, pass the\n * physical Tailwind alignment utility via `className` instead.\n */\n left: 'text-start',\n start: 'text-start',\n center: 'text-center',\n right: 'text-end',\n end: 'text-end',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'base',\n weight: 'normal',\n align: 'left',\n },\n});\n\ntype TextElement =\n | 'p'\n | 'span'\n | 'div'\n | 'label'\n | 'h1'\n | 'h2'\n | 'h3'\n | 'h4'\n | 'h5'\n | 'h6';\n\nexport interface TextProps\n extends React.HTMLAttributes<HTMLElement>, VariantProps<typeof textVariants> {\n /** HTML element to render as */\n as?: TextElement;\n /** Truncate text with ellipsis */\n truncate?: boolean;\n}\n\n/**\n * A flexible text component for consistent typography.\n *\n * @example\n * ```tsx\n * <Text variant=\"muted\" size=\"sm\">Helper text</Text>\n * <Text as=\"h1\" size=\"3xl\" weight=\"bold\">Page Title</Text>\n * <Text variant=\"destructive\">Error message</Text>\n * ```\n */\nconst Text = React.forwardRef<HTMLElement, TextProps>(\n (\n {\n className,\n variant,\n size,\n weight,\n align,\n as: Component = 'p',\n truncate,\n ...props\n },\n ref\n ) => {\n return (\n <Component\n // @ts-expect-error - ref type is complex due to polymorphic component\n ref={ref}\n className={cn(\n textVariants({ variant, size, weight, align }),\n truncate && 'truncate',\n className\n )}\n {...props}\n />\n );\n }\n);\n\nText.displayName = 'Text';\n\n/**\n * Small muted text, useful for helper text and descriptions.\n * This is a convenience component equivalent to <Text variant=\"muted\" size=\"sm\">\n */\nconst SmallMuted = React.forwardRef<\n HTMLElement,\n Omit<TextProps, 'variant' | 'size'>\n>(({ className, ...props }, ref) => (\n <Text ref={ref} variant=\"muted\" size=\"sm\" className={className} {...props} />\n));\n\nSmallMuted.displayName = 'SmallMuted';\n\nexport { Text, SmallMuted, textVariants };\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { Accessibility, Activity, AlertCircle, AlertTriangle, Ambulance, ArrowLeft, ArrowRight, ArrowUpDown, AtSign, Baby, BadgeAlert, BadgeCheck, BadgeMinus, BadgePlus, BadgeX, Ban, Bandage, BarChart3, Bed, BedDouble, BedSingle, Bell, BellOff, Biohazard, Bone, BookOpen, BookOpenCheck, Bookmark, Brain, Briefcase, BriefcaseMedical, Building, Calendar, CalendarCheck, Camera, Cannabis, Check, CheckCircle, ChevronDown, ChevronLeft, ChevronRight, ChevronUp, Cigarette, CigaretteOff, CircleDot, CircleDotDashed, CircleUser, CircleUserRound, Clipboard, ClipboardCheck, ClipboardList, ClipboardPlus, Clock, Cog, Columns, Copy, CreditCard, Cross, Dna, DollarSign, Download, Droplet, Droplets, Ear, ExternalLink, Eye, EyeOff, File, FileCheck, FileCheck2, FileHeart, FilePlus, FilePlus2, FileText, Filter, Fingerprint, Flag, FlaskConical, FlaskRound, Folder, FolderOpen, Footprints, Glasses, Globe, GripVertical, Hand, HandMetal, Hash, Heart, HeartOff, HeartPulse, HelpCircle, History, Home, Hospital, Image, Info, Key, LayoutGrid, Link, List, Loader2, Lock, LogIn, LogOut, Mail, MapPin, Maximize, Menu, MessageSquare, Microscope, Minimize, Minus, Monitor, Moon, MoreHorizontal, MoreVertical, NotebookPen, Palette, Paperclip, Pencil, Phone, PieChart, Pill, Plus, Printer, Radiation, RefreshCw, Ruler, Save, Scale, Scaling, Scan, ScanEye, ScanLine, Search, Send, Settings, Share, Shield, ShieldCheck, ShieldPlus, Sliders, Sparkle, Star, Stethoscope, StickyNote, Sun, Syringe, Table, Tablets, Tag, TestTube2, TestTubes, Thermometer, ThermometerSun, ThumbsDown, ThumbsUp, Timer, Trash2, TrendingDown, TrendingUp, Truck, Unlock, Upload, User, UserCheck, UserMinus, UserPlus, UserRound, UserRoundCheck, UserRoundMinus, UserRoundPlus, UserRoundX, Users, Weight, Wheat, WheatOff, Wrench, X, X as X2, XCircle, Zap } from 'lucide-react';
|
|
2
|
+
//# sourceMappingURL=chunk-3PXOIAF6.js.map
|
|
3
|
+
//# sourceMappingURL=chunk-3PXOIAF6.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-3PXOIAF6.js","sourcesContent":[]}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { Textarea } from './chunk-
|
|
2
|
-
import { Tooltip } from './chunk-
|
|
3
|
-
import { RadioGroup, Radio } from './chunk-
|
|
4
|
-
import { Label } from './chunk-
|
|
5
|
-
import { Select } from './chunk-
|
|
6
|
-
import { Card, CardHeader, CardContent } from './chunk-
|
|
7
|
-
import { DateInput } from './chunk-
|
|
8
|
-
import { Modal, ModalHeader, ModalTitle, ModalClose, ModalBody, ModalFooter } from './chunk-
|
|
9
|
-
import { Input } from './chunk-
|
|
10
|
-
import { AlertCircle, Plus, GripVertical, StickyNote, Ban, Pencil, CalendarCheck, ExternalLink, ThumbsUp, HandMetal, ThumbsDown, HelpCircle, ChevronDown, ChevronUp, RefreshCw } from './chunk-
|
|
11
|
-
import { Button } from './chunk-
|
|
12
|
-
import { Badge } from './chunk-
|
|
1
|
+
import { Textarea } from './chunk-AFGADE3B.js';
|
|
2
|
+
import { Tooltip } from './chunk-FJ7YPVKV.js';
|
|
3
|
+
import { RadioGroup, Radio } from './chunk-QUUBTNMH.js';
|
|
4
|
+
import { Label } from './chunk-I3WGZPI6.js';
|
|
5
|
+
import { Select } from './chunk-DLBV42JD.js';
|
|
6
|
+
import { Card, CardHeader, CardContent } from './chunk-QYSUYB3S.js';
|
|
7
|
+
import { DateInput } from './chunk-EGWWTIWS.js';
|
|
8
|
+
import { Modal, ModalHeader, ModalTitle, ModalClose, ModalBody, ModalFooter } from './chunk-XMCIXHGH.js';
|
|
9
|
+
import { Input } from './chunk-YXCE2HSK.js';
|
|
10
|
+
import { AlertCircle, Plus, GripVertical, StickyNote, Ban, Pencil, CalendarCheck, ExternalLink, ThumbsUp, HandMetal, ThumbsDown, HelpCircle, ChevronDown, ChevronUp, RefreshCw } from './chunk-3PXOIAF6.js';
|
|
11
|
+
import { Button } from './chunk-WRYZ2752.js';
|
|
12
|
+
import { Badge } from './chunk-BMSG4NBH.js';
|
|
13
13
|
import { useLiveAnnouncement, useDragReorder, dragIndicatorClasses } from './chunk-7ZVTLTJF.js';
|
|
14
|
-
import { cn } from './chunk-
|
|
14
|
+
import { cn } from './chunk-TQONQSJO.js';
|
|
15
15
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
16
16
|
import * as React3 from 'react';
|
|
17
17
|
|
|
@@ -366,11 +366,12 @@ function CodeLookupProvider({
|
|
|
366
366
|
component,
|
|
367
367
|
indexUrl = "/codify",
|
|
368
368
|
locale = "en",
|
|
369
|
+
memory,
|
|
369
370
|
children
|
|
370
371
|
}) {
|
|
371
372
|
const value = React3.useMemo(
|
|
372
|
-
() => ({ component, indexUrl, locale }),
|
|
373
|
-
[component, indexUrl, locale]
|
|
373
|
+
() => ({ component, indexUrl, locale, memory }),
|
|
374
|
+
[component, indexUrl, locale, memory]
|
|
374
375
|
);
|
|
375
376
|
return /* @__PURE__ */ jsx(CodeLookupContext.Provider, { value, children });
|
|
376
377
|
}
|
|
@@ -1564,5 +1565,5 @@ function MedicationReconciliation({
|
|
|
1564
1565
|
}
|
|
1565
1566
|
|
|
1566
1567
|
export { ALLERGY_TYPE_LABELS, AllergyList, AllergyManager, CodeLookupProvider, MEDICATION_STATUS_LABELS, MedicationEditor, MedicationList, MedicationReconciliation, RowActionToolbar, RowIconButton, labelToMedicationFields, lookupToMedicationFields, parseMedicationLabel, parseSig, toolbarKeyNav, useCodeLookupConfig };
|
|
1567
|
-
//# sourceMappingURL=chunk-
|
|
1568
|
-
//# sourceMappingURL=chunk-
|
|
1568
|
+
//# sourceMappingURL=chunk-3SRBIXQX.js.map
|
|
1569
|
+
//# sourceMappingURL=chunk-3SRBIXQX.js.map
|