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.
Files changed (913) hide show
  1. package/dist/App.vue.d.mts +2 -1
  2. package/dist/App.vue.d.ts +2 -1
  3. package/dist/{BAccordion-D51b9HVD.mjs → BAccordion-FuQ6sMFy.js} +33 -31
  4. package/dist/BAccordion-FuQ6sMFy.js.map +1 -0
  5. package/dist/{BAlert-Ce2uxrJi.mjs → BAlert-C9Mi4RDx.js} +20 -13
  6. package/dist/BAlert-C9Mi4RDx.js.map +1 -0
  7. package/dist/{BApp-B-fUrnpK.mjs → BApp-GXR1wS6K.js} +53 -51
  8. package/dist/BApp-GXR1wS6K.js.map +1 -0
  9. package/dist/{BAspect-wfiXM4KA.mjs → BAspect-BPR6DH5W.js} +2 -2
  10. package/dist/{BAspect-CUIU48Ck.js.map → BAspect-BPR6DH5W.js.map} +1 -1
  11. package/dist/{BAutocomplete-CH-bQzME.mjs → BAutocomplete-DGvKY7-D.js} +195 -101
  12. package/dist/BAutocomplete-DGvKY7-D.js.map +1 -0
  13. package/dist/{BAvatar-iALHbqVk.mjs → BAvatar-BsStQrBF.js} +13 -13
  14. package/dist/BAvatar-BsStQrBF.js.map +1 -0
  15. package/dist/{BBadge-Cx_CdauK.mjs → BBadge-BaZ13wE_.js} +5 -5
  16. package/dist/{BBadge-Db6SEnzy.js.map → BBadge-BaZ13wE_.js.map} +1 -1
  17. package/dist/{BBreadcrumb-BxADbg0O.mjs → BBreadcrumb-C-SsS3hM.js} +4 -4
  18. package/dist/{BBreadcrumb-B9ra7vg2.js.map → BBreadcrumb-C-SsS3hM.js.map} +1 -1
  19. package/dist/{BButton-BSa7LfL5.mjs → BButton-Cc2gd95Z.js} +5 -7
  20. package/dist/{BButton-DRRlzkyK.js.map → BButton-Cc2gd95Z.js.map} +1 -1
  21. package/dist/{BButton-PY7AANXJ.mjs → BButton-KZu5jczf.js} +9 -9
  22. package/dist/{BButton-aYtMnyHu.js.map → BButton-KZu5jczf.js.map} +1 -1
  23. package/dist/{BCard-BWoruisp.mjs → BCard-D2GEiXan.js} +2 -3
  24. package/dist/{BCard-Bh8RLMo_.js.map → BCard-D2GEiXan.js.map} +1 -1
  25. package/dist/{BCard-CHbKv2OR.mjs → BCard-nRj1JWtQ.js} +9 -9
  26. package/dist/{BCard-DwNYhVmg.js.map → BCard-nRj1JWtQ.js.map} +1 -1
  27. package/dist/{BCarousel-B6_bgQpl.mjs → BCarousel-DQgfW4DN.js} +11 -10
  28. package/dist/{BCarousel-2JB21Pcu.js.map → BCarousel-DQgfW4DN.js.map} +1 -1
  29. package/dist/{BCloseButton-CKTKr4PS.mjs → BCloseButton-B3-IdpNp.js} +2 -2
  30. package/dist/{BCloseButton-D42zHRLP.js.map → BCloseButton-B3-IdpNp.js.map} +1 -1
  31. package/dist/{BCol-B3VeEk9z.mjs → BCol-DiZFbqU5.js} +3 -3
  32. package/dist/{BCol-Ck9VydHj.js.map → BCol-DiZFbqU5.js.map} +1 -1
  33. package/dist/{BCollapse-kqhe4AmL.mjs → BCollapse-B9fnWSzA.js} +15 -9
  34. package/dist/BCollapse-B9fnWSzA.js.map +1 -0
  35. package/dist/{BContainer-ATfhaxTc.mjs → BContainer-D-bZVPwa.js} +2 -4
  36. package/dist/{BContainer-CcF6dgtI.js.map → BContainer-D-bZVPwa.js.map} +1 -1
  37. package/dist/{BDateField-CccP3H1R.mjs → BDateField-Bj-Jz7u4.js} +27 -22
  38. package/dist/BDateField-Bj-Jz7u4.js.map +1 -0
  39. package/dist/{BDatePicker-BnwnSkBg.mjs → BDatePicker-AVTYcVLy.js} +232 -148
  40. package/dist/BDatePicker-AVTYcVLy.js.map +1 -0
  41. package/dist/{BDropdown-B1DbvVzm.mjs → BDropdown-CnxUzs42.js} +55 -46
  42. package/dist/BDropdown-CnxUzs42.js.map +1 -0
  43. package/dist/{BDropdown-0E8x5kk6.mjs → BDropdown-D4VSJJxu.js} +5 -6
  44. package/dist/{BDropdown-DKCgBzYS.js.map → BDropdown-D4VSJJxu.js.map} +1 -1
  45. package/dist/{BForm-BVfW08s5.mjs → BForm-BOoX6AAr.js} +2 -2
  46. package/dist/{BForm-cnRpggt9.js.map → BForm-BOoX6AAr.js.map} +1 -1
  47. package/dist/{BForm-DJu2hDV_.mjs → BForm-C5PR2ust.js} +7 -8
  48. package/dist/{BForm-6JlWdQMO.js.map → BForm-C5PR2ust.js.map} +1 -1
  49. package/dist/{BFormCheckbox-Baf_9BSc.mjs → BFormCheckbox-BMhyR-J5.js} +12 -13
  50. package/dist/BFormCheckbox-BMhyR-J5.js.map +1 -0
  51. package/dist/{BFormFile-CZebm0Cp.mjs → BFormFile-BVrDprWL.js} +8 -8
  52. package/dist/{BFormFile-MISLntyJ.js.map → BFormFile-BVrDprWL.js.map} +1 -1
  53. package/dist/{BFormGroup-vysRPb99.mjs → BFormGroup-BE5tGz_g.js} +40 -24
  54. package/dist/BFormGroup-BE5tGz_g.js.map +1 -0
  55. package/dist/{BFormInput-sEfU3CuN.mjs → BFormInput-BwvdFGDu.js} +5 -5
  56. package/dist/{BFormInput-CBwwDjfC.js.map → BFormInput-BwvdFGDu.js.map} +1 -1
  57. package/dist/{BFormOtp-C8X3u1od.mjs → BFormOtp-I1t8dqPS.js} +63 -22
  58. package/dist/BFormOtp-I1t8dqPS.js.map +1 -0
  59. package/dist/{BFormRadio-COc_IbxC.mjs → BFormRadio-DRViMh6V.js} +24 -13
  60. package/dist/BFormRadio-DRViMh6V.js.map +1 -0
  61. package/dist/{BFormRating-CIgPVsH_.mjs → BFormRating-AEiF8K8T.js} +23 -17
  62. package/dist/BFormRating-AEiF8K8T.js.map +1 -0
  63. package/dist/{BFormSelect-P-InkOm-.mjs → BFormSelect-DdjH8482.js} +23 -12
  64. package/dist/BFormSelect-DdjH8482.js.map +1 -0
  65. package/dist/{BFormSelectOption-DFN4lPRh.mjs → BFormSelectOption-C8orMj24.js} +3 -3
  66. package/dist/{BFormSelectOption-DrwJucNf.js.map → BFormSelectOption-C8orMj24.js.map} +1 -1
  67. package/dist/{BFormSpinbutton-6qkTBF_4.mjs → BFormSpinbutton-Bt590uT6.js} +10 -9
  68. package/dist/{BFormSpinbutton-1gTz4nTo.js.map → BFormSpinbutton-Bt590uT6.js.map} +1 -1
  69. package/dist/{BFormTag-CnzI39y9.mjs → BFormTag-DGSUfz7A.js} +5 -5
  70. package/dist/{BFormTag-CeV0MSRC.js.map → BFormTag-DGSUfz7A.js.map} +1 -1
  71. package/dist/{BFormTags-BMltSaKL.mjs → BFormTags-CUcyRTCK.js} +23 -27
  72. package/dist/BFormTags-CUcyRTCK.js.map +1 -0
  73. package/dist/{BFormTextarea-DN1gAfSo.mjs → BFormTextarea-DlDe26DL.js} +6 -6
  74. package/dist/{BFormTextarea-C3Cj0DWj.js.map → BFormTextarea-DlDe26DL.js.map} +1 -1
  75. package/dist/{BFormValidFeedback-CBYxQLDz.mjs → BFormValidFeedback-ClqLRxtH.js} +4 -4
  76. package/dist/{BFormValidFeedback-Kwxh798d.js.map → BFormValidFeedback-ClqLRxtH.js.map} +1 -1
  77. package/dist/{BImg-QBS2ECBc.mjs → BImg-knz2UZQE.js} +5 -5
  78. package/dist/{BImg-JKJLgYYT.js.map → BImg-knz2UZQE.js.map} +1 -1
  79. package/dist/{BInputGroup-DiTSexkT.mjs → BInputGroup-Bjh7zXyI.js} +2 -3
  80. package/dist/{BInputGroup-D4fW324B.js.map → BInputGroup-Bjh7zXyI.js.map} +1 -1
  81. package/dist/{BInputGroup-X2Z53RJx.mjs → BInputGroup-DdoeSICR.js} +3 -3
  82. package/dist/{BInputGroup-Bvlfv6VD.js.map → BInputGroup-DdoeSICR.js.map} +1 -1
  83. package/dist/{BLink-Dfgte6dQ.mjs → BLink-mdwZsC7b.js} +5 -5
  84. package/dist/{BLink-kLEjleB1.js.map → BLink-mdwZsC7b.js.map} +1 -1
  85. package/dist/{BListGroup-DwTLpNiD.mjs → BListGroup-CQedMbI8.js} +4 -4
  86. package/dist/{BListGroup-C8JOzHTz.js.map → BListGroup-CQedMbI8.js.map} +1 -1
  87. package/dist/{BModal-C-ZCau2E.mjs → BModal-NPsCBNo7.js} +25 -18
  88. package/dist/BModal-NPsCBNo7.js.map +1 -0
  89. package/dist/{BNav-DfYvjfRK.mjs → BNav-CjXS9tQ5.js} +9 -9
  90. package/dist/{BNav-DCLambmM.js.map → BNav-CjXS9tQ5.js.map} +1 -1
  91. package/dist/{BNavbar-xYaikQVY.mjs → BNavbar-DRqkdxTk.js} +12 -9
  92. package/dist/{BNavbar-BLWaZJRP.js.map → BNavbar-DRqkdxTk.js.map} +1 -1
  93. package/dist/{BOffcanvas-CF-dWeez.mjs → BOffcanvas-BndaBJoP.js} +22 -16
  94. package/dist/BOffcanvas-BndaBJoP.js.map +1 -0
  95. package/dist/{BOverlay-Bh2PIN_q.mjs → BOverlay-CJfy_f6O.js} +6 -6
  96. package/dist/{BOverlay-Bh4ldxgt.js.map → BOverlay-CJfy_f6O.js.map} +1 -1
  97. package/dist/{BPagination-D75q-ZNg.mjs → BPagination-D_Hfk6OF.js} +29 -27
  98. package/dist/{BPagination-fbjFAtxu.js.map → BPagination-D_Hfk6OF.js.map} +1 -1
  99. package/dist/{BPlaceholder-DPQ6mCLN.mjs → BPlaceholder-DvOCnqDh.js} +11 -11
  100. package/dist/{BPlaceholder-B3rs_39w.js.map → BPlaceholder-DvOCnqDh.js.map} +1 -1
  101. package/dist/{BProgress-BZlrPYhA.mjs → BProgress-BNxYppi-.js} +5 -5
  102. package/dist/{BProgress-th0-eZWo.js.map → BProgress-BNxYppi-.js.map} +1 -1
  103. package/dist/{BRow-eGSUYGCW.mjs → BRow-CoBI89xF.js} +4 -4
  104. package/dist/{BRow-7AOuFiSy.js.map → BRow-CoBI89xF.js.map} +1 -1
  105. package/dist/{BSpinner-CUfGqviV.mjs → BSpinner-H1DZOmiM.js} +4 -4
  106. package/dist/{BSpinner-DbYIp-C7.js.map → BSpinner-H1DZOmiM.js.map} +1 -1
  107. package/dist/{BTable-DUHxxWv5.mjs → BTable-BZxX17YU.js} +40 -33
  108. package/dist/BTable-BZxX17YU.js.map +1 -0
  109. package/dist/{BTableSimple-C-jn9Nwh.mjs → BTableSimple-2Z7ssnuG.js} +5 -5
  110. package/dist/{BTableSimple-BkdGAAKb.js.map → BTableSimple-2Z7ssnuG.js.map} +1 -1
  111. package/dist/{BTabs-D_vWlBjT.mjs → BTabs-BVcu9DPg.js} +19 -17
  112. package/dist/{BTabs-CvecFg5N.js.map → BTabs-BVcu9DPg.js.map} +1 -1
  113. package/dist/{BTimeField-BSDaZogC.mjs → BTimeField-CbRGjaI6.js} +24 -19
  114. package/dist/BTimeField-CbRGjaI6.js.map +1 -0
  115. package/dist/{BToast-Y8BayxES.mjs → BToast-Di9HwBOV.js} +21 -14
  116. package/dist/BToast-Di9HwBOV.js.map +1 -0
  117. package/dist/{BTooltip-CVP8HdkU.mjs → BTooltip-BxaUtV4m.js} +5 -5
  118. package/dist/{BTooltip-DPLYtaL1.js.map → BTooltip-BxaUtV4m.js.map} +1 -1
  119. package/dist/{BootstrapVueOptions-Dt1TQdih.mjs → BootstrapVueOptions-DH79gHKG.js} +1 -4
  120. package/dist/BootstrapVueOptions-DH79gHKG.js.map +1 -0
  121. package/dist/{ConditionalTeleport-B4KYZIM6.mjs → ConditionalTeleport-BCKPLEun.js} +1 -1
  122. package/dist/{ConditionalTeleport-BDWcebyD.js.map → ConditionalTeleport-BCKPLEun.js.map} +1 -1
  123. package/dist/{ConditionalWrapper-Dbc_O6qe.mjs → ConditionalWrapper-CCIk52zt.js} +1 -1
  124. package/dist/{ConditionalWrapper-DZH_VSwb.js.map → ConditionalWrapper-CCIk52zt.js.map} +1 -1
  125. package/dist/{DateRangeFieldInput-B86VEz0H.mjs → DateRangeFieldInput-Cbzjg8iF.js} +45 -22
  126. package/dist/DateRangeFieldInput-Cbzjg8iF.js.map +1 -0
  127. package/dist/{PopperContent-DmSgsjSC.mjs → PopperContent-C9eeL6LH.js} +395 -100
  128. package/dist/PopperContent-C9eeL6LH.js.map +1 -0
  129. package/dist/{VisuallyHidden-C4sXnc-k.mjs → VisuallyHidden-BYzyjJiY.js} +23 -15
  130. package/dist/VisuallyHidden-BYzyjJiY.js.map +1 -0
  131. package/dist/{VisuallyHiddenInput-DKIzxsQR.mjs → VisuallyHiddenInput-CUrc8XXa.js} +46 -7
  132. package/dist/VisuallyHiddenInput-CUrc8XXa.js.map +1 -0
  133. package/dist/bootstrap-vue-next.mjs +65 -65
  134. package/dist/{classes-B0E5Y78Y.mjs → classes-BEWWGbj5.js} +1 -1
  135. package/dist/{classes-D5wrmmVs.js.map → classes-BEWWGbj5.js.map} +1 -1
  136. package/dist/components/BAccordion/BAccordion.vue.d.mts +9 -13
  137. package/dist/components/BAccordion/BAccordion.vue.d.ts +9 -13
  138. package/dist/components/BAccordion/BAccordionItem.vue.d.mts +16 -24
  139. package/dist/components/BAccordion/BAccordionItem.vue.d.ts +16 -24
  140. package/dist/components/BAlert/BAlert.vue.d.mts +26 -34
  141. package/dist/components/BAlert/BAlert.vue.d.ts +26 -34
  142. package/dist/components/BApp/BApp.vue.d.mts +8 -12
  143. package/dist/components/BApp/BApp.vue.d.ts +8 -12
  144. package/dist/components/BApp/BOrchestrator.vue.d.mts +2 -1
  145. package/dist/components/BApp/BOrchestrator.vue.d.ts +2 -1
  146. package/dist/components/BAspect/BAspect.vue.d.mts +5 -10
  147. package/dist/components/BAspect/BAspect.vue.d.ts +5 -10
  148. package/dist/components/BAutocomplete/BAutocomplete.vue.d.mts +12 -270
  149. package/dist/components/BAutocomplete/BAutocomplete.vue.d.ts +12 -270
  150. package/dist/components/BAvatar/BAvatar.vue.d.mts +20 -25
  151. package/dist/components/BAvatar/BAvatar.vue.d.ts +20 -25
  152. package/dist/components/BAvatar/BAvatarGroup.vue.d.mts +8 -13
  153. package/dist/components/BAvatar/BAvatarGroup.vue.d.ts +8 -13
  154. package/dist/components/BBadge/BBadge.vue.d.mts +13 -18
  155. package/dist/components/BBadge/BBadge.vue.d.ts +13 -18
  156. package/dist/components/BBreadcrumb/BBreadcrumb.vue.d.mts +6 -11
  157. package/dist/components/BBreadcrumb/BBreadcrumb.vue.d.ts +6 -11
  158. package/dist/components/BBreadcrumb/BBreadcrumbItem.vue.d.mts +13 -18
  159. package/dist/components/BBreadcrumb/BBreadcrumbItem.vue.d.ts +13 -18
  160. package/dist/components/BButton/BButton.vue.d.mts +17 -25
  161. package/dist/components/BButton/BButton.vue.d.ts +17 -25
  162. package/dist/components/BButton/BButtonGroup.vue.d.mts +5 -10
  163. package/dist/components/BButton/BButtonGroup.vue.d.ts +5 -10
  164. package/dist/components/BButton/BButtonToolbar.vue.d.mts +7 -16
  165. package/dist/components/BButton/BButtonToolbar.vue.d.ts +7 -16
  166. package/dist/components/BButton/BCloseButton.vue.d.mts +4 -3
  167. package/dist/components/BButton/BCloseButton.vue.d.ts +4 -3
  168. package/dist/components/BCard/BCard.vue.d.mts +21 -26
  169. package/dist/components/BCard/BCard.vue.d.ts +21 -26
  170. package/dist/components/BCard/BCardBody.vue.d.mts +9 -14
  171. package/dist/components/BCard/BCardBody.vue.d.ts +9 -14
  172. package/dist/components/BCard/BCardFooter.vue.d.mts +7 -11
  173. package/dist/components/BCard/BCardFooter.vue.d.ts +7 -11
  174. package/dist/components/BCard/BCardGroup.vue.d.mts +5 -10
  175. package/dist/components/BCard/BCardGroup.vue.d.ts +5 -10
  176. package/dist/components/BCard/BCardHeader.vue.d.mts +7 -12
  177. package/dist/components/BCard/BCardHeader.vue.d.ts +7 -12
  178. package/dist/components/BCard/BCardImg.vue.d.mts +7 -6
  179. package/dist/components/BCard/BCardImg.vue.d.ts +7 -6
  180. package/dist/components/BCard/BCardSubtitle.vue.d.mts +6 -11
  181. package/dist/components/BCard/BCardSubtitle.vue.d.ts +6 -11
  182. package/dist/components/BCard/BCardText.vue.d.mts +5 -10
  183. package/dist/components/BCard/BCardText.vue.d.ts +5 -10
  184. package/dist/components/BCard/BCardTitle.vue.d.mts +5 -10
  185. package/dist/components/BCard/BCardTitle.vue.d.ts +5 -10
  186. package/dist/components/BCardHeadFoot.vue.d.mts +6 -11
  187. package/dist/components/BCardHeadFoot.vue.d.ts +6 -11
  188. package/dist/components/BCarousel/BCarousel.vue.d.mts +12 -24
  189. package/dist/components/BCarousel/BCarousel.vue.d.ts +12 -24
  190. package/dist/components/BCarousel/BCarouselSlide.vue.d.mts +7 -12
  191. package/dist/components/BCarousel/BCarouselSlide.vue.d.ts +7 -12
  192. package/dist/components/BCollapse/BCollapse.vue.d.mts +13 -21
  193. package/dist/components/BCollapse/BCollapse.vue.d.ts +13 -21
  194. package/dist/components/BContainer/BCol.vue.d.mts +8 -13
  195. package/dist/components/BContainer/BCol.vue.d.ts +8 -13
  196. package/dist/components/BContainer/BContainer.vue.d.mts +5 -10
  197. package/dist/components/BContainer/BContainer.vue.d.ts +5 -10
  198. package/dist/components/BContainer/BRow.vue.d.mts +6 -11
  199. package/dist/components/BContainer/BRow.vue.d.ts +6 -11
  200. package/dist/components/BDateField/BDateField.vue.d.mts +8 -12
  201. package/dist/components/BDateField/BDateField.vue.d.ts +8 -12
  202. package/dist/components/BDateField/BDateRangeField.vue.d.mts +8 -12
  203. package/dist/components/BDateField/BDateRangeField.vue.d.ts +8 -12
  204. package/dist/components/BDateField/BTimeRangeField.vue.d.mts +9 -13
  205. package/dist/components/BDateField/BTimeRangeField.vue.d.ts +9 -13
  206. package/dist/components/BDatePicker/BDatePicker.vue.d.mts +9 -13
  207. package/dist/components/BDatePicker/BDatePicker.vue.d.ts +9 -13
  208. package/dist/components/BDatePicker/BDateRangePicker.vue.d.mts +9 -13
  209. package/dist/components/BDatePicker/BDateRangePicker.vue.d.ts +9 -13
  210. package/dist/components/BDropdown/BDropdown.vue.d.mts +24 -957
  211. package/dist/components/BDropdown/BDropdown.vue.d.ts +24 -957
  212. package/dist/components/BDropdown/BDropdownDivider.vue.d.mts +3 -2
  213. package/dist/components/BDropdown/BDropdownDivider.vue.d.ts +3 -2
  214. package/dist/components/BDropdown/BDropdownForm.vue.d.mts +6 -11
  215. package/dist/components/BDropdown/BDropdownForm.vue.d.ts +6 -11
  216. package/dist/components/BDropdown/BDropdownGroup.vue.d.mts +5 -10
  217. package/dist/components/BDropdown/BDropdownGroup.vue.d.ts +5 -10
  218. package/dist/components/BDropdown/BDropdownHeader.vue.d.mts +7 -12
  219. package/dist/components/BDropdown/BDropdownHeader.vue.d.ts +7 -12
  220. package/dist/components/BDropdown/BDropdownItem.vue.d.mts +12 -17
  221. package/dist/components/BDropdown/BDropdownItem.vue.d.ts +12 -17
  222. package/dist/components/BDropdown/BDropdownItemButton.vue.d.mts +6 -11
  223. package/dist/components/BDropdown/BDropdownItemButton.vue.d.ts +6 -11
  224. package/dist/components/BDropdown/BDropdownText.vue.d.mts +6 -11
  225. package/dist/components/BDropdown/BDropdownText.vue.d.ts +6 -11
  226. package/dist/components/BForm/BForm.vue.d.mts +8 -17
  227. package/dist/components/BForm/BForm.vue.d.ts +8 -17
  228. package/dist/components/BForm/BFormDatalist.vue.d.mts +12 -7
  229. package/dist/components/BForm/BFormDatalist.vue.d.ts +12 -7
  230. package/dist/components/BForm/BFormDatalistBase.vue.d.mts +20 -22
  231. package/dist/components/BForm/BFormDatalistBase.vue.d.ts +20 -22
  232. package/dist/components/BForm/BFormFloatingLabel.vue.d.mts +6 -11
  233. package/dist/components/BForm/BFormFloatingLabel.vue.d.ts +6 -11
  234. package/dist/components/BForm/BFormInvalidFeedback.vue.d.mts +6 -11
  235. package/dist/components/BForm/BFormInvalidFeedback.vue.d.ts +6 -11
  236. package/dist/components/BForm/BFormRow.vue.d.mts +5 -10
  237. package/dist/components/BForm/BFormRow.vue.d.ts +5 -10
  238. package/dist/components/BForm/BFormText.vue.d.mts +6 -11
  239. package/dist/components/BForm/BFormText.vue.d.ts +6 -11
  240. package/dist/components/BForm/BFormValidFeedback.vue.d.mts +6 -11
  241. package/dist/components/BForm/BFormValidFeedback.vue.d.ts +6 -11
  242. package/dist/components/BFormCheckbox/BFormCheckbox.vue.d.mts +14 -22
  243. package/dist/components/BFormCheckbox/BFormCheckbox.vue.d.ts +14 -22
  244. package/dist/components/BFormCheckbox/BFormCheckboxGroup.vue.d.mts +16 -11
  245. package/dist/components/BFormCheckbox/BFormCheckboxGroup.vue.d.ts +16 -11
  246. package/dist/components/BFormCheckbox/BFormCheckboxGroupBase.vue.d.mts +22 -27
  247. package/dist/components/BFormCheckbox/BFormCheckboxGroupBase.vue.d.ts +22 -27
  248. package/dist/components/BFormFile/BFormFile.vue.d.mts +9 -25
  249. package/dist/components/BFormFile/BFormFile.vue.d.ts +9 -25
  250. package/dist/components/BFormGroup/BFormGroup.vue.d.mts +14 -23
  251. package/dist/components/BFormGroup/BFormGroup.vue.d.ts +14 -23
  252. package/dist/components/BFormGroupContent.vue.d.mts +8 -17
  253. package/dist/components/BFormGroupContent.vue.d.ts +8 -17
  254. package/dist/components/BFormGroupLabel.vue.d.mts +6 -13
  255. package/dist/components/BFormGroupLabel.vue.d.ts +6 -13
  256. package/dist/components/BFormInput/BFormInput.vue.d.mts +10 -10
  257. package/dist/components/BFormInput/BFormInput.vue.d.ts +10 -10
  258. package/dist/components/BFormOtp/BFormOtp.vue.d.mts +7 -5
  259. package/dist/components/BFormOtp/BFormOtp.vue.d.ts +7 -5
  260. package/dist/components/BFormRadio/BFormRadio.vue.d.mts +13 -21
  261. package/dist/components/BFormRadio/BFormRadio.vue.d.ts +13 -21
  262. package/dist/components/BFormRadio/BFormRadioGroup.vue.d.mts +21 -14
  263. package/dist/components/BFormRadio/BFormRadioGroup.vue.d.ts +21 -14
  264. package/dist/components/BFormRadio/BFormRadioGroupBase.vue.d.mts +14 -22
  265. package/dist/components/BFormRadio/BFormRadioGroupBase.vue.d.ts +14 -22
  266. package/dist/components/BFormRating/BFormRating.vue.d.mts +10 -12
  267. package/dist/components/BFormRating/BFormRating.vue.d.ts +10 -12
  268. package/dist/components/BFormSelect/BFormSelect.vue.d.mts +16 -11
  269. package/dist/components/BFormSelect/BFormSelect.vue.d.ts +16 -11
  270. package/dist/components/BFormSelect/BFormSelectBase.vue.d.mts +24 -29
  271. package/dist/components/BFormSelect/BFormSelectBase.vue.d.ts +24 -29
  272. package/dist/components/BFormSelect/BFormSelectOption.vue.d.mts +12 -7
  273. package/dist/components/BFormSelect/BFormSelectOption.vue.d.ts +12 -7
  274. package/dist/components/BFormSelect/BFormSelectOptionGroup.vue.d.mts +12 -7
  275. package/dist/components/BFormSelect/BFormSelectOptionGroup.vue.d.ts +12 -7
  276. package/dist/components/BFormSpinbutton/BFormSpinbutton.vue.d.mts +11 -12
  277. package/dist/components/BFormSpinbutton/BFormSpinbutton.vue.d.ts +11 -12
  278. package/dist/components/BFormTags/BFormTag.vue.d.mts +7 -12
  279. package/dist/components/BFormTags/BFormTag.vue.d.ts +7 -12
  280. package/dist/components/BFormTags/BFormTags.vue.d.mts +12 -20
  281. package/dist/components/BFormTags/BFormTags.vue.d.ts +12 -20
  282. package/dist/components/BFormTextarea/BFormTextarea.vue.d.mts +12 -12
  283. package/dist/components/BFormTextarea/BFormTextarea.vue.d.ts +12 -12
  284. package/dist/components/BImg/BImg.vue.d.mts +7 -6
  285. package/dist/components/BImg/BImg.vue.d.ts +7 -6
  286. package/dist/components/BInputGroup/BInputGroup.vue.d.mts +5 -10
  287. package/dist/components/BInputGroup/BInputGroup.vue.d.ts +5 -10
  288. package/dist/components/BInputGroup/BInputGroupText.vue.d.mts +5 -10
  289. package/dist/components/BInputGroup/BInputGroupText.vue.d.ts +5 -10
  290. package/dist/components/BLink/BLink.vue.d.mts +12 -17
  291. package/dist/components/BLink/BLink.vue.d.ts +12 -17
  292. package/dist/components/BListGroup/BListGroup.vue.d.mts +5 -10
  293. package/dist/components/BListGroup/BListGroup.vue.d.ts +5 -10
  294. package/dist/components/BListGroup/BListGroupItem.vue.d.mts +13 -18
  295. package/dist/components/BListGroup/BListGroupItem.vue.d.ts +13 -18
  296. package/dist/components/BModal/BModal.vue.d.mts +47 -1026
  297. package/dist/components/BModal/BModal.vue.d.ts +47 -1026
  298. package/dist/components/BNav/BNav.vue.d.mts +7 -12
  299. package/dist/components/BNav/BNav.vue.d.ts +7 -12
  300. package/dist/components/BNav/BNavForm.vue.d.mts +8 -13
  301. package/dist/components/BNav/BNavForm.vue.d.ts +8 -13
  302. package/dist/components/BNav/BNavItem.vue.d.mts +12 -17
  303. package/dist/components/BNav/BNavItem.vue.d.ts +12 -17
  304. package/dist/components/BNav/BNavItemDropdown.vue.d.mts +20 -1660
  305. package/dist/components/BNav/BNavItemDropdown.vue.d.ts +20 -1660
  306. package/dist/components/BNav/BNavText.vue.d.mts +6 -11
  307. package/dist/components/BNav/BNavText.vue.d.ts +6 -11
  308. package/dist/components/BNavbar/BNavbar.vue.d.mts +6 -11
  309. package/dist/components/BNavbar/BNavbar.vue.d.ts +6 -11
  310. package/dist/components/BNavbar/BNavbarBrand.vue.d.mts +11 -16
  311. package/dist/components/BNavbar/BNavbarBrand.vue.d.ts +11 -16
  312. package/dist/components/BNavbar/BNavbarNav.vue.d.mts +7 -12
  313. package/dist/components/BNavbar/BNavbarNav.vue.d.ts +7 -12
  314. package/dist/components/BNavbar/BNavbarToggle.vue.d.mts +7 -12
  315. package/dist/components/BNavbar/BNavbarToggle.vue.d.ts +7 -12
  316. package/dist/components/BOffcanvas/BOffcanvas.vue.d.mts +28 -82
  317. package/dist/components/BOffcanvas/BOffcanvas.vue.d.ts +28 -82
  318. package/dist/components/BOverlay/BOverlay.vue.d.mts +17 -22
  319. package/dist/components/BOverlay/BOverlay.vue.d.ts +17 -22
  320. package/dist/components/BPagination/BPagination.vue.d.mts +9 -10
  321. package/dist/components/BPagination/BPagination.vue.d.ts +9 -10
  322. package/dist/components/BPlaceholder/BPlaceholder.vue.d.mts +3 -2
  323. package/dist/components/BPlaceholder/BPlaceholder.vue.d.ts +3 -2
  324. package/dist/components/BPlaceholder/BPlaceholderButton.vue.d.mts +3 -2
  325. package/dist/components/BPlaceholder/BPlaceholderButton.vue.d.ts +3 -2
  326. package/dist/components/BPlaceholder/BPlaceholderCard.vue.d.mts +8 -13
  327. package/dist/components/BPlaceholder/BPlaceholderCard.vue.d.ts +8 -13
  328. package/dist/components/BPlaceholder/BPlaceholderTable.vue.d.mts +8 -13
  329. package/dist/components/BPlaceholder/BPlaceholderTable.vue.d.ts +8 -13
  330. package/dist/components/BPlaceholder/BPlaceholderWrapper.vue.d.mts +5 -10
  331. package/dist/components/BPlaceholder/BPlaceholderWrapper.vue.d.ts +5 -10
  332. package/dist/components/BPopover/BPopover.vue.d.mts +35 -49
  333. package/dist/components/BPopover/BPopover.vue.d.ts +35 -49
  334. package/dist/components/BProgress/BProgress.vue.d.mts +10 -15
  335. package/dist/components/BProgress/BProgress.vue.d.ts +10 -15
  336. package/dist/components/BProgress/BProgressBar.vue.d.mts +9 -14
  337. package/dist/components/BProgress/BProgressBar.vue.d.ts +9 -14
  338. package/dist/components/BSpinner/BSpinner.vue.d.mts +7 -12
  339. package/dist/components/BSpinner/BSpinner.vue.d.ts +7 -12
  340. package/dist/components/BTable/BTable.vue.d.mts +35 -30
  341. package/dist/components/BTable/BTable.vue.d.ts +35 -30
  342. package/dist/components/BTable/BTableLite.vue.d.mts +24 -19
  343. package/dist/components/BTable/BTableLite.vue.d.ts +24 -19
  344. package/dist/components/BTable/BTableSimple.vue.d.mts +9 -14
  345. package/dist/components/BTable/BTableSimple.vue.d.ts +9 -14
  346. package/dist/components/BTable/BTbody.vue.d.mts +6 -11
  347. package/dist/components/BTable/BTbody.vue.d.ts +6 -11
  348. package/dist/components/BTable/BTd.vue.d.mts +6 -11
  349. package/dist/components/BTable/BTd.vue.d.ts +6 -11
  350. package/dist/components/BTable/BTfoot.vue.d.mts +6 -11
  351. package/dist/components/BTable/BTfoot.vue.d.ts +6 -11
  352. package/dist/components/BTable/BTh.vue.d.mts +6 -11
  353. package/dist/components/BTable/BTh.vue.d.ts +6 -11
  354. package/dist/components/BTable/BThead.vue.d.mts +6 -11
  355. package/dist/components/BTable/BThead.vue.d.ts +6 -11
  356. package/dist/components/BTable/BTr.vue.d.mts +6 -11
  357. package/dist/components/BTable/BTr.vue.d.ts +6 -11
  358. package/dist/components/BTabs/BTab.vue.d.mts +10 -18
  359. package/dist/components/BTabs/BTab.vue.d.ts +10 -18
  360. package/dist/components/BTabs/BTabs.vue.d.mts +10 -14
  361. package/dist/components/BTabs/BTabs.vue.d.ts +10 -14
  362. package/dist/components/BTabsTabContent.vue.d.mts +7 -15
  363. package/dist/components/BTabsTabContent.vue.d.ts +7 -15
  364. package/dist/components/BTimeField/BTimeField.vue.d.mts +8 -12
  365. package/dist/components/BTimeField/BTimeField.vue.d.ts +8 -12
  366. package/dist/components/BToast/BToast.vue.d.mts +25 -33
  367. package/dist/components/BToast/BToast.vue.d.ts +25 -33
  368. package/dist/components/BTooltip/BTooltip.vue.d.mts +32 -732
  369. package/dist/components/BTooltip/BTooltip.vue.d.ts +32 -732
  370. package/dist/components/ConditionalTeleport.vue.d.mts +3 -2
  371. package/dist/components/ConditionalTeleport.vue.d.ts +3 -2
  372. package/dist/components/ConditionalWrapper.vue.d.mts +3 -2
  373. package/dist/components/ConditionalWrapper.vue.d.ts +3 -2
  374. package/dist/composables/index.d.mts +3 -3
  375. package/dist/composables/index.d.ts +3 -3
  376. package/dist/composables/orchestratorShared/index.d.mts +25 -14
  377. package/dist/composables/orchestratorShared/index.d.ts +25 -14
  378. package/dist/composables/useBLinkHelper.d.mts +1 -1
  379. package/dist/composables/useBLinkHelper.d.ts +1 -1
  380. package/dist/composables/useModal/index.d.mts +8 -33
  381. package/dist/composables/useModal/index.d.ts +8 -33
  382. package/dist/composables/usePopover/index.d.mts +332 -4532
  383. package/dist/composables/usePopover/index.d.ts +332 -4532
  384. package/dist/composables/useShowHide.d.mts +21 -15
  385. package/dist/composables/useShowHide.d.ts +21 -15
  386. package/dist/composables/useToast/index.d.mts +7 -18
  387. package/dist/composables/useToast/index.d.ts +7 -18
  388. package/dist/console-DaUCJgpk.js +15 -0
  389. package/dist/console-DaUCJgpk.js.map +1 -0
  390. package/dist/{constants-Ba9iJn2H.mjs → constants-Cap5sNf8.js} +1 -1
  391. package/dist/{constants-BLIvvaat.js.map → constants-Cap5sNf8.js.map} +1 -1
  392. package/dist/{debounce-DHxNfjan.mjs → debounce-Xj7wsAmR.js} +2 -2
  393. package/dist/{debounce-D6kifS6w.js.map → debounce-Xj7wsAmR.js.map} +1 -1
  394. package/dist/{dist-Dk9C_HFS.mjs → dist-9-XTMhb-.js} +5 -539
  395. package/dist/dist-9-XTMhb-.js.map +1 -0
  396. package/dist/dist-B-regXAP.js +123 -0
  397. package/dist/dist-B-regXAP.js.map +1 -0
  398. package/dist/dist-DKc2ivHS.js +411 -0
  399. package/dist/dist-DKc2ivHS.js.map +1 -0
  400. package/dist/{dom-AhkaSoh8.mjs → dom-BdUQrX99.js} +3 -2
  401. package/dist/dom-BdUQrX99.js.map +1 -0
  402. package/dist/{flattenFragments-ClbLQGqR.mjs → flattenFragments-B15oMVs-.js} +1 -1
  403. package/dist/{flattenFragments-C1WWqm25.js.map → flattenFragments-B15oMVs-.js.map} +1 -1
  404. package/dist/{floating-ui.vue-CH2o_mZU.mjs → floating-ui.dom-C7UZexJK.js} +114 -338
  405. package/dist/floating-ui.dom-C7UZexJK.js.map +1 -0
  406. package/dist/{floatingUi-62aeQtAb.mjs → floatingUi-BlKoACvc.js} +194 -27
  407. package/dist/floatingUi-BlKoACvc.js.map +1 -0
  408. package/dist/{functions-BcMenQqL.mjs → functions-BUZ1y9RA.js} +1 -1
  409. package/dist/functions-BUZ1y9RA.js.map +1 -0
  410. package/dist/{getClasses-COokMI60.mjs → getClasses-BlbbSJNl.js} +1 -1
  411. package/dist/{getClasses-8P0iBind.js.map → getClasses-BlbbSJNl.js.map} +1 -1
  412. package/dist/{getElement-D2Jr1cbp.mjs → getElement-uvhh1lgL.js} +2 -2
  413. package/dist/{getElement-DWGFJn0w.js.map → getElement-uvhh1lgL.js.map} +1 -1
  414. package/dist/{keys-DU7sQgl3.mjs → keys-BgLwJbLV.js} +1 -1
  415. package/dist/keys-BgLwJbLV.js.map +1 -0
  416. package/dist/{object-CHQkkner.mjs → object-C7YmCGEm.js} +10 -6
  417. package/dist/object-C7YmCGEm.js.map +1 -0
  418. package/dist/{registryAccess-BkJDdh-3.mjs → registryAccess-YFj5ZD5T.js} +1 -1
  419. package/dist/{registryAccess-B9QDQwV8.js.map → registryAccess-YFj5ZD5T.js.map} +1 -1
  420. package/dist/src/components/BAccordion/index.mjs +1 -1
  421. package/dist/src/components/BAlert/index.mjs +1 -1
  422. package/dist/src/components/BApp/index.mjs +1 -1
  423. package/dist/src/components/BAspect/index.mjs +1 -1
  424. package/dist/src/components/BAutocomplete/index.mjs +1 -1
  425. package/dist/src/components/BAvatar/index.mjs +1 -1
  426. package/dist/src/components/BBadge/index.mjs +1 -1
  427. package/dist/src/components/BBreadcrumb/index.mjs +1 -1
  428. package/dist/src/components/BButton/index.mjs +3 -3
  429. package/dist/src/components/BCard/index.mjs +2 -2
  430. package/dist/src/components/BCarousel/index.mjs +1 -1
  431. package/dist/src/components/BCol/index.mjs +1 -1
  432. package/dist/src/components/BCollapse/index.mjs +1 -1
  433. package/dist/src/components/BContainer/index.mjs +3 -3
  434. package/dist/src/components/BDateField/index.mjs +1 -1
  435. package/dist/src/components/BDatePicker/index.mjs +1 -1
  436. package/dist/src/components/BDropdown/index.mjs +2 -2
  437. package/dist/src/components/BForm/index.mjs +3 -3
  438. package/dist/src/components/BFormCheckbox/index.mjs +1 -1
  439. package/dist/src/components/BFormFile/index.mjs +1 -1
  440. package/dist/src/components/BFormGroup/index.mjs +1 -1
  441. package/dist/src/components/BFormInput/index.mjs +1 -1
  442. package/dist/src/components/BFormOtp/index.mjs +1 -1
  443. package/dist/src/components/BFormRadio/index.mjs +1 -1
  444. package/dist/src/components/BFormRating/index.mjs +1 -1
  445. package/dist/src/components/BFormSelect/index.mjs +2 -2
  446. package/dist/src/components/BFormSpinbutton/index.mjs +1 -1
  447. package/dist/src/components/BFormTags/index.mjs +2 -2
  448. package/dist/src/components/BFormTextarea/index.mjs +1 -1
  449. package/dist/src/components/BImg/index.mjs +1 -1
  450. package/dist/src/components/BInputGroup/index.mjs +2 -2
  451. package/dist/src/components/BLink/index.mjs +1 -1
  452. package/dist/src/components/BListGroup/index.mjs +1 -1
  453. package/dist/src/components/BModal/index.mjs +1 -1
  454. package/dist/src/components/BNav/index.mjs +1 -1
  455. package/dist/src/components/BNavbar/index.mjs +1 -1
  456. package/dist/src/components/BOffcanvas/index.mjs +1 -1
  457. package/dist/src/components/BOverlay/index.mjs +1 -1
  458. package/dist/src/components/BPagination/index.mjs +1 -1
  459. package/dist/src/components/BPlaceholder/index.mjs +1 -1
  460. package/dist/src/components/BPopover/index.mjs +1 -1
  461. package/dist/src/components/BProgress/index.mjs +1 -1
  462. package/dist/src/components/BRow/index.mjs +1 -1
  463. package/dist/src/components/BSpinner/index.mjs +1 -1
  464. package/dist/src/components/BTable/index.mjs +2 -2
  465. package/dist/src/components/BTabs/index.mjs +1 -1
  466. package/dist/src/components/BTimeField/index.mjs +1 -1
  467. package/dist/src/components/BToast/index.mjs +1 -1
  468. package/dist/src/components/BTooltip/index.mjs +1 -1
  469. package/dist/src/components/index.mjs +60 -68
  470. package/dist/src/composables/index.mjs +5 -8
  471. package/dist/src/composables/index.mjs.map +1 -1
  472. package/dist/src/composables/orchestratorShared/index.mjs +79 -82
  473. package/dist/src/composables/orchestratorShared/index.mjs.map +1 -1
  474. package/dist/src/composables/useBreadcrumb/index.mjs +1 -1
  475. package/dist/src/composables/useBreadcrumb/index.mjs.map +1 -1
  476. package/dist/src/composables/useColorMode/index.mjs +2 -2
  477. package/dist/src/composables/useColorMode/index.mjs.map +1 -1
  478. package/dist/src/composables/useModal/index.mjs +65 -64
  479. package/dist/src/composables/useModal/index.mjs.map +1 -1
  480. package/dist/src/composables/usePopover/index.mjs +51 -68
  481. package/dist/src/composables/usePopover/index.mjs.map +1 -1
  482. package/dist/src/composables/useProvideDefaults/index.mjs +4 -3
  483. package/dist/src/composables/useProvideDefaults/index.mjs.map +1 -1
  484. package/dist/src/composables/useRegistry/index.mjs +5 -3
  485. package/dist/src/composables/useRegistry/index.mjs.map +1 -1
  486. package/dist/src/composables/useScrollLock/index.mjs +2 -1
  487. package/dist/src/composables/useScrollLock/index.mjs.map +1 -1
  488. package/dist/src/composables/useScrollspy/index.mjs +16 -13
  489. package/dist/src/composables/useScrollspy/index.mjs.map +1 -1
  490. package/dist/src/composables/useToast/index.mjs +45 -66
  491. package/dist/src/composables/useToast/index.mjs.map +1 -1
  492. package/dist/src/composables/useToggle/index.mjs +5 -3
  493. package/dist/src/composables/useToggle/index.mjs.map +1 -1
  494. package/dist/src/directives/BColorMode/index.mjs.map +1 -1
  495. package/dist/src/directives/BPopover/index.mjs +2 -2
  496. package/dist/src/directives/BPopover/index.mjs.map +1 -1
  497. package/dist/src/directives/BScrollspy/index.mjs +3 -3
  498. package/dist/src/directives/BScrollspy/index.mjs.map +1 -1
  499. package/dist/src/directives/BToggle/index.mjs +8 -6
  500. package/dist/src/directives/BToggle/index.mjs.map +1 -1
  501. package/dist/src/directives/BTooltip/index.mjs +2 -2
  502. package/dist/src/directives/BTooltip/index.mjs.map +1 -1
  503. package/dist/src/directives/index.mjs +1 -2
  504. package/dist/src/plugins/createBootstrap/index.mjs +1 -1
  505. package/dist/src/plugins/createBootstrap/index.mjs.map +1 -1
  506. package/dist/src/plugins/index.mjs +1 -1
  507. package/dist/src/plugins/orchestrator/index.mjs +1 -1
  508. package/dist/src/plugins/orchestrator/index.mjs.map +1 -1
  509. package/dist/src/plugins/registry/index.mjs +1 -1
  510. package/dist/src/plugins/registry/index.mjs.map +1 -1
  511. package/dist/src/plugins/rtl/index.mjs +1 -1
  512. package/dist/src/plugins/rtl/index.mjs.map +1 -1
  513. package/dist/src/resolvers/index.mjs +2 -2
  514. package/dist/src/resolvers/index.mjs.map +1 -1
  515. package/dist/src/types/index.mjs +2 -2
  516. package/dist/src/utils/index.mjs +2 -2
  517. package/dist/{stringUtils-D4eEDlt1.mjs → stringUtils-CVySsg3y.js} +2 -2
  518. package/dist/{stringUtils-68ZN_GRt.js.map → stringUtils-CVySsg3y.js.map} +1 -1
  519. package/dist/types/BootstrapVueOptions.d.mts +1 -4
  520. package/dist/types/BootstrapVueOptions.d.ts +1 -4
  521. package/dist/types/ComponentOrchestratorTypes.d.mts +62 -186
  522. package/dist/types/ComponentOrchestratorTypes.d.ts +62 -186
  523. package/dist/types/ComponentProps.d.mts +2 -0
  524. package/dist/types/ComponentProps.d.ts +2 -0
  525. package/dist/types/ComponentSlots.d.mts +1 -1
  526. package/dist/types/ComponentSlots.d.ts +1 -1
  527. package/dist/{useAlignment-DuR8ymKI.mjs → useAlignment-DaP-psIh.js} +1 -1
  528. package/dist/{useAlignment-oKolnDpb.js.map → useAlignment-DaP-psIh.js.map} +1 -1
  529. package/dist/{useAriaInvalid-apOwgexm.mjs → useAriaInvalid-CRUhkD2V.js} +1 -1
  530. package/dist/{useAriaInvalid-CHHPHNLU.js.map → useAriaInvalid-CRUhkD2V.js.map} +1 -1
  531. package/dist/{useColorVariantClasses-CqeXHjRh.mjs → useColorVariantClasses-DHQvLjek.js} +1 -1
  532. package/dist/{useColorVariantClasses-Dq0sOYDL.js.map → useColorVariantClasses-DHQvLjek.js.map} +1 -1
  533. package/dist/{useCountdownHover-C3NXiAaF.mjs → useCountdownHover-BN8vJIQW.js} +4 -3
  534. package/dist/{useCountdownHover-DbVhE-N0.js.map → useCountdownHover-BN8vJIQW.js.map} +1 -1
  535. package/dist/{useDateField-CJKgollJ.mjs → useDateField-CQZb799C.js} +680 -627
  536. package/dist/useDateField-CQZb799C.js.map +1 -0
  537. package/dist/{useDefaults-DseelK6y.mjs → useDefaults-BzP4qZBu.js} +2 -2
  538. package/dist/{useDefaults-C0CYry78.js.map → useDefaults-BzP4qZBu.js.map} +1 -1
  539. package/dist/{useFormCheck-BKXrwS3g.mjs → useFormCheck-fArncQY5.js} +3 -3
  540. package/dist/{useFormCheck-DYjLG4WA.js.map → useFormCheck-fArncQY5.js.map} +1 -1
  541. package/dist/{useFormInput-CXl8rpD0.mjs → useFormInput-DZ_3ZH1o.js} +8 -7
  542. package/dist/{useFormInput-ip9hN2AU.js.map → useFormInput-DZ_3ZH1o.js.map} +1 -1
  543. package/dist/{useFormSelect-BM0rsjni.mjs → useFormSelect-CwS8YuiQ.js} +3 -3
  544. package/dist/{useFormSelect-ClmzGzOy.js.map → useFormSelect-CwS8YuiQ.js.map} +1 -1
  545. package/dist/{useForwardExpose-Cob6LlGd.mjs → useForwardExpose-DDvk7mir.js} +5 -13
  546. package/dist/useForwardExpose-DDvk7mir.js.map +1 -0
  547. package/dist/{useId-D1sqXtwx.mjs → useId-Fh-Arhb7.js} +2 -2
  548. package/dist/{useId-BkAY2oh6.js.map → useId-Fh-Arhb7.js.map} +1 -1
  549. package/dist/{useKbd-DfmgFov6.mjs → useKbd-DRsaFU_f.js} +6 -18
  550. package/dist/useKbd-DRsaFU_f.js.map +1 -0
  551. package/dist/{useNumberishToStyle-DgS1slD3.mjs → useNumberishToStyle-DCnYcI6A.js} +2 -2
  552. package/dist/{useNumberishToStyle-BtMa0R27.js.map → useNumberishToStyle-DCnYcI6A.js.map} +1 -1
  553. package/dist/{useRadiusElementClasses-BW832F7F.mjs → useRadiusElementClasses-CKCJjpkK.js} +1 -1
  554. package/dist/{useRadiusElementClasses-DWiUVgex.js.map → useRadiusElementClasses-CKCJjpkK.js.map} +1 -1
  555. package/dist/{useRtl-CGoXBxNo.mjs → useRtl-FeLayV4k.js} +3 -3
  556. package/dist/{useRtl-BSgvbs5F.js.map → useRtl-FeLayV4k.js.map} +1 -1
  557. package/dist/{useSafeScrollLock-Me5LyqjD.mjs → useSafeScrollLock-PVgSASYu.js} +136 -216
  558. package/dist/useSafeScrollLock-PVgSASYu.js.map +1 -0
  559. package/dist/{useShowHide-CBFt1_EW.mjs → useShowHide-C95Y9EKL.js} +15 -14
  560. package/dist/useShowHide-C95Y9EKL.js.map +1 -0
  561. package/dist/{useStateClass-DxlL_m2E.mjs → useStateClass-BF7kf2zK.js} +1 -1
  562. package/dist/{useStateClass-CXK3nCg9.js.map → useStateClass-BF7kf2zK.js.map} +1 -1
  563. package/dist/utils/console.d.mts +2 -0
  564. package/dist/utils/console.d.ts +2 -0
  565. package/dist/utils/keys.d.mts +12 -4
  566. package/dist/utils/keys.d.ts +12 -4
  567. package/dist/{utils-CWvndqPg.mjs → utils-nRGGHA_i.js} +14 -10
  568. package/dist/utils-nRGGHA_i.js.map +1 -0
  569. package/package.json +65 -136
  570. package/dist/BAccordion-D51b9HVD.mjs.map +0 -1
  571. package/dist/BAccordion-DYmuqZIG.js +0 -360
  572. package/dist/BAccordion-DYmuqZIG.js.map +0 -1
  573. package/dist/BAlert-Ce2uxrJi.mjs.map +0 -1
  574. package/dist/BAlert-croEtrQu.js +0 -297
  575. package/dist/BAlert-croEtrQu.js.map +0 -1
  576. package/dist/BApp-B-fUrnpK.mjs.map +0 -1
  577. package/dist/BApp-DOvEe1jo.js +0 -181
  578. package/dist/BApp-DOvEe1jo.js.map +0 -1
  579. package/dist/BAspect-CUIU48Ck.js +0 -50
  580. package/dist/BAspect-wfiXM4KA.mjs.map +0 -1
  581. package/dist/BAutocomplete-CH-bQzME.mjs.map +0 -1
  582. package/dist/BAutocomplete-DLDFAV5_.js +0 -2402
  583. package/dist/BAutocomplete-DLDFAV5_.js.map +0 -1
  584. package/dist/BAvatar-FGK0dK0x.js +0 -386
  585. package/dist/BAvatar-FGK0dK0x.js.map +0 -1
  586. package/dist/BAvatar-iALHbqVk.mjs.map +0 -1
  587. package/dist/BBadge-Cx_CdauK.mjs.map +0 -1
  588. package/dist/BBadge-Db6SEnzy.js +0 -145
  589. package/dist/BBreadcrumb-B9ra7vg2.js +0 -166
  590. package/dist/BBreadcrumb-BxADbg0O.mjs.map +0 -1
  591. package/dist/BButton-BSa7LfL5.mjs.map +0 -1
  592. package/dist/BButton-DRRlzkyK.js +0 -156
  593. package/dist/BButton-PY7AANXJ.mjs.map +0 -1
  594. package/dist/BButton-aYtMnyHu.js +0 -190
  595. package/dist/BCard-BWoruisp.mjs.map +0 -1
  596. package/dist/BCard-Bh8RLMo_.js +0 -52
  597. package/dist/BCard-CHbKv2OR.mjs.map +0 -1
  598. package/dist/BCard-DwNYhVmg.js +0 -444
  599. package/dist/BCarousel-2JB21Pcu.js +0 -427
  600. package/dist/BCarousel-B6_bgQpl.mjs.map +0 -1
  601. package/dist/BCloseButton-CKTKr4PS.mjs.map +0 -1
  602. package/dist/BCloseButton-D42zHRLP.js +0 -45
  603. package/dist/BCol-B3VeEk9z.mjs.map +0 -1
  604. package/dist/BCol-Ck9VydHj.js +0 -140
  605. package/dist/BCollapse-CDLYLSZo.js +0 -183
  606. package/dist/BCollapse-CDLYLSZo.js.map +0 -1
  607. package/dist/BCollapse-kqhe4AmL.mjs.map +0 -1
  608. package/dist/BContainer-ATfhaxTc.mjs.map +0 -1
  609. package/dist/BContainer-CcF6dgtI.js +0 -44
  610. package/dist/BDateField-CccP3H1R.mjs.map +0 -1
  611. package/dist/BDateField-DzZw5FRX.js +0 -919
  612. package/dist/BDateField-DzZw5FRX.js.map +0 -1
  613. package/dist/BDatePicker-BDkzkOcm.js +0 -5138
  614. package/dist/BDatePicker-BDkzkOcm.js.map +0 -1
  615. package/dist/BDatePicker-BnwnSkBg.mjs.map +0 -1
  616. package/dist/BDropdown-0E8x5kk6.mjs.map +0 -1
  617. package/dist/BDropdown-B1DbvVzm.mjs.map +0 -1
  618. package/dist/BDropdown-BPFtkX3p.js +0 -403
  619. package/dist/BDropdown-BPFtkX3p.js.map +0 -1
  620. package/dist/BDropdown-DKCgBzYS.js +0 -415
  621. package/dist/BForm-6JlWdQMO.js +0 -126
  622. package/dist/BForm-BVfW08s5.mjs.map +0 -1
  623. package/dist/BForm-DJu2hDV_.mjs.map +0 -1
  624. package/dist/BForm-cnRpggt9.js +0 -51
  625. package/dist/BFormCheckbox-Baf_9BSc.mjs.map +0 -1
  626. package/dist/BFormCheckbox-D5ySHMJ8.js +0 -489
  627. package/dist/BFormCheckbox-D5ySHMJ8.js.map +0 -1
  628. package/dist/BFormFile-CZebm0Cp.mjs.map +0 -1
  629. package/dist/BFormFile-MISLntyJ.js +0 -423
  630. package/dist/BFormGroup-Bk1t-D1N.js +0 -490
  631. package/dist/BFormGroup-Bk1t-D1N.js.map +0 -1
  632. package/dist/BFormGroup-vysRPb99.mjs.map +0 -1
  633. package/dist/BFormInput-CBwwDjfC.js +0 -142
  634. package/dist/BFormInput-sEfU3CuN.mjs.map +0 -1
  635. package/dist/BFormOtp-C8X3u1od.mjs.map +0 -1
  636. package/dist/BFormOtp-CLrQJRPe.js +0 -542
  637. package/dist/BFormOtp-CLrQJRPe.js.map +0 -1
  638. package/dist/BFormRadio-B2yu-o2v.js +0 -432
  639. package/dist/BFormRadio-B2yu-o2v.js.map +0 -1
  640. package/dist/BFormRadio-COc_IbxC.mjs.map +0 -1
  641. package/dist/BFormRating-CIgPVsH_.mjs.map +0 -1
  642. package/dist/BFormRating-CSdRxN5z.js +0 -263
  643. package/dist/BFormRating-CSdRxN5z.js.map +0 -1
  644. package/dist/BFormSelect-CI92Dv27.js +0 -310
  645. package/dist/BFormSelect-CI92Dv27.js.map +0 -1
  646. package/dist/BFormSelect-P-InkOm-.mjs.map +0 -1
  647. package/dist/BFormSelectOption-DFN4lPRh.mjs.map +0 -1
  648. package/dist/BFormSelectOption-DrwJucNf.js +0 -46
  649. package/dist/BFormSpinbutton-1gTz4nTo.js +0 -447
  650. package/dist/BFormSpinbutton-6qkTBF_4.mjs.map +0 -1
  651. package/dist/BFormTag-CeV0MSRC.js +0 -86
  652. package/dist/BFormTag-CnzI39y9.mjs.map +0 -1
  653. package/dist/BFormTags-BMltSaKL.mjs.map +0 -1
  654. package/dist/BFormTags-BhO60uiL.js +0 -427
  655. package/dist/BFormTags-BhO60uiL.js.map +0 -1
  656. package/dist/BFormTextarea-C3Cj0DWj.js +0 -203
  657. package/dist/BFormTextarea-DN1gAfSo.mjs.map +0 -1
  658. package/dist/BFormValidFeedback-CBYxQLDz.mjs.map +0 -1
  659. package/dist/BFormValidFeedback-Kwxh798d.js +0 -223
  660. package/dist/BImg-JKJLgYYT.js +0 -168
  661. package/dist/BImg-QBS2ECBc.mjs.map +0 -1
  662. package/dist/BInputGroup-Bvlfv6VD.js +0 -55
  663. package/dist/BInputGroup-D4fW324B.js +0 -31
  664. package/dist/BInputGroup-DiTSexkT.mjs.map +0 -1
  665. package/dist/BInputGroup-X2Z53RJx.mjs.map +0 -1
  666. package/dist/BLink-Dfgte6dQ.mjs.map +0 -1
  667. package/dist/BLink-kLEjleB1.js +0 -276
  668. package/dist/BListGroup-C8JOzHTz.js +0 -167
  669. package/dist/BListGroup-DwTLpNiD.mjs.map +0 -1
  670. package/dist/BModal-C-ZCau2E.mjs.map +0 -1
  671. package/dist/BModal-VstTwEq9.js +0 -521
  672. package/dist/BModal-VstTwEq9.js.map +0 -1
  673. package/dist/BNav-DCLambmM.js +0 -453
  674. package/dist/BNav-DfYvjfRK.mjs.map +0 -1
  675. package/dist/BNavbar-BLWaZJRP.js +0 -245
  676. package/dist/BNavbar-xYaikQVY.mjs.map +0 -1
  677. package/dist/BOffcanvas-C7HenFW0.js +0 -331
  678. package/dist/BOffcanvas-C7HenFW0.js.map +0 -1
  679. package/dist/BOffcanvas-CF-dWeez.mjs.map +0 -1
  680. package/dist/BOverlay-Bh2PIN_q.mjs.map +0 -1
  681. package/dist/BOverlay-Bh4ldxgt.js +0 -203
  682. package/dist/BPagination-D75q-ZNg.mjs.map +0 -1
  683. package/dist/BPagination-fbjFAtxu.js +0 -446
  684. package/dist/BPlaceholder-B3rs_39w.js +0 -326
  685. package/dist/BPlaceholder-DPQ6mCLN.mjs.map +0 -1
  686. package/dist/BProgress-BZlrPYhA.mjs.map +0 -1
  687. package/dist/BProgress-th0-eZWo.js +0 -147
  688. package/dist/BRow-7AOuFiSy.js +0 -70
  689. package/dist/BRow-eGSUYGCW.mjs.map +0 -1
  690. package/dist/BSpinner-CUfGqviV.mjs.map +0 -1
  691. package/dist/BSpinner-DbYIp-C7.js +0 -60
  692. package/dist/BTable-BCWW00u_.js +0 -1903
  693. package/dist/BTable-BCWW00u_.js.map +0 -1
  694. package/dist/BTable-DUHxxWv5.mjs.map +0 -1
  695. package/dist/BTableSimple-BkdGAAKb.js +0 -137
  696. package/dist/BTableSimple-C-jn9Nwh.mjs.map +0 -1
  697. package/dist/BTabs-CvecFg5N.js +0 -607
  698. package/dist/BTabs-D_vWlBjT.mjs.map +0 -1
  699. package/dist/BTimeField-BSDaZogC.mjs.map +0 -1
  700. package/dist/BTimeField-BT5HXecp.js +0 -517
  701. package/dist/BTimeField-BT5HXecp.js.map +0 -1
  702. package/dist/BToast-DR0pek4W.js +0 -308
  703. package/dist/BToast-DR0pek4W.js.map +0 -1
  704. package/dist/BToast-Y8BayxES.mjs.map +0 -1
  705. package/dist/BTooltip-CVP8HdkU.mjs.map +0 -1
  706. package/dist/BTooltip-DPLYtaL1.js +0 -213
  707. package/dist/BootstrapVueOptions-DeViqxoD.js +0 -179
  708. package/dist/BootstrapVueOptions-DeViqxoD.js.map +0 -1
  709. package/dist/BootstrapVueOptions-Dt1TQdih.mjs.map +0 -1
  710. package/dist/ConditionalTeleport-B4KYZIM6.mjs.map +0 -1
  711. package/dist/ConditionalTeleport-BDWcebyD.js +0 -34
  712. package/dist/ConditionalWrapper-DZH_VSwb.js +0 -31
  713. package/dist/ConditionalWrapper-Dbc_O6qe.mjs.map +0 -1
  714. package/dist/DateRangeFieldInput-B86VEz0H.mjs.map +0 -1
  715. package/dist/DateRangeFieldInput-HvvI2You.js +0 -762
  716. package/dist/DateRangeFieldInput-HvvI2You.js.map +0 -1
  717. package/dist/PopperContent-BS_eKjzD.js +0 -1515
  718. package/dist/PopperContent-BS_eKjzD.js.map +0 -1
  719. package/dist/PopperContent-DmSgsjSC.mjs.map +0 -1
  720. package/dist/VisuallyHidden-C4sXnc-k.mjs.map +0 -1
  721. package/dist/VisuallyHidden-Cx0phlXT.js +0 -222
  722. package/dist/VisuallyHidden-Cx0phlXT.js.map +0 -1
  723. package/dist/VisuallyHiddenInput-BNrInt6d.js +0 -147
  724. package/dist/VisuallyHiddenInput-BNrInt6d.js.map +0 -1
  725. package/dist/VisuallyHiddenInput-DKIzxsQR.mjs.map +0 -1
  726. package/dist/bootstrap-vue-next.umd.js +0 -275
  727. package/dist/chunk-CoQrYLCe.js +0 -50
  728. package/dist/classes-B0E5Y78Y.mjs.map +0 -1
  729. package/dist/classes-D5wrmmVs.js +0 -92
  730. package/dist/constants-BLIvvaat.js +0 -123
  731. package/dist/constants-Ba9iJn2H.mjs.map +0 -1
  732. package/dist/debounce-D6kifS6w.js +0 -88
  733. package/dist/debounce-DHxNfjan.mjs.map +0 -1
  734. package/dist/dist-DiXKLh_W.js +0 -2064
  735. package/dist/dist-DiXKLh_W.js.map +0 -1
  736. package/dist/dist-Dk9C_HFS.mjs.map +0 -1
  737. package/dist/dom-AhkaSoh8.mjs.map +0 -1
  738. package/dist/dom-Bs6DzM72.js +0 -98
  739. package/dist/dom-Bs6DzM72.js.map +0 -1
  740. package/dist/flattenFragments-C1WWqm25.js +0 -18
  741. package/dist/flattenFragments-ClbLQGqR.mjs.map +0 -1
  742. package/dist/floating-ui.vue-CH2o_mZU.mjs.map +0 -1
  743. package/dist/floating-ui.vue-DDOIU2nS.js +0 -1773
  744. package/dist/floating-ui.vue-DDOIU2nS.js.map +0 -1
  745. package/dist/floatingUi-62aeQtAb.mjs.map +0 -1
  746. package/dist/floatingUi-DQ5bHmy3.js +0 -598
  747. package/dist/floatingUi-DQ5bHmy3.js.map +0 -1
  748. package/dist/functions-BcMenQqL.mjs.map +0 -1
  749. package/dist/functions-Bx1HDqMv.js +0 -11
  750. package/dist/functions-Bx1HDqMv.js.map +0 -1
  751. package/dist/getClasses-8P0iBind.js +0 -19
  752. package/dist/getClasses-COokMI60.mjs.map +0 -1
  753. package/dist/getElement-D2Jr1cbp.mjs.map +0 -1
  754. package/dist/getElement-DWGFJn0w.js +0 -19
  755. package/dist/keys-BMye8nSf.js +0 -187
  756. package/dist/keys-BMye8nSf.js.map +0 -1
  757. package/dist/keys-DU7sQgl3.mjs.map +0 -1
  758. package/dist/object-BN7QwMcz.js +0 -140
  759. package/dist/object-BN7QwMcz.js.map +0 -1
  760. package/dist/object-CHQkkner.mjs.map +0 -1
  761. package/dist/registryAccess-B9QDQwV8.js +0 -39
  762. package/dist/registryAccess-BkJDdh-3.mjs.map +0 -1
  763. package/dist/src/components/BAccordion/index.umd.js +0 -4
  764. package/dist/src/components/BAlert/index.umd.js +0 -3
  765. package/dist/src/components/BApp/index.umd.js +0 -4
  766. package/dist/src/components/BAspect/index.umd.js +0 -3
  767. package/dist/src/components/BAutocomplete/index.umd.js +0 -3
  768. package/dist/src/components/BAvatar/index.umd.js +0 -4
  769. package/dist/src/components/BBadge/index.umd.js +0 -3
  770. package/dist/src/components/BBreadcrumb/index.umd.js +0 -4
  771. package/dist/src/components/BButton/index.umd.js +0 -8
  772. package/dist/src/components/BCard/index.umd.js +0 -12
  773. package/dist/src/components/BCarousel/index.umd.js +0 -4
  774. package/dist/src/components/BCol/index.umd.js +0 -3
  775. package/dist/src/components/BCollapse/index.umd.js +0 -3
  776. package/dist/src/components/BContainer/index.umd.js +0 -7
  777. package/dist/src/components/BDateField/index.umd.js +0 -5
  778. package/dist/src/components/BDatePicker/index.umd.js +0 -4
  779. package/dist/src/components/BDropdown/index.umd.js +0 -11
  780. package/dist/src/components/BForm/index.umd.js +0 -11
  781. package/dist/src/components/BFormCheckbox/index.umd.js +0 -4
  782. package/dist/src/components/BFormFile/index.umd.js +0 -3
  783. package/dist/src/components/BFormGroup/index.umd.js +0 -3
  784. package/dist/src/components/BFormInput/index.umd.js +0 -4
  785. package/dist/src/components/BFormOtp/index.umd.js +0 -3
  786. package/dist/src/components/BFormRadio/index.umd.js +0 -4
  787. package/dist/src/components/BFormRating/index.umd.js +0 -3
  788. package/dist/src/components/BFormSelect/index.umd.js +0 -6
  789. package/dist/src/components/BFormSpinbutton/index.umd.js +0 -3
  790. package/dist/src/components/BFormTags/index.umd.js +0 -5
  791. package/dist/src/components/BFormTextarea/index.umd.js +0 -3
  792. package/dist/src/components/BImg/index.umd.js +0 -3
  793. package/dist/src/components/BInputGroup/index.umd.js +0 -5
  794. package/dist/src/components/BLink/index.umd.js +0 -3
  795. package/dist/src/components/BListGroup/index.umd.js +0 -4
  796. package/dist/src/components/BModal/index.umd.js +0 -3
  797. package/dist/src/components/BNav/index.umd.js +0 -7
  798. package/dist/src/components/BNavbar/index.umd.js +0 -6
  799. package/dist/src/components/BOffcanvas/index.umd.js +0 -3
  800. package/dist/src/components/BOverlay/index.umd.js +0 -3
  801. package/dist/src/components/BPagination/index.umd.js +0 -3
  802. package/dist/src/components/BPlaceholder/index.umd.js +0 -7
  803. package/dist/src/components/BPopover/index.umd.js +0 -3
  804. package/dist/src/components/BProgress/index.umd.js +0 -4
  805. package/dist/src/components/BRow/index.umd.js +0 -3
  806. package/dist/src/components/BSpinner/index.umd.js +0 -3
  807. package/dist/src/components/BTable/index.umd.js +0 -12
  808. package/dist/src/components/BTabs/index.umd.js +0 -4
  809. package/dist/src/components/BTimeField/index.umd.js +0 -3
  810. package/dist/src/components/BToast/index.umd.js +0 -3
  811. package/dist/src/components/BTooltip/index.umd.js +0 -3
  812. package/dist/src/components/index.umd.js +0 -301
  813. package/dist/src/components/index.umd.js.map +0 -1
  814. package/dist/src/composables/index.umd.js +0 -53
  815. package/dist/src/composables/index.umd.js.map +0 -1
  816. package/dist/src/composables/orchestratorShared/index.umd.js +0 -114
  817. package/dist/src/composables/orchestratorShared/index.umd.js.map +0 -1
  818. package/dist/src/composables/useBreadcrumb/index.umd.js +0 -37
  819. package/dist/src/composables/useBreadcrumb/index.umd.js.map +0 -1
  820. package/dist/src/composables/useColorMode/index.umd.js +0 -18
  821. package/dist/src/composables/useColorMode/index.umd.js.map +0 -1
  822. package/dist/src/composables/useModal/index.umd.js +0 -176
  823. package/dist/src/composables/useModal/index.umd.js.map +0 -1
  824. package/dist/src/composables/usePopover/index.umd.js +0 -90
  825. package/dist/src/composables/usePopover/index.umd.js.map +0 -1
  826. package/dist/src/composables/useProvideDefaults/index.umd.js +0 -42
  827. package/dist/src/composables/useProvideDefaults/index.umd.js.map +0 -1
  828. package/dist/src/composables/useRegistry/index.umd.js +0 -135
  829. package/dist/src/composables/useRegistry/index.umd.js.map +0 -1
  830. package/dist/src/composables/useScrollLock/index.umd.js +0 -8
  831. package/dist/src/composables/useScrollLock/index.umd.js.map +0 -1
  832. package/dist/src/composables/useScrollspy/index.umd.js +0 -144
  833. package/dist/src/composables/useScrollspy/index.umd.js.map +0 -1
  834. package/dist/src/composables/useToast/index.umd.js +0 -90
  835. package/dist/src/composables/useToast/index.umd.js.map +0 -1
  836. package/dist/src/composables/useToggle/index.umd.js +0 -34
  837. package/dist/src/composables/useToggle/index.umd.js.map +0 -1
  838. package/dist/src/directives/BColorMode/index.umd.js +0 -15
  839. package/dist/src/directives/BColorMode/index.umd.js.map +0 -1
  840. package/dist/src/directives/BModal/index.umd.js +0 -3
  841. package/dist/src/directives/BPopover/index.umd.js +0 -14
  842. package/dist/src/directives/BPopover/index.umd.js.map +0 -1
  843. package/dist/src/directives/BScrollspy/index.umd.js +0 -35
  844. package/dist/src/directives/BScrollspy/index.umd.js.map +0 -1
  845. package/dist/src/directives/BToggle/index.umd.js +0 -77
  846. package/dist/src/directives/BToggle/index.umd.js.map +0 -1
  847. package/dist/src/directives/BTooltip/index.umd.js +0 -16
  848. package/dist/src/directives/BTooltip/index.umd.js.map +0 -1
  849. package/dist/src/directives/index.umd.js +0 -32
  850. package/dist/src/directives/index.umd.js.map +0 -1
  851. package/dist/src/plugins/createBootstrap/index.umd.js +0 -19
  852. package/dist/src/plugins/createBootstrap/index.umd.js.map +0 -1
  853. package/dist/src/plugins/index.umd.js +0 -26
  854. package/dist/src/plugins/index.umd.js.map +0 -1
  855. package/dist/src/plugins/orchestrator/index.umd.js +0 -13
  856. package/dist/src/plugins/orchestrator/index.umd.js.map +0 -1
  857. package/dist/src/plugins/registry/index.umd.js +0 -62
  858. package/dist/src/plugins/registry/index.umd.js.map +0 -1
  859. package/dist/src/plugins/rtl/index.umd.js +0 -21
  860. package/dist/src/plugins/rtl/index.umd.js.map +0 -1
  861. package/dist/src/resolvers/index.umd.js +0 -94
  862. package/dist/src/resolvers/index.umd.js.map +0 -1
  863. package/dist/src/types/index.umd.js +0 -27
  864. package/dist/src/types/index.umd.js.map +0 -1
  865. package/dist/src/utils/index.umd.js +0 -21
  866. package/dist/src/utils/index.umd.js.map +0 -1
  867. package/dist/stringUtils-68ZN_GRt.js +0 -71
  868. package/dist/stringUtils-D4eEDlt1.mjs.map +0 -1
  869. package/dist/useAlignment-DuR8ymKI.mjs.map +0 -1
  870. package/dist/useAlignment-oKolnDpb.js +0 -16
  871. package/dist/useAriaInvalid-CHHPHNLU.js +0 -17
  872. package/dist/useAriaInvalid-apOwgexm.mjs.map +0 -1
  873. package/dist/useColorVariantClasses-CqeXHjRh.mjs.map +0 -1
  874. package/dist/useColorVariantClasses-Dq0sOYDL.js +0 -27
  875. package/dist/useCountdownHover-C3NXiAaF.mjs.map +0 -1
  876. package/dist/useCountdownHover-DbVhE-N0.js +0 -104
  877. package/dist/useDateField-CJKgollJ.mjs.map +0 -1
  878. package/dist/useDateField-DWv3600o.js +0 -3872
  879. package/dist/useDateField-DWv3600o.js.map +0 -1
  880. package/dist/useDefaults-C0CYry78.js +0 -76
  881. package/dist/useDefaults-DseelK6y.mjs.map +0 -1
  882. package/dist/useFormCheck-BKXrwS3g.mjs.map +0 -1
  883. package/dist/useFormCheck-DYjLG4WA.js +0 -82
  884. package/dist/useFormInput-CXl8rpD0.mjs.map +0 -1
  885. package/dist/useFormInput-ip9hN2AU.js +0 -117
  886. package/dist/useFormSelect-BM0rsjni.mjs.map +0 -1
  887. package/dist/useFormSelect-ClmzGzOy.js +0 -58
  888. package/dist/useForwardExpose-BpZJluPs.js +0 -80
  889. package/dist/useForwardExpose-BpZJluPs.js.map +0 -1
  890. package/dist/useForwardExpose-Cob6LlGd.mjs.map +0 -1
  891. package/dist/useId-BkAY2oh6.js +0 -17
  892. package/dist/useId-D1sqXtwx.mjs.map +0 -1
  893. package/dist/useKbd-DfmgFov6.mjs.map +0 -1
  894. package/dist/useKbd-sqDCJtXL.js +0 -105
  895. package/dist/useKbd-sqDCJtXL.js.map +0 -1
  896. package/dist/useNumberishToStyle-BtMa0R27.js +0 -18
  897. package/dist/useNumberishToStyle-DgS1slD3.mjs.map +0 -1
  898. package/dist/useRadiusElementClasses-BW832F7F.mjs.map +0 -1
  899. package/dist/useRadiusElementClasses-DWiUVgex.js +0 -28
  900. package/dist/useRtl-BSgvbs5F.js +0 -26
  901. package/dist/useRtl-CGoXBxNo.mjs.map +0 -1
  902. package/dist/useSafeScrollLock-7wmPH_Hy.js +0 -1418
  903. package/dist/useSafeScrollLock-7wmPH_Hy.js.map +0 -1
  904. package/dist/useSafeScrollLock-Me5LyqjD.mjs.map +0 -1
  905. package/dist/useShowHide-CBFt1_EW.mjs.map +0 -1
  906. package/dist/useShowHide-CHm2uUep.js +0 -436
  907. package/dist/useShowHide-CHm2uUep.js.map +0 -1
  908. package/dist/useStateClass-CXK3nCg9.js +0 -16
  909. package/dist/useStateClass-DxlL_m2E.mjs.map +0 -1
  910. package/dist/utils-CWvndqPg.mjs.map +0 -1
  911. package/dist/utils-Dk9yAtbs.js +0 -186
  912. package/dist/utils-Dk9yAtbs.js.map +0 -1
  913. /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-DU7sQgl3.mjs";
2
- import { m as useFocus } from "./dist-Dk9C_HFS.mjs";
3
- import { o as isEmptySlot } from "./dom-AhkaSoh8.mjs";
4
- import { t as useDefaults } from "./useDefaults-DseelK6y.mjs";
5
- import { t as useId$1 } from "./useId-D1sqXtwx.mjs";
6
- import { t as ConditionalWrapper_default } from "./ConditionalWrapper-Dbc_O6qe.mjs";
7
- import { a as getLabelClasses, i as getInputClasses, n as getGroupAttr, r as getGroupClasses, t as getClasses } from "./useFormCheck-BKXrwS3g.mjs";
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: /* @__PURE__ */ mergeModels({
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: false
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: /* @__PURE__ */ mergeModels({
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: /* @__PURE__ */ mergeModels({
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-Baf_9BSc.mjs.map
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-Dk9C_HFS.mjs";
2
- import { o as isEmptySlot } from "./dom-AhkaSoh8.mjs";
3
- import { t as useDefaults } from "./useDefaults-DseelK6y.mjs";
4
- import { t as useId$1 } from "./useId-D1sqXtwx.mjs";
5
- import { t as useStateClass } from "./useStateClass-DxlL_m2E.mjs";
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: /* @__PURE__ */ mergeModels({
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: /* @__PURE__ */ mergeModels(["change"], ["update:modelValue"]),
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-CZebm0Cp.mjs.map
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-AhkaSoh8.mjs";
2
- import { t as useDefaults } from "./useDefaults-DseelK6y.mjs";
3
- import { t as useId$1 } from "./useId-D1sqXtwx.mjs";
4
- import { a as upperFirst } from "./stringUtils-D4eEDlt1.mjs";
5
- import { t as useAriaInvalid } from "./useAriaInvalid-apOwgexm.mjs";
6
- import { t as useStateClass } from "./useStateClass-DxlL_m2E.mjs";
7
- import { t as BCol_default } from "./BCol-B3VeEk9z.mjs";
8
- import { a as useProvideFormGroupData, i as BFormInvalidFeedback_default, n as BFormText_default, r as BFormRow_default, t as BFormValidFeedback_default } from "./BFormValidFeedback-CBYxQLDz.mjs";
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: toRef(() => props.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) if (breakpoint === "xs") result[typeof propValue === "boolean" ? "col" : "cols"] = propValue;
308
- else result[breakpoint || (typeof propValue === "boolean" ? "col" : "cols")] = propValue;
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) if (breakpoint === "xs") result.push(`text-${propValue}`);
316
- else result.push(`text-${breakpoint}-${propValue}`);
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(() => !computedLabelFor.value ? "legend" : "label");
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: null,
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 }, [unref(props).floating && !isHorizontal.value ? (openBlock(), createElementBlock("div", _hoisted_2, [
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: null,
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: null,
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-vysRPb99.mjs.map
500
+ //# sourceMappingURL=BFormGroup-BE5tGz_g.js.map