bootstrap-vue-next 0.45.5 → 0.45.6
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-Gz2SpRmq.mjs → BAccordion-D51b9HVD.mjs} +5 -5
- package/dist/{BAccordion-Gz2SpRmq.mjs.map → BAccordion-D51b9HVD.mjs.map} +1 -1
- package/dist/{BAccordion-DgXJMqdG.js → BAccordion-DYmuqZIG.js} +5 -5
- package/dist/{BAccordion-DgXJMqdG.js.map → BAccordion-DYmuqZIG.js.map} +1 -1
- package/dist/{BAlert-BFPBalmr.mjs → BAlert-Ce2uxrJi.mjs} +8 -8
- package/dist/{BAlert-BFPBalmr.mjs.map → BAlert-Ce2uxrJi.mjs.map} +1 -1
- package/dist/{BAlert-Dk3rgEOI.js → BAlert-croEtrQu.js} +8 -8
- package/dist/{BAlert-Dk3rgEOI.js.map → BAlert-croEtrQu.js.map} +1 -1
- package/dist/{BApp-CIu-zI8K.mjs → BApp-B-fUrnpK.mjs} +2 -2
- package/dist/{BApp-CIu-zI8K.mjs.map → BApp-B-fUrnpK.mjs.map} +1 -1
- package/dist/{BApp-cBKQc5Dd.js → BApp-DOvEe1jo.js} +2 -2
- package/dist/{BApp-cBKQc5Dd.js.map → BApp-DOvEe1jo.js.map} +1 -1
- package/dist/{BAspect-BULTO240.js → BAspect-CUIU48Ck.js} +2 -2
- package/dist/{BAspect-BULTO240.js.map → BAspect-CUIU48Ck.js.map} +1 -1
- package/dist/{BAspect-CwokVvvn.mjs → BAspect-wfiXM4KA.mjs} +2 -2
- package/dist/{BAspect-CwokVvvn.mjs.map → BAspect-wfiXM4KA.mjs.map} +1 -1
- package/dist/{BAutocomplete-DRzLhACU.mjs → BAutocomplete-CH-bQzME.mjs} +8 -8
- package/dist/{BAutocomplete-DRzLhACU.mjs.map → BAutocomplete-CH-bQzME.mjs.map} +1 -1
- package/dist/{BAutocomplete-D8Qkcqcy.js → BAutocomplete-DLDFAV5_.js} +8 -8
- package/dist/{BAutocomplete-D8Qkcqcy.js.map → BAutocomplete-DLDFAV5_.js.map} +1 -1
- package/dist/{BAvatar-CZn0MQHY.js → BAvatar-FGK0dK0x.js} +5 -5
- package/dist/{BAvatar-CZn0MQHY.js.map → BAvatar-FGK0dK0x.js.map} +1 -1
- package/dist/{BAvatar-DODGnQMY.mjs → BAvatar-iALHbqVk.mjs} +5 -5
- package/dist/{BAvatar-DODGnQMY.mjs.map → BAvatar-iALHbqVk.mjs.map} +1 -1
- package/dist/{BBadge-CZ219I7a.mjs → BBadge-Cx_CdauK.mjs} +3 -3
- package/dist/{BBadge-CZ219I7a.mjs.map → BBadge-Cx_CdauK.mjs.map} +1 -1
- package/dist/{BBadge-DTJcCo9u.js → BBadge-Db6SEnzy.js} +3 -3
- package/dist/{BBadge-DTJcCo9u.js.map → BBadge-Db6SEnzy.js.map} +1 -1
- package/dist/{BBreadcrumb-DFG2Qxl9.js → BBreadcrumb-B9ra7vg2.js} +3 -3
- package/dist/{BBreadcrumb-DFG2Qxl9.js.map → BBreadcrumb-B9ra7vg2.js.map} +1 -1
- package/dist/{BBreadcrumb-Dk4ia-9c.mjs → BBreadcrumb-BxADbg0O.mjs} +3 -3
- package/dist/{BBreadcrumb-Dk4ia-9c.mjs.map → BBreadcrumb-BxADbg0O.mjs.map} +1 -1
- package/dist/{BButton-C0Ylhonf.mjs → BButton-BSa7LfL5.mjs} +5 -5
- package/dist/{BButton-C0Ylhonf.mjs.map → BButton-BSa7LfL5.mjs.map} +1 -1
- package/dist/{BButton-BZ9eI3ZX.js → BButton-DRRlzkyK.js} +5 -5
- package/dist/{BButton-BZ9eI3ZX.js.map → BButton-DRRlzkyK.js.map} +1 -1
- package/dist/{BButton-D_sCrjpg.mjs → BButton-PY7AANXJ.mjs} +4 -4
- package/dist/{BButton-D_sCrjpg.mjs.map → BButton-PY7AANXJ.mjs.map} +1 -1
- package/dist/{BButton-Dr-RadYQ.js → BButton-aYtMnyHu.js} +4 -4
- package/dist/{BButton-Dr-RadYQ.js.map → BButton-aYtMnyHu.js.map} +1 -1
- package/dist/{BCard-cj8_dIcz.mjs → BCard-BWoruisp.mjs} +3 -3
- package/dist/{BCard-cj8_dIcz.mjs.map → BCard-BWoruisp.mjs.map} +1 -1
- package/dist/{BCard-BjQkY783.js → BCard-Bh8RLMo_.js} +3 -3
- package/dist/{BCard-BjQkY783.js.map → BCard-Bh8RLMo_.js.map} +1 -1
- package/dist/{BCard-TS8DtOwm.mjs → BCard-CHbKv2OR.mjs} +3 -3
- package/dist/{BCard-TS8DtOwm.mjs.map → BCard-CHbKv2OR.mjs.map} +1 -1
- package/dist/{BCard-BkvG5Zzw.js → BCard-DwNYhVmg.js} +3 -3
- package/dist/{BCard-BkvG5Zzw.js.map → BCard-DwNYhVmg.js.map} +1 -1
- package/dist/{BCarousel-D23rApAX.js → BCarousel-2JB21Pcu.js} +5 -5
- package/dist/{BCarousel-D23rApAX.js.map → BCarousel-2JB21Pcu.js.map} +1 -1
- package/dist/{BCarousel-VL1gVXpt.mjs → BCarousel-B6_bgQpl.mjs} +5 -5
- package/dist/{BCarousel-VL1gVXpt.mjs.map → BCarousel-B6_bgQpl.mjs.map} +1 -1
- package/dist/{BCloseButton-CCdRwLDo.mjs → BCloseButton-CKTKr4PS.mjs} +2 -2
- package/dist/{BCloseButton-CCdRwLDo.mjs.map → BCloseButton-CKTKr4PS.mjs.map} +1 -1
- package/dist/{BCloseButton-fw5ONnhr.js → BCloseButton-D42zHRLP.js} +2 -2
- package/dist/{BCloseButton-fw5ONnhr.js.map → BCloseButton-D42zHRLP.js.map} +1 -1
- package/dist/{BCol-VPaTVLsM.mjs → BCol-B3VeEk9z.mjs} +2 -2
- package/dist/{BCol-VPaTVLsM.mjs.map → BCol-B3VeEk9z.mjs.map} +1 -1
- package/dist/{BCol-CArTYHqb.js → BCol-Ck9VydHj.js} +2 -2
- package/dist/{BCol-CArTYHqb.js.map → BCol-Ck9VydHj.js.map} +1 -1
- package/dist/{BCollapse-CZlDVTpI.js → BCollapse-CDLYLSZo.js} +5 -5
- package/dist/{BCollapse-CZlDVTpI.js.map → BCollapse-CDLYLSZo.js.map} +1 -1
- package/dist/{BCollapse-CTvK48kB.mjs → BCollapse-kqhe4AmL.mjs} +5 -5
- package/dist/{BCollapse-CTvK48kB.mjs.map → BCollapse-kqhe4AmL.mjs.map} +1 -1
- package/dist/{BContainer-CeHyMYb_.mjs → BContainer-ATfhaxTc.mjs} +4 -4
- package/dist/{BContainer-CeHyMYb_.mjs.map → BContainer-ATfhaxTc.mjs.map} +1 -1
- package/dist/{BContainer-CNmEk2mi.js → BContainer-CcF6dgtI.js} +4 -4
- package/dist/{BContainer-CNmEk2mi.js.map → BContainer-CcF6dgtI.js.map} +1 -1
- package/dist/{BDateField-gRWIwMnA.mjs → BDateField-CccP3H1R.mjs} +3 -3
- package/dist/{BDateField-gRWIwMnA.mjs.map → BDateField-CccP3H1R.mjs.map} +1 -1
- package/dist/{BDateField-B4yL8Pju.js → BDateField-DzZw5FRX.js} +3 -3
- package/dist/{BDateField-B4yL8Pju.js.map → BDateField-DzZw5FRX.js.map} +1 -1
- package/dist/{BDatePicker-m2drV1fl.js → BDatePicker-BDkzkOcm.js} +3 -3
- package/dist/{BDatePicker-m2drV1fl.js.map → BDatePicker-BDkzkOcm.js.map} +1 -1
- package/dist/{BDatePicker-ZuMpgD91.mjs → BDatePicker-BnwnSkBg.mjs} +3 -3
- package/dist/{BDatePicker-ZuMpgD91.mjs.map → BDatePicker-BnwnSkBg.mjs.map} +1 -1
- package/dist/{BDropdown-D2ep4wKG.mjs → BDropdown-0E8x5kk6.mjs} +5 -5
- package/dist/{BDropdown-D2ep4wKG.mjs.map → BDropdown-0E8x5kk6.mjs.map} +1 -1
- package/dist/{BDropdown-B2vWJ-u0.mjs → BDropdown-B1DbvVzm.mjs} +7 -7
- package/dist/{BDropdown-B2vWJ-u0.mjs.map → BDropdown-B1DbvVzm.mjs.map} +1 -1
- package/dist/{BDropdown-BSCasYDc.js → BDropdown-BPFtkX3p.js} +7 -7
- package/dist/{BDropdown-BSCasYDc.js.map → BDropdown-BPFtkX3p.js.map} +1 -1
- package/dist/{BDropdown-CL-erjq8.js → BDropdown-DKCgBzYS.js} +5 -5
- package/dist/{BDropdown-CL-erjq8.js.map → BDropdown-DKCgBzYS.js.map} +1 -1
- package/dist/{BForm-B0bPQ4kx.js → BForm-6JlWdQMO.js} +9 -6
- package/dist/{BForm-B0bPQ4kx.js.map → BForm-6JlWdQMO.js.map} +1 -1
- package/dist/{BForm-CpNuvbIt.mjs → BForm-BVfW08s5.mjs} +2 -2
- package/dist/{BForm-CpNuvbIt.mjs.map → BForm-BVfW08s5.mjs.map} +1 -1
- package/dist/{BForm-CoQKIJzv.mjs → BForm-DJu2hDV_.mjs} +10 -7
- package/dist/{BForm-CoQKIJzv.mjs.map → BForm-DJu2hDV_.mjs.map} +1 -1
- package/dist/{BForm-K67Ciyza.js → BForm-cnRpggt9.js} +2 -2
- package/dist/{BForm-K67Ciyza.js.map → BForm-cnRpggt9.js.map} +1 -1
- package/dist/{BFormCheckbox-xN7AQw4O.mjs → BFormCheckbox-Baf_9BSc.mjs} +9 -6
- package/dist/BFormCheckbox-Baf_9BSc.mjs.map +1 -0
- package/dist/{BFormCheckbox-g7gtIrhy.js → BFormCheckbox-D5ySHMJ8.js} +9 -6
- package/dist/BFormCheckbox-D5ySHMJ8.js.map +1 -0
- package/dist/{BFormFile-DXdAyYmv.mjs → BFormFile-EXRrATZm.mjs} +3 -3
- package/dist/{BFormFile-DXdAyYmv.mjs.map → BFormFile-EXRrATZm.mjs.map} +1 -1
- package/dist/{BFormFile-DC-x9wQo.js → BFormFile-X-BQsYko.js} +3 -3
- package/dist/{BFormFile-DC-x9wQo.js.map → BFormFile-X-BQsYko.js.map} +1 -1
- package/dist/{BFormGroup-DZTiChgT.js → BFormGroup-Bk1t-D1N.js} +89 -104
- package/dist/BFormGroup-Bk1t-D1N.js.map +1 -0
- package/dist/{BFormGroup-ayltvQts.mjs → BFormGroup-vysRPb99.mjs} +90 -105
- package/dist/BFormGroup-vysRPb99.mjs.map +1 -0
- package/dist/{BFormInput-DNuvqbFQ.js → BFormInput-CBwwDjfC.js} +4 -4
- package/dist/{BFormInput-DNuvqbFQ.js.map → BFormInput-CBwwDjfC.js.map} +1 -1
- package/dist/{BFormInput-NKko58M2.mjs → BFormInput-sEfU3CuN.mjs} +4 -4
- package/dist/{BFormInput-NKko58M2.mjs.map → BFormInput-sEfU3CuN.mjs.map} +1 -1
- package/dist/{BFormOtp-B4al7MJf.mjs → BFormOtp-C8X3u1od.mjs} +4 -4
- package/dist/{BFormOtp-B4al7MJf.mjs.map → BFormOtp-C8X3u1od.mjs.map} +1 -1
- package/dist/{BFormOtp-UcLR9oFd.js → BFormOtp-CLrQJRPe.js} +4 -4
- package/dist/{BFormOtp-UcLR9oFd.js.map → BFormOtp-CLrQJRPe.js.map} +1 -1
- package/dist/{BFormRadio-DX-gM5Rc.js → BFormRadio-B2yu-o2v.js} +9 -6
- package/dist/BFormRadio-B2yu-o2v.js.map +1 -0
- package/dist/{BFormRadio-DHx68AdL.mjs → BFormRadio-COc_IbxC.mjs} +9 -6
- package/dist/BFormRadio-COc_IbxC.mjs.map +1 -0
- package/dist/{BFormRating-BR7RMvZG.mjs → BFormRating-CIgPVsH_.mjs} +4 -4
- package/dist/{BFormRating-BR7RMvZG.mjs.map → BFormRating-CIgPVsH_.mjs.map} +1 -1
- package/dist/{BFormRating-CF-x5qkB.js → BFormRating-CSdRxN5z.js} +4 -4
- package/dist/{BFormRating-CF-x5qkB.js.map → BFormRating-CSdRxN5z.js.map} +1 -1
- package/dist/{BFormSelect-CtcsnTlz.js → BFormSelect-CI92Dv27.js} +7 -6
- package/dist/BFormSelect-CI92Dv27.js.map +1 -0
- package/dist/{BFormSelect-eS-C3M0J.mjs → BFormSelect-P-InkOm-.mjs} +7 -6
- package/dist/BFormSelect-P-InkOm-.mjs.map +1 -0
- package/dist/{BFormSelectOption-B3BO50XB.mjs → BFormSelectOption-DFN4lPRh.mjs} +3 -3
- package/dist/{BFormSelectOption-B3BO50XB.mjs.map → BFormSelectOption-DFN4lPRh.mjs.map} +1 -1
- package/dist/{BFormSelectOption-CQ3j1Q5j.js → BFormSelectOption-DrwJucNf.js} +3 -3
- package/dist/{BFormSelectOption-CQ3j1Q5j.js.map → BFormSelectOption-DrwJucNf.js.map} +1 -1
- package/dist/{BFormSpinbutton-DPCXum9q.js → BFormSpinbutton-1gTz4nTo.js} +4 -4
- package/dist/{BFormSpinbutton-DPCXum9q.js.map → BFormSpinbutton-1gTz4nTo.js.map} +1 -1
- package/dist/{BFormSpinbutton-CPsVUIh9.mjs → BFormSpinbutton-6qkTBF_4.mjs} +4 -4
- package/dist/{BFormSpinbutton-CPsVUIh9.mjs.map → BFormSpinbutton-6qkTBF_4.mjs.map} +1 -1
- package/dist/{BFormTag-Bsy6Znok.js → BFormTag-CeV0MSRC.js} +4 -4
- package/dist/{BFormTag-Bsy6Znok.js.map → BFormTag-CeV0MSRC.js.map} +1 -1
- package/dist/{BFormTag-Cjg1R-Lj.mjs → BFormTag-CnzI39y9.mjs} +4 -4
- package/dist/{BFormTag-Cjg1R-Lj.mjs.map → BFormTag-CnzI39y9.mjs.map} +1 -1
- package/dist/{BFormTags-D2Dk598Q.mjs → BFormTags-BMltSaKL.mjs} +4 -4
- package/dist/{BFormTags-D2Dk598Q.mjs.map → BFormTags-BMltSaKL.mjs.map} +1 -1
- package/dist/{BFormTags-BIZyBseI.js → BFormTags-BhO60uiL.js} +4 -4
- package/dist/{BFormTags-BIZyBseI.js.map → BFormTags-BhO60uiL.js.map} +1 -1
- package/dist/{BFormTextarea-CYh47SxL.js → BFormTextarea-C3Cj0DWj.js} +3 -3
- package/dist/{BFormTextarea-CYh47SxL.js.map → BFormTextarea-C3Cj0DWj.js.map} +1 -1
- package/dist/{BFormTextarea-M21mholw.mjs → BFormTextarea-DN1gAfSo.mjs} +3 -3
- package/dist/{BFormTextarea-M21mholw.mjs.map → BFormTextarea-DN1gAfSo.mjs.map} +1 -1
- package/dist/{BFormValidFeedback-DWkakzVO.mjs → BFormValidFeedback-CBYxQLDz.mjs} +44 -4
- package/dist/BFormValidFeedback-CBYxQLDz.mjs.map +1 -0
- package/dist/{BFormValidFeedback-BhkEhSa0.js → BFormValidFeedback-Kwxh798d.js} +48 -2
- package/dist/BFormValidFeedback-Kwxh798d.js.map +1 -0
- package/dist/{BImg-DFiJSy66.js → BImg-JKJLgYYT.js} +2 -2
- package/dist/{BImg-DFiJSy66.js.map → BImg-JKJLgYYT.js.map} +1 -1
- package/dist/{BImg-UUMOpbK0.mjs → BImg-QBS2ECBc.mjs} +2 -2
- package/dist/{BImg-UUMOpbK0.mjs.map → BImg-QBS2ECBc.mjs.map} +1 -1
- package/dist/{BInputGroup-BAC-B_UM.js → BInputGroup-Bvlfv6VD.js} +3 -3
- package/dist/{BInputGroup-BAC-B_UM.js.map → BInputGroup-Bvlfv6VD.js.map} +1 -1
- package/dist/{BInputGroup-CiKwWBSu.js → BInputGroup-D4fW324B.js} +3 -3
- package/dist/{BInputGroup-CiKwWBSu.js.map → BInputGroup-D4fW324B.js.map} +1 -1
- package/dist/{BInputGroup-CfELrPhK.mjs → BInputGroup-DiTSexkT.mjs} +3 -3
- package/dist/{BInputGroup-CfELrPhK.mjs.map → BInputGroup-DiTSexkT.mjs.map} +1 -1
- package/dist/{BInputGroup-3AVRA3U7.mjs → BInputGroup-X2Z53RJx.mjs} +3 -3
- package/dist/{BInputGroup-3AVRA3U7.mjs.map → BInputGroup-X2Z53RJx.mjs.map} +1 -1
- package/dist/{BLink-CNFWSz0D.mjs → BLink-Dfgte6dQ.mjs} +3 -3
- package/dist/{BLink-CNFWSz0D.mjs.map → BLink-Dfgte6dQ.mjs.map} +1 -1
- package/dist/{BLink-uLjtY3bY.js → BLink-kLEjleB1.js} +3 -3
- package/dist/{BLink-uLjtY3bY.js.map → BLink-kLEjleB1.js.map} +1 -1
- package/dist/{BListGroup-CeXKZio1.js → BListGroup-C8JOzHTz.js} +4 -4
- package/dist/{BListGroup-CeXKZio1.js.map → BListGroup-C8JOzHTz.js.map} +1 -1
- package/dist/{BListGroup-CGxa7ZEu.mjs → BListGroup-DwTLpNiD.mjs} +4 -4
- package/dist/{BListGroup-CGxa7ZEu.mjs.map → BListGroup-DwTLpNiD.mjs.map} +1 -1
- package/dist/{BModal-BEmloby5.mjs → BModal-C-ZCau2E.mjs} +7 -7
- package/dist/{BModal-BEmloby5.mjs.map → BModal-C-ZCau2E.mjs.map} +1 -1
- package/dist/{BModal-6hh-azT8.js → BModal-VstTwEq9.js} +7 -7
- package/dist/{BModal-6hh-azT8.js.map → BModal-VstTwEq9.js.map} +1 -1
- package/dist/{BNav-u9QwSGj3.js → BNav-DCLambmM.js} +5 -5
- package/dist/{BNav-u9QwSGj3.js.map → BNav-DCLambmM.js.map} +1 -1
- package/dist/{BNav-EHHlEg1E.mjs → BNav-DfYvjfRK.mjs} +5 -5
- package/dist/{BNav-EHHlEg1E.mjs.map → BNav-DfYvjfRK.mjs.map} +1 -1
- package/dist/{BNavbar-s8yvmhyz.js → BNavbar-BLWaZJRP.js} +4 -4
- package/dist/{BNavbar-s8yvmhyz.js.map → BNavbar-BLWaZJRP.js.map} +1 -1
- package/dist/{BNavbar-kgHIo_Gr.mjs → BNavbar-xYaikQVY.mjs} +4 -4
- package/dist/{BNavbar-kgHIo_Gr.mjs.map → BNavbar-xYaikQVY.mjs.map} +1 -1
- package/dist/{BOffcanvas-CwH0DqSG.mjs → BOffcanvas-CQb9XNvS.mjs} +6 -6
- package/dist/{BOffcanvas-CwH0DqSG.mjs.map → BOffcanvas-CQb9XNvS.mjs.map} +1 -1
- package/dist/{BOffcanvas-DdiP19Xz.js → BOffcanvas-DTRiZzwN.js} +6 -6
- package/dist/{BOffcanvas-DdiP19Xz.js.map → BOffcanvas-DTRiZzwN.js.map} +1 -1
- package/dist/{BOverlay-DSUoseNJ.mjs → BOverlay-Bh2PIN_q.mjs} +3 -3
- package/dist/{BOverlay-DSUoseNJ.mjs.map → BOverlay-Bh2PIN_q.mjs.map} +1 -1
- package/dist/{BOverlay--gZBEMlX.js → BOverlay-Bh4ldxgt.js} +3 -3
- package/dist/{BOverlay--gZBEMlX.js.map → BOverlay-Bh4ldxgt.js.map} +1 -1
- package/dist/{BPagination-C7MKOk8h.mjs → BPagination-D75q-ZNg.mjs} +2 -2
- package/dist/{BPagination-C7MKOk8h.mjs.map → BPagination-D75q-ZNg.mjs.map} +1 -1
- package/dist/{BPagination-D6W1LdgK.js → BPagination-fbjFAtxu.js} +2 -2
- package/dist/{BPagination-D6W1LdgK.js.map → BPagination-fbjFAtxu.js.map} +1 -1
- package/dist/{BPlaceholder-Ckvq3tMu.js → BPlaceholder-B3rs_39w.js} +4 -4
- package/dist/{BPlaceholder-Ckvq3tMu.js.map → BPlaceholder-B3rs_39w.js.map} +1 -1
- package/dist/{BPlaceholder-D__hNPyQ.mjs → BPlaceholder-DPQ6mCLN.mjs} +4 -4
- package/dist/{BPlaceholder-D__hNPyQ.mjs.map → BPlaceholder-DPQ6mCLN.mjs.map} +1 -1
- package/dist/{BProgress-I1ucNlpA.mjs → BProgress-BZlrPYhA.mjs} +3 -3
- package/dist/{BProgress-I1ucNlpA.mjs.map → BProgress-BZlrPYhA.mjs.map} +1 -1
- package/dist/{BProgress-ySlPjpRn.js → BProgress-th0-eZWo.js} +3 -3
- package/dist/{BProgress-ySlPjpRn.js.map → BProgress-th0-eZWo.js.map} +1 -1
- package/dist/{BRow-CmKiMcMZ.js → BRow-7AOuFiSy.js} +2 -2
- package/dist/{BRow-CmKiMcMZ.js.map → BRow-7AOuFiSy.js.map} +1 -1
- package/dist/{BRow-U3L8AcKV.mjs → BRow-eGSUYGCW.mjs} +2 -2
- package/dist/{BRow-U3L8AcKV.mjs.map → BRow-eGSUYGCW.mjs.map} +1 -1
- package/dist/{BSpinner-CAo-XD04.mjs → BSpinner-CUfGqviV.mjs} +2 -2
- package/dist/{BSpinner-CAo-XD04.mjs.map → BSpinner-CUfGqviV.mjs.map} +1 -1
- package/dist/{BSpinner-C1bm8U4-.js → BSpinner-DbYIp-C7.js} +2 -2
- package/dist/{BSpinner-C1bm8U4-.js.map → BSpinner-DbYIp-C7.js.map} +1 -1
- package/dist/{BTable-Bt75vbNu.mjs → BTable-CzMtFdt5.mjs} +5 -5
- package/dist/{BTable-Bt75vbNu.mjs.map → BTable-CzMtFdt5.mjs.map} +1 -1
- package/dist/{BTable-CXxJl2ps.js → BTable-DOpSWDaC.js} +5 -5
- package/dist/{BTable-CXxJl2ps.js.map → BTable-DOpSWDaC.js.map} +1 -1
- package/dist/{BTableSimple-pyz_6D4s.js → BTableSimple-BkdGAAKb.js} +3 -3
- package/dist/{BTableSimple-pyz_6D4s.js.map → BTableSimple-BkdGAAKb.js.map} +1 -1
- package/dist/{BTableSimple-CThwYBVl.mjs → BTableSimple-C-jn9Nwh.mjs} +3 -3
- package/dist/{BTableSimple-CThwYBVl.mjs.map → BTableSimple-C-jn9Nwh.mjs.map} +1 -1
- package/dist/{BTabs-C8rUY0Lx.js → BTabs-CvecFg5N.js} +4 -4
- package/dist/{BTabs-C8rUY0Lx.js.map → BTabs-CvecFg5N.js.map} +1 -1
- package/dist/{BTabs-Krs_Lv-R.mjs → BTabs-D_vWlBjT.mjs} +4 -4
- package/dist/{BTabs-Krs_Lv-R.mjs.map → BTabs-D_vWlBjT.mjs.map} +1 -1
- package/dist/{BTimeField-DSf4cMpN.mjs → BTimeField-BSDaZogC.mjs} +3 -3
- package/dist/{BTimeField-DSf4cMpN.mjs.map → BTimeField-BSDaZogC.mjs.map} +1 -1
- package/dist/{BTimeField-W2LqGCjB.js → BTimeField-BT5HXecp.js} +3 -3
- package/dist/{BTimeField-W2LqGCjB.js.map → BTimeField-BT5HXecp.js.map} +1 -1
- package/dist/{BToast-DZuxMDbe.js → BToast-DR0pek4W.js} +8 -8
- package/dist/{BToast-DZuxMDbe.js.map → BToast-DR0pek4W.js.map} +1 -1
- package/dist/{BToast-Dcfnqbxt.mjs → BToast-Y8BayxES.mjs} +8 -8
- package/dist/{BToast-Dcfnqbxt.mjs.map → BToast-Y8BayxES.mjs.map} +1 -1
- package/dist/{BTooltip-BWij0hjE.mjs → BTooltip-CVP8HdkU.mjs} +3 -3
- package/dist/{BTooltip-BWij0hjE.mjs.map → BTooltip-CVP8HdkU.mjs.map} +1 -1
- package/dist/{BTooltip-BGTjsV1z.js → BTooltip-DPLYtaL1.js} +3 -3
- package/dist/{BTooltip-BGTjsV1z.js.map → BTooltip-DPLYtaL1.js.map} +1 -1
- package/dist/bootstrap-vue-next.mjs +59 -59
- package/dist/bootstrap-vue-next.umd.js +59 -59
- package/dist/composables/useProvideFormGroupData.d.mts +15 -0
- package/dist/composables/useProvideFormGroupData.d.ts +15 -0
- package/dist/{floatingUi-8xXp54zf.mjs → floatingUi-62aeQtAb.mjs} +4 -4
- package/dist/{floatingUi-8xXp54zf.mjs.map → floatingUi-62aeQtAb.mjs.map} +1 -1
- package/dist/{floatingUi-9SWu8BgZ.js → floatingUi-DQ5bHmy3.js} +4 -4
- package/dist/{floatingUi-9SWu8BgZ.js.map → floatingUi-DQ5bHmy3.js.map} +1 -1
- package/dist/{keys-durSVUrO.js → keys-BMye8nSf.js} +10 -1
- package/dist/{keys-durSVUrO.js.map → keys-BMye8nSf.js.map} +1 -1
- package/dist/{keys-CQKrwmvN.mjs → keys-DU7sQgl3.mjs} +10 -1
- package/dist/{keys-CQKrwmvN.mjs.map → keys-DU7sQgl3.mjs.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 +1 -1
- package/dist/src/components/BAspect/index.umd.js +1 -1
- package/dist/src/components/BAutocomplete/index.mjs +1 -1
- package/dist/src/components/BAutocomplete/index.umd.js +1 -1
- 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/BFormOtp/index.mjs +1 -1
- package/dist/src/components/BFormOtp/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 +2 -2
- package/dist/src/components/BFormTags/index.umd.js +2 -2
- 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 +2 -2
- package/dist/src/components/BInputGroup/index.umd.js +2 -2
- 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 +59 -59
- package/dist/src/components/index.umd.js +59 -59
- package/dist/src/composables/orchestratorShared/index.mjs +1 -1
- package/dist/src/composables/orchestratorShared/index.umd.js +1 -1
- package/dist/src/composables/useBreadcrumb/index.mjs +1 -1
- package/dist/src/composables/useBreadcrumb/index.umd.js +1 -1
- package/dist/src/composables/useModal/index.mjs +2 -2
- package/dist/src/composables/useModal/index.umd.js +2 -2
- package/dist/src/composables/usePopover/index.mjs +3 -3
- package/dist/src/composables/usePopover/index.umd.js +3 -3
- package/dist/src/composables/useProvideDefaults/index.mjs +1 -1
- package/dist/src/composables/useProvideDefaults/index.umd.js +1 -1
- package/dist/src/composables/useRegistry/index.mjs +1 -1
- package/dist/src/composables/useRegistry/index.umd.js +1 -1
- package/dist/src/composables/useToast/index.mjs +2 -2
- package/dist/src/composables/useToast/index.umd.js +2 -2
- 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 +1 -1
- package/dist/src/directives/BScrollspy/index.umd.js +1 -1
- package/dist/src/directives/BToggle/index.mjs +2 -2
- package/dist/src/directives/BToggle/index.umd.js +2 -2
- package/dist/src/directives/BTooltip/index.mjs +2 -2
- package/dist/src/directives/BTooltip/index.umd.js +2 -2
- package/dist/src/plugins/createBootstrap/index.mjs +1 -1
- package/dist/src/plugins/createBootstrap/index.umd.js +1 -1
- package/dist/src/plugins/orchestrator/index.mjs +1 -1
- package/dist/src/plugins/orchestrator/index.umd.js +1 -1
- package/dist/src/plugins/registry/index.mjs +1 -1
- package/dist/src/plugins/registry/index.umd.js +1 -1
- package/dist/src/plugins/rtl/index.mjs +1 -1
- package/dist/src/plugins/rtl/index.umd.js +1 -1
- package/dist/{useDefaults-DsLf4iRY.js → useDefaults-C0CYry78.js} +2 -2
- package/dist/{useDefaults-DsLf4iRY.js.map → useDefaults-C0CYry78.js.map} +1 -1
- package/dist/{useDefaults-BKgBaqOV.mjs → useDefaults-DseelK6y.mjs} +2 -2
- package/dist/{useDefaults-BKgBaqOV.mjs.map → useDefaults-DseelK6y.mjs.map} +1 -1
- package/dist/{useFormInput-CA4FYoV7.mjs → useFormInput-CXl8rpD0.mjs} +5 -4
- package/dist/useFormInput-CXl8rpD0.mjs.map +1 -0
- package/dist/{useFormInput-D31FCDxr.js → useFormInput-ip9hN2AU.js} +5 -4
- package/dist/useFormInput-ip9hN2AU.js.map +1 -0
- package/dist/{useId-DHrBgM7P.js → useId-BkAY2oh6.js} +2 -2
- package/dist/{useId-DHrBgM7P.js.map → useId-BkAY2oh6.js.map} +1 -1
- package/dist/{useId-BKZFSYm8.mjs → useId-D1sqXtwx.mjs} +2 -2
- package/dist/{useId-BKZFSYm8.mjs.map → useId-D1sqXtwx.mjs.map} +1 -1
- package/dist/{useRtl-DDPRnA7g.js → useRtl-BSgvbs5F.js} +2 -2
- package/dist/{useRtl-DDPRnA7g.js.map → useRtl-BSgvbs5F.js.map} +1 -1
- package/dist/{useRtl-VR3M2Txg.mjs → useRtl-CGoXBxNo.mjs} +2 -2
- package/dist/{useRtl-VR3M2Txg.mjs.map → useRtl-CGoXBxNo.mjs.map} +1 -1
- package/dist/{useShowHide-DKdljnpv.mjs → useShowHide-CBFt1_EW.mjs} +2 -2
- package/dist/{useShowHide-DKdljnpv.mjs.map → useShowHide-CBFt1_EW.mjs.map} +1 -1
- package/dist/{useShowHide-BhdrR1wG.js → useShowHide-CHm2uUep.js} +2 -2
- package/dist/{useShowHide-BhdrR1wG.js.map → useShowHide-CHm2uUep.js.map} +1 -1
- package/dist/utils/keys.d.mts +11 -1
- package/dist/utils/keys.d.ts +11 -1
- package/dist/{utils-BbYwYPyP.mjs → utils-CWvndqPg.mjs} +3 -3
- package/dist/{utils-BbYwYPyP.mjs.map → utils-CWvndqPg.mjs.map} +1 -1
- package/dist/{utils-ePxMJ7rd.js → utils-Dk9yAtbs.js} +3 -3
- package/dist/{utils-ePxMJ7rd.js.map → utils-Dk9yAtbs.js.map} +1 -1
- package/package.json +1 -1
- package/dist/BFormCheckbox-g7gtIrhy.js.map +0 -1
- package/dist/BFormCheckbox-xN7AQw4O.mjs.map +0 -1
- package/dist/BFormGroup-DZTiChgT.js.map +0 -1
- package/dist/BFormGroup-ayltvQts.mjs.map +0 -1
- package/dist/BFormRadio-DHx68AdL.mjs.map +0 -1
- package/dist/BFormRadio-DX-gM5Rc.js.map +0 -1
- package/dist/BFormSelect-CtcsnTlz.js.map +0 -1
- package/dist/BFormSelect-eS-C3M0J.mjs.map +0 -1
- package/dist/BFormValidFeedback-BhkEhSa0.js.map +0 -1
- package/dist/BFormValidFeedback-DWkakzVO.mjs.map +0 -1
- package/dist/useFormInput-CA4FYoV7.mjs.map +0 -1
- package/dist/useFormInput-D31FCDxr.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BFormSpinbutton-CPsVUIh9.mjs","names":[],"sources":["../src/components/BFormSpinbutton/BFormSpinbutton.vue","../src/components/BFormSpinbutton/BFormSpinbutton.vue"],"sourcesContent":["<template>\n <div\n ref=\"_element\"\n class=\"b-form-spinbutton form-control\"\n :class=\"computedClasses\"\n role=\"group\"\n :lang=\"computedLocale\"\n :tabindex=\"props.disabled ? undefined : '-1'\"\n :title=\"props.ariaLabel\"\n @click=\"focused = true\"\n >\n <!-- eslint-disable-next-line prettier/prettier -->\n <!-- prettier-ignore -->\n <slot :name=\"(buttons.top.slot.name as 'increment' | 'decrement')\" :has-focus=\"focused\">\n <button\n v-bind=\"buttons.top.button\"\n @mousedown=\"buttons.top.handler\"\n @touchstart=\"buttons.top.handler\"\n >\n <svg v-bind=\"buttons.top.svg\">\n <path v-bind=\"buttons.top.path\" />\n </svg>\n </button>\n </slot>\n <input\n v-if=\"props.name && !props.disabled\"\n key=\"hidden\"\n type=\"hidden\"\n :name=\"props.name\"\n :form=\"props.form\"\n :value=\"valueAsFixed\"\n />\n <output\n :id=\"computedId\"\n key=\"output\"\n class=\"flex-grow-1\"\n :class=\"computedSpinClasses\"\n :dir=\"(isRtl ?? false) ? 'rtl' : 'ltr'\"\n :tabindex=\"props.disabled ? undefined : '0'\"\n role=\"spinbutton\"\n aria-live=\"off\"\n :aria-label=\"props.ariaLabel || undefined\"\n :aria-invalid=\"\n props.state === false || (!modelValue !== null && props.required) ? true : undefined\n \"\n :aria-required=\"props.required ? true : undefined\"\n :aria-valuemin=\"computedMin\"\n :aria-valuemax=\"computedMax\"\n :aria-valuenow=\"modelValue !== null ? modelValue : undefined\"\n :aria-valuetext=\"modelValue !== null ? computedFormatter(modelValue) : undefined\"\n >\n <bdi>\n {{ (modelValue !== null ? computedFormatter(modelValue) : props.placeholder) || '' }}\n </bdi>\n </output>\n <!-- eslint-disable-next-line prettier/prettier -->\n <!-- prettier-ignore -->\n <slot :name=\"(buttons.bottom.slot.name as 'increment' | 'decrement')\" :has-focus=\"focused\">\n <button\n v-bind=\"buttons.bottom.button\"\n @mousedown=\"buttons.bottom.handler\"\n @touchstart=\"buttons.bottom.handler\"\n >\n <svg v-bind=\"buttons.bottom.svg\">\n <path v-bind=\"buttons.bottom.path\" />\n </svg>\n </button>\n </slot>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, onUnmounted, useTemplateRef} from 'vue'\nimport {\n CODE_DOWN,\n CODE_END,\n CODE_HOME,\n CODE_PAGEDOWN,\n CODE_PAGEUP,\n CODE_UP,\n} from '../../utils/constants'\nimport {onKeyStroke, useFocus, useToNumber} from '@vueuse/core'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport {useRtl} from '../../composables/useRtl'\nimport type {\n BFormSpinbuttonEmits,\n BFormSpinbuttonProps,\n BFormSpinbuttonSlots,\n ButtonType,\n} from '../../types'\nimport {getSafeDocument} from '../../utils/dom'\n\nconst KEY_CODES = [CODE_UP, CODE_DOWN, CODE_HOME, CODE_END, CODE_PAGEUP, CODE_PAGEDOWN]\n\nconst _props = withDefaults(defineProps<Omit<BFormSpinbuttonProps, 'modelValue'>>(), {\n ariaControls: undefined,\n ariaLabel: undefined,\n disabled: false,\n form: undefined,\n formatterFn: undefined,\n id: undefined,\n inline: false,\n labelDecrement: 'Decrement',\n labelIncrement: 'Increment',\n locale: undefined,\n max: defaultValues.max,\n min: defaultValues.min,\n name: undefined,\n placeholder: undefined,\n readonly: false,\n repeatDelay: defaultValues.repeatDelay,\n repeatInterval: defaultValues.repeatInterval,\n repeatStepMultiplier: defaultValues.repeatMultiplier,\n repeatThreshold: defaultValues.repeatThreshold,\n required: false,\n size: undefined,\n state: null,\n step: defaultValues.step,\n vertical: false,\n wrap: false,\n})\nconst props = useDefaults(_props, 'BFormSpinbutton')\nconst emit = defineEmits<BFormSpinbuttonEmits>()\ndefineSlots<BFormSpinbuttonSlots>()\n\nconst modelValue = defineModel<Exclude<BFormSpinbuttonProps['modelValue'], undefined>>({\n default: null,\n})\n\nconst element = useTemplateRef('_element')\n\nconst {focused} = useFocus(element)\n\nconst computedId = useId(() => props.id, 'spinbutton')\n\nconst computedClasses = computed(() => ({\n 'disabled': props.disabled,\n 'readonly': props.readonly,\n 'focus': focused.value,\n 'd-inline-flex': props.inline || props.vertical,\n 'd-flex': !props.inline && !props.vertical,\n 'align-items-stretch': !props.vertical,\n 'flex-column': props.vertical,\n [`form-control-${props.size}`]: props.size !== undefined,\n}))\n\nconst computedSpinClasses = computed(() => ({\n 'd-flex': props.vertical,\n 'align-self-center': !props.vertical,\n 'align-items-center': props.vertical,\n 'border-top': props.vertical,\n 'border-bottom': props.vertical,\n 'border-start': !props.vertical,\n 'border-end': !props.vertical,\n}))\n\n//non-reactive properties\nlet $_autoDelayTimer: ReturnType<typeof setTimeout> | undefined\nlet $_autoRepeatTimer: ReturnType<typeof setTimeout> | undefined\nlet $_keyIsDown = false\n\n// const computedInline = computed(() => props.inline && !props.vertical)\n\n// const computedReadonly = computed(() => props.readonly && !props.disabled)\n\nconst stepNumber = useToNumber(() => props.step)\nconst computedStep = computed(() =>\n Number.isNaN(stepNumber.value) ? defaultValues.step : stepNumber.value\n)\n\nconst minNumber = useToNumber(() => props.min)\nconst computedMin = computed(() =>\n Number.isNaN(minNumber.value) ? defaultValues.min : minNumber.value\n)\n\nconst maxNumber = useToNumber(() => props.max)\nconst computedMax = computed(() => {\n const step = computedStep.value\n const min = computedMin.value\n return Math.floor((maxNumber.value - min) / step) * step + min\n})\n\nconst repeatDelayNumber = useToNumber(() => props.repeatDelay, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedDelay = computed(() =>\n repeatDelayNumber.value > 0 ? repeatDelayNumber.value : defaultValues.repeatDelay\n)\n\nconst repeatIntervalNumber = useToNumber(() => props.repeatInterval, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedInterval = computed(() =>\n repeatIntervalNumber.value > 0 ? repeatIntervalNumber.value : defaultValues.repeatInterval\n)\n\nconst repeatThresholdNumber = useToNumber(() => props.repeatThreshold, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedThreshold = computed(() =>\n Math.max(\n Number.isNaN(repeatThresholdNumber.value)\n ? defaultValues.repeatThreshold\n : repeatThresholdNumber.value,\n 1\n )\n)\n\nconst repeatStepMultiplierNumber = useToNumber(() => props.repeatStepMultiplier, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedStepMultiplier = computed(() =>\n Math.max(\n Number.isNaN(repeatStepMultiplierNumber.value)\n ? defaultValues.repeatMultiplier\n : repeatStepMultiplierNumber.value,\n 1\n )\n)\n\nconst computedPrecision = computed(() => {\n const step = computedStep.value\n return Math.floor(step) === step ? 0 : (step.toString().split('.')[1] || '').length\n})\n\nconst computedMultiplier = computed(() => Math.pow(10, computedPrecision.value || 0))\n\nconst valueAsFixed = computed(() =>\n modelValue.value === null ? '' : modelValue.value.toFixed(computedPrecision.value)\n)\n\nconst {isRtl, locale: globalLocale} = useRtl()\n\nconst computedLocale = computed(() => {\n const loc = (props.locale ?? globalLocale?.value) || 'locale'\n const locales = [loc]\n const nf = new Intl.NumberFormat(locales)\n return nf.resolvedOptions().locale\n})\n\nconst defaultFormatter = () =>\n new Intl.NumberFormat(computedLocale.value, {\n style: 'decimal',\n useGrouping: false,\n minimumIntegerDigits: 1,\n minimumFractionDigits: computedPrecision.value,\n maximumFractionDigits: computedPrecision.value,\n notation: 'standard',\n }).format\n\nconst computedFormatter = computed(() => props.formatterFn ?? defaultFormatter())\n\nconst stepValue = (direction: number) => {\n // Sets a new incremented or decremented value, supporting optional wrapping\n // Direction is either +1 or -1 (or a multiple thereof)\n let {value} = modelValue\n if (!props.disabled && value !== null) {\n const step = computedStep.value * direction\n const min = computedMin.value\n const max = computedMax.value\n const multiplier = computedMultiplier.value\n const {wrap} = props\n // We ensure that the value steps like a native input\n value = Math.round((value - min) / step) * step + min + step\n // We ensure that precision is maintained (decimals)\n value = Math.round(value * multiplier) / multiplier\n // Handle if wrapping is enabled\n modelValue.value = value > max ? (wrap ? min : max) : value < min ? (wrap ? max : min) : value\n }\n}\n\nconst stepUp = (multiplier = 1) => {\n if (modelValue.value === null) {\n modelValue.value = computedMin.value\n return\n }\n stepValue(+1 * multiplier)\n}\n\nconst stepDown = (multiplier = 1) => {\n if (modelValue.value === null) {\n modelValue.value = props.wrap ? computedMax.value : computedMin.value\n return\n }\n stepValue(-1 * multiplier)\n}\n\nconst stopEvent = (event: Readonly<Event>) => {\n event.preventDefault()\n event.stopImmediatePropagation()\n}\n\nonKeyStroke(\n KEY_CODES,\n (event) => {\n const {code, altKey, ctrlKey, metaKey} = event\n\n if (props.disabled || props.readonly || altKey || ctrlKey || metaKey) return\n\n // https://w3c.github.io/aria-practices/#spinbutton\n stopEvent(event)\n if ($_keyIsDown) {\n // Keypress is already in progress\n return\n }\n\n resetTimers()\n if ([CODE_UP, CODE_DOWN].includes(code)) {\n // The following use the custom auto-repeat handling\n\n $_keyIsDown = true\n if (code === CODE_UP) {\n handleStepRepeat(event, stepUp)\n return\n }\n if (code === CODE_DOWN) {\n handleStepRepeat(event, stepDown)\n }\n return\n }\n // These use native OS key repeating\n if (code === CODE_PAGEUP) {\n stepUp(computedStepMultiplier.value)\n return\n }\n if (code === CODE_PAGEDOWN) {\n stepDown(computedStepMultiplier.value)\n return\n }\n if (code === CODE_HOME) {\n modelValue.value = computedMin.value\n return\n }\n if (code === CODE_END) {\n modelValue.value = computedMax.value\n }\n },\n {target: element, eventName: 'keydown'}\n)\n\nonKeyStroke(\n KEY_CODES,\n (event: Readonly<KeyboardEvent>) => {\n // Emit a change event when the keyup happens\n\n const {altKey, ctrlKey, metaKey} = event\n\n if (props.disabled || props.readonly || altKey || ctrlKey || metaKey) return\n\n stopEvent(event)\n resetTimers()\n $_keyIsDown = false\n emit('change', modelValue.value)\n },\n {target: element, eventName: 'keyup'}\n)\n\n// takes in a mount or Keyboard Event\nconst handleStepRepeat = (event: Readonly<Event>, stepper: (step: number) => void) => {\n const {type} = event || {}\n\n if (!props.disabled && !props.readonly) {\n if (isMouseEvent(event)) {\n // We only respond to left (main === 0) button clicks\n if (type === 'mousedown' && event.button) return\n }\n resetTimers()\n // Step the counter initially\n stepper(1)\n const threshold = computedThreshold.value\n const multiplier = computedStepMultiplier.value\n const delay = computedDelay.value\n const interval = computedInterval.value\n\n // Initiate the delay/repeat interval\n $_autoDelayTimer = setTimeout(() => {\n let count = 0\n $_autoRepeatTimer = setInterval(() => {\n // After N initial repeats, we increase the incrementing step amount\n // We do this to minimize screen reader announcements of the value\n // (values are announced every change, which can be chatty for SR users)\n // And to make it easer to select a value when the range is large\n stepper(count < threshold ? 1 : multiplier)\n count++\n }, interval)\n }, delay)\n }\n}\n\nconst isMouseEvent = (evt: Readonly<Event>): evt is MouseEvent =>\n evt.type === 'mouseup' || evt.type === 'mousedown'\n\nconst onMouseup: EventListener = (event: Readonly<Event>) => {\n // `<body>` listener, only enabled when mousedown starts\n\n if (isMouseEvent(event)) {\n if (event.type === 'mouseup' && event.button) {\n // Ignore non left button (main === 0) mouse button click\n return\n }\n }\n\n stopEvent(event)\n resetTimers()\n setMouseup('removeEventListener')\n // Trigger the change event\n emit('change', modelValue.value)\n}\n\nconst setMouseup = (operation: 'addEventListener' | 'removeEventListener') => {\n const doc = getSafeDocument()\n if (doc === null) return\n\n if (operation === 'addEventListener') {\n doc.body.addEventListener('mouseup', onMouseup)\n doc.body.addEventListener('touchend', onMouseup, {passive: false})\n } else {\n doc.body.removeEventListener('mouseup', onMouseup)\n doc.body.removeEventListener('touchend', onMouseup)\n }\n}\nconst resetTimers = () => {\n clearTimeout($_autoDelayTimer)\n clearInterval($_autoRepeatTimer)\n $_autoDelayTimer = undefined\n $_autoRepeatTimer = undefined\n}\n\nconst buttons = computed(() => {\n const incrementSvgAttrs = {\n svg: {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '16',\n height: '16',\n fill: 'currentColor',\n class: 'bi bi-plus',\n viewBox: '0 0 16 16',\n },\n path: {\n d: 'M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z',\n },\n } as const\n\n const decrementSvgAttrs = {\n svg: {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '16',\n height: '16',\n fill: 'currentColor',\n class: 'bi bi-dash',\n viewBox: '0 0 16 16',\n },\n path: {d: 'M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z'},\n } as const\n\n const sharedButtonAttrs = {\n 'class': [{'py-0': !props.vertical}, 'btn', 'btn-sm', 'border-0', 'rounded-0'],\n 'tabindex': '-1',\n 'type': 'button' as ButtonType,\n 'disabled': props.disabled || props.readonly,\n 'aria-disabled': props.disabled || props.readonly ? true : undefined,\n 'aria-controls': computedId.value,\n }\n\n const sharedSvgAttrs = {\n 'aria-hidden': true,\n 'scale': focused.value ? 1.5 : 1.25,\n }\n\n const handler = (event: Readonly<Event>, stepper: (multiplier?: number) => void) => {\n if (!props.disabled && !props.readonly) {\n stopEvent(event)\n setMouseup('addEventListener')\n // Since we `preventDefault()`, we must manually focus the button\n // Though it's likely captured from the element click focus\n focused.value = true\n handleStepRepeat(event, stepper)\n }\n }\n\n const incrementAttrs = {\n button: {\n ...sharedButtonAttrs,\n 'aria-label': props.labelIncrement || undefined,\n 'aria-keyshortcuts': 'ArrowUp',\n },\n svg: {\n ...sharedSvgAttrs,\n ...incrementSvgAttrs.svg,\n },\n path: {\n ...incrementSvgAttrs.path,\n },\n slot: {\n name: 'increment',\n },\n handler: (e: Event) => handler(e, stepUp),\n }\n\n const decrementAttrs = {\n button: {\n ...sharedButtonAttrs,\n 'aria-label': props.labelDecrement || undefined,\n 'aria-keyshortcuts': 'ArrowDown',\n },\n svg: {\n ...sharedSvgAttrs,\n ...decrementSvgAttrs.svg,\n },\n path: {\n ...decrementSvgAttrs.path,\n },\n slot: {\n name: 'decrement',\n },\n handler: (e: Readonly<Event>) => handler(e, stepDown),\n }\n\n return {\n top: {\n ...(props.vertical ? incrementAttrs : decrementAttrs),\n },\n bottom: {\n ...(!props.vertical ? incrementAttrs : decrementAttrs),\n },\n }\n})\n\nonUnmounted(() => {\n // Cleanup event listeners\n setMouseup('removeEventListener')\n})\n</script>\n\n<script lang=\"ts\">\nconst defaultValues = {\n min: 1,\n max: 100,\n step: 1,\n repeatDelay: 500,\n repeatInterval: 100,\n repeatThreshold: 10,\n repeatMultiplier: 4,\n} as const\n</script>\n","<template>\n <div\n ref=\"_element\"\n class=\"b-form-spinbutton form-control\"\n :class=\"computedClasses\"\n role=\"group\"\n :lang=\"computedLocale\"\n :tabindex=\"props.disabled ? undefined : '-1'\"\n :title=\"props.ariaLabel\"\n @click=\"focused = true\"\n >\n <!-- eslint-disable-next-line prettier/prettier -->\n <!-- prettier-ignore -->\n <slot :name=\"(buttons.top.slot.name as 'increment' | 'decrement')\" :has-focus=\"focused\">\n <button\n v-bind=\"buttons.top.button\"\n @mousedown=\"buttons.top.handler\"\n @touchstart=\"buttons.top.handler\"\n >\n <svg v-bind=\"buttons.top.svg\">\n <path v-bind=\"buttons.top.path\" />\n </svg>\n </button>\n </slot>\n <input\n v-if=\"props.name && !props.disabled\"\n key=\"hidden\"\n type=\"hidden\"\n :name=\"props.name\"\n :form=\"props.form\"\n :value=\"valueAsFixed\"\n />\n <output\n :id=\"computedId\"\n key=\"output\"\n class=\"flex-grow-1\"\n :class=\"computedSpinClasses\"\n :dir=\"(isRtl ?? false) ? 'rtl' : 'ltr'\"\n :tabindex=\"props.disabled ? undefined : '0'\"\n role=\"spinbutton\"\n aria-live=\"off\"\n :aria-label=\"props.ariaLabel || undefined\"\n :aria-invalid=\"\n props.state === false || (!modelValue !== null && props.required) ? true : undefined\n \"\n :aria-required=\"props.required ? true : undefined\"\n :aria-valuemin=\"computedMin\"\n :aria-valuemax=\"computedMax\"\n :aria-valuenow=\"modelValue !== null ? modelValue : undefined\"\n :aria-valuetext=\"modelValue !== null ? computedFormatter(modelValue) : undefined\"\n >\n <bdi>\n {{ (modelValue !== null ? computedFormatter(modelValue) : props.placeholder) || '' }}\n </bdi>\n </output>\n <!-- eslint-disable-next-line prettier/prettier -->\n <!-- prettier-ignore -->\n <slot :name=\"(buttons.bottom.slot.name as 'increment' | 'decrement')\" :has-focus=\"focused\">\n <button\n v-bind=\"buttons.bottom.button\"\n @mousedown=\"buttons.bottom.handler\"\n @touchstart=\"buttons.bottom.handler\"\n >\n <svg v-bind=\"buttons.bottom.svg\">\n <path v-bind=\"buttons.bottom.path\" />\n </svg>\n </button>\n </slot>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, onUnmounted, useTemplateRef} from 'vue'\nimport {\n CODE_DOWN,\n CODE_END,\n CODE_HOME,\n CODE_PAGEDOWN,\n CODE_PAGEUP,\n CODE_UP,\n} from '../../utils/constants'\nimport {onKeyStroke, useFocus, useToNumber} from '@vueuse/core'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport {useRtl} from '../../composables/useRtl'\nimport type {\n BFormSpinbuttonEmits,\n BFormSpinbuttonProps,\n BFormSpinbuttonSlots,\n ButtonType,\n} from '../../types'\nimport {getSafeDocument} from '../../utils/dom'\n\nconst KEY_CODES = [CODE_UP, CODE_DOWN, CODE_HOME, CODE_END, CODE_PAGEUP, CODE_PAGEDOWN]\n\nconst _props = withDefaults(defineProps<Omit<BFormSpinbuttonProps, 'modelValue'>>(), {\n ariaControls: undefined,\n ariaLabel: undefined,\n disabled: false,\n form: undefined,\n formatterFn: undefined,\n id: undefined,\n inline: false,\n labelDecrement: 'Decrement',\n labelIncrement: 'Increment',\n locale: undefined,\n max: defaultValues.max,\n min: defaultValues.min,\n name: undefined,\n placeholder: undefined,\n readonly: false,\n repeatDelay: defaultValues.repeatDelay,\n repeatInterval: defaultValues.repeatInterval,\n repeatStepMultiplier: defaultValues.repeatMultiplier,\n repeatThreshold: defaultValues.repeatThreshold,\n required: false,\n size: undefined,\n state: null,\n step: defaultValues.step,\n vertical: false,\n wrap: false,\n})\nconst props = useDefaults(_props, 'BFormSpinbutton')\nconst emit = defineEmits<BFormSpinbuttonEmits>()\ndefineSlots<BFormSpinbuttonSlots>()\n\nconst modelValue = defineModel<Exclude<BFormSpinbuttonProps['modelValue'], undefined>>({\n default: null,\n})\n\nconst element = useTemplateRef('_element')\n\nconst {focused} = useFocus(element)\n\nconst computedId = useId(() => props.id, 'spinbutton')\n\nconst computedClasses = computed(() => ({\n 'disabled': props.disabled,\n 'readonly': props.readonly,\n 'focus': focused.value,\n 'd-inline-flex': props.inline || props.vertical,\n 'd-flex': !props.inline && !props.vertical,\n 'align-items-stretch': !props.vertical,\n 'flex-column': props.vertical,\n [`form-control-${props.size}`]: props.size !== undefined,\n}))\n\nconst computedSpinClasses = computed(() => ({\n 'd-flex': props.vertical,\n 'align-self-center': !props.vertical,\n 'align-items-center': props.vertical,\n 'border-top': props.vertical,\n 'border-bottom': props.vertical,\n 'border-start': !props.vertical,\n 'border-end': !props.vertical,\n}))\n\n//non-reactive properties\nlet $_autoDelayTimer: ReturnType<typeof setTimeout> | undefined\nlet $_autoRepeatTimer: ReturnType<typeof setTimeout> | undefined\nlet $_keyIsDown = false\n\n// const computedInline = computed(() => props.inline && !props.vertical)\n\n// const computedReadonly = computed(() => props.readonly && !props.disabled)\n\nconst stepNumber = useToNumber(() => props.step)\nconst computedStep = computed(() =>\n Number.isNaN(stepNumber.value) ? defaultValues.step : stepNumber.value\n)\n\nconst minNumber = useToNumber(() => props.min)\nconst computedMin = computed(() =>\n Number.isNaN(minNumber.value) ? defaultValues.min : minNumber.value\n)\n\nconst maxNumber = useToNumber(() => props.max)\nconst computedMax = computed(() => {\n const step = computedStep.value\n const min = computedMin.value\n return Math.floor((maxNumber.value - min) / step) * step + min\n})\n\nconst repeatDelayNumber = useToNumber(() => props.repeatDelay, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedDelay = computed(() =>\n repeatDelayNumber.value > 0 ? repeatDelayNumber.value : defaultValues.repeatDelay\n)\n\nconst repeatIntervalNumber = useToNumber(() => props.repeatInterval, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedInterval = computed(() =>\n repeatIntervalNumber.value > 0 ? repeatIntervalNumber.value : defaultValues.repeatInterval\n)\n\nconst repeatThresholdNumber = useToNumber(() => props.repeatThreshold, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedThreshold = computed(() =>\n Math.max(\n Number.isNaN(repeatThresholdNumber.value)\n ? defaultValues.repeatThreshold\n : repeatThresholdNumber.value,\n 1\n )\n)\n\nconst repeatStepMultiplierNumber = useToNumber(() => props.repeatStepMultiplier, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedStepMultiplier = computed(() =>\n Math.max(\n Number.isNaN(repeatStepMultiplierNumber.value)\n ? defaultValues.repeatMultiplier\n : repeatStepMultiplierNumber.value,\n 1\n )\n)\n\nconst computedPrecision = computed(() => {\n const step = computedStep.value\n return Math.floor(step) === step ? 0 : (step.toString().split('.')[1] || '').length\n})\n\nconst computedMultiplier = computed(() => Math.pow(10, computedPrecision.value || 0))\n\nconst valueAsFixed = computed(() =>\n modelValue.value === null ? '' : modelValue.value.toFixed(computedPrecision.value)\n)\n\nconst {isRtl, locale: globalLocale} = useRtl()\n\nconst computedLocale = computed(() => {\n const loc = (props.locale ?? globalLocale?.value) || 'locale'\n const locales = [loc]\n const nf = new Intl.NumberFormat(locales)\n return nf.resolvedOptions().locale\n})\n\nconst defaultFormatter = () =>\n new Intl.NumberFormat(computedLocale.value, {\n style: 'decimal',\n useGrouping: false,\n minimumIntegerDigits: 1,\n minimumFractionDigits: computedPrecision.value,\n maximumFractionDigits: computedPrecision.value,\n notation: 'standard',\n }).format\n\nconst computedFormatter = computed(() => props.formatterFn ?? defaultFormatter())\n\nconst stepValue = (direction: number) => {\n // Sets a new incremented or decremented value, supporting optional wrapping\n // Direction is either +1 or -1 (or a multiple thereof)\n let {value} = modelValue\n if (!props.disabled && value !== null) {\n const step = computedStep.value * direction\n const min = computedMin.value\n const max = computedMax.value\n const multiplier = computedMultiplier.value\n const {wrap} = props\n // We ensure that the value steps like a native input\n value = Math.round((value - min) / step) * step + min + step\n // We ensure that precision is maintained (decimals)\n value = Math.round(value * multiplier) / multiplier\n // Handle if wrapping is enabled\n modelValue.value = value > max ? (wrap ? min : max) : value < min ? (wrap ? max : min) : value\n }\n}\n\nconst stepUp = (multiplier = 1) => {\n if (modelValue.value === null) {\n modelValue.value = computedMin.value\n return\n }\n stepValue(+1 * multiplier)\n}\n\nconst stepDown = (multiplier = 1) => {\n if (modelValue.value === null) {\n modelValue.value = props.wrap ? computedMax.value : computedMin.value\n return\n }\n stepValue(-1 * multiplier)\n}\n\nconst stopEvent = (event: Readonly<Event>) => {\n event.preventDefault()\n event.stopImmediatePropagation()\n}\n\nonKeyStroke(\n KEY_CODES,\n (event) => {\n const {code, altKey, ctrlKey, metaKey} = event\n\n if (props.disabled || props.readonly || altKey || ctrlKey || metaKey) return\n\n // https://w3c.github.io/aria-practices/#spinbutton\n stopEvent(event)\n if ($_keyIsDown) {\n // Keypress is already in progress\n return\n }\n\n resetTimers()\n if ([CODE_UP, CODE_DOWN].includes(code)) {\n // The following use the custom auto-repeat handling\n\n $_keyIsDown = true\n if (code === CODE_UP) {\n handleStepRepeat(event, stepUp)\n return\n }\n if (code === CODE_DOWN) {\n handleStepRepeat(event, stepDown)\n }\n return\n }\n // These use native OS key repeating\n if (code === CODE_PAGEUP) {\n stepUp(computedStepMultiplier.value)\n return\n }\n if (code === CODE_PAGEDOWN) {\n stepDown(computedStepMultiplier.value)\n return\n }\n if (code === CODE_HOME) {\n modelValue.value = computedMin.value\n return\n }\n if (code === CODE_END) {\n modelValue.value = computedMax.value\n }\n },\n {target: element, eventName: 'keydown'}\n)\n\nonKeyStroke(\n KEY_CODES,\n (event: Readonly<KeyboardEvent>) => {\n // Emit a change event when the keyup happens\n\n const {altKey, ctrlKey, metaKey} = event\n\n if (props.disabled || props.readonly || altKey || ctrlKey || metaKey) return\n\n stopEvent(event)\n resetTimers()\n $_keyIsDown = false\n emit('change', modelValue.value)\n },\n {target: element, eventName: 'keyup'}\n)\n\n// takes in a mount or Keyboard Event\nconst handleStepRepeat = (event: Readonly<Event>, stepper: (step: number) => void) => {\n const {type} = event || {}\n\n if (!props.disabled && !props.readonly) {\n if (isMouseEvent(event)) {\n // We only respond to left (main === 0) button clicks\n if (type === 'mousedown' && event.button) return\n }\n resetTimers()\n // Step the counter initially\n stepper(1)\n const threshold = computedThreshold.value\n const multiplier = computedStepMultiplier.value\n const delay = computedDelay.value\n const interval = computedInterval.value\n\n // Initiate the delay/repeat interval\n $_autoDelayTimer = setTimeout(() => {\n let count = 0\n $_autoRepeatTimer = setInterval(() => {\n // After N initial repeats, we increase the incrementing step amount\n // We do this to minimize screen reader announcements of the value\n // (values are announced every change, which can be chatty for SR users)\n // And to make it easer to select a value when the range is large\n stepper(count < threshold ? 1 : multiplier)\n count++\n }, interval)\n }, delay)\n }\n}\n\nconst isMouseEvent = (evt: Readonly<Event>): evt is MouseEvent =>\n evt.type === 'mouseup' || evt.type === 'mousedown'\n\nconst onMouseup: EventListener = (event: Readonly<Event>) => {\n // `<body>` listener, only enabled when mousedown starts\n\n if (isMouseEvent(event)) {\n if (event.type === 'mouseup' && event.button) {\n // Ignore non left button (main === 0) mouse button click\n return\n }\n }\n\n stopEvent(event)\n resetTimers()\n setMouseup('removeEventListener')\n // Trigger the change event\n emit('change', modelValue.value)\n}\n\nconst setMouseup = (operation: 'addEventListener' | 'removeEventListener') => {\n const doc = getSafeDocument()\n if (doc === null) return\n\n if (operation === 'addEventListener') {\n doc.body.addEventListener('mouseup', onMouseup)\n doc.body.addEventListener('touchend', onMouseup, {passive: false})\n } else {\n doc.body.removeEventListener('mouseup', onMouseup)\n doc.body.removeEventListener('touchend', onMouseup)\n }\n}\nconst resetTimers = () => {\n clearTimeout($_autoDelayTimer)\n clearInterval($_autoRepeatTimer)\n $_autoDelayTimer = undefined\n $_autoRepeatTimer = undefined\n}\n\nconst buttons = computed(() => {\n const incrementSvgAttrs = {\n svg: {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '16',\n height: '16',\n fill: 'currentColor',\n class: 'bi bi-plus',\n viewBox: '0 0 16 16',\n },\n path: {\n d: 'M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z',\n },\n } as const\n\n const decrementSvgAttrs = {\n svg: {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '16',\n height: '16',\n fill: 'currentColor',\n class: 'bi bi-dash',\n viewBox: '0 0 16 16',\n },\n path: {d: 'M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z'},\n } as const\n\n const sharedButtonAttrs = {\n 'class': [{'py-0': !props.vertical}, 'btn', 'btn-sm', 'border-0', 'rounded-0'],\n 'tabindex': '-1',\n 'type': 'button' as ButtonType,\n 'disabled': props.disabled || props.readonly,\n 'aria-disabled': props.disabled || props.readonly ? true : undefined,\n 'aria-controls': computedId.value,\n }\n\n const sharedSvgAttrs = {\n 'aria-hidden': true,\n 'scale': focused.value ? 1.5 : 1.25,\n }\n\n const handler = (event: Readonly<Event>, stepper: (multiplier?: number) => void) => {\n if (!props.disabled && !props.readonly) {\n stopEvent(event)\n setMouseup('addEventListener')\n // Since we `preventDefault()`, we must manually focus the button\n // Though it's likely captured from the element click focus\n focused.value = true\n handleStepRepeat(event, stepper)\n }\n }\n\n const incrementAttrs = {\n button: {\n ...sharedButtonAttrs,\n 'aria-label': props.labelIncrement || undefined,\n 'aria-keyshortcuts': 'ArrowUp',\n },\n svg: {\n ...sharedSvgAttrs,\n ...incrementSvgAttrs.svg,\n },\n path: {\n ...incrementSvgAttrs.path,\n },\n slot: {\n name: 'increment',\n },\n handler: (e: Event) => handler(e, stepUp),\n }\n\n const decrementAttrs = {\n button: {\n ...sharedButtonAttrs,\n 'aria-label': props.labelDecrement || undefined,\n 'aria-keyshortcuts': 'ArrowDown',\n },\n svg: {\n ...sharedSvgAttrs,\n ...decrementSvgAttrs.svg,\n },\n path: {\n ...decrementSvgAttrs.path,\n },\n slot: {\n name: 'decrement',\n },\n handler: (e: Readonly<Event>) => handler(e, stepDown),\n }\n\n return {\n top: {\n ...(props.vertical ? incrementAttrs : decrementAttrs),\n },\n bottom: {\n ...(!props.vertical ? incrementAttrs : decrementAttrs),\n },\n }\n})\n\nonUnmounted(() => {\n // Cleanup event listeners\n setMouseup('removeEventListener')\n})\n</script>\n\n<script lang=\"ts\">\nconst defaultValues = {\n min: 1,\n max: 100,\n step: 1,\n repeatDelay: 500,\n repeatInterval: 100,\n repeatThreshold: 10,\n repeatMultiplier: 4,\n} as const\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4hBA,IAAM,gBAAgB;CACpB,KAAK;CACL,KAAK;CACL,MAAM;CACN,aAAa;CACb,gBAAgB;CAChB,iBAAiB;CACjB,kBAAkB;CACnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAvcD,MAAM,YAAY;GAAC;GAAS;GAAW;;GAAqB;GAAa;GAAa;EA6BtF,MAAM,QAAQ,YA3BC,SA2BmB,kBAAiB;EACnD,MAAM,OAAO;EAGb,MAAM,aAAa,SAAmE,SAAA,aAErF;EAED,MAAM,UAAU,eAAe,WAAU;EAEzC,MAAM,EAAC,YAAW,SAAS,QAAO;EAElC,MAAM,aAAa,cAAY,MAAM,IAAI,aAAY;EAErD,MAAM,kBAAkB,gBAAgB;GACtC,YAAY,MAAM;GAClB,YAAY,MAAM;GAClB,SAAS,QAAQ;GACjB,iBAAiB,MAAM,UAAU,MAAM;GACvC,UAAU,CAAC,MAAM,UAAU,CAAC,MAAM;GAClC,uBAAuB,CAAC,MAAM;GAC9B,eAAe,MAAM;IACpB,gBAAgB,MAAM,SAAS,MAAM,SAAS,KAAA;GAChD,EAAC;EAEF,MAAM,sBAAsB,gBAAgB;GAC1C,UAAU,MAAM;GAChB,qBAAqB,CAAC,MAAM;GAC5B,sBAAsB,MAAM;GAC5B,cAAc,MAAM;GACpB,iBAAiB,MAAM;GACvB,gBAAgB,CAAC,MAAM;GACvB,cAAc,CAAC,MAAM;GACtB,EAAC;EAGF,IAAI;EACJ,IAAI;EACJ,IAAI,cAAc;EAMlB,MAAM,aAAa,kBAAkB,MAAM,KAAI;EAC/C,MAAM,eAAe,eACnB,OAAO,MAAM,WAAW,MAAM,GAAG,cAAc,OAAO,WAAW,MACnE;EAEA,MAAM,YAAY,kBAAkB,MAAM,IAAG;EAC7C,MAAM,cAAc,eAClB,OAAO,MAAM,UAAU,MAAM,GAAG,cAAc,MAAM,UAAU,MAChE;EAEA,MAAM,YAAY,kBAAkB,MAAM,IAAG;EAC7C,MAAM,cAAc,eAAe;GACjC,MAAM,OAAO,aAAa;GAC1B,MAAM,MAAM,YAAY;AACxB,UAAO,KAAK,OAAO,UAAU,QAAQ,OAAO,KAAK,GAAG,OAAO;IAC5D;EAED,MAAM,oBAAoB,kBAAkB,MAAM,aAAa;GAC7D,WAAW;GACX,QAAQ;GACT,CAAA;EACD,MAAM,gBAAgB,eACpB,kBAAkB,QAAQ,IAAI,kBAAkB,QAAQ,cAAc,YACxE;EAEA,MAAM,uBAAuB,kBAAkB,MAAM,gBAAgB;GACnE,WAAW;GACX,QAAQ;GACT,CAAA;EACD,MAAM,mBAAmB,eACvB,qBAAqB,QAAQ,IAAI,qBAAqB,QAAQ,cAAc,eAC9E;EAEA,MAAM,wBAAwB,kBAAkB,MAAM,iBAAiB;GACrE,WAAW;GACX,QAAQ;GACT,CAAA;EACD,MAAM,oBAAoB,eACxB,KAAK,IACH,OAAO,MAAM,sBAAsB,MAAK,GACpC,cAAc,kBACd,sBAAsB,OAC1B,EACF,CACF;EAEA,MAAM,6BAA6B,kBAAkB,MAAM,sBAAsB;GAC/E,WAAW;GACX,QAAQ;GACT,CAAA;EACD,MAAM,yBAAyB,eAC7B,KAAK,IACH,OAAO,MAAM,2BAA2B,MAAK,GACzC,cAAc,mBACd,2BAA2B,OAC/B,EACF,CACF;EAEA,MAAM,oBAAoB,eAAe;GACvC,MAAM,OAAO,aAAa;AAC1B,UAAO,KAAK,MAAM,KAAK,KAAK,OAAO,KAAK,KAAK,UAAU,CAAC,MAAM,IAAI,CAAC,MAAM,IAAI;IAC9E;EAED,MAAM,qBAAqB,eAAe,KAAK,IAAI,IAAI,kBAAkB,SAAS,EAAE,CAAA;EAEpF,MAAM,eAAe,eACnB,WAAW,UAAU,OAAO,KAAK,WAAW,MAAM,QAAQ,kBAAkB,MAAK,CACnF;EAEA,MAAM,EAAC,OAAO,QAAQ,iBAAgB,QAAO;EAE7C,MAAM,iBAAiB,eAAe;GAEpC,MAAM,UAAU,EADH,MAAM,UAAU,cAAc,UAAU,SACjC;AAEpB,UADW,IAAI,KAAK,aAAa,QAAO,CAC9B,iBAAiB,CAAC;IAC7B;EAED,MAAM,yBACJ,IAAI,KAAK,aAAa,eAAe,OAAO;GAC1C,OAAO;GACP,aAAa;GACb,sBAAsB;GACtB,uBAAuB,kBAAkB;GACzC,uBAAuB,kBAAkB;GACzC,UAAU;GACX,CAAC,CAAC;EAEL,MAAM,oBAAoB,eAAe,MAAM,eAAe,kBAAkB,CAAA;EAEhF,MAAM,aAAa,cAAsB;GAGvC,IAAI,EAAC,UAAS;AACd,OAAI,CAAC,MAAM,YAAY,UAAU,MAAM;IACrC,MAAM,OAAO,aAAa,QAAQ;IAClC,MAAM,MAAM,YAAY;IACxB,MAAM,MAAM,YAAY;IACxB,MAAM,aAAa,mBAAmB;IACtC,MAAM,EAAC,SAAQ;AAEf,YAAQ,KAAK,OAAO,QAAQ,OAAO,KAAK,GAAG,OAAO,MAAM;AAExD,YAAQ,KAAK,MAAM,QAAQ,WAAW,GAAG;AAEzC,eAAW,QAAQ,QAAQ,MAAO,OAAO,MAAM,MAAO,QAAQ,MAAO,OAAO,MAAM,MAAO;;;EAI7F,MAAM,UAAU,aAAa,MAAM;AACjC,OAAI,WAAW,UAAU,MAAM;AAC7B,eAAW,QAAQ,YAAY;AAC/B;;AAEF,aAAU,IAAK,WAAU;;EAG3B,MAAM,YAAY,aAAa,MAAM;AACnC,OAAI,WAAW,UAAU,MAAM;AAC7B,eAAW,QAAQ,MAAM,OAAO,YAAY,QAAQ,YAAY;AAChE;;AAEF,aAAU,KAAK,WAAU;;EAG3B,MAAM,aAAa,UAA2B;AAC5C,SAAM,gBAAe;AACrB,SAAM,0BAAyB;;AAGjC,cACE,YACC,UAAU;GACT,MAAM,EAAC,MAAM,QAAQ,SAAS,YAAW;AAEzC,OAAI,MAAM,YAAY,MAAM,YAAY,UAAU,WAAW,QAAS;AAGtE,aAAU,MAAK;AACf,OAAI,YAEF;AAGF,gBAAY;AACZ,OAAI,CAAA,WAAA,YAAoB,CAAC,SAAS,KAAK,EAAE;AAGvC,kBAAc;AACd,QAAI,SAAA,WAAkB;AACpB,sBAAiB,OAAO,OAAM;AAC9B;;AAEF,QAAI,SAAA,YACF,kBAAiB,OAAO,SAAQ;AAElC;;AAGF,OAAI,SAAA,UAAsB;AACxB,WAAO,uBAAuB,MAAK;AACnC;;AAEF,OAAI,SAAA,YAAwB;AAC1B,aAAS,uBAAuB,MAAK;AACrC;;AAEF,OAAI,SAAA,QAAoB;AACtB,eAAW,QAAQ,YAAY;AAC/B;;AAEF,OAAI,SAAA,MACF,YAAW,QAAQ,YAAY;KAGnC;GAAC,QAAQ;GAAS,WAAW;GAAS,CACxC;AAEA,cACE,YACC,UAAmC;GAGlC,MAAM,EAAC,QAAQ,SAAS,YAAW;AAEnC,OAAI,MAAM,YAAY,MAAM,YAAY,UAAU,WAAW,QAAS;AAEtE,aAAU,MAAK;AACf,gBAAY;AACZ,iBAAc;AACd,QAAK,UAAU,WAAW,MAAK;KAEjC;GAAC,QAAQ;GAAS,WAAW;GAAO,CACtC;EAGA,MAAM,oBAAoB,OAAwB,YAAoC;GACpF,MAAM,EAAC,SAAQ,SAAS,EAAC;AAEzB,OAAI,CAAC,MAAM,YAAY,CAAC,MAAM,UAAU;AACtC,QAAI,aAAa,MAAM;SAEjB,SAAS,eAAe,MAAM,OAAQ;;AAE5C,iBAAY;AAEZ,YAAQ,EAAC;IACT,MAAM,YAAY,kBAAkB;IACpC,MAAM,aAAa,uBAAuB;IAC1C,MAAM,QAAQ,cAAc;IAC5B,MAAM,WAAW,iBAAiB;AAGlC,uBAAmB,iBAAiB;KAClC,IAAI,QAAQ;AACZ,yBAAoB,kBAAkB;AAKpC,cAAQ,QAAQ,YAAY,IAAI,WAAU;AAC1C;QACC,SAAQ;OACV,MAAK;;;EAIZ,MAAM,gBAAgB,QACpB,IAAI,SAAS,aAAa,IAAI,SAAS;EAEzC,MAAM,aAA4B,UAA2B;AAG3D,OAAI,aAAa,MAAM;QACjB,MAAM,SAAS,aAAa,MAAM,OAEpC;;AAIJ,aAAU,MAAK;AACf,gBAAY;AACZ,cAAW,sBAAqB;AAEhC,QAAK,UAAU,WAAW,MAAK;;EAGjC,MAAM,cAAc,cAA0D;GAC5E,MAAM,MAAM,iBAAgB;AAC5B,OAAI,QAAQ,KAAM;AAElB,OAAI,cAAc,oBAAoB;AACpC,QAAI,KAAK,iBAAiB,WAAW,UAAS;AAC9C,QAAI,KAAK,iBAAiB,YAAY,WAAW,EAAC,SAAS,OAAM,CAAA;UAC5D;AACL,QAAI,KAAK,oBAAoB,WAAW,UAAS;AACjD,QAAI,KAAK,oBAAoB,YAAY,UAAS;;;EAGtD,MAAM,oBAAoB;AACxB,gBAAa,iBAAgB;AAC7B,iBAAc,kBAAiB;AAC/B,sBAAmB,KAAA;AACnB,uBAAoB,KAAA;;EAGtB,MAAM,UAAU,eAAe;GAC7B,MAAM,oBAAoB;IACxB,KAAK;KACH,OAAO;KACP,OAAO;KACP,QAAQ;KACR,MAAM;KACN,OAAO;KACP,SAAS;KACV;IACD,MAAM,EACJ,GAAG,yGAAA;IAEN;GAED,MAAM,oBAAoB;IACxB,KAAK;KACH,OAAO;KACP,OAAO;KACP,QAAQ;KACR,MAAM;KACN,OAAO;KACP,SAAS;KACV;IACD,MAAM,EAAC,GAAG,6DAAA;IACX;GAED,MAAM,oBAAoB;IACxB,SAAS;KAAC,EAAC,QAAQ,CAAC,MAAM,UAAS;KAAE;KAAO;KAAU;KAAY;KAAY;IAC9E,YAAY;IACZ,QAAQ;IACR,YAAY,MAAM,YAAY,MAAM;IACpC,iBAAiB,MAAM,YAAY,MAAM,WAAW,OAAO,KAAA;IAC3D,iBAAiB,WAAW;IAC9B;GAEA,MAAM,iBAAiB;IACrB,eAAe;IACf,SAAS,QAAQ,QAAQ,MAAM;IACjC;GAEA,MAAM,WAAW,OAAwB,YAA2C;AAClF,QAAI,CAAC,MAAM,YAAY,CAAC,MAAM,UAAU;AACtC,eAAU,MAAK;AACf,gBAAW,mBAAkB;AAG7B,aAAQ,QAAQ;AAChB,sBAAiB,OAAO,QAAO;;;GAInC,MAAM,iBAAiB;IACrB,QAAQ;KACN,GAAG;KACH,cAAc,MAAM,kBAAkB,KAAA;KACtC,qBAAqB;KACtB;IACD,KAAK;KACH,GAAG;KACH,GAAG,kBAAkB;KACtB;IACD,MAAM,EACJ,GAAG,kBAAkB,MACtB;IACD,MAAM,EACJ,MAAM,aACP;IACD,UAAU,MAAa,QAAQ,GAAG,OAAA;IACpC;GAEA,MAAM,iBAAiB;IACrB,QAAQ;KACN,GAAG;KACH,cAAc,MAAM,kBAAkB,KAAA;KACtC,qBAAqB;KACtB;IACD,KAAK;KACH,GAAG;KACH,GAAG,kBAAkB;KACtB;IACD,MAAM,EACJ,GAAG,kBAAkB,MACtB;IACD,MAAM,EACJ,MAAM,aACP;IACD,UAAU,MAAuB,QAAQ,GAAG,SAAA;IAC9C;AAEA,UAAO;IACL,KAAK,EACH,GAAI,MAAM,WAAW,iBAAiB,gBACvC;IACD,QAAQ,EACN,GAAI,CAAC,MAAM,WAAW,iBAAiB,gBAAA;IAE3C;IACD;AAED,oBAAkB;AAEhB,cAAW,sBAAqB;IACjC;;uBAvhBC,mBAmEM,OAAA;IAlEJ,KAAI;IACJ,OAAK,eAAA,CAAC,kCACE,gBAAA,MAAe,CAAA;IACvB,MAAK;IACJ,MAAM,eAAA;IACN,UAAU,MAAA,MAAK,CAAC,WAAW,KAAA,IAAS;IACpC,OAAO,MAAA,MAAK,CAAC;IACb,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,QAAA,QAAO;;IAIf,WAUO,KAAA,QAVO,QAAA,MAAQ,IAAI,KAAK,MAAI,EAAiC,UAAW,MAAA,QAAO,EAAA,QAU/E,CATL,mBAQS,UART,WACU,QAOD,MAPS,IAAI,QAAM;KACzB,aAAS,OAAA,OAAA,OAAA,MAAA,GAAA,SAAE,QAAA,MAAQ,IAAI,WAAZ,QAAA,MAAQ,IAAI,QAAO,GAAA,KAAA;KAC9B,cAAU,OAAA,OAAA,OAAA,MAAA,GAAA,SAAE,QAAA,MAAQ,IAAI,WAAZ,QAAA,MAAQ,IAAI,QAAO,GAAA,KAAA;uBAEhC,mBAEM,OAAA,eAAA,mBAFO,QAAA,MAAQ,IAAI,IAAG,CAAA,EAAA,CAC1B,mBAAkC,QAAA,eAAA,mBAApB,QAAA,MAAQ,IAAI,KAAI,CAAA,EAAA,MAAA,GAAA,CAAA,EAAA,GAAA,EAAA,EAAA,GAAA,CAAA,CAAA;IAK5B,MAAA,MAAK,CAAC,QAAI,CAAK,MAAA,MAAK,CAAC,YAAA,WAAA,EAD7B,mBAOE,SAAA;KALA,KAAI;KACJ,MAAK;KACJ,MAAM,MAAA,MAAK,CAAC;KACZ,MAAM,MAAA,MAAK,CAAC;KACZ,OAAO,aAAA;;IAEV,mBAsBS,UAAA;KArBN,IAAI,MAAA,WAAU;KACf,KAAI;KACJ,OAAK,eAAA,CAAC,eACE,oBAAA,MAAmB,CAAA;KAC1B,KAAM,MAAA,MAAK,IAAA,QAAA,QAAA;KACX,UAAU,MAAA,MAAK,CAAC,WAAW,KAAA,IAAS;KACrC,MAAK;KACL,aAAU;KACT,cAAY,MAAA,MAAK,CAAC,aAAa,KAAA;KAC/B,gBAAuB,MAAA,MAAK,CAAC,UAAK,SAAA,CAAgB,WAAA,UAAU,QAAa,MAAA,MAAK,CAAC,WAAQ,OAAW,KAAA;KAGlG,iBAAe,MAAA,MAAK,CAAC,WAAQ,OAAU,KAAA;KACvC,iBAAe,YAAA;KACf,iBAAe,YAAA;KACf,iBAAe,WAAA,UAAU,OAAY,WAAA,QAAa,KAAA;KAClD,kBAAgB,WAAA,UAAU,OAAY,kBAAA,MAAkB,WAAA,MAAU,GAAI,KAAA;QAEvE,mBAEM,OAAA,MAAA,iBADA,WAAA,UAAU,OAAY,kBAAA,MAAkB,WAAA,MAAU,GAAI,MAAA,MAAK,CAAC,gBAAW,GAAA,EAAA,EAAA,CAAA,EAAA,IAAA,WAAA;IAK/E,WAUO,KAAA,QAVO,QAAA,MAAQ,OAAO,KAAK,MAAI,EAAiC,UAAW,MAAA,QAAO,EAAA,QAUlF,CATL,mBAQS,UART,WACU,QAOD,MAPS,OAAO,QAAM;KAC5B,aAAS,OAAA,OAAA,OAAA,MAAA,GAAA,SAAE,QAAA,MAAQ,OAAO,WAAf,QAAA,MAAQ,OAAO,QAAO,GAAA,KAAA;KACjC,cAAU,OAAA,OAAA,OAAA,MAAA,GAAA,SAAE,QAAA,MAAQ,OAAO,WAAf,QAAA,MAAQ,OAAO,QAAO,GAAA,KAAA;uBAEnC,mBAEM,OAAA,eAAA,mBAFO,QAAA,MAAQ,OAAO,IAAG,CAAA,EAAA,CAC7B,mBAAqC,QAAA,eAAA,mBAAvB,QAAA,MAAQ,OAAO,KAAI,CAAA,EAAA,MAAA,GAAA,CAAA,EAAA,GAAA,EAAA,EAAA,GAAA,CAAA,CAAA"}
|
|
1
|
+
{"version":3,"file":"BFormSpinbutton-6qkTBF_4.mjs","names":[],"sources":["../src/components/BFormSpinbutton/BFormSpinbutton.vue","../src/components/BFormSpinbutton/BFormSpinbutton.vue"],"sourcesContent":["<template>\n <div\n ref=\"_element\"\n class=\"b-form-spinbutton form-control\"\n :class=\"computedClasses\"\n role=\"group\"\n :lang=\"computedLocale\"\n :tabindex=\"props.disabled ? undefined : '-1'\"\n :title=\"props.ariaLabel\"\n @click=\"focused = true\"\n >\n <!-- eslint-disable-next-line prettier/prettier -->\n <!-- prettier-ignore -->\n <slot :name=\"(buttons.top.slot.name as 'increment' | 'decrement')\" :has-focus=\"focused\">\n <button\n v-bind=\"buttons.top.button\"\n @mousedown=\"buttons.top.handler\"\n @touchstart=\"buttons.top.handler\"\n >\n <svg v-bind=\"buttons.top.svg\">\n <path v-bind=\"buttons.top.path\" />\n </svg>\n </button>\n </slot>\n <input\n v-if=\"props.name && !props.disabled\"\n key=\"hidden\"\n type=\"hidden\"\n :name=\"props.name\"\n :form=\"props.form\"\n :value=\"valueAsFixed\"\n />\n <output\n :id=\"computedId\"\n key=\"output\"\n class=\"flex-grow-1\"\n :class=\"computedSpinClasses\"\n :dir=\"(isRtl ?? false) ? 'rtl' : 'ltr'\"\n :tabindex=\"props.disabled ? undefined : '0'\"\n role=\"spinbutton\"\n aria-live=\"off\"\n :aria-label=\"props.ariaLabel || undefined\"\n :aria-invalid=\"\n props.state === false || (!modelValue !== null && props.required) ? true : undefined\n \"\n :aria-required=\"props.required ? true : undefined\"\n :aria-valuemin=\"computedMin\"\n :aria-valuemax=\"computedMax\"\n :aria-valuenow=\"modelValue !== null ? modelValue : undefined\"\n :aria-valuetext=\"modelValue !== null ? computedFormatter(modelValue) : undefined\"\n >\n <bdi>\n {{ (modelValue !== null ? computedFormatter(modelValue) : props.placeholder) || '' }}\n </bdi>\n </output>\n <!-- eslint-disable-next-line prettier/prettier -->\n <!-- prettier-ignore -->\n <slot :name=\"(buttons.bottom.slot.name as 'increment' | 'decrement')\" :has-focus=\"focused\">\n <button\n v-bind=\"buttons.bottom.button\"\n @mousedown=\"buttons.bottom.handler\"\n @touchstart=\"buttons.bottom.handler\"\n >\n <svg v-bind=\"buttons.bottom.svg\">\n <path v-bind=\"buttons.bottom.path\" />\n </svg>\n </button>\n </slot>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, onUnmounted, useTemplateRef} from 'vue'\nimport {\n CODE_DOWN,\n CODE_END,\n CODE_HOME,\n CODE_PAGEDOWN,\n CODE_PAGEUP,\n CODE_UP,\n} from '../../utils/constants'\nimport {onKeyStroke, useFocus, useToNumber} from '@vueuse/core'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport {useRtl} from '../../composables/useRtl'\nimport type {\n BFormSpinbuttonEmits,\n BFormSpinbuttonProps,\n BFormSpinbuttonSlots,\n ButtonType,\n} from '../../types'\nimport {getSafeDocument} from '../../utils/dom'\n\nconst KEY_CODES = [CODE_UP, CODE_DOWN, CODE_HOME, CODE_END, CODE_PAGEUP, CODE_PAGEDOWN]\n\nconst _props = withDefaults(defineProps<Omit<BFormSpinbuttonProps, 'modelValue'>>(), {\n ariaControls: undefined,\n ariaLabel: undefined,\n disabled: false,\n form: undefined,\n formatterFn: undefined,\n id: undefined,\n inline: false,\n labelDecrement: 'Decrement',\n labelIncrement: 'Increment',\n locale: undefined,\n max: defaultValues.max,\n min: defaultValues.min,\n name: undefined,\n placeholder: undefined,\n readonly: false,\n repeatDelay: defaultValues.repeatDelay,\n repeatInterval: defaultValues.repeatInterval,\n repeatStepMultiplier: defaultValues.repeatMultiplier,\n repeatThreshold: defaultValues.repeatThreshold,\n required: false,\n size: undefined,\n state: null,\n step: defaultValues.step,\n vertical: false,\n wrap: false,\n})\nconst props = useDefaults(_props, 'BFormSpinbutton')\nconst emit = defineEmits<BFormSpinbuttonEmits>()\ndefineSlots<BFormSpinbuttonSlots>()\n\nconst modelValue = defineModel<Exclude<BFormSpinbuttonProps['modelValue'], undefined>>({\n default: null,\n})\n\nconst element = useTemplateRef('_element')\n\nconst {focused} = useFocus(element)\n\nconst computedId = useId(() => props.id, 'spinbutton')\n\nconst computedClasses = computed(() => ({\n 'disabled': props.disabled,\n 'readonly': props.readonly,\n 'focus': focused.value,\n 'd-inline-flex': props.inline || props.vertical,\n 'd-flex': !props.inline && !props.vertical,\n 'align-items-stretch': !props.vertical,\n 'flex-column': props.vertical,\n [`form-control-${props.size}`]: props.size !== undefined,\n}))\n\nconst computedSpinClasses = computed(() => ({\n 'd-flex': props.vertical,\n 'align-self-center': !props.vertical,\n 'align-items-center': props.vertical,\n 'border-top': props.vertical,\n 'border-bottom': props.vertical,\n 'border-start': !props.vertical,\n 'border-end': !props.vertical,\n}))\n\n//non-reactive properties\nlet $_autoDelayTimer: ReturnType<typeof setTimeout> | undefined\nlet $_autoRepeatTimer: ReturnType<typeof setTimeout> | undefined\nlet $_keyIsDown = false\n\n// const computedInline = computed(() => props.inline && !props.vertical)\n\n// const computedReadonly = computed(() => props.readonly && !props.disabled)\n\nconst stepNumber = useToNumber(() => props.step)\nconst computedStep = computed(() =>\n Number.isNaN(stepNumber.value) ? defaultValues.step : stepNumber.value\n)\n\nconst minNumber = useToNumber(() => props.min)\nconst computedMin = computed(() =>\n Number.isNaN(minNumber.value) ? defaultValues.min : minNumber.value\n)\n\nconst maxNumber = useToNumber(() => props.max)\nconst computedMax = computed(() => {\n const step = computedStep.value\n const min = computedMin.value\n return Math.floor((maxNumber.value - min) / step) * step + min\n})\n\nconst repeatDelayNumber = useToNumber(() => props.repeatDelay, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedDelay = computed(() =>\n repeatDelayNumber.value > 0 ? repeatDelayNumber.value : defaultValues.repeatDelay\n)\n\nconst repeatIntervalNumber = useToNumber(() => props.repeatInterval, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedInterval = computed(() =>\n repeatIntervalNumber.value > 0 ? repeatIntervalNumber.value : defaultValues.repeatInterval\n)\n\nconst repeatThresholdNumber = useToNumber(() => props.repeatThreshold, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedThreshold = computed(() =>\n Math.max(\n Number.isNaN(repeatThresholdNumber.value)\n ? defaultValues.repeatThreshold\n : repeatThresholdNumber.value,\n 1\n )\n)\n\nconst repeatStepMultiplierNumber = useToNumber(() => props.repeatStepMultiplier, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedStepMultiplier = computed(() =>\n Math.max(\n Number.isNaN(repeatStepMultiplierNumber.value)\n ? defaultValues.repeatMultiplier\n : repeatStepMultiplierNumber.value,\n 1\n )\n)\n\nconst computedPrecision = computed(() => {\n const step = computedStep.value\n return Math.floor(step) === step ? 0 : (step.toString().split('.')[1] || '').length\n})\n\nconst computedMultiplier = computed(() => Math.pow(10, computedPrecision.value || 0))\n\nconst valueAsFixed = computed(() =>\n modelValue.value === null ? '' : modelValue.value.toFixed(computedPrecision.value)\n)\n\nconst {isRtl, locale: globalLocale} = useRtl()\n\nconst computedLocale = computed(() => {\n const loc = (props.locale ?? globalLocale?.value) || 'locale'\n const locales = [loc]\n const nf = new Intl.NumberFormat(locales)\n return nf.resolvedOptions().locale\n})\n\nconst defaultFormatter = () =>\n new Intl.NumberFormat(computedLocale.value, {\n style: 'decimal',\n useGrouping: false,\n minimumIntegerDigits: 1,\n minimumFractionDigits: computedPrecision.value,\n maximumFractionDigits: computedPrecision.value,\n notation: 'standard',\n }).format\n\nconst computedFormatter = computed(() => props.formatterFn ?? defaultFormatter())\n\nconst stepValue = (direction: number) => {\n // Sets a new incremented or decremented value, supporting optional wrapping\n // Direction is either +1 or -1 (or a multiple thereof)\n let {value} = modelValue\n if (!props.disabled && value !== null) {\n const step = computedStep.value * direction\n const min = computedMin.value\n const max = computedMax.value\n const multiplier = computedMultiplier.value\n const {wrap} = props\n // We ensure that the value steps like a native input\n value = Math.round((value - min) / step) * step + min + step\n // We ensure that precision is maintained (decimals)\n value = Math.round(value * multiplier) / multiplier\n // Handle if wrapping is enabled\n modelValue.value = value > max ? (wrap ? min : max) : value < min ? (wrap ? max : min) : value\n }\n}\n\nconst stepUp = (multiplier = 1) => {\n if (modelValue.value === null) {\n modelValue.value = computedMin.value\n return\n }\n stepValue(+1 * multiplier)\n}\n\nconst stepDown = (multiplier = 1) => {\n if (modelValue.value === null) {\n modelValue.value = props.wrap ? computedMax.value : computedMin.value\n return\n }\n stepValue(-1 * multiplier)\n}\n\nconst stopEvent = (event: Readonly<Event>) => {\n event.preventDefault()\n event.stopImmediatePropagation()\n}\n\nonKeyStroke(\n KEY_CODES,\n (event) => {\n const {code, altKey, ctrlKey, metaKey} = event\n\n if (props.disabled || props.readonly || altKey || ctrlKey || metaKey) return\n\n // https://w3c.github.io/aria-practices/#spinbutton\n stopEvent(event)\n if ($_keyIsDown) {\n // Keypress is already in progress\n return\n }\n\n resetTimers()\n if ([CODE_UP, CODE_DOWN].includes(code)) {\n // The following use the custom auto-repeat handling\n\n $_keyIsDown = true\n if (code === CODE_UP) {\n handleStepRepeat(event, stepUp)\n return\n }\n if (code === CODE_DOWN) {\n handleStepRepeat(event, stepDown)\n }\n return\n }\n // These use native OS key repeating\n if (code === CODE_PAGEUP) {\n stepUp(computedStepMultiplier.value)\n return\n }\n if (code === CODE_PAGEDOWN) {\n stepDown(computedStepMultiplier.value)\n return\n }\n if (code === CODE_HOME) {\n modelValue.value = computedMin.value\n return\n }\n if (code === CODE_END) {\n modelValue.value = computedMax.value\n }\n },\n {target: element, eventName: 'keydown'}\n)\n\nonKeyStroke(\n KEY_CODES,\n (event: Readonly<KeyboardEvent>) => {\n // Emit a change event when the keyup happens\n\n const {altKey, ctrlKey, metaKey} = event\n\n if (props.disabled || props.readonly || altKey || ctrlKey || metaKey) return\n\n stopEvent(event)\n resetTimers()\n $_keyIsDown = false\n emit('change', modelValue.value)\n },\n {target: element, eventName: 'keyup'}\n)\n\n// takes in a mount or Keyboard Event\nconst handleStepRepeat = (event: Readonly<Event>, stepper: (step: number) => void) => {\n const {type} = event || {}\n\n if (!props.disabled && !props.readonly) {\n if (isMouseEvent(event)) {\n // We only respond to left (main === 0) button clicks\n if (type === 'mousedown' && event.button) return\n }\n resetTimers()\n // Step the counter initially\n stepper(1)\n const threshold = computedThreshold.value\n const multiplier = computedStepMultiplier.value\n const delay = computedDelay.value\n const interval = computedInterval.value\n\n // Initiate the delay/repeat interval\n $_autoDelayTimer = setTimeout(() => {\n let count = 0\n $_autoRepeatTimer = setInterval(() => {\n // After N initial repeats, we increase the incrementing step amount\n // We do this to minimize screen reader announcements of the value\n // (values are announced every change, which can be chatty for SR users)\n // And to make it easer to select a value when the range is large\n stepper(count < threshold ? 1 : multiplier)\n count++\n }, interval)\n }, delay)\n }\n}\n\nconst isMouseEvent = (evt: Readonly<Event>): evt is MouseEvent =>\n evt.type === 'mouseup' || evt.type === 'mousedown'\n\nconst onMouseup: EventListener = (event: Readonly<Event>) => {\n // `<body>` listener, only enabled when mousedown starts\n\n if (isMouseEvent(event)) {\n if (event.type === 'mouseup' && event.button) {\n // Ignore non left button (main === 0) mouse button click\n return\n }\n }\n\n stopEvent(event)\n resetTimers()\n setMouseup('removeEventListener')\n // Trigger the change event\n emit('change', modelValue.value)\n}\n\nconst setMouseup = (operation: 'addEventListener' | 'removeEventListener') => {\n const doc = getSafeDocument()\n if (doc === null) return\n\n if (operation === 'addEventListener') {\n doc.body.addEventListener('mouseup', onMouseup)\n doc.body.addEventListener('touchend', onMouseup, {passive: false})\n } else {\n doc.body.removeEventListener('mouseup', onMouseup)\n doc.body.removeEventListener('touchend', onMouseup)\n }\n}\nconst resetTimers = () => {\n clearTimeout($_autoDelayTimer)\n clearInterval($_autoRepeatTimer)\n $_autoDelayTimer = undefined\n $_autoRepeatTimer = undefined\n}\n\nconst buttons = computed(() => {\n const incrementSvgAttrs = {\n svg: {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '16',\n height: '16',\n fill: 'currentColor',\n class: 'bi bi-plus',\n viewBox: '0 0 16 16',\n },\n path: {\n d: 'M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z',\n },\n } as const\n\n const decrementSvgAttrs = {\n svg: {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '16',\n height: '16',\n fill: 'currentColor',\n class: 'bi bi-dash',\n viewBox: '0 0 16 16',\n },\n path: {d: 'M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z'},\n } as const\n\n const sharedButtonAttrs = {\n 'class': [{'py-0': !props.vertical}, 'btn', 'btn-sm', 'border-0', 'rounded-0'],\n 'tabindex': '-1',\n 'type': 'button' as ButtonType,\n 'disabled': props.disabled || props.readonly,\n 'aria-disabled': props.disabled || props.readonly ? true : undefined,\n 'aria-controls': computedId.value,\n }\n\n const sharedSvgAttrs = {\n 'aria-hidden': true,\n 'scale': focused.value ? 1.5 : 1.25,\n }\n\n const handler = (event: Readonly<Event>, stepper: (multiplier?: number) => void) => {\n if (!props.disabled && !props.readonly) {\n stopEvent(event)\n setMouseup('addEventListener')\n // Since we `preventDefault()`, we must manually focus the button\n // Though it's likely captured from the element click focus\n focused.value = true\n handleStepRepeat(event, stepper)\n }\n }\n\n const incrementAttrs = {\n button: {\n ...sharedButtonAttrs,\n 'aria-label': props.labelIncrement || undefined,\n 'aria-keyshortcuts': 'ArrowUp',\n },\n svg: {\n ...sharedSvgAttrs,\n ...incrementSvgAttrs.svg,\n },\n path: {\n ...incrementSvgAttrs.path,\n },\n slot: {\n name: 'increment',\n },\n handler: (e: Event) => handler(e, stepUp),\n }\n\n const decrementAttrs = {\n button: {\n ...sharedButtonAttrs,\n 'aria-label': props.labelDecrement || undefined,\n 'aria-keyshortcuts': 'ArrowDown',\n },\n svg: {\n ...sharedSvgAttrs,\n ...decrementSvgAttrs.svg,\n },\n path: {\n ...decrementSvgAttrs.path,\n },\n slot: {\n name: 'decrement',\n },\n handler: (e: Readonly<Event>) => handler(e, stepDown),\n }\n\n return {\n top: {\n ...(props.vertical ? incrementAttrs : decrementAttrs),\n },\n bottom: {\n ...(!props.vertical ? incrementAttrs : decrementAttrs),\n },\n }\n})\n\nonUnmounted(() => {\n // Cleanup event listeners\n setMouseup('removeEventListener')\n})\n</script>\n\n<script lang=\"ts\">\nconst defaultValues = {\n min: 1,\n max: 100,\n step: 1,\n repeatDelay: 500,\n repeatInterval: 100,\n repeatThreshold: 10,\n repeatMultiplier: 4,\n} as const\n</script>\n","<template>\n <div\n ref=\"_element\"\n class=\"b-form-spinbutton form-control\"\n :class=\"computedClasses\"\n role=\"group\"\n :lang=\"computedLocale\"\n :tabindex=\"props.disabled ? undefined : '-1'\"\n :title=\"props.ariaLabel\"\n @click=\"focused = true\"\n >\n <!-- eslint-disable-next-line prettier/prettier -->\n <!-- prettier-ignore -->\n <slot :name=\"(buttons.top.slot.name as 'increment' | 'decrement')\" :has-focus=\"focused\">\n <button\n v-bind=\"buttons.top.button\"\n @mousedown=\"buttons.top.handler\"\n @touchstart=\"buttons.top.handler\"\n >\n <svg v-bind=\"buttons.top.svg\">\n <path v-bind=\"buttons.top.path\" />\n </svg>\n </button>\n </slot>\n <input\n v-if=\"props.name && !props.disabled\"\n key=\"hidden\"\n type=\"hidden\"\n :name=\"props.name\"\n :form=\"props.form\"\n :value=\"valueAsFixed\"\n />\n <output\n :id=\"computedId\"\n key=\"output\"\n class=\"flex-grow-1\"\n :class=\"computedSpinClasses\"\n :dir=\"(isRtl ?? false) ? 'rtl' : 'ltr'\"\n :tabindex=\"props.disabled ? undefined : '0'\"\n role=\"spinbutton\"\n aria-live=\"off\"\n :aria-label=\"props.ariaLabel || undefined\"\n :aria-invalid=\"\n props.state === false || (!modelValue !== null && props.required) ? true : undefined\n \"\n :aria-required=\"props.required ? true : undefined\"\n :aria-valuemin=\"computedMin\"\n :aria-valuemax=\"computedMax\"\n :aria-valuenow=\"modelValue !== null ? modelValue : undefined\"\n :aria-valuetext=\"modelValue !== null ? computedFormatter(modelValue) : undefined\"\n >\n <bdi>\n {{ (modelValue !== null ? computedFormatter(modelValue) : props.placeholder) || '' }}\n </bdi>\n </output>\n <!-- eslint-disable-next-line prettier/prettier -->\n <!-- prettier-ignore -->\n <slot :name=\"(buttons.bottom.slot.name as 'increment' | 'decrement')\" :has-focus=\"focused\">\n <button\n v-bind=\"buttons.bottom.button\"\n @mousedown=\"buttons.bottom.handler\"\n @touchstart=\"buttons.bottom.handler\"\n >\n <svg v-bind=\"buttons.bottom.svg\">\n <path v-bind=\"buttons.bottom.path\" />\n </svg>\n </button>\n </slot>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, onUnmounted, useTemplateRef} from 'vue'\nimport {\n CODE_DOWN,\n CODE_END,\n CODE_HOME,\n CODE_PAGEDOWN,\n CODE_PAGEUP,\n CODE_UP,\n} from '../../utils/constants'\nimport {onKeyStroke, useFocus, useToNumber} from '@vueuse/core'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport {useRtl} from '../../composables/useRtl'\nimport type {\n BFormSpinbuttonEmits,\n BFormSpinbuttonProps,\n BFormSpinbuttonSlots,\n ButtonType,\n} from '../../types'\nimport {getSafeDocument} from '../../utils/dom'\n\nconst KEY_CODES = [CODE_UP, CODE_DOWN, CODE_HOME, CODE_END, CODE_PAGEUP, CODE_PAGEDOWN]\n\nconst _props = withDefaults(defineProps<Omit<BFormSpinbuttonProps, 'modelValue'>>(), {\n ariaControls: undefined,\n ariaLabel: undefined,\n disabled: false,\n form: undefined,\n formatterFn: undefined,\n id: undefined,\n inline: false,\n labelDecrement: 'Decrement',\n labelIncrement: 'Increment',\n locale: undefined,\n max: defaultValues.max,\n min: defaultValues.min,\n name: undefined,\n placeholder: undefined,\n readonly: false,\n repeatDelay: defaultValues.repeatDelay,\n repeatInterval: defaultValues.repeatInterval,\n repeatStepMultiplier: defaultValues.repeatMultiplier,\n repeatThreshold: defaultValues.repeatThreshold,\n required: false,\n size: undefined,\n state: null,\n step: defaultValues.step,\n vertical: false,\n wrap: false,\n})\nconst props = useDefaults(_props, 'BFormSpinbutton')\nconst emit = defineEmits<BFormSpinbuttonEmits>()\ndefineSlots<BFormSpinbuttonSlots>()\n\nconst modelValue = defineModel<Exclude<BFormSpinbuttonProps['modelValue'], undefined>>({\n default: null,\n})\n\nconst element = useTemplateRef('_element')\n\nconst {focused} = useFocus(element)\n\nconst computedId = useId(() => props.id, 'spinbutton')\n\nconst computedClasses = computed(() => ({\n 'disabled': props.disabled,\n 'readonly': props.readonly,\n 'focus': focused.value,\n 'd-inline-flex': props.inline || props.vertical,\n 'd-flex': !props.inline && !props.vertical,\n 'align-items-stretch': !props.vertical,\n 'flex-column': props.vertical,\n [`form-control-${props.size}`]: props.size !== undefined,\n}))\n\nconst computedSpinClasses = computed(() => ({\n 'd-flex': props.vertical,\n 'align-self-center': !props.vertical,\n 'align-items-center': props.vertical,\n 'border-top': props.vertical,\n 'border-bottom': props.vertical,\n 'border-start': !props.vertical,\n 'border-end': !props.vertical,\n}))\n\n//non-reactive properties\nlet $_autoDelayTimer: ReturnType<typeof setTimeout> | undefined\nlet $_autoRepeatTimer: ReturnType<typeof setTimeout> | undefined\nlet $_keyIsDown = false\n\n// const computedInline = computed(() => props.inline && !props.vertical)\n\n// const computedReadonly = computed(() => props.readonly && !props.disabled)\n\nconst stepNumber = useToNumber(() => props.step)\nconst computedStep = computed(() =>\n Number.isNaN(stepNumber.value) ? defaultValues.step : stepNumber.value\n)\n\nconst minNumber = useToNumber(() => props.min)\nconst computedMin = computed(() =>\n Number.isNaN(minNumber.value) ? defaultValues.min : minNumber.value\n)\n\nconst maxNumber = useToNumber(() => props.max)\nconst computedMax = computed(() => {\n const step = computedStep.value\n const min = computedMin.value\n return Math.floor((maxNumber.value - min) / step) * step + min\n})\n\nconst repeatDelayNumber = useToNumber(() => props.repeatDelay, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedDelay = computed(() =>\n repeatDelayNumber.value > 0 ? repeatDelayNumber.value : defaultValues.repeatDelay\n)\n\nconst repeatIntervalNumber = useToNumber(() => props.repeatInterval, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedInterval = computed(() =>\n repeatIntervalNumber.value > 0 ? repeatIntervalNumber.value : defaultValues.repeatInterval\n)\n\nconst repeatThresholdNumber = useToNumber(() => props.repeatThreshold, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedThreshold = computed(() =>\n Math.max(\n Number.isNaN(repeatThresholdNumber.value)\n ? defaultValues.repeatThreshold\n : repeatThresholdNumber.value,\n 1\n )\n)\n\nconst repeatStepMultiplierNumber = useToNumber(() => props.repeatStepMultiplier, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedStepMultiplier = computed(() =>\n Math.max(\n Number.isNaN(repeatStepMultiplierNumber.value)\n ? defaultValues.repeatMultiplier\n : repeatStepMultiplierNumber.value,\n 1\n )\n)\n\nconst computedPrecision = computed(() => {\n const step = computedStep.value\n return Math.floor(step) === step ? 0 : (step.toString().split('.')[1] || '').length\n})\n\nconst computedMultiplier = computed(() => Math.pow(10, computedPrecision.value || 0))\n\nconst valueAsFixed = computed(() =>\n modelValue.value === null ? '' : modelValue.value.toFixed(computedPrecision.value)\n)\n\nconst {isRtl, locale: globalLocale} = useRtl()\n\nconst computedLocale = computed(() => {\n const loc = (props.locale ?? globalLocale?.value) || 'locale'\n const locales = [loc]\n const nf = new Intl.NumberFormat(locales)\n return nf.resolvedOptions().locale\n})\n\nconst defaultFormatter = () =>\n new Intl.NumberFormat(computedLocale.value, {\n style: 'decimal',\n useGrouping: false,\n minimumIntegerDigits: 1,\n minimumFractionDigits: computedPrecision.value,\n maximumFractionDigits: computedPrecision.value,\n notation: 'standard',\n }).format\n\nconst computedFormatter = computed(() => props.formatterFn ?? defaultFormatter())\n\nconst stepValue = (direction: number) => {\n // Sets a new incremented or decremented value, supporting optional wrapping\n // Direction is either +1 or -1 (or a multiple thereof)\n let {value} = modelValue\n if (!props.disabled && value !== null) {\n const step = computedStep.value * direction\n const min = computedMin.value\n const max = computedMax.value\n const multiplier = computedMultiplier.value\n const {wrap} = props\n // We ensure that the value steps like a native input\n value = Math.round((value - min) / step) * step + min + step\n // We ensure that precision is maintained (decimals)\n value = Math.round(value * multiplier) / multiplier\n // Handle if wrapping is enabled\n modelValue.value = value > max ? (wrap ? min : max) : value < min ? (wrap ? max : min) : value\n }\n}\n\nconst stepUp = (multiplier = 1) => {\n if (modelValue.value === null) {\n modelValue.value = computedMin.value\n return\n }\n stepValue(+1 * multiplier)\n}\n\nconst stepDown = (multiplier = 1) => {\n if (modelValue.value === null) {\n modelValue.value = props.wrap ? computedMax.value : computedMin.value\n return\n }\n stepValue(-1 * multiplier)\n}\n\nconst stopEvent = (event: Readonly<Event>) => {\n event.preventDefault()\n event.stopImmediatePropagation()\n}\n\nonKeyStroke(\n KEY_CODES,\n (event) => {\n const {code, altKey, ctrlKey, metaKey} = event\n\n if (props.disabled || props.readonly || altKey || ctrlKey || metaKey) return\n\n // https://w3c.github.io/aria-practices/#spinbutton\n stopEvent(event)\n if ($_keyIsDown) {\n // Keypress is already in progress\n return\n }\n\n resetTimers()\n if ([CODE_UP, CODE_DOWN].includes(code)) {\n // The following use the custom auto-repeat handling\n\n $_keyIsDown = true\n if (code === CODE_UP) {\n handleStepRepeat(event, stepUp)\n return\n }\n if (code === CODE_DOWN) {\n handleStepRepeat(event, stepDown)\n }\n return\n }\n // These use native OS key repeating\n if (code === CODE_PAGEUP) {\n stepUp(computedStepMultiplier.value)\n return\n }\n if (code === CODE_PAGEDOWN) {\n stepDown(computedStepMultiplier.value)\n return\n }\n if (code === CODE_HOME) {\n modelValue.value = computedMin.value\n return\n }\n if (code === CODE_END) {\n modelValue.value = computedMax.value\n }\n },\n {target: element, eventName: 'keydown'}\n)\n\nonKeyStroke(\n KEY_CODES,\n (event: Readonly<KeyboardEvent>) => {\n // Emit a change event when the keyup happens\n\n const {altKey, ctrlKey, metaKey} = event\n\n if (props.disabled || props.readonly || altKey || ctrlKey || metaKey) return\n\n stopEvent(event)\n resetTimers()\n $_keyIsDown = false\n emit('change', modelValue.value)\n },\n {target: element, eventName: 'keyup'}\n)\n\n// takes in a mount or Keyboard Event\nconst handleStepRepeat = (event: Readonly<Event>, stepper: (step: number) => void) => {\n const {type} = event || {}\n\n if (!props.disabled && !props.readonly) {\n if (isMouseEvent(event)) {\n // We only respond to left (main === 0) button clicks\n if (type === 'mousedown' && event.button) return\n }\n resetTimers()\n // Step the counter initially\n stepper(1)\n const threshold = computedThreshold.value\n const multiplier = computedStepMultiplier.value\n const delay = computedDelay.value\n const interval = computedInterval.value\n\n // Initiate the delay/repeat interval\n $_autoDelayTimer = setTimeout(() => {\n let count = 0\n $_autoRepeatTimer = setInterval(() => {\n // After N initial repeats, we increase the incrementing step amount\n // We do this to minimize screen reader announcements of the value\n // (values are announced every change, which can be chatty for SR users)\n // And to make it easer to select a value when the range is large\n stepper(count < threshold ? 1 : multiplier)\n count++\n }, interval)\n }, delay)\n }\n}\n\nconst isMouseEvent = (evt: Readonly<Event>): evt is MouseEvent =>\n evt.type === 'mouseup' || evt.type === 'mousedown'\n\nconst onMouseup: EventListener = (event: Readonly<Event>) => {\n // `<body>` listener, only enabled when mousedown starts\n\n if (isMouseEvent(event)) {\n if (event.type === 'mouseup' && event.button) {\n // Ignore non left button (main === 0) mouse button click\n return\n }\n }\n\n stopEvent(event)\n resetTimers()\n setMouseup('removeEventListener')\n // Trigger the change event\n emit('change', modelValue.value)\n}\n\nconst setMouseup = (operation: 'addEventListener' | 'removeEventListener') => {\n const doc = getSafeDocument()\n if (doc === null) return\n\n if (operation === 'addEventListener') {\n doc.body.addEventListener('mouseup', onMouseup)\n doc.body.addEventListener('touchend', onMouseup, {passive: false})\n } else {\n doc.body.removeEventListener('mouseup', onMouseup)\n doc.body.removeEventListener('touchend', onMouseup)\n }\n}\nconst resetTimers = () => {\n clearTimeout($_autoDelayTimer)\n clearInterval($_autoRepeatTimer)\n $_autoDelayTimer = undefined\n $_autoRepeatTimer = undefined\n}\n\nconst buttons = computed(() => {\n const incrementSvgAttrs = {\n svg: {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '16',\n height: '16',\n fill: 'currentColor',\n class: 'bi bi-plus',\n viewBox: '0 0 16 16',\n },\n path: {\n d: 'M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z',\n },\n } as const\n\n const decrementSvgAttrs = {\n svg: {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '16',\n height: '16',\n fill: 'currentColor',\n class: 'bi bi-dash',\n viewBox: '0 0 16 16',\n },\n path: {d: 'M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z'},\n } as const\n\n const sharedButtonAttrs = {\n 'class': [{'py-0': !props.vertical}, 'btn', 'btn-sm', 'border-0', 'rounded-0'],\n 'tabindex': '-1',\n 'type': 'button' as ButtonType,\n 'disabled': props.disabled || props.readonly,\n 'aria-disabled': props.disabled || props.readonly ? true : undefined,\n 'aria-controls': computedId.value,\n }\n\n const sharedSvgAttrs = {\n 'aria-hidden': true,\n 'scale': focused.value ? 1.5 : 1.25,\n }\n\n const handler = (event: Readonly<Event>, stepper: (multiplier?: number) => void) => {\n if (!props.disabled && !props.readonly) {\n stopEvent(event)\n setMouseup('addEventListener')\n // Since we `preventDefault()`, we must manually focus the button\n // Though it's likely captured from the element click focus\n focused.value = true\n handleStepRepeat(event, stepper)\n }\n }\n\n const incrementAttrs = {\n button: {\n ...sharedButtonAttrs,\n 'aria-label': props.labelIncrement || undefined,\n 'aria-keyshortcuts': 'ArrowUp',\n },\n svg: {\n ...sharedSvgAttrs,\n ...incrementSvgAttrs.svg,\n },\n path: {\n ...incrementSvgAttrs.path,\n },\n slot: {\n name: 'increment',\n },\n handler: (e: Event) => handler(e, stepUp),\n }\n\n const decrementAttrs = {\n button: {\n ...sharedButtonAttrs,\n 'aria-label': props.labelDecrement || undefined,\n 'aria-keyshortcuts': 'ArrowDown',\n },\n svg: {\n ...sharedSvgAttrs,\n ...decrementSvgAttrs.svg,\n },\n path: {\n ...decrementSvgAttrs.path,\n },\n slot: {\n name: 'decrement',\n },\n handler: (e: Readonly<Event>) => handler(e, stepDown),\n }\n\n return {\n top: {\n ...(props.vertical ? incrementAttrs : decrementAttrs),\n },\n bottom: {\n ...(!props.vertical ? incrementAttrs : decrementAttrs),\n },\n }\n})\n\nonUnmounted(() => {\n // Cleanup event listeners\n setMouseup('removeEventListener')\n})\n</script>\n\n<script lang=\"ts\">\nconst defaultValues = {\n min: 1,\n max: 100,\n step: 1,\n repeatDelay: 500,\n repeatInterval: 100,\n repeatThreshold: 10,\n repeatMultiplier: 4,\n} as const\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4hBA,IAAM,gBAAgB;CACpB,KAAK;CACL,KAAK;CACL,MAAM;CACN,aAAa;CACb,gBAAgB;CAChB,iBAAiB;CACjB,kBAAkB;CACnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAvcD,MAAM,YAAY;GAAC;GAAS;GAAW;;GAAqB;GAAa;GAAa;EA6BtF,MAAM,QAAQ,YA3BC,SA2BmB,kBAAiB;EACnD,MAAM,OAAO;EAGb,MAAM,aAAa,SAAmE,SAAA,aAErF;EAED,MAAM,UAAU,eAAe,WAAU;EAEzC,MAAM,EAAC,YAAW,SAAS,QAAO;EAElC,MAAM,aAAa,cAAY,MAAM,IAAI,aAAY;EAErD,MAAM,kBAAkB,gBAAgB;GACtC,YAAY,MAAM;GAClB,YAAY,MAAM;GAClB,SAAS,QAAQ;GACjB,iBAAiB,MAAM,UAAU,MAAM;GACvC,UAAU,CAAC,MAAM,UAAU,CAAC,MAAM;GAClC,uBAAuB,CAAC,MAAM;GAC9B,eAAe,MAAM;IACpB,gBAAgB,MAAM,SAAS,MAAM,SAAS,KAAA;GAChD,EAAC;EAEF,MAAM,sBAAsB,gBAAgB;GAC1C,UAAU,MAAM;GAChB,qBAAqB,CAAC,MAAM;GAC5B,sBAAsB,MAAM;GAC5B,cAAc,MAAM;GACpB,iBAAiB,MAAM;GACvB,gBAAgB,CAAC,MAAM;GACvB,cAAc,CAAC,MAAM;GACtB,EAAC;EAGF,IAAI;EACJ,IAAI;EACJ,IAAI,cAAc;EAMlB,MAAM,aAAa,kBAAkB,MAAM,KAAI;EAC/C,MAAM,eAAe,eACnB,OAAO,MAAM,WAAW,MAAM,GAAG,cAAc,OAAO,WAAW,MACnE;EAEA,MAAM,YAAY,kBAAkB,MAAM,IAAG;EAC7C,MAAM,cAAc,eAClB,OAAO,MAAM,UAAU,MAAM,GAAG,cAAc,MAAM,UAAU,MAChE;EAEA,MAAM,YAAY,kBAAkB,MAAM,IAAG;EAC7C,MAAM,cAAc,eAAe;GACjC,MAAM,OAAO,aAAa;GAC1B,MAAM,MAAM,YAAY;AACxB,UAAO,KAAK,OAAO,UAAU,QAAQ,OAAO,KAAK,GAAG,OAAO;IAC5D;EAED,MAAM,oBAAoB,kBAAkB,MAAM,aAAa;GAC7D,WAAW;GACX,QAAQ;GACT,CAAA;EACD,MAAM,gBAAgB,eACpB,kBAAkB,QAAQ,IAAI,kBAAkB,QAAQ,cAAc,YACxE;EAEA,MAAM,uBAAuB,kBAAkB,MAAM,gBAAgB;GACnE,WAAW;GACX,QAAQ;GACT,CAAA;EACD,MAAM,mBAAmB,eACvB,qBAAqB,QAAQ,IAAI,qBAAqB,QAAQ,cAAc,eAC9E;EAEA,MAAM,wBAAwB,kBAAkB,MAAM,iBAAiB;GACrE,WAAW;GACX,QAAQ;GACT,CAAA;EACD,MAAM,oBAAoB,eACxB,KAAK,IACH,OAAO,MAAM,sBAAsB,MAAK,GACpC,cAAc,kBACd,sBAAsB,OAC1B,EACF,CACF;EAEA,MAAM,6BAA6B,kBAAkB,MAAM,sBAAsB;GAC/E,WAAW;GACX,QAAQ;GACT,CAAA;EACD,MAAM,yBAAyB,eAC7B,KAAK,IACH,OAAO,MAAM,2BAA2B,MAAK,GACzC,cAAc,mBACd,2BAA2B,OAC/B,EACF,CACF;EAEA,MAAM,oBAAoB,eAAe;GACvC,MAAM,OAAO,aAAa;AAC1B,UAAO,KAAK,MAAM,KAAK,KAAK,OAAO,KAAK,KAAK,UAAU,CAAC,MAAM,IAAI,CAAC,MAAM,IAAI;IAC9E;EAED,MAAM,qBAAqB,eAAe,KAAK,IAAI,IAAI,kBAAkB,SAAS,EAAE,CAAA;EAEpF,MAAM,eAAe,eACnB,WAAW,UAAU,OAAO,KAAK,WAAW,MAAM,QAAQ,kBAAkB,MAAK,CACnF;EAEA,MAAM,EAAC,OAAO,QAAQ,iBAAgB,QAAO;EAE7C,MAAM,iBAAiB,eAAe;GAEpC,MAAM,UAAU,EADH,MAAM,UAAU,cAAc,UAAU,SACjC;AAEpB,UADW,IAAI,KAAK,aAAa,QAAO,CAC9B,iBAAiB,CAAC;IAC7B;EAED,MAAM,yBACJ,IAAI,KAAK,aAAa,eAAe,OAAO;GAC1C,OAAO;GACP,aAAa;GACb,sBAAsB;GACtB,uBAAuB,kBAAkB;GACzC,uBAAuB,kBAAkB;GACzC,UAAU;GACX,CAAC,CAAC;EAEL,MAAM,oBAAoB,eAAe,MAAM,eAAe,kBAAkB,CAAA;EAEhF,MAAM,aAAa,cAAsB;GAGvC,IAAI,EAAC,UAAS;AACd,OAAI,CAAC,MAAM,YAAY,UAAU,MAAM;IACrC,MAAM,OAAO,aAAa,QAAQ;IAClC,MAAM,MAAM,YAAY;IACxB,MAAM,MAAM,YAAY;IACxB,MAAM,aAAa,mBAAmB;IACtC,MAAM,EAAC,SAAQ;AAEf,YAAQ,KAAK,OAAO,QAAQ,OAAO,KAAK,GAAG,OAAO,MAAM;AAExD,YAAQ,KAAK,MAAM,QAAQ,WAAW,GAAG;AAEzC,eAAW,QAAQ,QAAQ,MAAO,OAAO,MAAM,MAAO,QAAQ,MAAO,OAAO,MAAM,MAAO;;;EAI7F,MAAM,UAAU,aAAa,MAAM;AACjC,OAAI,WAAW,UAAU,MAAM;AAC7B,eAAW,QAAQ,YAAY;AAC/B;;AAEF,aAAU,IAAK,WAAU;;EAG3B,MAAM,YAAY,aAAa,MAAM;AACnC,OAAI,WAAW,UAAU,MAAM;AAC7B,eAAW,QAAQ,MAAM,OAAO,YAAY,QAAQ,YAAY;AAChE;;AAEF,aAAU,KAAK,WAAU;;EAG3B,MAAM,aAAa,UAA2B;AAC5C,SAAM,gBAAe;AACrB,SAAM,0BAAyB;;AAGjC,cACE,YACC,UAAU;GACT,MAAM,EAAC,MAAM,QAAQ,SAAS,YAAW;AAEzC,OAAI,MAAM,YAAY,MAAM,YAAY,UAAU,WAAW,QAAS;AAGtE,aAAU,MAAK;AACf,OAAI,YAEF;AAGF,gBAAY;AACZ,OAAI,CAAA,WAAA,YAAoB,CAAC,SAAS,KAAK,EAAE;AAGvC,kBAAc;AACd,QAAI,SAAA,WAAkB;AACpB,sBAAiB,OAAO,OAAM;AAC9B;;AAEF,QAAI,SAAA,YACF,kBAAiB,OAAO,SAAQ;AAElC;;AAGF,OAAI,SAAA,UAAsB;AACxB,WAAO,uBAAuB,MAAK;AACnC;;AAEF,OAAI,SAAA,YAAwB;AAC1B,aAAS,uBAAuB,MAAK;AACrC;;AAEF,OAAI,SAAA,QAAoB;AACtB,eAAW,QAAQ,YAAY;AAC/B;;AAEF,OAAI,SAAA,MACF,YAAW,QAAQ,YAAY;KAGnC;GAAC,QAAQ;GAAS,WAAW;GAAS,CACxC;AAEA,cACE,YACC,UAAmC;GAGlC,MAAM,EAAC,QAAQ,SAAS,YAAW;AAEnC,OAAI,MAAM,YAAY,MAAM,YAAY,UAAU,WAAW,QAAS;AAEtE,aAAU,MAAK;AACf,gBAAY;AACZ,iBAAc;AACd,QAAK,UAAU,WAAW,MAAK;KAEjC;GAAC,QAAQ;GAAS,WAAW;GAAO,CACtC;EAGA,MAAM,oBAAoB,OAAwB,YAAoC;GACpF,MAAM,EAAC,SAAQ,SAAS,EAAC;AAEzB,OAAI,CAAC,MAAM,YAAY,CAAC,MAAM,UAAU;AACtC,QAAI,aAAa,MAAM;SAEjB,SAAS,eAAe,MAAM,OAAQ;;AAE5C,iBAAY;AAEZ,YAAQ,EAAC;IACT,MAAM,YAAY,kBAAkB;IACpC,MAAM,aAAa,uBAAuB;IAC1C,MAAM,QAAQ,cAAc;IAC5B,MAAM,WAAW,iBAAiB;AAGlC,uBAAmB,iBAAiB;KAClC,IAAI,QAAQ;AACZ,yBAAoB,kBAAkB;AAKpC,cAAQ,QAAQ,YAAY,IAAI,WAAU;AAC1C;QACC,SAAQ;OACV,MAAK;;;EAIZ,MAAM,gBAAgB,QACpB,IAAI,SAAS,aAAa,IAAI,SAAS;EAEzC,MAAM,aAA4B,UAA2B;AAG3D,OAAI,aAAa,MAAM;QACjB,MAAM,SAAS,aAAa,MAAM,OAEpC;;AAIJ,aAAU,MAAK;AACf,gBAAY;AACZ,cAAW,sBAAqB;AAEhC,QAAK,UAAU,WAAW,MAAK;;EAGjC,MAAM,cAAc,cAA0D;GAC5E,MAAM,MAAM,iBAAgB;AAC5B,OAAI,QAAQ,KAAM;AAElB,OAAI,cAAc,oBAAoB;AACpC,QAAI,KAAK,iBAAiB,WAAW,UAAS;AAC9C,QAAI,KAAK,iBAAiB,YAAY,WAAW,EAAC,SAAS,OAAM,CAAA;UAC5D;AACL,QAAI,KAAK,oBAAoB,WAAW,UAAS;AACjD,QAAI,KAAK,oBAAoB,YAAY,UAAS;;;EAGtD,MAAM,oBAAoB;AACxB,gBAAa,iBAAgB;AAC7B,iBAAc,kBAAiB;AAC/B,sBAAmB,KAAA;AACnB,uBAAoB,KAAA;;EAGtB,MAAM,UAAU,eAAe;GAC7B,MAAM,oBAAoB;IACxB,KAAK;KACH,OAAO;KACP,OAAO;KACP,QAAQ;KACR,MAAM;KACN,OAAO;KACP,SAAS;KACV;IACD,MAAM,EACJ,GAAG,yGAAA;IAEN;GAED,MAAM,oBAAoB;IACxB,KAAK;KACH,OAAO;KACP,OAAO;KACP,QAAQ;KACR,MAAM;KACN,OAAO;KACP,SAAS;KACV;IACD,MAAM,EAAC,GAAG,6DAAA;IACX;GAED,MAAM,oBAAoB;IACxB,SAAS;KAAC,EAAC,QAAQ,CAAC,MAAM,UAAS;KAAE;KAAO;KAAU;KAAY;KAAY;IAC9E,YAAY;IACZ,QAAQ;IACR,YAAY,MAAM,YAAY,MAAM;IACpC,iBAAiB,MAAM,YAAY,MAAM,WAAW,OAAO,KAAA;IAC3D,iBAAiB,WAAW;IAC9B;GAEA,MAAM,iBAAiB;IACrB,eAAe;IACf,SAAS,QAAQ,QAAQ,MAAM;IACjC;GAEA,MAAM,WAAW,OAAwB,YAA2C;AAClF,QAAI,CAAC,MAAM,YAAY,CAAC,MAAM,UAAU;AACtC,eAAU,MAAK;AACf,gBAAW,mBAAkB;AAG7B,aAAQ,QAAQ;AAChB,sBAAiB,OAAO,QAAO;;;GAInC,MAAM,iBAAiB;IACrB,QAAQ;KACN,GAAG;KACH,cAAc,MAAM,kBAAkB,KAAA;KACtC,qBAAqB;KACtB;IACD,KAAK;KACH,GAAG;KACH,GAAG,kBAAkB;KACtB;IACD,MAAM,EACJ,GAAG,kBAAkB,MACtB;IACD,MAAM,EACJ,MAAM,aACP;IACD,UAAU,MAAa,QAAQ,GAAG,OAAA;IACpC;GAEA,MAAM,iBAAiB;IACrB,QAAQ;KACN,GAAG;KACH,cAAc,MAAM,kBAAkB,KAAA;KACtC,qBAAqB;KACtB;IACD,KAAK;KACH,GAAG;KACH,GAAG,kBAAkB;KACtB;IACD,MAAM,EACJ,GAAG,kBAAkB,MACtB;IACD,MAAM,EACJ,MAAM,aACP;IACD,UAAU,MAAuB,QAAQ,GAAG,SAAA;IAC9C;AAEA,UAAO;IACL,KAAK,EACH,GAAI,MAAM,WAAW,iBAAiB,gBACvC;IACD,QAAQ,EACN,GAAI,CAAC,MAAM,WAAW,iBAAiB,gBAAA;IAE3C;IACD;AAED,oBAAkB;AAEhB,cAAW,sBAAqB;IACjC;;uBAvhBC,mBAmEM,OAAA;IAlEJ,KAAI;IACJ,OAAK,eAAA,CAAC,kCACE,gBAAA,MAAe,CAAA;IACvB,MAAK;IACJ,MAAM,eAAA;IACN,UAAU,MAAA,MAAK,CAAC,WAAW,KAAA,IAAS;IACpC,OAAO,MAAA,MAAK,CAAC;IACb,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,QAAA,QAAO;;IAIf,WAUO,KAAA,QAVO,QAAA,MAAQ,IAAI,KAAK,MAAI,EAAiC,UAAW,MAAA,QAAO,EAAA,QAU/E,CATL,mBAQS,UART,WACU,QAOD,MAPS,IAAI,QAAM;KACzB,aAAS,OAAA,OAAA,OAAA,MAAA,GAAA,SAAE,QAAA,MAAQ,IAAI,WAAZ,QAAA,MAAQ,IAAI,QAAO,GAAA,KAAA;KAC9B,cAAU,OAAA,OAAA,OAAA,MAAA,GAAA,SAAE,QAAA,MAAQ,IAAI,WAAZ,QAAA,MAAQ,IAAI,QAAO,GAAA,KAAA;uBAEhC,mBAEM,OAAA,eAAA,mBAFO,QAAA,MAAQ,IAAI,IAAG,CAAA,EAAA,CAC1B,mBAAkC,QAAA,eAAA,mBAApB,QAAA,MAAQ,IAAI,KAAI,CAAA,EAAA,MAAA,GAAA,CAAA,EAAA,GAAA,EAAA,EAAA,GAAA,CAAA,CAAA;IAK5B,MAAA,MAAK,CAAC,QAAI,CAAK,MAAA,MAAK,CAAC,YAAA,WAAA,EAD7B,mBAOE,SAAA;KALA,KAAI;KACJ,MAAK;KACJ,MAAM,MAAA,MAAK,CAAC;KACZ,MAAM,MAAA,MAAK,CAAC;KACZ,OAAO,aAAA;;IAEV,mBAsBS,UAAA;KArBN,IAAI,MAAA,WAAU;KACf,KAAI;KACJ,OAAK,eAAA,CAAC,eACE,oBAAA,MAAmB,CAAA;KAC1B,KAAM,MAAA,MAAK,IAAA,QAAA,QAAA;KACX,UAAU,MAAA,MAAK,CAAC,WAAW,KAAA,IAAS;KACrC,MAAK;KACL,aAAU;KACT,cAAY,MAAA,MAAK,CAAC,aAAa,KAAA;KAC/B,gBAAuB,MAAA,MAAK,CAAC,UAAK,SAAA,CAAgB,WAAA,UAAU,QAAa,MAAA,MAAK,CAAC,WAAQ,OAAW,KAAA;KAGlG,iBAAe,MAAA,MAAK,CAAC,WAAQ,OAAU,KAAA;KACvC,iBAAe,YAAA;KACf,iBAAe,YAAA;KACf,iBAAe,WAAA,UAAU,OAAY,WAAA,QAAa,KAAA;KAClD,kBAAgB,WAAA,UAAU,OAAY,kBAAA,MAAkB,WAAA,MAAU,GAAI,KAAA;QAEvE,mBAEM,OAAA,MAAA,iBADA,WAAA,UAAU,OAAY,kBAAA,MAAkB,WAAA,MAAU,GAAI,MAAA,MAAK,CAAC,gBAAW,GAAA,EAAA,EAAA,CAAA,EAAA,IAAA,WAAA;IAK/E,WAUO,KAAA,QAVO,QAAA,MAAQ,OAAO,KAAK,MAAI,EAAiC,UAAW,MAAA,QAAO,EAAA,QAUlF,CATL,mBAQS,UART,WACU,QAOD,MAPS,OAAO,QAAM;KAC5B,aAAS,OAAA,OAAA,OAAA,MAAA,GAAA,SAAE,QAAA,MAAQ,OAAO,WAAf,QAAA,MAAQ,OAAO,QAAO,GAAA,KAAA;KACjC,cAAU,OAAA,OAAA,OAAA,MAAA,GAAA,SAAE,QAAA,MAAQ,OAAO,WAAf,QAAA,MAAQ,OAAO,QAAO,GAAA,KAAA;uBAEnC,mBAEM,OAAA,eAAA,mBAFO,QAAA,MAAQ,OAAO,IAAG,CAAA,EAAA,CAC7B,mBAAqC,QAAA,eAAA,mBAAvB,QAAA,MAAQ,OAAO,KAAI,CAAA,EAAA,MAAA,GAAA,CAAA,EAAA,GAAA,EAAA,EAAA,GAAA,CAAA,CAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
require("./chunk-CoQrYLCe.js");
|
|
2
|
-
const require_useDefaults = require("./useDefaults-
|
|
3
|
-
const require_useId = require("./useId-
|
|
4
|
-
const require_BCloseButton = require("./BCloseButton-
|
|
2
|
+
const require_useDefaults = require("./useDefaults-C0CYry78.js");
|
|
3
|
+
const require_useId = require("./useId-BkAY2oh6.js");
|
|
4
|
+
const require_BCloseButton = require("./BCloseButton-D42zHRLP.js");
|
|
5
5
|
const require_useColorVariantClasses = require("./useColorVariantClasses-Dq0sOYDL.js");
|
|
6
6
|
let vue = require("vue");
|
|
7
7
|
//#region src/components/BFormTags/BFormTag.vue?vue&type=script&setup=true&lang.ts
|
|
@@ -83,4 +83,4 @@ Object.defineProperty(exports, "BFormTag_default", {
|
|
|
83
83
|
}
|
|
84
84
|
});
|
|
85
85
|
|
|
86
|
-
//# sourceMappingURL=BFormTag-
|
|
86
|
+
//# sourceMappingURL=BFormTag-CeV0MSRC.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BFormTag-
|
|
1
|
+
{"version":3,"file":"BFormTag-CeV0MSRC.js","names":[],"sources":["../src/components/BFormTags/BFormTag.vue","../src/components/BFormTags/BFormTag.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 BCloseButton from '../BButton/BCloseButton.vue'\nimport {useColorVariantClasses} from '../../composables/useColorVariantClasses'\nimport type {BFormTagEmits, BFormTagProps, 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 BCloseButton from '../BButton/BCloseButton.vue'\nimport {useColorVariantClasses} from '../../composables/useColorVariantClasses'\nimport type {BFormTagEmits, BFormTagProps, 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"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0CA,MAAM,QAAQ,oBAAA,YAVC,SAUmB,WAAU;EAC5C,MAAM,OAAO;EACb,MAAM,SAAA,GAAA,IAAA,WAAQ;EAEd,MAAM,aAAa,cAAA,YAAY,MAAM,GAAE;EAEvC,MAAM,WAAA,GAAA,IAAA,kBACI,MAAM,UAAU,EAAE,CAAC,CAAC,GAAG,YAAY,IAAI,UAAU,IAAI,MAAM,UAAU,GAC/E;EACA,MAAM,cAAA,GAAA,IAAA,gBAA4B,GAAG,WAAW,MAAM,YAAW;EAEjE,MAAM,eAAe,+BAAA,uBAAuB,MAAK;EACjD,MAAM,mBAAA,GAAA,IAAA,gBAAiC,CACrC,aAAa,OACb;GACE,gBAAgB,MAAM;GACtB,YAAY,MAAM;GACnB,CACF,CAAA;;qGA1DQ,MAAK,CAAC,IAAG,EAAA;IACb,KAAA,GAAA,IAAA,OAAI,WAAU;IACd,OAAO,QAAA;IACR,QAAA,GAAA,IAAA,gBAAK,CAAC,4DACE,gBAAA,MAAe,CAAA;IACtB,mBAAiB,WAAA;;oCAIX,EAAA,GAAA,IAAA,oBAAA,QAAA;KAFA,IAAI,WAAA;KAAY,OAAM;4BACD,KAAA,QAAA,WAAA,EAAA,QAAA,EAAA,GAAA,IAAA,kBAAA,GAAA,IAAA,iBAAjB,QAAA,MAAO,EAAA,EAAA,CAAA,CAAA,CAAA,EAAA,GAAA,WAAA,EAAA,EAAA,GAAA,IAAA,OAGT,MAAK,CAAC,YAAQ,EAAA,GAAA,IAAA,OAAK,MAAK,CAAC,aAAA,GAAA,IAAA,YAAA,GAAA,GAAA,IAAA,aAOhC,qBAAA,sBAAA;;KANA,qBAAkB;KACjB,eAAA,GAAA,IAAA,OAAY,MAAK,CAAC;KACnB,OAAM;KACL,oBAAkB,WAAA;KAClB,kBAAA,GAAA,IAAA,OAAe,MAAK,CAAC;KACrB,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,UAAW,QAAA,MAAO"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { t as useDefaults } from "./useDefaults-
|
|
2
|
-
import { t as useId$1 } from "./useId-
|
|
3
|
-
import { t as BCloseButton_default } from "./BCloseButton-
|
|
1
|
+
import { t as useDefaults } from "./useDefaults-DseelK6y.mjs";
|
|
2
|
+
import { t as useId$1 } from "./useId-D1sqXtwx.mjs";
|
|
3
|
+
import { t as BCloseButton_default } from "./BCloseButton-CKTKr4PS.mjs";
|
|
4
4
|
import { t as useColorVariantClasses } from "./useColorVariantClasses-CqeXHjRh.mjs";
|
|
5
5
|
import { computed, createBlock, createCommentVNode, createElementVNode, createTextVNode, defineComponent, normalizeClass, openBlock, renderSlot, resolveDynamicComponent, toDisplayString, unref, useSlots, withCtx } from "vue";
|
|
6
6
|
//#region src/components/BFormTags/BFormTag.vue?vue&type=script&setup=true&lang.ts
|
|
@@ -77,4 +77,4 @@ var BFormTag_default = /* @__PURE__ */ defineComponent({
|
|
|
77
77
|
//#endregion
|
|
78
78
|
export { BFormTag_default as t };
|
|
79
79
|
|
|
80
|
-
//# sourceMappingURL=BFormTag-
|
|
80
|
+
//# sourceMappingURL=BFormTag-CnzI39y9.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BFormTag-
|
|
1
|
+
{"version":3,"file":"BFormTag-CnzI39y9.mjs","names":[],"sources":["../src/components/BFormTags/BFormTag.vue","../src/components/BFormTags/BFormTag.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 BCloseButton from '../BButton/BCloseButton.vue'\nimport {useColorVariantClasses} from '../../composables/useColorVariantClasses'\nimport type {BFormTagEmits, BFormTagProps, 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 BCloseButton from '../BButton/BCloseButton.vue'\nimport {useColorVariantClasses} from '../../composables/useColorVariantClasses'\nimport type {BFormTagEmits, BFormTagProps, 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"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0CA,MAAM,QAAQ,YAVC,SAUmB,WAAU;EAC5C,MAAM,OAAO;EACb,MAAM,QAAQ,UAAA;EAEd,MAAM,aAAa,cAAY,MAAM,GAAE;EAEvC,MAAM,UAAU,iBACN,MAAM,UAAU,EAAE,CAAC,CAAC,GAAG,YAAY,IAAI,UAAU,IAAI,MAAM,UAAU,GAC/E;EACA,MAAM,aAAa,eAAe,GAAG,WAAW,MAAM,YAAW;EAEjE,MAAM,eAAe,uBAAuB,MAAK;EACjD,MAAM,kBAAkB,eAAe,CACrC,aAAa,OACb;GACE,gBAAgB,MAAM;GACtB,YAAY,MAAM;GACnB,CACF,CAAA;;uBA3DC,YAoBY,wBAnBL,MAAA,MAAK,CAAC,IAAG,EAAA;IACb,IAAI,MAAA,WAAU;IACd,OAAO,QAAA;IACR,OAAK,eAAA,CAAC,4DACE,gBAAA,MAAe,CAAA;IACtB,mBAAiB,WAAA;;2BAIX,CAFP,mBAEO,QAAA;KAFA,IAAI,WAAA;KAAY,OAAM;QAC3B,WAA0B,KAAA,QAAA,WAAA,EAAA,QAAA,CAAA,gBAAA,gBAAjB,QAAA,MAAO,EAAA,EAAA,CAAA,CAAA,CAAA,EAAA,GAAA,WAAA,EAAA,CAGT,MAAA,MAAK,CAAC,YAAQ,CAAK,MAAA,MAAK,CAAC,YAAA,WAAA,EADlC,YAQE,sBAAA;;KANA,qBAAkB;KACjB,cAAY,MAAA,MAAK,CAAC;KACnB,OAAM;KACL,oBAAkB,WAAA;KAClB,iBAAe,MAAA,MAAK,CAAC;KACrB,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,UAAW,QAAA,MAAO"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { M as syncRef, R as useToNumber, a as onKeyStroke, m as useFocus } from "./dist-Dk9C_HFS.mjs";
|
|
2
|
-
import { t as useDefaults } from "./useDefaults-
|
|
3
|
-
import { t as useId$1 } from "./useId-
|
|
2
|
+
import { t as useDefaults } from "./useDefaults-DseelK6y.mjs";
|
|
3
|
+
import { t as useId$1 } from "./useId-D1sqXtwx.mjs";
|
|
4
4
|
import { t as escapeRegExpChars } from "./stringUtils-D4eEDlt1.mjs";
|
|
5
5
|
import { t as useStateClass } from "./useStateClass-DxlL_m2E.mjs";
|
|
6
|
-
import { t as BFormTag_default } from "./BFormTag-
|
|
6
|
+
import { t as BFormTag_default } from "./BFormTag-CnzI39y9.mjs";
|
|
7
7
|
import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, defineComponent, mergeModels, mergeProps, normalizeClass, openBlock, ref, renderList, renderSlot, toDisplayString, unref, useModel, useTemplateRef, withCtx } from "vue";
|
|
8
8
|
//#region src/components/BFormTags/BFormTags.vue?vue&type=script&setup=true&lang.ts
|
|
9
9
|
var _hoisted_1 = ["id"];
|
|
@@ -418,4 +418,4 @@ var BFormTags_default = /* @__PURE__ */ defineComponent({
|
|
|
418
418
|
//#endregion
|
|
419
419
|
export { BFormTags_default as t };
|
|
420
420
|
|
|
421
|
-
//# sourceMappingURL=BFormTags-
|
|
421
|
+
//# sourceMappingURL=BFormTags-BMltSaKL.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BFormTags-D2Dk598Q.mjs","names":[],"sources":["../src/components/BFormTags/BFormTags.vue","../src/components/BFormTags/BFormTags.vue"],"sourcesContent":["<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\"\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 0; 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 {escapeRegExpChars} from '../../utils/stringUtils'\nimport BFormTag from './BFormTag.vue'\nimport {useId} from '../../composables/useId'\nimport {useStateClass} from '../../composables/useStateClass'\nimport type {BFormTagsEmits, BFormTagsProps, 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: undefined,\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 !== undefined,\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, passive: true})\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 if (validTags.length > 0) {\n emit('tag-added', validTags)\n }\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\"\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 0; 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 {escapeRegExpChars} from '../../utils/stringUtils'\nimport BFormTag from './BFormTag.vue'\nimport {useId} from '../../composables/useId'\nimport {useStateClass} from '../../composables/useStateClass'\nimport type {BFormTagsEmits, BFormTagsProps, 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: undefined,\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 !== undefined,\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, passive: true})\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 if (validTags.length > 0) {\n emit('tag-added', validTags)\n }\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-BMltSaKL.mjs","names":[],"sources":["../src/components/BFormTags/BFormTags.vue","../src/components/BFormTags/BFormTags.vue"],"sourcesContent":["<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\"\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 0; 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 {escapeRegExpChars} from '../../utils/stringUtils'\nimport BFormTag from './BFormTag.vue'\nimport {useId} from '../../composables/useId'\nimport {useStateClass} from '../../composables/useStateClass'\nimport type {BFormTagsEmits, BFormTagsProps, 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: undefined,\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 !== undefined,\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, passive: true})\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 if (validTags.length > 0) {\n emit('tag-added', validTags)\n }\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\"\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 0; 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 {escapeRegExpChars} from '../../utils/stringUtils'\nimport BFormTag from './BFormTag.vue'\nimport {useId} from '../../composables/useId'\nimport {useStateClass} from '../../composables/useStateClass'\nimport type {BFormTagsEmits, BFormTagsProps, 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: undefined,\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 !== undefined,\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, passive: true})\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 if (validTags.length > 0) {\n emit('tag-added', validTags)\n }\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
|
require("./chunk-CoQrYLCe.js");
|
|
2
2
|
const require_dist = require("./dist-DiXKLh_W.js");
|
|
3
|
-
const require_useDefaults = require("./useDefaults-
|
|
4
|
-
const require_useId = require("./useId-
|
|
3
|
+
const require_useDefaults = require("./useDefaults-C0CYry78.js");
|
|
4
|
+
const require_useId = require("./useId-BkAY2oh6.js");
|
|
5
5
|
const require_stringUtils = require("./stringUtils-68ZN_GRt.js");
|
|
6
6
|
const require_useStateClass = require("./useStateClass-CXK3nCg9.js");
|
|
7
|
-
const require_BFormTag = require("./BFormTag-
|
|
7
|
+
const require_BFormTag = require("./BFormTag-CeV0MSRC.js");
|
|
8
8
|
let vue = require("vue");
|
|
9
9
|
//#region src/components/BFormTags/BFormTags.vue?vue&type=script&setup=true&lang.ts
|
|
10
10
|
var _hoisted_1 = ["id"];
|
|
@@ -424,4 +424,4 @@ Object.defineProperty(exports, "BFormTags_default", {
|
|
|
424
424
|
}
|
|
425
425
|
});
|
|
426
426
|
|
|
427
|
-
//# sourceMappingURL=BFormTags-
|
|
427
|
+
//# sourceMappingURL=BFormTags-BhO60uiL.js.map
|