bootstrap-vue-next 0.24.12 → 0.24.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/BAccordionItem.vue_vue_type_script_setup_true_lang-CGL4HjQ5.mjs +157 -0
- package/dist/BAccordionItem.vue_vue_type_script_setup_true_lang-CGL4HjQ5.mjs.map +1 -0
- package/dist/BAccordionItem.vue_vue_type_script_setup_true_lang-CZPn4Bj0.js +2 -0
- package/dist/BAccordionItem.vue_vue_type_script_setup_true_lang-CZPn4Bj0.js.map +1 -0
- package/dist/BAlert-CL62oEyH.js +2 -0
- package/dist/BAlert-CL62oEyH.js.map +1 -0
- package/dist/BAlert-zaujoJkK.mjs +130 -0
- package/dist/BAlert-zaujoJkK.mjs.map +1 -0
- package/dist/BAvatarGroup.vue_vue_type_script_setup_true_lang-CJHztvxJ.mjs +265 -0
- package/dist/BAvatarGroup.vue_vue_type_script_setup_true_lang-CJHztvxJ.mjs.map +1 -0
- package/dist/BAvatarGroup.vue_vue_type_script_setup_true_lang-CyH7wDxA.js +2 -0
- package/dist/BAvatarGroup.vue_vue_type_script_setup_true_lang-CyH7wDxA.js.map +1 -0
- package/dist/BBadge.vue_vue_type_script_setup_true_lang-D0XJTOKS.js +2 -0
- package/dist/BBadge.vue_vue_type_script_setup_true_lang-D0XJTOKS.js.map +1 -0
- package/dist/BBadge.vue_vue_type_script_setup_true_lang-DvnR6bcm.mjs +114 -0
- package/dist/BBadge.vue_vue_type_script_setup_true_lang-DvnR6bcm.mjs.map +1 -0
- package/dist/BBreadcrumb.vue_vue_type_script_setup_true_lang-BaeAqIpb.mjs +144 -0
- package/dist/BBreadcrumb.vue_vue_type_script_setup_true_lang-BaeAqIpb.mjs.map +1 -0
- package/dist/BBreadcrumb.vue_vue_type_script_setup_true_lang-C_H8oVoT.js +2 -0
- package/dist/BBreadcrumb.vue_vue_type_script_setup_true_lang-C_H8oVoT.js.map +1 -0
- package/dist/BButton.vue_vue_type_script_setup_true_lang-Ce8NKGox.js +2 -0
- package/dist/BButton.vue_vue_type_script_setup_true_lang-Ce8NKGox.js.map +1 -0
- package/dist/BButton.vue_vue_type_script_setup_true_lang-VSdlVuWr.mjs +167 -0
- package/dist/BButton.vue_vue_type_script_setup_true_lang-VSdlVuWr.mjs.map +1 -0
- package/dist/BButtonToolbar.vue_vue_type_script_setup_true_lang-4_kitZe-.js +2 -0
- package/dist/BButtonToolbar.vue_vue_type_script_setup_true_lang-4_kitZe-.js.map +1 -0
- package/dist/BButtonToolbar.vue_vue_type_script_setup_true_lang-d2xC76Uj.mjs +62 -0
- package/dist/BButtonToolbar.vue_vue_type_script_setup_true_lang-d2xC76Uj.mjs.map +1 -0
- package/dist/BCard.vue_vue_type_script_setup_true_lang-HE0K2EEE.mjs +400 -0
- package/dist/BCard.vue_vue_type_script_setup_true_lang-HE0K2EEE.mjs.map +1 -0
- package/dist/BCard.vue_vue_type_script_setup_true_lang-TLAEs-XJ.js +2 -0
- package/dist/BCard.vue_vue_type_script_setup_true_lang-TLAEs-XJ.js.map +1 -0
- package/dist/BCardText.vue_vue_type_script_setup_true_lang-BJXOgzA3.js +2 -0
- package/dist/BCardText.vue_vue_type_script_setup_true_lang-BJXOgzA3.js.map +1 -0
- package/dist/BCardText.vue_vue_type_script_setup_true_lang-DaNVKmqM.mjs +53 -0
- package/dist/BCardText.vue_vue_type_script_setup_true_lang-DaNVKmqM.mjs.map +1 -0
- package/dist/BCarouselSlide.vue_vue_type_script_setup_true_lang-B9cMwnBa.mjs +419 -0
- package/dist/BCarouselSlide.vue_vue_type_script_setup_true_lang-B9cMwnBa.mjs.map +1 -0
- package/dist/BCarouselSlide.vue_vue_type_script_setup_true_lang-D9pzRO8R.js +2 -0
- package/dist/BCarouselSlide.vue_vue_type_script_setup_true_lang-D9pzRO8R.js.map +1 -0
- package/dist/BCloseButton.vue_vue_type_script_setup_true_lang-B9g9XRA_.mjs +30 -0
- package/dist/BCloseButton.vue_vue_type_script_setup_true_lang-B9g9XRA_.mjs.map +1 -0
- package/dist/BCloseButton.vue_vue_type_script_setup_true_lang-CiJc3utn.js +2 -0
- package/dist/BCloseButton.vue_vue_type_script_setup_true_lang-CiJc3utn.js.map +1 -0
- package/dist/BCol.vue_vue_type_script_setup_true_lang-BWBBWz6b.js +2 -0
- package/dist/BCol.vue_vue_type_script_setup_true_lang-BWBBWz6b.js.map +1 -0
- package/dist/BCol.vue_vue_type_script_setup_true_lang-DlKSUEf4.mjs +94 -0
- package/dist/BCol.vue_vue_type_script_setup_true_lang-DlKSUEf4.mjs.map +1 -0
- package/dist/BCollapse.vue_vue_type_script_setup_true_lang-DPNRuAQK.js +2 -0
- package/dist/BCollapse.vue_vue_type_script_setup_true_lang-DPNRuAQK.js.map +1 -0
- package/dist/BCollapse.vue_vue_type_script_setup_true_lang-DQFE_wBf.mjs +211 -0
- package/dist/BCollapse.vue_vue_type_script_setup_true_lang-DQFE_wBf.mjs.map +1 -0
- package/dist/BContainer.vue_vue_type_script_setup_true_lang-CYHKrkpb.js +2 -0
- package/dist/BContainer.vue_vue_type_script_setup_true_lang-CYHKrkpb.js.map +1 -0
- package/dist/BContainer.vue_vue_type_script_setup_true_lang-CvOVtSLy.mjs +36 -0
- package/dist/BContainer.vue_vue_type_script_setup_true_lang-CvOVtSLy.mjs.map +1 -0
- package/dist/BDropdown.vue_vue_type_script_setup_true_lang-CyYPAMES.js +2 -0
- package/dist/BDropdown.vue_vue_type_script_setup_true_lang-CyYPAMES.js.map +1 -0
- package/dist/BDropdown.vue_vue_type_script_setup_true_lang-_LBPdVCX.mjs +335 -0
- package/dist/BDropdown.vue_vue_type_script_setup_true_lang-_LBPdVCX.mjs.map +1 -0
- package/dist/BDropdownText.vue_vue_type_script_setup_true_lang-BG9DP53V.mjs +264 -0
- package/dist/BDropdownText.vue_vue_type_script_setup_true_lang-BG9DP53V.mjs.map +1 -0
- package/dist/BDropdownText.vue_vue_type_script_setup_true_lang-Cp6f43AB.js +2 -0
- package/dist/BDropdownText.vue_vue_type_script_setup_true_lang-Cp6f43AB.js.map +1 -0
- package/dist/BForm.vue_vue_type_script_setup_true_lang-CX-6ApBl.mjs +39 -0
- package/dist/BForm.vue_vue_type_script_setup_true_lang-CX-6ApBl.mjs.map +1 -0
- package/dist/BForm.vue_vue_type_script_setup_true_lang-CzWjtjDl.js +2 -0
- package/dist/BForm.vue_vue_type_script_setup_true_lang-CzWjtjDl.js.map +1 -0
- package/dist/BFormCheckboxGroup.vue_vue_type_script_setup_true_lang-2Rj7LWFj.js +2 -0
- package/dist/BFormCheckboxGroup.vue_vue_type_script_setup_true_lang-2Rj7LWFj.js.map +1 -0
- package/dist/BFormCheckboxGroup.vue_vue_type_script_setup_true_lang-CuIvx67W.mjs +283 -0
- package/dist/BFormCheckboxGroup.vue_vue_type_script_setup_true_lang-CuIvx67W.mjs.map +1 -0
- package/dist/BFormFile.vue_vue_type_script_setup_true_lang-C-XNXzam.js +2 -0
- package/dist/BFormFile.vue_vue_type_script_setup_true_lang-C-XNXzam.js.map +1 -0
- package/dist/BFormFile.vue_vue_type_script_setup_true_lang-vYYrIhR7.mjs +129 -0
- package/dist/BFormFile.vue_vue_type_script_setup_true_lang-vYYrIhR7.mjs.map +1 -0
- package/dist/BFormFloatingLabel.vue_vue_type_script_setup_true_lang-2jJXsB8X.mjs +85 -0
- package/dist/BFormFloatingLabel.vue_vue_type_script_setup_true_lang-2jJXsB8X.mjs.map +1 -0
- package/dist/BFormFloatingLabel.vue_vue_type_script_setup_true_lang-CGq1Y8YR.js +2 -0
- package/dist/BFormFloatingLabel.vue_vue_type_script_setup_true_lang-CGq1Y8YR.js.map +1 -0
- package/dist/BFormGroup.vue_vue_type_script_lang-D1K-s0Ci.mjs +316 -0
- package/dist/BFormGroup.vue_vue_type_script_lang-D1K-s0Ci.mjs.map +1 -0
- package/dist/BFormGroup.vue_vue_type_script_lang-DM4WBgWE.js +2 -0
- package/dist/BFormGroup.vue_vue_type_script_lang-DM4WBgWE.js.map +1 -0
- package/dist/BFormInput.vue_vue_type_script_setup_true_lang-Cff0bCQa.mjs +98 -0
- package/dist/BFormInput.vue_vue_type_script_setup_true_lang-Cff0bCQa.mjs.map +1 -0
- package/dist/BFormInput.vue_vue_type_script_setup_true_lang-DktiAGOE.js +2 -0
- package/dist/BFormInput.vue_vue_type_script_setup_true_lang-DktiAGOE.js.map +1 -0
- package/dist/BFormRadioGroup.vue_vue_type_script_setup_true_lang-CQjKHPQM.js +2 -0
- package/dist/BFormRadioGroup.vue_vue_type_script_setup_true_lang-CQjKHPQM.js.map +1 -0
- package/dist/BFormRadioGroup.vue_vue_type_script_setup_true_lang-QoekdehU.mjs +260 -0
- package/dist/BFormRadioGroup.vue_vue_type_script_setup_true_lang-QoekdehU.mjs.map +1 -0
- package/dist/BFormSelect.vue_vue_type_script_setup_true_lang-Bi-9IRmx.js +2 -0
- package/dist/BFormSelect.vue_vue_type_script_setup_true_lang-Bi-9IRmx.js.map +1 -0
- package/dist/BFormSelect.vue_vue_type_script_setup_true_lang-DomR7pgn.mjs +187 -0
- package/dist/BFormSelect.vue_vue_type_script_setup_true_lang-DomR7pgn.mjs.map +1 -0
- package/dist/BFormSpinbutton.vue_vue_type_script_setup_true_lang-Cpthe9q6.js +2 -0
- package/dist/BFormSpinbutton.vue_vue_type_script_setup_true_lang-Cpthe9q6.js.map +1 -0
- package/dist/BFormSpinbutton.vue_vue_type_script_setup_true_lang-DWoLLnh4.mjs +466 -0
- package/dist/BFormSpinbutton.vue_vue_type_script_setup_true_lang-DWoLLnh4.mjs.map +1 -0
- package/dist/BFormTags.vue_vue_type_script_setup_true_lang-Bb7L5aOK.js +2 -0
- package/dist/BFormTags.vue_vue_type_script_setup_true_lang-Bb7L5aOK.js.map +1 -0
- package/dist/BFormTags.vue_vue_type_script_setup_true_lang-QreNAuNh.mjs +451 -0
- package/dist/BFormTags.vue_vue_type_script_setup_true_lang-QreNAuNh.mjs.map +1 -0
- package/dist/BFormTextarea.vue_vue_type_script_setup_true_lang-C7qeE8yw.js +2 -0
- package/dist/BFormTextarea.vue_vue_type_script_setup_true_lang-C7qeE8yw.js.map +1 -0
- package/dist/BFormTextarea.vue_vue_type_script_setup_true_lang-w4QvtSCI.mjs +89 -0
- package/dist/BFormTextarea.vue_vue_type_script_setup_true_lang-w4QvtSCI.mjs.map +1 -0
- package/dist/BFormValidFeedback.vue_vue_type_script_setup_true_lang-BNtodjFB.js +2 -0
- package/dist/BFormValidFeedback.vue_vue_type_script_setup_true_lang-BNtodjFB.js.map +1 -0
- package/dist/BFormValidFeedback.vue_vue_type_script_setup_true_lang-DSA6Ix_l.mjs +136 -0
- package/dist/BFormValidFeedback.vue_vue_type_script_setup_true_lang-DSA6Ix_l.mjs.map +1 -0
- package/dist/BImg.vue_vue_type_script_setup_true_lang-Bg2OW6gi.js +2 -0
- package/dist/BImg.vue_vue_type_script_setup_true_lang-Bg2OW6gi.js.map +1 -0
- package/dist/BImg.vue_vue_type_script_setup_true_lang-CZ0wmkG3.mjs +96 -0
- package/dist/BImg.vue_vue_type_script_setup_true_lang-CZ0wmkG3.mjs.map +1 -0
- package/dist/BInputGroupText.vue_vue_type_script_setup_true_lang-CQmMi4BC.mjs +91 -0
- package/dist/BInputGroupText.vue_vue_type_script_setup_true_lang-CQmMi4BC.mjs.map +1 -0
- package/dist/BInputGroupText.vue_vue_type_script_setup_true_lang-D0vTU1Tg.js +2 -0
- package/dist/BInputGroupText.vue_vue_type_script_setup_true_lang-D0vTU1Tg.js.map +1 -0
- package/dist/BLink.vue_vue_type_script_setup_true_lang-C39-ereM.mjs +151 -0
- package/dist/BLink.vue_vue_type_script_setup_true_lang-C39-ereM.mjs.map +1 -0
- package/dist/BLink.vue_vue_type_script_setup_true_lang-CGvuLpmP.js +2 -0
- package/dist/BLink.vue_vue_type_script_setup_true_lang-CGvuLpmP.js.map +1 -0
- package/dist/BListGroupItem.vue_vue_type_script_setup_true_lang-BgPZPopv.mjs +122 -0
- package/dist/BListGroupItem.vue_vue_type_script_setup_true_lang-BgPZPopv.mjs.map +1 -0
- package/dist/BListGroupItem.vue_vue_type_script_setup_true_lang-bbCvQBVT.js +2 -0
- package/dist/BListGroupItem.vue_vue_type_script_setup_true_lang-bbCvQBVT.js.map +1 -0
- package/dist/BModalOrchestrator.vue_vue_type_script_setup_true_lang-DTkIYT9T.js +2 -0
- package/dist/BModalOrchestrator.vue_vue_type_script_setup_true_lang-DTkIYT9T.js.map +1 -0
- package/dist/BModalOrchestrator.vue_vue_type_script_setup_true_lang-uilLonY3.mjs +528 -0
- package/dist/BModalOrchestrator.vue_vue_type_script_setup_true_lang-uilLonY3.mjs.map +1 -0
- package/dist/BNavText.vue_vue_type_script_setup_true_lang-DsRBDoqA.js +2 -0
- package/dist/BNavText.vue_vue_type_script_setup_true_lang-DsRBDoqA.js.map +1 -0
- package/dist/BNavText.vue_vue_type_script_setup_true_lang-Nz10c9se.mjs +297 -0
- package/dist/BNavText.vue_vue_type_script_setup_true_lang-Nz10c9se.mjs.map +1 -0
- package/dist/BNavbarToggle.vue_vue_type_script_setup_true_lang-CR21XBTk.mjs +195 -0
- package/dist/BNavbarToggle.vue_vue_type_script_setup_true_lang-CR21XBTk.mjs.map +1 -0
- package/dist/BNavbarToggle.vue_vue_type_script_setup_true_lang-yRlMSYbT.js +2 -0
- package/dist/BNavbarToggle.vue_vue_type_script_setup_true_lang-yRlMSYbT.js.map +1 -0
- package/dist/BOffcanvas.vue_vue_type_script_setup_true_lang-BS8m5QFs.js +2 -0
- package/dist/BOffcanvas.vue_vue_type_script_setup_true_lang-BS8m5QFs.js.map +1 -0
- package/dist/BOffcanvas.vue_vue_type_script_setup_true_lang-DFX-GAqB.mjs +296 -0
- package/dist/BOffcanvas.vue_vue_type_script_setup_true_lang-DFX-GAqB.mjs.map +1 -0
- package/dist/BOverlay.vue_vue_type_script_setup_true_lang-B-DddNvF.js +2 -0
- package/dist/BOverlay.vue_vue_type_script_setup_true_lang-B-DddNvF.js.map +1 -0
- package/dist/BOverlay.vue_vue_type_script_setup_true_lang-DlIZeFjt.mjs +127 -0
- package/dist/BOverlay.vue_vue_type_script_setup_true_lang-DlIZeFjt.mjs.map +1 -0
- package/dist/BPagination.vue_vue_type_script_setup_true_lang-Bb3jz8ne.js +2 -0
- package/dist/BPagination.vue_vue_type_script_setup_true_lang-Bb3jz8ne.js.map +1 -0
- package/dist/BPagination.vue_vue_type_script_setup_true_lang-DlaLHOK3.mjs +377 -0
- package/dist/BPagination.vue_vue_type_script_setup_true_lang-DlaLHOK3.mjs.map +1 -0
- package/dist/BPlaceholderWrapper.vue_vue_type_script_setup_true_lang-CNFPE1rr.js +2 -0
- package/dist/BPlaceholderWrapper.vue_vue_type_script_setup_true_lang-CNFPE1rr.js.map +1 -0
- package/dist/BPlaceholderWrapper.vue_vue_type_script_setup_true_lang-D-r_Gw_F.mjs +295 -0
- package/dist/BPlaceholderWrapper.vue_vue_type_script_setup_true_lang-D-r_Gw_F.mjs.map +1 -0
- package/dist/BPopoverOrchestrator.vue_vue_type_script_setup_true_lang-DAAu6XVH.js +2 -0
- package/dist/BPopoverOrchestrator.vue_vue_type_script_setup_true_lang-DAAu6XVH.js.map +1 -0
- package/dist/BPopoverOrchestrator.vue_vue_type_script_setup_true_lang-WoLkyjrr.mjs +32 -0
- package/dist/BPopoverOrchestrator.vue_vue_type_script_setup_true_lang-WoLkyjrr.mjs.map +1 -0
- package/dist/BProgress.vue_vue_type_script_setup_true_lang-D1V8J3od.mjs +113 -0
- package/dist/BProgress.vue_vue_type_script_setup_true_lang-D1V8J3od.mjs.map +1 -0
- package/dist/BProgress.vue_vue_type_script_setup_true_lang-dljjV5EO.js +2 -0
- package/dist/BProgress.vue_vue_type_script_setup_true_lang-dljjV5EO.js.map +1 -0
- package/dist/BRow.vue_vue_type_script_setup_true_lang-DsUdrNeu.mjs +67 -0
- package/dist/BRow.vue_vue_type_script_setup_true_lang-DsUdrNeu.mjs.map +1 -0
- package/dist/BRow.vue_vue_type_script_setup_true_lang-VBYu2LvD.js +2 -0
- package/dist/BRow.vue_vue_type_script_setup_true_lang-VBYu2LvD.js.map +1 -0
- package/dist/BSpinner.vue_vue_type_script_setup_true_lang-Bi3Ic2-3.mjs +51 -0
- package/dist/BSpinner.vue_vue_type_script_setup_true_lang-Bi3Ic2-3.mjs.map +1 -0
- package/dist/BSpinner.vue_vue_type_script_setup_true_lang-DybaAUVS.js +2 -0
- package/dist/BSpinner.vue_vue_type_script_setup_true_lang-DybaAUVS.js.map +1 -0
- package/dist/BTable.vue_vue_type_script_setup_true_lang-CqJmavaJ.mjs +1292 -0
- package/dist/BTable.vue_vue_type_script_setup_true_lang-CqJmavaJ.mjs.map +1 -0
- package/dist/BTable.vue_vue_type_script_setup_true_lang-XAhOu66i.js +2 -0
- package/dist/BTable.vue_vue_type_script_setup_true_lang-XAhOu66i.js.map +1 -0
- package/dist/BTableSimple.vue_vue_type_script_setup_true_lang-B4mLJ-Gd.mjs +88 -0
- package/dist/BTableSimple.vue_vue_type_script_setup_true_lang-B4mLJ-Gd.mjs.map +1 -0
- package/dist/BTableSimple.vue_vue_type_script_setup_true_lang-iOO_ebGw.js +2 -0
- package/dist/BTableSimple.vue_vue_type_script_setup_true_lang-iOO_ebGw.js.map +1 -0
- package/dist/BTabs.vue_vue_type_script_setup_true_lang-BhWxG2yI.mjs +410 -0
- package/dist/BTabs.vue_vue_type_script_setup_true_lang-BhWxG2yI.mjs.map +1 -0
- package/dist/BTabs.vue_vue_type_script_setup_true_lang-CaQt9YE0.js +2 -0
- package/dist/BTabs.vue_vue_type_script_setup_true_lang-CaQt9YE0.js.map +1 -0
- package/dist/BToastOrchestrator.vue_vue_type_style_index_0_lang-K7lsVEs_.js +2 -0
- package/dist/BToastOrchestrator.vue_vue_type_style_index_0_lang-K7lsVEs_.js.map +1 -0
- package/dist/BToastOrchestrator.vue_vue_type_style_index_0_lang-Odi16od5.mjs +313 -0
- package/dist/BToastOrchestrator.vue_vue_type_style_index_0_lang-Odi16od5.mjs.map +1 -0
- package/dist/BTooltipOrchestrator.vue_vue_type_script_setup_true_lang-DWilDKU8.js +2 -0
- package/dist/BTooltipOrchestrator.vue_vue_type_script_setup_true_lang-DWilDKU8.js.map +1 -0
- package/dist/BTooltipOrchestrator.vue_vue_type_script_setup_true_lang-Dcoy_YtZ.mjs +109 -0
- package/dist/BTooltipOrchestrator.vue_vue_type_script_setup_true_lang-Dcoy_YtZ.mjs.map +1 -0
- package/dist/BTransition.vue_vue_type_style_index_0_lang-X5a8jq3A.mjs +59 -0
- package/dist/BTransition.vue_vue_type_style_index_0_lang-X5a8jq3A.mjs.map +1 -0
- package/dist/BTransition.vue_vue_type_style_index_0_lang-dOw0_NRO.js +2 -0
- package/dist/BTransition.vue_vue_type_style_index_0_lang-dOw0_NRO.js.map +1 -0
- package/dist/RenderComponentOrSkip.vue_vue_type_script_lang-Ceo_5VTw.js +2 -0
- package/dist/RenderComponentOrSkip.vue_vue_type_script_lang-Ceo_5VTw.js.map +1 -0
- package/dist/RenderComponentOrSkip.vue_vue_type_script_lang-CvaXFCLB.mjs +30 -0
- package/dist/RenderComponentOrSkip.vue_vue_type_script_lang-CvaXFCLB.mjs.map +1 -0
- package/dist/_plugin-vue_export-helper-1tPrXgE0.mjs +11 -0
- package/dist/_plugin-vue_export-helper-1tPrXgE0.mjs.map +1 -0
- package/dist/_plugin-vue_export-helper-CC_fc8JW.js +2 -0
- package/dist/_plugin-vue_export-helper-CC_fc8JW.js.map +1 -0
- package/dist/bootstrap-vue-next.css +1 -1
- package/dist/bootstrap-vue-next.mjs +230 -12475
- package/dist/bootstrap-vue-next.mjs.map +1 -1
- package/dist/bootstrap-vue-next.umd.js +1 -9
- package/dist/bootstrap-vue-next.umd.js.map +1 -1
- package/dist/classes-CXBJXuVd.js +2 -0
- package/dist/classes-CXBJXuVd.js.map +1 -0
- package/dist/classes-IC0yVJlq.mjs +92 -0
- package/dist/classes-IC0yVJlq.mjs.map +1 -0
- package/dist/constants-BdrZaBP8.mjs +35 -0
- package/dist/constants-BdrZaBP8.mjs.map +1 -0
- package/dist/constants-Caz6vMlV.js +2 -0
- package/dist/constants-Caz6vMlV.js.map +1 -0
- package/dist/dom-B-SQyhbA.mjs +36 -0
- package/dist/dom-B-SQyhbA.mjs.map +1 -0
- package/dist/dom-C-F8jHop.js +2 -0
- package/dist/dom-C-F8jHop.js.map +1 -0
- package/dist/event-DqyBZX_g.js +2 -0
- package/dist/event-DqyBZX_g.js.map +1 -0
- package/dist/event-aFP-C_yt.mjs +46 -0
- package/dist/event-aFP-C_yt.mjs.map +1 -0
- package/dist/floatingUi-CKw_RAAk.mjs +1959 -0
- package/dist/floatingUi-CKw_RAAk.mjs.map +1 -0
- package/dist/floatingUi-DuqFUobT.js +2 -0
- package/dist/floatingUi-DuqFUobT.js.map +1 -0
- package/dist/getClasses-BgAeHHtu.js +2 -0
- package/dist/getClasses-BgAeHHtu.js.map +1 -0
- package/dist/getClasses-CsgNQabU.mjs +11 -0
- package/dist/getClasses-CsgNQabU.mjs.map +1 -0
- package/dist/getElement-Ca6iEV7Z.js +2 -0
- package/dist/getElement-Ca6iEV7Z.js.map +1 -0
- package/dist/getElement-D_JPfLJS.mjs +13 -0
- package/dist/getElement-D_JPfLJS.mjs.map +1 -0
- package/dist/index-BInTFWT4.js +2 -0
- package/dist/index-BInTFWT4.js.map +1 -0
- package/dist/index-BZ1nPmSl.js +2 -0
- package/dist/index-BZ1nPmSl.js.map +1 -0
- package/dist/index-C-KndhwG.js +2 -0
- package/dist/index-C-KndhwG.js.map +1 -0
- package/dist/index-C2e5Y13S.js +2 -0
- package/dist/index-C2e5Y13S.js.map +1 -0
- package/dist/index-CIB4mF_S.js +2 -0
- package/dist/index-CIB4mF_S.js.map +1 -0
- package/dist/index-CITBZK_Y.mjs +159 -0
- package/dist/index-CITBZK_Y.mjs.map +1 -0
- package/dist/index-CXpBEYSc.mjs +18 -0
- package/dist/index-CXpBEYSc.mjs.map +1 -0
- package/dist/index-CZM7tYbG.js +2 -0
- package/dist/index-CZM7tYbG.js.map +1 -0
- package/dist/index-CjQikjpZ.mjs +210 -0
- package/dist/index-CjQikjpZ.mjs.map +1 -0
- package/dist/index-CnY1um_J.js +2 -0
- package/dist/index-CnY1um_J.js.map +1 -0
- package/dist/index-CsWSMa0s.js +2 -0
- package/dist/index-CsWSMa0s.js.map +1 -0
- package/dist/index-DlGgXMQF.mjs +303 -0
- package/dist/index-DlGgXMQF.mjs.map +1 -0
- package/dist/index-DngH9Pjm.mjs +1144 -0
- package/dist/index-DngH9Pjm.mjs.map +1 -0
- package/dist/index-Dt02d7RV.mjs +25 -0
- package/dist/index-Dt02d7RV.mjs.map +1 -0
- package/dist/index-i-UFv70c.mjs +11 -0
- package/dist/index-i-UFv70c.mjs.map +1 -0
- package/dist/index-sKc4HTpY.mjs +23 -0
- package/dist/index-sKc4HTpY.mjs.map +1 -0
- package/dist/keys-BgAe7wbu.js +2 -0
- package/dist/keys-BgAe7wbu.js.map +1 -0
- package/dist/keys-CLEaYsGj.mjs +43 -0
- package/dist/keys-CLEaYsGj.mjs.map +1 -0
- package/dist/object-B-6ddRYH.js +2 -0
- package/dist/object-B-6ddRYH.js.map +1 -0
- package/dist/object-DIbMZaP9.mjs +67 -0
- package/dist/object-DIbMZaP9.mjs.map +1 -0
- package/dist/src/App.vue.d.mts +2 -0
- package/dist/src/App.vue.d.ts +2 -0
- package/dist/src/components/BAccordion/BAccordion.vue.d.mts +31 -0
- package/dist/src/components/BAccordion/BAccordion.vue.d.ts +21 -33
- package/dist/src/components/BAccordion/BAccordionItem.vue.d.mts +59 -0
- package/dist/src/components/BAccordion/BAccordionItem.vue.d.ts +43 -162
- package/dist/src/components/BAccordion/index.d.mts +2 -0
- package/dist/src/components/BAccordion/index.d.ts +2 -0
- package/dist/src/components/BAccordion/index.mjs +6 -0
- package/dist/src/components/BAccordion/index.mjs.map +1 -0
- package/dist/src/components/BAccordion/index.umd.js +2 -0
- package/dist/src/components/BAccordion/index.umd.js.map +1 -0
- package/dist/src/components/BAlert/BAlert.vue.d.mts +55 -0
- package/dist/src/components/BAlert/BAlert.vue.d.ts +39 -114
- package/dist/src/components/BAlert/index.d.mts +1 -0
- package/dist/src/components/BAlert/index.d.ts +1 -0
- package/dist/src/components/BAlert/index.mjs +5 -0
- package/dist/src/components/BAlert/index.mjs.map +1 -0
- package/dist/src/components/BAlert/index.umd.js +2 -0
- package/dist/src/components/BAlert/index.umd.js.map +1 -0
- package/dist/src/components/BAvatar/BAvatar.vue.d.mts +67 -0
- package/dist/src/components/BAvatar/BAvatar.vue.d.ts +51 -142
- package/dist/src/components/BAvatar/BAvatarGroup.vue.d.mts +32 -0
- package/dist/src/components/BAvatar/BAvatarGroup.vue.d.ts +24 -61
- package/dist/src/components/BAvatar/index.d.mts +2 -0
- package/dist/src/components/BAvatar/index.d.ts +2 -0
- package/dist/src/components/BAvatar/index.mjs +6 -0
- package/dist/src/components/BAvatar/index.mjs.map +1 -0
- package/dist/src/components/BAvatar/index.umd.js +2 -0
- package/dist/src/components/BAvatar/index.umd.js.map +1 -0
- package/dist/src/components/BBadge/BBadge.vue.d.mts +46 -0
- package/dist/src/components/BBadge/BBadge.vue.d.ts +34 -99
- package/dist/src/components/BBadge/index.d.mts +1 -0
- package/dist/src/components/BBadge/index.d.ts +1 -0
- package/dist/src/components/BBadge/index.mjs +5 -0
- package/dist/src/components/BBadge/index.mjs.map +1 -0
- package/dist/src/components/BBadge/index.umd.js +2 -0
- package/dist/src/components/BBadge/index.umd.js.map +1 -0
- package/dist/src/components/BBreadcrumb/BBreadcrumb.vue.d.mts +25 -0
- package/dist/src/components/BBreadcrumb/BBreadcrumb.vue.d.ts +18 -33
- package/dist/src/components/BBreadcrumb/BBreadcrumbItem.vue.d.mts +46 -0
- package/dist/src/components/BBreadcrumb/BBreadcrumbItem.vue.d.ts +33 -92
- package/dist/src/components/BBreadcrumb/index.d.mts +2 -0
- package/dist/src/components/BBreadcrumb/index.d.ts +2 -0
- package/dist/src/components/BBreadcrumb/index.mjs +6 -0
- package/dist/src/components/BBreadcrumb/index.mjs.map +1 -0
- package/dist/src/components/BBreadcrumb/index.umd.js +2 -0
- package/dist/src/components/BBreadcrumb/index.umd.js.map +1 -0
- package/dist/src/components/BButton/BButton.vue.d.mts +66 -0
- package/dist/src/components/BButton/BButton.vue.d.ts +49 -274
- package/dist/src/components/BButton/BButtonGroup.vue.d.mts +24 -0
- package/dist/src/components/BButton/BButtonGroup.vue.d.ts +15 -36
- package/dist/src/components/BButton/BButtonToolbar.vue.d.mts +23 -0
- package/dist/src/components/BButton/BButtonToolbar.vue.d.ts +14 -33
- package/dist/src/components/BButton/BCloseButton.vue.d.mts +11 -0
- package/dist/src/components/BButton/BCloseButton.vue.d.ts +8 -34
- package/dist/src/components/BButton/index.d.mts +4 -0
- package/dist/src/components/BButton/index.d.ts +4 -0
- package/dist/src/components/BButton/index.mjs +10 -0
- package/dist/src/components/BButton/index.mjs.map +1 -0
- package/dist/src/components/BButton/index.umd.js +2 -0
- package/dist/src/components/BButton/index.umd.js.map +1 -0
- package/dist/src/components/BCard/BCard.vue.d.mts +64 -0
- package/dist/src/components/BCard/BCard.vue.d.ts +48 -137
- package/dist/src/components/BCard/BCardBody.vue.d.mts +35 -0
- package/dist/src/components/BCard/BCardBody.vue.d.ts +25 -60
- package/dist/src/components/BCard/BCardFooter.vue.d.mts +27 -0
- package/dist/src/components/BCard/BCardFooter.vue.d.ts +19 -46
- package/dist/src/components/BCard/BCardGroup.vue.d.mts +23 -0
- package/dist/src/components/BCard/BCardGroup.vue.d.ts +14 -33
- package/dist/src/components/BCard/BCardHeadFoot.vue.d.mts +27 -0
- package/dist/src/components/BCard/BCardHeadFoot.vue.d.ts +19 -46
- package/dist/src/components/BCard/BCardHeader.vue.d.mts +27 -0
- package/dist/src/components/BCard/BCardHeader.vue.d.ts +19 -46
- package/dist/src/components/BCard/BCardImg.vue.d.mts +22 -0
- package/dist/src/components/BCard/BCardImg.vue.d.ts +14 -70
- package/dist/src/components/BCard/BCardSubtitle.vue.d.mts +23 -0
- package/dist/src/components/BCard/BCardSubtitle.vue.d.ts +16 -35
- package/dist/src/components/BCard/BCardText.vue.d.mts +22 -0
- package/dist/src/components/BCard/BCardText.vue.d.ts +15 -32
- package/dist/src/components/BCard/BCardTitle.vue.d.mts +22 -0
- package/dist/src/components/BCard/BCardTitle.vue.d.ts +15 -32
- package/dist/src/components/BCard/index.d.mts +9 -0
- package/dist/src/components/BCard/index.d.ts +9 -0
- package/dist/src/components/BCard/index.mjs +14 -0
- package/dist/src/components/BCard/index.mjs.map +1 -0
- package/dist/src/components/BCard/index.umd.js +2 -0
- package/dist/src/components/BCard/index.umd.js.map +1 -0
- package/dist/src/components/BCarousel/BCarousel.vue.d.mts +65 -0
- package/dist/src/components/BCarousel/BCarousel.vue.d.ts +39 -166
- package/dist/src/components/BCarousel/BCarouselSlide.vue.d.mts +46 -0
- package/dist/src/components/BCarousel/BCarouselSlide.vue.d.ts +27 -76
- package/dist/src/components/BCarousel/index.d.mts +2 -0
- package/dist/src/components/BCarousel/index.d.ts +2 -0
- package/dist/src/components/BCarousel/index.mjs +6 -0
- package/dist/src/components/BCarousel/index.mjs.map +1 -0
- package/dist/src/components/BCarousel/index.umd.js +2 -0
- package/dist/src/components/BCarousel/index.umd.js.map +1 -0
- package/dist/src/components/BCol/index.d.mts +1 -0
- package/dist/src/components/BCol/index.d.ts +1 -0
- package/dist/src/components/BCol/index.mjs +5 -0
- package/dist/src/components/BCol/index.mjs.map +1 -0
- package/dist/src/components/BCol/index.umd.js +2 -0
- package/dist/src/components/BCol/index.umd.js.map +1 -0
- package/dist/src/components/BCollapse/BCollapse.vue.d.mts +67 -0
- package/dist/src/components/BCollapse/BCollapse.vue.d.ts +67 -0
- package/dist/src/components/BCollapse/index.d.mts +1 -0
- package/dist/src/components/BCollapse/index.d.ts +1 -0
- package/dist/src/components/BCollapse/index.mjs +5 -0
- package/dist/src/components/BCollapse/index.mjs.map +1 -0
- package/dist/src/components/BCollapse/index.umd.js +2 -0
- package/dist/src/components/BCollapse/index.umd.js.map +1 -0
- package/dist/src/components/BContainer/BCol.vue.d.mts +41 -0
- package/dist/src/components/BContainer/BCol.vue.d.ts +41 -0
- package/dist/src/components/BContainer/BContainer.vue.d.mts +22 -0
- package/dist/src/components/BContainer/BContainer.vue.d.ts +22 -0
- package/dist/src/components/BContainer/BRow.vue.d.mts +33 -0
- package/dist/src/components/BContainer/BRow.vue.d.ts +33 -0
- package/dist/src/components/BContainer/index.d.mts +3 -0
- package/dist/src/components/BContainer/index.d.ts +3 -0
- package/dist/src/components/BContainer/index.mjs +9 -0
- package/dist/src/components/BContainer/index.mjs.map +1 -0
- package/dist/src/components/BContainer/index.umd.js +2 -0
- package/dist/src/components/BContainer/index.umd.js.map +1 -0
- package/dist/src/components/BDropdown/BDropdown.vue.d.mts +492 -0
- package/dist/src/components/BDropdown/BDropdown.vue.d.ts +462 -375
- package/dist/src/components/BDropdown/BDropdownDivider.vue.d.mts +5 -0
- package/dist/src/components/BDropdown/BDropdownDivider.vue.d.ts +3 -25
- package/dist/src/components/BDropdown/BDropdownForm.vue.d.mts +18 -0
- package/dist/src/components/BDropdown/BDropdownForm.vue.d.ts +12 -5
- package/dist/src/components/BDropdown/BDropdownGroup.vue.d.mts +28 -0
- package/dist/src/components/BDropdown/BDropdownGroup.vue.d.ts +18 -43
- package/dist/src/components/BDropdown/BDropdownHeader.vue.d.mts +18 -0
- package/dist/src/components/BDropdown/BDropdownHeader.vue.d.ts +12 -5
- package/dist/src/components/BDropdown/BDropdownItem.vue.d.mts +46 -0
- package/dist/src/components/BDropdown/BDropdownItem.vue.d.ts +34 -91
- package/dist/src/components/BDropdown/BDropdownItemButton.vue.d.mts +30 -0
- package/dist/src/components/BDropdown/BDropdownItemButton.vue.d.ts +21 -46
- package/dist/src/components/BDropdown/BDropdownText.vue.d.mts +21 -0
- package/dist/src/components/BDropdown/BDropdownText.vue.d.ts +14 -29
- package/dist/src/components/BDropdown/index.d.mts +8 -0
- package/dist/src/components/BDropdown/index.d.ts +8 -0
- package/dist/src/components/BDropdown/index.mjs +13 -0
- package/dist/src/components/BDropdown/index.mjs.map +1 -0
- package/dist/src/components/BDropdown/index.umd.js +2 -0
- package/dist/src/components/BDropdown/index.umd.js.map +1 -0
- package/dist/src/components/BForm/BForm.vue.d.mts +28 -0
- package/dist/src/components/BForm/BForm.vue.d.ts +18 -37
- package/dist/src/components/BForm/BFormDatalist.vue.d.mts +22 -0
- package/dist/src/components/BForm/BFormDatalist.vue.d.ts +10 -52
- package/dist/src/components/BForm/BFormFloatingLabel.vue.d.mts +24 -0
- package/dist/src/components/BForm/BFormFloatingLabel.vue.d.ts +16 -35
- package/dist/src/components/BForm/BFormInvalidFeedback.vue.d.mts +28 -0
- package/dist/src/components/BForm/BFormInvalidFeedback.vue.d.ts +18 -47
- package/dist/src/components/BForm/BFormRow.vue.d.mts +21 -0
- package/dist/src/components/BForm/BFormRow.vue.d.ts +14 -29
- package/dist/src/components/BForm/BFormText.vue.d.mts +25 -0
- package/dist/src/components/BForm/BFormText.vue.d.ts +16 -39
- package/dist/src/components/BForm/BFormValidFeedback.vue.d.mts +28 -0
- package/dist/src/components/BForm/BFormValidFeedback.vue.d.ts +18 -47
- package/dist/src/components/BForm/index.d.mts +7 -0
- package/dist/src/components/BForm/index.d.ts +7 -0
- package/dist/src/components/BForm/index.mjs +13 -0
- package/dist/src/components/BForm/index.mjs.map +1 -0
- package/dist/src/components/BForm/index.umd.js +2 -0
- package/dist/src/components/BForm/index.umd.js.map +1 -0
- package/dist/src/components/BFormCheckbox/BFormCheckbox.vue.d.mts +59 -0
- package/dist/src/components/BFormCheckbox/BFormCheckbox.vue.d.ts +42 -196
- package/dist/src/components/BFormCheckbox/BFormCheckboxGroup.vue.d.mts +56 -0
- package/dist/src/components/BFormCheckbox/BFormCheckboxGroup.vue.d.ts +38 -194
- package/dist/src/components/BFormCheckbox/index.d.mts +2 -0
- package/dist/src/components/BFormCheckbox/index.d.ts +2 -0
- package/dist/src/components/BFormCheckbox/index.mjs +6 -0
- package/dist/src/components/BFormCheckbox/index.mjs.map +1 -0
- package/dist/src/components/BFormCheckbox/index.umd.js +2 -0
- package/dist/src/components/BFormCheckbox/index.umd.js.map +1 -0
- package/dist/src/components/BFormFile/BFormFile.vue.d.mts +55 -0
- package/dist/src/components/BFormFile/BFormFile.vue.d.ts +36 -182
- package/dist/src/components/BFormFile/index.d.mts +1 -0
- package/dist/src/components/BFormFile/index.d.ts +1 -0
- package/dist/src/components/BFormFile/index.mjs +5 -0
- package/dist/src/components/BFormFile/index.mjs.map +1 -0
- package/dist/src/components/BFormFile/index.umd.js +2 -0
- package/dist/src/components/BFormFile/index.umd.js.map +1 -0
- package/dist/src/components/BFormGroup/BFormGroup.vue.d.mts +540 -0
- package/dist/src/components/BFormGroup/BFormGroup.vue.d.ts +252 -13
- package/dist/src/components/BFormGroup/index.d.mts +1 -0
- package/dist/src/components/BFormGroup/index.d.ts +1 -0
- package/dist/src/components/BFormGroup/index.mjs +5 -0
- package/dist/src/components/BFormGroup/index.mjs.map +1 -0
- package/dist/src/components/BFormGroup/index.umd.js +2 -0
- package/dist/src/components/BFormGroup/index.umd.js.map +1 -0
- package/dist/src/components/BFormInput/BFormInput.vue.d.mts +40 -0
- package/dist/src/components/BFormInput/BFormInput.vue.d.ts +31 -202
- package/dist/src/components/BFormInput/index.d.mts +2 -0
- package/dist/src/components/BFormInput/index.d.ts +2 -0
- package/dist/src/components/BFormInput/index.mjs +6 -0
- package/dist/src/components/BFormInput/index.mjs.map +1 -0
- package/dist/src/components/BFormInput/index.umd.js +2 -0
- package/dist/src/components/BFormInput/index.umd.js.map +1 -0
- package/dist/src/components/BFormRadio/BFormRadio.vue.d.mts +52 -0
- package/dist/src/components/BFormRadio/BFormRadio.vue.d.ts +36 -159
- package/dist/src/components/BFormRadio/BFormRadioGroup.vue.d.mts +55 -0
- package/dist/src/components/BFormRadio/BFormRadioGroup.vue.d.ts +38 -186
- package/dist/src/components/BFormRadio/index.d.mts +2 -0
- package/dist/src/components/BFormRadio/index.d.ts +2 -0
- package/dist/src/components/BFormRadio/index.mjs +6 -0
- package/dist/src/components/BFormRadio/index.mjs.map +1 -0
- package/dist/src/components/BFormRadio/index.umd.js +2 -0
- package/dist/src/components/BFormRadio/index.umd.js.map +1 -0
- package/dist/src/components/BFormSelect/BFormSelect.vue.d.mts +34 -0
- package/dist/src/components/BFormSelect/BFormSelect.vue.d.ts +19 -103
- package/dist/src/components/BFormSelect/BFormSelectOption.vue.d.mts +20 -0
- package/dist/src/components/BFormSelect/BFormSelectOption.vue.d.ts +8 -34
- package/dist/src/components/BFormSelect/BFormSelectOptionGroup.vue.d.mts +22 -0
- package/dist/src/components/BFormSelect/BFormSelectOptionGroup.vue.d.ts +10 -52
- package/dist/src/components/BFormSelect/index.d.mts +3 -0
- package/dist/src/components/BFormSelect/index.d.ts +3 -0
- package/dist/src/components/BFormSelect/index.mjs +8 -0
- package/dist/src/components/BFormSelect/index.mjs.map +1 -0
- package/dist/src/components/BFormSelect/index.umd.js +2 -0
- package/dist/src/components/BFormSelect/index.umd.js.map +1 -0
- package/dist/src/components/BFormSpinbutton/BFormSpinbutton.vue.d.mts +58 -0
- package/dist/src/components/BFormSpinbutton/BFormSpinbutton.vue.d.ts +31 -228
- package/dist/src/components/BFormSpinbutton/index.d.mts +1 -0
- package/dist/src/components/BFormSpinbutton/index.d.ts +1 -0
- package/dist/src/components/BFormSpinbutton/index.mjs +5 -0
- package/dist/src/components/BFormSpinbutton/index.mjs.map +1 -0
- package/dist/src/components/BFormSpinbutton/index.umd.js +2 -0
- package/dist/src/components/BFormSpinbutton/index.umd.js.map +1 -0
- package/dist/src/components/BFormTags/BFormTag.vue.d.mts +32 -0
- package/dist/src/components/BFormTags/BFormTag.vue.d.ts +20 -49
- package/dist/src/components/BFormTags/BFormTags.vue.d.mts +135 -0
- package/dist/src/components/BFormTags/BFormTags.vue.d.ts +99 -366
- package/dist/src/components/BFormTags/index.d.mts +2 -0
- package/dist/src/components/BFormTags/index.d.ts +2 -0
- package/dist/src/components/BFormTags/index.mjs +6 -0
- package/dist/src/components/BFormTags/index.mjs.map +1 -0
- package/dist/src/components/BFormTags/index.umd.js +2 -0
- package/dist/src/components/BFormTags/index.umd.js.map +1 -0
- package/dist/src/components/BFormTextarea/BFormTextarea.vue.d.mts +39 -0
- package/dist/src/components/BFormTextarea/BFormTextarea.vue.d.ts +29 -192
- package/dist/src/components/BFormTextarea/index.d.mts +1 -0
- package/dist/src/components/BFormTextarea/index.d.ts +1 -0
- package/dist/src/components/BFormTextarea/index.mjs +5 -0
- package/dist/src/components/BFormTextarea/index.mjs.map +1 -0
- package/dist/src/components/BFormTextarea/index.umd.js +2 -0
- package/dist/src/components/BFormTextarea/index.umd.js.map +1 -0
- package/dist/src/components/BImg/BImg.vue.d.mts +23 -0
- package/dist/src/components/BImg/BImg.vue.d.ts +23 -0
- package/dist/src/components/BImg/index.d.mts +1 -0
- package/dist/src/components/BImg/index.d.ts +1 -0
- package/dist/src/components/BImg/index.mjs +5 -0
- package/dist/src/components/BImg/index.mjs.map +1 -0
- package/dist/src/components/BImg/index.umd.js +2 -0
- package/dist/src/components/BImg/index.umd.js.map +1 -0
- package/dist/src/components/BInputGroup/BInputGroup.vue.d.mts +31 -0
- package/dist/src/components/BInputGroup/BInputGroup.vue.d.ts +20 -47
- package/dist/src/components/BInputGroup/BInputGroupText.vue.d.mts +22 -0
- package/dist/src/components/BInputGroup/BInputGroupText.vue.d.ts +15 -32
- package/dist/src/components/BInputGroup/index.d.mts +2 -0
- package/dist/src/components/BInputGroup/index.d.ts +2 -0
- package/dist/src/components/BInputGroup/index.mjs +6 -0
- package/dist/src/components/BInputGroup/index.mjs.map +1 -0
- package/dist/src/components/BInputGroup/index.umd.js +2 -0
- package/dist/src/components/BInputGroup/index.umd.js.map +1 -0
- package/dist/src/components/BLink/BLink.vue.d.mts +45 -0
- package/dist/src/components/BLink/BLink.vue.d.ts +31 -86
- package/dist/src/components/BLink/index.d.mts +1 -0
- package/dist/src/components/BLink/index.d.ts +1 -0
- package/dist/src/components/BLink/index.mjs +5 -0
- package/dist/src/components/BLink/index.mjs.map +1 -0
- package/dist/src/components/BLink/index.umd.js +2 -0
- package/dist/src/components/BLink/index.umd.js.map +1 -0
- package/dist/src/components/BListGroup/BListGroup.vue.d.mts +24 -0
- package/dist/src/components/BListGroup/BListGroup.vue.d.ts +15 -36
- package/dist/src/components/BListGroup/BListGroupItem.vue.d.mts +43 -0
- package/dist/src/components/BListGroup/BListGroupItem.vue.d.ts +30 -89
- package/dist/src/components/BListGroup/index.d.mts +2 -0
- package/dist/src/components/BListGroup/index.d.ts +2 -0
- package/dist/src/components/BListGroup/index.mjs +6 -0
- package/dist/src/components/BListGroup/index.mjs.map +1 -0
- package/dist/src/components/BListGroup/index.umd.js +2 -0
- package/dist/src/components/BListGroup/index.umd.js.map +1 -0
- package/dist/src/components/BModal/BModal.vue.d.mts +456 -0
- package/dist/src/components/BModal/BModal.vue.d.ts +416 -528
- package/dist/src/components/BModal/BModalOrchestrator.vue.d.mts +14 -0
- package/dist/src/components/BModal/BModalOrchestrator.vue.d.ts +11 -48
- package/dist/src/components/BModal/index.d.mts +2 -0
- package/dist/src/components/BModal/index.d.ts +2 -0
- package/dist/src/components/BModal/index.mjs +6 -0
- package/dist/src/components/BModal/index.mjs.map +1 -0
- package/dist/src/components/BModal/index.umd.js +2 -0
- package/dist/src/components/BModal/index.umd.js.map +1 -0
- package/dist/src/components/BNav/BNav.vue.d.mts +30 -0
- package/dist/src/components/BNav/BNav.vue.d.ts +15 -48
- package/dist/src/components/BNav/BNavForm.vue.d.mts +29 -0
- package/dist/src/components/BNav/BNavForm.vue.d.ts +17 -40
- package/dist/src/components/BNav/BNavItem.vue.d.mts +46 -0
- package/dist/src/components/BNav/BNavItem.vue.d.ts +34 -91
- package/dist/src/components/BNav/BNavItemDropdown.vue.d.mts +348 -0
- package/dist/src/components/BNav/BNavItemDropdown.vue.d.ts +319 -369
- package/dist/src/components/BNav/BNavText.vue.d.mts +21 -0
- package/dist/src/components/BNav/BNavText.vue.d.ts +14 -29
- package/dist/src/components/BNav/index.d.mts +5 -0
- package/dist/src/components/BNav/index.d.ts +5 -0
- package/dist/src/components/BNav/index.mjs +9 -0
- package/dist/src/components/BNav/index.mjs.map +1 -0
- package/dist/src/components/BNav/index.umd.js +2 -0
- package/dist/src/components/BNav/index.umd.js.map +1 -0
- package/dist/src/components/BNavbar/BNavbar.vue.d.mts +28 -0
- package/dist/src/components/BNavbar/BNavbar.vue.d.ts +19 -48
- package/dist/src/components/BNavbar/BNavbarBrand.vue.d.mts +41 -0
- package/dist/src/components/BNavbar/BNavbarBrand.vue.d.ts +30 -85
- package/dist/src/components/BNavbar/BNavbarNav.vue.d.mts +25 -0
- package/dist/src/components/BNavbar/BNavbarNav.vue.d.ts +15 -38
- package/dist/src/components/BNavbar/BNavbarToggle.vue.d.mts +27 -0
- package/dist/src/components/BNavbar/BNavbarToggle.vue.d.ts +18 -37
- package/dist/src/components/BNavbar/index.d.mts +4 -0
- package/dist/src/components/BNavbar/index.d.ts +4 -0
- package/dist/src/components/BNavbar/index.mjs +8 -0
- package/dist/src/components/BNavbar/index.mjs.map +1 -0
- package/dist/src/components/BNavbar/index.umd.js +2 -0
- package/dist/src/components/BNavbar/index.umd.js.map +1 -0
- package/dist/src/components/BOffcanvas/BOffcanvas.vue.d.mts +90 -0
- package/dist/src/components/BOffcanvas/BOffcanvas.vue.d.ts +62 -239
- package/dist/src/components/BOffcanvas/index.d.mts +1 -0
- package/dist/src/components/BOffcanvas/index.d.ts +1 -0
- package/dist/src/components/BOffcanvas/index.mjs +5 -0
- package/dist/src/components/BOffcanvas/index.mjs.map +1 -0
- package/dist/src/components/BOffcanvas/index.umd.js +2 -0
- package/dist/src/components/BOffcanvas/index.umd.js.map +1 -0
- package/dist/src/components/BOverlay/BOverlay.vue.d.mts +56 -0
- package/dist/src/components/BOverlay/BOverlay.vue.d.ts +41 -99
- package/dist/src/components/BOverlay/index.d.mts +1 -0
- package/dist/src/components/BOverlay/index.d.ts +1 -0
- package/dist/src/components/BOverlay/index.mjs +5 -0
- package/dist/src/components/BOverlay/index.mjs.map +1 -0
- package/dist/src/components/BOverlay/index.umd.js +2 -0
- package/dist/src/components/BOverlay/index.umd.js.map +1 -0
- package/dist/src/components/BPagination/BPagination.vue.d.mts +58 -0
- package/dist/src/components/BPagination/BPagination.vue.d.ts +24 -253
- package/dist/src/components/BPagination/index.d.mts +1 -0
- package/dist/src/components/BPagination/index.d.ts +1 -0
- package/dist/src/components/BPagination/index.mjs +5 -0
- package/dist/src/components/BPagination/index.mjs.map +1 -0
- package/dist/src/components/BPagination/index.umd.js +2 -0
- package/dist/src/components/BPagination/index.umd.js.map +1 -0
- package/dist/src/components/BPlaceholder/BPlaceholder.vue.d.mts +11 -0
- package/dist/src/components/BPlaceholder/BPlaceholder.vue.d.ts +8 -42
- package/dist/src/components/BPlaceholder/BPlaceholderButton.vue.d.mts +9 -0
- package/dist/src/components/BPlaceholder/BPlaceholderButton.vue.d.ts +7 -37
- package/dist/src/components/BPlaceholder/BPlaceholderCard.vue.d.mts +45 -0
- package/dist/src/components/BPlaceholder/BPlaceholderCard.vue.d.ts +33 -84
- package/dist/src/components/BPlaceholder/BPlaceholderTable.vue.d.mts +42 -0
- package/dist/src/components/BPlaceholder/BPlaceholderTable.vue.d.ts +34 -83
- package/dist/src/components/BPlaceholder/BPlaceholderWrapper.vue.d.mts +23 -0
- package/dist/src/components/BPlaceholder/BPlaceholderWrapper.vue.d.ts +16 -31
- package/dist/src/components/BPlaceholder/index.d.mts +5 -0
- package/dist/src/components/BPlaceholder/index.d.ts +5 -0
- package/dist/src/components/BPlaceholder/index.mjs +9 -0
- package/dist/src/components/BPlaceholder/index.mjs.map +1 -0
- package/dist/src/components/BPlaceholder/index.umd.js +2 -0
- package/dist/src/components/BPlaceholder/index.umd.js.map +1 -0
- package/dist/src/components/BPopover/BPopover.vue.d.mts +98 -0
- package/dist/src/components/BPopover/BPopover.vue.d.ts +98 -0
- package/dist/src/components/BPopover/BPopoverOrchestrator.vue.d.mts +7 -0
- package/dist/src/components/BPopover/BPopoverOrchestrator.vue.d.ts +7 -0
- package/dist/src/components/BPopover/index.d.mts +2 -0
- package/dist/src/components/BPopover/index.d.ts +2 -0
- package/dist/src/components/BPopover/index.mjs +7 -0
- package/dist/src/components/BPopover/index.mjs.map +1 -0
- package/dist/src/components/BPopover/index.umd.js +2 -0
- package/dist/src/components/BPopover/index.umd.js.map +1 -0
- package/dist/src/components/BProgress/BProgress.vue.d.mts +31 -0
- package/dist/src/components/BProgress/BProgress.vue.d.ts +22 -57
- package/dist/src/components/BProgress/BProgressBar.vue.d.mts +32 -0
- package/dist/src/components/BProgress/BProgressBar.vue.d.ts +22 -59
- package/dist/src/components/BProgress/index.d.mts +2 -0
- package/dist/src/components/BProgress/index.d.ts +2 -0
- package/dist/src/components/BProgress/index.mjs +6 -0
- package/dist/src/components/BProgress/index.mjs.map +1 -0
- package/dist/src/components/BProgress/index.umd.js +2 -0
- package/dist/src/components/BProgress/index.umd.js.map +1 -0
- package/dist/src/components/BRow/index.d.mts +1 -0
- package/dist/src/components/BRow/index.d.ts +1 -0
- package/dist/src/components/BRow/index.mjs +5 -0
- package/dist/src/components/BRow/index.mjs.map +1 -0
- package/dist/src/components/BRow/index.umd.js +2 -0
- package/dist/src/components/BRow/index.umd.js.map +1 -0
- package/dist/src/components/BSpinner/BSpinner.vue.d.mts +26 -0
- package/dist/src/components/BSpinner/BSpinner.vue.d.ts +26 -0
- package/dist/src/components/BSpinner/index.d.mts +1 -0
- package/dist/src/components/BSpinner/index.d.ts +1 -0
- package/dist/src/components/BSpinner/index.mjs +5 -0
- package/dist/src/components/BSpinner/index.mjs.map +1 -0
- package/dist/src/components/BSpinner/index.umd.js +2 -0
- package/dist/src/components/BSpinner/index.umd.js.map +1 -0
- package/dist/src/components/BTable/BTable.vue.d.mts +117 -0
- package/dist/src/components/BTable/BTable.vue.d.ts +38 -371
- package/dist/src/components/BTable/BTableLite.vue.d.mts +111 -0
- package/dist/src/components/BTable/BTableLite.vue.d.ts +44 -356
- package/dist/src/components/BTable/BTableSimple.vue.d.mts +39 -0
- package/dist/src/components/BTable/BTableSimple.vue.d.ts +22 -73
- package/dist/src/components/BTable/BTbody.vue.d.mts +21 -0
- package/dist/src/components/BTable/BTbody.vue.d.ts +14 -29
- package/dist/src/components/BTable/BTd.vue.d.mts +25 -0
- package/dist/src/components/BTable/BTd.vue.d.ts +18 -41
- package/dist/src/components/BTable/BTfoot.vue.d.mts +21 -0
- package/dist/src/components/BTable/BTfoot.vue.d.ts +14 -29
- package/dist/src/components/BTable/BTh.vue.d.mts +25 -0
- package/dist/src/components/BTable/BTh.vue.d.ts +18 -41
- package/dist/src/components/BTable/BThead.vue.d.mts +21 -0
- package/dist/src/components/BTable/BThead.vue.d.ts +14 -29
- package/dist/src/components/BTable/BTr.vue.d.mts +21 -0
- package/dist/src/components/BTable/BTr.vue.d.ts +14 -29
- package/dist/src/components/BTable/index.d.mts +9 -0
- package/dist/src/components/BTable/index.d.ts +9 -0
- package/dist/src/components/BTable/index.mjs +14 -0
- package/dist/src/components/BTable/index.mjs.map +1 -0
- package/dist/src/components/BTable/index.umd.js +2 -0
- package/dist/src/components/BTable/index.umd.js.map +1 -0
- package/dist/src/components/BTabs/BTab.vue.d.mts +43 -0
- package/dist/src/components/BTabs/BTab.vue.d.ts +32 -106
- package/dist/src/components/BTabs/BTabs.vue.d.mts +64 -0
- package/dist/src/components/BTabs/BTabs.vue.d.ts +47 -213
- package/dist/src/components/BTabs/index.d.mts +2 -0
- package/dist/src/components/BTabs/index.d.ts +2 -0
- package/dist/src/components/BTabs/index.mjs +6 -0
- package/dist/src/components/BTabs/index.mjs.map +1 -0
- package/dist/src/components/BTabs/index.umd.js +2 -0
- package/dist/src/components/BTabs/index.umd.js.map +1 -0
- package/dist/src/components/BToast/BToast.vue.d.mts +95 -0
- package/dist/src/components/BToast/BToast.vue.d.ts +67 -364
- package/dist/src/components/BToast/BToastOrchestrator.vue.d.mts +13 -0
- package/dist/src/components/BToast/BToastOrchestrator.vue.d.ts +9 -42
- package/dist/src/components/BToast/index.d.mts +2 -0
- package/dist/src/components/BToast/index.d.ts +2 -0
- package/dist/src/components/BToast/index.mjs +6 -0
- package/dist/src/components/BToast/index.mjs.map +1 -0
- package/dist/src/components/BToast/index.umd.js +2 -0
- package/dist/src/components/BToast/index.umd.js.map +1 -0
- package/dist/src/components/BTooltip/BTooltip.vue.d.mts +276 -0
- package/dist/src/components/BTooltip/BTooltip.vue.d.ts +276 -0
- package/dist/src/components/BTooltip/BTooltipOrchestrator.vue.d.mts +7 -0
- package/dist/src/components/BTooltip/BTooltipOrchestrator.vue.d.ts +7 -0
- package/dist/src/components/BTooltip/index.d.mts +2 -0
- package/dist/src/components/BTooltip/index.d.ts +2 -0
- package/dist/src/components/BTooltip/index.mjs +6 -0
- package/dist/src/components/BTooltip/index.mjs.map +1 -0
- package/dist/src/components/BTooltip/index.umd.js +2 -0
- package/dist/src/components/BTooltip/index.umd.js.map +1 -0
- package/dist/src/components/BTransition.vue.d.mts +50 -0
- package/dist/src/components/BTransition.vue.d.ts +50 -0
- package/dist/src/components/RenderComponentOrSkip.vue.d.mts +39 -0
- package/dist/src/components/RenderComponentOrSkip.vue.d.ts +10 -11
- package/dist/src/components/index.d.mts +39 -0
- package/dist/src/components/index.d.ts +39 -101
- package/dist/src/components/index.mjs +155 -0
- package/dist/src/components/index.mjs.map +1 -0
- package/dist/src/components/index.umd.js +2 -0
- package/dist/src/components/index.umd.js.map +1 -0
- package/dist/src/composables/index.d.mts +8 -0
- package/dist/src/composables/index.d.ts +8 -25
- package/dist/src/composables/index.mjs +19 -0
- package/dist/src/composables/index.mjs.map +1 -0
- package/dist/src/composables/index.umd.js +2 -0
- package/dist/src/composables/index.umd.js.map +1 -0
- package/dist/src/composables/useActivatedFocusTrap.d.mts +21 -0
- package/dist/src/composables/useActivatedFocusTrap.d.ts +1 -2
- package/dist/src/composables/useAlignment.d.mts +3 -0
- package/dist/src/composables/useAlignment.d.ts +2 -4
- package/dist/src/composables/useAriaInvalid.d.mts +3 -0
- package/dist/src/composables/useAriaInvalid.d.ts +2 -4
- package/dist/src/composables/useBLinkHelper.d.mts +7 -0
- package/dist/src/composables/useBLinkHelper.d.ts +2 -4
- package/dist/src/composables/useBreadcrumb/index.d.mts +4 -0
- package/dist/src/composables/useBreadcrumb/index.d.ts +4 -0
- package/dist/src/composables/useBreadcrumb/index.mjs +7 -0
- package/dist/src/composables/useBreadcrumb/index.mjs.map +1 -0
- package/dist/src/composables/useBreadcrumb/index.umd.js +2 -0
- package/dist/src/composables/useBreadcrumb/index.umd.js.map +1 -0
- package/dist/src/composables/{useColorMode.d.ts → useColorMode/index.d.mts} +1 -3
- package/dist/src/composables/useColorMode/index.d.ts +9 -0
- package/dist/src/composables/useColorMode/index.mjs +16 -0
- package/dist/src/composables/useColorMode/index.mjs.map +1 -0
- package/dist/src/composables/useColorMode/index.umd.js +2 -0
- package/dist/src/composables/useColorMode/index.umd.js.map +1 -0
- package/dist/src/composables/useColorVariantClasses.d.mts +5 -0
- package/dist/src/composables/useColorVariantClasses.d.ts +2 -4
- package/dist/src/composables/useContainerClasses.d.mts +6 -0
- package/dist/src/composables/useContainerClasses.d.ts +2 -4
- package/dist/src/composables/useCountdown.d.mts +18 -0
- package/dist/src/composables/useCountdown.d.ts +11 -16
- package/dist/src/composables/useCountdownHover.d.mts +10 -0
- package/dist/src/composables/useCountdownHover.d.ts +10 -0
- package/dist/src/composables/useDefaults.d.mts +2 -0
- package/dist/src/composables/useDefaults.d.ts +1 -2
- package/dist/src/composables/useFormCheck.d.mts +62 -0
- package/dist/src/composables/useFormCheck.d.ts +4 -3
- package/dist/src/composables/useFormInput.d.mts +13 -0
- package/dist/src/composables/useFormInput.d.ts +3 -5
- package/dist/src/composables/useFormSelect.d.mts +9 -0
- package/dist/src/composables/useFormSelect.d.ts +4 -9
- package/dist/src/composables/useId.d.mts +2 -0
- package/dist/src/composables/useId.d.ts +1 -4
- package/dist/src/composables/useLinkClasses.d.mts +7 -0
- package/dist/src/composables/useLinkClasses.d.ts +1 -2
- package/dist/src/composables/useManualTransition.d.mts +5 -0
- package/dist/src/composables/useManualTransition.d.ts +1 -3
- package/dist/src/composables/useModal/index.d.mts +6 -0
- package/dist/src/composables/useModal/index.d.ts +6 -0
- package/dist/src/composables/useModal/index.mjs +51 -0
- package/dist/src/composables/useModal/index.mjs.map +1 -0
- package/dist/src/composables/useModal/index.umd.js +2 -0
- package/dist/src/composables/useModal/index.umd.js.map +1 -0
- package/dist/src/composables/useModalController/index.d.mts +9 -0
- package/dist/src/composables/useModalController/index.d.ts +9 -0
- package/dist/src/composables/useModalController/index.mjs +29 -0
- package/dist/src/composables/useModalController/index.mjs.map +1 -0
- package/dist/src/composables/useModalController/index.umd.js +2 -0
- package/dist/src/composables/useModalController/index.umd.js.map +1 -0
- package/dist/src/composables/useModalManager.d.mts +17 -0
- package/dist/src/composables/useModalManager.d.ts +2 -4
- package/dist/src/composables/useNumberishToStyle.d.mts +3 -0
- package/dist/src/composables/useNumberishToStyle.d.ts +2 -4
- package/dist/src/composables/usePopover/index.d.mts +6 -0
- package/dist/src/composables/usePopover/index.d.ts +6 -0
- package/dist/src/composables/usePopover/index.mjs +7 -0
- package/dist/src/composables/usePopover/index.mjs.map +1 -0
- package/dist/src/composables/usePopover/index.umd.js +2 -0
- package/dist/src/composables/usePopover/index.umd.js.map +1 -0
- package/dist/src/composables/useRadiusElementClasses.d.mts +5 -0
- package/dist/src/composables/useRadiusElementClasses.d.ts +2 -4
- package/dist/src/composables/useRtl.d.mts +4 -0
- package/dist/src/composables/useRtl.d.ts +3 -4
- package/dist/src/composables/useSafeScrollLock.d.mts +2 -0
- package/dist/src/composables/useSafeScrollLock.d.ts +1 -3
- package/dist/src/composables/{useScrollspy.d.ts → useScrollspy/index.d.mts} +2 -3
- package/dist/src/composables/useScrollspy/index.d.ts +27 -0
- package/dist/src/composables/useScrollspy/index.mjs +179 -0
- package/dist/src/composables/useScrollspy/index.mjs.map +1 -0
- package/dist/src/composables/useScrollspy/index.umd.js +2 -0
- package/dist/src/composables/useScrollspy/index.umd.js.map +1 -0
- package/dist/src/composables/useStateClass.d.mts +2 -0
- package/dist/src/composables/useStateClass.d.ts +1 -3
- package/dist/src/composables/useToast/index.d.mts +7 -0
- package/dist/src/composables/useToast/index.d.ts +7 -0
- package/dist/src/composables/useToast/index.mjs +7 -0
- package/dist/src/composables/useToast/index.mjs.map +1 -0
- package/dist/src/composables/useToast/index.umd.js +2 -0
- package/dist/src/composables/useToast/index.umd.js.map +1 -0
- package/dist/src/composables/useTooltip/index.d.mts +6 -0
- package/dist/src/composables/useTooltip/index.d.ts +6 -0
- package/dist/src/composables/useTooltip/index.mjs +7 -0
- package/dist/src/composables/useTooltip/index.mjs.map +1 -0
- package/dist/src/composables/useTooltip/index.umd.js +2 -0
- package/dist/src/composables/useTooltip/index.umd.js.map +1 -0
- package/dist/src/composables/useTransitions.d.mts +11 -0
- package/dist/src/composables/useTransitions.d.ts +0 -1
- package/dist/src/directives/BColorMode/index.d.mts +2 -0
- package/dist/src/directives/BColorMode/index.d.ts +2 -0
- package/dist/src/directives/BColorMode/index.mjs +13 -0
- package/dist/src/directives/BColorMode/index.mjs.map +1 -0
- package/dist/src/directives/BColorMode/index.umd.js +2 -0
- package/dist/src/directives/BColorMode/index.umd.js.map +1 -0
- package/dist/src/directives/BModal/index.d.mts +1 -0
- package/dist/src/directives/BModal/index.d.ts +1 -0
- package/dist/src/directives/BModal/index.mjs +5 -0
- package/dist/src/directives/BModal/index.mjs.map +1 -0
- package/dist/src/directives/BModal/index.umd.js +2 -0
- package/dist/src/directives/BModal/index.umd.js.map +1 -0
- package/dist/src/directives/BPopover/index.d.mts +3 -0
- package/dist/src/directives/BPopover/index.d.ts +3 -0
- package/dist/src/directives/BPopover/index.mjs +43 -0
- package/dist/src/directives/BPopover/index.mjs.map +1 -0
- package/dist/src/directives/BPopover/index.umd.js +2 -0
- package/dist/src/directives/BPopover/index.umd.js.map +1 -0
- package/dist/src/directives/BScrollspy/index.d.mts +6 -0
- package/dist/src/directives/BScrollspy/index.d.ts +6 -0
- package/dist/src/directives/BScrollspy/index.mjs +21 -0
- package/dist/src/directives/BScrollspy/index.mjs.map +1 -0
- package/dist/src/directives/BScrollspy/index.umd.js +2 -0
- package/dist/src/directives/BScrollspy/index.umd.js.map +1 -0
- package/dist/src/directives/BToggle/index.d.mts +5 -0
- package/dist/src/directives/BToggle/index.d.ts +5 -0
- package/dist/src/directives/BToggle/index.mjs +67 -0
- package/dist/src/directives/BToggle/index.mjs.map +1 -0
- package/dist/src/directives/BToggle/index.umd.js +2 -0
- package/dist/src/directives/BToggle/index.umd.js.map +1 -0
- package/dist/src/directives/BTooltip/index.d.mts +3 -0
- package/dist/src/directives/BTooltip/index.d.ts +3 -0
- package/dist/src/directives/BTooltip/index.mjs +47 -0
- package/dist/src/directives/BTooltip/index.mjs.map +1 -0
- package/dist/src/directives/BTooltip/index.umd.js +2 -0
- package/dist/src/directives/BTooltip/index.umd.js.map +1 -0
- package/dist/src/directives/index.d.mts +6 -0
- package/dist/src/directives/index.d.ts +6 -6
- package/dist/src/directives/index.mjs +14 -0
- package/dist/src/directives/index.mjs.map +1 -0
- package/dist/src/directives/index.umd.js +2 -0
- package/dist/src/directives/index.umd.js.map +1 -0
- package/dist/src/index.d.mts +14 -0
- package/dist/src/index.d.ts +14 -0
- package/dist/src/main.d.mts +0 -0
- package/dist/src/main.d.ts +0 -1
- package/dist/src/plugins/breadcrumb/index.d.mts +2 -0
- package/dist/src/plugins/breadcrumb/index.d.ts +2 -0
- package/dist/src/plugins/breadcrumb/index.mjs +15 -0
- package/dist/src/plugins/breadcrumb/index.mjs.map +1 -0
- package/dist/src/plugins/breadcrumb/index.umd.js +2 -0
- package/dist/src/plugins/breadcrumb/index.umd.js.map +1 -0
- package/dist/src/plugins/createBootstrap/index.d.mts +3 -0
- package/dist/src/plugins/createBootstrap/index.d.ts +3 -0
- package/dist/src/plugins/createBootstrap/index.mjs +38 -0
- package/dist/src/plugins/createBootstrap/index.mjs.map +1 -0
- package/dist/src/plugins/createBootstrap/index.umd.js +2 -0
- package/dist/src/plugins/createBootstrap/index.umd.js.map +1 -0
- package/dist/src/plugins/defaults/index.d.mts +2 -0
- package/dist/src/plugins/defaults/index.d.ts +2 -0
- package/dist/src/plugins/defaults/index.mjs +12 -0
- package/dist/src/plugins/defaults/index.mjs.map +1 -0
- package/dist/src/plugins/defaults/index.umd.js +2 -0
- package/dist/src/plugins/defaults/index.umd.js.map +1 -0
- package/dist/src/plugins/index.d.mts +9 -0
- package/dist/src/plugins/index.d.ts +9 -7
- package/dist/src/plugins/index.mjs +21 -0
- package/dist/src/plugins/index.mjs.map +1 -0
- package/dist/src/plugins/index.umd.js +2 -0
- package/dist/src/plugins/index.umd.js.map +1 -0
- package/dist/src/plugins/modalController/index.d.mts +2 -0
- package/dist/src/plugins/modalController/index.d.ts +2 -0
- package/dist/src/plugins/modalController/index.mjs +75 -0
- package/dist/src/plugins/modalController/index.mjs.map +1 -0
- package/dist/src/plugins/modalController/index.umd.js +2 -0
- package/dist/src/plugins/modalController/index.umd.js.map +1 -0
- package/dist/src/plugins/modalManager/index.d.mts +2 -0
- package/dist/src/plugins/modalManager/index.d.ts +2 -0
- package/dist/src/plugins/modalManager/index.mjs +38 -0
- package/dist/src/plugins/modalManager/index.mjs.map +1 -0
- package/dist/src/plugins/modalManager/index.umd.js +2 -0
- package/dist/src/plugins/modalManager/index.umd.js.map +1 -0
- package/dist/src/plugins/popover/index.d.mts +2 -0
- package/dist/src/plugins/popover/index.d.ts +2 -0
- package/dist/src/plugins/popover/index.mjs +55 -0
- package/dist/src/plugins/popover/index.mjs.map +1 -0
- package/dist/src/plugins/popover/index.umd.js +2 -0
- package/dist/src/plugins/popover/index.umd.js.map +1 -0
- package/dist/src/plugins/rtl/index.d.mts +2 -0
- package/dist/src/plugins/rtl/index.d.ts +2 -0
- package/dist/src/plugins/rtl/index.mjs +18 -0
- package/dist/src/plugins/rtl/index.mjs.map +1 -0
- package/dist/src/plugins/rtl/index.umd.js +2 -0
- package/dist/src/plugins/rtl/index.umd.js.map +1 -0
- package/dist/src/plugins/toast/index.d.mts +2 -0
- package/dist/src/plugins/toast/index.d.ts +2 -0
- package/dist/src/plugins/toast/index.mjs +69 -0
- package/dist/src/plugins/toast/index.mjs.map +1 -0
- package/dist/src/plugins/toast/index.umd.js +2 -0
- package/dist/src/plugins/toast/index.umd.js.map +1 -0
- package/dist/src/plugins/tooltip/index.d.mts +2 -0
- package/dist/src/plugins/tooltip/index.d.ts +2 -0
- package/dist/src/plugins/tooltip/index.mjs +57 -0
- package/dist/src/plugins/tooltip/index.mjs.map +1 -0
- package/dist/src/plugins/tooltip/index.umd.js +2 -0
- package/dist/src/plugins/tooltip/index.umd.js.map +1 -0
- package/dist/src/resolvers/index.d.mts +10 -0
- package/dist/src/resolvers/index.d.ts +10 -0
- package/dist/src/resolvers/index.mjs +5 -0
- package/dist/src/resolvers/index.mjs.map +1 -0
- package/dist/src/resolvers/index.umd.js +2 -0
- package/dist/src/resolvers/index.umd.js.map +1 -0
- package/dist/src/types/Alignment.d.mts +12 -0
- package/dist/src/types/Animation.d.mts +1 -0
- package/dist/src/types/AnyValuedAttributes.d.mts +2 -0
- package/dist/src/types/AriaInvalid.d.mts +1 -0
- package/dist/src/types/BootstrapVueOptions.d.mts +284 -0
- package/dist/src/types/BootstrapVueOptions.d.ts +244 -26
- package/dist/src/types/BreadcrumbTypes.d.mts +9 -0
- package/dist/src/types/BreadcrumbTypes.d.ts +0 -1
- package/dist/src/types/BreakpointProps.d.mts +30 -0
- package/dist/src/types/ButtonType.d.mts +1 -0
- package/dist/src/types/CheckboxTypes.d.mts +7 -0
- package/dist/src/types/ColorTypes.d.mts +37 -0
- package/dist/src/types/CommonTypes.d.mts +6 -0
- package/dist/src/types/CommonTypes.d.ts +0 -1
- package/dist/src/types/ComponentOrchestratorTypes.d.mts +80 -0
- package/dist/src/types/ComponentOrchestratorTypes.d.ts +62 -5
- package/dist/src/types/ComponentProps.d.mts +1159 -0
- package/dist/src/types/ComponentProps.d.ts +28 -113
- package/dist/src/types/FormCommonInputProps.d.mts +26 -0
- package/dist/src/types/FormCommonInputProps.d.ts +3 -2
- package/dist/src/types/InputType.d.mts +1 -0
- package/dist/src/types/LinkTarget.d.mts +1 -0
- package/dist/src/types/LiteralUnion.d.mts +19 -0
- package/dist/src/types/MaybePromise.d.mts +1 -0
- package/dist/src/types/PaginationPage.d.mts +3 -0
- package/dist/src/types/PlaceholderTypes.d.mts +3 -0
- package/dist/src/types/PlaceholderTypes.d.ts +1 -2
- package/dist/src/types/PopoverPlacement.d.mts +2 -0
- package/dist/src/types/PopoverPlacement.d.ts +0 -1
- package/dist/src/types/Position.d.mts +1 -0
- package/dist/src/types/Props.d.mts +10 -0
- package/dist/src/types/RadioTypes.d.mts +7 -0
- package/dist/src/types/RadiusElement.d.mts +8 -0
- package/dist/src/types/SelectTypes.d.mts +16 -0
- package/dist/src/types/Size.d.mts +6 -0
- package/dist/src/types/SpinnerType.d.mts +1 -0
- package/dist/src/types/Tab.d.mts +15 -0
- package/dist/src/types/Tab.d.ts +4 -5
- package/dist/src/types/TableTypes.d.mts +53 -0
- package/dist/src/types/TableTypes.d.ts +5 -3
- package/dist/src/types/TransitionMode.d.mts +1 -0
- package/dist/src/types/index.d.mts +27 -0
- package/dist/src/types/index.d.ts +16 -20
- package/dist/src/utils/classes.d.mts +58 -0
- package/dist/src/utils/classes.d.ts +58 -0
- package/dist/src/{constants/codes.d.ts → utils/constants.d.mts} +11 -0
- package/dist/src/utils/constants.d.ts +25 -0
- package/dist/src/utils/dom.d.mts +11 -0
- package/dist/src/utils/dom.d.ts +0 -1
- package/dist/src/utils/event.d.mts +20 -0
- package/dist/src/utils/event.d.ts +1 -1
- package/dist/src/utils/filterEvent.d.mts +1 -0
- package/dist/src/utils/filterEvent.d.ts +1 -2
- package/dist/src/utils/floatingUi.d.mts +33 -0
- package/dist/src/utils/floatingUi.d.ts +4 -4
- package/dist/src/utils/formatItem.d.mts +2 -0
- package/dist/src/utils/formatItem.d.ts +2 -4
- package/dist/src/utils/getBreakpointProps.d.mts +2 -0
- package/dist/src/utils/getBreakpointProps.d.ts +2 -4
- package/dist/src/utils/getClasses.d.mts +1 -0
- package/dist/src/utils/getClasses.d.ts +1 -2
- package/dist/src/utils/getElement.d.mts +2 -0
- package/dist/src/utils/getElement.d.ts +1 -3
- package/dist/src/utils/getSlotElements.d.mts +2 -0
- package/dist/src/utils/getSlotElements.d.ts +1 -3
- package/dist/src/utils/getTableFieldHeadLabel.d.mts +2 -0
- package/dist/src/utils/getTableFieldHeadLabel.d.ts +2 -4
- package/dist/src/utils/index.d.mts +1 -0
- package/dist/src/utils/index.d.ts +0 -19
- package/dist/src/utils/index.mjs +7 -0
- package/dist/src/utils/index.mjs.map +1 -0
- package/dist/src/utils/index.umd.js +2 -0
- package/dist/src/utils/index.umd.js.map +1 -0
- package/dist/src/utils/isLink.d.mts +5 -0
- package/dist/src/utils/isLink.d.ts +1 -3
- package/dist/src/utils/keys.d.mts +153 -0
- package/dist/src/utils/keys.d.ts +40 -45
- package/dist/src/utils/normalizeInput.d.mts +2 -0
- package/dist/src/utils/normalizeInput.d.ts +2 -4
- package/dist/src/utils/normalizeSlot.d.mts +2 -0
- package/dist/src/utils/normalizeSlot.d.ts +1 -3
- package/dist/src/utils/object.d.mts +34 -0
- package/dist/src/utils/object.d.ts +2 -2
- package/dist/src/utils/positionClasses.d.mts +11 -0
- package/dist/src/utils/props.d.mts +8 -0
- package/dist/src/utils/sanitizer.d.mts +39 -0
- package/dist/src/utils/stringUtils.d.mts +32 -0
- package/dist/stringUtils-D2ajpVM0.js +2 -0
- package/dist/stringUtils-D2ajpVM0.js.map +1 -0
- package/dist/stringUtils-i6NkPGA1.mjs +16 -0
- package/dist/stringUtils-i6NkPGA1.mjs.map +1 -0
- package/dist/useAlignment-BTUJZ_9x.js +2 -0
- package/dist/useAlignment-BTUJZ_9x.js.map +1 -0
- package/dist/useAlignment-Cw-9AVid.mjs +9 -0
- package/dist/useAlignment-Cw-9AVid.mjs.map +1 -0
- package/dist/useAriaInvalid-BTUbGj3Y.mjs +11 -0
- package/dist/useAriaInvalid-BTUbGj3Y.mjs.map +1 -0
- package/dist/useAriaInvalid-DUOcHX79.js +2 -0
- package/dist/useAriaInvalid-DUOcHX79.js.map +1 -0
- package/dist/useBLinkHelper-Bvtov_sk.mjs +37 -0
- package/dist/useBLinkHelper-Bvtov_sk.mjs.map +1 -0
- package/dist/useBLinkHelper-BxI4evA6.js +2 -0
- package/dist/useBLinkHelper-BxI4evA6.js.map +1 -0
- package/dist/useColorVariantClasses-CnrZmyKT.js +2 -0
- package/dist/useColorVariantClasses-CnrZmyKT.js.map +1 -0
- package/dist/useColorVariantClasses-WMXe7khu.mjs +19 -0
- package/dist/useColorVariantClasses-WMXe7khu.mjs.map +1 -0
- package/dist/useCountdownHover-Ds0unFZR.mjs +76 -0
- package/dist/useCountdownHover-Ds0unFZR.mjs.map +1 -0
- package/dist/useCountdownHover-pVk1zcyl.js +2 -0
- package/dist/useCountdownHover-pVk1zcyl.js.map +1 -0
- package/dist/useDefaults-BYx9NNxn.mjs +96 -0
- package/dist/useDefaults-BYx9NNxn.mjs.map +1 -0
- package/dist/useDefaults-Cd8OVIUI.js +2 -0
- package/dist/useDefaults-Cd8OVIUI.js.map +1 -0
- package/dist/useFormCheck-Bcx8Ea7M.mjs +61 -0
- package/dist/useFormCheck-Bcx8Ea7M.mjs.map +1 -0
- package/dist/useFormCheck-DLmeXWHw.js +2 -0
- package/dist/useFormCheck-DLmeXWHw.js.map +1 -0
- package/dist/useFormInput-B-34kU2d.mjs +114 -0
- package/dist/useFormInput-B-34kU2d.mjs.map +1 -0
- package/dist/useFormInput-Cl9jLmfR.js +2 -0
- package/dist/useFormInput-Cl9jLmfR.js.map +1 -0
- package/dist/useFormSelect-C5Ssz8Hc.mjs +63 -0
- package/dist/useFormSelect-C5Ssz8Hc.mjs.map +1 -0
- package/dist/useFormSelect-CPz2u6a6.js +2 -0
- package/dist/useFormSelect-CPz2u6a6.js.map +1 -0
- package/dist/useId-BrAgQfKM.mjs +9 -0
- package/dist/useId-BrAgQfKM.mjs.map +1 -0
- package/dist/useId-z7cQCT28.js +2 -0
- package/dist/useId-z7cQCT28.js.map +1 -0
- package/dist/useModalManager-CcThsNp5.js +2 -0
- package/dist/useModalManager-CcThsNp5.js.map +1 -0
- package/dist/useModalManager-N1MQhnkH.mjs +75 -0
- package/dist/useModalManager-N1MQhnkH.mjs.map +1 -0
- package/dist/useNumberishToStyle-BWrWARZP.mjs +11 -0
- package/dist/useNumberishToStyle-BWrWARZP.mjs.map +1 -0
- package/dist/useNumberishToStyle-CUqOYwz3.js +2 -0
- package/dist/useNumberishToStyle-CUqOYwz3.js.map +1 -0
- package/dist/useRadiusElementClasses-D-ydxJLn.js +2 -0
- package/dist/useRadiusElementClasses-D-ydxJLn.js.map +1 -0
- package/dist/useRadiusElementClasses-DtKYQuWz.mjs +21 -0
- package/dist/useRadiusElementClasses-DtKYQuWz.mjs.map +1 -0
- package/dist/useSafeScrollLock-BfVVwTzO.mjs +1141 -0
- package/dist/useSafeScrollLock-BfVVwTzO.mjs.map +1 -0
- package/dist/useSafeScrollLock-Ib_fUIsz.js +12 -0
- package/dist/useSafeScrollLock-Ib_fUIsz.js.map +1 -0
- package/dist/useStateClass-BGbSLWFN.mjs +9 -0
- package/dist/useStateClass-BGbSLWFN.mjs.map +1 -0
- package/dist/useStateClass-BePLKIel.js +2 -0
- package/dist/useStateClass-BePLKIel.js.map +1 -0
- package/package.json +126 -26
- package/dist/src/BootstrapVue.d.mts +0 -130
- package/dist/src/BootstrapVue.d.ts +0 -130
- package/dist/src/components/BCol.vue.d.ts +0 -96
- package/dist/src/components/BCollapse.vue.d.ts +0 -112
- package/dist/src/components/BContainer.vue.d.ts +0 -43
- package/dist/src/components/BImg.vue.d.ts +0 -81
- package/dist/src/components/BPopover.vue.d.ts +0 -345
- package/dist/src/components/BRow.vue.d.ts +0 -72
- package/dist/src/components/BSpinner.vue.d.ts +0 -51
- package/dist/src/components/BTooltip.vue.d.ts +0 -289
- package/dist/src/components/BTransition/BTransition.vue.d.ts +0 -71
- package/dist/src/composables/exports/index.d.ts +0 -1
- package/dist/src/composables/useBreadcrumb.d.ts +0 -5
- package/dist/src/composables/useModal.d.ts +0 -8
- package/dist/src/composables/useModalController.d.ts +0 -27
- package/dist/src/composables/useToast.d.ts +0 -17
- package/dist/src/constants/regex.d.ts +0 -11
- package/dist/src/directives/BColorMode.d.ts +0 -7
- package/dist/src/directives/BModal.d.ts +0 -3
- package/dist/src/directives/BPopover.d.ts +0 -8
- package/dist/src/directives/BScrollspy.d.ts +0 -12
- package/dist/src/directives/BToggle.d.ts +0 -11
- package/dist/src/directives/BTooltip.d.ts +0 -8
- package/dist/src/plugins/breadcrumbPlugin.d.ts +0 -4
- package/dist/src/plugins/defaultsPlugin.d.ts +0 -6
- package/dist/src/plugins/idPlugin.d.ts +0 -6
- package/dist/src/plugins/modalControllerPlugin.d.ts +0 -4
- package/dist/src/plugins/modalManagerPlugin.d.ts +0 -4
- package/dist/src/plugins/rtlPlugin.d.ts +0 -6
- package/dist/src/plugins/toastPlugin.d.ts +0 -4
- package/dist/src/types/exports/index.d.ts +0 -3
- package/dist/src/utils/classes/BvCarouselEvent.d.ts +0 -20
- package/dist/src/utils/classes/BvEvent.d.ts +0 -27
- package/dist/src/utils/classes/BvTriggerableEvent.d.ts +0 -15
- package/dist/src/utils/classes/index.d.ts +0 -3
- package/dist/src/utils/exports/index.d.ts +0 -1
- package/dist/src/utils/parseActiveImports.d.ts +0 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap-vue-next.umd.js","sources":["../src/composables/useAlignment.ts","../src/composables/useAriaInvalid.ts","../src/utils/classes/BvEvent.ts","../src/utils/classes/BvTriggerableEvent.ts","../src/utils/classes/BvCarouselEvent.ts","../src/utils/dom.ts","../src/utils/event.ts","../src/utils/filterEvent.ts","../../../node_modules/.pnpm/@floating-ui+utils@0.2.1/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../../../node_modules/.pnpm/@floating-ui+core@1.6.2/node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../../../node_modules/.pnpm/@floating-ui+dom@1.1.1/node_modules/@floating-ui/dom/dist/floating-ui.dom.browser.min.mjs","../../../node_modules/.pnpm/@floating-ui+utils@0.2.6/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../../../node_modules/.pnpm/@floating-ui+vue@1.1.3_vue@3.4.27_typescript@5.4.5_/node_modules/@floating-ui/vue/dist/floating-ui.vue.mjs","../src/utils/sanitizer.ts","../../../node_modules/.pnpm/@vueuse+shared@10.11.0_vue@3.4.27_typescript@5.4.5_/node_modules/@vueuse/shared/index.mjs","../../../node_modules/.pnpm/@vueuse+core@10.11.0_vue@3.4.27_typescript@5.4.5_/node_modules/@vueuse/core/index.mjs","../src/components/BPopover.vue","../src/utils/floatingUi.ts","../src/utils/formatItem.ts","../src/utils/getClasses.ts","../src/utils/getElement.ts","../src/utils/getSlotElements.ts","../src/constants/regex.ts","../src/utils/stringUtils.ts","../src/utils/getTableFieldHeadLabel.ts","../src/utils/isLink.ts","../src/utils/keys.ts","../src/utils/normalizeInput.ts","../src/utils/normalizeSlot.ts","../src/utils/object.ts","../src/utils/parseActiveImports.ts","../src/utils/props.ts","../src/utils/positionClasses.ts","../src/composables/useBLinkHelper.ts","../src/composables/useBreadcrumb.ts","../src/composables/useColorMode.ts","../src/composables/useColorVariantClasses.ts","../src/composables/useContainerClasses.ts","../src/composables/useCountdown.ts","../src/composables/useDefaults.ts","../src/composables/useStateClass.ts","../src/composables/useFormCheck.ts","../src/composables/useId.ts","../src/composables/useFormInput.ts","../src/composables/useFormSelect.ts","../src/composables/useModalManager.ts","../src/composables/useModal.ts","../src/composables/useModalController.ts","../src/composables/useNumberishToStyle.ts","../src/composables/useRadiusElementClasses.ts","../src/composables/useRtl.ts","../src/composables/useSafeScrollLock.ts","../src/composables/useScrollspy.ts","../src/composables/useToast.ts","../src/composables/useTransitions.ts","../src/components/BTransition/BTransition.vue","../src/components/BButton/BCloseButton.vue","../src/composables/useLinkClasses.ts","../src/components/BLink/BLink.vue","../src/components/BProgress/BProgressBar.vue","../src/components/BProgress/BProgress.vue","../src/components/BToast/BToast.vue","../src/plugins/toastPlugin.ts","../src/plugins/breadcrumbPlugin.ts","../src/plugins/idPlugin.ts","../../../node_modules/.pnpm/tabbable@6.2.0/node_modules/tabbable/dist/index.esm.js","../../../node_modules/.pnpm/focus-trap@7.5.4/node_modules/focus-trap/dist/focus-trap.esm.js","../../../node_modules/.pnpm/@vueuse+integrations@10.11.0_focus-trap@7.5.4_vue@3.4.27_typescript@5.4.5_/node_modules/@vueuse/integrations/useFocusTrap.mjs","../src/composables/useActivatedFocusTrap.ts","../src/components/BSpinner.vue","../src/components/BButton/BButton.vue","../src/components/BModal/BModal.vue","../src/plugins/modalControllerPlugin.ts","../src/plugins/modalManagerPlugin.ts","../src/plugins/rtlPlugin.ts","../src/plugins/defaultsPlugin.ts","../src/types/BootstrapVueOptions.ts","../src/components/BAccordion/BAccordion.vue","../src/components/BCollapse.vue","../src/components/BAccordion/BAccordionItem.vue","../src/components/BAlert/BAlert.vue","../src/components/RenderComponentOrSkip.vue","../src/components/BBadge/BBadge.vue","../src/components/BAvatar/BAvatar.vue","../src/components/BAvatar/BAvatarGroup.vue","../src/components/BBreadcrumb/BBreadcrumbItem.vue","../src/components/BBreadcrumb/BBreadcrumb.vue","../src/components/BButton/BButtonGroup.vue","../src/components/BButton/BButtonToolbar.vue","../src/components/BImg.vue","../src/components/BCard/BCardImg.vue","../src/components/BCard/BCardHeadFoot.vue","../src/components/BCard/BCardHeader.vue","../src/components/BCard/BCardTitle.vue","../src/components/BCard/BCardSubtitle.vue","../src/components/BCard/BCardBody.vue","../src/components/BCard/BCardFooter.vue","../src/components/BCard/BCard.vue","../src/components/BCard/BCardGroup.vue","../src/components/BCard/BCardText.vue","../src/components/BCarousel/BCarousel.vue","../src/components/BCarousel/BCarouselSlide.vue","../src/components/BCol.vue","../src/components/BContainer.vue","../src/components/BDropdown/BDropdown.vue","../src/components/BDropdown/BDropdownDivider.vue","../src/components/BDropdown/BDropdownGroup.vue","../src/components/BDropdown/BDropdownItem.vue","../src/components/BDropdown/BDropdownItemButton.vue","../src/components/BDropdown/BDropdownText.vue","../src/components/BForm/BForm.vue","../src/components/BFormSelect/BFormSelectOption.vue","../src/components/BForm/BFormDatalist.vue","../src/components/BForm/BFormFloatingLabel.vue","../src/components/BForm/BFormInvalidFeedback.vue","../src/components/BForm/BFormRow.vue","../src/components/BForm/BFormText.vue","../src/components/BForm/BFormValidFeedback.vue","../src/components/BFormCheckbox/BFormCheckbox.vue","../src/components/BFormCheckbox/BFormCheckboxGroup.vue","../src/components/BFormFile/BFormFile.vue","../src/components/BFormGroup/BFormGroup.vue","../src/components/BFormInput/BFormInput.vue","../src/components/BFormRadio/BFormRadio.vue","../src/components/BFormRadio/BFormRadioGroup.vue","../src/components/BFormSelect/BFormSelectOptionGroup.vue","../src/components/BFormSelect/BFormSelect.vue","../src/constants/codes.ts","../src/components/BFormSpinbutton/BFormSpinbutton.vue","../src/components/BFormTags/BFormTag.vue","../src/components/BFormTags/BFormTags.vue","../src/components/BFormTextarea/BFormTextarea.vue","../src/components/BInputGroup/BInputGroup.vue","../src/components/BInputGroup/BInputGroupText.vue","../src/components/BListGroup/BListGroup.vue","../src/components/BListGroup/BListGroupItem.vue","../src/components/BModal/BModalOrchestrator.vue","../src/components/BNav/BNav.vue","../src/components/BNav/BNavForm.vue","../src/components/BNav/BNavItem.vue","../src/components/BNav/BNavItemDropdown.vue","../src/components/BNav/BNavText.vue","../src/components/BNavbar/BNavbar.vue","../src/components/BNavbar/BNavbarBrand.vue","../src/components/BNavbar/BNavbarNav.vue","../src/directives/BColorMode.ts","../src/directives/BToggle.ts","../src/directives/BPopover.ts","../src/directives/BScrollspy.ts","../src/directives/BTooltip.ts","../src/components/BNavbar/BNavbarToggle.vue","../src/components/BOffcanvas/BOffcanvas.vue","../src/components/BOverlay/BOverlay.vue","../src/components/BPagination/BPagination.vue","../src/components/BPlaceholder/BPlaceholder.vue","../src/components/BPlaceholder/BPlaceholderButton.vue","../src/components/BPlaceholder/BPlaceholderCard.vue","../src/components/BTable/BTableSimple.vue","../src/components/BPlaceholder/BPlaceholderTable.vue","../src/components/BPlaceholder/BPlaceholderWrapper.vue","../src/components/BRow.vue","../src/types/TableTypes.ts","../src/components/BTable/BTbody.vue","../src/components/BTable/BTd.vue","../src/components/BTable/BTfoot.vue","../src/components/BTable/BTh.vue","../src/components/BTable/BThead.vue","../src/components/BTable/BTr.vue","../src/components/BTable/BTableLite.vue","../src/components/BTable/BTable.vue","../src/components/BTabs/BTab.vue","../src/components/BTabs/BTabs.vue","../src/components/BToast/BToastOrchestrator.vue","../src/components/BTooltip.vue","../src/BootstrapVue.ts"],"sourcesContent":["import {computed, type MaybeRefOrGetter, toValue} from 'vue'\nimport type {AlignmentJustifyContent} from '../types'\n\nexport default (align: MaybeRefOrGetter<AlignmentJustifyContent | undefined>) =>\n computed(() => {\n const value = toValue(align)\n return !value ? '' : `justify-content-${value}`\n })\n","import type {AriaInvalid} from '../types'\nimport {computed, type MaybeRefOrGetter, toValue} from 'vue'\n\nexport default (\n ariaInvalid: MaybeRefOrGetter<AriaInvalid | undefined>,\n state: MaybeRefOrGetter<boolean | null | undefined>\n) =>\n computed(() => {\n const resolvedAriaInvalid = toValue(ariaInvalid)\n const resolvedState = toValue(state)\n\n const resolvedAriaInvalidValue =\n resolvedAriaInvalid === true\n ? 'true'\n : typeof resolvedAriaInvalid === 'string'\n ? resolvedAriaInvalid\n : resolvedState === false\n ? 'true'\n : resolvedAriaInvalid === false\n ? 'false'\n : undefined\n\n return resolvedAriaInvalidValue\n })\n","/**\n * Items that are omitted from the BvEventInit constructor arg\n */\nexport type BvEventConstructorOmittables = 'eventType' | 'defaultPrevented'\n\nexport default class BvEvent {\n readonly cancelable: boolean = true\n readonly componentId: string | null = null\n private _defaultPrevented = false\n readonly eventType: string = ''\n readonly nativeEvent: string | null = null\n private _preventDefault: () => void\n readonly relatedTarget: EventTarget | null = null\n readonly target: EventTarget | null = null\n // Readable by everyone,\n // But only overwritten by inherrited constructors\n public get defaultPrevented() {\n return this._defaultPrevented\n }\n protected set defaultPrevented(prop) {\n this._defaultPrevented = prop\n }\n // I think this is right\n // We want to be able to have it callable to everyone,\n // But only overwritten by inherrited constructors\n public get preventDefault() {\n return this._preventDefault\n }\n // This may not be correct, because it doesn't get correct type inferences in children\n // Ex overwrite this.preventDefault = () => true is valid. Could be a TS issue\n protected set preventDefault(setter: () => void) {\n this._preventDefault = setter\n }\n\n constructor(\n eventType: string,\n eventInit: Partial<Omit<BvEvent, BvEventConstructorOmittables>> = {}\n ) {\n if (!eventType) {\n throw new TypeError(\n `Failed to construct '${this.constructor.name}'. 1 argument required, ${arguments.length} given.`\n )\n }\n\n // Merge defaults first, the eventInit, and the type last\n // so, it can't be overwritten\n Object.assign(this, BvEvent.Defaults, eventInit, {eventType})\n\n this._preventDefault = function _preventDefault() {\n if (this.cancelable) {\n this.defaultPrevented = true\n }\n }\n }\n\n static get Defaults() {\n return {\n cancelable: true,\n componentId: null,\n eventType: '',\n nativeEvent: null,\n relatedTarget: null,\n target: null,\n }\n }\n}\n","import BvEvent, {type BvEventConstructorOmittables} from './BvEvent'\n\nexport default class BvTriggerableEvent extends BvEvent {\n readonly trigger: string | null = null\n\n constructor(\n eventType: string,\n eventInit: Partial<Omit<BvTriggerableEvent, BvEventConstructorOmittables>> = {}\n ) {\n super(eventType, eventInit)\n\n // Merge defaults first, the eventInit, and the type last\n // so, it can't be overwritten\n Object.assign(this, BvEvent.Defaults, eventInit, {eventType})\n }\n\n static get Defaults() {\n return {\n ...super.Defaults,\n trigger: null,\n }\n }\n}\n","import BvEvent, {type BvEventConstructorOmittables} from './BvEvent'\n\nexport default class BvCarouselEvent extends BvEvent {\n readonly from: number\n readonly to: number\n readonly direction: 'left' | 'right'\n\n constructor(\n eventType: string,\n eventInit: Partial<Omit<BvEvent, BvEventConstructorOmittables>> & {\n from: number\n to: number\n direction: 'left' | 'right'\n }\n ) {\n super(eventType, eventInit)\n Object.assign(this, BvEvent.Defaults, eventInit, {eventType})\n const {from, direction, to} = eventInit\n this.from = from\n this.to = to\n this.direction = direction\n }\n\n static get Defaults() {\n return {\n ...super.Defaults,\n }\n }\n}\n","import type {Slot} from 'vue'\n\n/**\n * @deprecated only used in BFormGroup, which is not an SFC... Function could probably be replaced with pure Vue\n */\nexport const attemptFocus = (\n el: Readonly<HTMLElement>,\n options: Readonly<FocusOptions> = {}\n): boolean => {\n const getActiveElement = (excludes: readonly HTMLElement[] = []): Element | null => {\n const {activeElement} = document\n return activeElement && !excludes.some((el) => el === activeElement) ? activeElement : null\n }\n\n const isActiveElement = (el: Readonly<HTMLElement>): boolean => el === getActiveElement()\n\n try {\n el.focus(options)\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(e)\n }\n return isActiveElement(el)\n}\n\nexport const isEmptySlot = (el: Slot | undefined): boolean => (el?.() ?? []).length === 0\n\n/**\n * @deprecated only used in BFormGroup, which is not an SFC... Function could probably be replaced with pure Vue\n */\nexport const isVisible = (el: Readonly<Element>): boolean => {\n //if (!isElement(el) || !el.parentNode || !contains(DOCUMENT.body, el)) {\n // Note this can fail for shadow dom elements since they\n // are not a direct descendant of document.body\n //return false\n //}\n if (el.getAttribute('display') === 'none') {\n // We do this check to help with vue-test-utils when using v-show\n return false\n }\n // All browsers support getBoundingClientRect(), except JSDOM as it returns all 0's for values :(\n // So any tests that need isVisible will fail in JSDOM\n // Except when we override the getBCR prototype in some tests\n const bcr = el.getBoundingClientRect()\n return !!(bcr && bcr.height > 0 && bcr.width > 0)\n}\n\nexport const getTransitionDelay = (element: Readonly<HTMLElement>) => {\n const style = window.getComputedStyle(element)\n // if multiple durations are defined, we take the first\n const transitionDelay = style.transitionDelay.split(',')[0] || ''\n const transitionDuration = style.transitionDuration.split(',')[0] || ''\n const transitionDelayMs = Number(transitionDelay.slice(0, -1)) * 1000\n const transitionDurationMs = Number(transitionDuration.slice(0, -1)) * 1000\n return transitionDelayMs + transitionDurationMs\n}\n","/**\n * @deprecated remove with parseEventOptions\n */\nexport const IS_BROWSER =\n typeof window !== 'undefined' &&\n typeof document !== 'undefined' &&\n typeof navigator !== 'undefined'\n\n// Normalize event options based on support of passive option\n// Exported only for testing purposes\n/**\n * @deprecated\n */\nexport const parseEventOptions = (\n options: boolean | Readonly<EventListenerOptions> | undefined\n): boolean | EventListenerOptions | undefined => {\n const HAS_PASSIVE_EVENT_SUPPORT = (() => {\n let passiveEventSupported = false\n if (IS_BROWSER) {\n try {\n const options = {\n // This function will be called when the browser\n // attempts to access the passive property\n get passive() {\n passiveEventSupported = true\n // eslint-disable-next-line no-useless-return\n return\n },\n }\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n WINDOW.addEventListener('test', options, options)\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n WINDOW.removeEventListener('test', options, options)\n } catch {\n passiveEventSupported = false\n }\n }\n return passiveEventSupported\n })()\n\n if (HAS_PASSIVE_EVENT_SUPPORT) {\n return typeof options === 'object' ? options : {capture: !!options || false}\n }\n // Need to translate to actual Boolean value\n return typeof options === 'object' ? options.capture : options\n}\n\n// Attach an event listener to an element\n/**\n * @deprecated\n */\nexport const eventOn = (\n el: Readonly<Element>,\n eventName: string,\n handler: EventListener,\n options: boolean | Readonly<EventListenerOptions> | undefined\n) => {\n if (el && el.addEventListener) {\n el.addEventListener(eventName, handler, parseEventOptions(options))\n }\n}\n\n// Remove an event listener from an element\n/**\n * @deprecated\n */\nexport const eventOff = (\n el: Readonly<Element>,\n eventName: string,\n handler: EventListener,\n options: boolean | Readonly<EventListenerOptions> | undefined\n) => {\n if (el && el.removeEventListener) {\n el.removeEventListener(eventName, handler, options)\n }\n}\n\n// Utility method to add/remove a event listener based on first argument (boolean)\n// It passes all other arguments to the `eventOn()` or `eventOff` method\n/**\n * @deprecated\n */\nexport const eventOnOff = (on: boolean, eventParams: Parameters<typeof eventOff>) => {\n const method = on ? eventOn : eventOff\n method(...eventParams)\n}\n","const TABLE_TAG_NAMES = ['TD', 'TH', 'TR']\n\n// Filter CSS selector for click/dblclick/etc. events\n// If any of these selectors match the clicked element, we ignore the event\nconst eventFilter = [\n 'a',\n 'a *', // Include content inside links\n 'button',\n 'button *', // Include content inside buttons\n 'input:not(.disabled):not([disabled])',\n 'select:not(.disabled):not([disabled])',\n 'textarea:not(.disabled):not([disabled])',\n '[role=\"link\"]',\n '[role=\"link\"] *',\n '[role=\"button\"]',\n '[role=\"button\"] *',\n '[tabindex]:not(.disabled):not([disabled])',\n].join(',')\n\n// Returns `true` if we should ignore the click/double-click/keypress event\n// Avoids having the user need to use `@click.stop` on the form control\nexport default (event: Readonly<Event>) => {\n // Exit early when we don't have a target element\n if (!event || !event.target) {\n return false\n }\n const el = event.target as HTMLElement\n // Exit early when element is disabled or a table element\n if (('disabled' in el && el.disabled) || TABLE_TAG_NAMES.indexOf(el.tagName) !== -1) {\n return false\n }\n // Ignore the click when it was inside a dropdown menu\n if (el.closest('.dropdown-menu')) return true\n\n const label = el.tagName === 'LABEL' ? el : el.closest('label')\n // If the label's form control is not disabled then we don't propagate event\n // Modern browsers have `label.control` that references the associated input, but IE 11\n // does not have this property on the label element, so we resort to DOM lookups\n if (label) {\n const labelFor = label.getAttribute('for')\n const input = labelFor\n ? document.getElementById(labelFor)\n : label.querySelector('input, select, textarea')\n if (input && !(input as HTMLInputElement).disabled) {\n return true\n }\n }\n // Otherwise check if the event target matches one of the selectors in the\n // event filter (i.e. anchors, non disabled inputs, etc.)\n // Return `true` if we should ignore the event\n return el.matches(eventFilter)\n}\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n x: v,\n y: v\n});\nconst oppositeSideMap = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nconst oppositeAlignmentMap = {\n start: 'end',\n end: 'start'\n};\nfunction clamp(start, value, end) {\n return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n return ['top', 'bottom'].includes(getSide(placement)) ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n if (rtl === void 0) {\n rtl = false;\n }\n const alignment = getAlignment(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const length = getAxisLength(alignmentAxis);\n let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n if (rects.reference[length] > rects.floating[length]) {\n mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n }\n return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n const oppositePlacement = getOppositePlacement(placement);\n return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\nfunction getSideList(side, isStart, rtl) {\n const lr = ['left', 'right'];\n const rl = ['right', 'left'];\n const tb = ['top', 'bottom'];\n const bt = ['bottom', 'top'];\n switch (side) {\n case 'top':\n case 'bottom':\n if (rtl) return isStart ? rl : lr;\n return isStart ? lr : rl;\n case 'left':\n case 'right':\n return isStart ? tb : bt;\n default:\n return [];\n }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n const alignment = getAlignment(placement);\n let list = getSideList(getSide(placement), direction === 'start', rtl);\n if (alignment) {\n list = list.map(side => side + \"-\" + alignment);\n if (flipAlignment) {\n list = list.concat(list.map(getOppositeAlignmentPlacement));\n }\n }\n return list;\n}\nfunction getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\nfunction expandPaddingObject(padding) {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...padding\n };\n}\nfunction getPaddingObject(padding) {\n return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n };\n}\nfunction rectToClientRect(rect) {\n return {\n ...rect,\n top: rect.y,\n left: rect.x,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n let {\n reference,\n floating\n } = _ref;\n const sideAxis = getSideAxis(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const alignLength = getAxisLength(alignmentAxis);\n const side = getSide(placement);\n const isVertical = sideAxis === 'y';\n const commonX = reference.x + reference.width / 2 - floating.width / 2;\n const commonY = reference.y + reference.height / 2 - floating.height / 2;\n const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n let coords;\n switch (side) {\n case 'top':\n coords = {\n x: commonX,\n y: reference.y - floating.height\n };\n break;\n case 'bottom':\n coords = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n case 'right':\n coords = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n case 'left':\n coords = {\n x: reference.x - floating.width,\n y: commonY\n };\n break;\n default:\n coords = {\n x: reference.x,\n y: reference.y\n };\n }\n switch (getAlignment(placement)) {\n case 'start':\n coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n case 'end':\n coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n }\n return coords;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform\n } = config;\n const validMiddleware = middleware.filter(Boolean);\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n let rects = await platform.getElementRects({\n reference,\n floating,\n strategy\n });\n let {\n x,\n y\n } = computeCoordsFromPlacement(rects, placement, rtl);\n let statefulPlacement = placement;\n let middlewareData = {};\n let resetCount = 0;\n for (let i = 0; i < validMiddleware.length; i++) {\n const {\n name,\n fn\n } = validMiddleware[i];\n const {\n x: nextX,\n y: nextY,\n data,\n reset\n } = await fn({\n x,\n y,\n initialPlacement: placement,\n placement: statefulPlacement,\n strategy,\n middlewareData,\n rects,\n platform,\n elements: {\n reference,\n floating\n }\n });\n x = nextX != null ? nextX : x;\n y = nextY != null ? nextY : y;\n middlewareData = {\n ...middlewareData,\n [name]: {\n ...middlewareData[name],\n ...data\n }\n };\n if (reset && resetCount <= 50) {\n resetCount++;\n if (typeof reset === 'object') {\n if (reset.placement) {\n statefulPlacement = reset.placement;\n }\n if (reset.rects) {\n rects = reset.rects === true ? await platform.getElementRects({\n reference,\n floating,\n strategy\n }) : reset.rects;\n }\n ({\n x,\n y\n } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n }\n i = -1;\n }\n }\n return {\n x,\n y,\n placement: statefulPlacement,\n strategy,\n middlewareData\n };\n};\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n var _await$platform$isEle;\n if (options === void 0) {\n options = {};\n }\n const {\n x,\n y,\n platform,\n rects,\n elements,\n strategy\n } = state;\n const {\n boundary = 'clippingAncestors',\n rootBoundary = 'viewport',\n elementContext = 'floating',\n altBoundary = false,\n padding = 0\n } = evaluate(options, state);\n const paddingObject = getPaddingObject(padding);\n const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n const element = elements[altBoundary ? altContext : elementContext];\n const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n boundary,\n rootBoundary,\n strategy\n }));\n const rect = elementContext === 'floating' ? {\n x,\n y,\n width: rects.floating.width,\n height: rects.floating.height\n } : rects.reference;\n const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n x: 1,\n y: 1\n } : {\n x: 1,\n y: 1\n };\n const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n elements,\n rect,\n offsetParent,\n strategy\n }) : rect);\n return {\n top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n };\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n name: 'arrow',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n platform,\n elements,\n middlewareData\n } = state;\n // Since `element` is required, we don't Partial<> the type.\n const {\n element,\n padding = 0\n } = evaluate(options, state) || {};\n if (element == null) {\n return {};\n }\n const paddingObject = getPaddingObject(padding);\n const coords = {\n x,\n y\n };\n const axis = getAlignmentAxis(placement);\n const length = getAxisLength(axis);\n const arrowDimensions = await platform.getDimensions(element);\n const isYAxis = axis === 'y';\n const minProp = isYAxis ? 'top' : 'left';\n const maxProp = isYAxis ? 'bottom' : 'right';\n const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n const startDiff = coords[axis] - rects.reference[axis];\n const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n // DOM platform can return `window` as the `offsetParent`.\n if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n clientSize = elements.floating[clientProp] || rects.floating[length];\n }\n const centerToReference = endDiff / 2 - startDiff / 2;\n\n // If the padding is large enough that it causes the arrow to no longer be\n // centered, modify the padding so that it is centered.\n const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n // Make sure the arrow doesn't overflow the floating element if the center\n // point is outside the floating element's bounds.\n const min$1 = minPadding;\n const max = clientSize - arrowDimensions[length] - maxPadding;\n const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n const offset = clamp(min$1, center, max);\n\n // If the reference is small enough that the arrow's padding causes it to\n // to point to nothing for an aligned placement, adjust the offset of the\n // floating element itself. To ensure `shift()` continues to take action,\n // a single reset is performed when this is true.\n const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n return {\n [axis]: coords[axis] + alignmentOffset,\n data: {\n [axis]: offset,\n centerOffset: center - offset - alignmentOffset,\n ...(shouldAddOffset && {\n alignmentOffset\n })\n },\n reset: shouldAddOffset\n };\n }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n return allowedPlacementsSortedByAlignment.filter(placement => {\n if (alignment) {\n return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n }\n return true;\n });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'autoPlacement',\n options,\n async fn(state) {\n var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n const {\n rects,\n middlewareData,\n placement,\n platform,\n elements\n } = state;\n const {\n crossAxis = false,\n alignment,\n allowedPlacements = placements,\n autoAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n const currentPlacement = placements$1[currentIndex];\n if (currentPlacement == null) {\n return {};\n }\n const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n // Make `computeCoords` start from the right place.\n if (placement !== currentPlacement) {\n return {\n reset: {\n placement: placements$1[0]\n }\n };\n }\n const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n placement: currentPlacement,\n overflows: currentOverflows\n }];\n const nextPlacement = placements$1[currentIndex + 1];\n\n // There are more placements to check.\n if (nextPlacement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n const placementsSortedByMostSpace = allOverflows.map(d => {\n const alignment = getAlignment(d.placement);\n return [d.placement, alignment && crossAxis ?\n // Check along the mainAxis and main crossAxis side.\n d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n // Check only the mainAxis.\n d.overflows[0], d.overflows];\n }).sort((a, b) => a[1] - b[1]);\n const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n // Aligned placements should not check their opposite crossAxis\n // side.\n getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n if (resetPlacement !== placement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: resetPlacement\n }\n };\n }\n return {};\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'flip',\n options,\n async fn(state) {\n var _middlewareData$arrow, _middlewareData$flip;\n const {\n placement,\n middlewareData,\n rects,\n initialPlacement,\n platform,\n elements\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true,\n fallbackPlacements: specifiedFallbackPlacements,\n fallbackStrategy = 'bestFit',\n fallbackAxisSideDirection = 'none',\n flipAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n\n // If a reset by the arrow was caused due to an alignment offset being\n // added, we should skip any logic now since `flip()` has already done its\n // work.\n // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n const side = getSide(placement);\n const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n if (!specifiedFallbackPlacements && fallbackAxisSideDirection !== 'none') {\n fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n }\n const placements = [initialPlacement, ...fallbackPlacements];\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const overflows = [];\n let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n if (checkMainAxis) {\n overflows.push(overflow[side]);\n }\n if (checkCrossAxis) {\n const sides = getAlignmentSides(placement, rects, rtl);\n overflows.push(overflow[sides[0]], overflow[sides[1]]);\n }\n overflowsData = [...overflowsData, {\n placement,\n overflows\n }];\n\n // One or more sides is overflowing.\n if (!overflows.every(side => side <= 0)) {\n var _middlewareData$flip2, _overflowsData$filter;\n const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n const nextPlacement = placements[nextIndex];\n if (nextPlacement) {\n // Try next placement and re-run the lifecycle.\n return {\n data: {\n index: nextIndex,\n overflows: overflowsData\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n\n // First, find the candidates that fit on the mainAxis side of overflow,\n // then find the placement that fits the best on the main crossAxis side.\n let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n // Otherwise fallback.\n if (!resetPlacement) {\n switch (fallbackStrategy) {\n case 'bestFit':\n {\n var _overflowsData$map$so;\n const placement = (_overflowsData$map$so = overflowsData.map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$map$so[0];\n if (placement) {\n resetPlacement = placement;\n }\n break;\n }\n case 'initialPlacement':\n resetPlacement = initialPlacement;\n break;\n }\n }\n if (placement !== resetPlacement) {\n return {\n reset: {\n placement: resetPlacement\n }\n };\n }\n }\n return {};\n }\n };\n};\n\nfunction getSideOffsets(overflow, rect) {\n return {\n top: overflow.top - rect.height,\n right: overflow.right - rect.width,\n bottom: overflow.bottom - rect.height,\n left: overflow.left - rect.width\n };\n}\nfunction isAnySideFullyClipped(overflow) {\n return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'hide',\n options,\n async fn(state) {\n const {\n rects\n } = state;\n const {\n strategy = 'referenceHidden',\n ...detectOverflowOptions\n } = evaluate(options, state);\n switch (strategy) {\n case 'referenceHidden':\n {\n const overflow = await detectOverflow(state, {\n ...detectOverflowOptions,\n elementContext: 'reference'\n });\n const offsets = getSideOffsets(overflow, rects.reference);\n return {\n data: {\n referenceHiddenOffsets: offsets,\n referenceHidden: isAnySideFullyClipped(offsets)\n }\n };\n }\n case 'escaped':\n {\n const overflow = await detectOverflow(state, {\n ...detectOverflowOptions,\n altBoundary: true\n });\n const offsets = getSideOffsets(overflow, rects.floating);\n return {\n data: {\n escapedOffsets: offsets,\n escaped: isAnySideFullyClipped(offsets)\n }\n };\n }\n default:\n {\n return {};\n }\n }\n }\n };\n};\n\nfunction getBoundingRect(rects) {\n const minX = min(...rects.map(rect => rect.left));\n const minY = min(...rects.map(rect => rect.top));\n const maxX = max(...rects.map(rect => rect.right));\n const maxY = max(...rects.map(rect => rect.bottom));\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n}\nfunction getRectsByLine(rects) {\n const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n const groups = [];\n let prevRect = null;\n for (let i = 0; i < sortedRects.length; i++) {\n const rect = sortedRects[i];\n if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n groups.push([rect]);\n } else {\n groups[groups.length - 1].push(rect);\n }\n prevRect = rect;\n }\n return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'inline',\n options,\n async fn(state) {\n const {\n placement,\n elements,\n rects,\n platform,\n strategy\n } = state;\n // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n // ClientRect's bounds, despite the event listener being triggered. A\n // padding of 2 seems to handle this issue.\n const {\n padding = 2,\n x,\n y\n } = evaluate(options, state);\n const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n const clientRects = getRectsByLine(nativeClientRects);\n const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n const paddingObject = getPaddingObject(padding);\n function getBoundingClientRect() {\n // There are two rects and they are disjoined.\n if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n // Find the first rect in which the point is fully inside.\n return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n }\n\n // There are 2 or more connected rects.\n if (clientRects.length >= 2) {\n if (getSideAxis(placement) === 'y') {\n const firstRect = clientRects[0];\n const lastRect = clientRects[clientRects.length - 1];\n const isTop = getSide(placement) === 'top';\n const top = firstRect.top;\n const bottom = lastRect.bottom;\n const left = isTop ? firstRect.left : lastRect.left;\n const right = isTop ? firstRect.right : lastRect.right;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n const isLeftSide = getSide(placement) === 'left';\n const maxRight = max(...clientRects.map(rect => rect.right));\n const minLeft = min(...clientRects.map(rect => rect.left));\n const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n const top = measureRects[0].top;\n const bottom = measureRects[measureRects.length - 1].bottom;\n const left = minLeft;\n const right = maxRight;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n return fallback;\n }\n const resetRects = await platform.getElementRects({\n reference: {\n getBoundingClientRect\n },\n floating: elements.floating,\n strategy\n });\n if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n return {\n reset: {\n rects: resetRects\n }\n };\n }\n return {};\n }\n };\n};\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n const {\n placement,\n platform,\n elements\n } = state;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isVertical = getSideAxis(placement) === 'y';\n const mainAxisMulti = ['left', 'top'].includes(side) ? -1 : 1;\n const crossAxisMulti = rtl && isVertical ? -1 : 1;\n const rawValue = evaluate(options, state);\n\n // eslint-disable-next-line prefer-const\n let {\n mainAxis,\n crossAxis,\n alignmentAxis\n } = typeof rawValue === 'number' ? {\n mainAxis: rawValue,\n crossAxis: 0,\n alignmentAxis: null\n } : {\n mainAxis: 0,\n crossAxis: 0,\n alignmentAxis: null,\n ...rawValue\n };\n if (alignment && typeof alignmentAxis === 'number') {\n crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n }\n return isVertical ? {\n x: crossAxis * crossAxisMulti,\n y: mainAxis * mainAxisMulti\n } : {\n x: mainAxis * mainAxisMulti,\n y: crossAxis * crossAxisMulti\n };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n if (options === void 0) {\n options = 0;\n }\n return {\n name: 'offset',\n options,\n async fn(state) {\n var _middlewareData$offse, _middlewareData$arrow;\n const {\n x,\n y,\n placement,\n middlewareData\n } = state;\n const diffCoords = await convertValueToCoords(state, options);\n\n // If the placement is the same and the arrow caused an alignment offset\n // then we don't need to change the positioning coordinates.\n if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n return {\n x: x + diffCoords.x,\n y: y + diffCoords.y,\n data: {\n ...diffCoords,\n placement\n }\n };\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'shift',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = false,\n limiter = {\n fn: _ref => {\n let {\n x,\n y\n } = _ref;\n return {\n x,\n y\n };\n }\n },\n ...detectOverflowOptions\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const crossAxis = getSideAxis(getSide(placement));\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n if (checkMainAxis) {\n const minSide = mainAxis === 'y' ? 'top' : 'left';\n const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n const min = mainAxisCoord + overflow[minSide];\n const max = mainAxisCoord - overflow[maxSide];\n mainAxisCoord = clamp(min, mainAxisCoord, max);\n }\n if (checkCrossAxis) {\n const minSide = crossAxis === 'y' ? 'top' : 'left';\n const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n const min = crossAxisCoord + overflow[minSide];\n const max = crossAxisCoord - overflow[maxSide];\n crossAxisCoord = clamp(min, crossAxisCoord, max);\n }\n const limitedCoords = limiter.fn({\n ...state,\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n });\n return {\n ...limitedCoords,\n data: {\n x: limitedCoords.x - x,\n y: limitedCoords.y - y\n }\n };\n }\n };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n options,\n fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n middlewareData\n } = state;\n const {\n offset = 0,\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const crossAxis = getSideAxis(placement);\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n const rawOffset = evaluate(offset, state);\n const computedOffset = typeof rawOffset === 'number' ? {\n mainAxis: rawOffset,\n crossAxis: 0\n } : {\n mainAxis: 0,\n crossAxis: 0,\n ...rawOffset\n };\n if (checkMainAxis) {\n const len = mainAxis === 'y' ? 'height' : 'width';\n const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n if (mainAxisCoord < limitMin) {\n mainAxisCoord = limitMin;\n } else if (mainAxisCoord > limitMax) {\n mainAxisCoord = limitMax;\n }\n }\n if (checkCrossAxis) {\n var _middlewareData$offse, _middlewareData$offse2;\n const len = mainAxis === 'y' ? 'width' : 'height';\n const isOriginSide = ['top', 'left'].includes(getSide(placement));\n const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n if (crossAxisCoord < limitMin) {\n crossAxisCoord = limitMin;\n } else if (crossAxisCoord > limitMax) {\n crossAxisCoord = limitMax;\n }\n }\n return {\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n };\n }\n };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'size',\n options,\n async fn(state) {\n const {\n placement,\n rects,\n platform,\n elements\n } = state;\n const {\n apply = () => {},\n ...detectOverflowOptions\n } = evaluate(options, state);\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isYAxis = getSideAxis(placement) === 'y';\n const {\n width,\n height\n } = rects.floating;\n let heightSide;\n let widthSide;\n if (side === 'top' || side === 'bottom') {\n heightSide = side;\n widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n } else {\n widthSide = side;\n heightSide = alignment === 'end' ? 'top' : 'bottom';\n }\n const maximumClippingHeight = height - overflow.top - overflow.bottom;\n const maximumClippingWidth = width - overflow.left - overflow.right;\n const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n const noShift = !state.middlewareData.shift;\n let availableHeight = overflowAvailableHeight;\n let availableWidth = overflowAvailableWidth;\n if (isYAxis) {\n availableWidth = alignment || noShift ? min(overflowAvailableWidth, maximumClippingWidth) : maximumClippingWidth;\n } else {\n availableHeight = alignment || noShift ? min(overflowAvailableHeight, maximumClippingHeight) : maximumClippingHeight;\n }\n if (noShift && !alignment) {\n const xMin = max(overflow.left, 0);\n const xMax = max(overflow.right, 0);\n const yMin = max(overflow.top, 0);\n const yMax = max(overflow.bottom, 0);\n if (isYAxis) {\n availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n } else {\n availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n }\n }\n await apply({\n ...state,\n availableWidth,\n availableHeight\n });\n const nextDimensions = await platform.getDimensions(elements.floating);\n if (width !== nextDimensions.width || height !== nextDimensions.height) {\n return {\n reset: {\n rects: true\n }\n };\n }\n return {};\n }\n };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","import{rectToClientRect as t,computePosition as e}from\"@floating-ui/core\";export{arrow,autoPlacement,detectOverflow,flip,hide,inline,limitShift,offset,shift,size}from\"@floating-ui/core\";function n(t){var e;return(null==(e=t.ownerDocument)?void 0:e.defaultView)||window}function o(t){return n(t).getComputedStyle(t)}const i=Math.min,r=Math.max,l=Math.round;function c(t){const e=o(t);let n=parseFloat(e.width),i=parseFloat(e.height);const r=t.offsetWidth,c=t.offsetHeight,s=l(n)!==r||l(i)!==c;return s&&(n=r,i=c),{width:n,height:i,fallback:s}}function s(t){return h(t)?(t.nodeName||\"\").toLowerCase():\"\"}let f;function u(){if(f)return f;const t=navigator.userAgentData;return t&&Array.isArray(t.brands)?(f=t.brands.map((t=>t.brand+\"/\"+t.version)).join(\" \"),f):navigator.userAgent}function a(t){return t instanceof n(t).HTMLElement}function d(t){return t instanceof n(t).Element}function h(t){return t instanceof n(t).Node}function p(t){if(\"undefined\"==typeof ShadowRoot)return!1;return t instanceof n(t).ShadowRoot||t instanceof ShadowRoot}function g(t){const{overflow:e,overflowX:n,overflowY:i,display:r}=o(t);return/auto|scroll|overlay|hidden|clip/.test(e+i+n)&&![\"inline\",\"contents\"].includes(r)}function m(t){return[\"table\",\"td\",\"th\"].includes(s(t))}function y(t){const e=/firefox/i.test(u()),n=o(t),i=n.backdropFilter||n.WebkitBackdropFilter;return\"none\"!==n.transform||\"none\"!==n.perspective||!!i&&\"none\"!==i||e&&\"filter\"===n.willChange||e&&!!n.filter&&\"none\"!==n.filter||[\"transform\",\"perspective\"].some((t=>n.willChange.includes(t)))||[\"paint\",\"layout\",\"strict\",\"content\"].some((t=>{const e=n.contain;return null!=e&&e.includes(t)}))}function x(){return!/^((?!chrome|android).)*safari/i.test(u())}function w(t){return[\"html\",\"body\",\"#document\"].includes(s(t))}function v(t){return d(t)?t:t.contextElement}const b={x:1,y:1};function L(t){const e=v(t);if(!a(e))return b;const n=e.getBoundingClientRect(),{width:o,height:i,fallback:r}=c(e);let s=(r?l(n.width):n.width)/o,f=(r?l(n.height):n.height)/i;return s&&Number.isFinite(s)||(s=1),f&&Number.isFinite(f)||(f=1),{x:s,y:f}}function E(t,e,o,i){var r,l;void 0===e&&(e=!1),void 0===o&&(o=!1);const c=t.getBoundingClientRect(),s=v(t);let f=b;e&&(i?d(i)&&(f=L(i)):f=L(t));const u=s?n(s):window,a=!x()&&o;let h=(c.left+(a&&(null==(r=u.visualViewport)?void 0:r.offsetLeft)||0))/f.x,p=(c.top+(a&&(null==(l=u.visualViewport)?void 0:l.offsetTop)||0))/f.y,g=c.width/f.x,m=c.height/f.y;if(s){const t=n(s),e=i&&d(i)?n(i):i;let o=t.frameElement;for(;o&&i&&e!==t;){const t=L(o),e=o.getBoundingClientRect(),i=getComputedStyle(o);e.x+=(o.clientLeft+parseFloat(i.paddingLeft))*t.x,e.y+=(o.clientTop+parseFloat(i.paddingTop))*t.y,h*=t.x,p*=t.y,g*=t.x,m*=t.y,h+=e.x,p+=e.y,o=n(o).frameElement}}return{width:g,height:m,top:p,right:h+g,bottom:p+m,left:h,x:h,y:p}}function R(t){return((h(t)?t.ownerDocument:t.document)||window.document).documentElement}function T(t){return d(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function C(t){return E(R(t)).left+T(t).scrollLeft}function F(t){if(\"html\"===s(t))return t;const e=t.assignedSlot||t.parentNode||p(t)&&t.host||R(t);return p(e)?e.host:e}function W(t){const e=F(t);return w(e)?e.ownerDocument.body:a(e)&&g(e)?e:W(e)}function D(t,e){var o;void 0===e&&(e=[]);const i=W(t),r=i===(null==(o=t.ownerDocument)?void 0:o.body),l=n(i);return r?e.concat(l,l.visualViewport||[],g(i)?i:[]):e.concat(i,D(i))}function S(e,i,l){return\"viewport\"===i?t(function(t,e){const o=n(t),i=R(t),r=o.visualViewport;let l=i.clientWidth,c=i.clientHeight,s=0,f=0;if(r){l=r.width,c=r.height;const t=x();(t||!t&&\"fixed\"===e)&&(s=r.offsetLeft,f=r.offsetTop)}return{width:l,height:c,x:s,y:f}}(e,l)):d(i)?t(function(t,e){const n=E(t,!0,\"fixed\"===e),o=n.top+t.clientTop,i=n.left+t.clientLeft,r=a(t)?L(t):{x:1,y:1};return{width:t.clientWidth*r.x,height:t.clientHeight*r.y,x:i*r.x,y:o*r.y}}(i,l)):t(function(t){const e=R(t),n=T(t),i=t.ownerDocument.body,l=r(e.scrollWidth,e.clientWidth,i.scrollWidth,i.clientWidth),c=r(e.scrollHeight,e.clientHeight,i.scrollHeight,i.clientHeight);let s=-n.scrollLeft+C(t);const f=-n.scrollTop;return\"rtl\"===o(i).direction&&(s+=r(e.clientWidth,i.clientWidth)-l),{width:l,height:c,x:s,y:f}}(R(e)))}function A(t){return a(t)&&\"fixed\"!==o(t).position?t.offsetParent:null}function H(t){const e=n(t);let i=A(t);for(;i&&m(i)&&\"static\"===o(i).position;)i=A(i);return i&&(\"html\"===s(i)||\"body\"===s(i)&&\"static\"===o(i).position&&!y(i))?e:i||function(t){let e=F(t);for(;a(e)&&!w(e);){if(y(e))return e;e=F(e)}return null}(t)||e}function O(t,e,n){const o=a(e),i=R(e),r=E(t,!0,\"fixed\"===n,e);let l={scrollLeft:0,scrollTop:0};const c={x:0,y:0};if(o||!o&&\"fixed\"!==n)if((\"body\"!==s(e)||g(i))&&(l=T(e)),a(e)){const t=E(e,!0);c.x=t.x+e.clientLeft,c.y=t.y+e.clientTop}else i&&(c.x=C(i));return{x:r.left+l.scrollLeft-c.x,y:r.top+l.scrollTop-c.y,width:r.width,height:r.height}}const P={getClippingRect:function(t){let{element:e,boundary:n,rootBoundary:l,strategy:c}=t;const f=\"clippingAncestors\"===n?function(t,e){const n=e.get(t);if(n)return n;let i=D(t).filter((t=>d(t)&&\"body\"!==s(t))),r=null;const l=\"fixed\"===o(t).position;let c=l?F(t):t;for(;d(c)&&!w(c);){const t=o(c),e=y(c);(l?e||r:e||\"static\"!==t.position||!r||![\"absolute\",\"fixed\"].includes(r.position))?r=t:i=i.filter((t=>t!==c)),c=F(c)}return e.set(t,i),i}(e,this._c):[].concat(n),u=[...f,l],a=u[0],h=u.reduce(((t,n)=>{const o=S(e,n,c);return t.top=r(o.top,t.top),t.right=i(o.right,t.right),t.bottom=i(o.bottom,t.bottom),t.left=r(o.left,t.left),t}),S(e,a,c));return{width:h.right-h.left,height:h.bottom-h.top,x:h.left,y:h.top}},convertOffsetParentRelativeRectToViewportRelativeRect:function(t){let{rect:e,offsetParent:n,strategy:o}=t;const i=a(n),r=R(n);if(n===r)return e;let l={scrollLeft:0,scrollTop:0},c={x:1,y:1};const f={x:0,y:0};if((i||!i&&\"fixed\"!==o)&&((\"body\"!==s(n)||g(r))&&(l=T(n)),a(n))){const t=E(n);c=L(n),f.x=t.x+n.clientLeft,f.y=t.y+n.clientTop}return{width:e.width*c.x,height:e.height*c.y,x:e.x*c.x-l.scrollLeft*c.x+f.x,y:e.y*c.y-l.scrollTop*c.y+f.y}},isElement:d,getDimensions:function(t){return a(t)?c(t):t.getBoundingClientRect()},getOffsetParent:H,getDocumentElement:R,getScale:L,async getElementRects(t){let{reference:e,floating:n,strategy:o}=t;const i=this.getOffsetParent||H,r=this.getDimensions;return{reference:O(e,await i(n),o),floating:{x:0,y:0,...await r(n)}}},getClientRects:t=>Array.from(t.getClientRects()),isRTL:t=>\"rtl\"===o(t).direction};function z(t,e,n,o){void 0===o&&(o={});const{ancestorScroll:i=!0,ancestorResize:r=!0,elementResize:l=!0,animationFrame:c=!1}=o,s=i&&!c,f=s||r?[...d(t)?D(t):t.contextElement?D(t.contextElement):[],...D(e)]:[];f.forEach((t=>{s&&t.addEventListener(\"scroll\",n,{passive:!0}),r&&t.addEventListener(\"resize\",n)}));let u,a=null;if(l){let o=!0;a=new ResizeObserver((()=>{o||n(),o=!1})),d(t)&&!c&&a.observe(t),d(t)||!t.contextElement||c||a.observe(t.contextElement),a.observe(e)}let h=c?E(t):null;return c&&function e(){const o=E(t);!h||o.x===h.x&&o.y===h.y&&o.width===h.width&&o.height===h.height||n();h=o,u=requestAnimationFrame(e)}(),n(),()=>{var t;f.forEach((t=>{s&&t.removeEventListener(\"scroll\",n),r&&t.removeEventListener(\"resize\",n)})),null==(t=a)||t.disconnect(),a=null,c&&cancelAnimationFrame(u)}}const B=(t,n,o)=>{const i=new Map,r={platform:P,...o},l={...r.platform,_c:i};return e(t,n,{...r,platform:l})};export{z as autoUpdate,B as computePosition,D as getOverflowAncestors,P as platform};\n","function getNodeName(node) {\n if (isNode(node)) {\n return (node.nodeName || '').toLowerCase();\n }\n // Mocked nodes in testing environments may not be instances of Node. By\n // returning `#document` an infinite loop won't occur.\n // https://github.com/floating-ui/floating-ui/issues/2317\n return '#document';\n}\nfunction getWindow(node) {\n var _node$ownerDocument;\n return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n var _ref;\n return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n // Browsers without `ShadowRoot` support.\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n const {\n overflow,\n overflowX,\n overflowY,\n display\n } = getComputedStyle(element);\n return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !['inline', 'contents'].includes(display);\n}\nfunction isTableElement(element) {\n return ['table', 'td', 'th'].includes(getNodeName(element));\n}\nfunction isTopLayer(element) {\n return [':popover-open', ':modal'].some(selector => {\n try {\n return element.matches(selector);\n } catch (e) {\n return false;\n }\n });\n}\nfunction isContainingBlock(elementOrCss) {\n const webkit = isWebKit();\n const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n return css.transform !== 'none' || css.perspective !== 'none' || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || ['transform', 'perspective', 'filter'].some(value => (css.willChange || '').includes(value)) || ['paint', 'layout', 'strict', 'content'].some(value => (css.contain || '').includes(value));\n}\nfunction getContainingBlock(element) {\n let currentNode = getParentNode(element);\n while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n if (isContainingBlock(currentNode)) {\n return currentNode;\n } else if (isTopLayer(currentNode)) {\n return null;\n }\n currentNode = getParentNode(currentNode);\n }\n return null;\n}\nfunction isWebKit() {\n if (typeof CSS === 'undefined' || !CSS.supports) return false;\n return CSS.supports('-webkit-backdrop-filter', 'none');\n}\nfunction isLastTraversableNode(node) {\n return ['html', 'body', '#document'].includes(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n if (isElement(element)) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n }\n return {\n scrollLeft: element.scrollX,\n scrollTop: element.scrollY\n };\n}\nfunction getParentNode(node) {\n if (getNodeName(node) === 'html') {\n return node;\n }\n const result =\n // Step into the shadow DOM of the parent of a slotted node.\n node.assignedSlot ||\n // DOM Element detected.\n node.parentNode ||\n // ShadowRoot detected.\n isShadowRoot(node) && node.host ||\n // Fallback.\n getDocumentElement(node);\n return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n const parentNode = getParentNode(node);\n if (isLastTraversableNode(parentNode)) {\n return node.ownerDocument ? node.ownerDocument.body : node.body;\n }\n if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n return parentNode;\n }\n return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n var _node$ownerDocument2;\n if (list === void 0) {\n list = [];\n }\n if (traverseIframes === void 0) {\n traverseIframes = true;\n }\n const scrollableAncestor = getNearestOverflowAncestor(node);\n const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n const win = getWindow(scrollableAncestor);\n if (isBody) {\n const frameElement = getFrameElement(win);\n return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n }\n return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n}\nfunction getFrameElement(win) {\n return Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n","import { arrow as arrow$1, computePosition } from '@floating-ui/dom';\nexport { autoPlacement, autoUpdate, computePosition, detectOverflow, flip, getOverflowAncestors, hide, inline, limitShift, offset, platform, shift, size } from '@floating-ui/dom';\nimport { isNode, getNodeName } from '@floating-ui/utils/dom';\nimport { unref, computed, ref, shallowRef, watch, getCurrentScope, onScopeDispose, shallowReadonly } from 'vue-demi';\n\nfunction isComponentPublicInstance(target) {\n return target != null && typeof target === 'object' && '$el' in target;\n}\nfunction unwrapElement(target) {\n if (isComponentPublicInstance(target)) {\n const element = target.$el;\n return isNode(element) && getNodeName(element) === '#comment' ? null : element;\n }\n return target;\n}\n\nfunction toValue(source) {\n return typeof source === 'function' ? source() : unref(source);\n}\n\n/**\n * Positions an inner element of the floating element such that it is centered to the reference element.\n * @param options The arrow options.\n * @see https://floating-ui.com/docs/arrow\n */\nfunction arrow(options) {\n return {\n name: 'arrow',\n options,\n fn(args) {\n const element = unwrapElement(toValue(options.element));\n if (element == null) {\n return {};\n }\n return arrow$1({\n element,\n padding: options.padding\n }).fn(args);\n }\n };\n}\n\nfunction getDPR(element) {\n if (typeof window === 'undefined') {\n return 1;\n }\n const win = element.ownerDocument.defaultView || window;\n return win.devicePixelRatio || 1;\n}\n\nfunction roundByDPR(element, value) {\n const dpr = getDPR(element);\n return Math.round(value * dpr) / dpr;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element next to a reference element when it is given a certain CSS positioning strategy.\n * @param reference The reference template ref.\n * @param floating The floating template ref.\n * @param options The floating options.\n * @see https://floating-ui.com/docs/vue\n */\nfunction useFloating(reference, floating, options) {\n if (options === void 0) {\n options = {};\n }\n const whileElementsMountedOption = options.whileElementsMounted;\n const openOption = computed(() => {\n var _toValue;\n return (_toValue = toValue(options.open)) != null ? _toValue : true;\n });\n const middlewareOption = computed(() => toValue(options.middleware));\n const placementOption = computed(() => {\n var _toValue2;\n return (_toValue2 = toValue(options.placement)) != null ? _toValue2 : 'bottom';\n });\n const strategyOption = computed(() => {\n var _toValue3;\n return (_toValue3 = toValue(options.strategy)) != null ? _toValue3 : 'absolute';\n });\n const transformOption = computed(() => {\n var _toValue4;\n return (_toValue4 = toValue(options.transform)) != null ? _toValue4 : true;\n });\n const referenceElement = computed(() => unwrapElement(reference.value));\n const floatingElement = computed(() => unwrapElement(floating.value));\n const x = ref(0);\n const y = ref(0);\n const strategy = ref(strategyOption.value);\n const placement = ref(placementOption.value);\n const middlewareData = shallowRef({});\n const isPositioned = ref(false);\n const floatingStyles = computed(() => {\n const initialStyles = {\n position: strategy.value,\n left: '0',\n top: '0'\n };\n if (!floatingElement.value) {\n return initialStyles;\n }\n const xVal = roundByDPR(floatingElement.value, x.value);\n const yVal = roundByDPR(floatingElement.value, y.value);\n if (transformOption.value) {\n return {\n ...initialStyles,\n transform: \"translate(\" + xVal + \"px, \" + yVal + \"px)\",\n ...(getDPR(floatingElement.value) >= 1.5 && {\n willChange: 'transform'\n })\n };\n }\n return {\n position: strategy.value,\n left: xVal + \"px\",\n top: yVal + \"px\"\n };\n });\n let whileElementsMountedCleanup;\n function update() {\n if (referenceElement.value == null || floatingElement.value == null) {\n return;\n }\n computePosition(referenceElement.value, floatingElement.value, {\n middleware: middlewareOption.value,\n placement: placementOption.value,\n strategy: strategyOption.value\n }).then(position => {\n x.value = position.x;\n y.value = position.y;\n strategy.value = position.strategy;\n placement.value = position.placement;\n middlewareData.value = position.middlewareData;\n isPositioned.value = true;\n });\n }\n function cleanup() {\n if (typeof whileElementsMountedCleanup === 'function') {\n whileElementsMountedCleanup();\n whileElementsMountedCleanup = undefined;\n }\n }\n function attach() {\n cleanup();\n if (whileElementsMountedOption === undefined) {\n update();\n return;\n }\n if (referenceElement.value != null && floatingElement.value != null) {\n whileElementsMountedCleanup = whileElementsMountedOption(referenceElement.value, floatingElement.value, update);\n return;\n }\n }\n function reset() {\n if (!openOption.value) {\n isPositioned.value = false;\n }\n }\n watch([middlewareOption, placementOption, strategyOption], update, {\n flush: 'sync'\n });\n watch([referenceElement, floatingElement], attach, {\n flush: 'sync'\n });\n watch(openOption, reset, {\n flush: 'sync'\n });\n if (getCurrentScope()) {\n onScopeDispose(cleanup);\n }\n return {\n x: shallowReadonly(x),\n y: shallowReadonly(y),\n strategy: shallowReadonly(strategy),\n placement: shallowReadonly(placement),\n middlewareData: shallowReadonly(middlewareData),\n isPositioned: shallowReadonly(isPositioned),\n floatingStyles,\n update\n };\n}\n\nexport { arrow, useFloating };\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttributes = new Set([\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href',\n])\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN =\n /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nconst allowedAttribute = (\n attribute: Readonly<Attr>,\n allowedAttributeList: readonly (string | RegExp)[]\n) => {\n const attributeName = attribute.nodeName.toLowerCase()\n\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(\n SAFE_URL_PATTERN.test(attribute.nodeValue || '') ||\n DATA_URL_PATTERN.test(attribute.nodeValue || '')\n )\n }\n\n return true\n }\n\n // Check if a regular expression validates the attribute.\n return allowedAttributeList\n .filter((attributeRegex): attributeRegex is RegExp => attributeRegex instanceof RegExp)\n .some((regex) => regex.test(attributeName))\n}\n\nexport const DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n 'a': ['target', 'href', 'title', 'rel'],\n 'area': [],\n 'b': [],\n 'br': [],\n 'col': [],\n 'code': [],\n 'div': [],\n 'em': [],\n 'hr': [],\n 'h1': [],\n 'h2': [],\n 'h3': [],\n 'h4': [],\n 'h5': [],\n 'h6': [],\n 'i': [],\n 'img': ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n 'li': [],\n 'ol': [],\n 'p': [],\n 'pre': [],\n 's': [],\n 'small': [],\n 'span': [],\n 'sub': [],\n 'sup': [],\n 'strong': [],\n 'u': [],\n 'ul': [],\n}\n\nexport const sanitizeHtml = (\n unsafeHtml: string,\n allowList: Readonly<Record<string, (string | RegExp)[]>>,\n sanitizeFunction?: (unsafeHtml: string) => string\n) => {\n if (!unsafeHtml.length) {\n return unsafeHtml\n }\n\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const elements: NodeListOf<Element> = createdDocument.body.querySelectorAll('*')\n\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase()\n\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove()\n\n continue\n }\n\n const attributeList = element.attributes\n const allowedAttributes = [...(allowList['*'] || []), ...(allowList[elementName] || [])]\n\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName)\n }\n }\n }\n\n return createdDocument.body.innerHTML\n}\n","import { shallowRef, watchEffect, readonly, ref, watch, customRef, getCurrentScope, onScopeDispose, effectScope, getCurrentInstance, provide, inject, isVue3, version, isRef, unref, computed, reactive, toRefs as toRefs$1, toRef as toRef$1, isVue2, set as set$1, onBeforeMount, nextTick, onBeforeUnmount, onMounted, onUnmounted, isReactive } from 'vue-demi';\n\nfunction computedEager(fn, options) {\n var _a;\n const result = shallowRef();\n watchEffect(() => {\n result.value = fn();\n }, {\n ...options,\n flush: (_a = options == null ? void 0 : options.flush) != null ? _a : \"sync\"\n });\n return readonly(result);\n}\n\nfunction computedWithControl(source, fn) {\n let v = void 0;\n let track;\n let trigger;\n const dirty = ref(true);\n const update = () => {\n dirty.value = true;\n trigger();\n };\n watch(source, update, { flush: \"sync\" });\n const get = typeof fn === \"function\" ? fn : fn.get;\n const set = typeof fn === \"function\" ? void 0 : fn.set;\n const result = customRef((_track, _trigger) => {\n track = _track;\n trigger = _trigger;\n return {\n get() {\n if (dirty.value) {\n v = get();\n dirty.value = false;\n }\n track();\n return v;\n },\n set(v2) {\n set == null ? void 0 : set(v2);\n }\n };\n });\n if (Object.isExtensible(result))\n result.trigger = update;\n return result;\n}\n\nfunction tryOnScopeDispose(fn) {\n if (getCurrentScope()) {\n onScopeDispose(fn);\n return true;\n }\n return false;\n}\n\nfunction createEventHook() {\n const fns = /* @__PURE__ */ new Set();\n const off = (fn) => {\n fns.delete(fn);\n };\n const on = (fn) => {\n fns.add(fn);\n const offFn = () => off(fn);\n tryOnScopeDispose(offFn);\n return {\n off: offFn\n };\n };\n const trigger = (...args) => {\n return Promise.all(Array.from(fns).map((fn) => fn(...args)));\n };\n return {\n on,\n off,\n trigger\n };\n}\n\nfunction createGlobalState(stateFactory) {\n let initialized = false;\n let state;\n const scope = effectScope(true);\n return (...args) => {\n if (!initialized) {\n state = scope.run(() => stateFactory(...args));\n initialized = true;\n }\n return state;\n };\n}\n\nconst localProvidedStateMap = /* @__PURE__ */ new WeakMap();\n\nconst provideLocal = (key, value) => {\n var _a;\n const instance = (_a = getCurrentInstance()) == null ? void 0 : _a.proxy;\n if (instance == null)\n throw new Error(\"provideLocal must be called in setup\");\n if (!localProvidedStateMap.has(instance))\n localProvidedStateMap.set(instance, /* @__PURE__ */ Object.create(null));\n const localProvidedState = localProvidedStateMap.get(instance);\n localProvidedState[key] = value;\n provide(key, value);\n};\n\nconst injectLocal = (...args) => {\n var _a;\n const key = args[0];\n const instance = (_a = getCurrentInstance()) == null ? void 0 : _a.proxy;\n if (instance == null)\n throw new Error(\"injectLocal must be called in setup\");\n if (localProvidedStateMap.has(instance) && key in localProvidedStateMap.get(instance))\n return localProvidedStateMap.get(instance)[key];\n return inject(...args);\n};\n\nfunction createInjectionState(composable, options) {\n const key = (options == null ? void 0 : options.injectionKey) || Symbol(composable.name || \"InjectionState\");\n const defaultValue = options == null ? void 0 : options.defaultValue;\n const useProvidingState = (...args) => {\n const state = composable(...args);\n provideLocal(key, state);\n return state;\n };\n const useInjectedState = () => injectLocal(key, defaultValue);\n return [useProvidingState, useInjectedState];\n}\n\nfunction createSharedComposable(composable) {\n let subscribers = 0;\n let state;\n let scope;\n const dispose = () => {\n subscribers -= 1;\n if (scope && subscribers <= 0) {\n scope.stop();\n state = void 0;\n scope = void 0;\n }\n };\n return (...args) => {\n subscribers += 1;\n if (!state) {\n scope = effectScope(true);\n state = scope.run(() => composable(...args));\n }\n tryOnScopeDispose(dispose);\n return state;\n };\n}\n\nfunction extendRef(ref, extend, { enumerable = false, unwrap = true } = {}) {\n if (!isVue3 && !version.startsWith(\"2.7.\")) {\n if (process.env.NODE_ENV !== \"production\")\n throw new Error(\"[VueUse] extendRef only works in Vue 2.7 or above.\");\n return;\n }\n for (const [key, value] of Object.entries(extend)) {\n if (key === \"value\")\n continue;\n if (isRef(value) && unwrap) {\n Object.defineProperty(ref, key, {\n get() {\n return value.value;\n },\n set(v) {\n value.value = v;\n },\n enumerable\n });\n } else {\n Object.defineProperty(ref, key, { value, enumerable });\n }\n }\n return ref;\n}\n\nfunction get(obj, key) {\n if (key == null)\n return unref(obj);\n return unref(obj)[key];\n}\n\nfunction isDefined(v) {\n return unref(v) != null;\n}\n\nfunction makeDestructurable(obj, arr) {\n if (typeof Symbol !== \"undefined\") {\n const clone = { ...obj };\n Object.defineProperty(clone, Symbol.iterator, {\n enumerable: false,\n value() {\n let index = 0;\n return {\n next: () => ({\n value: arr[index++],\n done: index > arr.length\n })\n };\n }\n });\n return clone;\n } else {\n return Object.assign([...arr], obj);\n }\n}\n\nfunction toValue(r) {\n return typeof r === \"function\" ? r() : unref(r);\n}\nconst resolveUnref = toValue;\n\nfunction reactify(fn, options) {\n const unrefFn = (options == null ? void 0 : options.computedGetter) === false ? unref : toValue;\n return function(...args) {\n return computed(() => fn.apply(this, args.map((i) => unrefFn(i))));\n };\n}\n\nfunction reactifyObject(obj, optionsOrKeys = {}) {\n let keys = [];\n let options;\n if (Array.isArray(optionsOrKeys)) {\n keys = optionsOrKeys;\n } else {\n options = optionsOrKeys;\n const { includeOwnProperties = true } = optionsOrKeys;\n keys.push(...Object.keys(obj));\n if (includeOwnProperties)\n keys.push(...Object.getOwnPropertyNames(obj));\n }\n return Object.fromEntries(\n keys.map((key) => {\n const value = obj[key];\n return [\n key,\n typeof value === \"function\" ? reactify(value.bind(obj), options) : value\n ];\n })\n );\n}\n\nfunction toReactive(objectRef) {\n if (!isRef(objectRef))\n return reactive(objectRef);\n const proxy = new Proxy({}, {\n get(_, p, receiver) {\n return unref(Reflect.get(objectRef.value, p, receiver));\n },\n set(_, p, value) {\n if (isRef(objectRef.value[p]) && !isRef(value))\n objectRef.value[p].value = value;\n else\n objectRef.value[p] = value;\n return true;\n },\n deleteProperty(_, p) {\n return Reflect.deleteProperty(objectRef.value, p);\n },\n has(_, p) {\n return Reflect.has(objectRef.value, p);\n },\n ownKeys() {\n return Object.keys(objectRef.value);\n },\n getOwnPropertyDescriptor() {\n return {\n enumerable: true,\n configurable: true\n };\n }\n });\n return reactive(proxy);\n}\n\nfunction reactiveComputed(fn) {\n return toReactive(computed(fn));\n}\n\nfunction reactiveOmit(obj, ...keys) {\n const flatKeys = keys.flat();\n const predicate = flatKeys[0];\n return reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => !predicate(toValue(v), k))) : Object.fromEntries(Object.entries(toRefs$1(obj)).filter((e) => !flatKeys.includes(e[0]))));\n}\n\nconst isClient = typeof window !== \"undefined\" && typeof document !== \"undefined\";\nconst isWorker = typeof WorkerGlobalScope !== \"undefined\" && globalThis instanceof WorkerGlobalScope;\nconst isDef = (val) => typeof val !== \"undefined\";\nconst notNullish = (val) => val != null;\nconst assert = (condition, ...infos) => {\n if (!condition)\n console.warn(...infos);\n};\nconst toString = Object.prototype.toString;\nconst isObject = (val) => toString.call(val) === \"[object Object]\";\nconst now = () => Date.now();\nconst timestamp = () => +Date.now();\nconst clamp = (n, min, max) => Math.min(max, Math.max(min, n));\nconst noop = () => {\n};\nconst rand = (min, max) => {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min + 1)) + min;\n};\nconst hasOwn = (val, key) => Object.prototype.hasOwnProperty.call(val, key);\nconst isIOS = /* @__PURE__ */ getIsIOS();\nfunction getIsIOS() {\n var _a, _b;\n return isClient && ((_a = window == null ? void 0 : window.navigator) == null ? void 0 : _a.userAgent) && (/iP(?:ad|hone|od)/.test(window.navigator.userAgent) || ((_b = window == null ? void 0 : window.navigator) == null ? void 0 : _b.maxTouchPoints) > 2 && /iPad|Macintosh/.test(window == null ? void 0 : window.navigator.userAgent));\n}\n\nfunction createFilterWrapper(filter, fn) {\n function wrapper(...args) {\n return new Promise((resolve, reject) => {\n Promise.resolve(filter(() => fn.apply(this, args), { fn, thisArg: this, args })).then(resolve).catch(reject);\n });\n }\n return wrapper;\n}\nconst bypassFilter = (invoke) => {\n return invoke();\n};\nfunction debounceFilter(ms, options = {}) {\n let timer;\n let maxTimer;\n let lastRejector = noop;\n const _clearTimeout = (timer2) => {\n clearTimeout(timer2);\n lastRejector();\n lastRejector = noop;\n };\n const filter = (invoke) => {\n const duration = toValue(ms);\n const maxDuration = toValue(options.maxWait);\n if (timer)\n _clearTimeout(timer);\n if (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) {\n if (maxTimer) {\n _clearTimeout(maxTimer);\n maxTimer = null;\n }\n return Promise.resolve(invoke());\n }\n return new Promise((resolve, reject) => {\n lastRejector = options.rejectOnCancel ? reject : resolve;\n if (maxDuration && !maxTimer) {\n maxTimer = setTimeout(() => {\n if (timer)\n _clearTimeout(timer);\n maxTimer = null;\n resolve(invoke());\n }, maxDuration);\n }\n timer = setTimeout(() => {\n if (maxTimer)\n _clearTimeout(maxTimer);\n maxTimer = null;\n resolve(invoke());\n }, duration);\n });\n };\n return filter;\n}\nfunction throttleFilter(...args) {\n let lastExec = 0;\n let timer;\n let isLeading = true;\n let lastRejector = noop;\n let lastValue;\n let ms;\n let trailing;\n let leading;\n let rejectOnCancel;\n if (!isRef(args[0]) && typeof args[0] === \"object\")\n ({ delay: ms, trailing = true, leading = true, rejectOnCancel = false } = args[0]);\n else\n [ms, trailing = true, leading = true, rejectOnCancel = false] = args;\n const clear = () => {\n if (timer) {\n clearTimeout(timer);\n timer = void 0;\n lastRejector();\n lastRejector = noop;\n }\n };\n const filter = (_invoke) => {\n const duration = toValue(ms);\n const elapsed = Date.now() - lastExec;\n const invoke = () => {\n return lastValue = _invoke();\n };\n clear();\n if (duration <= 0) {\n lastExec = Date.now();\n return invoke();\n }\n if (elapsed > duration && (leading || !isLeading)) {\n lastExec = Date.now();\n invoke();\n } else if (trailing) {\n lastValue = new Promise((resolve, reject) => {\n lastRejector = rejectOnCancel ? reject : resolve;\n timer = setTimeout(() => {\n lastExec = Date.now();\n isLeading = true;\n resolve(invoke());\n clear();\n }, Math.max(0, duration - elapsed));\n });\n }\n if (!leading && !timer)\n timer = setTimeout(() => isLeading = true, duration);\n isLeading = false;\n return lastValue;\n };\n return filter;\n}\nfunction pausableFilter(extendFilter = bypassFilter) {\n const isActive = ref(true);\n function pause() {\n isActive.value = false;\n }\n function resume() {\n isActive.value = true;\n }\n const eventFilter = (...args) => {\n if (isActive.value)\n extendFilter(...args);\n };\n return { isActive: readonly(isActive), pause, resume, eventFilter };\n}\n\nconst directiveHooks = {\n mounted: isVue3 ? \"mounted\" : \"inserted\",\n updated: isVue3 ? \"updated\" : \"componentUpdated\",\n unmounted: isVue3 ? \"unmounted\" : \"unbind\"\n};\n\nfunction cacheStringFunction(fn) {\n const cache = /* @__PURE__ */ Object.create(null);\n return (str) => {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n };\n}\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, \"-$1\").toLowerCase());\nconst camelizeRE = /-(\\w)/g;\nconst camelize = cacheStringFunction((str) => {\n return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : \"\");\n});\n\nfunction promiseTimeout(ms, throwOnTimeout = false, reason = \"Timeout\") {\n return new Promise((resolve, reject) => {\n if (throwOnTimeout)\n setTimeout(() => reject(reason), ms);\n else\n setTimeout(resolve, ms);\n });\n}\nfunction identity(arg) {\n return arg;\n}\nfunction createSingletonPromise(fn) {\n let _promise;\n function wrapper() {\n if (!_promise)\n _promise = fn();\n return _promise;\n }\n wrapper.reset = async () => {\n const _prev = _promise;\n _promise = void 0;\n if (_prev)\n await _prev;\n };\n return wrapper;\n}\nfunction invoke(fn) {\n return fn();\n}\nfunction containsProp(obj, ...props) {\n return props.some((k) => k in obj);\n}\nfunction increaseWithUnit(target, delta) {\n var _a;\n if (typeof target === \"number\")\n return target + delta;\n const value = ((_a = target.match(/^-?\\d+\\.?\\d*/)) == null ? void 0 : _a[0]) || \"\";\n const unit = target.slice(value.length);\n const result = Number.parseFloat(value) + delta;\n if (Number.isNaN(result))\n return target;\n return result + unit;\n}\nfunction objectPick(obj, keys, omitUndefined = false) {\n return keys.reduce((n, k) => {\n if (k in obj) {\n if (!omitUndefined || obj[k] !== void 0)\n n[k] = obj[k];\n }\n return n;\n }, {});\n}\nfunction objectOmit(obj, keys, omitUndefined = false) {\n return Object.fromEntries(Object.entries(obj).filter(([key, value]) => {\n return (!omitUndefined || value !== void 0) && !keys.includes(key);\n }));\n}\nfunction objectEntries(obj) {\n return Object.entries(obj);\n}\nfunction getLifeCycleTarget(target) {\n return target || getCurrentInstance();\n}\n\nfunction toRef(...args) {\n if (args.length !== 1)\n return toRef$1(...args);\n const r = args[0];\n return typeof r === \"function\" ? readonly(customRef(() => ({ get: r, set: noop }))) : ref(r);\n}\nconst resolveRef = toRef;\n\nfunction reactivePick(obj, ...keys) {\n const flatKeys = keys.flat();\n const predicate = flatKeys[0];\n return reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => predicate(toValue(v), k))) : Object.fromEntries(flatKeys.map((k) => [k, toRef(obj, k)])));\n}\n\nfunction refAutoReset(defaultValue, afterMs = 1e4) {\n return customRef((track, trigger) => {\n let value = toValue(defaultValue);\n let timer;\n const resetAfter = () => setTimeout(() => {\n value = toValue(defaultValue);\n trigger();\n }, toValue(afterMs));\n tryOnScopeDispose(() => {\n clearTimeout(timer);\n });\n return {\n get() {\n track();\n return value;\n },\n set(newValue) {\n value = newValue;\n trigger();\n clearTimeout(timer);\n timer = resetAfter();\n }\n };\n });\n}\n\nfunction useDebounceFn(fn, ms = 200, options = {}) {\n return createFilterWrapper(\n debounceFilter(ms, options),\n fn\n );\n}\n\nfunction refDebounced(value, ms = 200, options = {}) {\n const debounced = ref(value.value);\n const updater = useDebounceFn(() => {\n debounced.value = value.value;\n }, ms, options);\n watch(value, () => updater());\n return debounced;\n}\n\nfunction refDefault(source, defaultValue) {\n return computed({\n get() {\n var _a;\n return (_a = source.value) != null ? _a : defaultValue;\n },\n set(value) {\n source.value = value;\n }\n });\n}\n\nfunction useThrottleFn(fn, ms = 200, trailing = false, leading = true, rejectOnCancel = false) {\n return createFilterWrapper(\n throttleFilter(ms, trailing, leading, rejectOnCancel),\n fn\n );\n}\n\nfunction refThrottled(value, delay = 200, trailing = true, leading = true) {\n if (delay <= 0)\n return value;\n const throttled = ref(value.value);\n const updater = useThrottleFn(() => {\n throttled.value = value.value;\n }, delay, trailing, leading);\n watch(value, () => updater());\n return throttled;\n}\n\nfunction refWithControl(initial, options = {}) {\n let source = initial;\n let track;\n let trigger;\n const ref = customRef((_track, _trigger) => {\n track = _track;\n trigger = _trigger;\n return {\n get() {\n return get();\n },\n set(v) {\n set(v);\n }\n };\n });\n function get(tracking = true) {\n if (tracking)\n track();\n return source;\n }\n function set(value, triggering = true) {\n var _a, _b;\n if (value === source)\n return;\n const old = source;\n if (((_a = options.onBeforeChange) == null ? void 0 : _a.call(options, value, old)) === false)\n return;\n source = value;\n (_b = options.onChanged) == null ? void 0 : _b.call(options, value, old);\n if (triggering)\n trigger();\n }\n const untrackedGet = () => get(false);\n const silentSet = (v) => set(v, false);\n const peek = () => get(false);\n const lay = (v) => set(v, false);\n return extendRef(\n ref,\n {\n get,\n set,\n untrackedGet,\n silentSet,\n peek,\n lay\n },\n { enumerable: true }\n );\n}\nconst controlledRef = refWithControl;\n\nfunction set(...args) {\n if (args.length === 2) {\n const [ref, value] = args;\n ref.value = value;\n }\n if (args.length === 3) {\n if (isVue2) {\n set$1(...args);\n } else {\n const [target, key, value] = args;\n target[key] = value;\n }\n }\n}\n\nfunction watchWithFilter(source, cb, options = {}) {\n const {\n eventFilter = bypassFilter,\n ...watchOptions\n } = options;\n return watch(\n source,\n createFilterWrapper(\n eventFilter,\n cb\n ),\n watchOptions\n );\n}\n\nfunction watchPausable(source, cb, options = {}) {\n const {\n eventFilter: filter,\n ...watchOptions\n } = options;\n const { eventFilter, pause, resume, isActive } = pausableFilter(filter);\n const stop = watchWithFilter(\n source,\n cb,\n {\n ...watchOptions,\n eventFilter\n }\n );\n return { stop, pause, resume, isActive };\n}\n\nfunction syncRef(left, right, ...[options]) {\n const {\n flush = \"sync\",\n deep = false,\n immediate = true,\n direction = \"both\",\n transform = {}\n } = options || {};\n const watchers = [];\n const transformLTR = \"ltr\" in transform && transform.ltr || ((v) => v);\n const transformRTL = \"rtl\" in transform && transform.rtl || ((v) => v);\n if (direction === \"both\" || direction === \"ltr\") {\n watchers.push(watchPausable(\n left,\n (newValue) => {\n watchers.forEach((w) => w.pause());\n right.value = transformLTR(newValue);\n watchers.forEach((w) => w.resume());\n },\n { flush, deep, immediate }\n ));\n }\n if (direction === \"both\" || direction === \"rtl\") {\n watchers.push(watchPausable(\n right,\n (newValue) => {\n watchers.forEach((w) => w.pause());\n left.value = transformRTL(newValue);\n watchers.forEach((w) => w.resume());\n },\n { flush, deep, immediate }\n ));\n }\n const stop = () => {\n watchers.forEach((w) => w.stop());\n };\n return stop;\n}\n\nfunction syncRefs(source, targets, options = {}) {\n const {\n flush = \"sync\",\n deep = false,\n immediate = true\n } = options;\n if (!Array.isArray(targets))\n targets = [targets];\n return watch(\n source,\n (newValue) => targets.forEach((target) => target.value = newValue),\n { flush, deep, immediate }\n );\n}\n\nfunction toRefs(objectRef, options = {}) {\n if (!isRef(objectRef))\n return toRefs$1(objectRef);\n const result = Array.isArray(objectRef.value) ? Array.from({ length: objectRef.value.length }) : {};\n for (const key in objectRef.value) {\n result[key] = customRef(() => ({\n get() {\n return objectRef.value[key];\n },\n set(v) {\n var _a;\n const replaceRef = (_a = toValue(options.replaceRef)) != null ? _a : true;\n if (replaceRef) {\n if (Array.isArray(objectRef.value)) {\n const copy = [...objectRef.value];\n copy[key] = v;\n objectRef.value = copy;\n } else {\n const newObject = { ...objectRef.value, [key]: v };\n Object.setPrototypeOf(newObject, Object.getPrototypeOf(objectRef.value));\n objectRef.value = newObject;\n }\n } else {\n objectRef.value[key] = v;\n }\n }\n }));\n }\n return result;\n}\n\nfunction tryOnBeforeMount(fn, sync = true, target) {\n const instance = getLifeCycleTarget(target);\n if (instance)\n onBeforeMount(fn, target);\n else if (sync)\n fn();\n else\n nextTick(fn);\n}\n\nfunction tryOnBeforeUnmount(fn, target) {\n const instance = getLifeCycleTarget(target);\n if (instance)\n onBeforeUnmount(fn, target);\n}\n\nfunction tryOnMounted(fn, sync = true, target) {\n const instance = getLifeCycleTarget();\n if (instance)\n onMounted(fn, target);\n else if (sync)\n fn();\n else\n nextTick(fn);\n}\n\nfunction tryOnUnmounted(fn, target) {\n const instance = getLifeCycleTarget(target);\n if (instance)\n onUnmounted(fn, target);\n}\n\nfunction createUntil(r, isNot = false) {\n function toMatch(condition, { flush = \"sync\", deep = false, timeout, throwOnTimeout } = {}) {\n let stop = null;\n const watcher = new Promise((resolve) => {\n stop = watch(\n r,\n (v) => {\n if (condition(v) !== isNot) {\n stop == null ? void 0 : stop();\n resolve(v);\n }\n },\n {\n flush,\n deep,\n immediate: true\n }\n );\n });\n const promises = [watcher];\n if (timeout != null) {\n promises.push(\n promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => stop == null ? void 0 : stop())\n );\n }\n return Promise.race(promises);\n }\n function toBe(value, options) {\n if (!isRef(value))\n return toMatch((v) => v === value, options);\n const { flush = \"sync\", deep = false, timeout, throwOnTimeout } = options != null ? options : {};\n let stop = null;\n const watcher = new Promise((resolve) => {\n stop = watch(\n [r, value],\n ([v1, v2]) => {\n if (isNot !== (v1 === v2)) {\n stop == null ? void 0 : stop();\n resolve(v1);\n }\n },\n {\n flush,\n deep,\n immediate: true\n }\n );\n });\n const promises = [watcher];\n if (timeout != null) {\n promises.push(\n promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => {\n stop == null ? void 0 : stop();\n return toValue(r);\n })\n );\n }\n return Promise.race(promises);\n }\n function toBeTruthy(options) {\n return toMatch((v) => Boolean(v), options);\n }\n function toBeNull(options) {\n return toBe(null, options);\n }\n function toBeUndefined(options) {\n return toBe(void 0, options);\n }\n function toBeNaN(options) {\n return toMatch(Number.isNaN, options);\n }\n function toContains(value, options) {\n return toMatch((v) => {\n const array = Array.from(v);\n return array.includes(value) || array.includes(toValue(value));\n }, options);\n }\n function changed(options) {\n return changedTimes(1, options);\n }\n function changedTimes(n = 1, options) {\n let count = -1;\n return toMatch(() => {\n count += 1;\n return count >= n;\n }, options);\n }\n if (Array.isArray(toValue(r))) {\n const instance = {\n toMatch,\n toContains,\n changed,\n changedTimes,\n get not() {\n return createUntil(r, !isNot);\n }\n };\n return instance;\n } else {\n const instance = {\n toMatch,\n toBe,\n toBeTruthy,\n toBeNull,\n toBeNaN,\n toBeUndefined,\n changed,\n changedTimes,\n get not() {\n return createUntil(r, !isNot);\n }\n };\n return instance;\n }\n}\nfunction until(r) {\n return createUntil(r);\n}\n\nfunction defaultComparator(value, othVal) {\n return value === othVal;\n}\nfunction useArrayDifference(...args) {\n var _a;\n const list = args[0];\n const values = args[1];\n let compareFn = (_a = args[2]) != null ? _a : defaultComparator;\n if (typeof compareFn === \"string\") {\n const key = compareFn;\n compareFn = (value, othVal) => value[key] === othVal[key];\n }\n return computed(() => toValue(list).filter((x) => toValue(values).findIndex((y) => compareFn(x, y)) === -1));\n}\n\nfunction useArrayEvery(list, fn) {\n return computed(() => toValue(list).every((element, index, array) => fn(toValue(element), index, array)));\n}\n\nfunction useArrayFilter(list, fn) {\n return computed(() => toValue(list).map((i) => toValue(i)).filter(fn));\n}\n\nfunction useArrayFind(list, fn) {\n return computed(() => toValue(\n toValue(list).find((element, index, array) => fn(toValue(element), index, array))\n ));\n}\n\nfunction useArrayFindIndex(list, fn) {\n return computed(() => toValue(list).findIndex((element, index, array) => fn(toValue(element), index, array)));\n}\n\nfunction findLast(arr, cb) {\n let index = arr.length;\n while (index-- > 0) {\n if (cb(arr[index], index, arr))\n return arr[index];\n }\n return void 0;\n}\nfunction useArrayFindLast(list, fn) {\n return computed(() => toValue(\n !Array.prototype.findLast ? findLast(toValue(list), (element, index, array) => fn(toValue(element), index, array)) : toValue(list).findLast((element, index, array) => fn(toValue(element), index, array))\n ));\n}\n\nfunction isArrayIncludesOptions(obj) {\n return isObject(obj) && containsProp(obj, \"formIndex\", \"comparator\");\n}\nfunction useArrayIncludes(...args) {\n var _a;\n const list = args[0];\n const value = args[1];\n let comparator = args[2];\n let formIndex = 0;\n if (isArrayIncludesOptions(comparator)) {\n formIndex = (_a = comparator.fromIndex) != null ? _a : 0;\n comparator = comparator.comparator;\n }\n if (typeof comparator === \"string\") {\n const key = comparator;\n comparator = (element, value2) => element[key] === toValue(value2);\n }\n comparator = comparator != null ? comparator : (element, value2) => element === toValue(value2);\n return computed(() => toValue(list).slice(formIndex).some((element, index, array) => comparator(\n toValue(element),\n toValue(value),\n index,\n toValue(array)\n )));\n}\n\nfunction useArrayJoin(list, separator) {\n return computed(() => toValue(list).map((i) => toValue(i)).join(toValue(separator)));\n}\n\nfunction useArrayMap(list, fn) {\n return computed(() => toValue(list).map((i) => toValue(i)).map(fn));\n}\n\nfunction useArrayReduce(list, reducer, ...args) {\n const reduceCallback = (sum, value, index) => reducer(toValue(sum), toValue(value), index);\n return computed(() => {\n const resolved = toValue(list);\n return args.length ? resolved.reduce(reduceCallback, toValue(args[0])) : resolved.reduce(reduceCallback);\n });\n}\n\nfunction useArraySome(list, fn) {\n return computed(() => toValue(list).some((element, index, array) => fn(toValue(element), index, array)));\n}\n\nfunction uniq(array) {\n return Array.from(new Set(array));\n}\nfunction uniqueElementsBy(array, fn) {\n return array.reduce((acc, v) => {\n if (!acc.some((x) => fn(v, x, array)))\n acc.push(v);\n return acc;\n }, []);\n}\nfunction useArrayUnique(list, compareFn) {\n return computed(() => {\n const resolvedList = toValue(list).map((element) => toValue(element));\n return compareFn ? uniqueElementsBy(resolvedList, compareFn) : uniq(resolvedList);\n });\n}\n\nfunction useCounter(initialValue = 0, options = {}) {\n let _initialValue = unref(initialValue);\n const count = ref(initialValue);\n const {\n max = Number.POSITIVE_INFINITY,\n min = Number.NEGATIVE_INFINITY\n } = options;\n const inc = (delta = 1) => count.value = Math.max(Math.min(max, count.value + delta), min);\n const dec = (delta = 1) => count.value = Math.min(Math.max(min, count.value - delta), max);\n const get = () => count.value;\n const set = (val) => count.value = Math.max(min, Math.min(max, val));\n const reset = (val = _initialValue) => {\n _initialValue = val;\n return set(val);\n };\n return { count, inc, dec, get, set, reset };\n}\n\nconst REGEX_PARSE = /^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[T\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/i;\nconst REGEX_FORMAT = /[YMDHhms]o|\\[([^\\]]+)\\]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a{1,2}|A{1,2}|m{1,2}|s{1,2}|Z{1,2}|SSS/g;\nfunction defaultMeridiem(hours, minutes, isLowercase, hasPeriod) {\n let m = hours < 12 ? \"AM\" : \"PM\";\n if (hasPeriod)\n m = m.split(\"\").reduce((acc, curr) => acc += `${curr}.`, \"\");\n return isLowercase ? m.toLowerCase() : m;\n}\nfunction formatOrdinal(num) {\n const suffixes = [\"th\", \"st\", \"nd\", \"rd\"];\n const v = num % 100;\n return num + (suffixes[(v - 20) % 10] || suffixes[v] || suffixes[0]);\n}\nfunction formatDate(date, formatStr, options = {}) {\n var _a;\n const years = date.getFullYear();\n const month = date.getMonth();\n const days = date.getDate();\n const hours = date.getHours();\n const minutes = date.getMinutes();\n const seconds = date.getSeconds();\n const milliseconds = date.getMilliseconds();\n const day = date.getDay();\n const meridiem = (_a = options.customMeridiem) != null ? _a : defaultMeridiem;\n const matches = {\n Yo: () => formatOrdinal(years),\n YY: () => String(years).slice(-2),\n YYYY: () => years,\n M: () => month + 1,\n Mo: () => formatOrdinal(month + 1),\n MM: () => `${month + 1}`.padStart(2, \"0\"),\n MMM: () => date.toLocaleDateString(options.locales, { month: \"short\" }),\n MMMM: () => date.toLocaleDateString(options.locales, { month: \"long\" }),\n D: () => String(days),\n Do: () => formatOrdinal(days),\n DD: () => `${days}`.padStart(2, \"0\"),\n H: () => String(hours),\n Ho: () => formatOrdinal(hours),\n HH: () => `${hours}`.padStart(2, \"0\"),\n h: () => `${hours % 12 || 12}`.padStart(1, \"0\"),\n ho: () => formatOrdinal(hours % 12 || 12),\n hh: () => `${hours % 12 || 12}`.padStart(2, \"0\"),\n m: () => String(minutes),\n mo: () => formatOrdinal(minutes),\n mm: () => `${minutes}`.padStart(2, \"0\"),\n s: () => String(seconds),\n so: () => formatOrdinal(seconds),\n ss: () => `${seconds}`.padStart(2, \"0\"),\n SSS: () => `${milliseconds}`.padStart(3, \"0\"),\n d: () => day,\n dd: () => date.toLocaleDateString(options.locales, { weekday: \"narrow\" }),\n ddd: () => date.toLocaleDateString(options.locales, { weekday: \"short\" }),\n dddd: () => date.toLocaleDateString(options.locales, { weekday: \"long\" }),\n A: () => meridiem(hours, minutes),\n AA: () => meridiem(hours, minutes, false, true),\n a: () => meridiem(hours, minutes, true),\n aa: () => meridiem(hours, minutes, true, true)\n };\n return formatStr.replace(REGEX_FORMAT, (match, $1) => {\n var _a2, _b;\n return (_b = $1 != null ? $1 : (_a2 = matches[match]) == null ? void 0 : _a2.call(matches)) != null ? _b : match;\n });\n}\nfunction normalizeDate(date) {\n if (date === null)\n return new Date(Number.NaN);\n if (date === void 0)\n return /* @__PURE__ */ new Date();\n if (date instanceof Date)\n return new Date(date);\n if (typeof date === \"string\" && !/Z$/i.test(date)) {\n const d = date.match(REGEX_PARSE);\n if (d) {\n const m = d[2] - 1 || 0;\n const ms = (d[7] || \"0\").substring(0, 3);\n return new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms);\n }\n }\n return new Date(date);\n}\nfunction useDateFormat(date, formatStr = \"HH:mm:ss\", options = {}) {\n return computed(() => formatDate(normalizeDate(toValue(date)), toValue(formatStr), options));\n}\n\nfunction useIntervalFn(cb, interval = 1e3, options = {}) {\n const {\n immediate = true,\n immediateCallback = false\n } = options;\n let timer = null;\n const isActive = ref(false);\n function clean() {\n if (timer) {\n clearInterval(timer);\n timer = null;\n }\n }\n function pause() {\n isActive.value = false;\n clean();\n }\n function resume() {\n const intervalValue = toValue(interval);\n if (intervalValue <= 0)\n return;\n isActive.value = true;\n if (immediateCallback)\n cb();\n clean();\n timer = setInterval(cb, intervalValue);\n }\n if (immediate && isClient)\n resume();\n if (isRef(interval) || typeof interval === \"function\") {\n const stopWatch = watch(interval, () => {\n if (isActive.value && isClient)\n resume();\n });\n tryOnScopeDispose(stopWatch);\n }\n tryOnScopeDispose(pause);\n return {\n isActive,\n pause,\n resume\n };\n}\n\nfunction useInterval(interval = 1e3, options = {}) {\n const {\n controls: exposeControls = false,\n immediate = true,\n callback\n } = options;\n const counter = ref(0);\n const update = () => counter.value += 1;\n const reset = () => {\n counter.value = 0;\n };\n const controls = useIntervalFn(\n callback ? () => {\n update();\n callback(counter.value);\n } : update,\n interval,\n { immediate }\n );\n if (exposeControls) {\n return {\n counter,\n reset,\n ...controls\n };\n } else {\n return counter;\n }\n}\n\nfunction useLastChanged(source, options = {}) {\n var _a;\n const ms = ref((_a = options.initialValue) != null ? _a : null);\n watch(\n source,\n () => ms.value = timestamp(),\n options\n );\n return ms;\n}\n\nfunction useTimeoutFn(cb, interval, options = {}) {\n const {\n immediate = true\n } = options;\n const isPending = ref(false);\n let timer = null;\n function clear() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n }\n function stop() {\n isPending.value = false;\n clear();\n }\n function start(...args) {\n clear();\n isPending.value = true;\n timer = setTimeout(() => {\n isPending.value = false;\n timer = null;\n cb(...args);\n }, toValue(interval));\n }\n if (immediate) {\n isPending.value = true;\n if (isClient)\n start();\n }\n tryOnScopeDispose(stop);\n return {\n isPending: readonly(isPending),\n start,\n stop\n };\n}\n\nfunction useTimeout(interval = 1e3, options = {}) {\n const {\n controls: exposeControls = false,\n callback\n } = options;\n const controls = useTimeoutFn(\n callback != null ? callback : noop,\n interval,\n options\n );\n const ready = computed(() => !controls.isPending.value);\n if (exposeControls) {\n return {\n ready,\n ...controls\n };\n } else {\n return ready;\n }\n}\n\nfunction useToNumber(value, options = {}) {\n const {\n method = \"parseFloat\",\n radix,\n nanToZero\n } = options;\n return computed(() => {\n let resolved = toValue(value);\n if (typeof resolved === \"string\")\n resolved = Number[method](resolved, radix);\n if (nanToZero && Number.isNaN(resolved))\n resolved = 0;\n return resolved;\n });\n}\n\nfunction useToString(value) {\n return computed(() => `${toValue(value)}`);\n}\n\nfunction useToggle(initialValue = false, options = {}) {\n const {\n truthyValue = true,\n falsyValue = false\n } = options;\n const valueIsRef = isRef(initialValue);\n const _value = ref(initialValue);\n function toggle(value) {\n if (arguments.length) {\n _value.value = value;\n return _value.value;\n } else {\n const truthy = toValue(truthyValue);\n _value.value = _value.value === truthy ? toValue(falsyValue) : truthy;\n return _value.value;\n }\n }\n if (valueIsRef)\n return toggle;\n else\n return [_value, toggle];\n}\n\nfunction watchArray(source, cb, options) {\n let oldList = (options == null ? void 0 : options.immediate) ? [] : [...source instanceof Function ? source() : Array.isArray(source) ? source : toValue(source)];\n return watch(source, (newList, _, onCleanup) => {\n const oldListRemains = Array.from({ length: oldList.length });\n const added = [];\n for (const obj of newList) {\n let found = false;\n for (let i = 0; i < oldList.length; i++) {\n if (!oldListRemains[i] && obj === oldList[i]) {\n oldListRemains[i] = true;\n found = true;\n break;\n }\n }\n if (!found)\n added.push(obj);\n }\n const removed = oldList.filter((_2, i) => !oldListRemains[i]);\n cb(newList, oldList, added, removed, onCleanup);\n oldList = [...newList];\n }, options);\n}\n\nfunction watchAtMost(source, cb, options) {\n const {\n count,\n ...watchOptions\n } = options;\n const current = ref(0);\n const stop = watchWithFilter(\n source,\n (...args) => {\n current.value += 1;\n if (current.value >= toValue(count))\n nextTick(() => stop());\n cb(...args);\n },\n watchOptions\n );\n return { count: current, stop };\n}\n\nfunction watchDebounced(source, cb, options = {}) {\n const {\n debounce = 0,\n maxWait = void 0,\n ...watchOptions\n } = options;\n return watchWithFilter(\n source,\n cb,\n {\n ...watchOptions,\n eventFilter: debounceFilter(debounce, { maxWait })\n }\n );\n}\n\nfunction watchDeep(source, cb, options) {\n return watch(\n source,\n cb,\n {\n ...options,\n deep: true\n }\n );\n}\n\nfunction watchIgnorable(source, cb, options = {}) {\n const {\n eventFilter = bypassFilter,\n ...watchOptions\n } = options;\n const filteredCb = createFilterWrapper(\n eventFilter,\n cb\n );\n let ignoreUpdates;\n let ignorePrevAsyncUpdates;\n let stop;\n if (watchOptions.flush === \"sync\") {\n const ignore = ref(false);\n ignorePrevAsyncUpdates = () => {\n };\n ignoreUpdates = (updater) => {\n ignore.value = true;\n updater();\n ignore.value = false;\n };\n stop = watch(\n source,\n (...args) => {\n if (!ignore.value)\n filteredCb(...args);\n },\n watchOptions\n );\n } else {\n const disposables = [];\n const ignoreCounter = ref(0);\n const syncCounter = ref(0);\n ignorePrevAsyncUpdates = () => {\n ignoreCounter.value = syncCounter.value;\n };\n disposables.push(\n watch(\n source,\n () => {\n syncCounter.value++;\n },\n { ...watchOptions, flush: \"sync\" }\n )\n );\n ignoreUpdates = (updater) => {\n const syncCounterPrev = syncCounter.value;\n updater();\n ignoreCounter.value += syncCounter.value - syncCounterPrev;\n };\n disposables.push(\n watch(\n source,\n (...args) => {\n const ignore = ignoreCounter.value > 0 && ignoreCounter.value === syncCounter.value;\n ignoreCounter.value = 0;\n syncCounter.value = 0;\n if (ignore)\n return;\n filteredCb(...args);\n },\n watchOptions\n )\n );\n stop = () => {\n disposables.forEach((fn) => fn());\n };\n }\n return { stop, ignoreUpdates, ignorePrevAsyncUpdates };\n}\n\nfunction watchImmediate(source, cb, options) {\n return watch(\n source,\n cb,\n {\n ...options,\n immediate: true\n }\n );\n}\n\nfunction watchOnce(source, cb, options) {\n const stop = watch(source, (...args) => {\n nextTick(() => stop());\n return cb(...args);\n }, options);\n return stop;\n}\n\nfunction watchThrottled(source, cb, options = {}) {\n const {\n throttle = 0,\n trailing = true,\n leading = true,\n ...watchOptions\n } = options;\n return watchWithFilter(\n source,\n cb,\n {\n ...watchOptions,\n eventFilter: throttleFilter(throttle, trailing, leading)\n }\n );\n}\n\nfunction watchTriggerable(source, cb, options = {}) {\n let cleanupFn;\n function onEffect() {\n if (!cleanupFn)\n return;\n const fn = cleanupFn;\n cleanupFn = void 0;\n fn();\n }\n function onCleanup(callback) {\n cleanupFn = callback;\n }\n const _cb = (value, oldValue) => {\n onEffect();\n return cb(value, oldValue, onCleanup);\n };\n const res = watchIgnorable(source, _cb, options);\n const { ignoreUpdates } = res;\n const trigger = () => {\n let res2;\n ignoreUpdates(() => {\n res2 = _cb(getWatchSources(source), getOldValue(source));\n });\n return res2;\n };\n return {\n ...res,\n trigger\n };\n}\nfunction getWatchSources(sources) {\n if (isReactive(sources))\n return sources;\n if (Array.isArray(sources))\n return sources.map((item) => toValue(item));\n return toValue(sources);\n}\nfunction getOldValue(source) {\n return Array.isArray(source) ? source.map(() => void 0) : void 0;\n}\n\nfunction whenever(source, cb, options) {\n const stop = watch(\n source,\n (v, ov, onInvalidate) => {\n if (v) {\n if (options == null ? void 0 : options.once)\n nextTick(() => stop());\n cb(v, ov, onInvalidate);\n }\n },\n {\n ...options,\n once: false\n }\n );\n return stop;\n}\n\nexport { assert, refAutoReset as autoResetRef, bypassFilter, camelize, clamp, computedEager, computedWithControl, containsProp, computedWithControl as controlledComputed, controlledRef, createEventHook, createFilterWrapper, createGlobalState, createInjectionState, reactify as createReactiveFn, createSharedComposable, createSingletonPromise, debounceFilter, refDebounced as debouncedRef, watchDebounced as debouncedWatch, directiveHooks, computedEager as eagerComputed, extendRef, formatDate, get, getLifeCycleTarget, hasOwn, hyphenate, identity, watchIgnorable as ignorableWatch, increaseWithUnit, injectLocal, invoke, isClient, isDef, isDefined, isIOS, isObject, isWorker, makeDestructurable, noop, normalizeDate, notNullish, now, objectEntries, objectOmit, objectPick, pausableFilter, watchPausable as pausableWatch, promiseTimeout, provideLocal, rand, reactify, reactifyObject, reactiveComputed, reactiveOmit, reactivePick, refAutoReset, refDebounced, refDefault, refThrottled, refWithControl, resolveRef, resolveUnref, set, syncRef, syncRefs, throttleFilter, refThrottled as throttledRef, watchThrottled as throttledWatch, timestamp, toReactive, toRef, toRefs, toValue, tryOnBeforeMount, tryOnBeforeUnmount, tryOnMounted, tryOnScopeDispose, tryOnUnmounted, until, useArrayDifference, useArrayEvery, useArrayFilter, useArrayFind, useArrayFindIndex, useArrayFindLast, useArrayIncludes, useArrayJoin, useArrayMap, useArrayReduce, useArraySome, useArrayUnique, useCounter, useDateFormat, refDebounced as useDebounce, useDebounceFn, useInterval, useIntervalFn, useLastChanged, refThrottled as useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useToNumber, useToString, useToggle, watchArray, watchAtMost, watchDebounced, watchDeep, watchIgnorable, watchImmediate, watchOnce, watchPausable, watchThrottled, watchTriggerable, watchWithFilter, whenever };\n","import { noop, makeDestructurable, camelize, toValue, isClient, isObject, tryOnScopeDispose, isIOS, tryOnMounted, notNullish, objectOmit, promiseTimeout, until, increaseWithUnit, objectEntries, createSingletonPromise, useTimeoutFn, pausableWatch, toRef, createEventHook, computedWithControl, timestamp, pausableFilter, watchIgnorable, debounceFilter, createFilterWrapper, bypassFilter, toRefs, useIntervalFn, containsProp, hasOwn, throttleFilter, useDebounceFn, useThrottleFn, clamp, syncRef, objectPick, tryOnUnmounted, watchWithFilter, tryOnBeforeUnmount, identity, isDef, isWorker } from '@vueuse/shared';\nexport * from '@vueuse/shared';\nimport { isRef, ref, shallowRef, watchEffect, computed, inject, isVue3, version, defineComponent, h, TransitionGroup, shallowReactive, Fragment, watch, getCurrentInstance, customRef, onUpdated, onMounted, isVue2, readonly, nextTick, reactive, markRaw, unref, getCurrentScope, set, del, isReadonly, onBeforeUpdate } from 'vue-demi';\n\nfunction computedAsync(evaluationCallback, initialState, optionsOrRef) {\n let options;\n if (isRef(optionsOrRef)) {\n options = {\n evaluating: optionsOrRef\n };\n } else {\n options = optionsOrRef || {};\n }\n const {\n lazy = false,\n evaluating = void 0,\n shallow = true,\n onError = noop\n } = options;\n const started = ref(!lazy);\n const current = shallow ? shallowRef(initialState) : ref(initialState);\n let counter = 0;\n watchEffect(async (onInvalidate) => {\n if (!started.value)\n return;\n counter++;\n const counterAtBeginning = counter;\n let hasFinished = false;\n if (evaluating) {\n Promise.resolve().then(() => {\n evaluating.value = true;\n });\n }\n try {\n const result = await evaluationCallback((cancelCallback) => {\n onInvalidate(() => {\n if (evaluating)\n evaluating.value = false;\n if (!hasFinished)\n cancelCallback();\n });\n });\n if (counterAtBeginning === counter)\n current.value = result;\n } catch (e) {\n onError(e);\n } finally {\n if (evaluating && counterAtBeginning === counter)\n evaluating.value = false;\n hasFinished = true;\n }\n });\n if (lazy) {\n return computed(() => {\n started.value = true;\n return current.value;\n });\n } else {\n return current;\n }\n}\n\nfunction computedInject(key, options, defaultSource, treatDefaultAsFactory) {\n let source = inject(key);\n if (defaultSource)\n source = inject(key, defaultSource);\n if (treatDefaultAsFactory)\n source = inject(key, defaultSource, treatDefaultAsFactory);\n if (typeof options === \"function\") {\n return computed((ctx) => options(source, ctx));\n } else {\n return computed({\n get: (ctx) => options.get(source, ctx),\n set: options.set\n });\n }\n}\n\nfunction createReusableTemplate(options = {}) {\n if (!isVue3 && !version.startsWith(\"2.7.\")) {\n if (process.env.NODE_ENV !== \"production\")\n throw new Error(\"[VueUse] createReusableTemplate only works in Vue 2.7 or above.\");\n return;\n }\n const {\n inheritAttrs = true\n } = options;\n const render = shallowRef();\n const define = /* #__PURE__ */ defineComponent({\n setup(_, { slots }) {\n return () => {\n render.value = slots.default;\n };\n }\n });\n const reuse = /* #__PURE__ */ defineComponent({\n inheritAttrs,\n setup(_, { attrs, slots }) {\n return () => {\n var _a;\n if (!render.value && process.env.NODE_ENV !== \"production\")\n throw new Error(\"[VueUse] Failed to find the definition of reusable template\");\n const vnode = (_a = render.value) == null ? void 0 : _a.call(render, { ...keysToCamelKebabCase(attrs), $slots: slots });\n return inheritAttrs && (vnode == null ? void 0 : vnode.length) === 1 ? vnode[0] : vnode;\n };\n }\n });\n return makeDestructurable(\n { define, reuse },\n [define, reuse]\n );\n}\nfunction keysToCamelKebabCase(obj) {\n const newObj = {};\n for (const key in obj)\n newObj[camelize(key)] = obj[key];\n return newObj;\n}\n\nfunction createTemplatePromise(options = {}) {\n if (!isVue3) {\n if (process.env.NODE_ENV !== \"production\")\n throw new Error(\"[VueUse] createTemplatePromise only works in Vue 3 or above.\");\n return;\n }\n let index = 0;\n const instances = ref([]);\n function create(...args) {\n const props = shallowReactive({\n key: index++,\n args,\n promise: void 0,\n resolve: () => {\n },\n reject: () => {\n },\n isResolving: false,\n options\n });\n instances.value.push(props);\n props.promise = new Promise((_resolve, _reject) => {\n props.resolve = (v) => {\n props.isResolving = true;\n return _resolve(v);\n };\n props.reject = _reject;\n }).finally(() => {\n props.promise = void 0;\n const index2 = instances.value.indexOf(props);\n if (index2 !== -1)\n instances.value.splice(index2, 1);\n });\n return props.promise;\n }\n function start(...args) {\n if (options.singleton && instances.value.length > 0)\n return instances.value[0].promise;\n return create(...args);\n }\n const component = /* #__PURE__ */ defineComponent((_, { slots }) => {\n const renderList = () => instances.value.map((props) => {\n var _a;\n return h(Fragment, { key: props.key }, (_a = slots.default) == null ? void 0 : _a.call(slots, props));\n });\n if (options.transition)\n return () => h(TransitionGroup, options.transition, renderList);\n return renderList;\n });\n component.start = start;\n return component;\n}\n\nfunction createUnrefFn(fn) {\n return function(...args) {\n return fn.apply(this, args.map((i) => toValue(i)));\n };\n}\n\nfunction unrefElement(elRef) {\n var _a;\n const plain = toValue(elRef);\n return (_a = plain == null ? void 0 : plain.$el) != null ? _a : plain;\n}\n\nconst defaultWindow = isClient ? window : void 0;\nconst defaultDocument = isClient ? window.document : void 0;\nconst defaultNavigator = isClient ? window.navigator : void 0;\nconst defaultLocation = isClient ? window.location : void 0;\n\nfunction useEventListener(...args) {\n let target;\n let events;\n let listeners;\n let options;\n if (typeof args[0] === \"string\" || Array.isArray(args[0])) {\n [events, listeners, options] = args;\n target = defaultWindow;\n } else {\n [target, events, listeners, options] = args;\n }\n if (!target)\n return noop;\n if (!Array.isArray(events))\n events = [events];\n if (!Array.isArray(listeners))\n listeners = [listeners];\n const cleanups = [];\n const cleanup = () => {\n cleanups.forEach((fn) => fn());\n cleanups.length = 0;\n };\n const register = (el, event, listener, options2) => {\n el.addEventListener(event, listener, options2);\n return () => el.removeEventListener(event, listener, options2);\n };\n const stopWatch = watch(\n () => [unrefElement(target), toValue(options)],\n ([el, options2]) => {\n cleanup();\n if (!el)\n return;\n const optionsClone = isObject(options2) ? { ...options2 } : options2;\n cleanups.push(\n ...events.flatMap((event) => {\n return listeners.map((listener) => register(el, event, listener, optionsClone));\n })\n );\n },\n { immediate: true, flush: \"post\" }\n );\n const stop = () => {\n stopWatch();\n cleanup();\n };\n tryOnScopeDispose(stop);\n return stop;\n}\n\nlet _iOSWorkaround = false;\nfunction onClickOutside(target, handler, options = {}) {\n const { window = defaultWindow, ignore = [], capture = true, detectIframe = false } = options;\n if (!window)\n return noop;\n if (isIOS && !_iOSWorkaround) {\n _iOSWorkaround = true;\n Array.from(window.document.body.children).forEach((el) => el.addEventListener(\"click\", noop));\n window.document.documentElement.addEventListener(\"click\", noop);\n }\n let shouldListen = true;\n const shouldIgnore = (event) => {\n return ignore.some((target2) => {\n if (typeof target2 === \"string\") {\n return Array.from(window.document.querySelectorAll(target2)).some((el) => el === event.target || event.composedPath().includes(el));\n } else {\n const el = unrefElement(target2);\n return el && (event.target === el || event.composedPath().includes(el));\n }\n });\n };\n const listener = (event) => {\n const el = unrefElement(target);\n if (!el || el === event.target || event.composedPath().includes(el))\n return;\n if (event.detail === 0)\n shouldListen = !shouldIgnore(event);\n if (!shouldListen) {\n shouldListen = true;\n return;\n }\n handler(event);\n };\n const cleanup = [\n useEventListener(window, \"click\", listener, { passive: true, capture }),\n useEventListener(window, \"pointerdown\", (e) => {\n const el = unrefElement(target);\n shouldListen = !shouldIgnore(e) && !!(el && !e.composedPath().includes(el));\n }, { passive: true }),\n detectIframe && useEventListener(window, \"blur\", (event) => {\n setTimeout(() => {\n var _a;\n const el = unrefElement(target);\n if (((_a = window.document.activeElement) == null ? void 0 : _a.tagName) === \"IFRAME\" && !(el == null ? void 0 : el.contains(window.document.activeElement))) {\n handler(event);\n }\n }, 0);\n })\n ].filter(Boolean);\n const stop = () => cleanup.forEach((fn) => fn());\n return stop;\n}\n\nfunction createKeyPredicate(keyFilter) {\n if (typeof keyFilter === \"function\")\n return keyFilter;\n else if (typeof keyFilter === \"string\")\n return (event) => event.key === keyFilter;\n else if (Array.isArray(keyFilter))\n return (event) => keyFilter.includes(event.key);\n return () => true;\n}\nfunction onKeyStroke(...args) {\n let key;\n let handler;\n let options = {};\n if (args.length === 3) {\n key = args[0];\n handler = args[1];\n options = args[2];\n } else if (args.length === 2) {\n if (typeof args[1] === \"object\") {\n key = true;\n handler = args[0];\n options = args[1];\n } else {\n key = args[0];\n handler = args[1];\n }\n } else {\n key = true;\n handler = args[0];\n }\n const {\n target = defaultWindow,\n eventName = \"keydown\",\n passive = false,\n dedupe = false\n } = options;\n const predicate = createKeyPredicate(key);\n const listener = (e) => {\n if (e.repeat && toValue(dedupe))\n return;\n if (predicate(e))\n handler(e);\n };\n return useEventListener(target, eventName, listener, passive);\n}\nfunction onKeyDown(key, handler, options = {}) {\n return onKeyStroke(key, handler, { ...options, eventName: \"keydown\" });\n}\nfunction onKeyPressed(key, handler, options = {}) {\n return onKeyStroke(key, handler, { ...options, eventName: \"keypress\" });\n}\nfunction onKeyUp(key, handler, options = {}) {\n return onKeyStroke(key, handler, { ...options, eventName: \"keyup\" });\n}\n\nconst DEFAULT_DELAY = 500;\nconst DEFAULT_THRESHOLD = 10;\nfunction onLongPress(target, handler, options) {\n var _a, _b;\n const elementRef = computed(() => unrefElement(target));\n let timeout;\n let posStart;\n let startTimestamp;\n let hasLongPressed = false;\n function clear() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = void 0;\n }\n posStart = void 0;\n startTimestamp = void 0;\n hasLongPressed = false;\n }\n function onRelease(ev) {\n var _a2, _b2, _c;\n const [_startTimestamp, _posStart, _hasLongPressed] = [startTimestamp, posStart, hasLongPressed];\n clear();\n if (!(options == null ? void 0 : options.onMouseUp) || !_posStart || !_startTimestamp)\n return;\n if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n return;\n if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n ev.preventDefault();\n if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n ev.stopPropagation();\n const dx = ev.x - _posStart.x;\n const dy = ev.y - _posStart.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n options.onMouseUp(ev.timeStamp - _startTimestamp, distance, _hasLongPressed);\n }\n function onDown(ev) {\n var _a2, _b2, _c, _d;\n if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n return;\n clear();\n if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n ev.preventDefault();\n if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n ev.stopPropagation();\n posStart = {\n x: ev.x,\n y: ev.y\n };\n startTimestamp = ev.timeStamp;\n timeout = setTimeout(\n () => {\n hasLongPressed = true;\n handler(ev);\n },\n (_d = options == null ? void 0 : options.delay) != null ? _d : DEFAULT_DELAY\n );\n }\n function onMove(ev) {\n var _a2, _b2, _c, _d;\n if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n return;\n if (!posStart || (options == null ? void 0 : options.distanceThreshold) === false)\n return;\n if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n ev.preventDefault();\n if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n ev.stopPropagation();\n const dx = ev.x - posStart.x;\n const dy = ev.y - posStart.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n if (distance >= ((_d = options == null ? void 0 : options.distanceThreshold) != null ? _d : DEFAULT_THRESHOLD))\n clear();\n }\n const listenerOptions = {\n capture: (_a = options == null ? void 0 : options.modifiers) == null ? void 0 : _a.capture,\n once: (_b = options == null ? void 0 : options.modifiers) == null ? void 0 : _b.once\n };\n const cleanup = [\n useEventListener(elementRef, \"pointerdown\", onDown, listenerOptions),\n useEventListener(elementRef, \"pointermove\", onMove, listenerOptions),\n useEventListener(elementRef, [\"pointerup\", \"pointerleave\"], onRelease, listenerOptions)\n ];\n const stop = () => cleanup.forEach((fn) => fn());\n return stop;\n}\n\nfunction isFocusedElementEditable() {\n const { activeElement, body } = document;\n if (!activeElement)\n return false;\n if (activeElement === body)\n return false;\n switch (activeElement.tagName) {\n case \"INPUT\":\n case \"TEXTAREA\":\n return true;\n }\n return activeElement.hasAttribute(\"contenteditable\");\n}\nfunction isTypedCharValid({\n keyCode,\n metaKey,\n ctrlKey,\n altKey\n}) {\n if (metaKey || ctrlKey || altKey)\n return false;\n if (keyCode >= 48 && keyCode <= 57)\n return true;\n if (keyCode >= 65 && keyCode <= 90)\n return true;\n if (keyCode >= 97 && keyCode <= 122)\n return true;\n return false;\n}\nfunction onStartTyping(callback, options = {}) {\n const { document: document2 = defaultDocument } = options;\n const keydown = (event) => {\n !isFocusedElementEditable() && isTypedCharValid(event) && callback(event);\n };\n if (document2)\n useEventListener(document2, \"keydown\", keydown, { passive: true });\n}\n\nfunction templateRef(key, initialValue = null) {\n const instance = getCurrentInstance();\n let _trigger = () => {\n };\n const element = customRef((track, trigger) => {\n _trigger = trigger;\n return {\n get() {\n var _a, _b;\n track();\n return (_b = (_a = instance == null ? void 0 : instance.proxy) == null ? void 0 : _a.$refs[key]) != null ? _b : initialValue;\n },\n set() {\n }\n };\n });\n tryOnMounted(_trigger);\n onUpdated(_trigger);\n return element;\n}\n\nfunction useMounted() {\n const isMounted = ref(false);\n const instance = getCurrentInstance();\n if (instance) {\n onMounted(() => {\n isMounted.value = true;\n }, isVue2 ? void 0 : instance);\n }\n return isMounted;\n}\n\nfunction useSupported(callback) {\n const isMounted = useMounted();\n return computed(() => {\n isMounted.value;\n return Boolean(callback());\n });\n}\n\nfunction useMutationObserver(target, callback, options = {}) {\n const { window = defaultWindow, ...mutationOptions } = options;\n let observer;\n const isSupported = useSupported(() => window && \"MutationObserver\" in window);\n const cleanup = () => {\n if (observer) {\n observer.disconnect();\n observer = void 0;\n }\n };\n const targets = computed(() => {\n const value = toValue(target);\n const items = (Array.isArray(value) ? value : [value]).map(unrefElement).filter(notNullish);\n return new Set(items);\n });\n const stopWatch = watch(\n () => targets.value,\n (targets2) => {\n cleanup();\n if (isSupported.value && targets2.size) {\n observer = new MutationObserver(callback);\n targets2.forEach((el) => observer.observe(el, mutationOptions));\n }\n },\n { immediate: true, flush: \"post\" }\n );\n const takeRecords = () => {\n return observer == null ? void 0 : observer.takeRecords();\n };\n const stop = () => {\n cleanup();\n stopWatch();\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n stop,\n takeRecords\n };\n}\n\nfunction useActiveElement(options = {}) {\n var _a;\n const {\n window = defaultWindow,\n deep = true,\n triggerOnRemoval = false\n } = options;\n const document = (_a = options.document) != null ? _a : window == null ? void 0 : window.document;\n const getDeepActiveElement = () => {\n var _a2;\n let element = document == null ? void 0 : document.activeElement;\n if (deep) {\n while (element == null ? void 0 : element.shadowRoot)\n element = (_a2 = element == null ? void 0 : element.shadowRoot) == null ? void 0 : _a2.activeElement;\n }\n return element;\n };\n const activeElement = ref();\n const trigger = () => {\n activeElement.value = getDeepActiveElement();\n };\n if (window) {\n useEventListener(window, \"blur\", (event) => {\n if (event.relatedTarget !== null)\n return;\n trigger();\n }, true);\n useEventListener(window, \"focus\", trigger, true);\n }\n if (triggerOnRemoval) {\n useMutationObserver(document, (mutations) => {\n mutations.filter((m) => m.removedNodes.length).map((n) => Array.from(n.removedNodes)).flat().forEach((node) => {\n if (node === activeElement.value)\n trigger();\n });\n }, {\n childList: true,\n subtree: true\n });\n }\n trigger();\n return activeElement;\n}\n\nfunction useRafFn(fn, options = {}) {\n const {\n immediate = true,\n fpsLimit = void 0,\n window = defaultWindow\n } = options;\n const isActive = ref(false);\n const intervalLimit = fpsLimit ? 1e3 / fpsLimit : null;\n let previousFrameTimestamp = 0;\n let rafId = null;\n function loop(timestamp) {\n if (!isActive.value || !window)\n return;\n if (!previousFrameTimestamp)\n previousFrameTimestamp = timestamp;\n const delta = timestamp - previousFrameTimestamp;\n if (intervalLimit && delta < intervalLimit) {\n rafId = window.requestAnimationFrame(loop);\n return;\n }\n previousFrameTimestamp = timestamp;\n fn({ delta, timestamp });\n rafId = window.requestAnimationFrame(loop);\n }\n function resume() {\n if (!isActive.value && window) {\n isActive.value = true;\n previousFrameTimestamp = 0;\n rafId = window.requestAnimationFrame(loop);\n }\n }\n function pause() {\n isActive.value = false;\n if (rafId != null && window) {\n window.cancelAnimationFrame(rafId);\n rafId = null;\n }\n }\n if (immediate)\n resume();\n tryOnScopeDispose(pause);\n return {\n isActive: readonly(isActive),\n pause,\n resume\n };\n}\n\nfunction useAnimate(target, keyframes, options) {\n let config;\n let animateOptions;\n if (isObject(options)) {\n config = options;\n animateOptions = objectOmit(options, [\"window\", \"immediate\", \"commitStyles\", \"persist\", \"onReady\", \"onError\"]);\n } else {\n config = { duration: options };\n animateOptions = options;\n }\n const {\n window = defaultWindow,\n immediate = true,\n commitStyles,\n persist,\n playbackRate: _playbackRate = 1,\n onReady,\n onError = (e) => {\n console.error(e);\n }\n } = config;\n const isSupported = useSupported(() => window && HTMLElement && \"animate\" in HTMLElement.prototype);\n const animate = shallowRef(void 0);\n const store = shallowReactive({\n startTime: null,\n currentTime: null,\n timeline: null,\n playbackRate: _playbackRate,\n pending: false,\n playState: immediate ? \"idle\" : \"paused\",\n replaceState: \"active\"\n });\n const pending = computed(() => store.pending);\n const playState = computed(() => store.playState);\n const replaceState = computed(() => store.replaceState);\n const startTime = computed({\n get() {\n return store.startTime;\n },\n set(value) {\n store.startTime = value;\n if (animate.value)\n animate.value.startTime = value;\n }\n });\n const currentTime = computed({\n get() {\n return store.currentTime;\n },\n set(value) {\n store.currentTime = value;\n if (animate.value) {\n animate.value.currentTime = value;\n syncResume();\n }\n }\n });\n const timeline = computed({\n get() {\n return store.timeline;\n },\n set(value) {\n store.timeline = value;\n if (animate.value)\n animate.value.timeline = value;\n }\n });\n const playbackRate = computed({\n get() {\n return store.playbackRate;\n },\n set(value) {\n store.playbackRate = value;\n if (animate.value)\n animate.value.playbackRate = value;\n }\n });\n const play = () => {\n if (animate.value) {\n try {\n animate.value.play();\n syncResume();\n } catch (e) {\n syncPause();\n onError(e);\n }\n } else {\n update();\n }\n };\n const pause = () => {\n var _a;\n try {\n (_a = animate.value) == null ? void 0 : _a.pause();\n syncPause();\n } catch (e) {\n onError(e);\n }\n };\n const reverse = () => {\n var _a;\n !animate.value && update();\n try {\n (_a = animate.value) == null ? void 0 : _a.reverse();\n syncResume();\n } catch (e) {\n syncPause();\n onError(e);\n }\n };\n const finish = () => {\n var _a;\n try {\n (_a = animate.value) == null ? void 0 : _a.finish();\n syncPause();\n } catch (e) {\n onError(e);\n }\n };\n const cancel = () => {\n var _a;\n try {\n (_a = animate.value) == null ? void 0 : _a.cancel();\n syncPause();\n } catch (e) {\n onError(e);\n }\n };\n watch(() => unrefElement(target), (el) => {\n el && update();\n });\n watch(() => keyframes, (value) => {\n !animate.value && update();\n if (!unrefElement(target) && animate.value) {\n animate.value.effect = new KeyframeEffect(\n unrefElement(target),\n toValue(value),\n animateOptions\n );\n }\n }, { deep: true });\n tryOnMounted(() => {\n nextTick(() => update(true));\n });\n tryOnScopeDispose(cancel);\n function update(init) {\n const el = unrefElement(target);\n if (!isSupported.value || !el)\n return;\n if (!animate.value)\n animate.value = el.animate(toValue(keyframes), animateOptions);\n if (persist)\n animate.value.persist();\n if (_playbackRate !== 1)\n animate.value.playbackRate = _playbackRate;\n if (init && !immediate)\n animate.value.pause();\n else\n syncResume();\n onReady == null ? void 0 : onReady(animate.value);\n }\n useEventListener(animate, [\"cancel\", \"finish\", \"remove\"], syncPause);\n useEventListener(animate, \"finish\", () => {\n var _a;\n if (commitStyles)\n (_a = animate.value) == null ? void 0 : _a.commitStyles();\n });\n const { resume: resumeRef, pause: pauseRef } = useRafFn(() => {\n if (!animate.value)\n return;\n store.pending = animate.value.pending;\n store.playState = animate.value.playState;\n store.replaceState = animate.value.replaceState;\n store.startTime = animate.value.startTime;\n store.currentTime = animate.value.currentTime;\n store.timeline = animate.value.timeline;\n store.playbackRate = animate.value.playbackRate;\n }, { immediate: false });\n function syncResume() {\n if (isSupported.value)\n resumeRef();\n }\n function syncPause() {\n if (isSupported.value && window)\n window.requestAnimationFrame(pauseRef);\n }\n return {\n isSupported,\n animate,\n // actions\n play,\n pause,\n reverse,\n finish,\n cancel,\n // state\n pending,\n playState,\n replaceState,\n startTime,\n currentTime,\n timeline,\n playbackRate\n };\n}\n\nfunction useAsyncQueue(tasks, options) {\n const {\n interrupt = true,\n onError = noop,\n onFinished = noop,\n signal\n } = options || {};\n const promiseState = {\n aborted: \"aborted\",\n fulfilled: \"fulfilled\",\n pending: \"pending\",\n rejected: \"rejected\"\n };\n const initialResult = Array.from(Array.from({ length: tasks.length }), () => ({ state: promiseState.pending, data: null }));\n const result = reactive(initialResult);\n const activeIndex = ref(-1);\n if (!tasks || tasks.length === 0) {\n onFinished();\n return {\n activeIndex,\n result\n };\n }\n function updateResult(state, res) {\n activeIndex.value++;\n result[activeIndex.value].data = res;\n result[activeIndex.value].state = state;\n }\n tasks.reduce((prev, curr) => {\n return prev.then((prevRes) => {\n var _a;\n if (signal == null ? void 0 : signal.aborted) {\n updateResult(promiseState.aborted, new Error(\"aborted\"));\n return;\n }\n if (((_a = result[activeIndex.value]) == null ? void 0 : _a.state) === promiseState.rejected && interrupt) {\n onFinished();\n return;\n }\n const done = curr(prevRes).then((currentRes) => {\n updateResult(promiseState.fulfilled, currentRes);\n activeIndex.value === tasks.length - 1 && onFinished();\n return currentRes;\n });\n if (!signal)\n return done;\n return Promise.race([done, whenAborted(signal)]);\n }).catch((e) => {\n if (signal == null ? void 0 : signal.aborted) {\n updateResult(promiseState.aborted, e);\n return e;\n }\n updateResult(promiseState.rejected, e);\n onError();\n return e;\n });\n }, Promise.resolve());\n return {\n activeIndex,\n result\n };\n}\nfunction whenAborted(signal) {\n return new Promise((resolve, reject) => {\n const error = new Error(\"aborted\");\n if (signal.aborted)\n reject(error);\n else\n signal.addEventListener(\"abort\", () => reject(error), { once: true });\n });\n}\n\nfunction useAsyncState(promise, initialState, options) {\n const {\n immediate = true,\n delay = 0,\n onError = noop,\n onSuccess = noop,\n resetOnExecute = true,\n shallow = true,\n throwError\n } = options != null ? options : {};\n const state = shallow ? shallowRef(initialState) : ref(initialState);\n const isReady = ref(false);\n const isLoading = ref(false);\n const error = shallowRef(void 0);\n async function execute(delay2 = 0, ...args) {\n if (resetOnExecute)\n state.value = initialState;\n error.value = void 0;\n isReady.value = false;\n isLoading.value = true;\n if (delay2 > 0)\n await promiseTimeout(delay2);\n const _promise = typeof promise === \"function\" ? promise(...args) : promise;\n try {\n const data = await _promise;\n state.value = data;\n isReady.value = true;\n onSuccess(data);\n } catch (e) {\n error.value = e;\n onError(e);\n if (throwError)\n throw e;\n } finally {\n isLoading.value = false;\n }\n return state.value;\n }\n if (immediate)\n execute(delay);\n const shell = {\n state,\n isReady,\n isLoading,\n error,\n execute\n };\n function waitUntilIsLoaded() {\n return new Promise((resolve, reject) => {\n until(isLoading).toBe(false).then(() => resolve(shell)).catch(reject);\n });\n }\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilIsLoaded().then(onFulfilled, onRejected);\n }\n };\n}\n\nconst defaults = {\n array: (v) => JSON.stringify(v),\n object: (v) => JSON.stringify(v),\n set: (v) => JSON.stringify(Array.from(v)),\n map: (v) => JSON.stringify(Object.fromEntries(v)),\n null: () => \"\"\n};\nfunction getDefaultSerialization(target) {\n if (!target)\n return defaults.null;\n if (target instanceof Map)\n return defaults.map;\n else if (target instanceof Set)\n return defaults.set;\n else if (Array.isArray(target))\n return defaults.array;\n else\n return defaults.object;\n}\n\nfunction useBase64(target, options) {\n const base64 = ref(\"\");\n const promise = ref();\n function execute() {\n if (!isClient)\n return;\n promise.value = new Promise((resolve, reject) => {\n try {\n const _target = toValue(target);\n if (_target == null) {\n resolve(\"\");\n } else if (typeof _target === \"string\") {\n resolve(blobToBase64(new Blob([_target], { type: \"text/plain\" })));\n } else if (_target instanceof Blob) {\n resolve(blobToBase64(_target));\n } else if (_target instanceof ArrayBuffer) {\n resolve(window.btoa(String.fromCharCode(...new Uint8Array(_target))));\n } else if (_target instanceof HTMLCanvasElement) {\n resolve(_target.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n } else if (_target instanceof HTMLImageElement) {\n const img = _target.cloneNode(false);\n img.crossOrigin = \"Anonymous\";\n imgLoaded(img).then(() => {\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n resolve(canvas.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n }).catch(reject);\n } else if (typeof _target === \"object\") {\n const _serializeFn = (options == null ? void 0 : options.serializer) || getDefaultSerialization(_target);\n const serialized = _serializeFn(_target);\n return resolve(blobToBase64(new Blob([serialized], { type: \"application/json\" })));\n } else {\n reject(new Error(\"target is unsupported types\"));\n }\n } catch (error) {\n reject(error);\n }\n });\n promise.value.then((res) => base64.value = res);\n return promise.value;\n }\n if (isRef(target) || typeof target === \"function\")\n watch(target, execute, { immediate: true });\n else\n execute();\n return {\n base64,\n promise,\n execute\n };\n}\nfunction imgLoaded(img) {\n return new Promise((resolve, reject) => {\n if (!img.complete) {\n img.onload = () => {\n resolve();\n };\n img.onerror = reject;\n } else {\n resolve();\n }\n });\n}\nfunction blobToBase64(blob) {\n return new Promise((resolve, reject) => {\n const fr = new FileReader();\n fr.onload = (e) => {\n resolve(e.target.result);\n };\n fr.onerror = reject;\n fr.readAsDataURL(blob);\n });\n}\n\nfunction useBattery(options = {}) {\n const { navigator = defaultNavigator } = options;\n const events = [\"chargingchange\", \"chargingtimechange\", \"dischargingtimechange\", \"levelchange\"];\n const isSupported = useSupported(() => navigator && \"getBattery\" in navigator && typeof navigator.getBattery === \"function\");\n const charging = ref(false);\n const chargingTime = ref(0);\n const dischargingTime = ref(0);\n const level = ref(1);\n let battery;\n function updateBatteryInfo() {\n charging.value = this.charging;\n chargingTime.value = this.chargingTime || 0;\n dischargingTime.value = this.dischargingTime || 0;\n level.value = this.level;\n }\n if (isSupported.value) {\n navigator.getBattery().then((_battery) => {\n battery = _battery;\n updateBatteryInfo.call(battery);\n useEventListener(battery, events, updateBatteryInfo, { passive: true });\n });\n }\n return {\n isSupported,\n charging,\n chargingTime,\n dischargingTime,\n level\n };\n}\n\nfunction useBluetooth(options) {\n let {\n acceptAllDevices = false\n } = options || {};\n const {\n filters = void 0,\n optionalServices = void 0,\n navigator = defaultNavigator\n } = options || {};\n const isSupported = useSupported(() => navigator && \"bluetooth\" in navigator);\n const device = shallowRef(void 0);\n const error = shallowRef(null);\n watch(device, () => {\n connectToBluetoothGATTServer();\n });\n async function requestDevice() {\n if (!isSupported.value)\n return;\n error.value = null;\n if (filters && filters.length > 0)\n acceptAllDevices = false;\n try {\n device.value = await (navigator == null ? void 0 : navigator.bluetooth.requestDevice({\n acceptAllDevices,\n filters,\n optionalServices\n }));\n } catch (err) {\n error.value = err;\n }\n }\n const server = ref();\n const isConnected = computed(() => {\n var _a;\n return ((_a = server.value) == null ? void 0 : _a.connected) || false;\n });\n async function connectToBluetoothGATTServer() {\n error.value = null;\n if (device.value && device.value.gatt) {\n device.value.addEventListener(\"gattserverdisconnected\", () => {\n });\n try {\n server.value = await device.value.gatt.connect();\n } catch (err) {\n error.value = err;\n }\n }\n }\n tryOnMounted(() => {\n var _a;\n if (device.value)\n (_a = device.value.gatt) == null ? void 0 : _a.connect();\n });\n tryOnScopeDispose(() => {\n var _a;\n if (device.value)\n (_a = device.value.gatt) == null ? void 0 : _a.disconnect();\n });\n return {\n isSupported,\n isConnected,\n // Device:\n device,\n requestDevice,\n // Server:\n server,\n // Errors:\n error\n };\n}\n\nfunction useMediaQuery(query, options = {}) {\n const { window = defaultWindow } = options;\n const isSupported = useSupported(() => window && \"matchMedia\" in window && typeof window.matchMedia === \"function\");\n let mediaQuery;\n const matches = ref(false);\n const handler = (event) => {\n matches.value = event.matches;\n };\n const cleanup = () => {\n if (!mediaQuery)\n return;\n if (\"removeEventListener\" in mediaQuery)\n mediaQuery.removeEventListener(\"change\", handler);\n else\n mediaQuery.removeListener(handler);\n };\n const stopWatch = watchEffect(() => {\n if (!isSupported.value)\n return;\n cleanup();\n mediaQuery = window.matchMedia(toValue(query));\n if (\"addEventListener\" in mediaQuery)\n mediaQuery.addEventListener(\"change\", handler);\n else\n mediaQuery.addListener(handler);\n matches.value = mediaQuery.matches;\n });\n tryOnScopeDispose(() => {\n stopWatch();\n cleanup();\n mediaQuery = void 0;\n });\n return matches;\n}\n\nconst breakpointsTailwind = {\n \"sm\": 640,\n \"md\": 768,\n \"lg\": 1024,\n \"xl\": 1280,\n \"2xl\": 1536\n};\nconst breakpointsBootstrapV5 = {\n xs: 0,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1400\n};\nconst breakpointsVuetifyV2 = {\n xs: 0,\n sm: 600,\n md: 960,\n lg: 1264,\n xl: 1904\n};\nconst breakpointsVuetifyV3 = {\n xs: 0,\n sm: 600,\n md: 960,\n lg: 1280,\n xl: 1920,\n xxl: 2560\n};\nconst breakpointsVuetify = breakpointsVuetifyV2;\nconst breakpointsAntDesign = {\n xs: 480,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1600\n};\nconst breakpointsQuasar = {\n xs: 0,\n sm: 600,\n md: 1024,\n lg: 1440,\n xl: 1920\n};\nconst breakpointsSematic = {\n mobileS: 320,\n mobileM: 375,\n mobileL: 425,\n tablet: 768,\n laptop: 1024,\n laptopL: 1440,\n desktop4K: 2560\n};\nconst breakpointsMasterCss = {\n \"3xs\": 360,\n \"2xs\": 480,\n \"xs\": 600,\n \"sm\": 768,\n \"md\": 1024,\n \"lg\": 1280,\n \"xl\": 1440,\n \"2xl\": 1600,\n \"3xl\": 1920,\n \"4xl\": 2560\n};\nconst breakpointsPrimeFlex = {\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200\n};\n\nfunction useBreakpoints(breakpoints, options = {}) {\n function getValue(k, delta) {\n let v = toValue(breakpoints[toValue(k)]);\n if (delta != null)\n v = increaseWithUnit(v, delta);\n if (typeof v === \"number\")\n v = `${v}px`;\n return v;\n }\n const { window = defaultWindow, strategy = \"min-width\" } = options;\n function match(query) {\n if (!window)\n return false;\n return window.matchMedia(query).matches;\n }\n const greaterOrEqual = (k) => {\n return useMediaQuery(() => `(min-width: ${getValue(k)})`, options);\n };\n const smallerOrEqual = (k) => {\n return useMediaQuery(() => `(max-width: ${getValue(k)})`, options);\n };\n const shortcutMethods = Object.keys(breakpoints).reduce((shortcuts, k) => {\n Object.defineProperty(shortcuts, k, {\n get: () => strategy === \"min-width\" ? greaterOrEqual(k) : smallerOrEqual(k),\n enumerable: true,\n configurable: true\n });\n return shortcuts;\n }, {});\n function current() {\n const points = Object.keys(breakpoints).map((i) => [i, greaterOrEqual(i)]);\n return computed(() => points.filter(([, v]) => v.value).map(([k]) => k));\n }\n return Object.assign(shortcutMethods, {\n greaterOrEqual,\n smallerOrEqual,\n greater(k) {\n return useMediaQuery(() => `(min-width: ${getValue(k, 0.1)})`, options);\n },\n smaller(k) {\n return useMediaQuery(() => `(max-width: ${getValue(k, -0.1)})`, options);\n },\n between(a, b) {\n return useMediaQuery(() => `(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`, options);\n },\n isGreater(k) {\n return match(`(min-width: ${getValue(k, 0.1)})`);\n },\n isGreaterOrEqual(k) {\n return match(`(min-width: ${getValue(k)})`);\n },\n isSmaller(k) {\n return match(`(max-width: ${getValue(k, -0.1)})`);\n },\n isSmallerOrEqual(k) {\n return match(`(max-width: ${getValue(k)})`);\n },\n isInBetween(a, b) {\n return match(`(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`);\n },\n current,\n active() {\n const bps = current();\n return computed(() => bps.value.length === 0 ? \"\" : bps.value.at(-1));\n }\n });\n}\n\nfunction useBroadcastChannel(options) {\n const {\n name,\n window = defaultWindow\n } = options;\n const isSupported = useSupported(() => window && \"BroadcastChannel\" in window);\n const isClosed = ref(false);\n const channel = ref();\n const data = ref();\n const error = shallowRef(null);\n const post = (data2) => {\n if (channel.value)\n channel.value.postMessage(data2);\n };\n const close = () => {\n if (channel.value)\n channel.value.close();\n isClosed.value = true;\n };\n if (isSupported.value) {\n tryOnMounted(() => {\n error.value = null;\n channel.value = new BroadcastChannel(name);\n channel.value.addEventListener(\"message\", (e) => {\n data.value = e.data;\n }, { passive: true });\n channel.value.addEventListener(\"messageerror\", (e) => {\n error.value = e;\n }, { passive: true });\n channel.value.addEventListener(\"close\", () => {\n isClosed.value = true;\n });\n });\n }\n tryOnScopeDispose(() => {\n close();\n });\n return {\n isSupported,\n channel,\n data,\n post,\n close,\n error,\n isClosed\n };\n}\n\nconst WRITABLE_PROPERTIES = [\n \"hash\",\n \"host\",\n \"hostname\",\n \"href\",\n \"pathname\",\n \"port\",\n \"protocol\",\n \"search\"\n];\nfunction useBrowserLocation(options = {}) {\n const { window = defaultWindow } = options;\n const refs = Object.fromEntries(\n WRITABLE_PROPERTIES.map((key) => [key, ref()])\n );\n for (const [key, ref2] of objectEntries(refs)) {\n watch(ref2, (value) => {\n if (!(window == null ? void 0 : window.location) || window.location[key] === value)\n return;\n window.location[key] = value;\n });\n }\n const buildState = (trigger) => {\n var _a;\n const { state: state2, length } = (window == null ? void 0 : window.history) || {};\n const { origin } = (window == null ? void 0 : window.location) || {};\n for (const key of WRITABLE_PROPERTIES)\n refs[key].value = (_a = window == null ? void 0 : window.location) == null ? void 0 : _a[key];\n return reactive({\n trigger,\n state: state2,\n length,\n origin,\n ...refs\n });\n };\n const state = ref(buildState(\"load\"));\n if (window) {\n useEventListener(window, \"popstate\", () => state.value = buildState(\"popstate\"), { passive: true });\n useEventListener(window, \"hashchange\", () => state.value = buildState(\"hashchange\"), { passive: true });\n }\n return state;\n}\n\nfunction useCached(refValue, comparator = (a, b) => a === b, watchOptions) {\n const cachedValue = ref(refValue.value);\n watch(() => refValue.value, (value) => {\n if (!comparator(value, cachedValue.value))\n cachedValue.value = value;\n }, watchOptions);\n return cachedValue;\n}\n\nfunction usePermission(permissionDesc, options = {}) {\n const {\n controls = false,\n navigator = defaultNavigator\n } = options;\n const isSupported = useSupported(() => navigator && \"permissions\" in navigator);\n let permissionStatus;\n const desc = typeof permissionDesc === \"string\" ? { name: permissionDesc } : permissionDesc;\n const state = ref();\n const onChange = () => {\n if (permissionStatus)\n state.value = permissionStatus.state;\n };\n const query = createSingletonPromise(async () => {\n if (!isSupported.value)\n return;\n if (!permissionStatus) {\n try {\n permissionStatus = await navigator.permissions.query(desc);\n useEventListener(permissionStatus, \"change\", onChange);\n onChange();\n } catch (e) {\n state.value = \"prompt\";\n }\n }\n return permissionStatus;\n });\n query();\n if (controls) {\n return {\n state,\n isSupported,\n query\n };\n } else {\n return state;\n }\n}\n\nfunction useClipboard(options = {}) {\n const {\n navigator = defaultNavigator,\n read = false,\n source,\n copiedDuring = 1500,\n legacy = false\n } = options;\n const isClipboardApiSupported = useSupported(() => navigator && \"clipboard\" in navigator);\n const permissionRead = usePermission(\"clipboard-read\");\n const permissionWrite = usePermission(\"clipboard-write\");\n const isSupported = computed(() => isClipboardApiSupported.value || legacy);\n const text = ref(\"\");\n const copied = ref(false);\n const timeout = useTimeoutFn(() => copied.value = false, copiedDuring);\n function updateText() {\n if (isClipboardApiSupported.value && isAllowed(permissionRead.value)) {\n navigator.clipboard.readText().then((value) => {\n text.value = value;\n });\n } else {\n text.value = legacyRead();\n }\n }\n if (isSupported.value && read)\n useEventListener([\"copy\", \"cut\"], updateText);\n async function copy(value = toValue(source)) {\n if (isSupported.value && value != null) {\n if (isClipboardApiSupported.value && isAllowed(permissionWrite.value))\n await navigator.clipboard.writeText(value);\n else\n legacyCopy(value);\n text.value = value;\n copied.value = true;\n timeout.start();\n }\n }\n function legacyCopy(value) {\n const ta = document.createElement(\"textarea\");\n ta.value = value != null ? value : \"\";\n ta.style.position = \"absolute\";\n ta.style.opacity = \"0\";\n document.body.appendChild(ta);\n ta.select();\n document.execCommand(\"copy\");\n ta.remove();\n }\n function legacyRead() {\n var _a, _b, _c;\n return (_c = (_b = (_a = document == null ? void 0 : document.getSelection) == null ? void 0 : _a.call(document)) == null ? void 0 : _b.toString()) != null ? _c : \"\";\n }\n function isAllowed(status) {\n return status === \"granted\" || status === \"prompt\";\n }\n return {\n isSupported,\n text,\n copied,\n copy\n };\n}\n\nfunction useClipboardItems(options = {}) {\n const {\n navigator = defaultNavigator,\n read = false,\n source,\n copiedDuring = 1500\n } = options;\n const isSupported = useSupported(() => navigator && \"clipboard\" in navigator);\n const content = ref([]);\n const copied = ref(false);\n const timeout = useTimeoutFn(() => copied.value = false, copiedDuring);\n function updateContent() {\n if (isSupported.value) {\n navigator.clipboard.read().then((items) => {\n content.value = items;\n });\n }\n }\n if (isSupported.value && read)\n useEventListener([\"copy\", \"cut\"], updateContent);\n async function copy(value = toValue(source)) {\n if (isSupported.value && value != null) {\n await navigator.clipboard.write(value);\n content.value = value;\n copied.value = true;\n timeout.start();\n }\n }\n return {\n isSupported,\n content,\n copied,\n copy\n };\n}\n\nfunction cloneFnJSON(source) {\n return JSON.parse(JSON.stringify(source));\n}\nfunction useCloned(source, options = {}) {\n const cloned = ref({});\n const {\n manual,\n clone = cloneFnJSON,\n // watch options\n deep = true,\n immediate = true\n } = options;\n function sync() {\n cloned.value = clone(toValue(source));\n }\n if (!manual && (isRef(source) || typeof source === \"function\")) {\n watch(source, sync, {\n ...options,\n deep,\n immediate\n });\n } else {\n sync();\n }\n return { cloned, sync };\n}\n\nconst _global = typeof globalThis !== \"undefined\" ? globalThis : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : {};\nconst globalKey = \"__vueuse_ssr_handlers__\";\nconst handlers = /* @__PURE__ */ getHandlers();\nfunction getHandlers() {\n if (!(globalKey in _global))\n _global[globalKey] = _global[globalKey] || {};\n return _global[globalKey];\n}\nfunction getSSRHandler(key, fallback) {\n return handlers[key] || fallback;\n}\nfunction setSSRHandler(key, fn) {\n handlers[key] = fn;\n}\n\nfunction guessSerializerType(rawInit) {\n return rawInit == null ? \"any\" : rawInit instanceof Set ? \"set\" : rawInit instanceof Map ? \"map\" : rawInit instanceof Date ? \"date\" : typeof rawInit === \"boolean\" ? \"boolean\" : typeof rawInit === \"string\" ? \"string\" : typeof rawInit === \"object\" ? \"object\" : !Number.isNaN(rawInit) ? \"number\" : \"any\";\n}\n\nconst StorageSerializers = {\n boolean: {\n read: (v) => v === \"true\",\n write: (v) => String(v)\n },\n object: {\n read: (v) => JSON.parse(v),\n write: (v) => JSON.stringify(v)\n },\n number: {\n read: (v) => Number.parseFloat(v),\n write: (v) => String(v)\n },\n any: {\n read: (v) => v,\n write: (v) => String(v)\n },\n string: {\n read: (v) => v,\n write: (v) => String(v)\n },\n map: {\n read: (v) => new Map(JSON.parse(v)),\n write: (v) => JSON.stringify(Array.from(v.entries()))\n },\n set: {\n read: (v) => new Set(JSON.parse(v)),\n write: (v) => JSON.stringify(Array.from(v))\n },\n date: {\n read: (v) => new Date(v),\n write: (v) => v.toISOString()\n }\n};\nconst customStorageEventName = \"vueuse-storage\";\nfunction useStorage(key, defaults, storage, options = {}) {\n var _a;\n const {\n flush = \"pre\",\n deep = true,\n listenToStorageChanges = true,\n writeDefaults = true,\n mergeDefaults = false,\n shallow,\n window = defaultWindow,\n eventFilter,\n onError = (e) => {\n console.error(e);\n },\n initOnMounted\n } = options;\n const data = (shallow ? shallowRef : ref)(typeof defaults === \"function\" ? defaults() : defaults);\n if (!storage) {\n try {\n storage = getSSRHandler(\"getDefaultStorage\", () => {\n var _a2;\n return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n })();\n } catch (e) {\n onError(e);\n }\n }\n if (!storage)\n return data;\n const rawInit = toValue(defaults);\n const type = guessSerializerType(rawInit);\n const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n const { pause: pauseWatch, resume: resumeWatch } = pausableWatch(\n data,\n () => write(data.value),\n { flush, deep, eventFilter }\n );\n if (window && listenToStorageChanges) {\n tryOnMounted(() => {\n useEventListener(window, \"storage\", update);\n useEventListener(window, customStorageEventName, updateFromCustomEvent);\n if (initOnMounted)\n update();\n });\n }\n if (!initOnMounted)\n update();\n function dispatchWriteEvent(oldValue, newValue) {\n if (window) {\n window.dispatchEvent(new CustomEvent(customStorageEventName, {\n detail: {\n key,\n oldValue,\n newValue,\n storageArea: storage\n }\n }));\n }\n }\n function write(v) {\n try {\n const oldValue = storage.getItem(key);\n if (v == null) {\n dispatchWriteEvent(oldValue, null);\n storage.removeItem(key);\n } else {\n const serialized = serializer.write(v);\n if (oldValue !== serialized) {\n storage.setItem(key, serialized);\n dispatchWriteEvent(oldValue, serialized);\n }\n }\n } catch (e) {\n onError(e);\n }\n }\n function read(event) {\n const rawValue = event ? event.newValue : storage.getItem(key);\n if (rawValue == null) {\n if (writeDefaults && rawInit != null)\n storage.setItem(key, serializer.write(rawInit));\n return rawInit;\n } else if (!event && mergeDefaults) {\n const value = serializer.read(rawValue);\n if (typeof mergeDefaults === \"function\")\n return mergeDefaults(value, rawInit);\n else if (type === \"object\" && !Array.isArray(value))\n return { ...rawInit, ...value };\n return value;\n } else if (typeof rawValue !== \"string\") {\n return rawValue;\n } else {\n return serializer.read(rawValue);\n }\n }\n function update(event) {\n if (event && event.storageArea !== storage)\n return;\n if (event && event.key == null) {\n data.value = rawInit;\n return;\n }\n if (event && event.key !== key)\n return;\n pauseWatch();\n try {\n if ((event == null ? void 0 : event.newValue) !== serializer.write(data.value))\n data.value = read(event);\n } catch (e) {\n onError(e);\n } finally {\n if (event)\n nextTick(resumeWatch);\n else\n resumeWatch();\n }\n }\n function updateFromCustomEvent(event) {\n update(event.detail);\n }\n return data;\n}\n\nfunction usePreferredDark(options) {\n return useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n}\n\nfunction useColorMode(options = {}) {\n const {\n selector = \"html\",\n attribute = \"class\",\n initialValue = \"auto\",\n window = defaultWindow,\n storage,\n storageKey = \"vueuse-color-scheme\",\n listenToStorageChanges = true,\n storageRef,\n emitAuto,\n disableTransition = true\n } = options;\n const modes = {\n auto: \"\",\n light: \"light\",\n dark: \"dark\",\n ...options.modes || {}\n };\n const preferredDark = usePreferredDark({ window });\n const system = computed(() => preferredDark.value ? \"dark\" : \"light\");\n const store = storageRef || (storageKey == null ? toRef(initialValue) : useStorage(storageKey, initialValue, storage, { window, listenToStorageChanges }));\n const state = computed(() => store.value === \"auto\" ? system.value : store.value);\n const updateHTMLAttrs = getSSRHandler(\n \"updateHTMLAttrs\",\n (selector2, attribute2, value) => {\n const el = typeof selector2 === \"string\" ? window == null ? void 0 : window.document.querySelector(selector2) : unrefElement(selector2);\n if (!el)\n return;\n let style;\n if (disableTransition) {\n style = window.document.createElement(\"style\");\n const styleString = \"*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}\";\n style.appendChild(document.createTextNode(styleString));\n window.document.head.appendChild(style);\n }\n if (attribute2 === \"class\") {\n const current = value.split(/\\s/g);\n Object.values(modes).flatMap((i) => (i || \"\").split(/\\s/g)).filter(Boolean).forEach((v) => {\n if (current.includes(v))\n el.classList.add(v);\n else\n el.classList.remove(v);\n });\n } else {\n el.setAttribute(attribute2, value);\n }\n if (disableTransition) {\n window.getComputedStyle(style).opacity;\n document.head.removeChild(style);\n }\n }\n );\n function defaultOnChanged(mode) {\n var _a;\n updateHTMLAttrs(selector, attribute, (_a = modes[mode]) != null ? _a : mode);\n }\n function onChanged(mode) {\n if (options.onChanged)\n options.onChanged(mode, defaultOnChanged);\n else\n defaultOnChanged(mode);\n }\n watch(state, onChanged, { flush: \"post\", immediate: true });\n tryOnMounted(() => onChanged(state.value));\n const auto = computed({\n get() {\n return emitAuto ? store.value : state.value;\n },\n set(v) {\n store.value = v;\n }\n });\n try {\n return Object.assign(auto, { store, system, state });\n } catch (e) {\n return auto;\n }\n}\n\nfunction useConfirmDialog(revealed = ref(false)) {\n const confirmHook = createEventHook();\n const cancelHook = createEventHook();\n const revealHook = createEventHook();\n let _resolve = noop;\n const reveal = (data) => {\n revealHook.trigger(data);\n revealed.value = true;\n return new Promise((resolve) => {\n _resolve = resolve;\n });\n };\n const confirm = (data) => {\n revealed.value = false;\n confirmHook.trigger(data);\n _resolve({ data, isCanceled: false });\n };\n const cancel = (data) => {\n revealed.value = false;\n cancelHook.trigger(data);\n _resolve({ data, isCanceled: true });\n };\n return {\n isRevealed: computed(() => revealed.value),\n reveal,\n confirm,\n cancel,\n onReveal: revealHook.on,\n onConfirm: confirmHook.on,\n onCancel: cancelHook.on\n };\n}\n\nfunction useCssVar(prop, target, options = {}) {\n const { window = defaultWindow, initialValue = \"\", observe = false } = options;\n const variable = ref(initialValue);\n const elRef = computed(() => {\n var _a;\n return unrefElement(target) || ((_a = window == null ? void 0 : window.document) == null ? void 0 : _a.documentElement);\n });\n function updateCssVar() {\n var _a;\n const key = toValue(prop);\n const el = toValue(elRef);\n if (el && window) {\n const value = (_a = window.getComputedStyle(el).getPropertyValue(key)) == null ? void 0 : _a.trim();\n variable.value = value || initialValue;\n }\n }\n if (observe) {\n useMutationObserver(elRef, updateCssVar, {\n attributeFilter: [\"style\", \"class\"],\n window\n });\n }\n watch(\n [elRef, () => toValue(prop)],\n updateCssVar,\n { immediate: true }\n );\n watch(\n variable,\n (val) => {\n var _a;\n if ((_a = elRef.value) == null ? void 0 : _a.style)\n elRef.value.style.setProperty(toValue(prop), val);\n }\n );\n return variable;\n}\n\nfunction useCurrentElement(rootComponent) {\n const vm = getCurrentInstance();\n const currentElement = computedWithControl(\n () => null,\n () => rootComponent ? unrefElement(rootComponent) : vm.proxy.$el\n );\n onUpdated(currentElement.trigger);\n onMounted(currentElement.trigger);\n return currentElement;\n}\n\nfunction useCycleList(list, options) {\n const state = shallowRef(getInitialValue());\n const listRef = toRef(list);\n const index = computed({\n get() {\n var _a;\n const targetList = listRef.value;\n let index2 = (options == null ? void 0 : options.getIndexOf) ? options.getIndexOf(state.value, targetList) : targetList.indexOf(state.value);\n if (index2 < 0)\n index2 = (_a = options == null ? void 0 : options.fallbackIndex) != null ? _a : 0;\n return index2;\n },\n set(v) {\n set(v);\n }\n });\n function set(i) {\n const targetList = listRef.value;\n const length = targetList.length;\n const index2 = (i % length + length) % length;\n const value = targetList[index2];\n state.value = value;\n return value;\n }\n function shift(delta = 1) {\n return set(index.value + delta);\n }\n function next(n = 1) {\n return shift(n);\n }\n function prev(n = 1) {\n return shift(-n);\n }\n function getInitialValue() {\n var _a, _b;\n return (_b = toValue((_a = options == null ? void 0 : options.initialValue) != null ? _a : toValue(list)[0])) != null ? _b : void 0;\n }\n watch(listRef, () => set(index.value));\n return {\n state,\n index,\n next,\n prev,\n go: set\n };\n}\n\nfunction useDark(options = {}) {\n const {\n valueDark = \"dark\",\n valueLight = \"\",\n window = defaultWindow\n } = options;\n const mode = useColorMode({\n ...options,\n onChanged: (mode2, defaultHandler) => {\n var _a;\n if (options.onChanged)\n (_a = options.onChanged) == null ? void 0 : _a.call(options, mode2 === \"dark\", defaultHandler, mode2);\n else\n defaultHandler(mode2);\n },\n modes: {\n dark: valueDark,\n light: valueLight\n }\n });\n const system = computed(() => {\n if (mode.system) {\n return mode.system.value;\n } else {\n const preferredDark = usePreferredDark({ window });\n return preferredDark.value ? \"dark\" : \"light\";\n }\n });\n const isDark = computed({\n get() {\n return mode.value === \"dark\";\n },\n set(v) {\n const modeVal = v ? \"dark\" : \"light\";\n if (system.value === modeVal)\n mode.value = \"auto\";\n else\n mode.value = modeVal;\n }\n });\n return isDark;\n}\n\nfunction fnBypass(v) {\n return v;\n}\nfunction fnSetSource(source, value) {\n return source.value = value;\n}\nfunction defaultDump(clone) {\n return clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\nfunction defaultParse(clone) {\n return clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\nfunction useManualRefHistory(source, options = {}) {\n const {\n clone = false,\n dump = defaultDump(clone),\n parse = defaultParse(clone),\n setSource = fnSetSource\n } = options;\n function _createHistoryRecord() {\n return markRaw({\n snapshot: dump(source.value),\n timestamp: timestamp()\n });\n }\n const last = ref(_createHistoryRecord());\n const undoStack = ref([]);\n const redoStack = ref([]);\n const _setSource = (record) => {\n setSource(source, parse(record.snapshot));\n last.value = record;\n };\n const commit = () => {\n undoStack.value.unshift(last.value);\n last.value = _createHistoryRecord();\n if (options.capacity && undoStack.value.length > options.capacity)\n undoStack.value.splice(options.capacity, Number.POSITIVE_INFINITY);\n if (redoStack.value.length)\n redoStack.value.splice(0, redoStack.value.length);\n };\n const clear = () => {\n undoStack.value.splice(0, undoStack.value.length);\n redoStack.value.splice(0, redoStack.value.length);\n };\n const undo = () => {\n const state = undoStack.value.shift();\n if (state) {\n redoStack.value.unshift(last.value);\n _setSource(state);\n }\n };\n const redo = () => {\n const state = redoStack.value.shift();\n if (state) {\n undoStack.value.unshift(last.value);\n _setSource(state);\n }\n };\n const reset = () => {\n _setSource(last.value);\n };\n const history = computed(() => [last.value, ...undoStack.value]);\n const canUndo = computed(() => undoStack.value.length > 0);\n const canRedo = computed(() => redoStack.value.length > 0);\n return {\n source,\n undoStack,\n redoStack,\n last,\n history,\n canUndo,\n canRedo,\n clear,\n commit,\n reset,\n undo,\n redo\n };\n}\n\nfunction useRefHistory(source, options = {}) {\n const {\n deep = false,\n flush = \"pre\",\n eventFilter\n } = options;\n const {\n eventFilter: composedFilter,\n pause,\n resume: resumeTracking,\n isActive: isTracking\n } = pausableFilter(eventFilter);\n const {\n ignoreUpdates,\n ignorePrevAsyncUpdates,\n stop\n } = watchIgnorable(\n source,\n commit,\n { deep, flush, eventFilter: composedFilter }\n );\n function setSource(source2, value) {\n ignorePrevAsyncUpdates();\n ignoreUpdates(() => {\n source2.value = value;\n });\n }\n const manualHistory = useManualRefHistory(source, { ...options, clone: options.clone || deep, setSource });\n const { clear, commit: manualCommit } = manualHistory;\n function commit() {\n ignorePrevAsyncUpdates();\n manualCommit();\n }\n function resume(commitNow) {\n resumeTracking();\n if (commitNow)\n commit();\n }\n function batch(fn) {\n let canceled = false;\n const cancel = () => canceled = true;\n ignoreUpdates(() => {\n fn(cancel);\n });\n if (!canceled)\n commit();\n }\n function dispose() {\n stop();\n clear();\n }\n return {\n ...manualHistory,\n isTracking,\n pause,\n resume,\n commit,\n batch,\n dispose\n };\n}\n\nfunction useDebouncedRefHistory(source, options = {}) {\n const filter = options.debounce ? debounceFilter(options.debounce) : void 0;\n const history = useRefHistory(source, { ...options, eventFilter: filter });\n return {\n ...history\n };\n}\n\nfunction useDeviceMotion(options = {}) {\n const {\n window = defaultWindow,\n eventFilter = bypassFilter\n } = options;\n const acceleration = ref({ x: null, y: null, z: null });\n const rotationRate = ref({ alpha: null, beta: null, gamma: null });\n const interval = ref(0);\n const accelerationIncludingGravity = ref({\n x: null,\n y: null,\n z: null\n });\n if (window) {\n const onDeviceMotion = createFilterWrapper(\n eventFilter,\n (event) => {\n acceleration.value = event.acceleration;\n accelerationIncludingGravity.value = event.accelerationIncludingGravity;\n rotationRate.value = event.rotationRate;\n interval.value = event.interval;\n }\n );\n useEventListener(window, \"devicemotion\", onDeviceMotion);\n }\n return {\n acceleration,\n accelerationIncludingGravity,\n rotationRate,\n interval\n };\n}\n\nfunction useDeviceOrientation(options = {}) {\n const { window = defaultWindow } = options;\n const isSupported = useSupported(() => window && \"DeviceOrientationEvent\" in window);\n const isAbsolute = ref(false);\n const alpha = ref(null);\n const beta = ref(null);\n const gamma = ref(null);\n if (window && isSupported.value) {\n useEventListener(window, \"deviceorientation\", (event) => {\n isAbsolute.value = event.absolute;\n alpha.value = event.alpha;\n beta.value = event.beta;\n gamma.value = event.gamma;\n });\n }\n return {\n isSupported,\n isAbsolute,\n alpha,\n beta,\n gamma\n };\n}\n\nfunction useDevicePixelRatio(options = {}) {\n const {\n window = defaultWindow\n } = options;\n const pixelRatio = ref(1);\n if (window) {\n let observe2 = function() {\n pixelRatio.value = window.devicePixelRatio;\n cleanup2();\n media = window.matchMedia(`(resolution: ${pixelRatio.value}dppx)`);\n media.addEventListener(\"change\", observe2, { once: true });\n }, cleanup2 = function() {\n media == null ? void 0 : media.removeEventListener(\"change\", observe2);\n };\n let media;\n observe2();\n tryOnScopeDispose(cleanup2);\n }\n return { pixelRatio };\n}\n\nfunction useDevicesList(options = {}) {\n const {\n navigator = defaultNavigator,\n requestPermissions = false,\n constraints = { audio: true, video: true },\n onUpdated\n } = options;\n const devices = ref([]);\n const videoInputs = computed(() => devices.value.filter((i) => i.kind === \"videoinput\"));\n const audioInputs = computed(() => devices.value.filter((i) => i.kind === \"audioinput\"));\n const audioOutputs = computed(() => devices.value.filter((i) => i.kind === \"audiooutput\"));\n const isSupported = useSupported(() => navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices);\n const permissionGranted = ref(false);\n let stream;\n async function update() {\n if (!isSupported.value)\n return;\n devices.value = await navigator.mediaDevices.enumerateDevices();\n onUpdated == null ? void 0 : onUpdated(devices.value);\n if (stream) {\n stream.getTracks().forEach((t) => t.stop());\n stream = null;\n }\n }\n async function ensurePermissions() {\n if (!isSupported.value)\n return false;\n if (permissionGranted.value)\n return true;\n const { state, query } = usePermission(\"camera\", { controls: true });\n await query();\n if (state.value !== \"granted\") {\n stream = await navigator.mediaDevices.getUserMedia(constraints);\n update();\n permissionGranted.value = true;\n } else {\n permissionGranted.value = true;\n }\n return permissionGranted.value;\n }\n if (isSupported.value) {\n if (requestPermissions)\n ensurePermissions();\n useEventListener(navigator.mediaDevices, \"devicechange\", update);\n update();\n }\n return {\n devices,\n ensurePermissions,\n permissionGranted,\n videoInputs,\n audioInputs,\n audioOutputs,\n isSupported\n };\n}\n\nfunction useDisplayMedia(options = {}) {\n var _a;\n const enabled = ref((_a = options.enabled) != null ? _a : false);\n const video = options.video;\n const audio = options.audio;\n const { navigator = defaultNavigator } = options;\n const isSupported = useSupported(() => {\n var _a2;\n return (_a2 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a2.getDisplayMedia;\n });\n const constraint = { audio, video };\n const stream = shallowRef();\n async function _start() {\n var _a2;\n if (!isSupported.value || stream.value)\n return;\n stream.value = await navigator.mediaDevices.getDisplayMedia(constraint);\n (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.addEventListener(\"ended\", stop));\n return stream.value;\n }\n async function _stop() {\n var _a2;\n (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop());\n stream.value = void 0;\n }\n function stop() {\n _stop();\n enabled.value = false;\n }\n async function start() {\n await _start();\n if (stream.value)\n enabled.value = true;\n return stream.value;\n }\n watch(\n enabled,\n (v) => {\n if (v)\n _start();\n else\n _stop();\n },\n { immediate: true }\n );\n return {\n isSupported,\n stream,\n start,\n stop,\n enabled\n };\n}\n\nfunction useDocumentVisibility(options = {}) {\n const { document = defaultDocument } = options;\n if (!document)\n return ref(\"visible\");\n const visibility = ref(document.visibilityState);\n useEventListener(document, \"visibilitychange\", () => {\n visibility.value = document.visibilityState;\n });\n return visibility;\n}\n\nfunction useDraggable(target, options = {}) {\n var _a, _b;\n const {\n pointerTypes,\n preventDefault,\n stopPropagation,\n exact,\n onMove,\n onEnd,\n onStart,\n initialValue,\n axis = \"both\",\n draggingElement = defaultWindow,\n containerElement,\n handle: draggingHandle = target\n } = options;\n const position = ref(\n (_a = toValue(initialValue)) != null ? _a : { x: 0, y: 0 }\n );\n const pressedDelta = ref();\n const filterEvent = (e) => {\n if (pointerTypes)\n return pointerTypes.includes(e.pointerType);\n return true;\n };\n const handleEvent = (e) => {\n if (toValue(preventDefault))\n e.preventDefault();\n if (toValue(stopPropagation))\n e.stopPropagation();\n };\n const start = (e) => {\n var _a2;\n if (e.button !== 0)\n return;\n if (toValue(options.disabled) || !filterEvent(e))\n return;\n if (toValue(exact) && e.target !== toValue(target))\n return;\n const container = toValue(containerElement);\n const containerRect = (_a2 = container == null ? void 0 : container.getBoundingClientRect) == null ? void 0 : _a2.call(container);\n const targetRect = toValue(target).getBoundingClientRect();\n const pos = {\n x: e.clientX - (container ? targetRect.left - containerRect.left + container.scrollLeft : targetRect.left),\n y: e.clientY - (container ? targetRect.top - containerRect.top + container.scrollTop : targetRect.top)\n };\n if ((onStart == null ? void 0 : onStart(pos, e)) === false)\n return;\n pressedDelta.value = pos;\n handleEvent(e);\n };\n const move = (e) => {\n if (toValue(options.disabled) || !filterEvent(e))\n return;\n if (!pressedDelta.value)\n return;\n const container = toValue(containerElement);\n const targetRect = toValue(target).getBoundingClientRect();\n let { x, y } = position.value;\n if (axis === \"x\" || axis === \"both\") {\n x = e.clientX - pressedDelta.value.x;\n if (container)\n x = Math.min(Math.max(0, x), container.scrollWidth - targetRect.width);\n }\n if (axis === \"y\" || axis === \"both\") {\n y = e.clientY - pressedDelta.value.y;\n if (container)\n y = Math.min(Math.max(0, y), container.scrollHeight - targetRect.height);\n }\n position.value = {\n x,\n y\n };\n onMove == null ? void 0 : onMove(position.value, e);\n handleEvent(e);\n };\n const end = (e) => {\n if (toValue(options.disabled) || !filterEvent(e))\n return;\n if (!pressedDelta.value)\n return;\n pressedDelta.value = void 0;\n onEnd == null ? void 0 : onEnd(position.value, e);\n handleEvent(e);\n };\n if (isClient) {\n const config = { capture: (_b = options.capture) != null ? _b : true };\n useEventListener(draggingHandle, \"pointerdown\", start, config);\n useEventListener(draggingElement, \"pointermove\", move, config);\n useEventListener(draggingElement, \"pointerup\", end, config);\n }\n return {\n ...toRefs(position),\n position,\n isDragging: computed(() => !!pressedDelta.value),\n style: computed(\n () => `left:${position.value.x}px;top:${position.value.y}px;`\n )\n };\n}\n\nfunction useDropZone(target, options = {}) {\n const isOverDropZone = ref(false);\n const files = shallowRef(null);\n let counter = 0;\n let isDataTypeIncluded = true;\n if (isClient) {\n const _options = typeof options === \"function\" ? { onDrop: options } : options;\n const getFiles = (event) => {\n var _a, _b;\n const list = Array.from((_b = (_a = event.dataTransfer) == null ? void 0 : _a.files) != null ? _b : []);\n return files.value = list.length === 0 ? null : list;\n };\n useEventListener(target, \"dragenter\", (event) => {\n var _a, _b;\n const types = Array.from(((_a = event == null ? void 0 : event.dataTransfer) == null ? void 0 : _a.items) || []).map((i) => i.kind === \"file\" ? i.type : null).filter(notNullish);\n if (_options.dataTypes && event.dataTransfer) {\n const dataTypes = unref(_options.dataTypes);\n isDataTypeIncluded = typeof dataTypes === \"function\" ? dataTypes(types) : dataTypes ? dataTypes.some((item) => types.includes(item)) : true;\n if (!isDataTypeIncluded)\n return;\n }\n event.preventDefault();\n counter += 1;\n isOverDropZone.value = true;\n (_b = _options.onEnter) == null ? void 0 : _b.call(_options, getFiles(event), event);\n });\n useEventListener(target, \"dragover\", (event) => {\n var _a;\n if (!isDataTypeIncluded)\n return;\n event.preventDefault();\n (_a = _options.onOver) == null ? void 0 : _a.call(_options, getFiles(event), event);\n });\n useEventListener(target, \"dragleave\", (event) => {\n var _a;\n if (!isDataTypeIncluded)\n return;\n event.preventDefault();\n counter -= 1;\n if (counter === 0)\n isOverDropZone.value = false;\n (_a = _options.onLeave) == null ? void 0 : _a.call(_options, getFiles(event), event);\n });\n useEventListener(target, \"drop\", (event) => {\n var _a;\n event.preventDefault();\n counter = 0;\n isOverDropZone.value = false;\n (_a = _options.onDrop) == null ? void 0 : _a.call(_options, getFiles(event), event);\n });\n }\n return {\n files,\n isOverDropZone\n };\n}\n\nfunction useResizeObserver(target, callback, options = {}) {\n const { window = defaultWindow, ...observerOptions } = options;\n let observer;\n const isSupported = useSupported(() => window && \"ResizeObserver\" in window);\n const cleanup = () => {\n if (observer) {\n observer.disconnect();\n observer = void 0;\n }\n };\n const targets = computed(() => Array.isArray(target) ? target.map((el) => unrefElement(el)) : [unrefElement(target)]);\n const stopWatch = watch(\n targets,\n (els) => {\n cleanup();\n if (isSupported.value && window) {\n observer = new ResizeObserver(callback);\n for (const _el of els)\n _el && observer.observe(_el, observerOptions);\n }\n },\n { immediate: true, flush: \"post\" }\n );\n const stop = () => {\n cleanup();\n stopWatch();\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n stop\n };\n}\n\nfunction useElementBounding(target, options = {}) {\n const {\n reset = true,\n windowResize = true,\n windowScroll = true,\n immediate = true\n } = options;\n const height = ref(0);\n const bottom = ref(0);\n const left = ref(0);\n const right = ref(0);\n const top = ref(0);\n const width = ref(0);\n const x = ref(0);\n const y = ref(0);\n function update() {\n const el = unrefElement(target);\n if (!el) {\n if (reset) {\n height.value = 0;\n bottom.value = 0;\n left.value = 0;\n right.value = 0;\n top.value = 0;\n width.value = 0;\n x.value = 0;\n y.value = 0;\n }\n return;\n }\n const rect = el.getBoundingClientRect();\n height.value = rect.height;\n bottom.value = rect.bottom;\n left.value = rect.left;\n right.value = rect.right;\n top.value = rect.top;\n width.value = rect.width;\n x.value = rect.x;\n y.value = rect.y;\n }\n useResizeObserver(target, update);\n watch(() => unrefElement(target), (ele) => !ele && update());\n useMutationObserver(target, update, {\n attributeFilter: [\"style\", \"class\"]\n });\n if (windowScroll)\n useEventListener(\"scroll\", update, { capture: true, passive: true });\n if (windowResize)\n useEventListener(\"resize\", update, { passive: true });\n tryOnMounted(() => {\n if (immediate)\n update();\n });\n return {\n height,\n bottom,\n left,\n right,\n top,\n width,\n x,\n y,\n update\n };\n}\n\nfunction useElementByPoint(options) {\n const {\n x,\n y,\n document = defaultDocument,\n multiple,\n interval = \"requestAnimationFrame\",\n immediate = true\n } = options;\n const isSupported = useSupported(() => {\n if (toValue(multiple))\n return document && \"elementsFromPoint\" in document;\n return document && \"elementFromPoint\" in document;\n });\n const element = ref(null);\n const cb = () => {\n var _a, _b;\n element.value = toValue(multiple) ? (_a = document == null ? void 0 : document.elementsFromPoint(toValue(x), toValue(y))) != null ? _a : [] : (_b = document == null ? void 0 : document.elementFromPoint(toValue(x), toValue(y))) != null ? _b : null;\n };\n const controls = interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate });\n return {\n isSupported,\n element,\n ...controls\n };\n}\n\nfunction useElementHover(el, options = {}) {\n const {\n delayEnter = 0,\n delayLeave = 0,\n window = defaultWindow\n } = options;\n const isHovered = ref(false);\n let timer;\n const toggle = (entering) => {\n const delay = entering ? delayEnter : delayLeave;\n if (timer) {\n clearTimeout(timer);\n timer = void 0;\n }\n if (delay)\n timer = setTimeout(() => isHovered.value = entering, delay);\n else\n isHovered.value = entering;\n };\n if (!window)\n return isHovered;\n useEventListener(el, \"mouseenter\", () => toggle(true), { passive: true });\n useEventListener(el, \"mouseleave\", () => toggle(false), { passive: true });\n return isHovered;\n}\n\nfunction useElementSize(target, initialSize = { width: 0, height: 0 }, options = {}) {\n const { window = defaultWindow, box = \"content-box\" } = options;\n const isSVG = computed(() => {\n var _a, _b;\n return (_b = (_a = unrefElement(target)) == null ? void 0 : _a.namespaceURI) == null ? void 0 : _b.includes(\"svg\");\n });\n const width = ref(initialSize.width);\n const height = ref(initialSize.height);\n const { stop: stop1 } = useResizeObserver(\n target,\n ([entry]) => {\n const boxSize = box === \"border-box\" ? entry.borderBoxSize : box === \"content-box\" ? entry.contentBoxSize : entry.devicePixelContentBoxSize;\n if (window && isSVG.value) {\n const $elem = unrefElement(target);\n if ($elem) {\n const rect = $elem.getBoundingClientRect();\n width.value = rect.width;\n height.value = rect.height;\n }\n } else {\n if (boxSize) {\n const formatBoxSize = Array.isArray(boxSize) ? boxSize : [boxSize];\n width.value = formatBoxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0);\n height.value = formatBoxSize.reduce((acc, { blockSize }) => acc + blockSize, 0);\n } else {\n width.value = entry.contentRect.width;\n height.value = entry.contentRect.height;\n }\n }\n },\n options\n );\n tryOnMounted(() => {\n const ele = unrefElement(target);\n if (ele) {\n width.value = \"offsetWidth\" in ele ? ele.offsetWidth : initialSize.width;\n height.value = \"offsetHeight\" in ele ? ele.offsetHeight : initialSize.height;\n }\n });\n const stop2 = watch(\n () => unrefElement(target),\n (ele) => {\n width.value = ele ? initialSize.width : 0;\n height.value = ele ? initialSize.height : 0;\n }\n );\n function stop() {\n stop1();\n stop2();\n }\n return {\n width,\n height,\n stop\n };\n}\n\nfunction useIntersectionObserver(target, callback, options = {}) {\n const {\n root,\n rootMargin = \"0px\",\n threshold = 0.1,\n window = defaultWindow,\n immediate = true\n } = options;\n const isSupported = useSupported(() => window && \"IntersectionObserver\" in window);\n const targets = computed(() => {\n const _target = toValue(target);\n return (Array.isArray(_target) ? _target : [_target]).map(unrefElement).filter(notNullish);\n });\n let cleanup = noop;\n const isActive = ref(immediate);\n const stopWatch = isSupported.value ? watch(\n () => [targets.value, unrefElement(root), isActive.value],\n ([targets2, root2]) => {\n cleanup();\n if (!isActive.value)\n return;\n if (!targets2.length)\n return;\n const observer = new IntersectionObserver(\n callback,\n {\n root: unrefElement(root2),\n rootMargin,\n threshold\n }\n );\n targets2.forEach((el) => el && observer.observe(el));\n cleanup = () => {\n observer.disconnect();\n cleanup = noop;\n };\n },\n { immediate, flush: \"post\" }\n ) : noop;\n const stop = () => {\n cleanup();\n stopWatch();\n isActive.value = false;\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n isActive,\n pause() {\n cleanup();\n isActive.value = false;\n },\n resume() {\n isActive.value = true;\n },\n stop\n };\n}\n\nfunction useElementVisibility(element, options = {}) {\n const { window = defaultWindow, scrollTarget, threshold = 0 } = options;\n const elementIsVisible = ref(false);\n useIntersectionObserver(\n element,\n (intersectionObserverEntries) => {\n let isIntersecting = elementIsVisible.value;\n let latestTime = 0;\n for (const entry of intersectionObserverEntries) {\n if (entry.time >= latestTime) {\n latestTime = entry.time;\n isIntersecting = entry.isIntersecting;\n }\n }\n elementIsVisible.value = isIntersecting;\n },\n {\n root: scrollTarget,\n window,\n threshold\n }\n );\n return elementIsVisible;\n}\n\nconst events = /* @__PURE__ */ new Map();\n\nfunction useEventBus(key) {\n const scope = getCurrentScope();\n function on(listener) {\n var _a;\n const listeners = events.get(key) || /* @__PURE__ */ new Set();\n listeners.add(listener);\n events.set(key, listeners);\n const _off = () => off(listener);\n (_a = scope == null ? void 0 : scope.cleanups) == null ? void 0 : _a.push(_off);\n return _off;\n }\n function once(listener) {\n function _listener(...args) {\n off(_listener);\n listener(...args);\n }\n return on(_listener);\n }\n function off(listener) {\n const listeners = events.get(key);\n if (!listeners)\n return;\n listeners.delete(listener);\n if (!listeners.size)\n reset();\n }\n function reset() {\n events.delete(key);\n }\n function emit(event, payload) {\n var _a;\n (_a = events.get(key)) == null ? void 0 : _a.forEach((v) => v(event, payload));\n }\n return { on, once, off, emit, reset };\n}\n\nfunction resolveNestedOptions$1(options) {\n if (options === true)\n return {};\n return options;\n}\nfunction useEventSource(url, events = [], options = {}) {\n const event = ref(null);\n const data = ref(null);\n const status = ref(\"CONNECTING\");\n const eventSource = ref(null);\n const error = shallowRef(null);\n const urlRef = toRef(url);\n const lastEventId = shallowRef(null);\n let explicitlyClosed = false;\n let retried = 0;\n const {\n withCredentials = false,\n immediate = true\n } = options;\n const close = () => {\n if (isClient && eventSource.value) {\n eventSource.value.close();\n eventSource.value = null;\n status.value = \"CLOSED\";\n explicitlyClosed = true;\n }\n };\n const _init = () => {\n if (explicitlyClosed || typeof urlRef.value === \"undefined\")\n return;\n const es = new EventSource(urlRef.value, { withCredentials });\n status.value = \"CONNECTING\";\n eventSource.value = es;\n es.onopen = () => {\n status.value = \"OPEN\";\n error.value = null;\n };\n es.onerror = (e) => {\n status.value = \"CLOSED\";\n error.value = e;\n if (es.readyState === 2 && !explicitlyClosed && options.autoReconnect) {\n es.close();\n const {\n retries = -1,\n delay = 1e3,\n onFailed\n } = resolveNestedOptions$1(options.autoReconnect);\n retried += 1;\n if (typeof retries === \"number\" && (retries < 0 || retried < retries))\n setTimeout(_init, delay);\n else if (typeof retries === \"function\" && retries())\n setTimeout(_init, delay);\n else\n onFailed == null ? void 0 : onFailed();\n }\n };\n es.onmessage = (e) => {\n event.value = null;\n data.value = e.data;\n lastEventId.value = e.lastEventId;\n };\n for (const event_name of events) {\n useEventListener(es, event_name, (e) => {\n event.value = event_name;\n data.value = e.data || null;\n });\n }\n };\n const open = () => {\n if (!isClient)\n return;\n close();\n explicitlyClosed = false;\n retried = 0;\n _init();\n };\n if (immediate)\n watch(urlRef, open, { immediate: true });\n tryOnScopeDispose(close);\n return {\n eventSource,\n event,\n data,\n status,\n error,\n open,\n close,\n lastEventId\n };\n}\n\nfunction useEyeDropper(options = {}) {\n const { initialValue = \"\" } = options;\n const isSupported = useSupported(() => typeof window !== \"undefined\" && \"EyeDropper\" in window);\n const sRGBHex = ref(initialValue);\n async function open(openOptions) {\n if (!isSupported.value)\n return;\n const eyeDropper = new window.EyeDropper();\n const result = await eyeDropper.open(openOptions);\n sRGBHex.value = result.sRGBHex;\n return result;\n }\n return { isSupported, sRGBHex, open };\n}\n\nfunction useFavicon(newIcon = null, options = {}) {\n const {\n baseUrl = \"\",\n rel = \"icon\",\n document = defaultDocument\n } = options;\n const favicon = toRef(newIcon);\n const applyIcon = (icon) => {\n const elements = document == null ? void 0 : document.head.querySelectorAll(`link[rel*=\"${rel}\"]`);\n if (!elements || elements.length === 0) {\n const link = document == null ? void 0 : document.createElement(\"link\");\n if (link) {\n link.rel = rel;\n link.href = `${baseUrl}${icon}`;\n link.type = `image/${icon.split(\".\").pop()}`;\n document == null ? void 0 : document.head.append(link);\n }\n return;\n }\n elements == null ? void 0 : elements.forEach((el) => el.href = `${baseUrl}${icon}`);\n };\n watch(\n favicon,\n (i, o) => {\n if (typeof i === \"string\" && i !== o)\n applyIcon(i);\n },\n { immediate: true }\n );\n return favicon;\n}\n\nconst payloadMapping = {\n json: \"application/json\",\n text: \"text/plain\"\n};\nfunction isFetchOptions(obj) {\n return obj && containsProp(obj, \"immediate\", \"refetch\", \"initialData\", \"timeout\", \"beforeFetch\", \"afterFetch\", \"onFetchError\", \"fetch\", \"updateDataOnError\");\n}\nconst reAbsolute = /^(?:[a-z][a-z\\d+\\-.]*:)?\\/\\//i;\nfunction isAbsoluteURL(url) {\n return reAbsolute.test(url);\n}\nfunction headersToObject(headers) {\n if (typeof Headers !== \"undefined\" && headers instanceof Headers)\n return Object.fromEntries(headers.entries());\n return headers;\n}\nfunction combineCallbacks(combination, ...callbacks) {\n if (combination === \"overwrite\") {\n return async (ctx) => {\n const callback = callbacks[callbacks.length - 1];\n if (callback)\n return { ...ctx, ...await callback(ctx) };\n return ctx;\n };\n } else {\n return async (ctx) => {\n for (const callback of callbacks) {\n if (callback)\n ctx = { ...ctx, ...await callback(ctx) };\n }\n return ctx;\n };\n }\n}\nfunction createFetch(config = {}) {\n const _combination = config.combination || \"chain\";\n const _options = config.options || {};\n const _fetchOptions = config.fetchOptions || {};\n function useFactoryFetch(url, ...args) {\n const computedUrl = computed(() => {\n const baseUrl = toValue(config.baseUrl);\n const targetUrl = toValue(url);\n return baseUrl && !isAbsoluteURL(targetUrl) ? joinPaths(baseUrl, targetUrl) : targetUrl;\n });\n let options = _options;\n let fetchOptions = _fetchOptions;\n if (args.length > 0) {\n if (isFetchOptions(args[0])) {\n options = {\n ...options,\n ...args[0],\n beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[0].beforeFetch),\n afterFetch: combineCallbacks(_combination, _options.afterFetch, args[0].afterFetch),\n onFetchError: combineCallbacks(_combination, _options.onFetchError, args[0].onFetchError)\n };\n } else {\n fetchOptions = {\n ...fetchOptions,\n ...args[0],\n headers: {\n ...headersToObject(fetchOptions.headers) || {},\n ...headersToObject(args[0].headers) || {}\n }\n };\n }\n }\n if (args.length > 1 && isFetchOptions(args[1])) {\n options = {\n ...options,\n ...args[1],\n beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[1].beforeFetch),\n afterFetch: combineCallbacks(_combination, _options.afterFetch, args[1].afterFetch),\n onFetchError: combineCallbacks(_combination, _options.onFetchError, args[1].onFetchError)\n };\n }\n return useFetch(computedUrl, fetchOptions, options);\n }\n return useFactoryFetch;\n}\nfunction useFetch(url, ...args) {\n var _a;\n const supportsAbort = typeof AbortController === \"function\";\n let fetchOptions = {};\n let options = {\n immediate: true,\n refetch: false,\n timeout: 0,\n updateDataOnError: false\n };\n const config = {\n method: \"GET\",\n type: \"text\",\n payload: void 0\n };\n if (args.length > 0) {\n if (isFetchOptions(args[0]))\n options = { ...options, ...args[0] };\n else\n fetchOptions = args[0];\n }\n if (args.length > 1) {\n if (isFetchOptions(args[1]))\n options = { ...options, ...args[1] };\n }\n const {\n fetch = (_a = defaultWindow) == null ? void 0 : _a.fetch,\n initialData,\n timeout\n } = options;\n const responseEvent = createEventHook();\n const errorEvent = createEventHook();\n const finallyEvent = createEventHook();\n const isFinished = ref(false);\n const isFetching = ref(false);\n const aborted = ref(false);\n const statusCode = ref(null);\n const response = shallowRef(null);\n const error = shallowRef(null);\n const data = shallowRef(initialData || null);\n const canAbort = computed(() => supportsAbort && isFetching.value);\n let controller;\n let timer;\n const abort = () => {\n if (supportsAbort) {\n controller == null ? void 0 : controller.abort();\n controller = new AbortController();\n controller.signal.onabort = () => aborted.value = true;\n fetchOptions = {\n ...fetchOptions,\n signal: controller.signal\n };\n }\n };\n const loading = (isLoading) => {\n isFetching.value = isLoading;\n isFinished.value = !isLoading;\n };\n if (timeout)\n timer = useTimeoutFn(abort, timeout, { immediate: false });\n let executeCounter = 0;\n const execute = async (throwOnFailed = false) => {\n var _a2, _b;\n abort();\n loading(true);\n error.value = null;\n statusCode.value = null;\n aborted.value = false;\n executeCounter += 1;\n const currentExecuteCounter = executeCounter;\n const defaultFetchOptions = {\n method: config.method,\n headers: {}\n };\n if (config.payload) {\n const headers = headersToObject(defaultFetchOptions.headers);\n const payload = toValue(config.payload);\n if (!config.payloadType && payload && Object.getPrototypeOf(payload) === Object.prototype && !(payload instanceof FormData))\n config.payloadType = \"json\";\n if (config.payloadType)\n headers[\"Content-Type\"] = (_a2 = payloadMapping[config.payloadType]) != null ? _a2 : config.payloadType;\n defaultFetchOptions.body = config.payloadType === \"json\" ? JSON.stringify(payload) : payload;\n }\n let isCanceled = false;\n const context = {\n url: toValue(url),\n options: {\n ...defaultFetchOptions,\n ...fetchOptions\n },\n cancel: () => {\n isCanceled = true;\n }\n };\n if (options.beforeFetch)\n Object.assign(context, await options.beforeFetch(context));\n if (isCanceled || !fetch) {\n loading(false);\n return Promise.resolve(null);\n }\n let responseData = null;\n if (timer)\n timer.start();\n return fetch(\n context.url,\n {\n ...defaultFetchOptions,\n ...context.options,\n headers: {\n ...headersToObject(defaultFetchOptions.headers),\n ...headersToObject((_b = context.options) == null ? void 0 : _b.headers)\n }\n }\n ).then(async (fetchResponse) => {\n response.value = fetchResponse;\n statusCode.value = fetchResponse.status;\n responseData = await fetchResponse.clone()[config.type]();\n if (!fetchResponse.ok) {\n data.value = initialData || null;\n throw new Error(fetchResponse.statusText);\n }\n if (options.afterFetch) {\n ({ data: responseData } = await options.afterFetch({\n data: responseData,\n response: fetchResponse\n }));\n }\n data.value = responseData;\n responseEvent.trigger(fetchResponse);\n return fetchResponse;\n }).catch(async (fetchError) => {\n let errorData = fetchError.message || fetchError.name;\n if (options.onFetchError) {\n ({ error: errorData, data: responseData } = await options.onFetchError({\n data: responseData,\n error: fetchError,\n response: response.value\n }));\n }\n error.value = errorData;\n if (options.updateDataOnError)\n data.value = responseData;\n errorEvent.trigger(fetchError);\n if (throwOnFailed)\n throw fetchError;\n return null;\n }).finally(() => {\n if (currentExecuteCounter === executeCounter)\n loading(false);\n if (timer)\n timer.stop();\n finallyEvent.trigger(null);\n });\n };\n const refetch = toRef(options.refetch);\n watch(\n [\n refetch,\n toRef(url)\n ],\n ([refetch2]) => refetch2 && execute(),\n { deep: true }\n );\n const shell = {\n isFinished: readonly(isFinished),\n isFetching: readonly(isFetching),\n statusCode,\n response,\n error,\n data,\n canAbort,\n aborted,\n abort,\n execute,\n onFetchResponse: responseEvent.on,\n onFetchError: errorEvent.on,\n onFetchFinally: finallyEvent.on,\n // method\n get: setMethod(\"GET\"),\n put: setMethod(\"PUT\"),\n post: setMethod(\"POST\"),\n delete: setMethod(\"DELETE\"),\n patch: setMethod(\"PATCH\"),\n head: setMethod(\"HEAD\"),\n options: setMethod(\"OPTIONS\"),\n // type\n json: setType(\"json\"),\n text: setType(\"text\"),\n blob: setType(\"blob\"),\n arrayBuffer: setType(\"arrayBuffer\"),\n formData: setType(\"formData\")\n };\n function setMethod(method) {\n return (payload, payloadType) => {\n if (!isFetching.value) {\n config.method = method;\n config.payload = payload;\n config.payloadType = payloadType;\n if (isRef(config.payload)) {\n watch(\n [\n refetch,\n toRef(config.payload)\n ],\n ([refetch2]) => refetch2 && execute(),\n { deep: true }\n );\n }\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilFinished().then(onFulfilled, onRejected);\n }\n };\n }\n return void 0;\n };\n }\n function waitUntilFinished() {\n return new Promise((resolve, reject) => {\n until(isFinished).toBe(true).then(() => resolve(shell)).catch((error2) => reject(error2));\n });\n }\n function setType(type) {\n return () => {\n if (!isFetching.value) {\n config.type = type;\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilFinished().then(onFulfilled, onRejected);\n }\n };\n }\n return void 0;\n };\n }\n if (options.immediate)\n Promise.resolve().then(() => execute());\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilFinished().then(onFulfilled, onRejected);\n }\n };\n}\nfunction joinPaths(start, end) {\n if (!start.endsWith(\"/\") && !end.startsWith(\"/\"))\n return `${start}/${end}`;\n return `${start}${end}`;\n}\n\nconst DEFAULT_OPTIONS = {\n multiple: true,\n accept: \"*\",\n reset: false,\n directory: false\n};\nfunction useFileDialog(options = {}) {\n const {\n document = defaultDocument\n } = options;\n const files = ref(null);\n const { on: onChange, trigger } = createEventHook();\n let input;\n if (document) {\n input = document.createElement(\"input\");\n input.type = \"file\";\n input.onchange = (event) => {\n const result = event.target;\n files.value = result.files;\n trigger(files.value);\n };\n }\n const reset = () => {\n files.value = null;\n if (input && input.value) {\n input.value = \"\";\n trigger(null);\n }\n };\n const open = (localOptions) => {\n if (!input)\n return;\n const _options = {\n ...DEFAULT_OPTIONS,\n ...options,\n ...localOptions\n };\n input.multiple = _options.multiple;\n input.accept = _options.accept;\n input.webkitdirectory = _options.directory;\n if (hasOwn(_options, \"capture\"))\n input.capture = _options.capture;\n if (_options.reset)\n reset();\n input.click();\n };\n return {\n files: readonly(files),\n open,\n reset,\n onChange\n };\n}\n\nfunction useFileSystemAccess(options = {}) {\n const {\n window: _window = defaultWindow,\n dataType = \"Text\"\n } = options;\n const window = _window;\n const isSupported = useSupported(() => window && \"showSaveFilePicker\" in window && \"showOpenFilePicker\" in window);\n const fileHandle = ref();\n const data = ref();\n const file = ref();\n const fileName = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.name) != null ? _b : \"\";\n });\n const fileMIME = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.type) != null ? _b : \"\";\n });\n const fileSize = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.size) != null ? _b : 0;\n });\n const fileLastModified = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.lastModified) != null ? _b : 0;\n });\n async function open(_options = {}) {\n if (!isSupported.value)\n return;\n const [handle] = await window.showOpenFilePicker({ ...toValue(options), ..._options });\n fileHandle.value = handle;\n await updateData();\n }\n async function create(_options = {}) {\n if (!isSupported.value)\n return;\n fileHandle.value = await window.showSaveFilePicker({ ...options, ..._options });\n data.value = void 0;\n await updateData();\n }\n async function save(_options = {}) {\n if (!isSupported.value)\n return;\n if (!fileHandle.value)\n return saveAs(_options);\n if (data.value) {\n const writableStream = await fileHandle.value.createWritable();\n await writableStream.write(data.value);\n await writableStream.close();\n }\n await updateFile();\n }\n async function saveAs(_options = {}) {\n if (!isSupported.value)\n return;\n fileHandle.value = await window.showSaveFilePicker({ ...options, ..._options });\n if (data.value) {\n const writableStream = await fileHandle.value.createWritable();\n await writableStream.write(data.value);\n await writableStream.close();\n }\n await updateFile();\n }\n async function updateFile() {\n var _a;\n file.value = await ((_a = fileHandle.value) == null ? void 0 : _a.getFile());\n }\n async function updateData() {\n var _a, _b;\n await updateFile();\n const type = toValue(dataType);\n if (type === \"Text\")\n data.value = await ((_a = file.value) == null ? void 0 : _a.text());\n else if (type === \"ArrayBuffer\")\n data.value = await ((_b = file.value) == null ? void 0 : _b.arrayBuffer());\n else if (type === \"Blob\")\n data.value = file.value;\n }\n watch(() => toValue(dataType), updateData);\n return {\n isSupported,\n data,\n file,\n fileName,\n fileMIME,\n fileSize,\n fileLastModified,\n open,\n create,\n save,\n saveAs,\n updateData\n };\n}\n\nfunction useFocus(target, options = {}) {\n const { initialValue = false, focusVisible = false, preventScroll = false } = options;\n const innerFocused = ref(false);\n const targetElement = computed(() => unrefElement(target));\n useEventListener(targetElement, \"focus\", (event) => {\n var _a, _b;\n if (!focusVisible || ((_b = (_a = event.target).matches) == null ? void 0 : _b.call(_a, \":focus-visible\")))\n innerFocused.value = true;\n });\n useEventListener(targetElement, \"blur\", () => innerFocused.value = false);\n const focused = computed({\n get: () => innerFocused.value,\n set(value) {\n var _a, _b;\n if (!value && innerFocused.value)\n (_a = targetElement.value) == null ? void 0 : _a.blur();\n else if (value && !innerFocused.value)\n (_b = targetElement.value) == null ? void 0 : _b.focus({ preventScroll });\n }\n });\n watch(\n targetElement,\n () => {\n focused.value = initialValue;\n },\n { immediate: true, flush: \"post\" }\n );\n return { focused };\n}\n\nfunction useFocusWithin(target, options = {}) {\n const activeElement = useActiveElement(options);\n const targetElement = computed(() => unrefElement(target));\n const focused = computed(() => targetElement.value && activeElement.value ? targetElement.value.contains(activeElement.value) : false);\n return { focused };\n}\n\nfunction useFps(options) {\n var _a;\n const fps = ref(0);\n if (typeof performance === \"undefined\")\n return fps;\n const every = (_a = options == null ? void 0 : options.every) != null ? _a : 10;\n let last = performance.now();\n let ticks = 0;\n useRafFn(() => {\n ticks += 1;\n if (ticks >= every) {\n const now = performance.now();\n const diff = now - last;\n fps.value = Math.round(1e3 / (diff / ticks));\n last = now;\n ticks = 0;\n }\n });\n return fps;\n}\n\nconst eventHandlers = [\n \"fullscreenchange\",\n \"webkitfullscreenchange\",\n \"webkitendfullscreen\",\n \"mozfullscreenchange\",\n \"MSFullscreenChange\"\n];\nfunction useFullscreen(target, options = {}) {\n const {\n document = defaultDocument,\n autoExit = false\n } = options;\n const targetRef = computed(() => {\n var _a;\n return (_a = unrefElement(target)) != null ? _a : document == null ? void 0 : document.querySelector(\"html\");\n });\n const isFullscreen = ref(false);\n const requestMethod = computed(() => {\n return [\n \"requestFullscreen\",\n \"webkitRequestFullscreen\",\n \"webkitEnterFullscreen\",\n \"webkitEnterFullScreen\",\n \"webkitRequestFullScreen\",\n \"mozRequestFullScreen\",\n \"msRequestFullscreen\"\n ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n });\n const exitMethod = computed(() => {\n return [\n \"exitFullscreen\",\n \"webkitExitFullscreen\",\n \"webkitExitFullScreen\",\n \"webkitCancelFullScreen\",\n \"mozCancelFullScreen\",\n \"msExitFullscreen\"\n ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n });\n const fullscreenEnabled = computed(() => {\n return [\n \"fullScreen\",\n \"webkitIsFullScreen\",\n \"webkitDisplayingFullscreen\",\n \"mozFullScreen\",\n \"msFullscreenElement\"\n ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n });\n const fullscreenElementMethod = [\n \"fullscreenElement\",\n \"webkitFullscreenElement\",\n \"mozFullScreenElement\",\n \"msFullscreenElement\"\n ].find((m) => document && m in document);\n const isSupported = useSupported(() => targetRef.value && document && requestMethod.value !== void 0 && exitMethod.value !== void 0 && fullscreenEnabled.value !== void 0);\n const isCurrentElementFullScreen = () => {\n if (fullscreenElementMethod)\n return (document == null ? void 0 : document[fullscreenElementMethod]) === targetRef.value;\n return false;\n };\n const isElementFullScreen = () => {\n if (fullscreenEnabled.value) {\n if (document && document[fullscreenEnabled.value] != null) {\n return document[fullscreenEnabled.value];\n } else {\n const target2 = targetRef.value;\n if ((target2 == null ? void 0 : target2[fullscreenEnabled.value]) != null) {\n return Boolean(target2[fullscreenEnabled.value]);\n }\n }\n }\n return false;\n };\n async function exit() {\n if (!isSupported.value || !isFullscreen.value)\n return;\n if (exitMethod.value) {\n if ((document == null ? void 0 : document[exitMethod.value]) != null) {\n await document[exitMethod.value]();\n } else {\n const target2 = targetRef.value;\n if ((target2 == null ? void 0 : target2[exitMethod.value]) != null)\n await target2[exitMethod.value]();\n }\n }\n isFullscreen.value = false;\n }\n async function enter() {\n if (!isSupported.value || isFullscreen.value)\n return;\n if (isElementFullScreen())\n await exit();\n const target2 = targetRef.value;\n if (requestMethod.value && (target2 == null ? void 0 : target2[requestMethod.value]) != null) {\n await target2[requestMethod.value]();\n isFullscreen.value = true;\n }\n }\n async function toggle() {\n await (isFullscreen.value ? exit() : enter());\n }\n const handlerCallback = () => {\n const isElementFullScreenValue = isElementFullScreen();\n if (!isElementFullScreenValue || isElementFullScreenValue && isCurrentElementFullScreen())\n isFullscreen.value = isElementFullScreenValue;\n };\n useEventListener(document, eventHandlers, handlerCallback, false);\n useEventListener(() => unrefElement(targetRef), eventHandlers, handlerCallback, false);\n if (autoExit)\n tryOnScopeDispose(exit);\n return {\n isSupported,\n isFullscreen,\n enter,\n exit,\n toggle\n };\n}\n\nfunction mapGamepadToXbox360Controller(gamepad) {\n return computed(() => {\n if (gamepad.value) {\n return {\n buttons: {\n a: gamepad.value.buttons[0],\n b: gamepad.value.buttons[1],\n x: gamepad.value.buttons[2],\n y: gamepad.value.buttons[3]\n },\n bumper: {\n left: gamepad.value.buttons[4],\n right: gamepad.value.buttons[5]\n },\n triggers: {\n left: gamepad.value.buttons[6],\n right: gamepad.value.buttons[7]\n },\n stick: {\n left: {\n horizontal: gamepad.value.axes[0],\n vertical: gamepad.value.axes[1],\n button: gamepad.value.buttons[10]\n },\n right: {\n horizontal: gamepad.value.axes[2],\n vertical: gamepad.value.axes[3],\n button: gamepad.value.buttons[11]\n }\n },\n dpad: {\n up: gamepad.value.buttons[12],\n down: gamepad.value.buttons[13],\n left: gamepad.value.buttons[14],\n right: gamepad.value.buttons[15]\n },\n back: gamepad.value.buttons[8],\n start: gamepad.value.buttons[9]\n };\n }\n return null;\n });\n}\nfunction useGamepad(options = {}) {\n const {\n navigator = defaultNavigator\n } = options;\n const isSupported = useSupported(() => navigator && \"getGamepads\" in navigator);\n const gamepads = ref([]);\n const onConnectedHook = createEventHook();\n const onDisconnectedHook = createEventHook();\n const stateFromGamepad = (gamepad) => {\n const hapticActuators = [];\n const vibrationActuator = \"vibrationActuator\" in gamepad ? gamepad.vibrationActuator : null;\n if (vibrationActuator)\n hapticActuators.push(vibrationActuator);\n if (gamepad.hapticActuators)\n hapticActuators.push(...gamepad.hapticActuators);\n return {\n id: gamepad.id,\n index: gamepad.index,\n connected: gamepad.connected,\n mapping: gamepad.mapping,\n timestamp: gamepad.timestamp,\n vibrationActuator: gamepad.vibrationActuator,\n hapticActuators,\n axes: gamepad.axes.map((axes) => axes),\n buttons: gamepad.buttons.map((button) => ({ pressed: button.pressed, touched: button.touched, value: button.value }))\n };\n };\n const updateGamepadState = () => {\n const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];\n for (const gamepad of _gamepads) {\n if (gamepad && gamepads.value[gamepad.index])\n gamepads.value[gamepad.index] = stateFromGamepad(gamepad);\n }\n };\n const { isActive, pause, resume } = useRafFn(updateGamepadState);\n const onGamepadConnected = (gamepad) => {\n if (!gamepads.value.some(({ index }) => index === gamepad.index)) {\n gamepads.value.push(stateFromGamepad(gamepad));\n onConnectedHook.trigger(gamepad.index);\n }\n resume();\n };\n const onGamepadDisconnected = (gamepad) => {\n gamepads.value = gamepads.value.filter((x) => x.index !== gamepad.index);\n onDisconnectedHook.trigger(gamepad.index);\n };\n useEventListener(\"gamepadconnected\", (e) => onGamepadConnected(e.gamepad));\n useEventListener(\"gamepaddisconnected\", (e) => onGamepadDisconnected(e.gamepad));\n tryOnMounted(() => {\n const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];\n for (const gamepad of _gamepads) {\n if (gamepad && gamepads.value[gamepad.index])\n onGamepadConnected(gamepad);\n }\n });\n pause();\n return {\n isSupported,\n onConnected: onConnectedHook.on,\n onDisconnected: onDisconnectedHook.on,\n gamepads,\n pause,\n resume,\n isActive\n };\n}\n\nfunction useGeolocation(options = {}) {\n const {\n enableHighAccuracy = true,\n maximumAge = 3e4,\n timeout = 27e3,\n navigator = defaultNavigator,\n immediate = true\n } = options;\n const isSupported = useSupported(() => navigator && \"geolocation\" in navigator);\n const locatedAt = ref(null);\n const error = shallowRef(null);\n const coords = ref({\n accuracy: 0,\n latitude: Number.POSITIVE_INFINITY,\n longitude: Number.POSITIVE_INFINITY,\n altitude: null,\n altitudeAccuracy: null,\n heading: null,\n speed: null\n });\n function updatePosition(position) {\n locatedAt.value = position.timestamp;\n coords.value = position.coords;\n error.value = null;\n }\n let watcher;\n function resume() {\n if (isSupported.value) {\n watcher = navigator.geolocation.watchPosition(\n updatePosition,\n (err) => error.value = err,\n {\n enableHighAccuracy,\n maximumAge,\n timeout\n }\n );\n }\n }\n if (immediate)\n resume();\n function pause() {\n if (watcher && navigator)\n navigator.geolocation.clearWatch(watcher);\n }\n tryOnScopeDispose(() => {\n pause();\n });\n return {\n isSupported,\n coords,\n locatedAt,\n error,\n resume,\n pause\n };\n}\n\nconst defaultEvents$1 = [\"mousemove\", \"mousedown\", \"resize\", \"keydown\", \"touchstart\", \"wheel\"];\nconst oneMinute = 6e4;\nfunction useIdle(timeout = oneMinute, options = {}) {\n const {\n initialState = false,\n listenForVisibilityChange = true,\n events = defaultEvents$1,\n window = defaultWindow,\n eventFilter = throttleFilter(50)\n } = options;\n const idle = ref(initialState);\n const lastActive = ref(timestamp());\n let timer;\n const reset = () => {\n idle.value = false;\n clearTimeout(timer);\n timer = setTimeout(() => idle.value = true, timeout);\n };\n const onEvent = createFilterWrapper(\n eventFilter,\n () => {\n lastActive.value = timestamp();\n reset();\n }\n );\n if (window) {\n const document = window.document;\n for (const event of events)\n useEventListener(window, event, onEvent, { passive: true });\n if (listenForVisibilityChange) {\n useEventListener(document, \"visibilitychange\", () => {\n if (!document.hidden)\n onEvent();\n });\n }\n reset();\n }\n return {\n idle,\n lastActive,\n reset\n };\n}\n\nasync function loadImage(options) {\n return new Promise((resolve, reject) => {\n const img = new Image();\n const { src, srcset, sizes, class: clazz, loading, crossorigin, referrerPolicy } = options;\n img.src = src;\n if (srcset)\n img.srcset = srcset;\n if (sizes)\n img.sizes = sizes;\n if (clazz)\n img.className = clazz;\n if (loading)\n img.loading = loading;\n if (crossorigin)\n img.crossOrigin = crossorigin;\n if (referrerPolicy)\n img.referrerPolicy = referrerPolicy;\n img.onload = () => resolve(img);\n img.onerror = reject;\n });\n}\nfunction useImage(options, asyncStateOptions = {}) {\n const state = useAsyncState(\n () => loadImage(toValue(options)),\n void 0,\n {\n resetOnExecute: true,\n ...asyncStateOptions\n }\n );\n watch(\n () => toValue(options),\n () => state.execute(asyncStateOptions.delay),\n { deep: true }\n );\n return state;\n}\n\nconst ARRIVED_STATE_THRESHOLD_PIXELS = 1;\nfunction useScroll(element, options = {}) {\n const {\n throttle = 0,\n idle = 200,\n onStop = noop,\n onScroll = noop,\n offset = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n },\n eventListenerOptions = {\n capture: false,\n passive: true\n },\n behavior = \"auto\",\n window = defaultWindow,\n onError = (e) => {\n console.error(e);\n }\n } = options;\n const internalX = ref(0);\n const internalY = ref(0);\n const x = computed({\n get() {\n return internalX.value;\n },\n set(x2) {\n scrollTo(x2, void 0);\n }\n });\n const y = computed({\n get() {\n return internalY.value;\n },\n set(y2) {\n scrollTo(void 0, y2);\n }\n });\n function scrollTo(_x, _y) {\n var _a, _b, _c, _d;\n if (!window)\n return;\n const _element = toValue(element);\n if (!_element)\n return;\n (_c = _element instanceof Document ? window.document.body : _element) == null ? void 0 : _c.scrollTo({\n top: (_a = toValue(_y)) != null ? _a : y.value,\n left: (_b = toValue(_x)) != null ? _b : x.value,\n behavior: toValue(behavior)\n });\n const scrollContainer = ((_d = _element == null ? void 0 : _element.document) == null ? void 0 : _d.documentElement) || (_element == null ? void 0 : _element.documentElement) || _element;\n if (x != null)\n internalX.value = scrollContainer.scrollLeft;\n if (y != null)\n internalY.value = scrollContainer.scrollTop;\n }\n const isScrolling = ref(false);\n const arrivedState = reactive({\n left: true,\n right: false,\n top: true,\n bottom: false\n });\n const directions = reactive({\n left: false,\n right: false,\n top: false,\n bottom: false\n });\n const onScrollEnd = (e) => {\n if (!isScrolling.value)\n return;\n isScrolling.value = false;\n directions.left = false;\n directions.right = false;\n directions.top = false;\n directions.bottom = false;\n onStop(e);\n };\n const onScrollEndDebounced = useDebounceFn(onScrollEnd, throttle + idle);\n const setArrivedState = (target) => {\n var _a;\n if (!window)\n return;\n const el = ((_a = target == null ? void 0 : target.document) == null ? void 0 : _a.documentElement) || (target == null ? void 0 : target.documentElement) || unrefElement(target);\n const { display, flexDirection } = getComputedStyle(el);\n const scrollLeft = el.scrollLeft;\n directions.left = scrollLeft < internalX.value;\n directions.right = scrollLeft > internalX.value;\n const left = Math.abs(scrollLeft) <= (offset.left || 0);\n const right = Math.abs(scrollLeft) + el.clientWidth >= el.scrollWidth - (offset.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n if (display === \"flex\" && flexDirection === \"row-reverse\") {\n arrivedState.left = right;\n arrivedState.right = left;\n } else {\n arrivedState.left = left;\n arrivedState.right = right;\n }\n internalX.value = scrollLeft;\n let scrollTop = el.scrollTop;\n if (target === window.document && !scrollTop)\n scrollTop = window.document.body.scrollTop;\n directions.top = scrollTop < internalY.value;\n directions.bottom = scrollTop > internalY.value;\n const top = Math.abs(scrollTop) <= (offset.top || 0);\n const bottom = Math.abs(scrollTop) + el.clientHeight >= el.scrollHeight - (offset.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n if (display === \"flex\" && flexDirection === \"column-reverse\") {\n arrivedState.top = bottom;\n arrivedState.bottom = top;\n } else {\n arrivedState.top = top;\n arrivedState.bottom = bottom;\n }\n internalY.value = scrollTop;\n };\n const onScrollHandler = (e) => {\n var _a;\n if (!window)\n return;\n const eventTarget = (_a = e.target.documentElement) != null ? _a : e.target;\n setArrivedState(eventTarget);\n isScrolling.value = true;\n onScrollEndDebounced(e);\n onScroll(e);\n };\n useEventListener(\n element,\n \"scroll\",\n throttle ? useThrottleFn(onScrollHandler, throttle, true, false) : onScrollHandler,\n eventListenerOptions\n );\n tryOnMounted(() => {\n try {\n const _element = toValue(element);\n if (!_element)\n return;\n setArrivedState(_element);\n } catch (e) {\n onError(e);\n }\n });\n useEventListener(\n element,\n \"scrollend\",\n onScrollEnd,\n eventListenerOptions\n );\n return {\n x,\n y,\n isScrolling,\n arrivedState,\n directions,\n measure() {\n const _element = toValue(element);\n if (window && _element)\n setArrivedState(_element);\n }\n };\n}\n\nfunction resolveElement(el) {\n if (typeof Window !== \"undefined\" && el instanceof Window)\n return el.document.documentElement;\n if (typeof Document !== \"undefined\" && el instanceof Document)\n return el.documentElement;\n return el;\n}\n\nfunction useInfiniteScroll(element, onLoadMore, options = {}) {\n var _a;\n const {\n direction = \"bottom\",\n interval = 100,\n canLoadMore = () => true\n } = options;\n const state = reactive(useScroll(\n element,\n {\n ...options,\n offset: {\n [direction]: (_a = options.distance) != null ? _a : 0,\n ...options.offset\n }\n }\n ));\n const promise = ref();\n const isLoading = computed(() => !!promise.value);\n const observedElement = computed(() => {\n return resolveElement(toValue(element));\n });\n const isElementVisible = useElementVisibility(observedElement);\n function checkAndLoad() {\n state.measure();\n if (!observedElement.value || !isElementVisible.value || !canLoadMore(observedElement.value))\n return;\n const { scrollHeight, clientHeight, scrollWidth, clientWidth } = observedElement.value;\n const isNarrower = direction === \"bottom\" || direction === \"top\" ? scrollHeight <= clientHeight : scrollWidth <= clientWidth;\n if (state.arrivedState[direction] || isNarrower) {\n if (!promise.value) {\n promise.value = Promise.all([\n onLoadMore(state),\n new Promise((resolve) => setTimeout(resolve, interval))\n ]).finally(() => {\n promise.value = null;\n nextTick(() => checkAndLoad());\n });\n }\n }\n }\n watch(\n () => [state.arrivedState[direction], isElementVisible.value],\n checkAndLoad,\n { immediate: true }\n );\n return {\n isLoading\n };\n}\n\nconst defaultEvents = [\"mousedown\", \"mouseup\", \"keydown\", \"keyup\"];\nfunction useKeyModifier(modifier, options = {}) {\n const {\n events = defaultEvents,\n document = defaultDocument,\n initial = null\n } = options;\n const state = ref(initial);\n if (document) {\n events.forEach((listenerEvent) => {\n useEventListener(document, listenerEvent, (evt) => {\n if (typeof evt.getModifierState === \"function\")\n state.value = evt.getModifierState(modifier);\n });\n });\n }\n return state;\n}\n\nfunction useLocalStorage(key, initialValue, options = {}) {\n const { window = defaultWindow } = options;\n return useStorage(key, initialValue, window == null ? void 0 : window.localStorage, options);\n}\n\nconst DefaultMagicKeysAliasMap = {\n ctrl: \"control\",\n command: \"meta\",\n cmd: \"meta\",\n option: \"alt\",\n up: \"arrowup\",\n down: \"arrowdown\",\n left: \"arrowleft\",\n right: \"arrowright\"\n};\n\nfunction useMagicKeys(options = {}) {\n const {\n reactive: useReactive = false,\n target = defaultWindow,\n aliasMap = DefaultMagicKeysAliasMap,\n passive = true,\n onEventFired = noop\n } = options;\n const current = reactive(/* @__PURE__ */ new Set());\n const obj = {\n toJSON() {\n return {};\n },\n current\n };\n const refs = useReactive ? reactive(obj) : obj;\n const metaDeps = /* @__PURE__ */ new Set();\n const usedKeys = /* @__PURE__ */ new Set();\n function setRefs(key, value) {\n if (key in refs) {\n if (useReactive)\n refs[key] = value;\n else\n refs[key].value = value;\n }\n }\n function reset() {\n current.clear();\n for (const key of usedKeys)\n setRefs(key, false);\n }\n function updateRefs(e, value) {\n var _a, _b;\n const key = (_a = e.key) == null ? void 0 : _a.toLowerCase();\n const code = (_b = e.code) == null ? void 0 : _b.toLowerCase();\n const values = [code, key].filter(Boolean);\n if (key) {\n if (value)\n current.add(key);\n else\n current.delete(key);\n }\n for (const key2 of values) {\n usedKeys.add(key2);\n setRefs(key2, value);\n }\n if (key === \"meta\" && !value) {\n metaDeps.forEach((key2) => {\n current.delete(key2);\n setRefs(key2, false);\n });\n metaDeps.clear();\n } else if (typeof e.getModifierState === \"function\" && e.getModifierState(\"Meta\") && value) {\n [...current, ...values].forEach((key2) => metaDeps.add(key2));\n }\n }\n useEventListener(target, \"keydown\", (e) => {\n updateRefs(e, true);\n return onEventFired(e);\n }, { passive });\n useEventListener(target, \"keyup\", (e) => {\n updateRefs(e, false);\n return onEventFired(e);\n }, { passive });\n useEventListener(\"blur\", reset, { passive: true });\n useEventListener(\"focus\", reset, { passive: true });\n const proxy = new Proxy(\n refs,\n {\n get(target2, prop, rec) {\n if (typeof prop !== \"string\")\n return Reflect.get(target2, prop, rec);\n prop = prop.toLowerCase();\n if (prop in aliasMap)\n prop = aliasMap[prop];\n if (!(prop in refs)) {\n if (/[+_-]/.test(prop)) {\n const keys = prop.split(/[+_-]/g).map((i) => i.trim());\n refs[prop] = computed(() => keys.every((key) => toValue(proxy[key])));\n } else {\n refs[prop] = ref(false);\n }\n }\n const r = Reflect.get(target2, prop, rec);\n return useReactive ? toValue(r) : r;\n }\n }\n );\n return proxy;\n}\n\nfunction usingElRef(source, cb) {\n if (toValue(source))\n cb(toValue(source));\n}\nfunction timeRangeToArray(timeRanges) {\n let ranges = [];\n for (let i = 0; i < timeRanges.length; ++i)\n ranges = [...ranges, [timeRanges.start(i), timeRanges.end(i)]];\n return ranges;\n}\nfunction tracksToArray(tracks) {\n return Array.from(tracks).map(({ label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }, id) => ({ id, label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }));\n}\nconst defaultOptions = {\n src: \"\",\n tracks: []\n};\nfunction useMediaControls(target, options = {}) {\n target = toRef(target);\n options = {\n ...defaultOptions,\n ...options\n };\n const {\n document = defaultDocument\n } = options;\n const currentTime = ref(0);\n const duration = ref(0);\n const seeking = ref(false);\n const volume = ref(1);\n const waiting = ref(false);\n const ended = ref(false);\n const playing = ref(false);\n const rate = ref(1);\n const stalled = ref(false);\n const buffered = ref([]);\n const tracks = ref([]);\n const selectedTrack = ref(-1);\n const isPictureInPicture = ref(false);\n const muted = ref(false);\n const supportsPictureInPicture = document && \"pictureInPictureEnabled\" in document;\n const sourceErrorEvent = createEventHook();\n const disableTrack = (track) => {\n usingElRef(target, (el) => {\n if (track) {\n const id = typeof track === \"number\" ? track : track.id;\n el.textTracks[id].mode = \"disabled\";\n } else {\n for (let i = 0; i < el.textTracks.length; ++i)\n el.textTracks[i].mode = \"disabled\";\n }\n selectedTrack.value = -1;\n });\n };\n const enableTrack = (track, disableTracks = true) => {\n usingElRef(target, (el) => {\n const id = typeof track === \"number\" ? track : track.id;\n if (disableTracks)\n disableTrack();\n el.textTracks[id].mode = \"showing\";\n selectedTrack.value = id;\n });\n };\n const togglePictureInPicture = () => {\n return new Promise((resolve, reject) => {\n usingElRef(target, async (el) => {\n if (supportsPictureInPicture) {\n if (!isPictureInPicture.value) {\n el.requestPictureInPicture().then(resolve).catch(reject);\n } else {\n document.exitPictureInPicture().then(resolve).catch(reject);\n }\n }\n });\n });\n };\n watchEffect(() => {\n if (!document)\n return;\n const el = toValue(target);\n if (!el)\n return;\n const src = toValue(options.src);\n let sources = [];\n if (!src)\n return;\n if (typeof src === \"string\")\n sources = [{ src }];\n else if (Array.isArray(src))\n sources = src;\n else if (isObject(src))\n sources = [src];\n el.querySelectorAll(\"source\").forEach((e) => {\n e.removeEventListener(\"error\", sourceErrorEvent.trigger);\n e.remove();\n });\n sources.forEach(({ src: src2, type }) => {\n const source = document.createElement(\"source\");\n source.setAttribute(\"src\", src2);\n source.setAttribute(\"type\", type || \"\");\n source.addEventListener(\"error\", sourceErrorEvent.trigger);\n el.appendChild(source);\n });\n el.load();\n });\n tryOnScopeDispose(() => {\n const el = toValue(target);\n if (!el)\n return;\n el.querySelectorAll(\"source\").forEach((e) => e.removeEventListener(\"error\", sourceErrorEvent.trigger));\n });\n watch([target, volume], () => {\n const el = toValue(target);\n if (!el)\n return;\n el.volume = volume.value;\n });\n watch([target, muted], () => {\n const el = toValue(target);\n if (!el)\n return;\n el.muted = muted.value;\n });\n watch([target, rate], () => {\n const el = toValue(target);\n if (!el)\n return;\n el.playbackRate = rate.value;\n });\n watchEffect(() => {\n if (!document)\n return;\n const textTracks = toValue(options.tracks);\n const el = toValue(target);\n if (!textTracks || !textTracks.length || !el)\n return;\n el.querySelectorAll(\"track\").forEach((e) => e.remove());\n textTracks.forEach(({ default: isDefault, kind, label, src, srcLang }, i) => {\n const track = document.createElement(\"track\");\n track.default = isDefault || false;\n track.kind = kind;\n track.label = label;\n track.src = src;\n track.srclang = srcLang;\n if (track.default)\n selectedTrack.value = i;\n el.appendChild(track);\n });\n });\n const { ignoreUpdates: ignoreCurrentTimeUpdates } = watchIgnorable(currentTime, (time) => {\n const el = toValue(target);\n if (!el)\n return;\n el.currentTime = time;\n });\n const { ignoreUpdates: ignorePlayingUpdates } = watchIgnorable(playing, (isPlaying) => {\n const el = toValue(target);\n if (!el)\n return;\n isPlaying ? el.play() : el.pause();\n });\n useEventListener(target, \"timeupdate\", () => ignoreCurrentTimeUpdates(() => currentTime.value = toValue(target).currentTime));\n useEventListener(target, \"durationchange\", () => duration.value = toValue(target).duration);\n useEventListener(target, \"progress\", () => buffered.value = timeRangeToArray(toValue(target).buffered));\n useEventListener(target, \"seeking\", () => seeking.value = true);\n useEventListener(target, \"seeked\", () => seeking.value = false);\n useEventListener(target, [\"waiting\", \"loadstart\"], () => {\n waiting.value = true;\n ignorePlayingUpdates(() => playing.value = false);\n });\n useEventListener(target, \"loadeddata\", () => waiting.value = false);\n useEventListener(target, \"playing\", () => {\n waiting.value = false;\n ended.value = false;\n ignorePlayingUpdates(() => playing.value = true);\n });\n useEventListener(target, \"ratechange\", () => rate.value = toValue(target).playbackRate);\n useEventListener(target, \"stalled\", () => stalled.value = true);\n useEventListener(target, \"ended\", () => ended.value = true);\n useEventListener(target, \"pause\", () => ignorePlayingUpdates(() => playing.value = false));\n useEventListener(target, \"play\", () => ignorePlayingUpdates(() => playing.value = true));\n useEventListener(target, \"enterpictureinpicture\", () => isPictureInPicture.value = true);\n useEventListener(target, \"leavepictureinpicture\", () => isPictureInPicture.value = false);\n useEventListener(target, \"volumechange\", () => {\n const el = toValue(target);\n if (!el)\n return;\n volume.value = el.volume;\n muted.value = el.muted;\n });\n const listeners = [];\n const stop = watch([target], () => {\n const el = toValue(target);\n if (!el)\n return;\n stop();\n listeners[0] = useEventListener(el.textTracks, \"addtrack\", () => tracks.value = tracksToArray(el.textTracks));\n listeners[1] = useEventListener(el.textTracks, \"removetrack\", () => tracks.value = tracksToArray(el.textTracks));\n listeners[2] = useEventListener(el.textTracks, \"change\", () => tracks.value = tracksToArray(el.textTracks));\n });\n tryOnScopeDispose(() => listeners.forEach((listener) => listener()));\n return {\n currentTime,\n duration,\n waiting,\n seeking,\n ended,\n stalled,\n buffered,\n playing,\n rate,\n // Volume\n volume,\n muted,\n // Tracks\n tracks,\n selectedTrack,\n enableTrack,\n disableTrack,\n // Picture in Picture\n supportsPictureInPicture,\n togglePictureInPicture,\n isPictureInPicture,\n // Events\n onSourceError: sourceErrorEvent.on\n };\n}\n\nfunction getMapVue2Compat() {\n const data = shallowReactive({});\n return {\n get: (key) => data[key],\n set: (key, value) => set(data, key, value),\n has: (key) => hasOwn(data, key),\n delete: (key) => del(data, key),\n clear: () => {\n Object.keys(data).forEach((key) => {\n del(data, key);\n });\n }\n };\n}\nfunction useMemoize(resolver, options) {\n const initCache = () => {\n if (options == null ? void 0 : options.cache)\n return shallowReactive(options.cache);\n if (isVue2)\n return getMapVue2Compat();\n return shallowReactive(/* @__PURE__ */ new Map());\n };\n const cache = initCache();\n const generateKey = (...args) => (options == null ? void 0 : options.getKey) ? options.getKey(...args) : JSON.stringify(args);\n const _loadData = (key, ...args) => {\n cache.set(key, resolver(...args));\n return cache.get(key);\n };\n const loadData = (...args) => _loadData(generateKey(...args), ...args);\n const deleteData = (...args) => {\n cache.delete(generateKey(...args));\n };\n const clearData = () => {\n cache.clear();\n };\n const memoized = (...args) => {\n const key = generateKey(...args);\n if (cache.has(key))\n return cache.get(key);\n return _loadData(key, ...args);\n };\n memoized.load = loadData;\n memoized.delete = deleteData;\n memoized.clear = clearData;\n memoized.generateKey = generateKey;\n memoized.cache = cache;\n return memoized;\n}\n\nfunction useMemory(options = {}) {\n const memory = ref();\n const isSupported = useSupported(() => typeof performance !== \"undefined\" && \"memory\" in performance);\n if (isSupported.value) {\n const { interval = 1e3 } = options;\n useIntervalFn(() => {\n memory.value = performance.memory;\n }, interval, { immediate: options.immediate, immediateCallback: options.immediateCallback });\n }\n return { isSupported, memory };\n}\n\nconst UseMouseBuiltinExtractors = {\n page: (event) => [event.pageX, event.pageY],\n client: (event) => [event.clientX, event.clientY],\n screen: (event) => [event.screenX, event.screenY],\n movement: (event) => event instanceof Touch ? null : [event.movementX, event.movementY]\n};\nfunction useMouse(options = {}) {\n const {\n type = \"page\",\n touch = true,\n resetOnTouchEnds = false,\n initialValue = { x: 0, y: 0 },\n window = defaultWindow,\n target = window,\n scroll = true,\n eventFilter\n } = options;\n let _prevMouseEvent = null;\n const x = ref(initialValue.x);\n const y = ref(initialValue.y);\n const sourceType = ref(null);\n const extractor = typeof type === \"function\" ? type : UseMouseBuiltinExtractors[type];\n const mouseHandler = (event) => {\n const result = extractor(event);\n _prevMouseEvent = event;\n if (result) {\n [x.value, y.value] = result;\n sourceType.value = \"mouse\";\n }\n };\n const touchHandler = (event) => {\n if (event.touches.length > 0) {\n const result = extractor(event.touches[0]);\n if (result) {\n [x.value, y.value] = result;\n sourceType.value = \"touch\";\n }\n }\n };\n const scrollHandler = () => {\n if (!_prevMouseEvent || !window)\n return;\n const pos = extractor(_prevMouseEvent);\n if (_prevMouseEvent instanceof MouseEvent && pos) {\n x.value = pos[0] + window.scrollX;\n y.value = pos[1] + window.scrollY;\n }\n };\n const reset = () => {\n x.value = initialValue.x;\n y.value = initialValue.y;\n };\n const mouseHandlerWrapper = eventFilter ? (event) => eventFilter(() => mouseHandler(event), {}) : (event) => mouseHandler(event);\n const touchHandlerWrapper = eventFilter ? (event) => eventFilter(() => touchHandler(event), {}) : (event) => touchHandler(event);\n const scrollHandlerWrapper = eventFilter ? () => eventFilter(() => scrollHandler(), {}) : () => scrollHandler();\n if (target) {\n const listenerOptions = { passive: true };\n useEventListener(target, [\"mousemove\", \"dragover\"], mouseHandlerWrapper, listenerOptions);\n if (touch && type !== \"movement\") {\n useEventListener(target, [\"touchstart\", \"touchmove\"], touchHandlerWrapper, listenerOptions);\n if (resetOnTouchEnds)\n useEventListener(target, \"touchend\", reset, listenerOptions);\n }\n if (scroll && type === \"page\")\n useEventListener(window, \"scroll\", scrollHandlerWrapper, { passive: true });\n }\n return {\n x,\n y,\n sourceType\n };\n}\n\nfunction useMouseInElement(target, options = {}) {\n const {\n handleOutside = true,\n window = defaultWindow\n } = options;\n const type = options.type || \"page\";\n const { x, y, sourceType } = useMouse(options);\n const targetRef = ref(target != null ? target : window == null ? void 0 : window.document.body);\n const elementX = ref(0);\n const elementY = ref(0);\n const elementPositionX = ref(0);\n const elementPositionY = ref(0);\n const elementHeight = ref(0);\n const elementWidth = ref(0);\n const isOutside = ref(true);\n let stop = () => {\n };\n if (window) {\n stop = watch(\n [targetRef, x, y],\n () => {\n const el = unrefElement(targetRef);\n if (!el)\n return;\n const {\n left,\n top,\n width,\n height\n } = el.getBoundingClientRect();\n elementPositionX.value = left + (type === \"page\" ? window.pageXOffset : 0);\n elementPositionY.value = top + (type === \"page\" ? window.pageYOffset : 0);\n elementHeight.value = height;\n elementWidth.value = width;\n const elX = x.value - elementPositionX.value;\n const elY = y.value - elementPositionY.value;\n isOutside.value = width === 0 || height === 0 || elX < 0 || elY < 0 || elX > width || elY > height;\n if (handleOutside || !isOutside.value) {\n elementX.value = elX;\n elementY.value = elY;\n }\n },\n { immediate: true }\n );\n useEventListener(document, \"mouseleave\", () => {\n isOutside.value = true;\n });\n }\n return {\n x,\n y,\n sourceType,\n elementX,\n elementY,\n elementPositionX,\n elementPositionY,\n elementHeight,\n elementWidth,\n isOutside,\n stop\n };\n}\n\nfunction useMousePressed(options = {}) {\n const {\n touch = true,\n drag = true,\n capture = false,\n initialValue = false,\n window = defaultWindow\n } = options;\n const pressed = ref(initialValue);\n const sourceType = ref(null);\n if (!window) {\n return {\n pressed,\n sourceType\n };\n }\n const onPressed = (srcType) => () => {\n pressed.value = true;\n sourceType.value = srcType;\n };\n const onReleased = () => {\n pressed.value = false;\n sourceType.value = null;\n };\n const target = computed(() => unrefElement(options.target) || window);\n useEventListener(target, \"mousedown\", onPressed(\"mouse\"), { passive: true, capture });\n useEventListener(window, \"mouseleave\", onReleased, { passive: true, capture });\n useEventListener(window, \"mouseup\", onReleased, { passive: true, capture });\n if (drag) {\n useEventListener(target, \"dragstart\", onPressed(\"mouse\"), { passive: true, capture });\n useEventListener(window, \"drop\", onReleased, { passive: true, capture });\n useEventListener(window, \"dragend\", onReleased, { passive: true, capture });\n }\n if (touch) {\n useEventListener(target, \"touchstart\", onPressed(\"touch\"), { passive: true, capture });\n useEventListener(window, \"touchend\", onReleased, { passive: true, capture });\n useEventListener(window, \"touchcancel\", onReleased, { passive: true, capture });\n }\n return {\n pressed,\n sourceType\n };\n}\n\nfunction useNavigatorLanguage(options = {}) {\n const { window = defaultWindow } = options;\n const navigator = window == null ? void 0 : window.navigator;\n const isSupported = useSupported(() => navigator && \"language\" in navigator);\n const language = ref(navigator == null ? void 0 : navigator.language);\n useEventListener(window, \"languagechange\", () => {\n if (navigator)\n language.value = navigator.language;\n });\n return {\n isSupported,\n language\n };\n}\n\nfunction useNetwork(options = {}) {\n const { window = defaultWindow } = options;\n const navigator = window == null ? void 0 : window.navigator;\n const isSupported = useSupported(() => navigator && \"connection\" in navigator);\n const isOnline = ref(true);\n const saveData = ref(false);\n const offlineAt = ref(void 0);\n const onlineAt = ref(void 0);\n const downlink = ref(void 0);\n const downlinkMax = ref(void 0);\n const rtt = ref(void 0);\n const effectiveType = ref(void 0);\n const type = ref(\"unknown\");\n const connection = isSupported.value && navigator.connection;\n function updateNetworkInformation() {\n if (!navigator)\n return;\n isOnline.value = navigator.onLine;\n offlineAt.value = isOnline.value ? void 0 : Date.now();\n onlineAt.value = isOnline.value ? Date.now() : void 0;\n if (connection) {\n downlink.value = connection.downlink;\n downlinkMax.value = connection.downlinkMax;\n effectiveType.value = connection.effectiveType;\n rtt.value = connection.rtt;\n saveData.value = connection.saveData;\n type.value = connection.type;\n }\n }\n if (window) {\n useEventListener(window, \"offline\", () => {\n isOnline.value = false;\n offlineAt.value = Date.now();\n });\n useEventListener(window, \"online\", () => {\n isOnline.value = true;\n onlineAt.value = Date.now();\n });\n }\n if (connection)\n useEventListener(connection, \"change\", updateNetworkInformation, false);\n updateNetworkInformation();\n return {\n isSupported,\n isOnline,\n saveData,\n offlineAt,\n onlineAt,\n downlink,\n downlinkMax,\n effectiveType,\n rtt,\n type\n };\n}\n\nfunction useNow(options = {}) {\n const {\n controls: exposeControls = false,\n interval = \"requestAnimationFrame\"\n } = options;\n const now = ref(/* @__PURE__ */ new Date());\n const update = () => now.value = /* @__PURE__ */ new Date();\n const controls = interval === \"requestAnimationFrame\" ? useRafFn(update, { immediate: true }) : useIntervalFn(update, interval, { immediate: true });\n if (exposeControls) {\n return {\n now,\n ...controls\n };\n } else {\n return now;\n }\n}\n\nfunction useObjectUrl(object) {\n const url = ref();\n const release = () => {\n if (url.value)\n URL.revokeObjectURL(url.value);\n url.value = void 0;\n };\n watch(\n () => toValue(object),\n (newObject) => {\n release();\n if (newObject)\n url.value = URL.createObjectURL(newObject);\n },\n { immediate: true }\n );\n tryOnScopeDispose(release);\n return readonly(url);\n}\n\nfunction useClamp(value, min, max) {\n if (typeof value === \"function\" || isReadonly(value))\n return computed(() => clamp(toValue(value), toValue(min), toValue(max)));\n const _value = ref(value);\n return computed({\n get() {\n return _value.value = clamp(_value.value, toValue(min), toValue(max));\n },\n set(value2) {\n _value.value = clamp(value2, toValue(min), toValue(max));\n }\n });\n}\n\nfunction useOffsetPagination(options) {\n const {\n total = Number.POSITIVE_INFINITY,\n pageSize = 10,\n page = 1,\n onPageChange = noop,\n onPageSizeChange = noop,\n onPageCountChange = noop\n } = options;\n const currentPageSize = useClamp(pageSize, 1, Number.POSITIVE_INFINITY);\n const pageCount = computed(() => Math.max(\n 1,\n Math.ceil(toValue(total) / toValue(currentPageSize))\n ));\n const currentPage = useClamp(page, 1, pageCount);\n const isFirstPage = computed(() => currentPage.value === 1);\n const isLastPage = computed(() => currentPage.value === pageCount.value);\n if (isRef(page)) {\n syncRef(page, currentPage, {\n direction: isReadonly(page) ? \"ltr\" : \"both\"\n });\n }\n if (isRef(pageSize)) {\n syncRef(pageSize, currentPageSize, {\n direction: isReadonly(pageSize) ? \"ltr\" : \"both\"\n });\n }\n function prev() {\n currentPage.value--;\n }\n function next() {\n currentPage.value++;\n }\n const returnValue = {\n currentPage,\n currentPageSize,\n pageCount,\n isFirstPage,\n isLastPage,\n prev,\n next\n };\n watch(currentPage, () => {\n onPageChange(reactive(returnValue));\n });\n watch(currentPageSize, () => {\n onPageSizeChange(reactive(returnValue));\n });\n watch(pageCount, () => {\n onPageCountChange(reactive(returnValue));\n });\n return returnValue;\n}\n\nfunction useOnline(options = {}) {\n const { isOnline } = useNetwork(options);\n return isOnline;\n}\n\nfunction usePageLeave(options = {}) {\n const { window = defaultWindow } = options;\n const isLeft = ref(false);\n const handler = (event) => {\n if (!window)\n return;\n event = event || window.event;\n const from = event.relatedTarget || event.toElement;\n isLeft.value = !from;\n };\n if (window) {\n useEventListener(window, \"mouseout\", handler, { passive: true });\n useEventListener(window.document, \"mouseleave\", handler, { passive: true });\n useEventListener(window.document, \"mouseenter\", handler, { passive: true });\n }\n return isLeft;\n}\n\nfunction useScreenOrientation(options = {}) {\n const {\n window = defaultWindow\n } = options;\n const isSupported = useSupported(() => window && \"screen\" in window && \"orientation\" in window.screen);\n const screenOrientation = isSupported.value ? window.screen.orientation : {};\n const orientation = ref(screenOrientation.type);\n const angle = ref(screenOrientation.angle || 0);\n if (isSupported.value) {\n useEventListener(window, \"orientationchange\", () => {\n orientation.value = screenOrientation.type;\n angle.value = screenOrientation.angle;\n });\n }\n const lockOrientation = (type) => {\n if (isSupported.value && typeof screenOrientation.lock === \"function\")\n return screenOrientation.lock(type);\n return Promise.reject(new Error(\"Not supported\"));\n };\n const unlockOrientation = () => {\n if (isSupported.value && typeof screenOrientation.unlock === \"function\")\n screenOrientation.unlock();\n };\n return {\n isSupported,\n orientation,\n angle,\n lockOrientation,\n unlockOrientation\n };\n}\n\nfunction useParallax(target, options = {}) {\n const {\n deviceOrientationTiltAdjust = (i) => i,\n deviceOrientationRollAdjust = (i) => i,\n mouseTiltAdjust = (i) => i,\n mouseRollAdjust = (i) => i,\n window = defaultWindow\n } = options;\n const orientation = reactive(useDeviceOrientation({ window }));\n const screenOrientation = reactive(useScreenOrientation({ window }));\n const {\n elementX: x,\n elementY: y,\n elementWidth: width,\n elementHeight: height\n } = useMouseInElement(target, { handleOutside: false, window });\n const source = computed(() => {\n if (orientation.isSupported && (orientation.alpha != null && orientation.alpha !== 0 || orientation.gamma != null && orientation.gamma !== 0)) {\n return \"deviceOrientation\";\n }\n return \"mouse\";\n });\n const roll = computed(() => {\n if (source.value === \"deviceOrientation\") {\n let value;\n switch (screenOrientation.orientation) {\n case \"landscape-primary\":\n value = orientation.gamma / 90;\n break;\n case \"landscape-secondary\":\n value = -orientation.gamma / 90;\n break;\n case \"portrait-primary\":\n value = -orientation.beta / 90;\n break;\n case \"portrait-secondary\":\n value = orientation.beta / 90;\n break;\n default:\n value = -orientation.beta / 90;\n }\n return deviceOrientationRollAdjust(value);\n } else {\n const value = -(y.value - height.value / 2) / height.value;\n return mouseRollAdjust(value);\n }\n });\n const tilt = computed(() => {\n if (source.value === \"deviceOrientation\") {\n let value;\n switch (screenOrientation.orientation) {\n case \"landscape-primary\":\n value = orientation.beta / 90;\n break;\n case \"landscape-secondary\":\n value = -orientation.beta / 90;\n break;\n case \"portrait-primary\":\n value = orientation.gamma / 90;\n break;\n case \"portrait-secondary\":\n value = -orientation.gamma / 90;\n break;\n default:\n value = orientation.gamma / 90;\n }\n return deviceOrientationTiltAdjust(value);\n } else {\n const value = (x.value - width.value / 2) / width.value;\n return mouseTiltAdjust(value);\n }\n });\n return { roll, tilt, source };\n}\n\nfunction useParentElement(element = useCurrentElement()) {\n const parentElement = shallowRef();\n const update = () => {\n const el = unrefElement(element);\n if (el)\n parentElement.value = el.parentElement;\n };\n tryOnMounted(update);\n watch(() => toValue(element), update);\n return parentElement;\n}\n\nfunction usePerformanceObserver(options, callback) {\n const {\n window = defaultWindow,\n immediate = true,\n ...performanceOptions\n } = options;\n const isSupported = useSupported(() => window && \"PerformanceObserver\" in window);\n let observer;\n const stop = () => {\n observer == null ? void 0 : observer.disconnect();\n };\n const start = () => {\n if (isSupported.value) {\n stop();\n observer = new PerformanceObserver(callback);\n observer.observe(performanceOptions);\n }\n };\n tryOnScopeDispose(stop);\n if (immediate)\n start();\n return {\n isSupported,\n start,\n stop\n };\n}\n\nconst defaultState = {\n x: 0,\n y: 0,\n pointerId: 0,\n pressure: 0,\n tiltX: 0,\n tiltY: 0,\n width: 0,\n height: 0,\n twist: 0,\n pointerType: null\n};\nconst keys = /* @__PURE__ */ Object.keys(defaultState);\nfunction usePointer(options = {}) {\n const {\n target = defaultWindow\n } = options;\n const isInside = ref(false);\n const state = ref(options.initialValue || {});\n Object.assign(state.value, defaultState, state.value);\n const handler = (event) => {\n isInside.value = true;\n if (options.pointerTypes && !options.pointerTypes.includes(event.pointerType))\n return;\n state.value = objectPick(event, keys, false);\n };\n if (target) {\n const listenerOptions = { passive: true };\n useEventListener(target, [\"pointerdown\", \"pointermove\", \"pointerup\"], handler, listenerOptions);\n useEventListener(target, \"pointerleave\", () => isInside.value = false, listenerOptions);\n }\n return {\n ...toRefs(state),\n isInside\n };\n}\n\nfunction usePointerLock(target, options = {}) {\n const { document = defaultDocument } = options;\n const isSupported = useSupported(() => document && \"pointerLockElement\" in document);\n const element = ref();\n const triggerElement = ref();\n let targetElement;\n if (isSupported.value) {\n useEventListener(document, \"pointerlockchange\", () => {\n var _a;\n const currentElement = (_a = document.pointerLockElement) != null ? _a : element.value;\n if (targetElement && currentElement === targetElement) {\n element.value = document.pointerLockElement;\n if (!element.value)\n targetElement = triggerElement.value = null;\n }\n });\n useEventListener(document, \"pointerlockerror\", () => {\n var _a;\n const currentElement = (_a = document.pointerLockElement) != null ? _a : element.value;\n if (targetElement && currentElement === targetElement) {\n const action = document.pointerLockElement ? \"release\" : \"acquire\";\n throw new Error(`Failed to ${action} pointer lock.`);\n }\n });\n }\n async function lock(e) {\n var _a;\n if (!isSupported.value)\n throw new Error(\"Pointer Lock API is not supported by your browser.\");\n triggerElement.value = e instanceof Event ? e.currentTarget : null;\n targetElement = e instanceof Event ? (_a = unrefElement(target)) != null ? _a : triggerElement.value : unrefElement(e);\n if (!targetElement)\n throw new Error(\"Target element undefined.\");\n targetElement.requestPointerLock();\n return await until(element).toBe(targetElement);\n }\n async function unlock() {\n if (!element.value)\n return false;\n document.exitPointerLock();\n await until(element).toBeNull();\n return true;\n }\n return {\n isSupported,\n element,\n triggerElement,\n lock,\n unlock\n };\n}\n\nfunction usePointerSwipe(target, options = {}) {\n const targetRef = toRef(target);\n const {\n threshold = 50,\n onSwipe,\n onSwipeEnd,\n onSwipeStart,\n disableTextSelect = false\n } = options;\n const posStart = reactive({ x: 0, y: 0 });\n const updatePosStart = (x, y) => {\n posStart.x = x;\n posStart.y = y;\n };\n const posEnd = reactive({ x: 0, y: 0 });\n const updatePosEnd = (x, y) => {\n posEnd.x = x;\n posEnd.y = y;\n };\n const distanceX = computed(() => posStart.x - posEnd.x);\n const distanceY = computed(() => posStart.y - posEnd.y);\n const { max, abs } = Math;\n const isThresholdExceeded = computed(() => max(abs(distanceX.value), abs(distanceY.value)) >= threshold);\n const isSwiping = ref(false);\n const isPointerDown = ref(false);\n const direction = computed(() => {\n if (!isThresholdExceeded.value)\n return \"none\";\n if (abs(distanceX.value) > abs(distanceY.value)) {\n return distanceX.value > 0 ? \"left\" : \"right\";\n } else {\n return distanceY.value > 0 ? \"up\" : \"down\";\n }\n });\n const eventIsAllowed = (e) => {\n var _a, _b, _c;\n const isReleasingButton = e.buttons === 0;\n const isPrimaryButton = e.buttons === 1;\n return (_c = (_b = (_a = options.pointerTypes) == null ? void 0 : _a.includes(e.pointerType)) != null ? _b : isReleasingButton || isPrimaryButton) != null ? _c : true;\n };\n const stops = [\n useEventListener(target, \"pointerdown\", (e) => {\n if (!eventIsAllowed(e))\n return;\n isPointerDown.value = true;\n const eventTarget = e.target;\n eventTarget == null ? void 0 : eventTarget.setPointerCapture(e.pointerId);\n const { clientX: x, clientY: y } = e;\n updatePosStart(x, y);\n updatePosEnd(x, y);\n onSwipeStart == null ? void 0 : onSwipeStart(e);\n }),\n useEventListener(target, \"pointermove\", (e) => {\n if (!eventIsAllowed(e))\n return;\n if (!isPointerDown.value)\n return;\n const { clientX: x, clientY: y } = e;\n updatePosEnd(x, y);\n if (!isSwiping.value && isThresholdExceeded.value)\n isSwiping.value = true;\n if (isSwiping.value)\n onSwipe == null ? void 0 : onSwipe(e);\n }),\n useEventListener(target, \"pointerup\", (e) => {\n if (!eventIsAllowed(e))\n return;\n if (isSwiping.value)\n onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);\n isPointerDown.value = false;\n isSwiping.value = false;\n })\n ];\n tryOnMounted(() => {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n (_b = (_a = targetRef.value) == null ? void 0 : _a.style) == null ? void 0 : _b.setProperty(\"touch-action\", \"none\");\n if (disableTextSelect) {\n (_d = (_c = targetRef.value) == null ? void 0 : _c.style) == null ? void 0 : _d.setProperty(\"-webkit-user-select\", \"none\");\n (_f = (_e = targetRef.value) == null ? void 0 : _e.style) == null ? void 0 : _f.setProperty(\"-ms-user-select\", \"none\");\n (_h = (_g = targetRef.value) == null ? void 0 : _g.style) == null ? void 0 : _h.setProperty(\"user-select\", \"none\");\n }\n });\n const stop = () => stops.forEach((s) => s());\n return {\n isSwiping: readonly(isSwiping),\n direction: readonly(direction),\n posStart: readonly(posStart),\n posEnd: readonly(posEnd),\n distanceX,\n distanceY,\n stop\n };\n}\n\nfunction usePreferredColorScheme(options) {\n const isLight = useMediaQuery(\"(prefers-color-scheme: light)\", options);\n const isDark = useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n return computed(() => {\n if (isDark.value)\n return \"dark\";\n if (isLight.value)\n return \"light\";\n return \"no-preference\";\n });\n}\n\nfunction usePreferredContrast(options) {\n const isMore = useMediaQuery(\"(prefers-contrast: more)\", options);\n const isLess = useMediaQuery(\"(prefers-contrast: less)\", options);\n const isCustom = useMediaQuery(\"(prefers-contrast: custom)\", options);\n return computed(() => {\n if (isMore.value)\n return \"more\";\n if (isLess.value)\n return \"less\";\n if (isCustom.value)\n return \"custom\";\n return \"no-preference\";\n });\n}\n\nfunction usePreferredLanguages(options = {}) {\n const { window = defaultWindow } = options;\n if (!window)\n return ref([\"en\"]);\n const navigator = window.navigator;\n const value = ref(navigator.languages);\n useEventListener(window, \"languagechange\", () => {\n value.value = navigator.languages;\n });\n return value;\n}\n\nfunction usePreferredReducedMotion(options) {\n const isReduced = useMediaQuery(\"(prefers-reduced-motion: reduce)\", options);\n return computed(() => {\n if (isReduced.value)\n return \"reduce\";\n return \"no-preference\";\n });\n}\n\nfunction usePrevious(value, initialValue) {\n const previous = shallowRef(initialValue);\n watch(\n toRef(value),\n (_, oldValue) => {\n previous.value = oldValue;\n },\n { flush: \"sync\" }\n );\n return readonly(previous);\n}\n\nconst topVarName = \"--vueuse-safe-area-top\";\nconst rightVarName = \"--vueuse-safe-area-right\";\nconst bottomVarName = \"--vueuse-safe-area-bottom\";\nconst leftVarName = \"--vueuse-safe-area-left\";\nfunction useScreenSafeArea() {\n const top = ref(\"\");\n const right = ref(\"\");\n const bottom = ref(\"\");\n const left = ref(\"\");\n if (isClient) {\n const topCssVar = useCssVar(topVarName);\n const rightCssVar = useCssVar(rightVarName);\n const bottomCssVar = useCssVar(bottomVarName);\n const leftCssVar = useCssVar(leftVarName);\n topCssVar.value = \"env(safe-area-inset-top, 0px)\";\n rightCssVar.value = \"env(safe-area-inset-right, 0px)\";\n bottomCssVar.value = \"env(safe-area-inset-bottom, 0px)\";\n leftCssVar.value = \"env(safe-area-inset-left, 0px)\";\n update();\n useEventListener(\"resize\", useDebounceFn(update));\n }\n function update() {\n top.value = getValue(topVarName);\n right.value = getValue(rightVarName);\n bottom.value = getValue(bottomVarName);\n left.value = getValue(leftVarName);\n }\n return {\n top,\n right,\n bottom,\n left,\n update\n };\n}\nfunction getValue(position) {\n return getComputedStyle(document.documentElement).getPropertyValue(position);\n}\n\nfunction useScriptTag(src, onLoaded = noop, options = {}) {\n const {\n immediate = true,\n manual = false,\n type = \"text/javascript\",\n async = true,\n crossOrigin,\n referrerPolicy,\n noModule,\n defer,\n document = defaultDocument,\n attrs = {}\n } = options;\n const scriptTag = ref(null);\n let _promise = null;\n const loadScript = (waitForScriptLoad) => new Promise((resolve, reject) => {\n const resolveWithElement = (el2) => {\n scriptTag.value = el2;\n resolve(el2);\n return el2;\n };\n if (!document) {\n resolve(false);\n return;\n }\n let shouldAppend = false;\n let el = document.querySelector(`script[src=\"${toValue(src)}\"]`);\n if (!el) {\n el = document.createElement(\"script\");\n el.type = type;\n el.async = async;\n el.src = toValue(src);\n if (defer)\n el.defer = defer;\n if (crossOrigin)\n el.crossOrigin = crossOrigin;\n if (noModule)\n el.noModule = noModule;\n if (referrerPolicy)\n el.referrerPolicy = referrerPolicy;\n Object.entries(attrs).forEach(([name, value]) => el == null ? void 0 : el.setAttribute(name, value));\n shouldAppend = true;\n } else if (el.hasAttribute(\"data-loaded\")) {\n resolveWithElement(el);\n }\n el.addEventListener(\"error\", (event) => reject(event));\n el.addEventListener(\"abort\", (event) => reject(event));\n el.addEventListener(\"load\", () => {\n el.setAttribute(\"data-loaded\", \"true\");\n onLoaded(el);\n resolveWithElement(el);\n });\n if (shouldAppend)\n el = document.head.appendChild(el);\n if (!waitForScriptLoad)\n resolveWithElement(el);\n });\n const load = (waitForScriptLoad = true) => {\n if (!_promise)\n _promise = loadScript(waitForScriptLoad);\n return _promise;\n };\n const unload = () => {\n if (!document)\n return;\n _promise = null;\n if (scriptTag.value)\n scriptTag.value = null;\n const el = document.querySelector(`script[src=\"${toValue(src)}\"]`);\n if (el)\n document.head.removeChild(el);\n };\n if (immediate && !manual)\n tryOnMounted(load);\n if (!manual)\n tryOnUnmounted(unload);\n return { scriptTag, load, unload };\n}\n\nfunction checkOverflowScroll(ele) {\n const style = window.getComputedStyle(ele);\n if (style.overflowX === \"scroll\" || style.overflowY === \"scroll\" || style.overflowX === \"auto\" && ele.clientWidth < ele.scrollWidth || style.overflowY === \"auto\" && ele.clientHeight < ele.scrollHeight) {\n return true;\n } else {\n const parent = ele.parentNode;\n if (!parent || parent.tagName === \"BODY\")\n return false;\n return checkOverflowScroll(parent);\n }\n}\nfunction preventDefault(rawEvent) {\n const e = rawEvent || window.event;\n const _target = e.target;\n if (checkOverflowScroll(_target))\n return false;\n if (e.touches.length > 1)\n return true;\n if (e.preventDefault)\n e.preventDefault();\n return false;\n}\nconst elInitialOverflow = /* @__PURE__ */ new WeakMap();\nfunction useScrollLock(element, initialState = false) {\n const isLocked = ref(initialState);\n let stopTouchMoveListener = null;\n let initialOverflow = \"\";\n watch(toRef(element), (el) => {\n const target = resolveElement(toValue(el));\n if (target) {\n const ele = target;\n if (!elInitialOverflow.get(ele))\n elInitialOverflow.set(ele, ele.style.overflow);\n if (ele.style.overflow !== \"hidden\")\n initialOverflow = ele.style.overflow;\n if (ele.style.overflow === \"hidden\")\n return isLocked.value = true;\n if (isLocked.value)\n return ele.style.overflow = \"hidden\";\n }\n }, {\n immediate: true\n });\n const lock = () => {\n const el = resolveElement(toValue(element));\n if (!el || isLocked.value)\n return;\n if (isIOS) {\n stopTouchMoveListener = useEventListener(\n el,\n \"touchmove\",\n (e) => {\n preventDefault(e);\n },\n { passive: false }\n );\n }\n el.style.overflow = \"hidden\";\n isLocked.value = true;\n };\n const unlock = () => {\n const el = resolveElement(toValue(element));\n if (!el || !isLocked.value)\n return;\n isIOS && (stopTouchMoveListener == null ? void 0 : stopTouchMoveListener());\n el.style.overflow = initialOverflow;\n elInitialOverflow.delete(el);\n isLocked.value = false;\n };\n tryOnScopeDispose(unlock);\n return computed({\n get() {\n return isLocked.value;\n },\n set(v) {\n if (v)\n lock();\n else unlock();\n }\n });\n}\n\nfunction useSessionStorage(key, initialValue, options = {}) {\n const { window = defaultWindow } = options;\n return useStorage(key, initialValue, window == null ? void 0 : window.sessionStorage, options);\n}\n\nfunction useShare(shareOptions = {}, options = {}) {\n const { navigator = defaultNavigator } = options;\n const _navigator = navigator;\n const isSupported = useSupported(() => _navigator && \"canShare\" in _navigator);\n const share = async (overrideOptions = {}) => {\n if (isSupported.value) {\n const data = {\n ...toValue(shareOptions),\n ...toValue(overrideOptions)\n };\n let granted = true;\n if (data.files && _navigator.canShare)\n granted = _navigator.canShare({ files: data.files });\n if (granted)\n return _navigator.share(data);\n }\n };\n return {\n isSupported,\n share\n };\n}\n\nconst defaultSortFn = (source, compareFn) => source.sort(compareFn);\nconst defaultCompare = (a, b) => a - b;\nfunction useSorted(...args) {\n var _a, _b, _c, _d;\n const [source] = args;\n let compareFn = defaultCompare;\n let options = {};\n if (args.length === 2) {\n if (typeof args[1] === \"object\") {\n options = args[1];\n compareFn = (_a = options.compareFn) != null ? _a : defaultCompare;\n } else {\n compareFn = (_b = args[1]) != null ? _b : defaultCompare;\n }\n } else if (args.length > 2) {\n compareFn = (_c = args[1]) != null ? _c : defaultCompare;\n options = (_d = args[2]) != null ? _d : {};\n }\n const {\n dirty = false,\n sortFn = defaultSortFn\n } = options;\n if (!dirty)\n return computed(() => sortFn([...toValue(source)], compareFn));\n watchEffect(() => {\n const result = sortFn(toValue(source), compareFn);\n if (isRef(source))\n source.value = result;\n else\n source.splice(0, source.length, ...result);\n });\n return source;\n}\n\nfunction useSpeechRecognition(options = {}) {\n const {\n interimResults = true,\n continuous = true,\n window = defaultWindow\n } = options;\n const lang = toRef(options.lang || \"en-US\");\n const isListening = ref(false);\n const isFinal = ref(false);\n const result = ref(\"\");\n const error = shallowRef(void 0);\n const toggle = (value = !isListening.value) => {\n isListening.value = value;\n };\n const start = () => {\n isListening.value = true;\n };\n const stop = () => {\n isListening.value = false;\n };\n const SpeechRecognition = window && (window.SpeechRecognition || window.webkitSpeechRecognition);\n const isSupported = useSupported(() => SpeechRecognition);\n let recognition;\n if (isSupported.value) {\n recognition = new SpeechRecognition();\n recognition.continuous = continuous;\n recognition.interimResults = interimResults;\n recognition.lang = toValue(lang);\n recognition.onstart = () => {\n isFinal.value = false;\n };\n watch(lang, (lang2) => {\n if (recognition && !isListening.value)\n recognition.lang = lang2;\n });\n recognition.onresult = (event) => {\n const currentResult = event.results[event.resultIndex];\n const { transcript } = currentResult[0];\n isFinal.value = currentResult.isFinal;\n result.value = transcript;\n error.value = void 0;\n };\n recognition.onerror = (event) => {\n error.value = event;\n };\n recognition.onend = () => {\n isListening.value = false;\n recognition.lang = toValue(lang);\n };\n watch(isListening, () => {\n if (isListening.value)\n recognition.start();\n else\n recognition.stop();\n });\n }\n tryOnScopeDispose(() => {\n isListening.value = false;\n });\n return {\n isSupported,\n isListening,\n isFinal,\n recognition,\n result,\n error,\n toggle,\n start,\n stop\n };\n}\n\nfunction useSpeechSynthesis(text, options = {}) {\n const {\n pitch = 1,\n rate = 1,\n volume = 1,\n window = defaultWindow\n } = options;\n const synth = window && window.speechSynthesis;\n const isSupported = useSupported(() => synth);\n const isPlaying = ref(false);\n const status = ref(\"init\");\n const spokenText = toRef(text || \"\");\n const lang = toRef(options.lang || \"en-US\");\n const error = shallowRef(void 0);\n const toggle = (value = !isPlaying.value) => {\n isPlaying.value = value;\n };\n const bindEventsForUtterance = (utterance2) => {\n utterance2.lang = toValue(lang);\n utterance2.voice = toValue(options.voice) || null;\n utterance2.pitch = toValue(pitch);\n utterance2.rate = toValue(rate);\n utterance2.volume = volume;\n utterance2.onstart = () => {\n isPlaying.value = true;\n status.value = \"play\";\n };\n utterance2.onpause = () => {\n isPlaying.value = false;\n status.value = \"pause\";\n };\n utterance2.onresume = () => {\n isPlaying.value = true;\n status.value = \"play\";\n };\n utterance2.onend = () => {\n isPlaying.value = false;\n status.value = \"end\";\n };\n utterance2.onerror = (event) => {\n error.value = event;\n };\n };\n const utterance = computed(() => {\n isPlaying.value = false;\n status.value = \"init\";\n const newUtterance = new SpeechSynthesisUtterance(spokenText.value);\n bindEventsForUtterance(newUtterance);\n return newUtterance;\n });\n const speak = () => {\n synth.cancel();\n utterance && synth.speak(utterance.value);\n };\n const stop = () => {\n synth.cancel();\n isPlaying.value = false;\n };\n if (isSupported.value) {\n bindEventsForUtterance(utterance.value);\n watch(lang, (lang2) => {\n if (utterance.value && !isPlaying.value)\n utterance.value.lang = lang2;\n });\n if (options.voice) {\n watch(options.voice, () => {\n synth.cancel();\n });\n }\n watch(isPlaying, () => {\n if (isPlaying.value)\n synth.resume();\n else\n synth.pause();\n });\n }\n tryOnScopeDispose(() => {\n isPlaying.value = false;\n });\n return {\n isSupported,\n isPlaying,\n status,\n utterance,\n error,\n stop,\n toggle,\n speak\n };\n}\n\nfunction useStepper(steps, initialStep) {\n const stepsRef = ref(steps);\n const stepNames = computed(() => Array.isArray(stepsRef.value) ? stepsRef.value : Object.keys(stepsRef.value));\n const index = ref(stepNames.value.indexOf(initialStep != null ? initialStep : stepNames.value[0]));\n const current = computed(() => at(index.value));\n const isFirst = computed(() => index.value === 0);\n const isLast = computed(() => index.value === stepNames.value.length - 1);\n const next = computed(() => stepNames.value[index.value + 1]);\n const previous = computed(() => stepNames.value[index.value - 1]);\n function at(index2) {\n if (Array.isArray(stepsRef.value))\n return stepsRef.value[index2];\n return stepsRef.value[stepNames.value[index2]];\n }\n function get(step) {\n if (!stepNames.value.includes(step))\n return;\n return at(stepNames.value.indexOf(step));\n }\n function goTo(step) {\n if (stepNames.value.includes(step))\n index.value = stepNames.value.indexOf(step);\n }\n function goToNext() {\n if (isLast.value)\n return;\n index.value++;\n }\n function goToPrevious() {\n if (isFirst.value)\n return;\n index.value--;\n }\n function goBackTo(step) {\n if (isAfter(step))\n goTo(step);\n }\n function isNext(step) {\n return stepNames.value.indexOf(step) === index.value + 1;\n }\n function isPrevious(step) {\n return stepNames.value.indexOf(step) === index.value - 1;\n }\n function isCurrent(step) {\n return stepNames.value.indexOf(step) === index.value;\n }\n function isBefore(step) {\n return index.value < stepNames.value.indexOf(step);\n }\n function isAfter(step) {\n return index.value > stepNames.value.indexOf(step);\n }\n return {\n steps: stepsRef,\n stepNames,\n index,\n current,\n next,\n previous,\n isFirst,\n isLast,\n at,\n get,\n goTo,\n goToNext,\n goToPrevious,\n goBackTo,\n isNext,\n isPrevious,\n isCurrent,\n isBefore,\n isAfter\n };\n}\n\nfunction useStorageAsync(key, initialValue, storage, options = {}) {\n var _a;\n const {\n flush = \"pre\",\n deep = true,\n listenToStorageChanges = true,\n writeDefaults = true,\n mergeDefaults = false,\n shallow,\n window = defaultWindow,\n eventFilter,\n onError = (e) => {\n console.error(e);\n }\n } = options;\n const rawInit = toValue(initialValue);\n const type = guessSerializerType(rawInit);\n const data = (shallow ? shallowRef : ref)(initialValue);\n const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n if (!storage) {\n try {\n storage = getSSRHandler(\"getDefaultStorageAsync\", () => {\n var _a2;\n return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n })();\n } catch (e) {\n onError(e);\n }\n }\n async function read(event) {\n if (!storage || event && event.key !== key)\n return;\n try {\n const rawValue = event ? event.newValue : await storage.getItem(key);\n if (rawValue == null) {\n data.value = rawInit;\n if (writeDefaults && rawInit !== null)\n await storage.setItem(key, await serializer.write(rawInit));\n } else if (mergeDefaults) {\n const value = await serializer.read(rawValue);\n if (typeof mergeDefaults === \"function\")\n data.value = mergeDefaults(value, rawInit);\n else if (type === \"object\" && !Array.isArray(value))\n data.value = { ...rawInit, ...value };\n else data.value = value;\n } else {\n data.value = await serializer.read(rawValue);\n }\n } catch (e) {\n onError(e);\n }\n }\n read();\n if (window && listenToStorageChanges)\n useEventListener(window, \"storage\", (e) => Promise.resolve().then(() => read(e)));\n if (storage) {\n watchWithFilter(\n data,\n async () => {\n try {\n if (data.value == null)\n await storage.removeItem(key);\n else\n await storage.setItem(key, await serializer.write(data.value));\n } catch (e) {\n onError(e);\n }\n },\n {\n flush,\n deep,\n eventFilter\n }\n );\n }\n return data;\n}\n\nlet _id = 0;\nfunction useStyleTag(css, options = {}) {\n const isLoaded = ref(false);\n const {\n document = defaultDocument,\n immediate = true,\n manual = false,\n id = `vueuse_styletag_${++_id}`\n } = options;\n const cssRef = ref(css);\n let stop = () => {\n };\n const load = () => {\n if (!document)\n return;\n const el = document.getElementById(id) || document.createElement(\"style\");\n if (!el.isConnected) {\n el.id = id;\n if (options.media)\n el.media = options.media;\n document.head.appendChild(el);\n }\n if (isLoaded.value)\n return;\n stop = watch(\n cssRef,\n (value) => {\n el.textContent = value;\n },\n { immediate: true }\n );\n isLoaded.value = true;\n };\n const unload = () => {\n if (!document || !isLoaded.value)\n return;\n stop();\n document.head.removeChild(document.getElementById(id));\n isLoaded.value = false;\n };\n if (immediate && !manual)\n tryOnMounted(load);\n if (!manual)\n tryOnScopeDispose(unload);\n return {\n id,\n css: cssRef,\n unload,\n load,\n isLoaded: readonly(isLoaded)\n };\n}\n\nfunction useSwipe(target, options = {}) {\n const {\n threshold = 50,\n onSwipe,\n onSwipeEnd,\n onSwipeStart,\n passive = true,\n window = defaultWindow\n } = options;\n const coordsStart = reactive({ x: 0, y: 0 });\n const coordsEnd = reactive({ x: 0, y: 0 });\n const diffX = computed(() => coordsStart.x - coordsEnd.x);\n const diffY = computed(() => coordsStart.y - coordsEnd.y);\n const { max, abs } = Math;\n const isThresholdExceeded = computed(() => max(abs(diffX.value), abs(diffY.value)) >= threshold);\n const isSwiping = ref(false);\n const direction = computed(() => {\n if (!isThresholdExceeded.value)\n return \"none\";\n if (abs(diffX.value) > abs(diffY.value)) {\n return diffX.value > 0 ? \"left\" : \"right\";\n } else {\n return diffY.value > 0 ? \"up\" : \"down\";\n }\n });\n const getTouchEventCoords = (e) => [e.touches[0].clientX, e.touches[0].clientY];\n const updateCoordsStart = (x, y) => {\n coordsStart.x = x;\n coordsStart.y = y;\n };\n const updateCoordsEnd = (x, y) => {\n coordsEnd.x = x;\n coordsEnd.y = y;\n };\n let listenerOptions;\n const isPassiveEventSupported = checkPassiveEventSupport(window == null ? void 0 : window.document);\n if (!passive)\n listenerOptions = isPassiveEventSupported ? { passive: false, capture: true } : { capture: true };\n else\n listenerOptions = isPassiveEventSupported ? { passive: true } : { capture: false };\n const onTouchEnd = (e) => {\n if (isSwiping.value)\n onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);\n isSwiping.value = false;\n };\n const stops = [\n useEventListener(target, \"touchstart\", (e) => {\n if (e.touches.length !== 1)\n return;\n if (listenerOptions.capture && !listenerOptions.passive)\n e.preventDefault();\n const [x, y] = getTouchEventCoords(e);\n updateCoordsStart(x, y);\n updateCoordsEnd(x, y);\n onSwipeStart == null ? void 0 : onSwipeStart(e);\n }, listenerOptions),\n useEventListener(target, \"touchmove\", (e) => {\n if (e.touches.length !== 1)\n return;\n const [x, y] = getTouchEventCoords(e);\n updateCoordsEnd(x, y);\n if (!isSwiping.value && isThresholdExceeded.value)\n isSwiping.value = true;\n if (isSwiping.value)\n onSwipe == null ? void 0 : onSwipe(e);\n }, listenerOptions),\n useEventListener(target, [\"touchend\", \"touchcancel\"], onTouchEnd, listenerOptions)\n ];\n const stop = () => stops.forEach((s) => s());\n return {\n isPassiveEventSupported,\n isSwiping,\n direction,\n coordsStart,\n coordsEnd,\n lengthX: diffX,\n lengthY: diffY,\n stop\n };\n}\nfunction checkPassiveEventSupport(document) {\n if (!document)\n return false;\n let supportsPassive = false;\n const optionsBlock = {\n get passive() {\n supportsPassive = true;\n return false;\n }\n };\n document.addEventListener(\"x\", noop, optionsBlock);\n document.removeEventListener(\"x\", noop);\n return supportsPassive;\n}\n\nfunction useTemplateRefsList() {\n const refs = ref([]);\n refs.value.set = (el) => {\n if (el)\n refs.value.push(el);\n };\n onBeforeUpdate(() => {\n refs.value.length = 0;\n });\n return refs;\n}\n\nfunction useTextDirection(options = {}) {\n const {\n document = defaultDocument,\n selector = \"html\",\n observe = false,\n initialValue = \"ltr\"\n } = options;\n function getValue() {\n var _a, _b;\n return (_b = (_a = document == null ? void 0 : document.querySelector(selector)) == null ? void 0 : _a.getAttribute(\"dir\")) != null ? _b : initialValue;\n }\n const dir = ref(getValue());\n tryOnMounted(() => dir.value = getValue());\n if (observe && document) {\n useMutationObserver(\n document.querySelector(selector),\n () => dir.value = getValue(),\n { attributes: true }\n );\n }\n return computed({\n get() {\n return dir.value;\n },\n set(v) {\n var _a, _b;\n dir.value = v;\n if (!document)\n return;\n if (dir.value)\n (_a = document.querySelector(selector)) == null ? void 0 : _a.setAttribute(\"dir\", dir.value);\n else\n (_b = document.querySelector(selector)) == null ? void 0 : _b.removeAttribute(\"dir\");\n }\n });\n}\n\nfunction getRangesFromSelection(selection) {\n var _a;\n const rangeCount = (_a = selection.rangeCount) != null ? _a : 0;\n return Array.from({ length: rangeCount }, (_, i) => selection.getRangeAt(i));\n}\nfunction useTextSelection(options = {}) {\n const {\n window = defaultWindow\n } = options;\n const selection = ref(null);\n const text = computed(() => {\n var _a, _b;\n return (_b = (_a = selection.value) == null ? void 0 : _a.toString()) != null ? _b : \"\";\n });\n const ranges = computed(() => selection.value ? getRangesFromSelection(selection.value) : []);\n const rects = computed(() => ranges.value.map((range) => range.getBoundingClientRect()));\n function onSelectionChange() {\n selection.value = null;\n if (window)\n selection.value = window.getSelection();\n }\n if (window)\n useEventListener(window.document, \"selectionchange\", onSelectionChange);\n return {\n text,\n rects,\n ranges,\n selection\n };\n}\n\nfunction useTextareaAutosize(options) {\n var _a;\n const textarea = ref(options == null ? void 0 : options.element);\n const input = ref(options == null ? void 0 : options.input);\n const styleProp = (_a = options == null ? void 0 : options.styleProp) != null ? _a : \"height\";\n const textareaScrollHeight = ref(1);\n function triggerResize() {\n var _a2;\n if (!textarea.value)\n return;\n let height = \"\";\n textarea.value.style[styleProp] = \"1px\";\n textareaScrollHeight.value = (_a2 = textarea.value) == null ? void 0 : _a2.scrollHeight;\n if (options == null ? void 0 : options.styleTarget)\n toValue(options.styleTarget).style[styleProp] = `${textareaScrollHeight.value}px`;\n else\n height = `${textareaScrollHeight.value}px`;\n textarea.value.style[styleProp] = height;\n }\n watch([input, textarea], () => nextTick(triggerResize), { immediate: true });\n watch(textareaScrollHeight, () => {\n var _a2;\n return (_a2 = options == null ? void 0 : options.onResize) == null ? void 0 : _a2.call(options);\n });\n useResizeObserver(textarea, () => triggerResize());\n if (options == null ? void 0 : options.watch)\n watch(options.watch, triggerResize, { immediate: true, deep: true });\n return {\n textarea,\n input,\n triggerResize\n };\n}\n\nfunction useThrottledRefHistory(source, options = {}) {\n const { throttle = 200, trailing = true } = options;\n const filter = throttleFilter(throttle, trailing);\n const history = useRefHistory(source, { ...options, eventFilter: filter });\n return {\n ...history\n };\n}\n\nconst DEFAULT_UNITS = [\n { max: 6e4, value: 1e3, name: \"second\" },\n { max: 276e4, value: 6e4, name: \"minute\" },\n { max: 72e6, value: 36e5, name: \"hour\" },\n { max: 5184e5, value: 864e5, name: \"day\" },\n { max: 24192e5, value: 6048e5, name: \"week\" },\n { max: 28512e6, value: 2592e6, name: \"month\" },\n { max: Number.POSITIVE_INFINITY, value: 31536e6, name: \"year\" }\n];\nconst DEFAULT_MESSAGES = {\n justNow: \"just now\",\n past: (n) => n.match(/\\d/) ? `${n} ago` : n,\n future: (n) => n.match(/\\d/) ? `in ${n}` : n,\n month: (n, past) => n === 1 ? past ? \"last month\" : \"next month\" : `${n} month${n > 1 ? \"s\" : \"\"}`,\n year: (n, past) => n === 1 ? past ? \"last year\" : \"next year\" : `${n} year${n > 1 ? \"s\" : \"\"}`,\n day: (n, past) => n === 1 ? past ? \"yesterday\" : \"tomorrow\" : `${n} day${n > 1 ? \"s\" : \"\"}`,\n week: (n, past) => n === 1 ? past ? \"last week\" : \"next week\" : `${n} week${n > 1 ? \"s\" : \"\"}`,\n hour: (n) => `${n} hour${n > 1 ? \"s\" : \"\"}`,\n minute: (n) => `${n} minute${n > 1 ? \"s\" : \"\"}`,\n second: (n) => `${n} second${n > 1 ? \"s\" : \"\"}`,\n invalid: \"\"\n};\nfunction DEFAULT_FORMATTER(date) {\n return date.toISOString().slice(0, 10);\n}\nfunction useTimeAgo(time, options = {}) {\n const {\n controls: exposeControls = false,\n updateInterval = 3e4\n } = options;\n const { now, ...controls } = useNow({ interval: updateInterval, controls: true });\n const timeAgo = computed(() => formatTimeAgo(new Date(toValue(time)), options, toValue(now)));\n if (exposeControls) {\n return {\n timeAgo,\n ...controls\n };\n } else {\n return timeAgo;\n }\n}\nfunction formatTimeAgo(from, options = {}, now = Date.now()) {\n var _a;\n const {\n max,\n messages = DEFAULT_MESSAGES,\n fullDateFormatter = DEFAULT_FORMATTER,\n units = DEFAULT_UNITS,\n showSecond = false,\n rounding = \"round\"\n } = options;\n const roundFn = typeof rounding === \"number\" ? (n) => +n.toFixed(rounding) : Math[rounding];\n const diff = +now - +from;\n const absDiff = Math.abs(diff);\n function getValue(diff2, unit) {\n return roundFn(Math.abs(diff2) / unit.value);\n }\n function format(diff2, unit) {\n const val = getValue(diff2, unit);\n const past = diff2 > 0;\n const str = applyFormat(unit.name, val, past);\n return applyFormat(past ? \"past\" : \"future\", str, past);\n }\n function applyFormat(name, val, isPast) {\n const formatter = messages[name];\n if (typeof formatter === \"function\")\n return formatter(val, isPast);\n return formatter.replace(\"{0}\", val.toString());\n }\n if (absDiff < 6e4 && !showSecond)\n return messages.justNow;\n if (typeof max === \"number\" && absDiff > max)\n return fullDateFormatter(new Date(from));\n if (typeof max === \"string\") {\n const unitMax = (_a = units.find((i) => i.name === max)) == null ? void 0 : _a.max;\n if (unitMax && absDiff > unitMax)\n return fullDateFormatter(new Date(from));\n }\n for (const [idx, unit] of units.entries()) {\n const val = getValue(diff, unit);\n if (val <= 0 && units[idx - 1])\n return format(diff, units[idx - 1]);\n if (absDiff < unit.max)\n return format(diff, unit);\n }\n return messages.invalid;\n}\n\nfunction useTimeoutPoll(fn, interval, timeoutPollOptions) {\n const { start } = useTimeoutFn(loop, interval, { immediate: false });\n const isActive = ref(false);\n async function loop() {\n if (!isActive.value)\n return;\n await fn();\n start();\n }\n function resume() {\n if (!isActive.value) {\n isActive.value = true;\n loop();\n }\n }\n function pause() {\n isActive.value = false;\n }\n if (timeoutPollOptions == null ? void 0 : timeoutPollOptions.immediate)\n resume();\n tryOnScopeDispose(pause);\n return {\n isActive,\n pause,\n resume\n };\n}\n\nfunction useTimestamp(options = {}) {\n const {\n controls: exposeControls = false,\n offset = 0,\n immediate = true,\n interval = \"requestAnimationFrame\",\n callback\n } = options;\n const ts = ref(timestamp() + offset);\n const update = () => ts.value = timestamp() + offset;\n const cb = callback ? () => {\n update();\n callback(ts.value);\n } : update;\n const controls = interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate });\n if (exposeControls) {\n return {\n timestamp: ts,\n ...controls\n };\n } else {\n return ts;\n }\n}\n\nfunction useTitle(newTitle = null, options = {}) {\n var _a, _b, _c;\n const {\n document = defaultDocument,\n restoreOnUnmount = (t) => t\n } = options;\n const originalTitle = (_a = document == null ? void 0 : document.title) != null ? _a : \"\";\n const title = toRef((_b = newTitle != null ? newTitle : document == null ? void 0 : document.title) != null ? _b : null);\n const isReadonly = newTitle && typeof newTitle === \"function\";\n function format(t) {\n if (!(\"titleTemplate\" in options))\n return t;\n const template = options.titleTemplate || \"%s\";\n return typeof template === \"function\" ? template(t) : toValue(template).replace(/%s/g, t);\n }\n watch(\n title,\n (t, o) => {\n if (t !== o && document)\n document.title = format(typeof t === \"string\" ? t : \"\");\n },\n { immediate: true }\n );\n if (options.observe && !options.titleTemplate && document && !isReadonly) {\n useMutationObserver(\n (_c = document.head) == null ? void 0 : _c.querySelector(\"title\"),\n () => {\n if (document && document.title !== title.value)\n title.value = format(document.title);\n },\n { childList: true }\n );\n }\n tryOnBeforeUnmount(() => {\n if (restoreOnUnmount) {\n const restoredTitle = restoreOnUnmount(originalTitle, title.value || \"\");\n if (restoredTitle != null && document)\n document.title = restoredTitle;\n }\n });\n return title;\n}\n\nconst _TransitionPresets = {\n easeInSine: [0.12, 0, 0.39, 0],\n easeOutSine: [0.61, 1, 0.88, 1],\n easeInOutSine: [0.37, 0, 0.63, 1],\n easeInQuad: [0.11, 0, 0.5, 0],\n easeOutQuad: [0.5, 1, 0.89, 1],\n easeInOutQuad: [0.45, 0, 0.55, 1],\n easeInCubic: [0.32, 0, 0.67, 0],\n easeOutCubic: [0.33, 1, 0.68, 1],\n easeInOutCubic: [0.65, 0, 0.35, 1],\n easeInQuart: [0.5, 0, 0.75, 0],\n easeOutQuart: [0.25, 1, 0.5, 1],\n easeInOutQuart: [0.76, 0, 0.24, 1],\n easeInQuint: [0.64, 0, 0.78, 0],\n easeOutQuint: [0.22, 1, 0.36, 1],\n easeInOutQuint: [0.83, 0, 0.17, 1],\n easeInExpo: [0.7, 0, 0.84, 0],\n easeOutExpo: [0.16, 1, 0.3, 1],\n easeInOutExpo: [0.87, 0, 0.13, 1],\n easeInCirc: [0.55, 0, 1, 0.45],\n easeOutCirc: [0, 0.55, 0.45, 1],\n easeInOutCirc: [0.85, 0, 0.15, 1],\n easeInBack: [0.36, 0, 0.66, -0.56],\n easeOutBack: [0.34, 1.56, 0.64, 1],\n easeInOutBack: [0.68, -0.6, 0.32, 1.6]\n};\nconst TransitionPresets = /* @__PURE__ */ Object.assign({}, { linear: identity }, _TransitionPresets);\nfunction createEasingFunction([p0, p1, p2, p3]) {\n const a = (a1, a2) => 1 - 3 * a2 + 3 * a1;\n const b = (a1, a2) => 3 * a2 - 6 * a1;\n const c = (a1) => 3 * a1;\n const calcBezier = (t, a1, a2) => ((a(a1, a2) * t + b(a1, a2)) * t + c(a1)) * t;\n const getSlope = (t, a1, a2) => 3 * a(a1, a2) * t * t + 2 * b(a1, a2) * t + c(a1);\n const getTforX = (x) => {\n let aGuessT = x;\n for (let i = 0; i < 4; ++i) {\n const currentSlope = getSlope(aGuessT, p0, p2);\n if (currentSlope === 0)\n return aGuessT;\n const currentX = calcBezier(aGuessT, p0, p2) - x;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n };\n return (x) => p0 === p1 && p2 === p3 ? x : calcBezier(getTforX(x), p1, p3);\n}\nfunction lerp(a, b, alpha) {\n return a + alpha * (b - a);\n}\nfunction toVec(t) {\n return (typeof t === \"number\" ? [t] : t) || [];\n}\nfunction executeTransition(source, from, to, options = {}) {\n var _a, _b;\n const fromVal = toValue(from);\n const toVal = toValue(to);\n const v1 = toVec(fromVal);\n const v2 = toVec(toVal);\n const duration = (_a = toValue(options.duration)) != null ? _a : 1e3;\n const startedAt = Date.now();\n const endAt = Date.now() + duration;\n const trans = typeof options.transition === \"function\" ? options.transition : (_b = toValue(options.transition)) != null ? _b : identity;\n const ease = typeof trans === \"function\" ? trans : createEasingFunction(trans);\n return new Promise((resolve) => {\n source.value = fromVal;\n const tick = () => {\n var _a2;\n if ((_a2 = options.abort) == null ? void 0 : _a2.call(options)) {\n resolve();\n return;\n }\n const now = Date.now();\n const alpha = ease((now - startedAt) / duration);\n const arr = toVec(source.value).map((n, i) => lerp(v1[i], v2[i], alpha));\n if (Array.isArray(source.value))\n source.value = arr.map((n, i) => {\n var _a3, _b2;\n return lerp((_a3 = v1[i]) != null ? _a3 : 0, (_b2 = v2[i]) != null ? _b2 : 0, alpha);\n });\n else if (typeof source.value === \"number\")\n source.value = arr[0];\n if (now < endAt) {\n requestAnimationFrame(tick);\n } else {\n source.value = toVal;\n resolve();\n }\n };\n tick();\n });\n}\nfunction useTransition(source, options = {}) {\n let currentId = 0;\n const sourceVal = () => {\n const v = toValue(source);\n return typeof v === \"number\" ? v : v.map(toValue);\n };\n const outputRef = ref(sourceVal());\n watch(sourceVal, async (to) => {\n var _a, _b;\n if (toValue(options.disabled))\n return;\n const id = ++currentId;\n if (options.delay)\n await promiseTimeout(toValue(options.delay));\n if (id !== currentId)\n return;\n const toVal = Array.isArray(to) ? to.map(toValue) : toValue(to);\n (_a = options.onStarted) == null ? void 0 : _a.call(options);\n await executeTransition(outputRef, outputRef.value, toVal, {\n ...options,\n abort: () => {\n var _a2;\n return id !== currentId || ((_a2 = options.abort) == null ? void 0 : _a2.call(options));\n }\n });\n (_b = options.onFinished) == null ? void 0 : _b.call(options);\n }, { deep: true });\n watch(() => toValue(options.disabled), (disabled) => {\n if (disabled) {\n currentId++;\n outputRef.value = sourceVal();\n }\n });\n tryOnScopeDispose(() => {\n currentId++;\n });\n return computed(() => toValue(options.disabled) ? sourceVal() : outputRef.value);\n}\n\nfunction useUrlSearchParams(mode = \"history\", options = {}) {\n const {\n initialValue = {},\n removeNullishValues = true,\n removeFalsyValues = false,\n write: enableWrite = true,\n window = defaultWindow\n } = options;\n if (!window)\n return reactive(initialValue);\n const state = reactive({});\n function getRawParams() {\n if (mode === \"history\") {\n return window.location.search || \"\";\n } else if (mode === \"hash\") {\n const hash = window.location.hash || \"\";\n const index = hash.indexOf(\"?\");\n return index > 0 ? hash.slice(index) : \"\";\n } else {\n return (window.location.hash || \"\").replace(/^#/, \"\");\n }\n }\n function constructQuery(params) {\n const stringified = params.toString();\n if (mode === \"history\")\n return `${stringified ? `?${stringified}` : \"\"}${window.location.hash || \"\"}`;\n if (mode === \"hash-params\")\n return `${window.location.search || \"\"}${stringified ? `#${stringified}` : \"\"}`;\n const hash = window.location.hash || \"#\";\n const index = hash.indexOf(\"?\");\n if (index > 0)\n return `${hash.slice(0, index)}${stringified ? `?${stringified}` : \"\"}`;\n return `${hash}${stringified ? `?${stringified}` : \"\"}`;\n }\n function read() {\n return new URLSearchParams(getRawParams());\n }\n function updateState(params) {\n const unusedKeys = new Set(Object.keys(state));\n for (const key of params.keys()) {\n const paramsForKey = params.getAll(key);\n state[key] = paramsForKey.length > 1 ? paramsForKey : params.get(key) || \"\";\n unusedKeys.delete(key);\n }\n Array.from(unusedKeys).forEach((key) => delete state[key]);\n }\n const { pause, resume } = pausableWatch(\n state,\n () => {\n const params = new URLSearchParams(\"\");\n Object.keys(state).forEach((key) => {\n const mapEntry = state[key];\n if (Array.isArray(mapEntry))\n mapEntry.forEach((value) => params.append(key, value));\n else if (removeNullishValues && mapEntry == null)\n params.delete(key);\n else if (removeFalsyValues && !mapEntry)\n params.delete(key);\n else\n params.set(key, mapEntry);\n });\n write(params);\n },\n { deep: true }\n );\n function write(params, shouldUpdate) {\n pause();\n if (shouldUpdate)\n updateState(params);\n window.history.replaceState(\n window.history.state,\n window.document.title,\n window.location.pathname + constructQuery(params)\n );\n resume();\n }\n function onChanged() {\n if (!enableWrite)\n return;\n write(read(), true);\n }\n useEventListener(window, \"popstate\", onChanged, false);\n if (mode !== \"history\")\n useEventListener(window, \"hashchange\", onChanged, false);\n const initial = read();\n if (initial.keys().next().value)\n updateState(initial);\n else\n Object.assign(state, initialValue);\n return state;\n}\n\nfunction useUserMedia(options = {}) {\n var _a, _b;\n const enabled = ref((_a = options.enabled) != null ? _a : false);\n const autoSwitch = ref((_b = options.autoSwitch) != null ? _b : true);\n const constraints = ref(options.constraints);\n const { navigator = defaultNavigator } = options;\n const isSupported = useSupported(() => {\n var _a2;\n return (_a2 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a2.getUserMedia;\n });\n const stream = shallowRef();\n function getDeviceOptions(type) {\n switch (type) {\n case \"video\": {\n if (constraints.value)\n return constraints.value.video || false;\n break;\n }\n case \"audio\": {\n if (constraints.value)\n return constraints.value.audio || false;\n break;\n }\n }\n }\n async function _start() {\n if (!isSupported.value || stream.value)\n return;\n stream.value = await navigator.mediaDevices.getUserMedia({\n video: getDeviceOptions(\"video\"),\n audio: getDeviceOptions(\"audio\")\n });\n return stream.value;\n }\n function _stop() {\n var _a2;\n (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop());\n stream.value = void 0;\n }\n function stop() {\n _stop();\n enabled.value = false;\n }\n async function start() {\n await _start();\n if (stream.value)\n enabled.value = true;\n return stream.value;\n }\n async function restart() {\n _stop();\n return await start();\n }\n watch(\n enabled,\n (v) => {\n if (v)\n _start();\n else _stop();\n },\n { immediate: true }\n );\n watch(\n constraints,\n () => {\n if (autoSwitch.value && stream.value)\n restart();\n },\n { immediate: true }\n );\n tryOnScopeDispose(() => {\n stop();\n });\n return {\n isSupported,\n stream,\n start,\n stop,\n restart,\n constraints,\n enabled,\n autoSwitch\n };\n}\n\nfunction useVModel(props, key, emit, options = {}) {\n var _a, _b, _c, _d, _e;\n const {\n clone = false,\n passive = false,\n eventName,\n deep = false,\n defaultValue,\n shouldEmit\n } = options;\n const vm = getCurrentInstance();\n const _emit = emit || (vm == null ? void 0 : vm.emit) || ((_a = vm == null ? void 0 : vm.$emit) == null ? void 0 : _a.bind(vm)) || ((_c = (_b = vm == null ? void 0 : vm.proxy) == null ? void 0 : _b.$emit) == null ? void 0 : _c.bind(vm == null ? void 0 : vm.proxy));\n let event = eventName;\n if (!key) {\n if (isVue2) {\n const modelOptions = (_e = (_d = vm == null ? void 0 : vm.proxy) == null ? void 0 : _d.$options) == null ? void 0 : _e.model;\n key = (modelOptions == null ? void 0 : modelOptions.value) || \"value\";\n if (!eventName)\n event = (modelOptions == null ? void 0 : modelOptions.event) || \"input\";\n } else {\n key = \"modelValue\";\n }\n }\n event = event || `update:${key.toString()}`;\n const cloneFn = (val) => !clone ? val : typeof clone === \"function\" ? clone(val) : cloneFnJSON(val);\n const getValue = () => isDef(props[key]) ? cloneFn(props[key]) : defaultValue;\n const triggerEmit = (value) => {\n if (shouldEmit) {\n if (shouldEmit(value))\n _emit(event, value);\n } else {\n _emit(event, value);\n }\n };\n if (passive) {\n const initialValue = getValue();\n const proxy = ref(initialValue);\n let isUpdating = false;\n watch(\n () => props[key],\n (v) => {\n if (!isUpdating) {\n isUpdating = true;\n proxy.value = cloneFn(v);\n nextTick(() => isUpdating = false);\n }\n }\n );\n watch(\n proxy,\n (v) => {\n if (!isUpdating && (v !== props[key] || deep))\n triggerEmit(v);\n },\n { deep }\n );\n return proxy;\n } else {\n return computed({\n get() {\n return getValue();\n },\n set(value) {\n triggerEmit(value);\n }\n });\n }\n}\n\nfunction useVModels(props, emit, options = {}) {\n const ret = {};\n for (const key in props) {\n ret[key] = useVModel(\n props,\n key,\n emit,\n options\n );\n }\n return ret;\n}\n\nfunction useVibrate(options) {\n const {\n pattern = [],\n interval = 0,\n navigator = defaultNavigator\n } = options || {};\n const isSupported = useSupported(() => typeof navigator !== \"undefined\" && \"vibrate\" in navigator);\n const patternRef = toRef(pattern);\n let intervalControls;\n const vibrate = (pattern2 = patternRef.value) => {\n if (isSupported.value)\n navigator.vibrate(pattern2);\n };\n const stop = () => {\n if (isSupported.value)\n navigator.vibrate(0);\n intervalControls == null ? void 0 : intervalControls.pause();\n };\n if (interval > 0) {\n intervalControls = useIntervalFn(\n vibrate,\n interval,\n {\n immediate: false,\n immediateCallback: false\n }\n );\n }\n return {\n isSupported,\n pattern,\n intervalControls,\n vibrate,\n stop\n };\n}\n\nfunction useVirtualList(list, options) {\n const { containerStyle, wrapperProps, scrollTo, calculateRange, currentList, containerRef } = \"itemHeight\" in options ? useVerticalVirtualList(options, list) : useHorizontalVirtualList(options, list);\n return {\n list: currentList,\n scrollTo,\n containerProps: {\n ref: containerRef,\n onScroll: () => {\n calculateRange();\n },\n style: containerStyle\n },\n wrapperProps\n };\n}\nfunction useVirtualListResources(list) {\n const containerRef = ref(null);\n const size = useElementSize(containerRef);\n const currentList = ref([]);\n const source = shallowRef(list);\n const state = ref({ start: 0, end: 10 });\n return { state, source, currentList, size, containerRef };\n}\nfunction createGetViewCapacity(state, source, itemSize) {\n return (containerSize) => {\n if (typeof itemSize === \"number\")\n return Math.ceil(containerSize / itemSize);\n const { start = 0 } = state.value;\n let sum = 0;\n let capacity = 0;\n for (let i = start; i < source.value.length; i++) {\n const size = itemSize(i);\n sum += size;\n capacity = i;\n if (sum > containerSize)\n break;\n }\n return capacity - start;\n };\n}\nfunction createGetOffset(source, itemSize) {\n return (scrollDirection) => {\n if (typeof itemSize === \"number\")\n return Math.floor(scrollDirection / itemSize) + 1;\n let sum = 0;\n let offset = 0;\n for (let i = 0; i < source.value.length; i++) {\n const size = itemSize(i);\n sum += size;\n if (sum >= scrollDirection) {\n offset = i;\n break;\n }\n }\n return offset + 1;\n };\n}\nfunction createCalculateRange(type, overscan, getOffset, getViewCapacity, { containerRef, state, currentList, source }) {\n return () => {\n const element = containerRef.value;\n if (element) {\n const offset = getOffset(type === \"vertical\" ? element.scrollTop : element.scrollLeft);\n const viewCapacity = getViewCapacity(type === \"vertical\" ? element.clientHeight : element.clientWidth);\n const from = offset - overscan;\n const to = offset + viewCapacity + overscan;\n state.value = {\n start: from < 0 ? 0 : from,\n end: to > source.value.length ? source.value.length : to\n };\n currentList.value = source.value.slice(state.value.start, state.value.end).map((ele, index) => ({\n data: ele,\n index: index + state.value.start\n }));\n }\n };\n}\nfunction createGetDistance(itemSize, source) {\n return (index) => {\n if (typeof itemSize === \"number\") {\n const size2 = index * itemSize;\n return size2;\n }\n const size = source.value.slice(0, index).reduce((sum, _, i) => sum + itemSize(i), 0);\n return size;\n };\n}\nfunction useWatchForSizes(size, list, containerRef, calculateRange) {\n watch([size.width, size.height, list, containerRef], () => {\n calculateRange();\n });\n}\nfunction createComputedTotalSize(itemSize, source) {\n return computed(() => {\n if (typeof itemSize === \"number\")\n return source.value.length * itemSize;\n return source.value.reduce((sum, _, index) => sum + itemSize(index), 0);\n });\n}\nconst scrollToDictionaryForElementScrollKey = {\n horizontal: \"scrollLeft\",\n vertical: \"scrollTop\"\n};\nfunction createScrollTo(type, calculateRange, getDistance, containerRef) {\n return (index) => {\n if (containerRef.value) {\n containerRef.value[scrollToDictionaryForElementScrollKey[type]] = getDistance(index);\n calculateRange();\n }\n };\n}\nfunction useHorizontalVirtualList(options, list) {\n const resources = useVirtualListResources(list);\n const { state, source, currentList, size, containerRef } = resources;\n const containerStyle = { overflowX: \"auto\" };\n const { itemWidth, overscan = 5 } = options;\n const getViewCapacity = createGetViewCapacity(state, source, itemWidth);\n const getOffset = createGetOffset(source, itemWidth);\n const calculateRange = createCalculateRange(\"horizontal\", overscan, getOffset, getViewCapacity, resources);\n const getDistanceLeft = createGetDistance(itemWidth, source);\n const offsetLeft = computed(() => getDistanceLeft(state.value.start));\n const totalWidth = createComputedTotalSize(itemWidth, source);\n useWatchForSizes(size, list, containerRef, calculateRange);\n const scrollTo = createScrollTo(\"horizontal\", calculateRange, getDistanceLeft, containerRef);\n const wrapperProps = computed(() => {\n return {\n style: {\n height: \"100%\",\n width: `${totalWidth.value - offsetLeft.value}px`,\n marginLeft: `${offsetLeft.value}px`,\n display: \"flex\"\n }\n };\n });\n return {\n scrollTo,\n calculateRange,\n wrapperProps,\n containerStyle,\n currentList,\n containerRef\n };\n}\nfunction useVerticalVirtualList(options, list) {\n const resources = useVirtualListResources(list);\n const { state, source, currentList, size, containerRef } = resources;\n const containerStyle = { overflowY: \"auto\" };\n const { itemHeight, overscan = 5 } = options;\n const getViewCapacity = createGetViewCapacity(state, source, itemHeight);\n const getOffset = createGetOffset(source, itemHeight);\n const calculateRange = createCalculateRange(\"vertical\", overscan, getOffset, getViewCapacity, resources);\n const getDistanceTop = createGetDistance(itemHeight, source);\n const offsetTop = computed(() => getDistanceTop(state.value.start));\n const totalHeight = createComputedTotalSize(itemHeight, source);\n useWatchForSizes(size, list, containerRef, calculateRange);\n const scrollTo = createScrollTo(\"vertical\", calculateRange, getDistanceTop, containerRef);\n const wrapperProps = computed(() => {\n return {\n style: {\n width: \"100%\",\n height: `${totalHeight.value - offsetTop.value}px`,\n marginTop: `${offsetTop.value}px`\n }\n };\n });\n return {\n calculateRange,\n scrollTo,\n containerStyle,\n wrapperProps,\n currentList,\n containerRef\n };\n}\n\nfunction useWakeLock(options = {}) {\n const {\n navigator = defaultNavigator,\n document = defaultDocument\n } = options;\n let wakeLock;\n const isSupported = useSupported(() => navigator && \"wakeLock\" in navigator);\n const isActive = ref(false);\n async function onVisibilityChange() {\n if (!isSupported.value || !wakeLock)\n return;\n if (document && document.visibilityState === \"visible\")\n wakeLock = await navigator.wakeLock.request(\"screen\");\n isActive.value = !wakeLock.released;\n }\n if (document)\n useEventListener(document, \"visibilitychange\", onVisibilityChange, { passive: true });\n async function request(type) {\n if (!isSupported.value)\n return;\n wakeLock = await navigator.wakeLock.request(type);\n isActive.value = !wakeLock.released;\n }\n async function release() {\n if (!isSupported.value || !wakeLock)\n return;\n await wakeLock.release();\n isActive.value = !wakeLock.released;\n wakeLock = null;\n }\n return {\n isSupported,\n isActive,\n request,\n release\n };\n}\n\nfunction useWebNotification(options = {}) {\n const {\n window = defaultWindow,\n requestPermissions: _requestForPermissions = true\n } = options;\n const defaultWebNotificationOptions = options;\n const isSupported = useSupported(() => {\n if (!window || !(\"Notification\" in window))\n return false;\n try {\n new Notification(\"\");\n } catch (e) {\n return false;\n }\n return true;\n });\n const permissionGranted = ref(isSupported.value && \"permission\" in Notification && Notification.permission === \"granted\");\n const notification = ref(null);\n const ensurePermissions = async () => {\n if (!isSupported.value)\n return;\n if (!permissionGranted.value && Notification.permission !== \"denied\") {\n const result = await Notification.requestPermission();\n if (result === \"granted\")\n permissionGranted.value = true;\n }\n return permissionGranted.value;\n };\n const { on: onClick, trigger: clickTrigger } = createEventHook();\n const { on: onShow, trigger: showTrigger } = createEventHook();\n const { on: onError, trigger: errorTrigger } = createEventHook();\n const { on: onClose, trigger: closeTrigger } = createEventHook();\n const show = async (overrides) => {\n if (!isSupported.value || !permissionGranted.value)\n return;\n const options2 = Object.assign({}, defaultWebNotificationOptions, overrides);\n notification.value = new Notification(options2.title || \"\", options2);\n notification.value.onclick = clickTrigger;\n notification.value.onshow = showTrigger;\n notification.value.onerror = errorTrigger;\n notification.value.onclose = closeTrigger;\n return notification.value;\n };\n const close = () => {\n if (notification.value)\n notification.value.close();\n notification.value = null;\n };\n if (_requestForPermissions)\n tryOnMounted(ensurePermissions);\n tryOnScopeDispose(close);\n if (isSupported.value && window) {\n const document = window.document;\n useEventListener(document, \"visibilitychange\", (e) => {\n e.preventDefault();\n if (document.visibilityState === \"visible\") {\n close();\n }\n });\n }\n return {\n isSupported,\n notification,\n ensurePermissions,\n permissionGranted,\n show,\n close,\n onClick,\n onShow,\n onError,\n onClose\n };\n}\n\nconst DEFAULT_PING_MESSAGE = \"ping\";\nfunction resolveNestedOptions(options) {\n if (options === true)\n return {};\n return options;\n}\nfunction useWebSocket(url, options = {}) {\n const {\n onConnected,\n onDisconnected,\n onError,\n onMessage,\n immediate = true,\n autoClose = true,\n protocols = []\n } = options;\n const data = ref(null);\n const status = ref(\"CLOSED\");\n const wsRef = ref();\n const urlRef = toRef(url);\n let heartbeatPause;\n let heartbeatResume;\n let explicitlyClosed = false;\n let retried = 0;\n let bufferedData = [];\n let pongTimeoutWait;\n const _sendBuffer = () => {\n if (bufferedData.length && wsRef.value && status.value === \"OPEN\") {\n for (const buffer of bufferedData)\n wsRef.value.send(buffer);\n bufferedData = [];\n }\n };\n const resetHeartbeat = () => {\n clearTimeout(pongTimeoutWait);\n pongTimeoutWait = void 0;\n };\n const close = (code = 1e3, reason) => {\n if (!isClient || !wsRef.value)\n return;\n explicitlyClosed = true;\n resetHeartbeat();\n heartbeatPause == null ? void 0 : heartbeatPause();\n wsRef.value.close(code, reason);\n wsRef.value = void 0;\n };\n const send = (data2, useBuffer = true) => {\n if (!wsRef.value || status.value !== \"OPEN\") {\n if (useBuffer)\n bufferedData.push(data2);\n return false;\n }\n _sendBuffer();\n wsRef.value.send(data2);\n return true;\n };\n const _init = () => {\n if (explicitlyClosed || typeof urlRef.value === \"undefined\")\n return;\n const ws = new WebSocket(urlRef.value, protocols);\n wsRef.value = ws;\n status.value = \"CONNECTING\";\n ws.onopen = () => {\n status.value = \"OPEN\";\n onConnected == null ? void 0 : onConnected(ws);\n heartbeatResume == null ? void 0 : heartbeatResume();\n _sendBuffer();\n };\n ws.onclose = (ev) => {\n status.value = \"CLOSED\";\n onDisconnected == null ? void 0 : onDisconnected(ws, ev);\n if (!explicitlyClosed && options.autoReconnect) {\n const {\n retries = -1,\n delay = 1e3,\n onFailed\n } = resolveNestedOptions(options.autoReconnect);\n retried += 1;\n if (typeof retries === \"number\" && (retries < 0 || retried < retries))\n setTimeout(_init, delay);\n else if (typeof retries === \"function\" && retries())\n setTimeout(_init, delay);\n else\n onFailed == null ? void 0 : onFailed();\n }\n };\n ws.onerror = (e) => {\n onError == null ? void 0 : onError(ws, e);\n };\n ws.onmessage = (e) => {\n if (options.heartbeat) {\n resetHeartbeat();\n const {\n message = DEFAULT_PING_MESSAGE\n } = resolveNestedOptions(options.heartbeat);\n if (e.data === message)\n return;\n }\n data.value = e.data;\n onMessage == null ? void 0 : onMessage(ws, e);\n };\n };\n if (options.heartbeat) {\n const {\n message = DEFAULT_PING_MESSAGE,\n interval = 1e3,\n pongTimeout = 1e3\n } = resolveNestedOptions(options.heartbeat);\n const { pause, resume } = useIntervalFn(\n () => {\n send(message, false);\n if (pongTimeoutWait != null)\n return;\n pongTimeoutWait = setTimeout(() => {\n close();\n explicitlyClosed = false;\n }, pongTimeout);\n },\n interval,\n { immediate: false }\n );\n heartbeatPause = pause;\n heartbeatResume = resume;\n }\n if (autoClose) {\n if (isClient)\n useEventListener(\"beforeunload\", () => close());\n tryOnScopeDispose(close);\n }\n const open = () => {\n if (!isClient && !isWorker)\n return;\n close();\n explicitlyClosed = false;\n retried = 0;\n _init();\n };\n if (immediate)\n open();\n watch(urlRef, open);\n return {\n data,\n status,\n close,\n send,\n open,\n ws: wsRef\n };\n}\n\nfunction useWebWorker(arg0, workerOptions, options) {\n const {\n window = defaultWindow\n } = options != null ? options : {};\n const data = ref(null);\n const worker = shallowRef();\n const post = (...args) => {\n if (!worker.value)\n return;\n worker.value.postMessage(...args);\n };\n const terminate = function terminate2() {\n if (!worker.value)\n return;\n worker.value.terminate();\n };\n if (window) {\n if (typeof arg0 === \"string\")\n worker.value = new Worker(arg0, workerOptions);\n else if (typeof arg0 === \"function\")\n worker.value = arg0();\n else\n worker.value = arg0;\n worker.value.onmessage = (e) => {\n data.value = e.data;\n };\n tryOnScopeDispose(() => {\n if (worker.value)\n worker.value.terminate();\n });\n }\n return {\n data,\n post,\n terminate,\n worker\n };\n}\n\nfunction jobRunner(userFunc) {\n return (e) => {\n const userFuncArgs = e.data[0];\n return Promise.resolve(userFunc.apply(void 0, userFuncArgs)).then((result) => {\n postMessage([\"SUCCESS\", result]);\n }).catch((error) => {\n postMessage([\"ERROR\", error]);\n });\n };\n}\n\nfunction depsParser(deps, localDeps) {\n if (deps.length === 0 && localDeps.length === 0)\n return \"\";\n const depsString = deps.map((dep) => `'${dep}'`).toString();\n const depsFunctionString = localDeps.filter((dep) => typeof dep === \"function\").map((fn) => {\n const str = fn.toString();\n if (str.trim().startsWith(\"function\")) {\n return str;\n } else {\n const name = fn.name;\n return `const ${name} = ${str}`;\n }\n }).join(\";\");\n const importString = `importScripts(${depsString});`;\n return `${depsString.trim() === \"\" ? \"\" : importString} ${depsFunctionString}`;\n}\n\nfunction createWorkerBlobUrl(fn, deps, localDeps) {\n const blobCode = `${depsParser(deps, localDeps)}; onmessage=(${jobRunner})(${fn})`;\n const blob = new Blob([blobCode], { type: \"text/javascript\" });\n const url = URL.createObjectURL(blob);\n return url;\n}\n\nfunction useWebWorkerFn(fn, options = {}) {\n const {\n dependencies = [],\n localDependencies = [],\n timeout,\n window = defaultWindow\n } = options;\n const worker = ref();\n const workerStatus = ref(\"PENDING\");\n const promise = ref({});\n const timeoutId = ref();\n const workerTerminate = (status = \"PENDING\") => {\n if (worker.value && worker.value._url && window) {\n worker.value.terminate();\n URL.revokeObjectURL(worker.value._url);\n promise.value = {};\n worker.value = void 0;\n window.clearTimeout(timeoutId.value);\n workerStatus.value = status;\n }\n };\n workerTerminate();\n tryOnScopeDispose(workerTerminate);\n const generateWorker = () => {\n const blobUrl = createWorkerBlobUrl(fn, dependencies, localDependencies);\n const newWorker = new Worker(blobUrl);\n newWorker._url = blobUrl;\n newWorker.onmessage = (e) => {\n const { resolve = () => {\n }, reject = () => {\n } } = promise.value;\n const [status, result] = e.data;\n switch (status) {\n case \"SUCCESS\":\n resolve(result);\n workerTerminate(status);\n break;\n default:\n reject(result);\n workerTerminate(\"ERROR\");\n break;\n }\n };\n newWorker.onerror = (e) => {\n const { reject = () => {\n } } = promise.value;\n e.preventDefault();\n reject(e);\n workerTerminate(\"ERROR\");\n };\n if (timeout) {\n timeoutId.value = setTimeout(\n () => workerTerminate(\"TIMEOUT_EXPIRED\"),\n timeout\n );\n }\n return newWorker;\n };\n const callWorker = (...fnArgs) => new Promise((resolve, reject) => {\n promise.value = {\n resolve,\n reject\n };\n worker.value && worker.value.postMessage([[...fnArgs]]);\n workerStatus.value = \"RUNNING\";\n });\n const workerFn = (...fnArgs) => {\n if (workerStatus.value === \"RUNNING\") {\n console.error(\n \"[useWebWorkerFn] You can only run one instance of the worker at a time.\"\n );\n return Promise.reject();\n }\n worker.value = generateWorker();\n return callWorker(...fnArgs);\n };\n return {\n workerFn,\n workerStatus,\n workerTerminate\n };\n}\n\nfunction useWindowFocus(options = {}) {\n const { window = defaultWindow } = options;\n if (!window)\n return ref(false);\n const focused = ref(window.document.hasFocus());\n useEventListener(window, \"blur\", () => {\n focused.value = false;\n });\n useEventListener(window, \"focus\", () => {\n focused.value = true;\n });\n return focused;\n}\n\nfunction useWindowScroll(options = {}) {\n const { window = defaultWindow, behavior = \"auto\" } = options;\n if (!window) {\n return {\n x: ref(0),\n y: ref(0)\n };\n }\n const internalX = ref(window.scrollX);\n const internalY = ref(window.scrollY);\n const x = computed({\n get() {\n return internalX.value;\n },\n set(x2) {\n scrollTo({ left: x2, behavior });\n }\n });\n const y = computed({\n get() {\n return internalY.value;\n },\n set(y2) {\n scrollTo({ top: y2, behavior });\n }\n });\n useEventListener(\n window,\n \"scroll\",\n () => {\n internalX.value = window.scrollX;\n internalY.value = window.scrollY;\n },\n {\n capture: false,\n passive: true\n }\n );\n return { x, y };\n}\n\nfunction useWindowSize(options = {}) {\n const {\n window = defaultWindow,\n initialWidth = Number.POSITIVE_INFINITY,\n initialHeight = Number.POSITIVE_INFINITY,\n listenOrientation = true,\n includeScrollbar = true\n } = options;\n const width = ref(initialWidth);\n const height = ref(initialHeight);\n const update = () => {\n if (window) {\n if (includeScrollbar) {\n width.value = window.innerWidth;\n height.value = window.innerHeight;\n } else {\n width.value = window.document.documentElement.clientWidth;\n height.value = window.document.documentElement.clientHeight;\n }\n }\n };\n update();\n tryOnMounted(update);\n useEventListener(\"resize\", update, { passive: true });\n if (listenOrientation) {\n const matches = useMediaQuery(\"(orientation: portrait)\");\n watch(matches, () => update());\n }\n return { width, height };\n}\n\nexport { DefaultMagicKeysAliasMap, StorageSerializers, TransitionPresets, computedAsync as asyncComputed, breakpointsAntDesign, breakpointsBootstrapV5, breakpointsMasterCss, breakpointsPrimeFlex, breakpointsQuasar, breakpointsSematic, breakpointsTailwind, breakpointsVuetify, breakpointsVuetifyV2, breakpointsVuetifyV3, cloneFnJSON, computedAsync, computedInject, createFetch, createReusableTemplate, createTemplatePromise, createUnrefFn, customStorageEventName, defaultDocument, defaultLocation, defaultNavigator, defaultWindow, executeTransition, formatTimeAgo, getSSRHandler, mapGamepadToXbox360Controller, onClickOutside, onKeyDown, onKeyPressed, onKeyStroke, onKeyUp, onLongPress, onStartTyping, setSSRHandler, templateRef, unrefElement, useActiveElement, useAnimate, useAsyncQueue, useAsyncState, useBase64, useBattery, useBluetooth, useBreakpoints, useBroadcastChannel, useBrowserLocation, useCached, useClipboard, useClipboardItems, useCloned, useColorMode, useConfirmDialog, useCssVar, useCurrentElement, useCycleList, useDark, useDebouncedRefHistory, useDeviceMotion, useDeviceOrientation, useDevicePixelRatio, useDevicesList, useDisplayMedia, useDocumentVisibility, useDraggable, useDropZone, useElementBounding, useElementByPoint, useElementHover, useElementSize, useElementVisibility, useEventBus, useEventListener, useEventSource, useEyeDropper, useFavicon, useFetch, useFileDialog, useFileSystemAccess, useFocus, useFocusWithin, useFps, useFullscreen, useGamepad, useGeolocation, useIdle, useImage, useInfiniteScroll, useIntersectionObserver, useKeyModifier, useLocalStorage, useMagicKeys, useManualRefHistory, useMediaControls, useMediaQuery, useMemoize, useMemory, useMounted, useMouse, useMouseInElement, useMousePressed, useMutationObserver, useNavigatorLanguage, useNetwork, useNow, useObjectUrl, useOffsetPagination, useOnline, usePageLeave, useParallax, useParentElement, usePerformanceObserver, usePermission, usePointer, usePointerLock, usePointerSwipe, usePreferredColorScheme, usePreferredContrast, usePreferredDark, usePreferredLanguages, usePreferredReducedMotion, usePrevious, useRafFn, useRefHistory, useResizeObserver, useScreenOrientation, useScreenSafeArea, useScriptTag, useScroll, useScrollLock, useSessionStorage, useShare, useSorted, useSpeechRecognition, useSpeechSynthesis, useStepper, useStorage, useStorageAsync, useStyleTag, useSupported, useSwipe, useTemplateRefsList, useTextDirection, useTextSelection, useTextareaAutosize, useThrottledRefHistory, useTimeAgo, useTimeoutPoll, useTimestamp, useTitle, useTransition, useUrlSearchParams, useUserMedia, useVModel, useVModels, useVibrate, useVirtualList, useWakeLock, useWebNotification, useWebSocket, useWebWorker, useWebWorkerFn, useWindowFocus, useWindowScroll, useWindowSize };\n","<template>\n <span :id=\"computedId + '_placeholder'\" ref=\"placeholder\" />\n <slot name=\"target\" :show=\"show\" :hide=\"hide\" :toggle=\"toggle\" :show-state=\"showState\" />\n <Teleport :to=\"props.teleportTo\" :disabled=\"!props.teleportTo || props.teleportDisabled\">\n <div\n v-if=\"showStateInternal || props.persistent\"\n :id=\"computedId\"\n v-bind=\"$attrs\"\n ref=\"element\"\n :class=\"computedClasses\"\n role=\"tooltip\"\n tabindex=\"-1\"\n :style=\"floatingStyles\"\n >\n <div\n ref=\"arrow\"\n :class=\"`${props.tooltip ? 'tooltip' : 'popover'}-arrow`\"\n :style=\"arrowStyle\"\n data-popper-arrow\n />\n <div class=\"overflow-auto\" :style=\"sizeStyles\">\n <template v-if=\"props.title || $slots.title\">\n <div\n v-if=\"!props.html\"\n class=\"position-sticky top-0\"\n :class=\"props.tooltip ? 'tooltip-inner' : 'popover-header'\"\n >\n <slot name=\"title\">\n {{ props.title }}\n </slot>\n </div>\n <!-- eslint-disable vue/no-v-html -->\n <div\n v-else\n class=\"position-sticky top-0\"\n :class=\"props.tooltip ? 'tooltip-inner' : 'popover-header'\"\n v-html=\"sanitizedTitle\"\n />\n <!-- eslint-enable vue/no-v-html -->\n </template>\n <template v-if=\"(props.tooltip && !$slots.title && !props.title) || !props.tooltip\">\n <div v-if=\"!props.html\" :class=\"props.tooltip ? 'tooltip-inner' : 'popover-body'\">\n <slot>\n {{ props.content }}\n </slot>\n </div>\n <!-- eslint-disable vue/no-v-html -->\n <div\n v-else\n :class=\"props.tooltip ? 'tooltip-inner' : 'popover-body'\"\n v-html=\"sanitizedContent\"\n />\n <!-- eslint-enable vue/no-v-html -->\n </template>\n </div>\n </div>\n </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n type Alignment,\n arrow as arrowMiddleware,\n autoPlacement,\n autoUpdate,\n type Boundary,\n flip,\n hide as hideMiddleware,\n inline as inlineMiddleware,\n type Middleware,\n offset as offsetMiddleware,\n type Placement as OriginalPlacement,\n type RootBoundary,\n shift,\n size as sizeMiddleware,\n useFloating,\n} from '@floating-ui/vue'\nimport {onClickOutside, useMouseInElement, useToNumber} from '@vueuse/core'\nimport {\n computed,\n type CSSProperties,\n nextTick,\n onBeforeUnmount,\n onMounted,\n ref,\n toRef,\n watch,\n watchEffect,\n} from 'vue'\nimport {useDefaults, useId} from '../composables'\nimport type {BPopoverProps} from '../types'\nimport {BvTriggerableEvent, getElement, getTransitionDelay, IS_BROWSER} from '../utils'\nimport {DefaultAllowlist, sanitizeHtml} from '../utils/sanitizer'\nimport {isBoundary, isRootBoundary, resolveBootstrapPlacement} from '../utils/floatingUi'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst _props = withDefaults(defineProps<BPopoverProps>(), {\n boundary: 'clippingAncestors',\n boundaryPadding: undefined,\n click: false,\n closeOnHide: false,\n teleportTo: undefined,\n teleportDisabled: false,\n content: undefined,\n customClass: '',\n delay: () => ({show: 100, hide: 300}),\n floatingMiddleware: undefined,\n html: false,\n id: undefined,\n inline: false,\n manual: false,\n noAutoClose: false,\n noFade: false,\n noFlip: false,\n noHide: false,\n noShift: false,\n noSize: false,\n noninteractive: false,\n offset: null,\n persistent: false,\n placement: 'top',\n realtime: false,\n reference: null,\n strategy: 'absolute',\n target: null,\n title: undefined,\n tooltip: false,\n variant: null,\n})\n\nconst props = useDefaults(_props, 'BPopover')\n\nconst emit = defineEmits<{\n 'hidden': [value: BvTriggerableEvent]\n 'hide': [value: BvTriggerableEvent]\n 'hide-prevented': []\n 'show': [value: BvTriggerableEvent]\n 'show-prevented': []\n 'shown': [value: BvTriggerableEvent]\n}>()\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n target?: (props: {\n show: () => void\n hide: (e: Event) => void\n toggle: (e: Event) => void\n showState: boolean\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n title?: (props: Record<string, never>) => any\n}>()\n\nconst modelValue = defineModel<boolean>({\n default: false,\n})\n\nconst showState = ref(modelValue.value)\nconst showStateInternal = ref(modelValue.value)\nwatchEffect(() => {\n modelValue.value = showState.value\n})\n\nwatch(modelValue, (newValue) => {\n if (newValue === showState.value) return\n newValue ? show() : hide(new Event('update:modelValue'))\n})\n\nconst computedId = useId(() => props.id, 'popover')\n\nconst hidden = ref(false)\n\nconst element = ref<HTMLElement | null>(null)\nconst targetTrigger = ref<HTMLElement | null>(null)\nconst arrow = ref<HTMLElement | null>(null)\nconst trigger = ref<HTMLElement | null>(null)\nconst placeholder = ref<HTMLElement | null>(null)\n\nconst sanitizedTitle = computed(() =>\n props.title ? sanitizeHtml(props.title, DefaultAllowlist) : ''\n)\n\nconst sanitizedContent = computed(() =>\n props.content ? sanitizeHtml(props.content, DefaultAllowlist) : ''\n)\nconst isAutoPlacement = toRef(() => props.placement.startsWith('auto'))\nconst offsetNumber = useToNumber(() => props.offset ?? NaN)\n\nconst boundary = computed<Boundary | undefined>(() =>\n isBoundary(props.boundary) ? props.boundary : undefined\n)\nconst rootBoundary = computed<RootBoundary | undefined>(() =>\n isRootBoundary(props.boundary) ? props.boundary : undefined\n)\n\nconst sizeStyles = ref<CSSProperties>({})\nconst floatingMiddleware = computed<Middleware[]>(() => {\n if (props.floatingMiddleware !== undefined) {\n return props.floatingMiddleware\n }\n const off = props.offset !== null ? offsetNumber.value : props.tooltip ? 6 : 8\n const arr: Middleware[] = [offsetMiddleware(off)]\n if (props.noFlip === false && !isAutoPlacement.value) {\n arr.push(\n flip({\n boundary: boundary.value,\n rootBoundary: rootBoundary.value,\n padding: props.boundaryPadding,\n })\n )\n }\n if (isAutoPlacement.value) {\n arr.push(\n autoPlacement({\n alignment: (props.placement.split('-')[1] as Alignment) || undefined,\n boundary: boundary.value,\n rootBoundary: rootBoundary.value,\n padding: props.boundaryPadding,\n })\n )\n }\n if (props.noShift === false) {\n arr.push(\n shift({\n boundary: boundary.value,\n rootBoundary: rootBoundary.value,\n padding: props.boundaryPadding,\n })\n )\n }\n if (props.noHide === false) {\n arr.push(\n hideMiddleware({\n boundary: boundary.value,\n rootBoundary: rootBoundary.value,\n padding: props.boundaryPadding,\n })\n )\n }\n if (props.inline === true) {\n arr.push(inlineMiddleware())\n }\n arr.push(arrowMiddleware({element: arrow, padding: 10}))\n if (props.noSize === false) {\n arr.push(\n sizeMiddleware({\n boundary: boundary.value,\n rootBoundary: rootBoundary.value,\n padding: props.boundaryPadding,\n apply({availableWidth, availableHeight}) {\n sizeStyles.value = {\n maxHeight: availableHeight ? `${availableHeight}px` : undefined,\n maxWidth: availableWidth ? `${availableWidth}px` : undefined,\n }\n },\n })\n )\n }\n return arr\n})\n\nconst placementRef = toRef(() =>\n isAutoPlacement.value ? undefined : (props.placement as OriginalPlacement)\n)\n\nconst {floatingStyles, middlewareData, placement, update} = useFloating(targetTrigger, element, {\n placement: placementRef,\n middleware: floatingMiddleware,\n strategy: toRef(() => props.strategy),\n whileElementsMounted: (...args) => {\n const cleanup = autoUpdate(...args, {animationFrame: props.realtime})\n // Important! Always return the cleanup function.\n return cleanup\n },\n})\n\nconst arrowStyle = ref<CSSProperties>({position: 'absolute'})\n\nwatch(middlewareData, (newValue) => {\n if (props.noHide === false) {\n hidden.value = !!newValue.hide?.referenceHidden\n if (props.closeOnHide && hidden.value && !props.noAutoClose && !props.manual) {\n hide(new Event('closeOnHide'))\n }\n }\n if (newValue.arrow) {\n const {x, y} = newValue.arrow\n arrowStyle.value = {\n position: 'absolute',\n top: y ? `${y}px` : '',\n left: x ? `${x}px` : '',\n }\n }\n})\n\nconst computedClasses = computed(() => {\n const type = props.tooltip ? 'tooltip' : 'popover'\n return [\n type,\n `b-${type}`,\n {\n [`b-${type}-${props.variant}`]: props.variant !== null,\n show: showState.value && !hidden.value,\n ['pe-none']: !showState.value,\n fade: !props.noFade,\n ['d-none']: !showState.value && props.noFade,\n [`${props.customClass}`]: props.customClass !== undefined,\n [`bs-${type}-${resolveBootstrapPlacement(placement.value)}`]: placement.value !== undefined,\n },\n ]\n})\n\nconst {isOutside} = useMouseInElement(element)\nconst {isOutside: triggerIsOutside} = useMouseInElement(trigger)\n\nconst toggle = (e?: Event) => {\n const event = e ?? new Event('click')\n showState.value ? hide(event) : show()\n}\n\nconst buildTriggerableEvent = (\n type: string,\n opts: Partial<BvTriggerableEvent> = {}\n): BvTriggerableEvent =>\n new BvTriggerableEvent(type, {\n cancelable: false,\n target: element.value || null,\n relatedTarget: null,\n trigger: null,\n ...opts,\n componentId: computedId.value,\n })\n\nlet showTimeout: ReturnType<typeof setTimeout> | undefined\nconst show = () => {\n const event = buildTriggerableEvent('show', {cancelable: true})\n emit('show', event)\n if (event.defaultPrevented) {\n emit('show-prevented')\n return\n }\n showStateInternal.value = true\n nextTick(() => {\n update()\n showTimeout = setTimeout(\n () => {\n update()\n showState.value = true\n nextTick(() => {\n emit('shown', buildTriggerableEvent('shown'))\n })\n },\n typeof props.delay === 'number' ? props.delay : props.delay?.show || 0\n )\n })\n}\n\nconst hide = (e: Readonly<Event>) => {\n const event = buildTriggerableEvent('hide', {cancelable: true})\n emit('hide', event)\n if (event.defaultPrevented) {\n emit('hide-prevented')\n return\n }\n if (showTimeout) {\n clearTimeout(showTimeout)\n showTimeout = undefined\n }\n const delay = typeof props.delay === 'number' ? props.delay : props.delay?.hide || 0\n setTimeout(() => {\n if (\n e?.type === 'click' ||\n e?.type === 'forceHide' ||\n e?.type === 'closeOnHide' ||\n (e?.type === 'update:modelValue' && props.manual) ||\n (!props.noninteractive &&\n isOutside.value &&\n triggerIsOutside.value &&\n !element.value?.contains(document?.activeElement) &&\n !trigger.value?.contains(document?.activeElement)) ||\n (props.noninteractive && triggerIsOutside.value)\n ) {\n showState.value = false\n nextTick(() => {\n setTimeout(\n () => {\n showStateInternal.value = false\n },\n element.value ? getTransitionDelay(element.value) : 150\n )\n emit('hidden', buildTriggerableEvent('hidden'))\n })\n } else {\n setTimeout(\n () => {\n hide(e)\n },\n delay < 50 ? 50 : delay\n )\n }\n }, delay)\n}\n\ndefineExpose({\n hide,\n show,\n toggle,\n})\n\nconst bind = () => {\n // TODO: is this the best way to bind the events?\n // we place a span and get the next element sibling fo rthe listeners\n if (props.target) {\n const elem = getElement(props.target)\n if (elem) {\n trigger.value = elem\n } else {\n // eslint-disable-next-line no-console\n console.warn('Target element not found', props.target)\n }\n } else {\n trigger.value = placeholder.value?.nextElementSibling as HTMLElement\n }\n if (props.reference) {\n const elem = getElement(props.reference)\n if (elem) {\n targetTrigger.value = elem\n } else {\n // eslint-disable-next-line no-console\n console.warn('Reference element not found', props.reference)\n }\n } else {\n targetTrigger.value = trigger.value\n }\n if (!trigger.value || props.manual) {\n return\n }\n if (!IS_BROWSER) return\n trigger.value.addEventListener('forceHide', hide)\n if (props.click) {\n trigger.value.addEventListener('click', toggle)\n return\n }\n trigger.value.addEventListener('pointerenter', show)\n trigger.value.addEventListener('pointerleave', hide)\n trigger.value.addEventListener('focus', show)\n trigger.value.addEventListener('blur', hide)\n}\n\nconst unbind = () => {\n if (trigger.value) {\n trigger.value.removeEventListener('forceHide', hide)\n trigger.value.removeEventListener('click', toggle)\n trigger.value.removeEventListener('pointerenter', show)\n trigger.value.removeEventListener('pointerleave', hide)\n trigger.value.removeEventListener('focus', show)\n trigger.value.removeEventListener('blur', hide)\n }\n}\n\nonClickOutside(\n element,\n () => {\n if (showState.value && props.click && !props.noAutoClose && !props.manual)\n hide(new Event('clickOutside'))\n },\n {ignore: [trigger]}\n)\n\nwatch([() => props.click, () => props.target, () => props.reference], () => {\n unbind()\n bind()\n // update()\n})\n\nonMounted(bind)\n\nonBeforeUnmount(unbind)\n</script>\n","import type {Boundary, Placement, RootBoundary} from '@floating-ui/vue'\nexport {autoUpdate} from '@floating-ui/vue'\n\nimport {type DirectiveBinding, h, render} from 'vue'\nimport {DefaultAllowlist, sanitizeHtml} from './sanitizer'\nimport BPopover from '../components/BPopover.vue'\nimport type {BPopoverProps} from '../types'\n\n// TODO this function doesn't currently resolve with RTL in mind. Once Bootstrap finalizes their RTL, we should make this change here\n/**\n * Configures Bootstrap-like placement props to floating-ui Placement strings.\n * Top drops up, bottom drops down, end drops right, start drops left, dropend will _align_ the drop to the 'end',\n * dropstart will _align_ the drop to the 'start'. Bottom is default, so it is the last in the order. Bottom should essentially be the opposite of top\n * @param {top: boolean; bottom: boolean; start: boolean; end: boolean; dropstart: boolean; dropend: boolean}\n * @returns {Placement} Placement\n */\nexport const resolveFloatingPlacement = ({\n top,\n end,\n start,\n alignCenter,\n alignEnd,\n}: Readonly<{\n top: boolean\n start: boolean\n end: boolean\n alignCenter: boolean\n alignEnd: boolean\n}>): Placement => {\n const direction = top ? 'top' : start ? 'left' : end ? 'right' : 'bottom'\n const align = alignEnd ? 'end' : alignCenter ? null : 'start'\n return `${direction}${align ? `-${align}` : ''}` as Placement\n}\n\nexport const resolveBootstrapPlacement = (placement: Placement): string => {\n const [_placement] = placement.split('-')\n switch (_placement) {\n case 'left':\n return 'start'\n case 'right':\n return 'end'\n default:\n return _placement\n }\n}\n\nexport const resolveActiveStatus = (values: DirectiveBinding['value']): boolean =>\n typeof values !== 'object' || values.active !== false\n\nexport const resolveContent = (\n values: DirectiveBinding['value'],\n el: HTMLElement\n): {title?: string; content?: string} => {\n const isActive = resolveActiveStatus(values)\n if (!isActive) return {}\n\n const missingBindingValue =\n typeof values === 'undefined' ||\n (typeof values === 'object' && !values.title && !values.content)\n const title = el.getAttribute('title') || el.getAttribute('data-original-title')\n if (missingBindingValue) {\n if (title) {\n el.removeAttribute('title')\n el.setAttribute('data-original-title', title)\n\n return {\n content: sanitizeHtml(title, DefaultAllowlist),\n }\n }\n return {}\n }\n if (typeof values === 'string') {\n return {\n content: sanitizeHtml(values, DefaultAllowlist),\n }\n }\n return {\n title: values?.title ? sanitizeHtml(values?.title, DefaultAllowlist) : undefined,\n content: values?.content ? sanitizeHtml(values?.content, DefaultAllowlist) : undefined,\n }\n}\n\nexport const resolveDirectiveProps = (\n binding: Readonly<DirectiveBinding>,\n el: Readonly<HTMLElement>\n) => ({\n target: el,\n modelValue: binding.modifiers.show,\n inline: binding.modifiers.inline,\n click: binding.modifiers.click,\n realtime: binding.modifiers.realtime,\n persistent: binding.modifiers.persistent,\n placement: binding.modifiers.left\n ? 'left'\n : binding.modifiers.right\n ? 'right'\n : binding.modifiers.bottom\n ? 'bottom'\n : binding.modifiers.top\n ? 'top'\n : undefined,\n html: true,\n ...(typeof binding.value === 'object' ? binding.value : {}),\n ...(binding.modifiers.interactive ? {noninteractive: false} : {}),\n title: null,\n content: null,\n})\n\nexport interface ElementWithPopper extends HTMLElement {\n $__element?: HTMLElement\n}\n\nexport const bind = (\n el: ElementWithPopper,\n binding: Readonly<DirectiveBinding>,\n props: BPopoverProps\n) => {\n const div = document.createElement('span')\n if (binding.modifiers.body) document.body.appendChild(div)\n else if (binding.modifiers.child) el.appendChild(div)\n else el.parentNode?.insertBefore(div, el.nextSibling)\n render(h(BPopover, props), div)\n el.$__element = div\n}\n\nexport const unbind = (el: ElementWithPopper) => {\n const div = el.$__element\n if (div) render(null, div)\n setTimeout(() => {\n div?.remove()\n }, 0)\n delete el.$__element\n}\n\nexport const isBoundary = (input: unknown): input is Boundary =>\n input === 'clippingAncestors' || input instanceof Element || Array.isArray(input)\n\nexport const isRootBoundary = (input: Boundary | RootBoundary): input is RootBoundary =>\n !isBoundary(input)\n","import type {TableFieldFormatter} from '../types'\nimport {get} from '.'\n\nexport default (\n item: unknown,\n // Weakly type fieldKey because it can be a nested string, such as 'foo.bar.baz'\n fieldKey: string,\n formatter?: TableFieldFormatter<unknown>\n) => {\n const val = get(item, fieldKey)\n return formatter && typeof formatter === 'function' ? formatter(val, fieldKey, item) : val\n}\n","export default (\n props: Readonly<Record<PropertyKey, unknown>>,\n els: string[],\n propPrefix: string,\n classPrefix = propPrefix\n): string[] =>\n els.reduce((arr: string[], prop) => {\n if (!props[prop]) return arr\n\n arr.push(\n [classPrefix, prop.replace(propPrefix, ''), props[prop]]\n .filter((e) => e && typeof e !== 'boolean')\n .join('-')\n .toLowerCase()\n )\n\n return arr\n }, [] as string[])\n","import type {ComponentPublicInstance} from 'vue'\n\nexport default (\n element: string | Readonly<ComponentPublicInstance> | Readonly<HTMLElement> | null\n): HTMLElement | undefined => {\n if (!element) return undefined\n if (typeof element === 'string') {\n if (typeof document === 'undefined') return undefined\n const idElement = document.getElementById(element)\n return idElement ?? (document.querySelector(element) as HTMLElement) ?? undefined\n }\n return (element as ComponentPublicInstance).$el ?? element\n}\n","import type {Slot, VNode} from 'vue'\n\nexport default (slot: Slot | undefined, filterBy: string): VNode[] =>\n (slot?.() ?? [])\n .reduce((arr: VNode[], slot: VNode) => {\n if (typeof slot.type === 'symbol') {\n arr = arr.concat(slot.children as unknown as VNode)\n } else {\n arr.push(slot)\n }\n return arr\n }, [])\n .filter((child) => (child.type as {__name: string} | undefined)?.__name === filterBy)\n","export const RX_UNDERSCORE = /_/g\nexport const RX_LOWER_UPPER = /([a-z])([A-Z])/g\nexport const RX_NUMBER = /^[0-9]*\\.?[0-9]+$/\nexport const RX_START_SPACE_WORD = /(\\s|^)(\\w)/g\nexport const RX_FIRST_START_SPACE_WORD = /(\\s|^)(\\w)/\nexport const RX_SPACE_SPLIT = /\\s+/\nexport const RX_HASH = /^#/\nexport const RX_HASH_ID = /^#[A-Za-z]+[\\w\\-:.]*$/\n\nexport const RX_STRIP_LOCALE_MODS = /-u-.+/\nexport const RX_REGEXP_REPLACE = /[-/\\\\^$*+?.()|[\\]{}]/g\nexport const RX_SPACES = /[\\s\\uFEFF\\xA0]+/g\n","import {\n RX_FIRST_START_SPACE_WORD,\n RX_LOWER_UPPER,\n RX_REGEXP_REPLACE,\n RX_SPACES,\n RX_START_SPACE_WORD,\n RX_UNDERSCORE,\n} from '../constants/regex'\n\n/**\n * @param str\n * @returns\n */\nexport const startCase = (str: string): string =>\n str\n .replace(RX_UNDERSCORE, ' ')\n .replace(RX_LOWER_UPPER, (_, $1, $2) => `${$1} ${$2}`)\n .replace(RX_FIRST_START_SPACE_WORD, (_, $1, $2) => $1 + $2.toUpperCase())\n\n/**\n * @param str\n * @returns\n */\nexport const titleCase = (str: string): string =>\n str\n .replace(RX_UNDERSCORE, ' ')\n .replace(RX_LOWER_UPPER, (_, $1, $2) => `${$1} ${$2}`)\n .replace(RX_START_SPACE_WORD, (_, $1, $2) => $1 + $2.toUpperCase())\n\n/**\n * Uppercases the first letter of a string and returns a new string\n *\n * @param str\n * @returns\n */\nexport const upperFirst = (str: string): string => {\n const trim = str.trim()\n return trim.charAt(0).toUpperCase() + trim.slice(1)\n}\n\n/**\n * Escapes a string for RegExp usage.\n *\n * @param str\n * @returns\n */\nexport const escapeRegExp = (str: string): string => str.replace(RX_REGEXP_REPLACE, '\\\\$&')\n\n/**\n * Escapes special chars in string and replaces\n * contiguous spaces with a whitespace match\n *\n * @param str\n * @returns\n */\nexport const escapeRegExpChars = (str: string): string =>\n escapeRegExp(str).replace(RX_SPACES, '\\\\s')\n","import {titleCase} from './stringUtils'\nimport type {TableFieldRaw} from '../types'\n\nexport default (field: Readonly<TableFieldRaw<unknown>>) =>\n typeof field === 'string'\n ? titleCase(field)\n : field.label !== undefined\n ? field.label\n : typeof field.key === 'string'\n ? titleCase(field.key)\n : field.key\n","import type {RouteLocationRaw} from 'vue-router'\n\nexport default (props: Readonly<{href?: string; to?: RouteLocationRaw}>): boolean =>\n !!(props.href || props.to)\n","import type {\n Component,\n ComponentInternalInstance,\n ComputedRef,\n InjectionKey,\n MaybeRefOrGetter,\n Ref,\n WritableComputedRef,\n} from 'vue'\nimport type {\n BModalProps,\n BreadcrumbItemRaw,\n ButtonVariant,\n BvnComponentProps,\n CheckboxValue,\n ClassValue,\n ColorVariant,\n LiteralUnion,\n Numberish,\n OrchestratedModal,\n OrchestratedToast,\n RadioValue,\n RadiusElement,\n Size,\n TabType,\n TextColorVariant,\n} from '../types'\n\n// BCarousel\nexport const carouselInjectionKey: InjectionKey<{\n background: Readonly<Ref<string | undefined>>\n width: Readonly<Ref<string | undefined>>\n height: Readonly<Ref<string | undefined>>\n}> = Symbol('bvn::carousel')\n\n// BTabs\nexport const tabsInjectionKey: InjectionKey<{\n lazy: Readonly<Ref<boolean>>\n card: Readonly<Ref<boolean>>\n noFade: Readonly<Ref<boolean>>\n registerTab: (tab: Readonly<Ref<TabType>>) => void\n unregisterTab: (id: string) => void\n activateTab: (id: string | undefined) => void\n activeTabClass: Readonly<Ref<ClassValue>>\n inactiveTabClass: Readonly<Ref<ClassValue>>\n tabClass: Readonly<Ref<ClassValue>>\n activeId: Readonly<Ref<string | undefined>>\n}> = Symbol('bvn::tabs')\n\n// BProgress\nexport const progressInjectionKey: InjectionKey<{\n animated: Readonly<Ref<boolean | undefined>>\n max: Readonly<Ref<Numberish>>\n showProgress: Readonly<Ref<boolean | undefined>>\n showValue: Readonly<Ref<boolean | undefined>>\n striped: Readonly<Ref<boolean | undefined>>\n}> = Symbol('bvn::progress')\n\n// BListGroup\nexport const listGroupInjectionKey: InjectionKey<{\n numbered: Readonly<Ref<boolean>>\n}> = Symbol('bvn::listGroup')\n\n// BAvatarGroup\nexport const avatarGroupInjectionKey: InjectionKey<{\n overlapScale: Readonly<Ref<number>>\n size: Readonly<Ref<LiteralUnion<Size, Numberish> | undefined>>\n square: Readonly<Ref<boolean>>\n rounded: Readonly<Ref<RadiusElement | boolean>>\n roundedTop: Readonly<Ref<RadiusElement | boolean | undefined>>\n roundedBottom: Readonly<Ref<RadiusElement | boolean | undefined>>\n roundedStart: Readonly<Ref<RadiusElement | boolean | undefined>>\n roundedEnd: Readonly<Ref<RadiusElement | boolean | undefined>>\n variant: Readonly<Ref<ColorVariant | null>>\n bgVariant: Readonly<Ref<ColorVariant | null>>\n textVariant: Readonly<Ref<TextColorVariant | null>>\n}> = Symbol('bvn::avatarGroup')\n\n// BAccordion\nexport const accordionInjectionKey: InjectionKey<{\n openItem: Readonly<Ref<string | undefined>>\n free: Readonly<Ref<boolean>>\n setOpenItem: (id: string) => void\n}> = Symbol('bvn::accordion')\n\n// BFormCheckboxGroup\nexport const checkboxGroupKey: InjectionKey<{\n modelValue: Ref<readonly CheckboxValue[]>\n switch: Readonly<Ref<boolean>>\n buttonVariant: Readonly<Ref<ButtonVariant | null>>\n form: Readonly<Ref<string | undefined>>\n name: Readonly<Ref<string>>\n state: Readonly<Ref<boolean | undefined | null>>\n plain: Readonly<Ref<boolean>>\n size: Readonly<Ref<Size>>\n inline: Readonly<Ref<boolean>>\n reverse: Readonly<Ref<boolean>>\n required: Readonly<Ref<boolean>>\n buttons: Readonly<Ref<boolean>>\n disabled: Readonly<Ref<boolean>>\n}> = Symbol('bvn::checkboxGroup')\n\nexport const radioGroupKey: InjectionKey<{\n modelValue: Ref<RadioValue>\n buttonVariant: Readonly<Ref<ButtonVariant | null>>\n form: Readonly<Ref<string | undefined>>\n name: Readonly<Ref<string>>\n buttons: Readonly<Ref<boolean>>\n state: Readonly<Ref<boolean | undefined | null>>\n plain: Readonly<Ref<boolean>>\n size: Readonly<Ref<Size>>\n inline: Readonly<Ref<boolean>>\n reverse: Readonly<Ref<boolean>>\n required: Readonly<Ref<boolean>>\n disabled: Readonly<Ref<boolean>>\n}> = Symbol('bvn::radioGroup')\n\n// Collapse\nexport const collapseInjectionKey: InjectionKey<{\n id?: Readonly<Ref<string>>\n readonly hide?: () => void\n readonly show?: () => void\n readonly toggle?: () => void\n visible?: Readonly<Ref<boolean>>\n isNav?: Readonly<Ref<boolean>>\n}> = Symbol('bvn::collapse')\n\nexport const dropdownInjectionKey: InjectionKey<{\n id?: Readonly<Ref<string>>\n readonly hide?: () => void\n readonly show?: () => void\n readonly toggle?: () => void\n visible?: Readonly<Ref<boolean>>\n isNav?: Readonly<Ref<boolean>>\n}> = Symbol('bvn::collapse')\n\nexport const navbarInjectionKey: InjectionKey<{\n tag?: Readonly<Ref<string>>\n autoClose?: Readonly<Ref<boolean>>\n}> = Symbol('bvn::navbar')\n\nexport const toastPluginKey: InjectionKey<{\n toasts: Ref<\n WritableComputedRef<{\n component: unknown\n props: Omit<OrchestratedToast, 'value'> & {\n _self: symbol\n _modelValue: OrchestratedToast['value'] // Convert it to be the same name as useModalController.\n // The difference between the two is that unlike that one, this value can be defined (there's cannot be).\n }\n }>[]\n >\n _setIsAppend: (value: boolean) => void\n show: (obj: {\n component?: Readonly<Component>\n props?: MaybeRefOrGetter<Readonly<OrchestratedToast>>\n }) => symbol\n remove: (self: symbol) => void\n leave: (self: symbol) => void\n}> = Symbol('bvn::toastPlugin')\n\nexport const rtlPluginKey: InjectionKey<{\n isRtl: Ref<boolean>\n locale: Ref<string | undefined>\n}> = Symbol('bvn::rtlPlugin')\n\nexport const breadcrumbPluginKey: InjectionKey<{\n items: Ref<BreadcrumbItemRaw[]>\n reset: () => void\n}> = Symbol('bvn::breadcrumbPlugin')\n\nexport const modalControllerPluginKey: InjectionKey<{\n modals: Ref<\n WritableComputedRef<{\n component: unknown // TS being weird here, just use unknown\n props: OrchestratedModal & {\n _self: symbol\n _modelValue: BModalProps['modelValue']\n _promise: {\n value: Promise<boolean | null>\n resolve: (value: boolean | null) => void\n }\n _isConfirm: boolean\n }\n }>[]\n >\n show: (obj: {\n component?: Readonly<Component>\n props?: MaybeRefOrGetter<Readonly<OrchestratedModal>>\n }) => Promise<boolean | null>\n confirm: (obj: {\n component?: Readonly<Component>\n props?: MaybeRefOrGetter<Readonly<OrchestratedModal>>\n }) => Promise<boolean | null>\n remove: (self: symbol) => void\n leave: (self: symbol) => void\n}> = Symbol('bvn::modalControllerPlugin')\n\nexport const modalManagerPluginKey: InjectionKey<{\n stack: ComputedRef<ComponentInternalInstance[]>\n countStack: ComputedRef<number>\n lastStack: ComputedRef<ComponentInternalInstance | undefined>\n pushStack: (modal: Readonly<ComponentInternalInstance>) => void\n removeStack: (modal: Readonly<ComponentInternalInstance>) => void\n registry: ComputedRef<ComponentInternalInstance[]>\n pushRegistry: (modal: Readonly<ComponentInternalInstance>) => void\n removeRegistry: (modal: Readonly<ComponentInternalInstance>) => void\n}> = Symbol('bvn::modalManagerPlugin')\n\nexport const idPluginKey: InjectionKey<() => string> = Symbol('bvn::idPluginKey')\n\nexport const defaultsKey: InjectionKey<Ref<Partial<BvnComponentProps>>> = Symbol('bvn::defaults')\n\nexport const inputGroupKey: InjectionKey<boolean> = Symbol('bvn::inputGroup')\n","import type {Numberish} from '../types'\n\nexport default (\n v: Numberish | null,\n modelModifiers: Record<'number' | 'lazy' | 'trim', true | undefined>\n) => {\n if (v === null) return\n let update = v\n if (modelModifiers.trim) update = update.toString().trim()\n if (modelModifiers.number && typeof update === 'string' && update !== '') {\n const parsed = Number.parseFloat(update)\n update = Number.isNaN(parsed) ? update : parsed\n }\n return update\n}\n","import type {Slots, VNode} from 'vue'\n\nexport default (name: string, scope = {}, $slots: Slots = {}): VNode => {\n // Ensure names is an array\n const names = [name]\n let slot\n for (let i = 0; i < names.length && !slot; i++) {\n const name = names[i]\n slot = $slots[name]\n }\n // Note: in Vue 3.x, slots have been unified. No more scoped slots and all slots are exposed as functions\n return (slot && typeof slot === 'function' ? slot(scope) : slot) as unknown as VNode\n}\n","/**\n * Removes properties from an object, based on the values in an array, and returns the new object.\n * Equivalent to an object version of TS Omit<>\n */\nexport const omit = <\n A extends Record<PropertyKey, unknown>,\n const B extends ReadonlyArray<PropertyKey>,\n>(\n objToPluck: Readonly<A>,\n keysToPluck: Readonly<B> | readonly (keyof A)[]\n): Omit<A, B[number]> =>\n Object.keys(objToPluck)\n .filter((key) => !keysToPluck.map((el) => el.toString()).includes(key))\n .reduce((result, key) => ({...result, [key]: objToPluck[key]}), {} as Omit<A, B[number]>)\n\n/**\n * Picks properties from an object, base on the values in an array, and returns the new object.\n * Equivalent to an object version of TS Pick<>\n */\nexport const pick = <\n A extends Record<PropertyKey, unknown>,\n const B extends ReadonlyArray<PropertyKey>,\n>(\n objToPluck: Readonly<A>,\n keysToPluck: Readonly<B> | readonly (keyof A)[]\n): Pick<A, B[number]> =>\n [...keysToPluck].reduce(\n (memo, prop) => {\n memo[prop] = objToPluck[prop]\n return memo\n },\n {} as Record<PropertyKey, unknown>\n ) as Pick<A, B[number]>\n\n/**\n * Dynamically get a nested value from an array or\n * object with a string.\n *\n * @example get(person, 'friends[0].name')\n *\n * Thanks to\n * @link https://github.com/rayepps/radash/blob/master/src/object.ts#L214\n */\nexport const get = <TDefault = unknown>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any,\n path: string,\n defaultValue?: Readonly<TDefault>\n): TDefault => {\n const segments = path.split(/[.[\\]]/g)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let current: any = value\n for (const key of segments) {\n if (current === null) return defaultValue as TDefault\n if (current === undefined) return defaultValue as TDefault\n if (key.trim() === '') continue\n current = current[key]\n }\n if (current === undefined) return defaultValue as TDefault\n return current\n}\n\n/**\n * Opposite of get, dynamically set a nested value into\n * an object using a key path. Does not modify the given\n * initial object.\n *\n * @example\n * set({}, 'name', 'ra') // => { name: 'ra' }\n * set({}, 'cards[0].value', 2) // => { cards: [{ value: 2 }] }\n *\n * Thanks to\n * @link https://github.com/rayepps/radash/blob/master/src/object.ts#L214\n */\nexport const set = <T extends object, K>(initial: T, path: string, value: K): T => {\n const clone = <T>(obj: T): T => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const isPrimitive = (value: any): boolean =>\n value === undefined ||\n value === null ||\n (typeof value !== 'object' && typeof value !== 'function')\n // Primitive values do not need cloning.\n if (isPrimitive(obj)) {\n return obj\n }\n\n if (typeof obj === 'function') {\n return obj.bind({})\n }\n\n const newObj = new ((obj as object).constructor as {new (): T})()\n\n // Assign the props.\n Object.getOwnPropertyNames(obj).forEach((prop) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ;(newObj as any)[prop] = (obj as any)[prop]\n })\n\n return newObj\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const toInt = <T extends number | null = number>(value: any, defaultValue?: T): number | T => {\n const def = defaultValue === undefined ? 0 : defaultValue\n if (value === null || value === undefined) {\n return def\n }\n const result = Number.parseInt(value)\n return Number.isNaN(result) ? def : result\n }\n\n if (!initial) return {} as T\n if (!path || value === undefined) return initial\n const segments = path.split(/[.[\\]]/g).filter((x) => !!x.trim())\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const _set = (node: any) => {\n if (segments.length > 1) {\n const key = segments.shift() as string\n const nextIsNum = toInt(segments[0], null) === null ? false : true\n node[key] = node[key] === undefined ? (nextIsNum ? [] : {}) : node[key]\n _set(node[key])\n } else {\n node[segments[0]] = value\n }\n }\n const cloned = clone(initial)\n _set(cloned)\n return cloned\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const deepEqual = (a: any, b: any): boolean => {\n if (a === b) {\n return true\n }\n\n if (typeof a !== 'object' || a === null || typeof b !== 'object' || b === null) {\n return false\n }\n\n const keysA = Object.keys(a),\n keysB = Object.keys(b)\n\n if (keysA.length !== keysB.length) {\n return false\n }\n\n for (const key of keysA) {\n if (!keysB.includes(key) || !deepEqual(a[key], b[key])) {\n return false\n }\n }\n\n return true\n}\n","import type {ConfigurationOption} from '../types'\n\nexport default <Type extends string, Base extends ConfigurationOption<Type>>(\n options: Readonly<Base>,\n values: readonly Type[]\n): Type[] => {\n const {all, ...others} = options\n const valuesCopy: Partial<Record<keyof Base, boolean>> = {}\n if (all) {\n values.forEach((el) => {\n valuesCopy[el] = all\n })\n }\n const merge: Record<string, boolean> = {...valuesCopy, ...others}\n return (\n Object.entries(merge)\n // filtering possible invalid keys\n .filter(([name, value]) => !!value && values.includes(name as Type))\n .map(([name]) => name as Type)\n )\n}\n","// Suffix can be a falsey value so nothing is appended to string\n// (helps when looping over props & some shouldn't change)\n\nimport {upperFirst} from './stringUtils'\n\n/**\n * Use data last parameters to allow for currying\n *\n * @param suffix\n * @param value\n * @returns\n */\nexport const suffixPropName = (suffix: string, value: string): string =>\n value + (suffix ? upperFirst(suffix) : '')\n","import type {ContainerPosition} from '../types'\n\nexport const positionClasses = {\n 'top-start': 'top-0 start-0',\n 'top-center': 'top-0 start-50 translate-middle-x',\n 'top-end': 'top-0 end-0',\n 'middle-start': 'top-50 start-0 translate-middle-y',\n 'middle-center': 'top-50 start-50 translate-middle',\n 'middle-end': 'top-50 end-0 translate-middle-y',\n 'bottom-start': 'bottom-0 start-0',\n 'bottom-center': 'bottom-0 start-50 translate-middle-x',\n 'bottom-end': 'bottom-0 end-0',\n} as const satisfies Record<ContainerPosition, string>\n","import {computed, type MaybeRefOrGetter, toRef} from 'vue'\nimport {isLink, pick} from '../utils'\n\nexport default <T extends Record<string, unknown>, const B extends ReadonlyArray<PropertyKey>>(\n props: MaybeRefOrGetter<T>,\n pickProps?: MaybeRefOrGetter<B | (keyof T)[]>\n) => {\n const pickPropsResolved = toRef(pickProps)\n const resolvedProps = toRef(props)\n\n const computedLink = toRef(() => isLink(resolvedProps.value))\n const computedLinkProps = computed(() =>\n computedLink.value\n ? pick(\n resolvedProps.value,\n pickPropsResolved.value ?? [\n 'active',\n 'activeClass',\n 'append',\n 'href',\n 'rel',\n 'replace',\n 'routerComponentName',\n 'target',\n 'to',\n 'variant',\n 'opacity',\n 'opacityHover',\n 'underlineVariant',\n 'underlineOffset',\n 'underlineOffsetHover',\n 'underlineOpacity',\n 'underlineOpacityHover',\n ]\n )\n : {}\n )\n\n return {computedLink, computedLinkProps}\n}\n","import {inject} from 'vue'\nimport {breadcrumbPluginKey} from '../utils'\n\nexport default () => ({...inject(breadcrumbPluginKey)})\n","import {useColorMode, type UseColorModeOptions} from '@vueuse/core'\n\nexport interface ColorModeOptions extends UseColorModeOptions {\n /**\n * When set to true, useColorMode will automatically store itself and persist (default localstorage).\n * @default false\n */\n persist?: boolean\n}\n\nexport default (opts: Readonly<ColorModeOptions> = {}) => {\n const persist = opts.persist ?? false\n const attribute = 'data-bs-theme'\n const selector = 'body'\n return useColorMode({\n attribute,\n selector,\n storageKey:\n persist === true\n ? `bv-color-${opts.attribute ?? attribute}-${opts.selector ?? selector}`\n : null,\n ...opts,\n })\n}\n","import {computed, type MaybeRefOrGetter, toValue} from 'vue'\nimport type {ColorExtendables} from '../types'\n\nexport default (obj: MaybeRefOrGetter<ColorExtendables>) =>\n computed(() => {\n let props = toValue(obj)\n props = {\n ...props,\n variant: props.variant ?? null,\n bgVariant: props.bgVariant ?? null,\n textVariant: props.textVariant ?? null,\n }\n return {\n [`text-bg-${props.variant}`]: props.variant !== null,\n [`text-${props.textVariant}`]: props.textVariant !== null && props.variant === null,\n [`bg-${props.bgVariant}`]: props.bgVariant !== null && props.variant === null,\n }\n })\n","import type {Breakpoint} from '../types'\nimport {computed, type MaybeRefOrGetter, toValue} from 'vue'\n\nexport default (value: MaybeRefOrGetter<boolean | Breakpoint | 'fluid'>) =>\n computed(() => {\n const resolvedValue = toValue(value)\n return {\n container: resolvedValue === true,\n [`container-${resolvedValue}`]: typeof resolvedValue === 'string',\n }\n })\n","import {useIntervalFn, type UseIntervalFnOptions} from '@vueuse/core'\nimport {type MaybeRefOrGetter, readonly, ref, type Ref, toRef, watch, watchEffect} from 'vue'\n\ntype VoidFn = () => void\n\ninterface CountdownReturn {\n isActive: Readonly<Ref<boolean>>\n isPaused: Readonly<Ref<boolean>>\n restart: VoidFn\n stop: VoidFn\n resume: VoidFn\n pause: VoidFn\n value: Readonly<Ref<number>>\n}\n\n/**\n * A simple interval timer that counts down the remaining seconds\n *\n * @param {MaybeRefOrGetter<number>} length the total amount of time to loop through in ms\n * @param {MaybeRefOrGetter<number>} interval how often the interval should refresh. Default 1000\n * @param {Readonly<UseIntervalFnOptions>} intervalOpts opts to pass to the interval fn. Default {}\n * @important ensure that you call `stop()` before unmount in the component\n */\nexport default (\n length: MaybeRefOrGetter<number>,\n interval: MaybeRefOrGetter<number> = ref(1000),\n intervalOpts: Readonly<UseIntervalFnOptions> = {}\n): CountdownReturn => {\n const resolvedLength = readonly(toRef(length))\n\n const resolvedInterval = readonly(toRef(interval))\n\n const isPaused = ref(false)\n\n const intervalsPassed = ref(0)\n\n const amountOfIntervals = toRef(() => Math.ceil(resolvedLength.value / resolvedInterval.value))\n\n const value = toRef(() =>\n isActive.value || isPaused.value\n ? Math.round(resolvedLength.value - intervalsPassed.value * resolvedInterval.value)\n : 0\n )\n\n const {pause, resume, isActive} = useIntervalFn(\n () => {\n intervalsPassed.value = intervalsPassed.value + 1\n },\n interval,\n intervalOpts\n )\n\n const restart = () => {\n isPaused.value = false\n intervalsPassed.value = 0\n resume()\n }\n\n const stop = () => {\n isPaused.value = false\n intervalsPassed.value = amountOfIntervals.value\n // pause() // Only here for the sake of demonstrating the flow. It will be called in the watchEffect\n }\n watchEffect(() => {\n if (intervalsPassed.value > amountOfIntervals.value) {\n intervalsPassed.value = amountOfIntervals.value\n }\n if (intervalsPassed.value === amountOfIntervals.value) {\n pause()\n }\n })\n\n watch([resolvedInterval, resolvedLength], () => {\n stop()\n restart()\n })\n\n const myPause = () => {\n if (isActive.value === false) return\n isPaused.value = true\n pause()\n }\n\n const myResume = () => {\n if (intervalsPassed.value === amountOfIntervals.value) return\n isPaused.value = false\n resume()\n }\n\n return {\n isActive: readonly(isActive),\n isPaused: readonly(isPaused),\n restart,\n stop,\n pause: myPause,\n resume: myResume,\n value,\n }\n}\n","/* eslint-disable eqeqeq */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n// Utilities\nimport {\n getCurrentInstance as _getCurrentInstance,\n type ComponentInternalInstance,\n computed,\n inject,\n type InjectionKey,\n provide,\n ref,\n shallowRef,\n type VNode,\n watchEffect,\n} from 'vue'\nimport {defaultsKey} from '../utils'\nimport type {BvnComponentProps} from '../types'\n\n// Code here was taken from\n// https://github.com/vuetifyjs/vuetify/blob/8ed87310890e2b6c8ad2a626a02c17f9467cbb60/packages/vuetify/src/composables/defaults.ts#L138\n// Thanks to the Vuetify team. Vue does not make this easy\n\nfunction injectSelf<T>(key: InjectionKey<T> | string, vm?: ComponentInternalInstance): T | undefined\nfunction injectSelf(key: InjectionKey<any> | string, vm = getCurrentInstance('injectSelf')) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const {provides} = vm\n\n if (provides && (key as string | symbol) in provides) {\n // TS doesn't allow symbol as index type\n return provides[key as string]\n }\n return undefined\n}\n\nfunction getCurrentInstance(name: string, message?: string) {\n const vm = _getCurrentInstance()\n\n if (!vm) {\n throw new Error(`[Bvn] ${name} ${message || 'must be called from inside a setup function'}`)\n }\n\n return vm\n}\n\nconst toKebabCase = (str = '') =>\n str\n .replace(/[^a-z]/gi, '-')\n .replace(/\\B([A-Z])/g, '-$1')\n .toLowerCase()\nconst isObject = (obj: any): obj is Record<string, any> =>\n obj !== null && typeof obj === 'object' && !Array.isArray(obj)\n\nfunction mergeDeep(\n source: Record<string, any> = {},\n target: Record<string, any> = {},\n arrayFn?: (a: unknown[], b: unknown[]) => unknown[]\n) {\n const out: Record<string, any> = {}\n\n for (const key in source) {\n out[key] = source[key]\n }\n\n for (const key in target) {\n const sourceProperty = source[key]\n const targetProperty = target[key]\n\n // Only continue deep merging if\n // both properties are objects\n if (isObject(sourceProperty) && isObject(targetProperty)) {\n out[key] = mergeDeep(sourceProperty, targetProperty, arrayFn)\n\n continue\n }\n\n if (Array.isArray(sourceProperty) && Array.isArray(targetProperty) && arrayFn) {\n out[key] = arrayFn(sourceProperty, targetProperty)\n\n continue\n }\n\n out[key] = targetProperty\n }\n\n return out\n}\n\nconst propIsDefined = (vnode: VNode, prop: string) =>\n typeof vnode.props?.[prop] !== 'undefined' ||\n typeof vnode.props?.[toKebabCase(prop)] !== 'undefined'\n\nfunction internalUseDefaults(props: Record<string, any> = {}, name?: string) {\n const defaults = inject(defaultsKey, ref({}))\n const vm = getCurrentInstance('useDefaults')\n\n name = name ?? vm.type.name ?? vm.type.__name\n if (!name) {\n // Should never happen\n throw new Error('[Bvn] Could not determine component name')\n }\n\n const componentDefaults = computed(() => (defaults.value as any)?.[props._as ?? name])\n const _props = new Proxy(props, {\n get(target, prop) {\n const propValue = Reflect.get(target, prop)\n if (prop === 'class' || prop === 'style') {\n return [componentDefaults.value?.[prop], propValue].filter((v) => v != null)\n } else if (typeof prop === 'string' && !propIsDefined(vm.vnode, prop)) {\n return (\n componentDefaults.value?.[prop] ?? (defaults.value as any)?.global?.[prop] ?? propValue\n )\n }\n return propValue\n },\n })\n\n const _subcomponentDefaults = shallowRef()\n watchEffect(() => {\n if (componentDefaults.value) {\n const subComponents = Object.entries(componentDefaults.value).filter(([key]) =>\n key.startsWith(key[0].toUpperCase())\n )\n _subcomponentDefaults.value = subComponents.length\n ? Object.fromEntries(subComponents)\n : undefined\n } else {\n _subcomponentDefaults.value = undefined\n }\n })\n\n function provideSubDefaults() {\n const injected = injectSelf(defaultsKey, vm)\n provide(\n defaultsKey,\n computed(() =>\n _subcomponentDefaults.value\n ? mergeDeep(injected?.value ?? {}, _subcomponentDefaults.value)\n : injected?.value\n ) as any\n )\n }\n\n return {props: _props, provideSubDefaults}\n}\n\nexport function useDefaults<T extends Record<string, any>>(\n props: T,\n name: keyof BvnComponentProps\n): T {\n const {props: _props, provideSubDefaults} = internalUseDefaults(props, name)\n provideSubDefaults()\n return _props as T\n}\n","import {computed, type MaybeRefOrGetter, toValue} from 'vue'\n\nexport default (value: MaybeRefOrGetter<boolean | null>) =>\n computed(() => {\n const resolvedValue = toValue(value)\n\n return resolvedValue === true ? 'is-valid' : resolvedValue === false ? 'is-invalid' : null\n })\n","import type {AriaInvalid, ButtonVariant, Size} from '../types'\nimport {computed, type MaybeRefOrGetter, toRef, toValue} from 'vue'\nimport useAriaInvalid from './useAriaInvalid'\nimport useStateClass from './useStateClass'\n\ninterface ClassesItemsInput {\n plain?: boolean\n button?: boolean\n inline?: boolean\n reverse?: boolean\n switch?: boolean\n size?: Size\n hasDefaultSlot?: boolean\n}\n\nconst getClasses = (items: MaybeRefOrGetter<ClassesItemsInput>) =>\n computed(() => {\n const resolvedItems = toValue(items)\n return {\n 'form-check':\n resolvedItems.plain === false &&\n resolvedItems.button === false &&\n resolvedItems.hasDefaultSlot,\n 'form-check-reverse': resolvedItems.reverse === true,\n 'form-check-inline': resolvedItems.inline === true,\n 'form-switch': resolvedItems.switch === true,\n [`form-control-${resolvedItems.size}`]:\n resolvedItems.size !== undefined &&\n resolvedItems.size !== 'md' &&\n resolvedItems.button === false,\n }\n })\n\ninterface InputClassesItemsInput {\n plain?: boolean\n button?: boolean\n state?: boolean | null\n}\n\nconst getInputClasses = (items: MaybeRefOrGetter<InputClassesItemsInput>) => {\n const resolvedItems = toRef(items)\n\n const stateClass = useStateClass(() => resolvedItems.value.state ?? null)\n\n return computed(() => [\n stateClass.value,\n {\n 'form-check-input':\n resolvedItems.value.plain === false && resolvedItems.value.button === false,\n 'btn-check': resolvedItems.value.button === true,\n },\n ])\n}\n\ninterface LabelClasesItemsInput {\n plain?: boolean\n button?: boolean\n buttonVariant?: ButtonVariant | null\n size?: Size\n}\n\nconst getLabelClasses = (items: MaybeRefOrGetter<LabelClasesItemsInput>) =>\n computed(() => {\n const resolvedItems = toValue(items)\n return {\n 'form-check-label': resolvedItems.plain === false && resolvedItems.button === false,\n 'btn': resolvedItems.button === true,\n [`btn-${resolvedItems.buttonVariant}`]:\n resolvedItems.button === true &&\n resolvedItems.buttonVariant !== undefined &&\n resolvedItems.buttonVariant !== null,\n [`btn-${resolvedItems.size}`]:\n resolvedItems.button && resolvedItems.size && resolvedItems.size !== 'md',\n }\n })\n\ninterface GroupAttrItemsInput {\n required?: boolean\n ariaInvalid?: AriaInvalid\n state?: boolean | null\n}\n\nconst getGroupAttr = (items: MaybeRefOrGetter<GroupAttrItemsInput>) => {\n const resolvedItems = toRef(items)\n const computedAriaInvalid = useAriaInvalid(\n () => resolvedItems.value.ariaInvalid,\n () => resolvedItems.value.state\n )\n return computed(() => ({\n 'aria-invalid': computedAriaInvalid.value as Exclude<AriaInvalid, ''> | undefined,\n 'aria-required': resolvedItems.value.required === true ? true : undefined,\n }))\n}\n\ninterface GroupClassesItemsInput {\n validated?: boolean\n buttons?: boolean\n stacked?: boolean\n size?: Size\n}\n\nconst getGroupClasses = (items: MaybeRefOrGetter<GroupClassesItemsInput>) =>\n computed(() => {\n const resolvedItems = toValue(items)\n return {\n 'was-validated': resolvedItems.validated === true,\n 'btn-group': resolvedItems.buttons === true && resolvedItems.stacked === false,\n 'btn-group-vertical': resolvedItems.stacked === true && resolvedItems.buttons === true,\n [`btn-group-${resolvedItems.size}`]: resolvedItems.size !== undefined,\n }\n })\n\nexport {getClasses, getInputClasses, getLabelClasses, getGroupAttr, getGroupClasses}\n","import {idPluginKey} from '../utils'\nimport {computed, type ComputedRef, inject, type MaybeRefOrGetter, toValue} from 'vue'\n\nexport default (id?: MaybeRefOrGetter<string | undefined>, suffix?: string): ComputedRef<string> =>\n computed(() => toValue(id) || getId(suffix))\n\nexport const getId = (suffix = '') => {\n const getId = inject(idPluginKey, () => Math.random().toString().slice(2, 8))\n return `__BVID__${getId()}___BV_${suffix}__`\n}\n","import type {Numberish} from '../types'\nimport {nextTick, onActivated, onMounted, ref, type Ref} from 'vue'\nimport useAriaInvalid from './useAriaInvalid'\nimport useId from './useId'\nimport {useDebounceFn, useFocus, useToNumber} from '@vueuse/core'\nimport type {CommonInputProps} from '../types/FormCommonInputProps'\n\nexport default (\n props: Readonly<CommonInputProps>,\n modelValue: Ref<Numberish | null>,\n modelModifiers: Record<'number' | 'lazy' | 'trim', true | undefined>\n) => {\n const input = ref<HTMLInputElement | null>(null)\n\n const computedId = useId(() => props.id, 'input')\n const debounceNumber = useToNumber(() => props.debounce ?? 0)\n const debounceMaxWaitNumber = useToNumber(() => props.debounceMaxWait ?? NaN)\n\n const internalUpdateModelValue = useDebounceFn(\n (value: Numberish) => {\n modelValue.value = value\n },\n () => (modelModifiers.lazy === true ? 0 : debounceNumber.value),\n {maxWait: () => (modelModifiers.lazy === true ? NaN : debounceMaxWaitNumber.value)}\n )\n\n const updateModelValue = (value: Numberish, force = false) => {\n if (modelModifiers.lazy === true && force === false) return\n internalUpdateModelValue(value)\n }\n\n const {focused} = useFocus(input, {\n initialValue: props.autofocus,\n })\n\n const _formatValue = (value: string, evt: Readonly<Event>, force = false) => {\n if (props.formatter !== undefined && (!props.lazyFormatter || force)) {\n return props.formatter(value, evt)\n }\n return value\n }\n onMounted(() => {\n if (input.value) {\n input.value.value = modelValue.value?.toString() ?? ''\n }\n })\n\n onActivated(() => {\n nextTick(() => {\n if (props.autofocus) {\n focused.value = true\n }\n })\n })\n\n const computedAriaInvalid = useAriaInvalid(\n () => props.ariaInvalid,\n () => props.state\n )\n\n const onInput = (evt: Readonly<Event>) => {\n const {value} = evt.target as HTMLInputElement\n const formattedValue = _formatValue(value, evt)\n if (evt.defaultPrevented) {\n evt.preventDefault()\n return\n }\n\n const nextModel = formattedValue\n\n updateModelValue(nextModel)\n }\n\n const onChange = (evt: Readonly<Event>) => {\n const {value} = evt.target as HTMLInputElement\n const formattedValue = _formatValue(value, evt)\n if (evt.defaultPrevented) {\n evt.preventDefault()\n return\n }\n\n const nextModel = formattedValue\n if (modelValue.value !== nextModel) {\n updateModelValue(formattedValue, true)\n }\n }\n\n const onBlur = (evt: Readonly<FocusEvent>) => {\n if (!modelModifiers.lazy && !props.lazyFormatter) return\n\n const {value} = evt.target as HTMLInputElement\n const formattedValue = _formatValue(value, evt, true)\n\n const nextModel = formattedValue\n if (modelValue.value !== nextModel) {\n updateModelValue(formattedValue, true)\n }\n }\n\n const focus = () => {\n if (!props.disabled) {\n focused.value = true\n }\n }\n\n const blur = () => {\n if (!props.disabled) {\n focused.value = false\n }\n }\n\n return {\n input,\n computedId,\n computedAriaInvalid,\n onInput,\n onChange,\n onBlur,\n focus,\n blur,\n }\n}\n","import {computed, type MaybeRefOrGetter, readonly, toRef} from 'vue'\nimport {get} from '../utils'\nimport type {ComplexSelectOptionRaw, SelectOption} from '../types'\n\nexport default (\n options: MaybeRefOrGetter<ReadonlyArray<unknown>>,\n props: MaybeRefOrGetter<Record<string, unknown>>\n) => {\n const propsValue = readonly(toRef(props)) // as Readonly<Record<string, unknown>>\n const optionsValue = readonly(toRef(options))\n\n const isComplex = (option: unknown): option is ComplexSelectOptionRaw =>\n typeof option === 'object' && option !== null && 'label' in option\n\n const normalizeOption = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n option: any\n ): ComplexSelectOptionRaw | SelectOption => {\n if (typeof option === 'string') {\n return {value: option, text: option}\n }\n if (typeof option === 'number') {\n return {value: option, text: `${option}`}\n }\n if (option instanceof Date) {\n return {value: option, text: option.toLocaleString()}\n }\n\n const value: unknown = get(option, propsValue.value.valueField as string)\n const text: string = get(option, propsValue.value.textField as string)\n const html: string = get(option, propsValue.value.htmlField as string)\n const disabled: boolean = get(option, propsValue.value.disabledField as string)\n\n const opts: undefined | unknown[] = propsValue.value.optionsField\n ? get(option, propsValue.value.optionsField as string)\n : undefined\n\n if (opts !== undefined) {\n return {\n label: get(option, propsValue.value.labelField as string) || text,\n options: opts,\n } as ComplexSelectOptionRaw\n }\n\n return {\n value,\n text,\n html,\n disabled,\n } as SelectOption\n }\n\n const normalizeOptions = (\n opts: ReadonlyArray<unknown>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): (ComplexSelectOptionRaw | SelectOption)[] => opts.map((option) => normalizeOption(option))\n\n const normalizedOptions = computed(() => normalizeOptions(optionsValue.value))\n\n return {normalizedOptions, isComplex}\n}\n","import {getSSRHandler, tryOnScopeDispose, unrefElement} from '@vueuse/core'\nimport {\n type ComponentInternalInstance,\n computed,\n getCurrentInstance,\n inject,\n type Ref,\n watch,\n} from 'vue'\nimport {modalManagerPluginKey} from '../utils'\n\nconst modalOpenClassName = 'modal-open'\n\nexport const useSharedModalStack = () => {\n const modalManagerPlugin = inject(modalManagerPluginKey)\n\n /**\n * Removes an item from both the stack and registry\n */\n const dispose = (modal: Readonly<ComponentInternalInstance>): void => {\n modalManagerPlugin?.removeStack(modal)\n modalManagerPlugin?.removeRegistry(modal)\n }\n\n const updateHTMLAttrs = getSSRHandler('updateHTMLAttrs', (selector, attribute, value) => {\n const el =\n typeof selector === 'string'\n ? window?.document.querySelector(selector)\n : unrefElement(selector)\n if (!el) return\n\n if (attribute === 'class') {\n el.classList.toggle(modalOpenClassName, value === modalOpenClassName)\n } else {\n el.setAttribute(attribute, value)\n }\n })\n\n tryOnScopeDispose(() => {\n updateHTMLAttrs('body', 'class', '')\n })\n\n watch(\n () => modalManagerPlugin?.countStack.value,\n (newValue) => {\n if (newValue === undefined) return\n updateHTMLAttrs('body', 'class', newValue > 0 ? modalOpenClassName : '')\n }\n )\n\n return {\n ...modalManagerPlugin,\n dispose,\n }\n}\n\nexport default (modalOpen: Readonly<Ref<boolean>>, initialValue: boolean) => {\n const {pushRegistry, pushStack, removeStack, stack, dispose, countStack} = useSharedModalStack()\n\n const currentModal = getCurrentInstance()\n\n if (!currentModal || currentModal.type.__name !== 'BModal') {\n throw new Error('useModalManager must only use in BModal component')\n }\n\n pushRegistry?.(currentModal)\n\n tryOnScopeDispose(() => {\n dispose(currentModal)\n })\n\n const setInStack = (newValue: boolean, oldValue: boolean) => {\n if (newValue) {\n pushStack?.(currentModal)\n } else if (oldValue && !newValue) {\n removeStack?.(currentModal)\n }\n }\n\n // (initialValue, initialValue) is meant to always only ever trigger the first `if (newValue) {` block. The other block is skipped _always_\n setInStack(initialValue, initialValue)\n\n watch(modalOpen, setInStack)\n\n return {\n activePosition: computed(() =>\n stack?.value.findIndex((el) => el.exposed?.id === currentModal.exposed?.id)\n ),\n activeModalCount: countStack,\n stackWithoutSelf: computed(\n () => stack?.value.filter((el) => el.exposed?.id !== currentModal.exposed?.id) ?? []\n ),\n }\n}\n","import {\n type ComponentInternalInstance,\n computed,\n getCurrentInstance,\n type MaybeRefOrGetter,\n toRef,\n toValue,\n} from 'vue'\nimport {useSharedModalStack} from './useModalManager'\n\nexport default (id: MaybeRefOrGetter<string | undefined> = undefined) => {\n const {registry} = useSharedModalStack()\n const instance = getCurrentInstance()\n\n const findBModal = (component: ComponentInternalInstance): ComponentInternalInstance | null => {\n if (!component.parent) {\n return null\n }\n\n if (component.parent.type.__name === 'BModal') {\n return component.parent\n }\n\n return findBModal(component.parent)\n }\n\n const modalComponent = computed(() => {\n const resolvedId = toValue(id)\n if (resolvedId) {\n return registry?.value.find((modal) => modal.exposed?.id.value === resolvedId) || null\n }\n\n if (!instance) {\n return null\n }\n\n return findBModal(instance)\n })\n\n const modal = toRef(() => modalComponent.value?.proxy)\n\n return {\n show() {\n modalComponent.value?.exposed?.show()\n },\n hide(trigger = '') {\n modalComponent.value?.exposed?.hide(trigger)\n },\n modal,\n }\n}\n","import {inject} from 'vue'\nimport {useSharedModalStack} from './useModalManager'\nimport {modalControllerPluginKey} from '../utils'\n\nexport default () => {\n const {lastStack, stack} = useSharedModalStack()\n\n const modalControllerPlugin = inject(modalControllerPluginKey)\n\n const hide = (trigger = '') => {\n if (lastStack?.value) {\n lastStack?.value.exposed?.hide(trigger)\n }\n }\n\n const hideAll = (trigger = '') => {\n stack?.value.forEach((modal) => {\n modal.exposed?.hide(trigger)\n })\n }\n\n return {\n ...modalControllerPlugin,\n hide,\n hideAll,\n // Todo: Supports listening events globally in the future\n }\n}\n","import {computed, type MaybeRefOrGetter, toValue} from 'vue'\nimport type {Numberish} from '../types'\nimport {RX_NUMBER} from '../constants/regex'\n\nexport default (\n el: MaybeRefOrGetter<Numberish | undefined>,\n /**\n * The unit to use when converting a numeric value to a string\n *\n * @default 'px'\n */\n unit: MaybeRefOrGetter<string> = 'px'\n) =>\n computed(() => {\n const value = toValue(el)\n const resolvedUnit = toValue(unit)\n // If num is non-numeric, return val as-is (sm, md, lg, undefined or any other custom value), otherwise return num as a px value\n return RX_NUMBER.test(String(value))\n ? `${Number(value)}${resolvedUnit}`\n : (value as string | undefined)\n })\n","import {computed, type MaybeRefOrGetter, toValue} from 'vue'\nimport type {RadiusElement, RadiusElementExtendables} from '../types'\n\nexport default (obj: MaybeRefOrGetter<RadiusElementExtendables>) => {\n const resolveRadiusElement = (\n value: boolean | RadiusElement,\n str: 'top' | 'bottom' | 'start' | 'end' | null\n ): string => {\n const strValue = str === null ? '' : `-${str}`\n\n return value === 'circle'\n ? `rounded${strValue}-circle`\n : value === 'pill'\n ? `rounded${strValue}-pill`\n : typeof value === 'number' ||\n value === '0' ||\n value === '1' ||\n value === '2' ||\n value === '3' ||\n value === '4' ||\n value === '5'\n ? `rounded${strValue}-${value}`\n : value === 'none'\n ? `rounded${strValue}-0`\n : value === 'sm'\n ? `rounded${strValue}-1`\n : value === 'lg'\n ? `rounded${strValue}-5`\n : `rounded${strValue}` // true is last\n }\n\n return computed(() => {\n const props = toValue(obj)\n\n return {\n [`${resolveRadiusElement(props.rounded as boolean | RadiusElement, null)}`]: !!props.rounded,\n [`${resolveRadiusElement(props.roundedTop as boolean | RadiusElement, 'top')}`]:\n !!props.roundedTop,\n [`${resolveRadiusElement(props.roundedBottom as boolean | RadiusElement, 'bottom')}`]:\n !!props.roundedBottom,\n [`${resolveRadiusElement(props.roundedStart as boolean | RadiusElement, 'start')}`]:\n !!props.roundedStart,\n [`${resolveRadiusElement(props.roundedEnd as boolean | RadiusElement, 'end')}`]:\n !!props.roundedEnd,\n }\n })\n}\n","import {inject, onMounted, watch} from 'vue'\nimport {rtlPluginKey} from '../utils'\n\nexport default () => {\n const rtlPlugin = inject(rtlPluginKey)\n\n onMounted(() => {\n watch(\n [() => rtlPlugin?.isRtl.value, () => rtlPlugin?.locale.value],\n ([rtlNew, localeNew]) => {\n const html = document.documentElement\n\n // I can't think of a reason why one might want to destroy these if unmounted...\n html.setAttribute('dir', rtlNew ?? false ? 'rtl' : 'ltr')\n html.setAttribute('lang', localeNew ?? '')\n },\n {immediate: true}\n )\n })\n\n return {...rtlPlugin}\n}\n","import {type MaybeRefOrGetter, onMounted, readonly, toRef, watch} from 'vue'\nimport {useScrollLock} from '@vueuse/core'\n\nexport default (isOpen: MaybeRefOrGetter<boolean>, bodyScroll: MaybeRefOrGetter<boolean>) => {\n const resolvedIsOpen = readonly(toRef(isOpen))\n const resolvedBodyScrolling = readonly(toRef(bodyScroll))\n\n /**\n * We use the inverse because bodyScrolling === true means we allow scrolling, while bodyScrolling === false means we disallow\n */\n const inverseBodyScrollingValue = toRef(() => !resolvedBodyScrolling.value)\n\n onMounted(() => {\n const isLocked = useScrollLock(\n document.body,\n resolvedIsOpen.value && inverseBodyScrollingValue.value\n )\n\n watch([resolvedIsOpen, inverseBodyScrollingValue], ([modelVal, bodyVal]) => {\n isLocked.value = modelVal && bodyVal\n })\n })\n}\n","import {syncRef, useIntersectionObserver, useMutationObserver} from '@vueuse/core'\nimport {\n type ComponentPublicInstance,\n computed,\n getCurrentInstance,\n type MaybeRefOrGetter,\n nextTick,\n onMounted,\n readonly,\n type Ref,\n ref,\n toRef,\n watch,\n} from 'vue'\nimport {getElement} from '../utils'\n\ntype ScrollspyList = {\n id: string | null\n el: HTMLElement | null\n visible: boolean\n text: string | null\n}[]\n\ninterface ScrollspyReturn {\n current: Readonly<Ref<string | null>>\n list: Readonly<Ref<ScrollspyList>>\n content: Ref<HTMLElement | undefined>\n target: Ref<HTMLElement | undefined>\n scrollIntoView: (event: MouseEvent) => void\n updateList: () => void\n cleanup: () => void\n}\n\ninterface ScrollspyOptions {\n contentQuery: string\n targetQuery: string\n manual: boolean\n root: string | ComponentPublicInstance | HTMLElement | null\n rootMargin: string\n threshold: number | number[]\n watchChanges: boolean\n}\n\nexport default (\n content: MaybeRefOrGetter<string | ComponentPublicInstance | HTMLElement | null>,\n target: MaybeRefOrGetter<string | ComponentPublicInstance | HTMLElement | null>,\n options: Readonly<Partial<ScrollspyOptions>> = {}\n): ScrollspyReturn => {\n const cont = toRef(content)\n const tar = toRef(target)\n\n const resolvedContent = ref(getElement(cont.value))\n const resolvedTarget = ref(getElement(tar.value))\n\n watch([cont, tar], () => {\n updateList()\n })\n const {\n contentQuery = ':scope > [id]',\n targetQuery = '[href]',\n manual = false,\n root,\n rootMargin = '0px 0px -25%',\n threshold = [0.1, 0.5, 1],\n watchChanges = true,\n } = options\n const current = ref<string | null>(null)\n const list = ref<ScrollspyList>([])\n const nodeList = ref<HTMLElement[]>([])\n\n // are we called in directive?\n const ctx = getCurrentInstance()\n if (!ctx) {\n nextTick(() => {\n updateList()\n })\n } else {\n onMounted(() => {\n syncRef(cont, resolvedContent, {\n transform: {\n ltr: (v) => getElement(v),\n },\n direction: 'ltr',\n immediate: true,\n })\n syncRef(tar, resolvedTarget, {\n transform: {\n ltr: (v) => getElement(v),\n },\n direction: 'ltr',\n immediate: true,\n })\n updateList()\n })\n }\n\n const updateList = () => {\n nodeList.value = resolvedContent.value\n ? (Array.from(resolvedContent.value.querySelectorAll(contentQuery)) as HTMLElement[])\n : []\n list.value = nodeList.value.map((el) => ({\n id: el.id,\n el,\n visible: false,\n text: el.textContent,\n }))\n }\n\n let isScrollingDown = true\n let previousScrollTop = 0\n const scrollRoot = computed(() =>\n resolvedContent.value && getComputedStyle(resolvedContent.value).overflowY === 'visible'\n ? null\n : resolvedContent.value\n )\n\n const iobs = useIntersectionObserver(\n nodeList,\n (entries) => {\n const scrollTop = (scrollRoot.value || document?.documentElement)?.scrollTop\n isScrollingDown = scrollTop > previousScrollTop\n previousScrollTop = scrollTop\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n list.value.forEach((node) => {\n if (node.el === entry.target) {\n node.visible = true\n }\n })\n return\n }\n list.value.forEach((node) => {\n if (node.el === entry.target) {\n node.visible = false\n }\n })\n })\n let newId: string | null = null\n if (isScrollingDown) {\n newId = [...list.value].reverse().find((node) => node.visible)?.id || null\n } else {\n newId = list.value.find((node) => node.visible)?.id || null\n }\n if (newId !== null) {\n current.value = newId\n }\n if (!current.value) {\n current.value = list.value[0]?.id || null\n }\n },\n {\n root: root ? getElement(root) : scrollRoot,\n rootMargin,\n threshold,\n }\n )\n watch(current, (newId) => {\n if (manual) return\n const nodes = resolvedTarget.value?.querySelectorAll(targetQuery)\n if (nodes === undefined) return\n let foundParent = false\n let activeElement: HTMLElement | null = null\n nodes.forEach((node) => {\n const parentDropdown = node.closest('.dropdown')\n\n if (node.getAttribute('href')?.includes(`#${newId}`)) {\n activeElement = node as HTMLElement\n node.classList.add('active')\n if (parentDropdown) {\n parentDropdown?.querySelector('.dropdown-toggle')?.classList.add('active')\n foundParent = true\n }\n let parentNav = node.closest('.nav')?.previousSibling as HTMLElement\n while (parentNav?.classList?.contains('nav-item')) {\n foundParent = true\n parentNav.querySelector('.nav-link')?.classList.add('active')\n parentNav = parentNav.closest('.nav')?.previousSibling as HTMLElement\n }\n } else {\n node.classList.remove('active')\n if (parentDropdown && !foundParent) {\n parentDropdown?.querySelector('.dropdown-toggle')?.classList.remove('active')\n }\n\n if (!foundParent) {\n let parentNav = node.closest('.nav')?.previousSibling as HTMLElement\n while (parentNav?.classList?.contains('nav-item')) {\n foundParent = true\n parentNav.querySelector('.nav-link') !== activeElement &&\n parentNav.querySelector('.nav-link')?.classList.remove('active')\n parentNav = parentNav.closest('.nav')?.previousSibling as HTMLElement\n }\n }\n }\n })\n })\n\n const mobs = !watchChanges\n ? {stop: () => {}}\n : useMutationObserver(\n resolvedContent,\n () => {\n updateList()\n },\n {\n childList: true,\n }\n )\n const scrollIntoView = (event: Readonly<MouseEvent>, smooth: boolean = false) => {\n event.preventDefault()\n const href = (event.target as HTMLElement)?.getAttribute?.('href')\n const el: HTMLElement | null = href ? document?.querySelector(href) : null\n // console.log('scrollIntoView', event, el, content.value.$el)\n if (el && resolvedContent.value) {\n resolvedContent.value.scrollTo\n ? resolvedContent.value.scrollTo({top: el.offsetTop, behavior: smooth ? 'smooth' : 'auto'})\n : (resolvedContent.value.scrollTop = el.offsetTop)\n }\n }\n const cleanup = () => {\n iobs.stop()\n mobs.stop()\n }\n return {\n current: readonly(current),\n list,\n content: resolvedContent,\n target: resolvedTarget,\n scrollIntoView,\n updateList,\n cleanup,\n }\n}\n","import {inject} from 'vue'\nimport {toastPluginKey} from '../utils'\n\nexport default () => ({...inject(toastPluginKey)})\n","import {computed, type MaybeRefOrGetter, toValue} from 'vue'\n\nexport const useFadeTransition = (noFade: MaybeRefOrGetter<boolean>) =>\n computed(() => {\n const NO_FADE_PROPS = {\n name: '',\n enterActiveClass: '',\n enterToClass: '',\n leaveActiveClass: '',\n leaveToClass: 'showing',\n enterFromClass: 'showing',\n leaveFromClass: '',\n css: true,\n }\n const FADE_PROPS = {\n ...NO_FADE_PROPS,\n name: 'fade',\n enterActiveClass: 'fade showing',\n leaveActiveClass: 'fade showing',\n }\n return toValue(noFade) ? NO_FADE_PROPS : FADE_PROPS\n })\n","<template>\n <Transition\n v-bind=\"{...baseProperties, ...props.transProps}\"\n :appear=\"props.appear\"\n @after-appear=\"emit('after-appear', $event)\"\n @after-enter=\"emit('after-enter', $event)\"\n @after-leave=\"emit('after-leave', $event)\"\n @appear=\"emit('appear', $event)\"\n @before-appear=\"emit('before-appear', $event)\"\n @before-enter=\"emit('before-enter', $event)\"\n @before-leave=\"emit('before-leave', $event)\"\n @enter=\"emit('enter', $event)\"\n @appear-cancelled=\"emit('appear-cancelled', $event)\"\n @enter-cancelled=\"emit('enter-cancelled', $event)\"\n @leave=\"emit('leave', $event)\"\n @leave-cancelled=\"emit('leave-cancelled', $event)\"\n >\n <slot />\n </Transition>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../../composables'\nimport type {BTransitionProps} from '../../types'\nimport {computed} from 'vue'\n\nconst _props = withDefaults(defineProps<BTransitionProps>(), {\n appear: false,\n mode: undefined,\n noFade: false,\n transProps: undefined,\n})\nconst props = useDefaults(_props, 'BTransition')\n\nconst emit = defineEmits<{\n 'after-appear': [value: Element]\n 'after-enter': [value: Element]\n 'after-leave': [value: Element]\n 'appear': [value: Element]\n 'before-appear': [value: Element]\n 'before-enter': [value: Element]\n 'before-leave': [value: Element]\n 'enter': [value: Element]\n 'appear-cancelled': [value: Element]\n 'enter-cancelled': [value: Element]\n 'leave': [value: Element]\n 'leave-cancelled': [value: Element]\n}>()\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst fadeProperties = computed(() => {\n const NO_FADE_PROPS = {\n name: '',\n enterActiveClass: '',\n enterToClass: '',\n leaveActiveClass: '',\n leaveToClass: 'showing',\n enterFromClass: 'showing',\n leaveFromClass: '',\n }\n const FADE_PROPS = {\n ...NO_FADE_PROPS,\n enterActiveClass: 'fade showing',\n leaveActiveClass: 'fade showing',\n }\n return props.noFade ? NO_FADE_PROPS : FADE_PROPS\n})\n\nconst baseProperties = computed(() => ({mode: props.mode, css: true, ...fadeProperties.value}))\n</script>\n\n<style lang=\"scss\">\n.fade-enter-active,\n.fade-leave-active {\n transition: opacity 0.25s linear;\n}\n\n.fade-enter-from,\n.fade-leave-to {\n opacity: 0;\n}\n</style>\n","<template>\n <button\n :type=\"props.type\"\n class=\"btn-close\"\n :disabled=\"props.disabled\"\n :aria-label=\"props.ariaLabel\"\n @click=\"emit('click', $event)\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../../composables'\nimport type {BCloseButtonProps} from '../../types'\n\nconst _props = withDefaults(defineProps<BCloseButtonProps>(), {\n ariaLabel: 'Close',\n disabled: false,\n type: 'button',\n})\nconst props = useDefaults(_props, 'BCloseButton')\n\nconst emit = defineEmits<{\n click: [value: MouseEvent]\n}>()\n</script>\n","import {computed, type MaybeRefOrGetter, toValue} from 'vue'\nimport type {LinkIconProps, LinkOpacityProps, LinkUnderlineProps, LinkVariantProps} from '../types'\n\nexport const useLinkClasses = (\n linkProps: MaybeRefOrGetter<\n LinkUnderlineProps & LinkOpacityProps & LinkIconProps & LinkVariantProps\n >\n) =>\n computed(() => {\n const props = toValue(linkProps)\n return {\n [`link-${props.variant}`]: props.variant !== null,\n [`link-opacity-${props.opacity}`]: props.opacity !== undefined,\n [`link-opacity-${props.opacityHover}-hover`]: props.opacityHover !== undefined,\n [`link-underline-${props.underlineVariant}`]: props.underlineVariant !== null,\n [`link-offset-${props.underlineOffset}`]: props.underlineOffset !== undefined,\n [`link-offset-${props.underlineOffsetHover}-hover`]: props.underlineOffsetHover !== undefined,\n ['link-underline']:\n props.underlineVariant === null &&\n (props.underlineOpacity !== undefined || props.underlineOpacityHover !== undefined),\n [`link-underline-opacity-${props.underlineOpacity}`]: props.underlineOpacity !== undefined,\n [`link-underline-opacity-${props.underlineOpacityHover}-hover`]:\n props.underlineOpacityHover !== undefined,\n 'icon-link': props.icon === true,\n }\n })\n","<template>\n <component\n :is=\"tag\"\n v-if=\"tag === 'router-link'\"\n v-slot=\"//@ts-ignore \n {href: localHref, navigate, isActive, isExactActive}\"\n v-bind=\"routerAttr\"\n custom\n >\n <component\n :is=\"props.routerTag\"\n :href=\"localHref\"\n :target=\"props.target\"\n :class=\"{\n [defaultActiveClass]: props.active,\n [props.activeClass]: isActive,\n [props.exactActiveClass]: isExactActive,\n }\"\n v-bind=\"$attrs\"\n @click=\";[navigate($event), clicked($event)]\"\n >\n <slot />\n </component>\n </component>\n <component :is=\"tag\" v-else :class=\"computedLinkClasses\" v-bind=\"routerAttr\" @click=\"clicked\">\n <slot />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../../composables'\nimport {useLinkClasses} from '../../composables/useLinkClasses'\nimport type {BLinkProps} from '../../types'\nimport {collapseInjectionKey, navbarInjectionKey} from '../../utils'\nimport {computed, getCurrentInstance, inject, useAttrs} from 'vue'\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst _props = withDefaults(defineProps<BLinkProps>(), {\n active: undefined,\n activeClass: 'router-link-active',\n disabled: false,\n exactActiveClass: 'router-link-exact-active',\n href: undefined,\n icon: false,\n opacity: undefined,\n opacityHover: undefined,\n // noPrefetch: {type: Boolean, default: false},\n // prefetch: {type: Boolean, default: null},\n rel: undefined,\n replace: false,\n routerComponentName: 'router-link',\n routerTag: 'a',\n stretched: false,\n target: undefined,\n to: undefined,\n underlineOffset: undefined,\n underlineOffsetHover: undefined,\n underlineOpacity: undefined,\n underlineOpacityHover: undefined,\n underlineVariant: null,\n variant: null,\n})\nconst props = useDefaults(_props, 'BLink')\n\nconst emit = defineEmits<{\n click: [value: MouseEvent]\n}>()\n\nconst attrs = useAttrs()\n\nconst collapseData = inject(collapseInjectionKey, null)\nconst navbarData = inject(navbarInjectionKey, null)\n\nconst instance = getCurrentInstance()\n\nconst defaultActiveClass = 'active'\n\nconst tag = computed(() => {\n const routerName = props.routerComponentName\n .split('-')\n .map((e) => e.charAt(0).toUpperCase() + e.slice(1))\n .join('')\n const hasRouter = instance?.appContext.app.component(routerName) !== undefined\n if (!hasRouter || props.disabled || !props.to) {\n return 'a'\n }\n return props.routerComponentName\n})\n\nconst computedHref = computed(() => {\n const toFallback = '#'\n if (props.href) return props.href\n\n if (typeof props.to === 'string') return props.to || toFallback\n\n const {to} = props\n\n if (to !== undefined && 'path' in to) {\n const path = to.path || ''\n const query = to.query\n ? `?${Object.keys(to.query)\n .map((e) => `${e}=${to.query?.[e]}`)\n .join('=')}`\n : ''\n const hash = !to.hash || to.hash.charAt(0) === '#' ? to.hash || '' : `#${to.hash}`\n return `${path}${query}${hash}` || toFallback\n }\n // There is no resolver for `RouteLocationNamedRaw`. Which, I'm not sure there can be one in this context.\n\n return toFallback\n})\n\n/**\n * Not to be confused with computedLinkClasses\n */\nconst linkValueClasses = useLinkClasses(props)\nconst computedClasses = computed(() => [\n linkValueClasses.value,\n {\n 'stretched-link': props.stretched === true,\n },\n])\n\nconst routerAttr = computed(() => ({\n 'class': computedClasses.value,\n 'to': props.to,\n 'replace': props.replace,\n 'href': computedHref.value,\n 'target': props.target,\n 'rel': props.target === '_blank' ? props.rel ?? 'noopener' : undefined,\n 'tabindex': props.disabled ? '-1' : typeof attrs.tabindex === 'undefined' ? null : attrs.tabindex,\n 'aria-disabled': props.disabled ? true : null,\n}))\n\nconst computedLinkClasses = computed(() => ({\n [defaultActiveClass]: props.active,\n disabled: props.disabled,\n}))\n\nconst clicked = (e: Readonly<MouseEvent>): void => {\n if (props.disabled) {\n e.preventDefault()\n e.stopImmediatePropagation()\n return\n }\n\n if (\n (collapseData?.isNav?.value === true && navbarData === null) ||\n (navbarData !== null && navbarData.autoClose?.value === true)\n ) {\n collapseData?.hide?.()\n }\n\n emit('click', e)\n}\n</script>\n","<template>\n <div\n class=\"progress-bar\"\n :class=\"computedClasses\"\n role=\"progressbar\"\n :aria-valuenow=\"props.value\"\n aria-valuemin=\"0\"\n :aria-valuemax=\"props.max\"\n :style=\"{width: computedWidth}\"\n >\n <slot>\n {{ computedLabel }}\n </slot>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BProgressBarProps} from '../../types'\nimport {useColorVariantClasses, useDefaults} from '../../composables'\nimport {computed, inject} from 'vue'\nimport {progressInjectionKey} from '../../utils'\nimport {useToNumber} from '@vueuse/core'\n\nconst _props = withDefaults(defineProps<BProgressBarProps>(), {\n animated: false,\n bgVariant: null,\n label: undefined,\n labelHtml: undefined,\n max: undefined,\n precision: 0,\n showProgress: false,\n showValue: false,\n striped: false,\n textVariant: null,\n value: 0,\n variant: null,\n})\nconst props = useDefaults(_props, 'BProgressBar')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst parentData = inject(progressInjectionKey, null)\n\nconst resolvedBackgroundClasses = useColorVariantClasses(props)\n\nconst computedClasses = computed(() => [\n resolvedBackgroundClasses.value,\n {\n 'progress-bar-animated': props.animated || parentData?.animated.value,\n 'progress-bar-striped':\n props.striped || parentData?.striped.value || props.animated || parentData?.animated.value,\n },\n])\n\nconst numberPrecision = useToNumber(() => props.precision)\nconst numberValue = useToNumber(() => props.value)\nconst numberMax = useToNumber(() => props.max ?? NaN)\nconst parentMaxNumber = useToNumber(() => parentData?.max.value ?? NaN)\n\nconst computedLabel = computed(() =>\n props.labelHtml !== undefined\n ? props.labelHtml\n : props.showValue || parentData?.showValue.value\n ? numberValue.value.toFixed(numberPrecision.value)\n : props.showProgress || parentData?.showProgress.value\n ? ((numberValue.value * 100) / (numberMax.value || 100)).toFixed(numberPrecision.value)\n : props.label !== undefined\n ? props.label\n : ''\n)\n\nconst computedWidth = computed(() =>\n parentMaxNumber.value\n ? `${(numberValue.value * 100) / parentMaxNumber.value}%`\n : numberMax.value\n ? `${(numberValue.value * 100) / numberMax.value}%`\n : typeof props.value === 'string'\n ? props.value\n : `${props.value}%`\n)\n</script>\n","<template>\n <div class=\"progress\" :style=\"{height: props.height}\">\n <slot>\n <BProgressBar\n :animated=\"props.animated\"\n :max=\"props.max\"\n :precision=\"props.precision\"\n :show-progress=\"props.showProgress\"\n :show-value=\"props.showValue\"\n :striped=\"props.striped\"\n :value=\"props.value\"\n :variant=\"props.variant\"\n :text-variant=\"props.textVariant\"\n :bg-variant=\"props.bgVariant\"\n />\n </slot>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport BProgressBar from './BProgressBar.vue'\nimport type {BProgressProps} from '../../types'\nimport {provide, toRef} from 'vue'\nimport {progressInjectionKey} from '../../utils'\nimport {useDefaults} from '../../composables'\n\nconst _props = withDefaults(defineProps<BProgressProps>(), {\n height: undefined,\n // BProgressBar props\n animated: undefined,\n bgVariant: undefined,\n max: 100,\n precision: undefined,\n showProgress: undefined,\n showValue: undefined,\n striped: undefined,\n textVariant: undefined,\n value: undefined,\n variant: undefined,\n // End BProgressBar props\n})\nconst props = useDefaults(_props, 'BProgress')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nprovide(progressInjectionKey, {\n animated: toRef(() => props.animated),\n max: toRef(() => props.max),\n showProgress: toRef(() => props.showProgress),\n showValue: toRef(() => props.showValue),\n striped: toRef(() => props.striped),\n})\n</script>\n","<template>\n <BTransition\n :no-fade=\"props.noFade\"\n v-bind=\"props.transProps\"\n @before-enter=\"onBeforeEnter\"\n @after-enter=\"onAfterEnter\"\n @after-leave=\"onAfterLeave\"\n >\n <div\n v-if=\"isToastVisible\"\n :id=\"props.id\"\n ref=\"element\"\n class=\"toast\"\n :class=\"[props.toastClass, computedClasses]\"\n tabindex=\"0\"\n :role=\"!isToastVisible ? undefined : props.isStatus ? 'status' : 'alert'\"\n :aria-live=\"!isToastVisible ? undefined : props.isStatus ? 'polite' : 'assertive'\"\n :aria-atomic=\"!isToastVisible ? undefined : true\"\n >\n <component\n :is=\"props.headerTag\"\n v-if=\"$slots.title || props.title\"\n class=\"toast-header\"\n :class=\"props.headerClass\"\n >\n <slot name=\"title\" :hide=\"hideFn\">\n <strong class=\"me-auto\">\n {{ props.title }}\n </strong>\n </slot>\n <BCloseButton v-if=\"!props.noCloseButton\" @click=\"hideFn('close')\" />\n </component>\n <template v-if=\"$slots.default || props.body\">\n <component\n :is=\"computedTag\"\n class=\"toast-body\"\n style=\"display: block\"\n :class=\"props.bodyClass\"\n v-bind=\"computedLinkProps\"\n @click=\"computedLink ? hideFn() : () => {}\"\n >\n <slot :hide=\"hideFn\">\n {{ props.body }}\n </slot>\n </component>\n </template>\n <BProgress\n v-if=\"typeof modelValue === 'number' && props.progressProps !== undefined\"\n :animated=\"props.progressProps.animated\"\n :precision=\"props.progressProps.precision\"\n :show-progress=\"props.progressProps.showProgress\"\n :show-value=\"props.progressProps.showValue\"\n :striped=\"props.progressProps.striped\"\n :variant=\"props.progressProps.variant\"\n :max=\"modelValue\"\n :value=\"remainingMs\"\n height=\"4px\"\n />\n </div>\n </BTransition>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, onBeforeUnmount, ref, toRef, watch, watchEffect} from 'vue'\nimport {useBLinkHelper, useColorVariantClasses, useCountdown, useDefaults} from '../../composables'\nimport type {BToastProps} from '../../types'\nimport BTransition from '../BTransition/BTransition.vue'\nimport BCloseButton from '../BButton/BCloseButton.vue'\nimport BLink from '../BLink/BLink.vue'\nimport {useElementHover, useToNumber} from '@vueuse/core'\nimport BProgress from '../BProgress/BProgress.vue'\nimport {BvTriggerableEvent} from '../../utils'\n\nconst _props = withDefaults(defineProps<BToastProps>(), {\n bgVariant: null,\n body: undefined,\n bodyClass: undefined,\n headerClass: undefined,\n headerTag: 'div',\n id: undefined,\n interval: 1000,\n isStatus: false,\n noCloseButton: false,\n noFade: false,\n noHoverPause: false,\n progressProps: undefined,\n showOnPause: true,\n solid: false,\n textVariant: null,\n title: undefined,\n toastClass: undefined,\n transProps: undefined,\n // Link props\n // All others use defaults\n active: undefined,\n activeClass: undefined,\n disabled: undefined,\n exactActiveClass: undefined,\n href: undefined,\n icon: undefined,\n opacity: undefined,\n opacityHover: undefined,\n stretched: false,\n rel: undefined,\n replace: undefined,\n routerComponentName: undefined,\n target: undefined,\n to: undefined,\n underlineOffset: undefined,\n underlineOffsetHover: undefined,\n underlineOpacity: undefined,\n underlineOpacityHover: undefined,\n underlineVariant: undefined,\n variant: undefined,\n // End link props\n})\nconst props = useDefaults(_props, 'BToast')\n\nconst emit = defineEmits<{\n 'close': [value: BvTriggerableEvent]\n 'close-countdown': [value: number]\n 'hide': [value: BvTriggerableEvent]\n 'hidden': [value: BvTriggerableEvent]\n 'show': [value: BvTriggerableEvent]\n 'shown': [value: BvTriggerableEvent]\n 'show-prevented': []\n 'hide-prevented': []\n}>()\n\nconst element = ref<HTMLElement | null>(null)\n\nconst isHovering = useElementHover(element)\n// Note: passive: true will sync an internal ref... This is required for useToast to exit,\n// Since the modelValue that's passed from that composable is not reactive, this internal ref _is_ and thus it will trigger closing the toast\nconst modelValue = defineModel<boolean | number>({default: false})\n\nconst {computedLink, computedLinkProps} = useBLinkHelper(props)\n\nconst intervalNumber = useToNumber(() => props.interval)\n// TODO solid is never used\nconst resolvedBackgroundClasses = useColorVariantClasses(props)\nconst countdownLength = toRef(() => (typeof modelValue.value === 'boolean' ? 0 : modelValue.value))\n\nconst {\n isActive,\n pause,\n restart,\n resume,\n stop,\n isPaused,\n value: remainingMs,\n} = useCountdown(countdownLength, intervalNumber, {\n immediate: typeof modelValue.value === 'number',\n})\n\nwatchEffect(() => {\n emit('close-countdown', remainingMs.value)\n})\n\nconst computedTag = toRef(() => (computedLink.value ? BLink : 'div'))\n\nconst isToastVisible = toRef(() =>\n typeof modelValue.value === 'boolean'\n ? modelValue.value\n : isActive.value || (props.showOnPause && isPaused.value)\n)\n\nconst computedClasses = computed(() => [\n resolvedBackgroundClasses.value,\n {\n show: isToastVisible.value,\n },\n])\n\nconst onMouseEnter = () => {\n if (props.noHoverPause) return\n pause()\n}\n\nwatch(isHovering, (newValue) => {\n if (newValue) {\n onMouseEnter()\n return\n }\n resume()\n})\n\nconst buildTriggerableEvent = (\n type: string,\n opts: Readonly<Partial<BvTriggerableEvent>> = {}\n): BvTriggerableEvent =>\n new BvTriggerableEvent(type, {\n cancelable: false,\n target: element.value || null,\n relatedTarget: null,\n trigger: null,\n ...opts,\n componentId: props.id,\n })\n\nconst showFn = () => {\n const event = buildTriggerableEvent('show', {cancelable: true})\n emit('show', event)\n if (event.defaultPrevented) {\n if (modelValue.value) modelValue.value = false\n emit('show-prevented')\n return\n }\n if (!modelValue.value) modelValue.value = true\n}\nconst hideFn = (trigger = '') => {\n const event = buildTriggerableEvent('hide', {cancelable: trigger !== '', trigger})\n\n emit('hide', event)\n\n if (trigger === 'close') {\n emit('close', event)\n }\n\n if (event.defaultPrevented) {\n emit('hide-prevented')\n if (!modelValue.value) modelValue.value = true\n return\n }\n\n if (typeof modelValue.value === 'boolean') {\n modelValue.value = false\n } else {\n modelValue.value = 0\n stop()\n }\n}\n\nconst onBeforeEnter = () => {\n showFn()\n}\nconst onAfterEnter = () => {\n emit('shown', buildTriggerableEvent('shown'))\n}\nconst onAfterLeave = () => {\n emit('hidden', buildTriggerableEvent('hidden'))\n}\n\n// isActive in the composable will cause the toast to hide when the countdown is done\nwatch(isActive, (newValue) => {\n if (newValue === false && isPaused.value === false && !!modelValue.value) {\n hideFn()\n }\n})\n\nonBeforeUnmount(stop)\n\ndefineExpose({\n pause,\n restart,\n resume,\n stop,\n})\n</script>\n","import {\n type Component,\n computed,\n type MaybeRefOrGetter,\n type Plugin,\n ref,\n toValue,\n type WritableComputedRef,\n} from 'vue'\nimport BToast from '../components/BToast/BToast.vue'\nimport type {ContainerPosition, OrchestratedToast} from '../types'\nimport {toastPluginKey} from '../utils'\n\nconst posDefault: ContainerPosition = 'top-end'\n\nexport default {\n install(app) {\n const toasts = ref<\n WritableComputedRef<{\n component: unknown\n props: Omit<OrchestratedToast, 'value'> & {\n _self: symbol\n _modelValue: OrchestratedToast['value'] // Convert it to be the same name as useModalController.\n // The difference between the two is that unlike that one, this value can be defined (there's cannot be).\n }\n }>[]\n >([])\n\n const _isAppend = ref(false)\n\n const _setIsAppend = (value: boolean) => {\n _isAppend.value = value\n }\n\n /**\n * @returns {symbol} A symbol that corresponds to its unique id. You can pass this id to the hide function to force a Toast to hide\n */\n const show = (\n obj: {\n component?: MaybeRefOrGetter<Readonly<Component>>\n props?: MaybeRefOrGetter<Readonly<OrchestratedToast>>\n } = {}\n ): symbol => {\n const _self = Symbol()\n\n const _modelValue = ref<boolean | number>(toValue(obj.props)?.value || 5000)\n\n const toastToAdd = computed({\n get: () => {\n const unwrappedProps = toValue(obj.props)\n return {\n component: toValue(obj.component) ?? BToast,\n props: {\n ...unwrappedProps,\n pos: unwrappedProps?.pos || posDefault,\n _modelValue: _modelValue.value,\n _self,\n },\n }\n },\n set: (v) => {\n _modelValue.value = v.props._modelValue\n },\n })\n\n if (\n toastToAdd.value.props.appendToast !== undefined\n ? toastToAdd.value.props.appendToast\n : _isAppend.value\n ) {\n toasts.value.push(toastToAdd)\n } else {\n toasts.value.unshift(toastToAdd)\n }\n\n return _self\n }\n\n /**\n * You can get the symbol param from the return value from the show method\n */\n const remove = (self: symbol) => {\n toasts.value = toasts.value.filter((el) => el.value.props._self !== self)\n }\n\n const leave = (self: symbol) => {\n const toast = toasts.value.find((el) => el.value.props._self === self)\n if (toast !== undefined) {\n toast.value = {\n ...toast.value,\n props: {\n ...toast.value.props,\n _modelValue: false,\n },\n }\n }\n }\n\n app.provide(toastPluginKey, {\n _setIsAppend,\n toasts,\n show,\n remove,\n leave,\n })\n },\n} satisfies Plugin\n","import {type Plugin, ref} from 'vue'\nimport type {BreadcrumbItemRaw} from '../types'\nimport {breadcrumbPluginKey} from '../utils'\n\nexport default {\n install(app) {\n const items = ref<BreadcrumbItemRaw[]>([])\n const reset = () => {\n items.value.splice(0, items.value.length)\n }\n\n app.provide(breadcrumbPluginKey, {items, reset})\n },\n} satisfies Plugin\n","import {type Plugin} from 'vue'\nimport type {BootstrapVueOptions} from '../types'\nimport {idPluginKey} from '../utils'\n\nexport default {\n install(app, options: BootstrapVueOptions) {\n if (!(options?.id instanceof Object && typeof options.id.getId === 'function')) return\n\n app.provide(idPluginKey, options.id.getId)\n },\n} satisfies Plugin\n","/*!\n* tabbable 6.2.0\n* @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE\n*/\n// NOTE: separate `:not()` selectors has broader browser support than the newer\n// `:not([inert], [inert] *)` (Feb 2023)\n// CAREFUL: JSDom does not support `:not([inert] *)` as a selector; using it causes\n// the entire query to fail, resulting in no nodes found, which will break a lot\n// of things... so we have to rely on JS to identify nodes inside an inert container\nvar candidateSelectors = ['input:not([inert])', 'select:not([inert])', 'textarea:not([inert])', 'a[href]:not([inert])', 'button:not([inert])', '[tabindex]:not(slot):not([inert])', 'audio[controls]:not([inert])', 'video[controls]:not([inert])', '[contenteditable]:not([contenteditable=\"false\"]):not([inert])', 'details>summary:first-of-type:not([inert])', 'details:not([inert])'];\nvar candidateSelector = /* #__PURE__ */candidateSelectors.join(',');\nvar NoElement = typeof Element === 'undefined';\nvar matches = NoElement ? function () {} : Element.prototype.matches || Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\nvar getRootNode = !NoElement && Element.prototype.getRootNode ? function (element) {\n var _element$getRootNode;\n return element === null || element === void 0 ? void 0 : (_element$getRootNode = element.getRootNode) === null || _element$getRootNode === void 0 ? void 0 : _element$getRootNode.call(element);\n} : function (element) {\n return element === null || element === void 0 ? void 0 : element.ownerDocument;\n};\n\n/**\n * Determines if a node is inert or in an inert ancestor.\n * @param {Element} [node]\n * @param {boolean} [lookUp] If true and `node` is not inert, looks up at ancestors to\n * see if any of them are inert. If false, only `node` itself is considered.\n * @returns {boolean} True if inert itself or by way of being in an inert ancestor.\n * False if `node` is falsy.\n */\nvar isInert = function isInert(node, lookUp) {\n var _node$getAttribute;\n if (lookUp === void 0) {\n lookUp = true;\n }\n // CAREFUL: JSDom does not support inert at all, so we can't use the `HTMLElement.inert`\n // JS API property; we have to check the attribute, which can either be empty or 'true';\n // if it's `null` (not specified) or 'false', it's an active element\n var inertAtt = node === null || node === void 0 ? void 0 : (_node$getAttribute = node.getAttribute) === null || _node$getAttribute === void 0 ? void 0 : _node$getAttribute.call(node, 'inert');\n var inert = inertAtt === '' || inertAtt === 'true';\n\n // NOTE: this could also be handled with `node.matches('[inert], :is([inert] *)')`\n // if it weren't for `matches()` not being a function on shadow roots; the following\n // code works for any kind of node\n // CAREFUL: JSDom does not appear to support certain selectors like `:not([inert] *)`\n // so it likely would not support `:is([inert] *)` either...\n var result = inert || lookUp && node && isInert(node.parentNode); // recursive\n\n return result;\n};\n\n/**\n * Determines if a node's content is editable.\n * @param {Element} [node]\n * @returns True if it's content-editable; false if it's not or `node` is falsy.\n */\nvar isContentEditable = function isContentEditable(node) {\n var _node$getAttribute2;\n // CAREFUL: JSDom does not support the `HTMLElement.isContentEditable` API so we have\n // to use the attribute directly to check for this, which can either be empty or 'true';\n // if it's `null` (not specified) or 'false', it's a non-editable element\n var attValue = node === null || node === void 0 ? void 0 : (_node$getAttribute2 = node.getAttribute) === null || _node$getAttribute2 === void 0 ? void 0 : _node$getAttribute2.call(node, 'contenteditable');\n return attValue === '' || attValue === 'true';\n};\n\n/**\n * @param {Element} el container to check in\n * @param {boolean} includeContainer add container to check\n * @param {(node: Element) => boolean} filter filter candidates\n * @returns {Element[]}\n */\nvar getCandidates = function getCandidates(el, includeContainer, filter) {\n // even if `includeContainer=false`, we still have to check it for inertness because\n // if it's inert, all its children are inert\n if (isInert(el)) {\n return [];\n }\n var candidates = Array.prototype.slice.apply(el.querySelectorAll(candidateSelector));\n if (includeContainer && matches.call(el, candidateSelector)) {\n candidates.unshift(el);\n }\n candidates = candidates.filter(filter);\n return candidates;\n};\n\n/**\n * @callback GetShadowRoot\n * @param {Element} element to check for shadow root\n * @returns {ShadowRoot|boolean} ShadowRoot if available or boolean indicating if a shadowRoot is attached but not available.\n */\n\n/**\n * @callback ShadowRootFilter\n * @param {Element} shadowHostNode the element which contains shadow content\n * @returns {boolean} true if a shadow root could potentially contain valid candidates.\n */\n\n/**\n * @typedef {Object} CandidateScope\n * @property {Element} scopeParent contains inner candidates\n * @property {Element[]} candidates list of candidates found in the scope parent\n */\n\n/**\n * @typedef {Object} IterativeOptions\n * @property {GetShadowRoot|boolean} getShadowRoot true if shadow support is enabled; falsy if not;\n * if a function, implies shadow support is enabled and either returns the shadow root of an element\n * or a boolean stating if it has an undisclosed shadow root\n * @property {(node: Element) => boolean} filter filter candidates\n * @property {boolean} flatten if true then result will flatten any CandidateScope into the returned list\n * @property {ShadowRootFilter} shadowRootFilter filter shadow roots;\n */\n\n/**\n * @param {Element[]} elements list of element containers to match candidates from\n * @param {boolean} includeContainer add container list to check\n * @param {IterativeOptions} options\n * @returns {Array.<Element|CandidateScope>}\n */\nvar getCandidatesIteratively = function getCandidatesIteratively(elements, includeContainer, options) {\n var candidates = [];\n var elementsToCheck = Array.from(elements);\n while (elementsToCheck.length) {\n var element = elementsToCheck.shift();\n if (isInert(element, false)) {\n // no need to look up since we're drilling down\n // anything inside this container will also be inert\n continue;\n }\n if (element.tagName === 'SLOT') {\n // add shadow dom slot scope (slot itself cannot be focusable)\n var assigned = element.assignedElements();\n var content = assigned.length ? assigned : element.children;\n var nestedCandidates = getCandidatesIteratively(content, true, options);\n if (options.flatten) {\n candidates.push.apply(candidates, nestedCandidates);\n } else {\n candidates.push({\n scopeParent: element,\n candidates: nestedCandidates\n });\n }\n } else {\n // check candidate element\n var validCandidate = matches.call(element, candidateSelector);\n if (validCandidate && options.filter(element) && (includeContainer || !elements.includes(element))) {\n candidates.push(element);\n }\n\n // iterate over shadow content if possible\n var shadowRoot = element.shadowRoot ||\n // check for an undisclosed shadow\n typeof options.getShadowRoot === 'function' && options.getShadowRoot(element);\n\n // no inert look up because we're already drilling down and checking for inertness\n // on the way down, so all containers to this root node should have already been\n // vetted as non-inert\n var validShadowRoot = !isInert(shadowRoot, false) && (!options.shadowRootFilter || options.shadowRootFilter(element));\n if (shadowRoot && validShadowRoot) {\n // add shadow dom scope IIF a shadow root node was given; otherwise, an undisclosed\n // shadow exists, so look at light dom children as fallback BUT create a scope for any\n // child candidates found because they're likely slotted elements (elements that are\n // children of the web component element (which has the shadow), in the light dom, but\n // slotted somewhere _inside_ the undisclosed shadow) -- the scope is created below,\n // _after_ we return from this recursive call\n var _nestedCandidates = getCandidatesIteratively(shadowRoot === true ? element.children : shadowRoot.children, true, options);\n if (options.flatten) {\n candidates.push.apply(candidates, _nestedCandidates);\n } else {\n candidates.push({\n scopeParent: element,\n candidates: _nestedCandidates\n });\n }\n } else {\n // there's not shadow so just dig into the element's (light dom) children\n // __without__ giving the element special scope treatment\n elementsToCheck.unshift.apply(elementsToCheck, element.children);\n }\n }\n }\n return candidates;\n};\n\n/**\n * @private\n * Determines if the node has an explicitly specified `tabindex` attribute.\n * @param {HTMLElement} node\n * @returns {boolean} True if so; false if not.\n */\nvar hasTabIndex = function hasTabIndex(node) {\n return !isNaN(parseInt(node.getAttribute('tabindex'), 10));\n};\n\n/**\n * Determine the tab index of a given node.\n * @param {HTMLElement} node\n * @returns {number} Tab order (negative, 0, or positive number).\n * @throws {Error} If `node` is falsy.\n */\nvar getTabIndex = function getTabIndex(node) {\n if (!node) {\n throw new Error('No node provided');\n }\n if (node.tabIndex < 0) {\n // in Chrome, <details/>, <audio controls/> and <video controls/> elements get a default\n // `tabIndex` of -1 when the 'tabindex' attribute isn't specified in the DOM,\n // yet they are still part of the regular tab order; in FF, they get a default\n // `tabIndex` of 0; since Chrome still puts those elements in the regular tab\n // order, consider their tab index to be 0.\n // Also browsers do not return `tabIndex` correctly for contentEditable nodes;\n // so if they don't have a tabindex attribute specifically set, assume it's 0.\n if ((/^(AUDIO|VIDEO|DETAILS)$/.test(node.tagName) || isContentEditable(node)) && !hasTabIndex(node)) {\n return 0;\n }\n }\n return node.tabIndex;\n};\n\n/**\n * Determine the tab index of a given node __for sort order purposes__.\n * @param {HTMLElement} node\n * @param {boolean} [isScope] True for a custom element with shadow root or slot that, by default,\n * has tabIndex -1, but needs to be sorted by document order in order for its content to be\n * inserted into the correct sort position.\n * @returns {number} Tab order (negative, 0, or positive number).\n */\nvar getSortOrderTabIndex = function getSortOrderTabIndex(node, isScope) {\n var tabIndex = getTabIndex(node);\n if (tabIndex < 0 && isScope && !hasTabIndex(node)) {\n return 0;\n }\n return tabIndex;\n};\nvar sortOrderedTabbables = function sortOrderedTabbables(a, b) {\n return a.tabIndex === b.tabIndex ? a.documentOrder - b.documentOrder : a.tabIndex - b.tabIndex;\n};\nvar isInput = function isInput(node) {\n return node.tagName === 'INPUT';\n};\nvar isHiddenInput = function isHiddenInput(node) {\n return isInput(node) && node.type === 'hidden';\n};\nvar isDetailsWithSummary = function isDetailsWithSummary(node) {\n var r = node.tagName === 'DETAILS' && Array.prototype.slice.apply(node.children).some(function (child) {\n return child.tagName === 'SUMMARY';\n });\n return r;\n};\nvar getCheckedRadio = function getCheckedRadio(nodes, form) {\n for (var i = 0; i < nodes.length; i++) {\n if (nodes[i].checked && nodes[i].form === form) {\n return nodes[i];\n }\n }\n};\nvar isTabbableRadio = function isTabbableRadio(node) {\n if (!node.name) {\n return true;\n }\n var radioScope = node.form || getRootNode(node);\n var queryRadios = function queryRadios(name) {\n return radioScope.querySelectorAll('input[type=\"radio\"][name=\"' + name + '\"]');\n };\n var radioSet;\n if (typeof window !== 'undefined' && typeof window.CSS !== 'undefined' && typeof window.CSS.escape === 'function') {\n radioSet = queryRadios(window.CSS.escape(node.name));\n } else {\n try {\n radioSet = queryRadios(node.name);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error('Looks like you have a radio button with a name attribute containing invalid CSS selector characters and need the CSS.escape polyfill: %s', err.message);\n return false;\n }\n }\n var checked = getCheckedRadio(radioSet, node.form);\n return !checked || checked === node;\n};\nvar isRadio = function isRadio(node) {\n return isInput(node) && node.type === 'radio';\n};\nvar isNonTabbableRadio = function isNonTabbableRadio(node) {\n return isRadio(node) && !isTabbableRadio(node);\n};\n\n// determines if a node is ultimately attached to the window's document\nvar isNodeAttached = function isNodeAttached(node) {\n var _nodeRoot;\n // The root node is the shadow root if the node is in a shadow DOM; some document otherwise\n // (but NOT _the_ document; see second 'If' comment below for more).\n // If rootNode is shadow root, it'll have a host, which is the element to which the shadow\n // is attached, and the one we need to check if it's in the document or not (because the\n // shadow, and all nodes it contains, is never considered in the document since shadows\n // behave like self-contained DOMs; but if the shadow's HOST, which is part of the document,\n // is hidden, or is not in the document itself but is detached, it will affect the shadow's\n // visibility, including all the nodes it contains). The host could be any normal node,\n // or a custom element (i.e. web component). Either way, that's the one that is considered\n // part of the document, not the shadow root, nor any of its children (i.e. the node being\n // tested).\n // To further complicate things, we have to look all the way up until we find a shadow HOST\n // that is attached (or find none) because the node might be in nested shadows...\n // If rootNode is not a shadow root, it won't have a host, and so rootNode should be the\n // document (per the docs) and while it's a Document-type object, that document does not\n // appear to be the same as the node's `ownerDocument` for some reason, so it's safer\n // to ignore the rootNode at this point, and use `node.ownerDocument`. Otherwise,\n // using `rootNode.contains(node)` will _always_ be true we'll get false-positives when\n // node is actually detached.\n // NOTE: If `nodeRootHost` or `node` happens to be the `document` itself (which is possible\n // if a tabbable/focusable node was quickly added to the DOM, focused, and then removed\n // from the DOM as in https://github.com/focus-trap/focus-trap-react/issues/905), then\n // `ownerDocument` will be `null`, hence the optional chaining on it.\n var nodeRoot = node && getRootNode(node);\n var nodeRootHost = (_nodeRoot = nodeRoot) === null || _nodeRoot === void 0 ? void 0 : _nodeRoot.host;\n\n // in some cases, a detached node will return itself as the root instead of a document or\n // shadow root object, in which case, we shouldn't try to look further up the host chain\n var attached = false;\n if (nodeRoot && nodeRoot !== node) {\n var _nodeRootHost, _nodeRootHost$ownerDo, _node$ownerDocument;\n attached = !!((_nodeRootHost = nodeRootHost) !== null && _nodeRootHost !== void 0 && (_nodeRootHost$ownerDo = _nodeRootHost.ownerDocument) !== null && _nodeRootHost$ownerDo !== void 0 && _nodeRootHost$ownerDo.contains(nodeRootHost) || node !== null && node !== void 0 && (_node$ownerDocument = node.ownerDocument) !== null && _node$ownerDocument !== void 0 && _node$ownerDocument.contains(node));\n while (!attached && nodeRootHost) {\n var _nodeRoot2, _nodeRootHost2, _nodeRootHost2$ownerD;\n // since it's not attached and we have a root host, the node MUST be in a nested shadow DOM,\n // which means we need to get the host's host and check if that parent host is contained\n // in (i.e. attached to) the document\n nodeRoot = getRootNode(nodeRootHost);\n nodeRootHost = (_nodeRoot2 = nodeRoot) === null || _nodeRoot2 === void 0 ? void 0 : _nodeRoot2.host;\n attached = !!((_nodeRootHost2 = nodeRootHost) !== null && _nodeRootHost2 !== void 0 && (_nodeRootHost2$ownerD = _nodeRootHost2.ownerDocument) !== null && _nodeRootHost2$ownerD !== void 0 && _nodeRootHost2$ownerD.contains(nodeRootHost));\n }\n }\n return attached;\n};\nvar isZeroArea = function isZeroArea(node) {\n var _node$getBoundingClie = node.getBoundingClientRect(),\n width = _node$getBoundingClie.width,\n height = _node$getBoundingClie.height;\n return width === 0 && height === 0;\n};\nvar isHidden = function isHidden(node, _ref) {\n var displayCheck = _ref.displayCheck,\n getShadowRoot = _ref.getShadowRoot;\n // NOTE: visibility will be `undefined` if node is detached from the document\n // (see notes about this further down), which means we will consider it visible\n // (this is legacy behavior from a very long way back)\n // NOTE: we check this regardless of `displayCheck=\"none\"` because this is a\n // _visibility_ check, not a _display_ check\n if (getComputedStyle(node).visibility === 'hidden') {\n return true;\n }\n var isDirectSummary = matches.call(node, 'details>summary:first-of-type');\n var nodeUnderDetails = isDirectSummary ? node.parentElement : node;\n if (matches.call(nodeUnderDetails, 'details:not([open]) *')) {\n return true;\n }\n if (!displayCheck || displayCheck === 'full' || displayCheck === 'legacy-full') {\n if (typeof getShadowRoot === 'function') {\n // figure out if we should consider the node to be in an undisclosed shadow and use the\n // 'non-zero-area' fallback\n var originalNode = node;\n while (node) {\n var parentElement = node.parentElement;\n var rootNode = getRootNode(node);\n if (parentElement && !parentElement.shadowRoot && getShadowRoot(parentElement) === true // check if there's an undisclosed shadow\n ) {\n // node has an undisclosed shadow which means we can only treat it as a black box, so we\n // fall back to a non-zero-area test\n return isZeroArea(node);\n } else if (node.assignedSlot) {\n // iterate up slot\n node = node.assignedSlot;\n } else if (!parentElement && rootNode !== node.ownerDocument) {\n // cross shadow boundary\n node = rootNode.host;\n } else {\n // iterate up normal dom\n node = parentElement;\n }\n }\n node = originalNode;\n }\n // else, `getShadowRoot` might be true, but all that does is enable shadow DOM support\n // (i.e. it does not also presume that all nodes might have undisclosed shadows); or\n // it might be a falsy value, which means shadow DOM support is disabled\n\n // Since we didn't find it sitting in an undisclosed shadow (or shadows are disabled)\n // now we can just test to see if it would normally be visible or not, provided it's\n // attached to the main document.\n // NOTE: We must consider case where node is inside a shadow DOM and given directly to\n // `isTabbable()` or `isFocusable()` -- regardless of `getShadowRoot` option setting.\n\n if (isNodeAttached(node)) {\n // this works wherever the node is: if there's at least one client rect, it's\n // somehow displayed; it also covers the CSS 'display: contents' case where the\n // node itself is hidden in place of its contents; and there's no need to search\n // up the hierarchy either\n return !node.getClientRects().length;\n }\n\n // Else, the node isn't attached to the document, which means the `getClientRects()`\n // API will __always__ return zero rects (this can happen, for example, if React\n // is used to render nodes onto a detached tree, as confirmed in this thread:\n // https://github.com/facebook/react/issues/9117#issuecomment-284228870)\n //\n // It also means that even window.getComputedStyle(node).display will return `undefined`\n // because styles are only computed for nodes that are in the document.\n //\n // NOTE: THIS HAS BEEN THE CASE FOR YEARS. It is not new, nor is it caused by tabbable\n // somehow. Though it was never stated officially, anyone who has ever used tabbable\n // APIs on nodes in detached containers has actually implicitly used tabbable in what\n // was later (as of v5.2.0 on Apr 9, 2021) called `displayCheck=\"none\"` mode -- essentially\n // considering __everything__ to be visible because of the innability to determine styles.\n //\n // v6.0.0: As of this major release, the default 'full' option __no longer treats detached\n // nodes as visible with the 'none' fallback.__\n if (displayCheck !== 'legacy-full') {\n return true; // hidden\n }\n // else, fallback to 'none' mode and consider the node visible\n } else if (displayCheck === 'non-zero-area') {\n // NOTE: Even though this tests that the node's client rect is non-zero to determine\n // whether it's displayed, and that a detached node will __always__ have a zero-area\n // client rect, we don't special-case for whether the node is attached or not. In\n // this mode, we do want to consider nodes that have a zero area to be hidden at all\n // times, and that includes attached or not.\n return isZeroArea(node);\n }\n\n // visible, as far as we can tell, or per current `displayCheck=none` mode, we assume\n // it's visible\n return false;\n};\n\n// form fields (nested) inside a disabled fieldset are not focusable/tabbable\n// unless they are in the _first_ <legend> element of the top-most disabled\n// fieldset\nvar isDisabledFromFieldset = function isDisabledFromFieldset(node) {\n if (/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(node.tagName)) {\n var parentNode = node.parentElement;\n // check if `node` is contained in a disabled <fieldset>\n while (parentNode) {\n if (parentNode.tagName === 'FIELDSET' && parentNode.disabled) {\n // look for the first <legend> among the children of the disabled <fieldset>\n for (var i = 0; i < parentNode.children.length; i++) {\n var child = parentNode.children.item(i);\n // when the first <legend> (in document order) is found\n if (child.tagName === 'LEGEND') {\n // if its parent <fieldset> is not nested in another disabled <fieldset>,\n // return whether `node` is a descendant of its first <legend>\n return matches.call(parentNode, 'fieldset[disabled] *') ? true : !child.contains(node);\n }\n }\n // the disabled <fieldset> containing `node` has no <legend>\n return true;\n }\n parentNode = parentNode.parentElement;\n }\n }\n\n // else, node's tabbable/focusable state should not be affected by a fieldset's\n // enabled/disabled state\n return false;\n};\nvar isNodeMatchingSelectorFocusable = function isNodeMatchingSelectorFocusable(options, node) {\n if (node.disabled ||\n // we must do an inert look up to filter out any elements inside an inert ancestor\n // because we're limited in the type of selectors we can use in JSDom (see related\n // note related to `candidateSelectors`)\n isInert(node) || isHiddenInput(node) || isHidden(node, options) ||\n // For a details element with a summary, the summary element gets the focus\n isDetailsWithSummary(node) || isDisabledFromFieldset(node)) {\n return false;\n }\n return true;\n};\nvar isNodeMatchingSelectorTabbable = function isNodeMatchingSelectorTabbable(options, node) {\n if (isNonTabbableRadio(node) || getTabIndex(node) < 0 || !isNodeMatchingSelectorFocusable(options, node)) {\n return false;\n }\n return true;\n};\nvar isValidShadowRootTabbable = function isValidShadowRootTabbable(shadowHostNode) {\n var tabIndex = parseInt(shadowHostNode.getAttribute('tabindex'), 10);\n if (isNaN(tabIndex) || tabIndex >= 0) {\n return true;\n }\n // If a custom element has an explicit negative tabindex,\n // browsers will not allow tab targeting said element's children.\n return false;\n};\n\n/**\n * @param {Array.<Element|CandidateScope>} candidates\n * @returns Element[]\n */\nvar sortByOrder = function sortByOrder(candidates) {\n var regularTabbables = [];\n var orderedTabbables = [];\n candidates.forEach(function (item, i) {\n var isScope = !!item.scopeParent;\n var element = isScope ? item.scopeParent : item;\n var candidateTabindex = getSortOrderTabIndex(element, isScope);\n var elements = isScope ? sortByOrder(item.candidates) : element;\n if (candidateTabindex === 0) {\n isScope ? regularTabbables.push.apply(regularTabbables, elements) : regularTabbables.push(element);\n } else {\n orderedTabbables.push({\n documentOrder: i,\n tabIndex: candidateTabindex,\n item: item,\n isScope: isScope,\n content: elements\n });\n }\n });\n return orderedTabbables.sort(sortOrderedTabbables).reduce(function (acc, sortable) {\n sortable.isScope ? acc.push.apply(acc, sortable.content) : acc.push(sortable.content);\n return acc;\n }, []).concat(regularTabbables);\n};\nvar tabbable = function tabbable(container, options) {\n options = options || {};\n var candidates;\n if (options.getShadowRoot) {\n candidates = getCandidatesIteratively([container], options.includeContainer, {\n filter: isNodeMatchingSelectorTabbable.bind(null, options),\n flatten: false,\n getShadowRoot: options.getShadowRoot,\n shadowRootFilter: isValidShadowRootTabbable\n });\n } else {\n candidates = getCandidates(container, options.includeContainer, isNodeMatchingSelectorTabbable.bind(null, options));\n }\n return sortByOrder(candidates);\n};\nvar focusable = function focusable(container, options) {\n options = options || {};\n var candidates;\n if (options.getShadowRoot) {\n candidates = getCandidatesIteratively([container], options.includeContainer, {\n filter: isNodeMatchingSelectorFocusable.bind(null, options),\n flatten: true,\n getShadowRoot: options.getShadowRoot\n });\n } else {\n candidates = getCandidates(container, options.includeContainer, isNodeMatchingSelectorFocusable.bind(null, options));\n }\n return candidates;\n};\nvar isTabbable = function isTabbable(node, options) {\n options = options || {};\n if (!node) {\n throw new Error('No node provided');\n }\n if (matches.call(node, candidateSelector) === false) {\n return false;\n }\n return isNodeMatchingSelectorTabbable(options, node);\n};\nvar focusableCandidateSelector = /* #__PURE__ */candidateSelectors.concat('iframe').join(',');\nvar isFocusable = function isFocusable(node, options) {\n options = options || {};\n if (!node) {\n throw new Error('No node provided');\n }\n if (matches.call(node, focusableCandidateSelector) === false) {\n return false;\n }\n return isNodeMatchingSelectorFocusable(options, node);\n};\n\nexport { focusable, getTabIndex, isFocusable, isTabbable, tabbable };\n//# sourceMappingURL=index.esm.js.map\n","/*!\n* focus-trap 7.5.4\n* @license MIT, https://github.com/focus-trap/focus-trap/blob/master/LICENSE\n*/\nimport { isFocusable, tabbable, focusable, isTabbable, getTabIndex } from 'tabbable';\n\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nfunction _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n _defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}\nfunction _defineProperty(obj, key, value) {\n key = _toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _toPrimitive(input, hint) {\n if (typeof input !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (typeof res !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}\nfunction _toPropertyKey(arg) {\n var key = _toPrimitive(arg, \"string\");\n return typeof key === \"symbol\" ? key : String(key);\n}\n\nvar activeFocusTraps = {\n activateTrap: function activateTrap(trapStack, trap) {\n if (trapStack.length > 0) {\n var activeTrap = trapStack[trapStack.length - 1];\n if (activeTrap !== trap) {\n activeTrap.pause();\n }\n }\n var trapIndex = trapStack.indexOf(trap);\n if (trapIndex === -1) {\n trapStack.push(trap);\n } else {\n // move this existing trap to the front of the queue\n trapStack.splice(trapIndex, 1);\n trapStack.push(trap);\n }\n },\n deactivateTrap: function deactivateTrap(trapStack, trap) {\n var trapIndex = trapStack.indexOf(trap);\n if (trapIndex !== -1) {\n trapStack.splice(trapIndex, 1);\n }\n if (trapStack.length > 0) {\n trapStack[trapStack.length - 1].unpause();\n }\n }\n};\nvar isSelectableInput = function isSelectableInput(node) {\n return node.tagName && node.tagName.toLowerCase() === 'input' && typeof node.select === 'function';\n};\nvar isEscapeEvent = function isEscapeEvent(e) {\n return (e === null || e === void 0 ? void 0 : e.key) === 'Escape' || (e === null || e === void 0 ? void 0 : e.key) === 'Esc' || (e === null || e === void 0 ? void 0 : e.keyCode) === 27;\n};\nvar isTabEvent = function isTabEvent(e) {\n return (e === null || e === void 0 ? void 0 : e.key) === 'Tab' || (e === null || e === void 0 ? void 0 : e.keyCode) === 9;\n};\n\n// checks for TAB by default\nvar isKeyForward = function isKeyForward(e) {\n return isTabEvent(e) && !e.shiftKey;\n};\n\n// checks for SHIFT+TAB by default\nvar isKeyBackward = function isKeyBackward(e) {\n return isTabEvent(e) && e.shiftKey;\n};\nvar delay = function delay(fn) {\n return setTimeout(fn, 0);\n};\n\n// Array.find/findIndex() are not supported on IE; this replicates enough\n// of Array.findIndex() for our needs\nvar findIndex = function findIndex(arr, fn) {\n var idx = -1;\n arr.every(function (value, i) {\n if (fn(value)) {\n idx = i;\n return false; // break\n }\n\n return true; // next\n });\n\n return idx;\n};\n\n/**\n * Get an option's value when it could be a plain value, or a handler that provides\n * the value.\n * @param {*} value Option's value to check.\n * @param {...*} [params] Any parameters to pass to the handler, if `value` is a function.\n * @returns {*} The `value`, or the handler's returned value.\n */\nvar valueOrHandler = function valueOrHandler(value) {\n for (var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n params[_key - 1] = arguments[_key];\n }\n return typeof value === 'function' ? value.apply(void 0, params) : value;\n};\nvar getActualTarget = function getActualTarget(event) {\n // NOTE: If the trap is _inside_ a shadow DOM, event.target will always be the\n // shadow host. However, event.target.composedPath() will be an array of\n // nodes \"clicked\" from inner-most (the actual element inside the shadow) to\n // outer-most (the host HTML document). If we have access to composedPath(),\n // then use its first element; otherwise, fall back to event.target (and\n // this only works for an _open_ shadow DOM; otherwise,\n // composedPath()[0] === event.target always).\n return event.target.shadowRoot && typeof event.composedPath === 'function' ? event.composedPath()[0] : event.target;\n};\n\n// NOTE: this must be _outside_ `createFocusTrap()` to make sure all traps in this\n// current instance use the same stack if `userOptions.trapStack` isn't specified\nvar internalTrapStack = [];\nvar createFocusTrap = function createFocusTrap(elements, userOptions) {\n // SSR: a live trap shouldn't be created in this type of environment so this\n // should be safe code to execute if the `document` option isn't specified\n var doc = (userOptions === null || userOptions === void 0 ? void 0 : userOptions.document) || document;\n var trapStack = (userOptions === null || userOptions === void 0 ? void 0 : userOptions.trapStack) || internalTrapStack;\n var config = _objectSpread2({\n returnFocusOnDeactivate: true,\n escapeDeactivates: true,\n delayInitialFocus: true,\n isKeyForward: isKeyForward,\n isKeyBackward: isKeyBackward\n }, userOptions);\n var state = {\n // containers given to createFocusTrap()\n // @type {Array<HTMLElement>}\n containers: [],\n // list of objects identifying tabbable nodes in `containers` in the trap\n // NOTE: it's possible that a group has no tabbable nodes if nodes get removed while the trap\n // is active, but the trap should never get to a state where there isn't at least one group\n // with at least one tabbable node in it (that would lead to an error condition that would\n // result in an error being thrown)\n // @type {Array<{\n // container: HTMLElement,\n // tabbableNodes: Array<HTMLElement>, // empty if none\n // focusableNodes: Array<HTMLElement>, // empty if none\n // posTabIndexesFound: boolean,\n // firstTabbableNode: HTMLElement|undefined,\n // lastTabbableNode: HTMLElement|undefined,\n // firstDomTabbableNode: HTMLElement|undefined,\n // lastDomTabbableNode: HTMLElement|undefined,\n // nextTabbableNode: (node: HTMLElement, forward: boolean) => HTMLElement|undefined\n // }>}\n containerGroups: [],\n // same order/length as `containers` list\n\n // references to objects in `containerGroups`, but only those that actually have\n // tabbable nodes in them\n // NOTE: same order as `containers` and `containerGroups`, but __not necessarily__\n // the same length\n tabbableGroups: [],\n nodeFocusedBeforeActivation: null,\n mostRecentlyFocusedNode: null,\n active: false,\n paused: false,\n // timer ID for when delayInitialFocus is true and initial focus in this trap\n // has been delayed during activation\n delayInitialFocusTimer: undefined,\n // the most recent KeyboardEvent for the configured nav key (typically [SHIFT+]TAB), if any\n recentNavEvent: undefined\n };\n var trap; // eslint-disable-line prefer-const -- some private functions reference it, and its methods reference private functions, so we must declare here and define later\n\n /**\n * Gets a configuration option value.\n * @param {Object|undefined} configOverrideOptions If true, and option is defined in this set,\n * value will be taken from this object. Otherwise, value will be taken from base configuration.\n * @param {string} optionName Name of the option whose value is sought.\n * @param {string|undefined} [configOptionName] Name of option to use __instead of__ `optionName`\n * IIF `configOverrideOptions` is not defined. Otherwise, `optionName` is used.\n */\n var getOption = function getOption(configOverrideOptions, optionName, configOptionName) {\n return configOverrideOptions && configOverrideOptions[optionName] !== undefined ? configOverrideOptions[optionName] : config[configOptionName || optionName];\n };\n\n /**\n * Finds the index of the container that contains the element.\n * @param {HTMLElement} element\n * @param {Event} [event] If available, and `element` isn't directly found in any container,\n * the event's composed path is used to see if includes any known trap containers in the\n * case where the element is inside a Shadow DOM.\n * @returns {number} Index of the container in either `state.containers` or\n * `state.containerGroups` (the order/length of these lists are the same); -1\n * if the element isn't found.\n */\n var findContainerIndex = function findContainerIndex(element, event) {\n var composedPath = typeof (event === null || event === void 0 ? void 0 : event.composedPath) === 'function' ? event.composedPath() : undefined;\n // NOTE: search `containerGroups` because it's possible a group contains no tabbable\n // nodes, but still contains focusable nodes (e.g. if they all have `tabindex=-1`)\n // and we still need to find the element in there\n return state.containerGroups.findIndex(function (_ref) {\n var container = _ref.container,\n tabbableNodes = _ref.tabbableNodes;\n return container.contains(element) || ( // fall back to explicit tabbable search which will take into consideration any\n // web components if the `tabbableOptions.getShadowRoot` option was used for\n // the trap, enabling shadow DOM support in tabbable (`Node.contains()` doesn't\n // look inside web components even if open)\n composedPath === null || composedPath === void 0 ? void 0 : composedPath.includes(container)) || tabbableNodes.find(function (node) {\n return node === element;\n });\n });\n };\n\n /**\n * Gets the node for the given option, which is expected to be an option that\n * can be either a DOM node, a string that is a selector to get a node, `false`\n * (if a node is explicitly NOT given), or a function that returns any of these\n * values.\n * @param {string} optionName\n * @returns {undefined | false | HTMLElement | SVGElement} Returns\n * `undefined` if the option is not specified; `false` if the option\n * resolved to `false` (node explicitly not given); otherwise, the resolved\n * DOM node.\n * @throws {Error} If the option is set, not `false`, and is not, or does not\n * resolve to a node.\n */\n var getNodeForOption = function getNodeForOption(optionName) {\n var optionValue = config[optionName];\n if (typeof optionValue === 'function') {\n for (var _len2 = arguments.length, params = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n params[_key2 - 1] = arguments[_key2];\n }\n optionValue = optionValue.apply(void 0, params);\n }\n if (optionValue === true) {\n optionValue = undefined; // use default value\n }\n\n if (!optionValue) {\n if (optionValue === undefined || optionValue === false) {\n return optionValue;\n }\n // else, empty string (invalid), null (invalid), 0 (invalid)\n\n throw new Error(\"`\".concat(optionName, \"` was specified but was not a node, or did not return a node\"));\n }\n var node = optionValue; // could be HTMLElement, SVGElement, or non-empty string at this point\n\n if (typeof optionValue === 'string') {\n node = doc.querySelector(optionValue); // resolve to node, or null if fails\n if (!node) {\n throw new Error(\"`\".concat(optionName, \"` as selector refers to no known node\"));\n }\n }\n return node;\n };\n var getInitialFocusNode = function getInitialFocusNode() {\n var node = getNodeForOption('initialFocus');\n\n // false explicitly indicates we want no initialFocus at all\n if (node === false) {\n return false;\n }\n if (node === undefined || !isFocusable(node, config.tabbableOptions)) {\n // option not specified nor focusable: use fallback options\n if (findContainerIndex(doc.activeElement) >= 0) {\n node = doc.activeElement;\n } else {\n var firstTabbableGroup = state.tabbableGroups[0];\n var firstTabbableNode = firstTabbableGroup && firstTabbableGroup.firstTabbableNode;\n\n // NOTE: `fallbackFocus` option function cannot return `false` (not supported)\n node = firstTabbableNode || getNodeForOption('fallbackFocus');\n }\n }\n if (!node) {\n throw new Error('Your focus-trap needs to have at least one focusable element');\n }\n return node;\n };\n var updateTabbableNodes = function updateTabbableNodes() {\n state.containerGroups = state.containers.map(function (container) {\n var tabbableNodes = tabbable(container, config.tabbableOptions);\n\n // NOTE: if we have tabbable nodes, we must have focusable nodes; focusable nodes\n // are a superset of tabbable nodes since nodes with negative `tabindex` attributes\n // are focusable but not tabbable\n var focusableNodes = focusable(container, config.tabbableOptions);\n var firstTabbableNode = tabbableNodes.length > 0 ? tabbableNodes[0] : undefined;\n var lastTabbableNode = tabbableNodes.length > 0 ? tabbableNodes[tabbableNodes.length - 1] : undefined;\n var firstDomTabbableNode = focusableNodes.find(function (node) {\n return isTabbable(node);\n });\n var lastDomTabbableNode = focusableNodes.slice().reverse().find(function (node) {\n return isTabbable(node);\n });\n var posTabIndexesFound = !!tabbableNodes.find(function (node) {\n return getTabIndex(node) > 0;\n });\n return {\n container: container,\n tabbableNodes: tabbableNodes,\n focusableNodes: focusableNodes,\n /** True if at least one node with positive `tabindex` was found in this container. */\n posTabIndexesFound: posTabIndexesFound,\n /** First tabbable node in container, __tabindex__ order; `undefined` if none. */\n firstTabbableNode: firstTabbableNode,\n /** Last tabbable node in container, __tabindex__ order; `undefined` if none. */\n lastTabbableNode: lastTabbableNode,\n // NOTE: DOM order is NOT NECESSARILY \"document position\" order, but figuring that out\n // would require more than just https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition\n // because that API doesn't work with Shadow DOM as well as it should (@see\n // https://github.com/whatwg/dom/issues/320) and since this first/last is only needed, so far,\n // to address an edge case related to positive tabindex support, this seems like a much easier,\n // \"close enough most of the time\" alternative for positive tabindexes which should generally\n // be avoided anyway...\n /** First tabbable node in container, __DOM__ order; `undefined` if none. */\n firstDomTabbableNode: firstDomTabbableNode,\n /** Last tabbable node in container, __DOM__ order; `undefined` if none. */\n lastDomTabbableNode: lastDomTabbableNode,\n /**\n * Finds the __tabbable__ node that follows the given node in the specified direction,\n * in this container, if any.\n * @param {HTMLElement} node\n * @param {boolean} [forward] True if going in forward tab order; false if going\n * in reverse.\n * @returns {HTMLElement|undefined} The next tabbable node, if any.\n */\n nextTabbableNode: function nextTabbableNode(node) {\n var forward = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var nodeIdx = tabbableNodes.indexOf(node);\n if (nodeIdx < 0) {\n // either not tabbable nor focusable, or was focused but not tabbable (negative tabindex):\n // since `node` should at least have been focusable, we assume that's the case and mimic\n // what browsers do, which is set focus to the next node in __document position order__,\n // regardless of positive tabindexes, if any -- and for reasons explained in the NOTE\n // above related to `firstDomTabbable` and `lastDomTabbable` properties, we fall back to\n // basic DOM order\n if (forward) {\n return focusableNodes.slice(focusableNodes.indexOf(node) + 1).find(function (el) {\n return isTabbable(el);\n });\n }\n return focusableNodes.slice(0, focusableNodes.indexOf(node)).reverse().find(function (el) {\n return isTabbable(el);\n });\n }\n return tabbableNodes[nodeIdx + (forward ? 1 : -1)];\n }\n };\n });\n state.tabbableGroups = state.containerGroups.filter(function (group) {\n return group.tabbableNodes.length > 0;\n });\n\n // throw if no groups have tabbable nodes and we don't have a fallback focus node either\n if (state.tabbableGroups.length <= 0 && !getNodeForOption('fallbackFocus') // returning false not supported for this option\n ) {\n throw new Error('Your focus-trap must have at least one container with at least one tabbable node in it at all times');\n }\n\n // NOTE: Positive tabindexes are only properly supported in single-container traps because\n // doing it across multiple containers where tabindexes could be all over the place\n // would require Tabbable to support multiple containers, would require additional\n // specialized Shadow DOM support, and would require Tabbable's multi-container support\n // to look at those containers in document position order rather than user-provided\n // order (as they are treated in Focus-trap, for legacy reasons). See discussion on\n // https://github.com/focus-trap/focus-trap/issues/375 for more details.\n if (state.containerGroups.find(function (g) {\n return g.posTabIndexesFound;\n }) && state.containerGroups.length > 1) {\n throw new Error(\"At least one node with a positive tabindex was found in one of your focus-trap's multiple containers. Positive tabindexes are only supported in single-container focus-traps.\");\n }\n };\n\n /**\n * Gets the current activeElement. If it's a web-component and has open shadow-root\n * it will recursively search inside shadow roots for the \"true\" activeElement.\n *\n * @param {Document | ShadowRoot} el\n *\n * @returns {HTMLElement} The element that currently has the focus\n **/\n var getActiveElement = function getActiveElement(el) {\n var activeElement = el.activeElement;\n if (!activeElement) {\n return;\n }\n if (activeElement.shadowRoot && activeElement.shadowRoot.activeElement !== null) {\n return getActiveElement(activeElement.shadowRoot);\n }\n return activeElement;\n };\n var tryFocus = function tryFocus(node) {\n if (node === false) {\n return;\n }\n if (node === getActiveElement(document)) {\n return;\n }\n if (!node || !node.focus) {\n tryFocus(getInitialFocusNode());\n return;\n }\n node.focus({\n preventScroll: !!config.preventScroll\n });\n // NOTE: focus() API does not trigger focusIn event so set MRU node manually\n state.mostRecentlyFocusedNode = node;\n if (isSelectableInput(node)) {\n node.select();\n }\n };\n var getReturnFocusNode = function getReturnFocusNode(previousActiveElement) {\n var node = getNodeForOption('setReturnFocus', previousActiveElement);\n return node ? node : node === false ? false : previousActiveElement;\n };\n\n /**\n * Finds the next node (in either direction) where focus should move according to a\n * keyboard focus-in event.\n * @param {Object} params\n * @param {Node} [params.target] Known target __from which__ to navigate, if any.\n * @param {KeyboardEvent|FocusEvent} [params.event] Event to use if `target` isn't known (event\n * will be used to determine the `target`). Ignored if `target` is specified.\n * @param {boolean} [params.isBackward] True if focus should move backward.\n * @returns {Node|undefined} The next node, or `undefined` if a next node couldn't be\n * determined given the current state of the trap.\n */\n var findNextNavNode = function findNextNavNode(_ref2) {\n var target = _ref2.target,\n event = _ref2.event,\n _ref2$isBackward = _ref2.isBackward,\n isBackward = _ref2$isBackward === void 0 ? false : _ref2$isBackward;\n target = target || getActualTarget(event);\n updateTabbableNodes();\n var destinationNode = null;\n if (state.tabbableGroups.length > 0) {\n // make sure the target is actually contained in a group\n // NOTE: the target may also be the container itself if it's focusable\n // with tabIndex='-1' and was given initial focus\n var containerIndex = findContainerIndex(target, event);\n var containerGroup = containerIndex >= 0 ? state.containerGroups[containerIndex] : undefined;\n if (containerIndex < 0) {\n // target not found in any group: quite possible focus has escaped the trap,\n // so bring it back into...\n if (isBackward) {\n // ...the last node in the last group\n destinationNode = state.tabbableGroups[state.tabbableGroups.length - 1].lastTabbableNode;\n } else {\n // ...the first node in the first group\n destinationNode = state.tabbableGroups[0].firstTabbableNode;\n }\n } else if (isBackward) {\n // REVERSE\n\n // is the target the first tabbable node in a group?\n var startOfGroupIndex = findIndex(state.tabbableGroups, function (_ref3) {\n var firstTabbableNode = _ref3.firstTabbableNode;\n return target === firstTabbableNode;\n });\n if (startOfGroupIndex < 0 && (containerGroup.container === target || isFocusable(target, config.tabbableOptions) && !isTabbable(target, config.tabbableOptions) && !containerGroup.nextTabbableNode(target, false))) {\n // an exception case where the target is either the container itself, or\n // a non-tabbable node that was given focus (i.e. tabindex is negative\n // and user clicked on it or node was programmatically given focus)\n // and is not followed by any other tabbable node, in which\n // case, we should handle shift+tab as if focus were on the container's\n // first tabbable node, and go to the last tabbable node of the LAST group\n startOfGroupIndex = containerIndex;\n }\n if (startOfGroupIndex >= 0) {\n // YES: then shift+tab should go to the last tabbable node in the\n // previous group (and wrap around to the last tabbable node of\n // the LAST group if it's the first tabbable node of the FIRST group)\n var destinationGroupIndex = startOfGroupIndex === 0 ? state.tabbableGroups.length - 1 : startOfGroupIndex - 1;\n var destinationGroup = state.tabbableGroups[destinationGroupIndex];\n destinationNode = getTabIndex(target) >= 0 ? destinationGroup.lastTabbableNode : destinationGroup.lastDomTabbableNode;\n } else if (!isTabEvent(event)) {\n // user must have customized the nav keys so we have to move focus manually _within_\n // the active group: do this based on the order determined by tabbable()\n destinationNode = containerGroup.nextTabbableNode(target, false);\n }\n } else {\n // FORWARD\n\n // is the target the last tabbable node in a group?\n var lastOfGroupIndex = findIndex(state.tabbableGroups, function (_ref4) {\n var lastTabbableNode = _ref4.lastTabbableNode;\n return target === lastTabbableNode;\n });\n if (lastOfGroupIndex < 0 && (containerGroup.container === target || isFocusable(target, config.tabbableOptions) && !isTabbable(target, config.tabbableOptions) && !containerGroup.nextTabbableNode(target))) {\n // an exception case where the target is the container itself, or\n // a non-tabbable node that was given focus (i.e. tabindex is negative\n // and user clicked on it or node was programmatically given focus)\n // and is not followed by any other tabbable node, in which\n // case, we should handle tab as if focus were on the container's\n // last tabbable node, and go to the first tabbable node of the FIRST group\n lastOfGroupIndex = containerIndex;\n }\n if (lastOfGroupIndex >= 0) {\n // YES: then tab should go to the first tabbable node in the next\n // group (and wrap around to the first tabbable node of the FIRST\n // group if it's the last tabbable node of the LAST group)\n var _destinationGroupIndex = lastOfGroupIndex === state.tabbableGroups.length - 1 ? 0 : lastOfGroupIndex + 1;\n var _destinationGroup = state.tabbableGroups[_destinationGroupIndex];\n destinationNode = getTabIndex(target) >= 0 ? _destinationGroup.firstTabbableNode : _destinationGroup.firstDomTabbableNode;\n } else if (!isTabEvent(event)) {\n // user must have customized the nav keys so we have to move focus manually _within_\n // the active group: do this based on the order determined by tabbable()\n destinationNode = containerGroup.nextTabbableNode(target);\n }\n }\n } else {\n // no groups available\n // NOTE: the fallbackFocus option does not support returning false to opt-out\n destinationNode = getNodeForOption('fallbackFocus');\n }\n return destinationNode;\n };\n\n // This needs to be done on mousedown and touchstart instead of click\n // so that it precedes the focus event.\n var checkPointerDown = function checkPointerDown(e) {\n var target = getActualTarget(e);\n if (findContainerIndex(target, e) >= 0) {\n // allow the click since it ocurred inside the trap\n return;\n }\n if (valueOrHandler(config.clickOutsideDeactivates, e)) {\n // immediately deactivate the trap\n trap.deactivate({\n // NOTE: by setting `returnFocus: false`, deactivate() will do nothing,\n // which will result in the outside click setting focus to the node\n // that was clicked (and if not focusable, to \"nothing\"); by setting\n // `returnFocus: true`, we'll attempt to re-focus the node originally-focused\n // on activation (or the configured `setReturnFocus` node), whether the\n // outside click was on a focusable node or not\n returnFocus: config.returnFocusOnDeactivate\n });\n return;\n }\n\n // This is needed for mobile devices.\n // (If we'll only let `click` events through,\n // then on mobile they will be blocked anyways if `touchstart` is blocked.)\n if (valueOrHandler(config.allowOutsideClick, e)) {\n // allow the click outside the trap to take place\n return;\n }\n\n // otherwise, prevent the click\n e.preventDefault();\n };\n\n // In case focus escapes the trap for some strange reason, pull it back in.\n // NOTE: the focusIn event is NOT cancelable, so if focus escapes, it may cause unexpected\n // scrolling if the node that got focused was out of view; there's nothing we can do to\n // prevent that from happening by the time we discover that focus escaped\n var checkFocusIn = function checkFocusIn(event) {\n var target = getActualTarget(event);\n var targetContained = findContainerIndex(target, event) >= 0;\n\n // In Firefox when you Tab out of an iframe the Document is briefly focused.\n if (targetContained || target instanceof Document) {\n if (targetContained) {\n state.mostRecentlyFocusedNode = target;\n }\n } else {\n // escaped! pull it back in to where it just left\n event.stopImmediatePropagation();\n\n // focus will escape if the MRU node had a positive tab index and user tried to nav forward;\n // it will also escape if the MRU node had a 0 tab index and user tried to nav backward\n // toward a node with a positive tab index\n var nextNode; // next node to focus, if we find one\n var navAcrossContainers = true;\n if (state.mostRecentlyFocusedNode) {\n if (getTabIndex(state.mostRecentlyFocusedNode) > 0) {\n // MRU container index must be >=0 otherwise we wouldn't have it as an MRU node...\n var mruContainerIdx = findContainerIndex(state.mostRecentlyFocusedNode);\n // there MAY not be any tabbable nodes in the container if there are at least 2 containers\n // and the MRU node is focusable but not tabbable (focus-trap requires at least 1 container\n // with at least one tabbable node in order to function, so this could be the other container\n // with nothing tabbable in it)\n var tabbableNodes = state.containerGroups[mruContainerIdx].tabbableNodes;\n if (tabbableNodes.length > 0) {\n // MRU tab index MAY not be found if the MRU node is focusable but not tabbable\n var mruTabIdx = tabbableNodes.findIndex(function (node) {\n return node === state.mostRecentlyFocusedNode;\n });\n if (mruTabIdx >= 0) {\n if (config.isKeyForward(state.recentNavEvent)) {\n if (mruTabIdx + 1 < tabbableNodes.length) {\n nextNode = tabbableNodes[mruTabIdx + 1];\n navAcrossContainers = false;\n }\n // else, don't wrap within the container as focus should move to next/previous\n // container\n } else {\n if (mruTabIdx - 1 >= 0) {\n nextNode = tabbableNodes[mruTabIdx - 1];\n navAcrossContainers = false;\n }\n // else, don't wrap within the container as focus should move to next/previous\n // container\n }\n // else, don't find in container order without considering direction too\n }\n }\n // else, no tabbable nodes in that container (which means we must have at least one other\n // container with at least one tabbable node in it, otherwise focus-trap would've thrown\n // an error the last time updateTabbableNodes() was run): find next node among all known\n // containers\n } else {\n // check to see if there's at least one tabbable node with a positive tab index inside\n // the trap because focus seems to escape when navigating backward from a tabbable node\n // with tabindex=0 when this is the case (instead of wrapping to the tabbable node with\n // the greatest positive tab index like it should)\n if (!state.containerGroups.some(function (g) {\n return g.tabbableNodes.some(function (n) {\n return getTabIndex(n) > 0;\n });\n })) {\n // no containers with tabbable nodes with positive tab indexes which means the focus\n // escaped for some other reason and we should just execute the fallback to the\n // MRU node or initial focus node, if any\n navAcrossContainers = false;\n }\n }\n } else {\n // no MRU node means we're likely in some initial condition when the trap has just\n // been activated and initial focus hasn't been given yet, in which case we should\n // fall through to trying to focus the initial focus node, which is what should\n // happen below at this point in the logic\n navAcrossContainers = false;\n }\n if (navAcrossContainers) {\n nextNode = findNextNavNode({\n // move FROM the MRU node, not event-related node (which will be the node that is\n // outside the trap causing the focus escape we're trying to fix)\n target: state.mostRecentlyFocusedNode,\n isBackward: config.isKeyBackward(state.recentNavEvent)\n });\n }\n if (nextNode) {\n tryFocus(nextNode);\n } else {\n tryFocus(state.mostRecentlyFocusedNode || getInitialFocusNode());\n }\n }\n state.recentNavEvent = undefined; // clear\n };\n\n // Hijack key nav events on the first and last focusable nodes of the trap,\n // in order to prevent focus from escaping. If it escapes for even a\n // moment it can end up scrolling the page and causing confusion so we\n // kind of need to capture the action at the keydown phase.\n var checkKeyNav = function checkKeyNav(event) {\n var isBackward = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n state.recentNavEvent = event;\n var destinationNode = findNextNavNode({\n event: event,\n isBackward: isBackward\n });\n if (destinationNode) {\n if (isTabEvent(event)) {\n // since tab natively moves focus, we wouldn't have a destination node unless we\n // were on the edge of a container and had to move to the next/previous edge, in\n // which case we want to prevent default to keep the browser from moving focus\n // to where it normally would\n event.preventDefault();\n }\n tryFocus(destinationNode);\n }\n // else, let the browser take care of [shift+]tab and move the focus\n };\n\n var checkKey = function checkKey(event) {\n if (isEscapeEvent(event) && valueOrHandler(config.escapeDeactivates, event) !== false) {\n event.preventDefault();\n trap.deactivate();\n return;\n }\n if (config.isKeyForward(event) || config.isKeyBackward(event)) {\n checkKeyNav(event, config.isKeyBackward(event));\n }\n };\n var checkClick = function checkClick(e) {\n var target = getActualTarget(e);\n if (findContainerIndex(target, e) >= 0) {\n return;\n }\n if (valueOrHandler(config.clickOutsideDeactivates, e)) {\n return;\n }\n if (valueOrHandler(config.allowOutsideClick, e)) {\n return;\n }\n e.preventDefault();\n e.stopImmediatePropagation();\n };\n\n //\n // EVENT LISTENERS\n //\n\n var addListeners = function addListeners() {\n if (!state.active) {\n return;\n }\n\n // There can be only one listening focus trap at a time\n activeFocusTraps.activateTrap(trapStack, trap);\n\n // Delay ensures that the focused element doesn't capture the event\n // that caused the focus trap activation.\n state.delayInitialFocusTimer = config.delayInitialFocus ? delay(function () {\n tryFocus(getInitialFocusNode());\n }) : tryFocus(getInitialFocusNode());\n doc.addEventListener('focusin', checkFocusIn, true);\n doc.addEventListener('mousedown', checkPointerDown, {\n capture: true,\n passive: false\n });\n doc.addEventListener('touchstart', checkPointerDown, {\n capture: true,\n passive: false\n });\n doc.addEventListener('click', checkClick, {\n capture: true,\n passive: false\n });\n doc.addEventListener('keydown', checkKey, {\n capture: true,\n passive: false\n });\n return trap;\n };\n var removeListeners = function removeListeners() {\n if (!state.active) {\n return;\n }\n doc.removeEventListener('focusin', checkFocusIn, true);\n doc.removeEventListener('mousedown', checkPointerDown, true);\n doc.removeEventListener('touchstart', checkPointerDown, true);\n doc.removeEventListener('click', checkClick, true);\n doc.removeEventListener('keydown', checkKey, true);\n return trap;\n };\n\n //\n // MUTATION OBSERVER\n //\n\n var checkDomRemoval = function checkDomRemoval(mutations) {\n var isFocusedNodeRemoved = mutations.some(function (mutation) {\n var removedNodes = Array.from(mutation.removedNodes);\n return removedNodes.some(function (node) {\n return node === state.mostRecentlyFocusedNode;\n });\n });\n\n // If the currently focused is removed then browsers will move focus to the\n // <body> element. If this happens, try to move focus back into the trap.\n if (isFocusedNodeRemoved) {\n tryFocus(getInitialFocusNode());\n }\n };\n\n // Use MutationObserver - if supported - to detect if focused node is removed\n // from the DOM.\n var mutationObserver = typeof window !== 'undefined' && 'MutationObserver' in window ? new MutationObserver(checkDomRemoval) : undefined;\n var updateObservedNodes = function updateObservedNodes() {\n if (!mutationObserver) {\n return;\n }\n mutationObserver.disconnect();\n if (state.active && !state.paused) {\n state.containers.map(function (container) {\n mutationObserver.observe(container, {\n subtree: true,\n childList: true\n });\n });\n }\n };\n\n //\n // TRAP DEFINITION\n //\n\n trap = {\n get active() {\n return state.active;\n },\n get paused() {\n return state.paused;\n },\n activate: function activate(activateOptions) {\n if (state.active) {\n return this;\n }\n var onActivate = getOption(activateOptions, 'onActivate');\n var onPostActivate = getOption(activateOptions, 'onPostActivate');\n var checkCanFocusTrap = getOption(activateOptions, 'checkCanFocusTrap');\n if (!checkCanFocusTrap) {\n updateTabbableNodes();\n }\n state.active = true;\n state.paused = false;\n state.nodeFocusedBeforeActivation = doc.activeElement;\n onActivate === null || onActivate === void 0 || onActivate();\n var finishActivation = function finishActivation() {\n if (checkCanFocusTrap) {\n updateTabbableNodes();\n }\n addListeners();\n updateObservedNodes();\n onPostActivate === null || onPostActivate === void 0 || onPostActivate();\n };\n if (checkCanFocusTrap) {\n checkCanFocusTrap(state.containers.concat()).then(finishActivation, finishActivation);\n return this;\n }\n finishActivation();\n return this;\n },\n deactivate: function deactivate(deactivateOptions) {\n if (!state.active) {\n return this;\n }\n var options = _objectSpread2({\n onDeactivate: config.onDeactivate,\n onPostDeactivate: config.onPostDeactivate,\n checkCanReturnFocus: config.checkCanReturnFocus\n }, deactivateOptions);\n clearTimeout(state.delayInitialFocusTimer); // noop if undefined\n state.delayInitialFocusTimer = undefined;\n removeListeners();\n state.active = false;\n state.paused = false;\n updateObservedNodes();\n activeFocusTraps.deactivateTrap(trapStack, trap);\n var onDeactivate = getOption(options, 'onDeactivate');\n var onPostDeactivate = getOption(options, 'onPostDeactivate');\n var checkCanReturnFocus = getOption(options, 'checkCanReturnFocus');\n var returnFocus = getOption(options, 'returnFocus', 'returnFocusOnDeactivate');\n onDeactivate === null || onDeactivate === void 0 || onDeactivate();\n var finishDeactivation = function finishDeactivation() {\n delay(function () {\n if (returnFocus) {\n tryFocus(getReturnFocusNode(state.nodeFocusedBeforeActivation));\n }\n onPostDeactivate === null || onPostDeactivate === void 0 || onPostDeactivate();\n });\n };\n if (returnFocus && checkCanReturnFocus) {\n checkCanReturnFocus(getReturnFocusNode(state.nodeFocusedBeforeActivation)).then(finishDeactivation, finishDeactivation);\n return this;\n }\n finishDeactivation();\n return this;\n },\n pause: function pause(pauseOptions) {\n if (state.paused || !state.active) {\n return this;\n }\n var onPause = getOption(pauseOptions, 'onPause');\n var onPostPause = getOption(pauseOptions, 'onPostPause');\n state.paused = true;\n onPause === null || onPause === void 0 || onPause();\n removeListeners();\n updateObservedNodes();\n onPostPause === null || onPostPause === void 0 || onPostPause();\n return this;\n },\n unpause: function unpause(unpauseOptions) {\n if (!state.paused || !state.active) {\n return this;\n }\n var onUnpause = getOption(unpauseOptions, 'onUnpause');\n var onPostUnpause = getOption(unpauseOptions, 'onPostUnpause');\n state.paused = false;\n onUnpause === null || onUnpause === void 0 || onUnpause();\n updateTabbableNodes();\n addListeners();\n updateObservedNodes();\n onPostUnpause === null || onPostUnpause === void 0 || onPostUnpause();\n return this;\n },\n updateContainerElements: function updateContainerElements(containerElements) {\n var elementsAsArray = [].concat(containerElements).filter(Boolean);\n state.containers = elementsAsArray.map(function (element) {\n return typeof element === 'string' ? doc.querySelector(element) : element;\n });\n if (state.active) {\n updateTabbableNodes();\n }\n updateObservedNodes();\n return this;\n }\n };\n\n // initialize container elements\n trap.updateContainerElements(elements);\n return trap;\n};\n\nexport { createFocusTrap };\n//# sourceMappingURL=focus-trap.esm.js.map\n","import { unrefElement, tryOnScopeDispose } from '@vueuse/core';\nimport { ref, watch } from 'vue-demi';\nimport { createFocusTrap } from 'focus-trap';\n\nfunction useFocusTrap(target, options = {}) {\n let trap;\n const { immediate, ...focusTrapOptions } = options;\n const hasFocus = ref(false);\n const isPaused = ref(false);\n const activate = (opts) => trap && trap.activate(opts);\n const deactivate = (opts) => trap && trap.deactivate(opts);\n const pause = () => {\n if (trap) {\n trap.pause();\n isPaused.value = true;\n }\n };\n const unpause = () => {\n if (trap) {\n trap.unpause();\n isPaused.value = false;\n }\n };\n watch(\n () => unrefElement(target),\n (el) => {\n if (!el)\n return;\n trap = createFocusTrap(el, {\n ...focusTrapOptions,\n onActivate() {\n hasFocus.value = true;\n if (options.onActivate)\n options.onActivate();\n },\n onDeactivate() {\n hasFocus.value = false;\n if (options.onDeactivate)\n options.onDeactivate();\n }\n });\n if (immediate)\n activate();\n },\n { flush: \"post\" }\n );\n tryOnScopeDispose(() => deactivate());\n return {\n hasFocus,\n isPaused,\n activate,\n deactivate,\n pause,\n unpause\n };\n}\n\nexport { useFocusTrap };\n","import {\n type MaybeRefOrGetter,\n nextTick,\n onMounted,\n readonly,\n ref,\n type Ref,\n toRef,\n watch,\n} from 'vue'\nimport {useFocusTrap, type UseFocusTrapOptions} from '@vueuse/integrations/useFocusTrap'\nimport {useMutationObserver} from '@vueuse/core'\n\nexport const useActivatedFocusTrap = (\n {\n element,\n isActive,\n noTrap,\n fallbackFocus,\n }: {\n element: Ref<HTMLElement | null>\n isActive: MaybeRefOrGetter<boolean>\n noTrap: MaybeRefOrGetter<boolean>\n /**\n * We need this in the case when there are no focusable elements in the trap. So elements that use this need to implement a fallback focus element.\n *\n * Use the `needsFallback` ref to check if you can v-if the element or not. So it's not included in the component tree when not needed.\n */\n fallbackFocus: {\n ref: Ref<HTMLElement | null>\n /**\n * The fallback focus element needs some specific selector to ensure it's not included when checking for focusable elements\n */\n classSelector: string\n }\n },\n focusTrapOpts: UseFocusTrapOptions = {\n allowOutsideClick: true,\n fallbackFocus: fallbackFocus.ref.value ?? undefined,\n }\n) => {\n const resolvedIsActive = readonly(toRef(isActive))\n const resolvedNoTrap = readonly(toRef(noTrap))\n\n const checkNeedsFocus = () => {\n const tabbableElements = element.value?.querySelectorAll(\n `a, button, input, select, textarea, [tabindex]:not([tabindex=\"-1\"]):not(.${fallbackFocus.classSelector})`\n )\n return !tabbableElements || tabbableElements.length === 0\n }\n const needsFallback = ref(checkNeedsFocus())\n onMounted(() => {\n useMutationObserver(\n element,\n () => {\n needsFallback.value = checkNeedsFocus()\n },\n {childList: true, subtree: true}\n )\n })\n\n const trap = useFocusTrap(element, focusTrapOpts)\n watch(resolvedIsActive, async (newValue) => {\n await nextTick()\n if (newValue && resolvedNoTrap.value === false) {\n trap.activate()\n } else {\n trap.deactivate()\n }\n })\n\n watch(resolvedNoTrap, (newValue) => {\n if (newValue === true) {\n trap.deactivate()\n }\n })\n\n return {\n needsFallback: readonly(needsFallback),\n }\n}\n","<template>\n <component\n :is=\"props.tag\"\n :class=\"computedClasses\"\n :role=\"props.label || hasLabelSlot ? props.role : null\"\n :aria-hidden=\"props.label || hasLabelSlot ? null : true\"\n >\n <span v-if=\"props.label || hasLabelSlot\" class=\"visually-hidden\">\n <slot name=\"label\">{{ props.label }}</slot>\n </span>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, toRef} from 'vue'\nimport type {BSpinnerProps} from '../types'\nimport {isEmptySlot} from '../utils'\nimport {useDefaults} from '../composables'\n\nconst _props = withDefaults(defineProps<BSpinnerProps>(), {\n label: undefined,\n role: 'status',\n small: false,\n tag: 'span',\n type: 'border',\n variant: null,\n})\n\nconst props = useDefaults(_props, 'BSpinner')\n\nconst slots = defineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n label?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => [\n `spinner-${props.type}`,\n {\n [`spinner-${props.type}-sm`]: props.small,\n [`text-${props.variant}`]: props.variant !== null,\n },\n])\n\nconst hasLabelSlot = toRef(() => !isEmptySlot(slots.label))\n</script>\n","<template>\n <component\n :is=\"computedTag\"\n ref=\"element\"\n class=\"btn\"\n v-bind=\"linkProps\"\n :class=\"computedClasses\"\n :aria-disabled=\"computedAriaDisabled\"\n :aria-pressed=\"isToggle ? pressedValue : null\"\n :autocomplete=\"isToggle ? 'off' : null\"\n :disabled=\"isButton ? props.disabled : null\"\n :href=\"props.href\"\n :rel=\"computedLink ? props.rel : null\"\n :role=\"nonStandardTag || computedLink ? 'button' : null\"\n :target=\"computedLink ? props.target : null\"\n :type=\"isButton ? props.type : null\"\n :to=\"!isButton ? props.to : null\"\n @click=\"clicked\"\n >\n <template v-if=\"props.loading\">\n <slot name=\"loading\">\n <template v-if=\"!props.loadingFill\">\n {{ props.loadingText }}\n </template>\n <slot name=\"loading-spinner\">\n <BSpinner\n :small=\"props.size !== 'lg'\"\n :label=\"props.loadingFill ? props.loadingText : undefined\"\n />\n </slot>\n </slot>\n </template>\n <template v-else>\n <slot />\n </template>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, ref, toRef} from 'vue'\nimport BSpinner from '../BSpinner.vue'\nimport {useBLinkHelper, useDefaults} from '../../composables'\nimport type {BButtonProps, ColorVariant} from '../../types'\nimport BLink from '../BLink/BLink.vue'\nimport {useLinkClasses} from '../../composables/useLinkClasses'\nimport {onKeyStroke} from '@vueuse/core'\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'default'?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'loading'?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'loading-spinner'?: (props: Record<string, never>) => any\n}>()\n\nconst _props = withDefaults(defineProps<BButtonProps>(), {\n loading: false,\n loadingFill: false,\n loadingText: 'Loading...',\n pill: false,\n size: 'md',\n squared: false,\n tag: 'button',\n type: 'button',\n // Link props\n active: false, // Why is this active: false?\n variant: 'secondary',\n // All others use defaults\n activeClass: undefined,\n disabled: undefined,\n exactActiveClass: undefined,\n stretched: false,\n href: undefined,\n icon: false,\n opacity: undefined,\n opacityHover: undefined,\n rel: undefined,\n replace: undefined,\n routerComponentName: undefined,\n routerTag: undefined,\n target: undefined,\n to: undefined,\n underlineOffset: undefined,\n underlineOffsetHover: undefined,\n underlineOpacity: undefined,\n underlineOpacityHover: undefined,\n underlineVariant: null,\n // End link props\n})\n\nconst props = useDefaults(_props, 'BButton')\n\nconst emit = defineEmits<{\n click: [value: MouseEvent]\n}>()\n\nconst element = ref<HTMLElement | null>(null)\n\nconst pressedValue = defineModel<boolean | undefined>('pressed', {default: undefined})\n\nconst {computedLink, computedLinkProps} = useBLinkHelper(props, [\n 'active-class',\n 'exact-active-class',\n 'replace',\n 'routerComponentName',\n 'routerTag',\n])\n\nconst isToggle = toRef(() => typeof pressedValue.value === 'boolean')\nconst isButton = toRef(\n () => props.tag === 'button' && props.href === undefined && props.to === undefined\n)\nconst isBLink = toRef(() => props.to !== undefined)\nconst nonStandardTag = toRef(() => (props.href !== undefined ? false : !isButton.value))\n\nconst linkProps = computed(() => (isBLink.value ? computedLinkProps.value : []))\nconst computedAriaDisabled = computed(() => {\n if (props.href === '#' && props.disabled) return true\n\n return nonStandardTag.value ? props.disabled : null\n})\n\nconst variantIsLinkSubset = computed(\n () => (computedLink.value === false && props.variant?.startsWith('link-')) || false\n)\nconst linkValueClasses = useLinkClasses(\n computed(() => ({\n ...(props.variant &&\n props.variant.startsWith('link') && {\n icon: props.icon,\n opacity: props.opacity,\n opacityHover: props.opacityHover,\n underlineOffset: props.underlineOffset,\n underlineOffsetHover: props.underlineOffsetHover,\n underlineOpacity: props.underlineOpacity,\n underlineOpacityHover: props.underlineOpacityHover,\n underlineVariant: props.underlineVariant,\n variant:\n variantIsLinkSubset.value === true ? (props.variant.slice(5) as ColorVariant) : null,\n }),\n }))\n)\nconst computedClasses = computed(() => [\n computedLink.value === true ? undefined : linkValueClasses.value,\n [`btn-${props.size}`],\n {\n [`btn-${props.variant}`]: props.variant !== null && variantIsLinkSubset.value === false,\n 'active': props.active || pressedValue.value,\n 'rounded-pill': props.pill,\n 'rounded-0': props.squared,\n 'disabled': props.disabled,\n },\n])\n\nconst computedTag = toRef(() => (isBLink.value ? BLink : props.href ? 'a' : props.tag))\n\nconst clicked = (e: Readonly<MouseEvent>): void => {\n if (props.disabled) {\n e.preventDefault()\n e.stopPropagation()\n return\n }\n emit('click', e)\n if (isToggle.value) pressedValue.value = !pressedValue.value\n}\n\nonKeyStroke(\n [' ', 'enter'],\n (e) => {\n if (props.href === '#') {\n e.preventDefault()\n element.value?.click()\n }\n },\n {target: element}\n)\n</script>\n","<template>\n <Teleport :to=\"props.teleportTo\" :disabled=\"props.teleportDisabled\">\n <Transition\n v-bind=\"{...fadeTransitionProps, ...props.transProps, enterToClass: 'show'}\"\n :appear=\"modelValue\"\n @before-enter=\"onBeforeEnter\"\n @after-enter=\"onAfterEnter\"\n @leave=\"onLeave\"\n @after-leave=\"onAfterLeave\"\n >\n <div\n v-show=\"modelValue\"\n :id=\"computedId\"\n ref=\"element\"\n class=\"modal\"\n :class=\"modalClasses\"\n role=\"dialog\"\n :aria-labelledby=\"!props.hideHeader ? `${computedId}-label` : undefined\"\n :aria-describedby=\"`${computedId}-body`\"\n tabindex=\"-1\"\n v-bind=\"$attrs\"\n :style=\"computedZIndex\"\n >\n <div class=\"modal-dialog\" :class=\"modalDialogClasses\">\n <div v-if=\"lazyShowing\" class=\"modal-content\" :class=\"props.contentClass\">\n <div v-if=\"!props.hideHeader\" class=\"modal-header\" :class=\"headerClasses\">\n <slot name=\"header\" v-bind=\"sharedSlots\">\n <component\n :is=\"props.titleTag\"\n :id=\"`${computedId}-label`\"\n class=\"modal-title\"\n :class=\"titleClasses\"\n >\n <slot name=\"title\" v-bind=\"sharedSlots\">\n {{ props.title }}\n </slot>\n </component>\n <template v-if=\"!props.hideHeaderClose\">\n <BButton\n v-if=\"hasHeaderCloseSlot\"\n v-bind=\"headerCloseAttrs\"\n @click=\"hideFn('close')\"\n >\n <slot name=\"header-close\" />\n </BButton>\n <BCloseButton\n v-else\n :aria-label=\"props.headerCloseLabel\"\n v-bind=\"headerCloseAttrs\"\n @click=\"hideFn('close')\"\n />\n </template>\n </slot>\n </div>\n <div\n :id=\"`${computedId}-body`\"\n class=\"modal-body\"\n :class=\"bodyClasses\"\n v-bind=\"props.bodyAttrs\"\n >\n <slot v-bind=\"sharedSlots\">\n {{ props.body }}\n </slot>\n </div>\n <div v-if=\"!props.hideFooter\" class=\"modal-footer\" :class=\"footerClasses\">\n <slot name=\"footer\" v-bind=\"sharedSlots\">\n <slot name=\"cancel\" v-bind=\"sharedSlots\">\n <BButton\n v-if=\"!props.okOnly\"\n ref=\"cancelButton\"\n :disabled=\"disableCancel\"\n :size=\"props.buttonSize\"\n :variant=\"props.cancelVariant\"\n @click=\"hideFn('cancel')\"\n >\n {{ props.cancelTitle }}\n </BButton>\n </slot>\n <slot name=\"ok\" v-bind=\"sharedSlots\">\n <BButton\n ref=\"okButton\"\n :disabled=\"disableOk\"\n :size=\"props.buttonSize\"\n :variant=\"props.okVariant\"\n @click=\"hideFn('ok')\"\n >\n {{ props.okTitle }}\n </BButton>\n </slot>\n </slot>\n </div>\n </div>\n </div>\n <slot v-if=\"!props.hideBackdrop\" name=\"backdrop\">\n <div class=\"modal-backdrop fade show\" @click=\"hideFn('backdrop')\" />\n </slot>\n <div\n v-if=\"needsFallback\"\n ref=\"fallbackFocusElement\"\n :class=\"fallbackClassSelector\"\n tabindex=\"0\"\n style=\"width: 0; height: 0; overflow: hidden\"\n />\n </div>\n </Transition>\n </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport {onKeyStroke, useEventListener, useFocus} from '@vueuse/core'\nimport {useActivatedFocusTrap} from '../../composables/useActivatedFocusTrap'\nimport {computed, type CSSProperties, ref, toRef, watch} from 'vue'\nimport {\n useColorVariantClasses,\n useDefaults,\n useFadeTransition,\n useId,\n useModalManager,\n useSafeScrollLock,\n} from '../../composables'\nimport type {BModalProps} from '../../types'\nimport {BvTriggerableEvent, isEmptySlot} from '../../utils'\nimport BButton from '../BButton/BButton.vue'\nimport BCloseButton from '../BButton/BCloseButton.vue'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\n// aria\n// autofocus\n// close on escape when autofocus\n\n// Note, attempt to return focus to item that openned the modal after close\n// Implement auto focus props like autoFocusButton\n\nconst _props = withDefaults(defineProps<BModalProps>(), {\n autofocus: true,\n autofocusButton: undefined,\n body: undefined,\n bodyBgVariant: null,\n bodyAttrs: undefined,\n bodyClass: null,\n bodyScrolling: false,\n bodyTextVariant: null,\n bodyVariant: null,\n busy: false,\n buttonSize: 'md',\n cancelDisabled: false,\n cancelTitle: 'Cancel',\n cancelVariant: 'secondary',\n centered: false,\n contentClass: undefined,\n dialogClass: undefined,\n footerBgVariant: null,\n footerBorderVariant: null,\n footerClass: undefined,\n footerTextVariant: null,\n footerVariant: null,\n fullscreen: false,\n headerBgVariant: null,\n headerBorderVariant: null,\n headerClass: undefined,\n headerCloseClass: undefined,\n headerCloseLabel: 'Close',\n headerCloseVariant: 'secondary',\n headerTextVariant: null,\n headerVariant: null,\n hideBackdrop: false,\n hideFooter: false,\n hideHeader: false,\n hideHeaderClose: false,\n id: undefined,\n lazy: false,\n modalClass: undefined,\n noCloseOnBackdrop: false,\n noCloseOnEsc: false,\n noFade: false,\n noTrap: false,\n okDisabled: false,\n okOnly: false,\n okTitle: 'OK',\n okVariant: 'primary',\n scrollable: false,\n size: 'md',\n teleportDisabled: false,\n teleportTo: 'body',\n title: undefined,\n titleClass: undefined,\n titleSrOnly: false,\n titleTag: 'h5',\n transProps: undefined,\n})\nconst props = useDefaults(_props, 'BModal')\n\nconst emit = defineEmits<{\n 'backdrop': [value: BvTriggerableEvent]\n 'cancel': [value: BvTriggerableEvent]\n 'close': [value: BvTriggerableEvent]\n 'esc': [value: BvTriggerableEvent]\n 'hidden': [value: BvTriggerableEvent]\n 'hide': [value: BvTriggerableEvent]\n 'hide-prevented': []\n 'ok': [value: BvTriggerableEvent]\n 'show': [value: BvTriggerableEvent]\n 'show-prevented': []\n 'shown': [value: BvTriggerableEvent]\n}>()\n\ntype SharedSlotsData = {\n cancel: () => void\n close: () => void\n hide: (trigger?: string) => void\n ok: () => void\n visible: boolean\n}\n\nconst slots = defineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'backdrop'?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'cancel'?: (props: SharedSlotsData) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'default'?: (props: SharedSlotsData) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'footer'?: (props: SharedSlotsData) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'header'?: (props: SharedSlotsData) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'header-close'?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'ok'?: (props: SharedSlotsData) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'title'?: (props: SharedSlotsData) => any\n}>()\n\nconst computedId = useId(() => props.id, 'modal')\n// Note: passive: true will sync an internal ref... This is required for useModalManager to exit,\n// Since the modelValue that's passed from that composable is not reactive, this internal ref _is_ and thus it will trigger closing the modal\nconst modelValue = defineModel<boolean>({default: false})\n\nconst element = ref<HTMLElement | null>(null)\nconst fallbackFocusElement = ref<HTMLElement | null>(null)\nconst okButton = ref<HTMLElement | null>(null)\nconst cancelButton = ref<HTMLElement | null>(null)\nconst closeButton = ref<HTMLElement | null>(null)\nconst isActive = ref(false)\nconst lazyLoadCompleted = ref(false)\n\nconst fallbackClassSelector = 'modal-fallback-focus'\nconst {needsFallback} = useActivatedFocusTrap({\n element,\n isActive,\n noTrap: () => props.noTrap,\n fallbackFocus: {\n ref: fallbackFocusElement,\n classSelector: fallbackClassSelector,\n },\n})\n\nconst fadeTransitionProps = useFadeTransition(true)\n\nonKeyStroke(\n 'Escape',\n () => {\n hideFn('esc')\n },\n {target: element}\n)\nuseSafeScrollLock(modelValue, () => props.bodyScrolling)\nconst {focused: modalFocus} = useFocus(element, {\n initialValue: modelValue.value && props.autofocusButton === undefined && props.autofocus === true,\n})\nconst {focused: okButtonFocus} = useFocus(okButton, {\n initialValue: modelValue.value && props.autofocusButton === 'ok' && props.autofocus === true,\n})\nconst {focused: cancelButtonFocus} = useFocus(cancelButton, {\n initialValue: modelValue.value && props.autofocusButton === 'cancel' && props.autofocus === true,\n})\nconst {focused: closeButtonFocus} = useFocus(closeButton, {\n initialValue: modelValue.value && props.autofocusButton === 'close' && props.autofocus === true,\n})\n\nconst modalClasses = computed(() => [\n props.modalClass,\n {\n fade: !props.noFade,\n show: isActive.value,\n },\n])\n\nconst lazyShowing = toRef(\n () =>\n props.lazy === false ||\n (props.lazy === true && lazyLoadCompleted.value === true) ||\n (props.lazy === true && modelValue.value === true)\n)\n\nconst hasHeaderCloseSlot = toRef(() => !isEmptySlot(slots['header-close']))\n\nconst modalDialogClasses = computed(() => [\n props.dialogClass,\n {\n 'modal-fullscreen': props.fullscreen === true,\n [`modal-fullscreen-${props.fullscreen}-down`]: typeof props.fullscreen === 'string',\n [`modal-${props.size}`]: props.size !== 'md',\n 'modal-dialog-centered': props.centered,\n 'modal-dialog-scrollable': props.scrollable,\n },\n])\n\nconst resolvedBodyBgClasses = useColorVariantClasses(() => ({\n bgVariant: props.bodyBgVariant,\n textVariant: props.bodyTextVariant,\n variant: props.bodyVariant,\n}))\n\nconst bodyClasses = computed(() => [props.bodyClass, resolvedBodyBgClasses.value])\n\nconst resolvedHeaderBgClasses = useColorVariantClasses(() => ({\n bgVariant: props.headerBgVariant,\n textVariant: props.headerTextVariant,\n variant: props.headerVariant,\n}))\n\nconst headerClasses = computed(() => [\n props.headerClass,\n resolvedHeaderBgClasses.value,\n {\n [`border-${props.headerBorderVariant}`]: props.headerBorderVariant !== null,\n },\n])\n\nconst headerCloseAttrs = computed(() => ({\n variant: hasHeaderCloseSlot.value ? props.headerCloseVariant : undefined,\n class: props.headerCloseClass,\n}))\n\nconst resolvedFooterBgClasses = useColorVariantClasses(() => ({\n bgVariant: props.footerBgVariant,\n textVariant: props.footerTextVariant,\n variant: props.footerVariant,\n}))\n\nconst footerClasses = computed(() => [\n props.footerClass,\n resolvedFooterBgClasses.value,\n {\n [`border-${props.footerBorderVariant}`]: props.footerBorderVariant !== null,\n },\n])\n\nconst titleClasses = computed(() => [\n props.titleClass,\n {\n ['visually-hidden']: props.titleSrOnly,\n },\n])\nconst disableCancel = toRef(() => props.cancelDisabled || props.busy)\nconst disableOk = toRef(() => props.okDisabled || props.busy)\n\nconst buildTriggerableEvent = (\n type: string,\n opts: Readonly<Partial<BvTriggerableEvent>> = {}\n): BvTriggerableEvent =>\n new BvTriggerableEvent(type, {\n cancelable: false,\n target: element.value || null,\n relatedTarget: null,\n trigger: null,\n ...opts,\n componentId: computedId.value,\n })\n\nwatch(modelValue, (newValue, oldValue) => {\n if (newValue === oldValue) return\n if (newValue === true) {\n showFn()\n } else {\n hideFn()\n }\n})\n\nconst hideFn = (trigger = '') => {\n if (\n (trigger === 'backdrop' && props.noCloseOnBackdrop) ||\n (trigger === 'esc' && props.noCloseOnEsc)\n ) {\n emit('hide-prevented')\n return\n }\n\n const event = buildTriggerableEvent('hide', {cancelable: trigger !== '', trigger})\n\n if (trigger === 'ok') {\n emit(trigger, event)\n }\n if (trigger === 'cancel') {\n emit(trigger, event)\n }\n if (trigger === 'close') {\n emit(trigger, event)\n }\n if (trigger === 'backdrop') {\n emit(trigger, event)\n }\n if (trigger === 'esc') {\n emit(trigger, event)\n }\n emit('hide', event)\n\n if (event.defaultPrevented) {\n emit('hide-prevented')\n if (!modelValue.value) modelValue.value = true\n return\n }\n if (modelValue.value) modelValue.value = false\n}\n\n// TODO: If a show is prevented, it will briefly show the animation. This is a bug\n// I'm not sure how to wait for the event to be determined. Before showing\nconst showFn = () => {\n if (isActive.value) return\n\n const event = buildTriggerableEvent('show', {cancelable: true})\n emit('show', event)\n if (event.defaultPrevented) {\n if (modelValue.value) modelValue.value = false\n emit('show-prevented')\n return\n }\n if (!modelValue.value) modelValue.value = true\n}\n\nconst pickFocusItem = () => {\n if (props.autofocus === false) return\n props.autofocusButton === 'ok'\n ? (okButtonFocus.value = true)\n : props.autofocusButton === 'close'\n ? (closeButtonFocus.value = true)\n : props.autofocusButton === 'cancel'\n ? (cancelButtonFocus.value = true)\n : (modalFocus.value = true)\n}\n\nconst onBeforeEnter = () => {\n showFn()\n}\nconst onAfterEnter = () => {\n isActive.value = true\n pickFocusItem()\n emit('shown', buildTriggerableEvent('shown'))\n if (props.lazy === true) lazyLoadCompleted.value = true\n}\nconst isLeaving = ref(false)\nconst onLeave = () => {\n isActive.value = false\n isLeaving.value = true\n}\nconst onAfterLeave = () => {\n emit('hidden', buildTriggerableEvent('hidden'))\n if (props.lazy === true) lazyLoadCompleted.value = false\n isLeaving.value = false\n}\n\nconst {activePosition, activeModalCount, stackWithoutSelf} = useModalManager(\n isActive,\n modelValue.value\n)\n\nwatch(stackWithoutSelf, (newValue, oldValue) => {\n if (newValue.length > oldValue.length && isActive.value === true && props.noStacking === true)\n hideFn()\n})\n\nconst defaultModalDialogZIndex = 1056\nconst computedZIndex = computed<CSSProperties>(() => ({\n // Make sure that newly opened modals have a higher z-index than currently active ones.\n // All active modals have a z-index of ('defaultZIndex' - 'stackSize' - 'positionInStack').\n //\n // This means inactive modals will already be higher than active ones when opened.\n 'z-index':\n isActive.value || isLeaving.value\n ? // Just for reference there is a single frame in which the modal is not active but still has a higher z-index than the active ones due to _when_ it calculates its position. It's a small visual effect\n defaultModalDialogZIndex - ((activeModalCount?.value ?? 0) - (activePosition?.value ?? 0))\n : defaultModalDialogZIndex,\n}))\n\nuseEventListener(element, 'bv-toggle', () => {\n modelValue.value ? hideFn() : showFn()\n})\n\nconst sharedSlots = computed<SharedSlotsData>(() => ({\n cancel: () => {\n hideFn('cancel')\n },\n close: () => {\n hideFn('close')\n },\n hide: hideFn,\n ok: () => {\n hideFn('ok')\n },\n visible: modelValue.value,\n}))\n\ndefineExpose({\n hide: hideFn,\n id: computedId,\n show: showFn,\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.modal {\n display: block;\n}\n\n.modal-dialog {\n z-index: 1051;\n}\n</style>\n","import {\n type Component,\n computed,\n type MaybeRefOrGetter,\n type Plugin,\n ref,\n toValue,\n type WritableComputedRef,\n} from 'vue'\nimport {modalControllerPluginKey} from '../utils'\nimport type {BModalProps, OrchestratedModal} from '../types'\nimport BModal from '../components/BModal/BModal.vue'\n\nexport default {\n install(app) {\n const modals = ref<\n WritableComputedRef<{\n component: unknown // TS being weird here, just use unknown\n props: OrchestratedModal & {\n _self: symbol\n _modelValue: BModalProps['modelValue']\n _promise: {\n value: Promise<boolean | null>\n resolve: (value: boolean | null) => void\n }\n _isConfirm: boolean\n }\n }>[]\n >([])\n\n const buildPromise = (): {\n value: Promise<boolean | null>\n resolve: (value: boolean | null) => void\n } => {\n let resolveFunc: (value: boolean | null) => void = () => {\n /* empty */\n }\n\n const promise = new Promise<boolean | null>((resolve) => {\n resolveFunc = resolve\n })\n\n return {\n value: promise,\n resolve: resolveFunc,\n }\n }\n\n const buildPrereqs = () => [buildPromise(), Symbol(), ref(true)] as const\n\n const show = (\n obj: {\n component?: MaybeRefOrGetter<Readonly<Component>>\n props?: MaybeRefOrGetter<Readonly<OrchestratedModal>>\n } = {}\n ) => {\n const [_promise, _self, _modelValue] = buildPrereqs()\n\n modals.value.push(\n computed({\n get: () => ({\n component: toValue(obj.component) ?? BModal,\n props: {\n ...toValue(obj.props),\n _isConfirm: false,\n _promise,\n _self,\n _modelValue: _modelValue.value,\n },\n }),\n set: (v) => {\n _modelValue.value = v.props._modelValue\n },\n })\n )\n\n return _promise.value\n }\n\n const confirm = (\n obj: {\n component?: MaybeRefOrGetter<Readonly<Component>>\n props?: MaybeRefOrGetter<Readonly<OrchestratedModal>>\n } = {}\n ) => {\n const [_promise, _self, _modelValue] = buildPrereqs()\n\n modals.value.push(\n computed({\n get: () => ({\n component: toValue(obj.component) ?? BModal,\n props: {\n ...toValue(obj.props),\n _isConfirm: true,\n _promise,\n _self,\n _modelValue: _modelValue.value,\n },\n }),\n set: (v) => {\n _modelValue.value = v.props._modelValue\n },\n })\n )\n\n return _promise.value\n }\n\n const leave = (self: symbol) => {\n const modal = modals.value.find((el) => el.value.props._self === self)\n if (modal !== undefined) {\n modal.value = {\n ...modal.value,\n props: {\n ...modal.value.props,\n _modelValue: false,\n },\n }\n }\n }\n\n const remove = (self: symbol) => {\n modals.value = modals.value.filter((el) => el.value.props._self !== self)\n }\n\n app.provide(modalControllerPluginKey, {\n modals,\n remove,\n show,\n confirm,\n leave,\n })\n },\n} satisfies Plugin\n","import {type ComponentInternalInstance, computed, type Plugin, type Ref, ref} from 'vue'\nimport {modalManagerPluginKey} from '../utils'\n\nexport default {\n install(app) {\n /**\n * A collection of all currently active modals\n *\n * It was made into a map so that if a modal is ever added into the stack twice, it will not be duplicated\n * (if modelValue is true when started, it gets added in setup scope, then a watcher is triggered and it gets added again in the next tick)\n * Didn't feel like fixing it in the modal component, so I just made it a map\n */\n const stack: Ref<Map<number, ComponentInternalInstance>> = ref(new Map())\n\n const countStack = computed(() => stack.value.size)\n const lastStack = computed(() => [...stack.value.values()].pop())\n\n const pushStack = (modal: Readonly<ComponentInternalInstance>) => {\n stack.value.set(modal.uid, modal)\n }\n const removeStack = (modal: Readonly<ComponentInternalInstance>) => {\n stack.value.delete(modal.uid)\n }\n\n /**\n * A collection of all registered modals\n */\n const registry: Ref<Map<number, ComponentInternalInstance>> = ref(new Map())\n\n // Utility getters not made, would not be used (count, last)\n\n const pushRegistry = (modal: Readonly<ComponentInternalInstance>) => {\n registry.value.set(modal.uid, modal)\n }\n const removeRegistry = (modal: Readonly<ComponentInternalInstance>) => {\n registry.value.delete(modal.uid)\n }\n\n app.provide(modalManagerPluginKey, {\n stack: computed(() => [...stack.value.values()]),\n countStack,\n lastStack,\n registry: computed(() => [...registry.value.values()]),\n pushStack,\n removeStack,\n pushRegistry,\n removeRegistry,\n })\n },\n} satisfies Plugin\n","import {type Plugin, ref} from 'vue'\nimport {rtlPluginKey} from '../utils'\nimport type {BootstrapVueOptions} from '../types'\n\nexport default {\n install(app, options: BootstrapVueOptions) {\n const rtlDefault = false\n const localeDefault = undefined\n\n const rtlInitial =\n typeof options?.rtl === 'boolean' ? rtlDefault : options?.rtl?.rtlInitial ?? rtlDefault\n\n const localeInitial =\n typeof options?.rtl === 'boolean'\n ? localeDefault\n : options?.rtl?.localeInitial ?? localeDefault\n\n const isRtl = ref(rtlInitial)\n const locale = ref(localeInitial)\n\n app.provide(rtlPluginKey, {isRtl, locale})\n },\n} satisfies Plugin\n","import {type Plugin, ref, type Ref} from 'vue'\nimport type {BootstrapVueOptions, BvnComponentProps} from '../types'\nimport {defaultsKey} from '../utils'\n\nexport default {\n install(app, options: BootstrapVueOptions) {\n const val = options?.components ?? {}\n app.provide(defaultsKey, ref(val) as Ref<Partial<BvnComponentProps>>)\n },\n} satisfies Plugin\n","import type * as Components from '../components'\nimport type * as Directives from '../directives'\nimport type * as Composables from '../composables/exports'\nimport type {BvnComponentProps} from './ComponentProps'\n\nexport type ComponentType = keyof typeof Components\nexport type DirectiveType = keyof typeof Directives\nexport type ComposableType = keyof typeof Composables\n\nexport const ComponentNames = Object.freeze(\n Object.keys({\n BAccordion: null,\n BAccordionItem: null,\n BAlert: null,\n BAvatar: null,\n BAvatarGroup: null,\n BBadge: null,\n BBreadcrumb: null,\n BBreadcrumbItem: null,\n BButton: null,\n BButtonGroup: null,\n BButtonToolbar: null,\n BCard: null,\n BCardBody: null,\n BCardFooter: null,\n BCardGroup: null,\n BCardHeader: null,\n BCardImg: null,\n BCardSubtitle: null,\n BCardText: null,\n BCardTitle: null,\n BCarousel: null,\n BCarouselSlide: null,\n BCloseButton: null,\n BCol: null,\n BCollapse: null,\n BContainer: null,\n BDropdown: null,\n BDropdownDivider: null,\n BDropdownForm: null,\n BDropdownGroup: null,\n BDropdownHeader: null,\n BDropdownItem: null,\n BDropdownItemButton: null,\n BDropdownText: null,\n BForm: null,\n BFormCheckbox: null,\n BFormCheckboxGroup: null,\n BFormDatalist: null,\n BFormFile: null,\n BFormFloatingLabel: null,\n BFormGroup: null,\n BFormInput: null,\n BFormInvalidFeedback: null,\n BFormRadio: null,\n BFormRadioGroup: null,\n BFormRow: null,\n BFormSelect: null,\n BFormSelectOption: null,\n BFormSelectOptionGroup: null,\n BFormSpinbutton: null,\n BFormTag: null,\n BFormTags: null,\n BFormText: null,\n BFormTextarea: null,\n BFormValidFeedback: null,\n BImg: null,\n BInput: null,\n BInputGroup: null,\n BInputGroupText: null,\n BListGroup: null,\n BListGroupItem: null,\n BModal: null,\n BModalOrchestrator: null,\n BNav: null,\n BNavForm: null,\n BNavItem: null,\n BNavItemDropdown: null,\n BNavText: null,\n BNavbar: null,\n BNavbarBrand: null,\n BNavbarNav: null,\n BNavbarToggle: null,\n BOffcanvas: null,\n BOverlay: null,\n BPagination: null,\n BPlaceholder: null,\n BPlaceholderButton: null,\n BPlaceholderCard: null,\n BPlaceholderTable: null,\n BPlaceholderWrapper: null,\n BPopover: null,\n BProgress: null,\n BRow: null,\n BSpinner: null,\n BTab: null,\n BTabs: null,\n BToast: null,\n BToastOrchestrator: null,\n BTooltip: null,\n BLink: null,\n BProgressBar: null,\n BTableSimple: null,\n BTableLite: null,\n BTable: null,\n BTbody: null,\n BTd: null,\n BTh: null,\n BThead: null,\n BTfoot: null,\n BTr: null,\n BTransition: null,\n } satisfies Record<ComponentType, null>) as ComponentType[]\n)\n\nexport const DirectiveNames = Object.freeze(\n Object.keys({\n vBColorMode: null,\n vBModal: null,\n vBPopover: null,\n vBScrollspy: null,\n vBToggle: null,\n vBTooltip: null,\n } satisfies Record<DirectiveType, null>) as DirectiveType[]\n)\n\nexport const ComposableNames = Object.freeze(\n Object.keys({\n useBreadcrumb: null,\n useColorMode: null,\n useModal: null,\n useModalController: null,\n useScrollspy: null,\n useToast: null,\n } satisfies Record<ComposableType, null>) as ComposableType[]\n)\n\nexport type ConfigurationOption<T extends string> = Partial<Record<T, boolean>> & {all: boolean}\n\nexport interface BootstrapVueOptions {\n /**\n * @default true\n */\n breadcrumb?: boolean\n /**\n * @default true\n */\n id?:\n | boolean\n /**\n * This function is allows users to provide a custom id generator\n * as a workaround for the lack of stable SSR IDs in Vue 3.x\n *\n * This lets the Nuxt module swap in the Nuxt `useId` function\n * which is stable across SSR and client.\n *\n * @default undefined\n */\n | {\n getId?: () => string\n }\n /**\n * @default true\n */\n modalController?: boolean\n /**\n * @default true\n */\n modalManager?: boolean\n /**\n * @default true\n */\n rtl?:\n | boolean\n | {\n /**\n * @default false\n */\n rtlInitial: boolean\n /**\n * @default undefined\n */\n localeInitial: string | undefined\n }\n /**\n * @default true\n */\n toast?: boolean\n components?: Partial<\n BvnComponentProps & {\n /**\n * @hint Globally sets all props with the matching name\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n global: Record<string, any>\n }\n >\n}\n","<template>\n <div :id=\"computedId\" class=\"accordion\" :class=\"computedClasses\">\n <slot />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, provide, readonly, toRef} from 'vue'\nimport {accordionInjectionKey} from '../../utils'\nimport {useDefaults, useId} from '../../composables'\nimport type {BAccordionProps} from '../../types'\n\nconst _props = withDefaults(defineProps<BAccordionProps>(), {\n flush: false,\n free: false,\n id: undefined,\n})\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst props = useDefaults(_props, 'BAccordion')\n\nconst modelValue = defineModel<string | undefined>({\n default: undefined,\n})\n\nconst computedId = useId(() => props.id, 'accordion')\n\nconst computedClasses = computed(() => ({\n 'accordion-flush': props.flush,\n}))\n\nprovide(accordionInjectionKey, {\n openItem: readonly(modelValue),\n free: toRef(() => props.free),\n setOpenItem: (id: string) => {\n modelValue.value = id\n },\n})\n</script>\n","<template>\n <slot name=\"header\" v-bind=\"sharedSlots\" />\n <component\n :is=\"props.tag\"\n :id=\"computedId\"\n ref=\"element\"\n class=\"collapse\"\n :class=\"computedClasses\"\n :is-nav=\"props.isNav\"\n v-bind=\"$attrs\"\n >\n <slot v-bind=\"sharedSlots\" />\n </component>\n <slot name=\"footer\" v-bind=\"sharedSlots\" />\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, nextTick, onMounted, provide, readonly, ref, toRef, watch} from 'vue'\nimport {useDefaults, useId} from '../composables'\nimport {useEventListener} from '@vueuse/core'\nimport {BvTriggerableEvent, collapseInjectionKey, getTransitionDelay} from '../utils'\nimport type {BCollapseProps} from '../types'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst _props = withDefaults(defineProps<BCollapseProps>(), {\n horizontal: false,\n id: undefined,\n isNav: false,\n skipAnimation: false,\n tag: 'div',\n toggle: false,\n visible: false,\n})\n\nconst props = useDefaults(_props, 'BCollapse')\n\nconst emit = defineEmits<{\n 'hidden': []\n 'hide': [value: BvTriggerableEvent]\n 'hide-prevented': []\n 'show': [value: BvTriggerableEvent]\n 'show-prevented': []\n 'shown': []\n}>()\n\ntype SharedSlotsData = {\n hide: () => void\n id: string\n show: () => void\n toggle: () => void\n visible: boolean\n}\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: SharedSlotsData) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n footer?: (props: SharedSlotsData) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n header?: (props: SharedSlotsData) => any\n}>()\n\nconst buildTriggerableEvent = (\n type: string,\n opts: Readonly<Partial<BvTriggerableEvent>> = {}\n): BvTriggerableEvent =>\n new BvTriggerableEvent(type, {\n cancelable: false,\n target: element.value || null,\n relatedTarget: null,\n trigger: null,\n ...opts,\n componentId: computedId.value,\n })\n\nconst modelValue = defineModel<boolean>({\n default: false,\n})\n\nconst computedId = useId(() => props.id, 'collapse')\n\nconst element = ref<HTMLElement | null>(null)\nconst isCollapsing = ref(false)\nconst showRef = ref(modelValue.value)\n\nconst computedClasses = computed(() => ({\n 'show': showRef.value,\n 'navbar-collapse': props.isNav,\n 'collapsing': isCollapsing.value,\n 'closing': showRef.value && !modelValue.value,\n 'collapse-horizontal': props.horizontal,\n}))\n\nconst hide = () => {\n modelValue.value = false\n}\nconst show = () => {\n modelValue.value = true\n}\nconst toggleFn = () => {\n modelValue.value = !modelValue.value\n}\n\nconst sharedSlots = computed<SharedSlotsData>(() => ({\n toggle: toggleFn,\n show,\n hide,\n id: computedId.value,\n visible: modelValue.value,\n}))\n\nlet revealTimeout: ReturnType<typeof setTimeout> | undefined\nlet hideTimeout: ReturnType<typeof setTimeout> | undefined\nlet _skipAnimation = props.skipAnimation\n\nconst reveal = () => {\n const event = buildTriggerableEvent('show', {cancelable: true})\n emit('show', event)\n if (event.defaultPrevented) {\n emit('show-prevented')\n return\n }\n clearTimeout(hideTimeout)\n clearTimeout(revealTimeout)\n showRef.value = true\n if (_skipAnimation) return\n isCollapsing.value = true\n nextTick(() => {\n if (element.value === null) return\n if (props.horizontal) {\n element.value.style.width = `${element.value.scrollWidth}px`\n } else {\n element.value.style.height = `${element.value.scrollHeight}px`\n }\n revealTimeout = setTimeout(() => {\n isCollapsing.value = false\n emit('shown')\n if (element.value === null) return\n element.value.style.height = ''\n element.value.style.width = ''\n }, getTransitionDelay(element.value))\n })\n}\n\nconst hideFn = () => {\n const event = buildTriggerableEvent('hide', {cancelable: true})\n emit('hide', event)\n if (event.defaultPrevented) {\n emit('hide-prevented')\n return\n }\n clearTimeout(revealTimeout)\n clearTimeout(hideTimeout)\n if (element.value === null) return\n if (_skipAnimation) {\n showRef.value = false\n return\n }\n if (isCollapsing.value) {\n element.value.style.height = ``\n element.value.style.width = ``\n // return\n } else {\n if (props.horizontal) {\n element.value.style.width = `${element.value.scrollWidth}px`\n } else {\n element.value.style.height = `${element.value.scrollHeight}px`\n }\n }\n // element.value.style.height = `${element.value.scrollHeight}px`\n element.value.offsetHeight // force reflow\n isCollapsing.value = true\n nextTick(() => {\n if (element.value === null) return\n element.value.style.height = ``\n element.value.style.width = ``\n hideTimeout = setTimeout(() => {\n showRef.value = false\n isCollapsing.value = false\n emit('hidden')\n }, getTransitionDelay(element.value))\n })\n}\n\nwatch(modelValue, () => {\n modelValue.value ? reveal() : hideFn()\n})\n\nonMounted(() => {\n if (element.value === null) return\n if (!modelValue.value && props.toggle) {\n nextTick(() => {\n modelValue.value = true\n })\n }\n})\n\nwatch(\n () => props.skipAnimation,\n (newval) => {\n _skipAnimation = newval\n }\n)\n\nif (props.visible) {\n _skipAnimation = true\n modelValue.value = true\n nextTick(() => {\n _skipAnimation = props.skipAnimation\n })\n}\n\nwatch(\n () => props.visible,\n (newval) => {\n _skipAnimation = true\n newval ? show() : hide()\n nextTick(() => {\n _skipAnimation = props.skipAnimation\n })\n }\n)\n\nuseEventListener(element, 'bv-toggle', () => {\n modelValue.value = !modelValue.value\n})\n\ndefineExpose({\n hide,\n isNav: props.isNav,\n show,\n toggle: toggleFn,\n visible: readonly(showRef),\n})\n\nprovide(collapseInjectionKey, {\n id: computedId,\n hide,\n show,\n toggle: toggleFn,\n visible: readonly(showRef),\n isNav: toRef(() => props.isNav),\n})\n</script>\n","<template>\n <div class=\"accordion-item\" v-bind=\"props.wrapperAttrs\" :class=\"wrapperClass\">\n <BCollapse\n :id=\"computedId\"\n v-model=\"modelValue\"\n class=\"accordion-collapse\"\n :class=\"props.collapseClass\"\n :aria-labelledby=\"`${computedId}-heading`\"\n v-bind=\"collapseAttrs\"\n :tag=\"props.tag\"\n :toggle=\"props.toggle\"\n :horizontal=\"props.horizontal\"\n :visible=\"props.visible\"\n :is-nav=\"props.isNav\"\n @show=\"emit('show', $event)\"\n @shown=\"emit('shown')\"\n @hide=\"emit('hide', $event)\"\n @hidden=\"emit('hidden')\"\n @hide-prevented=\"emit('hide-prevented')\"\n @show-prevented=\"emit('show-prevented')\"\n >\n <template #header=\"{visible: toggleVisible, toggle: slotToggle}\">\n <component\n :is=\"props.headerTag\"\n :id=\"`${computedId}-heading`\"\n class=\"accordion-header\"\n :class=\"props.headerClass\"\n v-bind=\"props.headerAttrs\"\n >\n <button\n class=\"accordion-button\"\n v-bind=\"props.buttonAttrs\"\n :class=\"[{collapsed: !toggleVisible}, props.buttonClass]\"\n type=\"button\"\n :aria-expanded=\"toggleVisible ? 'true' : 'false'\"\n :aria-controls=\"computedId\"\n @click=\"slotToggle\"\n >\n <slot name=\"title\"> {{ props.title }} </slot>\n </button>\n </component>\n </template>\n <div class=\"accordion-body\" v-bind=\"props.bodyAttrs\" :class=\"props.bodyClass\">\n <slot />\n </div>\n </BCollapse>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {inject, onMounted, useAttrs, watch} from 'vue'\nimport BCollapse from '../BCollapse.vue'\nimport {accordionInjectionKey, BvTriggerableEvent} from '../../utils'\nimport {useDefaults, useId} from '../../composables'\nimport type {BAccordionItemProps} from '../../types'\n\ndefineOptions({\n inheritAttrs: false,\n})\nconst {class: wrapperClass, ...collapseAttrs} = useAttrs()\n\nconst _props = withDefaults(defineProps<BAccordionItemProps>(), {\n bodyAttrs: undefined,\n bodyClass: undefined,\n buttonAttrs: undefined,\n buttonClass: undefined,\n collapseClass: undefined,\n headerAttrs: undefined,\n headerClass: undefined,\n headerTag: 'h2',\n horizontal: undefined,\n id: undefined,\n isNav: undefined,\n tag: undefined,\n title: undefined,\n toggle: undefined,\n visible: false,\n wrapperAttrs: undefined,\n})\nconst props = useDefaults(_props, 'BAccordionItem')\n\nconst emit = defineEmits<{\n 'hidden': []\n 'hide': [value: BvTriggerableEvent]\n 'hide-prevented': []\n 'show': [value: BvTriggerableEvent]\n 'show-prevented': []\n 'shown': []\n}>()\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n title?: (props: Record<string, never>) => any\n}>()\n\nconst modelValue = defineModel<boolean>({default: false})\n\nconst parentData = inject(accordionInjectionKey, null)\n\nconst computedId = useId(() => props.id, 'accordion_item')\n\nonMounted(() => {\n if (modelValue.value && !parentData?.free.value) {\n parentData?.setOpenItem(computedId.value)\n }\n if (!modelValue.value && parentData?.openItem.value === computedId.value) {\n modelValue.value = true\n }\n})\n\nwatch(\n () => parentData?.openItem.value,\n () =>\n (modelValue.value = parentData?.openItem.value === computedId.value && !parentData?.free.value)\n)\nwatch(modelValue, () => {\n if (modelValue.value && !parentData?.free.value) parentData?.setOpenItem(computedId.value)\n})\n</script>\n","<template>\n <BTransition :no-fade=\"!props.fade\" :trans-props=\"{enterToClass: 'show'}\">\n <div\n v-if=\"isAlertVisible\"\n ref=\"element\"\n class=\"alert\"\n role=\"alert\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n :class=\"computedClasses\"\n >\n <slot />\n <template v-if=\"props.dismissible\">\n <BButton v-if=\"hasCloseSlot || props.closeContent\" v-bind=\"closeAttrs\" @click=\"hide\">\n <slot name=\"close\">\n {{ props.closeContent }}\n </slot>\n </BButton>\n <BCloseButton v-else :aria-label=\"props.closeLabel\" v-bind=\"closeAttrs\" @click=\"hide\" />\n </template>\n </div>\n </BTransition>\n</template>\n\n<script setup lang=\"ts\">\nimport BTransition from '../BTransition/BTransition.vue'\nimport BCloseButton from '../BButton/BCloseButton.vue'\nimport BButton from '../BButton/BButton.vue'\nimport type {BAlertProps} from '../../types'\nimport {computed, onBeforeUnmount, ref, toRef, watch, watchEffect} from 'vue'\nimport {useCountdown, useDefaults} from '../../composables'\nimport {isEmptySlot} from '../../utils'\nimport {useElementHover, useToNumber} from '@vueuse/core'\n\nconst _props = withDefaults(defineProps<BAlertProps>(), {\n closeClass: undefined,\n closeContent: undefined,\n closeLabel: 'Close',\n closeVariant: 'secondary',\n dismissible: false,\n fade: false,\n immediate: true,\n interval: 1000,\n noHoverPause: false,\n showOnPause: true,\n variant: 'info',\n})\n\nconst props = useDefaults(_props, 'BAlert')\n\nconst emit = defineEmits<{\n 'close': []\n 'close-countdown': [value: number]\n 'closed': []\n}>()\n\nconst slots = defineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n close?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst element = ref<HTMLElement | null>(null)\n\nconst modelValue = defineModel<boolean | number>({default: false})\n\nconst isHovering = useElementHover(element)\n\nconst intervalNumber = useToNumber(() => props.interval)\n\nconst hasCloseSlot = toRef(() => !isEmptySlot(slots.close))\n\nconst countdownLength = toRef(() => (typeof modelValue.value === 'boolean' ? 0 : modelValue.value))\n\nconst computedClasses = computed(() => ({\n [`alert-${props.variant}`]: props.variant !== null,\n 'alert-dismissible': props.dismissible,\n}))\n\nconst closeClasses = computed(() => [props.closeClass, {'btn-close-custom': hasCloseSlot.value}])\n\nconst {\n isActive,\n pause,\n restart,\n resume,\n stop,\n isPaused,\n value: remainingMs,\n} = useCountdown(countdownLength, intervalNumber, {\n immediate: typeof modelValue.value === 'number' && props.immediate,\n})\n\nconst isAlertVisible = toRef(() =>\n typeof modelValue.value === 'boolean'\n ? modelValue.value\n : isActive.value || (props.showOnPause && isPaused.value)\n)\n\nconst closeAttrs = computed(() => ({\n variant: hasCloseSlot.value ? props.closeVariant : undefined,\n class: closeClasses.value,\n}))\n\nwatchEffect(() => {\n emit('close-countdown', remainingMs.value)\n})\n\nconst hide = () => {\n emit('close')\n\n if (typeof modelValue.value === 'boolean') {\n modelValue.value = false\n } else {\n modelValue.value = 0\n stop()\n }\n\n emit('closed')\n}\n\nconst onMouseEnter = () => {\n if (props.noHoverPause) return\n pause()\n}\n\nwatch(isHovering, (newValue) => {\n if (newValue) {\n onMouseEnter()\n return\n }\n resume()\n})\n\nonBeforeUnmount(stop)\n\ndefineExpose({\n pause,\n restart,\n resume,\n stop,\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.btn-close-custom {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n margin: var(--bs-alert-padding-y) var(--bs-alert-padding-x);\n}\n</style>\n","<script lang=\"ts\">\nimport {defineComponent, h, type PropType, type SlotsType, Teleport, type TeleportProps} from 'vue'\n\nexport default defineComponent({\n name: 'RenderComponentOrSkip',\n inheritAttrs: false,\n slots: Object as SlotsType<{\n default?: Record<string, never>\n }>,\n props: {\n tag: {\n type: String,\n default: 'div',\n },\n to: {\n type: [String, Object] as PropType<TeleportProps['to']>,\n default: null,\n },\n skip: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, {slots, attrs}) {\n return () =>\n props.skip\n ? slots.default?.()\n : props.tag === 'Teleport'\n ? h(Teleport, {to: props.to}, [slots.default?.()])\n : h(props.tag, {...attrs}, [slots.default?.()])\n },\n})\n</script>\n","<template>\n <component :is=\"computedTag\" class=\"badge\" :class=\"computedClasses\" v-bind=\"computedLinkProps\">\n <RenderComponentOrSkip\n :skip=\"props.dotIndicator !== true\"\n tag=\"span\"\n v-bind=\"props.dotIndicator ? {class: 'visually-hidden'} : {}\"\n >\n <slot />\n </RenderComponentOrSkip>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {useBLinkHelper, useColorVariantClasses, useDefaults} from '../../composables'\nimport {computed, toRef} from 'vue'\nimport type {BBadgeProps} from '../../types'\nimport BLink from '../BLink/BLink.vue'\nimport RenderComponentOrSkip from '../RenderComponentOrSkip.vue'\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst _props = withDefaults(defineProps<BBadgeProps>(), {\n dotIndicator: false,\n pill: false,\n tag: 'span',\n placement: undefined,\n // Link props\n variant: 'secondary',\n // All others use defaults\n active: undefined,\n activeClass: undefined,\n disabled: undefined,\n exactActiveClass: undefined,\n href: undefined,\n icon: undefined,\n opacity: undefined,\n opacityHover: undefined,\n rel: undefined,\n replace: undefined,\n routerComponentName: undefined,\n stretched: false,\n target: undefined,\n to: undefined,\n underlineOffset: undefined,\n underlineOffsetHover: undefined,\n underlineOpacity: undefined,\n underlineOpacityHover: undefined,\n underlineVariant: undefined,\n // End link props\n // ColorExtendables props\n // Variant is here as well\n textVariant: null,\n bgVariant: null,\n // End ColorExtendables props\n})\nconst props = useDefaults(_props, 'BBadge')\n\nconst resolvedBackgroundClasses = useColorVariantClasses(props)\n\nconst {computedLink, computedLinkProps} = useBLinkHelper(props, [\n 'active',\n 'activeClass',\n 'append',\n 'disabled',\n 'href',\n 'rel',\n 'replace',\n 'routerComponentName',\n 'target',\n 'to',\n 'opacity',\n 'opacityHover',\n 'underlineVariant',\n 'underlineOffset',\n 'underlineOffsetHover',\n 'underlineOpacity',\n 'underlineOpacityHover',\n 'icon',\n])\n\nconst computedTag = toRef(() => (computedLink.value ? BLink : props.tag))\n\nconst placementClasses = computed(() => {\n // dotindicator is implicitly top-end if no placement is set\n const pos = props.placement ?? (props.dotIndicator ? 'top-end' : undefined)\n return [\n 'position-absolute',\n 'translate-middle',\n {\n 'start-0 top-0': pos === 'top-start',\n 'start-0 top-50': pos === 'start',\n 'start-0 top-100': pos === 'bottom-start',\n 'start-50 top-0': pos === 'top',\n 'start-50 top-100': pos === 'bottom',\n 'start-100 top-0': pos === 'top-end',\n 'start-100 top-50': pos === 'end',\n 'start-100 top-100': pos === 'bottom-end',\n },\n ]\n})\n\nconst computedClasses = computed(() => [\n resolvedBackgroundClasses.value,\n props.placement !== undefined || props.dotIndicator === true ? placementClasses.value : undefined,\n {\n 'active': props.active,\n 'disabled': props.disabled,\n 'rounded-pill': props.pill,\n 'p-2 border border-light rounded-circle': props.dotIndicator,\n 'text-decoration-none': computedLink.value,\n },\n])\n</script>\n","<template>\n <component\n :is=\"computedTag\"\n class=\"b-avatar\"\n :class=\"computedClasses\"\n :style=\"computedStyle\"\n v-bind=\"computedLinkProps\"\n :type=\"props.button && !computedLink ? props.buttonType : undefined\"\n :disabled=\"props.disabled || null\"\n @click=\"clicked\"\n >\n <span v-if=\"hasDefaultSlot\" class=\"b-avatar-custom\">\n <slot />\n </span>\n <span v-else-if=\"!!props.src\" class=\"b-avatar-img\">\n <img :src=\"props.src\" :alt=\"props.alt\" @error=\"onImgError\" />\n </span>\n <span v-else-if=\"!!props.text\" class=\"b-avatar-text\" :style=\"textFontStyle\">\n {{ props.text }}\n </span>\n <span v-else class=\"b-avatar-img\"\n ><svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"80%\"\n height=\"80%\"\n fill=\"currentColor\"\n class=\"bi bi-person-fill\"\n viewBox=\"0 0 16 16\"\n >\n <path d=\"M3 14s-1 0-1-1 1-4 6-4 6 3 6 4-1 1-1 1zm5-6a3 3 0 1 0 0-6 3 3 0 0 0 0 6\" /></svg\n ></span>\n <BBadge\n v-if=\"showBadge\"\n :pill=\"props.badgePill\"\n :dot-indicator=\"props.badgeDotIndicator || badgeImplicitlyDot\"\n :variant=\"props.badgeVariant\"\n :bg-variant=\"props.badgeBgVariant\"\n :text-variant=\"props.badgeTextVariant\"\n :style=\"badgeStyle\"\n :placement=\"props.badgePlacement\"\n >\n <slot name=\"badge\">\n {{ badgeText }}\n </slot>\n </BBadge>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {avatarGroupInjectionKey, isEmptySlot} from '../../utils'\nimport {computed, type CSSProperties, inject, type StyleValue, toRef} from 'vue'\nimport type {BAvatarProps} from '../../types'\nimport {\n useBLinkHelper,\n useColorVariantClasses,\n useNumberishToStyle,\n useRadiusElementClasses,\n} from '../../composables'\nimport BLink from '../BLink/BLink.vue'\nimport BBadge from '../BBadge/BBadge.vue'\n\nconst props = withDefaults(defineProps<BAvatarProps>(), {\n alt: 'avatar',\n badge: false,\n badgeBgVariant: null,\n badgeTextVariant: null,\n badgeVariant: 'primary',\n badgePlacement: 'bottom-end',\n badgeDotIndicator: false,\n badgePill: false,\n button: false,\n buttonType: 'button',\n size: undefined,\n square: false,\n src: undefined,\n text: undefined,\n // Link props\n variant: 'secondary',\n // All others use defaults\n active: undefined,\n activeClass: undefined,\n disabled: undefined,\n exactActiveClass: undefined,\n href: undefined,\n opacity: undefined,\n opacityHover: undefined,\n rel: undefined,\n replace: undefined,\n stretched: false,\n routerComponentName: undefined,\n target: undefined,\n underlineOffset: undefined,\n underlineOffsetHover: undefined,\n underlineOpacity: undefined,\n underlineOpacityHover: undefined,\n underlineVariant: undefined,\n // End link props\n // ColorExtendables props\n // Variant is here as well\n bgVariant: null,\n textVariant: null,\n // End ColorExtendables props\n // RadiusElementExtendables props\n rounded: 'circle',\n roundedBottom: undefined,\n roundedEnd: undefined,\n roundedStart: undefined,\n roundedTop: undefined,\n // End RadiusElementExtendables props\n})\n\nconst emit = defineEmits<{\n 'click': [value: MouseEvent]\n 'img-error': [value: Event]\n}>()\n\nconst slots = defineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n badge?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst {computedLink, computedLinkProps} = useBLinkHelper(props)\n\nconst parentData = inject(avatarGroupInjectionKey, null)\n\nconst SIZES = ['sm', null, 'lg']\nconst FONT_SIZE_SCALE = 0.4\nconst BADGE_FONT_SIZE_SCALE = FONT_SIZE_SCALE * 0.7\n\nconst hasDefaultSlot = toRef(() => !isEmptySlot(slots.default))\nconst hasBadgeSlot = toRef(() => !isEmptySlot(slots.badge))\n\nconst showBadge = toRef(() => !!props.badge || props.badge === '' || hasBadgeSlot.value)\nconst computedSquare = toRef(() => parentData?.square.value || props.square)\n\nconst computedPropSize = useNumberishToStyle(() => props.size)\nconst computedParentSize = useNumberishToStyle(() => parentData?.size.value)\nconst computedSize = computed(() => computedParentSize.value ?? computedPropSize.value)\n\nconst computedVariant = toRef(() => parentData?.variant.value ?? props.variant)\nconst computedRounded = toRef(() => parentData?.rounded.value ?? props.rounded)\nconst computedRoundedTop = toRef(() => parentData?.roundedTop.value ?? props.roundedTop)\nconst computedRoundedBottom = toRef(() => parentData?.roundedBottom.value ?? props.roundedBottom)\nconst computedRoundedStart = toRef(() => parentData?.roundedStart.value ?? props.roundedStart)\nconst computedRoundedEnd = toRef(() => parentData?.roundedEnd.value ?? props.roundedEnd)\n\nconst radiusElementClasses = useRadiusElementClasses(() => ({\n rounded: computedRounded.value,\n roundedTop: computedRoundedTop.value,\n roundedBottom: computedRoundedBottom.value,\n roundedStart: computedRoundedStart.value,\n roundedEnd: computedRoundedEnd.value,\n}))\n\nconst badgeText = toRef(() => (props.badge === true ? '' : props.badge))\nconst badgeImplicitlyDot = computed(() => !badgeText.value && !hasBadgeSlot.value)\n\nconst computedTextVariant = toRef(() => parentData?.textVariant.value ?? props.textVariant)\nconst computedBgVariant = toRef(() => parentData?.bgVariant.value ?? props.bgVariant)\n\nconst resolvedBackgroundClasses = useColorVariantClasses(() => ({\n bgVariant: computedBgVariant.value,\n textVariant: computedTextVariant.value,\n variant: computedVariant.value,\n}))\n\nconst computedClasses = computed(() => [\n resolvedBackgroundClasses.value,\n // Square overwrites all else\n computedSquare.value === true ? undefined : radiusElementClasses.value,\n {\n [`b-avatar-${props.size}`]:\n !!props.size && SIZES.indexOf(computedPropSize.value as string) !== -1,\n [`btn-${computedVariant.value}`]: props.button ? computedVariant.value !== null : false,\n 'badge': !props.button && computedVariant.value !== null && hasDefaultSlot.value,\n 'btn': props.button,\n // Square is the same as rounded-0 class\n 'rounded-0': computedSquare.value === true,\n },\n])\n\nconst badgeStyle = computed<StyleValue>(() => ({\n fontSize:\n SIZES.indexOf((computedSize.value as string | undefined) || null) === -1\n ? `calc(${computedSize.value} * ${BADGE_FONT_SIZE_SCALE})`\n : '' || '',\n}))\n\nconst textFontStyle = computed<StyleValue>(() => {\n const fontSize =\n SIZES.indexOf((computedSize.value as string | undefined) || null) === -1\n ? `calc(${computedSize.value} * ${FONT_SIZE_SCALE})`\n : null\n return fontSize ? {fontSize} : {}\n})\n\nconst marginStyle = computed(() => {\n const overlapScale = parentData?.overlapScale?.value || 0\n\n const value =\n computedSize.value && overlapScale ? `calc(${computedSize.value} * -${overlapScale})` : null\n return value ? {marginLeft: value, marginRight: value} : {}\n})\n\nconst computedTag = toRef(() => (computedLink.value ? BLink : props.button ? 'button' : 'span'))\n\nconst computedStyle = computed<CSSProperties>(() => ({\n ...marginStyle.value,\n width: computedSize.value ?? undefined,\n height: computedSize.value ?? undefined,\n}))\n\nconst clicked = (e: Readonly<MouseEvent>): void => {\n if (!props.disabled && (computedLink.value || props.button)) emit('click', e)\n}\n\nconst onImgError = (e: Readonly<Event>) => {\n emit('img-error', e)\n}\n</script>\n","<template>\n <component :is=\"props.tag\" class=\"b-avatar-group\" role=\"group\">\n <div class=\"b-avatar-group-inner\" :style=\"paddingStyle\">\n <slot />\n </div>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, provide, type StyleValue, toRef} from 'vue'\nimport type {BAvatarGroupProps} from '../../types'\nimport {avatarGroupInjectionKey} from '../../utils'\nimport {useDefaults, useNumberishToStyle} from '../../composables'\nimport {useToNumber} from '@vueuse/core'\n\nconst _props = withDefaults(defineProps<BAvatarGroupProps>(), {\n overlap: 0.3,\n size: undefined,\n square: false,\n tag: 'div',\n // RadiusElementExtendables props\n rounded: 'circle',\n roundedBottom: undefined,\n roundedEnd: undefined,\n roundedStart: undefined,\n roundedTop: undefined,\n // End RadiusElementExtendables props\n // ColorExtendables props\n bgVariant: null,\n textVariant: null,\n variant: null,\n // End ColorExtendables props\n})\nconst props = useDefaults(_props, 'BAvatarGroup')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst overlapNumber = useToNumber(() => props.overlap)\n\nconst computedSize = useNumberishToStyle(() => props.size)\nconst overlapScale = toRef(() => Math.min(Math.max(overlapNumber.value, 0), 1) / 2)\n\nconst paddingStyle = computed<StyleValue>(() => {\n const value = computedSize.value ? `calc(${computedSize.value} * ${overlapScale.value})` : null\n return value ? {paddingLeft: value, paddingRight: value} : {}\n})\n\nprovide(avatarGroupInjectionKey, {\n overlapScale,\n size: toRef(() => props.size),\n square: toRef(() => props.square),\n rounded: toRef(() => props.rounded),\n roundedTop: toRef(() => props.roundedTop),\n roundedBottom: toRef(() => props.roundedBottom),\n roundedStart: toRef(() => props.roundedStart),\n roundedEnd: toRef(() => props.roundedEnd),\n variant: toRef(() => props.variant),\n bgVariant: toRef(() => props.bgVariant),\n textVariant: toRef(() => props.textVariant),\n})\n</script>\n","<template>\n <li class=\"breadcrumb-item\" :class=\"computedClasses\">\n <component\n :is=\"computedTag\"\n :aria-current=\"computedAriaCurrent\"\n v-bind=\"computedLinkProps\"\n @click=\"clicked\"\n >\n <slot>\n {{ props.text }}\n </slot>\n </component>\n </li>\n</template>\n\n<script setup lang=\"ts\">\nimport {pick} from '../../utils'\nimport {computed, toRef} from 'vue'\nimport BLink from '../BLink/BLink.vue'\nimport type {BBreadcrumbItemProps} from '../../types'\nimport {useDefaults} from '../../composables'\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst _props = withDefaults(defineProps<BBreadcrumbItemProps>(), {\n ariaCurrent: 'location',\n text: undefined,\n // Link props\n active: false, // Why is this active: false?\n // All others use defaults\n activeClass: undefined,\n disabled: undefined,\n exactActiveClass: undefined,\n href: undefined,\n icon: undefined,\n opacity: undefined,\n opacityHover: undefined,\n stretched: false,\n rel: undefined,\n replace: undefined,\n routerComponentName: undefined,\n routerTag: undefined,\n target: undefined,\n to: undefined,\n underlineOffset: undefined,\n underlineOffsetHover: undefined,\n underlineOpacity: undefined,\n underlineOpacityHover: undefined,\n underlineVariant: undefined,\n variant: undefined,\n // End link props\n})\nconst props = useDefaults(_props, 'BBreadcrumbItem')\n\nconst emit = defineEmits<{\n click: [value: MouseEvent]\n}>()\n\nconst computedClasses = computed(() => ({\n active: props.active,\n}))\n\nconst computedTag = toRef(() => (props.active ? 'span' : BLink))\n\nconst computedAriaCurrent = toRef(() => (props.active ? props.ariaCurrent : undefined))\n\nconst computedLinkProps = computed(() =>\n computedTag.value !== 'span'\n ? pick(props, [\n 'active',\n 'activeClass',\n 'append',\n 'disabled',\n 'href',\n 'rel',\n 'replace',\n 'routerComponentName',\n 'target',\n 'to',\n 'variant',\n 'opacity',\n 'opacityHover',\n 'underlineVariant',\n 'underlineOffset',\n 'underlineOffsetHover',\n 'underlineOpacity',\n 'underlineOpacityHover',\n 'icon',\n ])\n : {}\n)\n\nconst clicked = (e: Readonly<MouseEvent>): void => {\n if (props.disabled || props.active) {\n e.preventDefault()\n e.stopImmediatePropagation()\n return\n }\n if (!props.disabled) emit('click', e)\n}\n</script>\n","<template>\n <nav aria-label=\"breadcrumb\">\n <ol class=\"breadcrumb\">\n <slot name=\"prepend\" />\n <BBreadcrumbItem v-for=\"(item, i) in breadcrumbItemObjects\" :key=\"i\" v-bind=\"item\">\n {{ item.text }}\n </BBreadcrumbItem>\n <slot />\n <slot name=\"append\" />\n </ol>\n </nav>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed} from 'vue'\nimport {useBreadcrumb, useDefaults} from '../../composables'\nimport type {BBreadcrumbProps, BreadcrumbItem} from '../../types'\nimport BBreadcrumbItem from './BBreadcrumbItem.vue'\n\nconst _props = withDefaults(defineProps<BBreadcrumbProps>(), {items: undefined})\nconst props = useDefaults(_props, 'BBreadcrumb')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n prepend?: (props: Record<string, never>) => any\n}>()\n\nconst breadcrumb = useBreadcrumb()\n\nconst breadcrumbItemObjects = computed<BreadcrumbItem[]>(() => {\n const localItems = props.items || breadcrumb.items?.value || []\n let activeDefined = false\n const items = localItems.map((item, idx) => {\n if (typeof item === 'string') {\n item = {text: item}\n if (idx < localItems.length - 1) item.href = '#'\n }\n if (item.active) activeDefined = true\n\n // Auto-detect active by position in list\n if (!item.active && !activeDefined) {\n item.active = idx + 1 === localItems.length\n }\n return item\n })\n return items\n})\n</script>\n","<template>\n <component :is=\"props.tag\" :class=\"computedClasses\" role=\"group\" :aria-label=\"props.ariaLabel\">\n <slot />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../../composables'\nimport type {BButtonGroupProps} from '../../types'\nimport {computed} from 'vue'\n\nconst _props = withDefaults(defineProps<BButtonGroupProps>(), {\n ariaLabel: 'Group',\n size: 'md',\n tag: 'div',\n vertical: false,\n})\nconst props = useDefaults(_props, 'BButtonGroup')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => ({\n 'btn-group': !props.vertical,\n [`btn-group-${props.size}`]: props.size !== 'md',\n 'btn-group-vertical': props.vertical,\n}))\n</script>\n","<template>\n <div\n :class=\"computedClasses\"\n class=\"btn-toolbar\"\n :role=\"props.role\"\n :aria-label=\"props.ariaLabel\"\n >\n <slot />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../../composables'\nimport type {BButtonToolbarProps} from '../../types'\nimport {computed} from 'vue'\n\nconst _props = withDefaults(defineProps<BButtonToolbarProps>(), {\n ariaLabel: 'Group',\n justify: false,\n role: 'toolbar',\n})\nconst props = useDefaults(_props, 'BButtonToolbar')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => ({\n 'justify-content-between': props.justify,\n}))\n</script>\n","<template>\n <component\n :is=\"props.tag\"\n :class=\"computedClasses\"\n :src=\"!props.blank ? props.src : computedBlankImgSrc\"\n :width=\"computedDimentions.width || undefined\"\n :height=\"computedDimentions.height || undefined\"\n :srcset=\"!props.blank ? computedSrcset : undefined\"\n :sizes=\"!props.blank ? computedSizes : undefined\"\n :loading=\"props.lazy ? 'lazy' : 'eager'\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport type {BImgProps} from '../types'\nimport {useDefaults, useRadiusElementClasses} from '../composables'\nimport {computed, toRef} from 'vue'\nimport {useToNumber} from '@vueuse/core'\n\nconst _props = withDefaults(defineProps<BImgProps>(), {\n blank: false,\n blankColor: 'transparent',\n block: false,\n fluid: false,\n fluidGrow: false,\n height: undefined,\n lazy: false,\n sizes: undefined,\n tag: 'img',\n src: undefined,\n srcset: undefined,\n placement: undefined,\n thumbnail: false,\n width: undefined,\n // RadiusElementExtendables props\n rounded: false,\n roundedBottom: undefined,\n roundedEnd: undefined,\n roundedStart: undefined,\n roundedTop: undefined,\n // End RadiusElementExtendables props\n})\nconst props = useDefaults(_props, 'BImg')\n\nconst heightNumber = useToNumber(() => props.height ?? NaN)\nconst widthNumber = useToNumber(() => props.width ?? NaN)\n\nconst radiusElementClasses = useRadiusElementClasses(() => ({\n rounded: props.rounded,\n roundedTop: props.roundedTop,\n roundedBottom: props.roundedBottom,\n roundedStart: props.roundedStart,\n roundedEnd: props.roundedEnd,\n}))\n\nconst computedSrcset = computed(() =>\n typeof props.srcset === 'string'\n ? props.srcset\n .split(',')\n .filter((x) => x)\n .join(',')\n : Array.isArray(props.srcset)\n ? props.srcset.filter((x) => x).join(',')\n : undefined\n)\n\nconst computedSizes = computed(() =>\n typeof props.sizes === 'string'\n ? props.sizes\n .split(',')\n .filter((x) => x)\n .join(',')\n : Array.isArray(props.sizes)\n ? props.sizes.filter((x) => x).join(',')\n : undefined\n)\n\nconst computedDimentions = computed<{height: number | undefined; width: number | undefined}>(() => {\n const width = Number.isNaN(widthNumber.value) ? undefined : widthNumber.value\n const height = Number.isNaN(heightNumber.value) ? undefined : heightNumber.value\n if (props.blank) {\n if (width !== undefined && height === undefined) return {height: width, width}\n if (width === undefined && height !== undefined) return {height, width: height}\n if (width === undefined && height === undefined) return {height: 1, width: 1}\n }\n return {\n width,\n height,\n }\n})\n\nconst computedBlankImgSrc = toRef(() =>\n makeBlankImgSrc(computedDimentions.value.width, computedDimentions.value.height, props.blankColor)\n)\n\nconst computedAlignment = computed(() => ({\n 'float-start': props.placement === 'start',\n 'float-end': props.placement === 'end',\n 'mx-auto': props.placement === 'center',\n}))\n\nconst computedClasses = computed(() => [\n radiusElementClasses.value,\n computedAlignment.value,\n {\n 'img-thumbnail': props.thumbnail,\n 'img-fluid': props.fluid || props.fluidGrow,\n 'w-100': props.fluidGrow,\n 'd-block': props.block || props.placement === 'center',\n },\n])\n\nconst makeBlankImgSrc = (width: number | undefined, height: number | undefined, color: string) =>\n `data:image/svg+xml;charset=UTF-8,${encodeURIComponent(`<svg width=\"${width}\" height=\"${height}\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${width} ${height}\" preserveAspectRatio=\"none\">\n <rect width=\"100%\" height=\"100%\" style=\"fill:${color};\"></rect>\n </svg>`)}`\n</script>\n","<template>\n <BImg v-bind=\"computedImgProps\" :class=\"baseAlignmentClasses\" />\n</template>\n\n<script setup lang=\"ts\">\nimport BImg from '../BImg.vue'\nimport type {BCardImgProps} from '../../types'\nimport {omit} from '../../utils'\nimport {computed} from 'vue'\nimport {useDefaults} from '../../composables'\n\nconst _props = withDefaults(defineProps<BCardImgProps>(), {\n placement: 'top',\n // BImg props\n blank: undefined,\n blankColor: undefined,\n block: undefined,\n fluid: undefined,\n fluidGrow: undefined,\n height: undefined,\n lazy: undefined,\n rounded: undefined,\n roundedBottom: undefined,\n roundedEnd: undefined,\n roundedStart: undefined,\n roundedTop: undefined,\n sizes: undefined,\n src: undefined,\n srcset: undefined,\n thumbnail: undefined,\n width: undefined,\n // End BImg props\n})\nconst props = useDefaults(_props, 'BCardImg')\n\nconst baseAlignmentClasses = computed(() => ({\n 'card-img-top': props.placement === 'top',\n // TODO implement this class\n 'card-img-end': props.placement === 'end',\n 'card-img-bottom': props.placement === 'bottom',\n // TODO implement this class\n 'card-img-start': props.placement === 'start',\n 'card-img': props.placement === 'overlay',\n}))\n\nconst computedImgProps = computed(() => omit(props, ['placement']))\n</script>\n","<template>\n <component :is=\"tag\" :class=\"computedClasses\">\n <!-- eslint-disable-next-line vue/no-v-html -->\n <div v-if=\"!!html\" v-html=\"html\" />\n <slot v-else>\n {{ text }}\n </slot>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed} from 'vue'\nimport type {BCardHeadFootProps} from '../../types'\nimport {useColorVariantClasses} from '../../composables'\n\nconst props = withDefaults(defineProps<BCardHeadFootProps>(), {\n borderVariant: null,\n html: undefined,\n tag: 'div',\n text: undefined,\n // ColorExtendables props\n bgVariant: null,\n textVariant: null,\n variant: null,\n // End ColorExtendables props\n})\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst resolvedBackgroundClasses = useColorVariantClasses(props)\n\nconst computedClasses = computed(() => [\n resolvedBackgroundClasses.value,\n {\n [`border-${props.borderVariant}`]: props.borderVariant !== null,\n },\n])\n</script>\n","<template>\n <BCardHeadFoot class=\"card-header\" v-bind=\"props\">\n <slot />\n </BCardHeadFoot>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../../composables'\nimport type {BCardHeadFootProps} from '../../types'\nimport BCardHeadFoot from './BCardHeadFoot.vue'\n\nconst _props = withDefaults(defineProps<BCardHeadFootProps>(), {\n borderVariant: undefined,\n html: undefined,\n tag: 'div',\n text: undefined,\n // ColorExtendables props\n bgVariant: undefined,\n textVariant: undefined,\n variant: undefined,\n // End ColorExtendables props\n})\nconst props = useDefaults(_props, 'BCardHeader')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n</script>\n","<template>\n <component :is=\"props.tag\" class=\"card-title\">\n <slot>\n {{ props.text }}\n </slot>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../../composables'\nimport type {BCardTitleProps} from '../../types'\n\nconst _props = withDefaults(defineProps<BCardTitleProps>(), {\n tag: 'h4',\n text: undefined,\n})\nconst props = useDefaults(_props, 'BCardTitle')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n</script>\n","<template>\n <component :is=\"props.tag\" class=\"card-subtitle mb-2\" :class=\"computedClasses\">\n <slot>\n {{ props.text }}\n </slot>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../../composables'\nimport type {BCardSubtitleProps} from '../../types'\nimport {computed} from 'vue'\n\nconst _props = withDefaults(defineProps<BCardSubtitleProps>(), {\n tag: 'h6',\n text: undefined,\n textVariant: 'body-secondary',\n})\nconst props = useDefaults(_props, 'BCardSubtitle')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => ({\n [`text-${props.textVariant}`]: props.textVariant !== null,\n}))\n</script>\n","<template>\n <component :is=\"props.tag\" :class=\"computedClasses\">\n <BCardTitle v-if=\"!!props.title || hasTitleSlot\" :tag=\"props.titleTag\">\n <slot name=\"title\">\n {{ props.title }}\n </slot>\n </BCardTitle>\n\n <BCardSubtitle\n v-if=\"!!props.subtitle || hasSubtitleSlot\"\n :tag=\"props.subtitleTag\"\n :text-variant=\"props.subtitleTextVariant\"\n >\n <slot name=\"subtitle\">\n {{ props.subtitle }}\n </slot>\n </BCardSubtitle>\n\n <slot>\n {{ props.text }}\n </slot>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, toRef} from 'vue'\nimport BCardTitle from './BCardTitle.vue'\nimport {isEmptySlot} from '../../utils'\nimport BCardSubtitle from './BCardSubtitle.vue'\nimport type {BCardBodyProps} from '../../types'\nimport {useColorVariantClasses, useDefaults} from '../../composables'\n\nconst _props = withDefaults(defineProps<BCardBodyProps>(), {\n overlay: false,\n subtitle: undefined,\n subtitleTag: 'h4',\n subtitleTextVariant: undefined,\n tag: 'div',\n text: undefined,\n title: undefined,\n titleTag: 'h4',\n // ColorExtendables props\n bgVariant: null,\n textVariant: null,\n variant: null,\n // End ColorExtendables props\n})\nconst props = useDefaults(_props, 'BCardBody')\n\nconst slots = defineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n subtitle?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n title?: (props: Record<string, never>) => any\n}>()\n\nconst resolvedBackgroundClasses = useColorVariantClasses(props)\n\nconst hasTitleSlot = toRef(() => !isEmptySlot(slots.title))\nconst hasSubtitleSlot = toRef(() => !isEmptySlot(slots.subtitle))\n\nconst computedClasses = computed(() => [\n resolvedBackgroundClasses.value,\n props.overlay ? 'card-img-overlay' : 'card-body',\n])\n</script>\n","<template>\n <BCardHeadFoot class=\"card-footer\" v-bind=\"props\">\n <slot>\n {{ props.text }}\n </slot>\n </BCardHeadFoot>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../../composables'\nimport type {BCardHeadFootProps} from '../../types'\nimport BCardHeadFoot from './BCardHeadFoot.vue'\n\nconst _props = withDefaults(defineProps<BCardHeadFootProps>(), {\n borderVariant: undefined,\n html: undefined,\n tag: 'div',\n text: undefined,\n // ColorExtendables props\n bgVariant: undefined,\n textVariant: undefined,\n variant: undefined,\n // End ColorExtendables props\n})\nconst props = useDefaults(_props, 'BCardFooter')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n</script>\n","<template>\n <component :is=\"props.tag\" class=\"card\" :class=\"computedClasses\">\n <ReusableImg.define>\n <slot name=\"img\">\n <BCardImg v-if=\"props.imgSrc\" v-bind=\"imgAttr\" />\n </slot>\n </ReusableImg.define>\n\n <ReusableImg.reuse v-if=\"props.imgPlacement !== 'bottom'\" />\n <BCardHeader\n v-if=\"props.header || hasHeaderSlot || props.headerHtml\"\n :bg-variant=\"props.headerBgVariant\"\n :variant=\"props.headerVariant\"\n :border-variant=\"props.headerBorderVariant\"\n :html=\"props.headerHtml\"\n :tag=\"props.headerTag\"\n :text-variant=\"props.headerTextVariant\"\n :class=\"props.headerClass\"\n >\n <slot name=\"header\">\n {{ props.header }}\n </slot>\n </BCardHeader>\n <BCardBody\n v-if=\"!props.noBody\"\n :overlay=\"props.imgPlacement === 'overlay'\"\n :bg-variant=\"props.bodyBgVariant\"\n :tag=\"props.bodyTag\"\n :text-variant=\"props.bodyTextVariant\"\n :subtitle=\"props.subtitle\"\n :subtitle-tag=\"props.subtitleTag\"\n :subtitle-text-variant=\"props.subtitleTextVariant\"\n :title=\"props.title\"\n :title-tag=\"props.titleTag\"\n :class=\"props.bodyClass\"\n >\n <slot>\n {{ props.bodyText }}\n </slot>\n </BCardBody>\n <slot v-else>\n {{ props.bodyText }}\n </slot>\n <BCardFooter\n v-if=\"props.footer || hasFooterSlot || props.footerHtml\"\n :bg-variant=\"props.footerBgVariant\"\n :border-variant=\"props.footerBorderVariant\"\n :variant=\"props.footerVariant\"\n :html=\"props.footerHtml\"\n :tag=\"props.footerTag\"\n :text-variant=\"props.footerTextVariant\"\n :class=\"props.footerClass\"\n >\n <slot name=\"footer\">\n {{ props.footer }}\n </slot>\n </BCardFooter>\n <ReusableImg.reuse v-if=\"props.imgPlacement === 'bottom'\" />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BCardProps} from '../../types'\nimport {isEmptySlot} from '../../utils'\nimport {computed, toRef} from 'vue'\nimport {useColorVariantClasses, useDefaults} from '../../composables'\nimport BCardImg from './BCardImg.vue'\nimport BCardHeader from './BCardHeader.vue'\nimport BCardBody from './BCardBody.vue'\nimport BCardFooter from './BCardFooter.vue'\nimport {createReusableTemplate} from '@vueuse/core'\n\nconst _props = withDefaults(defineProps<BCardProps>(), {\n align: undefined,\n bodyBgVariant: undefined,\n bodyClass: undefined,\n bodyTag: 'div',\n bodyText: '',\n bodyTextVariant: undefined,\n borderVariant: null,\n footer: undefined,\n footerBgVariant: undefined,\n footerBorderVariant: undefined,\n footerClass: undefined,\n footerHtml: '',\n footerTag: 'div',\n footerTextVariant: undefined,\n footerVariant: null,\n header: undefined,\n headerBgVariant: undefined,\n headerBorderVariant: undefined,\n headerClass: undefined,\n headerHtml: '',\n headerTag: 'div',\n headerTextVariant: undefined,\n headerVariant: null,\n imgAlt: undefined,\n imgPlacement: 'top',\n imgHeight: undefined,\n imgSrc: undefined,\n imgWidth: undefined,\n noBody: false,\n subtitle: undefined,\n subtitleTag: 'h6',\n subtitleTextVariant: 'body-secondary',\n tag: 'div',\n title: undefined,\n titleTag: 'h4',\n // ColorExtendables props\n bgVariant: null,\n textVariant: null,\n variant: null,\n // End ColorExtendables props\n})\nconst props = useDefaults(_props, 'BCard')\n\nconst slots = defineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n footer?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n header?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n img?: (props: Record<string, never>) => any\n}>()\n\nconst hasHeaderSlot = toRef(() => !isEmptySlot(slots.header))\nconst hasFooterSlot = toRef(() => !isEmptySlot(slots.footer))\n\nconst resolvedBackgroundClasses = useColorVariantClasses(props)\n\nconst computedClasses = computed(() => [\n resolvedBackgroundClasses.value,\n {\n [`text-${props.align}`]: props.align !== undefined,\n [`border-${props.borderVariant}`]: props.borderVariant !== null,\n 'flex-row': props.imgPlacement === 'start',\n 'flex-row-reverse': props.imgPlacement === 'end',\n },\n])\n\nconst imgAttr = computed(() => ({\n src: props.imgSrc,\n alt: props.imgAlt,\n height: props.imgHeight,\n width: props.imgWidth,\n placement: props.imgPlacement,\n}))\n\nconst ReusableImg = createReusableTemplate()\n</script>\n","<template>\n <component :is=\"props.tag\" :class=\"cardTypeClass\">\n <slot />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../../composables'\nimport type {BCardGroupProps} from '../../types'\nimport {toRef} from 'vue'\n\nconst _props = withDefaults(defineProps<BCardGroupProps>(), {\n columns: false,\n deck: false,\n tag: 'div',\n})\nconst props = useDefaults(_props, 'BCardGroup')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst cardTypeClass = toRef(() =>\n props.deck ? 'card-deck' : props.columns ? 'card-columns' : 'card-group'\n)\n</script>\n","<template>\n <component :is=\"props.tag\" class=\"card-text\">\n <slot>\n {{ props.text }}\n </slot>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../../composables'\nimport type {BCardTextProps} from '../../types'\n\nconst _props = withDefaults(defineProps<BCardTextProps>(), {\n tag: 'p',\n text: undefined,\n})\nconst props = useDefaults(_props, 'BCardText')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n</script>\n","<template>\n <div :id=\"computedId\" ref=\"element\" class=\"carousel slide pointer-event\" :class=\"computedClasses\">\n <div v-if=\"props.indicators\" class=\"carousel-indicators\">\n <!-- :data-bs-target=\"`#${computedId}`\" is required since the classes target elems with that attr -->\n <button\n v-for=\"(_, i) in slides.length\"\n :key=\"i\"\n type=\"button\"\n data-bs-target=\"\"\n :class=\"i === modelValue ? 'active' : ''\"\n :aria-current=\"i === modelValue ? true : undefined\"\n :aria-label=\"`${props.indicatorsButtonLabel} ${i}`\"\n @click=\"goToValue(i)\"\n />\n </div>\n\n <div ref=\"relatedTarget\" class=\"carousel-inner\">\n <TransitionGroup\n :enter-from-class=\"enterClasses\"\n :enter-active-class=\"enterClasses\"\n :enter-to-class=\"enterClasses\"\n :leave-from-class=\"leaveClasses\"\n :leave-active-class=\"leaveClasses\"\n :leave-to-class=\"leaveClasses\"\n @before-leave=\"onBeforeLeave\"\n @after-leave=\"onAfterLeave\"\n @after-enter=\"onAfterEnter\"\n @enter=\"onEnter\"\n >\n <component\n :is=\"slide\"\n v-for=\"(slide, i) in slides\"\n v-show=\"i === modelValue\"\n :key=\"i\"\n ref=\"slideValues\"\n :class=\"{active: i === modelValue && isTransitioning === false}\"\n />\n </TransitionGroup>\n </div>\n\n <template v-if=\"props.controls\">\n <button class=\"carousel-control-prev\" type=\"button\" @click=\"prev\">\n <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\" />\n <span class=\"visually-hidden\">{{ props.controlsPrevText }}</span>\n </button>\n <button class=\"carousel-control-next\" type=\"button\" @click=\"next\">\n <span class=\"carousel-control-next-icon\" aria-hidden=\"true\" />\n <span class=\"visually-hidden\">{{ props.controlsNextText }}</span>\n </button>\n </template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {BvCarouselEvent, carouselInjectionKey, getSlotElements} from '../../utils'\nimport {computed, onMounted, provide, ref, toRef, watch} from 'vue'\nimport {useDefaults, useId} from '../../composables'\nimport type {BCarouselProps, Numberish} from '../../types'\nimport {onKeyStroke, useElementHover, useIntervalFn, useSwipe, useToNumber} from '@vueuse/core'\nimport type BCarouselSlide from './BCarouselSlide.vue'\n\nconst _props = withDefaults(defineProps<BCarouselProps>(), {\n background: undefined,\n controls: false,\n controlsNextText: 'Next',\n controlsPrevText: 'Previous',\n fade: false,\n id: undefined,\n imgHeight: undefined,\n imgWidth: undefined,\n indicators: false,\n indicatorsButtonLabel: 'Slide',\n interval: 5000,\n keyboard: true,\n noHoverPause: false,\n noTouch: false,\n noWrap: false,\n // eslint-disable-next-line vue/require-valid-default-prop\n ride: false,\n rideReverse: false,\n touchThreshold: 50,\n})\nconst props = useDefaults(_props, 'BCarousel')\n\nconst emit = defineEmits<{\n slide: [value: BvCarouselEvent]\n slid: [value: BvCarouselEvent]\n}>()\n\nconst slots = defineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst computedId = useId(() => props.id, 'carousel')\n\nconst modelValue = defineModel<number>({default: 0})\n\nconst slideValues = ref<null | InstanceType<typeof BCarouselSlide>[]>(null)\n\nconst touchThresholdNumber = useToNumber(() => props.touchThreshold)\nconst slideInterval = ref<Numberish | null>(null)\nonMounted(() => {\n slideInterval.value =\n slideValues.value?.find((slid) => slid.$el.style.display !== 'none')?._interval ?? null\n})\nconst intervalNumber = useToNumber(() => slideInterval.value ?? props.interval)\n\nconst isTransitioning = ref(false)\nconst rideStarted = ref(false)\nconst direction = ref(true)\nconst relatedTarget = ref<HTMLElement | null>(null)\nconst element = ref<HTMLElement | null>(null)\nconst previousModelValue = ref(modelValue.value)\n\nconst isHovering = useElementHover(element)\n\n// Class carousel-item is a static property\n// If you make it static, the direction can be reversed -- properly (atm it does the carousel-item-${} logic backwards for entering, a weird hack)\n// So all that would be great. However, when you do this, it will break the transition flow. Something about it breaks and I'm not sure why!\n// Try it by removing carousel-item from below and making `!direction.value` => `direction.value` for enter\n// Then reviewing the behavior\nconst enterClasses = toRef(\n () =>\n `carousel-item carousel-item-${!direction.value ? 'next' : 'prev'} carousel-item-${\n !direction.value ? 'start' : 'end'\n }`\n)\nconst leaveClasses = toRef(\n () => `carousel-item active carousel-item-${direction.value ? 'start' : 'end'}`\n)\n\nconst {pause, resume} = useIntervalFn(\n () => {\n props.rideReverse ? prev() : next()\n },\n intervalNumber,\n {immediate: props.ride === 'carousel'}\n)\n\nconst isRiding = toRef(\n () => (props.ride === true && rideStarted.value === true) || props.ride === 'carousel'\n)\nconst slides = computed(() => getSlotElements(slots.default, 'BCarouselSlide'))\nconst computedClasses = computed(() => ({'carousel-fade': props.fade}))\n\nconst buildBvCarouselEvent = (event: 'slid' | 'slide') =>\n new BvCarouselEvent(event, {\n componentId: computedId.value,\n cancelable: false,\n target: element.value,\n direction: direction.value ? 'right' : 'left',\n from: previousModelValue.value,\n to: modelValue.value,\n relatedTarget: relatedTarget.value?.children[modelValue.value] ?? null,\n })\n\nconst goToValue = (value: number): void => {\n if (isTransitioning.value === true) return\n\n if (props.ride === true) {\n rideStarted.value = true\n }\n if (isRiding.value === true) {\n resume()\n }\n direction.value = value < modelValue.value ? false : true\n if (value >= slides.value.length) {\n if (props.noWrap) return\n modelValue.value = 0\n return\n }\n if (value < 0) {\n if (props.noWrap) return\n modelValue.value = slides.value.length - 1\n return\n }\n previousModelValue.value = modelValue.value\n modelValue.value = value\n}\n\nconst prev = (): void => {\n goToValue(modelValue.value - 1)\n}\nconst next = (): void => {\n goToValue(modelValue.value + 1)\n}\n\nconst onKeydown = (fn: () => void) => {\n if (props.keyboard === false) return\n fn()\n}\n\nconst onMouseEnter = () => {\n if (props.noHoverPause) return\n pause()\n}\nconst onMouseLeave = () => {\n if (!isRiding.value) return\n resume()\n}\n\nconst {lengthX} = useSwipe(element, {\n passive: true,\n onSwipeStart() {\n if (props.noTouch === true) return\n pause()\n },\n onSwipeEnd() {\n if (props.noTouch === true) return\n const resumeRiding = () => {\n if (isRiding.value === false) return\n resume()\n }\n if (lengthX.value >= touchThresholdNumber.value) {\n next()\n resumeRiding()\n return\n }\n if (lengthX.value <= -touchThresholdNumber.value) {\n prev()\n resumeRiding()\n }\n },\n})\n\nconst onBeforeLeave = () => {\n emit('slide', buildBvCarouselEvent('slide'))\n isTransitioning.value = true\n}\nconst onAfterLeave = () => {\n emit('slid', buildBvCarouselEvent('slid'))\n isTransitioning.value = false\n}\n// carousel-item class is removed from the slide during the transition,\n// as is included within enter classes.\n// The first slide recovers carousel-item class,\nconst onAfterEnter = (el: Readonly<Element>) => {\n if (modelValue.value !== 0) {\n el.classList.add('carousel-item')\n }\n}\nconst onEnter = (el: Readonly<Element>) => {\n slideInterval.value = slideValues.value?.find((slid) => slid.$el === el)?._interval ?? null\n}\n\nonKeyStroke(\n 'ArrowLeft',\n () => {\n onKeydown(prev)\n },\n {target: element}\n)\nonKeyStroke(\n 'ArrowRight',\n () => {\n onKeydown(next)\n },\n {target: element}\n)\n\nwatch(\n () => props.ride,\n () => {\n rideStarted.value = false\n }\n)\n\nwatch(isHovering, (newValue) => {\n if (newValue) {\n onMouseEnter()\n return\n }\n onMouseLeave()\n})\n\ndefineExpose({\n next,\n pause,\n prev,\n resume,\n})\n\nprovide(carouselInjectionKey, {\n background: toRef(() => props.background),\n width: toRef(() => props.imgWidth),\n height: toRef(() => props.imgHeight),\n})\n</script>\n","<template>\n <div class=\"carousel-item\" :style=\"computedStyle\">\n <slot name=\"img\">\n <BImg\n class=\"d-block w-100\"\n :alt=\"props.imgAlt\"\n :srcset=\"props.imgSrcset\"\n :src=\"props.imgSrc\"\n :width=\"props.imgWidth || parentData?.width.value\"\n :height=\"props.imgHeight || parentData?.height.value\"\n :blank=\"props.imgBlank\"\n :blank-color=\"props.imgBlankColor\"\n />\n </slot>\n <component\n :is=\"props.contentTag\"\n v-if=\"hasContent\"\n class=\"carousel-caption\"\n :class=\"computedContentClasses\"\n >\n <component :is=\"props.captionTag\" v-if=\"hasCaption\">\n <slot name=\"caption\">\n <!-- eslint-disable-next-line vue/no-v-html -->\n <span v-if=\"props.captionHtml\" v-html=\"props.captionHtml\" />\n <span v-else>{{ props.caption }}</span>\n </slot>\n </component>\n <component :is=\"props.textTag\" v-if=\"hasText\">\n <slot name=\"text\">\n <!-- eslint-disable-next-line vue/no-v-html -->\n <span v-if=\"props.textHtml\" v-html=\"props.textHtml\" />\n <span v-else>{{ props.text }}</span>\n </slot>\n </component>\n <slot />\n </component>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, type CSSProperties, inject, toRef} from 'vue'\nimport type {BCarouselSlideProps} from '../../types'\nimport {carouselInjectionKey, isEmptySlot} from '../../utils'\nimport BImg from '../BImg.vue'\nimport {useDefaults} from '../../composables'\n\nconst _props = withDefaults(defineProps<BCarouselSlideProps>(), {\n background: undefined,\n caption: undefined,\n captionHtml: undefined,\n captionTag: 'h3',\n contentTag: 'div',\n contentVisibleUp: undefined,\n id: undefined,\n imgAlt: undefined,\n imgBlank: false,\n imgBlankColor: 'transparent',\n imgHeight: undefined,\n imgSrc: undefined,\n imgSrcset: undefined,\n imgWidth: undefined,\n interval: undefined,\n text: undefined,\n textHtml: undefined,\n textTag: 'p',\n})\nconst props = useDefaults(_props, 'BCarouselSlide')\n\nconst slots = defineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n caption?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n img?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n text?: (props: Record<string, never>) => any\n}>()\n\nconst parentData = inject(carouselInjectionKey, null)\n\nconst hasText = toRef(() => props.text || props.textHtml || !isEmptySlot(slots.text))\nconst hasCaption = toRef(() => props.caption || props.captionHtml || !isEmptySlot(slots.caption))\nconst hasContent = toRef(() => hasText.value || hasCaption.value || !isEmptySlot(slots.default))\n\nconst computedStyle = computed<CSSProperties>(() => ({\n background: `${\n props.background || parentData?.background.value || 'rgb(171, 171, 171)'\n } none repeat scroll 0% 0%`,\n}))\n\nconst computedContentClasses = computed(() => ({\n 'd-none': props.contentVisibleUp !== undefined,\n [`d-${props.contentVisibleUp}-block`]: props.contentVisibleUp !== undefined,\n}))\n\ndefineExpose({\n _interval: toRef(() => props.interval),\n})\n</script>\n","<template>\n <component :is=\"props.tag\" :class=\"computedClasses\">\n <slot />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed} from 'vue'\nimport type {BColProps} from '../types'\nimport {getClasses} from '../utils'\nimport {useDefaults} from '../composables'\n\nconst _props = withDefaults(defineProps<BColProps>(), {\n alignSelf: undefined,\n col: false,\n cols: undefined,\n offset: undefined,\n order: undefined,\n tag: 'div',\n lg: false,\n md: false,\n sm: false,\n xl: false,\n xxl: false,\n offsetLg: undefined,\n offsetMd: undefined,\n offsetSm: undefined,\n offsetXl: undefined,\n offsetXxl: undefined,\n orderLg: undefined,\n orderMd: undefined,\n orderSm: undefined,\n orderXl: undefined,\n orderXxl: undefined,\n})\n\nconst props = useDefaults(_props, 'BCol')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst classList = computed(() => [\n ...getClasses(\n {\n sm: props.sm,\n md: props.md,\n lg: props.lg,\n xl: props.xl,\n xxl: props.xxl,\n },\n ['sm', 'md', 'lg', 'xl', 'xxl'],\n 'col'\n ),\n ...getClasses(\n {\n order: props.order,\n orderLg: props.orderLg,\n orderMd: props.orderMd,\n orderSm: props.orderSm,\n orderXl: props.orderXl,\n orderXxl: props.orderXxl,\n },\n ['order', 'orderLg', 'orderMd', 'orderSm', 'orderXl', 'orderXxl'],\n 'order'\n ),\n ...getClasses(\n {\n offset: props.offset,\n offsetLg: props.offsetLg,\n offsetMd: props.offsetMd,\n offsetSm: props.offsetSm,\n offsetXl: props.offsetXl,\n offsetXxl: props.offsetXxl,\n },\n ['offset', 'offsetLg', 'offsetMd', 'offsetSm', 'offsetXl', 'offsetXxl'],\n 'offset'\n ),\n])\n\nconst computedClasses = computed(() => [\n classList.value,\n {\n col: props.col || (!classList.value.some((v) => v.startsWith('col-')) && !props.cols),\n [`col-${props.cols}`]: props.cols !== undefined,\n [`offset-${props.offset}`]: props.offset !== undefined,\n [`order-${props.order}`]: props.order !== undefined,\n [`align-self-${props.alignSelf}`]: props.alignSelf !== undefined,\n },\n])\n</script>\n","<template>\n <component :is=\"props.tag\" :class=\"computedClasses\">\n <slot />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../composables'\nimport type {BContainerProps} from '../types'\nimport {computed} from 'vue'\n\nconst _props = withDefaults(defineProps<BContainerProps>(), {\n fluid: false,\n gutterX: undefined,\n gutterY: undefined,\n tag: 'div',\n})\nconst props = useDefaults(_props, 'BContainer')\n\nconst computedClasses = computed(() => ({\n container: props.fluid === false,\n [`container-fluid`]: props.fluid === true,\n [`container-${props.fluid}`]: typeof props.fluid === 'string',\n [`gx-${props.gutterX}`]: props.gutterX !== undefined,\n [`gy-${props.gutterY}`]: props.gutterY !== undefined,\n}))\n</script>\n","<template>\n <RenderComponentOrSkip\n ref=\"wrapper\"\n :skip=\"inInputGroup || props.skipWrapper\"\n :class=\"computedClasses\"\n >\n <BButton\n :id=\"computedId\"\n ref=\"splitButton\"\n :variant=\"props.splitVariant || props.variant\"\n :size=\"props.size\"\n :class=\"buttonClasses\"\n :disabled=\"props.splitDisabled || props.disabled\"\n :type=\"props.splitButtonType\"\n :aria-label=\"props.ariaLabel\"\n :aria-expanded=\"props.split ? undefined : modelValue\"\n :aria-haspopup=\"props.split ? undefined : 'menu'\"\n :href=\"props.split ? props.splitHref : undefined\"\n :to=\"props.split && props.splitTo ? props.splitTo : undefined\"\n @click=\"onSplitClick\"\n >\n <slot name=\"button-content\">\n {{ props.text }}\n </slot>\n </BButton>\n <BButton\n v-if=\"props.split\"\n ref=\"button\"\n :variant=\"props.variant\"\n :size=\"props.size\"\n :disabled=\"props.disabled\"\n :class=\"[props.toggleClass, {show: modelValue}]\"\n class=\"dropdown-toggle-split dropdown-toggle\"\n :aria-expanded=\"modelValue\"\n aria-haspopup=\"menu\"\n @click=\"onButtonClick\"\n >\n <span class=\"visually-hidden\">\n <slot name=\"toggle-text\">\n {{ props.toggleText }}\n </slot>\n </span>\n </BButton>\n <Teleport :to=\"props.teleportTo\" :disabled=\"!props.teleportTo || props.teleportDisabled\">\n <ul\n v-if=\"!props.lazy || modelValue\"\n v-show=\"props.lazy || modelValue\"\n ref=\"floating\"\n :style=\"[floatingStyles, sizeStyles]\"\n class=\"dropdown-menu overflow-auto\"\n :class=\"[props.menuClass, {show: modelValue}]\"\n :aria-labelledby=\"computedId\"\n :role=\"props.role\"\n @click=\"onClickInside\"\n >\n <slot :hide=\"hide\" :show=\"show\" />\n </ul>\n </Teleport>\n </RenderComponentOrSkip>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n autoUpdate,\n type Boundary,\n flip,\n type Middleware,\n offset as offsetMiddleware,\n type RootBoundary,\n shift,\n size as sizeMiddleware,\n useFloating,\n} from '@floating-ui/vue'\nimport {onClickOutside, onKeyStroke, useToNumber} from '@vueuse/core'\nimport {computed, type CSSProperties, inject, nextTick, provide, ref, toRef, watch} from 'vue'\nimport {useDefaults, useId} from '../../composables'\nimport type {BDropdownProps} from '../../types'\nimport {BvTriggerableEvent, dropdownInjectionKey, inputGroupKey} from '../../utils'\nimport BButton from '../BButton/BButton.vue'\nimport RenderComponentOrSkip from '../RenderComponentOrSkip.vue'\nimport {isBoundary, isRootBoundary, resolveFloatingPlacement} from '../../utils/floatingUi'\n\nconst _props = withDefaults(defineProps<BDropdownProps>(), {\n ariaLabel: undefined,\n autoClose: true,\n boundary: 'clippingAncestors',\n boundaryPadding: undefined,\n center: false,\n teleportTo: undefined,\n teleportDisabled: false,\n disabled: false,\n dropend: false,\n dropstart: false,\n dropup: false,\n end: false,\n floatingMiddleware: undefined,\n id: undefined,\n isNav: false,\n lazy: false,\n menuClass: undefined,\n noCaret: false,\n noFlip: false,\n noShift: false,\n noSize: false,\n offset: 0,\n role: 'menu',\n size: 'md',\n skipWrapper: false,\n split: false,\n splitButtonType: 'button',\n splitClass: undefined,\n splitDisabled: undefined,\n splitHref: undefined,\n splitTo: undefined,\n splitVariant: undefined,\n strategy: 'absolute',\n text: undefined,\n toggleClass: undefined,\n toggleText: 'Toggle dropdown',\n variant: 'secondary',\n wrapperClass: undefined,\n})\nconst props = useDefaults(_props, 'BDropdown')\n\nconst emit = defineEmits<{\n 'click': [event: MouseEvent]\n 'hidden': []\n 'hide': [value: BvTriggerableEvent]\n 'hide-prevented': []\n 'show': [value: BvTriggerableEvent]\n 'show-prevented': []\n 'shown': []\n 'toggle': []\n}>()\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'button-content'?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'default'?: (props: {hide: () => void; show: () => void}) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'toggle-text'?: (props: Record<string, never>) => any\n}>()\n\nconst computedId = useId(() => props.id, 'dropdown')\n\nconst modelValue = defineModel<boolean>({default: false})\n\nconst inInputGroup = inject(inputGroupKey, false)\n\nconst computedOffset = toRef(() =>\n typeof props.offset === 'string' || typeof props.offset === 'number' ? props.offset : NaN\n)\nconst offsetToNumber = useToNumber(computedOffset)\n\nconst floating = ref<HTMLElement | null>(null)\nconst button = ref<HTMLElement | null>(null)\nconst splitButton = ref<HTMLElement | null>(null)\nconst wrapper = ref<HTMLElement | null>(null)\n\nconst boundary = computed<Boundary | undefined>(() =>\n isBoundary(props.boundary) ? props.boundary : undefined\n)\nconst rootBoundary = computed<RootBoundary | undefined>(() =>\n isRootBoundary(props.boundary) ? props.boundary : undefined\n)\n\nconst referencePlacement = toRef(() => (!props.split ? splitButton.value : button.value))\n\nonKeyStroke(\n 'Escape',\n () => {\n modelValue.value = !modelValue.value\n },\n {target: referencePlacement}\n)\nonKeyStroke(\n 'Escape',\n () => {\n modelValue.value = !modelValue.value\n },\n {target: floating}\n)\n\nconst keynav = (e: Readonly<Event>, v: number) => {\n if (floating.value?.contains((e.target as HTMLElement)?.closest('form'))) return\n if (/input|select|option|textarea|form/i.test((e.target as HTMLElement)?.tagName)) return\n e.preventDefault()\n if (!modelValue.value) {\n open()\n nextTick(() => keynav(e, v))\n return\n }\n const list = floating.value?.querySelectorAll('.dropdown-item:not(.disabled):not(:disabled)')\n if (!list) return\n if (floating.value?.contains(document.activeElement)) {\n const active = floating.value.querySelector('.dropdown-item:focus')\n const index = Array.prototype.indexOf.call(list, active) + v\n if (index >= 0 && index < list?.length) (list[index] as HTMLElement)?.focus()\n } else {\n ;(list[v === -1 ? list.length - 1 : 0] as HTMLElement)?.focus()\n }\n}\n\nonKeyStroke('ArrowUp', (e) => keynav(e, -1), {target: referencePlacement})\nonKeyStroke('ArrowDown', (e) => keynav(e, 1), {target: referencePlacement})\nonKeyStroke('ArrowUp', (e) => keynav(e, -1), {target: floating})\nonKeyStroke('ArrowDown', (e) => keynav(e, 1), {target: floating})\n\nconst floatingPlacement = computed(() =>\n resolveFloatingPlacement({\n top: props.dropup,\n start: props.dropstart,\n end: props.dropend,\n alignCenter: props.center,\n alignEnd: props.end,\n })\n)\nconst sizeStyles = ref<CSSProperties>({})\nconst floatingMiddleware = computed<Middleware[]>(() => {\n if (props.floatingMiddleware !== undefined) {\n return props.floatingMiddleware\n }\n const localOffset =\n typeof props.offset === 'string' || typeof props.offset === 'number'\n ? offsetToNumber.value\n : props.offset\n const arr: Middleware[] = [offsetMiddleware(localOffset)]\n if (props.noFlip === false) {\n arr.push(\n flip({\n boundary: boundary.value,\n rootBoundary: rootBoundary.value,\n padding: props.boundaryPadding,\n })\n )\n }\n if (props.noShift === false) {\n arr.push(\n shift({\n boundary: boundary.value,\n rootBoundary: rootBoundary.value,\n padding: props.boundaryPadding,\n })\n )\n }\n if (props.noSize === false) {\n arr.push(\n sizeMiddleware({\n boundary: boundary.value,\n rootBoundary: rootBoundary.value,\n padding: props.boundaryPadding,\n apply({availableWidth, availableHeight}) {\n sizeStyles.value = {\n maxHeight: availableHeight && modelValue.value ? `${availableHeight}px` : undefined,\n maxWidth: availableWidth && modelValue.value ? `${availableWidth}px` : undefined,\n }\n },\n })\n )\n }\n return arr\n})\nconst {update, floatingStyles} = useFloating(referencePlacement, floating, {\n placement: floatingPlacement,\n middleware: floatingMiddleware,\n strategy: toRef(() => props.strategy),\n whileElementsMounted: autoUpdate,\n})\n\nconst computedClasses = computed(() => [\n props.wrapperClass,\n {\n 'btn-group': !props.wrapperClass && props.split,\n 'dropdown': !props.wrapperClass && !props.split,\n 'dropup': props.dropup,\n 'dropend': props.dropend,\n 'dropstart': props.dropstart,\n 'position-static': props.boundary !== 'clippingAncestors' && !props.isNav,\n },\n])\n\nconst buttonClasses = computed(() => [\n props.split ? props.splitClass : props.toggleClass,\n {\n 'nav-link': props.isNav,\n 'dropdown-toggle': !props.split,\n 'dropdown-toggle-no-caret': props.noCaret && !props.split,\n 'show': props.split ? undefined : modelValue.value,\n },\n])\n\nconst onButtonClick = () => {\n toggle()\n}\n\nconst onSplitClick = (event: Readonly<MouseEvent>) => {\n props.split ? emit('click', event) : onButtonClick()\n}\n\nonClickOutside(\n floating,\n () => {\n if (modelValue.value && (props.autoClose === true || props.autoClose === 'outside')) {\n toggle()\n }\n },\n {ignore: [button, splitButton]}\n)\nconst onClickInside = () => {\n if (modelValue.value && (props.autoClose === true || props.autoClose === 'inside')) {\n toggle()\n }\n}\n\nconst hide = () => {\n modelValue.value && toggle()\n}\nconst show = () => {\n modelValue.value || toggle()\n}\nconst toggle = () => {\n emit('toggle')\n const currentModelValue = modelValue.value\n const e = new BvTriggerableEvent(currentModelValue ? 'hide' : 'show')\n currentModelValue ? emit('hide', e) : emit('show', e)\n if (e.defaultPrevented) {\n currentModelValue ? emit('hide-prevented') : emit('show-prevented')\n return\n }\n modelValue.value = !currentModelValue\n currentModelValue ? emit('hidden') : emit('shown')\n wrapper.value?.dispatchEvent?.(new Event('forceHide'))\n}\n\nwatch(modelValue, () => {\n update()\n})\n\ndefineExpose({\n hide,\n show,\n toggle,\n})\n\nprovide(dropdownInjectionKey, {\n id: computedId,\n show,\n hide,\n toggle,\n visible: toRef(() => modelValue.value),\n isNav: toRef(() => props.isNav),\n})\n</script>\n","<template>\n <li role=\"presentation\">\n <component\n :is=\"props.tag\"\n class=\"dropdown-divider\"\n role=\"separator\"\n aria-orientation=\"horizontal\"\n />\n </li>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../../composables'\nimport type {BDropdownDividerProps} from '../../types'\n\nconst _props = withDefaults(defineProps<BDropdownDividerProps>(), {\n tag: 'hr',\n})\nconst props = useDefaults(_props, 'BDropdownDivider')\n</script>\n","<template>\n <li role=\"presentation\">\n <component\n :is=\"props.headerTag\"\n :id=\"headerId\"\n class=\"dropdown-header\"\n :class=\"computedClasses\"\n :role=\"headerRole\"\n >\n <slot name=\"header\">\n {{ props.header }}\n </slot>\n </component>\n <ul\n :id=\"props.id\"\n role=\"group\"\n class=\"list-unstyled\"\n v-bind=\"$attrs\"\n :aria-describedby=\"props.ariaDescribedby || headerId\"\n >\n <slot />\n </ul>\n </li>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../../composables'\nimport type {BDropdownGroupProps} from '../../types'\nimport {computed, toRef} from 'vue'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst _props = withDefaults(defineProps<BDropdownGroupProps>(), {\n ariaDescribedby: undefined,\n header: undefined,\n headerClass: undefined,\n headerTag: 'header',\n headerVariant: null,\n id: undefined,\n})\nconst props = useDefaults(_props, 'BDropdownGroup')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n header?: (props: Record<string, never>) => any\n}>()\n\nconst headerId = toRef(() => (props.id ? `${props.id}_group_dd_header` : undefined))\nconst headerRole = toRef(() => (props.headerTag === 'header' ? undefined : 'heading'))\n\nconst computedClasses = computed(() => [\n props.headerClass,\n {\n [`text-${props.headerVariant}`]: props.headerVariant !== null,\n },\n])\n</script>\n","<template>\n <li role=\"presentation\" :class=\"wrapperClass\" v-bind=\"props.wrapperAttrs\">\n <component\n :is=\"computedTag\"\n class=\"dropdown-item\"\n :class=\"computedClasses\"\n :disabled=\"props.disabled\"\n :aria-disabled=\"props.disabled ? true : null\"\n :aria-current=\"props.active ? true : null\"\n :href=\"computedTag === 'a' ? props.href : null\"\n :rel=\"props.rel\"\n role=\"menuitem\"\n :type=\"computedTag === 'button' ? 'button' : null\"\n :target=\"props.target\"\n v-bind=\"{...computedLinkProps, ...attrs}\"\n @click=\"clicked\"\n >\n <slot />\n </component>\n </li>\n</template>\n\n<script setup lang=\"ts\">\nimport BLink from '../BLink/BLink.vue'\nimport {computed, inject, toRef, useAttrs} from 'vue'\nimport type {BDropdownItemProps} from '../../types'\nimport {useBLinkHelper, useDefaults} from '../../composables'\nimport {collapseInjectionKey, dropdownInjectionKey, navbarInjectionKey} from '../../utils'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst _props = withDefaults(defineProps<BDropdownItemProps>(), {\n wrapperAttrs: undefined,\n // Link props\n linkClass: undefined,\n variant: null,\n // All others use defaults\n active: undefined,\n activeClass: undefined,\n disabled: undefined,\n exactActiveClass: undefined,\n href: undefined,\n icon: undefined,\n opacity: undefined,\n stretched: false,\n opacityHover: undefined,\n rel: undefined,\n replace: undefined,\n routerComponentName: undefined,\n target: undefined,\n to: undefined,\n underlineOffset: undefined,\n underlineOffsetHover: undefined,\n underlineOpacity: undefined,\n underlineOpacityHover: undefined,\n underlineVariant: undefined,\n // End link props\n})\nconst props = useDefaults(_props, 'BDropdownItem')\n\nconst emit = defineEmits<{\n click: [value: MouseEvent]\n}>()\n\nconst {class: wrapperClass, ...attrs} = useAttrs()\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst {computedLink, computedLinkProps} = useBLinkHelper(props)\n\nconst computedClasses = computed(() => [\n props.linkClass,\n {\n active: props.active,\n disabled: props.disabled,\n [`text-${props.variant}`]: props.variant !== null,\n },\n])\n\nconst computedTag = toRef(() => (computedLink.value ? BLink : props.href ? 'a' : 'button'))\n\nconst collapseData = inject(collapseInjectionKey, null)\nconst dropdownData = inject(dropdownInjectionKey, null)\nconst navbarData = inject(navbarInjectionKey, null)\n\n// Pretty sure this emits if computedTag is not button and is disabled\nconst clicked = (e: Readonly<MouseEvent>): void => {\n emit('click', e)\n if (navbarData !== null && navbarData?.autoClose?.value === true) {\n collapseData?.hide?.()\n }\n dropdownData?.hide?.()\n}\n</script>\n","<template>\n <li role=\"presentation\" :class=\"wrapperClass\" v-bind=\"props.wrapperAttrs\">\n <button\n role=\"menu\"\n type=\"button\"\n class=\"dropdown-item\"\n :class=\"computedClasses\"\n :disabled=\"props.disabled\"\n v-bind=\"attrs\"\n @click=\"clicked\"\n >\n <slot />\n </button>\n </li>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../../composables'\nimport type {BDropdownItemButtonProps} from '../../types'\nimport {computed, useAttrs} from 'vue'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst _props = withDefaults(defineProps<BDropdownItemButtonProps>(), {\n active: false,\n activeClass: 'active',\n buttonClass: undefined,\n disabled: false,\n variant: null,\n wrapperAttrs: undefined,\n})\nconst props = useDefaults(_props, 'BDropdownItemButton')\n\nconst emit = defineEmits<{\n click: [value: MouseEvent]\n}>()\n\nconst {class: wrapperClass, ...attrs} = useAttrs()\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => [\n props.buttonClass,\n {\n [props.activeClass]: props.active,\n disabled: props.disabled,\n [`text-${props.variant}`]: props.variant !== null,\n },\n])\n\nconst clicked = (e: Readonly<MouseEvent>) => {\n emit('click', e)\n}\n</script>\n","<template>\n <li role=\"presentation\">\n <span class=\"dropdown-item-text\" v-bind=\"$attrs\">\n <slot>\n {{ props.text }}\n </slot>\n </span>\n </li>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../../composables'\nimport type {BDropdownTextProps} from '../../types'\n\nconst _props = withDefaults(defineProps<BDropdownTextProps>(), {\n text: '',\n})\nconst props = useDefaults(_props, 'BDropdownText')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n</script>\n","<template>\n <form :id=\"props.id\" ref=\"element\" :novalidate=\"props.novalidate\" :class=\"computedClasses\">\n <slot />\n </form>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../../composables'\nimport type {BFormProps} from '../../types'\nimport {computed, ref} from 'vue'\n\nconst _props = withDefaults(defineProps<BFormProps>(), {\n id: undefined,\n floating: false,\n novalidate: false,\n validated: false,\n})\nconst props = useDefaults(_props, 'BForm')\n\nconst element = ref<HTMLFormElement | null>(null)\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => ({\n 'form-floating': props.floating,\n 'was-validated': props.validated,\n}))\n\ndefineExpose({\n element,\n})\n</script>\n","<template>\n <option :value=\"props.value\" :disabled=\"props.disabled\">\n <slot />\n </option>\n</template>\n\n<script setup lang=\"ts\" generic=\"T\">\nimport {useDefaults} from '../../composables'\nimport type {BFormSelectOptionProps} from '../../types'\n\nconst _props = withDefaults(defineProps<BFormSelectOptionProps<T>>(), {\n disabled: false,\n value: undefined,\n})\nconst props = useDefaults<BFormSelectOptionProps<T>>(_props, 'BFormSelectOption')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n</script>\n","<template>\n <datalist :id=\"computedId\">\n <slot name=\"first\" />\n <template v-for=\"(option, index) in normalizedOptsWrapper\" :key=\"index\">\n <BFormSelectOption :value=\"option.value\" :disabled=\"option.disabled\">\n <!-- eslint-disable-next-line vue/no-v-html -->\n <span v-if=\"!!option.html\" v-html=\"option.html\" />\n <template v-else>\n {{ option.text }}\n </template>\n </BFormSelectOption>\n </template>\n <slot />\n </datalist>\n</template>\n\n<script setup lang=\"ts\" generic=\"T\">\nimport type {BFormDatalistProps, SelectOption} from '../../types'\nimport {computed} from 'vue'\nimport BFormSelectOption from '../BFormSelect/BFormSelectOption.vue'\nimport {useDefaults, useFormSelect, useId} from '../../composables'\n\nconst _props = withDefaults(defineProps<BFormDatalistProps>(), {\n disabled: false,\n disabledField: 'disabled',\n htmlField: 'html',\n id: undefined,\n // eslint-disable-next-line vue/require-valid-default-prop\n options: () => [],\n textField: 'text',\n valueField: 'value',\n})\nconst props = useDefaults(_props, 'BFormDatalist')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n first?: (props: Record<string, never>) => any\n}>()\n\nconst computedId = useId(() => props.id, 'datalist')\n\nconst {normalizedOptions, isComplex} = useFormSelect(\n () => props.options,\n computed(() => ({...props, optionsField: 'options', labelField: 'label'}))\n)\n\nconst normalizedOptsWrapper = computed(\n () =>\n // Datalist doesn't support complex options\n normalizedOptions.value.filter((opt) => !isComplex(opt)) as readonly SelectOption<T>[]\n)\n</script>\n","<template>\n <div class=\"form-floating\">\n <slot />\n <label :for=\"props.labelFor\">\n <slot name=\"label\">\n {{ props.label }}\n </slot>\n </label>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../../composables'\nimport type {BFormFloatingLabelProps} from '../../types'\n\nconst _props = withDefaults(defineProps<BFormFloatingLabelProps>(), {\n label: undefined,\n labelFor: undefined,\n text: undefined,\n})\nconst props = useDefaults(_props, 'BFormFloatingLabel')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n label?: (props: Record<string, never>) => any\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, toRef} from 'vue'\nimport type {BFormFeedbackSharedProps} from '../../types'\nimport {useDefaults} from '../../composables'\n\nconst _props = withDefaults(defineProps<BFormFeedbackSharedProps>(), {\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')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst computedShow = toRef(() => props.forceShow === true || 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 {useDefaults} from '../../composables'\nimport type {BFormRowProps} from '../../types'\n\nconst _props = withDefaults(defineProps<BFormRowProps>(), {\n tag: 'div',\n})\nconst props = useDefaults(_props, 'BFormRow')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default: (props: Record<string, never>) => any\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 type {BFormTextProps} from '../../types'\nimport {useDefaults} from '../../composables'\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')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => ({\n [`text-${props.textVariant}`]: props.textVariant !== null,\n 'form-text': !props.inline,\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, toRef} from 'vue'\nimport type {BFormFeedbackSharedProps} from '../../types'\nimport {useDefaults} from '../../composables'\n\nconst _props = withDefaults(defineProps<BFormFeedbackSharedProps>(), {\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')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst computedShow = toRef(() => 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 <RenderComponentOrSkip\n :skip=\"isButtonGroup\"\n v-bind=\"props.wrapperAttrs\"\n :class=\"computedWrapperClasses\"\n >\n <input\n :id=\"computedId\"\n ref=\"input\"\n v-model=\"localValue\"\n :class=\"computedInputClasses\"\n type=\"checkbox\"\n :disabled=\"props.disabled || parentData?.disabled.value\"\n :required=\"computedRequired || undefined\"\n :name=\"props.name || parentData?.name.value\"\n :form=\"props.form || parentData?.form.value\"\n :aria-label=\"props.ariaLabel\"\n :aria-labelledby=\"props.ariaLabelledby\"\n :aria-required=\"computedRequired || undefined\"\n :value=\"props.value\"\n :true-value=\"props.value\"\n :false-value=\"props.uncheckedValue\"\n :indeterminate=\"props.indeterminate\"\n v-bind=\"inputAttrs\"\n />\n <label v-if=\"hasDefaultSlot || props.plain === false\" :for=\"computedId\" :class=\"labelClasses\">\n <slot />\n </label>\n </RenderComponentOrSkip>\n</template>\n\n<script setup lang=\"ts\">\nimport {useFocus} from '@vueuse/core'\nimport {computed, inject, ref, toRef, useAttrs} from 'vue'\nimport {getClasses, getInputClasses, getLabelClasses, useDefaults, useId} from '../../composables'\nimport type {BFormCheckboxProps, CheckboxValue} from '../../types'\nimport {checkboxGroupKey, isEmptySlot} from '../../utils'\nimport RenderComponentOrSkip from '../RenderComponentOrSkip.vue'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst {class: wrapperClass, ...inputAttrs} = useAttrs()\n\nconst _props = withDefaults(defineProps<BFormCheckboxProps>(), {\n wrapperAttrs: undefined,\n inputClass: undefined,\n ariaLabel: undefined,\n ariaLabelledby: undefined,\n autofocus: false,\n button: false,\n buttonGroup: false,\n buttonVariant: null,\n disabled: false,\n form: undefined,\n id: undefined,\n inline: false,\n name: undefined,\n plain: false,\n required: undefined,\n reverse: false,\n size: undefined,\n state: null,\n switch: false,\n uncheckedValue: false,\n value: true,\n})\nconst props = useDefaults(_props, 'BFormCheckbox')\n\nconst slots = defineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst modelValue = defineModel<CheckboxValue | CheckboxValue[]>({\n default: undefined,\n})\nconst indeterminate = defineModel<boolean>('indeterminate', {\n default: false,\n})\n\nconst computedId = useId(() => props.id, 'form-check')\n\nconst parentData = inject(checkboxGroupKey, null)\n\nconst input = ref<HTMLElement | null>(null)\n\nconst {focused} = useFocus(input, {\n initialValue: props.autofocus,\n})\n\nconst hasDefaultSlot = toRef(() => !isEmptySlot(slots.default))\n\nconst localValue = computed({\n get: () => (parentData ? parentData.modelValue.value : modelValue.value),\n set: (newVal) => {\n if (newVal === undefined) return\n // Indeterminate is implicitly cleared when the checked state is changed to any value\n // by the user. We reflect that here by setting our indetermiate model to false\n // which will emit the indeterminate event to the parent\n indeterminate.value = false\n if (parentData !== null && Array.isArray(newVal)) {\n // The type cast isn't perfect. Array.isArray detects CheckboxValue.unknown[],\n // but since it's parentData, it should always be CheckboxValue[]\n // It doesn't quite work when props.value is an [], but this is more of a Vue issue\n parentData.modelValue.value = newVal as CheckboxValue[]\n return\n }\n modelValue.value = newVal as CheckboxValue\n },\n})\n\nconst computedRequired = toRef(\n () => !!(props.name ?? parentData?.name.value) && (props.required || parentData?.required.value)\n)\n\nconst isButtonGroup = toRef(() => props.buttonGroup || (parentData?.buttons.value ?? false))\n\nconst classesObject = computed(() => ({\n plain: props.plain || (parentData?.plain.value ?? false),\n button: props.button || (parentData?.buttons.value ?? false),\n inline: props.inline || (parentData?.inline.value ?? false),\n reverse: props.reverse || (parentData?.reverse.value ?? false),\n switch: props.switch || (parentData?.switch.value ?? false),\n state:\n props.state === true || props.state === false ? props.state : parentData?.state.value ?? null,\n size: props.size ?? parentData?.size.value ?? 'md', // This is where the true default is made\n buttonVariant: props.buttonVariant ?? parentData?.buttonVariant.value ?? 'secondary', // This is where the true default is made\n hasDefaultSlot: hasDefaultSlot.value,\n}))\nconst wrapperClasses = getClasses(classesObject)\nconst computedWrapperClasses = computed(() => [wrapperClasses.value, wrapperClass])\nconst inputClasses = getInputClasses(classesObject)\nconst computedInputClasses = computed(() => [inputClasses.value, props.inputClass])\nconst labelClasses = getLabelClasses(classesObject)\n\ndefineExpose({\n blur: () => {\n focused.value = false\n },\n element: input,\n focus: () => {\n focused.value = true\n },\n})\n</script>\n","<template>\n <div\n v-bind=\"computedAttrs\"\n :id=\"computedId\"\n ref=\"element\"\n role=\"group\"\n :class=\"computedClasses\"\n class=\"bv-no-focus-ring\"\n tabindex=\"-1\"\n >\n <slot name=\"first\" />\n <BFormCheckbox v-for=\"item in normalizeOptions\" :key=\"item.self\" v-bind=\"item.props\">\n <!-- eslint-disable-next-line vue/no-v-html -->\n <span v-if=\"!!item.html\" v-html=\"item.html\" />\n <template v-else>\n {{ item.text }}\n </template>\n </BFormCheckbox>\n <slot />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, provide, ref, toRef} from 'vue'\nimport BFormCheckbox from './BFormCheckbox.vue'\nimport type {BFormCheckboxGroupProps, CheckboxValue} from '../../types'\nimport {getGroupAttr, getGroupClasses, useDefaults, useId} from '../../composables'\nimport {checkboxGroupKey} from '../../utils'\nimport {useFocus} from '@vueuse/core'\n\nconst _props = withDefaults(defineProps<BFormCheckboxGroupProps>(), {\n ariaInvalid: undefined,\n autofocus: false,\n buttonVariant: 'secondary',\n buttons: false,\n disabled: false,\n disabledField: 'disabled',\n form: undefined,\n htmlField: 'html',\n id: undefined,\n name: undefined,\n options: () => [],\n plain: false,\n required: false,\n reverse: false,\n size: 'md',\n stacked: false,\n state: null,\n switches: false,\n textField: 'text',\n validated: false,\n valueField: 'value',\n})\nconst props = useDefaults(_props, 'BFormCheckboxGroup')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n first?: (props: Record<string, never>) => any\n}>()\n\nconst modelValue = defineModel<CheckboxValue[]>({\n default: () => [],\n})\n\nconst computedId = useId(() => props.id, 'checkbox')\nconst computedName = useId(() => props.name, 'checkbox')\n\nconst element = ref<HTMLElement | null>(null)\n\nconst {focused} = useFocus(element, {\n initialValue: props.autofocus,\n})\n\nprovide(checkboxGroupKey, {\n modelValue,\n switch: toRef(() => props.switches),\n buttonVariant: toRef(() => props.buttonVariant),\n form: toRef(() => props.form),\n name: computedName,\n state: toRef(() => props.state),\n plain: toRef(() => props.plain),\n size: toRef(() => props.size),\n inline: toRef(() => !props.stacked),\n reverse: toRef(() => props.reverse),\n required: toRef(() => props.required),\n buttons: toRef(() => props.buttons),\n disabled: toRef(() => props.disabled),\n})\n\nconst normalizeOptions = computed(() =>\n props.options.map((el, ind) =>\n typeof el === 'string' || typeof el === 'number'\n ? {\n props: {\n value: el,\n disabled: props.disabled,\n },\n text: el.toString(),\n html: undefined,\n self: Symbol(`checkboxGroupOptionItem${ind}`),\n }\n : {\n props: {\n value: el[props.valueField] as string | number | undefined,\n disabled: el[props.disabledField] as boolean | undefined,\n ...(el.props ? el.props : {}),\n },\n text: el[props.textField] as string | undefined,\n html: el[props.htmlField] as string | undefined,\n self: Symbol(`checkboxGroupOptionItem${ind}`),\n }\n )\n)\n\nconst classesObject = computed(() => ({\n required: props.required,\n ariaInvalid: props.ariaInvalid,\n state: props.state,\n validated: props.validated,\n buttons: props.buttons,\n stacked: props.stacked,\n size: props.size,\n}))\nconst computedAttrs = getGroupAttr(classesObject)\nconst computedClasses = getGroupClasses(classesObject)\n\ndefineExpose({\n blur: () => {\n focused.value = false\n },\n focus: () => {\n focused.value = true\n },\n})\n</script>\n","<template>\n <label\n v-if=\"hasLabelSlot || props.label\"\n class=\"form-label\"\n :class=\"props.labelClass\"\n :for=\"computedId\"\n >\n <slot name=\"label\">\n {{ props.label }}\n </slot>\n </label>\n\n <input\n :id=\"computedId\"\n v-bind=\"$attrs\"\n ref=\"input\"\n type=\"file\"\n :class=\"computedClasses\"\n :form=\"props.form\"\n :name=\"props.name\"\n :multiple=\"props.multiple\"\n :disabled=\"props.disabled\"\n :capture=\"props.capture\"\n :accept=\"computedAccept || undefined\"\n :required=\"props.required || undefined\"\n :aria-label=\"props.ariaLabel\"\n :aria-labelledby=\"props.ariaLabelledby\"\n :aria-required=\"props.required || undefined\"\n :directory=\"props.directory\"\n :webkitdirectory=\"props.directory\"\n @change=\"onChange\"\n @drop=\"onDrop\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport {useFocus} from '@vueuse/core'\nimport {computed, ref, toRef, watch} from 'vue'\nimport type {BFormFileProps} from '../../types'\nimport {useDefaults, useId, useStateClass} from '../../composables'\nimport {isEmptySlot} from '../../utils'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst slots = defineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n label?: (props: Record<string, never>) => any\n}>()\n\nconst _props = withDefaults(defineProps<BFormFileProps>(), {\n ariaLabel: undefined,\n ariaLabelledby: undefined,\n accept: '',\n autofocus: false,\n // eslint-disable-next-line vue/require-valid-default-prop\n capture: false,\n directory: false,\n disabled: false,\n form: undefined,\n id: undefined,\n label: '',\n labelClass: undefined,\n multiple: false,\n name: undefined,\n noButton: false,\n noDrop: false,\n noTraverse: false,\n plain: false,\n required: false,\n size: undefined,\n state: null,\n})\nconst props = useDefaults(_props, 'BFormFile')\n\nconst modelValue = defineModel<File | File[] | null>({\n default: null,\n})\n\nconst computedId = useId(() => props.id)\n\n// TODO noTraverse is not implemented yet\n\nconst stateClass = useStateClass(() => props.state)\n\nconst input = ref<HTMLInputElement | null>(null)\n\nconst {focused} = useFocus(input, {initialValue: props.autofocus})\n\nconst hasLabelSlot = toRef(() => !isEmptySlot(slots['label']))\n\nconst computedAccept = computed(() =>\n typeof props.accept === 'string' ? props.accept : props.accept.join(',')\n)\n\nconst computedClasses = computed(() => [\n stateClass.value,\n {\n [`form-control-${props.size}`]: props.size !== undefined,\n 'form-control': !props.plain,\n 'form-control-input-file-hide-button': props.noButton,\n },\n])\n\nconst onChange = () => {\n const value =\n input.value?.files === null || input.value?.files === undefined ? null : [...input.value.files]\n modelValue.value = value === null ? null : props.multiple === true ? value : value[0]\n}\n\nconst onDrop = (e: Readonly<Event>) => {\n if (props.noDrop === true) {\n e.preventDefault()\n }\n}\n\n/**\n * Reset the form input\n */\nconst reset = () => {\n modelValue.value = null\n}\n\nwatch(modelValue, (newValue) => {\n if (newValue === null && input.value !== null) {\n input.value.value = ''\n }\n})\n\ndefineExpose({\n blur: () => {\n focused.value = false\n },\n element: input,\n focus: () => {\n focused.value = true\n },\n reset,\n})\n</script>\n","<script lang=\"ts\">\nimport {useAriaInvalid, useId, useStateClass} from '../../composables'\nimport {RX_SPACE_SPLIT} from '../../constants/regex'\nimport {attemptFocus, IS_BROWSER, isVisible, normalizeSlot, suffixPropName} from '../../utils'\nimport {computed, defineComponent, h, nextTick, onMounted, type PropType, ref, watch} from 'vue'\nimport BCol from '../BCol.vue'\nimport BFormInvalidFeedback from '../BForm/BFormInvalidFeedback.vue'\nimport BFormRow from '../BForm/BFormRow.vue'\nimport BFormText from '../BForm/BFormText.vue'\nimport BFormValidFeedback from '../BForm/BFormValidFeedback.vue'\nimport type {AriaInvalid} from '../../types'\n\nconst INPUTS = ['input', 'select', 'textarea']\n// Selector for finding first input in the form group\nconst INPUT_SELECTOR = INPUTS.map((v) => `${v}:not([disabled])`).join()\n\n// A list of interactive elements (tag names) inside `<BFormGroup>`'s legend\nconst LEGEND_INTERACTIVE_ELEMENTS = [...INPUTS, 'a', 'button', 'label']\n\nexport const SLOT_NAME_LABEL = 'label'\nexport const SLOT_NAME_INVALID_FEEDBACK = 'invalid-feedback'\nexport const SLOT_NAME_VALID_FEEDBACK = 'valid-feedback'\nexport const SLOT_NAME_DESCRIPTION = 'description'\nexport const SLOT_NAME_DEFAULT = 'default'\n\nexport default defineComponent({\n components: {BCol, BFormInvalidFeedback, BFormRow, BFormText, BFormValidFeedback},\n props: {\n ariaInvalid: {type: [Boolean, String] as PropType<AriaInvalid>, default: undefined},\n contentCols: {type: [Boolean, String, Number], default: undefined},\n contentColsLg: {type: [Boolean, String, Number], default: undefined},\n contentColsMd: {type: [Boolean, String, Number], default: undefined},\n contentColsSm: {type: [Boolean, String, Number], default: undefined},\n contentColsXl: {type: [Boolean, String, Number], default: undefined},\n description: {type: [String], default: undefined},\n disabled: {type: Boolean, default: false},\n feedbackAriaLive: {type: String, default: 'assertive'},\n floating: {type: Boolean, default: false},\n id: {type: String, default: undefined},\n invalidFeedback: {type: String, default: undefined},\n label: {type: String, default: undefined},\n labelAlign: {type: [String], default: undefined},\n labelAlignLg: {type: [String], default: undefined},\n labelAlignMd: {type: [String], default: undefined},\n labelAlignSm: {type: [String], default: undefined},\n labelAlignXl: {type: [String], default: undefined},\n labelClass: {type: [Array, Object, String], default: undefined},\n labelCols: {type: [Boolean, String, Number], default: undefined},\n labelColsLg: {type: [Boolean, String, Number], default: undefined},\n labelColsMd: {type: [Boolean, String, Number], default: undefined},\n labelColsSm: {type: [Boolean, String, Number], default: undefined},\n labelColsXl: {type: [Boolean, String, Number], default: undefined},\n labelFor: {type: String, default: undefined},\n labelSize: {type: String, default: undefined},\n labelVisuallyHidden: {type: Boolean, default: false},\n state: {type: Boolean as PropType<boolean | null>, default: null},\n tooltip: {type: Boolean, default: false},\n validFeedback: {type: String, default: undefined},\n validated: {type: Boolean, default: false},\n },\n setup(props) {\n const ariaDescribedby: string | null = null as string | null\n const breakPoints = ['xs', 'sm', 'md', 'lg', 'xl']\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const getAlignClasses = (props: any, prefix: string) =>\n breakPoints.reduce((result: string[], breakpoint) => {\n const suffix = suffixPropName(breakpoint === 'xs' ? '' : breakpoint, `${prefix}Align`)\n const propValue: string = props[suffix] || null\n if (propValue) {\n breakpoint === 'xs'\n ? result.push(`text-${propValue}`)\n : result.push(`text-${breakpoint}-${propValue}`)\n }\n\n return result\n }, [])\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const getColProps = (props: any, prefix: string) =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n breakPoints.reduce((result: any, breakpoint: string) => {\n const suffix = suffixPropName(breakpoint === 'xs' ? '' : breakpoint, `${prefix}Cols`)\n let propValue = props[suffix]\n // Handle case where the prop's value is an empty string,\n // which represents `true`\n propValue = propValue === '' ? true : propValue || false\n\n if (!(typeof propValue === 'boolean') && propValue !== 'auto') {\n // Convert to column size to number\n const val = Number.parseInt(propValue)\n propValue = Number.isNaN(val) ? 0 : val\n // Ensure column size is greater than `0`\n propValue = propValue > 0 ? propValue : false\n }\n\n // Add the prop to the list of props to give to `</BCol>`\n // If breakpoint is '' (`${prefix}Cols` is `true`), then we use\n // the 'col' prop to make equal width at 'xs'\n if (propValue) {\n // Extra care is required for xs since it does not have a BCol breakpoint prop\n // Xs breakpoint is simply 'cols'\n if (breakpoint === 'xs') {\n result[typeof propValue === 'boolean' ? 'col' : 'cols'] = propValue\n } else {\n result[breakpoint || (typeof propValue === 'boolean' ? 'col' : 'cols')] = propValue\n }\n }\n return result\n }, {})\n\n const content = ref<HTMLElement | null>(null)\n\n // Sets the `aria-describedby` attribute on the input if `labelFor` is set\n // Optionally accepts a string of Ids to remove as the second parameter\n // Preserves any `aria-describedby` value(s) user may have on input\n const updateAriaDescribedby = (newValue: string | null, oldValue: string | null = null) => {\n if (IS_BROWSER && props.labelFor && content.value !== null) {\n // We need to escape `labelFor` since it can be user-provided\n const $input = content.value.querySelector(`#${CSS.escape(props.labelFor)}`)\n if ($input) {\n const attr = 'aria-describedby'\n const newIds = (newValue || '').split(RX_SPACE_SPLIT)\n const oldIds = (oldValue || '').split(RX_SPACE_SPLIT)\n\n // Update Id list, preserving any original Ids\n // and ensuring the Id's are unique\n const ids = ($input.getAttribute(attr) || '')\n .split(RX_SPACE_SPLIT)\n .filter((id) => !oldIds.includes(id))\n .concat(newIds)\n .filter((id, index, ids) => ids.indexOf(id) === index)\n .filter((x) => x)\n .join(' ')\n .trim()\n\n if (ids) {\n $input.setAttribute(attr, ids)\n } else {\n $input.removeAttribute(attr)\n }\n }\n }\n }\n\n const contentColProps = computed(() => getColProps(props, 'content'))\n const labelAlignClasses = computed(() => getAlignClasses(props, 'label'))\n const labelColProps = computed(() => getColProps(props, 'label'))\n const isHorizontal = computed(\n () =>\n // Determine if the form group will be rendered horizontal\n // based on the existence of 'content-col' or 'label-col' props\n Object.keys(contentColProps.value).length > 0 || Object.keys(labelColProps.value).length > 0\n )\n\n const stateClass = useStateClass(() => props.state)\n\n const computedAriaInvalid = useAriaInvalid(\n () => props.ariaInvalid,\n () => props.state\n )\n\n watch(\n () => ariaDescribedby,\n (newValue: string | null, oldValue: string | null) => {\n if (newValue !== oldValue) {\n updateAriaDescribedby(newValue, oldValue)\n }\n }\n )\n\n onMounted(() => {\n nextTick(() => {\n // Set `aria-describedby` on the input specified by `labelFor`\n // We do this in a `$nextTick()` to ensure the children have finished rendering\n updateAriaDescribedby(ariaDescribedby)\n })\n })\n\n const onLegendClick = (event: Readonly<MouseEvent>) => {\n // Don't do anything if `labelFor` is set\n if (props.labelFor || content.value === null) return\n\n const {target} = event\n const tagName = target ? (target as HTMLElement).tagName : ''\n\n // If clicked an interactive element inside legend,\n // we just let the default happen\n if (LEGEND_INTERACTIVE_ELEMENTS.indexOf(tagName) !== -1) return\n\n // If only a single input, focus it, emulating label behaviour\n const inputs = [...content.value.querySelectorAll(INPUT_SELECTOR)].filter(isVisible)\n const [inp] = inputs\n if (inputs.length === 1 && inp instanceof HTMLElement) {\n attemptFocus(inp)\n }\n }\n\n return {\n ariaDescribedby,\n computedAriaInvalid,\n contentColProps,\n isHorizontal,\n labelAlignClasses,\n labelColProps,\n onLegendClick,\n stateClass,\n }\n },\n render() {\n const props = this.$props\n const slots = this.$slots\n\n const id = useId()\n const isFieldset = !props.labelFor\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let $label: any = null\n const labelContent = normalizeSlot(SLOT_NAME_LABEL, {}, slots) || props.label\n const labelId = labelContent ? useId(undefined, '_BV_label_').value : null\n\n if (labelContent || this.isHorizontal) {\n const labelTag: 'legend' | 'label' = isFieldset ? 'legend' : 'label'\n if (props.labelVisuallyHidden) {\n if (labelContent) {\n $label = h(\n labelTag,\n {\n class: 'visually-hidden',\n id: labelId,\n for: props.labelFor || null,\n },\n labelContent\n )\n }\n if (this.isHorizontal) {\n $label = h(BCol, this.labelColProps, {default: () => $label})\n } else {\n $label = h('div', {}, [$label])\n }\n } else {\n const renderProps = {\n onClick: isFieldset ? this.onLegendClick : null,\n ...(this.isHorizontal ? this.labelColProps : {}),\n tag: this.isHorizontal ? labelTag : null,\n id: labelId,\n for: props.labelFor || null,\n tabIndex: isFieldset ? '-1' : null,\n class: [\n this.isHorizontal ? 'col-form-label' : 'form-label',\n {\n 'bv-no-focus-ring': isFieldset,\n 'col-form-label': this.isHorizontal || isFieldset,\n 'pt-0': !this.isHorizontal && isFieldset,\n 'd-block': !this.isHorizontal && !isFieldset,\n [`col-form-label-${props.labelSize}`]: !!props.labelSize,\n },\n this.labelAlignClasses,\n props.labelClass,\n ],\n }\n if (this.isHorizontal) {\n $label = h(BCol, renderProps, {default: () => labelContent})\n } else {\n $label = h(labelTag, renderProps, labelContent)\n }\n }\n }\n\n let $invalidFeedback = null\n const invalidFeedbackContent =\n normalizeSlot(SLOT_NAME_INVALID_FEEDBACK, {}, slots) || this.invalidFeedback\n const invalidFeedbackId = invalidFeedbackContent\n ? useId(undefined, '_BV_feedback_invalid_').value\n : undefined\n\n if (invalidFeedbackContent) {\n $invalidFeedback = h(\n BFormInvalidFeedback,\n {\n ariaLive: props.feedbackAriaLive,\n id: invalidFeedbackId,\n state: props.state,\n tooltip: props.tooltip,\n },\n {default: () => invalidFeedbackContent}\n )\n }\n\n let $validFeedback = null\n const validFeedbackContent =\n normalizeSlot(SLOT_NAME_VALID_FEEDBACK, {}, slots) || this.validFeedback\n const validFeedbackId = validFeedbackContent\n ? useId(undefined, '_BV_feedback_valid_').value\n : undefined\n\n if (validFeedbackContent) {\n $validFeedback = h(\n BFormValidFeedback,\n {\n ariaLive: props.feedbackAriaLive,\n id: validFeedbackId,\n state: props.state,\n tooltip: props.tooltip,\n },\n {default: () => validFeedbackContent}\n // validFeedbackContent\n )\n }\n\n let $description = null\n const descriptionContent = normalizeSlot(SLOT_NAME_DESCRIPTION, {}, slots) || this.description\n const descriptionId = descriptionContent\n ? useId(undefined, '_BV_description_').value\n : undefined\n if (descriptionContent) {\n $description = h(\n BFormText,\n {\n id: descriptionId,\n },\n {default: () => descriptionContent}\n )\n }\n\n // Update `ariaDescribedby`\n // Screen readers will read out any content linked to by `aria-describedby`\n // even if the content is hidden with `display: none;`, hence we only include\n // feedback Ids if the form group's state is explicitly valid or invalid\n const ariaDescribedby = (this.ariaDescribedby =\n [\n descriptionId,\n props.state === false ? invalidFeedbackId : null,\n props.state === true ? validFeedbackId : null,\n ]\n .filter((x) => x)\n .join(' ') || null)\n\n const contentBlocks = [\n normalizeSlot(SLOT_NAME_DEFAULT, {ariaDescribedby, descriptionId, id, labelId}, slots) || '',\n $invalidFeedback,\n $validFeedback,\n $description,\n ]\n if (!this.isHorizontal && props.floating) contentBlocks.push($label)\n\n let $content = h(\n 'div',\n {\n ref: 'content',\n class: [\n {\n 'form-floating': !this.isHorizontal && props.floating,\n },\n ],\n },\n contentBlocks\n )\n if (this.isHorizontal) {\n $content = h(BCol, {ref: 'content', ...this.contentColProps}, {default: () => contentBlocks})\n }\n\n // Return it wrapped in a form group\n // Note: Fieldsets do not support adding `row` or `form-row` directly\n // to them due to browser specific render issues, so we move the `form-row`\n // to an inner wrapper div when horizontal and using a fieldset\n const rowProps = {\n 'class': [\n this.stateClass,\n {\n 'was-validated': props.validated,\n },\n ],\n 'id': useId(() => props.id).value,\n 'disabled': isFieldset ? props.disabled : null,\n 'role': isFieldset ? null : 'group',\n 'aria-invalid': this.computedAriaInvalid,\n // Only apply `aria-labelledby` if we are a horizontal fieldset\n // as the legend is no longer a direct child of fieldset\n 'aria-labelledby': isFieldset && this.isHorizontal ? labelId : null,\n }\n\n if (this.isHorizontal && !isFieldset) {\n return h(BFormRow, rowProps, {default: () => [$label, $content]})\n }\n\n return h(\n isFieldset ? 'fieldset' : 'div',\n rowProps,\n this.isHorizontal && isFieldset\n ? [h(BFormRow, null, {default: () => [$label, $content]})]\n : this.isHorizontal || !props.floating\n ? [$label, $content]\n : [$content]\n )\n },\n})\n</script>\n","<template>\n <input\n :id=\"computedId\"\n ref=\"input\"\n :value=\"modelValue\"\n :class=\"computedClasses\"\n :name=\"props.name || undefined\"\n :form=\"props.form || undefined\"\n :type=\"props.type\"\n :disabled=\"props.disabled\"\n :placeholder=\"props.placeholder\"\n :required=\"props.required || undefined\"\n :autocomplete=\"props.autocomplete || undefined\"\n :readonly=\"props.readonly || props.plaintext\"\n :min=\"props.min\"\n :max=\"props.max\"\n :step=\"props.step\"\n :list=\"props.type !== 'password' ? props.list : undefined\"\n :aria-required=\"props.required || undefined\"\n :aria-invalid=\"computedAriaInvalid\"\n @input=\"onInput($event)\"\n @change=\"onChange($event)\"\n @blur=\"onBlur($event)\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, ref} from 'vue'\nimport {useDefaults, useFormInput, useStateClass} from '../../composables'\nimport {normalizeInput} from '../../utils'\nimport type {BFormInputProps, Numberish} from '../../types'\n\nconst _props = withDefaults(defineProps<BFormInputProps>(), {\n max: undefined,\n min: undefined,\n step: undefined,\n type: 'text',\n // CommonInputProps\n ariaInvalid: undefined,\n autocomplete: undefined,\n autofocus: false,\n debounce: 0,\n debounceMaxWait: 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: null,\n // End CommonInputProps\n})\nconst props = useDefaults(_props, 'BFormInput')\n\nconst [modelValue, modelModifiers] = defineModel<Numberish | null, 'trim' | 'lazy' | 'number'>({\n default: '',\n set: (v) => normalizeInput(v, modelModifiers),\n})\n\nconst {input, computedId, computedAriaInvalid, onInput, onChange, onBlur, focus, blur} =\n useFormInput(props, modelValue, modelModifiers)\n\nconst stateClass = useStateClass(() => props.state)\n\nconst isHighlighted = ref(false)\n\nconst computedClasses = computed(() => {\n const isRange = props.type === 'range'\n const isColor = props.type === 'color'\n return [\n stateClass.value,\n {\n 'form-control-highlighted': isHighlighted.value,\n 'form-range': isRange,\n 'form-control': isColor || (!props.plaintext && !isRange),\n 'form-control-color': isColor,\n 'form-control-plaintext': props.plaintext && !isRange && !isColor,\n [`form-control-${props.size}`]: !!props.size,\n },\n ]\n})\n\ndefineExpose({\n blur,\n element: input,\n focus,\n})\n\n// const highlight = () => {\n// if (isHighlighted.value === true) return\n// isHighlighted.value = true\n// setTimeout(() => {\n// isHighlighted.value = false\n// }, 2000)\n// }\n</script>\n","<template>\n <RenderComponentOrSkip :skip=\"isButtonGroup\" :class=\"computedClasses\">\n <input\n :id=\"computedId\"\n v-bind=\"$attrs\"\n ref=\"input\"\n v-model=\"localValue\"\n :class=\"inputClasses\"\n type=\"radio\"\n :disabled=\"props.disabled || parentData?.disabled.value\"\n :required=\"computedRequired || undefined\"\n :name=\"props.name || parentData?.name.value\"\n :form=\"props.form || parentData?.form.value\"\n :aria-label=\"props.ariaLabel\"\n :aria-labelledby=\"props.ariaLabelledby\"\n :value=\"props.value\"\n :aria-required=\"computedRequired || undefined\"\n />\n <label v-if=\"hasDefaultSlot || props.plain === false\" :for=\"computedId\" :class=\"labelClasses\">\n <slot />\n </label>\n </RenderComponentOrSkip>\n</template>\n\n<script setup lang=\"ts\">\nimport {useFocus} from '@vueuse/core'\nimport {computed, inject, ref, toRef} from 'vue'\nimport {getClasses, getInputClasses, getLabelClasses, useDefaults, useId} from '../../composables'\nimport type {BFormRadioProps, RadioValue} from '../../types'\nimport {isEmptySlot, radioGroupKey} from '../../utils'\nimport RenderComponentOrSkip from '../RenderComponentOrSkip.vue'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst _props = withDefaults(defineProps<BFormRadioProps>(), {\n ariaLabel: undefined,\n ariaLabelledby: undefined,\n autofocus: false,\n button: false,\n buttonGroup: false,\n buttonVariant: null,\n disabled: false,\n form: undefined,\n id: undefined,\n inline: false,\n name: undefined,\n plain: false,\n required: false,\n reverse: false,\n size: undefined,\n state: null,\n value: true,\n})\nconst props = useDefaults(_props, 'BFormRadio')\n\nconst slots = defineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst modelValue = defineModel<RadioValue | undefined>({\n default: undefined,\n})\n\nconst computedId = useId(() => props.id, 'form-check')\n\nconst parentData = inject(radioGroupKey, null)\n\nconst input = ref<HTMLElement | null>(null)\n\nconst {focused} = useFocus(input, {\n initialValue: props.autofocus,\n})\n\nconst hasDefaultSlot = toRef(() => !isEmptySlot(slots.default))\n\nconst localValue = computed({\n get: () => (parentData ? parentData.modelValue.value : modelValue.value),\n set: (newValue) => {\n if (newValue === undefined) return\n if (parentData !== null) {\n parentData.modelValue.value = newValue as RadioValue\n return\n }\n modelValue.value = newValue as RadioValue\n },\n})\n\nconst computedRequired = toRef(\n () => !!(props.name ?? parentData?.name.value) && (props.required || parentData?.required.value)\n)\n\nconst isButtonGroup = toRef(() => props.buttonGroup || (parentData?.buttons.value ?? false))\n\nconst classesObject = computed(() => ({\n plain: props.plain || (parentData?.plain.value ?? false),\n button: props.button || (parentData?.buttons.value ?? false),\n inline: props.inline || (parentData?.inline.value ?? false),\n state: props.state || parentData?.state.value,\n reverse: props.reverse || (parentData?.reverse.value ?? false),\n size: props.size ?? parentData?.size.value ?? 'md', // This is where the true default is made\n buttonVariant: props.buttonVariant ?? parentData?.buttonVariant.value ?? 'secondary', // This is where the true default is made\n hasDefaultSlot: hasDefaultSlot.value,\n}))\nconst computedClasses = getClasses(classesObject)\nconst inputClasses = getInputClasses(classesObject)\nconst labelClasses = getLabelClasses(classesObject)\n\ndefineExpose({\n blur: () => {\n focused.value = false\n },\n element: input,\n focus: () => {\n focused.value = true\n },\n})\n</script>\n","<template>\n <div\n v-bind=\"computedAttrs\"\n :id=\"computedId\"\n ref=\"element\"\n role=\"radiogroup\"\n :class=\"computedClasses\"\n class=\"bv-no-focus-ring\"\n tabindex=\"-1\"\n >\n <slot name=\"first\" />\n <BFormRadio\n v-for=\"item in normalizeOptions\"\n :key=\"item.self\"\n :disabled=\"item.disabled\"\n :value=\"item.value\"\n >\n <!-- eslint-disable-next-line vue/no-v-html -->\n <span v-if=\"!!item.html\" v-html=\"item.html\" />\n <template v-else>\n {{ item.text }}\n </template>\n </BFormRadio>\n <slot />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BFormRadioGroupProps, RadioValue} from '../../types'\nimport {computed, provide, ref, toRef} from 'vue'\nimport {radioGroupKey} from '../../utils'\nimport BFormRadio from './BFormRadio.vue'\nimport {getGroupAttr, getGroupClasses, useDefaults, useId} from '../../composables'\nimport {useFocus} from '@vueuse/core'\n\nconst _props = withDefaults(defineProps<BFormRadioGroupProps>(), {\n ariaInvalid: undefined,\n autofocus: false,\n buttonVariant: 'secondary',\n buttons: false,\n disabled: false,\n disabledField: 'disabled',\n form: undefined,\n htmlField: 'html',\n id: undefined,\n name: undefined,\n options: () => [],\n plain: false,\n required: false,\n reverse: false,\n size: 'md',\n stacked: false,\n state: null,\n textField: 'text',\n validated: false,\n valueField: 'value',\n})\nconst props = useDefaults(_props, 'BFormRadioGroup')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n first?: (props: Record<string, never>) => any\n}>()\n\nconst modelValue = defineModel<RadioValue | null>({\n default: null,\n})\n\nconst computedId = useId(() => props.id, 'radio')\nconst computedName = useId(() => props.name, 'checkbox')\n\nconst element = ref<HTMLElement | null>(null)\n\nconst {focused} = useFocus(element, {\n initialValue: props.autofocus,\n})\n\nprovide(radioGroupKey, {\n modelValue,\n buttonVariant: toRef(() => props.buttonVariant),\n form: toRef(() => props.form),\n name: computedName,\n buttons: toRef(() => props.buttons),\n state: toRef(() => props.state),\n plain: toRef(() => props.plain),\n size: toRef(() => props.size),\n inline: toRef(() => !props.stacked),\n reverse: toRef(() => props.reverse),\n required: toRef(() => props.required),\n disabled: toRef(() => props.disabled),\n})\n\nconst normalizeOptions = computed(() =>\n props.options.map((el, ind) =>\n typeof el === 'string' || typeof el === 'number'\n ? {\n value: el,\n disabled: props.disabled,\n text: el.toString(),\n html: undefined,\n self: Symbol(`radioGroupOptionItem${ind}`),\n }\n : {\n value: el[props.valueField] as string | undefined,\n disabled: el[props.disabledField] as boolean | undefined,\n ...(el.props ? el.props : {}),\n text: el[props.textField] as string | undefined,\n html: el[props.htmlField] as string | undefined,\n self: Symbol(`radioGroupOptionItem${ind}`),\n }\n )\n)\n\nconst classesObject = computed(() => ({\n required: props.required,\n ariaInvalid: props.ariaInvalid,\n state: props.state,\n validated: props.validated,\n buttons: props.buttons,\n stacked: props.stacked,\n size: props.size,\n}))\nconst computedAttrs = getGroupAttr(classesObject)\nconst computedClasses = getGroupClasses(classesObject)\n\ndefineExpose({\n blur: () => {\n focused.value = false\n },\n focus: () => {\n focused.value = true\n },\n})\n</script>\n","<template>\n <optgroup :label=\"props.label\">\n <slot name=\"first\" />\n <BFormSelectOption\n v-for=\"(option, index) in normalizedOptsWrapper\"\n :key=\"index\"\n :disabled=\"option.disabled\"\n :value=\"option.value\"\n v-bind=\"$attrs\"\n >\n <!-- eslint-disable-next-line vue/no-v-html -->\n <span v-if=\"!!option.html\" v-html=\"option.html\" />\n <template v-else>\n {{ option.text }}\n </template>\n </BFormSelectOption>\n <slot />\n </optgroup>\n</template>\n\n<script setup lang=\"ts\" generic=\"T\">\nimport BFormSelectOption from './BFormSelectOption.vue'\nimport {useDefaults, useFormSelect} from '../../composables'\nimport type {BFormSelectOptionGroupProps, SelectOption} from '../../types'\nimport {computed} from 'vue'\n\nconst _props = withDefaults(defineProps<BFormSelectOptionGroupProps>(), {\n disabledField: 'disabled',\n htmlField: 'html',\n label: undefined,\n options: () => [],\n textField: 'text',\n valueField: 'value',\n})\nconst props = useDefaults(_props, 'BFormSelectOptionGroup')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n first?: (props: Record<string, never>) => any\n}>()\n\nconst {normalizedOptions} = useFormSelect(() => props.options, props)\n\nconst normalizedOptsWrapper = computed(() => normalizedOptions.value as SelectOption<T>[])\n</script>\n","<template>\n <select\n :id=\"computedId\"\n ref=\"input\"\n v-model=\"localValue\"\n :class=\"computedClasses\"\n :name=\"props.name\"\n :form=\"props.form || undefined\"\n :multiple=\"props.multiple || undefined\"\n :size=\"computedSelectSize\"\n :disabled=\"props.disabled\"\n :required=\"props.required || undefined\"\n :aria-required=\"props.required || undefined\"\n :aria-invalid=\"computedAriaInvalid\"\n >\n <slot name=\"first\" />\n <template v-for=\"(option, index) in normalizedOptsWrapper\" :key=\"index\">\n <BFormSelectOptionGroup\n v-if=\"isComplex(option)\"\n :label=\"option.label\"\n :options=\"option.options\"\n :value-field=\"props.valueField\"\n :text-field=\"props.textField\"\n :html-field=\"props.htmlField\"\n :disabled-field=\"props.disabledField\"\n />\n <BFormSelectOption v-else :value=\"option.value\" :disabled=\"option.disabled\">\n <!-- eslint-disable-next-line vue/no-v-html -->\n <span v-if=\"!!option.html\" v-html=\"option.html\" />\n <template v-else>\n {{ option.text }}\n </template>\n </BFormSelectOption>\n </template>\n <slot />\n </select>\n</template>\n\n<script setup lang=\"ts\" generic=\"T\">\nimport type {BFormSelectProps, ComplexSelectOptionRaw, SelectOption} from '../../types'\nimport {computed, ref, toRef} from 'vue'\nimport BFormSelectOption from './BFormSelectOption.vue'\nimport BFormSelectOptionGroup from './BFormSelectOptionGroup.vue'\nimport {useAriaInvalid, useDefaults, useFormSelect, useId, useStateClass} from '../../composables'\nimport {useFocus, useToNumber} from '@vueuse/core'\n\nconst _props = withDefaults(defineProps<BFormSelectProps>(), {\n ariaInvalid: undefined,\n autofocus: false,\n disabled: false,\n disabledField: 'disabled',\n form: undefined,\n htmlField: 'html',\n id: undefined,\n labelField: 'label',\n multiple: false,\n name: undefined,\n // eslint-disable-next-line vue/require-valid-default-prop\n options: () => [],\n optionsField: 'options',\n plain: false,\n required: false,\n selectSize: 0,\n size: 'md',\n state: null,\n textField: 'text',\n valueField: 'value',\n})\nconst props = useDefaults(_props, 'BFormSelect')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n first?: (props: Record<string, never>) => any\n}>()\n\nconst modelValue = defineModel<T>({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default: '' as any,\n})\n\nconst computedId = useId(() => props.id, 'input')\n\nconst selectSizeNumber = useToNumber(() => props.selectSize)\n\nconst stateClass = useStateClass(() => props.state)\n\nconst input = ref<HTMLElement | null>(null)\n\nconst {focused} = useFocus(input, {\n initialValue: props.autofocus,\n})\n\nconst computedClasses = computed(() => [\n stateClass.value,\n {\n 'form-control': props.plain,\n [`form-control-${props.size}`]: props.size !== 'md' && props.plain,\n 'form-select': !props.plain,\n [`form-select-${props.size}`]: props.size !== 'md' && !props.plain,\n },\n])\n\nconst computedSelectSize = toRef(() =>\n selectSizeNumber.value || props.plain ? selectSizeNumber.value : undefined\n)\n\nconst computedAriaInvalid = useAriaInvalid(\n () => props.ariaInvalid,\n () => props.state\n)\n\nconst {normalizedOptions, isComplex} = useFormSelect(() => props.options, props)\n\nconst normalizedOptsWrapper = computed(\n () => normalizedOptions.value as readonly (ComplexSelectOptionRaw<T> | SelectOption<T>)[]\n)\n\nconst localValue = computed({\n get: () => modelValue.value,\n set: (newValue) => {\n modelValue.value = newValue\n },\n})\n\ndefineExpose({\n blur: () => {\n focused.value = false\n },\n element: input,\n focus: () => {\n focused.value = true\n },\n})\n</script>\n","export const CODE_BACKSPACE = 'Backspace'\nexport const CODE_BREAK = 19\nexport const CODE_DELETE = 46\nexport const CODE_DOWN = 'ArrowDown'\nexport const CODE_END = 'End'\nexport const CODE_ENTER = 13\nexport const CODE_ESC = 27\nexport const CODE_HOME = 'Home'\nexport const CODE_LEFT = 37\nexport const CODE_PAGEDOWN = 'PageDown'\nexport const CODE_PAGEUP = 'PageUp'\nexport const CODE_RIGHT = 39\nexport const CODE_SPACE = 32\nexport const CODE_UP = 'ArrowUp'\n","<template>\n <div\n ref=\"element\"\n class=\"b-form-spinbutton form-control\"\n :class=\"computedClasses\"\n role=\"group\"\n :lang=\"computedLocale\"\n :tabindex=\"props.disabled ? undefined : '-1'\"\n :title=\"props.ariaLabel\"\n @click=\"focused = true\"\n >\n <!-- eslint-disable-next-line prettier/prettier -->\n <!-- prettier-ignore -->\n <slot :name=\"(buttons.top.slot.name as 'increment' | 'decrement')\" :has-focus=\"focused\">\n <button\n v-bind=\"buttons.top.button\"\n @mousedown=\"buttons.top.handler\"\n @touchstart=\"buttons.top.handler\"\n >\n <svg v-bind=\"buttons.top.svg\">\n <path v-bind=\"buttons.top.path\" />\n </svg>\n </button>\n </slot>\n <input\n v-if=\"props.name && !props.disabled\"\n key=\"hidden\"\n type=\"hidden\"\n :name=\"props.name\"\n :form=\"props.form\"\n :value=\"valueAsFixed\"\n />\n <output\n :id=\"computedId\"\n key=\"output\"\n class=\"flex-grow-1\"\n :class=\"computedSpinClasses\"\n :dir=\"isRtl ?? false ? 'rtl' : 'ltr'\"\n :tabindex=\"props.disabled ? undefined : '0'\"\n role=\"spinbutton\"\n aria-live=\"off\"\n :aria-label=\"props.ariaLabel || undefined\"\n :aria-invalid=\"\n props.state === false || (!modelValue !== null && props.required) ? true : undefined\n \"\n :aria-required=\"props.required ? true : undefined\"\n :aria-valuemin=\"computedMin\"\n :aria-valuemax=\"computedMax\"\n :aria-valuenow=\"modelValue !== null ? modelValue : undefined\"\n :aria-valuetext=\"modelValue !== null ? computedFormatter(modelValue) : undefined\"\n >\n <bdi>\n {{ (modelValue !== null ? computedFormatter(modelValue) : props.placeholder) || '' }}\n </bdi>\n </output>\n <!-- eslint-disable-next-line prettier/prettier -->\n <!-- prettier-ignore -->\n <slot :name=\"(buttons.bottom.slot.name as 'increment' | 'decrement')\" :has-focus=\"focused\">\n <button\n v-bind=\"buttons.bottom.button\"\n @mousedown=\"buttons.bottom.handler\"\n @touchstart=\"buttons.bottom.handler\"\n >\n <svg v-bind=\"buttons.bottom.svg\">\n <path v-bind=\"buttons.bottom.path\" />\n </svg>\n </button>\n </slot>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, ref, toRef} from 'vue'\nimport type {BFormSpinbuttonProps, ButtonType} from '../../types'\nimport {eventOnOff} from '../../utils/event'\nimport {\n CODE_DOWN,\n CODE_END,\n CODE_HOME,\n CODE_PAGEDOWN,\n CODE_PAGEUP,\n CODE_UP,\n} from '../../constants/codes'\nimport {onKeyStroke, useFocus, useToNumber} from '@vueuse/core'\nimport {useDefaults, useId, useRtl} from '../../composables'\n\nconst KEY_CODES = [CODE_UP, CODE_DOWN, CODE_HOME, CODE_END, CODE_PAGEUP, CODE_PAGEDOWN]\n\nconst _props = withDefaults(defineProps<BFormSpinbuttonProps>(), {\n ariaControls: undefined,\n ariaLabel: undefined,\n disabled: false,\n form: undefined,\n formatterFn: undefined,\n id: undefined,\n inline: false,\n labelDecrement: 'Decrement',\n labelIncrement: 'Increment',\n locale: undefined,\n max: defaultValues.max,\n min: defaultValues.min,\n name: undefined,\n placeholder: undefined,\n readonly: false,\n repeatDelay: defaultValues.repeatDelay,\n repeatInterval: defaultValues.repeatInterval,\n repeatStepMultiplier: defaultValues.repeatMultiplier,\n repeatThreshold: defaultValues.repeatThreshold,\n required: false,\n size: undefined,\n state: null,\n step: defaultValues.step,\n vertical: false,\n wrap: false,\n})\nconst props = useDefaults(_props, 'BFormSpinbutton')\n\nconst emit = defineEmits<{\n change: [value: number | null]\n}>()\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n decrement?: (props: {hasFocus: boolean}) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n increment?: (props: {hasFocus: boolean}) => any\n}>()\n\nconst modelValue = defineModel<number | null>({\n default: null,\n})\n\nconst element = ref<HTMLElement | null>(null)\n\nconst {focused} = useFocus(element)\n\nconst computedId = useId(() => props.id, 'spinbutton')\n\nconst computedClasses = computed(() => ({\n 'disabled': props.disabled,\n 'readonly': props.readonly,\n 'focus': focused.value,\n 'd-inline-flex': props.inline || props.vertical,\n 'd-flex': !props.inline && !props.vertical,\n 'align-items-stretch': !props.vertical,\n 'flex-column': props.vertical,\n [`form-control-${props.size}`]: props.size !== undefined,\n}))\n\nconst computedSpinClasses = computed(() => ({\n 'd-flex': props.vertical,\n 'align-self-center': !props.vertical,\n 'align-items-center': props.vertical,\n 'border-top': props.vertical,\n 'border-bottom': props.vertical,\n 'border-start': !props.vertical,\n 'border-end': !props.vertical,\n}))\n\n//non reactive properties\nlet $_autoDelayTimer: ReturnType<typeof setTimeout> | undefined\nlet $_autoRepeatTimer: ReturnType<typeof setTimeout> | undefined\nlet $_keyIsDown = false\n\n// const computedInline = computed(() => props.inline && !props.vertical)\n\n// const computedReadonly = computed(() => props.readonly && !props.disabled)\n\nconst stepNumber = useToNumber(() => props.step)\nconst computedStep = toRef(() =>\n Number.isNaN(stepNumber.value) ? defaultValues.step : stepNumber.value\n)\n\nconst minNumber = useToNumber(() => props.min)\nconst computedMin = toRef(() =>\n Number.isNaN(minNumber.value) ? defaultValues.min : minNumber.value\n)\n\nconst maxNumber = useToNumber(() => props.max)\nconst computedMax = toRef(() => {\n const step = computedStep.value\n const min = computedMin.value\n return Math.floor((maxNumber.value - min) / step) * step + min\n})\n\nconst repeatDelayNumber = useToNumber(() => props.repeatDelay, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedDelay = toRef(() =>\n repeatDelayNumber.value > 0 ? repeatDelayNumber.value : defaultValues.repeatDelay\n)\n\nconst repeatIntervalNumber = useToNumber(() => props.repeatInterval, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedInterval = toRef(() =>\n repeatIntervalNumber.value > 0 ? repeatIntervalNumber.value : defaultValues.repeatInterval\n)\n\nconst repeatThresholdNumber = useToNumber(() => props.repeatThreshold, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedThreshold = toRef(() =>\n Math.max(\n Number.isNaN(repeatThresholdNumber.value)\n ? defaultValues.repeatThreshold\n : repeatThresholdNumber.value,\n 1\n )\n)\n\nconst repeatStepMultiplierNumber = useToNumber(() => props.repeatStepMultiplier, {\n nanToZero: true,\n method: 'parseInt',\n})\nconst computedStepMultiplier = toRef(() =>\n Math.max(\n Number.isNaN(repeatStepMultiplierNumber.value)\n ? defaultValues.repeatMultiplier\n : repeatStepMultiplierNumber.value,\n 1\n )\n)\n\nconst computedPrecision = toRef(() => {\n const step = computedStep.value\n return Math.floor(step) === step ? 0 : (step.toString().split('.')[1] || '').length\n})\n\nconst computedMultiplier = toRef(() => Math.pow(10, computedPrecision.value || 0))\n\nconst valueAsFixed = toRef(() =>\n modelValue.value === null ? '' : modelValue.value.toFixed(computedPrecision.value)\n)\n\nconst {isRtl, locale: globalLocale} = useRtl()\n\nconst computedLocale = computed(() => {\n const loc = (props.locale ?? globalLocale?.value) || 'locale'\n const locales = [loc]\n const nf = new Intl.NumberFormat(locales)\n return nf.resolvedOptions().locale\n})\n\nconst defaultFormatter = () =>\n new Intl.NumberFormat(computedLocale.value, {\n style: 'decimal',\n useGrouping: false,\n minimumIntegerDigits: 1,\n minimumFractionDigits: computedPrecision.value,\n maximumFractionDigits: computedPrecision.value,\n notation: 'standard',\n }).format\n\nconst computedFormatter = toRef(() => props.formatterFn ?? defaultFormatter())\n\nconst stepValue = (direction: number) => {\n // Sets a new incremented or decremented value, supporting optional wrapping\n // Direction is either +1 or -1 (or a multiple thereof)\n let {value} = modelValue\n if (!props.disabled && value !== null) {\n const step = computedStep.value * direction\n const min = computedMin.value\n const max = computedMax.value\n const multiplier = computedMultiplier.value\n const {wrap} = props\n // We ensure that the value steps like a native input\n value = Math.round((value - min) / step) * step + min + step\n // We ensure that precision is maintained (decimals)\n value = Math.round(value * multiplier) / multiplier\n // Handle if wrapping is enabled\n modelValue.value = value > max ? (wrap ? min : max) : value < min ? (wrap ? max : min) : value\n }\n}\n\nconst stepUp = (multiplier = 1) => {\n if (modelValue.value === null) {\n modelValue.value = computedMin.value\n return\n }\n stepValue(+1 * multiplier)\n}\n\nconst stepDown = (multiplier = 1) => {\n if (modelValue.value === null) {\n modelValue.value = props.wrap ? computedMax.value : computedMin.value\n return\n }\n stepValue(-1 * multiplier)\n}\n\nconst stopEvent = (event: Readonly<Event>) => {\n event.preventDefault()\n event.stopImmediatePropagation()\n}\n\nonKeyStroke(\n KEY_CODES,\n (event) => {\n const {code, altKey, ctrlKey, metaKey} = event\n\n if (props.disabled || props.readonly || altKey || ctrlKey || metaKey) return\n\n // https://w3c.github.io/aria-practices/#spinbutton\n stopEvent(event)\n if ($_keyIsDown) {\n // Keypress is already in progress\n return\n }\n\n resetTimers()\n if ([CODE_UP, CODE_DOWN].includes(code)) {\n // The following use the custom auto-repeat handling\n\n $_keyIsDown = true\n if (code === CODE_UP) {\n handleStepRepeat(event, stepUp)\n return\n }\n if (code === CODE_DOWN) {\n handleStepRepeat(event, stepDown)\n }\n return\n }\n // These use native OS key repeating\n if (code === CODE_PAGEUP) {\n stepUp(computedStepMultiplier.value)\n return\n }\n if (code === CODE_PAGEDOWN) {\n stepDown(computedStepMultiplier.value)\n return\n }\n if (code === CODE_HOME) {\n modelValue.value = computedMin.value\n return\n }\n if (code === CODE_END) {\n modelValue.value = computedMax.value\n }\n },\n {target: element, eventName: 'keydown'}\n)\n\nonKeyStroke(\n KEY_CODES,\n (event: Readonly<KeyboardEvent>) => {\n // Emit a change event when the keyup happens\n\n const {altKey, ctrlKey, metaKey} = event\n\n if (props.disabled || props.readonly || altKey || ctrlKey || metaKey) return\n\n stopEvent(event)\n resetTimers()\n $_keyIsDown = false\n emit('change', modelValue.value)\n },\n {target: element, eventName: 'keyup'}\n)\n\n// takes in a mount or Keyboard Event\nconst handleStepRepeat = (event: Readonly<Event>, stepper: (step: number) => void) => {\n const {type} = event || {}\n\n if (!props.disabled && !props.readonly) {\n if (isMouseEvent(event)) {\n // We only respond to left (main === 0) button clicks\n if (type === 'mousedown' && event.button) return\n }\n resetTimers()\n // Step the counter initially\n stepper(1)\n const threshold = computedThreshold.value\n const multiplier = computedStepMultiplier.value\n const delay = computedDelay.value\n const interval = computedInterval.value\n\n // Initiate the delay/repeat interval\n $_autoDelayTimer = setTimeout(() => {\n let count = 0\n $_autoRepeatTimer = setInterval(() => {\n // After N initial repeats, we increase the incrementing step amount\n // We do this to minimize screen reader announcements of the value\n // (values are announced every change, which can be chatty for SR users)\n // And to make it easer to select a value when the range is large\n stepper(count < threshold ? 1 : multiplier)\n count++\n }, interval)\n }, delay)\n }\n}\n\nconst isMouseEvent = (evt: Readonly<Event>): evt is MouseEvent =>\n evt.type === 'mouseup' || evt.type === 'mousedown'\n\nconst onMouseup: EventListener = (event: Readonly<Event>) => {\n // `<body>` listener, only enabled when mousedown starts\n\n if (isMouseEvent(event)) {\n if (event.type === 'mouseup' && event.button) {\n // Ignore non left button (main === 0) mouse button click\n return\n }\n }\n\n stopEvent(event)\n resetTimers()\n setMouseup(false)\n // Trigger the change event\n emit('change', modelValue.value)\n}\n\nconst setMouseup = (on: boolean) => {\n // Enable or disabled the body mouseup/touchend handlers\n // Use try/catch to handle case when called server side\n try {\n eventOnOff(on, [document.body, 'mouseup', onMouseup, false])\n eventOnOff(on, [document.body, 'touchend', onMouseup, false])\n } catch {\n /* empty */\n }\n}\nconst resetTimers = () => {\n clearTimeout($_autoDelayTimer)\n clearInterval($_autoRepeatTimer)\n $_autoDelayTimer = undefined\n $_autoRepeatTimer = undefined\n}\n\nconst buttons = computed(() => {\n const incrementSvgAttrs = {\n svg: {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '16',\n height: '16',\n fill: 'currentColor',\n class: 'bi bi-plus',\n viewBox: '0 0 16 16',\n },\n path: {\n d: 'M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z',\n },\n } as const\n\n const decrementSvgAttrs = {\n svg: {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '16',\n height: '16',\n fill: 'currentColor',\n class: 'bi bi-dash',\n viewBox: '0 0 16 16',\n },\n path: {d: 'M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z'},\n } as const\n\n const sharedButtonAttrs = {\n 'class': [{'py-0': !props.vertical}, 'btn', 'btn-sm', 'border-0', 'rounded-0'],\n 'tabindex': '-1',\n 'type': 'button' as ButtonType,\n 'disabled': props.disabled || props.readonly,\n 'aria-disabled': props.disabled || props.readonly ? true : undefined,\n 'aria-controls': computedId.value,\n }\n\n const sharedSvgAttrs = {\n 'aria-hidden': true,\n 'scale': focused.value ? 1.5 : 1.25,\n }\n\n const handler = (event: Readonly<Event>, stepper: (multiplier?: number) => void) => {\n if (!props.disabled && !props.readonly) {\n stopEvent(event)\n setMouseup(true)\n // Since we `preventDefault()`, we must manually focus the button\n // Though it's likely captured from the element click focus\n focused.value = true\n handleStepRepeat(event, stepper)\n }\n }\n\n const incrementAttrs = {\n button: {\n ...sharedButtonAttrs,\n 'aria-label': props.labelIncrement || undefined,\n 'aria-keyshortcuts': 'ArrowUp',\n },\n svg: {\n ...sharedSvgAttrs,\n ...incrementSvgAttrs.svg,\n },\n path: {\n ...incrementSvgAttrs.path,\n },\n slot: {\n name: 'increment',\n },\n handler: (e: Event) => handler(e, stepUp),\n }\n\n const decrementAttrs = {\n button: {\n ...sharedButtonAttrs,\n 'aria-label': props.labelDecrement || undefined,\n 'aria-keyshortcuts': 'ArrowDown',\n },\n svg: {\n ...sharedSvgAttrs,\n ...decrementSvgAttrs.svg,\n },\n path: {\n ...decrementSvgAttrs.path,\n },\n slot: {\n name: 'decrement',\n },\n handler: (e: Readonly<Event>) => handler(e, stepDown),\n }\n\n return {\n top: {\n ...(props.vertical ? incrementAttrs : decrementAttrs),\n },\n bottom: {\n ...(!props.vertical ? incrementAttrs : decrementAttrs),\n },\n }\n})\n</script>\n\n<script lang=\"ts\">\nconst defaultValues = {\n min: 1,\n max: 100,\n step: 1,\n repeatDelay: 500,\n repeatInterval: 100,\n repeatThreshold: 10,\n repeatMultiplier: 4,\n} as const\n</script>\n","<template>\n <component\n :is=\"props.tag\"\n :id=\"computedId\"\n :title=\"tagText\"\n class=\"badge b-form-tag d-inline-flex align-items-center mw-100\"\n :class=\"computedClasses\"\n :aria-labelledby=\"taglabelId\"\n >\n <span :id=\"taglabelId\" class=\"b-form-tag-content flex-grow-1 text-truncate\">\n <slot>{{ tagText }}</slot>\n </span>\n <BCloseButton\n v-if=\"!props.disabled && !props.noRemove\"\n aria-keyshortcuts=\"Delete\"\n :aria-label=\"props.removeLabel\"\n class=\"b-form-tag-remove\"\n :aria-describedby=\"taglabelId\"\n :aria-controls=\"props.id\"\n @click=\"emit('remove', tagText)\"\n />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, toRef} from 'vue'\nimport {useDefaults, useId} from '../../composables'\nimport type {BFormTagProps} from '../../types'\nimport BCloseButton from '../BButton/BCloseButton.vue'\n\nconst _props = withDefaults(defineProps<BFormTagProps>(), {\n disabled: false,\n id: undefined,\n noRemove: false,\n pill: false,\n removeLabel: 'Remove tag',\n tag: 'span',\n title: undefined,\n variant: 'secondary',\n})\nconst props = useDefaults(_props, 'BFormTag')\n\nconst emit = defineEmits<{\n remove: [value: string]\n}>()\n\nconst slots = defineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst computedId = useId(() => props.id)\n\nconst tagText = computed(\n () => ((slots.default?.({})[0].children ?? '').toString() || props.title) ?? ''\n)\nconst taglabelId = toRef(() => `${computedId.value}taglabel__`)\n\nconst computedClasses = computed(() => ({\n [`text-bg-${props.variant}`]: props.variant !== null,\n 'rounded-pill': props.pill,\n 'disabled': props.disabled,\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 @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 text\"\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 v-bind=\"slotAttrs\">\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 @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 0px; 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=\"polite\" 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, toRef} from 'vue'\nimport {useDefaults, useId, useStateClass} from '../../composables'\nimport type {BFormTagsProps, ClassValue, ColorVariant} from '../../types'\nimport {escapeRegExpChars} from '../../utils'\nimport BFormTag from './BFormTag.vue'\n\nconst _props = withDefaults(defineProps<BFormTagsProps>(), {\n addButtonText: 'Add',\n addButtonVariant: 'outline-secondary',\n addOnChange: false,\n autofocus: false,\n disabled: false,\n duplicateTagText: 'Duplicate tag(s)',\n form: undefined,\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: 'md',\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')\n\nconst emit = defineEmits<{\n 'blur': [value: FocusEvent]\n 'focus': [value: FocusEvent]\n 'focusin': [value: FocusEvent]\n 'focusout': [value: FocusEvent]\n 'tag-state': [...args: string[][]]\n}>()\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'add-button-text'?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'default'?: (props: typeof slotAttrs.value) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'tag'?: (props: {\n tag: string\n tagClass: ClassValue\n tagVariant: ColorVariant | null\n tagPills: boolean\n removeTag: (tag?: string) => void\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }) => any\n}>()\n\nconst modelValue = defineModel<string[]>({\n default: () => [],\n})\n\nconst computedId = useId()\n\nconst limitNumber = useToNumber(() => props.limit ?? NaN)\n\nconst stateClass = useStateClass(() => props.state)\n\nconst input = ref<HTMLInputElement | null>(null)\n\nconst {focused} = useFocus(input, {\n initialValue: props.autofocus,\n})\n\nconst _inputId = toRef(() => 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 !== 'md',\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 = toRef(() => tags.value.length === limitNumber.value)\nconst disableAddButton = toRef(() => !isInvalid.value && !isDuplicate.value)\n\nconst slotAttrs = computed(() => ({\n addButtonText: props.addButtonText,\n addButtonVariant: props.addButtonVariant,\n addTag,\n disableAddButton: disableAddButton.value,\n disabled: props.disabled,\n duplicateTagText: props.duplicateTagText,\n duplicateTags: duplicateTags.value,\n form: props.form,\n inputAttrs: {\n ...props.inputAttrs,\n disabled: props.disabled,\n form: props.form,\n id: _inputId.value,\n value: inputValue.value,\n },\n inputClass: props.inputClass,\n inputHandlers: {\n input: onInput,\n keydown: onKeydown,\n change: onChange,\n },\n inputId: _inputId.value,\n inputType: props.inputType,\n invalidTagText: props.invalidTagText,\n invalidTags: invalidTags.value,\n isDuplicate: isDuplicate.value,\n isInvalid: isInvalid.value,\n isLimitReached: isLimitReached.value,\n limitTagsText: props.limitTagsText,\n limit: limitNumber.value,\n noTagRemove: props.noTagRemove,\n placeholder: props.placeholder,\n removeTag,\n required: props.required,\n separator: props.separator,\n size: props.size,\n state: props.state,\n tagClass: props.tagClass,\n tagPills: props.tagPills,\n tagRemoveLabel: props.tagRemoveLabel,\n tagVariant: props.tagVariant,\n tags: tags.value,\n}))\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 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' && !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})\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 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})\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=\"props.disabled\"\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=\"props.rows\"\n :style=\"computedStyles\"\n :wrap=\"props.wrap || undefined\"\n @input=\"onInput($event)\"\n @change=\"onChange($event)\"\n @blur=\"onBlur($event)\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport type {BFormTextareaProps, Numberish} from '../../types'\nimport {computed, type CSSProperties} from 'vue'\nimport {useDefaults, useFormInput, useStateClass} from '../../composables'\nimport {normalizeInput} from '../../utils'\n\nconst _props = withDefaults(defineProps<BFormTextareaProps>(), {\n // CommonInputProps\n ariaInvalid: undefined,\n autocomplete: undefined,\n autofocus: false,\n debounce: 0,\n debounceMaxWait: 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: null,\n // End CommonInputProps\n noResize: false,\n rows: 2,\n wrap: 'soft',\n})\nconst props = useDefaults(_props, 'BFormTextarea')\n\nconst [modelValue, modelModifiers] = defineModel<Numberish | null, 'trim' | 'lazy' | 'number'>({\n default: '',\n set: (v) => normalizeInput(v, modelModifiers),\n})\n\nconst {input, computedId, computedAriaInvalid, onInput, onChange, onBlur, focus, blur} =\n useFormInput(props, modelValue, modelModifiers)\n\nconst stateClass = useStateClass(() => props.state)\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 computedStyles = computed<CSSProperties>(() => ({\n resize: props.noResize ? 'none' : undefined,\n}))\n\ndefineExpose({\n blur,\n element: input,\n focus,\n})\n</script>\n","<template>\n <component\n :is=\"props.tag\"\n :id=\"props.id\"\n class=\"input-group\"\n :class=\"computedClasses\"\n role=\"group\"\n >\n <slot name=\"prepend\">\n <span v-if=\"hasPrepend\" class=\"input-group-text\">\n <!-- eslint-disable-next-line vue/no-v-html -->\n <span v-if=\"!!props.prependHtml\" v-html=\"props.prependHtml\" />\n <span v-else>{{ props.prepend }}</span>\n </span>\n </slot>\n <slot />\n <slot name=\"append\">\n <span v-if=\"hasAppend\" class=\"input-group-text\">\n <!-- eslint-disable-next-line vue/no-v-html -->\n <span v-if=\"!!props.appendHtml\" v-html=\"props.appendHtml\" />\n <span v-else>{{ props.append }}</span>\n </span>\n </slot>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../../composables'\nimport type {BInputGroupProps} from '../../types'\nimport {computed, provide, toRef} from 'vue'\nimport {inputGroupKey} from '../../utils/keys'\n\nprovide(inputGroupKey, true)\n\nconst _props = withDefaults(defineProps<BInputGroupProps>(), {\n append: undefined,\n appendHtml: undefined,\n id: undefined,\n prepend: undefined,\n prependHtml: undefined,\n size: 'md',\n tag: 'div',\n})\nconst props = useDefaults(_props, 'BInputGroup')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n prepend?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => ({\n [`input-group-${props.size}`]: props.size !== 'md',\n}))\nconst hasAppend = toRef(() => !!props.append || !!props.appendHtml)\nconst hasPrepend = toRef(() => !!props.prepend || !!props.prependHtml)\n</script>\n","<template>\n <component :is=\"props.tag\" class=\"input-group-text\">\n <slot>\n {{ props.text }}\n </slot>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../../composables'\nimport type {BInputGroupTextProps} from '../../types'\n\nconst _props = withDefaults(defineProps<BInputGroupTextProps>(), {\n tag: 'div',\n text: undefined,\n})\nconst props = useDefaults(_props, 'BInputGroupText')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n</script>\n","<template>\n <component :is=\"computedTag\" class=\"list-group\" :class=\"computedClasses\">\n <slot />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, provide, toRef} from 'vue'\nimport {listGroupInjectionKey} from '../../utils'\nimport type {BListGroupProps} from '../../types'\nimport {useDefaults} from '../../composables'\n\nconst _props = withDefaults(defineProps<BListGroupProps>(), {\n flush: false,\n horizontal: false,\n numbered: false,\n tag: 'div',\n})\nconst props = useDefaults(_props, 'BListGroup')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => {\n const horizontal = props.flush ? false : props.horizontal\n return {\n 'list-group-flush': props.flush,\n 'list-group-horizontal': horizontal === true,\n [`list-group-horizontal-${horizontal}`]: typeof horizontal === 'string',\n 'list-group-numbered': props.numbered,\n }\n})\nconst computedTag = toRef(() => (props.numbered === true ? 'ol' : props.tag))\n\nprovide(listGroupInjectionKey, {\n numbered: toRef(() => props.numbered),\n})\n</script>\n","<template>\n <component\n :is=\"tagComputed\"\n class=\"list-group-item\"\n :class=\"computedClasses\"\n :aria-current=\"props.active ? true : undefined\"\n :aria-disabled=\"props.disabled ? true : undefined\"\n :target=\"isLink ? props.target : undefined\"\n :href=\"!props.button ? props.href : undefined\"\n :to=\"!props.button ? props.to : undefined\"\n v-bind=\"computedAttrs\"\n >\n <slot />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, inject, toRef, useAttrs} from 'vue'\nimport type {BListGroupItemProps} from '../../types'\nimport {useBLinkHelper, useDefaults} from '../../composables'\nimport BLink from '../BLink/BLink.vue'\nimport {listGroupInjectionKey} from '../../utils'\n\nconst _props = withDefaults(defineProps<BListGroupItemProps>(), {\n action: false,\n button: false,\n tag: 'div',\n // Link props\n active: false, // Why is this active: false?\n // All others use defaults\n activeClass: undefined,\n disabled: undefined,\n exactActiveClass: undefined,\n href: undefined,\n icon: undefined,\n opacity: undefined,\n opacityHover: undefined,\n stretched: false,\n rel: undefined,\n replace: undefined,\n routerComponentName: undefined,\n target: undefined,\n to: undefined,\n underlineOffset: undefined,\n underlineOffsetHover: undefined,\n underlineOpacity: undefined,\n underlineOpacityHover: undefined,\n underlineVariant: undefined,\n variant: undefined,\n // End link props\n})\nconst props = useDefaults(_props, 'BListGroupItem')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst attrs = useAttrs()\n\nconst parentData = inject(listGroupInjectionKey, null)\n\nconst {computedLink} = useBLinkHelper(props)\n\nconst isLink = toRef(() => !props.button && computedLink.value)\nconst tagComputed = toRef(() =>\n parentData?.numbered.value ? 'li' : props.button ? 'button' : !isLink.value ? props.tag : BLink\n)\n\nconst isAction = computed(\n () =>\n props.action ||\n isLink.value ||\n props.button ||\n ['a', 'router-link', 'button', 'b-link'].includes(props.tag)\n)\n\nconst computedClasses = computed(() => ({\n [`list-group-item-${props.variant}`]: props.variant !== null && props.variant !== undefined,\n 'list-group-item-action': isAction.value,\n 'active': props.active,\n 'disabled': props.disabled,\n}))\n\nconst computedAttrs = computed(() => {\n const localAttrs = {} as {type?: string; disabled?: boolean}\n if (props.button) {\n if (!attrs || !attrs.type) {\n // Add a type for button is one not provided in passed attributes\n localAttrs.type = 'button'\n }\n if (props.disabled) {\n // Set disabled attribute if button and disabled\n localAttrs.disabled = true\n }\n }\n return localAttrs\n})\n</script>\n","<template>\n <Teleport :to=\"props.teleportTo\" :disabled=\"props.teleportDisabled\">\n <div id=\"__BVID__modal-container\">\n <component\n :is=\"modal.value.component\"\n v-for=\"(modal, index) in modals\"\n :key=\"index\"\n v-model=\"modal.value.props._modelValue\"\n v-bind=\"pluckModalItem(modal.value.props)\"\n :teleport-disabled=\"true\"\n @update:model-value=\"leave?.(modal.value.props._self)\"\n @hide=\"\n (e: BvTriggerableEvent) => {\n // These following are confirm rules, otherwise we always resolve true\n if (modal.value.props._isConfirm === true) {\n if (e.trigger === 'ok') {\n modal.value.props._promise.resolve(true)\n return\n }\n if (e.trigger === 'cancel') {\n modal.value.props._promise.resolve(false)\n return\n }\n modal.value.props._promise.resolve(null)\n }\n modal.value.props._promise.resolve(true)\n }\n \"\n @hidden=\"remove?.(modal.value.props._self)\"\n />\n </div>\n </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport {BvTriggerableEvent, omit} from '../../utils'\nimport {useDefaults, useModalController} from '../../composables'\nimport type {BModalOrchestratorProps} from '../../types'\n\nconst _props = withDefaults(defineProps<BModalOrchestratorProps>(), {\n teleportDisabled: false,\n teleportTo: 'body',\n})\nconst props = useDefaults(_props, 'BModalOrchestrator')\n\nconst {modals, remove, show, confirm, leave} = useModalController()\n\nconst pluckModalItem = (\n payload: Readonly<Exclude<typeof modals, undefined>['value'][number]['value']['props']>\n) => omit(payload, ['_promise', '_self', '_isConfirm', '_modelValue'])\n\ndefineExpose({\n modals,\n show,\n confirm,\n})\n</script>\n","<template>\n <component :is=\"props.tag\" class=\"nav\" :class=\"computedClasses\">\n <slot />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BNavProps} from '../../types'\nimport {useAlignment, useDefaults} from '../../composables'\nimport {computed} from 'vue'\n\nconst _props = withDefaults(defineProps<BNavProps>(), {\n align: undefined,\n cardHeader: false,\n fill: false,\n justified: false,\n pills: false,\n small: false,\n tabs: false,\n tag: 'ul',\n underline: false,\n vertical: false,\n})\nconst props = useDefaults(_props, 'BNav')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst alignment = useAlignment(() => props.align)\n\nconst computedClasses = computed(() => ({\n 'nav-tabs': props.tabs,\n 'nav-pills': props.pills && !props.tabs,\n 'card-header-tabs': !props.vertical && props.cardHeader && props.tabs,\n 'card-header-pills': !props.vertical && props.cardHeader && props.pills && !props.tabs,\n 'flex-column': props.vertical,\n 'nav-fill': !props.vertical && props.fill,\n 'nav-justified': !props.vertical && props.justified,\n [alignment.value]: !props.vertical && props.align !== undefined,\n 'small': props.small,\n 'nav-underline': props.underline,\n}))\n</script>\n","<template>\n <li class=\"d-flex flex-row align-items-center flex-wrap\">\n <BForm\n v-bind=\"$attrs\"\n :id=\"props.id\"\n :floating=\"props.floating\"\n :role=\"props.role\"\n :novalidate=\"props.novalidate\"\n :validated=\"props.validated\"\n class=\"d-flex\"\n @submit.prevent=\"submitted\"\n >\n <slot />\n </BForm>\n </li>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../../composables'\nimport type {BNavFormProps} from '../../types'\nimport BForm from '../BForm/BForm.vue'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst _props = withDefaults(defineProps<BNavFormProps>(), {\n role: undefined,\n // BForm props\n floating: undefined,\n id: undefined,\n novalidate: undefined,\n validated: undefined,\n // End BForm props\n})\nconst props = useDefaults(_props, 'BNavForm')\n\nconst emit = defineEmits<{\n submit: [value: Event]\n}>()\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst submitted = (e: Readonly<Event>) => {\n emit('submit', e)\n}\n</script>\n","<template>\n <li class=\"nav-item\">\n <BLink\n class=\"nav-link\"\n :class=\"linkClass\"\n :tabindex=\"props.disabled ? -1 : undefined\"\n :aria-disabled=\"props.disabled ? true : undefined\"\n v-bind=\"{...computedLinkProps, ...linkAttrs}\"\n @click=\"emit('click', $event)\"\n >\n <slot />\n </BLink>\n </li>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed} from 'vue'\nimport BLink from '../BLink/BLink.vue'\nimport type {BNavItemProps} from '../../types'\nimport {pick} from '../../utils'\nimport {useDefaults} from '../../composables'\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst _props = withDefaults(defineProps<BNavItemProps>(), {\n // Link props\n active: undefined,\n activeClass: undefined,\n disabled: undefined,\n exactActiveClass: undefined,\n href: undefined,\n icon: undefined,\n linkAttrs: undefined,\n linkClass: undefined,\n opacity: undefined,\n stretched: false,\n opacityHover: undefined,\n rel: undefined,\n replace: undefined,\n routerComponentName: undefined,\n target: undefined,\n to: undefined,\n underlineOffset: undefined,\n underlineOffsetHover: undefined,\n underlineOpacity: undefined,\n underlineOpacityHover: undefined,\n underlineVariant: undefined,\n variant: undefined,\n // End link props\n})\nconst props = useDefaults(_props, 'BNavItem')\n\nconst emit = defineEmits<{\n click: [value: MouseEvent]\n}>()\n\nconst computedLinkProps = computed(() =>\n pick(props, [\n 'active',\n 'activeClass',\n 'append',\n 'disabled',\n 'href',\n 'icon',\n 'opacity',\n 'opacityHover',\n 'rel',\n 'replace',\n 'routerComponentName',\n 'target',\n 'to',\n 'underlineOffset',\n 'underlineOffsetHover',\n 'underlineOpacity',\n 'underlineOpacityHover',\n 'underlineVariant',\n 'variant',\n ])\n)\ncomputedLinkProps.value.activeClass\n</script>\n","<template>\n <li class=\"nav-item dropdown\">\n <BDropdown\n ref=\"dropdown\"\n v-bind=\"props\"\n v-model=\"modelValue\"\n is-nav\n @show=\"emit('show', $event)\"\n @shown=\"emit('shown')\"\n @hide=\"emit('hide', $event)\"\n @hidden=\"emit('hidden')\"\n @hide-prevented=\"emit('hide-prevented')\"\n @show-prevented=\"emit('show-prevented')\"\n @click=\"emit('click', $event)\"\n @toggle=\"emit('toggle')\"\n >\n <template #button-content>\n <slot name=\"button-content\" />\n </template>\n <template #toggle-text>\n <slot name=\"toggle-text\" />\n </template>\n <template #default>\n <slot :hide=\"hide\" :show=\"show\" />\n </template>\n </BDropdown>\n </li>\n</template>\n\n<script setup lang=\"ts\">\nimport {ref} from 'vue'\nimport {BvTriggerableEvent} from '../../utils'\nimport BDropdown from '../BDropdown/BDropdown.vue'\nimport type {BDropdownProps} from '../../types'\nimport {useDefaults} from '../../composables'\n\nconst _props = withDefaults(defineProps<BDropdownProps>(), {\n ariaLabel: undefined,\n autoClose: true,\n block: false,\n boundary: 'clippingAncestors',\n boundaryPadding: undefined,\n center: false,\n teleportTo: undefined,\n teleportDisabled: false,\n disabled: false,\n dropend: false,\n dropstart: false,\n dropup: false,\n end: false,\n floatingMiddleware: undefined,\n id: undefined,\n isNav: true,\n lazy: false,\n menuClass: undefined,\n noCaret: false,\n noFlip: false,\n noShift: false,\n noSize: false,\n offset: 0,\n role: 'menu',\n size: 'md',\n split: false,\n splitButtonType: 'button',\n splitClass: undefined,\n splitDisabled: undefined,\n splitHref: undefined,\n splitTo: undefined,\n splitVariant: undefined,\n strategy: 'absolute',\n text: undefined,\n toggleClass: undefined,\n toggleText: 'Toggle dropdown',\n variant: 'link',\n})\nconst props = useDefaults(_props, 'BNavItemDropdown')\n\nconst emit = defineEmits<{\n 'click': [event: MouseEvent]\n 'hidden': []\n 'hide': [value: BvTriggerableEvent]\n 'hide-prevented': []\n 'show': [value: BvTriggerableEvent]\n 'show-prevented': []\n 'shown': []\n 'toggle': []\n}>()\n\nconst modelValue = defineModel<boolean>({default: false})\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'button-content'?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'default'?: (props: {hide: () => void; show: () => void}) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'toggle-text'?: (props: Record<string, never>) => any\n}>()\nconst dropdown = ref<InstanceType<typeof BDropdown> | null>(null)\n\nconst hide = () => {\n dropdown.value?.hide()\n}\nconst show = () => {\n dropdown.value?.show()\n}\nconst toggle = () => {\n dropdown.value?.toggle()\n}\n\ndefineExpose({\n hide,\n show,\n toggle,\n})\n</script>\n","<template>\n <li class=\"navbar-text\">\n <slot>\n {{ props.text }}\n </slot>\n </li>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../../composables'\nimport type {BNavTextProps} from '../../types'\n\nconst _props = withDefaults(defineProps<BNavTextProps>(), {text: undefined})\nconst props = useDefaults(_props, 'BNavText')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n</script>\n","<template>\n <component :is=\"props.tag\" class=\"navbar\" :class=\"computedClasses\" :role=\"computedRole\">\n <div v-if=\"props.container !== false\" :class=\"containerClass\">\n <slot />\n </div>\n <slot v-else />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, provide, toRef} from 'vue'\nimport type {BNavbarProps} from '../../types'\nimport {useContainerClasses, useDefaults} from '../../composables'\nimport {navbarInjectionKey} from '../../utils'\n\nconst _props = withDefaults(defineProps<BNavbarProps>(), {\n autoClose: true,\n container: 'fluid',\n fixed: undefined,\n print: false,\n sticky: undefined,\n tag: 'nav',\n toggleable: false,\n variant: null,\n})\nconst props = useDefaults(_props, 'BNavbar')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst computedRole = toRef(() => (props.tag === 'nav' ? undefined : 'navigation'))\n\nconst containerClass = useContainerClasses(() => props.container)\n\nconst computedClasses = computed(() => ({\n 'd-print': props.print,\n [`sticky-${props.sticky}`]: props.sticky !== undefined,\n [`bg-${props.variant}`]: props.variant !== null,\n [`fixed-${props.fixed}`]: props.fixed !== undefined,\n 'navbar-expand': props.toggleable === false,\n [`navbar-expand-${props.toggleable}`]: typeof props.toggleable === 'string',\n}))\n\nprovide(navbarInjectionKey, {\n tag: toRef(() => props.tag),\n autoClose: toRef(() => props.autoClose),\n})\n</script>\n","<template>\n <component :is=\"computedTag\" class=\"navbar-brand\" v-bind=\"computedLinkProps\">\n <slot />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {toRef} from 'vue'\nimport BLink from '../BLink/BLink.vue'\nimport type {BNavbarBrandProps} from '../../types'\nimport {useBLinkHelper, useDefaults} from '../../composables'\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst _props = withDefaults(defineProps<BNavbarBrandProps>(), {\n tag: 'div',\n // Link props\n active: undefined,\n activeClass: undefined,\n disabled: undefined,\n exactActiveClass: undefined,\n href: undefined,\n stretched: false,\n icon: undefined,\n opacity: undefined,\n opacityHover: undefined,\n rel: undefined,\n replace: undefined,\n routerComponentName: undefined,\n target: undefined,\n to: undefined,\n underlineOffset: undefined,\n underlineOffsetHover: undefined,\n underlineOpacity: undefined,\n underlineOpacityHover: undefined,\n underlineVariant: undefined,\n variant: undefined,\n // End link props\n})\nconst props = useDefaults(_props, 'BNavbarBrand')\n\nconst {computedLink, computedLinkProps} = useBLinkHelper(props, [\n 'active',\n 'activeClass',\n 'append',\n 'disabled',\n 'href',\n 'rel',\n 'replace',\n 'routerComponentName',\n 'target',\n 'to',\n 'variant',\n 'opacity',\n 'opacityHover',\n 'underlineVariant',\n 'underlineOffset',\n 'underlineOffsetHover',\n 'underlineOpacity',\n 'underlineOpacityHover',\n 'icon',\n])\n\nconst computedTag = toRef(() => (computedLink.value ? BLink : props.tag))\n</script>\n","<template>\n <ul class=\"navbar-nav\" :class=\"computedClasses\">\n <slot />\n </ul>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BNavbarNavProps} from '../../types'\nimport {computed} from 'vue'\nimport {useAlignment, useDefaults} from '../../composables'\n\nconst _props = withDefaults(defineProps<BNavbarNavProps>(), {\n align: undefined,\n fill: false,\n justified: false,\n small: false,\n tag: 'ul',\n})\nconst props = useDefaults(_props, 'BNavbarNav')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst alignment = useAlignment(() => props.align)\n\nconst computedClasses = computed(() => ({\n 'nav-fill': props.fill,\n 'nav-justified': props.justified,\n [alignment.value]: props.align !== undefined,\n 'small': props.small,\n}))\n</script>\n","import type {Directive, DirectiveBinding} from 'vue'\n\nconst setTheme = (el: Readonly<HTMLElement>, value: string): void =>\n el.setAttribute('data-bs-theme', value)\nexport default {\n mounted(el, binding: DirectiveBinding): void {\n setTheme(el, binding.value)\n },\n updated(el, binding: DirectiveBinding): void {\n setTheme(el, binding.value)\n },\n} satisfies Directive<HTMLElement>\n","import {RX_HASH, RX_HASH_ID, RX_SPACE_SPLIT} from '../constants/regex'\nimport type {Directive, DirectiveBinding} from 'vue'\n\nconst getTargets = (\n binding: DirectiveBinding<string | readonly string[] | undefined>,\n el: Readonly<HTMLElement>\n) => {\n const {modifiers, arg, value} = binding\n // Any modifiers are considered target Ids\n const targets = Object.keys(modifiers || {})\n\n // If value is a string, split out individual targets (if space delimited)\n const localValue = typeof value === 'string' ? value.split(RX_SPACE_SPLIT) : value\n\n // Support target Id as link href (`href=\"#id\"`)\n if (el.tagName.toLowerCase() === 'a') {\n const href = el.getAttribute('href') || ''\n if (RX_HASH_ID.test(href)) {\n targets.push(href.replace(RX_HASH, ''))\n }\n }\n\n // Add Id from `arg` (if provided), and support value\n // as a single string Id or an array of string Ids\n // If `value` is not an array or string, then it gets filtered out\n Array.prototype.concat\n .apply([], [arg, localValue])\n .forEach((t) => typeof t === 'string' && targets.push(t))\n\n // Return only unique and truthy target Ids\n return targets.filter((t, index, arr) => t && arr.indexOf(t) === index)\n}\n\nconst toggle = (targetIds: readonly string[], el: Readonly<HTMLElement>) => {\n targetIds.forEach((targetId) => {\n const target = document.getElementById(targetId)\n\n if (target !== null) {\n target.dispatchEvent(new Event('bv-toggle'))\n }\n })\n setTimeout(() => checkVisibility(targetIds, el), 50)\n}\n\nconst checkVisibility = (targetIds: readonly string[], el: Readonly<HTMLElement>) => {\n let visible = false\n targetIds.forEach((targetId) => {\n const target = document.getElementById(targetId)\n\n if (target?.classList.contains('show')) {\n visible = true\n }\n if (target?.classList.contains('closing')) {\n visible = false\n }\n })\n el.setAttribute('aria-expanded', visible ? 'true' : 'false')\n el.classList.remove(visible ? 'collapsed' : 'not-collapsed')\n el.classList.add(visible ? 'not-collapsed' : 'collapsed')\n}\n\nconst handleUpdate = (\n el: WithToggle,\n binding: DirectiveBinding<string | readonly string[] | undefined>\n) => {\n // Determine targets\n const targets = getTargets(binding, el)\n if (targets.length === 0) return\n\n // Set up click handler\n if (el.__toggle) {\n el.removeEventListener('click', el.__toggle)\n }\n el.__toggle = () => toggle(targets, el)\n el.addEventListener('click', el.__toggle)\n\n // Update attributes\n el.setAttribute('aria-controls', targets.join(' '))\n checkVisibility(targets, el)\n}\n\nexport interface WithToggle extends HTMLElement {\n __toggle: () => void\n}\n\nexport default {\n mounted: handleUpdate,\n updated: handleUpdate,\n unmounted(el: WithToggle): void {\n el.removeEventListener('click', el.__toggle)\n el.removeAttribute('aria-controls')\n el.removeAttribute('aria-expanded')\n },\n} satisfies Directive<WithToggle>\n","import {type Directive} from 'vue'\nimport {\n bind,\n type ElementWithPopper,\n resolveActiveStatus,\n resolveContent,\n resolveDirectiveProps,\n unbind,\n} from '../utils/floatingUi'\n\nexport default {\n mounted(el, binding) {\n const isActive = resolveActiveStatus(binding.value)\n if (!isActive) return\n\n const text = resolveContent(binding.value, el)\n\n if (!text.content && !text.title) return\n bind(el, binding, {\n ...resolveDirectiveProps(binding, el),\n ...text,\n })\n },\n updated(el, binding) {\n const isActive = resolveActiveStatus(binding.value)\n if (!isActive) return\n\n const text = resolveContent(binding.value, el)\n\n if (!text.content && !text.title) return\n\n unbind(el)\n bind(el, binding, {\n ...resolveDirectiveProps(binding, el),\n ...text,\n })\n },\n beforeUnmount(el) {\n unbind(el)\n },\n} satisfies Directive<ElementWithPopper>\n","import {type Directive, type DirectiveBinding} from 'vue'\nimport {useScrollspy} from '../composables'\nimport {omit} from '../utils'\n\nexport interface ElementWithScrollspy extends HTMLElement {\n $__scrollspy?: ReturnType<typeof useScrollspy>\n}\n\nconst bind = (el: ElementWithScrollspy, binding: Readonly<DirectiveBinding>) => {\n if (el.$__scrollspy) el.$__scrollspy.cleanup()\n const {arg, value} = binding\n const isObject = typeof value === 'object' && value !== null\n const content = arg\n ? arg\n : typeof value === 'string'\n ? value\n : isObject\n ? value.content || value.element\n : null\n el.$__scrollspy = useScrollspy(content, el, isObject ? omit(value, ['content', 'element']) : {})\n}\n\nexport default {\n mounted: bind,\n updated: bind,\n beforeUnmount(el) {\n if (el.$__scrollspy) el.$__scrollspy.cleanup()\n },\n} satisfies Directive<ElementWithScrollspy>\n","import {type Directive} from 'vue'\nimport {\n bind,\n type ElementWithPopper,\n resolveActiveStatus,\n resolveContent,\n resolveDirectiveProps,\n unbind,\n} from '../utils/floatingUi'\n\nexport default {\n mounted(el, binding) {\n const isActive = resolveActiveStatus(binding.value)\n if (!isActive) return\n\n const text = resolveContent(binding.value, el)\n\n if (!text.content && !text.title) return\n\n bind(el, binding, {\n noninteractive: true,\n ...resolveDirectiveProps(binding, el),\n title: text.title ?? text.content ?? '',\n tooltip: isActive,\n })\n },\n updated(el, binding) {\n const isActive = resolveActiveStatus(binding.value)\n if (!isActive) return\n\n const text = resolveContent(binding.value, el)\n\n if (!text.content && !text.title) return\n unbind(el)\n\n bind(el, binding, {\n noninteractive: true,\n ...resolveDirectiveProps(binding, el),\n title: text.title ?? text.content ?? '',\n tooltip: isActive,\n })\n },\n beforeUnmount(el) {\n unbind(el)\n },\n} satisfies Directive<ElementWithPopper>\n","<template>\n <button\n v-b-toggle=\"!props.disabled ? props.target : undefined\"\n class=\"navbar-toggler\"\n type=\"button\"\n :class=\"computedClasses\"\n :disabled=\"props.disabled\"\n :aria-label=\"props.label\"\n @click=\"onClick\"\n >\n <slot>\n <span class=\"navbar-toggler-icon\" />\n </slot>\n </button>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BNavbarToggleProps} from '../../types'\nimport {vBToggle} from '../../directives'\nimport {computed} from 'vue'\nimport {useDefaults} from '../../composables'\n\nconst _props = withDefaults(defineProps<BNavbarToggleProps>(), {\n label: 'Toggle navigation',\n disabled: false,\n target: undefined,\n})\nconst props = useDefaults(_props, 'BNavbarToggle')\n\nconst emit = defineEmits<{\n click: [value: MouseEvent]\n}>()\n\ndefineSlots<{\n // TODO this scoped slot is {expanded: boolean}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => ({\n disabled: props.disabled,\n}))\n\nconst onClick = (e: Readonly<MouseEvent>): void => {\n if (!props.disabled) {\n emit('click', e)\n }\n}\n</script>\n","<template>\n <Teleport :to=\"props.teleportTo\" :disabled=\"props.teleportDisabled || isOpenByBreakpoint\">\n <Transition\n v-bind=\"transitionProps\"\n @before-enter=\"OnBeforeEnter\"\n @after-enter=\"OnAfterEnter\"\n @leave=\"onLeave\"\n @after-leave=\"OnAfterLeave\"\n >\n <div\n v-show=\"modelValue || isOpenByBreakpoint\"\n :id=\"computedId\"\n ref=\"element\"\n aria-modal=\"true\"\n role=\"dialog\"\n :class=\"computedClasses\"\n :style=\"computedStyles\"\n tabindex=\"-1\"\n :aria-labelledby=\"`${computedId}-offcanvas-label`\"\n data-bs-backdrop=\"false\"\n v-bind=\"$attrs\"\n >\n <template v-if=\"lazyShowing\">\n <div v-if=\"!props.noHeader\" class=\"offcanvas-header\" :class=\"props.headerClass\">\n <slot name=\"header\" v-bind=\"sharedSlots\">\n <h5 :id=\"`${computedId}-offcanvas-label`\" class=\"offcanvas-title\">\n <slot name=\"title\" v-bind=\"sharedSlots\">\n {{ props.title }}\n </slot>\n </h5>\n <template v-if=\"!props.noHeaderClose\">\n <BButton v-if=\"hasHeaderCloseSlot\" v-bind=\"headerCloseAttrs\" @click=\"hide('close')\">\n <slot name=\"header-close\" />\n </BButton>\n <BCloseButton\n v-else\n :aria-label=\"props.headerCloseLabel\"\n v-bind=\"headerCloseAttrs\"\n @click=\"hide('close')\"\n />\n </template>\n </slot>\n </div>\n <div class=\"offcanvas-body\" :class=\"props.bodyClass\" v-bind=\"props.bodyAttrs\">\n <slot v-bind=\"sharedSlots\" />\n </div>\n <div v-if=\"hasFooterSlot\" :class=\"props.footerClass\">\n <slot name=\"footer\" v-bind=\"sharedSlots\" />\n </div>\n </template>\n <div\n v-if=\"needsFallback\"\n ref=\"fallbackFocusElement\"\n :class=\"fallbackClassSelector\"\n tabindex=\"0\"\n style=\"width: 0; height: 0; overflow: hidden\"\n />\n </div>\n </Transition>\n <slot v-if=\"showBackdrop\" name=\"backdrop\">\n <div class=\"offcanvas-backdrop fade show\" @click=\"hide('backdrop')\" />\n </slot>\n </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n breakpointsBootstrapV5,\n onKeyStroke,\n useBreakpoints,\n useEventListener,\n useFocus,\n} from '@vueuse/core'\nimport {useActivatedFocusTrap} from '../../composables/useActivatedFocusTrap'\nimport {computed, nextTick, ref, toRef, watch} from 'vue'\nimport {useDefaults, useId, useSafeScrollLock} from '../../composables'\nimport type {BOffcanvasProps} from '../../types'\nimport {BvTriggerableEvent, isEmptySlot} from '../../utils'\nimport BButton from '../BButton/BButton.vue'\nimport BCloseButton from '../BButton/BCloseButton.vue'\n\n// TODO once the responsive stuff may be implemented correctly,\n// What needs to occur is a fixing of the \"body scrolling\".\n// If the offcanvas is on the screen on a large screen, body scrolling is not disabled\n// Even though the modelValue is true\n// When it's a small screen and close, it works, as normal,\n// But then when it opens up on a small screen, it must disable again\n// This is implemented on Layout.vue, but is not officially supported.\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst _props = withDefaults(defineProps<BOffcanvasProps>(), {\n hideBackdrop: false,\n bodyAttrs: undefined,\n bodyClass: undefined,\n bodyScrolling: false,\n footerClass: undefined,\n headerClass: undefined,\n headerCloseClass: undefined,\n headerCloseLabel: 'Close',\n headerCloseVariant: 'secondary',\n id: undefined,\n lazy: false,\n noCloseOnBackdrop: false,\n noCloseOnEsc: false,\n noTrap: false,\n noFocus: false,\n noHeader: false,\n noHeaderClose: false,\n placement: 'start',\n shadow: false,\n teleportDisabled: false,\n teleportTo: 'body',\n title: undefined,\n width: undefined,\n})\nconst props = useDefaults(_props, 'BOffcanvas')\n\nconst emit = defineEmits<{\n 'close': [value: BvTriggerableEvent]\n 'esc': [value: BvTriggerableEvent]\n 'hidden': [value: BvTriggerableEvent]\n 'hide': [value: BvTriggerableEvent]\n 'hide-prevented': []\n 'show': [value: BvTriggerableEvent]\n 'show-prevented': []\n 'shown': [value: BvTriggerableEvent]\n}>()\n\ntype SharedSlotsData = {\n visible: boolean\n placement: 'top' | 'bottom' | 'start' | 'end'\n hide: (trigger?: string) => void\n}\n\nconst slots = defineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'backdrop'?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'default'?: (props: SharedSlotsData) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'footer'?: (props: SharedSlotsData) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'header'?: (props: SharedSlotsData) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'header-close'?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'title'?: (props: SharedSlotsData) => any\n}>()\n\nconst modelValue = defineModel<boolean>({\n default: false,\n})\n\nconst computedId = useId(() => props.id, 'offcanvas')\n\nconst breakpoints = useBreakpoints(breakpointsBootstrapV5)\nconst greaterOrEqualToBreakpoint = breakpoints.greaterOrEqual(() => props.responsive ?? 'xs')\nconst smallerOrEqualToBreakpoint = breakpoints.smallerOrEqual(() => props.responsive ?? 'xs')\n\nconst isOpenByBreakpoint = computed(\n () => props.responsive !== undefined && greaterOrEqualToBreakpoint.value\n)\nuseSafeScrollLock(modelValue, () => props.bodyScrolling || isOpenByBreakpoint.value)\n\nconst element = ref<HTMLElement | null>(null)\nconst fallbackFocusElement = ref<HTMLElement | null>(null)\n\nonKeyStroke(\n 'Escape',\n () => {\n hide('esc')\n },\n {target: element}\n)\n\nconst {focused} = useFocus(element, {\n initialValue: modelValue.value && props.noFocus === false,\n})\n\nconst isActive = ref(modelValue.value)\n\nconst fallbackClassSelector = 'offcanvas-fallback-focus'\nconst {needsFallback} = useActivatedFocusTrap({\n element,\n isActive,\n noTrap: () => props.noTrap || isOpenByBreakpoint.value,\n fallbackFocus: {\n classSelector: fallbackClassSelector,\n ref: fallbackFocusElement,\n },\n})\n\nconst lazyLoadCompleted = ref(false)\nconst wasClosedByBreakpointChange = ref(false)\n\nconst showBackdrop = computed(\n () =>\n (props.responsive === undefined || !isOpenByBreakpoint.value) &&\n props.hideBackdrop === false &&\n modelValue.value === true\n)\n\nconst lazyShowing = computed(\n () =>\n props.lazy === false ||\n (props.lazy === true && lazyLoadCompleted.value === true) ||\n (props.lazy === true && modelValue.value === true)\n)\n\nconst hasHeaderCloseSlot = toRef(() => !isEmptySlot(slots['header-close']))\nconst headerCloseClasses = computed(() => [\n {'text-reset': !hasHeaderCloseSlot.value},\n props.headerCloseClass,\n])\nconst headerCloseAttrs = computed(() => ({\n variant: hasHeaderCloseSlot.value ? props.headerCloseVariant : undefined,\n class: headerCloseClasses.value,\n}))\nconst transitionProps = computed(() =>\n wasClosedByBreakpointChange.value === true\n ? null\n : {\n enterToClass: 'showing',\n enterFromClass: '',\n leaveToClass: 'hiding show',\n leaveFromClass: 'show',\n }\n)\n\nconst hasFooterSlot = toRef(() => !isEmptySlot(slots.footer))\nconst computedClasses = computed(() => [\n props.responsive === undefined ? 'offcanvas' : `offcanvas-${props.responsive}`,\n `offcanvas-${props.placement}`,\n {\n show: modelValue.value && isActive.value === true,\n [`shadow-${props.shadow}`]: !!props.shadow,\n },\n])\n\nconst computedStyles = computed(() => ({\n width: props.width,\n}))\n\nconst sharedSlots = computed<SharedSlotsData>(() => ({\n visible: modelValue.value,\n placement: props.placement,\n hide,\n}))\n\nconst buildTriggerableEvent = (\n type: string,\n opts: Partial<BvTriggerableEvent> = {}\n): BvTriggerableEvent =>\n new BvTriggerableEvent(type, {\n cancelable: false,\n target: element.value || null,\n relatedTarget: null,\n trigger: null,\n ...opts,\n componentId: computedId.value,\n })\n\nconst hide = (trigger = '') => {\n if (\n (trigger === 'backdrop' && props.noCloseOnBackdrop) ||\n (trigger === 'esc' && props.noCloseOnEsc)\n ) {\n emit('hide-prevented')\n return\n }\n\n const event = buildTriggerableEvent('hide', {cancelable: trigger !== '', trigger})\n\n if (trigger === 'close') {\n emit(trigger, event)\n }\n if (trigger === 'esc') {\n emit(trigger, event)\n }\n emit('hide', event)\n\n if (event.defaultPrevented) {\n emit('hide-prevented')\n return\n }\n\n modelValue.value = false\n}\n\nconst show = () => {\n const event = buildTriggerableEvent('show', {cancelable: true})\n emit('show', event)\n if (event.defaultPrevented) {\n modelValue.value = false\n emit('show-prevented')\n return\n }\n modelValue.value = true\n}\n\nconst focus = () => {\n nextTick(() => {\n if (props.noFocus === false) {\n focused.value = true\n }\n })\n}\n\nconst OnBeforeEnter = () => show()\nconst OnAfterEnter = () => {\n isActive.value = true\n focus()\n emit('shown', buildTriggerableEvent('shown'))\n if (props.lazy === true) lazyLoadCompleted.value = true\n}\nconst onLeave = () => {\n wasClosedByBreakpointChange.value = false\n isActive.value = false\n}\nconst OnAfterLeave = () => {\n emit('hidden', buildTriggerableEvent('hidden'))\n if (props.lazy === true) lazyLoadCompleted.value = false\n}\nuseEventListener(element, 'bv-toggle', () => {\n modelValue.value ? hide() : show()\n})\n\nwatch(greaterOrEqualToBreakpoint, (newValue) => {\n if (props.responsive === undefined) return\n modelValue.value = newValue\n})\nwatch(smallerOrEqualToBreakpoint, (newValue) => {\n if (props.responsive === undefined && newValue === true) return\n wasClosedByBreakpointChange.value = true\n})\n\ndefineExpose({\n hide,\n show,\n})\n</script>\n","<template>\n <RenderComponentOrSkip\n :tag=\"props.wrapTag\"\n class=\"b-overlay-wrap position-relative\"\n :aria-busy=\"computedAriaBusy\"\n :skip=\"props.noWrap\"\n >\n <slot />\n <BTransition\n :no-fade=\"props.noFade\"\n :trans-props=\"{enterToClass: 'show'}\"\n name=\"fade\"\n @after-enter=\"emit('shown')\"\n @after-leave=\"emit('hidden')\"\n >\n <component\n :is=\"props.overlayTag\"\n v-if=\"props.show\"\n class=\"b-overlay\"\n :class=\"overlayClasses\"\n :style=\"overlayStyles\"\n @click=\"emit('click', $event)\"\n >\n <div class=\"position-absolute\" :class=\"blurClasses\" :style=\"blurStyles\" />\n\n <div class=\"position-absolute\" :style=\"spinWrapperStyles\">\n <slot name=\"overlay\" v-bind=\"spinnerAttrs\">\n <BSpinner v-if=\"!props.noSpinner\" v-bind=\"spinnerAttrs\" />\n </slot>\n </div>\n </component>\n </BTransition>\n </RenderComponentOrSkip>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, toRef} from 'vue'\nimport type {BOverlayProps} from '../../types'\nimport {useDefaults, useRadiusElementClasses} from '../../composables'\nimport BTransition from '../BTransition/BTransition.vue'\nimport BSpinner from '../BSpinner.vue'\nimport RenderComponentOrSkip from '../RenderComponentOrSkip.vue'\n\nconst _props = withDefaults(defineProps<BOverlayProps>(), {\n blur: '2px',\n bgColor: undefined,\n fixed: false,\n noCenter: false,\n noFade: false,\n noSpinner: false,\n noWrap: false,\n opacity: 0.85,\n overlayTag: 'div',\n show: false,\n spinnerSmall: false,\n spinnerType: 'border',\n spinnerVariant: undefined,\n variant: 'light',\n wrapTag: 'div',\n zIndex: 10,\n // RadiusElementExtendables props\n rounded: false,\n roundedBottom: undefined,\n roundedEnd: undefined,\n roundedStart: undefined,\n roundedTop: undefined,\n // End RadiusElementExtendables props\n})\nconst props = useDefaults(_props, 'BOverlay')\n\nconst emit = defineEmits<{\n click: [value: MouseEvent]\n hidden: []\n shown: []\n}>()\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n overlay?: (props: typeof spinnerAttrs.value) => any\n}>()\n\nconst positionStyles = {top: 0, left: 0, bottom: 0, right: 0} as const\n\nconst radiusElementClasses = useRadiusElementClasses(() => ({\n rounded: props.rounded,\n roundedTop: props.roundedTop,\n roundedBottom: props.roundedBottom,\n roundedStart: props.roundedStart,\n roundedEnd: props.roundedEnd,\n}))\n\nconst computedVariant = toRef(() =>\n props.variant !== null && !props.bgColor ? `bg-${props.variant}` : ''\n)\n\nconst computedAriaBusy = toRef(() => (props.show ? true : null))\n\nconst spinnerAttrs = computed(() => ({\n type: props.spinnerType,\n variant: props.spinnerVariant,\n small: props.spinnerSmall,\n}))\n\nconst overlayStyles = computed(() => ({\n ...positionStyles,\n zIndex: props.zIndex || 10,\n}))\n\nconst overlayClasses = computed(() => ({\n 'position-absolute': !props.noWrap || !props.fixed,\n 'position-fixed': props.noWrap && props.fixed,\n}))\n\nconst blurClasses = computed(() => [computedVariant.value, radiusElementClasses.value])\n\nconst blurStyles = computed(() => ({\n ...positionStyles,\n opacity: props.opacity,\n backgroundColor: props.bgColor || undefined,\n backdropFilter: props.blur ? `blur(${props.blur})` : undefined,\n}))\n\nconst spinWrapperStyles = computed(() =>\n props.noCenter\n ? positionStyles\n : {\n top: '50%',\n left: '50%',\n transform: 'translateX(-50%) translateY(-50%)',\n }\n)\n</script>\n","<template>\n <ul\n class=\"pagination\"\n :class=\"computedWrapperClasses\"\n role=\"menubar\"\n :aria-disabled=\"props.disabled\"\n :aria-label=\"props.ariaLabel || undefined\"\n >\n <template v-for=\"page in pages\" :key=\"`page-${page.id}`\">\n <li v-bind=\"page.li\">\n <span\n v-if=\"page.id === FIRST_ELLIPSIS || page.id === LAST_ELLIPSIS\"\n v-bind=\"ellipsisProps.span\"\n >\n <slot name=\"ellipsis-text\">\n {{ props.ellipsisText || '...' }}\n </slot>\n </span>\n <component v-bind=\"page.button\" :is=\"page.button.is\" v-else @click=\"page.clickHandler\">\n <slot\n :name=\"page.text.name\"\n :disabled=\"page.text.disabled\"\n :page=\"page.text.page\"\n :index=\"page.text.index\"\n :active=\"page.text.active\"\n :content=\"page.text.value\"\n >\n {{ page.text.value }}\n </slot>\n </component>\n </li>\n </template>\n </ul>\n</template>\n\n<script setup lang=\"ts\">\nimport {BvEvent} from '../../utils'\nimport {computed, toRef, watch} from 'vue'\nimport type {BPaginationProps, ClassValue} from '../../types'\nimport {useAlignment, useDefaults} from '../../composables'\nimport {useToNumber} from '@vueuse/core'\n\n// Threshold of limit size when we start/stop showing ellipsis\nconst ELLIPSIS_THRESHOLD = 3\n\nconst FIRST_BUTTON = -1\nconst PREV_BUTTON = -2\nconst NEXT_BUTTON = -3\nconst LAST_BUTTON = -4\nconst FIRST_ELLIPSIS = -5\nconst LAST_ELLIPSIS = -6\n\n// This is necessary because type inference isn't succeeding for the pages computed\ninterface PageButton {\n id: number\n li: Record<string, unknown>\n button: Record<string, unknown>\n text: Record<string, unknown>\n clickHandler: (e: Readonly<MouseEvent>) => void\n}\n\nconst _props = withDefaults(defineProps<BPaginationProps>(), {\n align: 'start',\n ariaControls: undefined,\n ariaLabel: 'Pagination',\n disabled: false,\n ellipsisClass: undefined,\n ellipsisText: '\\u2026',\n firstClass: undefined,\n firstNumber: false,\n firstText: '\\u00AB',\n hideEllipsis: false,\n hideGotoEndButtons: false,\n labelFirstPage: 'Go to first page',\n labelLastPage: 'Go to last page',\n labelNextPage: 'Go to next page',\n labelPage: 'Go to page',\n labelPrevPage: 'Go to previous page',\n lastClass: undefined,\n lastNumber: false,\n lastText: '\\u00BB',\n limit: 5,\n nextClass: undefined,\n nextText: '\\u203A',\n pageClass: undefined,\n perPage: DEFAULT_PER_PAGE,\n pills: false,\n prevClass: undefined,\n prevText: '\\u2039',\n size: undefined,\n totalRows: DEFAULT_TOTAL_ROWS,\n})\nconst props = useDefaults(_props, 'BPagination')\n\nconst emit = defineEmits<{\n 'page-click': [event: BvEvent, pageNumber: number]\n}>()\n\nconst modelValue = defineModel<number>({default: 1})\n\nconst limitNumber = useToNumber(() => props.limit, {nanToZero: true, method: 'parseInt'})\nconst perPageNumber = useToNumber(() => props.perPage, {nanToZero: true, method: 'parseInt'})\nconst totalRowsNumber = useToNumber(() => props.totalRows, {nanToZero: true, method: 'parseInt'})\nconst modelValueNumber = useToNumber(modelValue, {nanToZero: true, method: 'parseInt'})\n\nconst perPageSanitized = toRef(() => Math.max(perPageNumber.value || DEFAULT_PER_PAGE, 1))\nconst totalRowsSanitized = toRef(() => Math.max(totalRowsNumber.value || DEFAULT_TOTAL_ROWS, 0))\n// Use Active to on page-item to denote active tab\nconst numberOfPages = toRef(() => Math.ceil(totalRowsSanitized.value / perPageSanitized.value))\nconst computedFill = toRef(() => props.align === 'fill')\n// This doesn't use the computedFill util because TS cannot infer that it would never be 'fill'\nconst justifyAlign = toRef(() => (props.align === 'fill' ? 'start' : props.align))\n\nconst alignment = useAlignment(justifyAlign)\n\nconst isActivePage = (pageNumber: number) => pageNumber === modelValueNumber.value\nconst getTabIndex = (num: number) => (props.disabled ? null : isActivePage(num) ? '0' : '-1')\n\nconst checkDisabled = (num: number) =>\n props.disabled ||\n isActivePage(num) ||\n modelValueNumber.value < 1 ||\n // Check if the number is out of bounds\n num < 1 ||\n num > numberOfPages.value\n\nconst firstDisabled = computed(() => checkDisabled(1))\nconst prevDisabled = computed(() => checkDisabled(modelValueNumber.value - 1))\nconst lastDisabled = computed(() => checkDisabled(numberOfPages.value))\nconst nextDisabled = computed(() => checkDisabled(modelValueNumber.value + 1))\n\nconst getBaseButtonProps = ({\n page,\n classVal,\n dis,\n slotName,\n textValue,\n tabIndex,\n label,\n position,\n isActive,\n role,\n hidden,\n}: {\n page: number\n dis: boolean\n classVal: ClassValue\n slotName: string\n textValue?: string\n tabIndex?: string\n label?: string\n position?: number\n isActive?: boolean\n role?: string\n hidden?: boolean\n}) => ({\n li: {\n 'class': [\n 'page-item',\n {\n 'active': isActive,\n 'disabled': dis,\n 'flex-fill': computedFill.value,\n 'd-flex': computedFill.value && !dis,\n },\n classVal,\n ],\n role,\n 'aria-hidden': hidden,\n },\n button: {\n 'is': dis ? 'span' : 'button',\n 'class': ['page-link', 'text-center', {'flex-grow-1': !dis && computedFill.value}],\n 'aria-label': label,\n 'aria-controls': props.ariaControls || undefined,\n 'aria-disabled': dis ? true : undefined,\n 'aria-posinset': position,\n 'aria-setsize': position ? numberOfPages.value : undefined,\n 'role': 'menuitem',\n 'type': dis ? undefined : 'button',\n 'tabindex': dis ? undefined : tabIndex,\n },\n text: {\n name: slotName,\n active: isActive,\n value: textValue ?? page,\n page,\n disabled: dis,\n index: page - 1,\n content: textValue ? undefined : page,\n },\n clickHandler: (e: Readonly<MouseEvent>) => pageClick(e, page),\n})\n\nconst getButtonProps = ({\n page,\n classVal,\n dis,\n slotName,\n textValue,\n label,\n}: {\n page: number\n dis: boolean\n classVal: ClassValue\n slotName: string\n textValue?: string\n label: string\n}) => getBaseButtonProps({page, classVal, dis, slotName, textValue, label, tabIndex: '-1'})\n\nconst getPageButtonProps = (page: number) =>\n getBaseButtonProps({\n page,\n dis: props.disabled,\n classVal: props.pageClass,\n slotName: 'page',\n label: props.labelPage ? `${props.labelPage} ${page}` : undefined,\n tabIndex: getTabIndex(page) ?? undefined,\n position: page,\n isActive: isActivePage(page),\n })\n\nconst firstButtonProps = computed(() =>\n getButtonProps({\n page: 1,\n dis: firstDisabled.value,\n classVal: props.firstClass,\n slotName: 'first-text',\n textValue: props.firstText,\n label: props.labelFirstPage,\n })\n)\nconst prevButtonProps = computed(() =>\n getButtonProps({\n page: Math.max(modelValueNumber.value - 1, 1),\n dis: prevDisabled.value,\n classVal: props.prevClass,\n slotName: 'prev-text',\n textValue: props.prevText,\n label: props.labelPrevPage,\n })\n)\nconst nextButtonProps = computed(() =>\n getButtonProps({\n page: Math.min(modelValueNumber.value + 1, numberOfPages.value),\n dis: nextDisabled.value,\n classVal: props.nextClass,\n slotName: 'next-text',\n textValue: props.nextText,\n label: props.labelNextPage,\n })\n)\nconst lastButtonProps = computed(() =>\n getButtonProps({\n page: numberOfPages.value,\n dis: lastDisabled.value,\n classVal: props.lastClass,\n slotName: 'last-text',\n textValue: props.lastText,\n label: props.labelLastPage,\n })\n)\n\nconst ellipsisProps = computed(() => ({\n li: {\n class: [\n 'page-item',\n 'disabled',\n 'text-center',\n 'bv-d-xs-down-none',\n computedFill.value ? 'flex-fill' : '',\n props.ellipsisClass,\n ],\n role: 'separator',\n },\n span: {\n class: ['page-link'],\n },\n}))\n\nconst computedWrapperClasses = computed(() => [\n alignment.value,\n {\n [`pagination-${props.size}`]: props.size !== undefined,\n 'b-pagination-pills': props.pills,\n },\n])\n\nconst pagination = computed(() => ({\n pageSize: perPageSanitized.value,\n totalRows: totalRowsNumber.value,\n numberOfPages: numberOfPages.value,\n}))\n\nconst pageClick = (event: Readonly<MouseEvent>, pageNumber: number) => {\n if (pageNumber === modelValueNumber.value) return\n\n const clickEvent = new BvEvent('page-click', {\n cancelable: true,\n target: event.target,\n })\n emit('page-click', clickEvent, pageNumber)\n\n if (clickEvent.defaultPrevented) return\n\n modelValue.value = pageNumber\n\n // nextTick(() => {\n // if (isVisible(target) && un_element.contains(target)) {\n // attemptFocus(target)\n //} else {\n //this.focusCurrent()\n //}\n // })\n}\n\nwatch(modelValueNumber, (newValue) => {\n const sanitizeCurrentPage = (value: number, numberOfPages: number) => {\n const page = value || 1\n return page > numberOfPages ? numberOfPages : page < 1 ? 1 : page\n }\n const calculatedValue = sanitizeCurrentPage(newValue, numberOfPages.value)\n if (calculatedValue === modelValue.value) return\n modelValue.value = calculatedValue\n})\n\nwatch(pagination, (oldValue, newValue) => {\n if (newValue.pageSize !== oldValue.pageSize && newValue.totalRows === oldValue.totalRows) {\n // If the page size changes, reset to page 1\n modelValue.value = 1\n } else if (\n newValue.numberOfPages !== oldValue.numberOfPages &&\n modelValueNumber.value > newValue.numberOfPages\n ) {\n // If `numberOfPages` changes and is less than\n // the `currentPage` number, reset to page 1\n modelValue.value = 1\n }\n})\n\nconst pages = computed(\n () =>\n elements.value.map((p) => {\n switch (p) {\n case FIRST_BUTTON:\n return {id: p, ...firstButtonProps.value}\n case PREV_BUTTON:\n return {id: p, ...prevButtonProps.value}\n case NEXT_BUTTON:\n return {id: p, ...nextButtonProps.value}\n case LAST_BUTTON:\n return {id: p, ...lastButtonProps.value}\n case FIRST_ELLIPSIS:\n case LAST_ELLIPSIS:\n return {id: p, ...ellipsisProps.value}\n default:\n return {id: p, ...getPageButtonProps(p)}\n }\n }) as PageButton[]\n)\n\nconst elements = computed(() => {\n // The idea here is to create an array of all the buttons on the page control.\n // This way we can keep the invariants in one place and the template code just\n // iterates over the array.\n\n const pages = numberOfPages.value\n const {value} = modelValueNumber\n const limit = limitNumber.value\n const firstPage = props.firstNumber ? 1 : 0\n const lastPage = props.lastNumber ? 1 : 0\n const hideEllipsis = props.hideEllipsis || limit <= ELLIPSIS_THRESHOLD\n const hideFirstButton = props.hideGotoEndButtons && !props.firstNumber ? 1 : 0\n const hideLastButton = props.hideGotoEndButtons && !props.lastNumber ? 1 : 0\n const showFirstButton = hideFirstButton ? 0 : 1\n const showLastButton = hideLastButton ? 0 : 1\n\n // The first case is when all of the page buttons fit on the control, this is\n // the simplest case and the only one that will create an array smaller than\n // Limit + 4 - hideEndButtons * 2 (the [first, last,] prev, next buttons)\n\n if (pages < limit + firstPage + lastPage) {\n return [\n !firstPage && !hideFirstButton ? FIRST_BUTTON : null,\n PREV_BUTTON,\n ...Array.from({length: pages}, (_, index) => index + 1),\n NEXT_BUTTON,\n !lastPage && !hideLastButton ? LAST_BUTTON : null,\n ].filter((x) => x !== null) as number[]\n }\n\n // All of the remaining cases result in an array that is exactly limit + 4 - hideEndButtons * 2 in length, so create\n // the array upfront and set up the beginning and end buttons, then fill the rest for each case\n\n const buttons = Array.from({length: limit + 4 - (hideFirstButton + hideLastButton)})\n if (!hideFirstButton) {\n if (!firstPage) {\n buttons[0] = FIRST_BUTTON\n buttons[1] = PREV_BUTTON\n } else {\n buttons[0] = PREV_BUTTON\n buttons[1] = 1\n }\n } else {\n buttons[0] = PREV_BUTTON\n }\n\n if (!hideLastButton) {\n if (!lastPage) {\n buttons[buttons.length - 1] = LAST_BUTTON\n buttons[buttons.length - 2] = NEXT_BUTTON\n } else {\n buttons[buttons.length - 1] = NEXT_BUTTON\n buttons[buttons.length - 2] = pages\n }\n } else {\n buttons[buttons.length - 1] = NEXT_BUTTON\n }\n\n // The next case is where the page buttons start at the begginning, with\n // no ellipsis at the beginning, but one at the end\n\n const halfLimit = Math.floor(limit / 2)\n if (value <= halfLimit + firstPage) {\n for (let index = 1; index <= limit; index++) {\n buttons[index + 1 - hideFirstButton] = index + firstPage\n }\n\n if (!hideEllipsis) {\n buttons[buttons.length - (2 + showLastButton)] = LAST_ELLIPSIS\n }\n }\n\n // And then we have the case where the page buttons go up to the end, with no\n // ellipsis at the end, but one at the beginning\n\n if (value > pages - halfLimit - lastPage) {\n const start = pages - (limit - 1) - lastPage\n for (let index = 0; index < limit; index++) {\n buttons[index + 2 - hideFirstButton] = start + index\n }\n\n if (!hideEllipsis) {\n buttons[1 + showFirstButton] = FIRST_ELLIPSIS\n }\n }\n\n // Finally we have the case where we have ellipsis at both ends\n if (!buttons[2]) {\n // Is there a more elegant way to ceck that we're in the final case?\n const start = value - Math.floor(limit / 2)\n for (let index = 0; index < limit; index++) {\n buttons[index + 2 - hideFirstButton] = start + index\n }\n\n if (!hideEllipsis) {\n buttons[1 + showFirstButton] = FIRST_ELLIPSIS\n buttons[buttons.length - (2 + showLastButton)] = LAST_ELLIPSIS\n }\n }\n\n //Enable sanity check for debugging purposes\n // for (let i = 0; i < buttons.length; i++) {\n // if (!buttons[i]) {\n // // eslint-disable-next-line no-console\n // console.log(\n // `Failed: button == ${i}, limit=${limit}, pages=${pages}, firstPage=${firstPage}, lastPage=${lastPage}, value=${value}`\n // )\n // }\n // }\n\n return buttons.filter((x) => x !== null) as number[]\n})\n</script>\n\n<script lang=\"ts\">\nconst DEFAULT_PER_PAGE = 20\nconst DEFAULT_TOTAL_ROWS = 0\n</script>\n","<template>\n <component :is=\"props.wrapperTag\" :class=\"wrapperClasses\">\n <component\n v-bind=\"$attrs\"\n :is=\"tag\"\n class=\"placeholder\"\n :class=\"computedClasses\"\n :style=\"computedStyle\"\n />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, type CSSProperties, toRef} from 'vue'\nimport type {BPlaceholderProps} from '../../types'\nimport {useDefaults} from '../../composables'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst _props = withDefaults(defineProps<BPlaceholderProps>(), {\n animation: undefined,\n cols: 12,\n size: 'md',\n tag: 'span',\n variant: null,\n width: undefined,\n wrapperTag: 'span',\n})\nconst props = useDefaults(_props, 'BPlaceholder')\n\nconst widthString = toRef(() =>\n props.width === undefined\n ? undefined\n : typeof props.width === 'number'\n ? props.width.toString()\n : props.width.replace('%', '')\n)\n\nconst colsString = toRef(() =>\n props.cols === undefined\n ? undefined\n : typeof props.cols === 'number'\n ? props.cols.toString()\n : props.cols\n)\n\nconst computedClasses = computed(() => ({\n [`col-${colsString.value}`]: colsString.value !== undefined && widthString.value === undefined,\n [`bg-${props.variant}`]: props.variant !== null,\n [`placeholder-${props.size}`]: props.size !== 'md',\n}))\n\nconst wrapperClasses = computed(() => ({\n [`placeholder-${props.animation}`]: props.animation !== undefined,\n}))\n\nconst computedStyle = computed<CSSProperties>(() => ({\n width: widthString.value === undefined ? undefined : `${widthString.value}%`,\n}))\n</script>\n","<template>\n <BPlaceholder\n class=\"btn disabled\"\n :class=\"computedClasses\"\n :animation=\"props.animation\"\n :width=\"props.width\"\n :cols=\"props.cols\"\n :tag=\"props.tag\"\n :style=\"{'cursor': 'wait', 'pointer-events': 'auto'}\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport BPlaceholder from './BPlaceholder.vue'\nimport type {BPlaceholderButtonProps} from '../../types'\nimport {computed} from 'vue'\nimport {useDefaults} from '../../composables'\n\nconst _props = withDefaults(defineProps<BPlaceholderButtonProps>(), {\n animation: undefined,\n cols: undefined,\n tag: 'div',\n variant: 'primary',\n width: undefined,\n})\nconst props = useDefaults(_props, 'BPlaceholderButton')\n\nconst computedClasses = computed(() => ({\n [`btn-${props.variant}`]: props.variant !== null,\n}))\n</script>\n","<template>\n <BCard :img-placement=\"props.imgPlacement\">\n <template v-if=\"!props.noImg\" #img>\n <slot name=\"img\">\n <BCardImg\n :blank=\"!props.imgSrc ? true : false\"\n :blank-color=\"props.imgBlankColor\"\n :height=\"!props.imgSrc ? props.imgHeight : undefined\"\n :src=\"props.imgSrc\"\n :img-placement=\"props.imgPlacement\"\n :style=\"{cursor: 'wait'}\"\n />\n </slot>\n </template>\n\n <template v-if=\"!props.noHeader\" #header>\n <slot name=\"header\">\n <BPlaceholder\n :width=\"props.headerWidth\"\n :variant=\"props.headerVariant\"\n :animation=\"props.headerAnimation\"\n :size=\"props.headerSize\"\n />\n </slot>\n </template>\n <slot>\n <BPlaceholder cols=\"7\" v-bind=\"defaultAttrs\" />\n <BPlaceholder cols=\"4\" v-bind=\"defaultAttrs\" />\n <BPlaceholder cols=\"4\" v-bind=\"defaultAttrs\" />\n <BPlaceholder cols=\"6\" v-bind=\"defaultAttrs\" />\n <BPlaceholder cols=\"8\" v-bind=\"defaultAttrs\" />\n </slot>\n <template v-if=\"!props.noFooter\" #footer>\n <slot name=\"footer\">\n <component\n :is=\"footerComponent\"\n :width=\"props.footerWidth\"\n :animation=\"props.footerAnimation\"\n :size=\"props.noButton ? props.footerSize : undefined\"\n :variant=\"props.footerVariant\"\n />\n </slot>\n </template>\n </BCard>\n</template>\n\n<script setup lang=\"ts\">\nimport BCard from '../BCard/BCard.vue'\nimport BCardImg from '../BCard/BCardImg.vue'\nimport BPlaceholder from './BPlaceholder.vue'\nimport BPlaceholderButton from './BPlaceholderButton.vue'\nimport type {BPlaceholderCardProps} from '../../types'\nimport {computed, toRef} from 'vue'\nimport {useDefaults} from '../../composables'\n\nconst _props = withDefaults(defineProps<BPlaceholderCardProps>(), {\n animation: undefined,\n footerAnimation: undefined,\n footerSize: 'md',\n footerVariant: undefined,\n footerWidth: 100,\n headerAnimation: undefined,\n headerSize: 'md',\n headerVariant: undefined,\n headerWidth: 100,\n imgBlankColor: '#868e96',\n imgPlacement: 'top',\n imgHeight: 100,\n imgSrc: undefined,\n noButton: false,\n noFooter: false,\n noHeader: false,\n noImg: false,\n size: 'md',\n variant: undefined,\n})\nconst props = useDefaults(_props, 'BPlaceholderCard')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n footer?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n header?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n img?: (props: Record<string, never>) => any\n}>()\n\nconst defaultAttrs = computed(() => ({\n animation: props.animation,\n size: props.size,\n variant: props.variant,\n}))\n\nconst footerComponent = toRef(() => (!props.noButton ? BPlaceholderButton : BPlaceholder))\n</script>\n","<template>\n <!-- tables definitions are shared. Can't use createReusableTemplate cause it becomes a non-root node -->\n <div v-if=\"isResponsive\" :class=\"responsiveClasses\" :style=\"responsiveStyles\">\n <table v-bind=\"computedTableAttrs\">\n <slot />\n </table>\n </div>\n <table v-else v-bind=\"computedTableAttrs\">\n <slot />\n </table>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, type StyleValue} from 'vue'\nimport type {BTableSimpleProps} from '../../types'\nimport {useDefaults, useNumberishToStyle} from '../../composables'\n\nconst defaultStickyHeaderHeight = '300px'\n\nconst _props = withDefaults(defineProps<BTableSimpleProps>(), {\n borderVariant: null,\n tableClass: undefined,\n variant: null,\n bordered: false,\n borderless: false,\n captionTop: false,\n dark: false,\n hover: false,\n id: undefined,\n noBorderCollapse: false,\n outlined: false,\n fixed: false,\n responsive: false,\n stacked: false,\n striped: false,\n stripedColumns: false,\n small: false,\n stickyHeader: false,\n tableAttrs: undefined,\n})\nconst props = useDefaults(_props, 'BTableSimple')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => [\n props.tableClass,\n 'table',\n 'b-table',\n {\n 'table-bordered': props.bordered,\n 'table-borderless': props.borderless,\n [`border-${props.borderVariant}`]: props.borderVariant !== null,\n 'caption-top': props.captionTop,\n 'table-dark': props.dark,\n 'table-hover': props.hover,\n 'b-table-stacked': props.stacked === true,\n [`b-table-stacked-${props.stacked}`]: typeof props.stacked === 'string',\n 'table-striped': props.striped,\n 'table-sm': props.small,\n [`table-${props.variant}`]: props.variant !== null,\n 'table-striped-columns': props.stripedColumns,\n },\n])\nconst computedTableAttrs = computed(() => ({\n id: props.id,\n class: computedClasses.value,\n ...props.tableAttrs,\n}))\n\nconst computedSticky = useNumberishToStyle(\n computed(\n () => (props.stickyHeader === true ? defaultStickyHeaderHeight : props.stickyHeader) || NaN\n )\n)\nconst stickyIsValid = computed(() => props.stickyHeader !== false)\n\nconst isResponsive = computed(() => props.responsive !== false || stickyIsValid.value)\nconst responsiveStyles = computed<StyleValue | undefined>(() =>\n stickyIsValid.value ? {maxHeight: computedSticky.value} : undefined\n)\nconst responsiveClasses = computed(() => ({\n 'table-responsive': props.responsive === true,\n [`table-responsive-${props.responsive}`]: typeof props.responsive === 'string',\n 'b-table-sticky-header': stickyIsValid.value,\n}))\n</script>\n","<template>\n <BTableSimple>\n <slot v-if=\"!props.hideHeader\" name=\"thead\">\n <thead>\n <tr>\n <th v-for=\"(_, i) in computedHeaderColumnsLength\" :key=\"i\">\n <BPlaceholder\n :size=\"props.headerSize\"\n :variant=\"props.headerVariant\"\n :animation=\"props.headerAnimation\"\n :width=\"props.headerCellWidth\"\n />\n </th>\n </tr>\n </thead>\n </slot>\n <slot>\n <tbody>\n <tr v-for=\"(_, j) in rowsNumber\" :key=\"j\">\n <td v-for=\"(__, k) in columnsNumber\" :key=\"k\">\n <BPlaceholder\n :size=\"props.size\"\n :variant=\"props.variant\"\n :animation=\"props.animation\"\n :width=\"props.cellWidth\"\n />\n </td>\n </tr>\n </tbody>\n </slot>\n <slot v-if=\"props.showFooter\" name=\"tfoot\">\n <tfoot>\n <tr>\n <th v-for=\"(_, l) in computedFooterColumnsLength\" :key=\"l\">\n <BPlaceholder\n :size=\"props.footerSize\"\n :variant=\"props.footerVariant\"\n :animation=\"props.footerAnimation\"\n :width=\"props.footerCellWidth\"\n />\n </th>\n </tr>\n </tfoot>\n </slot>\n </BTableSimple>\n</template>\n\n<script setup lang=\"ts\">\nimport {toRef} from 'vue'\nimport type {BPlaceholderTableProps} from '../../types'\nimport BTableSimple from '../BTable/BTableSimple.vue'\nimport BPlaceholder from './BPlaceholder.vue'\nimport {useToNumber} from '@vueuse/core'\nimport {useDefaults} from '../../composables'\n\nconst _props = withDefaults(defineProps<BPlaceholderTableProps>(), {\n animation: undefined,\n cellWidth: 100,\n columns: 5,\n footerAnimation: undefined,\n footerCellWidth: 100,\n footerColumns: undefined,\n footerSize: 'md',\n footerVariant: undefined,\n headerAnimation: undefined,\n headerCellWidth: 100,\n headerColumns: undefined,\n headerSize: 'md',\n headerVariant: undefined,\n hideHeader: false,\n rows: 3,\n showFooter: false,\n size: 'md',\n variant: undefined,\n})\nconst props = useDefaults(_props, 'BPlaceholderTable')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n tfoot?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n thead?: (props: Record<string, never>) => any\n}>()\n\nconst columnsToNumber = useToNumber(() => props.columns)\nconst rowsToNumber = useToNumber(() => props.rows)\nconst computedHeaderColumns = toRef(() => props.headerColumns ?? NaN)\nconst computedFooterColumns = toRef(() => props.footerColumns ?? NaN)\nconst headerColumnsNumber = useToNumber(computedHeaderColumns)\nconst footerColumnsNumber = useToNumber(computedFooterColumns)\n\nconst columnsNumber = toRef(() => columnsToNumber.value || 5)\nconst rowsNumber = toRef(() => rowsToNumber.value || 3)\n\nconst computedHeaderColumnsLength = toRef(() =>\n props.headerColumns === undefined ? columnsNumber.value : headerColumnsNumber.value\n)\nconst computedFooterColumnsLength = toRef(() =>\n props.footerColumns === undefined ? columnsNumber.value : footerColumnsNumber.value\n)\n</script>\n","<template>\n <slot v-if=\"props.loading\" name=\"loading\" />\n <slot v-else />\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../../composables'\nimport type {BPlaceholderWrapperProps} from '../../types'\n\nconst _props = withDefaults(defineProps<BPlaceholderWrapperProps>(), {\n loading: false,\n})\nconst props = useDefaults(_props, 'BPlaceholderWrapper')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n loading?: (props: Record<string, never>) => any\n}>()\n</script>\n","<template>\n <component :is=\"props.tag\" class=\"row\" :class=\"computedClasses\">\n <slot />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed} from 'vue'\nimport {getClasses} from '../utils'\nimport {useAlignment, useDefaults} from '../composables'\nimport type {BRowProps} from '../types'\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst _props = withDefaults(defineProps<BRowProps>(), {\n tag: 'div',\n gutterX: undefined,\n gutterY: undefined,\n noGutters: false,\n alignV: undefined,\n alignH: undefined,\n alignContent: undefined,\n cols: undefined,\n colsLg: undefined,\n colsMd: undefined,\n colsSm: undefined,\n colsXl: undefined,\n colsXxl: undefined,\n})\n\nconst props = useDefaults(_props, 'BRow')\n\nconst alignment = useAlignment(() => props.alignH)\n\nconst rowColsClasses = computed(() =>\n getClasses(\n {\n cols: props.cols,\n colsLg: props.colsLg,\n colsMd: props.colsMd,\n colsSm: props.colsSm,\n colsXl: props.colsXl,\n colsXxl: props.colsXxl,\n },\n ['cols', 'colsLg', 'colsMd', 'colsSm', 'colsXl', 'colsXxl'],\n 'cols',\n 'row-cols'\n )\n)\n\nconst computedClasses = computed(() => [\n rowColsClasses.value,\n {\n [`gx-${props.gutterX}`]: props.gutterX !== undefined,\n [`gy-${props.gutterY}`]: props.gutterY !== undefined,\n 'g-0': props.noGutters,\n [`align-items-${props.alignV}`]: props.alignV !== undefined,\n [alignment.value]: props.alignH !== undefined,\n [`align-content-${props.alignContent}`]: props.alignContent !== undefined,\n },\n])\n</script>\n","import type {AttrsValue, ClassValue, ColorVariant, LiteralUnion, MaybePromise} from '.'\nimport type {StyleValue} from 'vue'\n\nexport type TableItem<T = Record<string, unknown>> = T & {\n _rowVariant?: ColorVariant | null\n _cellVariants?: Partial<Record<keyof T, ColorVariant>>\n _showDetails?: boolean\n}\n\nexport const isTableItem = (value: unknown): value is TableItem =>\n typeof value === 'object' && value !== null\n\n// undefined means no sorting\nexport type BTableSortByOrder = 'desc' | 'asc' | undefined\n\nexport type BTableSortBy = {\n order: BTableSortByOrder\n key: string\n comparer?: (a: string, b: string) => number\n}\n\nexport type BTableProviderContext = {\n sortBy: BTableSortBy[] | undefined\n filter: string | undefined\n currentPage: number\n perPage: number\n}\n\nexport type BTableProvider<T> = (\n context: Readonly<BTableProviderContext>\n) => MaybePromise<T[] | undefined>\n\nexport type TableFieldFormatter<T> = (value: unknown, key: string, item: T) => string\n\nexport type TableRowType = 'row' | 'row-details' | 'row-top' | 'row-bottom' | 'table-busy'\nexport type TableRowThead = 'top' | 'bottom'\n\nexport type TableStrictClassValue = unknown\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type TableField<T = any> = {\n key: LiteralUnion<keyof T>\n label?: string\n headerTitle?: string\n headerAbbr?: string\n class?: ClassValue\n formatter?: TableFieldFormatter<T>\n sortable?: boolean\n sortKey?: string\n sortDirection?: string\n sortByFormatted?: boolean | TableFieldFormatter<T>\n filterByFormatted?: boolean | TableFieldFormatter<T>\n tdClass?:\n | TableStrictClassValue\n | ((value: unknown, key: string, item: T) => TableStrictClassValue)\n thClass?: ClassValue\n thStyle?: StyleValue\n variant?: ColorVariant | null\n tdAttr?: AttrsValue | ((value: unknown, key: string, item: T) => AttrsValue)\n thAttr?:\n | AttrsValue\n | ((value: unknown, key: string, item: T | null, type: TableRowThead) => AttrsValue)\n isRowHeader?: boolean\n stickyColumn?: boolean\n}\n\nexport type TableFieldRaw<T = unknown> = T extends object\n ? LiteralUnion<keyof T> | TableField<T>\n : string | TableField\n\nexport const isTableField = <T>(value: unknown): value is TableField<T> =>\n typeof value === 'object' && value !== null && 'key' in value\n\nexport const isTableFieldRaw = <T>(value: unknown): value is TableFieldRaw<T> =>\n typeof value === 'string' || isTableField(value)\n\nexport type NoProviderTypes = 'paging' | 'sorting' | 'filtering'\n","<template>\n <tbody :class=\"computedClasses\">\n <slot />\n </tbody>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../../composables'\nimport type {BTbodyProps} from '../../types'\nimport {computed} from 'vue'\n\nconst _props = withDefaults(defineProps<BTbodyProps>(), {\n variant: null,\n})\nconst props = useDefaults(_props, 'BTbody')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => ({\n [`thead-${props.variant}`]: props.variant !== null,\n}))\n</script>\n","<template>\n <td\n :scope=\"scope\"\n :class=\"computedClasses\"\n :colspan=\"props.colspan\"\n :rowspan=\"props.rowspan\"\n :data-label=\"props.stackedHeading\"\n >\n <div v-if=\"props.stackedHeading\">\n <slot />\n </div>\n <slot v-else />\n </td>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../../composables'\nimport type {BTdProps} from '../../types'\nimport {computed, toRef} from 'vue'\n\nconst _props = withDefaults(defineProps<BTdProps>(), {\n colspan: undefined,\n rowspan: undefined,\n stackedHeading: undefined,\n stickyColumn: false,\n variant: null,\n})\nconst props = useDefaults(_props, 'BTd')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => ({\n [`table-${props.variant}`]: props.variant !== null,\n 'b-table-sticky-column': props.stickyColumn,\n 'table-b-table-default': props.stickyColumn && props.variant === null,\n}))\n\nconst scope = toRef(() => (props.colspan ? 'colspan' : props.rowspan ? 'rowspan' : 'col'))\n</script>\n","<template>\n <tfoot :class=\"computedClasses\">\n <slot />\n </tfoot>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../../composables'\nimport type {BTfootProps} from '../../types'\nimport {computed} from 'vue'\n\nconst _props = withDefaults(defineProps<BTfootProps>(), {\n variant: null,\n})\nconst props = useDefaults(_props, 'BTfoot')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => ({\n [`table-${props.variant}`]: props.variant !== null,\n}))\n</script>\n","<template>\n <th\n :scope=\"scope\"\n :class=\"computedClasses\"\n :colspan=\"props.colspan\"\n :rowspan=\"props.rowspan\"\n :data-label=\"props.stackedHeading\"\n >\n <div v-if=\"props.stackedHeading !== undefined\">\n <slot />\n </div>\n <slot v-else />\n </th>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../../composables'\nimport type {BThProps} from '../../types'\nimport {computed, toRef} from 'vue'\n\nconst _props = withDefaults(defineProps<BThProps>(), {\n colspan: undefined,\n rowspan: undefined,\n stackedHeading: undefined,\n stickyColumn: false,\n variant: null,\n})\nconst props = useDefaults(_props, 'BTh')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => ({\n [`table-${props.variant}`]: props.variant !== null,\n 'b-table-sticky-column': props.stickyColumn,\n 'table-b-table-default': props.stickyColumn && props.variant === null,\n}))\n\nconst scope = toRef(() => (props.colspan ? 'colspan' : props.rowspan ? 'rowspan' : 'col'))\n</script>\n","<template>\n <thead :class=\"computedClasses\">\n <slot />\n </thead>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../../composables'\nimport type {BTheadProps} from '../../types'\nimport {computed} from 'vue'\n\nconst _props = withDefaults(defineProps<BTheadProps>(), {\n variant: null,\n})\nconst props = useDefaults(_props, 'BThead')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => ({\n [`table-${props.variant}`]: props.variant !== null,\n}))\n</script>\n","<template>\n <tr :class=\"computedClasses\">\n <slot />\n </tr>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../../composables'\nimport type {BTrProps} from '../../types'\nimport {computed} from 'vue'\n\nconst _props = withDefaults(defineProps<BTrProps>(), {\n variant: null,\n})\nconst props = useDefaults(_props, 'BTr')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => ({\n [`table-${props.variant}`]: props.variant !== null,\n}))\n</script>\n","<template>\n <BTableSimple\n :id=\"props.id\"\n :bordered=\"props.bordered\"\n :borderless=\"props.borderless\"\n :border-variant=\"props.borderVariant\"\n :caption-top=\"props.captionTop\"\n :dark=\"props.dark\"\n :fixed=\"props.fixed\"\n :hover=\"props.hover\"\n :no-border-collapse=\"props.noBorderCollapse\"\n :outlined=\"props.outlined\"\n :responsive=\"props.responsive\"\n :small=\"props.small\"\n :stacked=\"props.stacked\"\n :sticky-header=\"props.stickyHeader\"\n :striped=\"props.striped\"\n :table-class=\"computedTableClasses\"\n :variant=\"props.variant\"\n :striped-columns=\"props.stripedColumns\"\n >\n <BThead v-show=\"showComputedHeaders\" :variant=\"props.headVariant\" :class=\"props.theadClass\">\n <slot v-if=\"$slots['thead-top']\" name=\"thead-top\" />\n <BTr :variant=\"props.headRowVariant\" :class=\"props.theadTrClass\">\n <BTh\n v-for=\"field in computedFields\"\n :key=\"field.key\"\n scope=\"col\"\n :class=\"getFieldColumnClasses(field)\"\n :title=\"field.headerTitle\"\n :variant=\"field.variant\"\n :abbr=\"field.headerAbbr\"\n :style=\"field.thStyle\"\n v-bind=\"callThAttr(null, field, 'top')\"\n @click=\"headerClicked(field, $event)\"\n >\n <slot\n :name=\"$slots[`head(${String(field.key)})`] ? `head(${String(field.key)})` : 'head()'\"\n :label=\"field.label\"\n :column=\"field.key\"\n :field=\"field\"\n :is-foot=\"false\"\n >\n {{ getTableFieldHeadLabel(field) }}\n </slot>\n </BTh>\n </BTr>\n <BTr v-if=\"$slots['thead-sub']\">\n <BTd\n v-for=\"field in computedFields\"\n :key=\"field.key\"\n scope=\"col\"\n :variant=\"field.variant\"\n :class=\"[field.class, field.thClass]\"\n >\n <slot name=\"thead-sub\" :items=\"computedFields\" v-bind=\"field\">\n {{ field.label }}\n </slot>\n </BTd>\n </BTr>\n </BThead>\n <BTbody :class=\"props.tbodyClass\">\n <slot\n name=\"custom-body\"\n :fields=\"computedFields\"\n :items=\"props.items\"\n :columns=\"computedFields.length\"\n >\n <BTr\n v-if=\"!props.stacked && $slots['top-row']\"\n :class=\"getRowClasses(null, 'row-top')\"\n v-bind=\"callTbodyTrAttrs(null, 'row-top')\"\n >\n <slot name=\"top-row\" />\n </BTr>\n\n <template\n v-for=\"(item, itemIndex) in props.items\"\n :key=\"props.primaryKey ? get(item, props.primaryKey) : itemIndex\"\n >\n <BTr\n :class=\"getRowClasses(item, 'row')\"\n :variant=\"isTableItem(item) ? item._rowVariant : undefined\"\n v-bind=\"callTbodyTrAttrs(item, 'row')\"\n @click=\"!filterEvent($event) && emit('row-clicked', item, itemIndex, $event)\"\n @dblclick=\"!filterEvent($event) && emit('row-dbl-clicked', item, itemIndex, $event)\"\n @mouseenter=\"!filterEvent($event) && emit('row-hovered', item, itemIndex, $event)\"\n @mouseleave=\"!filterEvent($event) && emit('row-unhovered', item, itemIndex, $event)\"\n >\n <BTd\n v-for=\"field in computedFields\"\n :key=\"field.key\"\n :variant=\"\n (isTableItem(item) ? item._cellVariants?.[field.key as string] : false)\n ? null\n : field.variant\n \"\n :class=\"getFieldRowClasses(field, item)\"\n v-bind=\"itemAttributes(item, String(field.key), field.tdAttr)\"\n >\n <label v-if=\"props.stacked && props.labelStacked\" class=\"b-table-stacked-label\">\n {{ getTableFieldHeadLabel(field) }}\n </label>\n <slot\n :name=\"\n $slots[`cell(${String(field.key)})`] ? `cell(${String(field.key)})` : 'cell()'\n \"\n :value=\"formatItem(item, String(field.key), field.formatter)\"\n :unformatted=\"get(item, String(field.key))\"\n :index=\"itemIndex\"\n :item=\"item\"\n :field=\"field\"\n :items=\"items\"\n :toggle-details=\"\n () => {\n toggleRowDetails(item)\n }\n \"\n :details-showing=\"isTableItem(item) ? detailsMap.get(item) ?? false : false\"\n >\n <template v-if=\"!$slots[`cell(${String(field.key)})`] && !$slots['cell()']\">\n {{ formatItem(item, String(field.key), field.formatter) }}\n </template>\n </slot>\n </BTd>\n </BTr>\n\n <template\n v-if=\"isTableItem(item) && detailsMap.get(item) === true && $slots['row-details']\"\n >\n <BTr aria-hidden=\"true\" role=\"presentation\" class=\"d-none\" />\n <BTr\n :class=\"getRowClasses(item, 'row-details')\"\n :variant=\"item._rowVariant\"\n v-bind=\"callTbodyTrAttrs(item, 'row-details')\"\n >\n <BTd :colspan=\"computedFieldsTotal\" :class=\"detailsTdClass\">\n <slot\n name=\"row-details\"\n :item=\"item\"\n :toggle-details=\"\n () => {\n toggleRowDetails(item)\n }\n \"\n :fields=\"props.fields\"\n :index=\"itemIndex\"\n />\n </BTd>\n </BTr>\n </template>\n </template>\n <BTr v-if=\"props.showEmpty && props.items.length === 0\" class=\"b-table-empty-slot\">\n <BTd :colspan=\"computedFieldsTotal\">\n <slot name=\"empty\" :items=\"props.items\">\n {{ props.emptyText }}\n </slot>\n </BTd>\n </BTr>\n <!-- This class is for specific targetting of this slot element -->\n <BTr\n v-if=\"!props.stacked && $slots['bottom-row']\"\n class=\"bottom-row\"\n :class=\"getRowClasses(null, 'row-bottom')\"\n v-bind=\"callTbodyTrAttrs(null, 'row-bottom')\"\n >\n <slot name=\"bottom-row\" />\n </BTr>\n </slot>\n </BTbody>\n <BTfoot v-if=\"props.footClone\" :variant=\"props.footVariant\" :class=\"props.tfootClass\">\n <BTr :variant=\"props.footRowVariant\" :class=\"props.tfootTrClass\">\n <BTh\n v-for=\"field in computedFields\"\n :key=\"field.key\"\n scope=\"col\"\n :class=\"getFieldColumnClasses(field)\"\n :title=\"field.headerTitle\"\n :abbr=\"field.headerAbbr\"\n :style=\"field.thStyle\"\n :variant=\"field.variant\"\n v-bind=\"callThAttr(null, field, 'bottom')\"\n @click=\"headerClicked(field, $event, true)\"\n >\n <div class=\"d-inline-flex flex-nowrap align-items-center gap-1\">\n <div>\n <slot\n :name=\"\n $slots[`foot(${String(field.key)})`] ? `foot(${String(field.key)})` : 'foot()'\n \"\n :label=\"field.label\"\n :column=\"field.key\"\n :field=\"field\"\n :is-foot=\"true\"\n >\n {{ getTableFieldHeadLabel(field) }}\n </slot>\n </div>\n </div>\n </BTh>\n </BTr>\n </BTfoot>\n <BTfoot v-else-if=\"$slots['custom-foot']\">\n <slot\n name=\"custom-foot\"\n :fields=\"computedFields\"\n :items=\"props.items\"\n :columns=\"computedFields.length\"\n />\n </BTfoot>\n <caption v-if=\"$slots['table-caption'] || props.caption\">\n <slot name=\"table-caption\">\n {{ props.caption }}\n </slot>\n </caption>\n </BTableSimple>\n</template>\n\n<script setup lang=\"ts\" generic=\"T\">\nimport {computed, ref, toRef, watch} from 'vue'\nimport type {BTableLiteProps, TableField, TableItem, TableRowThead, TableRowType} from '../../types'\nimport {isTableField, isTableItem} from '../../types/TableTypes'\nimport {filterEvent, formatItem, get, getTableFieldHeadLabel, startCase} from '../../utils'\nimport BTableSimple from './BTableSimple.vue'\nimport BTbody from './BTbody.vue'\nimport BTd from './BTd.vue'\nimport BTfoot from './BTfoot.vue'\nimport BTh from './BTh.vue'\nimport BThead from './BThead.vue'\nimport BTr from './BTr.vue'\nimport {useDefaults} from '../../composables'\n\nconst _props = withDefaults(defineProps<BTableLiteProps<T>>(), {\n caption: undefined,\n align: undefined,\n fields: () => [],\n footClone: false,\n items: () => [],\n labelStacked: false,\n showEmpty: false,\n emptyText: 'There are no records to show',\n emptyFilteredText: 'There are no records matching your request', // TODO not implemented\n fieldColumnClass: undefined,\n tbodyTrClass: undefined,\n captionHtml: undefined,\n detailsTdClass: undefined,\n headVariant: undefined,\n headRowVariant: undefined,\n footRowVariant: undefined,\n footVariant: undefined,\n modelValue: undefined,\n primaryKey: undefined,\n tbodyClass: undefined,\n tbodyTrAttrs: undefined,\n tfootClass: undefined,\n tfootTrClass: undefined,\n theadClass: undefined,\n theadTrClass: undefined,\n // BTableSimpleProps props\n borderVariant: undefined,\n tableClass: undefined,\n variant: undefined,\n bordered: undefined,\n borderless: undefined,\n captionTop: undefined,\n dark: undefined,\n hover: undefined,\n id: undefined,\n noBorderCollapse: undefined,\n outlined: undefined,\n fixed: undefined,\n responsive: undefined,\n stacked: undefined,\n striped: undefined,\n stripedColumns: undefined,\n small: undefined,\n stickyHeader: undefined,\n // End BTableSimpleProps props\n})\nconst props = useDefaults(_props, 'BTableLite')\n\nconst emit = defineEmits<{\n 'head-clicked': [key: string, field: TableField<T>, event: MouseEvent, isFooter: boolean]\n 'row-clicked': [item: T, index: number, event: MouseEvent]\n 'row-dbl-clicked': [item: T, index: number, event: MouseEvent]\n 'row-hovered': [item: T, index: number, event: MouseEvent]\n 'row-unhovered': [item: T, index: number, event: MouseEvent]\n}>()\n\nconst generateDetailsItem = (item: TableItem): [object, boolean | undefined] => [\n item,\n item._showDetails,\n]\nconst detailsMap = ref(\n new WeakMap(\n props.items.reduce(\n (acc, el) => {\n if (isTableItem(el)) {\n acc.push(generateDetailsItem(el))\n }\n return acc\n },\n [] as [object, boolean | undefined][]\n )\n )\n)\nwatch(\n () => props.items,\n (items) => {\n items.forEach((item) => {\n if (!isTableItem(item)) return\n const detailsItem = generateDetailsItem(item)\n detailsMap.value.set(detailsItem[0], detailsItem[1])\n })\n },\n {deep: true}\n)\n\nconst computedTableClasses = computed(() => [\n props.tableClass,\n {\n [`align-${props.align}`]: props.align !== undefined,\n },\n])\n\nconst computedFields = computed<(TableField & {_noHeader?: true})[]>(() => {\n if (!props.fields.length && props.items.length) {\n const [firstItem] = props.items\n if (isTableItem(firstItem) || Array.isArray(firstItem)) {\n return Object.keys(firstItem).map((k) => {\n const label = startCase(k)\n return {\n key: k,\n label,\n tdAttr: props.stacked === true ? {'data-label': label} : undefined,\n }\n })\n }\n // The items are primitives, so we just return a single empty field\n // No header will be shown, as we don't know what to show\n return [{key: '', _noHeader: true}]\n }\n\n return props.fields.map((f) => {\n if (isTableField(f)) {\n return {\n ...(f as TableField),\n tdAttr:\n props.stacked === true\n ? {'data-label': startCase(f.key as string), ...f.tdAttr}\n : f.tdAttr,\n }\n }\n const label = startCase(f as string)\n return {\n key: f as string,\n label,\n tdAttr: props.stacked === true ? {'data-label': label} : undefined,\n }\n })\n})\nconst computedFieldsTotal = toRef(() => computedFields.value.length)\nconst showComputedHeaders = computed(() => {\n // We only hide the header if all fields have _noHeader set to true. Which would be our doing\n // This usually happens under a circumstance of displaying an array of primitives\n // Under any other circumstance, I'm not sure how this would apply\n if (computedFields.value.length > 0 && computedFields.value.every((el) => el._noHeader === true))\n return false\n return true\n})\n\nconst itemAttributes = (item: T, fieldKey: string, attr?: unknown) => {\n const val = get(item, fieldKey)\n return attr && typeof attr === 'function' ? attr(val, fieldKey, item) : attr\n}\n\nconst callThAttr = (item: T | null, field: TableField<T>, type: TableRowThead) => {\n const fieldKey = String(field.key)\n const val = get(item, fieldKey)\n return field.thAttr && typeof field.thAttr === 'function'\n ? field.thAttr(val, fieldKey, item, type)\n : field.thAttr\n}\n\nconst headerClicked = (field: TableField<T>, event: Readonly<MouseEvent>, isFooter = false) => {\n emit('head-clicked', field.key as string, field, event, isFooter)\n}\n\nconst toggleRowDetails = (tr: T) => {\n if (isTableItem(tr)) {\n const prevValue = detailsMap.value.get(tr)\n detailsMap.value.set(tr, !prevValue)\n tr._showDetails = !prevValue\n }\n}\n\nconst getFieldColumnClasses = (field: TableField) => [\n field.class,\n field.thClass,\n {\n 'b-table-sticky-column': field.stickyColumn,\n },\n props.fieldColumnClass\n ? typeof props.fieldColumnClass === 'function'\n ? props.fieldColumnClass(field)\n : props.fieldColumnClass\n : null,\n]\n\nconst getFieldRowClasses = (field: Readonly<TableField>, tr: T) => {\n const val = get(tr, String(field.key))\n return [\n field.class,\n typeof field.tdClass === 'function' ? field.tdClass(val, String(field.key), tr) : field.tdClass,\n (isTableItem(tr) ? tr._cellVariants?.[field.key as string] : false)\n ? `table-${(tr as TableItem)._cellVariants?.[field.key as string]}`\n : null,\n {\n 'b-table-sticky-column': field.stickyColumn,\n },\n ]\n}\n\nconst callTbodyTrAttrs = (item: T | null, type: TableRowType) =>\n props.tbodyTrAttrs\n ? typeof props.tbodyTrAttrs === 'function'\n ? props.tbodyTrAttrs(item, type)\n : props.tbodyTrAttrs\n : null\n\nconst getRowClasses = (item: T | null, type: TableRowType) =>\n props.tbodyTrClass\n ? typeof props.tbodyTrClass === 'function'\n ? props.tbodyTrClass(item, type)\n : props.tbodyTrClass\n : null\n</script>\n","<template>\n <BTableLite\n v-bind=\"props\"\n :aria-busy=\"busyModel\"\n :items=\"computedDisplayItems\"\n :fields=\"computedFields as TableFieldRaw<T>[]\"\n :table-class=\"tableClasses\"\n :tbody-tr-class=\"getRowClasses\"\n :field-column-class=\"getFieldColumnClasses\"\n @head-clicked=\"onFieldHeadClick\"\n @row-dbl-clicked=\"\n (row: T, index: number, e: MouseEvent) => {\n emit('row-dbl-clicked', row, index, e)\n }\n \"\n @row-clicked=\"onRowClick\"\n @row-hovered=\"\n (row: T, index: number, e: MouseEvent) => {\n emit('row-hovered', row, index, e)\n }\n \"\n @row-unhovered=\"\n (row: T, index: number, e: MouseEvent) => {\n emit('row-unhovered', row, index, e)\n }\n \"\n >\n <template v-for=\"(_, name) in $slots\" #[name]=\"slotData\">\n <slot :name=\"name\" v-bind=\"slotData\" />\n </template>\n <template\n v-for=\"field in computedFields\"\n :key=\"field.key\"\n #[`head(${String(field.key)})`]=\"scope\"\n >\n <slot\n :name=\"$slots[`head(${String(field.key)})`] ? `head(${String(field.key)})` : 'head()'\"\n v-bind=\"scope\"\n >\n {{ getTableFieldHeadLabel(field) }}\n </slot>\n <template v-if=\"isSortable && !!scope.field.sortable && props.noSortableIcon === false\">\n <slot\n v-if=\"sortByModel?.find((el) => el.key === scope.field.key)?.order === 'asc'\"\n v-bind=\"{...scope}\"\n :name=\"\n $slots[`sortAsc(${String(scope.field.key)})`]\n ? `sortAsc(${String(scope.field.key)})`\n : 'sortAsc()'\n \"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n fill=\"currentColor\"\n class=\"bi bi-arrow-up-short\"\n viewBox=\"0 0 16 16\"\n aria-hidden\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M8 12a.5.5 0 0 0 .5-.5V5.707l2.146 2.147a.5.5 0 0 0 .708-.708l-3-3a.5.5 0 0 0-.708 0l-3 3a.5.5 0 1 0 .708.708L7.5 5.707V11.5a.5.5 0 0 0 .5.5z\"\n />\n </svg>\n </slot>\n <slot\n v-else-if=\"sortByModel?.find((el) => el.key === scope.field.key)?.order === 'desc'\"\n v-bind=\"{...scope}\"\n :name=\"\n $slots[`sortDesc(${String(scope.field.key)})`]\n ? `sortDesc(${String(scope.field.key)})`\n : 'sortDesc()'\n \"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n fill=\"currentColor\"\n class=\"bi bi-arrow-down-short\"\n viewBox=\"0 0 16 16\"\n aria-hidden\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M8 4a.5.5 0 0 1 .5.5v5.793l2.146-2.147a.5.5 0 0 1 .708.708l-3 3a.5.5 0 0 1-.708 0l-3-3a.5.5 0 1 1 .708-.708L7.5 10.293V4.5A.5.5 0 0 1 8 4z\"\n />\n </svg>\n </slot>\n <slot\n v-else\n v-bind=\"{...scope}\"\n :name=\"\n $slots[`sortDefault(${String(scope.field.key)})`]\n ? `sortDefault(${String(scope.field.key)})`\n : 'sortDefault()'\n \"\n >\n <svg\n :style=\"{opacity: 0.4}\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n fill=\"currentColor\"\n class=\"bi bi-arrow-up-short\"\n viewBox=\"0 0 16 16\"\n aria-hidden\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M8 12a.5.5 0 0 0 .5-.5V5.707l2.146 2.147a.5.5 0 0 0 .708-.708l-3-3a.5.5 0 0 0-.708 0l-3 3a.5.5 0 1 0 .708.708L7.5 5.707V11.5a.5.5 0 0 0 .5.5z\"\n />\n </svg>\n </slot>\n </template>\n </template>\n <template #custom-body=\"scope\">\n <BTr v-if=\"busyModel\" class=\"b-table-busy-slot\" :class=\"getBusyRowClasses\">\n <BTd :colspan=\"scope.fields.length\">\n <slot name=\"table-busy\">\n <BOverlay show>\n <template #overlay>\n <div class=\"d-flex align-items-center gap-2 mt-5\">\n <BSpinner />\n <strong>{{ props.busyLoadingText }}</strong>\n </div>\n </template>\n </BOverlay>\n </slot>\n </BTd>\n </BTr>\n </template>\n </BTableLite>\n</template>\n\n<script setup lang=\"ts\" generic=\"T\">\nimport {useToNumber} from '@vueuse/core'\nimport {computed, onMounted, type Ref, ref, toRef, watch} from 'vue'\nimport type {\n BTableProps,\n BTableSortBy,\n BTableSortByOrder,\n NoProviderTypes,\n TableField,\n TableFieldRaw,\n TableItem,\n TableRowType,\n TableStrictClassValue,\n} from '../../types'\nimport {formatItem, get, getTableFieldHeadLabel, set, startCase} from '../../utils'\nimport BOverlay from '../BOverlay/BOverlay.vue'\nimport BSpinner from '../BSpinner.vue'\nimport BTableLite from './BTableLite.vue'\nimport BTd from './BTd.vue'\nimport BTr from './BTr.vue'\nimport {isTableField, isTableItem} from '../../types/TableTypes'\nimport {useDefaults} from '../../composables'\n\nconst _props = withDefaults(defineProps<BTableProps<T>>(), {\n noSortableIcon: false,\n perPage: Number.POSITIVE_INFINITY,\n filter: undefined,\n mustSort: false,\n filterable: undefined,\n provider: undefined,\n noProvider: undefined,\n noProviderPaging: false,\n noProviderSorting: false,\n multisort: false,\n noProviderFiltering: false,\n noLocalSorting: false,\n noSelectOnClick: false,\n selectable: false,\n stickySelect: false,\n selectHead: true,\n selectMode: 'multi',\n selectionVariant: 'primary',\n busyLoadingText: 'Loading...',\n currentPage: 1,\n // BTableLite props\n items: () => [],\n fields: () => [],\n // All others use defaults\n caption: undefined,\n align: undefined,\n footClone: undefined,\n labelStacked: undefined,\n showEmpty: undefined,\n emptyText: undefined,\n emptyFilteredText: undefined,\n fieldColumnClass: undefined,\n tbodyTrClass: undefined,\n captionHtml: undefined,\n detailsTdClass: undefined,\n headVariant: undefined,\n headRowVariant: undefined,\n footRowVariant: undefined,\n footVariant: undefined,\n modelValue: undefined,\n primaryKey: undefined,\n tbodyClass: undefined,\n tfootClass: undefined,\n tfootTrClass: undefined,\n theadClass: undefined,\n theadTrClass: undefined,\n // End BTableLite props\n // BTableSimple props\n borderVariant: undefined,\n variant: undefined,\n bordered: undefined,\n borderless: undefined,\n captionTop: undefined,\n dark: undefined,\n hover: undefined,\n id: undefined,\n noBorderCollapse: undefined,\n outlined: undefined,\n fixed: undefined,\n responsive: undefined,\n stacked: undefined,\n striped: undefined,\n stripedColumns: undefined,\n small: undefined,\n stickyHeader: undefined,\n // End BTableSimple props\n})\nconst props = useDefaults(_props, 'BTable')\n\nconst emit = defineEmits<{\n 'filtered': [value: T[]]\n 'head-clicked': [key: string, field: TableField<T>, event: MouseEvent, isFooter: boolean]\n 'row-clicked': [item: T, index: number, event: MouseEvent]\n 'row-dbl-clicked': [item: T, index: number, event: MouseEvent]\n 'row-hovered': [item: T, index: number, event: MouseEvent]\n 'row-unhovered': [item: T, index: number, event: MouseEvent]\n 'row-selected': [value: T]\n 'row-unselected': [value: T]\n 'sorted': [value: BTableSortBy]\n 'change': [value: T[]]\n}>()\n\nconst sortByModel = defineModel<BTableSortBy[] | undefined>('sortBy', {\n default: undefined,\n})\nconst busyModel = defineModel<boolean>('busy', {\n default: false,\n})\nconst selectedItemsModel = defineModel<T[]>('selectedItems', {\n default: () => [],\n})\n\nconst selectedItemsToSet = computed({\n get: () => new Set([...selectedItemsModel.value]),\n set: (val) => {\n selectedItemsModel.value = [...val]\n },\n})\n/**\n * This is to avoid the issue of directly mutating the array structure and to properly trigger the computed setter.\n * The utils also conveniently emit the proper events after\n */\nconst selectedItemsSetUtilities = {\n add: (item: T) => {\n const value = new Set(selectedItemsToSet.value)\n value.add(item)\n selectedItemsToSet.value = value\n emit('row-selected', item)\n },\n clear: () => {\n selectedItemsToSet.value.forEach((item) => {\n selectedItemsSetUtilities.delete(item)\n })\n },\n delete: (item: T) => {\n const value = new Set(selectedItemsToSet.value)\n if (props.primaryKey) {\n const pkey: string = props.primaryKey\n selectedItemsModel.value.forEach((v, i) => {\n const selectedKey = get(v, pkey)\n const itemKey = get(item, pkey)\n\n if (!!selectedKey && !!itemKey && selectedKey === itemKey) {\n value.delete(selectedItemsModel.value[i])\n }\n })\n } else {\n value.delete(item)\n }\n selectedItemsToSet.value = value\n emit('row-unselected', item)\n },\n set: (items: T[]) => {\n selectedItemsToSet.value = new Set(items)\n selectedItemsToSet.value.forEach((item) => {\n emit('row-unselected', item)\n })\n },\n has: (item: T) => {\n if (!props.primaryKey) return selectedItemsToSet.value.has(item)\n\n // Resolver for when we are using primary keys\n const pkey: string = props.primaryKey\n for (const selected of selectedItemsToSet.value) {\n const selectedKey = get(selected, pkey)\n const itemKey = get(item, pkey)\n\n if (!!selectedKey && !!itemKey && selectedKey === itemKey) return true\n }\n return false\n },\n} as const\n\n/**\n * Only stores data that is fetched when using the provider\n */\nconst internalItems: Ref<T[]> = ref([])\n\nconst perPageNumber = useToNumber(() => props.perPage, {method: 'parseInt'})\nconst currentPageNumber = useToNumber(() => props.currentPage, {method: 'parseInt'})\n\nconst isFilterableTable = toRef(() => !!props.filter)\nconst usesProvider = toRef(() => props.provider !== undefined)\nconst isSelecting = toRef(() => selectedItemsToSet.value.size > 0)\n\nconst isSortable = computed(\n () =>\n sortByModel.value !== undefined ||\n props.fields.some(\n (field) => typeof field === 'object' && field !== null && field.sortable === true\n )\n)\n\nconst computedFields = computed<TableField<T>[]>(() =>\n props.fields.map((el) => {\n if (!isTableField(el)) {\n const label = startCase(el as string)\n return {\n key: el as string,\n label,\n tdAttr: props.stacked === true ? {'data-label': label} : undefined,\n }\n }\n\n const value = sortByModel.value?.find((sb) => el.key === sb.key)\n const sortValue =\n isSortable.value === false\n ? undefined\n : value === undefined\n ? 'none'\n : value.order === 'desc'\n ? 'descending'\n : value.order === 'asc'\n ? 'ascending'\n : 'none'\n\n return {\n ...(el as TableField<T>),\n thAttr: {\n 'aria-sort': sortValue,\n ...el.thAttr,\n },\n }\n })\n)\n\nconst tableClasses = computed(() => ({\n 'b-table-busy': busyModel.value,\n 'b-table-selectable': props.selectable,\n 'user-select-none': props.selectable && isSelecting.value,\n}))\n\nconst getBusyRowClasses = computed(() => [\n props.tbodyTrClass\n ? typeof props.tbodyTrClass === 'function'\n ? props.tbodyTrClass(null, 'table-busy')\n : props.tbodyTrClass\n : null,\n])\nconst getFieldColumnClasses = (field: TableField) => [\n {\n 'b-table-sortable-column': isSortable.value && field.sortable,\n },\n]\n// TODO this class has issues if the table has a variant already applied\n// Also the row should technically have aria-selected . Both things could probably just use a function with tbodyTrAttrs\n// But functional tbodyTrAttrs are not supported yet\n// Also the stuff for resolving functions could probably be made a util\nconst getRowClasses = (item: T | null, type: TableRowType): TableStrictClassValue => [\n {\n [`selected table-${props.selectionVariant}`]:\n props.selectable && !!item && selectedItemsSetUtilities.has(item),\n },\n props.tbodyTrClass\n ? typeof props.tbodyTrClass === 'function'\n ? props.tbodyTrClass(item, type)\n : props.tbodyTrClass\n : null,\n]\n\nconst computedItems = computed<T[]>(() => {\n const sortItems = (items: T[]) => {\n // \"undefined\" values are set by us, we do this so we dont wipe out the comparer\n const sortByItems = sortByModel.value?.filter((el) => !!el.order)\n\n if (!sortByItems || sortByItems.length === 0) return items\n\n // Multi-sort\n return [...items].sort((a, b) => {\n for (let i = 0; i < (sortByItems.length ?? 0); i++) {\n const sortOption = sortByItems[i]\n const realVal = (ob: T): string => {\n if (!isTableItem(ob)) return String(ob)\n\n const sortField = computedFields.value.find((el) => {\n if (isTableField(el)) return el.key === sortOption.key\n\n return false\n })\n const val = get(ob, sortOption.key as keyof TableItem)\n if (isTableField(sortField) && !!sortField.sortByFormatted) {\n const formatter =\n typeof sortField.sortByFormatted === 'function'\n ? sortField.sortByFormatted\n : sortField.formatter\n if (formatter) {\n return formatItem(ob, String(sortField.key), formatter) as string\n }\n }\n return typeof val === 'object' && val !== null\n ? JSON.stringify(val)\n : val?.toString() ?? ''\n }\n\n const aValue = realVal(a)\n const bValue = realVal(b)\n const comparison = sortOption.comparer\n ? sortOption.comparer(aValue, bValue)\n : aValue.localeCompare(bValue, undefined, {numeric: true})\n\n if (comparison !== 0) {\n return sortOption.order === 'asc' ? comparison : -comparison\n }\n }\n return 0 // items are equal\n })\n }\n\n const filterItems = (items: T[]) =>\n items.filter((item) =>\n isTableItem(item)\n ? Object.entries(item).some(([key, val]) => {\n if (\n val === null ||\n val === undefined ||\n key[0] === '_' ||\n (!props.filterable?.includes(key) && !!props.filterable?.length)\n )\n return false\n const realVal = (): string => {\n const filterField = computedFields.value.find((el) => {\n if (isTableField(el)) return el.key === key\n\n return false\n })\n if (isTableField(filterField) && !!filterField.filterByFormatted) {\n const formatter =\n typeof filterField.filterByFormatted === 'function'\n ? filterField.filterByFormatted\n : filterField.formatter\n if (formatter) {\n return formatter(val, String(filterField.key), item) as string\n }\n }\n return typeof val === 'object' ? JSON.stringify(Object.values(val)) : val.toString()\n }\n const itemValue: string = realVal()\n return itemValue.toLowerCase().includes(props.filter?.toLowerCase() ?? '')\n })\n : true\n )\n\n let mappedItems = usesProvider.value ? internalItems.value : (props.items as T[])\n mappedItems = mappedItems.map((item) => {\n if (\n typeof item === 'object' &&\n item !== null &&\n Object.keys(item).some((key) => key.includes('.'))\n ) {\n // We use any here because the TS doesn't isn't certain that \"item\" is the same type as our newItem.\n // But we've determined that it's an object, so we can ignore it since they will always be the same \"object\"\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let newItem: any = {}\n for (const key in item) {\n if (key.includes('.')) {\n newItem = set(newItem, key, item[key])\n } else {\n newItem[key] = item[key]\n }\n }\n return newItem\n // return\n }\n return item\n })\n\n if (\n (isFilterableTable.value === true && !usesProvider.value) ||\n (isFilterableTable.value === true && usesProvider.value && props.noProviderFiltering)\n ) {\n mappedItems = filterItems(mappedItems)\n }\n\n if (\n (isSortable.value === true && !usesProvider.value && !props.noLocalSorting) ||\n (isSortable.value === true && usesProvider.value && props.noProviderSorting)\n ) {\n mappedItems = sortItems(mappedItems)\n }\n\n return mappedItems\n})\n\nconst computedDisplayItems = computed<T[]>(() => {\n if (Number.isNaN(perPageNumber.value) || (usesProvider.value && !props.noProviderPaging)) {\n return computedItems.value\n }\n\n return computedItems.value.slice(\n (currentPageNumber.value - 1) * (perPageNumber.value || Number.POSITIVE_INFINITY),\n currentPageNumber.value * (perPageNumber.value || Number.POSITIVE_INFINITY)\n )\n})\n\nwatch(computedDisplayItems, (v) => {\n emit('change', v)\n})\n\nconst handleRowSelection = (\n row: T,\n index: number,\n shiftClicked = false,\n ctrlClicked = false,\n metaClicked = false\n) => {\n if (!props.selectable) return\n\n if (props.selectMode === 'single' || props.selectMode === 'multi') {\n // Do nothing when these items are held\n if (shiftClicked || ctrlClicked) return\n // Delete if item is in\n if (selectedItemsSetUtilities.has(row)) {\n selectedItemsSetUtilities.delete(row)\n } else {\n if (props.selectMode === 'single') {\n selectedItemsSetUtilities.set([row])\n } else {\n selectedItemsSetUtilities.add(row)\n }\n }\n } else {\n if (ctrlClicked || metaClicked) {\n // Delete if in the object\n if (selectedItemsSetUtilities.has(row)) {\n selectedItemsSetUtilities.delete(row)\n // Otherwise add. Functions similarly to 'multi' at this point\n } else {\n selectedItemsSetUtilities.add(row)\n }\n // This is where range is different, due to the difference in shift\n } else if (shiftClicked) {\n const lastSelectedItem = [...selectedItemsToSet.value].pop()\n const lastSelectedIndex = props.items.findIndex((i) => i === lastSelectedItem)\n const selectStartIndex = Math.min(lastSelectedIndex, index)\n const selectEndIndex = Math.max(lastSelectedIndex, index)\n const items = props.items.slice(selectStartIndex, selectEndIndex + 1)\n selectedItemsSetUtilities.set(items)\n // If nothing is being held, then we just behave like it's single mode\n } else {\n selectedItemsSetUtilities.set([row])\n }\n }\n}\n\nconst onRowClick = (row: T, index: number, e: MouseEvent) => {\n if (props.noSelectOnClick === false) {\n handleRowSelection(row, index, e.shiftKey, e.ctrlKey, e.metaKey)\n }\n emit('row-clicked', row, index, e)\n}\n\nconst handleFieldSorting = (field: TableField<T>) => {\n if (!isSortable.value) return\n\n const fieldKey = typeof field === 'object' && field !== null ? field.key : field\n const fieldSortable = typeof field === 'object' && field !== null ? field.sortable : false\n\n if (!(isSortable.value === true && fieldSortable === true)) return\n\n const resolveOrder = (val: BTableSortByOrder): BTableSortByOrder | undefined => {\n if (val === 'asc') return 'desc'\n if (val === undefined) return 'asc'\n if (\n props.mustSort === true ||\n (Array.isArray(props.mustSort) && props.mustSort.includes(fieldKey as string))\n )\n return 'asc'\n return undefined\n }\n\n const index = sortByModel.value?.findIndex((el) => el.key === fieldKey) ?? -1\n const originalValue = sortByModel.value?.[index]\n const updatedValue: BTableSortBy =\n // If value is new, we default to ascending\n // Otherwise we make a temp copy of the value\n index === -1 || !originalValue ? {key: fieldKey as string, order: 'asc'} : {...originalValue}\n\n /**\n * @returns the updated value to emit for sorted\n */\n const handleMultiSort = (): BTableSortBy => {\n let val = updatedValue\n if (index === -1) {\n sortByModel.value = [...(sortByModel.value ?? []), updatedValue]\n } else {\n const order = resolveOrder(updatedValue.order)\n val = {...updatedValue, order}\n sortByModel.value = order\n ? sortByModel.value?.map((el) => (el.key === val.key ? val : el))\n : sortByModel.value?.filter((el) => el.key !== val.key)\n }\n return val\n }\n\n /**\n * @returns the updated value to emit for sorted\n */\n const handleSingleSort = (): BTableSortBy => {\n const val = {\n ...updatedValue,\n order: index === -1 ? updatedValue.order : resolveOrder(updatedValue.order),\n }\n sortByModel.value = [val]\n return val\n }\n\n // Then emit the returned updated value\n emit('sorted', props.multisort === true ? handleMultiSort() : handleSingleSort())\n}\n\nconst onFieldHeadClick = (\n fieldKey: string,\n field: TableField<T>,\n event: Readonly<MouseEvent>,\n isFooter = false\n) => {\n emit('head-clicked', fieldKey, field, event, isFooter)\n handleFieldSorting(field)\n}\n\nconst callItemsProvider = async () => {\n if (!usesProvider.value || props.provider === undefined || busyModel.value) return\n busyModel.value = true\n const response = props.provider({\n currentPage: currentPageNumber.value,\n filter: props.filter,\n sortBy: sortByModel.value,\n perPage: perPageNumber.value,\n })\n try {\n const items = response instanceof Promise ? await response : response\n\n if (items === undefined) return\n internalItems.value = items\n } finally {\n // Potential race condition could occur if the user explicitly sets the busy value to a different value while the response promise is executing\n // which would have been the users choice.\n // eslint-disable-next-line require-atomic-updates\n busyModel.value = false\n }\n}\n\nconst providerPropsWatch = async (prop: string, val: unknown, oldVal: unknown) => {\n if (val === oldVal) return\n\n //stop provide when paging\n const inNoProvider = (key: NoProviderTypes) => props.noProvider?.includes(key) === true\n const noProvideWhenPaging =\n (prop === 'currentPage' || prop === 'perPage') &&\n (inNoProvider('paging') || props.noProviderPaging === true)\n const noProvideWhenFiltering =\n prop === 'filter' && (inNoProvider('filtering') || props.noProviderFiltering === true)\n const noProvideWhenSorting =\n (prop === 'sortBy' || prop === 'sortDesc') &&\n (inNoProvider('sorting') || props.noProviderSorting === true)\n\n if (noProvideWhenPaging || noProvideWhenFiltering || noProvideWhenSorting) return\n\n if (usesProvider.value === true) {\n await callItemsProvider()\n }\n\n if (!(prop === 'currentPage' || prop === 'perPage')) {\n emit('filtered', [...computedItems.value])\n }\n}\n\nwatch(\n () => props.filter,\n (filter, oldFilter) => {\n providerPropsWatch('filter', filter, oldFilter)\n\n if (filter === oldFilter || usesProvider.value) return\n if (!filter) {\n emit('filtered', [...computedItems.value])\n }\n }\n)\nwatch(currentPageNumber, (val, oldVal) => {\n providerPropsWatch('currentPage', val, oldVal)\n})\nwatch(perPageNumber, (val, oldVal) => {\n providerPropsWatch('perPage', val, oldVal)\n})\nwatch(\n sortByModel,\n (val, oldVal) => {\n providerPropsWatch('sortBy', val, oldVal)\n },\n {deep: true}\n)\n\nwatch(\n () => props.provider,\n (newValue) => {\n // Reset the internal values if the provider stops getting used\n if (newValue === undefined) {\n internalItems.value = []\n return\n }\n // Otherwise we should refresh the table on such a change\n callItemsProvider()\n }\n)\n\nonMounted(callItemsProvider)\n\ndefineExpose({\n // The row selection methods are really for compat. Users should probably use the v-model though\n clearSelected: () => {\n if (!props.selectable) return\n selectedItemsSetUtilities.clear()\n },\n refresh: callItemsProvider,\n selectAllRows: () => {\n if (!props.selectable) return\n const unselectableItems = selectedItemsToSet.value.size > 0 ? [...selectedItemsToSet.value] : []\n selectedItemsToSet.value = new Set([...computedItems.value])\n selectedItemsToSet.value.forEach((item) => {\n if (unselectableItems.includes(item)) return\n emit('row-selected', item)\n })\n },\n selectRow: (index: number) => {\n if (!props.selectable) return\n const item = computedItems.value[index]\n if (!item || selectedItemsSetUtilities.has(item)) return\n selectedItemsSetUtilities.add(item)\n },\n unselectRow: (index: number) => {\n if (!props.selectable) return\n const item = computedItems.value[index]\n if (!item || !selectedItemsSetUtilities.has(item)) return\n selectedItemsSetUtilities.delete(item)\n },\n isRowSelected: (index: number) => {\n if (!props.selectable) return false\n const item = computedItems.value[index]\n return selectedItemsSetUtilities.has(item)\n },\n})\n</script>\n","<template>\n <component\n :is=\"props.tag\"\n :id=\"computedId\"\n ref=\"el\"\n class=\"tab-pane\"\n :class=\"computedClasses\"\n role=\"tabpanel\"\n :aria-labelledby=\"computedButtonId\"\n v-bind=\"attrs\"\n >\n <slot v-if=\"showSlot\" />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, inject, onMounted, onUnmounted, ref, toRef, useAttrs, watch} from 'vue'\nimport {useDefaults, useId} from '../../composables'\nimport type {BTabProps, TabType} from '../../types'\nimport {tabsInjectionKey} from '../../utils'\n\nconst _props = withDefaults(defineProps<BTabProps>(), {\n buttonId: undefined,\n disabled: false,\n id: undefined,\n lazy: undefined,\n lazyOnce: undefined,\n noBody: false,\n tag: 'div',\n title: undefined,\n titleItemClass: undefined,\n titleLinkAttrs: undefined,\n titleLinkClass: undefined,\n})\nconst props = useDefaults(_props, 'BTab')\n\nconst slots = defineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n title?: (props: Record<string, never>) => any\n}>()\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst activeModel = defineModel<boolean>('active', {\n default: false,\n})\n\nconst parentData = inject(tabsInjectionKey, null)\nconst computedId = useId(() => props.id, 'tabpane')\nconst computedButtonId = useId(() => props.buttonId, 'tab')\n\nconst lazyRenderCompleted = ref(false)\nconst el = ref<HTMLElement | null>(null)\n\nconst {onClick, ...attrs} = useAttrs()\n\nconst tab = computed(\n () =>\n ({\n id: computedId.value,\n buttonId: computedButtonId.value,\n disabled: props.disabled,\n title: props.title,\n titleComponent: slots.title,\n titleItemClass: props.titleItemClass,\n titleLinkAttrs: props.titleLinkAttrs,\n titleLinkClass: props.titleLinkClass,\n onClick,\n el: el.value,\n }) as TabType\n)\n\nonMounted(() => {\n if (!parentData) return\n parentData.registerTab(tab)\n if (props.active) {\n parentData.activateTab(computedId.value)\n }\n})\n\nonUnmounted(() => {\n if (!parentData) return\n parentData.unregisterTab(computedId.value)\n})\n\nconst isActive = toRef(() => parentData?.activeId.value === computedId.value)\nconst show = ref(isActive.value)\n\nconst computedLazy = toRef(() => !!(parentData?.lazy.value || (props.lazyOnce ?? props.lazy)))\nconst computedLazyOnce = toRef(() => props.lazyOnce !== undefined)\n\nconst computedActive = toRef(() => isActive.value && !props.disabled)\nconst showSlot = toRef(\n () =>\n computedActive.value ||\n !computedLazy.value ||\n (computedLazy.value && computedLazyOnce.value && lazyRenderCompleted.value)\n)\n\nwatch(isActive, (active) => {\n if (active) {\n activeModel.value = true\n setTimeout(() => {\n show.value = true\n }, 0)\n return\n }\n show.value = false\n activeModel.value = false\n})\nwatch(\n () => props.active,\n (active) => {\n if (!parentData) return\n if (!active) {\n if (isActive.value) {\n parentData.activateTab(undefined)\n }\n return\n }\n parentData.activateTab(computedId.value)\n }\n)\n\nconst computedClasses = computed(() => [\n {\n 'active': isActive.value,\n 'show': show.value,\n 'card-body': parentData?.card.value && props.noBody === false,\n 'fade': !parentData?.noFade.value,\n },\n show.value ? parentData?.activeTabClass.value : parentData?.inactiveTabClass.value,\n parentData?.tabClass.value,\n])\n\nwatch(showSlot, (shown) => {\n if (shown && !lazyRenderCompleted.value) lazyRenderCompleted.value = true\n})\n</script>\n","<template>\n <component :is=\"props.tag\" :id=\"props.id\" class=\"tabs\" :class=\"computedClasses\">\n <ReusableEmptyTab.define>\n <div class=\"tab-content\" :class=\"props.contentClass\">\n <slot />\n <div\n v-if=\"showEmpty\"\n key=\"bv-empty-tab\"\n class=\"tab-pane active\"\n :class=\"{'card-body': props.card}\"\n >\n <slot name=\"empty\" />\n </div>\n </div>\n </ReusableEmptyTab.define>\n\n <ReusableEmptyTab.reuse v-if=\"props.end\" />\n <div\n :class=\"[\n props.navWrapperClass,\n {'card-header': props.card, 'ms-auto': vertical && props.end},\n ]\"\n >\n <ul\n class=\"nav\"\n :class=\"[navTabsClasses, props.navClass]\"\n role=\"tablist\"\n :aria-orientation=\"props.vertical ? 'vertical' : 'horizontal'\"\n >\n <slot name=\"tabs-start\" />\n <li\n v-for=\"(tab, idx) in tabs\"\n :key=\"tab.id\"\n class=\"nav-item\"\n :class=\"tab.titleItemClass\"\n role=\"presentation\"\n >\n <button\n :id=\"tab.buttonId\"\n class=\"nav-link\"\n :class=\"tab.navItemClasses\"\n role=\"tab\"\n :aria-controls=\"tab.id\"\n :aria-selected=\"tab.active\"\n v-bind=\"tab.titleLinkAttrs\"\n @keydown.left.stop.prevent=\"keynav(-1)\"\n @keydown.right.stop.prevent=\"keynav(1)\"\n @keydown.page-up.stop.prevent=\"keynav(-999)\"\n @keydown.page-down.stop.prevent=\"keynav(999)\"\n @click.stop.prevent=\"(e) => handleClick(e, idx)\"\n >\n <component :is=\"tab.titleComponent\" v-if=\"tab.titleComponent\" />\n <template v-else>\n {{ tab.title }}\n </template>\n </button>\n </li>\n <slot name=\"tabs-end\" />\n </ul>\n </div>\n <ReusableEmptyTab.reuse v-if=\"!props.end\" />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, nextTick, provide, type Ref, ref, toRef, unref, watch} from 'vue'\nimport {BvEvent, tabsInjectionKey} from '../../utils'\nimport {useAlignment, useDefaults} from '../../composables'\nimport type {BTabsProps, TabType} from '../../types'\nimport {createReusableTemplate} from '@vueuse/core'\n\nconst _props = withDefaults(defineProps<BTabsProps>(), {\n activeNavItemClass: undefined,\n activeTabClass: undefined,\n align: undefined,\n card: false,\n contentClass: undefined,\n end: false,\n fill: false,\n id: undefined,\n inactiveNavItemClass: undefined,\n inactiveTabClass: undefined,\n justified: false,\n lazy: false,\n navClass: undefined,\n navItemClass: undefined,\n navWrapperClass: undefined,\n noFade: false,\n // noKeyNav: false,\n noNavStyle: false,\n pills: false,\n small: false,\n tag: 'div',\n tabClass: undefined,\n vertical: false,\n})\nconst props = useDefaults(_props, 'BTabs')\n\nconst emit = defineEmits<{\n 'activate-tab': [v1: number, v2: number, v3: BvEvent]\n 'click': [] // TODO click event is never used\n}>()\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'default'?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'empty'?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'tabs-end'?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'tabs-start'?: (props: Record<string, never>) => any\n}>()\n\nconst modelValue = defineModel<number>({\n default: -1,\n})\nconst activeId = defineModel<string | undefined>('activeId', {\n default: undefined,\n})\n\nconst ReusableEmptyTab = createReusableTemplate()\n\nconst tabsInternal = ref<Ref<TabType>[]>([])\n\nconst tabs = computed(() =>\n tabsInternal.value.map((_tab) => {\n const tab = unref(_tab)\n const active = tab.id === activeId.value\n\n return {\n ...tab,\n active,\n navItemClasses: [\n {\n active,\n disabled: tab.disabled,\n },\n active ? props.activeNavItemClass : props.inactiveNavItemClass,\n props.navItemClass,\n tab.titleLinkClass,\n ],\n }\n })\n)\n\nconst showEmpty = toRef(() => !(tabs?.value && tabs.value.length > 0))\n\nconst computedClasses = computed(() => ({\n 'd-flex': props.vertical,\n 'align-items-start': props.vertical,\n}))\n\nconst alignment = useAlignment(() => props.align)\n\nconst navTabsClasses = computed(() => ({\n 'nav-pills': props.pills,\n 'flex-column me-3': props.vertical,\n [alignment.value]: props.align !== undefined,\n 'nav-fill': props.fill,\n 'card-header-tabs': props.card,\n 'nav-justified': props.justified,\n 'nav-tabs': !props.noNavStyle && !props.pills,\n 'small': props.small,\n}))\n\nconst activateTab = (index: number): void => {\n if (index !== undefined) {\n const id = tabs.value[index]?.id\n if (\n index > -1 &&\n index < tabs.value.length &&\n !tabs.value[index].disabled &&\n (modelValue.value < 0 || activeId.value !== id || modelValue.value !== index)\n ) {\n const tabEvent = new BvEvent('activate-tab', {cancelable: true})\n emit('activate-tab', index, modelValue.value, tabEvent)\n if (!tabEvent.defaultPrevented) {\n if (activeId.value !== id) activeId.value = id\n if (modelValue.value !== index) modelValue.value = index\n }\n }\n }\n}\n\nconst handleClick = (event: Readonly<MouseEvent>, index: number) => {\n activateTab(index)\n if (\n index >= 0 &&\n !tabs.value[index].disabled &&\n tabs.value[index]?.onClick &&\n typeof tabs.value[index].onClick === 'function'\n ) {\n tabs.value[index].onClick?.(event)\n }\n}\n\nconst keynav = (direction: number) => {\n if (tabs.value.length <= 0) return\n modelValue.value = nextIndex(modelValue.value + direction, direction)\n document.getElementById(tabs.value[modelValue.value]?.buttonId)?.focus()\n}\n\nconst nextIndex = (start: number, direction: number) => {\n let index = start\n let minIdx = -1\n let maxIdx = -1\n\n for (let i = 0; i < tabs.value.length; i++) {\n if (!tabs.value[i].disabled) {\n if (minIdx === -1) minIdx = i\n maxIdx = i\n }\n }\n\n while (index >= minIdx && index <= maxIdx && tabs.value[index].disabled) {\n index += direction\n }\n\n if (index < minIdx) index = minIdx\n if (index > maxIdx) index = maxIdx\n\n return index\n}\n\nwatch(modelValue, (newValue, oldValue) => {\n if (newValue === oldValue) return\n if (tabs.value.length <= 0) {\n return\n }\n\n const index = nextIndex(newValue, newValue > oldValue ? 1 : -1)\n nextTick(() => {\n activateTab(index)\n })\n})\n\nwatch(activeId, (newValue, oldValue) => {\n const index = tabs.value.findIndex((t) => t.id === newValue)\n if (newValue === oldValue) return\n if (tabs.value.length <= 0) {\n return\n }\n if (index === -1) {\n activateTab(nextIndex(0, 1))\n return\n }\n activateTab(index)\n})\n\nconst registerTab = (tab: Ref<TabType>) => {\n if (!tabsInternal.value.find((t) => t.value.id === tab.value.id)) {\n tabsInternal.value.push(tab)\n } else {\n tabsInternal.value[tabsInternal.value.findIndex((t) => t.value.id === tab.value.id)] = tab\n }\n tabsInternal.value.sort((a, b) => {\n if (!Node || !a.value.el || !b.value.el) return 0\n const position = a.value.el.compareDocumentPosition(b.value.el)\n if (position & Node.DOCUMENT_POSITION_FOLLOWING) return -1\n if (position & Node.DOCUMENT_POSITION_PRECEDING) return 1\n return 0\n })\n}\nconst unregisterTab = (id: string) => {\n tabsInternal.value = tabsInternal.value.filter((t) => t.value.id !== id)\n}\n\nwatch(\n tabsInternal,\n () => {\n findActive()\n },\n {deep: true}\n)\n\nconst findActive = () => {\n if (tabs.value.length === 0) {\n modelValue.value = -1\n activeId.value = undefined\n return\n }\n if (modelValue.value >= 0 && !activeId.value) {\n activeId.value = tabs.value[modelValue.value]?.id\n }\n if (tabs.value.find((t) => t.id === activeId.value)) {\n activateTab(tabs.value.findIndex((t) => t.id === activeId.value))\n return\n }\n activateTab(tabs.value.map((tab) => !tab.disabled).indexOf(true))\n}\n\nprovide(tabsInjectionKey, {\n lazy: toRef(() => props.lazy),\n card: toRef(() => props.card),\n noFade: toRef(() => props.noFade),\n activeTabClass: toRef(() => props.activeTabClass),\n inactiveTabClass: toRef(() => props.inactiveTabClass),\n tabClass: toRef(() => props.tabClass),\n registerTab,\n unregisterTab,\n activeId,\n activateTab: (id) => {\n const idx = tabs.value.findIndex((t) => t.id === id)\n if (id === undefined || idx === -1) {\n activateTab(nextIndex(0, 1))\n return\n }\n activateTab(idx)\n },\n})\n</script>\n","<template>\n <Teleport :to=\"props.teleportTo\" :disabled=\"props.teleportDisabled\">\n <div id=\"__BVID__toaster-container\">\n <div\n v-for=\"(value, key) in positionClasses\"\n :key=\"key\"\n :class=\"value\"\n class=\"toast-container position-fixed p-3\"\n >\n <TransitionGroup name=\"b-list\">\n <component\n :is=\"toast.value.component\"\n v-for=\"toast in toasts?.filter((el) => el.value.props.pos === key)\"\n :key=\"toast.value.props._self\"\n v-bind=\"pluckToastItem(toast.value.props)\"\n :model-value=\"toast.value.props._modelValue\"\n :trans-props=\"{...toast.value.props.transProps, appear: true}\"\n @update:model-value=\"leave?.(toast.value.props._self)\"\n @hide=\"remove?.(toast.value.props._self)\"\n />\n <!-- I think it's only coincidence that hide works, It's not tied to the lifecycle of a transition -->\n <!-- I think actually removes the el before the transition ends, But it's just not noticeable as it's \"fading\" -->\n <!-- It _should_ be @hidden -- as hidden is when the transition has ended. But transition in transition groups isn't \"okay\" -->\n </TransitionGroup>\n </div>\n </div>\n </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport {watch} from 'vue'\nimport {useDefaults, useToast} from '../../composables'\nimport {omit, positionClasses} from '../../utils'\n\nimport type {BToastOrchestratorProps} from '../../types'\n\nconst _props = withDefaults(defineProps<BToastOrchestratorProps>(), {\n teleportDisabled: false,\n teleportTo: 'body',\n appendToast: false,\n})\nconst props = useDefaults(_props, 'BToastOrchestrator')\n\nconst {remove, toasts, show, _setIsAppend, leave} = useToast()\n\nwatch(\n () => props.appendToast,\n (value) => {\n _setIsAppend?.(value)\n },\n {immediate: true}\n)\n\nconst pluckToastItem = (\n payload: Readonly<Exclude<typeof toasts, undefined>['value'][number]['value']['props']>\n) => omit(payload, ['_modelValue', '_self', 'pos'])\n\ndefineExpose({\n remove,\n show,\n toasts,\n})\n</script>\n\n<style lang=\"scss\">\n/*\nIf you remove the last element in the list, the animation goes farther to the right then normal.\nI don't know why\nI kind of like it though, and even if I didn't, I don't know how to get rid of it.\nGetting the transitions to work here was basically all trial and error.\nI think it's because it's \"moving\", but I don't know where it's moving to\n*/\n.b-list-move,\n.b-list-enter-active,\n.b-list-leave-active {\n transition: all 0.5s cubic-bezier(0.55, 0, 0.1, 1);\n}\n.b-list-enter-from,\n.b-list-leave-to {\n opacity: 0; // TODO this should be the responsibility of the child\n}\n.b-list-leave-active {\n position: fixed;\n}\n</style>\n","<template>\n <BPopover ref=\"popover\" v-bind=\"computedProps\" v-model=\"modelValue\" tooltip>\n <template v-for=\"(_, name) in $slots\" #[name]=\"slotData\">\n <slot :name=\"name\" v-bind=\"slotData\" />\n </template>\n </BPopover>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, ref} from 'vue'\nimport BPopover from './BPopover.vue'\nimport type {BPopoverProps, BTooltipProps} from '../types'\nimport {useDefaults} from '../composables'\n\nconst _props = withDefaults(defineProps<BTooltipProps>(), {\n click: undefined,\n teleportDisabled: undefined,\n teleportTo: undefined,\n content: undefined,\n customClass: undefined,\n delay: undefined,\n floatingMiddleware: undefined,\n hide: undefined,\n html: undefined,\n id: undefined,\n inline: undefined,\n interactive: undefined,\n manual: undefined,\n noAutoClose: undefined,\n noFade: undefined,\n noFlip: undefined,\n noHide: undefined,\n noShift: undefined,\n noninteractive: undefined,\n offset: undefined,\n placement: undefined,\n realtime: undefined,\n reference: undefined,\n strategy: undefined,\n target: undefined,\n title: undefined,\n variant: undefined,\n})\n\nconst props = useDefaults(_props, 'BTooltip')\n\nconst modelValue = defineModel<boolean | undefined>({default: undefined})\n\nconst computedProps = computed<BPopoverProps>(() => {\n const {interactive, noninteractive, ...rest} = props\n return {noninteractive: noninteractive !== undefined ? noninteractive : !interactive, ...rest}\n})\n\nconst popover = ref<null | InstanceType<typeof BPopover>>(null)\n\ndefineExpose({\n hide: popover.value?.hide,\n show: popover.value?.show,\n toggle: popover.value?.toggle,\n})\n</script>\n","import type {Plugin} from 'vue'\nimport type {BootstrapVueOptions, ComponentType, ConfigurationOption, DirectiveType} from './types'\nimport type {ComponentResolver} from 'unplugin-vue-components'\nimport type * as Components from './components'\n\nimport {\n breadcrumbPlugin,\n defaultsPlugin,\n idPlugin,\n modalControllerPlugin,\n modalManagerPlugin,\n rtlPlugin,\n toastPlugin,\n} from './plugins'\nimport {ComponentNames, DirectiveNames} from './types/BootstrapVueOptions'\n\nimport './styles/styles.scss'\n\nimport parseActiveImports from './utils/parseActiveImports'\n\nconst bvKey = 'bootstrap-vue-next'\n\ndeclare module '@vue/runtime-core' {\n export interface GlobalComponents {\n BFormFile: typeof Components.BFormFile\n BAccordion: typeof Components.BAccordion\n BAccordionItem: typeof Components.BAccordionItem\n BAlert: typeof Components.BAlert\n BAvatar: typeof Components.BAvatar\n BAvatarGroup: typeof Components.BAvatarGroup\n BBadge: typeof Components.BBadge\n BBreadcrumb: typeof Components.BBreadcrumb\n BBreadcrumbItem: typeof Components.BBreadcrumbItem\n BButton: typeof Components.BButton\n BButtonGroup: typeof Components.BButtonGroup\n BButtonToolbar: typeof Components.BButtonToolbar\n BCard: typeof Components.BCard\n BCardBody: typeof Components.BCardBody\n BCardFooter: typeof Components.BCardFooter\n BCardGroup: typeof Components.BCardGroup\n BCardHeader: typeof Components.BCardHeader\n BCardImg: typeof Components.BCardImg\n BCardSubtitle: typeof Components.BCardSubtitle\n BCardText: typeof Components.BCardText\n BCardTitle: typeof Components.BCardTitle\n BCarousel: typeof Components.BCarousel\n BCarouselSlide: typeof Components.BCarouselSlide\n BCloseButton: typeof Components.BCloseButton\n BCol: typeof Components.BCol\n BCollapse: typeof Components.BCollapse\n BContainer: typeof Components.BContainer\n BDropdown: typeof Components.BDropdown\n BDropdownDivider: typeof Components.BDropdownDivider\n BDropdownForm: typeof Components.BDropdownForm\n BDropdownGroup: typeof Components.BDropdownGroup\n BDropdownHeader: typeof Components.BDropdownHeader\n BDropdownItem: typeof Components.BDropdownItem\n BDropdownItemButton: typeof Components.BDropdownItemButton\n BDropdownText: typeof Components.BDropdownText\n BForm: typeof Components.BForm\n BFormCheckbox: typeof Components.BFormCheckbox\n BFormCheckboxGroup: typeof Components.BFormCheckboxGroup\n BFormDatalist: typeof Components.BFormDatalist\n BFormFloatingLabel: typeof Components.BFormFloatingLabel\n BFormGroup: typeof Components.BFormGroup\n BFormInput: typeof Components.BFormInput\n BFormInvalidFeedback: typeof Components.BFormInvalidFeedback\n BFormRadio: typeof Components.BFormRadio\n BFormRadioGroup: typeof Components.BFormRadioGroup\n BFormRow: typeof Components.BFormRow\n BFormSelect: typeof Components.BFormSelect\n BFormSelectOption: typeof Components.BFormSelectOption\n BFormSelectOptionGroup: typeof Components.BFormSelectOptionGroup\n BFormText: typeof Components.BFormText\n BFormTextarea: typeof Components.BFormTextarea\n BFormTag: typeof Components.BFormTag\n BFormTags: typeof Components.BFormTags\n BFormSpinbutton: typeof Components.BFormSpinbutton\n BFormValidFeedback: typeof Components.BFormValidFeedback\n BImg: typeof Components.BImg\n BInput: typeof Components.BInput\n BInputGroup: typeof Components.BInputGroup\n BInputGroupText: typeof Components.BInputGroupText\n BLink: typeof Components.BLink\n BListGroup: typeof Components.BListGroup\n BListGroupItem: typeof Components.BListGroupItem\n BModal: typeof Components.BModal\n BModalOrchestrator: typeof Components.BModalOrchestrator\n BNav: typeof Components.BNav\n BNavForm: typeof Components.BNavForm\n BNavText: typeof Components.BNavText\n BNavbar: typeof Components.BNavbar\n BNavbarBrand: typeof Components.BNavbarBrand\n BNavbarNav: typeof Components.BNavbarNav\n BNavbarToggle: typeof Components.BNavbarToggle\n BNavItem: typeof Components.BNavItem\n BNavItemDropdown: typeof Components.BNavItemDropdown\n BOffcanvas: typeof Components.BOffcanvas\n BOverlay: typeof Components.BOverlay\n BPagination: typeof Components.BPagination\n BPlaceholder: typeof Components.BPlaceholder\n BPlaceholderButton: typeof Components.BPlaceholderButton\n BPlaceholderCard: typeof Components.BPlaceholderCard\n BPlaceholderTable: typeof Components.BPlaceholderTable\n BPlaceholderWrapper: typeof Components.BPlaceholderWrapper\n BPopover: typeof Components.BPopover\n BProgress: typeof Components.BProgress\n BProgressBar: typeof Components.BProgressBar\n BRow: typeof Components.BRow\n BSpinner: typeof Components.BSpinner\n BTab: typeof Components.BTab\n BTable: typeof Components.BTable\n BTableSimple: typeof Components.BTableSimple\n BTbody: typeof Components.BTbody\n BTd: typeof Components.BTd\n BTfoot: typeof Components.BTfoot\n BTh: typeof Components.BTh\n BThead: typeof Components.BThead\n BTr: typeof Components.BTr\n BToast: typeof Components.BToast\n BToastOrchestrator: typeof Components.BToastOrchestrator\n BTooltip: typeof Components.BTooltip\n BTabs: typeof Components.BTabs\n BTransition: typeof Components.BTransition\n }\n}\n\nconst sliceName = (str: string) => (str.toLowerCase().startsWith('v') ? str.slice(1) : str)\n\n// Main app plugin\nexport const createBootstrap = (pluginData: Readonly<BootstrapVueOptions> = {}): Plugin => ({\n install(app) {\n if (pluginData.breadcrumb ?? true === true) {\n app.use(breadcrumbPlugin)\n }\n if ((pluginData.id ?? true === true) || typeof pluginData.id === 'object') {\n app.use(idPlugin, pluginData)\n }\n if (pluginData.modalController ?? true === true) {\n app.use(modalControllerPlugin)\n }\n if (pluginData.modalManager ?? true === true) {\n app.use(modalManagerPlugin)\n }\n if ((pluginData.rtl ?? true === true) || typeof pluginData.rtl === 'object') {\n app.use(rtlPlugin, pluginData)\n }\n if (pluginData.toast ?? true === true) {\n app.use(toastPlugin)\n }\n app.use(defaultsPlugin, pluginData)\n },\n})\n\n/**\n * Resolver for unplugin-vue-components\n */\nexport const BootstrapVueNextResolver = ({\n aliases = {},\n directives = true,\n components = true,\n}: Readonly<{\n components?: boolean | ConfigurationOption<ComponentType>\n directives?: boolean | ConfigurationOption<DirectiveType>\n aliases?: Record<string, ComponentType>\n}> = {}): ComponentResolver[] => {\n const selectedComponents = typeof components === 'boolean' ? {all: components} : components\n const compImports = new Set<string>(parseActiveImports(selectedComponents, ComponentNames))\n\n const selectedDirectives = typeof directives === 'boolean' ? {all: directives} : directives\n const dirImports = new Set<string>(\n parseActiveImports(selectedDirectives, DirectiveNames).map(sliceName)\n )\n const resolvers: ComponentResolver[] = [\n {\n type: 'component',\n resolve: (name) => {\n if (compImports.has(name) || aliases[name]) {\n return {\n name: aliases[name] || name,\n from: bvKey,\n }\n }\n },\n },\n {\n type: 'directive',\n resolve: (name) => {\n if (dirImports.has(name)) {\n return {\n name: `v${name}`,\n from: bvKey,\n }\n }\n },\n },\n ]\n return resolvers\n}\n\nexport * from './components'\nexport * as Components from './components'\nexport * from './directives'\nexport * as Directives from './directives'\nexport * from './composables/exports'\nexport * as Composables from './composables/exports'\nexport * from './utils/exports'\nexport * as Utils from './utils/exports'\nexport * from './types/exports'\nexport * as Types from './types/exports'\nexport * from './plugins'\nexport * as Plugins from './plugins'\n"],"names":["useAlignment","align","computed","value","toValue","useAriaInvalid","ariaInvalid","state","resolvedAriaInvalid","resolvedState","BvEvent","eventType","eventInit","__publicField","prop","setter","BvTriggerableEvent","BvCarouselEvent","from","direction","to","attemptFocus","el","options","getActiveElement","excludes","activeElement","isActiveElement","e","isEmptySlot","isVisible","bcr","getTransitionDelay","element","style","transitionDelay","transitionDuration","transitionDelayMs","transitionDurationMs","IS_BROWSER","parseEventOptions","passiveEventSupported","eventOn","eventName","handler","eventOff","eventOnOff","on","eventParams","TABLE_TAG_NAMES","eventFilter","filterEvent","event","label","labelFor","input","sides","alignments","placements","acc","side","min","max","oppositeSideMap","oppositeAlignmentMap","clamp","start","end","evaluate","param","getSide","placement","getAlignment","getOppositeAxis","axis","getAxisLength","getSideAxis","getAlignmentAxis","getAlignmentSides","rects","rtl","alignment","alignmentAxis","length","mainAlignmentSide","getOppositePlacement","getExpandedPlacements","oppositePlacement","getOppositeAlignmentPlacement","getSideList","isStart","lr","rl","tb","bt","getOppositeAxisPlacements","flipAlignment","list","expandPaddingObject","padding","getPaddingObject","rectToClientRect","rect","computeCoordsFromPlacement","_ref","reference","floating","sideAxis","alignLength","isVertical","commonX","commonY","commonAlign","coords","computePosition","config","strategy","middleware","platform","validMiddleware","x","y","statefulPlacement","middlewareData","resetCount","i","name","fn","nextX","nextY","data","reset","detectOverflow","_await$platform$isEle","elements","boundary","rootBoundary","elementContext","altBoundary","paddingObject","clippingClientRect","offsetParent","offsetScale","elementClientRect","arrow","arrowDimensions","isYAxis","minProp","maxProp","clientProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","largestPossiblePadding","minPadding","maxPadding","min$1","center","offset","shouldAddOffset","alignmentOffset","getPlacementList","autoAlignment","allowedPlacements","autoPlacement","_middlewareData$autoP","_middlewareData$autoP2","_placementsThatFitOnE","crossAxis","detectOverflowOptions","placements$1","overflow","currentIndex","currentPlacement","alignmentSides","currentOverflows","allOverflows","nextPlacement","placementsSortedByMostSpace","d","v","a","b","resetPlacement","flip","_middlewareData$arrow","_middlewareData$flip","initialPlacement","checkMainAxis","checkCrossAxis","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","isBasePlacement","fallbackPlacements","overflows","overflowsData","_middlewareData$flip2","_overflowsData$filter","nextIndex","_overflowsData$map$so","getSideOffsets","isAnySideFullyClipped","hide","offsets","getBoundingRect","minX","minY","maxX","maxY","getRectsByLine","sortedRects","groups","prevRect","inline","nativeClientRects","clientRects","fallback","getBoundingClientRect","firstRect","lastRect","isTop","top","bottom","left","right","width","height","isLeftSide","maxRight","minLeft","measureRects","resetRects","convertValueToCoords","mainAxisMulti","crossAxisMulti","rawValue","mainAxis","_middlewareData$offse","diffCoords","shift","limiter","mainAxisCoord","crossAxisCoord","minSide","maxSide","limitedCoords","size","apply","heightSide","widthSide","maximumClippingHeight","maximumClippingWidth","overflowAvailableHeight","overflowAvailableWidth","noShift","availableHeight","availableWidth","xMin","xMax","yMin","yMax","nextDimensions","n","t","o","r","l","c","s","h","f","u","p","g","m","w","L","E","R","T","C","F","W","D","S","A","H","O","P","z","B","getNodeName","node","isNode","getWindow","_node$ownerDocument","isComponentPublicInstance","target","unwrapElement","source","unref","args","arrow$1","getDPR","roundByDPR","dpr","useFloating","whileElementsMountedOption","openOption","_toValue","middlewareOption","placementOption","_toValue2","strategyOption","_toValue3","transformOption","_toValue4","referenceElement","floatingElement","ref","shallowRef","isPositioned","floatingStyles","initialStyles","xVal","yVal","whileElementsMountedCleanup","update","position","cleanup","attach","watch","getCurrentScope","onScopeDispose","shallowReadonly","uriAttributes","ARIA_ATTRIBUTE_PATTERN","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","attribute","allowedAttributeList","attributeName","attributeRegex","regex","DefaultAllowlist","sanitizeHtml","unsafeHtml","allowList","sanitizeFunction","createdDocument","elementName","attributeList","allowedAttributes","tryOnScopeDispose","makeDestructurable","obj","arr","clone","index","isClient","notNullish","val","toString","isObject","noop","isIOS","getIsIOS","_a","_b","createFilterWrapper","filter","wrapper","resolve","reject","bypassFilter","invoke","debounceFilter","ms","timer","maxTimer","lastRejector","_clearTimeout","timer2","duration","maxDuration","pausableFilter","extendFilter","isActive","pause","resume","readonly","cacheStringFunction","cache","str","camelizeRE","camelize","_","increaseWithUnit","delta","unit","result","getLifeCycleTarget","getCurrentInstance","toRef","toRef$1","customRef","useDebounceFn","watchWithFilter","cb","watchOptions","watchPausable","syncRef","flush","deep","immediate","transform","watchers","transformLTR","transformRTL","newValue","tryOnMounted","sync","onMounted","nextTick","useIntervalFn","interval","immediateCallback","clean","intervalValue","isRef","stopWatch","useToNumber","method","radix","nanToZero","resolved","createReusableTemplate","inheritAttrs","render","define","defineComponent","slots","reuse","attrs","vnode","keysToCamelKebabCase","newObj","key","unrefElement","elRef","plain","defaultWindow","useEventListener","events","listeners","cleanups","register","listener","options2","optionsClone","stop","_iOSWorkaround","onClickOutside","window","ignore","capture","detectIframe","shouldListen","shouldIgnore","target2","createKeyPredicate","keyFilter","onKeyStroke","passive","dedupe","predicate","useMounted","isMounted","instance","useSupported","callback","useMutationObserver","mutationOptions","observer","isSupported","targets","items","targets2","takeRecords","useMediaQuery","query","mediaQuery","matches","watchEffect","breakpointsBootstrapV5","useBreakpoints","breakpoints","getValue","k","match","greaterOrEqual","smallerOrEqual","shortcutMethods","shortcuts","current","points","bps","_global","globalKey","handlers","getHandlers","getSSRHandler","guessSerializerType","rawInit","StorageSerializers","customStorageEventName","useStorage","defaults","storage","listenToStorageChanges","writeDefaults","mergeDefaults","shallow","onError","initOnMounted","_a2","type","serializer","pauseWatch","resumeWatch","pausableWatch","write","updateFromCustomEvent","dispatchWriteEvent","oldValue","serialized","read","usePreferredDark","useColorMode","selector","initialValue","storageKey","storageRef","emitAuto","disableTransition","modes","preferredDark","system","store","updateHTMLAttrs","selector2","attribute2","defaultOnChanged","mode","onChanged","auto","useElementHover","delayEnter","delayLeave","isHovered","toggle","entering","delay","useIntersectionObserver","root","rootMargin","threshold","_target","root2","useFocus","focusVisible","preventScroll","innerFocused","targetElement","focused","resolveElement","UseMouseBuiltinExtractors","useMouse","touch","resetOnTouchEnds","scroll","_prevMouseEvent","sourceType","extractor","mouseHandler","touchHandler","scrollHandler","pos","mouseHandlerWrapper","touchHandlerWrapper","scrollHandlerWrapper","listenerOptions","useMouseInElement","handleOutside","targetRef","elementX","elementY","elementPositionX","elementPositionY","elementHeight","elementWidth","isOutside","elX","elY","checkOverflowScroll","ele","parent","preventDefault","rawEvent","elInitialOverflow","useScrollLock","initialState","isLocked","stopTouchMoveListener","initialOverflow","lock","unlock","useSwipe","onSwipe","onSwipeEnd","onSwipeStart","coordsStart","reactive","coordsEnd","diffX","diffY","abs","isThresholdExceeded","isSwiping","getTouchEventCoords","updateCoordsStart","updateCoordsEnd","isPassiveEventSupported","checkPassiveEventSupport","onTouchEnd","stops","document","supportsPassive","optionsBlock","props","useDefaults","__props","emit","__emit","modelValue","_useModel","showState","showStateInternal","show","computedId","useId","hidden","targetTrigger","trigger","placeholder","sanitizedTitle","sanitizedContent","isAutoPlacement","offsetNumber","isBoundary","isRootBoundary","sizeStyles","floatingMiddleware","off","offsetMiddleware","hideMiddleware","inlineMiddleware","arrowMiddleware","sizeMiddleware","placementRef","autoUpdate","arrowStyle","computedClasses","resolveBootstrapPlacement","triggerIsOutside","buildTriggerableEvent","opts","showTimeout","__expose","bind","elem","getElement","unbind","onBeforeUnmount","resolveFloatingPlacement","alignCenter","alignEnd","_placement","resolveActiveStatus","values","resolveContent","missingBindingValue","title","resolveDirectiveProps","binding","div","BPopover","formatItem","item","fieldKey","formatter","get","getClasses$1","els","propPrefix","classPrefix","getSlotElements","slot","filterBy","child","RX_UNDERSCORE","RX_LOWER_UPPER","RX_NUMBER","RX_START_SPACE_WORD","RX_FIRST_START_SPACE_WORD","RX_SPACE_SPLIT","RX_HASH","RX_HASH_ID","RX_REGEXP_REPLACE","RX_SPACES","startCase","$1","$2","titleCase","upperFirst","trim","escapeRegExp","escapeRegExpChars","getTableFieldHeadLabel","field","isLink","carouselInjectionKey","tabsInjectionKey","progressInjectionKey","listGroupInjectionKey","avatarGroupInjectionKey","accordionInjectionKey","checkboxGroupKey","radioGroupKey","collapseInjectionKey","dropdownInjectionKey","navbarInjectionKey","toastPluginKey","rtlPluginKey","breadcrumbPluginKey","modalControllerPluginKey","modalManagerPluginKey","idPluginKey","defaultsKey","inputGroupKey","normalizeInput","modelModifiers","parsed","normalizeSlot","scope","$slots","names","omit","objToPluck","keysToPluck","pick","memo","path","defaultValue","segments","set","initial","toInt","def","_set","nextIsNum","cloned","parseActiveImports","all","others","valuesCopy","merge","suffixPropName","suffix","positionClasses","useBLinkHelper","pickProps","pickPropsResolved","resolvedProps","computedLink","computedLinkProps","useBreadcrumb","inject","persist","useColorVariantClasses","useContainerClasses","resolvedValue","useCountdown","intervalOpts","resolvedLength","resolvedInterval","isPaused","intervalsPassed","amountOfIntervals","restart","myPause","myResume","injectSelf","vm","provides","message","_getCurrentInstance","toKebabCase","mergeDeep","arrayFn","out","sourceProperty","targetProperty","propIsDefined","internalUseDefaults","componentDefaults","_props","propValue","_d","_c","_subcomponentDefaults","subComponents","provideSubDefaults","injected","provide","useStateClass","getClasses","resolvedItems","getInputClasses","stateClass","getLabelClasses","getGroupAttr","computedAriaInvalid","getGroupClasses","id","getId","useFormInput","debounceNumber","debounceMaxWaitNumber","internalUpdateModelValue","updateModelValue","force","_formatValue","evt","onActivated","formattedValue","nextModel","useFormSelect","propsValue","optionsValue","isComplex","option","normalizeOption","text","html","disabled","normalizeOptions","modalOpenClassName","useSharedModalStack","modalManagerPlugin","dispose","modal","useModalManager","modalOpen","pushRegistry","pushStack","removeStack","stack","countStack","currentModal","setInStack","useModal","registry","findBModal","component","modalComponent","resolvedId","useModalController","lastStack","useNumberishToStyle","resolvedUnit","useRadiusElementClasses","resolveRadiusElement","strValue","useRtl","rtlPlugin","rtlNew","localeNew","useSafeScrollLock","isOpen","bodyScroll","resolvedIsOpen","resolvedBodyScrolling","inverseBodyScrollingValue","modelVal","bodyVal","useScrollspy","content","cont","tar","resolvedContent","resolvedTarget","updateList","contentQuery","targetQuery","manual","watchChanges","nodeList","isScrollingDown","previousScrollTop","scrollRoot","iobs","entries","scrollTop","entry","newId","nodes","foundParent","parentDropdown","parentNav","_e","_f","_g","_h","_i","_j","_k","mobs","scrollIntoView","smooth","href","useToast","useFadeTransition","noFade","NO_FADE_PROPS","FADE_PROPS","fadeProperties","baseProperties","useLinkClasses","linkProps","defaultActiveClass","useAttrs","collapseData","navbarData","tag","routerName","computedHref","toFallback","hash","linkValueClasses","routerAttr","computedLinkClasses","clicked","parentData","resolvedBackgroundClasses","numberPrecision","numberValue","numberMax","parentMaxNumber","computedLabel","computedWidth","isHovering","intervalNumber","countdownLength","remainingMs","computedTag","BLink","isToastVisible","onMouseEnter","showFn","hideFn","onBeforeEnter","onAfterEnter","onAfterLeave","posDefault","toastPlugin","app","toasts","_isAppend","_setIsAppend","_self","_modelValue","toastToAdd","unwrappedProps","BToast","remove","self","leave","toast","breadcrumbPlugin","idPlugin","candidateSelectors","candidateSelector","NoElement","getRootNode","_element$getRootNode","isInert","lookUp","_node$getAttribute","inertAtt","inert","isContentEditable","_node$getAttribute2","attValue","getCandidates","includeContainer","candidates","getCandidatesIteratively","elementsToCheck","assigned","nestedCandidates","validCandidate","shadowRoot","validShadowRoot","_nestedCandidates","hasTabIndex","getTabIndex","getSortOrderTabIndex","isScope","tabIndex","sortOrderedTabbables","isInput","isHiddenInput","isDetailsWithSummary","getCheckedRadio","form","isTabbableRadio","radioScope","queryRadios","radioSet","err","checked","isRadio","isNonTabbableRadio","isNodeAttached","_nodeRoot","nodeRoot","nodeRootHost","attached","_nodeRootHost","_nodeRootHost$ownerDo","_nodeRoot2","_nodeRootHost2","_nodeRootHost2$ownerD","isZeroArea","_node$getBoundingClie","isHidden","displayCheck","getShadowRoot","isDirectSummary","nodeUnderDetails","originalNode","parentElement","rootNode","isDisabledFromFieldset","parentNode","isNodeMatchingSelectorFocusable","isNodeMatchingSelectorTabbable","isValidShadowRootTabbable","shadowHostNode","sortByOrder","regularTabbables","orderedTabbables","candidateTabindex","sortable","tabbable","container","focusable","isTabbable","focusableCandidateSelector","isFocusable","ownKeys","_objectSpread2","_defineProperty","_toPropertyKey","_toPrimitive","hint","prim","res","arg","activeFocusTraps","trapStack","trap","activeTrap","trapIndex","isSelectableInput","isEscapeEvent","isTabEvent","isKeyForward","isKeyBackward","findIndex","idx","valueOrHandler","_len","params","_key","getActualTarget","internalTrapStack","createFocusTrap","userOptions","doc","getOption","configOverrideOptions","optionName","configOptionName","findContainerIndex","composedPath","tabbableNodes","getNodeForOption","optionValue","_len2","_key2","getInitialFocusNode","firstTabbableGroup","firstTabbableNode","updateTabbableNodes","focusableNodes","lastTabbableNode","firstDomTabbableNode","lastDomTabbableNode","posTabIndexesFound","forward","nodeIdx","group","tryFocus","getReturnFocusNode","previousActiveElement","findNextNavNode","_ref2","_ref2$isBackward","isBackward","destinationNode","containerIndex","containerGroup","startOfGroupIndex","_ref3","destinationGroupIndex","destinationGroup","lastOfGroupIndex","_ref4","_destinationGroupIndex","_destinationGroup","checkPointerDown","checkFocusIn","targetContained","nextNode","navAcrossContainers","mruContainerIdx","mruTabIdx","checkKeyNav","checkKey","checkClick","addListeners","removeListeners","checkDomRemoval","mutations","isFocusedNodeRemoved","mutation","removedNodes","mutationObserver","updateObservedNodes","activateOptions","onActivate","onPostActivate","checkCanFocusTrap","finishActivation","deactivateOptions","onDeactivate","onPostDeactivate","checkCanReturnFocus","returnFocus","finishDeactivation","pauseOptions","onPause","onPostPause","unpauseOptions","onUnpause","onPostUnpause","containerElements","elementsAsArray","useFocusTrap","focusTrapOptions","hasFocus","activate","deactivate","unpause","useActivatedFocusTrap","noTrap","fallbackFocus","focusTrapOpts","resolvedIsActive","resolvedNoTrap","checkNeedsFocus","tabbableElements","needsFallback","_useSlots","hasLabelSlot","pressedValue","isToggle","isButton","isBLink","nonStandardTag","computedAriaDisabled","variantIsLinkSubset","fallbackClassSelector","defaultModalDialogZIndex","fallbackFocusElement","okButton","cancelButton","closeButton","lazyLoadCompleted","fadeTransitionProps","modalFocus","okButtonFocus","cancelButtonFocus","closeButtonFocus","modalClasses","lazyShowing","hasHeaderCloseSlot","modalDialogClasses","resolvedBodyBgClasses","bodyClasses","resolvedHeaderBgClasses","headerClasses","headerCloseAttrs","resolvedFooterBgClasses","footerClasses","titleClasses","disableCancel","disableOk","pickFocusItem","isLeaving","onLeave","activePosition","activeModalCount","stackWithoutSelf","computedZIndex","sharedSlots","modalControllerPlugin","modals","buildPromise","resolveFunc","buildPrereqs","_promise","BModal","confirm","removeRegistry","rtlInitial","localeInitial","isRtl","locale","defaultsPlugin","ComponentNames","DirectiveNames","ComposableNames","isCollapsing","showRef","toggleFn","revealTimeout","hideTimeout","_skipAnimation","reveal","newval","wrapperClass","collapseAttrs","hasCloseSlot","closeClasses","isAlertVisible","closeAttrs","_sfc_main$1n","Teleport","placementClasses","FONT_SIZE_SCALE","SIZES","BADGE_FONT_SIZE_SCALE","hasDefaultSlot","hasBadgeSlot","showBadge","computedSquare","computedPropSize","computedParentSize","computedSize","computedVariant","computedRounded","computedRoundedTop","computedRoundedBottom","computedRoundedStart","computedRoundedEnd","radiusElementClasses","badgeText","badgeImplicitlyDot","computedTextVariant","computedBgVariant","badgeStyle","textFontStyle","fontSize","marginStyle","overlapScale","computedStyle","onImgError","overlapNumber","paddingStyle","computedAriaCurrent","breadcrumb","breadcrumbItemObjects","localItems","activeDefined","heightNumber","widthNumber","computedSrcset","computedSizes","computedDimentions","computedBlankImgSrc","makeBlankImgSrc","computedAlignment","color","baseAlignmentClasses","computedImgProps","hasTitleSlot","hasSubtitleSlot","hasHeaderSlot","hasFooterSlot","imgAttr","ReusableImg","cardTypeClass","slideValues","touchThresholdNumber","slideInterval","slid","isTransitioning","rideStarted","relatedTarget","previousModelValue","enterClasses","leaveClasses","prev","next","isRiding","slides","buildBvCarouselEvent","goToValue","onKeydown","onMouseLeave","lengthX","resumeRiding","onBeforeLeave","onEnter","hasText","hasCaption","hasContent","computedContentClasses","classList","inInputGroup","computedOffset","offsetToNumber","button","splitButton","referencePlacement","keynav","active","floatingPlacement","localOffset","buttonClasses","onButtonClick","onSplitClick","onClickInside","currentModelValue","headerId","headerRole","dropdownData","normalizedOptions","normalizedOptsWrapper","opt","computedShow","inputAttrs","indeterminate","localValue","newVal","computedRequired","isButtonGroup","classesObject","wrapperClasses","computedWrapperClasses","inputClasses","computedInputClasses","labelClasses","computedName","ind","computedAttrs","computedAccept","onChange","onDrop","INPUTS","INPUT_SELECTOR","LEGEND_INTERACTIVE_ELEMENTS","SLOT_NAME_LABEL","SLOT_NAME_INVALID_FEEDBACK","SLOT_NAME_VALID_FEEDBACK","SLOT_NAME_DESCRIPTION","SLOT_NAME_DEFAULT","_sfc_main$J","BCol","BFormInvalidFeedback","BFormRow","BFormText","BFormValidFeedback","breakPoints","getAlignClasses","prefix","breakpoint","getColProps","updateAriaDescribedby","$input","attr","newIds","oldIds","ids","contentColProps","labelAlignClasses","labelColProps","isHorizontal","tagName","inputs","inp","isFieldset","$label","labelContent","labelId","labelTag","renderProps","$invalidFeedback","invalidFeedbackContent","invalidFeedbackId","$validFeedback","validFeedbackContent","validFeedbackId","$description","descriptionContent","descriptionId","ariaDescribedby","contentBlocks","$content","rowProps","onInput","onBlur","focus","blur","isHighlighted","isRange","isColor","selectSizeNumber","computedSelectSize","CODE_DOWN","CODE_END","CODE_HOME","CODE_PAGEDOWN","CODE_PAGEUP","CODE_UP","defaultValues","KEY_CODES","computedSpinClasses","$_autoDelayTimer","$_autoRepeatTimer","$_keyIsDown","stepNumber","computedStep","minNumber","computedMin","maxNumber","computedMax","step","repeatDelayNumber","computedDelay","repeatIntervalNumber","computedInterval","repeatThresholdNumber","computedThreshold","repeatStepMultiplierNumber","computedStepMultiplier","computedPrecision","computedMultiplier","valueAsFixed","globalLocale","computedLocale","locales","defaultFormatter","computedFormatter","stepValue","multiplier","wrap","stepUp","stepDown","stopEvent","code","altKey","ctrlKey","metaKey","resetTimers","handleStepRepeat","stepper","isMouseEvent","count","onMouseup","setMouseup","buttons","incrementSvgAttrs","decrementSvgAttrs","sharedButtonAttrs","sharedSvgAttrs","incrementAttrs","decrementAttrs","tagText","taglabelId","limitNumber","_inputId","tags","inputValue","shouldRemoveOnDelete","lastRemovedTag","validTags","invalidTags","duplicateTags","isDuplicate","isInvalid","isLimitReached","disableAddButton","slotAttrs","addTag","removeTag","onFocusin","onFocus","separator","separatorRegExp","newTags","newTag","tagIndex","computedStyles","hasAppend","hasPrepend","horizontal","tagComputed","isAction","localAttrs","pluckModalItem","payload","submitted","dropdown","computedRole","containerClass","setTheme","BColorMode","getTargets","modifiers","targetIds","targetId","checkVisibility","visible","handleUpdate","vBToggle","BScrollspy","BTooltip","onClick","greaterOrEqualToBreakpoint","smallerOrEqualToBreakpoint","isOpenByBreakpoint","wasClosedByBreakpointChange","showBackdrop","headerCloseClasses","transitionProps","OnBeforeEnter","OnAfterEnter","OnAfterLeave","positionStyles","computedAriaBusy","spinnerAttrs","overlayStyles","overlayClasses","blurClasses","blurStyles","spinWrapperStyles","DEFAULT_PER_PAGE","DEFAULT_TOTAL_ROWS","perPageNumber","totalRowsNumber","modelValueNumber","perPageSanitized","totalRowsSanitized","numberOfPages","computedFill","justifyAlign","isActivePage","pageNumber","num","checkDisabled","firstDisabled","prevDisabled","lastDisabled","nextDisabled","getBaseButtonProps","page","classVal","dis","slotName","textValue","role","pageClick","getButtonProps","getPageButtonProps","firstButtonProps","prevButtonProps","nextButtonProps","lastButtonProps","ellipsisProps","pagination","clickEvent","calculatedValue","pages","limit","firstPage","lastPage","hideEllipsis","hideFirstButton","hideLastButton","showFirstButton","showLastButton","halfLimit","widthString","colsString","defaultAttrs","footerComponent","BPlaceholder","BPlaceholderButton","defaultStickyHeaderHeight","computedTableAttrs","computedSticky","stickyIsValid","isResponsive","responsiveStyles","responsiveClasses","columnsToNumber","rowsToNumber","computedHeaderColumns","computedFooterColumns","headerColumnsNumber","footerColumnsNumber","columnsNumber","rowsNumber","computedHeaderColumnsLength","computedFooterColumnsLength","rowColsClasses","isTableItem","isTableField","generateDetailsItem","detailsMap","detailsItem","computedTableClasses","computedFields","firstItem","computedFieldsTotal","showComputedHeaders","itemAttributes","callThAttr","headerClicked","isFooter","toggleRowDetails","tr","prevValue","getFieldColumnClasses","getFieldRowClasses","callTbodyTrAttrs","getRowClasses","sortByModel","busyModel","selectedItemsModel","selectedItemsToSet","selectedItemsSetUtilities","pkey","selectedKey","itemKey","selected","internalItems","currentPageNumber","isFilterableTable","usesProvider","isSelecting","isSortable","sb","sortValue","tableClasses","getBusyRowClasses","computedItems","sortItems","sortByItems","sortOption","realVal","ob","sortField","aValue","bValue","comparison","filterItems","filterField","mappedItems","newItem","computedDisplayItems","handleRowSelection","row","shiftClicked","ctrlClicked","metaClicked","lastSelectedItem","lastSelectedIndex","selectStartIndex","selectEndIndex","onRowClick","handleFieldSorting","fieldSortable","resolveOrder","originalValue","updatedValue","handleMultiSort","order","handleSingleSort","onFieldHeadClick","callItemsProvider","response","providerPropsWatch","oldVal","inNoProvider","noProvideWhenPaging","noProvideWhenFiltering","noProvideWhenSorting","oldFilter","unselectableItems","activeModel","computedButtonId","lazyRenderCompleted","tab","onUnmounted","computedLazy","computedLazyOnce","computedActive","showSlot","shown","activeId","ReusableEmptyTab","tabsInternal","tabs","_tab","showEmpty","navTabsClasses","activateTab","tabEvent","handleClick","minIdx","maxIdx","registerTab","unregisterTab","findActive","pluckToastItem","computedProps","interactive","noninteractive","rest","popover","bvKey","sliceName","createBootstrap","pluginData","BootstrapVueNextResolver","aliases","directives","components","selectedComponents","compImports","selectedDirectives","dirImports"],"mappings":"6bAGA,MAAAA,GAAgBC,GACdC,EAAAA,SAAS,IAAM,CACP,MAAAC,EAAQC,UAAQH,CAAK,EAC3B,OAAQE,EAAa,mBAAmBA,CAAK,GAA7B,EAClB,CAAC,ECJHE,GAAe,CACbC,EACAC,IAEAL,EAAAA,SAAS,IAAM,CACP,MAAAM,EAAsBJ,UAAQE,CAAW,EACzCG,EAAgBL,UAAQG,CAAK,EAa5B,OAVLC,IAAwB,GACpB,OACA,OAAOA,GAAwB,SAC7BA,EACAC,IAAkB,GAChB,OACAD,IAAwB,GACtB,QACA,MAGd,CAAC,EClBH,MAAqBE,EAAQ,CA6B3B,YACEC,EACAC,EAAkE,GAClE,CA/BOC,GAAA,kBAAsB,IACtBA,GAAA,mBAA6B,MAC9BA,GAAA,yBAAoB,IACnBA,GAAA,iBAAoB,IACpBA,GAAA,mBAA6B,MAC9BA,GAAA,wBACCA,GAAA,qBAAoC,MACpCA,GAAA,cAA6B,MAyBpC,GAAI,CAACF,EACH,MAAM,IAAI,UACR,wBAAwB,KAAK,YAAY,IAAI,2BAA2B,UAAU,MAAM,SAAA,EAM5F,OAAO,OAAO,KAAMD,GAAQ,SAAUE,EAAW,CAAC,UAAAD,EAAU,EAEvD,KAAA,gBAAkB,UAA2B,CAC5C,KAAK,aACP,KAAK,iBAAmB,GAC1B,CAEJ,CArCA,IAAW,kBAAmB,CAC5B,OAAO,KAAK,iBACd,CACA,IAAc,iBAAiBG,EAAM,CACnC,KAAK,kBAAoBA,CAC3B,CAIA,IAAW,gBAAiB,CAC1B,OAAO,KAAK,eACd,CAGA,IAAc,eAAeC,EAAoB,CAC/C,KAAK,gBAAkBA,CACzB,CAuBA,WAAW,UAAW,CACb,MAAA,CACL,WAAY,GACZ,YAAa,KACb,UAAW,GACX,YAAa,KACb,cAAe,KACf,OAAQ,IAAA,CAEZ,CACF,CC/DA,MAAqBC,WAA2BN,EAAQ,CAGtD,YACEC,EACAC,EAA6E,GAC7E,CACA,MAAMD,EAAWC,CAAS,EANnBC,GAAA,eAAyB,MAUhC,OAAO,OAAO,KAAMH,GAAQ,SAAUE,EAAW,CAAC,UAAAD,EAAU,CAC9D,CAEA,WAAW,UAAW,CACb,MAAA,CACL,GAAG,MAAM,SACT,QAAS,IAAA,CAEb,CACF,CCpBA,MAAqBM,WAAwBP,EAAQ,CAKnD,YACEC,EACAC,EAKA,CACA,MAAMD,EAAWC,CAAS,EAZnBC,GAAA,aACAA,GAAA,WACAA,GAAA,kBAWP,OAAO,OAAO,KAAMH,GAAQ,SAAUE,EAAW,CAAC,UAAAD,EAAU,EAC5D,KAAM,CAAC,KAAAO,EAAM,UAAAC,EAAW,GAAAC,CAAA,EAAMR,EAC9B,KAAK,KAAOM,EACZ,KAAK,GAAKE,EACV,KAAK,UAAYD,CACnB,CAEA,WAAW,UAAW,CACb,MAAA,CACL,GAAG,MAAM,QAAA,CAEb,CACF,CCvBO,MAAME,GAAe,CAC1BC,EACAC,EAAkC,KACtB,CACZ,MAAMC,EAAmB,CAACC,EAAmC,KAAuB,CAC5E,KAAA,CAAC,cAAAC,CAAiB,EAAA,SACjB,OAAAA,GAAiB,CAACD,EAAS,KAAMH,GAAOA,IAAOI,CAAa,EAAIA,EAAgB,IAAA,EAGnFC,EAAmBL,GAAuCA,IAAOE,EAAiB,EAEpF,GAAA,CACFF,EAAG,MAAMC,CAAO,QACTK,EAAG,CAEV,QAAQ,MAAMA,CAAC,CACjB,CACA,OAAOD,EAAgBL,CAAE,CAC3B,EAEaO,GAAeP,KAAmCA,GAAA,YAAAA,MAAU,IAAI,SAAW,EAK3EQ,GAAaR,GAAmC,CAM3D,GAAIA,EAAG,aAAa,SAAS,IAAM,OAE1B,MAAA,GAKH,MAAAS,EAAMT,EAAG,wBACf,MAAO,CAAC,EAAES,GAAOA,EAAI,OAAS,GAAKA,EAAI,MAAQ,EACjD,EAEaC,GAAsBC,GAAmC,CAC9D,MAAAC,EAAQ,OAAO,iBAAiBD,CAAO,EAEvCE,EAAkBD,EAAM,gBAAgB,MAAM,GAAG,EAAE,CAAC,GAAK,GACzDE,EAAqBF,EAAM,mBAAmB,MAAM,GAAG,EAAE,CAAC,GAAK,GAC/DG,EAAoB,OAAOF,EAAgB,MAAM,EAAG,EAAE,CAAC,EAAI,IAC3DG,EAAuB,OAAOF,EAAmB,MAAM,EAAG,EAAE,CAAC,EAAI,IACvE,OAAOC,EAAoBC,CAC7B,ECpDaC,GACX,OAAO,OAAW,KAClB,OAAO,SAAa,KACpB,OAAO,UAAc,IAOVC,GACXjB,IAEmC,IAAM,CACvC,IAAIkB,EAAwB,GAC5B,GAAIF,GACE,GAAA,CACF,MAAMhB,EAAU,CAGd,IAAI,SAAU,CACYkB,EAAA,EAG1B,CAAA,EAIK,OAAA,iBAAiB,OAAQlB,EAASA,CAAO,EAGzC,OAAA,oBAAoB,OAAQA,EAASA,CAAO,CAAA,MAC7C,CACkBkB,EAAA,EAC1B,CAEK,OAAAA,CAAA,KAIA,OAAOlB,GAAY,SAAWA,EAAU,CAAC,QAAS,CAAC,CAACA,GAAW,IAGjE,OAAOA,GAAY,SAAWA,EAAQ,QAAUA,EAO5CmB,GAAU,CACrBpB,EACAqB,EACAC,EACArB,IACG,CACCD,GAAMA,EAAG,kBACXA,EAAG,iBAAiBqB,EAAWC,EAASJ,GAAkBjB,CAAO,CAAC,CAEtE,EAMasB,GAAW,CACtBvB,EACAqB,EACAC,EACArB,IACG,CACCD,GAAMA,EAAG,qBACRA,EAAA,oBAAoBqB,EAAWC,EAASrB,CAAO,CAEtD,EAOauB,GAAa,CAACC,EAAaC,IAA6C,EACpED,EAAKL,GAAUG,IACvB,GAAGG,CAAW,CACvB,ECvFMC,GAAkB,CAAC,KAAM,KAAM,IAAI,EAInCC,GAAc,CAClB,IACA,MACA,SACA,WACA,uCACA,wCACA,0CACA,gBACA,kBACA,kBACA,oBACA,2CACF,EAAE,KAAK,GAAG,EAIKC,GAACC,GAA2B,CAEzC,GAAI,CAACA,GAAS,CAACA,EAAM,OACZ,MAAA,GAET,MAAM9B,EAAK8B,EAAM,OAEZ,GAAA,aAAc9B,GAAMA,EAAG,UAAa2B,GAAgB,QAAQ3B,EAAG,OAAO,IAAM,GACxE,MAAA,GAGL,GAAAA,EAAG,QAAQ,gBAAgB,EAAU,MAAA,GAEzC,MAAM+B,EAAQ/B,EAAG,UAAY,QAAUA,EAAKA,EAAG,QAAQ,OAAO,EAI9D,GAAI+B,EAAO,CACH,MAAAC,EAAWD,EAAM,aAAa,KAAK,EACnCE,EAAQD,EACV,SAAS,eAAeA,CAAQ,EAChCD,EAAM,cAAc,yBAAyB,EAC7C,GAAAE,GAAS,CAAEA,EAA2B,SACjC,MAAA,EAEX,CAIO,OAAAjC,EAAG,QAAQ4B,EAAW,CAC/B,EC9CMM,GAAQ,CAAC,MAAO,QAAS,SAAU,MAAM,EACzCC,GAAa,CAAC,QAAS,KAAK,EAC5BC,GAA0BF,GAAM,OAAO,CAACG,EAAKC,IAASD,EAAI,OAAOC,EAAMA,EAAO,IAAMH,GAAW,CAAC,EAAGG,EAAO,IAAMH,GAAW,CAAC,CAAC,EAAG,CAAA,CAAE,EAClII,GAAM,KAAK,IACXC,GAAM,KAAK,IAOXC,GAAkB,CACtB,KAAM,QACN,MAAO,OACP,OAAQ,MACR,IAAK,QACP,EACMC,GAAuB,CAC3B,MAAO,MACP,IAAK,OACP,EACA,SAASC,GAAMC,EAAO/D,EAAOgE,EAAK,CAChC,OAAOL,GAAII,EAAOL,GAAI1D,EAAOgE,CAAG,CAAC,CACnC,CACA,SAASC,GAASjE,EAAOkE,EAAO,CAC9B,OAAO,OAAOlE,GAAU,WAAaA,EAAMkE,CAAK,EAAIlE,CACtD,CACA,SAASmE,GAAQC,EAAW,CAC1B,OAAOA,EAAU,MAAM,GAAG,EAAE,CAAC,CAC/B,CACA,SAASC,GAAaD,EAAW,CAC/B,OAAOA,EAAU,MAAM,GAAG,EAAE,CAAC,CAC/B,CACA,SAASE,GAAgBC,EAAM,CAC7B,OAAOA,IAAS,IAAM,IAAM,GAC9B,CACA,SAASC,GAAcD,EAAM,CAC3B,OAAOA,IAAS,IAAM,SAAW,OACnC,CACA,SAASE,GAAYL,EAAW,CAC9B,MAAO,CAAC,MAAO,QAAQ,EAAE,SAASD,GAAQC,CAAS,CAAC,EAAI,IAAM,GAChE,CACA,SAASM,GAAiBN,EAAW,CACnC,OAAOE,GAAgBG,GAAYL,CAAS,CAAC,CAC/C,CACA,SAASO,GAAkBP,EAAWQ,EAAOC,EAAK,CAC5CA,IAAQ,SACVA,EAAM,IAER,MAAMC,EAAYT,GAAaD,CAAS,EAClCW,EAAgBL,GAAiBN,CAAS,EAC1CY,EAASR,GAAcO,CAAa,EAC1C,IAAIE,EAAoBF,IAAkB,IAAMD,KAAeD,EAAM,MAAQ,SAAW,QAAU,OAASC,IAAc,QAAU,SAAW,MAC9I,OAAIF,EAAM,UAAUI,CAAM,EAAIJ,EAAM,SAASI,CAAM,IACjDC,EAAoBC,GAAqBD,CAAiB,GAErD,CAACA,EAAmBC,GAAqBD,CAAiB,CAAC,CACpE,CACA,SAASE,GAAsBf,EAAW,CACxC,MAAMgB,EAAoBF,GAAqBd,CAAS,EACxD,MAAO,CAACiB,GAA8BjB,CAAS,EAAGgB,EAAmBC,GAA8BD,CAAiB,CAAC,CACvH,CACA,SAASC,GAA8BjB,EAAW,CAChD,OAAOA,EAAU,QAAQ,aAAcU,GAAajB,GAAqBiB,CAAS,CAAC,CACrF,CACA,SAASQ,GAAY7B,EAAM8B,EAASV,EAAK,CACvC,MAAMW,EAAK,CAAC,OAAQ,OAAO,EACrBC,EAAK,CAAC,QAAS,MAAM,EACrBC,EAAK,CAAC,MAAO,QAAQ,EACrBC,EAAK,CAAC,SAAU,KAAK,EAC3B,OAAQlC,EAAI,CACV,IAAK,MACL,IAAK,SACH,OAAIoB,EAAYU,EAAUE,EAAKD,EACxBD,EAAUC,EAAKC,EACxB,IAAK,OACL,IAAK,QACH,OAAOF,EAAUG,EAAKC,EACxB,QACE,MAAO,EACV,CACH,CACA,SAASC,GAA0BxB,EAAWyB,EAAe7E,EAAW6D,EAAK,CAC3E,MAAMC,EAAYT,GAAaD,CAAS,EACxC,IAAI0B,EAAOR,GAAYnB,GAAQC,CAAS,EAAGpD,IAAc,QAAS6D,CAAG,EACrE,OAAIC,IACFgB,EAAOA,EAAK,IAAIrC,GAAQA,EAAO,IAAMqB,CAAS,EAC1Ce,IACFC,EAAOA,EAAK,OAAOA,EAAK,IAAIT,EAA6B,CAAC,IAGvDS,CACT,CACA,SAASZ,GAAqBd,EAAW,CACvC,OAAOA,EAAU,QAAQ,yBAA0BX,GAAQG,GAAgBH,CAAI,CAAC,CAClF,CACA,SAASsC,GAAoBC,EAAS,CACpC,MAAO,CACL,IAAK,EACL,MAAO,EACP,OAAQ,EACR,KAAM,EACN,GAAGA,CACP,CACA,CACA,SAASC,GAAiBD,EAAS,CACjC,OAAO,OAAOA,GAAY,SAAWD,GAAoBC,CAAO,EAAI,CAClE,IAAKA,EACL,MAAOA,EACP,OAAQA,EACR,KAAMA,CACV,CACA,CACA,SAASE,GAAiBC,EAAM,CAC9B,MAAO,CACL,GAAGA,EACH,IAAKA,EAAK,EACV,KAAMA,EAAK,EACX,MAAOA,EAAK,EAAIA,EAAK,MACrB,OAAQA,EAAK,EAAIA,EAAK,MAC1B,CACA,CC3HA,SAASC,GAA2BC,EAAMjC,EAAWS,EAAK,CACxD,GAAI,CACF,UAAAyB,EACA,SAAAC,CACD,EAAGF,EACJ,MAAMG,EAAW/B,GAAYL,CAAS,EAChCW,EAAgBL,GAAiBN,CAAS,EAC1CqC,EAAcjC,GAAcO,CAAa,EACzCtB,EAAOU,GAAQC,CAAS,EACxBsC,EAAaF,IAAa,IAC1BG,EAAUL,EAAU,EAAIA,EAAU,MAAQ,EAAIC,EAAS,MAAQ,EAC/DK,EAAUN,EAAU,EAAIA,EAAU,OAAS,EAAIC,EAAS,OAAS,EACjEM,EAAcP,EAAUG,CAAW,EAAI,EAAIF,EAASE,CAAW,EAAI,EACzE,IAAIK,EACJ,OAAQrD,EAAI,CACV,IAAK,MACHqD,EAAS,CACP,EAAGH,EACH,EAAGL,EAAU,EAAIC,EAAS,MAClC,EACM,MACF,IAAK,SACHO,EAAS,CACP,EAAGH,EACH,EAAGL,EAAU,EAAIA,EAAU,MACnC,EACM,MACF,IAAK,QACHQ,EAAS,CACP,EAAGR,EAAU,EAAIA,EAAU,MAC3B,EAAGM,CACX,EACM,MACF,IAAK,OACHE,EAAS,CACP,EAAGR,EAAU,EAAIC,EAAS,MAC1B,EAAGK,CACX,EACM,MACF,QACEE,EAAS,CACP,EAAGR,EAAU,EACb,EAAGA,EAAU,CACrB,CACG,CACD,OAAQjC,GAAaD,CAAS,EAAC,CAC7B,IAAK,QACH0C,EAAO/B,CAAa,GAAK8B,GAAehC,GAAO6B,EAAa,GAAK,GACjE,MACF,IAAK,MACHI,EAAO/B,CAAa,GAAK8B,GAAehC,GAAO6B,EAAa,GAAK,GACjE,KACH,CACD,OAAOI,CACT,CASA,MAAMC,GAAkB,MAAOT,EAAWC,EAAUS,IAAW,CAC7D,KAAM,CACJ,UAAA5C,EAAY,SACZ,SAAA6C,EAAW,WACX,WAAAC,EAAa,CAAE,EACf,SAAAC,CACD,EAAGH,EACEI,EAAkBF,EAAW,OAAO,OAAO,EAC3CrC,EAAM,MAAOsC,EAAS,OAAS,KAAO,OAASA,EAAS,MAAMZ,CAAQ,GAC5E,IAAI3B,EAAQ,MAAMuC,EAAS,gBAAgB,CACzC,UAAAb,EACA,SAAAC,EACA,SAAAU,CACJ,CAAG,EACG,CACF,EAAAI,EACA,EAAAC,CACD,EAAGlB,GAA2BxB,EAAOR,EAAWS,CAAG,EAChD0C,EAAoBnD,EACpBoD,EAAiB,CAAA,EACjBC,EAAa,EACjB,QAASC,EAAI,EAAGA,EAAIN,EAAgB,OAAQM,IAAK,CAC/C,KAAM,CACJ,KAAAC,EACA,GAAAC,CACN,EAAQR,EAAgBM,CAAC,EACf,CACJ,EAAGG,EACH,EAAGC,EACH,KAAAC,EACA,MAAAC,CACD,EAAG,MAAMJ,EAAG,CACX,EAAAP,EACA,EAAAC,EACA,iBAAkBlD,EAClB,UAAWmD,EACX,SAAAN,EACA,eAAAO,EACA,MAAA5C,EACA,SAAAuC,EACA,SAAU,CACR,UAAAb,EACA,SAAAC,CACD,CACP,CAAK,EACDc,EAAIQ,GAAwBR,EAC5BC,EAAIQ,GAAwBR,EAC5BE,EAAiB,CACf,GAAGA,EACH,CAACG,CAAI,EAAG,CACN,GAAGH,EAAeG,CAAI,EACtB,GAAGI,CACJ,CACP,EACQC,GAASP,GAAc,KACzBA,IACI,OAAOO,GAAU,WACfA,EAAM,YACRT,EAAoBS,EAAM,WAExBA,EAAM,QACRpD,EAAQoD,EAAM,QAAU,GAAO,MAAMb,EAAS,gBAAgB,CAC5D,UAAAb,EACA,SAAAC,EACA,SAAAU,CACZ,CAAW,EAAIe,EAAM,OAEZ,CACC,EAAAX,EACA,EAAAC,CACD,EAAGlB,GAA2BxB,EAAO2C,EAAmB1C,CAAG,GAE9D6C,EAAI,GAEP,CACD,MAAO,CACL,EAAAL,EACA,EAAAC,EACA,UAAWC,EACX,SAAAN,EACA,eAAAO,CACJ,CACA,EAUA,eAAeS,GAAe7H,EAAOgB,EAAS,CAC5C,IAAI8G,EACA9G,IAAY,SACdA,EAAU,CAAA,GAEZ,KAAM,CACJ,EAAAiG,EACA,EAAAC,EACA,SAAAH,EACA,MAAAvC,EACA,SAAAuD,EACA,SAAAlB,CACD,EAAG7G,EACE,CACJ,SAAAgI,EAAW,oBACX,aAAAC,EAAe,WACf,eAAAC,EAAiB,WACjB,YAAAC,EAAc,GACd,QAAAvC,EAAU,CACd,EAAM/B,GAAS7C,EAAShB,CAAK,EACrBoI,EAAgBvC,GAAiBD,CAAO,EAExClE,EAAUqG,EAASI,EADND,IAAmB,WAAa,YAAc,WACbA,CAAc,EAC5DG,EAAqBvC,GAAiB,MAAMiB,EAAS,gBAAgB,CACzE,SAAWe,EAAwB,MAAOf,EAAS,WAAa,KAAO,OAASA,EAAS,UAAUrF,CAAO,KAAO,MAAOoG,EAAgCpG,EAAUA,EAAQ,gBAAmB,MAAOqF,EAAS,oBAAsB,KAAO,OAASA,EAAS,mBAAmBgB,EAAS,QAAQ,GAChS,SAAAC,EACA,aAAAC,EACA,SAAApB,CACD,CAAA,CAAC,EACId,EAAOmC,IAAmB,WAAa,CAC3C,EAAAjB,EACA,EAAAC,EACA,MAAO1C,EAAM,SAAS,MACtB,OAAQA,EAAM,SAAS,MAC3B,EAAMA,EAAM,UACJ8D,EAAe,MAAOvB,EAAS,iBAAmB,KAAO,OAASA,EAAS,gBAAgBgB,EAAS,QAAQ,GAC5GQ,EAAe,MAAOxB,EAAS,WAAa,KAAO,OAASA,EAAS,UAAUuB,CAAY,GAAO,MAAOvB,EAAS,UAAY,KAAO,OAASA,EAAS,SAASuB,CAAY,IAAO,CACvL,EAAG,EACH,EAAG,CACP,EAAM,CACF,EAAG,EACH,EAAG,CACP,EACQE,EAAoB1C,GAAiBiB,EAAS,sDAAwD,MAAMA,EAAS,sDAAsD,CAC/K,SAAAgB,EACA,KAAAhC,EACA,aAAAuC,EACA,SAAAzB,CACJ,CAAG,EAAId,CAAI,EACT,MAAO,CACL,KAAMsC,EAAmB,IAAMG,EAAkB,IAAMJ,EAAc,KAAOG,EAAY,EACxF,QAASC,EAAkB,OAASH,EAAmB,OAASD,EAAc,QAAUG,EAAY,EACpG,MAAOF,EAAmB,KAAOG,EAAkB,KAAOJ,EAAc,MAAQG,EAAY,EAC5F,OAAQC,EAAkB,MAAQH,EAAmB,MAAQD,EAAc,OAASG,EAAY,CACpG,CACA,CAOA,MAAME,GAAQzH,IAAY,CACxB,KAAM,QACN,QAAAA,EACA,MAAM,GAAGhB,EAAO,CACd,KAAM,CACJ,EAAAiH,EACA,EAAAC,EACA,UAAAlD,EACA,MAAAQ,EACA,SAAAuC,EACA,SAAAgB,EACA,eAAAX,CACD,EAAGpH,EAEE,CACJ,QAAA0B,EACA,QAAAkE,EAAU,CACX,EAAG/B,GAAS7C,EAAShB,CAAK,GAAK,CAAA,EAChC,GAAI0B,GAAW,KACb,MAAO,GAET,MAAM0G,EAAgBvC,GAAiBD,CAAO,EACxCc,EAAS,CACb,EAAAO,EACA,EAAAC,CACN,EACU/C,EAAOG,GAAiBN,CAAS,EACjCY,EAASR,GAAcD,CAAI,EAC3BuE,EAAkB,MAAM3B,EAAS,cAAcrF,CAAO,EACtDiH,EAAUxE,IAAS,IACnByE,EAAUD,EAAU,MAAQ,OAC5BE,EAAUF,EAAU,SAAW,QAC/BG,EAAaH,EAAU,eAAiB,cACxCI,EAAUvE,EAAM,UAAUI,CAAM,EAAIJ,EAAM,UAAUL,CAAI,EAAIuC,EAAOvC,CAAI,EAAIK,EAAM,SAASI,CAAM,EAChGoE,EAAYtC,EAAOvC,CAAI,EAAIK,EAAM,UAAUL,CAAI,EAC/C8E,EAAoB,MAAOlC,EAAS,iBAAmB,KAAO,OAASA,EAAS,gBAAgBrF,CAAO,GAC7G,IAAIwH,EAAaD,EAAoBA,EAAkBH,CAAU,EAAI,GAGjE,CAACI,GAAc,CAAE,MAAOnC,EAAS,WAAa,KAAO,OAASA,EAAS,UAAUkC,CAAiB,MACpGC,EAAanB,EAAS,SAASe,CAAU,GAAKtE,EAAM,SAASI,CAAM,GAErE,MAAMuE,EAAoBJ,EAAU,EAAIC,EAAY,EAI9CI,EAAyBF,EAAa,EAAIR,EAAgB9D,CAAM,EAAI,EAAI,EACxEyE,EAAa/F,GAAI8E,EAAcQ,CAAO,EAAGQ,CAAsB,EAC/DE,EAAahG,GAAI8E,EAAcS,CAAO,EAAGO,CAAsB,EAI/DG,EAAQF,EACR9F,EAAM2F,EAAaR,EAAgB9D,CAAM,EAAI0E,EAC7CE,EAASN,EAAa,EAAIR,EAAgB9D,CAAM,EAAI,EAAIuE,EACxDM,EAAS/F,GAAM6F,EAAOC,EAAQjG,CAAG,EAMjCmG,EAAkB,CAACtC,EAAe,OAASnD,GAAaD,CAAS,GAAK,MAAQwF,IAAWC,GAAUjF,EAAM,UAAUI,CAAM,EAAI,GAAK4E,EAASD,EAAQF,EAAaC,GAAcZ,EAAgB9D,CAAM,EAAI,EAAI,EAC5M+E,EAAkBD,EAAkBF,EAASD,EAAQC,EAASD,EAAQC,EAASjG,EAAM,EAC3F,MAAO,CACL,CAACY,CAAI,EAAGuC,EAAOvC,CAAI,EAAIwF,EACvB,KAAM,CACJ,CAACxF,CAAI,EAAGsF,EACR,aAAcD,EAASC,EAASE,EAChC,GAAID,GAAmB,CACrB,gBAAAC,CACD,CACF,EACD,MAAOD,CACb,CACG,CACH,GAEA,SAASE,GAAiBlF,EAAWmF,EAAeC,EAAmB,CAErE,OAD2CpF,EAAY,CAAC,GAAGoF,EAAkB,OAAO9F,GAAaC,GAAaD,CAAS,IAAMU,CAAS,EAAG,GAAGoF,EAAkB,OAAO9F,GAAaC,GAAaD,CAAS,IAAMU,CAAS,CAAC,EAAIoF,EAAkB,OAAO9F,GAAaD,GAAQC,CAAS,IAAMA,CAAS,GACxP,OAAOA,GAC3CU,EACKT,GAAaD,CAAS,IAAMU,IAAcmF,EAAgB5E,GAA8BjB,CAAS,IAAMA,EAAY,IAErH,EACR,CACH,CAOA,MAAM+F,GAAgB,SAAU/I,EAAS,CACvC,OAAIA,IAAY,SACdA,EAAU,CAAA,GAEL,CACL,KAAM,gBACN,QAAAA,EACA,MAAM,GAAGhB,EAAO,CACd,IAAIgK,EAAuBC,EAAwBC,EACnD,KAAM,CACJ,MAAA1F,EACA,eAAA4C,EACA,UAAApD,EACA,SAAA+C,EACA,SAAAgB,CACD,EAAG/H,EACE,CACJ,UAAAmK,EAAY,GACZ,UAAAzF,EACA,kBAAAoF,EAAoB3G,GACpB,cAAA0G,EAAgB,GAChB,GAAGO,CACX,EAAUvG,GAAS7C,EAAShB,CAAK,EACrBqK,EAAe3F,IAAc,QAAaoF,IAAsB3G,GAAayG,GAAiBlF,GAAa,KAAMmF,EAAeC,CAAiB,EAAIA,EACrJQ,EAAW,MAAMzC,GAAe7H,EAAOoK,CAAqB,EAC5DG,IAAiBP,EAAwB5C,EAAe,gBAAkB,KAAO,OAAS4C,EAAsB,QAAU,EAC1HQ,EAAmBH,EAAaE,CAAY,EAClD,GAAIC,GAAoB,KACtB,MAAO,GAET,MAAMC,EAAiBlG,GAAkBiG,EAAkBhG,EAAO,MAAOuC,EAAS,OAAS,KAAO,OAASA,EAAS,MAAMgB,EAAS,QAAQ,EAAE,EAG7I,GAAI/D,IAAcwG,EAChB,MAAO,CACL,MAAO,CACL,UAAWH,EAAa,CAAC,CAC1B,CACX,EAEM,MAAMK,EAAmB,CAACJ,EAASvG,GAAQyG,CAAgB,CAAC,EAAGF,EAASG,EAAe,CAAC,CAAC,EAAGH,EAASG,EAAe,CAAC,CAAC,CAAC,EACjHE,EAAe,CAAC,KAAMV,EAAyB7C,EAAe,gBAAkB,KAAO,OAAS6C,EAAuB,YAAc,CAAA,EAAK,CAC9I,UAAWO,EACX,UAAWE,CACnB,CAAO,EACKE,EAAgBP,EAAaE,EAAe,CAAC,EAGnD,GAAIK,EACF,MAAO,CACL,KAAM,CACJ,MAAOL,EAAe,EACtB,UAAWI,CACZ,EACD,MAAO,CACL,UAAWC,CACZ,CACX,EAEM,MAAMC,EAA8BF,EAAa,IAAIG,GAAK,CACxD,MAAMpG,EAAYT,GAAa6G,EAAE,SAAS,EAC1C,MAAO,CAACA,EAAE,UAAWpG,GAAayF,EAElCW,EAAE,UAAU,MAAM,EAAG,CAAC,EAAE,OAAO,CAAC1H,EAAK2H,IAAM3H,EAAM2H,EAAG,CAAC,EAErDD,EAAE,UAAU,CAAC,EAAGA,EAAE,SAAS,CACnC,CAAO,EAAE,KAAK,CAACE,EAAGC,IAAMD,EAAE,CAAC,EAAIC,EAAE,CAAC,CAAC,EAKvBC,IAAmBhB,EAJWW,EAA4B,OAAOC,GAAKA,EAAE,CAAC,EAAE,MAAM,EAGvF7G,GAAa6G,EAAE,CAAC,CAAC,EAAI,EAAI,CAAC,EAAE,MAAMC,GAAKA,GAAK,CAAC,CAAC,EAC+B,CAAC,IAAM,KAAO,OAASb,EAAsB,CAAC,IAAMW,EAA4B,CAAC,EAAE,CAAC,EACjK,OAAIK,IAAmBlH,EACd,CACL,KAAM,CACJ,MAAOuG,EAAe,EACtB,UAAWI,CACZ,EACD,MAAO,CACL,UAAWO,CACZ,CACX,EAEa,EACR,CACL,CACA,EAQMC,GAAO,SAAUnK,EAAS,CAC9B,OAAIA,IAAY,SACdA,EAAU,CAAA,GAEL,CACL,KAAM,OACN,QAAAA,EACA,MAAM,GAAGhB,EAAO,CACd,IAAIoL,EAAuBC,EAC3B,KAAM,CACJ,UAAArH,EACA,eAAAoD,EACA,MAAA5C,EACA,iBAAA8G,EACA,SAAAvE,EACA,SAAAgB,CACD,EAAG/H,EACE,CACJ,SAAUuL,EAAgB,GAC1B,UAAWC,EAAiB,GAC5B,mBAAoBC,EACpB,iBAAAC,EAAmB,UACnB,0BAAAC,EAA4B,OAC5B,cAAAlG,EAAgB,GAChB,GAAG2E,CACX,EAAUvG,GAAS7C,EAAShB,CAAK,EAM3B,IAAKoL,EAAwBhE,EAAe,QAAU,MAAQgE,EAAsB,gBAClF,MAAO,GAET,MAAM/H,EAAOU,GAAQC,CAAS,EACxB4H,EAAkB7H,GAAQuH,CAAgB,IAAMA,EAChD7G,EAAM,MAAOsC,EAAS,OAAS,KAAO,OAASA,EAAS,MAAMgB,EAAS,QAAQ,GAC/E8D,EAAqBJ,IAAgCG,GAAmB,CAACnG,EAAgB,CAACX,GAAqBwG,CAAgB,CAAC,EAAIvG,GAAsBuG,CAAgB,GAC5K,CAACG,GAA+BE,IAA8B,QAChEE,EAAmB,KAAK,GAAGrG,GAA0B8F,EAAkB7F,EAAekG,EAA2BlH,CAAG,CAAC,EAEvH,MAAMtB,EAAa,CAACmI,EAAkB,GAAGO,CAAkB,EACrDvB,EAAW,MAAMzC,GAAe7H,EAAOoK,CAAqB,EAC5D0B,EAAY,CAAA,EAClB,IAAIC,IAAkBV,EAAuBjE,EAAe,OAAS,KAAO,OAASiE,EAAqB,YAAc,CAAA,EAIxH,GAHIE,GACFO,EAAU,KAAKxB,EAASjH,CAAI,CAAC,EAE3BmI,EAAgB,CAClB,MAAMvI,EAAQsB,GAAkBP,EAAWQ,EAAOC,CAAG,EACrDqH,EAAU,KAAKxB,EAASrH,EAAM,CAAC,CAAC,EAAGqH,EAASrH,EAAM,CAAC,CAAC,CAAC,CACtD,CAOD,GANA8I,EAAgB,CAAC,GAAGA,EAAe,CACjC,UAAA/H,EACA,UAAA8H,CACR,CAAO,EAGG,CAACA,EAAU,MAAMzI,GAAQA,GAAQ,CAAC,EAAG,CACvC,IAAI2I,EAAuBC,EAC3B,MAAMC,KAAeF,EAAwB5E,EAAe,OAAS,KAAO,OAAS4E,EAAsB,QAAU,GAAK,EACpHpB,EAAgBzH,EAAW+I,CAAS,EAC1C,GAAItB,EAEF,MAAO,CACL,KAAM,CACJ,MAAOsB,EACP,UAAWH,CACZ,EACD,MAAO,CACL,UAAWnB,CACZ,CACb,EAKQ,IAAIM,GAAkBe,EAAwBF,EAAc,OAAOjB,GAAKA,EAAE,UAAU,CAAC,GAAK,CAAC,EAAE,KAAK,CAACE,EAAGC,IAAMD,EAAE,UAAU,CAAC,EAAIC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,IAAM,KAAO,OAASgB,EAAsB,UAG1L,GAAI,CAACf,EACH,OAAQQ,EAAgB,CACtB,IAAK,UACH,CACE,IAAIS,EACJ,MAAMnI,GAAamI,EAAwBJ,EAAc,IAAIjB,GAAK,CAACA,EAAE,UAAWA,EAAE,UAAU,OAAOR,GAAYA,EAAW,CAAC,EAAE,OAAO,CAAClH,EAAKkH,IAAalH,EAAMkH,EAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAACU,EAAGC,IAAMD,EAAE,CAAC,EAAIC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAM,KAAO,OAASkB,EAAsB,CAAC,EAClPnI,IACFkH,EAAiBlH,GAEnB,KACD,CACH,IAAK,mBACHkH,EAAiBI,EACjB,KACH,CAEH,GAAItH,IAAckH,EAChB,MAAO,CACL,MAAO,CACL,UAAWA,CACZ,CACb,CAEO,CACD,MAAO,EACR,CACL,CACA,EAEA,SAASkB,GAAe9B,EAAUvE,EAAM,CACtC,MAAO,CACL,IAAKuE,EAAS,IAAMvE,EAAK,OACzB,MAAOuE,EAAS,MAAQvE,EAAK,MAC7B,OAAQuE,EAAS,OAASvE,EAAK,OAC/B,KAAMuE,EAAS,KAAOvE,EAAK,KAC/B,CACA,CACA,SAASsG,GAAsB/B,EAAU,CACvC,OAAOrH,GAAM,KAAKI,GAAQiH,EAASjH,CAAI,GAAK,CAAC,CAC/C,CAMA,MAAMiJ,GAAO,SAAUtL,EAAS,CAC9B,OAAIA,IAAY,SACdA,EAAU,CAAA,GAEL,CACL,KAAM,OACN,QAAAA,EACA,MAAM,GAAGhB,EAAO,CACd,KAAM,CACJ,MAAAwE,CACD,EAAGxE,EACE,CACJ,SAAA6G,EAAW,kBACX,GAAGuD,CACX,EAAUvG,GAAS7C,EAAShB,CAAK,EAC3B,OAAQ6G,EAAQ,CACd,IAAK,kBACH,CACE,MAAMyD,EAAW,MAAMzC,GAAe7H,EAAO,CAC3C,GAAGoK,EACH,eAAgB,WAC9B,CAAa,EACKmC,EAAUH,GAAe9B,EAAU9F,EAAM,SAAS,EACxD,MAAO,CACL,KAAM,CACJ,uBAAwB+H,EACxB,gBAAiBF,GAAsBE,CAAO,CAC/C,CACf,CACW,CACH,IAAK,UACH,CACE,MAAMjC,EAAW,MAAMzC,GAAe7H,EAAO,CAC3C,GAAGoK,EACH,YAAa,EAC3B,CAAa,EACKmC,EAAUH,GAAe9B,EAAU9F,EAAM,QAAQ,EACvD,MAAO,CACL,KAAM,CACJ,eAAgB+H,EAChB,QAASF,GAAsBE,CAAO,CACvC,CACf,CACW,CACH,QAEI,MAAO,EAEZ,CACF,CACL,CACA,EAEA,SAASC,GAAgBhI,EAAO,CAC9B,MAAMiI,EAAOnJ,GAAI,GAAGkB,EAAM,IAAIuB,GAAQA,EAAK,IAAI,CAAC,EAC1C2G,EAAOpJ,GAAI,GAAGkB,EAAM,IAAIuB,GAAQA,EAAK,GAAG,CAAC,EACzC4G,EAAOpJ,GAAI,GAAGiB,EAAM,IAAIuB,GAAQA,EAAK,KAAK,CAAC,EAC3C6G,EAAOrJ,GAAI,GAAGiB,EAAM,IAAIuB,GAAQA,EAAK,MAAM,CAAC,EAClD,MAAO,CACL,EAAG0G,EACH,EAAGC,EACH,MAAOC,EAAOF,EACd,OAAQG,EAAOF,CACnB,CACA,CACA,SAASG,GAAerI,EAAO,CAC7B,MAAMsI,EAActI,EAAM,MAAK,EAAG,KAAK,CAACwG,EAAGC,IAAMD,EAAE,EAAIC,EAAE,CAAC,EACpD8B,EAAS,CAAA,EACf,IAAIC,EAAW,KACf,QAAS1F,EAAI,EAAGA,EAAIwF,EAAY,OAAQxF,IAAK,CAC3C,MAAMvB,EAAO+G,EAAYxF,CAAC,EACtB,CAAC0F,GAAYjH,EAAK,EAAIiH,EAAS,EAAIA,EAAS,OAAS,EACvDD,EAAO,KAAK,CAAChH,CAAI,CAAC,EAElBgH,EAAOA,EAAO,OAAS,CAAC,EAAE,KAAKhH,CAAI,EAErCiH,EAAWjH,CACZ,CACD,OAAOgH,EAAO,IAAIhH,GAAQD,GAAiB0G,GAAgBzG,CAAI,CAAC,CAAC,CACnE,CAMA,MAAMkH,GAAS,SAAUjM,EAAS,CAChC,OAAIA,IAAY,SACdA,EAAU,CAAA,GAEL,CACL,KAAM,SACN,QAAAA,EACA,MAAM,GAAGhB,EAAO,CACd,KAAM,CACJ,UAAAgE,EACA,SAAA+D,EACA,MAAAvD,EACA,SAAAuC,EACA,SAAAF,CACD,EAAG7G,EAIE,CACJ,QAAA4F,EAAU,EACV,EAAAqB,EACA,EAAAC,CACR,EAAUrD,GAAS7C,EAAShB,CAAK,EACrBkN,EAAoB,MAAM,KAAM,MAAOnG,EAAS,gBAAkB,KAAO,OAASA,EAAS,eAAegB,EAAS,SAAS,IAAO,CAAA,CAAE,EACrIoF,EAAcN,GAAeK,CAAiB,EAC9CE,EAAWtH,GAAiB0G,GAAgBU,CAAiB,CAAC,EAC9D9E,EAAgBvC,GAAiBD,CAAO,EAC9C,SAASyH,GAAwB,CAE/B,GAAIF,EAAY,SAAW,GAAKA,EAAY,CAAC,EAAE,KAAOA,EAAY,CAAC,EAAE,OAASlG,GAAK,MAAQC,GAAK,KAE9F,OAAOiG,EAAY,KAAKpH,GAAQkB,EAAIlB,EAAK,KAAOqC,EAAc,MAAQnB,EAAIlB,EAAK,MAAQqC,EAAc,OAASlB,EAAInB,EAAK,IAAMqC,EAAc,KAAOlB,EAAInB,EAAK,OAASqC,EAAc,MAAM,GAAKgF,EAI/L,GAAID,EAAY,QAAU,EAAG,CAC3B,GAAI9I,GAAYL,CAAS,IAAM,IAAK,CAClC,MAAMsJ,EAAYH,EAAY,CAAC,EACzBI,EAAWJ,EAAYA,EAAY,OAAS,CAAC,EAC7CK,EAAQzJ,GAAQC,CAAS,IAAM,MAC/ByJ,EAAMH,EAAU,IAChBI,EAASH,EAAS,OAClBI,EAAOH,EAAQF,EAAU,KAAOC,EAAS,KACzCK,EAAQJ,EAAQF,EAAU,MAAQC,EAAS,MAC3CM,EAAQD,EAAQD,EAChBG,EAASJ,EAASD,EACxB,MAAO,CACL,IAAAA,EACA,OAAAC,EACA,KAAAC,EACA,MAAAC,EACA,MAAAC,EACA,OAAAC,EACA,EAAGH,EACH,EAAGF,CACjB,CACW,CACD,MAAMM,EAAahK,GAAQC,CAAS,IAAM,OACpCgK,EAAWzK,GAAI,GAAG4J,EAAY,IAAIpH,GAAQA,EAAK,KAAK,CAAC,EACrDkI,EAAU3K,GAAI,GAAG6J,EAAY,IAAIpH,GAAQA,EAAK,IAAI,CAAC,EACnDmI,EAAef,EAAY,OAAOpH,GAAQgI,EAAahI,EAAK,OAASkI,EAAUlI,EAAK,QAAUiI,CAAQ,EACtGP,EAAMS,EAAa,CAAC,EAAE,IACtBR,EAASQ,EAAaA,EAAa,OAAS,CAAC,EAAE,OAC/CP,EAAOM,EACPL,EAAQI,EACRH,EAAQD,EAAQD,EAChBG,EAASJ,EAASD,EACxB,MAAO,CACL,IAAAA,EACA,OAAAC,EACA,KAAAC,EACA,MAAAC,EACA,MAAAC,EACA,OAAAC,EACA,EAAGH,EACH,EAAGF,CACf,CACS,CACD,OAAOL,CACR,CACD,MAAMe,EAAa,MAAMpH,EAAS,gBAAgB,CAChD,UAAW,CACT,sBAAAsG,CACD,EACD,SAAUtF,EAAS,SACnB,SAAAlB,CACR,CAAO,EACD,OAAIrC,EAAM,UAAU,IAAM2J,EAAW,UAAU,GAAK3J,EAAM,UAAU,IAAM2J,EAAW,UAAU,GAAK3J,EAAM,UAAU,QAAU2J,EAAW,UAAU,OAAS3J,EAAM,UAAU,SAAW2J,EAAW,UAAU,OACnM,CACL,MAAO,CACL,MAAOA,CACR,CACX,EAEa,EACR,CACL,CACA,EAKA,eAAeC,GAAqBpO,EAAOgB,EAAS,CAClD,KAAM,CACJ,UAAAgD,EACA,SAAA+C,EACA,SAAAgB,CACD,EAAG/H,EACEyE,EAAM,MAAOsC,EAAS,OAAS,KAAO,OAASA,EAAS,MAAMgB,EAAS,QAAQ,GAC/E1E,EAAOU,GAAQC,CAAS,EACxBU,EAAYT,GAAaD,CAAS,EAClCsC,EAAajC,GAAYL,CAAS,IAAM,IACxCqK,EAAgB,CAAC,OAAQ,KAAK,EAAE,SAAShL,CAAI,EAAI,GAAK,EACtDiL,EAAiB7J,GAAO6B,EAAa,GAAK,EAC1CiI,EAAW1K,GAAS7C,EAAShB,CAAK,EAGxC,GAAI,CACF,SAAAwO,EACA,UAAArE,EACA,cAAAxF,CACJ,EAAM,OAAO4J,GAAa,SAAW,CACjC,SAAUA,EACV,UAAW,EACX,cAAe,IACnB,EAAM,CACF,SAAU,EACV,UAAW,EACX,cAAe,KACf,GAAGA,CACP,EACE,OAAI7J,GAAa,OAAOC,GAAkB,WACxCwF,EAAYzF,IAAc,MAAQC,EAAgB,GAAKA,GAElD2B,EAAa,CAClB,EAAG6D,EAAYmE,EACf,EAAGE,EAAWH,CAClB,EAAM,CACF,EAAGG,EAAWH,EACd,EAAGlE,EAAYmE,CACnB,CACA,CASA,MAAM7E,GAAS,SAAUzI,EAAS,CAChC,OAAIA,IAAY,SACdA,EAAU,GAEL,CACL,KAAM,SACN,QAAAA,EACA,MAAM,GAAGhB,EAAO,CACd,IAAIyO,EAAuBrD,EAC3B,KAAM,CACJ,EAAAnE,EACA,EAAAC,EACA,UAAAlD,EACA,eAAAoD,CACD,EAAGpH,EACE0O,EAAa,MAAMN,GAAqBpO,EAAOgB,CAAO,EAI5D,OAAIgD,MAAgByK,EAAwBrH,EAAe,SAAW,KAAO,OAASqH,EAAsB,aAAerD,EAAwBhE,EAAe,QAAU,MAAQgE,EAAsB,gBACjM,GAEF,CACL,EAAGnE,EAAIyH,EAAW,EAClB,EAAGxH,EAAIwH,EAAW,EAClB,KAAM,CACJ,GAAGA,EACH,UAAA1K,CACD,CACT,CACK,CACL,CACA,EAOM2K,GAAQ,SAAU3N,EAAS,CAC/B,OAAIA,IAAY,SACdA,EAAU,CAAA,GAEL,CACL,KAAM,QACN,QAAAA,EACA,MAAM,GAAGhB,EAAO,CACd,KAAM,CACJ,EAAAiH,EACA,EAAAC,EACA,UAAAlD,CACD,EAAGhE,EACE,CACJ,SAAUuL,EAAgB,GAC1B,UAAWC,EAAiB,GAC5B,QAAAoD,EAAU,CACR,GAAI3I,GAAQ,CACV,GAAI,CACF,EAAAgB,EACA,EAAAC,CACD,EAAGjB,EACJ,MAAO,CACL,EAAAgB,EACA,EAAAC,CACd,CACW,CACF,EACD,GAAGkD,CACX,EAAUvG,GAAS7C,EAAShB,CAAK,EACrB0G,EAAS,CACb,EAAAO,EACA,EAAAC,CACR,EACYoD,EAAW,MAAMzC,GAAe7H,EAAOoK,CAAqB,EAC5DD,EAAY9F,GAAYN,GAAQC,CAAS,CAAC,EAC1CwK,EAAWtK,GAAgBiG,CAAS,EAC1C,IAAI0E,EAAgBnI,EAAO8H,CAAQ,EAC/BM,EAAiBpI,EAAOyD,CAAS,EACrC,GAAIoB,EAAe,CACjB,MAAMwD,EAAUP,IAAa,IAAM,MAAQ,OACrCQ,EAAUR,IAAa,IAAM,SAAW,QACxClL,EAAMuL,EAAgBvE,EAASyE,CAAO,EACtCxL,EAAMsL,EAAgBvE,EAAS0E,CAAO,EAC5CH,EAAgBnL,GAAMJ,EAAKuL,EAAetL,CAAG,CAC9C,CACD,GAAIiI,EAAgB,CAClB,MAAMuD,EAAU5E,IAAc,IAAM,MAAQ,OACtC6E,EAAU7E,IAAc,IAAM,SAAW,QACzC7G,EAAMwL,EAAiBxE,EAASyE,CAAO,EACvCxL,EAAMuL,EAAiBxE,EAAS0E,CAAO,EAC7CF,EAAiBpL,GAAMJ,EAAKwL,EAAgBvL,CAAG,CAChD,CACD,MAAM0L,EAAgBL,EAAQ,GAAG,CAC/B,GAAG5O,EACH,CAACwO,CAAQ,EAAGK,EACZ,CAAC1E,CAAS,EAAG2E,CACrB,CAAO,EACD,MAAO,CACL,GAAGG,EACH,KAAM,CACJ,EAAGA,EAAc,EAAIhI,EACrB,EAAGgI,EAAc,EAAI/H,CACtB,CACT,CACK,CACL,CACA,EA4EMgI,GAAO,SAAUlO,EAAS,CAC9B,OAAIA,IAAY,SACdA,EAAU,CAAA,GAEL,CACL,KAAM,OACN,QAAAA,EACA,MAAM,GAAGhB,EAAO,CACd,KAAM,CACJ,UAAAgE,EACA,MAAAQ,EACA,SAAAuC,EACA,SAAAgB,CACD,EAAG/H,EACE,CACJ,MAAAmP,EAAQ,IAAM,CAAE,EAChB,GAAG/E,CACX,EAAUvG,GAAS7C,EAAShB,CAAK,EACrBsK,EAAW,MAAMzC,GAAe7H,EAAOoK,CAAqB,EAC5D/G,EAAOU,GAAQC,CAAS,EACxBU,EAAYT,GAAaD,CAAS,EAClC2E,EAAUtE,GAAYL,CAAS,IAAM,IACrC,CACJ,MAAA6J,EACA,OAAAC,CACR,EAAUtJ,EAAM,SACV,IAAI4K,EACAC,EACAhM,IAAS,OAASA,IAAS,UAC7B+L,EAAa/L,EACbgM,EAAY3K,KAAgB,MAAOqC,EAAS,OAAS,KAAO,OAASA,EAAS,MAAMgB,EAAS,QAAQ,GAAM,QAAU,OAAS,OAAS,UAEvIsH,EAAYhM,EACZ+L,EAAa1K,IAAc,MAAQ,MAAQ,UAE7C,MAAM4K,EAAwBxB,EAASxD,EAAS,IAAMA,EAAS,OACzDiF,EAAuB1B,EAAQvD,EAAS,KAAOA,EAAS,MACxDkF,EAA0BlM,GAAIwK,EAASxD,EAAS8E,CAAU,EAAGE,CAAqB,EAClFG,EAAyBnM,GAAIuK,EAAQvD,EAAS+E,CAAS,EAAGE,CAAoB,EAC9EG,EAAU,CAAC1P,EAAM,eAAe,MACtC,IAAI2P,EAAkBH,EAClBI,EAAiBH,EAMrB,GALI9G,EACFiH,EAAiBlL,GAAagL,EAAUpM,GAAImM,EAAwBF,CAAoB,EAAIA,EAE5FI,EAAkBjL,GAAagL,EAAUpM,GAAIkM,EAAyBF,CAAqB,EAAIA,EAE7FI,GAAW,CAAChL,EAAW,CACzB,MAAMmL,EAAOtM,GAAI+G,EAAS,KAAM,CAAC,EAC3BwF,EAAOvM,GAAI+G,EAAS,MAAO,CAAC,EAC5ByF,EAAOxM,GAAI+G,EAAS,IAAK,CAAC,EAC1B0F,EAAOzM,GAAI+G,EAAS,OAAQ,CAAC,EAC/B3B,EACFiH,EAAiB/B,EAAQ,GAAKgC,IAAS,GAAKC,IAAS,EAAID,EAAOC,EAAOvM,GAAI+G,EAAS,KAAMA,EAAS,KAAK,GAExGqF,EAAkB7B,EAAS,GAAKiC,IAAS,GAAKC,IAAS,EAAID,EAAOC,EAAOzM,GAAI+G,EAAS,IAAKA,EAAS,MAAM,EAE7G,CACD,MAAM6E,EAAM,CACV,GAAGnP,EACH,eAAA4P,EACA,gBAAAD,CACR,CAAO,EACD,MAAMM,EAAiB,MAAMlJ,EAAS,cAAcgB,EAAS,QAAQ,EACrE,OAAI8F,IAAUoC,EAAe,OAASnC,IAAWmC,EAAe,OACvD,CACL,MAAO,CACL,MAAO,EACR,CACX,EAEa,EACR,CACL,CACA,EC9/B0L,SAASC,GAAEC,EAAE,CAAC,IAAI9O,EAAE,QAAcA,EAAE8O,EAAE,gBAAX,KAA0B,OAAO9O,EAAE,cAAc,MAAM,CAAC,SAAS+O,GAAED,EAAE,CAAC,OAAOD,GAAEC,CAAC,EAAE,iBAAiBA,CAAC,CAAC,CAAC,MAAM7I,GAAE,KAAK,IAAI+I,GAAE,KAAK,IAAIC,GAAE,KAAK,MAAM,SAASC,GAAEJ,EAAE,CAAC,MAAM9O,EAAE+O,GAAED,CAAC,EAAE,IAAID,EAAE,WAAW7O,EAAE,KAAK,EAAEiG,EAAE,WAAWjG,EAAE,MAAM,EAAE,MAAMgP,EAAEF,EAAE,YAAYI,EAAEJ,EAAE,aAAa,EAAEG,GAAEJ,CAAC,IAAIG,GAAGC,GAAEhJ,CAAC,IAAIiJ,EAAE,OAAO,IAAIL,EAAEG,EAAE/I,EAAEiJ,GAAG,CAAC,MAAML,EAAE,OAAO5I,EAAE,SAAS,CAAC,CAAC,CAAC,SAASkJ,GAAEL,EAAE,CAAC,OAAOM,GAAEN,CAAC,GAAGA,EAAE,UAAU,IAAI,YAAa,EAAC,EAAE,CAAC,IAAIO,GAAE,SAASC,IAAG,CAAC,GAAGD,GAAE,OAAOA,GAAE,MAAMP,EAAE,UAAU,cAAc,OAAOA,GAAG,MAAM,QAAQA,EAAE,MAAM,GAAGO,GAAEP,EAAE,OAAO,IAAKA,GAAGA,EAAE,MAAM,IAAIA,EAAE,OAAS,EAAC,KAAK,GAAG,EAAEO,IAAG,UAAU,SAAS,CAAC,SAAS1F,GAAEmF,EAAE,CAAC,OAAOA,aAAaD,GAAEC,CAAC,EAAE,WAAW,CAAC,SAASrF,GAAEqF,EAAE,CAAC,OAAOA,aAAaD,GAAEC,CAAC,EAAE,OAAO,CAAC,SAASM,GAAEN,EAAE,CAAC,OAAOA,aAAaD,GAAEC,CAAC,EAAE,IAAI,CAAC,SAASS,GAAET,EAAE,CAAC,OAAgB,OAAO,WAApB,IAAqC,GAAUA,aAAaD,GAAEC,CAAC,EAAE,YAAYA,aAAa,UAAU,CAAC,SAASU,GAAEV,EAAE,CAAC,KAAK,CAAC,SAAS9O,EAAE,UAAU6O,EAAE,UAAU5I,EAAE,QAAQ+I,CAAC,EAAED,GAAED,CAAC,EAAE,MAAM,kCAAkC,KAAK9O,EAAEiG,EAAE4I,CAAC,GAAG,CAAC,CAAC,SAAS,UAAU,EAAE,SAASG,CAAC,CAAC,CAAC,SAASS,GAAEX,EAAE,CAAC,MAAM,CAAC,QAAQ,KAAK,IAAI,EAAE,SAASK,GAAEL,CAAC,CAAC,CAAC,CAAC,SAASjJ,GAAEiJ,EAAE,CAAC,MAAM9O,EAAE,WAAW,KAAKsP,GAAG,CAAA,EAAET,EAAEE,GAAED,CAAC,EAAE7I,EAAE4I,EAAE,gBAAgBA,EAAE,qBAAqB,OAAeA,EAAE,YAAX,QAA+BA,EAAE,cAAX,QAAwB,CAAC,CAAC5I,GAAYA,IAAT,QAAYjG,GAAc6O,EAAE,aAAb,UAAyB7O,GAAG,CAAC,CAAC6O,EAAE,QAAiBA,EAAE,SAAX,QAAmB,CAAC,YAAY,aAAa,EAAE,KAAMC,GAAGD,EAAE,WAAW,SAASC,CAAC,CAAC,GAAI,CAAC,QAAQ,SAAS,SAAS,SAAS,EAAE,KAAMA,GAAG,CAAC,MAAM9O,EAAE6O,EAAE,QAAQ,OAAa7O,GAAN,MAASA,EAAE,SAAS8O,CAAC,CAAC,CAAC,CAAE,CAAC,SAASlJ,IAAG,CAAC,MAAM,CAAC,iCAAiC,KAAK0J,GAAC,CAAE,CAAC,CAAC,SAASI,GAAEZ,EAAE,CAAC,MAAM,CAAC,OAAO,OAAO,WAAW,EAAE,SAASK,GAAEL,CAAC,CAAC,CAAC,CAAC,SAASpF,GAAEoF,EAAE,CAAC,OAAOrF,GAAEqF,CAAC,EAAEA,EAAEA,EAAE,cAAc,CAAC,MAAMlF,GAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,SAAS+F,GAAEb,EAAE,CAAC,MAAM9O,EAAE0J,GAAEoF,CAAC,EAAE,GAAG,CAACnF,GAAE3J,CAAC,EAAE,OAAO4J,GAAE,MAAMiF,EAAE7O,EAAE,sBAAqB,EAAG,CAAC,MAAM+O,EAAE,OAAO9I,EAAE,SAAS,CAAC,EAAEiJ,GAAElP,CAAC,EAAE,IAAI,GAAG,EAAEiP,GAAEJ,EAAE,KAAK,EAAEA,EAAE,OAAOE,EAAEM,GAAG,EAAEJ,GAAEJ,EAAE,MAAM,EAAEA,EAAE,QAAQ5I,EAAE,OAAO,GAAG,OAAO,SAAS,CAAC,IAAI,EAAE,GAAGoJ,GAAG,OAAO,SAASA,CAAC,IAAIA,EAAE,GAAG,CAAC,EAAE,EAAE,EAAEA,CAAC,CAAC,CAAC,SAASO,GAAEd,EAAE9O,EAAE+O,EAAE9I,EAAE,CAAC,IAAI+I,EAAEC,EAAWjP,IAAT,SAAaA,EAAE,IAAa+O,IAAT,SAAaA,EAAE,IAAI,MAAMG,EAAEJ,EAAE,sBAAqB,EAAGK,EAAEzF,GAAEoF,CAAC,EAAE,IAAIO,EAAEzF,GAAE5J,IAAIiG,EAAEwD,GAAExD,CAAC,IAAIoJ,EAAEM,GAAE1J,CAAC,GAAGoJ,EAAEM,GAAEb,CAAC,GAAG,MAAMQ,EAAEH,EAAEN,GAAEM,CAAC,EAAE,OAAOxF,EAAE,CAAC/D,GAAG,GAAEmJ,EAAE,IAAIK,GAAGF,EAAE,MAAMvF,KAAWqF,EAAEM,EAAE,iBAAX,KAA2B,OAAON,EAAE,aAAa,IAAIK,EAAE,EAAEE,GAAGL,EAAE,KAAKvF,KAAWsF,EAAEK,EAAE,iBAAX,KAA2B,OAAOL,EAAE,YAAY,IAAII,EAAE,EAAEG,EAAEN,EAAE,MAAMG,EAAE,EAAEI,EAAEP,EAAE,OAAOG,EAAE,EAAE,GAAGF,EAAE,CAAC,MAAML,EAAED,GAAEM,CAAC,EAAEnP,EAAEiG,GAAGwD,GAAExD,CAAC,EAAE4I,GAAE5I,CAAC,EAAEA,EAAE,IAAI8I,EAAED,EAAE,aAAa,KAAKC,GAAG9I,GAAGjG,IAAI8O,GAAG,CAAC,MAAMA,EAAEa,GAAEZ,CAAC,EAAE/O,EAAE+O,EAAE,wBAAwB9I,EAAE,iBAAiB8I,CAAC,EAAE/O,EAAE,IAAI+O,EAAE,WAAW,WAAW9I,EAAE,WAAW,GAAG6I,EAAE,EAAE9O,EAAE,IAAI+O,EAAE,UAAU,WAAW9I,EAAE,UAAU,GAAG6I,EAAE,EAAEM,GAAGN,EAAE,EAAES,GAAGT,EAAE,EAAEU,GAAGV,EAAE,EAAEW,GAAGX,EAAE,EAAEM,GAAGpP,EAAE,EAAEuP,GAAGvP,EAAE,EAAE+O,EAAEF,GAAEE,CAAC,EAAE,YAAY,CAAC,CAAC,MAAM,CAAC,MAAMS,EAAE,OAAOC,EAAE,IAAIF,EAAE,MAAMH,EAAEI,EAAE,OAAOD,EAAEE,EAAE,KAAKL,EAAE,EAAEA,EAAE,EAAEG,CAAC,CAAC,CAAC,SAASM,GAAEf,EAAE,CAAC,QAAQM,GAAEN,CAAC,EAAEA,EAAE,cAAcA,EAAE,WAAW,OAAO,UAAU,eAAe,CAAC,SAASgB,GAAEhB,EAAE,CAAC,OAAOrF,GAAEqF,CAAC,EAAE,CAAC,WAAWA,EAAE,WAAW,UAAUA,EAAE,SAAS,EAAE,CAAC,WAAWA,EAAE,YAAY,UAAUA,EAAE,WAAW,CAAC,CAAC,SAASiB,GAAEjB,EAAE,CAAC,OAAOc,GAAEC,GAAEf,CAAC,CAAC,EAAE,KAAKgB,GAAEhB,CAAC,EAAE,UAAU,CAAC,SAASkB,GAAElB,EAAE,CAAC,GAAYK,GAAEL,CAAC,IAAZ,OAAc,OAAOA,EAAE,MAAM9O,EAAE8O,EAAE,cAAcA,EAAE,YAAYS,GAAET,CAAC,GAAGA,EAAE,MAAMe,GAAEf,CAAC,EAAE,OAAOS,GAAEvP,CAAC,EAAEA,EAAE,KAAKA,CAAC,CAAC,SAASiQ,GAAEnB,EAAE,CAAC,MAAM9O,EAAEgQ,GAAElB,CAAC,EAAE,OAAOY,GAAE1P,CAAC,EAAEA,EAAE,cAAc,KAAK2J,GAAE3J,CAAC,GAAGwP,GAAExP,CAAC,EAAEA,EAAEiQ,GAAEjQ,CAAC,CAAC,CAAC,SAASkQ,GAAEpB,EAAE9O,EAAE,CAAC,IAAI+O,EAAW/O,IAAT,SAAaA,EAAE,CAAE,GAAE,MAAMiG,EAAEgK,GAAEnB,CAAC,EAAEE,EAAE/I,MAAY8I,EAAED,EAAE,gBAAX,KAA0B,OAAOC,EAAE,MAAME,EAAEJ,GAAE5I,CAAC,EAAE,OAAO+I,EAAEhP,EAAE,OAAOiP,EAAEA,EAAE,gBAAgB,CAAE,EAACO,GAAEvJ,CAAC,EAAEA,EAAE,CAAE,CAAA,EAAEjG,EAAE,OAAOiG,EAAEiK,GAAEjK,CAAC,CAAC,CAAC,CAAC,SAASkK,GAAEnQ,EAAEiG,EAAEgJ,EAAE,CAAC,OAAmBhJ,IAAb,WAAe6I,GAAE,SAASA,EAAE9O,EAAE,CAAC,MAAM+O,EAAEF,GAAEC,CAAC,EAAE7I,EAAE4J,GAAEf,CAAC,EAAEE,EAAED,EAAE,eAAe,IAAIE,EAAEhJ,EAAE,YAAY,EAAEA,EAAE,aAAakJ,EAAE,EAAE,EAAE,EAAE,GAAGH,EAAE,CAACC,EAAED,EAAE,MAAM,EAAEA,EAAE,OAAO,MAAMF,EAAElJ,GAAG,GAAEkJ,GAAG,CAACA,GAAa9O,IAAV,WAAemP,EAAEH,EAAE,WAAW,EAAEA,EAAE,UAAU,CAAC,MAAM,CAAC,MAAMC,EAAE,OAAO,EAAE,EAAEE,EAAE,EAAE,CAAC,CAAC,EAAEnP,EAAEiP,CAAC,CAAC,EAAExF,GAAExD,CAAC,EAAE6I,GAAE,SAASA,EAAE9O,EAAE,CAAC,MAAM6O,EAAEe,GAAEd,EAAE,GAAa9O,IAAV,OAAW,EAAE+O,EAAEF,EAAE,IAAIC,EAAE,UAAU7I,EAAE4I,EAAE,KAAKC,EAAE,WAAWE,EAAErF,GAAEmF,CAAC,EAAEa,GAAEb,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,MAAMA,EAAE,YAAYE,EAAE,EAAE,OAAOF,EAAE,aAAaE,EAAE,EAAE,EAAE/I,EAAE+I,EAAE,EAAE,EAAED,EAAEC,EAAE,CAAC,CAAC,EAAE/I,EAAEgJ,CAAC,CAAC,EAAEH,GAAE,SAASA,EAAE,CAAC,MAAM9O,EAAE6P,GAAEf,CAAC,EAAED,EAAEiB,GAAEhB,CAAC,EAAE7I,EAAE6I,EAAE,cAAc,KAAKG,EAAED,GAAEhP,EAAE,YAAYA,EAAE,YAAYiG,EAAE,YAAYA,EAAE,WAAW,EAAEiJ,EAAEF,GAAEhP,EAAE,aAAaA,EAAE,aAAaiG,EAAE,aAAaA,EAAE,YAAY,EAAE,IAAIkJ,EAAE,CAACN,EAAE,WAAWkB,GAAEjB,CAAC,EAAE,MAAMO,EAAE,CAACR,EAAE,UAAU,OAAcE,GAAE9I,CAAC,EAAE,YAAb,QAAyBkJ,GAAGH,GAAEhP,EAAE,YAAYiG,EAAE,WAAW,EAAEgJ,GAAG,CAAC,MAAMA,EAAE,OAAOC,EAAE,EAAEC,EAAE,EAAEE,CAAC,CAAC,EAAEQ,GAAE7P,CAAC,CAAC,CAAC,CAAC,CAAC,SAASoQ,GAAEtB,EAAE,CAAC,OAAOnF,GAAEmF,CAAC,GAAaC,GAAED,CAAC,EAAE,WAAf,QAAwBA,EAAE,aAAa,IAAI,CAAC,SAASuB,GAAEvB,EAAE,CAAC,MAAM9O,EAAE6O,GAAEC,CAAC,EAAE,IAAI7I,EAAEmK,GAAEtB,CAAC,EAAE,KAAK7I,GAAGwJ,GAAExJ,CAAC,GAAc8I,GAAE9I,CAAC,EAAE,WAAhB,UAA0BA,EAAEmK,GAAEnK,CAAC,EAAE,OAAOA,IAAakJ,GAAElJ,CAAC,IAAZ,QAAwBkJ,GAAElJ,CAAC,IAAZ,QAA0B8I,GAAE9I,CAAC,EAAE,WAAhB,UAA0B,CAACJ,GAAEI,CAAC,GAAGjG,EAAEiG,GAAG,SAAS6I,EAAE,CAAC,IAAI9O,EAAEgQ,GAAElB,CAAC,EAAE,KAAKnF,GAAE3J,CAAC,GAAG,CAAC0P,GAAE1P,CAAC,GAAG,CAAC,GAAG6F,GAAE7F,CAAC,EAAE,OAAOA,EAAEA,EAAEgQ,GAAEhQ,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE8O,CAAC,GAAG9O,CAAC,CAAC,SAASsQ,GAAExB,EAAE9O,EAAE6O,EAAE,CAAC,MAAME,EAAEpF,GAAE3J,CAAC,EAAEiG,EAAE4J,GAAE7P,CAAC,EAAE,EAAE4P,GAAEd,EAAE,GAAaD,IAAV,QAAY7O,CAAC,EAAE,IAAIiP,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,MAAMC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAGH,GAAG,CAACA,GAAaF,IAAV,QAAY,IAAaM,GAAEnP,CAAC,IAAZ,QAAewP,GAAEvJ,CAAC,KAAKgJ,EAAEa,GAAE9P,CAAC,GAAG2J,GAAE3J,CAAC,EAAE,CAAC,MAAM8O,EAAEc,GAAE5P,EAAE,EAAE,EAAEkP,EAAE,EAAEJ,EAAE,EAAE9O,EAAE,WAAWkP,EAAE,EAAEJ,EAAE,EAAE9O,EAAE,SAAS,MAAMiG,IAAIiJ,EAAE,EAAEa,GAAE9J,CAAC,GAAG,MAAM,CAAC,EAAE,EAAE,KAAKgJ,EAAE,WAAWC,EAAE,EAAE,EAAE,EAAE,IAAID,EAAE,UAAUC,EAAE,EAAE,MAAM,EAAE,MAAM,OAAO,EAAE,MAAM,CAAC,CAAC,MAAMqB,GAAE,CAAC,gBAAgB,SAASzB,EAAE,CAAC,GAAG,CAAC,QAAQ9O,EAAE,SAAS6O,EAAE,aAAaI,EAAE,SAASC,CAAC,EAAEJ,EAAE,MAAMO,EAAwBR,IAAtB,oBAAwB,SAASC,EAAE9O,EAAE,CAAC,MAAM6O,EAAE7O,EAAE,IAAI8O,CAAC,EAAE,GAAGD,EAAE,OAAOA,EAAE,IAAI5I,EAAEiK,GAAEpB,CAAC,EAAE,OAAQA,GAAGrF,GAAEqF,CAAC,GAAYK,GAAEL,CAAC,IAAZ,MAAe,EAACE,EAAE,KAAK,MAAMC,EAAYF,GAAED,CAAC,EAAE,WAAf,QAAwB,IAAII,EAAED,EAAEe,GAAElB,CAAC,EAAEA,EAAE,KAAKrF,GAAEyF,CAAC,GAAG,CAACQ,GAAER,CAAC,GAAG,CAAC,MAAMJ,EAAEC,GAAEG,CAAC,EAAElP,EAAE6F,GAAEqJ,CAAC,GAAGD,EAAEjP,GAAGgP,EAAEhP,GAAc8O,EAAE,WAAb,UAAuB,CAACE,GAAG,CAAC,CAAC,WAAW,OAAO,EAAE,SAASA,EAAE,QAAQ,GAAGA,EAAEF,EAAE7I,EAAEA,EAAE,OAAQ6I,GAAGA,IAAII,GAAIA,EAAEc,GAAEd,CAAC,CAAC,CAAC,OAAOlP,EAAE,IAAI8O,EAAE7I,CAAC,EAAEA,CAAC,EAAEjG,EAAE,KAAK,EAAE,EAAE,CAAE,EAAC,OAAO6O,CAAC,EAAES,EAAE,CAAC,GAAGD,EAAEJ,CAAC,EAAEtF,EAAE2F,EAAE,CAAC,EAAEF,EAAEE,EAAE,OAAQ,CAACR,EAAED,IAAI,CAAC,MAAME,EAAEoB,GAAEnQ,EAAE6O,EAAEK,CAAC,EAAE,OAAOJ,EAAE,IAAIE,GAAED,EAAE,IAAID,EAAE,GAAG,EAAEA,EAAE,MAAM7I,GAAE8I,EAAE,MAAMD,EAAE,KAAK,EAAEA,EAAE,OAAO7I,GAAE8I,EAAE,OAAOD,EAAE,MAAM,EAAEA,EAAE,KAAKE,GAAED,EAAE,KAAKD,EAAE,IAAI,EAAEA,CAAC,EAAGqB,GAAEnQ,EAAE2J,EAAEuF,CAAC,CAAC,EAAE,MAAM,CAAC,MAAME,EAAE,MAAMA,EAAE,KAAK,OAAOA,EAAE,OAAOA,EAAE,IAAI,EAAEA,EAAE,KAAK,EAAEA,EAAE,GAAG,CAAC,EAAE,sDAAsD,SAASN,EAAE,CAAC,GAAG,CAAC,KAAK9O,EAAE,aAAa6O,EAAE,SAASE,CAAC,EAAED,EAAE,MAAM7I,EAAE0D,GAAEkF,CAAC,EAAE,EAAEgB,GAAEhB,CAAC,EAAE,GAAGA,IAAI,EAAE,OAAO7O,EAAE,IAAIiP,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC,EAAEC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,MAAMG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAIpJ,GAAG,CAACA,GAAa8I,IAAV,YAAyBI,GAAEN,CAAC,IAAZ,QAAeW,GAAE,CAAC,KAAKP,EAAEa,GAAEjB,CAAC,GAAGlF,GAAEkF,CAAC,GAAG,CAAC,MAAMC,EAAEc,GAAEf,CAAC,EAAEK,EAAES,GAAEd,CAAC,EAAEQ,EAAE,EAAEP,EAAE,EAAED,EAAE,WAAWQ,EAAE,EAAEP,EAAE,EAAED,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM7O,EAAE,MAAMkP,EAAE,EAAE,OAAOlP,EAAE,OAAOkP,EAAE,EAAE,EAAElP,EAAE,EAAEkP,EAAE,EAAED,EAAE,WAAWC,EAAE,EAAEG,EAAE,EAAE,EAAErP,EAAE,EAAEkP,EAAE,EAAED,EAAE,UAAUC,EAAE,EAAEG,EAAE,CAAC,CAAC,EAAE,UAAU5F,GAAE,cAAc,SAASqF,EAAE,CAAC,OAAOnF,GAAEmF,CAAC,EAAEI,GAAEJ,CAAC,EAAEA,EAAE,uBAAuB,EAAE,gBAAgBuB,GAAE,mBAAmBR,GAAE,SAASF,GAAE,MAAM,gBAAgBb,EAAE,CAAC,GAAG,CAAC,UAAU9O,EAAE,SAAS6O,EAAE,SAASE,CAAC,EAAED,EAAE,MAAM7I,EAAE,KAAK,iBAAiBoK,GAAE,EAAE,KAAK,cAAc,MAAM,CAAC,UAAUC,GAAEtQ,EAAE,MAAMiG,EAAE4I,CAAC,EAAEE,CAAC,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,MAAM,EAAEF,CAAC,CAAC,CAAC,CAAC,EAAE,eAAeC,GAAG,MAAM,KAAKA,EAAE,eAAgB,CAAA,EAAE,MAAMA,GAAWC,GAAED,CAAC,EAAE,YAAb,KAAsB,EAAE,SAAS0B,GAAE1B,EAAE9O,EAAE6O,EAAEE,EAAE,CAAUA,IAAT,SAAaA,EAAE,CAAA,GAAI,KAAK,CAAC,eAAe9I,EAAE,GAAG,eAAe,EAAE,GAAG,cAAcgJ,EAAE,GAAG,eAAeC,EAAE,EAAE,EAAEH,EAAEI,EAAElJ,GAAG,CAACiJ,EAAEG,EAAEF,GAAG,EAAE,CAAC,GAAG1F,GAAEqF,CAAC,EAAEoB,GAAEpB,CAAC,EAAEA,EAAE,eAAeoB,GAAEpB,EAAE,cAAc,EAAE,CAAE,EAAC,GAAGoB,GAAElQ,CAAC,CAAC,EAAE,CAAA,EAAGqP,EAAE,QAASP,GAAG,CAACK,GAAGL,EAAE,iBAAiB,SAASD,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,GAAGC,EAAE,iBAAiB,SAASD,CAAC,CAAC,CAAG,EAAC,IAAI,EAAElF,EAAE,KAAK,GAAGsF,EAAE,CAAC,IAAIF,EAAE,GAAGpF,EAAE,IAAI,eAAgB,IAAI,CAACoF,GAAGF,EAAG,EAACE,EAAE,EAAE,CAAG,EAACtF,GAAEqF,CAAC,GAAG,CAACI,GAAGvF,EAAE,QAAQmF,CAAC,EAAErF,GAAEqF,CAAC,GAAG,CAACA,EAAE,gBAAgBI,GAAGvF,EAAE,QAAQmF,EAAE,cAAc,EAAEnF,EAAE,QAAQ3J,CAAC,CAAC,CAAC,IAAIoP,EAAEF,EAAEU,GAAEd,CAAC,EAAE,KAAK,OAAOI,GAAG,SAASlP,GAAG,CAAC,MAAM+O,EAAEa,GAAEd,CAAC,EAAE,CAACM,GAAGL,EAAE,IAAIK,EAAE,GAAGL,EAAE,IAAIK,EAAE,GAAGL,EAAE,QAAQK,EAAE,OAAOL,EAAE,SAASK,EAAE,QAAQP,IAAIO,EAAEL,EAAE,EAAE,sBAAsB/O,CAAC,CAAC,IAAI6O,EAAG,EAAC,IAAI,CAAC,IAAIC,EAAEO,EAAE,QAASP,GAAG,CAACK,GAAGL,EAAE,oBAAoB,SAASD,CAAC,EAAE,GAAGC,EAAE,oBAAoB,SAASD,CAAC,CAAC,IAAWC,EAAEnF,IAAT,MAAamF,EAAE,WAAU,EAAGnF,EAAE,KAAKuF,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC,MAAMuB,GAAE,CAAC3B,EAAE,EAAEC,IAAI,CAAC,MAAM9I,EAAE,IAAI,IAAI+I,EAAE,CAAC,SAASuB,GAAE,GAAGxB,CAAC,EAAEE,EAAE,CAAC,GAAGD,EAAE,SAAS,GAAG/I,CAAC,EAAE,OAAOjG,GAAE8O,EAAE,EAAE,CAAC,GAAGE,EAAE,SAASC,CAAC,CAAC,CAAC,ECAzrO,SAASyB,GAAYC,EAAM,CACzB,OAAIC,GAAOD,CAAI,GACLA,EAAK,UAAY,IAAI,YAAW,EAKnC,WACT,CACA,SAASE,GAAUF,EAAM,CACvB,IAAIG,EACJ,OAAQH,GAAQ,OAASG,EAAsBH,EAAK,gBAAkB,KAAO,OAASG,EAAoB,cAAgB,MAC5H,CAKA,SAASF,GAAOrS,EAAO,CACrB,OAAOA,aAAiB,MAAQA,aAAiBsS,GAAUtS,CAAK,EAAE,IACpE,CCdA,SAASwS,GAA0BC,EAAQ,CACzC,OAAOA,GAAU,MAAQ,OAAOA,GAAW,UAAY,QAASA,CAClE,CACA,SAASC,GAAcD,EAAQ,CAC7B,GAAID,GAA0BC,CAAM,EAAG,CACrC,MAAM3Q,EAAU2Q,EAAO,IACvB,OAAOJ,GAAOvQ,CAAO,GAAKqQ,GAAYrQ,CAAO,IAAM,WAAa,KAAOA,CACxE,CACD,OAAO2Q,CACT,CAEA,SAASxS,GAAQ0S,EAAQ,CACvB,OAAO,OAAOA,GAAW,WAAaA,EAAM,EAAKC,EAAAA,MAAMD,CAAM,CAC/D,CAOA,SAAS9J,GAAMzH,EAAS,CACtB,MAAO,CACL,KAAM,QACN,QAAAA,EACA,GAAGyR,EAAM,CACP,MAAM/Q,EAAU4Q,GAAczS,GAAQmB,EAAQ,OAAO,CAAC,EACtD,OAAIU,GAAW,KACN,GAEFgR,GAAQ,CACb,QAAAhR,EACA,QAASV,EAAQ,OACzB,CAAO,EAAE,GAAGyR,CAAI,CACX,CACL,CACA,CAEA,SAASE,GAAOjR,EAAS,CACvB,OAAI,OAAO,OAAW,IACb,GAEGA,EAAQ,cAAc,aAAe,QACtC,kBAAoB,CACjC,CAEA,SAASkR,GAAWlR,EAAS9B,EAAO,CAClC,MAAMiT,EAAMF,GAAOjR,CAAO,EAC1B,OAAO,KAAK,MAAM9B,EAAQiT,CAAG,EAAIA,CACnC,CASA,SAASC,GAAY5M,EAAWC,EAAUnF,EAAS,CAC7CA,IAAY,SACdA,EAAU,CAAA,GAEZ,MAAM+R,EAA6B/R,EAAQ,qBACrCgS,EAAarT,EAAAA,SAAS,IAAM,CAChC,IAAIsT,EACJ,OAAQA,EAAWpT,GAAQmB,EAAQ,IAAI,IAAM,KAAOiS,EAAW,EACnE,CAAG,EACKC,EAAmBvT,EAAAA,SAAS,IAAME,GAAQmB,EAAQ,UAAU,CAAC,EAC7DmS,EAAkBxT,EAAAA,SAAS,IAAM,CACrC,IAAIyT,EACJ,OAAQA,EAAYvT,GAAQmB,EAAQ,SAAS,IAAM,KAAOoS,EAAY,QAC1E,CAAG,EACKC,EAAiB1T,EAAAA,SAAS,IAAM,CACpC,IAAI2T,EACJ,OAAQA,EAAYzT,GAAQmB,EAAQ,QAAQ,IAAM,KAAOsS,EAAY,UACzE,CAAG,EACKC,EAAkB5T,EAAAA,SAAS,IAAM,CACrC,IAAI6T,EACJ,OAAQA,EAAY3T,GAAQmB,EAAQ,SAAS,IAAM,KAAOwS,EAAY,EAC1E,CAAG,EACKC,EAAmB9T,EAAAA,SAAS,IAAM2S,GAAcpM,EAAU,KAAK,CAAC,EAChEwN,EAAkB/T,EAAAA,SAAS,IAAM2S,GAAcnM,EAAS,KAAK,CAAC,EAC9Dc,EAAI0M,MAAI,CAAC,EACTzM,EAAIyM,MAAI,CAAC,EACT9M,EAAW8M,EAAAA,IAAIN,EAAe,KAAK,EACnCrP,EAAY2P,EAAAA,IAAIR,EAAgB,KAAK,EACrC/L,EAAiBwM,aAAW,CAAA,CAAE,EAC9BC,EAAeF,MAAI,EAAK,EACxBG,EAAiBnU,EAAAA,SAAS,IAAM,CACpC,MAAMoU,EAAgB,CACpB,SAAUlN,EAAS,MACnB,KAAM,IACN,IAAK,GACX,EACI,GAAI,CAAC6M,EAAgB,MACnB,OAAOK,EAET,MAAMC,EAAOpB,GAAWc,EAAgB,MAAOzM,EAAE,KAAK,EAChDgN,EAAOrB,GAAWc,EAAgB,MAAOxM,EAAE,KAAK,EACtD,OAAIqM,EAAgB,MACX,CACL,GAAGQ,EACH,UAAW,aAAeC,EAAO,OAASC,EAAO,MACjD,GAAItB,GAAOe,EAAgB,KAAK,GAAK,KAAO,CAC1C,WAAY,WACb,CACT,EAEW,CACL,SAAU7M,EAAS,MACnB,KAAMmN,EAAO,KACb,IAAKC,EAAO,IAClB,CACA,CAAG,EACD,IAAIC,EACJ,SAASC,GAAS,CACZV,EAAiB,OAAS,MAAQC,EAAgB,OAAS,MAG/D/M,GAAgB8M,EAAiB,MAAOC,EAAgB,MAAO,CAC7D,WAAYR,EAAiB,MAC7B,UAAWC,EAAgB,MAC3B,SAAUE,EAAe,KAC/B,CAAK,EAAE,KAAKe,GAAY,CAClBnN,EAAE,MAAQmN,EAAS,EACnBlN,EAAE,MAAQkN,EAAS,EACnBvN,EAAS,MAAQuN,EAAS,SAC1BpQ,EAAU,MAAQoQ,EAAS,UAC3BhN,EAAe,MAAQgN,EAAS,eAChCP,EAAa,MAAQ,EAC3B,CAAK,CACF,CACD,SAASQ,GAAU,CACb,OAAOH,GAAgC,aACzCA,IACAA,EAA8B,OAEjC,CACD,SAASI,GAAS,CAEhB,GADAD,IACItB,IAA+B,OAAW,CAC5CoB,IACA,MACD,CACD,GAAIV,EAAiB,OAAS,MAAQC,EAAgB,OAAS,KAAM,CACnEQ,EAA8BnB,EAA2BU,EAAiB,MAAOC,EAAgB,MAAOS,CAAM,EAC9G,MACD,CACF,CACD,SAASvM,GAAQ,CACVoL,EAAW,QACda,EAAa,MAAQ,GAExB,CACDU,OAAAA,EAAAA,MAAM,CAACrB,EAAkBC,EAAiBE,CAAc,EAAGc,EAAQ,CACjE,MAAO,MACX,CAAG,EACDI,EAAAA,MAAM,CAACd,EAAkBC,CAAe,EAAGY,EAAQ,CACjD,MAAO,MACX,CAAG,EACDC,EAAK,MAACvB,EAAYpL,EAAO,CACvB,MAAO,MACX,CAAG,EACG4M,EAAe,gBAAA,GACjBC,EAAc,eAACJ,CAAO,EAEjB,CACL,EAAGK,EAAe,gBAACzN,CAAC,EACpB,EAAGyN,EAAe,gBAACxN,CAAC,EACpB,SAAUwN,EAAe,gBAAC7N,CAAQ,EAClC,UAAW6N,EAAe,gBAAC1Q,CAAS,EACpC,eAAgB0Q,EAAe,gBAACtN,CAAc,EAC9C,aAAcsN,EAAe,gBAACb,CAAY,EAC1C,eAAAC,EACA,OAAAK,CACJ,CACA,CC7KA,MAAMQ,OAAoB,IAAI,CAC5B,aACA,OACA,OACA,WACA,WACA,SACA,MACA,YACF,CAAC,EAEKC,GAAyB,iBAOzBC,GAAmB,iEAOnBC,GACJ,qIAEIC,GAAmB,CACvBC,EACAC,IACG,CACG,MAAAC,EAAgBF,EAAU,SAAS,YAAY,EAEjD,OAAAC,EAAqB,SAASC,CAAa,EACzCP,GAAc,IAAIO,CAAa,EAC1B,GACLL,GAAiB,KAAKG,EAAU,WAAa,EAAE,GAC7CF,GAAiB,KAAKE,EAAU,WAAa,EAAE,GAI9C,GAIFC,EACJ,OAAQE,GAA6CA,aAA0B,MAAM,EACrF,KAAMC,GAAUA,EAAM,KAAKF,CAAa,CAAC,CAC9C,EAEaG,GAAmB,CAE9B,IAAK,CAAC,QAAS,MAAO,KAAM,OAAQ,OAAQT,EAAsB,EAClE,EAAK,CAAC,SAAU,OAAQ,QAAS,KAAK,EACtC,KAAQ,CAAC,EACT,EAAK,CAAC,EACN,GAAM,CAAC,EACP,IAAO,CAAC,EACR,KAAQ,CAAC,EACT,IAAO,CAAC,EACR,GAAM,CAAC,EACP,GAAM,CAAC,EACP,GAAM,CAAC,EACP,GAAM,CAAC,EACP,GAAM,CAAC,EACP,GAAM,CAAC,EACP,GAAM,CAAC,EACP,GAAM,CAAC,EACP,EAAK,CAAC,EACN,IAAO,CAAC,MAAO,SAAU,MAAO,QAAS,QAAS,QAAQ,EAC1D,GAAM,CAAC,EACP,GAAM,CAAC,EACP,EAAK,CAAC,EACN,IAAO,CAAC,EACR,EAAK,CAAC,EACN,MAAS,CAAC,EACV,KAAQ,CAAC,EACT,IAAO,CAAC,EACR,IAAO,CAAC,EACR,OAAU,CAAC,EACX,EAAK,CAAC,EACN,GAAM,CAAC,CACT,EAEaU,GAAe,CAC1BC,EACAC,EACAC,IACG,CACC,GAAA,CAACF,EAAW,OACP,OAAAA,EAGL,GAAAE,GAAoB,OAAOA,GAAqB,WAClD,OAAOA,EAAiBF,CAAU,EAIpC,MAAMG,EADY,IAAI,OAAO,YACK,gBAAgBH,EAAY,WAAW,EACnExN,EAAgC2N,EAAgB,KAAK,iBAAiB,GAAG,EAE/E,UAAWhU,KAAWqG,EAAU,CACxB,MAAA4N,EAAcjU,EAAQ,SAAS,YAAY,EAEjD,GAAI,CAAC,OAAO,KAAK8T,CAAS,EAAE,SAASG,CAAW,EAAG,CACjDjU,EAAQ,OAAO,EAEf,QACF,CAEA,MAAMkU,EAAgBlU,EAAQ,WACxBmU,EAAoB,CAAC,GAAIL,EAAU,GAAG,GAAK,GAAK,GAAIA,EAAUG,CAAW,GAAK,CAAA,CAAG,EAEvF,UAAWX,KAAaY,EACjBb,GAAiBC,EAAWa,CAAiB,GACxCnU,EAAA,gBAAgBsT,EAAU,QAAQ,CAGhD,CAEA,OAAOU,EAAgB,KAAK,SAC9B,ECjFA,SAASI,GAAkBtO,EAAI,CAC7B,OAAIgN,EAAe,gBAAA,GACjBC,EAAc,eAACjN,CAAE,EACV,IAEF,EACT,CAsIA,SAASuO,GAAmBC,EAAKC,EAAK,CACpC,GAAI,OAAO,OAAW,IAAa,CACjC,MAAMC,EAAQ,CAAE,GAAGF,GACnB,cAAO,eAAeE,EAAO,OAAO,SAAU,CAC5C,WAAY,GACZ,OAAQ,CACN,IAAIC,EAAQ,EACZ,MAAO,CACL,KAAM,KAAO,CACX,MAAOF,EAAIE,GAAO,EAClB,KAAMA,EAAQF,EAAI,MAC9B,EACA,CACO,CACP,CAAK,EACMC,CACX,KACI,QAAO,OAAO,OAAO,CAAC,GAAGD,CAAG,EAAGD,CAAG,CAEtC,CAEA,SAASnW,GAAQwQ,EAAG,CAClB,OAAO,OAAOA,GAAM,WAAaA,EAAC,EAAKmC,EAAAA,MAAMnC,CAAC,CAChD,CA4EA,MAAM+F,GAAW,OAAO,OAAW,KAAe,OAAO,SAAa,IACrD,OAAO,kBAAsB,KAAe,sBAAsB,kBAEnF,MAAMC,GAAcC,GAAQA,GAAO,KAK7BC,GAAW,OAAO,UAAU,SAC5BC,GAAYF,GAAQC,GAAS,KAAKD,CAAG,IAAM,kBAI3CG,GAAO,IAAM,CACnB,EAOMC,GAAwBC,GAAQ,EACtC,SAASA,IAAW,CAClB,IAAIC,EAAIC,EACR,OAAOT,MAAcQ,EAAK,QAAU,KAAO,OAAS,OAAO,YAAc,KAAO,OAASA,EAAG,aAAe,mBAAmB,KAAK,OAAO,UAAU,SAAS,KAAOC,EAAK,QAAU,KAAO,OAAS,OAAO,YAAc,KAAO,OAASA,EAAG,gBAAkB,GAAK,iBAAiB,KAAK,QAAU,KAAO,OAAS,OAAO,UAAU,SAAS,EAC9U,CAEA,SAASC,GAAoBC,EAAQvP,EAAI,CACvC,SAASwP,KAAWvE,EAAM,CACxB,OAAO,IAAI,QAAQ,CAACwE,EAASC,IAAW,CACtC,QAAQ,QAAQH,EAAO,IAAMvP,EAAG,MAAM,KAAMiL,CAAI,EAAG,CAAE,GAAAjL,EAAI,QAAS,KAAM,KAAAiL,CAAI,CAAE,CAAC,EAAE,KAAKwE,CAAO,EAAE,MAAMC,CAAM,CACjH,CAAK,CACF,CACD,OAAOF,CACT,CACA,MAAMG,GAAgBC,GACbA,EAAM,EAEf,SAASC,GAAeC,EAAItW,EAAU,GAAI,CACxC,IAAIuW,EACAC,EACAC,EAAehB,GACnB,MAAMiB,EAAiBC,GAAW,CAChC,aAAaA,CAAM,EACnBF,IACAA,EAAehB,EACnB,EA+BE,OA9BgBW,GAAW,CACzB,MAAMQ,EAAW/X,GAAQyX,CAAE,EACrBO,EAAchY,GAAQmB,EAAQ,OAAO,EAG3C,OAFIuW,GACFG,EAAcH,CAAK,EACjBK,GAAY,GAAKC,IAAgB,QAAUA,GAAe,GACxDL,IACFE,EAAcF,CAAQ,EACtBA,EAAW,MAEN,QAAQ,QAAQJ,EAAM,CAAE,GAE1B,IAAI,QAAQ,CAACH,EAASC,IAAW,CACtCO,EAAezW,EAAQ,eAAiBkW,EAASD,EAC7CY,GAAe,CAACL,IAClBA,EAAW,WAAW,IAAM,CACtBD,GACFG,EAAcH,CAAK,EACrBC,EAAW,KACXP,EAAQG,EAAM,CAAE,CACjB,EAAES,CAAW,GAEhBN,EAAQ,WAAW,IAAM,CACnBC,GACFE,EAAcF,CAAQ,EACxBA,EAAW,KACXP,EAAQG,EAAM,CAAE,CACjB,EAAEQ,CAAQ,CACjB,CAAK,CACL,CAEA,CAuDA,SAASE,GAAeC,EAAeZ,GAAc,CACnD,MAAMa,EAAWrE,MAAI,EAAI,EACzB,SAASsE,GAAQ,CACfD,EAAS,MAAQ,EAClB,CACD,SAASE,GAAS,CAChBF,EAAS,MAAQ,EAClB,CACD,MAAMrV,EAAc,IAAI8P,IAAS,CAC3BuF,EAAS,OACXD,EAAa,GAAGtF,CAAI,CAC1B,EACE,MAAO,CAAE,SAAU0F,WAASH,CAAQ,EAAG,MAAAC,EAAO,OAAAC,EAAQ,YAAAvV,EACxD,CAQA,SAASyV,GAAoB5Q,EAAI,CAC/B,MAAM6Q,EAAwB,OAAO,OAAO,IAAI,EAChD,OAAQC,GACMD,EAAMC,CAAG,IACND,EAAMC,CAAG,EAAI9Q,EAAG8Q,CAAG,EAEtC,CAGA,MAAMC,GAAa,SACbC,GAAWJ,GAAqBE,GAC7BA,EAAI,QAAQC,GAAY,CAACE,EAAGlI,IAAMA,EAAIA,EAAE,YAAa,EAAG,EAAE,CAClE,EAkCD,SAASmI,GAAiBrG,EAAQsG,EAAO,CACvC,IAAI/B,EACJ,GAAI,OAAOvE,GAAW,SACpB,OAAOA,EAASsG,EAClB,MAAM/Y,IAAUgX,EAAKvE,EAAO,MAAM,cAAc,IAAM,KAAO,OAASuE,EAAG,CAAC,IAAM,GAC1EgC,EAAOvG,EAAO,MAAMzS,EAAM,MAAM,EAChCiZ,EAAS,OAAO,WAAWjZ,CAAK,EAAI+Y,EAC1C,OAAI,OAAO,MAAME,CAAM,EACdxG,EACFwG,EAASD,CAClB,CAkBA,SAASE,GAAmBzG,EAAQ,CAClC,OAAOA,GAAU0G,EAAAA,oBACnB,CAEA,SAASC,MAASvG,EAAM,CACtB,GAAIA,EAAK,SAAW,EAClB,OAAOwG,EAAO,MAAC,GAAGxG,CAAI,EACxB,MAAMpC,EAAIoC,EAAK,CAAC,EAChB,OAAO,OAAOpC,GAAM,WAAa8H,EAAQ,SAACe,EAAS,UAAC,KAAO,CAAE,IAAK7I,EAAG,IAAKoG,EAAI,EAAG,CAAC,EAAI9C,EAAG,IAACtD,CAAC,CAC7F,CAmCA,SAAS8I,GAAc3R,EAAI8P,EAAK,IAAKtW,EAAU,CAAA,EAAI,CACjD,OAAO8V,GACLO,GAAeC,EAAItW,CAAO,EAC1BwG,CACJ,CACA,CA4GA,SAAS4R,GAAgB7G,EAAQ8G,EAAIrY,EAAU,CAAA,EAAI,CACjD,KAAM,CACJ,YAAA2B,EAAcwU,GACd,GAAGmC,CACJ,EAAGtY,EACJ,OAAOuT,EAAK,MACVhC,EACAuE,GACEnU,EACA0W,CACD,EACDC,CACJ,CACA,CAEA,SAASC,GAAchH,EAAQ8G,EAAIrY,EAAU,CAAA,EAAI,CAC/C,KAAM,CACJ,YAAa+V,EACb,GAAGuC,CACJ,EAAGtY,EACE,CAAE,YAAA2B,EAAa,MAAAsV,EAAO,OAAAC,EAAQ,SAAAF,GAAaF,GAAef,CAAM,EAStE,MAAO,CAAE,KARIqC,GACX7G,EACA8G,EACA,CACE,GAAGC,EACH,YAAA3W,CACD,CACL,EACiB,MAAAsV,EAAO,OAAAC,EAAQ,SAAAF,CAAQ,CACxC,CAEA,SAASwB,GAAQ7L,EAAMC,KAAU,CAAC5M,CAAO,EAAG,CAC1C,KAAM,CACJ,MAAAyY,EAAQ,OACR,KAAAC,EAAO,GACP,UAAAC,EAAY,GACZ,UAAA/Y,EAAY,OACZ,UAAAgZ,EAAY,CAAE,CAClB,EAAM5Y,GAAW,CAAA,EACT6Y,EAAW,CAAA,EACXC,EAAe,QAASF,GAAaA,EAAU,MAAS7O,GAAMA,GAC9DgP,EAAe,QAASH,GAAaA,EAAU,MAAS7O,GAAMA,GACpE,OAAInK,IAAc,QAAUA,IAAc,QACxCiZ,EAAS,KAAKN,GACZ5L,EACCqM,GAAa,CACZH,EAAS,QAAS9I,GAAMA,EAAE,MAAO,CAAA,EACjCnD,EAAM,MAAQkM,EAAaE,CAAQ,EACnCH,EAAS,QAAS9I,GAAMA,EAAE,OAAQ,CAAA,CACnC,EACD,CAAE,MAAA0I,EAAO,KAAAC,EAAM,UAAAC,CAAW,CAChC,CAAK,GAEC/Y,IAAc,QAAUA,IAAc,QACxCiZ,EAAS,KAAKN,GACZ3L,EACCoM,GAAa,CACZH,EAAS,QAAS9I,GAAMA,EAAE,MAAO,CAAA,EACjCpD,EAAK,MAAQoM,EAAaC,CAAQ,EAClCH,EAAS,QAAS9I,GAAMA,EAAE,OAAQ,CAAA,CACnC,EACD,CAAE,MAAA0I,EAAO,KAAAC,EAAM,UAAAC,CAAW,CAChC,CAAK,EAEU,IAAM,CACjBE,EAAS,QAAS9I,GAAMA,EAAE,KAAM,CAAA,CACpC,CAEA,CAgEA,SAASkJ,GAAazS,EAAI0S,EAAO,GAAM7H,EAAQ,CAC5ByG,KAEfqB,YAAU3S,EAAI6K,CAAM,EACb6H,EACP1S,IAEA4S,EAAQ,SAAC5S,CAAE,CACf,CAmVA,SAAS6S,GAAchB,EAAIiB,EAAW,IAAKtZ,EAAU,CAAA,EAAI,CACvD,KAAM,CACJ,UAAA2Y,EAAY,GACZ,kBAAAY,EAAoB,EACrB,EAAGvZ,EACJ,IAAIuW,EAAQ,KACZ,MAAMS,EAAWrE,MAAI,EAAK,EAC1B,SAAS6G,GAAQ,CACXjD,IACF,cAAcA,CAAK,EACnBA,EAAQ,KAEX,CACD,SAASU,GAAQ,CACfD,EAAS,MAAQ,GACjBwC,GACD,CACD,SAAStC,GAAS,CAChB,MAAMuC,EAAgB5a,GAAQya,CAAQ,EAClCG,GAAiB,IAErBzC,EAAS,MAAQ,GACbuC,GACFlB,IACFmB,IACAjD,EAAQ,YAAY8B,EAAIoB,CAAa,EACtC,CAGD,GAFId,GAAavD,IACf8B,IACEwC,EAAK,MAACJ,CAAQ,GAAK,OAAOA,GAAa,WAAY,CACrD,MAAMK,EAAYpG,QAAM+F,EAAU,IAAM,CAClCtC,EAAS,OAAS5B,IACpB8B,GACR,CAAK,EACDpC,GAAkB6E,CAAS,CAC5B,CACD,OAAA7E,GAAkBmC,CAAK,EAChB,CACL,SAAAD,EACA,MAAAC,EACA,OAAAC,CACJ,CACA,CAsGA,SAAS0C,GAAYhb,EAAOoB,EAAU,GAAI,CACxC,KAAM,CACJ,OAAA6Z,EAAS,aACT,MAAAC,EACA,UAAAC,CACD,EAAG/Z,EACJ,OAAOrB,EAAQ,SAAC,IAAM,CACpB,IAAIqb,EAAWnb,GAAQD,CAAK,EAC5B,OAAI,OAAOob,GAAa,WACtBA,EAAW,OAAOH,CAAM,EAAEG,EAAUF,CAAK,GACvCC,GAAa,OAAO,MAAMC,CAAQ,IACpCA,EAAW,GACNA,CACX,CAAG,CACH,CChtCA,SAASC,GAAuBja,EAAU,GAAI,CAM5C,KAAM,CACJ,aAAAka,EAAe,EAChB,EAAGla,EACEma,EAASvH,EAAAA,aACTwH,EAAyBC,EAAAA,gBAAgB,CAC7C,MAAM5C,EAAG,CAAE,MAAA6C,GAAS,CAClB,MAAO,IAAM,CACXH,EAAO,MAAQG,EAAM,OAC7B,CACK,CACL,CAAG,EACKC,EAAwBF,EAAAA,gBAAgB,CAC5C,aAAAH,EACA,MAAMzC,EAAG,CAAE,MAAA+C,EAAO,MAAAF,CAAK,EAAI,CACzB,MAAO,IAAM,CACX,IAAI1E,EACJ,GAAI,CAACuE,EAAO,OAAS,QAAQ,IAAI,WAAa,aAC5C,MAAM,IAAI,MAAM,6DAA6D,EAC/E,MAAMM,GAAS7E,EAAKuE,EAAO,QAAU,KAAO,OAASvE,EAAG,KAAKuE,EAAQ,CAAE,GAAGO,GAAqBF,CAAK,EAAG,OAAQF,CAAK,CAAE,EACtH,OAAOJ,IAAiBO,GAAS,KAAO,OAASA,EAAM,UAAY,EAAIA,EAAM,CAAC,EAAIA,CAC1F,CACK,CACL,CAAG,EACD,OAAO1F,GACL,CAAE,OAAAqF,EAAQ,MAAAG,CAAO,EACjB,CAACH,EAAQG,CAAK,CAClB,CACA,CACA,SAASG,GAAqB1F,EAAK,CACjC,MAAM2F,EAAS,CAAA,EACf,UAAWC,KAAO5F,EAChB2F,EAAOnD,GAASoD,CAAG,CAAC,EAAI5F,EAAI4F,CAAG,EACjC,OAAOD,CACT,CA6DA,SAASE,GAAaC,EAAO,CAC3B,IAAIlF,EACJ,MAAMmF,EAAQlc,GAAQic,CAAK,EAC3B,OAAQlF,EAAKmF,GAAS,KAAO,OAASA,EAAM,MAAQ,KAAOnF,EAAKmF,CAClE,CAEA,MAAMC,GAAgB5F,GAAW,OAAS,OAK1C,SAAS6F,MAAoBxJ,EAAM,CACjC,IAAIJ,EACA6J,EACAC,EACAnb,EAOJ,GANI,OAAOyR,EAAK,CAAC,GAAM,UAAY,MAAM,QAAQA,EAAK,CAAC,CAAC,GACtD,CAACyJ,EAAQC,EAAWnb,CAAO,EAAIyR,EAC/BJ,EAAS2J,IAET,CAAC3J,EAAQ6J,EAAQC,EAAWnb,CAAO,EAAIyR,EAErC,CAACJ,EACH,OAAOoE,GACJ,MAAM,QAAQyF,CAAM,IACvBA,EAAS,CAACA,CAAM,GACb,MAAM,QAAQC,CAAS,IAC1BA,EAAY,CAACA,CAAS,GACxB,MAAMC,EAAW,CAAA,EACX/H,EAAU,IAAM,CACpB+H,EAAS,QAAS5U,GAAOA,EAAI,CAAA,EAC7B4U,EAAS,OAAS,CACtB,EACQC,EAAW,CAACtb,EAAI8B,EAAOyZ,EAAUC,KACrCxb,EAAG,iBAAiB8B,EAAOyZ,EAAUC,CAAQ,EACtC,IAAMxb,EAAG,oBAAoB8B,EAAOyZ,EAAUC,CAAQ,GAEzD5B,EAAYpG,EAAK,MACrB,IAAM,CAACsH,GAAaxJ,CAAM,EAAGxS,GAAQmB,CAAO,CAAC,EAC7C,CAAC,CAACD,EAAIwb,CAAQ,IAAM,CAElB,GADAlI,IACI,CAACtT,EACH,OACF,MAAMyb,EAAehG,GAAS+F,CAAQ,EAAI,CAAE,GAAGA,CAAU,EAAGA,EAC5DH,EAAS,KACP,GAAGF,EAAO,QAASrZ,GACVsZ,EAAU,IAAKG,GAAaD,EAAStb,EAAI8B,EAAOyZ,EAAUE,CAAY,CAAC,CAC/E,CACT,CACK,EACD,CAAE,UAAW,GAAM,MAAO,MAAQ,CACtC,EACQC,EAAO,IAAM,CACjB9B,IACAtG,GACJ,EACE,OAAAyB,GAAkB2G,CAAI,EACfA,CACT,CAEA,IAAIC,GAAiB,GACrB,SAASC,GAAetK,EAAQhQ,EAASrB,EAAU,CAAA,EAAI,CACrD,KAAM,CAAE,OAAA4b,EAASZ,GAAe,OAAAa,EAAS,CAAE,EAAE,QAAAC,EAAU,GAAM,aAAAC,EAAe,EAAO,EAAG/b,EACtF,GAAI,CAAC4b,EACH,OAAOnG,GACLC,IAAS,CAACgG,KACZA,GAAiB,GACjB,MAAM,KAAKE,EAAO,SAAS,KAAK,QAAQ,EAAE,QAAS7b,GAAOA,EAAG,iBAAiB,QAAS0V,EAAI,CAAC,EAC5FmG,EAAO,SAAS,gBAAgB,iBAAiB,QAASnG,EAAI,GAEhE,IAAIuG,EAAe,GACnB,MAAMC,EAAgBpa,GACbga,EAAO,KAAMK,GAAY,CAC9B,GAAI,OAAOA,GAAY,SACrB,OAAO,MAAM,KAAKN,EAAO,SAAS,iBAAiBM,CAAO,CAAC,EAAE,KAAMnc,GAAOA,IAAO8B,EAAM,QAAUA,EAAM,aAAY,EAAG,SAAS9B,CAAE,CAAC,EAC7H,CACL,MAAMA,EAAK8a,GAAaqB,CAAO,EAC/B,OAAOnc,IAAO8B,EAAM,SAAW9B,GAAM8B,EAAM,eAAe,SAAS9B,CAAE,EACtE,CACP,CAAK,EAcGsT,EAAU,CACd4H,GAAiBW,EAAQ,QAbT/Z,GAAU,CAC1B,MAAM9B,EAAK8a,GAAaxJ,CAAM,EAC9B,GAAI,GAACtR,GAAMA,IAAO8B,EAAM,QAAUA,EAAM,aAAY,EAAG,SAAS9B,CAAE,GAIlE,IAFI8B,EAAM,SAAW,IACnBma,EAAe,CAACC,EAAapa,CAAK,GAChC,CAACma,EAAc,CACjBA,EAAe,GACf,MACD,CACD3a,EAAQQ,CAAK,EACjB,EAEgD,CAAE,QAAS,GAAM,QAAAia,EAAS,EACtEb,GAAiBW,EAAQ,cAAgBvb,GAAM,CAC7C,MAAMN,EAAK8a,GAAaxJ,CAAM,EAC9B2K,EAAe,CAACC,EAAa5b,CAAC,GAAK,CAAC,EAAEN,GAAM,CAACM,EAAE,aAAc,EAAC,SAASN,CAAE,EAC/E,EAAO,CAAE,QAAS,GAAM,EACpBgc,GAAgBd,GAAiBW,EAAQ,OAAS/Z,GAAU,CAC1D,WAAW,IAAM,CACf,IAAI+T,EACJ,MAAM7V,EAAK8a,GAAaxJ,CAAM,IACxBuE,EAAKgG,EAAO,SAAS,gBAAkB,KAAO,OAAShG,EAAG,WAAa,UAAY,EAAE7V,GAAM,MAAgBA,EAAG,SAAS6b,EAAO,SAAS,aAAa,IACxJva,EAAQQ,CAAK,CAEhB,EAAE,CAAC,CACV,CAAK,CACL,EAAI,OAAO,OAAO,EAEhB,MADa,IAAMwR,EAAQ,QAAS7M,GAAOA,EAAE,CAAE,CAEjD,CAEA,SAAS2V,GAAmBC,EAAW,CACrC,OAAI,OAAOA,GAAc,WAChBA,EACA,OAAOA,GAAc,SACpBva,GAAUA,EAAM,MAAQua,EACzB,MAAM,QAAQA,CAAS,EACtBva,GAAUua,EAAU,SAASva,EAAM,GAAG,EACzC,IAAM,EACf,CACA,SAASwa,MAAe5K,EAAM,CAC5B,IAAImJ,EACAvZ,EACArB,EAAU,CAAA,EACVyR,EAAK,SAAW,GAClBmJ,EAAMnJ,EAAK,CAAC,EACZpQ,EAAUoQ,EAAK,CAAC,EAChBzR,EAAUyR,EAAK,CAAC,GACPA,EAAK,SAAW,EACrB,OAAOA,EAAK,CAAC,GAAM,UACrBmJ,EAAM,GACNvZ,EAAUoQ,EAAK,CAAC,EAChBzR,EAAUyR,EAAK,CAAC,IAEhBmJ,EAAMnJ,EAAK,CAAC,EACZpQ,EAAUoQ,EAAK,CAAC,IAGlBmJ,EAAM,GACNvZ,EAAUoQ,EAAK,CAAC,GAElB,KAAM,CACJ,OAAAJ,EAAS2J,GACT,UAAA5Z,EAAY,UACZ,QAAAkb,EAAU,GACV,OAAAC,EAAS,EACV,EAAGvc,EACEwc,EAAYL,GAAmBvB,CAAG,EAOxC,OAAOK,GAAiB5J,EAAQjQ,EANdf,GAAM,CAClBA,EAAE,QAAUxB,GAAQ0d,CAAM,GAE1BC,EAAUnc,CAAC,GACbgB,EAAQhB,CAAC,CACf,EACuDic,CAAO,CAC9D,CA4JA,SAASG,IAAa,CACpB,MAAMC,EAAY/J,MAAI,EAAK,EACrBgK,EAAW5E,EAAAA,qBACjB,OAAI4E,GACFxD,EAAAA,UAAU,IAAM,CACduD,EAAU,MAAQ,EACnB,EAAoBC,CAAQ,EAExBD,CACT,CAEA,SAASE,GAAaC,EAAU,CAC9B,MAAMH,EAAYD,KAClB,OAAO9d,EAAQ,SAAC,KACd+d,EAAU,MACH,EAAQG,EAAQ,EACxB,CACH,CAEA,SAASC,GAAoBzL,EAAQwL,EAAU7c,EAAU,CAAA,EAAI,CAC3D,KAAM,CAAE,OAAA4b,EAASZ,GAAe,GAAG+B,CAAe,EAAK/c,EACvD,IAAIgd,EACJ,MAAMC,EAAcL,GAAa,IAAMhB,GAAU,qBAAsBA,CAAM,EACvEvI,EAAU,IAAM,CAChB2J,IACFA,EAAS,WAAU,EACnBA,EAAW,OAEjB,EACQE,EAAUve,EAAAA,SAAS,IAAM,CAC7B,MAAMC,EAAQC,GAAQwS,CAAM,EACtB8L,GAAS,MAAM,QAAQve,CAAK,EAAIA,EAAQ,CAACA,CAAK,GAAG,IAAIic,EAAY,EAAE,OAAOxF,EAAU,EAC1F,OAAO,IAAI,IAAI8H,CAAK,CACxB,CAAG,EACKxD,EAAYpG,EAAK,MACrB,IAAM2J,EAAQ,MACbE,GAAa,CACZ/J,IACI4J,EAAY,OAASG,EAAS,OAChCJ,EAAW,IAAI,iBAAiBH,CAAQ,EACxCO,EAAS,QAASrd,GAAOid,EAAS,QAAQjd,EAAIgd,CAAe,CAAC,EAEjE,EACD,CAAE,UAAW,GAAM,MAAO,MAAQ,CACtC,EACQM,EAAc,IACXL,GAAY,KAAO,OAASA,EAAS,YAAW,EAEnDvB,EAAO,IAAM,CACjBpI,IACAsG,GACJ,EACE,OAAA7E,GAAkB2G,CAAI,EACf,CACL,YAAAwB,EACA,KAAAxB,EACA,YAAA4B,CACJ,CACA,CAunBA,SAASC,GAAcC,EAAOvd,EAAU,GAAI,CAC1C,KAAM,CAAE,OAAA4b,EAASZ,EAAe,EAAGhb,EAC7Bid,EAAcL,GAAa,IAAMhB,GAAU,eAAgBA,GAAU,OAAOA,EAAO,YAAe,UAAU,EAClH,IAAI4B,EACJ,MAAMC,EAAU9K,MAAI,EAAK,EACnBtR,EAAWQ,GAAU,CACzB4b,EAAQ,MAAQ5b,EAAM,OAC1B,EACQwR,EAAU,IAAM,CACfmK,IAED,wBAAyBA,EAC3BA,EAAW,oBAAoB,SAAUnc,CAAO,EAEhDmc,EAAW,eAAenc,CAAO,EACvC,EACQsY,EAAY+D,EAAAA,YAAY,IAAM,CAC7BT,EAAY,QAEjB5J,IACAmK,EAAa5B,EAAO,WAAW/c,GAAQ0e,CAAK,CAAC,EACzC,qBAAsBC,EACxBA,EAAW,iBAAiB,SAAUnc,CAAO,EAE7Cmc,EAAW,YAAYnc,CAAO,EAChCoc,EAAQ,MAAQD,EAAW,QAC/B,CAAG,EACD,OAAA1I,GAAkB,IAAM,CACtB6E,IACAtG,IACAmK,EAAa,MACjB,CAAG,EACMC,CACT,CASA,MAAME,GAAyB,CAC7B,GAAI,EACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,KACJ,IAAK,IACP,EA4DA,SAASC,GAAeC,EAAa7d,EAAU,GAAI,CACjD,SAAS8d,EAASC,EAAGpG,EAAO,CAC1B,IAAI5N,EAAIlL,GAAQgf,EAAYhf,GAAQkf,CAAC,CAAC,CAAC,EACvC,OAAIpG,GAAS,OACX5N,EAAI2N,GAAiB3N,EAAG4N,CAAK,GAC3B,OAAO5N,GAAM,WACfA,EAAI,GAAGA,CAAC,MACHA,CACR,CACD,KAAM,CAAE,OAAA6R,EAASZ,GAAe,SAAAnV,EAAW,WAAW,EAAK7F,EAC3D,SAASge,EAAMT,EAAO,CACpB,OAAK3B,EAEEA,EAAO,WAAW2B,CAAK,EAAE,QADvB,EAEV,CACD,MAAMU,EAAkBF,GACfT,GAAc,IAAM,eAAeQ,EAASC,CAAC,CAAC,IAAK/d,CAAO,EAE7Dke,EAAkBH,GACfT,GAAc,IAAM,eAAeQ,EAASC,CAAC,CAAC,IAAK/d,CAAO,EAE7Dme,EAAkB,OAAO,KAAKN,CAAW,EAAE,OAAO,CAACO,EAAWL,KAClE,OAAO,eAAeK,EAAWL,EAAG,CAClC,IAAK,IAAMlY,IAAa,YAAcoY,EAAeF,CAAC,EAAIG,EAAeH,CAAC,EAC1E,WAAY,GACZ,aAAc,EACpB,CAAK,EACMK,GACN,CAAE,CAAA,EACL,SAASC,GAAU,CACjB,MAAMC,EAAS,OAAO,KAAKT,CAAW,EAAE,IAAKvX,GAAM,CAACA,EAAG2X,EAAe3X,CAAC,CAAC,CAAC,EACzE,OAAO3H,EAAAA,SAAS,IAAM2f,EAAO,OAAO,CAAC,CAAA,CAAGvU,CAAC,IAAMA,EAAE,KAAK,EAAE,IAAI,CAAC,CAACgU,CAAC,IAAMA,CAAC,CAAC,CACxE,CACD,OAAO,OAAO,OAAOI,EAAiB,CACpC,eAAAF,EACA,eAAAC,EACA,QAAQH,EAAG,CACT,OAAOT,GAAc,IAAM,eAAeQ,EAASC,EAAG,EAAG,CAAC,IAAK/d,CAAO,CACvE,EACD,QAAQ+d,EAAG,CACT,OAAOT,GAAc,IAAM,eAAeQ,EAASC,EAAG,GAAI,CAAC,IAAK/d,CAAO,CACxE,EACD,QAAQgK,EAAGC,EAAG,CACZ,OAAOqT,GAAc,IAAM,eAAeQ,EAAS9T,CAAC,CAAC,qBAAqB8T,EAAS7T,EAAG,GAAI,CAAC,IAAKjK,CAAO,CACxG,EACD,UAAU+d,EAAG,CACX,OAAOC,EAAM,eAAeF,EAASC,EAAG,EAAG,CAAC,GAAG,CAChD,EACD,iBAAiBA,EAAG,CAClB,OAAOC,EAAM,eAAeF,EAASC,CAAC,CAAC,GAAG,CAC3C,EACD,UAAUA,EAAG,CACX,OAAOC,EAAM,eAAeF,EAASC,EAAG,GAAI,CAAC,GAAG,CACjD,EACD,iBAAiBA,EAAG,CAClB,OAAOC,EAAM,eAAeF,EAASC,CAAC,CAAC,GAAG,CAC3C,EACD,YAAY/T,EAAGC,EAAG,CAChB,OAAO+T,EAAM,eAAeF,EAAS9T,CAAC,CAAC,qBAAqB8T,EAAS7T,EAAG,GAAI,CAAC,GAAG,CACjF,EACD,QAAAoU,EACA,QAAS,CACP,MAAME,EAAMF,IACZ,OAAO1f,EAAQ,SAAC,IAAM4f,EAAI,MAAM,SAAW,EAAI,GAAKA,EAAI,MAAM,GAAG,EAAE,CAAC,CACrE,CACL,CAAG,CACH,CA2QA,MAAMC,GAAU,OAAO,WAAe,IAAc,WAAa,OAAO,OAAW,IAAc,OAAS,OAAO,OAAW,IAAc,OAAS,OAAO,KAAS,IAAc,KAAO,GAClLC,GAAY,0BACZC,GAA2BC,GAAW,EAC5C,SAASA,IAAc,CACrB,OAAMF,MAAaD,KACjBA,GAAQC,EAAS,EAAID,GAAQC,EAAS,GAAK,CAAA,GACtCD,GAAQC,EAAS,CAC1B,CACA,SAASG,GAAchE,EAAKxO,EAAU,CACpC,OAAOsS,GAAS9D,CAAG,GAAKxO,CAC1B,CAKA,SAASyS,GAAoBC,EAAS,CACpC,OAAOA,GAAW,KAAO,MAAQA,aAAmB,IAAM,MAAQA,aAAmB,IAAM,MAAQA,aAAmB,KAAO,OAAS,OAAOA,GAAY,UAAY,UAAY,OAAOA,GAAY,SAAW,SAAW,OAAOA,GAAY,SAAW,SAAY,OAAO,MAAMA,CAAO,EAAe,MAAX,QAC9R,CAEA,MAAMC,GAAqB,CACzB,QAAS,CACP,KAAOhV,GAAMA,IAAM,OACnB,MAAQA,GAAM,OAAOA,CAAC,CACvB,EACD,OAAQ,CACN,KAAOA,GAAM,KAAK,MAAMA,CAAC,EACzB,MAAQA,GAAM,KAAK,UAAUA,CAAC,CAC/B,EACD,OAAQ,CACN,KAAOA,GAAM,OAAO,WAAWA,CAAC,EAChC,MAAQA,GAAM,OAAOA,CAAC,CACvB,EACD,IAAK,CACH,KAAOA,GAAMA,EACb,MAAQA,GAAM,OAAOA,CAAC,CACvB,EACD,OAAQ,CACN,KAAOA,GAAMA,EACb,MAAQA,GAAM,OAAOA,CAAC,CACvB,EACD,IAAK,CACH,KAAOA,GAAM,IAAI,IAAI,KAAK,MAAMA,CAAC,CAAC,EAClC,MAAQA,GAAM,KAAK,UAAU,MAAM,KAAKA,EAAE,QAAO,CAAE,CAAC,CACrD,EACD,IAAK,CACH,KAAOA,GAAM,IAAI,IAAI,KAAK,MAAMA,CAAC,CAAC,EAClC,MAAQA,GAAM,KAAK,UAAU,MAAM,KAAKA,CAAC,CAAC,CAC3C,EACD,KAAM,CACJ,KAAOA,GAAM,IAAI,KAAKA,CAAC,EACvB,MAAQA,GAAMA,EAAE,YAAa,CAC9B,CACH,EACMiV,GAAyB,iBAC/B,SAASC,GAAWrE,EAAKsE,EAAUC,EAASnf,EAAU,CAAA,EAAI,CACxD,IAAI4V,EACJ,KAAM,CACJ,MAAA6C,EAAQ,MACR,KAAAC,EAAO,GACP,uBAAA0G,EAAyB,GACzB,cAAAC,EAAgB,GAChB,cAAAC,EAAgB,GAChB,QAAAC,EACA,OAAA3D,EAASZ,GACT,YAAArZ,EACA,QAAA6d,EAAWnf,GAAM,CACf,QAAQ,MAAMA,CAAC,CAChB,EACD,cAAAof,CACD,EAAGzf,EACE2G,GAAQ4Y,EAAU3M,EAAAA,WAAaD,EAAG,KAAE,OAAOuM,GAAa,WAAaA,IAAaA,CAAQ,EAChG,GAAI,CAACC,EACH,GAAI,CACFA,EAAUP,GAAc,oBAAqB,IAAM,CACjD,IAAIc,EACJ,OAAQA,EAAM1E,KAAkB,KAAO,OAAS0E,EAAI,YACrD,CAAA,GACF,OAAQrf,EAAG,CACVmf,EAAQnf,CAAC,CACV,CAEH,GAAI,CAAC8e,EACH,OAAOxY,EACT,MAAMmY,EAAUjgB,GAAQqgB,CAAQ,EAC1BS,EAAOd,GAAoBC,CAAO,EAClCc,GAAchK,EAAK5V,EAAQ,aAAe,KAAO4V,EAAKmJ,GAAmBY,CAAI,EAC7E,CAAE,MAAOE,EAAY,OAAQC,CAAa,EAAGC,GACjDpZ,EACA,IAAMqZ,EAAMrZ,EAAK,KAAK,EACtB,CAAE,MAAA8R,EAAO,KAAAC,EAAM,YAAA/W,CAAa,CAChC,EACMia,GAAUwD,GACZnG,GAAa,IAAM,CACjBgC,GAAiBW,EAAQ,UAAWzI,CAAM,EAC1C8H,GAAiBW,EAAQoD,GAAwBiB,CAAqB,EAClER,GACFtM,GACR,CAAK,EAEEsM,GACHtM,IACF,SAAS+M,EAAmBC,EAAUnH,EAAU,CAC1C4C,GACFA,EAAO,cAAc,IAAI,YAAYoD,GAAwB,CAC3D,OAAQ,CACN,IAAApE,EACA,SAAAuF,EACA,SAAAnH,EACA,YAAamG,CACd,CACF,CAAA,CAAC,CAEL,CACD,SAASa,EAAMjW,EAAG,CAChB,GAAI,CACF,MAAMoW,EAAWhB,EAAQ,QAAQvE,CAAG,EACpC,GAAI7Q,GAAK,KACPmW,EAAmBC,EAAU,IAAI,EACjChB,EAAQ,WAAWvE,CAAG,MACjB,CACL,MAAMwF,EAAaR,EAAW,MAAM7V,CAAC,EACjCoW,IAAaC,IACfjB,EAAQ,QAAQvE,EAAKwF,CAAU,EAC/BF,EAAmBC,EAAUC,CAAU,EAE1C,CACF,OAAQ/f,EAAG,CACVmf,EAAQnf,CAAC,CACV,CACF,CACD,SAASggB,EAAKxe,EAAO,CACnB,MAAM0L,EAAW1L,EAAQA,EAAM,SAAWsd,EAAQ,QAAQvE,CAAG,EAC7D,GAAIrN,GAAY,KACd,OAAI8R,GAAiBP,GAAW,MAC9BK,EAAQ,QAAQvE,EAAKgF,EAAW,MAAMd,CAAO,CAAC,EACzCA,EACF,GAAI,CAACjd,GAASyd,EAAe,CAClC,MAAM1gB,EAAQghB,EAAW,KAAKrS,CAAQ,EACtC,OAAI,OAAO+R,GAAkB,WACpBA,EAAc1gB,EAAOkgB,CAAO,EAC5Ba,IAAS,UAAY,CAAC,MAAM,QAAQ/gB,CAAK,EACzC,CAAE,GAAGkgB,EAAS,GAAGlgB,GACnBA,CACb,KAAW,QAAI,OAAO2O,GAAa,SACtBA,EAEAqS,EAAW,KAAKrS,CAAQ,CAElC,CACD,SAAS4F,EAAOtR,EAAO,CACrB,GAAI,EAAAA,GAASA,EAAM,cAAgBsd,GAEnC,IAAItd,GAASA,EAAM,KAAO,KAAM,CAC9B8E,EAAK,MAAQmY,EACb,MACD,CACD,GAAI,EAAAjd,GAASA,EAAM,MAAQ+Y,GAE3B,CAAAiF,IACA,GAAI,EACGhe,GAAS,KAAO,OAASA,EAAM,YAAc+d,EAAW,MAAMjZ,EAAK,KAAK,IAC3EA,EAAK,MAAQ0Z,EAAKxe,CAAK,EAC1B,OAAQxB,EAAG,CACVmf,EAAQnf,CAAC,CACf,QAAc,CACJwB,EACFuX,EAAQ,SAAC0G,CAAW,EAEpBA,GACH,GACF,CACD,SAASG,EAAsBpe,EAAO,CACpCsR,EAAOtR,EAAM,MAAM,CACpB,CACD,OAAO8E,CACT,CAEA,SAAS2Z,GAAiBtgB,EAAS,CACjC,OAAOsd,GAAc,+BAAgCtd,CAAO,CAC9D,CAEA,SAASugB,GAAavgB,EAAU,GAAI,CAClC,KAAM,CACJ,SAAAwgB,EAAW,OACX,UAAAxM,EAAY,QACZ,aAAAyM,EAAe,OACf,OAAA7E,EAASZ,GACT,QAAAmE,EACA,WAAAuB,EAAa,sBACb,uBAAAtB,EAAyB,GACzB,WAAAuB,EACA,SAAAC,EACA,kBAAAC,EAAoB,EACrB,EAAG7gB,EACE8gB,EAAQ,CACZ,KAAM,GACN,MAAO,QACP,KAAM,OACN,GAAG9gB,EAAQ,OAAS,CAAE,CAC1B,EACQ+gB,EAAgBT,GAAiB,CAAE,OAAA1E,CAAQ,CAAA,EAC3CoF,EAASriB,EAAAA,SAAS,IAAMoiB,EAAc,MAAQ,OAAS,OAAO,EAC9DE,EAAQN,IAAeD,GAAc,KAAO1I,GAAMyI,CAAY,EAAIxB,GAAWyB,EAAYD,EAActB,EAAS,CAAE,OAAAvD,EAAQ,uBAAAwD,CAAwB,CAAA,GAClJpgB,EAAQL,EAAAA,SAAS,IAAMsiB,EAAM,QAAU,OAASD,EAAO,MAAQC,EAAM,KAAK,EAC1EC,EAAkBtC,GACtB,kBACA,CAACuC,EAAWC,EAAYxiB,IAAU,CAChC,MAAMmB,EAAK,OAAOohB,GAAc,SAAWvF,GAAU,KAAO,OAASA,EAAO,SAAS,cAAcuF,CAAS,EAAItG,GAAasG,CAAS,EACtI,GAAI,CAACphB,EACH,OACF,IAAIY,EAOJ,GANIkgB,IACFlgB,EAAQib,EAAO,SAAS,cAAc,OAAO,EAE7Cjb,EAAM,YAAY,SAAS,eADP,6KACiC,CAAC,EACtDib,EAAO,SAAS,KAAK,YAAYjb,CAAK,GAEpCygB,IAAe,QAAS,CAC1B,MAAM/C,EAAUzf,EAAM,MAAM,KAAK,EACjC,OAAO,OAAOkiB,CAAK,EAAE,QAASxa,IAAOA,GAAK,IAAI,MAAM,KAAK,CAAC,EAAE,OAAO,OAAO,EAAE,QAASyD,GAAM,CACrFsU,EAAQ,SAAStU,CAAC,EACpBhK,EAAG,UAAU,IAAIgK,CAAC,EAElBhK,EAAG,UAAU,OAAOgK,CAAC,CACjC,CAAS,CACT,MACQhK,EAAG,aAAaqhB,EAAYxiB,CAAK,EAE/BiiB,IACFjF,EAAO,iBAAiBjb,CAAK,EAAE,QAC/B,SAAS,KAAK,YAAYA,CAAK,EAElC,CACL,EACE,SAAS0gB,EAAiBC,EAAM,CAC9B,IAAI1L,EACJsL,EAAgBV,EAAUxM,GAAY4B,EAAKkL,EAAMQ,CAAI,IAAM,KAAO1L,EAAK0L,CAAI,CAC5E,CACD,SAASC,EAAUD,EAAM,CACnBthB,EAAQ,UACVA,EAAQ,UAAUshB,EAAMD,CAAgB,EAExCA,EAAiBC,CAAI,CACxB,CACD/N,QAAMvU,EAAOuiB,EAAW,CAAE,MAAO,OAAQ,UAAW,EAAI,CAAE,EAC1DtI,GAAa,IAAMsI,EAAUviB,EAAM,KAAK,CAAC,EACzC,MAAMwiB,EAAO7iB,EAAAA,SAAS,CACpB,KAAM,CACJ,OAAOiiB,EAAWK,EAAM,MAAQjiB,EAAM,KACvC,EACD,IAAI+K,EAAG,CACLkX,EAAM,MAAQlX,CACf,CACL,CAAG,EACD,GAAI,CACF,OAAO,OAAO,OAAOyX,EAAM,CAAE,MAAAP,EAAO,OAAAD,EAAQ,MAAAhiB,CAAK,CAAE,CACpD,MAAW,CACV,OAAOwiB,CACR,CACH,CAyyBA,SAASC,GAAgB1hB,EAAIC,EAAU,GAAI,CACzC,KAAM,CACJ,WAAA0hB,EAAa,EACb,WAAAC,EAAa,EACb,OAAA/F,EAASZ,EACV,EAAGhb,EACE4hB,EAAYjP,MAAI,EAAK,EAC3B,IAAI4D,EACJ,MAAMsL,EAAUC,GAAa,CAC3B,MAAMC,EAAQD,EAAWJ,EAAaC,EAClCpL,IACF,aAAaA,CAAK,EAClBA,EAAQ,QAENwL,EACFxL,EAAQ,WAAW,IAAMqL,EAAU,MAAQE,EAAUC,CAAK,EAE1DH,EAAU,MAAQE,CACxB,EACE,OAAKlG,IAELX,GAAiBlb,EAAI,aAAc,IAAM8hB,EAAO,EAAI,EAAG,CAAE,QAAS,EAAI,CAAE,EACxE5G,GAAiBlb,EAAI,aAAc,IAAM8hB,EAAO,EAAK,EAAG,CAAE,QAAS,EAAI,CAAE,GAClED,CACT,CA2DA,SAASI,GAAwB3Q,EAAQwL,EAAU7c,EAAU,CAAA,EAAI,CAC/D,KAAM,CACJ,KAAAiiB,EACA,WAAAC,EAAa,MACb,UAAAC,EAAY,GACZ,OAAAvG,EAASZ,GACT,UAAArC,EAAY,EACb,EAAG3Y,EACEid,EAAcL,GAAa,IAAMhB,GAAU,yBAA0BA,CAAM,EAC3EsB,EAAUve,EAAAA,SAAS,IAAM,CAC7B,MAAMyjB,EAAUvjB,GAAQwS,CAAM,EAC9B,OAAQ,MAAM,QAAQ+Q,CAAO,EAAIA,EAAU,CAACA,CAAO,GAAG,IAAIvH,EAAY,EAAE,OAAOxF,EAAU,CAC7F,CAAG,EACD,IAAIhC,EAAUoC,GACd,MAAMuB,EAAWrE,MAAIgG,CAAS,EACxBgB,EAAYsD,EAAY,MAAQ1J,EAAK,MACzC,IAAM,CAAC2J,EAAQ,MAAOrC,GAAaoH,CAAI,EAAGjL,EAAS,KAAK,EACxD,CAAC,CAACoG,EAAUiF,CAAK,IAAM,CAIrB,GAHAhP,IACI,CAAC2D,EAAS,OAEV,CAACoG,EAAS,OACZ,OACF,MAAMJ,EAAW,IAAI,qBACnBH,EACA,CACE,KAAMhC,GAAawH,CAAK,EACxB,WAAAH,EACA,UAAAC,CACD,CACT,EACM/E,EAAS,QAASrd,GAAOA,GAAMid,EAAS,QAAQjd,CAAE,CAAC,EACnDsT,EAAU,IAAM,CACd2J,EAAS,WAAU,EACnB3J,EAAUoC,EAClB,CACK,EACD,CAAE,UAAAkD,EAAW,MAAO,MAAQ,CAC7B,EAAGlD,GACEgG,EAAO,IAAM,CACjBpI,IACAsG,IACA3C,EAAS,MAAQ,EACrB,EACE,OAAAlC,GAAkB2G,CAAI,EACf,CACL,YAAAwB,EACA,SAAAjG,EACA,OAAQ,CACN3D,IACA2D,EAAS,MAAQ,EAClB,EACD,QAAS,CACPA,EAAS,MAAQ,EAClB,EACD,KAAAyE,CACJ,CACA,CA2qBA,SAAS6G,GAASjR,EAAQrR,EAAU,GAAI,CACtC,KAAM,CAAE,aAAAygB,EAAe,GAAO,aAAA8B,EAAe,GAAO,cAAAC,EAAgB,EAAO,EAAGxiB,EACxEyiB,EAAe9P,MAAI,EAAK,EACxB+P,EAAgB/jB,EAAQ,SAAC,IAAMkc,GAAaxJ,CAAM,CAAC,EACzD4J,GAAiByH,EAAe,QAAU7gB,GAAU,CAClD,IAAI+T,EAAIC,GACJ,CAAC0M,IAAkB1M,GAAMD,EAAK/T,EAAM,QAAQ,UAAY,MAAgBgU,EAAG,KAAKD,EAAI,gBAAgB,KACtG6M,EAAa,MAAQ,GAC3B,CAAG,EACDxH,GAAiByH,EAAe,OAAQ,IAAMD,EAAa,MAAQ,EAAK,EACxE,MAAME,EAAUhkB,EAAAA,SAAS,CACvB,IAAK,IAAM8jB,EAAa,MACxB,IAAI7jB,EAAO,CACT,IAAIgX,EAAIC,EACJ,CAACjX,GAAS6jB,EAAa,OACxB7M,EAAK8M,EAAc,QAAU,MAAgB9M,EAAG,OAC1ChX,GAAS,CAAC6jB,EAAa,SAC7B5M,EAAK6M,EAAc,QAAU,MAAgB7M,EAAG,MAAM,CAAE,cAAA2M,CAAa,CAAE,EAC3E,CACL,CAAG,EACDjP,OAAAA,EAAK,MACHmP,EACA,IAAM,CACJC,EAAQ,MAAQlC,CACjB,EACD,CAAE,UAAW,GAAM,MAAO,MAAQ,CACtC,EACS,CAAE,QAAAkC,CAAO,CAClB,CAkjBA,SAASC,GAAe7iB,EAAI,CAC1B,OAAI,OAAO,OAAW,KAAeA,aAAc,OAC1CA,EAAG,SAAS,gBACjB,OAAO,SAAa,KAAeA,aAAc,SAC5CA,EAAG,gBACLA,CACT,CAodA,MAAM8iB,GAA4B,CAChC,KAAOhhB,GAAU,CAACA,EAAM,MAAOA,EAAM,KAAK,EAC1C,OAASA,GAAU,CAACA,EAAM,QAASA,EAAM,OAAO,EAChD,OAASA,GAAU,CAACA,EAAM,QAASA,EAAM,OAAO,EAChD,SAAWA,GAAUA,aAAiB,MAAQ,KAAO,CAACA,EAAM,UAAWA,EAAM,SAAS,CACxF,EACA,SAASihB,GAAS9iB,EAAU,GAAI,CAC9B,KAAM,CACJ,KAAA2f,EAAO,OACP,MAAAoD,EAAQ,GACR,iBAAAC,EAAmB,GACnB,aAAAvC,EAAe,CAAE,EAAG,EAAG,EAAG,CAAG,EAC7B,OAAA7E,EAASZ,GACT,OAAA3J,EAASuK,EACT,OAAAqH,EAAS,GACT,YAAAthB,CACD,EAAG3B,EACJ,IAAIkjB,EAAkB,KACtB,MAAMjd,EAAI0M,EAAAA,IAAI8N,EAAa,CAAC,EACtBva,EAAIyM,EAAAA,IAAI8N,EAAa,CAAC,EACtB0C,EAAaxQ,MAAI,IAAI,EACrByQ,EAAY,OAAOzD,GAAS,WAAaA,EAAOkD,GAA0BlD,CAAI,EAC9E0D,EAAgBxhB,GAAU,CAC9B,MAAMgW,EAASuL,EAAUvhB,CAAK,EAC9BqhB,EAAkBrhB,EACdgW,IACF,CAAC5R,EAAE,MAAOC,EAAE,KAAK,EAAI2R,EACrBsL,EAAW,MAAQ,QAEzB,EACQG,EAAgBzhB,GAAU,CAC9B,GAAIA,EAAM,QAAQ,OAAS,EAAG,CAC5B,MAAMgW,EAASuL,EAAUvhB,EAAM,QAAQ,CAAC,CAAC,EACrCgW,IACF,CAAC5R,EAAE,MAAOC,EAAE,KAAK,EAAI2R,EACrBsL,EAAW,MAAQ,QAEtB,CACL,EACQI,EAAgB,IAAM,CAC1B,GAAI,CAACL,GAAmB,CAACtH,EACvB,OACF,MAAM4H,EAAMJ,EAAUF,CAAe,EACjCA,aAA2B,YAAcM,IAC3Cvd,EAAE,MAAQud,EAAI,CAAC,EAAI5H,EAAO,QAC1B1V,EAAE,MAAQsd,EAAI,CAAC,EAAI5H,EAAO,QAEhC,EACQhV,EAAQ,IAAM,CAClBX,EAAE,MAAQwa,EAAa,EACvBva,EAAE,MAAQua,EAAa,CAC3B,EACQgD,EAAsB9hB,EAAeE,GAAUF,EAAY,IAAM0hB,EAAaxhB,CAAK,EAAG,CAAE,CAAA,EAAKA,GAAUwhB,EAAaxhB,CAAK,EACzH6hB,EAAsB/hB,EAAeE,GAAUF,EAAY,IAAM2hB,EAAazhB,CAAK,EAAG,CAAE,CAAA,EAAKA,GAAUyhB,EAAazhB,CAAK,EACzH8hB,EAAuBhiB,EAAc,IAAMA,EAAY,IAAM4hB,EAAa,EAAI,CAAE,CAAA,EAAI,IAAMA,IAChG,GAAIlS,EAAQ,CACV,MAAMuS,EAAkB,CAAE,QAAS,IACnC3I,GAAiB5J,EAAQ,CAAC,YAAa,UAAU,EAAGoS,EAAqBG,CAAe,EACpFb,GAASpD,IAAS,aACpB1E,GAAiB5J,EAAQ,CAAC,aAAc,WAAW,EAAGqS,EAAqBE,CAAe,EACtFZ,GACF/H,GAAiB5J,EAAQ,WAAYzK,EAAOgd,CAAe,GAE3DX,GAAUtD,IAAS,QACrB1E,GAAiBW,EAAQ,SAAU+H,EAAsB,CAAE,QAAS,EAAI,CAAE,CAC7E,CACD,MAAO,CACL,EAAA1d,EACA,EAAAC,EACA,WAAAid,CACJ,CACA,CAEA,SAASU,GAAkBxS,EAAQrR,EAAU,GAAI,CAC/C,KAAM,CACJ,cAAA8jB,EAAgB,GAChB,OAAAlI,EAASZ,EACV,EAAGhb,EACE2f,EAAO3f,EAAQ,MAAQ,OACvB,CAAE,EAAAiG,EAAG,EAAAC,EAAG,WAAAid,CAAU,EAAKL,GAAS9iB,CAAO,EACvC+jB,EAAYpR,EAAG,IAACtB,IAA0BuK,GAAU,KAAO,OAASA,EAAO,SAAS,KAAI,EACxFoI,EAAWrR,MAAI,CAAC,EAChBsR,EAAWtR,MAAI,CAAC,EAChBuR,EAAmBvR,MAAI,CAAC,EACxBwR,EAAmBxR,MAAI,CAAC,EACxByR,EAAgBzR,MAAI,CAAC,EACrB0R,EAAe1R,MAAI,CAAC,EACpB2R,EAAY3R,MAAI,EAAI,EAC1B,IAAI8I,EAAO,IAAM,CACnB,EACE,OAAIG,IACFH,EAAOlI,EAAK,MACV,CAACwQ,EAAW9d,EAAGC,CAAC,EAChB,IAAM,CACJ,MAAMnG,EAAK8a,GAAakJ,CAAS,EACjC,GAAI,CAAChkB,EACH,OACF,KAAM,CACJ,KAAA4M,EACA,IAAAF,EACA,MAAAI,EACA,OAAAC,CACV,EAAY/M,EAAG,wBACPmkB,EAAiB,MAAQvX,GAAQgT,IAAS,OAAS/D,EAAO,YAAc,GACxEuI,EAAiB,MAAQ1X,GAAOkT,IAAS,OAAS/D,EAAO,YAAc,GACvEwI,EAAc,MAAQtX,EACtBuX,EAAa,MAAQxX,EACrB,MAAM0X,EAAMte,EAAE,MAAQie,EAAiB,MACjCM,EAAMte,EAAE,MAAQie,EAAiB,MACvCG,EAAU,MAAQzX,IAAU,GAAKC,IAAW,GAAKyX,EAAM,GAAKC,EAAM,GAAKD,EAAM1X,GAAS2X,EAAM1X,GACxFgX,GAAiB,CAACQ,EAAU,SAC9BN,EAAS,MAAQO,EACjBN,EAAS,MAAQO,EAEpB,EACD,CAAE,UAAW,EAAM,CACzB,EACIvJ,GAAiB,SAAU,aAAc,IAAM,CAC7CqJ,EAAU,MAAQ,EACxB,CAAK,GAEI,CACL,EAAAre,EACA,EAAAC,EACA,WAAAid,EACA,SAAAa,EACA,SAAAC,EACA,iBAAAC,EACA,iBAAAC,EACA,cAAAC,EACA,aAAAC,EACA,UAAAC,EACA,KAAA7I,CACJ,CACA,CAkvBA,SAASgJ,GAAoBC,EAAK,CAChC,MAAM/jB,EAAQ,OAAO,iBAAiB+jB,CAAG,EACzC,GAAI/jB,EAAM,YAAc,UAAYA,EAAM,YAAc,UAAYA,EAAM,YAAc,QAAU+jB,EAAI,YAAcA,EAAI,aAAe/jB,EAAM,YAAc,QAAU+jB,EAAI,aAAeA,EAAI,aAC1L,MAAO,GACF,CACL,MAAMC,EAASD,EAAI,WACnB,MAAI,CAACC,GAAUA,EAAO,UAAY,OACzB,GACFF,GAAoBE,CAAM,CAClC,CACH,CACA,SAASC,GAAeC,EAAU,CAChC,MAAMxkB,EAAIwkB,GAAY,OAAO,MACvBzC,EAAU/hB,EAAE,OAClB,OAAIokB,GAAoBrC,CAAO,EACtB,GACL/hB,EAAE,QAAQ,OAAS,EACd,IACLA,EAAE,gBACJA,EAAE,eAAc,EACX,GACT,CACA,MAAMykB,GAAoC,IAAI,QAC9C,SAASC,GAAcrkB,EAASskB,EAAe,GAAO,CACpD,MAAMC,EAAWtS,MAAIqS,CAAY,EACjC,IAAIE,EAAwB,KACxBC,EAAkB,GACtB5R,EAAAA,MAAMyE,GAAMtX,CAAO,EAAIX,GAAO,CAC5B,MAAMsR,EAASuR,GAAe/jB,GAAQkB,CAAE,CAAC,EACzC,GAAIsR,EAAQ,CACV,MAAMqT,EAAMrT,EAKZ,GAJKyT,GAAkB,IAAIJ,CAAG,GAC5BI,GAAkB,IAAIJ,EAAKA,EAAI,MAAM,QAAQ,EAC3CA,EAAI,MAAM,WAAa,WACzBS,EAAkBT,EAAI,MAAM,UAC1BA,EAAI,MAAM,WAAa,SACzB,OAAOO,EAAS,MAAQ,GAC1B,GAAIA,EAAS,MACX,OAAOP,EAAI,MAAM,SAAW,QAC/B,CACL,EAAK,CACD,UAAW,EACf,CAAG,EACD,MAAMU,EAAO,IAAM,CACjB,MAAMrlB,EAAK6iB,GAAe/jB,GAAQ6B,CAAO,CAAC,EACtC,CAACX,GAAMklB,EAAS,QAEhBvP,KACFwP,EAAwBjK,GACtBlb,EACA,YACCM,GAAM,CACLukB,GAAevkB,CAAC,CACjB,EACD,CAAE,QAAS,EAAO,CAC1B,GAEIN,EAAG,MAAM,SAAW,SACpBklB,EAAS,MAAQ,GACrB,EACQI,EAAS,IAAM,CACnB,MAAMtlB,EAAK6iB,GAAe/jB,GAAQ6B,CAAO,CAAC,EACtC,CAACX,GAAM,CAACklB,EAAS,QAErBvP,KAAUwP,GAAyB,MAAgBA,EAAuB,GAC1EnlB,EAAG,MAAM,SAAWolB,EACpBL,GAAkB,OAAO/kB,CAAE,EAC3BklB,EAAS,MAAQ,GACrB,EACE,OAAAnQ,GAAkBuQ,CAAM,EACjB1mB,WAAS,CACd,KAAM,CACJ,OAAOsmB,EAAS,KACjB,EACD,IAAIlb,EAAG,CACDA,EACFqb,IACGC,GACN,CACL,CAAG,CACH,CAibA,SAASC,GAASjU,EAAQrR,EAAU,GAAI,CACtC,KAAM,CACJ,UAAAmiB,EAAY,GACZ,QAAAoD,EACA,WAAAC,EACA,aAAAC,EACA,QAAAnJ,EAAU,GACV,OAAAV,EAASZ,EACV,EAAGhb,EACE0lB,EAAcC,EAAAA,SAAS,CAAE,EAAG,EAAG,EAAG,CAAC,CAAE,EACrCC,EAAYD,EAAAA,SAAS,CAAE,EAAG,EAAG,EAAG,CAAC,CAAE,EACnCE,EAAQlnB,EAAAA,SAAS,IAAM+mB,EAAY,EAAIE,EAAU,CAAC,EAClDE,EAAQnnB,EAAAA,SAAS,IAAM+mB,EAAY,EAAIE,EAAU,CAAC,EAClD,CAAE,IAAArjB,EAAK,IAAAwjB,CAAK,EAAG,KACfC,EAAsBrnB,EAAQ,SAAC,IAAM4D,EAAIwjB,EAAIF,EAAM,KAAK,EAAGE,EAAID,EAAM,KAAK,CAAC,GAAK3D,CAAS,EACzF8D,EAAYtT,MAAI,EAAK,EACrB/S,EAAYjB,EAAAA,SAAS,IACpBqnB,EAAoB,MAErBD,EAAIF,EAAM,KAAK,EAAIE,EAAID,EAAM,KAAK,EAC7BD,EAAM,MAAQ,EAAI,OAAS,QAE3BC,EAAM,MAAQ,EAAI,KAAO,OAJzB,MAMV,EACKI,EAAuB7lB,GAAM,CAACA,EAAE,QAAQ,CAAC,EAAE,QAASA,EAAE,QAAQ,CAAC,EAAE,OAAO,EACxE8lB,EAAoB,CAAClgB,EAAGC,IAAM,CAClCwf,EAAY,EAAIzf,EAChByf,EAAY,EAAIxf,CACpB,EACQkgB,EAAkB,CAACngB,EAAGC,IAAM,CAChC0f,EAAU,EAAI3f,EACd2f,EAAU,EAAI1f,CAClB,EACE,IAAI0d,EACJ,MAAMyC,EAA0BC,GAAyB1K,GAAU,KAAO,OAASA,EAAO,QAAQ,EAC7FU,EAGHsH,EAAkByC,EAA0B,CAAE,QAAS,EAAI,EAAK,CAAE,QAAS,IAF3EzC,EAAkByC,EAA0B,CAAE,QAAS,GAAO,QAAS,IAAS,CAAE,QAAS,IAG7F,MAAME,EAAclmB,GAAM,CACpB4lB,EAAU,QACZT,GAAc,MAAgBA,EAAWnlB,EAAGT,EAAU,KAAK,GAC7DqmB,EAAU,MAAQ,EACtB,EACQO,EAAQ,CACZvL,GAAiB5J,EAAQ,aAAehR,GAAM,CAC5C,GAAIA,EAAE,QAAQ,SAAW,EACvB,OACEujB,EAAgB,SAAW,CAACA,EAAgB,SAC9CvjB,EAAE,eAAc,EAClB,KAAM,CAAC4F,EAAGC,CAAC,EAAIggB,EAAoB7lB,CAAC,EACpC8lB,EAAkBlgB,EAAGC,CAAC,EACtBkgB,EAAgBngB,EAAGC,CAAC,EACpBuf,GAAgB,MAAgBA,EAAaplB,CAAC,CAC/C,EAAEujB,CAAe,EAClB3I,GAAiB5J,EAAQ,YAAchR,GAAM,CAC3C,GAAIA,EAAE,QAAQ,SAAW,EACvB,OACF,KAAM,CAAC4F,EAAGC,CAAC,EAAIggB,EAAoB7lB,CAAC,EACpC+lB,EAAgBngB,EAAGC,CAAC,EAChB,CAAC+f,EAAU,OAASD,EAAoB,QAC1CC,EAAU,MAAQ,IAChBA,EAAU,QACZV,GAAW,MAAgBA,EAAQllB,CAAC,EACvC,EAAEujB,CAAe,EAClB3I,GAAiB5J,EAAQ,CAAC,WAAY,aAAa,EAAGkV,EAAY3C,CAAe,CACrF,EAEE,MAAO,CACL,wBAAAyC,EACA,UAAAJ,EACA,UAAArmB,EACA,YAAA8lB,EACA,UAAAE,EACA,QAASC,EACT,QAASC,EACT,KATW,IAAMU,EAAM,QAAShX,GAAMA,EAAC,CAAE,CAU7C,CACA,CACA,SAAS8W,GAAyBG,EAAU,CAC1C,GAAI,CAACA,EACH,MAAO,GACT,IAAIC,EAAkB,GACtB,MAAMC,EAAe,CACnB,IAAI,SAAU,CACZ,OAAAD,EAAkB,GACX,EACR,CACL,EACE,OAAAD,EAAS,iBAAiB,IAAKhR,GAAMkR,CAAY,EACjDF,EAAS,oBAAoB,IAAKhR,EAAI,EAC/BiR,CACT,+yCClzLM,MAAAE,EAAQC,EAlCCC,EAkCmB,UAAU,EAEtCC,EAAOC,EAuBPC,EAAaC,EAAAA,uBAElB,EAEKC,EAAYxU,EAAAA,IAAIsU,EAAW,KAAK,EAChCG,EAAoBzU,EAAAA,IAAIsU,EAAW,KAAK,EAC9CvJ,EAAAA,YAAY,IAAM,CAChBuJ,EAAW,MAAQE,EAAU,KAAA,CAC9B,EAEK5T,QAAA0T,EAAajO,GAAa,CAC1BA,IAAamO,EAAU,QAC3BnO,EAAWqO,IAAS/b,EAAK,IAAI,MAAM,mBAAmB,CAAC,EAAA,CACxD,EAED,MAAMgc,EAAaC,GAAM,IAAMX,EAAM,GAAI,SAAS,EAE5CY,EAAS7U,MAAI,EAAK,EAElBjS,EAAUiS,MAAwB,IAAI,EACtC8U,EAAgB9U,MAAwB,IAAI,EAC5ClL,EAAQkL,MAAwB,IAAI,EACpC+U,EAAU/U,MAAwB,IAAI,EACtCgV,EAAchV,MAAwB,IAAI,EAE1CiV,EAAiBjpB,EAAA,SAAS,IAC9BioB,EAAM,MAAQtS,GAAasS,EAAM,MAAOvS,EAAgB,EAAI,EAAA,EAGxDwT,EAAmBlpB,EAAA,SAAS,IAChCioB,EAAM,QAAUtS,GAAasS,EAAM,QAASvS,EAAgB,EAAI,EAAA,EAE5DyT,EAAkB9P,EAAAA,MAAM,IAAM4O,EAAM,UAAU,WAAW,MAAM,CAAC,EAChEmB,EAAenO,GAAY,IAAMgN,EAAM,QAAU,GAAG,EAEpD5f,EAAWrI,EAAA,SAA+B,IAC9CqpB,GAAWpB,EAAM,QAAQ,EAAIA,EAAM,SAAW,MAAA,EAE1C3f,EAAetI,EAAA,SAAmC,IACtDspB,GAAerB,EAAM,QAAQ,EAAIA,EAAM,SAAW,MAAA,EAG9CsB,EAAavV,MAAmB,CAAA,CAAE,EAClCwV,EAAqBxpB,EAAAA,SAAuB,IAAM,CAClD,GAAAioB,EAAM,qBAAuB,OAC/B,OAAOA,EAAM,mBAET,MAAAwB,EAAMxB,EAAM,SAAW,KAAOmB,EAAa,MAAQnB,EAAM,QAAU,EAAI,EACvE3R,EAAoB,CAACoT,GAAiBD,CAAG,CAAC,EAChD,OAAIxB,EAAM,SAAW,IAAS,CAACkB,EAAgB,OACzC7S,EAAA,KACF9K,GAAK,CACH,SAAUnD,EAAS,MACnB,aAAcC,EAAa,MAC3B,QAAS2f,EAAM,eAAA,CAChB,CAAA,EAGDkB,EAAgB,OACd7S,EAAA,KACFlM,GAAc,CACZ,UAAY6d,EAAM,UAAU,MAAM,GAAG,EAAE,CAAC,GAAmB,OAC3D,SAAU5f,EAAS,MACnB,aAAcC,EAAa,MAC3B,QAAS2f,EAAM,eAAA,CAChB,CAAA,EAGDA,EAAM,UAAY,IAChB3R,EAAA,KACFtH,GAAM,CACJ,SAAU3G,EAAS,MACnB,aAAcC,EAAa,MAC3B,QAAS2f,EAAM,eAAA,CAChB,CAAA,EAGDA,EAAM,SAAW,IACf3R,EAAA,KACFqT,GAAe,CACb,SAAUthB,EAAS,MACnB,aAAcC,EAAa,MAC3B,QAAS2f,EAAM,eAAA,CAChB,CAAA,EAGDA,EAAM,SAAW,IACf3R,EAAA,KAAKsT,IAAkB,EAEzBtT,EAAA,KAAKuT,GAAgB,CAAC,QAAS/gB,EAAO,QAAS,EAAG,CAAA,CAAC,EACnDmf,EAAM,SAAW,IACf3R,EAAA,KACFwT,GAAe,CACb,SAAUzhB,EAAS,MACnB,aAAcC,EAAa,MAC3B,QAAS2f,EAAM,gBACf,MAAM,CAAC,eAAAhY,EAAgB,gBAAAD,GAAkB,CACvCuZ,EAAW,MAAQ,CACjB,UAAWvZ,EAAkB,GAAGA,CAAe,KAAO,OACtD,SAAUC,EAAiB,GAAGA,CAAc,KAAO,MAAA,CAEvD,CAAA,CACD,CAAA,EAGEqG,CAAA,CACR,EAEKyT,EAAe1Q,EAAA,MAAM,IACzB8P,EAAgB,MAAQ,OAAalB,EAAM,SAAA,EAGvC,CAAC,eAAA9T,EAAgB,eAAA1M,EAAgB,UAAApD,EAAW,OAAAmQ,GAAUrB,GAAY2V,EAAe/mB,EAAS,CAC9F,UAAWgoB,EACX,WAAYP,EACZ,SAAUnQ,EAAA,MAAM,IAAM4O,EAAM,QAAQ,EACpC,qBAAsB,IAAInV,IACRkX,GAAW,GAAGlX,EAAM,CAAC,eAAgBmV,EAAM,SAAS,CAGtE,CACD,EAEKgC,EAAajW,EAAA,IAAmB,CAAC,SAAU,UAAW,CAAA,EAEtDY,QAAAnN,EAAiB4S,GAAa,OAOlC,GANI4N,EAAM,SAAW,KACnBY,EAAO,MAAQ,CAAC,GAAC5R,EAAAoD,EAAS,OAAT,MAAApD,EAAe,iBAC5BgR,EAAM,aAAeY,EAAO,OAAS,CAACZ,EAAM,aAAe,CAACA,EAAM,QAC/Dtb,EAAA,IAAI,MAAM,aAAa,CAAC,GAG7B0N,EAAS,MAAO,CAClB,KAAM,CAAC,EAAA/S,EAAG,EAAAC,GAAK8S,EAAS,MACxB4P,EAAW,MAAQ,CACjB,SAAU,WACV,IAAK1iB,EAAI,GAAGA,CAAC,KAAO,GACpB,KAAMD,EAAI,GAAGA,CAAC,KAAO,EAAA,CAEzB,CAAA,CACD,EAEK,MAAA4iB,EAAkBlqB,EAAAA,SAAS,IAAM,CAC/B,MAAAghB,EAAOiH,EAAM,QAAU,UAAY,UAClC,MAAA,CACLjH,EACA,KAAKA,CAAI,GACT,CACE,CAAC,KAAKA,CAAI,IAAIiH,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,KAClD,KAAMO,EAAU,OAAS,CAACK,EAAO,MAChC,UAAY,CAACL,EAAU,MACxB,KAAM,CAACP,EAAM,OACZ,SAAW,CAACO,EAAU,OAASP,EAAM,OACtC,CAAC,GAAGA,EAAM,WAAW,EAAE,EAAGA,EAAM,cAAgB,OAChD,CAAC,MAAMjH,CAAI,IAAImJ,GAA0B9lB,EAAU,KAAK,CAAC,EAAE,EAAGA,EAAU,QAAU,MACpF,CAAA,CACF,CACD,EAEK,CAAC,UAAAshB,CAAA,EAAaT,GAAkBnjB,CAAO,EACvC,CAAC,UAAWqoB,CAAgB,EAAIlF,GAAkB6D,CAAO,EAEzD7F,EAAUxhB,GAAc,CAC5B,MAAMwB,EAAQxB,GAAK,IAAI,MAAM,OAAO,EACpC8mB,EAAU,MAAQ7b,EAAKzJ,CAAK,EAAIwlB,EAAK,CAAA,EAGjC2B,EAAwB,CAC5BrJ,EACAsJ,EAAoC,CAAA,IAEpC,IAAIxpB,GAAmBkgB,EAAM,CAC3B,WAAY,GACZ,OAAQjf,EAAQ,OAAS,KACzB,cAAe,KACf,QAAS,KACT,GAAGuoB,EACH,YAAa3B,EAAW,KAAA,CACzB,EAEC,IAAA4B,EACJ,MAAM7B,EAAO,IAAM,CACjB,MAAMxlB,EAAQmnB,EAAsB,OAAQ,CAAC,WAAY,GAAK,EAE9D,GADAjC,EAAK,OAAQllB,CAAK,EACdA,EAAM,iBAAkB,CAC1BklB,EAAK,gBAAgB,EACrB,MACF,CACAK,EAAkB,MAAQ,GAC1BhO,EAAAA,SAAS,IAAM,OACNjG,IACO+V,EAAA,WACZ,IAAM,CACG/V,IACPgU,EAAU,MAAQ,GAClB/N,EAAAA,SAAS,IAAM,CACR2N,EAAA,QAASiC,EAAsB,OAAO,CAAC,CAAA,CAC7C,CACH,EACA,OAAOpC,EAAM,OAAU,SAAWA,EAAM,QAAQhR,EAAAgR,EAAM,QAAN,YAAAhR,EAAa,OAAQ,CAAA,CACvE,CACD,CAAA,EAGGtK,EAAQjL,GAAuB,OACnC,MAAMwB,EAAQmnB,EAAsB,OAAQ,CAAC,WAAY,GAAK,EAE9D,GADAjC,EAAK,OAAQllB,CAAK,EACdA,EAAM,iBAAkB,CAC1BklB,EAAK,gBAAgB,EACrB,MACF,CACImC,IACF,aAAaA,CAAW,EACVA,EAAA,QAEV,MAAAnH,EAAQ,OAAO6E,EAAM,OAAU,SAAWA,EAAM,QAAQhR,EAAAgR,EAAM,QAAN,YAAAhR,EAAa,OAAQ,EACnF,WAAW,IAAM,UAEbvV,GAAA,YAAAA,EAAG,QAAS,UACZA,GAAA,YAAAA,EAAG,QAAS,cACZA,GAAA,YAAAA,EAAG,QAAS,gBACXA,GAAA,YAAAA,EAAG,QAAS,qBAAuBumB,EAAM,QACzC,CAACA,EAAM,gBACNtC,EAAU,OACVyE,EAAiB,OACjB,GAACnT,EAAAlV,EAAQ,QAAR,MAAAkV,EAAe,SAAS,+BAAU,iBACnC,GAACC,EAAA6R,EAAQ,QAAR,MAAA7R,EAAe,SAAS,+BAAU,iBACpC+Q,EAAM,gBAAkBmC,EAAiB,OAE1C5B,EAAU,MAAQ,GAClB/N,EAAAA,SAAS,IAAM,CACb,WACE,IAAM,CACJgO,EAAkB,MAAQ,EAC5B,EACA1mB,EAAQ,MAAQD,GAAmBC,EAAQ,KAAK,EAAI,GAAA,EAEjDqmB,EAAA,SAAUiC,EAAsB,QAAQ,CAAC,CAAA,CAC/C,GAED,WACE,IAAM,CACJ1d,EAAKjL,CAAC,CACR,EACA0hB,EAAQ,GAAK,GAAKA,CAAA,GAGrBA,CAAK,CAAA,EAGGoH,EAAA,CAAA,KACX7d,EACA,KAAA+b,EACA,OAAAxF,CAAA,CACD,EAED,MAAMuH,EAAO,IAAM,OAGjB,GAAIxC,EAAM,OAAQ,CACV,MAAAyC,EAAOC,GAAW1C,EAAM,MAAM,EAChCyC,EACF3B,EAAQ,MAAQ2B,EAGR,QAAA,KAAK,2BAA4BzC,EAAM,MAAM,CACvD,MAEQc,EAAA,OAAQ9R,EAAA+R,EAAY,QAAZ,YAAA/R,EAAmB,mBAErC,GAAIgR,EAAM,UAAW,CACb,MAAAyC,EAAOC,GAAW1C,EAAM,SAAS,EACnCyC,EACF5B,EAAc,MAAQ4B,EAGd,QAAA,KAAK,8BAA+BzC,EAAM,SAAS,CAC7D,MAEAa,EAAc,MAAQC,EAAQ,MAEhC,GAAI,GAACA,EAAQ,OAASd,EAAM,SAGvB5lB,GAEL,IADQ0mB,EAAA,MAAM,iBAAiB,YAAapc,CAAI,EAC5Csb,EAAM,MAAO,CACPc,EAAA,MAAM,iBAAiB,QAAS7F,CAAM,EAC9C,MACF,CACQ6F,EAAA,MAAM,iBAAiB,eAAgBL,CAAI,EAC3CK,EAAA,MAAM,iBAAiB,eAAgBpc,CAAI,EAC3Coc,EAAA,MAAM,iBAAiB,QAASL,CAAI,EACpCK,EAAA,MAAM,iBAAiB,OAAQpc,CAAI,EAAA,EAGvCie,EAAS,IAAM,CACf7B,EAAQ,QACFA,EAAA,MAAM,oBAAoB,YAAapc,CAAI,EAC3Coc,EAAA,MAAM,oBAAoB,QAAS7F,CAAM,EACzC6F,EAAA,MAAM,oBAAoB,eAAgBL,CAAI,EAC9CK,EAAA,MAAM,oBAAoB,eAAgBpc,CAAI,EAC9Coc,EAAA,MAAM,oBAAoB,QAASL,CAAI,EACvCK,EAAA,MAAM,oBAAoB,OAAQpc,CAAI,EAChD,EAGF,OAAAqQ,GACEjb,EACA,IAAM,CACAymB,EAAU,OAASP,EAAM,OAAS,CAACA,EAAM,aAAe,CAACA,EAAM,QAC5Dtb,EAAA,IAAI,MAAM,cAAc,CAAC,CAClC,EACA,CAAC,OAAQ,CAACoc,CAAO,CAAC,CAAA,EAGdnU,QAAA,CAAC,IAAMqT,EAAM,MAAO,IAAMA,EAAM,OAAQ,IAAMA,EAAM,SAAS,EAAG,IAAM,CACnE2C,IACFH,GAAA,CAEN,EAEDjQ,EAAA,UAAUiQ,CAAI,EAEdI,EAAA,gBAAgBD,CAAM,2gECldTE,GAA2B,CAAC,CACvC,IAAAhd,EACA,IAAA7J,EACA,MAAAD,EACA,YAAA+mB,EACA,SAAAC,CACF,IAMkB,CAChB,MAAM/pB,EAAY6M,EAAM,MAAQ9J,EAAQ,OAASC,EAAM,QAAU,SAC3DlE,EAAQirB,EAAW,MAAQD,EAAc,KAAO,QACtD,MAAO,GAAG9pB,CAAS,GAAGlB,EAAQ,IAAIA,CAAK,GAAK,EAAE,EAChD,EAEaoqB,GAA6B9lB,GAAiC,CACzE,KAAM,CAAC4mB,CAAU,EAAI5mB,EAAU,MAAM,GAAG,EACxC,OAAQ4mB,EAAY,CAClB,IAAK,OACI,MAAA,QACT,IAAK,QACI,MAAA,MACT,QACS,OAAAA,CACX,CACF,EAEaC,GAAuBC,GAClC,OAAOA,GAAW,UAAYA,EAAO,SAAW,GAErCC,GAAiB,CAC5BD,EACA/pB,IACuC,CAEvC,GAAI,CADa8pB,GAAoBC,CAAM,EAC5B,MAAO,GAEhB,MAAAE,EACJ,OAAOF,EAAW,KACjB,OAAOA,GAAW,UAAY,CAACA,EAAO,OAAS,CAACA,EAAO,QACpDG,EAAQlqB,EAAG,aAAa,OAAO,GAAKA,EAAG,aAAa,qBAAqB,EAC/E,OAAIiqB,EACEC,GACFlqB,EAAG,gBAAgB,OAAO,EACvBA,EAAA,aAAa,sBAAuBkqB,CAAK,EAErC,CACL,QAAS3V,GAAa2V,EAAO5V,EAAgB,CAAA,GAG1C,GAEL,OAAOyV,GAAW,SACb,CACL,QAASxV,GAAawV,EAAQzV,EAAgB,CAAA,EAG3C,CACL,MAAOyV,GAAA,MAAAA,EAAQ,MAAQxV,GAAawV,GAAA,YAAAA,EAAQ,MAAOzV,EAAgB,EAAI,OACvE,QAASyV,GAAA,MAAAA,EAAQ,QAAUxV,GAAawV,GAAA,YAAAA,EAAQ,QAASzV,EAAgB,EAAI,MAAA,CAEjF,EAEa6V,GAAwB,CACnCC,EACApqB,KACI,CACJ,OAAQA,EACR,WAAYoqB,EAAQ,UAAU,KAC9B,OAAQA,EAAQ,UAAU,OAC1B,MAAOA,EAAQ,UAAU,MACzB,SAAUA,EAAQ,UAAU,SAC5B,WAAYA,EAAQ,UAAU,WAC9B,UAAWA,EAAQ,UAAU,KACzB,OACAA,EAAQ,UAAU,MAChB,QACAA,EAAQ,UAAU,OAChB,SACAA,EAAQ,UAAU,IAChB,MACA,OACV,KAAM,GACN,GAAI,OAAOA,EAAQ,OAAU,SAAWA,EAAQ,MAAQ,CAAC,EACzD,GAAIA,EAAQ,UAAU,YAAc,CAAC,eAAgB,EAAA,EAAS,CAAC,EAC/D,MAAO,KACP,QAAS,IACX,GAMaf,GAAO,CAClBrpB,EACAoqB,EACAvD,IACG,OACG,MAAAwD,EAAM,SAAS,cAAc,MAAM,EACrCD,EAAQ,UAAU,KAAe,SAAA,KAAK,YAAYC,CAAG,EAChDD,EAAQ,UAAU,MAAOpqB,EAAG,YAAYqqB,CAAG,GAC/CxU,EAAA7V,EAAG,aAAH,MAAA6V,EAAe,aAAawU,EAAKrqB,EAAG,aACzCoa,EAAAA,OAAO1K,EAAAA,EAAE4a,GAAUzD,CAAK,EAAGwD,CAAG,EAC9BrqB,EAAG,WAAaqqB,CAClB,EAEab,GAAUxpB,GAA0B,CAC/C,MAAMqqB,EAAMrqB,EAAG,WACXqqB,GAAKjQ,SAAO,KAAMiQ,CAAG,EACzB,WAAW,IAAM,CACfA,GAAA,MAAAA,EAAK,UACJ,CAAC,EACJ,OAAOrqB,EAAG,UACZ,EAEaioB,GAAchmB,GACzBA,IAAU,qBAAuBA,aAAiB,SAAW,MAAM,QAAQA,CAAK,EAErEimB,GAAkBjmB,GAC7B,CAACgmB,GAAWhmB,CAAK,ECvInBsoB,GAAe,CACbC,EAEAC,EACAC,IACG,CACG,MAAAnV,EAAMoV,GAAIH,EAAMC,CAAQ,EACvB,OAAAC,GAAa,OAAOA,GAAc,WAAaA,EAAUnV,EAAKkV,EAAUD,CAAI,EAAIjV,CACzF,ECXAqV,GAAe,CACb/D,EACAgE,EACAC,EACAC,EAAcD,IAEdD,EAAI,OAAO,CAAC3V,EAAe1V,KACpBqnB,EAAMrnB,CAAI,GAEX0V,EAAA,KACF,CAAC6V,EAAavrB,EAAK,QAAQsrB,EAAY,EAAE,EAAGjE,EAAMrnB,CAAI,CAAC,EACpD,OAAQc,GAAMA,GAAK,OAAOA,GAAM,SAAS,EACzC,KAAK,GAAG,EACR,YAAY,CAAA,EAGV4U,GACN,EAAc,ECfJqU,GACb5oB,GAC4B,CAC5B,GAAKA,EACD,OAAA,OAAOA,GAAY,SACjB,OAAO,SAAa,IAAoB,OAC1B,SAAS,eAAeA,CAAO,GAC5B,SAAS,cAAcA,CAAO,GAAqB,OAElEA,EAAoC,KAAOA,CACrD,ECVAqqB,GAAe,CAACC,EAAwBC,MACrCD,GAAA,YAAAA,MAAY,CAAA,GACV,OAAO,CAAC/V,EAAc+V,KACjB,OAAOA,EAAK,MAAS,SACjB/V,EAAAA,EAAI,OAAO+V,EAAK,QAA4B,EAElD/V,EAAI,KAAK+V,CAAI,EAER/V,GACN,CAAE,CAAA,EACJ,OAAQiW,GAAW,OAAA,QAAAtV,EAAAsV,EAAM,OAAN,YAAAtV,EAA6C,UAAWqV,EAAQ,ECZ3EE,GAAgB,KAChBC,GAAiB,kBACjBC,GAAY,oBACZC,GAAsB,cACtBC,GAA4B,aAC5BC,GAAiB,MACjBC,GAAU,KACVC,GAAa,wBAGbC,GAAoB,wBACpBC,GAAY,mBCEZC,GAAavU,GACxBA,EACG,QAAQ6T,GAAe,GAAG,EAC1B,QAAQC,GAAgB,CAAC3T,EAAGqU,EAAIC,IAAO,GAAGD,CAAE,IAAIC,CAAE,EAAE,EACpD,QAAQR,GAA2B,CAAC9T,EAAGqU,EAAIC,IAAOD,EAAKC,EAAG,YAAa,CAAA,EAM/DC,GAAa1U,GACxBA,EACG,QAAQ6T,GAAe,GAAG,EAC1B,QAAQC,GAAgB,CAAC3T,EAAGqU,EAAIC,IAAO,GAAGD,CAAE,IAAIC,CAAE,EAAE,EACpD,QAAQT,GAAqB,CAAC7T,EAAGqU,EAAIC,IAAOD,EAAKC,EAAG,YAAa,CAAA,EAQzDE,GAAc3U,GAAwB,CAC3C,MAAA4U,EAAO5U,EAAI,OACV,OAAA4U,EAAK,OAAO,CAAC,EAAE,cAAgBA,EAAK,MAAM,CAAC,CACpD,EAQaC,GAAgB7U,GAAwBA,EAAI,QAAQqU,GAAmB,MAAM,EAS7ES,GAAqB9U,GAChC6U,GAAa7U,CAAG,EAAE,QAAQsU,GAAW,KAAK,ECrD5CS,GAAgBC,GACd,OAAOA,GAAU,SACbN,GAAUM,CAAK,EACfA,EAAM,QAAU,OACdA,EAAM,MACN,OAAOA,EAAM,KAAQ,SACnBN,GAAUM,EAAM,GAAG,EACnBA,EAAM,ICRhBC,GAAgB3F,GACd,CAAC,EAAEA,EAAM,MAAQA,EAAM,IC0BZ4F,GAIR,OAAO,eAAe,EAGdC,GAWR,OAAO,WAAW,EAGVC,GAMR,OAAO,eAAe,EAGdC,GAER,OAAO,gBAAgB,EAGfC,GAYR,OAAO,kBAAkB,EAGjBC,GAIR,OAAO,gBAAgB,EAGfC,GAcR,OAAO,oBAAoB,EAEnBC,GAaR,OAAO,iBAAiB,EAGhBC,GAOR,OAAO,eAAe,EAEdC,GAOR,OAAO,eAAe,EAEdC,GAGR,OAAO,aAAa,EAEZC,GAkBR,OAAO,kBAAkB,EAEjBC,GAGR,OAAO,gBAAgB,EAEfC,GAGR,OAAO,uBAAuB,EAEtBC,GAyBR,OAAO,4BAA4B,EAE3BC,GASR,OAAO,yBAAyB,EAExBC,GAA0C,OAAO,kBAAkB,EAEnEC,GAA6D,OAAO,eAAe,EAEnFC,GAAuC,OAAO,iBAAiB,ECnN5EC,GAAe,CACb5jB,EACA6jB,IACG,CACH,GAAI7jB,IAAM,KAAM,OAChB,IAAIoJ,EAASpJ,EAEb,GADI6jB,EAAe,OAAeza,EAAAA,EAAO,SAAS,EAAE,KAAK,GACrDya,EAAe,QAAU,OAAOza,GAAW,UAAYA,IAAW,GAAI,CAClE,MAAA0a,EAAS,OAAO,WAAW1a,CAAM,EACvCA,EAAS,OAAO,MAAM0a,CAAM,EAAI1a,EAAS0a,CAC3C,CACO,OAAA1a,CACT,ECZe2a,GAAA,CAACvnB,EAAcwnB,EAAQ,GAAIC,EAAgB,CAAA,IAAc,CAEhE,MAAAC,EAAQ,CAAC1nB,CAAI,EACf,IAAAykB,EACJ,QAAS1kB,EAAI,EAAGA,EAAI2nB,EAAM,QAAU,CAACjD,EAAM1kB,IAAK,CACxCC,MAAAA,EAAO0nB,EAAM3nB,CAAC,EACpB0kB,EAAOgD,EAAOznB,CAAI,CACpB,CAEA,OAAQykB,GAAQ,OAAOA,GAAS,WAAaA,EAAK+C,CAAK,EAAI/C,CAC7D,ECRakD,GAAO,CAIlBC,EACAC,IAEA,OAAO,KAAKD,CAAU,EACnB,OAAQvT,GAAQ,CAACwT,EAAY,IAAKruB,GAAOA,EAAG,SAAS,CAAC,EAAE,SAAS6a,CAAG,CAAC,EACrE,OAAO,CAAC/C,EAAQ+C,KAAS,CAAC,GAAG/C,EAAQ,CAAC+C,CAAG,EAAGuT,EAAWvT,CAAG,CAAC,GAAI,CAAA,CAAwB,EAM/EyT,GAAO,CAIlBF,EACAC,IAEA,CAAC,GAAGA,CAAW,EAAE,OACf,CAACE,EAAM/uB,KACA+uB,EAAA/uB,CAAI,EAAI4uB,EAAW5uB,CAAI,EACrB+uB,GAET,CAAC,CACH,EAWW5D,GAAM,CAEjB9rB,EACA2vB,EACAC,IACa,CACP,MAAAC,EAAWF,EAAK,MAAM,SAAS,EAErC,IAAIlQ,EAAezf,EACnB,UAAWgc,KAAO6T,EAAU,CAE1B,GADIpQ,IAAY,MACZA,IAAY,OAAkB,OAAAmQ,EAC9B5T,EAAI,SAAW,KACnByD,EAAUA,EAAQzD,CAAG,EACvB,CACA,OAAIyD,IAAY,OAAkBmQ,EAC3BnQ,CACT,EAcaqQ,GAAM,CAAsBC,EAAYJ,EAAc3vB,IAAgB,CAC3E,MAAAsW,EAAYF,GAAc,CAO1B,IALiBpW,GAEnBA,GAAU,MACT,OAAOA,GAAU,UAAY,OAAOA,GAAU,YAEjCoW,CAAG,EACV,OAAAA,EAGL,GAAA,OAAOA,GAAQ,WACV,OAAAA,EAAI,KAAK,CAAA,CAAE,EAGd,MAAA2F,EAAS,IAAM3F,EAAe,YAGpC,cAAO,oBAAoBA,CAAG,EAAE,QAASzV,GAAS,CAE9Cob,EAAepb,CAAI,EAAKyV,EAAYzV,CAAI,CAAA,CAC3C,EAEMob,CAAA,EAIHiU,EAAQ,CAAmChwB,EAAY4vB,IAAiC,CACtF,MAAAK,EAAML,IAAiB,OAAY,EAAIA,EACzC5vB,GAAAA,GAAU,KACL,OAAAiwB,EAEH,MAAAhX,EAAS,OAAO,SAASjZ,CAAK,EACpC,OAAO,OAAO,MAAMiZ,CAAM,EAAIgX,EAAMhX,CAAA,EAGtC,GAAI,CAAC8W,EAAS,MAAO,GACjB,GAAA,CAACJ,GAAQ3vB,IAAU,OAAkB,OAAA+vB,EACzC,MAAMF,EAAWF,EAAK,MAAM,SAAS,EAAE,OAAQtoB,GAAM,CAAC,CAACA,EAAE,KAAM,CAAA,EAEzD6oB,EAAQ9d,GAAc,CACtB,GAAAyd,EAAS,OAAS,EAAG,CACjB,MAAA7T,EAAM6T,EAAS,QACfM,EAAYH,EAAMH,EAAS,CAAC,EAAG,IAAI,IAAM,KAC/Czd,EAAK4J,CAAG,EAAI5J,EAAK4J,CAAG,IAAM,OAAamU,EAAY,CAAA,EAAK,CAAA,EAAM/d,EAAK4J,CAAG,EACjEkU,EAAA9d,EAAK4J,CAAG,CAAC,CAAA,MAET5J,EAAAyd,EAAS,CAAC,CAAC,EAAI7vB,CACtB,EAEIowB,EAAS9Z,EAAMyZ,CAAO,EAC5B,OAAAG,EAAKE,CAAM,EACJA,CACT,EC9HAC,GAAe,CACbjvB,EACA8pB,IACW,CACX,KAAM,CAAC,IAAAoF,EAAK,GAAGC,CAAA,EAAUnvB,EACnBovB,EAAmD,CAAA,EACrDF,GACKpF,EAAA,QAAS/pB,GAAO,CACrBqvB,EAAWrvB,CAAE,EAAImvB,CAAA,CAClB,EAEH,MAAMG,EAAiC,CAAC,GAAGD,EAAY,GAAGD,CAAM,EAE9D,OAAA,OAAO,QAAQE,CAAK,EAEjB,OAAO,CAAC,CAAC9oB,EAAM3H,CAAK,IAAM,CAAC,CAACA,GAASkrB,EAAO,SAASvjB,CAAY,CAAC,EAClE,IAAI,CAAC,CAACA,CAAI,IAAMA,CAAY,CAEnC,ECRa+oB,GAAiB,CAACC,EAAgB3wB,IAC7CA,GAAS2wB,EAAStD,GAAWsD,CAAM,EAAI,ICX5BC,GAAkB,CAC7B,YAAa,gBACb,aAAc,oCACd,UAAW,cACX,eAAgB,oCAChB,gBAAiB,mCACjB,aAAc,kCACd,eAAgB,mBAChB,gBAAiB,uCACjB,aAAc,gBAChB,ECTAC,GAAe,CACb7I,EACA8I,IACG,CACG,MAAAC,EAAoB3X,QAAM0X,CAAS,EACnCE,EAAgB5X,QAAM4O,CAAK,EAE3BiJ,EAAe7X,EAAAA,MAAM,IAAMuU,GAAOqD,EAAc,KAAK,CAAC,EACtDE,EAAoBnxB,EAAA,SAAS,IACjCkxB,EAAa,MACTxB,GACEuB,EAAc,MACdD,EAAkB,OAAS,CACzB,SACA,cACA,SACA,OACA,MACA,UACA,sBACA,SACA,KACA,UACA,UACA,eACA,mBACA,kBACA,uBACA,mBACA,uBACF,CAAA,EAEF,CAAC,CAAA,EAGA,MAAA,CAAC,aAAAE,EAAc,kBAAAC,EACxB,ECpCeC,GAAA,KAAO,CAAC,GAAGC,EAAAA,OAAO3C,EAAmB,ICOpD9M,GAAe,CAAC0I,EAAmC,CAAA,IAAO,CAClD,MAAAgH,EAAUhH,EAAK,SAAW,GAC1BjV,EAAY,gBACZwM,EAAW,OACjB,OAAOD,GAAa,CAClB,UAAAvM,EACA,SAAAwM,EACA,WACEyP,IAAY,GACR,YAAYhH,EAAK,WAAajV,CAAS,IAAIiV,EAAK,UAAYzI,CAAQ,GACpE,KACN,GAAGyI,CAAA,CACJ,CACH,ECpBAiH,GAAgBlb,GACdrW,EAAAA,SAAS,IAAM,CACT,IAAAioB,EAAQ/nB,UAAQmW,CAAG,EACf,OAAA4R,EAAA,CACN,GAAGA,EACH,QAASA,EAAM,SAAW,KAC1B,UAAWA,EAAM,WAAa,KAC9B,YAAaA,EAAM,aAAe,IAAA,EAE7B,CACL,CAAC,WAAWA,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,KAChD,CAAC,QAAQA,EAAM,WAAW,EAAE,EAAGA,EAAM,cAAgB,MAAQA,EAAM,UAAY,KAC/E,CAAC,MAAMA,EAAM,SAAS,EAAE,EAAGA,EAAM,YAAc,MAAQA,EAAM,UAAY,IAAA,CAE7E,CAAC,ECdHuJ,GAAgBvxB,GACdD,EAAAA,SAAS,IAAM,CACP,MAAAyxB,EAAgBvxB,UAAQD,CAAK,EAC5B,MAAA,CACL,UAAWwxB,IAAkB,GAC7B,CAAC,aAAaA,CAAa,EAAE,EAAG,OAAOA,GAAkB,QAAA,CAE7D,CAAC,ECaHC,GAAe,CACbzsB,EACA0V,EAAqC3G,EAAAA,IAAI,GAAI,EAC7C2d,EAA+C,KAC3B,CACpB,MAAMC,EAAiBpZ,EAAA,SAASa,QAAMpU,CAAM,CAAC,EAEvC4sB,EAAmBrZ,EAAA,SAASa,QAAMsB,CAAQ,CAAC,EAE3CmX,EAAW9d,MAAI,EAAK,EAEpB+d,EAAkB/d,MAAI,CAAC,EAEvBge,EAAoB3Y,QAAM,IAAM,KAAK,KAAKuY,EAAe,MAAQC,EAAiB,KAAK,CAAC,EAExF5xB,EAAQoZ,EAAA,MAAM,IAClBhB,EAAS,OAASyZ,EAAS,MACvB,KAAK,MAAMF,EAAe,MAAQG,EAAgB,MAAQF,EAAiB,KAAK,EAChF,CAAA,EAGA,CAAC,MAAAvZ,EAAO,OAAAC,EAAQ,SAAAF,CAAY,EAAAqC,GAChC,IAAM,CACYqX,EAAA,MAAQA,EAAgB,MAAQ,CAClD,EACApX,EACAgX,CAAA,EAGIM,EAAU,IAAM,CACpBH,EAAS,MAAQ,GACjBC,EAAgB,MAAQ,EACjBxZ,GAAA,EAGHuE,EAAO,IAAM,CACjBgV,EAAS,MAAQ,GACjBC,EAAgB,MAAQC,EAAkB,KAAA,EAG5CjT,EAAAA,YAAY,IAAM,CACZgT,EAAgB,MAAQC,EAAkB,QAC5CD,EAAgB,MAAQC,EAAkB,OAExCD,EAAgB,QAAUC,EAAkB,OACxC1Z,GACR,CACD,EAED1D,EAAAA,MAAM,CAACid,EAAkBD,CAAc,EAAG,IAAM,CACzC9U,IACGmV,GAAA,CACT,EAED,MAAMC,EAAU,IAAM,CAChB7Z,EAAS,QAAU,KACvByZ,EAAS,MAAQ,GACXxZ,IAAA,EAGF6Z,EAAW,IAAM,CACjBJ,EAAgB,QAAUC,EAAkB,QAChDF,EAAS,MAAQ,GACVvZ,IAAA,EAGF,MAAA,CACL,SAAUC,WAASH,CAAQ,EAC3B,SAAUG,WAASsZ,CAAQ,EAC3B,QAAAG,EACA,KAAAnV,EACA,MAAOoV,EACP,OAAQC,EACR,MAAAlyB,CAAA,CAEJ,EC3EA,SAASmyB,GAAWnW,EAAiCoW,EAAKjZ,GAAmB,YAAY,EAAG,CAGpF,KAAA,CAAC,SAAAkZ,CAAY,EAAAD,EAEf,GAAAC,GAAarW,KAA2BqW,EAE1C,OAAOA,EAASrW,CAAa,CAGjC,CAEA,SAAS7C,GAAmBxR,EAAc2qB,EAAkB,CAC1D,MAAMF,EAAKG,EAAAA,qBAEX,GAAI,CAACH,EACH,MAAM,IAAI,MAAM,SAASzqB,CAAI,IAAI2qB,GAAW,6CAA6C,EAAE,EAGtF,OAAAF,CACT,CAEA,MAAMI,GAAc,CAAC9Z,EAAM,KACzBA,EACG,QAAQ,WAAY,GAAG,EACvB,QAAQ,aAAc,KAAK,EAC3B,YAAY,EACX9B,GAAYR,GAChBA,IAAQ,MAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAG,EAE/D,SAASqc,GACP9f,EAA8B,CAAA,EAC9BF,EAA8B,CAAA,EAC9BigB,EACA,CACA,MAAMC,EAA2B,CAAA,EAEjC,UAAW3W,KAAOrJ,EACZggB,EAAA3W,CAAG,EAAIrJ,EAAOqJ,CAAG,EAGvB,UAAWA,KAAOvJ,EAAQ,CAClB,MAAAmgB,EAAiBjgB,EAAOqJ,CAAG,EAC3B6W,EAAiBpgB,EAAOuJ,CAAG,EAIjC,GAAIpF,GAASgc,CAAc,GAAKhc,GAASic,CAAc,EAAG,CACxDF,EAAI3W,CAAG,EAAIyW,GAAUG,EAAgBC,EAAgBH,CAAO,EAE5D,QACF,CAEI,GAAA,MAAM,QAAQE,CAAc,GAAK,MAAM,QAAQC,CAAc,GAAKH,EAAS,CAC7EC,EAAI3W,CAAG,EAAI0W,EAAQE,EAAgBC,CAAc,EAEjD,QACF,CAEAF,EAAI3W,CAAG,EAAI6W,CACb,CAEO,OAAAF,CACT,CAEA,MAAMG,GAAgB,CAACjX,EAAclb,IACnC,SAAA,eAAOqW,EAAA6E,EAAM,QAAN,YAAA7E,EAAcrW,IAAU,KAC/B,QAAOsW,EAAA4E,EAAM,QAAN,YAAA5E,EAAcub,GAAY7xB,CAAI,IAAO,KAE9C,SAASoyB,GAAoB/K,EAA6B,CAAC,EAAGrgB,EAAe,CAC3E,MAAM2Y,EAAW8Q,EAAAA,OAAOvC,GAAa9a,EAAAA,IAAI,CAAA,CAAE,CAAC,EACtCqe,EAAKjZ,GAAmB,aAAa,EAG3C,GADAxR,EAAOA,GAAQyqB,EAAG,KAAK,MAAQA,EAAG,KAAK,OACnC,CAACzqB,EAEG,MAAA,IAAI,MAAM,0CAA0C,EAGtD,MAAAqrB,EAAoBjzB,WAAS,WAAO,OAAAiX,EAAAsJ,EAAS,QAAT,YAAAtJ,EAAyBgR,EAAM,KAAOrgB,GAAK,EAC/EsrB,EAAS,IAAI,MAAMjL,EAAO,CAC9B,IAAIvV,EAAQ9R,EAAM,aAChB,MAAMuyB,EAAY,QAAQ,IAAIzgB,EAAQ9R,CAAI,EACtC,OAAAA,IAAS,SAAWA,IAAS,QACxB,EAACqW,EAAAgc,EAAkB,QAAlB,YAAAhc,EAA0BrW,GAAOuyB,CAAS,EAAE,OAAQ/nB,GAAMA,GAAK,IAAI,EAClE,OAAOxK,GAAS,UAAY,CAACmyB,GAAcV,EAAG,MAAOzxB,CAAI,IAEhEsW,EAAA+b,EAAkB,QAAlB,YAAA/b,EAA0BtW,OAAUwyB,GAAAC,EAAA9S,EAAS,QAAT,YAAA8S,EAAwB,SAAxB,YAAAD,EAAiCxyB,KAASuyB,EAG3EA,CACT,CAAA,CACD,EAEKG,EAAwBrf,EAAAA,aAC9B8K,EAAAA,YAAY,IAAM,CAChB,GAAIkU,EAAkB,MAAO,CAC3B,MAAMM,EAAgB,OAAO,QAAQN,EAAkB,KAAK,EAAE,OAAO,CAAC,CAAChX,CAAG,IACxEA,EAAI,WAAWA,EAAI,CAAC,EAAE,aAAa,CAAA,EAErCqX,EAAsB,MAAQC,EAAc,OACxC,OAAO,YAAYA,CAAa,EAChC,MAAA,MAEJD,EAAsB,MAAQ,MAChC,CACD,EAED,SAASE,GAAqB,CACtB,MAAAC,EAAWrB,GAAWtD,GAAauD,CAAE,EAC3CqB,EAAA,QACE5E,GACA9uB,EAAA,SAAS,IACPszB,EAAsB,MAClBZ,IAAUe,GAAA,YAAAA,EAAU,QAAS,CAAI,EAAAH,EAAsB,KAAK,EAC5DG,GAAA,YAAAA,EAAU,KAChB,CAAA,CAEJ,CAEO,MAAA,CAAC,MAAOP,EAAQ,mBAAAM,EACzB,CAEgB,SAAAtL,EACdD,EACArgB,EACG,CACH,KAAM,CAAC,MAAOsrB,EAAQ,mBAAAM,CAAsB,EAAAR,GAAoB/K,EAAOrgB,CAAI,EACxD,OAAA4rB,IACZN,CACT,CCvJA,MAAAS,GAAgB1zB,GACdD,EAAAA,SAAS,IAAM,CACP,MAAAyxB,EAAgBvxB,UAAQD,CAAK,EAEnC,OAAOwxB,IAAkB,GAAO,WAAaA,IAAkB,GAAQ,aAAe,IACxF,CAAC,ECQGmC,GAAcpV,GAClBxe,EAAAA,SAAS,IAAM,CACP,MAAA6zB,EAAgB3zB,UAAQse,CAAK,EAC5B,MAAA,CACL,aACEqV,EAAc,QAAU,IACxBA,EAAc,SAAW,IACzBA,EAAc,eAChB,qBAAsBA,EAAc,UAAY,GAChD,oBAAqBA,EAAc,SAAW,GAC9C,cAAeA,EAAc,SAAW,GACxC,CAAC,gBAAgBA,EAAc,IAAI,EAAE,EACnCA,EAAc,OAAS,QACvBA,EAAc,OAAS,MACvBA,EAAc,SAAW,EAAA,CAE/B,CAAC,EAQGC,GAAmBtV,GAAoD,CACrE,MAAAqV,EAAgBxa,QAAMmF,CAAK,EAE3BuV,EAAaJ,GAAc,IAAME,EAAc,MAAM,OAAS,IAAI,EAExE,OAAO7zB,WAAS,IAAM,CACpB+zB,EAAW,MACX,CACE,mBACEF,EAAc,MAAM,QAAU,IAASA,EAAc,MAAM,SAAW,GACxE,YAAaA,EAAc,MAAM,SAAW,EAC9C,CAAA,CACD,CACH,EASMG,GAAmBxV,GACvBxe,EAAAA,SAAS,IAAM,CACP,MAAA6zB,EAAgB3zB,UAAQse,CAAK,EAC5B,MAAA,CACL,mBAAoBqV,EAAc,QAAU,IAASA,EAAc,SAAW,GAC9E,IAAOA,EAAc,SAAW,GAChC,CAAC,OAAOA,EAAc,aAAa,EAAE,EACnCA,EAAc,SAAW,IACzBA,EAAc,gBAAkB,QAChCA,EAAc,gBAAkB,KAClC,CAAC,OAAOA,EAAc,IAAI,EAAE,EAC1BA,EAAc,QAAUA,EAAc,MAAQA,EAAc,OAAS,IAAA,CAE3E,CAAC,EAQGI,GAAgBzV,GAAiD,CAC/D,MAAAqV,EAAgBxa,QAAMmF,CAAK,EAC3B0V,EAAsB/zB,GAC1B,IAAM0zB,EAAc,MAAM,YAC1B,IAAMA,EAAc,MAAM,KAAA,EAE5B,OAAO7zB,WAAS,KAAO,CACrB,eAAgBk0B,EAAoB,MACpC,gBAAiBL,EAAc,MAAM,WAAa,GAAO,GAAO,MAChE,EAAA,CACJ,EASMM,GAAmB3V,GACvBxe,EAAAA,SAAS,IAAM,CACP,MAAA6zB,EAAgB3zB,UAAQse,CAAK,EAC5B,MAAA,CACL,gBAAiBqV,EAAc,YAAc,GAC7C,YAAaA,EAAc,UAAY,IAAQA,EAAc,UAAY,GACzE,qBAAsBA,EAAc,UAAY,IAAQA,EAAc,UAAY,GAClF,CAAC,aAAaA,EAAc,IAAI,EAAE,EAAGA,EAAc,OAAS,MAAA,CAEhE,CAAC,EC3GHjL,GAAe,CAACwL,EAA2CxD,IACzD5wB,EAAAA,SAAS,IAAME,EAAAA,QAAQk0B,CAAE,GAAKC,GAAMzD,CAAM,CAAC,EAEhCyD,GAAQ,CAACzD,EAAS,KAEtB,WADOS,EAAAA,OAAOxC,GAAa,IAAM,KAAK,SAAS,SAAW,EAAA,MAAM,EAAG,CAAC,CAAC,EAC1DwF,CAAO,SAASzD,CAAM,KCD1C0D,GAAe,CACbrM,EACAK,EACA2G,IACG,CACG,MAAA5rB,EAAQ2Q,MAA6B,IAAI,EAEzC2U,EAAaC,GAAM,IAAMX,EAAM,GAAI,OAAO,EAC1CsM,EAAiBtZ,GAAY,IAAMgN,EAAM,UAAY,CAAC,EACtDuM,EAAwBvZ,GAAY,IAAMgN,EAAM,iBAAmB,GAAG,EAEtEwM,EAA2Bjb,GAC9BvZ,GAAqB,CACpBqoB,EAAW,MAAQroB,CACrB,EACA,IAAOgvB,EAAe,OAAS,GAAO,EAAIsF,EAAe,MACzD,CAAC,QAAS,IAAOtF,EAAe,OAAS,GAAO,IAAMuF,EAAsB,KAAM,CAAA,EAG9EE,EAAmB,CAACz0B,EAAkB00B,EAAQ,KAAU,CACxD1F,EAAe,OAAS,IAAQ0F,IAAU,IAC9CF,EAAyBx0B,CAAK,CAAA,EAG1B,CAAC,QAAA+jB,CAAA,EAAWL,GAAStgB,EAAO,CAChC,aAAc4kB,EAAM,SAAA,CACrB,EAEK2M,EAAe,CAAC30B,EAAe40B,EAAsBF,EAAQ,KAC7D1M,EAAM,YAAc,SAAc,CAACA,EAAM,eAAiB0M,GACrD1M,EAAM,UAAUhoB,EAAO40B,CAAG,EAE5B50B,EAETua,EAAAA,UAAU,IAAM,OACVnX,EAAM,QACRA,EAAM,MAAM,QAAQ4T,EAAAqR,EAAW,QAAX,YAAArR,EAAkB,aAAc,GACtD,CACD,EAED6d,EAAAA,YAAY,IAAM,CAChBra,EAAAA,SAAS,IAAM,CACTwN,EAAM,YACRjE,EAAQ,MAAQ,GAClB,CACD,CAAA,CACF,EAED,MAAMkQ,EAAsB/zB,GAC1B,IAAM8nB,EAAM,YACZ,IAAMA,EAAM,KAAA,EAsDP,MAAA,CACL,MAAA5kB,EACA,WAAAslB,EACA,oBAAAuL,EACA,QAvDeW,GAAyB,CAClC,KAAA,CAAC,MAAA50B,CAAK,EAAI40B,EAAI,OACdE,EAAiBH,EAAa30B,EAAO40B,CAAG,EAC9C,GAAIA,EAAI,iBAAkB,CACxBA,EAAI,eAAe,EACnB,MACF,CAIAH,EAFkBK,CAEQ,CAAA,EA8C1B,SA3CgBF,GAAyB,CACnC,KAAA,CAAC,MAAA50B,CAAK,EAAI40B,EAAI,OACdE,EAAiBH,EAAa30B,EAAO40B,CAAG,EAC9C,GAAIA,EAAI,iBAAkB,CACxBA,EAAI,eAAe,EACnB,MACF,CAEA,MAAMG,EAAYD,EACdzM,EAAW,QAAU0M,GACvBN,EAAiBK,EAAgB,EAAI,CACvC,EAiCA,OA9BcF,GAA8B,CAC5C,GAAI,CAAC5F,EAAe,MAAQ,CAAChH,EAAM,cAAe,OAE5C,KAAA,CAAC,MAAAhoB,CAAK,EAAI40B,EAAI,OACdE,EAAiBH,EAAa30B,EAAO40B,EAAK,EAAI,EAE9CG,EAAYD,EACdzM,EAAW,QAAU0M,GACvBN,EAAiBK,EAAgB,EAAI,CACvC,EAsBA,MAnBY,IAAM,CACb9M,EAAM,WACTjE,EAAQ,MAAQ,GAClB,EAiBA,KAdW,IAAM,CACZiE,EAAM,WACTjE,EAAQ,MAAQ,GAClB,CAWA,CAEJ,ECrHAiR,GAAe,CACb5zB,EACA4mB,IACG,CACH,MAAMiN,EAAa1c,EAAA,SAASa,QAAM4O,CAAK,CAAC,EAClCkN,EAAe3c,EAAA,SAASa,QAAMhY,CAAO,CAAC,EAEtC+zB,EAAaC,GACjB,OAAOA,GAAW,UAAYA,IAAW,MAAQ,UAAWA,EAExDC,EAEJD,GAC0C,CACtC,GAAA,OAAOA,GAAW,SACpB,MAAO,CAAC,MAAOA,EAAQ,KAAMA,CAAM,EAEjC,GAAA,OAAOA,GAAW,SACpB,MAAO,CAAC,MAAOA,EAAQ,KAAM,GAAGA,CAAM,IAExC,GAAIA,aAAkB,KACpB,MAAO,CAAC,MAAOA,EAAQ,KAAMA,EAAO,kBAGtC,MAAMp1B,EAAiB8rB,GAAIsJ,EAAQH,EAAW,MAAM,UAAoB,EAClEK,EAAexJ,GAAIsJ,EAAQH,EAAW,MAAM,SAAmB,EAC/DM,EAAezJ,GAAIsJ,EAAQH,EAAW,MAAM,SAAmB,EAC/DO,EAAoB1J,GAAIsJ,EAAQH,EAAW,MAAM,aAAuB,EAExE5K,EAA8B4K,EAAW,MAAM,aACjDnJ,GAAIsJ,EAAQH,EAAW,MAAM,YAAsB,EACnD,OAEJ,OAAI5K,IAAS,OACJ,CACL,MAAOyB,GAAIsJ,EAAQH,EAAW,MAAM,UAAoB,GAAKK,EAC7D,QAASjL,CAAA,EAIN,CACL,MAAArqB,EACA,KAAAs1B,EACA,KAAAC,EACA,SAAAC,CAAA,CACF,EAGIC,EACJpL,GAE8CA,EAAK,IAAK+K,GAAWC,EAAgBD,CAAM,CAAC,EAIrF,MAAA,CAAC,kBAFkBr1B,EAAAA,SAAS,IAAM01B,EAAiBP,EAAa,KAAK,CAAC,EAElD,UAAAC,EAC7B,ECjDMO,GAAqB,aAEdC,GAAsB,IAAM,CACjC,MAAAC,EAAqBxE,SAAOzC,EAAqB,EAKjDkH,EAAWC,GAAqD,CACpEF,GAAA,MAAAA,EAAoB,YAAYE,GAChCF,GAAA,MAAAA,EAAoB,eAAeE,EAAK,EAGpCxT,EAAkBtC,GAAc,kBAAmB,CAAC4B,EAAUxM,EAAWpV,IAAU,CACjF,MAAAmB,EACJ,OAAOygB,GAAa,SAChB,2BAAQ,SAAS,cAAcA,GAC/B3F,GAAa2F,CAAQ,EACtBzgB,IAEDiU,IAAc,QAChBjU,EAAG,UAAU,OAAOu0B,GAAoB11B,IAAU01B,EAAkB,EAEjEv0B,EAAA,aAAaiU,EAAWpV,CAAK,EAClC,CACD,EAED,OAAAkW,GAAkB,IAAM,CACNoM,EAAA,OAAQ,QAAS,EAAE,CAAA,CACpC,EAED3N,EAAA,MACE,IAAMihB,GAAA,YAAAA,EAAoB,WAAW,MACpCxb,GAAa,CACRA,IAAa,QACjBkI,EAAgB,OAAQ,QAASlI,EAAW,EAAIsb,GAAqB,EAAE,CACzE,CAAA,EAGK,CACL,GAAGE,EACH,QAAAC,CAAA,CAEJ,EAEAE,GAAe,CAACC,EAAmCnU,IAA0B,CACrE,KAAA,CAAC,aAAAoU,EAAc,UAAAC,EAAW,YAAAC,EAAa,MAAAC,EAAO,QAAAP,EAAS,WAAAQ,GAAcV,KAErEW,EAAend,EAAAA,qBAErB,GAAI,CAACmd,GAAgBA,EAAa,KAAK,SAAW,SAC1C,MAAA,IAAI,MAAM,mDAAmD,EAGrEL,GAAA,MAAAA,EAAeK,GAEfpgB,GAAkB,IAAM,CACtB2f,EAAQS,CAAY,CAAA,CACrB,EAEK,MAAAC,EAAa,CAACnc,EAAmBmH,IAAsB,CACvDnH,EACF8b,GAAA,MAAAA,EAAYI,GACH/U,GAAY,CAACnH,IACtB+b,GAAA,MAAAA,EAAcG,GAChB,EAIF,OAAAC,EAAW1U,EAAcA,CAAY,EAErClN,QAAMqhB,EAAWO,CAAU,EAEpB,CACL,eAAgBx2B,EAAA,SAAS,IACvBq2B,GAAA,YAAAA,EAAO,MAAM,UAAWj1B,GAAO,SAAA,QAAA6V,EAAA7V,EAAG,UAAH,YAAA6V,EAAY,QAAOC,EAAAqf,EAAa,UAAb,YAAArf,EAAsB,KAC1E,EACA,iBAAkBof,EAClB,iBAAkBt2B,EAAA,SAChB,KAAMq2B,GAAA,YAAAA,EAAO,MAAM,OAAQj1B,GAAO,SAAA,QAAA6V,EAAA7V,EAAG,UAAH,YAAA6V,EAAY,QAAOC,EAAAqf,EAAa,UAAb,YAAArf,EAAsB,QAAO,CAAC,CACrF,CAAA,CAEJ,ECnFAuf,GAAe,CAACrC,EAA2C,SAAc,CACjE,KAAA,CAAC,SAAAsC,GAAYd,KACb5X,EAAW5E,EAAAA,qBAEXud,EAAcC,GACbA,EAAU,OAIXA,EAAU,OAAO,KAAK,SAAW,SAC5BA,EAAU,OAGZD,EAAWC,EAAU,MAAM,EAPzB,KAULC,EAAiB72B,EAAAA,SAAS,IAAM,CAC9B,MAAA82B,EAAa52B,UAAQk0B,CAAE,EAC7B,OAAI0C,GACKJ,GAAA,YAAAA,EAAU,MAAM,KAAMX,GAAUA,OAAAA,QAAAA,EAAAA,EAAM,UAANA,YAAAA,EAAe,GAAG,SAAUe,MAAe,KAG/E9Y,EAIE2Y,EAAW3Y,CAAQ,EAHjB,IAGiB,CAC3B,EAEK+X,EAAQ1c,EAAAA,MAAM,IAAA,OAAM,OAAApC,EAAA4f,EAAe,QAAf,YAAA5f,EAAsB,MAAK,EAE9C,MAAA,CACL,MAAO,UACUC,GAAAD,EAAA4f,EAAA,QAAA,YAAA5f,EAAO,UAAP,MAAAC,EAAgB,MACjC,EACA,KAAK6R,EAAU,GAAI,UACF7R,GAAAD,EAAA4f,EAAA,QAAA,YAAA5f,EAAO,UAAP,MAAAC,EAAgB,KAAK6R,EACtC,EACA,MAAAgN,CAAA,CAEJ,EC9CAgB,GAAe,IAAM,CACnB,KAAM,CAAC,UAAAC,EAAW,MAAAX,CAAK,EAAIT,GAAoB,EAgBxC,MAAA,CACL,GAf4BvE,SAAO1C,EAAwB,EAgB3D,KAdW,CAAC5F,EAAU,KAAO,OACzBiO,GAAA,MAAAA,EAAW,SACF/f,EAAA+f,GAAA,YAAAA,EAAA,MAAM,UAAN,MAAA/f,EAAe,KAAK8R,GACjC,EAYA,QATc,CAACA,EAAU,KAAO,CACzBsN,GAAA,MAAAA,EAAA,MAAM,QAASN,GAAU,QACxB9e,EAAA8e,EAAA,UAAA,MAAA9e,EAAS,KAAK8R,EAAO,EAC5B,CAMD,CAGJ,ECvBekO,GAAA,CACb71B,EAMA6X,EAAiC,OAEjCjZ,WAAS,IAAM,CACP,MAAAC,EAAQC,UAAQkB,CAAE,EAClB81B,EAAeh3B,UAAQ+Y,CAAI,EAEjC,OAAOyT,GAAU,KAAK,OAAOzsB,CAAK,CAAC,EAC/B,GAAG,OAAOA,CAAK,CAAC,GAAGi3B,CAAY,GAC9Bj3B,CACP,CAAC,ECjBYk3B,GAAC9gB,GAAoD,CAC5D,MAAA+gB,EAAuB,CAC3Bn3B,EACA0Y,IACW,CACX,MAAM0e,EAAW1e,IAAQ,KAAO,GAAK,IAAIA,CAAG,GAErC,OAAA1Y,IAAU,SACb,UAAUo3B,CAAQ,UAClBp3B,IAAU,OACR,UAAUo3B,CAAQ,QAClB,OAAOp3B,GAAU,UACfA,IAAU,KACVA,IAAU,KACVA,IAAU,KACVA,IAAU,KACVA,IAAU,KACVA,IAAU,IACV,UAAUo3B,CAAQ,IAAIp3B,CAAK,GAC3BA,IAAU,OACR,UAAUo3B,CAAQ,KAClBp3B,IAAU,KACR,UAAUo3B,CAAQ,KAClBp3B,IAAU,KACR,UAAUo3B,CAAQ,KAClB,UAAUA,CAAQ,EAAA,EAGlC,OAAOr3B,WAAS,IAAM,CACd,MAAAioB,EAAQ/nB,UAAQmW,CAAG,EAElB,MAAA,CACL,CAAC,GAAG+gB,EAAqBnP,EAAM,QAAoC,IAAI,CAAC,EAAE,EAAG,CAAC,CAACA,EAAM,QACrF,CAAC,GAAGmP,EAAqBnP,EAAM,WAAuC,KAAK,CAAC,EAAE,EAC5E,CAAC,CAACA,EAAM,WACV,CAAC,GAAGmP,EAAqBnP,EAAM,cAA0C,QAAQ,CAAC,EAAE,EAClF,CAAC,CAACA,EAAM,cACV,CAAC,GAAGmP,EAAqBnP,EAAM,aAAyC,OAAO,CAAC,EAAE,EAChF,CAAC,CAACA,EAAM,aACV,CAAC,GAAGmP,EAAqBnP,EAAM,WAAuC,KAAK,CAAC,EAAE,EAC5E,CAAC,CAACA,EAAM,UAAA,CACZ,CACD,CACH,EC3CAqP,GAAe,IAAM,CACb,MAAAC,EAAYlG,SAAO5C,EAAY,EAErCjU,OAAAA,EAAAA,UAAU,IAAM,CACd5F,EAAA,MACE,CAAC,IAAM2iB,GAAA,YAAAA,EAAW,MAAM,MAAO,IAAMA,GAAA,YAAAA,EAAW,OAAO,KAAK,EAC5D,CAAC,CAACC,EAAQC,CAAS,IAAM,CACvB,MAAMjC,EAAO,SAAS,gBAGtBA,EAAK,aAAa,MAAOgC,GAAU,GAAQ,MAAQ,KAAK,EACnDhC,EAAA,aAAa,OAAQiC,GAAa,EAAE,CAC3C,EACA,CAAC,UAAW,EAAI,CAAA,CAClB,CACD,EAEM,CAAC,GAAGF,EACb,EClBAG,GAAe,CAACC,EAAmCC,IAA0C,CAC3F,MAAMC,EAAiBrf,EAAA,SAASa,QAAMse,CAAM,CAAC,EACvCG,EAAwBtf,EAAA,SAASa,QAAMue,CAAU,CAAC,EAKlDG,EAA4B1e,EAAA,MAAM,IAAM,CAACye,EAAsB,KAAK,EAE1Etd,EAAAA,UAAU,IAAM,CACd,MAAM8L,EAAWF,GACf,SAAS,KACTyR,EAAe,OAASE,EAA0B,KAAA,EAG9CnjB,EAAA,MAAA,CAACijB,EAAgBE,CAAyB,EAAG,CAAC,CAACC,EAAUC,CAAO,IAAM,CAC1E3R,EAAS,MAAQ0R,GAAYC,CAAA,CAC9B,CAAA,CACF,CACH,ECqBeC,GAAA,CACbC,EACAzlB,EACArR,EAA+C,KAC3B,CACd,MAAA+2B,EAAO/e,QAAM8e,CAAO,EACpBE,EAAMhf,QAAM3G,CAAM,EAElB4lB,EAAkBtkB,EAAAA,IAAI2W,GAAWyN,EAAK,KAAK,CAAC,EAC5CG,EAAiBvkB,EAAAA,IAAI2W,GAAW0N,EAAI,KAAK,CAAC,EAEhDzjB,EAAAA,MAAM,CAACwjB,EAAMC,CAAG,EAAG,IAAM,CACZG,GAAA,CACZ,EACK,KAAA,CACJ,aAAAC,EAAe,gBACf,YAAAC,EAAc,SACd,OAAAC,EAAS,GACT,KAAArV,EACA,WAAAC,EAAa,eACb,UAAAC,EAAY,CAAC,GAAK,GAAK,CAAC,EACxB,aAAAoV,EAAe,EACb,EAAAv3B,EACEqe,EAAU1L,MAAmB,IAAI,EACjCjO,EAAOiO,MAAmB,CAAA,CAAE,EAC5B6kB,EAAW7kB,MAAmB,CAAA,CAAE,EAG1BoF,EAAAA,qBAMVoB,EAAAA,UAAU,IAAM,CACdX,GAAQue,EAAME,EAAiB,CAC7B,UAAW,CACT,IAAMltB,GAAMuf,GAAWvf,CAAC,CAC1B,EACA,UAAW,MACX,UAAW,EAAA,CACZ,EACDyO,GAAQwe,EAAKE,EAAgB,CAC3B,UAAW,CACT,IAAMntB,GAAMuf,GAAWvf,CAAC,CAC1B,EACA,UAAW,MACX,UAAW,EAAA,CACZ,EACUotB,GAAA,CACZ,EApBD/d,EAAAA,SAAS,IAAM,CACF+d,GAAA,CACZ,EAqBH,MAAMA,EAAa,IAAM,CACdK,EAAA,MAAQP,EAAgB,MAC5B,MAAM,KAAKA,EAAgB,MAAM,iBAAiBG,CAAY,CAAC,EAChE,CAAA,EACJ1yB,EAAK,MAAQ8yB,EAAS,MAAM,IAAKz3B,IAAQ,CACvC,GAAIA,EAAG,GACP,GAAAA,EACA,QAAS,GACT,KAAMA,EAAG,WACT,EAAA,CAAA,EAGJ,IAAI03B,EAAkB,GAClBC,EAAoB,EACxB,MAAMC,EAAah5B,EAAA,SAAS,IAC1Bs4B,EAAgB,OAAS,iBAAiBA,EAAgB,KAAK,EAAE,YAAc,UAC3E,KACAA,EAAgB,KAAA,EAGhBW,EAAO5V,GACXwV,EACCK,GAAY,aACX,MAAMC,GAAaliB,EAAA+hB,EAAW,QAAS,+BAAU,mBAA9B,YAAA/hB,EAAgD,UACnE6hB,EAAkBK,EAAYJ,EACVA,EAAAI,EACZD,EAAA,QAASE,GAAU,CACzB,GAAIA,EAAM,eAAgB,CACnBrzB,EAAA,MAAM,QAASsM,GAAS,CACvBA,EAAK,KAAO+mB,EAAM,SACpB/mB,EAAK,QAAU,GACjB,CACD,EACD,MACF,CACKtM,EAAA,MAAM,QAASsM,GAAS,CACvBA,EAAK,KAAO+mB,EAAM,SACpB/mB,EAAK,QAAU,GACjB,CACD,CAAA,CACF,EACD,IAAIgnB,EAAuB,KACvBP,EACFO,IAAQniB,EAAA,CAAC,GAAGnR,EAAK,KAAK,EAAE,QAAU,EAAA,KAAMsM,GAASA,EAAK,OAAO,IAArD,YAAA6E,EAAwD,KAAM,KAE9DmiB,IAAAhG,EAAAttB,EAAK,MAAM,KAAMsM,GAASA,EAAK,OAAO,IAAtC,YAAAghB,EAAyC,KAAM,KAErDgG,IAAU,OACZ3Z,EAAQ,MAAQ2Z,GAEb3Z,EAAQ,QACXA,EAAQ,QAAQ0T,EAAArtB,EAAK,MAAM,CAAC,IAAZ,YAAAqtB,EAAe,KAAM,KAEzC,EACA,CACE,KAAM9P,EAAOqH,GAAWrH,CAAI,EAAI0V,EAChC,WAAAzV,EACA,UAAAC,CACF,CAAA,EAEI5O,QAAA8K,EAAU2Z,GAAU,OACpB,GAAAV,EAAQ,OACZ,MAAMW,GAAQriB,EAAAshB,EAAe,QAAf,YAAAthB,EAAsB,iBAAiByhB,GACrD,GAAIY,IAAU,OAAW,OACzB,IAAIC,EAAc,GACd/3B,EAAoC,KAClC83B,EAAA,QAASjnB,GAAS,2BAChB,MAAAmnB,EAAiBnnB,EAAK,QAAQ,WAAW,EAE3C,IAAA4E,EAAA5E,EAAK,aAAa,MAAM,IAAxB,MAAA4E,EAA2B,SAAS,IAAIoiB,CAAK,IAAK,CACpC73B,EAAA6Q,EACXA,EAAA,UAAU,IAAI,QAAQ,EACvBmnB,KACFtiB,EAAAsiB,GAAA,YAAAA,EAAgB,cAAc,sBAA9B,MAAAtiB,EAAmD,UAAU,IAAI,UACnDqiB,EAAA,IAEhB,IAAIE,GAAYpG,EAAAhhB,EAAK,QAAQ,MAAM,IAAnB,YAAAghB,EAAsB,gBACtC,MAAOD,EAAAqG,GAAA,YAAAA,EAAW,YAAX,MAAArG,EAAsB,SAAS,aACtBmG,EAAA,IACdG,EAAAD,EAAU,cAAc,WAAW,IAAnC,MAAAC,EAAsC,UAAU,IAAI,UACxCD,GAAAE,EAAAF,EAAU,QAAQ,MAAM,IAAxB,YAAAE,EAA2B,eACzC,SAEKtnB,EAAA,UAAU,OAAO,QAAQ,EAC1BmnB,GAAkB,CAACD,KACrBK,EAAAJ,GAAA,YAAAA,EAAgB,cAAc,sBAA9B,MAAAI,EAAmD,UAAU,OAAO,WAGlE,CAACL,EAAa,CAChB,IAAIE,GAAYI,EAAAxnB,EAAK,QAAQ,MAAM,IAAnB,YAAAwnB,EAAsB,gBACtC,MAAOC,EAAAL,GAAA,YAAAA,EAAW,YAAX,MAAAK,EAAsB,SAAS,aACtBP,EAAA,GACJE,EAAA,cAAc,WAAW,IAAMj4B,KACvCu4B,EAAAN,EAAU,cAAc,WAAW,IAAnC,MAAAM,EAAsC,UAAU,OAAO,WAC7CN,GAAAO,EAAAP,EAAU,QAAQ,MAAM,IAAxB,YAAAO,EAA2B,eAE3C,CACF,CACD,CAAA,CACF,EAED,MAAMC,EAAQrB,EAEVza,GACEma,EACA,IAAM,CACOE,GACb,EACA,CACE,UAAW,EACb,CAAA,EARF,CAAC,KAAM,IAAM,IAUX0B,EAAiB,CAACh3B,EAA6Bi3B,EAAkB,KAAU,SAC/Ej3B,EAAM,eAAe,EACrB,MAAMk3B,GAAQljB,GAAAD,EAAA/T,EAAM,SAAN,YAAA+T,EAA8B,eAA9B,YAAAC,EAAA,KAAAD,EAA6C,QACrD7V,EAAyBg5B,EAAO,+BAAU,cAAcA,GAAQ,KAElEh5B,GAAMk3B,EAAgB,QACxBA,EAAgB,MAAM,SAClBA,EAAgB,MAAM,SAAS,CAAC,IAAKl3B,EAAG,UAAW,SAAU+4B,EAAS,SAAW,OAAO,EACvF7B,EAAgB,MAAM,UAAYl3B,EAAG,UAC5C,EAEIsT,EAAU,IAAM,CACpBukB,EAAK,KAAK,EACVgB,EAAK,KAAK,CAAA,EAEL,MAAA,CACL,QAASzhB,WAASkH,CAAO,EACzB,KAAA3Z,EACA,QAASuyB,EACT,OAAQC,EACR,eAAA2B,EACA,WAAA1B,EACA,QAAA9jB,CAAA,CAEJ,ECrOe2lB,GAAA,KAAO,CAAC,GAAGhJ,EAAAA,OAAO7C,EAAc,ICDlC8L,GAAqBC,GAChCv6B,EAAAA,SAAS,IAAM,CACb,MAAMw6B,EAAgB,CACpB,KAAM,GACN,iBAAkB,GAClB,aAAc,GACd,iBAAkB,GAClB,aAAc,UACd,eAAgB,UAChB,eAAgB,GAChB,IAAK,EAAA,EAEDC,EAAa,CACjB,GAAGD,EACH,KAAM,OACN,iBAAkB,eAClB,iBAAkB,cAAA,EAEb,OAAAt6B,UAAQq6B,CAAM,EAAIC,EAAgBC,CAC3C,CAAC,4WCWG,MAAAxS,EAAQC,EANCC,EAMmB,aAAa,EAEzCC,EAAOC,EAoBPqS,EAAiB16B,EAAAA,SAAS,IAAM,CACpC,MAAMw6B,EAAgB,CACpB,KAAM,GACN,iBAAkB,GAClB,aAAc,GACd,iBAAkB,GAClB,aAAc,UACd,eAAgB,UAChB,eAAgB,EAAA,EAEZC,EAAa,CACjB,GAAGD,EACH,iBAAkB,eAClB,iBAAkB,cAAA,EAEb,OAAAvS,EAAM,OAASuS,EAAgBC,CAAA,CACvC,EAEKE,EAAiB36B,EAAA,SAAS,KAAO,CAAC,KAAMioB,EAAM,KAAM,IAAK,GAAM,GAAGyS,EAAe,KAAA,EAAO,q/BCrDxF,MAAAzS,EAAQC,EALCC,EAKmB,cAAc,EAE1CC,EAAOC,wNClBAuS,GACXC,GAIA76B,EAAAA,SAAS,IAAM,CACP,MAAAioB,EAAQ/nB,UAAQ26B,CAAS,EACxB,MAAA,CACL,CAAC,QAAQ5S,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,KAC7C,CAAC,gBAAgBA,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,OACrD,CAAC,gBAAgBA,EAAM,YAAY,QAAQ,EAAGA,EAAM,eAAiB,OACrE,CAAC,kBAAkBA,EAAM,gBAAgB,EAAE,EAAGA,EAAM,mBAAqB,KACzE,CAAC,eAAeA,EAAM,eAAe,EAAE,EAAGA,EAAM,kBAAoB,OACpE,CAAC,eAAeA,EAAM,oBAAoB,QAAQ,EAAGA,EAAM,uBAAyB,OACnF,iBACCA,EAAM,mBAAqB,OAC1BA,EAAM,mBAAqB,QAAaA,EAAM,wBAA0B,QAC3E,CAAC,0BAA0BA,EAAM,gBAAgB,EAAE,EAAGA,EAAM,mBAAqB,OACjF,CAAC,0BAA0BA,EAAM,qBAAqB,QAAQ,EAC5DA,EAAM,wBAA0B,OAClC,YAAaA,EAAM,OAAS,EAAA,CAEhC,CAAC,ECsDG6S,GAAqB,oxBAbrB,MAAA7S,EAAQC,EAzBCC,EAyBmB,OAAO,EAEnCC,EAAOC,EAIPxM,EAAQkf,EAAAA,WAERC,EAAe3J,EAAAA,OAAOhD,GAAsB,IAAI,EAChD4M,EAAa5J,EAAAA,OAAO9C,GAAoB,IAAI,EAE5CvQ,EAAW5E,EAAAA,qBAIX8hB,EAAMl7B,EAAAA,SAAS,IAAM,CACnB,MAAAm7B,EAAalT,EAAM,oBACtB,MAAM,GAAG,EACT,IAAKvmB,GAAMA,EAAE,OAAO,CAAC,EAAE,YAAgB,EAAAA,EAAE,MAAM,CAAC,CAAC,EACjD,KAAK,EAAE,EAEV,MAAI,GADcsc,GAAA,YAAAA,EAAU,WAAW,IAAI,UAAUmd,MAAgB,SACnDlT,EAAM,UAAY,CAACA,EAAM,GAClC,IAEFA,EAAM,mBAAA,CACd,EAEKmT,EAAep7B,EAAAA,SAAS,IAAM,CAClC,MAAMq7B,EAAa,IACnB,GAAIpT,EAAM,KAAM,OAAOA,EAAM,KAEzB,GAAA,OAAOA,EAAM,IAAO,SAAU,OAAOA,EAAM,IAAMoT,EAE/C,KAAA,CAAC,GAAAn6B,CAAM,EAAA+mB,EAET,GAAA/mB,IAAO,QAAa,SAAUA,EAAI,CAC9B,MAAA0uB,EAAO1uB,EAAG,MAAQ,GAClB0d,EAAQ1d,EAAG,MACb,IAAI,OAAO,KAAKA,EAAG,KAAK,EACrB,IAAKQ,GAAA,OAAM,SAAGA,CAAC,KAAIuV,EAAA/V,EAAG,QAAH,YAAA+V,EAAWvV,EAAE,GAAE,EAClC,KAAK,GAAG,CAAC,GACZ,GACE45B,EAAO,CAACp6B,EAAG,MAAQA,EAAG,KAAK,OAAO,CAAC,IAAM,IAAMA,EAAG,MAAQ,GAAK,IAAIA,EAAG,IAAI,GAChF,MAAO,GAAG0uB,CAAI,GAAGhR,CAAK,GAAG0c,CAAI,IAAMD,CACrC,CAGO,OAAAA,CAAA,CACR,EAKKE,EAAmBX,GAAe3S,CAAK,EACvCiC,EAAkBlqB,EAAAA,SAAS,IAAM,CACrCu7B,EAAiB,MACjB,CACE,iBAAkBtT,EAAM,YAAc,EACxC,CAAA,CACD,EAEKuT,EAAax7B,EAAAA,SAAS,KAAO,CACjC,MAASkqB,EAAgB,MACzB,GAAMjC,EAAM,GACZ,QAAWA,EAAM,QACjB,KAAQmT,EAAa,MACrB,OAAUnT,EAAM,OAChB,IAAOA,EAAM,SAAW,SAAWA,EAAM,KAAO,WAAa,OAC7D,SAAYA,EAAM,SAAW,KAAO,OAAOpM,EAAM,SAAa,IAAc,KAAOA,EAAM,SACzF,gBAAiBoM,EAAM,SAAW,GAAO,IACzC,EAAA,EAEIwT,EAAsBz7B,EAAAA,SAAS,KAAO,CAC1C,CAAC86B,EAAkB,EAAG7S,EAAM,OAC5B,SAAUA,EAAM,QAChB,EAAA,EAEIyT,EAAWh6B,GAAkC,WACjD,GAAIumB,EAAM,SAAU,CAClBvmB,EAAE,eAAe,EACjBA,EAAE,yBAAyB,EAC3B,MACF,IAGGuV,EAAA+jB,GAAA,YAAAA,EAAc,QAAd,YAAA/jB,EAAqB,SAAU,IAAQgkB,IAAe,MACtDA,IAAe,QAAQ/jB,EAAA+jB,EAAW,YAAX,YAAA/jB,EAAsB,SAAU,OAExDmc,EAAA2H,GAAA,YAAAA,EAAc,OAAd,MAAA3H,EAAA,KAAA2H,IAGF5S,EAAK,QAAS1mB,CAAC,CAAA,6rCCxHX,MAAAumB,EAAQC,EAdCC,EAcmB,cAAc,EAO1CwT,EAAatK,EAAAA,OAAOtD,GAAsB,IAAI,EAE9C6N,EAA4BrK,GAAuBtJ,CAAK,EAExDiC,EAAkBlqB,EAAAA,SAAS,IAAM,CACrC47B,EAA0B,MAC1B,CACE,wBAAyB3T,EAAM,WAAY0T,GAAA,YAAAA,EAAY,SAAS,OAChE,uBACE1T,EAAM,UAAW0T,GAAA,YAAAA,EAAY,QAAQ,QAAS1T,EAAM,WAAY0T,GAAA,YAAAA,EAAY,SAAS,MACzF,CAAA,CACD,EAEKE,EAAkB5gB,GAAY,IAAMgN,EAAM,SAAS,EACnD6T,EAAc7gB,GAAY,IAAMgN,EAAM,KAAK,EAC3C8T,EAAY9gB,GAAY,IAAMgN,EAAM,KAAO,GAAG,EAC9C+T,EAAkB/gB,GAAY,KAAM0gB,GAAA,YAAAA,EAAY,IAAI,QAAS,GAAG,EAEhEM,EAAgBj8B,EAAA,SAAS,IAC7BioB,EAAM,YAAc,OAChBA,EAAM,UACNA,EAAM,WAAa0T,GAAA,MAAAA,EAAY,UAAU,MACvCG,EAAY,MAAM,QAAQD,EAAgB,KAAK,EAC/C5T,EAAM,cAAgB0T,GAAA,MAAAA,EAAY,aAAa,OAC3CG,EAAY,MAAQ,KAAQC,EAAU,OAAS,MAAM,QAAQF,EAAgB,KAAK,EACpF5T,EAAM,QAAU,OACdA,EAAM,MACN,EAAA,EAGNiU,EAAgBl8B,EAAA,SAAS,IAC7Bg8B,EAAgB,MACZ,GAAIF,EAAY,MAAQ,IAAOE,EAAgB,KAAK,IACpDD,EAAU,MACR,GAAID,EAAY,MAAQ,IAAOC,EAAU,KAAK,IAC9C,OAAO9T,EAAM,OAAU,SACrBA,EAAM,MACN,GAAGA,EAAM,KAAK,GAAA,yuBCxClB,MAAAA,EAAQC,EAfCC,EAemB,WAAW,EAO7CuL,OAAAA,EAAAA,QAAQ3F,GAAsB,CAC5B,SAAU1U,EAAA,MAAM,IAAM4O,EAAM,QAAQ,EACpC,IAAK5O,EAAA,MAAM,IAAM4O,EAAM,GAAG,EAC1B,aAAc5O,EAAA,MAAM,IAAM4O,EAAM,YAAY,EAC5C,UAAW5O,EAAA,MAAM,IAAM4O,EAAM,SAAS,EACtC,QAAS5O,EAAA,MAAM,IAAM4O,EAAM,OAAO,CAAA,CACnC,uoEC8DK,MAAAA,EAAQC,EA3CCC,EA2CmB,QAAQ,EAEpCC,EAAOC,EAWPtmB,EAAUiS,MAAwB,IAAI,EAEtCmoB,EAAarZ,GAAgB/gB,CAAO,EAGpCumB,EAAaC,EAAAA,uBAA8C,EAE3D,CAAC,aAAA2I,EAAc,kBAAAC,CAAiB,EAAIL,GAAe7I,CAAK,EAExDmU,EAAiBnhB,GAAY,IAAMgN,EAAM,QAAQ,EAEjD2T,EAA4BrK,GAAuBtJ,CAAK,EACxDoU,EAAkBhjB,QAAM,IAAO,OAAOiP,EAAW,OAAU,UAAY,EAAIA,EAAW,KAAM,EAE5F,CACJ,SAAAjQ,EACA,MAAAC,EACA,QAAA2Z,EACA,OAAA1Z,EACA,KAAAuE,EACA,SAAAgV,EACA,MAAOwK,CAAA,EACL5K,GAAa2K,EAAiBD,EAAgB,CAChD,UAAW,OAAO9T,EAAW,OAAU,QAAA,CACxC,EAEDvJ,EAAAA,YAAY,IAAM,CACXqJ,EAAA,kBAAmBkU,EAAY,KAAK,CAAA,CAC1C,EAED,MAAMC,EAAcljB,EAAAA,MAAM,IAAO6X,EAAa,MAAQsL,GAAQ,KAAM,EAE9DC,EAAiBpjB,EAAA,MAAM,IAC3B,OAAOiP,EAAW,OAAU,UACxBA,EAAW,MACXjQ,EAAS,OAAU4P,EAAM,aAAe6J,EAAS,KAAA,EAGjD5H,EAAkBlqB,EAAAA,SAAS,IAAM,CACrC47B,EAA0B,MAC1B,CACE,KAAMa,EAAe,KACvB,CAAA,CACD,EAEKC,EAAe,IAAM,CACrBzU,EAAM,cACJ3P,GAAA,EAGF1D,QAAAunB,EAAa9hB,GAAa,CAC9B,GAAIA,EAAU,CACCqiB,IACb,MACF,CACOnkB,GAAA,CACR,EAEK,MAAA8R,EAAwB,CAC5BrJ,EACAsJ,EAA8C,CAAA,IAE9C,IAAIxpB,GAAmBkgB,EAAM,CAC3B,WAAY,GACZ,OAAQjf,EAAQ,OAAS,KACzB,cAAe,KACf,QAAS,KACT,GAAGuoB,EACH,YAAarC,EAAM,EAAA,CACpB,EAEG0U,EAAS,IAAM,CACnB,MAAMz5B,EAAQmnB,EAAsB,OAAQ,CAAC,WAAY,GAAK,EAE9D,GADAjC,EAAK,OAAQllB,CAAK,EACdA,EAAM,iBAAkB,CACtBolB,EAAW,QAAOA,EAAW,MAAQ,IACzCF,EAAK,gBAAgB,EACrB,MACF,CACKE,EAAW,QAAOA,EAAW,MAAQ,GAAA,EAEtCsU,EAAS,CAAC7T,EAAU,KAAO,CACzB,MAAA7lB,EAAQmnB,EAAsB,OAAQ,CAAC,WAAYtB,IAAY,GAAI,QAAAA,EAAQ,EAQjF,GANAX,EAAK,OAAQllB,CAAK,EAEd6lB,IAAY,SACdX,EAAK,QAASllB,CAAK,EAGjBA,EAAM,iBAAkB,CAC1BklB,EAAK,gBAAgB,EAChBE,EAAW,QAAOA,EAAW,MAAQ,IAC1C,MACF,CAEI,OAAOA,EAAW,OAAU,UAC9BA,EAAW,MAAQ,IAEnBA,EAAW,MAAQ,EACdxL,IACP,EAGI+f,EAAgB,IAAM,CACnBF,GAAA,EAEHG,EAAe,IAAM,CACpB1U,EAAA,QAASiC,EAAsB,OAAO,CAAC,CAAA,EAExC0S,EAAe,IAAM,CACpB3U,EAAA,SAAUiC,EAAsB,QAAQ,CAAC,CAAA,EAI1CzV,OAAAA,QAAAyD,EAAWgC,GAAa,CACxBA,IAAa,IAASyX,EAAS,QAAU,IAAWxJ,EAAW,OAC1DsU,GACT,CACD,EAED/R,EAAA,gBAAgB/N,CAAI,EAEP0N,EAAA,CACX,MAAAlS,EACA,QAAA2Z,EACA,OAAA1Z,EACA,KAAAuE,CAAA,CACD,4/DCpPKkgB,GAAgC,UAEvBC,GAAA,CACb,QAAQC,EAAK,CACL,MAAAC,EAASnpB,MASb,CAAA,CAAE,EAEEopB,EAAYppB,MAAI,EAAK,EAErBqpB,EAAgBp9B,GAAmB,CACvCm9B,EAAU,MAAQn9B,CAAA,EAMdyoB,EAAO,CACXrS,EAGI,KACO,OACX,MAAMinB,EAAQ,SAERC,EAAcvpB,EAAsB,MAAA9T,EAAAA,UAAQmW,EAAI,KAAK,IAAjBnW,YAAAA,EAAoB,QAAS,GAAI,EAErEs9B,EAAax9B,EAAAA,SAAS,CAC1B,IAAK,IAAM,CACH,MAAAy9B,EAAiBv9B,EAAAA,QAAQmW,EAAI,KAAK,EACjC,MAAA,CACL,UAAWnW,EAAA,QAAQmW,EAAI,SAAS,GAAKqnB,GACrC,MAAO,CACL,GAAGD,EACH,KAAKA,GAAA,YAAAA,EAAgB,MAAOT,GAC5B,YAAaO,EAAY,MACzB,MAAAD,CACF,CAAA,CAEJ,EACA,IAAMlyB,GAAM,CACEmyB,EAAA,MAAQnyB,EAAE,MAAM,WAC9B,CAAA,CACD,EAGC,OAAAoyB,EAAW,MAAM,MAAM,cAAgB,OACnCA,EAAW,MAAM,MAAM,YACvBJ,EAAU,OAEPD,EAAA,MAAM,KAAKK,CAAU,EAErBL,EAAA,MAAM,QAAQK,CAAU,EAG1BF,CAAA,EAMHK,EAAUC,GAAiB,CACxBT,EAAA,MAAQA,EAAO,MAAM,OAAQ/7B,GAAOA,EAAG,MAAM,MAAM,QAAUw8B,CAAI,CAAA,EAGpEC,EAASD,GAAiB,CACxB,MAAAE,EAAQX,EAAO,MAAM,KAAM/7B,GAAOA,EAAG,MAAM,MAAM,QAAUw8B,CAAI,EACjEE,IAAU,SACZA,EAAM,MAAQ,CACZ,GAAGA,EAAM,MACT,MAAO,CACL,GAAGA,EAAM,MAAM,MACf,YAAa,EACf,CAAA,EAEJ,EAGFZ,EAAI,QAAQ1O,GAAgB,CAC1B,aAAA6O,EACA,OAAAF,EACA,KAAAzU,EACA,OAAAiV,EACA,MAAAE,CAAA,CACD,CACH,CACF,ECtGeE,GAAA,CACb,QAAQb,EAAK,CACL,MAAA1e,EAAQxK,MAAyB,CAAA,CAAE,EACnC/L,EAAQ,IAAM,CAClBuW,EAAM,MAAM,OAAO,EAAGA,EAAM,MAAM,MAAM,CAAA,EAG1C0e,EAAI,QAAQxO,GAAqB,CAAC,MAAAlQ,EAAO,MAAAvW,CAAM,CAAA,CACjD,CACF,ECTe+1B,GAAA,CACb,QAAQd,EAAK77B,EAA8B,EACnCA,GAAA,YAAAA,EAAS,cAAc,QAAU,OAAOA,EAAQ,GAAG,OAAU,YAEnE67B,EAAI,QAAQrO,GAAaxtB,EAAQ,GAAG,KAAK,CAC3C,CACF,ECVA;AAAA;AAAA;AAAA,EASA,IAAI48B,GAAqB,CAAC,qBAAsB,sBAAuB,wBAAyB,uBAAwB,sBAAuB,oCAAqC,+BAAgC,+BAAgC,gEAAiE,6CAA8C,sBAAsB,EACrXC,GAAmCD,GAAmB,KAAK,GAAG,EAC9DE,GAAY,OAAO,QAAY,IAC/Brf,GAAUqf,GAAY,UAAY,GAAK,QAAQ,UAAU,SAAW,QAAQ,UAAU,mBAAqB,QAAQ,UAAU,sBAC7HC,GAAc,CAACD,IAAa,QAAQ,UAAU,YAAc,SAAUp8B,EAAS,CACjF,IAAIs8B,EACJ,OAAOt8B,GAAY,OAAuCs8B,EAAuBt8B,EAAQ,eAAiB,MAAQs8B,IAAyB,OAA3F,OAA6GA,EAAqB,KAAKt8B,CAAO,CAChM,EAAI,SAAUA,EAAS,CACrB,OAAOA,GAAY,KAA6B,OAASA,EAAQ,aACnE,EAUIu8B,GAAU,SAASA,EAAQjsB,EAAMksB,EAAQ,CAC3C,IAAIC,EACAD,IAAW,SACbA,EAAS,IAKX,IAAIE,EAAWpsB,GAAS,OAAoCmsB,EAAqBnsB,EAAK,gBAAkB,MAAQmsB,IAAuB,OAArF,OAAuGA,EAAmB,KAAKnsB,EAAM,OAAO,EAC1LqsB,EAAQD,IAAa,IAAMA,IAAa,OAOxCvlB,EAASwlB,GAASH,GAAUlsB,GAAQisB,EAAQjsB,EAAK,UAAU,EAE/D,OAAO6G,CACT,EAOIylB,GAAoB,SAA2BtsB,EAAM,CACvD,IAAIusB,EAIAC,EAAWxsB,GAAS,OAAoCusB,EAAsBvsB,EAAK,gBAAkB,MAAQusB,IAAwB,OAAvF,OAAyGA,EAAoB,KAAKvsB,EAAM,iBAAiB,EAC3M,OAAOwsB,IAAa,IAAMA,IAAa,MACzC,EAQIC,GAAgB,SAAuB19B,EAAI29B,EAAkB3nB,EAAQ,CAGvE,GAAIknB,GAAQl9B,CAAE,EACZ,MAAO,GAET,IAAI49B,EAAa,MAAM,UAAU,MAAM,MAAM59B,EAAG,iBAAiB88B,EAAiB,CAAC,EACnF,OAAIa,GAAoBjgB,GAAQ,KAAK1d,EAAI88B,EAAiB,GACxDc,EAAW,QAAQ59B,CAAE,EAEvB49B,EAAaA,EAAW,OAAO5nB,CAAM,EAC9B4nB,CACT,EAoCIC,GAA2B,SAASA,EAAyB72B,EAAU22B,EAAkB19B,EAAS,CAGpG,QAFI29B,EAAa,CAAA,EACbE,EAAkB,MAAM,KAAK92B,CAAQ,EAClC82B,EAAgB,QAAQ,CAC7B,IAAIn9B,EAAUm9B,EAAgB,QAC9B,GAAI,CAAAZ,GAAQv8B,EAAS,EAAK,EAK1B,GAAIA,EAAQ,UAAY,OAAQ,CAE9B,IAAIo9B,EAAWp9B,EAAQ,mBACnBo2B,EAAUgH,EAAS,OAASA,EAAWp9B,EAAQ,SAC/Cq9B,EAAmBH,EAAyB9G,EAAS,GAAM92B,CAAO,EAClEA,EAAQ,QACV29B,EAAW,KAAK,MAAMA,EAAYI,CAAgB,EAElDJ,EAAW,KAAK,CACd,YAAaj9B,EACb,WAAYq9B,CACtB,CAAS,CAET,KAAW,CAEL,IAAIC,EAAiBvgB,GAAQ,KAAK/c,EAASm8B,EAAiB,EACxDmB,GAAkBh+B,EAAQ,OAAOU,CAAO,IAAMg9B,GAAoB,CAAC32B,EAAS,SAASrG,CAAO,IAC9Fi9B,EAAW,KAAKj9B,CAAO,EAIzB,IAAIu9B,EAAav9B,EAAQ,YAEzB,OAAOV,EAAQ,eAAkB,YAAcA,EAAQ,cAAcU,CAAO,EAKxEw9B,EAAkB,CAACjB,GAAQgB,EAAY,EAAK,IAAM,CAACj+B,EAAQ,kBAAoBA,EAAQ,iBAAiBU,CAAO,GACnH,GAAIu9B,GAAcC,EAAiB,CAOjC,IAAIC,EAAoBP,EAAyBK,IAAe,GAAOv9B,EAAQ,SAAWu9B,EAAW,SAAU,GAAMj+B,CAAO,EACxHA,EAAQ,QACV29B,EAAW,KAAK,MAAMA,EAAYQ,CAAiB,EAEnDR,EAAW,KAAK,CACd,YAAaj9B,EACb,WAAYy9B,CACxB,CAAW,CAEX,MAGQN,EAAgB,QAAQ,MAAMA,EAAiBn9B,EAAQ,QAAQ,CAElE,CACF,CACD,OAAOi9B,CACT,EAQIS,GAAc,SAAqBptB,EAAM,CAC3C,MAAO,CAAC,MAAM,SAASA,EAAK,aAAa,UAAU,EAAG,EAAE,CAAC,CAC3D,EAQIqtB,GAAc,SAAqBrtB,EAAM,CAC3C,GAAI,CAACA,EACH,MAAM,IAAI,MAAM,kBAAkB,EAEpC,OAAIA,EAAK,SAAW,IAQb,0BAA0B,KAAKA,EAAK,OAAO,GAAKssB,GAAkBtsB,CAAI,IAAM,CAACotB,GAAYptB,CAAI,EACzF,EAGJA,EAAK,QACd,EAUIstB,GAAuB,SAA8BttB,EAAMutB,EAAS,CACtE,IAAIC,EAAWH,GAAYrtB,CAAI,EAC/B,OAAIwtB,EAAW,GAAKD,GAAW,CAACH,GAAYptB,CAAI,EACvC,EAEFwtB,CACT,EACIC,GAAuB,SAA8Bz0B,EAAGC,EAAG,CAC7D,OAAOD,EAAE,WAAaC,EAAE,SAAWD,EAAE,cAAgBC,EAAE,cAAgBD,EAAE,SAAWC,EAAE,QACxF,EACIy0B,GAAU,SAAiB1tB,EAAM,CACnC,OAAOA,EAAK,UAAY,OAC1B,EACI2tB,GAAgB,SAAuB3tB,EAAM,CAC/C,OAAO0tB,GAAQ1tB,CAAI,GAAKA,EAAK,OAAS,QACxC,EACI4tB,GAAuB,SAA8B5tB,EAAM,CAC7D,IAAI3B,EAAI2B,EAAK,UAAY,WAAa,MAAM,UAAU,MAAM,MAAMA,EAAK,QAAQ,EAAE,KAAK,SAAUka,EAAO,CACrG,OAAOA,EAAM,UAAY,SAC7B,CAAG,EACD,OAAO7b,CACT,EACIwvB,GAAkB,SAAyB5G,EAAO6G,EAAM,CAC1D,QAASx4B,EAAI,EAAGA,EAAI2xB,EAAM,OAAQ3xB,IAChC,GAAI2xB,EAAM3xB,CAAC,EAAE,SAAW2xB,EAAM3xB,CAAC,EAAE,OAASw4B,EACxC,OAAO7G,EAAM3xB,CAAC,CAGpB,EACIy4B,GAAkB,SAAyB/tB,EAAM,CACnD,GAAI,CAACA,EAAK,KACR,MAAO,GAET,IAAIguB,EAAahuB,EAAK,MAAQ+rB,GAAY/rB,CAAI,EAC1CiuB,EAAc,SAAqB14B,EAAM,CAC3C,OAAOy4B,EAAW,iBAAiB,6BAA+Bz4B,EAAO,IAAI,CACjF,EACM24B,EACJ,GAAI,OAAO,OAAW,KAAe,OAAO,OAAO,IAAQ,KAAe,OAAO,OAAO,IAAI,QAAW,WACrGA,EAAWD,EAAY,OAAO,IAAI,OAAOjuB,EAAK,IAAI,CAAC,MAEnD,IAAI,CACFkuB,EAAWD,EAAYjuB,EAAK,IAAI,CACjC,OAAQmuB,EAAK,CAEZ,eAAQ,MAAM,2IAA4IA,EAAI,OAAO,EAC9J,EACR,CAEH,IAAIC,EAAUP,GAAgBK,EAAUluB,EAAK,IAAI,EACjD,MAAO,CAACouB,GAAWA,IAAYpuB,CACjC,EACIquB,GAAU,SAAiBruB,EAAM,CACnC,OAAO0tB,GAAQ1tB,CAAI,GAAKA,EAAK,OAAS,OACxC,EACIsuB,GAAqB,SAA4BtuB,EAAM,CACzD,OAAOquB,GAAQruB,CAAI,GAAK,CAAC+tB,GAAgB/tB,CAAI,CAC/C,EAGIuuB,GAAiB,SAAwBvuB,EAAM,CACjD,IAAIwuB,EAwBAC,EAAWzuB,GAAQ+rB,GAAY/rB,CAAI,EACnC0uB,GAAgBF,EAAYC,KAAc,MAAQD,IAAc,OAAS,OAASA,EAAU,KAI5FG,EAAW,GACf,GAAIF,GAAYA,IAAazuB,EAAM,CACjC,IAAI4uB,EAAeC,EAAuB1uB,EAE1C,IADAwuB,EAAW,CAAC,GAAGC,EAAgBF,KAAkB,MAAQE,IAAkB,SAAWC,EAAwBD,EAAc,iBAAmB,MAAQC,IAA0B,QAAUA,EAAsB,SAASH,CAAY,GAAK1uB,GAAS,OAA4BG,EAAsBH,EAAK,iBAAmB,MAAQG,IAAwB,QAAUA,EAAoB,SAASH,CAAI,GAClY,CAAC2uB,GAAYD,GAAc,CAChC,IAAII,EAAYC,EAAgBC,EAIhCP,EAAW1C,GAAY2C,CAAY,EACnCA,GAAgBI,EAAaL,KAAc,MAAQK,IAAe,OAAS,OAASA,EAAW,KAC/FH,EAAW,CAAC,GAAGI,EAAiBL,KAAkB,MAAQK,IAAmB,SAAWC,EAAwBD,EAAe,iBAAmB,MAAQC,IAA0B,QAAUA,EAAsB,SAASN,CAAY,EAC1O,CACF,CACD,OAAOC,CACT,EACIM,GAAa,SAAoBjvB,EAAM,CACzC,IAAIkvB,EAAwBlvB,EAAK,sBAAuB,EACtDnE,EAAQqzB,EAAsB,MAC9BpzB,EAASozB,EAAsB,OACjC,OAAOrzB,IAAU,GAAKC,IAAW,CACnC,EACIqzB,GAAW,SAAkBnvB,EAAM/L,EAAM,CAC3C,IAAIm7B,EAAen7B,EAAK,aACtBo7B,EAAgBp7B,EAAK,cAMvB,GAAI,iBAAiB+L,CAAI,EAAE,aAAe,SACxC,MAAO,GAET,IAAIsvB,EAAkB7iB,GAAQ,KAAKzM,EAAM,+BAA+B,EACpEuvB,EAAmBD,EAAkBtvB,EAAK,cAAgBA,EAC9D,GAAIyM,GAAQ,KAAK8iB,EAAkB,uBAAuB,EACxD,MAAO,GAET,GAAI,CAACH,GAAgBA,IAAiB,QAAUA,IAAiB,cAAe,CAC9E,GAAI,OAAOC,GAAkB,WAAY,CAIvC,QADIG,EAAexvB,EACZA,GAAM,CACX,IAAIyvB,EAAgBzvB,EAAK,cACrB0vB,EAAW3D,GAAY/rB,CAAI,EAC/B,GAAIyvB,GAAiB,CAACA,EAAc,YAAcJ,EAAcI,CAAa,IAAM,GAIjF,OAAOR,GAAWjvB,CAAI,EACbA,EAAK,aAEdA,EAAOA,EAAK,aACH,CAACyvB,GAAiBC,IAAa1vB,EAAK,cAE7CA,EAAO0vB,EAAS,KAGhB1vB,EAAOyvB,CAEV,CACDzvB,EAAOwvB,CACR,CAWD,GAAIjB,GAAevuB,CAAI,EAKrB,MAAO,CAACA,EAAK,eAAgB,EAAC,OAmBhC,GAAIovB,IAAiB,cACnB,MAAO,EAGb,SAAaA,IAAiB,gBAM1B,OAAOH,GAAWjvB,CAAI,EAKxB,MAAO,EACT,EAKI2vB,GAAyB,SAAgC3vB,EAAM,CACjE,GAAI,mCAAmC,KAAKA,EAAK,OAAO,EAGtD,QAFI4vB,EAAa5vB,EAAK,cAEf4vB,GAAY,CACjB,GAAIA,EAAW,UAAY,YAAcA,EAAW,SAAU,CAE5D,QAASt6B,EAAI,EAAGA,EAAIs6B,EAAW,SAAS,OAAQt6B,IAAK,CACnD,IAAI4kB,EAAQ0V,EAAW,SAAS,KAAKt6B,CAAC,EAEtC,GAAI4kB,EAAM,UAAY,SAGpB,OAAOzN,GAAQ,KAAKmjB,EAAY,sBAAsB,EAAI,GAAO,CAAC1V,EAAM,SAASla,CAAI,CAExF,CAED,MAAO,EACR,CACD4vB,EAAaA,EAAW,aACzB,CAKH,MAAO,EACT,EACIC,GAAkC,SAAyC7gC,EAASgR,EAAM,CAC5F,MAAI,EAAAA,EAAK,UAITisB,GAAQjsB,CAAI,GAAK2tB,GAAc3tB,CAAI,GAAKmvB,GAASnvB,EAAMhR,CAAO,GAE9D4+B,GAAqB5tB,CAAI,GAAK2vB,GAAuB3vB,CAAI,EAI3D,EACI8vB,GAAiC,SAAwC9gC,EAASgR,EAAM,CAC1F,MAAI,EAAAsuB,GAAmBtuB,CAAI,GAAKqtB,GAAYrtB,CAAI,EAAI,GAAK,CAAC6vB,GAAgC7gC,EAASgR,CAAI,EAIzG,EACI+vB,GAA4B,SAAmCC,EAAgB,CACjF,IAAIxC,EAAW,SAASwC,EAAe,aAAa,UAAU,EAAG,EAAE,EACnE,MAAI,SAAMxC,CAAQ,GAAKA,GAAY,EAMrC,EAMIyC,GAAc,SAASA,EAAYtD,EAAY,CACjD,IAAIuD,EAAmB,CAAA,EACnBC,EAAmB,CAAA,EACvB,OAAAxD,EAAW,QAAQ,SAAUpT,EAAMjkB,EAAG,CACpC,IAAIi4B,EAAU,CAAC,CAAChU,EAAK,YACjB7pB,EAAU69B,EAAUhU,EAAK,YAAcA,EACvC6W,EAAoB9C,GAAqB59B,EAAS69B,CAAO,EACzDx3B,EAAWw3B,EAAU0C,EAAY1W,EAAK,UAAU,EAAI7pB,EACpD0gC,IAAsB,EACxB7C,EAAU2C,EAAiB,KAAK,MAAMA,EAAkBn6B,CAAQ,EAAIm6B,EAAiB,KAAKxgC,CAAO,EAEjGygC,EAAiB,KAAK,CACpB,cAAe76B,EACf,SAAU86B,EACV,KAAM7W,EACN,QAASgU,EACT,QAASx3B,CACjB,CAAO,CAEP,CAAG,EACMo6B,EAAiB,KAAK1C,EAAoB,EAAE,OAAO,SAAUr8B,EAAKi/B,EAAU,CACjF,OAAAA,EAAS,QAAUj/B,EAAI,KAAK,MAAMA,EAAKi/B,EAAS,OAAO,EAAIj/B,EAAI,KAAKi/B,EAAS,OAAO,EAC7Ej/B,CACR,EAAE,EAAE,EAAE,OAAO8+B,CAAgB,CAChC,EACII,GAAW,SAAkBC,EAAWvhC,EAAS,CACnDA,EAAUA,GAAW,GACrB,IAAI29B,EACJ,OAAI39B,EAAQ,cACV29B,EAAaC,GAAyB,CAAC2D,CAAS,EAAGvhC,EAAQ,iBAAkB,CAC3E,OAAQ8gC,GAA+B,KAAK,KAAM9gC,CAAO,EACzD,QAAS,GACT,cAAeA,EAAQ,cACvB,iBAAkB+gC,EACxB,CAAK,EAEDpD,EAAaF,GAAc8D,EAAWvhC,EAAQ,iBAAkB8gC,GAA+B,KAAK,KAAM9gC,CAAO,CAAC,EAE7GihC,GAAYtD,CAAU,CAC/B,EACI6D,GAAY,SAAmBD,EAAWvhC,EAAS,CACrDA,EAAUA,GAAW,GACrB,IAAI29B,EACJ,OAAI39B,EAAQ,cACV29B,EAAaC,GAAyB,CAAC2D,CAAS,EAAGvhC,EAAQ,iBAAkB,CAC3E,OAAQ6gC,GAAgC,KAAK,KAAM7gC,CAAO,EAC1D,QAAS,GACT,cAAeA,EAAQ,aAC7B,CAAK,EAED29B,EAAaF,GAAc8D,EAAWvhC,EAAQ,iBAAkB6gC,GAAgC,KAAK,KAAM7gC,CAAO,CAAC,EAE9G29B,CACT,EACI8D,GAAa,SAAoBzwB,EAAMhR,EAAS,CAElD,GADAA,EAAUA,GAAW,GACjB,CAACgR,EACH,MAAM,IAAI,MAAM,kBAAkB,EAEpC,OAAIyM,GAAQ,KAAKzM,EAAM6rB,EAAiB,IAAM,GACrC,GAEFiE,GAA+B9gC,EAASgR,CAAI,CACrD,EACI0wB,GAA4C9E,GAAmB,OAAO,QAAQ,EAAE,KAAK,GAAG,EACxF+E,GAAc,SAAqB3wB,EAAMhR,EAAS,CAEpD,GADAA,EAAUA,GAAW,GACjB,CAACgR,EACH,MAAM,IAAI,MAAM,kBAAkB,EAEpC,OAAIyM,GAAQ,KAAKzM,EAAM0wB,EAA0B,IAAM,GAC9C,GAEFb,GAAgC7gC,EAASgR,CAAI,CACtD,ECvjBA;AAAA;AAAA;AAAA,EAMA,SAAS4wB,GAAQvhC,EAAGgP,EAAG,CACrB,IAAI,EAAI,OAAO,KAAKhP,CAAC,EACrB,GAAI,OAAO,sBAAuB,CAChC,IAAI+O,EAAI,OAAO,sBAAsB/O,CAAC,EACtCgP,IAAMD,EAAIA,EAAE,OAAO,SAAUC,EAAG,CAC9B,OAAO,OAAO,yBAAyBhP,EAAGgP,CAAC,EAAE,UACnD,CAAK,GAAI,EAAE,KAAK,MAAM,EAAGD,CAAC,CACvB,CACD,OAAO,CACT,CACA,SAASyyB,GAAexhC,EAAG,CACzB,QAASgP,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CACzC,IAAI,EAAY,UAAUA,CAAC,GAAnB,KAAuB,UAAUA,CAAC,EAAI,GAC9CA,EAAI,EAAIuyB,GAAQ,OAAO,CAAC,EAAG,EAAE,EAAE,QAAQ,SAAUvyB,EAAG,CAClDyyB,GAAgBzhC,EAAGgP,EAAG,EAAEA,CAAC,CAAC,CAChC,CAAK,EAAI,OAAO,0BAA4B,OAAO,iBAAiBhP,EAAG,OAAO,0BAA0B,CAAC,CAAC,EAAIuhC,GAAQ,OAAO,CAAC,CAAC,EAAE,QAAQ,SAAUvyB,EAAG,CAChJ,OAAO,eAAehP,EAAGgP,EAAG,OAAO,yBAAyB,EAAGA,CAAC,CAAC,CACvE,CAAK,CACF,CACD,OAAOhP,CACT,CACA,SAASyhC,GAAgB9sB,EAAK4F,EAAKhc,EAAO,CACxC,OAAAgc,EAAMmnB,GAAennB,CAAG,EACpBA,KAAO5F,EACT,OAAO,eAAeA,EAAK4F,EAAK,CAC9B,MAAOhc,EACP,WAAY,GACZ,aAAc,GACd,SAAU,EAChB,CAAK,EAEDoW,EAAI4F,CAAG,EAAIhc,EAENoW,CACT,CACA,SAASgtB,GAAahgC,EAAOigC,EAAM,CACjC,GAAI,OAAOjgC,GAAU,UAAYA,IAAU,KAAM,OAAOA,EACxD,IAAIkgC,EAAOlgC,EAAM,OAAO,WAAW,EACnC,GAAIkgC,IAAS,OAAW,CACtB,IAAIC,EAAMD,EAAK,KAAKlgC,EAAOigC,GAAQ,SAAS,EAC5C,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EACpC,MAAM,IAAI,UAAU,8CAA8C,CACnE,CACD,OAAQF,IAAS,SAAW,OAAS,QAAQjgC,CAAK,CACpD,CACA,SAAS+/B,GAAeK,EAAK,CAC3B,IAAIxnB,EAAMonB,GAAaI,EAAK,QAAQ,EACpC,OAAO,OAAOxnB,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CACnD,CAEA,IAAIynB,GAAmB,CACrB,aAAc,SAAsBC,EAAWC,EAAM,CACnD,GAAID,EAAU,OAAS,EAAG,CACxB,IAAIE,EAAaF,EAAUA,EAAU,OAAS,CAAC,EAC3CE,IAAeD,GACjBC,EAAW,MAAK,CAEnB,CACD,IAAIC,EAAYH,EAAU,QAAQC,CAAI,EAClCE,IAAc,IAIhBH,EAAU,OAAOG,EAAW,CAAC,EAC7BH,EAAU,KAAKC,CAAI,CAEtB,EACD,eAAgB,SAAwBD,EAAWC,EAAM,CACvD,IAAIE,EAAYH,EAAU,QAAQC,CAAI,EAClCE,IAAc,IAChBH,EAAU,OAAOG,EAAW,CAAC,EAE3BH,EAAU,OAAS,GACrBA,EAAUA,EAAU,OAAS,CAAC,EAAE,QAAO,CAE1C,CACH,EACII,GAAoB,SAA2B1xB,EAAM,CACvD,OAAOA,EAAK,SAAWA,EAAK,QAAQ,gBAAkB,SAAW,OAAOA,EAAK,QAAW,UAC1F,EACI2xB,GAAgB,SAAuBtiC,EAAG,CAC5C,OAAQA,GAAM,KAAuB,OAASA,EAAE,OAAS,WAAaA,GAAM,KAAuB,OAASA,EAAE,OAAS,QAAUA,GAAM,KAAuB,OAASA,EAAE,WAAa,EACxL,EACIuiC,GAAa,SAAoBviC,EAAG,CACtC,OAAQA,GAAM,KAAuB,OAASA,EAAE,OAAS,QAAUA,GAAM,KAAuB,OAASA,EAAE,WAAa,CAC1H,EAGIwiC,GAAe,SAAsBxiC,EAAG,CAC1C,OAAOuiC,GAAWviC,CAAC,GAAK,CAACA,EAAE,QAC7B,EAGIyiC,GAAgB,SAAuBziC,EAAG,CAC5C,OAAOuiC,GAAWviC,CAAC,GAAKA,EAAE,QAC5B,EACI0hB,GAAQ,SAAevb,EAAI,CAC7B,OAAO,WAAWA,EAAI,CAAC,CACzB,EAIIu8B,GAAY,SAAmB9tB,EAAKzO,EAAI,CAC1C,IAAIw8B,EAAM,GACV,OAAA/tB,EAAI,MAAM,SAAUrW,EAAO0H,EAAG,CAC5B,OAAIE,EAAG5H,CAAK,GACVokC,EAAM18B,EACC,IAGF,EACX,CAAG,EAEM08B,CACT,EASIC,GAAiB,SAAwBrkC,EAAO,CAClD,QAASskC,EAAO,UAAU,OAAQC,EAAS,IAAI,MAAMD,EAAO,EAAIA,EAAO,EAAI,CAAC,EAAGE,EAAO,EAAGA,EAAOF,EAAME,IACpGD,EAAOC,EAAO,CAAC,EAAI,UAAUA,CAAI,EAEnC,OAAO,OAAOxkC,GAAU,WAAaA,EAAM,MAAM,OAAQukC,CAAM,EAAIvkC,CACrE,EACIykC,GAAkB,SAAyBxhC,EAAO,CAQpD,OAAOA,EAAM,OAAO,YAAc,OAAOA,EAAM,cAAiB,WAAaA,EAAM,aAAc,EAAC,CAAC,EAAIA,EAAM,MAC/G,EAIIyhC,GAAoB,CAAA,EACpBC,GAAkB,SAAyBx8B,EAAUy8B,EAAa,CAGpE,IAAIC,GAAOD,GAAgB,KAAiC,OAASA,EAAY,WAAa,SAC1FlB,GAAakB,GAAgB,KAAiC,OAASA,EAAY,YAAcF,GACjG19B,EAASi8B,GAAe,CAC1B,wBAAyB,GACzB,kBAAmB,GACnB,kBAAmB,GACnB,aAAcgB,GACd,cAAeC,EAChB,EAAEU,CAAW,EACVxkC,EAAQ,CAGV,WAAY,CAAE,EAiBd,gBAAiB,CAAE,EAOnB,eAAgB,CAAE,EAClB,4BAA6B,KAC7B,wBAAyB,KACzB,OAAQ,GACR,OAAQ,GAGR,uBAAwB,OAExB,eAAgB,MACpB,EACMujC,EAUAmB,EAAY,SAAmBC,EAAuBC,EAAYC,EAAkB,CACtF,OAAOF,GAAyBA,EAAsBC,CAAU,IAAM,OAAYD,EAAsBC,CAAU,EAAIh+B,EAAOi+B,GAAoBD,CAAU,CAC/J,EAYME,EAAqB,SAA4BpjC,EAASmB,EAAO,CACnE,IAAIkiC,EAAe,OAAQliC,GAAU,KAA2B,OAASA,EAAM,eAAkB,WAAaA,EAAM,aAAc,EAAG,OAIrI,OAAO7C,EAAM,gBAAgB,UAAU,SAAUiG,EAAM,CACrD,IAAIs8B,EAAYt8B,EAAK,UACnB++B,EAAgB/+B,EAAK,cACvB,OAAOs8B,EAAU,SAAS7gC,CAAO,IAIjCqjC,GAAiB,KAAkC,OAASA,EAAa,SAASxC,CAAS,IAAMyC,EAAc,KAAK,SAAUhzB,EAAM,CAClI,OAAOA,IAAStQ,CACxB,CAAO,CACP,CAAK,CACL,EAeMujC,EAAmB,SAA0BL,EAAY,CAC3D,IAAIM,EAAct+B,EAAOg+B,CAAU,EACnC,GAAI,OAAOM,GAAgB,WAAY,CACrC,QAASC,EAAQ,UAAU,OAAQhB,EAAS,IAAI,MAAMgB,EAAQ,EAAIA,EAAQ,EAAI,CAAC,EAAGC,EAAQ,EAAGA,EAAQD,EAAOC,IAC1GjB,EAAOiB,EAAQ,CAAC,EAAI,UAAUA,CAAK,EAErCF,EAAcA,EAAY,MAAM,OAAQf,CAAM,CAC/C,CAKD,GAJIe,IAAgB,KAClBA,EAAc,QAGZ,CAACA,EAAa,CAChB,GAAIA,IAAgB,QAAaA,IAAgB,GAC/C,OAAOA,EAIT,MAAM,IAAI,MAAM,IAAI,OAAON,EAAY,8DAA8D,CAAC,CACvG,CACD,IAAI5yB,EAAOkzB,EAEX,GAAI,OAAOA,GAAgB,WACzBlzB,EAAOyyB,EAAI,cAAcS,CAAW,EAChC,CAAClzB,GACH,MAAM,IAAI,MAAM,IAAI,OAAO4yB,EAAY,uCAAuC,CAAC,EAGnF,OAAO5yB,CACX,EACMqzB,EAAsB,UAA+B,CACvD,IAAIrzB,EAAOizB,EAAiB,cAAc,EAG1C,GAAIjzB,IAAS,GACX,MAAO,GAET,GAAIA,IAAS,QAAa,CAAC2wB,GAAY3wB,EAAMpL,EAAO,eAAe,EAEjE,GAAIk+B,EAAmBL,EAAI,aAAa,GAAK,EAC3CzyB,EAAOyyB,EAAI,kBACN,CACL,IAAIa,EAAqBtlC,EAAM,eAAe,CAAC,EAC3CulC,EAAoBD,GAAsBA,EAAmB,kBAGjEtzB,EAAOuzB,GAAqBN,EAAiB,eAAe,CAC7D,CAEH,GAAI,CAACjzB,EACH,MAAM,IAAI,MAAM,8DAA8D,EAEhF,OAAOA,CACX,EACMwzB,EAAsB,UAA+B,CA4EvD,GA3EAxlC,EAAM,gBAAkBA,EAAM,WAAW,IAAI,SAAUuiC,EAAW,CAChE,IAAIyC,EAAgB1C,GAASC,EAAW37B,EAAO,eAAe,EAK1D6+B,EAAiBjD,GAAUD,EAAW37B,EAAO,eAAe,EAC5D2+B,EAAoBP,EAAc,OAAS,EAAIA,EAAc,CAAC,EAAI,OAClEU,EAAmBV,EAAc,OAAS,EAAIA,EAAcA,EAAc,OAAS,CAAC,EAAI,OACxFW,EAAuBF,EAAe,KAAK,SAAUzzB,EAAM,CAC7D,OAAOywB,GAAWzwB,CAAI,CAC9B,CAAO,EACG4zB,EAAsBH,EAAe,MAAK,EAAG,UAAU,KAAK,SAAUzzB,EAAM,CAC9E,OAAOywB,GAAWzwB,CAAI,CAC9B,CAAO,EACG6zB,EAAqB,CAAC,CAACb,EAAc,KAAK,SAAUhzB,EAAM,CAC5D,OAAOqtB,GAAYrtB,CAAI,EAAI,CACnC,CAAO,EACD,MAAO,CACL,UAAWuwB,EACX,cAAeyC,EACf,eAAgBS,EAEhB,mBAAoBI,EAEpB,kBAAmBN,EAEnB,iBAAkBG,EASlB,qBAAsBC,EAEtB,oBAAqBC,EASrB,iBAAkB,SAA0B5zB,EAAM,CAChD,IAAI8zB,EAAU,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GAC9EC,EAAUf,EAAc,QAAQhzB,CAAI,EACxC,OAAI+zB,EAAU,EAORD,EACKL,EAAe,MAAMA,EAAe,QAAQzzB,CAAI,EAAI,CAAC,EAAE,KAAK,SAAUjR,EAAI,CAC/E,OAAO0hC,GAAW1hC,CAAE,CACpC,CAAe,EAEI0kC,EAAe,MAAM,EAAGA,EAAe,QAAQzzB,CAAI,CAAC,EAAE,QAAO,EAAG,KAAK,SAAUjR,EAAI,CACxF,OAAO0hC,GAAW1hC,CAAE,CAClC,CAAa,EAEIikC,EAAce,GAAWD,EAAU,EAAI,GAAG,CAClD,CACT,CACA,CAAK,EACD9lC,EAAM,eAAiBA,EAAM,gBAAgB,OAAO,SAAUgmC,EAAO,CACnE,OAAOA,EAAM,cAAc,OAAS,CAC1C,CAAK,EAGGhmC,EAAM,eAAe,QAAU,GAAK,CAACilC,EAAiB,eAAe,EAEvE,MAAM,IAAI,MAAM,qGAAqG,EAUvH,GAAIjlC,EAAM,gBAAgB,KAAK,SAAU6Q,EAAG,CAC1C,OAAOA,EAAE,kBACV,CAAA,GAAK7Q,EAAM,gBAAgB,OAAS,EACnC,MAAM,IAAI,MAAM,+KAA+K,CAErM,EAUMiB,EAAmB,SAASA,EAAiBF,EAAI,CACnD,IAAII,EAAgBJ,EAAG,cACvB,GAAKI,EAGL,OAAIA,EAAc,YAAcA,EAAc,WAAW,gBAAkB,KAClEF,EAAiBE,EAAc,UAAU,EAE3CA,CACX,EACM8kC,EAAW,SAASA,EAASj0B,EAAM,CACrC,GAAIA,IAAS,IAGTA,IAAS/Q,EAAiB,QAAQ,EAGtC,IAAI,CAAC+Q,GAAQ,CAACA,EAAK,MAAO,CACxBi0B,EAASZ,EAAmB,CAAE,EAC9B,MACD,CACDrzB,EAAK,MAAM,CACT,cAAe,CAAC,CAACpL,EAAO,aAC9B,CAAK,EAED5G,EAAM,wBAA0BgS,EAC5B0xB,GAAkB1xB,CAAI,GACxBA,EAAK,OAAM,EAEjB,EACMk0B,EAAqB,SAA4BC,EAAuB,CAC1E,IAAIn0B,EAAOizB,EAAiB,iBAAkBkB,CAAqB,EACnE,OAAOn0B,IAAcA,IAAS,GAAQ,GAAQm0B,EAClD,EAaMC,EAAkB,SAAyBC,EAAO,CACpD,IAAIh0B,EAASg0B,EAAM,OACjBxjC,EAAQwjC,EAAM,MACdC,EAAmBD,EAAM,WACzBE,EAAaD,IAAqB,OAAS,GAAQA,EACrDj0B,EAASA,GAAUgyB,GAAgBxhC,CAAK,EACxC2iC,IACA,IAAIgB,EAAkB,KACtB,GAAIxmC,EAAM,eAAe,OAAS,EAAG,CAInC,IAAIymC,EAAiB3B,EAAmBzyB,EAAQxP,CAAK,EACjD6jC,EAAiBD,GAAkB,EAAIzmC,EAAM,gBAAgBymC,CAAc,EAAI,OACnF,GAAIA,EAAiB,EAGfF,EAEFC,EAAkBxmC,EAAM,eAAeA,EAAM,eAAe,OAAS,CAAC,EAAE,iBAGxEwmC,EAAkBxmC,EAAM,eAAe,CAAC,EAAE,0BAEnCumC,EAAY,CAIrB,IAAII,EAAoB5C,GAAU/jC,EAAM,eAAgB,SAAU4mC,EAAO,CACvE,IAAIrB,EAAoBqB,EAAM,kBAC9B,OAAOv0B,IAAWkzB,CAC5B,CAAS,EAUD,GATIoB,EAAoB,IAAMD,EAAe,YAAcr0B,GAAUswB,GAAYtwB,EAAQzL,EAAO,eAAe,GAAK,CAAC67B,GAAWpwB,EAAQzL,EAAO,eAAe,GAAK,CAAC8/B,EAAe,iBAAiBr0B,EAAQ,EAAK,KAO/Ms0B,EAAoBF,GAElBE,GAAqB,EAAG,CAI1B,IAAIE,EAAwBF,IAAsB,EAAI3mC,EAAM,eAAe,OAAS,EAAI2mC,EAAoB,EACxGG,EAAmB9mC,EAAM,eAAe6mC,CAAqB,EACjEL,EAAkBnH,GAAYhtB,CAAM,GAAK,EAAIy0B,EAAiB,iBAAmBA,EAAiB,mBAC5G,MAAoBlD,GAAW/gC,CAAK,IAG1B2jC,EAAkBE,EAAe,iBAAiBr0B,EAAQ,EAAK,EAEzE,KAAa,CAIL,IAAI00B,EAAmBhD,GAAU/jC,EAAM,eAAgB,SAAUgnC,EAAO,CACtE,IAAItB,EAAmBsB,EAAM,iBAC7B,OAAO30B,IAAWqzB,CAC5B,CAAS,EAUD,GATIqB,EAAmB,IAAML,EAAe,YAAcr0B,GAAUswB,GAAYtwB,EAAQzL,EAAO,eAAe,GAAK,CAAC67B,GAAWpwB,EAAQzL,EAAO,eAAe,GAAK,CAAC8/B,EAAe,iBAAiBr0B,CAAM,KAOvM00B,EAAmBN,GAEjBM,GAAoB,EAAG,CAIzB,IAAIE,EAAyBF,IAAqB/mC,EAAM,eAAe,OAAS,EAAI,EAAI+mC,EAAmB,EACvGG,EAAoBlnC,EAAM,eAAeinC,CAAsB,EACnET,EAAkBnH,GAAYhtB,CAAM,GAAK,EAAI60B,EAAkB,kBAAoBA,EAAkB,oBAC/G,MAAoBtD,GAAW/gC,CAAK,IAG1B2jC,EAAkBE,EAAe,iBAAiBr0B,CAAM,EAE3D,CACP,MAGMm0B,EAAkBvB,EAAiB,eAAe,EAEpD,OAAOuB,CACX,EAIMW,EAAmB,SAA0B9lC,EAAG,CAClD,IAAIgR,EAASgyB,GAAgBhjC,CAAC,EAC9B,GAAI,EAAAyjC,EAAmBzyB,EAAQhR,CAAC,GAAK,GAIrC,IAAI4iC,GAAer9B,EAAO,wBAAyBvF,CAAC,EAAG,CAErDkiC,EAAK,WAAW,CAOd,YAAa38B,EAAO,uBAC5B,CAAO,EACD,MACD,CAKGq9B,GAAer9B,EAAO,kBAAmBvF,CAAC,GAM9CA,EAAE,eAAc,EACpB,EAMM+lC,EAAe,SAAsBvkC,EAAO,CAC9C,IAAIwP,EAASgyB,GAAgBxhC,CAAK,EAC9BwkC,EAAkBvC,EAAmBzyB,EAAQxP,CAAK,GAAK,EAG3D,GAAIwkC,GAAmBh1B,aAAkB,SACnCg1B,IACFrnC,EAAM,wBAA0BqS,OAE7B,CAELxP,EAAM,yBAAwB,EAK9B,IAAIykC,EACAC,EAAsB,GAC1B,GAAIvnC,EAAM,wBACR,GAAIq/B,GAAYr/B,EAAM,uBAAuB,EAAI,EAAG,CAElD,IAAIwnC,EAAkB1C,EAAmB9kC,EAAM,uBAAuB,EAKlEglC,EAAgBhlC,EAAM,gBAAgBwnC,CAAe,EAAE,cAC3D,GAAIxC,EAAc,OAAS,EAAG,CAE5B,IAAIyC,EAAYzC,EAAc,UAAU,SAAUhzB,EAAM,CACtD,OAAOA,IAAShS,EAAM,uBACpC,CAAa,EACGynC,GAAa,IACX7gC,EAAO,aAAa5G,EAAM,cAAc,EACtCynC,EAAY,EAAIzC,EAAc,SAChCsC,EAAWtC,EAAcyC,EAAY,CAAC,EACtCF,EAAsB,IAKpBE,EAAY,GAAK,IACnBH,EAAWtC,EAAcyC,EAAY,CAAC,EACtCF,EAAsB,IAO7B,CAKX,MAKevnC,EAAM,gBAAgB,KAAK,SAAU6Q,EAAG,CAC3C,OAAOA,EAAE,cAAc,KAAK,SAAUX,EAAG,CACvC,OAAOmvB,GAAYnvB,CAAC,EAAI,CACtC,CAAa,CACb,CAAW,IAICq3B,EAAsB,SAQ1BA,EAAsB,GAEpBA,IACFD,EAAWlB,EAAgB,CAGzB,OAAQpmC,EAAM,wBACd,WAAY4G,EAAO,cAAc5G,EAAM,cAAc,CAC/D,CAAS,GAGDimC,EADEqB,GAGOtnC,EAAM,yBAA2BqlC,EAAqB,CAF9C,CAIpB,CACDrlC,EAAM,eAAiB,MAC3B,EAMM0nC,EAAc,SAAqB7kC,EAAO,CAC5C,IAAI0jC,EAAa,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GACrFvmC,EAAM,eAAiB6C,EACvB,IAAI2jC,EAAkBJ,EAAgB,CACpC,MAAOvjC,EACP,WAAY0jC,CAClB,CAAK,EACGC,IACE5C,GAAW/gC,CAAK,GAKlBA,EAAM,eAAc,EAEtBojC,EAASO,CAAe,EAG9B,EAEMmB,EAAW,SAAkB9kC,EAAO,CACtC,GAAI8gC,GAAc9gC,CAAK,GAAKohC,GAAer9B,EAAO,kBAAmB/D,CAAK,IAAM,GAAO,CACrFA,EAAM,eAAc,EACpB0gC,EAAK,WAAU,EACf,MACD,EACG38B,EAAO,aAAa/D,CAAK,GAAK+D,EAAO,cAAc/D,CAAK,IAC1D6kC,EAAY7kC,EAAO+D,EAAO,cAAc/D,CAAK,CAAC,CAEpD,EACM+kC,EAAa,SAAoBvmC,EAAG,CACtC,IAAIgR,EAASgyB,GAAgBhjC,CAAC,EAC1ByjC,EAAmBzyB,EAAQhR,CAAC,GAAK,GAGjC4iC,GAAer9B,EAAO,wBAAyBvF,CAAC,GAGhD4iC,GAAer9B,EAAO,kBAAmBvF,CAAC,IAG9CA,EAAE,eAAc,EAChBA,EAAE,yBAAwB,EAC9B,EAMMwmC,EAAe,UAAwB,CACzC,GAAK7nC,EAAM,OAKX,OAAAqjC,GAAiB,aAAaC,EAAWC,CAAI,EAI7CvjC,EAAM,uBAAyB4G,EAAO,kBAAoBmc,GAAM,UAAY,CAC1EkjB,EAASZ,EAAmB,CAAE,CACpC,CAAK,EAAIY,EAASZ,EAAmB,CAAE,EACnCZ,EAAI,iBAAiB,UAAW2C,EAAc,EAAI,EAClD3C,EAAI,iBAAiB,YAAa0C,EAAkB,CAClD,QAAS,GACT,QAAS,EACf,CAAK,EACD1C,EAAI,iBAAiB,aAAc0C,EAAkB,CACnD,QAAS,GACT,QAAS,EACf,CAAK,EACD1C,EAAI,iBAAiB,QAASmD,EAAY,CACxC,QAAS,GACT,QAAS,EACf,CAAK,EACDnD,EAAI,iBAAiB,UAAWkD,EAAU,CACxC,QAAS,GACT,QAAS,EACf,CAAK,EACMpE,CACX,EACMuE,EAAkB,UAA2B,CAC/C,GAAK9nC,EAAM,OAGX,OAAAykC,EAAI,oBAAoB,UAAW2C,EAAc,EAAI,EACrD3C,EAAI,oBAAoB,YAAa0C,EAAkB,EAAI,EAC3D1C,EAAI,oBAAoB,aAAc0C,EAAkB,EAAI,EAC5D1C,EAAI,oBAAoB,QAASmD,EAAY,EAAI,EACjDnD,EAAI,oBAAoB,UAAWkD,EAAU,EAAI,EAC1CpE,CACX,EAMMwE,EAAkB,SAAyBC,EAAW,CACxD,IAAIC,EAAuBD,EAAU,KAAK,SAAUE,EAAU,CAC5D,IAAIC,EAAe,MAAM,KAAKD,EAAS,YAAY,EACnD,OAAOC,EAAa,KAAK,SAAUn2B,EAAM,CACvC,OAAOA,IAAShS,EAAM,uBAC9B,CAAO,CACP,CAAK,EAIGioC,GACFhC,EAASZ,EAAmB,CAAE,CAEpC,EAIM+C,EAAmB,OAAO,OAAW,KAAe,qBAAsB,OAAS,IAAI,iBAAiBL,CAAe,EAAI,OAC3HM,EAAsB,UAA+B,CAClDD,IAGLA,EAAiB,WAAU,EACvBpoC,EAAM,QAAU,CAACA,EAAM,QACzBA,EAAM,WAAW,IAAI,SAAUuiC,EAAW,CACxC6F,EAAiB,QAAQ7F,EAAW,CAClC,QAAS,GACT,UAAW,EACrB,CAAS,CACT,CAAO,EAEP,EAME,OAAAgB,EAAO,CACL,IAAI,QAAS,CACX,OAAOvjC,EAAM,MACd,EACD,IAAI,QAAS,CACX,OAAOA,EAAM,MACd,EACD,SAAU,SAAkBsoC,EAAiB,CAC3C,GAAItoC,EAAM,OACR,OAAO,KAET,IAAIuoC,EAAa7D,EAAU4D,EAAiB,YAAY,EACpDE,EAAiB9D,EAAU4D,EAAiB,gBAAgB,EAC5DG,EAAoB/D,EAAU4D,EAAiB,mBAAmB,EACjEG,GACHjD,IAEFxlC,EAAM,OAAS,GACfA,EAAM,OAAS,GACfA,EAAM,4BAA8BykC,EAAI,cACxC8D,GAAe,MAAiCA,EAAU,EAC1D,IAAIG,EAAmB,UAA4B,CAC7CD,GACFjD,IAEFqC,IACAQ,IACAG,GAAmB,MAAqCA,EAAc,CAC9E,EACM,OAAIC,GACFA,EAAkBzoC,EAAM,WAAW,OAAM,CAAE,EAAE,KAAK0oC,EAAkBA,CAAgB,EAC7E,OAETA,IACO,KACR,EACD,WAAY,SAAoBC,EAAmB,CACjD,GAAI,CAAC3oC,EAAM,OACT,OAAO,KAET,IAAIgB,EAAU6hC,GAAe,CAC3B,aAAcj8B,EAAO,aACrB,iBAAkBA,EAAO,iBACzB,oBAAqBA,EAAO,mBAC7B,EAAE+hC,CAAiB,EACpB,aAAa3oC,EAAM,sBAAsB,EACzCA,EAAM,uBAAyB,OAC/B8nC,IACA9nC,EAAM,OAAS,GACfA,EAAM,OAAS,GACfqoC,IACAhF,GAAiB,eAAeC,EAAWC,CAAI,EAC/C,IAAIqF,EAAelE,EAAU1jC,EAAS,cAAc,EAChD6nC,EAAmBnE,EAAU1jC,EAAS,kBAAkB,EACxD8nC,EAAsBpE,EAAU1jC,EAAS,qBAAqB,EAC9D+nC,EAAcrE,EAAU1jC,EAAS,cAAe,yBAAyB,EAC7E4nC,GAAiB,MAAmCA,EAAY,EAChE,IAAII,EAAqB,UAA8B,CACrDjmB,GAAM,UAAY,CACZgmB,GACF9C,EAASC,EAAmBlmC,EAAM,2BAA2B,CAAC,EAEhE6oC,GAAqB,MAAuCA,EAAgB,CACtF,CAAS,CACT,EACM,OAAIE,GAAeD,GACjBA,EAAoB5C,EAAmBlmC,EAAM,2BAA2B,CAAC,EAAE,KAAKgpC,EAAoBA,CAAkB,EAC/G,OAETA,IACO,KACR,EACD,MAAO,SAAeC,EAAc,CAClC,GAAIjpC,EAAM,QAAU,CAACA,EAAM,OACzB,OAAO,KAET,IAAIkpC,EAAUxE,EAAUuE,EAAc,SAAS,EAC3CE,EAAczE,EAAUuE,EAAc,aAAa,EACvD,OAAAjpC,EAAM,OAAS,GACfkpC,GAAY,MAA8BA,EAAO,EACjDpB,IACAO,IACAc,GAAgB,MAAkCA,EAAW,EACtD,IACR,EACD,QAAS,SAAiBC,EAAgB,CACxC,GAAI,CAACppC,EAAM,QAAU,CAACA,EAAM,OAC1B,OAAO,KAET,IAAIqpC,EAAY3E,EAAU0E,EAAgB,WAAW,EACjDE,EAAgB5E,EAAU0E,EAAgB,eAAe,EAC7D,OAAAppC,EAAM,OAAS,GACfqpC,GAAc,MAAgCA,EAAS,EACvD7D,IACAqC,IACAQ,IACAiB,GAAkB,MAAoCA,EAAa,EAC5D,IACR,EACD,wBAAyB,SAAiCC,EAAmB,CAC3E,IAAIC,EAAkB,CAAA,EAAG,OAAOD,CAAiB,EAAE,OAAO,OAAO,EACjE,OAAAvpC,EAAM,WAAawpC,EAAgB,IAAI,SAAU9nC,EAAS,CACxD,OAAO,OAAOA,GAAY,SAAW+iC,EAAI,cAAc/iC,CAAO,EAAIA,CAC1E,CAAO,EACG1B,EAAM,QACRwlC,IAEF6C,IACO,IACR,CACL,EAGE9E,EAAK,wBAAwBx7B,CAAQ,EAC9Bw7B,CACT,ECl6BA,SAASkG,GAAap3B,EAAQrR,EAAU,GAAI,CAC1C,IAAIuiC,EACJ,KAAM,CAAE,UAAA5pB,EAAW,GAAG+vB,CAAgB,EAAK1oC,EACrC2oC,EAAWh2B,MAAI,EAAK,EACpB8d,EAAW9d,MAAI,EAAK,EACpBi2B,EAAY3f,GAASsZ,GAAQA,EAAK,SAAStZ,CAAI,EAC/C4f,EAAc5f,GAASsZ,GAAQA,EAAK,WAAWtZ,CAAI,EACnDhS,EAAQ,IAAM,CACdsrB,IACFA,EAAK,MAAK,EACV9R,EAAS,MAAQ,GAEvB,EACQqY,EAAU,IAAM,CAChBvG,IACFA,EAAK,QAAO,EACZ9R,EAAS,MAAQ,GAEvB,EACEld,OAAAA,EAAK,MACH,IAAMsH,GAAaxJ,CAAM,EACxBtR,GAAO,CACDA,IAELwiC,EAAOgB,GAAgBxjC,EAAI,CACzB,GAAG2oC,EACH,YAAa,CACXC,EAAS,MAAQ,GACb3oC,EAAQ,YACVA,EAAQ,WAAU,CACrB,EACD,cAAe,CACb2oC,EAAS,MAAQ,GACb3oC,EAAQ,cACVA,EAAQ,aAAY,CACvB,CACT,CAAO,EACG2Y,GACFiwB,IACH,EACD,CAAE,MAAO,MAAQ,CACrB,EACE9zB,GAAkB,IAAM+zB,EAAU,CAAE,EAC7B,CACL,SAAAF,EACA,SAAAlY,EACA,SAAAmY,EACA,WAAAC,EACA,MAAA5xB,EACA,QAAA6xB,CACJ,CACA,CC1CO,MAAMC,GAAwB,CACnC,CACE,QAAAroC,EACA,SAAAsW,EACA,OAAAgyB,EACA,cAAAC,CACF,EAiBAC,EAAqC,CACnC,kBAAmB,GACnB,cAAeD,EAAc,IAAI,OAAS,MAC5C,IACG,CACH,MAAME,EAAmBhyB,EAAA,SAASa,QAAMhB,CAAQ,CAAC,EAC3CoyB,EAAiBjyB,EAAA,SAASa,QAAMgxB,CAAM,CAAC,EAEvCK,EAAkB,IAAM,OACtB,MAAAC,GAAmB1zB,EAAAlV,EAAQ,QAAR,YAAAkV,EAAe,iBACtC,4EAA4EqzB,EAAc,aAAa,KAElG,MAAA,CAACK,GAAoBA,EAAiB,SAAW,CAAA,EAEpDC,EAAgB52B,EAAAA,IAAI02B,EAAA,CAAiB,EAC3ClwB,EAAAA,UAAU,IAAM,CACd2D,GACEpc,EACA,IAAM,CACJ6oC,EAAc,MAAQF,GACxB,EACA,CAAC,UAAW,GAAM,QAAS,EAAI,CAAA,CACjC,CACD,EAEK,MAAA9G,EAAOkG,GAAa/nC,EAASwoC,CAAa,EAC1C31B,OAAAA,QAAA41B,EAAkB,MAAOnwB,GAAa,CAC1C,MAAMI,EAAS,SAAA,EACXJ,GAAYowB,EAAe,QAAU,GACvC7G,EAAK,SAAS,EAEdA,EAAK,WAAW,CAClB,CACD,EAEKhvB,QAAA61B,EAAiBpwB,GAAa,CAC9BA,IAAa,IACfupB,EAAK,WAAW,CAClB,CACD,EAEM,CACL,cAAeprB,WAASoyB,CAAa,CAAA,CAEzC,iPCpDM,MAAA3iB,EAAQC,EATCC,EASmB,UAAU,EAEtCxM,EAAQkvB,EAAAA,WAKR3gB,EAAkBlqB,EAAAA,SAAS,IAAM,CACrC,WAAWioB,EAAM,IAAI,GACrB,CACE,CAAC,WAAWA,EAAM,IAAI,KAAK,EAAGA,EAAM,MACpC,CAAC,QAAQA,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,IAC/C,CAAA,CACD,EAEK6iB,EAAezxB,EAAAA,MAAM,IAAM,CAAC1X,GAAYga,EAAM,KAAK,CAAC,+kDCgDpD,MAAAsM,EAAQC,EAnCCC,EAmCmB,SAAS,EAErCC,EAAOC,EAIPtmB,EAAUiS,MAAwB,IAAI,EAEtC+2B,EAAexiB,EAAAA,SAAgCJ,EAAC,SAA+B,EAE/E,CAAC,aAAA+I,EAAc,kBAAAC,GAAqBL,GAAe7I,EAAO,CAC9D,eACA,qBACA,UACA,sBACA,WAAA,CACD,EAEK+iB,EAAW3xB,EAAAA,MAAM,IAAM,OAAO0xB,EAAa,OAAU,SAAS,EAC9DE,EAAW5xB,EAAA,MACf,IAAM4O,EAAM,MAAQ,UAAYA,EAAM,OAAS,QAAaA,EAAM,KAAO,MAAA,EAErEijB,EAAU7xB,EAAAA,MAAM,IAAM4O,EAAM,KAAO,MAAS,EAC5CkjB,EAAiB9xB,EAAAA,MAAM,IAAO4O,EAAM,OAAS,OAAY,GAAQ,CAACgjB,EAAS,KAAM,EAEjFpQ,EAAY76B,WAAS,IAAOkrC,EAAQ,MAAQ/Z,EAAkB,MAAQ,CAAA,CAAG,EACzEia,EAAuBprC,EAAAA,SAAS,IAChCioB,EAAM,OAAS,KAAOA,EAAM,SAAiB,GAE1CkjB,EAAe,MAAQljB,EAAM,SAAW,IAChD,EAEKojB,EAAsBrrC,EAAA,SAC1B,WAAO,OAAAkxB,EAAa,QAAU,MAASja,EAAAgR,EAAM,UAAN,YAAAhR,EAAe,WAAW,WAAa,GAAA,EAE1EskB,EAAmBX,GACvB56B,EAAAA,SAAS,KAAO,CACd,GAAIioB,EAAM,SACRA,EAAM,QAAQ,WAAW,MAAM,GAAK,CAClC,KAAMA,EAAM,KACZ,QAASA,EAAM,QACf,aAAcA,EAAM,aACpB,gBAAiBA,EAAM,gBACvB,qBAAsBA,EAAM,qBAC5B,iBAAkBA,EAAM,iBACxB,sBAAuBA,EAAM,sBAC7B,iBAAkBA,EAAM,iBACxB,QACEojB,EAAoB,QAAU,GAAQpjB,EAAM,QAAQ,MAAM,CAAC,EAAqB,IACpF,CAAA,EACF,CAAA,EAEEiC,EAAkBlqB,EAAAA,SAAS,IAAM,CACrCkxB,EAAa,QAAU,GAAO,OAAYqK,EAAiB,MAC3D,CAAC,OAAOtT,EAAM,IAAI,EAAE,EACpB,CACE,CAAC,OAAOA,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,MAAQojB,EAAoB,QAAU,GAClF,OAAUpjB,EAAM,QAAU8iB,EAAa,MACvC,eAAgB9iB,EAAM,KACtB,YAAaA,EAAM,QACnB,SAAYA,EAAM,QACpB,CAAA,CACD,EAEKsU,EAAcljB,EAAAA,MAAM,IAAO6xB,EAAQ,MAAQ1O,GAAQvU,EAAM,KAAO,IAAMA,EAAM,GAAI,EAEhFyT,EAAWh6B,GAAkC,CACjD,GAAIumB,EAAM,SAAU,CAClBvmB,EAAE,eAAe,EACjBA,EAAE,gBAAgB,EAClB,MACF,CACA0mB,EAAK,QAAS1mB,CAAC,EACXspC,EAAS,QAAoBD,EAAA,MAAQ,CAACA,EAAa,MAAA,EAGzD,OAAArtB,GACE,CAAC,IAAK,OAAO,EACZhc,GAAM,OACDumB,EAAM,OAAS,MACjBvmB,EAAE,eAAe,GACjBuV,EAAAlV,EAAQ,QAAR,MAAAkV,EAAe,QAEnB,EACA,CAAC,OAAQlV,CAAO,CAAA,2oCC0EZupC,GAAwB,uBAkOxBC,GAA2B,glEA1R3B,MAAAtjB,EAAQC,EAzDCC,EAyDmB,QAAQ,EAEpCC,EAAOC,EAsBP1M,EAAQkvB,EAAAA,WAmBRliB,EAAaC,GAAM,IAAMX,EAAM,GAAI,OAAO,EAG1CK,EAAaC,EAAAA,uBAAqC,EAElDxmB,EAAUiS,MAAwB,IAAI,EACtCw3B,EAAuBx3B,MAAwB,IAAI,EACnDy3B,EAAWz3B,MAAwB,IAAI,EACvC03B,EAAe13B,MAAwB,IAAI,EAC3C23B,EAAc33B,MAAwB,IAAI,EAC1CqE,EAAWrE,MAAI,EAAK,EACpB43B,EAAoB53B,MAAI,EAAK,EAG7B,CAAC,cAAA42B,CAAa,EAAIR,GAAsB,CAC5C,QAAAroC,EACA,SAAAsW,EACA,OAAQ,IAAM4P,EAAM,OACpB,cAAe,CACb,IAAKujB,EACL,cAAeF,EACjB,CAAA,CACD,EAEKO,EAAsBvR,GAAkB,EAAI,EAElD5c,GACE,SACA,IAAM,CACJkf,EAAO,KAAK,CACd,EACA,CAAC,OAAQ76B,CAAO,CAAA,EAEA21B,GAAApP,EAAY,IAAML,EAAM,aAAa,EACvD,KAAM,CAAC,QAAS6jB,GAAcnoB,GAAS5hB,EAAS,CAC9C,aAAcumB,EAAW,OAASL,EAAM,kBAAoB,QAAaA,EAAM,YAAc,EAAA,CAC9F,EACK,CAAC,QAAS8jB,GAAiBpoB,GAAS8nB,EAAU,CAClD,aAAcnjB,EAAW,OAASL,EAAM,kBAAoB,MAAQA,EAAM,YAAc,EAAA,CACzF,EACK,CAAC,QAAS+jB,GAAqBroB,GAAS+nB,EAAc,CAC1D,aAAcpjB,EAAW,OAASL,EAAM,kBAAoB,UAAYA,EAAM,YAAc,EAAA,CAC7F,EACK,CAAC,QAASgkB,GAAoBtoB,GAASgoB,EAAa,CACxD,aAAcrjB,EAAW,OAASL,EAAM,kBAAoB,SAAWA,EAAM,YAAc,EAAA,CAC5F,EAEKikB,EAAelsC,EAAAA,SAAS,IAAM,CAClCioB,EAAM,WACN,CACE,KAAM,CAACA,EAAM,OACb,KAAM5P,EAAS,KACjB,CAAA,CACD,EAEK8zB,EAAc9yB,EAAA,MAClB,IACE4O,EAAM,OAAS,IACdA,EAAM,OAAS,IAAQ2jB,EAAkB,QAAU,IACnD3jB,EAAM,OAAS,IAAQK,EAAW,QAAU,EAAA,EAG3C8jB,EAAqB/yB,EAAAA,MAAM,IAAM,CAAC1X,GAAYga,EAAM,cAAc,CAAC,CAAC,EAEpE0wB,EAAqBrsC,EAAAA,SAAS,IAAM,CACxCioB,EAAM,YACN,CACE,mBAAoBA,EAAM,aAAe,GACzC,CAAC,oBAAoBA,EAAM,UAAU,OAAO,EAAG,OAAOA,EAAM,YAAe,SAC3E,CAAC,SAASA,EAAM,IAAI,EAAE,EAAGA,EAAM,OAAS,KACxC,wBAAyBA,EAAM,SAC/B,0BAA2BA,EAAM,UACnC,CAAA,CACD,EAEKqkB,EAAwB/a,GAAuB,KAAO,CAC1D,UAAWtJ,EAAM,cACjB,YAAaA,EAAM,gBACnB,QAASA,EAAM,WACf,EAAA,EAEIskB,EAAcvsC,WAAS,IAAM,CAACioB,EAAM,UAAWqkB,EAAsB,KAAK,CAAC,EAE3EE,EAA0Bjb,GAAuB,KAAO,CAC5D,UAAWtJ,EAAM,gBACjB,YAAaA,EAAM,kBACnB,QAASA,EAAM,aACf,EAAA,EAEIwkB,EAAgBzsC,EAAAA,SAAS,IAAM,CACnCioB,EAAM,YACNukB,EAAwB,MACxB,CACE,CAAC,UAAUvkB,EAAM,mBAAmB,EAAE,EAAGA,EAAM,sBAAwB,IACzE,CAAA,CACD,EAEKykB,EAAmB1sC,EAAAA,SAAS,KAAO,CACvC,QAASosC,EAAmB,MAAQnkB,EAAM,mBAAqB,OAC/D,MAAOA,EAAM,gBACb,EAAA,EAEI0kB,EAA0Bpb,GAAuB,KAAO,CAC5D,UAAWtJ,EAAM,gBACjB,YAAaA,EAAM,kBACnB,QAASA,EAAM,aACf,EAAA,EAEI2kB,EAAgB5sC,EAAAA,SAAS,IAAM,CACnCioB,EAAM,YACN0kB,EAAwB,MACxB,CACE,CAAC,UAAU1kB,EAAM,mBAAmB,EAAE,EAAGA,EAAM,sBAAwB,IACzE,CAAA,CACD,EAEK4kB,EAAe7sC,EAAAA,SAAS,IAAM,CAClCioB,EAAM,WACN,CACG,kBAAoBA,EAAM,WAC7B,CAAA,CACD,EACK6kB,EAAgBzzB,EAAAA,MAAM,IAAM4O,EAAM,gBAAkBA,EAAM,IAAI,EAC9D8kB,EAAY1zB,EAAAA,MAAM,IAAM4O,EAAM,YAAcA,EAAM,IAAI,EAEtDoC,EAAwB,CAC5BrJ,EACAsJ,EAA8C,CAAA,IAE9C,IAAIxpB,GAAmBkgB,EAAM,CAC3B,WAAY,GACZ,OAAQjf,EAAQ,OAAS,KACzB,cAAe,KACf,QAAS,KACT,GAAGuoB,EACH,YAAa3B,EAAW,KAAA,CACzB,EAEG/T,EAAAA,MAAA0T,EAAY,CAACjO,EAAUmH,IAAa,CACpCnH,IAAamH,IACbnH,IAAa,GACRsiB,IAEAC,IACT,CACD,EAEK,MAAAA,EAAS,CAAC7T,EAAU,KAAO,CAC/B,GACGA,IAAY,YAAcd,EAAM,mBAChCc,IAAY,OAASd,EAAM,aAC5B,CACAG,EAAK,gBAAgB,EACrB,MACF,CAEM,MAAAllB,EAAQmnB,EAAsB,OAAQ,CAAC,WAAYtB,IAAY,GAAI,QAAAA,EAAQ,EAmBjF,GAjBIA,IAAY,MACdX,EAAKW,EAAS7lB,CAAK,EAEjB6lB,IAAY,UACdX,EAAKW,EAAS7lB,CAAK,EAEjB6lB,IAAY,SACdX,EAAKW,EAAS7lB,CAAK,EAEjB6lB,IAAY,YACdX,EAAKW,EAAS7lB,CAAK,EAEjB6lB,IAAY,OACdX,EAAKW,EAAS7lB,CAAK,EAErBklB,EAAK,OAAQllB,CAAK,EAEdA,EAAM,iBAAkB,CAC1BklB,EAAK,gBAAgB,EAChBE,EAAW,QAAOA,EAAW,MAAQ,IAC1C,MACF,CACIA,EAAW,QAAOA,EAAW,MAAQ,GAAA,EAKrCqU,EAAS,IAAM,CACnB,GAAItkB,EAAS,MAAO,OAEpB,MAAMnV,EAAQmnB,EAAsB,OAAQ,CAAC,WAAY,GAAK,EAE9D,GADAjC,EAAK,OAAQllB,CAAK,EACdA,EAAM,iBAAkB,CACtBolB,EAAW,QAAOA,EAAW,MAAQ,IACzCF,EAAK,gBAAgB,EACrB,MACF,CACKE,EAAW,QAAOA,EAAW,MAAQ,GAAA,EAGtC0kB,EAAgB,IAAM,CACtB/kB,EAAM,YAAc,KACxBA,EAAM,kBAAoB,KACrB8jB,EAAc,MAAQ,GACvB9jB,EAAM,kBAAoB,QACvBgkB,EAAiB,MAAQ,GAC1BhkB,EAAM,kBAAoB,SACvB+jB,EAAkB,MAAQ,GAC1BF,EAAW,MAAQ,GAAA,EAGxBjP,EAAgB,IAAM,CACnBF,GAAA,EAEHG,EAAe,IAAM,CACzBzkB,EAAS,MAAQ,GACH20B,IACT5kB,EAAA,QAASiC,EAAsB,OAAO,CAAC,EACxCpC,EAAM,OAAS,KAAM2jB,EAAkB,MAAQ,GAAA,EAE/CqB,EAAYj5B,MAAI,EAAK,EACrBk5B,EAAU,IAAM,CACpB70B,EAAS,MAAQ,GACjB40B,EAAU,MAAQ,EAAA,EAEdlQ,EAAe,IAAM,CACpB3U,EAAA,SAAUiC,EAAsB,QAAQ,CAAC,EAC1CpC,EAAM,OAAS,KAAM2jB,EAAkB,MAAQ,IACnDqB,EAAU,MAAQ,EAAA,EAGd,CAAC,eAAAE,EAAgB,iBAAAC,EAAkB,iBAAAC,CAAoB,EAAArX,GAC3D3d,EACAiQ,EAAW,KAAA,EAGP1T,EAAAA,MAAAy4B,EAAkB,CAAChzB,EAAUmH,IAAa,CAC1CnH,EAAS,OAASmH,EAAS,QAAUnJ,EAAS,QAAU,IAAQ4P,EAAM,aAAe,IAChF2U,GAAA,CACV,EAGK,MAAA0Q,EAAiBttC,EAAAA,SAAwB,KAAO,CAKpD,UACEqY,EAAS,OAAS40B,EAAU,MAExB1B,MAA6B6B,GAAA,YAAAA,EAAkB,QAAS,KAAMD,GAAA,YAAAA,EAAgB,QAAS,IACvF5B,EACN,EAAA,EAEejvB,GAAAva,EAAS,YAAa,IAAM,CAChCumB,EAAA,MAAQsU,EAAO,EAAID,EAAO,CAAA,CACtC,EAEK,MAAA4Q,GAAcvtC,EAAAA,SAA0B,KAAO,CACnD,OAAQ,IAAM,CACZ48B,EAAO,QAAQ,CACjB,EACA,MAAO,IAAM,CACXA,EAAO,OAAO,CAChB,EACA,KAAMA,EACN,GAAI,IAAM,CACRA,EAAO,IAAI,CACb,EACA,QAAStU,EAAW,KACpB,EAAA,EAEW,OAAAkC,EAAA,CACX,KAAMoS,EACN,GAAIjU,EACJ,KAAMgU,CAAA,CACP,6wHCjfc6Q,GAAA,CACb,QAAQtQ,EAAK,CACL,MAAAuQ,EAASz5B,MAab,CAAA,CAAE,EAEE05B,EAAe,IAGhB,CACH,IAAIC,EAA+C,IAAM,CAAA,EAQlD,MAAA,CACL,MALc,IAAI,QAAyBr2B,GAAY,CACzCq2B,EAAAr2B,CAAA,CACf,EAIC,QAASq2B,CAAA,CACX,EAGIC,EAAe,IAAM,CAACF,IAAgB,OAAO,EAAG15B,EAAI,IAAA,EAAI,CAAC,EAEzD0U,EAAO,CACXrS,EAGI,KACD,CACH,KAAM,CAACw3B,EAAUvQ,EAAOC,CAAW,EAAIqQ,EAAa,EAEpD,OAAAH,EAAO,MAAM,KACXztC,WAAS,CACP,IAAK,KAAO,CACV,UAAWE,EAAA,QAAQmW,EAAI,SAAS,GAAKy3B,GACrC,MAAO,CACL,GAAG5tC,EAAQ,QAAAmW,EAAI,KAAK,EACpB,WAAY,GACZ,SAAAw3B,EACA,MAAAvQ,EACA,YAAaC,EAAY,KAC3B,CAAA,GAEF,IAAMnyB,GAAM,CACEmyB,EAAA,MAAQnyB,EAAE,MAAM,WAC9B,CAAA,CACD,CAAA,EAGIyiC,EAAS,KAAA,EAGZE,EAAU,CACd13B,EAGI,KACD,CACH,KAAM,CAACw3B,EAAUvQ,EAAOC,CAAW,EAAIqQ,EAAa,EAEpD,OAAAH,EAAO,MAAM,KACXztC,WAAS,CACP,IAAK,KAAO,CACV,UAAWE,EAAA,QAAQmW,EAAI,SAAS,GAAKy3B,GACrC,MAAO,CACL,GAAG5tC,EAAQ,QAAAmW,EAAI,KAAK,EACpB,WAAY,GACZ,SAAAw3B,EACA,MAAAvQ,EACA,YAAaC,EAAY,KAC3B,CAAA,GAEF,IAAMnyB,GAAM,CACEmyB,EAAA,MAAQnyB,EAAE,MAAM,WAC9B,CAAA,CACD,CAAA,EAGIyiC,EAAS,KAAA,EAGZhQ,EAASD,GAAiB,CACxB,MAAA7H,EAAQ0X,EAAO,MAAM,KAAMrsC,GAAOA,EAAG,MAAM,MAAM,QAAUw8B,CAAI,EACjE7H,IAAU,SACZA,EAAM,MAAQ,CACZ,GAAGA,EAAM,MACT,MAAO,CACL,GAAGA,EAAM,MAAM,MACf,YAAa,EACf,CAAA,EAEJ,EAGI4H,EAAUC,GAAiB,CACxB6P,EAAA,MAAQA,EAAO,MAAM,OAAQrsC,GAAOA,EAAG,MAAM,MAAM,QAAUw8B,CAAI,CAAA,EAG1EV,EAAI,QAAQvO,GAA0B,CACpC,OAAA8e,EACA,OAAA9P,EACA,KAAAjV,EACA,QAAAqlB,EACA,MAAAlQ,CAAA,CACD,CACH,CACF,EClIehI,GAAA,CACb,QAAQqH,EAAK,CAQX,MAAM7G,EAAqDriB,EAAAA,IAAQ,IAAA,GAAK,EAElEsiB,EAAat2B,EAAAA,SAAS,IAAMq2B,EAAM,MAAM,IAAI,EAC5CW,EAAYh3B,WAAS,IAAM,CAAC,GAAGq2B,EAAM,MAAM,OAAQ,CAAA,EAAE,IAAA,CAAK,EAE1DF,EAAaJ,GAA+C,CAChEM,EAAM,MAAM,IAAIN,EAAM,IAAKA,CAAK,CAAA,EAE5BK,EAAeL,GAA+C,CAC5DM,EAAA,MAAM,OAAON,EAAM,GAAG,CAAA,EAMxBW,EAAwD1iB,EAAAA,IAAQ,IAAA,GAAK,EAIrEkiB,EAAgBH,GAA+C,CACnEW,EAAS,MAAM,IAAIX,EAAM,IAAKA,CAAK,CAAA,EAE/BiY,EAAkBjY,GAA+C,CAC5DW,EAAA,MAAM,OAAOX,EAAM,GAAG,CAAA,EAGjCmH,EAAI,QAAQtO,GAAuB,CACjC,MAAO5uB,WAAS,IAAM,CAAC,GAAGq2B,EAAM,MAAM,OAAO,CAAC,CAAC,EAC/C,WAAAC,EACA,UAAAU,EACA,SAAUh3B,WAAS,IAAM,CAAC,GAAG02B,EAAS,MAAM,OAAO,CAAC,CAAC,EACrD,UAAAP,EACA,YAAAC,EACA,aAAAF,EACA,eAAA8X,CAAA,CACD,CACH,CACF,EC7CezW,GAAA,CACb,QAAQ2F,EAAK77B,EAA8B,SAInC,MAAA4sC,EACJ,OAAO5sC,GAAA,YAAAA,EAAS,MAAQ,UAAY,KAAa4V,EAAA5V,GAAA,YAAAA,EAAS,MAAT,YAAA4V,EAAc,aAAc,GAEzEi3B,EACJ,OAAO7sC,GAAA,YAAAA,EAAS,MAAQ,UACpB,SACA6V,EAAA7V,GAAA,YAAAA,EAAS,MAAT,YAAA6V,EAAc,gBAAiB,OAE/Bi3B,EAAQn6B,MAAIi6B,CAAU,EACtBG,EAASp6B,MAAIk6B,CAAa,EAEhChR,EAAI,QAAQzO,GAAc,CAAC,MAAA0f,EAAO,OAAAC,CAAO,CAAA,CAC3C,CACF,EClBeC,GAAA,CACb,QAAQnR,EAAK77B,EAA8B,CACnC,MAAAsV,GAAMtV,GAAA,YAAAA,EAAS,aAAc,GACnC67B,EAAI,QAAQpO,GAAa9a,EAAAA,IAAI2C,CAAG,CAAoC,CACtE,CACF,6NCAa23B,GAAiB,OAAO,OACnC,OAAO,KAAK,CACV,WAAY,KACZ,eAAgB,KAChB,OAAQ,KACR,QAAS,KACT,aAAc,KACd,OAAQ,KACR,YAAa,KACb,gBAAiB,KACjB,QAAS,KACT,aAAc,KACd,eAAgB,KAChB,MAAO,KACP,UAAW,KACX,YAAa,KACb,WAAY,KACZ,YAAa,KACb,SAAU,KACV,cAAe,KACf,UAAW,KACX,WAAY,KACZ,UAAW,KACX,eAAgB,KAChB,aAAc,KACd,KAAM,KACN,UAAW,KACX,WAAY,KACZ,UAAW,KACX,iBAAkB,KAClB,cAAe,KACf,eAAgB,KAChB,gBAAiB,KACjB,cAAe,KACf,oBAAqB,KACrB,cAAe,KACf,MAAO,KACP,cAAe,KACf,mBAAoB,KACpB,cAAe,KACf,UAAW,KACX,mBAAoB,KACpB,WAAY,KACZ,WAAY,KACZ,qBAAsB,KACtB,WAAY,KACZ,gBAAiB,KACjB,SAAU,KACV,YAAa,KACb,kBAAmB,KACnB,uBAAwB,KACxB,gBAAiB,KACjB,SAAU,KACV,UAAW,KACX,UAAW,KACX,cAAe,KACf,mBAAoB,KACpB,KAAM,KACN,OAAQ,KACR,YAAa,KACb,gBAAiB,KACjB,WAAY,KACZ,eAAgB,KAChB,OAAQ,KACR,mBAAoB,KACpB,KAAM,KACN,SAAU,KACV,SAAU,KACV,iBAAkB,KAClB,SAAU,KACV,QAAS,KACT,aAAc,KACd,WAAY,KACZ,cAAe,KACf,WAAY,KACZ,SAAU,KACV,YAAa,KACb,aAAc,KACd,mBAAoB,KACpB,iBAAkB,KAClB,kBAAmB,KACnB,oBAAqB,KACrB,SAAU,KACV,UAAW,KACX,KAAM,KACN,SAAU,KACV,KAAM,KACN,MAAO,KACP,OAAQ,KACR,mBAAoB,KACpB,SAAU,KACV,MAAO,KACP,aAAc,KACd,aAAc,KACd,WAAY,KACZ,OAAQ,KACR,OAAQ,KACR,IAAK,KACL,IAAK,KACL,OAAQ,KACR,OAAQ,KACR,IAAK,KACL,YAAa,IAAA,CACwB,CACzC,EAEaC,GAAiB,OAAO,OACnC,OAAO,KAAK,CACV,YAAa,KACb,QAAS,KACT,UAAW,KACX,YAAa,KACb,SAAU,KACV,UAAW,IAAA,CAC0B,CACzC,EAEaC,GAAkB,OAAO,OACpC,OAAO,KAAK,CACV,cAAe,KACf,aAAc,KACd,SAAU,KACV,mBAAoB,KACpB,aAAc,KACd,SAAU,IAAA,CAC4B,CAC1C,mQChHM,MAAAvmB,EAAQC,EAXCC,EAWmB,YAAY,EAExCG,EAAaC,EAAAA,uBAElB,EAEKI,EAAaC,GAAM,IAAMX,EAAM,GAAI,WAAW,EAE9CiC,EAAkBlqB,EAAAA,SAAS,KAAO,CACtC,kBAAmBioB,EAAM,KACzB,EAAA,EAEFyL,OAAAA,EAAAA,QAAQxF,GAAuB,CAC7B,SAAU1V,WAAS8P,CAAU,EAC7B,KAAMjP,EAAA,MAAM,IAAM4O,EAAM,IAAI,EAC5B,YAAcmM,GAAe,CAC3B9L,EAAW,MAAQ8L,CACrB,CAAA,CACD,mqBCJK,MAAAnM,EAAQC,EAVCC,EAUmB,WAAW,EAEvCC,EAAOC,EA0BPgC,EAAwB,CAC5BrJ,EACAsJ,EAA8C,CAAA,IAE9C,IAAIxpB,GAAmBkgB,EAAM,CAC3B,WAAY,GACZ,OAAQjf,EAAQ,OAAS,KACzB,cAAe,KACf,QAAS,KACT,GAAGuoB,EACH,YAAa3B,EAAW,KAAA,CACzB,EAEGL,EAAaC,EAAAA,uBAElB,EAEKI,EAAaC,GAAM,IAAMX,EAAM,GAAI,UAAU,EAE7ClmB,EAAUiS,MAAwB,IAAI,EACtCy6B,EAAez6B,MAAI,EAAK,EACxB06B,EAAU16B,EAAAA,IAAIsU,EAAW,KAAK,EAE9B4B,EAAkBlqB,EAAAA,SAAS,KAAO,CACtC,KAAQ0uC,EAAQ,MAChB,kBAAmBzmB,EAAM,MACzB,WAAcwmB,EAAa,MAC3B,QAAWC,EAAQ,OAAS,CAACpmB,EAAW,MACxC,sBAAuBL,EAAM,UAC7B,EAAA,EAEItb,EAAO,IAAM,CACjB2b,EAAW,MAAQ,EAAA,EAEfI,EAAO,IAAM,CACjBJ,EAAW,MAAQ,EAAA,EAEfqmB,EAAW,IAAM,CACVrmB,EAAA,MAAQ,CAACA,EAAW,KAAA,EAG3BilB,EAAcvtC,EAAAA,SAA0B,KAAO,CACnD,OAAQ2uC,EACR,KAAAjmB,EACA,KAAA/b,EACA,GAAIgc,EAAW,MACf,QAASL,EAAW,KACpB,EAAA,EAEE,IAAAsmB,EACAC,EACAC,EAAiB7mB,EAAM,cAE3B,MAAM8mB,EAAS,IAAM,CACnB,MAAM7rC,EAAQmnB,EAAsB,OAAQ,CAAC,WAAY,GAAK,EAE9D,GADAjC,EAAK,OAAQllB,CAAK,EACdA,EAAM,iBAAkB,CAC1BklB,EAAK,gBAAgB,EACrB,MACF,CACA,aAAaymB,CAAW,EACxB,aAAaD,CAAa,EAC1BF,EAAQ,MAAQ,GACZ,CAAAI,IACJL,EAAa,MAAQ,GACrBh0B,EAAAA,SAAS,IAAM,CACT1Y,EAAQ,QAAU,OAClBkmB,EAAM,WACRlmB,EAAQ,MAAM,MAAM,MAAQ,GAAGA,EAAQ,MAAM,WAAW,KAExDA,EAAQ,MAAM,MAAM,OAAS,GAAGA,EAAQ,MAAM,YAAY,KAE5D6sC,EAAgB,WAAW,IAAM,CAC/BH,EAAa,MAAQ,GACrBrmB,EAAK,OAAO,EACRrmB,EAAQ,QAAU,OACdA,EAAA,MAAM,MAAM,OAAS,GACrBA,EAAA,MAAM,MAAM,MAAQ,GAC3B,EAAAD,GAAmBC,EAAQ,KAAK,CAAC,EAAA,CACrC,EAAA,EAGG66B,EAAS,IAAM,CACnB,MAAM15B,EAAQmnB,EAAsB,OAAQ,CAAC,WAAY,GAAK,EAE9D,GADAjC,EAAK,OAAQllB,CAAK,EACdA,EAAM,iBAAkB,CAC1BklB,EAAK,gBAAgB,EACrB,MACF,CAGA,GAFA,aAAawmB,CAAa,EAC1B,aAAaC,CAAW,EACpB9sC,EAAQ,QAAU,KACtB,IAAI+sC,EAAgB,CAClBJ,EAAQ,MAAQ,GAChB,MACF,CACID,EAAa,OACP1sC,EAAA,MAAM,MAAM,OAAS,GACrBA,EAAA,MAAM,MAAM,MAAQ,IAGxBkmB,EAAM,WACRlmB,EAAQ,MAAM,MAAM,MAAQ,GAAGA,EAAQ,MAAM,WAAW,KAExDA,EAAQ,MAAM,MAAM,OAAS,GAAGA,EAAQ,MAAM,YAAY,KAI9DA,EAAQ,MAAM,aACd0sC,EAAa,MAAQ,GACrBh0B,EAAAA,SAAS,IAAM,CACT1Y,EAAQ,QAAU,OACdA,EAAA,MAAM,MAAM,OAAS,GACrBA,EAAA,MAAM,MAAM,MAAQ,GAC5B8sC,EAAc,WAAW,IAAM,CAC7BH,EAAQ,MAAQ,GAChBD,EAAa,MAAQ,GACrBrmB,EAAK,QAAQ,CACZ,EAAAtmB,GAAmBC,EAAQ,KAAK,CAAC,EAAA,CACrC,EAAA,EAGH6S,OAAAA,EAAA,MAAM0T,EAAY,IAAM,CACXA,EAAA,MAAQymB,EAAO,EAAInS,EAAO,CAAA,CACtC,EAEDpiB,EAAAA,UAAU,IAAM,CACVzY,EAAQ,QAAU,MAClB,CAACumB,EAAW,OAASL,EAAM,QAC7BxN,EAAAA,SAAS,IAAM,CACb6N,EAAW,MAAQ,EAAA,CACpB,CACH,CACD,EAED1T,EAAA,MACE,IAAMqT,EAAM,cACX+mB,GAAW,CACOF,EAAAE,CACnB,CAAA,EAGE/mB,EAAM,UACS6mB,EAAA,GACjBxmB,EAAW,MAAQ,GACnB7N,EAAAA,SAAS,IAAM,CACbq0B,EAAiB7mB,EAAM,aAAA,CACxB,GAGHrT,EAAA,MACE,IAAMqT,EAAM,QACX+mB,GAAW,CACOF,EAAA,GACRE,EAAAtmB,IAAS/b,IAClB8N,EAAAA,SAAS,IAAM,CACbq0B,EAAiB7mB,EAAM,aAAA,CACxB,CACH,CAAA,EAGe3L,GAAAva,EAAS,YAAa,IAAM,CAChCumB,EAAA,MAAQ,CAACA,EAAW,KAAA,CAChC,EAEYkC,EAAA,CACX,KAAA7d,EACA,MAAOsb,EAAM,MACb,KAAAS,EACA,OAAQimB,EACR,QAASn2B,WAASk2B,CAAO,CAAA,CAC1B,EAEDhb,EAAAA,QAAQrF,GAAsB,CAC5B,GAAI1F,EACJ,KAAAhc,EACA,KAAA+b,EACA,OAAQimB,EACR,QAASn2B,WAASk2B,CAAO,EACzB,MAAOr1B,EAAA,MAAM,IAAM4O,EAAM,KAAK,CAAA,CAC/B,01CC1LD,KAAM,CAAC,MAAOgnB,EAAc,GAAGC,GAAiBnU,EAAS,SAAA,EAoBnD9S,EAAQC,EAlBCC,EAkBmB,gBAAgB,EAE5CC,EAAOC,EAgBPC,EAAaC,EAAAA,uBAAqC,EAElDoT,EAAatK,EAAAA,OAAOnD,GAAuB,IAAI,EAE/CvF,EAAaC,GAAM,IAAMX,EAAM,GAAI,gBAAgB,EAEzDzN,OAAAA,EAAAA,UAAU,IAAM,CACV8N,EAAW,OAAS,EAACqT,GAAA,MAAAA,EAAY,KAAK,SAC5BA,GAAA,MAAAA,EAAA,YAAYhT,EAAW,QAEjC,CAACL,EAAW,QAASqT,GAAA,YAAAA,EAAY,SAAS,SAAUhT,EAAW,QACjEL,EAAW,MAAQ,GACrB,CACD,EAED1T,EAAA,MACE,IAAM+mB,GAAA,YAAAA,EAAY,SAAS,MAC3B,IACGrT,EAAW,OAAQqT,GAAA,YAAAA,EAAY,SAAS,SAAUhT,EAAW,OAAS,EAACgT,GAAA,MAAAA,EAAY,KAAK,MAAA,EAE7F/mB,EAAA,MAAM0T,EAAY,IAAM,CAClBA,EAAW,OAAS,EAACqT,GAAA,MAAAA,EAAY,KAAK,SAAmBA,GAAA,MAAAA,EAAA,YAAYhT,EAAW,OAAK,CAC1F,stECvEK,MAAAV,EAAQC,EAdCC,EAcmB,QAAQ,EAEpCC,EAAOC,EAMP1M,EAAQkvB,EAAAA,WAOR9oC,EAAUiS,MAAwB,IAAI,EAEtCsU,EAAaC,EAAAA,uBAA8C,EAE3D4T,EAAarZ,GAAgB/gB,CAAO,EAEpCq6B,EAAiBnhB,GAAY,IAAMgN,EAAM,QAAQ,EAEjDknB,EAAe91B,EAAAA,MAAM,IAAM,CAAC1X,GAAYga,EAAM,KAAK,CAAC,EAEpD0gB,EAAkBhjB,QAAM,IAAO,OAAOiP,EAAW,OAAU,UAAY,EAAIA,EAAW,KAAM,EAE5F4B,EAAkBlqB,EAAAA,SAAS,KAAO,CACtC,CAAC,SAASioB,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,KAC9C,oBAAqBA,EAAM,WAC3B,EAAA,EAEImnB,EAAepvC,EAAAA,SAAS,IAAM,CAACioB,EAAM,WAAY,CAAC,mBAAoBknB,EAAa,KAAM,CAAA,CAAC,EAE1F,CACJ,SAAA92B,EACA,MAAAC,EACA,QAAA2Z,EACA,OAAA1Z,EACA,KAAAuE,EACA,SAAAgV,EACA,MAAOwK,CAAA,EACL5K,GAAa2K,EAAiBD,EAAgB,CAChD,UAAW,OAAO9T,EAAW,OAAU,UAAYL,EAAM,SAAA,CAC1D,EAEKonB,EAAiBh2B,EAAA,MAAM,IAC3B,OAAOiP,EAAW,OAAU,UACxBA,EAAW,MACXjQ,EAAS,OAAU4P,EAAM,aAAe6J,EAAS,KAAA,EAGjDwd,EAAatvC,EAAAA,SAAS,KAAO,CACjC,QAASmvC,EAAa,MAAQlnB,EAAM,aAAe,OACnD,MAAOmnB,EAAa,KACpB,EAAA,EAEFrwB,EAAAA,YAAY,IAAM,CACXqJ,EAAA,kBAAmBkU,EAAY,KAAK,CAAA,CAC1C,EAED,MAAM3vB,EAAO,IAAM,CACjByb,EAAK,OAAO,EAER,OAAOE,EAAW,OAAU,UAC9BA,EAAW,MAAQ,IAEnBA,EAAW,MAAQ,EACdxL,KAGPsL,EAAK,QAAQ,CAAA,EAGTsU,EAAe,IAAM,CACrBzU,EAAM,cACJ3P,GAAA,EAGF1D,OAAAA,QAAAunB,EAAa9hB,GAAa,CAC9B,GAAIA,EAAU,CACCqiB,IACb,MACF,CACOnkB,GAAA,CACR,EAEDsS,EAAA,gBAAgB/N,CAAI,EAEP0N,EAAA,CACX,MAAAlS,EACA,QAAA2Z,EACA,OAAA1Z,EACA,KAAAuE,CAAA,CACD,m7BC3IDyyB,GAAe7zB,kBAAgB,CAC7B,KAAM,wBACN,aAAc,GACd,MAAO,OAGP,MAAO,CACL,IAAK,CACH,KAAM,OACN,QAAS,KACX,EACA,GAAI,CACF,KAAM,CAAC,OAAQ,MAAM,EACrB,QAAS,IACX,EACA,KAAM,CACJ,KAAM,QACN,QAAS,EACX,CACF,EACA,MAAMuM,EAAO,CAAC,MAAAtM,EAAO,MAAAE,GAAQ,CAC3B,MAAO,IACL,WAAA,OAAAoM,EAAM,MACFhR,EAAA0E,EAAM,UAAN,YAAA1E,EAAA,KAAA0E,GACAsM,EAAM,MAAQ,WACZnX,EAAE,EAAA0+B,EAAA,SAAU,CAAC,GAAIvnB,EAAM,IAAK,EAAC/Q,EAAAyE,EAAM,UAAN,YAAAzE,EAAA,KAAAyE,EAAiB,CAAC,EAC/C7K,EAAAA,EAAEmX,EAAM,IAAK,CAAC,GAAGpM,GAAQ,EAACwX,EAAA1X,EAAM,UAAN,YAAA0X,EAAA,KAAA1X,EAAiB,CAAC,EACtD,CACF,CAAC,m3BC2BK,MAAAsM,EAAQC,EAlCCC,EAkCmB,QAAQ,EAEpCyT,EAA4BrK,GAAuBtJ,CAAK,EAExD,CAAC,aAAAiJ,EAAc,kBAAAC,GAAqBL,GAAe7I,EAAO,CAC9D,SACA,cACA,SACA,WACA,OACA,MACA,UACA,sBACA,SACA,KACA,UACA,eACA,mBACA,kBACA,uBACA,mBACA,wBACA,MAAA,CACD,EAEKsU,EAAcljB,EAAM,MAAA,IAAO6X,EAAa,MAAQsL,GAAQvU,EAAM,GAAI,EAElEwnB,EAAmBzvC,EAAAA,SAAS,IAAM,CAEtC,MAAM6kB,EAAMoD,EAAM,YAAcA,EAAM,aAAe,UAAY,QAC1D,MAAA,CACL,oBACA,mBACA,CACE,gBAAiBpD,IAAQ,YACzB,iBAAkBA,IAAQ,QAC1B,kBAAmBA,IAAQ,eAC3B,iBAAkBA,IAAQ,MAC1B,mBAAoBA,IAAQ,SAC5B,kBAAmBA,IAAQ,UAC3B,mBAAoBA,IAAQ,MAC5B,oBAAqBA,IAAQ,YAC/B,CAAA,CACF,CACD,EAEKqF,EAAkBlqB,EAAAA,SAAS,IAAM,CACrC47B,EAA0B,MAC1B3T,EAAM,YAAc,QAAaA,EAAM,eAAiB,GAAOwnB,EAAiB,MAAQ,OACxF,CACE,OAAUxnB,EAAM,OAChB,SAAYA,EAAM,SAClB,eAAgBA,EAAM,KACtB,yCAA0CA,EAAM,aAChD,uBAAwBiJ,EAAa,KACvC,CAAA,CACD,wwBCcKwe,GAAkB,08CAnExB,MAAMznB,EAAQE,EAkDRC,EAAOC,EAKP1M,EAAQkvB,EAAAA,WAOR,CAAC,aAAA3Z,EAAc,kBAAAC,CAAiB,EAAIL,GAAe7I,CAAK,EAExD0T,EAAatK,EAAAA,OAAOpD,GAAyB,IAAI,EAEjD0hB,EAAQ,CAAC,KAAM,KAAM,IAAI,EAEzBC,EAAwBF,GAAkB,GAE1CG,EAAiBx2B,EAAAA,MAAM,IAAM,CAAC1X,GAAYga,EAAM,OAAO,CAAC,EACxDm0B,EAAez2B,EAAAA,MAAM,IAAM,CAAC1X,GAAYga,EAAM,KAAK,CAAC,EAEpDo0B,EAAY12B,EAAAA,MAAM,IAAM,CAAC,CAAC4O,EAAM,OAASA,EAAM,QAAU,IAAM6nB,EAAa,KAAK,EACjFE,EAAiB32B,EAAM,MAAA,KAAMsiB,GAAA,YAAAA,EAAY,OAAO,QAAS1T,EAAM,MAAM,EAErEgoB,EAAmBhZ,GAAoB,IAAMhP,EAAM,IAAI,EACvDioB,EAAqBjZ,GAAoB,IAAM0E,GAAA,YAAAA,EAAY,KAAK,KAAK,EACrEwU,EAAenwC,EAAAA,SAAS,IAAMkwC,EAAmB,OAASD,EAAiB,KAAK,EAEhFG,EAAkB/2B,EAAM,MAAA,KAAMsiB,GAAA,YAAAA,EAAY,QAAQ,QAAS1T,EAAM,OAAO,EACxEooB,EAAkBh3B,EAAM,MAAA,KAAMsiB,GAAA,YAAAA,EAAY,QAAQ,QAAS1T,EAAM,OAAO,EACxEqoB,EAAqBj3B,EAAM,MAAA,KAAMsiB,GAAA,YAAAA,EAAY,WAAW,QAAS1T,EAAM,UAAU,EACjFsoB,EAAwBl3B,EAAM,MAAA,KAAMsiB,GAAA,YAAAA,EAAY,cAAc,QAAS1T,EAAM,aAAa,EAC1FuoB,EAAuBn3B,EAAM,MAAA,KAAMsiB,GAAA,YAAAA,EAAY,aAAa,QAAS1T,EAAM,YAAY,EACvFwoB,EAAqBp3B,EAAM,MAAA,KAAMsiB,GAAA,YAAAA,EAAY,WAAW,QAAS1T,EAAM,UAAU,EAEjFyoB,EAAuBvZ,GAAwB,KAAO,CAC1D,QAASkZ,EAAgB,MACzB,WAAYC,EAAmB,MAC/B,cAAeC,EAAsB,MACrC,aAAcC,EAAqB,MACnC,WAAYC,EAAmB,KAC/B,EAAA,EAEIE,EAAYt3B,QAAM,IAAO4O,EAAM,QAAU,GAAO,GAAKA,EAAM,KAAM,EACjE2oB,EAAqB5wC,WAAS,IAAM,CAAC2wC,EAAU,OAAS,CAACb,EAAa,KAAK,EAE3Ee,EAAsBx3B,EAAM,MAAA,KAAMsiB,GAAA,YAAAA,EAAY,YAAY,QAAS1T,EAAM,WAAW,EACpF6oB,EAAoBz3B,EAAM,MAAA,KAAMsiB,GAAA,YAAAA,EAAY,UAAU,QAAS1T,EAAM,SAAS,EAE9E2T,EAA4BrK,GAAuB,KAAO,CAC9D,UAAWuf,EAAkB,MAC7B,YAAaD,EAAoB,MACjC,QAAST,EAAgB,KACzB,EAAA,EAEIlmB,EAAkBlqB,EAAAA,SAAS,IAAM,CACrC47B,EAA0B,MAE1BoU,EAAe,QAAU,GAAO,OAAYU,EAAqB,MACjE,CACE,CAAC,YAAYzoB,EAAM,IAAI,EAAE,EACvB,CAAC,CAACA,EAAM,MAAQ0nB,EAAM,QAAQM,EAAiB,KAAe,IAAM,GACtE,CAAC,OAAOG,EAAgB,KAAK,EAAE,EAAGnoB,EAAM,OAASmoB,EAAgB,QAAU,KAAO,GAClF,MAAS,CAACnoB,EAAM,QAAUmoB,EAAgB,QAAU,MAAQP,EAAe,MAC3E,IAAO5nB,EAAM,OAEb,YAAa+nB,EAAe,QAAU,EACxC,CAAA,CACD,EAEKe,EAAa/wC,EAAAA,SAAqB,KAAO,CAC7C,SACE2vC,EAAM,QAASQ,EAAa,OAAgC,IAAI,IAAM,GAClE,QAAQA,EAAa,KAAK,MAAMP,CAAqB,IAC/C,EACZ,EAAA,EAEIoB,EAAgBhxC,EAAAA,SAAqB,IAAM,CAC/C,MAAMixC,EACJtB,EAAM,QAASQ,EAAa,OAAgC,IAAI,IAAM,GAClE,QAAQA,EAAa,KAAK,MAAMT,EAAe,IAC/C,KACN,OAAOuB,EAAW,CAAC,SAAAA,CAAQ,EAAI,EAAC,CACjC,EAEKC,EAAclxC,EAAAA,SAAS,IAAM,OAC3B,MAAAmxC,IAAel6B,EAAA0kB,GAAA,YAAAA,EAAY,eAAZ,YAAA1kB,EAA0B,QAAS,EAElDhX,EACJkwC,EAAa,OAASgB,EAAe,QAAQhB,EAAa,KAAK,OAAOgB,CAAY,IAAM,KAC1F,OAAOlxC,EAAQ,CAAC,WAAYA,EAAO,YAAaA,GAAS,EAAC,CAC3D,EAEKs8B,EAAcljB,EAAAA,MAAM,IAAO6X,EAAa,MAAQsL,GAAQvU,EAAM,OAAS,SAAW,MAAO,EAEzFmpB,EAAgBpxC,EAAAA,SAAwB,KAAO,CACnD,GAAGkxC,EAAY,MACf,MAAOf,EAAa,OAAS,OAC7B,OAAQA,EAAa,OAAS,MAC9B,EAAA,EAEIzU,EAAWh6B,GAAkC,CAC7C,CAACumB,EAAM,WAAaiJ,EAAa,OAASjJ,EAAM,SAASG,EAAK,QAAS1mB,CAAC,CAAA,EAGxE2vC,EAAc3vC,GAAuB,CACzC0mB,EAAK,YAAa1mB,CAAC,CAAA,isDC1Lf,MAAAumB,EAAQC,EAlBCC,EAkBmB,cAAc,EAO1CmpB,EAAgBr2B,GAAY,IAAMgN,EAAM,OAAO,EAE/CkoB,EAAelZ,GAAoB,IAAMhP,EAAM,IAAI,EACnDkpB,EAAe93B,EAAA,MAAM,IAAM,KAAK,IAAI,KAAK,IAAIi4B,EAAc,MAAO,CAAC,EAAG,CAAC,EAAI,CAAC,EAE5EC,EAAevxC,EAAAA,SAAqB,IAAM,CACxC,MAAAC,EAAQkwC,EAAa,MAAQ,QAAQA,EAAa,KAAK,MAAMgB,EAAa,KAAK,IAAM,KAC3F,OAAOlxC,EAAQ,CAAC,YAAaA,EAAO,aAAcA,GAAS,EAAC,CAC7D,EAEDyzB,OAAAA,EAAAA,QAAQzF,GAAyB,CAC/B,aAAAkjB,EACA,KAAM93B,EAAA,MAAM,IAAM4O,EAAM,IAAI,EAC5B,OAAQ5O,EAAA,MAAM,IAAM4O,EAAM,MAAM,EAChC,QAAS5O,EAAA,MAAM,IAAM4O,EAAM,OAAO,EAClC,WAAY5O,EAAA,MAAM,IAAM4O,EAAM,UAAU,EACxC,cAAe5O,EAAA,MAAM,IAAM4O,EAAM,aAAa,EAC9C,aAAc5O,EAAA,MAAM,IAAM4O,EAAM,YAAY,EAC5C,WAAY5O,EAAA,MAAM,IAAM4O,EAAM,UAAU,EACxC,QAAS5O,EAAA,MAAM,IAAM4O,EAAM,OAAO,EAClC,UAAW5O,EAAA,MAAM,IAAM4O,EAAM,SAAS,EACtC,YAAa5O,EAAA,MAAM,IAAM4O,EAAM,WAAW,CAAA,CAC3C,ijCCPK,MAAAA,EAAQC,EA5BCC,EA4BmB,iBAAiB,EAE7CC,EAAOC,EAIP6B,EAAkBlqB,EAAAA,SAAS,KAAO,CACtC,OAAQioB,EAAM,MACd,EAAA,EAEIsU,EAAcljB,EAAAA,MAAM,IAAO4O,EAAM,OAAS,OAASuU,EAAM,EAEzDgV,EAAsBn4B,EAAM,MAAA,IAAO4O,EAAM,OAASA,EAAM,YAAc,MAAU,EAEhFkJ,EAAoBnxB,EAAA,SAAS,IACjCu8B,EAAY,QAAU,OAClB7M,GAAKzH,EAAO,CACV,SACA,cACA,SACA,WACA,OACA,MACA,UACA,sBACA,SACA,KACA,UACA,UACA,eACA,mBACA,kBACA,uBACA,mBACA,wBACA,MACD,CAAA,EACD,CAAC,CAAA,EAGDyT,EAAWh6B,GAAkC,CAC7C,GAAAumB,EAAM,UAAYA,EAAM,OAAQ,CAClCvmB,EAAE,eAAe,EACjBA,EAAE,yBAAyB,EAC3B,MACF,CACKumB,EAAM,UAAUG,EAAK,QAAS1mB,CAAC,CAAA,mhBCjFhC,MAAAumB,EAAQC,EADCC,EACmB,aAAa,EAWzCspB,EAAargB,KAEbsgB,EAAwB1xC,EAAAA,SAA2B,IAAM,OAC7D,MAAM2xC,EAAa1pB,EAAM,SAAShR,EAAAw6B,EAAW,QAAX,YAAAx6B,EAAkB,QAAS,GAC7D,IAAI26B,EAAgB,GAcb,OAbOD,EAAW,IAAI,CAAC/lB,EAAMyY,KAC9B,OAAOzY,GAAS,WACXA,EAAA,CAAC,KAAMA,GACVyY,EAAMsN,EAAW,OAAS,IAAG/lB,EAAK,KAAO,MAE3CA,EAAK,SAAwBgmB,EAAA,IAG7B,CAAChmB,EAAK,QAAU,CAACgmB,IACdhmB,EAAA,OAASyY,EAAM,IAAMsN,EAAW,QAEhC/lB,EACR,CACM,CACR,0lBCjCK,MAAA3D,EAAQC,EANCC,EAMmB,cAAc,EAO1C+B,EAAkBlqB,EAAAA,SAAS,KAAO,CACtC,YAAa,CAACioB,EAAM,SACpB,CAAC,aAAaA,EAAM,IAAI,EAAE,EAAGA,EAAM,OAAS,KAC5C,qBAAsBA,EAAM,QAC5B,EAAA,obCPI,MAAAA,EAAQC,EALCC,EAKmB,gBAAgB,EAO5C+B,EAAkBlqB,EAAAA,SAAS,KAAO,CACtC,0BAA2BioB,EAAM,OACjC,EAAA,46BCYI,MAAAA,EAAQC,EAvBCC,EAuBmB,MAAM,EAElC0pB,EAAe52B,GAAY,IAAMgN,EAAM,QAAU,GAAG,EACpD6pB,EAAc72B,GAAY,IAAMgN,EAAM,OAAS,GAAG,EAElDyoB,EAAuBvZ,GAAwB,KAAO,CAC1D,QAASlP,EAAM,QACf,WAAYA,EAAM,WAClB,cAAeA,EAAM,cACrB,aAAcA,EAAM,aACpB,WAAYA,EAAM,UAClB,EAAA,EAEI8pB,EAAiB/xC,EAAA,SAAS,IAC9B,OAAOioB,EAAM,QAAW,SACpBA,EAAM,OACH,MAAM,GAAG,EACT,OAAQ3gB,GAAMA,CAAC,EACf,KAAK,GAAG,EACX,MAAM,QAAQ2gB,EAAM,MAAM,EACxBA,EAAM,OAAO,OAAQ3gB,GAAMA,CAAC,EAAE,KAAK,GAAG,EACtC,MAAA,EAGF0qC,EAAgBhyC,EAAA,SAAS,IAC7B,OAAOioB,EAAM,OAAU,SACnBA,EAAM,MACH,MAAM,GAAG,EACT,OAAQ3gB,GAAMA,CAAC,EACf,KAAK,GAAG,EACX,MAAM,QAAQ2gB,EAAM,KAAK,EACvBA,EAAM,MAAM,OAAQ3gB,GAAMA,CAAC,EAAE,KAAK,GAAG,EACrC,MAAA,EAGF2qC,EAAqBjyC,EAAAA,SAAkE,IAAM,CACjG,MAAMkO,EAAQ,OAAO,MAAM4jC,EAAY,KAAK,EAAI,OAAYA,EAAY,MAClE3jC,EAAS,OAAO,MAAM0jC,EAAa,KAAK,EAAI,OAAYA,EAAa,MAC3E,GAAI5pB,EAAM,MAAO,CACX,GAAA/Z,IAAU,QAAaC,IAAW,OAAkB,MAAA,CAAC,OAAQD,EAAO,MAAAA,GACpE,GAAAA,IAAU,QAAaC,IAAW,OAAkB,MAAA,CAAC,OAAAA,EAAQ,MAAOA,GACpE,GAAAD,IAAU,QAAaC,IAAW,OAAW,MAAO,CAAC,OAAQ,EAAG,MAAO,CAAC,CAC9E,CACO,MAAA,CACL,MAAAD,EACA,OAAAC,CAAA,CACF,CACD,EAEK+jC,EAAsB74B,EAAA,MAAM,IAChC84B,EAAgBF,EAAmB,MAAM,MAAOA,EAAmB,MAAM,OAAQhqB,EAAM,UAAU,CAAA,EAG7FmqB,EAAoBpyC,EAAAA,SAAS,KAAO,CACxC,cAAeioB,EAAM,YAAc,QACnC,YAAaA,EAAM,YAAc,MACjC,UAAWA,EAAM,YAAc,QAC/B,EAAA,EAEIiC,EAAkBlqB,EAAAA,SAAS,IAAM,CACrC0wC,EAAqB,MACrB0B,EAAkB,MAClB,CACE,gBAAiBnqB,EAAM,UACvB,YAAaA,EAAM,OAASA,EAAM,UAClC,QAASA,EAAM,UACf,UAAWA,EAAM,OAASA,EAAM,YAAc,QAChD,CAAA,CACD,EAEKkqB,EAAkB,CAACjkC,EAA2BC,EAA4BkkC,IAC9E,oCAAoC,mBAAmB,eAAenkC,CAAK,aAAaC,CAAM,qDAAqDD,CAAK,IAAIC,CAAM;AAAA,mDACjHkkC,CAAK;AAAA,WAC7C,CAAC,koCClFN,MAAApqB,EAAQC,EAtBCC,EAsBmB,UAAU,EAEtCmqB,EAAuBtyC,EAAAA,SAAS,KAAO,CAC3C,eAAgBioB,EAAM,YAAc,MAEpC,eAAgBA,EAAM,YAAc,MACpC,kBAAmBA,EAAM,YAAc,SAEvC,iBAAkBA,EAAM,YAAc,QACtC,WAAYA,EAAM,YAAc,SAChC,EAAA,EAEIsqB,EAAmBvyC,EAAAA,SAAS,IAAMuvB,GAAKtH,EAAO,CAAC,WAAW,CAAC,CAAC,mWC9BlE,MAAMA,EAAQE,EAiBRyT,EAA4BrK,GAAuBtJ,CAAK,EAExDiC,EAAkBlqB,EAAAA,SAAS,IAAM,CACrC47B,EAA0B,MAC1B,CACE,CAAC,UAAU3T,EAAM,aAAa,EAAE,EAAGA,EAAM,gBAAkB,IAC7D,CAAA,CACD,+jBCjBK,MAAAA,EAAQC,EAXCC,EAWmB,aAAa,0QCNzC,MAAAF,EAAQC,EAJCC,EAImB,YAAY,+XCExC,MAAAF,EAAQC,EALCC,EAKmB,eAAe,EAO3C+B,EAAkBlqB,EAAAA,SAAS,KAAO,CACtC,CAAC,QAAQioB,EAAM,WAAW,EAAE,EAAGA,EAAM,cAAgB,IACrD,EAAA,2nBCoBI,MAAAA,EAAQC,EAfCC,EAemB,WAAW,EAEvCxM,EAAQkvB,EAAAA,WASRjP,EAA4BrK,GAAuBtJ,CAAK,EAExDuqB,EAAen5B,EAAAA,MAAM,IAAM,CAAC1X,GAAYga,EAAM,KAAK,CAAC,EACpD82B,EAAkBp5B,EAAAA,MAAM,IAAM,CAAC1X,GAAYga,EAAM,QAAQ,CAAC,EAE1DuO,EAAkBlqB,EAAAA,SAAS,IAAM,CACrC47B,EAA0B,MAC1B3T,EAAM,QAAU,mBAAqB,WAAA,CACtC,mkCC1CK,MAAAA,EAAQC,EAXCC,EAWmB,aAAa,y0CC0FzC,MAAAF,EAAQC,EA1CCC,EA0CmB,OAAO,EAEnCxM,EAAQkvB,EAAAA,WAWR6H,EAAgBr5B,EAAAA,MAAM,IAAM,CAAC1X,GAAYga,EAAM,MAAM,CAAC,EACtDg3B,EAAgBt5B,EAAAA,MAAM,IAAM,CAAC1X,GAAYga,EAAM,MAAM,CAAC,EAEtDigB,EAA4BrK,GAAuBtJ,CAAK,EAExDiC,EAAkBlqB,EAAAA,SAAS,IAAM,CACrC47B,EAA0B,MAC1B,CACE,CAAC,QAAQ3T,EAAM,KAAK,EAAE,EAAGA,EAAM,QAAU,OACzC,CAAC,UAAUA,EAAM,aAAa,EAAE,EAAGA,EAAM,gBAAkB,KAC3D,WAAYA,EAAM,eAAiB,QACnC,mBAAoBA,EAAM,eAAiB,KAC7C,CAAA,CACD,EAEK2qB,EAAU5yC,EAAAA,SAAS,KAAO,CAC9B,IAAKioB,EAAM,OACX,IAAKA,EAAM,OACX,OAAQA,EAAM,UACd,MAAOA,EAAM,SACb,UAAWA,EAAM,YACjB,EAAA,EAEI4qB,EAAcv3B,ouFCtId,MAAA2M,EAAQC,EALCC,EAKmB,YAAY,EAOxC2qB,EAAgBz5B,EAAA,MAAM,IAC1B4O,EAAM,KAAO,YAAcA,EAAM,QAAU,eAAiB,YAAA,2SCRxD,MAAAA,EAAQC,EAJCC,EAImB,WAAW,o2CCkEvC,MAAAF,EAAQC,EArBCC,EAqBmB,WAAW,EAEvCC,EAAOC,EAKP1M,EAAQkvB,EAAAA,WAKRliB,EAAaC,GAAM,IAAMX,EAAM,GAAI,UAAU,EAE7CK,EAAaC,EAAAA,SAAmBJ,EAAA,YAAa,EAE7C4qB,EAAc/+B,MAAkD,IAAI,EAEpEg/B,EAAuB/3B,GAAY,IAAMgN,EAAM,cAAc,EAC7DgrB,EAAgBj/B,MAAsB,IAAI,EAChDwG,EAAAA,UAAU,IAAM,SACdy4B,EAAc,QACZ/7B,GAAAD,EAAA87B,EAAY,QAAZ,YAAA97B,EAAmB,KAAMi8B,GAASA,EAAK,IAAI,MAAM,UAAY,UAA7D,YAAAh8B,EAAsE,YAAa,IAAA,CACtF,EACD,MAAMklB,EAAiBnhB,GAAY,IAAMg4B,EAAc,OAAShrB,EAAM,QAAQ,EAExEkrB,EAAkBn/B,MAAI,EAAK,EAC3Bo/B,EAAcp/B,MAAI,EAAK,EACvB/S,EAAY+S,MAAI,EAAI,EACpBq/B,EAAgBr/B,MAAwB,IAAI,EAC5CjS,EAAUiS,MAAwB,IAAI,EACtCs/B,EAAqBt/B,EAAAA,IAAIsU,EAAW,KAAK,EAEzC6T,EAAarZ,GAAgB/gB,CAAO,EAOpCwxC,EAAel6B,EAAA,MACnB,IACE,+BAAgCpY,EAAU,MAAiB,OAAT,MAAe,kBAC9DA,EAAU,MAAkB,MAAV,OACrB,EAAA,EAEEuyC,EAAen6B,EAAA,MACnB,IAAM,sCAAsCpY,EAAU,MAAQ,QAAU,KAAK,EAAA,EAGzE,CAAC,MAAAqX,EAAO,OAAAC,CAAA,EAAUmC,GACtB,IAAM,CACEuN,EAAA,YAAcwrB,EAAK,EAAIC,EAAK,CACpC,EACAtX,EACA,CAAC,UAAWnU,EAAM,OAAS,UAAU,CAAA,EAGjC0rB,EAAWt6B,EAAA,MACf,IAAO4O,EAAM,OAAS,IAAQmrB,EAAY,QAAU,IAASnrB,EAAM,OAAS,UAAA,EAExE2rB,EAAS5zC,EAAAA,SAAS,IAAMosB,GAAgBzQ,EAAM,QAAS,gBAAgB,CAAC,EACxEuO,EAAkBlqB,EAAAA,SAAS,KAAO,CAAC,gBAAiBioB,EAAM,IAAM,EAAA,EAEhE4rB,EAAwB3wC,UAC5B,WAAInC,GAAgBmC,EAAO,CACzB,YAAaylB,EAAW,MACxB,WAAY,GACZ,OAAQ5mB,EAAQ,MAChB,UAAWd,EAAU,MAAQ,QAAU,OACvC,KAAMqyC,EAAmB,MACzB,GAAIhrB,EAAW,MACf,gBAAerR,EAAAo8B,EAAc,QAAd,YAAAp8B,EAAqB,SAASqR,EAAW,SAAU,IAAA,CACnE,GAEGwrB,EAAa7zC,GAAwB,CACzC,GAAIkzC,EAAgB,QAAU,GAS1B,IAPAlrB,EAAM,OAAS,KACjBmrB,EAAY,MAAQ,IAElBO,EAAS,QAAU,IACdp7B,IAETtX,EAAU,MAAQ,EAAAhB,EAAQqoB,EAAW,OACjCroB,GAAS2zC,EAAO,MAAM,OAAQ,CAChC,GAAI3rB,EAAM,OAAQ,OAClBK,EAAW,MAAQ,EACnB,MACF,CACA,GAAIroB,EAAQ,EAAG,CACb,GAAIgoB,EAAM,OAAQ,OACPK,EAAA,MAAQsrB,EAAO,MAAM,OAAS,EACzC,MACF,CACAN,EAAmB,MAAQhrB,EAAW,MACtCA,EAAW,MAAQroB,EAAA,EAGfwzC,EAAO,IAAY,CACbK,EAAAxrB,EAAW,MAAQ,CAAC,CAAA,EAE1BorB,EAAO,IAAY,CACbI,EAAAxrB,EAAW,MAAQ,CAAC,CAAA,EAG1ByrB,EAAalsC,GAAmB,CAChCogB,EAAM,WAAa,IACpBpgB,GAAA,EAGC60B,EAAe,IAAM,CACrBzU,EAAM,cACJ3P,GAAA,EAEF07B,EAAe,IAAM,CACpBL,EAAS,OACPp7B,GAAA,EAGH,CAAC,QAAA07B,CAAA,EAAWttB,GAAS5kB,EAAS,CAClC,QAAS,GACT,cAAe,CACTkmB,EAAM,UAAY,IAChB3P,GACR,EACA,YAAa,CACX,GAAI2P,EAAM,UAAY,GAAM,OAC5B,MAAMisB,EAAe,IAAM,CACrBP,EAAS,QAAU,IAChBp7B,GAAA,EAEL,GAAA07B,EAAQ,OAASjB,EAAqB,MAAO,CAC1CU,IACQQ,IACb,MACF,CACID,EAAQ,OAAS,CAACjB,EAAqB,QACpCS,IACQS,IAEjB,CAAA,CACD,EAEKC,EAAgB,IAAM,CACrB/rB,EAAA,QAASyrB,EAAqB,OAAO,CAAC,EAC3CV,EAAgB,MAAQ,EAAA,EAEpBpW,EAAe,IAAM,CACpB3U,EAAA,OAAQyrB,EAAqB,MAAM,CAAC,EACzCV,EAAgB,MAAQ,EAAA,EAKpBrW,EAAgB17B,GAA0B,CAC1CknB,EAAW,QAAU,GACpBlnB,EAAA,UAAU,IAAI,eAAe,CAClC,EAEIgzC,EAAWhzC,GAA0B,SAC3B6xC,EAAA,QAAQ/7B,GAAAD,EAAA87B,EAAY,QAAZ,YAAA97B,EAAmB,KAAMi8B,GAASA,EAAK,MAAQ9xC,KAA/C,YAAA8V,EAAoD,YAAa,IAAA,EAGzF,OAAAwG,GACE,YACA,IAAM,CACJq2B,EAAUN,CAAI,CAChB,EACA,CAAC,OAAQ1xC,CAAO,CAAA,EAElB2b,GACE,aACA,IAAM,CACJq2B,EAAUL,CAAI,CAChB,EACA,CAAC,OAAQ3xC,CAAO,CAAA,EAGlB6S,EAAA,MACE,IAAMqT,EAAM,KACZ,IAAM,CACJmrB,EAAY,MAAQ,EACtB,CAAA,EAGIx+B,QAAAunB,EAAa9hB,GAAa,CAC9B,GAAIA,EAAU,CACCqiB,IACb,MACF,CACasX,GAAA,CACd,EAEYxpB,EAAA,CACX,KAAAkpB,EACA,MAAAp7B,EACA,KAAAm7B,EACA,OAAAl7B,CAAA,CACD,EAEDmb,EAAAA,QAAQ7F,GAAsB,CAC5B,WAAYxU,EAAA,MAAM,IAAM4O,EAAM,UAAU,EACxC,MAAO5O,EAAA,MAAM,IAAM4O,EAAM,QAAQ,EACjC,OAAQ5O,EAAA,MAAM,IAAM4O,EAAM,SAAS,CAAA,CACpC,k8EC7NK,MAAAA,EAAQC,EApBCC,EAoBmB,gBAAgB,EAE5CxM,EAAQkvB,EAAAA,WAWRlP,EAAatK,EAAAA,OAAOxD,GAAsB,IAAI,EAE9CwmB,EAAUh7B,EAAAA,MAAM,IAAM4O,EAAM,MAAQA,EAAM,UAAY,CAACtmB,GAAYga,EAAM,IAAI,CAAC,EAC9E24B,EAAaj7B,EAAAA,MAAM,IAAM4O,EAAM,SAAWA,EAAM,aAAe,CAACtmB,GAAYga,EAAM,OAAO,CAAC,EAC1F44B,EAAal7B,EAAAA,MAAM,IAAMg7B,EAAQ,OAASC,EAAW,OAAS,CAAC3yC,GAAYga,EAAM,OAAO,CAAC,EAEzFy1B,EAAgBpxC,EAAAA,SAAwB,KAAO,CACnD,WAAY,GACVioB,EAAM,aAAc0T,GAAA,YAAAA,EAAY,WAAW,QAAS,oBACtD,2BACA,EAAA,EAEI6Y,EAAyBx0C,EAAAA,SAAS,KAAO,CAC7C,SAAUioB,EAAM,mBAAqB,OACrC,CAAC,KAAKA,EAAM,gBAAgB,QAAQ,EAAGA,EAAM,mBAAqB,MAClE,EAAA,EAEW,OAAAuC,EAAA,CACX,UAAWnR,EAAA,MAAM,IAAM4O,EAAM,QAAQ,CAAA,CACtC,mvEC9DK,MAAAA,EAAQC,EAxBCC,EAwBmB,MAAM,EAOlCssB,EAAYz0C,EAAAA,SAAS,IAAM,CAC/B,GAAG4zB,GACD,CACE,GAAI3L,EAAM,GACV,GAAIA,EAAM,GACV,GAAIA,EAAM,GACV,GAAIA,EAAM,GACV,IAAKA,EAAM,GACb,EACA,CAAC,KAAM,KAAM,KAAM,KAAM,KAAK,EAC9B,KACF,EACA,GAAG2L,GACD,CACE,MAAO3L,EAAM,MACb,QAASA,EAAM,QACf,QAASA,EAAM,QACf,QAASA,EAAM,QACf,QAASA,EAAM,QACf,SAAUA,EAAM,QAClB,EACA,CAAC,QAAS,UAAW,UAAW,UAAW,UAAW,UAAU,EAChE,OACF,EACA,GAAG2L,GACD,CACE,OAAQ3L,EAAM,OACd,SAAUA,EAAM,SAChB,SAAUA,EAAM,SAChB,SAAUA,EAAM,SAChB,SAAUA,EAAM,SAChB,UAAWA,EAAM,SACnB,EACA,CAAC,SAAU,WAAY,WAAY,WAAY,WAAY,WAAW,EACtE,QACF,CAAA,CACD,EAEKiC,EAAkBlqB,EAAAA,SAAS,IAAM,CACrCy0C,EAAU,MACV,CACE,IAAKxsB,EAAM,KAAQ,CAACwsB,EAAU,MAAM,KAAMrpC,GAAMA,EAAE,WAAW,MAAM,CAAC,GAAK,CAAC6c,EAAM,KAChF,CAAC,OAAOA,EAAM,IAAI,EAAE,EAAGA,EAAM,OAAS,OACtC,CAAC,UAAUA,EAAM,MAAM,EAAE,EAAGA,EAAM,SAAW,OAC7C,CAAC,SAASA,EAAM,KAAK,EAAE,EAAGA,EAAM,QAAU,OAC1C,CAAC,cAAcA,EAAM,SAAS,EAAE,EAAGA,EAAM,YAAc,MACzD,CAAA,CACD,mXCzEK,MAAAA,EAAQC,EANCC,EAMmB,YAAY,EAExC+B,EAAkBlqB,EAAAA,SAAS,KAAO,CACtC,UAAWioB,EAAM,QAAU,GAC1B,kBAAoBA,EAAM,QAAU,GACrC,CAAC,aAAaA,EAAM,KAAK,EAAE,EAAG,OAAOA,EAAM,OAAU,SACrD,CAAC,MAAMA,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,OAC3C,CAAC,MAAMA,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,MAC3C,EAAA,gtDCiGI,MAAAA,EAAQC,EAxCCC,EAwCmB,WAAW,EAEvCC,EAAOC,EAoBPM,EAAaC,GAAM,IAAMX,EAAM,GAAI,UAAU,EAE7CK,EAAaC,EAAAA,uBAAqC,EAElDmsB,EAAerjB,EAAAA,OAAOtC,GAAe,EAAK,EAE1C4lB,EAAiBt7B,EAAA,MAAM,IAC3B,OAAO4O,EAAM,QAAW,UAAY,OAAOA,EAAM,QAAW,SAAWA,EAAM,OAAS,GAAA,EAElF2sB,EAAiB35B,GAAY05B,CAAc,EAE3CnuC,EAAWwN,MAAwB,IAAI,EACvC6gC,EAAS7gC,MAAwB,IAAI,EACrC8gC,EAAc9gC,MAAwB,IAAI,EAC1CqD,EAAUrD,MAAwB,IAAI,EAEtC3L,EAAWrI,EAAA,SAA+B,IAC9CqpB,GAAWpB,EAAM,QAAQ,EAAIA,EAAM,SAAW,MAAA,EAE1C3f,EAAetI,EAAA,SAAmC,IACtDspB,GAAerB,EAAM,QAAQ,EAAIA,EAAM,SAAW,MAAA,EAG9C8sB,EAAqB17B,QAAM,IAAQ4O,EAAM,MAA4B4sB,EAAO,MAA3BC,EAAY,KAAqB,EAExFp3B,GACE,SACA,IAAM,CACO4K,EAAA,MAAQ,CAACA,EAAW,KACjC,EACA,CAAC,OAAQysB,CAAkB,CAAA,EAE7Br3B,GACE,SACA,IAAM,CACO4K,EAAA,MAAQ,CAACA,EAAW,KACjC,EACA,CAAC,OAAQ9hB,CAAQ,CAAA,EAGb,MAAAwuC,EAAS,CAACtzC,EAAoB0J,IAAc,mBAEhD,IADI8L,EAAA1Q,EAAS,QAAT,MAAA0Q,EAAgB,UAAUD,EAAAvV,EAAE,SAAF,YAAAuV,EAA0B,QAAQ,UAC5D,qCAAqC,MAAMoc,EAAA3xB,EAAE,SAAF,YAAA2xB,EAA0B,OAAO,EAAG,OAE/E,GADJ3xB,EAAE,eAAe,EACb,CAAC4mB,EAAW,MAAO,CAChB,OACL7N,EAAAA,SAAS,IAAMu6B,EAAOtzC,EAAG0J,CAAC,CAAC,EAC3B,MACF,CACA,MAAMrF,GAAOqtB,EAAA5sB,EAAS,QAAT,YAAA4sB,EAAgB,iBAAiB,gDAC9C,GAAKrtB,EACL,IAAI2zB,EAAAlzB,EAAS,QAAT,MAAAkzB,EAAgB,SAAS,SAAS,eAAgB,CACpD,MAAMub,EAASzuC,EAAS,MAAM,cAAc,sBAAsB,EAC5DgQ,EAAQ,MAAM,UAAU,QAAQ,KAAKzQ,EAAMkvC,CAAM,EAAI7pC,EACvDoL,GAAS,GAAKA,GAAQzQ,GAAA,YAAAA,EAAM,WAAS4zB,EAAA5zB,EAAKyQ,CAAK,IAAV,MAAAmjB,EAA6B,QAAM,MAE1EC,EAAA7zB,EAAKqF,IAAM,GAAKrF,EAAK,OAAS,EAAI,CAAC,IAAnC,MAAA6zB,EAAsD,OAC1D,EAGUlc,GAAA,UAAYhc,GAAMszC,EAAOtzC,EAAG,EAAE,EAAG,CAAC,OAAQqzC,CAAmB,CAAA,EAC7Dr3B,GAAA,YAAchc,GAAMszC,EAAOtzC,EAAG,CAAC,EAAG,CAAC,OAAQqzC,CAAA,CAAmB,EAC9Dr3B,GAAA,UAAYhc,GAAMszC,EAAOtzC,EAAG,EAAE,EAAG,CAAC,OAAQ8E,CAAS,CAAA,EACnDkX,GAAA,YAAchc,GAAMszC,EAAOtzC,EAAG,CAAC,EAAG,CAAC,OAAQ8E,CAAA,CAAS,EAEhE,MAAM0uC,EAAoBl1C,EAAA,SAAS,IACjC8qB,GAAyB,CACvB,IAAK7C,EAAM,OACX,MAAOA,EAAM,UACb,IAAKA,EAAM,QACX,YAAaA,EAAM,OACnB,SAAUA,EAAM,GAAA,CACjB,CAAA,EAEGsB,EAAavV,MAAmB,CAAA,CAAE,EAClCwV,EAAqBxpB,EAAAA,SAAuB,IAAM,CAClD,GAAAioB,EAAM,qBAAuB,OAC/B,OAAOA,EAAM,mBAET,MAAAktB,EACJ,OAAOltB,EAAM,QAAW,UAAY,OAAOA,EAAM,QAAW,SACxD2sB,EAAe,MACf3sB,EAAM,OACN3R,EAAoB,CAACoT,GAAiByrB,CAAW,CAAC,EACpD,OAAAltB,EAAM,SAAW,IACf3R,EAAA,KACF9K,GAAK,CACH,SAAUnD,EAAS,MACnB,aAAcC,EAAa,MAC3B,QAAS2f,EAAM,eAAA,CAChB,CAAA,EAGDA,EAAM,UAAY,IAChB3R,EAAA,KACFtH,GAAM,CACJ,SAAU3G,EAAS,MACnB,aAAcC,EAAa,MAC3B,QAAS2f,EAAM,eAAA,CAChB,CAAA,EAGDA,EAAM,SAAW,IACf3R,EAAA,KACFwT,GAAe,CACb,SAAUzhB,EAAS,MACnB,aAAcC,EAAa,MAC3B,QAAS2f,EAAM,gBACf,MAAM,CAAC,eAAAhY,EAAgB,gBAAAD,GAAkB,CACvCuZ,EAAW,MAAQ,CACjB,UAAWvZ,GAAmBsY,EAAW,MAAQ,GAAGtY,CAAe,KAAO,OAC1E,SAAUC,GAAkBqY,EAAW,MAAQ,GAAGrY,CAAc,KAAO,MAAA,CAE3E,CAAA,CACD,CAAA,EAGEqG,CAAA,CACR,EACK,CAAC,OAAA9B,EAAQ,eAAAL,CAAA,EAAkBhB,GAAY4hC,EAAoBvuC,EAAU,CACzE,UAAW0uC,EACX,WAAY1rB,EACZ,SAAUnQ,EAAA,MAAM,IAAM4O,EAAM,QAAQ,EACpC,qBAAsB+B,EAAA,CACvB,EAEKE,EAAkBlqB,EAAAA,SAAS,IAAM,CACrCioB,EAAM,aACN,CACE,YAAa,CAACA,EAAM,cAAgBA,EAAM,MAC1C,SAAY,CAACA,EAAM,cAAgB,CAACA,EAAM,MAC1C,OAAUA,EAAM,OAChB,QAAWA,EAAM,QACjB,UAAaA,EAAM,UACnB,kBAAmBA,EAAM,WAAa,qBAAuB,CAACA,EAAM,KACtE,CAAA,CACD,EAEKmtB,EAAgBp1C,EAAAA,SAAS,IAAM,CACnCioB,EAAM,MAAQA,EAAM,WAAaA,EAAM,YACvC,CACE,WAAYA,EAAM,MAClB,kBAAmB,CAACA,EAAM,MAC1B,2BAA4BA,EAAM,SAAW,CAACA,EAAM,MACpD,KAAQA,EAAM,MAAQ,OAAYK,EAAW,KAC/C,CAAA,CACD,EAEK+sB,EAAgB,IAAM,CACnBnyB,GAAA,EAGHoyB,EAAgBpyC,GAAgC,CACpD+kB,EAAM,MAAQG,EAAK,QAASllB,CAAK,EAAImyC,GAAc,EAGrDr4B,GACExW,EACA,IAAM,CACA8hB,EAAW,QAAUL,EAAM,YAAc,IAAQA,EAAM,YAAc,YAChE/E,GAEX,EACA,CAAC,OAAQ,CAAC2xB,EAAQC,CAAW,CAAC,CAAA,EAEhC,MAAMS,EAAgB,IAAM,CACtBjtB,EAAW,QAAUL,EAAM,YAAc,IAAQA,EAAM,YAAc,WAChE/E,GACT,EAGIvW,EAAO,IAAM,CACjB2b,EAAW,OAASpF,GAAO,EAEvBwF,EAAO,IAAM,CACjBJ,EAAW,OAASpF,GAAO,EAEvBA,EAAS,IAAM,SACnBkF,EAAK,QAAQ,EACb,MAAMotB,EAAoBltB,EAAW,MAC/B5mB,EAAI,IAAIZ,GAAmB00C,EAAoB,OAAS,MAAM,EAEpE,GADoBptB,EAApBotB,EAAyB,OAAkB,OAAV9zC,CAAC,EAC9BA,EAAE,iBAAkB,CACF0mB,EAApBotB,EAAyB,iBAAyB,gBAAT,EACzC,MACF,CACAltB,EAAW,MAAQ,CAACktB,EACAptB,EAApBotB,EAAyB,SAAiB,OAAT,GACjCt+B,GAAAD,EAAAI,EAAQ,QAAR,YAAAJ,EAAe,gBAAf,MAAAC,EAAA,KAAAD,EAA+B,IAAI,MAAM,WAAW,EAAC,EAGvDrC,OAAAA,EAAA,MAAM0T,EAAY,IAAM,CACf9T,GAAA,CACR,EAEYgW,EAAA,CACX,KAAA7d,EACA,KAAA+b,EACA,OAAAxF,CAAA,CACD,EAEDwQ,EAAAA,QAAQpF,GAAsB,CAC5B,GAAI3F,EACJ,KAAAD,EACA,KAAA/b,EACA,OAAAuW,EACA,QAAS7J,EAAA,MAAM,IAAMiP,EAAW,KAAK,EACrC,MAAOjP,EAAA,MAAM,IAAM4O,EAAM,KAAK,CAAA,CAC/B,qrEC9UK,MAAAA,EAAQC,EAHCC,EAGmB,kBAAkB,swBCwB9C,MAAAF,EAAQC,EARCC,EAQmB,gBAAgB,EAS5CstB,EAAWp8B,EAAAA,MAAM,IAAO4O,EAAM,GAAK,GAAGA,EAAM,EAAE,mBAAqB,MAAU,EAC7EytB,EAAar8B,EAAM,MAAA,IAAO4O,EAAM,YAAc,SAAW,OAAY,SAAU,EAE/EiC,EAAkBlqB,EAAAA,SAAS,IAAM,CACrCioB,EAAM,YACN,CACE,CAAC,QAAQA,EAAM,aAAa,EAAE,EAAGA,EAAM,gBAAkB,IAC3D,CAAA,CACD,okDCCK,MAAAA,EAAQC,EA3BCC,EA2BmB,eAAe,EAE3CC,EAAOC,EAIP,CAAC,MAAO4mB,EAAc,GAAGpzB,GAASkf,EAAS,SAAA,EAO3C,CAAC,aAAA7J,EAAc,kBAAAC,CAAiB,EAAIL,GAAe7I,CAAK,EAExDiC,EAAkBlqB,EAAAA,SAAS,IAAM,CACrCioB,EAAM,UACN,CACE,OAAQA,EAAM,OACd,SAAUA,EAAM,SAChB,CAAC,QAAQA,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,IAC/C,CAAA,CACD,EAEKsU,EAAcljB,EAAAA,MAAM,IAAO6X,EAAa,MAAQsL,GAAQvU,EAAM,KAAO,IAAM,QAAS,EAEpF+S,EAAe3J,EAAAA,OAAOhD,GAAsB,IAAI,EAChDsnB,EAAetkB,EAAAA,OAAO/C,GAAsB,IAAI,EAChD2M,EAAa5J,EAAAA,OAAO9C,GAAoB,IAAI,EAG5CmN,EAAWh6B,GAAkC,WACjD0mB,EAAK,QAAS1mB,CAAC,EACXu5B,IAAe,QAAQhkB,EAAAgkB,GAAA,YAAAA,EAAY,YAAZ,YAAAhkB,EAAuB,SAAU,MAC1DC,EAAA8jB,GAAA,YAAAA,EAAc,OAAd,MAAA9jB,EAAA,KAAA8jB,KAEF3H,EAAAsiB,GAAA,YAAAA,EAAc,OAAd,MAAAtiB,EAAA,KAAAsiB,EAAqB,o+BC/DjB,MAAA1tB,EAAQC,EARCC,EAQmB,qBAAqB,EAEjDC,EAAOC,EAIP,CAAC,MAAO4mB,EAAc,GAAGpzB,GAASkf,EAAS,SAAA,EAO3C7Q,EAAkBlqB,EAAAA,SAAS,IAAM,CACrCioB,EAAM,YACN,CACE,CAACA,EAAM,WAAW,EAAGA,EAAM,OAC3B,SAAUA,EAAM,SAChB,CAAC,QAAQA,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,IAC/C,CAAA,CACD,EAEKyT,EAAWh6B,GAA4B,CAC3C0mB,EAAK,QAAS1mB,CAAC,CAAA,qbCvCX,MAAAumB,EAAQC,EAHCC,EAGmB,eAAe,kdCA3C,MAAAF,EAAQC,EANCC,EAMmB,OAAO,EAEnCpmB,EAAUiS,MAA4B,IAAI,EAO1CkW,EAAkBlqB,EAAAA,SAAS,KAAO,CACtC,gBAAiBioB,EAAM,SACvB,gBAAiBA,EAAM,SACvB,EAAA,EAEW,OAAAuC,EAAA,CACX,QAAAzoB,CAAA,CACD,kWCnBK,MAAAkmB,EAAQC,EAJCC,EAI8C,mBAAmB,2ZCkB1E,MAAAF,EAAQC,EAVCC,EAUmB,eAAe,EAS3CQ,EAAaC,GAAM,IAAMX,EAAM,GAAI,UAAU,EAE7C,CAAC,kBAAA2tB,EAAmB,UAAAxgB,CAAA,EAAaH,GACrC,IAAMhN,EAAM,QACZjoB,WAAS,KAAO,CAAC,GAAGioB,EAAO,aAAc,UAAW,WAAY,OAAA,EAAS,CAAA,EAGrE4tB,EAAwB71C,EAAA,SAC5B,IAEE41C,EAAkB,MAAM,OAAQE,GAAQ,CAAC1gB,EAAU0gB,CAAG,CAAC,CAAA,stBC/BrD,MAAA7tB,EAAQC,EALCC,EAKmB,oBAAoB,siBCUhD,MAAAF,EAAQC,EAVCC,EAUmB,sBAAsB,EAOlD4tB,EAAe18B,QAAM,IAAM4O,EAAM,YAAc,IAAQA,EAAM,QAAU,EAAK,EAE5EiC,EAAkBlqB,EAAAA,SAAS,KAAO,CACtC,UAAW+1C,EAAa,MACxB,mBAAoB,CAAC9tB,EAAM,QAC3B,kBAAmBA,EAAM,OACzB,EAAA,+eC9BI,MAAAA,EAAQC,EAHCC,EAGmB,UAAU,4XCOtC,MAAAF,EAAQC,EAPCC,EAOmB,WAAW,EAOvC+B,EAAkBlqB,EAAAA,SAAS,KAAO,CACtC,CAAC,QAAQioB,EAAM,WAAW,EAAE,EAAGA,EAAM,cAAgB,KACrD,YAAa,CAACA,EAAM,MACpB,EAAA,gkBCAI,MAAAA,EAAQC,EAVCC,EAUmB,sBAAsB,EAOlD4tB,EAAe18B,QAAM,IAAM4O,EAAM,YAAc,IAAQA,EAAM,QAAU,EAAI,EAE3EiC,EAAkBlqB,EAAAA,SAAS,KAAO,CACtC,UAAW+1C,EAAa,MACxB,iBAAkB,CAAC9tB,EAAM,QACzB,gBAAiBA,EAAM,OACvB,EAAA,yrDCAF,KAAM,CAAC,MAAOgnB,EAAc,GAAG+G,GAAcjb,EAAS,SAAA,EAyBhD9S,EAAQC,EAvBCC,EAuBmB,eAAe,EAE3CxM,EAAQkvB,EAAAA,WAKRviB,EAAaC,EAAAA,SAA4CJ,EAAA,YAE9D,EACK8tB,EAAgB1tB,EAAAA,SAAoBJ,EAAC,eAE1C,EAEKQ,EAAaC,GAAM,IAAMX,EAAM,GAAI,YAAY,EAE/C0T,EAAatK,EAAAA,OAAOlD,GAAkB,IAAI,EAE1C9qB,EAAQ2Q,MAAwB,IAAI,EAEpC,CAAC,QAAAgQ,CAAA,EAAWL,GAAStgB,EAAO,CAChC,aAAc4kB,EAAM,SAAA,CACrB,EAEK4nB,EAAiBx2B,EAAAA,MAAM,IAAM,CAAC1X,GAAYga,EAAM,OAAO,CAAC,EAExDu6B,EAAal2C,EAAAA,SAAS,CAC1B,IAAK,IAAO27B,EAAaA,EAAW,WAAW,MAAQrT,EAAW,MAClE,IAAM6tB,GAAW,CACf,GAAIA,IAAW,OAKf,IADAF,EAAc,MAAQ,GAClBta,IAAe,MAAQ,MAAM,QAAQwa,CAAM,EAAG,CAIhDxa,EAAW,WAAW,MAAQwa,EAC9B,MACF,CACA7tB,EAAW,MAAQ6tB,EACrB,CAAA,CACD,EAEKC,EAAmB/8B,EAAA,MACvB,IAAM,CAAC,EAAE4O,EAAM,OAAQ0T,GAAA,YAAAA,EAAY,KAAK,UAAW1T,EAAM,WAAY0T,GAAA,YAAAA,EAAY,SAAS,OAAA,EAGtF0a,EAAgBh9B,QAAM,IAAM4O,EAAM,eAAgB0T,GAAA,YAAAA,EAAY,QAAQ,QAAS,GAAM,EAErF2a,EAAgBt2C,EAAAA,SAAS,KAAO,CACpC,MAAOioB,EAAM,SAAU0T,GAAA,YAAAA,EAAY,MAAM,QAAS,IAClD,OAAQ1T,EAAM,UAAW0T,GAAA,YAAAA,EAAY,QAAQ,QAAS,IACtD,OAAQ1T,EAAM,UAAW0T,GAAA,YAAAA,EAAY,OAAO,QAAS,IACrD,QAAS1T,EAAM,WAAY0T,GAAA,YAAAA,EAAY,QAAQ,QAAS,IACxD,OAAQ1T,EAAM,UAAW0T,GAAA,YAAAA,EAAY,OAAO,QAAS,IACrD,MACE1T,EAAM,QAAU,IAAQA,EAAM,QAAU,GAAQA,EAAM,OAAQ0T,GAAA,YAAAA,EAAY,MAAM,QAAS,KAC3F,KAAM1T,EAAM,OAAQ0T,GAAA,YAAAA,EAAY,KAAK,QAAS,KAC9C,cAAe1T,EAAM,gBAAiB0T,GAAA,YAAAA,EAAY,cAAc,QAAS,YACzE,eAAgBkU,EAAe,KAC/B,EAAA,EACI0G,EAAiB3iB,GAAW0iB,CAAa,EACzCE,EAAyBx2C,EAAAA,SAAS,IAAM,CAACu2C,EAAe,MAAOtH,CAAY,CAAC,EAC5EwH,EAAe3iB,GAAgBwiB,CAAa,EAC5CI,EAAuB12C,WAAS,IAAM,CAACy2C,EAAa,MAAOxuB,EAAM,UAAU,CAAC,EAC5E0uB,EAAe3iB,GAAgBsiB,CAAa,EAErC,OAAA9rB,EAAA,CACX,KAAM,IAAM,CACVxG,EAAQ,MAAQ,EAClB,EACA,QAAS3gB,EACT,MAAO,IAAM,CACX2gB,EAAQ,MAAQ,EAClB,CAAA,CACD,s6DC5FK,MAAAiE,EAAQC,EAvBCC,EAuBmB,oBAAoB,EAShDG,EAAaC,EAAAA,uBAElB,EAEKI,EAAaC,GAAM,IAAMX,EAAM,GAAI,UAAU,EAC7C2uB,EAAehuB,GAAM,IAAMX,EAAM,KAAM,UAAU,EAEjDlmB,EAAUiS,MAAwB,IAAI,EAEtC,CAAC,QAAAgQ,CAAA,EAAWL,GAAS5hB,EAAS,CAClC,aAAckmB,EAAM,SAAA,CACrB,EAEDyL,EAAAA,QAAQvF,GAAkB,CACxB,WAAA7F,EACA,OAAQjP,EAAA,MAAM,IAAM4O,EAAM,QAAQ,EAClC,cAAe5O,EAAA,MAAM,IAAM4O,EAAM,aAAa,EAC9C,KAAM5O,EAAA,MAAM,IAAM4O,EAAM,IAAI,EAC5B,KAAM2uB,EACN,MAAOv9B,EAAA,MAAM,IAAM4O,EAAM,KAAK,EAC9B,MAAO5O,EAAA,MAAM,IAAM4O,EAAM,KAAK,EAC9B,KAAM5O,EAAA,MAAM,IAAM4O,EAAM,IAAI,EAC5B,OAAQ5O,EAAA,MAAM,IAAM,CAAC4O,EAAM,OAAO,EAClC,QAAS5O,EAAA,MAAM,IAAM4O,EAAM,OAAO,EAClC,SAAU5O,EAAA,MAAM,IAAM4O,EAAM,QAAQ,EACpC,QAAS5O,EAAA,MAAM,IAAM4O,EAAM,OAAO,EAClC,SAAU5O,EAAA,MAAM,IAAM4O,EAAM,QAAQ,CAAA,CACrC,EAED,MAAMyN,EAAmB11B,EAAA,SAAS,IAChCioB,EAAM,QAAQ,IAAI,CAAC7mB,EAAIy1C,IACrB,OAAOz1C,GAAO,UAAY,OAAOA,GAAO,SACpC,CACE,MAAO,CACL,MAAOA,EACP,SAAU6mB,EAAM,QAClB,EACA,KAAM7mB,EAAG,SAAS,EAClB,KAAM,OACN,KAAM,OAAO,0BAA0By1C,CAAG,EAAE,CAAA,EAE9C,CACE,MAAO,CACL,MAAOz1C,EAAG6mB,EAAM,UAAU,EAC1B,SAAU7mB,EAAG6mB,EAAM,aAAa,EAChC,GAAI7mB,EAAG,MAAQA,EAAG,MAAQ,CAAC,CAC7B,EACA,KAAMA,EAAG6mB,EAAM,SAAS,EACxB,KAAM7mB,EAAG6mB,EAAM,SAAS,EACxB,KAAM,OAAO,0BAA0B4uB,CAAG,EAAE,CAC9C,CACN,CAAA,EAGIP,EAAgBt2C,EAAAA,SAAS,KAAO,CACpC,SAAUioB,EAAM,SAChB,YAAaA,EAAM,YACnB,MAAOA,EAAM,MACb,UAAWA,EAAM,UACjB,QAASA,EAAM,QACf,QAASA,EAAM,QACf,KAAMA,EAAM,IACZ,EAAA,EACI6uB,EAAgB7iB,GAAaqiB,CAAa,EAC1CpsB,EAAkBiK,GAAgBmiB,CAAa,EAExC,OAAA9rB,EAAA,CACX,KAAM,IAAM,CACVxG,EAAQ,MAAQ,EAClB,EACA,MAAO,IAAM,CACXA,EAAQ,MAAQ,EAClB,CAAA,CACD,ilDCzFD,MAAMrI,EAAQkvB,EAAAA,WA4BR5iB,EAAQC,EAvBCC,EAuBmB,WAAW,EAEvCG,EAAaC,EAAAA,uBAElB,EAEKI,EAAaC,GAAM,IAAMX,EAAM,EAAE,EAIjC8L,EAAaJ,GAAc,IAAM1L,EAAM,KAAK,EAE5C5kB,EAAQ2Q,MAA6B,IAAI,EAEzC,CAAC,QAAAgQ,CAAW,EAAAL,GAAStgB,EAAO,CAAC,aAAc4kB,EAAM,SAAA,CAAU,EAE3D6iB,EAAezxB,EAAAA,MAAM,IAAM,CAAC1X,GAAYga,EAAM,KAAQ,CAAC,EAEvDo7B,EAAiB/2C,EAAA,SAAS,IAC9B,OAAOioB,EAAM,QAAW,SAAWA,EAAM,OAASA,EAAM,OAAO,KAAK,GAAG,CAAA,EAGnEiC,EAAkBlqB,EAAAA,SAAS,IAAM,CACrC+zB,EAAW,MACX,CACE,CAAC,gBAAgB9L,EAAM,IAAI,EAAE,EAAGA,EAAM,OAAS,OAC/C,eAAgB,CAACA,EAAM,MACvB,sCAAuCA,EAAM,QAC/C,CAAA,CACD,EAEK+uB,EAAW,IAAM,SACrB,MAAM/2C,IACJgX,EAAA5T,EAAM,QAAN,YAAA4T,EAAa,SAAU,QAAQC,EAAA7T,EAAM,QAAN,YAAA6T,EAAa,SAAU,OAAY,KAAO,CAAC,GAAG7T,EAAM,MAAM,KAAK,EACrFilB,EAAA,MAAQroB,IAAU,KAAO,KAAOgoB,EAAM,WAAa,GAAOhoB,EAAQA,EAAM,CAAC,CAAA,EAGhFg3C,EAAUv1C,GAAuB,CACjCumB,EAAM,SAAW,IACnBvmB,EAAE,eAAe,CACnB,EAMIuG,EAAQ,IAAM,CAClBqgB,EAAW,MAAQ,IAAA,EAGf1T,OAAAA,QAAA0T,EAAajO,GAAa,CAC1BA,IAAa,MAAQhX,EAAM,QAAU,OACvCA,EAAM,MAAM,MAAQ,GACtB,CACD,EAEYmnB,EAAA,CACX,KAAM,IAAM,CACVxG,EAAQ,MAAQ,EAClB,EACA,QAAS3gB,EACT,MAAO,IAAM,CACX2gB,EAAQ,MAAQ,EAClB,EACA,MAAA/b,CAAA,CACD,u3BC/HKivC,GAAS,CAAC,QAAS,SAAU,UAAU,EAEvCC,GAAiBD,GAAO,IAAK9rC,GAAM,GAAGA,CAAC,kBAAkB,EAAE,OAG3DgsC,GAA8B,CAAC,GAAGF,GAAQ,IAAK,SAAU,OAAO,EAEzDG,GAAkB,QAClBC,GAA6B,mBAC7BC,GAA2B,iBAC3BC,GAAwB,cACxBC,GAAoB,UAEjCC,GAAeh8B,kBAAgB,CAC7B,WAAY,CAACi8B,KAAAA,GAAMC,qBAAAA,GAAsBC,SAAAA,GAAUC,UAAAA,GAAWC,mBAAAA,EAAkB,EAChF,MAAO,CACL,YAAa,CAAC,KAAM,CAAC,QAAS,MAAM,EAA4B,QAAS,MAAS,EAClF,YAAa,CAAC,KAAM,CAAC,QAAS,OAAQ,MAAM,EAAG,QAAS,MAAS,EACjE,cAAe,CAAC,KAAM,CAAC,QAAS,OAAQ,MAAM,EAAG,QAAS,MAAS,EACnE,cAAe,CAAC,KAAM,CAAC,QAAS,OAAQ,MAAM,EAAG,QAAS,MAAS,EACnE,cAAe,CAAC,KAAM,CAAC,QAAS,OAAQ,MAAM,EAAG,QAAS,MAAS,EACnE,cAAe,CAAC,KAAM,CAAC,QAAS,OAAQ,MAAM,EAAG,QAAS,MAAS,EACnE,YAAa,CAAC,KAAM,CAAC,MAAM,EAAG,QAAS,MAAS,EAChD,SAAU,CAAC,KAAM,QAAS,QAAS,EAAK,EACxC,iBAAkB,CAAC,KAAM,OAAQ,QAAS,WAAW,EACrD,SAAU,CAAC,KAAM,QAAS,QAAS,EAAK,EACxC,GAAI,CAAC,KAAM,OAAQ,QAAS,MAAS,EACrC,gBAAiB,CAAC,KAAM,OAAQ,QAAS,MAAS,EAClD,MAAO,CAAC,KAAM,OAAQ,QAAS,MAAS,EACxC,WAAY,CAAC,KAAM,CAAC,MAAM,EAAG,QAAS,MAAS,EAC/C,aAAc,CAAC,KAAM,CAAC,MAAM,EAAG,QAAS,MAAS,EACjD,aAAc,CAAC,KAAM,CAAC,MAAM,EAAG,QAAS,MAAS,EACjD,aAAc,CAAC,KAAM,CAAC,MAAM,EAAG,QAAS,MAAS,EACjD,aAAc,CAAC,KAAM,CAAC,MAAM,EAAG,QAAS,MAAS,EACjD,WAAY,CAAC,KAAM,CAAC,MAAO,OAAQ,MAAM,EAAG,QAAS,MAAS,EAC9D,UAAW,CAAC,KAAM,CAAC,QAAS,OAAQ,MAAM,EAAG,QAAS,MAAS,EAC/D,YAAa,CAAC,KAAM,CAAC,QAAS,OAAQ,MAAM,EAAG,QAAS,MAAS,EACjE,YAAa,CAAC,KAAM,CAAC,QAAS,OAAQ,MAAM,EAAG,QAAS,MAAS,EACjE,YAAa,CAAC,KAAM,CAAC,QAAS,OAAQ,MAAM,EAAG,QAAS,MAAS,EACjE,YAAa,CAAC,KAAM,CAAC,QAAS,OAAQ,MAAM,EAAG,QAAS,MAAS,EACjE,SAAU,CAAC,KAAM,OAAQ,QAAS,MAAS,EAC3C,UAAW,CAAC,KAAM,OAAQ,QAAS,MAAS,EAC5C,oBAAqB,CAAC,KAAM,QAAS,QAAS,EAAK,EACnD,MAAO,CAAC,KAAM,QAAqC,QAAS,IAAI,EAChE,QAAS,CAAC,KAAM,QAAS,QAAS,EAAK,EACvC,cAAe,CAAC,KAAM,OAAQ,QAAS,MAAS,EAChD,UAAW,CAAC,KAAM,QAAS,QAAS,EAAK,CAC3C,EACA,MAAM9vB,EAAO,CAEX,MAAM+vB,EAAc,CAAC,KAAM,KAAM,KAAM,KAAM,IAAI,EAG3CC,EAAkB,CAAChwB,EAAYiwB,IACnCF,EAAY,OAAO,CAAC9+B,EAAkBi/B,IAAe,CAC7C,MAAAvnB,EAASD,GAAewnB,IAAe,KAAO,GAAKA,EAAY,GAAGD,CAAM,OAAO,EAC/E/kB,EAAoBlL,EAAM2I,CAAM,GAAK,KAC3C,OAAIuC,IACFglB,IAAe,KACXj/B,EAAO,KAAK,QAAQia,CAAS,EAAE,EAC/Bja,EAAO,KAAK,QAAQi/B,CAAU,IAAIhlB,CAAS,EAAE,GAG5Cja,CACT,EAAG,CAAE,CAAA,EAGDk/B,EAAc,CAACnwB,EAAYiwB,IAE/BF,EAAY,OAAO,CAAC9+B,EAAai/B,IAAuB,CAChD,MAAAvnB,EAASD,GAAewnB,IAAe,KAAO,GAAKA,EAAY,GAAGD,CAAM,MAAM,EAChF,IAAA/kB,EAAYlL,EAAM2I,CAAM,EAK5B,GAFYuC,EAAAA,IAAc,GAAK,GAAOA,GAAa,GAE7C,OAAOA,GAAc,WAAcA,IAAc,OAAQ,CAEvD,MAAAxc,EAAM,OAAO,SAASwc,CAAS,EACrCA,EAAY,OAAO,MAAMxc,CAAG,EAAI,EAAIA,EAExBwc,EAAAA,EAAY,EAAIA,EAAY,EAC1C,CAKA,OAAIA,IAGEglB,IAAe,KACjBj/B,EAAO,OAAOia,GAAc,UAAY,MAAQ,MAAM,EAAIA,EAE1Dja,EAAOi/B,IAAe,OAAOhlB,GAAc,UAAY,MAAQ,OAAO,EAAIA,GAGvEja,CACT,EAAG,EAAE,EAEDif,EAAUnkB,MAAwB,IAAI,EAKtCqkC,EAAwB,CAACh+B,EAAyBmH,EAA0B,OAAS,CACzF,GAAInf,IAAc4lB,EAAM,UAAYkQ,EAAQ,QAAU,KAAM,CAEpD,MAAAmgB,EAASngB,EAAQ,MAAM,cAAc,IAAI,IAAI,OAAOlQ,EAAM,QAAQ,CAAC,EAAE,EAC3E,GAAIqwB,EAAQ,CACV,MAAMC,EAAO,mBACPC,GAAUn+B,GAAY,IAAI,MAAMwS,EAAc,EAC9C4rB,GAAUj3B,GAAY,IAAI,MAAMqL,EAAc,EAI9C6rB,GAAOJ,EAAO,aAAaC,CAAI,GAAK,IACvC,MAAM1rB,EAAc,EACpB,OAAQuH,GAAO,CAACqkB,EAAO,SAASrkB,CAAE,CAAC,EACnC,OAAOokB,CAAM,EACb,OAAO,CAACpkB,EAAI5d,EAAOkiC,IAAQA,EAAI,QAAQtkB,CAAE,IAAM5d,CAAK,EACpD,OAAQlP,GAAMA,CAAC,EACf,KAAK,GAAG,EACR,OAECoxC,EACKJ,EAAA,aAAaC,EAAMG,CAAG,EAE7BJ,EAAO,gBAAgBC,CAAI,CAE/B,CACF,CAAA,EAGII,EAAkB34C,EAAAA,SAAS,IAAMo4C,EAAYnwB,EAAO,SAAS,CAAC,EAC9D2wB,EAAoB54C,EAAAA,SAAS,IAAMi4C,EAAgBhwB,EAAO,OAAO,CAAC,EAClE4wB,EAAgB74C,EAAAA,SAAS,IAAMo4C,EAAYnwB,EAAO,OAAO,CAAC,EAC1D6wB,EAAe94C,EAAA,SACnB,IAGE,OAAO,KAAK24C,EAAgB,KAAK,EAAE,OAAS,GAAK,OAAO,KAAKE,EAAc,KAAK,EAAE,OAAS,CAAA,EAGzF9kB,EAAaJ,GAAc,IAAM1L,EAAM,KAAK,EAE5CiM,EAAsB/zB,GAC1B,IAAM8nB,EAAM,YACZ,IAAMA,EAAM,KAAA,EAGdrT,OAAAA,EAAA,MACE,IAAM,KACN,CAACyF,EAAyBmH,IAA4B,CAChDnH,IAAamH,GACf62B,EAAsBh+B,EAAUmH,CAAQ,CAE5C,CAAA,EAGFhH,EAAAA,UAAU,IAAM,CACdC,EAAAA,SAAS,IAAM,CAGb49B,EAAsB,IAAe,CAAA,CACtC,CAAA,CACF,EAqBM,CACL,qBACA,oBAAAnkB,EACA,gBAAAykB,EACA,aAAAG,EACA,kBAAAF,EACA,cAAAC,EACA,cA1BqB31C,GAAgC,CAEjD,GAAA+kB,EAAM,UAAYkQ,EAAQ,QAAU,KAAM,OAExC,KAAA,CAAC,OAAAzlB,CAAU,EAAAxP,EACX61C,EAAUrmC,EAAUA,EAAuB,QAAU,GAIvD,GAAA0kC,GAA4B,QAAQ2B,CAAO,IAAM,GAAI,OAGnD,MAAAC,EAAS,CAAC,GAAG7gB,EAAQ,MAAM,iBAAiBgf,EAAc,CAAC,EAAE,OAAOv1C,EAAS,EAC7E,CAACq3C,CAAG,EAAID,EACVA,EAAO,SAAW,GAAKC,aAAe,aACxC93C,GAAa83C,CAAG,CAClB,EAWA,WAAAllB,CAAA,CAEJ,EACA,QAAS,CACP,MAAM9L,EAAQ,KAAK,OACbtM,EAAQ,KAAK,OAEbyY,EAAKxL,KACLswB,EAAa,CAACjxB,EAAM,SAG1B,IAAIkxB,EAAc,KAClB,MAAMC,EAAejqB,GAAckoB,GAAiB,CAAI,EAAA17B,CAAK,GAAKsM,EAAM,MAClEoxB,EAAUD,EAAexwB,GAAM,OAAW,YAAY,EAAE,MAAQ,KAElE,GAAAwwB,GAAgB,KAAK,aAAc,CAC/B,MAAAE,EAA+BJ,EAAa,SAAW,QAC7D,GAAIjxB,EAAM,oBACJmxB,IACOD,EAAAroC,EAAA,EACPwoC,EACA,CACE,MAAO,kBACP,GAAID,EACJ,IAAKpxB,EAAM,UAAY,IACzB,EACAmxB,CAAA,GAGA,KAAK,aACED,EAAAroC,EAAAA,EAAE6mC,GAAM,KAAK,cAAe,CAAC,QAAS,IAAMwB,EAAO,EAE5DA,EAASroC,IAAE,MAAO,CAAI,EAAA,CAACqoC,CAAM,CAAC,MAE3B,CACL,MAAMI,EAAc,CAClB,QAASL,EAAa,KAAK,cAAgB,KAC3C,GAAI,KAAK,aAAe,KAAK,cAAgB,CAAC,EAC9C,IAAK,KAAK,aAAeI,EAAW,KACpC,GAAID,EACJ,IAAKpxB,EAAM,UAAY,KACvB,SAAUixB,EAAa,KAAO,KAC9B,MAAO,CACL,KAAK,aAAe,iBAAmB,aACvC,CACE,mBAAoBA,EACpB,iBAAkB,KAAK,cAAgBA,EACvC,OAAQ,CAAC,KAAK,cAAgBA,EAC9B,UAAW,CAAC,KAAK,cAAgB,CAACA,EAClC,CAAC,kBAAkBjxB,EAAM,SAAS,EAAE,EAAG,CAAC,CAACA,EAAM,SACjD,EACA,KAAK,kBACLA,EAAM,UACR,CAAA,EAEE,KAAK,aACPkxB,EAASroC,IAAE6mC,GAAM4B,EAAa,CAAC,QAAS,IAAMH,EAAa,EAElDD,EAAAroC,EAAAA,EAAEwoC,EAAUC,EAAaH,CAAY,CAElD,CACF,CAEA,IAAII,EAAmB,KACvB,MAAMC,EACJtqB,GAAcmoB,GAA4B,CAAI,EAAA37B,CAAK,GAAK,KAAK,gBACzD+9B,EAAoBD,EACtB7wB,GAAM,OAAW,uBAAuB,EAAE,MAC1C,OAEA6wB,IACiBD,EAAA1oC,EAAA,EACjB8mC,GACA,CACE,SAAU3vB,EAAM,iBAChB,GAAIyxB,EACJ,MAAOzxB,EAAM,MACb,QAASA,EAAM,OACjB,EACA,CAAC,QAAS,IAAMwxB,CAAsB,CAAA,GAI1C,IAAIE,EAAiB,KACrB,MAAMC,EACJzqB,GAAcooB,GAA0B,CAAI,EAAA57B,CAAK,GAAK,KAAK,cACvDk+B,EAAkBD,EACpBhxB,GAAM,OAAW,qBAAqB,EAAE,MACxC,OAEAgxB,IACeD,EAAA7oC,EAAA,EACfinC,GACA,CACE,SAAU9vB,EAAM,iBAChB,GAAI4xB,EACJ,MAAO5xB,EAAM,MACb,QAASA,EAAM,OACjB,EACA,CAAC,QAAS,IAAM2xB,CAAoB,CAAA,GAKxC,IAAIE,EAAe,KACnB,MAAMC,EAAqB5qB,GAAcqoB,GAAuB,CAAI,EAAA77B,CAAK,GAAK,KAAK,YAC7Eq+B,EAAgBD,EAClBnxB,GAAM,OAAW,kBAAkB,EAAE,MACrC,OACAmxB,IACaD,EAAAhpC,EAAA,EACbgnC,GACA,CACE,GAAIkC,CACN,EACA,CAAC,QAAS,IAAMD,CAAkB,CAAA,GAQhC,MAAAE,EAAmB,KAAK,gBAC5B,CACED,EACA/xB,EAAM,QAAU,GAAQyxB,EAAoB,KAC5CzxB,EAAM,QAAU,GAAO4xB,EAAkB,IAAA,EAExC,OAAQvyC,GAAMA,CAAC,EACf,KAAK,GAAG,GAAK,KAEZ4yC,EAAgB,CACpB/qB,GAAcsoB,GAAmB,CAAC,gBAAAwC,EAAiB,cAAAD,EAAe,GAAA5lB,EAAI,QAAAilB,CAAA,EAAU19B,CAAK,GAAK,GAC1F69B,EACAG,EACAG,CAAA,EAEE,CAAC,KAAK,cAAgB7xB,EAAM,UAAUiyB,EAAc,KAAKf,CAAM,EAEnE,IAAIgB,EAAWrpC,EAAA,EACb,MACA,CACE,IAAK,UACL,MAAO,CACL,CACE,gBAAiB,CAAC,KAAK,cAAgBmX,EAAM,QAC/C,CACF,CACF,EACAiyB,CAAA,EAEE,KAAK,eACPC,EAAWrpC,EAAAA,EAAE6mC,GAAM,CAAC,IAAK,UAAW,GAAG,KAAK,eAAkB,EAAA,CAAC,QAAS,IAAMuC,CAAc,CAAA,GAO9F,MAAME,EAAW,CACf,MAAS,CACP,KAAK,WACL,CACE,gBAAiBnyB,EAAM,SACzB,CACF,EACA,GAAMW,GAAM,IAAMX,EAAM,EAAE,EAAE,MAC5B,SAAYixB,EAAajxB,EAAM,SAAW,KAC1C,KAAQixB,EAAa,KAAO,QAC5B,eAAgB,KAAK,oBAGrB,kBAAmBA,GAAc,KAAK,aAAeG,EAAU,IAAA,EAG7D,OAAA,KAAK,cAAgB,CAACH,EACjBpoC,EAAA,EAAE+mC,GAAUuC,EAAU,CAAC,QAAS,IAAM,CAACjB,EAAQgB,CAAQ,CAAA,CAAE,EAG3DrpC,EAAA,EACLooC,EAAa,WAAa,MAC1BkB,EACA,KAAK,cAAgBlB,EACjB,CAACpoC,EAAA,EAAE+mC,GAAU,KAAM,CAAC,QAAS,IAAM,CAACsB,EAAQgB,CAAQ,CAAE,CAAA,CAAC,EACvD,KAAK,cAAgB,CAAClyB,EAAM,SAC1B,CAACkxB,EAAQgB,CAAQ,EACjB,CAACA,CAAQ,CAAA,CAEnB,CACF,CAAC,m+BCjVK,MAAAlyB,EAAQC,EA3BCC,EA2BmB,YAAY,EAExC,CAACG,EAAY2G,CAAc,EAAI1G,EAAAA,wBAA0D,CAE7F,IAAMnd,GAAM4jB,GAAe5jB,EAAG6jB,CAAc,CAAA,CAC7C,EAEK,CAAC,MAAA5rB,EAAO,WAAAslB,EAAY,oBAAAuL,EAAqB,QAAAmmB,EAAS,SAAArD,EAAU,OAAAsD,EAAQ,MAAAC,EAAO,KAAAC,CAAI,EACnFlmB,GAAarM,EAAOK,EAAY2G,CAAc,EAE1C8E,EAAaJ,GAAc,IAAM1L,EAAM,KAAK,EAE5CwyB,EAAgBzmC,MAAI,EAAK,EAEzBkW,EAAkBlqB,EAAAA,SAAS,IAAM,CAC/B,MAAA06C,EAAUzyB,EAAM,OAAS,QACzB0yB,EAAU1yB,EAAM,OAAS,QACxB,MAAA,CACL8L,EAAW,MACX,CACE,2BAA4B0mB,EAAc,MAC1C,aAAcC,EACd,eAAgBC,GAAY,CAAC1yB,EAAM,WAAa,CAACyyB,EACjD,qBAAsBC,EACtB,yBAA0B1yB,EAAM,WAAa,CAACyyB,GAAW,CAACC,EAC1D,CAAC,gBAAgB1yB,EAAM,IAAI,EAAE,EAAG,CAAC,CAACA,EAAM,IAC1C,CAAA,CACF,CACD,EAEY,OAAAuC,EAAA,CACX,KAAAgwB,EACA,QAASn3C,EACT,MAAAk3C,CAAA,CACD,qpDCtCK,MAAAtyB,EAAQC,EAnBCC,EAmBmB,YAAY,EAExCxM,EAAQkvB,EAAAA,WAKRviB,EAAaC,EAAAA,uBAElB,EAEKI,EAAaC,GAAM,IAAMX,EAAM,GAAI,YAAY,EAE/C0T,EAAatK,EAAAA,OAAOjD,GAAe,IAAI,EAEvC/qB,EAAQ2Q,MAAwB,IAAI,EAEpC,CAAC,QAAAgQ,CAAA,EAAWL,GAAStgB,EAAO,CAChC,aAAc4kB,EAAM,SAAA,CACrB,EAEK4nB,EAAiBx2B,EAAAA,MAAM,IAAM,CAAC1X,GAAYga,EAAM,OAAO,CAAC,EAExDu6B,EAAal2C,EAAAA,SAAS,CAC1B,IAAK,IAAO27B,EAAaA,EAAW,WAAW,MAAQrT,EAAW,MAClE,IAAMjO,GAAa,CACjB,GAAIA,IAAa,OACjB,IAAIshB,IAAe,KAAM,CACvBA,EAAW,WAAW,MAAQthB,EAC9B,MACF,CACAiO,EAAW,MAAQjO,EACrB,CAAA,CACD,EAEK+7B,EAAmB/8B,EAAA,MACvB,IAAM,CAAC,EAAE4O,EAAM,OAAQ0T,GAAA,YAAAA,EAAY,KAAK,UAAW1T,EAAM,WAAY0T,GAAA,YAAAA,EAAY,SAAS,OAAA,EAGtF0a,EAAgBh9B,QAAM,IAAM4O,EAAM,eAAgB0T,GAAA,YAAAA,EAAY,QAAQ,QAAS,GAAM,EAErF2a,EAAgBt2C,EAAAA,SAAS,KAAO,CACpC,MAAOioB,EAAM,SAAU0T,GAAA,YAAAA,EAAY,MAAM,QAAS,IAClD,OAAQ1T,EAAM,UAAW0T,GAAA,YAAAA,EAAY,QAAQ,QAAS,IACtD,OAAQ1T,EAAM,UAAW0T,GAAA,YAAAA,EAAY,OAAO,QAAS,IACrD,MAAO1T,EAAM,QAAS0T,GAAA,YAAAA,EAAY,MAAM,OACxC,QAAS1T,EAAM,WAAY0T,GAAA,YAAAA,EAAY,QAAQ,QAAS,IACxD,KAAM1T,EAAM,OAAQ0T,GAAA,YAAAA,EAAY,KAAK,QAAS,KAC9C,cAAe1T,EAAM,gBAAiB0T,GAAA,YAAAA,EAAY,cAAc,QAAS,YACzE,eAAgBkU,EAAe,KAC/B,EAAA,EACI3lB,EAAkB0J,GAAW0iB,CAAa,EAC1CG,EAAe3iB,GAAgBwiB,CAAa,EAC5CK,EAAe3iB,GAAgBsiB,CAAa,EAErC,OAAA9rB,EAAA,CACX,KAAM,IAAM,CACVxG,EAAQ,MAAQ,EAClB,EACA,QAAS3gB,EACT,MAAO,IAAM,CACX2gB,EAAQ,MAAQ,EAClB,CAAA,CACD,g2DC7DK,MAAAiE,EAAQC,EAtBCC,EAsBmB,iBAAiB,EAS7CG,EAAaC,EAAAA,uBAElB,EAEKI,EAAaC,GAAM,IAAMX,EAAM,GAAI,OAAO,EAC1C2uB,EAAehuB,GAAM,IAAMX,EAAM,KAAM,UAAU,EAEjDlmB,EAAUiS,MAAwB,IAAI,EAEtC,CAAC,QAAAgQ,CAAA,EAAWL,GAAS5hB,EAAS,CAClC,aAAckmB,EAAM,SAAA,CACrB,EAEDyL,EAAAA,QAAQtF,GAAe,CACrB,WAAA9F,EACA,cAAejP,EAAA,MAAM,IAAM4O,EAAM,aAAa,EAC9C,KAAM5O,EAAA,MAAM,IAAM4O,EAAM,IAAI,EAC5B,KAAM2uB,EACN,QAASv9B,EAAA,MAAM,IAAM4O,EAAM,OAAO,EAClC,MAAO5O,EAAA,MAAM,IAAM4O,EAAM,KAAK,EAC9B,MAAO5O,EAAA,MAAM,IAAM4O,EAAM,KAAK,EAC9B,KAAM5O,EAAA,MAAM,IAAM4O,EAAM,IAAI,EAC5B,OAAQ5O,EAAA,MAAM,IAAM,CAAC4O,EAAM,OAAO,EAClC,QAAS5O,EAAA,MAAM,IAAM4O,EAAM,OAAO,EAClC,SAAU5O,EAAA,MAAM,IAAM4O,EAAM,QAAQ,EACpC,SAAU5O,EAAA,MAAM,IAAM4O,EAAM,QAAQ,CAAA,CACrC,EAED,MAAMyN,EAAmB11B,EAAA,SAAS,IAChCioB,EAAM,QAAQ,IAAI,CAAC7mB,EAAIy1C,IACrB,OAAOz1C,GAAO,UAAY,OAAOA,GAAO,SACpC,CACE,MAAOA,EACP,SAAU6mB,EAAM,SAChB,KAAM7mB,EAAG,SAAS,EAClB,KAAM,OACN,KAAM,OAAO,uBAAuBy1C,CAAG,EAAE,CAAA,EAE3C,CACE,MAAOz1C,EAAG6mB,EAAM,UAAU,EAC1B,SAAU7mB,EAAG6mB,EAAM,aAAa,EAChC,GAAI7mB,EAAG,MAAQA,EAAG,MAAQ,CAAC,EAC3B,KAAMA,EAAG6mB,EAAM,SAAS,EACxB,KAAM7mB,EAAG6mB,EAAM,SAAS,EACxB,KAAM,OAAO,uBAAuB4uB,CAAG,EAAE,CAC3C,CACN,CAAA,EAGIP,EAAgBt2C,EAAAA,SAAS,KAAO,CACpC,SAAUioB,EAAM,SAChB,YAAaA,EAAM,YACnB,MAAOA,EAAM,MACb,UAAWA,EAAM,UACjB,QAASA,EAAM,QACf,QAASA,EAAM,QACf,KAAMA,EAAM,IACZ,EAAA,EACI6uB,EAAgB7iB,GAAaqiB,CAAa,EAC1CpsB,EAAkBiK,GAAgBmiB,CAAa,EAExC,OAAA9rB,EAAA,CACX,KAAM,IAAM,CACVxG,EAAQ,MAAQ,EAClB,EACA,MAAO,IAAM,CACXA,EAAQ,MAAQ,EAClB,CAAA,CACD,q7BCpGK,MAAAiE,EAAQC,EARCC,EAQmB,wBAAwB,EASpD,CAAC,kBAAAytB,CAAiB,EAAI3gB,GAAc,IAAMhN,EAAM,QAASA,CAAK,EAE9D4tB,EAAwB71C,EAAA,SAAS,IAAM41C,EAAkB,KAA0B,k/CCuBnF,MAAA3tB,EAAQC,EAtBCC,EAsBmB,aAAa,EASzCG,EAAaC,EAAAA,SAAcJ,EAAA,YAGhC,EAEKQ,EAAaC,GAAM,IAAMX,EAAM,GAAI,OAAO,EAE1C2yB,EAAmB3/B,GAAY,IAAMgN,EAAM,UAAU,EAErD8L,EAAaJ,GAAc,IAAM1L,EAAM,KAAK,EAE5C5kB,EAAQ2Q,MAAwB,IAAI,EAEpC,CAAC,QAAAgQ,CAAA,EAAWL,GAAStgB,EAAO,CAChC,aAAc4kB,EAAM,SAAA,CACrB,EAEKiC,EAAkBlqB,EAAAA,SAAS,IAAM,CACrC+zB,EAAW,MACX,CACE,eAAgB9L,EAAM,MACtB,CAAC,gBAAgBA,EAAM,IAAI,EAAE,EAAGA,EAAM,OAAS,MAAQA,EAAM,MAC7D,cAAe,CAACA,EAAM,MACtB,CAAC,eAAeA,EAAM,IAAI,EAAE,EAAGA,EAAM,OAAS,MAAQ,CAACA,EAAM,KAC/D,CAAA,CACD,EAEK4yB,EAAqBxhC,EAAA,MAAM,IAC/BuhC,EAAiB,OAAS3yB,EAAM,MAAQ2yB,EAAiB,MAAQ,MAAA,EAG7D1mB,EAAsB/zB,GAC1B,IAAM8nB,EAAM,YACZ,IAAMA,EAAM,KAAA,EAGR,CAAC,kBAAA2tB,EAAmB,UAAAxgB,GAAaH,GAAc,IAAMhN,EAAM,QAASA,CAAK,EAEzE4tB,EAAwB71C,EAAA,SAC5B,IAAM41C,EAAkB,KAAA,EAGpBM,EAAal2C,EAAAA,SAAS,CAC1B,IAAK,IAAMsoB,EAAW,MACtB,IAAMjO,GAAa,CACjBiO,EAAW,MAAQjO,CACrB,CAAA,CACD,EAEY,OAAAmQ,EAAA,CACX,KAAM,IAAM,CACVxG,EAAQ,MAAQ,EAClB,EACA,QAAS3gB,EACT,MAAO,IAAM,CACX2gB,EAAQ,MAAQ,EAClB,CAAA,CACD,gzCCnIY82B,GAAY,YACZC,GAAW,MAGXC,GAAY,OAEZC,GAAgB,WAChBC,GAAc,SAGdC,GAAU,4MC0gBjBC,GAAgB,CACpB,IAAK,EACL,IAAK,IACL,KAAM,EACN,YAAa,IACb,eAAgB,IAChB,gBAAiB,GACjB,iBAAkB,CACpB,2+BAzcA,MAAMC,EAAY,CAACF,GAASL,GAAWE,GAAWD,GAAUG,GAAaD,EAAa,EA6BhFhzB,EAAQC,EA3BCC,EA2BmB,iBAAiB,EAE7CC,EAAOC,EAWPC,EAAaC,EAAAA,uBAElB,EAEKxmB,EAAUiS,MAAwB,IAAI,EAEtC,CAAC,QAAAgQ,CAAA,EAAWL,GAAS5hB,CAAO,EAE5B4mB,EAAaC,GAAM,IAAMX,EAAM,GAAI,YAAY,EAE/CiC,EAAkBlqB,EAAAA,SAAS,KAAO,CACtC,SAAYioB,EAAM,SAClB,SAAYA,EAAM,SAClB,MAASjE,EAAQ,MACjB,gBAAiBiE,EAAM,QAAUA,EAAM,SACvC,SAAU,CAACA,EAAM,QAAU,CAACA,EAAM,SAClC,sBAAuB,CAACA,EAAM,SAC9B,cAAeA,EAAM,SACrB,CAAC,gBAAgBA,EAAM,IAAI,EAAE,EAAGA,EAAM,OAAS,MAC/C,EAAA,EAEIqzB,EAAsBt7C,EAAAA,SAAS,KAAO,CAC1C,SAAUioB,EAAM,SAChB,oBAAqB,CAACA,EAAM,SAC5B,qBAAsBA,EAAM,SAC5B,aAAcA,EAAM,SACpB,gBAAiBA,EAAM,SACvB,eAAgB,CAACA,EAAM,SACvB,aAAc,CAACA,EAAM,QACrB,EAAA,EAGE,IAAAszB,EACAC,EACAC,EAAc,GAMlB,MAAMC,EAAazgC,GAAY,IAAMgN,EAAM,IAAI,EACzC0zB,EAAetiC,EAAA,MAAM,IACzB,OAAO,MAAMqiC,EAAW,KAAK,EAAIN,GAAc,KAAOM,EAAW,KAAA,EAG7DE,EAAY3gC,GAAY,IAAMgN,EAAM,GAAG,EACvC4zB,EAAcxiC,EAAA,MAAM,IACxB,OAAO,MAAMuiC,EAAU,KAAK,EAAIR,GAAc,IAAMQ,EAAU,KAAA,EAG1DE,EAAY7gC,GAAY,IAAMgN,EAAM,GAAG,EACvC8zB,EAAc1iC,EAAAA,MAAM,IAAM,CAC9B,MAAM2iC,EAAOL,EAAa,MACpBh4C,EAAMk4C,EAAY,MACxB,OAAO,KAAK,OAAOC,EAAU,MAAQn4C,GAAOq4C,CAAI,EAAIA,EAAOr4C,CAAA,CAC5D,EAEKs4C,EAAoBhhC,GAAY,IAAMgN,EAAM,YAAa,CAC7D,UAAW,GACX,OAAQ,UAAA,CACT,EACKi0B,EAAgB7iC,EAAA,MAAM,IAC1B4iC,EAAkB,MAAQ,EAAIA,EAAkB,MAAQb,GAAc,WAAA,EAGlEe,EAAuBlhC,GAAY,IAAMgN,EAAM,eAAgB,CACnE,UAAW,GACX,OAAQ,UAAA,CACT,EACKm0B,EAAmB/iC,EAAA,MAAM,IAC7B8iC,EAAqB,MAAQ,EAAIA,EAAqB,MAAQf,GAAc,cAAA,EAGxEiB,EAAwBphC,GAAY,IAAMgN,EAAM,gBAAiB,CACrE,UAAW,GACX,OAAQ,UAAA,CACT,EACKq0B,EAAoBjjC,EAAA,MAAM,IAC9B,KAAK,IACH,OAAO,MAAMgjC,EAAsB,KAAK,EACpCjB,GAAc,gBACdiB,EAAsB,MAC1B,CACF,CAAA,EAGIE,EAA6BthC,GAAY,IAAMgN,EAAM,qBAAsB,CAC/E,UAAW,GACX,OAAQ,UAAA,CACT,EACKu0B,EAAyBnjC,EAAA,MAAM,IACnC,KAAK,IACH,OAAO,MAAMkjC,EAA2B,KAAK,EACzCnB,GAAc,iBACdmB,EAA2B,MAC/B,CACF,CAAA,EAGIE,EAAoBpjC,EAAAA,MAAM,IAAM,CACpC,MAAM2iC,EAAOL,EAAa,MAC1B,OAAO,KAAK,MAAMK,CAAI,IAAMA,EAAO,GAAKA,EAAK,SAAS,EAAE,MAAM,GAAG,EAAE,CAAC,GAAK,IAAI,MAAA,CAC9E,EAEKU,EAAqBrjC,QAAM,IAAM,KAAK,IAAI,GAAIojC,EAAkB,OAAS,CAAC,CAAC,EAE3EE,EAAetjC,EAAA,MAAM,IACzBiP,EAAW,QAAU,KAAO,GAAKA,EAAW,MAAM,QAAQm0B,EAAkB,KAAK,CAAA,EAG7E,CAAC,MAAAtO,EAAO,OAAQyO,GAAgBtlB,GAAO,EAEvCulB,EAAiB78C,EAAAA,SAAS,IAAM,CAE9B,MAAA88C,EAAU,EADH70B,EAAM,SAAU20B,GAAA,YAAAA,EAAc,SAAU,QACjC,EAEb,OADI,IAAI,KAAK,aAAaE,CAAO,EAC9B,gBAAkB,EAAA,MAAA,CAC7B,EAEKC,EAAmB,IACvB,IAAI,KAAK,aAAaF,EAAe,MAAO,CAC1C,MAAO,UACP,YAAa,GACb,qBAAsB,EACtB,sBAAuBJ,EAAkB,MACzC,sBAAuBA,EAAkB,MACzC,SAAU,UACX,CAAA,EAAE,OAECO,EAAoB3jC,EAAAA,MAAM,IAAM4O,EAAM,aAAe80B,GAAkB,EAEvEE,EAAah8C,GAAsB,CAGnC,GAAA,CAAC,MAAAhB,CAAS,EAAAqoB,EACd,GAAI,CAACL,EAAM,UAAYhoB,IAAU,KAAM,CAC/B,MAAA+7C,GAAOL,EAAa,MAAQ16C,EAC5B0C,EAAMk4C,EAAY,MAClBj4C,EAAMm4C,EAAY,MAClBmB,GAAaR,EAAmB,MAChC,CAAC,KAAAS,EAAQ,EAAAl1B,EAEfhoB,EAAQ,KAAK,OAAOA,EAAQ0D,GAAOq4C,EAAI,EAAIA,GAAOr4C,EAAMq4C,GAExD/7C,EAAQ,KAAK,MAAMA,EAAQi9C,EAAU,EAAIA,GAE9B50B,EAAA,MAAQroB,EAAQ2D,EAAOu5C,GAAOx5C,EAAMC,EAAO3D,EAAQ0D,EAAOw5C,GAAOv5C,EAAMD,EAAO1D,CAC3F,CAAA,EAGIm9C,EAAS,CAACF,EAAa,IAAM,CAC7B,GAAA50B,EAAW,QAAU,KAAM,CAC7BA,EAAW,MAAQuzB,EAAY,MAC/B,MACF,CACAoB,EAAU,EAAKC,CAAU,CAAA,EAGrBG,EAAW,CAACH,EAAa,IAAM,CAC/B,GAAA50B,EAAW,QAAU,KAAM,CAC7BA,EAAW,MAAQL,EAAM,KAAO8zB,EAAY,MAAQF,EAAY,MAChE,MACF,CACAoB,EAAU,GAAKC,CAAU,CAAA,EAGrBI,EAAap6C,GAA2B,CAC5CA,EAAM,eAAe,EACrBA,EAAM,yBAAyB,CAAA,EAGjCwa,GACE29B,EACCn4C,GAAU,CACT,KAAM,CAAC,KAAAq6C,EAAM,OAAAC,GAAQ,QAAAC,EAAS,QAAAC,GAAWx6C,EAEzC,GAAI,EAAA+kB,EAAM,UAAYA,EAAM,UAAYu1B,IAAUC,GAAWC,KAG7DJ,EAAUp6C,CAAK,EACX,CAAAu4C,GAMJ,IADYkC,IACR,CAACxC,GAASL,EAAS,EAAE,SAASyC,CAAI,EAAG,CAIvC,GADc9B,EAAA,GACV8B,IAASpC,GAAS,CACpByC,EAAiB16C,EAAOk6C,CAAM,EAC9B,MACF,CACIG,IAASzC,IACX8C,EAAiB16C,EAAOm6C,CAAQ,EAElC,MACF,CAEA,GAAIE,IAASrC,GAAa,CACxBkC,EAAOZ,EAAuB,KAAK,EACnC,MACF,CACA,GAAIe,IAAStC,GAAe,CAC1BoC,EAASb,EAAuB,KAAK,EACrC,MACF,CACA,GAAIe,IAASvC,GAAW,CACtB1yB,EAAW,MAAQuzB,EAAY,MAC/B,MACF,CACI0B,IAASxC,KACXzyB,EAAW,MAAQyzB,EAAY,OAEnC,EACA,CAAC,OAAQh6C,EAAS,UAAW,SAAS,CAAA,EAGxC2b,GACE29B,EACCn4C,GAAmC,CAGlC,KAAM,CAAC,OAAAs6C,EAAQ,QAAAC,GAAS,QAAAC,CAAA,EAAWx6C,EAE/B+kB,EAAM,UAAYA,EAAM,UAAYu1B,GAAUC,IAAWC,IAE7DJ,EAAUp6C,CAAK,EACHy6C,IACElC,EAAA,GACTrzB,EAAA,SAAUE,EAAW,KAAK,EACjC,EACA,CAAC,OAAQvmB,EAAS,UAAW,OAAO,CAAA,EAIhC,MAAA67C,EAAmB,CAAC16C,EAAwB26C,IAAoC,CACpF,KAAM,CAAC,KAAA78B,EAAA,EAAQ9d,GAAS,GAExB,GAAI,CAAC+kB,EAAM,UAAY,CAACA,EAAM,SAAU,CAClC,GAAA61B,EAAa56C,CAAK,GAEhB8d,KAAS,aAAe9d,EAAM,OAAQ,OAEhCy6C,IAEZE,EAAQ,CAAC,EACT,MAAMr6B,EAAY84B,EAAkB,MAC9BY,EAAaV,EAAuB,MACpCp5B,GAAQ84B,EAAc,MACtBvhC,GAAWyhC,EAAiB,MAGlCb,EAAmB,WAAW,IAAM,CAClC,IAAIwC,GAAQ,EACZvC,EAAoB,YAAY,IAAM,CAK5BqC,EAAAE,GAAQv6B,EAAY,EAAI05B,CAAU,EAC1Ca,MACCpjC,EAAQ,GACVyI,EAAK,CACV,CAAA,EAGI06B,EAAgBjpB,GACpBA,EAAI,OAAS,WAAaA,EAAI,OAAS,YAEnCmpB,EAA4B96C,GAA2B,CAGvD46C,EAAa56C,CAAK,GAChBA,EAAM,OAAS,WAAaA,EAAM,SAMxCo6C,EAAUp6C,CAAK,EACHy6C,IACZM,EAAW,EAAK,EAEX71B,EAAA,SAAUE,EAAW,KAAK,EAAA,EAG3B21B,EAAcp7C,GAAgB,CAG9B,GAAA,CACFD,GAAWC,EAAI,CAAC,SAAS,KAAM,UAAWm7C,EAAW,EAAK,CAAC,EAC3Dp7C,GAAWC,EAAI,CAAC,SAAS,KAAM,WAAYm7C,EAAW,EAAK,CAAC,CAAA,MACtD,CAER,CAAA,EAEIL,EAAc,IAAM,CACxB,aAAapC,CAAgB,EAC7B,cAAcC,CAAiB,EACZD,EAAA,OACCC,EAAA,MAAA,EAGhB0C,EAAUl+C,EAAAA,SAAS,IAAM,CAC7B,MAAMm+C,EAAoB,CACxB,IAAK,CACH,MAAO,6BACP,MAAO,KACP,OAAQ,KACR,KAAM,eACN,MAAO,aACP,QAAS,WACX,EACA,KAAM,CACJ,EAAG,uGACL,CAAA,EAGIC,EAAoB,CACxB,IAAK,CACH,MAAO,6BACP,MAAO,KACP,OAAQ,KACR,KAAM,eACN,MAAO,aACP,QAAS,WACX,EACA,KAAM,CAAC,EAAG,2DAA2D,CAAA,EAGjEC,GAAoB,CACxB,MAAS,CAAC,CAAC,OAAQ,CAACp2B,EAAM,QAAW,EAAA,MAAO,SAAU,WAAY,WAAW,EAC7E,SAAY,KACZ,KAAQ,SACR,SAAYA,EAAM,UAAYA,EAAM,SACpC,gBAAiBA,EAAM,UAAYA,EAAM,SAAW,GAAO,OAC3D,gBAAiBU,EAAW,KAAA,EAGxB21B,EAAiB,CACrB,cAAe,GACf,MAASt6B,EAAQ,MAAQ,IAAM,IAAA,EAG3BthB,EAAU,CAACQ,GAAwB26C,KAA2C,CAC9E,CAAC51B,EAAM,UAAY,CAACA,EAAM,WAC5Bq1B,EAAUp6C,EAAK,EACf+6C,EAAW,EAAI,EAGfj6B,EAAQ,MAAQ,GAChB45B,EAAiB16C,GAAO26C,EAAO,EACjC,EAGIU,GAAiB,CACrB,OAAQ,CACN,GAAGF,GACH,aAAcp2B,EAAM,gBAAkB,OACtC,oBAAqB,SACvB,EACA,IAAK,CACH,GAAGq2B,EACH,GAAGH,EAAkB,GACvB,EACA,KAAM,CACJ,GAAGA,EAAkB,IACvB,EACA,KAAM,CACJ,KAAM,WACR,EACA,QAAUz8C,IAAagB,EAAQhB,GAAG07C,CAAM,CAAA,EAGpCoB,GAAiB,CACrB,OAAQ,CACN,GAAGH,GACH,aAAcp2B,EAAM,gBAAkB,OACtC,oBAAqB,WACvB,EACA,IAAK,CACH,GAAGq2B,EACH,GAAGF,EAAkB,GACvB,EACA,KAAM,CACJ,GAAGA,EAAkB,IACvB,EACA,KAAM,CACJ,KAAM,WACR,EACA,QAAU18C,IAAuBgB,EAAQhB,GAAG27C,CAAQ,CAAA,EAG/C,MAAA,CACL,IAAK,CACH,GAAIp1B,EAAM,SAAWs2B,GAAiBC,EACxC,EACA,OAAQ,CACN,GAAKv2B,EAAM,SAA4Bu2B,GAAjBD,EACxB,CAAA,CACF,CACD,49EC3eK,MAAAt2B,EAAQC,EAVCC,EAUmB,UAAU,EAEtCC,EAAOC,EAIP1M,EAAQkvB,EAAAA,WAKRliB,EAAaC,GAAM,IAAMX,EAAM,EAAE,EAEjCw2B,EAAUz+C,EAAA,SACd,IAAA,OAAQ,UAAAiX,EAAA0E,EAAM,UAAN,YAAA1E,EAAA,KAAA0E,EAAgB,CAAA,GAAI,GAAG,WAAY,IAAI,SAAS,GAAKsM,EAAM,QAAU,GAAA,EAEzEy2B,EAAarlC,EAAAA,MAAM,IAAM,GAAGsP,EAAW,KAAK,YAAY,EAExDuB,EAAkBlqB,EAAAA,SAAS,KAAO,CACtC,CAAC,WAAWioB,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,KAChD,eAAgBA,EAAM,KACtB,SAAYA,EAAM,QAClB,EAAA,qgFCqGI,MAAAA,EAAQC,EAhCCC,EAgCmB,WAAW,EAEvCC,EAAOC,EAwBPC,EAAaC,EAAAA,uBAElB,EAEKI,EAAaC,KAEb+1B,EAAc1jC,GAAY,IAAMgN,EAAM,OAAS,GAAG,EAElD8L,EAAaJ,GAAc,IAAM1L,EAAM,KAAK,EAE5C5kB,EAAQ2Q,MAA6B,IAAI,EAEzC,CAAC,QAAAgQ,CAAA,EAAWL,GAAStgB,EAAO,CAChC,aAAc4kB,EAAM,SAAA,CACrB,EAEK22B,EAAWvlC,QAAM,IAAM4O,EAAM,SAAW,GAAGU,EAAW,KAAK,SAAS,EACpEk2B,EAAO7qC,EAAAA,IAAc,CAAC,GAAGsU,EAAW,KAAK,CAAC,EAC1Cw2B,EAAa9qC,MAAY,EAAE,EAC3B+qC,EAAuB/qC,EAAAA,IAAasU,EAAW,MAAM,OAAS,CAAC,EAC/D02B,EAAiBhrC,MAAY,EAAE,EAC/BirC,EAAYjrC,MAAc,CAAA,CAAE,EAC5BkrC,EAAclrC,MAAc,CAAA,CAAE,EAC9BmrC,EAAgBnrC,MAAc,CAAA,CAAE,EAEtC6F,GAAQyO,EAAYu2B,EAAM,CACxB,UAAW,MACX,UAAW,CACT,IAAMzzC,GAAM,CAAC,GAAGA,CAAC,CACnB,CAAA,CACD,EAEK,MAAA8e,EAAkBlqB,EAAAA,SAAS,IAAM,CACrC+zB,EAAW,MACX,CACE,CAAC,gBAAgB9L,EAAM,IAAI,EAAE,EAAGA,EAAM,OAAS,KAC/C,SAAUA,EAAM,SAChB,MAAOjE,EAAQ,KACjB,CAAA,CACD,EAEKo7B,EAAcp/C,WAAS,IAAM6+C,EAAK,MAAM,SAASC,EAAW,KAAK,CAAC,EAClEO,EAAYr/C,EAAA,SAAS,IACzB8+C,EAAW,QAAU,GAAK,GAAQ,CAAC72B,EAAM,aAAa62B,EAAW,KAAK,CAAA,EAElEQ,EAAiBjmC,EAAM,MAAA,IAAMwlC,EAAK,MAAM,SAAWF,EAAY,KAAK,EACpEY,EAAmBlmC,QAAM,IAAM,CAACgmC,EAAU,OAAS,CAACD,EAAY,KAAK,EAErEI,EAAYx/C,EAAAA,SAAS,KAAO,CAChC,cAAeioB,EAAM,cACrB,iBAAkBA,EAAM,iBACxB,OAAAw3B,EACA,iBAAkBF,EAAiB,MACnC,SAAUt3B,EAAM,SAChB,iBAAkBA,EAAM,iBACxB,cAAek3B,EAAc,MAC7B,KAAMl3B,EAAM,KACZ,WAAY,CACV,GAAGA,EAAM,WACT,SAAUA,EAAM,SAChB,KAAMA,EAAM,KACZ,GAAI22B,EAAS,MACb,MAAOE,EAAW,KACpB,EACA,WAAY72B,EAAM,WAClB,cAAe,CACb,MAAOoyB,EACP,QAAStG,EACT,OAAQiD,CACV,EACA,QAAS4H,EAAS,MAClB,UAAW32B,EAAM,UACjB,eAAgBA,EAAM,eACtB,YAAai3B,EAAY,MACzB,YAAaE,EAAY,MACzB,UAAWC,EAAU,MACrB,eAAgBC,EAAe,MAC/B,cAAer3B,EAAM,cACrB,MAAO02B,EAAY,MACnB,YAAa12B,EAAM,YACnB,YAAaA,EAAM,YACnB,UAAAy3B,EACA,SAAUz3B,EAAM,SAChB,UAAWA,EAAM,UACjB,KAAMA,EAAM,KACZ,MAAOA,EAAM,MACb,SAAUA,EAAM,SAChB,SAAUA,EAAM,SAChB,eAAgBA,EAAM,eACtB,WAAYA,EAAM,WAClB,KAAM42B,EAAK,KACX,EAAA,EAEIc,EAAaj+C,GAAkC,CACnD,GAAIumB,EAAM,SAAU,CACHvmB,EAAE,OACV,KAAK,EACZ,MACF,CAEA0mB,EAAK,UAAW1mB,CAAC,CAAA,EAGbk+C,EAAWl+C,GAAkC,CAC7CumB,EAAM,UAAYA,EAAM,eAI5BjE,EAAQ,MAAQ,GAChBoE,EAAK,QAAS1mB,CAAC,EAAA,EAGX44C,EAAU54C,GAAkC,CAChDsiB,EAAQ,MAAQ,GAChBoE,EAAK,OAAQ1mB,CAAC,CAAA,EAGV24C,EAAW34C,GAAsC,SACrD,MAAMzB,EAAQ,OAAOyB,GAAM,SAAWA,EAAKA,EAAE,OAA4B,MAIrE,GAFJq9C,EAAqB,MAAQ,IAEzB9nC,EAAAgR,EAAM,YAAN,MAAAhR,EAAiB,SAAShX,EAAM,OAAO,CAAC,IAAMA,EAAM,OAAS,EAAG,CAC9DoD,EAAM,QACRA,EAAM,MAAM,MAAQ,IAEtB,MACF,CAII,GAFJy7C,EAAW,MAAQ7+C,GAEfiX,EAAA+Q,EAAM,YAAN,MAAA/Q,EAAiB,SAASjX,EAAM,OAAOA,EAAM,OAAS,CAAC,GAAI,CAC7Dw/C,EAAOx/C,EAAM,MAAM,EAAGA,EAAM,OAAS,CAAC,CAAC,EACvC,MACF,CAEUg/C,EAAA,MAAQh3B,EAAM,aAAahoB,CAAK,GAAK,CAACm/C,EAAY,MAAQ,CAACn/C,CAAK,EAAI,CAAA,EAClEi/C,EAAA,MAAQj3B,EAAM,aAAahoB,CAAK,EAAI,CAAC,EAAI,CAACA,CAAK,EAC3Dk/C,EAAc,MAAQC,EAAY,MAAQ,CAACn/C,CAAK,EAAI,GAEpDmoB,EAAK,YAAa62B,EAAU,MAAOC,EAAY,MAAOC,EAAc,KAAK,CAAA,EAGrEnI,EAAYt1C,GAA6B,CACzCumB,EAAM,cACRoyB,EAAQ34C,CAAC,EAEJ09C,EAAY,OACfK,EAAOX,EAAW,KAAK,EAE3B,EAGI/K,EAAaryC,GAAqC,CACtD,GAAIA,EAAE,MAAQ,SAAW,CAACumB,EAAM,aAAc,CAC5Cw3B,EAAOX,EAAW,KAAK,EACvB,MACF,EAGGp9C,EAAE,MAAQ,aAAeA,EAAE,MAAQ,WACpCumB,EAAM,gBACN62B,EAAW,QAAU,IACrBC,EAAqB,OACrBF,EAAK,MAAM,OAAS,EAEpBa,EAAUb,EAAK,MAAMA,EAAK,MAAM,OAAS,CAAC,CAAC,EAE3CE,EAAqB,MAAQ,EAC/B,EAGFrhC,GAAYq2B,EAAW,CAAC,OAAQ1wC,CAAM,CAAA,EAEhC,MAAAw8C,EAAY7/C,EAAAA,SAAS,IAAM,CAC3B,GAACioB,EAAM,UAIJ,OAAA,OAAOA,EAAM,WAAc,SAAWA,EAAM,UAAYA,EAAM,UAAU,KAAK,EAAE,CAAA,CACvF,EAEK63B,EAAkB9/C,EAAAA,SAAS,IAAM,CACjC,GAAC6/C,EAAU,MAIf,OAAO,IAAI,OAAO,IAAIpyB,GAAkBoyB,EAAU,KAAK,CAAC,IAAI,CAAA,CAC7D,EAEKJ,EAAUvkB,GAAuB,CAC9BA,GAAAA,GAAO4jB,EAAW,OAAO,KAAK,EAErC,MAAMiB,EAAUD,EAAgB,MAC5B5kB,EAAI,MAAM4kB,EAAgB,KAAK,EAAE,IAAKtvC,GAAMA,EAAE,KAAA,CAAM,EACpD,CAAC0qB,CAAG,EACF+jB,EAAsB,CAAA,EAE5B,UAAWe,KAAUD,EACf,GAAA,EAAAC,IAAW,IAAMZ,EAAY,OAAS,CAACn3B,EAAM,aAAa+3B,CAAM,GAIhE,IAAArB,EAAY,OAASW,EAAe,MACtC,MAGFL,EAAU,KAAKe,CAAM,EAGvB,MAAM3lC,EAAW,CAAC,GAAGiO,EAAW,MAAO,GAAG22B,CAAS,EACnDH,EAAW,MAAQ,GACnBC,EAAqB,MAAQ,GAC7Bz2B,EAAW,MAAQjO,EACnB2J,EAAQ,MAAQ,EAAA,EAGZ07B,EAAaxkB,GAAuB,CACxC,MAAM+kB,EAAWpB,EAAK,MAAM,SAAQ3jB,GAAA,YAAAA,EAAK,aAAc,EAAE,EACrD+kB,IAAa,KACjBjB,EAAe,MAAQH,EAAK,MAAM,OAAOoB,EAAU,CAAC,EAAE,WACtD33B,EAAW,MAAQu2B,EAAK,MAAA,EAGb,OAAAr0B,EAAA,CACX,KAAM,IAAM,CACVxG,EAAQ,MAAQ,EAClB,EACA,QAAS3gB,EACT,MAAO,IAAM,CACX2gB,EAAQ,MAAQ,EAClB,CAAA,CACD,wyIC7WK,MAAAiE,EAAQC,EA1BCC,EA0BmB,eAAe,EAE3C,CAACG,EAAY2G,CAAc,EAAI1G,EAAAA,wBAA0D,CAE7F,IAAMnd,GAAM4jB,GAAe5jB,EAAG6jB,CAAc,CAAA,CAC7C,EAEK,CAAC,MAAA5rB,EAAO,WAAAslB,EAAY,oBAAAuL,EAAqB,QAAAmmB,EAAS,SAAArD,EAAU,OAAAsD,EAAQ,MAAAC,EAAO,KAAAC,CAAI,EACnFlmB,GAAarM,EAAOK,EAAY2G,CAAc,EAE1C8E,EAAaJ,GAAc,IAAM1L,EAAM,KAAK,EAE5CiC,EAAkBlqB,EAAAA,SAAS,IAAM,CACrC+zB,EAAW,MACX9L,EAAM,UAAY,yBAA2B,eAC7C,CACE,CAAC,gBAAgBA,EAAM,IAAI,EAAE,EAAG,CAAC,CAACA,EAAM,IAC1C,CAAA,CACD,EAEKi4B,EAAiBlgD,EAAAA,SAAwB,KAAO,CACpD,OAAQioB,EAAM,SAAW,OAAS,MAClC,EAAA,EAEW,OAAAuC,EAAA,CACX,KAAAgwB,EACA,QAASn3C,EACT,MAAAk3C,CAAA,CACD,khCCpDD7mB,UAAQ3E,GAAe,EAAI,EAWrB,MAAA9G,EAAQC,EATCC,EASmB,aAAa,EAWzC+B,EAAkBlqB,EAAAA,SAAS,KAAO,CACtC,CAAC,eAAeioB,EAAM,IAAI,EAAE,EAAGA,EAAM,OAAS,IAC9C,EAAA,EACIk4B,EAAY9mC,QAAM,IAAM,CAAC,CAAC4O,EAAM,QAAU,CAAC,CAACA,EAAM,UAAU,EAC5Dm4B,EAAa/mC,QAAM,IAAM,CAAC,CAAC4O,EAAM,SAAW,CAAC,CAACA,EAAM,WAAW,ggCC1C/D,MAAAA,EAAQC,EAJCC,EAImB,iBAAiB,ubCE7C,MAAAF,EAAQC,EANCC,EAMmB,YAAY,EAOxC+B,EAAkBlqB,EAAAA,SAAS,IAAM,CACrC,MAAMqgD,EAAap4B,EAAM,MAAQ,GAAQA,EAAM,WACxC,MAAA,CACL,mBAAoBA,EAAM,MAC1B,wBAAyBo4B,IAAe,GACxC,CAAC,yBAAyBA,CAAU,EAAE,EAAG,OAAOA,GAAe,SAC/D,sBAAuBp4B,EAAM,QAAA,CAC/B,CACD,EACKsU,EAAcljB,QAAM,IAAO4O,EAAM,WAAa,GAAO,KAAOA,EAAM,GAAI,EAE5EyL,OAAAA,EAAAA,QAAQ1F,GAAuB,CAC7B,SAAU3U,EAAA,MAAM,IAAM4O,EAAM,QAAQ,CAAA,CACrC,u+BCaK,MAAAA,EAAQC,EA5BCC,EA4BmB,gBAAgB,EAO5CtM,EAAQkf,EAAAA,WAERY,EAAatK,EAAAA,OAAOrD,GAAuB,IAAI,EAE/C,CAAC,aAAAkD,CAAA,EAAgBJ,GAAe7I,CAAK,EAErC2F,EAASvU,EAAAA,MAAM,IAAM,CAAC4O,EAAM,QAAUiJ,EAAa,KAAK,EACxDovB,EAAcjnC,EAAA,MAAM,IACxBsiB,GAAA,MAAAA,EAAY,SAAS,MAAQ,KAAO1T,EAAM,OAAS,SAAY2F,EAAO,MAAoB4O,GAAZvU,EAAM,GAAM,EAGtFs4B,EAAWvgD,EAAA,SACf,IACEioB,EAAM,QACN2F,EAAO,OACP3F,EAAM,QACN,CAAC,IAAK,cAAe,SAAU,QAAQ,EAAE,SAASA,EAAM,GAAG,CAAA,EAGzDiC,EAAkBlqB,EAAAA,SAAS,KAAO,CACtC,CAAC,mBAAmBioB,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,MAAQA,EAAM,UAAY,OAClF,yBAA0Bs4B,EAAS,MACnC,OAAUt4B,EAAM,OAChB,SAAYA,EAAM,QAClB,EAAA,EAEI6uB,EAAgB92C,EAAAA,SAAS,IAAM,CACnC,MAAMwgD,EAAa,CAAA,EACnB,OAAIv4B,EAAM,UACJ,CAACpM,GAAS,CAACA,EAAM,QAEnB2kC,EAAW,KAAO,UAEhBv4B,EAAM,WAERu4B,EAAW,SAAW,KAGnBA,CAAA,CACR,kpBCtDK,MAAAv4B,EAAQC,EAJCC,EAImB,oBAAoB,EAEhD,CAAC,OAAAslB,EAAQ,OAAA9P,EAAQ,KAAAjV,EAAM,QAAAqlB,EAAS,MAAAlQ,CAAA,EAAS9G,KAEzC0pB,EACJC,GACGnxB,GAAKmxB,EAAS,CAAC,WAAY,QAAS,aAAc,aAAa,CAAC,EAExD,OAAAl2B,EAAA,CACX,OAAAijB,EACA,KAAA/kB,EACA,QAAAqlB,CAAA,CACD,u0CChCK,MAAA9lB,EAAQC,EAZCC,EAYmB,MAAM,EAOlCpjB,EAAYjF,GAAa,IAAMmoB,EAAM,KAAK,EAE1CiC,EAAkBlqB,EAAAA,SAAS,KAAO,CACtC,WAAYioB,EAAM,KAClB,YAAaA,EAAM,OAAS,CAACA,EAAM,KACnC,mBAAoB,CAACA,EAAM,UAAYA,EAAM,YAAcA,EAAM,KACjE,oBAAqB,CAACA,EAAM,UAAYA,EAAM,YAAcA,EAAM,OAAS,CAACA,EAAM,KAClF,cAAeA,EAAM,SACrB,WAAY,CAACA,EAAM,UAAYA,EAAM,KACrC,gBAAiB,CAACA,EAAM,UAAYA,EAAM,UAC1C,CAACljB,EAAU,KAAK,EAAG,CAACkjB,EAAM,UAAYA,EAAM,QAAU,OACtD,MAASA,EAAM,MACf,gBAAiBA,EAAM,SACvB,EAAA,ghBCRI,MAAAA,EAAQC,EATCC,EASmB,UAAU,EAEtCC,EAAOC,EASPs4B,EAAaj/C,GAAuB,CACxC0mB,EAAK,SAAU1mB,CAAC,CAAA,qsCCMZ,MAAAumB,EAAQC,EA1BCC,EA0BmB,UAAU,EAEtCC,EAAOC,EAIP8I,EAAoBnxB,EAAA,SAAS,IACjC0vB,GAAKzH,EAAO,CACV,SACA,cACA,SACA,WACA,OACA,OACA,UACA,eACA,MACA,UACA,sBACA,SACA,KACA,kBACA,uBACA,mBACA,wBACA,mBACA,SAAA,CACD,CAAA,EAEH,OAAAkJ,EAAkB,MAAM,21DCPlB,MAAAlJ,EAAQC,EAvCCC,EAuCmB,kBAAkB,EAE9CC,EAAOC,EAWPC,EAAaC,EAAAA,uBAAqC,EAUlDq4B,EAAW5sC,MAA2C,IAAI,EAE1DrH,EAAO,IAAM,QACjBsK,EAAA2pC,EAAS,QAAT,MAAA3pC,EAAgB,MAAK,EAEjByR,EAAO,IAAM,QACjBzR,EAAA2pC,EAAS,QAAT,MAAA3pC,EAAgB,MAAK,EAMV,OAAAuT,EAAA,CACX,KAAA7d,EACA,KAAA+b,EACA,OAPa,IAAM,QACnBzR,EAAA2pC,EAAS,QAAT,MAAA3pC,EAAgB,QAAO,CAMvB,CACD,22BCrGK,MAAAgR,EAAQC,EADCC,EACmB,UAAU,0dCYtC,MAAAF,EAAQC,EAVCC,EAUmB,SAAS,EAOrC04B,EAAexnC,EAAM,MAAA,IAAO4O,EAAM,MAAQ,MAAQ,OAAY,YAAa,EAE3E64B,EAAiBtvB,GAAoB,IAAMvJ,EAAM,SAAS,EAE1DiC,EAAkBlqB,EAAAA,SAAS,KAAO,CACtC,UAAWioB,EAAM,MACjB,CAAC,UAAUA,EAAM,MAAM,EAAE,EAAGA,EAAM,SAAW,OAC7C,CAAC,MAAMA,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,KAC3C,CAAC,SAASA,EAAM,KAAK,EAAE,EAAGA,EAAM,QAAU,OAC1C,gBAAiBA,EAAM,aAAe,GACtC,CAAC,iBAAiBA,EAAM,UAAU,EAAE,EAAG,OAAOA,EAAM,YAAe,QACnE,EAAA,EAEFyL,OAAAA,EAAAA,QAAQnF,GAAoB,CAC1B,IAAKlV,EAAA,MAAM,IAAM4O,EAAM,GAAG,EAC1B,UAAW5O,EAAA,MAAM,IAAM4O,EAAM,SAAS,CAAA,CACvC,4lCCNK,MAAAA,EAAQC,EAzBCC,EAyBmB,cAAc,EAE1C,CAAC,aAAA+I,EAAc,kBAAAC,GAAqBL,GAAe7I,EAAO,CAC9D,SACA,cACA,SACA,WACA,OACA,MACA,UACA,sBACA,SACA,KACA,UACA,UACA,eACA,mBACA,kBACA,uBACA,mBACA,wBACA,MAAA,CACD,EAEKsU,EAAcljB,EAAM,MAAA,IAAO6X,EAAa,MAAQsL,GAAQvU,EAAM,GAAI,+YChDlE,MAAAA,EAAQC,EAPCC,EAOmB,YAAY,EAOxCpjB,EAAYjF,GAAa,IAAMmoB,EAAM,KAAK,EAE1CiC,EAAkBlqB,EAAAA,SAAS,KAAO,CACtC,WAAYioB,EAAM,KAClB,gBAAiBA,EAAM,UACvB,CAACljB,EAAU,KAAK,EAAGkjB,EAAM,QAAU,OACnC,MAASA,EAAM,KACf,EAAA,mJC9BI84B,GAAW,CAAC3/C,EAA2BnB,IAC3CmB,EAAG,aAAa,gBAAiBnB,CAAK,EACzB+gD,GAAA,CACb,QAAQ5/C,EAAIoqB,EAAiC,CAClCu1B,GAAA3/C,EAAIoqB,EAAQ,KAAK,CAC5B,EACA,QAAQpqB,EAAIoqB,EAAiC,CAClCu1B,GAAA3/C,EAAIoqB,EAAQ,KAAK,CAC5B,CACF,ECRMy1B,GAAa,CACjBz1B,EACApqB,IACG,CACH,KAAM,CAAC,UAAA8/C,EAAW,IAAAzd,EAAK,MAAAxjC,CAAA,EAASurB,EAE1BjN,EAAU,OAAO,KAAK2iC,GAAa,CAAE,CAAA,EAGrChL,EAAa,OAAOj2C,GAAU,SAAWA,EAAM,MAAM4sB,EAAc,EAAI5sB,EAG7E,GAAImB,EAAG,QAAQ,YAAY,IAAM,IAAK,CACpC,MAAMg5B,EAAOh5B,EAAG,aAAa,MAAM,GAAK,GACpC2rB,GAAW,KAAKqN,CAAI,GACtB7b,EAAQ,KAAK6b,EAAK,QAAQtN,GAAS,EAAE,CAAC,CAE1C,CAKA,aAAM,UAAU,OACb,MAAM,CAAA,EAAI,CAAC2W,EAAKyS,CAAU,CAAC,EAC3B,QAAS1lC,GAAM,OAAOA,GAAM,UAAY+N,EAAQ,KAAK/N,CAAC,CAAC,EAGnD+N,EAAQ,OAAO,CAAC/N,EAAGgG,EAAOF,IAAQ9F,GAAK8F,EAAI,QAAQ9F,CAAC,IAAMgG,CAAK,CACxE,EAEM0M,GAAS,CAACi+B,EAA8B//C,IAA8B,CAChE+/C,EAAA,QAASC,GAAa,CACxB,MAAA1uC,EAAS,SAAS,eAAe0uC,CAAQ,EAE3C1uC,IAAW,MACbA,EAAO,cAAc,IAAI,MAAM,WAAW,CAAC,CAC7C,CACD,EACD,WAAW,IAAM2uC,GAAgBF,EAAW//C,CAAE,EAAG,EAAE,CACrD,EAEMigD,GAAkB,CAACF,EAA8B//C,IAA8B,CACnF,IAAIkgD,EAAU,GACJH,EAAA,QAASC,GAAa,CACxB,MAAA1uC,EAAS,SAAS,eAAe0uC,CAAQ,EAE3C1uC,GAAA,MAAAA,EAAQ,UAAU,SAAS,UACnB4uC,EAAA,IAER5uC,GAAA,MAAAA,EAAQ,UAAU,SAAS,aACnB4uC,EAAA,GACZ,CACD,EACDlgD,EAAG,aAAa,gBAAiBkgD,EAAU,OAAS,OAAO,EAC3DlgD,EAAG,UAAU,OAAOkgD,EAAU,YAAc,eAAe,EAC3DlgD,EAAG,UAAU,IAAIkgD,EAAU,gBAAkB,WAAW,CAC1D,EAEMC,GAAe,CACnBngD,EACAoqB,IACG,CAEG,MAAAjN,EAAU0iC,GAAWz1B,EAASpqB,CAAE,EAClCmd,EAAQ,SAAW,IAGnBnd,EAAG,UACFA,EAAA,oBAAoB,QAASA,EAAG,QAAQ,EAE7CA,EAAG,SAAW,IAAM8hB,GAAO3E,EAASnd,CAAE,EACnCA,EAAA,iBAAiB,QAASA,EAAG,QAAQ,EAGxCA,EAAG,aAAa,gBAAiBmd,EAAQ,KAAK,GAAG,CAAC,EAClD8iC,GAAgB9iC,EAASnd,CAAE,EAC7B,EAMeogD,GAAA,CACb,QAASD,GACT,QAASA,GACT,UAAUngD,EAAsB,CAC3BA,EAAA,oBAAoB,QAASA,EAAG,QAAQ,EAC3CA,EAAG,gBAAgB,eAAe,EAClCA,EAAG,gBAAgB,eAAe,CACpC,CACF,ECnFesqB,GAAA,CACb,QAAQtqB,EAAIoqB,EAAS,CAEnB,GAAI,CADaN,GAAoBM,EAAQ,KAAK,EACnC,OAEf,MAAM+J,EAAOnK,GAAeI,EAAQ,MAAOpqB,CAAE,EAEzC,CAACm0B,EAAK,SAAW,CAACA,EAAK,OAC3B9K,GAAKrpB,EAAIoqB,EAAS,CAChB,GAAGD,GAAsBC,EAASpqB,CAAE,EACpC,GAAGm0B,CAAA,CACJ,CACH,EACA,QAAQn0B,EAAIoqB,EAAS,CAEnB,GAAI,CADaN,GAAoBM,EAAQ,KAAK,EACnC,OAEf,MAAM+J,EAAOnK,GAAeI,EAAQ,MAAOpqB,CAAE,EAEzC,CAACm0B,EAAK,SAAW,CAACA,EAAK,QAE3B3K,GAAOxpB,CAAE,EACTqpB,GAAKrpB,EAAIoqB,EAAS,CAChB,GAAGD,GAAsBC,EAASpqB,CAAE,EACpC,GAAGm0B,CAAA,CACJ,EACH,EACA,cAAcn0B,EAAI,CAChBwpB,GAAOxpB,CAAE,CACX,CACF,EChCMqpB,GAAO,CAACrpB,EAA0BoqB,IAAwC,CAC1EpqB,EAAG,cAAcA,EAAG,aAAa,UAC/B,KAAA,CAAC,IAAAqiC,EAAK,MAAAxjC,CAAS,EAAAurB,EACf3U,EAAW,OAAO5W,GAAU,UAAYA,IAAU,KAClDk4B,EAAUsL,IAEZ,OAAOxjC,GAAU,SACfA,EACA4W,EACE5W,EAAM,SAAWA,EAAM,QACvB,MACRmB,EAAG,aAAe82B,GAAaC,EAAS/2B,EAAIyV,EAAW0Y,GAAKtvB,EAAO,CAAC,UAAW,SAAS,CAAC,EAAI,CAAE,CAAA,CACjG,EAEewhD,GAAA,CACb,QAASh3B,GACT,QAASA,GACT,cAAcrpB,EAAI,CACZA,EAAG,cAAcA,EAAG,aAAa,SACvC,CACF,EClBesgD,GAAA,CACb,QAAQtgD,EAAIoqB,EAAS,CACb,MAAAnT,EAAW6S,GAAoBM,EAAQ,KAAK,EAClD,GAAI,CAACnT,EAAU,OAEf,MAAMkd,EAAOnK,GAAeI,EAAQ,MAAOpqB,CAAE,EAEzC,CAACm0B,EAAK,SAAW,CAACA,EAAK,OAE3B9K,GAAKrpB,EAAIoqB,EAAS,CAChB,eAAgB,GAChB,GAAGD,GAAsBC,EAASpqB,CAAE,EACpC,MAAOm0B,EAAK,OAASA,EAAK,SAAW,GACrC,QAASld,CAAA,CACV,CACH,EACA,QAAQjX,EAAIoqB,EAAS,CACb,MAAAnT,EAAW6S,GAAoBM,EAAQ,KAAK,EAClD,GAAI,CAACnT,EAAU,OAEf,MAAMkd,EAAOnK,GAAeI,EAAQ,MAAOpqB,CAAE,EAEzC,CAACm0B,EAAK,SAAW,CAACA,EAAK,QAC3B3K,GAAOxpB,CAAE,EAETqpB,GAAKrpB,EAAIoqB,EAAS,CAChB,eAAgB,GAChB,GAAGD,GAAsBC,EAASpqB,CAAE,EACpC,MAAOm0B,EAAK,OAASA,EAAK,SAAW,GACrC,QAASld,CAAA,CACV,EACH,EACA,cAAcjX,EAAI,CAChBwpB,GAAOxpB,CAAE,CACX,CACF,wcClBM,MAAA6mB,EAAQC,EALCC,EAKmB,eAAe,EAE3CC,EAAOC,EAUP6B,EAAkBlqB,EAAAA,SAAS,KAAO,CACtC,SAAUioB,EAAM,QAChB,EAAA,EAEI05B,EAAWjgD,GAAkC,CAC5CumB,EAAM,UACTG,EAAK,QAAS1mB,CAAC,CACjB,mXC0II4pC,GAAwB,mlCAlExB,MAAArjB,EAAQC,EAzBCC,EAyBmB,YAAY,EAExCC,EAAOC,EAiBP1M,EAAQkvB,EAAAA,WAeRviB,EAAaC,EAAAA,uBAElB,EAEKI,EAAaC,GAAM,IAAMX,EAAM,GAAI,WAAW,EAE9C/I,EAAcD,GAAeD,EAAsB,EACnD4iC,EAA6B1iC,EAAY,eAAe,IAAM+I,EAAM,YAAc,IAAI,EACtF45B,EAA6B3iC,EAAY,eAAe,IAAM+I,EAAM,YAAc,IAAI,EAEtF65B,EAAqB9hD,EAAA,SACzB,IAAMioB,EAAM,aAAe,QAAa25B,EAA2B,KAAA,EAErElqB,GAAkBpP,EAAY,IAAML,EAAM,eAAiB65B,EAAmB,KAAK,EAE7E,MAAA//C,EAAUiS,MAAwB,IAAI,EACtCw3B,EAAuBx3B,MAAwB,IAAI,EAEzD0J,GACE,SACA,IAAM,CACJ/Q,EAAK,KAAK,CACZ,EACA,CAAC,OAAQ5K,CAAO,CAAA,EAGlB,KAAM,CAAC,QAAAiiB,CAAA,EAAWL,GAAS5hB,EAAS,CAClC,aAAcumB,EAAW,OAASL,EAAM,UAAY,EAAA,CACrD,EAEK5P,EAAWrE,EAAAA,IAAIsU,EAAW,KAAK,EAG/B,CAAC,cAAAsiB,CAAa,EAAIR,GAAsB,CAC5C,QAAAroC,EACA,SAAAsW,EACA,OAAQ,IAAM4P,EAAM,QAAU65B,EAAmB,MACjD,cAAe,CACb,cAAexW,GACf,IAAKE,CACP,CAAA,CACD,EAEKI,EAAoB53B,MAAI,EAAK,EAC7B+tC,EAA8B/tC,MAAI,EAAK,EAEvCguC,EAAehiD,EAAA,SACnB,KACGioB,EAAM,aAAe,QAAa,CAAC65B,EAAmB,QACvD75B,EAAM,eAAiB,IACvBK,EAAW,QAAU,EAAA,EAGnB6jB,EAAcnsC,EAAA,SAClB,IACEioB,EAAM,OAAS,IACdA,EAAM,OAAS,IAAQ2jB,EAAkB,QAAU,IACnD3jB,EAAM,OAAS,IAAQK,EAAW,QAAU,EAAA,EAG3C8jB,EAAqB/yB,EAAAA,MAAM,IAAM,CAAC1X,GAAYga,EAAM,cAAc,CAAC,CAAC,EACpEsmC,EAAqBjiD,EAAAA,SAAS,IAAM,CACxC,CAAC,aAAc,CAACosC,EAAmB,KAAK,EACxCnkB,EAAM,gBAAA,CACP,EACKykB,EAAmB1sC,EAAAA,SAAS,KAAO,CACvC,QAASosC,EAAmB,MAAQnkB,EAAM,mBAAqB,OAC/D,MAAOg6B,EAAmB,KAC1B,EAAA,EACIC,EAAkBliD,EAAA,SAAS,IAC/B+hD,EAA4B,QAAU,GAClC,KACA,CACE,aAAc,UACd,eAAgB,GAChB,aAAc,cACd,eAAgB,MAClB,CAAA,EAGApP,EAAgBt5B,EAAAA,MAAM,IAAM,CAAC1X,GAAYga,EAAM,MAAM,CAAC,EACtDuO,EAAkBlqB,EAAAA,SAAS,IAAM,CACrCioB,EAAM,aAAe,OAAY,YAAc,aAAaA,EAAM,UAAU,GAC5E,aAAaA,EAAM,SAAS,GAC5B,CACE,KAAMK,EAAW,OAASjQ,EAAS,QAAU,GAC7C,CAAC,UAAU4P,EAAM,MAAM,EAAE,EAAG,CAAC,CAACA,EAAM,MACtC,CAAA,CACD,EAEKi4B,EAAiBlgD,EAAAA,SAAS,KAAO,CACrC,MAAOioB,EAAM,KACb,EAAA,EAEIslB,EAAcvtC,EAAAA,SAA0B,KAAO,CACnD,QAASsoB,EAAW,MACpB,UAAWL,EAAM,UACjB,KAAAtb,CACA,EAAA,EAEI0d,EAAwB,CAC5BrJ,EACAsJ,EAAoC,CAAA,IAEpC,IAAIxpB,GAAmBkgB,EAAM,CAC3B,WAAY,GACZ,OAAQjf,EAAQ,OAAS,KACzB,cAAe,KACf,QAAS,KACT,GAAGuoB,EACH,YAAa3B,EAAW,KAAA,CACzB,EAEGhc,EAAO,CAACoc,EAAU,KAAO,CAC7B,GACGA,IAAY,YAAcd,EAAM,mBAChCc,IAAY,OAASd,EAAM,aAC5B,CACAG,EAAK,gBAAgB,EACrB,MACF,CAEM,MAAAllB,EAAQmnB,EAAsB,OAAQ,CAAC,WAAYtB,IAAY,GAAI,QAAAA,EAAQ,EAUjF,GARIA,IAAY,SACdX,EAAKW,EAAS7lB,CAAK,EAEjB6lB,IAAY,OACdX,EAAKW,EAAS7lB,CAAK,EAErBklB,EAAK,OAAQllB,CAAK,EAEdA,EAAM,iBAAkB,CAC1BklB,EAAK,gBAAgB,EACrB,MACF,CAEAE,EAAW,MAAQ,EAAA,EAGfI,EAAO,IAAM,CACjB,MAAMxlB,EAAQmnB,EAAsB,OAAQ,CAAC,WAAY,GAAK,EAE9D,GADAjC,EAAK,OAAQllB,CAAK,EACdA,EAAM,iBAAkB,CAC1BolB,EAAW,MAAQ,GACnBF,EAAK,gBAAgB,EACrB,MACF,CACAE,EAAW,MAAQ,EAAA,EAGfiyB,EAAQ,IAAM,CAClB9/B,EAAAA,SAAS,IAAM,CACTwN,EAAM,UAAY,KACpBjE,EAAQ,MAAQ,GAClB,CACD,CAAA,EAGGm+B,EAAgB,IAAMz5B,IACtB05B,EAAe,IAAM,CACzB/pC,EAAS,MAAQ,GACXkiC,IACDnyB,EAAA,QAASiC,EAAsB,OAAO,CAAC,EACxCpC,EAAM,OAAS,KAAM2jB,EAAkB,MAAQ,GAAA,EAE/CsB,EAAU,IAAM,CACpB6U,EAA4B,MAAQ,GACpC1pC,EAAS,MAAQ,EAAA,EAEbgqC,EAAe,IAAM,CACpBj6B,EAAA,SAAUiC,EAAsB,QAAQ,CAAC,EAC1CpC,EAAM,OAAS,KAAM2jB,EAAkB,MAAQ,GAAA,EAEpC,OAAAtvB,GAAAva,EAAS,YAAa,IAAM,CAChCumB,EAAA,MAAQ3b,EAAK,EAAI+b,EAAK,CAAA,CAClC,EAEK9T,QAAAgtC,EAA6BvnC,GAAa,CAC1C4N,EAAM,aAAe,SACzBK,EAAW,MAAQjO,EAAA,CACpB,EACKzF,QAAAitC,EAA6BxnC,GAAa,CAC1C4N,EAAM,aAAe,QAAa5N,IAAa,KACnD0nC,EAA4B,MAAQ,GAAA,CACrC,EAEYv3B,EAAA,CACX,KAAA7d,EACA,KAAA+b,CAAA,CACD,0vGClRK,MAAAT,EAAQC,EAzBCC,EAyBmB,UAAU,EAEtCC,EAAOC,EAaPi6B,EAAiB,CAAC,IAAK,EAAG,KAAM,EAAG,OAAQ,EAAG,MAAO,GAErD5R,EAAuBvZ,GAAwB,KAAO,CAC1D,QAASlP,EAAM,QACf,WAAYA,EAAM,WAClB,cAAeA,EAAM,cACrB,aAAcA,EAAM,aACpB,WAAYA,EAAM,UAClB,EAAA,EAEImoB,EAAkB/2B,EAAA,MAAM,IAC5B4O,EAAM,UAAY,MAAQ,CAACA,EAAM,QAAU,MAAMA,EAAM,OAAO,GAAK,EAAA,EAG/Ds6B,EAAmBlpC,EAAAA,MAAM,IAAO4O,EAAM,KAAO,GAAO,IAAK,EAEzDu6B,EAAexiD,EAAAA,SAAS,KAAO,CACnC,KAAMioB,EAAM,YACZ,QAASA,EAAM,eACf,MAAOA,EAAM,YACb,EAAA,EAEIw6B,EAAgBziD,EAAAA,SAAS,KAAO,CACpC,GAAGsiD,EACH,OAAQr6B,EAAM,QAAU,EACxB,EAAA,EAEIy6B,EAAiB1iD,EAAAA,SAAS,KAAO,CACrC,oBAAqB,CAACioB,EAAM,QAAU,CAACA,EAAM,MAC7C,iBAAkBA,EAAM,QAAUA,EAAM,KACxC,EAAA,EAEI06B,EAAc3iD,WAAS,IAAM,CAACowC,EAAgB,MAAOM,EAAqB,KAAK,CAAC,EAEhFkS,EAAa5iD,EAAAA,SAAS,KAAO,CACjC,GAAGsiD,EACH,QAASr6B,EAAM,QACf,gBAAiBA,EAAM,SAAW,OAClC,eAAgBA,EAAM,KAAO,QAAQA,EAAM,IAAI,IAAM,MACrD,EAAA,EAEI46B,EAAoB7iD,EAAA,SAAS,IACjCioB,EAAM,SACFq6B,EACA,CACE,IAAK,MACL,KAAM,MACN,UAAW,mCACb,CAAA,iuCCyVAQ,GAAmB,GACnBC,GAAqB,okCAjYrB,MAAA96B,EAAQC,EA/BCC,EA+BmB,aAAa,EAEzCC,EAAOC,EAIPC,EAAaC,EAAAA,SAAmBJ,EAAA,YAAa,EAE7Cw2B,EAAc1jC,GAAY,IAAMgN,EAAM,MAAO,CAAC,UAAW,GAAM,OAAQ,UAAA,CAAW,EAClF+6B,EAAgB/nC,GAAY,IAAMgN,EAAM,QAAS,CAAC,UAAW,GAAM,OAAQ,UAAA,CAAW,EACtFg7B,EAAkBhoC,GAAY,IAAMgN,EAAM,UAAW,CAAC,UAAW,GAAM,OAAQ,UAAA,CAAW,EAC1Fi7B,EAAmBjoC,GAAYqN,EAAY,CAAC,UAAW,GAAM,OAAQ,WAAW,EAEhF66B,EAAmB9pC,QAAM,IAAM,KAAK,IAAI2pC,EAAc,OAASF,GAAkB,CAAC,CAAC,EACnFM,EAAqB/pC,QAAM,IAAM,KAAK,IAAI4pC,EAAgB,OAASF,GAAoB,CAAC,CAAC,EAEzFM,EAAgBhqC,QAAM,IAAM,KAAK,KAAK+pC,EAAmB,MAAQD,EAAiB,KAAK,CAAC,EACxFG,EAAejqC,EAAAA,MAAM,IAAM4O,EAAM,QAAU,MAAM,EAEjDs7B,EAAelqC,QAAM,IAAO4O,EAAM,QAAU,OAAS,QAAUA,EAAM,KAAM,EAE3EljB,EAAYjF,GAAayjD,CAAY,EAErCC,EAAgBC,GAAuBA,IAAeP,EAAiB,MACvExjB,EAAegkB,GAAiBz7B,EAAM,SAAW,KAAOu7B,EAAaE,CAAG,EAAI,IAAM,KAElFC,EAAiBD,GACrBz7B,EAAM,UACNu7B,EAAaE,CAAG,GAChBR,EAAiB,MAAQ,GAEzBQ,EAAM,GACNA,EAAML,EAAc,MAEhBO,EAAgB5jD,EAAA,SAAS,IAAM2jD,EAAc,CAAC,CAAC,EAC/CE,EAAe7jD,EAAAA,SAAS,IAAM2jD,EAAcT,EAAiB,MAAQ,CAAC,CAAC,EACvEY,EAAe9jD,EAAAA,SAAS,IAAM2jD,EAAcN,EAAc,KAAK,CAAC,EAChEU,EAAe/jD,EAAAA,SAAS,IAAM2jD,EAAcT,EAAiB,MAAQ,CAAC,CAAC,EAEvEc,EAAqB,CAAC,CAC1B,KAAAC,EACA,SAAAC,EACA,IAAAC,EACA,SAAAC,EACA,UAAAC,EACA,SAAAxkB,EACA,MAAA18B,GACA,SAAAsR,EACA,SAAA4D,EACA,KAAAisC,GACA,OAAAz7B,EAAA,KAaK,CACL,GAAI,CACF,MAAS,CACP,YACA,CACE,OAAUxQ,EACV,SAAY8rC,EACZ,YAAab,EAAa,MAC1B,SAAUA,EAAa,OAAS,CAACa,CACnC,EACAD,CACF,EACA,KAAAI,GACA,cAAez7B,EACjB,EACA,OAAQ,CACN,GAAMs7B,EAAM,OAAS,SACrB,MAAS,CAAC,YAAa,cAAe,CAAC,cAAe,CAACA,GAAOb,EAAa,MAAM,EACjF,aAAcngD,GACd,gBAAiB8kB,EAAM,cAAgB,OACvC,gBAAiBk8B,EAAM,GAAO,OAC9B,gBAAiB1vC,EACjB,eAAgBA,EAAW4uC,EAAc,MAAQ,OACjD,KAAQ,WACR,KAAQc,EAAM,OAAY,SAC1B,SAAYA,EAAM,OAAYtkB,CAChC,EACA,KAAM,CACJ,KAAMukB,EACN,OAAQ/rC,EACR,MAAOgsC,GAAaJ,EACpB,KAAAA,EACA,SAAUE,EACV,MAAOF,EAAO,EACd,QAASI,EAAY,OAAYJ,CACnC,EACA,aAAeviD,IAA4B6iD,EAAU7iD,GAAGuiD,CAAI,CAAA,GAGxDO,EAAiB,CAAC,CACtB,KAAAP,EACA,SAAAC,EACA,IAAAC,EACA,SAAAC,EACA,UAAAC,EACA,MAAAlhD,CACF,IAOM6gD,EAAmB,CAAC,KAAAC,EAAM,SAAAC,EAAU,IAAAC,EAAK,SAAAC,EAAU,UAAAC,EAAW,MAAAlhD,EAAO,SAAU,IAAK,CAAA,EAEpFshD,EAAsBR,GAC1BD,EAAmB,CACjB,KAAAC,EACA,IAAKh8B,EAAM,SACX,SAAUA,EAAM,UAChB,SAAU,OACV,MAAOA,EAAM,UAAY,GAAGA,EAAM,SAAS,IAAIg8B,CAAI,GAAK,OACxD,SAAUvkB,EAAYukB,CAAI,GAAK,OAC/B,SAAUA,EACV,SAAUT,EAAaS,CAAI,CAAA,CAC5B,EAEGS,EAAmB1kD,EAAA,SAAS,IAChCwkD,EAAe,CACb,KAAM,EACN,IAAKZ,EAAc,MACnB,SAAU37B,EAAM,WAChB,SAAU,aACV,UAAWA,EAAM,UACjB,MAAOA,EAAM,cAAA,CACd,CAAA,EAEG08B,EAAkB3kD,EAAA,SAAS,IAC/BwkD,EAAe,CACb,KAAM,KAAK,IAAItB,EAAiB,MAAQ,EAAG,CAAC,EAC5C,IAAKW,EAAa,MAClB,SAAU57B,EAAM,UAChB,SAAU,YACV,UAAWA,EAAM,SACjB,MAAOA,EAAM,aAAA,CACd,CAAA,EAEG28B,EAAkB5kD,EAAA,SAAS,IAC/BwkD,EAAe,CACb,KAAM,KAAK,IAAItB,EAAiB,MAAQ,EAAGG,EAAc,KAAK,EAC9D,IAAKU,EAAa,MAClB,SAAU97B,EAAM,UAChB,SAAU,YACV,UAAWA,EAAM,SACjB,MAAOA,EAAM,aAAA,CACd,CAAA,EAEG48B,EAAkB7kD,EAAA,SAAS,IAC/BwkD,EAAe,CACb,KAAMnB,EAAc,MACpB,IAAKS,EAAa,MAClB,SAAU77B,EAAM,UAChB,SAAU,YACV,UAAWA,EAAM,SACjB,MAAOA,EAAM,aAAA,CACd,CAAA,EAGG68B,EAAgB9kD,EAAAA,SAAS,KAAO,CACpC,GAAI,CACF,MAAO,CACL,YACA,WACA,cACA,oBACAsjD,EAAa,MAAQ,YAAc,GACnCr7B,EAAM,aACR,EACA,KAAM,WACR,EACA,KAAM,CACJ,MAAO,CAAC,WAAW,CACrB,CACA,EAAA,EAEIuuB,EAAyBx2C,EAAAA,SAAS,IAAM,CAC5C+E,EAAU,MACV,CACE,CAAC,cAAckjB,EAAM,IAAI,EAAE,EAAGA,EAAM,OAAS,OAC7C,qBAAsBA,EAAM,KAC9B,CAAA,CACD,EAEK88B,EAAa/kD,EAAAA,SAAS,KAAO,CACjC,SAAUmjD,EAAiB,MAC3B,UAAWF,EAAgB,MAC3B,cAAeI,EAAc,KAC7B,EAAA,EAEIkB,EAAY,CAACrhD,EAA6BugD,IAAuB,CACrE,GAAIA,IAAeP,EAAiB,MAAO,OAErC,MAAA8B,EAAa,IAAIxkD,GAAQ,aAAc,CAC3C,WAAY,GACZ,OAAQ0C,EAAM,MAAA,CACf,EACIklB,EAAA,aAAc48B,EAAYvB,CAAU,EAErC,CAAAuB,EAAW,mBAEf18B,EAAW,MAAQm7B,EAAA,EAWf7uC,QAAAsuC,EAAmB7oC,GAAa,CAKpC,MAAM4qC,GAJsB,CAAChlD,EAAeojD,IAA0B,CACpE,MAAMY,EAAOhkD,GAAS,EACtB,OAAOgkD,EAAOZ,EAAgBA,EAAgBY,EAAO,EAAI,EAAIA,CAAA,GAEnB5pC,EAAUgpC,EAAc,KAAK,EACrE4B,IAAoB38B,EAAW,QACnCA,EAAW,MAAQ28B,EAAA,CACpB,EAEKrwC,EAAAA,MAAAmwC,EAAY,CAACvjC,EAAUnH,IAAa,EACpCA,EAAS,WAAamH,EAAS,UAAYnH,EAAS,YAAcmH,EAAS,WAI7EnH,EAAS,gBAAkBmH,EAAS,eACpC0hC,EAAiB,MAAQ7oC,EAAS,iBAIlCiO,EAAW,MAAQ,EACrB,CACD,EAED,MAAM48B,EAAQllD,EAAA,SACZ,IACEoI,EAAS,MAAM,IAAK6I,GAAM,CACxB,OAAQA,EAAG,CACT,IAAK,GACH,MAAO,CAAC,GAAIA,EAAG,GAAGyzC,EAAiB,KAAK,EAC1C,IAAK,GACH,MAAO,CAAC,GAAIzzC,EAAG,GAAG0zC,EAAgB,KAAK,EACzC,IAAK,GACH,MAAO,CAAC,GAAI1zC,EAAG,GAAG2zC,EAAgB,KAAK,EACzC,IAAK,GACH,MAAO,CAAC,GAAI3zC,EAAG,GAAG4zC,EAAgB,KAAK,EACzC,IAAK,GACL,IAAK,GACH,MAAO,CAAC,GAAI5zC,EAAG,GAAG6zC,EAAc,KAAK,EACvC,QACE,MAAO,CAAC,GAAI7zC,EAAG,GAAGwzC,EAAmBxzC,CAAC,CAAC,CAC3C,CAAA,CACD,CAAA,EAGC7I,EAAWpI,EAAAA,SAAS,IAAM,CAK9B,MAAMklD,EAAQ7B,EAAc,MACtB,CAAC,MAAApjD,CAAS,EAAAijD,EACViC,EAAQxG,EAAY,MACpByG,EAAYn9B,EAAM,YAAc,EAAI,EACpCo9B,EAAWp9B,EAAM,WAAa,EAAI,EAClCq9B,EAAer9B,EAAM,cAAgBk9B,GAAS,EAC9CI,GAAkBt9B,EAAM,oBAAsB,CAACA,EAAM,YAAc,EAAI,EACvEu9B,EAAiBv9B,EAAM,oBAAsB,CAACA,EAAM,WAAa,EAAI,EACrEw9B,EAAkBF,GAAkB,EAAI,EACxCG,GAAiBF,EAAiB,EAAI,EAMxCN,GAAAA,EAAQC,EAAQC,EAAYC,EACvB,MAAA,CACL,CAACD,GAAa,CAACG,GAAkB,GAAe,KAChD,GACA,GAAG,MAAM,KAAK,CAAC,OAAQL,GAAQ,CAACpsC,GAAGtC,KAAUA,GAAQ,CAAC,EACtD,GACA,CAAC6uC,GAAY,CAACG,EAAiB,GAAc,IAC7C,EAAA,OAAQl+C,IAAMA,KAAM,IAAI,EAMtB,MAAA42C,GAAU,MAAM,KAAK,CAAC,OAAQiH,EAAQ,GAAKI,GAAkBC,EAAA,CAAgB,EAC9ED,GASHrH,GAAQ,CAAC,EAAI,GARRkH,GAIHlH,GAAQ,CAAC,EAAI,GACbA,GAAQ,CAAC,EAAI,IAJbA,GAAQ,CAAC,EAAI,GACbA,GAAQ,CAAC,EAAI,IASZsH,EASKtH,GAAAA,GAAQ,OAAS,CAAC,EAAI,GARzBmH,GAIKnH,GAAAA,GAAQ,OAAS,CAAC,EAAI,GACtBA,GAAAA,GAAQ,OAAS,CAAC,EAAIgH,IAJtBhH,GAAAA,GAAQ,OAAS,CAAC,EAAI,GACtBA,GAAAA,GAAQ,OAAS,CAAC,EAAI,IAYlC,MAAMyH,GAAY,KAAK,MAAMR,EAAQ,CAAC,EAClC,GAAAllD,GAAS0lD,GAAYP,EAAW,CAClC,QAAS5uC,GAAQ,EAAGA,IAAS2uC,EAAO3uC,KAClC0nC,GAAQ1nC,GAAQ,EAAI+uC,EAAe,EAAI/uC,GAAQ4uC,EAG5CE,IACHpH,GAAQA,GAAQ,QAAU,EAAIwH,GAAe,EAAI,GAErD,CAKI,GAAAzlD,EAAQilD,EAAQS,GAAYN,EAAU,CAClC,MAAArhD,GAAQkhD,GAASC,EAAQ,GAAKE,EACpC,QAAS7uC,GAAQ,EAAGA,GAAQ2uC,EAAO3uC,KACjC0nC,GAAQ1nC,GAAQ,EAAI+uC,EAAe,EAAIvhD,GAAQwS,GAG5C8uC,IACKpH,GAAA,EAAIuH,CAAe,EAAI,GAEnC,CAGI,GAAA,CAACvH,GAAQ,CAAC,EAAG,CAEf,MAAMl6C,GAAQ/D,EAAQ,KAAK,MAAMklD,EAAQ,CAAC,EAC1C,QAAS3uC,GAAQ,EAAGA,GAAQ2uC,EAAO3uC,KACjC0nC,GAAQ1nC,GAAQ,EAAI+uC,EAAe,EAAIvhD,GAAQwS,GAG5C8uC,IACKpH,GAAA,EAAIuH,CAAe,EAAI,GAC/BvH,GAAQA,GAAQ,QAAU,EAAIwH,GAAe,EAAI,GAErD,CAYA,OAAOxH,GAAQ,OAAQ52C,IAAMA,KAAM,IAAI,CAAA,CACxC,ouCC1bK,MAAA2gB,EAAQC,EATCC,EASmB,cAAc,EAE1Cy9B,EAAcvsC,EAAA,MAAM,IACxB4O,EAAM,QAAU,OACZ,OACA,OAAOA,EAAM,OAAU,SACrBA,EAAM,MAAM,WACZA,EAAM,MAAM,QAAQ,IAAK,EAAE,CAAA,EAG7B49B,EAAaxsC,EAAA,MAAM,IACvB4O,EAAM,OAAS,OACX,OACA,OAAOA,EAAM,MAAS,SACpBA,EAAM,KAAK,WACXA,EAAM,IAAA,EAGRiC,EAAkBlqB,EAAAA,SAAS,KAAO,CACtC,CAAC,OAAO6lD,EAAW,KAAK,EAAE,EAAGA,EAAW,QAAU,QAAaD,EAAY,QAAU,OACrF,CAAC,MAAM39B,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,KAC3C,CAAC,eAAeA,EAAM,IAAI,EAAE,EAAGA,EAAM,OAAS,IAC9C,EAAA,EAEIsuB,EAAiBv2C,EAAAA,SAAS,KAAO,CACrC,CAAC,eAAeioB,EAAM,SAAS,EAAE,EAAGA,EAAM,YAAc,MACxD,EAAA,EAEImpB,EAAgBpxC,EAAAA,SAAwB,KAAO,CACnD,MAAO4lD,EAAY,QAAU,OAAY,OAAY,GAAGA,EAAY,KAAK,GACzE,EAAA,ygBCnCI,MAAA39B,EAAQC,EAPCC,EAOmB,oBAAoB,EAEhD+B,EAAkBlqB,EAAAA,SAAS,KAAO,CACtC,CAAC,OAAOioB,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,IAC5C,EAAA,84BC+CI,MAAAA,EAAQC,EArBCC,EAqBmB,kBAAkB,EAa9C29B,EAAe9lD,EAAAA,SAAS,KAAO,CACnC,UAAWioB,EAAM,UACjB,KAAMA,EAAM,KACZ,QAASA,EAAM,OACf,EAAA,EAEI89B,EAAkB1sC,EAAAA,MAAM,IAAQ4O,EAAM,SAAgC+9B,GAArBC,EAAkC,miDC9EnFC,GAA4B,0tBAuB5B,MAAAj+B,EAAQC,EArBCC,EAqBmB,cAAc,EAO1C+B,EAAkBlqB,EAAAA,SAAS,IAAM,CACrCioB,EAAM,WACN,QACA,UACA,CACE,iBAAkBA,EAAM,SACxB,mBAAoBA,EAAM,WAC1B,CAAC,UAAUA,EAAM,aAAa,EAAE,EAAGA,EAAM,gBAAkB,KAC3D,cAAeA,EAAM,WACrB,aAAcA,EAAM,KACpB,cAAeA,EAAM,MACrB,kBAAmBA,EAAM,UAAY,GACrC,CAAC,mBAAmBA,EAAM,OAAO,EAAE,EAAG,OAAOA,EAAM,SAAY,SAC/D,gBAAiBA,EAAM,QACvB,WAAYA,EAAM,MAClB,CAAC,SAASA,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,KAC9C,wBAAyBA,EAAM,cACjC,CAAA,CACD,EACKk+B,EAAqBnmD,EAAAA,SAAS,KAAO,CACzC,GAAIioB,EAAM,GACV,MAAOiC,EAAgB,MACvB,GAAGjC,EAAM,UACT,EAAA,EAEIm+B,EAAiBnvB,GACrBj3B,EAAA,SACE,KAAOioB,EAAM,eAAiB,GAAOi+B,GAA4Bj+B,EAAM,eAAiB,GAC1F,CAAA,EAEIo+B,EAAgBrmD,EAAAA,SAAS,IAAMioB,EAAM,eAAiB,EAAK,EAE3Dq+B,EAAetmD,EAAS,SAAA,IAAMioB,EAAM,aAAe,IAASo+B,EAAc,KAAK,EAC/EE,EAAmBvmD,EAAA,SAAiC,IACxDqmD,EAAc,MAAQ,CAAC,UAAWD,EAAe,KAAS,EAAA,MAAA,EAEtDI,EAAoBxmD,EAAAA,SAAS,KAAO,CACxC,mBAAoBioB,EAAM,aAAe,GACzC,CAAC,oBAAoBA,EAAM,UAAU,EAAE,EAAG,OAAOA,EAAM,YAAe,SACtE,wBAAyBo+B,EAAc,KACvC,EAAA,y8BCZI,MAAAp+B,EAAQC,EApBCC,EAoBmB,mBAAmB,EAW/Cs+B,EAAkBxrC,GAAY,IAAMgN,EAAM,OAAO,EACjDy+B,EAAezrC,GAAY,IAAMgN,EAAM,IAAI,EAC3C0+B,EAAwBttC,EAAAA,MAAM,IAAM4O,EAAM,eAAiB,GAAG,EAC9D2+B,EAAwBvtC,EAAAA,MAAM,IAAM4O,EAAM,eAAiB,GAAG,EAC9D4+B,EAAsB5rC,GAAY0rC,CAAqB,EACvDG,EAAsB7rC,GAAY2rC,CAAqB,EAEvDG,EAAgB1tC,EAAAA,MAAM,IAAMotC,EAAgB,OAAS,CAAC,EACtDO,EAAa3tC,EAAAA,MAAM,IAAMqtC,EAAa,OAAS,CAAC,EAEhDO,EAA8B5tC,EAAA,MAAM,IACxC4O,EAAM,gBAAkB,OAAY8+B,EAAc,MAAQF,EAAoB,KAAA,EAE1EK,EAA8B7tC,EAAA,MAAM,IACxC4O,EAAM,gBAAkB,OAAY8+B,EAAc,MAAQD,EAAoB,KAAA,qsDCxF1E,MAAA7+B,EAAQC,EAHCC,EAGmB,qBAAqB,mfCqBjD,MAAAF,EAAQC,EAhBCC,EAgBmB,MAAM,EAElCpjB,EAAYjF,GAAa,IAAMmoB,EAAM,MAAM,EAE3Ck/B,EAAiBnnD,EAAA,SAAS,IAC9B4zB,GACE,CACE,KAAM3L,EAAM,KACZ,OAAQA,EAAM,OACd,OAAQA,EAAM,OACd,OAAQA,EAAM,OACd,OAAQA,EAAM,OACd,QAASA,EAAM,OACjB,EACA,CAAC,OAAQ,SAAU,SAAU,SAAU,SAAU,SAAS,EAC1D,OACA,UACF,CAAA,EAGIiC,EAAkBlqB,EAAAA,SAAS,IAAM,CACrCmnD,EAAe,MACf,CACE,CAAC,MAAMl/B,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,OAC3C,CAAC,MAAMA,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,OAC3C,MAAOA,EAAM,UACb,CAAC,eAAeA,EAAM,MAAM,EAAE,EAAGA,EAAM,SAAW,OAClD,CAACljB,EAAU,KAAK,EAAGkjB,EAAM,SAAW,OACpC,CAAC,iBAAiBA,EAAM,YAAY,EAAE,EAAGA,EAAM,eAAiB,MAClE,CAAA,CACD,iNCtDYm/B,GAAennD,GAC1B,OAAOA,GAAU,UAAYA,IAAU,KA4D5BonD,GAAmBpnD,GAC9B,OAAOA,GAAU,UAAYA,IAAU,MAAQ,QAASA,gFCzDpD,MAAAgoB,EAAQC,EAHCC,EAGmB,QAAQ,EAOpC+B,EAAkBlqB,EAAAA,SAAS,KAAO,CACtC,CAAC,SAASioB,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,IAC9C,EAAA,oYCII,MAAAA,EAAQC,EAPCC,EAOmB,KAAK,EAOjC+B,EAAkBlqB,EAAAA,SAAS,KAAO,CACtC,CAAC,SAASioB,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,KAC9C,wBAAyBA,EAAM,aAC/B,wBAAyBA,EAAM,cAAgBA,EAAM,UAAY,IACjE,EAAA,EAEImH,EAAQ/V,EAAAA,MAAM,IAAO4O,EAAM,QAAU,UAAYA,EAAM,QAAU,UAAY,KAAM,qbC1BnF,MAAAA,EAAQC,EAHCC,EAGmB,QAAQ,EAOpC+B,EAAkBlqB,EAAAA,SAAS,KAAO,CACtC,CAAC,SAASioB,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,IAC9C,EAAA,oYCII,MAAAA,EAAQC,EAPCC,EAOmB,KAAK,EAOjC+B,EAAkBlqB,EAAAA,SAAS,KAAO,CACtC,CAAC,SAASioB,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,KAC9C,wBAAyBA,EAAM,aAC/B,wBAAyBA,EAAM,cAAgBA,EAAM,UAAY,IACjE,EAAA,EAEImH,EAAQ/V,EAAAA,MAAM,IAAO4O,EAAM,QAAU,UAAYA,EAAM,QAAU,UAAY,KAAM,8bC1BnF,MAAAA,EAAQC,EAHCC,EAGmB,QAAQ,EAOpC+B,EAAkBlqB,EAAAA,SAAS,KAAO,CACtC,CAAC,SAASioB,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,IAC9C,EAAA,kNCTI,MAAAA,EAAQC,EAHCC,EAGmB,KAAK,EAOjC+B,EAAkBlqB,EAAAA,SAAS,KAAO,CACtC,CAAC,SAASioB,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,IAC9C,EAAA,o8DCgQI,MAAAA,EAAQC,EA/CCC,EA+CmB,YAAY,EAExCC,EAAOC,EAQPi/B,EAAuB17B,GAAmD,CAC9EA,EACAA,EAAK,YAAA,EAED27B,EAAavzC,EAAA,IACjB,IAAI,QACFiU,EAAM,MAAM,OACV,CAACxkB,EAAKrC,KACAgmD,GAAYhmD,CAAE,GACZqC,EAAA,KAAK6jD,EAAoBlmD,CAAE,CAAC,EAE3BqC,GAET,CAAC,CACH,CACF,CAAA,EAEFmR,EAAA,MACE,IAAMqT,EAAM,MACXzJ,GAAU,CACHA,EAAA,QAASoN,GAAS,CAClB,GAAA,CAACw7B,GAAYx7B,CAAI,EAAG,OAClB,MAAA47B,EAAcF,EAAoB17B,CAAI,EAC5C27B,EAAW,MAAM,IAAIC,EAAY,CAAC,EAAGA,EAAY,CAAC,CAAC,CAAA,CACpD,CACH,EACA,CAAC,KAAM,EAAI,CAAA,EAGP,MAAAC,EAAuBznD,EAAAA,SAAS,IAAM,CAC1CioB,EAAM,WACN,CACE,CAAC,SAASA,EAAM,KAAK,EAAE,EAAGA,EAAM,QAAU,MAC5C,CAAA,CACD,EAEKy/B,EAAiB1nD,EAAAA,SAA8C,IAAM,CACzE,GAAI,CAACioB,EAAM,OAAO,QAAUA,EAAM,MAAM,OAAQ,CACxC,KAAA,CAAC0/B,CAAS,EAAI1/B,EAAM,MAC1B,OAAIm/B,GAAYO,CAAS,GAAK,MAAM,QAAQA,CAAS,EAC5C,OAAO,KAAKA,CAAS,EAAE,IAAKvoC,GAAM,CACjC,MAAAjc,EAAQ+pB,GAAU9N,CAAC,EAClB,MAAA,CACL,IAAKA,EACL,MAAAjc,EACA,OAAQ8kB,EAAM,UAAY,GAAO,CAAC,aAAc9kB,CAAS,EAAA,MAAA,CAC3D,CACD,EAII,CAAC,CAAC,IAAK,GAAI,UAAW,EAAK,CAAA,CACpC,CAEA,OAAO8kB,EAAM,OAAO,IAAKlX,GAAM,CACzB,GAAAs2C,GAAat2C,CAAC,EACT,MAAA,CACL,GAAIA,EACJ,OACEkX,EAAM,UAAY,GACd,CAAC,aAAciF,GAAUnc,EAAE,GAAa,EAAG,GAAGA,EAAE,QAChDA,EAAE,MAAA,EAGN,MAAA5N,EAAQ+pB,GAAUnc,CAAW,EAC5B,MAAA,CACL,IAAKA,EACL,MAAA5N,EACA,OAAQ8kB,EAAM,UAAY,GAAO,CAAC,aAAc9kB,CAAS,EAAA,MAAA,CAC3D,CACD,CAAA,CACF,EACKykD,EAAsBvuC,EAAAA,MAAM,IAAMquC,EAAe,MAAM,MAAM,EAC7DG,EAAsB7nD,EAAAA,SAAS,IAI/B,EAAA0nD,EAAe,MAAM,OAAS,GAAKA,EAAe,MAAM,MAAOtmD,GAAOA,EAAG,YAAc,EAAI,EAGhG,EAEK0mD,EAAiB,CAACl8B,EAASC,EAAkB0sB,IAAmB,CAC9D,MAAA5hC,EAAMoV,GAAIH,EAAMC,CAAQ,EACvB,OAAA0sB,GAAQ,OAAOA,GAAS,WAAaA,EAAK5hC,EAAKkV,EAAUD,CAAI,EAAI2sB,CAAA,EAGpEwP,EAAa,CAACn8B,EAAgB+B,EAAsB3M,IAAwB,CAC1E,MAAA6K,EAAW,OAAO8B,EAAM,GAAG,EAC3BhX,EAAMoV,GAAIH,EAAMC,CAAQ,EAC9B,OAAO8B,EAAM,QAAU,OAAOA,EAAM,QAAW,WAC3CA,EAAM,OAAOhX,EAAKkV,EAAUD,EAAM5K,CAAI,EACtC2M,EAAM,MAAA,EAGNq6B,EAAgB,CAACr6B,EAAsBzqB,EAA6B+kD,EAAW,KAAU,CAC7F7/B,EAAK,eAAgBuF,EAAM,IAAeA,EAAOzqB,EAAO+kD,CAAQ,CAAA,EAG5DC,EAAoBC,GAAU,CAC9B,GAAAf,GAAYe,CAAE,EAAG,CACnB,MAAMC,EAAYb,EAAW,MAAM,IAAIY,CAAE,EACzCZ,EAAW,MAAM,IAAIY,EAAI,CAACC,CAAS,EACnCD,EAAG,aAAe,CAACC,CACrB,CAAA,EAGIC,EAAyB16B,GAAsB,CACnDA,EAAM,MACNA,EAAM,QACN,CACE,wBAAyBA,EAAM,YACjC,EACA1F,EAAM,iBACF,OAAOA,EAAM,kBAAqB,WAChCA,EAAM,iBAAiB0F,CAAK,EAC5B1F,EAAM,iBACR,IAAA,EAGAqgC,EAAqB,CAAC36B,EAA6Bw6B,IAAU,SACjE,MAAMxxC,EAAMoV,GAAIo8B,EAAI,OAAOx6B,EAAM,GAAG,CAAC,EAC9B,MAAA,CACLA,EAAM,MACN,OAAOA,EAAM,SAAY,WAAaA,EAAM,QAAQhX,EAAK,OAAOgX,EAAM,GAAG,EAAGw6B,CAAE,EAAIx6B,EAAM,QACvFy5B,GAAYe,CAAE,IAAIlxC,EAAAkxC,EAAG,gBAAH,MAAAlxC,EAAmB0W,EAAM,KACxC,UAAUzW,EAAAixC,EAAiB,gBAAjB,YAAAjxC,EAAiCyW,EAAM,IAAc,GAC/D,KACJ,CACE,wBAAyBA,EAAM,YACjC,CAAA,CACF,EAGI46B,EAAmB,CAAC38B,EAAgB5K,IACxCiH,EAAM,aACF,OAAOA,EAAM,cAAiB,WAC5BA,EAAM,aAAa2D,EAAM5K,CAAI,EAC7BiH,EAAM,aACR,KAEAugC,EAAgB,CAAC58B,EAAgB5K,IACrCiH,EAAM,aACF,OAAOA,EAAM,cAAiB,WAC5BA,EAAM,aAAa2D,EAAM5K,CAAI,EAC7BiH,EAAM,aACR,y6VChNA,MAAAA,EAAQC,EApECC,EAoEmB,QAAQ,EAEpCC,EAAOC,EAaPogC,EAAclgC,EAAAA,SAAuCJ,EAAC,QAE3D,EACKugC,EAAYngC,EAAAA,SAAoBJ,EAAC,MAEtC,EACKwgC,EAAqBpgC,EAAAA,SAAgBJ,EAAC,eAE3C,EAEKygC,EAAqB5oD,EAAAA,SAAS,CAClC,IAAK,IAAU,IAAA,IAAI,CAAC,GAAG2oD,EAAmB,KAAK,CAAC,EAChD,IAAMhyC,GAAQ,CACOgyC,EAAA,MAAQ,CAAC,GAAGhyC,CAAG,CACpC,CAAA,CACD,EAKKkyC,EAA4B,CAChC,IAAMj9B,GAAY,CAChB,MAAM3rB,EAAQ,IAAI,IAAI2oD,EAAmB,KAAK,EAC9C3oD,EAAM,IAAI2rB,CAAI,EACdg9B,EAAmB,MAAQ3oD,EAC3BmoB,EAAK,eAAgBwD,CAAI,CAC3B,EACA,MAAO,IAAM,CACQg9B,EAAA,MAAM,QAASh9B,GAAS,CACzCi9B,EAA0B,OAAOj9B,CAAI,CAAA,CACtC,CACH,EACA,OAASA,GAAY,CACnB,MAAM3rB,EAAQ,IAAI,IAAI2oD,EAAmB,KAAK,EAC9C,GAAI3gC,EAAM,WAAY,CACpB,MAAM6gC,EAAe7gC,EAAM,WAC3B0gC,EAAmB,MAAM,QAAQ,CAACv9C,EAAGzD,IAAM,CACnC,MAAAohD,EAAch9B,GAAI3gB,EAAG09C,CAAI,EACzBE,EAAUj9B,GAAIH,EAAMk9B,CAAI,EAExBC,GAAiBC,GAAWD,IAAgBC,GAChD/oD,EAAM,OAAO0oD,EAAmB,MAAMhhD,CAAC,CAAC,CAC1C,CACD,CAAA,MAED1H,EAAM,OAAO2rB,CAAI,EAEnBg9B,EAAmB,MAAQ3oD,EAC3BmoB,EAAK,iBAAkBwD,CAAI,CAC7B,EACA,IAAMpN,GAAe,CACAoqC,EAAA,MAAQ,IAAI,IAAIpqC,CAAK,EACrBoqC,EAAA,MAAM,QAASh9B,GAAS,CACzCxD,EAAK,iBAAkBwD,CAAI,CAAA,CAC5B,CACH,EACA,IAAMA,GAAY,CAChB,GAAI,CAAC3D,EAAM,WAAmB,OAAA2gC,EAAmB,MAAM,IAAIh9B,CAAI,EAG/D,MAAMk9B,EAAe7gC,EAAM,WAChB,UAAAghC,KAAYL,EAAmB,MAAO,CACzC,MAAAG,EAAch9B,GAAIk9B,EAAUH,CAAI,EAChCE,EAAUj9B,GAAIH,EAAMk9B,CAAI,EAE9B,GAAMC,GAAiBC,GAAWD,IAAgBC,EAAgB,MAAA,EACpE,CACO,MAAA,EACT,CAAA,EAMIE,EAA0Bl1C,MAAI,CAAA,CAAE,EAEhCgvC,EAAgB/nC,GAAY,IAAMgN,EAAM,QAAS,CAAC,OAAQ,WAAW,EACrEkhC,EAAoBluC,GAAY,IAAMgN,EAAM,YAAa,CAAC,OAAQ,WAAW,EAE7EmhC,EAAoB/vC,EAAAA,MAAM,IAAM,CAAC,CAAC4O,EAAM,MAAM,EAC9CohC,EAAehwC,EAAAA,MAAM,IAAM4O,EAAM,WAAa,MAAS,EACvDqhC,EAAcjwC,EAAAA,MAAM,IAAMuvC,EAAmB,MAAM,KAAO,CAAC,EAE3DW,EAAavpD,EAAA,SACjB,IACEyoD,EAAY,QAAU,QACtBxgC,EAAM,OAAO,KACV0F,GAAU,OAAOA,GAAU,UAAYA,IAAU,MAAQA,EAAM,WAAa,EAC/E,CAAA,EAGE+5B,EAAiB1nD,EAAA,SAA0B,IAC/CioB,EAAM,OAAO,IAAK7mB,GAAO,OACnB,GAAA,CAACimD,GAAajmD,CAAE,EAAG,CACf,MAAA+B,EAAQ+pB,GAAU9rB,CAAY,EAC7B,MAAA,CACL,IAAKA,EACL,MAAA+B,EACA,OAAQ8kB,EAAM,UAAY,GAAO,CAAC,aAAc9kB,CAAS,EAAA,MAAA,CAE7D,CAEM,MAAAlD,GAAQgX,EAAAwxC,EAAY,QAAZ,YAAAxxC,EAAmB,KAAMuyC,GAAOpoD,EAAG,MAAQooD,EAAG,KACtDC,EACJF,EAAW,QAAU,GACjB,OACAtpD,IAAU,OACR,OACAA,EAAM,QAAU,OACd,aACAA,EAAM,QAAU,MACd,YACA,OAEL,MAAA,CACL,GAAImB,EACJ,OAAQ,CACN,YAAaqoD,EACb,GAAGroD,EAAG,MACR,CAAA,CACF,CACD,CAAA,EAGGsoD,EAAe1pD,EAAAA,SAAS,KAAO,CACnC,eAAgB0oD,EAAU,MAC1B,qBAAsBzgC,EAAM,WAC5B,mBAAoBA,EAAM,YAAcqhC,EAAY,KACpD,EAAA,EAEIK,EAAoB3pD,EAAAA,SAAS,IAAM,CACvCioB,EAAM,aACF,OAAOA,EAAM,cAAiB,WAC5BA,EAAM,aAAa,KAAM,YAAY,EACrCA,EAAM,aACR,IAAA,CACL,EACKogC,EAAyB16B,GAAsB,CACnD,CACE,0BAA2B47B,EAAW,OAAS57B,EAAM,QACvD,CAAA,EAMI66B,EAAgB,CAAC58B,EAAgB5K,IAA8C,CACnF,CACE,CAAC,kBAAkBiH,EAAM,gBAAgB,EAAE,EACzCA,EAAM,YAAc,CAAC,CAAC2D,GAAQi9B,EAA0B,IAAIj9B,CAAI,CACpE,EACA3D,EAAM,aACF,OAAOA,EAAM,cAAiB,WAC5BA,EAAM,aAAa2D,EAAM5K,CAAI,EAC7BiH,EAAM,aACR,IAAA,EAGA2hC,EAAgB5pD,EAAAA,SAAc,IAAM,CAClC,MAAA6pD,EAAarrC,GAAe,OAE1B,MAAAsrC,GAAc7yC,EAAAwxC,EAAY,QAAZ,YAAAxxC,EAAmB,OAAQ7V,GAAO,CAAC,CAACA,EAAG,OAEvD,MAAA,CAAC0oD,GAAeA,EAAY,SAAW,EAAUtrC,EAG9C,CAAC,GAAGA,CAAK,EAAE,KAAK,CAACnT,EAAGC,IAAM,CAC/B,QAAS3D,EAAI,EAAGA,GAAKmiD,EAAY,QAAU,GAAIniD,IAAK,CAC5C,MAAAoiD,EAAaD,EAAYniD,CAAC,EAC1BqiD,EAAWC,GAAkB,CAC7B,GAAA,CAAC7C,GAAY6C,CAAE,EAAG,OAAO,OAAOA,CAAE,EAEtC,MAAMC,EAAYxC,EAAe,MAAM,KAAMtmD,GACvCimD,GAAajmD,CAAE,EAAUA,EAAG,MAAQ2oD,EAAW,IAE5C,EACR,EACKpzC,EAAMoV,GAAIk+B,EAAIF,EAAW,GAAsB,EACrD,GAAI1C,GAAa6C,CAAS,GAAOA,EAAU,gBAAiB,CAC1D,MAAMp+B,EACJ,OAAOo+B,EAAU,iBAAoB,WACjCA,EAAU,gBACVA,EAAU,UAChB,GAAIp+B,EACF,OAAOH,GAAWs+B,EAAI,OAAOC,EAAU,GAAG,EAAGp+B,CAAS,CAE1D,CACO,OAAA,OAAOnV,GAAQ,UAAYA,IAAQ,KACtC,KAAK,UAAUA,CAAG,GAClBA,GAAA,YAAAA,EAAK,aAAc,EAAA,EAGnBwzC,EAASH,EAAQ3+C,CAAC,EAClB++C,EAASJ,EAAQ1+C,CAAC,EAClB++C,EAAaN,EAAW,SAC1BA,EAAW,SAASI,EAAQC,CAAM,EAClCD,EAAO,cAAcC,EAAQ,OAAW,CAAC,QAAS,GAAK,EAE3D,GAAIC,IAAe,EACjB,OAAON,EAAW,QAAU,MAAQM,EAAa,CAACA,CAEtD,CACO,MAAA,EAAA,CACR,CAAA,EAGGC,EAAe9rC,GACnBA,EAAM,OAAQoN,GACZw7B,GAAYx7B,CAAI,EACZ,OAAO,QAAQA,CAAI,EAAE,KAAK,CAAC,CAAC3P,EAAKtF,CAAG,IAAM,WACxC,OACEA,GAAQ,MAERsF,EAAI,CAAC,IAAM,KACV,GAAChF,EAAAgR,EAAM,aAAN,MAAAhR,EAAkB,SAASgF,OAAU/E,EAAA+Q,EAAM,aAAN,MAAA/Q,EAAkB,QAElD,IACO,IAAc,CAC5B,MAAMqzC,EAAc7C,EAAe,MAAM,KAAMtmD,GACzCimD,GAAajmD,CAAE,EAAUA,EAAG,MAAQ6a,EAEjC,EACR,EACD,GAAIorC,GAAakD,CAAW,GAAOA,EAAY,kBAAmB,CAChE,MAAMz+B,EACJ,OAAOy+B,EAAY,mBAAsB,WACrCA,EAAY,kBACZA,EAAY,UAClB,GAAIz+B,EACF,OAAOA,EAAUnV,EAAK,OAAO4zC,EAAY,GAAG,EAAG3+B,CAAI,CAEvD,CACO,OAAA,OAAOjV,GAAQ,SAAW,KAAK,UAAU,OAAO,OAAOA,CAAG,CAAC,EAAIA,EAAI,SAAS,CAAA,KAGpE,cAAc,WAAS0c,EAAApL,EAAM,SAAN,YAAAoL,EAAc,gBAAiB,EAAE,CAC1E,CAAA,EACD,EAAA,EAGR,IAAIm3B,EAAcnB,EAAa,MAAQH,EAAc,MAASjhC,EAAM,MACtD,OAAAuiC,EAAAA,EAAY,IAAK5+B,GAAS,CACtC,GACE,OAAOA,GAAS,UAChBA,IAAS,MACT,OAAO,KAAKA,CAAI,EAAE,KAAM3P,GAAQA,EAAI,SAAS,GAAG,CAAC,EACjD,CAIA,IAAIwuC,EAAe,CAAA,EACnB,UAAWxuC,KAAO2P,EACZ3P,EAAI,SAAS,GAAG,EAClBwuC,EAAU16B,GAAI06B,EAASxuC,EAAK2P,EAAK3P,CAAG,CAAC,EAE7BwuC,EAAAxuC,CAAG,EAAI2P,EAAK3P,CAAG,EAGpB,OAAAwuC,CAET,CACO,OAAA7+B,CAAA,CACR,GAGEw9B,EAAkB,QAAU,IAAQ,CAACC,EAAa,OAClDD,EAAkB,QAAU,IAAQC,EAAa,OAASphC,EAAM,uBAEjEuiC,EAAcF,EAAYE,CAAW,IAIpCjB,EAAW,QAAU,IAAQ,CAACF,EAAa,OAAS,CAACphC,EAAM,gBAC3DshC,EAAW,QAAU,IAAQF,EAAa,OAASphC,EAAM,qBAE1DuiC,EAAcX,EAAUW,CAAW,GAG9BA,CAAA,CACR,EAEKE,EAAuB1qD,EAAAA,SAAc,IACrC,OAAO,MAAMgjD,EAAc,KAAK,GAAMqG,EAAa,OAAS,CAACphC,EAAM,iBAC9D2hC,EAAc,MAGhBA,EAAc,MAAM,OACxBT,EAAkB,MAAQ,IAAMnG,EAAc,OAAS,OAAO,mBAC/DmG,EAAkB,OAASnG,EAAc,OAAS,OAAO,kBAAA,CAE5D,EAEKpuC,QAAA81C,EAAuBt/C,GAAM,CACjCgd,EAAK,SAAUhd,CAAC,CAAA,CACjB,EAEK,MAAAu/C,EAAqB,CACzBC,EACAp0C,EACAq0C,EAAe,GACfC,EAAc,GACdC,EAAc,KACX,CACH,GAAK9iC,EAAM,WAEX,GAAIA,EAAM,aAAe,UAAYA,EAAM,aAAe,QAAS,CAEjE,GAAI4iC,GAAgBC,EAAa,OAE7BjC,EAA0B,IAAI+B,CAAG,EACnC/B,EAA0B,OAAO+B,CAAG,EAEhC3iC,EAAM,aAAe,SACG4gC,EAAA,IAAI,CAAC+B,CAAG,CAAC,EAEnC/B,EAA0B,IAAI+B,CAAG,CAErC,SAEIE,GAAeC,EAEblC,EAA0B,IAAI+B,CAAG,EACnC/B,EAA0B,OAAO+B,CAAG,EAGpC/B,EAA0B,IAAI+B,CAAG,UAG1BC,EAAc,CACvB,MAAMG,EAAmB,CAAC,GAAGpC,EAAmB,KAAK,EAAE,IAAI,EACrDqC,EAAoBhjC,EAAM,MAAM,UAAWtgB,GAAMA,IAAMqjD,CAAgB,EACvEE,EAAmB,KAAK,IAAID,EAAmBz0C,CAAK,EACpD20C,EAAiB,KAAK,IAAIF,EAAmBz0C,CAAK,EAClDgI,EAAQyJ,EAAM,MAAM,MAAMijC,EAAkBC,EAAiB,CAAC,EACpEtC,EAA0B,IAAIrqC,CAAK,CAAA,MAGTqqC,EAAA,IAAI,CAAC+B,CAAG,CAAC,CAEvC,EAGIQ,EAAa,CAACR,EAAQp0C,EAAe9U,IAAkB,CACvDumB,EAAM,kBAAoB,IAC5B0iC,EAAmBC,EAAKp0C,EAAO9U,EAAE,SAAUA,EAAE,QAASA,EAAE,OAAO,EAE5D0mB,EAAA,cAAewiC,EAAKp0C,EAAO9U,CAAC,CAAA,EAG7B2pD,EAAsB19B,GAAyB,SACnD,GAAI,CAAC47B,EAAW,MAAO,OAEvB,MAAM19B,EAAW,OAAO8B,GAAU,UAAYA,IAAU,KAAOA,EAAM,IAAMA,EACrE29B,EAAgB,OAAO39B,GAAU,UAAYA,IAAU,KAAOA,EAAM,SAAW,GAErF,GAAI,EAAE47B,EAAW,QAAU,IAAQ+B,IAAkB,IAAO,OAEtD,MAAAC,EAAgB50C,GAA0D,CAC9E,GAAIA,IAAQ,MAAc,MAAA,OAGxB,GAFEA,IAAQ,QAEVsR,EAAM,WAAa,IAClB,MAAM,QAAQA,EAAM,QAAQ,GAAKA,EAAM,SAAS,SAAS4D,CAAkB,EAErE,MAAA,KACF,EAGHrV,IAAQS,EAAAwxC,EAAY,QAAZ,YAAAxxC,EAAmB,UAAW7V,GAAOA,EAAG,MAAQyqB,KAAa,GACrE2/B,GAAgBt0C,EAAAuxC,EAAY,QAAZ,YAAAvxC,EAAoBV,GACpCi1C,EAGJj1C,IAAU,IAAM,CAACg1C,EAAgB,CAAC,IAAK3/B,EAAoB,MAAO,OAAS,CAAC,GAAG2/B,CAAa,EAKxFE,EAAkB,IAAoB,SAC1C,IAAI/0C,EAAM80C,EACV,GAAIj1C,IAAU,GACZiyC,EAAY,MAAQ,CAAC,GAAIA,EAAY,OAAS,CAAA,EAAKgD,CAAY,MAC1D,CACC,MAAAE,EAAQJ,EAAaE,EAAa,KAAK,EACvC90C,EAAA,CAAC,GAAG80C,EAAc,MAAAE,GACZlD,EAAA,MAAQkD,GAChB10C,EAAAwxC,EAAY,QAAZ,YAAAxxC,EAAmB,IAAK7V,GAAQA,EAAG,MAAQuV,EAAI,IAAMA,EAAMvV,IAC3D8V,EAAAuxC,EAAY,QAAZ,YAAAvxC,EAAmB,OAAQ9V,GAAOA,EAAG,MAAQuV,EAAI,IACvD,CACO,OAAAA,CAAA,EAMHi1C,EAAmB,IAAoB,CAC3C,MAAMj1C,EAAM,CACV,GAAG80C,EACH,MAAOj1C,IAAU,GAAKi1C,EAAa,MAAQF,EAAaE,EAAa,KAAK,CAAA,EAEhE,OAAAhD,EAAA,MAAQ,CAAC9xC,CAAG,EACjBA,CAAA,EAITyR,EAAK,SAAUH,EAAM,YAAc,GAAOyjC,EAAgB,EAAIE,GAAkB,CAAA,EAG5EC,EAAmB,CACvBhgC,EACA8B,EACAzqB,EACA+kD,EAAW,KACR,CACH7/B,EAAK,eAAgByD,EAAU8B,EAAOzqB,EAAO+kD,CAAQ,EACrDoD,EAAmB19B,CAAK,CAAA,EAGpBm+B,EAAoB,SAAY,CACpC,GAAI,CAACzC,EAAa,OAASphC,EAAM,WAAa,QAAaygC,EAAU,MAAO,OAC5EA,EAAU,MAAQ,GACZ,MAAAqD,EAAW9jC,EAAM,SAAS,CAC9B,YAAakhC,EAAkB,MAC/B,OAAQlhC,EAAM,OACd,OAAQwgC,EAAY,MACpB,QAASzF,EAAc,KAAA,CACxB,EACG,GAAA,CACF,MAAMxkC,EAAQutC,aAAoB,QAAU,MAAMA,EAAWA,EAE7D,GAAIvtC,IAAU,OAAW,OACzB0qC,EAAc,MAAQ1qC,CAAA,QACtB,CAIAkqC,EAAU,MAAQ,EACpB,CAAA,EAGIsD,EAAqB,MAAOprD,EAAc+V,EAAcs1C,IAAoB,CAChF,GAAIt1C,IAAQs1C,EAAQ,OAGpB,MAAMC,EAAgBjwC,UAAyB,QAAAhF,EAAAgR,EAAM,aAAN,YAAAhR,EAAkB,SAASgF,MAAS,IAC7EkwC,GACHvrD,IAAS,eAAiBA,IAAS,aACnCsrD,EAAa,QAAQ,GAAKjkC,EAAM,mBAAqB,IAClDmkC,EACJxrD,IAAS,WAAasrD,EAAa,WAAW,GAAKjkC,EAAM,sBAAwB,IAC7EokC,GACHzrD,IAAS,UAAYA,IAAS,cAC9BsrD,EAAa,SAAS,GAAKjkC,EAAM,oBAAsB,IAEtDkkC,GAAuBC,GAA0BC,IAEjDhD,EAAa,QAAU,IACzB,MAAMyC,EAAkB,EAGpBlrD,IAAS,eAAiBA,IAAS,WACvCwnB,EAAK,WAAY,CAAC,GAAGwhC,EAAc,KAAK,CAAC,EAC3C,EAGFh1C,OAAAA,EAAA,MACE,IAAMqT,EAAM,OACZ,CAAC7Q,EAAQk1C,IAAc,CACFN,EAAA,SAAU50C,EAAQk1C,CAAS,EAE1C,EAAAl1C,IAAWk1C,GAAajD,EAAa,SACpCjyC,GACHgR,EAAK,WAAY,CAAC,GAAGwhC,EAAc,KAAK,CAAC,EAE7C,CAAA,EAEIh1C,EAAAA,MAAAu0C,EAAmB,CAACxyC,EAAKs1C,IAAW,CACrBD,EAAA,cAAer1C,EAAKs1C,CAAM,CAAA,CAC9C,EACKr3C,EAAAA,MAAAouC,EAAe,CAACrsC,EAAKs1C,IAAW,CACjBD,EAAA,UAAWr1C,EAAKs1C,CAAM,CAAA,CAC1C,EACDr3C,EAAA,MACE6zC,EACA,CAAC9xC,EAAKs1C,IAAW,CACID,EAAA,SAAUr1C,EAAKs1C,CAAM,CAC1C,EACA,CAAC,KAAM,EAAI,CAAA,EAGbr3C,EAAA,MACE,IAAMqT,EAAM,SACX5N,GAAa,CAEZ,GAAIA,IAAa,OAAW,CAC1B6uC,EAAc,MAAQ,GACtB,MACF,CAEkB4C,GACpB,CAAA,EAGFtxC,EAAA,UAAUsxC,CAAiB,EAEdthC,EAAA,CAEX,cAAe,IAAM,CACdvC,EAAM,YACX4gC,EAA0B,MAAM,CAClC,EACA,QAASiD,EACT,cAAe,IAAM,CACnB,GAAI,CAAC7jC,EAAM,WAAY,OACjB,MAAAskC,EAAoB3D,EAAmB,MAAM,KAAO,EAAI,CAAC,GAAGA,EAAmB,KAAK,EAAI,GAC9FA,EAAmB,MAAY,IAAA,IAAI,CAAC,GAAGgB,EAAc,KAAK,CAAC,EACxChB,EAAA,MAAM,QAASh9B,GAAS,CACrC2gC,EAAkB,SAAS3gC,CAAI,GACnCxD,EAAK,eAAgBwD,CAAI,CAAA,CAC1B,CACH,EACA,UAAYpV,GAAkB,CAC5B,GAAI,CAACyR,EAAM,WAAY,OACjB,MAAA2D,EAAOg+B,EAAc,MAAMpzC,CAAK,EAClC,CAACoV,GAAQi9B,EAA0B,IAAIj9B,CAAI,GAC/Ci9B,EAA0B,IAAIj9B,CAAI,CACpC,EACA,YAAcpV,GAAkB,CAC9B,GAAI,CAACyR,EAAM,WAAY,OACjB,MAAA2D,EAAOg+B,EAAc,MAAMpzC,CAAK,EAClC,CAACoV,GAAQ,CAACi9B,EAA0B,IAAIj9B,CAAI,GAChDi9B,EAA0B,OAAOj9B,CAAI,CACvC,EACA,cAAgBpV,GAAkB,CAChC,GAAI,CAACyR,EAAM,WAAmB,MAAA,GACxB,MAAA2D,EAAOg+B,EAAc,MAAMpzC,CAAK,EAC/B,OAAAqyC,EAA0B,IAAIj9B,CAAI,CAC3C,CAAA,CACD,myFC1uBK,MAAA3D,EAAQC,EAbCC,EAamB,MAAM,EAElCxM,EAAQkvB,EAAAA,WAWR2hB,EAAcjkC,EAAAA,SAAqBJ,EAAA,QAExC,EAEKwT,EAAatK,EAAAA,OAAOvD,GAAkB,IAAI,EAC1CnF,EAAaC,GAAM,IAAMX,EAAM,GAAI,SAAS,EAC5CwkC,EAAmB7jC,GAAM,IAAMX,EAAM,SAAU,KAAK,EAEpDykC,EAAsB14C,MAAI,EAAK,EAC/B5S,EAAK4S,MAAwB,IAAI,EAEjC,CAAC,QAAA2tC,EAAS,GAAG9lC,GAASkf,EAAS,SAAA,EAE/B4xB,EAAM3sD,EAAA,SACV,KACG,CACC,GAAI2oB,EAAW,MACf,SAAU8jC,EAAiB,MAC3B,SAAUxkC,EAAM,SAChB,MAAOA,EAAM,MACb,eAAgBtM,EAAM,MACtB,eAAgBsM,EAAM,eACtB,eAAgBA,EAAM,eACtB,eAAgBA,EAAM,eACtB,QAAA05B,EACA,GAAIvgD,EAAG,KAAA,EACT,EAGJoZ,EAAAA,UAAU,IAAM,CACTmhB,IACLA,EAAW,YAAYgxB,CAAG,EACtB1kC,EAAM,QACG0T,EAAA,YAAYhT,EAAW,KAAK,EACzC,CACD,EAEDikC,EAAAA,YAAY,IAAM,CACXjxB,GACMA,EAAA,cAAchT,EAAW,KAAK,CAAA,CAC1C,EAED,MAAMtQ,EAAWgB,EAAM,MAAA,KAAMsiB,GAAA,YAAAA,EAAY,SAAS,SAAUhT,EAAW,KAAK,EACtED,EAAO1U,EAAAA,IAAIqE,EAAS,KAAK,EAEzBw0C,EAAexzC,EAAM,MAAA,IAAM,CAAC,EAAEsiB,GAAA,MAAAA,EAAY,KAAK,QAAU1T,EAAM,UAAYA,EAAM,MAAM,EACvF6kC,EAAmBzzC,EAAAA,MAAM,IAAM4O,EAAM,WAAa,MAAS,EAE3D8kC,EAAiB1zC,EAAAA,MAAM,IAAMhB,EAAS,OAAS,CAAC4P,EAAM,QAAQ,EAC9D+kC,EAAW3zC,EAAA,MACf,IACE0zC,EAAe,OACf,CAACF,EAAa,OACbA,EAAa,OAASC,EAAiB,OAASJ,EAAoB,KAAA,EAGnE93C,QAAAyD,EAAW48B,GAAW,CAC1B,GAAIA,EAAQ,CACVuX,EAAY,MAAQ,GACpB,WAAW,IAAM,CACf9jC,EAAK,MAAQ,IACZ,CAAC,EACJ,MACF,CACAA,EAAK,MAAQ,GACb8jC,EAAY,MAAQ,EAAA,CACrB,EACD53C,EAAA,MACE,IAAMqT,EAAM,OACXgtB,GAAW,CACV,GAAKtZ,EACL,IAAI,CAACsZ,EAAQ,CACP58B,EAAS,OACXsjB,EAAW,YAAY,MAAS,EAElC,MACF,CACWA,EAAA,YAAYhT,EAAW,KAAK,EACzC,CAAA,EAGI,MAAAuB,EAAkBlqB,EAAAA,SAAS,IAAM,CACrC,CACE,OAAUqY,EAAS,MACnB,KAAQqQ,EAAK,MACb,aAAaiT,GAAA,YAAAA,EAAY,KAAK,QAAS1T,EAAM,SAAW,GACxD,KAAQ,EAAC0T,GAAA,MAAAA,EAAY,OAAO,MAC9B,EACAjT,EAAK,MAAQiT,GAAA,YAAAA,EAAY,eAAe,MAAQA,GAAA,YAAAA,EAAY,iBAAiB,MAC7EA,GAAA,YAAAA,EAAY,SAAS,KAAA,CACtB,EAEK/mB,OAAAA,QAAAo4C,EAAWC,GAAU,CACrBA,GAAS,CAACP,EAAoB,QAAOA,EAAoB,MAAQ,GAAA,CACtE,y2CC7CK,MAAAzkC,EAAQC,EAzBCC,EAyBmB,OAAO,EAEnCC,EAAOC,EAgBPC,EAAaC,EAAAA,SAAmBJ,EAAA,YAErC,EACK+kC,EAAW3kC,EAAAA,WAAgC,UAEhD,EAEK4kC,EAAmB7xC,KAEnB8xC,EAAep5C,MAAoB,CAAA,CAAE,EAErCq5C,EAAOrtD,EAAA,SAAS,IACpBotD,EAAa,MAAM,IAAKE,GAAS,CACzB,MAAAX,EAAM95C,QAAMy6C,CAAI,EAChBrY,EAAS0X,EAAI,KAAOO,EAAS,MAE5B,MAAA,CACL,GAAGP,EACH,OAAA1X,EACA,eAAgB,CACd,CACE,OAAAA,EACA,SAAU0X,EAAI,QAChB,EACA1X,EAAShtB,EAAM,mBAAqBA,EAAM,qBAC1CA,EAAM,aACN0kC,EAAI,cACN,CAAA,CACF,CACD,CAAA,EAGGY,EAAYl0C,EAAAA,MAAM,IAAM,EAAEg0C,GAAA,MAAAA,EAAM,OAASA,EAAK,MAAM,OAAS,EAAE,EAE/DnjC,EAAkBlqB,EAAAA,SAAS,KAAO,CACtC,SAAUioB,EAAM,SAChB,oBAAqBA,EAAM,QAC3B,EAAA,EAEIljB,EAAYjF,GAAa,IAAMmoB,EAAM,KAAK,EAE1CulC,EAAiBxtD,EAAAA,SAAS,KAAO,CACrC,YAAaioB,EAAM,MACnB,mBAAoBA,EAAM,SAC1B,CAACljB,EAAU,KAAK,EAAGkjB,EAAM,QAAU,OACnC,WAAYA,EAAM,KAClB,mBAAoBA,EAAM,KAC1B,gBAAiBA,EAAM,UACvB,WAAY,CAACA,EAAM,YAAc,CAACA,EAAM,MACxC,MAASA,EAAM,KACf,EAAA,EAEIwlC,EAAej3C,GAAwB,OAC3C,GAAIA,IAAU,OAAW,CACvB,MAAM4d,GAAKnd,EAAAo2C,EAAK,MAAM72C,CAAK,IAAhB,YAAAS,EAAmB,GAE5B,GAAAT,EAAQ,IACRA,EAAQ62C,EAAK,MAAM,QACnB,CAACA,EAAK,MAAM72C,CAAK,EAAE,WAClB8R,EAAW,MAAQ,GAAK4kC,EAAS,QAAU94B,GAAM9L,EAAW,QAAU9R,GACvE,CACA,MAAMk3C,EAAW,IAAIltD,GAAQ,eAAgB,CAAC,WAAY,GAAK,EAC/D4nB,EAAK,eAAgB5R,EAAO8R,EAAW,MAAOolC,CAAQ,EACjDA,EAAS,mBACRR,EAAS,QAAU94B,IAAI84B,EAAS,MAAQ94B,GACxC9L,EAAW,QAAU9R,IAAO8R,EAAW,MAAQ9R,GAEvD,CACF,CAAA,EAGIm3C,EAAc,CAACzqD,EAA6BsT,IAAkB,WAClEi3C,EAAYj3C,CAAK,EAEfA,GAAS,GACT,CAAC62C,EAAK,MAAM72C,CAAK,EAAE,YACnBS,EAAAo2C,EAAK,MAAM72C,CAAK,IAAhB,MAAAS,EAAmB,UACnB,OAAOo2C,EAAK,MAAM72C,CAAK,EAAE,SAAY,cAErC6c,GAAAnc,EAAAm2C,EAAK,MAAM72C,CAAK,GAAE,UAAlB,MAAA6c,EAAA,KAAAnc,EAA4BhU,GAC9B,EAGI8xC,EAAU/zC,GAAsB,SAChCosD,EAAK,MAAM,QAAU,IACzB/kC,EAAW,MAAQ/b,EAAU+b,EAAW,MAAQrnB,EAAWA,CAAS,GAC3DiW,EAAA,SAAA,gBAAeD,EAAAo2C,EAAK,MAAM/kC,EAAW,KAAK,IAA3B,YAAArR,EAA8B,QAAQ,IAArD,MAAAC,EAAwD,QAAM,EAGnE3K,EAAY,CAACvI,EAAe/C,IAAsB,CACtD,IAAIuV,EAAQxS,EACR4pD,EAAS,GACTC,EAAS,GAEb,QAASlmD,EAAI,EAAGA,EAAI0lD,EAAK,MAAM,OAAQ1lD,IAChC0lD,EAAK,MAAM1lD,CAAC,EAAE,WACbimD,IAAW,KAAaA,EAAAjmD,GACnBkmD,EAAAlmD,GAIN,KAAA6O,GAASo3C,GAAUp3C,GAASq3C,GAAUR,EAAK,MAAM72C,CAAK,EAAE,UACpDA,GAAAvV,EAGX,OAAIuV,EAAQo3C,IAAgBp3C,EAAAo3C,GACxBp3C,EAAQq3C,IAAgBr3C,EAAAq3C,GAErBr3C,CAAA,EAGH5B,EAAAA,MAAA0T,EAAY,CAACjO,EAAUmH,IAAa,CAEpC,GADAnH,IAAamH,GACb6rC,EAAK,MAAM,QAAU,EACvB,OAGF,MAAM72C,EAAQjK,EAAU8N,EAAUA,EAAWmH,EAAW,EAAI,EAAE,EAC9D/G,EAAAA,SAAS,IAAM,CACbgzC,EAAYj3C,CAAK,CAAA,CAClB,CAAA,CACF,EAEK5B,EAAAA,MAAAs4C,EAAU,CAAC7yC,EAAUmH,IAAa,CAChC,MAAAhL,EAAQ62C,EAAK,MAAM,UAAW78C,GAAMA,EAAE,KAAO6J,CAAQ,EAC3D,GAAIA,IAAamH,GACb,EAAA6rC,EAAK,MAAM,QAAU,GAGzB,IAAI72C,IAAU,GAAI,CACJi3C,EAAAlhD,EAAU,EAAG,CAAC,CAAC,EAC3B,MACF,CACAkhD,EAAYj3C,CAAK,EAAA,CAClB,EAEK,MAAAs3C,EAAenB,GAAsB,CACpCS,EAAa,MAAM,KAAM58C,GAAMA,EAAE,MAAM,KAAOm8C,EAAI,MAAM,EAAE,EAG7DS,EAAa,MAAMA,EAAa,MAAM,UAAW58C,GAAMA,EAAE,MAAM,KAAOm8C,EAAI,MAAM,EAAE,CAAC,EAAIA,EAF1ES,EAAA,MAAM,KAAKT,CAAG,EAI7BS,EAAa,MAAM,KAAK,CAAC/hD,EAAGC,IAAM,CAC5B,GAAA,CAAC,MAAQ,CAACD,EAAE,MAAM,IAAM,CAACC,EAAE,MAAM,GAAW,MAAA,GAChD,MAAMmJ,EAAWpJ,EAAE,MAAM,GAAG,wBAAwBC,EAAE,MAAM,EAAE,EAC9D,OAAImJ,EAAW,KAAK,4BAAoC,GACpDA,EAAW,KAAK,4BAAoC,EACjD,CAAA,CACR,CAAA,EAEGs5C,EAAiB35B,GAAe,CACvBg5B,EAAA,MAAQA,EAAa,MAAM,OAAQ58C,GAAMA,EAAE,MAAM,KAAO4jB,CAAE,CAAA,EAGzExf,EAAA,MACEw4C,EACA,IAAM,CACOY,GACb,EACA,CAAC,KAAM,EAAI,CAAA,EAGb,MAAMA,EAAa,IAAM,OACnB,GAAAX,EAAK,MAAM,SAAW,EAAG,CAC3B/kC,EAAW,MAAQ,GACnB4kC,EAAS,MAAQ,OACjB,MACF,CAII,GAHA5kC,EAAW,OAAS,GAAK,CAAC4kC,EAAS,QACrCA,EAAS,OAAQj2C,EAAAo2C,EAAK,MAAM/kC,EAAW,KAAK,IAA3B,YAAArR,EAA8B,IAE7Co2C,EAAK,MAAM,KAAM78C,GAAMA,EAAE,KAAO08C,EAAS,KAAK,EAAG,CACvCO,EAAAJ,EAAK,MAAM,UAAW78C,GAAMA,EAAE,KAAO08C,EAAS,KAAK,CAAC,EAChE,MACF,CACYO,EAAAJ,EAAK,MAAM,IAAKV,GAAQ,CAACA,EAAI,QAAQ,EAAE,QAAQ,EAAI,CAAC,CAAA,EAGlEj5B,OAAAA,EAAAA,QAAQ5F,GAAkB,CACxB,KAAMzU,EAAA,MAAM,IAAM4O,EAAM,IAAI,EAC5B,KAAM5O,EAAA,MAAM,IAAM4O,EAAM,IAAI,EAC5B,OAAQ5O,EAAA,MAAM,IAAM4O,EAAM,MAAM,EAChC,eAAgB5O,EAAA,MAAM,IAAM4O,EAAM,cAAc,EAChD,iBAAkB5O,EAAA,MAAM,IAAM4O,EAAM,gBAAgB,EACpD,SAAU5O,EAAA,MAAM,IAAM4O,EAAM,QAAQ,EACpC,YAAA6lC,EACA,cAAAC,EACA,SAAAb,EACA,YAAc94B,GAAO,CACb,MAAAiQ,EAAMgpB,EAAK,MAAM,UAAW78C,GAAMA,EAAE,KAAO4jB,CAAE,EAC/C,GAAAA,IAAO,QAAaiQ,IAAQ,GAAI,CACtBopB,EAAAlhD,EAAU,EAAG,CAAC,CAAC,EAC3B,MACF,CACAkhD,EAAYppB,CAAG,CACjB,CAAA,CACD,83EC7QK,MAAApc,EAAQC,EALCC,EAKmB,oBAAoB,EAEhD,CAAC,OAAAwV,EAAQ,OAAAR,EAAQ,KAAAzU,EAAM,aAAA2U,EAAc,MAAAQ,CAAA,EAASxD,KAEpDzlB,EAAA,MACE,IAAMqT,EAAM,YACXhoB,GAAU,CACTo9B,GAAA,MAAAA,EAAep9B,EACjB,EACA,CAAC,UAAW,EAAI,CAAA,EAGZ,MAAAguD,EACJvN,GACGnxB,GAAKmxB,EAAS,CAAC,cAAe,QAAS,KAAK,CAAC,EAErC,OAAAl2B,EAAA,CACX,OAAAmT,EACA,KAAAjV,EACA,OAAAyU,CAAA,CACD,usECjBK,MAAAlV,EAAQC,EA9BCC,EA8BmB,UAAU,EAEtCG,EAAaC,EAAAA,uBAAqD,EAElE2lC,EAAgBluD,EAAAA,SAAwB,IAAM,CAClD,KAAM,CAAC,YAAAmuD,EAAa,eAAAC,EAAgB,GAAGC,GAAQpmC,EACxC,MAAA,CAAC,eAAgBmmC,IAAmB,OAAYA,EAAiB,CAACD,EAAa,GAAGE,EAAI,CAC9F,EAEKC,EAAUt6C,MAA0C,IAAI,EAEjD,OAAAwW,EAAA,CACX,MAAMvT,EAAAq3C,EAAQ,QAAR,YAAAr3C,EAAe,KACrB,MAAMC,EAAAo3C,EAAQ,QAAR,YAAAp3C,EAAe,KACrB,QAAQmc,EAAAi7B,EAAQ,QAAR,YAAAj7B,EAAe,MAAA,CACxB,i2ECvCKk7B,GAAQ,qBA2GRC,GAAa71C,GAAiBA,EAAI,YAAY,EAAE,WAAW,GAAG,EAAIA,EAAI,MAAM,CAAC,EAAIA,EAG1E81C,GAAkB,CAACC,EAA4C,MAAgB,CAC1F,QAAQxxB,EAAK,EACPwxB,EAAW,YAAc,KAC3BxxB,EAAI,IAAIa,EAAgB,IAErB2wB,EAAW,IAAM,KAAkB,OAAOA,EAAW,IAAO,WAC3DxxB,EAAA,IAAIc,GAAU0wB,CAAU,GAE1BA,EAAW,iBAAmB,KAChCxxB,EAAI,IAAIsQ,EAAqB,GAE3BkhB,EAAW,cAAgB,KAC7BxxB,EAAI,IAAIrH,EAAkB,IAEvB64B,EAAW,KAAO,KAAkB,OAAOA,EAAW,KAAQ,WAC7DxxB,EAAA,IAAI3F,GAAWm3B,CAAU,GAE3BA,EAAW,OAAS,KACtBxxB,EAAI,IAAID,EAAW,EAEjBC,EAAA,IAAImR,GAAgBqgB,CAAU,CACpC,CACF,GAKaC,GAA2B,CAAC,CACvC,QAAAC,EAAU,CAAC,EACX,WAAAC,EAAa,GACb,WAAAC,EAAa,EACf,EAIK,KAA4B,CAC/B,MAAMC,EAAqB,OAAOD,GAAe,UAAY,CAAC,IAAKA,CAAc,EAAAA,EAC3EE,EAAc,IAAI,IAAY1+B,GAAmBy+B,EAAoBzgB,EAAc,CAAC,EAEpF2gB,EAAqB,OAAOJ,GAAe,UAAY,CAAC,IAAKA,CAAc,EAAAA,EAC3EK,EAAa,IAAI,IACrB5+B,GAAmB2+B,EAAoB1gB,EAAc,EAAE,IAAIigB,EAAS,CAAA,EA0B/D,MAxBgC,CACrC,CACE,KAAM,YACN,QAAU5mD,GAAS,CACjB,GAAIonD,EAAY,IAAIpnD,CAAI,GAAKgnD,EAAQhnD,CAAI,EAChC,MAAA,CACL,KAAMgnD,EAAQhnD,CAAI,GAAKA,EACvB,KAAM2mD,EAAA,CAGZ,CACF,EACA,CACE,KAAM,YACN,QAAU3mD,GAAS,CACb,GAAAsnD,EAAW,IAAItnD,CAAI,EACd,MAAA,CACL,KAAM,IAAIA,CAAI,GACd,KAAM2mD,EAAA,CAGZ,CACF,CAAA,CAGJ","x_google_ignoreList":[8,9,10,11,12,14,15,65,66,67]}
|
|
1
|
+
{"version":3,"file":"bootstrap-vue-next.umd.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|