bootstrap-vue-next 0.45.9 → 0.46.0
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/App.vue.d.mts +2 -1
- package/dist/App.vue.d.ts +2 -1
- package/dist/{BAccordion-D51b9HVD.mjs → BAccordion-FuQ6sMFy.js} +33 -31
- package/dist/BAccordion-FuQ6sMFy.js.map +1 -0
- package/dist/{BAlert-Ce2uxrJi.mjs → BAlert-C9Mi4RDx.js} +20 -13
- package/dist/BAlert-C9Mi4RDx.js.map +1 -0
- package/dist/{BApp-B-fUrnpK.mjs → BApp-GXR1wS6K.js} +53 -51
- package/dist/BApp-GXR1wS6K.js.map +1 -0
- package/dist/{BAspect-wfiXM4KA.mjs → BAspect-BPR6DH5W.js} +2 -2
- package/dist/{BAspect-CUIU48Ck.js.map → BAspect-BPR6DH5W.js.map} +1 -1
- package/dist/{BAutocomplete-CH-bQzME.mjs → BAutocomplete-DGvKY7-D.js} +195 -101
- package/dist/BAutocomplete-DGvKY7-D.js.map +1 -0
- package/dist/{BAvatar-iALHbqVk.mjs → BAvatar-BsStQrBF.js} +13 -13
- package/dist/BAvatar-BsStQrBF.js.map +1 -0
- package/dist/{BBadge-Cx_CdauK.mjs → BBadge-BaZ13wE_.js} +5 -5
- package/dist/{BBadge-Db6SEnzy.js.map → BBadge-BaZ13wE_.js.map} +1 -1
- package/dist/{BBreadcrumb-BxADbg0O.mjs → BBreadcrumb-C-SsS3hM.js} +4 -4
- package/dist/{BBreadcrumb-B9ra7vg2.js.map → BBreadcrumb-C-SsS3hM.js.map} +1 -1
- package/dist/{BButton-BSa7LfL5.mjs → BButton-Cc2gd95Z.js} +5 -7
- package/dist/{BButton-DRRlzkyK.js.map → BButton-Cc2gd95Z.js.map} +1 -1
- package/dist/{BButton-PY7AANXJ.mjs → BButton-KZu5jczf.js} +9 -9
- package/dist/{BButton-aYtMnyHu.js.map → BButton-KZu5jczf.js.map} +1 -1
- package/dist/{BCard-BWoruisp.mjs → BCard-D2GEiXan.js} +2 -3
- package/dist/{BCard-Bh8RLMo_.js.map → BCard-D2GEiXan.js.map} +1 -1
- package/dist/{BCard-CHbKv2OR.mjs → BCard-nRj1JWtQ.js} +9 -9
- package/dist/{BCard-DwNYhVmg.js.map → BCard-nRj1JWtQ.js.map} +1 -1
- package/dist/{BCarousel-B6_bgQpl.mjs → BCarousel-DQgfW4DN.js} +11 -10
- package/dist/{BCarousel-2JB21Pcu.js.map → BCarousel-DQgfW4DN.js.map} +1 -1
- package/dist/{BCloseButton-CKTKr4PS.mjs → BCloseButton-B3-IdpNp.js} +2 -2
- package/dist/{BCloseButton-D42zHRLP.js.map → BCloseButton-B3-IdpNp.js.map} +1 -1
- package/dist/{BCol-B3VeEk9z.mjs → BCol-DiZFbqU5.js} +3 -3
- package/dist/{BCol-Ck9VydHj.js.map → BCol-DiZFbqU5.js.map} +1 -1
- package/dist/{BCollapse-kqhe4AmL.mjs → BCollapse-B9fnWSzA.js} +15 -9
- package/dist/BCollapse-B9fnWSzA.js.map +1 -0
- package/dist/{BContainer-ATfhaxTc.mjs → BContainer-D-bZVPwa.js} +2 -4
- package/dist/{BContainer-CcF6dgtI.js.map → BContainer-D-bZVPwa.js.map} +1 -1
- package/dist/{BDateField-CccP3H1R.mjs → BDateField-Bj-Jz7u4.js} +27 -22
- package/dist/BDateField-Bj-Jz7u4.js.map +1 -0
- package/dist/{BDatePicker-BnwnSkBg.mjs → BDatePicker-AVTYcVLy.js} +232 -148
- package/dist/BDatePicker-AVTYcVLy.js.map +1 -0
- package/dist/{BDropdown-B1DbvVzm.mjs → BDropdown-CnxUzs42.js} +55 -46
- package/dist/BDropdown-CnxUzs42.js.map +1 -0
- package/dist/{BDropdown-0E8x5kk6.mjs → BDropdown-D4VSJJxu.js} +5 -6
- package/dist/{BDropdown-DKCgBzYS.js.map → BDropdown-D4VSJJxu.js.map} +1 -1
- package/dist/{BForm-BVfW08s5.mjs → BForm-BOoX6AAr.js} +2 -2
- package/dist/{BForm-cnRpggt9.js.map → BForm-BOoX6AAr.js.map} +1 -1
- package/dist/{BForm-DJu2hDV_.mjs → BForm-C5PR2ust.js} +7 -8
- package/dist/{BForm-6JlWdQMO.js.map → BForm-C5PR2ust.js.map} +1 -1
- package/dist/{BFormCheckbox-Baf_9BSc.mjs → BFormCheckbox-BMhyR-J5.js} +12 -13
- package/dist/BFormCheckbox-BMhyR-J5.js.map +1 -0
- package/dist/{BFormFile-CZebm0Cp.mjs → BFormFile-BVrDprWL.js} +8 -8
- package/dist/{BFormFile-MISLntyJ.js.map → BFormFile-BVrDprWL.js.map} +1 -1
- package/dist/{BFormGroup-vysRPb99.mjs → BFormGroup-BE5tGz_g.js} +40 -24
- package/dist/BFormGroup-BE5tGz_g.js.map +1 -0
- package/dist/{BFormInput-sEfU3CuN.mjs → BFormInput-BwvdFGDu.js} +5 -5
- package/dist/{BFormInput-CBwwDjfC.js.map → BFormInput-BwvdFGDu.js.map} +1 -1
- package/dist/{BFormOtp-C8X3u1od.mjs → BFormOtp-I1t8dqPS.js} +63 -22
- package/dist/BFormOtp-I1t8dqPS.js.map +1 -0
- package/dist/{BFormRadio-COc_IbxC.mjs → BFormRadio-DRViMh6V.js} +24 -13
- package/dist/BFormRadio-DRViMh6V.js.map +1 -0
- package/dist/{BFormRating-CIgPVsH_.mjs → BFormRating-AEiF8K8T.js} +23 -17
- package/dist/BFormRating-AEiF8K8T.js.map +1 -0
- package/dist/{BFormSelect-P-InkOm-.mjs → BFormSelect-DdjH8482.js} +23 -12
- package/dist/BFormSelect-DdjH8482.js.map +1 -0
- package/dist/{BFormSelectOption-DFN4lPRh.mjs → BFormSelectOption-C8orMj24.js} +3 -3
- package/dist/{BFormSelectOption-DrwJucNf.js.map → BFormSelectOption-C8orMj24.js.map} +1 -1
- package/dist/{BFormSpinbutton-6qkTBF_4.mjs → BFormSpinbutton-Bt590uT6.js} +10 -9
- package/dist/{BFormSpinbutton-1gTz4nTo.js.map → BFormSpinbutton-Bt590uT6.js.map} +1 -1
- package/dist/{BFormTag-CnzI39y9.mjs → BFormTag-DGSUfz7A.js} +5 -5
- package/dist/{BFormTag-CeV0MSRC.js.map → BFormTag-DGSUfz7A.js.map} +1 -1
- package/dist/{BFormTags-BMltSaKL.mjs → BFormTags-CUcyRTCK.js} +23 -27
- package/dist/BFormTags-CUcyRTCK.js.map +1 -0
- package/dist/{BFormTextarea-DN1gAfSo.mjs → BFormTextarea-DlDe26DL.js} +6 -6
- package/dist/{BFormTextarea-C3Cj0DWj.js.map → BFormTextarea-DlDe26DL.js.map} +1 -1
- package/dist/{BFormValidFeedback-CBYxQLDz.mjs → BFormValidFeedback-ClqLRxtH.js} +4 -4
- package/dist/{BFormValidFeedback-Kwxh798d.js.map → BFormValidFeedback-ClqLRxtH.js.map} +1 -1
- package/dist/{BImg-QBS2ECBc.mjs → BImg-knz2UZQE.js} +5 -5
- package/dist/{BImg-JKJLgYYT.js.map → BImg-knz2UZQE.js.map} +1 -1
- package/dist/{BInputGroup-DiTSexkT.mjs → BInputGroup-Bjh7zXyI.js} +2 -3
- package/dist/{BInputGroup-D4fW324B.js.map → BInputGroup-Bjh7zXyI.js.map} +1 -1
- package/dist/{BInputGroup-X2Z53RJx.mjs → BInputGroup-DdoeSICR.js} +3 -3
- package/dist/{BInputGroup-Bvlfv6VD.js.map → BInputGroup-DdoeSICR.js.map} +1 -1
- package/dist/{BLink-Dfgte6dQ.mjs → BLink-mdwZsC7b.js} +5 -5
- package/dist/{BLink-kLEjleB1.js.map → BLink-mdwZsC7b.js.map} +1 -1
- package/dist/{BListGroup-DwTLpNiD.mjs → BListGroup-CQedMbI8.js} +4 -4
- package/dist/{BListGroup-C8JOzHTz.js.map → BListGroup-CQedMbI8.js.map} +1 -1
- package/dist/{BModal-C-ZCau2E.mjs → BModal-NPsCBNo7.js} +25 -18
- package/dist/BModal-NPsCBNo7.js.map +1 -0
- package/dist/{BNav-DfYvjfRK.mjs → BNav-CjXS9tQ5.js} +9 -9
- package/dist/{BNav-DCLambmM.js.map → BNav-CjXS9tQ5.js.map} +1 -1
- package/dist/{BNavbar-xYaikQVY.mjs → BNavbar-DRqkdxTk.js} +12 -9
- package/dist/{BNavbar-BLWaZJRP.js.map → BNavbar-DRqkdxTk.js.map} +1 -1
- package/dist/{BOffcanvas-CF-dWeez.mjs → BOffcanvas-BndaBJoP.js} +22 -16
- package/dist/BOffcanvas-BndaBJoP.js.map +1 -0
- package/dist/{BOverlay-Bh2PIN_q.mjs → BOverlay-CJfy_f6O.js} +6 -6
- package/dist/{BOverlay-Bh4ldxgt.js.map → BOverlay-CJfy_f6O.js.map} +1 -1
- package/dist/{BPagination-D75q-ZNg.mjs → BPagination-D_Hfk6OF.js} +29 -27
- package/dist/{BPagination-fbjFAtxu.js.map → BPagination-D_Hfk6OF.js.map} +1 -1
- package/dist/{BPlaceholder-DPQ6mCLN.mjs → BPlaceholder-DvOCnqDh.js} +11 -11
- package/dist/{BPlaceholder-B3rs_39w.js.map → BPlaceholder-DvOCnqDh.js.map} +1 -1
- package/dist/{BProgress-BZlrPYhA.mjs → BProgress-BNxYppi-.js} +5 -5
- package/dist/{BProgress-th0-eZWo.js.map → BProgress-BNxYppi-.js.map} +1 -1
- package/dist/{BRow-eGSUYGCW.mjs → BRow-CoBI89xF.js} +4 -4
- package/dist/{BRow-7AOuFiSy.js.map → BRow-CoBI89xF.js.map} +1 -1
- package/dist/{BSpinner-CUfGqviV.mjs → BSpinner-H1DZOmiM.js} +4 -4
- package/dist/{BSpinner-DbYIp-C7.js.map → BSpinner-H1DZOmiM.js.map} +1 -1
- package/dist/{BTable-DUHxxWv5.mjs → BTable-BZxX17YU.js} +40 -33
- package/dist/BTable-BZxX17YU.js.map +1 -0
- package/dist/{BTableSimple-C-jn9Nwh.mjs → BTableSimple-2Z7ssnuG.js} +5 -5
- package/dist/{BTableSimple-BkdGAAKb.js.map → BTableSimple-2Z7ssnuG.js.map} +1 -1
- package/dist/{BTabs-D_vWlBjT.mjs → BTabs-BVcu9DPg.js} +19 -17
- package/dist/{BTabs-CvecFg5N.js.map → BTabs-BVcu9DPg.js.map} +1 -1
- package/dist/{BTimeField-BSDaZogC.mjs → BTimeField-CbRGjaI6.js} +24 -19
- package/dist/BTimeField-CbRGjaI6.js.map +1 -0
- package/dist/{BToast-Y8BayxES.mjs → BToast-Di9HwBOV.js} +21 -14
- package/dist/BToast-Di9HwBOV.js.map +1 -0
- package/dist/{BTooltip-CVP8HdkU.mjs → BTooltip-BxaUtV4m.js} +5 -5
- package/dist/{BTooltip-DPLYtaL1.js.map → BTooltip-BxaUtV4m.js.map} +1 -1
- package/dist/{BootstrapVueOptions-Dt1TQdih.mjs → BootstrapVueOptions-DH79gHKG.js} +1 -4
- package/dist/BootstrapVueOptions-DH79gHKG.js.map +1 -0
- package/dist/{ConditionalTeleport-B4KYZIM6.mjs → ConditionalTeleport-BCKPLEun.js} +1 -1
- package/dist/{ConditionalTeleport-BDWcebyD.js.map → ConditionalTeleport-BCKPLEun.js.map} +1 -1
- package/dist/{ConditionalWrapper-Dbc_O6qe.mjs → ConditionalWrapper-CCIk52zt.js} +1 -1
- package/dist/{ConditionalWrapper-DZH_VSwb.js.map → ConditionalWrapper-CCIk52zt.js.map} +1 -1
- package/dist/{DateRangeFieldInput-B86VEz0H.mjs → DateRangeFieldInput-Cbzjg8iF.js} +45 -22
- package/dist/DateRangeFieldInput-Cbzjg8iF.js.map +1 -0
- package/dist/{PopperContent-DmSgsjSC.mjs → PopperContent-C9eeL6LH.js} +395 -100
- package/dist/PopperContent-C9eeL6LH.js.map +1 -0
- package/dist/{VisuallyHidden-C4sXnc-k.mjs → VisuallyHidden-BYzyjJiY.js} +23 -15
- package/dist/VisuallyHidden-BYzyjJiY.js.map +1 -0
- package/dist/{VisuallyHiddenInput-DKIzxsQR.mjs → VisuallyHiddenInput-CUrc8XXa.js} +46 -7
- package/dist/VisuallyHiddenInput-CUrc8XXa.js.map +1 -0
- package/dist/bootstrap-vue-next.mjs +65 -65
- package/dist/{classes-B0E5Y78Y.mjs → classes-BEWWGbj5.js} +1 -1
- package/dist/{classes-D5wrmmVs.js.map → classes-BEWWGbj5.js.map} +1 -1
- package/dist/components/BAccordion/BAccordion.vue.d.mts +9 -13
- package/dist/components/BAccordion/BAccordion.vue.d.ts +9 -13
- package/dist/components/BAccordion/BAccordionItem.vue.d.mts +16 -24
- package/dist/components/BAccordion/BAccordionItem.vue.d.ts +16 -24
- package/dist/components/BAlert/BAlert.vue.d.mts +26 -34
- package/dist/components/BAlert/BAlert.vue.d.ts +26 -34
- package/dist/components/BApp/BApp.vue.d.mts +8 -12
- package/dist/components/BApp/BApp.vue.d.ts +8 -12
- package/dist/components/BApp/BOrchestrator.vue.d.mts +2 -1
- package/dist/components/BApp/BOrchestrator.vue.d.ts +2 -1
- package/dist/components/BAspect/BAspect.vue.d.mts +5 -10
- package/dist/components/BAspect/BAspect.vue.d.ts +5 -10
- package/dist/components/BAutocomplete/BAutocomplete.vue.d.mts +12 -270
- package/dist/components/BAutocomplete/BAutocomplete.vue.d.ts +12 -270
- package/dist/components/BAvatar/BAvatar.vue.d.mts +20 -25
- package/dist/components/BAvatar/BAvatar.vue.d.ts +20 -25
- package/dist/components/BAvatar/BAvatarGroup.vue.d.mts +8 -13
- package/dist/components/BAvatar/BAvatarGroup.vue.d.ts +8 -13
- package/dist/components/BBadge/BBadge.vue.d.mts +13 -18
- package/dist/components/BBadge/BBadge.vue.d.ts +13 -18
- package/dist/components/BBreadcrumb/BBreadcrumb.vue.d.mts +6 -11
- package/dist/components/BBreadcrumb/BBreadcrumb.vue.d.ts +6 -11
- package/dist/components/BBreadcrumb/BBreadcrumbItem.vue.d.mts +13 -18
- package/dist/components/BBreadcrumb/BBreadcrumbItem.vue.d.ts +13 -18
- package/dist/components/BButton/BButton.vue.d.mts +17 -25
- package/dist/components/BButton/BButton.vue.d.ts +17 -25
- package/dist/components/BButton/BButtonGroup.vue.d.mts +5 -10
- package/dist/components/BButton/BButtonGroup.vue.d.ts +5 -10
- package/dist/components/BButton/BButtonToolbar.vue.d.mts +7 -16
- package/dist/components/BButton/BButtonToolbar.vue.d.ts +7 -16
- package/dist/components/BButton/BCloseButton.vue.d.mts +4 -3
- package/dist/components/BButton/BCloseButton.vue.d.ts +4 -3
- package/dist/components/BCard/BCard.vue.d.mts +21 -26
- package/dist/components/BCard/BCard.vue.d.ts +21 -26
- package/dist/components/BCard/BCardBody.vue.d.mts +9 -14
- package/dist/components/BCard/BCardBody.vue.d.ts +9 -14
- package/dist/components/BCard/BCardFooter.vue.d.mts +7 -11
- package/dist/components/BCard/BCardFooter.vue.d.ts +7 -11
- package/dist/components/BCard/BCardGroup.vue.d.mts +5 -10
- package/dist/components/BCard/BCardGroup.vue.d.ts +5 -10
- package/dist/components/BCard/BCardHeader.vue.d.mts +7 -12
- package/dist/components/BCard/BCardHeader.vue.d.ts +7 -12
- package/dist/components/BCard/BCardImg.vue.d.mts +7 -6
- package/dist/components/BCard/BCardImg.vue.d.ts +7 -6
- package/dist/components/BCard/BCardSubtitle.vue.d.mts +6 -11
- package/dist/components/BCard/BCardSubtitle.vue.d.ts +6 -11
- package/dist/components/BCard/BCardText.vue.d.mts +5 -10
- package/dist/components/BCard/BCardText.vue.d.ts +5 -10
- package/dist/components/BCard/BCardTitle.vue.d.mts +5 -10
- package/dist/components/BCard/BCardTitle.vue.d.ts +5 -10
- package/dist/components/BCardHeadFoot.vue.d.mts +6 -11
- package/dist/components/BCardHeadFoot.vue.d.ts +6 -11
- package/dist/components/BCarousel/BCarousel.vue.d.mts +12 -24
- package/dist/components/BCarousel/BCarousel.vue.d.ts +12 -24
- package/dist/components/BCarousel/BCarouselSlide.vue.d.mts +7 -12
- package/dist/components/BCarousel/BCarouselSlide.vue.d.ts +7 -12
- package/dist/components/BCollapse/BCollapse.vue.d.mts +13 -21
- package/dist/components/BCollapse/BCollapse.vue.d.ts +13 -21
- package/dist/components/BContainer/BCol.vue.d.mts +8 -13
- package/dist/components/BContainer/BCol.vue.d.ts +8 -13
- package/dist/components/BContainer/BContainer.vue.d.mts +5 -10
- package/dist/components/BContainer/BContainer.vue.d.ts +5 -10
- package/dist/components/BContainer/BRow.vue.d.mts +6 -11
- package/dist/components/BContainer/BRow.vue.d.ts +6 -11
- package/dist/components/BDateField/BDateField.vue.d.mts +8 -12
- package/dist/components/BDateField/BDateField.vue.d.ts +8 -12
- package/dist/components/BDateField/BDateRangeField.vue.d.mts +8 -12
- package/dist/components/BDateField/BDateRangeField.vue.d.ts +8 -12
- package/dist/components/BDateField/BTimeRangeField.vue.d.mts +9 -13
- package/dist/components/BDateField/BTimeRangeField.vue.d.ts +9 -13
- package/dist/components/BDatePicker/BDatePicker.vue.d.mts +9 -13
- package/dist/components/BDatePicker/BDatePicker.vue.d.ts +9 -13
- package/dist/components/BDatePicker/BDateRangePicker.vue.d.mts +9 -13
- package/dist/components/BDatePicker/BDateRangePicker.vue.d.ts +9 -13
- package/dist/components/BDropdown/BDropdown.vue.d.mts +24 -957
- package/dist/components/BDropdown/BDropdown.vue.d.ts +24 -957
- package/dist/components/BDropdown/BDropdownDivider.vue.d.mts +3 -2
- package/dist/components/BDropdown/BDropdownDivider.vue.d.ts +3 -2
- package/dist/components/BDropdown/BDropdownForm.vue.d.mts +6 -11
- package/dist/components/BDropdown/BDropdownForm.vue.d.ts +6 -11
- package/dist/components/BDropdown/BDropdownGroup.vue.d.mts +5 -10
- package/dist/components/BDropdown/BDropdownGroup.vue.d.ts +5 -10
- package/dist/components/BDropdown/BDropdownHeader.vue.d.mts +7 -12
- package/dist/components/BDropdown/BDropdownHeader.vue.d.ts +7 -12
- package/dist/components/BDropdown/BDropdownItem.vue.d.mts +12 -17
- package/dist/components/BDropdown/BDropdownItem.vue.d.ts +12 -17
- package/dist/components/BDropdown/BDropdownItemButton.vue.d.mts +6 -11
- package/dist/components/BDropdown/BDropdownItemButton.vue.d.ts +6 -11
- package/dist/components/BDropdown/BDropdownText.vue.d.mts +6 -11
- package/dist/components/BDropdown/BDropdownText.vue.d.ts +6 -11
- package/dist/components/BForm/BForm.vue.d.mts +8 -17
- package/dist/components/BForm/BForm.vue.d.ts +8 -17
- package/dist/components/BForm/BFormDatalist.vue.d.mts +12 -7
- package/dist/components/BForm/BFormDatalist.vue.d.ts +12 -7
- package/dist/components/BForm/BFormDatalistBase.vue.d.mts +20 -22
- package/dist/components/BForm/BFormDatalistBase.vue.d.ts +20 -22
- package/dist/components/BForm/BFormFloatingLabel.vue.d.mts +6 -11
- package/dist/components/BForm/BFormFloatingLabel.vue.d.ts +6 -11
- package/dist/components/BForm/BFormInvalidFeedback.vue.d.mts +6 -11
- package/dist/components/BForm/BFormInvalidFeedback.vue.d.ts +6 -11
- package/dist/components/BForm/BFormRow.vue.d.mts +5 -10
- package/dist/components/BForm/BFormRow.vue.d.ts +5 -10
- package/dist/components/BForm/BFormText.vue.d.mts +6 -11
- package/dist/components/BForm/BFormText.vue.d.ts +6 -11
- package/dist/components/BForm/BFormValidFeedback.vue.d.mts +6 -11
- package/dist/components/BForm/BFormValidFeedback.vue.d.ts +6 -11
- package/dist/components/BFormCheckbox/BFormCheckbox.vue.d.mts +14 -22
- package/dist/components/BFormCheckbox/BFormCheckbox.vue.d.ts +14 -22
- package/dist/components/BFormCheckbox/BFormCheckboxGroup.vue.d.mts +16 -11
- package/dist/components/BFormCheckbox/BFormCheckboxGroup.vue.d.ts +16 -11
- package/dist/components/BFormCheckbox/BFormCheckboxGroupBase.vue.d.mts +22 -27
- package/dist/components/BFormCheckbox/BFormCheckboxGroupBase.vue.d.ts +22 -27
- package/dist/components/BFormFile/BFormFile.vue.d.mts +9 -25
- package/dist/components/BFormFile/BFormFile.vue.d.ts +9 -25
- package/dist/components/BFormGroup/BFormGroup.vue.d.mts +14 -23
- package/dist/components/BFormGroup/BFormGroup.vue.d.ts +14 -23
- package/dist/components/BFormGroupContent.vue.d.mts +8 -17
- package/dist/components/BFormGroupContent.vue.d.ts +8 -17
- package/dist/components/BFormGroupLabel.vue.d.mts +6 -13
- package/dist/components/BFormGroupLabel.vue.d.ts +6 -13
- package/dist/components/BFormInput/BFormInput.vue.d.mts +10 -10
- package/dist/components/BFormInput/BFormInput.vue.d.ts +10 -10
- package/dist/components/BFormOtp/BFormOtp.vue.d.mts +7 -5
- package/dist/components/BFormOtp/BFormOtp.vue.d.ts +7 -5
- package/dist/components/BFormRadio/BFormRadio.vue.d.mts +13 -21
- package/dist/components/BFormRadio/BFormRadio.vue.d.ts +13 -21
- package/dist/components/BFormRadio/BFormRadioGroup.vue.d.mts +21 -14
- package/dist/components/BFormRadio/BFormRadioGroup.vue.d.ts +21 -14
- package/dist/components/BFormRadio/BFormRadioGroupBase.vue.d.mts +14 -22
- package/dist/components/BFormRadio/BFormRadioGroupBase.vue.d.ts +14 -22
- package/dist/components/BFormRating/BFormRating.vue.d.mts +10 -12
- package/dist/components/BFormRating/BFormRating.vue.d.ts +10 -12
- package/dist/components/BFormSelect/BFormSelect.vue.d.mts +16 -11
- package/dist/components/BFormSelect/BFormSelect.vue.d.ts +16 -11
- package/dist/components/BFormSelect/BFormSelectBase.vue.d.mts +24 -29
- package/dist/components/BFormSelect/BFormSelectBase.vue.d.ts +24 -29
- package/dist/components/BFormSelect/BFormSelectOption.vue.d.mts +12 -7
- package/dist/components/BFormSelect/BFormSelectOption.vue.d.ts +12 -7
- package/dist/components/BFormSelect/BFormSelectOptionGroup.vue.d.mts +12 -7
- package/dist/components/BFormSelect/BFormSelectOptionGroup.vue.d.ts +12 -7
- package/dist/components/BFormSpinbutton/BFormSpinbutton.vue.d.mts +11 -12
- package/dist/components/BFormSpinbutton/BFormSpinbutton.vue.d.ts +11 -12
- package/dist/components/BFormTags/BFormTag.vue.d.mts +7 -12
- package/dist/components/BFormTags/BFormTag.vue.d.ts +7 -12
- package/dist/components/BFormTags/BFormTags.vue.d.mts +12 -20
- package/dist/components/BFormTags/BFormTags.vue.d.ts +12 -20
- package/dist/components/BFormTextarea/BFormTextarea.vue.d.mts +12 -12
- package/dist/components/BFormTextarea/BFormTextarea.vue.d.ts +12 -12
- package/dist/components/BImg/BImg.vue.d.mts +7 -6
- package/dist/components/BImg/BImg.vue.d.ts +7 -6
- package/dist/components/BInputGroup/BInputGroup.vue.d.mts +5 -10
- package/dist/components/BInputGroup/BInputGroup.vue.d.ts +5 -10
- package/dist/components/BInputGroup/BInputGroupText.vue.d.mts +5 -10
- package/dist/components/BInputGroup/BInputGroupText.vue.d.ts +5 -10
- package/dist/components/BLink/BLink.vue.d.mts +12 -17
- package/dist/components/BLink/BLink.vue.d.ts +12 -17
- package/dist/components/BListGroup/BListGroup.vue.d.mts +5 -10
- package/dist/components/BListGroup/BListGroup.vue.d.ts +5 -10
- package/dist/components/BListGroup/BListGroupItem.vue.d.mts +13 -18
- package/dist/components/BListGroup/BListGroupItem.vue.d.ts +13 -18
- package/dist/components/BModal/BModal.vue.d.mts +47 -1026
- package/dist/components/BModal/BModal.vue.d.ts +47 -1026
- package/dist/components/BNav/BNav.vue.d.mts +7 -12
- package/dist/components/BNav/BNav.vue.d.ts +7 -12
- package/dist/components/BNav/BNavForm.vue.d.mts +8 -13
- package/dist/components/BNav/BNavForm.vue.d.ts +8 -13
- package/dist/components/BNav/BNavItem.vue.d.mts +12 -17
- package/dist/components/BNav/BNavItem.vue.d.ts +12 -17
- package/dist/components/BNav/BNavItemDropdown.vue.d.mts +20 -1660
- package/dist/components/BNav/BNavItemDropdown.vue.d.ts +20 -1660
- package/dist/components/BNav/BNavText.vue.d.mts +6 -11
- package/dist/components/BNav/BNavText.vue.d.ts +6 -11
- package/dist/components/BNavbar/BNavbar.vue.d.mts +6 -11
- package/dist/components/BNavbar/BNavbar.vue.d.ts +6 -11
- package/dist/components/BNavbar/BNavbarBrand.vue.d.mts +11 -16
- package/dist/components/BNavbar/BNavbarBrand.vue.d.ts +11 -16
- package/dist/components/BNavbar/BNavbarNav.vue.d.mts +7 -12
- package/dist/components/BNavbar/BNavbarNav.vue.d.ts +7 -12
- package/dist/components/BNavbar/BNavbarToggle.vue.d.mts +7 -12
- package/dist/components/BNavbar/BNavbarToggle.vue.d.ts +7 -12
- package/dist/components/BOffcanvas/BOffcanvas.vue.d.mts +28 -82
- package/dist/components/BOffcanvas/BOffcanvas.vue.d.ts +28 -82
- package/dist/components/BOverlay/BOverlay.vue.d.mts +17 -22
- package/dist/components/BOverlay/BOverlay.vue.d.ts +17 -22
- package/dist/components/BPagination/BPagination.vue.d.mts +9 -10
- package/dist/components/BPagination/BPagination.vue.d.ts +9 -10
- package/dist/components/BPlaceholder/BPlaceholder.vue.d.mts +3 -2
- package/dist/components/BPlaceholder/BPlaceholder.vue.d.ts +3 -2
- package/dist/components/BPlaceholder/BPlaceholderButton.vue.d.mts +3 -2
- package/dist/components/BPlaceholder/BPlaceholderButton.vue.d.ts +3 -2
- package/dist/components/BPlaceholder/BPlaceholderCard.vue.d.mts +8 -13
- package/dist/components/BPlaceholder/BPlaceholderCard.vue.d.ts +8 -13
- package/dist/components/BPlaceholder/BPlaceholderTable.vue.d.mts +8 -13
- package/dist/components/BPlaceholder/BPlaceholderTable.vue.d.ts +8 -13
- package/dist/components/BPlaceholder/BPlaceholderWrapper.vue.d.mts +5 -10
- package/dist/components/BPlaceholder/BPlaceholderWrapper.vue.d.ts +5 -10
- package/dist/components/BPopover/BPopover.vue.d.mts +35 -49
- package/dist/components/BPopover/BPopover.vue.d.ts +35 -49
- package/dist/components/BProgress/BProgress.vue.d.mts +10 -15
- package/dist/components/BProgress/BProgress.vue.d.ts +10 -15
- package/dist/components/BProgress/BProgressBar.vue.d.mts +9 -14
- package/dist/components/BProgress/BProgressBar.vue.d.ts +9 -14
- package/dist/components/BSpinner/BSpinner.vue.d.mts +7 -12
- package/dist/components/BSpinner/BSpinner.vue.d.ts +7 -12
- package/dist/components/BTable/BTable.vue.d.mts +35 -30
- package/dist/components/BTable/BTable.vue.d.ts +35 -30
- package/dist/components/BTable/BTableLite.vue.d.mts +24 -19
- package/dist/components/BTable/BTableLite.vue.d.ts +24 -19
- package/dist/components/BTable/BTableSimple.vue.d.mts +9 -14
- package/dist/components/BTable/BTableSimple.vue.d.ts +9 -14
- package/dist/components/BTable/BTbody.vue.d.mts +6 -11
- package/dist/components/BTable/BTbody.vue.d.ts +6 -11
- package/dist/components/BTable/BTd.vue.d.mts +6 -11
- package/dist/components/BTable/BTd.vue.d.ts +6 -11
- package/dist/components/BTable/BTfoot.vue.d.mts +6 -11
- package/dist/components/BTable/BTfoot.vue.d.ts +6 -11
- package/dist/components/BTable/BTh.vue.d.mts +6 -11
- package/dist/components/BTable/BTh.vue.d.ts +6 -11
- package/dist/components/BTable/BThead.vue.d.mts +6 -11
- package/dist/components/BTable/BThead.vue.d.ts +6 -11
- package/dist/components/BTable/BTr.vue.d.mts +6 -11
- package/dist/components/BTable/BTr.vue.d.ts +6 -11
- package/dist/components/BTabs/BTab.vue.d.mts +10 -18
- package/dist/components/BTabs/BTab.vue.d.ts +10 -18
- package/dist/components/BTabs/BTabs.vue.d.mts +10 -14
- package/dist/components/BTabs/BTabs.vue.d.ts +10 -14
- package/dist/components/BTabsTabContent.vue.d.mts +7 -15
- package/dist/components/BTabsTabContent.vue.d.ts +7 -15
- package/dist/components/BTimeField/BTimeField.vue.d.mts +8 -12
- package/dist/components/BTimeField/BTimeField.vue.d.ts +8 -12
- package/dist/components/BToast/BToast.vue.d.mts +25 -33
- package/dist/components/BToast/BToast.vue.d.ts +25 -33
- package/dist/components/BTooltip/BTooltip.vue.d.mts +32 -732
- package/dist/components/BTooltip/BTooltip.vue.d.ts +32 -732
- package/dist/components/ConditionalTeleport.vue.d.mts +3 -2
- package/dist/components/ConditionalTeleport.vue.d.ts +3 -2
- package/dist/components/ConditionalWrapper.vue.d.mts +3 -2
- package/dist/components/ConditionalWrapper.vue.d.ts +3 -2
- package/dist/composables/index.d.mts +3 -3
- package/dist/composables/index.d.ts +3 -3
- package/dist/composables/orchestratorShared/index.d.mts +25 -14
- package/dist/composables/orchestratorShared/index.d.ts +25 -14
- package/dist/composables/useBLinkHelper.d.mts +1 -1
- package/dist/composables/useBLinkHelper.d.ts +1 -1
- package/dist/composables/useModal/index.d.mts +8 -33
- package/dist/composables/useModal/index.d.ts +8 -33
- package/dist/composables/usePopover/index.d.mts +332 -4532
- package/dist/composables/usePopover/index.d.ts +332 -4532
- package/dist/composables/useShowHide.d.mts +21 -15
- package/dist/composables/useShowHide.d.ts +21 -15
- package/dist/composables/useToast/index.d.mts +7 -18
- package/dist/composables/useToast/index.d.ts +7 -18
- package/dist/console-DaUCJgpk.js +15 -0
- package/dist/console-DaUCJgpk.js.map +1 -0
- package/dist/{constants-Ba9iJn2H.mjs → constants-Cap5sNf8.js} +1 -1
- package/dist/{constants-BLIvvaat.js.map → constants-Cap5sNf8.js.map} +1 -1
- package/dist/{debounce-DHxNfjan.mjs → debounce-Xj7wsAmR.js} +2 -2
- package/dist/{debounce-D6kifS6w.js.map → debounce-Xj7wsAmR.js.map} +1 -1
- package/dist/{dist-Dk9C_HFS.mjs → dist-9-XTMhb-.js} +5 -539
- package/dist/dist-9-XTMhb-.js.map +1 -0
- package/dist/dist-B-regXAP.js +123 -0
- package/dist/dist-B-regXAP.js.map +1 -0
- package/dist/dist-DKc2ivHS.js +411 -0
- package/dist/dist-DKc2ivHS.js.map +1 -0
- package/dist/{dom-AhkaSoh8.mjs → dom-BdUQrX99.js} +3 -2
- package/dist/dom-BdUQrX99.js.map +1 -0
- package/dist/{flattenFragments-ClbLQGqR.mjs → flattenFragments-B15oMVs-.js} +1 -1
- package/dist/{flattenFragments-C1WWqm25.js.map → flattenFragments-B15oMVs-.js.map} +1 -1
- package/dist/{floating-ui.vue-CH2o_mZU.mjs → floating-ui.dom-C7UZexJK.js} +114 -338
- package/dist/floating-ui.dom-C7UZexJK.js.map +1 -0
- package/dist/{floatingUi-62aeQtAb.mjs → floatingUi-BlKoACvc.js} +194 -27
- package/dist/floatingUi-BlKoACvc.js.map +1 -0
- package/dist/{functions-BcMenQqL.mjs → functions-BUZ1y9RA.js} +1 -1
- package/dist/functions-BUZ1y9RA.js.map +1 -0
- package/dist/{getClasses-COokMI60.mjs → getClasses-BlbbSJNl.js} +1 -1
- package/dist/{getClasses-8P0iBind.js.map → getClasses-BlbbSJNl.js.map} +1 -1
- package/dist/{getElement-D2Jr1cbp.mjs → getElement-uvhh1lgL.js} +2 -2
- package/dist/{getElement-DWGFJn0w.js.map → getElement-uvhh1lgL.js.map} +1 -1
- package/dist/{keys-DU7sQgl3.mjs → keys-BgLwJbLV.js} +1 -1
- package/dist/keys-BgLwJbLV.js.map +1 -0
- package/dist/{object-CHQkkner.mjs → object-C7YmCGEm.js} +10 -6
- package/dist/object-C7YmCGEm.js.map +1 -0
- package/dist/{registryAccess-BkJDdh-3.mjs → registryAccess-YFj5ZD5T.js} +1 -1
- package/dist/{registryAccess-B9QDQwV8.js.map → registryAccess-YFj5ZD5T.js.map} +1 -1
- package/dist/src/components/BAccordion/index.mjs +1 -1
- package/dist/src/components/BAlert/index.mjs +1 -1
- package/dist/src/components/BApp/index.mjs +1 -1
- package/dist/src/components/BAspect/index.mjs +1 -1
- package/dist/src/components/BAutocomplete/index.mjs +1 -1
- package/dist/src/components/BAvatar/index.mjs +1 -1
- package/dist/src/components/BBadge/index.mjs +1 -1
- package/dist/src/components/BBreadcrumb/index.mjs +1 -1
- package/dist/src/components/BButton/index.mjs +3 -3
- package/dist/src/components/BCard/index.mjs +2 -2
- package/dist/src/components/BCarousel/index.mjs +1 -1
- package/dist/src/components/BCol/index.mjs +1 -1
- package/dist/src/components/BCollapse/index.mjs +1 -1
- package/dist/src/components/BContainer/index.mjs +3 -3
- package/dist/src/components/BDateField/index.mjs +1 -1
- package/dist/src/components/BDatePicker/index.mjs +1 -1
- package/dist/src/components/BDropdown/index.mjs +2 -2
- package/dist/src/components/BForm/index.mjs +3 -3
- package/dist/src/components/BFormCheckbox/index.mjs +1 -1
- package/dist/src/components/BFormFile/index.mjs +1 -1
- package/dist/src/components/BFormGroup/index.mjs +1 -1
- package/dist/src/components/BFormInput/index.mjs +1 -1
- package/dist/src/components/BFormOtp/index.mjs +1 -1
- package/dist/src/components/BFormRadio/index.mjs +1 -1
- package/dist/src/components/BFormRating/index.mjs +1 -1
- package/dist/src/components/BFormSelect/index.mjs +2 -2
- package/dist/src/components/BFormSpinbutton/index.mjs +1 -1
- package/dist/src/components/BFormTags/index.mjs +2 -2
- package/dist/src/components/BFormTextarea/index.mjs +1 -1
- package/dist/src/components/BImg/index.mjs +1 -1
- package/dist/src/components/BInputGroup/index.mjs +2 -2
- package/dist/src/components/BLink/index.mjs +1 -1
- package/dist/src/components/BListGroup/index.mjs +1 -1
- package/dist/src/components/BModal/index.mjs +1 -1
- package/dist/src/components/BNav/index.mjs +1 -1
- package/dist/src/components/BNavbar/index.mjs +1 -1
- package/dist/src/components/BOffcanvas/index.mjs +1 -1
- package/dist/src/components/BOverlay/index.mjs +1 -1
- package/dist/src/components/BPagination/index.mjs +1 -1
- package/dist/src/components/BPlaceholder/index.mjs +1 -1
- package/dist/src/components/BPopover/index.mjs +1 -1
- package/dist/src/components/BProgress/index.mjs +1 -1
- package/dist/src/components/BRow/index.mjs +1 -1
- package/dist/src/components/BSpinner/index.mjs +1 -1
- package/dist/src/components/BTable/index.mjs +2 -2
- package/dist/src/components/BTabs/index.mjs +1 -1
- package/dist/src/components/BTimeField/index.mjs +1 -1
- package/dist/src/components/BToast/index.mjs +1 -1
- package/dist/src/components/BTooltip/index.mjs +1 -1
- package/dist/src/components/index.mjs +60 -68
- package/dist/src/composables/index.mjs +5 -8
- package/dist/src/composables/index.mjs.map +1 -1
- package/dist/src/composables/orchestratorShared/index.mjs +79 -82
- package/dist/src/composables/orchestratorShared/index.mjs.map +1 -1
- package/dist/src/composables/useBreadcrumb/index.mjs +1 -1
- package/dist/src/composables/useBreadcrumb/index.mjs.map +1 -1
- package/dist/src/composables/useColorMode/index.mjs +2 -2
- package/dist/src/composables/useColorMode/index.mjs.map +1 -1
- package/dist/src/composables/useModal/index.mjs +65 -64
- package/dist/src/composables/useModal/index.mjs.map +1 -1
- package/dist/src/composables/usePopover/index.mjs +51 -68
- package/dist/src/composables/usePopover/index.mjs.map +1 -1
- package/dist/src/composables/useProvideDefaults/index.mjs +4 -3
- package/dist/src/composables/useProvideDefaults/index.mjs.map +1 -1
- package/dist/src/composables/useRegistry/index.mjs +5 -3
- package/dist/src/composables/useRegistry/index.mjs.map +1 -1
- package/dist/src/composables/useScrollLock/index.mjs +2 -1
- package/dist/src/composables/useScrollLock/index.mjs.map +1 -1
- package/dist/src/composables/useScrollspy/index.mjs +16 -13
- package/dist/src/composables/useScrollspy/index.mjs.map +1 -1
- package/dist/src/composables/useToast/index.mjs +45 -66
- package/dist/src/composables/useToast/index.mjs.map +1 -1
- package/dist/src/composables/useToggle/index.mjs +5 -3
- package/dist/src/composables/useToggle/index.mjs.map +1 -1
- package/dist/src/directives/BColorMode/index.mjs.map +1 -1
- package/dist/src/directives/BPopover/index.mjs +2 -2
- package/dist/src/directives/BPopover/index.mjs.map +1 -1
- package/dist/src/directives/BScrollspy/index.mjs +3 -3
- package/dist/src/directives/BScrollspy/index.mjs.map +1 -1
- package/dist/src/directives/BToggle/index.mjs +8 -6
- package/dist/src/directives/BToggle/index.mjs.map +1 -1
- package/dist/src/directives/BTooltip/index.mjs +2 -2
- package/dist/src/directives/BTooltip/index.mjs.map +1 -1
- package/dist/src/directives/index.mjs +1 -2
- package/dist/src/plugins/createBootstrap/index.mjs +1 -1
- package/dist/src/plugins/createBootstrap/index.mjs.map +1 -1
- package/dist/src/plugins/index.mjs +1 -1
- package/dist/src/plugins/orchestrator/index.mjs +1 -1
- package/dist/src/plugins/orchestrator/index.mjs.map +1 -1
- package/dist/src/plugins/registry/index.mjs +1 -1
- package/dist/src/plugins/registry/index.mjs.map +1 -1
- package/dist/src/plugins/rtl/index.mjs +1 -1
- package/dist/src/plugins/rtl/index.mjs.map +1 -1
- package/dist/src/resolvers/index.mjs +2 -2
- package/dist/src/resolvers/index.mjs.map +1 -1
- package/dist/src/types/index.mjs +2 -2
- package/dist/src/utils/index.mjs +2 -2
- package/dist/{stringUtils-D4eEDlt1.mjs → stringUtils-CVySsg3y.js} +2 -2
- package/dist/{stringUtils-68ZN_GRt.js.map → stringUtils-CVySsg3y.js.map} +1 -1
- package/dist/types/BootstrapVueOptions.d.mts +1 -4
- package/dist/types/BootstrapVueOptions.d.ts +1 -4
- package/dist/types/ComponentOrchestratorTypes.d.mts +62 -186
- package/dist/types/ComponentOrchestratorTypes.d.ts +62 -186
- package/dist/types/ComponentProps.d.mts +2 -0
- package/dist/types/ComponentProps.d.ts +2 -0
- package/dist/types/ComponentSlots.d.mts +1 -1
- package/dist/types/ComponentSlots.d.ts +1 -1
- package/dist/{useAlignment-DuR8ymKI.mjs → useAlignment-DaP-psIh.js} +1 -1
- package/dist/{useAlignment-oKolnDpb.js.map → useAlignment-DaP-psIh.js.map} +1 -1
- package/dist/{useAriaInvalid-apOwgexm.mjs → useAriaInvalid-CRUhkD2V.js} +1 -1
- package/dist/{useAriaInvalid-CHHPHNLU.js.map → useAriaInvalid-CRUhkD2V.js.map} +1 -1
- package/dist/{useColorVariantClasses-CqeXHjRh.mjs → useColorVariantClasses-DHQvLjek.js} +1 -1
- package/dist/{useColorVariantClasses-Dq0sOYDL.js.map → useColorVariantClasses-DHQvLjek.js.map} +1 -1
- package/dist/{useCountdownHover-C3NXiAaF.mjs → useCountdownHover-BN8vJIQW.js} +4 -3
- package/dist/{useCountdownHover-DbVhE-N0.js.map → useCountdownHover-BN8vJIQW.js.map} +1 -1
- package/dist/{useDateField-CJKgollJ.mjs → useDateField-CQZb799C.js} +680 -627
- package/dist/useDateField-CQZb799C.js.map +1 -0
- package/dist/{useDefaults-DseelK6y.mjs → useDefaults-BzP4qZBu.js} +2 -2
- package/dist/{useDefaults-C0CYry78.js.map → useDefaults-BzP4qZBu.js.map} +1 -1
- package/dist/{useFormCheck-BKXrwS3g.mjs → useFormCheck-fArncQY5.js} +3 -3
- package/dist/{useFormCheck-DYjLG4WA.js.map → useFormCheck-fArncQY5.js.map} +1 -1
- package/dist/{useFormInput-CXl8rpD0.mjs → useFormInput-DZ_3ZH1o.js} +8 -7
- package/dist/{useFormInput-ip9hN2AU.js.map → useFormInput-DZ_3ZH1o.js.map} +1 -1
- package/dist/{useFormSelect-BM0rsjni.mjs → useFormSelect-CwS8YuiQ.js} +3 -3
- package/dist/{useFormSelect-ClmzGzOy.js.map → useFormSelect-CwS8YuiQ.js.map} +1 -1
- package/dist/{useForwardExpose-Cob6LlGd.mjs → useForwardExpose-DDvk7mir.js} +5 -13
- package/dist/useForwardExpose-DDvk7mir.js.map +1 -0
- package/dist/{useId-D1sqXtwx.mjs → useId-Fh-Arhb7.js} +2 -2
- package/dist/{useId-BkAY2oh6.js.map → useId-Fh-Arhb7.js.map} +1 -1
- package/dist/{useKbd-DfmgFov6.mjs → useKbd-DRsaFU_f.js} +6 -18
- package/dist/useKbd-DRsaFU_f.js.map +1 -0
- package/dist/{useNumberishToStyle-DgS1slD3.mjs → useNumberishToStyle-DCnYcI6A.js} +2 -2
- package/dist/{useNumberishToStyle-BtMa0R27.js.map → useNumberishToStyle-DCnYcI6A.js.map} +1 -1
- package/dist/{useRadiusElementClasses-BW832F7F.mjs → useRadiusElementClasses-CKCJjpkK.js} +1 -1
- package/dist/{useRadiusElementClasses-DWiUVgex.js.map → useRadiusElementClasses-CKCJjpkK.js.map} +1 -1
- package/dist/{useRtl-CGoXBxNo.mjs → useRtl-FeLayV4k.js} +3 -3
- package/dist/{useRtl-BSgvbs5F.js.map → useRtl-FeLayV4k.js.map} +1 -1
- package/dist/{useSafeScrollLock-Me5LyqjD.mjs → useSafeScrollLock-PVgSASYu.js} +136 -216
- package/dist/useSafeScrollLock-PVgSASYu.js.map +1 -0
- package/dist/{useShowHide-CBFt1_EW.mjs → useShowHide-C95Y9EKL.js} +15 -14
- package/dist/useShowHide-C95Y9EKL.js.map +1 -0
- package/dist/{useStateClass-DxlL_m2E.mjs → useStateClass-BF7kf2zK.js} +1 -1
- package/dist/{useStateClass-CXK3nCg9.js.map → useStateClass-BF7kf2zK.js.map} +1 -1
- package/dist/utils/console.d.mts +2 -0
- package/dist/utils/console.d.ts +2 -0
- package/dist/utils/keys.d.mts +12 -4
- package/dist/utils/keys.d.ts +12 -4
- package/dist/{utils-CWvndqPg.mjs → utils-nRGGHA_i.js} +14 -10
- package/dist/utils-nRGGHA_i.js.map +1 -0
- package/package.json +65 -136
- package/dist/BAccordion-D51b9HVD.mjs.map +0 -1
- package/dist/BAccordion-DYmuqZIG.js +0 -360
- package/dist/BAccordion-DYmuqZIG.js.map +0 -1
- package/dist/BAlert-Ce2uxrJi.mjs.map +0 -1
- package/dist/BAlert-croEtrQu.js +0 -297
- package/dist/BAlert-croEtrQu.js.map +0 -1
- package/dist/BApp-B-fUrnpK.mjs.map +0 -1
- package/dist/BApp-DOvEe1jo.js +0 -181
- package/dist/BApp-DOvEe1jo.js.map +0 -1
- package/dist/BAspect-CUIU48Ck.js +0 -50
- package/dist/BAspect-wfiXM4KA.mjs.map +0 -1
- package/dist/BAutocomplete-CH-bQzME.mjs.map +0 -1
- package/dist/BAutocomplete-DLDFAV5_.js +0 -2402
- package/dist/BAutocomplete-DLDFAV5_.js.map +0 -1
- package/dist/BAvatar-FGK0dK0x.js +0 -386
- package/dist/BAvatar-FGK0dK0x.js.map +0 -1
- package/dist/BAvatar-iALHbqVk.mjs.map +0 -1
- package/dist/BBadge-Cx_CdauK.mjs.map +0 -1
- package/dist/BBadge-Db6SEnzy.js +0 -145
- package/dist/BBreadcrumb-B9ra7vg2.js +0 -166
- package/dist/BBreadcrumb-BxADbg0O.mjs.map +0 -1
- package/dist/BButton-BSa7LfL5.mjs.map +0 -1
- package/dist/BButton-DRRlzkyK.js +0 -156
- package/dist/BButton-PY7AANXJ.mjs.map +0 -1
- package/dist/BButton-aYtMnyHu.js +0 -190
- package/dist/BCard-BWoruisp.mjs.map +0 -1
- package/dist/BCard-Bh8RLMo_.js +0 -52
- package/dist/BCard-CHbKv2OR.mjs.map +0 -1
- package/dist/BCard-DwNYhVmg.js +0 -444
- package/dist/BCarousel-2JB21Pcu.js +0 -427
- package/dist/BCarousel-B6_bgQpl.mjs.map +0 -1
- package/dist/BCloseButton-CKTKr4PS.mjs.map +0 -1
- package/dist/BCloseButton-D42zHRLP.js +0 -45
- package/dist/BCol-B3VeEk9z.mjs.map +0 -1
- package/dist/BCol-Ck9VydHj.js +0 -140
- package/dist/BCollapse-CDLYLSZo.js +0 -183
- package/dist/BCollapse-CDLYLSZo.js.map +0 -1
- package/dist/BCollapse-kqhe4AmL.mjs.map +0 -1
- package/dist/BContainer-ATfhaxTc.mjs.map +0 -1
- package/dist/BContainer-CcF6dgtI.js +0 -44
- package/dist/BDateField-CccP3H1R.mjs.map +0 -1
- package/dist/BDateField-DzZw5FRX.js +0 -919
- package/dist/BDateField-DzZw5FRX.js.map +0 -1
- package/dist/BDatePicker-BDkzkOcm.js +0 -5138
- package/dist/BDatePicker-BDkzkOcm.js.map +0 -1
- package/dist/BDatePicker-BnwnSkBg.mjs.map +0 -1
- package/dist/BDropdown-0E8x5kk6.mjs.map +0 -1
- package/dist/BDropdown-B1DbvVzm.mjs.map +0 -1
- package/dist/BDropdown-BPFtkX3p.js +0 -403
- package/dist/BDropdown-BPFtkX3p.js.map +0 -1
- package/dist/BDropdown-DKCgBzYS.js +0 -415
- package/dist/BForm-6JlWdQMO.js +0 -126
- package/dist/BForm-BVfW08s5.mjs.map +0 -1
- package/dist/BForm-DJu2hDV_.mjs.map +0 -1
- package/dist/BForm-cnRpggt9.js +0 -51
- package/dist/BFormCheckbox-Baf_9BSc.mjs.map +0 -1
- package/dist/BFormCheckbox-D5ySHMJ8.js +0 -489
- package/dist/BFormCheckbox-D5ySHMJ8.js.map +0 -1
- package/dist/BFormFile-CZebm0Cp.mjs.map +0 -1
- package/dist/BFormFile-MISLntyJ.js +0 -423
- package/dist/BFormGroup-Bk1t-D1N.js +0 -490
- package/dist/BFormGroup-Bk1t-D1N.js.map +0 -1
- package/dist/BFormGroup-vysRPb99.mjs.map +0 -1
- package/dist/BFormInput-CBwwDjfC.js +0 -142
- package/dist/BFormInput-sEfU3CuN.mjs.map +0 -1
- package/dist/BFormOtp-C8X3u1od.mjs.map +0 -1
- package/dist/BFormOtp-CLrQJRPe.js +0 -542
- package/dist/BFormOtp-CLrQJRPe.js.map +0 -1
- package/dist/BFormRadio-B2yu-o2v.js +0 -432
- package/dist/BFormRadio-B2yu-o2v.js.map +0 -1
- package/dist/BFormRadio-COc_IbxC.mjs.map +0 -1
- package/dist/BFormRating-CIgPVsH_.mjs.map +0 -1
- package/dist/BFormRating-CSdRxN5z.js +0 -263
- package/dist/BFormRating-CSdRxN5z.js.map +0 -1
- package/dist/BFormSelect-CI92Dv27.js +0 -310
- package/dist/BFormSelect-CI92Dv27.js.map +0 -1
- package/dist/BFormSelect-P-InkOm-.mjs.map +0 -1
- package/dist/BFormSelectOption-DFN4lPRh.mjs.map +0 -1
- package/dist/BFormSelectOption-DrwJucNf.js +0 -46
- package/dist/BFormSpinbutton-1gTz4nTo.js +0 -447
- package/dist/BFormSpinbutton-6qkTBF_4.mjs.map +0 -1
- package/dist/BFormTag-CeV0MSRC.js +0 -86
- package/dist/BFormTag-CnzI39y9.mjs.map +0 -1
- package/dist/BFormTags-BMltSaKL.mjs.map +0 -1
- package/dist/BFormTags-BhO60uiL.js +0 -427
- package/dist/BFormTags-BhO60uiL.js.map +0 -1
- package/dist/BFormTextarea-C3Cj0DWj.js +0 -203
- package/dist/BFormTextarea-DN1gAfSo.mjs.map +0 -1
- package/dist/BFormValidFeedback-CBYxQLDz.mjs.map +0 -1
- package/dist/BFormValidFeedback-Kwxh798d.js +0 -223
- package/dist/BImg-JKJLgYYT.js +0 -168
- package/dist/BImg-QBS2ECBc.mjs.map +0 -1
- package/dist/BInputGroup-Bvlfv6VD.js +0 -55
- package/dist/BInputGroup-D4fW324B.js +0 -31
- package/dist/BInputGroup-DiTSexkT.mjs.map +0 -1
- package/dist/BInputGroup-X2Z53RJx.mjs.map +0 -1
- package/dist/BLink-Dfgte6dQ.mjs.map +0 -1
- package/dist/BLink-kLEjleB1.js +0 -276
- package/dist/BListGroup-C8JOzHTz.js +0 -167
- package/dist/BListGroup-DwTLpNiD.mjs.map +0 -1
- package/dist/BModal-C-ZCau2E.mjs.map +0 -1
- package/dist/BModal-VstTwEq9.js +0 -521
- package/dist/BModal-VstTwEq9.js.map +0 -1
- package/dist/BNav-DCLambmM.js +0 -453
- package/dist/BNav-DfYvjfRK.mjs.map +0 -1
- package/dist/BNavbar-BLWaZJRP.js +0 -245
- package/dist/BNavbar-xYaikQVY.mjs.map +0 -1
- package/dist/BOffcanvas-C7HenFW0.js +0 -331
- package/dist/BOffcanvas-C7HenFW0.js.map +0 -1
- package/dist/BOffcanvas-CF-dWeez.mjs.map +0 -1
- package/dist/BOverlay-Bh2PIN_q.mjs.map +0 -1
- package/dist/BOverlay-Bh4ldxgt.js +0 -203
- package/dist/BPagination-D75q-ZNg.mjs.map +0 -1
- package/dist/BPagination-fbjFAtxu.js +0 -446
- package/dist/BPlaceholder-B3rs_39w.js +0 -326
- package/dist/BPlaceholder-DPQ6mCLN.mjs.map +0 -1
- package/dist/BProgress-BZlrPYhA.mjs.map +0 -1
- package/dist/BProgress-th0-eZWo.js +0 -147
- package/dist/BRow-7AOuFiSy.js +0 -70
- package/dist/BRow-eGSUYGCW.mjs.map +0 -1
- package/dist/BSpinner-CUfGqviV.mjs.map +0 -1
- package/dist/BSpinner-DbYIp-C7.js +0 -60
- package/dist/BTable-BCWW00u_.js +0 -1903
- package/dist/BTable-BCWW00u_.js.map +0 -1
- package/dist/BTable-DUHxxWv5.mjs.map +0 -1
- package/dist/BTableSimple-BkdGAAKb.js +0 -137
- package/dist/BTableSimple-C-jn9Nwh.mjs.map +0 -1
- package/dist/BTabs-CvecFg5N.js +0 -607
- package/dist/BTabs-D_vWlBjT.mjs.map +0 -1
- package/dist/BTimeField-BSDaZogC.mjs.map +0 -1
- package/dist/BTimeField-BT5HXecp.js +0 -517
- package/dist/BTimeField-BT5HXecp.js.map +0 -1
- package/dist/BToast-DR0pek4W.js +0 -308
- package/dist/BToast-DR0pek4W.js.map +0 -1
- package/dist/BToast-Y8BayxES.mjs.map +0 -1
- package/dist/BTooltip-CVP8HdkU.mjs.map +0 -1
- package/dist/BTooltip-DPLYtaL1.js +0 -213
- package/dist/BootstrapVueOptions-DeViqxoD.js +0 -179
- package/dist/BootstrapVueOptions-DeViqxoD.js.map +0 -1
- package/dist/BootstrapVueOptions-Dt1TQdih.mjs.map +0 -1
- package/dist/ConditionalTeleport-B4KYZIM6.mjs.map +0 -1
- package/dist/ConditionalTeleport-BDWcebyD.js +0 -34
- package/dist/ConditionalWrapper-DZH_VSwb.js +0 -31
- package/dist/ConditionalWrapper-Dbc_O6qe.mjs.map +0 -1
- package/dist/DateRangeFieldInput-B86VEz0H.mjs.map +0 -1
- package/dist/DateRangeFieldInput-HvvI2You.js +0 -762
- package/dist/DateRangeFieldInput-HvvI2You.js.map +0 -1
- package/dist/PopperContent-BS_eKjzD.js +0 -1515
- package/dist/PopperContent-BS_eKjzD.js.map +0 -1
- package/dist/PopperContent-DmSgsjSC.mjs.map +0 -1
- package/dist/VisuallyHidden-C4sXnc-k.mjs.map +0 -1
- package/dist/VisuallyHidden-Cx0phlXT.js +0 -222
- package/dist/VisuallyHidden-Cx0phlXT.js.map +0 -1
- package/dist/VisuallyHiddenInput-BNrInt6d.js +0 -147
- package/dist/VisuallyHiddenInput-BNrInt6d.js.map +0 -1
- package/dist/VisuallyHiddenInput-DKIzxsQR.mjs.map +0 -1
- package/dist/bootstrap-vue-next.umd.js +0 -275
- package/dist/chunk-CoQrYLCe.js +0 -50
- package/dist/classes-B0E5Y78Y.mjs.map +0 -1
- package/dist/classes-D5wrmmVs.js +0 -92
- package/dist/constants-BLIvvaat.js +0 -123
- package/dist/constants-Ba9iJn2H.mjs.map +0 -1
- package/dist/debounce-D6kifS6w.js +0 -88
- package/dist/debounce-DHxNfjan.mjs.map +0 -1
- package/dist/dist-DiXKLh_W.js +0 -2064
- package/dist/dist-DiXKLh_W.js.map +0 -1
- package/dist/dist-Dk9C_HFS.mjs.map +0 -1
- package/dist/dom-AhkaSoh8.mjs.map +0 -1
- package/dist/dom-Bs6DzM72.js +0 -98
- package/dist/dom-Bs6DzM72.js.map +0 -1
- package/dist/flattenFragments-C1WWqm25.js +0 -18
- package/dist/flattenFragments-ClbLQGqR.mjs.map +0 -1
- package/dist/floating-ui.vue-CH2o_mZU.mjs.map +0 -1
- package/dist/floating-ui.vue-DDOIU2nS.js +0 -1773
- package/dist/floating-ui.vue-DDOIU2nS.js.map +0 -1
- package/dist/floatingUi-62aeQtAb.mjs.map +0 -1
- package/dist/floatingUi-DQ5bHmy3.js +0 -598
- package/dist/floatingUi-DQ5bHmy3.js.map +0 -1
- package/dist/functions-BcMenQqL.mjs.map +0 -1
- package/dist/functions-Bx1HDqMv.js +0 -11
- package/dist/functions-Bx1HDqMv.js.map +0 -1
- package/dist/getClasses-8P0iBind.js +0 -19
- package/dist/getClasses-COokMI60.mjs.map +0 -1
- package/dist/getElement-D2Jr1cbp.mjs.map +0 -1
- package/dist/getElement-DWGFJn0w.js +0 -19
- package/dist/keys-BMye8nSf.js +0 -187
- package/dist/keys-BMye8nSf.js.map +0 -1
- package/dist/keys-DU7sQgl3.mjs.map +0 -1
- package/dist/object-BN7QwMcz.js +0 -140
- package/dist/object-BN7QwMcz.js.map +0 -1
- package/dist/object-CHQkkner.mjs.map +0 -1
- package/dist/registryAccess-B9QDQwV8.js +0 -39
- package/dist/registryAccess-BkJDdh-3.mjs.map +0 -1
- package/dist/src/components/BAccordion/index.umd.js +0 -4
- package/dist/src/components/BAlert/index.umd.js +0 -3
- package/dist/src/components/BApp/index.umd.js +0 -4
- package/dist/src/components/BAspect/index.umd.js +0 -3
- package/dist/src/components/BAutocomplete/index.umd.js +0 -3
- package/dist/src/components/BAvatar/index.umd.js +0 -4
- package/dist/src/components/BBadge/index.umd.js +0 -3
- package/dist/src/components/BBreadcrumb/index.umd.js +0 -4
- package/dist/src/components/BButton/index.umd.js +0 -8
- package/dist/src/components/BCard/index.umd.js +0 -12
- package/dist/src/components/BCarousel/index.umd.js +0 -4
- package/dist/src/components/BCol/index.umd.js +0 -3
- package/dist/src/components/BCollapse/index.umd.js +0 -3
- package/dist/src/components/BContainer/index.umd.js +0 -7
- package/dist/src/components/BDateField/index.umd.js +0 -5
- package/dist/src/components/BDatePicker/index.umd.js +0 -4
- package/dist/src/components/BDropdown/index.umd.js +0 -11
- package/dist/src/components/BForm/index.umd.js +0 -11
- package/dist/src/components/BFormCheckbox/index.umd.js +0 -4
- package/dist/src/components/BFormFile/index.umd.js +0 -3
- package/dist/src/components/BFormGroup/index.umd.js +0 -3
- package/dist/src/components/BFormInput/index.umd.js +0 -4
- package/dist/src/components/BFormOtp/index.umd.js +0 -3
- package/dist/src/components/BFormRadio/index.umd.js +0 -4
- package/dist/src/components/BFormRating/index.umd.js +0 -3
- package/dist/src/components/BFormSelect/index.umd.js +0 -6
- package/dist/src/components/BFormSpinbutton/index.umd.js +0 -3
- package/dist/src/components/BFormTags/index.umd.js +0 -5
- package/dist/src/components/BFormTextarea/index.umd.js +0 -3
- package/dist/src/components/BImg/index.umd.js +0 -3
- package/dist/src/components/BInputGroup/index.umd.js +0 -5
- package/dist/src/components/BLink/index.umd.js +0 -3
- package/dist/src/components/BListGroup/index.umd.js +0 -4
- package/dist/src/components/BModal/index.umd.js +0 -3
- package/dist/src/components/BNav/index.umd.js +0 -7
- package/dist/src/components/BNavbar/index.umd.js +0 -6
- package/dist/src/components/BOffcanvas/index.umd.js +0 -3
- package/dist/src/components/BOverlay/index.umd.js +0 -3
- package/dist/src/components/BPagination/index.umd.js +0 -3
- package/dist/src/components/BPlaceholder/index.umd.js +0 -7
- package/dist/src/components/BPopover/index.umd.js +0 -3
- package/dist/src/components/BProgress/index.umd.js +0 -4
- package/dist/src/components/BRow/index.umd.js +0 -3
- package/dist/src/components/BSpinner/index.umd.js +0 -3
- package/dist/src/components/BTable/index.umd.js +0 -12
- package/dist/src/components/BTabs/index.umd.js +0 -4
- package/dist/src/components/BTimeField/index.umd.js +0 -3
- package/dist/src/components/BToast/index.umd.js +0 -3
- package/dist/src/components/BTooltip/index.umd.js +0 -3
- package/dist/src/components/index.umd.js +0 -301
- package/dist/src/components/index.umd.js.map +0 -1
- package/dist/src/composables/index.umd.js +0 -53
- package/dist/src/composables/index.umd.js.map +0 -1
- package/dist/src/composables/orchestratorShared/index.umd.js +0 -114
- package/dist/src/composables/orchestratorShared/index.umd.js.map +0 -1
- package/dist/src/composables/useBreadcrumb/index.umd.js +0 -37
- package/dist/src/composables/useBreadcrumb/index.umd.js.map +0 -1
- package/dist/src/composables/useColorMode/index.umd.js +0 -18
- package/dist/src/composables/useColorMode/index.umd.js.map +0 -1
- package/dist/src/composables/useModal/index.umd.js +0 -176
- package/dist/src/composables/useModal/index.umd.js.map +0 -1
- package/dist/src/composables/usePopover/index.umd.js +0 -90
- package/dist/src/composables/usePopover/index.umd.js.map +0 -1
- package/dist/src/composables/useProvideDefaults/index.umd.js +0 -42
- package/dist/src/composables/useProvideDefaults/index.umd.js.map +0 -1
- package/dist/src/composables/useRegistry/index.umd.js +0 -135
- package/dist/src/composables/useRegistry/index.umd.js.map +0 -1
- package/dist/src/composables/useScrollLock/index.umd.js +0 -8
- package/dist/src/composables/useScrollLock/index.umd.js.map +0 -1
- package/dist/src/composables/useScrollspy/index.umd.js +0 -144
- package/dist/src/composables/useScrollspy/index.umd.js.map +0 -1
- package/dist/src/composables/useToast/index.umd.js +0 -90
- package/dist/src/composables/useToast/index.umd.js.map +0 -1
- package/dist/src/composables/useToggle/index.umd.js +0 -34
- package/dist/src/composables/useToggle/index.umd.js.map +0 -1
- package/dist/src/directives/BColorMode/index.umd.js +0 -15
- package/dist/src/directives/BColorMode/index.umd.js.map +0 -1
- package/dist/src/directives/BModal/index.umd.js +0 -3
- package/dist/src/directives/BPopover/index.umd.js +0 -14
- package/dist/src/directives/BPopover/index.umd.js.map +0 -1
- package/dist/src/directives/BScrollspy/index.umd.js +0 -35
- package/dist/src/directives/BScrollspy/index.umd.js.map +0 -1
- package/dist/src/directives/BToggle/index.umd.js +0 -77
- package/dist/src/directives/BToggle/index.umd.js.map +0 -1
- package/dist/src/directives/BTooltip/index.umd.js +0 -16
- package/dist/src/directives/BTooltip/index.umd.js.map +0 -1
- package/dist/src/directives/index.umd.js +0 -32
- package/dist/src/directives/index.umd.js.map +0 -1
- package/dist/src/plugins/createBootstrap/index.umd.js +0 -19
- package/dist/src/plugins/createBootstrap/index.umd.js.map +0 -1
- package/dist/src/plugins/index.umd.js +0 -26
- package/dist/src/plugins/index.umd.js.map +0 -1
- package/dist/src/plugins/orchestrator/index.umd.js +0 -13
- package/dist/src/plugins/orchestrator/index.umd.js.map +0 -1
- package/dist/src/plugins/registry/index.umd.js +0 -62
- package/dist/src/plugins/registry/index.umd.js.map +0 -1
- package/dist/src/plugins/rtl/index.umd.js +0 -21
- package/dist/src/plugins/rtl/index.umd.js.map +0 -1
- package/dist/src/resolvers/index.umd.js +0 -94
- package/dist/src/resolvers/index.umd.js.map +0 -1
- package/dist/src/types/index.umd.js +0 -27
- package/dist/src/types/index.umd.js.map +0 -1
- package/dist/src/utils/index.umd.js +0 -21
- package/dist/src/utils/index.umd.js.map +0 -1
- package/dist/stringUtils-68ZN_GRt.js +0 -71
- package/dist/stringUtils-D4eEDlt1.mjs.map +0 -1
- package/dist/useAlignment-DuR8ymKI.mjs.map +0 -1
- package/dist/useAlignment-oKolnDpb.js +0 -16
- package/dist/useAriaInvalid-CHHPHNLU.js +0 -17
- package/dist/useAriaInvalid-apOwgexm.mjs.map +0 -1
- package/dist/useColorVariantClasses-CqeXHjRh.mjs.map +0 -1
- package/dist/useColorVariantClasses-Dq0sOYDL.js +0 -27
- package/dist/useCountdownHover-C3NXiAaF.mjs.map +0 -1
- package/dist/useCountdownHover-DbVhE-N0.js +0 -104
- package/dist/useDateField-CJKgollJ.mjs.map +0 -1
- package/dist/useDateField-DWv3600o.js +0 -3872
- package/dist/useDateField-DWv3600o.js.map +0 -1
- package/dist/useDefaults-C0CYry78.js +0 -76
- package/dist/useDefaults-DseelK6y.mjs.map +0 -1
- package/dist/useFormCheck-BKXrwS3g.mjs.map +0 -1
- package/dist/useFormCheck-DYjLG4WA.js +0 -82
- package/dist/useFormInput-CXl8rpD0.mjs.map +0 -1
- package/dist/useFormInput-ip9hN2AU.js +0 -117
- package/dist/useFormSelect-BM0rsjni.mjs.map +0 -1
- package/dist/useFormSelect-ClmzGzOy.js +0 -58
- package/dist/useForwardExpose-BpZJluPs.js +0 -80
- package/dist/useForwardExpose-BpZJluPs.js.map +0 -1
- package/dist/useForwardExpose-Cob6LlGd.mjs.map +0 -1
- package/dist/useId-BkAY2oh6.js +0 -17
- package/dist/useId-D1sqXtwx.mjs.map +0 -1
- package/dist/useKbd-DfmgFov6.mjs.map +0 -1
- package/dist/useKbd-sqDCJtXL.js +0 -105
- package/dist/useKbd-sqDCJtXL.js.map +0 -1
- package/dist/useNumberishToStyle-BtMa0R27.js +0 -18
- package/dist/useNumberishToStyle-DgS1slD3.mjs.map +0 -1
- package/dist/useRadiusElementClasses-BW832F7F.mjs.map +0 -1
- package/dist/useRadiusElementClasses-DWiUVgex.js +0 -28
- package/dist/useRtl-BSgvbs5F.js +0 -26
- package/dist/useRtl-CGoXBxNo.mjs.map +0 -1
- package/dist/useSafeScrollLock-7wmPH_Hy.js +0 -1418
- package/dist/useSafeScrollLock-7wmPH_Hy.js.map +0 -1
- package/dist/useSafeScrollLock-Me5LyqjD.mjs.map +0 -1
- package/dist/useShowHide-CBFt1_EW.mjs.map +0 -1
- package/dist/useShowHide-CHm2uUep.js +0 -436
- package/dist/useShowHide-CHm2uUep.js.map +0 -1
- package/dist/useStateClass-CXK3nCg9.js +0 -16
- package/dist/useStateClass-DxlL_m2E.mjs.map +0 -1
- package/dist/utils-CWvndqPg.mjs.map +0 -1
- package/dist/utils-Dk9yAtbs.js +0 -186
- package/dist/utils-Dk9yAtbs.js.map +0 -1
- /package/dist/{chunk-D1SwGrFN.mjs → rolldown-runtime-BBjsoOtd.js} +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { d as formGroupKey, s as checkboxGroupKey } from "./keys-
|
|
2
|
-
import { m as useFocus } from "./dist-
|
|
3
|
-
import { o as isEmptySlot } from "./dom-
|
|
4
|
-
import { t as useDefaults } from "./useDefaults-
|
|
5
|
-
import { t as useId$1 } from "./useId-
|
|
6
|
-
import { t as ConditionalWrapper_default } from "./ConditionalWrapper-
|
|
7
|
-
import { a as getLabelClasses, i as getInputClasses, n as getGroupAttr, r as getGroupClasses, t as getClasses } from "./useFormCheck-
|
|
1
|
+
import { d as formGroupKey, s as checkboxGroupKey } from "./keys-BgLwJbLV.js";
|
|
2
|
+
import { m as useFocus } from "./dist-9-XTMhb-.js";
|
|
3
|
+
import { o as isEmptySlot } from "./dom-BdUQrX99.js";
|
|
4
|
+
import { t as useDefaults } from "./useDefaults-BzP4qZBu.js";
|
|
5
|
+
import { t as useId$1 } from "./useId-Fh-Arhb7.js";
|
|
6
|
+
import { t as ConditionalWrapper_default } from "./ConditionalWrapper-CCIk52zt.js";
|
|
7
|
+
import { a as getLabelClasses, i as getInputClasses, n as getGroupAttr, r as getGroupClasses, t as getClasses } from "./useFormCheck-fArncQY5.js";
|
|
8
8
|
import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, defineComponent, guardReactiveProps, inject, mergeModels, mergeProps, normalizeClass, normalizeProps, openBlock, provide, renderList, renderSlot, toDisplayString, toRef, unref, useAttrs, useModel, useSlots, useTemplateRef, vModelCheckbox, withCtx, withDirectives } from "vue";
|
|
9
9
|
//#region src/components/BFormCheckbox/BFormCheckbox.vue?vue&type=script&setup=true&lang.ts
|
|
10
10
|
var _hoisted_1$1 = [
|
|
@@ -27,7 +27,7 @@ var _hoisted_2 = ["for"];
|
|
|
27
27
|
var BFormCheckbox_default = /* @__PURE__ */ defineComponent({
|
|
28
28
|
inheritAttrs: false,
|
|
29
29
|
__name: "BFormCheckbox",
|
|
30
|
-
props:
|
|
30
|
+
props: /*@__PURE__*/ mergeModels({
|
|
31
31
|
ariaLabel: { default: void 0 },
|
|
32
32
|
ariaLabelledby: { default: void 0 },
|
|
33
33
|
autofocus: {
|
|
@@ -85,7 +85,7 @@ var BFormCheckbox_default = /* @__PURE__ */ defineComponent({
|
|
|
85
85
|
Number,
|
|
86
86
|
null
|
|
87
87
|
],
|
|
88
|
-
default:
|
|
88
|
+
default: void 0
|
|
89
89
|
},
|
|
90
90
|
wrapperAttrs: { default: void 0 },
|
|
91
91
|
inputClass: { default: void 0 },
|
|
@@ -168,7 +168,6 @@ var BFormCheckbox_default = /* @__PURE__ */ defineComponent({
|
|
|
168
168
|
const localValue = computed({
|
|
169
169
|
get: () => parentData ? parentData.modelValue.value : modelValue.value,
|
|
170
170
|
set: (newVal) => {
|
|
171
|
-
if (newVal === void 0) return;
|
|
172
171
|
indeterminate.value = false;
|
|
173
172
|
if (parentData !== null && Array.isArray(newVal)) {
|
|
174
173
|
parentData.modelValue.value = newVal;
|
|
@@ -233,7 +232,7 @@ var _hoisted_1 = ["id"];
|
|
|
233
232
|
//#region src/components/BFormCheckbox/BFormCheckboxGroupBase.vue
|
|
234
233
|
var BFormCheckboxGroupBase_default = /* @__PURE__ */ defineComponent({
|
|
235
234
|
__name: "BFormCheckboxGroupBase",
|
|
236
|
-
props:
|
|
235
|
+
props: /*@__PURE__*/ mergeModels({
|
|
237
236
|
id: { default: void 0 },
|
|
238
237
|
name: { default: void 0 },
|
|
239
238
|
size: { default: void 0 },
|
|
@@ -368,7 +367,7 @@ var BFormCheckboxGroupBase_default = /* @__PURE__ */ defineComponent({
|
|
|
368
367
|
//#region src/components/BFormCheckbox/BFormCheckboxGroup.vue
|
|
369
368
|
var BFormCheckboxGroup_default = /* @__PURE__ */ defineComponent({
|
|
370
369
|
__name: "BFormCheckboxGroup",
|
|
371
|
-
props:
|
|
370
|
+
props: /*@__PURE__*/ mergeModels({
|
|
372
371
|
options: { default: () => [] },
|
|
373
372
|
valueField: { default: "value" },
|
|
374
373
|
textField: { default: "text" },
|
|
@@ -474,4 +473,4 @@ var BFormCheckboxGroup_default = /* @__PURE__ */ defineComponent({
|
|
|
474
473
|
//#endregion
|
|
475
474
|
export { BFormCheckbox_default as n, BFormCheckboxGroup_default as t };
|
|
476
475
|
|
|
477
|
-
//# sourceMappingURL=BFormCheckbox-
|
|
476
|
+
//# sourceMappingURL=BFormCheckbox-BMhyR-J5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BFormCheckbox-BMhyR-J5.js","names":[],"sources":["../src/components/BFormCheckbox/BFormCheckbox.vue","../src/components/BFormCheckbox/BFormCheckbox.vue","../src/components/BFormCheckbox/BFormCheckboxGroupBase.vue","../src/components/BFormCheckbox/BFormCheckboxGroupBase.vue","../src/components/BFormCheckbox/BFormCheckboxGroup.vue","../src/components/BFormCheckbox/BFormCheckboxGroup.vue"],"sourcesContent":["<template>\n <ConditionalWrapper\n :skip=\"isButtonGroup\"\n v-bind=\"props.wrapperAttrs\"\n :class=\"computedWrapperClasses\"\n >\n <input\n :id=\"computedId\"\n ref=\"_input\"\n v-model=\"localValue\"\n :class=\"computedInputClasses\"\n type=\"checkbox\"\n :disabled=\"props.disabled || parentData?.disabled.value || formGroupData?.disabled.value\"\n :required=\"computedRequired || undefined\"\n :name=\"props.name || parentData?.name.value\"\n :form=\"props.form || parentData?.form.value\"\n :aria-label=\"props.ariaLabel\"\n :aria-labelledby=\"props.ariaLabelledby\"\n :aria-required=\"computedRequired || undefined\"\n :value=\"props.value\"\n :true-value=\"props.value\"\n :false-value=\"props.uncheckedValue\"\n :indeterminate=\"indeterminate || undefined\"\n v-bind=\"processedAttrs.inputAttrs\"\n />\n <label v-if=\"hasOwnLabel\" :for=\"computedId\" :class=\"labelClasses\">\n <slot />\n </label>\n </ConditionalWrapper>\n</template>\n\n<script setup lang=\"ts\">\nimport {useFocus} from '@vueuse/core'\nimport {computed, inject, useAttrs, useTemplateRef} from 'vue'\nimport {getClasses, getInputClasses, getLabelClasses} from '../../composables/useFormCheck'\nimport {checkboxGroupKey, formGroupKey} from '../../utils/keys'\nimport ConditionalWrapper from '../ConditionalWrapper.vue'\nimport {isEmptySlot} from '../../utils/dom'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport type {BFormCheckboxProps, BFormCheckboxSlots, CheckboxValue} from '../../types'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst _props = withDefaults(\n defineProps<Omit<BFormCheckboxProps, 'modelValue' | 'indeterminate'>>(),\n {\n wrapperAttrs: undefined,\n inputClass: undefined,\n ariaLabel: undefined,\n ariaLabelledby: undefined,\n autofocus: false,\n button: undefined,\n buttonGroup: false,\n buttonVariant: undefined,\n disabled: false,\n form: undefined,\n id: undefined,\n inline: undefined,\n name: undefined,\n plain: undefined,\n required: false,\n reverse: undefined,\n size: undefined,\n state: undefined,\n switch: undefined,\n uncheckedValue: undefined,\n value: true,\n }\n)\nconst props = useDefaults(_props, 'BFormCheckbox')\nconst slots = defineSlots<BFormCheckboxSlots>()\nconst attrs = useAttrs()\n\nconst modelValue = defineModel<BFormCheckboxProps['modelValue']>({\n default: undefined,\n})\nconst indeterminate = defineModel<Exclude<BFormCheckboxProps['indeterminate'], undefined>>(\n 'indeterminate',\n {\n default: false,\n }\n)\n\nconst processedAttrs = computed(() => {\n const {class: wrapperClass, ...inputAttrs} = attrs\n return {wrapperClass, inputAttrs}\n})\n\nconst computedId = useId(() => props.id, 'form-check')\n\nconst parentData = inject(checkboxGroupKey, null)\n\nconst input = useTemplateRef('_input')\n\nconst {focused} = useFocus(input, {\n initialValue: props.autofocus,\n})\n\nconst hasDefaultSlot = computed(() => !isEmptySlot(slots.default))\n\n// True default values for props that are undefined to support inheritance\nconst propDefaults = {\n plain: false,\n button: false,\n inline: false,\n reverse: false,\n switch: false,\n size: undefined,\n buttonVariant: 'secondary' as const,\n state: null,\n}\n\n// Single source of truth for resolved prop values with parent inheritance and defaults\nconst resolvedProps = computed(() => ({\n plain: props.plain ?? parentData?.plain.value ?? propDefaults.plain,\n button: props.button ?? parentData?.buttons.value ?? propDefaults.button,\n inline: props.inline ?? parentData?.inline.value ?? propDefaults.inline,\n reverse: props.reverse ?? parentData?.reverse.value ?? propDefaults.reverse,\n switch: props.switch ?? parentData?.switch.value ?? propDefaults.switch,\n state: props.state ?? parentData?.state.value ?? propDefaults.state,\n size: props.size ?? parentData?.size.value ?? propDefaults.size,\n buttonVariant:\n props.buttonVariant ?? parentData?.buttonVariant.value ?? propDefaults.buttonVariant,\n}))\n\n// Shorthand for template usage\nconst resolvedPlain = computed(() => resolvedProps.value.plain)\nconst hasOwnLabel = computed(() => hasDefaultSlot.value || !resolvedPlain.value)\n\nconst labelTargetId = computed(() => (hasOwnLabel.value ? null : computedId.value))\nconst formGroupData = inject(formGroupKey, null)?.()\nformGroupData?.track(labelTargetId)\n\nconst localValue = computed({\n get: () => (parentData ? parentData.modelValue.value : modelValue.value),\n set: (newVal) => {\n // Indeterminate is implicitly cleared when the checked state is changed to any value\n // by the user. We reflect that here by setting our indetermiate model to false\n // which will emit the indeterminate event to the parent\n indeterminate.value = false\n if (parentData !== null && Array.isArray(newVal)) {\n // The type cast isn't perfect. Array.isArray detects CheckboxValue.unknown[],\n // but since it's parentData, it should always be CheckboxValue[]\n // It doesn't quite work when props.value is an [], but this is more of a Vue issue\n parentData.modelValue.value = newVal as CheckboxValue[]\n return\n }\n modelValue.value = newVal as CheckboxValue\n },\n})\n\nconst computedRequired = computed(\n () => !!(props.name ?? parentData?.name.value) && (props.required || parentData?.required.value)\n)\n\nconst isButtonGroup = computed(() => props.buttonGroup || (parentData?.buttons.value ?? false))\n\nconst classesObject = computed(() => ({\n ...resolvedProps.value,\n hasDefaultSlot: hasDefaultSlot.value,\n}))\nconst wrapperClasses = getClasses(classesObject)\nconst computedWrapperClasses = computed(() => [\n wrapperClasses.value,\n processedAttrs.value.wrapperClass,\n])\nconst inputClasses = getInputClasses(classesObject)\nconst computedInputClasses = computed(() => [inputClasses.value, props.inputClass])\nconst labelClasses = getLabelClasses(classesObject)\n\ndefineExpose({\n blur: () => {\n focused.value = false\n },\n element: input,\n focus: () => {\n focused.value = true\n },\n})\n</script>\n","<template>\n <ConditionalWrapper\n :skip=\"isButtonGroup\"\n v-bind=\"props.wrapperAttrs\"\n :class=\"computedWrapperClasses\"\n >\n <input\n :id=\"computedId\"\n ref=\"_input\"\n v-model=\"localValue\"\n :class=\"computedInputClasses\"\n type=\"checkbox\"\n :disabled=\"props.disabled || parentData?.disabled.value || formGroupData?.disabled.value\"\n :required=\"computedRequired || undefined\"\n :name=\"props.name || parentData?.name.value\"\n :form=\"props.form || parentData?.form.value\"\n :aria-label=\"props.ariaLabel\"\n :aria-labelledby=\"props.ariaLabelledby\"\n :aria-required=\"computedRequired || undefined\"\n :value=\"props.value\"\n :true-value=\"props.value\"\n :false-value=\"props.uncheckedValue\"\n :indeterminate=\"indeterminate || undefined\"\n v-bind=\"processedAttrs.inputAttrs\"\n />\n <label v-if=\"hasOwnLabel\" :for=\"computedId\" :class=\"labelClasses\">\n <slot />\n </label>\n </ConditionalWrapper>\n</template>\n\n<script setup lang=\"ts\">\nimport {useFocus} from '@vueuse/core'\nimport {computed, inject, useAttrs, useTemplateRef} from 'vue'\nimport {getClasses, getInputClasses, getLabelClasses} from '../../composables/useFormCheck'\nimport {checkboxGroupKey, formGroupKey} from '../../utils/keys'\nimport ConditionalWrapper from '../ConditionalWrapper.vue'\nimport {isEmptySlot} from '../../utils/dom'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport type {BFormCheckboxProps, BFormCheckboxSlots, CheckboxValue} from '../../types'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst _props = withDefaults(\n defineProps<Omit<BFormCheckboxProps, 'modelValue' | 'indeterminate'>>(),\n {\n wrapperAttrs: undefined,\n inputClass: undefined,\n ariaLabel: undefined,\n ariaLabelledby: undefined,\n autofocus: false,\n button: undefined,\n buttonGroup: false,\n buttonVariant: undefined,\n disabled: false,\n form: undefined,\n id: undefined,\n inline: undefined,\n name: undefined,\n plain: undefined,\n required: false,\n reverse: undefined,\n size: undefined,\n state: undefined,\n switch: undefined,\n uncheckedValue: undefined,\n value: true,\n }\n)\nconst props = useDefaults(_props, 'BFormCheckbox')\nconst slots = defineSlots<BFormCheckboxSlots>()\nconst attrs = useAttrs()\n\nconst modelValue = defineModel<BFormCheckboxProps['modelValue']>({\n default: undefined,\n})\nconst indeterminate = defineModel<Exclude<BFormCheckboxProps['indeterminate'], undefined>>(\n 'indeterminate',\n {\n default: false,\n }\n)\n\nconst processedAttrs = computed(() => {\n const {class: wrapperClass, ...inputAttrs} = attrs\n return {wrapperClass, inputAttrs}\n})\n\nconst computedId = useId(() => props.id, 'form-check')\n\nconst parentData = inject(checkboxGroupKey, null)\n\nconst input = useTemplateRef('_input')\n\nconst {focused} = useFocus(input, {\n initialValue: props.autofocus,\n})\n\nconst hasDefaultSlot = computed(() => !isEmptySlot(slots.default))\n\n// True default values for props that are undefined to support inheritance\nconst propDefaults = {\n plain: false,\n button: false,\n inline: false,\n reverse: false,\n switch: false,\n size: undefined,\n buttonVariant: 'secondary' as const,\n state: null,\n}\n\n// Single source of truth for resolved prop values with parent inheritance and defaults\nconst resolvedProps = computed(() => ({\n plain: props.plain ?? parentData?.plain.value ?? propDefaults.plain,\n button: props.button ?? parentData?.buttons.value ?? propDefaults.button,\n inline: props.inline ?? parentData?.inline.value ?? propDefaults.inline,\n reverse: props.reverse ?? parentData?.reverse.value ?? propDefaults.reverse,\n switch: props.switch ?? parentData?.switch.value ?? propDefaults.switch,\n state: props.state ?? parentData?.state.value ?? propDefaults.state,\n size: props.size ?? parentData?.size.value ?? propDefaults.size,\n buttonVariant:\n props.buttonVariant ?? parentData?.buttonVariant.value ?? propDefaults.buttonVariant,\n}))\n\n// Shorthand for template usage\nconst resolvedPlain = computed(() => resolvedProps.value.plain)\nconst hasOwnLabel = computed(() => hasDefaultSlot.value || !resolvedPlain.value)\n\nconst labelTargetId = computed(() => (hasOwnLabel.value ? null : computedId.value))\nconst formGroupData = inject(formGroupKey, null)?.()\nformGroupData?.track(labelTargetId)\n\nconst localValue = computed({\n get: () => (parentData ? parentData.modelValue.value : modelValue.value),\n set: (newVal) => {\n // Indeterminate is implicitly cleared when the checked state is changed to any value\n // by the user. We reflect that here by setting our indetermiate model to false\n // which will emit the indeterminate event to the parent\n indeterminate.value = false\n if (parentData !== null && Array.isArray(newVal)) {\n // The type cast isn't perfect. Array.isArray detects CheckboxValue.unknown[],\n // but since it's parentData, it should always be CheckboxValue[]\n // It doesn't quite work when props.value is an [], but this is more of a Vue issue\n parentData.modelValue.value = newVal as CheckboxValue[]\n return\n }\n modelValue.value = newVal as CheckboxValue\n },\n})\n\nconst computedRequired = computed(\n () => !!(props.name ?? parentData?.name.value) && (props.required || parentData?.required.value)\n)\n\nconst isButtonGroup = computed(() => props.buttonGroup || (parentData?.buttons.value ?? false))\n\nconst classesObject = computed(() => ({\n ...resolvedProps.value,\n hasDefaultSlot: hasDefaultSlot.value,\n}))\nconst wrapperClasses = getClasses(classesObject)\nconst computedWrapperClasses = computed(() => [\n wrapperClasses.value,\n processedAttrs.value.wrapperClass,\n])\nconst inputClasses = getInputClasses(classesObject)\nconst computedInputClasses = computed(() => [inputClasses.value, props.inputClass])\nconst labelClasses = getLabelClasses(classesObject)\n\ndefineExpose({\n blur: () => {\n focused.value = false\n },\n element: input,\n focus: () => {\n focused.value = true\n },\n})\n</script>\n","<template>\n <div\n v-bind=\"attrs\"\n :id=\"computedId\"\n ref=\"_element\"\n role=\"group\"\n :class=\"classes\"\n class=\"bv-no-focus-ring\"\n tabindex=\"-1\"\n >\n <slot name=\"first\" />\n <BFormCheckbox v-for=\"(item, index) in normalizedOptions\" :key=\"index\" v-bind=\"item\">\n <slot name=\"option\" v-bind=\"item\">\n {{ item.text }}\n </slot>\n </BFormCheckbox>\n <slot />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, provide, toRef, useTemplateRef} from 'vue'\nimport type {BFormCheckboxGroupBaseProps, CheckboxValue} from '../../types'\nimport BFormCheckbox from './BFormCheckbox.vue'\nimport {checkboxGroupKey} from '../../utils/keys'\nimport {getGroupAttr, getGroupClasses} from '../../composables/useFormCheck'\nimport {useFocus} from '@vueuse/core'\nimport {useId} from '../../composables/useId'\nimport {useDefaults} from '../../composables/useDefaults'\n\nconst _props = withDefaults(defineProps<Omit<BFormCheckboxGroupBaseProps, 'modelValue'>>(), {\n ariaInvalid: undefined,\n autofocus: false,\n buttonVariant: 'secondary',\n buttons: false,\n disabled: false,\n form: undefined,\n id: undefined,\n name: undefined,\n options: () => [],\n plain: false,\n required: false,\n reverse: false,\n size: undefined,\n stacked: false,\n state: null,\n switches: false,\n validated: false,\n})\nconst props = useDefaults(_props, 'BFormCheckboxGroup')\n\nconst modelValue = defineModel<CheckboxValue[]>({\n default: () => [],\n})\n\nconst computedId = useId(() => props.id, 'checkbox')\nconst computedName = useId(() => props.name, 'checkbox')\nconst _element = useTemplateRef('_element')\n\nconst {focused} = useFocus(_element, {\n initialValue: props.autofocus,\n})\n\n// Provide context to child checkboxes\nprovide(checkboxGroupKey, {\n modelValue: modelValue as import('vue').Ref<\n readonly import('../../types/CheckboxTypes').CheckboxValue[]\n >,\n switch: toRef(() => props.switches),\n buttonVariant: toRef(() => props.buttonVariant),\n form: toRef(() => props.form),\n name: computedName,\n state: toRef(() => props.state),\n plain: toRef(() => props.plain),\n size: toRef(() => props.size),\n inline: toRef(() => !props.stacked),\n reverse: toRef(() => props.reverse),\n required: toRef(() => props.required),\n buttons: toRef(() => props.buttons),\n disabled: toRef(() => props.disabled),\n})\n\n// Normalize options to always be objects with text/value fields\nconst normalizedOptions = computed<Array<{text: string; value: CheckboxValue; disabled: boolean}>>(\n () =>\n props.options.map((option) => {\n if (typeof option === 'object' && option !== null) {\n // Ensure text and disabled are defined, with group disabled taking precedence\n return {\n ...option,\n text: option.text ?? String(option.value ?? ''),\n value: option.value ?? null,\n disabled: props.disabled ? true : (option.disabled ?? false),\n }\n }\n // Primitive value - normalize to {text, value}, with group disabled taking precedence\n return {\n text: String(option),\n value: option,\n disabled: props.disabled,\n }\n })\n)\n\nconst classesObject = computed(() => ({\n required: props.required,\n ariaInvalid: props.ariaInvalid,\n state: props.state,\n validated: props.validated,\n buttons: props.buttons,\n stacked: props.stacked,\n size: props.size,\n}))\nconst attrs = getGroupAttr(classesObject)\nconst classes = getGroupClasses(classesObject)\n\ndefineExpose({\n blur: () => {\n focused.value = false\n },\n focus: () => {\n focused.value = true\n },\n})\n</script>\n","<template>\n <div\n v-bind=\"attrs\"\n :id=\"computedId\"\n ref=\"_element\"\n role=\"group\"\n :class=\"classes\"\n class=\"bv-no-focus-ring\"\n tabindex=\"-1\"\n >\n <slot name=\"first\" />\n <BFormCheckbox v-for=\"(item, index) in normalizedOptions\" :key=\"index\" v-bind=\"item\">\n <slot name=\"option\" v-bind=\"item\">\n {{ item.text }}\n </slot>\n </BFormCheckbox>\n <slot />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, provide, toRef, useTemplateRef} from 'vue'\nimport type {BFormCheckboxGroupBaseProps, CheckboxValue} from '../../types'\nimport BFormCheckbox from './BFormCheckbox.vue'\nimport {checkboxGroupKey} from '../../utils/keys'\nimport {getGroupAttr, getGroupClasses} from '../../composables/useFormCheck'\nimport {useFocus} from '@vueuse/core'\nimport {useId} from '../../composables/useId'\nimport {useDefaults} from '../../composables/useDefaults'\n\nconst _props = withDefaults(defineProps<Omit<BFormCheckboxGroupBaseProps, 'modelValue'>>(), {\n ariaInvalid: undefined,\n autofocus: false,\n buttonVariant: 'secondary',\n buttons: false,\n disabled: false,\n form: undefined,\n id: undefined,\n name: undefined,\n options: () => [],\n plain: false,\n required: false,\n reverse: false,\n size: undefined,\n stacked: false,\n state: null,\n switches: false,\n validated: false,\n})\nconst props = useDefaults(_props, 'BFormCheckboxGroup')\n\nconst modelValue = defineModel<CheckboxValue[]>({\n default: () => [],\n})\n\nconst computedId = useId(() => props.id, 'checkbox')\nconst computedName = useId(() => props.name, 'checkbox')\nconst _element = useTemplateRef('_element')\n\nconst {focused} = useFocus(_element, {\n initialValue: props.autofocus,\n})\n\n// Provide context to child checkboxes\nprovide(checkboxGroupKey, {\n modelValue: modelValue as import('vue').Ref<\n readonly import('../../types/CheckboxTypes').CheckboxValue[]\n >,\n switch: toRef(() => props.switches),\n buttonVariant: toRef(() => props.buttonVariant),\n form: toRef(() => props.form),\n name: computedName,\n state: toRef(() => props.state),\n plain: toRef(() => props.plain),\n size: toRef(() => props.size),\n inline: toRef(() => !props.stacked),\n reverse: toRef(() => props.reverse),\n required: toRef(() => props.required),\n buttons: toRef(() => props.buttons),\n disabled: toRef(() => props.disabled),\n})\n\n// Normalize options to always be objects with text/value fields\nconst normalizedOptions = computed<Array<{text: string; value: CheckboxValue; disabled: boolean}>>(\n () =>\n props.options.map((option) => {\n if (typeof option === 'object' && option !== null) {\n // Ensure text and disabled are defined, with group disabled taking precedence\n return {\n ...option,\n text: option.text ?? String(option.value ?? ''),\n value: option.value ?? null,\n disabled: props.disabled ? true : (option.disabled ?? false),\n }\n }\n // Primitive value - normalize to {text, value}, with group disabled taking precedence\n return {\n text: String(option),\n value: option,\n disabled: props.disabled,\n }\n })\n)\n\nconst classesObject = computed(() => ({\n required: props.required,\n ariaInvalid: props.ariaInvalid,\n state: props.state,\n validated: props.validated,\n buttons: props.buttons,\n stacked: props.stacked,\n size: props.size,\n}))\nconst attrs = getGroupAttr(classesObject)\nconst classes = getGroupClasses(classesObject)\n\ndefineExpose({\n blur: () => {\n focused.value = false\n },\n focus: () => {\n focused.value = true\n },\n})\n</script>\n","<template>\n <BFormCheckboxGroupBase\n v-bind=\"forwardedProps\"\n v-model=\"modelValue as unknown as CheckboxValue[]\"\n :options=\"normalizedOptions\"\n >\n <!-- Forward all slots -->\n <template #first>\n <slot name=\"first\" />\n </template>\n\n <template #option=\"slotProps\">\n <slot name=\"option\" v-bind=\"slotProps\" />\n </template>\n\n <slot />\n </BFormCheckboxGroupBase>\n</template>\n\n<script\n setup\n lang=\"ts\"\n generic=\"\n Options extends readonly (object | string | number | boolean)[] = readonly (\n | object\n | string\n | number\n | boolean\n )[]\n \"\n>\nimport type {\n BFormCheckboxGroupProps,\n BFormCheckboxGroupSlots,\n CheckboxValue,\n OptionsValues,\n} from '../../types'\nimport {computed} from 'vue'\nimport BFormCheckboxGroupBase from './BFormCheckboxGroupBase.vue'\n\n/**\n * Type-safe wrapper component for BFormCheckboxGroup.\n * Provides generic type safety for options array and strongly-typed modelValue.\n * Uses Options array generic to extract union of all possible values.\n * Supports both complex objects and simple scalar types (string, number, boolean).\n *\n * For strongly-typed modelValue:\n * - Primitive arrays: modelValue is array of those value types\n * - Object arrays with 'value' field: modelValue is array of value field types\n * - Use 'as const' on options for literal type inference\n */\n\n// Generic props - type safety happens here\nconst props = withDefaults(defineProps<Omit<BFormCheckboxGroupProps<Options>, 'modelValue'>>(), {\n ariaInvalid: undefined,\n autofocus: false,\n buttonVariant: 'secondary',\n buttons: false,\n disabled: false,\n disabledField: 'disabled',\n form: undefined,\n id: undefined,\n name: undefined,\n options: () => [] as unknown as Options,\n plain: false,\n required: false,\n reverse: false,\n size: undefined,\n stacked: false,\n state: null,\n switches: false,\n textField: 'text',\n validated: false,\n valueField: 'value',\n})\ndefineSlots<BFormCheckboxGroupSlots>()\n\n// Type-safe model value - extracts union from options, wraps in array.\n// NOTE: OptionsValues assumes a static \"value\" key; custom valueField is not\n// reflected in the type — modelValue falls back to unknown in that case.\nconst modelValue = defineModel<OptionsValues<Options>[] | undefined>({\n default: () => [],\n})\n\n// Type-safe normalization of options\nconst normalizedOptions = computed(() =>\n (props.options ?? []).map(\n (el) =>\n (typeof el === 'string' || typeof el === 'number' || typeof el === 'boolean'\n ? {\n value: el,\n disabled: props.disabled,\n text: el.toString(),\n }\n : {\n value: (el as Record<string, unknown>)[props.valueField as string],\n disabled:\n props.disabled ||\n (((el as Record<string, unknown>)[props.disabledField as string] as\n | boolean\n | undefined) ??\n false),\n text:\n ((el as Record<string, unknown>)[props.textField as string] as string | undefined) ??\n String((el as Record<string, unknown>)[props.valueField as string]),\n }) as {text: string; value: CheckboxValue; disabled: boolean}\n )\n)\n\n// Forward all non-option-related props\nconst forwardedProps = computed(() => ({\n id: props.id,\n name: props.name,\n size: props.size,\n state: props.state,\n buttonVariant: props.buttonVariant,\n buttons: props.buttons,\n stacked: props.stacked,\n disabled: props.disabled,\n required: props.required,\n validated: props.validated,\n autofocus: props.autofocus,\n form: props.form,\n ariaInvalid: props.ariaInvalid,\n plain: props.plain,\n reverse: props.reverse,\n switches: props.switches,\n}))\n</script>\n","<template>\n <BFormCheckboxGroupBase\n v-bind=\"forwardedProps\"\n v-model=\"modelValue as unknown as CheckboxValue[]\"\n :options=\"normalizedOptions\"\n >\n <!-- Forward all slots -->\n <template #first>\n <slot name=\"first\" />\n </template>\n\n <template #option=\"slotProps\">\n <slot name=\"option\" v-bind=\"slotProps\" />\n </template>\n\n <slot />\n </BFormCheckboxGroupBase>\n</template>\n\n<script\n setup\n lang=\"ts\"\n generic=\"\n Options extends readonly (object | string | number | boolean)[] = readonly (\n | object\n | string\n | number\n | boolean\n )[]\n \"\n>\nimport type {\n BFormCheckboxGroupProps,\n BFormCheckboxGroupSlots,\n CheckboxValue,\n OptionsValues,\n} from '../../types'\nimport {computed} from 'vue'\nimport BFormCheckboxGroupBase from './BFormCheckboxGroupBase.vue'\n\n/**\n * Type-safe wrapper component for BFormCheckboxGroup.\n * Provides generic type safety for options array and strongly-typed modelValue.\n * Uses Options array generic to extract union of all possible values.\n * Supports both complex objects and simple scalar types (string, number, boolean).\n *\n * For strongly-typed modelValue:\n * - Primitive arrays: modelValue is array of those value types\n * - Object arrays with 'value' field: modelValue is array of value field types\n * - Use 'as const' on options for literal type inference\n */\n\n// Generic props - type safety happens here\nconst props = withDefaults(defineProps<Omit<BFormCheckboxGroupProps<Options>, 'modelValue'>>(), {\n ariaInvalid: undefined,\n autofocus: false,\n buttonVariant: 'secondary',\n buttons: false,\n disabled: false,\n disabledField: 'disabled',\n form: undefined,\n id: undefined,\n name: undefined,\n options: () => [] as unknown as Options,\n plain: false,\n required: false,\n reverse: false,\n size: undefined,\n stacked: false,\n state: null,\n switches: false,\n textField: 'text',\n validated: false,\n valueField: 'value',\n})\ndefineSlots<BFormCheckboxGroupSlots>()\n\n// Type-safe model value - extracts union from options, wraps in array.\n// NOTE: OptionsValues assumes a static \"value\" key; custom valueField is not\n// reflected in the type — modelValue falls back to unknown in that case.\nconst modelValue = defineModel<OptionsValues<Options>[] | undefined>({\n default: () => [],\n})\n\n// Type-safe normalization of options\nconst normalizedOptions = computed(() =>\n (props.options ?? []).map(\n (el) =>\n (typeof el === 'string' || typeof el === 'number' || typeof el === 'boolean'\n ? {\n value: el,\n disabled: props.disabled,\n text: el.toString(),\n }\n : {\n value: (el as Record<string, unknown>)[props.valueField as string],\n disabled:\n props.disabled ||\n (((el as Record<string, unknown>)[props.disabledField as string] as\n | boolean\n | undefined) ??\n false),\n text:\n ((el as Record<string, unknown>)[props.textField as string] as string | undefined) ??\n String((el as Record<string, unknown>)[props.valueField as string]),\n }) as {text: string; value: CheckboxValue; disabled: boolean}\n )\n)\n\n// Forward all non-option-related props\nconst forwardedProps = computed(() => ({\n id: props.id,\n name: props.name,\n size: props.size,\n state: props.state,\n buttonVariant: props.buttonVariant,\n buttons: props.buttons,\n stacked: props.stacked,\n disabled: props.disabled,\n required: props.required,\n validated: props.validated,\n autofocus: props.autofocus,\n form: props.form,\n ariaInvalid: props.ariaInvalid,\n plain: props.plain,\n reverse: props.reverse,\n switches: props.switches,\n}))\n</script>\n"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { p as useFileDialog, u as useDropZone } from "./dist-
|
|
2
|
-
import { o as isEmptySlot } from "./dom-
|
|
3
|
-
import { t as useDefaults } from "./useDefaults-
|
|
4
|
-
import { t as useId$1 } from "./useId-
|
|
5
|
-
import { t as useStateClass } from "./useStateClass-
|
|
1
|
+
import { p as useFileDialog, u as useDropZone } from "./dist-9-XTMhb-.js";
|
|
2
|
+
import { o as isEmptySlot } from "./dom-BdUQrX99.js";
|
|
3
|
+
import { t as useDefaults } from "./useDefaults-BzP4qZBu.js";
|
|
4
|
+
import { t as useId$1 } from "./useId-Fh-Arhb7.js";
|
|
5
|
+
import { t as useStateClass } from "./useStateClass-BF7kf2zK.js";
|
|
6
6
|
import { computed, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, defineComponent, mergeModels, mergeProps, nextTick, normalizeClass, onMounted, openBlock, ref, renderSlot, toDisplayString, unref, useAttrs, useModel, useSlots, useTemplateRef, watch, withModifiers } from "vue";
|
|
7
7
|
//#region src/components/BFormFile/BFormFile.vue?vue&type=script&setup=true&lang.ts
|
|
8
8
|
var _hoisted_1 = ["for"];
|
|
@@ -73,7 +73,7 @@ var _hoisted_14 = {
|
|
|
73
73
|
var BFormFile_default = /* @__PURE__ */ defineComponent({
|
|
74
74
|
inheritAttrs: false,
|
|
75
75
|
__name: "BFormFile",
|
|
76
|
-
props:
|
|
76
|
+
props: /*@__PURE__*/ mergeModels({
|
|
77
77
|
ariaLabel: { default: void 0 },
|
|
78
78
|
ariaLabelledby: { default: void 0 },
|
|
79
79
|
ariaLiveFormatter: {
|
|
@@ -139,7 +139,7 @@ var BFormFile_default = /* @__PURE__ */ defineComponent({
|
|
|
139
139
|
"modelValue": { default: null },
|
|
140
140
|
"modelModifiers": {}
|
|
141
141
|
}),
|
|
142
|
-
emits:
|
|
142
|
+
emits: /*@__PURE__*/ mergeModels(["change"], ["update:modelValue"]),
|
|
143
143
|
setup(__props, { expose: __expose, emit: __emit }) {
|
|
144
144
|
const props = useDefaults(__props, "BFormFile");
|
|
145
145
|
const slots = useSlots();
|
|
@@ -414,4 +414,4 @@ var BFormFile_default = /* @__PURE__ */ defineComponent({
|
|
|
414
414
|
//#endregion
|
|
415
415
|
export { BFormFile_default as t };
|
|
416
416
|
|
|
417
|
-
//# sourceMappingURL=BFormFile-
|
|
417
|
+
//# sourceMappingURL=BFormFile-BVrDprWL.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BFormFile-MISLntyJ.js","names":[],"sources":["../src/components/BFormFile/BFormFile.vue","../src/components/BFormFile/BFormFile.vue"],"sourcesContent":["<template>\n <div ref=\"rootRef\" v-bind=\"processedAttrs.rootAttrs\" class=\"b-form-file-root\">\n <!-- Optional label -->\n <label\n v-if=\"hasLabelSlot || props.label\"\n class=\"form-label\"\n :class=\"props.labelClass\"\n :for=\"computedId\"\n >\n <slot name=\"label\">\n {{ props.label }}\n </slot>\n </label>\n\n <!-- Drop zone wrapper -->\n <div\n v-if=\"!props.plain\"\n ref=\"dropZoneRef\"\n v-bind=\"processedAttrs.dropZoneAttrs\"\n class=\"b-form-file-wrapper\"\n :class=\"{\n 'b-form-file-dragging': isOverDropZone && !props.noDrop,\n 'b-form-file-has-files': hasFiles,\n }\"\n >\n <!-- Custom file control (mimics Bootstrap native input) -->\n <div\n class=\"b-form-file-control\"\n :class=\"computedClasses\"\n :aria-disabled=\"props.disabled\"\n @click=\"handleControlClick\"\n >\n <!-- Custom browse button (now on LEFT to match Bootstrap v5) -->\n <button\n v-if=\"!props.noButton\"\n :id=\"computedId\"\n ref=\"browseButtonRef\"\n type=\"button\"\n class=\"b-form-file-button\"\n :disabled=\"props.disabled\"\n :aria-label=\"props.ariaLabel\"\n :aria-labelledby=\"props.ariaLabelledby\"\n @click.stop=\"openFileDialog\"\n >\n {{ effectiveBrowseText }}\n </button>\n\n <!-- File name display -->\n <div class=\"b-form-file-text\">\n <slot name=\"file-name\" :files=\"selectedFiles\" :names=\"fileNames\">\n <span v-if=\"hasFiles\">{{ formattedFileNames }}</span>\n <span v-else-if=\"hasPlaceholderSlot || props.placeholder\" class=\"text-muted\">\n <slot name=\"placeholder\">{{ props.placeholder }}</slot>\n </span>\n </slot>\n </div>\n </div>\n\n <!-- Drag overlay (only shown when dragging) -->\n <div v-if=\"isOverDropZone && !props.noDrop\" class=\"b-form-file-drag-overlay\">\n <slot name=\"drop-placeholder\">\n <div class=\"b-form-file-drag-text\">\n {{ effectiveDropPlaceholder }}\n </div>\n </slot>\n </div>\n\n <!-- Hidden input for form submission (positioned behind UI with z-index) -->\n <input\n ref=\"customInputRef\"\n v-bind=\"processedAttrs.inputAttrs\"\n type=\"file\"\n :name=\"props.name\"\n :form=\"props.form\"\n :multiple=\"props.multiple || props.directory\"\n :disabled=\"props.disabled\"\n :required=\"props.required\"\n :accept=\"computedAccept || undefined\"\n :capture=\"props.capture\"\n :directory=\"props.directory || undefined\"\n :webkitdirectory=\"props.directory || undefined\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n style=\"\n position: absolute;\n z-index: -5;\n width: 0;\n height: 0;\n opacity: 0;\n overflow: hidden;\n pointer-events: none;\n \"\n />\n </div>\n\n <!-- Plain mode - simple native input -->\n <input\n v-else\n :id=\"computedId\"\n ref=\"plainInputRef\"\n v-bind=\"processedAttrs.inputAttrs\"\n type=\"file\"\n :class=\"computedPlainClasses\"\n :form=\"props.form\"\n :name=\"props.name\"\n :multiple=\"props.multiple || props.directory\"\n :disabled=\"props.disabled\"\n :capture=\"props.capture\"\n :accept=\"computedAccept || undefined\"\n :required=\"props.required || undefined\"\n :aria-label=\"props.ariaLabel\"\n :aria-labelledby=\"props.ariaLabelledby\"\n :aria-required=\"props.required || undefined\"\n :directory=\"props.directory || undefined\"\n :webkitdirectory=\"props.directory || undefined\"\n @change=\"onPlainChange\"\n />\n\n <!-- External file display (when showFileNames is true and not plain) -->\n <div v-if=\"showExternalDisplay\" class=\"b-form-file-display mt-2\">\n <slot name=\"file-name\" :files=\"selectedFiles\" :names=\"fileNames\">\n <div v-if=\"hasFiles\" class=\"small text-muted\">\n {{ formattedFileNames }}\n </div>\n <div v-else-if=\"hasPlaceholderSlot || props.placeholder\" class=\"small text-muted\">\n <slot name=\"placeholder\">\n {{ props.placeholder }}\n </slot>\n </div>\n </slot>\n </div>\n\n <!-- ARIA live region for screen reader announcements -->\n <div v-if=\"!props.plain\" class=\"visually-hidden\" aria-live=\"polite\" aria-atomic=\"true\">\n {{ ariaLiveMessage }}\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDropZone, useFileDialog} from '@vueuse/core'\nimport {computed, nextTick, onMounted, ref, type Ref, useAttrs, useTemplateRef, watch} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport {useStateClass} from '../../composables/useStateClass'\nimport {isEmptySlot} from '../../utils/dom'\nimport type {BFormFileProps, BFormFileSlots} from '../../types'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst _props = withDefaults(defineProps<Omit<BFormFileProps, 'modelValue'>>(), {\n ariaLabel: undefined,\n ariaLabelledby: undefined,\n accept: '',\n autofocus: false,\n browseText: undefined,\n capture: undefined,\n directory: false,\n disabled: false,\n dropPlaceholder: undefined,\n fileNameFormatter: undefined,\n ariaLiveFormatter: undefined,\n form: undefined,\n id: undefined,\n label: '',\n labelClass: undefined,\n multiple: false,\n name: undefined,\n noButton: false,\n noDrop: false,\n plain: false,\n placeholder: 'No file chosen',\n required: false,\n showFileNames: false,\n size: undefined,\n state: null,\n})\nconst props = useDefaults(_props, 'BFormFile')\nconst slots = defineSlots<BFormFileSlots>()\n\nconst emit = defineEmits<{\n change: [value: Event]\n}>()\n\nconst modelValue = defineModel<Exclude<BFormFileProps['modelValue'], undefined>>({\n default: null,\n})\n\nconst attrs = useAttrs()\n\nconst processedAttrs = computed(() => {\n // In plain mode, pass all attributes to the input element\n if (props.plain) {\n return {\n rootAttrs: {},\n dropZoneAttrs: {},\n inputAttrs: attrs,\n }\n }\n // In custom mode, split attributes:\n // - class/style go to root (for layout/positioning)\n // - title goes to drop zone (for tooltip on interactive element)\n // - everything else goes to hidden input (for form functionality)\n const {class: rootClass, style: rootStyle, title: dropZoneTitle, ...inputAttrs} = attrs\n const rootAttrs: Record<string, unknown> = {}\n const dropZoneAttrs: Record<string, unknown> = {}\n if (rootClass !== undefined) rootAttrs.class = rootClass\n if (rootStyle !== undefined) rootAttrs.style = rootStyle\n if (dropZoneTitle !== undefined) dropZoneAttrs.title = dropZoneTitle\n return {\n rootAttrs,\n dropZoneAttrs,\n inputAttrs,\n }\n})\n\nconst computedId = useId(() => props.id)\nconst stateClass = useStateClass(() => props.state)\n\n// Refs\nconst rootRef = useTemplateRef('rootRef')\nconst dropZoneRef = useTemplateRef('dropZoneRef')\nconst browseButtonRef = useTemplateRef('browseButtonRef')\nconst plainInputRef = useTemplateRef<HTMLInputElement>('plainInputRef')\nconst customInputRef = useTemplateRef<HTMLInputElement>('customInputRef')\n\n// Computed accept for file type validation\nconst computedAccept = computed(() =>\n typeof props.accept === 'string' ? props.accept : props.accept.join(',')\n)\n\n// VueUse file dialog (uses our hidden input element)\nconst {\n open,\n reset: resetDialog,\n onChange: onDialogChange,\n} = useFileDialog({\n accept: computedAccept.value,\n multiple: props.multiple || props.directory,\n directory: props.directory,\n input: customInputRef as unknown as Ref<HTMLInputElement>,\n})\n\n// VueUse drop zone (replaces manual drag/drop)\n// Note: We don't pass dataTypes because the accept attribute handles validation\n// and there is no reliable way to get MIME types from in all browsers\n// https://github.com/vueuse/vueuse/issues/4523\nconst {isOverDropZone} = useDropZone(dropZoneRef, {\n onDrop: (files) => {\n if (files && !props.noDrop) {\n handleFiles(files)\n }\n },\n multiple: props.multiple || props.directory,\n})\n\n// Computed properties\nconst hasLabelSlot = computed(() => !isEmptySlot(slots.label))\nconst hasPlaceholderSlot = computed(() => !isEmptySlot(slots.placeholder))\n\nconst computedClasses = computed(() => [\n stateClass.value,\n {\n [`form-control-${props.size}`]: props.size !== undefined,\n },\n])\n\nconst computedPlainClasses = computed(() => [\n 'form-control',\n stateClass.value,\n {\n [`form-control-${props.size}`]: props.size !== undefined,\n },\n])\n\n// Selected files (from dialog or managed state)\nconst internalFiles = ref<readonly File[]>([])\n\nconst selectedFiles = computed<readonly File[]>(() => internalFiles.value)\n\nconst hasFiles = computed(() => selectedFiles.value.length > 0)\n\nconst fileNames = computed(() => selectedFiles.value.map((file) => file.name))\n\nconst formattedFileNames = computed(() => {\n if (!hasFiles.value) return ''\n if (props.fileNameFormatter) {\n return props.fileNameFormatter(selectedFiles.value)\n }\n const names = fileNames.value\n if (names.length === 1) return names[0]\n return `${names.length} files selected`\n})\n\nconst showExternalDisplay = computed(\n () => !props.plain && props.showFileNames && (hasFiles.value || props.placeholder)\n)\n\n// ARIA live region message for accessibility\nconst ariaLiveMessage = computed(() => {\n if (!hasFiles.value) return ''\n if (props.ariaLiveFormatter) {\n return props.ariaLiveFormatter(selectedFiles.value)\n }\n const count = selectedFiles.value.length\n if (count === 1) {\n return `File selected: ${selectedFiles.value[0]?.name}`\n }\n return `${count} files selected`\n})\n\nconst effectiveBrowseText = computed(() => props.browseText ?? 'Browse')\nconst effectiveDropPlaceholder = computed(() => props.dropPlaceholder ?? 'Drop files here...')\n\n// Validate file against accept criteria\nconst isFileAccepted = (file: File): boolean => {\n if (!computedAccept.value) return true\n\n const acceptTypes = computedAccept.value.split(',').map((type) => type.trim())\n\n return acceptTypes.some((acceptType) => {\n // Extension match (e.g., .pdf)\n if (acceptType.startsWith('.')) {\n return file.name.toLowerCase().endsWith(acceptType.toLowerCase())\n }\n // Exact MIME type match (e.g., image/png)\n if (!acceptType.includes('*')) {\n return file.type === acceptType\n }\n // Wildcard MIME type match (e.g., image/* or */*)\n const slashIndex = acceptType.indexOf('/')\n if (slashIndex === -1) {\n // Malformed wildcard pattern (no '/'): do not match anything\n return false\n }\n const category = acceptType.slice(0, slashIndex)\n // */* should match any MIME type\n if (category === '*') {\n return true\n }\n return file.type.startsWith(`${category}/`)\n })\n}\n\n// File handling\nconst handleFiles = (files: File[] | FileList, nativeEvent?: Event) => {\n let fileArray: File[] = []\n\n if (nativeEvent) {\n // Plain mode: read from the event target (browser already filtered via accept)\n const input = nativeEvent.target as HTMLInputElement\n fileArray = input.files ? Array.from(input.files) : []\n } else {\n // Custom mode (drag & drop or file dialog): manually filter and set on hidden input\n fileArray = Array.from(files).filter((file) => isFileAccepted(file))\n if (customInputRef.value && typeof DataTransfer !== 'undefined') {\n try {\n const dataTransfer = new DataTransfer()\n fileArray.forEach((file) => dataTransfer.items.add(file))\n customInputRef.value.files = dataTransfer.files\n } catch {\n // In environments where DataTransfer is not fully supported, skip syncing files on the input\n }\n }\n }\n\n // Update internal state\n internalFiles.value = fileArray\n\n // Update model value\n if (fileArray.length === 0) {\n modelValue.value = null\n } else if (props.directory || props.multiple) {\n modelValue.value = fileArray\n } else {\n const [firstFile] = fileArray\n if (firstFile) {\n modelValue.value = firstFile\n }\n }\n\n // Emit change event in nextTick to ensure DOM updates\n // In plain mode: forward the native event (has target.files)\n // In custom mode: create CustomEvent with files in detail\n nextTick(() => {\n if (nativeEvent) {\n // Plain mode: forward native event\n emit('change', nativeEvent)\n } else {\n // Custom mode: create CustomEvent with files\n const changeEvent = new CustomEvent('change', {\n bubbles: true,\n cancelable: false,\n detail: {\n files: fileArray,\n target: {files: fileArray},\n },\n })\n // Also attach files directly for easier access\n Object.defineProperty(changeEvent, 'files', {\n value: fileArray,\n enumerable: true,\n })\n emit('change', changeEvent)\n }\n })\n}\n\n// Open file dialog\nconst openFileDialog = () => {\n if (!props.disabled) {\n open({\n accept: computedAccept.value,\n multiple: props.multiple || props.directory,\n directory: props.directory,\n })\n }\n}\n\n// Handle click on control wrapper (make entire control clickable like Bootstrap v5)\nconst handleControlClick = () => {\n // Don't trigger if clicking the button itself (button has its own handler with .stop)\n // Don't trigger if disabled\n if (!props.disabled) {\n openFileDialog()\n }\n}\n\n// Plain mode change handler\nconst onPlainChange = (e: Event) => {\n const input = e.target as HTMLInputElement\n if (input.files) {\n handleFiles(input.files, e) // Pass native event\n }\n}\n\n// Watch dialog files from useFileDialog\nonDialogChange((files) => {\n if (files) {\n handleFiles(files)\n }\n})\n\n// Reset method\nconst reset = () => {\n internalFiles.value = []\n modelValue.value = null\n resetDialog() // This resets the hidden input in custom mode\n if (plainInputRef.value) {\n plainInputRef.value.value = ''\n }\n}\n\n// Focus management\nconst focus = () => {\n if (props.plain) {\n plainInputRef.value?.focus()\n } else {\n browseButtonRef.value?.focus()\n }\n}\n\nconst blur = () => {\n if (props.plain) {\n plainInputRef.value?.blur()\n } else {\n browseButtonRef.value?.blur()\n }\n}\n\n// Autofocus support - initial focus on mount\nonMounted(() => {\n if (props.autofocus) {\n nextTick(() => {\n focus()\n })\n }\n})\n\n// Autofocus support - runtime prop changes\nwatch(\n () => props.autofocus,\n (autofocus) => {\n if (autofocus) {\n focus()\n }\n }\n)\n\n// Watch modelValue changes from parent\nwatch(modelValue, (newValue) => {\n if (newValue === null) {\n internalFiles.value = []\n if (plainInputRef.value) {\n plainInputRef.value.value = ''\n }\n } else if (Array.isArray(newValue)) {\n internalFiles.value = newValue as readonly File[]\n } else {\n internalFiles.value = [newValue] as readonly File[]\n }\n})\n\ndefineExpose({\n blur,\n element: computed(() => (props.plain ? plainInputRef.value : browseButtonRef.value)),\n focus,\n reset,\n})\n</script>\n","<template>\n <div ref=\"rootRef\" v-bind=\"processedAttrs.rootAttrs\" class=\"b-form-file-root\">\n <!-- Optional label -->\n <label\n v-if=\"hasLabelSlot || props.label\"\n class=\"form-label\"\n :class=\"props.labelClass\"\n :for=\"computedId\"\n >\n <slot name=\"label\">\n {{ props.label }}\n </slot>\n </label>\n\n <!-- Drop zone wrapper -->\n <div\n v-if=\"!props.plain\"\n ref=\"dropZoneRef\"\n v-bind=\"processedAttrs.dropZoneAttrs\"\n class=\"b-form-file-wrapper\"\n :class=\"{\n 'b-form-file-dragging': isOverDropZone && !props.noDrop,\n 'b-form-file-has-files': hasFiles,\n }\"\n >\n <!-- Custom file control (mimics Bootstrap native input) -->\n <div\n class=\"b-form-file-control\"\n :class=\"computedClasses\"\n :aria-disabled=\"props.disabled\"\n @click=\"handleControlClick\"\n >\n <!-- Custom browse button (now on LEFT to match Bootstrap v5) -->\n <button\n v-if=\"!props.noButton\"\n :id=\"computedId\"\n ref=\"browseButtonRef\"\n type=\"button\"\n class=\"b-form-file-button\"\n :disabled=\"props.disabled\"\n :aria-label=\"props.ariaLabel\"\n :aria-labelledby=\"props.ariaLabelledby\"\n @click.stop=\"openFileDialog\"\n >\n {{ effectiveBrowseText }}\n </button>\n\n <!-- File name display -->\n <div class=\"b-form-file-text\">\n <slot name=\"file-name\" :files=\"selectedFiles\" :names=\"fileNames\">\n <span v-if=\"hasFiles\">{{ formattedFileNames }}</span>\n <span v-else-if=\"hasPlaceholderSlot || props.placeholder\" class=\"text-muted\">\n <slot name=\"placeholder\">{{ props.placeholder }}</slot>\n </span>\n </slot>\n </div>\n </div>\n\n <!-- Drag overlay (only shown when dragging) -->\n <div v-if=\"isOverDropZone && !props.noDrop\" class=\"b-form-file-drag-overlay\">\n <slot name=\"drop-placeholder\">\n <div class=\"b-form-file-drag-text\">\n {{ effectiveDropPlaceholder }}\n </div>\n </slot>\n </div>\n\n <!-- Hidden input for form submission (positioned behind UI with z-index) -->\n <input\n ref=\"customInputRef\"\n v-bind=\"processedAttrs.inputAttrs\"\n type=\"file\"\n :name=\"props.name\"\n :form=\"props.form\"\n :multiple=\"props.multiple || props.directory\"\n :disabled=\"props.disabled\"\n :required=\"props.required\"\n :accept=\"computedAccept || undefined\"\n :capture=\"props.capture\"\n :directory=\"props.directory || undefined\"\n :webkitdirectory=\"props.directory || undefined\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n style=\"\n position: absolute;\n z-index: -5;\n width: 0;\n height: 0;\n opacity: 0;\n overflow: hidden;\n pointer-events: none;\n \"\n />\n </div>\n\n <!-- Plain mode - simple native input -->\n <input\n v-else\n :id=\"computedId\"\n ref=\"plainInputRef\"\n v-bind=\"processedAttrs.inputAttrs\"\n type=\"file\"\n :class=\"computedPlainClasses\"\n :form=\"props.form\"\n :name=\"props.name\"\n :multiple=\"props.multiple || props.directory\"\n :disabled=\"props.disabled\"\n :capture=\"props.capture\"\n :accept=\"computedAccept || undefined\"\n :required=\"props.required || undefined\"\n :aria-label=\"props.ariaLabel\"\n :aria-labelledby=\"props.ariaLabelledby\"\n :aria-required=\"props.required || undefined\"\n :directory=\"props.directory || undefined\"\n :webkitdirectory=\"props.directory || undefined\"\n @change=\"onPlainChange\"\n />\n\n <!-- External file display (when showFileNames is true and not plain) -->\n <div v-if=\"showExternalDisplay\" class=\"b-form-file-display mt-2\">\n <slot name=\"file-name\" :files=\"selectedFiles\" :names=\"fileNames\">\n <div v-if=\"hasFiles\" class=\"small text-muted\">\n {{ formattedFileNames }}\n </div>\n <div v-else-if=\"hasPlaceholderSlot || props.placeholder\" class=\"small text-muted\">\n <slot name=\"placeholder\">\n {{ props.placeholder }}\n </slot>\n </div>\n </slot>\n </div>\n\n <!-- ARIA live region for screen reader announcements -->\n <div v-if=\"!props.plain\" class=\"visually-hidden\" aria-live=\"polite\" aria-atomic=\"true\">\n {{ ariaLiveMessage }}\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDropZone, useFileDialog} from '@vueuse/core'\nimport {computed, nextTick, onMounted, ref, type Ref, useAttrs, useTemplateRef, watch} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport {useStateClass} from '../../composables/useStateClass'\nimport {isEmptySlot} from '../../utils/dom'\nimport type {BFormFileProps, BFormFileSlots} from '../../types'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst _props = withDefaults(defineProps<Omit<BFormFileProps, 'modelValue'>>(), {\n ariaLabel: undefined,\n ariaLabelledby: undefined,\n accept: '',\n autofocus: false,\n browseText: undefined,\n capture: undefined,\n directory: false,\n disabled: false,\n dropPlaceholder: undefined,\n fileNameFormatter: undefined,\n ariaLiveFormatter: undefined,\n form: undefined,\n id: undefined,\n label: '',\n labelClass: undefined,\n multiple: false,\n name: undefined,\n noButton: false,\n noDrop: false,\n plain: false,\n placeholder: 'No file chosen',\n required: false,\n showFileNames: false,\n size: undefined,\n state: null,\n})\nconst props = useDefaults(_props, 'BFormFile')\nconst slots = defineSlots<BFormFileSlots>()\n\nconst emit = defineEmits<{\n change: [value: Event]\n}>()\n\nconst modelValue = defineModel<Exclude<BFormFileProps['modelValue'], undefined>>({\n default: null,\n})\n\nconst attrs = useAttrs()\n\nconst processedAttrs = computed(() => {\n // In plain mode, pass all attributes to the input element\n if (props.plain) {\n return {\n rootAttrs: {},\n dropZoneAttrs: {},\n inputAttrs: attrs,\n }\n }\n // In custom mode, split attributes:\n // - class/style go to root (for layout/positioning)\n // - title goes to drop zone (for tooltip on interactive element)\n // - everything else goes to hidden input (for form functionality)\n const {class: rootClass, style: rootStyle, title: dropZoneTitle, ...inputAttrs} = attrs\n const rootAttrs: Record<string, unknown> = {}\n const dropZoneAttrs: Record<string, unknown> = {}\n if (rootClass !== undefined) rootAttrs.class = rootClass\n if (rootStyle !== undefined) rootAttrs.style = rootStyle\n if (dropZoneTitle !== undefined) dropZoneAttrs.title = dropZoneTitle\n return {\n rootAttrs,\n dropZoneAttrs,\n inputAttrs,\n }\n})\n\nconst computedId = useId(() => props.id)\nconst stateClass = useStateClass(() => props.state)\n\n// Refs\nconst rootRef = useTemplateRef('rootRef')\nconst dropZoneRef = useTemplateRef('dropZoneRef')\nconst browseButtonRef = useTemplateRef('browseButtonRef')\nconst plainInputRef = useTemplateRef<HTMLInputElement>('plainInputRef')\nconst customInputRef = useTemplateRef<HTMLInputElement>('customInputRef')\n\n// Computed accept for file type validation\nconst computedAccept = computed(() =>\n typeof props.accept === 'string' ? props.accept : props.accept.join(',')\n)\n\n// VueUse file dialog (uses our hidden input element)\nconst {\n open,\n reset: resetDialog,\n onChange: onDialogChange,\n} = useFileDialog({\n accept: computedAccept.value,\n multiple: props.multiple || props.directory,\n directory: props.directory,\n input: customInputRef as unknown as Ref<HTMLInputElement>,\n})\n\n// VueUse drop zone (replaces manual drag/drop)\n// Note: We don't pass dataTypes because the accept attribute handles validation\n// and there is no reliable way to get MIME types from in all browsers\n// https://github.com/vueuse/vueuse/issues/4523\nconst {isOverDropZone} = useDropZone(dropZoneRef, {\n onDrop: (files) => {\n if (files && !props.noDrop) {\n handleFiles(files)\n }\n },\n multiple: props.multiple || props.directory,\n})\n\n// Computed properties\nconst hasLabelSlot = computed(() => !isEmptySlot(slots.label))\nconst hasPlaceholderSlot = computed(() => !isEmptySlot(slots.placeholder))\n\nconst computedClasses = computed(() => [\n stateClass.value,\n {\n [`form-control-${props.size}`]: props.size !== undefined,\n },\n])\n\nconst computedPlainClasses = computed(() => [\n 'form-control',\n stateClass.value,\n {\n [`form-control-${props.size}`]: props.size !== undefined,\n },\n])\n\n// Selected files (from dialog or managed state)\nconst internalFiles = ref<readonly File[]>([])\n\nconst selectedFiles = computed<readonly File[]>(() => internalFiles.value)\n\nconst hasFiles = computed(() => selectedFiles.value.length > 0)\n\nconst fileNames = computed(() => selectedFiles.value.map((file) => file.name))\n\nconst formattedFileNames = computed(() => {\n if (!hasFiles.value) return ''\n if (props.fileNameFormatter) {\n return props.fileNameFormatter(selectedFiles.value)\n }\n const names = fileNames.value\n if (names.length === 1) return names[0]\n return `${names.length} files selected`\n})\n\nconst showExternalDisplay = computed(\n () => !props.plain && props.showFileNames && (hasFiles.value || props.placeholder)\n)\n\n// ARIA live region message for accessibility\nconst ariaLiveMessage = computed(() => {\n if (!hasFiles.value) return ''\n if (props.ariaLiveFormatter) {\n return props.ariaLiveFormatter(selectedFiles.value)\n }\n const count = selectedFiles.value.length\n if (count === 1) {\n return `File selected: ${selectedFiles.value[0]?.name}`\n }\n return `${count} files selected`\n})\n\nconst effectiveBrowseText = computed(() => props.browseText ?? 'Browse')\nconst effectiveDropPlaceholder = computed(() => props.dropPlaceholder ?? 'Drop files here...')\n\n// Validate file against accept criteria\nconst isFileAccepted = (file: File): boolean => {\n if (!computedAccept.value) return true\n\n const acceptTypes = computedAccept.value.split(',').map((type) => type.trim())\n\n return acceptTypes.some((acceptType) => {\n // Extension match (e.g., .pdf)\n if (acceptType.startsWith('.')) {\n return file.name.toLowerCase().endsWith(acceptType.toLowerCase())\n }\n // Exact MIME type match (e.g., image/png)\n if (!acceptType.includes('*')) {\n return file.type === acceptType\n }\n // Wildcard MIME type match (e.g., image/* or */*)\n const slashIndex = acceptType.indexOf('/')\n if (slashIndex === -1) {\n // Malformed wildcard pattern (no '/'): do not match anything\n return false\n }\n const category = acceptType.slice(0, slashIndex)\n // */* should match any MIME type\n if (category === '*') {\n return true\n }\n return file.type.startsWith(`${category}/`)\n })\n}\n\n// File handling\nconst handleFiles = (files: File[] | FileList, nativeEvent?: Event) => {\n let fileArray: File[] = []\n\n if (nativeEvent) {\n // Plain mode: read from the event target (browser already filtered via accept)\n const input = nativeEvent.target as HTMLInputElement\n fileArray = input.files ? Array.from(input.files) : []\n } else {\n // Custom mode (drag & drop or file dialog): manually filter and set on hidden input\n fileArray = Array.from(files).filter((file) => isFileAccepted(file))\n if (customInputRef.value && typeof DataTransfer !== 'undefined') {\n try {\n const dataTransfer = new DataTransfer()\n fileArray.forEach((file) => dataTransfer.items.add(file))\n customInputRef.value.files = dataTransfer.files\n } catch {\n // In environments where DataTransfer is not fully supported, skip syncing files on the input\n }\n }\n }\n\n // Update internal state\n internalFiles.value = fileArray\n\n // Update model value\n if (fileArray.length === 0) {\n modelValue.value = null\n } else if (props.directory || props.multiple) {\n modelValue.value = fileArray\n } else {\n const [firstFile] = fileArray\n if (firstFile) {\n modelValue.value = firstFile\n }\n }\n\n // Emit change event in nextTick to ensure DOM updates\n // In plain mode: forward the native event (has target.files)\n // In custom mode: create CustomEvent with files in detail\n nextTick(() => {\n if (nativeEvent) {\n // Plain mode: forward native event\n emit('change', nativeEvent)\n } else {\n // Custom mode: create CustomEvent with files\n const changeEvent = new CustomEvent('change', {\n bubbles: true,\n cancelable: false,\n detail: {\n files: fileArray,\n target: {files: fileArray},\n },\n })\n // Also attach files directly for easier access\n Object.defineProperty(changeEvent, 'files', {\n value: fileArray,\n enumerable: true,\n })\n emit('change', changeEvent)\n }\n })\n}\n\n// Open file dialog\nconst openFileDialog = () => {\n if (!props.disabled) {\n open({\n accept: computedAccept.value,\n multiple: props.multiple || props.directory,\n directory: props.directory,\n })\n }\n}\n\n// Handle click on control wrapper (make entire control clickable like Bootstrap v5)\nconst handleControlClick = () => {\n // Don't trigger if clicking the button itself (button has its own handler with .stop)\n // Don't trigger if disabled\n if (!props.disabled) {\n openFileDialog()\n }\n}\n\n// Plain mode change handler\nconst onPlainChange = (e: Event) => {\n const input = e.target as HTMLInputElement\n if (input.files) {\n handleFiles(input.files, e) // Pass native event\n }\n}\n\n// Watch dialog files from useFileDialog\nonDialogChange((files) => {\n if (files) {\n handleFiles(files)\n }\n})\n\n// Reset method\nconst reset = () => {\n internalFiles.value = []\n modelValue.value = null\n resetDialog() // This resets the hidden input in custom mode\n if (plainInputRef.value) {\n plainInputRef.value.value = ''\n }\n}\n\n// Focus management\nconst focus = () => {\n if (props.plain) {\n plainInputRef.value?.focus()\n } else {\n browseButtonRef.value?.focus()\n }\n}\n\nconst blur = () => {\n if (props.plain) {\n plainInputRef.value?.blur()\n } else {\n browseButtonRef.value?.blur()\n }\n}\n\n// Autofocus support - initial focus on mount\nonMounted(() => {\n if (props.autofocus) {\n nextTick(() => {\n focus()\n })\n }\n})\n\n// Autofocus support - runtime prop changes\nwatch(\n () => props.autofocus,\n (autofocus) => {\n if (autofocus) {\n focus()\n }\n }\n)\n\n// Watch modelValue changes from parent\nwatch(modelValue, (newValue) => {\n if (newValue === null) {\n internalFiles.value = []\n if (plainInputRef.value) {\n plainInputRef.value.value = ''\n }\n } else if (Array.isArray(newValue)) {\n internalFiles.value = newValue as readonly File[]\n } else {\n internalFiles.value = [newValue] as readonly File[]\n }\n})\n\ndefineExpose({\n blur,\n element: computed(() => (props.plain ? plainInputRef.value : browseButtonRef.value)),\n focus,\n reset,\n})\n</script>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BFormFile-BVrDprWL.js","names":[],"sources":["../src/components/BFormFile/BFormFile.vue","../src/components/BFormFile/BFormFile.vue"],"sourcesContent":["<template>\n <div ref=\"rootRef\" v-bind=\"processedAttrs.rootAttrs\" class=\"b-form-file-root\">\n <!-- Optional label -->\n <label\n v-if=\"hasLabelSlot || props.label\"\n class=\"form-label\"\n :class=\"props.labelClass\"\n :for=\"computedId\"\n >\n <slot name=\"label\">\n {{ props.label }}\n </slot>\n </label>\n\n <!-- Drop zone wrapper -->\n <div\n v-if=\"!props.plain\"\n ref=\"dropZoneRef\"\n v-bind=\"processedAttrs.dropZoneAttrs\"\n class=\"b-form-file-wrapper\"\n :class=\"{\n 'b-form-file-dragging': isOverDropZone && !props.noDrop,\n 'b-form-file-has-files': hasFiles,\n }\"\n >\n <!-- Custom file control (mimics Bootstrap native input) -->\n <div\n class=\"b-form-file-control\"\n :class=\"computedClasses\"\n :aria-disabled=\"props.disabled\"\n @click=\"handleControlClick\"\n >\n <!-- Custom browse button (now on LEFT to match Bootstrap v5) -->\n <button\n v-if=\"!props.noButton\"\n :id=\"computedId\"\n ref=\"browseButtonRef\"\n type=\"button\"\n class=\"b-form-file-button\"\n :disabled=\"props.disabled\"\n :aria-label=\"props.ariaLabel\"\n :aria-labelledby=\"props.ariaLabelledby\"\n @click.stop=\"openFileDialog\"\n >\n {{ effectiveBrowseText }}\n </button>\n\n <!-- File name display -->\n <div class=\"b-form-file-text\">\n <slot name=\"file-name\" :files=\"selectedFiles\" :names=\"fileNames\">\n <span v-if=\"hasFiles\">{{ formattedFileNames }}</span>\n <span v-else-if=\"hasPlaceholderSlot || props.placeholder\" class=\"text-muted\">\n <slot name=\"placeholder\">{{ props.placeholder }}</slot>\n </span>\n </slot>\n </div>\n </div>\n\n <!-- Drag overlay (only shown when dragging) -->\n <div v-if=\"isOverDropZone && !props.noDrop\" class=\"b-form-file-drag-overlay\">\n <slot name=\"drop-placeholder\">\n <div class=\"b-form-file-drag-text\">\n {{ effectiveDropPlaceholder }}\n </div>\n </slot>\n </div>\n\n <!-- Hidden input for form submission (positioned behind UI with z-index) -->\n <input\n ref=\"customInputRef\"\n v-bind=\"processedAttrs.inputAttrs\"\n type=\"file\"\n :name=\"props.name\"\n :form=\"props.form\"\n :multiple=\"props.multiple || props.directory\"\n :disabled=\"props.disabled\"\n :required=\"props.required\"\n :accept=\"computedAccept || undefined\"\n :capture=\"props.capture\"\n :directory=\"props.directory || undefined\"\n :webkitdirectory=\"props.directory || undefined\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n style=\"\n position: absolute;\n z-index: -5;\n width: 0;\n height: 0;\n opacity: 0;\n overflow: hidden;\n pointer-events: none;\n \"\n />\n </div>\n\n <!-- Plain mode - simple native input -->\n <input\n v-else\n :id=\"computedId\"\n ref=\"plainInputRef\"\n v-bind=\"processedAttrs.inputAttrs\"\n type=\"file\"\n :class=\"computedPlainClasses\"\n :form=\"props.form\"\n :name=\"props.name\"\n :multiple=\"props.multiple || props.directory\"\n :disabled=\"props.disabled\"\n :capture=\"props.capture\"\n :accept=\"computedAccept || undefined\"\n :required=\"props.required || undefined\"\n :aria-label=\"props.ariaLabel\"\n :aria-labelledby=\"props.ariaLabelledby\"\n :aria-required=\"props.required || undefined\"\n :directory=\"props.directory || undefined\"\n :webkitdirectory=\"props.directory || undefined\"\n @change=\"onPlainChange\"\n />\n\n <!-- External file display (when showFileNames is true and not plain) -->\n <div v-if=\"showExternalDisplay\" class=\"b-form-file-display mt-2\">\n <slot name=\"file-name\" :files=\"selectedFiles\" :names=\"fileNames\">\n <div v-if=\"hasFiles\" class=\"small text-muted\">\n {{ formattedFileNames }}\n </div>\n <div v-else-if=\"hasPlaceholderSlot || props.placeholder\" class=\"small text-muted\">\n <slot name=\"placeholder\">\n {{ props.placeholder }}\n </slot>\n </div>\n </slot>\n </div>\n\n <!-- ARIA live region for screen reader announcements -->\n <div v-if=\"!props.plain\" class=\"visually-hidden\" aria-live=\"polite\" aria-atomic=\"true\">\n {{ ariaLiveMessage }}\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDropZone, useFileDialog} from '@vueuse/core'\nimport {computed, nextTick, onMounted, ref, type Ref, useAttrs, useTemplateRef, watch} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport {useStateClass} from '../../composables/useStateClass'\nimport {isEmptySlot} from '../../utils/dom'\nimport type {BFormFileProps, BFormFileSlots} from '../../types'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst _props = withDefaults(defineProps<Omit<BFormFileProps, 'modelValue'>>(), {\n ariaLabel: undefined,\n ariaLabelledby: undefined,\n accept: '',\n autofocus: false,\n browseText: undefined,\n capture: undefined,\n directory: false,\n disabled: false,\n dropPlaceholder: undefined,\n fileNameFormatter: undefined,\n ariaLiveFormatter: undefined,\n form: undefined,\n id: undefined,\n label: '',\n labelClass: undefined,\n multiple: false,\n name: undefined,\n noButton: false,\n noDrop: false,\n plain: false,\n placeholder: 'No file chosen',\n required: false,\n showFileNames: false,\n size: undefined,\n state: null,\n})\nconst props = useDefaults(_props, 'BFormFile')\nconst slots = defineSlots<BFormFileSlots>()\n\nconst emit = defineEmits<{\n change: [value: Event]\n}>()\n\nconst modelValue = defineModel<Exclude<BFormFileProps['modelValue'], undefined>>({\n default: null,\n})\n\nconst attrs = useAttrs()\n\nconst processedAttrs = computed(() => {\n // In plain mode, pass all attributes to the input element\n if (props.plain) {\n return {\n rootAttrs: {},\n dropZoneAttrs: {},\n inputAttrs: attrs,\n }\n }\n // In custom mode, split attributes:\n // - class/style go to root (for layout/positioning)\n // - title goes to drop zone (for tooltip on interactive element)\n // - everything else goes to hidden input (for form functionality)\n const {class: rootClass, style: rootStyle, title: dropZoneTitle, ...inputAttrs} = attrs\n const rootAttrs: Record<string, unknown> = {}\n const dropZoneAttrs: Record<string, unknown> = {}\n if (rootClass !== undefined) rootAttrs.class = rootClass\n if (rootStyle !== undefined) rootAttrs.style = rootStyle\n if (dropZoneTitle !== undefined) dropZoneAttrs.title = dropZoneTitle\n return {\n rootAttrs,\n dropZoneAttrs,\n inputAttrs,\n }\n})\n\nconst computedId = useId(() => props.id)\nconst stateClass = useStateClass(() => props.state)\n\n// Refs\nconst rootRef = useTemplateRef('rootRef')\nconst dropZoneRef = useTemplateRef('dropZoneRef')\nconst browseButtonRef = useTemplateRef('browseButtonRef')\nconst plainInputRef = useTemplateRef<HTMLInputElement>('plainInputRef')\nconst customInputRef = useTemplateRef<HTMLInputElement>('customInputRef')\n\n// Computed accept for file type validation\nconst computedAccept = computed(() =>\n typeof props.accept === 'string' ? props.accept : props.accept.join(',')\n)\n\n// VueUse file dialog (uses our hidden input element)\nconst {\n open,\n reset: resetDialog,\n onChange: onDialogChange,\n} = useFileDialog({\n accept: computedAccept.value,\n multiple: props.multiple || props.directory,\n directory: props.directory,\n input: customInputRef as unknown as Ref<HTMLInputElement>,\n})\n\n// VueUse drop zone (replaces manual drag/drop)\n// Note: We don't pass dataTypes because the accept attribute handles validation\n// and there is no reliable way to get MIME types from in all browsers\n// https://github.com/vueuse/vueuse/issues/4523\nconst {isOverDropZone} = useDropZone(dropZoneRef, {\n onDrop: (files) => {\n if (files && !props.noDrop) {\n handleFiles(files)\n }\n },\n multiple: props.multiple || props.directory,\n})\n\n// Computed properties\nconst hasLabelSlot = computed(() => !isEmptySlot(slots.label))\nconst hasPlaceholderSlot = computed(() => !isEmptySlot(slots.placeholder))\n\nconst computedClasses = computed(() => [\n stateClass.value,\n {\n [`form-control-${props.size}`]: props.size !== undefined,\n },\n])\n\nconst computedPlainClasses = computed(() => [\n 'form-control',\n stateClass.value,\n {\n [`form-control-${props.size}`]: props.size !== undefined,\n },\n])\n\n// Selected files (from dialog or managed state)\nconst internalFiles = ref<readonly File[]>([])\n\nconst selectedFiles = computed<readonly File[]>(() => internalFiles.value)\n\nconst hasFiles = computed(() => selectedFiles.value.length > 0)\n\nconst fileNames = computed(() => selectedFiles.value.map((file) => file.name))\n\nconst formattedFileNames = computed(() => {\n if (!hasFiles.value) return ''\n if (props.fileNameFormatter) {\n return props.fileNameFormatter(selectedFiles.value)\n }\n const names = fileNames.value\n if (names.length === 1) return names[0]\n return `${names.length} files selected`\n})\n\nconst showExternalDisplay = computed(\n () => !props.plain && props.showFileNames && (hasFiles.value || props.placeholder)\n)\n\n// ARIA live region message for accessibility\nconst ariaLiveMessage = computed(() => {\n if (!hasFiles.value) return ''\n if (props.ariaLiveFormatter) {\n return props.ariaLiveFormatter(selectedFiles.value)\n }\n const count = selectedFiles.value.length\n if (count === 1) {\n return `File selected: ${selectedFiles.value[0]?.name}`\n }\n return `${count} files selected`\n})\n\nconst effectiveBrowseText = computed(() => props.browseText ?? 'Browse')\nconst effectiveDropPlaceholder = computed(() => props.dropPlaceholder ?? 'Drop files here...')\n\n// Validate file against accept criteria\nconst isFileAccepted = (file: File): boolean => {\n if (!computedAccept.value) return true\n\n const acceptTypes = computedAccept.value.split(',').map((type) => type.trim())\n\n return acceptTypes.some((acceptType) => {\n // Extension match (e.g., .pdf)\n if (acceptType.startsWith('.')) {\n return file.name.toLowerCase().endsWith(acceptType.toLowerCase())\n }\n // Exact MIME type match (e.g., image/png)\n if (!acceptType.includes('*')) {\n return file.type === acceptType\n }\n // Wildcard MIME type match (e.g., image/* or */*)\n const slashIndex = acceptType.indexOf('/')\n if (slashIndex === -1) {\n // Malformed wildcard pattern (no '/'): do not match anything\n return false\n }\n const category = acceptType.slice(0, slashIndex)\n // */* should match any MIME type\n if (category === '*') {\n return true\n }\n return file.type.startsWith(`${category}/`)\n })\n}\n\n// File handling\nconst handleFiles = (files: File[] | FileList, nativeEvent?: Event) => {\n let fileArray: File[] = []\n\n if (nativeEvent) {\n // Plain mode: read from the event target (browser already filtered via accept)\n const input = nativeEvent.target as HTMLInputElement\n fileArray = input.files ? Array.from(input.files) : []\n } else {\n // Custom mode (drag & drop or file dialog): manually filter and set on hidden input\n fileArray = Array.from(files).filter((file) => isFileAccepted(file))\n if (customInputRef.value && typeof DataTransfer !== 'undefined') {\n try {\n const dataTransfer = new DataTransfer()\n fileArray.forEach((file) => dataTransfer.items.add(file))\n customInputRef.value.files = dataTransfer.files\n } catch {\n // In environments where DataTransfer is not fully supported, skip syncing files on the input\n }\n }\n }\n\n // Update internal state\n internalFiles.value = fileArray\n\n // Update model value\n if (fileArray.length === 0) {\n modelValue.value = null\n } else if (props.directory || props.multiple) {\n modelValue.value = fileArray\n } else {\n const [firstFile] = fileArray\n if (firstFile) {\n modelValue.value = firstFile\n }\n }\n\n // Emit change event in nextTick to ensure DOM updates\n // In plain mode: forward the native event (has target.files)\n // In custom mode: create CustomEvent with files in detail\n nextTick(() => {\n if (nativeEvent) {\n // Plain mode: forward native event\n emit('change', nativeEvent)\n } else {\n // Custom mode: create CustomEvent with files\n const changeEvent = new CustomEvent('change', {\n bubbles: true,\n cancelable: false,\n detail: {\n files: fileArray,\n target: {files: fileArray},\n },\n })\n // Also attach files directly for easier access\n Object.defineProperty(changeEvent, 'files', {\n value: fileArray,\n enumerable: true,\n })\n emit('change', changeEvent)\n }\n })\n}\n\n// Open file dialog\nconst openFileDialog = () => {\n if (!props.disabled) {\n open({\n accept: computedAccept.value,\n multiple: props.multiple || props.directory,\n directory: props.directory,\n })\n }\n}\n\n// Handle click on control wrapper (make entire control clickable like Bootstrap v5)\nconst handleControlClick = () => {\n // Don't trigger if clicking the button itself (button has its own handler with .stop)\n // Don't trigger if disabled\n if (!props.disabled) {\n openFileDialog()\n }\n}\n\n// Plain mode change handler\nconst onPlainChange = (e: Event) => {\n const input = e.target as HTMLInputElement\n if (input.files) {\n handleFiles(input.files, e) // Pass native event\n }\n}\n\n// Watch dialog files from useFileDialog\nonDialogChange((files) => {\n if (files) {\n handleFiles(files)\n }\n})\n\n// Reset method\nconst reset = () => {\n internalFiles.value = []\n modelValue.value = null\n resetDialog() // This resets the hidden input in custom mode\n if (plainInputRef.value) {\n plainInputRef.value.value = ''\n }\n}\n\n// Focus management\nconst focus = () => {\n if (props.plain) {\n plainInputRef.value?.focus()\n } else {\n browseButtonRef.value?.focus()\n }\n}\n\nconst blur = () => {\n if (props.plain) {\n plainInputRef.value?.blur()\n } else {\n browseButtonRef.value?.blur()\n }\n}\n\n// Autofocus support - initial focus on mount\nonMounted(() => {\n if (props.autofocus) {\n nextTick(() => {\n focus()\n })\n }\n})\n\n// Autofocus support - runtime prop changes\nwatch(\n () => props.autofocus,\n (autofocus) => {\n if (autofocus) {\n focus()\n }\n }\n)\n\n// Watch modelValue changes from parent\nwatch(modelValue, (newValue) => {\n if (newValue === null) {\n internalFiles.value = []\n if (plainInputRef.value) {\n plainInputRef.value.value = ''\n }\n } else if (Array.isArray(newValue)) {\n internalFiles.value = newValue as readonly File[]\n } else {\n internalFiles.value = [newValue] as readonly File[]\n }\n})\n\ndefineExpose({\n blur,\n element: computed(() => (props.plain ? plainInputRef.value : browseButtonRef.value)),\n focus,\n reset,\n})\n</script>\n","<template>\n <div ref=\"rootRef\" v-bind=\"processedAttrs.rootAttrs\" class=\"b-form-file-root\">\n <!-- Optional label -->\n <label\n v-if=\"hasLabelSlot || props.label\"\n class=\"form-label\"\n :class=\"props.labelClass\"\n :for=\"computedId\"\n >\n <slot name=\"label\">\n {{ props.label }}\n </slot>\n </label>\n\n <!-- Drop zone wrapper -->\n <div\n v-if=\"!props.plain\"\n ref=\"dropZoneRef\"\n v-bind=\"processedAttrs.dropZoneAttrs\"\n class=\"b-form-file-wrapper\"\n :class=\"{\n 'b-form-file-dragging': isOverDropZone && !props.noDrop,\n 'b-form-file-has-files': hasFiles,\n }\"\n >\n <!-- Custom file control (mimics Bootstrap native input) -->\n <div\n class=\"b-form-file-control\"\n :class=\"computedClasses\"\n :aria-disabled=\"props.disabled\"\n @click=\"handleControlClick\"\n >\n <!-- Custom browse button (now on LEFT to match Bootstrap v5) -->\n <button\n v-if=\"!props.noButton\"\n :id=\"computedId\"\n ref=\"browseButtonRef\"\n type=\"button\"\n class=\"b-form-file-button\"\n :disabled=\"props.disabled\"\n :aria-label=\"props.ariaLabel\"\n :aria-labelledby=\"props.ariaLabelledby\"\n @click.stop=\"openFileDialog\"\n >\n {{ effectiveBrowseText }}\n </button>\n\n <!-- File name display -->\n <div class=\"b-form-file-text\">\n <slot name=\"file-name\" :files=\"selectedFiles\" :names=\"fileNames\">\n <span v-if=\"hasFiles\">{{ formattedFileNames }}</span>\n <span v-else-if=\"hasPlaceholderSlot || props.placeholder\" class=\"text-muted\">\n <slot name=\"placeholder\">{{ props.placeholder }}</slot>\n </span>\n </slot>\n </div>\n </div>\n\n <!-- Drag overlay (only shown when dragging) -->\n <div v-if=\"isOverDropZone && !props.noDrop\" class=\"b-form-file-drag-overlay\">\n <slot name=\"drop-placeholder\">\n <div class=\"b-form-file-drag-text\">\n {{ effectiveDropPlaceholder }}\n </div>\n </slot>\n </div>\n\n <!-- Hidden input for form submission (positioned behind UI with z-index) -->\n <input\n ref=\"customInputRef\"\n v-bind=\"processedAttrs.inputAttrs\"\n type=\"file\"\n :name=\"props.name\"\n :form=\"props.form\"\n :multiple=\"props.multiple || props.directory\"\n :disabled=\"props.disabled\"\n :required=\"props.required\"\n :accept=\"computedAccept || undefined\"\n :capture=\"props.capture\"\n :directory=\"props.directory || undefined\"\n :webkitdirectory=\"props.directory || undefined\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n style=\"\n position: absolute;\n z-index: -5;\n width: 0;\n height: 0;\n opacity: 0;\n overflow: hidden;\n pointer-events: none;\n \"\n />\n </div>\n\n <!-- Plain mode - simple native input -->\n <input\n v-else\n :id=\"computedId\"\n ref=\"plainInputRef\"\n v-bind=\"processedAttrs.inputAttrs\"\n type=\"file\"\n :class=\"computedPlainClasses\"\n :form=\"props.form\"\n :name=\"props.name\"\n :multiple=\"props.multiple || props.directory\"\n :disabled=\"props.disabled\"\n :capture=\"props.capture\"\n :accept=\"computedAccept || undefined\"\n :required=\"props.required || undefined\"\n :aria-label=\"props.ariaLabel\"\n :aria-labelledby=\"props.ariaLabelledby\"\n :aria-required=\"props.required || undefined\"\n :directory=\"props.directory || undefined\"\n :webkitdirectory=\"props.directory || undefined\"\n @change=\"onPlainChange\"\n />\n\n <!-- External file display (when showFileNames is true and not plain) -->\n <div v-if=\"showExternalDisplay\" class=\"b-form-file-display mt-2\">\n <slot name=\"file-name\" :files=\"selectedFiles\" :names=\"fileNames\">\n <div v-if=\"hasFiles\" class=\"small text-muted\">\n {{ formattedFileNames }}\n </div>\n <div v-else-if=\"hasPlaceholderSlot || props.placeholder\" class=\"small text-muted\">\n <slot name=\"placeholder\">\n {{ props.placeholder }}\n </slot>\n </div>\n </slot>\n </div>\n\n <!-- ARIA live region for screen reader announcements -->\n <div v-if=\"!props.plain\" class=\"visually-hidden\" aria-live=\"polite\" aria-atomic=\"true\">\n {{ ariaLiveMessage }}\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDropZone, useFileDialog} from '@vueuse/core'\nimport {computed, nextTick, onMounted, ref, type Ref, useAttrs, useTemplateRef, watch} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport {useStateClass} from '../../composables/useStateClass'\nimport {isEmptySlot} from '../../utils/dom'\nimport type {BFormFileProps, BFormFileSlots} from '../../types'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst _props = withDefaults(defineProps<Omit<BFormFileProps, 'modelValue'>>(), {\n ariaLabel: undefined,\n ariaLabelledby: undefined,\n accept: '',\n autofocus: false,\n browseText: undefined,\n capture: undefined,\n directory: false,\n disabled: false,\n dropPlaceholder: undefined,\n fileNameFormatter: undefined,\n ariaLiveFormatter: undefined,\n form: undefined,\n id: undefined,\n label: '',\n labelClass: undefined,\n multiple: false,\n name: undefined,\n noButton: false,\n noDrop: false,\n plain: false,\n placeholder: 'No file chosen',\n required: false,\n showFileNames: false,\n size: undefined,\n state: null,\n})\nconst props = useDefaults(_props, 'BFormFile')\nconst slots = defineSlots<BFormFileSlots>()\n\nconst emit = defineEmits<{\n change: [value: Event]\n}>()\n\nconst modelValue = defineModel<Exclude<BFormFileProps['modelValue'], undefined>>({\n default: null,\n})\n\nconst attrs = useAttrs()\n\nconst processedAttrs = computed(() => {\n // In plain mode, pass all attributes to the input element\n if (props.plain) {\n return {\n rootAttrs: {},\n dropZoneAttrs: {},\n inputAttrs: attrs,\n }\n }\n // In custom mode, split attributes:\n // - class/style go to root (for layout/positioning)\n // - title goes to drop zone (for tooltip on interactive element)\n // - everything else goes to hidden input (for form functionality)\n const {class: rootClass, style: rootStyle, title: dropZoneTitle, ...inputAttrs} = attrs\n const rootAttrs: Record<string, unknown> = {}\n const dropZoneAttrs: Record<string, unknown> = {}\n if (rootClass !== undefined) rootAttrs.class = rootClass\n if (rootStyle !== undefined) rootAttrs.style = rootStyle\n if (dropZoneTitle !== undefined) dropZoneAttrs.title = dropZoneTitle\n return {\n rootAttrs,\n dropZoneAttrs,\n inputAttrs,\n }\n})\n\nconst computedId = useId(() => props.id)\nconst stateClass = useStateClass(() => props.state)\n\n// Refs\nconst rootRef = useTemplateRef('rootRef')\nconst dropZoneRef = useTemplateRef('dropZoneRef')\nconst browseButtonRef = useTemplateRef('browseButtonRef')\nconst plainInputRef = useTemplateRef<HTMLInputElement>('plainInputRef')\nconst customInputRef = useTemplateRef<HTMLInputElement>('customInputRef')\n\n// Computed accept for file type validation\nconst computedAccept = computed(() =>\n typeof props.accept === 'string' ? props.accept : props.accept.join(',')\n)\n\n// VueUse file dialog (uses our hidden input element)\nconst {\n open,\n reset: resetDialog,\n onChange: onDialogChange,\n} = useFileDialog({\n accept: computedAccept.value,\n multiple: props.multiple || props.directory,\n directory: props.directory,\n input: customInputRef as unknown as Ref<HTMLInputElement>,\n})\n\n// VueUse drop zone (replaces manual drag/drop)\n// Note: We don't pass dataTypes because the accept attribute handles validation\n// and there is no reliable way to get MIME types from in all browsers\n// https://github.com/vueuse/vueuse/issues/4523\nconst {isOverDropZone} = useDropZone(dropZoneRef, {\n onDrop: (files) => {\n if (files && !props.noDrop) {\n handleFiles(files)\n }\n },\n multiple: props.multiple || props.directory,\n})\n\n// Computed properties\nconst hasLabelSlot = computed(() => !isEmptySlot(slots.label))\nconst hasPlaceholderSlot = computed(() => !isEmptySlot(slots.placeholder))\n\nconst computedClasses = computed(() => [\n stateClass.value,\n {\n [`form-control-${props.size}`]: props.size !== undefined,\n },\n])\n\nconst computedPlainClasses = computed(() => [\n 'form-control',\n stateClass.value,\n {\n [`form-control-${props.size}`]: props.size !== undefined,\n },\n])\n\n// Selected files (from dialog or managed state)\nconst internalFiles = ref<readonly File[]>([])\n\nconst selectedFiles = computed<readonly File[]>(() => internalFiles.value)\n\nconst hasFiles = computed(() => selectedFiles.value.length > 0)\n\nconst fileNames = computed(() => selectedFiles.value.map((file) => file.name))\n\nconst formattedFileNames = computed(() => {\n if (!hasFiles.value) return ''\n if (props.fileNameFormatter) {\n return props.fileNameFormatter(selectedFiles.value)\n }\n const names = fileNames.value\n if (names.length === 1) return names[0]\n return `${names.length} files selected`\n})\n\nconst showExternalDisplay = computed(\n () => !props.plain && props.showFileNames && (hasFiles.value || props.placeholder)\n)\n\n// ARIA live region message for accessibility\nconst ariaLiveMessage = computed(() => {\n if (!hasFiles.value) return ''\n if (props.ariaLiveFormatter) {\n return props.ariaLiveFormatter(selectedFiles.value)\n }\n const count = selectedFiles.value.length\n if (count === 1) {\n return `File selected: ${selectedFiles.value[0]?.name}`\n }\n return `${count} files selected`\n})\n\nconst effectiveBrowseText = computed(() => props.browseText ?? 'Browse')\nconst effectiveDropPlaceholder = computed(() => props.dropPlaceholder ?? 'Drop files here...')\n\n// Validate file against accept criteria\nconst isFileAccepted = (file: File): boolean => {\n if (!computedAccept.value) return true\n\n const acceptTypes = computedAccept.value.split(',').map((type) => type.trim())\n\n return acceptTypes.some((acceptType) => {\n // Extension match (e.g., .pdf)\n if (acceptType.startsWith('.')) {\n return file.name.toLowerCase().endsWith(acceptType.toLowerCase())\n }\n // Exact MIME type match (e.g., image/png)\n if (!acceptType.includes('*')) {\n return file.type === acceptType\n }\n // Wildcard MIME type match (e.g., image/* or */*)\n const slashIndex = acceptType.indexOf('/')\n if (slashIndex === -1) {\n // Malformed wildcard pattern (no '/'): do not match anything\n return false\n }\n const category = acceptType.slice(0, slashIndex)\n // */* should match any MIME type\n if (category === '*') {\n return true\n }\n return file.type.startsWith(`${category}/`)\n })\n}\n\n// File handling\nconst handleFiles = (files: File[] | FileList, nativeEvent?: Event) => {\n let fileArray: File[] = []\n\n if (nativeEvent) {\n // Plain mode: read from the event target (browser already filtered via accept)\n const input = nativeEvent.target as HTMLInputElement\n fileArray = input.files ? Array.from(input.files) : []\n } else {\n // Custom mode (drag & drop or file dialog): manually filter and set on hidden input\n fileArray = Array.from(files).filter((file) => isFileAccepted(file))\n if (customInputRef.value && typeof DataTransfer !== 'undefined') {\n try {\n const dataTransfer = new DataTransfer()\n fileArray.forEach((file) => dataTransfer.items.add(file))\n customInputRef.value.files = dataTransfer.files\n } catch {\n // In environments where DataTransfer is not fully supported, skip syncing files on the input\n }\n }\n }\n\n // Update internal state\n internalFiles.value = fileArray\n\n // Update model value\n if (fileArray.length === 0) {\n modelValue.value = null\n } else if (props.directory || props.multiple) {\n modelValue.value = fileArray\n } else {\n const [firstFile] = fileArray\n if (firstFile) {\n modelValue.value = firstFile\n }\n }\n\n // Emit change event in nextTick to ensure DOM updates\n // In plain mode: forward the native event (has target.files)\n // In custom mode: create CustomEvent with files in detail\n nextTick(() => {\n if (nativeEvent) {\n // Plain mode: forward native event\n emit('change', nativeEvent)\n } else {\n // Custom mode: create CustomEvent with files\n const changeEvent = new CustomEvent('change', {\n bubbles: true,\n cancelable: false,\n detail: {\n files: fileArray,\n target: {files: fileArray},\n },\n })\n // Also attach files directly for easier access\n Object.defineProperty(changeEvent, 'files', {\n value: fileArray,\n enumerable: true,\n })\n emit('change', changeEvent)\n }\n })\n}\n\n// Open file dialog\nconst openFileDialog = () => {\n if (!props.disabled) {\n open({\n accept: computedAccept.value,\n multiple: props.multiple || props.directory,\n directory: props.directory,\n })\n }\n}\n\n// Handle click on control wrapper (make entire control clickable like Bootstrap v5)\nconst handleControlClick = () => {\n // Don't trigger if clicking the button itself (button has its own handler with .stop)\n // Don't trigger if disabled\n if (!props.disabled) {\n openFileDialog()\n }\n}\n\n// Plain mode change handler\nconst onPlainChange = (e: Event) => {\n const input = e.target as HTMLInputElement\n if (input.files) {\n handleFiles(input.files, e) // Pass native event\n }\n}\n\n// Watch dialog files from useFileDialog\nonDialogChange((files) => {\n if (files) {\n handleFiles(files)\n }\n})\n\n// Reset method\nconst reset = () => {\n internalFiles.value = []\n modelValue.value = null\n resetDialog() // This resets the hidden input in custom mode\n if (plainInputRef.value) {\n plainInputRef.value.value = ''\n }\n}\n\n// Focus management\nconst focus = () => {\n if (props.plain) {\n plainInputRef.value?.focus()\n } else {\n browseButtonRef.value?.focus()\n }\n}\n\nconst blur = () => {\n if (props.plain) {\n plainInputRef.value?.blur()\n } else {\n browseButtonRef.value?.blur()\n }\n}\n\n// Autofocus support - initial focus on mount\nonMounted(() => {\n if (props.autofocus) {\n nextTick(() => {\n focus()\n })\n }\n})\n\n// Autofocus support - runtime prop changes\nwatch(\n () => props.autofocus,\n (autofocus) => {\n if (autofocus) {\n focus()\n }\n }\n)\n\n// Watch modelValue changes from parent\nwatch(modelValue, (newValue) => {\n if (newValue === null) {\n internalFiles.value = []\n if (plainInputRef.value) {\n plainInputRef.value.value = ''\n }\n } else if (Array.isArray(newValue)) {\n internalFiles.value = newValue as readonly File[]\n } else {\n internalFiles.value = [newValue] as readonly File[]\n }\n})\n\ndefineExpose({\n blur,\n element: computed(() => (props.plain ? plainInputRef.value : browseButtonRef.value)),\n focus,\n reset,\n})\n</script>\n"],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { s as isVisible, t as attemptFocus } from "./dom-
|
|
2
|
-
import { t as useDefaults } from "./useDefaults-
|
|
3
|
-
import { t as useId$1 } from "./useId-
|
|
4
|
-
import { a as upperFirst } from "./stringUtils-
|
|
5
|
-
import { t as useAriaInvalid } from "./useAriaInvalid-
|
|
6
|
-
import { t as useStateClass } from "./useStateClass-
|
|
7
|
-
import { t as BCol_default } from "./BCol-
|
|
8
|
-
import { a as useProvideFormGroupData, i as BFormInvalidFeedback_default, n as BFormText_default, r as BFormRow_default, t as BFormValidFeedback_default } from "./BFormValidFeedback-
|
|
1
|
+
import { s as isVisible, t as attemptFocus } from "./dom-BdUQrX99.js";
|
|
2
|
+
import { t as useDefaults } from "./useDefaults-BzP4qZBu.js";
|
|
3
|
+
import { t as useId$1 } from "./useId-Fh-Arhb7.js";
|
|
4
|
+
import { a as upperFirst } from "./stringUtils-CVySsg3y.js";
|
|
5
|
+
import { t as useAriaInvalid } from "./useAriaInvalid-CRUhkD2V.js";
|
|
6
|
+
import { t as useStateClass } from "./useStateClass-BF7kf2zK.js";
|
|
7
|
+
import { t as BCol_default } from "./BCol-DiZFbqU5.js";
|
|
8
|
+
import { a as useProvideFormGroupData, i as BFormInvalidFeedback_default, n as BFormText_default, r as BFormRow_default, t as BFormValidFeedback_default } from "./BFormValidFeedback-ClqLRxtH.js";
|
|
9
9
|
import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createSlots, createTextVNode, createVNode, defineComponent, guardReactiveProps, mergeProps, normalizeClass, normalizeProps, openBlock, renderSlot, resolveDynamicComponent, toDisplayString, toRef, unref, useSlots, useTemplateRef, withCtx } from "vue";
|
|
10
10
|
//#region src/utils/props.ts
|
|
11
11
|
/**
|
|
@@ -284,9 +284,10 @@ var BFormGroup_default = /* @__PURE__ */ defineComponent({
|
|
|
284
284
|
const props = useDefaults(__props, "BFormGroup");
|
|
285
285
|
const slots = useSlots();
|
|
286
286
|
const computedState = toRef(() => props.state);
|
|
287
|
+
const computedDisabled = toRef(() => props.disabled);
|
|
287
288
|
const { singleLabelTargetId } = useProvideFormGroupData({
|
|
288
289
|
state: computedState,
|
|
289
|
-
disabled:
|
|
290
|
+
disabled: computedDisabled
|
|
290
291
|
});
|
|
291
292
|
const computedLabelFor = computed(() => props.labelFor ?? singleLabelTargetId.value);
|
|
292
293
|
const breakPoints = [
|
|
@@ -304,20 +305,25 @@ var BFormGroup_default = /* @__PURE__ */ defineComponent({
|
|
|
304
305
|
propValue = Number.isNaN(val) ? 0 : val;
|
|
305
306
|
propValue = propValue > 0 ? propValue : false;
|
|
306
307
|
}
|
|
307
|
-
if (propValue)
|
|
308
|
-
|
|
308
|
+
if (propValue) {
|
|
309
|
+
if (breakpoint === "xs") result[typeof propValue === "boolean" ? "col" : "cols"] = propValue;
|
|
310
|
+
else result[breakpoint || (typeof propValue === "boolean" ? "col" : "cols")] = propValue;
|
|
311
|
+
}
|
|
309
312
|
return result;
|
|
310
313
|
}, {});
|
|
311
314
|
const content = useTemplateRef("_content");
|
|
312
315
|
const contentColProps = computed(() => getColProps(props, "content"));
|
|
313
316
|
const labelAlignClasses = computed(() => ((props, prefix) => breakPoints.reduce((result, breakpoint) => {
|
|
314
317
|
const propValue = props[suffixPropName(breakpoint === "xs" ? "" : breakpoint, `${prefix}Align`)] || null;
|
|
315
|
-
if (propValue)
|
|
316
|
-
|
|
318
|
+
if (propValue) {
|
|
319
|
+
if (breakpoint === "xs") result.push(`text-${propValue}`);
|
|
320
|
+
else result.push(`text-${breakpoint}-${propValue}`);
|
|
321
|
+
}
|
|
317
322
|
return result;
|
|
318
323
|
}, []))(props, "label"));
|
|
319
324
|
const labelColProps = computed(() => getColProps(props, "label"));
|
|
320
325
|
const isHorizontal = computed(() => Object.keys(contentColProps.value).length > 0 || Object.keys(labelColProps.value).length > 0);
|
|
326
|
+
const isFloating = computed(() => props.floating && !isHorizontal.value);
|
|
321
327
|
const stateClass = useStateClass(computedState);
|
|
322
328
|
const computedAriaInvalid = useAriaInvalid(() => props.ariaInvalid, computedState);
|
|
323
329
|
const onLegendClick = (event) => {
|
|
@@ -338,14 +344,14 @@ var BFormGroup_default = /* @__PURE__ */ defineComponent({
|
|
|
338
344
|
};
|
|
339
345
|
const computedId = useId$1(() => props.id);
|
|
340
346
|
const labelId = useId$1(void 0, "_BV_label_");
|
|
341
|
-
const labelTag = computed(() => !
|
|
347
|
+
const labelTag = computed(() => !isFieldset.value ? "label" : "legend");
|
|
342
348
|
const labelClasses = computed(() => [
|
|
343
349
|
isHorizontal.value ? "col-form-label" : "form-label",
|
|
344
350
|
{
|
|
345
|
-
"bv-no-focus-ring": !computedLabelFor.value,
|
|
346
|
-
"col-form-label": isHorizontal.value || !computedLabelFor.value,
|
|
347
|
-
"pt-0": !isHorizontal.value && !computedLabelFor.value,
|
|
348
|
-
"d-block": !isHorizontal.value && computedLabelFor.value,
|
|
351
|
+
"bv-no-focus-ring": !isFloating.value && !computedLabelFor.value,
|
|
352
|
+
"col-form-label": isHorizontal.value || !isFloating.value && !computedLabelFor.value,
|
|
353
|
+
"pt-0": !isHorizontal.value && !isFloating.value && !computedLabelFor.value,
|
|
354
|
+
"d-block": !isHorizontal.value && (isFloating.value || !!computedLabelFor.value),
|
|
349
355
|
[`col-form-label-${props.labelSize}`]: !!props.labelSize,
|
|
350
356
|
"visually-hidden": props.labelVisuallyHidden
|
|
351
357
|
},
|
|
@@ -355,7 +361,17 @@ var BFormGroup_default = /* @__PURE__ */ defineComponent({
|
|
|
355
361
|
const invalidFeedbackId = useId$1(void 0, "_BV_feedback_invalid_");
|
|
356
362
|
const validFeedbackId = useId$1(void 0, "_BV_feedback_valid_");
|
|
357
363
|
const descriptionId = useId$1(void 0, "_BV_description_");
|
|
358
|
-
const isFieldset = computed(() => !computedLabelFor.value);
|
|
364
|
+
const isFieldset = computed(() => !isFloating.value && !computedLabelFor.value);
|
|
365
|
+
const hasDescription = computed(() => !!slots.description || !!props.description);
|
|
366
|
+
const hasInvalidFeedback = computed(() => !!slots["invalid-feedback"] || !!props.invalidFeedback);
|
|
367
|
+
const hasValidFeedback = computed(() => !!slots["valid-feedback"] || !!props.validFeedback);
|
|
368
|
+
const computedAriaDescribedby = computed(() => {
|
|
369
|
+
const ids = [];
|
|
370
|
+
if (hasDescription.value) ids.push(descriptionId.value);
|
|
371
|
+
if (computedState.value === false && hasInvalidFeedback.value) ids.push(invalidFeedbackId.value);
|
|
372
|
+
if (computedState.value === true && hasValidFeedback.value) ids.push(validFeedbackId.value);
|
|
373
|
+
return ids.length > 0 ? ids.join(" ") : null;
|
|
374
|
+
});
|
|
359
375
|
const labelShowing = computed(() => !!slots.label || !!props.label || isHorizontal.value);
|
|
360
376
|
const labelComponentProps = computed(() => ({
|
|
361
377
|
label: props.label,
|
|
@@ -393,7 +409,7 @@ var BFormGroup_default = /* @__PURE__ */ defineComponent({
|
|
|
393
409
|
} : void 0]), 1040)) : createCommentVNode("", true), createVNode(BCol_default, mergeProps(contentColProps.value, { ref: "_content" }), {
|
|
394
410
|
default: withCtx(() => [renderSlot(_ctx.$slots, "default", {
|
|
395
411
|
id: unref(computedId),
|
|
396
|
-
ariaDescribedby:
|
|
412
|
+
ariaDescribedby: computedAriaDescribedby.value,
|
|
397
413
|
descriptionId: unref(descriptionId),
|
|
398
414
|
labelId: unref(labelId)
|
|
399
415
|
}), createVNode(BFormGroupContent_default, normalizeProps(guardReactiveProps(contentComponentProps.value)), createSlots({ _: 2 }, [
|
|
@@ -416,10 +432,10 @@ var BFormGroup_default = /* @__PURE__ */ defineComponent({
|
|
|
416
432
|
_: 3
|
|
417
433
|
}, 16)]),
|
|
418
434
|
_: 3
|
|
419
|
-
})) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
|
|
435
|
+
})) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [isFloating.value ? (openBlock(), createElementBlock("div", _hoisted_2, [
|
|
420
436
|
renderSlot(_ctx.$slots, "default", {
|
|
421
437
|
id: unref(computedId),
|
|
422
|
-
ariaDescribedby:
|
|
438
|
+
ariaDescribedby: computedAriaDescribedby.value,
|
|
423
439
|
descriptionId: unref(descriptionId),
|
|
424
440
|
labelId: unref(labelId)
|
|
425
441
|
}),
|
|
@@ -453,7 +469,7 @@ var BFormGroup_default = /* @__PURE__ */ defineComponent({
|
|
|
453
469
|
} : void 0]), 1040)) : createCommentVNode("", true),
|
|
454
470
|
renderSlot(_ctx.$slots, "default", {
|
|
455
471
|
id: unref(computedId),
|
|
456
|
-
ariaDescribedby:
|
|
472
|
+
ariaDescribedby: computedAriaDescribedby.value,
|
|
457
473
|
descriptionId: unref(descriptionId),
|
|
458
474
|
labelId: unref(labelId)
|
|
459
475
|
}),
|
|
@@ -481,4 +497,4 @@ var BFormGroup_default = /* @__PURE__ */ defineComponent({
|
|
|
481
497
|
//#endregion
|
|
482
498
|
export { BFormGroup_default as t };
|
|
483
499
|
|
|
484
|
-
//# sourceMappingURL=BFormGroup-
|
|
500
|
+
//# sourceMappingURL=BFormGroup-BE5tGz_g.js.map
|