@cldemo/ui-kit 1.0.9 → 1.0.11
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/COMPONENT_CATALOG.md +2 -2
- package/buildLibs/all/index.cjs +2 -5
- package/buildLibs/all/index.css +1 -0
- package/buildLibs/all/index.js +82 -6
- package/buildLibs/mobile/index.cjs +2 -5
- package/buildLibs/mobile/index.css +1 -0
- package/buildLibs/mobile/index.js +50 -6
- package/buildLibs/utils/Element/ClBadge.d.ts +3 -0
- package/buildLibs/utils/Element/ClBreadcrumb.d.ts +3 -0
- package/buildLibs/utils/Element/ClButton.d.ts +3 -0
- package/buildLibs/utils/Element/ClCallout.d.ts +3 -0
- package/buildLibs/utils/Element/ClCard.d.ts +3 -0
- package/buildLibs/utils/Element/ClCardColor.d.ts +3 -0
- package/buildLibs/utils/Element/ClCheckbox.d.ts +3 -0
- package/buildLibs/utils/Element/ClCheckboxOne.cjs +2 -0
- package/buildLibs/utils/Element/ClCheckboxOne.cjs.map +1 -0
- package/buildLibs/utils/Element/ClCheckboxOne.d.ts +3 -0
- package/buildLibs/utils/Element/ClCheckboxOne.js +5 -0
- package/buildLibs/utils/Element/ClCheckboxOne.js.map +1 -0
- package/buildLibs/utils/Element/ClClipboard.d.ts +3 -0
- package/buildLibs/utils/Element/ClCollapse.d.ts +3 -0
- package/buildLibs/utils/Element/ClCountDown.d.ts +3 -0
- package/buildLibs/utils/Element/ClCountUp.d.ts +3 -0
- package/buildLibs/utils/Element/ClCropper.d.ts +3 -0
- package/buildLibs/utils/Element/ClDarg.d.ts +3 -0
- package/buildLibs/utils/Element/ClDivider.d.ts +3 -0
- package/buildLibs/utils/Element/ClEllipsis.d.ts +3 -0
- package/buildLibs/utils/Element/ClEmpty.d.ts +3 -0
- package/buildLibs/utils/Element/ClForm.d.ts +3 -0
- package/buildLibs/utils/Element/ClFormGroup.d.ts +3 -0
- package/buildLibs/utils/Element/ClFormValidate.cjs +2 -0
- package/buildLibs/utils/Element/ClFormValidate.cjs.map +1 -0
- package/buildLibs/utils/Element/ClFormValidate.d.ts +3 -0
- package/buildLibs/utils/Element/ClFormValidate.js +5 -0
- package/buildLibs/utils/Element/ClFormValidate.js.map +1 -0
- package/buildLibs/utils/Element/ClIconFont.d.ts +3 -0
- package/buildLibs/utils/Element/ClImage.cjs +1 -1
- package/buildLibs/utils/Element/ClImage.d.ts +3 -0
- package/buildLibs/utils/Element/ClImage.js +1 -1
- package/buildLibs/utils/Element/ClInput.d.ts +3 -0
- package/buildLibs/utils/Element/ClInputCaptcha.d.ts +3 -0
- package/buildLibs/utils/Element/ClInputNumber.d.ts +3 -0
- package/buildLibs/utils/Element/ClInputNumberStepper.d.ts +3 -0
- package/buildLibs/utils/Element/ClInputPassword.d.ts +3 -0
- package/buildLibs/utils/Element/ClInputSearch.d.ts +3 -0
- package/buildLibs/utils/Element/ClInputTextarea.d.ts +3 -0
- package/buildLibs/utils/Element/ClLink.d.ts +3 -0
- package/buildLibs/utils/Element/ClLoad.d.ts +3 -0
- package/buildLibs/utils/Element/ClLoadFullCenter.cjs +2 -0
- package/buildLibs/utils/Element/ClLoadFullCenter.cjs.map +1 -0
- package/buildLibs/utils/Element/ClLoadFullCenter.css +1 -0
- package/buildLibs/utils/Element/ClLoadFullCenter.d.ts +3 -0
- package/buildLibs/utils/Element/ClLoadFullCenter.js +45 -0
- package/buildLibs/utils/Element/ClLoadFullCenter.js.map +1 -0
- package/buildLibs/utils/Element/ClLoadIng.cjs +2 -0
- package/buildLibs/utils/Element/ClLoadIng.cjs.map +1 -0
- package/buildLibs/utils/Element/ClLoadIng.d.ts +3 -0
- package/buildLibs/utils/Element/ClLoadIng.js +5 -0
- package/buildLibs/utils/Element/ClLoadIng.js.map +1 -0
- package/buildLibs/utils/Element/ClLoadScreen.d.ts +3 -0
- package/buildLibs/utils/Element/ClLoadWarp.cjs +2 -0
- package/buildLibs/utils/Element/ClLoadWarp.cjs.map +1 -0
- package/buildLibs/utils/Element/ClLoadWarp.css +1 -0
- package/buildLibs/utils/Element/ClLoadWarp.d.ts +3 -0
- package/buildLibs/utils/Element/ClLoadWarp.js +53 -0
- package/buildLibs/utils/Element/ClLoadWarp.js.map +1 -0
- package/buildLibs/utils/Element/ClModal.d.ts +3 -0
- package/buildLibs/utils/Element/ClOverlay.d.ts +3 -0
- package/buildLibs/utils/Element/ClProgress.d.ts +3 -0
- package/buildLibs/utils/Element/ClRadio.d.ts +3 -0
- package/buildLibs/utils/Element/ClRadioOne.cjs +2 -0
- package/buildLibs/utils/Element/ClRadioOne.cjs.map +1 -0
- package/buildLibs/utils/Element/ClRadioOne.d.ts +3 -0
- package/buildLibs/utils/Element/ClRadioOne.js +5 -0
- package/buildLibs/utils/Element/ClRadioOne.js.map +1 -0
- package/buildLibs/utils/Element/ClSlider.d.ts +3 -0
- package/buildLibs/utils/Element/ClSwitchery.d.ts +3 -0
- package/buildLibs/utils/Element/ClTags.d.ts +3 -0
- package/buildLibs/utils/Element/ClTransitionSlideupdown.cjs +2 -0
- package/buildLibs/utils/Element/ClTransitionSlideupdown.cjs.map +1 -0
- package/buildLibs/utils/Element/ClTransitionSlideupdown.d.ts +3 -0
- package/buildLibs/utils/Element/ClTransitionSlideupdown.js +5 -0
- package/buildLibs/utils/Element/ClTransitionSlideupdown.js.map +1 -0
- package/buildLibs/utils/Element/ClWaterfall.d.ts +3 -0
- package/buildLibs/utils/Element/ClWaterfallImage.cjs +2 -0
- package/buildLibs/utils/Element/ClWaterfallImage.cjs.map +1 -0
- package/buildLibs/utils/Element/ClWaterfallImage.css +1 -0
- package/buildLibs/utils/Element/ClWaterfallImage.d.ts +3 -0
- package/buildLibs/utils/Element/ClWaterfallImage.js +48 -0
- package/buildLibs/utils/Element/ClWaterfallImage.js.map +1 -0
- package/buildLibs/utils/Mobile/ClActionBar.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClActionSheet.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClAreaM.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClBackTop.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClBanner.cjs +1 -1
- package/buildLibs/utils/Mobile/ClBanner.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClBanner.js +1 -1
- package/buildLibs/utils/Mobile/ClCalendarM.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClCell.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClCellSwipe.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClCodeLegendM.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClDropdownMenuM.cjs +1 -1
- package/buildLibs/utils/Mobile/ClDropdownMenuM.cjs.map +1 -1
- package/buildLibs/utils/Mobile/ClDropdownMenuM.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClDropdownMenuM.js +13 -12
- package/buildLibs/utils/Mobile/ClDropdownMenuM.js.map +1 -1
- package/buildLibs/utils/Mobile/ClDropdownMenuMItem.cjs +2 -0
- package/buildLibs/utils/Mobile/ClDropdownMenuMItem.cjs.map +1 -0
- package/buildLibs/utils/Mobile/ClDropdownMenuMItem.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClDropdownMenuMItem.js +160 -0
- package/buildLibs/utils/Mobile/ClDropdownMenuMItem.js.map +1 -0
- package/buildLibs/utils/Mobile/ClFloatingBubble.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClFloatingPanel.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClGrid.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClHighlightM.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClIndexBar.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClInputOtp.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClNavBar.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClNoticeBar.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClNotifyM.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClNumberKeyboard.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClPicker.cjs +1 -1
- package/buildLibs/utils/Mobile/ClPicker.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClPicker.js +1 -1
- package/buildLibs/utils/Mobile/ClPickerCascader.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClPickerDate.cjs +1 -1
- package/buildLibs/utils/Mobile/ClPickerDate.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClPickerDate.js +1 -1
- package/buildLibs/utils/Mobile/ClPickerTime.cjs +1 -1
- package/buildLibs/utils/Mobile/ClPickerTime.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClPickerTime.js +1 -1
- package/buildLibs/utils/Mobile/ClPopup.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClPullToRefresh.cjs +1 -1
- package/buildLibs/utils/Mobile/ClPullToRefresh.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClPullToRefresh.js +1 -1
- package/buildLibs/utils/Mobile/ClRate.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClScrollCard.cjs +1 -1
- package/buildLibs/utils/Mobile/ClScrollCard.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClScrollCard.js +1 -1
- package/buildLibs/utils/Mobile/ClShareSheet.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClSidebar.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClSidebarSelect.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClSignature.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClSteps.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClSwipe.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClTabM.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClTabbar.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClToast.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClWatermark.d.ts +3 -0
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BPgunUb2.js → Index.vue_vue_type_script_setup_true_lang-6KT1IHDu.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BPgunUb2.js.map → Index.vue_vue_type_script_setup_true_lang-6KT1IHDu.js.map} +1 -1
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-B-yZtW91.js +71 -0
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-B-yZtW91.js.map +1 -0
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-gtDsWrhd.js → Index.vue_vue_type_script_setup_true_lang-BDPkmgGP.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-gtDsWrhd.js.map → Index.vue_vue_type_script_setup_true_lang-BDPkmgGP.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-D_IwyxiV.js → Index.vue_vue_type_script_setup_true_lang-Bnjm8vi-.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-D_IwyxiV.js.map → Index.vue_vue_type_script_setup_true_lang-Bnjm8vi-.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Cpb9rd-y.js → Index.vue_vue_type_script_setup_true_lang-Bs8FGIQa.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Cpb9rd-y.js.map → Index.vue_vue_type_script_setup_true_lang-Bs8FGIQa.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-hm75HKxP.js → Index.vue_vue_type_script_setup_true_lang-C7FRB7fV.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-hm75HKxP.js.map → Index.vue_vue_type_script_setup_true_lang-C7FRB7fV.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Xe4BacqD.js → Index.vue_vue_type_script_setup_true_lang-CFzimlB_.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Xe4BacqD.js.map → Index.vue_vue_type_script_setup_true_lang-CFzimlB_.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Bp39ENoP.js → Index.vue_vue_type_script_setup_true_lang-CGeXNRtY.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Bp39ENoP.js.map → Index.vue_vue_type_script_setup_true_lang-CGeXNRtY.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-4NloX3Qk.js → Index.vue_vue_type_script_setup_true_lang-CSV9UWJx.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-4NloX3Qk.js.map → Index.vue_vue_type_script_setup_true_lang-CSV9UWJx.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-CRJ3-pTH.js → Index.vue_vue_type_script_setup_true_lang-ChE1tZwr.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-CRJ3-pTH.js.map → Index.vue_vue_type_script_setup_true_lang-ChE1tZwr.js.map} +1 -1
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CjgtxJ6a.js +2 -0
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CjgtxJ6a.js.map +1 -0
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-N1GhNa1r.js → Index.vue_vue_type_script_setup_true_lang-CpuYxzDD.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-N1GhNa1r.js.map → Index.vue_vue_type_script_setup_true_lang-CpuYxzDD.js.map} +1 -1
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CumTbPny.js +2 -0
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CumTbPny.js.map +1 -0
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-NdqbsOrG.js → Index.vue_vue_type_script_setup_true_lang-CvF_iIQS.js} +2 -2
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-NdqbsOrG.js.map → Index.vue_vue_type_script_setup_true_lang-CvF_iIQS.js.map} +1 -1
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CxVAWr6w.js +266 -0
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CxVAWr6w.js.map +1 -0
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-DgMvq-RQ.js → Index.vue_vue_type_script_setup_true_lang-DFKjhT_C.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-DgMvq-RQ.js.map → Index.vue_vue_type_script_setup_true_lang-DFKjhT_C.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-D22m4oiN.js → Index.vue_vue_type_script_setup_true_lang-DdWmaT86.js} +2 -2
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-D22m4oiN.js.map → Index.vue_vue_type_script_setup_true_lang-DdWmaT86.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BtoovAWs.js → Index.vue_vue_type_script_setup_true_lang-DxHfO8TH.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BtoovAWs.js.map → Index.vue_vue_type_script_setup_true_lang-DxHfO8TH.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-CW63TdvW.js → Index.vue_vue_type_script_setup_true_lang-HwprdMv4.js} +2 -2
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-CW63TdvW.js.map → Index.vue_vue_type_script_setup_true_lang-HwprdMv4.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BLp0owhs.js → Index.vue_vue_type_script_setup_true_lang-IGgTDykL.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BLp0owhs.js.map → Index.vue_vue_type_script_setup_true_lang-IGgTDykL.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BKr3_J68.js → Index.vue_vue_type_script_setup_true_lang-Lwl-M8kR.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BKr3_J68.js.map → Index.vue_vue_type_script_setup_true_lang-Lwl-M8kR.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Dxb_K2w0.js → Index.vue_vue_type_script_setup_true_lang-gsnpWNek.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Dxb_K2w0.js.map → Index.vue_vue_type_script_setup_true_lang-gsnpWNek.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-EGKo8cIw.js → Index.vue_vue_type_script_setup_true_lang-huUkL0wY.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-EGKo8cIw.js.map → Index.vue_vue_type_script_setup_true_lang-huUkL0wY.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BFSRH9yz.js → Index.vue_vue_type_script_setup_true_lang-in1ZSapu.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BFSRH9yz.js.map → Index.vue_vue_type_script_setup_true_lang-in1ZSapu.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-C8HQVerr.js → Index.vue_vue_type_script_setup_true_lang-r6RBdV4y.js} +2 -2
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-C8HQVerr.js.map → Index.vue_vue_type_script_setup_true_lang-r6RBdV4y.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-DvzXfKhj.js → Index.vue_vue_type_script_setup_true_lang-tTHdssVu.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-DvzXfKhj.js.map → Index.vue_vue_type_script_setup_true_lang-tTHdssVu.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BxxIDGfR.js → Index.vue_vue_type_script_setup_true_lang-tjRv0vNR.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BxxIDGfR.js.map → Index.vue_vue_type_script_setup_true_lang-tjRv0vNR.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Bk2WD0GS.js → Index.vue_vue_type_script_setup_true_lang-yahz6Ej5.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Bk2WD0GS.js.map → Index.vue_vue_type_script_setup_true_lang-yahz6Ej5.js.map} +1 -1
- package/buildLibs/utils/Shared/Index24.css +1 -1
- package/buildLibs/utils/Shared/Index25.css +1 -1
- package/buildLibs/utils/Shared/Index26.css +1 -1
- package/buildLibs/utils/Shared/Index27.css +1 -1
- package/buildLibs/utils/Shared/Index28.css +1 -1
- package/buildLibs/utils/Shared/Index29.css +1 -1
- package/buildLibs/utils/Shared/Index30.css +1 -1
- package/buildLibs/utils/Shared/Index31.css +1 -1
- package/buildLibs/utils/Shared/Index32.css +1 -1
- package/buildLibs/utils/Shared/Index33.css +1 -1
- package/buildLibs/utils/Shared/Index34.css +1 -1
- package/buildLibs/utils/Shared/Index35.css +1 -1
- package/buildLibs/utils/Shared/Index36.css +1 -1
- package/buildLibs/utils/Shared/Index37.css +1 -0
- package/buildLibs/utils/Shared/One.vue_vue_type_script_setup_true_lang-CR1t8XZl.js +2 -0
- package/buildLibs/utils/Shared/One.vue_vue_type_script_setup_true_lang-CR1t8XZl.js.map +1 -0
- package/buildLibs/utils/Shared/One.vue_vue_type_script_setup_true_lang-oBeFlRzi.js +148 -0
- package/buildLibs/utils/Shared/One.vue_vue_type_script_setup_true_lang-oBeFlRzi.js.map +1 -0
- package/buildLibs/utils/Shared/Validate.vue_vue_type_script_setup_true_lang-Bquk40ES.js +406 -0
- package/buildLibs/utils/Shared/Validate.vue_vue_type_script_setup_true_lang-Bquk40ES.js.map +1 -0
- package/buildLibs/utils/Shared/Validate.vue_vue_type_script_setup_true_lang-CAmKX5pn.js +2 -0
- package/buildLibs/utils/Shared/Validate.vue_vue_type_script_setup_true_lang-CAmKX5pn.js.map +1 -0
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-C9mOHVoE.js → use-CKNkvmW4.js} +78 -141
- package/buildLibs/utils/Shared/use-CKNkvmW4.js.map +1 -0
- package/buildLibs/utils/Shared/use-D0Yu2Dbn.js +2 -0
- package/buildLibs/utils/Shared/use-D0Yu2Dbn.js.map +1 -0
- package/buildLibs/utils/Web/ClAnchorNav.d.ts +3 -0
- package/buildLibs/utils/Web/ClCalendar.d.ts +3 -0
- package/buildLibs/utils/Web/ClCodeLegend.d.ts +3 -0
- package/buildLibs/utils/Web/ClColorpicker.d.ts +3 -0
- package/buildLibs/utils/Web/ClCropperPreview.cjs +1 -1
- package/buildLibs/utils/Web/ClCropperPreview.d.ts +3 -0
- package/buildLibs/utils/Web/ClCropperPreview.js +2 -2
- package/buildLibs/utils/Web/ClDatetime.cjs +1 -1
- package/buildLibs/utils/Web/ClDatetime.d.ts +3 -0
- package/buildLibs/utils/Web/ClDatetime.js +1 -1
- package/buildLibs/utils/Web/ClDropdownMenu.d.ts +3 -0
- package/buildLibs/utils/Web/ClDropdownMenuItem.cjs +2 -0
- package/buildLibs/utils/Web/ClDropdownMenuItem.cjs.map +1 -0
- package/buildLibs/utils/Web/ClDropdownMenuItem.css +1 -0
- package/buildLibs/utils/Web/ClDropdownMenuItem.d.ts +3 -0
- package/buildLibs/utils/Web/ClDropdownMenuItem.js +72 -0
- package/buildLibs/utils/Web/ClDropdownMenuItem.js.map +1 -0
- package/buildLibs/utils/Web/ClDropdownPopup.d.ts +3 -0
- package/buildLibs/utils/Web/ClEcharts.cjs +1 -1
- package/buildLibs/utils/Web/ClEcharts.d.ts +3 -0
- package/buildLibs/utils/Web/ClEcharts.js +1 -1
- package/buildLibs/utils/Web/ClEchartsLineAxisTag.cjs +1 -1
- package/buildLibs/utils/Web/ClEchartsLineAxisTag.d.ts +3 -0
- package/buildLibs/utils/Web/ClEchartsLineAxisTag.js +1 -1
- package/buildLibs/utils/Web/ClFileUpload.cjs +1 -1
- package/buildLibs/utils/Web/ClFileUpload.d.ts +3 -0
- package/buildLibs/utils/Web/ClFileUpload.js +1 -1
- package/buildLibs/utils/Web/ClFramePhone.d.ts +3 -0
- package/buildLibs/utils/Web/ClInputTag.cjs +1 -1
- package/buildLibs/utils/Web/ClInputTag.d.ts +3 -0
- package/buildLibs/utils/Web/ClInputTag.js +1 -1
- package/buildLibs/utils/Web/ClPaginate.cjs +1 -1
- package/buildLibs/utils/Web/ClPaginate.d.ts +3 -0
- package/buildLibs/utils/Web/ClPaginate.js +1 -1
- package/buildLibs/utils/Web/ClPortlet.d.ts +3 -0
- package/buildLibs/utils/Web/ClPreviewExample.cjs +1 -1
- package/buildLibs/utils/Web/ClPreviewExample.d.ts +3 -0
- package/buildLibs/utils/Web/ClPreviewExample.js +1 -1
- package/buildLibs/utils/Web/ClScrollXFence.cjs +1 -1
- package/buildLibs/utils/Web/ClScrollXFence.d.ts +3 -0
- package/buildLibs/utils/Web/ClScrollXFence.js +1 -1
- package/buildLibs/utils/Web/ClSelect.cjs +1 -1
- package/buildLibs/utils/Web/ClSelect.d.ts +3 -0
- package/buildLibs/utils/Web/ClSelect.js +1 -1
- package/buildLibs/utils/Web/ClSelectCascade.cjs +1 -1
- package/buildLibs/utils/Web/ClSelectCascade.d.ts +3 -0
- package/buildLibs/utils/Web/ClSelectCascade.js +1 -1
- package/buildLibs/utils/Web/ClSelectTag.cjs +1 -1
- package/buildLibs/utils/Web/ClSelectTag.d.ts +3 -0
- package/buildLibs/utils/Web/ClSelectTag.js +1 -1
- package/buildLibs/utils/Web/ClSelectTree.cjs +1 -1
- package/buildLibs/utils/Web/ClSelectTree.d.ts +3 -0
- package/buildLibs/utils/Web/ClSelectTree.js +1 -1
- package/buildLibs/utils/Web/ClSelectmove.d.ts +3 -0
- package/buildLibs/utils/Web/ClSidemenu.d.ts +3 -0
- package/buildLibs/utils/Web/ClTable.cjs +1 -1
- package/buildLibs/utils/Web/ClTable.cjs.map +1 -1
- package/buildLibs/utils/Web/ClTable.d.ts +3 -0
- package/buildLibs/utils/Web/ClTable.js +1081 -1218
- package/buildLibs/utils/Web/ClTable.js.map +1 -1
- package/buildLibs/utils/Web/ClTableEdit.d.ts +3 -0
- package/buildLibs/utils/Web/ClTableSimple.d.ts +3 -0
- package/buildLibs/utils/Web/ClTabs.cjs +1 -1
- package/buildLibs/utils/Web/ClTabs.d.ts +3 -0
- package/buildLibs/utils/Web/ClTabs.js +1 -1
- package/buildLibs/utils/Web/ClTree.cjs +1 -1
- package/buildLibs/utils/Web/ClTree.d.ts +3 -0
- package/buildLibs/utils/Web/ClTree.js +1 -1
- package/buildLibs/utils/Web/ClWeekhour.d.ts +3 -0
- package/buildLibs/utils/Web/ClXeditable.cjs +1 -1
- package/buildLibs/utils/Web/ClXeditable.cjs.map +1 -1
- package/buildLibs/utils/Web/ClXeditable.d.ts +3 -0
- package/buildLibs/utils/Web/ClXeditable.js +33 -32
- package/buildLibs/utils/Web/ClXeditable.js.map +1 -1
- package/buildLibs/web/index.cjs +2 -5
- package/buildLibs/web/index.css +1 -0
- package/buildLibs/web/index.js +76 -6
- package/docs/components/Element/Input.md +1 -1
- package/docs/components/Element/InputNumber.md +1 -1
- package/package.json +21 -8
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-B-yxIx8F.js +0 -663
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-B-yxIx8F.js.map +0 -1
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-C9mOHVoE.js.map +0 -1
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CcOk4kyd.js +0 -2
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CcOk4kyd.js.map +0 -1
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-DtZgYjSl.js +0 -2
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-DtZgYjSl.js.map +0 -1
- package/buildLibs/utils/Shared/Video-BV0YLYT2.js +0 -114
- package/buildLibs/utils/Shared/Video-BV0YLYT2.js.map +0 -1
- package/buildLibs/utils/Shared/Video-c3jHJSxl.js +0 -2
- package/buildLibs/utils/Shared/Video-c3jHJSxl.js.map +0 -1
- package/buildLibs/utils/Shared/Video.css +0 -1
- package/buildLibs/utils/Web/ClDropdownMenuM.css +0 -1
- package/buildLibs/utils/Web/ClPreview.cjs +0 -2
- package/buildLibs/utils/Web/ClPreview.cjs.map +0 -1
- package/buildLibs/utils/Web/ClPreview.css +0 -1
- package/buildLibs/utils/Web/ClPreview.js +0 -353
- package/buildLibs/utils/Web/ClPreview.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Index.vue_vue_type_script_setup_true_lang-DvzXfKhj.js","sources":["../../../src/libs/Web/InputTag/Input.vue","../../../src/libs/Web/InputTag/Dropdown.vue","../../../src/libs/Web/InputTag/Index.vue"],"sourcesContent":["<template>\n <div\n :class=\"clsParent\"\n :style=\"styParent\"\n @click.stop=\"onClickParent\"\n >\n <div v-if=\"multiple\">\n <div\n class=\"inputTag-tags\"\n :style=\"styTags\"\n >\n <cl-tags\n ref=\"refElTag\"\n :disabled=\"disabled\"\n :list=\"optTagsList\"\n @onRemove=\"onTagClearOne\"\n ></cl-tags>\n </div>\n <cl-textarea\n ref=\"refElTextarea\"\n v-show=\"!disabled\"\n height=\"24px\"\n :heightMax=\"textMaxHeight\"\n :disabled=\"disabled\"\n :placeholder=\"disabled ? '' : placeholder\"\n :isClean=\"false\"\n :isAutoHeight=\"true\"\n @onKeydownEnter=\"onTagEnterStart\"\n @onKeyupEnter=\"onTagEnterEnd\"\n @onFocus=\"onTagFocus\"\n @onBlur=\"onTagBlur\"\n @onChangeDelay=\"onInputChange\"\n ></cl-textarea>\n </div>\n <div v-else>\n <cl-input\n ref=\"refElInput\"\n v-model:value=\"optOneValue\"\n :placeholder=\"placeholder\"\n :isClean=\"false\"\n :disabled=\"disabled\"\n @onFocus=\"onInputFocus\"\n @onChangeDelay=\"onInputChange\"\n ></cl-input>\n </div>\n <div class=\"inputTag-operate\">\n <cl-badge\n v-if=\"isShowNum && multiple && optTagsValue.length > 1\"\n :num=\"optTagsValue.length\"\n ></cl-badge>\n <template v-else></template>\n <cl-icon-font\n v-if=\"optIsShowClean\"\n name=\"close-circle-fill\"\n className=\"inputTag-operate-btn\"\n aria-label=\"清空\"\n tabindex=\"0\"\n role=\"button\"\n @click.stop=\"onTagClearAll\"\n @keydown.enter.stop.prevent=\"onTagClearAll\"\n @keydown.space.stop.prevent=\"onTagClearAll\"\n ></cl-icon-font>\n <template v-else></template>\n <cl-clipboard\n v-if=\"isCopy && optIsValue\"\n className=\"inputTag-operate-btn\"\n :textLabel=\"optFunGetCopyTxt\"\n ></cl-clipboard>\n <template v-else></template>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { toRaw, inject, watch, nextTick, onMounted, computed, ref, reactive } from 'vue';\nimport CommonBase from '../../Common/base';\nimport ClBadge from '../../Element/Badge/Index.vue';\nimport ClTextarea from '../../Element/InputTextarea/Index.vue';\nimport ClTags from '../../Element/Tags/Index.vue';\nimport ClInput from '../../Element/Input/Index.vue';\nimport ClClipboard from '../../Element/Clipboard/Index.vue';\nimport ClIconFont from '../../Element/IconFont/Index.vue';\nimport type { InputTagTop } from './Index.vue';\n\n// 对齐 ClTags 的 TagItem 契约(getData 返回值):id/name 可选,允许附加字段\ninterface TagInfo {\n id?: string | number; // 标签唯一标识\n name?: string; // 标签显示文本\n [key: string]: any;\n}\n\ndefineOptions({ name: 'ClInputTagInput' });\n\nconst props = defineProps({\n value: String, // desc: 绑定值(joinKey 分隔的字符串)\n placeholder: String, // desc: 输入占位提示\n disabled: Boolean, // desc: 是否禁用\n isClean: {\n type: Boolean,\n default: true, // desc: 是否显示清空按钮\n },\n multiple: Boolean, // desc: 是否多选\n isCopy: Boolean, // desc: 是否启用复制按钮\n isCopyMultipleWrap: {\n type: Boolean,\n default: true, // desc: 多选复制时是否换行包裹\n },\n copyJoinKey: {\n type: String,\n default: ',', // desc: 复制时的拼接分隔符\n },\n minHeight: String, // desc: 输入区最小高度\n joinKey: {\n type: String,\n default: ',', // desc: 标签拼接分隔符\n },\n isDropdownLayer: {\n type: Boolean,\n default: true, // desc: 是否处于下拉容器模式(DropdownLayer 包裹)\n },\n textMaxHeight: String, // desc: 文本域最大高度\n tagsMaxHeight: String, // desc: 标签区最大高度\n isShowNum: Boolean, // desc: 是否显示标签数量角标\n});\n\nconst emit = defineEmits<{\n (e: 'onInit'): void; // desc: 初始化完成\n (e: 'onChange', value: string, preOper: string): void; // desc: 值变化回调,preOper 为操作来源\n (e: 'onChangeInput', value: string): void; // desc: 输入过程变化回调\n (e: 'onFocus', value: string): void; // desc: 聚焦回调\n}>();\n// kb: Enter 添加标签(onTagEnterStart/End):IME 组合态(isComposing/keyCode 229)与 Shift+Enter 换行放行;下拉高亮存在时(hoverValue 非空)不拦截,由 Dropdown 键盘监听消费选择并清空草稿;清空按钮聚焦时 Enter/Space 清空全部(R13-1 补全)\n// R-修复:多选禁用时 textarea 用 v-show 隐藏(非 v-if)——禁用切换不销毁重建,保留实例与草稿(G2-F7);禁用时输入区无意义(值在 tags 区),隐藏避免顶部空白行\n\nconst _selfTop = inject<InputTagTop>('$InputTagTop');\nconst refElTag = ref<InstanceType<typeof ClTags> | null>(null);\nconst refElTextarea = ref<InstanceType<typeof ClTextarea> | null>(null);\nconst refElInput = ref<InstanceType<typeof ClInput> | null>(null);\n\nconst optBase = reactive({\n isFocus: false,\n});\nconst optTagsList = ref<TagInfo[]>([]);\nconst optTagsValue = ref<string[]>([]);\nconst optOneValue = ref<string>('');\n\nconst optIsValue = computed(() => {\n return !CommonBase.isEmpty(optTagsValue.value) || !CommonBase.isEmpty(optOneValue.value);\n});\n\nconst optIsShowClean = computed(() => {\n return props.isClean && !props.disabled && optIsValue.value;\n});\n\nconst clsParent = computed(() => {\n const clsTemp: Record<string, boolean> = {\n 'dropdownLayer-text-container': props.isDropdownLayer,\n 'inputTag-container': true,\n 'inputTag-multiple': props.multiple,\n 'inputTag-focus': optBase.isFocus,\n };\n return clsTemp;\n});\n\nconst styParent = computed(() => {\n const sty: Record<string, string> = {};\n if (props.multiple) {\n if (props.disabled) {\n // 禁用时保底 40px(输入行 24px + 上下 padding 16px)替代 minHeight:内容不足 70px 时避免 min-height 撑出底部留白,\n // 无值时避免 16px 边框细条;40px 与「非禁用空值」高度一致(24px 输入行撑出的内容高),禁用态视觉呈正常空框\n sty['min-height'] = '40px';\n } else if (CommonBase.isNonEmptyString(props.minHeight) && optTagsValue.value.length > 0) {\n // 非禁用:仅当存在标签时才应用 minHeight——空值(无标签)时内容仅单行输入框,min-height 70px 会撑出底部空白;\n // 有标签时 minHeight 预留空间仍有意义\n sty['min-height'] = props.minHeight;\n }\n }\n return sty;\n});\n\nconst styTags = computed(() => {\n const sty: Record<string, string> = {};\n const { multiple, tagsMaxHeight } = props;\n if (multiple) {\n if (CommonBase.isNonEmptyString(tagsMaxHeight)) {\n sty['max-height'] = tagsMaxHeight;\n }\n }\n return sty;\n});\n\nconst _emitChange = (preOper = 'tag') => {\n const value = _getValue();\n emit('onChange', value, preOper);\n};\n\nconst _emitInit = () => {\n nextTick(() => {\n emit('onInit');\n });\n};\n\nconst _emitChangeInput = (value: string) => {\n emit('onChangeInput', value);\n};\n\nconst _emitFocus = (value: string) => {\n emit('onFocus', value);\n};\n\nconst optFunGetCopyTxt = () => {\n let v = '';\n if (props.multiple) {\n const joinKey = props.copyJoinKey + (props.isCopyMultipleWrap ? '\\n' : '');\n v = optTagsValue.value.join(joinKey);\n } else {\n v = optOneValue.value;\n }\n return v;\n};\n\nconst _getValue = () => {\n return props.multiple ? optTagsValue.value.join(props.joinKey || ',') : optOneValue.value;\n};\n\nconst _initValue = (value: string) => {\n if (CommonBase.isEmpty(value)) {\n optTagsList.value = [];\n optTagsValue.value = [];\n optOneValue.value = '';\n } else if (value !== _getValue()) {\n if (props.multiple) {\n const list: TagInfo[] = [];\n const arrValue: string[] = [];\n CommonBase.split(value, props.joinKey || ',').forEach((v: string) => {\n const tempValue = CommonBase.trim(v);\n if (!CommonBase.isEmpty(tempValue) && !CommonBase.isExistValue(arrValue, tempValue)) {\n list.push({ id: `inputTag_${CommonBase.getRandom(8)}`, name: tempValue });\n arrValue.push(tempValue);\n }\n });\n optTagsList.value = list;\n // G3-F1:getArrUnique 内部用 {} 做 hash,'constructor' 等 Object.prototype 键名会被静默丢弃 → 改用 Set(组件侧规避,工具层缺陷已记录)\n optTagsValue.value = Array.from(new Set(arrValue));\n } else {\n optOneValue.value = value;\n }\n }\n};\n\nconst _addTag = (value: string) => {\n const tempValue = CommonBase.trim(value);\n if (refElTag.value) {\n refElTag.value.addInfo({\n id: `inputTag_${CommonBase.getRandom(8)}`,\n name: tempValue,\n });\n }\n if (refElTextarea.value) {\n refElTextarea.value.initHeight();\n refElTextarea.value.setValue('');\n }\n};\n\nconst _focus = () => {\n if (props.multiple) {\n if (refElTextarea.value) {\n refElTextarea.value.focus();\n }\n } else {\n if (refElInput.value) {\n refElInput.value.focus();\n }\n }\n};\n\nconst _updateValue = (value: string, isSelect = true) => {\n if (props.multiple) {\n const arrValue = toRaw(optTagsValue.value);\n CommonBase.split(value, props.joinKey || ',').forEach((v: string) => {\n const tempName = CommonBase.trim(v);\n if (!CommonBase.isEmpty(tempName)) {\n if (isSelect) {\n _addTag(tempName);\n if (!CommonBase.isExistValue(arrValue, tempName)) {\n arrValue.push(tempName);\n }\n } else {\n const idx = optTagsList.value.findIndex((info: TagInfo) => info.name === tempName);\n if (idx > -1) {\n optTagsList.value.splice(idx, 1);\n }\n const idx2 = arrValue.indexOf(tempName);\n if (idx2 > -1) {\n arrValue.splice(idx2, 1);\n }\n }\n }\n });\n // G3-F1:同 _initValue,Set 去重规避 getArrUnique 的 {} hash 缺陷\n optTagsValue.value = Array.from(new Set(arrValue));\n } else {\n optOneValue.value = isSelect ? value : '';\n }\n // 仅多选模式选中后聚焦回输入区(继续添加标签);单选选中即完成,不聚焦——\n // 避免程序 _focus 触发的 focus 事件被 isFocusShowDrop 的 onInputFocus 当作用户主动聚焦而重新打开弹层(程序赋值不应触发「聚焦展示」)\n if (props.multiple) {\n _focus();\n }\n _emitChange('drop');\n};\n\nconst _initMain = () => {\n _initValue(props.value ?? '');\n _emitInit();\n};\n\nonMounted(() => {\n nextTick(() => {\n _initMain();\n });\n});\n\nwatch(\n () => props.value,\n (newValue, oldValue) => {\n if (newValue !== oldValue && newValue !== _getValue()) {\n _initValue(newValue ?? '');\n if (refElTextarea.value) {\n refElTextarea.value.setValue('');\n refElTextarea.value.initHeight();\n }\n }\n },\n);\n\n// G2-F7/G3-F4:disabled 切换不再清空文本域草稿(丢失用户输入);Textarea 的 disabled prop 响应式生效,无需额外处理\n\nconst onClickParent = (e: MouseEvent) => {\n if (props.multiple) {\n const elTextarea = refElTextarea.value ? refElTextarea.value.getParentElement() : null;\n // G3-F10/G4-F10:contains 已覆盖自身,冗余等值判断移除;空分支反写为单 if\n if (!elTextarea || !elTextarea.contains(e.target as Node)) {\n _focus();\n }\n } else {\n // G3-F2:单选模式点击容器聚焦\n _focus();\n }\n};\n\nconst onTagEnterStart = (e: KeyboardEvent) => {\n if (e.isComposing || e.keyCode === 229 || e.shiftKey) {\n return;\n }\n // G1-F2:_selfTop 缺失(Input 独立使用)时按无高亮处理,不落入 else 清空分支\n const hoverValue = _selfTop ? _selfTop.getListHoverValueKeydown() : '';\n if (CommonBase.isEmpty(hoverValue)) {\n e.preventDefault();\n e.stopPropagation();\n }\n};\n\nconst onTagEnterEnd = (e: KeyboardEvent) => {\n if (e.isComposing || e.keyCode === 229 || e.shiftKey) {\n return;\n }\n const value = (e.target as HTMLTextAreaElement).value;\n // G1-F2:同 onTagEnterStart,_selfTop 缺失按无高亮处理\n const hoverValue = _selfTop ? _selfTop.getListHoverValueKeydown() : '';\n if (CommonBase.isEmpty(hoverValue)) {\n e.preventDefault();\n e.stopPropagation();\n if (!CommonBase.isEmpty(value)) {\n const arrValue = toRaw(optTagsValue.value);\n let tempValue: string[] = [];\n if (CommonBase.isExistValue(value, '\\n')) {\n CommonBase.split(value, '\\n').forEach((v: string) => {\n if (!CommonBase.isEmpty(v)) {\n tempValue.push(...CommonBase.split(v, props.joinKey || ','));\n }\n });\n } else {\n tempValue = CommonBase.split(value, props.joinKey || ',');\n }\n tempValue.forEach((v: string) => {\n const tempName = CommonBase.trim(v);\n if (!CommonBase.isEmpty(tempName)) {\n _addTag(tempName);\n if (!CommonBase.isExistValue(arrValue, tempName)) {\n arrValue.push(tempName);\n }\n }\n });\n // G3-F1:同 _initValue,Set 去重规避 getArrUnique 的 {} hash 缺陷\n optTagsValue.value = Array.from(new Set(arrValue));\n _emitChange();\n }\n } else {\n if (refElTextarea.value) {\n refElTextarea.value.initHeight();\n refElTextarea.value.setValue('');\n }\n }\n};\n\nconst onTagFocus = () => {\n optBase.isFocus = true;\n // G1-F1:多选模式也补发 onFocus(Index onInputFocus 依赖该事件驱动 isFocusShowDrop 展开)\n _emitFocus(_getValue());\n};\n\nconst onTagBlur = () => {\n optBase.isFocus = false;\n};\n\nconst onTagClearOne = () => {\n // G4-F7/G1-F5:getData 判空(移除 : any 后编译期强制)\n if (!refElTag.value) {\n return;\n }\n const data = refElTag.value.getData();\n // G1-F3/G2-F1:同步 optTagsList——Tags 内部移除后不同步会导致残留项在下次渲染重现、取消选择定位错位\n // R13-2:isNonEmptyString 过滤无 name 项(TagInfo.name 契约可选),防 join 值混入 'undefined'\n optTagsValue.value = data\n .filter((info: TagInfo) => CommonBase.isNonEmptyString(info.name))\n .map((info: TagInfo) => info.name as string);\n optTagsList.value = data;\n // G2-F4:补发 onChangeInput('') 清空 Index searchValue,防搜索残留\n _emitChangeInput('');\n _emitChange();\n};\n\nconst onTagClearAll = () => {\n optTagsList.value = [];\n optTagsValue.value = [];\n optOneValue.value = '';\n // R13-3:与 setValue/watch 清理约定(G2-F5)统一——清空按钮同时清空文本域草稿,防残留输入\n if (refElTextarea.value) {\n refElTextarea.value.setValue('');\n refElTextarea.value.initHeight();\n }\n _emitChange();\n _focus();\n};\n\nconst onInputChange = (value: string) => {\n _emitChangeInput(value);\n};\n\nconst onInputFocus = () => {\n _emitFocus(optOneValue.value);\n};\n\nconst getValue = () => {\n return _getValue();\n};\n\nconst setValue = (value: string) => {\n // G2-F5:与 watch value 的清理行为统一(外部赋值同步标签后清空文本域草稿)\n _initValue(value);\n if (refElTextarea.value) {\n refElTextarea.value.setValue('');\n refElTextarea.value.initHeight();\n }\n};\n\nconst updateValue = (value: string, isSelect = true) => {\n _updateValue(value, isSelect);\n};\n\nconst focus = () => {\n _focus();\n};\n\nexport interface ClInputTagInputExpose {\n getValue: () => string;\n setValue: (value: string) => void;\n focus: () => void;\n updateValue: (value: string, isSelect?: boolean) => void;\n}\n\ndefineExpose({\n getValue,\n setValue,\n focus,\n updateValue,\n});\n</script>\n","<template>\n <div class=\"dropdownLayer-list-container\">\n <template v-if=\"!optBase.isRunLoading\">\n <div\n v-if=\"isSearch\"\n class=\"dropdownLayer-list-search\"\n >\n <cl-input-search\n ref=\"refElSearch\"\n :placeholder=\"searchPlaceholder\"\n @onChange=\"onSearch\"\n ></cl-input-search>\n </div>\n <template v-else></template>\n <div\n class=\"dropdownLayer-list-checkboxAll\"\n v-if=\"isMultiple && isCheckBoxAll\"\n >\n <cl-checkbox-one\n :forId=\"`${optKeyIndex}-cb-all`\"\n :label=\"optPageLanguage.checkboxAll\"\n :value=\"optAllValue\"\n @onChange=\"onSelectAll\"\n ></cl-checkbox-one>\n </div>\n <template v-else></template>\n <div\n class=\"dropdownLayer-list-body\"\n ref=\"refElList\"\n >\n <ul\n v-if=\"optShowData.length > 0\"\n role=\"listbox\"\n :aria-activedescendant=\"\n optHoverKeydown ? `${optKeyIndex}-opt-${optHoverKeydown}` : undefined\n \"\n >\n <li\n v-for=\"(dropInfo, inx) in optShowData\"\n :key=\"`${_keyIndex}-${dropInfo.id}-${inx}`\"\n :id=\"`${optKeyIndex}-opt-${dropInfo.id}`\"\n role=\"option\"\n :aria-selected=\"optSelectIdSet.has(dropInfo.id.toString())\"\n :aria-disabled=\"dropInfo.isDisabled\"\n :class=\"{\n 'option-selected': optSelectIdSet.has(dropInfo.id.toString()),\n 'option-disabled': dropInfo.isDisabled,\n 'option-hoverKeydown': optHoverKeydown === dropInfo.id.toString(),\n 'inputTag-dropdown-item-child': dropInfo._level >= 1,\n }\"\n :style=\"{ paddingLeft: dropInfo._level ? dropInfo._level * 20 + 'px' : undefined }\"\n @click=\"onSelectItem(dropInfo)\"\n @mouseenter=\"onHoverInItem(dropInfo)\"\n @mouseleave=\"onHoverOutItem(dropInfo)\"\n >\n <div>\n <div\n class=\"dropdownLayer-list-checkbox\"\n v-if=\"isMultiple\"\n >\n <cl-checkbox-one\n :name=\"`${optKeyIndex}-cb`\"\n :forId=\"`${optKeyIndex}-cb-${dropInfo.id}`\"\n :value=\"optSelectIdSet.has(dropInfo.id.toString())\"\n :disabled=\"dropInfo.isDisabled\"\n ></cl-checkbox-one>\n </div>\n <template v-else></template>\n <div\n class=\"dropdownLayer-list-title\"\n v-html=\"optFunShowTextLabel(dropInfo)\"\n ></div>\n </div>\n </li>\n </ul>\n <ul v-else>\n <li\n class=\"dropdownLayer-list-empty\"\n v-if=\"isShowEmptyLabel\"\n >\n {{ optPageLanguage.noResultsText }}\n </li>\n <template v-else></template>\n </ul>\n </div>\n </template>\n <div\n v-else\n class=\"inputTag-load\"\n >\n <cl-load-ing :isLoadIng=\"optBase.isRunLoading\"></cl-load-ing>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { inject, onMounted, onBeforeUnmount, nextTick, watch, computed, reactive, ref } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport ClInputSearch from '../../Element/InputSearch/Index.vue';\nimport ClCheckboxOne from '../../Element/CheckBox/One.vue';\nimport ClLoadIng from '../../Element/Load/Ing.vue';\nimport useLanguage from '../../Use/language';\nimport type { InputTagTop } from './Index.vue';\n\ndefineOptions({ name: 'ClDropdownlayerSearchList' });\n\nconst props = defineProps({\n isSearch: Boolean, // desc: 是否显示搜索框\n searchValue: String, // desc: 搜索关键字\n searchPlaceholder: String, // desc: 搜索框占位提示\n searchKey: {\n type: Array,\n default: () => {\n return ['name'];\n }, // desc: 搜索匹配的字段\n },\n searchKeyType: {\n type: String,\n default: '||', // desc: 搜索匹配方式 | enum: ||, &&\n validator: (value: string) => ['||', '&&'].indexOf(value) > -1,\n },\n isMultiple: Boolean, // desc: 是否多选\n isCheckBoxAll: Boolean, // desc: 是否显示全选\n showDropDownTextFormat: String, // desc: 下拉项文本格式化模板,${xxx} 格式\n showDropDownTextFormatSub: String, // desc: 二级下拉项文本格式化\n isCascade: Boolean, // desc: 是否启用二级级联\n parentSelectable: Boolean, // desc: 二级级联时父级是否可被选中\n parentKey: {\n type: String,\n default: 'parentId', // desc: 数据中标识父级的字段名\n },\n topParentValue: {\n type: String,\n default: '0', // desc: 顶级父节点的 parentKey 值\n },\n originalData: {\n type: Array,\n default: () => {\n return [];\n }, // desc: 原始候选数据列表\n },\n keyIndex: String, // desc: 唯一标识前缀(父组件传入)\n selectId: {\n type: Array,\n default: () => {\n return [];\n }, // desc: 已选中的 id 列表\n },\n isShowEmptyLabel: {\n type: Boolean,\n default: true, // desc: 无数据时是否显示空提示\n },\n isShowLoading: Boolean, // desc: 服务端搜索时是否显示加载中\n serverCallback: Function, // desc: 服务端搜索回调\n});\n\nconst emit = defineEmits<{\n (\n e: 'onChange',\n ids: string[],\n currentOperate: { id: string | string[]; isSelect: boolean },\n ): void; // desc: 选中项变化,ids 为选中 id 列表,currentOperate 为操作项\n (e: 'onSearchResult', info: { search: string; isEmpty: boolean }): void; // desc: 搜索完成回调\n (e: 'onError', msg: string): void; // desc: 服务端请求失败回调\n}>();\n// kb: 下拉展开期间监听 window 键盘事件(initOpenShow 注册/注销):Enter 确认高亮项、Up/Down 移动高亮、Esc/Left 无操作\n\nconst { optPageLanguage, getPageLanguage } = useLanguage();\ngetPageLanguage('common');\n\nconst _selfTop = inject<InputTagTop>('$InputTagTop');\n\n// R-7:移除 : any 覆盖注解,保留 ref 范型类型保护(ClInputSearch expose 已含 setValue,refElList 为 HTMLElement)\nconst refElSearch = ref<InstanceType<typeof ClInputSearch> | null>(null);\nconst refElList = ref<HTMLElement | null>(null);\n\n// R-5:_keyIndex 归位常量区首位(0x ⑦ 区序)\nconst _keyIndex = `inputtag-${CommonBase.getRandom(5)}`;\nlet _selectFirstIndex = 0;\nlet _prevScroll = 0;\nlet _searchToken = 0;\nlet _lastScrollTime = 0;\nlet _isKeyDownRegistered = false;\nlet _isUnmounted = false;\nconst _pageInfo = { start: -1, end: -1, limit: 50 };\n// 滚动分页阈值常量(G3-F10:魔法数字提具名;普通常量不用 props 的 desc: 标记)\nconst _SCROLL_TOP_THRESHOLD = 180; // 定位滚动触发阈值\nconst _SCROLL_TOP_OFFSET = 50; // 定位滚动偏移量\nconst _SCROLL_BOTTOM_LOAD = 100; // 底部预加载距离阈值\nconst _SCROLL_TOP_LOAD = 130; // 顶部预加载距离阈值\n\nconst optBase = reactive({\n isRunLoading: false,\n});\nconst optKeyIndex = `dropdownLayer-list-${props.keyIndex || _keyIndex}`;\nconst optHoverKeydown = ref('');\nconst optShowData = ref<any[]>([]);\nconst _optUseAllId = ref<string[]>([]);\n// R-5:_sanitizeList 移入内部方法区后,此处不可在声明前调用(TDZ)——初始值延后由 _initMain → _refreshData 赋值,首帧渲染仅依赖 optShowData 不受影响\nlet _showAllData: any[] = [];\nlet _showAllDataRaw: any[] = []; // R-4:级联模式原始数据累积(加载更多后重跑平铺用,非级联不维护)\nlet _isFirstOpen = false;\nconst _pageData = {\n isScrollLoadIng: false,\n};\n\nconst optAllValue = computed(() => {\n let b = false;\n const len = _optUseAllId.value.length;\n if (len > 0) {\n if (props.selectId.length >= _optUseAllId.value.length) {\n // selectId 归一化字符串后与 _optUseAllId(恒字符串)比较,数字 id 下全选判定一致(G1-03 同根)\n b = CommonBase.isContainArr(\n (props.selectId as any[]).map((id: any) => id.toString()),\n _optUseAllId.value,\n );\n }\n }\n return b;\n});\n\nconst optSelectIdSet = computed(\n () => new Set((props.selectId as any[]).map((id: any) => id.toString())),\n);\n\nconst _emitChange = (\n ids: string[],\n currentOperate: { id: string | string[]; isSelect: boolean },\n) => {\n emit('onChange', ids, currentOperate);\n};\n\nconst _emitFilterResult = (searchVaue: string, isEmpty: boolean) => {\n // 载荷归一化:值非字符串时兜底空串,保证 onSearchResult 契约 { search: string }(G4-F10)\n emit('onSearchResult', {\n search: CommonBase.isNonEmptyString(searchVaue) ? searchVaue : '',\n isEmpty,\n });\n};\n\nconst _emitError = (msg: string) => {\n emit('onError', msg);\n};\n\n// 清洗无效项(id 为字符串/数字且非空),防模板 dropInfo.id.toString() 与 getJsonByList 崩溃(G1-01/G4-F6 同根)\nconst _sanitizeList = (list: any[]): any[] => {\n if (CommonBase.isEmpty(list)) {\n return [];\n }\n return list.filter((item: any) => {\n if (!item) {\n return false;\n }\n const idOk =\n (CommonBase.isString(item.id) && !CommonBase.isEmpty(item.id)) ||\n (CommonBase.isNumber(item.id) && CommonBase.isFinite(item.id));\n return idOk;\n });\n};\n\nconst _getSearch = async (value: string) => {\n _searchToken++;\n const token = _searchToken;\n let list: any[] = [];\n if (props.serverCallback) {\n if (props.isShowLoading) {\n optBase.isRunLoading = true;\n }\n try {\n list = await props.serverCallback({ search: value, offset: 0 });\n if (token !== _searchToken) return;\n nextTick(() => {\n if (token !== _searchToken) return;\n optBase.isRunLoading = false;\n if (_selfTop) {\n _selfTop.convertListToJson(list);\n }\n nextTick(() => {\n _getSearchNext(value, list);\n });\n });\n } catch (e) {\n // 仅最新请求的失败才复位 loading 与报错,旧请求失败不干扰新请求状态(G2-F1)\n if (token === _searchToken) {\n optBase.isRunLoading = false;\n _emitError('服务端搜索失败,请稍后重试');\n }\n }\n } else {\n if (CommonBase.isEmpty(value)) {\n list = props.originalData as any[];\n _getSearchNext(value, list);\n } else if (CommonBase.isNonEmptyString(value)) {\n const tempSearch = value.toLowerCase();\n const searchKeyCount = props.searchKey.length;\n const arrSearchKey = props.searchKey as any[];\n props.originalData.forEach((info: any) => {\n const bb = [];\n for (let bi = 0; bi < searchKeyCount; bi++) {\n const bKeyValue = info[arrSearchKey[bi]];\n if (\n CommonBase.isNonEmptyString(bKeyValue) &&\n bKeyValue.toLowerCase().indexOf(tempSearch) > -1\n ) {\n bb.push(true);\n }\n }\n if (bb.length > 0) {\n switch (props.searchKeyType) {\n case '||':\n list.push(info);\n break;\n case '&&':\n if (bb.length === searchKeyCount) {\n list.push(info);\n }\n break;\n default:\n break;\n }\n }\n });\n _getSearchNext(value, list);\n }\n }\n};\n\nconst _getSearchNext = (value: string, list: any[]) => {\n // 级联处理:补全 + 平铺树;非级联经清洗,防模板 toString 崩溃(G1-01)\n if (props.isCascade) {\n if (!CommonBase.isEmpty(value)) {\n list = _cascadeSearchFill(list, props.originalData as any[]);\n }\n _showAllDataRaw = list; // R-4:级联搜索态原始累积同步(加载更多后重跑平铺用)\n list = _buildFlatList(list);\n } else {\n list = _sanitizeList(list);\n }\n _showAllData = list;\n optShowData.value = _getShowDataByStartEnd(0, _pageInfo.limit);\n if (refElList.value) {\n refElList.value.scrollTop = 0;\n }\n _setPageInfo(0, _pageInfo.limit);\n _setUseAllId();\n optHoverKeydown.value = '';\n _emitFilterResult(value, list.length === 0);\n};\n\nconst _setUseAllId = () => {\n const ids: string[] = [];\n // selectId 归一化字符串比较,数字初始 selectId 下全选判定一致(G1-03 同根补漏)\n const selectIdStrs = (props.selectId as any[]).map((id: any) => id.toString());\n _showAllData.forEach((info: any) => {\n if (CommonBase.isEmpty(info.id)) return;\n const id = info.id.toString();\n if (info.isDisabled) {\n if (CommonBase.isExistValue(selectIdStrs, id)) {\n ids.push(id);\n }\n } else {\n ids.push(id);\n }\n });\n _optUseAllId.value = ids;\n};\n\n// 级联:扁平数据 → 平铺树(带 _level, _parentName, _hasChildren)\nconst _buildFlatList = (list: any[]) => {\n const parentKey = (props.parentKey || 'parentId') as string;\n const topParentValue = (props.topParentValue || '0') as string;\n const childrenMap: Record<string, any[]> = {};\n list.forEach((item: any) => {\n if (CommonBase.isEmpty(item.id)) return;\n const pid = item[parentKey];\n // parentId 归一化字符串比较:数字 0 与字符串 '0' 均为顶级,避免顶级节点被丢弃(G1-02)\n if (!CommonBase.isEmpty(pid) && pid.toString() !== topParentValue) {\n const pidStr = pid.toString();\n if (!childrenMap[pidStr]) childrenMap[pidStr] = [];\n childrenMap[pidStr].push(item);\n }\n });\n const result: any[] = [];\n const topNodes = list.filter((item: any) => {\n if (CommonBase.isEmpty(item.id)) return false;\n const pid = item[parentKey];\n return CommonBase.isEmpty(pid) || pid.toString() === topParentValue;\n });\n // 环检测:任意节点至多作为父级展开一次,避免脏数据(环)导致无限递归\n const expandedIds = new Set<string>();\n const traverseSafe = (nodes: any[], level: number, parentName: string) => {\n nodes.forEach((node: any) => {\n const id = node.id.toString();\n if (expandedIds.has(id)) return;\n expandedIds.add(id);\n const children = childrenMap[id] || [];\n result.push({\n ...node,\n _level: level,\n _parentName: parentName,\n _hasChildren: children.length > 0,\n // parentSelectable 契约:级联父级(有子级项)不可选中时置为禁用\n isDisabled: node.isDisabled || (children.length > 0 && !props.parentSelectable),\n });\n if (children.length > 0) {\n traverseSafe(children, level + 1, node.name);\n }\n });\n };\n traverseSafe(topNodes, 0, '');\n return result;\n};\n\n// 级联搜索补全:子级补全所有祖先链,父级补所有子级\nconst _cascadeSearchFill = (filteredList: any[], allData: any[]) => {\n const parentKey = (props.parentKey || 'parentId') as string;\n const topParentValue = (props.topParentValue || '0') as string;\n const idToItem: Record<string, any> = {};\n const childrenMap: Record<string, string[]> = {};\n allData.forEach((item: any) => {\n if (CommonBase.isEmpty(item.id)) return;\n const id = item.id.toString();\n idToItem[id] = item;\n const pid = item[parentKey];\n // 与 _buildFlatList 同口径:parentId 归一化字符串比较(G1-02)\n if (!CommonBase.isEmpty(pid) && pid.toString() !== topParentValue) {\n if (!childrenMap[pid.toString()]) childrenMap[pid.toString()] = [];\n childrenMap[pid.toString()].push(id);\n }\n });\n const resultIds = new Set<string>();\n const filteredIds = new Set<string>();\n filteredList.forEach((item: any) => {\n if (CommonBase.isEmpty(item.id)) return;\n filteredIds.add(item.id.toString());\n });\n // 向上补齐完整祖先链(≥3 层级联时保证层级完整,避免父节点被 _buildFlatList 丢弃)\n const fillAncestors = (id: string) => {\n let cur = idToItem[id];\n let guard = 0;\n while (cur && guard < 100) {\n resultIds.add(cur.id.toString());\n const pid = cur[parentKey];\n if (CommonBase.isEmpty(pid) || pid.toString() === topParentValue) break;\n cur = idToItem[pid.toString()];\n guard++;\n }\n };\n filteredList.forEach((item: any) => {\n if (CommonBase.isEmpty(item.id)) return;\n const id = item.id.toString();\n fillAncestors(id);\n if (childrenMap[id]) {\n childrenMap[id].forEach((childId: string) => {\n resultIds.add(childId);\n });\n }\n });\n return allData.filter((item: any) => {\n if (CommonBase.isEmpty(item.id)) return false;\n return resultIds.has(item.id.toString());\n });\n};\n\nconst _getShowDataByStartEnd = (start: number, end: number) => {\n const list: any[] = [];\n const len = _showAllData.length;\n const s = start < 0 ? 0 : start;\n const e = end <= len ? end : len;\n if (s < e) {\n for (let i = s; i < e; i++) {\n list.push(_showAllData[i]);\n }\n }\n return list;\n};\n\nconst _getShowDataByOffset = (offset: number, direction: string) => {\n let s = 0;\n let e = 0;\n switch (direction) {\n case 'prev':\n s = offset - _pageInfo.limit;\n e = offset;\n break;\n case 'next':\n s = offset;\n e = s + _pageInfo.limit;\n break;\n default:\n break;\n }\n return _getShowDataByStartEnd(s, e);\n};\n\nconst _setPageInfo = (start: number, end: number) => {\n let s = _pageInfo.start;\n if (s === -1 || start < s) {\n s = start;\n }\n s = s <= 0 ? 0 : s;\n\n let e = _pageInfo.end;\n if (end > e) {\n e = end;\n }\n e = end <= _showAllData.length ? end : _showAllData.length;\n\n _pageInfo.start = s;\n _pageInfo.end = e;\n};\n\nconst _initData = () => {\n let tempSelectIndx = -1;\n let tempSelectId = '';\n if (!CommonBase.isEmpty(props.selectId)) {\n // R-2:selectId 归一化字符串后比较,数字 selectId 下初始选中定位生效(G1-03 同根补漏)\n const selectIdStrs = (props.selectId as any[]).map((s: any) => s.toString());\n _showAllData.some((info: any, i: number) => {\n if (CommonBase.isEmpty(info.id)) return false;\n const id = info.id.toString();\n const equal = CommonBase.isExistValue(selectIdStrs, id);\n if (equal) {\n tempSelectIndx = i;\n tempSelectId = id;\n }\n return equal;\n });\n }\n let start = 0;\n let end = 0;\n if (tempSelectIndx === -1) {\n _selectFirstIndex = 0;\n start = 0;\n end = _pageInfo.limit;\n } else {\n const pageSpace = 1;\n start = tempSelectIndx - _pageInfo.limit * pageSpace;\n end = tempSelectIndx + _pageInfo.limit * pageSpace;\n }\n\n optShowData.value = _getShowDataByStartEnd(start, end);\n // R-3:窗口重置直接赋值(_setPageInfo 只收缩不扩展,选中项后移时 start 卡旧值 → 上滚分页判断恒 false 数据断层)\n _pageInfo.start = start <= 0 ? 0 : start;\n _pageInfo.end = end >= _showAllData.length ? _showAllData.length : end;\n if (!CommonBase.isEmpty(tempSelectId)) {\n optShowData.value.some((info: any, i: number) => {\n // 与第一次 some 同口径判空(G4-F5)\n if (CommonBase.isEmpty(info.id)) return false;\n const equal = info.id.toString() === tempSelectId;\n if (equal) {\n _selectFirstIndex = i;\n }\n return equal;\n });\n }\n};\n\nconst _initScrollSelect = (inx: number) => {\n nextTick(() => {\n const elList = refElList.value;\n if (!elList || !elList.children[0]) return;\n if (inx > 0) {\n // R-7 连带:children 返回 Element 无 offsetTop,断言 HTMLElement\n const elLi = elList.children[0].children[inx] as HTMLElement;\n elList.scrollTop = elLi\n ? elLi.offsetTop > _SCROLL_TOP_THRESHOLD\n ? elLi.offsetTop - _SCROLL_TOP_OFFSET\n : 0\n : 0;\n } else {\n elList.scrollTop = 0;\n }\n });\n};\n\nconst _refreshData = () => {\n if (props.isCascade) {\n _showAllDataRaw = _sanitizeList(props.originalData);\n _showAllData = _buildFlatList(_showAllDataRaw);\n } else {\n _showAllData = _sanitizeList(props.originalData);\n }\n _initData();\n nextTick(() => {\n // 初始 searchValue 非空时保留搜索框内容与搜索态,仅空值场景清空(G1-07/G2-F4)\n if (CommonBase.isEmpty(props.searchValue)) {\n if (refElSearch.value) {\n refElSearch.value.setValue('');\n }\n if (refElList.value) {\n _initScrollSelect(_selectFirstIndex);\n }\n }\n });\n};\n\nconst _onScrollData = async (e: Event) => {\n // 时间戳节流:scroll 高频触发,150ms 内只处理一次\n const now = Date.now();\n const elScroll = e.target as HTMLElement;\n const scrollTop = elScroll.scrollTop;\n if (now - _lastScrollTime < 150) {\n // 节流窗口内同步滚动位置基准,避免窗口结束后方向判断用旧值误触发(G2-F7)\n _prevScroll = scrollTop;\n return;\n }\n _lastScrollTime = now;\n const scrollHeight = elScroll.offsetHeight;\n // 空数据分支(ul 无 li)不处理分页,同步基准后返回(G3-F7)\n if (!elScroll.children[0]) {\n _prevScroll = scrollTop;\n return;\n }\n const childHeight = (elScroll.children[0] as HTMLElement).offsetHeight;\n if (scrollTop > _prevScroll) {\n if (\n scrollTop + scrollHeight + _SCROLL_BOTTOM_LOAD > childHeight &&\n !_pageData.isScrollLoadIng\n ) {\n _pageData.isScrollLoadIng = true;\n if (_pageInfo.end >= _showAllData.length) {\n if (props.serverCallback) {\n // 捕获 token + 搜索词(不递增):新搜索发起时 _getSearch 递增 token 单向作废本响应,防串台与污染父数据(G2-F2)\n const token = _searchToken;\n const searchValue = props.searchValue;\n const param: any = {\n offset: _showAllData.length,\n };\n if (!CommonBase.isEmpty(searchValue)) {\n param.search = searchValue;\n }\n try {\n const nextList = await props.serverCallback(param);\n if (_isUnmounted) return;\n if (token === _searchToken && props.searchValue === searchValue) {\n if (props.isCascade) {\n // R-4:级联模式累积原始数据后重跑平铺,新页项保持 _level 缩进与 parentSelectable 禁用契约\n _showAllDataRaw.push(..._sanitizeList(nextList));\n _showAllData = _buildFlatList(_showAllDataRaw);\n } else {\n _showAllData.push(..._sanitizeList(nextList));\n }\n _setUseAllId();\n if (_selfTop) {\n // R-1:重建语义传完整累积(原传增量 nextList 会清空旧页 id→name 映射,选中旧页项静默丢标签)\n _selfTop.convertListToJson(_showAllData);\n }\n }\n } catch (e) {\n // 仅未被新搜索作废的请求失败才报错(G2-F1 同根补漏)\n if (token === _searchToken) {\n _emitError('服务端加载更多失败,请稍后重试');\n }\n }\n }\n }\n if (_pageInfo.end < _showAllData.length) {\n const nextList = _getShowDataByOffset(_pageInfo.end, 'next');\n optShowData.value.push(...nextList);\n _setPageInfo(_pageInfo.start, _pageInfo.end + _pageInfo.limit);\n }\n _pageData.isScrollLoadIng = false;\n }\n } else {\n if (scrollTop < _SCROLL_TOP_LOAD && _pageInfo.start > 0) {\n const prevList = _getShowDataByOffset(_pageInfo.start, 'prev');\n const prevLen = prevList.length;\n if (prevLen > 0) {\n optShowData.value.unshift(...prevList);\n _setPageInfo(_pageInfo.start - _pageInfo.limit, _pageInfo.end);\n nextTick(() => {\n // 卸载竞态/渲染窗口不同步时判空(G1-05/G2-F3/G4-F4)\n const elList = refElList.value;\n if (!elList || !elList.children[0]) return;\n let h = 0;\n const children = elList.children[0].children;\n for (let pi = 0; pi < prevLen; pi++) {\n if (!children[pi]) break;\n h += (children[pi] as HTMLElement).offsetHeight;\n }\n elList.scrollTop += h;\n });\n }\n }\n }\n _prevScroll = scrollTop;\n};\n\nconst _firstOpenInit = () => {\n if (_isFirstOpen) return;\n nextTick(() => {\n if (refElList.value) {\n refElList.value.addEventListener('scroll', _onScrollData);\n _isFirstOpen = true;\n }\n // refElList 为 null(loading 态)时不置锁,数据到达后重试注册\n });\n};\n\nconst optFunShowTextLabel = (info: any) => {\n let format = props.showDropDownTextFormat as string;\n if (info._level >= 1 && !CommonBase.isEmpty(props.showDropDownTextFormatSub)) {\n format = props.showDropDownTextFormatSub as string;\n }\n if (CommonBase.isEmpty(format)) {\n // name 非字符串(数字等)时兜底 String(),避免 null/undefined 渲染 'null' 文本(G1-08)\n if (CommonBase.isEmpty(info.name)) return '';\n const name = info.name;\n return CommonBase.isString(name) ? CommonBase.encodeHTML(name) : String(name);\n }\n return CommonBase.convertStringFormatEncodeHTML(format, info);\n};\n\nconst _getSelectIds = (id: string) => {\n const newIds: string[] = [];\n if (props.isMultiple) {\n // sId 归一化字符串后与 id 比较,数字 id 下 toggle 生效(G1-03 同根)\n (props.selectId as any[]).forEach((sId: any) => {\n if (sId.toString() !== id) {\n newIds.push(sId);\n }\n });\n // R-2:同上方 forEach 归一化口径,数字 selectId 下取消操作不误判为未选(G1-03 同根补漏)\n if (\n !CommonBase.isExistValue(\n (props.selectId as any[]).map((s: any) => s.toString()),\n id,\n )\n ) {\n newIds.push(id);\n }\n } else {\n newIds.push(id);\n }\n return newIds;\n};\n\nconst _setHover = (operateType: number) => {\n const data = optShowData.value;\n if (data.length === 0) {\n optHoverKeydown.value = '';\n return;\n }\n let inx = -1;\n const lastHover = optHoverKeydown.value;\n if (lastHover.length > 0) {\n data.forEach((info: any, i: number) => {\n if (info.id.toString() === lastHover) {\n inx = i;\n }\n });\n inx += operateType;\n if (inx < 0) {\n inx = 0;\n } else if (inx >= data.length) {\n inx = data.length - 1;\n }\n } else {\n inx = 0;\n }\n optHoverKeydown.value = CommonBase.isEmpty(data[inx].id) ? '' : data[inx].id.toString();\n _initScrollSelect(inx);\n};\n\nconst _onWinKeydown = (e: any) => {\n // C12-4:IME 组合态(isComposing/keyCode 229)放行,候选窗方向键/确认键不被 window 拦截消费\n if (e.isComposing || e.keyCode === 229) {\n return;\n }\n let keyCode = e.keyCode;\n if (!CommonBase.isUndefined(keyCode)) {\n keyCode = keyCode.toString();\n switch (keyCode) {\n case '13': // Enter\n if (e.shiftKey) {\n break; // Shift+Enter 换行放行(G2-F3 跨文件补:Input 的 shiftKey 守卫覆盖不到被 window 拦截的路径)\n }\n e.preventDefault();\n e.stopPropagation();\n break;\n case '38': // Up\n e.preventDefault();\n e.stopPropagation();\n _setHover(-1);\n break;\n case '40': // Down\n e.preventDefault();\n e.stopPropagation();\n _setHover(1);\n break;\n default:\n break;\n }\n }\n};\n\nconst _onWinKeyup = (e: any) => {\n // C11-4:同 keydown 侧 IME 守卫(老 IE 序列 keydown 229 + keyup 13 不误触发选择)\n if (e.isComposing || e.keyCode === 229) {\n return;\n }\n let keyCode = e.keyCode;\n if (!CommonBase.isUndefined(keyCode)) {\n keyCode = keyCode.toString();\n switch (keyCode) {\n case '27': // Esc\n // C12-1:Esc 关闭下拉(走 Base 关闭动画 + initOpenShow 注销监听;_selfTop 缺失时静默)\n if (_selfTop) {\n _selfTop.setDropdownOpen(false);\n }\n break;\n case '13': // Enter\n if (e.shiftKey) {\n break; // Shift+Enter 换行放行(G2-F3 跨文件补:keyup 时 shift 仍按住,不触发选择)\n }\n const id = optHoverKeydown.value;\n if (!CommonBase.isEmpty(id)) {\n // 键盘路径与鼠标路径同守卫:禁用项不可被 Enter 选中(G3-F2)\n const hoverInfo = optShowData.value.find((info: any) => info.id.toString() === id);\n if (hoverInfo && !hoverInfo.isDisabled) {\n const newIds: string[] = _getSelectIds(id);\n _emitChange(newIds, {\n id,\n // R3-F1:isSelect = 操作后该项处于选中态(未选 → true 添加;已选 → false 移除)。原 indexOf>0 语义反了:点未选项走移除、点已选项走添加,选择/取消全挂(第三轮浏览器验证暴露)\n isSelect: (props.selectId as any[]).map((s: any) => s.toString()).indexOf(id) === -1,\n });\n }\n }\n break;\n case '37': // Left\n break;\n default:\n break;\n }\n }\n};\n\nconst _initMain = () => {\n _refreshData();\n _setUseAllId();\n _firstOpenInit();\n const { searchValue } = props;\n if (CommonBase.isNonEmptyString(searchValue)) {\n _getSearch(searchValue);\n }\n};\n\nonMounted(() => {\n _initMain();\n});\n\nonBeforeUnmount(() => {\n // 兜底清理:父组件未显式关闭时移除 window 键盘监听与列表 scroll 监听\n _isUnmounted = true;\n CommonElement.offListener(window, 'keydown', _onWinKeydown, true);\n CommonElement.offListener(window, 'keyup', _onWinKeyup, true);\n _isKeyDownRegistered = false;\n if (refElList.value) {\n refElList.value.removeEventListener('scroll', _onScrollData);\n }\n});\n\nwatch(\n () => props.originalData,\n newValue => {\n if (props.isCascade) {\n _showAllDataRaw = _sanitizeList(newValue);\n _showAllData = _buildFlatList(_showAllDataRaw);\n } else {\n _showAllData = _sanitizeList(newValue);\n }\n // 数据刷新后重跑选中项定位(_initData 内含窗口重算),选中项位置跟随新数据(G1-06)\n _initData();\n _setUseAllId();\n // loading 态首次注册失败的场景,数据到达后重试注册 scroll 监听\n _firstOpenInit();\n },\n);\n\nwatch(\n () => props.searchValue,\n (newValue: any) => {\n // 无条件触发:清空(空串)时走 _getSearch 空值分支恢复全量列表\n _getSearch(newValue);\n },\n);\n\nconst onSearch = (value: string) => {\n _getSearch(value);\n};\n\nconst onSelectAll = (e: any) => {\n if (!e || !props.isMultiple) return;\n // selectId 归一化字符串比较,数字初始 selectId 下取消全选生效(G1-03 同根补漏)\n const selectIdStrs = (props.selectId as any[]).map((id: any) => id.toString());\n // 禁用项集合:取消全选不误删已选 disabled 项(G1-04)\n const disabledIds = new Set<string>();\n _showAllData.forEach((info: any) => {\n if (info.isDisabled && !CommonBase.isEmpty(info.id)) {\n disabledIds.add(info.id.toString());\n }\n });\n const totalIds: string[] = [];\n const addIds: string[] = [];\n const delIds: string[] = [];\n _optUseAllId.value.forEach((id: string) => {\n if (e.value) {\n if (!CommonBase.isExistValue(selectIdStrs, id)) {\n addIds.push(id);\n }\n } else {\n if (CommonBase.isExistValue(selectIdStrs, id) && !disabledIds.has(id)) {\n delIds.push(id);\n }\n }\n totalIds.push(id);\n });\n const newIds: any[] = CommonBase.getArrClone(props.selectId);\n if (delIds.length > 0) {\n delIds.forEach((id: string) => {\n // indexOf 严格比较在数字 id 下返回 -1(误删末项),改用归一化 findIndex(G1-03 同根补漏)\n const idx = newIds.findIndex((s: any) => s.toString() === id);\n if (idx > -1) {\n newIds.splice(idx, 1);\n }\n });\n }\n if (addIds.length > 0) {\n newIds.push(...addIds);\n }\n _emitChange(newIds, { id: totalIds, isSelect: e.value });\n};\n\nconst onSelectItem = (info: any) => {\n if (!info.isDisabled && !CommonBase.isEmpty(info.id)) {\n const id = info.id.toString();\n const newIds: string[] = _getSelectIds(id);\n _emitChange(newIds, {\n id,\n // R3-F1:同键盘路径,isSelect = 操作后选中态(未选 → true;已选 → false)\n isSelect: (props.selectId as any[]).map((s: any) => s.toString()).indexOf(id) === -1,\n });\n }\n};\n\nconst onHoverInItem = (info: any) => {\n if (!info || CommonBase.isEmpty(info.id)) return;\n optHoverKeydown.value = info.id.toString();\n};\n\nconst onHoverOutItem = (info: any) => {\n if (!info || CommonBase.isEmpty(info.id)) return;\n if (optHoverKeydown.value === info.id.toString()) {\n optHoverKeydown.value = '';\n }\n};\n\nconst initOpenShow = (isOpen: boolean) => {\n // 注册状态标志:重复打开不重复注册、重复关闭不重复注销(G2-F5)\n if (isOpen) {\n if (!_isKeyDownRegistered) {\n CommonElement.onListener(window, 'keydown', _onWinKeydown, true);\n CommonElement.onListener(window, 'keyup', _onWinKeyup, true);\n _isKeyDownRegistered = true;\n }\n } else {\n if (_isKeyDownRegistered) {\n CommonElement.offListener(window, 'keydown', _onWinKeydown, true);\n CommonElement.offListener(window, 'keyup', _onWinKeyup, true);\n _isKeyDownRegistered = false;\n }\n }\n};\n\nconst getHoverKeydown = () => {\n return optHoverKeydown.value;\n};\n\nexport interface ClDropdownlayerSearchListExpose {\n initOpenShow: (isOpen: boolean) => void;\n getHoverKeydown: () => string;\n}\n\ndefineExpose({\n initOpenShow,\n getHoverKeydown,\n});\n</script>\n","<template>\n <cl-dropdownlayer-list\n v-if=\"isAutofill\"\n ref=\"refElDropdownLayer\"\n :id=\"elId\"\n :classParent=\"clsParent\"\n :classDropDown=\"clsDropdown\"\n :transitionLeave=\"'inputTag-dropdown-leave'\"\n @onChangeOpen=\"onToggleOpen\"\n >\n <template v-slot:labelCustom>\n <cl-input-tag-input\n ref=\"refElInput\"\n :value=\"value\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :isClean=\"isClean\"\n :multiple=\"multiple\"\n :minHeight=\"minHeight\"\n :joinKey=\"joinKey\"\n :isCopy=\"isCopy\"\n :isCopyMultipleWrap=\"isCopyMultipleWrap\"\n :copyJoinKey=\"copyJoinKey\"\n :isDropdownLayer=\"true\"\n :textMaxHeight=\"textMaxHeight\"\n :tagsMaxHeight=\"tagsMaxHeight\"\n :isShowNum=\"isShowNum\"\n @onChange=\"onSelected\"\n @onChangeInput=\"onInputSearch\"\n @onInit=\"onInitComplete\"\n @onFocus=\"onInputFocus\"\n ></cl-input-tag-input>\n </template>\n <template v-slot:dropdown>\n <cl-input-tag-dropdown\n ref=\"refElList\"\n :keyIndex=\"optBase.keyIndex\"\n :isSearch=\"false\"\n :searchValue=\"optBase.searchValue\"\n :searchKey=\"searchKey\"\n :searchKeyType=\"searchKeyType\"\n :isMultiple=\"false\"\n :showDropDownTextFormat=\"showDropDownTextFormat\"\n :showDropDownTextFormatSub=\"showDropDownTextFormatSub\"\n :isCascade=\"isCascade\"\n :parentSelectable=\"parentSelectable\"\n :parentKey=\"parentKey\"\n :topParentValue=\"topParentValue\"\n :isShowEmptyLabel=\"false\"\n :originalData=\"list\"\n :selectId=\"optBase.dropdownSelectId\"\n :serverCallback=\"serverCallback\"\n :isShowLoading=\"isShowLoading\"\n @onSearchResult=\"onDropSearchResult\"\n @onChange=\"onDropSelect\"\n @onError=\"onDropError\"\n ></cl-input-tag-dropdown>\n </template>\n </cl-dropdownlayer-list>\n <div\n v-else\n :class=\"clsParent\"\n :id=\"elId\"\n >\n <cl-input-tag-input\n ref=\"refElInput\"\n :value=\"value\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :isClean=\"isClean\"\n :multiple=\"multiple\"\n :minHeight=\"minHeight\"\n :joinKey=\"joinKey\"\n :isCopy=\"isCopy\"\n :isCopyMultipleWrap=\"isCopyMultipleWrap\"\n :copyJoinKey=\"copyJoinKey\"\n :isDropdownLayer=\"false\"\n :textMaxHeight=\"textMaxHeight\"\n :tagsMaxHeight=\"tagsMaxHeight\"\n :isShowNum=\"isShowNum\"\n @onChange=\"onSelected\"\n @onChangeInput=\"onInputSearch\"\n @onInit=\"onInitComplete\"\n @onFocus=\"onInputFocus\"\n ></cl-input-tag-input>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { provide, watch, nextTick, onMounted, computed, ref, reactive } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport ClDropdownlayerList from '../DropdownLayer/List.vue';\nimport ClInputTagInput from './Input.vue';\nimport ClInputTagDropdown from './Dropdown.vue';\nimport './index.css';\n\n// F3:类型定义归位 ② 类型区(原穿插在常量区,0x 违规)\ninterface ListItemJson {\n [key: string]: any;\n}\n\ninterface PageData {\n listNameJson: ListItemJson;\n listIdJson: ListItemJson;\n}\n\ndefineOptions({ name: 'ClInputTag' });\n\nconst props = defineProps({\n id: String, // desc: 组件实例唯一标识,不传自动生成\n value: String, // desc: 绑定值(joinKey 分隔的字符串)\n className: String, // desc: 自定义CSS类名\n placeholder: String, // desc: 输入占位提示\n disabled: Boolean, // desc: 是否禁用\n isClean: {\n type: Boolean,\n default: true, // desc: 是否显示清空按钮\n },\n multiple: {\n type: Boolean,\n default: true, // desc: 是否多选\n },\n isCopy: Boolean, // desc: 是否启用复制按钮\n isCopyMultipleWrap: {\n type: Boolean,\n default: true, // desc: 多选复制时是否换行包裹\n },\n copyJoinKey: {\n type: String,\n default: ',', // desc: 复制时的拼接分隔符\n },\n minHeight: {\n type: String,\n default: '70px', // desc: 输入区最小高度\n },\n joinKey: {\n type: String,\n default: ',', // desc: 标签拼接分隔符\n },\n isAutofill: Boolean, // desc: 是否启用下拉模式(DropdownLayer 包裹)\n list: {\n type: Array,\n default: () => {\n return []; // desc: 候选数据列表(id/name 结构)\n },\n },\n searchKey: {\n type: Array,\n default: () => {\n return ['name']; // desc: 搜索匹配的字段\n },\n },\n searchKeyType: {\n type: String,\n default: '||', // desc: 搜索匹配方式 | enum: ||, &&\n validator: (value: string) => ['||', '&&'].indexOf(value) > -1,\n },\n showDropDownTextFormat: String, // desc: 下拉项文本格式化模板,${xxx} 格式\n showDropDownTextFormatSub: String, // desc: 二级下拉项文本格式化,${xxx} 格式\n isCascade: Boolean, // desc: 是否启用二级级联\n parentSelectable: Boolean, // desc: 二级级联时父级是否可被选中\n parentKey: {\n type: String,\n default: 'parentId', // desc: 数据中标识父级的字段名\n },\n topParentValue: {\n type: String,\n default: '0', // desc: 顶级父节点的 parentKey 值\n },\n isFocusShowDrop: Boolean, // desc: 聚焦时是否展示下拉\n textMaxHeight: String, // desc: 文本域最大高度\n tagsMaxHeight: String, // desc: 标签区最大高度\n isShowNum: Boolean, // desc: 是否显示标签数量角标\n isShowLoading: Boolean, // desc: 服务端搜索时是否显示加载中\n serverCallback: Function, // desc: 服务端搜索回调\n});\n\nconst emit = defineEmits<{\n (e: 'onInit'): void; // desc: 初始化完成\n (e: 'update:value', value: string): void; // desc: 值变化(v-model 绑定)\n (e: 'onChange', value: string, preOper?: string): void; // desc: 值变化回调,preOper 为操作来源\n (e: 'onError', msg: string): void; // desc: 服务端请求失败回调\n}>();\n\nconst elId = props.id; // || `inputTag-${CommonBase.getRandom(N)}`\n\n// F2:移除 : any 覆盖注解,保留 ref 范型类型保护(被调用方 expose 均已声明类型)\nconst refElDropdownLayer = ref<InstanceType<typeof ClDropdownlayerList> | null>(null);\nconst refElInput = ref<InstanceType<typeof ClInputTagInput> | null>(null);\nconst refElList = ref<InstanceType<typeof ClInputTagDropdown> | null>(null);\n\nconst optBase = reactive({\n keyIndex: `inputTag-${CommonBase.getRandom(8)}`,\n searchValue: '',\n dropdownSelectId: [] as string[],\n isUseData: false,\n});\n\nconst _pageData: PageData = {\n listNameJson: {},\n listIdJson: {},\n};\n\nconst clsParent = computed(() => {\n let cls: Record<string, boolean> = {\n 'panel-inputtag': true,\n 'box-width': true,\n 'inputTag-disabled': props.disabled,\n };\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n return CommonBase.getStringByJson(cls, ' ');\n});\n\nconst clsDropdown = computed(() => {\n let cls = 'inputTag-dropdown ';\n if (!optBase.isUseData) {\n cls += ' inputTag-dropdown-nodata ';\n }\n return cls;\n});\n\nconst _emitChange = (value: string, preOper = '') => {\n emit('update:value', value);\n emit('onChange', value, preOper);\n};\n\nconst _emitInit = () => {\n nextTick(() => {\n emit('onInit');\n });\n};\n\nconst _convertListToJson = (list: any[]) => {\n const isEmpty = CommonBase.isEmpty(list);\n // 清洗无效项(id 为字符串/数字且非空、name 为字符串/数字且非空),防 getJsonByList 内部 toString 崩溃\n const safeList = isEmpty\n ? []\n : list.filter((item: any) => {\n if (!item) {\n return false;\n }\n const idOk =\n (CommonBase.isString(item.id) && !CommonBase.isEmpty(item.id)) ||\n (CommonBase.isNumber(item.id) && CommonBase.isFinite(item.id));\n const nameOk =\n CommonBase.isNonEmptyString(item.name) ||\n (CommonBase.isNumber(item.name) && !CommonBase.isEmpty(item.name));\n return idOk && nameOk;\n });\n // list 变化时重建映射,避免旧数据残留(getJsonByList 已深拷贝,直接赋值即可)\n _pageData.listNameJson = CommonBase.getJsonByList(safeList, 'name');\n _pageData.listIdJson = CommonBase.getJsonByList(safeList, 'id');\n};\n\nconst _setDropdownOpen = (isOpen: boolean) => {\n if (refElDropdownLayer.value) {\n const isShowOpen = refElDropdownLayer.value.checkIsShowOpen();\n if (isOpen) {\n if (!isShowOpen) {\n const ids: any = [];\n const tempValue = refElInput.value ? refElInput.value.getValue() : '';\n const arrValue = CommonBase.isEmpty(tempValue)\n ? []\n : CommonBase.split(tempValue, props.joinKey || ',');\n if (arrValue.length > 0) {\n arrValue.forEach((v: any) => {\n if (CommonBase.isExistJsonKey(_pageData.listNameJson, v)) {\n const item = _pageData.listNameJson[v];\n if (item && !CommonBase.isEmpty(item.id)) {\n ids.push(item.id.toString());\n }\n }\n });\n }\n optBase.dropdownSelectId = ids;\n // C11-1:服务端模式(serverCallback)初始 list 为空时 loading 态需可见,isUseData 视为 true\n optBase.isUseData = !CommonBase.isEmpty(props.list) || !!props.serverCallback;\n refElDropdownLayer.value.setOpen(true);\n nextTick(() => {\n if (refElDropdownLayer.value) {\n refElDropdownLayer.value.initCompleteOpen();\n }\n });\n }\n } else {\n optBase.isUseData = true;\n if (isShowOpen) {\n refElDropdownLayer.value.setOpen(false);\n }\n }\n }\n};\n\nconst _initMain = () => {\n if (!CommonBase.isEmpty(props.list)) {\n _convertListToJson(props.list);\n }\n};\n\nonMounted(() => {\n nextTick(() => {\n _initMain();\n });\n});\n\nwatch(\n () => props.list,\n newValue => {\n _convertListToJson(newValue as any[]);\n // C11-1:异步加载数据到达后刷新 isUseData,面板从 nodata 隐藏态恢复可见\n optBase.isUseData = !CommonBase.isEmpty(newValue) || !!props.serverCallback;\n },\n);\n\n// 输入组件初始化完成后转发 onInit(Input 侧仅首次挂载触发一次)\nconst onInitComplete = () => {\n _emitInit();\n};\n\nconst onToggleOpen = (value: boolean) => {\n // D1:disabled 守卫仅对打开方向生效——关闭分支必须放行,否则面板关闭时 Dropdown 的 window 键盘监听不注销,\n // 残留的捕获层 keydown 会持续劫持页面级 Enter(preventDefault + stopPropagation)\n if (value && props.disabled) {\n return;\n }\n nextTick(() => {\n if (refElList.value) {\n refElList.value.initOpenShow(value);\n }\n });\n};\n\n// B-修复:本地模式同步判断输入是否有匹配项——规则与 Dropdown.vue _getSearch 本地分支保持一致(searchKey 字段小写包含匹配,searchKeyType 或/与),\n// 有匹配才开弹层,无匹配不开(输入内容保留,可回车直接添加为 tag);两处规则改动需同步\nconst _hasLocalMatch = (value: string): boolean => {\n const tempSearch = value.toLowerCase();\n const arrSearchKey = props.searchKey as any[];\n let isMatch = false;\n props.list.forEach((info: any) => {\n if (isMatch) {\n return;\n }\n let matchCount = 0;\n for (let bi = 0; bi < arrSearchKey.length; bi++) {\n const keyValue = info[arrSearchKey[bi]];\n if (\n CommonBase.isNonEmptyString(keyValue) &&\n keyValue.toLowerCase().indexOf(tempSearch) > -1\n ) {\n matchCount++;\n }\n }\n if (matchCount > 0) {\n if (\n props.searchKeyType === '||' ||\n (props.searchKeyType === '&&' && matchCount === arrSearchKey.length)\n ) {\n isMatch = true;\n }\n }\n });\n return isMatch;\n};\n\nconst onInputSearch = (value: string) => {\n optBase.searchValue = value;\n let isOpenDropdown = true;\n if (\n CommonBase.isNonEmptyString(value) &&\n (value.indexOf('\\n') > -1 ||\n (!CommonBase.isEmpty(props.joinKey) && value.indexOf(props.joinKey) > -1))\n ) {\n isOpenDropdown = false;\n }\n if (isOpenDropdown) {\n // B-修复:无匹配不开弹层,避免空面板「一根线」闪现——本地模式同步判断;服务端异步模式无法同步判断,输入即开(loading),结果回来由 onDropSearchResult 收敛\n const isShowDrop = CommonBase.isEmpty(value)\n ? false\n : props.serverCallback\n ? true\n : _hasLocalMatch(value);\n _setDropdownOpen(isShowDrop);\n } else {\n _setDropdownOpen(false);\n }\n if (!props.multiple) {\n _emitChange(value, 'input');\n }\n};\n\nconst onDropSearchResult = (info: { search: string; isEmpty: boolean }) => {\n _setDropdownOpen(!info.isEmpty && !CommonBase.isEmpty(info.search));\n};\n\nconst onDropError = (msg: string) => {\n emit('onError', msg);\n};\n\nconst onDropSelect = (\n _selectIds: string[],\n currentOperate: { id: string | string[]; isSelect: boolean },\n) => {\n if (CommonBase.isEmpty(currentOperate)) {\n return;\n }\n if (props.disabled) {\n return; // C11-2:面板打开期间切换 disabled 后拦截点选/Enter 选中(onToggleOpen 守卫覆盖不到已注册的交互路径)\n }\n const nameArr: string[] = [];\n const ids: string[] = CommonBase.isArray(currentOperate.id)\n ? (currentOperate.id as string[])\n : [currentOperate.id as string];\n ids.forEach((id: string) => {\n if (CommonBase.isExistJsonKey(_pageData.listIdJson, id)) {\n nameArr.push(_pageData.listIdJson[id].name);\n }\n });\n if (!props.multiple) {\n optBase.searchValue = '';\n }\n if (refElInput.value) {\n refElInput.value.updateValue(nameArr.join(props.joinKey || ','), currentOperate.isSelect);\n }\n};\n\nconst onSelected = (value: string, preOper: string) => {\n _emitChange(value, preOper);\n if (props.isAutofill) {\n _setDropdownOpen(false);\n }\n};\n\nconst onInputFocus = (value: string) => {\n if (props.isAutofill && props.isFocusShowDrop) {\n optBase.searchValue = value;\n _setDropdownOpen(!CommonBase.isEmpty(value));\n }\n};\n\n// C11-P2:provide 契约单一来源接口,Input.vue/Dropdown.vue import type 复用(拼写统一 getListHoverValueKeydown,C11-P1)\nexport interface InputTagTop {\n getListHoverValueKeydown: () => string;\n convertListToJson: (list: any[]) => void;\n setDropdownOpen: (isOpen: boolean) => void;\n}\n\nprovide<InputTagTop>('$InputTagTop', {\n getListHoverValueKeydown: () => {\n let hValue = '';\n if (refElList.value) {\n hValue = refElList.value.getHoverKeydown();\n }\n return hValue;\n },\n convertListToJson: _convertListToJson,\n setDropdownOpen: _setDropdownOpen,\n});\n\nconst getValue = () => {\n if (!refElInput.value) {\n return '';\n }\n return refElInput.value.getValue();\n};\n\nconst getValueData = () => {\n const value = getValue();\n if (!refElInput.value) {\n return [];\n }\n const arrValue = CommonBase.split(value, props.joinKey || ',');\n return arrValue\n .filter((v: string) => !CommonBase.isEmpty(v))\n .map((v: string) => {\n const info = _pageData.listNameJson[v];\n return {\n name: v,\n id: info && !CommonBase.isEmpty(info.id) ? info.id : undefined,\n };\n });\n};\n\nconst setValue = (value: string) => {\n if (!refElInput.value) {\n return; // 输入组件未挂载时静默忽略(挂载后由 props.value 驱动同步)\n }\n refElInput.value.setValue(value);\n};\n\nconst focus = () => {\n if (!refElInput.value) {\n return;\n }\n refElInput.value.focus();\n};\n\nexport interface ClInputTagExpose {\n getValue: () => string;\n getValueData: () => { name: string; id?: any }[];\n setValue: (value: string) => void;\n focus: () => void;\n}\n\ndefineExpose({\n getValue,\n getValueData,\n setValue,\n focus,\n});\n</script>\n"],"names":["props","__props","emit","__emit","_selfTop","inject","refElTag","ref","refElTextarea","refElInput","optBase","reactive","optTagsList","optTagsValue","optOneValue","optIsValue","computed","CommonBase","optIsShowClean","clsParent","styParent","sty","styTags","multiple","tagsMaxHeight","_emitChange","preOper","value","_getValue","_emitInit","nextTick","_emitChangeInput","_emitFocus","optFunGetCopyTxt","v","joinKey","_initValue","list","arrValue","tempValue","_addTag","_focus","_updateValue","isSelect","toRaw","tempName","idx","info","idx2","_initMain","onMounted","watch","newValue","oldValue","onClickParent","e","elTextarea","onTagEnterStart","hoverValue","onTagEnterEnd","onTagFocus","onTagBlur","onTagClearOne","data","onTagClearAll","onInputChange","onInputFocus","__expose","_createElementBlock","_hoisted_1","_createElementVNode","_createVNode","ClTags","ClTextarea","_hoisted_2","ClInput","$event","_hoisted_3","_createBlock","ClBadge","_Fragment","ClIconFont","ClClipboard","_SCROLL_TOP_THRESHOLD","_SCROLL_TOP_OFFSET","_SCROLL_BOTTOM_LOAD","_SCROLL_TOP_LOAD","optPageLanguage","getPageLanguage","useLanguage","refElSearch","refElList","_keyIndex","_selectFirstIndex","_prevScroll","_searchToken","_lastScrollTime","_isKeyDownRegistered","_isUnmounted","_pageInfo","optKeyIndex","optHoverKeydown","optShowData","_optUseAllId","_showAllData","_showAllDataRaw","_isFirstOpen","_pageData","optAllValue","b","id","optSelectIdSet","ids","currentOperate","_emitFilterResult","searchVaue","isEmpty","_emitError","msg","_sanitizeList","item","_getSearch","token","_getSearchNext","tempSearch","searchKeyCount","arrSearchKey","bb","bi","bKeyValue","_cascadeSearchFill","_buildFlatList","_getShowDataByStartEnd","_setPageInfo","_setUseAllId","selectIdStrs","parentKey","topParentValue","childrenMap","pid","pidStr","result","topNodes","expandedIds","traverseSafe","nodes","level","parentName","node","children","filteredList","allData","idToItem","resultIds","filteredIds","fillAncestors","cur","guard","childId","start","end","len","s","i","_getShowDataByOffset","offset","direction","_initData","tempSelectIndx","tempSelectId","equal","_initScrollSelect","inx","elList","elLi","_refreshData","_onScrollData","now","elScroll","scrollTop","scrollHeight","childHeight","searchValue","param","nextList","prevList","prevLen","h","pi","_firstOpenInit","optFunShowTextLabel","format","name","_getSelectIds","newIds","sId","_setHover","operateType","lastHover","_onWinKeydown","keyCode","_onWinKeyup","hoverInfo","onBeforeUnmount","CommonElement","onSearch","onSelectAll","disabledIds","totalIds","addIds","delIds","onSelectItem","onHoverInItem","onHoverOutItem","isOpen","_openBlock","_hoisted_10","ClLoadIng","ClInputSearch","ClCheckboxOne","_unref","_renderList","dropInfo","_normalizeClass","_normalizeStyle","_hoisted_6","_hoisted_8","_hoisted_9","_toDisplayString","elId","refElDropdownLayer","cls","clsDropdown","_convertListToJson","safeList","idOk","nameOk","_setDropdownOpen","isShowOpen","onInitComplete","onToggleOpen","_hasLocalMatch","isMatch","matchCount","keyValue","onInputSearch","isOpenDropdown","isShowDrop","onDropSearchResult","onDropError","onDropSelect","_selectIds","nameArr","onSelected","provide","hValue","getValue","ClDropdownlayerList","ClInputTagInput","ClInputTagDropdown"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Index.vue_vue_type_script_setup_true_lang-tTHdssVu.js","sources":["../../../src/libs/Web/InputTag/Input.vue","../../../src/libs/Web/InputTag/Dropdown.vue","../../../src/libs/Web/InputTag/Index.vue"],"sourcesContent":["<template>\n <div\n :class=\"clsParent\"\n :style=\"styParent\"\n @click.stop=\"onClickParent\"\n >\n <div v-if=\"multiple\">\n <div\n class=\"inputTag-tags\"\n :style=\"styTags\"\n >\n <cl-tags\n ref=\"refElTag\"\n :disabled=\"disabled\"\n :list=\"optTagsList\"\n @onRemove=\"onTagClearOne\"\n ></cl-tags>\n </div>\n <cl-textarea\n ref=\"refElTextarea\"\n v-show=\"!disabled\"\n height=\"24px\"\n :heightMax=\"textMaxHeight\"\n :disabled=\"disabled\"\n :placeholder=\"disabled ? '' : placeholder\"\n :isClean=\"false\"\n :isAutoHeight=\"true\"\n @onKeydownEnter=\"onTagEnterStart\"\n @onKeyupEnter=\"onTagEnterEnd\"\n @onFocus=\"onTagFocus\"\n @onBlur=\"onTagBlur\"\n @onChangeDelay=\"onInputChange\"\n ></cl-textarea>\n </div>\n <div v-else>\n <cl-input\n ref=\"refElInput\"\n v-model:value=\"optOneValue\"\n :placeholder=\"placeholder\"\n :isClean=\"false\"\n :disabled=\"disabled\"\n @onFocus=\"onInputFocus\"\n @onChangeDelay=\"onInputChange\"\n ></cl-input>\n </div>\n <div class=\"inputTag-operate\">\n <cl-badge\n v-if=\"isShowNum && multiple && optTagsValue.length > 1\"\n :num=\"optTagsValue.length\"\n ></cl-badge>\n <template v-else></template>\n <cl-icon-font\n v-if=\"optIsShowClean\"\n name=\"close-circle-fill\"\n className=\"inputTag-operate-btn\"\n aria-label=\"清空\"\n tabindex=\"0\"\n role=\"button\"\n @click.stop=\"onTagClearAll\"\n @keydown.enter.stop.prevent=\"onTagClearAll\"\n @keydown.space.stop.prevent=\"onTagClearAll\"\n ></cl-icon-font>\n <template v-else></template>\n <cl-clipboard\n v-if=\"isCopy && optIsValue\"\n className=\"inputTag-operate-btn\"\n :textLabel=\"optFunGetCopyTxt\"\n ></cl-clipboard>\n <template v-else></template>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { toRaw, inject, watch, nextTick, onMounted, computed, ref, reactive } from 'vue';\nimport CommonBase from '../../Common/base';\nimport ClBadge from '../../Element/Badge/Index.vue';\nimport ClTextarea from '../../Element/InputTextarea/Index.vue';\nimport ClTags from '../../Element/Tags/Index.vue';\nimport ClInput from '../../Element/Input/Index.vue';\nimport ClClipboard from '../../Element/Clipboard/Index.vue';\nimport ClIconFont from '../../Element/IconFont/Index.vue';\nimport type { InputTagTop } from './Index.vue';\n\n// 对齐 ClTags 的 TagItem 契约(getData 返回值):id/name 可选,允许附加字段\ninterface TagInfo {\n id?: string | number; // 标签唯一标识\n name?: string; // 标签显示文本\n [key: string]: any;\n}\n\ndefineOptions({ name: 'ClInputTagInput' });\n\nconst props = defineProps({\n value: String, // desc: 绑定值(joinKey 分隔的字符串)\n placeholder: String, // desc: 输入占位提示\n disabled: Boolean, // desc: 是否禁用\n isClean: {\n type: Boolean,\n default: true, // desc: 是否显示清空按钮\n },\n multiple: Boolean, // desc: 是否多选\n isCopy: Boolean, // desc: 是否启用复制按钮\n isCopyMultipleWrap: {\n type: Boolean,\n default: true, // desc: 多选复制时是否换行包裹\n },\n copyJoinKey: {\n type: String,\n default: ',', // desc: 复制时的拼接分隔符\n },\n minHeight: String, // desc: 输入区最小高度\n joinKey: {\n type: String,\n default: ',', // desc: 标签拼接分隔符\n },\n isDropdownLayer: {\n type: Boolean,\n default: true, // desc: 是否处于下拉容器模式(DropdownLayer 包裹)\n },\n textMaxHeight: String, // desc: 文本域最大高度\n tagsMaxHeight: String, // desc: 标签区最大高度\n isShowNum: Boolean, // desc: 是否显示标签数量角标\n});\n\nconst emit = defineEmits<{\n (e: 'onInit'): void; // desc: 初始化完成\n (e: 'onChange', value: string, preOper: string): void; // desc: 值变化回调,preOper 为操作来源\n (e: 'onChangeInput', value: string): void; // desc: 输入过程变化回调\n (e: 'onFocus', value: string): void; // desc: 聚焦回调\n}>();\n// kb: Enter 添加标签(onTagEnterStart/End):IME 组合态(isComposing/keyCode 229)与 Shift+Enter 换行放行;下拉高亮存在时(hoverValue 非空)不拦截,由 Dropdown 键盘监听消费选择并清空草稿;清空按钮聚焦时 Enter/Space 清空全部(R13-1 补全)\n// R-修复:多选禁用时 textarea 用 v-show 隐藏(非 v-if)——禁用切换不销毁重建,保留实例与草稿(G2-F7);禁用时输入区无意义(值在 tags 区),隐藏避免顶部空白行\n\nconst _selfTop = inject<InputTagTop>('$InputTagTop');\nconst refElTag = ref<InstanceType<typeof ClTags> | null>(null);\nconst refElTextarea = ref<InstanceType<typeof ClTextarea> | null>(null);\nconst refElInput = ref<InstanceType<typeof ClInput> | null>(null);\n\nconst optBase = reactive({\n isFocus: false,\n});\nconst optTagsList = ref<TagInfo[]>([]);\nconst optTagsValue = ref<string[]>([]);\nconst optOneValue = ref<string>('');\n\nconst optIsValue = computed(() => {\n return !CommonBase.isEmpty(optTagsValue.value) || !CommonBase.isEmpty(optOneValue.value);\n});\n\nconst optIsShowClean = computed(() => {\n return props.isClean && !props.disabled && optIsValue.value;\n});\n\nconst clsParent = computed(() => {\n const clsTemp: Record<string, boolean> = {\n 'dropdownLayer-text-container': props.isDropdownLayer,\n 'inputTag-container': true,\n 'inputTag-multiple': props.multiple,\n 'inputTag-focus': optBase.isFocus,\n };\n return clsTemp;\n});\n\nconst styParent = computed(() => {\n const sty: Record<string, string> = {};\n if (props.multiple) {\n if (props.disabled) {\n // 禁用时保底 40px(输入行 24px + 上下 padding 16px)替代 minHeight:内容不足 70px 时避免 min-height 撑出底部留白,\n // 无值时避免 16px 边框细条;40px 与「非禁用空值」高度一致(24px 输入行撑出的内容高),禁用态视觉呈正常空框\n sty['min-height'] = '40px';\n } else if (CommonBase.isNonEmptyString(props.minHeight) && optTagsValue.value.length > 0) {\n // 非禁用:仅当存在标签时才应用 minHeight——空值(无标签)时内容仅单行输入框,min-height 70px 会撑出底部空白;\n // 有标签时 minHeight 预留空间仍有意义\n sty['min-height'] = props.minHeight;\n }\n }\n return sty;\n});\n\nconst styTags = computed(() => {\n const sty: Record<string, string> = {};\n const { multiple, tagsMaxHeight } = props;\n if (multiple) {\n if (CommonBase.isNonEmptyString(tagsMaxHeight)) {\n sty['max-height'] = tagsMaxHeight;\n }\n }\n return sty;\n});\n\nconst _emitChange = (preOper = 'tag') => {\n const value = _getValue();\n emit('onChange', value, preOper);\n};\n\nconst _emitInit = () => {\n nextTick(() => {\n emit('onInit');\n });\n};\n\nconst _emitChangeInput = (value: string) => {\n emit('onChangeInput', value);\n};\n\nconst _emitFocus = (value: string) => {\n emit('onFocus', value);\n};\n\nconst optFunGetCopyTxt = () => {\n let v = '';\n if (props.multiple) {\n const joinKey = props.copyJoinKey + (props.isCopyMultipleWrap ? '\\n' : '');\n v = optTagsValue.value.join(joinKey);\n } else {\n v = optOneValue.value;\n }\n return v;\n};\n\nconst _getValue = () => {\n return props.multiple ? optTagsValue.value.join(props.joinKey || ',') : optOneValue.value;\n};\n\nconst _initValue = (value: string) => {\n if (CommonBase.isEmpty(value)) {\n optTagsList.value = [];\n optTagsValue.value = [];\n optOneValue.value = '';\n } else if (value !== _getValue()) {\n if (props.multiple) {\n const list: TagInfo[] = [];\n const arrValue: string[] = [];\n CommonBase.split(value, props.joinKey || ',').forEach((v: string) => {\n const tempValue = CommonBase.trim(v);\n if (!CommonBase.isEmpty(tempValue) && !CommonBase.isExistValue(arrValue, tempValue)) {\n list.push({ id: `inputTag_${CommonBase.getRandom(8)}`, name: tempValue });\n arrValue.push(tempValue);\n }\n });\n optTagsList.value = list;\n // G3-F1:getArrUnique 内部用 {} 做 hash,'constructor' 等 Object.prototype 键名会被静默丢弃 → 改用 Set(组件侧规避,工具层缺陷已记录)\n optTagsValue.value = Array.from(new Set(arrValue));\n } else {\n optOneValue.value = value;\n }\n }\n};\n\nconst _addTag = (value: string) => {\n const tempValue = CommonBase.trim(value);\n if (refElTag.value) {\n refElTag.value.addInfo({\n id: `inputTag_${CommonBase.getRandom(8)}`,\n name: tempValue,\n });\n }\n if (refElTextarea.value) {\n refElTextarea.value.initHeight();\n refElTextarea.value.setValue('');\n }\n};\n\nconst _focus = () => {\n if (props.multiple) {\n if (refElTextarea.value) {\n refElTextarea.value.focus();\n }\n } else {\n if (refElInput.value) {\n refElInput.value.focus();\n }\n }\n};\n\nconst _updateValue = (value: string, isSelect = true) => {\n if (props.multiple) {\n const arrValue = toRaw(optTagsValue.value);\n CommonBase.split(value, props.joinKey || ',').forEach((v: string) => {\n const tempName = CommonBase.trim(v);\n if (!CommonBase.isEmpty(tempName)) {\n if (isSelect) {\n _addTag(tempName);\n if (!CommonBase.isExistValue(arrValue, tempName)) {\n arrValue.push(tempName);\n }\n } else {\n const idx = optTagsList.value.findIndex((info: TagInfo) => info.name === tempName);\n if (idx > -1) {\n optTagsList.value.splice(idx, 1);\n }\n const idx2 = arrValue.indexOf(tempName);\n if (idx2 > -1) {\n arrValue.splice(idx2, 1);\n }\n }\n }\n });\n // G3-F1:同 _initValue,Set 去重规避 getArrUnique 的 {} hash 缺陷\n optTagsValue.value = Array.from(new Set(arrValue));\n } else {\n optOneValue.value = isSelect ? value : '';\n }\n // 仅多选模式选中后聚焦回输入区(继续添加标签);单选选中即完成,不聚焦——\n // 避免程序 _focus 触发的 focus 事件被 isFocusShowDrop 的 onInputFocus 当作用户主动聚焦而重新打开弹层(程序赋值不应触发「聚焦展示」)\n if (props.multiple) {\n _focus();\n }\n _emitChange('drop');\n};\n\nconst _initMain = () => {\n _initValue(props.value ?? '');\n _emitInit();\n};\n\nonMounted(() => {\n nextTick(() => {\n _initMain();\n });\n});\n\nwatch(\n () => props.value,\n (newValue, oldValue) => {\n if (newValue !== oldValue && newValue !== _getValue()) {\n _initValue(newValue ?? '');\n if (refElTextarea.value) {\n refElTextarea.value.setValue('');\n refElTextarea.value.initHeight();\n }\n }\n },\n);\n\n// G2-F7/G3-F4:disabled 切换不再清空文本域草稿(丢失用户输入);Textarea 的 disabled prop 响应式生效,无需额外处理\n\nconst onClickParent = (e: MouseEvent) => {\n if (props.multiple) {\n const elTextarea = refElTextarea.value ? refElTextarea.value.getParentElement() : null;\n // G3-F10/G4-F10:contains 已覆盖自身,冗余等值判断移除;空分支反写为单 if\n if (!elTextarea || !elTextarea.contains(e.target as Node)) {\n _focus();\n }\n } else {\n // G3-F2:单选模式点击容器聚焦\n _focus();\n }\n};\n\nconst onTagEnterStart = (e: KeyboardEvent) => {\n if (e.isComposing || e.keyCode === 229 || e.shiftKey) {\n return;\n }\n // G1-F2:_selfTop 缺失(Input 独立使用)时按无高亮处理,不落入 else 清空分支\n const hoverValue = _selfTop ? _selfTop.getListHoverValueKeydown() : '';\n if (CommonBase.isEmpty(hoverValue)) {\n e.preventDefault();\n e.stopPropagation();\n }\n};\n\nconst onTagEnterEnd = (e: KeyboardEvent) => {\n if (e.isComposing || e.keyCode === 229 || e.shiftKey) {\n return;\n }\n const value = (e.target as HTMLTextAreaElement).value;\n // G1-F2:同 onTagEnterStart,_selfTop 缺失按无高亮处理\n const hoverValue = _selfTop ? _selfTop.getListHoverValueKeydown() : '';\n if (CommonBase.isEmpty(hoverValue)) {\n e.preventDefault();\n e.stopPropagation();\n if (!CommonBase.isEmpty(value)) {\n const arrValue = toRaw(optTagsValue.value);\n let tempValue: string[] = [];\n if (CommonBase.isExistValue(value, '\\n')) {\n CommonBase.split(value, '\\n').forEach((v: string) => {\n if (!CommonBase.isEmpty(v)) {\n tempValue.push(...CommonBase.split(v, props.joinKey || ','));\n }\n });\n } else {\n tempValue = CommonBase.split(value, props.joinKey || ',');\n }\n tempValue.forEach((v: string) => {\n const tempName = CommonBase.trim(v);\n if (!CommonBase.isEmpty(tempName)) {\n _addTag(tempName);\n if (!CommonBase.isExistValue(arrValue, tempName)) {\n arrValue.push(tempName);\n }\n }\n });\n // G3-F1:同 _initValue,Set 去重规避 getArrUnique 的 {} hash 缺陷\n optTagsValue.value = Array.from(new Set(arrValue));\n _emitChange();\n }\n } else {\n if (refElTextarea.value) {\n refElTextarea.value.initHeight();\n refElTextarea.value.setValue('');\n }\n }\n};\n\nconst onTagFocus = () => {\n optBase.isFocus = true;\n // G1-F1:多选模式也补发 onFocus(Index onInputFocus 依赖该事件驱动 isFocusShowDrop 展开)\n _emitFocus(_getValue());\n};\n\nconst onTagBlur = () => {\n optBase.isFocus = false;\n};\n\nconst onTagClearOne = () => {\n // G4-F7/G1-F5:getData 判空(移除 : any 后编译期强制)\n if (!refElTag.value) {\n return;\n }\n const data = refElTag.value.getData();\n // G1-F3/G2-F1:同步 optTagsList——Tags 内部移除后不同步会导致残留项在下次渲染重现、取消选择定位错位\n // R13-2:isNonEmptyString 过滤无 name 项(TagInfo.name 契约可选),防 join 值混入 'undefined'\n optTagsValue.value = data\n .filter((info: TagInfo) => CommonBase.isNonEmptyString(info.name))\n .map((info: TagInfo) => info.name as string);\n optTagsList.value = data;\n // G2-F4:补发 onChangeInput('') 清空 Index searchValue,防搜索残留\n _emitChangeInput('');\n _emitChange();\n};\n\nconst onTagClearAll = () => {\n optTagsList.value = [];\n optTagsValue.value = [];\n optOneValue.value = '';\n // R13-3:与 setValue/watch 清理约定(G2-F5)统一——清空按钮同时清空文本域草稿,防残留输入\n if (refElTextarea.value) {\n refElTextarea.value.setValue('');\n refElTextarea.value.initHeight();\n }\n _emitChange();\n _focus();\n};\n\nconst onInputChange = (value: string) => {\n _emitChangeInput(value);\n};\n\nconst onInputFocus = () => {\n _emitFocus(optOneValue.value);\n};\n\nconst getValue = () => {\n return _getValue();\n};\n\nconst setValue = (value: string) => {\n // G2-F5:与 watch value 的清理行为统一(外部赋值同步标签后清空文本域草稿)\n _initValue(value);\n if (refElTextarea.value) {\n refElTextarea.value.setValue('');\n refElTextarea.value.initHeight();\n }\n};\n\nconst updateValue = (value: string, isSelect = true) => {\n _updateValue(value, isSelect);\n};\n\nconst focus = () => {\n _focus();\n};\n\nexport interface ClInputTagInputExpose {\n getValue: () => string;\n setValue: (value: string) => void;\n focus: () => void;\n updateValue: (value: string, isSelect?: boolean) => void;\n}\n\ndefineExpose({\n getValue,\n setValue,\n focus,\n updateValue,\n});\n</script>\n","<template>\n <div class=\"dropdownLayer-list-container\">\n <template v-if=\"!optBase.isRunLoading\">\n <div\n v-if=\"isSearch\"\n class=\"dropdownLayer-list-search\"\n >\n <cl-input-search\n ref=\"refElSearch\"\n :placeholder=\"searchPlaceholder\"\n @onChange=\"onSearch\"\n ></cl-input-search>\n </div>\n <template v-else></template>\n <div\n class=\"dropdownLayer-list-checkboxAll\"\n v-if=\"isMultiple && isCheckBoxAll\"\n >\n <cl-checkbox-one\n :forId=\"`${optKeyIndex}-cb-all`\"\n :label=\"optPageLanguage.checkboxAll\"\n :value=\"optAllValue\"\n @onChange=\"onSelectAll\"\n ></cl-checkbox-one>\n </div>\n <template v-else></template>\n <div\n class=\"dropdownLayer-list-body\"\n ref=\"refElList\"\n >\n <ul\n v-if=\"optShowData.length > 0\"\n role=\"listbox\"\n :aria-activedescendant=\"\n optHoverKeydown ? `${optKeyIndex}-opt-${optHoverKeydown}` : undefined\n \"\n >\n <li\n v-for=\"(dropInfo, inx) in optShowData\"\n :key=\"`${_keyIndex}-${dropInfo.id}-${inx}`\"\n :id=\"`${optKeyIndex}-opt-${dropInfo.id}`\"\n role=\"option\"\n :aria-selected=\"optSelectIdSet.has(dropInfo.id.toString())\"\n :aria-disabled=\"dropInfo.isDisabled\"\n :class=\"{\n 'option-selected': optSelectIdSet.has(dropInfo.id.toString()),\n 'option-disabled': dropInfo.isDisabled,\n 'option-hoverKeydown': optHoverKeydown === dropInfo.id.toString(),\n 'inputTag-dropdown-item-child': dropInfo._level >= 1,\n }\"\n :style=\"{ paddingLeft: dropInfo._level ? dropInfo._level * 20 + 'px' : undefined }\"\n @click=\"onSelectItem(dropInfo)\"\n @mouseenter=\"onHoverInItem(dropInfo)\"\n @mouseleave=\"onHoverOutItem(dropInfo)\"\n >\n <div>\n <div\n class=\"dropdownLayer-list-checkbox\"\n v-if=\"isMultiple\"\n >\n <cl-checkbox-one\n :name=\"`${optKeyIndex}-cb`\"\n :forId=\"`${optKeyIndex}-cb-${dropInfo.id}`\"\n :value=\"optSelectIdSet.has(dropInfo.id.toString())\"\n :disabled=\"dropInfo.isDisabled\"\n ></cl-checkbox-one>\n </div>\n <template v-else></template>\n <div\n class=\"dropdownLayer-list-title\"\n v-html=\"optFunShowTextLabel(dropInfo)\"\n ></div>\n </div>\n </li>\n </ul>\n <ul v-else>\n <li\n class=\"dropdownLayer-list-empty\"\n v-if=\"isShowEmptyLabel\"\n >\n {{ optPageLanguage.noResultsText }}\n </li>\n <template v-else></template>\n </ul>\n </div>\n </template>\n <div\n v-else\n class=\"inputTag-load\"\n >\n <cl-load-ing :isLoadIng=\"optBase.isRunLoading\"></cl-load-ing>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { inject, onMounted, onBeforeUnmount, nextTick, watch, computed, reactive, ref } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport ClInputSearch from '../../Element/InputSearch/Index.vue';\nimport ClCheckboxOne from '../../Element/CheckBox/One.vue';\nimport ClLoadIng from '../../Element/Load/Ing.vue';\nimport useLanguage from '../../Use/language';\nimport type { InputTagTop } from './Index.vue';\n\ndefineOptions({ name: 'ClDropdownlayerSearchList' });\n\nconst props = defineProps({\n isSearch: Boolean, // desc: 是否显示搜索框\n searchValue: String, // desc: 搜索关键字\n searchPlaceholder: String, // desc: 搜索框占位提示\n searchKey: {\n type: Array,\n default: () => {\n return ['name'];\n }, // desc: 搜索匹配的字段\n },\n searchKeyType: {\n type: String,\n default: '||', // desc: 搜索匹配方式 | enum: ||, &&\n validator: (value: string) => ['||', '&&'].indexOf(value) > -1,\n },\n isMultiple: Boolean, // desc: 是否多选\n isCheckBoxAll: Boolean, // desc: 是否显示全选\n showDropDownTextFormat: String, // desc: 下拉项文本格式化模板,${xxx} 格式\n showDropDownTextFormatSub: String, // desc: 二级下拉项文本格式化\n isCascade: Boolean, // desc: 是否启用二级级联\n parentSelectable: Boolean, // desc: 二级级联时父级是否可被选中\n parentKey: {\n type: String,\n default: 'parentId', // desc: 数据中标识父级的字段名\n },\n topParentValue: {\n type: String,\n default: '0', // desc: 顶级父节点的 parentKey 值\n },\n originalData: {\n type: Array,\n default: () => {\n return [];\n }, // desc: 原始候选数据列表\n },\n keyIndex: String, // desc: 唯一标识前缀(父组件传入)\n selectId: {\n type: Array,\n default: () => {\n return [];\n }, // desc: 已选中的 id 列表\n },\n isShowEmptyLabel: {\n type: Boolean,\n default: true, // desc: 无数据时是否显示空提示\n },\n isShowLoading: Boolean, // desc: 服务端搜索时是否显示加载中\n serverCallback: Function, // desc: 服务端搜索回调\n});\n\nconst emit = defineEmits<{\n (\n e: 'onChange',\n ids: string[],\n currentOperate: { id: string | string[]; isSelect: boolean },\n ): void; // desc: 选中项变化,ids 为选中 id 列表,currentOperate 为操作项\n (e: 'onSearchResult', info: { search: string; isEmpty: boolean }): void; // desc: 搜索完成回调\n (e: 'onError', msg: string): void; // desc: 服务端请求失败回调\n}>();\n// kb: 下拉展开期间监听 window 键盘事件(initOpenShow 注册/注销):Enter 确认高亮项、Up/Down 移动高亮、Esc/Left 无操作\n\nconst { optPageLanguage, getPageLanguage } = useLanguage();\ngetPageLanguage('common');\n\nconst _selfTop = inject<InputTagTop>('$InputTagTop');\n\n// R-7:移除 : any 覆盖注解,保留 ref 范型类型保护(ClInputSearch expose 已含 setValue,refElList 为 HTMLElement)\nconst refElSearch = ref<InstanceType<typeof ClInputSearch> | null>(null);\nconst refElList = ref<HTMLElement | null>(null);\n\n// R-5:_keyIndex 归位常量区首位(0x ⑦ 区序)\nconst _keyIndex = `inputtag-${CommonBase.getRandom(5)}`;\nlet _selectFirstIndex = 0;\nlet _prevScroll = 0;\nlet _searchToken = 0;\nlet _lastScrollTime = 0;\nlet _isKeyDownRegistered = false;\nlet _isUnmounted = false;\nconst _pageInfo = { start: -1, end: -1, limit: 50 };\n// 滚动分页阈值常量(G3-F10:魔法数字提具名;普通常量不用 props 的 desc: 标记)\nconst _SCROLL_TOP_THRESHOLD = 180; // 定位滚动触发阈值\nconst _SCROLL_TOP_OFFSET = 50; // 定位滚动偏移量\nconst _SCROLL_BOTTOM_LOAD = 100; // 底部预加载距离阈值\nconst _SCROLL_TOP_LOAD = 130; // 顶部预加载距离阈值\n\nconst optBase = reactive({\n isRunLoading: false,\n});\nconst optKeyIndex = `dropdownLayer-list-${props.keyIndex || _keyIndex}`;\nconst optHoverKeydown = ref('');\nconst optShowData = ref<any[]>([]);\nconst _optUseAllId = ref<string[]>([]);\n// R-5:_sanitizeList 移入内部方法区后,此处不可在声明前调用(TDZ)——初始值延后由 _initMain → _refreshData 赋值,首帧渲染仅依赖 optShowData 不受影响\nlet _showAllData: any[] = [];\nlet _showAllDataRaw: any[] = []; // R-4:级联模式原始数据累积(加载更多后重跑平铺用,非级联不维护)\nlet _isFirstOpen = false;\nconst _pageData = {\n isScrollLoadIng: false,\n};\n\nconst optAllValue = computed(() => {\n let b = false;\n const len = _optUseAllId.value.length;\n if (len > 0) {\n if (props.selectId.length >= _optUseAllId.value.length) {\n // selectId 归一化字符串后与 _optUseAllId(恒字符串)比较,数字 id 下全选判定一致(G1-03 同根)\n b = CommonBase.isContainArr(\n (props.selectId as any[]).map((id: any) => id.toString()),\n _optUseAllId.value,\n );\n }\n }\n return b;\n});\n\nconst optSelectIdSet = computed(\n () => new Set((props.selectId as any[]).map((id: any) => id.toString())),\n);\n\nconst _emitChange = (\n ids: string[],\n currentOperate: { id: string | string[]; isSelect: boolean },\n) => {\n emit('onChange', ids, currentOperate);\n};\n\nconst _emitFilterResult = (searchVaue: string, isEmpty: boolean) => {\n // 载荷归一化:值非字符串时兜底空串,保证 onSearchResult 契约 { search: string }(G4-F10)\n emit('onSearchResult', {\n search: CommonBase.isNonEmptyString(searchVaue) ? searchVaue : '',\n isEmpty,\n });\n};\n\nconst _emitError = (msg: string) => {\n emit('onError', msg);\n};\n\n// 清洗无效项(id 为字符串/数字且非空),防模板 dropInfo.id.toString() 与 getJsonByList 崩溃(G1-01/G4-F6 同根)\nconst _sanitizeList = (list: any[]): any[] => {\n if (CommonBase.isEmpty(list)) {\n return [];\n }\n return list.filter((item: any) => {\n if (!item) {\n return false;\n }\n const idOk =\n (CommonBase.isString(item.id) && !CommonBase.isEmpty(item.id)) ||\n (CommonBase.isNumber(item.id) && CommonBase.isFinite(item.id));\n return idOk;\n });\n};\n\nconst _getSearch = async (value: string) => {\n _searchToken++;\n const token = _searchToken;\n let list: any[] = [];\n if (props.serverCallback) {\n if (props.isShowLoading) {\n optBase.isRunLoading = true;\n }\n try {\n list = await props.serverCallback({ search: value, offset: 0 });\n if (token !== _searchToken) return;\n nextTick(() => {\n if (token !== _searchToken) return;\n optBase.isRunLoading = false;\n if (_selfTop) {\n _selfTop.convertListToJson(list);\n }\n nextTick(() => {\n _getSearchNext(value, list);\n });\n });\n } catch (e) {\n // 仅最新请求的失败才复位 loading 与报错,旧请求失败不干扰新请求状态(G2-F1)\n if (token === _searchToken) {\n optBase.isRunLoading = false;\n _emitError('服务端搜索失败,请稍后重试');\n }\n }\n } else {\n if (CommonBase.isEmpty(value)) {\n list = props.originalData as any[];\n _getSearchNext(value, list);\n } else if (CommonBase.isNonEmptyString(value)) {\n const tempSearch = value.toLowerCase();\n const searchKeyCount = props.searchKey.length;\n const arrSearchKey = props.searchKey as any[];\n props.originalData.forEach((info: any) => {\n const bb = [];\n for (let bi = 0; bi < searchKeyCount; bi++) {\n const bKeyValue = info[arrSearchKey[bi]];\n if (\n CommonBase.isNonEmptyString(bKeyValue) &&\n bKeyValue.toLowerCase().indexOf(tempSearch) > -1\n ) {\n bb.push(true);\n }\n }\n if (bb.length > 0) {\n switch (props.searchKeyType) {\n case '||':\n list.push(info);\n break;\n case '&&':\n if (bb.length === searchKeyCount) {\n list.push(info);\n }\n break;\n default:\n break;\n }\n }\n });\n _getSearchNext(value, list);\n }\n }\n};\n\nconst _getSearchNext = (value: string, list: any[]) => {\n // 级联处理:补全 + 平铺树;非级联经清洗,防模板 toString 崩溃(G1-01)\n if (props.isCascade) {\n if (!CommonBase.isEmpty(value)) {\n list = _cascadeSearchFill(list, props.originalData as any[]);\n }\n _showAllDataRaw = list; // R-4:级联搜索态原始累积同步(加载更多后重跑平铺用)\n list = _buildFlatList(list);\n } else {\n list = _sanitizeList(list);\n }\n _showAllData = list;\n optShowData.value = _getShowDataByStartEnd(0, _pageInfo.limit);\n if (refElList.value) {\n refElList.value.scrollTop = 0;\n }\n _setPageInfo(0, _pageInfo.limit);\n _setUseAllId();\n optHoverKeydown.value = '';\n _emitFilterResult(value, list.length === 0);\n};\n\nconst _setUseAllId = () => {\n const ids: string[] = [];\n // selectId 归一化字符串比较,数字初始 selectId 下全选判定一致(G1-03 同根补漏)\n const selectIdStrs = (props.selectId as any[]).map((id: any) => id.toString());\n _showAllData.forEach((info: any) => {\n if (CommonBase.isEmpty(info.id)) return;\n const id = info.id.toString();\n if (info.isDisabled) {\n if (CommonBase.isExistValue(selectIdStrs, id)) {\n ids.push(id);\n }\n } else {\n ids.push(id);\n }\n });\n _optUseAllId.value = ids;\n};\n\n// 级联:扁平数据 → 平铺树(带 _level, _parentName, _hasChildren)\nconst _buildFlatList = (list: any[]) => {\n const parentKey = (props.parentKey || 'parentId') as string;\n const topParentValue = (props.topParentValue || '0') as string;\n const childrenMap: Record<string, any[]> = {};\n list.forEach((item: any) => {\n if (CommonBase.isEmpty(item.id)) return;\n const pid = item[parentKey];\n // parentId 归一化字符串比较:数字 0 与字符串 '0' 均为顶级,避免顶级节点被丢弃(G1-02)\n if (!CommonBase.isEmpty(pid) && pid.toString() !== topParentValue) {\n const pidStr = pid.toString();\n if (!childrenMap[pidStr]) childrenMap[pidStr] = [];\n childrenMap[pidStr].push(item);\n }\n });\n const result: any[] = [];\n const topNodes = list.filter((item: any) => {\n if (CommonBase.isEmpty(item.id)) return false;\n const pid = item[parentKey];\n return CommonBase.isEmpty(pid) || pid.toString() === topParentValue;\n });\n // 环检测:任意节点至多作为父级展开一次,避免脏数据(环)导致无限递归\n const expandedIds = new Set<string>();\n const traverseSafe = (nodes: any[], level: number, parentName: string) => {\n nodes.forEach((node: any) => {\n const id = node.id.toString();\n if (expandedIds.has(id)) return;\n expandedIds.add(id);\n const children = childrenMap[id] || [];\n result.push({\n ...node,\n _level: level,\n _parentName: parentName,\n _hasChildren: children.length > 0,\n // parentSelectable 契约:级联父级(有子级项)不可选中时置为禁用\n isDisabled: node.isDisabled || (children.length > 0 && !props.parentSelectable),\n });\n if (children.length > 0) {\n traverseSafe(children, level + 1, node.name);\n }\n });\n };\n traverseSafe(topNodes, 0, '');\n return result;\n};\n\n// 级联搜索补全:子级补全所有祖先链,父级补所有子级\nconst _cascadeSearchFill = (filteredList: any[], allData: any[]) => {\n const parentKey = (props.parentKey || 'parentId') as string;\n const topParentValue = (props.topParentValue || '0') as string;\n const idToItem: Record<string, any> = {};\n const childrenMap: Record<string, string[]> = {};\n allData.forEach((item: any) => {\n if (CommonBase.isEmpty(item.id)) return;\n const id = item.id.toString();\n idToItem[id] = item;\n const pid = item[parentKey];\n // 与 _buildFlatList 同口径:parentId 归一化字符串比较(G1-02)\n if (!CommonBase.isEmpty(pid) && pid.toString() !== topParentValue) {\n if (!childrenMap[pid.toString()]) childrenMap[pid.toString()] = [];\n childrenMap[pid.toString()].push(id);\n }\n });\n const resultIds = new Set<string>();\n const filteredIds = new Set<string>();\n filteredList.forEach((item: any) => {\n if (CommonBase.isEmpty(item.id)) return;\n filteredIds.add(item.id.toString());\n });\n // 向上补齐完整祖先链(≥3 层级联时保证层级完整,避免父节点被 _buildFlatList 丢弃)\n const fillAncestors = (id: string) => {\n let cur = idToItem[id];\n let guard = 0;\n while (cur && guard < 100) {\n resultIds.add(cur.id.toString());\n const pid = cur[parentKey];\n if (CommonBase.isEmpty(pid) || pid.toString() === topParentValue) break;\n cur = idToItem[pid.toString()];\n guard++;\n }\n };\n filteredList.forEach((item: any) => {\n if (CommonBase.isEmpty(item.id)) return;\n const id = item.id.toString();\n fillAncestors(id);\n if (childrenMap[id]) {\n childrenMap[id].forEach((childId: string) => {\n resultIds.add(childId);\n });\n }\n });\n return allData.filter((item: any) => {\n if (CommonBase.isEmpty(item.id)) return false;\n return resultIds.has(item.id.toString());\n });\n};\n\nconst _getShowDataByStartEnd = (start: number, end: number) => {\n const list: any[] = [];\n const len = _showAllData.length;\n const s = start < 0 ? 0 : start;\n const e = end <= len ? end : len;\n if (s < e) {\n for (let i = s; i < e; i++) {\n list.push(_showAllData[i]);\n }\n }\n return list;\n};\n\nconst _getShowDataByOffset = (offset: number, direction: string) => {\n let s = 0;\n let e = 0;\n switch (direction) {\n case 'prev':\n s = offset - _pageInfo.limit;\n e = offset;\n break;\n case 'next':\n s = offset;\n e = s + _pageInfo.limit;\n break;\n default:\n break;\n }\n return _getShowDataByStartEnd(s, e);\n};\n\nconst _setPageInfo = (start: number, end: number) => {\n let s = _pageInfo.start;\n if (s === -1 || start < s) {\n s = start;\n }\n s = s <= 0 ? 0 : s;\n\n let e = _pageInfo.end;\n if (end > e) {\n e = end;\n }\n e = end <= _showAllData.length ? end : _showAllData.length;\n\n _pageInfo.start = s;\n _pageInfo.end = e;\n};\n\nconst _initData = () => {\n let tempSelectIndx = -1;\n let tempSelectId = '';\n if (!CommonBase.isEmpty(props.selectId)) {\n // R-2:selectId 归一化字符串后比较,数字 selectId 下初始选中定位生效(G1-03 同根补漏)\n const selectIdStrs = (props.selectId as any[]).map((s: any) => s.toString());\n _showAllData.some((info: any, i: number) => {\n if (CommonBase.isEmpty(info.id)) return false;\n const id = info.id.toString();\n const equal = CommonBase.isExistValue(selectIdStrs, id);\n if (equal) {\n tempSelectIndx = i;\n tempSelectId = id;\n }\n return equal;\n });\n }\n let start = 0;\n let end = 0;\n if (tempSelectIndx === -1) {\n _selectFirstIndex = 0;\n start = 0;\n end = _pageInfo.limit;\n } else {\n const pageSpace = 1;\n start = tempSelectIndx - _pageInfo.limit * pageSpace;\n end = tempSelectIndx + _pageInfo.limit * pageSpace;\n }\n\n optShowData.value = _getShowDataByStartEnd(start, end);\n // R-3:窗口重置直接赋值(_setPageInfo 只收缩不扩展,选中项后移时 start 卡旧值 → 上滚分页判断恒 false 数据断层)\n _pageInfo.start = start <= 0 ? 0 : start;\n _pageInfo.end = end >= _showAllData.length ? _showAllData.length : end;\n if (!CommonBase.isEmpty(tempSelectId)) {\n optShowData.value.some((info: any, i: number) => {\n // 与第一次 some 同口径判空(G4-F5)\n if (CommonBase.isEmpty(info.id)) return false;\n const equal = info.id.toString() === tempSelectId;\n if (equal) {\n _selectFirstIndex = i;\n }\n return equal;\n });\n }\n};\n\nconst _initScrollSelect = (inx: number) => {\n nextTick(() => {\n const elList = refElList.value;\n if (!elList || !elList.children[0]) return;\n if (inx > 0) {\n // R-7 连带:children 返回 Element 无 offsetTop,断言 HTMLElement\n const elLi = elList.children[0].children[inx] as HTMLElement;\n elList.scrollTop = elLi\n ? elLi.offsetTop > _SCROLL_TOP_THRESHOLD\n ? elLi.offsetTop - _SCROLL_TOP_OFFSET\n : 0\n : 0;\n } else {\n elList.scrollTop = 0;\n }\n });\n};\n\nconst _refreshData = () => {\n if (props.isCascade) {\n _showAllDataRaw = _sanitizeList(props.originalData);\n _showAllData = _buildFlatList(_showAllDataRaw);\n } else {\n _showAllData = _sanitizeList(props.originalData);\n }\n _initData();\n nextTick(() => {\n // 初始 searchValue 非空时保留搜索框内容与搜索态,仅空值场景清空(G1-07/G2-F4)\n if (CommonBase.isEmpty(props.searchValue)) {\n if (refElSearch.value) {\n refElSearch.value.setValue('');\n }\n if (refElList.value) {\n _initScrollSelect(_selectFirstIndex);\n }\n }\n });\n};\n\nconst _onScrollData = async (e: Event) => {\n // 时间戳节流:scroll 高频触发,150ms 内只处理一次\n const now = Date.now();\n const elScroll = e.target as HTMLElement;\n const scrollTop = elScroll.scrollTop;\n if (now - _lastScrollTime < 150) {\n // 节流窗口内同步滚动位置基准,避免窗口结束后方向判断用旧值误触发(G2-F7)\n _prevScroll = scrollTop;\n return;\n }\n _lastScrollTime = now;\n const scrollHeight = elScroll.offsetHeight;\n // 空数据分支(ul 无 li)不处理分页,同步基准后返回(G3-F7)\n if (!elScroll.children[0]) {\n _prevScroll = scrollTop;\n return;\n }\n const childHeight = (elScroll.children[0] as HTMLElement).offsetHeight;\n if (scrollTop > _prevScroll) {\n if (\n scrollTop + scrollHeight + _SCROLL_BOTTOM_LOAD > childHeight &&\n !_pageData.isScrollLoadIng\n ) {\n _pageData.isScrollLoadIng = true;\n if (_pageInfo.end >= _showAllData.length) {\n if (props.serverCallback) {\n // 捕获 token + 搜索词(不递增):新搜索发起时 _getSearch 递增 token 单向作废本响应,防串台与污染父数据(G2-F2)\n const token = _searchToken;\n const searchValue = props.searchValue;\n const param: any = {\n offset: _showAllData.length,\n };\n if (!CommonBase.isEmpty(searchValue)) {\n param.search = searchValue;\n }\n try {\n const nextList = await props.serverCallback(param);\n if (_isUnmounted) return;\n if (token === _searchToken && props.searchValue === searchValue) {\n if (props.isCascade) {\n // R-4:级联模式累积原始数据后重跑平铺,新页项保持 _level 缩进与 parentSelectable 禁用契约\n _showAllDataRaw.push(..._sanitizeList(nextList));\n _showAllData = _buildFlatList(_showAllDataRaw);\n } else {\n _showAllData.push(..._sanitizeList(nextList));\n }\n _setUseAllId();\n if (_selfTop) {\n // R-1:重建语义传完整累积(原传增量 nextList 会清空旧页 id→name 映射,选中旧页项静默丢标签)\n _selfTop.convertListToJson(_showAllData);\n }\n }\n } catch (e) {\n // 仅未被新搜索作废的请求失败才报错(G2-F1 同根补漏)\n if (token === _searchToken) {\n _emitError('服务端加载更多失败,请稍后重试');\n }\n }\n }\n }\n if (_pageInfo.end < _showAllData.length) {\n const nextList = _getShowDataByOffset(_pageInfo.end, 'next');\n optShowData.value.push(...nextList);\n _setPageInfo(_pageInfo.start, _pageInfo.end + _pageInfo.limit);\n }\n _pageData.isScrollLoadIng = false;\n }\n } else {\n if (scrollTop < _SCROLL_TOP_LOAD && _pageInfo.start > 0) {\n const prevList = _getShowDataByOffset(_pageInfo.start, 'prev');\n const prevLen = prevList.length;\n if (prevLen > 0) {\n optShowData.value.unshift(...prevList);\n _setPageInfo(_pageInfo.start - _pageInfo.limit, _pageInfo.end);\n nextTick(() => {\n // 卸载竞态/渲染窗口不同步时判空(G1-05/G2-F3/G4-F4)\n const elList = refElList.value;\n if (!elList || !elList.children[0]) return;\n let h = 0;\n const children = elList.children[0].children;\n for (let pi = 0; pi < prevLen; pi++) {\n if (!children[pi]) break;\n h += (children[pi] as HTMLElement).offsetHeight;\n }\n elList.scrollTop += h;\n });\n }\n }\n }\n _prevScroll = scrollTop;\n};\n\nconst _firstOpenInit = () => {\n if (_isFirstOpen) return;\n nextTick(() => {\n if (refElList.value) {\n refElList.value.addEventListener('scroll', _onScrollData);\n _isFirstOpen = true;\n }\n // refElList 为 null(loading 态)时不置锁,数据到达后重试注册\n });\n};\n\nconst optFunShowTextLabel = (info: any) => {\n let format = props.showDropDownTextFormat as string;\n if (info._level >= 1 && !CommonBase.isEmpty(props.showDropDownTextFormatSub)) {\n format = props.showDropDownTextFormatSub as string;\n }\n if (CommonBase.isEmpty(format)) {\n // name 非字符串(数字等)时兜底 String(),避免 null/undefined 渲染 'null' 文本(G1-08)\n if (CommonBase.isEmpty(info.name)) return '';\n const name = info.name;\n return CommonBase.isString(name) ? CommonBase.encodeHTML(name) : String(name);\n }\n return CommonBase.convertStringFormatEncodeHTML(format, info);\n};\n\nconst _getSelectIds = (id: string) => {\n const newIds: string[] = [];\n if (props.isMultiple) {\n // sId 归一化字符串后与 id 比较,数字 id 下 toggle 生效(G1-03 同根)\n (props.selectId as any[]).forEach((sId: any) => {\n if (sId.toString() !== id) {\n newIds.push(sId);\n }\n });\n // R-2:同上方 forEach 归一化口径,数字 selectId 下取消操作不误判为未选(G1-03 同根补漏)\n if (\n !CommonBase.isExistValue(\n (props.selectId as any[]).map((s: any) => s.toString()),\n id,\n )\n ) {\n newIds.push(id);\n }\n } else {\n newIds.push(id);\n }\n return newIds;\n};\n\nconst _setHover = (operateType: number) => {\n const data = optShowData.value;\n if (data.length === 0) {\n optHoverKeydown.value = '';\n return;\n }\n let inx = -1;\n const lastHover = optHoverKeydown.value;\n if (lastHover.length > 0) {\n data.forEach((info: any, i: number) => {\n if (info.id.toString() === lastHover) {\n inx = i;\n }\n });\n inx += operateType;\n if (inx < 0) {\n inx = 0;\n } else if (inx >= data.length) {\n inx = data.length - 1;\n }\n } else {\n inx = 0;\n }\n optHoverKeydown.value = CommonBase.isEmpty(data[inx].id) ? '' : data[inx].id.toString();\n _initScrollSelect(inx);\n};\n\nconst _onWinKeydown = (e: any) => {\n // C12-4:IME 组合态(isComposing/keyCode 229)放行,候选窗方向键/确认键不被 window 拦截消费\n if (e.isComposing || e.keyCode === 229) {\n return;\n }\n let keyCode = e.keyCode;\n if (!CommonBase.isUndefined(keyCode)) {\n keyCode = keyCode.toString();\n switch (keyCode) {\n case '13': // Enter\n if (e.shiftKey) {\n break; // Shift+Enter 换行放行(G2-F3 跨文件补:Input 的 shiftKey 守卫覆盖不到被 window 拦截的路径)\n }\n e.preventDefault();\n e.stopPropagation();\n break;\n case '38': // Up\n e.preventDefault();\n e.stopPropagation();\n _setHover(-1);\n break;\n case '40': // Down\n e.preventDefault();\n e.stopPropagation();\n _setHover(1);\n break;\n default:\n break;\n }\n }\n};\n\nconst _onWinKeyup = (e: any) => {\n // C11-4:同 keydown 侧 IME 守卫(老 IE 序列 keydown 229 + keyup 13 不误触发选择)\n if (e.isComposing || e.keyCode === 229) {\n return;\n }\n let keyCode = e.keyCode;\n if (!CommonBase.isUndefined(keyCode)) {\n keyCode = keyCode.toString();\n switch (keyCode) {\n case '27': // Esc\n // C12-1:Esc 关闭下拉(走 Base 关闭动画 + initOpenShow 注销监听;_selfTop 缺失时静默)\n if (_selfTop) {\n _selfTop.setDropdownOpen(false);\n }\n break;\n case '13': // Enter\n if (e.shiftKey) {\n break; // Shift+Enter 换行放行(G2-F3 跨文件补:keyup 时 shift 仍按住,不触发选择)\n }\n const id = optHoverKeydown.value;\n if (!CommonBase.isEmpty(id)) {\n // 键盘路径与鼠标路径同守卫:禁用项不可被 Enter 选中(G3-F2)\n const hoverInfo = optShowData.value.find((info: any) => info.id.toString() === id);\n if (hoverInfo && !hoverInfo.isDisabled) {\n const newIds: string[] = _getSelectIds(id);\n _emitChange(newIds, {\n id,\n // R3-F1:isSelect = 操作后该项处于选中态(未选 → true 添加;已选 → false 移除)。原 indexOf>0 语义反了:点未选项走移除、点已选项走添加,选择/取消全挂(第三轮浏览器验证暴露)\n isSelect: (props.selectId as any[]).map((s: any) => s.toString()).indexOf(id) === -1,\n });\n }\n }\n break;\n case '37': // Left\n break;\n default:\n break;\n }\n }\n};\n\nconst _initMain = () => {\n _refreshData();\n _setUseAllId();\n _firstOpenInit();\n const { searchValue } = props;\n if (CommonBase.isNonEmptyString(searchValue)) {\n _getSearch(searchValue);\n }\n};\n\nonMounted(() => {\n _initMain();\n});\n\nonBeforeUnmount(() => {\n // 兜底清理:父组件未显式关闭时移除 window 键盘监听与列表 scroll 监听\n _isUnmounted = true;\n CommonElement.offListener(window, 'keydown', _onWinKeydown, true);\n CommonElement.offListener(window, 'keyup', _onWinKeyup, true);\n _isKeyDownRegistered = false;\n if (refElList.value) {\n refElList.value.removeEventListener('scroll', _onScrollData);\n }\n});\n\nwatch(\n () => props.originalData,\n newValue => {\n if (props.isCascade) {\n _showAllDataRaw = _sanitizeList(newValue);\n _showAllData = _buildFlatList(_showAllDataRaw);\n } else {\n _showAllData = _sanitizeList(newValue);\n }\n // 数据刷新后重跑选中项定位(_initData 内含窗口重算),选中项位置跟随新数据(G1-06)\n _initData();\n _setUseAllId();\n // loading 态首次注册失败的场景,数据到达后重试注册 scroll 监听\n _firstOpenInit();\n },\n);\n\nwatch(\n () => props.searchValue,\n (newValue: any) => {\n // 无条件触发:清空(空串)时走 _getSearch 空值分支恢复全量列表\n _getSearch(newValue);\n },\n);\n\nconst onSearch = (value: string) => {\n _getSearch(value);\n};\n\nconst onSelectAll = (e: any) => {\n if (!e || !props.isMultiple) return;\n // selectId 归一化字符串比较,数字初始 selectId 下取消全选生效(G1-03 同根补漏)\n const selectIdStrs = (props.selectId as any[]).map((id: any) => id.toString());\n // 禁用项集合:取消全选不误删已选 disabled 项(G1-04)\n const disabledIds = new Set<string>();\n _showAllData.forEach((info: any) => {\n if (info.isDisabled && !CommonBase.isEmpty(info.id)) {\n disabledIds.add(info.id.toString());\n }\n });\n const totalIds: string[] = [];\n const addIds: string[] = [];\n const delIds: string[] = [];\n _optUseAllId.value.forEach((id: string) => {\n if (e.value) {\n if (!CommonBase.isExistValue(selectIdStrs, id)) {\n addIds.push(id);\n }\n } else {\n if (CommonBase.isExistValue(selectIdStrs, id) && !disabledIds.has(id)) {\n delIds.push(id);\n }\n }\n totalIds.push(id);\n });\n const newIds: any[] = CommonBase.getArrClone(props.selectId);\n if (delIds.length > 0) {\n delIds.forEach((id: string) => {\n // indexOf 严格比较在数字 id 下返回 -1(误删末项),改用归一化 findIndex(G1-03 同根补漏)\n const idx = newIds.findIndex((s: any) => s.toString() === id);\n if (idx > -1) {\n newIds.splice(idx, 1);\n }\n });\n }\n if (addIds.length > 0) {\n newIds.push(...addIds);\n }\n _emitChange(newIds, { id: totalIds, isSelect: e.value });\n};\n\nconst onSelectItem = (info: any) => {\n if (!info.isDisabled && !CommonBase.isEmpty(info.id)) {\n const id = info.id.toString();\n const newIds: string[] = _getSelectIds(id);\n _emitChange(newIds, {\n id,\n // R3-F1:同键盘路径,isSelect = 操作后选中态(未选 → true;已选 → false)\n isSelect: (props.selectId as any[]).map((s: any) => s.toString()).indexOf(id) === -1,\n });\n }\n};\n\nconst onHoverInItem = (info: any) => {\n if (!info || CommonBase.isEmpty(info.id)) return;\n optHoverKeydown.value = info.id.toString();\n};\n\nconst onHoverOutItem = (info: any) => {\n if (!info || CommonBase.isEmpty(info.id)) return;\n if (optHoverKeydown.value === info.id.toString()) {\n optHoverKeydown.value = '';\n }\n};\n\nconst initOpenShow = (isOpen: boolean) => {\n // 注册状态标志:重复打开不重复注册、重复关闭不重复注销(G2-F5)\n if (isOpen) {\n if (!_isKeyDownRegistered) {\n CommonElement.onListener(window, 'keydown', _onWinKeydown, true);\n CommonElement.onListener(window, 'keyup', _onWinKeyup, true);\n _isKeyDownRegistered = true;\n }\n } else {\n if (_isKeyDownRegistered) {\n CommonElement.offListener(window, 'keydown', _onWinKeydown, true);\n CommonElement.offListener(window, 'keyup', _onWinKeyup, true);\n _isKeyDownRegistered = false;\n }\n }\n};\n\nconst getHoverKeydown = () => {\n return optHoverKeydown.value;\n};\n\nexport interface ClDropdownlayerSearchListExpose {\n initOpenShow: (isOpen: boolean) => void;\n getHoverKeydown: () => string;\n}\n\ndefineExpose({\n initOpenShow,\n getHoverKeydown,\n});\n</script>\n","<template>\n <cl-dropdownlayer-list\n v-if=\"isAutofill\"\n ref=\"refElDropdownLayer\"\n :id=\"elId\"\n :classParent=\"clsParent\"\n :classDropDown=\"clsDropdown\"\n :transitionLeave=\"'inputTag-dropdown-leave'\"\n @onChangeOpen=\"onToggleOpen\"\n >\n <template v-slot:labelCustom>\n <cl-input-tag-input\n ref=\"refElInput\"\n :value=\"value\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :isClean=\"isClean\"\n :multiple=\"multiple\"\n :minHeight=\"minHeight\"\n :joinKey=\"joinKey\"\n :isCopy=\"isCopy\"\n :isCopyMultipleWrap=\"isCopyMultipleWrap\"\n :copyJoinKey=\"copyJoinKey\"\n :isDropdownLayer=\"true\"\n :textMaxHeight=\"textMaxHeight\"\n :tagsMaxHeight=\"tagsMaxHeight\"\n :isShowNum=\"isShowNum\"\n @onChange=\"onSelected\"\n @onChangeInput=\"onInputSearch\"\n @onInit=\"onInitComplete\"\n @onFocus=\"onInputFocus\"\n ></cl-input-tag-input>\n </template>\n <template v-slot:dropdown>\n <cl-input-tag-dropdown\n ref=\"refElList\"\n :keyIndex=\"optBase.keyIndex\"\n :isSearch=\"false\"\n :searchValue=\"optBase.searchValue\"\n :searchKey=\"searchKey\"\n :searchKeyType=\"searchKeyType\"\n :isMultiple=\"false\"\n :showDropDownTextFormat=\"showDropDownTextFormat\"\n :showDropDownTextFormatSub=\"showDropDownTextFormatSub\"\n :isCascade=\"isCascade\"\n :parentSelectable=\"parentSelectable\"\n :parentKey=\"parentKey\"\n :topParentValue=\"topParentValue\"\n :isShowEmptyLabel=\"false\"\n :originalData=\"list\"\n :selectId=\"optBase.dropdownSelectId\"\n :serverCallback=\"serverCallback\"\n :isShowLoading=\"isShowLoading\"\n @onSearchResult=\"onDropSearchResult\"\n @onChange=\"onDropSelect\"\n @onError=\"onDropError\"\n ></cl-input-tag-dropdown>\n </template>\n </cl-dropdownlayer-list>\n <div\n v-else\n :class=\"clsParent\"\n :id=\"elId\"\n >\n <cl-input-tag-input\n ref=\"refElInput\"\n :value=\"value\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :isClean=\"isClean\"\n :multiple=\"multiple\"\n :minHeight=\"minHeight\"\n :joinKey=\"joinKey\"\n :isCopy=\"isCopy\"\n :isCopyMultipleWrap=\"isCopyMultipleWrap\"\n :copyJoinKey=\"copyJoinKey\"\n :isDropdownLayer=\"false\"\n :textMaxHeight=\"textMaxHeight\"\n :tagsMaxHeight=\"tagsMaxHeight\"\n :isShowNum=\"isShowNum\"\n @onChange=\"onSelected\"\n @onChangeInput=\"onInputSearch\"\n @onInit=\"onInitComplete\"\n @onFocus=\"onInputFocus\"\n ></cl-input-tag-input>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { provide, watch, nextTick, onMounted, computed, ref, reactive } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport ClDropdownlayerList from '../DropdownLayer/List.vue';\nimport ClInputTagInput from './Input.vue';\nimport ClInputTagDropdown from './Dropdown.vue';\nimport './index.css';\n\n// F3:类型定义归位 ② 类型区(原穿插在常量区,0x 违规)\ninterface ListItemJson {\n [key: string]: any;\n}\n\ninterface PageData {\n listNameJson: ListItemJson;\n listIdJson: ListItemJson;\n}\n\ndefineOptions({ name: 'ClInputTag' });\n\nconst props = defineProps({\n id: String, // desc: 组件实例唯一标识,不传自动生成\n value: String, // desc: 绑定值(joinKey 分隔的字符串)\n className: String, // desc: 自定义CSS类名\n placeholder: String, // desc: 输入占位提示\n disabled: Boolean, // desc: 是否禁用\n isClean: {\n type: Boolean,\n default: true, // desc: 是否显示清空按钮\n },\n multiple: {\n type: Boolean,\n default: true, // desc: 是否多选\n },\n isCopy: Boolean, // desc: 是否启用复制按钮\n isCopyMultipleWrap: {\n type: Boolean,\n default: true, // desc: 多选复制时是否换行包裹\n },\n copyJoinKey: {\n type: String,\n default: ',', // desc: 复制时的拼接分隔符\n },\n minHeight: {\n type: String,\n default: '70px', // desc: 输入区最小高度\n },\n joinKey: {\n type: String,\n default: ',', // desc: 标签拼接分隔符\n },\n isAutofill: Boolean, // desc: 是否启用下拉模式(DropdownLayer 包裹)\n list: {\n type: Array,\n default: () => {\n return []; // desc: 候选数据列表(id/name 结构)\n },\n },\n searchKey: {\n type: Array,\n default: () => {\n return ['name']; // desc: 搜索匹配的字段\n },\n },\n searchKeyType: {\n type: String,\n default: '||', // desc: 搜索匹配方式 | enum: ||, &&\n validator: (value: string) => ['||', '&&'].indexOf(value) > -1,\n },\n showDropDownTextFormat: String, // desc: 下拉项文本格式化模板,${xxx} 格式\n showDropDownTextFormatSub: String, // desc: 二级下拉项文本格式化,${xxx} 格式\n isCascade: Boolean, // desc: 是否启用二级级联\n parentSelectable: Boolean, // desc: 二级级联时父级是否可被选中\n parentKey: {\n type: String,\n default: 'parentId', // desc: 数据中标识父级的字段名\n },\n topParentValue: {\n type: String,\n default: '0', // desc: 顶级父节点的 parentKey 值\n },\n isFocusShowDrop: Boolean, // desc: 聚焦时是否展示下拉\n textMaxHeight: String, // desc: 文本域最大高度\n tagsMaxHeight: String, // desc: 标签区最大高度\n isShowNum: Boolean, // desc: 是否显示标签数量角标\n isShowLoading: Boolean, // desc: 服务端搜索时是否显示加载中\n serverCallback: Function, // desc: 服务端搜索回调\n});\n\nconst emit = defineEmits<{\n (e: 'onInit'): void; // desc: 初始化完成\n (e: 'update:value', value: string): void; // desc: 值变化(v-model 绑定)\n (e: 'onChange', value: string, preOper?: string): void; // desc: 值变化回调,preOper 为操作来源\n (e: 'onError', msg: string): void; // desc: 服务端请求失败回调\n}>();\n\nconst elId = props.id; // || `inputTag-${CommonBase.getRandom(N)}`\n\n// F2:移除 : any 覆盖注解,保留 ref 范型类型保护(被调用方 expose 均已声明类型)\nconst refElDropdownLayer = ref<InstanceType<typeof ClDropdownlayerList> | null>(null);\nconst refElInput = ref<InstanceType<typeof ClInputTagInput> | null>(null);\nconst refElList = ref<InstanceType<typeof ClInputTagDropdown> | null>(null);\n\nconst optBase = reactive({\n keyIndex: `inputTag-${CommonBase.getRandom(8)}`,\n searchValue: '',\n dropdownSelectId: [] as string[],\n isUseData: false,\n});\n\nconst _pageData: PageData = {\n listNameJson: {},\n listIdJson: {},\n};\n\nconst clsParent = computed(() => {\n let cls: Record<string, boolean> = {\n 'panel-inputtag': true,\n 'box-width': true,\n 'inputTag-disabled': props.disabled,\n };\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n return CommonBase.getStringByJson(cls, ' ');\n});\n\nconst clsDropdown = computed(() => {\n let cls = 'inputTag-dropdown ';\n if (!optBase.isUseData) {\n cls += ' inputTag-dropdown-nodata ';\n }\n return cls;\n});\n\nconst _emitChange = (value: string, preOper = '') => {\n emit('update:value', value);\n emit('onChange', value, preOper);\n};\n\nconst _emitInit = () => {\n nextTick(() => {\n emit('onInit');\n });\n};\n\nconst _convertListToJson = (list: any[]) => {\n const isEmpty = CommonBase.isEmpty(list);\n // 清洗无效项(id 为字符串/数字且非空、name 为字符串/数字且非空),防 getJsonByList 内部 toString 崩溃\n const safeList = isEmpty\n ? []\n : list.filter((item: any) => {\n if (!item) {\n return false;\n }\n const idOk =\n (CommonBase.isString(item.id) && !CommonBase.isEmpty(item.id)) ||\n (CommonBase.isNumber(item.id) && CommonBase.isFinite(item.id));\n const nameOk =\n CommonBase.isNonEmptyString(item.name) ||\n (CommonBase.isNumber(item.name) && !CommonBase.isEmpty(item.name));\n return idOk && nameOk;\n });\n // list 变化时重建映射,避免旧数据残留(getJsonByList 已深拷贝,直接赋值即可)\n _pageData.listNameJson = CommonBase.getJsonByList(safeList, 'name');\n _pageData.listIdJson = CommonBase.getJsonByList(safeList, 'id');\n};\n\nconst _setDropdownOpen = (isOpen: boolean) => {\n if (refElDropdownLayer.value) {\n const isShowOpen = refElDropdownLayer.value.checkIsShowOpen();\n if (isOpen) {\n if (!isShowOpen) {\n const ids: any = [];\n const tempValue = refElInput.value ? refElInput.value.getValue() : '';\n const arrValue = CommonBase.isEmpty(tempValue)\n ? []\n : CommonBase.split(tempValue, props.joinKey || ',');\n if (arrValue.length > 0) {\n arrValue.forEach((v: any) => {\n if (CommonBase.isExistJsonKey(_pageData.listNameJson, v)) {\n const item = _pageData.listNameJson[v];\n if (item && !CommonBase.isEmpty(item.id)) {\n ids.push(item.id.toString());\n }\n }\n });\n }\n optBase.dropdownSelectId = ids;\n // C11-1:服务端模式(serverCallback)初始 list 为空时 loading 态需可见,isUseData 视为 true\n optBase.isUseData = !CommonBase.isEmpty(props.list) || !!props.serverCallback;\n refElDropdownLayer.value.setOpen(true);\n nextTick(() => {\n if (refElDropdownLayer.value) {\n refElDropdownLayer.value.initCompleteOpen();\n }\n });\n }\n } else {\n optBase.isUseData = true;\n if (isShowOpen) {\n refElDropdownLayer.value.setOpen(false);\n }\n }\n }\n};\n\nconst _initMain = () => {\n if (!CommonBase.isEmpty(props.list)) {\n _convertListToJson(props.list);\n }\n};\n\nonMounted(() => {\n nextTick(() => {\n _initMain();\n });\n});\n\nwatch(\n () => props.list,\n newValue => {\n _convertListToJson(newValue as any[]);\n // C11-1:异步加载数据到达后刷新 isUseData,面板从 nodata 隐藏态恢复可见\n optBase.isUseData = !CommonBase.isEmpty(newValue) || !!props.serverCallback;\n },\n);\n\n// 输入组件初始化完成后转发 onInit(Input 侧仅首次挂载触发一次)\nconst onInitComplete = () => {\n _emitInit();\n};\n\nconst onToggleOpen = (value: boolean) => {\n // D1:disabled 守卫仅对打开方向生效——关闭分支必须放行,否则面板关闭时 Dropdown 的 window 键盘监听不注销,\n // 残留的捕获层 keydown 会持续劫持页面级 Enter(preventDefault + stopPropagation)\n if (value && props.disabled) {\n return;\n }\n nextTick(() => {\n if (refElList.value) {\n refElList.value.initOpenShow(value);\n }\n });\n};\n\n// B-修复:本地模式同步判断输入是否有匹配项——规则与 Dropdown.vue _getSearch 本地分支保持一致(searchKey 字段小写包含匹配,searchKeyType 或/与),\n// 有匹配才开弹层,无匹配不开(输入内容保留,可回车直接添加为 tag);两处规则改动需同步\nconst _hasLocalMatch = (value: string): boolean => {\n const tempSearch = value.toLowerCase();\n const arrSearchKey = props.searchKey as any[];\n let isMatch = false;\n props.list.forEach((info: any) => {\n if (isMatch) {\n return;\n }\n let matchCount = 0;\n for (let bi = 0; bi < arrSearchKey.length; bi++) {\n const keyValue = info[arrSearchKey[bi]];\n if (\n CommonBase.isNonEmptyString(keyValue) &&\n keyValue.toLowerCase().indexOf(tempSearch) > -1\n ) {\n matchCount++;\n }\n }\n if (matchCount > 0) {\n if (\n props.searchKeyType === '||' ||\n (props.searchKeyType === '&&' && matchCount === arrSearchKey.length)\n ) {\n isMatch = true;\n }\n }\n });\n return isMatch;\n};\n\nconst onInputSearch = (value: string) => {\n optBase.searchValue = value;\n let isOpenDropdown = true;\n if (\n CommonBase.isNonEmptyString(value) &&\n (value.indexOf('\\n') > -1 ||\n (!CommonBase.isEmpty(props.joinKey) && value.indexOf(props.joinKey) > -1))\n ) {\n isOpenDropdown = false;\n }\n if (isOpenDropdown) {\n // B-修复:无匹配不开弹层,避免空面板「一根线」闪现——本地模式同步判断;服务端异步模式无法同步判断,输入即开(loading),结果回来由 onDropSearchResult 收敛\n const isShowDrop = CommonBase.isEmpty(value)\n ? false\n : props.serverCallback\n ? true\n : _hasLocalMatch(value);\n _setDropdownOpen(isShowDrop);\n } else {\n _setDropdownOpen(false);\n }\n if (!props.multiple) {\n _emitChange(value, 'input');\n }\n};\n\nconst onDropSearchResult = (info: { search: string; isEmpty: boolean }) => {\n _setDropdownOpen(!info.isEmpty && !CommonBase.isEmpty(info.search));\n};\n\nconst onDropError = (msg: string) => {\n emit('onError', msg);\n};\n\nconst onDropSelect = (\n _selectIds: string[],\n currentOperate: { id: string | string[]; isSelect: boolean },\n) => {\n if (CommonBase.isEmpty(currentOperate)) {\n return;\n }\n if (props.disabled) {\n return; // C11-2:面板打开期间切换 disabled 后拦截点选/Enter 选中(onToggleOpen 守卫覆盖不到已注册的交互路径)\n }\n const nameArr: string[] = [];\n const ids: string[] = CommonBase.isArray(currentOperate.id)\n ? (currentOperate.id as string[])\n : [currentOperate.id as string];\n ids.forEach((id: string) => {\n if (CommonBase.isExistJsonKey(_pageData.listIdJson, id)) {\n nameArr.push(_pageData.listIdJson[id].name);\n }\n });\n if (!props.multiple) {\n optBase.searchValue = '';\n }\n if (refElInput.value) {\n refElInput.value.updateValue(nameArr.join(props.joinKey || ','), currentOperate.isSelect);\n }\n};\n\nconst onSelected = (value: string, preOper: string) => {\n _emitChange(value, preOper);\n if (props.isAutofill) {\n _setDropdownOpen(false);\n }\n};\n\nconst onInputFocus = (value: string) => {\n if (props.isAutofill && props.isFocusShowDrop) {\n optBase.searchValue = value;\n _setDropdownOpen(!CommonBase.isEmpty(value));\n }\n};\n\n// C11-P2:provide 契约单一来源接口,Input.vue/Dropdown.vue import type 复用(拼写统一 getListHoverValueKeydown,C11-P1)\nexport interface InputTagTop {\n getListHoverValueKeydown: () => string;\n convertListToJson: (list: any[]) => void;\n setDropdownOpen: (isOpen: boolean) => void;\n}\n\nprovide<InputTagTop>('$InputTagTop', {\n getListHoverValueKeydown: () => {\n let hValue = '';\n if (refElList.value) {\n hValue = refElList.value.getHoverKeydown();\n }\n return hValue;\n },\n convertListToJson: _convertListToJson,\n setDropdownOpen: _setDropdownOpen,\n});\n\nconst getValue = () => {\n if (!refElInput.value) {\n return '';\n }\n return refElInput.value.getValue();\n};\n\nconst getValueData = () => {\n const value = getValue();\n if (!refElInput.value) {\n return [];\n }\n const arrValue = CommonBase.split(value, props.joinKey || ',');\n return arrValue\n .filter((v: string) => !CommonBase.isEmpty(v))\n .map((v: string) => {\n const info = _pageData.listNameJson[v];\n return {\n name: v,\n id: info && !CommonBase.isEmpty(info.id) ? info.id : undefined,\n };\n });\n};\n\nconst setValue = (value: string) => {\n if (!refElInput.value) {\n return; // 输入组件未挂载时静默忽略(挂载后由 props.value 驱动同步)\n }\n refElInput.value.setValue(value);\n};\n\nconst focus = () => {\n if (!refElInput.value) {\n return;\n }\n refElInput.value.focus();\n};\n\nexport interface ClInputTagExpose {\n getValue: () => string;\n getValueData: () => { name: string; id?: any }[];\n setValue: (value: string) => void;\n focus: () => void;\n}\n\ndefineExpose({\n getValue,\n getValueData,\n setValue,\n focus,\n});\n</script>\n"],"names":["props","__props","emit","__emit","_selfTop","inject","refElTag","ref","refElTextarea","refElInput","optBase","reactive","optTagsList","optTagsValue","optOneValue","optIsValue","computed","CommonBase","optIsShowClean","clsParent","styParent","sty","styTags","multiple","tagsMaxHeight","_emitChange","preOper","value","_getValue","_emitInit","nextTick","_emitChangeInput","_emitFocus","optFunGetCopyTxt","v","joinKey","_initValue","list","arrValue","tempValue","_addTag","_focus","_updateValue","isSelect","toRaw","tempName","idx","info","idx2","_initMain","onMounted","watch","newValue","oldValue","onClickParent","e","elTextarea","onTagEnterStart","hoverValue","onTagEnterEnd","onTagFocus","onTagBlur","onTagClearOne","data","onTagClearAll","onInputChange","onInputFocus","__expose","_createElementBlock","_hoisted_1","_createElementVNode","_createVNode","ClTags","ClTextarea","_hoisted_2","ClInput","$event","_hoisted_3","_createBlock","ClBadge","_Fragment","ClIconFont","ClClipboard","_SCROLL_TOP_THRESHOLD","_SCROLL_TOP_OFFSET","_SCROLL_BOTTOM_LOAD","_SCROLL_TOP_LOAD","optPageLanguage","getPageLanguage","useLanguage","refElSearch","refElList","_keyIndex","_selectFirstIndex","_prevScroll","_searchToken","_lastScrollTime","_isKeyDownRegistered","_isUnmounted","_pageInfo","optKeyIndex","optHoverKeydown","optShowData","_optUseAllId","_showAllData","_showAllDataRaw","_isFirstOpen","_pageData","optAllValue","b","id","optSelectIdSet","ids","currentOperate","_emitFilterResult","searchVaue","isEmpty","_emitError","msg","_sanitizeList","item","_getSearch","token","_getSearchNext","tempSearch","searchKeyCount","arrSearchKey","bb","bi","bKeyValue","_cascadeSearchFill","_buildFlatList","_getShowDataByStartEnd","_setPageInfo","_setUseAllId","selectIdStrs","parentKey","topParentValue","childrenMap","pid","pidStr","result","topNodes","expandedIds","traverseSafe","nodes","level","parentName","node","children","filteredList","allData","idToItem","resultIds","filteredIds","fillAncestors","cur","guard","childId","start","end","len","s","i","_getShowDataByOffset","offset","direction","_initData","tempSelectIndx","tempSelectId","equal","_initScrollSelect","inx","elList","elLi","_refreshData","_onScrollData","now","elScroll","scrollTop","scrollHeight","childHeight","searchValue","param","nextList","prevList","prevLen","h","pi","_firstOpenInit","optFunShowTextLabel","format","name","_getSelectIds","newIds","sId","_setHover","operateType","lastHover","_onWinKeydown","keyCode","_onWinKeyup","hoverInfo","onBeforeUnmount","CommonElement","onSearch","onSelectAll","disabledIds","totalIds","addIds","delIds","onSelectItem","onHoverInItem","onHoverOutItem","isOpen","_openBlock","_hoisted_10","ClLoadIng","ClInputSearch","ClCheckboxOne","_unref","_renderList","dropInfo","_normalizeClass","_normalizeStyle","_hoisted_6","_hoisted_8","_hoisted_9","_toDisplayString","elId","refElDropdownLayer","cls","clsDropdown","_convertListToJson","safeList","idOk","nameOk","_setDropdownOpen","isShowOpen","onInitComplete","onToggleOpen","_hasLocalMatch","isMatch","matchCount","keyValue","onInputSearch","isOpenDropdown","isShowDrop","onDropSearchResult","onDropError","onDropSelect","_selectIds","nameArr","onSelected","provide","hValue","getValue","ClDropdownlayerList","ClInputTagInput","ClInputTagDropdown"],"mappings":"42CA6FA,MAAMA,EAAQC,EAgCRC,EAAOC,GASPC,EAAWC,EAAAA,OAAoB,cAAc,EAC7CC,EAAWC,EAAAA,IAAwC,IAAI,EACvDC,EAAgBD,EAAAA,IAA4C,IAAI,EAChEE,EAAaF,EAAAA,IAAyC,IAAI,EAE1DG,EAAUC,EAAAA,SAAS,CACvB,QAAS,EAAA,CACV,EACKC,EAAcL,EAAAA,IAAe,EAAE,EAC/BM,EAAeN,EAAAA,IAAc,EAAE,EAC/BO,EAAcP,EAAAA,IAAY,EAAE,EAE5BQ,EAAaC,EAAAA,SAAS,IACnB,CAACC,EAAAA,WAAW,QAAQJ,EAAa,KAAK,GAAK,CAACI,aAAW,QAAQH,EAAY,KAAK,CACxF,EAEKI,GAAiBF,EAAAA,SAAS,IACvBhB,EAAM,SAAW,CAACA,EAAM,UAAYe,EAAW,KACvD,EAEKI,EAAYH,EAAAA,SAAS,KACgB,CACvC,+BAAgChB,EAAM,gBACtC,qBAAsB,GACtB,oBAAqBA,EAAM,SAC3B,iBAAkBU,EAAQ,OAAA,EAG7B,EAEKU,EAAYJ,EAAAA,SAAS,IAAM,CAC/B,MAAMK,EAA8B,CAAA,EACpC,OAAIrB,EAAM,WACJA,EAAM,SAGRqB,EAAI,YAAY,EAAI,OACXJ,aAAW,iBAAiBjB,EAAM,SAAS,GAAKa,EAAa,MAAM,OAAS,IAGrFQ,EAAI,YAAY,EAAIrB,EAAM,YAGvBqB,CACT,CAAC,EAEKC,EAAUN,EAAAA,SAAS,IAAM,CAC7B,MAAMK,EAA8B,CAAA,EAC9B,CAAE,SAAAE,EAAU,cAAAC,CAAA,EAAkBxB,EACpC,OAAIuB,GACEN,EAAAA,WAAW,iBAAiBO,CAAa,IAC3CH,EAAI,YAAY,EAAIG,GAGjBH,CACT,CAAC,EAEKI,EAAc,CAACC,EAAU,QAAU,CACvC,MAAMC,EAAQC,EAAA,EACd1B,EAAK,WAAYyB,EAAOD,CAAO,CACjC,EAEMG,EAAY,IAAM,CACtBC,EAAAA,SAAS,IAAM,CACb5B,EAAK,QAAQ,CACf,CAAC,CACH,EAEM6B,EAAoBJ,GAAkB,CAC1CzB,EAAK,gBAAiByB,CAAK,CAC7B,EAEMK,EAAcL,GAAkB,CACpCzB,EAAK,UAAWyB,CAAK,CACvB,EAEMM,EAAmB,IAAM,CAC7B,IAAIC,EAAI,GACR,GAAIlC,EAAM,SAAU,CAClB,MAAMmC,EAAUnC,EAAM,aAAeA,EAAM,mBAAqB;AAAA,EAAO,IACvEkC,EAAIrB,EAAa,MAAM,KAAKsB,CAAO,CACrC,MACED,EAAIpB,EAAY,MAElB,OAAOoB,CACT,EAEMN,EAAY,IACT5B,EAAM,SAAWa,EAAa,MAAM,KAAKb,EAAM,SAAW,GAAG,EAAIc,EAAY,MAGhFsB,EAAcT,GAAkB,CACpC,GAAIV,EAAAA,WAAW,QAAQU,CAAK,EAC1Bf,EAAY,MAAQ,CAAA,EACpBC,EAAa,MAAQ,CAAA,EACrBC,EAAY,MAAQ,WACXa,IAAUC,IACnB,GAAI5B,EAAM,SAAU,CAClB,MAAMqC,EAAkB,CAAA,EAClBC,EAAqB,CAAA,EAC3BrB,aAAW,MAAMU,EAAO3B,EAAM,SAAW,GAAG,EAAE,QAASkC,GAAc,CACnE,MAAMK,EAAYtB,EAAAA,WAAW,KAAKiB,CAAC,EAC/B,CAACjB,EAAAA,WAAW,QAAQsB,CAAS,GAAK,CAACtB,EAAAA,WAAW,aAAaqB,EAAUC,CAAS,IAChFF,EAAK,KAAK,CAAE,GAAI,YAAYpB,EAAAA,WAAW,UAAU,CAAC,CAAC,GAAI,KAAMsB,CAAA,CAAW,EACxED,EAAS,KAAKC,CAAS,EAE3B,CAAC,EACD3B,EAAY,MAAQyB,EAEpBxB,EAAa,MAAQ,MAAM,KAAK,IAAI,IAAIyB,CAAQ,CAAC,CACnD,MACExB,EAAY,MAAQa,CAG1B,EAEMa,EAAWb,GAAkB,CACjC,MAAMY,EAAYtB,EAAAA,WAAW,KAAKU,CAAK,EACnCrB,EAAS,OACXA,EAAS,MAAM,QAAQ,CACrB,GAAI,YAAYW,EAAAA,WAAW,UAAU,CAAC,CAAC,GACvC,KAAMsB,CAAA,CACP,EAEC/B,EAAc,QAChBA,EAAc,MAAM,WAAA,EACpBA,EAAc,MAAM,SAAS,EAAE,EAEnC,EAEMiC,EAAS,IAAM,CACfzC,EAAM,SACJQ,EAAc,OAChBA,EAAc,MAAM,MAAA,EAGlBC,EAAW,OACbA,EAAW,MAAM,MAAA,CAGvB,EAEMiC,GAAe,CAACf,EAAegB,EAAW,KAAS,CACvD,GAAI3C,EAAM,SAAU,CAClB,MAAMsC,EAAWM,EAAAA,MAAM/B,EAAa,KAAK,EACzCI,aAAW,MAAMU,EAAO3B,EAAM,SAAW,GAAG,EAAE,QAASkC,GAAc,CACnE,MAAMW,EAAW5B,EAAAA,WAAW,KAAKiB,CAAC,EAClC,GAAI,CAACjB,EAAAA,WAAW,QAAQ4B,CAAQ,EAC9B,GAAIF,EACFH,EAAQK,CAAQ,EACX5B,EAAAA,WAAW,aAAaqB,EAAUO,CAAQ,GAC7CP,EAAS,KAAKO,CAAQ,MAEnB,CACL,MAAMC,EAAMlC,EAAY,MAAM,UAAWmC,IAAkBA,GAAK,OAASF,CAAQ,EAC7EC,EAAM,IACRlC,EAAY,MAAM,OAAOkC,EAAK,CAAC,EAEjC,MAAME,EAAOV,EAAS,QAAQO,CAAQ,EAClCG,EAAO,IACTV,EAAS,OAAOU,EAAM,CAAC,CAE3B,CAEJ,CAAC,EAEDnC,EAAa,MAAQ,MAAM,KAAK,IAAI,IAAIyB,CAAQ,CAAC,CACnD,MACExB,EAAY,MAAQ6B,EAAWhB,EAAQ,GAIrC3B,EAAM,UACRyC,EAAA,EAEFhB,EAAY,MAAM,CACpB,EAEMwB,GAAY,IAAM,CACtBb,EAAWpC,EAAM,OAAS,EAAE,EAC5B6B,EAAA,CACF,EAEAqB,EAAAA,UAAU,IAAM,CACdpB,EAAAA,SAAS,IAAM,CACbmB,GAAA,CACF,CAAC,CACH,CAAC,EAEDE,EAAAA,MACE,IAAMnD,EAAM,MACZ,CAACoD,EAAUC,IAAa,CAClBD,IAAaC,GAAYD,IAAaxB,EAAA,IACxCQ,EAAWgB,GAAY,EAAE,EACrB5C,EAAc,QAChBA,EAAc,MAAM,SAAS,EAAE,EAC/BA,EAAc,MAAM,WAAA,GAG1B,CAAA,EAKF,MAAM8C,GAAiBC,GAAkB,CACvC,GAAIvD,EAAM,SAAU,CAClB,MAAMwD,EAAahD,EAAc,MAAQA,EAAc,MAAM,mBAAqB,MAE9E,CAACgD,GAAc,CAACA,EAAW,SAASD,EAAE,MAAc,IACtDd,EAAA,CAEJ,MAEEA,EAAA,CAEJ,EAEMgB,GAAmBF,GAAqB,CAC5C,GAAIA,EAAE,aAAeA,EAAE,UAAY,KAAOA,EAAE,SAC1C,OAGF,MAAMG,EAAatD,EAAWA,EAAS,yBAAA,EAA6B,GAChEa,EAAAA,WAAW,QAAQyC,CAAU,IAC/BH,EAAE,eAAA,EACFA,EAAE,gBAAA,EAEN,EAEMI,EAAiBJ,GAAqB,CAC1C,GAAIA,EAAE,aAAeA,EAAE,UAAY,KAAOA,EAAE,SAC1C,OAEF,MAAM5B,EAAS4B,EAAE,OAA+B,MAE1CG,EAAatD,EAAWA,EAAS,yBAAA,EAA6B,GACpE,GAAIa,EAAAA,WAAW,QAAQyC,CAAU,GAG/B,GAFAH,EAAE,eAAA,EACFA,EAAE,gBAAA,EACE,CAACtC,EAAAA,WAAW,QAAQU,CAAK,EAAG,CAC9B,MAAMW,EAAWM,EAAAA,MAAM/B,EAAa,KAAK,EACzC,IAAI0B,EAAsB,CAAA,EACtBtB,aAAW,aAAaU,EAAO;AAAA,CAAI,EACrCV,EAAAA,WAAW,MAAMU,EAAO;AAAA,CAAI,EAAE,QAASO,GAAc,CAC9CjB,EAAAA,WAAW,QAAQiB,CAAC,GACvBK,EAAU,KAAK,GAAGtB,aAAW,MAAMiB,EAAGlC,EAAM,SAAW,GAAG,CAAC,CAE/D,CAAC,EAEDuC,EAAYtB,EAAAA,WAAW,MAAMU,EAAO3B,EAAM,SAAW,GAAG,EAE1DuC,EAAU,QAASL,GAAc,CAC/B,MAAMW,EAAW5B,EAAAA,WAAW,KAAKiB,CAAC,EAC7BjB,EAAAA,WAAW,QAAQ4B,CAAQ,IAC9BL,EAAQK,CAAQ,EACX5B,EAAAA,WAAW,aAAaqB,EAAUO,CAAQ,GAC7CP,EAAS,KAAKO,CAAQ,EAG5B,CAAC,EAEDhC,EAAa,MAAQ,MAAM,KAAK,IAAI,IAAIyB,CAAQ,CAAC,EACjDb,EAAA,CACF,OAEIjB,EAAc,QAChBA,EAAc,MAAM,WAAA,EACpBA,EAAc,MAAM,SAAS,EAAE,EAGrC,EAEMoD,EAAa,IAAM,CACvBlD,EAAQ,QAAU,GAElBsB,EAAWJ,GAAW,CACxB,EAEMiC,EAAY,IAAM,CACtBnD,EAAQ,QAAU,EACpB,EAEMoD,EAAgB,IAAM,CAE1B,GAAI,CAACxD,EAAS,MACZ,OAEF,MAAMyD,EAAOzD,EAAS,MAAM,QAAA,EAG5BO,EAAa,MAAQkD,EAClB,OAAQhB,GAAkB9B,EAAAA,WAAW,iBAAiB8B,EAAK,IAAI,CAAC,EAChE,IAAKA,GAAkBA,EAAK,IAAc,EAC7CnC,EAAY,MAAQmD,EAEpBhC,EAAiB,EAAE,EACnBN,EAAA,CACF,EAEMuC,EAAgB,IAAM,CAC1BpD,EAAY,MAAQ,CAAA,EACpBC,EAAa,MAAQ,CAAA,EACrBC,EAAY,MAAQ,GAEhBN,EAAc,QAChBA,EAAc,MAAM,SAAS,EAAE,EAC/BA,EAAc,MAAM,WAAA,GAEtBiB,EAAA,EACAgB,EAAA,CACF,EAEMwB,EAAiBtC,GAAkB,CACvCI,EAAiBJ,CAAK,CACxB,EAEMuC,EAAe,IAAM,CACzBlC,EAAWlB,EAAY,KAAK,CAC9B,EA8BA,OAAAqD,GAAa,CACX,SA7Be,IACRvC,EAAA,EA6BP,SA1BgBD,GAAkB,CAElCS,EAAWT,CAAK,EACZnB,EAAc,QAChBA,EAAc,MAAM,SAAS,EAAE,EAC/BA,EAAc,MAAM,WAAA,EAExB,EAoBE,MAdY,IAAM,CAClBiC,EAAA,CACF,EAaE,YAnBkB,CAACd,EAAegB,EAAW,KAAS,CACtDD,GAAaf,EAAOgB,CAAQ,CAC9B,CAiBE,CACD,wBAteCyB,EAAAA,mBAqEM,MAAA,CApEH,uBAAOjD,EAAA,KAAS,EAChB,uBAAOC,EAAA,KAAS,EAChB,wBAAYkC,GAAa,CAAA,MAAA,CAAA,CAAA,GAEfrD,EAAA,wBAAXmE,EAAAA,mBA2BM,MAAAC,GAAA,CA1BJC,EAAAA,mBAUM,MAAA,CATJ,MAAM,gBACL,uBAAOhD,EAAA,KAAO,CAAA,GAEfiD,EAAAA,YAKWC,GAAAA,UAAA,SAJL,WAAJ,IAAIlE,EACH,SAAUL,EAAA,SACV,KAAMW,EAAA,MACN,WAAUkD,CAAA,mDAGfS,EAAAA,YAceE,aAAA,SAbT,gBAAJ,IAAIjE,EAEJ,OAAO,OACN,UAAWP,EAAA,cACX,SAAUA,EAAA,SACV,YAAaA,EAAA,SAAQ,GAAQA,EAAA,YAC7B,QAAS,GACT,aAAc,GACd,iBAAgBwD,GAChB,eAAcE,EACd,UAASC,EACT,SAAQC,EACR,gBAAeI,CAAA,4DAXPhE,EAAA,QAAQ,CAAA,qBAcrBmE,qBAUM,MAAAM,GAAA,CATJH,EAAAA,YAQYI,GAAAA,UAAA,SAPN,aAAJ,IAAIlE,EACI,MAAOK,EAAA,sCAAAA,EAAW,MAAA8D,GACzB,YAAa3E,EAAA,YACb,QAAS,GACT,SAAUA,EAAA,SACV,UAASiE,EACT,gBAAeD,CAAA,gDAGpBK,EAAAA,mBAwBM,MAxBNO,GAwBM,CAtBI5E,EAAA,WAAaA,EAAA,UAAYY,EAAA,MAAa,OAAM,iBADpDiE,EAAAA,YAGYC,GAAAA,UAAA,OADT,IAAKlE,EAAA,MAAa,MAAA,kCAErBuD,EAAAA,mBAA4BY,EAAAA,SAAA,CAAA,IAAA,GAAA,CAAA,EAAA,EAAA,GAEpB9D,GAAA,qBADR4D,EAAAA,YAUgBG,GAAAA,UAAA,OARd,KAAK,oBACL,UAAU,uBACV,aAAW,KACX,SAAS,IACT,KAAK,SACJ,wBAAYjB,EAAa,CAAA,MAAA,CAAA,EACzB,UAAO,4BAAqBA,EAAa,CAAA,OAAA,SAAA,CAAA,EAAA,CAAA,OAAA,CAAA,6BACbA,EAAa,CAAA,OAAA,SAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,yCAE5CI,EAAAA,mBAA4BY,EAAAA,SAAA,CAAA,IAAA,GAAA,CAAA,EAAA,EAAA,GAEpB/E,EAAA,QAAUc,EAAA,qBADlB+D,EAAAA,YAIgBI,aAAA,OAFd,UAAU,uBACT,UAAWjD,CAAA,mBAEdmC,EAAAA,mBAA4BY,EAAAA,SAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA,EAAA,EAAA,2ZCuH5BG,GAAwB,IACxBC,GAAqB,GACrBC,GAAsB,IACtBC,GAAmB,uvBAnFzB,MAAMtF,EAAQC,EAkDRC,EAAOC,GAWP,CAAE,gBAAAoF,EAAiB,gBAAAC,CAAA,EAAoBC,eAAA,EAC7CD,EAAgB,QAAQ,EAExB,MAAMpF,EAAWC,EAAAA,OAAoB,cAAc,EAG7CqF,EAAcnF,EAAAA,IAA+C,IAAI,EACjEoF,EAAYpF,EAAAA,IAAwB,IAAI,EAGxCqF,EAAY,YAAY3E,EAAAA,WAAW,UAAU,CAAC,CAAC,GACrD,IAAI4E,EAAoB,EACpBC,EAAc,EACdC,EAAe,EACfC,GAAkB,EAClBC,EAAuB,GACvBC,EAAe,GACnB,MAAMC,EAAY,CAAE,MAAO,GAAI,IAAK,GAAI,MAAO,EAAA,EAOzCzF,EAAUC,EAAAA,SAAS,CACvB,aAAc,EAAA,CACf,EACKyF,EAAc,sBAAsBpG,EAAM,UAAY4F,CAAS,GAC/DS,EAAkB9F,EAAAA,IAAI,EAAE,EACxB+F,EAAc/F,EAAAA,IAAW,EAAE,EAC3BgG,EAAehG,EAAAA,IAAc,EAAE,EAErC,IAAIiG,EAAsB,CAAA,EACtBC,EAAyB,CAAA,EACzBC,EAAe,GACnB,MAAMC,EAAY,CAChB,gBAAiB,EAAA,EAGbC,GAAc5F,EAAAA,SAAS,IAAM,CACjC,IAAI6F,EAAI,GAER,OADYN,EAAa,MAAM,OACrB,GACJvG,EAAM,SAAS,QAAUuG,EAAa,MAAM,SAE9CM,EAAI5F,EAAAA,WAAW,aACZjB,EAAM,SAAmB,IAAK8G,GAAYA,EAAG,UAAU,EACxDP,EAAa,KAAA,GAIZM,CACT,CAAC,EAEKE,GAAiB/F,EAAAA,SACrB,IAAM,IAAI,IAAKhB,EAAM,SAAmB,IAAK8G,GAAYA,EAAG,UAAU,CAAC,CAAA,EAGnErF,GAAc,CAClBuF,EACAC,IACG,CACH/G,EAAK,WAAY8G,EAAKC,CAAc,CACtC,EAEMC,GAAoB,CAACC,EAAoBC,IAAqB,CAElElH,EAAK,iBAAkB,CACrB,OAAQe,EAAAA,WAAW,iBAAiBkG,CAAU,EAAIA,EAAa,GAC/D,QAAAC,CAAA,CACD,CACH,EAEMC,EAAcC,GAAgB,CAClCpH,EAAK,UAAWoH,CAAG,CACrB,EAGMC,EAAiBlF,GACjBpB,EAAAA,WAAW,QAAQoB,CAAI,EAClB,CAAA,EAEFA,EAAK,OAAQmF,GACbA,EAIFvG,EAAAA,WAAW,SAASuG,EAAK,EAAE,GAAK,CAACvG,aAAW,QAAQuG,EAAK,EAAE,GAC3DvG,EAAAA,WAAW,SAASuG,EAAK,EAAE,GAAKvG,aAAW,SAASuG,EAAK,EAAE,EAJrD,EAMV,EAGGC,EAAa,MAAO9F,GAAkB,CAC1CoE,IACA,MAAM2B,EAAQ3B,EACd,IAAI1D,EAAc,CAAA,EAClB,GAAIrC,EAAM,eAAgB,CACpBA,EAAM,gBACRU,EAAQ,aAAe,IAEzB,GAAI,CAEF,GADA2B,EAAO,MAAMrC,EAAM,eAAe,CAAE,OAAQ2B,EAAO,OAAQ,EAAG,EAC1D+F,IAAU3B,EAAc,OAC5BjE,EAAAA,SAAS,IAAM,CACT4F,IAAU3B,IACdrF,EAAQ,aAAe,GACnBN,GACFA,EAAS,kBAAkBiC,CAAI,EAEjCP,EAAAA,SAAS,IAAM,CACb6F,EAAehG,EAAOU,CAAI,CAC5B,CAAC,EACH,CAAC,CACH,MAAY,CAENqF,IAAU3B,IACZrF,EAAQ,aAAe,GACvB2G,EAAW,eAAe,EAE9B,CACF,SACMpG,EAAAA,WAAW,QAAQU,CAAK,EAC1BU,EAAOrC,EAAM,aACb2H,EAAehG,EAAOU,CAAI,UACjBpB,EAAAA,WAAW,iBAAiBU,CAAK,EAAG,CAC7C,MAAMiG,EAAajG,EAAM,YAAA,EACnBkG,EAAiB7H,EAAM,UAAU,OACjC8H,EAAe9H,EAAM,UAC3BA,EAAM,aAAa,QAAS+C,GAAc,CACxC,MAAMgF,EAAK,CAAA,EACX,QAASC,EAAK,EAAGA,EAAKH,EAAgBG,IAAM,CAC1C,MAAMC,EAAYlF,EAAK+E,EAAaE,CAAE,CAAC,EAErC/G,EAAAA,WAAW,iBAAiBgH,CAAS,GACrCA,EAAU,cAAc,QAAQL,CAAU,EAAI,IAE9CG,EAAG,KAAK,EAAI,CAEhB,CACA,GAAIA,EAAG,OAAS,EACd,OAAQ/H,EAAM,cAAA,CACZ,IAAK,KACHqC,EAAK,KAAKU,CAAI,EACd,MACF,IAAK,KACCgF,EAAG,SAAWF,GAChBxF,EAAK,KAAKU,CAAI,EAEhB,KAEA,CAGR,CAAC,EACD4E,EAAehG,EAAOU,CAAI,CAC5B,CAEJ,EAEMsF,EAAiB,CAAChG,EAAeU,IAAgB,CAEjDrC,EAAM,WACHiB,EAAAA,WAAW,QAAQU,CAAK,IAC3BU,EAAO6F,EAAmB7F,EAAMrC,EAAM,YAAqB,GAE7DyG,EAAkBpE,EAClBA,EAAO8F,EAAe9F,CAAI,GAE1BA,EAAOkF,EAAclF,CAAI,EAE3BmE,EAAenE,EACfiE,EAAY,MAAQ8B,EAAuB,EAAGjC,EAAU,KAAK,EACzDR,EAAU,QACZA,EAAU,MAAM,UAAY,GAE9B0C,GAAa,EAAGlC,EAAU,KAAK,EAC/BmC,EAAA,EACAjC,EAAgB,MAAQ,GACxBa,GAAkBvF,EAAOU,EAAK,SAAW,CAAC,CAC5C,EAEMiG,EAAe,IAAM,CACzB,MAAMtB,EAAgB,CAAA,EAEhBuB,EAAgBvI,EAAM,SAAmB,IAAK8G,GAAYA,EAAG,UAAU,EAC7EN,EAAa,QAASzD,GAAc,CAClC,GAAI9B,aAAW,QAAQ8B,EAAK,EAAE,EAAG,OACjC,MAAM+D,EAAK/D,EAAK,GAAG,SAAA,EACfA,EAAK,WACH9B,aAAW,aAAasH,EAAczB,CAAE,GAC1CE,EAAI,KAAKF,CAAE,EAGbE,EAAI,KAAKF,CAAE,CAEf,CAAC,EACDP,EAAa,MAAQS,CACvB,EAGMmB,EAAkB9F,GAAgB,CACtC,MAAMmG,EAAaxI,EAAM,WAAa,WAChCyI,EAAkBzI,EAAM,gBAAkB,IAC1C0I,EAAqC,CAAA,EAC3CrG,EAAK,QAASmF,GAAc,CAC1B,GAAIvG,aAAW,QAAQuG,EAAK,EAAE,EAAG,OACjC,MAAMmB,EAAMnB,EAAKgB,CAAS,EAE1B,GAAI,CAACvH,EAAAA,WAAW,QAAQ0H,CAAG,GAAKA,EAAI,SAAA,IAAeF,EAAgB,CACjE,MAAMG,EAASD,EAAI,SAAA,EACdD,EAAYE,CAAM,IAAGF,EAAYE,CAAM,EAAI,CAAA,GAChDF,EAAYE,CAAM,EAAE,KAAKpB,CAAI,CAC/B,CACF,CAAC,EACD,MAAMqB,EAAgB,CAAA,EAChBC,EAAWzG,EAAK,OAAQmF,GAAc,CAC1C,GAAIvG,EAAAA,WAAW,QAAQuG,EAAK,EAAE,EAAG,MAAO,GACxC,MAAMmB,EAAMnB,EAAKgB,CAAS,EAC1B,OAAOvH,EAAAA,WAAW,QAAQ0H,CAAG,GAAKA,EAAI,aAAeF,CACvD,CAAC,EAEKM,MAAkB,IAClBC,EAAe,CAACC,EAAcC,EAAeC,IAAuB,CACxEF,EAAM,QAASG,GAAc,CAC3B,MAAMtC,EAAKsC,EAAK,GAAG,SAAA,EACnB,GAAIL,EAAY,IAAIjC,CAAE,EAAG,OACzBiC,EAAY,IAAIjC,CAAE,EAClB,MAAMuC,GAAWX,EAAY5B,CAAE,GAAK,CAAA,EACpC+B,EAAO,KAAK,CACV,GAAGO,EACH,OAAQF,EACR,YAAaC,EACb,aAAcE,GAAS,OAAS,EAEhC,WAAYD,EAAK,YAAeC,GAAS,OAAS,GAAK,CAACrJ,EAAM,gBAAA,CAC/D,EACGqJ,GAAS,OAAS,GACpBL,EAAaK,GAAUH,EAAQ,EAAGE,EAAK,IAAI,CAE/C,CAAC,CACH,EACA,OAAAJ,EAAaF,EAAU,EAAG,EAAE,EACrBD,CACT,EAGMX,EAAqB,CAACoB,EAAqBC,IAAmB,CAClE,MAAMf,EAAaxI,EAAM,WAAa,WAChCyI,EAAkBzI,EAAM,gBAAkB,IAC1CwJ,EAAgC,CAAA,EAChCd,EAAwC,CAAA,EAC9Ca,EAAQ,QAAS/B,GAAc,CAC7B,GAAIvG,aAAW,QAAQuG,EAAK,EAAE,EAAG,OACjC,MAAMV,EAAKU,EAAK,GAAG,SAAA,EACnBgC,EAAS1C,CAAE,EAAIU,EACf,MAAMmB,EAAMnB,EAAKgB,CAAS,EAEtB,CAACvH,EAAAA,WAAW,QAAQ0H,CAAG,GAAKA,EAAI,SAAA,IAAeF,IAC5CC,EAAYC,EAAI,SAAA,CAAU,IAAGD,EAAYC,EAAI,SAAA,CAAU,EAAI,CAAA,GAChED,EAAYC,EAAI,SAAA,CAAU,EAAE,KAAK7B,CAAE,EAEvC,CAAC,EACD,MAAM2C,MAAgB,IAChBC,MAAkB,IACxBJ,EAAa,QAAS9B,GAAc,CAC9BvG,aAAW,QAAQuG,EAAK,EAAE,GAC9BkC,EAAY,IAAIlC,EAAK,GAAG,SAAA,CAAU,CACpC,CAAC,EAED,MAAMmC,EAAiB7C,GAAe,CACpC,IAAI8C,EAAMJ,EAAS1C,CAAE,EACjB+C,EAAQ,EACZ,KAAOD,GAAOC,EAAQ,KAAK,CACzBJ,EAAU,IAAIG,EAAI,GAAG,SAAA,CAAU,EAC/B,MAAMjB,EAAMiB,EAAIpB,CAAS,EACzB,GAAIvH,EAAAA,WAAW,QAAQ0H,CAAG,GAAKA,EAAI,SAAA,IAAeF,EAAgB,MAClEmB,EAAMJ,EAASb,EAAI,UAAU,EAC7BkB,GACF,CACF,EACA,OAAAP,EAAa,QAAS9B,GAAc,CAClC,GAAIvG,aAAW,QAAQuG,EAAK,EAAE,EAAG,OACjC,MAAMV,EAAKU,EAAK,GAAG,SAAA,EACnBmC,EAAc7C,CAAE,EACZ4B,EAAY5B,CAAE,GAChB4B,EAAY5B,CAAE,EAAE,QAASgD,GAAoB,CAC3CL,EAAU,IAAIK,CAAO,CACvB,CAAC,CAEL,CAAC,EACMP,EAAQ,OAAQ/B,GACjBvG,EAAAA,WAAW,QAAQuG,EAAK,EAAE,EAAU,GACjCiC,EAAU,IAAIjC,EAAK,GAAG,UAAU,CACxC,CACH,EAEMY,EAAyB,CAAC2B,EAAeC,IAAgB,CAC7D,MAAM3H,EAAc,CAAA,EACd4H,EAAMzD,EAAa,OACnB0D,EAAIH,EAAQ,EAAI,EAAIA,EACpBxG,EAAIyG,GAAOC,EAAMD,EAAMC,EAC7B,GAAIC,EAAI3G,EACN,QAAS4G,EAAID,EAAGC,EAAI5G,EAAG4G,IACrB9H,EAAK,KAAKmE,EAAa2D,CAAC,CAAC,EAG7B,OAAO9H,CACT,EAEM+H,GAAuB,CAACC,EAAgBC,IAAsB,CAClE,IAAIJ,EAAI,EACJ3G,EAAI,EACR,OAAQ+G,EAAA,CACN,IAAK,OACHJ,EAAIG,EAASlE,EAAU,MACvB5C,EAAI8G,EACJ,MACF,IAAK,OACHH,EAAIG,EACJ9G,EAAI2G,EAAI/D,EAAU,MAClB,KAEA,CAEJ,OAAOiC,EAAuB8B,EAAG3G,CAAC,CACpC,EAEM8E,GAAe,CAAC0B,EAAeC,IAAgB,CACnD,IAAIE,EAAI/D,EAAU,OACd+D,IAAM,IAAMH,EAAQG,KACtBA,EAAIH,GAENG,EAAIA,GAAK,EAAI,EAAIA,EAEjB,IAAI3G,EAAI4C,EAAU,IACd6D,EAAMzG,IACRA,EAAIyG,GAENzG,EAAIyG,GAAOxD,EAAa,OAASwD,EAAMxD,EAAa,OAEpDL,EAAU,MAAQ+D,EAClB/D,EAAU,IAAM5C,CAClB,EAEMgH,GAAY,IAAM,CACtB,IAAIC,EAAiB,GACjBC,EAAe,GACnB,GAAI,CAACxJ,EAAAA,WAAW,QAAQjB,EAAM,QAAQ,EAAG,CAEvC,MAAMuI,EAAgBvI,EAAM,SAAmB,IAAKkK,GAAWA,EAAE,UAAU,EAC3E1D,EAAa,KAAK,CAACzD,EAAWoH,IAAc,CAC1C,GAAIlJ,EAAAA,WAAW,QAAQ8B,EAAK,EAAE,EAAG,MAAO,GACxC,MAAM+D,EAAK/D,EAAK,GAAG,SAAA,EACb2H,EAAQzJ,EAAAA,WAAW,aAAasH,EAAczB,CAAE,EACtD,OAAI4D,IACFF,EAAiBL,EACjBM,EAAe3D,GAEV4D,CACT,CAAC,CACH,CACA,IAAIX,EAAQ,EACRC,EAAM,EACNQ,IAAmB,IACrB3E,EAAoB,EACpBkE,EAAQ,EACRC,EAAM7D,EAAU,QAGhB4D,EAAQS,EAAiBrE,EAAU,MAAQ,EAC3C6D,EAAMQ,EAAiBrE,EAAU,MAAQ,GAG3CG,EAAY,MAAQ8B,EAAuB2B,EAAOC,CAAG,EAErD7D,EAAU,MAAQ4D,GAAS,EAAI,EAAIA,EACnC5D,EAAU,IAAM6D,GAAOxD,EAAa,OAASA,EAAa,OAASwD,EAC9D/I,EAAAA,WAAW,QAAQwJ,CAAY,GAClCnE,EAAY,MAAM,KAAK,CAACvD,EAAWoH,IAAc,CAE/C,GAAIlJ,EAAAA,WAAW,QAAQ8B,EAAK,EAAE,EAAG,MAAO,GACxC,MAAM2H,EAAQ3H,EAAK,GAAG,SAAA,IAAe0H,EACrC,OAAIC,IACF7E,EAAoBsE,GAEfO,CACT,CAAC,CAEL,EAEMC,EAAqBC,GAAgB,CACzC9I,EAAAA,SAAS,IAAM,CACb,MAAM+I,EAASlF,EAAU,MACzB,GAAI,GAACkF,GAAU,CAACA,EAAO,SAAS,CAAC,GACjC,GAAID,EAAM,EAAG,CAEX,MAAME,EAAOD,EAAO,SAAS,CAAC,EAAE,SAASD,CAAG,EAC5CC,EAAO,UAAYC,GACfA,EAAK,UAAY3F,GACf2F,EAAK,UAAY1F,GAEnB,CACN,MACEyF,EAAO,UAAY,CAEvB,CAAC,CACH,EAEME,EAAe,IAAM,CACrB/K,EAAM,WACRyG,EAAkBc,EAAcvH,EAAM,YAAY,EAClDwG,EAAe2B,EAAe1B,CAAe,GAE7CD,EAAee,EAAcvH,EAAM,YAAY,EAEjDuK,GAAA,EACAzI,EAAAA,SAAS,IAAM,CAETb,aAAW,QAAQjB,EAAM,WAAW,IAClC0F,EAAY,OACdA,EAAY,MAAM,SAAS,EAAE,EAE3BC,EAAU,OACZgF,EAAkB9E,CAAiB,EAGzC,CAAC,CACH,EAEMmF,EAAgB,MAAOzH,GAAa,CAExC,MAAM0H,EAAM,KAAK,IAAA,EACXC,EAAW3H,EAAE,OACb4H,EAAYD,EAAS,UAC3B,GAAID,EAAMjF,GAAkB,IAAK,CAE/BF,EAAcqF,EACd,MACF,CACAnF,GAAkBiF,EAClB,MAAMG,EAAeF,EAAS,aAE9B,GAAI,CAACA,EAAS,SAAS,CAAC,EAAG,CACzBpF,EAAcqF,EACd,MACF,CACA,MAAME,EAAeH,EAAS,SAAS,CAAC,EAAkB,aAC1D,GAAIC,EAAYrF,GACd,GACEqF,EAAYC,EAAe/F,GAAsBgG,GACjD,CAAC1E,EAAU,gBACX,CAEA,GADAA,EAAU,gBAAkB,GACxBR,EAAU,KAAOK,EAAa,QAC5BxG,EAAM,eAAgB,CAExB,MAAM0H,EAAQ3B,EACRuF,EAActL,EAAM,YACpBuL,EAAa,CACjB,OAAQ/E,EAAa,MAAA,EAElBvF,EAAAA,WAAW,QAAQqK,CAAW,IACjCC,EAAM,OAASD,GAEjB,GAAI,CACF,MAAME,EAAW,MAAMxL,EAAM,eAAeuL,CAAK,EACjD,GAAIrF,EAAc,OACdwB,IAAU3B,GAAgB/F,EAAM,cAAgBsL,IAC9CtL,EAAM,WAERyG,EAAgB,KAAK,GAAGc,EAAciE,CAAQ,CAAC,EAC/ChF,EAAe2B,EAAe1B,CAAe,GAE7CD,EAAa,KAAK,GAAGe,EAAciE,CAAQ,CAAC,EAE9ClD,EAAA,EACIlI,GAEFA,EAAS,kBAAkBoG,CAAY,EAG7C,MAAY,CAENkB,IAAU3B,GACZsB,EAAW,iBAAiB,CAEhC,CACF,CAEF,GAAIlB,EAAU,IAAMK,EAAa,OAAQ,CACvC,MAAMgF,EAAWpB,GAAqBjE,EAAU,IAAK,MAAM,EAC3DG,EAAY,MAAM,KAAK,GAAGkF,CAAQ,EAClCnD,GAAalC,EAAU,MAAOA,EAAU,IAAMA,EAAU,KAAK,CAC/D,CACAQ,EAAU,gBAAkB,EAC9B,UAEIwE,EAAY7F,IAAoBa,EAAU,MAAQ,EAAG,CACvD,MAAMsF,EAAWrB,GAAqBjE,EAAU,MAAO,MAAM,EACvDuF,EAAUD,EAAS,OACrBC,EAAU,IACZpF,EAAY,MAAM,QAAQ,GAAGmF,CAAQ,EACrCpD,GAAalC,EAAU,MAAQA,EAAU,MAAOA,EAAU,GAAG,EAC7DrE,EAAAA,SAAS,IAAM,CAEb,MAAM+I,EAASlF,EAAU,MACzB,GAAI,CAACkF,GAAU,CAACA,EAAO,SAAS,CAAC,EAAG,OACpC,IAAIc,EAAI,EACR,MAAMtC,EAAWwB,EAAO,SAAS,CAAC,EAAE,SACpC,QAASe,EAAK,EAAGA,EAAKF,GACfrC,EAASuC,CAAE,EADaA,IAE7BD,GAAMtC,EAASuC,CAAE,EAAkB,aAErCf,EAAO,WAAac,CACtB,CAAC,EAEL,CAEF7F,EAAcqF,CAChB,EAEMU,EAAiB,IAAM,CACvBnF,GACJ5E,EAAAA,SAAS,IAAM,CACT6D,EAAU,QACZA,EAAU,MAAM,iBAAiB,SAAUqF,CAAa,EACxDtE,EAAe,GAGnB,CAAC,CACH,EAEMoF,EAAuB/I,GAAc,CACzC,IAAIgJ,EAAS/L,EAAM,uBAInB,GAHI+C,EAAK,QAAU,GAAK,CAAC9B,EAAAA,WAAW,QAAQjB,EAAM,yBAAyB,IACzE+L,EAAS/L,EAAM,2BAEbiB,EAAAA,WAAW,QAAQ8K,CAAM,EAAG,CAE9B,GAAI9K,EAAAA,WAAW,QAAQ8B,EAAK,IAAI,EAAG,MAAO,GAC1C,MAAMiJ,EAAOjJ,EAAK,KAClB,OAAO9B,EAAAA,WAAW,SAAS+K,CAAI,EAAI/K,EAAAA,WAAW,WAAW+K,CAAI,EAAI,OAAOA,CAAI,CAC9E,CACA,OAAO/K,aAAW,8BAA8B8K,EAAQhJ,CAAI,CAC9D,EAEMkJ,EAAiBnF,GAAe,CACpC,MAAMoF,EAAmB,CAAA,EACzB,OAAIlM,EAAM,YAEPA,EAAM,SAAmB,QAASmM,GAAa,CAC1CA,EAAI,SAAA,IAAerF,GACrBoF,EAAO,KAAKC,CAAG,CAEnB,CAAC,EAGElL,EAAAA,WAAW,aACTjB,EAAM,SAAmB,IAAKkK,GAAWA,EAAE,UAAU,EACtDpD,CAAA,GAGFoF,EAAO,KAAKpF,CAAE,GAGhBoF,EAAO,KAAKpF,CAAE,EAEToF,CACT,EAEME,EAAaC,GAAwB,CACzC,MAAMtI,EAAOuC,EAAY,MACzB,GAAIvC,EAAK,SAAW,EAAG,CACrBsC,EAAgB,MAAQ,GACxB,MACF,CACA,IAAIuE,EAAM,GACV,MAAM0B,EAAYjG,EAAgB,MAC9BiG,EAAU,OAAS,GACrBvI,EAAK,QAAQ,CAAChB,EAAWoH,IAAc,CACjCpH,EAAK,GAAG,SAAA,IAAeuJ,IACzB1B,EAAMT,EAEV,CAAC,EACDS,GAAOyB,EACHzB,EAAM,EACRA,EAAM,EACGA,GAAO7G,EAAK,SACrB6G,EAAM7G,EAAK,OAAS,IAGtB6G,EAAM,EAERvE,EAAgB,MAAQpF,EAAAA,WAAW,QAAQ8C,EAAK6G,CAAG,EAAE,EAAE,EAAI,GAAK7G,EAAK6G,CAAG,EAAE,GAAG,SAAA,EAC7ED,EAAkBC,CAAG,CACvB,EAEM2B,GAAiBhJ,GAAW,CAEhC,GAAIA,EAAE,aAAeA,EAAE,UAAY,IACjC,OAEF,IAAIiJ,EAAUjJ,EAAE,QAChB,GAAI,CAACtC,EAAAA,WAAW,YAAYuL,CAAO,EAEjC,OADAA,EAAUA,EAAQ,SAAA,EACVA,EAAA,CACN,IAAK,KACH,GAAIjJ,EAAE,SACJ,MAEFA,EAAE,eAAA,EACFA,EAAE,gBAAA,EACF,MACF,IAAK,KACHA,EAAE,eAAA,EACFA,EAAE,gBAAA,EACF6I,EAAU,EAAE,EACZ,MACF,IAAK,KACH7I,EAAE,eAAA,EACFA,EAAE,gBAAA,EACF6I,EAAU,CAAC,EACX,KAEA,CAGR,EAEMK,GAAelJ,GAAW,CAE9B,GAAIA,EAAE,aAAeA,EAAE,UAAY,IACjC,OAEF,IAAIiJ,EAAUjJ,EAAE,QAChB,GAAI,CAACtC,EAAAA,WAAW,YAAYuL,CAAO,EAEjC,OADAA,EAAUA,EAAQ,SAAA,EACVA,EAAA,CACN,IAAK,KAECpM,GACFA,EAAS,gBAAgB,EAAK,EAEhC,MACF,IAAK,KACH,GAAImD,EAAE,SACJ,MAEF,MAAMuD,EAAKT,EAAgB,MAC3B,GAAI,CAACpF,EAAAA,WAAW,QAAQ6F,CAAE,EAAG,CAE3B,MAAM4F,EAAYpG,EAAY,MAAM,KAAMvD,GAAcA,EAAK,GAAG,SAAA,IAAe+D,CAAE,EACjF,GAAI4F,GAAa,CAACA,EAAU,WAAY,CACtC,MAAMR,EAAmBD,EAAcnF,CAAE,EACzCrF,GAAYyK,EAAQ,CAClB,GAAApF,EAEA,SAAW9G,EAAM,SAAmB,IAAKkK,GAAWA,EAAE,SAAA,CAAU,EAAE,QAAQpD,CAAE,IAAM,EAAA,CACnF,CACH,CACF,CACA,KAIA,CAGR,EAEM7D,GAAY,IAAM,CACtB8H,EAAA,EACAzC,EAAA,EACAuD,EAAA,EACA,KAAM,CAAE,YAAAP,GAAgBtL,EACpBiB,EAAAA,WAAW,iBAAiBqK,CAAW,GACzC7D,EAAW6D,CAAW,CAE1B,EAEApI,EAAAA,UAAU,IAAM,CACdD,GAAA,CACF,CAAC,EAED0J,EAAAA,gBAAgB,IAAM,CAEpBzG,EAAe,GACf0G,GAAAA,cAAc,YAAY,OAAQ,UAAWL,GAAe,EAAI,EAChEK,GAAAA,cAAc,YAAY,OAAQ,QAASH,GAAa,EAAI,EAC5DxG,EAAuB,GACnBN,EAAU,OACZA,EAAU,MAAM,oBAAoB,SAAUqF,CAAa,CAE/D,CAAC,EAED7H,EAAAA,MACE,IAAMnD,EAAM,aACZoD,GAAY,CACNpD,EAAM,WACRyG,EAAkBc,EAAcnE,CAAQ,EACxCoD,EAAe2B,EAAe1B,CAAe,GAE7CD,EAAee,EAAcnE,CAAQ,EAGvCmH,GAAA,EACAjC,EAAA,EAEAuD,EAAA,CACF,CAAA,EAGF1I,EAAAA,MACE,IAAMnD,EAAM,YACXoD,GAAkB,CAEjBqE,EAAWrE,CAAQ,CACrB,CAAA,EAGF,MAAMyJ,GAAYlL,GAAkB,CAClC8F,EAAW9F,CAAK,CAClB,EAEMmL,GAAevJ,GAAW,CAC9B,GAAI,CAACA,GAAK,CAACvD,EAAM,WAAY,OAE7B,MAAMuI,EAAgBvI,EAAM,SAAmB,IAAK8G,GAAYA,EAAG,UAAU,EAEvEiG,MAAkB,IACxBvG,EAAa,QAASzD,GAAc,CAC9BA,EAAK,YAAc,CAAC9B,EAAAA,WAAW,QAAQ8B,EAAK,EAAE,GAChDgK,EAAY,IAAIhK,EAAK,GAAG,SAAA,CAAU,CAEtC,CAAC,EACD,MAAMiK,EAAqB,CAAA,EACrBC,EAAmB,CAAA,EACnBC,EAAmB,CAAA,EACzB3G,EAAa,MAAM,QAASO,GAAe,CACrCvD,EAAE,MACCtC,EAAAA,WAAW,aAAasH,EAAczB,CAAE,GAC3CmG,EAAO,KAAKnG,CAAE,EAGZ7F,EAAAA,WAAW,aAAasH,EAAczB,CAAE,GAAK,CAACiG,EAAY,IAAIjG,CAAE,GAClEoG,EAAO,KAAKpG,CAAE,EAGlBkG,EAAS,KAAKlG,CAAE,CAClB,CAAC,EACD,MAAMoF,EAAgBjL,EAAAA,WAAW,YAAYjB,EAAM,QAAQ,EACvDkN,EAAO,OAAS,GAClBA,EAAO,QAASpG,GAAe,CAE7B,MAAMhE,EAAMoJ,EAAO,UAAWhC,GAAWA,EAAE,SAAA,IAAepD,CAAE,EACxDhE,EAAM,IACRoJ,EAAO,OAAOpJ,EAAK,CAAC,CAExB,CAAC,EAECmK,EAAO,OAAS,GAClBf,EAAO,KAAK,GAAGe,CAAM,EAEvBxL,GAAYyK,EAAQ,CAAE,GAAIc,EAAU,SAAUzJ,EAAE,MAAO,CACzD,EAEM4J,GAAgBpK,GAAc,CAClC,GAAI,CAACA,EAAK,YAAc,CAAC9B,EAAAA,WAAW,QAAQ8B,EAAK,EAAE,EAAG,CACpD,MAAM+D,EAAK/D,EAAK,GAAG,SAAA,EACbmJ,EAAmBD,EAAcnF,CAAE,EACzCrF,GAAYyK,EAAQ,CAClB,GAAApF,EAEA,SAAW9G,EAAM,SAAmB,IAAKkK,GAAWA,EAAE,SAAA,CAAU,EAAE,QAAQpD,CAAE,IAAM,EAAA,CACnF,CACH,CACF,EAEMsG,GAAiBrK,GAAc,CAC/B,CAACA,GAAQ9B,EAAAA,WAAW,QAAQ8B,EAAK,EAAE,IACvCsD,EAAgB,MAAQtD,EAAK,GAAG,SAAA,EAClC,EAEMsK,GAAkBtK,GAAc,CAChC,CAACA,GAAQ9B,EAAAA,WAAW,QAAQ8B,EAAK,EAAE,GACnCsD,EAAgB,QAAUtD,EAAK,GAAG,aACpCsD,EAAgB,MAAQ,GAE5B,EA4BA,OAAAlC,GAAa,CACX,aA3BoBmJ,GAAoB,CAEpCA,EACGrH,IACH2G,GAAAA,cAAc,WAAW,OAAQ,UAAWL,GAAe,EAAI,EAC/DK,GAAAA,cAAc,WAAW,OAAQ,QAASH,GAAa,EAAI,EAC3DxG,EAAuB,IAGrBA,IACF2G,GAAAA,cAAc,YAAY,OAAQ,UAAWL,GAAe,EAAI,EAChEK,GAAAA,cAAc,YAAY,OAAQ,QAASH,GAAa,EAAI,EAC5DxG,EAAuB,GAG7B,EAaE,gBAXsB,IACfI,EAAgB,KAUvB,CACD,UA39BCkH,YAAA,EAAAnJ,qBA2FM,MA3FNC,GA2FM,CA1Fa3D,EAAQ,cAoFzB6M,EAAAA,YAAAnJ,EAAAA,mBAKM,MALNoJ,GAKM,CADJjJ,EAAAA,YAA6DkJ,GAAAA,UAAA,CAA/C,UAAW/M,EAAQ,YAAA,0CAxFnC0D,EAAAA,mBAmFWY,WAAA,CAAA,IAAA,GAAA,CAjFD/E,EAAA,UADRsN,EAAAA,UAAA,EAAAnJ,EAAAA,mBASM,MATNM,GASM,CALJH,EAAAA,YAImBmJ,GAAAA,UAAA,SAHb,cAAJ,IAAIhI,EACH,YAAazF,EAAA,kBACb,WAAU4M,EAAA,4CAGfzI,EAAAA,mBAA4BY,EAAAA,SAAA,CAAA,IAAA,CAAA,EAAA,GAAA,EAAA,GAGpB/E,EAAA,YAAcA,EAAA,eAFtBsN,EAAAA,YAAAnJ,EAAAA,mBAUM,MAVNS,GAUM,CANJN,EAAAA,YAKmBoJ,GAAAA,UAAA,CAJhB,SAAUvH,CAAW,UACrB,MAAOwH,EAAAA,MAAArI,CAAA,EAAgB,YACvB,MAAOqB,GAAA,MACP,WAAUkG,EAAA,sDAGf1I,EAAAA,mBAA4BY,EAAAA,SAAA,CAAA,IAAA,CAAA,EAAA,GAAA,EAAA,GAC5BV,EAAAA,mBA0DM,MAAA,CAzDJ,MAAM,kCACF,YAAJ,IAAIqB,CAAA,GAGIW,EAAA,MAAY,OAAM,iBAD1BlC,EAAAA,mBA4CK,KAAA,OA1CH,KAAK,UACJ,wBAAoCiC,EAAA,MAAe,GAAMD,CAAW,QAAQC,EAAA,KAAe,GAAK,MAAA,IAIjGkH,EAAAA,UAAA,EAAA,EAAAnJ,EAAAA,mBAoCKY,WAAA,KAAA6I,EAAAA,WAnCuBvH,EAAA,MAAW,CAA7BwH,EAAUlD,mBADpBxG,EAAAA,mBAoCK,KAAA,CAlCF,OAAQwB,CAAS,IAAIkI,EAAS,EAAE,IAAIlD,CAAG,GACvC,GAAE,GAAKxE,CAAW,QAAQ0H,EAAS,EAAE,GACtC,KAAK,SACJ,gBAAe/G,SAAe,IAAI+G,EAAS,GAAG,UAAQ,EACtD,gBAAeA,EAAS,WACxB,MAAKC,EAAAA,eAAA,CAAqC,kBAAAhH,GAAA,MAAe,IAAI+G,EAAS,GAAG,UAAQ,EAAsC,kBAAAA,EAAS,WAAiD,sBAAAzH,EAAA,QAAoByH,EAAS,GAAG,SAAA,EAA0D,+BAAAA,EAAS,QAAM,CAAA,GAM1R,MAAKE,EAAAA,eAAA,CAAA,YAAiBF,EAAS,OAASA,EAAS,OAAM,GAAA,KAAe,MAAA,CAAS,EAC/E,QAAKlJ,GAAEuI,GAAaW,CAAQ,EAC5B,aAAUlJ,GAAEwI,GAAcU,CAAQ,EAClC,aAAUlJ,GAAEyI,GAAeS,CAAQ,CAAA,GAEpCxJ,EAAAA,mBAiBM,MAAA,KAAA,CAdIrE,EAAA,YAFRsN,EAAAA,UAAA,EAAAnJ,EAAAA,mBAUM,MAVN6J,GAUM,CANJ1J,EAAAA,YAKmBoJ,GAAAA,UAAA,CAJhB,QAASvH,CAAW,MACpB,MAAK,GAAKA,CAAW,OAAO0H,EAAS,EAAE,GACvC,MAAO/G,SAAe,IAAI+G,EAAS,GAAG,UAAQ,EAC9C,SAAUA,EAAS,UAAA,gEAGxB1J,EAAAA,mBAA4BY,EAAAA,SAAA,CAAA,IAAA,CAAA,EAAA,GAAA,EAAA,GAC5BV,EAAAA,mBAGO,MAAA,CAFL,MAAM,2BACN,UAAQwH,EAAoBgC,CAAQ,CAAA,sDAK5C1J,EAAAA,mBAQK,KAAA8J,GAAA,CALKjO,EAAA,kBAFRsN,EAAAA,UAAA,EAAAnJ,EAAAA,mBAKK,KALL+J,GAKKC,EAAAA,gBADAR,QAAArI,CAAA,EAAgB,aAAa,EAAA,CAAA,kBAElCnB,qBAA4BY,EAAAA,SAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA,EAAA,EAAA,69BC2BtC,MAAMhF,EAAQC,EAqERC,EAAOC,GAOPkO,EAAOrO,EAAM,GAGbsO,EAAqB/N,EAAAA,IAAqD,IAAI,EAC9EE,EAAaF,EAAAA,IAAiD,IAAI,EAClEoF,EAAYpF,EAAAA,IAAoD,IAAI,EAEpEG,EAAUC,EAAAA,SAAS,CACvB,SAAU,YAAYM,EAAAA,WAAW,UAAU,CAAC,CAAC,GAC7C,YAAa,GACb,iBAAkB,CAAA,EAClB,UAAW,EAAA,CACZ,EAEK0F,EAAsB,CAC1B,aAAc,CAAA,EACd,WAAY,CAAA,CAAC,EAGTxF,EAAYH,EAAAA,SAAS,IAAM,CAC/B,IAAIuN,EAA+B,CACjC,iBAAkB,GAClB,YAAa,GACb,oBAAqBvO,EAAM,QAAA,EAE7B,OAAAuO,EAAMtN,EAAAA,WAAW,aAAasN,EAAK3B,GAAAA,cAAc,iBAAiB5M,EAAM,SAAS,CAAC,EAC3EiB,aAAW,gBAAgBsN,EAAK,GAAG,CAC5C,CAAC,EAEKC,EAAcxN,EAAAA,SAAS,IAAM,CACjC,IAAIuN,EAAM,qBACV,OAAK7N,EAAQ,YACX6N,GAAO,8BAEFA,CACT,CAAC,EAEK9M,EAAc,CAACE,EAAeD,EAAU,KAAO,CACnDxB,EAAK,eAAgByB,CAAK,EAC1BzB,EAAK,WAAYyB,EAAOD,CAAO,CACjC,EAEMG,GAAY,IAAM,CACtBC,EAAAA,SAAS,IAAM,CACb5B,EAAK,QAAQ,CACf,CAAC,CACH,EAEMuO,EAAsBpM,GAAgB,CAG1C,MAAMqM,EAFUzN,EAAAA,WAAW,QAAQoB,CAAI,EAGnC,CAAA,EACAA,EAAK,OAAQmF,GAAc,CACzB,GAAI,CAACA,EACH,MAAO,GAET,MAAMmH,EACH1N,EAAAA,WAAW,SAASuG,EAAK,EAAE,GAAK,CAACvG,aAAW,QAAQuG,EAAK,EAAE,GAC3DvG,EAAAA,WAAW,SAASuG,EAAK,EAAE,GAAKvG,aAAW,SAASuG,EAAK,EAAE,EACxDoH,EACJ3N,EAAAA,WAAW,iBAAiBuG,EAAK,IAAI,GACpCvG,EAAAA,WAAW,SAASuG,EAAK,IAAI,GAAK,CAACvG,EAAAA,WAAW,QAAQuG,EAAK,IAAI,EAClE,OAAOmH,GAAQC,CACjB,CAAC,EAELjI,EAAU,aAAe1F,EAAAA,WAAW,cAAcyN,EAAU,MAAM,EAClE/H,EAAU,WAAa1F,EAAAA,WAAW,cAAcyN,EAAU,IAAI,CAChE,EAEMG,EAAoBvB,GAAoB,CAC5C,GAAIgB,EAAmB,MAAO,CAC5B,MAAMQ,EAAaR,EAAmB,MAAM,gBAAA,EAC5C,GAAIhB,GACF,GAAI,CAACwB,EAAY,CACf,MAAM9H,EAAW,CAAA,EACXzE,EAAY9B,EAAW,MAAQA,EAAW,MAAM,WAAa,GAC7D6B,EAAWrB,EAAAA,WAAW,QAAQsB,CAAS,EACzC,CAAA,EACAtB,EAAAA,WAAW,MAAMsB,EAAWvC,EAAM,SAAW,GAAG,EAChDsC,EAAS,OAAS,GACpBA,EAAS,QAASJ,GAAW,CAC3B,GAAIjB,EAAAA,WAAW,eAAe0F,EAAU,aAAczE,CAAC,EAAG,CACxD,MAAMsF,EAAOb,EAAU,aAAazE,CAAC,EACjCsF,GAAQ,CAACvG,EAAAA,WAAW,QAAQuG,EAAK,EAAE,GACrCR,EAAI,KAAKQ,EAAK,GAAG,SAAA,CAAU,CAE/B,CACF,CAAC,EAEH9G,EAAQ,iBAAmBsG,EAE3BtG,EAAQ,UAAY,CAACO,EAAAA,WAAW,QAAQjB,EAAM,IAAI,GAAK,CAAC,CAACA,EAAM,eAC/DsO,EAAmB,MAAM,QAAQ,EAAI,EACrCxM,EAAAA,SAAS,IAAM,CACTwM,EAAmB,OACrBA,EAAmB,MAAM,iBAAA,CAE7B,CAAC,CACH,OAEA5N,EAAQ,UAAY,GAChBoO,GACFR,EAAmB,MAAM,QAAQ,EAAK,CAG5C,CACF,EAEMrL,EAAY,IAAM,CACjBhC,EAAAA,WAAW,QAAQjB,EAAM,IAAI,GAChCyO,EAAmBzO,EAAM,IAAI,CAEjC,EAEAkD,EAAAA,UAAU,IAAM,CACdpB,EAAAA,SAAS,IAAM,CACbmB,EAAA,CACF,CAAC,CACH,CAAC,EAEDE,EAAAA,MACE,IAAMnD,EAAM,KACZoD,GAAY,CACVqL,EAAmBrL,CAAiB,EAEpC1C,EAAQ,UAAY,CAACO,aAAW,QAAQmC,CAAQ,GAAK,CAAC,CAACpD,EAAM,cAC/D,CAAA,EAIF,MAAM+O,EAAiB,IAAM,CAC3BlN,GAAA,CACF,EAEMmN,EAAgBrN,GAAmB,CAGnCA,GAAS3B,EAAM,UAGnB8B,EAAAA,SAAS,IAAM,CACT6D,EAAU,OACZA,EAAU,MAAM,aAAahE,CAAK,CAEtC,CAAC,CACH,EAIMsN,EAAkBtN,GAA2B,CACjD,MAAMiG,EAAajG,EAAM,YAAA,EACnBmG,EAAe9H,EAAM,UAC3B,IAAIkP,EAAU,GACd,OAAAlP,EAAM,KAAK,QAAS+C,GAAc,CAChC,GAAImM,EACF,OAEF,IAAIC,EAAa,EACjB,QAASnH,EAAK,EAAGA,EAAKF,EAAa,OAAQE,IAAM,CAC/C,MAAMoH,EAAWrM,EAAK+E,EAAaE,CAAE,CAAC,EAEpC/G,EAAAA,WAAW,iBAAiBmO,CAAQ,GACpCA,EAAS,cAAc,QAAQxH,CAAU,EAAI,IAE7CuH,GAEJ,CACIA,EAAa,IAEbnP,EAAM,gBAAkB,MACvBA,EAAM,gBAAkB,MAAQmP,IAAerH,EAAa,UAE7DoH,EAAU,GAGhB,CAAC,EACMA,CACT,EAEMG,EAAiB1N,GAAkB,CACvCjB,EAAQ,YAAciB,EACtB,IAAI2N,EAAiB,GAQrB,GANErO,EAAAA,WAAW,iBAAiBU,CAAK,IAChCA,EAAM,QAAQ;AAAA,CAAI,EAAI,IACpB,CAACV,EAAAA,WAAW,QAAQjB,EAAM,OAAO,GAAK2B,EAAM,QAAQ3B,EAAM,OAAO,EAAI,MAExEsP,EAAiB,IAEfA,EAAgB,CAElB,MAAMC,EAAatO,EAAAA,WAAW,QAAQU,CAAK,EACvC,GACA3B,EAAM,eACJ,GACAiP,EAAetN,CAAK,EAC1BkN,EAAiBU,CAAU,CAC7B,MACEV,EAAiB,EAAK,EAEnB7O,EAAM,UACTyB,EAAYE,EAAO,OAAO,CAE9B,EAEM6N,EAAsBzM,GAA+C,CACzE8L,EAAiB,CAAC9L,EAAK,SAAW,CAAC9B,EAAAA,WAAW,QAAQ8B,EAAK,MAAM,CAAC,CACpE,EAEM0M,EAAenI,GAAgB,CACnCpH,EAAK,UAAWoH,CAAG,CACrB,EAEMoI,EAAe,CACnBC,EACA1I,IACG,CAIH,GAHIhG,EAAAA,WAAW,QAAQgG,CAAc,GAGjCjH,EAAM,SACR,OAEF,MAAM4P,EAAoB,CAAA,GACJ3O,EAAAA,WAAW,QAAQgG,EAAe,EAAE,EACrDA,EAAe,GAChB,CAACA,EAAe,EAAY,GAC5B,QAASH,GAAe,CACtB7F,EAAAA,WAAW,eAAe0F,EAAU,WAAYG,CAAE,GACpD8I,EAAQ,KAAKjJ,EAAU,WAAWG,CAAE,EAAE,IAAI,CAE9C,CAAC,EACI9G,EAAM,WACTU,EAAQ,YAAc,IAEpBD,EAAW,OACbA,EAAW,MAAM,YAAYmP,EAAQ,KAAK5P,EAAM,SAAW,GAAG,EAAGiH,EAAe,QAAQ,CAE5F,EAEM4I,EAAa,CAAClO,EAAeD,IAAoB,CACrDD,EAAYE,EAAOD,CAAO,EACtB1B,EAAM,YACR6O,EAAiB,EAAK,CAE1B,EAEM3K,EAAgBvC,GAAkB,CAClC3B,EAAM,YAAcA,EAAM,kBAC5BU,EAAQ,YAAciB,EACtBkN,EAAiB,CAAC5N,EAAAA,WAAW,QAAQU,CAAK,CAAC,EAE/C,EASAmO,EAAAA,QAAqB,eAAgB,CACnC,yBAA0B,IAAM,CAC9B,IAAIC,EAAS,GACb,OAAIpK,EAAU,QACZoK,EAASpK,EAAU,MAAM,gBAAA,GAEpBoK,CACT,EACA,kBAAmBtB,EACnB,gBAAiBI,CAAA,CAClB,EAED,MAAMmB,GAAW,IACVvP,EAAW,MAGTA,EAAW,MAAM,SAAA,EAFf,GA2CX,OAAA0D,GAAa,CACX,SAAA6L,GACA,aAxCmB,IAAM,CACzB,MAAMrO,EAAQqO,GAAA,EACd,OAAKvP,EAAW,MAGCQ,EAAAA,WAAW,MAAMU,EAAO3B,EAAM,SAAW,GAAG,EAE1D,OAAQkC,GAAc,CAACjB,EAAAA,WAAW,QAAQiB,CAAC,CAAC,EAC5C,IAAKA,GAAc,CAClB,MAAMa,EAAO4D,EAAU,aAAazE,CAAC,EACrC,MAAO,CACL,KAAMA,EACN,GAAIa,GAAQ,CAAC9B,aAAW,QAAQ8B,EAAK,EAAE,EAAIA,EAAK,GAAK,MAAA,CAEzD,CAAC,EAXM,CAAA,CAYX,EA0BE,SAxBgBpB,GAAkB,CAC7BlB,EAAW,OAGhBA,EAAW,MAAM,SAASkB,CAAK,CACjC,EAoBE,MAlBY,IAAM,CACblB,EAAW,OAGhBA,EAAW,MAAM,MAAA,CACnB,CAaE,CACD,SA3fSR,EAAA,0BADR6E,EAAAA,YAyDwBmL,GAAAA,UAAA,eAvDlB,qBAAJ,IAAI3B,EACH,GAAIV,EAAAA,MAAAS,CAAA,EACJ,YAAalN,EAAA,MACb,cAAeqN,EAAA,MACf,gBAAiB,0BACjB,eAAcQ,CAAA,GAEE,sBACf,IAoBsB,CApBtBzK,EAAAA,YAoBsB2L,GAAA,SAnBhB,aAAJ,IAAIzP,EACH,MAAOR,EAAA,MACP,YAAaA,EAAA,YACb,SAAUA,EAAA,SACV,QAASA,EAAA,QACT,SAAUA,EAAA,SACV,UAAWA,EAAA,UACX,QAASA,EAAA,QACT,OAAQA,EAAA,OACR,mBAAoBA,EAAA,mBACpB,YAAaA,EAAA,YACb,gBAAiB,GACjB,cAAeA,EAAA,cACf,cAAeA,EAAA,cACf,UAAWA,EAAA,UACX,WAAU4P,EACV,gBAAeR,EACf,SAAQN,EACR,UAAS7K,CAAA,kLAGG,mBACf,IAsByB,CAtBzBK,EAAAA,YAsByB4L,GAAA,SArBnB,YAAJ,IAAIxK,EACH,SAAUjF,EAAQ,SAClB,SAAU,GACV,YAAaA,EAAQ,YACrB,UAAWT,EAAA,UACX,cAAeA,EAAA,cACf,WAAY,GACZ,uBAAwBA,EAAA,uBACxB,0BAA2BA,EAAA,0BAC3B,UAAWA,EAAA,UACX,iBAAkBA,EAAA,iBAClB,UAAWA,EAAA,UACX,eAAgBA,EAAA,eAChB,iBAAkB,GAClB,aAAcA,EAAA,KACd,SAAUS,EAAQ,iBAClB,eAAgBT,EAAA,eAChB,cAAeA,EAAA,cACf,iBAAgBuP,EAChB,WAAUE,EACV,UAASD,CAAA,4SAIhBrL,EAAAA,mBA0BM,MAAA,OAxBH,uBAAOjD,EAAA,KAAS,EAChB,GAAIyM,EAAAA,MAAAS,CAAA,CAAA,GAEL9J,EAAAA,YAoBsB2L,GAAA,SAnBhB,aAAJ,IAAIzP,EACH,MAAOR,EAAA,MACP,YAAaA,EAAA,YACb,SAAUA,EAAA,SACV,QAASA,EAAA,QACT,SAAUA,EAAA,SACV,UAAWA,EAAA,UACX,QAASA,EAAA,QACT,OAAQA,EAAA,OACR,mBAAoBA,EAAA,mBACpB,YAAaA,EAAA,YACb,gBAAiB,GACjB,cAAeA,EAAA,cACf,cAAeA,EAAA,cACf,UAAWA,EAAA,UACX,WAAU4P,EACV,gBAAeR,EACf,SAAQN,EACR,UAAS7K,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use strict";var k=Object.create;var g=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var T=Object.getOwnPropertyNames;var H=Object.getPrototypeOf,B=Object.prototype.hasOwnProperty;var R=(o,r,s,m)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of T(r))!B.call(o,n)&&n!==s&&g(o,n,{get:()=>r[n],enumerable:!(m=x(r,n))||m.enumerable});return o};var D=(o,r,s)=>(s=o!=null?k(H(o)):{},R(r||!o||!o.__esModule?g(s,"default",{value:o,enumerable:!0}):s,o));const t=require("vue"),u=require("./base-C2QOJBgB.js"),E=require("./index-DAgtltwJ.js"),S=require("./resize-DGV8i_Fb.js"),I=require("./Ing.vue_vue_type_script_setup_true_lang-D-16hxdZ.js"),N=["#2ec7c9","#b6a2de","#5ab1ef","#ffb980","#d87a80","#8d98b3","#e5cf0d","#97b552","#95706d","#dc69aa","#07a2a4","#9a7fd1","#588dd5","#f5994e","#c05050","#59678c","#c9ab00","#7eb00a","#6f5553","#c14089"],P={color:N,title:{textStyle:{fontWeight:"normal",color:"#008acd"}},visualMap:{itemWidth:15,color:["#5ab1ef","#e0ffff"]},tooltip:{backgroundColor:"rgba(50,50,50,0.5)",axisPointer:{type:"line",lineStyle:{color:"#008acd"},crossStyle:{color:"#008acd"},shadowStyle:{color:"rgba(200,200,200,0.2)"}}},dataZoom:{dataBackgroundColor:"#efefff",fillerColor:"rgba(182,162,222,0.2)",handleColor:"#008acd"},grid:{borderColor:"#eee"},categoryAxis:{axisLine:{lineStyle:{color:"#008acd"}},splitLine:{lineStyle:{color:["#eee"]}}},valueAxis:{axisLine:{lineStyle:{color:"#008acd"}},splitArea:{show:!0,areaStyle:{color:["rgba(250,250,250,0.1)","rgba(200,200,200,0.1)"]}},splitLine:{lineStyle:{color:["#eee"]}}},timeline:{lineStyle:{color:"#008acd"},controlStyle:{color:"#008acd",borderColor:"#008acd"},symbol:"emptyCircle",symbolSize:3},line:{smooth:!0,symbol:"emptyCircle",symbolSize:3},candlestick:{itemStyle:{color:"#d87a80",color0:"#2ec7c9"},lineStyle:{width:1,color:"#d87a80",color0:"#2ec7c9"},areaStyle:{color:"#2ec7c9",color0:"#b6a2de"}},scatter:{symbol:"circle",symbolSize:4},map:{itemStyle:{color:"#2ec7c9"},label:{color:"#000000"}},graph:{itemStyle:{color:"#d87a80"},linkStyle:{color:"#2ec7c9"}},gauge:{axisLine:{lineStyle:{color:[[.2,"#2ec7c9"],[.8,"#5ab1ef"],[1,"#d87a80"]],width:10}},axisTick:{splitNumber:10,length:15,lineStyle:{color:"auto"}},splitLine:{length:22,lineStyle:{color:"auto"}},pointer:{width:5}}},q=["id"],$=t.defineComponent({name:"ClEcharts",__name:"Index",props:{id:String,chartOption:Object,className:String,height:{type:[Number,String],default:400},isRunLoad:{type:Boolean,default:!1}},emits:["onInitFirst","onHideResize","onError"],setup(o,{expose:r,emit:s}){let m=null,n=!1;const C=()=>(m||(m=import("echarts")),m),l=o,f=s,_=l.id,d=t.ref(null),c=t.reactive({isShowLoad:l.isRunLoad,isEmptyData:!1}),e={resizeEvent:null,chartObject:null,initTimer:null,isHideEmit:!1},v=t.computed(()=>{let i={"panel-echarts":!0,"chart-loading":c.isShowLoad||c.isEmptyData};return i=u.CommonBase.getJsonMerge(i,E.CommonElement.getClassNameJson(l.className)),i}),z=t.computed(()=>{const i={};return(c.isShowLoad||c.isEmptyData)&&(i.height="100%"),i}),O=t.computed(()=>{const i={},{height:a}=l;return typeof a=="number"&&u.CommonBase.isFinite(a)&&a>0?i.height=`${a}px`:u.CommonBase.isNonEmptyString(a)&&(i.height=a),i}),j=()=>{f("onHideResize")},w=()=>{f("onInitFirst")},h=()=>{e.chartObject&&e.chartObject.resize()},y=async i=>{if(!d.value)return;const a=u.CommonBase.isEmpty(i);if(c.isEmptyData=a,!a&&i)try{const p=await C();n||(p.registerTheme("macarons",P),n=!0),e.chartObject||(e.chartObject=p.init(d.value,"macarons"),e.initTimer=setTimeout(()=>{w()},50)),e.chartObject.setOption(i,!0),h()}catch{e.initTimer&&(clearTimeout(e.initTimer),e.initTimer=null),f("onError","图表配置异常")}else e.chartObject&&e.chartObject.clear()},b=()=>{e.chartObject&&(E.CommonElement.isHiddenParent(d.value)?e.isHideEmit||(e.isHideEmit=!0,j()):(e.isHideEmit&&(e.isHideEmit=!1),h()))},L=()=>{y(l.chartOption)};return t.onMounted(()=>{e.resizeEvent=new S.Resize({callback:()=>{b()}}),t.nextTick(()=>{L()})}),t.onBeforeUnmount(()=>{e.resizeEvent&&e.resizeEvent.destroy(),e.initTimer&&clearTimeout(e.initTimer),e.chartObject&&(e.chartObject.dispose(),e.chartObject=null)}),t.onActivated(()=>{e.resizeEvent||(e.resizeEvent=new S.Resize({callback:()=>{b()}})),t.nextTick(()=>{h()})}),t.onDeactivated(()=>{e.resizeEvent&&(e.resizeEvent.destroy(),e.resizeEvent=null)}),t.watch(()=>l.isRunLoad,i=>{c.isShowLoad=i}),t.watch(()=>l.chartOption,i=>{y(i)}),r({getChartObject:()=>e.chartObject,getChartElement:()=>d.value,resize:()=>{h()}}),(i,a)=>(t.openBlock(),t.createElementBlock("div",{id:t.unref(_),class:t.normalizeClass(v.value),style:t.normalizeStyle(z.value)},[t.renderSlot(i.$slots,"chartHead"),t.createElementVNode("div",{ref_key:"refElChart",ref:d,style:t.normalizeStyle(O.value),role:"img","aria-label":"图表"},null,4),t.createVNode(I._sfc_main,{isLoadIng:c.isShowLoad,isEmpty:c.isEmptyData},{nothingData:t.withCtx(()=>[t.renderSlot(i.$slots,"nothingData")]),_:3},8,["isLoadIng","isEmpty"])],14,q))}});exports._sfc_main=$;
|
|
2
|
-
//# sourceMappingURL=Index.vue_vue_type_script_setup_true_lang-
|
|
2
|
+
//# sourceMappingURL=Index.vue_vue_type_script_setup_true_lang-tjRv0vNR.js.map
|