bootstrap-vue-next 0.44.2 → 0.44.3
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/{BAccordion-BJcDjMYL.mjs → BAccordion-BU80DI3B.mjs} +6 -6
- package/dist/{BAccordion-BJcDjMYL.mjs.map → BAccordion-BU80DI3B.mjs.map} +1 -1
- package/dist/{BAccordion-CQIw-5xs.js → BAccordion-DZ50ppJx.js} +6 -6
- package/dist/{BAccordion-CQIw-5xs.js.map → BAccordion-DZ50ppJx.js.map} +1 -1
- package/dist/{BAlert-DaQxH8c1.mjs → BAlert-CuWkyQoY.mjs} +9 -9
- package/dist/{BAlert-DaQxH8c1.mjs.map → BAlert-CuWkyQoY.mjs.map} +1 -1
- package/dist/{BAlert-CVtoW2SX.js → BAlert-DTvDu9YQ.js} +9 -9
- package/dist/{BAlert-CVtoW2SX.js.map → BAlert-DTvDu9YQ.js.map} +1 -1
- package/dist/{BApp-CIu-zI8K.mjs → BApp-DJWC2mB8.mjs} +2 -2
- package/dist/{BApp-CIu-zI8K.mjs.map → BApp-DJWC2mB8.mjs.map} +1 -1
- package/dist/{BApp-cBKQc5Dd.js → BApp-DaM0UKIg.js} +2 -2
- package/dist/{BApp-cBKQc5Dd.js.map → BApp-DaM0UKIg.js.map} +1 -1
- package/dist/BAspect-BULTO240.js +50 -0
- package/dist/BAspect-BULTO240.js.map +1 -0
- package/dist/BAspect-CwokVvvn.mjs +44 -0
- package/dist/BAspect-CwokVvvn.mjs.map +1 -0
- package/dist/{BAvatar-BcQeFYZU.js → BAvatar-eEIyfQso.js} +7 -7
- package/dist/{BAvatar-BcQeFYZU.js.map → BAvatar-eEIyfQso.js.map} +1 -1
- package/dist/{BAvatar-C7Vc4wad.mjs → BAvatar-vI7zHFsj.mjs} +7 -7
- package/dist/{BAvatar-C7Vc4wad.mjs.map → BAvatar-vI7zHFsj.mjs.map} +1 -1
- package/dist/{BBadge-CKGGd4xB.js → BBadge-Cpuk1892.js} +5 -5
- package/dist/{BBadge-CKGGd4xB.js.map → BBadge-Cpuk1892.js.map} +1 -1
- package/dist/{BBadge-Dfkx4SMN.mjs → BBadge-xiyuzuG6.mjs} +5 -5
- package/dist/{BBadge-Dfkx4SMN.mjs.map → BBadge-xiyuzuG6.mjs.map} +1 -1
- package/dist/{BBreadcrumb-1Wxpf1iy.js → BBreadcrumb-BkRDTYv1.js} +4 -4
- package/dist/{BBreadcrumb-1Wxpf1iy.js.map → BBreadcrumb-BkRDTYv1.js.map} +1 -1
- package/dist/{BBreadcrumb-CR35-KcI.mjs → BBreadcrumb-CjPr1FWj.mjs} +4 -4
- package/dist/{BBreadcrumb-CR35-KcI.mjs.map → BBreadcrumb-CjPr1FWj.mjs.map} +1 -1
- package/dist/{BButton-BtCX70_2.mjs → BButton-B4xE6uw6.mjs} +5 -5
- package/dist/{BButton-BtCX70_2.mjs.map → BButton-B4xE6uw6.mjs.map} +1 -1
- package/dist/{BButton-C_bVBx8e.js → BButton-B5oWZOoX.js} +5 -5
- package/dist/{BButton-C_bVBx8e.js.map → BButton-B5oWZOoX.js.map} +1 -1
- package/dist/{BButton-1yV1UiT7.mjs → BButton-DPCH-g3G.mjs} +4 -4
- package/dist/{BButton-1yV1UiT7.mjs.map → BButton-DPCH-g3G.mjs.map} +1 -1
- package/dist/{BButton-BID3NrxE.js → BButton-sb1cBCIb.js} +4 -4
- package/dist/{BButton-BID3NrxE.js.map → BButton-sb1cBCIb.js.map} +1 -1
- package/dist/{BCard-BIQQg9Rx.js → BCard-Bc6OI3iJ.js} +5 -5
- package/dist/{BCard-BIQQg9Rx.js.map → BCard-Bc6OI3iJ.js.map} +1 -1
- package/dist/{BCard-D1J5OVRY.js → BCard-BpaUsusY.js} +3 -3
- package/dist/{BCard-D1J5OVRY.js.map → BCard-BpaUsusY.js.map} +1 -1
- package/dist/{BCard-CY6iY456.mjs → BCard-DQxiuBWk.mjs} +3 -3
- package/dist/{BCard-CY6iY456.mjs.map → BCard-DQxiuBWk.mjs.map} +1 -1
- package/dist/{BCard-Vf1haqo5.mjs → BCard-Dly2DM9l.mjs} +5 -5
- package/dist/{BCard-Vf1haqo5.mjs.map → BCard-Dly2DM9l.mjs.map} +1 -1
- package/dist/{BCarousel-C3CA_wGV.mjs → BCarousel-DarHY6e7.mjs} +5 -5
- package/dist/{BCarousel-C3CA_wGV.mjs.map → BCarousel-DarHY6e7.mjs.map} +1 -1
- package/dist/{BCarousel-BH6WIvJx.js → BCarousel-DvQKUvSp.js} +5 -5
- package/dist/{BCarousel-BH6WIvJx.js.map → BCarousel-DvQKUvSp.js.map} +1 -1
- package/dist/{BCloseButton-CgIVNv2g.js → BCloseButton-CN__Jjcj.js} +2 -2
- package/dist/{BCloseButton-CgIVNv2g.js.map → BCloseButton-CN__Jjcj.js.map} +1 -1
- package/dist/{BCloseButton-DrD0tpan.mjs → BCloseButton-CjgbR1Ec.mjs} +2 -2
- package/dist/{BCloseButton-DrD0tpan.mjs.map → BCloseButton-CjgbR1Ec.mjs.map} +1 -1
- package/dist/{BCol-BjC3q-su.mjs → BCol-BAGO0XhU.mjs} +3 -3
- package/dist/{BCol-BjC3q-su.mjs.map → BCol-BAGO0XhU.mjs.map} +1 -1
- package/dist/{BCol-GOE5drq_.js → BCol-CXEKpSfY.js} +3 -3
- package/dist/{BCol-GOE5drq_.js.map → BCol-CXEKpSfY.js.map} +1 -1
- package/dist/{BCollapse-DqeS5WyB.mjs → BCollapse-BzIGTt3g.mjs} +4 -4
- package/dist/{BCollapse-DqeS5WyB.mjs.map → BCollapse-BzIGTt3g.mjs.map} +1 -1
- package/dist/{BCollapse-BMSZfqqk.js → BCollapse-D2tCzh6C.js} +4 -4
- package/dist/{BCollapse-BMSZfqqk.js.map → BCollapse-D2tCzh6C.js.map} +1 -1
- package/dist/{BContainer-NRhwYcFj.mjs → BContainer-CBvLhEKU.mjs} +4 -4
- package/dist/{BContainer-NRhwYcFj.mjs.map → BContainer-CBvLhEKU.mjs.map} +1 -1
- package/dist/{BContainer-CdNYUb9S.js → BContainer-D0G_4Ccr.js} +4 -4
- package/dist/{BContainer-CdNYUb9S.js.map → BContainer-D0G_4Ccr.js.map} +1 -1
- package/dist/{BDateField-CRFFJ4Sj.mjs → BDateField-Ci05mtvE.mjs} +5 -5
- package/dist/{BDateField-CRFFJ4Sj.mjs.map → BDateField-Ci05mtvE.mjs.map} +1 -1
- package/dist/{BDateField-3Xb73vd-.js → BDateField-DOQj40bP.js} +5 -5
- package/dist/{BDateField-3Xb73vd-.js.map → BDateField-DOQj40bP.js.map} +1 -1
- package/dist/{BDatePicker-rdtRZlra.js → BDatePicker-CHtppbq6.js} +6 -6
- package/dist/{BDatePicker-rdtRZlra.js.map → BDatePicker-CHtppbq6.js.map} +1 -1
- package/dist/{BDatePicker-DPtAqGyV.mjs → BDatePicker-CpwEikK3.mjs} +6 -6
- package/dist/{BDatePicker-DPtAqGyV.mjs.map → BDatePicker-CpwEikK3.mjs.map} +1 -1
- package/dist/{BDropdown-CKnx6hUH.mjs → BDropdown-CkklXJE1.mjs} +10 -10
- package/dist/{BDropdown-CKnx6hUH.mjs.map → BDropdown-CkklXJE1.mjs.map} +1 -1
- package/dist/{BDropdown-k-nulez8.mjs → BDropdown-CmUoG4aR.mjs} +5 -5
- package/dist/{BDropdown-k-nulez8.mjs.map → BDropdown-CmUoG4aR.mjs.map} +1 -1
- package/dist/{BDropdown-C2L69dLN.js → BDropdown-g6_09NKU.js} +10 -10
- package/dist/{BDropdown-C2L69dLN.js.map → BDropdown-g6_09NKU.js.map} +1 -1
- package/dist/{BDropdown-CrgX7oCn.js → BDropdown-i62kSdFN.js} +5 -5
- package/dist/{BDropdown-CrgX7oCn.js.map → BDropdown-i62kSdFN.js.map} +1 -1
- package/dist/{BForm-CPHblWb2.mjs → BForm-BKeJ6pQN.mjs} +2 -2
- package/dist/{BForm-CPHblWb2.mjs.map → BForm-BKeJ6pQN.mjs.map} +1 -1
- package/dist/{BForm-ppPvhIuu.js → BForm-BW5sAbJu.js} +6 -6
- package/dist/{BForm-ppPvhIuu.js.map → BForm-BW5sAbJu.js.map} +1 -1
- package/dist/{BForm-DZW1uWD-.mjs → BForm-BYWcrW3i.mjs} +6 -6
- package/dist/{BForm-DZW1uWD-.mjs.map → BForm-BYWcrW3i.mjs.map} +1 -1
- package/dist/{BForm-B0YEolfQ.js → BForm-D1hmPFIR.js} +2 -2
- package/dist/{BForm-B0YEolfQ.js.map → BForm-D1hmPFIR.js.map} +1 -1
- package/dist/{BFormCheckbox-CsN1a4jm.mjs → BFormCheckbox-LMGyV5Wh.mjs} +5 -5
- package/dist/{BFormCheckbox-CsN1a4jm.mjs.map → BFormCheckbox-LMGyV5Wh.mjs.map} +1 -1
- package/dist/{BFormCheckbox-MEwee9Ij.js → BFormCheckbox-eSsgdaji.js} +5 -5
- package/dist/{BFormCheckbox-MEwee9Ij.js.map → BFormCheckbox-eSsgdaji.js.map} +1 -1
- package/dist/{BFormFile-CNtEA98J.mjs → BFormFile-DUd50zn5.mjs} +4 -4
- package/dist/{BFormFile-CNtEA98J.mjs.map → BFormFile-DUd50zn5.mjs.map} +1 -1
- package/dist/{BFormFile-BEHeBj6q.js → BFormFile-N491i_FE.js} +4 -4
- package/dist/{BFormFile-BEHeBj6q.js.map → BFormFile-N491i_FE.js.map} +1 -1
- package/dist/{BFormGroup-DBVGyJ-f.mjs → BFormGroup-Bm3Af8hx.mjs} +8 -8
- package/dist/{BFormGroup-DBVGyJ-f.mjs.map → BFormGroup-Bm3Af8hx.mjs.map} +1 -1
- package/dist/{BFormGroup-CGjb_pUi.js → BFormGroup-DN4AyqDY.js} +8 -8
- package/dist/{BFormGroup-CGjb_pUi.js.map → BFormGroup-DN4AyqDY.js.map} +1 -1
- package/dist/{BFormInput-4vCGzAoO.js → BFormInput-DniXdPz5.js} +3 -3
- package/dist/{BFormInput-4vCGzAoO.js.map → BFormInput-DniXdPz5.js.map} +1 -1
- package/dist/{BFormInput-DrZnHCLO.mjs → BFormInput-UqEvTffC.mjs} +3 -3
- package/dist/{BFormInput-DrZnHCLO.mjs.map → BFormInput-UqEvTffC.mjs.map} +1 -1
- package/dist/{BFormRadio-BXpiJTsS.mjs → BFormRadio-B7fL16AZ.mjs} +5 -5
- package/dist/{BFormRadio-BXpiJTsS.mjs.map → BFormRadio-B7fL16AZ.mjs.map} +1 -1
- package/dist/{BFormRadio-BzHsRe9X.js → BFormRadio-C9U9PbDA.js} +5 -5
- package/dist/{BFormRadio-BzHsRe9X.js.map → BFormRadio-C9U9PbDA.js.map} +1 -1
- package/dist/{BFormRating-Cq94zurU.mjs → BFormRating-BJI4hTHm.mjs} +4 -4
- package/dist/{BFormRating-Cq94zurU.mjs.map → BFormRating-BJI4hTHm.mjs.map} +1 -1
- package/dist/{BFormRating-_MVRGNOF.js → BFormRating-JeEiyayh.js} +4 -4
- package/dist/{BFormRating-_MVRGNOF.js.map → BFormRating-JeEiyayh.js.map} +1 -1
- package/dist/{BFormSelect-DbpJ_0j-.mjs → BFormSelect-BleWBr-U.mjs} +6 -6
- package/dist/{BFormSelect-DbpJ_0j-.mjs.map → BFormSelect-BleWBr-U.mjs.map} +1 -1
- package/dist/{BFormSelect-DFa1-5ez.js → BFormSelect-D_yYXijf.js} +6 -6
- package/dist/{BFormSelect-DFa1-5ez.js.map → BFormSelect-D_yYXijf.js.map} +1 -1
- package/dist/{BFormSpinbutton-DmzfRDeR.mjs → BFormSpinbutton-5JRMW1Bo.mjs} +5 -5
- package/dist/{BFormSpinbutton-DmzfRDeR.mjs.map → BFormSpinbutton-5JRMW1Bo.mjs.map} +1 -1
- package/dist/{BFormSpinbutton-DzJ071Gz.js → BFormSpinbutton-Dix9U_c1.js} +5 -5
- package/dist/{BFormSpinbutton-DzJ071Gz.js.map → BFormSpinbutton-Dix9U_c1.js.map} +1 -1
- package/dist/{BFormTags-pK9i3cOB.js → BFormTags-BUoQXBA9.js} +7 -7
- package/dist/{BFormTags-pK9i3cOB.js.map → BFormTags-BUoQXBA9.js.map} +1 -1
- package/dist/{BFormTags-Cobh04P9.mjs → BFormTags-BjyHMiw1.mjs} +7 -7
- package/dist/{BFormTags-Cobh04P9.mjs.map → BFormTags-BjyHMiw1.mjs.map} +1 -1
- package/dist/{BFormTextarea-BtXarcjA.js → BFormTextarea-BIrsIHU1.js} +3 -3
- package/dist/{BFormTextarea-BtXarcjA.js.map → BFormTextarea-BIrsIHU1.js.map} +1 -1
- package/dist/{BFormTextarea-ClcoJrSM.mjs → BFormTextarea-D8waUYBT.mjs} +3 -3
- package/dist/{BFormTextarea-ClcoJrSM.mjs.map → BFormTextarea-D8waUYBT.mjs.map} +1 -1
- package/dist/{BFormValidFeedback-foz9BlkH.mjs → BFormValidFeedback-BNQNdH26.mjs} +3 -3
- package/dist/{BFormValidFeedback-foz9BlkH.mjs.map → BFormValidFeedback-BNQNdH26.mjs.map} +1 -1
- package/dist/{BFormValidFeedback-Ot8gdDST.js → BFormValidFeedback-CiZ4cn1v.js} +3 -3
- package/dist/{BFormValidFeedback-Ot8gdDST.js.map → BFormValidFeedback-CiZ4cn1v.js.map} +1 -1
- package/dist/{BImg-BrA0ZRS6.js → BImg-BFKDHH7y.js} +4 -4
- package/dist/{BImg-BrA0ZRS6.js.map → BImg-BFKDHH7y.js.map} +1 -1
- package/dist/{BImg-b_3eTiEq.mjs → BImg-BZ7hac1l.mjs} +4 -4
- package/dist/{BImg-b_3eTiEq.mjs.map → BImg-BZ7hac1l.mjs.map} +1 -1
- package/dist/{BInputGroup-Cr0qLUds.js → BInputGroup-DwrQVmGT.js} +2 -2
- package/dist/{BInputGroup-Cr0qLUds.js.map → BInputGroup-DwrQVmGT.js.map} +1 -1
- package/dist/{BInputGroup-B8fKBtip.mjs → BInputGroup-xno5tJWV.mjs} +2 -2
- package/dist/{BInputGroup-B8fKBtip.mjs.map → BInputGroup-xno5tJWV.mjs.map} +1 -1
- package/dist/{BLink-DoYZ8dBl.mjs → BLink-Cz5YCsnv.mjs} +4 -4
- package/dist/{BLink-DoYZ8dBl.mjs.map → BLink-Cz5YCsnv.mjs.map} +1 -1
- package/dist/{BLink-DW7s8W_N.js → BLink-uemyYKst.js} +4 -4
- package/dist/{BLink-DW7s8W_N.js.map → BLink-uemyYKst.js.map} +1 -1
- package/dist/{BListGroup-ByYmtuCM.mjs → BListGroup-DHdBjAI1.mjs} +3 -3
- package/dist/{BListGroup-ByYmtuCM.mjs.map → BListGroup-DHdBjAI1.mjs.map} +1 -1
- package/dist/{BListGroup-clQNXk23.js → BListGroup-yJ9SOYxq.js} +3 -3
- package/dist/{BListGroup-clQNXk23.js.map → BListGroup-yJ9SOYxq.js.map} +1 -1
- package/dist/{BModal-d3FKaKhA.js → BModal-CVf686JS.js} +10 -10
- package/dist/{BModal-d3FKaKhA.js.map → BModal-CVf686JS.js.map} +1 -1
- package/dist/{BModal-TCXrZEZk.mjs → BModal-DkX-2F1v.mjs} +10 -10
- package/dist/{BModal-TCXrZEZk.mjs.map → BModal-DkX-2F1v.mjs.map} +1 -1
- package/dist/{BNav-BBr8213N.mjs → BNav-D88X9xHW.mjs} +7 -7
- package/dist/{BNav-BBr8213N.mjs.map → BNav-D88X9xHW.mjs.map} +1 -1
- package/dist/{BNav-BMAZcVDS.js → BNav-dxOO1pJI.js} +7 -7
- package/dist/{BNav-BMAZcVDS.js.map → BNav-dxOO1pJI.js.map} +1 -1
- package/dist/{BNavbar-DtgNmsyI.mjs → BNavbar-DALgesyZ.mjs} +6 -6
- package/dist/{BNavbar-DtgNmsyI.mjs.map → BNavbar-DALgesyZ.mjs.map} +1 -1
- package/dist/{BNavbar-BfYFzX1s.js → BNavbar-EayLl9th.js} +6 -6
- package/dist/{BNavbar-BfYFzX1s.js.map → BNavbar-EayLl9th.js.map} +1 -1
- package/dist/{BOffcanvas-YsVap-9w.js → BOffcanvas-CJDXvuCR.js} +9 -9
- package/dist/{BOffcanvas-YsVap-9w.js.map → BOffcanvas-CJDXvuCR.js.map} +1 -1
- package/dist/{BOffcanvas-BklEA-4x.mjs → BOffcanvas-CJUaqRuT.mjs} +9 -9
- package/dist/{BOffcanvas-BklEA-4x.mjs.map → BOffcanvas-CJUaqRuT.mjs.map} +1 -1
- package/dist/{BOverlay-DOfvBAZb.mjs → BOverlay-CZUXqAOJ.mjs} +6 -6
- package/dist/{BOverlay-DOfvBAZb.mjs.map → BOverlay-CZUXqAOJ.mjs.map} +1 -1
- package/dist/{BOverlay-Dg9YM7p1.js → BOverlay-Ct1Be98i.js} +6 -6
- package/dist/{BOverlay-Dg9YM7p1.js.map → BOverlay-Ct1Be98i.js.map} +1 -1
- package/dist/{BPagination-B868NBmG.mjs → BPagination-BOW0ZgHP.mjs} +5 -5
- package/dist/{BPagination-B868NBmG.mjs.map → BPagination-BOW0ZgHP.mjs.map} +1 -1
- package/dist/{BPagination-9P9Xh3cN.js → BPagination-Dm-dKaSQ.js} +5 -5
- package/dist/{BPagination-9P9Xh3cN.js.map → BPagination-Dm-dKaSQ.js.map} +1 -1
- package/dist/{BPlaceholder-DPEVmogO.js → BPlaceholder-LEAD84zn.js} +5 -5
- package/dist/{BPlaceholder-DPEVmogO.js.map → BPlaceholder-LEAD84zn.js.map} +1 -1
- package/dist/{BPlaceholder-7UJ3Nyb3.mjs → BPlaceholder-V5sitFFG.mjs} +5 -5
- package/dist/{BPlaceholder-7UJ3Nyb3.mjs.map → BPlaceholder-V5sitFFG.mjs.map} +1 -1
- package/dist/{BProgress-Bdf5AncM.mjs → BProgress-D0yfZ2Ze.mjs} +3 -3
- package/dist/{BProgress-Bdf5AncM.mjs.map → BProgress-D0yfZ2Ze.mjs.map} +1 -1
- package/dist/{BProgress-CeEIdt1a.js → BProgress-DAnEfDXq.js} +3 -3
- package/dist/{BProgress-CeEIdt1a.js.map → BProgress-DAnEfDXq.js.map} +1 -1
- package/dist/{BRow-NaXJzpS-.mjs → BRow-BKxCxJUU.mjs} +4 -4
- package/dist/{BRow-NaXJzpS-.mjs.map → BRow-BKxCxJUU.mjs.map} +1 -1
- package/dist/{BRow-DGi1WkB9.js → BRow-bG6T9jY3.js} +4 -4
- package/dist/{BRow-DGi1WkB9.js.map → BRow-bG6T9jY3.js.map} +1 -1
- package/dist/{BSpinner-Kska3Bsd.js → BSpinner-8UMAINYb.js} +3 -3
- package/dist/{BSpinner-Kska3Bsd.js.map → BSpinner-8UMAINYb.js.map} +1 -1
- package/dist/{BSpinner-DlLxrIkh.mjs → BSpinner-BpnwONvx.mjs} +3 -3
- package/dist/{BSpinner-DlLxrIkh.mjs.map → BSpinner-BpnwONvx.mjs.map} +1 -1
- package/dist/{BTable-C__GSYX2.mjs → BTable-CYvvqn6I.mjs} +8 -8
- package/dist/{BTable-C__GSYX2.mjs.map → BTable-CYvvqn6I.mjs.map} +1 -1
- package/dist/{BTable-BiNbXnsR.js → BTable-DSuQWlMd.js} +8 -8
- package/dist/{BTable-BiNbXnsR.js.map → BTable-DSuQWlMd.js.map} +1 -1
- package/dist/{BTableSimple-fwaF0Kws.js → BTableSimple-Bq8PToKM.js} +5 -5
- package/dist/{BTableSimple-fwaF0Kws.js.map → BTableSimple-Bq8PToKM.js.map} +1 -1
- package/dist/{BTableSimple-eebTf2L5.mjs → BTableSimple-DfE2d_yr.mjs} +5 -5
- package/dist/{BTableSimple-eebTf2L5.mjs.map → BTableSimple-DfE2d_yr.mjs.map} +1 -1
- package/dist/{BTabs-BxwRSBMv.js → BTabs-C_zLwDuN.js} +6 -6
- package/dist/{BTabs-BxwRSBMv.js.map → BTabs-C_zLwDuN.js.map} +1 -1
- package/dist/{BTabs-7IT0dhVr.mjs → BTabs-De_t7t0r.mjs} +6 -6
- package/dist/{BTabs-7IT0dhVr.mjs.map → BTabs-De_t7t0r.mjs.map} +1 -1
- package/dist/{BTimeField-CZw1_K7v.mjs → BTimeField-Ba7V9u04.mjs} +4 -4
- package/dist/{BTimeField-CZw1_K7v.mjs.map → BTimeField-Ba7V9u04.mjs.map} +1 -1
- package/dist/{BTimeField-CngB6NOW.js → BTimeField-BjiB8bN9.js} +4 -4
- package/dist/{BTimeField-CngB6NOW.js.map → BTimeField-BjiB8bN9.js.map} +1 -1
- package/dist/{BToast-IYBku5Nr.mjs → BToast-DGcCFzvf.mjs} +10 -10
- package/dist/{BToast-IYBku5Nr.mjs.map → BToast-DGcCFzvf.mjs.map} +1 -1
- package/dist/{BToast-BraVbf4N.js → BToast-SdIR1HJa.js} +10 -10
- package/dist/{BToast-BraVbf4N.js.map → BToast-SdIR1HJa.js.map} +1 -1
- package/dist/{BTooltip-B2hE5Q6m.js → BTooltip-CrHabClh.js} +3 -3
- package/dist/{BTooltip-B2hE5Q6m.js.map → BTooltip-CrHabClh.js.map} +1 -1
- package/dist/{BTooltip-BuK_zb1B.mjs → BTooltip-U16exDFb.mjs} +3 -3
- package/dist/{BTooltip-BuK_zb1B.mjs.map → BTooltip-U16exDFb.mjs.map} +1 -1
- package/dist/{BootstrapVueOptions-Dtdn7_AJ.mjs → BootstrapVueOptions-Bswes3nS.mjs} +2 -1
- package/dist/BootstrapVueOptions-Bswes3nS.mjs.map +1 -0
- package/dist/{BootstrapVueOptions-CVxLmDvx.js → BootstrapVueOptions-BxTxSFXn.js} +2 -1
- package/dist/BootstrapVueOptions-BxTxSFXn.js.map +1 -0
- package/dist/{ConditionalTeleport-BDWcebyD.js → ConditionalTeleport-BJZk6HAx.js} +1 -1
- package/dist/{ConditionalTeleport-BDWcebyD.js.map → ConditionalTeleport-BJZk6HAx.js.map} +1 -1
- package/dist/{ConditionalTeleport-B4KYZIM6.mjs → ConditionalTeleport-BNsziElf.mjs} +1 -1
- package/dist/{ConditionalTeleport-B4KYZIM6.mjs.map → ConditionalTeleport-BNsziElf.mjs.map} +1 -1
- package/dist/{ConditionalWrapper-ZqZKYsic.js → ConditionalWrapper-BcQirqyl.js} +1 -1
- package/dist/{ConditionalWrapper-ZqZKYsic.js.map → ConditionalWrapper-BcQirqyl.js.map} +1 -1
- package/dist/{ConditionalWrapper-BR9CKZNU.mjs → ConditionalWrapper-BjjQWNtR.mjs} +1 -1
- package/dist/{ConditionalWrapper-BR9CKZNU.mjs.map → ConditionalWrapper-BjjQWNtR.mjs.map} +1 -1
- package/dist/{DateRangeFieldInput-bA6IK9lx.mjs → DateRangeFieldInput-BaxQpIux.mjs} +2 -2
- package/dist/{DateRangeFieldInput-bA6IK9lx.mjs.map → DateRangeFieldInput-BaxQpIux.mjs.map} +1 -1
- package/dist/{DateRangeFieldInput-bXDqGVUe.js → DateRangeFieldInput-qCIvFM7a.js} +2 -2
- package/dist/{DateRangeFieldInput-bXDqGVUe.js.map → DateRangeFieldInput-qCIvFM7a.js.map} +1 -1
- package/dist/bootstrap-vue-next.mjs +58 -57
- package/dist/bootstrap-vue-next.umd.js +58 -56
- package/dist/{classes-D6JE1Dex.mjs → classes-B0E5Y78Y.mjs} +1 -1
- package/dist/{classes-D6JE1Dex.mjs.map → classes-B0E5Y78Y.mjs.map} +1 -1
- package/dist/{classes-vdSVs0gA.js → classes-D5wrmmVs.js} +1 -1
- package/dist/{classes-vdSVs0gA.js.map → classes-D5wrmmVs.js.map} +1 -1
- package/dist/components/BAccordion/BAccordionItem.vue.d.mts +1 -1
- package/dist/components/BAccordion/BAccordionItem.vue.d.ts +1 -1
- package/dist/components/BAspect/BAspect.vue.d.mts +21 -0
- package/dist/components/BAspect/BAspect.vue.d.ts +21 -0
- package/dist/components/BAspect/index.d.mts +1 -0
- package/dist/components/BAspect/index.d.ts +1 -0
- package/dist/components/BButton/BButtonGroup.vue.d.mts +1 -1
- package/dist/components/BButton/BButtonGroup.vue.d.ts +1 -1
- package/dist/components/BCard/BCard.vue.d.mts +1 -1
- package/dist/components/BCard/BCard.vue.d.ts +1 -1
- package/dist/components/BCard/BCardImg.vue.d.mts +1 -1
- package/dist/components/BCard/BCardImg.vue.d.ts +1 -1
- package/dist/components/BCollapse/BCollapse.vue.d.mts +1 -1
- package/dist/components/BCollapse/BCollapse.vue.d.ts +1 -1
- package/dist/components/BDropdown/BDropdown.vue.d.mts +1 -1
- package/dist/components/BDropdown/BDropdown.vue.d.ts +1 -1
- package/dist/components/BForm/BFormInvalidFeedback.vue.d.mts +1 -1
- package/dist/components/BForm/BFormInvalidFeedback.vue.d.ts +1 -1
- package/dist/components/BForm/BFormValidFeedback.vue.d.mts +1 -1
- package/dist/components/BForm/BFormValidFeedback.vue.d.ts +1 -1
- package/dist/components/BFormCheckbox/BFormCheckbox.vue.d.mts +1 -1
- package/dist/components/BFormCheckbox/BFormCheckbox.vue.d.ts +1 -1
- package/dist/components/BFormFile/BFormFile.vue.d.mts +1 -1
- package/dist/components/BFormFile/BFormFile.vue.d.ts +1 -1
- package/dist/components/BFormGroup/BFormGroup.vue.d.mts +1 -1
- package/dist/components/BFormGroup/BFormGroup.vue.d.ts +1 -1
- package/dist/components/BImg/BImg.vue.d.mts +1 -1
- package/dist/components/BImg/BImg.vue.d.ts +1 -1
- package/dist/components/BInputGroup/BInputGroup.vue.d.mts +1 -1
- package/dist/components/BInputGroup/BInputGroup.vue.d.ts +1 -1
- package/dist/components/BListGroup/BListGroup.vue.d.mts +1 -1
- package/dist/components/BListGroup/BListGroup.vue.d.ts +1 -1
- package/dist/components/BNav/BNav.vue.d.mts +1 -1
- package/dist/components/BNav/BNav.vue.d.ts +1 -1
- package/dist/components/BNav/BNavItemDropdown.vue.d.mts +13 -13
- package/dist/components/BNav/BNavItemDropdown.vue.d.ts +13 -13
- package/dist/components/BNavbar/BNavbar.vue.d.mts +1 -1
- package/dist/components/BNavbar/BNavbar.vue.d.ts +1 -1
- package/dist/components/BNavbar/BNavbarNav.vue.d.mts +1 -1
- package/dist/components/BNavbar/BNavbarNav.vue.d.ts +1 -1
- package/dist/components/BOffcanvas/BOffcanvas.vue.d.mts +1 -1
- package/dist/components/BOffcanvas/BOffcanvas.vue.d.ts +1 -1
- package/dist/components/BPlaceholder/BPlaceholder.vue.d.mts +1 -1
- package/dist/components/BPlaceholder/BPlaceholder.vue.d.ts +1 -1
- package/dist/components/BPlaceholder/BPlaceholderButton.vue.d.mts +1 -1
- package/dist/components/BPlaceholder/BPlaceholderButton.vue.d.ts +1 -1
- package/dist/components/BProgress/BProgress.vue.d.mts +1 -1
- package/dist/components/BProgress/BProgress.vue.d.ts +1 -1
- package/dist/components/BSpinner/BSpinner.vue.d.mts +2 -2
- package/dist/components/BSpinner/BSpinner.vue.d.ts +2 -2
- package/dist/components/BTabs/BTabs.vue.d.mts +1 -1
- package/dist/components/BTabs/BTabs.vue.d.ts +1 -1
- package/dist/components/index.d.mts +1 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/{constants-CQ8ucyPI.mjs → constants-BSIK14yA.mjs} +1 -1
- package/dist/{constants-CQ8ucyPI.mjs.map → constants-BSIK14yA.mjs.map} +1 -1
- package/dist/{constants-DMR5FAE3.js → constants-hccBP09R.js} +1 -1
- package/dist/{constants-DMR5FAE3.js.map → constants-hccBP09R.js.map} +1 -1
- package/dist/{debounce-BfDJWP7y.js → debounce-DQsw8FWv.js} +2 -2
- package/dist/{debounce-BfDJWP7y.js.map → debounce-DQsw8FWv.js.map} +1 -1
- package/dist/{debounce-BIVtU5ek.mjs → debounce-DeVyu4Ny.mjs} +2 -2
- package/dist/{debounce-BIVtU5ek.mjs.map → debounce-DeVyu4Ny.mjs.map} +1 -1
- package/dist/{flattenFragments-DfLb4YB2.js → flattenFragments-C1WWqm25.js} +1 -1
- package/dist/{flattenFragments-DfLb4YB2.js.map → flattenFragments-C1WWqm25.js.map} +1 -1
- package/dist/{flattenFragments-B1W_x5L2.mjs → flattenFragments-ClbLQGqR.mjs} +1 -1
- package/dist/{flattenFragments-B1W_x5L2.mjs.map → flattenFragments-ClbLQGqR.mjs.map} +1 -1
- package/dist/{floating-ui.vue-B09oeNTW.js → floating-ui.vue-CW2IKmom.js} +1 -1
- package/dist/{floating-ui.vue-B09oeNTW.js.map → floating-ui.vue-CW2IKmom.js.map} +1 -1
- package/dist/{floating-ui.vue-CcfLuVCZ.mjs → floating-ui.vue-DIWi4LGB.mjs} +1 -1
- package/dist/{floating-ui.vue-CcfLuVCZ.mjs.map → floating-ui.vue-DIWi4LGB.mjs.map} +1 -1
- package/dist/{floatingUi-9NcUa5r7.mjs → floatingUi-BErx3eqf.mjs} +7 -7
- package/dist/{floatingUi-9NcUa5r7.mjs.map → floatingUi-BErx3eqf.mjs.map} +1 -1
- package/dist/{floatingUi-BLlCKrbj.js → floatingUi-syPgL0ve.js} +7 -7
- package/dist/{floatingUi-BLlCKrbj.js.map → floatingUi-syPgL0ve.js.map} +1 -1
- package/dist/{functions-C6AToZGR.mjs → functions-BcMenQqL.mjs} +1 -1
- package/dist/functions-BcMenQqL.mjs.map +1 -0
- package/dist/{functions-DCQKr6wc.js → functions-Bx1HDqMv.js} +1 -1
- package/dist/functions-Bx1HDqMv.js.map +1 -0
- package/dist/{getClasses-BQLj0MHF.js → getClasses-BpIobrfU.js} +1 -1
- package/dist/{getClasses-BQLj0MHF.js.map → getClasses-BpIobrfU.js.map} +1 -1
- package/dist/{getClasses-_sZDgS-l.mjs → getClasses-DwzMjfzX.mjs} +1 -1
- package/dist/{getClasses-_sZDgS-l.mjs.map → getClasses-DwzMjfzX.mjs.map} +1 -1
- package/dist/{getElement-D5DvkPzw.mjs → getElement-BPjh0Qkh.mjs} +1 -1
- package/dist/{getElement-D5DvkPzw.mjs.map → getElement-BPjh0Qkh.mjs.map} +1 -1
- package/dist/{getElement-BXXYfxYW.js → getElement-BPm7tpe2.js} +1 -1
- package/dist/{getElement-BXXYfxYW.js.map → getElement-BPm7tpe2.js.map} +1 -1
- package/dist/{object-CPeShLVx.js → object-BN7QwMcz.js} +1 -1
- package/dist/{object-CPeShLVx.js.map → object-BN7QwMcz.js.map} +1 -1
- package/dist/{object-B9ZW1_9f.mjs → object-CHQkkner.mjs} +1 -1
- package/dist/{object-B9ZW1_9f.mjs.map → object-CHQkkner.mjs.map} +1 -1
- package/dist/{registryAccess-B4xlltdn.mjs → registryAccess-BO4rk3Sm.mjs} +1 -1
- package/dist/{registryAccess-B4xlltdn.mjs.map → registryAccess-BO4rk3Sm.mjs.map} +1 -1
- package/dist/{registryAccess-Be_uJ4EV.js → registryAccess-ROXkP1Do.js} +1 -1
- package/dist/{registryAccess-Be_uJ4EV.js.map → registryAccess-ROXkP1Do.js.map} +1 -1
- package/dist/src/components/BAccordion/index.mjs +1 -1
- package/dist/src/components/BAccordion/index.umd.js +1 -1
- package/dist/src/components/BAlert/index.mjs +1 -1
- package/dist/src/components/BAlert/index.umd.js +1 -1
- package/dist/src/components/BApp/index.mjs +1 -1
- package/dist/src/components/BApp/index.umd.js +1 -1
- package/dist/src/components/BAspect/index.mjs +2 -0
- package/dist/src/components/BAspect/index.umd.js +3 -0
- package/dist/src/components/BAvatar/index.mjs +1 -1
- package/dist/src/components/BAvatar/index.umd.js +1 -1
- package/dist/src/components/BBadge/index.mjs +1 -1
- package/dist/src/components/BBadge/index.umd.js +1 -1
- package/dist/src/components/BBreadcrumb/index.mjs +1 -1
- package/dist/src/components/BBreadcrumb/index.umd.js +1 -1
- package/dist/src/components/BButton/index.mjs +3 -3
- package/dist/src/components/BButton/index.umd.js +3 -3
- package/dist/src/components/BCard/index.mjs +2 -2
- package/dist/src/components/BCard/index.umd.js +2 -2
- package/dist/src/components/BCarousel/index.mjs +1 -1
- package/dist/src/components/BCarousel/index.umd.js +1 -1
- package/dist/src/components/BCol/index.mjs +1 -1
- package/dist/src/components/BCol/index.umd.js +1 -1
- package/dist/src/components/BCollapse/index.mjs +1 -1
- package/dist/src/components/BCollapse/index.umd.js +1 -1
- package/dist/src/components/BContainer/index.mjs +3 -3
- package/dist/src/components/BContainer/index.umd.js +3 -3
- package/dist/src/components/BDateField/index.mjs +1 -1
- package/dist/src/components/BDateField/index.umd.js +1 -1
- package/dist/src/components/BDatePicker/index.mjs +1 -1
- package/dist/src/components/BDatePicker/index.umd.js +1 -1
- package/dist/src/components/BDropdown/index.mjs +2 -2
- package/dist/src/components/BDropdown/index.umd.js +2 -2
- package/dist/src/components/BForm/index.mjs +3 -3
- package/dist/src/components/BForm/index.umd.js +3 -3
- package/dist/src/components/BFormCheckbox/index.mjs +1 -1
- package/dist/src/components/BFormCheckbox/index.umd.js +1 -1
- package/dist/src/components/BFormFile/index.mjs +1 -1
- package/dist/src/components/BFormFile/index.umd.js +1 -1
- package/dist/src/components/BFormGroup/index.mjs +1 -1
- package/dist/src/components/BFormGroup/index.umd.js +1 -1
- package/dist/src/components/BFormInput/index.mjs +1 -1
- package/dist/src/components/BFormInput/index.umd.js +1 -1
- package/dist/src/components/BFormRadio/index.mjs +1 -1
- package/dist/src/components/BFormRadio/index.umd.js +1 -1
- package/dist/src/components/BFormRating/index.mjs +1 -1
- package/dist/src/components/BFormRating/index.umd.js +1 -1
- package/dist/src/components/BFormSelect/index.mjs +2 -2
- package/dist/src/components/BFormSelect/index.umd.js +2 -2
- package/dist/src/components/BFormSpinbutton/index.mjs +1 -1
- package/dist/src/components/BFormSpinbutton/index.umd.js +1 -1
- package/dist/src/components/BFormTags/index.mjs +1 -1
- package/dist/src/components/BFormTags/index.umd.js +1 -1
- package/dist/src/components/BFormTextarea/index.mjs +1 -1
- package/dist/src/components/BFormTextarea/index.umd.js +1 -1
- package/dist/src/components/BImg/index.mjs +1 -1
- package/dist/src/components/BImg/index.umd.js +1 -1
- package/dist/src/components/BInputGroup/index.mjs +1 -1
- package/dist/src/components/BInputGroup/index.umd.js +1 -1
- package/dist/src/components/BLink/index.mjs +1 -1
- package/dist/src/components/BLink/index.umd.js +1 -1
- package/dist/src/components/BListGroup/index.mjs +1 -1
- package/dist/src/components/BListGroup/index.umd.js +1 -1
- package/dist/src/components/BModal/index.mjs +1 -1
- package/dist/src/components/BModal/index.umd.js +1 -1
- package/dist/src/components/BNav/index.mjs +1 -1
- package/dist/src/components/BNav/index.umd.js +1 -1
- package/dist/src/components/BNavbar/index.mjs +1 -1
- package/dist/src/components/BNavbar/index.umd.js +1 -1
- package/dist/src/components/BOffcanvas/index.mjs +1 -1
- package/dist/src/components/BOffcanvas/index.umd.js +1 -1
- package/dist/src/components/BOverlay/index.mjs +1 -1
- package/dist/src/components/BOverlay/index.umd.js +1 -1
- package/dist/src/components/BPagination/index.mjs +1 -1
- package/dist/src/components/BPagination/index.umd.js +1 -1
- package/dist/src/components/BPlaceholder/index.mjs +1 -1
- package/dist/src/components/BPlaceholder/index.umd.js +1 -1
- package/dist/src/components/BPopover/index.mjs +1 -1
- package/dist/src/components/BPopover/index.umd.js +1 -1
- package/dist/src/components/BProgress/index.mjs +1 -1
- package/dist/src/components/BProgress/index.umd.js +1 -1
- package/dist/src/components/BRow/index.mjs +1 -1
- package/dist/src/components/BRow/index.umd.js +1 -1
- package/dist/src/components/BSpinner/index.mjs +1 -1
- package/dist/src/components/BSpinner/index.umd.js +1 -1
- package/dist/src/components/BTable/index.mjs +2 -2
- package/dist/src/components/BTable/index.umd.js +2 -2
- package/dist/src/components/BTabs/index.mjs +1 -1
- package/dist/src/components/BTabs/index.umd.js +1 -1
- package/dist/src/components/BTimeField/index.mjs +1 -1
- package/dist/src/components/BTimeField/index.umd.js +1 -1
- package/dist/src/components/BToast/index.mjs +1 -1
- package/dist/src/components/BToast/index.umd.js +1 -1
- package/dist/src/components/BTooltip/index.mjs +1 -1
- package/dist/src/components/BTooltip/index.umd.js +1 -1
- package/dist/src/components/index.mjs +57 -55
- package/dist/src/components/index.mjs.map +1 -1
- package/dist/src/components/index.umd.js +57 -54
- package/dist/src/components/index.umd.js.map +1 -1
- package/dist/src/composables/useModal/index.mjs +1 -1
- package/dist/src/composables/useModal/index.umd.js +1 -1
- package/dist/src/composables/usePopover/index.mjs +2 -2
- package/dist/src/composables/usePopover/index.umd.js +2 -2
- package/dist/src/composables/useScrollspy/index.mjs +1 -1
- package/dist/src/composables/useScrollspy/index.umd.js +1 -1
- package/dist/src/composables/useToast/index.mjs +1 -1
- package/dist/src/composables/useToast/index.umd.js +1 -1
- package/dist/src/composables/useToggle/index.mjs +1 -1
- package/dist/src/composables/useToggle/index.umd.js +1 -1
- package/dist/src/directives/BPopover/index.mjs +2 -2
- package/dist/src/directives/BPopover/index.umd.js +2 -2
- package/dist/src/directives/BScrollspy/index.mjs +2 -2
- package/dist/src/directives/BScrollspy/index.umd.js +2 -2
- package/dist/src/directives/BToggle/index.mjs +3 -3
- package/dist/src/directives/BToggle/index.umd.js +3 -3
- package/dist/src/directives/BTooltip/index.mjs +2 -2
- package/dist/src/directives/BTooltip/index.umd.js +2 -2
- package/dist/src/resolvers/index.mjs +1 -1
- package/dist/src/resolvers/index.umd.js +1 -1
- package/dist/src/types/index.mjs +1 -1
- package/dist/src/types/index.umd.js +1 -1
- package/dist/src/utils/index.mjs +1 -1
- package/dist/src/utils/index.umd.js +1 -1
- package/dist/{stringUtils-hUreqC0N.js → stringUtils-BwKOASdU.js} +2 -2
- package/dist/{stringUtils-hUreqC0N.js.map → stringUtils-BwKOASdU.js.map} +1 -1
- package/dist/{stringUtils-BP8rZgjn.mjs → stringUtils-CslYpDTt.mjs} +2 -2
- package/dist/{stringUtils-BP8rZgjn.mjs.map → stringUtils-CslYpDTt.mjs.map} +1 -1
- package/dist/types/BootstrapVueOptions.d.mts +3 -1
- package/dist/types/BootstrapVueOptions.d.ts +3 -1
- package/dist/types/ComponentProps.d.mts +4 -0
- package/dist/types/ComponentProps.d.ts +4 -0
- package/dist/types/ComponentSlots.d.mts +3 -0
- package/dist/types/ComponentSlots.d.ts +3 -0
- package/dist/{useAlignment-CwuLc9mf.mjs → useAlignment-DMST4-tc.mjs} +1 -1
- package/dist/{useAlignment-CwuLc9mf.mjs.map → useAlignment-DMST4-tc.mjs.map} +1 -1
- package/dist/{useAlignment-CY-mnB2p.js → useAlignment-Dus_TOxG.js} +1 -1
- package/dist/{useAlignment-CY-mnB2p.js.map → useAlignment-Dus_TOxG.js.map} +1 -1
- package/dist/{useAriaInvalid-BYMq9BBX.js → useAriaInvalid-CsUHLhSs.js} +1 -1
- package/dist/{useAriaInvalid-BYMq9BBX.js.map → useAriaInvalid-CsUHLhSs.js.map} +1 -1
- package/dist/{useAriaInvalid-01Dd60GC.mjs → useAriaInvalid-DcG6BhdW.mjs} +1 -1
- package/dist/{useAriaInvalid-01Dd60GC.mjs.map → useAriaInvalid-DcG6BhdW.mjs.map} +1 -1
- package/dist/{useColorVariantClasses-GuDw8a_O.mjs → useColorVariantClasses-B6Me_Kx6.mjs} +1 -1
- package/dist/{useColorVariantClasses-GuDw8a_O.mjs.map → useColorVariantClasses-B6Me_Kx6.mjs.map} +1 -1
- package/dist/{useColorVariantClasses-DVaQDVQC.js → useColorVariantClasses-CEfOwjPv.js} +1 -1
- package/dist/{useColorVariantClasses-DVaQDVQC.js.map → useColorVariantClasses-CEfOwjPv.js.map} +1 -1
- package/dist/{useCountdownHover-CaF8_TRT.js → useCountdownHover-D044mFuX.js} +1 -1
- package/dist/{useCountdownHover-CaF8_TRT.js.map → useCountdownHover-D044mFuX.js.map} +1 -1
- package/dist/{useCountdownHover-CTM7QEJ-.mjs → useCountdownHover-DqREghQi.mjs} +1 -1
- package/dist/{useCountdownHover-CTM7QEJ-.mjs.map → useCountdownHover-DqREghQi.mjs.map} +1 -1
- package/dist/{useDateField-PQjSLAVI.mjs → useDateField-BkbvpMB1.mjs} +1 -1
- package/dist/{useDateField-PQjSLAVI.mjs.map → useDateField-BkbvpMB1.mjs.map} +1 -1
- package/dist/{useDateField-qsRHISMn.js → useDateField-Ca0ZxYq9.js} +1 -1
- package/dist/{useDateField-qsRHISMn.js.map → useDateField-Ca0ZxYq9.js.map} +1 -1
- package/dist/{useDefaults-CCWS15M8.mjs → useDefaults-BKgBaqOV.mjs} +1 -1
- package/dist/{useDefaults-CCWS15M8.mjs.map → useDefaults-BKgBaqOV.mjs.map} +1 -1
- package/dist/{useDefaults-DK6Y9lar.js → useDefaults-DsLf4iRY.js} +1 -1
- package/dist/{useDefaults-DK6Y9lar.js.map → useDefaults-DsLf4iRY.js.map} +1 -1
- package/dist/{useFormCheck-TOhpqkZ9.mjs → useFormCheck-9Ne69Sw9.mjs} +3 -3
- package/dist/{useFormCheck-TOhpqkZ9.mjs.map → useFormCheck-9Ne69Sw9.mjs.map} +1 -1
- package/dist/{useFormCheck-DXM9Wj2i.js → useFormCheck-H0B2G8GH.js} +3 -3
- package/dist/{useFormCheck-DXM9Wj2i.js.map → useFormCheck-H0B2G8GH.js.map} +1 -1
- package/dist/{useFormInput-DeJGz9t9.mjs → useFormInput-9wwIZZqf.mjs} +5 -5
- package/dist/{useFormInput-DeJGz9t9.mjs.map → useFormInput-9wwIZZqf.mjs.map} +1 -1
- package/dist/{useFormInput-AX7ikSmn.js → useFormInput-DyZLjypv.js} +5 -5
- package/dist/{useFormInput-AX7ikSmn.js.map → useFormInput-DyZLjypv.js.map} +1 -1
- package/dist/{useFormSelect-DCThI8EA.js → useFormSelect-8ZL7Dk3W.js} +3 -3
- package/dist/{useFormSelect-DCThI8EA.js.map → useFormSelect-8ZL7Dk3W.js.map} +1 -1
- package/dist/{useFormSelect-_-ln6FKQ.mjs → useFormSelect-BYhUZcK5.mjs} +3 -3
- package/dist/{useFormSelect-_-ln6FKQ.mjs.map → useFormSelect-BYhUZcK5.mjs.map} +1 -1
- package/dist/{useId-CCwnEmGh.mjs → useId-BKZFSYm8.mjs} +1 -1
- package/dist/{useId-CCwnEmGh.mjs.map → useId-BKZFSYm8.mjs.map} +1 -1
- package/dist/{useId-DTrBK9CE.js → useId-DHrBgM7P.js} +1 -1
- package/dist/{useId-DTrBK9CE.js.map → useId-DHrBgM7P.js.map} +1 -1
- package/dist/{useNumberishToStyle-uj-NwKpF.mjs → useNumberishToStyle--4gz3iYn.mjs} +2 -2
- package/dist/{useNumberishToStyle-uj-NwKpF.mjs.map → useNumberishToStyle--4gz3iYn.mjs.map} +1 -1
- package/dist/{useNumberishToStyle-CluQ-WT4.js → useNumberishToStyle-DMGqQGfo.js} +2 -2
- package/dist/{useNumberishToStyle-CluQ-WT4.js.map → useNumberishToStyle-DMGqQGfo.js.map} +1 -1
- package/dist/{useRadiusElementClasses-D6FwziNh.js → useRadiusElementClasses-Bi58dhJY.js} +1 -1
- package/dist/{useRadiusElementClasses-D6FwziNh.js.map → useRadiusElementClasses-Bi58dhJY.js.map} +1 -1
- package/dist/{useRadiusElementClasses-CyDq8RO7.mjs → useRadiusElementClasses-ppH4Pr03.mjs} +1 -1
- package/dist/{useRadiusElementClasses-CyDq8RO7.mjs.map → useRadiusElementClasses-ppH4Pr03.mjs.map} +1 -1
- package/dist/{useRtl-DQ5v5L9s.mjs → useRtl-BwxT5Dyq.mjs} +1 -1
- package/dist/{useRtl-DQ5v5L9s.mjs.map → useRtl-BwxT5Dyq.mjs.map} +1 -1
- package/dist/{useRtl-BlPLBmTe.js → useRtl-DWO9pKff.js} +1 -1
- package/dist/{useRtl-BlPLBmTe.js.map → useRtl-DWO9pKff.js.map} +1 -1
- package/dist/{useSafeScrollLock-C9UxwgUo.mjs → useSafeScrollLock-DJ1UsIFY.mjs} +1 -1
- package/dist/{useSafeScrollLock-C9UxwgUo.mjs.map → useSafeScrollLock-DJ1UsIFY.mjs.map} +1 -1
- package/dist/{useSafeScrollLock-CP2B7aXF.js → useSafeScrollLock-xJBEvCQ7.js} +1 -1
- package/dist/{useSafeScrollLock-CP2B7aXF.js.map → useSafeScrollLock-xJBEvCQ7.js.map} +1 -1
- package/dist/{useShowHide-wBe7O9iE.mjs → useShowHide-IPyuuPL0.mjs} +3 -3
- package/dist/{useShowHide-wBe7O9iE.mjs.map → useShowHide-IPyuuPL0.mjs.map} +1 -1
- package/dist/{useShowHide-BFr32vgn.js → useShowHide-sLzwukNm.js} +3 -3
- package/dist/{useShowHide-BFr32vgn.js.map → useShowHide-sLzwukNm.js.map} +1 -1
- package/dist/{useStateClass-Cnvy2Hnm.js → useStateClass-0b-hPufa.js} +1 -1
- package/dist/{useStateClass-Cnvy2Hnm.js.map → useStateClass-0b-hPufa.js.map} +1 -1
- package/dist/{useStateClass-DKjpw1Pn.mjs → useStateClass-DXbp5rFK.mjs} +1 -1
- package/dist/{useStateClass-DKjpw1Pn.mjs.map → useStateClass-DXbp5rFK.mjs.map} +1 -1
- package/dist/{utils-C-oJqlar.mjs → utils-D_vdhVDP.mjs} +2 -2
- package/dist/{utils-C-oJqlar.mjs.map → utils-D_vdhVDP.mjs.map} +1 -1
- package/dist/{utils-CY6CnVNO.js → utils-bUQM0PzD.js} +2 -2
- package/dist/{utils-CY6CnVNO.js.map → utils-bUQM0PzD.js.map} +1 -1
- package/package.json +9 -1
- package/dist/BootstrapVueOptions-CVxLmDvx.js.map +0 -1
- package/dist/BootstrapVueOptions-Dtdn7_AJ.mjs.map +0 -1
- package/dist/functions-C6AToZGR.mjs.map +0 -1
- package/dist/functions-DCQKr6wc.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BFormTags-pK9i3cOB.js","names":[],"sources":["../src/components/BFormTags/BFormTag.vue","../src/components/BFormTags/BFormTag.vue","../src/components/BFormTags/BFormTags.vue","../src/components/BFormTags/BFormTags.vue"],"sourcesContent":["<template>\n <component\n :is=\"props.tag\"\n :id=\"computedId\"\n :title=\"tagText\"\n class=\"badge b-form-tag d-inline-flex align-items-center mw-100\"\n :class=\"computedClasses\"\n :aria-labelledby=\"taglabelId\"\n >\n <span :id=\"taglabelId\" class=\"b-form-tag-content flex-grow-1 text-truncate\">\n <slot>{{ tagText }}</slot>\n </span>\n <BCloseButton\n v-if=\"!props.disabled && !props.noRemove\"\n aria-keyshortcuts=\"Delete\"\n :aria-label=\"props.removeLabel\"\n class=\"b-form-tag-remove\"\n :aria-describedby=\"taglabelId\"\n :aria-controls=\"props.id\"\n @click=\"emit('remove', tagText)\"\n />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport type {BFormTagProps} from '../../types/ComponentProps'\nimport BCloseButton from '../BButton/BCloseButton.vue'\nimport {useColorVariantClasses} from '../../composables/useColorVariantClasses'\nimport type {BFormTagEmits, BFormTagSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<BFormTagProps>(), {\n disabled: false,\n id: undefined,\n noRemove: false,\n pill: false,\n removeLabel: 'Remove tag',\n tag: 'span',\n title: undefined,\n variant: 'secondary',\n})\nconst props = useDefaults(_props, 'BFormTag')\nconst emit = defineEmits<BFormTagEmits>()\nconst slots = defineSlots<BFormTagSlots>()\n\nconst computedId = useId(() => props.id)\n\nconst tagText = computed(\n () => ((slots.default?.({})[0].children ?? '').toString() || props.title) ?? ''\n)\nconst taglabelId = computed(() => `${computedId.value}taglabel__`)\n\nconst colorClasses = useColorVariantClasses(props)\nconst computedClasses = computed(() => [\n colorClasses.value,\n {\n 'rounded-pill': props.pill,\n 'disabled': props.disabled,\n },\n])\n</script>\n","<template>\n <component\n :is=\"props.tag\"\n :id=\"computedId\"\n :title=\"tagText\"\n class=\"badge b-form-tag d-inline-flex align-items-center mw-100\"\n :class=\"computedClasses\"\n :aria-labelledby=\"taglabelId\"\n >\n <span :id=\"taglabelId\" class=\"b-form-tag-content flex-grow-1 text-truncate\">\n <slot>{{ tagText }}</slot>\n </span>\n <BCloseButton\n v-if=\"!props.disabled && !props.noRemove\"\n aria-keyshortcuts=\"Delete\"\n :aria-label=\"props.removeLabel\"\n class=\"b-form-tag-remove\"\n :aria-describedby=\"taglabelId\"\n :aria-controls=\"props.id\"\n @click=\"emit('remove', tagText)\"\n />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport type {BFormTagProps} from '../../types/ComponentProps'\nimport BCloseButton from '../BButton/BCloseButton.vue'\nimport {useColorVariantClasses} from '../../composables/useColorVariantClasses'\nimport type {BFormTagEmits, BFormTagSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<BFormTagProps>(), {\n disabled: false,\n id: undefined,\n noRemove: false,\n pill: false,\n removeLabel: 'Remove tag',\n tag: 'span',\n title: undefined,\n variant: 'secondary',\n})\nconst props = useDefaults(_props, 'BFormTag')\nconst emit = defineEmits<BFormTagEmits>()\nconst slots = defineSlots<BFormTagSlots>()\n\nconst computedId = useId(() => props.id)\n\nconst tagText = computed(\n () => ((slots.default?.({})[0].children ?? '').toString() || props.title) ?? ''\n)\nconst taglabelId = computed(() => `${computedId.value}taglabel__`)\n\nconst colorClasses = useColorVariantClasses(props)\nconst computedClasses = computed(() => [\n colorClasses.value,\n {\n 'rounded-pill': props.pill,\n 'disabled': props.disabled,\n },\n])\n</script>\n","<template>\n <div\n :id=\"computedId\"\n class=\"b-form-tags form-control h-auto\"\n :class=\"computedClasses\"\n role=\"group\"\n tabindex=\"-1\"\n @click=\"onClick\"\n @focusin=\"onFocusin\"\n @focusout=\"emit('focusout', $event)\"\n >\n <output\n :id=\"`${computedId}selected_tags__`\"\n class=\"visually-hidden\"\n :for=\"_inputId\"\n :aria-live=\"focused ? 'polite' : 'off'\"\n aria-atomic=\"true\"\n aria-relevant=\"additions text\"\n >{{ tags.join(', ') }}</output\n >\n <div\n :id=\"`${computedId}removed_tags__`\"\n role=\"status\"\n :aria-live=\"focused ? 'assertive' : 'off'\"\n aria-atomic=\"true\"\n class=\"visually-hidden\"\n >\n ({{ props.tagRemovedLabel }}) {{ lastRemovedTag }}\n </div>\n\n <slot\n :add-button-text=\"props.addButtonText\"\n :add-button-variant=\"props.addButtonVariant\"\n :add-tag\n :disable-add-button=\"disableAddButton\"\n :disabled=\"props.disabled\"\n :duplicate-tag-text=\"props.duplicateTagText\"\n :duplicate-tags=\"duplicateTags\"\n :form=\"props.form\"\n :input-attrs=\"{\n ...props.inputAttrs,\n disabled: props.disabled,\n form: props.form,\n id: _inputId,\n value: inputValue,\n }\"\n :input-class=\"props.inputClass\"\n :input-handlers=\"{\n input: onInput,\n keydown: onKeydown,\n change: onChange,\n }\"\n :input-id=\"_inputId\"\n :input-type=\"props.inputType\"\n :invalid-tag-text=\"props.invalidTagText\"\n :invalid-tags\n :is-duplicate\n :is-invalid\n :is-limit-reached=\"isLimitReached\"\n :limit-tags-text=\"props.limitTagsText\"\n :limit=\"limitNumber\"\n :no-tag-remove=\"props.noTagRemove\"\n :placeholder=\"props.placeholder\"\n :remove-tag\n :required=\"props.required\"\n :separator=\"props.separator\"\n :size=\"props.size\"\n :state=\"props.state\"\n :tag-class=\"props.tagClass\"\n :tag-pills=\"props.tagPills\"\n :tag-remove-label=\"props.tagRemoveLabel\"\n :tag-variant=\"props.tagVariant\"\n :tags\n >\n <ul\n :id=\"`${computedId}tag_list__`\"\n class=\"b-form-tags-list list-unstyled mb-0 d-flex flex-wrap align-items-center\"\n >\n <template v-for=\"(tag, index) in tags\" :key=\"index\">\n <slot\n name=\"tag\"\n :tag=\"tag\"\n :tag-class=\"props.tagClass\"\n :tag-variant=\"props.tagVariant\"\n :tag-pills=\"props.tagPills\"\n :remove-tag=\"removeTag\"\n >\n <BFormTag\n :key=\"tag\"\n :class=\"props.tagClass\"\n tag=\"li\"\n :variant=\"props.tagVariant\"\n :pill=\"props.tagPills\"\n :no-remove=\"props.noTagRemove\"\n :disabled=\"props.disabled\"\n @remove=\"removeTag\"\n >{{ tag }}</BFormTag\n >\n </slot>\n </template>\n <li\n role=\"none\"\n aria-live=\"off\"\n class=\"b-from-tags-field flex-grow-1\"\n :aria-controls=\"`${computedId}tag_list__`\"\n >\n <div role=\"group\" class=\"d-flex\">\n <input\n :id=\"_inputId\"\n ref=\"_input\"\n :disabled=\"props.disabled\"\n :value=\"inputValue\"\n :type=\"props.inputType\"\n :placeholder=\"props.placeholder\"\n class=\"b-form-tags-input w-100 flex-grow-1 p-0 m-0 bg-transparent border-0\"\n style=\"outline: currentcolor none 0px; min-width: 5rem\"\n v-bind=\"props.inputAttrs\"\n :form=\"props.form\"\n :required=\"props.required || undefined\"\n :aria-required=\"props.required || undefined\"\n @input=\"onInput\"\n @change=\"onChange\"\n @focus=\"onFocus\"\n @blur=\"onBlur\"\n />\n <button\n v-if=\"disableAddButton\"\n type=\"button\"\n class=\"btn b-form-tags-button py-0\"\n :class=\"[\n inputClass,\n {\n [`btn-${props.addButtonVariant}`]: props.addButtonVariant !== null,\n 'disabled invisible': inputValue.length === 0,\n },\n ]\"\n style=\"font-size: 90%\"\n :disabled=\"props.disabled || inputValue.length === 0 || isLimitReached\"\n @click=\"addTag(inputValue)\"\n >\n <slot name=\"add-button-text\">{{ props.addButtonText }}</slot>\n </button>\n </div>\n </li>\n </ul>\n <div :aria-live=\"props.feedbackAriaLive\" aria-atomic=\"true\">\n <div v-if=\"isInvalid\" class=\"d-block invalid-feedback\">\n {{ props.invalidTagText }}: {{ inputValue }}\n </div>\n <small v-if=\"isDuplicate\" class=\"form-text text-body-secondary\"\n >{{ props.duplicateTagText }}: {{ inputValue }}</small\n >\n <small v-if=\"tags.length === props.limit\" class=\"form-text text-body-secondary\">\n {{ props.limitTagsText }}</small\n >\n </div>\n </slot>\n <template v-if=\"props.name\">\n <input\n v-for=\"(tag, index) in tags\"\n :key=\"index\"\n type=\"hidden\"\n :name=\"props.name\"\n :value=\"tag\"\n />\n </template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {onKeyStroke, syncRef, useFocus, useToNumber} from '@vueuse/core'\nimport {computed, ref, useTemplateRef} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {BFormTagsProps} from '../../types/ComponentProps'\nimport {escapeRegExpChars} from '../../utils/stringUtils'\nimport BFormTag from './BFormTag.vue'\nimport {useId} from '../../composables/useId'\nimport {useStateClass} from '../../composables/useStateClass'\nimport type {BFormTagsEmits, BFormTagsSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<Omit<BFormTagsProps, 'modelValue'>>(), {\n addButtonText: 'Add',\n addButtonVariant: 'outline-secondary',\n addOnChange: false,\n autofocus: false,\n disabled: false,\n duplicateTagText: 'Duplicate tag(s)',\n feedbackAriaLive: 'assertive',\n form: undefined,\n ignoreInputFocusSelector: () => ['.b-form-tag', 'button', 'input', 'select'],\n inputAttrs: undefined,\n inputClass: undefined,\n inputId: undefined,\n inputType: 'text',\n invalidTagText: 'Invalid tag(s)',\n limit: undefined,\n limitTagsText: 'Tag limit reached',\n name: undefined,\n noAddOnEnter: false,\n noOuterFocus: false,\n noTagRemove: false,\n placeholder: 'Add tag...',\n removeOnDelete: false,\n required: false,\n separator: undefined,\n size: 'md',\n state: null,\n tagClass: undefined,\n tagPills: false,\n tagRemoveLabel: undefined,\n tagRemovedLabel: 'Tag removed',\n tagValidator: () => true,\n tagVariant: 'secondary',\n})\nconst props = useDefaults(_props, 'BFormTags')\nconst emit = defineEmits<BFormTagsEmits>()\ndefineSlots<BFormTagsSlots>()\n\nconst modelValue = defineModel<Exclude<BFormTagsProps['modelValue'], undefined>>({\n default: () => [],\n})\n\nconst computedId = useId()\n\nconst limitNumber = useToNumber(() => props.limit ?? Number.NaN)\n\nconst stateClass = useStateClass(() => props.state)\n\nconst input = useTemplateRef('_input')\n\nconst {focused} = useFocus(input, {\n initialValue: props.autofocus,\n})\n\nconst _inputId = computed(() => props.inputId || `${computedId.value}input__`)\nconst tags = ref<string[]>([...modelValue.value])\nconst inputValue = ref<string>('')\nconst shouldRemoveOnDelete = ref<boolean>(modelValue.value.length > 0)\nconst lastRemovedTag = ref<string>('')\nconst validTags = ref<string[]>([])\nconst invalidTags = ref<string[]>([])\nconst duplicateTags = ref<string[]>([])\n\nsyncRef(modelValue, tags, {\n direction: 'ltr',\n transform: {\n ltr: (v) => [...v],\n },\n})\n\nconst computedClasses = computed(() => [\n stateClass.value,\n {\n [`form-control-${props.size}`]: props.size !== 'md',\n disabled: props.disabled,\n focus: focused.value,\n },\n])\n\nconst isDuplicate = computed(() => tags.value.includes(inputValue.value))\nconst isInvalid = computed(() =>\n inputValue.value === '' ? false : !props.tagValidator(inputValue.value)\n)\nconst isLimitReached = computed(() => tags.value.length === limitNumber.value)\nconst disableAddButton = computed(() => !isInvalid.value && !isDuplicate.value)\n\nconst onFocusin = (e: Readonly<FocusEvent>): void => {\n if (props.disabled) {\n const target = e.target as HTMLDivElement\n target.blur()\n return\n }\n\n emit('focusin', e)\n}\n\nconst onClick = (e: Readonly<MouseEvent>): void => {\n if (props.disabled || props.noOuterFocus) {\n return\n }\n\n const {target} = e\n const ignoreSelectors = props.ignoreInputFocusSelector\n if (ignoreSelectors && target instanceof Element) {\n const selector =\n typeof ignoreSelectors === 'string' ? ignoreSelectors : ignoreSelectors.join(',')\n\n if (selector && target.closest(selector)) {\n return\n }\n }\n\n focused.value = true\n}\n\nconst onFocus = (e: Readonly<FocusEvent>): void => {\n if (props.disabled || props.noOuterFocus) {\n return\n }\n\n focused.value = true\n emit('focus', e)\n}\n\nconst onBlur = (e: Readonly<FocusEvent>): void => {\n focused.value = false\n emit('blur', e)\n}\n\nconst onInput = (e: Readonly<Event> | string): void => {\n const value = typeof e === 'string' ? e : (e.target as HTMLInputElement).value\n\n shouldRemoveOnDelete.value = false\n\n if (props.separator?.includes(value.charAt(0)) && value.length > 0) {\n if (input.value) {\n input.value.value = ''\n }\n return\n }\n\n inputValue.value = value\n\n if (props.separator?.includes(value.charAt(value.length - 1))) {\n addTag(value.slice(0, value.length - 1))\n return\n }\n\n validTags.value = props.tagValidator(value) && !isDuplicate.value ? [value] : []\n invalidTags.value = props.tagValidator(value) ? [] : [value]\n duplicateTags.value = isDuplicate.value ? [value] : []\n\n emit('tag-state', validTags.value, invalidTags.value, duplicateTags.value)\n}\n\nconst onChange = (e: Readonly<Event>): void => {\n if (props.addOnChange) {\n onInput(e)\n\n if (!isDuplicate.value) {\n addTag(inputValue.value)\n }\n }\n}\n\nconst onKeydown = (e: Readonly<KeyboardEvent>): void => {\n if ((e.key === 'Enter' || e.code === 'NumpadEnter') && !props.noAddOnEnter) {\n addTag(inputValue.value)\n return\n }\n\n if (\n (e.key === 'Backspace' || e.key === 'Delete') &&\n props.removeOnDelete &&\n inputValue.value === '' &&\n shouldRemoveOnDelete.value &&\n tags.value.length > 0\n ) {\n removeTag(tags.value[tags.value.length - 1])\n } else {\n shouldRemoveOnDelete.value = true\n }\n}\n\nonKeyStroke(onKeydown, {target: input})\n\nconst separator = computed(() => {\n if (!props.separator) {\n return\n }\n\n return typeof props.separator === 'string' ? props.separator : props.separator.join('')\n})\n\nconst separatorRegExp = computed(() => {\n if (!separator.value) {\n return\n }\n\n return new RegExp(`[${escapeRegExpChars(separator.value)}]+`)\n})\n\nconst addTag = (tag?: string): void => {\n tag = (tag ?? inputValue.value).trim()\n\n const newTags = separatorRegExp.value\n ? tag.split(separatorRegExp.value).map((t) => t.trim())\n : [tag]\n const validTags: string[] = []\n\n for (const newTag of newTags) {\n if (newTag === '' || isDuplicate.value || !props.tagValidator(newTag)) {\n continue\n }\n\n if (limitNumber.value && isLimitReached.value) {\n break\n }\n\n validTags.push(newTag)\n }\n\n const newValue = [...modelValue.value, ...validTags]\n inputValue.value = ''\n shouldRemoveOnDelete.value = true\n modelValue.value = newValue\n focused.value = true\n}\n\nconst removeTag = (tag?: string): void => {\n const tagIndex = tags.value.indexOf(tag?.toString() ?? '')\n if (tagIndex === -1) return\n lastRemovedTag.value = tags.value.splice(tagIndex, 1).toString()\n modelValue.value = tags.value\n}\n\ndefineExpose({\n blur: () => {\n focused.value = false\n },\n element: input,\n focus: () => {\n focused.value = true\n },\n inputValue,\n})\n</script>\n","<template>\n <div\n :id=\"computedId\"\n class=\"b-form-tags form-control h-auto\"\n :class=\"computedClasses\"\n role=\"group\"\n tabindex=\"-1\"\n @click=\"onClick\"\n @focusin=\"onFocusin\"\n @focusout=\"emit('focusout', $event)\"\n >\n <output\n :id=\"`${computedId}selected_tags__`\"\n class=\"visually-hidden\"\n :for=\"_inputId\"\n :aria-live=\"focused ? 'polite' : 'off'\"\n aria-atomic=\"true\"\n aria-relevant=\"additions text\"\n >{{ tags.join(', ') }}</output\n >\n <div\n :id=\"`${computedId}removed_tags__`\"\n role=\"status\"\n :aria-live=\"focused ? 'assertive' : 'off'\"\n aria-atomic=\"true\"\n class=\"visually-hidden\"\n >\n ({{ props.tagRemovedLabel }}) {{ lastRemovedTag }}\n </div>\n\n <slot\n :add-button-text=\"props.addButtonText\"\n :add-button-variant=\"props.addButtonVariant\"\n :add-tag\n :disable-add-button=\"disableAddButton\"\n :disabled=\"props.disabled\"\n :duplicate-tag-text=\"props.duplicateTagText\"\n :duplicate-tags=\"duplicateTags\"\n :form=\"props.form\"\n :input-attrs=\"{\n ...props.inputAttrs,\n disabled: props.disabled,\n form: props.form,\n id: _inputId,\n value: inputValue,\n }\"\n :input-class=\"props.inputClass\"\n :input-handlers=\"{\n input: onInput,\n keydown: onKeydown,\n change: onChange,\n }\"\n :input-id=\"_inputId\"\n :input-type=\"props.inputType\"\n :invalid-tag-text=\"props.invalidTagText\"\n :invalid-tags\n :is-duplicate\n :is-invalid\n :is-limit-reached=\"isLimitReached\"\n :limit-tags-text=\"props.limitTagsText\"\n :limit=\"limitNumber\"\n :no-tag-remove=\"props.noTagRemove\"\n :placeholder=\"props.placeholder\"\n :remove-tag\n :required=\"props.required\"\n :separator=\"props.separator\"\n :size=\"props.size\"\n :state=\"props.state\"\n :tag-class=\"props.tagClass\"\n :tag-pills=\"props.tagPills\"\n :tag-remove-label=\"props.tagRemoveLabel\"\n :tag-variant=\"props.tagVariant\"\n :tags\n >\n <ul\n :id=\"`${computedId}tag_list__`\"\n class=\"b-form-tags-list list-unstyled mb-0 d-flex flex-wrap align-items-center\"\n >\n <template v-for=\"(tag, index) in tags\" :key=\"index\">\n <slot\n name=\"tag\"\n :tag=\"tag\"\n :tag-class=\"props.tagClass\"\n :tag-variant=\"props.tagVariant\"\n :tag-pills=\"props.tagPills\"\n :remove-tag=\"removeTag\"\n >\n <BFormTag\n :key=\"tag\"\n :class=\"props.tagClass\"\n tag=\"li\"\n :variant=\"props.tagVariant\"\n :pill=\"props.tagPills\"\n :no-remove=\"props.noTagRemove\"\n :disabled=\"props.disabled\"\n @remove=\"removeTag\"\n >{{ tag }}</BFormTag\n >\n </slot>\n </template>\n <li\n role=\"none\"\n aria-live=\"off\"\n class=\"b-from-tags-field flex-grow-1\"\n :aria-controls=\"`${computedId}tag_list__`\"\n >\n <div role=\"group\" class=\"d-flex\">\n <input\n :id=\"_inputId\"\n ref=\"_input\"\n :disabled=\"props.disabled\"\n :value=\"inputValue\"\n :type=\"props.inputType\"\n :placeholder=\"props.placeholder\"\n class=\"b-form-tags-input w-100 flex-grow-1 p-0 m-0 bg-transparent border-0\"\n style=\"outline: currentcolor none 0px; min-width: 5rem\"\n v-bind=\"props.inputAttrs\"\n :form=\"props.form\"\n :required=\"props.required || undefined\"\n :aria-required=\"props.required || undefined\"\n @input=\"onInput\"\n @change=\"onChange\"\n @focus=\"onFocus\"\n @blur=\"onBlur\"\n />\n <button\n v-if=\"disableAddButton\"\n type=\"button\"\n class=\"btn b-form-tags-button py-0\"\n :class=\"[\n inputClass,\n {\n [`btn-${props.addButtonVariant}`]: props.addButtonVariant !== null,\n 'disabled invisible': inputValue.length === 0,\n },\n ]\"\n style=\"font-size: 90%\"\n :disabled=\"props.disabled || inputValue.length === 0 || isLimitReached\"\n @click=\"addTag(inputValue)\"\n >\n <slot name=\"add-button-text\">{{ props.addButtonText }}</slot>\n </button>\n </div>\n </li>\n </ul>\n <div :aria-live=\"props.feedbackAriaLive\" aria-atomic=\"true\">\n <div v-if=\"isInvalid\" class=\"d-block invalid-feedback\">\n {{ props.invalidTagText }}: {{ inputValue }}\n </div>\n <small v-if=\"isDuplicate\" class=\"form-text text-body-secondary\"\n >{{ props.duplicateTagText }}: {{ inputValue }}</small\n >\n <small v-if=\"tags.length === props.limit\" class=\"form-text text-body-secondary\">\n {{ props.limitTagsText }}</small\n >\n </div>\n </slot>\n <template v-if=\"props.name\">\n <input\n v-for=\"(tag, index) in tags\"\n :key=\"index\"\n type=\"hidden\"\n :name=\"props.name\"\n :value=\"tag\"\n />\n </template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {onKeyStroke, syncRef, useFocus, useToNumber} from '@vueuse/core'\nimport {computed, ref, useTemplateRef} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {BFormTagsProps} from '../../types/ComponentProps'\nimport {escapeRegExpChars} from '../../utils/stringUtils'\nimport BFormTag from './BFormTag.vue'\nimport {useId} from '../../composables/useId'\nimport {useStateClass} from '../../composables/useStateClass'\nimport type {BFormTagsEmits, BFormTagsSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<Omit<BFormTagsProps, 'modelValue'>>(), {\n addButtonText: 'Add',\n addButtonVariant: 'outline-secondary',\n addOnChange: false,\n autofocus: false,\n disabled: false,\n duplicateTagText: 'Duplicate tag(s)',\n feedbackAriaLive: 'assertive',\n form: undefined,\n ignoreInputFocusSelector: () => ['.b-form-tag', 'button', 'input', 'select'],\n inputAttrs: undefined,\n inputClass: undefined,\n inputId: undefined,\n inputType: 'text',\n invalidTagText: 'Invalid tag(s)',\n limit: undefined,\n limitTagsText: 'Tag limit reached',\n name: undefined,\n noAddOnEnter: false,\n noOuterFocus: false,\n noTagRemove: false,\n placeholder: 'Add tag...',\n removeOnDelete: false,\n required: false,\n separator: undefined,\n size: 'md',\n state: null,\n tagClass: undefined,\n tagPills: false,\n tagRemoveLabel: undefined,\n tagRemovedLabel: 'Tag removed',\n tagValidator: () => true,\n tagVariant: 'secondary',\n})\nconst props = useDefaults(_props, 'BFormTags')\nconst emit = defineEmits<BFormTagsEmits>()\ndefineSlots<BFormTagsSlots>()\n\nconst modelValue = defineModel<Exclude<BFormTagsProps['modelValue'], undefined>>({\n default: () => [],\n})\n\nconst computedId = useId()\n\nconst limitNumber = useToNumber(() => props.limit ?? Number.NaN)\n\nconst stateClass = useStateClass(() => props.state)\n\nconst input = useTemplateRef('_input')\n\nconst {focused} = useFocus(input, {\n initialValue: props.autofocus,\n})\n\nconst _inputId = computed(() => props.inputId || `${computedId.value}input__`)\nconst tags = ref<string[]>([...modelValue.value])\nconst inputValue = ref<string>('')\nconst shouldRemoveOnDelete = ref<boolean>(modelValue.value.length > 0)\nconst lastRemovedTag = ref<string>('')\nconst validTags = ref<string[]>([])\nconst invalidTags = ref<string[]>([])\nconst duplicateTags = ref<string[]>([])\n\nsyncRef(modelValue, tags, {\n direction: 'ltr',\n transform: {\n ltr: (v) => [...v],\n },\n})\n\nconst computedClasses = computed(() => [\n stateClass.value,\n {\n [`form-control-${props.size}`]: props.size !== 'md',\n disabled: props.disabled,\n focus: focused.value,\n },\n])\n\nconst isDuplicate = computed(() => tags.value.includes(inputValue.value))\nconst isInvalid = computed(() =>\n inputValue.value === '' ? false : !props.tagValidator(inputValue.value)\n)\nconst isLimitReached = computed(() => tags.value.length === limitNumber.value)\nconst disableAddButton = computed(() => !isInvalid.value && !isDuplicate.value)\n\nconst onFocusin = (e: Readonly<FocusEvent>): void => {\n if (props.disabled) {\n const target = e.target as HTMLDivElement\n target.blur()\n return\n }\n\n emit('focusin', e)\n}\n\nconst onClick = (e: Readonly<MouseEvent>): void => {\n if (props.disabled || props.noOuterFocus) {\n return\n }\n\n const {target} = e\n const ignoreSelectors = props.ignoreInputFocusSelector\n if (ignoreSelectors && target instanceof Element) {\n const selector =\n typeof ignoreSelectors === 'string' ? ignoreSelectors : ignoreSelectors.join(',')\n\n if (selector && target.closest(selector)) {\n return\n }\n }\n\n focused.value = true\n}\n\nconst onFocus = (e: Readonly<FocusEvent>): void => {\n if (props.disabled || props.noOuterFocus) {\n return\n }\n\n focused.value = true\n emit('focus', e)\n}\n\nconst onBlur = (e: Readonly<FocusEvent>): void => {\n focused.value = false\n emit('blur', e)\n}\n\nconst onInput = (e: Readonly<Event> | string): void => {\n const value = typeof e === 'string' ? e : (e.target as HTMLInputElement).value\n\n shouldRemoveOnDelete.value = false\n\n if (props.separator?.includes(value.charAt(0)) && value.length > 0) {\n if (input.value) {\n input.value.value = ''\n }\n return\n }\n\n inputValue.value = value\n\n if (props.separator?.includes(value.charAt(value.length - 1))) {\n addTag(value.slice(0, value.length - 1))\n return\n }\n\n validTags.value = props.tagValidator(value) && !isDuplicate.value ? [value] : []\n invalidTags.value = props.tagValidator(value) ? [] : [value]\n duplicateTags.value = isDuplicate.value ? [value] : []\n\n emit('tag-state', validTags.value, invalidTags.value, duplicateTags.value)\n}\n\nconst onChange = (e: Readonly<Event>): void => {\n if (props.addOnChange) {\n onInput(e)\n\n if (!isDuplicate.value) {\n addTag(inputValue.value)\n }\n }\n}\n\nconst onKeydown = (e: Readonly<KeyboardEvent>): void => {\n if ((e.key === 'Enter' || e.code === 'NumpadEnter') && !props.noAddOnEnter) {\n addTag(inputValue.value)\n return\n }\n\n if (\n (e.key === 'Backspace' || e.key === 'Delete') &&\n props.removeOnDelete &&\n inputValue.value === '' &&\n shouldRemoveOnDelete.value &&\n tags.value.length > 0\n ) {\n removeTag(tags.value[tags.value.length - 1])\n } else {\n shouldRemoveOnDelete.value = true\n }\n}\n\nonKeyStroke(onKeydown, {target: input})\n\nconst separator = computed(() => {\n if (!props.separator) {\n return\n }\n\n return typeof props.separator === 'string' ? props.separator : props.separator.join('')\n})\n\nconst separatorRegExp = computed(() => {\n if (!separator.value) {\n return\n }\n\n return new RegExp(`[${escapeRegExpChars(separator.value)}]+`)\n})\n\nconst addTag = (tag?: string): void => {\n tag = (tag ?? inputValue.value).trim()\n\n const newTags = separatorRegExp.value\n ? tag.split(separatorRegExp.value).map((t) => t.trim())\n : [tag]\n const validTags: string[] = []\n\n for (const newTag of newTags) {\n if (newTag === '' || isDuplicate.value || !props.tagValidator(newTag)) {\n continue\n }\n\n if (limitNumber.value && isLimitReached.value) {\n break\n }\n\n validTags.push(newTag)\n }\n\n const newValue = [...modelValue.value, ...validTags]\n inputValue.value = ''\n shouldRemoveOnDelete.value = true\n modelValue.value = newValue\n focused.value = true\n}\n\nconst removeTag = (tag?: string): void => {\n const tagIndex = tags.value.indexOf(tag?.toString() ?? '')\n if (tagIndex === -1) return\n lastRemovedTag.value = tags.value.splice(tagIndex, 1).toString()\n modelValue.value = tags.value\n}\n\ndefineExpose({\n blur: () => {\n focused.value = false\n },\n element: input,\n focus: () => {\n focused.value = true\n },\n inputValue,\n})\n</script>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BFormTags-BUoQXBA9.js","names":[],"sources":["../src/components/BFormTags/BFormTag.vue","../src/components/BFormTags/BFormTag.vue","../src/components/BFormTags/BFormTags.vue","../src/components/BFormTags/BFormTags.vue"],"sourcesContent":["<template>\n <component\n :is=\"props.tag\"\n :id=\"computedId\"\n :title=\"tagText\"\n class=\"badge b-form-tag d-inline-flex align-items-center mw-100\"\n :class=\"computedClasses\"\n :aria-labelledby=\"taglabelId\"\n >\n <span :id=\"taglabelId\" class=\"b-form-tag-content flex-grow-1 text-truncate\">\n <slot>{{ tagText }}</slot>\n </span>\n <BCloseButton\n v-if=\"!props.disabled && !props.noRemove\"\n aria-keyshortcuts=\"Delete\"\n :aria-label=\"props.removeLabel\"\n class=\"b-form-tag-remove\"\n :aria-describedby=\"taglabelId\"\n :aria-controls=\"props.id\"\n @click=\"emit('remove', tagText)\"\n />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport type {BFormTagProps} from '../../types/ComponentProps'\nimport BCloseButton from '../BButton/BCloseButton.vue'\nimport {useColorVariantClasses} from '../../composables/useColorVariantClasses'\nimport type {BFormTagEmits, BFormTagSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<BFormTagProps>(), {\n disabled: false,\n id: undefined,\n noRemove: false,\n pill: false,\n removeLabel: 'Remove tag',\n tag: 'span',\n title: undefined,\n variant: 'secondary',\n})\nconst props = useDefaults(_props, 'BFormTag')\nconst emit = defineEmits<BFormTagEmits>()\nconst slots = defineSlots<BFormTagSlots>()\n\nconst computedId = useId(() => props.id)\n\nconst tagText = computed(\n () => ((slots.default?.({})[0].children ?? '').toString() || props.title) ?? ''\n)\nconst taglabelId = computed(() => `${computedId.value}taglabel__`)\n\nconst colorClasses = useColorVariantClasses(props)\nconst computedClasses = computed(() => [\n colorClasses.value,\n {\n 'rounded-pill': props.pill,\n 'disabled': props.disabled,\n },\n])\n</script>\n","<template>\n <component\n :is=\"props.tag\"\n :id=\"computedId\"\n :title=\"tagText\"\n class=\"badge b-form-tag d-inline-flex align-items-center mw-100\"\n :class=\"computedClasses\"\n :aria-labelledby=\"taglabelId\"\n >\n <span :id=\"taglabelId\" class=\"b-form-tag-content flex-grow-1 text-truncate\">\n <slot>{{ tagText }}</slot>\n </span>\n <BCloseButton\n v-if=\"!props.disabled && !props.noRemove\"\n aria-keyshortcuts=\"Delete\"\n :aria-label=\"props.removeLabel\"\n class=\"b-form-tag-remove\"\n :aria-describedby=\"taglabelId\"\n :aria-controls=\"props.id\"\n @click=\"emit('remove', tagText)\"\n />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport type {BFormTagProps} from '../../types/ComponentProps'\nimport BCloseButton from '../BButton/BCloseButton.vue'\nimport {useColorVariantClasses} from '../../composables/useColorVariantClasses'\nimport type {BFormTagEmits, BFormTagSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<BFormTagProps>(), {\n disabled: false,\n id: undefined,\n noRemove: false,\n pill: false,\n removeLabel: 'Remove tag',\n tag: 'span',\n title: undefined,\n variant: 'secondary',\n})\nconst props = useDefaults(_props, 'BFormTag')\nconst emit = defineEmits<BFormTagEmits>()\nconst slots = defineSlots<BFormTagSlots>()\n\nconst computedId = useId(() => props.id)\n\nconst tagText = computed(\n () => ((slots.default?.({})[0].children ?? '').toString() || props.title) ?? ''\n)\nconst taglabelId = computed(() => `${computedId.value}taglabel__`)\n\nconst colorClasses = useColorVariantClasses(props)\nconst computedClasses = computed(() => [\n colorClasses.value,\n {\n 'rounded-pill': props.pill,\n 'disabled': props.disabled,\n },\n])\n</script>\n","<template>\n <div\n :id=\"computedId\"\n class=\"b-form-tags form-control h-auto\"\n :class=\"computedClasses\"\n role=\"group\"\n tabindex=\"-1\"\n @click=\"onClick\"\n @focusin=\"onFocusin\"\n @focusout=\"emit('focusout', $event)\"\n >\n <output\n :id=\"`${computedId}selected_tags__`\"\n class=\"visually-hidden\"\n :for=\"_inputId\"\n :aria-live=\"focused ? 'polite' : 'off'\"\n aria-atomic=\"true\"\n aria-relevant=\"additions text\"\n >{{ tags.join(', ') }}</output\n >\n <div\n :id=\"`${computedId}removed_tags__`\"\n role=\"status\"\n :aria-live=\"focused ? 'assertive' : 'off'\"\n aria-atomic=\"true\"\n class=\"visually-hidden\"\n >\n ({{ props.tagRemovedLabel }}) {{ lastRemovedTag }}\n </div>\n\n <slot\n :add-button-text=\"props.addButtonText\"\n :add-button-variant=\"props.addButtonVariant\"\n :add-tag\n :disable-add-button=\"disableAddButton\"\n :disabled=\"props.disabled\"\n :duplicate-tag-text=\"props.duplicateTagText\"\n :duplicate-tags=\"duplicateTags\"\n :form=\"props.form\"\n :input-attrs=\"{\n ...props.inputAttrs,\n disabled: props.disabled,\n form: props.form,\n id: _inputId,\n value: inputValue,\n }\"\n :input-class=\"props.inputClass\"\n :input-handlers=\"{\n input: onInput,\n keydown: onKeydown,\n change: onChange,\n }\"\n :input-id=\"_inputId\"\n :input-type=\"props.inputType\"\n :invalid-tag-text=\"props.invalidTagText\"\n :invalid-tags\n :is-duplicate\n :is-invalid\n :is-limit-reached=\"isLimitReached\"\n :limit-tags-text=\"props.limitTagsText\"\n :limit=\"limitNumber\"\n :no-tag-remove=\"props.noTagRemove\"\n :placeholder=\"props.placeholder\"\n :remove-tag\n :required=\"props.required\"\n :separator=\"props.separator\"\n :size=\"props.size\"\n :state=\"props.state\"\n :tag-class=\"props.tagClass\"\n :tag-pills=\"props.tagPills\"\n :tag-remove-label=\"props.tagRemoveLabel\"\n :tag-variant=\"props.tagVariant\"\n :tags\n >\n <ul\n :id=\"`${computedId}tag_list__`\"\n class=\"b-form-tags-list list-unstyled mb-0 d-flex flex-wrap align-items-center\"\n >\n <template v-for=\"(tag, index) in tags\" :key=\"index\">\n <slot\n name=\"tag\"\n :tag=\"tag\"\n :tag-class=\"props.tagClass\"\n :tag-variant=\"props.tagVariant\"\n :tag-pills=\"props.tagPills\"\n :remove-tag=\"removeTag\"\n >\n <BFormTag\n :key=\"tag\"\n :class=\"props.tagClass\"\n tag=\"li\"\n :variant=\"props.tagVariant\"\n :pill=\"props.tagPills\"\n :no-remove=\"props.noTagRemove\"\n :disabled=\"props.disabled\"\n @remove=\"removeTag\"\n >{{ tag }}</BFormTag\n >\n </slot>\n </template>\n <li\n role=\"none\"\n aria-live=\"off\"\n class=\"b-from-tags-field flex-grow-1\"\n :aria-controls=\"`${computedId}tag_list__`\"\n >\n <div role=\"group\" class=\"d-flex\">\n <input\n :id=\"_inputId\"\n ref=\"_input\"\n :disabled=\"props.disabled\"\n :value=\"inputValue\"\n :type=\"props.inputType\"\n :placeholder=\"props.placeholder\"\n class=\"b-form-tags-input w-100 flex-grow-1 p-0 m-0 bg-transparent border-0\"\n style=\"outline: currentcolor none 0px; min-width: 5rem\"\n v-bind=\"props.inputAttrs\"\n :form=\"props.form\"\n :required=\"props.required || undefined\"\n :aria-required=\"props.required || undefined\"\n @input=\"onInput\"\n @change=\"onChange\"\n @focus=\"onFocus\"\n @blur=\"onBlur\"\n />\n <button\n v-if=\"disableAddButton\"\n type=\"button\"\n class=\"btn b-form-tags-button py-0\"\n :class=\"[\n inputClass,\n {\n [`btn-${props.addButtonVariant}`]: props.addButtonVariant !== null,\n 'disabled invisible': inputValue.length === 0,\n },\n ]\"\n style=\"font-size: 90%\"\n :disabled=\"props.disabled || inputValue.length === 0 || isLimitReached\"\n @click=\"addTag(inputValue)\"\n >\n <slot name=\"add-button-text\">{{ props.addButtonText }}</slot>\n </button>\n </div>\n </li>\n </ul>\n <div :aria-live=\"props.feedbackAriaLive\" aria-atomic=\"true\">\n <div v-if=\"isInvalid\" class=\"d-block invalid-feedback\">\n {{ props.invalidTagText }}: {{ inputValue }}\n </div>\n <small v-if=\"isDuplicate\" class=\"form-text text-body-secondary\"\n >{{ props.duplicateTagText }}: {{ inputValue }}</small\n >\n <small v-if=\"tags.length === props.limit\" class=\"form-text text-body-secondary\">\n {{ props.limitTagsText }}</small\n >\n </div>\n </slot>\n <template v-if=\"props.name\">\n <input\n v-for=\"(tag, index) in tags\"\n :key=\"index\"\n type=\"hidden\"\n :name=\"props.name\"\n :value=\"tag\"\n />\n </template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {onKeyStroke, syncRef, useFocus, useToNumber} from '@vueuse/core'\nimport {computed, ref, useTemplateRef} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {BFormTagsProps} from '../../types/ComponentProps'\nimport {escapeRegExpChars} from '../../utils/stringUtils'\nimport BFormTag from './BFormTag.vue'\nimport {useId} from '../../composables/useId'\nimport {useStateClass} from '../../composables/useStateClass'\nimport type {BFormTagsEmits, BFormTagsSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<Omit<BFormTagsProps, 'modelValue'>>(), {\n addButtonText: 'Add',\n addButtonVariant: 'outline-secondary',\n addOnChange: false,\n autofocus: false,\n disabled: false,\n duplicateTagText: 'Duplicate tag(s)',\n feedbackAriaLive: 'assertive',\n form: undefined,\n ignoreInputFocusSelector: () => ['.b-form-tag', 'button', 'input', 'select'],\n inputAttrs: undefined,\n inputClass: undefined,\n inputId: undefined,\n inputType: 'text',\n invalidTagText: 'Invalid tag(s)',\n limit: undefined,\n limitTagsText: 'Tag limit reached',\n name: undefined,\n noAddOnEnter: false,\n noOuterFocus: false,\n noTagRemove: false,\n placeholder: 'Add tag...',\n removeOnDelete: false,\n required: false,\n separator: undefined,\n size: 'md',\n state: null,\n tagClass: undefined,\n tagPills: false,\n tagRemoveLabel: undefined,\n tagRemovedLabel: 'Tag removed',\n tagValidator: () => true,\n tagVariant: 'secondary',\n})\nconst props = useDefaults(_props, 'BFormTags')\nconst emit = defineEmits<BFormTagsEmits>()\ndefineSlots<BFormTagsSlots>()\n\nconst modelValue = defineModel<Exclude<BFormTagsProps['modelValue'], undefined>>({\n default: () => [],\n})\n\nconst computedId = useId()\n\nconst limitNumber = useToNumber(() => props.limit ?? Number.NaN)\n\nconst stateClass = useStateClass(() => props.state)\n\nconst input = useTemplateRef('_input')\n\nconst {focused} = useFocus(input, {\n initialValue: props.autofocus,\n})\n\nconst _inputId = computed(() => props.inputId || `${computedId.value}input__`)\nconst tags = ref<string[]>([...modelValue.value])\nconst inputValue = ref<string>('')\nconst shouldRemoveOnDelete = ref<boolean>(modelValue.value.length > 0)\nconst lastRemovedTag = ref<string>('')\nconst validTags = ref<string[]>([])\nconst invalidTags = ref<string[]>([])\nconst duplicateTags = ref<string[]>([])\n\nsyncRef(modelValue, tags, {\n direction: 'ltr',\n transform: {\n ltr: (v) => [...v],\n },\n})\n\nconst computedClasses = computed(() => [\n stateClass.value,\n {\n [`form-control-${props.size}`]: props.size !== 'md',\n disabled: props.disabled,\n focus: focused.value,\n },\n])\n\nconst isDuplicate = computed(() => tags.value.includes(inputValue.value))\nconst isInvalid = computed(() =>\n inputValue.value === '' ? false : !props.tagValidator(inputValue.value)\n)\nconst isLimitReached = computed(() => tags.value.length === limitNumber.value)\nconst disableAddButton = computed(() => !isInvalid.value && !isDuplicate.value)\n\nconst onFocusin = (e: Readonly<FocusEvent>): void => {\n if (props.disabled) {\n const target = e.target as HTMLDivElement\n target.blur()\n return\n }\n\n emit('focusin', e)\n}\n\nconst onClick = (e: Readonly<MouseEvent>): void => {\n if (props.disabled || props.noOuterFocus) {\n return\n }\n\n const {target} = e\n const ignoreSelectors = props.ignoreInputFocusSelector\n if (ignoreSelectors && target instanceof Element) {\n const selector =\n typeof ignoreSelectors === 'string' ? ignoreSelectors : ignoreSelectors.join(',')\n\n if (selector && target.closest(selector)) {\n return\n }\n }\n\n focused.value = true\n}\n\nconst onFocus = (e: Readonly<FocusEvent>): void => {\n if (props.disabled || props.noOuterFocus) {\n return\n }\n\n focused.value = true\n emit('focus', e)\n}\n\nconst onBlur = (e: Readonly<FocusEvent>): void => {\n focused.value = false\n emit('blur', e)\n}\n\nconst onInput = (e: Readonly<Event> | string): void => {\n const value = typeof e === 'string' ? e : (e.target as HTMLInputElement).value\n\n shouldRemoveOnDelete.value = false\n\n if (props.separator?.includes(value.charAt(0)) && value.length > 0) {\n if (input.value) {\n input.value.value = ''\n }\n return\n }\n\n inputValue.value = value\n\n if (props.separator?.includes(value.charAt(value.length - 1))) {\n addTag(value.slice(0, value.length - 1))\n return\n }\n\n validTags.value = props.tagValidator(value) && !isDuplicate.value ? [value] : []\n invalidTags.value = props.tagValidator(value) ? [] : [value]\n duplicateTags.value = isDuplicate.value ? [value] : []\n\n emit('tag-state', validTags.value, invalidTags.value, duplicateTags.value)\n}\n\nconst onChange = (e: Readonly<Event>): void => {\n if (props.addOnChange) {\n onInput(e)\n\n if (!isDuplicate.value) {\n addTag(inputValue.value)\n }\n }\n}\n\nconst onKeydown = (e: Readonly<KeyboardEvent>): void => {\n if ((e.key === 'Enter' || e.code === 'NumpadEnter') && !props.noAddOnEnter) {\n addTag(inputValue.value)\n return\n }\n\n if (\n (e.key === 'Backspace' || e.key === 'Delete') &&\n props.removeOnDelete &&\n inputValue.value === '' &&\n shouldRemoveOnDelete.value &&\n tags.value.length > 0\n ) {\n removeTag(tags.value[tags.value.length - 1])\n } else {\n shouldRemoveOnDelete.value = true\n }\n}\n\nonKeyStroke(onKeydown, {target: input})\n\nconst separator = computed(() => {\n if (!props.separator) {\n return\n }\n\n return typeof props.separator === 'string' ? props.separator : props.separator.join('')\n})\n\nconst separatorRegExp = computed(() => {\n if (!separator.value) {\n return\n }\n\n return new RegExp(`[${escapeRegExpChars(separator.value)}]+`)\n})\n\nconst addTag = (tag?: string): void => {\n tag = (tag ?? inputValue.value).trim()\n\n const newTags = separatorRegExp.value\n ? tag.split(separatorRegExp.value).map((t) => t.trim())\n : [tag]\n const validTags: string[] = []\n\n for (const newTag of newTags) {\n if (newTag === '' || isDuplicate.value || !props.tagValidator(newTag)) {\n continue\n }\n\n if (limitNumber.value && isLimitReached.value) {\n break\n }\n\n validTags.push(newTag)\n }\n\n const newValue = [...modelValue.value, ...validTags]\n inputValue.value = ''\n shouldRemoveOnDelete.value = true\n modelValue.value = newValue\n focused.value = true\n}\n\nconst removeTag = (tag?: string): void => {\n const tagIndex = tags.value.indexOf(tag?.toString() ?? '')\n if (tagIndex === -1) return\n lastRemovedTag.value = tags.value.splice(tagIndex, 1).toString()\n modelValue.value = tags.value\n}\n\ndefineExpose({\n blur: () => {\n focused.value = false\n },\n element: input,\n focus: () => {\n focused.value = true\n },\n inputValue,\n})\n</script>\n","<template>\n <div\n :id=\"computedId\"\n class=\"b-form-tags form-control h-auto\"\n :class=\"computedClasses\"\n role=\"group\"\n tabindex=\"-1\"\n @click=\"onClick\"\n @focusin=\"onFocusin\"\n @focusout=\"emit('focusout', $event)\"\n >\n <output\n :id=\"`${computedId}selected_tags__`\"\n class=\"visually-hidden\"\n :for=\"_inputId\"\n :aria-live=\"focused ? 'polite' : 'off'\"\n aria-atomic=\"true\"\n aria-relevant=\"additions text\"\n >{{ tags.join(', ') }}</output\n >\n <div\n :id=\"`${computedId}removed_tags__`\"\n role=\"status\"\n :aria-live=\"focused ? 'assertive' : 'off'\"\n aria-atomic=\"true\"\n class=\"visually-hidden\"\n >\n ({{ props.tagRemovedLabel }}) {{ lastRemovedTag }}\n </div>\n\n <slot\n :add-button-text=\"props.addButtonText\"\n :add-button-variant=\"props.addButtonVariant\"\n :add-tag\n :disable-add-button=\"disableAddButton\"\n :disabled=\"props.disabled\"\n :duplicate-tag-text=\"props.duplicateTagText\"\n :duplicate-tags=\"duplicateTags\"\n :form=\"props.form\"\n :input-attrs=\"{\n ...props.inputAttrs,\n disabled: props.disabled,\n form: props.form,\n id: _inputId,\n value: inputValue,\n }\"\n :input-class=\"props.inputClass\"\n :input-handlers=\"{\n input: onInput,\n keydown: onKeydown,\n change: onChange,\n }\"\n :input-id=\"_inputId\"\n :input-type=\"props.inputType\"\n :invalid-tag-text=\"props.invalidTagText\"\n :invalid-tags\n :is-duplicate\n :is-invalid\n :is-limit-reached=\"isLimitReached\"\n :limit-tags-text=\"props.limitTagsText\"\n :limit=\"limitNumber\"\n :no-tag-remove=\"props.noTagRemove\"\n :placeholder=\"props.placeholder\"\n :remove-tag\n :required=\"props.required\"\n :separator=\"props.separator\"\n :size=\"props.size\"\n :state=\"props.state\"\n :tag-class=\"props.tagClass\"\n :tag-pills=\"props.tagPills\"\n :tag-remove-label=\"props.tagRemoveLabel\"\n :tag-variant=\"props.tagVariant\"\n :tags\n >\n <ul\n :id=\"`${computedId}tag_list__`\"\n class=\"b-form-tags-list list-unstyled mb-0 d-flex flex-wrap align-items-center\"\n >\n <template v-for=\"(tag, index) in tags\" :key=\"index\">\n <slot\n name=\"tag\"\n :tag=\"tag\"\n :tag-class=\"props.tagClass\"\n :tag-variant=\"props.tagVariant\"\n :tag-pills=\"props.tagPills\"\n :remove-tag=\"removeTag\"\n >\n <BFormTag\n :key=\"tag\"\n :class=\"props.tagClass\"\n tag=\"li\"\n :variant=\"props.tagVariant\"\n :pill=\"props.tagPills\"\n :no-remove=\"props.noTagRemove\"\n :disabled=\"props.disabled\"\n @remove=\"removeTag\"\n >{{ tag }}</BFormTag\n >\n </slot>\n </template>\n <li\n role=\"none\"\n aria-live=\"off\"\n class=\"b-from-tags-field flex-grow-1\"\n :aria-controls=\"`${computedId}tag_list__`\"\n >\n <div role=\"group\" class=\"d-flex\">\n <input\n :id=\"_inputId\"\n ref=\"_input\"\n :disabled=\"props.disabled\"\n :value=\"inputValue\"\n :type=\"props.inputType\"\n :placeholder=\"props.placeholder\"\n class=\"b-form-tags-input w-100 flex-grow-1 p-0 m-0 bg-transparent border-0\"\n style=\"outline: currentcolor none 0px; min-width: 5rem\"\n v-bind=\"props.inputAttrs\"\n :form=\"props.form\"\n :required=\"props.required || undefined\"\n :aria-required=\"props.required || undefined\"\n @input=\"onInput\"\n @change=\"onChange\"\n @focus=\"onFocus\"\n @blur=\"onBlur\"\n />\n <button\n v-if=\"disableAddButton\"\n type=\"button\"\n class=\"btn b-form-tags-button py-0\"\n :class=\"[\n inputClass,\n {\n [`btn-${props.addButtonVariant}`]: props.addButtonVariant !== null,\n 'disabled invisible': inputValue.length === 0,\n },\n ]\"\n style=\"font-size: 90%\"\n :disabled=\"props.disabled || inputValue.length === 0 || isLimitReached\"\n @click=\"addTag(inputValue)\"\n >\n <slot name=\"add-button-text\">{{ props.addButtonText }}</slot>\n </button>\n </div>\n </li>\n </ul>\n <div :aria-live=\"props.feedbackAriaLive\" aria-atomic=\"true\">\n <div v-if=\"isInvalid\" class=\"d-block invalid-feedback\">\n {{ props.invalidTagText }}: {{ inputValue }}\n </div>\n <small v-if=\"isDuplicate\" class=\"form-text text-body-secondary\"\n >{{ props.duplicateTagText }}: {{ inputValue }}</small\n >\n <small v-if=\"tags.length === props.limit\" class=\"form-text text-body-secondary\">\n {{ props.limitTagsText }}</small\n >\n </div>\n </slot>\n <template v-if=\"props.name\">\n <input\n v-for=\"(tag, index) in tags\"\n :key=\"index\"\n type=\"hidden\"\n :name=\"props.name\"\n :value=\"tag\"\n />\n </template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {onKeyStroke, syncRef, useFocus, useToNumber} from '@vueuse/core'\nimport {computed, ref, useTemplateRef} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {BFormTagsProps} from '../../types/ComponentProps'\nimport {escapeRegExpChars} from '../../utils/stringUtils'\nimport BFormTag from './BFormTag.vue'\nimport {useId} from '../../composables/useId'\nimport {useStateClass} from '../../composables/useStateClass'\nimport type {BFormTagsEmits, BFormTagsSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<Omit<BFormTagsProps, 'modelValue'>>(), {\n addButtonText: 'Add',\n addButtonVariant: 'outline-secondary',\n addOnChange: false,\n autofocus: false,\n disabled: false,\n duplicateTagText: 'Duplicate tag(s)',\n feedbackAriaLive: 'assertive',\n form: undefined,\n ignoreInputFocusSelector: () => ['.b-form-tag', 'button', 'input', 'select'],\n inputAttrs: undefined,\n inputClass: undefined,\n inputId: undefined,\n inputType: 'text',\n invalidTagText: 'Invalid tag(s)',\n limit: undefined,\n limitTagsText: 'Tag limit reached',\n name: undefined,\n noAddOnEnter: false,\n noOuterFocus: false,\n noTagRemove: false,\n placeholder: 'Add tag...',\n removeOnDelete: false,\n required: false,\n separator: undefined,\n size: 'md',\n state: null,\n tagClass: undefined,\n tagPills: false,\n tagRemoveLabel: undefined,\n tagRemovedLabel: 'Tag removed',\n tagValidator: () => true,\n tagVariant: 'secondary',\n})\nconst props = useDefaults(_props, 'BFormTags')\nconst emit = defineEmits<BFormTagsEmits>()\ndefineSlots<BFormTagsSlots>()\n\nconst modelValue = defineModel<Exclude<BFormTagsProps['modelValue'], undefined>>({\n default: () => [],\n})\n\nconst computedId = useId()\n\nconst limitNumber = useToNumber(() => props.limit ?? Number.NaN)\n\nconst stateClass = useStateClass(() => props.state)\n\nconst input = useTemplateRef('_input')\n\nconst {focused} = useFocus(input, {\n initialValue: props.autofocus,\n})\n\nconst _inputId = computed(() => props.inputId || `${computedId.value}input__`)\nconst tags = ref<string[]>([...modelValue.value])\nconst inputValue = ref<string>('')\nconst shouldRemoveOnDelete = ref<boolean>(modelValue.value.length > 0)\nconst lastRemovedTag = ref<string>('')\nconst validTags = ref<string[]>([])\nconst invalidTags = ref<string[]>([])\nconst duplicateTags = ref<string[]>([])\n\nsyncRef(modelValue, tags, {\n direction: 'ltr',\n transform: {\n ltr: (v) => [...v],\n },\n})\n\nconst computedClasses = computed(() => [\n stateClass.value,\n {\n [`form-control-${props.size}`]: props.size !== 'md',\n disabled: props.disabled,\n focus: focused.value,\n },\n])\n\nconst isDuplicate = computed(() => tags.value.includes(inputValue.value))\nconst isInvalid = computed(() =>\n inputValue.value === '' ? false : !props.tagValidator(inputValue.value)\n)\nconst isLimitReached = computed(() => tags.value.length === limitNumber.value)\nconst disableAddButton = computed(() => !isInvalid.value && !isDuplicate.value)\n\nconst onFocusin = (e: Readonly<FocusEvent>): void => {\n if (props.disabled) {\n const target = e.target as HTMLDivElement\n target.blur()\n return\n }\n\n emit('focusin', e)\n}\n\nconst onClick = (e: Readonly<MouseEvent>): void => {\n if (props.disabled || props.noOuterFocus) {\n return\n }\n\n const {target} = e\n const ignoreSelectors = props.ignoreInputFocusSelector\n if (ignoreSelectors && target instanceof Element) {\n const selector =\n typeof ignoreSelectors === 'string' ? ignoreSelectors : ignoreSelectors.join(',')\n\n if (selector && target.closest(selector)) {\n return\n }\n }\n\n focused.value = true\n}\n\nconst onFocus = (e: Readonly<FocusEvent>): void => {\n if (props.disabled || props.noOuterFocus) {\n return\n }\n\n focused.value = true\n emit('focus', e)\n}\n\nconst onBlur = (e: Readonly<FocusEvent>): void => {\n focused.value = false\n emit('blur', e)\n}\n\nconst onInput = (e: Readonly<Event> | string): void => {\n const value = typeof e === 'string' ? e : (e.target as HTMLInputElement).value\n\n shouldRemoveOnDelete.value = false\n\n if (props.separator?.includes(value.charAt(0)) && value.length > 0) {\n if (input.value) {\n input.value.value = ''\n }\n return\n }\n\n inputValue.value = value\n\n if (props.separator?.includes(value.charAt(value.length - 1))) {\n addTag(value.slice(0, value.length - 1))\n return\n }\n\n validTags.value = props.tagValidator(value) && !isDuplicate.value ? [value] : []\n invalidTags.value = props.tagValidator(value) ? [] : [value]\n duplicateTags.value = isDuplicate.value ? [value] : []\n\n emit('tag-state', validTags.value, invalidTags.value, duplicateTags.value)\n}\n\nconst onChange = (e: Readonly<Event>): void => {\n if (props.addOnChange) {\n onInput(e)\n\n if (!isDuplicate.value) {\n addTag(inputValue.value)\n }\n }\n}\n\nconst onKeydown = (e: Readonly<KeyboardEvent>): void => {\n if ((e.key === 'Enter' || e.code === 'NumpadEnter') && !props.noAddOnEnter) {\n addTag(inputValue.value)\n return\n }\n\n if (\n (e.key === 'Backspace' || e.key === 'Delete') &&\n props.removeOnDelete &&\n inputValue.value === '' &&\n shouldRemoveOnDelete.value &&\n tags.value.length > 0\n ) {\n removeTag(tags.value[tags.value.length - 1])\n } else {\n shouldRemoveOnDelete.value = true\n }\n}\n\nonKeyStroke(onKeydown, {target: input})\n\nconst separator = computed(() => {\n if (!props.separator) {\n return\n }\n\n return typeof props.separator === 'string' ? props.separator : props.separator.join('')\n})\n\nconst separatorRegExp = computed(() => {\n if (!separator.value) {\n return\n }\n\n return new RegExp(`[${escapeRegExpChars(separator.value)}]+`)\n})\n\nconst addTag = (tag?: string): void => {\n tag = (tag ?? inputValue.value).trim()\n\n const newTags = separatorRegExp.value\n ? tag.split(separatorRegExp.value).map((t) => t.trim())\n : [tag]\n const validTags: string[] = []\n\n for (const newTag of newTags) {\n if (newTag === '' || isDuplicate.value || !props.tagValidator(newTag)) {\n continue\n }\n\n if (limitNumber.value && isLimitReached.value) {\n break\n }\n\n validTags.push(newTag)\n }\n\n const newValue = [...modelValue.value, ...validTags]\n inputValue.value = ''\n shouldRemoveOnDelete.value = true\n modelValue.value = newValue\n focused.value = true\n}\n\nconst removeTag = (tag?: string): void => {\n const tagIndex = tags.value.indexOf(tag?.toString() ?? '')\n if (tagIndex === -1) return\n lastRemovedTag.value = tags.value.splice(tagIndex, 1).toString()\n modelValue.value = tags.value\n}\n\ndefineExpose({\n blur: () => {\n focused.value = false\n },\n element: input,\n focus: () => {\n focused.value = true\n },\n inputValue,\n})\n</script>\n"],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { L as useToNumber, h as useFocus, j as syncRef, o as onKeyStroke } from "./dist-Dn5blevd.mjs";
|
|
2
|
-
import { t as
|
|
3
|
-
import { t as
|
|
4
|
-
import { t as useColorVariantClasses } from "./useColorVariantClasses-
|
|
5
|
-
import { t as escapeRegExpChars } from "./stringUtils-
|
|
6
|
-
import { t as BCloseButton_default } from "./BCloseButton-
|
|
7
|
-
import { t as useStateClass } from "./useStateClass-
|
|
2
|
+
import { t as useDefaults } from "./useDefaults-BKgBaqOV.mjs";
|
|
3
|
+
import { t as useId$1 } from "./useId-BKZFSYm8.mjs";
|
|
4
|
+
import { t as useColorVariantClasses } from "./useColorVariantClasses-B6Me_Kx6.mjs";
|
|
5
|
+
import { t as escapeRegExpChars } from "./stringUtils-CslYpDTt.mjs";
|
|
6
|
+
import { t as BCloseButton_default } from "./BCloseButton-CjgbR1Ec.mjs";
|
|
7
|
+
import { t as useStateClass } from "./useStateClass-DXbp5rFK.mjs";
|
|
8
8
|
import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, defineComponent, mergeModels, mergeProps, normalizeClass, openBlock, ref, renderList, renderSlot, resolveDynamicComponent, toDisplayString, unref, useModel, useSlots, useTemplateRef, withCtx } from "vue";
|
|
9
9
|
//#region src/components/BFormTags/BFormTag.vue?vue&type=script&setup=true&lang.ts
|
|
10
10
|
var _hoisted_1$1 = ["id"];
|
|
@@ -486,4 +486,4 @@ var BFormTags_default = /* @__PURE__ */ defineComponent({
|
|
|
486
486
|
//#endregion
|
|
487
487
|
export { BFormTag_default as n, BFormTags_default as t };
|
|
488
488
|
|
|
489
|
-
//# sourceMappingURL=BFormTags-
|
|
489
|
+
//# sourceMappingURL=BFormTags-BjyHMiw1.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BFormTags-Cobh04P9.mjs","names":[],"sources":["../src/components/BFormTags/BFormTag.vue","../src/components/BFormTags/BFormTag.vue","../src/components/BFormTags/BFormTags.vue","../src/components/BFormTags/BFormTags.vue"],"sourcesContent":["<template>\n <component\n :is=\"props.tag\"\n :id=\"computedId\"\n :title=\"tagText\"\n class=\"badge b-form-tag d-inline-flex align-items-center mw-100\"\n :class=\"computedClasses\"\n :aria-labelledby=\"taglabelId\"\n >\n <span :id=\"taglabelId\" class=\"b-form-tag-content flex-grow-1 text-truncate\">\n <slot>{{ tagText }}</slot>\n </span>\n <BCloseButton\n v-if=\"!props.disabled && !props.noRemove\"\n aria-keyshortcuts=\"Delete\"\n :aria-label=\"props.removeLabel\"\n class=\"b-form-tag-remove\"\n :aria-describedby=\"taglabelId\"\n :aria-controls=\"props.id\"\n @click=\"emit('remove', tagText)\"\n />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport type {BFormTagProps} from '../../types/ComponentProps'\nimport BCloseButton from '../BButton/BCloseButton.vue'\nimport {useColorVariantClasses} from '../../composables/useColorVariantClasses'\nimport type {BFormTagEmits, BFormTagSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<BFormTagProps>(), {\n disabled: false,\n id: undefined,\n noRemove: false,\n pill: false,\n removeLabel: 'Remove tag',\n tag: 'span',\n title: undefined,\n variant: 'secondary',\n})\nconst props = useDefaults(_props, 'BFormTag')\nconst emit = defineEmits<BFormTagEmits>()\nconst slots = defineSlots<BFormTagSlots>()\n\nconst computedId = useId(() => props.id)\n\nconst tagText = computed(\n () => ((slots.default?.({})[0].children ?? '').toString() || props.title) ?? ''\n)\nconst taglabelId = computed(() => `${computedId.value}taglabel__`)\n\nconst colorClasses = useColorVariantClasses(props)\nconst computedClasses = computed(() => [\n colorClasses.value,\n {\n 'rounded-pill': props.pill,\n 'disabled': props.disabled,\n },\n])\n</script>\n","<template>\n <component\n :is=\"props.tag\"\n :id=\"computedId\"\n :title=\"tagText\"\n class=\"badge b-form-tag d-inline-flex align-items-center mw-100\"\n :class=\"computedClasses\"\n :aria-labelledby=\"taglabelId\"\n >\n <span :id=\"taglabelId\" class=\"b-form-tag-content flex-grow-1 text-truncate\">\n <slot>{{ tagText }}</slot>\n </span>\n <BCloseButton\n v-if=\"!props.disabled && !props.noRemove\"\n aria-keyshortcuts=\"Delete\"\n :aria-label=\"props.removeLabel\"\n class=\"b-form-tag-remove\"\n :aria-describedby=\"taglabelId\"\n :aria-controls=\"props.id\"\n @click=\"emit('remove', tagText)\"\n />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport type {BFormTagProps} from '../../types/ComponentProps'\nimport BCloseButton from '../BButton/BCloseButton.vue'\nimport {useColorVariantClasses} from '../../composables/useColorVariantClasses'\nimport type {BFormTagEmits, BFormTagSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<BFormTagProps>(), {\n disabled: false,\n id: undefined,\n noRemove: false,\n pill: false,\n removeLabel: 'Remove tag',\n tag: 'span',\n title: undefined,\n variant: 'secondary',\n})\nconst props = useDefaults(_props, 'BFormTag')\nconst emit = defineEmits<BFormTagEmits>()\nconst slots = defineSlots<BFormTagSlots>()\n\nconst computedId = useId(() => props.id)\n\nconst tagText = computed(\n () => ((slots.default?.({})[0].children ?? '').toString() || props.title) ?? ''\n)\nconst taglabelId = computed(() => `${computedId.value}taglabel__`)\n\nconst colorClasses = useColorVariantClasses(props)\nconst computedClasses = computed(() => [\n colorClasses.value,\n {\n 'rounded-pill': props.pill,\n 'disabled': props.disabled,\n },\n])\n</script>\n","<template>\n <div\n :id=\"computedId\"\n class=\"b-form-tags form-control h-auto\"\n :class=\"computedClasses\"\n role=\"group\"\n tabindex=\"-1\"\n @click=\"onClick\"\n @focusin=\"onFocusin\"\n @focusout=\"emit('focusout', $event)\"\n >\n <output\n :id=\"`${computedId}selected_tags__`\"\n class=\"visually-hidden\"\n :for=\"_inputId\"\n :aria-live=\"focused ? 'polite' : 'off'\"\n aria-atomic=\"true\"\n aria-relevant=\"additions text\"\n >{{ tags.join(', ') }}</output\n >\n <div\n :id=\"`${computedId}removed_tags__`\"\n role=\"status\"\n :aria-live=\"focused ? 'assertive' : 'off'\"\n aria-atomic=\"true\"\n class=\"visually-hidden\"\n >\n ({{ props.tagRemovedLabel }}) {{ lastRemovedTag }}\n </div>\n\n <slot\n :add-button-text=\"props.addButtonText\"\n :add-button-variant=\"props.addButtonVariant\"\n :add-tag\n :disable-add-button=\"disableAddButton\"\n :disabled=\"props.disabled\"\n :duplicate-tag-text=\"props.duplicateTagText\"\n :duplicate-tags=\"duplicateTags\"\n :form=\"props.form\"\n :input-attrs=\"{\n ...props.inputAttrs,\n disabled: props.disabled,\n form: props.form,\n id: _inputId,\n value: inputValue,\n }\"\n :input-class=\"props.inputClass\"\n :input-handlers=\"{\n input: onInput,\n keydown: onKeydown,\n change: onChange,\n }\"\n :input-id=\"_inputId\"\n :input-type=\"props.inputType\"\n :invalid-tag-text=\"props.invalidTagText\"\n :invalid-tags\n :is-duplicate\n :is-invalid\n :is-limit-reached=\"isLimitReached\"\n :limit-tags-text=\"props.limitTagsText\"\n :limit=\"limitNumber\"\n :no-tag-remove=\"props.noTagRemove\"\n :placeholder=\"props.placeholder\"\n :remove-tag\n :required=\"props.required\"\n :separator=\"props.separator\"\n :size=\"props.size\"\n :state=\"props.state\"\n :tag-class=\"props.tagClass\"\n :tag-pills=\"props.tagPills\"\n :tag-remove-label=\"props.tagRemoveLabel\"\n :tag-variant=\"props.tagVariant\"\n :tags\n >\n <ul\n :id=\"`${computedId}tag_list__`\"\n class=\"b-form-tags-list list-unstyled mb-0 d-flex flex-wrap align-items-center\"\n >\n <template v-for=\"(tag, index) in tags\" :key=\"index\">\n <slot\n name=\"tag\"\n :tag=\"tag\"\n :tag-class=\"props.tagClass\"\n :tag-variant=\"props.tagVariant\"\n :tag-pills=\"props.tagPills\"\n :remove-tag=\"removeTag\"\n >\n <BFormTag\n :key=\"tag\"\n :class=\"props.tagClass\"\n tag=\"li\"\n :variant=\"props.tagVariant\"\n :pill=\"props.tagPills\"\n :no-remove=\"props.noTagRemove\"\n :disabled=\"props.disabled\"\n @remove=\"removeTag\"\n >{{ tag }}</BFormTag\n >\n </slot>\n </template>\n <li\n role=\"none\"\n aria-live=\"off\"\n class=\"b-from-tags-field flex-grow-1\"\n :aria-controls=\"`${computedId}tag_list__`\"\n >\n <div role=\"group\" class=\"d-flex\">\n <input\n :id=\"_inputId\"\n ref=\"_input\"\n :disabled=\"props.disabled\"\n :value=\"inputValue\"\n :type=\"props.inputType\"\n :placeholder=\"props.placeholder\"\n class=\"b-form-tags-input w-100 flex-grow-1 p-0 m-0 bg-transparent border-0\"\n style=\"outline: currentcolor none 0px; min-width: 5rem\"\n v-bind=\"props.inputAttrs\"\n :form=\"props.form\"\n :required=\"props.required || undefined\"\n :aria-required=\"props.required || undefined\"\n @input=\"onInput\"\n @change=\"onChange\"\n @focus=\"onFocus\"\n @blur=\"onBlur\"\n />\n <button\n v-if=\"disableAddButton\"\n type=\"button\"\n class=\"btn b-form-tags-button py-0\"\n :class=\"[\n inputClass,\n {\n [`btn-${props.addButtonVariant}`]: props.addButtonVariant !== null,\n 'disabled invisible': inputValue.length === 0,\n },\n ]\"\n style=\"font-size: 90%\"\n :disabled=\"props.disabled || inputValue.length === 0 || isLimitReached\"\n @click=\"addTag(inputValue)\"\n >\n <slot name=\"add-button-text\">{{ props.addButtonText }}</slot>\n </button>\n </div>\n </li>\n </ul>\n <div :aria-live=\"props.feedbackAriaLive\" aria-atomic=\"true\">\n <div v-if=\"isInvalid\" class=\"d-block invalid-feedback\">\n {{ props.invalidTagText }}: {{ inputValue }}\n </div>\n <small v-if=\"isDuplicate\" class=\"form-text text-body-secondary\"\n >{{ props.duplicateTagText }}: {{ inputValue }}</small\n >\n <small v-if=\"tags.length === props.limit\" class=\"form-text text-body-secondary\">\n {{ props.limitTagsText }}</small\n >\n </div>\n </slot>\n <template v-if=\"props.name\">\n <input\n v-for=\"(tag, index) in tags\"\n :key=\"index\"\n type=\"hidden\"\n :name=\"props.name\"\n :value=\"tag\"\n />\n </template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {onKeyStroke, syncRef, useFocus, useToNumber} from '@vueuse/core'\nimport {computed, ref, useTemplateRef} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {BFormTagsProps} from '../../types/ComponentProps'\nimport {escapeRegExpChars} from '../../utils/stringUtils'\nimport BFormTag from './BFormTag.vue'\nimport {useId} from '../../composables/useId'\nimport {useStateClass} from '../../composables/useStateClass'\nimport type {BFormTagsEmits, BFormTagsSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<Omit<BFormTagsProps, 'modelValue'>>(), {\n addButtonText: 'Add',\n addButtonVariant: 'outline-secondary',\n addOnChange: false,\n autofocus: false,\n disabled: false,\n duplicateTagText: 'Duplicate tag(s)',\n feedbackAriaLive: 'assertive',\n form: undefined,\n ignoreInputFocusSelector: () => ['.b-form-tag', 'button', 'input', 'select'],\n inputAttrs: undefined,\n inputClass: undefined,\n inputId: undefined,\n inputType: 'text',\n invalidTagText: 'Invalid tag(s)',\n limit: undefined,\n limitTagsText: 'Tag limit reached',\n name: undefined,\n noAddOnEnter: false,\n noOuterFocus: false,\n noTagRemove: false,\n placeholder: 'Add tag...',\n removeOnDelete: false,\n required: false,\n separator: undefined,\n size: 'md',\n state: null,\n tagClass: undefined,\n tagPills: false,\n tagRemoveLabel: undefined,\n tagRemovedLabel: 'Tag removed',\n tagValidator: () => true,\n tagVariant: 'secondary',\n})\nconst props = useDefaults(_props, 'BFormTags')\nconst emit = defineEmits<BFormTagsEmits>()\ndefineSlots<BFormTagsSlots>()\n\nconst modelValue = defineModel<Exclude<BFormTagsProps['modelValue'], undefined>>({\n default: () => [],\n})\n\nconst computedId = useId()\n\nconst limitNumber = useToNumber(() => props.limit ?? Number.NaN)\n\nconst stateClass = useStateClass(() => props.state)\n\nconst input = useTemplateRef('_input')\n\nconst {focused} = useFocus(input, {\n initialValue: props.autofocus,\n})\n\nconst _inputId = computed(() => props.inputId || `${computedId.value}input__`)\nconst tags = ref<string[]>([...modelValue.value])\nconst inputValue = ref<string>('')\nconst shouldRemoveOnDelete = ref<boolean>(modelValue.value.length > 0)\nconst lastRemovedTag = ref<string>('')\nconst validTags = ref<string[]>([])\nconst invalidTags = ref<string[]>([])\nconst duplicateTags = ref<string[]>([])\n\nsyncRef(modelValue, tags, {\n direction: 'ltr',\n transform: {\n ltr: (v) => [...v],\n },\n})\n\nconst computedClasses = computed(() => [\n stateClass.value,\n {\n [`form-control-${props.size}`]: props.size !== 'md',\n disabled: props.disabled,\n focus: focused.value,\n },\n])\n\nconst isDuplicate = computed(() => tags.value.includes(inputValue.value))\nconst isInvalid = computed(() =>\n inputValue.value === '' ? false : !props.tagValidator(inputValue.value)\n)\nconst isLimitReached = computed(() => tags.value.length === limitNumber.value)\nconst disableAddButton = computed(() => !isInvalid.value && !isDuplicate.value)\n\nconst onFocusin = (e: Readonly<FocusEvent>): void => {\n if (props.disabled) {\n const target = e.target as HTMLDivElement\n target.blur()\n return\n }\n\n emit('focusin', e)\n}\n\nconst onClick = (e: Readonly<MouseEvent>): void => {\n if (props.disabled || props.noOuterFocus) {\n return\n }\n\n const {target} = e\n const ignoreSelectors = props.ignoreInputFocusSelector\n if (ignoreSelectors && target instanceof Element) {\n const selector =\n typeof ignoreSelectors === 'string' ? ignoreSelectors : ignoreSelectors.join(',')\n\n if (selector && target.closest(selector)) {\n return\n }\n }\n\n focused.value = true\n}\n\nconst onFocus = (e: Readonly<FocusEvent>): void => {\n if (props.disabled || props.noOuterFocus) {\n return\n }\n\n focused.value = true\n emit('focus', e)\n}\n\nconst onBlur = (e: Readonly<FocusEvent>): void => {\n focused.value = false\n emit('blur', e)\n}\n\nconst onInput = (e: Readonly<Event> | string): void => {\n const value = typeof e === 'string' ? e : (e.target as HTMLInputElement).value\n\n shouldRemoveOnDelete.value = false\n\n if (props.separator?.includes(value.charAt(0)) && value.length > 0) {\n if (input.value) {\n input.value.value = ''\n }\n return\n }\n\n inputValue.value = value\n\n if (props.separator?.includes(value.charAt(value.length - 1))) {\n addTag(value.slice(0, value.length - 1))\n return\n }\n\n validTags.value = props.tagValidator(value) && !isDuplicate.value ? [value] : []\n invalidTags.value = props.tagValidator(value) ? [] : [value]\n duplicateTags.value = isDuplicate.value ? [value] : []\n\n emit('tag-state', validTags.value, invalidTags.value, duplicateTags.value)\n}\n\nconst onChange = (e: Readonly<Event>): void => {\n if (props.addOnChange) {\n onInput(e)\n\n if (!isDuplicate.value) {\n addTag(inputValue.value)\n }\n }\n}\n\nconst onKeydown = (e: Readonly<KeyboardEvent>): void => {\n if ((e.key === 'Enter' || e.code === 'NumpadEnter') && !props.noAddOnEnter) {\n addTag(inputValue.value)\n return\n }\n\n if (\n (e.key === 'Backspace' || e.key === 'Delete') &&\n props.removeOnDelete &&\n inputValue.value === '' &&\n shouldRemoveOnDelete.value &&\n tags.value.length > 0\n ) {\n removeTag(tags.value[tags.value.length - 1])\n } else {\n shouldRemoveOnDelete.value = true\n }\n}\n\nonKeyStroke(onKeydown, {target: input})\n\nconst separator = computed(() => {\n if (!props.separator) {\n return\n }\n\n return typeof props.separator === 'string' ? props.separator : props.separator.join('')\n})\n\nconst separatorRegExp = computed(() => {\n if (!separator.value) {\n return\n }\n\n return new RegExp(`[${escapeRegExpChars(separator.value)}]+`)\n})\n\nconst addTag = (tag?: string): void => {\n tag = (tag ?? inputValue.value).trim()\n\n const newTags = separatorRegExp.value\n ? tag.split(separatorRegExp.value).map((t) => t.trim())\n : [tag]\n const validTags: string[] = []\n\n for (const newTag of newTags) {\n if (newTag === '' || isDuplicate.value || !props.tagValidator(newTag)) {\n continue\n }\n\n if (limitNumber.value && isLimitReached.value) {\n break\n }\n\n validTags.push(newTag)\n }\n\n const newValue = [...modelValue.value, ...validTags]\n inputValue.value = ''\n shouldRemoveOnDelete.value = true\n modelValue.value = newValue\n focused.value = true\n}\n\nconst removeTag = (tag?: string): void => {\n const tagIndex = tags.value.indexOf(tag?.toString() ?? '')\n if (tagIndex === -1) return\n lastRemovedTag.value = tags.value.splice(tagIndex, 1).toString()\n modelValue.value = tags.value\n}\n\ndefineExpose({\n blur: () => {\n focused.value = false\n },\n element: input,\n focus: () => {\n focused.value = true\n },\n inputValue,\n})\n</script>\n","<template>\n <div\n :id=\"computedId\"\n class=\"b-form-tags form-control h-auto\"\n :class=\"computedClasses\"\n role=\"group\"\n tabindex=\"-1\"\n @click=\"onClick\"\n @focusin=\"onFocusin\"\n @focusout=\"emit('focusout', $event)\"\n >\n <output\n :id=\"`${computedId}selected_tags__`\"\n class=\"visually-hidden\"\n :for=\"_inputId\"\n :aria-live=\"focused ? 'polite' : 'off'\"\n aria-atomic=\"true\"\n aria-relevant=\"additions text\"\n >{{ tags.join(', ') }}</output\n >\n <div\n :id=\"`${computedId}removed_tags__`\"\n role=\"status\"\n :aria-live=\"focused ? 'assertive' : 'off'\"\n aria-atomic=\"true\"\n class=\"visually-hidden\"\n >\n ({{ props.tagRemovedLabel }}) {{ lastRemovedTag }}\n </div>\n\n <slot\n :add-button-text=\"props.addButtonText\"\n :add-button-variant=\"props.addButtonVariant\"\n :add-tag\n :disable-add-button=\"disableAddButton\"\n :disabled=\"props.disabled\"\n :duplicate-tag-text=\"props.duplicateTagText\"\n :duplicate-tags=\"duplicateTags\"\n :form=\"props.form\"\n :input-attrs=\"{\n ...props.inputAttrs,\n disabled: props.disabled,\n form: props.form,\n id: _inputId,\n value: inputValue,\n }\"\n :input-class=\"props.inputClass\"\n :input-handlers=\"{\n input: onInput,\n keydown: onKeydown,\n change: onChange,\n }\"\n :input-id=\"_inputId\"\n :input-type=\"props.inputType\"\n :invalid-tag-text=\"props.invalidTagText\"\n :invalid-tags\n :is-duplicate\n :is-invalid\n :is-limit-reached=\"isLimitReached\"\n :limit-tags-text=\"props.limitTagsText\"\n :limit=\"limitNumber\"\n :no-tag-remove=\"props.noTagRemove\"\n :placeholder=\"props.placeholder\"\n :remove-tag\n :required=\"props.required\"\n :separator=\"props.separator\"\n :size=\"props.size\"\n :state=\"props.state\"\n :tag-class=\"props.tagClass\"\n :tag-pills=\"props.tagPills\"\n :tag-remove-label=\"props.tagRemoveLabel\"\n :tag-variant=\"props.tagVariant\"\n :tags\n >\n <ul\n :id=\"`${computedId}tag_list__`\"\n class=\"b-form-tags-list list-unstyled mb-0 d-flex flex-wrap align-items-center\"\n >\n <template v-for=\"(tag, index) in tags\" :key=\"index\">\n <slot\n name=\"tag\"\n :tag=\"tag\"\n :tag-class=\"props.tagClass\"\n :tag-variant=\"props.tagVariant\"\n :tag-pills=\"props.tagPills\"\n :remove-tag=\"removeTag\"\n >\n <BFormTag\n :key=\"tag\"\n :class=\"props.tagClass\"\n tag=\"li\"\n :variant=\"props.tagVariant\"\n :pill=\"props.tagPills\"\n :no-remove=\"props.noTagRemove\"\n :disabled=\"props.disabled\"\n @remove=\"removeTag\"\n >{{ tag }}</BFormTag\n >\n </slot>\n </template>\n <li\n role=\"none\"\n aria-live=\"off\"\n class=\"b-from-tags-field flex-grow-1\"\n :aria-controls=\"`${computedId}tag_list__`\"\n >\n <div role=\"group\" class=\"d-flex\">\n <input\n :id=\"_inputId\"\n ref=\"_input\"\n :disabled=\"props.disabled\"\n :value=\"inputValue\"\n :type=\"props.inputType\"\n :placeholder=\"props.placeholder\"\n class=\"b-form-tags-input w-100 flex-grow-1 p-0 m-0 bg-transparent border-0\"\n style=\"outline: currentcolor none 0px; min-width: 5rem\"\n v-bind=\"props.inputAttrs\"\n :form=\"props.form\"\n :required=\"props.required || undefined\"\n :aria-required=\"props.required || undefined\"\n @input=\"onInput\"\n @change=\"onChange\"\n @focus=\"onFocus\"\n @blur=\"onBlur\"\n />\n <button\n v-if=\"disableAddButton\"\n type=\"button\"\n class=\"btn b-form-tags-button py-0\"\n :class=\"[\n inputClass,\n {\n [`btn-${props.addButtonVariant}`]: props.addButtonVariant !== null,\n 'disabled invisible': inputValue.length === 0,\n },\n ]\"\n style=\"font-size: 90%\"\n :disabled=\"props.disabled || inputValue.length === 0 || isLimitReached\"\n @click=\"addTag(inputValue)\"\n >\n <slot name=\"add-button-text\">{{ props.addButtonText }}</slot>\n </button>\n </div>\n </li>\n </ul>\n <div :aria-live=\"props.feedbackAriaLive\" aria-atomic=\"true\">\n <div v-if=\"isInvalid\" class=\"d-block invalid-feedback\">\n {{ props.invalidTagText }}: {{ inputValue }}\n </div>\n <small v-if=\"isDuplicate\" class=\"form-text text-body-secondary\"\n >{{ props.duplicateTagText }}: {{ inputValue }}</small\n >\n <small v-if=\"tags.length === props.limit\" class=\"form-text text-body-secondary\">\n {{ props.limitTagsText }}</small\n >\n </div>\n </slot>\n <template v-if=\"props.name\">\n <input\n v-for=\"(tag, index) in tags\"\n :key=\"index\"\n type=\"hidden\"\n :name=\"props.name\"\n :value=\"tag\"\n />\n </template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {onKeyStroke, syncRef, useFocus, useToNumber} from '@vueuse/core'\nimport {computed, ref, useTemplateRef} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {BFormTagsProps} from '../../types/ComponentProps'\nimport {escapeRegExpChars} from '../../utils/stringUtils'\nimport BFormTag from './BFormTag.vue'\nimport {useId} from '../../composables/useId'\nimport {useStateClass} from '../../composables/useStateClass'\nimport type {BFormTagsEmits, BFormTagsSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<Omit<BFormTagsProps, 'modelValue'>>(), {\n addButtonText: 'Add',\n addButtonVariant: 'outline-secondary',\n addOnChange: false,\n autofocus: false,\n disabled: false,\n duplicateTagText: 'Duplicate tag(s)',\n feedbackAriaLive: 'assertive',\n form: undefined,\n ignoreInputFocusSelector: () => ['.b-form-tag', 'button', 'input', 'select'],\n inputAttrs: undefined,\n inputClass: undefined,\n inputId: undefined,\n inputType: 'text',\n invalidTagText: 'Invalid tag(s)',\n limit: undefined,\n limitTagsText: 'Tag limit reached',\n name: undefined,\n noAddOnEnter: false,\n noOuterFocus: false,\n noTagRemove: false,\n placeholder: 'Add tag...',\n removeOnDelete: false,\n required: false,\n separator: undefined,\n size: 'md',\n state: null,\n tagClass: undefined,\n tagPills: false,\n tagRemoveLabel: undefined,\n tagRemovedLabel: 'Tag removed',\n tagValidator: () => true,\n tagVariant: 'secondary',\n})\nconst props = useDefaults(_props, 'BFormTags')\nconst emit = defineEmits<BFormTagsEmits>()\ndefineSlots<BFormTagsSlots>()\n\nconst modelValue = defineModel<Exclude<BFormTagsProps['modelValue'], undefined>>({\n default: () => [],\n})\n\nconst computedId = useId()\n\nconst limitNumber = useToNumber(() => props.limit ?? Number.NaN)\n\nconst stateClass = useStateClass(() => props.state)\n\nconst input = useTemplateRef('_input')\n\nconst {focused} = useFocus(input, {\n initialValue: props.autofocus,\n})\n\nconst _inputId = computed(() => props.inputId || `${computedId.value}input__`)\nconst tags = ref<string[]>([...modelValue.value])\nconst inputValue = ref<string>('')\nconst shouldRemoveOnDelete = ref<boolean>(modelValue.value.length > 0)\nconst lastRemovedTag = ref<string>('')\nconst validTags = ref<string[]>([])\nconst invalidTags = ref<string[]>([])\nconst duplicateTags = ref<string[]>([])\n\nsyncRef(modelValue, tags, {\n direction: 'ltr',\n transform: {\n ltr: (v) => [...v],\n },\n})\n\nconst computedClasses = computed(() => [\n stateClass.value,\n {\n [`form-control-${props.size}`]: props.size !== 'md',\n disabled: props.disabled,\n focus: focused.value,\n },\n])\n\nconst isDuplicate = computed(() => tags.value.includes(inputValue.value))\nconst isInvalid = computed(() =>\n inputValue.value === '' ? false : !props.tagValidator(inputValue.value)\n)\nconst isLimitReached = computed(() => tags.value.length === limitNumber.value)\nconst disableAddButton = computed(() => !isInvalid.value && !isDuplicate.value)\n\nconst onFocusin = (e: Readonly<FocusEvent>): void => {\n if (props.disabled) {\n const target = e.target as HTMLDivElement\n target.blur()\n return\n }\n\n emit('focusin', e)\n}\n\nconst onClick = (e: Readonly<MouseEvent>): void => {\n if (props.disabled || props.noOuterFocus) {\n return\n }\n\n const {target} = e\n const ignoreSelectors = props.ignoreInputFocusSelector\n if (ignoreSelectors && target instanceof Element) {\n const selector =\n typeof ignoreSelectors === 'string' ? ignoreSelectors : ignoreSelectors.join(',')\n\n if (selector && target.closest(selector)) {\n return\n }\n }\n\n focused.value = true\n}\n\nconst onFocus = (e: Readonly<FocusEvent>): void => {\n if (props.disabled || props.noOuterFocus) {\n return\n }\n\n focused.value = true\n emit('focus', e)\n}\n\nconst onBlur = (e: Readonly<FocusEvent>): void => {\n focused.value = false\n emit('blur', e)\n}\n\nconst onInput = (e: Readonly<Event> | string): void => {\n const value = typeof e === 'string' ? e : (e.target as HTMLInputElement).value\n\n shouldRemoveOnDelete.value = false\n\n if (props.separator?.includes(value.charAt(0)) && value.length > 0) {\n if (input.value) {\n input.value.value = ''\n }\n return\n }\n\n inputValue.value = value\n\n if (props.separator?.includes(value.charAt(value.length - 1))) {\n addTag(value.slice(0, value.length - 1))\n return\n }\n\n validTags.value = props.tagValidator(value) && !isDuplicate.value ? [value] : []\n invalidTags.value = props.tagValidator(value) ? [] : [value]\n duplicateTags.value = isDuplicate.value ? [value] : []\n\n emit('tag-state', validTags.value, invalidTags.value, duplicateTags.value)\n}\n\nconst onChange = (e: Readonly<Event>): void => {\n if (props.addOnChange) {\n onInput(e)\n\n if (!isDuplicate.value) {\n addTag(inputValue.value)\n }\n }\n}\n\nconst onKeydown = (e: Readonly<KeyboardEvent>): void => {\n if ((e.key === 'Enter' || e.code === 'NumpadEnter') && !props.noAddOnEnter) {\n addTag(inputValue.value)\n return\n }\n\n if (\n (e.key === 'Backspace' || e.key === 'Delete') &&\n props.removeOnDelete &&\n inputValue.value === '' &&\n shouldRemoveOnDelete.value &&\n tags.value.length > 0\n ) {\n removeTag(tags.value[tags.value.length - 1])\n } else {\n shouldRemoveOnDelete.value = true\n }\n}\n\nonKeyStroke(onKeydown, {target: input})\n\nconst separator = computed(() => {\n if (!props.separator) {\n return\n }\n\n return typeof props.separator === 'string' ? props.separator : props.separator.join('')\n})\n\nconst separatorRegExp = computed(() => {\n if (!separator.value) {\n return\n }\n\n return new RegExp(`[${escapeRegExpChars(separator.value)}]+`)\n})\n\nconst addTag = (tag?: string): void => {\n tag = (tag ?? inputValue.value).trim()\n\n const newTags = separatorRegExp.value\n ? tag.split(separatorRegExp.value).map((t) => t.trim())\n : [tag]\n const validTags: string[] = []\n\n for (const newTag of newTags) {\n if (newTag === '' || isDuplicate.value || !props.tagValidator(newTag)) {\n continue\n }\n\n if (limitNumber.value && isLimitReached.value) {\n break\n }\n\n validTags.push(newTag)\n }\n\n const newValue = [...modelValue.value, ...validTags]\n inputValue.value = ''\n shouldRemoveOnDelete.value = true\n modelValue.value = newValue\n focused.value = true\n}\n\nconst removeTag = (tag?: string): void => {\n const tagIndex = tags.value.indexOf(tag?.toString() ?? '')\n if (tagIndex === -1) return\n lastRemovedTag.value = tags.value.splice(tagIndex, 1).toString()\n modelValue.value = tags.value\n}\n\ndefineExpose({\n blur: () => {\n focused.value = false\n },\n element: input,\n focus: () => {\n focused.value = true\n },\n inputValue,\n})\n</script>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BFormTags-BjyHMiw1.mjs","names":[],"sources":["../src/components/BFormTags/BFormTag.vue","../src/components/BFormTags/BFormTag.vue","../src/components/BFormTags/BFormTags.vue","../src/components/BFormTags/BFormTags.vue"],"sourcesContent":["<template>\n <component\n :is=\"props.tag\"\n :id=\"computedId\"\n :title=\"tagText\"\n class=\"badge b-form-tag d-inline-flex align-items-center mw-100\"\n :class=\"computedClasses\"\n :aria-labelledby=\"taglabelId\"\n >\n <span :id=\"taglabelId\" class=\"b-form-tag-content flex-grow-1 text-truncate\">\n <slot>{{ tagText }}</slot>\n </span>\n <BCloseButton\n v-if=\"!props.disabled && !props.noRemove\"\n aria-keyshortcuts=\"Delete\"\n :aria-label=\"props.removeLabel\"\n class=\"b-form-tag-remove\"\n :aria-describedby=\"taglabelId\"\n :aria-controls=\"props.id\"\n @click=\"emit('remove', tagText)\"\n />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport type {BFormTagProps} from '../../types/ComponentProps'\nimport BCloseButton from '../BButton/BCloseButton.vue'\nimport {useColorVariantClasses} from '../../composables/useColorVariantClasses'\nimport type {BFormTagEmits, BFormTagSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<BFormTagProps>(), {\n disabled: false,\n id: undefined,\n noRemove: false,\n pill: false,\n removeLabel: 'Remove tag',\n tag: 'span',\n title: undefined,\n variant: 'secondary',\n})\nconst props = useDefaults(_props, 'BFormTag')\nconst emit = defineEmits<BFormTagEmits>()\nconst slots = defineSlots<BFormTagSlots>()\n\nconst computedId = useId(() => props.id)\n\nconst tagText = computed(\n () => ((slots.default?.({})[0].children ?? '').toString() || props.title) ?? ''\n)\nconst taglabelId = computed(() => `${computedId.value}taglabel__`)\n\nconst colorClasses = useColorVariantClasses(props)\nconst computedClasses = computed(() => [\n colorClasses.value,\n {\n 'rounded-pill': props.pill,\n 'disabled': props.disabled,\n },\n])\n</script>\n","<template>\n <component\n :is=\"props.tag\"\n :id=\"computedId\"\n :title=\"tagText\"\n class=\"badge b-form-tag d-inline-flex align-items-center mw-100\"\n :class=\"computedClasses\"\n :aria-labelledby=\"taglabelId\"\n >\n <span :id=\"taglabelId\" class=\"b-form-tag-content flex-grow-1 text-truncate\">\n <slot>{{ tagText }}</slot>\n </span>\n <BCloseButton\n v-if=\"!props.disabled && !props.noRemove\"\n aria-keyshortcuts=\"Delete\"\n :aria-label=\"props.removeLabel\"\n class=\"b-form-tag-remove\"\n :aria-describedby=\"taglabelId\"\n :aria-controls=\"props.id\"\n @click=\"emit('remove', tagText)\"\n />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport type {BFormTagProps} from '../../types/ComponentProps'\nimport BCloseButton from '../BButton/BCloseButton.vue'\nimport {useColorVariantClasses} from '../../composables/useColorVariantClasses'\nimport type {BFormTagEmits, BFormTagSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<BFormTagProps>(), {\n disabled: false,\n id: undefined,\n noRemove: false,\n pill: false,\n removeLabel: 'Remove tag',\n tag: 'span',\n title: undefined,\n variant: 'secondary',\n})\nconst props = useDefaults(_props, 'BFormTag')\nconst emit = defineEmits<BFormTagEmits>()\nconst slots = defineSlots<BFormTagSlots>()\n\nconst computedId = useId(() => props.id)\n\nconst tagText = computed(\n () => ((slots.default?.({})[0].children ?? '').toString() || props.title) ?? ''\n)\nconst taglabelId = computed(() => `${computedId.value}taglabel__`)\n\nconst colorClasses = useColorVariantClasses(props)\nconst computedClasses = computed(() => [\n colorClasses.value,\n {\n 'rounded-pill': props.pill,\n 'disabled': props.disabled,\n },\n])\n</script>\n","<template>\n <div\n :id=\"computedId\"\n class=\"b-form-tags form-control h-auto\"\n :class=\"computedClasses\"\n role=\"group\"\n tabindex=\"-1\"\n @click=\"onClick\"\n @focusin=\"onFocusin\"\n @focusout=\"emit('focusout', $event)\"\n >\n <output\n :id=\"`${computedId}selected_tags__`\"\n class=\"visually-hidden\"\n :for=\"_inputId\"\n :aria-live=\"focused ? 'polite' : 'off'\"\n aria-atomic=\"true\"\n aria-relevant=\"additions text\"\n >{{ tags.join(', ') }}</output\n >\n <div\n :id=\"`${computedId}removed_tags__`\"\n role=\"status\"\n :aria-live=\"focused ? 'assertive' : 'off'\"\n aria-atomic=\"true\"\n class=\"visually-hidden\"\n >\n ({{ props.tagRemovedLabel }}) {{ lastRemovedTag }}\n </div>\n\n <slot\n :add-button-text=\"props.addButtonText\"\n :add-button-variant=\"props.addButtonVariant\"\n :add-tag\n :disable-add-button=\"disableAddButton\"\n :disabled=\"props.disabled\"\n :duplicate-tag-text=\"props.duplicateTagText\"\n :duplicate-tags=\"duplicateTags\"\n :form=\"props.form\"\n :input-attrs=\"{\n ...props.inputAttrs,\n disabled: props.disabled,\n form: props.form,\n id: _inputId,\n value: inputValue,\n }\"\n :input-class=\"props.inputClass\"\n :input-handlers=\"{\n input: onInput,\n keydown: onKeydown,\n change: onChange,\n }\"\n :input-id=\"_inputId\"\n :input-type=\"props.inputType\"\n :invalid-tag-text=\"props.invalidTagText\"\n :invalid-tags\n :is-duplicate\n :is-invalid\n :is-limit-reached=\"isLimitReached\"\n :limit-tags-text=\"props.limitTagsText\"\n :limit=\"limitNumber\"\n :no-tag-remove=\"props.noTagRemove\"\n :placeholder=\"props.placeholder\"\n :remove-tag\n :required=\"props.required\"\n :separator=\"props.separator\"\n :size=\"props.size\"\n :state=\"props.state\"\n :tag-class=\"props.tagClass\"\n :tag-pills=\"props.tagPills\"\n :tag-remove-label=\"props.tagRemoveLabel\"\n :tag-variant=\"props.tagVariant\"\n :tags\n >\n <ul\n :id=\"`${computedId}tag_list__`\"\n class=\"b-form-tags-list list-unstyled mb-0 d-flex flex-wrap align-items-center\"\n >\n <template v-for=\"(tag, index) in tags\" :key=\"index\">\n <slot\n name=\"tag\"\n :tag=\"tag\"\n :tag-class=\"props.tagClass\"\n :tag-variant=\"props.tagVariant\"\n :tag-pills=\"props.tagPills\"\n :remove-tag=\"removeTag\"\n >\n <BFormTag\n :key=\"tag\"\n :class=\"props.tagClass\"\n tag=\"li\"\n :variant=\"props.tagVariant\"\n :pill=\"props.tagPills\"\n :no-remove=\"props.noTagRemove\"\n :disabled=\"props.disabled\"\n @remove=\"removeTag\"\n >{{ tag }}</BFormTag\n >\n </slot>\n </template>\n <li\n role=\"none\"\n aria-live=\"off\"\n class=\"b-from-tags-field flex-grow-1\"\n :aria-controls=\"`${computedId}tag_list__`\"\n >\n <div role=\"group\" class=\"d-flex\">\n <input\n :id=\"_inputId\"\n ref=\"_input\"\n :disabled=\"props.disabled\"\n :value=\"inputValue\"\n :type=\"props.inputType\"\n :placeholder=\"props.placeholder\"\n class=\"b-form-tags-input w-100 flex-grow-1 p-0 m-0 bg-transparent border-0\"\n style=\"outline: currentcolor none 0px; min-width: 5rem\"\n v-bind=\"props.inputAttrs\"\n :form=\"props.form\"\n :required=\"props.required || undefined\"\n :aria-required=\"props.required || undefined\"\n @input=\"onInput\"\n @change=\"onChange\"\n @focus=\"onFocus\"\n @blur=\"onBlur\"\n />\n <button\n v-if=\"disableAddButton\"\n type=\"button\"\n class=\"btn b-form-tags-button py-0\"\n :class=\"[\n inputClass,\n {\n [`btn-${props.addButtonVariant}`]: props.addButtonVariant !== null,\n 'disabled invisible': inputValue.length === 0,\n },\n ]\"\n style=\"font-size: 90%\"\n :disabled=\"props.disabled || inputValue.length === 0 || isLimitReached\"\n @click=\"addTag(inputValue)\"\n >\n <slot name=\"add-button-text\">{{ props.addButtonText }}</slot>\n </button>\n </div>\n </li>\n </ul>\n <div :aria-live=\"props.feedbackAriaLive\" aria-atomic=\"true\">\n <div v-if=\"isInvalid\" class=\"d-block invalid-feedback\">\n {{ props.invalidTagText }}: {{ inputValue }}\n </div>\n <small v-if=\"isDuplicate\" class=\"form-text text-body-secondary\"\n >{{ props.duplicateTagText }}: {{ inputValue }}</small\n >\n <small v-if=\"tags.length === props.limit\" class=\"form-text text-body-secondary\">\n {{ props.limitTagsText }}</small\n >\n </div>\n </slot>\n <template v-if=\"props.name\">\n <input\n v-for=\"(tag, index) in tags\"\n :key=\"index\"\n type=\"hidden\"\n :name=\"props.name\"\n :value=\"tag\"\n />\n </template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {onKeyStroke, syncRef, useFocus, useToNumber} from '@vueuse/core'\nimport {computed, ref, useTemplateRef} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {BFormTagsProps} from '../../types/ComponentProps'\nimport {escapeRegExpChars} from '../../utils/stringUtils'\nimport BFormTag from './BFormTag.vue'\nimport {useId} from '../../composables/useId'\nimport {useStateClass} from '../../composables/useStateClass'\nimport type {BFormTagsEmits, BFormTagsSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<Omit<BFormTagsProps, 'modelValue'>>(), {\n addButtonText: 'Add',\n addButtonVariant: 'outline-secondary',\n addOnChange: false,\n autofocus: false,\n disabled: false,\n duplicateTagText: 'Duplicate tag(s)',\n feedbackAriaLive: 'assertive',\n form: undefined,\n ignoreInputFocusSelector: () => ['.b-form-tag', 'button', 'input', 'select'],\n inputAttrs: undefined,\n inputClass: undefined,\n inputId: undefined,\n inputType: 'text',\n invalidTagText: 'Invalid tag(s)',\n limit: undefined,\n limitTagsText: 'Tag limit reached',\n name: undefined,\n noAddOnEnter: false,\n noOuterFocus: false,\n noTagRemove: false,\n placeholder: 'Add tag...',\n removeOnDelete: false,\n required: false,\n separator: undefined,\n size: 'md',\n state: null,\n tagClass: undefined,\n tagPills: false,\n tagRemoveLabel: undefined,\n tagRemovedLabel: 'Tag removed',\n tagValidator: () => true,\n tagVariant: 'secondary',\n})\nconst props = useDefaults(_props, 'BFormTags')\nconst emit = defineEmits<BFormTagsEmits>()\ndefineSlots<BFormTagsSlots>()\n\nconst modelValue = defineModel<Exclude<BFormTagsProps['modelValue'], undefined>>({\n default: () => [],\n})\n\nconst computedId = useId()\n\nconst limitNumber = useToNumber(() => props.limit ?? Number.NaN)\n\nconst stateClass = useStateClass(() => props.state)\n\nconst input = useTemplateRef('_input')\n\nconst {focused} = useFocus(input, {\n initialValue: props.autofocus,\n})\n\nconst _inputId = computed(() => props.inputId || `${computedId.value}input__`)\nconst tags = ref<string[]>([...modelValue.value])\nconst inputValue = ref<string>('')\nconst shouldRemoveOnDelete = ref<boolean>(modelValue.value.length > 0)\nconst lastRemovedTag = ref<string>('')\nconst validTags = ref<string[]>([])\nconst invalidTags = ref<string[]>([])\nconst duplicateTags = ref<string[]>([])\n\nsyncRef(modelValue, tags, {\n direction: 'ltr',\n transform: {\n ltr: (v) => [...v],\n },\n})\n\nconst computedClasses = computed(() => [\n stateClass.value,\n {\n [`form-control-${props.size}`]: props.size !== 'md',\n disabled: props.disabled,\n focus: focused.value,\n },\n])\n\nconst isDuplicate = computed(() => tags.value.includes(inputValue.value))\nconst isInvalid = computed(() =>\n inputValue.value === '' ? false : !props.tagValidator(inputValue.value)\n)\nconst isLimitReached = computed(() => tags.value.length === limitNumber.value)\nconst disableAddButton = computed(() => !isInvalid.value && !isDuplicate.value)\n\nconst onFocusin = (e: Readonly<FocusEvent>): void => {\n if (props.disabled) {\n const target = e.target as HTMLDivElement\n target.blur()\n return\n }\n\n emit('focusin', e)\n}\n\nconst onClick = (e: Readonly<MouseEvent>): void => {\n if (props.disabled || props.noOuterFocus) {\n return\n }\n\n const {target} = e\n const ignoreSelectors = props.ignoreInputFocusSelector\n if (ignoreSelectors && target instanceof Element) {\n const selector =\n typeof ignoreSelectors === 'string' ? ignoreSelectors : ignoreSelectors.join(',')\n\n if (selector && target.closest(selector)) {\n return\n }\n }\n\n focused.value = true\n}\n\nconst onFocus = (e: Readonly<FocusEvent>): void => {\n if (props.disabled || props.noOuterFocus) {\n return\n }\n\n focused.value = true\n emit('focus', e)\n}\n\nconst onBlur = (e: Readonly<FocusEvent>): void => {\n focused.value = false\n emit('blur', e)\n}\n\nconst onInput = (e: Readonly<Event> | string): void => {\n const value = typeof e === 'string' ? e : (e.target as HTMLInputElement).value\n\n shouldRemoveOnDelete.value = false\n\n if (props.separator?.includes(value.charAt(0)) && value.length > 0) {\n if (input.value) {\n input.value.value = ''\n }\n return\n }\n\n inputValue.value = value\n\n if (props.separator?.includes(value.charAt(value.length - 1))) {\n addTag(value.slice(0, value.length - 1))\n return\n }\n\n validTags.value = props.tagValidator(value) && !isDuplicate.value ? [value] : []\n invalidTags.value = props.tagValidator(value) ? [] : [value]\n duplicateTags.value = isDuplicate.value ? [value] : []\n\n emit('tag-state', validTags.value, invalidTags.value, duplicateTags.value)\n}\n\nconst onChange = (e: Readonly<Event>): void => {\n if (props.addOnChange) {\n onInput(e)\n\n if (!isDuplicate.value) {\n addTag(inputValue.value)\n }\n }\n}\n\nconst onKeydown = (e: Readonly<KeyboardEvent>): void => {\n if ((e.key === 'Enter' || e.code === 'NumpadEnter') && !props.noAddOnEnter) {\n addTag(inputValue.value)\n return\n }\n\n if (\n (e.key === 'Backspace' || e.key === 'Delete') &&\n props.removeOnDelete &&\n inputValue.value === '' &&\n shouldRemoveOnDelete.value &&\n tags.value.length > 0\n ) {\n removeTag(tags.value[tags.value.length - 1])\n } else {\n shouldRemoveOnDelete.value = true\n }\n}\n\nonKeyStroke(onKeydown, {target: input})\n\nconst separator = computed(() => {\n if (!props.separator) {\n return\n }\n\n return typeof props.separator === 'string' ? props.separator : props.separator.join('')\n})\n\nconst separatorRegExp = computed(() => {\n if (!separator.value) {\n return\n }\n\n return new RegExp(`[${escapeRegExpChars(separator.value)}]+`)\n})\n\nconst addTag = (tag?: string): void => {\n tag = (tag ?? inputValue.value).trim()\n\n const newTags = separatorRegExp.value\n ? tag.split(separatorRegExp.value).map((t) => t.trim())\n : [tag]\n const validTags: string[] = []\n\n for (const newTag of newTags) {\n if (newTag === '' || isDuplicate.value || !props.tagValidator(newTag)) {\n continue\n }\n\n if (limitNumber.value && isLimitReached.value) {\n break\n }\n\n validTags.push(newTag)\n }\n\n const newValue = [...modelValue.value, ...validTags]\n inputValue.value = ''\n shouldRemoveOnDelete.value = true\n modelValue.value = newValue\n focused.value = true\n}\n\nconst removeTag = (tag?: string): void => {\n const tagIndex = tags.value.indexOf(tag?.toString() ?? '')\n if (tagIndex === -1) return\n lastRemovedTag.value = tags.value.splice(tagIndex, 1).toString()\n modelValue.value = tags.value\n}\n\ndefineExpose({\n blur: () => {\n focused.value = false\n },\n element: input,\n focus: () => {\n focused.value = true\n },\n inputValue,\n})\n</script>\n","<template>\n <div\n :id=\"computedId\"\n class=\"b-form-tags form-control h-auto\"\n :class=\"computedClasses\"\n role=\"group\"\n tabindex=\"-1\"\n @click=\"onClick\"\n @focusin=\"onFocusin\"\n @focusout=\"emit('focusout', $event)\"\n >\n <output\n :id=\"`${computedId}selected_tags__`\"\n class=\"visually-hidden\"\n :for=\"_inputId\"\n :aria-live=\"focused ? 'polite' : 'off'\"\n aria-atomic=\"true\"\n aria-relevant=\"additions text\"\n >{{ tags.join(', ') }}</output\n >\n <div\n :id=\"`${computedId}removed_tags__`\"\n role=\"status\"\n :aria-live=\"focused ? 'assertive' : 'off'\"\n aria-atomic=\"true\"\n class=\"visually-hidden\"\n >\n ({{ props.tagRemovedLabel }}) {{ lastRemovedTag }}\n </div>\n\n <slot\n :add-button-text=\"props.addButtonText\"\n :add-button-variant=\"props.addButtonVariant\"\n :add-tag\n :disable-add-button=\"disableAddButton\"\n :disabled=\"props.disabled\"\n :duplicate-tag-text=\"props.duplicateTagText\"\n :duplicate-tags=\"duplicateTags\"\n :form=\"props.form\"\n :input-attrs=\"{\n ...props.inputAttrs,\n disabled: props.disabled,\n form: props.form,\n id: _inputId,\n value: inputValue,\n }\"\n :input-class=\"props.inputClass\"\n :input-handlers=\"{\n input: onInput,\n keydown: onKeydown,\n change: onChange,\n }\"\n :input-id=\"_inputId\"\n :input-type=\"props.inputType\"\n :invalid-tag-text=\"props.invalidTagText\"\n :invalid-tags\n :is-duplicate\n :is-invalid\n :is-limit-reached=\"isLimitReached\"\n :limit-tags-text=\"props.limitTagsText\"\n :limit=\"limitNumber\"\n :no-tag-remove=\"props.noTagRemove\"\n :placeholder=\"props.placeholder\"\n :remove-tag\n :required=\"props.required\"\n :separator=\"props.separator\"\n :size=\"props.size\"\n :state=\"props.state\"\n :tag-class=\"props.tagClass\"\n :tag-pills=\"props.tagPills\"\n :tag-remove-label=\"props.tagRemoveLabel\"\n :tag-variant=\"props.tagVariant\"\n :tags\n >\n <ul\n :id=\"`${computedId}tag_list__`\"\n class=\"b-form-tags-list list-unstyled mb-0 d-flex flex-wrap align-items-center\"\n >\n <template v-for=\"(tag, index) in tags\" :key=\"index\">\n <slot\n name=\"tag\"\n :tag=\"tag\"\n :tag-class=\"props.tagClass\"\n :tag-variant=\"props.tagVariant\"\n :tag-pills=\"props.tagPills\"\n :remove-tag=\"removeTag\"\n >\n <BFormTag\n :key=\"tag\"\n :class=\"props.tagClass\"\n tag=\"li\"\n :variant=\"props.tagVariant\"\n :pill=\"props.tagPills\"\n :no-remove=\"props.noTagRemove\"\n :disabled=\"props.disabled\"\n @remove=\"removeTag\"\n >{{ tag }}</BFormTag\n >\n </slot>\n </template>\n <li\n role=\"none\"\n aria-live=\"off\"\n class=\"b-from-tags-field flex-grow-1\"\n :aria-controls=\"`${computedId}tag_list__`\"\n >\n <div role=\"group\" class=\"d-flex\">\n <input\n :id=\"_inputId\"\n ref=\"_input\"\n :disabled=\"props.disabled\"\n :value=\"inputValue\"\n :type=\"props.inputType\"\n :placeholder=\"props.placeholder\"\n class=\"b-form-tags-input w-100 flex-grow-1 p-0 m-0 bg-transparent border-0\"\n style=\"outline: currentcolor none 0px; min-width: 5rem\"\n v-bind=\"props.inputAttrs\"\n :form=\"props.form\"\n :required=\"props.required || undefined\"\n :aria-required=\"props.required || undefined\"\n @input=\"onInput\"\n @change=\"onChange\"\n @focus=\"onFocus\"\n @blur=\"onBlur\"\n />\n <button\n v-if=\"disableAddButton\"\n type=\"button\"\n class=\"btn b-form-tags-button py-0\"\n :class=\"[\n inputClass,\n {\n [`btn-${props.addButtonVariant}`]: props.addButtonVariant !== null,\n 'disabled invisible': inputValue.length === 0,\n },\n ]\"\n style=\"font-size: 90%\"\n :disabled=\"props.disabled || inputValue.length === 0 || isLimitReached\"\n @click=\"addTag(inputValue)\"\n >\n <slot name=\"add-button-text\">{{ props.addButtonText }}</slot>\n </button>\n </div>\n </li>\n </ul>\n <div :aria-live=\"props.feedbackAriaLive\" aria-atomic=\"true\">\n <div v-if=\"isInvalid\" class=\"d-block invalid-feedback\">\n {{ props.invalidTagText }}: {{ inputValue }}\n </div>\n <small v-if=\"isDuplicate\" class=\"form-text text-body-secondary\"\n >{{ props.duplicateTagText }}: {{ inputValue }}</small\n >\n <small v-if=\"tags.length === props.limit\" class=\"form-text text-body-secondary\">\n {{ props.limitTagsText }}</small\n >\n </div>\n </slot>\n <template v-if=\"props.name\">\n <input\n v-for=\"(tag, index) in tags\"\n :key=\"index\"\n type=\"hidden\"\n :name=\"props.name\"\n :value=\"tag\"\n />\n </template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {onKeyStroke, syncRef, useFocus, useToNumber} from '@vueuse/core'\nimport {computed, ref, useTemplateRef} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {BFormTagsProps} from '../../types/ComponentProps'\nimport {escapeRegExpChars} from '../../utils/stringUtils'\nimport BFormTag from './BFormTag.vue'\nimport {useId} from '../../composables/useId'\nimport {useStateClass} from '../../composables/useStateClass'\nimport type {BFormTagsEmits, BFormTagsSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<Omit<BFormTagsProps, 'modelValue'>>(), {\n addButtonText: 'Add',\n addButtonVariant: 'outline-secondary',\n addOnChange: false,\n autofocus: false,\n disabled: false,\n duplicateTagText: 'Duplicate tag(s)',\n feedbackAriaLive: 'assertive',\n form: undefined,\n ignoreInputFocusSelector: () => ['.b-form-tag', 'button', 'input', 'select'],\n inputAttrs: undefined,\n inputClass: undefined,\n inputId: undefined,\n inputType: 'text',\n invalidTagText: 'Invalid tag(s)',\n limit: undefined,\n limitTagsText: 'Tag limit reached',\n name: undefined,\n noAddOnEnter: false,\n noOuterFocus: false,\n noTagRemove: false,\n placeholder: 'Add tag...',\n removeOnDelete: false,\n required: false,\n separator: undefined,\n size: 'md',\n state: null,\n tagClass: undefined,\n tagPills: false,\n tagRemoveLabel: undefined,\n tagRemovedLabel: 'Tag removed',\n tagValidator: () => true,\n tagVariant: 'secondary',\n})\nconst props = useDefaults(_props, 'BFormTags')\nconst emit = defineEmits<BFormTagsEmits>()\ndefineSlots<BFormTagsSlots>()\n\nconst modelValue = defineModel<Exclude<BFormTagsProps['modelValue'], undefined>>({\n default: () => [],\n})\n\nconst computedId = useId()\n\nconst limitNumber = useToNumber(() => props.limit ?? Number.NaN)\n\nconst stateClass = useStateClass(() => props.state)\n\nconst input = useTemplateRef('_input')\n\nconst {focused} = useFocus(input, {\n initialValue: props.autofocus,\n})\n\nconst _inputId = computed(() => props.inputId || `${computedId.value}input__`)\nconst tags = ref<string[]>([...modelValue.value])\nconst inputValue = ref<string>('')\nconst shouldRemoveOnDelete = ref<boolean>(modelValue.value.length > 0)\nconst lastRemovedTag = ref<string>('')\nconst validTags = ref<string[]>([])\nconst invalidTags = ref<string[]>([])\nconst duplicateTags = ref<string[]>([])\n\nsyncRef(modelValue, tags, {\n direction: 'ltr',\n transform: {\n ltr: (v) => [...v],\n },\n})\n\nconst computedClasses = computed(() => [\n stateClass.value,\n {\n [`form-control-${props.size}`]: props.size !== 'md',\n disabled: props.disabled,\n focus: focused.value,\n },\n])\n\nconst isDuplicate = computed(() => tags.value.includes(inputValue.value))\nconst isInvalid = computed(() =>\n inputValue.value === '' ? false : !props.tagValidator(inputValue.value)\n)\nconst isLimitReached = computed(() => tags.value.length === limitNumber.value)\nconst disableAddButton = computed(() => !isInvalid.value && !isDuplicate.value)\n\nconst onFocusin = (e: Readonly<FocusEvent>): void => {\n if (props.disabled) {\n const target = e.target as HTMLDivElement\n target.blur()\n return\n }\n\n emit('focusin', e)\n}\n\nconst onClick = (e: Readonly<MouseEvent>): void => {\n if (props.disabled || props.noOuterFocus) {\n return\n }\n\n const {target} = e\n const ignoreSelectors = props.ignoreInputFocusSelector\n if (ignoreSelectors && target instanceof Element) {\n const selector =\n typeof ignoreSelectors === 'string' ? ignoreSelectors : ignoreSelectors.join(',')\n\n if (selector && target.closest(selector)) {\n return\n }\n }\n\n focused.value = true\n}\n\nconst onFocus = (e: Readonly<FocusEvent>): void => {\n if (props.disabled || props.noOuterFocus) {\n return\n }\n\n focused.value = true\n emit('focus', e)\n}\n\nconst onBlur = (e: Readonly<FocusEvent>): void => {\n focused.value = false\n emit('blur', e)\n}\n\nconst onInput = (e: Readonly<Event> | string): void => {\n const value = typeof e === 'string' ? e : (e.target as HTMLInputElement).value\n\n shouldRemoveOnDelete.value = false\n\n if (props.separator?.includes(value.charAt(0)) && value.length > 0) {\n if (input.value) {\n input.value.value = ''\n }\n return\n }\n\n inputValue.value = value\n\n if (props.separator?.includes(value.charAt(value.length - 1))) {\n addTag(value.slice(0, value.length - 1))\n return\n }\n\n validTags.value = props.tagValidator(value) && !isDuplicate.value ? [value] : []\n invalidTags.value = props.tagValidator(value) ? [] : [value]\n duplicateTags.value = isDuplicate.value ? [value] : []\n\n emit('tag-state', validTags.value, invalidTags.value, duplicateTags.value)\n}\n\nconst onChange = (e: Readonly<Event>): void => {\n if (props.addOnChange) {\n onInput(e)\n\n if (!isDuplicate.value) {\n addTag(inputValue.value)\n }\n }\n}\n\nconst onKeydown = (e: Readonly<KeyboardEvent>): void => {\n if ((e.key === 'Enter' || e.code === 'NumpadEnter') && !props.noAddOnEnter) {\n addTag(inputValue.value)\n return\n }\n\n if (\n (e.key === 'Backspace' || e.key === 'Delete') &&\n props.removeOnDelete &&\n inputValue.value === '' &&\n shouldRemoveOnDelete.value &&\n tags.value.length > 0\n ) {\n removeTag(tags.value[tags.value.length - 1])\n } else {\n shouldRemoveOnDelete.value = true\n }\n}\n\nonKeyStroke(onKeydown, {target: input})\n\nconst separator = computed(() => {\n if (!props.separator) {\n return\n }\n\n return typeof props.separator === 'string' ? props.separator : props.separator.join('')\n})\n\nconst separatorRegExp = computed(() => {\n if (!separator.value) {\n return\n }\n\n return new RegExp(`[${escapeRegExpChars(separator.value)}]+`)\n})\n\nconst addTag = (tag?: string): void => {\n tag = (tag ?? inputValue.value).trim()\n\n const newTags = separatorRegExp.value\n ? tag.split(separatorRegExp.value).map((t) => t.trim())\n : [tag]\n const validTags: string[] = []\n\n for (const newTag of newTags) {\n if (newTag === '' || isDuplicate.value || !props.tagValidator(newTag)) {\n continue\n }\n\n if (limitNumber.value && isLimitReached.value) {\n break\n }\n\n validTags.push(newTag)\n }\n\n const newValue = [...modelValue.value, ...validTags]\n inputValue.value = ''\n shouldRemoveOnDelete.value = true\n modelValue.value = newValue\n focused.value = true\n}\n\nconst removeTag = (tag?: string): void => {\n const tagIndex = tags.value.indexOf(tag?.toString() ?? '')\n if (tagIndex === -1) return\n lastRemovedTag.value = tags.value.splice(tagIndex, 1).toString()\n modelValue.value = tags.value\n}\n\ndefineExpose({\n blur: () => {\n focused.value = false\n },\n element: input,\n focus: () => {\n focused.value = true\n },\n inputValue,\n})\n</script>\n"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
require("./chunk-CoQrYLCe.js");
|
|
2
2
|
const require_dist = require("./dist-B_c893QG.js");
|
|
3
3
|
const require_dom = require("./dom-Bs6DzM72.js");
|
|
4
|
-
const require_useDefaults = require("./useDefaults-
|
|
5
|
-
const require_useFormInput = require("./useFormInput-
|
|
4
|
+
const require_useDefaults = require("./useDefaults-DsLf4iRY.js");
|
|
5
|
+
const require_useFormInput = require("./useFormInput-DyZLjypv.js");
|
|
6
6
|
let vue = require("vue");
|
|
7
7
|
//#region src/composables/useTextareaResize.ts
|
|
8
8
|
var useTextareaResize = (input, { maxRows, noAutoShrink, rows }) => {
|
|
@@ -200,4 +200,4 @@ Object.defineProperty(exports, "BFormTextarea_default", {
|
|
|
200
200
|
}
|
|
201
201
|
});
|
|
202
202
|
|
|
203
|
-
//# sourceMappingURL=BFormTextarea-
|
|
203
|
+
//# sourceMappingURL=BFormTextarea-BIrsIHU1.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BFormTextarea-BtXarcjA.js","names":[],"sources":["../src/composables/useTextareaResize.ts","../src/components/BFormTextarea/BFormTextarea.vue","../src/components/BFormTextarea/BFormTextarea.vue"],"sourcesContent":["import {useToNumber} from '@vueuse/core'\nimport type {Numberish} from '../types/CommonTypes'\nimport {\n computed,\n type CSSProperties,\n type MaybeRefOrGetter,\n nextTick,\n onMounted,\n ref,\n type ShallowRef,\n toValue,\n} from 'vue'\nimport {isVisible} from '../utils/dom'\n\nexport const useTextareaResize = (\n input: Readonly<ShallowRef<HTMLTextAreaElement | null>>,\n {\n maxRows,\n noAutoShrink,\n rows,\n }: {\n rows: MaybeRefOrGetter<Numberish>\n maxRows: MaybeRefOrGetter<Numberish | undefined>\n noAutoShrink: MaybeRefOrGetter<boolean>\n }\n) => {\n const height = ref<number | null | string>(0)\n const maxRowsNumber = useToNumber(\n computed(() => toValue(maxRows) || Number.NaN),\n {\n method: 'parseInt',\n nanToZero: true,\n }\n )\n const rowsNumber = useToNumber(rows, {\n method: 'parseInt',\n nanToZero: true,\n })\n const computedMinRows = computed(() => Math.max(rowsNumber.value || 2, 2))\n const computedMaxRows = computed(() => Math.max(computedMinRows.value, maxRowsNumber.value || 0))\n const computedRows = computed(() =>\n computedMinRows.value === computedMaxRows.value ? computedMinRows.value : null\n )\n\n const handleHeightChange = async () => {\n // Element must be visible (not hidden) and in document\n // Must be checked after above checks\n if (!input.value || !isVisible(input.value)) {\n height.value = null\n return\n }\n\n // Get current computed styles\n const computedStyle = getComputedStyle(input.value)\n // Height of one line of text in px\n const lineHeight = Number.parseFloat(computedStyle.lineHeight) || 1\n // Calculate height of border and padding\n const border =\n (Number.parseFloat(computedStyle.borderTopWidth) || 0) +\n (Number.parseFloat(computedStyle.borderBottomWidth) || 0)\n const padding =\n (Number.parseFloat(computedStyle.paddingTop) || 0) +\n (Number.parseFloat(computedStyle.paddingBottom) || 0)\n // Calculate offset\n const offset = border + padding\n // Minimum height for min rows (which must be 2 rows or greater for cross-browser support)\n const minHeight = lineHeight * computedMinRows.value + offset\n\n // Get the current style height (with `px` units)\n const oldHeight = input.value.style.height || computedStyle.height\n // Probe scrollHeight by temporarily changing the height to `auto`\n height.value = 'auto'\n await nextTick() // We need to wait for the dom to update. These cannot be batched in the same tick\n // Re-check input.value after await since the element may have been unmounted\n // (e.g., during SSR hydration when BFormGroup re-renders its wrapper element)\n if (!input.value) return\n const {scrollHeight} = input.value\n // Place the original old height back on the element, just in case `computedProp`\n // returns the same value as before\n height.value = oldHeight\n await nextTick() // We need to wait for the dom to update. These cannot be batched in the same tick\n if (!input.value) return\n\n // Calculate content height in 'rows' (scrollHeight includes padding but not border)\n const contentRows = Math.max((scrollHeight - padding) / lineHeight, 2)\n // Calculate number of rows to display (limited within min/max rows)\n const rows = Math.min(Math.max(contentRows, computedMinRows.value), computedMaxRows.value)\n // Calculate the required height of the textarea including border and padding (in pixels)\n const newHeight = Math.max(Math.ceil(rows * lineHeight + offset), minHeight)\n\n // Computed height remains the larger of `oldHeight` and new `height`,\n // when height is in `sticky` mode (prop `no-auto-shrink` is true)\n if (toValue(noAutoShrink) && (Number.parseFloat(oldHeight.toString()) || 0) > newHeight) {\n height.value = oldHeight\n return\n }\n\n // Return the new computed CSS height in px units\n height.value = `${newHeight}px`\n }\n\n onMounted(handleHeightChange)\n\n const computedStyles = computed<CSSProperties>(() => ({\n resize: 'none',\n height:\n typeof height.value === 'string'\n ? height.value\n : height.value\n ? `${height.value}px`\n : undefined,\n }))\n\n return {\n onInput: handleHeightChange,\n computedStyles,\n computedRows,\n }\n}\n","<template>\n <textarea\n :id=\"computedId\"\n ref=\"_input\"\n :class=\"computedClasses\"\n :name=\"props.name || undefined\"\n :form=\"props.form || undefined\"\n :value=\"modelValue ?? undefined\"\n :disabled=\"isDisabled\"\n :placeholder=\"props.placeholder\"\n :required=\"props.required || undefined\"\n :autocomplete=\"props.autocomplete || undefined\"\n :readonly=\"props.readonly || props.plaintext\"\n :aria-required=\"props.required || undefined\"\n :aria-invalid=\"computedAriaInvalid\"\n :rows=\"computedRows || 2\"\n :style=\"computedStyles\"\n :wrap=\"props.wrap || undefined\"\n @input=\"\n (e) => {\n onInput(e)\n handleHeightChange()\n }\n \"\n @change=\"onChange\"\n @blur=\"onBlur\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport type {BFormTextareaProps} from '../../types/ComponentProps'\nimport {computed, type CSSProperties, useTemplateRef} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {normalizeInput} from '../../utils/normalizeInput'\nimport {useFormInput} from '../../composables/useFormInput'\nimport {useTextareaResize} from '../../composables/useTextareaResize'\n\nconst _props = withDefaults(defineProps<Omit<BFormTextareaProps, 'modelValue'>>(), {\n // CommonInputProps\n ariaInvalid: undefined,\n autocomplete: undefined,\n autofocus: false,\n debounce: 0,\n debounceMaxWait: Number.NaN,\n disabled: false,\n form: undefined,\n formatter: undefined,\n id: undefined,\n lazyFormatter: false,\n list: undefined,\n modelValue: '',\n name: undefined,\n placeholder: undefined,\n plaintext: false,\n readonly: false,\n required: false,\n size: undefined,\n state: undefined,\n // End CommonInputProps\n noResize: false,\n noAutoShrink: false,\n maxRows: undefined,\n rows: 2,\n wrap: 'soft',\n})\nconst props = useDefaults(_props, 'BFormTextarea')\n\nconst [modelValue, modelModifiers] = defineModel<\n Exclude<BFormTextareaProps['modelValue'], undefined>,\n 'trim' | 'lazy' | 'number'\n>({\n default: '',\n set: (v) => normalizeInput(v, modelModifiers),\n})\n\nconst input = useTemplateRef('_input')\n\nconst {\n computedId,\n computedAriaInvalid,\n onInput,\n stateClass,\n onChange,\n onBlur,\n focus,\n blur,\n isDisabled,\n} = useFormInput(props, input, modelValue, modelModifiers)\n\nconst computedClasses = computed(() => [\n stateClass.value,\n props.plaintext ? 'form-control-plaintext' : 'form-control',\n {\n [`form-control-${props.size}`]: !!props.size,\n },\n])\n\nconst {\n computedStyles: resizeStyles,\n onInput: handleHeightChange,\n computedRows,\n} = useTextareaResize(input, {\n maxRows: () => props.maxRows,\n rows: () => props.rows,\n noAutoShrink: () => props.noAutoShrink,\n})\n\nconst computedStyles = computed<CSSProperties>(() => ({\n resize: props.noResize ? 'none' : undefined,\n ...(props.maxRows || props.noAutoShrink ? resizeStyles.value : undefined),\n}))\n\ndefineExpose({\n blur,\n element: input,\n flushDebounce: onBlur,\n focus,\n})\n</script>\n","<template>\n <textarea\n :id=\"computedId\"\n ref=\"_input\"\n :class=\"computedClasses\"\n :name=\"props.name || undefined\"\n :form=\"props.form || undefined\"\n :value=\"modelValue ?? undefined\"\n :disabled=\"isDisabled\"\n :placeholder=\"props.placeholder\"\n :required=\"props.required || undefined\"\n :autocomplete=\"props.autocomplete || undefined\"\n :readonly=\"props.readonly || props.plaintext\"\n :aria-required=\"props.required || undefined\"\n :aria-invalid=\"computedAriaInvalid\"\n :rows=\"computedRows || 2\"\n :style=\"computedStyles\"\n :wrap=\"props.wrap || undefined\"\n @input=\"\n (e) => {\n onInput(e)\n handleHeightChange()\n }\n \"\n @change=\"onChange\"\n @blur=\"onBlur\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport type {BFormTextareaProps} from '../../types/ComponentProps'\nimport {computed, type CSSProperties, useTemplateRef} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {normalizeInput} from '../../utils/normalizeInput'\nimport {useFormInput} from '../../composables/useFormInput'\nimport {useTextareaResize} from '../../composables/useTextareaResize'\n\nconst _props = withDefaults(defineProps<Omit<BFormTextareaProps, 'modelValue'>>(), {\n // CommonInputProps\n ariaInvalid: undefined,\n autocomplete: undefined,\n autofocus: false,\n debounce: 0,\n debounceMaxWait: Number.NaN,\n disabled: false,\n form: undefined,\n formatter: undefined,\n id: undefined,\n lazyFormatter: false,\n list: undefined,\n modelValue: '',\n name: undefined,\n placeholder: undefined,\n plaintext: false,\n readonly: false,\n required: false,\n size: undefined,\n state: undefined,\n // End CommonInputProps\n noResize: false,\n noAutoShrink: false,\n maxRows: undefined,\n rows: 2,\n wrap: 'soft',\n})\nconst props = useDefaults(_props, 'BFormTextarea')\n\nconst [modelValue, modelModifiers] = defineModel<\n Exclude<BFormTextareaProps['modelValue'], undefined>,\n 'trim' | 'lazy' | 'number'\n>({\n default: '',\n set: (v) => normalizeInput(v, modelModifiers),\n})\n\nconst input = useTemplateRef('_input')\n\nconst {\n computedId,\n computedAriaInvalid,\n onInput,\n stateClass,\n onChange,\n onBlur,\n focus,\n blur,\n isDisabled,\n} = useFormInput(props, input, modelValue, modelModifiers)\n\nconst computedClasses = computed(() => [\n stateClass.value,\n props.plaintext ? 'form-control-plaintext' : 'form-control',\n {\n [`form-control-${props.size}`]: !!props.size,\n },\n])\n\nconst {\n computedStyles: resizeStyles,\n onInput: handleHeightChange,\n computedRows,\n} = useTextareaResize(input, {\n maxRows: () => props.maxRows,\n rows: () => props.rows,\n noAutoShrink: () => props.noAutoShrink,\n})\n\nconst computedStyles = computed<CSSProperties>(() => ({\n resize: props.noResize ? 'none' : undefined,\n ...(props.maxRows || props.noAutoShrink ? resizeStyles.value : undefined),\n}))\n\ndefineExpose({\n blur,\n element: input,\n flushDebounce: onBlur,\n focus,\n})\n</script>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BFormTextarea-BIrsIHU1.js","names":[],"sources":["../src/composables/useTextareaResize.ts","../src/components/BFormTextarea/BFormTextarea.vue","../src/components/BFormTextarea/BFormTextarea.vue"],"sourcesContent":["import {useToNumber} from '@vueuse/core'\nimport type {Numberish} from '../types/CommonTypes'\nimport {\n computed,\n type CSSProperties,\n type MaybeRefOrGetter,\n nextTick,\n onMounted,\n ref,\n type ShallowRef,\n toValue,\n} from 'vue'\nimport {isVisible} from '../utils/dom'\n\nexport const useTextareaResize = (\n input: Readonly<ShallowRef<HTMLTextAreaElement | null>>,\n {\n maxRows,\n noAutoShrink,\n rows,\n }: {\n rows: MaybeRefOrGetter<Numberish>\n maxRows: MaybeRefOrGetter<Numberish | undefined>\n noAutoShrink: MaybeRefOrGetter<boolean>\n }\n) => {\n const height = ref<number | null | string>(0)\n const maxRowsNumber = useToNumber(\n computed(() => toValue(maxRows) || Number.NaN),\n {\n method: 'parseInt',\n nanToZero: true,\n }\n )\n const rowsNumber = useToNumber(rows, {\n method: 'parseInt',\n nanToZero: true,\n })\n const computedMinRows = computed(() => Math.max(rowsNumber.value || 2, 2))\n const computedMaxRows = computed(() => Math.max(computedMinRows.value, maxRowsNumber.value || 0))\n const computedRows = computed(() =>\n computedMinRows.value === computedMaxRows.value ? computedMinRows.value : null\n )\n\n const handleHeightChange = async () => {\n // Element must be visible (not hidden) and in document\n // Must be checked after above checks\n if (!input.value || !isVisible(input.value)) {\n height.value = null\n return\n }\n\n // Get current computed styles\n const computedStyle = getComputedStyle(input.value)\n // Height of one line of text in px\n const lineHeight = Number.parseFloat(computedStyle.lineHeight) || 1\n // Calculate height of border and padding\n const border =\n (Number.parseFloat(computedStyle.borderTopWidth) || 0) +\n (Number.parseFloat(computedStyle.borderBottomWidth) || 0)\n const padding =\n (Number.parseFloat(computedStyle.paddingTop) || 0) +\n (Number.parseFloat(computedStyle.paddingBottom) || 0)\n // Calculate offset\n const offset = border + padding\n // Minimum height for min rows (which must be 2 rows or greater for cross-browser support)\n const minHeight = lineHeight * computedMinRows.value + offset\n\n // Get the current style height (with `px` units)\n const oldHeight = input.value.style.height || computedStyle.height\n // Probe scrollHeight by temporarily changing the height to `auto`\n height.value = 'auto'\n await nextTick() // We need to wait for the dom to update. These cannot be batched in the same tick\n // Re-check input.value after await since the element may have been unmounted\n // (e.g., during SSR hydration when BFormGroup re-renders its wrapper element)\n if (!input.value) return\n const {scrollHeight} = input.value\n // Place the original old height back on the element, just in case `computedProp`\n // returns the same value as before\n height.value = oldHeight\n await nextTick() // We need to wait for the dom to update. These cannot be batched in the same tick\n if (!input.value) return\n\n // Calculate content height in 'rows' (scrollHeight includes padding but not border)\n const contentRows = Math.max((scrollHeight - padding) / lineHeight, 2)\n // Calculate number of rows to display (limited within min/max rows)\n const rows = Math.min(Math.max(contentRows, computedMinRows.value), computedMaxRows.value)\n // Calculate the required height of the textarea including border and padding (in pixels)\n const newHeight = Math.max(Math.ceil(rows * lineHeight + offset), minHeight)\n\n // Computed height remains the larger of `oldHeight` and new `height`,\n // when height is in `sticky` mode (prop `no-auto-shrink` is true)\n if (toValue(noAutoShrink) && (Number.parseFloat(oldHeight.toString()) || 0) > newHeight) {\n height.value = oldHeight\n return\n }\n\n // Return the new computed CSS height in px units\n height.value = `${newHeight}px`\n }\n\n onMounted(handleHeightChange)\n\n const computedStyles = computed<CSSProperties>(() => ({\n resize: 'none',\n height:\n typeof height.value === 'string'\n ? height.value\n : height.value\n ? `${height.value}px`\n : undefined,\n }))\n\n return {\n onInput: handleHeightChange,\n computedStyles,\n computedRows,\n }\n}\n","<template>\n <textarea\n :id=\"computedId\"\n ref=\"_input\"\n :class=\"computedClasses\"\n :name=\"props.name || undefined\"\n :form=\"props.form || undefined\"\n :value=\"modelValue ?? undefined\"\n :disabled=\"isDisabled\"\n :placeholder=\"props.placeholder\"\n :required=\"props.required || undefined\"\n :autocomplete=\"props.autocomplete || undefined\"\n :readonly=\"props.readonly || props.plaintext\"\n :aria-required=\"props.required || undefined\"\n :aria-invalid=\"computedAriaInvalid\"\n :rows=\"computedRows || 2\"\n :style=\"computedStyles\"\n :wrap=\"props.wrap || undefined\"\n @input=\"\n (e) => {\n onInput(e)\n handleHeightChange()\n }\n \"\n @change=\"onChange\"\n @blur=\"onBlur\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport type {BFormTextareaProps} from '../../types/ComponentProps'\nimport {computed, type CSSProperties, useTemplateRef} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {normalizeInput} from '../../utils/normalizeInput'\nimport {useFormInput} from '../../composables/useFormInput'\nimport {useTextareaResize} from '../../composables/useTextareaResize'\n\nconst _props = withDefaults(defineProps<Omit<BFormTextareaProps, 'modelValue'>>(), {\n // CommonInputProps\n ariaInvalid: undefined,\n autocomplete: undefined,\n autofocus: false,\n debounce: 0,\n debounceMaxWait: Number.NaN,\n disabled: false,\n form: undefined,\n formatter: undefined,\n id: undefined,\n lazyFormatter: false,\n list: undefined,\n modelValue: '',\n name: undefined,\n placeholder: undefined,\n plaintext: false,\n readonly: false,\n required: false,\n size: undefined,\n state: undefined,\n // End CommonInputProps\n noResize: false,\n noAutoShrink: false,\n maxRows: undefined,\n rows: 2,\n wrap: 'soft',\n})\nconst props = useDefaults(_props, 'BFormTextarea')\n\nconst [modelValue, modelModifiers] = defineModel<\n Exclude<BFormTextareaProps['modelValue'], undefined>,\n 'trim' | 'lazy' | 'number'\n>({\n default: '',\n set: (v) => normalizeInput(v, modelModifiers),\n})\n\nconst input = useTemplateRef('_input')\n\nconst {\n computedId,\n computedAriaInvalid,\n onInput,\n stateClass,\n onChange,\n onBlur,\n focus,\n blur,\n isDisabled,\n} = useFormInput(props, input, modelValue, modelModifiers)\n\nconst computedClasses = computed(() => [\n stateClass.value,\n props.plaintext ? 'form-control-plaintext' : 'form-control',\n {\n [`form-control-${props.size}`]: !!props.size,\n },\n])\n\nconst {\n computedStyles: resizeStyles,\n onInput: handleHeightChange,\n computedRows,\n} = useTextareaResize(input, {\n maxRows: () => props.maxRows,\n rows: () => props.rows,\n noAutoShrink: () => props.noAutoShrink,\n})\n\nconst computedStyles = computed<CSSProperties>(() => ({\n resize: props.noResize ? 'none' : undefined,\n ...(props.maxRows || props.noAutoShrink ? resizeStyles.value : undefined),\n}))\n\ndefineExpose({\n blur,\n element: input,\n flushDebounce: onBlur,\n focus,\n})\n</script>\n","<template>\n <textarea\n :id=\"computedId\"\n ref=\"_input\"\n :class=\"computedClasses\"\n :name=\"props.name || undefined\"\n :form=\"props.form || undefined\"\n :value=\"modelValue ?? undefined\"\n :disabled=\"isDisabled\"\n :placeholder=\"props.placeholder\"\n :required=\"props.required || undefined\"\n :autocomplete=\"props.autocomplete || undefined\"\n :readonly=\"props.readonly || props.plaintext\"\n :aria-required=\"props.required || undefined\"\n :aria-invalid=\"computedAriaInvalid\"\n :rows=\"computedRows || 2\"\n :style=\"computedStyles\"\n :wrap=\"props.wrap || undefined\"\n @input=\"\n (e) => {\n onInput(e)\n handleHeightChange()\n }\n \"\n @change=\"onChange\"\n @blur=\"onBlur\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport type {BFormTextareaProps} from '../../types/ComponentProps'\nimport {computed, type CSSProperties, useTemplateRef} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {normalizeInput} from '../../utils/normalizeInput'\nimport {useFormInput} from '../../composables/useFormInput'\nimport {useTextareaResize} from '../../composables/useTextareaResize'\n\nconst _props = withDefaults(defineProps<Omit<BFormTextareaProps, 'modelValue'>>(), {\n // CommonInputProps\n ariaInvalid: undefined,\n autocomplete: undefined,\n autofocus: false,\n debounce: 0,\n debounceMaxWait: Number.NaN,\n disabled: false,\n form: undefined,\n formatter: undefined,\n id: undefined,\n lazyFormatter: false,\n list: undefined,\n modelValue: '',\n name: undefined,\n placeholder: undefined,\n plaintext: false,\n readonly: false,\n required: false,\n size: undefined,\n state: undefined,\n // End CommonInputProps\n noResize: false,\n noAutoShrink: false,\n maxRows: undefined,\n rows: 2,\n wrap: 'soft',\n})\nconst props = useDefaults(_props, 'BFormTextarea')\n\nconst [modelValue, modelModifiers] = defineModel<\n Exclude<BFormTextareaProps['modelValue'], undefined>,\n 'trim' | 'lazy' | 'number'\n>({\n default: '',\n set: (v) => normalizeInput(v, modelModifiers),\n})\n\nconst input = useTemplateRef('_input')\n\nconst {\n computedId,\n computedAriaInvalid,\n onInput,\n stateClass,\n onChange,\n onBlur,\n focus,\n blur,\n isDisabled,\n} = useFormInput(props, input, modelValue, modelModifiers)\n\nconst computedClasses = computed(() => [\n stateClass.value,\n props.plaintext ? 'form-control-plaintext' : 'form-control',\n {\n [`form-control-${props.size}`]: !!props.size,\n },\n])\n\nconst {\n computedStyles: resizeStyles,\n onInput: handleHeightChange,\n computedRows,\n} = useTextareaResize(input, {\n maxRows: () => props.maxRows,\n rows: () => props.rows,\n noAutoShrink: () => props.noAutoShrink,\n})\n\nconst computedStyles = computed<CSSProperties>(() => ({\n resize: props.noResize ? 'none' : undefined,\n ...(props.maxRows || props.noAutoShrink ? resizeStyles.value : undefined),\n}))\n\ndefineExpose({\n blur,\n element: input,\n flushDebounce: onBlur,\n focus,\n})\n</script>\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { L as useToNumber } from "./dist-Dn5blevd.mjs";
|
|
2
2
|
import { s as isVisible } from "./dom-AhkaSoh8.mjs";
|
|
3
|
-
import { t as useDefaults } from "./useDefaults-
|
|
4
|
-
import { n as normalizeInput, t as useFormInput } from "./useFormInput-
|
|
3
|
+
import { t as useDefaults } from "./useDefaults-BKgBaqOV.mjs";
|
|
4
|
+
import { n as normalizeInput, t as useFormInput } from "./useFormInput-9wwIZZqf.mjs";
|
|
5
5
|
import { computed, createElementBlock, defineComponent, mergeModels, nextTick, normalizeClass, normalizeStyle, onMounted, openBlock, ref, toValue, unref, useModel, useTemplateRef } from "vue";
|
|
6
6
|
//#region src/composables/useTextareaResize.ts
|
|
7
7
|
var useTextareaResize = (input, { maxRows, noAutoShrink, rows }) => {
|
|
@@ -194,4 +194,4 @@ var BFormTextarea_default = /* @__PURE__ */ defineComponent({
|
|
|
194
194
|
//#endregion
|
|
195
195
|
export { BFormTextarea_default as t };
|
|
196
196
|
|
|
197
|
-
//# sourceMappingURL=BFormTextarea-
|
|
197
|
+
//# sourceMappingURL=BFormTextarea-D8waUYBT.mjs.map
|