@mieweb/ui 0.2.4 → 0.3.0-dev.60
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/ag-grid.cjs +6 -5
- package/dist/ag-grid.cjs.map +1 -1
- package/dist/ag-grid.js +2 -1
- package/dist/ag-grid.js.map +1 -1
- package/dist/brands/index.cjs +20 -20
- package/dist/brands/index.js +3 -3
- package/dist/brands/types.cjs +4 -4
- package/dist/brands/types.d.cts +14 -8
- package/dist/brands/types.d.ts +14 -8
- package/dist/brands/types.js +1 -1
- package/dist/{chunk-B7YGVKTE.cjs → chunk-2YFJ6A5V.cjs} +51 -24
- package/dist/chunk-2YFJ6A5V.cjs.map +1 -0
- package/dist/{chunk-2J2V4TMJ.cjs → chunk-35J4B3ZK.cjs} +41 -31
- package/dist/chunk-35J4B3ZK.cjs.map +1 -0
- package/dist/{chunk-B5364UWR.cjs → chunk-3DBRHYTN.cjs} +2 -2
- package/dist/{chunk-B5364UWR.cjs.map → chunk-3DBRHYTN.cjs.map} +1 -1
- package/dist/{chunk-JFAXLE2J.js → chunk-3DM6LMZG.js} +7 -4
- package/dist/chunk-3DM6LMZG.js.map +1 -0
- package/dist/{chunk-N3QTYHRZ.cjs → chunk-3GGET5LK.cjs} +40 -22
- package/dist/chunk-3GGET5LK.cjs.map +1 -0
- package/dist/{chunk-VV4N4WY6.cjs → chunk-3XK5GENF.cjs} +61 -35
- package/dist/chunk-3XK5GENF.cjs.map +1 -0
- package/dist/{chunk-OW2BWGST.js → chunk-4ASPCSWT.js} +48 -31
- package/dist/chunk-4ASPCSWT.js.map +1 -0
- package/dist/{chunk-EKIQE524.cjs → chunk-4FALCEJI.cjs} +3 -2
- package/dist/chunk-4FALCEJI.cjs.map +1 -0
- package/dist/{chunk-6OCIIIAI.js → chunk-4Z6ZZKIY.js} +40 -22
- package/dist/chunk-4Z6ZZKIY.js.map +1 -0
- package/dist/{chunk-QIOM5ZV2.cjs → chunk-4ZU53GNR.cjs} +6 -2
- package/dist/{chunk-QIOM5ZV2.cjs.map → chunk-4ZU53GNR.cjs.map} +1 -1
- package/dist/{chunk-6Q4SU72T.js → chunk-5NSURWMM.js} +49 -10
- package/dist/chunk-5NSURWMM.js.map +1 -0
- package/dist/{chunk-4MHTSFPX.js → chunk-6EN6ZIW3.js} +43 -18
- package/dist/chunk-6EN6ZIW3.js.map +1 -0
- package/dist/chunk-7CLHYU4Q.cjs +270 -0
- package/dist/chunk-7CLHYU4Q.cjs.map +1 -0
- package/dist/{chunk-RYQ5NEKH.js → chunk-7MX7MGSA.js} +2 -2
- package/dist/{chunk-RYQ5NEKH.js.map → chunk-7MX7MGSA.js.map} +1 -1
- package/dist/chunk-7XWPUWSL.js +328 -0
- package/dist/chunk-7XWPUWSL.js.map +1 -0
- package/dist/{chunk-PEH4ZOEM.cjs → chunk-A2QVQF54.cjs} +12 -6
- package/dist/chunk-A2QVQF54.cjs.map +1 -0
- package/dist/{chunk-4AWW5WPF.js → chunk-ATALZYST.js} +51 -24
- package/dist/chunk-ATALZYST.js.map +1 -0
- package/dist/{chunk-HRA4FUO6.cjs → chunk-AUXHRAID.cjs} +71 -44
- package/dist/chunk-AUXHRAID.cjs.map +1 -0
- package/dist/{chunk-377KAB4C.cjs → chunk-AWUADXYI.cjs} +8 -2
- package/dist/chunk-AWUADXYI.cjs.map +1 -0
- package/dist/chunk-B43FRU5R.js +247 -0
- package/dist/chunk-B43FRU5R.js.map +1 -0
- package/dist/{chunk-XXOBTAKA.js → chunk-BBQZNIB4.js} +71 -44
- package/dist/chunk-BBQZNIB4.js.map +1 -0
- package/dist/{chunk-PEFJAWNR.cjs → chunk-BWYYA3LQ.cjs} +26 -10
- package/dist/chunk-BWYYA3LQ.cjs.map +1 -0
- package/dist/{chunk-WH6I7CMP.cjs → chunk-CW75IKA6.cjs} +27 -2
- package/dist/chunk-CW75IKA6.cjs.map +1 -0
- package/dist/{chunk-QSMMFATL.js → chunk-DCDXOT3A.js} +178 -127
- package/dist/chunk-DCDXOT3A.js.map +1 -0
- package/dist/{chunk-3NJ72QU6.js → chunk-DCER2QQB.js} +3 -2
- package/dist/chunk-DCER2QQB.js.map +1 -0
- package/dist/{chunk-AWIULTJW.js → chunk-DNPRRYPQ.js} +18 -3
- package/dist/chunk-DNPRRYPQ.js.map +1 -0
- package/dist/{chunk-NAATBUHR.cjs → chunk-EMMQPDOY.cjs} +43 -18
- package/dist/chunk-EMMQPDOY.cjs.map +1 -0
- package/dist/{chunk-GHRQ3ZJH.js → chunk-EUHPVNWD.js} +51 -12
- package/dist/chunk-EUHPVNWD.js.map +1 -0
- package/dist/{chunk-UZUBLXVC.js → chunk-FZJBFJJR.js} +3 -2
- package/dist/chunk-FZJBFJJR.js.map +1 -0
- package/dist/{chunk-SSKI6VTW.cjs → chunk-G7ZHQA4O.cjs} +2 -2
- package/dist/chunk-G7ZHQA4O.cjs.map +1 -0
- package/dist/{chunk-B3L43JGH.js → chunk-HEH3QXOQ.js} +26 -10
- package/dist/chunk-HEH3QXOQ.js.map +1 -0
- package/dist/{chunk-TA6FVVCM.js → chunk-I56VBDSC.js} +3 -3
- package/dist/{chunk-TA6FVVCM.js.map → chunk-I56VBDSC.js.map} +1 -1
- package/dist/{chunk-SWMRCGL4.cjs → chunk-IKMR2ADM.cjs} +5 -4
- package/dist/chunk-IKMR2ADM.cjs.map +1 -0
- package/dist/{chunk-53K3KWXQ.cjs → chunk-IMNLYVXJ.cjs} +166 -136
- package/dist/chunk-IMNLYVXJ.cjs.map +1 -0
- package/dist/{chunk-FFJVCQ5R.cjs → chunk-J644FU54.cjs} +49 -19
- package/dist/chunk-J644FU54.cjs.map +1 -0
- package/dist/{chunk-KWDTTGH2.js → chunk-JDI45GEY.js} +4 -4
- package/dist/{chunk-KWDTTGH2.js.map → chunk-JDI45GEY.js.map} +1 -1
- package/dist/{chunk-EF46XW4Z.cjs → chunk-JE4AH2TZ.cjs} +160 -66
- package/dist/chunk-JE4AH2TZ.cjs.map +1 -0
- package/dist/{chunk-VDMQCSXT.cjs → chunk-JHPFOG2N.cjs} +4 -4
- package/dist/{chunk-VDMQCSXT.cjs.map → chunk-JHPFOG2N.cjs.map} +1 -1
- package/dist/{chunk-5T3AWNHG.cjs → chunk-K7IGBNZA.cjs} +70 -39
- package/dist/chunk-K7IGBNZA.cjs.map +1 -0
- package/dist/chunk-LEMY57MI.js +3 -0
- package/dist/{chunk-3K7QCDSV.js.map → chunk-LEMY57MI.js.map} +1 -1
- package/dist/{chunk-EYH7OUX5.js → chunk-LUVSO5LK.js} +2 -2
- package/dist/chunk-LUVSO5LK.js.map +1 -0
- package/dist/chunk-LXHPW2ZF.cjs +353 -0
- package/dist/chunk-LXHPW2ZF.cjs.map +1 -0
- package/dist/chunk-MOULJE34.js +334 -0
- package/dist/chunk-MOULJE34.js.map +1 -0
- package/dist/{chunk-B26RIQ5R.js → chunk-MV3MTHWQ.js} +6 -2
- package/dist/chunk-MV3MTHWQ.js.map +1 -0
- package/dist/{chunk-AU5ADTYD.cjs → chunk-ND75VHB7.cjs} +49 -10
- package/dist/chunk-ND75VHB7.cjs.map +1 -0
- package/dist/{chunk-GV5JQBPX.js → chunk-NDHW3ZRF.js} +8 -4
- package/dist/chunk-NDHW3ZRF.js.map +1 -0
- package/dist/{chunk-QL2YTVTR.js → chunk-O43QBXRX.js} +7 -2
- package/dist/chunk-O43QBXRX.js.map +1 -0
- package/dist/{chunk-4T2ZNPTC.js → chunk-OJ64Q3A5.js} +104 -62
- package/dist/chunk-OJ64Q3A5.js.map +1 -0
- package/dist/{chunk-OT36EMM5.js → chunk-OKBR6PX4.js} +5 -4
- package/dist/chunk-OKBR6PX4.js.map +1 -0
- package/dist/{chunk-LZEY55QZ.cjs → chunk-OYKS2JBB.cjs} +18 -3
- package/dist/chunk-OYKS2JBB.cjs.map +1 -0
- package/dist/{chunk-ORUPC5TV.cjs → chunk-PLIK3DN6.cjs} +7 -4
- package/dist/chunk-PLIK3DN6.cjs.map +1 -0
- package/dist/{chunk-PF3XWKE5.cjs → chunk-QEAIFTUL.cjs} +26 -9
- package/dist/chunk-QEAIFTUL.cjs.map +1 -0
- package/dist/chunk-QMQE4PDD.cjs +615 -0
- package/dist/chunk-QMQE4PDD.cjs.map +1 -0
- package/dist/{chunk-XVZ4SLQB.js → chunk-QVJBUWJQ.js} +70 -39
- package/dist/chunk-QVJBUWJQ.js.map +1 -0
- package/dist/{chunk-XHJGYBYG.cjs → chunk-QXJMKJJV.cjs} +48 -31
- package/dist/chunk-QXJMKJJV.cjs.map +1 -0
- package/dist/{chunk-TPGT236K.js → chunk-RC2YMOMS.js} +26 -3
- package/dist/chunk-RC2YMOMS.js.map +1 -0
- package/dist/{chunk-BXK5TNJE.cjs → chunk-RH43XBNV.cjs} +3 -2
- package/dist/chunk-RH43XBNV.cjs.map +1 -0
- package/dist/{chunk-NIHESA7O.js → chunk-T4AO7KYK.js} +41 -31
- package/dist/chunk-T4AO7KYK.js.map +1 -0
- package/dist/chunk-TF5OZDFU.js +588 -0
- package/dist/chunk-TF5OZDFU.js.map +1 -0
- package/dist/{chunk-BV75DAKO.cjs → chunk-TSZRR2ZK.cjs} +104 -62
- package/dist/chunk-TSZRR2ZK.cjs.map +1 -0
- package/dist/{chunk-ONWOB76P.js → chunk-V2O636JO.js} +26 -9
- package/dist/chunk-V2O636JO.js.map +1 -0
- package/dist/{chunk-G2DOD34H.js → chunk-VKTQQOUH.js} +82 -36
- package/dist/chunk-VKTQQOUH.js.map +1 -0
- package/dist/{chunk-RRQGH7C5.cjs → chunk-VQW36LLX.cjs} +7 -2
- package/dist/chunk-VQW36LLX.cjs.map +1 -0
- package/dist/{chunk-IY7UQPDO.cjs → chunk-WGPMTW36.cjs} +6 -2
- package/dist/chunk-WGPMTW36.cjs.map +1 -0
- package/dist/{chunk-SOFX4T7M.js → chunk-WOYUQ4AT.js} +49 -19
- package/dist/chunk-WOYUQ4AT.js.map +1 -0
- package/dist/{chunk-TCQ27C5M.js → chunk-WTDCNXZO.js} +8 -2
- package/dist/chunk-WTDCNXZO.js.map +1 -0
- package/dist/chunk-XHESCAUE.js +124 -0
- package/dist/chunk-XHESCAUE.js.map +1 -0
- package/dist/{chunk-QZLRB3UG.js → chunk-YN3ZIUYC.js} +166 -136
- package/dist/chunk-YN3ZIUYC.js.map +1 -0
- package/dist/{chunk-VZUVYJFU.cjs → chunk-YR365F2H.cjs} +16 -16
- package/dist/{chunk-VZUVYJFU.cjs.map → chunk-YR365F2H.cjs.map} +1 -1
- package/dist/{chunk-5UUL5EEO.cjs → chunk-Z2ABQA5Z.cjs} +178 -127
- package/dist/chunk-Z2ABQA5Z.cjs.map +1 -0
- package/dist/{chunk-JYMQJ32S.cjs → chunk-Z4HZ35KX.cjs} +8 -4
- package/dist/chunk-Z4HZ35KX.cjs.map +1 -0
- package/dist/{chunk-INFSKLXE.cjs → chunk-ZAHQU7PQ.cjs} +51 -12
- package/dist/chunk-ZAHQU7PQ.cjs.map +1 -0
- package/dist/{chunk-QYJ7RQJ2.cjs → chunk-ZGSPFVGL.cjs} +82 -36
- package/dist/chunk-ZGSPFVGL.cjs.map +1 -0
- package/dist/{chunk-VBHPXSCV.js → chunk-ZVSW2KS6.js} +12 -6
- package/dist/chunk-ZVSW2KS6.js.map +1 -0
- package/dist/components/Alert/index.cjs +5 -5
- package/dist/components/Alert/index.js +1 -1
- package/dist/components/AudioPlayer/index.cjs +6 -6
- package/dist/components/AudioPlayer/index.js +1 -1
- package/dist/components/AudioRecorder/index.cjs +6 -6
- package/dist/components/AudioRecorder/index.js +1 -1
- package/dist/components/Avatar/index.cjs +5 -5
- package/dist/components/Avatar/index.js +1 -1
- package/dist/components/Badge/index.cjs +3 -3
- package/dist/components/Badge/index.js +1 -1
- package/dist/components/Breadcrumb/index.cjs +3 -3
- package/dist/components/Breadcrumb/index.js +1 -1
- package/dist/components/Button/index.cjs +3 -3
- package/dist/components/Button/index.js +1 -1
- package/dist/components/Card/index.cjs +15 -15
- package/dist/components/Card/index.js +1 -1
- package/dist/components/Checkbox/index.cjs +4 -4
- package/dist/components/Checkbox/index.js +1 -1
- package/dist/components/CountryCodeDropdown/index.cjs +23 -0
- package/dist/components/CountryCodeDropdown/index.cjs.map +1 -0
- package/dist/components/CountryCodeDropdown/index.d.cts +69 -0
- package/dist/components/CountryCodeDropdown/index.d.ts +69 -0
- package/dist/components/CountryCodeDropdown/index.js +6 -0
- package/dist/components/CountryCodeDropdown/index.js.map +1 -0
- package/dist/components/DateInput/index.cjs +4 -4
- package/dist/components/DateInput/index.js +3 -3
- package/dist/components/Dropdown/index.cjs +9 -8
- package/dist/components/Dropdown/index.d.cts +29 -1
- package/dist/components/Dropdown/index.d.ts +29 -1
- package/dist/components/Dropdown/index.js +3 -2
- package/dist/components/Input/index.cjs +3 -3
- package/dist/components/Input/index.js +1 -1
- package/dist/components/Modal/index.cjs +9 -9
- package/dist/components/Modal/index.js +1 -1
- package/dist/components/Pagination/index.cjs +4 -4
- package/dist/components/Pagination/index.js +1 -1
- package/dist/components/PhoneInput/index.cjs +4 -4
- package/dist/components/PhoneInput/index.js +2 -2
- package/dist/components/Progress/index.cjs +6 -6
- package/dist/components/Progress/index.js +1 -1
- package/dist/components/QuickAction/index.cjs +6 -6
- package/dist/components/QuickAction/index.js +1 -1
- package/dist/components/Radio/index.cjs +4 -4
- package/dist/components/Radio/index.js +1 -1
- package/dist/components/RecordButton/index.cjs +4 -4
- package/dist/components/RecordButton/index.js +1 -1
- package/dist/components/SchedulePicker/index.cjs +10 -10
- package/dist/components/SchedulePicker/index.js +1 -1
- package/dist/components/Select/index.cjs +3 -3
- package/dist/components/Select/index.js +1 -1
- package/dist/components/Skeleton/index.cjs +6 -6
- package/dist/components/Skeleton/index.d.cts +1 -1
- package/dist/components/Skeleton/index.d.ts +1 -1
- package/dist/components/Skeleton/index.js +1 -1
- package/dist/components/Slider/index.cjs +5 -5
- package/dist/components/Slider/index.js +1 -1
- package/dist/components/Spinner/index.cjs +5 -5
- package/dist/components/Spinner/index.js +1 -1
- package/dist/components/Switch/index.cjs +4 -4
- package/dist/components/Switch/index.js +1 -1
- package/dist/components/Table/index.cjs +9 -9
- package/dist/components/Table/index.js +1 -1
- package/dist/components/Tabs/index.cjs +7 -7
- package/dist/components/Tabs/index.js +1 -1
- package/dist/components/Textarea/index.cjs +3 -3
- package/dist/components/Textarea/index.js +1 -1
- package/dist/components/ThemeProvider/index.cjs +8 -8
- package/dist/components/ThemeProvider/index.js +2 -2
- package/dist/components/Tooltip/index.cjs +2 -2
- package/dist/components/Tooltip/index.js +1 -1
- package/dist/datavis.cjs +251 -0
- package/dist/datavis.cjs.map +1 -0
- package/dist/datavis.d.cts +47 -0
- package/dist/datavis.d.ts +47 -0
- package/dist/datavis.js +247 -0
- package/dist/datavis.js.map +1 -0
- package/dist/hooks/index.cjs +2 -2
- package/dist/hooks/index.d.cts +2 -2
- package/dist/hooks/index.d.ts +2 -2
- package/dist/hooks/index.js +1 -1
- package/dist/index.cjs +12727 -8704
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +35 -43
- package/dist/index.d.ts +35 -43
- package/dist/index.js +11959 -7955
- package/dist/index.js.map +1 -1
- package/dist/styles/init.css +326 -0
- package/dist/styles.css +1 -1
- package/dist/tailwind-preset.cjs +4 -4
- package/dist/tailwind-preset.d.cts +13 -2
- package/dist/tailwind-preset.d.ts +13 -2
- package/dist/tailwind-preset.js +1 -1
- package/dist/utils/index.cjs +30 -22
- package/dist/utils/index.d.cts +12 -1
- package/dist/utils/index.d.ts +12 -1
- package/dist/utils/index.js +1 -1
- package/package.json +24 -3
- package/dist/chunk-265CFCCX.js +0 -173
- package/dist/chunk-265CFCCX.js.map +0 -1
- package/dist/chunk-2J2V4TMJ.cjs.map +0 -1
- package/dist/chunk-377KAB4C.cjs.map +0 -1
- package/dist/chunk-3K7QCDSV.js +0 -3
- package/dist/chunk-3NJ72QU6.js.map +0 -1
- package/dist/chunk-4AWW5WPF.js.map +0 -1
- package/dist/chunk-4MHTSFPX.js.map +0 -1
- package/dist/chunk-4T2ZNPTC.js.map +0 -1
- package/dist/chunk-4YRAEFYW.js +0 -233
- package/dist/chunk-4YRAEFYW.js.map +0 -1
- package/dist/chunk-53K3KWXQ.cjs.map +0 -1
- package/dist/chunk-5T3AWNHG.cjs.map +0 -1
- package/dist/chunk-5UUL5EEO.cjs.map +0 -1
- package/dist/chunk-6OCIIIAI.js.map +0 -1
- package/dist/chunk-6Q4SU72T.js.map +0 -1
- package/dist/chunk-AU5ADTYD.cjs.map +0 -1
- package/dist/chunk-AWIULTJW.js.map +0 -1
- package/dist/chunk-B26RIQ5R.js.map +0 -1
- package/dist/chunk-B3L43JGH.js.map +0 -1
- package/dist/chunk-B7YGVKTE.cjs.map +0 -1
- package/dist/chunk-BV75DAKO.cjs.map +0 -1
- package/dist/chunk-BXK5TNJE.cjs.map +0 -1
- package/dist/chunk-CQCYXHCU.cjs +0 -256
- package/dist/chunk-CQCYXHCU.cjs.map +0 -1
- package/dist/chunk-DMA74PZ7.js +0 -240
- package/dist/chunk-DMA74PZ7.js.map +0 -1
- package/dist/chunk-EF46XW4Z.cjs.map +0 -1
- package/dist/chunk-EKIQE524.cjs.map +0 -1
- package/dist/chunk-EYH7OUX5.js.map +0 -1
- package/dist/chunk-FFJVCQ5R.cjs.map +0 -1
- package/dist/chunk-FIXAVBUA.cjs +0 -200
- package/dist/chunk-FIXAVBUA.cjs.map +0 -1
- package/dist/chunk-G2DOD34H.js.map +0 -1
- package/dist/chunk-GHRQ3ZJH.js.map +0 -1
- package/dist/chunk-GV5JQBPX.js.map +0 -1
- package/dist/chunk-HRA4FUO6.cjs.map +0 -1
- package/dist/chunk-INFSKLXE.cjs.map +0 -1
- package/dist/chunk-IY7UQPDO.cjs.map +0 -1
- package/dist/chunk-JFAXLE2J.js.map +0 -1
- package/dist/chunk-JYMQJ32S.cjs.map +0 -1
- package/dist/chunk-LZEY55QZ.cjs.map +0 -1
- package/dist/chunk-N3QTYHRZ.cjs.map +0 -1
- package/dist/chunk-NAATBUHR.cjs.map +0 -1
- package/dist/chunk-NIHESA7O.js.map +0 -1
- package/dist/chunk-NXRLGHEC.js +0 -98
- package/dist/chunk-NXRLGHEC.js.map +0 -1
- package/dist/chunk-ONWOB76P.js.map +0 -1
- package/dist/chunk-ORUPC5TV.cjs.map +0 -1
- package/dist/chunk-OT36EMM5.js.map +0 -1
- package/dist/chunk-OW2BWGST.js.map +0 -1
- package/dist/chunk-PEFJAWNR.cjs.map +0 -1
- package/dist/chunk-PEH4ZOEM.cjs.map +0 -1
- package/dist/chunk-PF3XWKE5.cjs.map +0 -1
- package/dist/chunk-QL2YTVTR.js.map +0 -1
- package/dist/chunk-QSMMFATL.js.map +0 -1
- package/dist/chunk-QYJ7RQJ2.cjs.map +0 -1
- package/dist/chunk-QZLRB3UG.js.map +0 -1
- package/dist/chunk-RRQGH7C5.cjs.map +0 -1
- package/dist/chunk-SOFX4T7M.js.map +0 -1
- package/dist/chunk-SSKI6VTW.cjs.map +0 -1
- package/dist/chunk-SWMRCGL4.cjs.map +0 -1
- package/dist/chunk-TCQ27C5M.js.map +0 -1
- package/dist/chunk-TPGT236K.js.map +0 -1
- package/dist/chunk-UZUBLXVC.js.map +0 -1
- package/dist/chunk-VBHPXSCV.js.map +0 -1
- package/dist/chunk-VV4N4WY6.cjs.map +0 -1
- package/dist/chunk-WH6I7CMP.cjs.map +0 -1
- package/dist/chunk-XHJGYBYG.cjs.map +0 -1
- package/dist/chunk-XVZ4SLQB.js.map +0 -1
- package/dist/chunk-XXOBTAKA.js.map +0 -1
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunk3XK5GENF_cjs = require('./chunk-3XK5GENF.cjs');
|
|
4
|
+
var chunkBTJHYGPI_cjs = require('./chunk-BTJHYGPI.cjs');
|
|
5
|
+
var chunkOR5DRJCW_cjs = require('./chunk-OR5DRJCW.cjs');
|
|
6
|
+
var React = require('react');
|
|
7
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
8
|
+
|
|
9
|
+
function _interopNamespace(e) {
|
|
10
|
+
if (e && e.__esModule) return e;
|
|
11
|
+
var n = Object.create(null);
|
|
12
|
+
if (e) {
|
|
13
|
+
Object.keys(e).forEach(function (k) {
|
|
14
|
+
if (k !== 'default') {
|
|
15
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
16
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
get: function () { return e[k]; }
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
n.default = e;
|
|
24
|
+
return Object.freeze(n);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
28
|
+
|
|
29
|
+
var PhoneInput = React__namespace.forwardRef(
|
|
30
|
+
({
|
|
31
|
+
value = "",
|
|
32
|
+
onChange,
|
|
33
|
+
onFormattedChange,
|
|
34
|
+
validateOnBlur,
|
|
35
|
+
className,
|
|
36
|
+
onBlur,
|
|
37
|
+
hasError,
|
|
38
|
+
error,
|
|
39
|
+
...props
|
|
40
|
+
}, ref) => {
|
|
41
|
+
const [displayValue, setDisplayValue] = React__namespace.useState(
|
|
42
|
+
() => chunkBTJHYGPI_cjs.formatPhoneNumber(value)
|
|
43
|
+
);
|
|
44
|
+
const [localError, setLocalError] = React__namespace.useState();
|
|
45
|
+
React__namespace.useEffect(() => {
|
|
46
|
+
setDisplayValue(chunkBTJHYGPI_cjs.formatPhoneNumber(value));
|
|
47
|
+
}, [value]);
|
|
48
|
+
const handleChange = (e) => {
|
|
49
|
+
const formatted = chunkBTJHYGPI_cjs.formatPhoneNumber(e.target.value);
|
|
50
|
+
setDisplayValue(formatted);
|
|
51
|
+
const unformatted = chunkBTJHYGPI_cjs.unformatPhoneNumber(formatted);
|
|
52
|
+
onChange?.(unformatted);
|
|
53
|
+
onFormattedChange?.(formatted);
|
|
54
|
+
if (localError) {
|
|
55
|
+
setLocalError(void 0);
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
const handleBlur = (e) => {
|
|
59
|
+
onBlur?.(e);
|
|
60
|
+
if (validateOnBlur) {
|
|
61
|
+
const unformatted = chunkBTJHYGPI_cjs.unformatPhoneNumber(displayValue);
|
|
62
|
+
if (unformatted.length > 0 && !chunkBTJHYGPI_cjs.isValidPhoneNumber(displayValue)) {
|
|
63
|
+
setLocalError("Please enter a valid 10-digit phone number");
|
|
64
|
+
} else {
|
|
65
|
+
setLocalError(void 0);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
70
|
+
chunk3XK5GENF_cjs.Input,
|
|
71
|
+
{
|
|
72
|
+
ref,
|
|
73
|
+
type: "tel",
|
|
74
|
+
inputMode: "numeric",
|
|
75
|
+
autoComplete: "tel-national",
|
|
76
|
+
placeholder: "(555) 555-5555",
|
|
77
|
+
value: displayValue,
|
|
78
|
+
onChange: handleChange,
|
|
79
|
+
onBlur: handleBlur,
|
|
80
|
+
hasError: hasError || !!localError,
|
|
81
|
+
error: error || localError,
|
|
82
|
+
className: chunkOR5DRJCW_cjs.cn(className),
|
|
83
|
+
...props
|
|
84
|
+
}
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
);
|
|
88
|
+
PhoneInput.displayName = "PhoneInput";
|
|
89
|
+
var PHONE_TYPES = [
|
|
90
|
+
{ value: "cell", label: "Cell" },
|
|
91
|
+
{ value: "landline", label: "Landline" },
|
|
92
|
+
{ value: "home", label: "Home" },
|
|
93
|
+
{ value: "work", label: "Work" },
|
|
94
|
+
{ value: "fax", label: "Fax" }
|
|
95
|
+
];
|
|
96
|
+
function PhoneInputGroup({
|
|
97
|
+
value,
|
|
98
|
+
onChange,
|
|
99
|
+
minEntries = 1,
|
|
100
|
+
maxEntries = 5,
|
|
101
|
+
required = false,
|
|
102
|
+
disabled = false,
|
|
103
|
+
validateOnBlur = false,
|
|
104
|
+
label,
|
|
105
|
+
typeLabels,
|
|
106
|
+
className
|
|
107
|
+
}) {
|
|
108
|
+
const phones = React__namespace.useMemo(() => {
|
|
109
|
+
if (value.length >= minEntries) return value;
|
|
110
|
+
const padding = Array(minEntries - value.length).fill(null).map(() => ({ number: "", type: "cell" }));
|
|
111
|
+
return [...value, ...padding];
|
|
112
|
+
}, [value, minEntries]);
|
|
113
|
+
const handlePhoneChange = (index, number) => {
|
|
114
|
+
const updated = [...phones];
|
|
115
|
+
updated[index] = { ...updated[index], number };
|
|
116
|
+
onChange(updated);
|
|
117
|
+
};
|
|
118
|
+
const handleTypeChange = (index, type) => {
|
|
119
|
+
const updated = [...phones];
|
|
120
|
+
updated[index] = { ...updated[index], type };
|
|
121
|
+
onChange(updated);
|
|
122
|
+
};
|
|
123
|
+
const handleAdd = () => {
|
|
124
|
+
if (phones.length < maxEntries) {
|
|
125
|
+
onChange([...phones, { number: "", type: "cell" }]);
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
const handleRemove = (index) => {
|
|
129
|
+
if (phones.length > minEntries) {
|
|
130
|
+
onChange(phones.filter((_, i) => i !== index));
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
const getTypeLabel = (type) => {
|
|
134
|
+
if (typeLabels?.[type]) return typeLabels[type];
|
|
135
|
+
return PHONE_TYPES.find((t) => t.value === type)?.label || type;
|
|
136
|
+
};
|
|
137
|
+
const canAdd = phones.length < maxEntries;
|
|
138
|
+
const canRemove = phones.length > minEntries;
|
|
139
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "phone-group", className: chunkOR5DRJCW_cjs.cn("space-y-3", className), children: phones.map((phone, index) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
140
|
+
"div",
|
|
141
|
+
{
|
|
142
|
+
"data-slot": "phone-row",
|
|
143
|
+
className: "flex items-start gap-2",
|
|
144
|
+
children: [
|
|
145
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
146
|
+
PhoneInput,
|
|
147
|
+
{
|
|
148
|
+
label: index === 0 ? label : void 0,
|
|
149
|
+
value: phone.number,
|
|
150
|
+
onChange: (num) => handlePhoneChange(index, num),
|
|
151
|
+
disabled,
|
|
152
|
+
validateOnBlur,
|
|
153
|
+
required: required && index === 0
|
|
154
|
+
}
|
|
155
|
+
) }),
|
|
156
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-24 shrink-0 sm:w-32", children: [
|
|
157
|
+
/* @__PURE__ */ jsxRuntime.jsx("label", { htmlFor: `phone-type-${index}`, className: "sr-only", children: "Phone type" }),
|
|
158
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
159
|
+
"select",
|
|
160
|
+
{
|
|
161
|
+
id: `phone-type-${index}`,
|
|
162
|
+
"data-slot": "phone-type-select",
|
|
163
|
+
value: phone.type,
|
|
164
|
+
onChange: (e) => handleTypeChange(index, e.target.value),
|
|
165
|
+
disabled,
|
|
166
|
+
className: chunkOR5DRJCW_cjs.cn(
|
|
167
|
+
"h-10 w-full rounded-md border px-3 py-2 text-sm",
|
|
168
|
+
"border-gray-300 bg-white text-gray-900",
|
|
169
|
+
"focus:border-brand-500 focus:ring-brand-500/20 focus:ring-2 focus:outline-none",
|
|
170
|
+
"disabled:cursor-not-allowed disabled:bg-gray-50 disabled:text-gray-500",
|
|
171
|
+
"dark:border-gray-600 dark:bg-gray-800 dark:text-gray-100",
|
|
172
|
+
"dark:focus:border-brand-400 dark:focus:ring-brand-400/20",
|
|
173
|
+
index === 0 && label ? "mt-[26px]" : ""
|
|
174
|
+
),
|
|
175
|
+
children: PHONE_TYPES.map((type) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: type.value, children: getTypeLabel(type.value) }, type.value))
|
|
176
|
+
}
|
|
177
|
+
)
|
|
178
|
+
] }),
|
|
179
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
180
|
+
"div",
|
|
181
|
+
{
|
|
182
|
+
"data-slot": "phone-action",
|
|
183
|
+
className: chunkOR5DRJCW_cjs.cn(
|
|
184
|
+
"flex shrink-0 items-center",
|
|
185
|
+
index === 0 && label ? "mt-[26px]" : ""
|
|
186
|
+
),
|
|
187
|
+
children: index === 0 ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
188
|
+
"button",
|
|
189
|
+
{
|
|
190
|
+
type: "button",
|
|
191
|
+
"data-slot": "phone-add-btn",
|
|
192
|
+
onClick: handleAdd,
|
|
193
|
+
disabled: disabled || !canAdd,
|
|
194
|
+
className: chunkOR5DRJCW_cjs.cn(
|
|
195
|
+
"rounded-full p-2 transition-colors",
|
|
196
|
+
"text-brand-600 hover:bg-brand-50",
|
|
197
|
+
"disabled:cursor-not-allowed disabled:text-gray-300 disabled:hover:bg-transparent",
|
|
198
|
+
"dark:text-brand-400 dark:hover:bg-brand-900/20",
|
|
199
|
+
"dark:disabled:text-gray-600"
|
|
200
|
+
),
|
|
201
|
+
"aria-label": "Add phone number",
|
|
202
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
203
|
+
"svg",
|
|
204
|
+
{
|
|
205
|
+
"data-slot": "phone-add-icon",
|
|
206
|
+
className: "h-5 w-5",
|
|
207
|
+
fill: "none",
|
|
208
|
+
viewBox: "0 0 24 24",
|
|
209
|
+
stroke: "currentColor",
|
|
210
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
211
|
+
"path",
|
|
212
|
+
{
|
|
213
|
+
strokeLinecap: "round",
|
|
214
|
+
strokeLinejoin: "round",
|
|
215
|
+
strokeWidth: 2,
|
|
216
|
+
d: "M12 4v16m8-8H4"
|
|
217
|
+
}
|
|
218
|
+
)
|
|
219
|
+
}
|
|
220
|
+
)
|
|
221
|
+
}
|
|
222
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
223
|
+
"button",
|
|
224
|
+
{
|
|
225
|
+
type: "button",
|
|
226
|
+
"data-slot": "phone-remove-btn",
|
|
227
|
+
onClick: () => handleRemove(index),
|
|
228
|
+
disabled: disabled || !canRemove,
|
|
229
|
+
className: chunkOR5DRJCW_cjs.cn(
|
|
230
|
+
"rounded-full p-2 transition-colors",
|
|
231
|
+
"text-red-600 hover:bg-red-50",
|
|
232
|
+
"disabled:cursor-not-allowed disabled:text-gray-300 disabled:hover:bg-transparent",
|
|
233
|
+
"dark:text-red-400 dark:hover:bg-red-900/20",
|
|
234
|
+
"dark:disabled:text-gray-600"
|
|
235
|
+
),
|
|
236
|
+
"aria-label": "Remove phone number",
|
|
237
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
238
|
+
"svg",
|
|
239
|
+
{
|
|
240
|
+
"data-slot": "phone-remove-icon",
|
|
241
|
+
className: "h-5 w-5",
|
|
242
|
+
fill: "none",
|
|
243
|
+
viewBox: "0 0 24 24",
|
|
244
|
+
stroke: "currentColor",
|
|
245
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
246
|
+
"path",
|
|
247
|
+
{
|
|
248
|
+
strokeLinecap: "round",
|
|
249
|
+
strokeLinejoin: "round",
|
|
250
|
+
strokeWidth: 2,
|
|
251
|
+
d: "M20 12H4"
|
|
252
|
+
}
|
|
253
|
+
)
|
|
254
|
+
}
|
|
255
|
+
)
|
|
256
|
+
}
|
|
257
|
+
)
|
|
258
|
+
}
|
|
259
|
+
)
|
|
260
|
+
]
|
|
261
|
+
},
|
|
262
|
+
index
|
|
263
|
+
)) });
|
|
264
|
+
}
|
|
265
|
+
PhoneInputGroup.displayName = "PhoneInputGroup";
|
|
266
|
+
|
|
267
|
+
exports.PhoneInput = PhoneInput;
|
|
268
|
+
exports.PhoneInputGroup = PhoneInputGroup;
|
|
269
|
+
//# sourceMappingURL=chunk-7CLHYU4Q.cjs.map
|
|
270
|
+
//# sourceMappingURL=chunk-7CLHYU4Q.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/PhoneInput/PhoneInput.tsx"],"names":["React","formatPhoneNumber","unformatPhoneNumber","isValidPhoneNumber","jsx","Input","cn","jsxs"],"mappings":"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","file":"chunk-7CLHYU4Q.cjs","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:cursor-not-allowed disabled:bg-gray-50 disabled:text-gray-500',\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-gray-600'\n )}\n aria-label=\"Add phone number\"\n >\n <svg\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-gray-600'\n )}\n aria-label=\"Remove phone number\"\n >\n <svg\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 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/brands/index.ts"],"names":[],"mappings":";AAiCO,IAAM,MAAA,GAAS;AAAA,EACpB,QAAA,EAAU,MAAM,OAAO,sBAAY,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,CAAA;AAAA,EAChE,OAAA,EAAS,MAAM,OAAO,uBAAW,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,YAAY,CAAA;AAAA,EAC7D,mBAAA,EAAqB,MACnB,OAAO,iCAAqB,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,qBAAqB,CAAA;AAAA,EACnE,MAAA,EAAQ,MAAM,OAAO,sBAAU,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,CAAA;AAAA,EAC1D,MAAA,EAAQ,MAAM,OAAO,oBAAU,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,CAAA;AAAA,EAC1D,UAAA,EAAY,MAAM,OAAO,0BAAc,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,eAAe,CAAA;AAAA,EACtE,QAAA,EAAU,MAAM,OAAO,wBAAY,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa;AAClE","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/brands/index.ts"],"names":[],"mappings":";AAiCO,IAAM,MAAA,GAAS;AAAA,EACpB,QAAA,EAAU,MAAM,OAAO,sBAAY,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,CAAA;AAAA,EAChE,OAAA,EAAS,MAAM,OAAO,uBAAW,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,YAAY,CAAA;AAAA,EAC7D,mBAAA,EAAqB,MACnB,OAAO,iCAAqB,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,qBAAqB,CAAA;AAAA,EACnE,MAAA,EAAQ,MAAM,OAAO,sBAAU,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,CAAA;AAAA,EAC1D,MAAA,EAAQ,MAAM,OAAO,oBAAU,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,CAAA;AAAA,EAC1D,UAAA,EAAY,MAAM,OAAO,0BAAc,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,eAAe,CAAA;AAAA,EACtE,QAAA,EAAU,MAAM,OAAO,wBAAY,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa;AAClE","file":"chunk-7MX7MGSA.js","sourcesContent":["/**\n * @mieweb/ui Brand System\n *\n * Export all brand-related types, utilities, and configurations.\n */\n\n// Types and utilities\nexport type {\n BrandConfig,\n BrandColors,\n BrandTypography,\n BrandBorderRadius,\n BrandBoxShadow,\n ColorScale,\n SemanticColors,\n} from './types';\n\nexport {\n generateBrandCSS,\n generateTailwindTheme,\n createBrandPreset,\n} from './types';\n\n// Brand configurations\nexport { bluehiveBrand } from './bluehive';\nexport { defaultBrand } from './default';\nexport { enterpriseHealthBrand } from './enterprise-health';\nexport { miewebBrand } from './mieweb';\nexport { ozwellBrand } from './ozwell';\nexport { wagglelineBrand } from './waggleline';\nexport { webchartBrand } from './webchart';\n\n// All brands for iteration\nexport const brands = {\n bluehive: () => import('./bluehive').then((m) => m.bluehiveBrand),\n default: () => import('./default').then((m) => m.defaultBrand),\n 'enterprise-health': () =>\n import('./enterprise-health').then((m) => m.enterpriseHealthBrand),\n mieweb: () => import('./mieweb').then((m) => m.miewebBrand),\n ozwell: () => import('./ozwell').then((m) => m.ozwellBrand),\n waggleline: () => import('./waggleline').then((m) => m.wagglelineBrand),\n webchart: () => import('./webchart').then((m) => m.webchartBrand),\n} as const;\n"]}
|
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
import { useClickOutside } from './chunk-OKBR6PX4.js';
|
|
2
|
+
import { useEscapeKey } from './chunk-T4ME7QCT.js';
|
|
3
|
+
import { cn } from './chunk-F3SOEIN2.js';
|
|
4
|
+
import * as React from 'react';
|
|
5
|
+
import * as libphonenumber from 'google-libphonenumber';
|
|
6
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
7
|
+
|
|
8
|
+
var PhoneNumberUtil2 = libphonenumber.default?.PhoneNumberUtil ?? libphonenumber.PhoneNumberUtil;
|
|
9
|
+
var PhoneNumberFormat2 = libphonenumber.default?.PhoneNumberFormat ?? libphonenumber.PhoneNumberFormat;
|
|
10
|
+
function isoToEmoji(code) {
|
|
11
|
+
return [...code.toUpperCase()].map((c) => String.fromCodePoint(127462 - 65 + c.charCodeAt(0))).join("");
|
|
12
|
+
}
|
|
13
|
+
function buildCountryList() {
|
|
14
|
+
const phoneUtil = PhoneNumberUtil2.getInstance();
|
|
15
|
+
const regions = phoneUtil.getSupportedRegions();
|
|
16
|
+
const list = regions.map((code) => {
|
|
17
|
+
const callingCode = phoneUtil.getCountryCodeForRegion(code);
|
|
18
|
+
return {
|
|
19
|
+
code,
|
|
20
|
+
name: regionDisplayName(code),
|
|
21
|
+
dialCode: `+${callingCode}`,
|
|
22
|
+
flag: isoToEmoji(code)
|
|
23
|
+
};
|
|
24
|
+
});
|
|
25
|
+
list.sort((a, b) => a.name.localeCompare(b.name));
|
|
26
|
+
return list;
|
|
27
|
+
}
|
|
28
|
+
var _countries = null;
|
|
29
|
+
function getCountries() {
|
|
30
|
+
if (!_countries) _countries = buildCountryList();
|
|
31
|
+
return _countries;
|
|
32
|
+
}
|
|
33
|
+
var _regionDisplayNames = null;
|
|
34
|
+
function getRegionDisplayNames() {
|
|
35
|
+
if (_regionDisplayNames === null) {
|
|
36
|
+
try {
|
|
37
|
+
const locales = typeof navigator !== "undefined" && navigator.languages?.length ? [...navigator.languages] : ["en"];
|
|
38
|
+
_regionDisplayNames = new Intl.DisplayNames(locales, { type: "region" });
|
|
39
|
+
} catch {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return _regionDisplayNames;
|
|
44
|
+
}
|
|
45
|
+
function regionDisplayName(code) {
|
|
46
|
+
const dn = getRegionDisplayNames();
|
|
47
|
+
if (!dn) return code;
|
|
48
|
+
return dn.of(code) ?? code;
|
|
49
|
+
}
|
|
50
|
+
function validatePhoneNumber(phoneNumber, countryCode) {
|
|
51
|
+
try {
|
|
52
|
+
const phoneUtil = PhoneNumberUtil2.getInstance();
|
|
53
|
+
const parsed = phoneUtil.parse(phoneNumber, countryCode);
|
|
54
|
+
return phoneUtil.isValidNumberForRegion(parsed, countryCode);
|
|
55
|
+
} catch {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function formatE164(phoneNumber, countryCode) {
|
|
60
|
+
try {
|
|
61
|
+
const phoneUtil = PhoneNumberUtil2.getInstance();
|
|
62
|
+
const parsed = phoneUtil.parse(phoneNumber, countryCode);
|
|
63
|
+
return phoneUtil.format(parsed, PhoneNumberFormat2.E164);
|
|
64
|
+
} catch {
|
|
65
|
+
return phoneNumber;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function CountryCodeDropdown({
|
|
69
|
+
value,
|
|
70
|
+
onChange,
|
|
71
|
+
disabled = false,
|
|
72
|
+
className,
|
|
73
|
+
placement = "bottom-start",
|
|
74
|
+
searchPlaceholder = "Search countries\u2026",
|
|
75
|
+
"aria-label": ariaLabel = "Select country code"
|
|
76
|
+
}) {
|
|
77
|
+
const [isOpen, setIsOpen] = React.useState(false);
|
|
78
|
+
const [search, setSearch] = React.useState("");
|
|
79
|
+
const [internalValue, setInternalValue] = React.useState(value ?? "US");
|
|
80
|
+
const containerRef = React.useRef(null);
|
|
81
|
+
const searchInputRef = React.useRef(null);
|
|
82
|
+
const listRef = React.useRef(null);
|
|
83
|
+
const menuId = React.useId();
|
|
84
|
+
const isControlled = value !== void 0;
|
|
85
|
+
const activeValue = isControlled ? value : internalValue;
|
|
86
|
+
const [countriesLoaded, setCountriesLoaded] = React.useState(false);
|
|
87
|
+
const countries = React.useMemo(
|
|
88
|
+
() => countriesLoaded ? getCountries() : [],
|
|
89
|
+
[countriesLoaded]
|
|
90
|
+
);
|
|
91
|
+
React.useEffect(() => {
|
|
92
|
+
if (isOpen && !countriesLoaded) setCountriesLoaded(true);
|
|
93
|
+
}, [isOpen, countriesLoaded]);
|
|
94
|
+
const selected = React.useMemo(() => {
|
|
95
|
+
if (countries.length) {
|
|
96
|
+
return countries.find((c) => c.code === activeValue) ?? countries.find((c) => c.code === "US");
|
|
97
|
+
}
|
|
98
|
+
return {
|
|
99
|
+
code: activeValue ?? "US",
|
|
100
|
+
name: regionDisplayName(activeValue ?? "US"),
|
|
101
|
+
dialCode: `+${PhoneNumberUtil2.getInstance().getCountryCodeForRegion(activeValue ?? "US")}`,
|
|
102
|
+
flag: isoToEmoji(activeValue ?? "US")
|
|
103
|
+
};
|
|
104
|
+
}, [activeValue, countries]);
|
|
105
|
+
const filtered = React.useMemo(() => {
|
|
106
|
+
if (!search) return countries;
|
|
107
|
+
const q = search.toLowerCase();
|
|
108
|
+
return countries.filter(
|
|
109
|
+
(c) => c.name.toLowerCase().includes(q) || c.dialCode.includes(q) || c.code.toLowerCase().includes(q)
|
|
110
|
+
);
|
|
111
|
+
}, [search, countries]);
|
|
112
|
+
const close = React.useCallback(() => {
|
|
113
|
+
setIsOpen(false);
|
|
114
|
+
setSearch("");
|
|
115
|
+
}, []);
|
|
116
|
+
useClickOutside(containerRef, close);
|
|
117
|
+
useEscapeKey(close, isOpen);
|
|
118
|
+
React.useEffect(() => {
|
|
119
|
+
if (isOpen) {
|
|
120
|
+
requestAnimationFrame(() => searchInputRef.current?.focus());
|
|
121
|
+
}
|
|
122
|
+
}, [isOpen]);
|
|
123
|
+
const handleToggle = React.useCallback(() => {
|
|
124
|
+
if (!disabled) setIsOpen((prev) => !prev);
|
|
125
|
+
}, [disabled]);
|
|
126
|
+
const handleSelect = React.useCallback(
|
|
127
|
+
(country) => {
|
|
128
|
+
if (!isControlled) {
|
|
129
|
+
setInternalValue(country.code);
|
|
130
|
+
}
|
|
131
|
+
onChange?.(country);
|
|
132
|
+
close();
|
|
133
|
+
},
|
|
134
|
+
[isControlled, onChange, close]
|
|
135
|
+
);
|
|
136
|
+
const handleKeyDown = React.useCallback(
|
|
137
|
+
(e) => {
|
|
138
|
+
if (!isOpen) return;
|
|
139
|
+
if (e.key === "ArrowDown" || e.key === "ArrowUp") {
|
|
140
|
+
e.preventDefault();
|
|
141
|
+
const items = listRef.current?.querySelectorAll(
|
|
142
|
+
'[role="option"]'
|
|
143
|
+
);
|
|
144
|
+
if (!items?.length) return;
|
|
145
|
+
const current = document.activeElement;
|
|
146
|
+
const idx = Array.from(items).indexOf(current);
|
|
147
|
+
let next;
|
|
148
|
+
if (e.key === "ArrowDown") {
|
|
149
|
+
next = idx < items.length - 1 ? idx + 1 : 0;
|
|
150
|
+
} else {
|
|
151
|
+
next = idx > 0 ? idx - 1 : items.length - 1;
|
|
152
|
+
}
|
|
153
|
+
items[next].focus();
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
[isOpen]
|
|
157
|
+
);
|
|
158
|
+
const placementClass = placement === "bottom-end" ? "top-full right-0 mt-1" : "top-full left-0 mt-1";
|
|
159
|
+
return /* @__PURE__ */ jsxs(
|
|
160
|
+
"div",
|
|
161
|
+
{
|
|
162
|
+
ref: containerRef,
|
|
163
|
+
"data-slot": "country-dropdown",
|
|
164
|
+
className: "relative inline-flex",
|
|
165
|
+
children: [
|
|
166
|
+
/* @__PURE__ */ jsxs(
|
|
167
|
+
"button",
|
|
168
|
+
{
|
|
169
|
+
type: "button",
|
|
170
|
+
"data-slot": "country-dropdown-trigger",
|
|
171
|
+
onClick: handleToggle,
|
|
172
|
+
disabled,
|
|
173
|
+
"aria-label": ariaLabel,
|
|
174
|
+
"aria-haspopup": "listbox",
|
|
175
|
+
"aria-expanded": isOpen,
|
|
176
|
+
"aria-controls": isOpen ? menuId : void 0,
|
|
177
|
+
className: cn(
|
|
178
|
+
"inline-flex items-center gap-1.5 rounded-lg border px-3 py-2 text-sm",
|
|
179
|
+
"border-input bg-background text-foreground",
|
|
180
|
+
"transition-colors duration-200",
|
|
181
|
+
"hover:bg-neutral-50 dark:hover:bg-neutral-700",
|
|
182
|
+
"focus:ring-ring focus:ring-2 focus:outline-none",
|
|
183
|
+
"disabled:cursor-not-allowed disabled:opacity-50",
|
|
184
|
+
className
|
|
185
|
+
),
|
|
186
|
+
children: [
|
|
187
|
+
/* @__PURE__ */ jsx(
|
|
188
|
+
"span",
|
|
189
|
+
{
|
|
190
|
+
"data-slot": "country-dropdown-flag",
|
|
191
|
+
className: "text-base leading-none",
|
|
192
|
+
"aria-hidden": "true",
|
|
193
|
+
children: selected.flag
|
|
194
|
+
}
|
|
195
|
+
),
|
|
196
|
+
/* @__PURE__ */ jsx("span", { "data-slot": "country-dropdown-dialcode", children: selected.dialCode }),
|
|
197
|
+
/* @__PURE__ */ jsx(
|
|
198
|
+
"svg",
|
|
199
|
+
{
|
|
200
|
+
"data-slot": "country-dropdown-chevron",
|
|
201
|
+
className: cn(
|
|
202
|
+
"h-4 w-4 shrink-0 text-neutral-500 transition-transform duration-200",
|
|
203
|
+
isOpen && "rotate-180"
|
|
204
|
+
),
|
|
205
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
206
|
+
viewBox: "0 0 20 20",
|
|
207
|
+
fill: "currentColor",
|
|
208
|
+
"aria-hidden": "true",
|
|
209
|
+
children: /* @__PURE__ */ jsx(
|
|
210
|
+
"path",
|
|
211
|
+
{
|
|
212
|
+
fillRule: "evenodd",
|
|
213
|
+
d: "M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z",
|
|
214
|
+
clipRule: "evenodd"
|
|
215
|
+
}
|
|
216
|
+
)
|
|
217
|
+
}
|
|
218
|
+
)
|
|
219
|
+
]
|
|
220
|
+
}
|
|
221
|
+
),
|
|
222
|
+
isOpen && /* @__PURE__ */ jsxs(
|
|
223
|
+
"div",
|
|
224
|
+
{
|
|
225
|
+
id: menuId,
|
|
226
|
+
role: "listbox",
|
|
227
|
+
"data-slot": "country-dropdown-panel",
|
|
228
|
+
"aria-label": ariaLabel,
|
|
229
|
+
tabIndex: -1,
|
|
230
|
+
onKeyDown: handleKeyDown,
|
|
231
|
+
className: cn(
|
|
232
|
+
"absolute z-50 w-72",
|
|
233
|
+
"rounded-xl border border-neutral-200 bg-white shadow-lg",
|
|
234
|
+
"dark:border-neutral-700 dark:bg-neutral-800",
|
|
235
|
+
"animate-in fade-in zoom-in-95 duration-100",
|
|
236
|
+
placementClass
|
|
237
|
+
),
|
|
238
|
+
children: [
|
|
239
|
+
/* @__PURE__ */ jsx(
|
|
240
|
+
"div",
|
|
241
|
+
{
|
|
242
|
+
"data-slot": "country-dropdown-search",
|
|
243
|
+
className: "border-b border-neutral-200 p-2 dark:border-neutral-700",
|
|
244
|
+
children: /* @__PURE__ */ jsx(
|
|
245
|
+
"input",
|
|
246
|
+
{
|
|
247
|
+
ref: searchInputRef,
|
|
248
|
+
type: "text",
|
|
249
|
+
"data-slot": "country-dropdown-search-input",
|
|
250
|
+
value: search,
|
|
251
|
+
onChange: (e) => setSearch(e.target.value),
|
|
252
|
+
placeholder: searchPlaceholder,
|
|
253
|
+
"aria-label": "Search countries",
|
|
254
|
+
className: cn(
|
|
255
|
+
"w-full rounded-lg border border-neutral-200 px-3 py-1.5 text-sm",
|
|
256
|
+
"text-foreground placeholder:text-muted-foreground bg-white",
|
|
257
|
+
"focus:ring-ring focus:border-transparent focus:ring-2 focus:outline-none",
|
|
258
|
+
"dark:border-neutral-600 dark:bg-neutral-700 dark:text-neutral-100"
|
|
259
|
+
)
|
|
260
|
+
}
|
|
261
|
+
)
|
|
262
|
+
}
|
|
263
|
+
),
|
|
264
|
+
/* @__PURE__ */ jsx(
|
|
265
|
+
"div",
|
|
266
|
+
{
|
|
267
|
+
ref: listRef,
|
|
268
|
+
"data-slot": "country-dropdown-list",
|
|
269
|
+
className: "max-h-60 overflow-y-auto p-1",
|
|
270
|
+
children: filtered.length === 0 ? /* @__PURE__ */ jsx("div", { className: "text-muted-foreground px-3 py-4 text-center text-sm", children: "No countries found" }) : filtered.map((country) => /* @__PURE__ */ jsxs(
|
|
271
|
+
"button",
|
|
272
|
+
{
|
|
273
|
+
type: "button",
|
|
274
|
+
role: "option",
|
|
275
|
+
"data-slot": "country-dropdown-option",
|
|
276
|
+
"aria-selected": country.code === selected.code,
|
|
277
|
+
onClick: () => handleSelect(country),
|
|
278
|
+
className: cn(
|
|
279
|
+
"flex w-full items-center gap-3 rounded-lg px-3 py-2 text-left text-sm",
|
|
280
|
+
"transition-colors duration-150",
|
|
281
|
+
"focus:outline-none",
|
|
282
|
+
country.code === selected.code ? "bg-neutral-100 font-medium text-neutral-900 dark:bg-neutral-700 dark:text-white" : "text-neutral-700 hover:bg-neutral-50 dark:text-neutral-300 dark:hover:bg-neutral-700/50",
|
|
283
|
+
"focus:bg-neutral-100 dark:focus:bg-neutral-700"
|
|
284
|
+
),
|
|
285
|
+
children: [
|
|
286
|
+
/* @__PURE__ */ jsx(
|
|
287
|
+
"span",
|
|
288
|
+
{
|
|
289
|
+
"data-slot": "country-dropdown-option-flag",
|
|
290
|
+
className: "text-base leading-none",
|
|
291
|
+
"aria-hidden": "true",
|
|
292
|
+
children: country.flag
|
|
293
|
+
}
|
|
294
|
+
),
|
|
295
|
+
/* @__PURE__ */ jsx(
|
|
296
|
+
"span",
|
|
297
|
+
{
|
|
298
|
+
"data-slot": "country-dropdown-option-name",
|
|
299
|
+
className: "flex-1 truncate",
|
|
300
|
+
children: country.name
|
|
301
|
+
}
|
|
302
|
+
),
|
|
303
|
+
/* @__PURE__ */ jsx(
|
|
304
|
+
"span",
|
|
305
|
+
{
|
|
306
|
+
"data-slot": "country-dropdown-option-dialcode",
|
|
307
|
+
className: "shrink-0 text-xs text-neutral-500 dark:text-neutral-400",
|
|
308
|
+
children: country.dialCode
|
|
309
|
+
}
|
|
310
|
+
)
|
|
311
|
+
]
|
|
312
|
+
},
|
|
313
|
+
country.code
|
|
314
|
+
))
|
|
315
|
+
}
|
|
316
|
+
)
|
|
317
|
+
]
|
|
318
|
+
}
|
|
319
|
+
)
|
|
320
|
+
]
|
|
321
|
+
}
|
|
322
|
+
);
|
|
323
|
+
}
|
|
324
|
+
CountryCodeDropdown.displayName = "CountryCodeDropdown";
|
|
325
|
+
|
|
326
|
+
export { CountryCodeDropdown, formatE164, validatePhoneNumber };
|
|
327
|
+
//# sourceMappingURL=chunk-7XWPUWSL.js.map
|
|
328
|
+
//# sourceMappingURL=chunk-7XWPUWSL.js.map
|