bootstrap-vue-next 0.45.4 → 0.45.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (421) hide show
  1. package/dist/{BAccordion-Gz2SpRmq.mjs → BAccordion-D51b9HVD.mjs} +5 -5
  2. package/dist/{BAccordion-Gz2SpRmq.mjs.map → BAccordion-D51b9HVD.mjs.map} +1 -1
  3. package/dist/{BAccordion-DgXJMqdG.js → BAccordion-DYmuqZIG.js} +5 -5
  4. package/dist/{BAccordion-DgXJMqdG.js.map → BAccordion-DYmuqZIG.js.map} +1 -1
  5. package/dist/{BAlert-BFPBalmr.mjs → BAlert-Ce2uxrJi.mjs} +8 -8
  6. package/dist/{BAlert-BFPBalmr.mjs.map → BAlert-Ce2uxrJi.mjs.map} +1 -1
  7. package/dist/{BAlert-Dk3rgEOI.js → BAlert-croEtrQu.js} +8 -8
  8. package/dist/{BAlert-Dk3rgEOI.js.map → BAlert-croEtrQu.js.map} +1 -1
  9. package/dist/{BApp-CIu-zI8K.mjs → BApp-B-fUrnpK.mjs} +2 -2
  10. package/dist/{BApp-CIu-zI8K.mjs.map → BApp-B-fUrnpK.mjs.map} +1 -1
  11. package/dist/{BApp-cBKQc5Dd.js → BApp-DOvEe1jo.js} +2 -2
  12. package/dist/{BApp-cBKQc5Dd.js.map → BApp-DOvEe1jo.js.map} +1 -1
  13. package/dist/{BAspect-BULTO240.js → BAspect-CUIU48Ck.js} +2 -2
  14. package/dist/{BAspect-BULTO240.js.map → BAspect-CUIU48Ck.js.map} +1 -1
  15. package/dist/{BAspect-CwokVvvn.mjs → BAspect-wfiXM4KA.mjs} +2 -2
  16. package/dist/{BAspect-CwokVvvn.mjs.map → BAspect-wfiXM4KA.mjs.map} +1 -1
  17. package/dist/{BAutocomplete-j3KJbBFs.mjs → BAutocomplete-CH-bQzME.mjs} +9 -9
  18. package/dist/{BAutocomplete-j3KJbBFs.mjs.map → BAutocomplete-CH-bQzME.mjs.map} +1 -1
  19. package/dist/{BAutocomplete-BCOfyy8g.js → BAutocomplete-DLDFAV5_.js} +9 -9
  20. package/dist/{BAutocomplete-BCOfyy8g.js.map → BAutocomplete-DLDFAV5_.js.map} +1 -1
  21. package/dist/{BAvatar-CZn0MQHY.js → BAvatar-FGK0dK0x.js} +5 -5
  22. package/dist/{BAvatar-CZn0MQHY.js.map → BAvatar-FGK0dK0x.js.map} +1 -1
  23. package/dist/{BAvatar-DODGnQMY.mjs → BAvatar-iALHbqVk.mjs} +5 -5
  24. package/dist/{BAvatar-DODGnQMY.mjs.map → BAvatar-iALHbqVk.mjs.map} +1 -1
  25. package/dist/{BBadge-CZ219I7a.mjs → BBadge-Cx_CdauK.mjs} +3 -3
  26. package/dist/{BBadge-CZ219I7a.mjs.map → BBadge-Cx_CdauK.mjs.map} +1 -1
  27. package/dist/{BBadge-DTJcCo9u.js → BBadge-Db6SEnzy.js} +3 -3
  28. package/dist/{BBadge-DTJcCo9u.js.map → BBadge-Db6SEnzy.js.map} +1 -1
  29. package/dist/{BBreadcrumb-DFG2Qxl9.js → BBreadcrumb-B9ra7vg2.js} +3 -3
  30. package/dist/{BBreadcrumb-DFG2Qxl9.js.map → BBreadcrumb-B9ra7vg2.js.map} +1 -1
  31. package/dist/{BBreadcrumb-Dk4ia-9c.mjs → BBreadcrumb-BxADbg0O.mjs} +3 -3
  32. package/dist/{BBreadcrumb-Dk4ia-9c.mjs.map → BBreadcrumb-BxADbg0O.mjs.map} +1 -1
  33. package/dist/{BButton-C0Ylhonf.mjs → BButton-BSa7LfL5.mjs} +5 -5
  34. package/dist/{BButton-C0Ylhonf.mjs.map → BButton-BSa7LfL5.mjs.map} +1 -1
  35. package/dist/{BButton-BZ9eI3ZX.js → BButton-DRRlzkyK.js} +5 -5
  36. package/dist/{BButton-BZ9eI3ZX.js.map → BButton-DRRlzkyK.js.map} +1 -1
  37. package/dist/{BButton-D_sCrjpg.mjs → BButton-PY7AANXJ.mjs} +4 -4
  38. package/dist/{BButton-D_sCrjpg.mjs.map → BButton-PY7AANXJ.mjs.map} +1 -1
  39. package/dist/{BButton-Dr-RadYQ.js → BButton-aYtMnyHu.js} +4 -4
  40. package/dist/{BButton-Dr-RadYQ.js.map → BButton-aYtMnyHu.js.map} +1 -1
  41. package/dist/{BCard-cj8_dIcz.mjs → BCard-BWoruisp.mjs} +3 -3
  42. package/dist/{BCard-cj8_dIcz.mjs.map → BCard-BWoruisp.mjs.map} +1 -1
  43. package/dist/{BCard-BjQkY783.js → BCard-Bh8RLMo_.js} +3 -3
  44. package/dist/{BCard-BjQkY783.js.map → BCard-Bh8RLMo_.js.map} +1 -1
  45. package/dist/{BCard-TS8DtOwm.mjs → BCard-CHbKv2OR.mjs} +3 -3
  46. package/dist/{BCard-TS8DtOwm.mjs.map → BCard-CHbKv2OR.mjs.map} +1 -1
  47. package/dist/{BCard-BkvG5Zzw.js → BCard-DwNYhVmg.js} +3 -3
  48. package/dist/{BCard-BkvG5Zzw.js.map → BCard-DwNYhVmg.js.map} +1 -1
  49. package/dist/{BCarousel-D23rApAX.js → BCarousel-2JB21Pcu.js} +5 -5
  50. package/dist/{BCarousel-D23rApAX.js.map → BCarousel-2JB21Pcu.js.map} +1 -1
  51. package/dist/{BCarousel-VL1gVXpt.mjs → BCarousel-B6_bgQpl.mjs} +5 -5
  52. package/dist/{BCarousel-VL1gVXpt.mjs.map → BCarousel-B6_bgQpl.mjs.map} +1 -1
  53. package/dist/{BCloseButton-CCdRwLDo.mjs → BCloseButton-CKTKr4PS.mjs} +2 -2
  54. package/dist/{BCloseButton-CCdRwLDo.mjs.map → BCloseButton-CKTKr4PS.mjs.map} +1 -1
  55. package/dist/{BCloseButton-fw5ONnhr.js → BCloseButton-D42zHRLP.js} +2 -2
  56. package/dist/{BCloseButton-fw5ONnhr.js.map → BCloseButton-D42zHRLP.js.map} +1 -1
  57. package/dist/{BCol-VPaTVLsM.mjs → BCol-B3VeEk9z.mjs} +2 -2
  58. package/dist/{BCol-VPaTVLsM.mjs.map → BCol-B3VeEk9z.mjs.map} +1 -1
  59. package/dist/{BCol-CArTYHqb.js → BCol-Ck9VydHj.js} +2 -2
  60. package/dist/{BCol-CArTYHqb.js.map → BCol-Ck9VydHj.js.map} +1 -1
  61. package/dist/{BCollapse-CZlDVTpI.js → BCollapse-CDLYLSZo.js} +5 -5
  62. package/dist/{BCollapse-CZlDVTpI.js.map → BCollapse-CDLYLSZo.js.map} +1 -1
  63. package/dist/{BCollapse-CTvK48kB.mjs → BCollapse-kqhe4AmL.mjs} +5 -5
  64. package/dist/{BCollapse-CTvK48kB.mjs.map → BCollapse-kqhe4AmL.mjs.map} +1 -1
  65. package/dist/{BContainer-CeHyMYb_.mjs → BContainer-ATfhaxTc.mjs} +4 -4
  66. package/dist/{BContainer-CeHyMYb_.mjs.map → BContainer-ATfhaxTc.mjs.map} +1 -1
  67. package/dist/{BContainer-CNmEk2mi.js → BContainer-CcF6dgtI.js} +4 -4
  68. package/dist/{BContainer-CNmEk2mi.js.map → BContainer-CcF6dgtI.js.map} +1 -1
  69. package/dist/{BDateField-gRWIwMnA.mjs → BDateField-CccP3H1R.mjs} +3 -3
  70. package/dist/{BDateField-gRWIwMnA.mjs.map → BDateField-CccP3H1R.mjs.map} +1 -1
  71. package/dist/{BDateField-B4yL8Pju.js → BDateField-DzZw5FRX.js} +3 -3
  72. package/dist/{BDateField-B4yL8Pju.js.map → BDateField-DzZw5FRX.js.map} +1 -1
  73. package/dist/{BDatePicker-m2drV1fl.js → BDatePicker-BDkzkOcm.js} +3 -3
  74. package/dist/{BDatePicker-m2drV1fl.js.map → BDatePicker-BDkzkOcm.js.map} +1 -1
  75. package/dist/{BDatePicker-ZuMpgD91.mjs → BDatePicker-BnwnSkBg.mjs} +3 -3
  76. package/dist/{BDatePicker-ZuMpgD91.mjs.map → BDatePicker-BnwnSkBg.mjs.map} +1 -1
  77. package/dist/{BDropdown-D2ep4wKG.mjs → BDropdown-0E8x5kk6.mjs} +5 -5
  78. package/dist/{BDropdown-D2ep4wKG.mjs.map → BDropdown-0E8x5kk6.mjs.map} +1 -1
  79. package/dist/{BDropdown-B2vWJ-u0.mjs → BDropdown-B1DbvVzm.mjs} +7 -7
  80. package/dist/{BDropdown-B2vWJ-u0.mjs.map → BDropdown-B1DbvVzm.mjs.map} +1 -1
  81. package/dist/{BDropdown-BSCasYDc.js → BDropdown-BPFtkX3p.js} +7 -7
  82. package/dist/{BDropdown-BSCasYDc.js.map → BDropdown-BPFtkX3p.js.map} +1 -1
  83. package/dist/{BDropdown-CL-erjq8.js → BDropdown-DKCgBzYS.js} +5 -5
  84. package/dist/{BDropdown-CL-erjq8.js.map → BDropdown-DKCgBzYS.js.map} +1 -1
  85. package/dist/{BForm-CriVh5cC.js → BForm-6JlWdQMO.js} +10 -7
  86. package/dist/{BForm-CriVh5cC.js.map → BForm-6JlWdQMO.js.map} +1 -1
  87. package/dist/{BForm-CpNuvbIt.mjs → BForm-BVfW08s5.mjs} +2 -2
  88. package/dist/{BForm-CpNuvbIt.mjs.map → BForm-BVfW08s5.mjs.map} +1 -1
  89. package/dist/{BForm-__5Chigr.mjs → BForm-DJu2hDV_.mjs} +11 -8
  90. package/dist/{BForm-__5Chigr.mjs.map → BForm-DJu2hDV_.mjs.map} +1 -1
  91. package/dist/{BForm-K67Ciyza.js → BForm-cnRpggt9.js} +2 -2
  92. package/dist/{BForm-K67Ciyza.js.map → BForm-cnRpggt9.js.map} +1 -1
  93. package/dist/{BFormCheckbox-xN7AQw4O.mjs → BFormCheckbox-Baf_9BSc.mjs} +9 -6
  94. package/dist/BFormCheckbox-Baf_9BSc.mjs.map +1 -0
  95. package/dist/{BFormCheckbox-g7gtIrhy.js → BFormCheckbox-D5ySHMJ8.js} +9 -6
  96. package/dist/BFormCheckbox-D5ySHMJ8.js.map +1 -0
  97. package/dist/{BFormFile-DXdAyYmv.mjs → BFormFile-EXRrATZm.mjs} +3 -3
  98. package/dist/{BFormFile-DXdAyYmv.mjs.map → BFormFile-EXRrATZm.mjs.map} +1 -1
  99. package/dist/{BFormFile-DC-x9wQo.js → BFormFile-X-BQsYko.js} +3 -3
  100. package/dist/{BFormFile-DC-x9wQo.js.map → BFormFile-X-BQsYko.js.map} +1 -1
  101. package/dist/{BFormGroup-DZTiChgT.js → BFormGroup-Bk1t-D1N.js} +89 -104
  102. package/dist/BFormGroup-Bk1t-D1N.js.map +1 -0
  103. package/dist/{BFormGroup-ayltvQts.mjs → BFormGroup-vysRPb99.mjs} +90 -105
  104. package/dist/BFormGroup-vysRPb99.mjs.map +1 -0
  105. package/dist/{BFormInput-DNuvqbFQ.js → BFormInput-CBwwDjfC.js} +4 -4
  106. package/dist/{BFormInput-DNuvqbFQ.js.map → BFormInput-CBwwDjfC.js.map} +1 -1
  107. package/dist/{BFormInput-NKko58M2.mjs → BFormInput-sEfU3CuN.mjs} +4 -4
  108. package/dist/{BFormInput-NKko58M2.mjs.map → BFormInput-sEfU3CuN.mjs.map} +1 -1
  109. package/dist/{BFormOtp-B4al7MJf.mjs → BFormOtp-C8X3u1od.mjs} +4 -4
  110. package/dist/{BFormOtp-B4al7MJf.mjs.map → BFormOtp-C8X3u1od.mjs.map} +1 -1
  111. package/dist/{BFormOtp-UcLR9oFd.js → BFormOtp-CLrQJRPe.js} +4 -4
  112. package/dist/{BFormOtp-UcLR9oFd.js.map → BFormOtp-CLrQJRPe.js.map} +1 -1
  113. package/dist/{BFormRadio-DX-gM5Rc.js → BFormRadio-B2yu-o2v.js} +9 -6
  114. package/dist/BFormRadio-B2yu-o2v.js.map +1 -0
  115. package/dist/{BFormRadio-DHx68AdL.mjs → BFormRadio-COc_IbxC.mjs} +9 -6
  116. package/dist/BFormRadio-COc_IbxC.mjs.map +1 -0
  117. package/dist/{BFormRating-BR7RMvZG.mjs → BFormRating-CIgPVsH_.mjs} +4 -4
  118. package/dist/{BFormRating-BR7RMvZG.mjs.map → BFormRating-CIgPVsH_.mjs.map} +1 -1
  119. package/dist/{BFormRating-CF-x5qkB.js → BFormRating-CSdRxN5z.js} +4 -4
  120. package/dist/{BFormRating-CF-x5qkB.js.map → BFormRating-CSdRxN5z.js.map} +1 -1
  121. package/dist/{BFormSelect-CUkyKBNN.js → BFormSelect-CI92Dv27.js} +8 -7
  122. package/dist/BFormSelect-CI92Dv27.js.map +1 -0
  123. package/dist/{BFormSelect-Co-ZU8yY.mjs → BFormSelect-P-InkOm-.mjs} +8 -7
  124. package/dist/BFormSelect-P-InkOm-.mjs.map +1 -0
  125. package/dist/{BFormSelectOption-B3BO50XB.mjs → BFormSelectOption-DFN4lPRh.mjs} +3 -3
  126. package/dist/{BFormSelectOption-B3BO50XB.mjs.map → BFormSelectOption-DFN4lPRh.mjs.map} +1 -1
  127. package/dist/{BFormSelectOption-CQ3j1Q5j.js → BFormSelectOption-DrwJucNf.js} +3 -3
  128. package/dist/{BFormSelectOption-CQ3j1Q5j.js.map → BFormSelectOption-DrwJucNf.js.map} +1 -1
  129. package/dist/{BFormSpinbutton-DPCXum9q.js → BFormSpinbutton-1gTz4nTo.js} +4 -4
  130. package/dist/{BFormSpinbutton-DPCXum9q.js.map → BFormSpinbutton-1gTz4nTo.js.map} +1 -1
  131. package/dist/{BFormSpinbutton-CPsVUIh9.mjs → BFormSpinbutton-6qkTBF_4.mjs} +4 -4
  132. package/dist/{BFormSpinbutton-CPsVUIh9.mjs.map → BFormSpinbutton-6qkTBF_4.mjs.map} +1 -1
  133. package/dist/{BFormTag-Bsy6Znok.js → BFormTag-CeV0MSRC.js} +4 -4
  134. package/dist/{BFormTag-Bsy6Znok.js.map → BFormTag-CeV0MSRC.js.map} +1 -1
  135. package/dist/{BFormTag-Cjg1R-Lj.mjs → BFormTag-CnzI39y9.mjs} +4 -4
  136. package/dist/{BFormTag-Cjg1R-Lj.mjs.map → BFormTag-CnzI39y9.mjs.map} +1 -1
  137. package/dist/{BFormTags-D2Dk598Q.mjs → BFormTags-BMltSaKL.mjs} +4 -4
  138. package/dist/{BFormTags-D2Dk598Q.mjs.map → BFormTags-BMltSaKL.mjs.map} +1 -1
  139. package/dist/{BFormTags-BIZyBseI.js → BFormTags-BhO60uiL.js} +4 -4
  140. package/dist/{BFormTags-BIZyBseI.js.map → BFormTags-BhO60uiL.js.map} +1 -1
  141. package/dist/{BFormTextarea-CYh47SxL.js → BFormTextarea-C3Cj0DWj.js} +3 -3
  142. package/dist/{BFormTextarea-CYh47SxL.js.map → BFormTextarea-C3Cj0DWj.js.map} +1 -1
  143. package/dist/{BFormTextarea-M21mholw.mjs → BFormTextarea-DN1gAfSo.mjs} +3 -3
  144. package/dist/{BFormTextarea-M21mholw.mjs.map → BFormTextarea-DN1gAfSo.mjs.map} +1 -1
  145. package/dist/{BFormValidFeedback-DWkakzVO.mjs → BFormValidFeedback-CBYxQLDz.mjs} +44 -4
  146. package/dist/BFormValidFeedback-CBYxQLDz.mjs.map +1 -0
  147. package/dist/{BFormValidFeedback-BhkEhSa0.js → BFormValidFeedback-Kwxh798d.js} +48 -2
  148. package/dist/BFormValidFeedback-Kwxh798d.js.map +1 -0
  149. package/dist/{BImg-DFiJSy66.js → BImg-JKJLgYYT.js} +2 -2
  150. package/dist/{BImg-DFiJSy66.js.map → BImg-JKJLgYYT.js.map} +1 -1
  151. package/dist/{BImg-UUMOpbK0.mjs → BImg-QBS2ECBc.mjs} +2 -2
  152. package/dist/{BImg-UUMOpbK0.mjs.map → BImg-QBS2ECBc.mjs.map} +1 -1
  153. package/dist/{BInputGroup-BAC-B_UM.js → BInputGroup-Bvlfv6VD.js} +3 -3
  154. package/dist/{BInputGroup-BAC-B_UM.js.map → BInputGroup-Bvlfv6VD.js.map} +1 -1
  155. package/dist/{BInputGroup-CiKwWBSu.js → BInputGroup-D4fW324B.js} +3 -3
  156. package/dist/{BInputGroup-CiKwWBSu.js.map → BInputGroup-D4fW324B.js.map} +1 -1
  157. package/dist/{BInputGroup-CfELrPhK.mjs → BInputGroup-DiTSexkT.mjs} +3 -3
  158. package/dist/{BInputGroup-CfELrPhK.mjs.map → BInputGroup-DiTSexkT.mjs.map} +1 -1
  159. package/dist/{BInputGroup-3AVRA3U7.mjs → BInputGroup-X2Z53RJx.mjs} +3 -3
  160. package/dist/{BInputGroup-3AVRA3U7.mjs.map → BInputGroup-X2Z53RJx.mjs.map} +1 -1
  161. package/dist/{BLink-CNFWSz0D.mjs → BLink-Dfgte6dQ.mjs} +3 -3
  162. package/dist/{BLink-CNFWSz0D.mjs.map → BLink-Dfgte6dQ.mjs.map} +1 -1
  163. package/dist/{BLink-uLjtY3bY.js → BLink-kLEjleB1.js} +3 -3
  164. package/dist/{BLink-uLjtY3bY.js.map → BLink-kLEjleB1.js.map} +1 -1
  165. package/dist/{BListGroup-CeXKZio1.js → BListGroup-C8JOzHTz.js} +4 -4
  166. package/dist/{BListGroup-CeXKZio1.js.map → BListGroup-C8JOzHTz.js.map} +1 -1
  167. package/dist/{BListGroup-CGxa7ZEu.mjs → BListGroup-DwTLpNiD.mjs} +4 -4
  168. package/dist/{BListGroup-CGxa7ZEu.mjs.map → BListGroup-DwTLpNiD.mjs.map} +1 -1
  169. package/dist/{BModal-BEmloby5.mjs → BModal-C-ZCau2E.mjs} +7 -7
  170. package/dist/{BModal-BEmloby5.mjs.map → BModal-C-ZCau2E.mjs.map} +1 -1
  171. package/dist/{BModal-6hh-azT8.js → BModal-VstTwEq9.js} +7 -7
  172. package/dist/{BModal-6hh-azT8.js.map → BModal-VstTwEq9.js.map} +1 -1
  173. package/dist/{BNav-u9QwSGj3.js → BNav-DCLambmM.js} +5 -5
  174. package/dist/{BNav-u9QwSGj3.js.map → BNav-DCLambmM.js.map} +1 -1
  175. package/dist/{BNav-EHHlEg1E.mjs → BNav-DfYvjfRK.mjs} +5 -5
  176. package/dist/{BNav-EHHlEg1E.mjs.map → BNav-DfYvjfRK.mjs.map} +1 -1
  177. package/dist/{BNavbar-s8yvmhyz.js → BNavbar-BLWaZJRP.js} +4 -4
  178. package/dist/{BNavbar-s8yvmhyz.js.map → BNavbar-BLWaZJRP.js.map} +1 -1
  179. package/dist/{BNavbar-kgHIo_Gr.mjs → BNavbar-xYaikQVY.mjs} +4 -4
  180. package/dist/{BNavbar-kgHIo_Gr.mjs.map → BNavbar-xYaikQVY.mjs.map} +1 -1
  181. package/dist/{BOffcanvas-CwH0DqSG.mjs → BOffcanvas-CQb9XNvS.mjs} +6 -6
  182. package/dist/{BOffcanvas-CwH0DqSG.mjs.map → BOffcanvas-CQb9XNvS.mjs.map} +1 -1
  183. package/dist/{BOffcanvas-DdiP19Xz.js → BOffcanvas-DTRiZzwN.js} +6 -6
  184. package/dist/{BOffcanvas-DdiP19Xz.js.map → BOffcanvas-DTRiZzwN.js.map} +1 -1
  185. package/dist/{BOverlay-DSUoseNJ.mjs → BOverlay-Bh2PIN_q.mjs} +3 -3
  186. package/dist/{BOverlay-DSUoseNJ.mjs.map → BOverlay-Bh2PIN_q.mjs.map} +1 -1
  187. package/dist/{BOverlay--gZBEMlX.js → BOverlay-Bh4ldxgt.js} +3 -3
  188. package/dist/{BOverlay--gZBEMlX.js.map → BOverlay-Bh4ldxgt.js.map} +1 -1
  189. package/dist/{BPagination-C7MKOk8h.mjs → BPagination-D75q-ZNg.mjs} +2 -2
  190. package/dist/{BPagination-C7MKOk8h.mjs.map → BPagination-D75q-ZNg.mjs.map} +1 -1
  191. package/dist/{BPagination-D6W1LdgK.js → BPagination-fbjFAtxu.js} +2 -2
  192. package/dist/{BPagination-D6W1LdgK.js.map → BPagination-fbjFAtxu.js.map} +1 -1
  193. package/dist/{BPlaceholder-Ckvq3tMu.js → BPlaceholder-B3rs_39w.js} +4 -4
  194. package/dist/{BPlaceholder-Ckvq3tMu.js.map → BPlaceholder-B3rs_39w.js.map} +1 -1
  195. package/dist/{BPlaceholder-D__hNPyQ.mjs → BPlaceholder-DPQ6mCLN.mjs} +4 -4
  196. package/dist/{BPlaceholder-D__hNPyQ.mjs.map → BPlaceholder-DPQ6mCLN.mjs.map} +1 -1
  197. package/dist/{BProgress-I1ucNlpA.mjs → BProgress-BZlrPYhA.mjs} +3 -3
  198. package/dist/{BProgress-I1ucNlpA.mjs.map → BProgress-BZlrPYhA.mjs.map} +1 -1
  199. package/dist/{BProgress-ySlPjpRn.js → BProgress-th0-eZWo.js} +3 -3
  200. package/dist/{BProgress-ySlPjpRn.js.map → BProgress-th0-eZWo.js.map} +1 -1
  201. package/dist/{BRow-CmKiMcMZ.js → BRow-7AOuFiSy.js} +2 -2
  202. package/dist/{BRow-CmKiMcMZ.js.map → BRow-7AOuFiSy.js.map} +1 -1
  203. package/dist/{BRow-U3L8AcKV.mjs → BRow-eGSUYGCW.mjs} +2 -2
  204. package/dist/{BRow-U3L8AcKV.mjs.map → BRow-eGSUYGCW.mjs.map} +1 -1
  205. package/dist/{BSpinner-CAo-XD04.mjs → BSpinner-CUfGqviV.mjs} +2 -2
  206. package/dist/{BSpinner-CAo-XD04.mjs.map → BSpinner-CUfGqviV.mjs.map} +1 -1
  207. package/dist/{BSpinner-C1bm8U4-.js → BSpinner-DbYIp-C7.js} +2 -2
  208. package/dist/{BSpinner-C1bm8U4-.js.map → BSpinner-DbYIp-C7.js.map} +1 -1
  209. package/dist/{BTable-Bt75vbNu.mjs → BTable-CzMtFdt5.mjs} +5 -5
  210. package/dist/{BTable-Bt75vbNu.mjs.map → BTable-CzMtFdt5.mjs.map} +1 -1
  211. package/dist/{BTable-CXxJl2ps.js → BTable-DOpSWDaC.js} +5 -5
  212. package/dist/{BTable-CXxJl2ps.js.map → BTable-DOpSWDaC.js.map} +1 -1
  213. package/dist/{BTableSimple-pyz_6D4s.js → BTableSimple-BkdGAAKb.js} +3 -3
  214. package/dist/{BTableSimple-pyz_6D4s.js.map → BTableSimple-BkdGAAKb.js.map} +1 -1
  215. package/dist/{BTableSimple-CThwYBVl.mjs → BTableSimple-C-jn9Nwh.mjs} +3 -3
  216. package/dist/{BTableSimple-CThwYBVl.mjs.map → BTableSimple-C-jn9Nwh.mjs.map} +1 -1
  217. package/dist/{BTabs-C8rUY0Lx.js → BTabs-CvecFg5N.js} +4 -4
  218. package/dist/{BTabs-C8rUY0Lx.js.map → BTabs-CvecFg5N.js.map} +1 -1
  219. package/dist/{BTabs-Krs_Lv-R.mjs → BTabs-D_vWlBjT.mjs} +4 -4
  220. package/dist/{BTabs-Krs_Lv-R.mjs.map → BTabs-D_vWlBjT.mjs.map} +1 -1
  221. package/dist/{BTimeField-DSf4cMpN.mjs → BTimeField-BSDaZogC.mjs} +3 -3
  222. package/dist/{BTimeField-DSf4cMpN.mjs.map → BTimeField-BSDaZogC.mjs.map} +1 -1
  223. package/dist/{BTimeField-W2LqGCjB.js → BTimeField-BT5HXecp.js} +3 -3
  224. package/dist/{BTimeField-W2LqGCjB.js.map → BTimeField-BT5HXecp.js.map} +1 -1
  225. package/dist/{BToast-DZuxMDbe.js → BToast-DR0pek4W.js} +8 -8
  226. package/dist/{BToast-DZuxMDbe.js.map → BToast-DR0pek4W.js.map} +1 -1
  227. package/dist/{BToast-Dcfnqbxt.mjs → BToast-Y8BayxES.mjs} +8 -8
  228. package/dist/{BToast-Dcfnqbxt.mjs.map → BToast-Y8BayxES.mjs.map} +1 -1
  229. package/dist/{BTooltip-BWij0hjE.mjs → BTooltip-CVP8HdkU.mjs} +3 -3
  230. package/dist/{BTooltip-BWij0hjE.mjs.map → BTooltip-CVP8HdkU.mjs.map} +1 -1
  231. package/dist/{BTooltip-BGTjsV1z.js → BTooltip-DPLYtaL1.js} +3 -3
  232. package/dist/{BTooltip-BGTjsV1z.js.map → BTooltip-DPLYtaL1.js.map} +1 -1
  233. package/dist/bootstrap-vue-next.mjs +59 -59
  234. package/dist/bootstrap-vue-next.umd.js +59 -59
  235. package/dist/composables/useProvideFormGroupData.d.mts +15 -0
  236. package/dist/composables/useProvideFormGroupData.d.ts +15 -0
  237. package/dist/{floatingUi-8xXp54zf.mjs → floatingUi-62aeQtAb.mjs} +4 -4
  238. package/dist/{floatingUi-8xXp54zf.mjs.map → floatingUi-62aeQtAb.mjs.map} +1 -1
  239. package/dist/{floatingUi-9SWu8BgZ.js → floatingUi-DQ5bHmy3.js} +4 -4
  240. package/dist/{floatingUi-9SWu8BgZ.js.map → floatingUi-DQ5bHmy3.js.map} +1 -1
  241. package/dist/{keys-durSVUrO.js → keys-BMye8nSf.js} +10 -1
  242. package/dist/{keys-durSVUrO.js.map → keys-BMye8nSf.js.map} +1 -1
  243. package/dist/{keys-CQKrwmvN.mjs → keys-DU7sQgl3.mjs} +10 -1
  244. package/dist/{keys-CQKrwmvN.mjs.map → keys-DU7sQgl3.mjs.map} +1 -1
  245. package/dist/src/components/BAccordion/index.mjs +1 -1
  246. package/dist/src/components/BAccordion/index.umd.js +1 -1
  247. package/dist/src/components/BAlert/index.mjs +1 -1
  248. package/dist/src/components/BAlert/index.umd.js +1 -1
  249. package/dist/src/components/BApp/index.mjs +1 -1
  250. package/dist/src/components/BApp/index.umd.js +1 -1
  251. package/dist/src/components/BAspect/index.mjs +1 -1
  252. package/dist/src/components/BAspect/index.umd.js +1 -1
  253. package/dist/src/components/BAutocomplete/index.mjs +1 -1
  254. package/dist/src/components/BAutocomplete/index.umd.js +1 -1
  255. package/dist/src/components/BAvatar/index.mjs +1 -1
  256. package/dist/src/components/BAvatar/index.umd.js +1 -1
  257. package/dist/src/components/BBadge/index.mjs +1 -1
  258. package/dist/src/components/BBadge/index.umd.js +1 -1
  259. package/dist/src/components/BBreadcrumb/index.mjs +1 -1
  260. package/dist/src/components/BBreadcrumb/index.umd.js +1 -1
  261. package/dist/src/components/BButton/index.mjs +3 -3
  262. package/dist/src/components/BButton/index.umd.js +3 -3
  263. package/dist/src/components/BCard/index.mjs +2 -2
  264. package/dist/src/components/BCard/index.umd.js +2 -2
  265. package/dist/src/components/BCarousel/index.mjs +1 -1
  266. package/dist/src/components/BCarousel/index.umd.js +1 -1
  267. package/dist/src/components/BCol/index.mjs +1 -1
  268. package/dist/src/components/BCol/index.umd.js +1 -1
  269. package/dist/src/components/BCollapse/index.mjs +1 -1
  270. package/dist/src/components/BCollapse/index.umd.js +1 -1
  271. package/dist/src/components/BContainer/index.mjs +3 -3
  272. package/dist/src/components/BContainer/index.umd.js +3 -3
  273. package/dist/src/components/BDateField/index.mjs +1 -1
  274. package/dist/src/components/BDateField/index.umd.js +1 -1
  275. package/dist/src/components/BDatePicker/index.mjs +1 -1
  276. package/dist/src/components/BDatePicker/index.umd.js +1 -1
  277. package/dist/src/components/BDropdown/index.mjs +2 -2
  278. package/dist/src/components/BDropdown/index.umd.js +2 -2
  279. package/dist/src/components/BForm/index.mjs +3 -3
  280. package/dist/src/components/BForm/index.umd.js +3 -3
  281. package/dist/src/components/BFormCheckbox/index.mjs +1 -1
  282. package/dist/src/components/BFormCheckbox/index.umd.js +1 -1
  283. package/dist/src/components/BFormFile/index.mjs +1 -1
  284. package/dist/src/components/BFormFile/index.umd.js +1 -1
  285. package/dist/src/components/BFormGroup/index.mjs +1 -1
  286. package/dist/src/components/BFormGroup/index.umd.js +1 -1
  287. package/dist/src/components/BFormInput/index.mjs +1 -1
  288. package/dist/src/components/BFormInput/index.umd.js +1 -1
  289. package/dist/src/components/BFormOtp/index.mjs +1 -1
  290. package/dist/src/components/BFormOtp/index.umd.js +1 -1
  291. package/dist/src/components/BFormRadio/index.mjs +1 -1
  292. package/dist/src/components/BFormRadio/index.umd.js +1 -1
  293. package/dist/src/components/BFormRating/index.mjs +1 -1
  294. package/dist/src/components/BFormRating/index.umd.js +1 -1
  295. package/dist/src/components/BFormSelect/index.mjs +2 -2
  296. package/dist/src/components/BFormSelect/index.umd.js +2 -2
  297. package/dist/src/components/BFormSpinbutton/index.mjs +1 -1
  298. package/dist/src/components/BFormSpinbutton/index.umd.js +1 -1
  299. package/dist/src/components/BFormTags/index.mjs +2 -2
  300. package/dist/src/components/BFormTags/index.umd.js +2 -2
  301. package/dist/src/components/BFormTextarea/index.mjs +1 -1
  302. package/dist/src/components/BFormTextarea/index.umd.js +1 -1
  303. package/dist/src/components/BImg/index.mjs +1 -1
  304. package/dist/src/components/BImg/index.umd.js +1 -1
  305. package/dist/src/components/BInputGroup/index.mjs +2 -2
  306. package/dist/src/components/BInputGroup/index.umd.js +2 -2
  307. package/dist/src/components/BLink/index.mjs +1 -1
  308. package/dist/src/components/BLink/index.umd.js +1 -1
  309. package/dist/src/components/BListGroup/index.mjs +1 -1
  310. package/dist/src/components/BListGroup/index.umd.js +1 -1
  311. package/dist/src/components/BModal/index.mjs +1 -1
  312. package/dist/src/components/BModal/index.umd.js +1 -1
  313. package/dist/src/components/BNav/index.mjs +1 -1
  314. package/dist/src/components/BNav/index.umd.js +1 -1
  315. package/dist/src/components/BNavbar/index.mjs +1 -1
  316. package/dist/src/components/BNavbar/index.umd.js +1 -1
  317. package/dist/src/components/BOffcanvas/index.mjs +1 -1
  318. package/dist/src/components/BOffcanvas/index.umd.js +1 -1
  319. package/dist/src/components/BOverlay/index.mjs +1 -1
  320. package/dist/src/components/BOverlay/index.umd.js +1 -1
  321. package/dist/src/components/BPagination/index.mjs +1 -1
  322. package/dist/src/components/BPagination/index.umd.js +1 -1
  323. package/dist/src/components/BPlaceholder/index.mjs +1 -1
  324. package/dist/src/components/BPlaceholder/index.umd.js +1 -1
  325. package/dist/src/components/BPopover/index.mjs +1 -1
  326. package/dist/src/components/BPopover/index.umd.js +1 -1
  327. package/dist/src/components/BProgress/index.mjs +1 -1
  328. package/dist/src/components/BProgress/index.umd.js +1 -1
  329. package/dist/src/components/BRow/index.mjs +1 -1
  330. package/dist/src/components/BRow/index.umd.js +1 -1
  331. package/dist/src/components/BSpinner/index.mjs +1 -1
  332. package/dist/src/components/BSpinner/index.umd.js +1 -1
  333. package/dist/src/components/BTable/index.mjs +2 -2
  334. package/dist/src/components/BTable/index.umd.js +2 -2
  335. package/dist/src/components/BTabs/index.mjs +1 -1
  336. package/dist/src/components/BTabs/index.umd.js +1 -1
  337. package/dist/src/components/BTimeField/index.mjs +1 -1
  338. package/dist/src/components/BTimeField/index.umd.js +1 -1
  339. package/dist/src/components/BToast/index.mjs +1 -1
  340. package/dist/src/components/BToast/index.umd.js +1 -1
  341. package/dist/src/components/BTooltip/index.mjs +1 -1
  342. package/dist/src/components/BTooltip/index.umd.js +1 -1
  343. package/dist/src/components/index.mjs +59 -59
  344. package/dist/src/components/index.umd.js +59 -59
  345. package/dist/src/composables/orchestratorShared/index.mjs +1 -1
  346. package/dist/src/composables/orchestratorShared/index.umd.js +1 -1
  347. package/dist/src/composables/useBreadcrumb/index.mjs +1 -1
  348. package/dist/src/composables/useBreadcrumb/index.umd.js +1 -1
  349. package/dist/src/composables/useModal/index.mjs +2 -2
  350. package/dist/src/composables/useModal/index.umd.js +2 -2
  351. package/dist/src/composables/usePopover/index.mjs +3 -3
  352. package/dist/src/composables/usePopover/index.umd.js +3 -3
  353. package/dist/src/composables/useProvideDefaults/index.mjs +1 -1
  354. package/dist/src/composables/useProvideDefaults/index.umd.js +1 -1
  355. package/dist/src/composables/useRegistry/index.mjs +1 -1
  356. package/dist/src/composables/useRegistry/index.umd.js +1 -1
  357. package/dist/src/composables/useToast/index.mjs +2 -2
  358. package/dist/src/composables/useToast/index.umd.js +2 -2
  359. package/dist/src/composables/useToggle/index.mjs +1 -1
  360. package/dist/src/composables/useToggle/index.umd.js +1 -1
  361. package/dist/src/directives/BPopover/index.mjs +2 -2
  362. package/dist/src/directives/BPopover/index.umd.js +2 -2
  363. package/dist/src/directives/BScrollspy/index.mjs +1 -1
  364. package/dist/src/directives/BScrollspy/index.umd.js +1 -1
  365. package/dist/src/directives/BToggle/index.mjs +2 -2
  366. package/dist/src/directives/BToggle/index.umd.js +2 -2
  367. package/dist/src/directives/BTooltip/index.mjs +2 -2
  368. package/dist/src/directives/BTooltip/index.umd.js +2 -2
  369. package/dist/src/plugins/createBootstrap/index.mjs +1 -1
  370. package/dist/src/plugins/createBootstrap/index.umd.js +1 -1
  371. package/dist/src/plugins/orchestrator/index.mjs +1 -1
  372. package/dist/src/plugins/orchestrator/index.umd.js +1 -1
  373. package/dist/src/plugins/registry/index.mjs +1 -1
  374. package/dist/src/plugins/registry/index.umd.js +1 -1
  375. package/dist/src/plugins/rtl/index.mjs +1 -1
  376. package/dist/src/plugins/rtl/index.umd.js +1 -1
  377. package/dist/{useDefaults-DsLf4iRY.js → useDefaults-C0CYry78.js} +2 -2
  378. package/dist/{useDefaults-DsLf4iRY.js.map → useDefaults-C0CYry78.js.map} +1 -1
  379. package/dist/{useDefaults-BKgBaqOV.mjs → useDefaults-DseelK6y.mjs} +2 -2
  380. package/dist/{useDefaults-BKgBaqOV.mjs.map → useDefaults-DseelK6y.mjs.map} +1 -1
  381. package/dist/{useFormInput-CA4FYoV7.mjs → useFormInput-CXl8rpD0.mjs} +5 -4
  382. package/dist/useFormInput-CXl8rpD0.mjs.map +1 -0
  383. package/dist/{useFormInput-D31FCDxr.js → useFormInput-ip9hN2AU.js} +5 -4
  384. package/dist/useFormInput-ip9hN2AU.js.map +1 -0
  385. package/dist/{useFormSelect-C0nvno12.mjs → useFormSelect-BM0rsjni.mjs} +9 -2
  386. package/dist/useFormSelect-BM0rsjni.mjs.map +1 -0
  387. package/dist/{useFormSelect-CjAziZpu.js → useFormSelect-ClmzGzOy.js} +9 -2
  388. package/dist/useFormSelect-ClmzGzOy.js.map +1 -0
  389. package/dist/{useId-DHrBgM7P.js → useId-BkAY2oh6.js} +2 -2
  390. package/dist/{useId-DHrBgM7P.js.map → useId-BkAY2oh6.js.map} +1 -1
  391. package/dist/{useId-BKZFSYm8.mjs → useId-D1sqXtwx.mjs} +2 -2
  392. package/dist/{useId-BKZFSYm8.mjs.map → useId-D1sqXtwx.mjs.map} +1 -1
  393. package/dist/{useRtl-DDPRnA7g.js → useRtl-BSgvbs5F.js} +2 -2
  394. package/dist/{useRtl-DDPRnA7g.js.map → useRtl-BSgvbs5F.js.map} +1 -1
  395. package/dist/{useRtl-VR3M2Txg.mjs → useRtl-CGoXBxNo.mjs} +2 -2
  396. package/dist/{useRtl-VR3M2Txg.mjs.map → useRtl-CGoXBxNo.mjs.map} +1 -1
  397. package/dist/{useShowHide-DKdljnpv.mjs → useShowHide-CBFt1_EW.mjs} +2 -2
  398. package/dist/{useShowHide-DKdljnpv.mjs.map → useShowHide-CBFt1_EW.mjs.map} +1 -1
  399. package/dist/{useShowHide-BhdrR1wG.js → useShowHide-CHm2uUep.js} +2 -2
  400. package/dist/{useShowHide-BhdrR1wG.js.map → useShowHide-CHm2uUep.js.map} +1 -1
  401. package/dist/utils/keys.d.mts +11 -1
  402. package/dist/utils/keys.d.ts +11 -1
  403. package/dist/{utils-BbYwYPyP.mjs → utils-CWvndqPg.mjs} +3 -3
  404. package/dist/{utils-BbYwYPyP.mjs.map → utils-CWvndqPg.mjs.map} +1 -1
  405. package/dist/{utils-ePxMJ7rd.js → utils-Dk9yAtbs.js} +3 -3
  406. package/dist/{utils-ePxMJ7rd.js.map → utils-Dk9yAtbs.js.map} +1 -1
  407. package/package.json +1 -1
  408. package/dist/BFormCheckbox-g7gtIrhy.js.map +0 -1
  409. package/dist/BFormCheckbox-xN7AQw4O.mjs.map +0 -1
  410. package/dist/BFormGroup-DZTiChgT.js.map +0 -1
  411. package/dist/BFormGroup-ayltvQts.mjs.map +0 -1
  412. package/dist/BFormRadio-DHx68AdL.mjs.map +0 -1
  413. package/dist/BFormRadio-DX-gM5Rc.js.map +0 -1
  414. package/dist/BFormSelect-CUkyKBNN.js.map +0 -1
  415. package/dist/BFormSelect-Co-ZU8yY.mjs.map +0 -1
  416. package/dist/BFormValidFeedback-BhkEhSa0.js.map +0 -1
  417. package/dist/BFormValidFeedback-DWkakzVO.mjs.map +0 -1
  418. package/dist/useFormInput-CA4FYoV7.mjs.map +0 -1
  419. package/dist/useFormInput-D31FCDxr.js.map +0 -1
  420. package/dist/useFormSelect-C0nvno12.mjs.map +0 -1
  421. package/dist/useFormSelect-CjAziZpu.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"BFormTags-BIZyBseI.js","names":[],"sources":["../src/components/BFormTags/BFormTags.vue","../src/components/BFormTags/BFormTags.vue"],"sourcesContent":["<template>\n <div\n :id=\"computedId\"\n class=\"b-form-tags form-control h-auto\"\n :class=\"computedClasses\"\n role=\"group\"\n tabindex=\"-1\"\n @click=\"onClick\"\n @focusin=\"onFocusin\"\n @focusout=\"emit('focusout', $event)\"\n >\n <output\n :id=\"`${computedId}selected_tags__`\"\n class=\"visually-hidden\"\n :for=\"_inputId\"\n :aria-live=\"focused ? 'polite' : 'off'\"\n aria-atomic=\"true\"\n aria-relevant=\"additions\"\n >{{ tags.join(', ') }}</output\n >\n <div\n :id=\"`${computedId}removed_tags__`\"\n role=\"status\"\n :aria-live=\"focused ? 'assertive' : 'off'\"\n aria-atomic=\"true\"\n class=\"visually-hidden\"\n >\n ({{ props.tagRemovedLabel }}) {{ lastRemovedTag }}\n </div>\n\n <slot\n :add-button-text=\"props.addButtonText\"\n :add-button-variant=\"props.addButtonVariant\"\n :add-tag\n :disable-add-button=\"disableAddButton\"\n :disabled=\"props.disabled\"\n :duplicate-tag-text=\"props.duplicateTagText\"\n :duplicate-tags=\"duplicateTags\"\n :form=\"props.form\"\n :input-attrs=\"{\n ...props.inputAttrs,\n disabled: props.disabled,\n form: props.form,\n id: _inputId,\n value: inputValue,\n }\"\n :input-class=\"props.inputClass\"\n :input-handlers=\"{\n input: onInput,\n keydown: onKeydown,\n change: onChange,\n }\"\n :input-id=\"_inputId\"\n :input-type=\"props.inputType\"\n :invalid-tag-text=\"props.invalidTagText\"\n :invalid-tags\n :is-duplicate\n :is-invalid\n :is-limit-reached=\"isLimitReached\"\n :limit-tags-text=\"props.limitTagsText\"\n :limit=\"limitNumber\"\n :no-tag-remove=\"props.noTagRemove\"\n :placeholder=\"props.placeholder\"\n :remove-tag\n :required=\"props.required\"\n :separator=\"props.separator\"\n :size=\"props.size\"\n :state=\"props.state\"\n :tag-class=\"props.tagClass\"\n :tag-pills=\"props.tagPills\"\n :tag-remove-label=\"props.tagRemoveLabel\"\n :tag-variant=\"props.tagVariant\"\n :tags\n >\n <ul\n :id=\"`${computedId}tag_list__`\"\n class=\"b-form-tags-list list-unstyled mb-0 d-flex flex-wrap align-items-center\"\n >\n <template v-for=\"(tag, index) in tags\" :key=\"index\">\n <slot\n name=\"tag\"\n :tag=\"tag\"\n :tag-class=\"props.tagClass\"\n :tag-variant=\"props.tagVariant\"\n :tag-pills=\"props.tagPills\"\n :remove-tag=\"removeTag\"\n >\n <BFormTag\n :key=\"tag\"\n :class=\"props.tagClass\"\n tag=\"li\"\n :variant=\"props.tagVariant\"\n :pill=\"props.tagPills\"\n :no-remove=\"props.noTagRemove\"\n :disabled=\"props.disabled\"\n @remove=\"removeTag\"\n >{{ tag }}</BFormTag\n >\n </slot>\n </template>\n <li\n role=\"none\"\n aria-live=\"off\"\n class=\"b-from-tags-field flex-grow-1\"\n :aria-controls=\"`${computedId}tag_list__`\"\n >\n <div role=\"group\" class=\"d-flex\">\n <input\n :id=\"_inputId\"\n ref=\"_input\"\n :disabled=\"props.disabled\"\n :value=\"inputValue\"\n :type=\"props.inputType\"\n :placeholder=\"props.placeholder\"\n class=\"b-form-tags-input w-100 flex-grow-1 p-0 m-0 bg-transparent border-0\"\n style=\"outline: currentcolor none 0; min-width: 5rem\"\n v-bind=\"props.inputAttrs\"\n :form=\"props.form\"\n :required=\"props.required || undefined\"\n :aria-required=\"props.required || undefined\"\n @input=\"onInput\"\n @change=\"onChange\"\n @focus=\"onFocus\"\n @blur=\"onBlur\"\n />\n <button\n v-if=\"disableAddButton\"\n type=\"button\"\n class=\"btn b-form-tags-button py-0\"\n :class=\"[\n inputClass,\n {\n [`btn-${props.addButtonVariant}`]: props.addButtonVariant !== null,\n 'disabled invisible': inputValue.length === 0,\n },\n ]\"\n style=\"font-size: 90%\"\n :disabled=\"props.disabled || inputValue.length === 0 || isLimitReached\"\n @click=\"addTag(inputValue)\"\n >\n <slot name=\"add-button-text\">{{ props.addButtonText }}</slot>\n </button>\n </div>\n </li>\n </ul>\n <div :aria-live=\"props.feedbackAriaLive\" aria-atomic=\"true\">\n <div v-if=\"isInvalid\" class=\"d-block invalid-feedback\">\n {{ props.invalidTagText }}: {{ inputValue }}\n </div>\n <small v-if=\"isDuplicate\" class=\"form-text text-body-secondary\"\n >{{ props.duplicateTagText }}: {{ inputValue }}</small\n >\n <small v-if=\"tags.length === props.limit\" class=\"form-text text-body-secondary\">\n {{ props.limitTagsText }}</small\n >\n </div>\n </slot>\n <template v-if=\"props.name\">\n <input\n v-for=\"(tag, index) in tags\"\n :key=\"index\"\n type=\"hidden\"\n :name=\"props.name\"\n :value=\"tag\"\n />\n </template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {onKeyStroke, syncRef, useFocus, useToNumber} from '@vueuse/core'\nimport {computed, ref, useTemplateRef} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {escapeRegExpChars} from '../../utils/stringUtils'\nimport BFormTag from './BFormTag.vue'\nimport {useId} from '../../composables/useId'\nimport {useStateClass} from '../../composables/useStateClass'\nimport type {BFormTagsEmits, BFormTagsProps, BFormTagsSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<Omit<BFormTagsProps, 'modelValue'>>(), {\n addButtonText: 'Add',\n addButtonVariant: 'outline-secondary',\n addOnChange: false,\n autofocus: false,\n disabled: false,\n duplicateTagText: 'Duplicate tag(s)',\n feedbackAriaLive: 'assertive',\n form: undefined,\n ignoreInputFocusSelector: () => ['.b-form-tag', 'button', 'input', 'select'],\n inputAttrs: undefined,\n inputClass: undefined,\n inputId: undefined,\n inputType: 'text',\n invalidTagText: 'Invalid tag(s)',\n limit: undefined,\n limitTagsText: 'Tag limit reached',\n name: undefined,\n noAddOnEnter: false,\n noOuterFocus: false,\n noTagRemove: false,\n placeholder: 'Add tag...',\n removeOnDelete: false,\n required: false,\n separator: undefined,\n size: undefined,\n state: null,\n tagClass: undefined,\n tagPills: false,\n tagRemoveLabel: undefined,\n tagRemovedLabel: 'Tag removed',\n tagValidator: () => true,\n tagVariant: 'secondary',\n})\nconst props = useDefaults(_props, 'BFormTags')\nconst emit = defineEmits<BFormTagsEmits>()\ndefineSlots<BFormTagsSlots>()\n\nconst modelValue = defineModel<Exclude<BFormTagsProps['modelValue'], undefined>>({\n default: () => [],\n})\n\nconst computedId = useId()\n\nconst limitNumber = useToNumber(() => props.limit ?? Number.NaN)\n\nconst stateClass = useStateClass(() => props.state)\n\nconst input = useTemplateRef('_input')\n\nconst {focused} = useFocus(input, {\n initialValue: props.autofocus,\n})\n\nconst _inputId = computed(() => props.inputId || `${computedId.value}input__`)\nconst tags = ref<string[]>([...modelValue.value])\nconst inputValue = ref<string>('')\nconst shouldRemoveOnDelete = ref<boolean>(modelValue.value.length > 0)\nconst lastRemovedTag = ref<string>('')\nconst validTags = ref<string[]>([])\nconst invalidTags = ref<string[]>([])\nconst duplicateTags = ref<string[]>([])\n\nsyncRef(modelValue, tags, {\n direction: 'ltr',\n transform: {\n ltr: (v) => [...v],\n },\n})\n\nconst computedClasses = computed(() => [\n stateClass.value,\n {\n [`form-control-${props.size}`]: props.size !== undefined,\n disabled: props.disabled,\n focus: focused.value,\n },\n])\n\nconst isDuplicate = computed(() => tags.value.includes(inputValue.value))\nconst isInvalid = computed(() =>\n inputValue.value === '' ? false : !props.tagValidator(inputValue.value)\n)\nconst isLimitReached = computed(() => tags.value.length === limitNumber.value)\nconst disableAddButton = computed(() => !isInvalid.value && !isDuplicate.value)\n\nconst onFocusin = (e: Readonly<FocusEvent>): void => {\n if (props.disabled) {\n const target = e.target as HTMLDivElement\n target.blur()\n return\n }\n\n emit('focusin', e)\n}\n\nconst onClick = (e: Readonly<MouseEvent>): void => {\n if (props.disabled || props.noOuterFocus) {\n return\n }\n\n const {target} = e\n const ignoreSelectors = props.ignoreInputFocusSelector\n if (ignoreSelectors && target instanceof Element) {\n const selector =\n typeof ignoreSelectors === 'string' ? ignoreSelectors : ignoreSelectors.join(',')\n\n if (selector && target.closest(selector)) {\n return\n }\n }\n\n focused.value = true\n}\n\nconst onFocus = (e: Readonly<FocusEvent>): void => {\n if (props.disabled || props.noOuterFocus) {\n return\n }\n\n focused.value = true\n emit('focus', e)\n}\n\nconst onBlur = (e: Readonly<FocusEvent>): void => {\n focused.value = false\n emit('blur', e)\n}\n\nconst onInput = (e: Readonly<Event> | string): void => {\n const value = typeof e === 'string' ? e : (e.target as HTMLInputElement).value\n\n shouldRemoveOnDelete.value = false\n\n if (props.separator?.includes(value.charAt(0)) && value.length > 0) {\n if (input.value) {\n input.value.value = ''\n }\n return\n }\n\n inputValue.value = value\n\n if (props.separator?.includes(value.charAt(value.length - 1))) {\n addTag(value.slice(0, value.length - 1))\n return\n }\n\n validTags.value = props.tagValidator(value) && !isDuplicate.value ? [value] : []\n invalidTags.value = props.tagValidator(value) ? [] : [value]\n duplicateTags.value = isDuplicate.value ? [value] : []\n\n emit('tag-state', validTags.value, invalidTags.value, duplicateTags.value)\n}\n\nconst onChange = (e: Readonly<Event>): void => {\n if (props.addOnChange) {\n onInput(e)\n\n if (!isDuplicate.value) {\n addTag(inputValue.value)\n }\n }\n}\n\nconst onKeydown = (e: Readonly<KeyboardEvent>): void => {\n if ((e.key === 'Enter' || e.code === 'NumpadEnter') && !props.noAddOnEnter) {\n addTag(inputValue.value)\n return\n }\n\n if (\n (e.key === 'Backspace' || e.key === 'Delete') &&\n props.removeOnDelete &&\n inputValue.value === '' &&\n shouldRemoveOnDelete.value &&\n tags.value.length > 0\n ) {\n removeTag(tags.value[tags.value.length - 1])\n } else {\n shouldRemoveOnDelete.value = true\n }\n}\n\nonKeyStroke(onKeydown, {target: input, passive: true})\n\nconst separator = computed(() => {\n if (!props.separator) {\n return\n }\n\n return typeof props.separator === 'string' ? props.separator : props.separator.join('')\n})\n\nconst separatorRegExp = computed(() => {\n if (!separator.value) {\n return\n }\n\n return new RegExp(`[${escapeRegExpChars(separator.value)}]+`)\n})\n\nconst addTag = (tag?: string): void => {\n tag = (tag ?? inputValue.value).trim()\n\n const newTags = separatorRegExp.value\n ? tag.split(separatorRegExp.value).map((t) => t.trim())\n : [tag]\n const validTags: string[] = []\n\n for (const newTag of newTags) {\n if (newTag === '' || isDuplicate.value || !props.tagValidator(newTag)) {\n continue\n }\n\n if (limitNumber.value && isLimitReached.value) {\n break\n }\n\n validTags.push(newTag)\n }\n\n const newValue = [...modelValue.value, ...validTags]\n inputValue.value = ''\n shouldRemoveOnDelete.value = true\n modelValue.value = newValue\n if (validTags.length > 0) {\n emit('tag-added', validTags)\n }\n focused.value = true\n}\n\nconst removeTag = (tag?: string): void => {\n const tagIndex = tags.value.indexOf(tag?.toString() ?? '')\n if (tagIndex === -1) return\n lastRemovedTag.value = tags.value.splice(tagIndex, 1).toString()\n modelValue.value = tags.value\n}\n\ndefineExpose({\n blur: () => {\n focused.value = false\n },\n element: input,\n focus: () => {\n focused.value = true\n },\n inputValue,\n})\n</script>\n","<template>\n <div\n :id=\"computedId\"\n class=\"b-form-tags form-control h-auto\"\n :class=\"computedClasses\"\n role=\"group\"\n tabindex=\"-1\"\n @click=\"onClick\"\n @focusin=\"onFocusin\"\n @focusout=\"emit('focusout', $event)\"\n >\n <output\n :id=\"`${computedId}selected_tags__`\"\n class=\"visually-hidden\"\n :for=\"_inputId\"\n :aria-live=\"focused ? 'polite' : 'off'\"\n aria-atomic=\"true\"\n aria-relevant=\"additions\"\n >{{ tags.join(', ') }}</output\n >\n <div\n :id=\"`${computedId}removed_tags__`\"\n role=\"status\"\n :aria-live=\"focused ? 'assertive' : 'off'\"\n aria-atomic=\"true\"\n class=\"visually-hidden\"\n >\n ({{ props.tagRemovedLabel }}) {{ lastRemovedTag }}\n </div>\n\n <slot\n :add-button-text=\"props.addButtonText\"\n :add-button-variant=\"props.addButtonVariant\"\n :add-tag\n :disable-add-button=\"disableAddButton\"\n :disabled=\"props.disabled\"\n :duplicate-tag-text=\"props.duplicateTagText\"\n :duplicate-tags=\"duplicateTags\"\n :form=\"props.form\"\n :input-attrs=\"{\n ...props.inputAttrs,\n disabled: props.disabled,\n form: props.form,\n id: _inputId,\n value: inputValue,\n }\"\n :input-class=\"props.inputClass\"\n :input-handlers=\"{\n input: onInput,\n keydown: onKeydown,\n change: onChange,\n }\"\n :input-id=\"_inputId\"\n :input-type=\"props.inputType\"\n :invalid-tag-text=\"props.invalidTagText\"\n :invalid-tags\n :is-duplicate\n :is-invalid\n :is-limit-reached=\"isLimitReached\"\n :limit-tags-text=\"props.limitTagsText\"\n :limit=\"limitNumber\"\n :no-tag-remove=\"props.noTagRemove\"\n :placeholder=\"props.placeholder\"\n :remove-tag\n :required=\"props.required\"\n :separator=\"props.separator\"\n :size=\"props.size\"\n :state=\"props.state\"\n :tag-class=\"props.tagClass\"\n :tag-pills=\"props.tagPills\"\n :tag-remove-label=\"props.tagRemoveLabel\"\n :tag-variant=\"props.tagVariant\"\n :tags\n >\n <ul\n :id=\"`${computedId}tag_list__`\"\n class=\"b-form-tags-list list-unstyled mb-0 d-flex flex-wrap align-items-center\"\n >\n <template v-for=\"(tag, index) in tags\" :key=\"index\">\n <slot\n name=\"tag\"\n :tag=\"tag\"\n :tag-class=\"props.tagClass\"\n :tag-variant=\"props.tagVariant\"\n :tag-pills=\"props.tagPills\"\n :remove-tag=\"removeTag\"\n >\n <BFormTag\n :key=\"tag\"\n :class=\"props.tagClass\"\n tag=\"li\"\n :variant=\"props.tagVariant\"\n :pill=\"props.tagPills\"\n :no-remove=\"props.noTagRemove\"\n :disabled=\"props.disabled\"\n @remove=\"removeTag\"\n >{{ tag }}</BFormTag\n >\n </slot>\n </template>\n <li\n role=\"none\"\n aria-live=\"off\"\n class=\"b-from-tags-field flex-grow-1\"\n :aria-controls=\"`${computedId}tag_list__`\"\n >\n <div role=\"group\" class=\"d-flex\">\n <input\n :id=\"_inputId\"\n ref=\"_input\"\n :disabled=\"props.disabled\"\n :value=\"inputValue\"\n :type=\"props.inputType\"\n :placeholder=\"props.placeholder\"\n class=\"b-form-tags-input w-100 flex-grow-1 p-0 m-0 bg-transparent border-0\"\n style=\"outline: currentcolor none 0; min-width: 5rem\"\n v-bind=\"props.inputAttrs\"\n :form=\"props.form\"\n :required=\"props.required || undefined\"\n :aria-required=\"props.required || undefined\"\n @input=\"onInput\"\n @change=\"onChange\"\n @focus=\"onFocus\"\n @blur=\"onBlur\"\n />\n <button\n v-if=\"disableAddButton\"\n type=\"button\"\n class=\"btn b-form-tags-button py-0\"\n :class=\"[\n inputClass,\n {\n [`btn-${props.addButtonVariant}`]: props.addButtonVariant !== null,\n 'disabled invisible': inputValue.length === 0,\n },\n ]\"\n style=\"font-size: 90%\"\n :disabled=\"props.disabled || inputValue.length === 0 || isLimitReached\"\n @click=\"addTag(inputValue)\"\n >\n <slot name=\"add-button-text\">{{ props.addButtonText }}</slot>\n </button>\n </div>\n </li>\n </ul>\n <div :aria-live=\"props.feedbackAriaLive\" aria-atomic=\"true\">\n <div v-if=\"isInvalid\" class=\"d-block invalid-feedback\">\n {{ props.invalidTagText }}: {{ inputValue }}\n </div>\n <small v-if=\"isDuplicate\" class=\"form-text text-body-secondary\"\n >{{ props.duplicateTagText }}: {{ inputValue }}</small\n >\n <small v-if=\"tags.length === props.limit\" class=\"form-text text-body-secondary\">\n {{ props.limitTagsText }}</small\n >\n </div>\n </slot>\n <template v-if=\"props.name\">\n <input\n v-for=\"(tag, index) in tags\"\n :key=\"index\"\n type=\"hidden\"\n :name=\"props.name\"\n :value=\"tag\"\n />\n </template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {onKeyStroke, syncRef, useFocus, useToNumber} from '@vueuse/core'\nimport {computed, ref, useTemplateRef} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {escapeRegExpChars} from '../../utils/stringUtils'\nimport BFormTag from './BFormTag.vue'\nimport {useId} from '../../composables/useId'\nimport {useStateClass} from '../../composables/useStateClass'\nimport type {BFormTagsEmits, BFormTagsProps, BFormTagsSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<Omit<BFormTagsProps, 'modelValue'>>(), {\n addButtonText: 'Add',\n addButtonVariant: 'outline-secondary',\n addOnChange: false,\n autofocus: false,\n disabled: false,\n duplicateTagText: 'Duplicate tag(s)',\n feedbackAriaLive: 'assertive',\n form: undefined,\n ignoreInputFocusSelector: () => ['.b-form-tag', 'button', 'input', 'select'],\n inputAttrs: undefined,\n inputClass: undefined,\n inputId: undefined,\n inputType: 'text',\n invalidTagText: 'Invalid tag(s)',\n limit: undefined,\n limitTagsText: 'Tag limit reached',\n name: undefined,\n noAddOnEnter: false,\n noOuterFocus: false,\n noTagRemove: false,\n placeholder: 'Add tag...',\n removeOnDelete: false,\n required: false,\n separator: undefined,\n size: undefined,\n state: null,\n tagClass: undefined,\n tagPills: false,\n tagRemoveLabel: undefined,\n tagRemovedLabel: 'Tag removed',\n tagValidator: () => true,\n tagVariant: 'secondary',\n})\nconst props = useDefaults(_props, 'BFormTags')\nconst emit = defineEmits<BFormTagsEmits>()\ndefineSlots<BFormTagsSlots>()\n\nconst modelValue = defineModel<Exclude<BFormTagsProps['modelValue'], undefined>>({\n default: () => [],\n})\n\nconst computedId = useId()\n\nconst limitNumber = useToNumber(() => props.limit ?? Number.NaN)\n\nconst stateClass = useStateClass(() => props.state)\n\nconst input = useTemplateRef('_input')\n\nconst {focused} = useFocus(input, {\n initialValue: props.autofocus,\n})\n\nconst _inputId = computed(() => props.inputId || `${computedId.value}input__`)\nconst tags = ref<string[]>([...modelValue.value])\nconst inputValue = ref<string>('')\nconst shouldRemoveOnDelete = ref<boolean>(modelValue.value.length > 0)\nconst lastRemovedTag = ref<string>('')\nconst validTags = ref<string[]>([])\nconst invalidTags = ref<string[]>([])\nconst duplicateTags = ref<string[]>([])\n\nsyncRef(modelValue, tags, {\n direction: 'ltr',\n transform: {\n ltr: (v) => [...v],\n },\n})\n\nconst computedClasses = computed(() => [\n stateClass.value,\n {\n [`form-control-${props.size}`]: props.size !== undefined,\n disabled: props.disabled,\n focus: focused.value,\n },\n])\n\nconst isDuplicate = computed(() => tags.value.includes(inputValue.value))\nconst isInvalid = computed(() =>\n inputValue.value === '' ? false : !props.tagValidator(inputValue.value)\n)\nconst isLimitReached = computed(() => tags.value.length === limitNumber.value)\nconst disableAddButton = computed(() => !isInvalid.value && !isDuplicate.value)\n\nconst onFocusin = (e: Readonly<FocusEvent>): void => {\n if (props.disabled) {\n const target = e.target as HTMLDivElement\n target.blur()\n return\n }\n\n emit('focusin', e)\n}\n\nconst onClick = (e: Readonly<MouseEvent>): void => {\n if (props.disabled || props.noOuterFocus) {\n return\n }\n\n const {target} = e\n const ignoreSelectors = props.ignoreInputFocusSelector\n if (ignoreSelectors && target instanceof Element) {\n const selector =\n typeof ignoreSelectors === 'string' ? ignoreSelectors : ignoreSelectors.join(',')\n\n if (selector && target.closest(selector)) {\n return\n }\n }\n\n focused.value = true\n}\n\nconst onFocus = (e: Readonly<FocusEvent>): void => {\n if (props.disabled || props.noOuterFocus) {\n return\n }\n\n focused.value = true\n emit('focus', e)\n}\n\nconst onBlur = (e: Readonly<FocusEvent>): void => {\n focused.value = false\n emit('blur', e)\n}\n\nconst onInput = (e: Readonly<Event> | string): void => {\n const value = typeof e === 'string' ? e : (e.target as HTMLInputElement).value\n\n shouldRemoveOnDelete.value = false\n\n if (props.separator?.includes(value.charAt(0)) && value.length > 0) {\n if (input.value) {\n input.value.value = ''\n }\n return\n }\n\n inputValue.value = value\n\n if (props.separator?.includes(value.charAt(value.length - 1))) {\n addTag(value.slice(0, value.length - 1))\n return\n }\n\n validTags.value = props.tagValidator(value) && !isDuplicate.value ? [value] : []\n invalidTags.value = props.tagValidator(value) ? [] : [value]\n duplicateTags.value = isDuplicate.value ? [value] : []\n\n emit('tag-state', validTags.value, invalidTags.value, duplicateTags.value)\n}\n\nconst onChange = (e: Readonly<Event>): void => {\n if (props.addOnChange) {\n onInput(e)\n\n if (!isDuplicate.value) {\n addTag(inputValue.value)\n }\n }\n}\n\nconst onKeydown = (e: Readonly<KeyboardEvent>): void => {\n if ((e.key === 'Enter' || e.code === 'NumpadEnter') && !props.noAddOnEnter) {\n addTag(inputValue.value)\n return\n }\n\n if (\n (e.key === 'Backspace' || e.key === 'Delete') &&\n props.removeOnDelete &&\n inputValue.value === '' &&\n shouldRemoveOnDelete.value &&\n tags.value.length > 0\n ) {\n removeTag(tags.value[tags.value.length - 1])\n } else {\n shouldRemoveOnDelete.value = true\n }\n}\n\nonKeyStroke(onKeydown, {target: input, passive: true})\n\nconst separator = computed(() => {\n if (!props.separator) {\n return\n }\n\n return typeof props.separator === 'string' ? props.separator : props.separator.join('')\n})\n\nconst separatorRegExp = computed(() => {\n if (!separator.value) {\n return\n }\n\n return new RegExp(`[${escapeRegExpChars(separator.value)}]+`)\n})\n\nconst addTag = (tag?: string): void => {\n tag = (tag ?? inputValue.value).trim()\n\n const newTags = separatorRegExp.value\n ? tag.split(separatorRegExp.value).map((t) => t.trim())\n : [tag]\n const validTags: string[] = []\n\n for (const newTag of newTags) {\n if (newTag === '' || isDuplicate.value || !props.tagValidator(newTag)) {\n continue\n }\n\n if (limitNumber.value && isLimitReached.value) {\n break\n }\n\n validTags.push(newTag)\n }\n\n const newValue = [...modelValue.value, ...validTags]\n inputValue.value = ''\n shouldRemoveOnDelete.value = true\n modelValue.value = newValue\n if (validTags.length > 0) {\n emit('tag-added', validTags)\n }\n focused.value = true\n}\n\nconst removeTag = (tag?: string): void => {\n const tagIndex = tags.value.indexOf(tag?.toString() ?? '')\n if (tagIndex === -1) return\n lastRemovedTag.value = tags.value.splice(tagIndex, 1).toString()\n modelValue.value = tags.value\n}\n\ndefineExpose({\n blur: () => {\n focused.value = false\n },\n element: input,\n focus: () => {\n focused.value = true\n },\n inputValue,\n})\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"BFormTags-BhO60uiL.js","names":[],"sources":["../src/components/BFormTags/BFormTags.vue","../src/components/BFormTags/BFormTags.vue"],"sourcesContent":["<template>\n <div\n :id=\"computedId\"\n class=\"b-form-tags form-control h-auto\"\n :class=\"computedClasses\"\n role=\"group\"\n tabindex=\"-1\"\n @click=\"onClick\"\n @focusin=\"onFocusin\"\n @focusout=\"emit('focusout', $event)\"\n >\n <output\n :id=\"`${computedId}selected_tags__`\"\n class=\"visually-hidden\"\n :for=\"_inputId\"\n :aria-live=\"focused ? 'polite' : 'off'\"\n aria-atomic=\"true\"\n aria-relevant=\"additions\"\n >{{ tags.join(', ') }}</output\n >\n <div\n :id=\"`${computedId}removed_tags__`\"\n role=\"status\"\n :aria-live=\"focused ? 'assertive' : 'off'\"\n aria-atomic=\"true\"\n class=\"visually-hidden\"\n >\n ({{ props.tagRemovedLabel }}) {{ lastRemovedTag }}\n </div>\n\n <slot\n :add-button-text=\"props.addButtonText\"\n :add-button-variant=\"props.addButtonVariant\"\n :add-tag\n :disable-add-button=\"disableAddButton\"\n :disabled=\"props.disabled\"\n :duplicate-tag-text=\"props.duplicateTagText\"\n :duplicate-tags=\"duplicateTags\"\n :form=\"props.form\"\n :input-attrs=\"{\n ...props.inputAttrs,\n disabled: props.disabled,\n form: props.form,\n id: _inputId,\n value: inputValue,\n }\"\n :input-class=\"props.inputClass\"\n :input-handlers=\"{\n input: onInput,\n keydown: onKeydown,\n change: onChange,\n }\"\n :input-id=\"_inputId\"\n :input-type=\"props.inputType\"\n :invalid-tag-text=\"props.invalidTagText\"\n :invalid-tags\n :is-duplicate\n :is-invalid\n :is-limit-reached=\"isLimitReached\"\n :limit-tags-text=\"props.limitTagsText\"\n :limit=\"limitNumber\"\n :no-tag-remove=\"props.noTagRemove\"\n :placeholder=\"props.placeholder\"\n :remove-tag\n :required=\"props.required\"\n :separator=\"props.separator\"\n :size=\"props.size\"\n :state=\"props.state\"\n :tag-class=\"props.tagClass\"\n :tag-pills=\"props.tagPills\"\n :tag-remove-label=\"props.tagRemoveLabel\"\n :tag-variant=\"props.tagVariant\"\n :tags\n >\n <ul\n :id=\"`${computedId}tag_list__`\"\n class=\"b-form-tags-list list-unstyled mb-0 d-flex flex-wrap align-items-center\"\n >\n <template v-for=\"(tag, index) in tags\" :key=\"index\">\n <slot\n name=\"tag\"\n :tag=\"tag\"\n :tag-class=\"props.tagClass\"\n :tag-variant=\"props.tagVariant\"\n :tag-pills=\"props.tagPills\"\n :remove-tag=\"removeTag\"\n >\n <BFormTag\n :key=\"tag\"\n :class=\"props.tagClass\"\n tag=\"li\"\n :variant=\"props.tagVariant\"\n :pill=\"props.tagPills\"\n :no-remove=\"props.noTagRemove\"\n :disabled=\"props.disabled\"\n @remove=\"removeTag\"\n >{{ tag }}</BFormTag\n >\n </slot>\n </template>\n <li\n role=\"none\"\n aria-live=\"off\"\n class=\"b-from-tags-field flex-grow-1\"\n :aria-controls=\"`${computedId}tag_list__`\"\n >\n <div role=\"group\" class=\"d-flex\">\n <input\n :id=\"_inputId\"\n ref=\"_input\"\n :disabled=\"props.disabled\"\n :value=\"inputValue\"\n :type=\"props.inputType\"\n :placeholder=\"props.placeholder\"\n class=\"b-form-tags-input w-100 flex-grow-1 p-0 m-0 bg-transparent border-0\"\n style=\"outline: currentcolor none 0; min-width: 5rem\"\n v-bind=\"props.inputAttrs\"\n :form=\"props.form\"\n :required=\"props.required || undefined\"\n :aria-required=\"props.required || undefined\"\n @input=\"onInput\"\n @change=\"onChange\"\n @focus=\"onFocus\"\n @blur=\"onBlur\"\n />\n <button\n v-if=\"disableAddButton\"\n type=\"button\"\n class=\"btn b-form-tags-button py-0\"\n :class=\"[\n inputClass,\n {\n [`btn-${props.addButtonVariant}`]: props.addButtonVariant !== null,\n 'disabled invisible': inputValue.length === 0,\n },\n ]\"\n style=\"font-size: 90%\"\n :disabled=\"props.disabled || inputValue.length === 0 || isLimitReached\"\n @click=\"addTag(inputValue)\"\n >\n <slot name=\"add-button-text\">{{ props.addButtonText }}</slot>\n </button>\n </div>\n </li>\n </ul>\n <div :aria-live=\"props.feedbackAriaLive\" aria-atomic=\"true\">\n <div v-if=\"isInvalid\" class=\"d-block invalid-feedback\">\n {{ props.invalidTagText }}: {{ inputValue }}\n </div>\n <small v-if=\"isDuplicate\" class=\"form-text text-body-secondary\"\n >{{ props.duplicateTagText }}: {{ inputValue }}</small\n >\n <small v-if=\"tags.length === props.limit\" class=\"form-text text-body-secondary\">\n {{ props.limitTagsText }}</small\n >\n </div>\n </slot>\n <template v-if=\"props.name\">\n <input\n v-for=\"(tag, index) in tags\"\n :key=\"index\"\n type=\"hidden\"\n :name=\"props.name\"\n :value=\"tag\"\n />\n </template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {onKeyStroke, syncRef, useFocus, useToNumber} from '@vueuse/core'\nimport {computed, ref, useTemplateRef} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {escapeRegExpChars} from '../../utils/stringUtils'\nimport BFormTag from './BFormTag.vue'\nimport {useId} from '../../composables/useId'\nimport {useStateClass} from '../../composables/useStateClass'\nimport type {BFormTagsEmits, BFormTagsProps, BFormTagsSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<Omit<BFormTagsProps, 'modelValue'>>(), {\n addButtonText: 'Add',\n addButtonVariant: 'outline-secondary',\n addOnChange: false,\n autofocus: false,\n disabled: false,\n duplicateTagText: 'Duplicate tag(s)',\n feedbackAriaLive: 'assertive',\n form: undefined,\n ignoreInputFocusSelector: () => ['.b-form-tag', 'button', 'input', 'select'],\n inputAttrs: undefined,\n inputClass: undefined,\n inputId: undefined,\n inputType: 'text',\n invalidTagText: 'Invalid tag(s)',\n limit: undefined,\n limitTagsText: 'Tag limit reached',\n name: undefined,\n noAddOnEnter: false,\n noOuterFocus: false,\n noTagRemove: false,\n placeholder: 'Add tag...',\n removeOnDelete: false,\n required: false,\n separator: undefined,\n size: undefined,\n state: null,\n tagClass: undefined,\n tagPills: false,\n tagRemoveLabel: undefined,\n tagRemovedLabel: 'Tag removed',\n tagValidator: () => true,\n tagVariant: 'secondary',\n})\nconst props = useDefaults(_props, 'BFormTags')\nconst emit = defineEmits<BFormTagsEmits>()\ndefineSlots<BFormTagsSlots>()\n\nconst modelValue = defineModel<Exclude<BFormTagsProps['modelValue'], undefined>>({\n default: () => [],\n})\n\nconst computedId = useId()\n\nconst limitNumber = useToNumber(() => props.limit ?? Number.NaN)\n\nconst stateClass = useStateClass(() => props.state)\n\nconst input = useTemplateRef('_input')\n\nconst {focused} = useFocus(input, {\n initialValue: props.autofocus,\n})\n\nconst _inputId = computed(() => props.inputId || `${computedId.value}input__`)\nconst tags = ref<string[]>([...modelValue.value])\nconst inputValue = ref<string>('')\nconst shouldRemoveOnDelete = ref<boolean>(modelValue.value.length > 0)\nconst lastRemovedTag = ref<string>('')\nconst validTags = ref<string[]>([])\nconst invalidTags = ref<string[]>([])\nconst duplicateTags = ref<string[]>([])\n\nsyncRef(modelValue, tags, {\n direction: 'ltr',\n transform: {\n ltr: (v) => [...v],\n },\n})\n\nconst computedClasses = computed(() => [\n stateClass.value,\n {\n [`form-control-${props.size}`]: props.size !== undefined,\n disabled: props.disabled,\n focus: focused.value,\n },\n])\n\nconst isDuplicate = computed(() => tags.value.includes(inputValue.value))\nconst isInvalid = computed(() =>\n inputValue.value === '' ? false : !props.tagValidator(inputValue.value)\n)\nconst isLimitReached = computed(() => tags.value.length === limitNumber.value)\nconst disableAddButton = computed(() => !isInvalid.value && !isDuplicate.value)\n\nconst onFocusin = (e: Readonly<FocusEvent>): void => {\n if (props.disabled) {\n const target = e.target as HTMLDivElement\n target.blur()\n return\n }\n\n emit('focusin', e)\n}\n\nconst onClick = (e: Readonly<MouseEvent>): void => {\n if (props.disabled || props.noOuterFocus) {\n return\n }\n\n const {target} = e\n const ignoreSelectors = props.ignoreInputFocusSelector\n if (ignoreSelectors && target instanceof Element) {\n const selector =\n typeof ignoreSelectors === 'string' ? ignoreSelectors : ignoreSelectors.join(',')\n\n if (selector && target.closest(selector)) {\n return\n }\n }\n\n focused.value = true\n}\n\nconst onFocus = (e: Readonly<FocusEvent>): void => {\n if (props.disabled || props.noOuterFocus) {\n return\n }\n\n focused.value = true\n emit('focus', e)\n}\n\nconst onBlur = (e: Readonly<FocusEvent>): void => {\n focused.value = false\n emit('blur', e)\n}\n\nconst onInput = (e: Readonly<Event> | string): void => {\n const value = typeof e === 'string' ? e : (e.target as HTMLInputElement).value\n\n shouldRemoveOnDelete.value = false\n\n if (props.separator?.includes(value.charAt(0)) && value.length > 0) {\n if (input.value) {\n input.value.value = ''\n }\n return\n }\n\n inputValue.value = value\n\n if (props.separator?.includes(value.charAt(value.length - 1))) {\n addTag(value.slice(0, value.length - 1))\n return\n }\n\n validTags.value = props.tagValidator(value) && !isDuplicate.value ? [value] : []\n invalidTags.value = props.tagValidator(value) ? [] : [value]\n duplicateTags.value = isDuplicate.value ? [value] : []\n\n emit('tag-state', validTags.value, invalidTags.value, duplicateTags.value)\n}\n\nconst onChange = (e: Readonly<Event>): void => {\n if (props.addOnChange) {\n onInput(e)\n\n if (!isDuplicate.value) {\n addTag(inputValue.value)\n }\n }\n}\n\nconst onKeydown = (e: Readonly<KeyboardEvent>): void => {\n if ((e.key === 'Enter' || e.code === 'NumpadEnter') && !props.noAddOnEnter) {\n addTag(inputValue.value)\n return\n }\n\n if (\n (e.key === 'Backspace' || e.key === 'Delete') &&\n props.removeOnDelete &&\n inputValue.value === '' &&\n shouldRemoveOnDelete.value &&\n tags.value.length > 0\n ) {\n removeTag(tags.value[tags.value.length - 1])\n } else {\n shouldRemoveOnDelete.value = true\n }\n}\n\nonKeyStroke(onKeydown, {target: input, passive: true})\n\nconst separator = computed(() => {\n if (!props.separator) {\n return\n }\n\n return typeof props.separator === 'string' ? props.separator : props.separator.join('')\n})\n\nconst separatorRegExp = computed(() => {\n if (!separator.value) {\n return\n }\n\n return new RegExp(`[${escapeRegExpChars(separator.value)}]+`)\n})\n\nconst addTag = (tag?: string): void => {\n tag = (tag ?? inputValue.value).trim()\n\n const newTags = separatorRegExp.value\n ? tag.split(separatorRegExp.value).map((t) => t.trim())\n : [tag]\n const validTags: string[] = []\n\n for (const newTag of newTags) {\n if (newTag === '' || isDuplicate.value || !props.tagValidator(newTag)) {\n continue\n }\n\n if (limitNumber.value && isLimitReached.value) {\n break\n }\n\n validTags.push(newTag)\n }\n\n const newValue = [...modelValue.value, ...validTags]\n inputValue.value = ''\n shouldRemoveOnDelete.value = true\n modelValue.value = newValue\n if (validTags.length > 0) {\n emit('tag-added', validTags)\n }\n focused.value = true\n}\n\nconst removeTag = (tag?: string): void => {\n const tagIndex = tags.value.indexOf(tag?.toString() ?? '')\n if (tagIndex === -1) return\n lastRemovedTag.value = tags.value.splice(tagIndex, 1).toString()\n modelValue.value = tags.value\n}\n\ndefineExpose({\n blur: () => {\n focused.value = false\n },\n element: input,\n focus: () => {\n focused.value = true\n },\n inputValue,\n})\n</script>\n","<template>\n <div\n :id=\"computedId\"\n class=\"b-form-tags form-control h-auto\"\n :class=\"computedClasses\"\n role=\"group\"\n tabindex=\"-1\"\n @click=\"onClick\"\n @focusin=\"onFocusin\"\n @focusout=\"emit('focusout', $event)\"\n >\n <output\n :id=\"`${computedId}selected_tags__`\"\n class=\"visually-hidden\"\n :for=\"_inputId\"\n :aria-live=\"focused ? 'polite' : 'off'\"\n aria-atomic=\"true\"\n aria-relevant=\"additions\"\n >{{ tags.join(', ') }}</output\n >\n <div\n :id=\"`${computedId}removed_tags__`\"\n role=\"status\"\n :aria-live=\"focused ? 'assertive' : 'off'\"\n aria-atomic=\"true\"\n class=\"visually-hidden\"\n >\n ({{ props.tagRemovedLabel }}) {{ lastRemovedTag }}\n </div>\n\n <slot\n :add-button-text=\"props.addButtonText\"\n :add-button-variant=\"props.addButtonVariant\"\n :add-tag\n :disable-add-button=\"disableAddButton\"\n :disabled=\"props.disabled\"\n :duplicate-tag-text=\"props.duplicateTagText\"\n :duplicate-tags=\"duplicateTags\"\n :form=\"props.form\"\n :input-attrs=\"{\n ...props.inputAttrs,\n disabled: props.disabled,\n form: props.form,\n id: _inputId,\n value: inputValue,\n }\"\n :input-class=\"props.inputClass\"\n :input-handlers=\"{\n input: onInput,\n keydown: onKeydown,\n change: onChange,\n }\"\n :input-id=\"_inputId\"\n :input-type=\"props.inputType\"\n :invalid-tag-text=\"props.invalidTagText\"\n :invalid-tags\n :is-duplicate\n :is-invalid\n :is-limit-reached=\"isLimitReached\"\n :limit-tags-text=\"props.limitTagsText\"\n :limit=\"limitNumber\"\n :no-tag-remove=\"props.noTagRemove\"\n :placeholder=\"props.placeholder\"\n :remove-tag\n :required=\"props.required\"\n :separator=\"props.separator\"\n :size=\"props.size\"\n :state=\"props.state\"\n :tag-class=\"props.tagClass\"\n :tag-pills=\"props.tagPills\"\n :tag-remove-label=\"props.tagRemoveLabel\"\n :tag-variant=\"props.tagVariant\"\n :tags\n >\n <ul\n :id=\"`${computedId}tag_list__`\"\n class=\"b-form-tags-list list-unstyled mb-0 d-flex flex-wrap align-items-center\"\n >\n <template v-for=\"(tag, index) in tags\" :key=\"index\">\n <slot\n name=\"tag\"\n :tag=\"tag\"\n :tag-class=\"props.tagClass\"\n :tag-variant=\"props.tagVariant\"\n :tag-pills=\"props.tagPills\"\n :remove-tag=\"removeTag\"\n >\n <BFormTag\n :key=\"tag\"\n :class=\"props.tagClass\"\n tag=\"li\"\n :variant=\"props.tagVariant\"\n :pill=\"props.tagPills\"\n :no-remove=\"props.noTagRemove\"\n :disabled=\"props.disabled\"\n @remove=\"removeTag\"\n >{{ tag }}</BFormTag\n >\n </slot>\n </template>\n <li\n role=\"none\"\n aria-live=\"off\"\n class=\"b-from-tags-field flex-grow-1\"\n :aria-controls=\"`${computedId}tag_list__`\"\n >\n <div role=\"group\" class=\"d-flex\">\n <input\n :id=\"_inputId\"\n ref=\"_input\"\n :disabled=\"props.disabled\"\n :value=\"inputValue\"\n :type=\"props.inputType\"\n :placeholder=\"props.placeholder\"\n class=\"b-form-tags-input w-100 flex-grow-1 p-0 m-0 bg-transparent border-0\"\n style=\"outline: currentcolor none 0; min-width: 5rem\"\n v-bind=\"props.inputAttrs\"\n :form=\"props.form\"\n :required=\"props.required || undefined\"\n :aria-required=\"props.required || undefined\"\n @input=\"onInput\"\n @change=\"onChange\"\n @focus=\"onFocus\"\n @blur=\"onBlur\"\n />\n <button\n v-if=\"disableAddButton\"\n type=\"button\"\n class=\"btn b-form-tags-button py-0\"\n :class=\"[\n inputClass,\n {\n [`btn-${props.addButtonVariant}`]: props.addButtonVariant !== null,\n 'disabled invisible': inputValue.length === 0,\n },\n ]\"\n style=\"font-size: 90%\"\n :disabled=\"props.disabled || inputValue.length === 0 || isLimitReached\"\n @click=\"addTag(inputValue)\"\n >\n <slot name=\"add-button-text\">{{ props.addButtonText }}</slot>\n </button>\n </div>\n </li>\n </ul>\n <div :aria-live=\"props.feedbackAriaLive\" aria-atomic=\"true\">\n <div v-if=\"isInvalid\" class=\"d-block invalid-feedback\">\n {{ props.invalidTagText }}: {{ inputValue }}\n </div>\n <small v-if=\"isDuplicate\" class=\"form-text text-body-secondary\"\n >{{ props.duplicateTagText }}: {{ inputValue }}</small\n >\n <small v-if=\"tags.length === props.limit\" class=\"form-text text-body-secondary\">\n {{ props.limitTagsText }}</small\n >\n </div>\n </slot>\n <template v-if=\"props.name\">\n <input\n v-for=\"(tag, index) in tags\"\n :key=\"index\"\n type=\"hidden\"\n :name=\"props.name\"\n :value=\"tag\"\n />\n </template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {onKeyStroke, syncRef, useFocus, useToNumber} from '@vueuse/core'\nimport {computed, ref, useTemplateRef} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {escapeRegExpChars} from '../../utils/stringUtils'\nimport BFormTag from './BFormTag.vue'\nimport {useId} from '../../composables/useId'\nimport {useStateClass} from '../../composables/useStateClass'\nimport type {BFormTagsEmits, BFormTagsProps, BFormTagsSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<Omit<BFormTagsProps, 'modelValue'>>(), {\n addButtonText: 'Add',\n addButtonVariant: 'outline-secondary',\n addOnChange: false,\n autofocus: false,\n disabled: false,\n duplicateTagText: 'Duplicate tag(s)',\n feedbackAriaLive: 'assertive',\n form: undefined,\n ignoreInputFocusSelector: () => ['.b-form-tag', 'button', 'input', 'select'],\n inputAttrs: undefined,\n inputClass: undefined,\n inputId: undefined,\n inputType: 'text',\n invalidTagText: 'Invalid tag(s)',\n limit: undefined,\n limitTagsText: 'Tag limit reached',\n name: undefined,\n noAddOnEnter: false,\n noOuterFocus: false,\n noTagRemove: false,\n placeholder: 'Add tag...',\n removeOnDelete: false,\n required: false,\n separator: undefined,\n size: undefined,\n state: null,\n tagClass: undefined,\n tagPills: false,\n tagRemoveLabel: undefined,\n tagRemovedLabel: 'Tag removed',\n tagValidator: () => true,\n tagVariant: 'secondary',\n})\nconst props = useDefaults(_props, 'BFormTags')\nconst emit = defineEmits<BFormTagsEmits>()\ndefineSlots<BFormTagsSlots>()\n\nconst modelValue = defineModel<Exclude<BFormTagsProps['modelValue'], undefined>>({\n default: () => [],\n})\n\nconst computedId = useId()\n\nconst limitNumber = useToNumber(() => props.limit ?? Number.NaN)\n\nconst stateClass = useStateClass(() => props.state)\n\nconst input = useTemplateRef('_input')\n\nconst {focused} = useFocus(input, {\n initialValue: props.autofocus,\n})\n\nconst _inputId = computed(() => props.inputId || `${computedId.value}input__`)\nconst tags = ref<string[]>([...modelValue.value])\nconst inputValue = ref<string>('')\nconst shouldRemoveOnDelete = ref<boolean>(modelValue.value.length > 0)\nconst lastRemovedTag = ref<string>('')\nconst validTags = ref<string[]>([])\nconst invalidTags = ref<string[]>([])\nconst duplicateTags = ref<string[]>([])\n\nsyncRef(modelValue, tags, {\n direction: 'ltr',\n transform: {\n ltr: (v) => [...v],\n },\n})\n\nconst computedClasses = computed(() => [\n stateClass.value,\n {\n [`form-control-${props.size}`]: props.size !== undefined,\n disabled: props.disabled,\n focus: focused.value,\n },\n])\n\nconst isDuplicate = computed(() => tags.value.includes(inputValue.value))\nconst isInvalid = computed(() =>\n inputValue.value === '' ? false : !props.tagValidator(inputValue.value)\n)\nconst isLimitReached = computed(() => tags.value.length === limitNumber.value)\nconst disableAddButton = computed(() => !isInvalid.value && !isDuplicate.value)\n\nconst onFocusin = (e: Readonly<FocusEvent>): void => {\n if (props.disabled) {\n const target = e.target as HTMLDivElement\n target.blur()\n return\n }\n\n emit('focusin', e)\n}\n\nconst onClick = (e: Readonly<MouseEvent>): void => {\n if (props.disabled || props.noOuterFocus) {\n return\n }\n\n const {target} = e\n const ignoreSelectors = props.ignoreInputFocusSelector\n if (ignoreSelectors && target instanceof Element) {\n const selector =\n typeof ignoreSelectors === 'string' ? ignoreSelectors : ignoreSelectors.join(',')\n\n if (selector && target.closest(selector)) {\n return\n }\n }\n\n focused.value = true\n}\n\nconst onFocus = (e: Readonly<FocusEvent>): void => {\n if (props.disabled || props.noOuterFocus) {\n return\n }\n\n focused.value = true\n emit('focus', e)\n}\n\nconst onBlur = (e: Readonly<FocusEvent>): void => {\n focused.value = false\n emit('blur', e)\n}\n\nconst onInput = (e: Readonly<Event> | string): void => {\n const value = typeof e === 'string' ? e : (e.target as HTMLInputElement).value\n\n shouldRemoveOnDelete.value = false\n\n if (props.separator?.includes(value.charAt(0)) && value.length > 0) {\n if (input.value) {\n input.value.value = ''\n }\n return\n }\n\n inputValue.value = value\n\n if (props.separator?.includes(value.charAt(value.length - 1))) {\n addTag(value.slice(0, value.length - 1))\n return\n }\n\n validTags.value = props.tagValidator(value) && !isDuplicate.value ? [value] : []\n invalidTags.value = props.tagValidator(value) ? [] : [value]\n duplicateTags.value = isDuplicate.value ? [value] : []\n\n emit('tag-state', validTags.value, invalidTags.value, duplicateTags.value)\n}\n\nconst onChange = (e: Readonly<Event>): void => {\n if (props.addOnChange) {\n onInput(e)\n\n if (!isDuplicate.value) {\n addTag(inputValue.value)\n }\n }\n}\n\nconst onKeydown = (e: Readonly<KeyboardEvent>): void => {\n if ((e.key === 'Enter' || e.code === 'NumpadEnter') && !props.noAddOnEnter) {\n addTag(inputValue.value)\n return\n }\n\n if (\n (e.key === 'Backspace' || e.key === 'Delete') &&\n props.removeOnDelete &&\n inputValue.value === '' &&\n shouldRemoveOnDelete.value &&\n tags.value.length > 0\n ) {\n removeTag(tags.value[tags.value.length - 1])\n } else {\n shouldRemoveOnDelete.value = true\n }\n}\n\nonKeyStroke(onKeydown, {target: input, passive: true})\n\nconst separator = computed(() => {\n if (!props.separator) {\n return\n }\n\n return typeof props.separator === 'string' ? props.separator : props.separator.join('')\n})\n\nconst separatorRegExp = computed(() => {\n if (!separator.value) {\n return\n }\n\n return new RegExp(`[${escapeRegExpChars(separator.value)}]+`)\n})\n\nconst addTag = (tag?: string): void => {\n tag = (tag ?? inputValue.value).trim()\n\n const newTags = separatorRegExp.value\n ? tag.split(separatorRegExp.value).map((t) => t.trim())\n : [tag]\n const validTags: string[] = []\n\n for (const newTag of newTags) {\n if (newTag === '' || isDuplicate.value || !props.tagValidator(newTag)) {\n continue\n }\n\n if (limitNumber.value && isLimitReached.value) {\n break\n }\n\n validTags.push(newTag)\n }\n\n const newValue = [...modelValue.value, ...validTags]\n inputValue.value = ''\n shouldRemoveOnDelete.value = true\n modelValue.value = newValue\n if (validTags.length > 0) {\n emit('tag-added', validTags)\n }\n focused.value = true\n}\n\nconst removeTag = (tag?: string): void => {\n const tagIndex = tags.value.indexOf(tag?.toString() ?? '')\n if (tagIndex === -1) return\n lastRemovedTag.value = tags.value.splice(tagIndex, 1).toString()\n modelValue.value = tags.value\n}\n\ndefineExpose({\n blur: () => {\n focused.value = false\n },\n element: input,\n focus: () => {\n focused.value = true\n },\n inputValue,\n})\n</script>\n"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  require("./chunk-CoQrYLCe.js");
2
2
  const require_dist = require("./dist-DiXKLh_W.js");
3
3
  const require_dom = require("./dom-Bs6DzM72.js");
4
- const require_useDefaults = require("./useDefaults-DsLf4iRY.js");
5
- const require_useFormInput = require("./useFormInput-D31FCDxr.js");
4
+ const require_useDefaults = require("./useDefaults-C0CYry78.js");
5
+ const require_useFormInput = require("./useFormInput-ip9hN2AU.js");
6
6
  let vue = require("vue");
7
7
  //#region src/composables/useTextareaResize.ts
8
8
  var useTextareaResize = (input, { maxRows, noAutoShrink, rows }) => {
@@ -200,4 +200,4 @@ Object.defineProperty(exports, "BFormTextarea_default", {
200
200
  }
201
201
  });
202
202
 
203
- //# sourceMappingURL=BFormTextarea-CYh47SxL.js.map
203
+ //# sourceMappingURL=BFormTextarea-C3Cj0DWj.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BFormTextarea-CYh47SxL.js","names":[],"sources":["../src/composables/useTextareaResize.ts","../src/components/BFormTextarea/BFormTextarea.vue","../src/components/BFormTextarea/BFormTextarea.vue"],"sourcesContent":["import {useToNumber} from '@vueuse/core'\nimport type {Numberish} from '../types/CommonTypes'\nimport {\n computed,\n type CSSProperties,\n type MaybeRefOrGetter,\n nextTick,\n onMounted,\n ref,\n type ShallowRef,\n toValue,\n} from 'vue'\nimport {isVisible} from '../utils/dom'\n\nexport const useTextareaResize = (\n input: Readonly<ShallowRef<HTMLTextAreaElement | null>>,\n {\n maxRows,\n noAutoShrink,\n rows,\n }: {\n rows: MaybeRefOrGetter<Numberish>\n maxRows: MaybeRefOrGetter<Numberish | undefined>\n noAutoShrink: MaybeRefOrGetter<boolean>\n }\n) => {\n const height = ref<number | null | string>(0)\n const maxRowsNumber = useToNumber(\n computed(() => toValue(maxRows) || Number.NaN),\n {\n method: 'parseInt',\n nanToZero: true,\n }\n )\n const rowsNumber = useToNumber(rows, {\n method: 'parseInt',\n nanToZero: true,\n })\n const computedMinRows = computed(() => Math.max(rowsNumber.value || 2, 2))\n const computedMaxRows = computed(() => Math.max(computedMinRows.value, maxRowsNumber.value || 0))\n const computedRows = computed(() =>\n computedMinRows.value === computedMaxRows.value ? computedMinRows.value : null\n )\n\n const handleHeightChange = async () => {\n // Element must be visible (not hidden) and in document\n // Must be checked after above checks\n if (!input.value || !isVisible(input.value)) {\n height.value = null\n return\n }\n\n // Get current computed styles\n const computedStyle = getComputedStyle(input.value)\n // Height of one line of text in px\n const lineHeight = Number.parseFloat(computedStyle.lineHeight) || 1\n // Calculate height of border and padding\n const border =\n (Number.parseFloat(computedStyle.borderTopWidth) || 0) +\n (Number.parseFloat(computedStyle.borderBottomWidth) || 0)\n const padding =\n (Number.parseFloat(computedStyle.paddingTop) || 0) +\n (Number.parseFloat(computedStyle.paddingBottom) || 0)\n // Calculate offset\n const offset = border + padding\n // Minimum height for min rows (which must be 2 rows or greater for cross-browser support)\n const minHeight = lineHeight * computedMinRows.value + offset\n\n // Get the current style height (with `px` units)\n const oldHeight = input.value.style.height || computedStyle.height\n // Probe scrollHeight by temporarily changing the height to `auto`\n height.value = 'auto'\n await nextTick() // We need to wait for the dom to update. These cannot be batched in the same tick\n // Re-check input.value after await since the element may have been unmounted\n // (e.g., during SSR hydration when BFormGroup re-renders its wrapper element)\n if (!input.value) return\n const {scrollHeight} = input.value\n // Place the original old height back on the element, just in case `computedProp`\n // returns the same value as before\n height.value = oldHeight\n await nextTick() // We need to wait for the dom to update. These cannot be batched in the same tick\n if (!input.value) return\n\n // Calculate content height in 'rows' (scrollHeight includes padding but not border)\n const contentRows = Math.max((scrollHeight - padding) / lineHeight, 2)\n // Calculate number of rows to display (limited within min/max rows)\n const rows = Math.min(Math.max(contentRows, computedMinRows.value), computedMaxRows.value)\n // Calculate the required height of the textarea including border and padding (in pixels)\n const newHeight = Math.max(Math.ceil(rows * lineHeight + offset), minHeight)\n\n // Computed height remains the larger of `oldHeight` and new `height`,\n // when height is in `sticky` mode (prop `no-auto-shrink` is true)\n if (toValue(noAutoShrink) && (Number.parseFloat(oldHeight.toString()) || 0) > newHeight) {\n height.value = oldHeight\n return\n }\n\n // Return the new computed CSS height in px units\n height.value = `${newHeight}px`\n }\n\n onMounted(handleHeightChange)\n\n const computedStyles = computed<CSSProperties>(() => ({\n resize: 'none',\n height:\n typeof height.value === 'string'\n ? height.value\n : height.value\n ? `${height.value}px`\n : undefined,\n }))\n\n return {\n onInput: handleHeightChange,\n computedStyles,\n computedRows,\n }\n}\n","<template>\n <textarea\n :id=\"computedId\"\n ref=\"_input\"\n :class=\"computedClasses\"\n :name=\"props.name || undefined\"\n :form=\"props.form || undefined\"\n :value=\"modelValue ?? undefined\"\n :disabled=\"isDisabled\"\n :placeholder=\"props.placeholder\"\n :required=\"props.required || undefined\"\n :autocomplete=\"props.autocomplete || undefined\"\n :readonly=\"props.readonly || props.plaintext\"\n :aria-required=\"props.required || undefined\"\n :aria-invalid=\"computedAriaInvalid\"\n :rows=\"computedRows || 2\"\n :style=\"computedStyles\"\n :wrap=\"props.wrap || undefined\"\n @input=\"\n (e) => {\n onInput(e)\n handleHeightChange()\n }\n \"\n @change=\"onChange\"\n @blur=\"onBlur\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport type {BFormTextareaProps} from '../../types'\nimport {computed, type CSSProperties, useTemplateRef} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {normalizeInput} from '../../utils/normalizeInput'\nimport {useFormInput} from '../../composables/useFormInput'\nimport {useTextareaResize} from '../../composables/useTextareaResize'\n\nconst _props = withDefaults(defineProps<Omit<BFormTextareaProps, 'modelValue'>>(), {\n // CommonInputProps\n ariaInvalid: undefined,\n autocomplete: undefined,\n autofocus: false,\n debounce: 0,\n debounceMaxWait: Number.NaN,\n disabled: false,\n form: undefined,\n formatter: undefined,\n id: undefined,\n lazyFormatter: false,\n list: undefined,\n modelValue: '',\n name: undefined,\n placeholder: undefined,\n plaintext: false,\n readonly: false,\n required: false,\n size: undefined,\n state: undefined,\n // End CommonInputProps\n noResize: false,\n noAutoShrink: false,\n maxRows: undefined,\n rows: 2,\n wrap: 'soft',\n})\nconst props = useDefaults(_props, 'BFormTextarea')\n\nconst [modelValue, modelModifiers] = defineModel<\n Exclude<BFormTextareaProps['modelValue'], undefined>,\n 'trim' | 'lazy' | 'number'\n>({\n default: '',\n set: (v) => normalizeInput(v, modelModifiers),\n})\n\nconst input = useTemplateRef('_input')\n\nconst {\n computedId,\n computedAriaInvalid,\n onInput,\n stateClass,\n onChange,\n onBlur,\n focus,\n blur,\n isDisabled,\n} = useFormInput(props, input, modelValue, modelModifiers)\n\nconst computedClasses = computed(() => [\n stateClass.value,\n props.plaintext ? 'form-control-plaintext' : 'form-control',\n {\n [`form-control-${props.size}`]: !!props.size,\n },\n])\n\nconst {\n computedStyles: resizeStyles,\n onInput: handleHeightChange,\n computedRows,\n} = useTextareaResize(input, {\n maxRows: () => props.maxRows,\n rows: () => props.rows,\n noAutoShrink: () => props.noAutoShrink,\n})\n\nconst computedStyles = computed<CSSProperties>(() => ({\n resize: props.noResize ? 'none' : undefined,\n ...(props.maxRows || props.noAutoShrink ? resizeStyles.value : undefined),\n}))\n\ndefineExpose({\n blur,\n element: input,\n flushDebounce: onBlur,\n focus,\n})\n</script>\n","<template>\n <textarea\n :id=\"computedId\"\n ref=\"_input\"\n :class=\"computedClasses\"\n :name=\"props.name || undefined\"\n :form=\"props.form || undefined\"\n :value=\"modelValue ?? undefined\"\n :disabled=\"isDisabled\"\n :placeholder=\"props.placeholder\"\n :required=\"props.required || undefined\"\n :autocomplete=\"props.autocomplete || undefined\"\n :readonly=\"props.readonly || props.plaintext\"\n :aria-required=\"props.required || undefined\"\n :aria-invalid=\"computedAriaInvalid\"\n :rows=\"computedRows || 2\"\n :style=\"computedStyles\"\n :wrap=\"props.wrap || undefined\"\n @input=\"\n (e) => {\n onInput(e)\n handleHeightChange()\n }\n \"\n @change=\"onChange\"\n @blur=\"onBlur\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport type {BFormTextareaProps} from '../../types'\nimport {computed, type CSSProperties, useTemplateRef} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {normalizeInput} from '../../utils/normalizeInput'\nimport {useFormInput} from '../../composables/useFormInput'\nimport {useTextareaResize} from '../../composables/useTextareaResize'\n\nconst _props = withDefaults(defineProps<Omit<BFormTextareaProps, 'modelValue'>>(), {\n // CommonInputProps\n ariaInvalid: undefined,\n autocomplete: undefined,\n autofocus: false,\n debounce: 0,\n debounceMaxWait: Number.NaN,\n disabled: false,\n form: undefined,\n formatter: undefined,\n id: undefined,\n lazyFormatter: false,\n list: undefined,\n modelValue: '',\n name: undefined,\n placeholder: undefined,\n plaintext: false,\n readonly: false,\n required: false,\n size: undefined,\n state: undefined,\n // End CommonInputProps\n noResize: false,\n noAutoShrink: false,\n maxRows: undefined,\n rows: 2,\n wrap: 'soft',\n})\nconst props = useDefaults(_props, 'BFormTextarea')\n\nconst [modelValue, modelModifiers] = defineModel<\n Exclude<BFormTextareaProps['modelValue'], undefined>,\n 'trim' | 'lazy' | 'number'\n>({\n default: '',\n set: (v) => normalizeInput(v, modelModifiers),\n})\n\nconst input = useTemplateRef('_input')\n\nconst {\n computedId,\n computedAriaInvalid,\n onInput,\n stateClass,\n onChange,\n onBlur,\n focus,\n blur,\n isDisabled,\n} = useFormInput(props, input, modelValue, modelModifiers)\n\nconst computedClasses = computed(() => [\n stateClass.value,\n props.plaintext ? 'form-control-plaintext' : 'form-control',\n {\n [`form-control-${props.size}`]: !!props.size,\n },\n])\n\nconst {\n computedStyles: resizeStyles,\n onInput: handleHeightChange,\n computedRows,\n} = useTextareaResize(input, {\n maxRows: () => props.maxRows,\n rows: () => props.rows,\n noAutoShrink: () => props.noAutoShrink,\n})\n\nconst computedStyles = computed<CSSProperties>(() => ({\n resize: props.noResize ? 'none' : undefined,\n ...(props.maxRows || props.noAutoShrink ? resizeStyles.value : undefined),\n}))\n\ndefineExpose({\n blur,\n element: input,\n flushDebounce: onBlur,\n focus,\n})\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"BFormTextarea-C3Cj0DWj.js","names":[],"sources":["../src/composables/useTextareaResize.ts","../src/components/BFormTextarea/BFormTextarea.vue","../src/components/BFormTextarea/BFormTextarea.vue"],"sourcesContent":["import {useToNumber} from '@vueuse/core'\nimport type {Numberish} from '../types/CommonTypes'\nimport {\n computed,\n type CSSProperties,\n type MaybeRefOrGetter,\n nextTick,\n onMounted,\n ref,\n type ShallowRef,\n toValue,\n} from 'vue'\nimport {isVisible} from '../utils/dom'\n\nexport const useTextareaResize = (\n input: Readonly<ShallowRef<HTMLTextAreaElement | null>>,\n {\n maxRows,\n noAutoShrink,\n rows,\n }: {\n rows: MaybeRefOrGetter<Numberish>\n maxRows: MaybeRefOrGetter<Numberish | undefined>\n noAutoShrink: MaybeRefOrGetter<boolean>\n }\n) => {\n const height = ref<number | null | string>(0)\n const maxRowsNumber = useToNumber(\n computed(() => toValue(maxRows) || Number.NaN),\n {\n method: 'parseInt',\n nanToZero: true,\n }\n )\n const rowsNumber = useToNumber(rows, {\n method: 'parseInt',\n nanToZero: true,\n })\n const computedMinRows = computed(() => Math.max(rowsNumber.value || 2, 2))\n const computedMaxRows = computed(() => Math.max(computedMinRows.value, maxRowsNumber.value || 0))\n const computedRows = computed(() =>\n computedMinRows.value === computedMaxRows.value ? computedMinRows.value : null\n )\n\n const handleHeightChange = async () => {\n // Element must be visible (not hidden) and in document\n // Must be checked after above checks\n if (!input.value || !isVisible(input.value)) {\n height.value = null\n return\n }\n\n // Get current computed styles\n const computedStyle = getComputedStyle(input.value)\n // Height of one line of text in px\n const lineHeight = Number.parseFloat(computedStyle.lineHeight) || 1\n // Calculate height of border and padding\n const border =\n (Number.parseFloat(computedStyle.borderTopWidth) || 0) +\n (Number.parseFloat(computedStyle.borderBottomWidth) || 0)\n const padding =\n (Number.parseFloat(computedStyle.paddingTop) || 0) +\n (Number.parseFloat(computedStyle.paddingBottom) || 0)\n // Calculate offset\n const offset = border + padding\n // Minimum height for min rows (which must be 2 rows or greater for cross-browser support)\n const minHeight = lineHeight * computedMinRows.value + offset\n\n // Get the current style height (with `px` units)\n const oldHeight = input.value.style.height || computedStyle.height\n // Probe scrollHeight by temporarily changing the height to `auto`\n height.value = 'auto'\n await nextTick() // We need to wait for the dom to update. These cannot be batched in the same tick\n // Re-check input.value after await since the element may have been unmounted\n // (e.g., during SSR hydration when BFormGroup re-renders its wrapper element)\n if (!input.value) return\n const {scrollHeight} = input.value\n // Place the original old height back on the element, just in case `computedProp`\n // returns the same value as before\n height.value = oldHeight\n await nextTick() // We need to wait for the dom to update. These cannot be batched in the same tick\n if (!input.value) return\n\n // Calculate content height in 'rows' (scrollHeight includes padding but not border)\n const contentRows = Math.max((scrollHeight - padding) / lineHeight, 2)\n // Calculate number of rows to display (limited within min/max rows)\n const rows = Math.min(Math.max(contentRows, computedMinRows.value), computedMaxRows.value)\n // Calculate the required height of the textarea including border and padding (in pixels)\n const newHeight = Math.max(Math.ceil(rows * lineHeight + offset), minHeight)\n\n // Computed height remains the larger of `oldHeight` and new `height`,\n // when height is in `sticky` mode (prop `no-auto-shrink` is true)\n if (toValue(noAutoShrink) && (Number.parseFloat(oldHeight.toString()) || 0) > newHeight) {\n height.value = oldHeight\n return\n }\n\n // Return the new computed CSS height in px units\n height.value = `${newHeight}px`\n }\n\n onMounted(handleHeightChange)\n\n const computedStyles = computed<CSSProperties>(() => ({\n resize: 'none',\n height:\n typeof height.value === 'string'\n ? height.value\n : height.value\n ? `${height.value}px`\n : undefined,\n }))\n\n return {\n onInput: handleHeightChange,\n computedStyles,\n computedRows,\n }\n}\n","<template>\n <textarea\n :id=\"computedId\"\n ref=\"_input\"\n :class=\"computedClasses\"\n :name=\"props.name || undefined\"\n :form=\"props.form || undefined\"\n :value=\"modelValue ?? undefined\"\n :disabled=\"isDisabled\"\n :placeholder=\"props.placeholder\"\n :required=\"props.required || undefined\"\n :autocomplete=\"props.autocomplete || undefined\"\n :readonly=\"props.readonly || props.plaintext\"\n :aria-required=\"props.required || undefined\"\n :aria-invalid=\"computedAriaInvalid\"\n :rows=\"computedRows || 2\"\n :style=\"computedStyles\"\n :wrap=\"props.wrap || undefined\"\n @input=\"\n (e) => {\n onInput(e)\n handleHeightChange()\n }\n \"\n @change=\"onChange\"\n @blur=\"onBlur\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport type {BFormTextareaProps} from '../../types'\nimport {computed, type CSSProperties, useTemplateRef} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {normalizeInput} from '../../utils/normalizeInput'\nimport {useFormInput} from '../../composables/useFormInput'\nimport {useTextareaResize} from '../../composables/useTextareaResize'\n\nconst _props = withDefaults(defineProps<Omit<BFormTextareaProps, 'modelValue'>>(), {\n // CommonInputProps\n ariaInvalid: undefined,\n autocomplete: undefined,\n autofocus: false,\n debounce: 0,\n debounceMaxWait: Number.NaN,\n disabled: false,\n form: undefined,\n formatter: undefined,\n id: undefined,\n lazyFormatter: false,\n list: undefined,\n modelValue: '',\n name: undefined,\n placeholder: undefined,\n plaintext: false,\n readonly: false,\n required: false,\n size: undefined,\n state: undefined,\n // End CommonInputProps\n noResize: false,\n noAutoShrink: false,\n maxRows: undefined,\n rows: 2,\n wrap: 'soft',\n})\nconst props = useDefaults(_props, 'BFormTextarea')\n\nconst [modelValue, modelModifiers] = defineModel<\n Exclude<BFormTextareaProps['modelValue'], undefined>,\n 'trim' | 'lazy' | 'number'\n>({\n default: '',\n set: (v) => normalizeInput(v, modelModifiers),\n})\n\nconst input = useTemplateRef('_input')\n\nconst {\n computedId,\n computedAriaInvalid,\n onInput,\n stateClass,\n onChange,\n onBlur,\n focus,\n blur,\n isDisabled,\n} = useFormInput(props, input, modelValue, modelModifiers)\n\nconst computedClasses = computed(() => [\n stateClass.value,\n props.plaintext ? 'form-control-plaintext' : 'form-control',\n {\n [`form-control-${props.size}`]: !!props.size,\n },\n])\n\nconst {\n computedStyles: resizeStyles,\n onInput: handleHeightChange,\n computedRows,\n} = useTextareaResize(input, {\n maxRows: () => props.maxRows,\n rows: () => props.rows,\n noAutoShrink: () => props.noAutoShrink,\n})\n\nconst computedStyles = computed<CSSProperties>(() => ({\n resize: props.noResize ? 'none' : undefined,\n ...(props.maxRows || props.noAutoShrink ? resizeStyles.value : undefined),\n}))\n\ndefineExpose({\n blur,\n element: input,\n flushDebounce: onBlur,\n focus,\n})\n</script>\n","<template>\n <textarea\n :id=\"computedId\"\n ref=\"_input\"\n :class=\"computedClasses\"\n :name=\"props.name || undefined\"\n :form=\"props.form || undefined\"\n :value=\"modelValue ?? undefined\"\n :disabled=\"isDisabled\"\n :placeholder=\"props.placeholder\"\n :required=\"props.required || undefined\"\n :autocomplete=\"props.autocomplete || undefined\"\n :readonly=\"props.readonly || props.plaintext\"\n :aria-required=\"props.required || undefined\"\n :aria-invalid=\"computedAriaInvalid\"\n :rows=\"computedRows || 2\"\n :style=\"computedStyles\"\n :wrap=\"props.wrap || undefined\"\n @input=\"\n (e) => {\n onInput(e)\n handleHeightChange()\n }\n \"\n @change=\"onChange\"\n @blur=\"onBlur\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport type {BFormTextareaProps} from '../../types'\nimport {computed, type CSSProperties, useTemplateRef} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {normalizeInput} from '../../utils/normalizeInput'\nimport {useFormInput} from '../../composables/useFormInput'\nimport {useTextareaResize} from '../../composables/useTextareaResize'\n\nconst _props = withDefaults(defineProps<Omit<BFormTextareaProps, 'modelValue'>>(), {\n // CommonInputProps\n ariaInvalid: undefined,\n autocomplete: undefined,\n autofocus: false,\n debounce: 0,\n debounceMaxWait: Number.NaN,\n disabled: false,\n form: undefined,\n formatter: undefined,\n id: undefined,\n lazyFormatter: false,\n list: undefined,\n modelValue: '',\n name: undefined,\n placeholder: undefined,\n plaintext: false,\n readonly: false,\n required: false,\n size: undefined,\n state: undefined,\n // End CommonInputProps\n noResize: false,\n noAutoShrink: false,\n maxRows: undefined,\n rows: 2,\n wrap: 'soft',\n})\nconst props = useDefaults(_props, 'BFormTextarea')\n\nconst [modelValue, modelModifiers] = defineModel<\n Exclude<BFormTextareaProps['modelValue'], undefined>,\n 'trim' | 'lazy' | 'number'\n>({\n default: '',\n set: (v) => normalizeInput(v, modelModifiers),\n})\n\nconst input = useTemplateRef('_input')\n\nconst {\n computedId,\n computedAriaInvalid,\n onInput,\n stateClass,\n onChange,\n onBlur,\n focus,\n blur,\n isDisabled,\n} = useFormInput(props, input, modelValue, modelModifiers)\n\nconst computedClasses = computed(() => [\n stateClass.value,\n props.plaintext ? 'form-control-plaintext' : 'form-control',\n {\n [`form-control-${props.size}`]: !!props.size,\n },\n])\n\nconst {\n computedStyles: resizeStyles,\n onInput: handleHeightChange,\n computedRows,\n} = useTextareaResize(input, {\n maxRows: () => props.maxRows,\n rows: () => props.rows,\n noAutoShrink: () => props.noAutoShrink,\n})\n\nconst computedStyles = computed<CSSProperties>(() => ({\n resize: props.noResize ? 'none' : undefined,\n ...(props.maxRows || props.noAutoShrink ? resizeStyles.value : undefined),\n}))\n\ndefineExpose({\n blur,\n element: input,\n flushDebounce: onBlur,\n focus,\n})\n</script>\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { R as useToNumber } from "./dist-Dk9C_HFS.mjs";
2
2
  import { s as isVisible } from "./dom-AhkaSoh8.mjs";
3
- import { t as useDefaults } from "./useDefaults-BKgBaqOV.mjs";
4
- import { n as normalizeInput, t as useFormInput } from "./useFormInput-CA4FYoV7.mjs";
3
+ import { t as useDefaults } from "./useDefaults-DseelK6y.mjs";
4
+ import { n as normalizeInput, t as useFormInput } from "./useFormInput-CXl8rpD0.mjs";
5
5
  import { computed, createElementBlock, defineComponent, mergeModels, nextTick, normalizeClass, normalizeStyle, onMounted, openBlock, ref, toValue, unref, useModel, useTemplateRef } from "vue";
6
6
  //#region src/composables/useTextareaResize.ts
7
7
  var useTextareaResize = (input, { maxRows, noAutoShrink, rows }) => {
@@ -194,4 +194,4 @@ var BFormTextarea_default = /* @__PURE__ */ defineComponent({
194
194
  //#endregion
195
195
  export { BFormTextarea_default as t };
196
196
 
197
- //# sourceMappingURL=BFormTextarea-M21mholw.mjs.map
197
+ //# sourceMappingURL=BFormTextarea-DN1gAfSo.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"BFormTextarea-M21mholw.mjs","names":[],"sources":["../src/composables/useTextareaResize.ts","../src/components/BFormTextarea/BFormTextarea.vue","../src/components/BFormTextarea/BFormTextarea.vue"],"sourcesContent":["import {useToNumber} from '@vueuse/core'\nimport type {Numberish} from '../types/CommonTypes'\nimport {\n computed,\n type CSSProperties,\n type MaybeRefOrGetter,\n nextTick,\n onMounted,\n ref,\n type ShallowRef,\n toValue,\n} from 'vue'\nimport {isVisible} from '../utils/dom'\n\nexport const useTextareaResize = (\n input: Readonly<ShallowRef<HTMLTextAreaElement | null>>,\n {\n maxRows,\n noAutoShrink,\n rows,\n }: {\n rows: MaybeRefOrGetter<Numberish>\n maxRows: MaybeRefOrGetter<Numberish | undefined>\n noAutoShrink: MaybeRefOrGetter<boolean>\n }\n) => {\n const height = ref<number | null | string>(0)\n const maxRowsNumber = useToNumber(\n computed(() => toValue(maxRows) || Number.NaN),\n {\n method: 'parseInt',\n nanToZero: true,\n }\n )\n const rowsNumber = useToNumber(rows, {\n method: 'parseInt',\n nanToZero: true,\n })\n const computedMinRows = computed(() => Math.max(rowsNumber.value || 2, 2))\n const computedMaxRows = computed(() => Math.max(computedMinRows.value, maxRowsNumber.value || 0))\n const computedRows = computed(() =>\n computedMinRows.value === computedMaxRows.value ? computedMinRows.value : null\n )\n\n const handleHeightChange = async () => {\n // Element must be visible (not hidden) and in document\n // Must be checked after above checks\n if (!input.value || !isVisible(input.value)) {\n height.value = null\n return\n }\n\n // Get current computed styles\n const computedStyle = getComputedStyle(input.value)\n // Height of one line of text in px\n const lineHeight = Number.parseFloat(computedStyle.lineHeight) || 1\n // Calculate height of border and padding\n const border =\n (Number.parseFloat(computedStyle.borderTopWidth) || 0) +\n (Number.parseFloat(computedStyle.borderBottomWidth) || 0)\n const padding =\n (Number.parseFloat(computedStyle.paddingTop) || 0) +\n (Number.parseFloat(computedStyle.paddingBottom) || 0)\n // Calculate offset\n const offset = border + padding\n // Minimum height for min rows (which must be 2 rows or greater for cross-browser support)\n const minHeight = lineHeight * computedMinRows.value + offset\n\n // Get the current style height (with `px` units)\n const oldHeight = input.value.style.height || computedStyle.height\n // Probe scrollHeight by temporarily changing the height to `auto`\n height.value = 'auto'\n await nextTick() // We need to wait for the dom to update. These cannot be batched in the same tick\n // Re-check input.value after await since the element may have been unmounted\n // (e.g., during SSR hydration when BFormGroup re-renders its wrapper element)\n if (!input.value) return\n const {scrollHeight} = input.value\n // Place the original old height back on the element, just in case `computedProp`\n // returns the same value as before\n height.value = oldHeight\n await nextTick() // We need to wait for the dom to update. These cannot be batched in the same tick\n if (!input.value) return\n\n // Calculate content height in 'rows' (scrollHeight includes padding but not border)\n const contentRows = Math.max((scrollHeight - padding) / lineHeight, 2)\n // Calculate number of rows to display (limited within min/max rows)\n const rows = Math.min(Math.max(contentRows, computedMinRows.value), computedMaxRows.value)\n // Calculate the required height of the textarea including border and padding (in pixels)\n const newHeight = Math.max(Math.ceil(rows * lineHeight + offset), minHeight)\n\n // Computed height remains the larger of `oldHeight` and new `height`,\n // when height is in `sticky` mode (prop `no-auto-shrink` is true)\n if (toValue(noAutoShrink) && (Number.parseFloat(oldHeight.toString()) || 0) > newHeight) {\n height.value = oldHeight\n return\n }\n\n // Return the new computed CSS height in px units\n height.value = `${newHeight}px`\n }\n\n onMounted(handleHeightChange)\n\n const computedStyles = computed<CSSProperties>(() => ({\n resize: 'none',\n height:\n typeof height.value === 'string'\n ? height.value\n : height.value\n ? `${height.value}px`\n : undefined,\n }))\n\n return {\n onInput: handleHeightChange,\n computedStyles,\n computedRows,\n }\n}\n","<template>\n <textarea\n :id=\"computedId\"\n ref=\"_input\"\n :class=\"computedClasses\"\n :name=\"props.name || undefined\"\n :form=\"props.form || undefined\"\n :value=\"modelValue ?? undefined\"\n :disabled=\"isDisabled\"\n :placeholder=\"props.placeholder\"\n :required=\"props.required || undefined\"\n :autocomplete=\"props.autocomplete || undefined\"\n :readonly=\"props.readonly || props.plaintext\"\n :aria-required=\"props.required || undefined\"\n :aria-invalid=\"computedAriaInvalid\"\n :rows=\"computedRows || 2\"\n :style=\"computedStyles\"\n :wrap=\"props.wrap || undefined\"\n @input=\"\n (e) => {\n onInput(e)\n handleHeightChange()\n }\n \"\n @change=\"onChange\"\n @blur=\"onBlur\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport type {BFormTextareaProps} from '../../types'\nimport {computed, type CSSProperties, useTemplateRef} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {normalizeInput} from '../../utils/normalizeInput'\nimport {useFormInput} from '../../composables/useFormInput'\nimport {useTextareaResize} from '../../composables/useTextareaResize'\n\nconst _props = withDefaults(defineProps<Omit<BFormTextareaProps, 'modelValue'>>(), {\n // CommonInputProps\n ariaInvalid: undefined,\n autocomplete: undefined,\n autofocus: false,\n debounce: 0,\n debounceMaxWait: Number.NaN,\n disabled: false,\n form: undefined,\n formatter: undefined,\n id: undefined,\n lazyFormatter: false,\n list: undefined,\n modelValue: '',\n name: undefined,\n placeholder: undefined,\n plaintext: false,\n readonly: false,\n required: false,\n size: undefined,\n state: undefined,\n // End CommonInputProps\n noResize: false,\n noAutoShrink: false,\n maxRows: undefined,\n rows: 2,\n wrap: 'soft',\n})\nconst props = useDefaults(_props, 'BFormTextarea')\n\nconst [modelValue, modelModifiers] = defineModel<\n Exclude<BFormTextareaProps['modelValue'], undefined>,\n 'trim' | 'lazy' | 'number'\n>({\n default: '',\n set: (v) => normalizeInput(v, modelModifiers),\n})\n\nconst input = useTemplateRef('_input')\n\nconst {\n computedId,\n computedAriaInvalid,\n onInput,\n stateClass,\n onChange,\n onBlur,\n focus,\n blur,\n isDisabled,\n} = useFormInput(props, input, modelValue, modelModifiers)\n\nconst computedClasses = computed(() => [\n stateClass.value,\n props.plaintext ? 'form-control-plaintext' : 'form-control',\n {\n [`form-control-${props.size}`]: !!props.size,\n },\n])\n\nconst {\n computedStyles: resizeStyles,\n onInput: handleHeightChange,\n computedRows,\n} = useTextareaResize(input, {\n maxRows: () => props.maxRows,\n rows: () => props.rows,\n noAutoShrink: () => props.noAutoShrink,\n})\n\nconst computedStyles = computed<CSSProperties>(() => ({\n resize: props.noResize ? 'none' : undefined,\n ...(props.maxRows || props.noAutoShrink ? resizeStyles.value : undefined),\n}))\n\ndefineExpose({\n blur,\n element: input,\n flushDebounce: onBlur,\n focus,\n})\n</script>\n","<template>\n <textarea\n :id=\"computedId\"\n ref=\"_input\"\n :class=\"computedClasses\"\n :name=\"props.name || undefined\"\n :form=\"props.form || undefined\"\n :value=\"modelValue ?? undefined\"\n :disabled=\"isDisabled\"\n :placeholder=\"props.placeholder\"\n :required=\"props.required || undefined\"\n :autocomplete=\"props.autocomplete || undefined\"\n :readonly=\"props.readonly || props.plaintext\"\n :aria-required=\"props.required || undefined\"\n :aria-invalid=\"computedAriaInvalid\"\n :rows=\"computedRows || 2\"\n :style=\"computedStyles\"\n :wrap=\"props.wrap || undefined\"\n @input=\"\n (e) => {\n onInput(e)\n handleHeightChange()\n }\n \"\n @change=\"onChange\"\n @blur=\"onBlur\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport type {BFormTextareaProps} from '../../types'\nimport {computed, type CSSProperties, useTemplateRef} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {normalizeInput} from '../../utils/normalizeInput'\nimport {useFormInput} from '../../composables/useFormInput'\nimport {useTextareaResize} from '../../composables/useTextareaResize'\n\nconst _props = withDefaults(defineProps<Omit<BFormTextareaProps, 'modelValue'>>(), {\n // CommonInputProps\n ariaInvalid: undefined,\n autocomplete: undefined,\n autofocus: false,\n debounce: 0,\n debounceMaxWait: Number.NaN,\n disabled: false,\n form: undefined,\n formatter: undefined,\n id: undefined,\n lazyFormatter: false,\n list: undefined,\n modelValue: '',\n name: undefined,\n placeholder: undefined,\n plaintext: false,\n readonly: false,\n required: false,\n size: undefined,\n state: undefined,\n // End CommonInputProps\n noResize: false,\n noAutoShrink: false,\n maxRows: undefined,\n rows: 2,\n wrap: 'soft',\n})\nconst props = useDefaults(_props, 'BFormTextarea')\n\nconst [modelValue, modelModifiers] = defineModel<\n Exclude<BFormTextareaProps['modelValue'], undefined>,\n 'trim' | 'lazy' | 'number'\n>({\n default: '',\n set: (v) => normalizeInput(v, modelModifiers),\n})\n\nconst input = useTemplateRef('_input')\n\nconst {\n computedId,\n computedAriaInvalid,\n onInput,\n stateClass,\n onChange,\n onBlur,\n focus,\n blur,\n isDisabled,\n} = useFormInput(props, input, modelValue, modelModifiers)\n\nconst computedClasses = computed(() => [\n stateClass.value,\n props.plaintext ? 'form-control-plaintext' : 'form-control',\n {\n [`form-control-${props.size}`]: !!props.size,\n },\n])\n\nconst {\n computedStyles: resizeStyles,\n onInput: handleHeightChange,\n computedRows,\n} = useTextareaResize(input, {\n maxRows: () => props.maxRows,\n rows: () => props.rows,\n noAutoShrink: () => props.noAutoShrink,\n})\n\nconst computedStyles = computed<CSSProperties>(() => ({\n resize: props.noResize ? 'none' : undefined,\n ...(props.maxRows || props.noAutoShrink ? resizeStyles.value : undefined),\n}))\n\ndefineExpose({\n blur,\n element: input,\n flushDebounce: onBlur,\n focus,\n})\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"BFormTextarea-DN1gAfSo.mjs","names":[],"sources":["../src/composables/useTextareaResize.ts","../src/components/BFormTextarea/BFormTextarea.vue","../src/components/BFormTextarea/BFormTextarea.vue"],"sourcesContent":["import {useToNumber} from '@vueuse/core'\nimport type {Numberish} from '../types/CommonTypes'\nimport {\n computed,\n type CSSProperties,\n type MaybeRefOrGetter,\n nextTick,\n onMounted,\n ref,\n type ShallowRef,\n toValue,\n} from 'vue'\nimport {isVisible} from '../utils/dom'\n\nexport const useTextareaResize = (\n input: Readonly<ShallowRef<HTMLTextAreaElement | null>>,\n {\n maxRows,\n noAutoShrink,\n rows,\n }: {\n rows: MaybeRefOrGetter<Numberish>\n maxRows: MaybeRefOrGetter<Numberish | undefined>\n noAutoShrink: MaybeRefOrGetter<boolean>\n }\n) => {\n const height = ref<number | null | string>(0)\n const maxRowsNumber = useToNumber(\n computed(() => toValue(maxRows) || Number.NaN),\n {\n method: 'parseInt',\n nanToZero: true,\n }\n )\n const rowsNumber = useToNumber(rows, {\n method: 'parseInt',\n nanToZero: true,\n })\n const computedMinRows = computed(() => Math.max(rowsNumber.value || 2, 2))\n const computedMaxRows = computed(() => Math.max(computedMinRows.value, maxRowsNumber.value || 0))\n const computedRows = computed(() =>\n computedMinRows.value === computedMaxRows.value ? computedMinRows.value : null\n )\n\n const handleHeightChange = async () => {\n // Element must be visible (not hidden) and in document\n // Must be checked after above checks\n if (!input.value || !isVisible(input.value)) {\n height.value = null\n return\n }\n\n // Get current computed styles\n const computedStyle = getComputedStyle(input.value)\n // Height of one line of text in px\n const lineHeight = Number.parseFloat(computedStyle.lineHeight) || 1\n // Calculate height of border and padding\n const border =\n (Number.parseFloat(computedStyle.borderTopWidth) || 0) +\n (Number.parseFloat(computedStyle.borderBottomWidth) || 0)\n const padding =\n (Number.parseFloat(computedStyle.paddingTop) || 0) +\n (Number.parseFloat(computedStyle.paddingBottom) || 0)\n // Calculate offset\n const offset = border + padding\n // Minimum height for min rows (which must be 2 rows or greater for cross-browser support)\n const minHeight = lineHeight * computedMinRows.value + offset\n\n // Get the current style height (with `px` units)\n const oldHeight = input.value.style.height || computedStyle.height\n // Probe scrollHeight by temporarily changing the height to `auto`\n height.value = 'auto'\n await nextTick() // We need to wait for the dom to update. These cannot be batched in the same tick\n // Re-check input.value after await since the element may have been unmounted\n // (e.g., during SSR hydration when BFormGroup re-renders its wrapper element)\n if (!input.value) return\n const {scrollHeight} = input.value\n // Place the original old height back on the element, just in case `computedProp`\n // returns the same value as before\n height.value = oldHeight\n await nextTick() // We need to wait for the dom to update. These cannot be batched in the same tick\n if (!input.value) return\n\n // Calculate content height in 'rows' (scrollHeight includes padding but not border)\n const contentRows = Math.max((scrollHeight - padding) / lineHeight, 2)\n // Calculate number of rows to display (limited within min/max rows)\n const rows = Math.min(Math.max(contentRows, computedMinRows.value), computedMaxRows.value)\n // Calculate the required height of the textarea including border and padding (in pixels)\n const newHeight = Math.max(Math.ceil(rows * lineHeight + offset), minHeight)\n\n // Computed height remains the larger of `oldHeight` and new `height`,\n // when height is in `sticky` mode (prop `no-auto-shrink` is true)\n if (toValue(noAutoShrink) && (Number.parseFloat(oldHeight.toString()) || 0) > newHeight) {\n height.value = oldHeight\n return\n }\n\n // Return the new computed CSS height in px units\n height.value = `${newHeight}px`\n }\n\n onMounted(handleHeightChange)\n\n const computedStyles = computed<CSSProperties>(() => ({\n resize: 'none',\n height:\n typeof height.value === 'string'\n ? height.value\n : height.value\n ? `${height.value}px`\n : undefined,\n }))\n\n return {\n onInput: handleHeightChange,\n computedStyles,\n computedRows,\n }\n}\n","<template>\n <textarea\n :id=\"computedId\"\n ref=\"_input\"\n :class=\"computedClasses\"\n :name=\"props.name || undefined\"\n :form=\"props.form || undefined\"\n :value=\"modelValue ?? undefined\"\n :disabled=\"isDisabled\"\n :placeholder=\"props.placeholder\"\n :required=\"props.required || undefined\"\n :autocomplete=\"props.autocomplete || undefined\"\n :readonly=\"props.readonly || props.plaintext\"\n :aria-required=\"props.required || undefined\"\n :aria-invalid=\"computedAriaInvalid\"\n :rows=\"computedRows || 2\"\n :style=\"computedStyles\"\n :wrap=\"props.wrap || undefined\"\n @input=\"\n (e) => {\n onInput(e)\n handleHeightChange()\n }\n \"\n @change=\"onChange\"\n @blur=\"onBlur\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport type {BFormTextareaProps} from '../../types'\nimport {computed, type CSSProperties, useTemplateRef} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {normalizeInput} from '../../utils/normalizeInput'\nimport {useFormInput} from '../../composables/useFormInput'\nimport {useTextareaResize} from '../../composables/useTextareaResize'\n\nconst _props = withDefaults(defineProps<Omit<BFormTextareaProps, 'modelValue'>>(), {\n // CommonInputProps\n ariaInvalid: undefined,\n autocomplete: undefined,\n autofocus: false,\n debounce: 0,\n debounceMaxWait: Number.NaN,\n disabled: false,\n form: undefined,\n formatter: undefined,\n id: undefined,\n lazyFormatter: false,\n list: undefined,\n modelValue: '',\n name: undefined,\n placeholder: undefined,\n plaintext: false,\n readonly: false,\n required: false,\n size: undefined,\n state: undefined,\n // End CommonInputProps\n noResize: false,\n noAutoShrink: false,\n maxRows: undefined,\n rows: 2,\n wrap: 'soft',\n})\nconst props = useDefaults(_props, 'BFormTextarea')\n\nconst [modelValue, modelModifiers] = defineModel<\n Exclude<BFormTextareaProps['modelValue'], undefined>,\n 'trim' | 'lazy' | 'number'\n>({\n default: '',\n set: (v) => normalizeInput(v, modelModifiers),\n})\n\nconst input = useTemplateRef('_input')\n\nconst {\n computedId,\n computedAriaInvalid,\n onInput,\n stateClass,\n onChange,\n onBlur,\n focus,\n blur,\n isDisabled,\n} = useFormInput(props, input, modelValue, modelModifiers)\n\nconst computedClasses = computed(() => [\n stateClass.value,\n props.plaintext ? 'form-control-plaintext' : 'form-control',\n {\n [`form-control-${props.size}`]: !!props.size,\n },\n])\n\nconst {\n computedStyles: resizeStyles,\n onInput: handleHeightChange,\n computedRows,\n} = useTextareaResize(input, {\n maxRows: () => props.maxRows,\n rows: () => props.rows,\n noAutoShrink: () => props.noAutoShrink,\n})\n\nconst computedStyles = computed<CSSProperties>(() => ({\n resize: props.noResize ? 'none' : undefined,\n ...(props.maxRows || props.noAutoShrink ? resizeStyles.value : undefined),\n}))\n\ndefineExpose({\n blur,\n element: input,\n flushDebounce: onBlur,\n focus,\n})\n</script>\n","<template>\n <textarea\n :id=\"computedId\"\n ref=\"_input\"\n :class=\"computedClasses\"\n :name=\"props.name || undefined\"\n :form=\"props.form || undefined\"\n :value=\"modelValue ?? undefined\"\n :disabled=\"isDisabled\"\n :placeholder=\"props.placeholder\"\n :required=\"props.required || undefined\"\n :autocomplete=\"props.autocomplete || undefined\"\n :readonly=\"props.readonly || props.plaintext\"\n :aria-required=\"props.required || undefined\"\n :aria-invalid=\"computedAriaInvalid\"\n :rows=\"computedRows || 2\"\n :style=\"computedStyles\"\n :wrap=\"props.wrap || undefined\"\n @input=\"\n (e) => {\n onInput(e)\n handleHeightChange()\n }\n \"\n @change=\"onChange\"\n @blur=\"onBlur\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport type {BFormTextareaProps} from '../../types'\nimport {computed, type CSSProperties, useTemplateRef} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {normalizeInput} from '../../utils/normalizeInput'\nimport {useFormInput} from '../../composables/useFormInput'\nimport {useTextareaResize} from '../../composables/useTextareaResize'\n\nconst _props = withDefaults(defineProps<Omit<BFormTextareaProps, 'modelValue'>>(), {\n // CommonInputProps\n ariaInvalid: undefined,\n autocomplete: undefined,\n autofocus: false,\n debounce: 0,\n debounceMaxWait: Number.NaN,\n disabled: false,\n form: undefined,\n formatter: undefined,\n id: undefined,\n lazyFormatter: false,\n list: undefined,\n modelValue: '',\n name: undefined,\n placeholder: undefined,\n plaintext: false,\n readonly: false,\n required: false,\n size: undefined,\n state: undefined,\n // End CommonInputProps\n noResize: false,\n noAutoShrink: false,\n maxRows: undefined,\n rows: 2,\n wrap: 'soft',\n})\nconst props = useDefaults(_props, 'BFormTextarea')\n\nconst [modelValue, modelModifiers] = defineModel<\n Exclude<BFormTextareaProps['modelValue'], undefined>,\n 'trim' | 'lazy' | 'number'\n>({\n default: '',\n set: (v) => normalizeInput(v, modelModifiers),\n})\n\nconst input = useTemplateRef('_input')\n\nconst {\n computedId,\n computedAriaInvalid,\n onInput,\n stateClass,\n onChange,\n onBlur,\n focus,\n blur,\n isDisabled,\n} = useFormInput(props, input, modelValue, modelModifiers)\n\nconst computedClasses = computed(() => [\n stateClass.value,\n props.plaintext ? 'form-control-plaintext' : 'form-control',\n {\n [`form-control-${props.size}`]: !!props.size,\n },\n])\n\nconst {\n computedStyles: resizeStyles,\n onInput: handleHeightChange,\n computedRows,\n} = useTextareaResize(input, {\n maxRows: () => props.maxRows,\n rows: () => props.rows,\n noAutoShrink: () => props.noAutoShrink,\n})\n\nconst computedStyles = computed<CSSProperties>(() => ({\n resize: props.noResize ? 'none' : undefined,\n ...(props.maxRows || props.noAutoShrink ? resizeStyles.value : undefined),\n}))\n\ndefineExpose({\n blur,\n element: input,\n flushDebounce: onBlur,\n focus,\n})\n</script>\n"],"mappings":"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"}
@@ -1,6 +1,46 @@
1
- import { t as useDefaults } from "./useDefaults-BKgBaqOV.mjs";
1
+ import { d as formGroupKey } from "./keys-DU7sQgl3.mjs";
2
+ import { t as useDefaults } from "./useDefaults-DseelK6y.mjs";
2
3
  import { t as useColorVariantClasses } from "./useColorVariantClasses-CqeXHjRh.mjs";
3
- import { computed, createBlock, createTextVNode, defineComponent, normalizeClass, openBlock, renderSlot, resolveDynamicComponent, toDisplayString, unref, withCtx } from "vue";
4
+ import { computed, createBlock, createTextVNode, defineComponent, normalizeClass, onUnmounted, openBlock, provide, renderSlot, resolveDynamicComponent, shallowRef, toDisplayString, unref, withCtx } from "vue";
5
+ //#region src/composables/useProvideFormGroupData.ts
6
+ var useLabelTargetRegistry = () => {
7
+ const labelTargetIds = shallowRef([]);
8
+ const track = (idRef) => {
9
+ labelTargetIds.value = [...labelTargetIds.value, idRef];
10
+ onUnmounted(() => {
11
+ labelTargetIds.value = labelTargetIds.value.filter((r) => r !== idRef);
12
+ });
13
+ };
14
+ return {
15
+ labelTargetIds,
16
+ track
17
+ };
18
+ };
19
+ /**
20
+ * Provides formGroupKey for descendant form controls. Each provider has its own isolated
21
+ * label-target registry: BFormGroup uses the resulting `singleLabelTargetId` to drive its
22
+ * label/legend rendering. Intermediate components (e.g. BFormFloatingLabel) call this with
23
+ * passed-through state/disabled, acting as a boundary — their registry exists but is unused,
24
+ * so descendant claims never reach an outer BFormGroup.
25
+ */
26
+ var useProvideFormGroupData = ({ state, disabled }) => {
27
+ const { labelTargetIds, track } = useLabelTargetRegistry();
28
+ provide(formGroupKey, () => ({
29
+ state,
30
+ disabled,
31
+ track
32
+ }));
33
+ return { singleLabelTargetId: computed(() => {
34
+ let single = null;
35
+ for (const r of labelTargetIds.value) {
36
+ const v = r.value;
37
+ if (!v) continue;
38
+ if (single !== null && single !== v) return null;
39
+ single = v;
40
+ }
41
+ return single;
42
+ }) };
43
+ };
4
44
  //#endregion
5
45
  //#region src/components/BForm/BFormInvalidFeedback.vue
6
46
  var BFormInvalidFeedback_default = /* @__PURE__ */ defineComponent({
@@ -148,6 +188,6 @@ var BFormValidFeedback_default = /* @__PURE__ */ defineComponent({
148
188
  }
149
189
  });
150
190
  //#endregion
151
- export { BFormInvalidFeedback_default as i, BFormText_default as n, BFormRow_default as r, BFormValidFeedback_default as t };
191
+ export { useProvideFormGroupData as a, BFormInvalidFeedback_default as i, BFormText_default as n, BFormRow_default as r, BFormValidFeedback_default as t };
152
192
 
153
- //# sourceMappingURL=BFormValidFeedback-DWkakzVO.mjs.map
193
+ //# sourceMappingURL=BFormValidFeedback-CBYxQLDz.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BFormValidFeedback-CBYxQLDz.mjs","names":[],"sources":["../src/composables/useProvideFormGroupData.ts","../src/components/BForm/BFormInvalidFeedback.vue","../src/components/BForm/BFormInvalidFeedback.vue","../src/components/BForm/BFormRow.vue","../src/components/BForm/BFormRow.vue","../src/components/BForm/BFormText.vue","../src/components/BForm/BFormText.vue","../src/components/BForm/BFormValidFeedback.vue","../src/components/BForm/BFormValidFeedback.vue"],"sourcesContent":["import {computed, onUnmounted, provide, type Ref, shallowRef} from 'vue'\nimport type {ValidationState} from '../types/CommonTypes'\nimport {formGroupKey} from '../utils/keys'\n\nconst useLabelTargetRegistry = () => {\n const labelTargetIds = shallowRef<Readonly<Ref<string | null>>[]>([])\n\n // Track runs in the descendant's setup, so onUnmounted binds to the descendant.\n const track = (idRef: Readonly<Ref<string | null>>) => {\n labelTargetIds.value = [...labelTargetIds.value, idRef]\n onUnmounted(() => {\n labelTargetIds.value = labelTargetIds.value.filter((r: Readonly<Ref<string | null>>) => r !== idRef)\n })\n }\n\n return {labelTargetIds, track}\n}\n\n/**\n * Provides formGroupKey for descendant form controls. Each provider has its own isolated\n * label-target registry: BFormGroup uses the resulting `singleLabelTargetId` to drive its\n * label/legend rendering. Intermediate components (e.g. BFormFloatingLabel) call this with\n * passed-through state/disabled, acting as a boundary — their registry exists but is unused,\n * so descendant claims never reach an outer BFormGroup.\n */\nexport const useProvideFormGroupData = ({\n state,\n disabled,\n}: {\n state: Readonly<Ref<ValidationState | undefined>>\n disabled: Readonly<Ref<boolean>>\n}) => {\n const {labelTargetIds, track} = useLabelTargetRegistry()\n\n provide(formGroupKey, () => ({state, disabled, track}))\n\n // null unless exactly one distinct non-empty id is currently registered.\n const singleLabelTargetId = computed<string | null>(() => {\n let single: string | null = null\n for (const r of labelTargetIds.value) {\n const v = r.value\n if (!v) continue\n if (single !== null && single !== v) return null\n single = v\n }\n return single\n })\n\n return {singleLabelTargetId}\n}\n","<template>\n <component\n :is=\"props.tag\"\n :id=\"props.id\"\n :role=\"props.role\"\n :aria-live=\"props.ariaLive\"\n :aria-atomic=\"props.ariaLive ? true : undefined\"\n :class=\"computedClasses\"\n >\n <slot>\n {{ props.text }}\n </slot>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {BFormInvalidFeedbackProps, BFormInvalidFeedbackSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<BFormInvalidFeedbackProps>(), {\n ariaLive: undefined,\n forceShow: false,\n id: undefined,\n role: undefined,\n state: null,\n tag: 'div',\n text: undefined,\n tooltip: false,\n})\nconst props = useDefaults(_props, 'BFormInvalidFeedback')\ndefineSlots<BFormInvalidFeedbackSlots>()\n\nconst computedShow = computed(() => props.forceShow || props.state === false)\n\nconst computedClasses = computed(() => ({\n 'd-block': computedShow.value,\n 'invalid-feedback': !props.tooltip,\n 'invalid-tooltip': props.tooltip,\n}))\n</script>\n","<template>\n <component\n :is=\"props.tag\"\n :id=\"props.id\"\n :role=\"props.role\"\n :aria-live=\"props.ariaLive\"\n :aria-atomic=\"props.ariaLive ? true : undefined\"\n :class=\"computedClasses\"\n >\n <slot>\n {{ props.text }}\n </slot>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {BFormInvalidFeedbackProps, BFormInvalidFeedbackSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<BFormInvalidFeedbackProps>(), {\n ariaLive: undefined,\n forceShow: false,\n id: undefined,\n role: undefined,\n state: null,\n tag: 'div',\n text: undefined,\n tooltip: false,\n})\nconst props = useDefaults(_props, 'BFormInvalidFeedback')\ndefineSlots<BFormInvalidFeedbackSlots>()\n\nconst computedShow = computed(() => props.forceShow || props.state === false)\n\nconst computedClasses = computed(() => ({\n 'd-block': computedShow.value,\n 'invalid-feedback': !props.tooltip,\n 'invalid-tooltip': props.tooltip,\n}))\n</script>\n","<template>\n <component :is=\"props.tag\" class=\"row d-flex flex-wrap\">\n <slot />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BFormRowProps, BFormRowSlots} from '../../types'\nimport {useDefaults} from '../../composables/useDefaults'\n\nconst _props = withDefaults(defineProps<BFormRowProps>(), {\n tag: 'div',\n})\nconst props = useDefaults(_props, 'BFormRow')\ndefineSlots<BFormRowSlots>()\n</script>\n","<template>\n <component :is=\"props.tag\" class=\"row d-flex flex-wrap\">\n <slot />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BFormRowProps, BFormRowSlots} from '../../types'\nimport {useDefaults} from '../../composables/useDefaults'\n\nconst _props = withDefaults(defineProps<BFormRowProps>(), {\n tag: 'div',\n})\nconst props = useDefaults(_props, 'BFormRow')\ndefineSlots<BFormRowSlots>()\n</script>\n","<template>\n <component :is=\"props.tag\" :id=\"props.id\" :class=\"computedClasses\">\n <slot>\n {{ props.text }}\n </slot>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useColorVariantClasses} from '../../composables/useColorVariantClasses'\nimport type {BFormTextProps, BFormTextSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<BFormTextProps>(), {\n id: undefined,\n inline: false,\n tag: 'small',\n text: undefined,\n textVariant: 'body-secondary',\n})\nconst props = useDefaults(_props, 'BFormText')\ndefineSlots<BFormTextSlots>()\n\nconst colorClasses = useColorVariantClasses(props)\nconst computedClasses = computed(() => [\n colorClasses.value,\n {\n 'form-text': !props.inline,\n },\n])\n</script>\n","<template>\n <component :is=\"props.tag\" :id=\"props.id\" :class=\"computedClasses\">\n <slot>\n {{ props.text }}\n </slot>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useColorVariantClasses} from '../../composables/useColorVariantClasses'\nimport type {BFormTextProps, BFormTextSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<BFormTextProps>(), {\n id: undefined,\n inline: false,\n tag: 'small',\n text: undefined,\n textVariant: 'body-secondary',\n})\nconst props = useDefaults(_props, 'BFormText')\ndefineSlots<BFormTextSlots>()\n\nconst colorClasses = useColorVariantClasses(props)\nconst computedClasses = computed(() => [\n colorClasses.value,\n {\n 'form-text': !props.inline,\n },\n])\n</script>\n","<template>\n <component\n :is=\"props.tag\"\n :id=\"props.id\"\n :role=\"props.role\"\n :aria-live=\"props.ariaLive\"\n :aria-atomic=\"props.ariaLive ? true : undefined\"\n :class=\"computedClasses\"\n >\n <slot>\n {{ props.text }}\n </slot>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {BFormValidFeedbackProps, BFormValidFeedbackSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<BFormValidFeedbackProps>(), {\n ariaLive: undefined,\n forceShow: false,\n id: undefined,\n role: undefined,\n state: null,\n tag: 'div',\n text: undefined,\n tooltip: false,\n})\nconst props = useDefaults(_props, 'BFormInvalidFeedback')\ndefineSlots<BFormValidFeedbackSlots>()\n\nconst computedShow = computed(() => props.forceShow === true || props.state === true)\n\nconst computedClasses = computed(() => ({\n 'd-block': computedShow.value,\n 'valid-feedback': !props.tooltip,\n 'valid-tooltip': props.tooltip,\n}))\n</script>\n","<template>\n <component\n :is=\"props.tag\"\n :id=\"props.id\"\n :role=\"props.role\"\n :aria-live=\"props.ariaLive\"\n :aria-atomic=\"props.ariaLive ? true : undefined\"\n :class=\"computedClasses\"\n >\n <slot>\n {{ props.text }}\n </slot>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {BFormValidFeedbackProps, BFormValidFeedbackSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<BFormValidFeedbackProps>(), {\n ariaLive: undefined,\n forceShow: false,\n id: undefined,\n role: undefined,\n state: null,\n tag: 'div',\n text: undefined,\n tooltip: false,\n})\nconst props = useDefaults(_props, 'BFormInvalidFeedback')\ndefineSlots<BFormValidFeedbackSlots>()\n\nconst computedShow = computed(() => props.forceShow === true || props.state === true)\n\nconst computedClasses = computed(() => ({\n 'd-block': computedShow.value,\n 'valid-feedback': !props.tooltip,\n 'valid-tooltip': props.tooltip,\n}))\n</script>\n"],"mappings":"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"}
@@ -1,7 +1,47 @@
1
1
  require("./chunk-CoQrYLCe.js");
2
- const require_useDefaults = require("./useDefaults-DsLf4iRY.js");
2
+ const require_keys = require("./keys-BMye8nSf.js");
3
+ const require_useDefaults = require("./useDefaults-C0CYry78.js");
3
4
  const require_useColorVariantClasses = require("./useColorVariantClasses-Dq0sOYDL.js");
4
5
  let vue = require("vue");
6
+ //#region src/composables/useProvideFormGroupData.ts
7
+ var useLabelTargetRegistry = () => {
8
+ const labelTargetIds = (0, vue.shallowRef)([]);
9
+ const track = (idRef) => {
10
+ labelTargetIds.value = [...labelTargetIds.value, idRef];
11
+ (0, vue.onUnmounted)(() => {
12
+ labelTargetIds.value = labelTargetIds.value.filter((r) => r !== idRef);
13
+ });
14
+ };
15
+ return {
16
+ labelTargetIds,
17
+ track
18
+ };
19
+ };
20
+ /**
21
+ * Provides formGroupKey for descendant form controls. Each provider has its own isolated
22
+ * label-target registry: BFormGroup uses the resulting `singleLabelTargetId` to drive its
23
+ * label/legend rendering. Intermediate components (e.g. BFormFloatingLabel) call this with
24
+ * passed-through state/disabled, acting as a boundary — their registry exists but is unused,
25
+ * so descendant claims never reach an outer BFormGroup.
26
+ */
27
+ var useProvideFormGroupData = ({ state, disabled }) => {
28
+ const { labelTargetIds, track } = useLabelTargetRegistry();
29
+ (0, vue.provide)(require_keys.formGroupKey, () => ({
30
+ state,
31
+ disabled,
32
+ track
33
+ }));
34
+ return { singleLabelTargetId: (0, vue.computed)(() => {
35
+ let single = null;
36
+ for (const r of labelTargetIds.value) {
37
+ const v = r.value;
38
+ if (!v) continue;
39
+ if (single !== null && single !== v) return null;
40
+ single = v;
41
+ }
42
+ return single;
43
+ }) };
44
+ };
5
45
  //#endregion
6
46
  //#region src/components/BForm/BFormInvalidFeedback.vue
7
47
  var BFormInvalidFeedback_default = /* @__PURE__ */ (0, vue.defineComponent)({
@@ -173,5 +213,11 @@ Object.defineProperty(exports, "BFormValidFeedback_default", {
173
213
  return BFormValidFeedback_default;
174
214
  }
175
215
  });
216
+ Object.defineProperty(exports, "useProvideFormGroupData", {
217
+ enumerable: true,
218
+ get: function() {
219
+ return useProvideFormGroupData;
220
+ }
221
+ });
176
222
 
177
- //# sourceMappingURL=BFormValidFeedback-BhkEhSa0.js.map
223
+ //# sourceMappingURL=BFormValidFeedback-Kwxh798d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BFormValidFeedback-Kwxh798d.js","names":[],"sources":["../src/composables/useProvideFormGroupData.ts","../src/components/BForm/BFormInvalidFeedback.vue","../src/components/BForm/BFormInvalidFeedback.vue","../src/components/BForm/BFormRow.vue","../src/components/BForm/BFormRow.vue","../src/components/BForm/BFormText.vue","../src/components/BForm/BFormText.vue","../src/components/BForm/BFormValidFeedback.vue","../src/components/BForm/BFormValidFeedback.vue"],"sourcesContent":["import {computed, onUnmounted, provide, type Ref, shallowRef} from 'vue'\nimport type {ValidationState} from '../types/CommonTypes'\nimport {formGroupKey} from '../utils/keys'\n\nconst useLabelTargetRegistry = () => {\n const labelTargetIds = shallowRef<Readonly<Ref<string | null>>[]>([])\n\n // Track runs in the descendant's setup, so onUnmounted binds to the descendant.\n const track = (idRef: Readonly<Ref<string | null>>) => {\n labelTargetIds.value = [...labelTargetIds.value, idRef]\n onUnmounted(() => {\n labelTargetIds.value = labelTargetIds.value.filter((r: Readonly<Ref<string | null>>) => r !== idRef)\n })\n }\n\n return {labelTargetIds, track}\n}\n\n/**\n * Provides formGroupKey for descendant form controls. Each provider has its own isolated\n * label-target registry: BFormGroup uses the resulting `singleLabelTargetId` to drive its\n * label/legend rendering. Intermediate components (e.g. BFormFloatingLabel) call this with\n * passed-through state/disabled, acting as a boundary — their registry exists but is unused,\n * so descendant claims never reach an outer BFormGroup.\n */\nexport const useProvideFormGroupData = ({\n state,\n disabled,\n}: {\n state: Readonly<Ref<ValidationState | undefined>>\n disabled: Readonly<Ref<boolean>>\n}) => {\n const {labelTargetIds, track} = useLabelTargetRegistry()\n\n provide(formGroupKey, () => ({state, disabled, track}))\n\n // null unless exactly one distinct non-empty id is currently registered.\n const singleLabelTargetId = computed<string | null>(() => {\n let single: string | null = null\n for (const r of labelTargetIds.value) {\n const v = r.value\n if (!v) continue\n if (single !== null && single !== v) return null\n single = v\n }\n return single\n })\n\n return {singleLabelTargetId}\n}\n","<template>\n <component\n :is=\"props.tag\"\n :id=\"props.id\"\n :role=\"props.role\"\n :aria-live=\"props.ariaLive\"\n :aria-atomic=\"props.ariaLive ? true : undefined\"\n :class=\"computedClasses\"\n >\n <slot>\n {{ props.text }}\n </slot>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {BFormInvalidFeedbackProps, BFormInvalidFeedbackSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<BFormInvalidFeedbackProps>(), {\n ariaLive: undefined,\n forceShow: false,\n id: undefined,\n role: undefined,\n state: null,\n tag: 'div',\n text: undefined,\n tooltip: false,\n})\nconst props = useDefaults(_props, 'BFormInvalidFeedback')\ndefineSlots<BFormInvalidFeedbackSlots>()\n\nconst computedShow = computed(() => props.forceShow || props.state === false)\n\nconst computedClasses = computed(() => ({\n 'd-block': computedShow.value,\n 'invalid-feedback': !props.tooltip,\n 'invalid-tooltip': props.tooltip,\n}))\n</script>\n","<template>\n <component\n :is=\"props.tag\"\n :id=\"props.id\"\n :role=\"props.role\"\n :aria-live=\"props.ariaLive\"\n :aria-atomic=\"props.ariaLive ? true : undefined\"\n :class=\"computedClasses\"\n >\n <slot>\n {{ props.text }}\n </slot>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {BFormInvalidFeedbackProps, BFormInvalidFeedbackSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<BFormInvalidFeedbackProps>(), {\n ariaLive: undefined,\n forceShow: false,\n id: undefined,\n role: undefined,\n state: null,\n tag: 'div',\n text: undefined,\n tooltip: false,\n})\nconst props = useDefaults(_props, 'BFormInvalidFeedback')\ndefineSlots<BFormInvalidFeedbackSlots>()\n\nconst computedShow = computed(() => props.forceShow || props.state === false)\n\nconst computedClasses = computed(() => ({\n 'd-block': computedShow.value,\n 'invalid-feedback': !props.tooltip,\n 'invalid-tooltip': props.tooltip,\n}))\n</script>\n","<template>\n <component :is=\"props.tag\" class=\"row d-flex flex-wrap\">\n <slot />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BFormRowProps, BFormRowSlots} from '../../types'\nimport {useDefaults} from '../../composables/useDefaults'\n\nconst _props = withDefaults(defineProps<BFormRowProps>(), {\n tag: 'div',\n})\nconst props = useDefaults(_props, 'BFormRow')\ndefineSlots<BFormRowSlots>()\n</script>\n","<template>\n <component :is=\"props.tag\" class=\"row d-flex flex-wrap\">\n <slot />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BFormRowProps, BFormRowSlots} from '../../types'\nimport {useDefaults} from '../../composables/useDefaults'\n\nconst _props = withDefaults(defineProps<BFormRowProps>(), {\n tag: 'div',\n})\nconst props = useDefaults(_props, 'BFormRow')\ndefineSlots<BFormRowSlots>()\n</script>\n","<template>\n <component :is=\"props.tag\" :id=\"props.id\" :class=\"computedClasses\">\n <slot>\n {{ props.text }}\n </slot>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useColorVariantClasses} from '../../composables/useColorVariantClasses'\nimport type {BFormTextProps, BFormTextSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<BFormTextProps>(), {\n id: undefined,\n inline: false,\n tag: 'small',\n text: undefined,\n textVariant: 'body-secondary',\n})\nconst props = useDefaults(_props, 'BFormText')\ndefineSlots<BFormTextSlots>()\n\nconst colorClasses = useColorVariantClasses(props)\nconst computedClasses = computed(() => [\n colorClasses.value,\n {\n 'form-text': !props.inline,\n },\n])\n</script>\n","<template>\n <component :is=\"props.tag\" :id=\"props.id\" :class=\"computedClasses\">\n <slot>\n {{ props.text }}\n </slot>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useColorVariantClasses} from '../../composables/useColorVariantClasses'\nimport type {BFormTextProps, BFormTextSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<BFormTextProps>(), {\n id: undefined,\n inline: false,\n tag: 'small',\n text: undefined,\n textVariant: 'body-secondary',\n})\nconst props = useDefaults(_props, 'BFormText')\ndefineSlots<BFormTextSlots>()\n\nconst colorClasses = useColorVariantClasses(props)\nconst computedClasses = computed(() => [\n colorClasses.value,\n {\n 'form-text': !props.inline,\n },\n])\n</script>\n","<template>\n <component\n :is=\"props.tag\"\n :id=\"props.id\"\n :role=\"props.role\"\n :aria-live=\"props.ariaLive\"\n :aria-atomic=\"props.ariaLive ? true : undefined\"\n :class=\"computedClasses\"\n >\n <slot>\n {{ props.text }}\n </slot>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {BFormValidFeedbackProps, BFormValidFeedbackSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<BFormValidFeedbackProps>(), {\n ariaLive: undefined,\n forceShow: false,\n id: undefined,\n role: undefined,\n state: null,\n tag: 'div',\n text: undefined,\n tooltip: false,\n})\nconst props = useDefaults(_props, 'BFormInvalidFeedback')\ndefineSlots<BFormValidFeedbackSlots>()\n\nconst computedShow = computed(() => props.forceShow === true || props.state === true)\n\nconst computedClasses = computed(() => ({\n 'd-block': computedShow.value,\n 'valid-feedback': !props.tooltip,\n 'valid-tooltip': props.tooltip,\n}))\n</script>\n","<template>\n <component\n :is=\"props.tag\"\n :id=\"props.id\"\n :role=\"props.role\"\n :aria-live=\"props.ariaLive\"\n :aria-atomic=\"props.ariaLive ? true : undefined\"\n :class=\"computedClasses\"\n >\n <slot>\n {{ props.text }}\n </slot>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {BFormValidFeedbackProps, BFormValidFeedbackSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<BFormValidFeedbackProps>(), {\n ariaLive: undefined,\n forceShow: false,\n id: undefined,\n role: undefined,\n state: null,\n tag: 'div',\n text: undefined,\n tooltip: false,\n})\nconst props = useDefaults(_props, 'BFormInvalidFeedback')\ndefineSlots<BFormValidFeedbackSlots>()\n\nconst computedShow = computed(() => props.forceShow === true || props.state === true)\n\nconst computedClasses = computed(() => ({\n 'd-block': computedShow.value,\n 'valid-feedback': !props.tooltip,\n 'valid-tooltip': props.tooltip,\n}))\n</script>\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  require("./chunk-CoQrYLCe.js");
2
2
  const require_dist = require("./dist-DiXKLh_W.js");
3
- const require_useDefaults = require("./useDefaults-DsLf4iRY.js");
3
+ const require_useDefaults = require("./useDefaults-C0CYry78.js");
4
4
  const require_object = require("./object-BN7QwMcz.js");
5
5
  const require_useRadiusElementClasses = require("./useRadiusElementClasses-DWiUVgex.js");
6
6
  let vue = require("vue");
@@ -165,4 +165,4 @@ Object.defineProperty(exports, "BImg_default", {
165
165
  }
166
166
  });
167
167
 
168
- //# sourceMappingURL=BImg-DFiJSy66.js.map
168
+ //# sourceMappingURL=BImg-JKJLgYYT.js.map