bootstrap-vue-next 0.44.2 → 0.44.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (533) hide show
  1. package/dist/{BAccordion-BJcDjMYL.mjs → BAccordion-BU80DI3B.mjs} +6 -6
  2. package/dist/{BAccordion-BJcDjMYL.mjs.map → BAccordion-BU80DI3B.mjs.map} +1 -1
  3. package/dist/{BAccordion-CQIw-5xs.js → BAccordion-DZ50ppJx.js} +6 -6
  4. package/dist/{BAccordion-CQIw-5xs.js.map → BAccordion-DZ50ppJx.js.map} +1 -1
  5. package/dist/{BAlert-DaQxH8c1.mjs → BAlert-CuWkyQoY.mjs} +9 -9
  6. package/dist/{BAlert-DaQxH8c1.mjs.map → BAlert-CuWkyQoY.mjs.map} +1 -1
  7. package/dist/{BAlert-CVtoW2SX.js → BAlert-DTvDu9YQ.js} +9 -9
  8. package/dist/{BAlert-CVtoW2SX.js.map → BAlert-DTvDu9YQ.js.map} +1 -1
  9. package/dist/{BApp-CIu-zI8K.mjs → BApp-DJWC2mB8.mjs} +2 -2
  10. package/dist/{BApp-CIu-zI8K.mjs.map → BApp-DJWC2mB8.mjs.map} +1 -1
  11. package/dist/{BApp-cBKQc5Dd.js → BApp-DaM0UKIg.js} +2 -2
  12. package/dist/{BApp-cBKQc5Dd.js.map → BApp-DaM0UKIg.js.map} +1 -1
  13. package/dist/BAspect-BULTO240.js +50 -0
  14. package/dist/BAspect-BULTO240.js.map +1 -0
  15. package/dist/BAspect-CwokVvvn.mjs +44 -0
  16. package/dist/BAspect-CwokVvvn.mjs.map +1 -0
  17. package/dist/{BAvatar-BcQeFYZU.js → BAvatar-eEIyfQso.js} +7 -7
  18. package/dist/{BAvatar-BcQeFYZU.js.map → BAvatar-eEIyfQso.js.map} +1 -1
  19. package/dist/{BAvatar-C7Vc4wad.mjs → BAvatar-vI7zHFsj.mjs} +7 -7
  20. package/dist/{BAvatar-C7Vc4wad.mjs.map → BAvatar-vI7zHFsj.mjs.map} +1 -1
  21. package/dist/{BBadge-CKGGd4xB.js → BBadge-Cpuk1892.js} +5 -5
  22. package/dist/{BBadge-CKGGd4xB.js.map → BBadge-Cpuk1892.js.map} +1 -1
  23. package/dist/{BBadge-Dfkx4SMN.mjs → BBadge-xiyuzuG6.mjs} +5 -5
  24. package/dist/{BBadge-Dfkx4SMN.mjs.map → BBadge-xiyuzuG6.mjs.map} +1 -1
  25. package/dist/{BBreadcrumb-1Wxpf1iy.js → BBreadcrumb-BkRDTYv1.js} +4 -4
  26. package/dist/{BBreadcrumb-1Wxpf1iy.js.map → BBreadcrumb-BkRDTYv1.js.map} +1 -1
  27. package/dist/{BBreadcrumb-CR35-KcI.mjs → BBreadcrumb-CjPr1FWj.mjs} +4 -4
  28. package/dist/{BBreadcrumb-CR35-KcI.mjs.map → BBreadcrumb-CjPr1FWj.mjs.map} +1 -1
  29. package/dist/{BButton-BtCX70_2.mjs → BButton-B4xE6uw6.mjs} +5 -5
  30. package/dist/{BButton-BtCX70_2.mjs.map → BButton-B4xE6uw6.mjs.map} +1 -1
  31. package/dist/{BButton-C_bVBx8e.js → BButton-B5oWZOoX.js} +5 -5
  32. package/dist/{BButton-C_bVBx8e.js.map → BButton-B5oWZOoX.js.map} +1 -1
  33. package/dist/{BButton-1yV1UiT7.mjs → BButton-DPCH-g3G.mjs} +4 -4
  34. package/dist/{BButton-1yV1UiT7.mjs.map → BButton-DPCH-g3G.mjs.map} +1 -1
  35. package/dist/{BButton-BID3NrxE.js → BButton-sb1cBCIb.js} +4 -4
  36. package/dist/{BButton-BID3NrxE.js.map → BButton-sb1cBCIb.js.map} +1 -1
  37. package/dist/{BCard-BIQQg9Rx.js → BCard-Bc6OI3iJ.js} +5 -5
  38. package/dist/{BCard-BIQQg9Rx.js.map → BCard-Bc6OI3iJ.js.map} +1 -1
  39. package/dist/{BCard-D1J5OVRY.js → BCard-BpaUsusY.js} +3 -3
  40. package/dist/{BCard-D1J5OVRY.js.map → BCard-BpaUsusY.js.map} +1 -1
  41. package/dist/{BCard-CY6iY456.mjs → BCard-DQxiuBWk.mjs} +3 -3
  42. package/dist/{BCard-CY6iY456.mjs.map → BCard-DQxiuBWk.mjs.map} +1 -1
  43. package/dist/{BCard-Vf1haqo5.mjs → BCard-Dly2DM9l.mjs} +5 -5
  44. package/dist/{BCard-Vf1haqo5.mjs.map → BCard-Dly2DM9l.mjs.map} +1 -1
  45. package/dist/{BCarousel-C3CA_wGV.mjs → BCarousel-DarHY6e7.mjs} +5 -5
  46. package/dist/{BCarousel-C3CA_wGV.mjs.map → BCarousel-DarHY6e7.mjs.map} +1 -1
  47. package/dist/{BCarousel-BH6WIvJx.js → BCarousel-DvQKUvSp.js} +5 -5
  48. package/dist/{BCarousel-BH6WIvJx.js.map → BCarousel-DvQKUvSp.js.map} +1 -1
  49. package/dist/{BCloseButton-CgIVNv2g.js → BCloseButton-CN__Jjcj.js} +2 -2
  50. package/dist/{BCloseButton-CgIVNv2g.js.map → BCloseButton-CN__Jjcj.js.map} +1 -1
  51. package/dist/{BCloseButton-DrD0tpan.mjs → BCloseButton-CjgbR1Ec.mjs} +2 -2
  52. package/dist/{BCloseButton-DrD0tpan.mjs.map → BCloseButton-CjgbR1Ec.mjs.map} +1 -1
  53. package/dist/{BCol-BjC3q-su.mjs → BCol-BAGO0XhU.mjs} +3 -3
  54. package/dist/{BCol-BjC3q-su.mjs.map → BCol-BAGO0XhU.mjs.map} +1 -1
  55. package/dist/{BCol-GOE5drq_.js → BCol-CXEKpSfY.js} +3 -3
  56. package/dist/{BCol-GOE5drq_.js.map → BCol-CXEKpSfY.js.map} +1 -1
  57. package/dist/{BCollapse-DqeS5WyB.mjs → BCollapse-BzIGTt3g.mjs} +4 -4
  58. package/dist/{BCollapse-DqeS5WyB.mjs.map → BCollapse-BzIGTt3g.mjs.map} +1 -1
  59. package/dist/{BCollapse-BMSZfqqk.js → BCollapse-D2tCzh6C.js} +4 -4
  60. package/dist/{BCollapse-BMSZfqqk.js.map → BCollapse-D2tCzh6C.js.map} +1 -1
  61. package/dist/{BContainer-NRhwYcFj.mjs → BContainer-CBvLhEKU.mjs} +4 -4
  62. package/dist/{BContainer-NRhwYcFj.mjs.map → BContainer-CBvLhEKU.mjs.map} +1 -1
  63. package/dist/{BContainer-CdNYUb9S.js → BContainer-D0G_4Ccr.js} +4 -4
  64. package/dist/{BContainer-CdNYUb9S.js.map → BContainer-D0G_4Ccr.js.map} +1 -1
  65. package/dist/{BDateField-CRFFJ4Sj.mjs → BDateField-Ci05mtvE.mjs} +5 -5
  66. package/dist/{BDateField-CRFFJ4Sj.mjs.map → BDateField-Ci05mtvE.mjs.map} +1 -1
  67. package/dist/{BDateField-3Xb73vd-.js → BDateField-DOQj40bP.js} +5 -5
  68. package/dist/{BDateField-3Xb73vd-.js.map → BDateField-DOQj40bP.js.map} +1 -1
  69. package/dist/{BDatePicker-rdtRZlra.js → BDatePicker-CHtppbq6.js} +6 -6
  70. package/dist/{BDatePicker-rdtRZlra.js.map → BDatePicker-CHtppbq6.js.map} +1 -1
  71. package/dist/{BDatePicker-DPtAqGyV.mjs → BDatePicker-CpwEikK3.mjs} +6 -6
  72. package/dist/{BDatePicker-DPtAqGyV.mjs.map → BDatePicker-CpwEikK3.mjs.map} +1 -1
  73. package/dist/{BDropdown-CKnx6hUH.mjs → BDropdown-CkklXJE1.mjs} +10 -10
  74. package/dist/{BDropdown-CKnx6hUH.mjs.map → BDropdown-CkklXJE1.mjs.map} +1 -1
  75. package/dist/{BDropdown-k-nulez8.mjs → BDropdown-CmUoG4aR.mjs} +5 -5
  76. package/dist/{BDropdown-k-nulez8.mjs.map → BDropdown-CmUoG4aR.mjs.map} +1 -1
  77. package/dist/{BDropdown-C2L69dLN.js → BDropdown-g6_09NKU.js} +10 -10
  78. package/dist/{BDropdown-C2L69dLN.js.map → BDropdown-g6_09NKU.js.map} +1 -1
  79. package/dist/{BDropdown-CrgX7oCn.js → BDropdown-i62kSdFN.js} +5 -5
  80. package/dist/{BDropdown-CrgX7oCn.js.map → BDropdown-i62kSdFN.js.map} +1 -1
  81. package/dist/{BForm-CPHblWb2.mjs → BForm-BKeJ6pQN.mjs} +2 -2
  82. package/dist/{BForm-CPHblWb2.mjs.map → BForm-BKeJ6pQN.mjs.map} +1 -1
  83. package/dist/{BForm-ppPvhIuu.js → BForm-BW5sAbJu.js} +6 -6
  84. package/dist/{BForm-ppPvhIuu.js.map → BForm-BW5sAbJu.js.map} +1 -1
  85. package/dist/{BForm-DZW1uWD-.mjs → BForm-BYWcrW3i.mjs} +6 -6
  86. package/dist/{BForm-DZW1uWD-.mjs.map → BForm-BYWcrW3i.mjs.map} +1 -1
  87. package/dist/{BForm-B0YEolfQ.js → BForm-D1hmPFIR.js} +2 -2
  88. package/dist/{BForm-B0YEolfQ.js.map → BForm-D1hmPFIR.js.map} +1 -1
  89. package/dist/{BFormCheckbox-CsN1a4jm.mjs → BFormCheckbox-LMGyV5Wh.mjs} +5 -5
  90. package/dist/{BFormCheckbox-CsN1a4jm.mjs.map → BFormCheckbox-LMGyV5Wh.mjs.map} +1 -1
  91. package/dist/{BFormCheckbox-MEwee9Ij.js → BFormCheckbox-eSsgdaji.js} +5 -5
  92. package/dist/{BFormCheckbox-MEwee9Ij.js.map → BFormCheckbox-eSsgdaji.js.map} +1 -1
  93. package/dist/{BFormFile-CNtEA98J.mjs → BFormFile-DUd50zn5.mjs} +4 -4
  94. package/dist/{BFormFile-CNtEA98J.mjs.map → BFormFile-DUd50zn5.mjs.map} +1 -1
  95. package/dist/{BFormFile-BEHeBj6q.js → BFormFile-N491i_FE.js} +4 -4
  96. package/dist/{BFormFile-BEHeBj6q.js.map → BFormFile-N491i_FE.js.map} +1 -1
  97. package/dist/{BFormGroup-DBVGyJ-f.mjs → BFormGroup-Bm3Af8hx.mjs} +8 -8
  98. package/dist/{BFormGroup-DBVGyJ-f.mjs.map → BFormGroup-Bm3Af8hx.mjs.map} +1 -1
  99. package/dist/{BFormGroup-CGjb_pUi.js → BFormGroup-DN4AyqDY.js} +8 -8
  100. package/dist/{BFormGroup-CGjb_pUi.js.map → BFormGroup-DN4AyqDY.js.map} +1 -1
  101. package/dist/{BFormInput-4vCGzAoO.js → BFormInput-DniXdPz5.js} +3 -3
  102. package/dist/{BFormInput-4vCGzAoO.js.map → BFormInput-DniXdPz5.js.map} +1 -1
  103. package/dist/{BFormInput-DrZnHCLO.mjs → BFormInput-UqEvTffC.mjs} +3 -3
  104. package/dist/{BFormInput-DrZnHCLO.mjs.map → BFormInput-UqEvTffC.mjs.map} +1 -1
  105. package/dist/{BFormRadio-BXpiJTsS.mjs → BFormRadio-B7fL16AZ.mjs} +5 -5
  106. package/dist/{BFormRadio-BXpiJTsS.mjs.map → BFormRadio-B7fL16AZ.mjs.map} +1 -1
  107. package/dist/{BFormRadio-BzHsRe9X.js → BFormRadio-C9U9PbDA.js} +5 -5
  108. package/dist/{BFormRadio-BzHsRe9X.js.map → BFormRadio-C9U9PbDA.js.map} +1 -1
  109. package/dist/{BFormRating-Cq94zurU.mjs → BFormRating-BJI4hTHm.mjs} +4 -4
  110. package/dist/{BFormRating-Cq94zurU.mjs.map → BFormRating-BJI4hTHm.mjs.map} +1 -1
  111. package/dist/{BFormRating-_MVRGNOF.js → BFormRating-JeEiyayh.js} +4 -4
  112. package/dist/{BFormRating-_MVRGNOF.js.map → BFormRating-JeEiyayh.js.map} +1 -1
  113. package/dist/{BFormSelect-DbpJ_0j-.mjs → BFormSelect-BleWBr-U.mjs} +6 -6
  114. package/dist/{BFormSelect-DbpJ_0j-.mjs.map → BFormSelect-BleWBr-U.mjs.map} +1 -1
  115. package/dist/{BFormSelect-DFa1-5ez.js → BFormSelect-D_yYXijf.js} +6 -6
  116. package/dist/{BFormSelect-DFa1-5ez.js.map → BFormSelect-D_yYXijf.js.map} +1 -1
  117. package/dist/{BFormSpinbutton-DmzfRDeR.mjs → BFormSpinbutton-5JRMW1Bo.mjs} +5 -5
  118. package/dist/{BFormSpinbutton-DmzfRDeR.mjs.map → BFormSpinbutton-5JRMW1Bo.mjs.map} +1 -1
  119. package/dist/{BFormSpinbutton-DzJ071Gz.js → BFormSpinbutton-Dix9U_c1.js} +5 -5
  120. package/dist/{BFormSpinbutton-DzJ071Gz.js.map → BFormSpinbutton-Dix9U_c1.js.map} +1 -1
  121. package/dist/{BFormTags-pK9i3cOB.js → BFormTags-BUoQXBA9.js} +7 -7
  122. package/dist/{BFormTags-pK9i3cOB.js.map → BFormTags-BUoQXBA9.js.map} +1 -1
  123. package/dist/{BFormTags-Cobh04P9.mjs → BFormTags-BjyHMiw1.mjs} +7 -7
  124. package/dist/{BFormTags-Cobh04P9.mjs.map → BFormTags-BjyHMiw1.mjs.map} +1 -1
  125. package/dist/{BFormTextarea-BtXarcjA.js → BFormTextarea-BIrsIHU1.js} +3 -3
  126. package/dist/{BFormTextarea-BtXarcjA.js.map → BFormTextarea-BIrsIHU1.js.map} +1 -1
  127. package/dist/{BFormTextarea-ClcoJrSM.mjs → BFormTextarea-D8waUYBT.mjs} +3 -3
  128. package/dist/{BFormTextarea-ClcoJrSM.mjs.map → BFormTextarea-D8waUYBT.mjs.map} +1 -1
  129. package/dist/{BFormValidFeedback-foz9BlkH.mjs → BFormValidFeedback-BNQNdH26.mjs} +3 -3
  130. package/dist/{BFormValidFeedback-foz9BlkH.mjs.map → BFormValidFeedback-BNQNdH26.mjs.map} +1 -1
  131. package/dist/{BFormValidFeedback-Ot8gdDST.js → BFormValidFeedback-CiZ4cn1v.js} +3 -3
  132. package/dist/{BFormValidFeedback-Ot8gdDST.js.map → BFormValidFeedback-CiZ4cn1v.js.map} +1 -1
  133. package/dist/{BImg-BrA0ZRS6.js → BImg-BFKDHH7y.js} +4 -4
  134. package/dist/{BImg-BrA0ZRS6.js.map → BImg-BFKDHH7y.js.map} +1 -1
  135. package/dist/{BImg-b_3eTiEq.mjs → BImg-BZ7hac1l.mjs} +4 -4
  136. package/dist/{BImg-b_3eTiEq.mjs.map → BImg-BZ7hac1l.mjs.map} +1 -1
  137. package/dist/{BInputGroup-Cr0qLUds.js → BInputGroup-DwrQVmGT.js} +2 -2
  138. package/dist/{BInputGroup-Cr0qLUds.js.map → BInputGroup-DwrQVmGT.js.map} +1 -1
  139. package/dist/{BInputGroup-B8fKBtip.mjs → BInputGroup-xno5tJWV.mjs} +2 -2
  140. package/dist/{BInputGroup-B8fKBtip.mjs.map → BInputGroup-xno5tJWV.mjs.map} +1 -1
  141. package/dist/{BLink-DoYZ8dBl.mjs → BLink-Cz5YCsnv.mjs} +4 -4
  142. package/dist/{BLink-DoYZ8dBl.mjs.map → BLink-Cz5YCsnv.mjs.map} +1 -1
  143. package/dist/{BLink-DW7s8W_N.js → BLink-uemyYKst.js} +4 -4
  144. package/dist/{BLink-DW7s8W_N.js.map → BLink-uemyYKst.js.map} +1 -1
  145. package/dist/{BListGroup-ByYmtuCM.mjs → BListGroup-DHdBjAI1.mjs} +3 -3
  146. package/dist/{BListGroup-ByYmtuCM.mjs.map → BListGroup-DHdBjAI1.mjs.map} +1 -1
  147. package/dist/{BListGroup-clQNXk23.js → BListGroup-yJ9SOYxq.js} +3 -3
  148. package/dist/{BListGroup-clQNXk23.js.map → BListGroup-yJ9SOYxq.js.map} +1 -1
  149. package/dist/{BModal-d3FKaKhA.js → BModal-CVf686JS.js} +10 -10
  150. package/dist/{BModal-d3FKaKhA.js.map → BModal-CVf686JS.js.map} +1 -1
  151. package/dist/{BModal-TCXrZEZk.mjs → BModal-DkX-2F1v.mjs} +10 -10
  152. package/dist/{BModal-TCXrZEZk.mjs.map → BModal-DkX-2F1v.mjs.map} +1 -1
  153. package/dist/{BNav-BBr8213N.mjs → BNav-D88X9xHW.mjs} +7 -7
  154. package/dist/{BNav-BBr8213N.mjs.map → BNav-D88X9xHW.mjs.map} +1 -1
  155. package/dist/{BNav-BMAZcVDS.js → BNav-dxOO1pJI.js} +7 -7
  156. package/dist/{BNav-BMAZcVDS.js.map → BNav-dxOO1pJI.js.map} +1 -1
  157. package/dist/{BNavbar-DtgNmsyI.mjs → BNavbar-DALgesyZ.mjs} +6 -6
  158. package/dist/{BNavbar-DtgNmsyI.mjs.map → BNavbar-DALgesyZ.mjs.map} +1 -1
  159. package/dist/{BNavbar-BfYFzX1s.js → BNavbar-EayLl9th.js} +6 -6
  160. package/dist/{BNavbar-BfYFzX1s.js.map → BNavbar-EayLl9th.js.map} +1 -1
  161. package/dist/{BOffcanvas-YsVap-9w.js → BOffcanvas-CJDXvuCR.js} +9 -9
  162. package/dist/{BOffcanvas-YsVap-9w.js.map → BOffcanvas-CJDXvuCR.js.map} +1 -1
  163. package/dist/{BOffcanvas-BklEA-4x.mjs → BOffcanvas-CJUaqRuT.mjs} +9 -9
  164. package/dist/{BOffcanvas-BklEA-4x.mjs.map → BOffcanvas-CJUaqRuT.mjs.map} +1 -1
  165. package/dist/{BOverlay-DOfvBAZb.mjs → BOverlay-CZUXqAOJ.mjs} +6 -6
  166. package/dist/{BOverlay-DOfvBAZb.mjs.map → BOverlay-CZUXqAOJ.mjs.map} +1 -1
  167. package/dist/{BOverlay-Dg9YM7p1.js → BOverlay-Ct1Be98i.js} +6 -6
  168. package/dist/{BOverlay-Dg9YM7p1.js.map → BOverlay-Ct1Be98i.js.map} +1 -1
  169. package/dist/{BPagination-B868NBmG.mjs → BPagination-BOW0ZgHP.mjs} +5 -5
  170. package/dist/{BPagination-B868NBmG.mjs.map → BPagination-BOW0ZgHP.mjs.map} +1 -1
  171. package/dist/{BPagination-9P9Xh3cN.js → BPagination-Dm-dKaSQ.js} +5 -5
  172. package/dist/{BPagination-9P9Xh3cN.js.map → BPagination-Dm-dKaSQ.js.map} +1 -1
  173. package/dist/{BPlaceholder-DPEVmogO.js → BPlaceholder-LEAD84zn.js} +5 -5
  174. package/dist/{BPlaceholder-DPEVmogO.js.map → BPlaceholder-LEAD84zn.js.map} +1 -1
  175. package/dist/{BPlaceholder-7UJ3Nyb3.mjs → BPlaceholder-V5sitFFG.mjs} +5 -5
  176. package/dist/{BPlaceholder-7UJ3Nyb3.mjs.map → BPlaceholder-V5sitFFG.mjs.map} +1 -1
  177. package/dist/{BProgress-Bdf5AncM.mjs → BProgress-D0yfZ2Ze.mjs} +3 -3
  178. package/dist/{BProgress-Bdf5AncM.mjs.map → BProgress-D0yfZ2Ze.mjs.map} +1 -1
  179. package/dist/{BProgress-CeEIdt1a.js → BProgress-DAnEfDXq.js} +3 -3
  180. package/dist/{BProgress-CeEIdt1a.js.map → BProgress-DAnEfDXq.js.map} +1 -1
  181. package/dist/{BRow-NaXJzpS-.mjs → BRow-BKxCxJUU.mjs} +4 -4
  182. package/dist/{BRow-NaXJzpS-.mjs.map → BRow-BKxCxJUU.mjs.map} +1 -1
  183. package/dist/{BRow-DGi1WkB9.js → BRow-bG6T9jY3.js} +4 -4
  184. package/dist/{BRow-DGi1WkB9.js.map → BRow-bG6T9jY3.js.map} +1 -1
  185. package/dist/{BSpinner-Kska3Bsd.js → BSpinner-8UMAINYb.js} +3 -3
  186. package/dist/{BSpinner-Kska3Bsd.js.map → BSpinner-8UMAINYb.js.map} +1 -1
  187. package/dist/{BSpinner-DlLxrIkh.mjs → BSpinner-BpnwONvx.mjs} +3 -3
  188. package/dist/{BSpinner-DlLxrIkh.mjs.map → BSpinner-BpnwONvx.mjs.map} +1 -1
  189. package/dist/{BTable-C__GSYX2.mjs → BTable-CYvvqn6I.mjs} +8 -8
  190. package/dist/{BTable-C__GSYX2.mjs.map → BTable-CYvvqn6I.mjs.map} +1 -1
  191. package/dist/{BTable-BiNbXnsR.js → BTable-DSuQWlMd.js} +8 -8
  192. package/dist/{BTable-BiNbXnsR.js.map → BTable-DSuQWlMd.js.map} +1 -1
  193. package/dist/{BTableSimple-fwaF0Kws.js → BTableSimple-Bq8PToKM.js} +5 -5
  194. package/dist/{BTableSimple-fwaF0Kws.js.map → BTableSimple-Bq8PToKM.js.map} +1 -1
  195. package/dist/{BTableSimple-eebTf2L5.mjs → BTableSimple-DfE2d_yr.mjs} +5 -5
  196. package/dist/{BTableSimple-eebTf2L5.mjs.map → BTableSimple-DfE2d_yr.mjs.map} +1 -1
  197. package/dist/{BTabs-BxwRSBMv.js → BTabs-C_zLwDuN.js} +6 -6
  198. package/dist/{BTabs-BxwRSBMv.js.map → BTabs-C_zLwDuN.js.map} +1 -1
  199. package/dist/{BTabs-7IT0dhVr.mjs → BTabs-De_t7t0r.mjs} +6 -6
  200. package/dist/{BTabs-7IT0dhVr.mjs.map → BTabs-De_t7t0r.mjs.map} +1 -1
  201. package/dist/{BTimeField-CZw1_K7v.mjs → BTimeField-Ba7V9u04.mjs} +4 -4
  202. package/dist/{BTimeField-CZw1_K7v.mjs.map → BTimeField-Ba7V9u04.mjs.map} +1 -1
  203. package/dist/{BTimeField-CngB6NOW.js → BTimeField-BjiB8bN9.js} +4 -4
  204. package/dist/{BTimeField-CngB6NOW.js.map → BTimeField-BjiB8bN9.js.map} +1 -1
  205. package/dist/{BToast-IYBku5Nr.mjs → BToast-DGcCFzvf.mjs} +10 -10
  206. package/dist/{BToast-IYBku5Nr.mjs.map → BToast-DGcCFzvf.mjs.map} +1 -1
  207. package/dist/{BToast-BraVbf4N.js → BToast-SdIR1HJa.js} +10 -10
  208. package/dist/{BToast-BraVbf4N.js.map → BToast-SdIR1HJa.js.map} +1 -1
  209. package/dist/{BTooltip-B2hE5Q6m.js → BTooltip-CrHabClh.js} +3 -3
  210. package/dist/{BTooltip-B2hE5Q6m.js.map → BTooltip-CrHabClh.js.map} +1 -1
  211. package/dist/{BTooltip-BuK_zb1B.mjs → BTooltip-U16exDFb.mjs} +3 -3
  212. package/dist/{BTooltip-BuK_zb1B.mjs.map → BTooltip-U16exDFb.mjs.map} +1 -1
  213. package/dist/{BootstrapVueOptions-Dtdn7_AJ.mjs → BootstrapVueOptions-Bswes3nS.mjs} +2 -1
  214. package/dist/BootstrapVueOptions-Bswes3nS.mjs.map +1 -0
  215. package/dist/{BootstrapVueOptions-CVxLmDvx.js → BootstrapVueOptions-BxTxSFXn.js} +2 -1
  216. package/dist/BootstrapVueOptions-BxTxSFXn.js.map +1 -0
  217. package/dist/{ConditionalTeleport-BDWcebyD.js → ConditionalTeleport-BJZk6HAx.js} +1 -1
  218. package/dist/{ConditionalTeleport-BDWcebyD.js.map → ConditionalTeleport-BJZk6HAx.js.map} +1 -1
  219. package/dist/{ConditionalTeleport-B4KYZIM6.mjs → ConditionalTeleport-BNsziElf.mjs} +1 -1
  220. package/dist/{ConditionalTeleport-B4KYZIM6.mjs.map → ConditionalTeleport-BNsziElf.mjs.map} +1 -1
  221. package/dist/{ConditionalWrapper-ZqZKYsic.js → ConditionalWrapper-BcQirqyl.js} +1 -1
  222. package/dist/{ConditionalWrapper-ZqZKYsic.js.map → ConditionalWrapper-BcQirqyl.js.map} +1 -1
  223. package/dist/{ConditionalWrapper-BR9CKZNU.mjs → ConditionalWrapper-BjjQWNtR.mjs} +1 -1
  224. package/dist/{ConditionalWrapper-BR9CKZNU.mjs.map → ConditionalWrapper-BjjQWNtR.mjs.map} +1 -1
  225. package/dist/{DateRangeFieldInput-bA6IK9lx.mjs → DateRangeFieldInput-BaxQpIux.mjs} +2 -2
  226. package/dist/{DateRangeFieldInput-bA6IK9lx.mjs.map → DateRangeFieldInput-BaxQpIux.mjs.map} +1 -1
  227. package/dist/{DateRangeFieldInput-bXDqGVUe.js → DateRangeFieldInput-qCIvFM7a.js} +2 -2
  228. package/dist/{DateRangeFieldInput-bXDqGVUe.js.map → DateRangeFieldInput-qCIvFM7a.js.map} +1 -1
  229. package/dist/bootstrap-vue-next.mjs +58 -57
  230. package/dist/bootstrap-vue-next.umd.js +58 -56
  231. package/dist/{classes-D6JE1Dex.mjs → classes-B0E5Y78Y.mjs} +1 -1
  232. package/dist/{classes-D6JE1Dex.mjs.map → classes-B0E5Y78Y.mjs.map} +1 -1
  233. package/dist/{classes-vdSVs0gA.js → classes-D5wrmmVs.js} +1 -1
  234. package/dist/{classes-vdSVs0gA.js.map → classes-D5wrmmVs.js.map} +1 -1
  235. package/dist/components/BAccordion/BAccordionItem.vue.d.mts +1 -1
  236. package/dist/components/BAccordion/BAccordionItem.vue.d.ts +1 -1
  237. package/dist/components/BAspect/BAspect.vue.d.mts +21 -0
  238. package/dist/components/BAspect/BAspect.vue.d.ts +21 -0
  239. package/dist/components/BAspect/index.d.mts +1 -0
  240. package/dist/components/BAspect/index.d.ts +1 -0
  241. package/dist/components/BButton/BButtonGroup.vue.d.mts +1 -1
  242. package/dist/components/BButton/BButtonGroup.vue.d.ts +1 -1
  243. package/dist/components/BCard/BCard.vue.d.mts +1 -1
  244. package/dist/components/BCard/BCard.vue.d.ts +1 -1
  245. package/dist/components/BCard/BCardImg.vue.d.mts +1 -1
  246. package/dist/components/BCard/BCardImg.vue.d.ts +1 -1
  247. package/dist/components/BCollapse/BCollapse.vue.d.mts +1 -1
  248. package/dist/components/BCollapse/BCollapse.vue.d.ts +1 -1
  249. package/dist/components/BDropdown/BDropdown.vue.d.mts +1 -1
  250. package/dist/components/BDropdown/BDropdown.vue.d.ts +1 -1
  251. package/dist/components/BForm/BFormInvalidFeedback.vue.d.mts +1 -1
  252. package/dist/components/BForm/BFormInvalidFeedback.vue.d.ts +1 -1
  253. package/dist/components/BForm/BFormValidFeedback.vue.d.mts +1 -1
  254. package/dist/components/BForm/BFormValidFeedback.vue.d.ts +1 -1
  255. package/dist/components/BFormCheckbox/BFormCheckbox.vue.d.mts +1 -1
  256. package/dist/components/BFormCheckbox/BFormCheckbox.vue.d.ts +1 -1
  257. package/dist/components/BFormFile/BFormFile.vue.d.mts +1 -1
  258. package/dist/components/BFormFile/BFormFile.vue.d.ts +1 -1
  259. package/dist/components/BFormGroup/BFormGroup.vue.d.mts +1 -1
  260. package/dist/components/BFormGroup/BFormGroup.vue.d.ts +1 -1
  261. package/dist/components/BImg/BImg.vue.d.mts +1 -1
  262. package/dist/components/BImg/BImg.vue.d.ts +1 -1
  263. package/dist/components/BInputGroup/BInputGroup.vue.d.mts +1 -1
  264. package/dist/components/BInputGroup/BInputGroup.vue.d.ts +1 -1
  265. package/dist/components/BListGroup/BListGroup.vue.d.mts +1 -1
  266. package/dist/components/BListGroup/BListGroup.vue.d.ts +1 -1
  267. package/dist/components/BNav/BNav.vue.d.mts +1 -1
  268. package/dist/components/BNav/BNav.vue.d.ts +1 -1
  269. package/dist/components/BNav/BNavItemDropdown.vue.d.mts +13 -13
  270. package/dist/components/BNav/BNavItemDropdown.vue.d.ts +13 -13
  271. package/dist/components/BNavbar/BNavbar.vue.d.mts +1 -1
  272. package/dist/components/BNavbar/BNavbar.vue.d.ts +1 -1
  273. package/dist/components/BNavbar/BNavbarNav.vue.d.mts +1 -1
  274. package/dist/components/BNavbar/BNavbarNav.vue.d.ts +1 -1
  275. package/dist/components/BOffcanvas/BOffcanvas.vue.d.mts +1 -1
  276. package/dist/components/BOffcanvas/BOffcanvas.vue.d.ts +1 -1
  277. package/dist/components/BPlaceholder/BPlaceholder.vue.d.mts +1 -1
  278. package/dist/components/BPlaceholder/BPlaceholder.vue.d.ts +1 -1
  279. package/dist/components/BPlaceholder/BPlaceholderButton.vue.d.mts +1 -1
  280. package/dist/components/BPlaceholder/BPlaceholderButton.vue.d.ts +1 -1
  281. package/dist/components/BProgress/BProgress.vue.d.mts +1 -1
  282. package/dist/components/BProgress/BProgress.vue.d.ts +1 -1
  283. package/dist/components/BSpinner/BSpinner.vue.d.mts +2 -2
  284. package/dist/components/BSpinner/BSpinner.vue.d.ts +2 -2
  285. package/dist/components/BTabs/BTabs.vue.d.mts +1 -1
  286. package/dist/components/BTabs/BTabs.vue.d.ts +1 -1
  287. package/dist/components/index.d.mts +1 -0
  288. package/dist/components/index.d.ts +1 -0
  289. package/dist/{constants-CQ8ucyPI.mjs → constants-BSIK14yA.mjs} +1 -1
  290. package/dist/{constants-CQ8ucyPI.mjs.map → constants-BSIK14yA.mjs.map} +1 -1
  291. package/dist/{constants-DMR5FAE3.js → constants-hccBP09R.js} +1 -1
  292. package/dist/{constants-DMR5FAE3.js.map → constants-hccBP09R.js.map} +1 -1
  293. package/dist/{debounce-BfDJWP7y.js → debounce-DQsw8FWv.js} +2 -2
  294. package/dist/{debounce-BfDJWP7y.js.map → debounce-DQsw8FWv.js.map} +1 -1
  295. package/dist/{debounce-BIVtU5ek.mjs → debounce-DeVyu4Ny.mjs} +2 -2
  296. package/dist/{debounce-BIVtU5ek.mjs.map → debounce-DeVyu4Ny.mjs.map} +1 -1
  297. package/dist/{flattenFragments-DfLb4YB2.js → flattenFragments-C1WWqm25.js} +1 -1
  298. package/dist/{flattenFragments-DfLb4YB2.js.map → flattenFragments-C1WWqm25.js.map} +1 -1
  299. package/dist/{flattenFragments-B1W_x5L2.mjs → flattenFragments-ClbLQGqR.mjs} +1 -1
  300. package/dist/{flattenFragments-B1W_x5L2.mjs.map → flattenFragments-ClbLQGqR.mjs.map} +1 -1
  301. package/dist/{floating-ui.vue-B09oeNTW.js → floating-ui.vue-CW2IKmom.js} +1 -1
  302. package/dist/{floating-ui.vue-B09oeNTW.js.map → floating-ui.vue-CW2IKmom.js.map} +1 -1
  303. package/dist/{floating-ui.vue-CcfLuVCZ.mjs → floating-ui.vue-DIWi4LGB.mjs} +1 -1
  304. package/dist/{floating-ui.vue-CcfLuVCZ.mjs.map → floating-ui.vue-DIWi4LGB.mjs.map} +1 -1
  305. package/dist/{floatingUi-9NcUa5r7.mjs → floatingUi-BErx3eqf.mjs} +7 -7
  306. package/dist/{floatingUi-9NcUa5r7.mjs.map → floatingUi-BErx3eqf.mjs.map} +1 -1
  307. package/dist/{floatingUi-BLlCKrbj.js → floatingUi-syPgL0ve.js} +7 -7
  308. package/dist/{floatingUi-BLlCKrbj.js.map → floatingUi-syPgL0ve.js.map} +1 -1
  309. package/dist/{functions-C6AToZGR.mjs → functions-BcMenQqL.mjs} +1 -1
  310. package/dist/functions-BcMenQqL.mjs.map +1 -0
  311. package/dist/{functions-DCQKr6wc.js → functions-Bx1HDqMv.js} +1 -1
  312. package/dist/functions-Bx1HDqMv.js.map +1 -0
  313. package/dist/{getClasses-BQLj0MHF.js → getClasses-BpIobrfU.js} +1 -1
  314. package/dist/{getClasses-BQLj0MHF.js.map → getClasses-BpIobrfU.js.map} +1 -1
  315. package/dist/{getClasses-_sZDgS-l.mjs → getClasses-DwzMjfzX.mjs} +1 -1
  316. package/dist/{getClasses-_sZDgS-l.mjs.map → getClasses-DwzMjfzX.mjs.map} +1 -1
  317. package/dist/{getElement-D5DvkPzw.mjs → getElement-BPjh0Qkh.mjs} +1 -1
  318. package/dist/{getElement-D5DvkPzw.mjs.map → getElement-BPjh0Qkh.mjs.map} +1 -1
  319. package/dist/{getElement-BXXYfxYW.js → getElement-BPm7tpe2.js} +1 -1
  320. package/dist/{getElement-BXXYfxYW.js.map → getElement-BPm7tpe2.js.map} +1 -1
  321. package/dist/{object-CPeShLVx.js → object-BN7QwMcz.js} +1 -1
  322. package/dist/{object-CPeShLVx.js.map → object-BN7QwMcz.js.map} +1 -1
  323. package/dist/{object-B9ZW1_9f.mjs → object-CHQkkner.mjs} +1 -1
  324. package/dist/{object-B9ZW1_9f.mjs.map → object-CHQkkner.mjs.map} +1 -1
  325. package/dist/{registryAccess-B4xlltdn.mjs → registryAccess-BO4rk3Sm.mjs} +1 -1
  326. package/dist/{registryAccess-B4xlltdn.mjs.map → registryAccess-BO4rk3Sm.mjs.map} +1 -1
  327. package/dist/{registryAccess-Be_uJ4EV.js → registryAccess-ROXkP1Do.js} +1 -1
  328. package/dist/{registryAccess-Be_uJ4EV.js.map → registryAccess-ROXkP1Do.js.map} +1 -1
  329. package/dist/src/components/BAccordion/index.mjs +1 -1
  330. package/dist/src/components/BAccordion/index.umd.js +1 -1
  331. package/dist/src/components/BAlert/index.mjs +1 -1
  332. package/dist/src/components/BAlert/index.umd.js +1 -1
  333. package/dist/src/components/BApp/index.mjs +1 -1
  334. package/dist/src/components/BApp/index.umd.js +1 -1
  335. package/dist/src/components/BAspect/index.mjs +2 -0
  336. package/dist/src/components/BAspect/index.umd.js +3 -0
  337. package/dist/src/components/BAvatar/index.mjs +1 -1
  338. package/dist/src/components/BAvatar/index.umd.js +1 -1
  339. package/dist/src/components/BBadge/index.mjs +1 -1
  340. package/dist/src/components/BBadge/index.umd.js +1 -1
  341. package/dist/src/components/BBreadcrumb/index.mjs +1 -1
  342. package/dist/src/components/BBreadcrumb/index.umd.js +1 -1
  343. package/dist/src/components/BButton/index.mjs +3 -3
  344. package/dist/src/components/BButton/index.umd.js +3 -3
  345. package/dist/src/components/BCard/index.mjs +2 -2
  346. package/dist/src/components/BCard/index.umd.js +2 -2
  347. package/dist/src/components/BCarousel/index.mjs +1 -1
  348. package/dist/src/components/BCarousel/index.umd.js +1 -1
  349. package/dist/src/components/BCol/index.mjs +1 -1
  350. package/dist/src/components/BCol/index.umd.js +1 -1
  351. package/dist/src/components/BCollapse/index.mjs +1 -1
  352. package/dist/src/components/BCollapse/index.umd.js +1 -1
  353. package/dist/src/components/BContainer/index.mjs +3 -3
  354. package/dist/src/components/BContainer/index.umd.js +3 -3
  355. package/dist/src/components/BDateField/index.mjs +1 -1
  356. package/dist/src/components/BDateField/index.umd.js +1 -1
  357. package/dist/src/components/BDatePicker/index.mjs +1 -1
  358. package/dist/src/components/BDatePicker/index.umd.js +1 -1
  359. package/dist/src/components/BDropdown/index.mjs +2 -2
  360. package/dist/src/components/BDropdown/index.umd.js +2 -2
  361. package/dist/src/components/BForm/index.mjs +3 -3
  362. package/dist/src/components/BForm/index.umd.js +3 -3
  363. package/dist/src/components/BFormCheckbox/index.mjs +1 -1
  364. package/dist/src/components/BFormCheckbox/index.umd.js +1 -1
  365. package/dist/src/components/BFormFile/index.mjs +1 -1
  366. package/dist/src/components/BFormFile/index.umd.js +1 -1
  367. package/dist/src/components/BFormGroup/index.mjs +1 -1
  368. package/dist/src/components/BFormGroup/index.umd.js +1 -1
  369. package/dist/src/components/BFormInput/index.mjs +1 -1
  370. package/dist/src/components/BFormInput/index.umd.js +1 -1
  371. package/dist/src/components/BFormRadio/index.mjs +1 -1
  372. package/dist/src/components/BFormRadio/index.umd.js +1 -1
  373. package/dist/src/components/BFormRating/index.mjs +1 -1
  374. package/dist/src/components/BFormRating/index.umd.js +1 -1
  375. package/dist/src/components/BFormSelect/index.mjs +2 -2
  376. package/dist/src/components/BFormSelect/index.umd.js +2 -2
  377. package/dist/src/components/BFormSpinbutton/index.mjs +1 -1
  378. package/dist/src/components/BFormSpinbutton/index.umd.js +1 -1
  379. package/dist/src/components/BFormTags/index.mjs +1 -1
  380. package/dist/src/components/BFormTags/index.umd.js +1 -1
  381. package/dist/src/components/BFormTextarea/index.mjs +1 -1
  382. package/dist/src/components/BFormTextarea/index.umd.js +1 -1
  383. package/dist/src/components/BImg/index.mjs +1 -1
  384. package/dist/src/components/BImg/index.umd.js +1 -1
  385. package/dist/src/components/BInputGroup/index.mjs +1 -1
  386. package/dist/src/components/BInputGroup/index.umd.js +1 -1
  387. package/dist/src/components/BLink/index.mjs +1 -1
  388. package/dist/src/components/BLink/index.umd.js +1 -1
  389. package/dist/src/components/BListGroup/index.mjs +1 -1
  390. package/dist/src/components/BListGroup/index.umd.js +1 -1
  391. package/dist/src/components/BModal/index.mjs +1 -1
  392. package/dist/src/components/BModal/index.umd.js +1 -1
  393. package/dist/src/components/BNav/index.mjs +1 -1
  394. package/dist/src/components/BNav/index.umd.js +1 -1
  395. package/dist/src/components/BNavbar/index.mjs +1 -1
  396. package/dist/src/components/BNavbar/index.umd.js +1 -1
  397. package/dist/src/components/BOffcanvas/index.mjs +1 -1
  398. package/dist/src/components/BOffcanvas/index.umd.js +1 -1
  399. package/dist/src/components/BOverlay/index.mjs +1 -1
  400. package/dist/src/components/BOverlay/index.umd.js +1 -1
  401. package/dist/src/components/BPagination/index.mjs +1 -1
  402. package/dist/src/components/BPagination/index.umd.js +1 -1
  403. package/dist/src/components/BPlaceholder/index.mjs +1 -1
  404. package/dist/src/components/BPlaceholder/index.umd.js +1 -1
  405. package/dist/src/components/BPopover/index.mjs +1 -1
  406. package/dist/src/components/BPopover/index.umd.js +1 -1
  407. package/dist/src/components/BProgress/index.mjs +1 -1
  408. package/dist/src/components/BProgress/index.umd.js +1 -1
  409. package/dist/src/components/BRow/index.mjs +1 -1
  410. package/dist/src/components/BRow/index.umd.js +1 -1
  411. package/dist/src/components/BSpinner/index.mjs +1 -1
  412. package/dist/src/components/BSpinner/index.umd.js +1 -1
  413. package/dist/src/components/BTable/index.mjs +2 -2
  414. package/dist/src/components/BTable/index.umd.js +2 -2
  415. package/dist/src/components/BTabs/index.mjs +1 -1
  416. package/dist/src/components/BTabs/index.umd.js +1 -1
  417. package/dist/src/components/BTimeField/index.mjs +1 -1
  418. package/dist/src/components/BTimeField/index.umd.js +1 -1
  419. package/dist/src/components/BToast/index.mjs +1 -1
  420. package/dist/src/components/BToast/index.umd.js +1 -1
  421. package/dist/src/components/BTooltip/index.mjs +1 -1
  422. package/dist/src/components/BTooltip/index.umd.js +1 -1
  423. package/dist/src/components/index.mjs +57 -55
  424. package/dist/src/components/index.mjs.map +1 -1
  425. package/dist/src/components/index.umd.js +57 -54
  426. package/dist/src/components/index.umd.js.map +1 -1
  427. package/dist/src/composables/useModal/index.mjs +1 -1
  428. package/dist/src/composables/useModal/index.umd.js +1 -1
  429. package/dist/src/composables/usePopover/index.mjs +2 -2
  430. package/dist/src/composables/usePopover/index.umd.js +2 -2
  431. package/dist/src/composables/useScrollspy/index.mjs +1 -1
  432. package/dist/src/composables/useScrollspy/index.umd.js +1 -1
  433. package/dist/src/composables/useToast/index.mjs +1 -1
  434. package/dist/src/composables/useToast/index.umd.js +1 -1
  435. package/dist/src/composables/useToggle/index.mjs +1 -1
  436. package/dist/src/composables/useToggle/index.umd.js +1 -1
  437. package/dist/src/directives/BPopover/index.mjs +2 -2
  438. package/dist/src/directives/BPopover/index.umd.js +2 -2
  439. package/dist/src/directives/BScrollspy/index.mjs +2 -2
  440. package/dist/src/directives/BScrollspy/index.umd.js +2 -2
  441. package/dist/src/directives/BToggle/index.mjs +3 -3
  442. package/dist/src/directives/BToggle/index.umd.js +3 -3
  443. package/dist/src/directives/BTooltip/index.mjs +2 -2
  444. package/dist/src/directives/BTooltip/index.umd.js +2 -2
  445. package/dist/src/resolvers/index.mjs +1 -1
  446. package/dist/src/resolvers/index.umd.js +1 -1
  447. package/dist/src/types/index.mjs +1 -1
  448. package/dist/src/types/index.umd.js +1 -1
  449. package/dist/src/utils/index.mjs +1 -1
  450. package/dist/src/utils/index.umd.js +1 -1
  451. package/dist/{stringUtils-hUreqC0N.js → stringUtils-BwKOASdU.js} +2 -2
  452. package/dist/{stringUtils-hUreqC0N.js.map → stringUtils-BwKOASdU.js.map} +1 -1
  453. package/dist/{stringUtils-BP8rZgjn.mjs → stringUtils-CslYpDTt.mjs} +2 -2
  454. package/dist/{stringUtils-BP8rZgjn.mjs.map → stringUtils-CslYpDTt.mjs.map} +1 -1
  455. package/dist/types/BootstrapVueOptions.d.mts +3 -1
  456. package/dist/types/BootstrapVueOptions.d.ts +3 -1
  457. package/dist/types/ComponentProps.d.mts +4 -0
  458. package/dist/types/ComponentProps.d.ts +4 -0
  459. package/dist/types/ComponentSlots.d.mts +3 -0
  460. package/dist/types/ComponentSlots.d.ts +3 -0
  461. package/dist/{useAlignment-CwuLc9mf.mjs → useAlignment-DMST4-tc.mjs} +1 -1
  462. package/dist/{useAlignment-CwuLc9mf.mjs.map → useAlignment-DMST4-tc.mjs.map} +1 -1
  463. package/dist/{useAlignment-CY-mnB2p.js → useAlignment-Dus_TOxG.js} +1 -1
  464. package/dist/{useAlignment-CY-mnB2p.js.map → useAlignment-Dus_TOxG.js.map} +1 -1
  465. package/dist/{useAriaInvalid-BYMq9BBX.js → useAriaInvalid-CsUHLhSs.js} +1 -1
  466. package/dist/{useAriaInvalid-BYMq9BBX.js.map → useAriaInvalid-CsUHLhSs.js.map} +1 -1
  467. package/dist/{useAriaInvalid-01Dd60GC.mjs → useAriaInvalid-DcG6BhdW.mjs} +1 -1
  468. package/dist/{useAriaInvalid-01Dd60GC.mjs.map → useAriaInvalid-DcG6BhdW.mjs.map} +1 -1
  469. package/dist/{useColorVariantClasses-GuDw8a_O.mjs → useColorVariantClasses-B6Me_Kx6.mjs} +1 -1
  470. package/dist/{useColorVariantClasses-GuDw8a_O.mjs.map → useColorVariantClasses-B6Me_Kx6.mjs.map} +1 -1
  471. package/dist/{useColorVariantClasses-DVaQDVQC.js → useColorVariantClasses-CEfOwjPv.js} +1 -1
  472. package/dist/{useColorVariantClasses-DVaQDVQC.js.map → useColorVariantClasses-CEfOwjPv.js.map} +1 -1
  473. package/dist/{useCountdownHover-CaF8_TRT.js → useCountdownHover-D044mFuX.js} +1 -1
  474. package/dist/{useCountdownHover-CaF8_TRT.js.map → useCountdownHover-D044mFuX.js.map} +1 -1
  475. package/dist/{useCountdownHover-CTM7QEJ-.mjs → useCountdownHover-DqREghQi.mjs} +1 -1
  476. package/dist/{useCountdownHover-CTM7QEJ-.mjs.map → useCountdownHover-DqREghQi.mjs.map} +1 -1
  477. package/dist/{useDateField-PQjSLAVI.mjs → useDateField-BkbvpMB1.mjs} +1 -1
  478. package/dist/{useDateField-PQjSLAVI.mjs.map → useDateField-BkbvpMB1.mjs.map} +1 -1
  479. package/dist/{useDateField-qsRHISMn.js → useDateField-Ca0ZxYq9.js} +1 -1
  480. package/dist/{useDateField-qsRHISMn.js.map → useDateField-Ca0ZxYq9.js.map} +1 -1
  481. package/dist/{useDefaults-CCWS15M8.mjs → useDefaults-BKgBaqOV.mjs} +1 -1
  482. package/dist/{useDefaults-CCWS15M8.mjs.map → useDefaults-BKgBaqOV.mjs.map} +1 -1
  483. package/dist/{useDefaults-DK6Y9lar.js → useDefaults-DsLf4iRY.js} +1 -1
  484. package/dist/{useDefaults-DK6Y9lar.js.map → useDefaults-DsLf4iRY.js.map} +1 -1
  485. package/dist/{useFormCheck-TOhpqkZ9.mjs → useFormCheck-9Ne69Sw9.mjs} +3 -3
  486. package/dist/{useFormCheck-TOhpqkZ9.mjs.map → useFormCheck-9Ne69Sw9.mjs.map} +1 -1
  487. package/dist/{useFormCheck-DXM9Wj2i.js → useFormCheck-H0B2G8GH.js} +3 -3
  488. package/dist/{useFormCheck-DXM9Wj2i.js.map → useFormCheck-H0B2G8GH.js.map} +1 -1
  489. package/dist/{useFormInput-DeJGz9t9.mjs → useFormInput-9wwIZZqf.mjs} +5 -5
  490. package/dist/{useFormInput-DeJGz9t9.mjs.map → useFormInput-9wwIZZqf.mjs.map} +1 -1
  491. package/dist/{useFormInput-AX7ikSmn.js → useFormInput-DyZLjypv.js} +5 -5
  492. package/dist/{useFormInput-AX7ikSmn.js.map → useFormInput-DyZLjypv.js.map} +1 -1
  493. package/dist/{useFormSelect-DCThI8EA.js → useFormSelect-8ZL7Dk3W.js} +3 -3
  494. package/dist/{useFormSelect-DCThI8EA.js.map → useFormSelect-8ZL7Dk3W.js.map} +1 -1
  495. package/dist/{useFormSelect-_-ln6FKQ.mjs → useFormSelect-BYhUZcK5.mjs} +3 -3
  496. package/dist/{useFormSelect-_-ln6FKQ.mjs.map → useFormSelect-BYhUZcK5.mjs.map} +1 -1
  497. package/dist/{useId-CCwnEmGh.mjs → useId-BKZFSYm8.mjs} +1 -1
  498. package/dist/{useId-CCwnEmGh.mjs.map → useId-BKZFSYm8.mjs.map} +1 -1
  499. package/dist/{useId-DTrBK9CE.js → useId-DHrBgM7P.js} +1 -1
  500. package/dist/{useId-DTrBK9CE.js.map → useId-DHrBgM7P.js.map} +1 -1
  501. package/dist/{useNumberishToStyle-uj-NwKpF.mjs → useNumberishToStyle--4gz3iYn.mjs} +2 -2
  502. package/dist/{useNumberishToStyle-uj-NwKpF.mjs.map → useNumberishToStyle--4gz3iYn.mjs.map} +1 -1
  503. package/dist/{useNumberishToStyle-CluQ-WT4.js → useNumberishToStyle-DMGqQGfo.js} +2 -2
  504. package/dist/{useNumberishToStyle-CluQ-WT4.js.map → useNumberishToStyle-DMGqQGfo.js.map} +1 -1
  505. package/dist/{useRadiusElementClasses-D6FwziNh.js → useRadiusElementClasses-Bi58dhJY.js} +1 -1
  506. package/dist/{useRadiusElementClasses-D6FwziNh.js.map → useRadiusElementClasses-Bi58dhJY.js.map} +1 -1
  507. package/dist/{useRadiusElementClasses-CyDq8RO7.mjs → useRadiusElementClasses-ppH4Pr03.mjs} +1 -1
  508. package/dist/{useRadiusElementClasses-CyDq8RO7.mjs.map → useRadiusElementClasses-ppH4Pr03.mjs.map} +1 -1
  509. package/dist/{useRtl-DQ5v5L9s.mjs → useRtl-BwxT5Dyq.mjs} +1 -1
  510. package/dist/{useRtl-DQ5v5L9s.mjs.map → useRtl-BwxT5Dyq.mjs.map} +1 -1
  511. package/dist/{useRtl-BlPLBmTe.js → useRtl-DWO9pKff.js} +1 -1
  512. package/dist/{useRtl-BlPLBmTe.js.map → useRtl-DWO9pKff.js.map} +1 -1
  513. package/dist/{useSafeScrollLock-C9UxwgUo.mjs → useSafeScrollLock-DJ1UsIFY.mjs} +1 -1
  514. package/dist/{useSafeScrollLock-C9UxwgUo.mjs.map → useSafeScrollLock-DJ1UsIFY.mjs.map} +1 -1
  515. package/dist/{useSafeScrollLock-CP2B7aXF.js → useSafeScrollLock-xJBEvCQ7.js} +1 -1
  516. package/dist/{useSafeScrollLock-CP2B7aXF.js.map → useSafeScrollLock-xJBEvCQ7.js.map} +1 -1
  517. package/dist/{useShowHide-wBe7O9iE.mjs → useShowHide-IPyuuPL0.mjs} +3 -3
  518. package/dist/{useShowHide-wBe7O9iE.mjs.map → useShowHide-IPyuuPL0.mjs.map} +1 -1
  519. package/dist/{useShowHide-BFr32vgn.js → useShowHide-sLzwukNm.js} +3 -3
  520. package/dist/{useShowHide-BFr32vgn.js.map → useShowHide-sLzwukNm.js.map} +1 -1
  521. package/dist/{useStateClass-Cnvy2Hnm.js → useStateClass-0b-hPufa.js} +1 -1
  522. package/dist/{useStateClass-Cnvy2Hnm.js.map → useStateClass-0b-hPufa.js.map} +1 -1
  523. package/dist/{useStateClass-DKjpw1Pn.mjs → useStateClass-DXbp5rFK.mjs} +1 -1
  524. package/dist/{useStateClass-DKjpw1Pn.mjs.map → useStateClass-DXbp5rFK.mjs.map} +1 -1
  525. package/dist/{utils-C-oJqlar.mjs → utils-D_vdhVDP.mjs} +2 -2
  526. package/dist/{utils-C-oJqlar.mjs.map → utils-D_vdhVDP.mjs.map} +1 -1
  527. package/dist/{utils-CY6CnVNO.js → utils-bUQM0PzD.js} +2 -2
  528. package/dist/{utils-CY6CnVNO.js.map → utils-bUQM0PzD.js.map} +1 -1
  529. package/package.json +9 -1
  530. package/dist/BootstrapVueOptions-CVxLmDvx.js.map +0 -1
  531. package/dist/BootstrapVueOptions-Dtdn7_AJ.mjs.map +0 -1
  532. package/dist/functions-C6AToZGR.mjs.map +0 -1
  533. package/dist/functions-DCQKr6wc.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"BFormSpinbutton-DmzfRDeR.mjs","names":[],"sources":["../src/components/BFormSpinbutton/BFormSpinbutton.vue","../src/components/BFormSpinbutton/BFormSpinbutton.vue"],"sourcesContent":["<template>\n <div\n ref=\"_element\"\n class=\"b-form-spinbutton form-control\"\n :class=\"computedClasses\"\n role=\"group\"\n :lang=\"computedLocale\"\n :tabindex=\"props.disabled ? undefined : '-1'\"\n :title=\"props.ariaLabel\"\n @click=\"focused = true\"\n >\n <!-- eslint-disable-next-line prettier/prettier -->\n <!-- prettier-ignore -->\n <slot :name=\"(buttons.top.slot.name as 'increment' | 'decrement')\" :has-focus=\"focused\">\n <button\n v-bind=\"buttons.top.button\"\n @mousedown=\"buttons.top.handler\"\n @touchstart=\"buttons.top.handler\"\n >\n <svg v-bind=\"buttons.top.svg\">\n <path v-bind=\"buttons.top.path\" />\n </svg>\n </button>\n </slot>\n <input\n v-if=\"props.name && !props.disabled\"\n key=\"hidden\"\n type=\"hidden\"\n :name=\"props.name\"\n :form=\"props.form\"\n :value=\"valueAsFixed\"\n />\n <output\n :id=\"computedId\"\n key=\"output\"\n class=\"flex-grow-1\"\n :class=\"computedSpinClasses\"\n :dir=\"(isRtl ?? false) ? 'rtl' : 'ltr'\"\n :tabindex=\"props.disabled ? undefined : '0'\"\n role=\"spinbutton\"\n aria-live=\"off\"\n :aria-label=\"props.ariaLabel || undefined\"\n :aria-invalid=\"\n props.state === false || (!modelValue !== null && props.required) ? true : undefined\n \"\n :aria-required=\"props.required ? true : undefined\"\n :aria-valuemin=\"computedMin\"\n :aria-valuemax=\"computedMax\"\n :aria-valuenow=\"modelValue !== null ? modelValue : undefined\"\n :aria-valuetext=\"modelValue !== null ? computedFormatter(modelValue) : undefined\"\n >\n <bdi>\n {{ (modelValue !== null ? computedFormatter(modelValue) : props.placeholder) || '' }}\n </bdi>\n </output>\n <!-- eslint-disable-next-line prettier/prettier -->\n <!-- prettier-ignore -->\n <slot :name=\"(buttons.bottom.slot.name as 'increment' | 'decrement')\" :has-focus=\"focused\">\n <button\n v-bind=\"buttons.bottom.button\"\n @mousedown=\"buttons.bottom.handler\"\n @touchstart=\"buttons.bottom.handler\"\n >\n <svg v-bind=\"buttons.bottom.svg\">\n <path v-bind=\"buttons.bottom.path\" />\n </svg>\n </button>\n </slot>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, onUnmounted, useTemplateRef} from 'vue'\nimport {\n CODE_DOWN,\n CODE_END,\n CODE_HOME,\n CODE_PAGEDOWN,\n CODE_PAGEUP,\n CODE_UP,\n} from '../../utils/constants'\nimport {onKeyStroke, useFocus, useToNumber} from '@vueuse/core'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport {useRtl} from '../../composables/useRtl'\nimport type {\n BFormSpinbuttonEmits,\n BFormSpinbuttonSlots,\n BFormSpinbuttonProps,\n ButtonType,\n} from '../../types'\nimport {getSafeDocument} from '../../utils/dom'\n\nconst KEY_CODES = [CODE_UP, CODE_DOWN, CODE_HOME, CODE_END, CODE_PAGEUP, CODE_PAGEDOWN]\n\nconst _props = withDefaults(defineProps<Omit<BFormSpinbuttonProps, 'modelValue'>>(), {\n ariaControls: undefined,\n ariaLabel: undefined,\n disabled: false,\n form: undefined,\n formatterFn: undefined,\n id: undefined,\n inline: false,\n labelDecrement: 'Decrement',\n labelIncrement: 'Increment',\n locale: undefined,\n max: defaultValues.max,\n min: defaultValues.min,\n name: undefined,\n placeholder: undefined,\n readonly: false,\n repeatDelay: defaultValues.repeatDelay,\n repeatInterval: defaultValues.repeatInterval,\n repeatStepMultiplier: defaultValues.repeatMultiplier,\n repeatThreshold: defaultValues.repeatThreshold,\n required: false,\n size: undefined,\n state: null,\n step: defaultValues.step,\n vertical: false,\n wrap: false,\n})\nconst props = useDefaults(_props, 'BFormSpinbutton')\nconst emit = defineEmits<BFormSpinbuttonEmits>()\ndefineSlots<BFormSpinbuttonSlots>()\n\nconst modelValue = defineModel<Exclude<BFormSpinbuttonProps['modelValue'], undefined>>({\n default: null,\n})\n\nconst element = useTemplateRef('_element')\n\nconst {focused} = useFocus(element)\n\nconst computedId = useId(() => props.id, 'spinbutton')\n\nconst computedClasses = computed(() => ({\n 'disabled': props.disabled,\n 'readonly': props.readonly,\n 'focus': focused.value,\n 'd-inline-flex': props.inline || props.vertical,\n 'd-flex': !props.inline && !props.vertical,\n 'align-items-stretch': !props.vertical,\n 'flex-column': props.vertical,\n [`form-control-${props.size}`]: props.size !== undefined,\n}))\n\nconst computedSpinClasses = computed(() => ({\n 'd-flex': props.vertical,\n 'align-self-center': !props.vertical,\n 'align-items-center': props.vertical,\n 'border-top': props.vertical,\n 'border-bottom': props.vertical,\n 'border-start': !props.vertical,\n 'border-end': !props.vertical,\n}))\n\n//non reactive properties\nlet $_autoDelayTimer: ReturnType<typeof setTimeout> | undefined\nlet $_autoRepeatTimer: ReturnType<typeof setTimeout> | undefined\nlet $_keyIsDown = false\n\n// const computedInline = computed(() => props.inline && !props.vertical)\n\n// const computedReadonly = computed(() => props.readonly && !props.disabled)\n\nconst stepNumber = useToNumber(() => props.step)\nconst computedStep = computed(() =>\n Number.isNaN(stepNumber.value) ? defaultValues.step : stepNumber.value\n)\n\nconst minNumber = useToNumber(() => props.min)\nconst computedMin = computed(() =>\n Number.isNaN(minNumber.value) ? defaultValues.min : minNumber.value\n)\n\nconst maxNumber = useToNumber(() => props.max)\nconst computedMax = computed(() => {\n const step = computedStep.value\n const min = computedMin.value\n return Math.floor((maxNumber.value - min) / step) * step + min\n})\n\nconst repeatDelayNumber = useToNumber(() => props.repeatDelay, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedDelay = computed(() =>\n repeatDelayNumber.value > 0 ? repeatDelayNumber.value : defaultValues.repeatDelay\n)\n\nconst repeatIntervalNumber = useToNumber(() => props.repeatInterval, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedInterval = computed(() =>\n repeatIntervalNumber.value > 0 ? repeatIntervalNumber.value : defaultValues.repeatInterval\n)\n\nconst repeatThresholdNumber = useToNumber(() => props.repeatThreshold, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedThreshold = computed(() =>\n Math.max(\n Number.isNaN(repeatThresholdNumber.value)\n ? defaultValues.repeatThreshold\n : repeatThresholdNumber.value,\n 1\n )\n)\n\nconst repeatStepMultiplierNumber = useToNumber(() => props.repeatStepMultiplier, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedStepMultiplier = computed(() =>\n Math.max(\n Number.isNaN(repeatStepMultiplierNumber.value)\n ? defaultValues.repeatMultiplier\n : repeatStepMultiplierNumber.value,\n 1\n )\n)\n\nconst computedPrecision = computed(() => {\n const step = computedStep.value\n return Math.floor(step) === step ? 0 : (step.toString().split('.')[1] || '').length\n})\n\nconst computedMultiplier = computed(() => Math.pow(10, computedPrecision.value || 0))\n\nconst valueAsFixed = computed(() =>\n modelValue.value === null ? '' : modelValue.value.toFixed(computedPrecision.value)\n)\n\nconst {isRtl, locale: globalLocale} = useRtl()\n\nconst computedLocale = computed(() => {\n const loc = (props.locale ?? globalLocale?.value) || 'locale'\n const locales = [loc]\n const nf = new Intl.NumberFormat(locales)\n return nf.resolvedOptions().locale\n})\n\nconst defaultFormatter = () =>\n new Intl.NumberFormat(computedLocale.value, {\n style: 'decimal',\n useGrouping: false,\n minimumIntegerDigits: 1,\n minimumFractionDigits: computedPrecision.value,\n maximumFractionDigits: computedPrecision.value,\n notation: 'standard',\n }).format\n\nconst computedFormatter = computed(() => props.formatterFn ?? defaultFormatter())\n\nconst stepValue = (direction: number) => {\n // Sets a new incremented or decremented value, supporting optional wrapping\n // Direction is either +1 or -1 (or a multiple thereof)\n let {value} = modelValue\n if (!props.disabled && value !== null) {\n const step = computedStep.value * direction\n const min = computedMin.value\n const max = computedMax.value\n const multiplier = computedMultiplier.value\n const {wrap} = props\n // We ensure that the value steps like a native input\n value = Math.round((value - min) / step) * step + min + step\n // We ensure that precision is maintained (decimals)\n value = Math.round(value * multiplier) / multiplier\n // Handle if wrapping is enabled\n modelValue.value = value > max ? (wrap ? min : max) : value < min ? (wrap ? max : min) : value\n }\n}\n\nconst stepUp = (multiplier = 1) => {\n if (modelValue.value === null) {\n modelValue.value = computedMin.value\n return\n }\n stepValue(+1 * multiplier)\n}\n\nconst stepDown = (multiplier = 1) => {\n if (modelValue.value === null) {\n modelValue.value = props.wrap ? computedMax.value : computedMin.value\n return\n }\n stepValue(-1 * multiplier)\n}\n\nconst stopEvent = (event: Readonly<Event>) => {\n event.preventDefault()\n event.stopImmediatePropagation()\n}\n\nonKeyStroke(\n KEY_CODES,\n (event) => {\n const {code, altKey, ctrlKey, metaKey} = event\n\n if (props.disabled || props.readonly || altKey || ctrlKey || metaKey) return\n\n // https://w3c.github.io/aria-practices/#spinbutton\n stopEvent(event)\n if ($_keyIsDown) {\n // Keypress is already in progress\n return\n }\n\n resetTimers()\n if ([CODE_UP, CODE_DOWN].includes(code)) {\n // The following use the custom auto-repeat handling\n\n $_keyIsDown = true\n if (code === CODE_UP) {\n handleStepRepeat(event, stepUp)\n return\n }\n if (code === CODE_DOWN) {\n handleStepRepeat(event, stepDown)\n }\n return\n }\n // These use native OS key repeating\n if (code === CODE_PAGEUP) {\n stepUp(computedStepMultiplier.value)\n return\n }\n if (code === CODE_PAGEDOWN) {\n stepDown(computedStepMultiplier.value)\n return\n }\n if (code === CODE_HOME) {\n modelValue.value = computedMin.value\n return\n }\n if (code === CODE_END) {\n modelValue.value = computedMax.value\n }\n },\n {target: element, eventName: 'keydown'}\n)\n\nonKeyStroke(\n KEY_CODES,\n (event: Readonly<KeyboardEvent>) => {\n // Emit a change event when the keyup happens\n\n const {altKey, ctrlKey, metaKey} = event\n\n if (props.disabled || props.readonly || altKey || ctrlKey || metaKey) return\n\n stopEvent(event)\n resetTimers()\n $_keyIsDown = false\n emit('change', modelValue.value)\n },\n {target: element, eventName: 'keyup'}\n)\n\n// takes in a mount or Keyboard Event\nconst handleStepRepeat = (event: Readonly<Event>, stepper: (step: number) => void) => {\n const {type} = event || {}\n\n if (!props.disabled && !props.readonly) {\n if (isMouseEvent(event)) {\n // We only respond to left (main === 0) button clicks\n if (type === 'mousedown' && event.button) return\n }\n resetTimers()\n // Step the counter initially\n stepper(1)\n const threshold = computedThreshold.value\n const multiplier = computedStepMultiplier.value\n const delay = computedDelay.value\n const interval = computedInterval.value\n\n // Initiate the delay/repeat interval\n $_autoDelayTimer = setTimeout(() => {\n let count = 0\n $_autoRepeatTimer = setInterval(() => {\n // After N initial repeats, we increase the incrementing step amount\n // We do this to minimize screen reader announcements of the value\n // (values are announced every change, which can be chatty for SR users)\n // And to make it easer to select a value when the range is large\n stepper(count < threshold ? 1 : multiplier)\n count++\n }, interval)\n }, delay)\n }\n}\n\nconst isMouseEvent = (evt: Readonly<Event>): evt is MouseEvent =>\n evt.type === 'mouseup' || evt.type === 'mousedown'\n\nconst onMouseup: EventListener = (event: Readonly<Event>) => {\n // `<body>` listener, only enabled when mousedown starts\n\n if (isMouseEvent(event)) {\n if (event.type === 'mouseup' && event.button) {\n // Ignore non left button (main === 0) mouse button click\n return\n }\n }\n\n stopEvent(event)\n resetTimers()\n setMouseup('removeEventListener')\n // Trigger the change event\n emit('change', modelValue.value)\n}\n\nconst setMouseup = (operation: 'addEventListener' | 'removeEventListener') => {\n const doc = getSafeDocument()\n if (doc === null) return\n\n if (operation === 'addEventListener') {\n doc.body.addEventListener('mouseup', onMouseup)\n doc.body.addEventListener('touchend', onMouseup, {passive: false})\n } else {\n doc.body.removeEventListener('mouseup', onMouseup)\n doc.body.removeEventListener('touchend', onMouseup)\n }\n}\nconst resetTimers = () => {\n clearTimeout($_autoDelayTimer)\n clearInterval($_autoRepeatTimer)\n $_autoDelayTimer = undefined\n $_autoRepeatTimer = undefined\n}\n\nconst buttons = computed(() => {\n const incrementSvgAttrs = {\n svg: {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '16',\n height: '16',\n fill: 'currentColor',\n class: 'bi bi-plus',\n viewBox: '0 0 16 16',\n },\n path: {\n d: 'M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z',\n },\n } as const\n\n const decrementSvgAttrs = {\n svg: {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '16',\n height: '16',\n fill: 'currentColor',\n class: 'bi bi-dash',\n viewBox: '0 0 16 16',\n },\n path: {d: 'M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z'},\n } as const\n\n const sharedButtonAttrs = {\n 'class': [{'py-0': !props.vertical}, 'btn', 'btn-sm', 'border-0', 'rounded-0'],\n 'tabindex': '-1',\n 'type': 'button' as ButtonType,\n 'disabled': props.disabled || props.readonly,\n 'aria-disabled': props.disabled || props.readonly ? true : undefined,\n 'aria-controls': computedId.value,\n }\n\n const sharedSvgAttrs = {\n 'aria-hidden': true,\n 'scale': focused.value ? 1.5 : 1.25,\n }\n\n const handler = (event: Readonly<Event>, stepper: (multiplier?: number) => void) => {\n if (!props.disabled && !props.readonly) {\n stopEvent(event)\n setMouseup('addEventListener')\n // Since we `preventDefault()`, we must manually focus the button\n // Though it's likely captured from the element click focus\n focused.value = true\n handleStepRepeat(event, stepper)\n }\n }\n\n const incrementAttrs = {\n button: {\n ...sharedButtonAttrs,\n 'aria-label': props.labelIncrement || undefined,\n 'aria-keyshortcuts': 'ArrowUp',\n },\n svg: {\n ...sharedSvgAttrs,\n ...incrementSvgAttrs.svg,\n },\n path: {\n ...incrementSvgAttrs.path,\n },\n slot: {\n name: 'increment',\n },\n handler: (e: Event) => handler(e, stepUp),\n }\n\n const decrementAttrs = {\n button: {\n ...sharedButtonAttrs,\n 'aria-label': props.labelDecrement || undefined,\n 'aria-keyshortcuts': 'ArrowDown',\n },\n svg: {\n ...sharedSvgAttrs,\n ...decrementSvgAttrs.svg,\n },\n path: {\n ...decrementSvgAttrs.path,\n },\n slot: {\n name: 'decrement',\n },\n handler: (e: Readonly<Event>) => handler(e, stepDown),\n }\n\n return {\n top: {\n ...(props.vertical ? incrementAttrs : decrementAttrs),\n },\n bottom: {\n ...(!props.vertical ? incrementAttrs : decrementAttrs),\n },\n }\n})\n\nonUnmounted(() => {\n // Cleanup event listeners\n setMouseup('removeEventListener')\n})\n</script>\n\n<script lang=\"ts\">\nconst defaultValues = {\n min: 1,\n max: 100,\n step: 1,\n repeatDelay: 500,\n repeatInterval: 100,\n repeatThreshold: 10,\n repeatMultiplier: 4,\n} as const\n</script>\n","<template>\n <div\n ref=\"_element\"\n class=\"b-form-spinbutton form-control\"\n :class=\"computedClasses\"\n role=\"group\"\n :lang=\"computedLocale\"\n :tabindex=\"props.disabled ? undefined : '-1'\"\n :title=\"props.ariaLabel\"\n @click=\"focused = true\"\n >\n <!-- eslint-disable-next-line prettier/prettier -->\n <!-- prettier-ignore -->\n <slot :name=\"(buttons.top.slot.name as 'increment' | 'decrement')\" :has-focus=\"focused\">\n <button\n v-bind=\"buttons.top.button\"\n @mousedown=\"buttons.top.handler\"\n @touchstart=\"buttons.top.handler\"\n >\n <svg v-bind=\"buttons.top.svg\">\n <path v-bind=\"buttons.top.path\" />\n </svg>\n </button>\n </slot>\n <input\n v-if=\"props.name && !props.disabled\"\n key=\"hidden\"\n type=\"hidden\"\n :name=\"props.name\"\n :form=\"props.form\"\n :value=\"valueAsFixed\"\n />\n <output\n :id=\"computedId\"\n key=\"output\"\n class=\"flex-grow-1\"\n :class=\"computedSpinClasses\"\n :dir=\"(isRtl ?? false) ? 'rtl' : 'ltr'\"\n :tabindex=\"props.disabled ? undefined : '0'\"\n role=\"spinbutton\"\n aria-live=\"off\"\n :aria-label=\"props.ariaLabel || undefined\"\n :aria-invalid=\"\n props.state === false || (!modelValue !== null && props.required) ? true : undefined\n \"\n :aria-required=\"props.required ? true : undefined\"\n :aria-valuemin=\"computedMin\"\n :aria-valuemax=\"computedMax\"\n :aria-valuenow=\"modelValue !== null ? modelValue : undefined\"\n :aria-valuetext=\"modelValue !== null ? computedFormatter(modelValue) : undefined\"\n >\n <bdi>\n {{ (modelValue !== null ? computedFormatter(modelValue) : props.placeholder) || '' }}\n </bdi>\n </output>\n <!-- eslint-disable-next-line prettier/prettier -->\n <!-- prettier-ignore -->\n <slot :name=\"(buttons.bottom.slot.name as 'increment' | 'decrement')\" :has-focus=\"focused\">\n <button\n v-bind=\"buttons.bottom.button\"\n @mousedown=\"buttons.bottom.handler\"\n @touchstart=\"buttons.bottom.handler\"\n >\n <svg v-bind=\"buttons.bottom.svg\">\n <path v-bind=\"buttons.bottom.path\" />\n </svg>\n </button>\n </slot>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, onUnmounted, useTemplateRef} from 'vue'\nimport {\n CODE_DOWN,\n CODE_END,\n CODE_HOME,\n CODE_PAGEDOWN,\n CODE_PAGEUP,\n CODE_UP,\n} from '../../utils/constants'\nimport {onKeyStroke, useFocus, useToNumber} from '@vueuse/core'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport {useRtl} from '../../composables/useRtl'\nimport type {\n BFormSpinbuttonEmits,\n BFormSpinbuttonSlots,\n BFormSpinbuttonProps,\n ButtonType,\n} from '../../types'\nimport {getSafeDocument} from '../../utils/dom'\n\nconst KEY_CODES = [CODE_UP, CODE_DOWN, CODE_HOME, CODE_END, CODE_PAGEUP, CODE_PAGEDOWN]\n\nconst _props = withDefaults(defineProps<Omit<BFormSpinbuttonProps, 'modelValue'>>(), {\n ariaControls: undefined,\n ariaLabel: undefined,\n disabled: false,\n form: undefined,\n formatterFn: undefined,\n id: undefined,\n inline: false,\n labelDecrement: 'Decrement',\n labelIncrement: 'Increment',\n locale: undefined,\n max: defaultValues.max,\n min: defaultValues.min,\n name: undefined,\n placeholder: undefined,\n readonly: false,\n repeatDelay: defaultValues.repeatDelay,\n repeatInterval: defaultValues.repeatInterval,\n repeatStepMultiplier: defaultValues.repeatMultiplier,\n repeatThreshold: defaultValues.repeatThreshold,\n required: false,\n size: undefined,\n state: null,\n step: defaultValues.step,\n vertical: false,\n wrap: false,\n})\nconst props = useDefaults(_props, 'BFormSpinbutton')\nconst emit = defineEmits<BFormSpinbuttonEmits>()\ndefineSlots<BFormSpinbuttonSlots>()\n\nconst modelValue = defineModel<Exclude<BFormSpinbuttonProps['modelValue'], undefined>>({\n default: null,\n})\n\nconst element = useTemplateRef('_element')\n\nconst {focused} = useFocus(element)\n\nconst computedId = useId(() => props.id, 'spinbutton')\n\nconst computedClasses = computed(() => ({\n 'disabled': props.disabled,\n 'readonly': props.readonly,\n 'focus': focused.value,\n 'd-inline-flex': props.inline || props.vertical,\n 'd-flex': !props.inline && !props.vertical,\n 'align-items-stretch': !props.vertical,\n 'flex-column': props.vertical,\n [`form-control-${props.size}`]: props.size !== undefined,\n}))\n\nconst computedSpinClasses = computed(() => ({\n 'd-flex': props.vertical,\n 'align-self-center': !props.vertical,\n 'align-items-center': props.vertical,\n 'border-top': props.vertical,\n 'border-bottom': props.vertical,\n 'border-start': !props.vertical,\n 'border-end': !props.vertical,\n}))\n\n//non reactive properties\nlet $_autoDelayTimer: ReturnType<typeof setTimeout> | undefined\nlet $_autoRepeatTimer: ReturnType<typeof setTimeout> | undefined\nlet $_keyIsDown = false\n\n// const computedInline = computed(() => props.inline && !props.vertical)\n\n// const computedReadonly = computed(() => props.readonly && !props.disabled)\n\nconst stepNumber = useToNumber(() => props.step)\nconst computedStep = computed(() =>\n Number.isNaN(stepNumber.value) ? defaultValues.step : stepNumber.value\n)\n\nconst minNumber = useToNumber(() => props.min)\nconst computedMin = computed(() =>\n Number.isNaN(minNumber.value) ? defaultValues.min : minNumber.value\n)\n\nconst maxNumber = useToNumber(() => props.max)\nconst computedMax = computed(() => {\n const step = computedStep.value\n const min = computedMin.value\n return Math.floor((maxNumber.value - min) / step) * step + min\n})\n\nconst repeatDelayNumber = useToNumber(() => props.repeatDelay, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedDelay = computed(() =>\n repeatDelayNumber.value > 0 ? repeatDelayNumber.value : defaultValues.repeatDelay\n)\n\nconst repeatIntervalNumber = useToNumber(() => props.repeatInterval, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedInterval = computed(() =>\n repeatIntervalNumber.value > 0 ? repeatIntervalNumber.value : defaultValues.repeatInterval\n)\n\nconst repeatThresholdNumber = useToNumber(() => props.repeatThreshold, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedThreshold = computed(() =>\n Math.max(\n Number.isNaN(repeatThresholdNumber.value)\n ? defaultValues.repeatThreshold\n : repeatThresholdNumber.value,\n 1\n )\n)\n\nconst repeatStepMultiplierNumber = useToNumber(() => props.repeatStepMultiplier, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedStepMultiplier = computed(() =>\n Math.max(\n Number.isNaN(repeatStepMultiplierNumber.value)\n ? defaultValues.repeatMultiplier\n : repeatStepMultiplierNumber.value,\n 1\n )\n)\n\nconst computedPrecision = computed(() => {\n const step = computedStep.value\n return Math.floor(step) === step ? 0 : (step.toString().split('.')[1] || '').length\n})\n\nconst computedMultiplier = computed(() => Math.pow(10, computedPrecision.value || 0))\n\nconst valueAsFixed = computed(() =>\n modelValue.value === null ? '' : modelValue.value.toFixed(computedPrecision.value)\n)\n\nconst {isRtl, locale: globalLocale} = useRtl()\n\nconst computedLocale = computed(() => {\n const loc = (props.locale ?? globalLocale?.value) || 'locale'\n const locales = [loc]\n const nf = new Intl.NumberFormat(locales)\n return nf.resolvedOptions().locale\n})\n\nconst defaultFormatter = () =>\n new Intl.NumberFormat(computedLocale.value, {\n style: 'decimal',\n useGrouping: false,\n minimumIntegerDigits: 1,\n minimumFractionDigits: computedPrecision.value,\n maximumFractionDigits: computedPrecision.value,\n notation: 'standard',\n }).format\n\nconst computedFormatter = computed(() => props.formatterFn ?? defaultFormatter())\n\nconst stepValue = (direction: number) => {\n // Sets a new incremented or decremented value, supporting optional wrapping\n // Direction is either +1 or -1 (or a multiple thereof)\n let {value} = modelValue\n if (!props.disabled && value !== null) {\n const step = computedStep.value * direction\n const min = computedMin.value\n const max = computedMax.value\n const multiplier = computedMultiplier.value\n const {wrap} = props\n // We ensure that the value steps like a native input\n value = Math.round((value - min) / step) * step + min + step\n // We ensure that precision is maintained (decimals)\n value = Math.round(value * multiplier) / multiplier\n // Handle if wrapping is enabled\n modelValue.value = value > max ? (wrap ? min : max) : value < min ? (wrap ? max : min) : value\n }\n}\n\nconst stepUp = (multiplier = 1) => {\n if (modelValue.value === null) {\n modelValue.value = computedMin.value\n return\n }\n stepValue(+1 * multiplier)\n}\n\nconst stepDown = (multiplier = 1) => {\n if (modelValue.value === null) {\n modelValue.value = props.wrap ? computedMax.value : computedMin.value\n return\n }\n stepValue(-1 * multiplier)\n}\n\nconst stopEvent = (event: Readonly<Event>) => {\n event.preventDefault()\n event.stopImmediatePropagation()\n}\n\nonKeyStroke(\n KEY_CODES,\n (event) => {\n const {code, altKey, ctrlKey, metaKey} = event\n\n if (props.disabled || props.readonly || altKey || ctrlKey || metaKey) return\n\n // https://w3c.github.io/aria-practices/#spinbutton\n stopEvent(event)\n if ($_keyIsDown) {\n // Keypress is already in progress\n return\n }\n\n resetTimers()\n if ([CODE_UP, CODE_DOWN].includes(code)) {\n // The following use the custom auto-repeat handling\n\n $_keyIsDown = true\n if (code === CODE_UP) {\n handleStepRepeat(event, stepUp)\n return\n }\n if (code === CODE_DOWN) {\n handleStepRepeat(event, stepDown)\n }\n return\n }\n // These use native OS key repeating\n if (code === CODE_PAGEUP) {\n stepUp(computedStepMultiplier.value)\n return\n }\n if (code === CODE_PAGEDOWN) {\n stepDown(computedStepMultiplier.value)\n return\n }\n if (code === CODE_HOME) {\n modelValue.value = computedMin.value\n return\n }\n if (code === CODE_END) {\n modelValue.value = computedMax.value\n }\n },\n {target: element, eventName: 'keydown'}\n)\n\nonKeyStroke(\n KEY_CODES,\n (event: Readonly<KeyboardEvent>) => {\n // Emit a change event when the keyup happens\n\n const {altKey, ctrlKey, metaKey} = event\n\n if (props.disabled || props.readonly || altKey || ctrlKey || metaKey) return\n\n stopEvent(event)\n resetTimers()\n $_keyIsDown = false\n emit('change', modelValue.value)\n },\n {target: element, eventName: 'keyup'}\n)\n\n// takes in a mount or Keyboard Event\nconst handleStepRepeat = (event: Readonly<Event>, stepper: (step: number) => void) => {\n const {type} = event || {}\n\n if (!props.disabled && !props.readonly) {\n if (isMouseEvent(event)) {\n // We only respond to left (main === 0) button clicks\n if (type === 'mousedown' && event.button) return\n }\n resetTimers()\n // Step the counter initially\n stepper(1)\n const threshold = computedThreshold.value\n const multiplier = computedStepMultiplier.value\n const delay = computedDelay.value\n const interval = computedInterval.value\n\n // Initiate the delay/repeat interval\n $_autoDelayTimer = setTimeout(() => {\n let count = 0\n $_autoRepeatTimer = setInterval(() => {\n // After N initial repeats, we increase the incrementing step amount\n // We do this to minimize screen reader announcements of the value\n // (values are announced every change, which can be chatty for SR users)\n // And to make it easer to select a value when the range is large\n stepper(count < threshold ? 1 : multiplier)\n count++\n }, interval)\n }, delay)\n }\n}\n\nconst isMouseEvent = (evt: Readonly<Event>): evt is MouseEvent =>\n evt.type === 'mouseup' || evt.type === 'mousedown'\n\nconst onMouseup: EventListener = (event: Readonly<Event>) => {\n // `<body>` listener, only enabled when mousedown starts\n\n if (isMouseEvent(event)) {\n if (event.type === 'mouseup' && event.button) {\n // Ignore non left button (main === 0) mouse button click\n return\n }\n }\n\n stopEvent(event)\n resetTimers()\n setMouseup('removeEventListener')\n // Trigger the change event\n emit('change', modelValue.value)\n}\n\nconst setMouseup = (operation: 'addEventListener' | 'removeEventListener') => {\n const doc = getSafeDocument()\n if (doc === null) return\n\n if (operation === 'addEventListener') {\n doc.body.addEventListener('mouseup', onMouseup)\n doc.body.addEventListener('touchend', onMouseup, {passive: false})\n } else {\n doc.body.removeEventListener('mouseup', onMouseup)\n doc.body.removeEventListener('touchend', onMouseup)\n }\n}\nconst resetTimers = () => {\n clearTimeout($_autoDelayTimer)\n clearInterval($_autoRepeatTimer)\n $_autoDelayTimer = undefined\n $_autoRepeatTimer = undefined\n}\n\nconst buttons = computed(() => {\n const incrementSvgAttrs = {\n svg: {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '16',\n height: '16',\n fill: 'currentColor',\n class: 'bi bi-plus',\n viewBox: '0 0 16 16',\n },\n path: {\n d: 'M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z',\n },\n } as const\n\n const decrementSvgAttrs = {\n svg: {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '16',\n height: '16',\n fill: 'currentColor',\n class: 'bi bi-dash',\n viewBox: '0 0 16 16',\n },\n path: {d: 'M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z'},\n } as const\n\n const sharedButtonAttrs = {\n 'class': [{'py-0': !props.vertical}, 'btn', 'btn-sm', 'border-0', 'rounded-0'],\n 'tabindex': '-1',\n 'type': 'button' as ButtonType,\n 'disabled': props.disabled || props.readonly,\n 'aria-disabled': props.disabled || props.readonly ? true : undefined,\n 'aria-controls': computedId.value,\n }\n\n const sharedSvgAttrs = {\n 'aria-hidden': true,\n 'scale': focused.value ? 1.5 : 1.25,\n }\n\n const handler = (event: Readonly<Event>, stepper: (multiplier?: number) => void) => {\n if (!props.disabled && !props.readonly) {\n stopEvent(event)\n setMouseup('addEventListener')\n // Since we `preventDefault()`, we must manually focus the button\n // Though it's likely captured from the element click focus\n focused.value = true\n handleStepRepeat(event, stepper)\n }\n }\n\n const incrementAttrs = {\n button: {\n ...sharedButtonAttrs,\n 'aria-label': props.labelIncrement || undefined,\n 'aria-keyshortcuts': 'ArrowUp',\n },\n svg: {\n ...sharedSvgAttrs,\n ...incrementSvgAttrs.svg,\n },\n path: {\n ...incrementSvgAttrs.path,\n },\n slot: {\n name: 'increment',\n },\n handler: (e: Event) => handler(e, stepUp),\n }\n\n const decrementAttrs = {\n button: {\n ...sharedButtonAttrs,\n 'aria-label': props.labelDecrement || undefined,\n 'aria-keyshortcuts': 'ArrowDown',\n },\n svg: {\n ...sharedSvgAttrs,\n ...decrementSvgAttrs.svg,\n },\n path: {\n ...decrementSvgAttrs.path,\n },\n slot: {\n name: 'decrement',\n },\n handler: (e: Readonly<Event>) => handler(e, stepDown),\n }\n\n return {\n top: {\n ...(props.vertical ? incrementAttrs : decrementAttrs),\n },\n bottom: {\n ...(!props.vertical ? incrementAttrs : decrementAttrs),\n },\n }\n})\n\nonUnmounted(() => {\n // Cleanup event listeners\n setMouseup('removeEventListener')\n})\n</script>\n\n<script lang=\"ts\">\nconst defaultValues = {\n min: 1,\n max: 100,\n step: 1,\n repeatDelay: 500,\n repeatInterval: 100,\n repeatThreshold: 10,\n repeatMultiplier: 4,\n} as const\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"BFormSpinbutton-5JRMW1Bo.mjs","names":[],"sources":["../src/components/BFormSpinbutton/BFormSpinbutton.vue","../src/components/BFormSpinbutton/BFormSpinbutton.vue"],"sourcesContent":["<template>\n <div\n ref=\"_element\"\n class=\"b-form-spinbutton form-control\"\n :class=\"computedClasses\"\n role=\"group\"\n :lang=\"computedLocale\"\n :tabindex=\"props.disabled ? undefined : '-1'\"\n :title=\"props.ariaLabel\"\n @click=\"focused = true\"\n >\n <!-- eslint-disable-next-line prettier/prettier -->\n <!-- prettier-ignore -->\n <slot :name=\"(buttons.top.slot.name as 'increment' | 'decrement')\" :has-focus=\"focused\">\n <button\n v-bind=\"buttons.top.button\"\n @mousedown=\"buttons.top.handler\"\n @touchstart=\"buttons.top.handler\"\n >\n <svg v-bind=\"buttons.top.svg\">\n <path v-bind=\"buttons.top.path\" />\n </svg>\n </button>\n </slot>\n <input\n v-if=\"props.name && !props.disabled\"\n key=\"hidden\"\n type=\"hidden\"\n :name=\"props.name\"\n :form=\"props.form\"\n :value=\"valueAsFixed\"\n />\n <output\n :id=\"computedId\"\n key=\"output\"\n class=\"flex-grow-1\"\n :class=\"computedSpinClasses\"\n :dir=\"(isRtl ?? false) ? 'rtl' : 'ltr'\"\n :tabindex=\"props.disabled ? undefined : '0'\"\n role=\"spinbutton\"\n aria-live=\"off\"\n :aria-label=\"props.ariaLabel || undefined\"\n :aria-invalid=\"\n props.state === false || (!modelValue !== null && props.required) ? true : undefined\n \"\n :aria-required=\"props.required ? true : undefined\"\n :aria-valuemin=\"computedMin\"\n :aria-valuemax=\"computedMax\"\n :aria-valuenow=\"modelValue !== null ? modelValue : undefined\"\n :aria-valuetext=\"modelValue !== null ? computedFormatter(modelValue) : undefined\"\n >\n <bdi>\n {{ (modelValue !== null ? computedFormatter(modelValue) : props.placeholder) || '' }}\n </bdi>\n </output>\n <!-- eslint-disable-next-line prettier/prettier -->\n <!-- prettier-ignore -->\n <slot :name=\"(buttons.bottom.slot.name as 'increment' | 'decrement')\" :has-focus=\"focused\">\n <button\n v-bind=\"buttons.bottom.button\"\n @mousedown=\"buttons.bottom.handler\"\n @touchstart=\"buttons.bottom.handler\"\n >\n <svg v-bind=\"buttons.bottom.svg\">\n <path v-bind=\"buttons.bottom.path\" />\n </svg>\n </button>\n </slot>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, onUnmounted, useTemplateRef} from 'vue'\nimport {\n CODE_DOWN,\n CODE_END,\n CODE_HOME,\n CODE_PAGEDOWN,\n CODE_PAGEUP,\n CODE_UP,\n} from '../../utils/constants'\nimport {onKeyStroke, useFocus, useToNumber} from '@vueuse/core'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport {useRtl} from '../../composables/useRtl'\nimport type {\n BFormSpinbuttonEmits,\n BFormSpinbuttonSlots,\n BFormSpinbuttonProps,\n ButtonType,\n} from '../../types'\nimport {getSafeDocument} from '../../utils/dom'\n\nconst KEY_CODES = [CODE_UP, CODE_DOWN, CODE_HOME, CODE_END, CODE_PAGEUP, CODE_PAGEDOWN]\n\nconst _props = withDefaults(defineProps<Omit<BFormSpinbuttonProps, 'modelValue'>>(), {\n ariaControls: undefined,\n ariaLabel: undefined,\n disabled: false,\n form: undefined,\n formatterFn: undefined,\n id: undefined,\n inline: false,\n labelDecrement: 'Decrement',\n labelIncrement: 'Increment',\n locale: undefined,\n max: defaultValues.max,\n min: defaultValues.min,\n name: undefined,\n placeholder: undefined,\n readonly: false,\n repeatDelay: defaultValues.repeatDelay,\n repeatInterval: defaultValues.repeatInterval,\n repeatStepMultiplier: defaultValues.repeatMultiplier,\n repeatThreshold: defaultValues.repeatThreshold,\n required: false,\n size: undefined,\n state: null,\n step: defaultValues.step,\n vertical: false,\n wrap: false,\n})\nconst props = useDefaults(_props, 'BFormSpinbutton')\nconst emit = defineEmits<BFormSpinbuttonEmits>()\ndefineSlots<BFormSpinbuttonSlots>()\n\nconst modelValue = defineModel<Exclude<BFormSpinbuttonProps['modelValue'], undefined>>({\n default: null,\n})\n\nconst element = useTemplateRef('_element')\n\nconst {focused} = useFocus(element)\n\nconst computedId = useId(() => props.id, 'spinbutton')\n\nconst computedClasses = computed(() => ({\n 'disabled': props.disabled,\n 'readonly': props.readonly,\n 'focus': focused.value,\n 'd-inline-flex': props.inline || props.vertical,\n 'd-flex': !props.inline && !props.vertical,\n 'align-items-stretch': !props.vertical,\n 'flex-column': props.vertical,\n [`form-control-${props.size}`]: props.size !== undefined,\n}))\n\nconst computedSpinClasses = computed(() => ({\n 'd-flex': props.vertical,\n 'align-self-center': !props.vertical,\n 'align-items-center': props.vertical,\n 'border-top': props.vertical,\n 'border-bottom': props.vertical,\n 'border-start': !props.vertical,\n 'border-end': !props.vertical,\n}))\n\n//non reactive properties\nlet $_autoDelayTimer: ReturnType<typeof setTimeout> | undefined\nlet $_autoRepeatTimer: ReturnType<typeof setTimeout> | undefined\nlet $_keyIsDown = false\n\n// const computedInline = computed(() => props.inline && !props.vertical)\n\n// const computedReadonly = computed(() => props.readonly && !props.disabled)\n\nconst stepNumber = useToNumber(() => props.step)\nconst computedStep = computed(() =>\n Number.isNaN(stepNumber.value) ? defaultValues.step : stepNumber.value\n)\n\nconst minNumber = useToNumber(() => props.min)\nconst computedMin = computed(() =>\n Number.isNaN(minNumber.value) ? defaultValues.min : minNumber.value\n)\n\nconst maxNumber = useToNumber(() => props.max)\nconst computedMax = computed(() => {\n const step = computedStep.value\n const min = computedMin.value\n return Math.floor((maxNumber.value - min) / step) * step + min\n})\n\nconst repeatDelayNumber = useToNumber(() => props.repeatDelay, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedDelay = computed(() =>\n repeatDelayNumber.value > 0 ? repeatDelayNumber.value : defaultValues.repeatDelay\n)\n\nconst repeatIntervalNumber = useToNumber(() => props.repeatInterval, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedInterval = computed(() =>\n repeatIntervalNumber.value > 0 ? repeatIntervalNumber.value : defaultValues.repeatInterval\n)\n\nconst repeatThresholdNumber = useToNumber(() => props.repeatThreshold, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedThreshold = computed(() =>\n Math.max(\n Number.isNaN(repeatThresholdNumber.value)\n ? defaultValues.repeatThreshold\n : repeatThresholdNumber.value,\n 1\n )\n)\n\nconst repeatStepMultiplierNumber = useToNumber(() => props.repeatStepMultiplier, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedStepMultiplier = computed(() =>\n Math.max(\n Number.isNaN(repeatStepMultiplierNumber.value)\n ? defaultValues.repeatMultiplier\n : repeatStepMultiplierNumber.value,\n 1\n )\n)\n\nconst computedPrecision = computed(() => {\n const step = computedStep.value\n return Math.floor(step) === step ? 0 : (step.toString().split('.')[1] || '').length\n})\n\nconst computedMultiplier = computed(() => Math.pow(10, computedPrecision.value || 0))\n\nconst valueAsFixed = computed(() =>\n modelValue.value === null ? '' : modelValue.value.toFixed(computedPrecision.value)\n)\n\nconst {isRtl, locale: globalLocale} = useRtl()\n\nconst computedLocale = computed(() => {\n const loc = (props.locale ?? globalLocale?.value) || 'locale'\n const locales = [loc]\n const nf = new Intl.NumberFormat(locales)\n return nf.resolvedOptions().locale\n})\n\nconst defaultFormatter = () =>\n new Intl.NumberFormat(computedLocale.value, {\n style: 'decimal',\n useGrouping: false,\n minimumIntegerDigits: 1,\n minimumFractionDigits: computedPrecision.value,\n maximumFractionDigits: computedPrecision.value,\n notation: 'standard',\n }).format\n\nconst computedFormatter = computed(() => props.formatterFn ?? defaultFormatter())\n\nconst stepValue = (direction: number) => {\n // Sets a new incremented or decremented value, supporting optional wrapping\n // Direction is either +1 or -1 (or a multiple thereof)\n let {value} = modelValue\n if (!props.disabled && value !== null) {\n const step = computedStep.value * direction\n const min = computedMin.value\n const max = computedMax.value\n const multiplier = computedMultiplier.value\n const {wrap} = props\n // We ensure that the value steps like a native input\n value = Math.round((value - min) / step) * step + min + step\n // We ensure that precision is maintained (decimals)\n value = Math.round(value * multiplier) / multiplier\n // Handle if wrapping is enabled\n modelValue.value = value > max ? (wrap ? min : max) : value < min ? (wrap ? max : min) : value\n }\n}\n\nconst stepUp = (multiplier = 1) => {\n if (modelValue.value === null) {\n modelValue.value = computedMin.value\n return\n }\n stepValue(+1 * multiplier)\n}\n\nconst stepDown = (multiplier = 1) => {\n if (modelValue.value === null) {\n modelValue.value = props.wrap ? computedMax.value : computedMin.value\n return\n }\n stepValue(-1 * multiplier)\n}\n\nconst stopEvent = (event: Readonly<Event>) => {\n event.preventDefault()\n event.stopImmediatePropagation()\n}\n\nonKeyStroke(\n KEY_CODES,\n (event) => {\n const {code, altKey, ctrlKey, metaKey} = event\n\n if (props.disabled || props.readonly || altKey || ctrlKey || metaKey) return\n\n // https://w3c.github.io/aria-practices/#spinbutton\n stopEvent(event)\n if ($_keyIsDown) {\n // Keypress is already in progress\n return\n }\n\n resetTimers()\n if ([CODE_UP, CODE_DOWN].includes(code)) {\n // The following use the custom auto-repeat handling\n\n $_keyIsDown = true\n if (code === CODE_UP) {\n handleStepRepeat(event, stepUp)\n return\n }\n if (code === CODE_DOWN) {\n handleStepRepeat(event, stepDown)\n }\n return\n }\n // These use native OS key repeating\n if (code === CODE_PAGEUP) {\n stepUp(computedStepMultiplier.value)\n return\n }\n if (code === CODE_PAGEDOWN) {\n stepDown(computedStepMultiplier.value)\n return\n }\n if (code === CODE_HOME) {\n modelValue.value = computedMin.value\n return\n }\n if (code === CODE_END) {\n modelValue.value = computedMax.value\n }\n },\n {target: element, eventName: 'keydown'}\n)\n\nonKeyStroke(\n KEY_CODES,\n (event: Readonly<KeyboardEvent>) => {\n // Emit a change event when the keyup happens\n\n const {altKey, ctrlKey, metaKey} = event\n\n if (props.disabled || props.readonly || altKey || ctrlKey || metaKey) return\n\n stopEvent(event)\n resetTimers()\n $_keyIsDown = false\n emit('change', modelValue.value)\n },\n {target: element, eventName: 'keyup'}\n)\n\n// takes in a mount or Keyboard Event\nconst handleStepRepeat = (event: Readonly<Event>, stepper: (step: number) => void) => {\n const {type} = event || {}\n\n if (!props.disabled && !props.readonly) {\n if (isMouseEvent(event)) {\n // We only respond to left (main === 0) button clicks\n if (type === 'mousedown' && event.button) return\n }\n resetTimers()\n // Step the counter initially\n stepper(1)\n const threshold = computedThreshold.value\n const multiplier = computedStepMultiplier.value\n const delay = computedDelay.value\n const interval = computedInterval.value\n\n // Initiate the delay/repeat interval\n $_autoDelayTimer = setTimeout(() => {\n let count = 0\n $_autoRepeatTimer = setInterval(() => {\n // After N initial repeats, we increase the incrementing step amount\n // We do this to minimize screen reader announcements of the value\n // (values are announced every change, which can be chatty for SR users)\n // And to make it easer to select a value when the range is large\n stepper(count < threshold ? 1 : multiplier)\n count++\n }, interval)\n }, delay)\n }\n}\n\nconst isMouseEvent = (evt: Readonly<Event>): evt is MouseEvent =>\n evt.type === 'mouseup' || evt.type === 'mousedown'\n\nconst onMouseup: EventListener = (event: Readonly<Event>) => {\n // `<body>` listener, only enabled when mousedown starts\n\n if (isMouseEvent(event)) {\n if (event.type === 'mouseup' && event.button) {\n // Ignore non left button (main === 0) mouse button click\n return\n }\n }\n\n stopEvent(event)\n resetTimers()\n setMouseup('removeEventListener')\n // Trigger the change event\n emit('change', modelValue.value)\n}\n\nconst setMouseup = (operation: 'addEventListener' | 'removeEventListener') => {\n const doc = getSafeDocument()\n if (doc === null) return\n\n if (operation === 'addEventListener') {\n doc.body.addEventListener('mouseup', onMouseup)\n doc.body.addEventListener('touchend', onMouseup, {passive: false})\n } else {\n doc.body.removeEventListener('mouseup', onMouseup)\n doc.body.removeEventListener('touchend', onMouseup)\n }\n}\nconst resetTimers = () => {\n clearTimeout($_autoDelayTimer)\n clearInterval($_autoRepeatTimer)\n $_autoDelayTimer = undefined\n $_autoRepeatTimer = undefined\n}\n\nconst buttons = computed(() => {\n const incrementSvgAttrs = {\n svg: {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '16',\n height: '16',\n fill: 'currentColor',\n class: 'bi bi-plus',\n viewBox: '0 0 16 16',\n },\n path: {\n d: 'M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z',\n },\n } as const\n\n const decrementSvgAttrs = {\n svg: {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '16',\n height: '16',\n fill: 'currentColor',\n class: 'bi bi-dash',\n viewBox: '0 0 16 16',\n },\n path: {d: 'M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z'},\n } as const\n\n const sharedButtonAttrs = {\n 'class': [{'py-0': !props.vertical}, 'btn', 'btn-sm', 'border-0', 'rounded-0'],\n 'tabindex': '-1',\n 'type': 'button' as ButtonType,\n 'disabled': props.disabled || props.readonly,\n 'aria-disabled': props.disabled || props.readonly ? true : undefined,\n 'aria-controls': computedId.value,\n }\n\n const sharedSvgAttrs = {\n 'aria-hidden': true,\n 'scale': focused.value ? 1.5 : 1.25,\n }\n\n const handler = (event: Readonly<Event>, stepper: (multiplier?: number) => void) => {\n if (!props.disabled && !props.readonly) {\n stopEvent(event)\n setMouseup('addEventListener')\n // Since we `preventDefault()`, we must manually focus the button\n // Though it's likely captured from the element click focus\n focused.value = true\n handleStepRepeat(event, stepper)\n }\n }\n\n const incrementAttrs = {\n button: {\n ...sharedButtonAttrs,\n 'aria-label': props.labelIncrement || undefined,\n 'aria-keyshortcuts': 'ArrowUp',\n },\n svg: {\n ...sharedSvgAttrs,\n ...incrementSvgAttrs.svg,\n },\n path: {\n ...incrementSvgAttrs.path,\n },\n slot: {\n name: 'increment',\n },\n handler: (e: Event) => handler(e, stepUp),\n }\n\n const decrementAttrs = {\n button: {\n ...sharedButtonAttrs,\n 'aria-label': props.labelDecrement || undefined,\n 'aria-keyshortcuts': 'ArrowDown',\n },\n svg: {\n ...sharedSvgAttrs,\n ...decrementSvgAttrs.svg,\n },\n path: {\n ...decrementSvgAttrs.path,\n },\n slot: {\n name: 'decrement',\n },\n handler: (e: Readonly<Event>) => handler(e, stepDown),\n }\n\n return {\n top: {\n ...(props.vertical ? incrementAttrs : decrementAttrs),\n },\n bottom: {\n ...(!props.vertical ? incrementAttrs : decrementAttrs),\n },\n }\n})\n\nonUnmounted(() => {\n // Cleanup event listeners\n setMouseup('removeEventListener')\n})\n</script>\n\n<script lang=\"ts\">\nconst defaultValues = {\n min: 1,\n max: 100,\n step: 1,\n repeatDelay: 500,\n repeatInterval: 100,\n repeatThreshold: 10,\n repeatMultiplier: 4,\n} as const\n</script>\n","<template>\n <div\n ref=\"_element\"\n class=\"b-form-spinbutton form-control\"\n :class=\"computedClasses\"\n role=\"group\"\n :lang=\"computedLocale\"\n :tabindex=\"props.disabled ? undefined : '-1'\"\n :title=\"props.ariaLabel\"\n @click=\"focused = true\"\n >\n <!-- eslint-disable-next-line prettier/prettier -->\n <!-- prettier-ignore -->\n <slot :name=\"(buttons.top.slot.name as 'increment' | 'decrement')\" :has-focus=\"focused\">\n <button\n v-bind=\"buttons.top.button\"\n @mousedown=\"buttons.top.handler\"\n @touchstart=\"buttons.top.handler\"\n >\n <svg v-bind=\"buttons.top.svg\">\n <path v-bind=\"buttons.top.path\" />\n </svg>\n </button>\n </slot>\n <input\n v-if=\"props.name && !props.disabled\"\n key=\"hidden\"\n type=\"hidden\"\n :name=\"props.name\"\n :form=\"props.form\"\n :value=\"valueAsFixed\"\n />\n <output\n :id=\"computedId\"\n key=\"output\"\n class=\"flex-grow-1\"\n :class=\"computedSpinClasses\"\n :dir=\"(isRtl ?? false) ? 'rtl' : 'ltr'\"\n :tabindex=\"props.disabled ? undefined : '0'\"\n role=\"spinbutton\"\n aria-live=\"off\"\n :aria-label=\"props.ariaLabel || undefined\"\n :aria-invalid=\"\n props.state === false || (!modelValue !== null && props.required) ? true : undefined\n \"\n :aria-required=\"props.required ? true : undefined\"\n :aria-valuemin=\"computedMin\"\n :aria-valuemax=\"computedMax\"\n :aria-valuenow=\"modelValue !== null ? modelValue : undefined\"\n :aria-valuetext=\"modelValue !== null ? computedFormatter(modelValue) : undefined\"\n >\n <bdi>\n {{ (modelValue !== null ? computedFormatter(modelValue) : props.placeholder) || '' }}\n </bdi>\n </output>\n <!-- eslint-disable-next-line prettier/prettier -->\n <!-- prettier-ignore -->\n <slot :name=\"(buttons.bottom.slot.name as 'increment' | 'decrement')\" :has-focus=\"focused\">\n <button\n v-bind=\"buttons.bottom.button\"\n @mousedown=\"buttons.bottom.handler\"\n @touchstart=\"buttons.bottom.handler\"\n >\n <svg v-bind=\"buttons.bottom.svg\">\n <path v-bind=\"buttons.bottom.path\" />\n </svg>\n </button>\n </slot>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, onUnmounted, useTemplateRef} from 'vue'\nimport {\n CODE_DOWN,\n CODE_END,\n CODE_HOME,\n CODE_PAGEDOWN,\n CODE_PAGEUP,\n CODE_UP,\n} from '../../utils/constants'\nimport {onKeyStroke, useFocus, useToNumber} from '@vueuse/core'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport {useRtl} from '../../composables/useRtl'\nimport type {\n BFormSpinbuttonEmits,\n BFormSpinbuttonSlots,\n BFormSpinbuttonProps,\n ButtonType,\n} from '../../types'\nimport {getSafeDocument} from '../../utils/dom'\n\nconst KEY_CODES = [CODE_UP, CODE_DOWN, CODE_HOME, CODE_END, CODE_PAGEUP, CODE_PAGEDOWN]\n\nconst _props = withDefaults(defineProps<Omit<BFormSpinbuttonProps, 'modelValue'>>(), {\n ariaControls: undefined,\n ariaLabel: undefined,\n disabled: false,\n form: undefined,\n formatterFn: undefined,\n id: undefined,\n inline: false,\n labelDecrement: 'Decrement',\n labelIncrement: 'Increment',\n locale: undefined,\n max: defaultValues.max,\n min: defaultValues.min,\n name: undefined,\n placeholder: undefined,\n readonly: false,\n repeatDelay: defaultValues.repeatDelay,\n repeatInterval: defaultValues.repeatInterval,\n repeatStepMultiplier: defaultValues.repeatMultiplier,\n repeatThreshold: defaultValues.repeatThreshold,\n required: false,\n size: undefined,\n state: null,\n step: defaultValues.step,\n vertical: false,\n wrap: false,\n})\nconst props = useDefaults(_props, 'BFormSpinbutton')\nconst emit = defineEmits<BFormSpinbuttonEmits>()\ndefineSlots<BFormSpinbuttonSlots>()\n\nconst modelValue = defineModel<Exclude<BFormSpinbuttonProps['modelValue'], undefined>>({\n default: null,\n})\n\nconst element = useTemplateRef('_element')\n\nconst {focused} = useFocus(element)\n\nconst computedId = useId(() => props.id, 'spinbutton')\n\nconst computedClasses = computed(() => ({\n 'disabled': props.disabled,\n 'readonly': props.readonly,\n 'focus': focused.value,\n 'd-inline-flex': props.inline || props.vertical,\n 'd-flex': !props.inline && !props.vertical,\n 'align-items-stretch': !props.vertical,\n 'flex-column': props.vertical,\n [`form-control-${props.size}`]: props.size !== undefined,\n}))\n\nconst computedSpinClasses = computed(() => ({\n 'd-flex': props.vertical,\n 'align-self-center': !props.vertical,\n 'align-items-center': props.vertical,\n 'border-top': props.vertical,\n 'border-bottom': props.vertical,\n 'border-start': !props.vertical,\n 'border-end': !props.vertical,\n}))\n\n//non reactive properties\nlet $_autoDelayTimer: ReturnType<typeof setTimeout> | undefined\nlet $_autoRepeatTimer: ReturnType<typeof setTimeout> | undefined\nlet $_keyIsDown = false\n\n// const computedInline = computed(() => props.inline && !props.vertical)\n\n// const computedReadonly = computed(() => props.readonly && !props.disabled)\n\nconst stepNumber = useToNumber(() => props.step)\nconst computedStep = computed(() =>\n Number.isNaN(stepNumber.value) ? defaultValues.step : stepNumber.value\n)\n\nconst minNumber = useToNumber(() => props.min)\nconst computedMin = computed(() =>\n Number.isNaN(minNumber.value) ? defaultValues.min : minNumber.value\n)\n\nconst maxNumber = useToNumber(() => props.max)\nconst computedMax = computed(() => {\n const step = computedStep.value\n const min = computedMin.value\n return Math.floor((maxNumber.value - min) / step) * step + min\n})\n\nconst repeatDelayNumber = useToNumber(() => props.repeatDelay, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedDelay = computed(() =>\n repeatDelayNumber.value > 0 ? repeatDelayNumber.value : defaultValues.repeatDelay\n)\n\nconst repeatIntervalNumber = useToNumber(() => props.repeatInterval, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedInterval = computed(() =>\n repeatIntervalNumber.value > 0 ? repeatIntervalNumber.value : defaultValues.repeatInterval\n)\n\nconst repeatThresholdNumber = useToNumber(() => props.repeatThreshold, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedThreshold = computed(() =>\n Math.max(\n Number.isNaN(repeatThresholdNumber.value)\n ? defaultValues.repeatThreshold\n : repeatThresholdNumber.value,\n 1\n )\n)\n\nconst repeatStepMultiplierNumber = useToNumber(() => props.repeatStepMultiplier, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedStepMultiplier = computed(() =>\n Math.max(\n Number.isNaN(repeatStepMultiplierNumber.value)\n ? defaultValues.repeatMultiplier\n : repeatStepMultiplierNumber.value,\n 1\n )\n)\n\nconst computedPrecision = computed(() => {\n const step = computedStep.value\n return Math.floor(step) === step ? 0 : (step.toString().split('.')[1] || '').length\n})\n\nconst computedMultiplier = computed(() => Math.pow(10, computedPrecision.value || 0))\n\nconst valueAsFixed = computed(() =>\n modelValue.value === null ? '' : modelValue.value.toFixed(computedPrecision.value)\n)\n\nconst {isRtl, locale: globalLocale} = useRtl()\n\nconst computedLocale = computed(() => {\n const loc = (props.locale ?? globalLocale?.value) || 'locale'\n const locales = [loc]\n const nf = new Intl.NumberFormat(locales)\n return nf.resolvedOptions().locale\n})\n\nconst defaultFormatter = () =>\n new Intl.NumberFormat(computedLocale.value, {\n style: 'decimal',\n useGrouping: false,\n minimumIntegerDigits: 1,\n minimumFractionDigits: computedPrecision.value,\n maximumFractionDigits: computedPrecision.value,\n notation: 'standard',\n }).format\n\nconst computedFormatter = computed(() => props.formatterFn ?? defaultFormatter())\n\nconst stepValue = (direction: number) => {\n // Sets a new incremented or decremented value, supporting optional wrapping\n // Direction is either +1 or -1 (or a multiple thereof)\n let {value} = modelValue\n if (!props.disabled && value !== null) {\n const step = computedStep.value * direction\n const min = computedMin.value\n const max = computedMax.value\n const multiplier = computedMultiplier.value\n const {wrap} = props\n // We ensure that the value steps like a native input\n value = Math.round((value - min) / step) * step + min + step\n // We ensure that precision is maintained (decimals)\n value = Math.round(value * multiplier) / multiplier\n // Handle if wrapping is enabled\n modelValue.value = value > max ? (wrap ? min : max) : value < min ? (wrap ? max : min) : value\n }\n}\n\nconst stepUp = (multiplier = 1) => {\n if (modelValue.value === null) {\n modelValue.value = computedMin.value\n return\n }\n stepValue(+1 * multiplier)\n}\n\nconst stepDown = (multiplier = 1) => {\n if (modelValue.value === null) {\n modelValue.value = props.wrap ? computedMax.value : computedMin.value\n return\n }\n stepValue(-1 * multiplier)\n}\n\nconst stopEvent = (event: Readonly<Event>) => {\n event.preventDefault()\n event.stopImmediatePropagation()\n}\n\nonKeyStroke(\n KEY_CODES,\n (event) => {\n const {code, altKey, ctrlKey, metaKey} = event\n\n if (props.disabled || props.readonly || altKey || ctrlKey || metaKey) return\n\n // https://w3c.github.io/aria-practices/#spinbutton\n stopEvent(event)\n if ($_keyIsDown) {\n // Keypress is already in progress\n return\n }\n\n resetTimers()\n if ([CODE_UP, CODE_DOWN].includes(code)) {\n // The following use the custom auto-repeat handling\n\n $_keyIsDown = true\n if (code === CODE_UP) {\n handleStepRepeat(event, stepUp)\n return\n }\n if (code === CODE_DOWN) {\n handleStepRepeat(event, stepDown)\n }\n return\n }\n // These use native OS key repeating\n if (code === CODE_PAGEUP) {\n stepUp(computedStepMultiplier.value)\n return\n }\n if (code === CODE_PAGEDOWN) {\n stepDown(computedStepMultiplier.value)\n return\n }\n if (code === CODE_HOME) {\n modelValue.value = computedMin.value\n return\n }\n if (code === CODE_END) {\n modelValue.value = computedMax.value\n }\n },\n {target: element, eventName: 'keydown'}\n)\n\nonKeyStroke(\n KEY_CODES,\n (event: Readonly<KeyboardEvent>) => {\n // Emit a change event when the keyup happens\n\n const {altKey, ctrlKey, metaKey} = event\n\n if (props.disabled || props.readonly || altKey || ctrlKey || metaKey) return\n\n stopEvent(event)\n resetTimers()\n $_keyIsDown = false\n emit('change', modelValue.value)\n },\n {target: element, eventName: 'keyup'}\n)\n\n// takes in a mount or Keyboard Event\nconst handleStepRepeat = (event: Readonly<Event>, stepper: (step: number) => void) => {\n const {type} = event || {}\n\n if (!props.disabled && !props.readonly) {\n if (isMouseEvent(event)) {\n // We only respond to left (main === 0) button clicks\n if (type === 'mousedown' && event.button) return\n }\n resetTimers()\n // Step the counter initially\n stepper(1)\n const threshold = computedThreshold.value\n const multiplier = computedStepMultiplier.value\n const delay = computedDelay.value\n const interval = computedInterval.value\n\n // Initiate the delay/repeat interval\n $_autoDelayTimer = setTimeout(() => {\n let count = 0\n $_autoRepeatTimer = setInterval(() => {\n // After N initial repeats, we increase the incrementing step amount\n // We do this to minimize screen reader announcements of the value\n // (values are announced every change, which can be chatty for SR users)\n // And to make it easer to select a value when the range is large\n stepper(count < threshold ? 1 : multiplier)\n count++\n }, interval)\n }, delay)\n }\n}\n\nconst isMouseEvent = (evt: Readonly<Event>): evt is MouseEvent =>\n evt.type === 'mouseup' || evt.type === 'mousedown'\n\nconst onMouseup: EventListener = (event: Readonly<Event>) => {\n // `<body>` listener, only enabled when mousedown starts\n\n if (isMouseEvent(event)) {\n if (event.type === 'mouseup' && event.button) {\n // Ignore non left button (main === 0) mouse button click\n return\n }\n }\n\n stopEvent(event)\n resetTimers()\n setMouseup('removeEventListener')\n // Trigger the change event\n emit('change', modelValue.value)\n}\n\nconst setMouseup = (operation: 'addEventListener' | 'removeEventListener') => {\n const doc = getSafeDocument()\n if (doc === null) return\n\n if (operation === 'addEventListener') {\n doc.body.addEventListener('mouseup', onMouseup)\n doc.body.addEventListener('touchend', onMouseup, {passive: false})\n } else {\n doc.body.removeEventListener('mouseup', onMouseup)\n doc.body.removeEventListener('touchend', onMouseup)\n }\n}\nconst resetTimers = () => {\n clearTimeout($_autoDelayTimer)\n clearInterval($_autoRepeatTimer)\n $_autoDelayTimer = undefined\n $_autoRepeatTimer = undefined\n}\n\nconst buttons = computed(() => {\n const incrementSvgAttrs = {\n svg: {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '16',\n height: '16',\n fill: 'currentColor',\n class: 'bi bi-plus',\n viewBox: '0 0 16 16',\n },\n path: {\n d: 'M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z',\n },\n } as const\n\n const decrementSvgAttrs = {\n svg: {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '16',\n height: '16',\n fill: 'currentColor',\n class: 'bi bi-dash',\n viewBox: '0 0 16 16',\n },\n path: {d: 'M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z'},\n } as const\n\n const sharedButtonAttrs = {\n 'class': [{'py-0': !props.vertical}, 'btn', 'btn-sm', 'border-0', 'rounded-0'],\n 'tabindex': '-1',\n 'type': 'button' as ButtonType,\n 'disabled': props.disabled || props.readonly,\n 'aria-disabled': props.disabled || props.readonly ? true : undefined,\n 'aria-controls': computedId.value,\n }\n\n const sharedSvgAttrs = {\n 'aria-hidden': true,\n 'scale': focused.value ? 1.5 : 1.25,\n }\n\n const handler = (event: Readonly<Event>, stepper: (multiplier?: number) => void) => {\n if (!props.disabled && !props.readonly) {\n stopEvent(event)\n setMouseup('addEventListener')\n // Since we `preventDefault()`, we must manually focus the button\n // Though it's likely captured from the element click focus\n focused.value = true\n handleStepRepeat(event, stepper)\n }\n }\n\n const incrementAttrs = {\n button: {\n ...sharedButtonAttrs,\n 'aria-label': props.labelIncrement || undefined,\n 'aria-keyshortcuts': 'ArrowUp',\n },\n svg: {\n ...sharedSvgAttrs,\n ...incrementSvgAttrs.svg,\n },\n path: {\n ...incrementSvgAttrs.path,\n },\n slot: {\n name: 'increment',\n },\n handler: (e: Event) => handler(e, stepUp),\n }\n\n const decrementAttrs = {\n button: {\n ...sharedButtonAttrs,\n 'aria-label': props.labelDecrement || undefined,\n 'aria-keyshortcuts': 'ArrowDown',\n },\n svg: {\n ...sharedSvgAttrs,\n ...decrementSvgAttrs.svg,\n },\n path: {\n ...decrementSvgAttrs.path,\n },\n slot: {\n name: 'decrement',\n },\n handler: (e: Readonly<Event>) => handler(e, stepDown),\n }\n\n return {\n top: {\n ...(props.vertical ? incrementAttrs : decrementAttrs),\n },\n bottom: {\n ...(!props.vertical ? incrementAttrs : decrementAttrs),\n },\n }\n})\n\nonUnmounted(() => {\n // Cleanup event listeners\n setMouseup('removeEventListener')\n})\n</script>\n\n<script lang=\"ts\">\nconst defaultValues = {\n min: 1,\n max: 100,\n step: 1,\n repeatDelay: 500,\n repeatInterval: 100,\n repeatThreshold: 10,\n repeatMultiplier: 4,\n} as const\n</script>\n"],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  require("./chunk-CoQrYLCe.js");
2
2
  const require_dist = require("./dist-B_c893QG.js");
3
3
  const require_dom = require("./dom-Bs6DzM72.js");
4
- const require_useId = require("./useId-DTrBK9CE.js");
5
- const require_useDefaults = require("./useDefaults-DK6Y9lar.js");
6
- const require_constants = require("./constants-DMR5FAE3.js");
7
- const require_useRtl = require("./useRtl-BlPLBmTe.js");
4
+ const require_useDefaults = require("./useDefaults-DsLf4iRY.js");
5
+ const require_useId = require("./useId-DHrBgM7P.js");
6
+ const require_constants = require("./constants-hccBP09R.js");
7
+ const require_useRtl = require("./useRtl-DWO9pKff.js");
8
8
  let vue = require("vue");
9
9
  //#region src/components/BFormSpinbutton/BFormSpinbutton.vue?vue&type=script&setup=true&lang.ts
10
10
  var _hoisted_1 = [
@@ -444,4 +444,4 @@ Object.defineProperty(exports, "BFormSpinbutton_default", {
444
444
  }
445
445
  });
446
446
 
447
- //# sourceMappingURL=BFormSpinbutton-DzJ071Gz.js.map
447
+ //# sourceMappingURL=BFormSpinbutton-Dix9U_c1.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BFormSpinbutton-DzJ071Gz.js","names":[],"sources":["../src/components/BFormSpinbutton/BFormSpinbutton.vue","../src/components/BFormSpinbutton/BFormSpinbutton.vue"],"sourcesContent":["<template>\n <div\n ref=\"_element\"\n class=\"b-form-spinbutton form-control\"\n :class=\"computedClasses\"\n role=\"group\"\n :lang=\"computedLocale\"\n :tabindex=\"props.disabled ? undefined : '-1'\"\n :title=\"props.ariaLabel\"\n @click=\"focused = true\"\n >\n <!-- eslint-disable-next-line prettier/prettier -->\n <!-- prettier-ignore -->\n <slot :name=\"(buttons.top.slot.name as 'increment' | 'decrement')\" :has-focus=\"focused\">\n <button\n v-bind=\"buttons.top.button\"\n @mousedown=\"buttons.top.handler\"\n @touchstart=\"buttons.top.handler\"\n >\n <svg v-bind=\"buttons.top.svg\">\n <path v-bind=\"buttons.top.path\" />\n </svg>\n </button>\n </slot>\n <input\n v-if=\"props.name && !props.disabled\"\n key=\"hidden\"\n type=\"hidden\"\n :name=\"props.name\"\n :form=\"props.form\"\n :value=\"valueAsFixed\"\n />\n <output\n :id=\"computedId\"\n key=\"output\"\n class=\"flex-grow-1\"\n :class=\"computedSpinClasses\"\n :dir=\"(isRtl ?? false) ? 'rtl' : 'ltr'\"\n :tabindex=\"props.disabled ? undefined : '0'\"\n role=\"spinbutton\"\n aria-live=\"off\"\n :aria-label=\"props.ariaLabel || undefined\"\n :aria-invalid=\"\n props.state === false || (!modelValue !== null && props.required) ? true : undefined\n \"\n :aria-required=\"props.required ? true : undefined\"\n :aria-valuemin=\"computedMin\"\n :aria-valuemax=\"computedMax\"\n :aria-valuenow=\"modelValue !== null ? modelValue : undefined\"\n :aria-valuetext=\"modelValue !== null ? computedFormatter(modelValue) : undefined\"\n >\n <bdi>\n {{ (modelValue !== null ? computedFormatter(modelValue) : props.placeholder) || '' }}\n </bdi>\n </output>\n <!-- eslint-disable-next-line prettier/prettier -->\n <!-- prettier-ignore -->\n <slot :name=\"(buttons.bottom.slot.name as 'increment' | 'decrement')\" :has-focus=\"focused\">\n <button\n v-bind=\"buttons.bottom.button\"\n @mousedown=\"buttons.bottom.handler\"\n @touchstart=\"buttons.bottom.handler\"\n >\n <svg v-bind=\"buttons.bottom.svg\">\n <path v-bind=\"buttons.bottom.path\" />\n </svg>\n </button>\n </slot>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, onUnmounted, useTemplateRef} from 'vue'\nimport {\n CODE_DOWN,\n CODE_END,\n CODE_HOME,\n CODE_PAGEDOWN,\n CODE_PAGEUP,\n CODE_UP,\n} from '../../utils/constants'\nimport {onKeyStroke, useFocus, useToNumber} from '@vueuse/core'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport {useRtl} from '../../composables/useRtl'\nimport type {\n BFormSpinbuttonEmits,\n BFormSpinbuttonSlots,\n BFormSpinbuttonProps,\n ButtonType,\n} from '../../types'\nimport {getSafeDocument} from '../../utils/dom'\n\nconst KEY_CODES = [CODE_UP, CODE_DOWN, CODE_HOME, CODE_END, CODE_PAGEUP, CODE_PAGEDOWN]\n\nconst _props = withDefaults(defineProps<Omit<BFormSpinbuttonProps, 'modelValue'>>(), {\n ariaControls: undefined,\n ariaLabel: undefined,\n disabled: false,\n form: undefined,\n formatterFn: undefined,\n id: undefined,\n inline: false,\n labelDecrement: 'Decrement',\n labelIncrement: 'Increment',\n locale: undefined,\n max: defaultValues.max,\n min: defaultValues.min,\n name: undefined,\n placeholder: undefined,\n readonly: false,\n repeatDelay: defaultValues.repeatDelay,\n repeatInterval: defaultValues.repeatInterval,\n repeatStepMultiplier: defaultValues.repeatMultiplier,\n repeatThreshold: defaultValues.repeatThreshold,\n required: false,\n size: undefined,\n state: null,\n step: defaultValues.step,\n vertical: false,\n wrap: false,\n})\nconst props = useDefaults(_props, 'BFormSpinbutton')\nconst emit = defineEmits<BFormSpinbuttonEmits>()\ndefineSlots<BFormSpinbuttonSlots>()\n\nconst modelValue = defineModel<Exclude<BFormSpinbuttonProps['modelValue'], undefined>>({\n default: null,\n})\n\nconst element = useTemplateRef('_element')\n\nconst {focused} = useFocus(element)\n\nconst computedId = useId(() => props.id, 'spinbutton')\n\nconst computedClasses = computed(() => ({\n 'disabled': props.disabled,\n 'readonly': props.readonly,\n 'focus': focused.value,\n 'd-inline-flex': props.inline || props.vertical,\n 'd-flex': !props.inline && !props.vertical,\n 'align-items-stretch': !props.vertical,\n 'flex-column': props.vertical,\n [`form-control-${props.size}`]: props.size !== undefined,\n}))\n\nconst computedSpinClasses = computed(() => ({\n 'd-flex': props.vertical,\n 'align-self-center': !props.vertical,\n 'align-items-center': props.vertical,\n 'border-top': props.vertical,\n 'border-bottom': props.vertical,\n 'border-start': !props.vertical,\n 'border-end': !props.vertical,\n}))\n\n//non reactive properties\nlet $_autoDelayTimer: ReturnType<typeof setTimeout> | undefined\nlet $_autoRepeatTimer: ReturnType<typeof setTimeout> | undefined\nlet $_keyIsDown = false\n\n// const computedInline = computed(() => props.inline && !props.vertical)\n\n// const computedReadonly = computed(() => props.readonly && !props.disabled)\n\nconst stepNumber = useToNumber(() => props.step)\nconst computedStep = computed(() =>\n Number.isNaN(stepNumber.value) ? defaultValues.step : stepNumber.value\n)\n\nconst minNumber = useToNumber(() => props.min)\nconst computedMin = computed(() =>\n Number.isNaN(minNumber.value) ? defaultValues.min : minNumber.value\n)\n\nconst maxNumber = useToNumber(() => props.max)\nconst computedMax = computed(() => {\n const step = computedStep.value\n const min = computedMin.value\n return Math.floor((maxNumber.value - min) / step) * step + min\n})\n\nconst repeatDelayNumber = useToNumber(() => props.repeatDelay, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedDelay = computed(() =>\n repeatDelayNumber.value > 0 ? repeatDelayNumber.value : defaultValues.repeatDelay\n)\n\nconst repeatIntervalNumber = useToNumber(() => props.repeatInterval, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedInterval = computed(() =>\n repeatIntervalNumber.value > 0 ? repeatIntervalNumber.value : defaultValues.repeatInterval\n)\n\nconst repeatThresholdNumber = useToNumber(() => props.repeatThreshold, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedThreshold = computed(() =>\n Math.max(\n Number.isNaN(repeatThresholdNumber.value)\n ? defaultValues.repeatThreshold\n : repeatThresholdNumber.value,\n 1\n )\n)\n\nconst repeatStepMultiplierNumber = useToNumber(() => props.repeatStepMultiplier, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedStepMultiplier = computed(() =>\n Math.max(\n Number.isNaN(repeatStepMultiplierNumber.value)\n ? defaultValues.repeatMultiplier\n : repeatStepMultiplierNumber.value,\n 1\n )\n)\n\nconst computedPrecision = computed(() => {\n const step = computedStep.value\n return Math.floor(step) === step ? 0 : (step.toString().split('.')[1] || '').length\n})\n\nconst computedMultiplier = computed(() => Math.pow(10, computedPrecision.value || 0))\n\nconst valueAsFixed = computed(() =>\n modelValue.value === null ? '' : modelValue.value.toFixed(computedPrecision.value)\n)\n\nconst {isRtl, locale: globalLocale} = useRtl()\n\nconst computedLocale = computed(() => {\n const loc = (props.locale ?? globalLocale?.value) || 'locale'\n const locales = [loc]\n const nf = new Intl.NumberFormat(locales)\n return nf.resolvedOptions().locale\n})\n\nconst defaultFormatter = () =>\n new Intl.NumberFormat(computedLocale.value, {\n style: 'decimal',\n useGrouping: false,\n minimumIntegerDigits: 1,\n minimumFractionDigits: computedPrecision.value,\n maximumFractionDigits: computedPrecision.value,\n notation: 'standard',\n }).format\n\nconst computedFormatter = computed(() => props.formatterFn ?? defaultFormatter())\n\nconst stepValue = (direction: number) => {\n // Sets a new incremented or decremented value, supporting optional wrapping\n // Direction is either +1 or -1 (or a multiple thereof)\n let {value} = modelValue\n if (!props.disabled && value !== null) {\n const step = computedStep.value * direction\n const min = computedMin.value\n const max = computedMax.value\n const multiplier = computedMultiplier.value\n const {wrap} = props\n // We ensure that the value steps like a native input\n value = Math.round((value - min) / step) * step + min + step\n // We ensure that precision is maintained (decimals)\n value = Math.round(value * multiplier) / multiplier\n // Handle if wrapping is enabled\n modelValue.value = value > max ? (wrap ? min : max) : value < min ? (wrap ? max : min) : value\n }\n}\n\nconst stepUp = (multiplier = 1) => {\n if (modelValue.value === null) {\n modelValue.value = computedMin.value\n return\n }\n stepValue(+1 * multiplier)\n}\n\nconst stepDown = (multiplier = 1) => {\n if (modelValue.value === null) {\n modelValue.value = props.wrap ? computedMax.value : computedMin.value\n return\n }\n stepValue(-1 * multiplier)\n}\n\nconst stopEvent = (event: Readonly<Event>) => {\n event.preventDefault()\n event.stopImmediatePropagation()\n}\n\nonKeyStroke(\n KEY_CODES,\n (event) => {\n const {code, altKey, ctrlKey, metaKey} = event\n\n if (props.disabled || props.readonly || altKey || ctrlKey || metaKey) return\n\n // https://w3c.github.io/aria-practices/#spinbutton\n stopEvent(event)\n if ($_keyIsDown) {\n // Keypress is already in progress\n return\n }\n\n resetTimers()\n if ([CODE_UP, CODE_DOWN].includes(code)) {\n // The following use the custom auto-repeat handling\n\n $_keyIsDown = true\n if (code === CODE_UP) {\n handleStepRepeat(event, stepUp)\n return\n }\n if (code === CODE_DOWN) {\n handleStepRepeat(event, stepDown)\n }\n return\n }\n // These use native OS key repeating\n if (code === CODE_PAGEUP) {\n stepUp(computedStepMultiplier.value)\n return\n }\n if (code === CODE_PAGEDOWN) {\n stepDown(computedStepMultiplier.value)\n return\n }\n if (code === CODE_HOME) {\n modelValue.value = computedMin.value\n return\n }\n if (code === CODE_END) {\n modelValue.value = computedMax.value\n }\n },\n {target: element, eventName: 'keydown'}\n)\n\nonKeyStroke(\n KEY_CODES,\n (event: Readonly<KeyboardEvent>) => {\n // Emit a change event when the keyup happens\n\n const {altKey, ctrlKey, metaKey} = event\n\n if (props.disabled || props.readonly || altKey || ctrlKey || metaKey) return\n\n stopEvent(event)\n resetTimers()\n $_keyIsDown = false\n emit('change', modelValue.value)\n },\n {target: element, eventName: 'keyup'}\n)\n\n// takes in a mount or Keyboard Event\nconst handleStepRepeat = (event: Readonly<Event>, stepper: (step: number) => void) => {\n const {type} = event || {}\n\n if (!props.disabled && !props.readonly) {\n if (isMouseEvent(event)) {\n // We only respond to left (main === 0) button clicks\n if (type === 'mousedown' && event.button) return\n }\n resetTimers()\n // Step the counter initially\n stepper(1)\n const threshold = computedThreshold.value\n const multiplier = computedStepMultiplier.value\n const delay = computedDelay.value\n const interval = computedInterval.value\n\n // Initiate the delay/repeat interval\n $_autoDelayTimer = setTimeout(() => {\n let count = 0\n $_autoRepeatTimer = setInterval(() => {\n // After N initial repeats, we increase the incrementing step amount\n // We do this to minimize screen reader announcements of the value\n // (values are announced every change, which can be chatty for SR users)\n // And to make it easer to select a value when the range is large\n stepper(count < threshold ? 1 : multiplier)\n count++\n }, interval)\n }, delay)\n }\n}\n\nconst isMouseEvent = (evt: Readonly<Event>): evt is MouseEvent =>\n evt.type === 'mouseup' || evt.type === 'mousedown'\n\nconst onMouseup: EventListener = (event: Readonly<Event>) => {\n // `<body>` listener, only enabled when mousedown starts\n\n if (isMouseEvent(event)) {\n if (event.type === 'mouseup' && event.button) {\n // Ignore non left button (main === 0) mouse button click\n return\n }\n }\n\n stopEvent(event)\n resetTimers()\n setMouseup('removeEventListener')\n // Trigger the change event\n emit('change', modelValue.value)\n}\n\nconst setMouseup = (operation: 'addEventListener' | 'removeEventListener') => {\n const doc = getSafeDocument()\n if (doc === null) return\n\n if (operation === 'addEventListener') {\n doc.body.addEventListener('mouseup', onMouseup)\n doc.body.addEventListener('touchend', onMouseup, {passive: false})\n } else {\n doc.body.removeEventListener('mouseup', onMouseup)\n doc.body.removeEventListener('touchend', onMouseup)\n }\n}\nconst resetTimers = () => {\n clearTimeout($_autoDelayTimer)\n clearInterval($_autoRepeatTimer)\n $_autoDelayTimer = undefined\n $_autoRepeatTimer = undefined\n}\n\nconst buttons = computed(() => {\n const incrementSvgAttrs = {\n svg: {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '16',\n height: '16',\n fill: 'currentColor',\n class: 'bi bi-plus',\n viewBox: '0 0 16 16',\n },\n path: {\n d: 'M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z',\n },\n } as const\n\n const decrementSvgAttrs = {\n svg: {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '16',\n height: '16',\n fill: 'currentColor',\n class: 'bi bi-dash',\n viewBox: '0 0 16 16',\n },\n path: {d: 'M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z'},\n } as const\n\n const sharedButtonAttrs = {\n 'class': [{'py-0': !props.vertical}, 'btn', 'btn-sm', 'border-0', 'rounded-0'],\n 'tabindex': '-1',\n 'type': 'button' as ButtonType,\n 'disabled': props.disabled || props.readonly,\n 'aria-disabled': props.disabled || props.readonly ? true : undefined,\n 'aria-controls': computedId.value,\n }\n\n const sharedSvgAttrs = {\n 'aria-hidden': true,\n 'scale': focused.value ? 1.5 : 1.25,\n }\n\n const handler = (event: Readonly<Event>, stepper: (multiplier?: number) => void) => {\n if (!props.disabled && !props.readonly) {\n stopEvent(event)\n setMouseup('addEventListener')\n // Since we `preventDefault()`, we must manually focus the button\n // Though it's likely captured from the element click focus\n focused.value = true\n handleStepRepeat(event, stepper)\n }\n }\n\n const incrementAttrs = {\n button: {\n ...sharedButtonAttrs,\n 'aria-label': props.labelIncrement || undefined,\n 'aria-keyshortcuts': 'ArrowUp',\n },\n svg: {\n ...sharedSvgAttrs,\n ...incrementSvgAttrs.svg,\n },\n path: {\n ...incrementSvgAttrs.path,\n },\n slot: {\n name: 'increment',\n },\n handler: (e: Event) => handler(e, stepUp),\n }\n\n const decrementAttrs = {\n button: {\n ...sharedButtonAttrs,\n 'aria-label': props.labelDecrement || undefined,\n 'aria-keyshortcuts': 'ArrowDown',\n },\n svg: {\n ...sharedSvgAttrs,\n ...decrementSvgAttrs.svg,\n },\n path: {\n ...decrementSvgAttrs.path,\n },\n slot: {\n name: 'decrement',\n },\n handler: (e: Readonly<Event>) => handler(e, stepDown),\n }\n\n return {\n top: {\n ...(props.vertical ? incrementAttrs : decrementAttrs),\n },\n bottom: {\n ...(!props.vertical ? incrementAttrs : decrementAttrs),\n },\n }\n})\n\nonUnmounted(() => {\n // Cleanup event listeners\n setMouseup('removeEventListener')\n})\n</script>\n\n<script lang=\"ts\">\nconst defaultValues = {\n min: 1,\n max: 100,\n step: 1,\n repeatDelay: 500,\n repeatInterval: 100,\n repeatThreshold: 10,\n repeatMultiplier: 4,\n} as const\n</script>\n","<template>\n <div\n ref=\"_element\"\n class=\"b-form-spinbutton form-control\"\n :class=\"computedClasses\"\n role=\"group\"\n :lang=\"computedLocale\"\n :tabindex=\"props.disabled ? undefined : '-1'\"\n :title=\"props.ariaLabel\"\n @click=\"focused = true\"\n >\n <!-- eslint-disable-next-line prettier/prettier -->\n <!-- prettier-ignore -->\n <slot :name=\"(buttons.top.slot.name as 'increment' | 'decrement')\" :has-focus=\"focused\">\n <button\n v-bind=\"buttons.top.button\"\n @mousedown=\"buttons.top.handler\"\n @touchstart=\"buttons.top.handler\"\n >\n <svg v-bind=\"buttons.top.svg\">\n <path v-bind=\"buttons.top.path\" />\n </svg>\n </button>\n </slot>\n <input\n v-if=\"props.name && !props.disabled\"\n key=\"hidden\"\n type=\"hidden\"\n :name=\"props.name\"\n :form=\"props.form\"\n :value=\"valueAsFixed\"\n />\n <output\n :id=\"computedId\"\n key=\"output\"\n class=\"flex-grow-1\"\n :class=\"computedSpinClasses\"\n :dir=\"(isRtl ?? false) ? 'rtl' : 'ltr'\"\n :tabindex=\"props.disabled ? undefined : '0'\"\n role=\"spinbutton\"\n aria-live=\"off\"\n :aria-label=\"props.ariaLabel || undefined\"\n :aria-invalid=\"\n props.state === false || (!modelValue !== null && props.required) ? true : undefined\n \"\n :aria-required=\"props.required ? true : undefined\"\n :aria-valuemin=\"computedMin\"\n :aria-valuemax=\"computedMax\"\n :aria-valuenow=\"modelValue !== null ? modelValue : undefined\"\n :aria-valuetext=\"modelValue !== null ? computedFormatter(modelValue) : undefined\"\n >\n <bdi>\n {{ (modelValue !== null ? computedFormatter(modelValue) : props.placeholder) || '' }}\n </bdi>\n </output>\n <!-- eslint-disable-next-line prettier/prettier -->\n <!-- prettier-ignore -->\n <slot :name=\"(buttons.bottom.slot.name as 'increment' | 'decrement')\" :has-focus=\"focused\">\n <button\n v-bind=\"buttons.bottom.button\"\n @mousedown=\"buttons.bottom.handler\"\n @touchstart=\"buttons.bottom.handler\"\n >\n <svg v-bind=\"buttons.bottom.svg\">\n <path v-bind=\"buttons.bottom.path\" />\n </svg>\n </button>\n </slot>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, onUnmounted, useTemplateRef} from 'vue'\nimport {\n CODE_DOWN,\n CODE_END,\n CODE_HOME,\n CODE_PAGEDOWN,\n CODE_PAGEUP,\n CODE_UP,\n} from '../../utils/constants'\nimport {onKeyStroke, useFocus, useToNumber} from '@vueuse/core'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport {useRtl} from '../../composables/useRtl'\nimport type {\n BFormSpinbuttonEmits,\n BFormSpinbuttonSlots,\n BFormSpinbuttonProps,\n ButtonType,\n} from '../../types'\nimport {getSafeDocument} from '../../utils/dom'\n\nconst KEY_CODES = [CODE_UP, CODE_DOWN, CODE_HOME, CODE_END, CODE_PAGEUP, CODE_PAGEDOWN]\n\nconst _props = withDefaults(defineProps<Omit<BFormSpinbuttonProps, 'modelValue'>>(), {\n ariaControls: undefined,\n ariaLabel: undefined,\n disabled: false,\n form: undefined,\n formatterFn: undefined,\n id: undefined,\n inline: false,\n labelDecrement: 'Decrement',\n labelIncrement: 'Increment',\n locale: undefined,\n max: defaultValues.max,\n min: defaultValues.min,\n name: undefined,\n placeholder: undefined,\n readonly: false,\n repeatDelay: defaultValues.repeatDelay,\n repeatInterval: defaultValues.repeatInterval,\n repeatStepMultiplier: defaultValues.repeatMultiplier,\n repeatThreshold: defaultValues.repeatThreshold,\n required: false,\n size: undefined,\n state: null,\n step: defaultValues.step,\n vertical: false,\n wrap: false,\n})\nconst props = useDefaults(_props, 'BFormSpinbutton')\nconst emit = defineEmits<BFormSpinbuttonEmits>()\ndefineSlots<BFormSpinbuttonSlots>()\n\nconst modelValue = defineModel<Exclude<BFormSpinbuttonProps['modelValue'], undefined>>({\n default: null,\n})\n\nconst element = useTemplateRef('_element')\n\nconst {focused} = useFocus(element)\n\nconst computedId = useId(() => props.id, 'spinbutton')\n\nconst computedClasses = computed(() => ({\n 'disabled': props.disabled,\n 'readonly': props.readonly,\n 'focus': focused.value,\n 'd-inline-flex': props.inline || props.vertical,\n 'd-flex': !props.inline && !props.vertical,\n 'align-items-stretch': !props.vertical,\n 'flex-column': props.vertical,\n [`form-control-${props.size}`]: props.size !== undefined,\n}))\n\nconst computedSpinClasses = computed(() => ({\n 'd-flex': props.vertical,\n 'align-self-center': !props.vertical,\n 'align-items-center': props.vertical,\n 'border-top': props.vertical,\n 'border-bottom': props.vertical,\n 'border-start': !props.vertical,\n 'border-end': !props.vertical,\n}))\n\n//non reactive properties\nlet $_autoDelayTimer: ReturnType<typeof setTimeout> | undefined\nlet $_autoRepeatTimer: ReturnType<typeof setTimeout> | undefined\nlet $_keyIsDown = false\n\n// const computedInline = computed(() => props.inline && !props.vertical)\n\n// const computedReadonly = computed(() => props.readonly && !props.disabled)\n\nconst stepNumber = useToNumber(() => props.step)\nconst computedStep = computed(() =>\n Number.isNaN(stepNumber.value) ? defaultValues.step : stepNumber.value\n)\n\nconst minNumber = useToNumber(() => props.min)\nconst computedMin = computed(() =>\n Number.isNaN(minNumber.value) ? defaultValues.min : minNumber.value\n)\n\nconst maxNumber = useToNumber(() => props.max)\nconst computedMax = computed(() => {\n const step = computedStep.value\n const min = computedMin.value\n return Math.floor((maxNumber.value - min) / step) * step + min\n})\n\nconst repeatDelayNumber = useToNumber(() => props.repeatDelay, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedDelay = computed(() =>\n repeatDelayNumber.value > 0 ? repeatDelayNumber.value : defaultValues.repeatDelay\n)\n\nconst repeatIntervalNumber = useToNumber(() => props.repeatInterval, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedInterval = computed(() =>\n repeatIntervalNumber.value > 0 ? repeatIntervalNumber.value : defaultValues.repeatInterval\n)\n\nconst repeatThresholdNumber = useToNumber(() => props.repeatThreshold, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedThreshold = computed(() =>\n Math.max(\n Number.isNaN(repeatThresholdNumber.value)\n ? defaultValues.repeatThreshold\n : repeatThresholdNumber.value,\n 1\n )\n)\n\nconst repeatStepMultiplierNumber = useToNumber(() => props.repeatStepMultiplier, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedStepMultiplier = computed(() =>\n Math.max(\n Number.isNaN(repeatStepMultiplierNumber.value)\n ? defaultValues.repeatMultiplier\n : repeatStepMultiplierNumber.value,\n 1\n )\n)\n\nconst computedPrecision = computed(() => {\n const step = computedStep.value\n return Math.floor(step) === step ? 0 : (step.toString().split('.')[1] || '').length\n})\n\nconst computedMultiplier = computed(() => Math.pow(10, computedPrecision.value || 0))\n\nconst valueAsFixed = computed(() =>\n modelValue.value === null ? '' : modelValue.value.toFixed(computedPrecision.value)\n)\n\nconst {isRtl, locale: globalLocale} = useRtl()\n\nconst computedLocale = computed(() => {\n const loc = (props.locale ?? globalLocale?.value) || 'locale'\n const locales = [loc]\n const nf = new Intl.NumberFormat(locales)\n return nf.resolvedOptions().locale\n})\n\nconst defaultFormatter = () =>\n new Intl.NumberFormat(computedLocale.value, {\n style: 'decimal',\n useGrouping: false,\n minimumIntegerDigits: 1,\n minimumFractionDigits: computedPrecision.value,\n maximumFractionDigits: computedPrecision.value,\n notation: 'standard',\n }).format\n\nconst computedFormatter = computed(() => props.formatterFn ?? defaultFormatter())\n\nconst stepValue = (direction: number) => {\n // Sets a new incremented or decremented value, supporting optional wrapping\n // Direction is either +1 or -1 (or a multiple thereof)\n let {value} = modelValue\n if (!props.disabled && value !== null) {\n const step = computedStep.value * direction\n const min = computedMin.value\n const max = computedMax.value\n const multiplier = computedMultiplier.value\n const {wrap} = props\n // We ensure that the value steps like a native input\n value = Math.round((value - min) / step) * step + min + step\n // We ensure that precision is maintained (decimals)\n value = Math.round(value * multiplier) / multiplier\n // Handle if wrapping is enabled\n modelValue.value = value > max ? (wrap ? min : max) : value < min ? (wrap ? max : min) : value\n }\n}\n\nconst stepUp = (multiplier = 1) => {\n if (modelValue.value === null) {\n modelValue.value = computedMin.value\n return\n }\n stepValue(+1 * multiplier)\n}\n\nconst stepDown = (multiplier = 1) => {\n if (modelValue.value === null) {\n modelValue.value = props.wrap ? computedMax.value : computedMin.value\n return\n }\n stepValue(-1 * multiplier)\n}\n\nconst stopEvent = (event: Readonly<Event>) => {\n event.preventDefault()\n event.stopImmediatePropagation()\n}\n\nonKeyStroke(\n KEY_CODES,\n (event) => {\n const {code, altKey, ctrlKey, metaKey} = event\n\n if (props.disabled || props.readonly || altKey || ctrlKey || metaKey) return\n\n // https://w3c.github.io/aria-practices/#spinbutton\n stopEvent(event)\n if ($_keyIsDown) {\n // Keypress is already in progress\n return\n }\n\n resetTimers()\n if ([CODE_UP, CODE_DOWN].includes(code)) {\n // The following use the custom auto-repeat handling\n\n $_keyIsDown = true\n if (code === CODE_UP) {\n handleStepRepeat(event, stepUp)\n return\n }\n if (code === CODE_DOWN) {\n handleStepRepeat(event, stepDown)\n }\n return\n }\n // These use native OS key repeating\n if (code === CODE_PAGEUP) {\n stepUp(computedStepMultiplier.value)\n return\n }\n if (code === CODE_PAGEDOWN) {\n stepDown(computedStepMultiplier.value)\n return\n }\n if (code === CODE_HOME) {\n modelValue.value = computedMin.value\n return\n }\n if (code === CODE_END) {\n modelValue.value = computedMax.value\n }\n },\n {target: element, eventName: 'keydown'}\n)\n\nonKeyStroke(\n KEY_CODES,\n (event: Readonly<KeyboardEvent>) => {\n // Emit a change event when the keyup happens\n\n const {altKey, ctrlKey, metaKey} = event\n\n if (props.disabled || props.readonly || altKey || ctrlKey || metaKey) return\n\n stopEvent(event)\n resetTimers()\n $_keyIsDown = false\n emit('change', modelValue.value)\n },\n {target: element, eventName: 'keyup'}\n)\n\n// takes in a mount or Keyboard Event\nconst handleStepRepeat = (event: Readonly<Event>, stepper: (step: number) => void) => {\n const {type} = event || {}\n\n if (!props.disabled && !props.readonly) {\n if (isMouseEvent(event)) {\n // We only respond to left (main === 0) button clicks\n if (type === 'mousedown' && event.button) return\n }\n resetTimers()\n // Step the counter initially\n stepper(1)\n const threshold = computedThreshold.value\n const multiplier = computedStepMultiplier.value\n const delay = computedDelay.value\n const interval = computedInterval.value\n\n // Initiate the delay/repeat interval\n $_autoDelayTimer = setTimeout(() => {\n let count = 0\n $_autoRepeatTimer = setInterval(() => {\n // After N initial repeats, we increase the incrementing step amount\n // We do this to minimize screen reader announcements of the value\n // (values are announced every change, which can be chatty for SR users)\n // And to make it easer to select a value when the range is large\n stepper(count < threshold ? 1 : multiplier)\n count++\n }, interval)\n }, delay)\n }\n}\n\nconst isMouseEvent = (evt: Readonly<Event>): evt is MouseEvent =>\n evt.type === 'mouseup' || evt.type === 'mousedown'\n\nconst onMouseup: EventListener = (event: Readonly<Event>) => {\n // `<body>` listener, only enabled when mousedown starts\n\n if (isMouseEvent(event)) {\n if (event.type === 'mouseup' && event.button) {\n // Ignore non left button (main === 0) mouse button click\n return\n }\n }\n\n stopEvent(event)\n resetTimers()\n setMouseup('removeEventListener')\n // Trigger the change event\n emit('change', modelValue.value)\n}\n\nconst setMouseup = (operation: 'addEventListener' | 'removeEventListener') => {\n const doc = getSafeDocument()\n if (doc === null) return\n\n if (operation === 'addEventListener') {\n doc.body.addEventListener('mouseup', onMouseup)\n doc.body.addEventListener('touchend', onMouseup, {passive: false})\n } else {\n doc.body.removeEventListener('mouseup', onMouseup)\n doc.body.removeEventListener('touchend', onMouseup)\n }\n}\nconst resetTimers = () => {\n clearTimeout($_autoDelayTimer)\n clearInterval($_autoRepeatTimer)\n $_autoDelayTimer = undefined\n $_autoRepeatTimer = undefined\n}\n\nconst buttons = computed(() => {\n const incrementSvgAttrs = {\n svg: {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '16',\n height: '16',\n fill: 'currentColor',\n class: 'bi bi-plus',\n viewBox: '0 0 16 16',\n },\n path: {\n d: 'M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z',\n },\n } as const\n\n const decrementSvgAttrs = {\n svg: {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '16',\n height: '16',\n fill: 'currentColor',\n class: 'bi bi-dash',\n viewBox: '0 0 16 16',\n },\n path: {d: 'M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z'},\n } as const\n\n const sharedButtonAttrs = {\n 'class': [{'py-0': !props.vertical}, 'btn', 'btn-sm', 'border-0', 'rounded-0'],\n 'tabindex': '-1',\n 'type': 'button' as ButtonType,\n 'disabled': props.disabled || props.readonly,\n 'aria-disabled': props.disabled || props.readonly ? true : undefined,\n 'aria-controls': computedId.value,\n }\n\n const sharedSvgAttrs = {\n 'aria-hidden': true,\n 'scale': focused.value ? 1.5 : 1.25,\n }\n\n const handler = (event: Readonly<Event>, stepper: (multiplier?: number) => void) => {\n if (!props.disabled && !props.readonly) {\n stopEvent(event)\n setMouseup('addEventListener')\n // Since we `preventDefault()`, we must manually focus the button\n // Though it's likely captured from the element click focus\n focused.value = true\n handleStepRepeat(event, stepper)\n }\n }\n\n const incrementAttrs = {\n button: {\n ...sharedButtonAttrs,\n 'aria-label': props.labelIncrement || undefined,\n 'aria-keyshortcuts': 'ArrowUp',\n },\n svg: {\n ...sharedSvgAttrs,\n ...incrementSvgAttrs.svg,\n },\n path: {\n ...incrementSvgAttrs.path,\n },\n slot: {\n name: 'increment',\n },\n handler: (e: Event) => handler(e, stepUp),\n }\n\n const decrementAttrs = {\n button: {\n ...sharedButtonAttrs,\n 'aria-label': props.labelDecrement || undefined,\n 'aria-keyshortcuts': 'ArrowDown',\n },\n svg: {\n ...sharedSvgAttrs,\n ...decrementSvgAttrs.svg,\n },\n path: {\n ...decrementSvgAttrs.path,\n },\n slot: {\n name: 'decrement',\n },\n handler: (e: Readonly<Event>) => handler(e, stepDown),\n }\n\n return {\n top: {\n ...(props.vertical ? incrementAttrs : decrementAttrs),\n },\n bottom: {\n ...(!props.vertical ? incrementAttrs : decrementAttrs),\n },\n }\n})\n\nonUnmounted(() => {\n // Cleanup event listeners\n setMouseup('removeEventListener')\n})\n</script>\n\n<script lang=\"ts\">\nconst defaultValues = {\n min: 1,\n max: 100,\n step: 1,\n repeatDelay: 500,\n repeatInterval: 100,\n repeatThreshold: 10,\n repeatMultiplier: 4,\n} as const\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"BFormSpinbutton-Dix9U_c1.js","names":[],"sources":["../src/components/BFormSpinbutton/BFormSpinbutton.vue","../src/components/BFormSpinbutton/BFormSpinbutton.vue"],"sourcesContent":["<template>\n <div\n ref=\"_element\"\n class=\"b-form-spinbutton form-control\"\n :class=\"computedClasses\"\n role=\"group\"\n :lang=\"computedLocale\"\n :tabindex=\"props.disabled ? undefined : '-1'\"\n :title=\"props.ariaLabel\"\n @click=\"focused = true\"\n >\n <!-- eslint-disable-next-line prettier/prettier -->\n <!-- prettier-ignore -->\n <slot :name=\"(buttons.top.slot.name as 'increment' | 'decrement')\" :has-focus=\"focused\">\n <button\n v-bind=\"buttons.top.button\"\n @mousedown=\"buttons.top.handler\"\n @touchstart=\"buttons.top.handler\"\n >\n <svg v-bind=\"buttons.top.svg\">\n <path v-bind=\"buttons.top.path\" />\n </svg>\n </button>\n </slot>\n <input\n v-if=\"props.name && !props.disabled\"\n key=\"hidden\"\n type=\"hidden\"\n :name=\"props.name\"\n :form=\"props.form\"\n :value=\"valueAsFixed\"\n />\n <output\n :id=\"computedId\"\n key=\"output\"\n class=\"flex-grow-1\"\n :class=\"computedSpinClasses\"\n :dir=\"(isRtl ?? false) ? 'rtl' : 'ltr'\"\n :tabindex=\"props.disabled ? undefined : '0'\"\n role=\"spinbutton\"\n aria-live=\"off\"\n :aria-label=\"props.ariaLabel || undefined\"\n :aria-invalid=\"\n props.state === false || (!modelValue !== null && props.required) ? true : undefined\n \"\n :aria-required=\"props.required ? true : undefined\"\n :aria-valuemin=\"computedMin\"\n :aria-valuemax=\"computedMax\"\n :aria-valuenow=\"modelValue !== null ? modelValue : undefined\"\n :aria-valuetext=\"modelValue !== null ? computedFormatter(modelValue) : undefined\"\n >\n <bdi>\n {{ (modelValue !== null ? computedFormatter(modelValue) : props.placeholder) || '' }}\n </bdi>\n </output>\n <!-- eslint-disable-next-line prettier/prettier -->\n <!-- prettier-ignore -->\n <slot :name=\"(buttons.bottom.slot.name as 'increment' | 'decrement')\" :has-focus=\"focused\">\n <button\n v-bind=\"buttons.bottom.button\"\n @mousedown=\"buttons.bottom.handler\"\n @touchstart=\"buttons.bottom.handler\"\n >\n <svg v-bind=\"buttons.bottom.svg\">\n <path v-bind=\"buttons.bottom.path\" />\n </svg>\n </button>\n </slot>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, onUnmounted, useTemplateRef} from 'vue'\nimport {\n CODE_DOWN,\n CODE_END,\n CODE_HOME,\n CODE_PAGEDOWN,\n CODE_PAGEUP,\n CODE_UP,\n} from '../../utils/constants'\nimport {onKeyStroke, useFocus, useToNumber} from '@vueuse/core'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport {useRtl} from '../../composables/useRtl'\nimport type {\n BFormSpinbuttonEmits,\n BFormSpinbuttonSlots,\n BFormSpinbuttonProps,\n ButtonType,\n} from '../../types'\nimport {getSafeDocument} from '../../utils/dom'\n\nconst KEY_CODES = [CODE_UP, CODE_DOWN, CODE_HOME, CODE_END, CODE_PAGEUP, CODE_PAGEDOWN]\n\nconst _props = withDefaults(defineProps<Omit<BFormSpinbuttonProps, 'modelValue'>>(), {\n ariaControls: undefined,\n ariaLabel: undefined,\n disabled: false,\n form: undefined,\n formatterFn: undefined,\n id: undefined,\n inline: false,\n labelDecrement: 'Decrement',\n labelIncrement: 'Increment',\n locale: undefined,\n max: defaultValues.max,\n min: defaultValues.min,\n name: undefined,\n placeholder: undefined,\n readonly: false,\n repeatDelay: defaultValues.repeatDelay,\n repeatInterval: defaultValues.repeatInterval,\n repeatStepMultiplier: defaultValues.repeatMultiplier,\n repeatThreshold: defaultValues.repeatThreshold,\n required: false,\n size: undefined,\n state: null,\n step: defaultValues.step,\n vertical: false,\n wrap: false,\n})\nconst props = useDefaults(_props, 'BFormSpinbutton')\nconst emit = defineEmits<BFormSpinbuttonEmits>()\ndefineSlots<BFormSpinbuttonSlots>()\n\nconst modelValue = defineModel<Exclude<BFormSpinbuttonProps['modelValue'], undefined>>({\n default: null,\n})\n\nconst element = useTemplateRef('_element')\n\nconst {focused} = useFocus(element)\n\nconst computedId = useId(() => props.id, 'spinbutton')\n\nconst computedClasses = computed(() => ({\n 'disabled': props.disabled,\n 'readonly': props.readonly,\n 'focus': focused.value,\n 'd-inline-flex': props.inline || props.vertical,\n 'd-flex': !props.inline && !props.vertical,\n 'align-items-stretch': !props.vertical,\n 'flex-column': props.vertical,\n [`form-control-${props.size}`]: props.size !== undefined,\n}))\n\nconst computedSpinClasses = computed(() => ({\n 'd-flex': props.vertical,\n 'align-self-center': !props.vertical,\n 'align-items-center': props.vertical,\n 'border-top': props.vertical,\n 'border-bottom': props.vertical,\n 'border-start': !props.vertical,\n 'border-end': !props.vertical,\n}))\n\n//non reactive properties\nlet $_autoDelayTimer: ReturnType<typeof setTimeout> | undefined\nlet $_autoRepeatTimer: ReturnType<typeof setTimeout> | undefined\nlet $_keyIsDown = false\n\n// const computedInline = computed(() => props.inline && !props.vertical)\n\n// const computedReadonly = computed(() => props.readonly && !props.disabled)\n\nconst stepNumber = useToNumber(() => props.step)\nconst computedStep = computed(() =>\n Number.isNaN(stepNumber.value) ? defaultValues.step : stepNumber.value\n)\n\nconst minNumber = useToNumber(() => props.min)\nconst computedMin = computed(() =>\n Number.isNaN(minNumber.value) ? defaultValues.min : minNumber.value\n)\n\nconst maxNumber = useToNumber(() => props.max)\nconst computedMax = computed(() => {\n const step = computedStep.value\n const min = computedMin.value\n return Math.floor((maxNumber.value - min) / step) * step + min\n})\n\nconst repeatDelayNumber = useToNumber(() => props.repeatDelay, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedDelay = computed(() =>\n repeatDelayNumber.value > 0 ? repeatDelayNumber.value : defaultValues.repeatDelay\n)\n\nconst repeatIntervalNumber = useToNumber(() => props.repeatInterval, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedInterval = computed(() =>\n repeatIntervalNumber.value > 0 ? repeatIntervalNumber.value : defaultValues.repeatInterval\n)\n\nconst repeatThresholdNumber = useToNumber(() => props.repeatThreshold, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedThreshold = computed(() =>\n Math.max(\n Number.isNaN(repeatThresholdNumber.value)\n ? defaultValues.repeatThreshold\n : repeatThresholdNumber.value,\n 1\n )\n)\n\nconst repeatStepMultiplierNumber = useToNumber(() => props.repeatStepMultiplier, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedStepMultiplier = computed(() =>\n Math.max(\n Number.isNaN(repeatStepMultiplierNumber.value)\n ? defaultValues.repeatMultiplier\n : repeatStepMultiplierNumber.value,\n 1\n )\n)\n\nconst computedPrecision = computed(() => {\n const step = computedStep.value\n return Math.floor(step) === step ? 0 : (step.toString().split('.')[1] || '').length\n})\n\nconst computedMultiplier = computed(() => Math.pow(10, computedPrecision.value || 0))\n\nconst valueAsFixed = computed(() =>\n modelValue.value === null ? '' : modelValue.value.toFixed(computedPrecision.value)\n)\n\nconst {isRtl, locale: globalLocale} = useRtl()\n\nconst computedLocale = computed(() => {\n const loc = (props.locale ?? globalLocale?.value) || 'locale'\n const locales = [loc]\n const nf = new Intl.NumberFormat(locales)\n return nf.resolvedOptions().locale\n})\n\nconst defaultFormatter = () =>\n new Intl.NumberFormat(computedLocale.value, {\n style: 'decimal',\n useGrouping: false,\n minimumIntegerDigits: 1,\n minimumFractionDigits: computedPrecision.value,\n maximumFractionDigits: computedPrecision.value,\n notation: 'standard',\n }).format\n\nconst computedFormatter = computed(() => props.formatterFn ?? defaultFormatter())\n\nconst stepValue = (direction: number) => {\n // Sets a new incremented or decremented value, supporting optional wrapping\n // Direction is either +1 or -1 (or a multiple thereof)\n let {value} = modelValue\n if (!props.disabled && value !== null) {\n const step = computedStep.value * direction\n const min = computedMin.value\n const max = computedMax.value\n const multiplier = computedMultiplier.value\n const {wrap} = props\n // We ensure that the value steps like a native input\n value = Math.round((value - min) / step) * step + min + step\n // We ensure that precision is maintained (decimals)\n value = Math.round(value * multiplier) / multiplier\n // Handle if wrapping is enabled\n modelValue.value = value > max ? (wrap ? min : max) : value < min ? (wrap ? max : min) : value\n }\n}\n\nconst stepUp = (multiplier = 1) => {\n if (modelValue.value === null) {\n modelValue.value = computedMin.value\n return\n }\n stepValue(+1 * multiplier)\n}\n\nconst stepDown = (multiplier = 1) => {\n if (modelValue.value === null) {\n modelValue.value = props.wrap ? computedMax.value : computedMin.value\n return\n }\n stepValue(-1 * multiplier)\n}\n\nconst stopEvent = (event: Readonly<Event>) => {\n event.preventDefault()\n event.stopImmediatePropagation()\n}\n\nonKeyStroke(\n KEY_CODES,\n (event) => {\n const {code, altKey, ctrlKey, metaKey} = event\n\n if (props.disabled || props.readonly || altKey || ctrlKey || metaKey) return\n\n // https://w3c.github.io/aria-practices/#spinbutton\n stopEvent(event)\n if ($_keyIsDown) {\n // Keypress is already in progress\n return\n }\n\n resetTimers()\n if ([CODE_UP, CODE_DOWN].includes(code)) {\n // The following use the custom auto-repeat handling\n\n $_keyIsDown = true\n if (code === CODE_UP) {\n handleStepRepeat(event, stepUp)\n return\n }\n if (code === CODE_DOWN) {\n handleStepRepeat(event, stepDown)\n }\n return\n }\n // These use native OS key repeating\n if (code === CODE_PAGEUP) {\n stepUp(computedStepMultiplier.value)\n return\n }\n if (code === CODE_PAGEDOWN) {\n stepDown(computedStepMultiplier.value)\n return\n }\n if (code === CODE_HOME) {\n modelValue.value = computedMin.value\n return\n }\n if (code === CODE_END) {\n modelValue.value = computedMax.value\n }\n },\n {target: element, eventName: 'keydown'}\n)\n\nonKeyStroke(\n KEY_CODES,\n (event: Readonly<KeyboardEvent>) => {\n // Emit a change event when the keyup happens\n\n const {altKey, ctrlKey, metaKey} = event\n\n if (props.disabled || props.readonly || altKey || ctrlKey || metaKey) return\n\n stopEvent(event)\n resetTimers()\n $_keyIsDown = false\n emit('change', modelValue.value)\n },\n {target: element, eventName: 'keyup'}\n)\n\n// takes in a mount or Keyboard Event\nconst handleStepRepeat = (event: Readonly<Event>, stepper: (step: number) => void) => {\n const {type} = event || {}\n\n if (!props.disabled && !props.readonly) {\n if (isMouseEvent(event)) {\n // We only respond to left (main === 0) button clicks\n if (type === 'mousedown' && event.button) return\n }\n resetTimers()\n // Step the counter initially\n stepper(1)\n const threshold = computedThreshold.value\n const multiplier = computedStepMultiplier.value\n const delay = computedDelay.value\n const interval = computedInterval.value\n\n // Initiate the delay/repeat interval\n $_autoDelayTimer = setTimeout(() => {\n let count = 0\n $_autoRepeatTimer = setInterval(() => {\n // After N initial repeats, we increase the incrementing step amount\n // We do this to minimize screen reader announcements of the value\n // (values are announced every change, which can be chatty for SR users)\n // And to make it easer to select a value when the range is large\n stepper(count < threshold ? 1 : multiplier)\n count++\n }, interval)\n }, delay)\n }\n}\n\nconst isMouseEvent = (evt: Readonly<Event>): evt is MouseEvent =>\n evt.type === 'mouseup' || evt.type === 'mousedown'\n\nconst onMouseup: EventListener = (event: Readonly<Event>) => {\n // `<body>` listener, only enabled when mousedown starts\n\n if (isMouseEvent(event)) {\n if (event.type === 'mouseup' && event.button) {\n // Ignore non left button (main === 0) mouse button click\n return\n }\n }\n\n stopEvent(event)\n resetTimers()\n setMouseup('removeEventListener')\n // Trigger the change event\n emit('change', modelValue.value)\n}\n\nconst setMouseup = (operation: 'addEventListener' | 'removeEventListener') => {\n const doc = getSafeDocument()\n if (doc === null) return\n\n if (operation === 'addEventListener') {\n doc.body.addEventListener('mouseup', onMouseup)\n doc.body.addEventListener('touchend', onMouseup, {passive: false})\n } else {\n doc.body.removeEventListener('mouseup', onMouseup)\n doc.body.removeEventListener('touchend', onMouseup)\n }\n}\nconst resetTimers = () => {\n clearTimeout($_autoDelayTimer)\n clearInterval($_autoRepeatTimer)\n $_autoDelayTimer = undefined\n $_autoRepeatTimer = undefined\n}\n\nconst buttons = computed(() => {\n const incrementSvgAttrs = {\n svg: {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '16',\n height: '16',\n fill: 'currentColor',\n class: 'bi bi-plus',\n viewBox: '0 0 16 16',\n },\n path: {\n d: 'M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z',\n },\n } as const\n\n const decrementSvgAttrs = {\n svg: {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '16',\n height: '16',\n fill: 'currentColor',\n class: 'bi bi-dash',\n viewBox: '0 0 16 16',\n },\n path: {d: 'M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z'},\n } as const\n\n const sharedButtonAttrs = {\n 'class': [{'py-0': !props.vertical}, 'btn', 'btn-sm', 'border-0', 'rounded-0'],\n 'tabindex': '-1',\n 'type': 'button' as ButtonType,\n 'disabled': props.disabled || props.readonly,\n 'aria-disabled': props.disabled || props.readonly ? true : undefined,\n 'aria-controls': computedId.value,\n }\n\n const sharedSvgAttrs = {\n 'aria-hidden': true,\n 'scale': focused.value ? 1.5 : 1.25,\n }\n\n const handler = (event: Readonly<Event>, stepper: (multiplier?: number) => void) => {\n if (!props.disabled && !props.readonly) {\n stopEvent(event)\n setMouseup('addEventListener')\n // Since we `preventDefault()`, we must manually focus the button\n // Though it's likely captured from the element click focus\n focused.value = true\n handleStepRepeat(event, stepper)\n }\n }\n\n const incrementAttrs = {\n button: {\n ...sharedButtonAttrs,\n 'aria-label': props.labelIncrement || undefined,\n 'aria-keyshortcuts': 'ArrowUp',\n },\n svg: {\n ...sharedSvgAttrs,\n ...incrementSvgAttrs.svg,\n },\n path: {\n ...incrementSvgAttrs.path,\n },\n slot: {\n name: 'increment',\n },\n handler: (e: Event) => handler(e, stepUp),\n }\n\n const decrementAttrs = {\n button: {\n ...sharedButtonAttrs,\n 'aria-label': props.labelDecrement || undefined,\n 'aria-keyshortcuts': 'ArrowDown',\n },\n svg: {\n ...sharedSvgAttrs,\n ...decrementSvgAttrs.svg,\n },\n path: {\n ...decrementSvgAttrs.path,\n },\n slot: {\n name: 'decrement',\n },\n handler: (e: Readonly<Event>) => handler(e, stepDown),\n }\n\n return {\n top: {\n ...(props.vertical ? incrementAttrs : decrementAttrs),\n },\n bottom: {\n ...(!props.vertical ? incrementAttrs : decrementAttrs),\n },\n }\n})\n\nonUnmounted(() => {\n // Cleanup event listeners\n setMouseup('removeEventListener')\n})\n</script>\n\n<script lang=\"ts\">\nconst defaultValues = {\n min: 1,\n max: 100,\n step: 1,\n repeatDelay: 500,\n repeatInterval: 100,\n repeatThreshold: 10,\n repeatMultiplier: 4,\n} as const\n</script>\n","<template>\n <div\n ref=\"_element\"\n class=\"b-form-spinbutton form-control\"\n :class=\"computedClasses\"\n role=\"group\"\n :lang=\"computedLocale\"\n :tabindex=\"props.disabled ? undefined : '-1'\"\n :title=\"props.ariaLabel\"\n @click=\"focused = true\"\n >\n <!-- eslint-disable-next-line prettier/prettier -->\n <!-- prettier-ignore -->\n <slot :name=\"(buttons.top.slot.name as 'increment' | 'decrement')\" :has-focus=\"focused\">\n <button\n v-bind=\"buttons.top.button\"\n @mousedown=\"buttons.top.handler\"\n @touchstart=\"buttons.top.handler\"\n >\n <svg v-bind=\"buttons.top.svg\">\n <path v-bind=\"buttons.top.path\" />\n </svg>\n </button>\n </slot>\n <input\n v-if=\"props.name && !props.disabled\"\n key=\"hidden\"\n type=\"hidden\"\n :name=\"props.name\"\n :form=\"props.form\"\n :value=\"valueAsFixed\"\n />\n <output\n :id=\"computedId\"\n key=\"output\"\n class=\"flex-grow-1\"\n :class=\"computedSpinClasses\"\n :dir=\"(isRtl ?? false) ? 'rtl' : 'ltr'\"\n :tabindex=\"props.disabled ? undefined : '0'\"\n role=\"spinbutton\"\n aria-live=\"off\"\n :aria-label=\"props.ariaLabel || undefined\"\n :aria-invalid=\"\n props.state === false || (!modelValue !== null && props.required) ? true : undefined\n \"\n :aria-required=\"props.required ? true : undefined\"\n :aria-valuemin=\"computedMin\"\n :aria-valuemax=\"computedMax\"\n :aria-valuenow=\"modelValue !== null ? modelValue : undefined\"\n :aria-valuetext=\"modelValue !== null ? computedFormatter(modelValue) : undefined\"\n >\n <bdi>\n {{ (modelValue !== null ? computedFormatter(modelValue) : props.placeholder) || '' }}\n </bdi>\n </output>\n <!-- eslint-disable-next-line prettier/prettier -->\n <!-- prettier-ignore -->\n <slot :name=\"(buttons.bottom.slot.name as 'increment' | 'decrement')\" :has-focus=\"focused\">\n <button\n v-bind=\"buttons.bottom.button\"\n @mousedown=\"buttons.bottom.handler\"\n @touchstart=\"buttons.bottom.handler\"\n >\n <svg v-bind=\"buttons.bottom.svg\">\n <path v-bind=\"buttons.bottom.path\" />\n </svg>\n </button>\n </slot>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, onUnmounted, useTemplateRef} from 'vue'\nimport {\n CODE_DOWN,\n CODE_END,\n CODE_HOME,\n CODE_PAGEDOWN,\n CODE_PAGEUP,\n CODE_UP,\n} from '../../utils/constants'\nimport {onKeyStroke, useFocus, useToNumber} from '@vueuse/core'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport {useRtl} from '../../composables/useRtl'\nimport type {\n BFormSpinbuttonEmits,\n BFormSpinbuttonSlots,\n BFormSpinbuttonProps,\n ButtonType,\n} from '../../types'\nimport {getSafeDocument} from '../../utils/dom'\n\nconst KEY_CODES = [CODE_UP, CODE_DOWN, CODE_HOME, CODE_END, CODE_PAGEUP, CODE_PAGEDOWN]\n\nconst _props = withDefaults(defineProps<Omit<BFormSpinbuttonProps, 'modelValue'>>(), {\n ariaControls: undefined,\n ariaLabel: undefined,\n disabled: false,\n form: undefined,\n formatterFn: undefined,\n id: undefined,\n inline: false,\n labelDecrement: 'Decrement',\n labelIncrement: 'Increment',\n locale: undefined,\n max: defaultValues.max,\n min: defaultValues.min,\n name: undefined,\n placeholder: undefined,\n readonly: false,\n repeatDelay: defaultValues.repeatDelay,\n repeatInterval: defaultValues.repeatInterval,\n repeatStepMultiplier: defaultValues.repeatMultiplier,\n repeatThreshold: defaultValues.repeatThreshold,\n required: false,\n size: undefined,\n state: null,\n step: defaultValues.step,\n vertical: false,\n wrap: false,\n})\nconst props = useDefaults(_props, 'BFormSpinbutton')\nconst emit = defineEmits<BFormSpinbuttonEmits>()\ndefineSlots<BFormSpinbuttonSlots>()\n\nconst modelValue = defineModel<Exclude<BFormSpinbuttonProps['modelValue'], undefined>>({\n default: null,\n})\n\nconst element = useTemplateRef('_element')\n\nconst {focused} = useFocus(element)\n\nconst computedId = useId(() => props.id, 'spinbutton')\n\nconst computedClasses = computed(() => ({\n 'disabled': props.disabled,\n 'readonly': props.readonly,\n 'focus': focused.value,\n 'd-inline-flex': props.inline || props.vertical,\n 'd-flex': !props.inline && !props.vertical,\n 'align-items-stretch': !props.vertical,\n 'flex-column': props.vertical,\n [`form-control-${props.size}`]: props.size !== undefined,\n}))\n\nconst computedSpinClasses = computed(() => ({\n 'd-flex': props.vertical,\n 'align-self-center': !props.vertical,\n 'align-items-center': props.vertical,\n 'border-top': props.vertical,\n 'border-bottom': props.vertical,\n 'border-start': !props.vertical,\n 'border-end': !props.vertical,\n}))\n\n//non reactive properties\nlet $_autoDelayTimer: ReturnType<typeof setTimeout> | undefined\nlet $_autoRepeatTimer: ReturnType<typeof setTimeout> | undefined\nlet $_keyIsDown = false\n\n// const computedInline = computed(() => props.inline && !props.vertical)\n\n// const computedReadonly = computed(() => props.readonly && !props.disabled)\n\nconst stepNumber = useToNumber(() => props.step)\nconst computedStep = computed(() =>\n Number.isNaN(stepNumber.value) ? defaultValues.step : stepNumber.value\n)\n\nconst minNumber = useToNumber(() => props.min)\nconst computedMin = computed(() =>\n Number.isNaN(minNumber.value) ? defaultValues.min : minNumber.value\n)\n\nconst maxNumber = useToNumber(() => props.max)\nconst computedMax = computed(() => {\n const step = computedStep.value\n const min = computedMin.value\n return Math.floor((maxNumber.value - min) / step) * step + min\n})\n\nconst repeatDelayNumber = useToNumber(() => props.repeatDelay, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedDelay = computed(() =>\n repeatDelayNumber.value > 0 ? repeatDelayNumber.value : defaultValues.repeatDelay\n)\n\nconst repeatIntervalNumber = useToNumber(() => props.repeatInterval, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedInterval = computed(() =>\n repeatIntervalNumber.value > 0 ? repeatIntervalNumber.value : defaultValues.repeatInterval\n)\n\nconst repeatThresholdNumber = useToNumber(() => props.repeatThreshold, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedThreshold = computed(() =>\n Math.max(\n Number.isNaN(repeatThresholdNumber.value)\n ? defaultValues.repeatThreshold\n : repeatThresholdNumber.value,\n 1\n )\n)\n\nconst repeatStepMultiplierNumber = useToNumber(() => props.repeatStepMultiplier, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedStepMultiplier = computed(() =>\n Math.max(\n Number.isNaN(repeatStepMultiplierNumber.value)\n ? defaultValues.repeatMultiplier\n : repeatStepMultiplierNumber.value,\n 1\n )\n)\n\nconst computedPrecision = computed(() => {\n const step = computedStep.value\n return Math.floor(step) === step ? 0 : (step.toString().split('.')[1] || '').length\n})\n\nconst computedMultiplier = computed(() => Math.pow(10, computedPrecision.value || 0))\n\nconst valueAsFixed = computed(() =>\n modelValue.value === null ? '' : modelValue.value.toFixed(computedPrecision.value)\n)\n\nconst {isRtl, locale: globalLocale} = useRtl()\n\nconst computedLocale = computed(() => {\n const loc = (props.locale ?? globalLocale?.value) || 'locale'\n const locales = [loc]\n const nf = new Intl.NumberFormat(locales)\n return nf.resolvedOptions().locale\n})\n\nconst defaultFormatter = () =>\n new Intl.NumberFormat(computedLocale.value, {\n style: 'decimal',\n useGrouping: false,\n minimumIntegerDigits: 1,\n minimumFractionDigits: computedPrecision.value,\n maximumFractionDigits: computedPrecision.value,\n notation: 'standard',\n }).format\n\nconst computedFormatter = computed(() => props.formatterFn ?? defaultFormatter())\n\nconst stepValue = (direction: number) => {\n // Sets a new incremented or decremented value, supporting optional wrapping\n // Direction is either +1 or -1 (or a multiple thereof)\n let {value} = modelValue\n if (!props.disabled && value !== null) {\n const step = computedStep.value * direction\n const min = computedMin.value\n const max = computedMax.value\n const multiplier = computedMultiplier.value\n const {wrap} = props\n // We ensure that the value steps like a native input\n value = Math.round((value - min) / step) * step + min + step\n // We ensure that precision is maintained (decimals)\n value = Math.round(value * multiplier) / multiplier\n // Handle if wrapping is enabled\n modelValue.value = value > max ? (wrap ? min : max) : value < min ? (wrap ? max : min) : value\n }\n}\n\nconst stepUp = (multiplier = 1) => {\n if (modelValue.value === null) {\n modelValue.value = computedMin.value\n return\n }\n stepValue(+1 * multiplier)\n}\n\nconst stepDown = (multiplier = 1) => {\n if (modelValue.value === null) {\n modelValue.value = props.wrap ? computedMax.value : computedMin.value\n return\n }\n stepValue(-1 * multiplier)\n}\n\nconst stopEvent = (event: Readonly<Event>) => {\n event.preventDefault()\n event.stopImmediatePropagation()\n}\n\nonKeyStroke(\n KEY_CODES,\n (event) => {\n const {code, altKey, ctrlKey, metaKey} = event\n\n if (props.disabled || props.readonly || altKey || ctrlKey || metaKey) return\n\n // https://w3c.github.io/aria-practices/#spinbutton\n stopEvent(event)\n if ($_keyIsDown) {\n // Keypress is already in progress\n return\n }\n\n resetTimers()\n if ([CODE_UP, CODE_DOWN].includes(code)) {\n // The following use the custom auto-repeat handling\n\n $_keyIsDown = true\n if (code === CODE_UP) {\n handleStepRepeat(event, stepUp)\n return\n }\n if (code === CODE_DOWN) {\n handleStepRepeat(event, stepDown)\n }\n return\n }\n // These use native OS key repeating\n if (code === CODE_PAGEUP) {\n stepUp(computedStepMultiplier.value)\n return\n }\n if (code === CODE_PAGEDOWN) {\n stepDown(computedStepMultiplier.value)\n return\n }\n if (code === CODE_HOME) {\n modelValue.value = computedMin.value\n return\n }\n if (code === CODE_END) {\n modelValue.value = computedMax.value\n }\n },\n {target: element, eventName: 'keydown'}\n)\n\nonKeyStroke(\n KEY_CODES,\n (event: Readonly<KeyboardEvent>) => {\n // Emit a change event when the keyup happens\n\n const {altKey, ctrlKey, metaKey} = event\n\n if (props.disabled || props.readonly || altKey || ctrlKey || metaKey) return\n\n stopEvent(event)\n resetTimers()\n $_keyIsDown = false\n emit('change', modelValue.value)\n },\n {target: element, eventName: 'keyup'}\n)\n\n// takes in a mount or Keyboard Event\nconst handleStepRepeat = (event: Readonly<Event>, stepper: (step: number) => void) => {\n const {type} = event || {}\n\n if (!props.disabled && !props.readonly) {\n if (isMouseEvent(event)) {\n // We only respond to left (main === 0) button clicks\n if (type === 'mousedown' && event.button) return\n }\n resetTimers()\n // Step the counter initially\n stepper(1)\n const threshold = computedThreshold.value\n const multiplier = computedStepMultiplier.value\n const delay = computedDelay.value\n const interval = computedInterval.value\n\n // Initiate the delay/repeat interval\n $_autoDelayTimer = setTimeout(() => {\n let count = 0\n $_autoRepeatTimer = setInterval(() => {\n // After N initial repeats, we increase the incrementing step amount\n // We do this to minimize screen reader announcements of the value\n // (values are announced every change, which can be chatty for SR users)\n // And to make it easer to select a value when the range is large\n stepper(count < threshold ? 1 : multiplier)\n count++\n }, interval)\n }, delay)\n }\n}\n\nconst isMouseEvent = (evt: Readonly<Event>): evt is MouseEvent =>\n evt.type === 'mouseup' || evt.type === 'mousedown'\n\nconst onMouseup: EventListener = (event: Readonly<Event>) => {\n // `<body>` listener, only enabled when mousedown starts\n\n if (isMouseEvent(event)) {\n if (event.type === 'mouseup' && event.button) {\n // Ignore non left button (main === 0) mouse button click\n return\n }\n }\n\n stopEvent(event)\n resetTimers()\n setMouseup('removeEventListener')\n // Trigger the change event\n emit('change', modelValue.value)\n}\n\nconst setMouseup = (operation: 'addEventListener' | 'removeEventListener') => {\n const doc = getSafeDocument()\n if (doc === null) return\n\n if (operation === 'addEventListener') {\n doc.body.addEventListener('mouseup', onMouseup)\n doc.body.addEventListener('touchend', onMouseup, {passive: false})\n } else {\n doc.body.removeEventListener('mouseup', onMouseup)\n doc.body.removeEventListener('touchend', onMouseup)\n }\n}\nconst resetTimers = () => {\n clearTimeout($_autoDelayTimer)\n clearInterval($_autoRepeatTimer)\n $_autoDelayTimer = undefined\n $_autoRepeatTimer = undefined\n}\n\nconst buttons = computed(() => {\n const incrementSvgAttrs = {\n svg: {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '16',\n height: '16',\n fill: 'currentColor',\n class: 'bi bi-plus',\n viewBox: '0 0 16 16',\n },\n path: {\n d: 'M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z',\n },\n } as const\n\n const decrementSvgAttrs = {\n svg: {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '16',\n height: '16',\n fill: 'currentColor',\n class: 'bi bi-dash',\n viewBox: '0 0 16 16',\n },\n path: {d: 'M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z'},\n } as const\n\n const sharedButtonAttrs = {\n 'class': [{'py-0': !props.vertical}, 'btn', 'btn-sm', 'border-0', 'rounded-0'],\n 'tabindex': '-1',\n 'type': 'button' as ButtonType,\n 'disabled': props.disabled || props.readonly,\n 'aria-disabled': props.disabled || props.readonly ? true : undefined,\n 'aria-controls': computedId.value,\n }\n\n const sharedSvgAttrs = {\n 'aria-hidden': true,\n 'scale': focused.value ? 1.5 : 1.25,\n }\n\n const handler = (event: Readonly<Event>, stepper: (multiplier?: number) => void) => {\n if (!props.disabled && !props.readonly) {\n stopEvent(event)\n setMouseup('addEventListener')\n // Since we `preventDefault()`, we must manually focus the button\n // Though it's likely captured from the element click focus\n focused.value = true\n handleStepRepeat(event, stepper)\n }\n }\n\n const incrementAttrs = {\n button: {\n ...sharedButtonAttrs,\n 'aria-label': props.labelIncrement || undefined,\n 'aria-keyshortcuts': 'ArrowUp',\n },\n svg: {\n ...sharedSvgAttrs,\n ...incrementSvgAttrs.svg,\n },\n path: {\n ...incrementSvgAttrs.path,\n },\n slot: {\n name: 'increment',\n },\n handler: (e: Event) => handler(e, stepUp),\n }\n\n const decrementAttrs = {\n button: {\n ...sharedButtonAttrs,\n 'aria-label': props.labelDecrement || undefined,\n 'aria-keyshortcuts': 'ArrowDown',\n },\n svg: {\n ...sharedSvgAttrs,\n ...decrementSvgAttrs.svg,\n },\n path: {\n ...decrementSvgAttrs.path,\n },\n slot: {\n name: 'decrement',\n },\n handler: (e: Readonly<Event>) => handler(e, stepDown),\n }\n\n return {\n top: {\n ...(props.vertical ? incrementAttrs : decrementAttrs),\n },\n bottom: {\n ...(!props.vertical ? incrementAttrs : decrementAttrs),\n },\n }\n})\n\nonUnmounted(() => {\n // Cleanup event listeners\n setMouseup('removeEventListener')\n})\n</script>\n\n<script lang=\"ts\">\nconst defaultValues = {\n min: 1,\n max: 100,\n step: 1,\n repeatDelay: 500,\n repeatInterval: 100,\n repeatThreshold: 10,\n repeatMultiplier: 4,\n} as const\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4hBA,IAAM,gBAAgB;CACpB,KAAK;CACL,KAAK;CACL,MAAM;CACN,aAAa;CACb,gBAAgB;CAChB,iBAAiB;CACjB,kBAAkB;CACnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAvcD,MAAM,YAAY;GAAC,kBAAA;GAAS,kBAAA;GAAW,kBAAA;;GAAqB,kBAAA;GAAa,kBAAA;GAAa;EA6BtF,MAAM,QAAQ,oBAAA,YA3BC,SA2BmB,kBAAiB;EACnD,MAAM,OAAO;EAGb,MAAM,cAAA,GAAA,IAAA,UAAgF,SAAA,aAErF;EAED,MAAM,WAAA,GAAA,IAAA,gBAAyB,WAAU;EAEzC,MAAM,EAAC,YAAW,aAAA,SAAS,QAAO;EAElC,MAAM,aAAa,cAAA,YAAY,MAAM,IAAI,aAAY;EAErD,MAAM,mBAAA,GAAA,IAAA,iBAAkC;GACtC,YAAY,MAAM;GAClB,YAAY,MAAM;GAClB,SAAS,QAAQ;GACjB,iBAAiB,MAAM,UAAU,MAAM;GACvC,UAAU,CAAC,MAAM,UAAU,CAAC,MAAM;GAClC,uBAAuB,CAAC,MAAM;GAC9B,eAAe,MAAM;IACpB,gBAAgB,MAAM,SAAS,MAAM,SAAS,KAAA;GAChD,EAAC;EAEF,MAAM,uBAAA,GAAA,IAAA,iBAAsC;GAC1C,UAAU,MAAM;GAChB,qBAAqB,CAAC,MAAM;GAC5B,sBAAsB,MAAM;GAC5B,cAAc,MAAM;GACpB,iBAAiB,MAAM;GACvB,gBAAgB,CAAC,MAAM;GACvB,cAAc,CAAC,MAAM;GACtB,EAAC;EAGF,IAAI;EACJ,IAAI;EACJ,IAAI,cAAc;EAMlB,MAAM,aAAa,aAAA,kBAAkB,MAAM,KAAI;EAC/C,MAAM,gBAAA,GAAA,IAAA,gBACJ,OAAO,MAAM,WAAW,MAAM,GAAG,cAAc,OAAO,WAAW,MACnE;EAEA,MAAM,YAAY,aAAA,kBAAkB,MAAM,IAAG;EAC7C,MAAM,eAAA,GAAA,IAAA,gBACJ,OAAO,MAAM,UAAU,MAAM,GAAG,cAAc,MAAM,UAAU,MAChE;EAEA,MAAM,YAAY,aAAA,kBAAkB,MAAM,IAAG;EAC7C,MAAM,eAAA,GAAA,IAAA,gBAA6B;GACjC,MAAM,OAAO,aAAa;GAC1B,MAAM,MAAM,YAAY;AACxB,UAAO,KAAK,OAAO,UAAU,QAAQ,OAAO,KAAK,GAAG,OAAO;IAC5D;EAED,MAAM,oBAAoB,aAAA,kBAAkB,MAAM,aAAa;GAC7D,WAAW;GACX,QAAQ;GACT,CAAA;EACD,MAAM,iBAAA,GAAA,IAAA,gBACJ,kBAAkB,QAAQ,IAAI,kBAAkB,QAAQ,cAAc,YACxE;EAEA,MAAM,uBAAuB,aAAA,kBAAkB,MAAM,gBAAgB;GACnE,WAAW;GACX,QAAQ;GACT,CAAA;EACD,MAAM,oBAAA,GAAA,IAAA,gBACJ,qBAAqB,QAAQ,IAAI,qBAAqB,QAAQ,cAAc,eAC9E;EAEA,MAAM,wBAAwB,aAAA,kBAAkB,MAAM,iBAAiB;GACrE,WAAW;GACX,QAAQ;GACT,CAAA;EACD,MAAM,qBAAA,GAAA,IAAA,gBACJ,KAAK,IACH,OAAO,MAAM,sBAAsB,MAAK,GACpC,cAAc,kBACd,sBAAsB,OAC1B,EACF,CACF;EAEA,MAAM,6BAA6B,aAAA,kBAAkB,MAAM,sBAAsB;GAC/E,WAAW;GACX,QAAQ;GACT,CAAA;EACD,MAAM,0BAAA,GAAA,IAAA,gBACJ,KAAK,IACH,OAAO,MAAM,2BAA2B,MAAK,GACzC,cAAc,mBACd,2BAA2B,OAC/B,EACF,CACF;EAEA,MAAM,qBAAA,GAAA,IAAA,gBAAmC;GACvC,MAAM,OAAO,aAAa;AAC1B,UAAO,KAAK,MAAM,KAAK,KAAK,OAAO,KAAK,KAAK,UAAU,CAAC,MAAM,IAAI,CAAC,MAAM,IAAI;IAC9E;EAED,MAAM,sBAAA,GAAA,IAAA,gBAAoC,KAAK,IAAI,IAAI,kBAAkB,SAAS,EAAE,CAAA;EAEpF,MAAM,gBAAA,GAAA,IAAA,gBACJ,WAAW,UAAU,OAAO,KAAK,WAAW,MAAM,QAAQ,kBAAkB,MAAK,CACnF;EAEA,MAAM,EAAC,OAAO,QAAQ,iBAAgB,eAAA,QAAO;EAE7C,MAAM,kBAAA,GAAA,IAAA,gBAAgC;GAEpC,MAAM,UAAU,EADH,MAAM,UAAU,cAAc,UAAU,SACjC;AAEpB,UADW,IAAI,KAAK,aAAa,QAAO,CAC9B,iBAAiB,CAAC;IAC7B;EAED,MAAM,yBACJ,IAAI,KAAK,aAAa,eAAe,OAAO;GAC1C,OAAO;GACP,aAAa;GACb,sBAAsB;GACtB,uBAAuB,kBAAkB;GACzC,uBAAuB,kBAAkB;GACzC,UAAU;GACX,CAAC,CAAC;EAEL,MAAM,qBAAA,GAAA,IAAA,gBAAmC,MAAM,eAAe,kBAAkB,CAAA;EAEhF,MAAM,aAAa,cAAsB;GAGvC,IAAI,EAAC,UAAS;AACd,OAAI,CAAC,MAAM,YAAY,UAAU,MAAM;IACrC,MAAM,OAAO,aAAa,QAAQ;IAClC,MAAM,MAAM,YAAY;IACxB,MAAM,MAAM,YAAY;IACxB,MAAM,aAAa,mBAAmB;IACtC,MAAM,EAAC,SAAQ;AAEf,YAAQ,KAAK,OAAO,QAAQ,OAAO,KAAK,GAAG,OAAO,MAAM;AAExD,YAAQ,KAAK,MAAM,QAAQ,WAAW,GAAG;AAEzC,eAAW,QAAQ,QAAQ,MAAO,OAAO,MAAM,MAAO,QAAQ,MAAO,OAAO,MAAM,MAAO;;;EAI7F,MAAM,UAAU,aAAa,MAAM;AACjC,OAAI,WAAW,UAAU,MAAM;AAC7B,eAAW,QAAQ,YAAY;AAC/B;;AAEF,aAAU,IAAK,WAAU;;EAG3B,MAAM,YAAY,aAAa,MAAM;AACnC,OAAI,WAAW,UAAU,MAAM;AAC7B,eAAW,QAAQ,MAAM,OAAO,YAAY,QAAQ,YAAY;AAChE;;AAEF,aAAU,KAAK,WAAU;;EAG3B,MAAM,aAAa,UAA2B;AAC5C,SAAM,gBAAe;AACrB,SAAM,0BAAyB;;AAGjC,eAAA,YACE,YACC,UAAU;GACT,MAAM,EAAC,MAAM,QAAQ,SAAS,YAAW;AAEzC,OAAI,MAAM,YAAY,MAAM,YAAY,UAAU,WAAW,QAAS;AAGtE,aAAU,MAAK;AACf,OAAI,YAEF;AAGF,gBAAY;AACZ,OAAI,CAAA,WAAA,YAAoB,CAAC,SAAS,KAAK,EAAE;AAGvC,kBAAc;AACd,QAAI,SAAA,WAAkB;AACpB,sBAAiB,OAAO,OAAM;AAC9B;;AAEF,QAAI,SAAA,YACF,kBAAiB,OAAO,SAAQ;AAElC;;AAGF,OAAI,SAAA,UAAsB;AACxB,WAAO,uBAAuB,MAAK;AACnC;;AAEF,OAAI,SAAA,YAAwB;AAC1B,aAAS,uBAAuB,MAAK;AACrC;;AAEF,OAAI,SAAA,QAAoB;AACtB,eAAW,QAAQ,YAAY;AAC/B;;AAEF,OAAI,SAAA,MACF,YAAW,QAAQ,YAAY;KAGnC;GAAC,QAAQ;GAAS,WAAW;GAAS,CACxC;AAEA,eAAA,YACE,YACC,UAAmC;GAGlC,MAAM,EAAC,QAAQ,SAAS,YAAW;AAEnC,OAAI,MAAM,YAAY,MAAM,YAAY,UAAU,WAAW,QAAS;AAEtE,aAAU,MAAK;AACf,gBAAY;AACZ,iBAAc;AACd,QAAK,UAAU,WAAW,MAAK;KAEjC;GAAC,QAAQ;GAAS,WAAW;GAAO,CACtC;EAGA,MAAM,oBAAoB,OAAwB,YAAoC;GACpF,MAAM,EAAC,SAAQ,SAAS,EAAC;AAEzB,OAAI,CAAC,MAAM,YAAY,CAAC,MAAM,UAAU;AACtC,QAAI,aAAa,MAAM;SAEjB,SAAS,eAAe,MAAM,OAAQ;;AAE5C,iBAAY;AAEZ,YAAQ,EAAC;IACT,MAAM,YAAY,kBAAkB;IACpC,MAAM,aAAa,uBAAuB;IAC1C,MAAM,QAAQ,cAAc;IAC5B,MAAM,WAAW,iBAAiB;AAGlC,uBAAmB,iBAAiB;KAClC,IAAI,QAAQ;AACZ,yBAAoB,kBAAkB;AAKpC,cAAQ,QAAQ,YAAY,IAAI,WAAU;AAC1C;QACC,SAAQ;OACV,MAAK;;;EAIZ,MAAM,gBAAgB,QACpB,IAAI,SAAS,aAAa,IAAI,SAAS;EAEzC,MAAM,aAA4B,UAA2B;AAG3D,OAAI,aAAa,MAAM;QACjB,MAAM,SAAS,aAAa,MAAM,OAEpC;;AAIJ,aAAU,MAAK;AACf,gBAAY;AACZ,cAAW,sBAAqB;AAEhC,QAAK,UAAU,WAAW,MAAK;;EAGjC,MAAM,cAAc,cAA0D;GAC5E,MAAM,MAAM,YAAA,iBAAgB;AAC5B,OAAI,QAAQ,KAAM;AAElB,OAAI,cAAc,oBAAoB;AACpC,QAAI,KAAK,iBAAiB,WAAW,UAAS;AAC9C,QAAI,KAAK,iBAAiB,YAAY,WAAW,EAAC,SAAS,OAAM,CAAA;UAC5D;AACL,QAAI,KAAK,oBAAoB,WAAW,UAAS;AACjD,QAAI,KAAK,oBAAoB,YAAY,UAAS;;;EAGtD,MAAM,oBAAoB;AACxB,gBAAa,iBAAgB;AAC7B,iBAAc,kBAAiB;AAC/B,sBAAmB,KAAA;AACnB,uBAAoB,KAAA;;EAGtB,MAAM,WAAA,GAAA,IAAA,gBAAyB;GAC7B,MAAM,oBAAoB;IACxB,KAAK;KACH,OAAO;KACP,OAAO;KACP,QAAQ;KACR,MAAM;KACN,OAAO;KACP,SAAS;KACV;IACD,MAAM,EACJ,GAAG,yGAAA;IAEN;GAED,MAAM,oBAAoB;IACxB,KAAK;KACH,OAAO;KACP,OAAO;KACP,QAAQ;KACR,MAAM;KACN,OAAO;KACP,SAAS;KACV;IACD,MAAM,EAAC,GAAG,6DAAA;IACX;GAED,MAAM,oBAAoB;IACxB,SAAS;KAAC,EAAC,QAAQ,CAAC,MAAM,UAAS;KAAE;KAAO;KAAU;KAAY;KAAY;IAC9E,YAAY;IACZ,QAAQ;IACR,YAAY,MAAM,YAAY,MAAM;IACpC,iBAAiB,MAAM,YAAY,MAAM,WAAW,OAAO,KAAA;IAC3D,iBAAiB,WAAW;IAC9B;GAEA,MAAM,iBAAiB;IACrB,eAAe;IACf,SAAS,QAAQ,QAAQ,MAAM;IACjC;GAEA,MAAM,WAAW,OAAwB,YAA2C;AAClF,QAAI,CAAC,MAAM,YAAY,CAAC,MAAM,UAAU;AACtC,eAAU,MAAK;AACf,gBAAW,mBAAkB;AAG7B,aAAQ,QAAQ;AAChB,sBAAiB,OAAO,QAAO;;;GAInC,MAAM,iBAAiB;IACrB,QAAQ;KACN,GAAG;KACH,cAAc,MAAM,kBAAkB,KAAA;KACtC,qBAAqB;KACtB;IACD,KAAK;KACH,GAAG;KACH,GAAG,kBAAkB;KACtB;IACD,MAAM,EACJ,GAAG,kBAAkB,MACtB;IACD,MAAM,EACJ,MAAM,aACP;IACD,UAAU,MAAa,QAAQ,GAAG,OAAA;IACpC;GAEA,MAAM,iBAAiB;IACrB,QAAQ;KACN,GAAG;KACH,cAAc,MAAM,kBAAkB,KAAA;KACtC,qBAAqB;KACtB;IACD,KAAK;KACH,GAAG;KACH,GAAG,kBAAkB;KACtB;IACD,MAAM,EACJ,GAAG,kBAAkB,MACtB;IACD,MAAM,EACJ,MAAM,aACP;IACD,UAAU,MAAuB,QAAQ,GAAG,SAAA;IAC9C;AAEA,UAAO;IACL,KAAK,EACH,GAAI,MAAM,WAAW,iBAAiB,gBACvC;IACD,QAAQ,EACN,GAAI,CAAC,MAAM,WAAW,iBAAiB,gBAAA;IAE3C;IACD;AAED,GAAA,GAAA,IAAA,mBAAkB;AAEhB,cAAW,sBAAqB;IACjC;;4DApdO,OAAA;IAlEJ,KAAI;IACJ,QAAA,GAAA,IAAA,gBAAK,CAAC,kCACE,gBAAA,MAAe,CAAA;IACvB,MAAK;IACJ,MAAM,eAAA;IACN,WAAA,GAAA,IAAA,OAAU,MAAK,CAAC,WAAW,KAAA,IAAS;IACpC,QAAA,GAAA,IAAA,OAAO,MAAK,CAAC;IACb,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,QAAA,QAAO;;wBAcR,KAAA,QAVO,QAAA,MAAQ,IAAI,KAAK,MAAI,EAAiC,WAAA,GAAA,IAAA,OAAW,QAAO,EAAA,QAU/E,EAAA,GAAA,IAAA,oBADI,WAAA,GAAA,IAAA,YAPC,QAOD,MAPS,IAAI,QAAM;KACzB,aAAS,OAAA,OAAA,OAAA,MAAA,GAAA,SAAE,QAAA,MAAQ,IAAI,WAAZ,QAAA,MAAQ,IAAI,QAAO,GAAA,KAAA;KAC9B,cAAU,OAAA,OAAA,OAAA,MAAA,GAAA,SAAE,QAAA,MAAQ,IAAI,WAAZ,QAAA,MAAQ,IAAI,QAAO,GAAA,KAAA;4DAI1B,QAAA,GAAA,IAAA,iBAAA,GAAA,IAAA,oBAFO,QAAA,MAAQ,IAAI,IAAG,CAAA,EAAA,EAAA,GAAA,IAAA,oBACQ,SAAA,GAAA,IAAA,iBAAA,GAAA,IAAA,oBAApB,QAAA,MAAQ,IAAI,KAAI,CAAA,EAAA,MAAA,GAAA,CAAA,EAAA,GAAA,EAAA,EAAA,GAAA,CAAA,CAAA;mBAK5B,MAAK,CAAC,QAAI,EAAA,GAAA,IAAA,OAAK,MAAK,CAAC,aAAA,GAAA,IAAA,YAAA,GAAA,GAAA,IAAA,oBAM3B,SAAA;KALA,KAAI;KACJ,MAAK;KACJ,OAAA,GAAA,IAAA,OAAM,MAAK,CAAC;KACZ,OAAA,GAAA,IAAA,OAAM,MAAK,CAAC;KACZ,OAAO,aAAA;;gCAwBD,UAAA;KArBN,KAAA,GAAA,IAAA,OAAI,WAAU;KACf,KAAI;KACJ,QAAA,GAAA,IAAA,gBAAK,CAAC,eACE,oBAAA,MAAmB,CAAA;KAC1B,MAAA,GAAA,IAAA,OAAM,MAAK,IAAA,QAAA,QAAA;KACX,WAAA,GAAA,IAAA,OAAU,MAAK,CAAC,WAAW,KAAA,IAAS;KACrC,MAAK;KACL,aAAU;KACT,eAAA,GAAA,IAAA,OAAY,MAAK,CAAC,aAAa,KAAA;KAC/B,iBAAA,GAAA,IAAA,OAAuB,MAAK,CAAC,UAAK,SAAA,CAAgB,WAAA,UAAU,SAAA,GAAA,IAAA,OAAa,MAAK,CAAC,WAAQ,OAAW,KAAA;KAGlG,kBAAA,GAAA,IAAA,OAAe,MAAK,CAAC,WAAQ,OAAU,KAAA;KACvC,iBAAe,YAAA;KACf,iBAAe,YAAA;KACf,iBAAe,WAAA,UAAU,OAAY,WAAA,QAAa,KAAA;KAClD,kBAAgB,WAAA,UAAU,OAAY,kBAAA,MAAkB,WAAA,MAAU,GAAI,KAAA;oCAIjE,OAAA,OAAA,GAAA,IAAA,kBADA,WAAA,UAAU,OAAY,kBAAA,MAAkB,WAAA,MAAU,IAAA,GAAA,IAAA,OAAI,MAAK,CAAC,gBAAW,GAAA,EAAA,EAAA,CAAA,EAAA,IAAA,WAAA;wBAexE,KAAA,QAVO,QAAA,MAAQ,OAAO,KAAK,MAAI,EAAiC,WAAA,GAAA,IAAA,OAAW,QAAO,EAAA,QAUlF,EAAA,GAAA,IAAA,oBADI,WAAA,GAAA,IAAA,YAPC,QAOD,MAPS,OAAO,QAAM;KAC5B,aAAS,OAAA,OAAA,OAAA,MAAA,GAAA,SAAE,QAAA,MAAQ,OAAO,WAAf,QAAA,MAAQ,OAAO,QAAO,GAAA,KAAA;KACjC,cAAU,OAAA,OAAA,OAAA,MAAA,GAAA,SAAE,QAAA,MAAQ,OAAO,WAAf,QAAA,MAAQ,OAAO,QAAO,GAAA,KAAA;4DAI7B,QAAA,GAAA,IAAA,iBAAA,GAAA,IAAA,oBAFO,QAAA,MAAQ,OAAO,IAAG,CAAA,EAAA,EAAA,GAAA,IAAA,oBACQ,SAAA,GAAA,IAAA,iBAAA,GAAA,IAAA,oBAAvB,QAAA,MAAQ,OAAO,KAAI,CAAA,EAAA,MAAA,GAAA,CAAA,EAAA,GAAA,EAAA,EAAA,GAAA,CAAA,CAAA"}
@@ -1,11 +1,11 @@
1
1
  require("./chunk-CoQrYLCe.js");
2
2
  const require_dist = require("./dist-B_c893QG.js");
3
- const require_useId = require("./useId-DTrBK9CE.js");
4
- const require_useDefaults = require("./useDefaults-DK6Y9lar.js");
5
- const require_useColorVariantClasses = require("./useColorVariantClasses-DVaQDVQC.js");
6
- const require_stringUtils = require("./stringUtils-hUreqC0N.js");
7
- const require_BCloseButton = require("./BCloseButton-CgIVNv2g.js");
8
- const require_useStateClass = require("./useStateClass-Cnvy2Hnm.js");
3
+ const require_useDefaults = require("./useDefaults-DsLf4iRY.js");
4
+ const require_useId = require("./useId-DHrBgM7P.js");
5
+ const require_useColorVariantClasses = require("./useColorVariantClasses-CEfOwjPv.js");
6
+ const require_stringUtils = require("./stringUtils-BwKOASdU.js");
7
+ const require_BCloseButton = require("./BCloseButton-CN__Jjcj.js");
8
+ const require_useStateClass = require("./useStateClass-0b-hPufa.js");
9
9
  let vue = require("vue");
10
10
  //#region src/components/BFormTags/BFormTag.vue?vue&type=script&setup=true&lang.ts
11
11
  var _hoisted_1$1 = ["id"];
@@ -498,4 +498,4 @@ Object.defineProperty(exports, "BFormTags_default", {
498
498
  }
499
499
  });
500
500
 
501
- //# sourceMappingURL=BFormTags-pK9i3cOB.js.map
501
+ //# sourceMappingURL=BFormTags-BUoQXBA9.js.map