@nuwatop/code-canvas-core 0.1.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/base/CommandsUtils.d.ts +27 -0
- package/dist/base/CommandsUtils.d.ts.map +1 -0
- package/dist/base/hooks/useApiService.d.ts +47 -0
- package/dist/base/hooks/useApiService.d.ts.map +1 -0
- package/dist/base/mountReactComponent.d.ts +42 -0
- package/dist/base/mountReactComponent.d.ts.map +1 -0
- package/dist/base/store/storePathUtils.d.ts +32 -0
- package/dist/base/store/storePathUtils.d.ts.map +1 -0
- package/dist/base/store/useAndStore.d.ts +98 -0
- package/dist/base/store/useAndStore.d.ts.map +1 -0
- package/dist/base/storeKeyUtils.d.ts +14 -0
- package/dist/base/storeKeyUtils.d.ts.map +1 -0
- package/dist/base/storePropsUtils.d.ts +12 -0
- package/dist/base/storePropsUtils.d.ts.map +1 -0
- package/dist/base/useFieldValidation.d.ts +27 -0
- package/dist/base/useFieldValidation.d.ts.map +1 -0
- package/dist/base/validationUtils.d.ts +15 -0
- package/dist/base/validationUtils.d.ts.map +1 -0
- package/dist/components/AndAlert/index.d.ts +22 -0
- package/dist/components/AndAlert/index.d.ts.map +1 -0
- package/dist/components/AndAutoComplete/index.d.ts +26 -0
- package/dist/components/AndAutoComplete/index.d.ts.map +1 -0
- package/dist/components/AndAvatar/index.d.ts +30 -0
- package/dist/components/AndAvatar/index.d.ts.map +1 -0
- package/dist/components/AndBadge/index.d.ts +10 -0
- package/dist/components/AndBadge/index.d.ts.map +1 -0
- package/dist/components/AndBadgeRibbon/index.d.ts +10 -0
- package/dist/components/AndBadgeRibbon/index.d.ts.map +1 -0
- package/dist/components/AndBreadCrumb/index.d.ts +9 -0
- package/dist/components/AndBreadCrumb/index.d.ts.map +1 -0
- package/dist/components/AndButton/index.d.ts +30 -0
- package/dist/components/AndButton/index.d.ts.map +1 -0
- package/dist/components/AndCalendar/index.d.ts +10 -0
- package/dist/components/AndCalendar/index.d.ts.map +1 -0
- package/dist/components/AndCard/index.d.ts +51 -0
- package/dist/components/AndCard/index.d.ts.map +1 -0
- package/dist/components/AndCarousel/index.d.ts +27 -0
- package/dist/components/AndCarousel/index.d.ts.map +1 -0
- package/dist/components/AndCascade/index.d.ts +42 -0
- package/dist/components/AndCascade/index.d.ts.map +1 -0
- package/dist/components/AndCheckbox/index.d.ts +52 -0
- package/dist/components/AndCheckbox/index.d.ts.map +1 -0
- package/dist/components/AndColumn/index.d.ts +9 -0
- package/dist/components/AndColumn/index.d.ts.map +1 -0
- package/dist/components/AndContainer/index.d.ts +9 -0
- package/dist/components/AndContainer/index.d.ts.map +1 -0
- package/dist/components/AndDatePicker/index.d.ts +31 -0
- package/dist/components/AndDatePicker/index.d.ts.map +1 -0
- package/dist/components/AndDivider/index.d.ts +43 -0
- package/dist/components/AndDivider/index.d.ts.map +1 -0
- package/dist/components/AndDrawer/index.d.ts +20 -0
- package/dist/components/AndDrawer/index.d.ts.map +1 -0
- package/dist/components/AndDropdown/index.d.ts +41 -0
- package/dist/components/AndDropdown/index.d.ts.map +1 -0
- package/dist/components/AndDynamicContainer/index.d.ts +38 -0
- package/dist/components/AndDynamicContainer/index.d.ts.map +1 -0
- package/dist/components/AndFormItem/index.d.ts +9 -0
- package/dist/components/AndFormItem/index.d.ts.map +1 -0
- package/dist/components/AndIcon/index.d.ts +28 -0
- package/dist/components/AndIcon/index.d.ts.map +1 -0
- package/dist/components/AndImage/index.d.ts +11 -0
- package/dist/components/AndImage/index.d.ts.map +1 -0
- package/dist/components/AndImageGroup/index.d.ts +11 -0
- package/dist/components/AndImageGroup/index.d.ts.map +1 -0
- package/dist/components/AndInput/index.d.ts +46 -0
- package/dist/components/AndInput/index.d.ts.map +1 -0
- package/dist/components/AndInputArea/index.d.ts +22 -0
- package/dist/components/AndInputArea/index.d.ts.map +1 -0
- package/dist/components/AndInputNumber/index.d.ts +22 -0
- package/dist/components/AndInputNumber/index.d.ts.map +1 -0
- package/dist/components/AndInputPassword/index.d.ts +21 -0
- package/dist/components/AndInputPassword/index.d.ts.map +1 -0
- package/dist/components/AndInputSearch/index.d.ts +16 -0
- package/dist/components/AndInputSearch/index.d.ts.map +1 -0
- package/dist/components/AndIterator/index.d.ts +28 -0
- package/dist/components/AndIterator/index.d.ts.map +1 -0
- package/dist/components/AndMasonry/index.d.ts +52 -0
- package/dist/components/AndMasonry/index.d.ts.map +1 -0
- package/dist/components/AndMenu/index.d.ts +112 -0
- package/dist/components/AndMenu/index.d.ts.map +1 -0
- package/dist/components/AndModal/index.d.ts +24 -0
- package/dist/components/AndModal/index.d.ts.map +1 -0
- package/dist/components/AndPagination/index.d.ts +17 -0
- package/dist/components/AndPagination/index.d.ts.map +1 -0
- package/dist/components/AndParagraph/index.d.ts +13 -0
- package/dist/components/AndParagraph/index.d.ts.map +1 -0
- package/dist/components/AndProductCategory/index.d.ts +24 -0
- package/dist/components/AndProductCategory/index.d.ts.map +1 -0
- package/dist/components/AndQRCode/index.d.ts +9 -0
- package/dist/components/AndQRCode/index.d.ts.map +1 -0
- package/dist/components/AndRadio/index.d.ts +50 -0
- package/dist/components/AndRadio/index.d.ts.map +1 -0
- package/dist/components/AndRangePicker/index.d.ts +17 -0
- package/dist/components/AndRangePicker/index.d.ts.map +1 -0
- package/dist/components/AndRate/index.d.ts +26 -0
- package/dist/components/AndRate/index.d.ts.map +1 -0
- package/dist/components/AndResult/index.d.ts +9 -0
- package/dist/components/AndResult/index.d.ts.map +1 -0
- package/dist/components/AndRow/index.d.ts +9 -0
- package/dist/components/AndRow/index.d.ts.map +1 -0
- package/dist/components/AndSegmented/index.d.ts +45 -0
- package/dist/components/AndSegmented/index.d.ts.map +1 -0
- package/dist/components/AndSelect/index.d.ts +46 -0
- package/dist/components/AndSelect/index.d.ts.map +1 -0
- package/dist/components/AndSimpleForm/index.d.ts +17 -0
- package/dist/components/AndSimpleForm/index.d.ts.map +1 -0
- package/dist/components/AndSlider/index.d.ts +11 -0
- package/dist/components/AndSlider/index.d.ts.map +1 -0
- package/dist/components/AndSplitter/index.d.ts +85 -0
- package/dist/components/AndSplitter/index.d.ts.map +1 -0
- package/dist/components/AndStatistics/index.d.ts +9 -0
- package/dist/components/AndStatistics/index.d.ts.map +1 -0
- package/dist/components/AndStatisticsCountdown/index.d.ts +9 -0
- package/dist/components/AndStatisticsCountdown/index.d.ts.map +1 -0
- package/dist/components/AndSteps/index.d.ts +57 -0
- package/dist/components/AndSteps/index.d.ts.map +1 -0
- package/dist/components/AndSwitch/index.d.ts +18 -0
- package/dist/components/AndSwitch/index.d.ts.map +1 -0
- package/dist/components/AndTable/ColumnSettingModal.d.ts +37 -0
- package/dist/components/AndTable/ColumnSettingModal.d.ts.map +1 -0
- package/dist/components/AndTable/index.d.ts +11 -0
- package/dist/components/AndTable/index.d.ts.map +1 -0
- package/dist/components/AndTable/renderers.d.ts +28 -0
- package/dist/components/AndTable/renderers.d.ts.map +1 -0
- package/dist/components/AndTabs/index.d.ts +26 -0
- package/dist/components/AndTabs/index.d.ts.map +1 -0
- package/dist/components/AndTag/index.d.ts +21 -0
- package/dist/components/AndTag/index.d.ts.map +1 -0
- package/dist/components/AndText/index.d.ts +35 -0
- package/dist/components/AndText/index.d.ts.map +1 -0
- package/dist/components/AndTimePicker/index.d.ts +28 -0
- package/dist/components/AndTimePicker/index.d.ts.map +1 -0
- package/dist/components/AndTimeline/index.d.ts +9 -0
- package/dist/components/AndTimeline/index.d.ts.map +1 -0
- package/dist/components/AndTitle/index.d.ts +22 -0
- package/dist/components/AndTitle/index.d.ts.map +1 -0
- package/dist/components/AndTransfer/index.d.ts +85 -0
- package/dist/components/AndTransfer/index.d.ts.map +1 -0
- package/dist/components/AndTree/index.d.ts +97 -0
- package/dist/components/AndTree/index.d.ts.map +1 -0
- package/dist/components/AndTreeSelect/index.d.ts +68 -0
- package/dist/components/AndTreeSelect/index.d.ts.map +1 -0
- package/dist/components/AndUpload/index.d.ts +25 -0
- package/dist/components/AndUpload/index.d.ts.map +1 -0
- package/dist/components/AndWatermark.d.ts +45 -0
- package/dist/components/AndWatermark.d.ts.map +1 -0
- package/dist/index.d.ts +86 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js +7068 -178
- package/dist/index.esm.js.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/style.css +1 -1
- package/dist/types/common.d.ts +58 -16
- package/dist/types/common.d.ts.map +1 -1
- package/package.json +17 -18
- package/dist/_virtual/_plugin-vue_export-helper.esm.js +0 -9
- package/dist/_virtual/_plugin-vue_export-helper.js.js +0 -1
- package/dist/base/actionParser.esm.js +0 -44
- package/dist/base/actionParser.js.js +0 -1
- package/dist/base/baseUtils.d.ts +0 -110
- package/dist/base/baseUtils.d.ts.map +0 -1
- package/dist/base/baseUtils.esm.js +0 -183
- package/dist/base/baseUtils.js.js +0 -1
- package/dist/base/index.d.ts +0 -7
- package/dist/base/index.d.ts.map +0 -1
- package/dist/base/moduleLoader.d.ts +0 -8
- package/dist/base/moduleLoader.d.ts.map +0 -1
- package/dist/base/moduleLoader.esm.js +0 -19
- package/dist/base/moduleLoader.js.js +0 -1
- package/dist/base/mountVueComponent.d.ts +0 -23
- package/dist/base/mountVueComponent.d.ts.map +0 -1
- package/dist/base/mountVueComponent.esm.js +0 -78
- package/dist/base/mountVueComponent.js.js +0 -1
- package/dist/base/store/AndStore.d.ts +0 -17
- package/dist/base/store/AndStore.d.ts.map +0 -1
- package/dist/base/store/andStore.esm.js +0 -76
- package/dist/base/store/andStore.js.js +0 -1
- package/dist/base/useStore.d.ts +0 -121
- package/dist/base/useStore.d.ts.map +0 -1
- package/dist/base/useStore.esm.js +0 -169
- package/dist/base/useStore.js.js +0 -1
- package/dist/components/AndAlert.vue.d.ts +0 -27
- package/dist/components/AndAlert.vue.d.ts.map +0 -1
- package/dist/components/AndAlert.vue.esm.js +0 -61
- package/dist/components/AndAlert.vue.esm2.js +0 -4
- package/dist/components/AndAlert.vue.js.js +0 -1
- package/dist/components/AndAlert.vue.js2.js +0 -1
- package/dist/components/AndAutoComplete.vue.d.ts +0 -40
- package/dist/components/AndAutoComplete.vue.d.ts.map +0 -1
- package/dist/components/AndAutoComplete.vue.esm.js +0 -7
- package/dist/components/AndAutoComplete.vue.esm2.js +0 -74
- package/dist/components/AndAutoComplete.vue.esm3.js +0 -1
- package/dist/components/AndAutoComplete.vue.js.js +0 -1
- package/dist/components/AndAutoComplete.vue.js2.js +0 -1
- package/dist/components/AndAutoComplete.vue.js3.js +0 -1
- package/dist/components/AndAvatar.vue.d.ts +0 -25
- package/dist/components/AndAvatar.vue.d.ts.map +0 -1
- package/dist/components/AndAvatar.vue.esm.js +0 -48
- package/dist/components/AndAvatar.vue.esm2.js +0 -4
- package/dist/components/AndAvatar.vue.js.js +0 -1
- package/dist/components/AndAvatar.vue.js2.js +0 -1
- package/dist/components/AndBreadCrumb.vue.d.ts +0 -20
- package/dist/components/AndBreadCrumb.vue.d.ts.map +0 -1
- package/dist/components/AndBreadCrumb.vue.esm.js +0 -29
- package/dist/components/AndBreadCrumb.vue.esm2.js +0 -4
- package/dist/components/AndBreadCrumb.vue.js.js +0 -1
- package/dist/components/AndBreadCrumb.vue.js2.js +0 -1
- package/dist/components/AndButton.vue.d.ts +0 -28
- package/dist/components/AndButton.vue.d.ts.map +0 -1
- package/dist/components/AndButton.vue.esm.js +0 -57
- package/dist/components/AndButton.vue.esm2.js +0 -4
- package/dist/components/AndButton.vue.js.js +0 -1
- package/dist/components/AndButton.vue.js2.js +0 -1
- package/dist/components/AndCalendar.vue.d.ts +0 -16
- package/dist/components/AndCalendar.vue.d.ts.map +0 -1
- package/dist/components/AndCalendar.vue.esm.js +0 -19
- package/dist/components/AndCalendar.vue.esm2.js +0 -4
- package/dist/components/AndCalendar.vue.js.js +0 -1
- package/dist/components/AndCalendar.vue.js2.js +0 -1
- package/dist/components/AndCard.vue.d.ts +0 -25
- package/dist/components/AndCard.vue.d.ts.map +0 -1
- package/dist/components/AndCard.vue.esm.js +0 -7
- package/dist/components/AndCard.vue.esm2.js +0 -66
- package/dist/components/AndCard.vue.esm3.js +0 -1
- package/dist/components/AndCard.vue.js.js +0 -1
- package/dist/components/AndCard.vue.js2.js +0 -1
- package/dist/components/AndCard.vue.js3.js +0 -1
- package/dist/components/AndCarousel.vue.d.ts +0 -28
- package/dist/components/AndCarousel.vue.d.ts.map +0 -1
- package/dist/components/AndCarousel.vue.esm.js +0 -7
- package/dist/components/AndCarousel.vue.esm2.js +0 -100
- package/dist/components/AndCarousel.vue.esm3.js +0 -1
- package/dist/components/AndCarousel.vue.js.js +0 -1
- package/dist/components/AndCarousel.vue.js2.js +0 -1
- package/dist/components/AndCarousel.vue.js3.js +0 -1
- package/dist/components/AndCascade.vue.d.ts +0 -29
- package/dist/components/AndCascade.vue.d.ts.map +0 -1
- package/dist/components/AndCascade.vue.esm.js +0 -7
- package/dist/components/AndCascade.vue.esm2.js +0 -132
- package/dist/components/AndCascade.vue.esm3.js +0 -1
- package/dist/components/AndCascade.vue.js.js +0 -1
- package/dist/components/AndCascade.vue.js2.js +0 -1
- package/dist/components/AndCascade.vue.js3.js +0 -1
- package/dist/components/AndCheck.vue.d.ts +0 -32
- package/dist/components/AndCheck.vue.d.ts.map +0 -1
- package/dist/components/AndCheck.vue.esm.js +0 -7
- package/dist/components/AndCheck.vue.esm2.js +0 -136
- package/dist/components/AndCheck.vue.esm3.js +0 -1
- package/dist/components/AndCheck.vue.js.js +0 -1
- package/dist/components/AndCheck.vue.js2.js +0 -1
- package/dist/components/AndCheck.vue.js3.js +0 -1
- package/dist/components/AndDatePicker.vue.d.ts +0 -25
- package/dist/components/AndDatePicker.vue.d.ts.map +0 -1
- package/dist/components/AndDatePicker.vue.esm.js +0 -7
- package/dist/components/AndDatePicker.vue.esm2.js +0 -64
- package/dist/components/AndDatePicker.vue.esm3.js +0 -1
- package/dist/components/AndDatePicker.vue.js.js +0 -1
- package/dist/components/AndDatePicker.vue.js2.js +0 -1
- package/dist/components/AndDatePicker.vue.js3.js +0 -1
- package/dist/components/AndDrawer.vue.d.ts +0 -45
- package/dist/components/AndDrawer.vue.d.ts.map +0 -1
- package/dist/components/AndDrawer.vue.esm.js +0 -7
- package/dist/components/AndDrawer.vue.esm2.js +0 -76
- package/dist/components/AndDrawer.vue.esm3.js +0 -1
- package/dist/components/AndDrawer.vue.js.js +0 -1
- package/dist/components/AndDrawer.vue.js2.js +0 -1
- package/dist/components/AndDrawer.vue.js3.js +0 -1
- package/dist/components/AndDropdownMenu.vue.d.ts +0 -22
- package/dist/components/AndDropdownMenu.vue.d.ts.map +0 -1
- package/dist/components/AndDropdownMenu.vue.esm.js +0 -50
- package/dist/components/AndDropdownMenu.vue.esm2.js +0 -4
- package/dist/components/AndDropdownMenu.vue.js.js +0 -1
- package/dist/components/AndDropdownMenu.vue.js2.js +0 -1
- package/dist/components/AndFormItem.vue.d.ts +0 -26
- package/dist/components/AndFormItem.vue.d.ts.map +0 -1
- package/dist/components/AndFormItem.vue.esm.js +0 -45
- package/dist/components/AndFormItem.vue.esm2.js +0 -4
- package/dist/components/AndFormItem.vue.js.js +0 -1
- package/dist/components/AndFormItem.vue.js2.js +0 -1
- package/dist/components/AndIcon.vue.d.ts +0 -39
- package/dist/components/AndIcon.vue.d.ts.map +0 -1
- package/dist/components/AndIcon.vue.esm.js +0 -14
- package/dist/components/AndIcon.vue.esm2.js +0 -4
- package/dist/components/AndIcon.vue.js.js +0 -1
- package/dist/components/AndIcon.vue.js2.js +0 -1
- package/dist/components/AndImage.vue.d.ts +0 -31
- package/dist/components/AndImage.vue.d.ts.map +0 -1
- package/dist/components/AndImage.vue.esm.js +0 -7
- package/dist/components/AndImage.vue.esm2.js +0 -58
- package/dist/components/AndImage.vue.esm3.js +0 -1
- package/dist/components/AndImage.vue.js.js +0 -1
- package/dist/components/AndImage.vue.js2.js +0 -1
- package/dist/components/AndImage.vue.js3.js +0 -1
- package/dist/components/AndImageGroup.vue.d.ts +0 -18
- package/dist/components/AndImageGroup.vue.d.ts.map +0 -1
- package/dist/components/AndImageGroup.vue.esm.js +0 -7
- package/dist/components/AndImageGroup.vue.esm2.js +0 -101
- package/dist/components/AndImageGroup.vue.esm3.js +0 -1
- package/dist/components/AndImageGroup.vue.js.js +0 -1
- package/dist/components/AndImageGroup.vue.js2.js +0 -1
- package/dist/components/AndImageGroup.vue.js3.js +0 -1
- package/dist/components/AndInput.vue.d.ts +0 -36
- package/dist/components/AndInput.vue.d.ts.map +0 -1
- package/dist/components/AndInput.vue.esm.js +0 -7
- package/dist/components/AndInput.vue.esm2.js +0 -106
- package/dist/components/AndInput.vue.esm3.js +0 -1
- package/dist/components/AndInput.vue.js.js +0 -1
- package/dist/components/AndInput.vue.js2.js +0 -1
- package/dist/components/AndInput.vue.js3.js +0 -1
- package/dist/components/AndInputArea.vue.d.ts +0 -23
- package/dist/components/AndInputArea.vue.d.ts.map +0 -1
- package/dist/components/AndInputArea.vue.esm.js +0 -7
- package/dist/components/AndInputArea.vue.esm2.js +0 -55
- package/dist/components/AndInputArea.vue.esm3.js +0 -1
- package/dist/components/AndInputArea.vue.js.js +0 -1
- package/dist/components/AndInputArea.vue.js2.js +0 -1
- package/dist/components/AndInputArea.vue.js3.js +0 -1
- package/dist/components/AndInputNumber.vue.d.ts +0 -29
- package/dist/components/AndInputNumber.vue.d.ts.map +0 -1
- package/dist/components/AndInputNumber.vue.esm.js +0 -7
- package/dist/components/AndInputNumber.vue.esm2.js +0 -88
- package/dist/components/AndInputNumber.vue.esm3.js +0 -1
- package/dist/components/AndInputNumber.vue.js.js +0 -1
- package/dist/components/AndInputNumber.vue.js2.js +0 -1
- package/dist/components/AndInputNumber.vue.js3.js +0 -1
- package/dist/components/AndInputPassword.vue.d.ts +0 -23
- package/dist/components/AndInputPassword.vue.d.ts.map +0 -1
- package/dist/components/AndInputPassword.vue.esm.js +0 -7
- package/dist/components/AndInputPassword.vue.esm2.js +0 -53
- package/dist/components/AndInputPassword.vue.esm3.js +0 -1
- package/dist/components/AndInputPassword.vue.js.js +0 -1
- package/dist/components/AndInputPassword.vue.js2.js +0 -1
- package/dist/components/AndInputPassword.vue.js3.js +0 -1
- package/dist/components/AndInputSearch.vue.d.ts +0 -27
- package/dist/components/AndInputSearch.vue.d.ts.map +0 -1
- package/dist/components/AndInputSearch.vue.esm.js +0 -52
- package/dist/components/AndInputSearch.vue.esm2.js +0 -4
- package/dist/components/AndInputSearch.vue.js.js +0 -1
- package/dist/components/AndInputSearch.vue.js2.js +0 -1
- package/dist/components/AndIterator.vue.d.ts +0 -44
- package/dist/components/AndIterator.vue.d.ts.map +0 -1
- package/dist/components/AndIterator.vue.esm.js +0 -91
- package/dist/components/AndIterator.vue.esm2.js +0 -4
- package/dist/components/AndIterator.vue.js.js +0 -1
- package/dist/components/AndIterator.vue.js2.js +0 -1
- package/dist/components/AndMenu.vue.d.ts +0 -16
- package/dist/components/AndMenu.vue.d.ts.map +0 -1
- package/dist/components/AndMenu.vue.esm.js +0 -22
- package/dist/components/AndMenu.vue.esm2.js +0 -4
- package/dist/components/AndMenu.vue.js.js +0 -1
- package/dist/components/AndMenu.vue.js2.js +0 -1
- package/dist/components/AndModal.vue.d.ts +0 -44
- package/dist/components/AndModal.vue.d.ts.map +0 -1
- package/dist/components/AndModal.vue.esm.js +0 -40
- package/dist/components/AndModal.vue.esm2.js +0 -4
- package/dist/components/AndModal.vue.js.js +0 -1
- package/dist/components/AndModal.vue.js2.js +0 -1
- package/dist/components/AndPagination.vue.d.ts +0 -30
- package/dist/components/AndPagination.vue.d.ts.map +0 -1
- package/dist/components/AndPagination.vue.esm.js +0 -97
- package/dist/components/AndPagination.vue.esm2.js +0 -4
- package/dist/components/AndPagination.vue.js.js +0 -1
- package/dist/components/AndPagination.vue.js2.js +0 -1
- package/dist/components/AndParagraph.vue.d.ts +0 -27
- package/dist/components/AndParagraph.vue.d.ts.map +0 -1
- package/dist/components/AndParagraph.vue.esm.js +0 -46
- package/dist/components/AndParagraph.vue.esm2.js +0 -4
- package/dist/components/AndParagraph.vue.js.js +0 -1
- package/dist/components/AndParagraph.vue.js2.js +0 -1
- package/dist/components/AndProductCategory.vue.d.ts +0 -3
- package/dist/components/AndProductCategory.vue.d.ts.map +0 -1
- package/dist/components/AndProductCategory.vue.esm.js +0 -340
- package/dist/components/AndProductCategory.vue.esm2.js +0 -1
- package/dist/components/AndProductCategory.vue.js.js +0 -1
- package/dist/components/AndProductCategory.vue.js2.js +0 -1
- package/dist/components/AndQRCode.vue.d.ts +0 -37
- package/dist/components/AndQRCode.vue.d.ts.map +0 -1
- package/dist/components/AndQRCode.vue.esm.js +0 -50
- package/dist/components/AndQRCode.vue.esm2.js +0 -4
- package/dist/components/AndQRCode.vue.js.js +0 -1
- package/dist/components/AndQRCode.vue.js2.js +0 -1
- package/dist/components/AndRadio.vue.d.ts +0 -32
- package/dist/components/AndRadio.vue.d.ts.map +0 -1
- package/dist/components/AndRadio.vue.esm.js +0 -7
- package/dist/components/AndRadio.vue.esm2.js +0 -128
- package/dist/components/AndRadio.vue.esm3.js +0 -1
- package/dist/components/AndRadio.vue.js.js +0 -1
- package/dist/components/AndRadio.vue.js2.js +0 -1
- package/dist/components/AndRadio.vue.js3.js +0 -1
- package/dist/components/AndRangePicker.vue.d.ts +0 -16
- package/dist/components/AndRangePicker.vue.d.ts.map +0 -1
- package/dist/components/AndRangePicker.vue.esm.js +0 -54
- package/dist/components/AndRangePicker.vue.esm2.js +0 -4
- package/dist/components/AndRangePicker.vue.js.js +0 -1
- package/dist/components/AndRangePicker.vue.js2.js +0 -1
- package/dist/components/AndRate.vue.d.ts +0 -27
- package/dist/components/AndRate.vue.d.ts.map +0 -1
- package/dist/components/AndRate.vue.esm.js +0 -58
- package/dist/components/AndRate.vue.esm2.js +0 -4
- package/dist/components/AndRate.vue.js.js +0 -1
- package/dist/components/AndRate.vue.js2.js +0 -1
- package/dist/components/AndResult.vue.d.ts +0 -22
- package/dist/components/AndResult.vue.d.ts.map +0 -1
- package/dist/components/AndResult.vue.esm.js +0 -16
- package/dist/components/AndResult.vue.esm2.js +0 -4
- package/dist/components/AndResult.vue.js.js +0 -1
- package/dist/components/AndResult.vue.js2.js +0 -1
- package/dist/components/AndSelect.vue.d.ts +0 -18
- package/dist/components/AndSelect.vue.d.ts.map +0 -1
- package/dist/components/AndSelect.vue.esm.js +0 -7
- package/dist/components/AndSelect.vue.esm2.js +0 -128
- package/dist/components/AndSelect.vue.esm3.js +0 -1
- package/dist/components/AndSelect.vue.js.js +0 -1
- package/dist/components/AndSelect.vue.js2.js +0 -1
- package/dist/components/AndSelect.vue.js3.js +0 -1
- package/dist/components/AndSimpleForm.vue.d.ts +0 -45
- package/dist/components/AndSimpleForm.vue.d.ts.map +0 -1
- package/dist/components/AndSimpleForm.vue.esm.js +0 -7
- package/dist/components/AndSimpleForm.vue.esm2.js +0 -175
- package/dist/components/AndSimpleForm.vue.esm3.js +0 -1
- package/dist/components/AndSimpleForm.vue.js.js +0 -1
- package/dist/components/AndSimpleForm.vue.js2.js +0 -1
- package/dist/components/AndSimpleForm.vue.js3.js +0 -1
- package/dist/components/AndSlider.vue.d.ts +0 -16
- package/dist/components/AndSlider.vue.d.ts.map +0 -1
- package/dist/components/AndSlider.vue.esm.js +0 -7
- package/dist/components/AndSlider.vue.esm2.js +0 -19
- package/dist/components/AndSlider.vue.esm3.js +0 -1
- package/dist/components/AndSlider.vue.js.js +0 -1
- package/dist/components/AndSlider.vue.js2.js +0 -1
- package/dist/components/AndSlider.vue.js3.js +0 -1
- package/dist/components/AndStatistics.vue.d.ts +0 -16
- package/dist/components/AndStatistics.vue.d.ts.map +0 -1
- package/dist/components/AndStatistics.vue.esm.js +0 -19
- package/dist/components/AndStatistics.vue.esm2.js +0 -4
- package/dist/components/AndStatistics.vue.js.js +0 -1
- package/dist/components/AndStatistics.vue.js2.js +0 -1
- package/dist/components/AndStatisticsCountdown.vue.d.ts +0 -16
- package/dist/components/AndStatisticsCountdown.vue.d.ts.map +0 -1
- package/dist/components/AndStatisticsCountdown.vue.esm.js +0 -19
- package/dist/components/AndStatisticsCountdown.vue.esm2.js +0 -4
- package/dist/components/AndStatisticsCountdown.vue.js.js +0 -1
- package/dist/components/AndStatisticsCountdown.vue.js2.js +0 -1
- package/dist/components/AndSteps.vue.d.ts +0 -42
- package/dist/components/AndSteps.vue.d.ts.map +0 -1
- package/dist/components/AndSteps.vue.esm.js +0 -84
- package/dist/components/AndSteps.vue.esm2.js +0 -4
- package/dist/components/AndSteps.vue.js.js +0 -1
- package/dist/components/AndSteps.vue.js2.js +0 -1
- package/dist/components/AndSwitch.vue.d.ts +0 -26
- package/dist/components/AndSwitch.vue.d.ts.map +0 -1
- package/dist/components/AndSwitch.vue.esm.js +0 -49
- package/dist/components/AndSwitch.vue.esm2.js +0 -4
- package/dist/components/AndSwitch.vue.js.js +0 -1
- package/dist/components/AndSwitch.vue.js2.js +0 -1
- package/dist/components/AndTabPane.vue.d.ts +0 -23
- package/dist/components/AndTabPane.vue.d.ts.map +0 -1
- package/dist/components/AndTabPane.vue.esm.js +0 -21
- package/dist/components/AndTabPane.vue.esm2.js +0 -4
- package/dist/components/AndTabPane.vue.js.js +0 -1
- package/dist/components/AndTabPane.vue.js2.js +0 -1
- package/dist/components/AndTable.vue.d.ts +0 -43
- package/dist/components/AndTable.vue.d.ts.map +0 -1
- package/dist/components/AndTable.vue.esm.js +0 -7
- package/dist/components/AndTable.vue.esm2.js +0 -326
- package/dist/components/AndTable.vue.esm3.js +0 -1
- package/dist/components/AndTable.vue.js.js +0 -1
- package/dist/components/AndTable.vue.js2.js +0 -1
- package/dist/components/AndTable.vue.js3.js +0 -1
- package/dist/components/AndTableColumnFilter.vue.d.ts +0 -22
- package/dist/components/AndTableColumnFilter.vue.d.ts.map +0 -1
- package/dist/components/AndTableColumnFilter.vue.esm.js +0 -7
- package/dist/components/AndTableColumnFilter.vue.esm2.js +0 -102
- package/dist/components/AndTableColumnFilter.vue.esm3.js +0 -1
- package/dist/components/AndTableColumnFilter.vue.js.js +0 -1
- package/dist/components/AndTableColumnFilter.vue.js2.js +0 -1
- package/dist/components/AndTableColumnFilter.vue.js3.js +0 -1
- package/dist/components/AndTableFormat.d.ts +0 -56
- package/dist/components/AndTableFormat.d.ts.map +0 -1
- package/dist/components/AndTableFormat.esm.js +0 -118
- package/dist/components/AndTableFormat.js.js +0 -1
- package/dist/components/AndTabs.vue.d.ts +0 -41
- package/dist/components/AndTabs.vue.d.ts.map +0 -1
- package/dist/components/AndTabs.vue.esm.js +0 -113
- package/dist/components/AndTabs.vue.esm2.js +0 -4
- package/dist/components/AndTabs.vue.js.js +0 -1
- package/dist/components/AndTabs.vue.js2.js +0 -1
- package/dist/components/AndTag.vue.d.ts +0 -41
- package/dist/components/AndTag.vue.d.ts.map +0 -1
- package/dist/components/AndTag.vue.esm.js +0 -107
- package/dist/components/AndTag.vue.esm2.js +0 -4
- package/dist/components/AndTag.vue.js.js +0 -1
- package/dist/components/AndTag.vue.js2.js +0 -1
- package/dist/components/AndText.vue.d.ts +0 -33
- package/dist/components/AndText.vue.d.ts.map +0 -1
- package/dist/components/AndText.vue.esm.js +0 -106
- package/dist/components/AndText.vue.esm2.js +0 -4
- package/dist/components/AndText.vue.js.js +0 -1
- package/dist/components/AndText.vue.js2.js +0 -1
- package/dist/components/AndTimePicker.vue.d.ts +0 -16
- package/dist/components/AndTimePicker.vue.d.ts.map +0 -1
- package/dist/components/AndTimePicker.vue.esm.js +0 -19
- package/dist/components/AndTimePicker.vue.esm2.js +0 -4
- package/dist/components/AndTimePicker.vue.js.js +0 -1
- package/dist/components/AndTimePicker.vue.js2.js +0 -1
- package/dist/components/AndTimeline.vue.d.ts +0 -32
- package/dist/components/AndTimeline.vue.d.ts.map +0 -1
- package/dist/components/AndTimeline.vue.esm.js +0 -92
- package/dist/components/AndTimeline.vue.esm2.js +0 -4
- package/dist/components/AndTimeline.vue.js.js +0 -1
- package/dist/components/AndTimeline.vue.js2.js +0 -1
- package/dist/components/AndTitle.vue.d.ts +0 -23
- package/dist/components/AndTitle.vue.d.ts.map +0 -1
- package/dist/components/AndTitle.vue.esm.js +0 -24
- package/dist/components/AndTitle.vue.esm2.js +0 -4
- package/dist/components/AndTitle.vue.js.js +0 -1
- package/dist/components/AndTitle.vue.js2.js +0 -1
- package/dist/components/AndTree.vue.d.ts +0 -48
- package/dist/components/AndTree.vue.d.ts.map +0 -1
- package/dist/components/AndTree.vue.esm.js +0 -64
- package/dist/components/AndTree.vue.esm2.js +0 -4
- package/dist/components/AndTree.vue.js.js +0 -1
- package/dist/components/AndTree.vue.js2.js +0 -1
- package/dist/components/AndTreeSelect.vue.d.ts +0 -16
- package/dist/components/AndTreeSelect.vue.d.ts.map +0 -1
- package/dist/components/AndTreeSelect.vue.esm.js +0 -19
- package/dist/components/AndTreeSelect.vue.esm2.js +0 -4
- package/dist/components/AndTreeSelect.vue.js.js +0 -1
- package/dist/components/AndTreeSelect.vue.js2.js +0 -1
- package/dist/components/AndUpload.vue.d.ts +0 -28
- package/dist/components/AndUpload.vue.d.ts.map +0 -1
- package/dist/components/AndUpload.vue.esm.js +0 -7
- package/dist/components/AndUpload.vue.esm2.js +0 -185
- package/dist/components/AndUpload.vue.esm3.js +0 -1
- package/dist/components/AndUpload.vue.js.js +0 -1
- package/dist/components/AndUpload.vue.js2.js +0 -1
- package/dist/components/AndUpload.vue.js3.js +0 -1
- package/dist/components/TableColumnSetting.vue.d.ts +0 -20
- package/dist/components/TableColumnSetting.vue.d.ts.map +0 -1
- package/dist/components/TableColumnSetting.vue.esm.js +0 -135
- package/dist/components/TableColumnSetting.vue.esm2.js +0 -4
- package/dist/components/TableColumnSetting.vue.js.js +0 -1
- package/dist/components/TableColumnSetting.vue.js2.js +0 -1
- package/dist/components/UploadFile/src/useUpload.d.ts +0 -8
- package/dist/components/UploadFile/src/useUpload.d.ts.map +0 -1
- package/dist/components/UploadFile/src/useUpload.esm.js +0 -12
- package/dist/components/UploadFile/src/useUpload.js.js +0 -1
- package/dist/components/index.d.ts +0 -55
- package/dist/components/index.d.ts.map +0 -1
- package/dist/config/index.d.ts +0 -43
- package/dist/config/index.d.ts.map +0 -1
- package/dist/config/index.esm.js +0 -25
- package/dist/config/index.js.js +0 -1
- package/dist/index.js.js +0 -1
- package/dist/node_modules/.pnpm/@babel_runtime@7.26.0/node_modules/@babel/runtime/helpers/esm/extends.esm.js +0 -13
- package/dist/node_modules/.pnpm/@babel_runtime@7.26.0/node_modules/@babel/runtime/helpers/esm/extends.js.js +0 -1
- package/dist/node_modules/.pnpm/ant-design-vue@4.2.6_vue@3.5.12_typescript@5.3.3_/node_modules/ant-design-vue/es/calendar/locale/zh_CN.esm.js +0 -4
- package/dist/node_modules/.pnpm/ant-design-vue@4.2.6_vue@3.5.12_typescript@5.3.3_/node_modules/ant-design-vue/es/calendar/locale/zh_CN.js.js +0 -1
- package/dist/node_modules/.pnpm/ant-design-vue@4.2.6_vue@3.5.12_typescript@5.3.3_/node_modules/ant-design-vue/es/config-provider/context.esm.js +0 -7
- package/dist/node_modules/.pnpm/ant-design-vue@4.2.6_vue@3.5.12_typescript@5.3.3_/node_modules/ant-design-vue/es/config-provider/context.js.js +0 -1
- package/dist/node_modules/.pnpm/ant-design-vue@4.2.6_vue@3.5.12_typescript@5.3.3_/node_modules/ant-design-vue/es/date-picker/locale/zh_CN.esm.js +0 -22
- package/dist/node_modules/.pnpm/ant-design-vue@4.2.6_vue@3.5.12_typescript@5.3.3_/node_modules/ant-design-vue/es/date-picker/locale/zh_CN.js.js +0 -1
- package/dist/node_modules/.pnpm/ant-design-vue@4.2.6_vue@3.5.12_typescript@5.3.3_/node_modules/ant-design-vue/es/locale/zh_CN.esm.js +0 -140
- package/dist/node_modules/.pnpm/ant-design-vue@4.2.6_vue@3.5.12_typescript@5.3.3_/node_modules/ant-design-vue/es/locale/zh_CN.js.js +0 -1
- package/dist/node_modules/.pnpm/ant-design-vue@4.2.6_vue@3.5.12_typescript@5.3.3_/node_modules/ant-design-vue/es/time-picker/locale/zh_CN.esm.js +0 -7
- package/dist/node_modules/.pnpm/ant-design-vue@4.2.6_vue@3.5.12_typescript@5.3.3_/node_modules/ant-design-vue/es/time-picker/locale/zh_CN.js.js +0 -1
- package/dist/node_modules/.pnpm/ant-design-vue@4.2.6_vue@3.5.12_typescript@5.3.3_/node_modules/ant-design-vue/es/vc-pagination/locale/zh_CN.esm.js +0 -17
- package/dist/node_modules/.pnpm/ant-design-vue@4.2.6_vue@3.5.12_typescript@5.3.3_/node_modules/ant-design-vue/es/vc-pagination/locale/zh_CN.js.js +0 -1
- package/dist/node_modules/.pnpm/ant-design-vue@4.2.6_vue@3.5.12_typescript@5.3.3_/node_modules/ant-design-vue/es/vc-picker/locale/zh_CN.esm.js +0 -31
- package/dist/node_modules/.pnpm/ant-design-vue@4.2.6_vue@3.5.12_typescript@5.3.3_/node_modules/ant-design-vue/es/vc-picker/locale/zh_CN.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_DataView.esm.js +0 -6
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_DataView.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Hash.esm.js +0 -20
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Hash.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_ListCache.esm.js +0 -20
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_ListCache.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Map.esm.js +0 -6
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Map.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_MapCache.esm.js +0 -20
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_MapCache.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Promise.esm.js +0 -6
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Promise.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Set.esm.js +0 -6
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Set.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Stack.esm.js +0 -18
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Stack.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Symbol.esm.js +0 -5
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Symbol.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Uint8Array.esm.js +0 -5
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Uint8Array.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_WeakMap.esm.js +0 -6
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_WeakMap.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayEach.esm.js +0 -8
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayEach.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayFilter.esm.js +0 -10
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayFilter.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayLikeKeys.esm.js +0 -20
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayLikeKeys.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayPush.esm.js +0 -8
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayPush.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_assignValue.esm.js +0 -10
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_assignValue.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_assocIndexOf.esm.js +0 -10
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_assocIndexOf.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseAssign.esm.js +0 -8
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseAssign.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseAssignIn.esm.js +0 -8
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseAssignIn.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseAssignValue.esm.js +0 -12
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseAssignValue.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseClone.esm.js +0 -65
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseClone.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseCreate.esm.js +0 -17
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseCreate.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseGetAllKeys.esm.js +0 -9
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseGetAllKeys.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseGetTag.esm.js +0 -10
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseGetTag.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsArguments.esm.js +0 -9
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsArguments.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsMap.esm.js +0 -9
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsMap.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsNative.esm.js +0 -16
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsNative.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsSet.esm.js +0 -9
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsSet.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsTypedArray.esm.js +0 -12
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsTypedArray.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseKeys.esm.js +0 -14
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseKeys.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseKeysIn.esm.js +0 -15
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseKeysIn.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseTimes.esm.js +0 -8
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseTimes.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseUnary.esm.js +0 -8
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseUnary.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneArrayBuffer.esm.js +0 -8
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneArrayBuffer.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneBuffer.esm.js +0 -11
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneBuffer.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneDataView.esm.js +0 -8
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneDataView.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneRegExp.esm.js +0 -8
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneRegExp.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneSymbol.esm.js +0 -8
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneSymbol.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneTypedArray.esm.js +0 -8
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneTypedArray.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_copyArray.esm.js +0 -9
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_copyArray.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_copyObject.esm.js +0 -14
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_copyObject.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_copySymbols.esm.js +0 -8
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_copySymbols.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_copySymbolsIn.esm.js +0 -8
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_copySymbolsIn.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_coreJsData.esm.js +0 -5
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_coreJsData.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_defineProperty.esm.js +0 -11
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_defineProperty.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_freeGlobal.esm.js +0 -4
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_freeGlobal.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getAllKeys.esm.js +0 -9
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getAllKeys.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getAllKeysIn.esm.js +0 -9
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getAllKeysIn.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getMapData.esm.js +0 -8
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getMapData.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getNative.esm.js +0 -9
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getNative.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getPrototype.esm.js +0 -5
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getPrototype.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getRawTag.esm.js +0 -15
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getRawTag.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getSymbols.esm.js +0 -10
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getSymbols.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getSymbolsIn.esm.js +0 -12
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getSymbolsIn.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getTag.esm.js +0 -28
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getTag.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getValue.esm.js +0 -6
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getValue.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashClear.esm.js +0 -7
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashClear.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashDelete.esm.js +0 -7
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashDelete.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashGet.esm.js +0 -13
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashGet.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashHas.esm.js +0 -9
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashHas.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashSet.esm.js +0 -9
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashSet.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_initCloneArray.esm.js +0 -8
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_initCloneArray.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_initCloneByTag.esm.js +0 -42
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_initCloneByTag.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_initCloneObject.esm.js +0 -9
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_initCloneObject.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isIndex.esm.js +0 -8
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isIndex.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isKeyable.esm.js +0 -7
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isKeyable.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isMasked.esm.js +0 -11
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isMasked.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isPrototype.esm.js +0 -8
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isPrototype.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheClear.esm.js +0 -6
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheClear.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheDelete.esm.js +0 -12
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheDelete.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheGet.esm.js +0 -8
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheGet.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheHas.esm.js +0 -7
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheHas.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheSet.esm.js +0 -8
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheSet.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheClear.esm.js +0 -13
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheClear.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheDelete.esm.js +0 -8
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheDelete.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheGet.esm.js +0 -7
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheGet.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheHas.esm.js +0 -7
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheHas.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheSet.esm.js +0 -8
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheSet.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nativeCreate.esm.js +0 -5
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nativeCreate.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nativeKeys.esm.js +0 -5
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nativeKeys.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nativeKeysIn.esm.js +0 -10
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nativeKeysIn.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nodeUtil.esm.js +0 -11
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nodeUtil.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_objectToString.esm.js +0 -7
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_objectToString.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_overArg.esm.js +0 -8
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_overArg.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_root.esm.js +0 -5
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_root.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackClear.esm.js +0 -7
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackClear.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackDelete.esm.js +0 -7
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackDelete.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackGet.esm.js +0 -6
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackGet.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackHas.esm.js +0 -6
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackHas.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackSet.esm.js +0 -17
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackSet.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_toSource.esm.js +0 -17
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_toSource.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/cloneDeep.esm.js +0 -8
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/cloneDeep.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/eq.esm.js +0 -6
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/eq.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArguments.esm.js +0 -10
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArguments.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArray.esm.js +0 -4
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArray.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArrayLike.esm.js +0 -8
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArrayLike.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isBuffer.esm.js +0 -6
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isBuffer.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isFunction.esm.js +0 -12
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isFunction.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isLength.esm.js +0 -7
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isLength.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isMap.esm.js +0 -7
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isMap.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isObject.esm.js +0 -7
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isObject.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isObjectLike.esm.js +0 -6
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isObjectLike.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isSet.esm.js +0 -7
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isSet.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isTypedArray.esm.js +0 -7
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isTypedArray.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/keys.esm.js +0 -9
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/keys.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/keysIn.esm.js +0 -9
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/keysIn.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/stubArray.esm.js +0 -6
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/stubArray.js.js +0 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/stubFalse.esm.js +0 -6
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/stubFalse.js.js +0 -1
- package/dist/runtime/Running.d.ts +0 -7
- package/dist/runtime/Running.d.ts.map +0 -1
- package/dist/runtime/Running.esm.js +0 -39
- package/dist/runtime/Running.js.js +0 -1
- package/dist/runtime/index.d.ts +0 -2
- package/dist/runtime/index.d.ts.map +0 -1
- package/dist/runtime/index.esm.js +0 -6
- package/dist/runtime/index.js.js +0 -1
- package/dist/utils/auth.d.ts +0 -3
- package/dist/utils/auth.d.ts.map +0 -1
- package/dist/utils/auth.esm.js +0 -11
- package/dist/utils/auth.js.js +0 -1
- package/dist/utils/base.d.ts +0 -6
- package/dist/utils/base.d.ts.map +0 -1
- package/dist/utils/base.esm.js +0 -15
- package/dist/utils/base.js.js +0 -1
- package/dist/utils/dict.d.ts +0 -3
- package/dist/utils/dict.d.ts.map +0 -1
- package/dist/utils/dict.esm.js +0 -11
- package/dist/utils/dict.js.js +0 -1
- package/dist/utils/formatter.d.ts +0 -60
- package/dist/utils/formatter.d.ts.map +0 -1
- package/dist/utils/formatter.esm.js +0 -594
- package/dist/utils/formatter.js.js +0 -1
- package/dist/utils/index.d.ts +0 -7
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/is.d.ts +0 -6
- package/dist/utils/is.d.ts.map +0 -1
- package/dist/utils/is.esm.js +0 -10
- package/dist/utils/is.js.js +0 -1
- package/dist/utils/request.d.ts +0 -6
- package/dist/utils/request.d.ts.map +0 -1
- package/dist/utils/request.esm.js +0 -11
- package/dist/utils/request.js.js +0 -1
- package/dist/utils/runCommonUtils.d.ts +0 -73
- package/dist/utils/runCommonUtils.d.ts.map +0 -1
- package/dist/utils/runCommonUtils.esm.js +0 -112
- package/dist/utils/runCommonUtils.js.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/base/mountReactComponent.tsx","../src/base/store/storePathUtils.ts","../src/base/storeKeyUtils.ts","../src/base/store/useAndStore.ts","../src/base/CommandsUtils.ts","../src/base/actionParser.ts","../node_modules/async-validator/dist-web/index.js","../src/base/validationUtils.ts","../src/base/useFieldValidation.ts","../src/base/storePropsUtils.ts","../src/config/index.ts","../src/base/hooks/useApiService.ts","../src/utils/ReactFormatter.ts","../src/utils/resolveTokenColor.ts","../src/components/AndButton/index.tsx","../src/components/AndInput/index.tsx","../src/components/AndInputNumber/index.tsx","../src/components/AndInputArea/index.tsx","../src/components/AndInputPassword/index.tsx","../src/components/AndInputSearch/index.tsx","../src/components/AndSelect/index.tsx","../src/components/AndSwitch/index.tsx","../src/components/AndDatePicker/index.tsx","../src/components/AndTimePicker/index.tsx","../src/components/AndRangePicker/index.tsx","../src/components/AndRadio/index.tsx","../src/components/AndCheckbox/index.tsx","../src/components/AndRate/index.tsx","../src/components/AndSlider/index.tsx","../src/components/AndCascade/index.tsx","../src/components/AndTreeSelect/index.tsx","../src/components/AndUpload/index.tsx","../src/components/AndAutoComplete/index.tsx","../src/components/AndSimpleForm/index.tsx","../src/components/AndFormItem/index.tsx","../src/components/AndTransfer/index.tsx","../src/components/AndSegmented/index.tsx","../src/components/AndTable/hooks/useAutoScrollY.ts","../src/components/AndTable/renderers.tsx","../src/components/AndTable/ColumnSettingModal.tsx","../src/components/AndTable/index.tsx","../src/components/AndText/index.tsx","../src/components/AndTitle/index.tsx","../src/components/AndParagraph/index.tsx","../src/components/AndTabs/index.tsx","../src/components/AndTree/index.tsx","../src/components/AndTimeline/index.tsx","../src/components/AndSteps/index.tsx","../src/components/AndStatistics/index.tsx","../src/components/AndStatisticsCountdown/index.tsx","../src/components/AndCarousel/index.tsx","../src/components/AndImage/index.tsx","../src/components/AndImageGroup/index.tsx","../src/components/AndAvatar/index.tsx","../src/components/AndTag/index.tsx","../src/components/AndPagination/index.tsx","../src/components/AndBreadCrumb/index.tsx","../src/components/AndMenu/index.tsx","../src/components/AndCalendar/index.tsx","../src/components/AndBadge/index.tsx","../src/components/AndBadgeRibbon/index.tsx","../src/components/AndMasonry/index.tsx","../src/components/AndAlert/index.tsx","../src/components/AndModal/index.tsx","../src/components/AndDrawer/index.tsx","../src/components/AndResult/index.tsx","../src/components/AndCard/index.tsx","../src/components/AndDivider/index.tsx","../src/components/AndDropdown/index.tsx","../src/components/AndRow/index.tsx","../src/components/AndColumn/index.tsx","../src/components/AndContainer/index.tsx","../src/components/AndQRCode/index.tsx","../src/components/AndSplitter/index.tsx","../src/components/AndIterator/index.tsx","../src/components/AndIcon/index.tsx","../src/components/AndProductCategory/index.tsx","../src/components/AndDynamicContainer/index.tsx","../src/components/AndWatermark.tsx","../src/charts/base/BaseChart.tsx","../src/charts/AndVLine/index.tsx","../src/charts/AndVColumn/index.tsx","../src/charts/AndVPie/index.tsx","../src/charts/AndVArea/index.tsx","../src/charts/AndVDualAxes/index.tsx","../src/charts/AndVGauge/index.tsx","../src/charts/AndVLiquid/index.tsx","../src/charts/AndVBar/index.tsx"],"sourcesContent":["import React from 'react';\nimport { createRoot, Root } from 'react-dom/client';\nimport { ConfigProvider, theme } from 'antd';\nimport { StyleProvider, createCache } from '@ant-design/cssinjs';\nimport zhCN from 'antd/locale/zh_CN';\n\ninterface MountOptions {\n el: HTMLElement;\n component: React.ComponentType<any>;\n props?: Record<string, any>;\n customTheme?: 'light' | 'dark';\n /** 强制将样式注入到主文档而非 iframe(用于 traits 面板等主文档组件) */\n forMainDocument?: boolean;\n /** \n * 跳过卸载旧 Root (仅用于强制重置 DOM 等特殊场景)\n * 警告:可能导致 React Root 泄漏,仅在明确知晓 DOM 已被破坏时使用\n */\n skipUnmount?: boolean;\n}\n\n// 全局 Root 映射,支持组件卸载\nconst rootMap = new WeakMap<HTMLElement, Root>();\n// CSS Cache 映射,按 iframe document 缓存\nconst cacheMap = new WeakMap<Document, ReturnType<typeof createCache>>();\n\n// 标记是否已初始化\nlet initialized = false;\n\n/**\n * 初始化全局配置\n */\nexport const initReactMount = () => {\n if (initialized) return;\n initialized = true;\n};\n\n/**\n * 获取或创建 CSS cache\n */\nconst getOrCreateCache = (doc: Document) => {\n let cache = cacheMap.get(doc);\n if (!cache) {\n cache = createCache();\n cacheMap.set(doc, cache);\n }\n return cache;\n};\n\n/**\n * 清除指定 Document 的 CSS cache\n * 在 iframe 销毁时调用此函数,确保新 iframe 能够重新生成样式\n */\nexport const clearCssCache = (doc?: Document) => {\n if (doc) {\n cacheMap.delete(doc);\n }\n};\n\n/**\n * 挂载 React 组件到指定 DOM 元素\n * 用于在 GrapesJS Canvas 中动态渲染 React 组件\n * \n * 使用 StyleProvider 的 container 属性将 CSS-in-JS 样式注入到 iframe 的 head 中\n */\nexport const mountReactComponent = async ({\n el,\n component: Component,\n props = {},\n customTheme = 'light',\n forMainDocument = false,\n skipUnmount = false,\n}: MountOptions) => {\n // 确保初始化\n initReactMount();\n\n // 清理已存在的 Root\n const existingRoot = rootMap.get(el);\n if (existingRoot) {\n if (!skipUnmount) {\n try {\n existingRoot.unmount();\n } catch (e) {\n console.warn('[mountReactComponent] Unmount failed (benign if DOM was cleared):', e);\n }\n } else {\n // 如果跳过卸载 (用于强制重置),手动清除 DOM 上的 React 标记\n // 防止 createRoot 警告 \"You are calling createRoot() on a container...\"\n Object.keys(el).forEach((key) => {\n if (key.startsWith('__reactContainer') || key.startsWith('_reactRootContainer')) {\n try {\n delete (el as any)[key];\n } catch (e) {\n // ignore\n }\n }\n });\n }\n rootMap.delete(el);\n }\n\n // 创建新的 Root\n const root = createRoot(el);\n rootMap.set(el, root);\n\n // 样式注入策略:\n // GrapesJS 的 onRender 传入的 el 在渲染时还在主文档中\n // 所以我们使用全局引用来获取 iframe head\n \n // 获取全局 iframe head 引用 (由 UIDesigner.tsx canvas:frame:load 设置)\n const iframeHead = (window as any).__ANTD_CSSINJS_CONTAINER__ as HTMLElement | undefined;\n const iframeDoc = (window as any).__ANTD_IFRAME_DOC__ as Document | undefined;\n \n // 如果指定了 forMainDocument,强制使用主文档\n // 否则,如果 iframe 引用有效,使用 iframe head 和 iframe doc\n const isIframeValid = !forMainDocument && iframeHead && iframeDoc && iframeDoc.defaultView !== null;\n const container = isIframeValid ? iframeHead : window.document.head;\n \n // 关键:使用 iframe document 作为 cache key\n // 这样每个 iframe 有独立的 cache,effectStyles 会是新的\n // 如果 forMainDocument 为 true,使用主文档的 cache\n const cacheDoc = isIframeValid ? iframeDoc : window.document;\n const cache = getOrCreateCache(cacheDoc);\n\n\n\n // 获取全局主题配置\n const globalTheme = (window as any)['__GLS_COMPS__']?.theme;\n const finalTheme = globalTheme || customTheme;\n const algorithm =\n finalTheme === 'dark' ? theme.darkAlgorithm : theme.defaultAlgorithm;\n\n // 渲染函数 - 使用 StyleProvider 的 container 属性将样式注入到目标容器\n const renderComponent = (componentProps: Record<string, any>) => (\n <StyleProvider cache={cache} container={container} hashPriority=\"high\">\n <ConfigProvider\n locale={zhCN}\n theme={{ \n algorithm,\n cssVar: {\n key: 'antd-canvas', // 唯一标识符\n },\n hashed: false, // 禁用哈希类名,使用静态 CSS 中的选择器\n }}\n getPopupContainer={() => el}\n >\n <Component {...componentProps} />\n </ConfigProvider>\n </StyleProvider>\n );\n\n // 设置当前样式容器,让 monkey-patch 知道应该在哪个 document 创建 style 元素\n // 这个全局变量会被 UIDesigner.tsx 中的 createElement patch 检查\n (window as any).__CURRENT_STYLE_CONTAINER__ = container;\n\n // 渲染组件\n const isEditing = el.hasAttribute('editing');\n const finalProps = { ...props };\n if (isEditing && finalProps.develop === undefined) {\n finalProps.develop = true;\n }\n \n root.render(renderComponent(finalProps));\n\n // 返回控制接口\n return {\n root,\n unmount: () => {\n try {\n root.unmount();\n rootMap.delete(el);\n } catch (error) {\n console.error('[code-canvas-core] Failed to unmount component:', error);\n }\n },\n update: (newProps: Record<string, any>) => {\n // 更新时重新设置容器\n (window as any).__CURRENT_STYLE_CONTAINER__ = container;\n root.render(renderComponent(newProps));\n },\n };\n};\n\n/**\n * 清理所有已挂载的组件\n */\nexport const cleanupAllMounts = () => {\n console.info('[code-canvas-core] Cleanup called - components will be garbage collected');\n initialized = false;\n};\n\nexport default mountReactComponent;\n","/**\n * Store 路径解析与读写工具\n * 与 original UseStore 一致:支持 dataSet 数组下标(如 list[0])、dataSetField 多级路径(如 pagination.current、value[0].name)\n */\n\nexport type PathSegment = { type: 'array' | 'property'; key: string | number };\n\n/**\n * 解析 dataSet 名中的数组下标\n * 例如 \"to_deal_lst[0]\" → { baseName: \"to_deal_lst\", index: 0 }\n * \"sessionId_list\" → { baseName: \"sessionId_list\", index: null }\n */\nexport function parseArrayNotation(dataSetName: string): {\n baseName: string;\n index: number | null;\n} {\n const match = dataSetName.match(/^(.+)\\[(\\d+)\\]$/);\n if (match) {\n return {\n baseName: match[1],\n index: parseInt(match[2], 10),\n };\n }\n return {\n baseName: dataSetName,\n index: null,\n };\n}\n\n/**\n * 解析多层级路径为段列表\n * 例如 \"pagination.current\" → [{ type: 'property', key: 'pagination' }, { type: 'property', key: 'current' }]\n * \"value[0].name\" → [{ type: 'property', key: 'value' }, { type: 'array', key: 0 }, { type: 'property', key: 'name' }]\n */\nexport function parseNestedPath(path: string): PathSegment[] {\n if (!path || typeof path !== 'string') return [];\n\n const result: PathSegment[] = [];\n const parts = path\n .split('.')\n .flatMap((part) => {\n const arrayAccessMatch = part.match(/^([^\\[]+)(\\[\\d+\\])(.*)$/);\n if (arrayAccessMatch) {\n const list = [arrayAccessMatch[1]];\n let remaining = arrayAccessMatch[2] + arrayAccessMatch[3];\n let m: RegExpMatchArray | null;\n while ((m = remaining.match(/^\\[(\\d+)\\](.*)$/))) {\n list.push(`[${m[1]}]`);\n remaining = m[2];\n }\n if (remaining) list.push(remaining);\n return list;\n }\n return [part];\n });\n\n for (const part of parts) {\n if (part.startsWith('[') && part.endsWith(']')) {\n const index = parseInt(part.slice(1, -1), 10);\n if (!Number.isNaN(index)) result.push({ type: 'array', key: index });\n } else if (part) {\n result.push({ type: 'property', key: part });\n }\n }\n\n return result;\n}\n\n/**\n * 按路径安全获取嵌套值\n */\nexport function getNestedValue(\n obj: any,\n path: PathSegment[]\n): any {\n if (path.length === 0) return obj;\n\n let current: any = obj;\n for (const segment of path) {\n if (current === undefined || current === null) return undefined;\n if (segment.type === 'array') {\n if (!Array.isArray(current)) return undefined;\n current = current[segment.key as number];\n } else {\n current = current[segment.key];\n }\n }\n return current;\n}\n\n/**\n * 按路径安全设置嵌套值,返回新对象/数组(不修改原对象)\n */\nexport function setNestedValue(\n obj: any,\n path: PathSegment[],\n value: any\n): any {\n if (!path.length) return value;\n\n // 浅拷贝根节点\n const result = Array.isArray(obj) ? [...obj] : { ...obj };\n let current: any = result;\n\n // 遍历中间层:每层都做浅拷贝,保证不会修改被 immer freeze 的旧对象\n for (let i = 0; i < path.length - 1; i++) {\n const segment = path[i];\n const nextSegment = path[i + 1];\n const key = segment.key;\n\n let child = current[key];\n if (child === undefined || child === null) {\n child = nextSegment.type === 'array' ? [] : {};\n } else if (nextSegment.type === 'array' && !Array.isArray(child)) {\n child = [];\n } else if (nextSegment.type === 'property' && Array.isArray(child)) {\n child = Object.fromEntries(\n (child as any[]).map((v, idx) => [String(idx), v]).filter(([, v]) => v !== undefined)\n );\n } else {\n // 关键:浅拷贝中间节点,避免修改 frozen 对象\n child = Array.isArray(child) ? [...child] : { ...child };\n }\n current[key] = child;\n current = child;\n }\n\n // 处理最后一个 segment:直接赋值(current 已是拷贝,可安全写入)\n const lastSegment = path[path.length - 1];\n current[lastSegment.key] = value;\n\n return result;\n}\n","/**\n * Store 绑定 key 工具:统一使用 sessionId 前缀,避免全局命名冲突\n */\n\n/**\n * 获取 dataSet 的 store key。\n * 有 sessionId 时用 sessionId_dataSet;否则退回 dataSet(兼容无 sessionId 场景)。\n */\nexport function getDataSetStoreKey(\n sessionId: string | undefined,\n dataSet: string | undefined\n): string | undefined {\n if (!dataSet) return undefined;\n return sessionId ? `${sessionId}_${dataSet}` : dataSet;\n}\n\n/**\n * 获取校验结果 store 的 key(validateStore)。\n * 有 sessionId 时用 sessionId_dataSet_validate;否则用 dataSet_validate。\n */\nexport function getValidateStoreKey(\n sessionId: string | undefined,\n dataSet: string | undefined\n): string | undefined {\n if (!dataSet) return undefined;\n return sessionId ? `${sessionId}_${dataSet}_validate` : `${dataSet}_validate`;\n}\n","import { create, StoreApi, UseBoundStore } from \"zustand\";\nimport { subscribeWithSelector } from \"zustand/middleware\";\nimport { immer } from \"zustand/middleware/immer\";\n\nimport { useMemo } from \"react\";\nimport {\n parseArrayNotation,\n parseNestedPath,\n getNestedValue,\n setNestedValue,\n} from \"./storePathUtils\";\nimport { getValidateStoreKey } from \"../storeKeyUtils\";\n\n/**\n * And Store 状态接口\n * 替换原有的 Pinia andStore\n */\nexport interface AndStoreState {\n // 数据集存储: { [dataSetName]: { [field]: value } }\n dataSets: Record<string, Record<string, any>>;\n\n // 命令队列存储: { [sessionId]: Command[] }\n commandQueues: Record<string, CommandItem[]>;\n\n // Props 配置存储: { [sessionId_props]: { [componentId]: props } }\n propsStore: Record<string, Record<string, any>>;\n\n // 校验结果存储(与 original 一致): { [sessionId_dataSet_validate]: { [dataSetField]: errorMessage } }\n validateStore: Record<string, Record<string, string>>;\n}\n\nexport interface CommandItem {\n actionName: string;\n arg?: any;\n timestamp: number;\n}\n\nexport interface AndStoreActions {\n // 数据集操作(append 默认 true:与已有值浅合并,只更新传入的 key;false 则整体替换)\n // field 传空字符串 '' 时:getDataSet 返回整块对象,setDataSet 操作整块对象,与 getItem/updateItem 语义一致\n setDataSet: (name: string, field: string, value: any, append?: boolean) => void;\n getDataSet: (name: string, field: string) => any;\n setDataSetBatch: (name: string, data: Record<string, any>) => void;\n clearDataSet: (name: string) => void;\n\n // 命令队列操作\n addCommand: (sessionId: string, command: CommandItem) => void;\n popCommand: (sessionId: string) => CommandItem | undefined;\n clearCommands: (sessionId: string) => void;\n getCommands: (sessionId: string) => CommandItem[];\n\n // Props 操作\n setProps: (sessionId: string, componentId: string, props: any) => void;\n getProps: (sessionId: string, componentId: string) => any;\n\n // 校验结果操作(key 由 getValidateStoreKey(sessionId, dataSet) 生成,考虑 sessionId 避免冲突)\n setValidateResult: (sessionId: string | undefined, dataSet: string, dataSetField: string, message: string) => void;\n getValidateResult: (sessionId: string | undefined, dataSet: string, dataSetField: string) => string;\n getValidateResults: (sessionId: string | undefined, dataSet: string) => Record<string, string>;\n\n // 全局操作\n reset: () => void;\n}\n\nexport type AndStore = AndStoreState & AndStoreActions;\n\nconst initialState: AndStoreState = {\n dataSets: {},\n commandQueues: {},\n propsStore: {},\n validateStore: {},\n};\n\n/**\n * Zustand Store - 替换 Pinia 的 useItemStore\n */\nexport const useAndStore: UseBoundStore<StoreApi<AndStore>> =\n create<AndStore>()(\n subscribeWithSelector(\n immer((set, get) => ({\n ...initialState,\n\n // ============ 数据集操作(支持 name[index] 与 field 多级路径;append 默认 true 为合并更新) ============\n setDataSet: (name, field, value, append = true) =>\n set((state) => {\n if (!name) return;\n const { baseName, index } = parseArrayNotation(name);\n const fieldPath = field ? parseNestedPath(field) : [];\n const isMerge = append && typeof value === \"object\" && value !== null && !Array.isArray(value);\n\n const mergeIfNeeded = (existing: any): any =>\n isMerge && existing != null && typeof existing === \"object\" && !Array.isArray(existing)\n ? { ...existing, ...value }\n : value;\n\n // 确保 baseName 在 dataSets 中存在\n if (!state.dataSets[baseName]) state.dataSets[baseName] = {};\n\n if (index !== null) {\n // name 带数组下标,如 \"list[0]\"\n const slice = state.dataSets[baseName];\n let arr = slice.value;\n if (!Array.isArray(arr)) arr = [];\n const element = arr[index];\n const valueToSet = fieldPath.length === 0 ? mergeIfNeeded(element) : mergeIfNeeded(getNestedValue(element ?? {}, fieldPath));\n const newElement =\n fieldPath.length === 0\n ? valueToSet\n : setNestedValue(element ?? {}, fieldPath, valueToSet);\n const newArr = [...arr];\n newArr[index] = newElement;\n state.dataSets[baseName] = { ...slice, value: newArr };\n } else if (fieldPath.length === 0) {\n // 无 field:整块替换或合并\n state.dataSets[baseName] = mergeIfNeeded(state.dataSets[baseName]);\n } else {\n // 有 field(可能多级):直接在 immer draft 上按路径 mutate\n let target: any = state.dataSets[baseName];\n for (let i = 0; i < fieldPath.length - 1; i++) {\n const seg = fieldPath[i];\n const nextSeg = fieldPath[i + 1];\n let child = target[seg.key];\n if (child === undefined || child === null) {\n target[seg.key] = nextSeg.type === 'array' ? [] : {};\n child = target[seg.key];\n }\n target = child;\n }\n const lastSeg = fieldPath[fieldPath.length - 1];\n const existing = target[lastSeg.key];\n target[lastSeg.key] = mergeIfNeeded(existing);\n }\n }),\n\n getDataSet: (name, field) => {\n if (!name) return undefined;\n const ds = get().dataSets;\n const { baseName, index } = parseArrayNotation(name);\n const root = ds[baseName];\n\n if (index !== null) {\n const arr = root?.value;\n if (!Array.isArray(arr) || arr[index] === undefined)\n return undefined;\n const item = arr[index];\n if (!field) return item;\n return getNestedValue(item, parseNestedPath(field));\n }\n\n if (!root) return undefined;\n if (!field) return root;\n return getNestedValue(root, parseNestedPath(field));\n },\n\n setDataSetBatch: (name, data) =>\n set((state) => {\n state.dataSets[name] = {\n ...state.dataSets[name],\n ...data,\n };\n }),\n\n clearDataSet: (name) =>\n set((state) => {\n delete state.dataSets[name];\n }),\n\n // ============ 命令队列操作 ============\n addCommand: (sessionId, command) =>\n set((state) => {\n if (!state.commandQueues[sessionId]) {\n state.commandQueues[sessionId] = [];\n }\n state.commandQueues[sessionId].push(command);\n }),\n\n popCommand: (sessionId) => {\n const queue = get().commandQueues[sessionId];\n if (queue && queue.length > 0) {\n const first = queue[0];\n set((state) => {\n state.commandQueues[sessionId] =\n state.commandQueues[sessionId].slice(1);\n });\n return first;\n }\n return undefined;\n },\n\n clearCommands: (sessionId) =>\n set((state) => {\n state.commandQueues[sessionId] = [];\n }),\n\n getCommands: (sessionId) => get().commandQueues[sessionId] || [],\n\n // ============ Props 操作 ============\n setProps: (sessionId, componentId, props) =>\n set((state) => {\n const key = `${sessionId}_props`;\n if (!state.propsStore[key]) {\n state.propsStore[key] = {};\n }\n state.propsStore[key][componentId] = props;\n }),\n\n getProps: (sessionId, componentId) => {\n const key = `${sessionId}_props`;\n return get().propsStore[key]?.[componentId];\n },\n\n // ============ 校验结果(key 使用 getValidateStoreKey,考虑 sessionId) ============\n setValidateResult: (sessionId, dataSet, dataSetField, message) =>\n set((state) => {\n const key = getValidateStoreKey(sessionId, dataSet);\n if (!key) return;\n if (!state.validateStore[key]) state.validateStore[key] = {};\n state.validateStore[key][dataSetField] = message;\n }),\n\n getValidateResult: (sessionId, dataSet, dataSetField) => {\n const key = getValidateStoreKey(sessionId, dataSet);\n return key ? get().validateStore[key]?.[dataSetField] ?? \"\" : \"\";\n },\n\n getValidateResults: (sessionId, dataSet) => {\n const key = getValidateStoreKey(sessionId, dataSet);\n return key ? get().validateStore[key] ?? {} : {};\n },\n\n // ============ 全局操作 ============\n reset: () => set(initialState),\n }))\n )\n );\n\n/**\n * 兼容层:模拟原 useStore 的行为\n * 用于现有组件的渐进式迁移\n */\nexport function useStore(config: { dataSet?: string; dataSetField?: string }) {\n const { dataSet, dataSetField } = config;\n\n const setValue = useAndStore((state) => state.setDataSet);\n\n return {\n get value() {\n return useAndStore.getState().dataSets[dataSet || \"\"]?.[\n dataSetField || \"\"\n ];\n },\n set value(newValue: any) {\n if (dataSet && dataSetField) {\n setValue(dataSet, dataSetField, newValue);\n }\n },\n };\n}\n\n/**\n * 兼容层:通过名称获取整个数据集\n */\nexport function useStoreByName(name: string) {\n const setDataSetBatch = useAndStore((state) => state.setDataSetBatch);\n\n return {\n get value() {\n return useAndStore.getState().dataSets[name];\n },\n set value(newValue: any) {\n setDataSetBatch(name, newValue);\n },\n };\n}\n\n/**\n * Hook: 添加命令到队列\n */\nexport function useAddCommand() {\n return useAndStore((state) => state.addCommand);\n}\n\n/**\n * Hook: 获取并消费命令\n */\nexport function usePopCommand() {\n return useAndStore((state) => state.popCommand);\n}\n\n/**\n * 按 dataSetKey + dataSetField 从 store 取数组,并订阅对应块以响应更新。\n * 支持多级 dataSetField(如 value、value[0].rows)和 dataSetKey 带下标(如 list[0])。\n * dataSetField 为空时传 '',与 getDataSet/setDataSet 一致:读整块对象;再按「整块为数组」或「.value 为数组」规范为数组。\n */\nexport function useStoreData(dataSetKey: string | undefined, dataSetField: string | undefined): any[] {\n const chunk = useAndStore((s) => {\n if (!dataSetKey) return undefined;\n const storeKey = parseArrayNotation(dataSetKey).baseName;\n return s.dataSets[storeKey];\n });\n const getDataSet = useAndStore((s) => s.getDataSet);\n return useMemo(() => {\n if (!dataSetKey) return [];\n const field = dataSetField && String(dataSetField).trim() !== '' ? dataSetField : '';\n const data = getDataSet(dataSetKey, field);\n if (Array.isArray(data)) return data;\n if (data != null && typeof data === 'object' && Array.isArray(data.value)) return data.value;\n return [];\n }, [chunk, dataSetKey, dataSetField, getDataSet]);\n}\n\n/**\n * 兼容层:useItemStore - 模拟 Vue/Pinia 的 useItemStore\n * 用于生成的 React 代码、Extend 等。\n * 不订阅 state.dataSets,避免任意 setDataSet 导致本组件重渲染(解决输入延迟);\n * items / getItem 通过 getState() 读最新值,子组件若需响应 store 变化请用 useAndStore(selector) 订阅具体 key。\n *\n * 写入推荐用 setDataSet(name, field, value),可完全替代 updateItem:\n * - setDataSet(key, '', array) 等价于 updateItem(key, array)(field 空为整块对象)\n * - setDataSet 支持多级 field(如 'pagination.current')、name 下标(如 list[0]),更全面\n * - updateItem 保留用于兼容旧代码\n */\nexport function useItemStore() {\n const setDataSetBatch = useAndStore((state) => state.setDataSetBatch);\n const setDataSet = useAndStore((state) => state.setDataSet);\n const getDataSet = useAndStore((state) => state.getDataSet);\n const getState = useAndStore.getState;\n\n return {\n get items() {\n const dataSets = getState().dataSets;\n return new Proxy(dataSets, {\n get(target, prop: string) {\n return target[prop] || {};\n },\n });\n },\n getDataSet,\n setDataSet,\n updateItem: (key: string, value: any) => {\n const payload =\n value !== null && typeof value === \"object\" && !Array.isArray(value)\n ? value\n : { value };\n setDataSetBatch(key, payload);\n },\n getItem: (key: string) => {\n return getState().dataSets[key] || {};\n },\n };\n}\n\n/**\n * 兼容层:useCommandsStore - 模拟 Vue/Pinia 的 useCommandsStore\n * @param sessionId 会话 ID\n */\nexport function useCommandsStore(sessionId: string) {\n const addCommand = useAndStore((state) => state.addCommand);\n const popCommand = useAndStore((state) => state.popCommand);\n const getCommands = useAndStore((state) => state.getCommands);\n const clearCommands = useAndStore((state) => state.clearCommands);\n\n return {\n commands: getCommands(sessionId),\n addCommand: (actionName: string, arg: any) => {\n addCommand(sessionId, {\n actionName,\n arg,\n timestamp: Date.now(),\n });\n },\n popCommand: () => popCommand(sessionId),\n clearCommands: () => clearCommands(sessionId),\n };\n}\n\nexport default useAndStore;\n","/**\n * CommandsUtils - React 版命令监听工具\n * 类似 Vue 版本的 watchCommands,监听命令队列并执行函数\n */\n\nimport { useAndStore } from \"./store/useAndStore\";\n\n/**\n * 命令项接口\n */\nexport interface CommandItem {\n actionName: string;\n arg?: any;\n timestamp: number;\n}\n\n/**\n * 监听命令队列的通用函数\n * @param _store - store 实例(从 useItemStore 获取)\n * @param sessionId - 会话ID\n * @param context - 执行上下文,包含可调用的函数\n * @returns 取消订阅函数\n */\nexport function watchCommands(\n _store: any,\n sessionId: string,\n context: Record<string, (...args: any[]) => void> = {}\n): () => void {\n // 使用 subscribeWithSelector 监听特定 slice\n // selector: 只选出当前 session 的命令队列\n // listener: 仅当队列引用发生变化时触发\n // @ts-ignore - 忽略 TS 类型检查,因为 useAndStore 类型定义未包含 subscribeWithSelector\n const unsubscribe = (useAndStore as any).subscribe(\n (state: any) => state.commandQueues[sessionId],\n (queue: CommandItem[]) => {\n if (queue && queue.length > 0) {\n // 复制队列,避免在执行过程中被修改\n const commandsToExecute = [...queue];\n const executedCommands: CommandItem[] = [];\n\n // 逐个执行命令\n commandsToExecute.forEach((item: CommandItem) => {\n try {\n // 从传入的上下文中查找函数\n const func = context[item.actionName];\n if (typeof func === \"function\") {\n func(item.arg);\n } else {\n console.warn(\n `[watchCommands] Function not found: ${item.actionName}`\n );\n }\n executedCommands.push(item);\n } catch (error) {\n console.error(\"[watchCommands] 命令执行失败:\", item, error);\n // 即使执行失败,也标记为已执行,避免无限重试\n executedCommands.push(item);\n }\n });\n\n // 一次性清空命令队列\n if (executedCommands.length > 0) {\n console.log(\"[watchCommands] Clearing command queue after execution\");\n useAndStore.getState().clearCommands(sessionId);\n }\n }\n }\n );\n\n return unsubscribe;\n}\n\n/**\n * 创建一个绑定了模块上下文的 watchCommands 函数\n * @param getModuleExports - 获取当前模块导出对象的函数(支持延迟获取)\n * @returns 绑定了上下文的 watchCommands 函数\n */\nexport function createWatchCommands(\n getModuleExports: () => Record<string, (...args: any[]) => void>\n) {\n return function (store: any, sessionId: string): () => void {\n // 延迟获取模块导出,避免函数声明顺序问题\n const moduleExports = getModuleExports();\n return watchCommands(store, sessionId, moduleExports);\n };\n}\n","/**\n * 动作解析器 - 用于解析组件配置中的动作字符串\n * 支持多种参数格式:@value, @dataSet, 字符串, 数字等\n */\n\nexport interface ParsedAction {\n actionName: string;\n arg: any;\n}\n\n/**\n * 解析动作字符串的通用函数\n * @param actionString 动作字符串,如 \"updateValue(@value, @dataSet)\" 或 \"submit\"\n * @param contextValue 上下文值,通常是事件触发时的值\n * @param contextProps 上下文属性对象,用于解析 @ 开头的参数\n * @returns 解析后的动作对象\n */\nexport function parseAction(\n actionString: string | undefined,\n contextValue: any = null,\n contextProps: Record<string, any> = {}\n): ParsedAction {\n if (!actionString) {\n return { actionName: '', arg: null };\n }\n\n // 匹配函数名和参数部分,如 \"updateValue(@value, @dataSet)\" -> [\"updateValue\", \"@value, @dataSet\"]\n const match = actionString.match(/^([^(]+)\\(([^)]*)\\)$/);\n if (!match) {\n // 如果没有参数,直接返回动作名和上下文值\n return { actionName: actionString, arg: contextValue };\n }\n\n const actionName = match[1].trim();\n const argsString = match[2].trim();\n\n if (!argsString) {\n // 如果参数部分为空,返回动作名和上下文值\n return { actionName, arg: contextValue };\n }\n\n // 解析参数,支持多个参数用逗号分隔\n const args = argsString.split(',').map(arg => {\n const trimmedArg = arg.trim();\n\n // 处理 @value 特殊参数(上下文值)\n if (trimmedArg === '@value') {\n return contextValue;\n }\n\n // 处理 @ 开头的参数(从 contextProps 中获取)\n if (trimmedArg.startsWith('@')) {\n const dataSetKey = trimmedArg.substring(1);\n return contextProps[dataSetKey];\n }\n\n // 处理字符串参数(去掉引号)\n if ((trimmedArg.startsWith('\"') && trimmedArg.endsWith('\"')) || \n (trimmedArg.startsWith(\"'\") && trimmedArg.endsWith(\"'\"))) {\n return trimmedArg.slice(1, -1);\n }\n\n // 处理数字参数\n if (!isNaN(Number(trimmedArg))) {\n return Number(trimmedArg);\n }\n\n // 其他情况直接返回\n return trimmedArg;\n });\n\n // 如果只有一个参数,直接返回该参数;否则返回数组\n const arg = args.length === 1 ? args[0] : args;\n\n return { actionName, arg };\n}\n\n/**\n * 解析变更动作的便捷函数\n * @param changeAction 变更动作字符串\n * @param value 变更的值\n * @param props 组件属性对象\n * @returns 解析后的动作对象\n */\nexport function parseChangeAction(\n changeAction: string | undefined,\n value: any,\n props: Record<string, any> = {}\n): ParsedAction {\n return parseAction(changeAction, value, props);\n}\n\n/**\n * 解析点击动作的便捷函数\n * @param clickAction 点击动作字符串\n * @param props 组件属性对象\n * @returns 解析后的动作对象\n */\nexport function parseClickAction(\n clickAction: string | undefined,\n props: Record<string, any> = {}\n): ParsedAction {\n return parseAction(clickAction, null, props);\n}\n\n/**\n * 解析查询动作的便捷函数\n * @param queryAction 查询动作字符串\n * @param props 组件属性对象\n * @returns 解析后的动作对象\n */\nexport function parseQueryAction(\n queryAction: string | undefined,\n props: Record<string, any> = {}\n): ParsedAction {\n return parseAction(queryAction, null, props);\n}\n\n/**\n * 创建命令对象的通用函数\n * @param actionName 动作名称\n * @param arg 动作参数\n * @returns 命令对象\n */\nexport function createCommand(actionName: string, arg: any): {\n actionName: string;\n arg: any;\n timestamp: number;\n} {\n return {\n actionName,\n arg,\n timestamp: Date.now()\n };\n}\n\n","function _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n\n _setPrototypeOf(subClass, superClass);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}\n\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction _construct(Parent, args, Class) {\n if (_isNativeReflectConstruct()) {\n _construct = Reflect.construct.bind();\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) _setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}\n\nfunction _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\n\nfunction _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !_isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return _construct(Class, arguments, _getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return _setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n}\n\n/* eslint no-console:0 */\nvar formatRegExp = /%[sdj%]/g;\nvar warning = function warning() {}; // don't print warning message when in production env or node runtime\n\nif (typeof process !== 'undefined' && process.env && process.env.NODE_ENV !== 'production' && typeof window !== 'undefined' && typeof document !== 'undefined') {\n warning = function warning(type, errors) {\n if (typeof console !== 'undefined' && console.warn && typeof ASYNC_VALIDATOR_NO_WARNING === 'undefined') {\n if (errors.every(function (e) {\n return typeof e === 'string';\n })) {\n console.warn(type, errors);\n }\n }\n };\n}\n\nfunction convertFieldsError(errors) {\n if (!errors || !errors.length) return null;\n var fields = {};\n errors.forEach(function (error) {\n var field = error.field;\n fields[field] = fields[field] || [];\n fields[field].push(error);\n });\n return fields;\n}\nfunction format(template) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var i = 0;\n var len = args.length;\n\n if (typeof template === 'function') {\n return template.apply(null, args);\n }\n\n if (typeof template === 'string') {\n var str = template.replace(formatRegExp, function (x) {\n if (x === '%%') {\n return '%';\n }\n\n if (i >= len) {\n return x;\n }\n\n switch (x) {\n case '%s':\n return String(args[i++]);\n\n case '%d':\n return Number(args[i++]);\n\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n\n break;\n\n default:\n return x;\n }\n });\n return str;\n }\n\n return template;\n}\n\nfunction isNativeStringType(type) {\n return type === 'string' || type === 'url' || type === 'hex' || type === 'email' || type === 'date' || type === 'pattern';\n}\n\nfunction isEmptyValue(value, type) {\n if (value === undefined || value === null) {\n return true;\n }\n\n if (type === 'array' && Array.isArray(value) && !value.length) {\n return true;\n }\n\n if (isNativeStringType(type) && typeof value === 'string' && !value) {\n return true;\n }\n\n return false;\n}\n\nfunction asyncParallelArray(arr, func, callback) {\n var results = [];\n var total = 0;\n var arrLength = arr.length;\n\n function count(errors) {\n results.push.apply(results, errors || []);\n total++;\n\n if (total === arrLength) {\n callback(results);\n }\n }\n\n arr.forEach(function (a) {\n func(a, count);\n });\n}\n\nfunction asyncSerialArray(arr, func, callback) {\n var index = 0;\n var arrLength = arr.length;\n\n function next(errors) {\n if (errors && errors.length) {\n callback(errors);\n return;\n }\n\n var original = index;\n index = index + 1;\n\n if (original < arrLength) {\n func(arr[original], next);\n } else {\n callback([]);\n }\n }\n\n next([]);\n}\n\nfunction flattenObjArr(objArr) {\n var ret = [];\n Object.keys(objArr).forEach(function (k) {\n ret.push.apply(ret, objArr[k] || []);\n });\n return ret;\n}\n\nvar AsyncValidationError = /*#__PURE__*/function (_Error) {\n _inheritsLoose(AsyncValidationError, _Error);\n\n function AsyncValidationError(errors, fields) {\n var _this;\n\n _this = _Error.call(this, 'Async Validation Error') || this;\n _this.errors = errors;\n _this.fields = fields;\n return _this;\n }\n\n return AsyncValidationError;\n}( /*#__PURE__*/_wrapNativeSuper(Error));\nfunction asyncMap(objArr, option, func, callback, source) {\n if (option.first) {\n var _pending = new Promise(function (resolve, reject) {\n var next = function next(errors) {\n callback(errors);\n return errors.length ? reject(new AsyncValidationError(errors, convertFieldsError(errors))) : resolve(source);\n };\n\n var flattenArr = flattenObjArr(objArr);\n asyncSerialArray(flattenArr, func, next);\n });\n\n _pending[\"catch\"](function (e) {\n return e;\n });\n\n return _pending;\n }\n\n var firstFields = option.firstFields === true ? Object.keys(objArr) : option.firstFields || [];\n var objArrKeys = Object.keys(objArr);\n var objArrLength = objArrKeys.length;\n var total = 0;\n var results = [];\n var pending = new Promise(function (resolve, reject) {\n var next = function next(errors) {\n results.push.apply(results, errors);\n total++;\n\n if (total === objArrLength) {\n callback(results);\n return results.length ? reject(new AsyncValidationError(results, convertFieldsError(results))) : resolve(source);\n }\n };\n\n if (!objArrKeys.length) {\n callback(results);\n resolve(source);\n }\n\n objArrKeys.forEach(function (key) {\n var arr = objArr[key];\n\n if (firstFields.indexOf(key) !== -1) {\n asyncSerialArray(arr, func, next);\n } else {\n asyncParallelArray(arr, func, next);\n }\n });\n });\n pending[\"catch\"](function (e) {\n return e;\n });\n return pending;\n}\n\nfunction isErrorObj(obj) {\n return !!(obj && obj.message !== undefined);\n}\n\nfunction getValue(value, path) {\n var v = value;\n\n for (var i = 0; i < path.length; i++) {\n if (v == undefined) {\n return v;\n }\n\n v = v[path[i]];\n }\n\n return v;\n}\n\nfunction complementError(rule, source) {\n return function (oe) {\n var fieldValue;\n\n if (rule.fullFields) {\n fieldValue = getValue(source, rule.fullFields);\n } else {\n fieldValue = source[oe.field || rule.fullField];\n }\n\n if (isErrorObj(oe)) {\n oe.field = oe.field || rule.fullField;\n oe.fieldValue = fieldValue;\n return oe;\n }\n\n return {\n message: typeof oe === 'function' ? oe() : oe,\n fieldValue: fieldValue,\n field: oe.field || rule.fullField\n };\n };\n}\nfunction deepMerge(target, source) {\n if (source) {\n for (var s in source) {\n if (source.hasOwnProperty(s)) {\n var value = source[s];\n\n if (typeof value === 'object' && typeof target[s] === 'object') {\n target[s] = _extends({}, target[s], value);\n } else {\n target[s] = value;\n }\n }\n }\n }\n\n return target;\n}\n\nvar required$1 = function required(rule, value, source, errors, options, type) {\n if (rule.required && (!source.hasOwnProperty(rule.field) || isEmptyValue(value, type || rule.type))) {\n errors.push(format(options.messages.required, rule.fullField));\n }\n};\n\n/**\n * Rule for validating whitespace.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\n\nvar whitespace = function whitespace(rule, value, source, errors, options) {\n if (/^\\s+$/.test(value) || value === '') {\n errors.push(format(options.messages.whitespace, rule.fullField));\n }\n};\n\n// https://github.com/kevva/url-regex/blob/master/index.js\nvar urlReg;\nvar getUrlRegex = (function () {\n if (urlReg) {\n return urlReg;\n }\n\n var word = '[a-fA-F\\\\d:]';\n\n var b = function b(options) {\n return options && options.includeBoundaries ? \"(?:(?<=\\\\s|^)(?=\" + word + \")|(?<=\" + word + \")(?=\\\\s|$))\" : '';\n };\n\n var v4 = '(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)){3}';\n var v6seg = '[a-fA-F\\\\d]{1,4}';\n var v6 = (\"\\n(?:\\n(?:\" + v6seg + \":){7}(?:\" + v6seg + \"|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8\\n(?:\" + v6seg + \":){6}(?:\" + v4 + \"|:\" + v6seg + \"|:)| // 1:2:3:4:5:6:: 1:2:3:4:5:6::8 1:2:3:4:5:6::8 1:2:3:4:5:6::1.2.3.4\\n(?:\" + v6seg + \":){5}(?::\" + v4 + \"|(?::\" + v6seg + \"){1,2}|:)| // 1:2:3:4:5:: 1:2:3:4:5::7:8 1:2:3:4:5::8 1:2:3:4:5::7:1.2.3.4\\n(?:\" + v6seg + \":){4}(?:(?::\" + v6seg + \"){0,1}:\" + v4 + \"|(?::\" + v6seg + \"){1,3}|:)| // 1:2:3:4:: 1:2:3:4::6:7:8 1:2:3:4::8 1:2:3:4::6:7:1.2.3.4\\n(?:\" + v6seg + \":){3}(?:(?::\" + v6seg + \"){0,2}:\" + v4 + \"|(?::\" + v6seg + \"){1,4}|:)| // 1:2:3:: 1:2:3::5:6:7:8 1:2:3::8 1:2:3::5:6:7:1.2.3.4\\n(?:\" + v6seg + \":){2}(?:(?::\" + v6seg + \"){0,3}:\" + v4 + \"|(?::\" + v6seg + \"){1,5}|:)| // 1:2:: 1:2::4:5:6:7:8 1:2::8 1:2::4:5:6:7:1.2.3.4\\n(?:\" + v6seg + \":){1}(?:(?::\" + v6seg + \"){0,4}:\" + v4 + \"|(?::\" + v6seg + \"){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4\\n(?::(?:(?::\" + v6seg + \"){0,5}:\" + v4 + \"|(?::\" + v6seg + \"){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4\\n)(?:%[0-9a-zA-Z]{1,})? // %eth0 %1\\n\").replace(/\\s*\\/\\/.*$/gm, '').replace(/\\n/g, '').trim(); // Pre-compile only the exact regexes because adding a global flag make regexes stateful\n\n var v46Exact = new RegExp(\"(?:^\" + v4 + \"$)|(?:^\" + v6 + \"$)\");\n var v4exact = new RegExp(\"^\" + v4 + \"$\");\n var v6exact = new RegExp(\"^\" + v6 + \"$\");\n\n var ip = function ip(options) {\n return options && options.exact ? v46Exact : new RegExp(\"(?:\" + b(options) + v4 + b(options) + \")|(?:\" + b(options) + v6 + b(options) + \")\", 'g');\n };\n\n ip.v4 = function (options) {\n return options && options.exact ? v4exact : new RegExp(\"\" + b(options) + v4 + b(options), 'g');\n };\n\n ip.v6 = function (options) {\n return options && options.exact ? v6exact : new RegExp(\"\" + b(options) + v6 + b(options), 'g');\n };\n\n var protocol = \"(?:(?:[a-z]+:)?//)\";\n var auth = '(?:\\\\S+(?::\\\\S*)?@)?';\n var ipv4 = ip.v4().source;\n var ipv6 = ip.v6().source;\n var host = \"(?:(?:[a-z\\\\u00a1-\\\\uffff0-9][-_]*)*[a-z\\\\u00a1-\\\\uffff0-9]+)\";\n var domain = \"(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)*\";\n var tld = \"(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,}))\";\n var port = '(?::\\\\d{2,5})?';\n var path = '(?:[/?#][^\\\\s\"]*)?';\n var regex = \"(?:\" + protocol + \"|www\\\\.)\" + auth + \"(?:localhost|\" + ipv4 + \"|\" + ipv6 + \"|\" + host + domain + tld + \")\" + port + path;\n urlReg = new RegExp(\"(?:^\" + regex + \"$)\", 'i');\n return urlReg;\n});\n\n/* eslint max-len:0 */\n\nvar pattern$2 = {\n // http://emailregex.com/\n email: /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]+\\.)+[a-zA-Z\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]{2,}))$/,\n // url: new RegExp(\n // '^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\\\S+(?::\\\\S*)?@)?(?:(?:(?:[1-9]\\\\d?|1\\\\d\\\\d|2[01]\\\\d|22[0-3])(?:\\\\.(?:1?\\\\d{1,2}|2[0-4]\\\\d|25[0-5])){2}(?:\\\\.(?:[0-9]\\\\d?|1\\\\d\\\\d|2[0-4]\\\\d|25[0-4]))|(?:(?:[a-z\\\\u00a1-\\\\uffff0-9]+-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]+-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)*(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,})))|localhost)(?::\\\\d{2,5})?(?:(/|\\\\?|#)[^\\\\s]*)?$',\n // 'i',\n // ),\n hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i\n};\nvar types = {\n integer: function integer(value) {\n return types.number(value) && parseInt(value, 10) === value;\n },\n \"float\": function float(value) {\n return types.number(value) && !types.integer(value);\n },\n array: function array(value) {\n return Array.isArray(value);\n },\n regexp: function regexp(value) {\n if (value instanceof RegExp) {\n return true;\n }\n\n try {\n return !!new RegExp(value);\n } catch (e) {\n return false;\n }\n },\n date: function date(value) {\n return typeof value.getTime === 'function' && typeof value.getMonth === 'function' && typeof value.getYear === 'function' && !isNaN(value.getTime());\n },\n number: function number(value) {\n if (isNaN(value)) {\n return false;\n }\n\n return typeof value === 'number';\n },\n object: function object(value) {\n return typeof value === 'object' && !types.array(value);\n },\n method: function method(value) {\n return typeof value === 'function';\n },\n email: function email(value) {\n return typeof value === 'string' && value.length <= 320 && !!value.match(pattern$2.email);\n },\n url: function url(value) {\n return typeof value === 'string' && value.length <= 2048 && !!value.match(getUrlRegex());\n },\n hex: function hex(value) {\n return typeof value === 'string' && !!value.match(pattern$2.hex);\n }\n};\n\nvar type$1 = function type(rule, value, source, errors, options) {\n if (rule.required && value === undefined) {\n required$1(rule, value, source, errors, options);\n return;\n }\n\n var custom = ['integer', 'float', 'array', 'regexp', 'object', 'method', 'email', 'number', 'date', 'url', 'hex'];\n var ruleType = rule.type;\n\n if (custom.indexOf(ruleType) > -1) {\n if (!types[ruleType](value)) {\n errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type));\n } // straight typeof check\n\n } else if (ruleType && typeof value !== rule.type) {\n errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type));\n }\n};\n\nvar range = function range(rule, value, source, errors, options) {\n var len = typeof rule.len === 'number';\n var min = typeof rule.min === 'number';\n var max = typeof rule.max === 'number'; // 正则匹配码点范围从U+010000一直到U+10FFFF的文字(补充平面Supplementary Plane)\n\n var spRegexp = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n var val = value;\n var key = null;\n var num = typeof value === 'number';\n var str = typeof value === 'string';\n var arr = Array.isArray(value);\n\n if (num) {\n key = 'number';\n } else if (str) {\n key = 'string';\n } else if (arr) {\n key = 'array';\n } // if the value is not of a supported type for range validation\n // the validation rule rule should use the\n // type property to also test for a particular type\n\n\n if (!key) {\n return false;\n }\n\n if (arr) {\n val = value.length;\n }\n\n if (str) {\n // 处理码点大于U+010000的文字length属性不准确的bug,如\"𠮷𠮷𠮷\".lenght !== 3\n val = value.replace(spRegexp, '_').length;\n }\n\n if (len) {\n if (val !== rule.len) {\n errors.push(format(options.messages[key].len, rule.fullField, rule.len));\n }\n } else if (min && !max && val < rule.min) {\n errors.push(format(options.messages[key].min, rule.fullField, rule.min));\n } else if (max && !min && val > rule.max) {\n errors.push(format(options.messages[key].max, rule.fullField, rule.max));\n } else if (min && max && (val < rule.min || val > rule.max)) {\n errors.push(format(options.messages[key].range, rule.fullField, rule.min, rule.max));\n }\n};\n\nvar ENUM$1 = 'enum';\n\nvar enumerable$1 = function enumerable(rule, value, source, errors, options) {\n rule[ENUM$1] = Array.isArray(rule[ENUM$1]) ? rule[ENUM$1] : [];\n\n if (rule[ENUM$1].indexOf(value) === -1) {\n errors.push(format(options.messages[ENUM$1], rule.fullField, rule[ENUM$1].join(', ')));\n }\n};\n\nvar pattern$1 = function pattern(rule, value, source, errors, options) {\n if (rule.pattern) {\n if (rule.pattern instanceof RegExp) {\n // if a RegExp instance is passed, reset `lastIndex` in case its `global`\n // flag is accidentally set to `true`, which in a validation scenario\n // is not necessary and the result might be misleading\n rule.pattern.lastIndex = 0;\n\n if (!rule.pattern.test(value)) {\n errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));\n }\n } else if (typeof rule.pattern === 'string') {\n var _pattern = new RegExp(rule.pattern);\n\n if (!_pattern.test(value)) {\n errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));\n }\n }\n }\n};\n\nvar rules = {\n required: required$1,\n whitespace: whitespace,\n type: type$1,\n range: range,\n \"enum\": enumerable$1,\n pattern: pattern$1\n};\n\nvar string = function string(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value, 'string') && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options, 'string');\n\n if (!isEmptyValue(value, 'string')) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n rules.pattern(rule, value, source, errors, options);\n\n if (rule.whitespace === true) {\n rules.whitespace(rule, value, source, errors, options);\n }\n }\n }\n\n callback(errors);\n};\n\nvar method = function method(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n};\n\nvar number = function number(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (value === '') {\n value = undefined;\n }\n\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n};\n\nvar _boolean = function _boolean(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n};\n\nvar regexp = function regexp(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (!isEmptyValue(value)) {\n rules.type(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n};\n\nvar integer = function integer(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n};\n\nvar floatFn = function floatFn(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n};\n\nvar array = function array(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if ((value === undefined || value === null) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options, 'array');\n\n if (value !== undefined && value !== null) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n};\n\nvar object = function object(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n};\n\nvar ENUM = 'enum';\n\nvar enumerable = function enumerable(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (value !== undefined) {\n rules[ENUM](rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n};\n\nvar pattern = function pattern(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value, 'string') && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (!isEmptyValue(value, 'string')) {\n rules.pattern(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n};\n\nvar date = function date(rule, value, callback, source, options) {\n // console.log('integer rule called %j', rule);\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); // console.log('validate on %s value', value);\n\n if (validate) {\n if (isEmptyValue(value, 'date') && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (!isEmptyValue(value, 'date')) {\n var dateObject;\n\n if (value instanceof Date) {\n dateObject = value;\n } else {\n dateObject = new Date(value);\n }\n\n rules.type(rule, dateObject, source, errors, options);\n\n if (dateObject) {\n rules.range(rule, dateObject.getTime(), source, errors, options);\n }\n }\n }\n\n callback(errors);\n};\n\nvar required = function required(rule, value, callback, source, options) {\n var errors = [];\n var type = Array.isArray(value) ? 'array' : typeof value;\n rules.required(rule, value, source, errors, options, type);\n callback(errors);\n};\n\nvar type = function type(rule, value, callback, source, options) {\n var ruleType = rule.type;\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value, ruleType) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options, ruleType);\n\n if (!isEmptyValue(value, ruleType)) {\n rules.type(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n};\n\nvar any = function any(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n }\n\n callback(errors);\n};\n\nvar validators = {\n string: string,\n method: method,\n number: number,\n \"boolean\": _boolean,\n regexp: regexp,\n integer: integer,\n \"float\": floatFn,\n array: array,\n object: object,\n \"enum\": enumerable,\n pattern: pattern,\n date: date,\n url: type,\n hex: type,\n email: type,\n required: required,\n any: any\n};\n\nfunction newMessages() {\n return {\n \"default\": 'Validation error on field %s',\n required: '%s is required',\n \"enum\": '%s must be one of %s',\n whitespace: '%s cannot be empty',\n date: {\n format: '%s date %s is invalid for format %s',\n parse: '%s date could not be parsed, %s is invalid ',\n invalid: '%s date %s is invalid'\n },\n types: {\n string: '%s is not a %s',\n method: '%s is not a %s (function)',\n array: '%s is not an %s',\n object: '%s is not an %s',\n number: '%s is not a %s',\n date: '%s is not a %s',\n \"boolean\": '%s is not a %s',\n integer: '%s is not an %s',\n \"float\": '%s is not a %s',\n regexp: '%s is not a valid %s',\n email: '%s is not a valid %s',\n url: '%s is not a valid %s',\n hex: '%s is not a valid %s'\n },\n string: {\n len: '%s must be exactly %s characters',\n min: '%s must be at least %s characters',\n max: '%s cannot be longer than %s characters',\n range: '%s must be between %s and %s characters'\n },\n number: {\n len: '%s must equal %s',\n min: '%s cannot be less than %s',\n max: '%s cannot be greater than %s',\n range: '%s must be between %s and %s'\n },\n array: {\n len: '%s must be exactly %s in length',\n min: '%s cannot be less than %s in length',\n max: '%s cannot be greater than %s in length',\n range: '%s must be between %s and %s in length'\n },\n pattern: {\n mismatch: '%s value %s does not match pattern %s'\n },\n clone: function clone() {\n var cloned = JSON.parse(JSON.stringify(this));\n cloned.clone = this.clone;\n return cloned;\n }\n };\n}\nvar messages = newMessages();\n\n/**\n * Encapsulates a validation schema.\n *\n * @param descriptor An object declaring validation rules\n * for this schema.\n */\n\nvar Schema = /*#__PURE__*/function () {\n // ========================= Static =========================\n // ======================== Instance ========================\n function Schema(descriptor) {\n this.rules = null;\n this._messages = messages;\n this.define(descriptor);\n }\n\n var _proto = Schema.prototype;\n\n _proto.define = function define(rules) {\n var _this = this;\n\n if (!rules) {\n throw new Error('Cannot configure a schema with no rules');\n }\n\n if (typeof rules !== 'object' || Array.isArray(rules)) {\n throw new Error('Rules must be an object');\n }\n\n this.rules = {};\n Object.keys(rules).forEach(function (name) {\n var item = rules[name];\n _this.rules[name] = Array.isArray(item) ? item : [item];\n });\n };\n\n _proto.messages = function messages(_messages) {\n if (_messages) {\n this._messages = deepMerge(newMessages(), _messages);\n }\n\n return this._messages;\n };\n\n _proto.validate = function validate(source_, o, oc) {\n var _this2 = this;\n\n if (o === void 0) {\n o = {};\n }\n\n if (oc === void 0) {\n oc = function oc() {};\n }\n\n var source = source_;\n var options = o;\n var callback = oc;\n\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n\n if (!this.rules || Object.keys(this.rules).length === 0) {\n if (callback) {\n callback(null, source);\n }\n\n return Promise.resolve(source);\n }\n\n function complete(results) {\n var errors = [];\n var fields = {};\n\n function add(e) {\n if (Array.isArray(e)) {\n var _errors;\n\n errors = (_errors = errors).concat.apply(_errors, e);\n } else {\n errors.push(e);\n }\n }\n\n for (var i = 0; i < results.length; i++) {\n add(results[i]);\n }\n\n if (!errors.length) {\n callback(null, source);\n } else {\n fields = convertFieldsError(errors);\n callback(errors, fields);\n }\n }\n\n if (options.messages) {\n var messages$1 = this.messages();\n\n if (messages$1 === messages) {\n messages$1 = newMessages();\n }\n\n deepMerge(messages$1, options.messages);\n options.messages = messages$1;\n } else {\n options.messages = this.messages();\n }\n\n var series = {};\n var keys = options.keys || Object.keys(this.rules);\n keys.forEach(function (z) {\n var arr = _this2.rules[z];\n var value = source[z];\n arr.forEach(function (r) {\n var rule = r;\n\n if (typeof rule.transform === 'function') {\n if (source === source_) {\n source = _extends({}, source);\n }\n\n value = source[z] = rule.transform(value);\n }\n\n if (typeof rule === 'function') {\n rule = {\n validator: rule\n };\n } else {\n rule = _extends({}, rule);\n } // Fill validator. Skip if nothing need to validate\n\n\n rule.validator = _this2.getValidationMethod(rule);\n\n if (!rule.validator) {\n return;\n }\n\n rule.field = z;\n rule.fullField = rule.fullField || z;\n rule.type = _this2.getType(rule);\n series[z] = series[z] || [];\n series[z].push({\n rule: rule,\n value: value,\n source: source,\n field: z\n });\n });\n });\n var errorFields = {};\n return asyncMap(series, options, function (data, doIt) {\n var rule = data.rule;\n var deep = (rule.type === 'object' || rule.type === 'array') && (typeof rule.fields === 'object' || typeof rule.defaultField === 'object');\n deep = deep && (rule.required || !rule.required && data.value);\n rule.field = data.field;\n\n function addFullField(key, schema) {\n return _extends({}, schema, {\n fullField: rule.fullField + \".\" + key,\n fullFields: rule.fullFields ? [].concat(rule.fullFields, [key]) : [key]\n });\n }\n\n function cb(e) {\n if (e === void 0) {\n e = [];\n }\n\n var errorList = Array.isArray(e) ? e : [e];\n\n if (!options.suppressWarning && errorList.length) {\n Schema.warning('async-validator:', errorList);\n }\n\n if (errorList.length && rule.message !== undefined) {\n errorList = [].concat(rule.message);\n } // Fill error info\n\n\n var filledErrors = errorList.map(complementError(rule, source));\n\n if (options.first && filledErrors.length) {\n errorFields[rule.field] = 1;\n return doIt(filledErrors);\n }\n\n if (!deep) {\n doIt(filledErrors);\n } else {\n // if rule is required but the target object\n // does not exist fail at the rule level and don't\n // go deeper\n if (rule.required && !data.value) {\n if (rule.message !== undefined) {\n filledErrors = [].concat(rule.message).map(complementError(rule, source));\n } else if (options.error) {\n filledErrors = [options.error(rule, format(options.messages.required, rule.field))];\n }\n\n return doIt(filledErrors);\n }\n\n var fieldsSchema = {};\n\n if (rule.defaultField) {\n Object.keys(data.value).map(function (key) {\n fieldsSchema[key] = rule.defaultField;\n });\n }\n\n fieldsSchema = _extends({}, fieldsSchema, data.rule.fields);\n var paredFieldsSchema = {};\n Object.keys(fieldsSchema).forEach(function (field) {\n var fieldSchema = fieldsSchema[field];\n var fieldSchemaList = Array.isArray(fieldSchema) ? fieldSchema : [fieldSchema];\n paredFieldsSchema[field] = fieldSchemaList.map(addFullField.bind(null, field));\n });\n var schema = new Schema(paredFieldsSchema);\n schema.messages(options.messages);\n\n if (data.rule.options) {\n data.rule.options.messages = options.messages;\n data.rule.options.error = options.error;\n }\n\n schema.validate(data.value, data.rule.options || options, function (errs) {\n var finalErrors = [];\n\n if (filledErrors && filledErrors.length) {\n finalErrors.push.apply(finalErrors, filledErrors);\n }\n\n if (errs && errs.length) {\n finalErrors.push.apply(finalErrors, errs);\n }\n\n doIt(finalErrors.length ? finalErrors : null);\n });\n }\n }\n\n var res;\n\n if (rule.asyncValidator) {\n res = rule.asyncValidator(rule, data.value, cb, data.source, options);\n } else if (rule.validator) {\n try {\n res = rule.validator(rule, data.value, cb, data.source, options);\n } catch (error) {\n console.error == null ? void 0 : console.error(error); // rethrow to report error\n\n if (!options.suppressValidatorError) {\n setTimeout(function () {\n throw error;\n }, 0);\n }\n\n cb(error.message);\n }\n\n if (res === true) {\n cb();\n } else if (res === false) {\n cb(typeof rule.message === 'function' ? rule.message(rule.fullField || rule.field) : rule.message || (rule.fullField || rule.field) + \" fails\");\n } else if (res instanceof Array) {\n cb(res);\n } else if (res instanceof Error) {\n cb(res.message);\n }\n }\n\n if (res && res.then) {\n res.then(function () {\n return cb();\n }, function (e) {\n return cb(e);\n });\n }\n }, function (results) {\n complete(results);\n }, source);\n };\n\n _proto.getType = function getType(rule) {\n if (rule.type === undefined && rule.pattern instanceof RegExp) {\n rule.type = 'pattern';\n }\n\n if (typeof rule.validator !== 'function' && rule.type && !validators.hasOwnProperty(rule.type)) {\n throw new Error(format('Unknown rule type %s', rule.type));\n }\n\n return rule.type || 'string';\n };\n\n _proto.getValidationMethod = function getValidationMethod(rule) {\n if (typeof rule.validator === 'function') {\n return rule.validator;\n }\n\n var keys = Object.keys(rule);\n var messageIndex = keys.indexOf('message');\n\n if (messageIndex !== -1) {\n keys.splice(messageIndex, 1);\n }\n\n if (keys.length === 1 && keys[0] === 'required') {\n return validators.required;\n }\n\n return validators[this.getType(rule)] || undefined;\n };\n\n return Schema;\n}();\n\nSchema.register = function register(type, validator) {\n if (typeof validator !== 'function') {\n throw new Error('Cannot register a validator by type, validator is not a function');\n }\n\n validators[type] = validator;\n};\n\nSchema.warning = warning;\nSchema.messages = messages;\nSchema.validators = validators;\n\nexport { Schema as default };\n//# sourceMappingURL=index.js.map\n","/**\n * 校验工具:与 original BaseUtils 一致,供 trait 配置的 rules 在运行时用 async-validator 执行\n */\nimport Schema from \"async-validator\";\n\n/** 将字符串转为 RegExp(支持 /pattern/ 形式) */\nfunction stringToRegPattern(pattern: string): RegExp | null {\n if (!pattern || typeof pattern !== \"string\") return null;\n try {\n let s = pattern.trim();\n if (s.startsWith(\"/\") && s.endsWith(\"/\")) s = s.slice(1, -1);\n return new RegExp(s);\n } catch {\n return null;\n }\n}\n\n/**\n * 处理 trait 表格规则:将 pattern 字符串转为 RegExp,得到 async-validator 可用的规则数组\n */\nexport function processValidationRules(rules: any[]): any[] {\n if (!rules || !Array.isArray(rules)) return [];\n return rules.map((rule) => {\n const r = { ...rule };\n if (r.pattern && typeof r.pattern === \"string\" && r.pattern.trim()) {\n const re = stringToRegPattern(r.pattern);\n if (re) r.pattern = re;\n else delete r.pattern;\n }\n return r;\n });\n}\n\nconst FIELD = \"_v\";\n\n/**\n * 用 async-validator 校验单个值(与 original validateData 等价)\n * @param rules 已通过 processValidationRules 处理后的规则数组\n * @param value 待校验值\n * @param onSuccess 通过时调用\n * @param onError 失败时调用,参数为 errors(取第一条 message 即可)\n */\nexport function validateWithSchema(\n rules: any[],\n value: unknown,\n onSuccess: () => void,\n onError: (errors: Array<{ message?: string }>) => void\n): void {\n if (!rules?.length) {\n onSuccess();\n return;\n }\n const descriptor = { [FIELD]: rules };\n const validator = new Schema(descriptor);\n validator\n .validate({ [FIELD]: value }, { first: true })\n .then(() => {\n onSuccess();\n })\n .catch(({ errors }: { errors: Array<{ message?: string }> }) => {\n onError(errors || []);\n });\n}\n","/**\n * 公共校验 Hook:与 AndInput 一致的校验逻辑(validateStore + propsStore),供所有支持校验的 And* 组件复用\n * 同时监听 validateAction(updateItem(sessionId_dataSet_validateAction, { validate: ts })),触发时执行校验。\n */\nimport { useCallback, useEffect, useMemo } from \"react\";\nimport { useAndStore } from \"./store/useAndStore\";\nimport type { AndStore } from \"./store/useAndStore\";\nimport { getDataSetStoreKey, getValidateStoreKey } from \"./storeKeyUtils\";\nimport { processValidationRules, validateWithSchema } from \"./validationUtils\";\n\nexport interface UseFieldValidationOptions {\n rules?: Array<{ type?: string; required?: boolean; message?: string; pattern?: string | RegExp; min?: number; max?: number }>;\n dataSet?: string;\n dataSetField?: string;\n sessionId?: string;\n id?: string;\n /** 是否设计器模式(设计器下不展示 help/validateStatus) */\n develop?: boolean;\n}\n\n/**\n * 返回校验方法及当前校验状态,与 AndInput 行为一致:\n * - 有 dataSet+dataSetField 时 help 来自 validateStore,否则来自 propsStore\n * - validate(value) 使用 async-validator,结果写入 validateStore 与 propsStore\n */\nexport function useFieldValidation(options: UseFieldValidationOptions) {\n const { rules, dataSet, dataSetField, sessionId, id, develop } = options;\n\n const setValidateResult = useAndStore((s: AndStore) => s.setValidateResult);\n const getProps = useAndStore((s: AndStore) => s.getProps);\n const setProps = useAndStore((s: AndStore) => s.setProps);\n\n const validateStoreKey = useMemo(\n () => getValidateStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n const validateErrorMsg = useAndStore((s: AndStore) =>\n validateStoreKey && dataSetField\n ? (s.validateStore[validateStoreKey]?.[dataSetField] ?? \"\")\n : \"\"\n );\n\n const storeProps = useAndStore((s: AndStore) =>\n sessionId && id ? s.propsStore[`${sessionId}_props`]?.[id] ?? null : null\n );\n\n const getDataSet = useAndStore((s: AndStore) => s.getDataSet);\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n const validateActionKey = useMemo(\n () => (dataSet ? getDataSetStoreKey(sessionId, `${dataSet}_validateAction`) : undefined),\n [sessionId, dataSet]\n );\n const validateActionTrigger = useAndStore((s: AndStore) =>\n validateActionKey\n ? (s.dataSets[validateActionKey] as { validate?: number } | undefined)?.validate\n : undefined\n );\n\n const applyResult = useCallback(\n (help: string) => {\n const msg = help ?? \"\";\n if (sessionId && dataSet && dataSetField)\n setValidateResult(sessionId, dataSet, dataSetField, msg);\n if (sessionId && id) {\n const current = getProps(sessionId, id) || {};\n setProps(sessionId, id, { ...current, validateStatus: msg ? \"error\" : undefined, help: msg });\n }\n },\n [sessionId, dataSet, dataSetField, id, setValidateResult, getProps, setProps]\n );\n\n const validate = useCallback(\n (value: unknown) => {\n const processedRules = processValidationRules(rules || []);\n validateWithSchema(\n processedRules,\n value,\n () => applyResult(\"\"),\n (errs) => applyResult(errs[0]?.message ?? \"\")\n );\n },\n [rules, applyResult]\n );\n\n const help = !develop\n ? (sessionId && dataSet && dataSetField ? validateErrorMsg : (storeProps?.help as string) ?? \"\")\n : undefined;\n const validateStatus = !develop && help ? \"error\" : undefined;\n\n useEffect(() => {\n if (validateActionTrigger == null || !dataSetKey || !dataSetField) return;\n const value = getDataSet(dataSetKey, dataSetField);\n validate(value);\n }, [validateActionTrigger, dataSetKey, dataSetField, getDataSet, validate]);\n\n return { validate, help, validateStatus };\n}\n","/**\n * 组件 props 与 store(propsStore)双向绑定工具\n * 从 storeProps 合并到 restProps,使 setProps(sessionId, id, { disabled: true }) 等能生效\n */\n\nconst DEFAULT_SKIP_KEYS = ['value', 'validateStatus', 'help'] as const;\n\n/**\n * 将 store 中的 props(propsStore[sessionId_props][id])合并到组件 restProps\n * 跳过 value/help/validateStatus,避免覆盖组件内部管理的展示值\n */\nexport function mergeStoreProps<T extends Record<string, any>>(\n restProps: T,\n storeProps: Record<string, any> | null | undefined,\n options?: { skipKeys?: string[] }\n): T {\n const skipKeys = options?.skipKeys ?? (DEFAULT_SKIP_KEYS as unknown as string[]);\n const out: Record<string, any> = { ...restProps };\n if (!storeProps || typeof storeProps !== 'object') return out as T;\n Object.keys(storeProps).forEach((key) => {\n if (skipKeys.includes(key)) return;\n const v = storeProps[key];\n if (v !== undefined && v !== null) out[key] = v;\n });\n return out as T;\n}\n","/**\n * 可配置的接口提供者\n * 用于网络请求、文件上传、数据字典等功能的全局配置\n */\n\nimport React from \"react\";\nimport type { ThemeConfig } from \"antd\";\n\nexport interface RequestConfig {\n url?: string;\n baseURL?: string;\n method?: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\" | \"PATCH\" | string;\n headers?: Record<string, string>;\n data?: any;\n params?: any;\n timeout?: number;\n}\n\nexport interface UploadConfig {\n url?: string;\n maxSize?: number;\n accept?: string[];\n headers?: Record<string, string>;\n}\n\n/**\n * 字典选项接口\n */\nexport interface DictOption {\n label: string;\n value: string | number;\n disabled?: boolean;\n children?: DictOption[];\n [key: string]: any;\n}\n\n/**\n * 字典 value 匹配:数据字典取回的 value 多为 string,实际数据可能为 number,\n * 统一转为 string 后再比较,确保匹配正确。\n */\nexport function dictValueEquals(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n return String(a ?? '') === String(b ?? '');\n}\n\n/**\n * 从字典选项中按 value 查找(使用 dictValueEquals 做类型无关匹配)\n */\nexport function findDictOptionByValue<T extends { value?: unknown }>(\n options: T[],\n value: unknown\n): T | undefined {\n if (!Array.isArray(options)) return undefined;\n return options.find((opt) => dictValueEquals(opt.value, value));\n}\n\n/**\n * 全局配置接口\n */\nexport interface CoreConfig {\n /** 基础 URL */\n baseURL?: string;\n\n /** 通用请求方法 */\n request?: (config: RequestConfig) => Promise<any>;\n\n /** 文件上传 */\n upload?: (file: File, config?: UploadConfig) => Promise<any>;\n\n /** 获取数据字典 */\n getDictOptions?: (dictCode: string) => Promise<DictOption[]>;\n\n /** 获取认证 Token */\n getAccessToken?: () => string | null;\n\n /** 组件解析器 - 用于 AndDynamicContainer 动态加载组件 */\n componentResolver?: (name: string) => React.ComponentType<any> | null;\n\n /** Ant Design 主题配置 - 用于 UIUtils.showDrawer/showModal 等命令式 API */\n theme?: ThemeConfig;\n\n /** 资源域名(用于 viewRes 拼接完整访问地址) */\n resDomain?: string;\n\n /** 将资源路径 src 转为完整访问地址,并附加 auth_token */\n viewRes?: (src: string) => string;\n}\n\nlet globalConfig: CoreConfig = {};\n\n/**\n * 设置全局配置\n */\nexport function setCoreConfig(config: CoreConfig) {\n globalConfig = { ...globalConfig, ...config };\n}\n\n/**\n * 获取全局配置\n */\nexport function getCoreConfig(): CoreConfig {\n return globalConfig;\n}\n\n/**\n * 执行网络请求\n */\nexport async function request(config: RequestConfig): Promise<any> {\n if (globalConfig.request) {\n // 自动添加 baseURL\n const finalConfig = {\n ...config,\n baseURL: config.baseURL || globalConfig.baseURL,\n };\n return globalConfig.request(finalConfig);\n }\n throw new Error(\n \"Request handler not configured. Please call setCoreConfig() first.\"\n );\n}\n\n/**\n * 执行文件上传\n */\nexport async function upload(file: File, config?: UploadConfig): Promise<any> {\n if (globalConfig.upload) {\n return globalConfig.upload(file, config);\n }\n throw new Error(\n \"Upload handler not configured. Please call setCoreConfig() first.\"\n );\n}\n\n/**\n * 获取数据字典\n */\nexport async function getDictOptions(dictCode: string): Promise<DictOption[]> {\n if (globalConfig.getDictOptions) {\n return globalConfig.getDictOptions(dictCode);\n }\n console.warn(\n \"Dict service not configured. Please call setCoreConfig() with getDictOptions.\"\n );\n return [];\n}\n\n/**\n * 获取认证 Token\n */\nexport function getAccessToken(): string | null {\n if (globalConfig.getAccessToken) {\n return globalConfig.getAccessToken();\n }\n return null;\n}\n\n// Convenience export for request\nexport const req = {\n post: (\n url: string,\n data?: any,\n config?: Omit<RequestConfig, \"url\" | \"data\" | \"method\">\n ) => request({ url, data, method: \"POST\", ...config }),\n get: (\n url: string,\n params?: any,\n config?: Omit<RequestConfig, \"url\" | \"params\" | \"method\">\n ) => request({ url, params, method: \"GET\", ...config }),\n};\n","/**\n * API 服务 Hook\n * 提供网络请求、数据字典、文件上传等服务\n */\nimport { useCallback, useState, useEffect, useMemo } from \"react\";\nimport {\n getCoreConfig,\n request as coreRequest,\n getDictOptions as coreGetDictOptions,\n upload as coreUpload,\n getAccessToken as coreGetAccessToken,\n type RequestConfig,\n type UploadConfig,\n type DictOption,\n} from \"../../config\";\n\n/**\n * 通用 API 服务 Hook\n */\nexport function useApiService() {\n const config = getCoreConfig();\n\n /**\n * 发起网络请求\n */\n const request = useCallback(\n async <T = any>(\n urlOrConfig: string | RequestConfig,\n options?: Omit<RequestConfig, \"url\">\n ): Promise<T> => {\n const requestConfig =\n typeof urlOrConfig === \"string\"\n ? { url: urlOrConfig, ...options }\n : urlOrConfig;\n return coreRequest(requestConfig);\n },\n []\n );\n\n /**\n * GET 请求\n */\n const get = useCallback(\n async <T = any>(\n url: string,\n params?: Record<string, any>,\n options?: Omit<RequestConfig, \"url\" | \"params\" | \"method\">\n ): Promise<T> => {\n return coreRequest({ url, params, method: \"GET\", ...options });\n },\n []\n );\n\n /**\n * POST 请求\n */\n const post = useCallback(\n async <T = any>(\n url: string,\n data?: any,\n options?: Omit<RequestConfig, \"url\" | \"data\" | \"method\">\n ): Promise<T> => {\n return coreRequest({ url, data, method: \"POST\", ...options });\n },\n []\n );\n\n /**\n * 获取数据字典\n */\n const getDictOptions = useCallback(\n async (dictCode: string): Promise<DictOption[]> => {\n return coreGetDictOptions(dictCode);\n },\n []\n );\n\n /**\n * 文件上传\n */\n const upload = useCallback(\n async (file: File, uploadConfig?: UploadConfig) => {\n return coreUpload(file, uploadConfig);\n },\n []\n );\n\n /**\n * 获取认证 Token\n */\n const getAccessToken = useCallback((): string | null => {\n return coreGetAccessToken();\n }, []);\n\n /**\n * 检查 API 是否已配置\n */\n const isConfigured = useCallback(() => {\n return !!config.request;\n }, [config.request]);\n\n return {\n request,\n get,\n post,\n getDictOptions,\n upload,\n getAccessToken,\n isConfigured,\n baseURL: config.baseURL,\n };\n}\n\n/**\n * 字典数据 Hook\n * 自动加载并缓存字典数据\n */\nexport function useDictOptions(dictCode: string | undefined) {\n const [options, setOptions] = useState<DictOption[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n useEffect(() => {\n if (!dictCode) {\n setOptions([]);\n return;\n }\n\n let cancelled = false;\n setLoading(true);\n setError(null);\n\n coreGetDictOptions(dictCode)\n .then((data) => {\n if (!cancelled) {\n setOptions(data);\n }\n })\n .catch((err) => {\n if (!cancelled) {\n setError(err);\n console.error(`Failed to load dict: ${dictCode}`, err);\n }\n })\n .finally(() => {\n if (!cancelled) {\n setLoading(false);\n }\n });\n\n return () => {\n cancelled = true;\n };\n }, [dictCode]);\n\n return { options, loading, error };\n}\n\n/**\n * 远程数据 Hook\n * 加载远程选项数据\n */\nexport function useRemoteOptions(\n url: string | undefined,\n config?: {\n labelKey?: string;\n valueKey?: string;\n immediate?: boolean;\n /** 请求时的查询参数,如 { pageSize: 100, status: 0 } */\n params?: Record<string, any>;\n /**\n * 响应中选项数组所在字段名。不传时:根为数组则直接用,否则取 list 或 records。\n * 指定后从根对象的该字段取数组,如 \"children\" 表示从 data.children 取选项列表。\n */\n field?: string;\n }\n) {\n const [options, setOptions] = useState<DictOption[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const {\n labelKey = \"label\",\n valueKey = \"value\",\n immediate = true,\n field: responseField,\n } = config || {};\n\n // 稳定化 params 引用:按 JSON 值比较,避免调用方每次渲染传新对象导致无限重请求\n const paramsJson = JSON.stringify(config?.params ?? null);\n const stableParams = useMemo<Record<string, any> | undefined>(\n () => (config?.params != null ? JSON.parse(paramsJson) : undefined),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [paramsJson]\n );\n\n const transformData = useCallback(\n (data: any[]): DictOption[] => {\n if (!Array.isArray(data)) return [];\n // 只取当前层的 label / value,截断 children,避免 Antd Select 把带 children 的项当 OptGroup\n return data.map((item) => ({\n label: item[labelKey],\n value: item[valueKey],\n }));\n },\n [labelKey, valueKey]\n );\n\n const load = useCallback(async () => {\n if (!url) return;\n\n setLoading(true);\n setError(null);\n\n try {\n const response = await coreRequest({\n url,\n method: \"GET\",\n ...(stableParams != null && Object.keys(stableParams).length > 0\n ? { params: stableParams }\n : {}),\n });\n // 根对象:优先用 response.data,否则用 response(兼容拦截器只返回 body 的情况)\n const root = response?.data != null ? response.data : response;\n // 提取数据数组:① 指定 field 时从 root[field] 取 ② 否则 root 为数组则直接用 ③ 否则取 list 或 records\n let dataArray: any[] = [];\n if (responseField != null && responseField !== \"\") {\n dataArray = Array.isArray(root?.[responseField]) ? root[responseField] : [];\n } else if (Array.isArray(root)) {\n dataArray = root;\n } else if (root != null && typeof root === \"object\") {\n dataArray = root?.list ?? root?.records ?? [];\n }\n setOptions(transformData(dataArray));\n } catch (err) {\n setError(err as Error);\n console.error(`Failed to load remote options: ${url}`, err);\n } finally {\n setLoading(false);\n }\n }, [url, stableParams, transformData, responseField]);\n\n useEffect(() => {\n if (immediate && url) {\n load();\n }\n }, [immediate, url, load]);\n\n return { options, loading, error, reload: load };\n}\n\nexport default useApiService;\n","/**\n * React 版本的格式化工具\n * 无 Vue 依赖,纯函数实现\n */\n\n// 格式化选项接口\nexport interface FormatOptions {\n [key: string]: any;\n currency?: string;\n precision?: number;\n notation?: \"compact\" | \"scientific\" | \"engineering\";\n pattern?: string;\n binary?: boolean;\n country?: string;\n mask?: boolean;\n separator?: string;\n maxLength?: number;\n suffix?: string;\n statusMap?: Record<string, string>;\n delimiter?: string;\n}\n\n// 格式化类型\nexport type FormatType =\n | \"currency\"\n | \"number\"\n | \"percent\"\n | \"compact\"\n | \"scientific\"\n | \"ordinal\"\n | \"chineseNumber\"\n | \"timestamp\"\n | \"date\"\n | \"dateCustom\"\n | \"relativeTime\"\n | \"duration\"\n | \"age\"\n | \"fileSize\"\n | \"networkSpeed\"\n | \"phone\"\n | \"phoneMask\"\n | \"landline\"\n | \"emailMask\"\n | \"idCard\"\n | \"bankCard\"\n | \"ipAddress\"\n | \"macAddress\"\n | \"truncate\"\n | \"capitalize\"\n | \"titleCase\"\n | \"kebabCase\"\n | \"camelCase\"\n | \"snakeToCamel\"\n | \"camelToSnake\"\n | \"stripHtml\"\n | \"usernameMask\"\n | \"status\"\n | \"gender\"\n | \"url\"\n | \"color\"\n | \"array\";\n\n// 工具函数:安全的数字转换\nconst toNumber = (value: any): number => {\n if (value === null || value === undefined || value === \"\") return 0;\n const num = Number(value);\n return isNaN(num) || !isFinite(num) ? 0 : num;\n};\n\n// 工具函数:安全的字符串转换\nconst toString = (value: any): string => {\n if (value === null || value === undefined) return \"\";\n return String(value);\n};\n\n// 工具函数:安全的日期转换\nconst toDate = (value: any): Date | null => {\n if (value === null || value === undefined) return null;\n\n let date: Date;\n if (value instanceof Date) {\n date = value;\n } else if (typeof value === \"number\") {\n const timestamp = value.toString().length === 10 ? value * 1000 : value;\n if (timestamp < 0 || timestamp > 8640000000000000) return null;\n date = new Date(timestamp);\n } else {\n date = new Date(value);\n }\n\n return isNaN(date.getTime()) ? null : date;\n};\n\n// 货币格式化\nexport const formatCurrency = (\n value: any,\n currency = \"CNY\",\n options: FormatOptions = {}\n): string => {\n try {\n const num = toNumber(value);\n const safeCurrency = /^[A-Z]{3}$/.test(currency) ? currency : \"CNY\";\n return new Intl.NumberFormat(\"zh-CN\", {\n style: \"currency\",\n currency: safeCurrency,\n ...options,\n }).format(num);\n } catch {\n return \"\";\n }\n};\n\n// 数字格式化\nexport const formatNumber = (\n value: any,\n options: FormatOptions = {}\n): string => {\n try {\n const num = toNumber(value);\n return new Intl.NumberFormat(\"zh-CN\", {\n minimumFractionDigits: 0,\n maximumFractionDigits: 2,\n ...options,\n }).format(num);\n } catch {\n return \"\";\n }\n};\n\n// 百分比格式化\nexport const formatPercent = (value: any, precision = 2): string => {\n try {\n const num = toNumber(value);\n const safePrecision = Math.max(0, Math.min(20, Math.floor(precision)));\n return new Intl.NumberFormat(\"zh-CN\", {\n style: \"percent\",\n minimumFractionDigits: safePrecision,\n maximumFractionDigits: safePrecision,\n }).format(num);\n } catch {\n return \"\";\n }\n};\n\n// 紧凑数字格式化\nexport const formatCompact = (\n value: any,\n notation: \"compact\" | \"scientific\" | \"engineering\" = \"compact\"\n): string => {\n try {\n const num = toNumber(value);\n return new Intl.NumberFormat(\"zh-CN\", {\n notation,\n compactDisplay: \"short\",\n }).format(num);\n } catch {\n return \"\";\n }\n};\n\n// 日期格式化\nexport const formatDate = (value: any, options: FormatOptions = {}): string => {\n try {\n const date = toDate(value);\n if (!date) return \"\";\n return new Intl.DateTimeFormat(\"zh-CN\", {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n ...options,\n }).format(date);\n } catch {\n return \"\";\n }\n};\n\n// 自定义日期格式化\nexport const formatDateCustom = (\n value: any,\n pattern = \"YYYY-MM-DD\"\n): string => {\n try {\n const date = toDate(value);\n if (!date) return \"\";\n\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n const hours = String(date.getHours()).padStart(2, \"0\");\n const minutes = String(date.getMinutes()).padStart(2, \"0\");\n const seconds = String(date.getSeconds()).padStart(2, \"0\");\n\n return pattern\n .replace(\"YYYY\", String(year))\n .replace(\"MM\", month)\n .replace(\"DD\", day)\n .replace(\"HH\", hours)\n .replace(\"mm\", minutes)\n .replace(\"ss\", seconds);\n } catch {\n return \"\";\n }\n};\n\n// 时间戳格式化\nexport const formatTimestamp = (\n value: any,\n pattern = \"YYYY-MM-DD HH:mm:ss\"\n): string => {\n return formatDateCustom(value, pattern);\n};\n\n// 相对时间\nexport const formatRelativeTime = (value: any): string => {\n try {\n const date = toDate(value);\n if (!date) return \"\";\n\n const now = new Date();\n const diff = now.getTime() - date.getTime();\n const seconds = Math.floor(diff / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n const days = Math.floor(hours / 24);\n const months = Math.floor(days / 30);\n const years = Math.floor(days / 365);\n\n if (seconds < 60) return \"刚刚\";\n if (minutes < 60) return `${minutes}分钟前`;\n if (hours < 24) return `${hours}小时前`;\n if (days < 30) return `${days}天前`;\n if (months < 12) return `${months}个月前`;\n return `${years}年前`;\n } catch {\n return \"\";\n }\n};\n\n// 时间段格式化\nexport const formatDuration = (seconds: any): string => {\n try {\n const value = Math.floor(toNumber(seconds));\n if (value < 0 || value > 31536000) return \"\";\n\n const hours = Math.floor(value / 3600);\n const minutes = Math.floor((value % 3600) / 60);\n const secs = value % 60;\n\n const parts: string[] = [];\n if (hours > 0) parts.push(`${hours}小时`);\n if (minutes > 0) parts.push(`${minutes}分钟`);\n if (secs > 0 || parts.length === 0) parts.push(`${secs}秒`);\n\n return parts.join(\"\");\n } catch {\n return \"\";\n }\n};\n\n// 年龄计算\nexport const formatAge = (birthDate: any): string => {\n try {\n const birth = toDate(birthDate);\n if (!birth) return \"\";\n\n const today = new Date();\n if (birth > today) return \"\";\n\n let age = today.getFullYear() - birth.getFullYear();\n const monthDiff = today.getMonth() - birth.getMonth();\n\n if (\n monthDiff < 0 ||\n (monthDiff === 0 && today.getDate() < birth.getDate())\n ) {\n age--;\n }\n\n if (age < 0 || age > 150) return \"\";\n return `${age}岁`;\n } catch {\n return \"\";\n }\n};\n\n// 文件大小格式化\nexport const formatFileSize = (\n bytes: any,\n precision = 2,\n binary = true\n): string => {\n try {\n const value = toNumber(bytes);\n if (value < 0 || value > Number.MAX_SAFE_INTEGER) return \"\";\n if (value === 0) return \"0 B\";\n\n const safePrecision = Math.max(0, Math.min(10, Math.floor(precision)));\n const k = binary ? 1024 : 1000;\n const sizes = binary\n ? [\"B\", \"KiB\", \"MiB\", \"GiB\", \"TiB\", \"PiB\"]\n : [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\"];\n const i = Math.min(\n Math.floor(Math.log(value) / Math.log(k)),\n sizes.length - 1\n );\n\n return `${parseFloat((value / Math.pow(k, i)).toFixed(safePrecision))} ${\n sizes[i]\n }`;\n } catch {\n return \"\";\n }\n};\n\n// 手机号格式化\nexport const formatPhone = (phone: any, country = \"CN\"): string => {\n try {\n const value = toString(phone).replace(/\\D/g, \"\");\n if (!value) return \"\";\n\n if (\n country === \"CN\" &&\n value.length === 11 &&\n /^1[3-9]\\d{9}$/.test(value)\n ) {\n return value.replace(/(\\d{3})(\\d{4})(\\d{4})/, \"$1 $2 $3\");\n }\n if (country === \"US\" && value.length === 10) {\n return value.replace(/(\\d{3})(\\d{3})(\\d{4})/, \"($1) $2-$3\");\n }\n return toString(phone);\n } catch {\n return \"\";\n }\n};\n\n// 手机号脱敏\nexport const formatPhoneMask = (phone: any): string => {\n try {\n const value = toString(phone).replace(/\\D/g, \"\");\n if (value.length === 11) {\n return value.replace(/(\\d{3})\\d{4}(\\d{4})/, \"$1****$2\");\n }\n return toString(phone);\n } catch {\n return \"\";\n }\n};\n\n// 邮箱脱敏\nexport const formatEmailMask = (email: any): string => {\n try {\n const value = toString(email);\n if (!value || !value.includes(\"@\")) return \"\";\n\n const [username, domain] = value.split(\"@\");\n if (username.length <= 1) return value;\n if (username.length <= 3) {\n return `${username[0]}*@${domain}`;\n }\n\n const maskedUsername =\n username[0] +\n \"*\".repeat(username.length - 2) +\n username[username.length - 1];\n return `${maskedUsername}@${domain}`;\n } catch {\n return \"\";\n }\n};\n\n// 身份证号脱敏\nexport const formatIdCard = (idCard: any, mask = true): string => {\n try {\n const value = toString(idCard).replace(/\\s/g, \"\");\n\n if (value.length === 18 && /^\\d{17}[\\dXx]$/.test(value)) {\n if (mask) {\n return value.replace(/(\\d{6})\\d{8}(\\d{3}[\\dXx])/, \"$1********$2\");\n }\n return value.replace(/(\\d{6})(\\d{8})(\\d{4})/, \"$1 $2 $3\");\n }\n return \"\";\n } catch {\n return \"\";\n }\n};\n\n// 银行卡号格式化\nexport const formatBankCard = (cardNumber: any, mask = true): string => {\n try {\n const value = toString(cardNumber).replace(/\\s/g, \"\");\n if (!/^\\d{13,19}$/.test(value)) return \"\";\n\n if (mask && value.length >= 8) {\n const start = value.slice(0, 4);\n const end = value.slice(-4);\n const middleLength = value.length - 8;\n const middle = \"*\".repeat(middleLength);\n\n const fullMasked = start + middle + end;\n return fullMasked.replace(/(.{4})/g, \"$1 \").trim();\n }\n\n return value.replace(/(.{4})/g, \"$1 \").trim();\n } catch {\n return \"\";\n }\n};\n\n// 用户名脱敏\nexport const formatUsernameMask = (username: any): string => {\n try {\n const value = toString(username);\n if (value.length <= 1) return value;\n if (value.length === 2) return value[0] + \"*\";\n return value[0] + \"*\".repeat(value.length - 2) + value[value.length - 1];\n } catch {\n return \"\";\n }\n};\n\n// 文本截断\nexport const formatTruncate = (\n text: any,\n maxLength = 50,\n suffix = \"...\"\n): string => {\n try {\n const value = toString(text);\n const safeMaxLength = Math.max(1, Math.min(1000, Math.floor(maxLength)));\n\n if (value.length <= safeMaxLength) return value;\n return value.slice(0, safeMaxLength) + suffix;\n } catch {\n return \"\";\n }\n};\n\n// 首字母大写\nexport const formatCapitalize = (text: any): string => {\n try {\n const value = toString(text);\n if (!value) return \"\";\n return value.charAt(0).toUpperCase() + value.slice(1).toLowerCase();\n } catch {\n return \"\";\n }\n};\n\n// 数组格式化\nexport const formatArray = (value: any, delimiter = \", \"): string => {\n try {\n if (Array.isArray(value)) {\n return value.join(delimiter);\n }\n return toString(value);\n } catch {\n return \"\";\n }\n};\n\n// 性别格式化\nexport const formatGender = (value: any): string => {\n const genderMap: Record<string, string> = {\n \"0\": \"女\",\n \"1\": \"男\",\n \"2\": \"未知\",\n male: \"男\",\n female: \"女\",\n m: \"男\",\n f: \"女\",\n M: \"男\",\n F: \"女\",\n };\n return genderMap[toString(value)] || toString(value);\n};\n\n// 状态格式化\nexport const formatStatus = (\n value: any,\n statusMap?: Record<string, string>\n): string => {\n if (!statusMap) {\n const defaultMap: Record<string, string> = {\n \"0\": \"禁用\",\n \"1\": \"启用\",\n true: \"是\",\n false: \"否\",\n };\n return defaultMap[toString(value)] || toString(value);\n }\n return statusMap[toString(value)] || toString(value);\n};\n\n// 移除 HTML 标签\nexport const formatStripHtml = (value: any): string => {\n try {\n return toString(value).replace(/<[^>]*>/g, \"\");\n } catch {\n return \"\";\n }\n};\n\n/**\n * 根据类型格式化值\n */\nexport function formatByType(\n value: any,\n formatType: FormatType | string,\n options: FormatOptions = {}\n): string {\n if (!formatType || value === undefined || value === null) {\n return toString(value);\n }\n\n switch (formatType) {\n case \"currency\":\n return formatCurrency(value, options.currency, options);\n case \"number\":\n return formatNumber(value, options);\n case \"percent\":\n return formatPercent(value, options.precision);\n case \"compact\":\n return formatCompact(value, options.notation);\n case \"timestamp\":\n return formatTimestamp(value, options.pattern);\n case \"date\":\n return formatDate(value, options);\n case \"dateCustom\":\n return formatDateCustom(value, options.pattern);\n case \"relativeTime\":\n return formatRelativeTime(value);\n case \"duration\":\n return formatDuration(value);\n case \"age\":\n return formatAge(value);\n case \"fileSize\":\n return formatFileSize(value, options.precision, options.binary);\n case \"phone\":\n return formatPhone(value, options.country);\n case \"phoneMask\":\n return formatPhoneMask(value);\n case \"emailMask\":\n return formatEmailMask(value);\n case \"idCard\":\n return formatIdCard(value, options.mask);\n case \"bankCard\":\n return formatBankCard(value, options.mask);\n case \"usernameMask\":\n return formatUsernameMask(value);\n case \"truncate\":\n return formatTruncate(value, options.maxLength, options.suffix);\n case \"capitalize\":\n return formatCapitalize(value);\n case \"array\":\n return formatArray(value, options.delimiter);\n case \"gender\":\n return formatGender(value);\n case \"status\":\n return formatStatus(value, options.statusMap);\n case \"stripHtml\":\n return formatStripHtml(value);\n default:\n return toString(value);\n }\n}\n\nexport default formatByType;\n","/**\n * resolveTokenColor - 解析 Antd Design Token 颜色\n * 支持输入 token 名称(如 colorPrimary)或直接颜色值(如 #1890ff)\n */\n\nimport { theme } from \"antd\";\n\n// 常用 Design Token 映射\nconst TOKEN_MAP: Record<string, string> = {\n // 基础颜色\n colorPrimary: \"colorPrimary\",\n colorSuccess: \"colorSuccess\",\n colorWarning: \"colorWarning\",\n colorError: \"colorError\",\n colorInfo: \"colorInfo\",\n\n // 文本颜色\n colorText: \"colorText\",\n colorTextSecondary: \"colorTextSecondary\",\n colorTextTertiary: \"colorTextTertiary\",\n colorTextQuaternary: \"colorTextQuaternary\",\n colorTextBase: \"colorTextBase\",\n\n // 背景颜色\n colorBgBase: \"colorBgBase\",\n colorBgContainer: \"colorBgContainer\",\n colorBgElevated: \"colorBgElevated\",\n colorBgLayout: \"colorBgLayout\",\n colorBgSpotlight: \"colorBgSpotlight\",\n\n // 边框颜色\n colorBorder: \"colorBorder\",\n colorBorderSecondary: \"colorBorderSecondary\",\n\n // 填充颜色\n colorFill: \"colorFill\",\n colorFillSecondary: \"colorFillSecondary\",\n colorFillTertiary: \"colorFillTertiary\",\n colorFillQuaternary: \"colorFillQuaternary\",\n\n // 链接颜色\n colorLink: \"colorLink\",\n colorLinkHover: \"colorLinkHover\",\n colorLinkActive: \"colorLinkActive\",\n};\n\n// 导出可用的 token 列表\nexport const AVAILABLE_TOKENS = Object.keys(TOKEN_MAP);\n\n// 常用 token 快捷选项\nexport const COMMON_TOKENS = [\n { label: \"主色\", value: \"colorPrimary\" },\n { label: \"成功\", value: \"colorSuccess\" },\n { label: \"警告\", value: \"colorWarning\" },\n { label: \"错误\", value: \"colorError\" },\n { label: \"信息\", value: \"colorInfo\" },\n { label: \"文本\", value: \"colorText\" },\n { label: \"次级文本\", value: \"colorTextSecondary\" },\n { label: \"链接\", value: \"colorLink\" },\n];\n\n/**\n * 判断是否为 token 名称\n */\nexport function isTokenName(value: string): boolean {\n return TOKEN_MAP.hasOwnProperty(value);\n}\n\n/**\n * 使用 Antd theme hook 解析 token 颜色\n * 注意:这是一个 React Hook,必须在组件内部使用\n */\nexport function useResolveTokenColor(\n color: string | undefined\n): string | undefined {\n const { token } = theme.useToken();\n\n if (!color) return undefined;\n\n // 检查是否为 token 名称\n if (isTokenName(color)) {\n const tokenKey = TOKEN_MAP[color];\n return (token as any)[tokenKey] || color;\n }\n\n // 直接返回颜色值\n return color;\n}\n\n/**\n * 非 Hook 版本:需要传入 token 对象\n */\nexport function resolveTokenColorWithToken(\n color: string | undefined,\n token: Record<string, any>\n): string | undefined {\n if (!color) return undefined;\n\n // 检查是否为 token 名称\n if (isTokenName(color)) {\n const tokenKey = TOKEN_MAP[color];\n return token[tokenKey] || color;\n }\n\n // 直接返回颜色值\n return color;\n}\n\nexport default useResolveTokenColor;\n","import React, { useMemo, useCallback } from 'react';\nimport { Button } from 'antd';\nimport type { ButtonProps as AntButtonProps } from 'antd';\nimport * as Icons from '@ant-design/icons';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { parseClickAction, createCommand } from '../../base/actionParser';\nimport type { BaseComponentProps } from '../../types/common';\n\n/**\n * AndButton Props 接口\n */\nexport interface AndButtonProps extends Omit<AntButtonProps, 'onClick'>, BaseComponentProps {\n /** 按钮显示文本 */\n text?: string;\n /** 图标名称,对应 @ant-design/icons 中的图标 */\n iconName?: string;\n /** 点击动作字符串,如 \"submit\"、\"handleClick(@id)\" 或 \"moveUp(@index)\"(迭代器内可用 @index/@dataSet/@dataSetField) */\n clickAction?: string;\n /** 自定义点击处理函数 */\n onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n /** 迭代器内传入的当前索引,供 clickAction 中 @index 解析 */\n index?: number;\n /** 迭代器内传入的 dataSet,供 clickAction 中 @dataSet 解析 */\n dataSet?: string;\n /** 迭代器内传入的 dataSetField,供 clickAction 中 @dataSetField 解析 */\n dataSetField?: string;\n}\n\n/**\n * AndButton 组件\n * 封装 Ant Design Button,支持动态图标和动作解析\n */\nexport const AndButton: React.FC<AndButtonProps> = ({\n id,\n text,\n iconName,\n clickAction,\n sessionId,\n develop,\n onClick,\n children,\n index,\n dataSet,\n dataSetField,\n ...restProps\n}) => {\n const addCommand = useAndStore((state) => state.addCommand);\n\n // 订阅本组件的 props 切片,setProps(sessionId, id, props) 更新时触发重渲染\n const storeProps = useAndStore((state) =>\n sessionId && id ? state.propsStore[`${sessionId}_props`]?.[id] : null\n );\n\n // 合并 props\n const mergedProps = useMemo(() => {\n const baseProps = { ...restProps };\n if (storeProps && typeof storeProps === 'object') {\n Object.keys(storeProps).forEach((key) => {\n if (storeProps[key] !== undefined && storeProps[key] !== null) {\n (baseProps as any)[key] = storeProps[key];\n }\n });\n }\n // 设计器模式下禁用 disabled 属性,确保组件可被选择\n if (develop) {\n (baseProps as any).disabled = false;\n }\n return baseProps;\n }, [restProps, storeProps, develop]);\n\n // 处理图标\n const IconComponent = useMemo(() => {\n const name = storeProps?.iconName || iconName;\n if (name && (Icons as any)[name]) {\n return (Icons as any)[name] as React.ComponentType;\n }\n return null;\n }, [iconName, storeProps?.iconName]);\n\n // 点击处理\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n // 如果有自定义 onClick,优先执行\n if (onClick) {\n onClick(e);\n return;\n }\n\n // 处理动作解析(显式传入 index/dataSet/dataSetField,供 clickAction 中 @index、@dataSet、@dataSetField 解析)\n if (clickAction && sessionId) {\n const { actionName, arg } = parseClickAction(clickAction, {\n id,\n index,\n dataSet,\n dataSetField,\n ...mergedProps,\n });\n const command = createCommand(actionName, arg);\n addCommand(sessionId, command);\n }\n },\n [clickAction, sessionId, id, index, dataSet, dataSetField, mergedProps, addCommand, onClick]\n );\n\n // 显示文本\n const displayText = storeProps?.text || text;\n\n // 兼容性处理:Ant Design Button 废弃了 iconPosition,改用 iconPlacement。\n // 从 mergedProps 中排除自定义 prop(clickAction)及已废弃的 iconPosition,避免传入 DOM 触发 React 警告。\n const { iconPosition, iconPlacement, clickAction: _clickAction, ...otherBtnProps } = mergedProps as any;\n const finalIconPlacement = iconPlacement || iconPosition;\n\n return (\n <Button\n {...otherBtnProps}\n iconPlacement={finalIconPlacement}\n icon={IconComponent ? <IconComponent /> : undefined}\n onClick={handleClick}\n >\n {displayText || children}\n </Button>\n );\n};\n\nexport default AndButton;\n","import React, { useMemo, useCallback, useRef, useEffect } from 'react';\nimport { Input, ConfigProvider } from 'antd';\nimport type { InputProps as AntInputProps } from 'antd';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey, getValidateStoreKey } from '../../base/storeKeyUtils';\nimport { parseChangeAction, createCommand } from '../../base/actionParser';\nimport { processValidationRules, validateWithSchema } from '../../base/validationUtils';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\n// ---------------------------------------------------------------------------\n// 类型定义\n// ---------------------------------------------------------------------------\n\nexport interface InputSemanticStyles {\n root?: React.CSSProperties;\n prefix?: React.CSSProperties;\n input?: React.CSSProperties;\n suffix?: React.CSSProperties;\n count?: React.CSSProperties;\n}\n\nexport interface InputToken {\n activeBorderColor?: string;\n activeShadow?: string;\n addonBg?: string;\n hoverBorderColor?: string;\n inputFontSize?: number;\n inputFontSizeLG?: number;\n inputFontSizeSM?: number;\n paddingBlock?: number;\n paddingBlockLG?: number;\n paddingBlockSM?: number;\n paddingInline?: number;\n paddingInlineLG?: number;\n paddingInlineSM?: number;\n}\n\nexport interface InputValidationRule {\n type?: string;\n required?: boolean;\n message?: string;\n pattern?: string | RegExp;\n min?: number;\n max?: number;\n}\n\nexport interface AndInputProps extends Omit<AntInputProps, 'onChange'>, BaseComponentProps, DataSetConfig {\n changeAction?: string;\n rules?: InputValidationRule[];\n validateOnBlur?: boolean;\n validateOnChange?: boolean;\n onChange?: (value: string, e: React.ChangeEvent<HTMLInputElement>) => void;\n styles?: InputSemanticStyles;\n token?: InputToken;\n}\n\n// ---------------------------------------------------------------------------\n// 常量与纯函数\n// ---------------------------------------------------------------------------\n\nconst SKIP_PROPS_KEYS = ['value', 'validateStatus', 'help'] as const;\nconst VALIDATE_DEBOUNCE_MS = 200;\n\nfunction filterEmptyToken(token: InputToken | undefined): Record<string, unknown> | undefined {\n if (!token) return undefined;\n const result: Record<string, unknown> = {};\n Object.entries(token).forEach(([key, value]) => {\n if (value !== '' && value !== undefined && value !== null) result[key] = value;\n });\n return Object.keys(result).length > 0 ? result : undefined;\n}\n\nfunction mergeBasePropsWithStore(\n base: Record<string, unknown>,\n storeProps: Record<string, unknown> | null,\n options: { develop?: boolean }\n): Record<string, unknown> {\n const out = { ...base };\n if (storeProps && typeof storeProps === 'object') {\n Object.keys(storeProps).forEach((key) => {\n if (!SKIP_PROPS_KEYS.includes(key as any) && storeProps[key] !== undefined && storeProps[key] !== null) {\n out[key] = storeProps[key];\n }\n });\n }\n if (options.develop) {\n const isDisabled = out.disabled;\n (out as any).disabled = false;\n (out as any).readOnly = true;\n if (isDisabled) {\n (out as any).className = `${(out.className as string) || ''} ant-input-disabled`.trim();\n }\n }\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// 组件\n// ---------------------------------------------------------------------------\n\ntype PropsWithExtras = AndInputProps & Record<string, unknown>;\n\nconst AndInputInner: React.FC<AndInputProps> = (props) => {\n const {\n id,\n sessionId,\n develop,\n dataSet,\n dataSetField,\n changeAction,\n onChange,\n value: propValue,\n styles,\n token,\n rules,\n validateOnChange,\n validateOnBlur,\n focusAction: _focusAction,\n blurAction: _blurAction,\n pressEnterAction: _pressEnterAction,\n bordered: _bordered,\n addonAfter: _addonAfter,\n addonBefore: _addonBefore,\n ...restProps\n } = props as PropsWithExtras;\n\n const lastChangeValueRef = useRef('');\n const validateTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const addCommand = useAndStore((s) => s.addCommand);\n const getDataSet = useAndStore((s) => s.getDataSet);\n const setDataSet = useAndStore((s) => s.setDataSet);\n const getProps = useAndStore((s) => s.getProps);\n const setProps = useAndStore((s) => s.setProps);\n const setValidateResult = useAndStore((s) => s.setValidateResult);\n\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n const storeProps = useAndStore((s) =>\n sessionId && id ? s.propsStore[`${sessionId}_props`]?.[id] ?? null : null\n );\n const validateStoreKey = useMemo(\n () => getValidateStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n const validateErrorMsg = useAndStore((s) =>\n validateStoreKey && dataSetField\n ? (s.validateStore[validateStoreKey]?.[dataSetField] ?? '')\n : ''\n );\n const storeValue = useAndStore((s) =>\n dataSetKey && dataSetField ? s.getDataSet(dataSetKey, dataSetField) : undefined\n );\n /** 监听 validateAction:Extend 通过 updateItem(dataSetKey_validateAction, { validate: ts }) 触发整表校验 */\n const validateActionKey = useMemo(\n () => (dataSet ? getDataSetStoreKey(sessionId, `${dataSet}_validateAction`) : undefined),\n [sessionId, dataSet]\n );\n const validateActionTrigger = useAndStore((s) =>\n validateActionKey\n ? (s.dataSets[validateActionKey] as { validate?: number } | undefined)?.validate\n : undefined\n );\n\n const displayValue = useMemo(() => {\n if (storeValue !== undefined) return storeValue;\n if (storeProps?.value !== undefined) return storeProps.value;\n return propValue;\n }, [storeValue, storeProps?.value, propValue]);\n\n const mergedProps = useMemo(\n () => mergeBasePropsWithStore(restProps as Record<string, unknown>, storeProps ?? null, { develop }),\n [restProps, storeProps, develop]\n );\n\n const applyValidateResult = useCallback(\n (help: string) => {\n const msg = help ?? '';\n if (sessionId && dataSet && dataSetField) setValidateResult(sessionId, dataSet, dataSetField, msg);\n if (sessionId && id) {\n const current = getProps(sessionId, id) || {};\n setProps(sessionId, id, { ...current, validateStatus: msg ? 'error' : undefined, help: msg });\n }\n },\n [sessionId, dataSet, dataSetField, id, setValidateResult, getProps, setProps]\n );\n\n const validate = useCallback(\n (value: string) => {\n const processedRules = processValidationRules(rules || []);\n validateWithSchema(\n processedRules,\n value,\n () => applyValidateResult(''),\n (errs) => applyValidateResult(errs[0]?.message ?? '')\n );\n },\n [rules, applyValidateResult]\n );\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n lastChangeValueRef.current = newValue;\n if (onChange) {\n onChange(newValue, e);\n return;\n }\n if (dataSetKey && dataSetField) {\n setDataSet(dataSetKey, dataSetField, newValue);\n }\n if (changeAction && sessionId) {\n const { actionName, arg } = parseChangeAction(changeAction, newValue, {\n id,\n dataSet,\n dataSetField,\n ...mergedProps,\n });\n addCommand(sessionId, createCommand(actionName, arg));\n }\n if (validateOnChange) {\n if (validateTimerRef.current) clearTimeout(validateTimerRef.current);\n validateTimerRef.current = setTimeout(() => {\n validateTimerRef.current = null;\n validate(newValue);\n }, VALIDATE_DEBOUNCE_MS);\n }\n },\n [\n onChange,\n dataSetKey,\n dataSetField,\n setDataSet,\n changeAction,\n sessionId,\n id,\n mergedProps,\n addCommand,\n validateOnChange,\n validate,\n ]\n );\n\n const handleBlur = useCallback(() => {\n if (!validateOnBlur) return;\n const valueToValidate =\n dataSetKey && dataSetField\n ? String(getDataSet(dataSetKey, dataSetField) ?? '')\n : lastChangeValueRef.current;\n validate(valueToValidate);\n }, [validateOnBlur, dataSetKey, dataSetField, getDataSet, validate]);\n\n useEffect(\n () => () => {\n if (validateTimerRef.current) clearTimeout(validateTimerRef.current);\n },\n []\n );\n\n useEffect(() => {\n if (validateActionTrigger == null || !dataSetKey || !dataSetField) return;\n const value = String(getDataSet(dataSetKey, dataSetField) ?? '');\n validate(value);\n }, [validateActionTrigger, dataSetKey, dataSetField, getDataSet, validate]);\n\n const filteredToken = useMemo(() => filterEmptyToken(token), [token]);\n const themeConfig = useMemo(\n () => (filteredToken ? { components: { Input: filteredToken } } : undefined),\n [filteredToken]\n );\n\n const help = !develop\n ? (sessionId && dataSet && dataSetField ? validateErrorMsg : storeProps?.help ?? '')\n : undefined;\n const validateStatus = !develop && help ? 'error' : undefined;\n\n const inputEl = (\n <>\n <Input\n {...(mergedProps as any)}\n value={displayValue}\n onChange={handleChange}\n onBlur={handleBlur}\n status={validateStatus}\n styles={styles}\n />\n {help && <div style={{ color: '#ff4d4f', fontSize: 12, marginTop: 4 }}>{help}</div>}\n </>\n );\n\n return themeConfig ? <ConfigProvider theme={themeConfig}>{inputEl}</ConfigProvider> : inputEl;\n};\n\nAndInputInner.displayName = 'AndInput';\n\nexport const AndInput = React.memo(AndInputInner);\nexport default AndInput;\n","import React, { useMemo, useCallback, useRef, useEffect } from \"react\";\nimport { InputNumber, Space } from \"antd\";\nimport type { InputNumberProps as AntInputNumberProps } from \"antd\";\nimport { useAndStore } from \"../../base/store/useAndStore\";\nimport { getDataSetStoreKey } from \"../../base/storeKeyUtils\";\nimport { createCommand } from \"../../base/actionParser\";\nimport { useFieldValidation } from \"../../base/useFieldValidation\";\nimport { mergeStoreProps } from \"../../base/storePropsUtils\";\nimport type { BaseComponentProps, DataSetConfig } from \"../../types/common\";\nimport clsx from \"clsx\";\n\nconst VALIDATE_DEBOUNCE_MS = 200;\n\nexport interface AndInputNumberProps\n extends Omit<AntInputNumberProps, \"onChange\">,\n BaseComponentProps,\n DataSetConfig {\n rules?: Array<{ type?: string; required?: boolean; message?: string; min?: number; max?: number }>;\n validateOnBlur?: boolean;\n validateOnChange?: boolean;\n changeAction?: string;\n pressEnterAction?: string;\n stepAction?: string;\n onChange?: (value: number | null) => void;\n}\n\nexport const AndInputNumber: React.FC<AndInputNumberProps> = ({\n id,\n sessionId,\n develop,\n dataSet,\n dataSetField,\n rules,\n validateOnBlur,\n validateOnChange,\n changeAction,\n pressEnterAction,\n stepAction,\n onChange,\n defaultValue,\n value: propValue,\n ...restProps\n}) => {\n const addCommand = useAndStore((s) => s.addCommand);\n const setDataSet = useAndStore((s) => s.setDataSet);\n const validateTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n const storeProps = useAndStore((s) =>\n sessionId && id ? s.propsStore[`${sessionId}_props`]?.[id] ?? null : null\n );\n const storeValue = useAndStore((s) =>\n dataSetKey && dataSetField ? s.getDataSet(dataSetKey, dataSetField) : undefined\n );\n\n const { validate, help } = useFieldValidation({\n rules,\n dataSet,\n dataSetField,\n sessionId,\n id,\n develop,\n });\n\n const displayValue = useMemo(() => {\n if (storeValue !== undefined) return storeValue;\n if (storeProps?.value !== undefined) return storeProps.value;\n return propValue;\n }, [storeValue, storeProps?.value, propValue]);\n\n const handleAction = useCallback(\n (actionConfig: string | undefined, actionType: string, value: any) => {\n if (actionConfig && sessionId) {\n addCommand(sessionId, createCommand(actionConfig, { type: actionType, value }));\n }\n },\n [sessionId, addCommand]\n );\n\n const handleChange = useCallback(\n (value: number | null) => {\n if (onChange) {\n onChange(value);\n return;\n }\n if (dataSetKey && dataSetField) setDataSet(dataSetKey, dataSetField, value);\n if (validateOnChange) {\n if (validateTimerRef.current) clearTimeout(validateTimerRef.current);\n validateTimerRef.current = setTimeout(() => {\n validateTimerRef.current = null;\n validate(value);\n }, VALIDATE_DEBOUNCE_MS);\n }\n handleAction(changeAction, \"change\", value);\n },\n [onChange, dataSetKey, dataSetField, setDataSet, validateOnChange, validate, changeAction, handleAction]\n );\n\n const handleBlur = useCallback(() => {\n if (!validateOnBlur) return;\n validate(displayValue);\n }, [validateOnBlur, validate, displayValue]);\n\n const handlePressEnter = useCallback(() => {\n handleAction(pressEnterAction, \"pressEnter\", displayValue);\n }, [pressEnterAction, handleAction, displayValue]);\n\n const handleStep = useCallback(\n (value: number, info: { offset: number | string; type: \"up\" | \"down\" }) => {\n handleAction(stepAction, \"step\", { value, type: info.type });\n },\n [stepAction, handleAction]\n );\n\n useEffect(\n () => () => {\n if (validateTimerRef.current) clearTimeout(validateTimerRef.current);\n },\n []\n );\n\n useEffect(() => {\n if (\n defaultValue !== undefined &&\n displayValue === undefined &&\n dataSetKey &&\n dataSetField\n ) {\n setDataSet(dataSetKey, dataSetField, defaultValue);\n }\n }, [defaultValue, displayValue, dataSetKey, dataSetField, setDataSet]);\n\n const mergedRestProps = useMemo(\n () => mergeStoreProps(restProps as Record<string, any>, storeProps ?? undefined),\n [restProps, storeProps]\n );\n const { addonBefore, addonAfter, style, ...otherProps } = mergedRestProps;\n\n const inputNode = (\n <InputNumber\n {...otherProps}\n disabled={develop ? false : otherProps.disabled}\n readOnly={develop ? true : otherProps.readOnly}\n className={clsx(otherProps.className, {\n \"ant-input-number-disabled\": develop && otherProps.disabled,\n })}\n value={displayValue}\n onChange={handleChange}\n onBlur={handleBlur}\n onPressEnter={handlePressEnter}\n onStep={handleStep}\n status={help ? (\"error\" as const) : undefined}\n style={{ width: \"100%\", ...style }}\n />\n );\n\n return (\n <div style={{ width: \"100%\" }}>\n {addonBefore || addonAfter ? (\n <Space.Compact style={{ width: \"100%\" }}>\n {addonBefore && (\n <div\n style={{\n padding: \"0 11px\",\n border: \"1px solid #d9d9d9\",\n borderRight: 0,\n background: \"#fafafa\",\n display: \"flex\",\n alignItems: \"center\",\n borderRadius: \"6px 0 0 6px\",\n color: \"rgba(0, 0, 0, 0.88)\",\n fontSize: 14,\n }}\n >\n {addonBefore}\n </div>\n )}\n {inputNode}\n {addonAfter && (\n <div\n style={{\n padding: \"0 11px\",\n border: \"1px solid #d9d9d9\",\n borderLeft: 0,\n background: \"#fafafa\",\n display: \"flex\",\n alignItems: \"center\",\n borderRadius: \"0 6px 6px 0\",\n color: \"rgba(0, 0, 0, 0.88)\",\n fontSize: 14,\n }}\n >\n {addonAfter}\n </div>\n )}\n </Space.Compact>\n ) : (\n inputNode\n )}\n {help && <div style={{ color: \"#ff4d4f\", fontSize: 12, marginTop: 4 }}>{help}</div>}\n </div>\n );\n};\n\nexport default AndInputNumber;\n","import React, { useMemo, useCallback, useRef, useEffect } from \"react\";\nimport { Input } from \"antd\";\nimport type { TextAreaProps as AntTextAreaProps } from \"antd/es/input\";\nimport { useAndStore } from \"../../base/store/useAndStore\";\nimport { getDataSetStoreKey } from \"../../base/storeKeyUtils\";\nimport { parseChangeAction, createCommand } from \"../../base/actionParser\";\nimport { useFieldValidation } from \"../../base/useFieldValidation\";\nimport type { BaseComponentProps, DataSetConfig } from \"../../types/common\";\n\nconst { TextArea } = Input;\nconst VALIDATE_DEBOUNCE_MS = 200;\n\nexport interface AndInputAreaProps\n extends Omit<AntTextAreaProps, \"onChange\">,\n BaseComponentProps,\n DataSetConfig {\n rules?: Array<{ type?: string; required?: boolean; message?: string; pattern?: string | RegExp; min?: number; max?: number }>;\n validateOnBlur?: boolean;\n validateOnChange?: boolean;\n changeAction?: string;\n pressEnterAction?: string;\n onChange?: (value: string, e: React.ChangeEvent<HTMLTextAreaElement>) => void;\n}\n\nexport const AndInputArea: React.FC<AndInputAreaProps> = ({\n id,\n sessionId,\n develop,\n dataSet,\n dataSetField,\n rules,\n validateOnBlur,\n validateOnChange,\n changeAction,\n pressEnterAction,\n onChange,\n value: propValue,\n defaultValue,\n ...restProps\n}) => {\n const addCommand = useAndStore((s) => s.addCommand);\n const setDataSet = useAndStore((s) => s.setDataSet);\n const validateTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n const storeProps = useAndStore((s) =>\n sessionId && id ? s.propsStore[`${sessionId}_props`]?.[id] ?? null : null\n );\n const storeValue = useAndStore((s) =>\n dataSetKey && dataSetField ? s.getDataSet(dataSetKey, dataSetField) : undefined\n );\n\n const { validate, help } = useFieldValidation({\n rules,\n dataSet,\n dataSetField,\n sessionId,\n id,\n develop,\n });\n\n const displayValue = useMemo(() => {\n if (storeValue !== undefined) return storeValue;\n if (storeProps?.value !== undefined) return storeProps.value;\n return propValue ?? defaultValue;\n }, [storeValue, storeProps?.value, propValue, defaultValue]);\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const newValue = e.target.value;\n if (onChange) {\n onChange(newValue, e);\n return;\n }\n if (dataSetKey && dataSetField) setDataSet(dataSetKey, dataSetField, newValue);\n if (changeAction && sessionId) {\n const { actionName, arg } = parseChangeAction(changeAction, newValue, {\n id,\n dataSet,\n dataSetField,\n });\n addCommand(sessionId, createCommand(actionName, arg));\n }\n if (validateOnChange) {\n if (validateTimerRef.current) clearTimeout(validateTimerRef.current);\n validateTimerRef.current = setTimeout(() => {\n validateTimerRef.current = null;\n validate(newValue);\n }, VALIDATE_DEBOUNCE_MS);\n }\n },\n [\n onChange,\n dataSetKey,\n dataSetField,\n setDataSet,\n changeAction,\n sessionId,\n id,\n addCommand,\n validateOnChange,\n validate,\n ]\n );\n\n const handleBlur = useCallback(() => {\n if (!validateOnBlur) return;\n validate(displayValue);\n }, [validateOnBlur, validate, displayValue]);\n\n const handlePressEnter = useCallback(\n (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (restProps.onPressEnter) {\n restProps.onPressEnter(e);\n return;\n }\n if (pressEnterAction && sessionId && !e.shiftKey) {\n const { actionName, arg } = parseChangeAction(pressEnterAction, displayValue, {\n id,\n dataSet,\n dataSetField,\n });\n addCommand(sessionId, createCommand(actionName, arg));\n }\n },\n [restProps.onPressEnter, pressEnterAction, sessionId, displayValue, id, dataSet, dataSetField, addCommand]\n );\n\n useEffect(\n () => () => {\n if (validateTimerRef.current) clearTimeout(validateTimerRef.current);\n },\n []\n );\n\n return (\n <div style={{ width: \"100%\" }}>\n <TextArea\n {...restProps}\n disabled={develop ? false : restProps.disabled}\n value={displayValue}\n onChange={handleChange}\n onBlur={handleBlur}\n onPressEnter={handlePressEnter}\n status={help ? (\"error\" as const) : undefined}\n />\n {help && (\n <div style={{ color: \"#ff4d4f\", fontSize: 12, marginTop: 4 }}>{help}</div>\n )}\n </div>\n );\n};\n\nexport default AndInputArea;\n","import React, { useMemo, useCallback, useRef, useEffect } from \"react\";\nimport { Input } from \"antd\";\nimport type { PasswordProps as AntPasswordProps } from \"antd/es/input\";\nimport { useAndStore } from \"../../base/store/useAndStore\";\nimport { getDataSetStoreKey } from \"../../base/storeKeyUtils\";\nimport { parseChangeAction, createCommand } from \"../../base/actionParser\";\nimport { useFieldValidation } from \"../../base/useFieldValidation\";\nimport type { BaseComponentProps, DataSetConfig } from \"../../types/common\";\n\nconst { Password } = Input;\nconst VALIDATE_DEBOUNCE_MS = 200;\n\nexport interface AndInputPasswordProps\n extends Omit<AntPasswordProps, \"onChange\">,\n BaseComponentProps,\n DataSetConfig {\n rules?: Array<{ type?: string; required?: boolean; message?: string; pattern?: string | RegExp; min?: number; max?: number }>;\n validateOnBlur?: boolean;\n validateOnChange?: boolean;\n changeAction?: string;\n onChange?: (value: string, e: React.ChangeEvent<HTMLInputElement>) => void;\n}\n\nexport const AndInputPassword: React.FC<AndInputPasswordProps> = ({\n id,\n sessionId,\n develop,\n dataSet,\n dataSetField,\n rules,\n validateOnBlur,\n validateOnChange,\n changeAction,\n onChange,\n value: propValue,\n defaultValue,\n ...restProps\n}) => {\n const addCommand = useAndStore((s) => s.addCommand);\n const setDataSet = useAndStore((s) => s.setDataSet);\n const validateTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n const storeProps = useAndStore((s) =>\n sessionId && id ? s.propsStore[`${sessionId}_props`]?.[id] ?? null : null\n );\n const storeValue = useAndStore((s) =>\n dataSetKey && dataSetField ? s.getDataSet(dataSetKey, dataSetField) : undefined\n );\n\n const { validate, help } = useFieldValidation({\n rules,\n dataSet,\n dataSetField,\n sessionId,\n id,\n develop,\n });\n\n const displayValue = useMemo(() => {\n if (storeValue !== undefined) return storeValue;\n if (storeProps?.value !== undefined) return storeProps.value;\n return propValue ?? defaultValue;\n }, [storeValue, storeProps?.value, propValue, defaultValue]);\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n if (onChange) {\n onChange(newValue, e);\n return;\n }\n if (dataSetKey && dataSetField) setDataSet(dataSetKey, dataSetField, newValue);\n if (changeAction && sessionId) {\n const { actionName, arg } = parseChangeAction(changeAction, newValue, {\n id,\n dataSet,\n dataSetField,\n });\n addCommand(sessionId, createCommand(actionName, arg));\n }\n if (validateOnChange) {\n if (validateTimerRef.current) clearTimeout(validateTimerRef.current);\n validateTimerRef.current = setTimeout(() => {\n validateTimerRef.current = null;\n validate(newValue);\n }, VALIDATE_DEBOUNCE_MS);\n }\n },\n [\n onChange,\n dataSetKey,\n dataSetField,\n setDataSet,\n changeAction,\n sessionId,\n id,\n addCommand,\n validateOnChange,\n validate,\n ]\n );\n\n const handleBlur = useCallback(() => {\n if (!validateOnBlur) return;\n validate(displayValue);\n }, [validateOnBlur, validate, displayValue]);\n\n useEffect(\n () => () => {\n if (validateTimerRef.current) clearTimeout(validateTimerRef.current);\n },\n []\n );\n\n return (\n <div style={{ width: \"100%\" }}>\n <Password\n {...restProps}\n disabled={develop ? false : restProps.disabled}\n value={displayValue}\n onChange={handleChange}\n onBlur={handleBlur}\n status={help ? (\"error\" as const) : undefined}\n />\n {help && (\n <div style={{ color: \"#ff4d4f\", fontSize: 12, marginTop: 4 }}>{help}</div>\n )}\n </div>\n );\n};\n\nexport default AndInputPassword;\n","import React, { useMemo, useCallback } from 'react';\nimport { Input } from 'antd';\nimport type { SearchProps as AntSearchProps } from 'antd/es/input';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport { parseChangeAction, createCommand } from '../../base/actionParser';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\nconst { Search } = Input;\n\n/**\n * AndInputSearch Props 接口\n */\nexport interface AndInputSearchProps extends Omit<AntSearchProps, 'onChange' | 'onSearch'>, BaseComponentProps, DataSetConfig {\n changeAction?: string;\n searchAction?: string;\n onChange?: (value: string) => void;\n onSearch?: (value: string) => void;\n}\n\nexport const AndInputSearch: React.FC<AndInputSearchProps> = ({\n id,\n sessionId,\n develop,\n dataSet,\n dataSetField,\n changeAction,\n searchAction,\n onChange,\n onSearch,\n value: propValue,\n defaultValue,\n ...restProps\n}) => {\n const addCommand = useAndStore((state) => state.addCommand);\n const getDataSet = useAndStore((state) => state.getDataSet);\n const setDataSet = useAndStore((state) => state.setDataSet);\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n\n const storeValue = useMemo(() => {\n if (dataSetKey && dataSetField) return getDataSet(dataSetKey, dataSetField);\n return undefined;\n }, [dataSetKey, dataSetField, getDataSet]);\n\n const displayValue = useMemo(() => storeValue ?? propValue ?? defaultValue, [storeValue, propValue, defaultValue]);\n\n const handleChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n if (onChange) { onChange(newValue); return; }\n if (dataSetKey && dataSetField) setDataSet(dataSetKey, dataSetField, newValue);\n if (changeAction && sessionId) {\n const { actionName, arg } = parseChangeAction(changeAction, newValue, { id, dataSet, dataSetField });\n addCommand(sessionId, createCommand(actionName, arg));\n }\n }, [onChange, dataSetKey, dataSetField, setDataSet, changeAction, sessionId, id, addCommand]);\n\n const handleSearch = useCallback((value: string) => {\n if (onSearch) { onSearch(value); return; }\n if (searchAction && sessionId) {\n addCommand(sessionId, createCommand(searchAction, value));\n }\n }, [onSearch, searchAction, sessionId, addCommand]);\n\n return <Search {...restProps} disabled={develop ? false : restProps.disabled} value={displayValue} onChange={handleChange} onSearch={handleSearch} />;\n};\n\nexport default AndInputSearch;\n","import React, { useMemo, useCallback, useRef, useEffect } from 'react';\nimport { Select } from 'antd';\nimport type { SelectProps as AntSelectProps } from 'antd';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport { parseChangeAction, createCommand } from '../../base/actionParser';\nimport { useFieldValidation } from '../../base/useFieldValidation';\nimport { mergeStoreProps } from '../../base/storePropsUtils';\nimport { useDictOptions, useRemoteOptions } from '../../base/hooks/useApiService';\nimport { findDictOptionByValue } from '../../config';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\nconst VALIDATE_DEBOUNCE_MS = 200;\n\n// 选项配置接口\ninterface OptionsCfg {\n url?: string;\n codeKey?: string;\n labelKey?: string;\n /** 请求时的查询参数,如 { pageSize: 100, status: 0 },与 url 一起传给远程接口 */\n params?: Record<string, any>;\n /**\n * 响应中选项数组所在字段名。不传时:若响应/response.data 本身为数组则直接用,否则取 list 或 records。\n * 指定后从 response/response.data 的该字段取数组,如 \"children\" 表示从 data.children 取选项列表。\n */\n field?: string;\n}\n\n/**\n * AndSelect Props 接口\n */\nexport interface AndSelectProps extends Omit<AntSelectProps, 'onChange'>, BaseComponentProps, DataSetConfig {\n /** 是否启用字典 */\n enableDict?: boolean;\n /** 字典类型 */\n dictType?: string;\n /** 远程选项配置 */\n optionsCfg?: OptionsCfg;\n /** 校验规则 */\n rules?: any[];\n /** 失焦时校验 */\n validateOnBlur?: boolean;\n /** 修改时校验 */\n validateOnChange?: boolean;\n /** 变更动作 */\n changeAction?: string;\n /** 自定义变更处理函数 */\n onChange?: (value: any, option: any) => void;\n /** 迭代器内当前行序号,供 changeAction 使用 @index 占位符 */\n index?: number;\n}\n\n/**\n * AndSelect 组件\n * 封装 Ant Design Select,支持字典、远程数据和动作解析\n */\nexport const AndSelect: React.FC<AndSelectProps> = ({\n id,\n sessionId,\n develop,\n dataSet,\n dataSetField,\n enableDict,\n dictType,\n optionsCfg,\n rules,\n validateOnBlur,\n validateOnChange,\n changeAction,\n onChange,\n options: propOptions,\n defaultValue,\n value: propValue,\n index,\n showArrow: _showArrow,\n remoteUrl: _remoteUrl,\n searchAction: _searchAction,\n selectAction: _selectAction,\n deselectAction: _deselectAction,\n dictCode: _dictCode,\n dropdownMatchSelectWidth: _dropdownMatchSelectWidth,\n ...restProps\n}: AndSelectProps & Record<string, any>) => {\n const addCommand = useAndStore((s) => s.addCommand);\n const setDataSet = useAndStore((s) => s.setDataSet);\n const validateTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n const storeProps = useAndStore((s) =>\n sessionId && id ? s.propsStore[`${sessionId}_props`]?.[id] ?? null : null\n );\n const storeValue = useAndStore((s) =>\n dataSetKey && dataSetField ? s.getDataSet(dataSetKey, dataSetField) : undefined\n );\n\n // 优先使用 propsStore 中的 optionsCfg,以便 setProps 更新配置时触发重新请求\n const effectiveOptionsCfg = useMemo(\n () => (storeProps?.optionsCfg != null ? storeProps.optionsCfg : optionsCfg),\n [storeProps?.optionsCfg, optionsCfg]\n );\n\n const { options: dictOptions, loading: dictLoading } = useDictOptions(\n _dictCode || (enableDict ? dictType : undefined)\n );\n const { options: remoteOptions, loading: remoteLoading } = useRemoteOptions(\n effectiveOptionsCfg?.url,\n {\n valueKey: effectiveOptionsCfg?.codeKey || 'value',\n labelKey: effectiveOptionsCfg?.labelKey || 'label',\n immediate: !!effectiveOptionsCfg?.url,\n params: effectiveOptionsCfg?.params,\n field: effectiveOptionsCfg?.field,\n }\n );\n const isLoading = dictLoading || remoteLoading;\n\n const { validate, help } = useFieldValidation({\n rules,\n dataSet,\n dataSetField,\n sessionId,\n id,\n develop,\n });\n\n const rawDisplayValue = useMemo(() => {\n if (storeValue !== undefined && storeValue !== null && storeValue !== '') {\n return storeValue;\n }\n if (storeProps?.value !== undefined) return storeProps.value;\n return propValue ?? defaultValue;\n }, [storeValue, storeProps?.value, propValue, defaultValue]);\n\n const mergedProps = useMemo(\n () => mergeStoreProps(restProps as Record<string, any>, storeProps ?? undefined),\n [restProps, storeProps]\n );\n\n // 计算最终选项:storeProps.options > 远程 > 字典 > 配置\n const finalOptions = useMemo(() => {\n if (storeProps?.options && Array.isArray(storeProps.options)) return storeProps.options;\n if (effectiveOptionsCfg?.url && remoteOptions.length > 0) return remoteOptions;\n if ((_dictCode || (enableDict && dictType)) && dictOptions.length > 0) return dictOptions;\n return propOptions || [];\n }, [storeProps?.options, effectiveOptionsCfg?.url, remoteOptions, _dictCode, enableDict, dictType, dictOptions, propOptions]);\n\n // 字典 value 多为 string,实际数据可能为 number,需用选项中的 value 以保证 antd Select 正确选中\n const displayValue = useMemo(() => {\n if (finalOptions.length === 0) return rawDisplayValue;\n if (Array.isArray(rawDisplayValue)) {\n return rawDisplayValue.map((v) => findDictOptionByValue(finalOptions, v)?.value ?? v);\n }\n const matched = findDictOptionByValue(finalOptions, rawDisplayValue);\n return matched?.value ?? rawDisplayValue;\n }, [rawDisplayValue, finalOptions]);\n\n const handleChange = useCallback(\n (value: any, option: any) => {\n if (onChange) {\n onChange(value, option);\n return;\n }\n if (dataSetKey && dataSetField) setDataSet(dataSetKey, dataSetField, value);\n if (validateOnChange) {\n if (validateTimerRef.current) clearTimeout(validateTimerRef.current);\n validateTimerRef.current = setTimeout(() => {\n validateTimerRef.current = null;\n validate(value);\n }, VALIDATE_DEBOUNCE_MS);\n }\n if (changeAction && sessionId) {\n const { actionName, arg } = parseChangeAction(changeAction, value, {\n id,\n dataSet,\n dataSetField,\n index,\n });\n addCommand(sessionId, createCommand(actionName, arg));\n }\n },\n [\n onChange,\n dataSetKey,\n dataSetField,\n setDataSet,\n validateOnChange,\n validate,\n changeAction,\n sessionId,\n id,\n index,\n addCommand,\n ]\n );\n\n const handleBlur = useCallback(() => {\n if (!validateOnBlur) return;\n validate(displayValue);\n }, [validateOnBlur, validate, displayValue]);\n\n useEffect(\n () => () => {\n if (validateTimerRef.current) clearTimeout(validateTimerRef.current);\n },\n []\n );\n\n // 过滤选项\n const filterOption = useCallback((input: string, option: any) => {\n return (option?.label ?? '').toLowerCase().includes(input.toLowerCase());\n }, []);\n\n return (\n <div style={{ width: '100%' }}>\n <Select\n {...mergedProps}\n disabled={develop ? false : mergedProps.disabled}\n open={develop ? false : undefined}\n value={displayValue}\n options={finalOptions}\n onChange={handleChange}\n onBlur={handleBlur}\n filterOption={filterOption}\n loading={isLoading}\n status={help ? (\"error\" as const) : undefined}\n style={{ width: '100%', ...mergedProps.style }}\n />\n {help && (\n <div style={{ color: '#ff4d4f', fontSize: 12, marginTop: 4 }}>{help}</div>\n )}\n </div>\n );\n};\n\nexport default AndSelect;\n","import React, { useMemo, useCallback } from \"react\";\nimport { Switch } from \"antd\";\nimport type { SwitchProps as AntSwitchProps } from \"antd\";\nimport { useAndStore } from \"../../base/store/useAndStore\";\nimport { getDataSetStoreKey } from \"../../base/storeKeyUtils\";\nimport { parseChangeAction, createCommand } from \"../../base/actionParser\";\nimport { useFieldValidation } from \"../../base/useFieldValidation\";\nimport type { BaseComponentProps, DataSetConfig } from \"../../types/common\";\n\nexport interface AndSwitchProps\n extends Omit<AntSwitchProps, \"onChange\">,\n BaseComponentProps,\n DataSetConfig {\n rules?: Array<{ type?: string; required?: boolean; message?: string }>;\n validateOnBlur?: boolean;\n validateOnChange?: boolean;\n changeAction?: string;\n onChange?: (checked: boolean) => void;\n}\n\nexport const AndSwitch: React.FC<AndSwitchProps> = ({\n id,\n sessionId,\n develop,\n dataSet,\n dataSetField,\n rules,\n validateOnBlur,\n validateOnChange,\n changeAction,\n onChange,\n checked: propChecked,\n defaultChecked,\n ...restProps\n}) => {\n const addCommand = useAndStore((s) => s.addCommand);\n const setDataSet = useAndStore((s) => s.setDataSet);\n\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n const storeProps = useAndStore((s) =>\n sessionId && id ? s.propsStore[`${sessionId}_props`]?.[id] ?? null : null\n );\n const storeValue = useAndStore((s) =>\n dataSetKey && dataSetField ? s.getDataSet(dataSetKey, dataSetField) : undefined\n );\n\n const { validate, help } = useFieldValidation({\n rules,\n dataSet,\n dataSetField,\n sessionId,\n id,\n develop,\n });\n\n const displayChecked = useMemo(() => {\n if (storeValue !== undefined) return Boolean(storeValue);\n if (storeProps?.checked !== undefined) return storeProps.checked;\n return propChecked ?? defaultChecked;\n }, [storeValue, storeProps?.checked, propChecked, defaultChecked]);\n\n const handleChange = useCallback(\n (checked: boolean) => {\n if (onChange) {\n onChange(checked);\n return;\n }\n if (dataSetKey && dataSetField) setDataSet(dataSetKey, dataSetField, checked);\n if (validateOnChange) validate(checked);\n if (changeAction && sessionId) {\n const { actionName, arg } = parseChangeAction(changeAction, checked, {\n id,\n dataSet,\n dataSetField,\n });\n addCommand(sessionId, createCommand(actionName, arg));\n }\n },\n [\n onChange,\n dataSetKey,\n dataSetField,\n setDataSet,\n validateOnChange,\n validate,\n changeAction,\n sessionId,\n id,\n addCommand,\n ]\n );\n\n const handleBlur = useCallback(() => {\n if (!validateOnBlur) return;\n validate(displayChecked);\n }, [validateOnBlur, validate, displayChecked]);\n\n return (\n <div style={{ display: \"inline-block\" }} onBlur={handleBlur}>\n <Switch\n {...restProps}\n disabled={develop ? false : restProps.disabled}\n checked={displayChecked}\n onChange={handleChange}\n />\n {help && (\n <div style={{ color: \"#ff4d4f\", fontSize: 12, marginTop: 4 }}>{help}</div>\n )}\n </div>\n );\n};\n\nexport default AndSwitch;\n","import React, { useMemo, useCallback, useEffect } from 'react';\nimport { DatePicker } from 'antd';\nimport type { DatePickerProps as AntDatePickerProps } from 'antd';\nimport dayjs, { Dayjs } from 'dayjs';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport { parseChangeAction, createCommand } from '../../base/actionParser';\nimport { useFieldValidation } from '../../base/useFieldValidation';\nimport { mergeStoreProps } from '../../base/storePropsUtils';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\n/**\n * AndDatePicker Props 接口\n */\nexport interface AndDatePickerProps extends Omit<AntDatePickerProps, 'onChange' | 'value'>, BaseComponentProps, DataSetConfig {\n /** 变更动作 */\n changeAction?: string;\n /** 值格式 (如 'YYYY-MM-DD') */\n valueFormat?: string;\n /** 校验规则 */\n rules?: any[];\n /** 失焦时校验 */\n validateOnBlur?: boolean;\n /** 修改时校验 */\n validateOnChange?: boolean;\n /** 自定义变更处理函数 */\n onChange?: (date: Dayjs | null, dateString: string | string[]) => void;\n /** 值 */\n value?: string | Dayjs;\n}\n\n/**\n * AndDatePicker 组件\n * 封装 Ant Design DatePicker,支持数据绑定和动作解析\n */\nexport const AndDatePicker: React.FC<AndDatePickerProps> = ({\n id,\n sessionId,\n develop,\n dataSet,\n dataSetField,\n changeAction,\n valueFormat = 'YYYY-MM-DD',\n rules,\n validateOnBlur,\n validateOnChange,\n onChange,\n value: propValue,\n defaultValue,\n ...restProps\n}) => {\n const addCommand = useAndStore((s) => s.addCommand);\n const setDataSet = useAndStore((s) => s.setDataSet);\n\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n const storeProps = useAndStore((s) =>\n sessionId && id ? s.propsStore[`${sessionId}_props`]?.[id] ?? null : null\n );\n const storeValue = useAndStore((s) =>\n dataSetKey && dataSetField ? s.getDataSet(dataSetKey, dataSetField) : undefined\n );\n\n const { validate, help } = useFieldValidation({\n rules,\n dataSet,\n dataSetField,\n sessionId,\n id,\n develop,\n });\n\n const parseDateValue = useCallback((val: any): Dayjs | null => {\n if (!val) return null;\n if (dayjs.isDayjs(val)) return val;\n if (typeof val === 'string') {\n const parsed = dayjs(val, valueFormat);\n return parsed.isValid() ? parsed : null;\n }\n return null;\n }, [valueFormat]);\n\n const displayValue = useMemo(() => {\n const rawValue = storeValue ?? storeProps?.value ?? propValue ?? defaultValue;\n return parseDateValue(rawValue);\n }, [storeValue, storeProps?.value, propValue, defaultValue, parseDateValue]);\n\n const handleChange = useCallback(\n (date: Dayjs | null, dateString: string | string[]) => {\n if (onChange) {\n onChange(date, dateString);\n return;\n }\n const stringValue = Array.isArray(dateString) ? dateString[0] : dateString;\n if (dataSetKey && dataSetField) setDataSet(dataSetKey, dataSetField, stringValue);\n if (validateOnChange) validate(stringValue);\n if (changeAction && sessionId) {\n const { actionName, arg } = parseChangeAction(changeAction, stringValue, {\n id,\n dataSet,\n dataSetField,\n });\n addCommand(sessionId, createCommand(actionName, arg));\n }\n },\n [onChange, dataSetKey, dataSetField, setDataSet, validateOnChange, validate, changeAction, sessionId, id, addCommand]\n );\n\n useEffect(() => {\n if (defaultValue && displayValue === null && dataSetKey && dataSetField) {\n const formatted = dayjs(defaultValue as any).format(valueFormat);\n setDataSet(dataSetKey, dataSetField, formatted);\n }\n }, [defaultValue, displayValue, dataSetKey, dataSetField, setDataSet, valueFormat]);\n\n const handleBlur = useCallback(() => {\n if (validateOnBlur) {\n const raw = displayValue ? displayValue.format(valueFormat) : null;\n validate(raw);\n }\n }, [validateOnBlur, validate, displayValue, valueFormat]);\n\n const mergedProps = useMemo(\n () => mergeStoreProps(restProps as Record<string, any>, storeProps ?? undefined),\n [restProps, storeProps]\n );\n\n return (\n <div onBlur={handleBlur}>\n <DatePicker\n {...mergedProps}\n disabled={develop ? false : mergedProps.disabled}\n open={develop ? false : undefined}\n value={displayValue}\n onChange={handleChange as any}\n style={{ width: '100%', ...mergedProps.style }}\n />\n {help && (\n <div style={{ color: '#ff4d4f', fontSize: 12, marginTop: 4 }}>{help}</div>\n )}\n </div>\n );\n};\n\nexport default AndDatePicker;\n","import React, { useMemo, useCallback } from 'react';\nimport { TimePicker } from 'antd';\nimport type { TimePickerProps as AntTimePickerProps } from 'antd';\nimport dayjs, { Dayjs } from 'dayjs';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport { parseChangeAction, createCommand } from '../../base/actionParser';\nimport { useFieldValidation } from '../../base/useFieldValidation';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\n/**\n * 校验规则接口\n */\nexport interface ValidationRule {\n type?: string;\n required?: boolean;\n message?: string;\n pattern?: string | RegExp;\n min?: number;\n max?: number;\n}\n\nexport interface AndTimePickerProps extends Omit<AntTimePickerProps, 'onChange' | 'value'>, BaseComponentProps, DataSetConfig {\n changeAction?: string;\n valueFormat?: string;\n onChange?: (time: Dayjs | null, timeString: string | null) => void;\n value?: string | Dayjs;\n \n // 校验相关\n rules?: ValidationRule[];\n validateOnChange?: boolean;\n validateOnBlur?: boolean;\n}\n\nexport const AndTimePicker: React.FC<AndTimePickerProps> = ({\n id,\n sessionId,\n develop,\n dataSet,\n dataSetField,\n changeAction,\n valueFormat = 'HH:mm:ss',\n onChange,\n value: propValue,\n defaultValue,\n rules,\n validateOnChange,\n validateOnBlur: _validateOnBlur,\n ...restProps\n}) => {\n const addCommand = useAndStore((state) => state.addCommand);\n const getDataSet = useAndStore((state) => state.getDataSet);\n const setDataSet = useAndStore((state) => state.setDataSet);\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n\n const storeValue = useMemo(() => {\n if (dataSetKey && dataSetField) return getDataSet(dataSetKey, dataSetField);\n return undefined;\n }, [dataSetKey, dataSetField, getDataSet]);\n\n const { validate, help } = useFieldValidation({\n rules,\n dataSet,\n dataSetField,\n sessionId,\n id,\n develop,\n });\n\n const parseTimeValue = useCallback((val: any): Dayjs | null => {\n if (!val) return null;\n if (dayjs.isDayjs(val)) return val;\n if (typeof val === 'string') {\n const parsed = dayjs(val, valueFormat);\n return parsed.isValid() ? parsed : null;\n }\n return null;\n }, [valueFormat]);\n\n const displayValue = useMemo(() => {\n const rawValue = storeValue ?? propValue ?? defaultValue;\n return parseTimeValue(rawValue);\n }, [storeValue, propValue, defaultValue, parseTimeValue]);\n\n const handleChange = useCallback((time: Dayjs | null, timeString: string | null) => {\n if (onChange) { onChange(time, timeString); return; }\n const stringValue = timeString || '';\n if (dataSetKey && dataSetField) setDataSet(dataSetKey, dataSetField, stringValue);\n \n // 触发变更校验\n if (validateOnChange) {\n validate(stringValue);\n }\n \n if (changeAction && sessionId) {\n const { actionName, arg } = parseChangeAction(changeAction, stringValue, { id, dataSet, dataSetField });\n addCommand(sessionId, createCommand(actionName, arg));\n }\n }, [onChange, dataSetKey, dataSetField, setDataSet, validateOnChange, validate, changeAction, sessionId, id, addCommand]);\n\n const handleBlur = useCallback(() => {\n if (_validateOnBlur) {\n validate(displayValue ? displayValue.format(valueFormat) : '');\n }\n }, [_validateOnBlur, validate, displayValue, valueFormat]);\n\n const status = help ? 'error' : undefined;\n\n return (\n <>\n <TimePicker\n {...restProps}\n disabled={develop ? false : restProps.disabled}\n open={develop ? false : undefined}\n value={displayValue}\n onChange={handleChange}\n onBlur={handleBlur}\n style={{ width: '100%', ...restProps.style }}\n status={status}\n />\n {help && (\n <div style={{ color: '#ff4d4f', fontSize: '12px', marginTop: '4px' }}>{help}</div>\n )}\n </>\n );\n};\n\nexport default AndTimePicker;\n","import React, { useMemo, useCallback } from 'react';\nimport { DatePicker } from 'antd';\nimport type { RangePickerProps as AntRangePickerProps } from 'antd/es/date-picker';\nimport dayjs, { Dayjs } from 'dayjs';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport { parseChangeAction, createCommand } from '../../base/actionParser';\nimport { useFieldValidation } from '../../base/useFieldValidation';\nimport { mergeStoreProps } from '../../base/storePropsUtils';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\nconst { RangePicker } = DatePicker;\n\nexport interface AndRangePickerProps extends Omit<AntRangePickerProps, 'onChange' | 'value' | 'id'>, BaseComponentProps, DataSetConfig {\n changeAction?: string;\n valueFormat?: string;\n rules?: any[];\n validateOnBlur?: boolean;\n validateOnChange?: boolean;\n onChange?: (dates: [Dayjs | null, Dayjs | null] | null, dateStrings: [string, string]) => void;\n value?: [string, string] | [Dayjs, Dayjs];\n}\n\nexport const AndRangePicker: React.FC<AndRangePickerProps> = ({\n id,\n sessionId,\n develop,\n dataSet,\n dataSetField,\n changeAction,\n valueFormat = 'YYYY-MM-DD',\n rules,\n validateOnBlur,\n validateOnChange,\n onChange,\n value: propValue,\n defaultValue,\n ...restProps\n}) => {\n const addCommand = useAndStore((s) => s.addCommand);\n const setDataSet = useAndStore((s) => s.setDataSet);\n\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n const storeProps = useAndStore((s) =>\n sessionId && id ? s.propsStore[`${sessionId}_props`]?.[id] ?? null : null\n );\n const storeValue = useAndStore((s) =>\n dataSetKey && dataSetField ? s.getDataSet(dataSetKey, dataSetField) : undefined\n );\n\n const { validate, help } = useFieldValidation({\n rules,\n dataSet,\n dataSetField,\n sessionId,\n id,\n develop,\n });\n\n const parseRangeValue = useCallback((val: any): [Dayjs, Dayjs] | null => {\n if (!val || !Array.isArray(val) || val.length !== 2) return null;\n const [start, end] = val;\n const startDayjs = dayjs.isDayjs(start) ? start : dayjs(start, valueFormat);\n const endDayjs = dayjs.isDayjs(end) ? end : dayjs(end, valueFormat);\n if (startDayjs.isValid() && endDayjs.isValid()) return [startDayjs, endDayjs];\n return null;\n }, [valueFormat]);\n\n const displayValue = useMemo(() => {\n const rawValue = storeValue ?? storeProps?.value ?? propValue ?? defaultValue;\n return parseRangeValue(rawValue);\n }, [storeValue, storeProps?.value, propValue, defaultValue, parseRangeValue]);\n\n const mergedProps = useMemo(\n () => mergeStoreProps(restProps as Record<string, any>, storeProps ?? undefined),\n [restProps, storeProps]\n );\n\n const handleChange = useCallback(\n (dates: [Dayjs | null, Dayjs | null] | null, dateStrings: [string, string]) => {\n if (onChange) {\n onChange(dates, dateStrings);\n return;\n }\n if (dataSetKey && dataSetField) setDataSet(dataSetKey, dataSetField, dateStrings);\n if (validateOnChange) validate(dateStrings);\n if (changeAction && sessionId) {\n const { actionName, arg } = parseChangeAction(changeAction, dateStrings, {\n id,\n dataSet,\n dataSetField,\n });\n addCommand(sessionId, createCommand(actionName, arg));\n }\n },\n [onChange, dataSetKey, dataSetField, setDataSet, validateOnChange, validate, changeAction, sessionId, id, addCommand]\n );\n\n const handleBlur = useCallback(() => {\n if (validateOnBlur) validate(displayValue ? [displayValue[0]?.format(valueFormat), displayValue[1]?.format(valueFormat)] : null);\n }, [validateOnBlur, validate, displayValue, valueFormat]);\n\n return (\n <div onBlur={handleBlur}>\n <RangePicker\n {...mergedProps}\n disabled={develop ? false : mergedProps.disabled}\n open={develop ? false : undefined}\n value={displayValue}\n onChange={handleChange}\n style={{ width: '100%', ...mergedProps.style }}\n />\n {help && (\n <div style={{ color: '#ff4d4f', fontSize: 12, marginTop: 4 }}>{help}</div>\n )}\n </div>\n );\n};\n\nexport default AndRangePicker;\n","import React, { useMemo, useCallback } from 'react';\nimport { Radio, Space } from 'antd';\nimport type { RadioGroupProps as AntRadioGroupProps } from 'antd';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport { parseChangeAction, createCommand } from '../../base/actionParser';\nimport { useFieldValidation } from '../../base/useFieldValidation';\nimport { mergeStoreProps } from '../../base/storePropsUtils';\nimport { useDictOptions, useRemoteOptions } from '../../base/hooks/useApiService';\nimport { findDictOptionByValue } from '../../config';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\ninterface RadioOption {\n label: string;\n value: string | number;\n disabled?: boolean;\n}\n\n// 选项配置接口\ninterface OptionsCfg {\n url?: string;\n codeKey?: string;\n labelKey?: string;\n}\n\n/**\n * AndRadio Props 接口\n */\nexport interface AndRadioProps extends Omit<AntRadioGroupProps, 'onChange' | 'options'>, BaseComponentProps, DataSetConfig {\n /** 选项列表 */\n options?: RadioOption[];\n /** 远程选项配置 */\n optionsCfg?: OptionsCfg;\n /** 变更动作 */\n changeAction?: string;\n /** 是否使用按钮样式 */\n buttonStyle?: 'outline' | 'solid';\n /** 是否使用按钮模式 */\n optionType?: 'default' | 'button';\n /** 校验规则 */\n rules?: any[];\n /** 失焦时校验 */\n validateOnBlur?: boolean;\n /** 修改时校验 */\n validateOnChange?: boolean;\n /** 自定义变更处理函数 */\n onChange?: (value: any) => void;\n /** 字典编码 */\n dictCode?: string;\n /** 远程数据URL(自定义属性) */\n remoteUrl?: string;\n /** 排列方向 */\n direction?: 'horizontal' | 'vertical';\n}\n\n/**\n * AndRadio 组件\n * 封装 Ant Design Radio.Group,支持数据绑定和动作解析\n */\nexport const AndRadio: React.FC<AndRadioProps> = ({\n id,\n sessionId,\n develop,\n dataSet,\n dataSetField,\n options = [],\n optionsCfg,\n changeAction,\n buttonStyle,\n optionType = 'default',\n rules,\n validateOnBlur,\n validateOnChange,\n onChange,\n value: propValue,\n defaultValue,\n dictCode,\n direction: propDirection,\n remoteUrl: _remoteUrl,\n ...restProps\n}) => {\n const addCommand = useAndStore((s) => s.addCommand);\n const setDataSet = useAndStore((s) => s.setDataSet);\n\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n const storeProps = useAndStore((s) =>\n sessionId && id ? s.propsStore[`${sessionId}_props`]?.[id] ?? null : null\n );\n const storeValue = useAndStore((s) =>\n dataSetKey && dataSetField ? s.getDataSet(dataSetKey, dataSetField) : undefined\n );\n\n const { validate, help } = useFieldValidation({\n rules,\n dataSet,\n dataSetField,\n sessionId,\n id,\n develop,\n });\n\n const rawDisplayValue = useMemo(() => {\n if (storeValue !== undefined) return storeValue;\n if (storeProps?.value !== undefined) return storeProps.value;\n return propValue ?? defaultValue;\n }, [storeValue, storeProps?.value, propValue, defaultValue]);\n\n // 使用 dictCode 加载字典数据\n const { options: dictOptions } = useDictOptions(dictCode);\n\n // 使用 optionsCfg 加载远程数据\n const { options: remoteOptions } = useRemoteOptions(\n optionsCfg?.url,\n {\n valueKey: optionsCfg?.codeKey || 'value',\n labelKey: optionsCfg?.labelKey || 'label',\n immediate: !!optionsCfg?.url,\n }\n );\n\n // 最终选项: Store > 远程 > 字典 > Props\n const finalOptions = useMemo(() => {\n if (storeProps?.options) return storeProps.options;\n if (optionsCfg?.url && remoteOptions.length > 0) return remoteOptions;\n if (dictCode && dictOptions.length > 0) return dictOptions as RadioOption[];\n return options;\n }, [storeProps?.options, optionsCfg?.url, remoteOptions, dictCode, dictOptions, options]);\n\n // 字典 value 多为 string,实际数据可能为 number,需用选项中的 value 以保证 antd Radio 正确选中\n const displayValue = useMemo(() => {\n if (finalOptions.length === 0) return rawDisplayValue;\n const matched = findDictOptionByValue(finalOptions, rawDisplayValue);\n return matched?.value ?? rawDisplayValue;\n }, [rawDisplayValue, finalOptions]);\n\n const mergedProps = useMemo(\n () => mergeStoreProps(restProps as Record<string, any>, storeProps ?? undefined),\n [restProps, storeProps]\n );\n\n const handleChange = useCallback(\n (e: any) => {\n const value = e.target.value;\n if (onChange) {\n onChange(value);\n return;\n }\n if (dataSetKey && dataSetField) setDataSet(dataSetKey, dataSetField, value);\n if (validateOnChange) validate(value);\n if (changeAction && sessionId) {\n const { actionName, arg } = parseChangeAction(changeAction, value, {\n id,\n dataSet,\n dataSetField,\n });\n addCommand(sessionId, createCommand(actionName, arg));\n }\n },\n [\n onChange,\n dataSetKey,\n dataSetField,\n setDataSet,\n validateOnChange,\n validate,\n changeAction,\n sessionId,\n id,\n addCommand,\n ]\n );\n\n const handleBlur = useCallback(() => {\n if (!validateOnBlur) return;\n validate(displayValue);\n }, [validateOnBlur, validate, displayValue]);\n\n // 优先使用 props 中的 direction,如果 restProps 中有(来自 attributes)也处理\n // 注意:之前的修改中从 restProps 解构了 direction,这里我们在参数中直接解构 propDirection\n // 并且 Space 组件提示 direction 已弃用,建议使用 orientation\n // 我们同时检查 propDirection 和 restProps 中的 direction (如果有遗漏)\n\n return (\n <div onBlur={handleBlur}>\n <Radio.Group\n {...mergedProps}\n disabled={develop ? false : mergedProps.disabled}\n value={displayValue}\n onChange={handleChange}\n buttonStyle={storeProps?.buttonStyle ?? buttonStyle}\n optionType={storeProps?.optionType ?? optionType}\n >\n {optionType === 'button' ? (\n finalOptions.map((option: RadioOption) => (\n <Radio.Button key={option.value} value={option.value} disabled={option.disabled}>\n {option.label}\n </Radio.Button>\n ))\n ) : (\n <Space \n // @ts-ignore Space orientation prop might not be in types yet if using older antd types\n orientation={(storeProps?.direction ?? propDirection ?? 'horizontal') as any} \n wrap\n >\n {finalOptions.map((option: RadioOption) => (\n <Radio key={option.value} value={option.value} disabled={option.disabled}>\n {option.label}\n </Radio>\n ))}\n </Space>\n )}\n </Radio.Group>\n {help && (\n <div style={{ color: '#ff4d4f', fontSize: 12, marginTop: 4 }}>{help}</div>\n )}\n </div>\n );\n};\n\nexport default AndRadio;\n","import React, { useMemo, useCallback } from 'react';\nimport { Checkbox, Space } from 'antd';\nimport type { CheckboxProps as AntCheckboxProps } from 'antd';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport { parseChangeAction, createCommand } from '../../base/actionParser';\nimport { useFieldValidation } from '../../base/useFieldValidation';\nimport { mergeStoreProps } from '../../base/storePropsUtils';\nimport { useDictOptions, useRemoteOptions } from '../../base/hooks/useApiService';\nimport { findDictOptionByValue } from '../../config';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\ninterface CheckboxOption {\n label: string;\n value: string | number;\n disabled?: boolean;\n}\n\n// 选项配置接口\ninterface OptionsCfg {\n url?: string;\n codeKey?: string;\n labelKey?: string;\n}\n\n/**\n * AndCheckbox Props 接口\n */\nexport interface AndCheckboxProps extends Omit<AntCheckboxProps, 'onChange'>, BaseComponentProps, DataSetConfig {\n /** 选项列表 (用于多选模式) */\n options?: CheckboxOption[];\n /** 远程选项配置 */\n optionsCfg?: OptionsCfg;\n /** 是否为多选模式 */\n multiple?: boolean;\n /** 变更动作 */\n changeAction?: string;\n /** 校验规则 */\n rules?: any[];\n /** 失焦时校验 */\n validateOnBlur?: boolean;\n /** 修改时校验 */\n validateOnChange?: boolean;\n /** 自定义变更处理函数 (多选) */\n onChangeMultiple?: (values: (string | number)[]) => void;\n /** 自定义变更处理函数 (单选) */\n onChange?: (checked: boolean) => void;\n /** 多选值 */\n values?: (string | number)[];\n /** 字典编码 */\n dictCode?: string;\n /** 远程数据URL(自定义属性) */\n remoteUrl?: string;\n /** 排列方向 */\n direction?: 'horizontal' | 'vertical';\n}\n\n/**\n * AndCheckbox 组件\n * 封装 Ant Design Checkbox,支持单选和多选模式\n */\nexport const AndCheckbox: React.FC<AndCheckboxProps> = ({\n id,\n sessionId,\n develop,\n dataSet,\n dataSetField,\n options = [],\n optionsCfg,\n multiple = false,\n changeAction,\n rules,\n validateOnBlur,\n validateOnChange,\n onChange,\n onChangeMultiple,\n checked: propChecked,\n values: propValues,\n defaultChecked,\n children,\n dictCode,\n direction = 'horizontal',\n // 解构自定义属性防止传递到 DOM\n remoteUrl: _remoteUrl,\n ...restProps\n}) => {\n const addCommand = useAndStore((s) => s.addCommand);\n const setDataSet = useAndStore((s) => s.setDataSet);\n\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n const storeProps = useAndStore((s) =>\n sessionId && id ? s.propsStore[`${sessionId}_props`]?.[id] ?? null : null\n );\n const storeValue = useAndStore((s) =>\n dataSetKey && dataSetField ? s.getDataSet(dataSetKey, dataSetField) : undefined\n );\n\n const { validate, help } = useFieldValidation({\n rules,\n dataSet,\n dataSetField,\n sessionId,\n id,\n develop,\n });\n\n // 使用 dictCode 加载字典数据\n const { options: dictOptions } = useDictOptions(dictCode);\n\n // 使用 optionsCfg 加载远程数据\n const { options: remoteOptions } = useRemoteOptions(\n optionsCfg?.url,\n {\n valueKey: optionsCfg?.codeKey || 'value',\n labelKey: optionsCfg?.labelKey || 'label',\n immediate: !!optionsCfg?.url,\n }\n );\n\n // 单选模式的值\n const displayChecked = useMemo(() => {\n if (!multiple) {\n if (storeValue !== undefined) {\n return Boolean(storeValue);\n }\n if (storeProps?.checked !== undefined) {\n return storeProps.checked;\n }\n return propChecked ?? defaultChecked;\n }\n return undefined;\n }, [multiple, storeValue, storeProps?.checked, propChecked, defaultChecked]);\n\n // 最终选项\n const finalOptions = useMemo<CheckboxOption[]>(() => {\n // 优先级: Store > 远程 > 字典 > Props\n if (storeProps?.options) return storeProps.options;\n if (optionsCfg?.url && remoteOptions.length > 0) return remoteOptions;\n if (dictCode && dictOptions.length > 0) return dictOptions;\n return options;\n }, [storeProps?.options, optionsCfg?.url, remoteOptions, dictCode, dictOptions, options]);\n\n // 多选模式的值(字典 value 多为 string,实际数据可能为 number,需用选项中的 value 以保证 antd Checkbox 正确选中)\n const displayValues = useMemo<(string | number)[]>(() => {\n if (!multiple) return [];\n let raw: (string | number)[] = [];\n if (Array.isArray(storeValue)) raw = storeValue;\n else if (Array.isArray(storeProps?.values)) raw = storeProps.values;\n else raw = propValues || [];\n if (finalOptions.length === 0) return raw;\n return raw.map((v) => (findDictOptionByValue(finalOptions, v)?.value as string | number) ?? v);\n }, [multiple, storeValue, storeProps?.values, propValues, finalOptions]);\n\n const mergedProps = useMemo(\n () => mergeStoreProps(restProps as Record<string, any>, storeProps ?? undefined, { skipKeys: ['value', 'help', 'validateStatus', 'checked', 'values', 'options'] }),\n [restProps, storeProps]\n );\n\n // 单选变更处理\n const handleSingleChange = useCallback((e: any) => {\n const checked = e.target.checked;\n\n if (onChange) {\n onChange(checked);\n return;\n }\n\n if (dataSetKey && dataSetField) {\n setDataSet(dataSetKey, dataSetField, checked);\n }\n\n if (validateOnChange) validate(checked);\n\n if (changeAction && sessionId) {\n const { actionName, arg } = parseChangeAction(changeAction, checked, { id, dataSet, dataSetField });\n addCommand(sessionId, createCommand(actionName, arg));\n }\n }, [onChange, dataSetKey, dataSetField, setDataSet, validateOnChange, validate, changeAction, sessionId, id, addCommand]);\n\n // 多选变更处理\n const handleMultipleChange = useCallback((checkedValues: (string | number)[]) => {\n if (onChangeMultiple) {\n onChangeMultiple(checkedValues);\n return;\n }\n\n if (dataSetKey && dataSetField) {\n setDataSet(dataSetKey, dataSetField, checkedValues);\n }\n\n if (validateOnChange) validate(checkedValues);\n\n if (changeAction && sessionId) {\n const { actionName, arg } = parseChangeAction(changeAction, checkedValues, { id, dataSet, dataSetField });\n addCommand(sessionId, createCommand(actionName, arg));\n }\n }, [onChangeMultiple, dataSetKey, dataSetField, setDataSet, validateOnChange, validate, changeAction, sessionId, id, addCommand]);\n\n const handleBlur = useCallback(() => {\n if (!validateOnBlur) return;\n if (multiple) validate(displayValues);\n else validate(displayChecked);\n }, [validateOnBlur, validate, multiple, displayValues, displayChecked]);\n\n // 多选模式\n if (multiple && finalOptions.length > 0) {\n return (\n <div onBlur={handleBlur}>\n <Checkbox.Group {...mergedProps} value={displayValues} onChange={handleMultipleChange} disabled={develop ? false : mergedProps.disabled}>\n <Space\n direction={(mergedProps.direction ?? direction) as any}\n wrap\n >\n {finalOptions.map((option) => (\n <Checkbox key={option.value} value={option.value} disabled={option.disabled}>\n {option.label}\n </Checkbox>\n ))}\n </Space>\n </Checkbox.Group>\n {help && (\n <div style={{ color: '#ff4d4f', fontSize: 12, marginTop: 4 }}>{help}</div>\n )}\n </div>\n );\n }\n\n // 单选模式\n return (\n <div onBlur={handleBlur}>\n <Checkbox\n {...mergedProps}\n disabled={develop ? false : mergedProps.disabled}\n checked={displayChecked}\n onChange={handleSingleChange}\n >\n {children}\n </Checkbox>\n {help && (\n <div style={{ color: '#ff4d4f', fontSize: 12, marginTop: 4 }}>{help}</div>\n )}\n </div>\n );\n};\n\nexport default AndCheckbox;\n","import React, { useMemo, useCallback } from 'react';\nimport { Rate } from 'antd';\nimport type { RateProps as AntRateProps } from 'antd';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport { parseChangeAction, createCommand } from '../../base/actionParser';\nimport { useFieldValidation } from '../../base/useFieldValidation';\nimport { mergeStoreProps } from '../../base/storePropsUtils';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\n/**\n * AndRate Props 接口\n */\nexport interface AndRateProps extends Omit<AntRateProps, 'onChange'>, BaseComponentProps, DataSetConfig {\n /** 变更动作 */\n changeAction?: string;\n /** 校验规则 */\n rules?: any[];\n /** 失焦时校验 */\n validateOnBlur?: boolean;\n /** 修改时校验 */\n validateOnChange?: boolean;\n /** 自定义变更处理函数 */\n onChange?: (value: number) => void;\n}\n\n/**\n * AndRate 组件\n * 封装 Ant Design Rate,支持数据绑定和动作解析\n */\nexport const AndRate: React.FC<AndRateProps> = ({\n id,\n sessionId,\n develop,\n dataSet,\n dataSetField,\n changeAction,\n rules,\n validateOnBlur,\n validateOnChange,\n onChange,\n value: propValue,\n defaultValue,\n ...restProps\n}) => {\n const addCommand = useAndStore((s) => s.addCommand);\n const setDataSet = useAndStore((s) => s.setDataSet);\n\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n const storeProps = useAndStore((s) =>\n sessionId && id ? s.propsStore[`${sessionId}_props`]?.[id] ?? null : null\n );\n const storeValue = useAndStore((s) =>\n dataSetKey && dataSetField ? s.getDataSet(dataSetKey, dataSetField) : undefined\n );\n\n const { validate, help } = useFieldValidation({\n rules,\n dataSet,\n dataSetField,\n sessionId,\n id,\n develop,\n });\n\n const displayValue = useMemo(() => {\n if (storeValue !== undefined) return storeValue;\n if (storeProps?.value !== undefined) return storeProps.value;\n return propValue ?? defaultValue;\n }, [storeValue, storeProps?.value, propValue, defaultValue]);\n\n const handleChange = useCallback(\n (value: number) => {\n if (onChange) {\n onChange(value);\n return;\n }\n if (dataSetKey && dataSetField) setDataSet(dataSetKey, dataSetField, value);\n if (validateOnChange) validate(value);\n if (changeAction && sessionId) {\n const { actionName, arg } = parseChangeAction(changeAction, value, {\n id,\n dataSet,\n dataSetField,\n });\n addCommand(sessionId, createCommand(actionName, arg));\n }\n },\n [onChange, dataSetKey, dataSetField, setDataSet, validateOnChange, validate, changeAction, sessionId, id, addCommand]\n );\n\n const handleBlur = useCallback(() => {\n if (validateOnBlur) validate(displayValue);\n }, [validateOnBlur, validate, displayValue]);\n\n const mergedProps = useMemo(\n () => mergeStoreProps(restProps as Record<string, any>, storeProps ?? undefined),\n [restProps, storeProps]\n );\n\n return (\n <div onBlur={handleBlur}>\n <Rate\n {...mergedProps}\n disabled={develop ? false : mergedProps.disabled}\n value={displayValue}\n onChange={handleChange}\n />\n {help && (\n <div style={{ color: '#ff4d4f', fontSize: 12, marginTop: 4 }}>{help}</div>\n )}\n </div>\n );\n};\n\nexport default AndRate;\n","import React, { useMemo, useCallback } from 'react';\nimport { Slider } from 'antd';\nimport type { SliderSingleProps } from 'antd';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport { parseChangeAction, createCommand } from '../../base/actionParser';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\nexport interface AndSliderProps extends Omit<SliderSingleProps, 'onChange'>, BaseComponentProps, DataSetConfig {\n changeAction?: string;\n onChange?: (value: number) => void;\n}\n\nexport const AndSlider: React.FC<AndSliderProps> = ({\n id, sessionId, develop, dataSet, dataSetField, changeAction, onChange, value: propValue, defaultValue, ...restProps\n}) => {\n const addCommand = useAndStore((state) => state.addCommand);\n const getDataSet = useAndStore((state) => state.getDataSet);\n const setDataSet = useAndStore((state) => state.setDataSet);\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n\n const storeValue = useMemo(() => {\n if (dataSetKey && dataSetField) return getDataSet(dataSetKey, dataSetField);\n return undefined;\n }, [dataSetKey, dataSetField, getDataSet]);\n\n const displayValue = useMemo(() => storeValue ?? propValue ?? defaultValue, [storeValue, propValue, defaultValue]);\n\n const handleChange = useCallback((value: number) => {\n if (onChange) { onChange(value); return; }\n if (dataSetKey && dataSetField) setDataSet(dataSetKey, dataSetField, value);\n if (changeAction && sessionId) {\n const { actionName, arg } = parseChangeAction(changeAction, value, { id, dataSet, dataSetField });\n addCommand(sessionId, createCommand(actionName, arg));\n }\n }, [onChange, dataSetKey, dataSetField, setDataSet, changeAction, sessionId, id, addCommand]);\n\n return <Slider {...restProps} disabled={develop ? false : restProps.disabled} value={displayValue} onChange={handleChange} />;\n};\n\nexport default AndSlider;\n","import React, { useMemo, useCallback, useState, useRef, useEffect } from 'react';\nimport { Cascader } from 'antd';\nimport type { CascaderProps as AntCascaderProps } from 'antd';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport { parseChangeAction, createCommand } from '../../base/actionParser';\nimport { useFieldValidation } from '../../base/useFieldValidation';\nimport { request as coreRequest } from '../../config';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\nconst VALIDATE_DEBOUNCE_MS = 200;\n\n// 选项配置接口\ninterface OptionsCfg {\n /** 远程数据 URL */\n url?: string;\n /** 值字段名 */\n codeKey?: string;\n /** 标签字段名 */\n labelKey?: string;\n /** 子节点字段名 */\n childrenKey?: string;\n /** 最大层级 */\n maxLevel?: number;\n}\n\n/**\n * AndCascade Props 接口\n */\nexport interface AndCascadeProps extends Omit<AntCascaderProps, 'onChange'>, BaseComponentProps, DataSetConfig {\n /** 远程选项配置 */\n optionsCfg?: OptionsCfg;\n /** 校验规则 */\n rules?: any[];\n /** 失焦时校验 */\n validateOnBlur?: boolean;\n /** 修改时校验 */\n validateOnChange?: boolean;\n /** 变更动作 */\n changeAction?: string;\n /** 自定义变更处理函数 */\n onChange?: (value: any, selectedOptions?: any[]) => void;\n /** 远程数据URL(自定义属性,不传递给Cascader) */\n remoteUrl?: string;\n}\n\n/**\n * 递归转换数据为级联选择器格式\n */\nconst transformToCascaderOptions = (\n nodes: any[],\n cfg: { codeKey: string; labelKey: string; childrenKey: string; maxLevel: number },\n currentLevel: number = 1\n): any[] => {\n if (!Array.isArray(nodes)) return [];\n const { codeKey, labelKey, childrenKey, maxLevel } = cfg;\n\n return nodes.map((node: any) => {\n const children = (currentLevel < maxLevel && Array.isArray(node?.[childrenKey]))\n ? transformToCascaderOptions(node[childrenKey], cfg, currentLevel + 1)\n : undefined;\n\n const item: any = {\n value: String(node?.[codeKey]),\n label: node?.[labelKey],\n };\n if (children && children.length) item.children = children;\n return item;\n });\n};\n\n/**\n * 将字符串转换为数组\n */\nconst stringToArray = (str: string): string[] => {\n if (!str || typeof str !== 'string') return [];\n return str.includes(',') ? str.split(',').map(s => s.trim()).filter(s => s) : [str];\n};\n\n/**\n * 在级联选项中查找路径\n */\nconst findPathInOptions = (targetValue: string, options: any[]): string[] => {\n const findPath = (nodes: any[], target: string, path: string[] = []): string[] | null => {\n for (const node of nodes) {\n const nodeValue = node.value;\n const currentPath = [...path, nodeValue];\n\n if (nodeValue === target) {\n return currentPath;\n }\n if (node.children && Array.isArray(node.children)) {\n const result = findPath(node.children, target, currentPath);\n if (result) return result;\n }\n }\n return null;\n };\n\n return findPath(options, targetValue) || [];\n};\n\n/**\n * 判断是否一维数组\n */\nconst is1DimensionalArray = (arr: any): boolean => {\n return Array.isArray(arr) && arr.length > 0 && !Array.isArray(arr[0]);\n};\n\n/**\n * 判断是否二维数组\n */\nconst is2DimensionalArray = (arr: any): boolean => {\n return Array.isArray(arr) && arr.length > 0 && Array.isArray(arr[0]);\n};\n\n/**\n * AndCascade 组件\n * 封装 Ant Design Cascader,支持远程数据和动作解析\n */\nexport const AndCascade: React.FC<AndCascadeProps> = ({\n id,\n sessionId,\n develop,\n dataSet,\n dataSetField,\n optionsCfg,\n rules,\n validateOnBlur,\n validateOnChange,\n changeAction,\n onChange,\n options: propOptions,\n defaultValue,\n value: propValue,\n remoteUrl: _remoteUrl,\n ...restProps\n}) => {\n const addCommand = useAndStore((s) => s.addCommand);\n const setDataSet = useAndStore((s) => s.setDataSet);\n const validateTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const [remoteOptions, setRemoteOptions] = useState<any[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n const storeValue = useAndStore((s) =>\n dataSetKey && dataSetField ? s.getDataSet(dataSetKey, dataSetField) : undefined\n );\n\n const { validate, help, validateStatus } = useFieldValidation({\n rules,\n dataSet,\n dataSetField,\n sessionId,\n id,\n develop,\n });\n\n // 是否有有效的远程配置\n const hasValidRemoteCfg = useMemo(() => {\n return optionsCfg?.url && remoteOptions.length > 0;\n }, [optionsCfg?.url, remoteOptions.length]);\n\n // 计算最终显示的值\n const displayValue = useMemo(() => {\n // 获取原始值\n let rawValue: any = storeValue ?? propValue ?? defaultValue ?? [];\n\n // 处理字符串类型\n if (typeof rawValue === 'string') {\n if (hasValidRemoteCfg) {\n const result = stringToArray(rawValue).map(item => findPathInOptions(item, remoteOptions));\n return result.filter(item => Array.isArray(item) && item.length > 0);\n }\n return [rawValue];\n }\n\n // 处理一维数组\n if (is1DimensionalArray(rawValue) && hasValidRemoteCfg) {\n const result = rawValue.map((item: string) => stringToArray(item));\n return result.filter((item: any) => Array.isArray(item) && item.length > 0);\n }\n\n // 处理二维数组\n if (is2DimensionalArray(rawValue) && hasValidRemoteCfg) {\n return rawValue.filter((item: any) => Array.isArray(item) && item.length > 0);\n }\n\n return rawValue;\n }, [storeValue, propValue, defaultValue, hasValidRemoteCfg, remoteOptions]);\n\n // 计算最终选项\n const finalOptions = useMemo(() => {\n // 优先级: 远程选项 > 配置的选项\n if (optionsCfg?.url && remoteOptions.length > 0) {\n return remoteOptions;\n }\n return propOptions || [];\n }, [optionsCfg?.url, remoteOptions, propOptions]);\n\n // 加载远程选项\n useEffect(() => {\n const loadRemoteOptions = async () => {\n if (!optionsCfg?.url) return;\n\n setIsLoading(true);\n try {\n // 使用注入的 request 方法\n const data = await coreRequest({ url: optionsCfg.url, method: 'GET' });\n const sourceArray = Array.isArray(data)\n ? data\n : (data?.data ? (Array.isArray(data.data) ? data.data : data.data.list || data.data.records || []) : []);\n\n const codeKey = optionsCfg.codeKey || 'value';\n const labelKey = optionsCfg.labelKey || 'label';\n const childrenKey = optionsCfg.childrenKey || 'children';\n const maxLevel = optionsCfg.maxLevel || 5;\n\n const transformed = transformToCascaderOptions(sourceArray, {\n codeKey,\n labelKey,\n childrenKey,\n maxLevel,\n });\n\n setRemoteOptions(transformed);\n } catch (error) {\n console.error('Failed to load remote options:', error);\n setRemoteOptions([]);\n } finally {\n setIsLoading(false);\n }\n };\n\n loadRemoteOptions();\n }, [optionsCfg?.url, optionsCfg?.codeKey, optionsCfg?.labelKey, optionsCfg?.childrenKey, optionsCfg?.maxLevel]);\n\n const handleChange = useCallback(\n (value: any, selectedOptions?: any[]) => {\n if (onChange) {\n onChange(value, selectedOptions);\n return;\n }\n let processedValue: any = value;\n if (is1DimensionalArray(value) && hasValidRemoteCfg) {\n processedValue = String(value[value.length - 1] || '');\n } else if (is2DimensionalArray(value) && hasValidRemoteCfg) {\n processedValue = value.map((item: any[]) => item.join(','));\n }\n if (dataSetKey && dataSetField) {\n setDataSet(dataSetKey, dataSetField, processedValue);\n }\n if (validateOnChange) {\n if (validateTimerRef.current) clearTimeout(validateTimerRef.current);\n validateTimerRef.current = setTimeout(() => {\n validateTimerRef.current = null;\n validate(value);\n }, VALIDATE_DEBOUNCE_MS);\n }\n if (changeAction && sessionId) {\n const { actionName, arg } = parseChangeAction(changeAction, value, {\n id,\n dataSet,\n dataSetField,\n });\n addCommand(sessionId, createCommand(actionName, arg));\n }\n },\n [\n onChange,\n dataSetKey,\n dataSetField,\n setDataSet,\n validateOnChange,\n validate,\n changeAction,\n sessionId,\n id,\n addCommand,\n hasValidRemoteCfg,\n ]\n );\n\n const handleBlur = useCallback(() => {\n if (!validateOnBlur) return;\n validate(displayValue);\n }, [validateOnBlur, validate, displayValue]);\n\n useEffect(\n () => () => {\n if (validateTimerRef.current) clearTimeout(validateTimerRef.current);\n },\n []\n );\n\n return (\n <div style={{ width: '100%' }}>\n <Cascader\n {...(restProps as any)}\n disabled={develop ? false : restProps.disabled}\n open={develop ? false : undefined}\n value={displayValue}\n options={finalOptions}\n onChange={handleChange}\n onBlur={handleBlur}\n loading={isLoading}\n status={validateStatus}\n style={{ width: '100%', ...restProps.style }}\n />\n {help && (\n <div style={{ color: '#ff4d4f', fontSize: 12, marginTop: 4 }}>{help}</div>\n )}\n </div>\n );\n};\n\nexport default AndCascade;\n","import React, { useMemo, useCallback } from 'react';\nimport { TreeSelect, ConfigProvider } from 'antd';\nimport type { TreeSelectProps as AntTreeSelectProps } from 'antd';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport { parseChangeAction, createCommand } from '../../base/actionParser';\nimport { useFieldValidation } from '../../base/useFieldValidation';\nimport { mergeStoreProps } from '../../base/storePropsUtils';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\n/**\n * TreeSelect Semantic DOM 样式配置\n * 参考 Ant Design 6.x Semantic DOM 规范\n */\nexport interface TreeSelectSemanticStyles {\n root?: React.CSSProperties;\n prefix?: React.CSSProperties;\n placeholder?: React.CSSProperties;\n input?: React.CSSProperties;\n suffix?: React.CSSProperties;\n popup?: {\n root?: React.CSSProperties;\n item?: React.CSSProperties;\n itemTitle?: React.CSSProperties;\n };\n}\n\nexport interface TreeSelectSemanticClassNames {\n root?: string;\n prefix?: string;\n placeholder?: string;\n input?: string;\n suffix?: string;\n popup?: {\n root?: string;\n item?: string;\n itemTitle?: string;\n };\n}\n\n/**\n * TreeSelect Design Token\n * 参考 Ant Design 6.x Design Token 规范\n */\nexport interface TreeSelectToken {\n // 官方 Design Token\n controlItemWidth?: string | number;\n controlWidth?: string | number;\n dropdownHeight?: string | number;\n menuPadding?: string | number;\n optionPadding?: string | number;\n optionSelectedBg?: string;\n optionSelectedColor?: string;\n optionSelectedFontWeight?: string | number;\n}\n\n/**\n * 校验规则接口\n */\nexport interface ValidationRule {\n required?: boolean;\n message?: string;\n}\n\nexport interface AndTreeSelectProps extends Omit<AntTreeSelectProps, 'onChange'>, BaseComponentProps, DataSetConfig {\n changeAction?: string;\n onChange?: (value: any, labelList?: React.ReactNode[], extra?: any) => void;\n remoteUrl?: string;\n selectAction?: string;\n \n // Semantic DOM 支持\n styles?: TreeSelectSemanticStyles;\n classNames?: TreeSelectSemanticClassNames;\n \n // Design Token 支持\n token?: TreeSelectToken;\n \n // 校验相关\n rules?: ValidationRule[];\n validateOnChange?: boolean;\n validateOnBlur?: boolean;\n}\n\nexport const AndTreeSelect: React.FC<AndTreeSelectProps> = ({\n id,\n sessionId,\n develop,\n dataSet,\n dataSetField,\n changeAction,\n onChange,\n value: propValue,\n defaultValue,\n treeData,\n remoteUrl: _remoteUrl,\n selectAction: _selectAction,\n styles,\n classNames,\n token,\n rules,\n validateOnChange,\n validateOnBlur,\n ...restProps\n}) => {\n const addCommand = useAndStore((s) => s.addCommand);\n const setDataSet = useAndStore((s) => s.setDataSet);\n\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n const storeProps = useAndStore((s) =>\n sessionId && id ? s.propsStore[`${sessionId}_props`]?.[id] ?? null : null\n );\n const storeValue = useAndStore((s) =>\n dataSetKey && dataSetField ? s.getDataSet(dataSetKey, dataSetField) : undefined\n );\n\n const { validate, help } = useFieldValidation({\n rules,\n dataSet,\n dataSetField,\n sessionId,\n id,\n develop,\n });\n\n const displayValue = useMemo(\n () => storeValue ?? storeProps?.value ?? propValue ?? defaultValue,\n [storeValue, storeProps?.value, propValue, defaultValue]\n );\n\n const mergedProps = useMemo(\n () => mergeStoreProps(restProps as Record<string, any>, storeProps ?? undefined),\n [restProps, storeProps]\n );\n\n const handleChange = useCallback(\n (value: any, labelList?: React.ReactNode[], extra?: any) => {\n if (onChange) {\n onChange(value, labelList, extra);\n return;\n }\n if (dataSetKey && dataSetField) setDataSet(dataSetKey, dataSetField, value);\n if (validateOnChange) validate(value);\n if (changeAction && sessionId) {\n const { actionName, arg } = parseChangeAction(changeAction, value, {\n id,\n dataSet,\n dataSetField,\n });\n addCommand(sessionId, createCommand(actionName, arg));\n }\n },\n [onChange, dataSetKey, dataSetField, setDataSet, validateOnChange, validate, changeAction, sessionId, id, addCommand]\n );\n\n const handleBlur = useCallback(() => {\n if (validateOnBlur) validate(displayValue);\n }, [validateOnBlur, validate, displayValue]);\n\n // 过滤空值的 token\n const filteredToken = useMemo(() => {\n if (!token) return undefined;\n const result: Record<string, any> = {};\n Object.entries(token).forEach(([key, value]) => {\n if (value !== '' && value !== undefined && value !== null) {\n result[key] = value;\n }\n });\n return Object.keys(result).length > 0 ? result : undefined;\n }, [token]);\n\n // 构建 theme 配置\n const themeConfig = useMemo(() => {\n if (!filteredToken) return undefined;\n return {\n components: {\n TreeSelect: filteredToken,\n },\n };\n }, [filteredToken]);\n\n const status = help ? 'error' : undefined;\n\n const treeSelectElement = (\n <div onBlur={handleBlur}>\n <TreeSelect\n {...mergedProps}\n disabled={develop ? false : mergedProps.disabled}\n open={develop ? false : undefined}\n treeData={treeData}\n value={displayValue}\n onChange={handleChange}\n style={{ width: '100%', ...mergedProps.style }}\n styles={styles}\n classNames={classNames}\n status={status}\n />\n {help && (\n <div style={{ color: '#ff4d4f', fontSize: 12, marginTop: 4 }}>{help}</div>\n )}\n </div>\n );\n\n if (themeConfig) {\n return <ConfigProvider theme={themeConfig}>{treeSelectElement}</ConfigProvider>;\n }\n return treeSelectElement;\n};\n\nexport default AndTreeSelect;\n","import React, { useMemo, useCallback, useState } from 'react';\nimport { Upload, Button, message, Image } from 'antd';\nimport { UploadOutlined, PlusOutlined } from '@ant-design/icons';\nimport type { UploadProps as AntUploadProps, UploadFile } from 'antd';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport { createCommand } from '../../base/actionParser';\nimport { useFieldValidation } from '../../base/useFieldValidation';\nimport { mergeStoreProps } from '../../base/storePropsUtils';\nimport { upload as coreUpload, getAccessToken, getCoreConfig } from '../../config';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\nexport interface AndUploadProps extends Omit<AntUploadProps, 'onChange'>, BaseComponentProps, DataSetConfig {\n /** 变更动作 */\n changeAction?: string;\n /** 按钮文字 */\n buttonText?: string;\n /** 校验规则 */\n rules?: any[];\n /** 失焦时校验 */\n validateOnBlur?: boolean;\n /** 修改时校验 */\n validateOnChange?: boolean;\n /** 自定义变更处理 */\n onChange?: (info: any) => void;\n /** 上传地址 (如果不使用注入的 upload 方法) */\n uploadUrl?: string;\n /** 最大文件大小 (MB) */\n maxSize?: number;\n}\n\nexport const AndUpload: React.FC<AndUploadProps> = ({\n id,\n sessionId,\n develop,\n dataSet,\n dataSetField,\n changeAction,\n buttonText = '上传文件',\n rules,\n validateOnBlur,\n validateOnChange,\n onChange,\n fileList: propFileList,\n children,\n uploadUrl,\n maxSize = 10,\n action,\n ...restProps\n}) => {\n const addCommand = useAndStore((s) => s.addCommand);\n const setDataSet = useAndStore((s) => s.setDataSet);\n\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n const storeProps = useAndStore((s) =>\n sessionId && id ? s.propsStore[`${sessionId}_props`]?.[id] ?? null : null\n );\n const storeValue = useAndStore((s) =>\n dataSetKey && dataSetField\n ? (s.getDataSet(dataSetKey, dataSetField) as string[] | UploadFile[] | undefined)\n : undefined\n );\n\n const { validate, help } = useFieldValidation({\n rules,\n dataSet,\n dataSetField,\n sessionId,\n id,\n develop,\n });\n\n // 从 fileList 提取 src 数组(response.src ?? src ?? url ?? thumbUrl)\n const fileListToSrcArray = useCallback((list: any[]): string[] => {\n return list\n .map((f: any) => f?.response?.src ?? f?.src ?? f?.url ?? f?.thumbUrl ?? '')\n .filter((s: string) => s && typeof s === 'string');\n }, []);\n\n // 将 src[] 转为 fileList,供 Upload 展示缩略图(url/thumbUrl 使用 viewRes 以附加 auth_token)\n const srcArrayToFileList = useCallback((srcs: string[]): UploadFile[] => {\n const viewRes = getCoreConfig().viewRes;\n const toDisplayUrl = (s: string) => (viewRes ? viewRes(s) : s) || s;\n return srcs.map((src, i) => {\n const displayUrl = toDisplayUrl(src);\n return {\n uid: `src-${i}-${src}`,\n name: src.split('/').pop() || src,\n url: displayUrl,\n thumbUrl: displayUrl,\n status: 'done' as const,\n response: { src },\n };\n });\n }, []);\n\n // fileList 需为可变的普通对象,否则 Ant Design Upload 内部赋值 thumbUrl 时会报 \"object is not extensible\"\n // url/thumbUrl 使用 viewRes 以附加 auth_token\n const toMutableFileList = useCallback((list: any[]): UploadFile[] => {\n const viewRes = getCoreConfig().viewRes;\n const toDisplayUrl = (s: string) => (s && viewRes ? viewRes(s) : s) || s;\n return list.map((f: any) => {\n const src = f?.response?.src ?? f?.src ?? f?.url ?? f?.thumbUrl ?? '';\n const displayUrl = typeof src === 'string' ? toDisplayUrl(src) : src;\n const copy: Record<string, any> = {};\n for (const key of Object.keys(f)) {\n const val = f[key];\n if (val instanceof File) {\n copy[key] = val;\n } else if (val && typeof val === 'object' && !Array.isArray(val)) {\n copy[key] = { ...val };\n } else {\n copy[key] = val;\n }\n }\n if (displayUrl && typeof displayUrl === 'string') {\n copy.url = displayUrl;\n copy.thumbUrl = displayUrl;\n }\n return copy as UploadFile;\n });\n }, []);\n\n const [pendingFileList, setPendingFileList] = useState<UploadFile[] | null>(null);\n\n const fileListFromStore = useMemo(() => {\n const raw = storeValue ?? (storeProps?.fileList as UploadFile[] | undefined) ?? propFileList;\n if (raw == null) return undefined;\n if (typeof raw === 'string' && raw) return srcArrayToFileList([raw]);\n if (!Array.isArray(raw)) return undefined;\n if (raw.length > 0 && typeof raw[0] === 'string') return srcArrayToFileList(raw as string[]);\n return toMutableFileList(raw);\n }, [storeValue, storeProps?.fileList, propFileList, srcArrayToFileList, toMutableFileList]);\n\n // 有上传中的项时使用 pendingFileList,避免覆盖为空导致二次上传不显示\n const fileList = pendingFileList ?? fileListFromStore;\n\n const mergedProps = useMemo(\n () => mergeStoreProps(restProps as Record<string, any>, storeProps ?? undefined, { skipKeys: ['value', 'help', 'validateStatus', 'fileList'] }),\n [restProps, storeProps]\n );\n\n // 上传前校验\n const beforeUpload = useCallback((file: File) => {\n const isWithinSize = file.size / 1024 / 1024 < maxSize;\n if (!isWithinSize) {\n message.error(`文件大小不能超过 ${maxSize}MB`);\n return false;\n }\n return true;\n }, [maxSize]);\n\n // 自定义上传请求 - 使用注入的 upload 方法\n const customRequest = useCallback(async (options: any) => {\n const { file, onSuccess, onError, onProgress } = options;\n const config = getCoreConfig();\n \n // 如果配置了 upload 方法,使用它\n if (config.upload) {\n try {\n onProgress?.({ percent: 30 });\n const result = await coreUpload(file, { \n url: uploadUrl,\n headers: {\n 'Authorization': getAccessToken() ? `Bearer ${getAccessToken()}` : '',\n },\n });\n onProgress?.({ percent: 100 });\n onSuccess?.(result, file);\n } catch (error) {\n onError?.(error);\n message.error('上传失败');\n }\n } else {\n // 回退到默认上传行为\n onError?.(new Error('Upload handler not configured'));\n message.warning('上传功能未配置');\n }\n }, [uploadUrl]);\n\n const handleChange = useCallback(\n (info: any) => {\n if (onChange) {\n onChange(info);\n return;\n }\n const list = Array.isArray(info.fileList) ? toMutableFileList(info.fileList) : info.fileList;\n const srcArray = Array.isArray(list) ? fileListToSrcArray(list) : [];\n const hasUploading = Array.isArray(list) && list.some((f: any) => f?.status === 'uploading');\n // 仅在 srcArray 有值或列表已清空时更新 store;上传中(response 未就绪)srcArray 为空,不可用 [] 覆盖\n const shouldUpdateStore = dataSetKey && dataSetField && (srcArray.length > 0 || !Array.isArray(list) || list.length === 0);\n if (shouldUpdateStore) {\n setDataSet(dataSetKey, dataSetField, srcArray);\n setPendingFileList(null);\n } else if (hasUploading) {\n setPendingFileList(list);\n } else if (list.length === 0) {\n setPendingFileList(null);\n }\n if (validateOnChange) validate(list);\n if (changeAction && sessionId) {\n addCommand(sessionId, createCommand(changeAction, { file: info.file, fileList: list, src: srcArray }));\n }\n },\n [onChange, dataSetKey, dataSetField, setDataSet, validateOnChange, validate, changeAction, sessionId, addCommand, toMutableFileList, fileListToSrcArray]\n );\n\n const handleBlur = useCallback(() => {\n if (validateOnBlur) validate(fileList);\n }, [validateOnBlur, validate, fileList]);\n\n // 获取预览 URL(移除 download=1)\n const getPreviewUrl = useCallback((file: UploadFile): string => {\n const url = file.url || file.thumbUrl;\n if (!url) return '';\n const src = (file.response as any)?.src ?? (typeof url === 'string' ? url : '');\n const viewRes = getCoreConfig().viewRes;\n const previewUrl = src && viewRes ? viewRes(src) : url;\n return String(previewUrl).replace(/([?&])download=1(&|$)/, (_, p1, p2) => (p2 ? p1 : ''));\n }, []);\n\n const isImageFile = useCallback((file: UploadFile): boolean => {\n const src = (file.response as any)?.src ?? file.name ?? '';\n const ext = String(src).split('.').pop()?.toLowerCase() || '';\n return ['webp', 'svg', 'png', 'gif', 'jpg', 'jpeg', 'jfif', 'bmp', 'ico', 'heic', 'heif'].includes(ext) ||\n /^data:image\\//.test(getPreviewUrl(file));\n }, [getPreviewUrl]);\n\n const [previewState, setPreviewState] = useState<{ url: string; name: string; urls: string[]; current: number; open: boolean }>({\n url: '', name: '', urls: [], current: 0, open: false,\n });\n\n const handlePreview = useCallback((file: UploadFile) => {\n const cleanUrl = getPreviewUrl(file);\n if (!cleanUrl) return;\n if (isImageFile(file) && fileList?.length) {\n const imageFiles = fileList.filter((f) => isImageFile(f));\n const urls = imageFiles.map((f) => getPreviewUrl(f)).filter(Boolean);\n const idx = imageFiles.findIndex((f) => (f.uid || f.url) === (file.uid || file.url));\n setPreviewState({ url: cleanUrl, name: file.name, urls, current: idx >= 0 ? idx : 0, open: true });\n } else if (!isImageFile(file)) {\n window.open(cleanUrl, '_blank');\n }\n }, [getPreviewUrl, isImageFile, fileList]);\n\n const config = getCoreConfig();\n const useCustomUpload = !!config.upload && !action;\n\n const merged = mergedProps as Record<string, any>;\n const effectiveButtonText = merged.buttonText ?? buttonText;\n const effectiveListType = merged.listType ?? restProps.listType;\n const maxCount = merged.maxCount as number | undefined;\n const currentCount = fileList?.length ?? 0;\n const reachMaxCount = typeof maxCount === 'number' && currentCount >= maxCount;\n\n // 上传前校验:已达最大数量时拒绝\n const beforeUploadWithMaxCount = useCallback(\n (file: File) => {\n if (reachMaxCount) {\n message.warning(`最多只能上传 ${maxCount} 个文件`);\n return false;\n }\n return beforeUpload(file);\n },\n [reachMaxCount, maxCount, beforeUpload]\n );\n\n return (\n <div onBlur={handleBlur}>\n <Upload\n {...mergedProps}\n disabled={develop ? false : mergedProps.disabled}\n fileList={fileList}\n onChange={handleChange}\n onPreview={handlePreview}\n beforeUpload={beforeUploadWithMaxCount}\n customRequest={useCustomUpload ? customRequest : undefined}\n action={useCustomUpload ? undefined : (action || uploadUrl)}\n openFileDialogOnClick={!develop}\n >\n {!reachMaxCount && (children ||\n (effectiveListType === 'picture-card' || effectiveListType === 'picture-circle' ? (\n <button style={{ border: 0, background: 'none' }} type=\"button\">\n <PlusOutlined />\n <div style={{ marginTop: 8 }}>{effectiveButtonText}</div>\n </button>\n ) : (\n <Button icon={<UploadOutlined />}>{effectiveButtonText}</Button>\n )))}\n </Upload>\n {help && (\n <div style={{ color: '#ff4d4f', fontSize: 12, marginTop: 4 }}>{help}</div>\n )}\n {previewState.url && (\n <div style={{ position: 'absolute', width: 0, height: 0, overflow: 'hidden' }}>\n {previewState.urls.length > 1 ? (\n <Image.PreviewGroup\n preview={{\n current: previewState.current,\n onOpenChange: (open) => !open && setPreviewState((p) => ({ ...p, open: false })),\n }}\n >\n {previewState.urls.map((url, i) => (\n <Image\n key={i}\n src={url}\n style={{ width: 1, height: 1 }}\n preview={{\n open: previewState.open && previewState.current === i,\n onOpenChange: (v) => !v && setPreviewState((p) => ({ ...p, open: false })),\n }}\n />\n ))}\n </Image.PreviewGroup>\n ) : (\n <Image\n src={previewState.url}\n alt={previewState.name}\n style={{ width: 1, height: 1 }}\n preview={{\n open: previewState.open,\n onOpenChange: (open) => !open && setPreviewState((p) => ({ ...p, open: false })),\n }}\n />\n )}\n </div>\n )}\n </div>\n );\n};\n\nexport default AndUpload;\n\n","import React, { useMemo, useCallback, useState } from 'react';\nimport { AutoComplete } from 'antd';\nimport type { AutoCompleteProps as AntAutoCompleteProps } from 'antd';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport { parseChangeAction, createCommand } from '../../base/actionParser';\nimport { useApiService } from '../../base/hooks/useApiService';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\n// 远程选项配置接口\ninterface RemoteOptionsConfig {\n queryApi?: string;\n keyWordParamName?: string;\n valueKey?: string;\n labelKey?: string;\n fixedParams?: any[];\n}\n\nexport interface AndAutoCompleteProps extends Omit<AntAutoCompleteProps, 'onChange' | 'onSelect'>, BaseComponentProps, DataSetConfig {\n changeAction?: string;\n selectAction?: string;\n onChange?: (value: string) => void;\n onSelect?: (value: string, option: any) => void;\n /** 远程数据URL(自定义属性,不传递给AutoComplete) */\n remoteUrl?: string;\n /** 远程选项配置 */\n remoteOptions?: RemoteOptionsConfig;\n /** 搜索动作(自定义属性,不传递给AutoComplete) */\n searchAction?: string;\n}\n\nexport const AndAutoComplete: React.FC<AndAutoCompleteProps> = ({\n id, sessionId, develop, dataSet, dataSetField, changeAction, selectAction, onChange, onSelect, value: propValue, defaultValue, options,\n // 解构自定义属性,防止传递到 DOM\n remoteUrl: _remoteUrl,\n remoteOptions,\n searchAction: _searchAction,\n ...restProps\n}) => {\n const addCommand = useAndStore((state) => state.addCommand);\n const getDataSet = useAndStore((state) => state.getDataSet);\n const setDataSet = useAndStore((state) => state.setDataSet);\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n \n // 状态\n const [internalOptions, setInternalOptions] = useState<any[]>(options || []);\n const [, setLoading] = useState(false);\n const searchTimeoutRef = React.useRef<ReturnType<typeof setTimeout>>(undefined);\n \n // API 服务\n const { get: apiGet } = useApiService();\n\n const storeValue = useMemo(() => {\n if (dataSetKey && dataSetField) return getDataSet(dataSetKey, dataSetField);\n return undefined;\n }, [dataSetKey, dataSetField, getDataSet]);\n\n const displayValue = useMemo(() => storeValue ?? propValue ?? defaultValue, [storeValue, propValue, defaultValue]);\n\n // 处理搜索\n const handleSearch = useCallback((searchText: string) => {\n // 如果没有配置 queryApi,只做本地处理(Antd AutoComplete 默认支持)\n if (!remoteOptions?.queryApi) {\n if (options) {\n setInternalOptions(\n options.filter(opt => \n (opt.value?.toString().toLowerCase().includes(searchText.toLowerCase()) || \n opt.label?.toString().toLowerCase().includes(searchText.toLowerCase()))\n )\n );\n }\n return;\n }\n\n if (searchTimeoutRef.current) {\n clearTimeout(searchTimeoutRef.current);\n }\n\n searchTimeoutRef.current = setTimeout(async () => {\n if (!remoteOptions?.queryApi) return;\n setLoading(true);\n try {\n const { queryApi, keyWordParamName = 'keyword', valueKey = 'value', labelKey = 'label', fixedParams = [] } = remoteOptions;\n \n // 构建参数\n const params: Record<string, any> = {};\n if (keyWordParamName) {\n params[keyWordParamName] = searchText;\n }\n \n // 处理固定参数\n if (Array.isArray(fixedParams)) {\n fixedParams.forEach(p => {\n if(p.key) params[p.key] = p.value;\n });\n }\n\n const res = await apiGet(queryApi, params);\n \n // 处理响应数据\n let list: any[] = [];\n if (Array.isArray(res)) {\n list = res;\n } else if (res && Array.isArray(res.data)) {\n list = res.data;\n } else if (res && res.data && Array.isArray(res.data.records)) {\n list = res.data.records; // Common pagination structure\n } else if (res && res.result && Array.isArray(res.result)) { // Jeecg structure\n list = res.result;\n }\n\n const mappedOptions = list.map(item => ({\n value: item[valueKey],\n label: item[labelKey] || item[valueKey],\n ...item\n }));\n\n setInternalOptions(mappedOptions);\n\n } catch (err) {\n console.error(\"Failed to fetch remote options:\", err);\n setInternalOptions([]);\n } finally {\n setLoading(false);\n }\n }, 500); // Debounce 500ms\n\n }, [remoteOptions, options, apiGet]);\n\n // 当 options prop 变化时更新 internalOptions (如果未配置 remote)\n React.useEffect(() => {\n if (!remoteOptions?.queryApi && options) {\n setInternalOptions(options);\n }\n }, [options, remoteOptions?.queryApi]);\n\n\n const handleChange = useCallback((value: string) => {\n if (onChange) { onChange(value); return; }\n if (dataSetKey && dataSetField) setDataSet(dataSetKey, dataSetField, value);\n if (changeAction && sessionId) {\n const { actionName, arg } = parseChangeAction(changeAction, value, { id, dataSet, dataSetField });\n addCommand(sessionId, createCommand(actionName, arg));\n }\n }, [onChange, dataSetKey, dataSetField, setDataSet, changeAction, sessionId, id, addCommand]);\n\n const handleSelect = useCallback((value: string, option: any) => {\n if (onSelect) { onSelect(value, option); return; }\n if (selectAction && sessionId) {\n addCommand(sessionId, createCommand(selectAction, { value, option }));\n }\n }, [onSelect, selectAction, sessionId, addCommand]);\n\n return (\n <AutoComplete \n {...restProps} \n disabled={develop ? false : restProps.disabled} \n open={develop ? false : undefined} \n options={internalOptions} \n value={displayValue} \n onChange={handleChange} \n onSelect={handleSelect}\n onSearch={handleSearch}\n style={{ width: '100%', ...restProps.style }} \n />\n );\n};\n\nexport default AndAutoComplete;\n","import React, { useMemo } from 'react';\nimport { Form, Button, Space } from 'antd';\nimport type { FormProps as AntFormProps } from 'antd';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport { createCommand } from '../../base/actionParser';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\nexport interface AndSimpleFormProps extends Omit<AntFormProps, 'onFinish' | 'onReset'>, BaseComponentProps, DataSetConfig {\n submitAction?: string;\n resetAction?: string;\n showSubmit?: boolean;\n showReset?: boolean;\n submitText?: string;\n resetText?: string;\n onFinish?: (values: any) => void;\n onReset?: () => void;\n}\n\nexport const AndSimpleForm: React.FC<AndSimpleFormProps> = ({\n id, sessionId, develop, dataSet, dataSetField, submitAction, resetAction, showSubmit = true, showReset = true, submitText = '提交', resetText = '重置', onFinish, onReset, children, ...restProps\n}) => {\n const [form] = Form.useForm();\n const addCommand = useAndStore((state) => state.addCommand);\n const setDataSet = useAndStore((state) => state.setDataSet);\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n\n const handleFinish = (values: any) => {\n if (onFinish) { onFinish(values); return; }\n if (dataSetKey && dataSetField) setDataSet(dataSetKey, dataSetField, values);\n if (submitAction && sessionId) {\n addCommand(sessionId, createCommand(submitAction, values));\n }\n };\n\n const handleReset = () => {\n form.resetFields();\n if (onReset) { onReset(); return; }\n if (resetAction && sessionId) {\n addCommand(sessionId, createCommand(resetAction, null));\n }\n };\n\n return (\n <Form {...restProps} form={form} onFinish={handleFinish}>\n {children as React.ReactNode}\n {(showSubmit || showReset) && (\n <Form.Item>\n <Space>\n {showSubmit && <Button type=\"primary\" htmlType=\"submit\">{submitText}</Button>}\n {showReset && <Button onClick={handleReset}>{resetText}</Button>}\n </Space>\n </Form.Item>\n )}\n </Form>\n );\n};\n\nexport default AndSimpleForm;\n","import React from 'react';\nimport { Form } from 'antd';\nimport type { FormItemProps as AntFormItemProps } from 'antd';\nimport type { BaseComponentProps } from '../../types/common';\n\nexport interface AndFormItemProps extends AntFormItemProps, BaseComponentProps {}\n\nexport const AndFormItem: React.FC<AndFormItemProps> = ({\n id, sessionId, develop, children, ...restProps\n}) => {\n return <Form.Item {...restProps}>{children}</Form.Item>;\n};\n\nexport default AndFormItem;\n","import React, { useMemo, useCallback } from 'react';\nimport { Transfer, ConfigProvider } from 'antd';\nimport type { Key } from 'react';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport { createCommand } from '../../base/actionParser';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\n// 穿梭方向类型\ntype TransferDirection = 'left' | 'right';\n\n// 穿梭框数据项类型\ninterface TransferItem {\n key: string;\n title: string;\n description?: string;\n disabled?: boolean;\n}\n\n// Semantic DOM 样式类型\ninterface TransferSemanticStyles {\n root?: React.CSSProperties;\n section?: React.CSSProperties;\n header?: React.CSSProperties;\n title?: React.CSSProperties;\n body?: React.CSSProperties;\n list?: React.CSSProperties;\n item?: React.CSSProperties;\n itemIcon?: React.CSSProperties;\n itemContent?: React.CSSProperties;\n footer?: React.CSSProperties;\n actions?: React.CSSProperties;\n}\n\n// 国际化配置\ninterface TransferLocale {\n itemUnit?: string;\n itemsUnit?: string;\n searchPlaceholder?: string;\n notFoundContent?: React.ReactNode;\n}\n\nexport interface AndTransferProps extends BaseComponentProps, DataSetConfig {\n /** 数据源(JSON字符串或数组) */\n dataSource?: TransferItem[] | string;\n /** 目标键(JSON字符串或数组) */\n targetKeys?: string[] | string;\n /** 选中键(JSON字符串或数组) */\n selectedKeys?: string[] | string;\n /** 禁用 */\n disabled?: boolean;\n /** 显示搜索框 */\n showSearch?: boolean;\n /** 显示全选 */\n showSelectAll?: boolean;\n /** 单向模式 */\n oneWay?: boolean;\n /** 分页配置 */\n pagination?: boolean | { pageSize: number; simple?: boolean; showSizeChanger?: boolean; showLessItems?: boolean } | string;\n /** 校验状态 */\n status?: '' | 'error' | 'warning';\n /** 标题 */\n titles?: [string, string] | string;\n /** 操作按钮文案 */\n actions?: [string, string] | string;\n /** 国际化配置 */\n locale?: TransferLocale | string;\n /** 穿梭动作 */\n changeAction?: string;\n /** 选择变化动作 */\n selectChangeAction?: string;\n /** 搜索动作 */\n searchAction?: string;\n /** 滚动动作 */\n scrollAction?: string;\n /** 自定义 onChange */\n onChange?: (targetKeys: Key[], direction: TransferDirection, moveKeys: Key[]) => void;\n /** 自定义 onSelectChange */\n onSelectChange?: (sourceSelectedKeys: Key[], targetSelectedKeys: Key[]) => void;\n /** 自定义 onSearch */\n onSearch?: (direction: TransferDirection, value: string) => void;\n /** 自定义 onScroll */\n onScroll?: (direction: TransferDirection, e: React.SyntheticEvent<HTMLUListElement>) => void;\n /** Semantic DOM 样式 */\n styles?: TransferSemanticStyles | string;\n /** Design Token */\n token?: Record<string, any> | string;\n /** 其他 Transfer props */\n [key: string]: any;\n}\n\n// 解析 JSON 字符串\nconst parseJson = <T,>(value: T | string | undefined, fallback: T): T => {\n if (value === undefined || value === null) return fallback;\n if (typeof value === 'string') {\n try {\n return JSON.parse(value);\n } catch {\n return fallback;\n }\n }\n return value;\n};\n\nexport const AndTransfer: React.FC<AndTransferProps> = ({\n id, sessionId, develop, dataSet, dataSetField,\n dataSource: propDataSource,\n targetKeys: propTargetKeys,\n selectedKeys: propSelectedKeys,\n disabled,\n showSearch,\n showSelectAll,\n oneWay,\n pagination: propPagination,\n status,\n titles: propTitles,\n actions: propActions,\n locale: propLocale,\n changeAction,\n selectChangeAction,\n searchAction,\n scrollAction,\n onChange,\n onSelectChange,\n onSearch,\n onScroll,\n styles: propStyles,\n token: propToken,\n ...restProps\n}) => {\n const addCommand = useAndStore((state) => state.addCommand);\n const getDataSet = useAndStore((state) => state.getDataSet);\n const setDataSet = useAndStore((state) => state.setDataSet);\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n\n // 解析 props\n const styles = useMemo(() => parseJson(propStyles, {}), [propStyles]);\n const token = useMemo(() => parseJson(propToken, {}), [propToken]);\n const titles = useMemo(() => parseJson(propTitles, ['源列表', '目标列表']), [propTitles]);\n const actions = useMemo(() => parseJson(propActions, ['>', '<']), [propActions]);\n const locale = useMemo(() => parseJson(propLocale, { itemUnit: '项', itemsUnit: '项', searchPlaceholder: '请输入搜索内容' }), [propLocale]);\n const pagination = useMemo(() => parseJson(propPagination, false), [propPagination]);\n\n // 从 store 获取 targetKeys\n const storeTargetKeys = useMemo(() => {\n if (dataSetKey && dataSetField) {\n const value = getDataSet(dataSetKey, dataSetField);\n if (Array.isArray(value)) return value as string[];\n }\n return undefined;\n }, [dataSetKey, dataSetField, getDataSet]);\n\n // 从 store 获取数据源\n const storeDataSource = useMemo(() => {\n if (dataSetKey && dataSetField) {\n const data = getDataSet(dataSetKey, `${dataSetField}.dataSource`);\n if (Array.isArray(data)) return data as TransferItem[];\n }\n return undefined;\n }, [dataSetKey, dataSetField, getDataSet]);\n\n // 设计器模式(develop):优先 store,无则回退到静态数据;运行时且配置了 dataSet:仅用 store,不回退到静态 dataSource\n const dataSource = useMemo(() => {\n if (develop) return storeDataSource ?? parseJson(propDataSource, []);\n if (dataSetKey) return storeDataSource ?? [];\n return parseJson(propDataSource, []);\n }, [develop, dataSetKey, storeDataSource, propDataSource]);\n\n // 设计器模式(develop):优先 store,无则回退到静态数据;运行时且配置了 dataSet:仅用 store,不回退到静态 targetKeys\n const targetKeys = useMemo(() => {\n if (develop) return storeTargetKeys ?? parseJson(propTargetKeys, []);\n if (dataSetKey) return storeTargetKeys ?? [];\n return parseJson(propTargetKeys, []);\n }, [develop, dataSetKey, storeTargetKeys, propTargetKeys]);\n\n // 解析 selectedKeys\n const selectedKeys = useMemo(() => parseJson(propSelectedKeys, []), [propSelectedKeys]);\n\n // 穿梭处理\n const handleChange = useCallback((\n nextTargetKeys: Key[],\n direction: TransferDirection,\n moveKeys: Key[]\n ) => {\n if (onChange) {\n onChange(nextTargetKeys, direction, moveKeys);\n return;\n }\n // 更新 store\n if (dataSetKey && dataSetField) {\n setDataSet(dataSetKey, dataSetField, nextTargetKeys);\n }\n // 触发动作\n if (changeAction && sessionId) {\n addCommand(sessionId, createCommand(changeAction, { targetKeys: nextTargetKeys, direction, moveKeys }));\n }\n }, [onChange, dataSetKey, dataSetField, setDataSet, changeAction, sessionId, addCommand]);\n\n // 选择变化处理\n const handleSelectChange = useCallback((\n sourceSelectedKeys: Key[],\n targetSelectedKeys: Key[]\n ) => {\n if (onSelectChange) {\n onSelectChange(sourceSelectedKeys, targetSelectedKeys);\n return;\n }\n if (selectChangeAction && sessionId) {\n addCommand(sessionId, createCommand(selectChangeAction, { sourceSelectedKeys, targetSelectedKeys }));\n }\n }, [onSelectChange, selectChangeAction, sessionId, addCommand]);\n\n // 搜索处理\n const handleSearch = useCallback((direction: TransferDirection, value: string) => {\n if (onSearch) {\n onSearch(direction, value);\n return;\n }\n if (searchAction && sessionId) {\n addCommand(sessionId, createCommand(searchAction, { direction, value }));\n }\n }, [onSearch, searchAction, sessionId, addCommand]);\n\n // 滚动处理\n const handleScroll = useCallback((direction: TransferDirection, e: React.SyntheticEvent<HTMLUListElement>) => {\n if (onScroll) {\n onScroll(direction, e);\n return;\n }\n if (scrollAction && sessionId) {\n addCommand(sessionId, createCommand(scrollAction, { direction }));\n }\n }, [onScroll, scrollAction, sessionId, addCommand]);\n\n // 渲染 Transfer\n const transferElement = (\n <Transfer<TransferItem>\n dataSource={dataSource}\n targetKeys={targetKeys}\n selectedKeys={selectedKeys}\n disabled={disabled}\n showSearch={showSearch}\n showSelectAll={showSelectAll}\n oneWay={oneWay}\n pagination={pagination}\n status={status || undefined}\n titles={titles}\n actions={actions as React.ReactNode[]}\n locale={locale}\n onChange={handleChange}\n onSelectChange={handleSelectChange}\n onSearch={handleSearch}\n onScroll={handleScroll}\n styles={styles}\n render={(item) => item.title}\n {...restProps}\n />\n );\n\n // 如果配置了 token,使用 ConfigProvider 包装\n if (token && Object.keys(token).length > 0) {\n return (\n <ConfigProvider theme={{ components: { Transfer: token } }}>\n {transferElement}\n </ConfigProvider>\n );\n }\n\n return transferElement;\n};\n\nexport default AndTransfer;\n","import React, { useMemo, useCallback } from 'react';\nimport { Segmented, ConfigProvider } from 'antd';\nimport type { SegmentedProps as AntSegmentedProps } from 'antd';\nimport * as AntdIcons from '@ant-design/icons';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport { createCommand } from '../../base/actionParser';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\n// Semantic DOM 样式类型\ninterface SegmentedSemanticStyles {\n root?: React.CSSProperties;\n item?: React.CSSProperties;\n label?: React.CSSProperties;\n icon?: React.CSSProperties;\n}\n\n// 选项配置类型\ninterface SegmentedOption {\n label: string;\n value: string;\n icon?: string;\n disabled?: boolean;\n}\n\nexport interface AndSegmentedProps extends Omit<AntSegmentedProps, 'options' | 'onChange'>, BaseComponentProps, DataSetConfig {\n /** 选项配置 */\n options?: SegmentedOption[] | string;\n /** 当前值 */\n value?: string;\n /** 默认值 */\n defaultValue?: string;\n /** 是否撑满 */\n block?: boolean;\n /** 是否禁用 */\n disabled?: boolean;\n /** 尺寸 */\n size?: 'large' | 'middle' | 'small';\n /** 是否垂直 */\n vertical?: boolean;\n /** 形状 */\n shape?: 'default' | 'round';\n /** 变化动作 */\n changeAction?: string;\n /** 自定义 onChange */\n onChange?: (value: string) => void;\n /** Semantic DOM 样式 */\n styles?: SegmentedSemanticStyles | string;\n /** Design Token */\n token?: Record<string, any> | string;\n}\n\n// 解析 JSON\nconst parseJson = <T,>(value: T | string | undefined, fallback: T): T => {\n if (value === undefined || value === null) return fallback;\n if (typeof value === 'string') {\n try {\n const trimmed = value.trim();\n if (trimmed.startsWith('[') || trimmed.startsWith('{')) {\n return JSON.parse(trimmed);\n }\n } catch {\n return fallback;\n }\n }\n return value as T;\n};\n\n// 获取图标组件\nconst getIconComponent = (iconName: string): React.ReactNode => {\n if (!iconName) return null;\n const IconComponent = (AntdIcons as any)[iconName];\n if (IconComponent) {\n return <IconComponent />;\n }\n return null;\n};\n\n// 解析选项并添加图标\nconst parseOptions = (options: SegmentedOption[] | string | undefined): AntSegmentedProps['options'] => {\n const items = parseJson(options, [] as SegmentedOption[]);\n return items.map(item => ({\n label: item.label,\n value: item.value,\n icon: item.icon ? getIconComponent(item.icon) : undefined,\n disabled: item.disabled,\n }));\n};\n\nexport const AndSegmented: React.FC<AndSegmentedProps> = ({\n id,\n sessionId,\n develop,\n dataSet,\n dataSetField,\n // 核心属性\n options: propOptions,\n value: propValue,\n defaultValue,\n block,\n disabled,\n size,\n vertical,\n shape,\n changeAction,\n onChange,\n // 样式\n styles: propStyles,\n token: propToken,\n ...restProps\n}) => {\n const addCommand = useAndStore((state) => state.addCommand);\n const getDataSet = useAndStore((state) => state.getDataSet);\n const setDataSet = useAndStore((state) => state.setDataSet);\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n\n // 解析样式和 token\n const styles = useMemo(() => parseJson(propStyles, {} as SegmentedSemanticStyles), [propStyles]);\n const token = useMemo(() => parseJson(propToken, {}), [propToken]);\n\n // 解析选项\n const options = useMemo(() => parseOptions(propOptions), [propOptions]);\n\n // 从 store 获取 value\n const storeValue = useMemo(() => {\n if (dataSetKey && dataSetField) {\n const value = getDataSet(dataSetKey, dataSetField);\n if (typeof value === 'string') return value;\n }\n return undefined;\n }, [dataSetKey, dataSetField, getDataSet]);\n\n // 计算当前值\n const currentValue = storeValue ?? propValue;\n\n // 变化处理\n const handleChange = useCallback((value: string | number) => {\n const strValue = String(value);\n \n if (onChange) {\n onChange(strValue);\n return;\n }\n \n // 更新 store\n if (dataSetKey && dataSetField) {\n setDataSet(dataSetKey, dataSetField, strValue);\n }\n \n // 触发动作\n if (changeAction && sessionId) {\n addCommand(sessionId, createCommand(changeAction, { value: strValue }));\n }\n }, [onChange, dataSetKey, dataSetField, setDataSet, changeAction, sessionId, addCommand]);\n\n // 渲染 Segmented\n const segmentedElement = (\n <Segmented\n {...restProps}\n options={options}\n value={currentValue}\n defaultValue={defaultValue}\n block={block}\n disabled={disabled}\n size={size}\n vertical={vertical}\n shape={shape}\n onChange={handleChange}\n styles={styles}\n />\n );\n\n // 应用 Design Token\n if (token && Object.keys(token).length > 0) {\n return (\n <ConfigProvider theme={{ components: { Segmented: token } }}>\n {segmentedElement}\n </ConfigProvider>\n );\n }\n\n return segmentedElement;\n};\n\nexport default AndSegmented;\n","import { useState, useLayoutEffect, useRef } from 'react';\n\n/**\n * 自动计算 scroll.y 的 Hook\n * 当 scroll.y 设置为 \"100%\" 时,自动计算表格 body 的实际像素高度\n */\nexport const useAutoScrollY = (\n containerRef: React.RefObject<HTMLDivElement | null>,\n scrollY: string | number | undefined,\n hasPagination: boolean\n): number | string | undefined => {\n const [calculatedScrollY, setCalculatedScrollY] = useState<number | undefined>(undefined);\n const isAutoHeight = scrollY === '100%';\n const rafRef = useRef<number>(0);\n\n useLayoutEffect(() => {\n if (!isAutoHeight || !containerRef.current) {\n setCalculatedScrollY(undefined);\n return;\n }\n\n const container = containerRef.current;\n\n const calculateHeight = () => {\n // 取消之前的 RAF\n if (rafRef.current) {\n cancelAnimationFrame(rafRef.current);\n }\n\n rafRef.current = requestAnimationFrame(() => {\n // 获取容器高度\n const containerHeight = container.clientHeight;\n if (containerHeight === 0) return;\n\n let occupiedHeight = 0;\n\n // 1. 获取 title 插槽高度 (data-table-slot=\"title\")\n const titleSlot = container.querySelector('[data-table-slot=\"title\"]');\n if (titleSlot) {\n occupiedHeight += (titleSlot as HTMLElement).offsetHeight;\n }\n\n // 2. 获取 footer 插槽高度 (data-table-slot=\"footer\")\n const footerSlot = container.querySelector('[data-table-slot=\"footer\"]');\n if (footerSlot) {\n occupiedHeight += (footerSlot as HTMLElement).offsetHeight;\n }\n\n // 3. 获取表格内置 title 区域高度 (.ant-table-title)\n const tableTitle = container.querySelector('.ant-table-title');\n if (tableTitle) {\n occupiedHeight += (tableTitle as HTMLElement).offsetHeight;\n }\n\n // 4. 获取表头高度 (.ant-table-thead)\n const thead = container.querySelector('.ant-table-thead');\n if (thead) {\n occupiedHeight += (thead as HTMLElement).offsetHeight;\n }\n\n // 5. 获取 pagination 高度(包含其 margin)\n if (hasPagination) {\n const pagination = container.querySelector('.ant-pagination');\n if (pagination) {\n const paginationEl = pagination as HTMLElement;\n const style = window.getComputedStyle(paginationEl);\n const marginTop = parseFloat(style.marginTop) || 0;\n const marginBottom = parseFloat(style.marginBottom) || 0;\n occupiedHeight += paginationEl.offsetHeight + marginTop + marginBottom;\n }\n }\n\n // 6. 获取 ant-table 的 border 和 wrapper 额外空间\n const antTableWrapper = container.querySelector('.ant-table-wrapper');\n if (antTableWrapper) {\n const style = window.getComputedStyle(antTableWrapper as HTMLElement);\n const marginTop = parseFloat(style.marginTop) || 0;\n const marginBottom = parseFloat(style.marginBottom) || 0;\n occupiedHeight += marginTop + marginBottom;\n }\n\n // 计算 tbody 可用高度,预留一点 buffer 避免抖动\n const bodyHeight = containerHeight - occupiedHeight - 2;\n const finalHeight = Math.max(Math.floor(bodyHeight), 50);\n\n setCalculatedScrollY(finalHeight);\n });\n };\n\n // 初始设置较小值,防止表格撑爆导致高度检测失效\n setCalculatedScrollY(50);\n\n // 延迟计算实际高度,等待 DOM 渲染完成\n const timer = setTimeout(calculateHeight, 16);\n\n // 监听容器尺寸变化\n const resizeObserver = new ResizeObserver(() => {\n calculateHeight();\n });\n resizeObserver.observe(container);\n\n // 同时监听表格内部元素变化(例如 pagination 出现/消失)\n const mutationObserver = new MutationObserver(() => {\n calculateHeight();\n });\n mutationObserver.observe(container, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['style', 'class'],\n });\n\n return () => {\n clearTimeout(timer);\n if (rafRef.current) {\n cancelAnimationFrame(rafRef.current);\n }\n resizeObserver.disconnect();\n mutationObserver.disconnect();\n };\n }, [isAutoHeight, hasPagination]);\n\n // 返回计算后的值或原始值\n if (isAutoHeight) {\n return calculatedScrollY;\n }\n return scrollY;\n};\n","import React, { useState, useEffect } from 'react';\nimport { Image } from 'antd';\nimport dayjs from 'dayjs';\nimport { getDictOptions, findDictOptionByValue } from '../../config';\nimport type { DictOption } from '../../config';\nimport type { ExtendedColumnType } from './types';\n\n/** 按字典类型缓存 getDictOptions 的 Promise,同列多行共用一个请求 */\nconst dictOptionsCache = new Map<string, Promise<DictOption[]>>();\n\nfunction getCachedDictOptions(dictCode: string): Promise<DictOption[]> {\n let p = dictOptionsCache.get(dictCode);\n if (!p) {\n p = getDictOptions(dictCode);\n dictOptionsCache.set(dictCode, p);\n }\n return p;\n}\n\n/**\n * 字典单元格:根据 columnDictType 拉取选项,将 value 转成 label 显示\n */\nconst DictCell: React.FC<{ dictCode: string; value: any }> = ({ dictCode, value }) => {\n const [options, setOptions] = useState<DictOption[] | null>(null);\n\n useEffect(() => {\n if (!dictCode) {\n setOptions([]);\n return;\n }\n let cancelled = false;\n getCachedDictOptions(dictCode).then((list) => {\n if (!cancelled) setOptions(list);\n });\n return () => {\n cancelled = true;\n };\n }, [dictCode]);\n\n if (value === null || value === undefined || value === '') {\n return <span />;\n }\n if (!options) {\n return <span>{String(value)}</span>;\n }\n const option = findDictOptionByValue(options, value);\n return <span>{option?.label ?? String(value)}</span>;\n};\n\n/**\n * 渲染数据字典列:通过 getCoreConfig().getDictOptions(columnDictType) 取选项,将 value 转成 label\n */\nexport const renderDictCell = (text: any, col: ExtendedColumnType): React.ReactNode => {\n const dictCode = col.columnDictType || col.dictType || '';\n if (!dictCode) return <span>{text != null && text !== '' ? String(text) : ''}</span>;\n return <DictCell dictCode={dictCode} value={text} />;\n};\n\n/**\n * 渲染图片列\n */\nexport const renderImageCell = (text: any, col: ExtendedColumnType): React.ReactNode => {\n const [width, height] = (col.imageWidthHeight || '').split(/\\s*[,,]\\s*/);\n const imgWidth = width || '50';\n const imgHeight = height || '50';\n\n let imageList: string[] = [];\n if (Array.isArray(text)) {\n imageList = text.slice(0, 3);\n } else if (typeof text === 'string' && text) {\n imageList = [text];\n }\n\n if (imageList.length === 0) {\n return <span>无图片</span>;\n }\n\n if (imageList.length === 1) {\n return (\n <Image\n src={imageList[0]}\n alt=\"image\"\n width={imgWidth}\n height={imgHeight}\n preview={{ src: imageList[0] }}\n />\n );\n }\n\n return (\n <Image.PreviewGroup>\n {imageList.map((src, index) => (\n <Image\n key={index}\n src={src}\n alt={`image-${index}`}\n width={imgWidth}\n height={imgHeight}\n style={{ marginRight: 8, marginBottom: 8 }}\n />\n ))}\n </Image.PreviewGroup>\n );\n};\n\n/**\n * 渲染金额列\n */\nexport const renderMoneyCell = (text: any, col: ExtendedColumnType): React.ReactNode => {\n let moneyValue = parseFloat(text);\n if (isNaN(moneyValue)) {\n return <span>无效金额</span>;\n }\n\n const currencySymbol = col.currencySymbol || '';\n const showCommaSeparator = col.showCommaSeparator || false;\n const minDecimalPlace = col.minDecimalPlace || 0;\n const maxDecimalPlace = col.maxDecimalPlace || 2;\n\n if (Number.isInteger(moneyValue) && minDecimalPlace > 0) {\n moneyValue = parseFloat(moneyValue.toFixed(minDecimalPlace));\n }\n\n const numberFormatOptions: Intl.NumberFormatOptions = {\n style: 'decimal',\n minimumFractionDigits: minDecimalPlace,\n maximumFractionDigits: maxDecimalPlace,\n useGrouping: showCommaSeparator,\n };\n\n let formattedMoney = new Intl.NumberFormat('zh-CN', numberFormatOptions).format(moneyValue);\n\n if (currencySymbol) {\n formattedMoney = currencySymbol + formattedMoney;\n }\n\n return <span>{formattedMoney}</span>;\n};\n\n/**\n * 渲染日期列\n */\nexport const renderDateCell = (text: any, col: ExtendedColumnType): React.ReactNode => {\n let formattedDate = '';\n\n try {\n const parsedDate = dayjs(text);\n if (parsedDate.isValid()) {\n if (col.dateFormat === 'date') {\n formattedDate = parsedDate.format('YYYY-MM-DD');\n } else if (col.dateFormat === 'time') {\n formattedDate = parsedDate.format('HH:mm:ss');\n } else if (col.dateFormat === 'datetime') {\n formattedDate = parsedDate.format('YYYY-MM-DD HH:mm:ss');\n } else {\n formattedDate = parsedDate.format('YYYY-MM-DD HH:mm:ss');\n }\n }\n } catch {\n formattedDate = '';\n }\n\n return <span>{formattedDate}</span>;\n};\n\n/**\n * 渲染数组列\n */\nexport const renderArrayCell = (text: any, col: ExtendedColumnType): React.ReactNode => {\n if (text === null || text === undefined || text === '') {\n return <span></span>;\n }\n\n const separator = col.arraySeparator || ',';\n\n if (Array.isArray(text)) {\n return <span>{text.join(separator)}</span>;\n }\n\n return <span>{String(text)}</span>;\n};\n\n/**\n * 应用列格式化渲染\n */\nexport const applyColumnRendering = (col: ExtendedColumnType): ExtendedColumnType => {\n const processedCol = { ...col };\n\n if (processedCol.specialFields === true && processedCol.renderType) {\n processedCol.render = (text: any, _record: any, _index: number) => {\n switch (processedCol.renderType) {\n case 'image':\n return renderImageCell(text, processedCol);\n case 'money':\n return renderMoneyCell(text, processedCol);\n case 'date':\n return renderDateCell(text, processedCol);\n case 'array':\n return renderArrayCell(text, processedCol);\n case 'dict':\n return renderDictCell(text, processedCol);\n default:\n return text;\n }\n };\n }\n\n return processedCol;\n};\n","import React, { useState, useCallback, useEffect } from 'react';\nimport { Modal, Checkbox, Button, Space, Select, InputNumber } from 'antd';\nimport { MenuOutlined, LeftOutlined, RightOutlined, PlusOutlined, MinusOutlined } from '@ant-design/icons';\nimport type { ColumnSettingItem, ColumnSettingValue } from './types';\n\nimport './ColumnSettingModal.css';\n\nconst WIDTH_MIN = 15;\nconst WIDTH_STEP = 10;\nconst SIZE_OPTIONS = [\n { value: 'small', label: '紧凑' },\n { value: 'middle', label: '默认' },\n { value: 'large', label: '宽松' },\n] as const;\n\nexport interface ColumnSettingModalProps {\n open: boolean;\n /** 弹框定位:表头左下角 (x,y),不传则居中 */\n position?: { x: number; y: number };\n /** 序号列是否显示 */\n rowIndexVisible: boolean;\n /** 数据列配置(不含序号列、操作列) */\n columnItems: ColumnSettingItem[];\n /** 默认配置(用于重置) */\n defaultRowIndexVisible: boolean;\n defaultColumnItems: ColumnSettingItem[];\n /** 自动滚动(scroll.x):true=横向滚动,false=max-content */\n scrollX?: boolean;\n defaultScrollX?: boolean;\n /** 表格 size */\n size?: 'small' | 'middle' | 'large';\n defaultSize?: 'small' | 'middle' | 'large';\n onSave: (value: ColumnSettingValue) => void;\n onClose: () => void;\n}\n\n/** 从 items + scrollX + size 生成 ColumnSettingValue */\nexport function toColumnSettingValue(\n rowIndexVisible: boolean,\n items: ColumnSettingItem[],\n scrollX?: boolean,\n size?: 'small' | 'middle' | 'large'\n): ColumnSettingValue {\n const widthMap: Record<string, number | 'auto'> = {};\n items.forEach((i) => {\n if (i.width !== undefined) widthMap[i.key] = i.width;\n });\n return {\n rowIndexVisible,\n order: items.map((i) => i.key),\n visible: items.reduce<Record<string, boolean>>((acc, i) => {\n acc[i.key] = i.visible;\n return acc;\n }, {}),\n fixed: items.reduce<Record<string, 'left' | 'right' | false>>((acc, i) => {\n if (i.fixed) acc[i.key] = i.fixed;\n return acc;\n }, {}),\n width: Object.keys(widthMap).length ? widthMap : undefined,\n scrollX,\n size,\n };\n}\n\n/** 从 ColumnSettingValue 恢复 items 顺序和配置,缺省用 defaultItems */\nexport function applyColumnSettingValue(\n value: ColumnSettingValue | undefined,\n defaultItems: ColumnSettingItem[],\n defaultRowIndexVisible: boolean,\n defaultScrollX?: boolean,\n defaultSize?: 'small' | 'middle' | 'large'\n): {\n rowIndexVisible: boolean;\n items: ColumnSettingItem[];\n scrollX: boolean;\n size: 'small' | 'middle' | 'large';\n} {\n const order = value?.order ?? defaultItems.map((i) => i.key);\n const visibleMap = value?.visible ?? {};\n const fixedMap = value?.fixed ?? {};\n const widthMap = value?.width ?? {};\n const keyToDefault = new Map(defaultItems.map((i) => [i.key, i]));\n\n const items: ColumnSettingItem[] = [];\n const seen = new Set<string>();\n\n for (const key of order) {\n const def = keyToDefault.get(key);\n if (!def) continue;\n seen.add(key);\n items.push({\n key: def.key,\n title: def.title,\n visible: visibleMap[key] ?? def.visible,\n fixed: fixedMap[key] ?? def.fixed,\n width: widthMap[key] ?? def.width,\n });\n }\n for (const def of defaultItems) {\n if (!seen.has(def.key)) {\n items.push({\n ...def,\n visible: visibleMap[def.key] ?? def.visible,\n fixed: fixedMap[def.key] ?? def.fixed,\n width: widthMap[def.key] ?? def.width,\n });\n }\n }\n\n return {\n rowIndexVisible: value?.rowIndexVisible ?? defaultRowIndexVisible,\n items,\n scrollX: value?.scrollX ?? defaultScrollX ?? false,\n size: value?.size ?? defaultSize ?? 'middle',\n };\n}\n\nconst MODAL_WIDTH = 420;\nconst MODAL_MAX_HEIGHT = 440;\n\nexport const ColumnSettingModal: React.FC<ColumnSettingModalProps> = ({\n open,\n position,\n rowIndexVisible,\n columnItems,\n defaultRowIndexVisible,\n defaultColumnItems,\n scrollX: scrollXProp = false,\n defaultScrollX = false,\n size: sizeProp = 'middle',\n defaultSize = 'middle',\n onSave,\n onClose,\n}) => {\n const [rowIndexVisibleLocal, setRowIndexVisibleLocal] = useState(rowIndexVisible);\n const [items, setItems] = useState<ColumnSettingItem[]>(columnItems);\n const [scrollXLocal, setScrollXLocal] = useState(scrollXProp);\n const [sizeLocal, setSizeLocal] = useState<'small' | 'middle' | 'large'>(sizeProp);\n const [draggedIndex, setDraggedIndex] = useState<number | null>(null);\n\n useEffect(() => {\n if (open) {\n setRowIndexVisibleLocal(rowIndexVisible);\n setItems([...columnItems]);\n setScrollXLocal(scrollXProp);\n setSizeLocal(sizeProp);\n }\n }, [open, rowIndexVisible, columnItems, scrollXProp, sizeProp]);\n\n const flushSave = useCallback(\n (value: ColumnSettingValue) => {\n queueMicrotask(() => onSave(value));\n },\n [onSave]\n );\n\n const buildValue = useCallback(\n (rowIdx: boolean, list: ColumnSettingItem[], scroll?: boolean, sz?: 'small' | 'middle' | 'large') =>\n toColumnSettingValue(rowIdx, list, scroll ?? scrollXLocal, sz ?? sizeLocal),\n [scrollXLocal, sizeLocal]\n );\n\n const handleReset = useCallback(() => {\n setRowIndexVisibleLocal(defaultRowIndexVisible);\n const resetItems = defaultColumnItems.map((i) => ({ ...i }));\n setItems(resetItems);\n setScrollXLocal(defaultScrollX);\n setSizeLocal(defaultSize);\n flushSave(toColumnSettingValue(defaultRowIndexVisible, resetItems, defaultScrollX, defaultSize));\n }, [defaultRowIndexVisible, defaultColumnItems, defaultScrollX, defaultSize, flushSave]);\n\n const toggleVisible = useCallback(\n (key: string) => {\n setItems((prev) => {\n const next = prev.map((i) => (i.key === key ? { ...i, visible: !i.visible } : i));\n flushSave(buildValue(rowIndexVisibleLocal, next));\n return next;\n });\n },\n [rowIndexVisibleLocal, buildValue, flushSave]\n );\n\n const setFixed = useCallback(\n (key: string, fixed: 'left' | 'right' | false) => {\n setItems((prev) => {\n const next = prev.map((i) => (i.key === key ? { ...i, fixed } : i));\n flushSave(buildValue(rowIndexVisibleLocal, next));\n return next;\n });\n },\n [rowIndexVisibleLocal, buildValue, flushSave]\n );\n\n const setWidth = useCallback(\n (key: string, width: number | 'auto') => {\n setItems((prev) => {\n const next = prev.map((i) => (i.key === key ? { ...i, width } : i));\n flushSave(buildValue(rowIndexVisibleLocal, next));\n return next;\n });\n },\n [rowIndexVisibleLocal, buildValue, flushSave]\n );\n\n const adjustWidth = useCallback(\n (key: string, delta: number) => {\n setItems((prev) => {\n const item = prev.find((i) => i.key === key);\n if (!item) return prev;\n const current = typeof item.width === 'number' ? item.width : 80;\n const nextVal = Math.max(WIDTH_MIN, current + delta);\n const next = prev.map((i) => (i.key === key ? { ...i, width: nextVal } : i));\n flushSave(buildValue(rowIndexVisibleLocal, next));\n return next;\n });\n },\n [rowIndexVisibleLocal, buildValue, flushSave]\n );\n\n const moveItem = useCallback(\n (fromIndex: number, toIndex: number) => {\n if (toIndex < 0 || toIndex >= items.length) return;\n const next = [...items];\n const [removed] = next.splice(fromIndex, 1);\n next.splice(toIndex, 0, removed);\n setItems(next);\n flushSave(buildValue(rowIndexVisibleLocal, next));\n },\n [items, rowIndexVisibleLocal, buildValue, flushSave]\n );\n\n const handleRowIndexVisibleChange = useCallback(\n (checked: boolean) => {\n setRowIndexVisibleLocal(checked);\n flushSave(buildValue(checked, items));\n },\n [items, buildValue, flushSave]\n );\n\n const handleScrollXChange = useCallback(\n (checked: boolean) => {\n setScrollXLocal(checked);\n flushSave(buildValue(rowIndexVisibleLocal, items, checked, sizeLocal));\n },\n [rowIndexVisibleLocal, items, sizeLocal, buildValue, flushSave]\n );\n\n const handleSizeChange = useCallback(\n (val: 'small' | 'middle' | 'large') => {\n setSizeLocal(val);\n flushSave(buildValue(rowIndexVisibleLocal, items, scrollXLocal, val));\n },\n [rowIndexVisibleLocal, items, scrollXLocal, buildValue, flushSave]\n );\n\n const onDragStart = (index: number) => (e: React.DragEvent) => {\n setDraggedIndex(index);\n e.dataTransfer.effectAllowed = 'move';\n e.dataTransfer.setData('text/plain', String(index));\n };\n const onDragOver = (index: number) => (e: React.DragEvent) => {\n e.preventDefault();\n e.dataTransfer.dropEffect = 'move';\n if (draggedIndex === null || draggedIndex === index) return;\n moveItem(draggedIndex, index);\n setDraggedIndex(index);\n };\n const onDragEnd = () => setDraggedIndex(null);\n\n const modalStyle =\n position != null\n ? (() => {\n let top = position.y;\n let left = position.x;\n if (typeof window !== 'undefined') {\n if (left + MODAL_WIDTH > window.innerWidth) left = window.innerWidth - MODAL_WIDTH - 16;\n if (left < 16) left = 16;\n if (top + MODAL_MAX_HEIGHT > window.innerHeight) top = Math.max(16, window.innerHeight - MODAL_MAX_HEIGHT - 16);\n if (top < 16) top = 16;\n }\n return { margin: 0, top, left };\n })()\n : undefined;\n\n return (\n <Modal\n title=\"列设置\"\n open={open}\n onCancel={onClose}\n footer={null}\n width={MODAL_WIDTH}\n destroyOnHidden\n centered={position == null}\n style={modalStyle}\n mask={false}\n className={`and-table-column-setting-modal${position != null ? ' and-table-column-setting-modal-positioned' : ''}`}\n >\n <div className=\"and-table-column-setting-body\">\n <div className=\"and-table-column-setting-header\">\n <div className=\"and-table-column-setting-header-row\">\n <Checkbox\n checked={rowIndexVisibleLocal}\n onChange={(e) => handleRowIndexVisibleChange(e.target.checked)}\n >\n 序号列\n </Checkbox>\n <Checkbox checked={scrollXLocal} onChange={(e) => handleScrollXChange(e.target.checked)}>\n 自动滚动\n </Checkbox>\n <Space align=\"center\">\n <span className=\"and-table-column-setting-label\">表格</span>\n <Select\n size=\"small\"\n value={sizeLocal}\n onChange={handleSizeChange}\n options={[...SIZE_OPTIONS]}\n style={{ width: 80 }}\n />\n </Space>\n </div>\n </div>\n\n <div className=\"and-table-column-setting-list-wrap\">\n <table className=\"and-table-column-setting-table\">\n <thead>\n <tr>\n <th className=\"and-table-column-setting-th-drag\">排序</th>\n <th className=\"and-table-column-setting-th-name\">列名/可见</th>\n <th className=\"and-table-column-setting-th-width\">宽度(px)</th>\n <th className=\"and-table-column-setting-th-fix\">固定</th>\n </tr>\n </thead>\n <tbody>\n {items.map((col, index) => {\n const widthNum = typeof col.width === 'number' ? col.width : null;\n const isAuto = col.width === 'auto' || (col.width === undefined && widthNum === null);\n return (\n <tr\n key={col.key}\n className={`and-table-column-setting-row ${draggedIndex === index ? 'and-table-column-setting-row-dragging' : ''}`}\n draggable\n onDragStart={onDragStart(index)}\n onDragOver={onDragOver(index)}\n onDragEnd={onDragEnd}\n >\n <td className=\"and-table-column-setting-td-drag\">\n <span className=\"and-table-column-setting-drag\" title=\"拖动排序\">\n <MenuOutlined />\n </span>\n </td>\n <td className=\"and-table-column-setting-td-name\">\n <Checkbox checked={col.visible} onChange={() => toggleVisible(col.key)} />\n <span className=\"and-table-column-setting-title\" title={col.title}>\n {col.title}\n </span>\n </td>\n <td className=\"and-table-column-setting-td-width\">\n <div className=\"and-table-column-setting-width\">\n <span\n className=\"and-table-column-setting-fix-btn\"\n onClick={() => adjustWidth(col.key, -WIDTH_STEP)}\n title={`减 ${WIDTH_STEP}px`}\n >\n <MinusOutlined />\n </span>\n <InputNumber\n size=\"small\"\n min={WIDTH_MIN}\n step={WIDTH_STEP}\n value={isAuto ? undefined : (widthNum ?? 80)}\n placeholder=\"auto\"\n controls={false}\n style={{ width: 44 }}\n onChange={(v) => {\n if (v == null || (typeof v === 'string' && v === '')) setWidth(col.key, 'auto');\n else setWidth(col.key, Math.max(WIDTH_MIN, Number(v)));\n }}\n />\n <span\n className=\"and-table-column-setting-fix-btn\"\n onClick={() => adjustWidth(col.key, WIDTH_STEP)}\n title={`加 ${WIDTH_STEP}px`}\n >\n <PlusOutlined />\n </span>\n </div>\n </td>\n <td className=\"and-table-column-setting-td-fix\">\n <Space className=\"and-table-column-setting-fix\">\n <span\n className={`and-table-column-setting-fix-btn ${col.fixed === 'left' ? 'active' : ''}`}\n onClick={() => setFixed(col.key, col.fixed === 'left' ? false : 'left')}\n title=\"固定到左侧\"\n >\n <LeftOutlined />\n </span>\n <span className=\"and-table-column-setting-fix-divider\">|</span>\n <span\n className={`and-table-column-setting-fix-btn ${col.fixed === 'right' ? 'active' : ''}`}\n onClick={() => setFixed(col.key, col.fixed === 'right' ? false : 'right')}\n title=\"固定到右侧\"\n >\n <RightOutlined />\n </span>\n </Space>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n\n <div className=\"and-table-column-setting-footer\">\n <Button onClick={handleReset}>重置</Button>\n </div>\n </div>\n </Modal>\n );\n};\n","import React, { useMemo, useCallback, useState, useRef, useLayoutEffect } from 'react';\nimport { Table, Tooltip, Flex, Space, ConfigProvider } from 'antd';\n\nimport { useAndStore, useStoreData } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport { createCommand } from '../../base/actionParser';\n\n// 拆分模块\nimport { useAutoScrollY } from './hooks/useAutoScrollY';\nimport { applyColumnRendering } from './renderers';\nimport { ColumnSettingModal, applyColumnSettingValue } from './ColumnSettingModal';\nimport type { AndTableProps, ExtendedColumnType, OperateAction, ColumnSettingItem, ColumnSettingValue } from './types';\n\n// 导出类型供外部使用\nexport type { AndTableProps, ExtendedColumnType, OperateAction, ColumnSettingItem, ColumnSettingValue } from './types';\n\n/**\n * AndTable 组件\n * 封装 Ant Design Table,支持数据绑定和动作解析\n */\nexport const AndTable: React.FC<AndTableProps> = ({\n id,\n sessionId,\n develop,\n dataSet,\n dataSetField,\n columns = [],\n operateColumns = [],\n sampleData,\n\n operationColumnVisible = true,\n selectRowEnable,\n singleSelectMode,\n selectAction,\n rowKeyField = 'id',\n displayRowIndex,\n queryAction,\n pagination,\n emptyText,\n bordered,\n size,\n sticky,\n scroll,\n autoFillHeight,\n // 插槽配置\n showTitle,\n showSummary,\n showFooter,\n renderTitle,\n renderSummary,\n renderFooter,\n children,\n token: propToken,\n columnSettingOpenKey: _columnSettingOpenKey,\n columnSettingsKey: _columnSettingsKey,\n ...restProps\n}) => {\n // Store hooks\n const addCommand = useAndStore((state) => state.addCommand);\n const getDataSet = useAndStore((state) => state.getDataSet);\n const setDataSet = useAndStore((state) => state.setDataSet);\n\n const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>([]);\n const containerRef = useRef<HTMLDivElement>(null);\n const [columnSettingPosition, setColumnSettingPosition] = useState<{ x: number; y: number } | undefined>(undefined);\n\n // ==================== 工具函数 ====================\n\n const parseJson = useCallback(<T,>(value: T | string | undefined, fallback: T): T => {\n if (value === undefined || value === null) return fallback;\n if (typeof value === 'string') {\n try {\n return (JSON.parse(value) as T) ?? fallback;\n } catch {\n return fallback;\n }\n }\n return value;\n }, []);\n\n // ==================== 数据源处理 ====================\n\n const columnsArray = useMemo(() => Array.isArray(columns) ? columns : [], [columns]);\n const operateColumnsArray = useMemo(() => Array.isArray(operateColumns) ? operateColumns : [], [operateColumns]);\n\n // 本表用到的 store key 与列设置状态(一次算清)\n const keys = useMemo(\n () => ({\n dataSet: getDataSetStoreKey(sessionId, dataSet),\n pagination: dataSet ? getDataSetStoreKey(sessionId, `${dataSet}_pagination`) : undefined,\n selected: dataSet ? getDataSetStoreKey(sessionId, `${dataSet}_selected`) : undefined,\n columnSettingOpen: dataSet && sessionId\n ? getDataSetStoreKey(sessionId, `${dataSet}_columnSettingOpen`)\n : undefined,\n columnSettings: dataSet && sessionId\n ? getDataSetStoreKey(sessionId, `${dataSet}_columnSettings`)\n : undefined,\n }),\n [sessionId, dataSet]\n );\n\n // 列设置弹框:由 Extend 通过 updateItem(sessionId_dataSet_columnSettingOpen, true) 打开\n const columnSettingOpen = useAndStore((s) =>\n keys.columnSettingOpen ? s.dataSets[keys.columnSettingOpen]?.value === true : false\n );\n\n // 弹框打开时测量表头位置,将弹框放在表头下方且与表格右边缘对齐(关闭时不清空 position,避免关闭动画时先居中再消失)\n const COLUMN_SETTING_MODAL_WIDTH = 420;\n useLayoutEffect(() => {\n if (!columnSettingOpen || !containerRef.current) return;\n const header =\n containerRef.current.querySelector<HTMLElement>('.ant-table-thead') ||\n containerRef.current.querySelector<HTMLElement>('.ant-table-header');\n if (!header) return;\n const rect = header.getBoundingClientRect();\n setColumnSettingPosition({\n x: rect.right - COLUMN_SETTING_MODAL_WIDTH,\n y: rect.bottom + 8,\n });\n }, [columnSettingOpen]);\n const savedColumnSettings = useAndStore((s) => {\n const v = keys.columnSettings ? s.dataSets[keys.columnSettings]?.value : undefined;\n return typeof v === 'object' && v !== null ? (v as ColumnSettingValue) : undefined;\n });\n\n // 表格数据:从 store 按 dataSetKey + dataSetField 取数组(支持多级路径与 list[0])\n const storeData = useStoreData(keys.dataSet, dataSetField);\n\n // 已绑定数据集时优先用 store 数据;未绑定时用示例数据\n const tableData = useMemo(() => {\n if (keys.dataSet) return storeData;\n return sampleData?.data || [];\n }, [keys.dataSet, storeData, sampleData?.data]);\n\n // ==================== Token 配置 ====================\n\n const tableToken = useMemo(() => parseJson(propToken, {}), [propToken, parseJson]);\n const hasTableToken = tableToken && Object.keys(tableToken).length > 0;\n const tableThemeConfig = useMemo(\n () => (hasTableToken ? { components: { Table: tableToken } } : undefined),\n [hasTableToken, tableToken]\n );\n\n // ==================== 分页配置 ====================\n\n // 订阅 dataSets[keys.pagination],使 store 更新 total/current 时触发重渲染\n const paginationChunk = useAndStore((s) =>\n keys.pagination ? s.dataSets[keys.pagination] : undefined\n );\n\n const storePagination = useMemo(() => {\n if (keys.pagination) return getDataSet(keys.pagination, '') || {};\n return {};\n }, [keys.pagination, getDataSet, paginationChunk]);\n\n const hasPagination = useMemo(() => {\n if (pagination === false) return false;\n if (typeof pagination === 'object' && (pagination as any)?.visible === false) return false;\n return true;\n }, [pagination]);\n\n const paginationConfig = useMemo(() => {\n if (!hasPagination) return false;\n\n const paginationProps = typeof pagination === 'object' ? pagination : {};\n const paginationRest = (restProps as Record<string, unknown>) || {};\n const showSizeChanger =\n paginationProps.showSizeChanger ??\n paginationRest['pagination-showSizeChanger'] ??\n true;\n const showQuickJumper =\n paginationProps.showQuickJumper ??\n paginationRest['pagination-showQuickJumper'] ??\n false;\n const simple = paginationProps.simple ?? paginationRest['pagination-simple'] ?? false;\n const defaultPageSize =\n paginationProps.defaultPageSize ?? paginationRest['pagination-defaultPageSize'] ?? 10;\n const pageSizeOptionsRaw =\n paginationProps.pageSizeOptions ?? paginationRest['pagination-pageSizeOptions'] ?? '10,20,50,100';\n const pageSizeOptions = typeof pageSizeOptionsRaw === 'string'\n ? pageSizeOptionsRaw.split(',').map((s) => parseInt(String(s).trim(), 10) || 10).filter((n) => !isNaN(n))\n : Array.isArray(pageSizeOptionsRaw)\n ? pageSizeOptionsRaw\n : [10, 20, 50, 100];\n\n return {\n ...storePagination,\n showSizeChanger,\n showQuickJumper,\n simple,\n defaultPageSize,\n pageSizeOptions,\n showTotal: (total: number, range: [number, number]) => {\n const template = (paginationProps as any).showTotal || '共 ${total} 条';\n return template\n .replace('${total}', String(total))\n .replace('${range[0]}', String(range[0]))\n .replace('${range[1]}', String(range[1]))\n .replace('${range}', `${range[0]}-${range[1]}`);\n },\n onChange: (page: number, pageSize: number) => {\n if (keys.pagination) {\n setDataSet(keys.pagination, '', { ...storePagination, current: page, pageSize });\n }\n if (queryAction && sessionId) {\n addCommand(sessionId, createCommand(queryAction, null));\n }\n },\n hideOnSinglePage: false,\n };\n }, [hasPagination, pagination, restProps, storePagination, keys.pagination, setDataSet, queryAction, sessionId, addCommand]);\n\n // ==================== 列配置 ====================\n\n const handleActionClick = useCallback((action: OperateAction, record: any) => {\n if (sessionId) {\n addCommand(sessionId, createCommand(action.action, { ...record }));\n }\n }, [sessionId, addCommand]);\n\n // 默认列配置(用于弹窗重置、无持久化时的展示)\n const defaultColumnItems = useMemo<ColumnSettingItem[]>(() => {\n return columnsArray\n .map((col): ColumnSettingItem => {\n let fixed: ColumnSettingItem['fixed'] = false;\n if (col.fixed === true || col.fixed === 'left') fixed = 'left';\n else if (col.fixed === 'right') fixed = 'right';\n const w = (col as any).width;\n return {\n key: String(col.key ?? col.dataIndex ?? ''),\n title: typeof col.title === 'string' ? col.title : '列',\n visible: col.visible !== false,\n fixed,\n width: typeof w === 'number' ? w : 'auto',\n };\n })\n .filter((i) => i.key);\n }, [columnsArray]);\n\n const defaultRowIndexVisible = displayRowIndex === true;\n const defaultScrollX = false;\n const defaultSize = (size === 'small' || size === 'large' ? size : 'middle') as 'small' | 'middle' | 'large';\n\n // 当前列配置(来自 store 或默认)\n const { rowIndexVisible: effectiveRowIndexVisible, items: effectiveColumnItems, scrollX: effectiveScrollX, size: effectiveSize } = useMemo(() => {\n return applyColumnSettingValue(\n savedColumnSettings,\n defaultColumnItems,\n defaultRowIndexVisible,\n defaultScrollX,\n defaultSize\n );\n }, [savedColumnSettings, defaultColumnItems, defaultRowIndexVisible, defaultScrollX, defaultSize]);\n\n // 是否有列自定义(有 openKey 或 settingsKey 即启用)\n const hasColumnSetting = Boolean(dataSet && sessionId);\n\n const tableColumns = useMemo(() => {\n const result: ExtendedColumnType[] = [];\n\n // 序号列(受列设置控制)\n if (effectiveRowIndexVisible) {\n result.push({\n title: '序号',\n key: 'rowIndex',\n width: 60,\n align: 'center',\n render: (_: any, __: any, index: number) => {\n const current = storePagination.current || 1;\n const pageSize = storePagination.pageSize || 10;\n return (current - 1) * pageSize + index + 1;\n },\n });\n }\n\n // 数据列(顺序、显隐、固定受列设置控制)\n const keyToCol = new Map(columnsArray.map((col) => [String(col.key ?? col.dataIndex ?? ''), col]));\n const visibleItems = effectiveColumnItems.filter((i) => i.visible);\n visibleItems.forEach((item) => {\n const col = keyToCol.get(item.key);\n if (!col) return;\n const fixed = item.fixed || undefined;\n const colWidth = item.width === 'auto' || item.width === undefined ? undefined : item.width;\n result.push(applyColumnRendering({\n ...col,\n dataIndex: col.dataIndex || col.key,\n fixed: fixed || col.fixed,\n width: colWidth ?? (col as any).width,\n }));\n });\n\n // 操作列\n if (operationColumnVisible !== false && operateColumnsArray.length > 0) {\n result.push({\n title: '操作',\n key: 'action',\n render: (_: any, record: any) => (\n <Space>\n {operateColumnsArray.map((action, idx) => (\n <Tooltip key={idx} title={action.tooltip}>\n <a onClick={() => handleActionClick(action, record)} style={{ marginRight: 5 }}>\n {action.title}\n </a>\n </Tooltip>\n ))}\n </Space>\n ),\n });\n }\n\n return result;\n }, [\n columnsArray,\n operateColumnsArray,\n effectiveRowIndexVisible,\n effectiveColumnItems,\n operationColumnVisible,\n storePagination,\n handleActionClick,\n ]);\n\n const handleColumnSettingClose = useCallback(() => {\n if (keys.columnSettingOpen) setDataSet(keys.columnSettingOpen, '', false);\n }, [keys.columnSettingOpen, setDataSet]);\n\n const handleColumnSettingSave = useCallback(\n (value: ColumnSettingValue) => {\n // 写入 value 字段,与读取 s.dataSets[keys.columnSettings]?.value 一致\n if (keys.columnSettings) setDataSet(keys.columnSettings, 'value', value);\n },\n [keys.columnSettings, setDataSet]\n );\n\n // ==================== 行选择 ====================\n\n const rowSelection = useMemo(() => {\n // 单选模式下不使用 rowSelection(避免空白列)\n if (singleSelectMode) return undefined;\n if (!selectRowEnable) return undefined;\n\n return {\n selectedRowKeys,\n onChange: (rowKeys: React.Key[], selectedRows: any[], info: { type?: string }) => {\n setSelectedRowKeys(rowKeys);\n if (keys.selected) setDataSet(keys.selected, '', rowKeys);\n if (selectAction?.trim() && sessionId) {\n addCommand(sessionId, createCommand(selectAction.trim(), {\n selectedRowKeys: rowKeys,\n selectedRows,\n info,\n }));\n }\n },\n };\n }, [selectRowEnable, singleSelectMode, selectedRowKeys, keys.selected, setDataSet, selectAction, sessionId, addCommand]);\n\n // 单选模式:点击行选中\n const handleRowClick = useCallback((record: any) => {\n if (!singleSelectMode) return;\n\n const key = record[rowKeyField];\n const newSelectedKeys = [key];\n\n setSelectedRowKeys(newSelectedKeys);\n if (keys.selected) setDataSet(keys.selected, '', newSelectedKeys);\n if (selectAction?.trim() && sessionId) {\n addCommand(sessionId, createCommand(selectAction.trim(), { record, selectedRowKeys: newSelectedKeys }));\n }\n }, [singleSelectMode, selectAction, sessionId, rowKeyField, keys.selected, setDataSet, addCommand]);\n\n const rowClassName = useCallback((record: any) => {\n if (!singleSelectMode) return '';\n return selectedRowKeys.includes(record[rowKeyField]) ? 'ant-table-row-selected' : '';\n }, [singleSelectMode, rowKeyField, selectedRowKeys]);\n\n const onRow = useCallback((record: any) => {\n if (!singleSelectMode) return {};\n return { onClick: () => handleRowClick(record), style: { cursor: 'pointer' } };\n }, [singleSelectMode, handleRowClick]);\n\n // ==================== Scroll 配置 ====================\n\n const { style, className, ...tableProps } = restProps;\n\n const rawScroll = useMemo(() => {\n if (scroll) return scroll;\n\n let scrollX: any = (tableProps as any)['scroll-x'];\n let scrollY: any = (tableProps as any)['scroll-y'];\n\n if (String(scrollX) === 'true') scrollX = true;\n else if (String(scrollX) === 'false') scrollX = undefined;\n else if (scrollX === 'max-content') scrollX = 'max-content';\n\n if (scrollY === '' || scrollY === null || scrollY === undefined) scrollY = undefined;\n\n if (scrollX !== undefined || scrollY !== undefined) return { x: scrollX, y: scrollY };\n return undefined;\n }, [scroll, (tableProps as any)['scroll-x'], (tableProps as any)['scroll-y']]);\n\n const autoScrollY = useAutoScrollY(containerRef, rawScroll?.y, hasPagination);\n\n const finalScroll = useMemo(() => {\n if (!rawScroll && !hasColumnSetting) return undefined;\n const scrollX = hasColumnSetting ? (effectiveScrollX ? true : 'max-content') : rawScroll?.x;\n const scrollY = rawScroll?.y === '100%' ? autoScrollY : rawScroll?.y;\n if (scrollX !== undefined || scrollY !== undefined) return { x: scrollX, y: scrollY };\n return rawScroll ? (rawScroll.y === '100%' ? { x: rawScroll.x, y: autoScrollY } : rawScroll) : undefined;\n }, [rawScroll, autoScrollY, hasColumnSetting, effectiveScrollX]);\n\n // ==================== 插槽处理 ====================\n\n const { titleSlot, summarySlot, footerSlot, otherChildren } = useMemo(() => {\n let titleSlot: React.ReactNode = null;\n let summarySlot: React.ReactNode = null;\n let footerSlot: React.ReactNode = null;\n const otherChildren: React.ReactNode[] = [];\n\n React.Children.forEach(children, (child) => {\n if (!React.isValidElement(child)) {\n otherChildren.push(child);\n return;\n }\n\n const slotType = (child.props as any)['data-slot-type'];\n if (slotType === 'title') titleSlot = child;\n else if (slotType === 'summary') summarySlot = child;\n else if (slotType === 'footer') footerSlot = child;\n else otherChildren.push(child);\n });\n\n return { titleSlot, summarySlot, footerSlot, otherChildren };\n }, [children]);\n\n const finalTitle = useMemo(() => {\n if (titleSlot) return undefined;\n if (renderTitle) return renderTitle;\n if (showTitle && develop) return () => <div data-table-slot-container=\"title\" style={{ minHeight: 20 }} />;\n return undefined;\n }, [showTitle, titleSlot, renderTitle, develop]);\n\n const finalSummary = useMemo(() => {\n if (renderSummary) return renderSummary;\n if (showSummary && summarySlot) {\n return () => (\n <tr><td colSpan={tableColumns.length} style={{ padding: 0 }}>{summarySlot}</td></tr>\n );\n }\n if (showSummary && develop) {\n return () => (\n <tr><td colSpan={tableColumns.length} style={{ padding: 0 }}>\n <div data-table-slot-container=\"summary\" style={{ minHeight: 20 }} />\n </td></tr>\n );\n }\n return undefined;\n }, [showSummary, summarySlot, renderSummary, tableColumns.length, develop]);\n\n // ==================== 渲染 ====================\n\n const tableSize = hasColumnSetting ? effectiveSize : size;\n\n const tableElement = (\n <Table\n {...tableProps}\n columns={tableColumns}\n dataSource={tableData}\n rowKey={rowKeyField}\n rowSelection={rowSelection}\n rowClassName={rowClassName}\n pagination={paginationConfig}\n locale={{ emptyText }}\n bordered={bordered}\n size={tableSize}\n sticky={sticky}\n scroll={finalScroll}\n title={finalTitle}\n summary={finalSummary}\n footer={undefined}\n onRow={onRow}\n />\n );\n\n return (\n <Flex\n ref={containerRef}\n vertical\n style={{ width: '100%', height: '100%', ...style }}\n className={className}\n >\n {/* Title 插槽 */}\n {titleSlot && <div data-table-slot=\"title\">{titleSlot}</div>}\n\n {/* 表格容器 */}\n <div style={{ flex: 1, minHeight: 0, display: 'flex', flexDirection: 'column' }}>\n {singleSelectMode && (() => {\n const bg = tableToken?.rowSelectedBg || '#e6f4ff';\n const hoverBg = tableToken?.rowSelectedHoverBg || tableToken?.rowSelectedBg || '#bae0ff';\n const textColor = tableToken?.rowSelectedColor;\n const linkColor = tableToken?.rowSelectedLinkColor ?? textColor;\n const linkHoverColor = tableToken?.rowSelectedLinkHoverColor ?? linkColor;\n return (\n <style>{`\n .ant-table-row-selected > td {\n background: ${bg} !important;\n ${textColor ? `color: ${textColor};` : ''}\n }\n .ant-table-row-selected:hover > td {\n background: ${hoverBg} !important;\n }\n ${linkColor ? `.ant-table-row-selected > td a { color: ${linkColor}; }` : ''}\n ${linkHoverColor ? `.ant-table-row-selected > td a:hover { color: ${linkHoverColor}; }` : ''}\n `}</style>\n );\n })()}\n {tableThemeConfig ? (\n <ConfigProvider theme={tableThemeConfig}>{tableElement}</ConfigProvider>\n ) : (\n tableElement\n )}\n </div>\n\n {/* Summary 插槽 */}\n {summarySlot}\n\n {/* Footer 插槽 */}\n {footerSlot && <div data-table-slot=\"footer\">{footerSlot}</div>}\n\n {/* 其他子元素 */}\n {otherChildren}\n\n {/* 列设置弹窗:store 键为 ${dataSet}_columnSettingOpen / ${dataSet}_columnSettings */}\n {hasColumnSetting && (\n <ColumnSettingModal\n open={columnSettingOpen}\n position={columnSettingPosition}\n rowIndexVisible={effectiveRowIndexVisible}\n columnItems={effectiveColumnItems}\n defaultRowIndexVisible={defaultRowIndexVisible}\n defaultColumnItems={defaultColumnItems}\n scrollX={effectiveScrollX}\n defaultScrollX={defaultScrollX}\n size={effectiveSize}\n defaultSize={defaultSize}\n onSave={handleColumnSettingSave}\n onClose={handleColumnSettingClose}\n />\n )}\n </Flex>\n );\n};\n\nexport default AndTable;\n","import React, { useMemo } from 'react';\nimport { Typography } from 'antd';\nimport type { TextProps } from 'antd/es/typography/Text';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport { parseArrayNotation } from '../../base/store/storePathUtils';\nimport { useDictOptions } from '../../base/hooks/useApiService';\nimport { findDictOptionByValue } from '../../config';\nimport { formatByType, type FormatType, type FormatOptions } from '../../utils/ReactFormatter';\nimport { useResolveTokenColor } from '../../utils/resolveTokenColor';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\nconst { Text } = Typography;\n\n/**\n * AndText Props 接口\n */\nexport interface AndTextProps extends TextProps, BaseComponentProps, DataSetConfig {\n /** 文本内容 */\n content?: string;\n /** 点击动作 */\n clickAction?: string;\n /** 字体大小 */\n fontSize?: number | string;\n /** 字体颜色 */\n color?: string;\n /** 字典编码 - 用于将 value 转换为 label 显示 */\n dictCode?: string;\n /** 格式化类型 */\n formatType?: FormatType | string;\n /** 格式化参数 */\n formatValue?: FormatOptions | string;\n /** 当值为空时是否显示 content 作为缺省值 */\n fallbackDisplay?: boolean;\n /** 组件样式配置 */\n styles?: React.CSSProperties;\n}\n\n/**\n * AndText 组件\n * 封装 Ant Design Typography.Text,支持数据绑定、字典转换和数据格式化\n */\nexport const AndText: React.FC<AndTextProps> = ({\n id,\n sessionId,\n develop,\n content,\n children,\n dataSet,\n dataSetField,\n fontSize,\n color,\n dictCode,\n formatType,\n formatValue,\n fallbackDisplay = false,\n styles,\n // Filter out custom props that shouldn't be passed to DOM\n clickAction: _clickAction,\n ...restProps\n}) => {\n const getDataSet = useAndStore((state) => state.getDataSet);\n const getProps = useAndStore((state) => state.getProps);\n\n // dictCode=selectedCount 时:用 dataSetField 作为 dataSet,读取 selectedCount 字段(表格选中数展示)\n const effectiveDataSet = useMemo(\n () => (dictCode === 'selectedCount' && dataSetField && !dataSet ? dataSetField : dataSet),\n [dictCode, dataSetField, dataSet]\n );\n const effectiveDataSetField = useMemo(\n () => (dictCode === 'selectedCount' ? 'selectedCount' : dataSetField),\n [dictCode, dataSetField]\n );\n\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, effectiveDataSet),\n [sessionId, effectiveDataSet]\n );\n\n // 订阅 dataSets 对应块,使 store 更新时触发重渲染(与 useStoreData 一致)\n const dataChunk = useAndStore((s) => {\n if (!dataSetKey) return undefined;\n const storeKey = parseArrayNotation(dataSetKey).baseName;\n return s.dataSets[storeKey];\n });\n\n // 使用 dictCode 加载字典数据\n const { options: dictOptions } = useDictOptions(dictCode);\n\n // 从 store 获取动态 props\n const storeProps = useMemo(() => {\n if (sessionId && id) {\n return getProps(sessionId, id);\n }\n return null;\n }, [sessionId, id, getProps]);\n\n // 从数据集获取值(依赖 dataChunk 以响应 store 变化)\n const storeValue = useMemo(() => {\n if (dataSetKey && effectiveDataSetField) {\n return getDataSet(dataSetKey, effectiveDataSetField);\n }\n return undefined;\n }, [dataSetKey, effectiveDataSetField, getDataSet, dataChunk]);\n\n // 解析格式化参数\n const formatOptions = useMemo((): FormatOptions => {\n if (!formatValue) return {};\n if (typeof formatValue === 'string') {\n try {\n return JSON.parse(formatValue);\n } catch {\n return {};\n }\n }\n return formatValue;\n }, [formatValue]);\n\n // 检查是否为空值\n const isEmpty = (value: any): boolean => {\n return value === null || value === undefined || value === '' || \n (typeof value === 'string' && value.trim() === '');\n };\n\n // 获取原始值\n const rawValue = useMemo(() => {\n // 设计模式下,直接显示 content\n if (develop) {\n return content;\n }\n // 优先使用 store 中的值\n if (storeValue !== undefined && storeValue !== null && storeValue !== '') {\n // 如果值为空且开启 fallbackDisplay,返回 content\n if (isEmpty(storeValue) && fallbackDisplay) {\n return content;\n }\n return storeValue;\n }\n // 其次使用 storeProps 中的 content\n if (storeProps?.content !== undefined) {\n return storeProps.content;\n }\n // 最后使用 prop 中的值\n return content;\n }, [develop, storeValue, storeProps?.content, content, fallbackDisplay]);\n\n // 字典转换:将 value 转换为 label\n const dictTransformed = useMemo(() => {\n if (dictCode && dictOptions.length > 0 && rawValue !== undefined && rawValue !== null) {\n const item = findDictOptionByValue(dictOptions, rawValue);\n return item?.label ?? rawValue;\n }\n return rawValue;\n }, [dictCode, dictOptions, rawValue]);\n\n // 格式化处理:应用 formatType\n const displayContent = useMemo(() => {\n // 设计模式下跳过格式化\n if (develop) {\n return dictTransformed;\n }\n \n // 获取有效的格式化类型\n const effectiveFormatType = storeProps?.formatType || formatType;\n \n if (effectiveFormatType && dictTransformed !== undefined && dictTransformed !== null) {\n return formatByType(dictTransformed, effectiveFormatType, formatOptions);\n }\n return dictTransformed;\n }, [develop, dictTransformed, formatType, formatOptions, storeProps?.formatType]);\n\n // 合并 props(排除不传给 DOM 的自定义 prop,避免 React 警告)\n const mergedProps = useMemo(() => {\n const baseProps = { ...restProps };\n if (storeProps && typeof storeProps === 'object') {\n Object.keys(storeProps).forEach((key) => {\n if (!['content', 'formatType', 'formatValue', 'clickAction'].includes(key) && storeProps[key] !== undefined && storeProps[key] !== null) {\n (baseProps as any)[key] = storeProps[key];\n }\n });\n }\n return baseProps;\n }, [restProps, storeProps]);\n\n // 解析 Design Token 颜色\n const effectiveColor = storeProps?.color ?? color;\n const resolvedColor = useResolveTokenColor(effectiveColor);\n\n // 自定义样式\n const customStyle = useMemo(() => {\n const style: React.CSSProperties = { width: '100%' };\n const fs = storeProps?.fontSize ?? fontSize;\n \n if (fs) {\n // 如果没有单位,默认添加 px\n const formattedFontSize = fs && !String(fs).match(/\\d+(px|em|rem|%|vh|vw|pt|pc|in|cm|mm|ex|ch)$/)\n ? `${fs}px`\n : fs;\n style.fontSize = formattedFontSize;\n }\n if (resolvedColor) {\n style.color = resolvedColor;\n }\n return style;\n }, [fontSize, resolvedColor, storeProps?.fontSize]);\n\n return (\n <Text {...mergedProps} style={{ ...customStyle, ...styles, ...mergedProps.style }}>\n {displayContent !== undefined && displayContent !== null && displayContent !== '' \n ? String(displayContent) \n : children}\n </Text>\n );\n};\n\nexport default AndText;\n\n\n","import React, { useMemo } from 'react';\nimport { Typography } from 'antd';\nimport type { TitleProps } from 'antd/es/typography/Title';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport { useResolveTokenColor } from '../../utils/resolveTokenColor';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\nconst { Title } = Typography;\n\n/**\n * AndTitle Props 接口\n */\nexport interface AndTitleProps extends TitleProps, BaseComponentProps, DataSetConfig {\n /** 文本内容 */\n content?: string;\n /** 字体颜色 */\n color?: string;\n /** 组件样式配置 */\n styles?: React.CSSProperties;\n}\n\n/**\n * AndTitle 组件\n * 封装 Ant Design Typography.Title,支持数据绑定\n */\nexport const AndTitle: React.FC<AndTitleProps> = ({\n id,\n sessionId,\n develop,\n content,\n children,\n dataSet,\n dataSetField,\n level = 1,\n color,\n styles,\n ...restProps\n}) => {\n const getDataSet = useAndStore((state) => state.getDataSet);\n const getProps = useAndStore((state) => state.getProps);\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n\n // 从 store 获取动态 props\n const storeProps = useMemo(() => {\n if (sessionId && id) {\n return getProps(sessionId, id);\n }\n return null;\n }, [sessionId, id, getProps]);\n\n // 从数据集获取值\n const storeValue = useMemo(() => {\n if (dataSetKey && dataSetField) {\n return getDataSet(dataSetKey, dataSetField);\n }\n return undefined;\n }, [dataSetKey, dataSetField, getDataSet]);\n\n // 计算最终显示的内容\n const displayContent = useMemo(() => {\n if (develop) return content;\n if (storeValue !== undefined && storeValue !== null && storeValue !== '') {\n return String(storeValue);\n }\n if (storeProps?.content !== undefined) {\n return storeProps.content;\n }\n return content;\n }, [develop, storeValue, storeProps?.content, content]);\n\n // 解析 Design Token 颜色\n const effectiveColor = storeProps?.color ?? color;\n const resolvedColor = useResolveTokenColor(effectiveColor);\n\n // 自定义样式\n const customStyle = useMemo(() => {\n const style: React.CSSProperties = {};\n if (resolvedColor) {\n style.color = resolvedColor;\n }\n return style;\n }, [resolvedColor]);\n\n // 合并 props\n const mergedProps = useMemo(() => {\n const baseProps = { ...restProps };\n if (storeProps && typeof storeProps === 'object') {\n Object.keys(storeProps).forEach((key) => {\n if (key !== 'content' && storeProps[key] !== undefined && storeProps[key] !== null) {\n (baseProps as any)[key] = storeProps[key];\n }\n });\n }\n return baseProps;\n }, [restProps, storeProps]);\n\n return (\n <Title level={level} {...mergedProps} style={{ ...customStyle, ...styles, ...mergedProps.style }}>\n {displayContent || children}\n </Title>\n );\n};\n\nexport default AndTitle;\n","import React, { useMemo } from 'react';\nimport { Typography } from 'antd';\nimport type { ParagraphProps } from 'antd/es/typography/Paragraph';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport { useResolveTokenColor } from '../../utils/resolveTokenColor';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\nconst { Paragraph } = Typography;\n\nexport interface AndParagraphProps extends ParagraphProps, BaseComponentProps, DataSetConfig {\n content?: string;\n color?: string;\n /** 组件样式配置 */\n styles?: React.CSSProperties;\n}\n\nexport const AndParagraph: React.FC<AndParagraphProps> = ({\n id, sessionId, develop, content, children, dataSet, dataSetField, color, styles, ...restProps\n}) => {\n const getDataSet = useAndStore((state) => state.getDataSet);\n const getProps = useAndStore((state) => state.getProps);\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n\n // 从 store 获取动态 props\n const storeProps = useMemo(() => {\n if (sessionId && id) {\n return getProps(sessionId, id);\n }\n return null;\n }, [sessionId, id, getProps]);\n\n // 从数据集获取值\n const storeValue = useMemo(() => {\n if (dataSetKey && dataSetField) {\n return getDataSet(dataSetKey, dataSetField);\n }\n return undefined;\n }, [dataSetKey, dataSetField, getDataSet]);\n\n // 计算最终显示的内容\n const displayContent = useMemo(() => {\n if (develop) return content;\n if (storeValue !== undefined && storeValue !== null && storeValue !== '') {\n return String(storeValue);\n }\n if (storeProps?.content !== undefined) {\n return storeProps.content;\n }\n return content;\n }, [develop, storeValue, storeProps?.content, content]);\n\n // 解析 Design Token 颜色\n const effectiveColor = storeProps?.color ?? color;\n const resolvedColor = useResolveTokenColor(effectiveColor);\n\n // 自定义样式\n const customStyle = useMemo(() => {\n const style: React.CSSProperties = {};\n if (resolvedColor) {\n style.color = resolvedColor;\n }\n return style;\n }, [resolvedColor]);\n\n // 合并 props\n const mergedProps = useMemo(() => {\n const baseProps = { ...restProps };\n if (storeProps && typeof storeProps === 'object') {\n Object.keys(storeProps).forEach((key) => {\n if (key !== 'content' && storeProps[key] !== undefined && storeProps[key] !== null) {\n (baseProps as any)[key] = storeProps[key];\n }\n });\n }\n return baseProps;\n }, [restProps, storeProps]);\n\n return <Paragraph {...mergedProps} style={{ ...customStyle, ...styles, ...mergedProps.style }}>{displayContent || children}</Paragraph>;\n};\n\nexport default AndParagraph;\n\n","import React, { useMemo, useCallback } from 'react';\nimport { Tabs } from 'antd';\nimport type { TabsProps as AntTabsProps, TabsProps } from 'antd';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport { createCommand } from '../../base/actionParser';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\n// Tab 配置项类型(兼容 original 项目格式)\nexport interface TabItem {\n tab: string; // 显示名称\n key: string; // 唯一标识\n disabled?: boolean;\n}\n\nexport interface AndTabsProps extends Omit<AntTabsProps, 'onChange' | 'items'>, BaseComponentProps, DataSetConfig {\n /** Tab 配置列表(original 格式) */\n tabs?: TabItem[] | string;\n /** Antd 5.x items 格式 */\n items?: TabsProps['items'];\n /** 变更动作 */\n changeAction?: string;\n /** onChange 回调 */\n onChange?: (activeKey: string) => void;\n /** 开发模式 */\n develop?: boolean;\n /** Tab 内容渲染函数 */\n renderTabContent?: (key: string, index: number) => React.ReactNode;\n}\n\n// 解析 tabs 配置\nconst parseTabs = (tabs: TabItem[] | string | undefined): TabItem[] => {\n if (!tabs) return [];\n if (typeof tabs === 'string') {\n try {\n return JSON.parse(tabs);\n } catch {\n return [];\n }\n }\n return tabs;\n};\n\nexport const AndTabs: React.FC<AndTabsProps> = ({\n id,\n sessionId,\n develop,\n dataSet,\n dataSetField,\n tabs,\n items: propItems,\n changeAction,\n onChange,\n activeKey: propActiveKey,\n defaultActiveKey,\n renderTabContent,\n children,\n ...restProps\n}) => {\n const addCommand = useAndStore((state) => state.addCommand);\n const getDataSet = useAndStore((state) => state.getDataSet);\n const setDataSet = useAndStore((state) => state.setDataSet);\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n\n // 解析 tabs 配置\n const parsedTabs = useMemo(() => parseTabs(tabs), [tabs]);\n\n // 将 tabs 转换为 Antd 5.x items 格式\n const computedItems = useMemo(() => {\n // 优先使用 propItems(直接传入的 items)\n if (propItems && propItems.length > 0) {\n // 在开发模式下,为每个 item 添加 forceRender\n if (develop) {\n return propItems.map(item => ({ ...item, forceRender: true }));\n }\n return propItems;\n }\n \n // 将 tabs 格式转换为 items 格式\n if (parsedTabs.length > 0) {\n return parsedTabs.map((item, index) => ({\n key: item.key,\n label: item.tab,\n disabled: item.disabled,\n // 开发模式下强制渲染所有 TabPane,以便设计每个 Tab 的内容\n forceRender: develop ? true : undefined,\n children: renderTabContent ? renderTabContent(item.key, index) : null,\n }));\n }\n\n return [];\n }, [propItems, parsedTabs, renderTabContent, develop]);\n\n // 从 store 获取值\n const storeValue = useMemo(() => {\n if (dataSetKey && dataSetField) return getDataSet(dataSetKey, dataSetField);\n return undefined;\n }, [dataSetKey, dataSetField, getDataSet]);\n\n // 内部 activeKey 状态(用于设计模式下的 Tab 切换)\n const [internalActiveKey, setInternalActiveKey] = React.useState<string | undefined>(undefined);\n\n // 计算当前激活的 key\n const activeKey = useMemo(() => {\n // 在设计模式下,优先使用内部状态\n if (develop && internalActiveKey) {\n return internalActiveKey;\n }\n const key = storeValue ?? propActiveKey ?? defaultActiveKey;\n // 如果没有指定 key,默认选中第一个\n if (!key && computedItems.length > 0) {\n return computedItems[0].key;\n }\n return key;\n }, [develop, internalActiveKey, storeValue, propActiveKey, defaultActiveKey, computedItems]);\n\n // 处理 Tab 切换\n const handleChange = useCallback((key: string) => {\n // 在设计模式下,直接更新内部状态\n if (develop) {\n setInternalActiveKey(key);\n return;\n }\n if (onChange) {\n onChange(key);\n return;\n }\n if (dataSetKey && dataSetField) {\n setDataSet(dataSetKey, dataSetField, key);\n }\n if (changeAction && sessionId) {\n addCommand(sessionId, createCommand(changeAction, key));\n }\n }, [develop, onChange, dataSetKey, dataSetField, setDataSet, changeAction, sessionId, addCommand]);\n\n return (\n <Tabs\n {...restProps}\n activeKey={activeKey}\n items={computedItems}\n onChange={handleChange}\n // 在开发模式下禁用动画,防止非激活 TabPane 阻挡点击事件\n animated={develop ? false : restProps.animated}\n >\n {children}\n </Tabs>\n );\n};\n\nexport default AndTabs;\n","import React, { useMemo, useCallback } from 'react';\nimport { Tree, ConfigProvider } from 'antd';\nimport type { TreeProps as AntTreeProps, TreeDataNode } from 'antd';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport { createCommand } from '../../base/actionParser';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\n/**\n * Tree Semantic DOM 样式配置\n * 参考 Ant Design 6.x Semantic DOM 规范\n */\nexport interface TreeSemanticStyles {\n root?: React.CSSProperties;\n item?: React.CSSProperties;\n itemIcon?: React.CSSProperties;\n itemTitle?: React.CSSProperties;\n}\n\nexport interface TreeSemanticClassNames {\n root?: string;\n item?: string;\n itemIcon?: string;\n itemTitle?: string;\n}\n\n/**\n * Tree Design Token\n * 参考 Ant Design 6.x Design Token 规范\n */\nexport interface TreeToken {\n // 目录树\n directoryNodeSelectedBg?: string;\n directoryNodeSelectedColor?: string;\n // 缩进\n indentSize?: number;\n // 节点悬浮\n nodeHoverBg?: string;\n nodeHoverColor?: string;\n // 节点选中\n nodeSelectedBg?: string;\n nodeSelectedColor?: string;\n // 标题\n titleHeight?: number;\n}\n\n/** 与 Ant Design Tree 事件对应的 command 动作名,用于 Extend 中 createWatchCommands 注册 */\nexport interface AndTreeActionProps {\n selectAction?: string;\n checkAction?: string;\n expandAction?: string;\n dragEndAction?: string;\n dragEnterAction?: string;\n dragLeaveAction?: string;\n dragOverAction?: string;\n dragStartAction?: string;\n dropAction?: string;\n rightClickAction?: string;\n loadAction?: string;\n}\n\nexport interface AndTreeProps\n extends Omit<\n AntTreeProps,\n | 'onSelect'\n | 'onCheck'\n | 'onExpand'\n | 'onDragEnd'\n | 'onDragEnter'\n | 'onDragLeave'\n | 'onDragOver'\n | 'onDragStart'\n | 'onDrop'\n | 'onRightClick'\n | 'onLoad'\n | 'expandAction'\n >,\n BaseComponentProps,\n DataSetConfig,\n AndTreeActionProps {\n onSelect?: (selectedKeys: React.Key[], info: any) => void;\n onCheck?: (checkedKeys: React.Key[] | { checked: React.Key[]; halfChecked: React.Key[] }, info: any) => void;\n onExpand?: (expandedKeys: React.Key[], info: any) => void;\n onDragEnd?: (info: { event: React.DragEvent; node: any }) => void;\n onDragEnter?: (info: { event: React.DragEvent; node: any; expandedKeys: React.Key[] }) => void;\n onDragLeave?: (info: { event: React.DragEvent; node: any }) => void;\n onDragOver?: (info: { event: React.DragEvent; node: any }) => void;\n onDragStart?: (info: { event: React.DragEvent; node: any }) => void;\n onDrop?: (info: { event: React.MouseEvent; node: any; dragNode: any; dragNodesKeys: React.Key[] }) => void;\n onRightClick?: (info: { event: React.MouseEvent; node: any }) => void;\n onLoad?: (loadedKeys: React.Key[], info: { event: any; node: any }) => void;\n\n // Semantic DOM 支持\n styles?: TreeSemanticStyles;\n classNames?: TreeSemanticClassNames;\n\n // Design Token 支持\n token?: TreeToken;\n}\n\nexport const AndTree: React.FC<AndTreeProps> = ({\n id,\n sessionId,\n develop,\n dataSet,\n dataSetField,\n selectAction,\n checkAction,\n expandAction,\n dragEndAction,\n dragEnterAction,\n dragLeaveAction,\n dragOverAction,\n dragStartAction,\n dropAction,\n rightClickAction,\n loadAction,\n onSelect,\n onCheck,\n onExpand,\n onDragEnd,\n onDragEnter,\n onDragLeave,\n onDragOver,\n onDragStart,\n onDrop,\n onRightClick,\n onLoad,\n treeData: propTreeData,\n styles,\n classNames,\n token,\n ...restProps\n}) => {\n const addCommand = useAndStore((s) => s.addCommand);\n const setDataSet = useAndStore((s) => s.setDataSet);\n\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n const keySelected = useMemo(\n () => (dataSet ? getDataSetStoreKey(sessionId, `${dataSet}_selected`) : undefined),\n [sessionId, dataSet]\n );\n const keyChecked = useMemo(\n () => (dataSet ? getDataSetStoreKey(sessionId, `${dataSet}_checked`) : undefined),\n [sessionId, dataSet]\n );\n const keyExpanded = useMemo(\n () => (dataSet ? getDataSetStoreKey(sessionId, `${dataSet}_expanded`) : undefined),\n [sessionId, dataSet]\n );\n\n const storeTreeData = useAndStore((s) => {\n if (!dataSetKey) return undefined;\n if (dataSetField) {\n return s.getDataSet(dataSetKey, dataSetField) as TreeDataNode[] | undefined;\n }\n const root = s.dataSets[dataSetKey];\n if (!root) return undefined;\n if (Array.isArray(root)) return root as TreeDataNode[];\n const val = (root as { value?: TreeDataNode[] }).value;\n return Array.isArray(val) ? val : undefined;\n });\n const storeSelectedKeys = useAndStore((s) =>\n keySelected ? (s.getDataSet(keySelected, '') as React.Key[] | undefined) : undefined\n );\n const storeCheckedKeys = useAndStore((s) =>\n keyChecked ? (s.getDataSet(keyChecked, '') as React.Key[] | { checked: React.Key[]; halfChecked: React.Key[] } | undefined) : undefined\n );\n const storeExpandedKeys = useAndStore((s) =>\n keyExpanded ? (s.getDataSet(keyExpanded, '') as React.Key[] | undefined) : undefined\n );\n\n // 设计器模式(develop):优先 store,无则回退到静态 treeData 便于画布预览;运行时且配置了 dataSet:仅用 store,不回退到静态 treeData\n const treeData = useMemo(() => {\n if (develop) return storeTreeData ?? propTreeData ?? [];\n if (dataSetKey) return storeTreeData ?? [];\n return propTreeData ?? [];\n }, [develop, dataSetKey, storeTreeData, propTreeData]);\n const selectedKeys = storeSelectedKeys;\n const checkedKeys = storeCheckedKeys;\n const expandedKeys = storeExpandedKeys;\n\n const handleSelect = useCallback(\n (selectedKeysArr: React.Key[], info: any) => {\n if (onSelect) {\n onSelect(selectedKeysArr, info);\n return;\n }\n if (keySelected) setDataSet(keySelected, '', selectedKeysArr);\n if (selectAction && sessionId) {\n addCommand(sessionId, createCommand(selectAction, { selectedKeys: selectedKeysArr }));\n }\n },\n [onSelect, keySelected, sessionId, setDataSet, selectAction, addCommand]\n );\n\n const handleCheck = useCallback(\n (checkedKeysArr: React.Key[] | { checked: React.Key[]; halfChecked: React.Key[] }, info: any) => {\n if (onCheck) {\n onCheck(checkedKeysArr, info);\n return;\n }\n if (keyChecked) setDataSet(keyChecked, '', checkedKeysArr);\n if (checkAction && sessionId) {\n addCommand(sessionId, createCommand(checkAction, { checkedKeys: checkedKeysArr }));\n }\n },\n [onCheck, keyChecked, sessionId, setDataSet, checkAction, addCommand]\n );\n\n const handleExpand = useCallback(\n (expandedKeysArr: React.Key[], info: any) => {\n if (onExpand) {\n onExpand(expandedKeysArr, info);\n return;\n }\n if (keyExpanded) setDataSet(keyExpanded, '', expandedKeysArr);\n if (expandAction && sessionId) {\n addCommand(sessionId, createCommand(expandAction, { expandedKeys: expandedKeysArr, expanded: info.expanded }));\n }\n },\n [onExpand, keyExpanded, sessionId, setDataSet, expandAction, addCommand]\n );\n\n const handleDragEnd = useCallback(\n (info: { event: React.DragEvent; node: any }) => {\n if (onDragEnd) {\n onDragEnd(info);\n return;\n }\n if (dragEndAction && sessionId) {\n addCommand(sessionId, createCommand(dragEndAction, info));\n }\n },\n [onDragEnd, dragEndAction, sessionId, addCommand]\n );\n\n const handleDragEnter = useCallback(\n (info: { event: React.DragEvent; node: any; expandedKeys: React.Key[] }) => {\n if (onDragEnter) {\n onDragEnter(info);\n return;\n }\n if (dragEnterAction && sessionId) {\n addCommand(sessionId, createCommand(dragEnterAction, info));\n }\n },\n [onDragEnter, dragEnterAction, sessionId, addCommand]\n );\n\n const handleDragLeave = useCallback(\n (info: { event: React.DragEvent; node: any }) => {\n if (onDragLeave) {\n onDragLeave(info);\n return;\n }\n if (dragLeaveAction && sessionId) {\n addCommand(sessionId, createCommand(dragLeaveAction, info));\n }\n },\n [onDragLeave, dragLeaveAction, sessionId, addCommand]\n );\n\n const handleDragOver = useCallback(\n (info: { event: React.DragEvent; node: any }) => {\n if (onDragOver) {\n onDragOver(info);\n return;\n }\n if (dragOverAction && sessionId) {\n addCommand(sessionId, createCommand(dragOverAction, info));\n }\n },\n [onDragOver, dragOverAction, sessionId, addCommand]\n );\n\n const handleDragStart = useCallback(\n (info: { event: React.DragEvent; node: any }) => {\n if (onDragStart) {\n onDragStart(info);\n return;\n }\n if (dragStartAction && sessionId) {\n addCommand(sessionId, createCommand(dragStartAction, info));\n }\n },\n [onDragStart, dragStartAction, sessionId, addCommand]\n );\n\n const handleDrop = useCallback(\n (info: { event: React.MouseEvent; node: any; dragNode: any; dragNodesKeys: React.Key[]; dropPosition?: number; dropToGap?: boolean }) => {\n if (onDrop) {\n onDrop(info);\n return;\n }\n if (dropAction && sessionId) {\n addCommand(sessionId, createCommand(dropAction, info));\n }\n },\n [onDrop, dropAction, sessionId, addCommand]\n );\n\n const handleRightClick = useCallback(\n (info: { event: React.MouseEvent; node: any }) => {\n if (onRightClick) {\n onRightClick(info);\n return;\n }\n if (rightClickAction && sessionId) {\n addCommand(sessionId, createCommand(rightClickAction, info));\n }\n },\n [onRightClick, rightClickAction, sessionId, addCommand]\n );\n\n const handleLoad = useCallback(\n (loadedKeys: React.Key[], info: { event: any; node: any }) => {\n if (onLoad) {\n onLoad(loadedKeys, info);\n return;\n }\n if (loadAction && sessionId) {\n addCommand(sessionId, createCommand(loadAction, { loadedKeys, ...info }));\n }\n },\n [onLoad, loadAction, sessionId, addCommand]\n );\n\n // 过滤空值的 token\n const filteredToken = useMemo(() => {\n if (!token) return undefined;\n const result: Record<string, any> = {};\n Object.entries(token).forEach(([key, value]) => {\n if (value !== '' && value !== undefined && value !== null) {\n result[key] = value;\n }\n });\n return Object.keys(result).length > 0 ? result : undefined;\n }, [token]);\n\n // 构建 theme 配置\n const themeConfig = useMemo(() => {\n const config: any = {};\n \n // develop 模式下禁用动画,避免 GrapesJS iframe 中的 CSSMotion 错误\n if (develop) {\n config.motion = false;\n }\n \n // 添加 token 配置\n if (filteredToken) {\n config.components = { Tree: filteredToken };\n }\n \n return Object.keys(config).length > 0 ? config : undefined;\n }, [develop, filteredToken]);\n\n // develop 模式下的 motion 配置\n // 必须同时在 Tree 组件上设置 motion 属性才能完全禁用展开动画\n const motionConfig = develop ? { motion: false } : {};\n\n const treeElement = (\n <Tree\n {...restProps}\n {...motionConfig}\n treeData={treeData}\n {...(keySelected != null ? { selectedKeys: selectedKeys ?? [] } : {})}\n {...(keyChecked != null ? { checkedKeys: checkedKeys ?? [] } : {})}\n {...(keyExpanded != null ? { expandedKeys: expandedKeys ?? [] } : {})}\n onSelect={handleSelect}\n onCheck={handleCheck}\n onExpand={handleExpand}\n onDragEnd={handleDragEnd}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDragStart={handleDragStart}\n onDrop={handleDrop}\n onRightClick={handleRightClick}\n onLoad={handleLoad}\n styles={styles}\n classNames={classNames}\n />\n );\n\n // 如果有 theme 配置,用 ConfigProvider 包裹\n if (themeConfig) {\n return (\n <ConfigProvider theme={themeConfig}>\n {treeElement}\n </ConfigProvider>\n );\n }\n\n return treeElement;\n};\n\nexport default AndTree;\n","import React, { useMemo } from 'react';\nimport { Timeline } from 'antd';\nimport type { TimelineProps as AntTimelineProps } from 'antd';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\nexport interface AndTimelineProps extends AntTimelineProps, BaseComponentProps, DataSetConfig {}\n\nexport const AndTimeline: React.FC<AndTimelineProps> = ({\n id, sessionId, develop, items: propItems, children, dataSet, dataSetField,\n // @ts-ignore\n remoteUrl, \n mode,\n ...restProps\n}) => {\n const getDataSet = useAndStore((state) => state.getDataSet);\n const getProps = useAndStore((state) => state.getProps);\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n\n const storeProps = useMemo(() => {\n if (sessionId && id) return getProps(sessionId, id);\n return null;\n }, [sessionId, id, getProps]);\n\n const storeValue = useMemo(() => {\n if (dataSetKey && dataSetField) return getDataSet(dataSetKey, dataSetField);\n return undefined;\n }, [dataSetKey, dataSetField, getDataSet]);\n\n // 设计器模式(develop):优先 store,无则回退到静态 items;运行时且配置了 dataSet:仅用 store,不回退到静态 items\n const computedItems = useMemo(() => {\n let items: any;\n const storeItems =\n storeValue !== undefined && storeValue !== null\n ? (Array.isArray(storeValue) ? storeValue : typeof storeValue === 'string' ? (() => { try { return JSON.parse(storeValue); } catch { return undefined; } })() : undefined)\n : storeProps?.items;\n if (develop) {\n items = storeItems ?? propItems;\n } else if (dataSetKey) {\n items = storeItems ?? [];\n } else {\n items = propItems;\n }\n\n if (Array.isArray(items)) {\n return items.map((item: any) => {\n // Fix deprecation warnings: label -> title, children -> content\n const newItem = { ...item };\n if (newItem.label && !newItem.title) {\n newItem.title = newItem.label;\n delete newItem.label;\n }\n if (newItem.children && !newItem.content) {\n newItem.content = newItem.children;\n delete newItem.children;\n }\n return newItem;\n });\n }\n return items;\n }, [develop, dataSetKey, storeValue, storeProps?.items, propItems]);\n\n const mergedProps = useMemo(() => {\n const baseProps = { ...restProps };\n if (storeProps && typeof storeProps === 'object') {\n Object.keys(storeProps).forEach((key) => {\n if (key !== 'items' && storeProps[key] !== undefined && storeProps[key] !== null) {\n (baseProps as any)[key] = storeProps[key];\n }\n });\n }\n return baseProps;\n }, [restProps, storeProps]);\n\n // Map legacy 'left'/'right' to 'start'/'end' to avoid Antd warning\n // @ts-ignore\n const mapMode = (m: string | undefined): AntTimelineProps['mode'] => {\n if (m === 'left') return 'left'; // Try keeping 'left' if 'start' not supported or fallback\n // Actually warning says use start/end.\n if (m === 'left') return 'start' as any;\n if (m === 'right') return 'end' as any;\n return m as any;\n };\n \n // Actually, let's just force start/end if we are sure Antd version supports it.\n // Given the warning \"Please use mode=start|end\", it supports it.\n \n const finalMode = useMemo(() => {\n if (mode === 'left') return 'start';\n if (mode === 'right') return 'end';\n return mode;\n }, [mode]);\n\n return (\n <Timeline \n {...mergedProps} \n // @ts-ignore\n mode={finalMode}\n items={computedItems}\n >\n {children}\n </Timeline>\n );\n};\n\n\nexport default AndTimeline;\n\n","import React, { useMemo, useCallback } from 'react';\nimport { Steps, ConfigProvider } from 'antd';\nimport type { StepsProps as AntStepsProps } from 'antd';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport { createCommand } from '../../base/actionParser';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\n// Steps Semantic DOM 样式类型\ninterface StepsSemanticStyles {\n root?: React.CSSProperties;\n item?: React.CSSProperties;\n itemWrapper?: React.CSSProperties;\n itemIcon?: React.CSSProperties;\n itemHeader?: React.CSSProperties;\n itemTitle?: React.CSSProperties;\n itemSubtitle?: React.CSSProperties;\n itemSection?: React.CSSProperties;\n itemContent?: React.CSSProperties;\n itemRail?: React.CSSProperties;\n}\n\n// StepItem Semantic DOM 样式类型\ninterface StepItemSemanticStyles {\n root?: React.CSSProperties;\n wrapper?: React.CSSProperties;\n icon?: React.CSSProperties;\n header?: React.CSSProperties;\n title?: React.CSSProperties;\n subtitle?: React.CSSProperties;\n section?: React.CSSProperties;\n content?: React.CSSProperties;\n rail?: React.CSSProperties;\n}\n\n// 步骤项类型\ninterface StepItem {\n title?: React.ReactNode;\n subTitle?: React.ReactNode;\n content?: React.ReactNode;\n icon?: React.ReactNode;\n disabled?: boolean;\n status?: 'wait' | 'process' | 'finish' | 'error';\n styles?: StepItemSemanticStyles;\n}\n\nexport interface AndStepsProps extends Omit<AntStepsProps, 'onChange' | 'direction' | 'labelPlacement' | 'items'>, BaseComponentProps, DataSetConfig {\n changeAction?: string;\n onChange?: (current: number) => void;\n /** @deprecated Use orientation instead */\n direction?: 'horizontal' | 'vertical';\n /** Orientation of steps */\n orientation?: 'horizontal' | 'vertical';\n /** @deprecated Use titlePlacement instead */\n labelPlacement?: 'horizontal' | 'vertical';\n /** Title placement */\n titlePlacement?: 'horizontal' | 'vertical';\n /** Steps items */\n items?: StepItem[] | string;\n /** Semantic DOM styles for Steps */\n styles?: StepsSemanticStyles | string;\n /** Design Token */\n token?: Record<string, any> | string;\n}\n\n// 解析 JSON 字符串\nconst parseJson = <T,>(value: T | string | undefined, defaultValue: T): T => {\n if (!value) return defaultValue;\n if (typeof value === 'string') {\n try {\n return JSON.parse(value);\n } catch {\n return defaultValue;\n }\n }\n return value as T;\n};\n\nexport const AndSteps: React.FC<AndStepsProps> = ({\n id, sessionId, develop, dataSet, dataSetField, changeAction, onChange, \n current: propCurrent, items: propItems,\n direction, orientation,\n labelPlacement, titlePlacement,\n styles: propStyles,\n token: propToken,\n ...restProps\n}) => {\n const addCommand = useAndStore((state) => state.addCommand);\n const getDataSet = useAndStore((state) => state.getDataSet);\n const setDataSet = useAndStore((state) => state.setDataSet);\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n\n const storeCurrent = useMemo(() => {\n if (dataSetKey && dataSetField) return getDataSet(dataSetKey, dataSetField);\n return undefined;\n }, [dataSetKey, dataSetField, getDataSet]);\n\n const current = useMemo(() => storeCurrent ?? propCurrent ?? 0, [storeCurrent, propCurrent]);\n\n // 向后兼容:direction → orientation\n const computedOrientation = useMemo(() => {\n return orientation ?? direction;\n }, [orientation, direction]);\n\n // 向后兼容:labelPlacement → titlePlacement\n const computedTitlePlacement = useMemo(() => {\n return titlePlacement ?? labelPlacement;\n }, [titlePlacement, labelPlacement]);\n\n // 解析 items\n const items = useMemo(() => {\n return parseJson<StepItem[]>(propItems, []);\n }, [propItems]);\n\n // 解析 Semantic DOM styles\n const styles = useMemo(() => {\n return parseJson<StepsSemanticStyles>(propStyles, {});\n }, [propStyles]);\n\n // 解析 Design Token\n const token = useMemo(() => {\n return parseJson<Record<string, any>>(propToken, {});\n }, [propToken]);\n\n const handleChange = useCallback((value: number) => {\n if (onChange) { onChange(value); return; }\n if (dataSetKey && dataSetField) setDataSet(dataSetKey, dataSetField, value);\n if (changeAction && sessionId) {\n addCommand(sessionId, createCommand(changeAction, value));\n }\n }, [onChange, dataSetKey, dataSetField, setDataSet, changeAction, sessionId, addCommand]);\n\n // 检查是否需要 ConfigProvider\n const hasToken = Object.keys(token).length > 0;\n\n const stepsElement = (\n <Steps \n {...restProps} \n current={current} \n items={items}\n styles={styles}\n orientation={computedOrientation}\n titlePlacement={computedTitlePlacement}\n onChange={handleChange} \n />\n );\n\n // 如果有 token 配置,使用 ConfigProvider 包装\n if (hasToken) {\n return (\n <ConfigProvider theme={{ components: { Steps: token } }}>\n {stepsElement}\n </ConfigProvider>\n );\n }\n\n return stepsElement;\n};\n\nexport default AndSteps;\n","import React from 'react';\nimport { Statistic } from 'antd';\nimport type { StatisticProps as AntStatisticProps } from 'antd';\nimport type { BaseComponentProps } from '../../types/common';\n\nexport interface AndStatisticsProps extends AntStatisticProps, BaseComponentProps {}\n\nexport const AndStatistics: React.FC<AndStatisticsProps> = ({\n id, sessionId, develop, ...restProps\n}) => {\n return <Statistic {...restProps} />;\n};\n\nexport default AndStatistics;\n","import React from 'react';\nimport { Statistic } from 'antd';\nimport type { CountdownProps } from 'antd/es/statistic/Countdown';\nimport type { BaseComponentProps } from '../../types/common';\n\n\n\nexport interface AndStatisticsCountdownProps extends CountdownProps, BaseComponentProps {}\n\nexport const AndStatisticsCountdown: React.FC<AndStatisticsCountdownProps> = ({\n id, sessionId, develop, ...restProps\n}) => {\n // @ts-ignore\n const Timer = Statistic.Timer;\n if (Timer) {\n return <Timer type=\"countdown\" {...restProps} />;\n }\n const { Countdown } = Statistic;\n return <Countdown {...restProps} />;\n};\n\nexport default AndStatisticsCountdown;\n","import React, { useMemo, useCallback } from 'react';\nimport { Carousel } from 'antd';\nimport type { CarouselProps as AntCarouselProps } from 'antd';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport { createCommand } from '../../base/actionParser';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\n// 旧值到新值的映射\nconst DOT_POSITION_TO_PLACEMENT: Record<string, string> = {\n 'top': 'top',\n 'bottom': 'bottom',\n 'left': 'start',\n 'right': 'end',\n};\n\n// Slide 配置项类型\nexport interface SlideItem {\n title: string; // 显示标题\n key: string; // 唯一标识\n}\n\nexport interface AndCarouselProps extends Omit<AntCarouselProps, 'dotPosition' | 'afterChange'>, BaseComponentProps, DataSetConfig {\n /** @deprecated 使用 dotPlacement 替代 */\n dotPosition?: 'top' | 'bottom' | 'left' | 'right';\n /** 指示点位置 */\n dotPlacement?: 'start' | 'end' | 'top' | 'bottom';\n /** Slide 配置列表 */\n slides?: SlideItem[] | string;\n /** 变更动作 */\n changeAction?: string;\n /** onChange 回调 */\n afterChange?: (current: number) => void;\n /** 开发模式 */\n develop?: boolean;\n /** Slide 内容渲染函数 */\n renderSlideContent?: (key: string, index: number) => React.ReactNode;\n}\n\n// 解析 slides 配置\nconst parseSlides = (slides: SlideItem[] | string | undefined): SlideItem[] => {\n if (!slides) return [];\n if (typeof slides === 'string') {\n try {\n return JSON.parse(slides);\n } catch {\n return [];\n }\n }\n return slides;\n};\n\nexport const AndCarousel: React.FC<AndCarouselProps> = ({\n id,\n sessionId,\n develop,\n dataSet,\n dataSetField,\n dotPosition,\n dotPlacement,\n slides,\n changeAction,\n afterChange,\n renderSlideContent,\n children,\n ...restProps\n}) => {\n const addCommand = useAndStore((state) => state.addCommand);\n const setDataSet = useAndStore((state) => state.setDataSet);\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n\n // 将旧的 dotPosition 映射到新的 dotPlacement\n const computedDotPlacement = useMemo(() => {\n if (dotPlacement) return dotPlacement;\n if (dotPosition) {\n return DOT_POSITION_TO_PLACEMENT[dotPosition] || dotPosition;\n }\n return undefined;\n }, [dotPosition, dotPlacement]);\n\n // 解析 slides 配置\n const parsedSlides = useMemo(() => parseSlides(slides), [slides]);\n\n\n\n // 处理 slide 切换\n const handleAfterChange = useCallback((current: number) => {\n if (afterChange) {\n afterChange(current);\n return;\n }\n if (dataSetKey && dataSetField) {\n setDataSet(dataSetKey, dataSetField, current);\n }\n if (changeAction && sessionId) {\n addCommand(sessionId, createCommand(changeAction, current));\n }\n }, [afterChange, dataSetKey, dataSetField, setDataSet, changeAction, sessionId, addCommand]);\n\n // 生成 slide 内容\n const slideContents = useMemo(() => {\n // 如果有 children,直接使用 children\n if (children) {\n return children;\n }\n\n // 如果有 slides 配置,渲染每个 slide\n if (parsedSlides.length > 0) {\n return parsedSlides.map((slide, index) => {\n const content = renderSlideContent ? renderSlideContent(slide.key, index) : null;\n return (\n <div key={slide.key} data-slide-key={slide.key}>\n {content || (\n <div style={{ \n minHeight: '100px', \n display: 'flex', \n alignItems: 'center', \n justifyContent: 'center',\n color: '#999',\n background: develop ? '#f5f5f5' : undefined,\n }}>\n {develop ? slide.title : null}\n </div>\n )}\n </div>\n );\n });\n }\n\n return null;\n }, [children, parsedSlides, renderSlideContent, develop]);\n\n return (\n <Carousel\n {...restProps}\n dotPlacement={computedDotPlacement as any}\n afterChange={handleAfterChange}\n >\n {slideContents}\n </Carousel>\n );\n};\n\nexport default AndCarousel;\n","import React, { useMemo } from 'react';\nimport { Image } from 'antd';\nimport type { ImageProps as AntImageProps } from 'antd';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport { getCoreConfig } from '../../config';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\n/** 将相对路径 src 转为完整访问地址(含 auth_token),data:/blob:/http 等保持原样 */\nfunction toDisplaySrc(src: string | undefined): string | undefined {\n if (!src || typeof src !== 'string') return src;\n if (/^(data:|blob:|https?:\\/\\/)/i.test(src)) return src;\n const viewRes = getCoreConfig().viewRes;\n return viewRes ? viewRes(src) : src;\n}\n\n// SVG-based placeholder image (clean gray background with centered icon, no white space)\nconst DEFAULT_FALLBACK = \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgMjAwIDIwMCI+PHJlY3Qgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyMDAiIGZpbGw9IiNmMGYwZjAiLz48cGF0aCBkPSJNNzAgNzBhMTIgMTIgMCAxIDEgMCAyNCAxMiAxMiAwIDAgMSAwLTI0em02MCAxMEw4NSAxMzBsLTI1LTIwLTIwIDE1djE1aDEyMHYtNDB6IiBmaWxsPSIjYmZiZmJmIi8+PC9zdmc+\";\n\nexport interface AndImageProps extends AntImageProps, BaseComponentProps, DataSetConfig {\n remoteUrl?: string;\n objectFit?: React.CSSProperties['objectFit'];\n}\n\nexport const AndImage: React.FC<AndImageProps> = ({\n id, sessionId, develop, dataSet, dataSetField, remoteUrl, objectFit = 'cover',\n src: propSrc,\n ...restProps\n}) => {\n const getDataSet = useAndStore((state) => state.getDataSet);\n const getProps = useAndStore((state) => state.getProps);\n\n // 从 store 获取动态 props\n const storeProps = useMemo(() => {\n if (sessionId && id) {\n return getProps(sessionId, id);\n }\n return null;\n }, [sessionId, id, getProps]);\n\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n // 从数据集获取 src 值\n const storeValue = useMemo(() => {\n if (dataSetKey && dataSetField) {\n return getDataSet(dataSetKey, dataSetField);\n }\n return undefined;\n }, [dataSetKey, dataSetField, getDataSet]);\n\n // 计算最终的 src(优先 store,其次 storeProps,最后 prop),并通过 viewRes 转为完整地址\n const computedSrc = useMemo(() => {\n let raw: string | undefined;\n if (storeValue !== undefined && storeValue !== null && storeValue !== '') {\n raw = String(storeValue);\n } else if (storeProps?.src !== undefined) {\n raw = storeProps.src;\n } else {\n raw = propSrc;\n }\n return toDisplaySrc(raw);\n }, [storeValue, storeProps?.src, propSrc]);\n\n // 合并 props\n const mergedProps = useMemo(() => {\n const baseProps = { ...restProps };\n if (storeProps && typeof storeProps === 'object') {\n Object.keys(storeProps).forEach((key) => {\n if (key !== 'src' && storeProps[key] !== undefined && storeProps[key] !== null) {\n (baseProps as any)[key] = storeProps[key];\n }\n });\n }\n return baseProps;\n }, [restProps, storeProps]);\n\n // 构建最终的 imageProps\n const imageProps = {\n ...mergedProps,\n src: computedSrc || undefined,\n fallback: mergedProps.fallback || DEFAULT_FALLBACK,\n // Disable preview in designer mode to prevent GrapesJS selection interference\n preview: develop ? false : mergedProps.preview,\n // Use styles prop instead of CSS overrides (AntD 5.7+)\n styles: {\n root: { width: '100%', height: '100%' },\n image: { width: '100%', height: '100%', objectFit },\n },\n };\n\n return (\n <div style={{ width: '100%', height: '100%', display: 'flex' }}>\n <Image {...imageProps} />\n </div>\n );\n};\n\nexport default AndImage;\n\n","import React, { useMemo } from 'react';\nimport { Image } from 'antd';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport { getCoreConfig } from '../../config';\n\nconst { PreviewGroup } = Image;\n\n/** 将相对路径 src 转为完整访问地址(含 auth_token),data:/blob:/http 等保持原样 */\nfunction toDisplaySrc(src: string | undefined): string | undefined {\n if (!src || typeof src !== 'string') return src;\n if (/^(data:|blob:|https?:\\/\\/)/i.test(src)) return src;\n const viewRes = getCoreConfig().viewRes;\n return viewRes ? viewRes(src) : src;\n}\n\n// Use a simpler type since GroupConsumerProps is not exported\nexport interface AndImageGroupProps extends BaseComponentProps, DataSetConfig {\n children?: React.ReactNode;\n preview?: boolean;\n items?: string[];\n}\n\nexport const AndImageGroup: React.FC<AndImageGroupProps> = ({\n id, sessionId, develop, children, dataSet, dataSetField, items: propItems, ...restProps\n}) => {\n const getDataSet = useAndStore((state) => state.getDataSet);\n const getProps = useAndStore((state) => state.getProps);\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n\n const storeProps = useMemo(() => {\n if (sessionId && id) return getProps(sessionId, id);\n return null;\n }, [sessionId, id, getProps]);\n\n const storeValue = useMemo(() => {\n if (dataSetKey && dataSetField) return getDataSet(dataSetKey, dataSetField);\n return undefined;\n }, [dataSetKey, dataSetField, getDataSet]);\n\n // 设计器模式(develop):优先 store,无则回退到静态 items;运行时且配置了 dataSet:仅用 store,不回退到静态 items\n const rawItems = useMemo(() => {\n const storeItems =\n storeValue !== undefined && storeValue !== null\n ? (Array.isArray(storeValue) ? storeValue : typeof storeValue === 'string' ? (() => { try { return JSON.parse(storeValue); } catch { return undefined; } })() : undefined)\n : storeProps?.items;\n if (develop) return storeItems ?? propItems ?? [];\n if (dataSetKey) return Array.isArray(storeItems) ? storeItems : [];\n return propItems ?? [];\n }, [develop, dataSetKey, storeValue, storeProps?.items, propItems]);\n\n // 通过 viewRes 将相对路径转为完整地址,支持后台 src 展示与预览(items 可为 string[] 或 { url?/src? }[])\n const computedItems = useMemo(() => {\n return rawItems\n .map((item: string | { url?: string; src?: string }) => {\n const src = typeof item === 'string' ? item : (item && typeof item === 'object' ? item.url ?? item.src : undefined);\n return toDisplaySrc(src);\n })\n .filter((s: string | undefined): s is string => Boolean(s));\n }, [rawItems]);\n\n const mergedProps = useMemo(() => {\n const baseProps = { ...restProps };\n if (storeProps && typeof storeProps === 'object') {\n Object.keys(storeProps).forEach((key) => {\n if (key !== 'items' && storeProps[key] !== undefined && storeProps[key] !== null) {\n (baseProps as any)[key] = storeProps[key];\n }\n });\n }\n return baseProps;\n }, [restProps, storeProps]);\n\n return (\n <PreviewGroup {...mergedProps} items={computedItems}>\n {children}\n </PreviewGroup>\n );\n};\n\nexport default AndImageGroup;\n\n","import React, { useMemo } from 'react';\nimport { Avatar, ConfigProvider } from 'antd';\nimport type { AvatarProps as AntAvatarProps } from 'antd';\nimport * as Icons from '@ant-design/icons';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\n/**\n * Avatar Design Token\n * 参考 Ant Design 6.x Design Token 规范\n */\nexport interface AvatarToken {\n /** 头像尺寸 */\n containerSize?: number;\n containerSizeLG?: number;\n containerSizeSM?: number;\n /** 文字尺寸 */\n textFontSize?: number;\n textFontSizeLG?: number;\n textFontSizeSM?: number;\n /** 组头像间距 */\n groupOverlapping?: number;\n groupBorderColor?: string;\n}\n\nexport interface AndAvatarProps extends AntAvatarProps, BaseComponentProps, DataSetConfig {\n clickAction?: string;\n icon?: React.ReactNode | string;\n /** Design Token */\n token?: AvatarToken;\n}\n\nexport const AndAvatar: React.FC<AndAvatarProps> = ({\n id, sessionId, develop, children, dataSet, dataSetField, src: propSrc, clickAction, icon, token, ...restProps\n}) => {\n const getDataSet = useAndStore((state) => state.getDataSet);\n const getProps = useAndStore((state) => state.getProps);\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n\n const storeProps = useMemo(() => {\n if (sessionId && id) return getProps(sessionId, id);\n return null;\n }, [sessionId, id, getProps]);\n\n const storeValue = useMemo(() => {\n if (dataSetKey && dataSetField) return getDataSet(dataSetKey, dataSetField);\n return undefined;\n }, [dataSetKey, dataSetField, getDataSet]);\n\n // Avatar 主要绑定 src\n const computedSrc = useMemo(() => {\n let finalSrc = propSrc;\n if (!develop) {\n if (storeValue !== undefined && storeValue !== null && storeValue !== '') {\n finalSrc = String(storeValue);\n } else if (storeProps?.src !== undefined) {\n finalSrc = storeProps.src;\n }\n }\n // Fix: return undefined if empty string to avoid warning\n if (typeof finalSrc === 'string' && finalSrc.trim() === '') {\n return undefined;\n }\n return finalSrc;\n }, [develop, storeValue, storeProps?.src, propSrc]);\n\n // Handle Icon: Resolve string to Component\n const computedIcon = useMemo(() => {\n let finalIcon = icon;\n if (!develop && storeProps?.icon) {\n finalIcon = storeProps.icon as any;\n }\n\n if (typeof finalIcon === 'string' && finalIcon) {\n const IconComp = (Icons as any)[finalIcon];\n if (IconComp) return <IconComp />;\n }\n return finalIcon as React.ReactNode;\n }, [icon, storeProps?.icon, develop]);\n\n const mergedProps = useMemo(() => {\n const baseProps = { ...restProps };\n if (storeProps && typeof storeProps === 'object') {\n Object.keys(storeProps).forEach((key) => {\n // Exclude handled props\n if (!['src', 'icon', 'token'].includes(key) && storeProps[key] !== undefined && storeProps[key] !== null) {\n (baseProps as any)[key] = storeProps[key];\n }\n });\n }\n return baseProps;\n }, [restProps, storeProps]);\n\n // 过滤和转换 token (处理字符串转数字)\n const filteredToken = useMemo(() => {\n const storeToken = storeProps?.token as AvatarToken | undefined;\n const combinedToken = { ...token, ...storeToken };\n if (!combinedToken || Object.keys(combinedToken).length === 0) return undefined;\n \n const result: Record<string, any> = {};\n Object.entries(combinedToken).forEach(([key, value]) => {\n if (value !== '' && value !== undefined && value !== null) {\n // 数字类型的 token 需要转换\n if (['containerSize', 'containerSizeLG', 'containerSizeSM', \n 'textFontSize', 'textFontSizeLG', 'textFontSizeSM', \n 'groupOverlapping'].includes(key)) {\n const numVal = typeof value === 'string' ? parseInt(value, 10) : value;\n if (!isNaN(numVal)) {\n result[key] = numVal;\n }\n } else {\n result[key] = value;\n }\n }\n });\n return Object.keys(result).length > 0 ? result : undefined;\n }, [token, storeProps?.token]);\n\n // 构建 theme 配置\n const themeConfig = useMemo(() => {\n if (!filteredToken) return undefined;\n return { components: { Avatar: filteredToken } };\n }, [filteredToken]);\n\n const avatarElement = (\n <Avatar \n {...mergedProps} \n src={computedSrc} \n icon={computedIcon}\n >\n {children}\n </Avatar>\n );\n\n if (themeConfig) {\n return <ConfigProvider theme={themeConfig}>{avatarElement}</ConfigProvider>;\n }\n\n return avatarElement;\n};\n\nexport default AndAvatar;\n","import React, { useMemo } from 'react';\nimport { Tag } from 'antd';\nimport type { TagProps as AntTagProps } from 'antd';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport { useDictOptions } from '../../base/hooks/useApiService';\nimport { findDictOptionByValue } from '../../config';\nimport { useResolveTokenColor } from '../../utils/resolveTokenColor';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\n// 默认颜色映射\nconst DEFAULT_COLOR_MAP: Record<string, string> = {\n '0': 'default',\n '1': 'success',\n '2': 'warning',\n '3': 'error',\n 'true': 'success',\n 'false': 'default',\n 'yes': 'success',\n 'no': 'default',\n};\n\nexport interface AndTagProps extends AntTagProps, BaseComponentProps, DataSetConfig {\n /** 标签文本内容 */\n content?: string;\n /** 字典编码 - 用于将 value 转换为 label 显示 */\n dictCode?: string;\n /** 是否根据值自动设置颜色 */\n autoColor?: boolean;\n /** 自定义颜色映射 { value: color } 或 JSON 字符串 */\n colorMap?: Record<string, string> | string;\n /** 关闭动作 */\n closeAction?: string;\n /** 点击动作 */\n clickAction?: string;\n}\n\nexport const AndTag: React.FC<AndTagProps> = ({\n id, \n sessionId, \n develop, \n children, \n content, \n dataSet, \n dataSetField, \n dictCode,\n autoColor = false,\n colorMap: propColorMap,\n color: propColor,\n // Filter out custom props that shouldn't be passed to DOM\n closeAction: _closeAction,\n clickAction: _clickAction,\n ...restProps\n}) => {\n const getDataSet = useAndStore((state) => state.getDataSet);\n const getProps = useAndStore((state) => state.getProps);\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n\n // 使用 dictCode 加载字典数据\n const { options: dictOptions } = useDictOptions(dictCode);\n\n // 解析 colorMap(支持 JSON 字符串)\n const colorMap = useMemo((): Record<string, string> | undefined => {\n if (!propColorMap) return undefined;\n if (typeof propColorMap === 'string') {\n try {\n return JSON.parse(propColorMap);\n } catch {\n return undefined;\n }\n }\n return propColorMap;\n }, [propColorMap]);\n\n const storeProps = useMemo(() => {\n if (sessionId && id) return getProps(sessionId, id);\n return null;\n }, [sessionId, id, getProps]);\n\n const storeValue = useMemo(() => {\n if (dataSetKey && dataSetField) return getDataSet(dataSetKey, dataSetField);\n return undefined;\n }, [dataSetKey, dataSetField, getDataSet]);\n\n // 获取原始值\n const rawValue = useMemo(() => {\n if (develop) return content;\n if (storeValue !== undefined && storeValue !== null && storeValue !== '') {\n return String(storeValue);\n }\n if (storeProps?.content !== undefined) return storeProps.content;\n return content;\n }, [develop, storeValue, storeProps?.content, content]);\n\n // 字典转换:将 value 转换为 label\n const displayContent = useMemo(() => {\n if (dictCode && dictOptions.length > 0 && rawValue !== undefined && rawValue !== null) {\n const item = findDictOptionByValue(dictOptions, rawValue);\n return item?.label ?? rawValue;\n }\n return rawValue;\n }, [dictCode, dictOptions, rawValue]);\n\n // 自动颜色:根据值确定颜色\n const autoTagColor = useMemo(() => {\n if (!autoColor || rawValue === undefined || rawValue === null) return undefined;\n const valueStr = String(rawValue).toLowerCase();\n // 优先使用自定义颜色映射\n if (colorMap && colorMap[valueStr]) {\n return colorMap[valueStr];\n }\n // 其次使用默认映射\n return DEFAULT_COLOR_MAP[valueStr];\n }, [autoColor, rawValue, colorMap]);\n\n const mergedProps = useMemo(() => {\n const baseProps = { ...restProps };\n if (storeProps && typeof storeProps === 'object') {\n Object.keys(storeProps).forEach((key) => {\n if (!['content', 'color'].includes(key) && storeProps[key] !== undefined && storeProps[key] !== null) {\n (baseProps as any)[key] = storeProps[key];\n }\n });\n }\n return baseProps;\n }, [restProps, storeProps]);\n\n // 解析 Design Token 颜色\n const effectiveColor = storeProps?.color ?? propColor;\n const resolvedColor = useResolveTokenColor(effectiveColor);\n\n // 最终颜色:优先使用解析后的颜色,其次使用自动颜色\n const finalColor = resolvedColor || autoTagColor;\n\n return (\n <Tag {...mergedProps} color={finalColor}>\n {displayContent || children}\n </Tag>\n );\n};\n\nexport default AndTag;\n","import React, { useMemo, useCallback } from 'react';\nimport { Pagination } from 'antd';\nimport type { PaginationProps as AntPaginationProps } from 'antd';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport { createCommand } from '../../base/actionParser';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\nexport interface AndPaginationProps extends Omit<AntPaginationProps, 'onChange' | 'onShowSizeChange'>, BaseComponentProps, DataSetConfig {\n /** 页码变化动作 */\n changeAction?: string;\n /** 条数变化动作 */\n showSizeChangeAction?: string;\n /** 自定义 onChange */\n onChange?: (page: number, pageSize: number) => void;\n /** 自定义 onShowSizeChange */\n onShowSizeChange?: (current: number, size: number) => void;\n}\n\nexport const AndPagination: React.FC<AndPaginationProps> = ({\n id, sessionId, develop, dataSet, dataSetField, \n changeAction, showSizeChangeAction,\n onChange, onShowSizeChange,\n current: propCurrent, pageSize: propPageSize, total: propTotal, \n ...restProps\n}) => {\n const addCommand = useAndStore((state) => state.addCommand);\n const setDataSet = useAndStore((state) => state.setDataSet);\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n\n // 有 dataSet 时 field 为空则读/写整块对象(与 getDataSet/setDataSet 空 field 语义一致)\n const paginationField = dataSetField ?? (dataSetKey ? '' : undefined);\n // 稳定空对象引用,避免 selector 返回新 {} 导致无限重渲染(getSnapshot 需缓存)\n const emptyPagination = useMemo(() => ({}), []);\n // 从 store 订阅分页数据,实现双向绑定(Extend/AndTable 更新后组件会重渲染)\n const storePagination = useAndStore((s) => {\n if (!dataSetKey) return emptyPagination;\n const v = s.getDataSet(dataSetKey, paginationField ?? '');\n return (v != null && typeof v === 'object') ? v : emptyPagination;\n });\n\n const current = storePagination.current ?? propCurrent ?? 1;\n const pageSize = storePagination.pageSize ?? propPageSize ?? 10;\n const total = storePagination.total ?? propTotal ?? 0;\n\n // 页码变化处理\n const handleChange = useCallback((page: number, size: number) => {\n if (onChange) { onChange(page, size); return; }\n if (dataSetKey) setDataSet(dataSetKey, paginationField ?? '', { current: page, pageSize: size, total });\n if (changeAction && sessionId) {\n addCommand(sessionId, createCommand(changeAction, { page, pageSize: size }));\n }\n }, [onChange, dataSetKey, paginationField, setDataSet, total, changeAction, sessionId, addCommand]);\n\n // 条数变化处理\n const handleShowSizeChange = useCallback((current: number, size: number) => {\n if (onShowSizeChange) { onShowSizeChange(current, size); return; }\n if (dataSetKey) setDataSet(dataSetKey, paginationField ?? '', { current, pageSize: size, total });\n if (showSizeChangeAction && sessionId) {\n addCommand(sessionId, createCommand(showSizeChangeAction, { current, pageSize: size }));\n }\n }, [onShowSizeChange, dataSetKey, paginationField, setDataSet, total, showSizeChangeAction, sessionId, addCommand]);\n\n return (\n <Pagination \n {...restProps} \n current={current} \n pageSize={pageSize} \n total={total} \n onChange={handleChange}\n onShowSizeChange={handleShowSizeChange}\n showTotal={useMemo(() => {\n const showTotalProp = (restProps as any).showTotal;\n if (typeof showTotalProp === 'string') {\n return (total: number, range: [number, number]) => \n showTotalProp\n .replace('${total}', String(total))\n .replace('${range[0]}', String(range[0]))\n .replace('${range[1]}', String(range[1]))\n .replace('${range}', `${range[0]}-${range[1]}`);\n }\n return showTotalProp;\n }, [(restProps as any).showTotal])}\n />\n );\n};\n\nexport default AndPagination;\n","import React from 'react';\nimport { Breadcrumb } from 'antd';\nimport type { BreadcrumbProps as AntBreadcrumbProps } from 'antd';\nimport type { BaseComponentProps } from '../../types/common';\n\nexport interface AndBreadCrumbProps extends AntBreadcrumbProps, BaseComponentProps {}\n\nexport const AndBreadCrumb: React.FC<AndBreadCrumbProps> = ({\n id, sessionId, develop, items, children, ...restProps\n}) => {\n return <Breadcrumb {...restProps} items={items}>{children}</Breadcrumb>;\n};\n\nexport default AndBreadCrumb;\n","import React, { useMemo, useCallback, useRef, useState, useEffect, useId } from \"react\";\nimport { Menu, ConfigProvider, Button } from \"antd\";\nimport type { MenuProps as AntMenuProps } from \"antd\";\nimport * as Icons from \"@ant-design/icons\";\nimport { LeftOutlined, RightOutlined, UpOutlined, DownOutlined } from \"@ant-design/icons\";\nimport { useAndStore } from \"../../base/store/useAndStore\";\nimport { getDataSetStoreKey } from \"../../base/storeKeyUtils\";\nimport { createCommand } from \"../../base/actionParser\";\nimport type { BaseComponentProps, DataSetConfig } from \"../../types/common\";\n\n/**\n * 将 CSSProperties 对象转换为 CSS 字符串\n */\nconst cssPropertiesToString = (styles: React.CSSProperties): string => {\n return Object.entries(styles)\n .map(([key, value]) => {\n // 将 camelCase 转换为 kebab-case\n const cssKey = key.replace(/([A-Z])/g, '-$1').toLowerCase();\n return `${cssKey}: ${value}`;\n })\n .join('; ');\n};\n\n/**\n * 溢出处理策略类型\n * - default: 使用 Ant Design 原生省略号\n * - pagination: 翻页模式(左右/上下箭头导航)\n * - scroll: 滚动条模式\n */\nexport type OverflowStrategy = \"default\" | \"pagination\" | \"scroll\";\n\n/**\n * 翻页容器组件 - 用于实现翻页模式的溢出处理\n */\nconst PaginationWrapper: React.FC<{\n mode: \"horizontal\" | \"vertical\" | \"inline\";\n arrowStyle?: React.CSSProperties;\n arrowIconPrev?: React.ReactNode;\n arrowIconNext?: React.ReactNode;\n children: React.ReactNode;\n}> = ({ mode, arrowStyle, arrowIconPrev, arrowIconNext, children }) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const [offset, setOffset] = useState(0);\n const [hasOverflow, setHasOverflow] = useState(false);\n const [contentSize, setContentSize] = useState(0);\n const [containerSize, setContainerSize] = useState(0);\n\n const isHorizontal = mode === \"horizontal\";\n\n // 检测溢出\n useEffect(() => {\n const checkOverflow = () => {\n if (!containerRef.current || !contentRef.current) return;\n const container = containerRef.current;\n const content = contentRef.current;\n\n let cSize = 0;\n let cntSize = 0;\n let overflow = false;\n\n if (isHorizontal) {\n cSize = container.clientWidth;\n cntSize = content.scrollWidth;\n overflow = cntSize > cSize;\n } else {\n cSize = container.clientHeight;\n cntSize = content.scrollHeight;\n overflow = cntSize > cSize;\n }\n\n setContainerSize(cSize);\n setContentSize(cntSize);\n setHasOverflow(overflow);\n\n // 如果不再溢出,重置 offset\n if (!overflow) {\n setOffset(0);\n }\n };\n\n const observer = new ResizeObserver(checkOverflow);\n if (containerRef.current) observer.observe(containerRef.current);\n if (contentRef.current) observer.observe(contentRef.current);\n\n checkOverflow();\n return () => observer.disconnect();\n }, [isHorizontal]);\n\n const prevDisabled = offset <= 0;\n const nextDisabled = !hasOverflow || offset >= contentSize - containerSize;\n\n const handlePrev = useCallback(() => {\n if (prevDisabled) return;\n const step = isHorizontal\n ? containerRef.current?.clientWidth ?? 200\n : containerRef.current?.clientHeight ?? 200;\n setOffset((prev) => Math.max(0, prev - step));\n }, [isHorizontal, prevDisabled]);\n\n const handleNext = useCallback(() => {\n if (nextDisabled) return;\n const step = isHorizontal\n ? containerRef.current?.clientWidth ?? 200\n : containerRef.current?.clientHeight ?? 200;\n const maxOffset = isHorizontal\n ? (contentRef.current?.scrollWidth ?? 0) -\n (containerRef.current?.clientWidth ?? 0)\n : (contentRef.current?.scrollHeight ?? 0) -\n (containerRef.current?.clientHeight ?? 0);\n setOffset((prev) => Math.min(maxOffset, prev + step));\n }, [isHorizontal, nextDisabled]);\n\n const PrevIcon = arrowIconPrev || (isHorizontal ? <LeftOutlined /> : <UpOutlined />);\n const NextIcon = arrowIconNext || (isHorizontal ? <RightOutlined /> : <DownOutlined />);\n\n return (\n <div\n style={{\n display: \"flex\",\n flexDirection: isHorizontal ? \"row\" : \"column\",\n alignItems: \"center\",\n width: \"100%\",\n height: \"100%\",\n }}\n >\n <Button\n type=\"text\"\n size=\"middle\"\n icon={PrevIcon}\n shape=\"circle\"\n disabled={prevDisabled}\n onClick={handlePrev}\n style={{\n flexShrink: 0,\n alignSelf: \"center\",\n margin: isHorizontal ? \"0 4px\" : \"4px 0\",\n ...arrowStyle,\n borderRadius: \"50%\", // 确保圆形,覆盖arrowStyle中的borderRadius\n }}\n />\n <div\n ref={containerRef}\n style={{\n flex: 1,\n overflow: \"hidden\",\n position: \"relative\",\n display: \"flex\",\n justifyContent: isHorizontal && !hasOverflow ? \"center\" : \"flex-start\",\n }}\n >\n <div\n ref={contentRef}\n style={{\n transform: isHorizontal\n ? `translateX(-${offset}px)`\n : `translateY(-${offset}px)`,\n transition: \"transform 0.3s ease-out\",\n display: isHorizontal ? \"inline-flex\" : \"block\",\n whiteSpace: isHorizontal ? \"nowrap\" : \"normal\",\n }}\n >\n {children}\n </div>\n </div>\n <Button\n type=\"text\"\n size=\"middle\"\n shape=\"circle\"\n icon={NextIcon}\n disabled={nextDisabled}\n onClick={handleNext}\n style={{\n flexShrink: 0,\n alignSelf: \"center\",\n margin: isHorizontal ? \"0 4px\" : \"4px 0\",\n ...arrowStyle,\n borderRadius: \"50%\", // 确保圆形,覆盖arrowStyle中的borderRadius\n }}\n />\n </div>\n );\n};\n\n\n\n/**\n * 滚动容器组件 - 用于实现滚动条模式的溢出处理\n */\nconst ScrollWrapper: React.FC<{\n mode: \"horizontal\" | \"vertical\" | \"inline\";\n children: React.ReactNode;\n}> = ({ mode, children }) => {\n const isHorizontal = mode === \"horizontal\";\n\n return (\n <div\n style={{\n overflow: isHorizontal ? \"auto hidden\" : \"hidden auto\",\n width: \"100%\",\n height: \"100%\",\n scrollbarWidth: \"thin\",\n scrollbarColor: \"rgba(0, 0, 0, 0.2) transparent\",\n }}\n >\n {children}\n </div>\n );\n};\n\n/**\n * SubMenu 标题行(.ant-menu-submenu-title)的样式配置\n * 这是对 Ant Design 原生 API 的扩展,用于解决 SubMenu 标题行无法通过 styles prop 设置的问题\n */\nexport interface SubMenuRootStyles {\n /** SubMenu 标题行容器样式(边框、padding、borderRadius 等) */\n item?: React.CSSProperties;\n /** SubMenu 标题行图标样式 */\n itemIcon?: React.CSSProperties;\n /** SubMenu 标题行文字样式(字体大小、行高等) */\n itemContent?: React.CSSProperties;\n /** 子级选中时 SubMenu 标题行的样式(背景色、文字颜色等) */\n selected?: React.CSSProperties;\n}\n\n/**\n * Semantic DOM 样式配置\n * 参考 Ant Design 6.x Semantic DOM 规范,并扩展 subMenu.root 用于 SubMenu 标题行\n */\nexport interface MenuSemanticStyles {\n root?: React.CSSProperties;\n item?: React.CSSProperties;\n itemIcon?: React.CSSProperties;\n itemContent?: React.CSSProperties;\n popup?: React.CSSProperties;\n subMenu?: {\n /** 扩展:SubMenu 标题行样式配置(Ant Design 原生不支持,通过 CSS 注入实现) */\n root?: SubMenuRootStyles;\n /** Ant Design 原生:子菜单面板标题样式 */\n itemTitle?: React.CSSProperties;\n /** Ant Design 原生:子菜单列表样式 */\n list?: React.CSSProperties;\n /** Ant Design 原生:子菜单内的项样式 */\n item?: React.CSSProperties;\n /** Ant Design 原生:子菜单内的项图标样式 */\n itemIcon?: React.CSSProperties;\n /** Ant Design 原生:子菜单内的项文字样式 */\n itemContent?: React.CSSProperties;\n };\n}\n\nexport interface MenuSemanticClassNames {\n root?: string;\n item?: string;\n itemIcon?: string;\n itemContent?: string;\n popup?: string;\n}\n\n/**\n * Menu Design Token\n * 参考 Ant Design 6.x Design Token 规范\n */\nexport interface MenuToken {\n colorBgContainer?: string;\n itemBg?: string;\n itemColor?: string;\n itemHoverBg?: string;\n itemHoverColor?: string;\n itemSelectedBg?: string;\n itemSelectedColor?: string;\n itemActiveBg?: string;\n subMenuItemBg?: string;\n darkItemBg?: string;\n darkItemColor?: string;\n darkItemHoverBg?: string;\n darkItemHoverColor?: string;\n darkItemSelectedBg?: string;\n darkItemSelectedColor?: string;\n iconSize?: number;\n iconMarginInlineEnd?: number;\n collapsedWidth?: number;\n collapsedIconSize?: number;\n}\n\nexport interface AndMenuProps\n extends Omit<\n AntMenuProps,\n \"onClick\" | \"onSelect\" | \"onOpenChange\" | \"onDeselect\"\n >,\n BaseComponentProps,\n DataSetConfig {\n // 事件 action 配置\n clickAction?: string;\n selectAction?: string;\n openChangeAction?: string;\n deselectAction?: string;\n\n // 事件回调\n onClick?: (info: any) => void;\n onSelect?: (info: any) => void;\n onOpenChange?: (openKeys: string[]) => void;\n onDeselect?: (info: any) => void;\n\n // Semantic DOM 支持\n styles?: MenuSemanticStyles;\n classNames?: MenuSemanticClassNames;\n\n // Design Token 支持\n token?: MenuToken;\n\n // 额外属性\n expandIcon?:\n | React.ReactNode\n | ((props: { isOpen?: boolean; isSubMenu?: boolean }) => React.ReactNode);\n overflowedIndicator?: React.ReactNode;\n\n // openKeys 数据集绑定\n openKeysDataSet?: string;\n openKeysDataSetField?: string;\n\n // 自定义属性(不传递给 Menu)\n remoteUrl?: string;\n /** 展开触发方式(设计器/业务用,不传给 DOM) */\n expandTrigger?: \"click\" | \"hover\" | \"iconOnly\";\n\n // 溢出处理配置\n overflowStrategy?: OverflowStrategy;\n paginationArrowStyle?: React.CSSProperties;\n paginationArrowIconPrev?: React.ReactNode | string;\n paginationArrowIconNext?: React.ReactNode | string;\n}\n\nexport const AndMenu: React.FC<AndMenuProps> = ({\n id,\n sessionId,\n develop,\n dataSet,\n dataSetField,\n clickAction,\n selectAction,\n openChangeAction,\n deselectAction,\n onClick,\n onSelect,\n onOpenChange,\n onDeselect,\n items,\n selectedKeys: propSelectedKeys,\n openKeys: propOpenKeys,\n defaultOpenKeys,\n styles,\n classNames,\n token,\n expandIcon,\n overflowedIndicator,\n openKeysDataSet,\n openKeysDataSetField,\n mode,\n inlineCollapsed,\n remoteUrl: _remoteUrl,\n overflowStrategy = \"default\",\n paginationArrowStyle,\n paginationArrowIconPrev,\n paginationArrowIconNext,\n expandTrigger: _expandTrigger, // 仅设计器/业务用,不传给 DOM,避免 React 警告\n ...restProps\n}) => {\n const addCommand = useAndStore((state) => state.addCommand);\n const setDataSet = useAndStore((state) => state.setDataSet);\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n // 订阅完整的 store 对象\n // 使用 shallow 比较以避免因返回新对象导致的无限重渲染\n const storeValue = useAndStore(\n (state) => {\n if (dataSetKey) {\n // 如果指定了字段,获取特定字段\n if (dataSetField) {\n return state.getDataSet(dataSetKey, dataSetField);\n }\n // 未指定字段时获取整个数据集对象(key 已含 sessionId 前缀)\n return state.dataSets[dataSetKey];\n }\n return undefined;\n },\n // 使用 shallow 比较确保只有通过内容变更才触发更新\n // 如果找不到依赖包,可以自定义一个简单的浅比较函数或暂时使用 strict equality (默认)\n // 但鉴于 dataSetField 返回的可能是新引用的对象,必须谨慎。\n // 更安全的做法是分别订阅需要的字段,或者确保 getDataSet 返回的是稳定的 state 引用。\n // 这里我们先假定 state.dataSets[...] 返回的是稳定的 immer state 引用。\n // 为了防止 undefined 情况下的 {} 导致的新引用,我们在 selector 内部只返回 undefined,在外部处理默认值。\n );\n\n // 默认值对象,保持引用稳定;仅当 storeValue 为 undefined/null 时使用,避免空数组 [] 被当作无数据\n const emptyObject = useMemo(() => ({}), []);\n const safeStoreValue =\n storeValue !== undefined && storeValue !== null ? storeValue : emptyObject;\n\n // 从 store 派生菜单项,兼容多种写入约定:\n // 1) { items: MenuItem[] } — 与 selectedKeys/openKeys 同源\n // 2) MenuItem[] — dataSetField 指向数组时 getDataSet 直接返回数组\n // 3) { value: MenuItem[] } 或数组 — 只配 dataSet 未配 dataSetField 时,Extend 常用 setDataSet(key, '', list)\n const storeDerivedItems = useMemo(\n () =>\n safeStoreValue?.items ??\n (Array.isArray(safeStoreValue) ? safeStoreValue : undefined) ??\n (Array.isArray(safeStoreValue?.value) ? safeStoreValue.value : undefined),\n [safeStoreValue]\n );\n // 设计器模式(develop):优先 store,无则回退到静态 items 便于画布预览;运行时且配置了 dataSet:仅用 store,不回退到静态 items\n const finalItems = useMemo(() => {\n if (develop) {\n return storeDerivedItems ?? items ?? [];\n }\n if (dataSetKey) {\n return storeDerivedItems ?? [];\n }\n return items ?? [];\n }, [develop, dataSetKey, storeDerivedItems, items]);\n \n // selectedKeys\n const finalSelectedKeys = useMemo(\n () => safeStoreValue.selectedKeys ?? propSelectedKeys,\n [safeStoreValue.selectedKeys, propSelectedKeys]\n );\n \n // openKeys (openKeysDataSet 和 openKeysDataSetField 依然保留向后兼容,但优先使用 storeValue)\n const finalOpenKeys = useMemo(\n () => safeStoreValue.openKeys ?? (openKeysDataSet && openKeysDataSetField ? undefined : propOpenKeys),\n [safeStoreValue.openKeys, openKeysDataSet, openKeysDataSetField, propOpenKeys]\n );\n \n // 保持向后兼容:如果配置了 openKeysDataSet,依然尝试从那里获取\n // 注意:如果 storeValue.openKeys 存在,上面的 finalOpenKeys 已经拿到了,所以这里主要是为了旧配置\n const openKeysDataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, openKeysDataSet),\n [sessionId, openKeysDataSet]\n );\n const legacyStoreOpenKeys = useAndStore((state) => {\n if (!safeStoreValue.openKeys && openKeysDataSetKey && openKeysDataSetField) {\n return state.getDataSet(openKeysDataSetKey, openKeysDataSetField);\n }\n return undefined;\n });\n\n const effectiveItems = useMemo(() => {\n const process = (list: any[]): any[] => {\n if (!Array.isArray(list)) return [];\n return list.map((item) => {\n const newItem = { ...item };\n if (newItem.icon && typeof newItem.icon === \"string\") {\n const IconComp = (Icons as any)[newItem.icon];\n if (IconComp) {\n newItem.icon = <IconComp />;\n }\n }\n if (newItem.children && newItem.children.length > 0) {\n newItem.children = process(newItem.children);\n }\n return newItem;\n });\n };\n return process(finalItems || []);\n }, [finalItems]);\n\n const effectiveSelectedKeys = useMemo(\n () => finalSelectedKeys,\n [finalSelectedKeys]\n );\n\n const effectiveOpenKeys = useMemo(\n () => finalOpenKeys ?? legacyStoreOpenKeys,\n [finalOpenKeys, legacyStoreOpenKeys]\n );\n\n // 点击事件\n const handleClick = useCallback(\n (info: any) => {\n if (onClick) {\n onClick(info);\n return;\n }\n if (clickAction && sessionId) {\n addCommand(\n sessionId,\n createCommand(clickAction, { key: info.key, keyPath: info.keyPath })\n );\n }\n },\n [onClick, clickAction, sessionId, addCommand]\n );\n\n // 选中事件\n const handleSelect = useCallback(\n (info: any) => {\n if (onSelect) {\n onSelect(info);\n return;\n }\n \n // 更新 store(统一使用 dataSetKey,避免命名冲突)\n if (dataSetKey) {\n if (dataSetField) {\n const currentState = useAndStore.getState().getDataSet(dataSetKey, dataSetField) || {};\n setDataSet(dataSetKey, dataSetField, { ...currentState, selectedKeys: info.selectedKeys });\n } else {\n setDataSet(dataSetKey, 'selectedKeys', info.selectedKeys);\n }\n }\n \n if (selectAction && sessionId) {\n addCommand(\n sessionId,\n createCommand(selectAction, { selectedKeys: info.selectedKeys })\n );\n }\n },\n [\n onSelect,\n dataSetKey,\n dataSetField,\n setDataSet,\n selectAction,\n sessionId,\n addCommand,\n ]\n );\n\n // 展开/收起事件\n const handleOpenChange = useCallback(\n (keys: string[]) => {\n if (onOpenChange) {\n onOpenChange(keys);\n return;\n }\n \n // 更新 store(统一使用 dataSetKey / openKeysDataSetKey)\n if (dataSetKey) {\n if (dataSetField) {\n const currentState = useAndStore.getState().getDataSet(dataSetKey, dataSetField) || {};\n setDataSet(dataSetKey, dataSetField, { ...currentState, openKeys: keys });\n } else {\n setDataSet(dataSetKey, 'openKeys', keys);\n }\n } else if (openKeysDataSetKey && openKeysDataSetField) {\n setDataSet(openKeysDataSetKey, openKeysDataSetField, keys);\n }\n \n if (openChangeAction && sessionId) {\n addCommand(\n sessionId,\n createCommand(openChangeAction, { openKeys: keys })\n );\n }\n },\n [\n onOpenChange,\n dataSetKey,\n dataSetField,\n openKeysDataSetKey,\n openKeysDataSetField,\n setDataSet,\n openChangeAction,\n sessionId,\n addCommand,\n ]\n );\n\n // 取消选中事件\n const handleDeselect = useCallback(\n (info: any) => {\n if (onDeselect) {\n onDeselect(info);\n return;\n }\n if (deselectAction && sessionId) {\n addCommand(\n sessionId,\n createCommand(deselectAction, {\n selectedKeys: info.selectedKeys,\n key: info.key,\n })\n );\n }\n },\n [onDeselect, deselectAction, sessionId, addCommand]\n );\n\n\n\n // inlineCollapsed 只在 inline 模式下有效\n const inlineProps =\n mode === \"inline\" && inlineCollapsed !== undefined\n ? { inlineCollapsed }\n : {};\n\n // 过滤空值的 token\n const filteredToken = useMemo(() => {\n if (!token) return undefined;\n const result: Record<string, any> = {};\n\n Object.entries(token).forEach(([key, value]) => {\n if (value !== \"\" && value !== undefined && value !== null) {\n result[key] = value;\n }\n });\n\n return Object.keys(result).length > 0 ? result : undefined;\n }, [token]);\n\n // 在 develop 模式下禁用动画,避免 GrapesJS iframe 中的 CSSMotion 错误\n // 设置 motionName 为空字符串来禁用动画效果\n const motionProps = develop\n ? {\n motion: { motionName: \"\" } as any,\n }\n : {};\n\n // 处理翻页箭头图标(支持字符串转换为组件)\n const processedArrowIconPrev = useMemo(() => {\n if (typeof paginationArrowIconPrev === \"string\" && paginationArrowIconPrev) {\n const IconComp = (Icons as any)[paginationArrowIconPrev];\n if (IconComp) return <IconComp />;\n }\n return paginationArrowIconPrev;\n }, [paginationArrowIconPrev]);\n\n const processedArrowIconNext = useMemo(() => {\n if (typeof paginationArrowIconNext === \"string\" && paginationArrowIconNext) {\n const IconComp = (Icons as any)[paginationArrowIconNext];\n if (IconComp) return <IconComp />;\n }\n return paginationArrowIconNext;\n }, [paginationArrowIconNext]);\n\n // 根据溢出策略决定是否隐藏原生省略号\n const effectiveOverflowedIndicator = useMemo(() => {\n if (overflowStrategy === \"pagination\" || overflowStrategy === \"scroll\") {\n return null; // 隐藏原生省略号\n }\n return overflowedIndicator;\n }, [overflowStrategy, overflowedIndicator]);\n\n // 生成唯一 ID 用于 CSS 选择器作用域\n const reactId = useId();\n const menuScopeId = id || reactId.replace(/:/g, '-');\n\n /**\n * 生成 SubMenu 标题行的 CSS 样式。\n * 从 styles.subMenu.root 读取配置,通过 CSS 注入应用到 SubMenu 标题行。\n * 这是对 Ant Design 原生 API 的扩展,解决 SubMenu 标题行无法通过 styles prop 设置的问题。\n */\n const subMenuTitleCss = useMemo(() => {\n if (!styles || typeof styles === \"function\") return '';\n \n // 从 subMenu.root 读取配置\n const rootConfig = styles.subMenu?.root;\n if (!rootConfig) return '';\n \n const cssRules: string[] = [];\n const scope = `[data-and-menu-id=\"${menuScopeId}\"]`;\n \n // 1. subMenu.root.item → .ant-menu-submenu-title(边框、padding、borderRadius 等)\n if (rootConfig.item && Object.keys(rootConfig.item).length > 0) {\n const cssStr = cssPropertiesToString(rootConfig.item);\n cssRules.push(`${scope} .ant-menu-submenu > .ant-menu-submenu-title { ${cssStr} }`);\n }\n \n // 2. subMenu.root.itemIcon → .ant-menu-submenu-title .ant-menu-item-icon\n if (rootConfig.itemIcon && Object.keys(rootConfig.itemIcon).length > 0) {\n const cssStr = cssPropertiesToString(rootConfig.itemIcon);\n cssRules.push(`${scope} .ant-menu-submenu > .ant-menu-submenu-title .ant-menu-item-icon { ${cssStr} }`);\n }\n \n // 3. subMenu.root.itemContent → .ant-menu-submenu-title .ant-menu-title-content(字体大小等)\n if (rootConfig.itemContent && Object.keys(rootConfig.itemContent).length > 0) {\n const cssStr = cssPropertiesToString(rootConfig.itemContent);\n cssRules.push(`${scope} .ant-menu-submenu > .ant-menu-submenu-title .ant-menu-title-content { ${cssStr} }`);\n }\n \n // 4. subMenu.root.selected → .ant-menu-submenu-selected > .ant-menu-submenu-title(子级选中时的样式)\n if (rootConfig.selected && Object.keys(rootConfig.selected).length > 0) {\n const cssStr = cssPropertiesToString(rootConfig.selected);\n cssRules.push(`${scope} .ant-menu-submenu-selected > .ant-menu-submenu-title { ${cssStr} }`);\n }\n \n return cssRules.join('\\n');\n }, [styles, menuScopeId]);\n\n const menuElement = (\n <Menu\n {...restProps}\n {...inlineProps}\n {...motionProps}\n mode={mode}\n items={effectiveItems}\n selectedKeys={effectiveSelectedKeys}\n openKeys={effectiveOpenKeys}\n defaultOpenKeys={defaultOpenKeys}\n onClick={handleClick}\n onSelect={handleSelect}\n onOpenChange={handleOpenChange}\n onDeselect={handleDeselect}\n styles={styles}\n classNames={classNames}\n expandIcon={expandIcon}\n overflowedIndicator={effectiveOverflowedIndicator}\n disabledOverflow={overflowStrategy !== \"default\"}\n />\n );\n\n // 根据溢出策略包装菜单\n const renderMenuWithOverflow = () => {\n if (overflowStrategy === \"pagination\") {\n return (\n <PaginationWrapper\n mode={mode || \"horizontal\"}\n arrowStyle={paginationArrowStyle}\n arrowIconPrev={processedArrowIconPrev}\n arrowIconNext={processedArrowIconNext}\n >\n {menuElement}\n </PaginationWrapper>\n );\n }\n\n if (overflowStrategy === \"scroll\") {\n return (\n <ScrollWrapper mode={mode || \"horizontal\"}>\n {menuElement}\n </ScrollWrapper>\n );\n }\n\n return menuElement;\n };\n\n // 构建 theme 配置\n const themeConfig = useMemo(() => {\n const config: any = {};\n\n // develop 模式下禁用动画\n if (develop) {\n config.motion = false;\n }\n\n // 添加 token 配置\n if (filteredToken) {\n config.components = { Menu: filteredToken };\n }\n\n return Object.keys(config).length > 0 ? config : undefined;\n }, [develop, filteredToken]);\n\n // 渲染最终内容,包含 CSS 注入和作用域 wrapper\n const renderContent = () => {\n const menuContent = renderMenuWithOverflow();\n \n // 如果有 subMenu 标题样式需要注入,用 wrapper 包裹\n const wrappedContent = subMenuTitleCss ? (\n <div data-and-menu-id={menuScopeId} style={{ display: 'contents' }}>\n <style>{subMenuTitleCss}</style>\n {menuContent}\n </div>\n ) : menuContent;\n\n // 如果有 theme 配置,用 ConfigProvider 包裹\n if (themeConfig) {\n return <ConfigProvider theme={themeConfig}>{wrappedContent}</ConfigProvider>;\n }\n\n return wrappedContent;\n };\n\n return renderContent();\n};\n\nexport default AndMenu;\n\n","import React from 'react';\nimport { Calendar } from 'antd';\nimport type { CalendarProps as AntCalendarProps } from 'antd';\nimport type { Dayjs } from 'dayjs';\nimport type { BaseComponentProps } from '../../types/common';\n\nexport interface AndCalendarProps extends AntCalendarProps<Dayjs>, BaseComponentProps {}\n\nexport const AndCalendar: React.FC<AndCalendarProps> = ({\n id, sessionId, develop, ...restProps\n}) => {\n return <Calendar {...restProps} />;\n};\n\nexport default AndCalendar;\n","import React, { useMemo } from 'react';\nimport { Badge, theme } from 'antd';\nimport type { BadgeProps } from 'antd';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\nexport interface AndBadgeProps extends BadgeProps, BaseComponentProps, DataSetConfig {\n develop?: boolean;\n}\n\nexport const AndBadge: React.FC<AndBadgeProps> = ({\n id,\n sessionId,\n develop,\n dataSet,\n dataSetField,\n count,\n showZero,\n overflowCount,\n dot,\n offset,\n size,\n status,\n text,\n color,\n title,\n children,\n ...restProps\n}) => {\n const getDataSet = useAndStore((state) => state.getDataSet);\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n\n const _dataValue = useMemo(() => {\n if (dataSetKey && dataSetField) return getDataSet(dataSetKey, dataSetField);\n return undefined;\n }, [dataSetKey, dataSetField, getDataSet]);\n\n // 计算最终显示的 count (优先使用绑定数据)\n const effectiveCount = useMemo(() => {\n if (_dataValue !== undefined && _dataValue !== null) {\n // 尝试转为数字,如果失败则直接作为 ReactNode (但 Badge count 需要 ReactNode)\n return _dataValue;\n }\n return count;\n }, [_dataValue, count]);\n\n // Safely get token\n const tokenResult = theme.useToken ? theme.useToken() : { token: undefined };\n const antdToken = tokenResult.token;\n \n // Resolve color token\n const resolvedColor = useMemo(() => {\n if (!color || typeof color !== 'string') return undefined;\n if (antdToken && color in antdToken) {\n return (antdToken as any)[color];\n }\n return color;\n }, [color, antdToken]);\n\n // 如果没有 children,通常是 Status Badge 模式,不需要 slot 容器\n // 但为了 GrapesJS 拖拽体验,通常我们会给一个空容器让用户拖进去\n // 除非 text 属性存在,那是 Status Badge 模式\n \n // 我们总是渲染一个 Slot 容器,让 GrapesJS 把子元素放进去\n // 如果用户只填写 text 和 status,子元素为空,Antd Badge 会渲染为小红点在文本旁\n \n return (\n <Badge\n {...restProps}\n count={effectiveCount}\n showZero={showZero}\n overflowCount={overflowCount}\n dot={dot}\n offset={offset}\n size={size}\n status={status}\n text={text}\n color={resolvedColor}\n title={title}\n >\n {/* \n GrapesJS 注入点\n 注意: Badge 会包裹它的 children。\n 我们需要一个稳定的容器来承载 GrapesJS 的 DOM 元素。\n */}\n <span \n data-slot=\"content\" \n className=\"and-badge-content-slot\"\n style={{ \n display: 'inline-block',\n minWidth: (!children && !text) ? '20px' : undefined, // 给一个最小宽度以便拖拽?\n minHeight: (!children && !text) ? '20px' : undefined \n }}\n >\n {children}\n </span>\n </Badge>\n );\n};\n\nexport default AndBadge;\n","import React, { useMemo } from 'react';\nimport { Badge, theme } from 'antd';\nimport type { RibbonProps } from 'antd/es/badge/Ribbon';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\nexport interface AndBadgeRibbonProps extends RibbonProps, BaseComponentProps, DataSetConfig {\n develop?: boolean;\n}\n\nexport const AndBadgeRibbon: React.FC<AndBadgeRibbonProps> = ({\n id,\n sessionId,\n develop,\n dataSet,\n dataSetField,\n text,\n placement,\n color,\n children,\n ...restProps\n}) => {\n const getDataSet = useAndStore((state) => state.getDataSet);\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n \n const _dataValue = useMemo(() => {\n if (dataSetKey && dataSetField) return getDataSet(dataSetKey, dataSetField);\n return undefined;\n }, [dataSetKey, dataSetField, getDataSet]);\n\n const effectiveText = useMemo(() => {\n if (_dataValue !== undefined && _dataValue !== null) {\n return _dataValue;\n }\n return text;\n }, [_dataValue, text]);\n\n // Safely get token\n const tokenResult = theme.useToken ? theme.useToken() : { token: undefined };\n const antdToken = tokenResult.token;\n \n const resolvedColor = useMemo(() => {\n if (!color || typeof color !== 'string') return undefined;\n if (antdToken && color in antdToken) {\n return (antdToken as any)[color];\n }\n return color;\n }, [color, antdToken]);\n\n return (\n <Badge.Ribbon\n {...restProps}\n text={effectiveText}\n placement={placement}\n color={resolvedColor}\n >\n {/* GrapesJS 注入点 */}\n <div \n data-slot=\"content\" \n className=\"and-badge-ribbon-content-slot\"\n style={{ \n display: 'block', // Ribbon 通常包裹块级卡片\n minHeight: '40px',\n border: develop ? '1px dashed #dedede' : undefined // 开发模式下显示边框辅助视觉\n }}\n >\n {children}\n </div>\n </Badge.Ribbon>\n );\n};\n\nexport default AndBadgeRibbon;\n","import React, { useMemo } from 'react';\nimport { Masonry } from 'antd';\nimport type { MasonryProps as AntMasonryProps } from 'antd/es/masonry/Masonry';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\n/**\n * MasonryItem 类型\n */\nexport interface AndMasonryItem {\n key: React.Key;\n column?: number;\n height?: number;\n children?: React.ReactNode;\n data?: any;\n}\n\n/**\n * AndMasonry Props 接口\n */\nexport interface AndMasonryProps extends Omit<AntMasonryProps, 'items' | 'onLayoutChange'>, BaseComponentProps, DataSetConfig {\n /** 瀑布流项 (可以是 JSON 字符串或数组) */\n items?: AndMasonryItem[] | string;\n /** 列数 */\n columns?: number | { xs?: number; sm?: number; md?: number; lg?: number; xl?: number; xxl?: number };\n /** 间距 */\n gutter?: number | [number, number];\n /** 是否持续监听子项尺寸变化 */\n fresh?: boolean;\n /** 列排序回调动作 */\n layoutChangeAction?: string;\n /** 自定义项渲染函数 */\n itemRender?: (item: AndMasonryItem & { index: number }) => React.ReactNode;\n /** 列排序回调 */\n onLayoutChange?: (sortInfo: { key: React.Key; column: number }[]) => void;\n}\n\n/** 解析 items 配置 */\nconst parseItems = (items: AndMasonryItem[] | string | undefined): AndMasonryItem[] => {\n if (!items) return [];\n if (typeof items === 'string') {\n try {\n const parsed = JSON.parse(items);\n return Array.isArray(parsed) ? parsed : [];\n } catch {\n return [];\n }\n }\n return items;\n};\n\n/** 解析 columns 配置 */\nconst parseColumns = (columns: any): number | Record<string, number> | undefined => {\n if (columns === undefined || columns === null || columns === '') return undefined;\n if (typeof columns === 'number') return columns;\n if (typeof columns === 'string') {\n // 尝试解析为数字\n const num = parseInt(columns, 10);\n if (!isNaN(num)) return num;\n // 尝试解析为 JSON 对象 (响应式配置)\n try {\n return JSON.parse(columns);\n } catch {\n return undefined;\n }\n }\n return columns;\n};\n\n/** 解析 gutter 配置 */\nconst parseGutter = (gutter: any): number | [number, number] | undefined => {\n if (gutter === undefined || gutter === null || gutter === '') return undefined;\n if (typeof gutter === 'number') return gutter;\n if (typeof gutter === 'string') {\n // 尝试解析为数字\n const num = parseInt(gutter, 10);\n if (!isNaN(num)) return num;\n // 尝试解析为 JSON 数组 [horizontal, vertical]\n try {\n const parsed = JSON.parse(gutter);\n if (Array.isArray(parsed) && parsed.length === 2) {\n return parsed as [number, number];\n }\n return parsed;\n } catch {\n return undefined;\n }\n }\n if (Array.isArray(gutter)) return gutter as [number, number];\n return gutter;\n};\n\n/**\n * AndMasonry 瀑布流组件\n * 封装 Ant Design Masonry,支持设计器拖拽配置\n */\nexport const AndMasonry: React.FC<AndMasonryProps> = ({\n id,\n sessionId,\n develop,\n dataSet,\n dataSetField,\n items,\n columns,\n gutter,\n fresh,\n layoutChangeAction,\n onLayoutChange,\n itemRender,\n ...restProps\n}) => {\n const addCommand = useAndStore((state) => state.addCommand);\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n\n // 订阅 store 数据作为 items 来源\n const storeData = useAndStore((state) => {\n if (dataSetKey && dataSetField) {\n return state.dataSets[dataSetKey]?.[dataSetField];\n }\n return null;\n });\n\n // 解析 items:优先 storeData,否则用 props\n const parsedItems = useMemo(() => {\n if (storeData && Array.isArray(storeData)) {\n return storeData;\n }\n return parseItems(items);\n }, [storeData, items]);\n\n // 解析 columns\n const parsedColumns = useMemo(() => parseColumns(columns), [columns]);\n\n // 解析 gutter\n const parsedGutter = useMemo(() => parseGutter(gutter), [gutter]);\n\n // 处理 onLayoutChange\n const handleLayoutChange = useMemo(() => {\n if (onLayoutChange) return onLayoutChange;\n if (layoutChangeAction && sessionId) {\n return (sortInfo: { key: React.Key; column: number }[]) => {\n addCommand(sessionId, {\n actionName: layoutChangeAction,\n arg: sortInfo,\n timestamp: Date.now(),\n });\n };\n }\n return undefined;\n }, [onLayoutChange, layoutChangeAction, sessionId, addCommand]);\n\n // 设计模式下展示占位\n const displayItems = useMemo(() => {\n if (parsedItems.length > 0) return parsedItems;\n if (develop) {\n // 设计模式下提供示例项\n return [\n { key: '1', height: 150, data: { title: '示例项 1' } },\n { key: '2', height: 200, data: { title: '示例项 2' } },\n { key: '3', height: 120, data: { title: '示例项 3' } },\n { key: '4', height: 180, data: { title: '示例项 4' } },\n { key: '5', height: 140, data: { title: '示例项 5' } },\n { key: '6', height: 160, data: { title: '示例项 6' } },\n ];\n }\n return [];\n }, [parsedItems, develop]);\n\n // 默认 itemRender (设计模式)\n const defaultItemRender = useMemo(() => {\n if (itemRender) return itemRender;\n if (develop) {\n return (item: AndMasonryItem & { index: number }) => (\n <div\n style={{\n height: item.height || 100,\n background: '#f0f5ff',\n border: '1px dashed #91caff',\n borderRadius: 8,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: '#1677ff',\n fontSize: 14,\n }}\n >\n {item.data?.title || `Item ${item.key}`}\n </div>\n );\n }\n return undefined;\n }, [itemRender, develop]);\n\n // 排除自定义 props,避免传入 DOM\n const {\n layoutChangeAction: _layoutChangeAction,\n ...otherProps\n } = restProps as any;\n\n return (\n <Masonry\n {...otherProps}\n items={displayItems as any}\n columns={parsedColumns as any}\n gutter={parsedGutter as any}\n fresh={fresh}\n itemRender={defaultItemRender as any}\n onLayoutChange={handleLayoutChange}\n />\n );\n};\n\nexport default AndMasonry;\n","import React, { useCallback, useMemo } from 'react';\nimport { Alert } from 'antd';\nimport type { AlertProps as AntAlertProps } from 'antd';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\n/**\n * AndAlert Props 接口\n */\nexport interface AndAlertProps extends Omit<AntAlertProps, 'message'>, BaseComponentProps, DataSetConfig {\n /** 关闭动作 */\n closeAction?: string;\n /** 标题 (对应旧的 message) */\n title?: React.ReactNode;\n /** 关闭文字 (已废弃,兼容用) */\n closeText?: string;\n}\n\n/**\n * AndAlert 组件\n * 封装 Ant Design Alert,支持数据绑定\n */\nexport const AndAlert: React.FC<AndAlertProps> = ({\n id,\n sessionId,\n develop,\n closeAction,\n onClose,\n dataSet,\n dataSetField,\n title: propTitle,\n description: propDescription,\n closeText,\n closable,\n ...restProps\n}) => {\n const getDataSet = useAndStore((state) => state.getDataSet);\n const getProps = useAndStore((state) => state.getProps);\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n\n const storeProps = useMemo(() => {\n if (sessionId && id) return getProps(sessionId, id);\n return null;\n }, [sessionId, id, getProps]);\n\n const storeValue = useMemo(() => {\n if (dataSetKey && dataSetField) return getDataSet(dataSetKey, dataSetField);\n return undefined;\n }, [dataSetKey, dataSetField, getDataSet]);\n\n // title 绑定 (原 message)\n const computedTitle = useMemo(() => {\n if (develop) return propTitle;\n if (storeValue !== undefined && storeValue !== null && storeValue !== '') {\n return String(storeValue);\n }\n if (storeProps?.title !== undefined) return storeProps.title;\n if (storeProps?.message !== undefined) return storeProps.message; // 兼容旧的 message\n return propTitle;\n }, [develop, storeValue, storeProps?.title, storeProps?.message, propTitle]);\n\n // 合并 props\n const mergedProps = useMemo(() => {\n const baseProps = { ...restProps, description: propDescription };\n if (storeProps && typeof storeProps === 'object') {\n Object.keys(storeProps).forEach((key) => {\n if (key !== 'title' && key !== 'message' && storeProps[key] !== undefined && storeProps[key] !== null) {\n (baseProps as any)[key] = storeProps[key];\n }\n });\n }\n return baseProps;\n }, [restProps, propDescription, storeProps]);\n\n // 处理 closable - 将旧的 closeText 转换为新的 closable.closeIcon\n const computedClosable = useMemo(() => {\n if (closeText) {\n // 如果有 closeText,转换为 closable 配置\n return { closeIcon: <span>{closeText}</span> };\n }\n return closable;\n }, [closeText, closable]);\n\n // 关闭处理\n const handleClose = useCallback((e: React.MouseEvent<HTMLButtonElement>) => {\n if (onClose) {\n onClose(e);\n }\n }, [onClose]);\n\n return (\n <Alert\n {...mergedProps}\n title={computedTitle}\n closable={computedClosable}\n onClose={handleClose}\n />\n );\n};\n\nexport default AndAlert;\n","import React, { useMemo, useCallback } from 'react';\nimport { Modal } from 'antd';\nimport type { ModalProps as AntModalProps } from 'antd';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\n/**\n * AndModal Props 接口\n */\nexport interface AndModalProps extends Omit<AntModalProps, 'onOk' | 'onCancel'>, BaseComponentProps, DataSetConfig {\n /** 确认动作 */\n okAction?: string;\n /** 取消动作 */\n cancelAction?: string;\n /** 确认回调 */\n onOk?: () => void;\n /** 取消回调 */\n onCancel?: () => void;\n}\n\n/**\n * AndModal 组件\n * 封装 Ant Design Modal,支持数据绑定和动作解析\n */\nexport const AndModal: React.FC<AndModalProps> = ({\n id,\n sessionId,\n develop,\n dataSet,\n dataSetField,\n okAction,\n cancelAction,\n onOk,\n onCancel,\n open: propOpen,\n children,\n ...restProps\n}) => {\n const addCommand = useAndStore((state) => state.addCommand);\n const getDataSet = useAndStore((state) => state.getDataSet);\n const setDataSet = useAndStore((state) => state.setDataSet);\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n\n // 从数据集获取 open 状态\n const storeOpen = useMemo(() => {\n if (dataSetKey && dataSetField) {\n return getDataSet(dataSetKey, dataSetField);\n }\n return undefined;\n }, [dataSetKey, dataSetField, getDataSet]);\n\n const displayOpen = storeOpen !== undefined ? Boolean(storeOpen) : propOpen;\n\n // 确认处理\n const handleOk = useCallback(() => {\n if (onOk) {\n onOk();\n }\n\n // 关闭 Modal\n if (dataSetKey && dataSetField) {\n setDataSet(dataSetKey, dataSetField, false);\n }\n\n // 处理确认动作\n if (okAction && sessionId) {\n addCommand(sessionId, {\n actionName: okAction,\n arg: null,\n timestamp: Date.now(),\n });\n }\n }, [onOk, dataSetKey, dataSetField, setDataSet, okAction, sessionId, addCommand]);\n\n // 取消处理\n const handleCancel = useCallback(() => {\n if (onCancel) {\n onCancel();\n }\n\n // 关闭 Modal\n if (dataSetKey && dataSetField) {\n setDataSet(dataSetKey, dataSetField, false);\n }\n\n // 处理取消动作\n if (cancelAction && sessionId) {\n addCommand(sessionId, {\n actionName: cancelAction,\n arg: null,\n timestamp: Date.now(),\n });\n }\n }, [onCancel, dataSetKey, dataSetField, setDataSet, cancelAction, sessionId, addCommand]);\n\n return (\n <Modal\n {...restProps}\n open={displayOpen}\n onOk={handleOk}\n onCancel={handleCancel}\n >\n {children}\n </Modal>\n );\n};\n\nexport default AndModal;\n","import React, { useMemo, useCallback } from 'react';\nimport { Drawer } from 'antd';\nimport type { DrawerProps as AntDrawerProps } from 'antd';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\n/**\n * AndDrawer Props 接口\n */\nexport interface AndDrawerProps extends Omit<AntDrawerProps, 'onClose'>, BaseComponentProps, DataSetConfig {\n /** 关闭动作 */\n closeAction?: string;\n /** 关闭回调 */\n onClose?: () => void;\n}\n\n/**\n * AndDrawer 组件\n * 封装 Ant Design Drawer,支持数据绑定和动作解析\n */\nexport const AndDrawer: React.FC<AndDrawerProps> = ({\n id,\n sessionId,\n develop,\n dataSet,\n dataSetField,\n closeAction,\n onClose,\n open: propOpen,\n children,\n ...restProps\n}) => {\n const addCommand = useAndStore((state) => state.addCommand);\n const getDataSet = useAndStore((state) => state.getDataSet);\n const setDataSet = useAndStore((state) => state.setDataSet);\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n\n // 从数据集获取 open 状态\n const storeOpen = useMemo(() => {\n if (dataSetKey && dataSetField) {\n return getDataSet(dataSetKey, dataSetField);\n }\n return undefined;\n }, [dataSetKey, dataSetField, getDataSet]);\n\n const displayOpen = storeOpen !== undefined ? Boolean(storeOpen) : propOpen;\n\n // 关闭处理\n const handleClose = useCallback(() => {\n if (onClose) {\n onClose();\n }\n\n // 关闭 Drawer\n if (dataSetKey && dataSetField) {\n setDataSet(dataSetKey, dataSetField, false);\n }\n\n // 处理关闭动作\n if (closeAction && sessionId) {\n addCommand(sessionId, {\n actionName: closeAction,\n arg: null,\n timestamp: Date.now(),\n });\n }\n }, [onClose, dataSetKey, dataSetField, setDataSet, closeAction, sessionId, addCommand]);\n\n return (\n <Drawer\n {...restProps}\n open={displayOpen}\n onClose={handleClose}\n >\n {children}\n </Drawer>\n );\n};\n\nexport default AndDrawer;\n","import React from 'react';\nimport { Result } from 'antd';\nimport type { ResultProps as AntResultProps } from 'antd';\nimport type { BaseComponentProps } from '../../types/common';\n\nexport interface AndResultProps extends AntResultProps, BaseComponentProps {}\n\nexport const AndResult: React.FC<AndResultProps> = ({\n id, sessionId, develop, children, ...restProps\n}) => {\n return <Result {...restProps}>{children}</Result>;\n};\n\nexport default AndResult;\n","import React, { useMemo, useCallback } from 'react';\nimport { Card, ConfigProvider } from 'antd';\nimport type { CardProps as AntCardProps } from 'antd';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport { createCommand } from '../../base/actionParser';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\n// Semantic DOM 样式类型\ninterface CardSemanticStyles {\n root?: React.CSSProperties;\n header?: React.CSSProperties;\n title?: React.CSSProperties;\n extra?: React.CSSProperties;\n cover?: React.CSSProperties;\n body?: React.CSSProperties;\n actions?: React.CSSProperties;\n}\n\n// Tab 配置项\ninterface TabItem {\n key: string;\n tab: string;\n disabled?: boolean;\n}\n\n// Define CardTabListType locally as it's not exported by antd consistently\ntype CardTabListType = {\n key: string;\n tab: React.ReactNode;\n disabled?: boolean;\n};\n\nexport interface AndCardProps extends Omit<AntCardProps, 'title' | 'extra' | 'cover' | 'tabBarExtraContent' | 'actions' | 'onTabChange' | 'tabList'>, BaseComponentProps, DataSetConfig {\n /** 标题 (字符串或 ReactNode) */\n title?: React.ReactNode | string;\n /** 右上角操作区 (字符串或 ReactNode) */\n extra?: React.ReactNode | string;\n /** 封面 (ReactNode) */\n cover?: React.ReactNode;\n /** Tab bar 额外内容 (ReactNode) */\n tabBarExtraContent?: React.ReactNode;\n /** 操作组 (ReactNode[]) */\n actions?: React.ReactNode[];\n /** Tab 列表配置 */\n tabList?: TabItem[] | string;\n /** 当前激活 Tab */\n activeTabKey?: string;\n /** 默认激活 Tab */\n defaultActiveTabKey?: string;\n /** Tab 变化动作 */\n tabChangeAction?: string;\n /** 自定义 onTabChange */\n onTabChange?: (key: string) => void;\n /** Semantic DOM 样式 */\n styles?: CardSemanticStyles | string;\n /** Design Token */\n token?: Record<string, any> | string;\n /** GrapesJS 显示控制 (不传递给 DOM) */\n showHeader?: boolean;\n showCover?: boolean;\n showActions?: boolean;\n}\n\n// 解析 JSON\nconst parseJson = <T,>(value: T | string | undefined, fallback: T): T => {\n if (value === undefined || value === null) return fallback;\n if (typeof value === 'string') {\n try {\n const trimmed = value.trim();\n if (trimmed.startsWith('[') || trimmed.startsWith('{')) {\n return JSON.parse(trimmed);\n }\n } catch {\n return fallback;\n }\n }\n return value as T;\n};\n\n// 解析 TabList\nconst parseTabList = (tabList: TabItem[] | string | undefined): CardTabListType[] => {\n const items = parseJson(tabList, [] as TabItem[]);\n return items.map(item => ({\n key: item.key,\n tab: item.tab,\n disabled: item.disabled,\n }));\n};\n\nexport const AndCard: React.FC<AndCardProps> = ({\n id,\n sessionId,\n develop,\n dataSet,\n dataSetField,\n // 内容插槽\n title,\n extra,\n cover,\n tabBarExtraContent,\n actions,\n // Tab 属性\n tabList: propTabList,\n activeTabKey: propActiveTabKey,\n defaultActiveTabKey,\n tabChangeAction,\n onTabChange,\n // 样式\n styles: propStyles,\n token: propToken,\n // 过滤掉不应该传递给 Card 的 props (避免 React 警告)\n // 这些属性主要由 GrapesJS 使用或在内部逻辑处理,不需要传递给 Antd Card\n showHeader,\n showCover,\n showActions,\n // 其他\n children,\n ...restProps\n}) => {\n const addCommand = useAndStore((state) => state.addCommand);\n const getDataSet = useAndStore((state) => state.getDataSet);\n const setDataSet = useAndStore((state) => state.setDataSet);\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n\n // 解析样式\n const styles = useMemo(() => parseJson(propStyles, {} as CardSemanticStyles), [propStyles]);\n\n // 解析 tabList\n const tabList = useMemo(() => {\n const parsed = parseTabList(propTabList);\n return parsed.length > 0 ? parsed : undefined;\n }, [propTabList]);\n\n // 从 store 获取 activeTabKey\n const storeActiveKey = useMemo(() => {\n if (dataSetKey && dataSetField) {\n const value = getDataSet(dataSetKey, `${dataSetField}.activeTabKey`);\n if (typeof value === 'string') return value;\n }\n return undefined;\n }, [dataSetKey, dataSetField, getDataSet]);\n\n // 计算 activeTabKey\n const activeTabKey = storeActiveKey ?? propActiveTabKey;\n\n // Tab 切换处理\n const handleTabChange = useCallback((key: string) => {\n if (onTabChange) {\n onTabChange(key);\n return;\n }\n // 更新 store\n if (dataSetKey && dataSetField) {\n setDataSet(dataSetKey, `${dataSetField}.activeTabKey`, key);\n }\n // 触发动作\n if (tabChangeAction && sessionId) {\n addCommand(sessionId, createCommand(tabChangeAction, { key }));\n }\n }, [onTabChange, dataSetKey, dataSetField, setDataSet, tabChangeAction, sessionId, addCommand]);\n\n // 从 children 中提取插槽内容 (兼容 GrapesJS 导出结构)\n const { titleSlot, extraSlot, coverSlot, actionsSlot, otherChildren, actionsFromChildren } = useMemo(() => {\n let titleSlot: React.ReactNode = null;\n let extraSlot: React.ReactNode = null;\n let coverSlot: React.ReactNode = null;\n let actionsSlot: React.ReactNode[] = [];\n const otherChildren: React.ReactNode[] = [];\n // 标记 actions 是否来自 children slot(而非 actions prop)\n let actionsFromChildren = false;\n\n // 优先使用 props 传入的内容\n if (title) titleSlot = title;\n if (extra) extraSlot = extra;\n if (cover) coverSlot = cover;\n if (actions) actionsSlot = actions;\n\n // 如果 props 没有提供,尝试从 children 中提取\n React.Children.forEach(children, (child) => {\n if (!React.isValidElement(child)) {\n otherChildren.push(child);\n return;\n }\n\n const childProps = child.props as any;\n const slotType = childProps['data-slot-type'];\n \n if (slotType === 'title' && !title) {\n titleSlot = child;\n } else if (slotType === 'extra' && !extra) {\n extraSlot = child;\n } else if (slotType === 'cover' && !cover) {\n coverSlot = child;\n } else if (slotType === 'actions' && !actions) {\n // 整个 actions slot div 作为单项传给 Ant Design Card。\n // actionsFromChildren=true 触发自动注入 actionsLiMargin:'0px',\n // 消除 Ant Design li 默认的 margin(paddingSM px 0),与设计器对齐。\n actionsSlot = [child];\n actionsFromChildren = true;\n } else if (slotType === 'body') {\n // body 插槽的内容作为主要 children\n // 注意:AndCardSlotProcessor 会尝试直接返回 body 内容,没有 wrapper\n // 如果有 wrapper,则解包或直接使用\n if (childProps.children) {\n otherChildren.push(childProps.children);\n } else {\n otherChildren.push(child);\n }\n } else {\n otherChildren.push(child);\n }\n });\n\n return { titleSlot, extraSlot, coverSlot, actionsSlot, otherChildren, actionsFromChildren };\n }, [children, title, extra, cover, actions]);\n\n // NOTE: actionsLiMargin 是 AntD5 Card 组件 token(默认 `${paddingSM}px 0`,约 8px 0)。\n // 当 actions 来自 children slot(导出代码路径),slot div 本身已包含全部布局样式,\n // AntD li 的额外 margin 会造成高度溢出,需归零以与设计器保持一致。\n // 用户自定义 token 优先级更高(spread 在后)。\n const token = useMemo(() => {\n const base = parseJson(propToken, {});\n if (actionsFromChildren) {\n return { actionsLiMargin: '0px', ...base };\n }\n return base;\n }, [propToken, actionsFromChildren]);\n\n // 渲染 Card\n const cardElement = (\n <Card\n {...restProps}\n title={titleSlot}\n extra={extraSlot}\n cover={coverSlot}\n tabBarExtraContent={tabBarExtraContent}\n actions={actionsSlot.length > 0 ? actionsSlot : undefined}\n tabList={tabList}\n activeTabKey={activeTabKey}\n defaultActiveTabKey={defaultActiveTabKey}\n onTabChange={tabList ? handleTabChange : undefined}\n styles={styles}\n >\n {otherChildren}\n </Card>\n );\n\n // 应用 Design Token\n if (token && Object.keys(token).length > 0) {\n return (\n <ConfigProvider theme={{ components: { Card: token } }}>\n {cardElement}\n </ConfigProvider>\n );\n }\n\n return cardElement;\n};\n\nexport default AndCard;\n","import React from 'react';\nimport { Divider, ConfigProvider } from 'antd';\nimport type { DividerProps as AntDividerProps } from 'antd';\nimport type { BaseComponentProps } from '../../types/common';\n\n/**\n * AndDivider Props 接口\n * 基于 Ant Design Divider 组件,完整支持所有 API\n * \n * API 参考: https://ant.design/components/divider-cn\n * \n * Props:\n * - children: ReactNode - 分割线内的文字\n * - dashed: boolean - 是否虚线 (已废弃,请使用 variant)\n * - orientation: 'left' | 'right' | 'center' - 分割线标题的位置 (已废弃, 使用 titlePlacement)\n * - titlePlacement: 'start' | 'end' | 'center' - 分割线标题的位置 (5.25.0+)\n * - plain: boolean - 使用轻量级分割文字样式\n * - type: 'horizontal' | 'vertical' - 水平或垂直分割线\n * - variant: 'solid' | 'dashed' | 'dotted' - 分割线变体 (5.20.0+)\n * \n * Semantic DOM:\n * - root: 根元素\n * - rail: 分割线条元素\n * - content: 内容元素\n */\nexport interface AndDividerProps extends AntDividerProps, BaseComponentProps {\n /** 分割线文字 (children 的别名,便于 GrapesJS 配置) */\n text?: React.ReactNode;\n /** Semantic DOM 样式 */\n styles?: {\n root?: React.CSSProperties;\n rail?: React.CSSProperties;\n content?: React.CSSProperties;\n };\n /** Design Token */\n token?: Record<string, any>;\n}\n\n/**\n * AndDivider 组件\n * 封装 Ant Design Divider,支持完整 API、Semantic DOM 和 Design Token\n */\nexport const AndDivider: React.FC<AndDividerProps> = ({\n id,\n sessionId,\n develop,\n text,\n children,\n styles,\n token,\n ...restProps\n}) => {\n // 渲染内容:优先使用 children,否则使用 text\n const content = children || text;\n\n // 如果有 Design Token,使用 ConfigProvider 包裹\n if (token && Object.keys(token).length > 0) {\n return (\n <ConfigProvider\n theme={{\n components: {\n Divider: token,\n },\n }}\n >\n <Divider {...restProps} styles={styles}>\n {content}\n </Divider>\n </ConfigProvider>\n );\n }\n\n return (\n <Divider {...restProps} styles={styles}>\n {content}\n </Divider>\n );\n};\n\nexport default AndDivider;\n","import React, { useMemo, useCallback } from 'react';\nimport { Dropdown, Button, Space } from 'antd';\nimport { DownOutlined } from '@ant-design/icons';\nimport type { DropdownProps as AntDropdownProps, MenuProps } from 'antd';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport { createCommand } from '../../base/actionParser';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\n// 菜单项类型\ninterface MenuItem {\n key: string;\n label: string;\n icon?: string;\n disabled?: boolean;\n danger?: boolean;\n divider?: boolean;\n children?: MenuItem[];\n}\n\n/** 与 Ant Design Dropdown/Menu 事件对应的 command 动作名,用于 Extend 中 createWatchCommands 注册 */\nexport interface AndDropdownActionProps {\n /** 点击菜单项(Menu onClick) */\n clickAction?: string;\n /** 菜单项被选中(Menu onSelect,selectable 时) */\n selectAction?: string;\n /** 菜单项取消选中(Menu onDeselect,multiple 时) */\n deselectAction?: string;\n /** 下拉框显示/隐藏(Dropdown onOpenChange) */\n openChangeAction?: string;\n}\n\nexport interface AndDropdownProps\n extends Omit<AntDropdownProps, 'menu' | 'children' | 'onOpenChange'>,\n BaseComponentProps,\n DataSetConfig,\n AndDropdownActionProps {\n /** 按钮文本 */\n text?: string;\n /** 菜单项配置 */\n items?: MenuItem[] | string;\n /** 子元素 */\n children?: React.ReactNode;\n /** (Internal) 是否有 GrapesJS 子组件 */\n hasChildren?: boolean;\n /** 直接透传:下拉框显示状态变化 */\n onOpenChange?: (open: boolean, info: { source: 'trigger' | 'menu' }) => void;\n}\n\n// 解析菜单项\nconst parseItems = (items: MenuItem[] | string | undefined): MenuItem[] => {\n if (!items) return [];\n if (typeof items === 'string') {\n try {\n return JSON.parse(items);\n } catch {\n return [];\n }\n }\n return items;\n};\n\n// 转换为 Ant Design Menu 格式\nconst convertToMenuItems = (items: MenuItem[]): MenuProps['items'] => {\n return items.map(item => {\n if (item.divider) {\n return { type: 'divider' as const, key: item.key };\n }\n return {\n key: item.key,\n label: item.label,\n disabled: item.disabled,\n danger: item.danger,\n children: item.children ? convertToMenuItems(item.children) : undefined,\n };\n });\n};\n\n// ... (omit parseItems and convertToMenuItems)\n\nexport const AndDropdown: React.FC<AndDropdownProps> = ({\n id,\n sessionId,\n develop,\n dataSet,\n dataSetField,\n text = '下拉菜单',\n items: propItems,\n clickAction,\n selectAction,\n deselectAction,\n openChangeAction,\n onOpenChange: propOnOpenChange,\n children,\n hasChildren,\n ...restProps\n}) => {\n const addCommand = useAndStore((state) => state.addCommand);\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n\n // 订阅 store,使 setDataSet 更新时组件能重渲染(仅读不订阅则不会响应)\n const storeValue = useAndStore((state) => {\n if (!dataSetKey) return undefined;\n if (dataSetField) return state.getDataSet(dataSetKey, dataSetField);\n return state.dataSets[dataSetKey];\n });\n\n // 从 store 派生菜单项,兼容多种约定(与 AndMenu 一致):\n // 1) dataSetField 指向数组时,storeValue 直接为 MenuItem[]\n // 2) 只配 dataSet 未配 dataSetField 时,Extend 常用 setDataSet(key, '', list) → storeValue 为整块(数组或 { value: MenuItem[] })\n // 3) 或存 { items: MenuItem[] }\n const storeItems = useMemo((): MenuItem[] | undefined => {\n if (storeValue === undefined || storeValue === null) return undefined;\n if (Array.isArray(storeValue)) return storeValue as MenuItem[];\n const obj = storeValue as Record<string, unknown>;\n if (Array.isArray(obj?.items)) return obj.items as MenuItem[];\n if (Array.isArray(obj?.value)) return obj.value as MenuItem[];\n return undefined;\n }, [storeValue]);\n\n // 设计器模式(develop):优先 store,无则回退到静态 items 便于画布预览;运行时且配置了 dataSet:仅用 store,不回退到静态 items\n const items = useMemo(() => {\n if (develop) return storeItems ?? parseItems(propItems) ?? [];\n if (dataSetKey) return storeItems ?? [];\n return parseItems(propItems) ?? [];\n }, [develop, dataSetKey, storeItems, propItems]);\n\n // Dropdown 显示/隐藏(官方:onOpenChange(open, { source: 'trigger' | 'menu' }))\n const handleOpenChange = useCallback(\n (open: boolean, info: { source: 'trigger' | 'menu' }) => {\n if (propOnOpenChange) {\n propOnOpenChange(open, info);\n return;\n }\n if (openChangeAction && sessionId) {\n addCommand(sessionId, createCommand(openChangeAction, { open, source: info.source }));\n }\n },\n [propOnOpenChange, openChangeAction, sessionId, addCommand]\n );\n\n // 转换为菜单配置(Menu onClick / onSelect / onDeselect 对应官方 API;info 类型由 MenuProps 推断,domEvent 为 MouseEvent | KeyboardEvent)\n const menuProps = useMemo<MenuProps>(\n () => ({\n items: convertToMenuItems(items),\n onClick: (info) => {\n if (clickAction && sessionId) {\n addCommand(sessionId, createCommand(clickAction, { key: info.key, keyPath: info.keyPath }));\n }\n },\n onSelect: (info) => {\n if (selectAction && sessionId) {\n addCommand(\n sessionId,\n createCommand(selectAction, {\n key: info.key,\n keyPath: info.keyPath,\n selectedKeys: info.selectedKeys,\n })\n );\n }\n },\n onDeselect: (info) => {\n if (deselectAction && sessionId) {\n addCommand(\n sessionId,\n createCommand(deselectAction, {\n key: info.key,\n keyPath: info.keyPath,\n selectedKeys: info.selectedKeys,\n })\n );\n }\n },\n }),\n [items, clickAction, selectAction, deselectAction, sessionId, addCommand]\n );\n\n // 默认触发元素 - 使用 Slot 模式\n // 在 GrapesJS 中,我们将把子组件(如 Button)移动到这个 Slot 中\n const triggerElement = useMemo(() => {\n return (\n <div \n className=\"and-dropdown-trigger-slot\" \n style={{ display: 'inline-block', cursor: 'pointer' }}\n >\n {/* 如果有 React children (非设计器模式下可能用到) 则渲染 */}\n {children}\n \n {/* 设计器模式下,且没有 React children,且 GrapesJS 没有子组件时显示占位符 */}\n {develop && !children && !hasChildren && (\n <div style={{ padding: '4px 8px', border: '1px dashed #d9d9d9', color: '#ccc', fontSize: 12 }}>\n 请配置触发器\n </div>\n )}\n\n {/* \n 运行模式下,如果没有 children,使用 text 渲染默认按钮 (作为后备)\n */}\n {!children && !develop && text && (\n <Button>\n <Space>\n {text}\n <DownOutlined />\n </Space>\n </Button>\n )}\n </div>\n );\n }, [children, develop, text, hasChildren]);\n\n return (\n <Dropdown {...restProps} menu={menuProps} onOpenChange={handleOpenChange}>\n {triggerElement}\n </Dropdown>\n );\n};\n\nexport default AndDropdown;\n","import React from 'react';\nimport { Row } from 'antd';\nimport type { RowProps as AntRowProps } from 'antd';\nimport type { BaseComponentProps } from '../../types/common';\n\nexport interface AndRowProps extends AntRowProps, BaseComponentProps {}\n\nexport const AndRow: React.FC<AndRowProps> = ({\n id, sessionId, develop, children, ...restProps\n}) => {\n return <Row {...restProps}>{children}</Row>;\n};\n\nexport default AndRow;\n","import React from 'react';\nimport { Col } from 'antd';\nimport type { ColProps as AntColProps } from 'antd';\nimport type { BaseComponentProps } from '../../types/common';\n\nexport interface AndColumnProps extends AntColProps, BaseComponentProps {}\n\nexport const AndColumn: React.FC<AndColumnProps> = ({\n id, sessionId, develop, children, ...restProps\n}) => {\n return <Col {...restProps}>{children}</Col>;\n};\n\nexport default AndColumn;\n","import React from 'react';\nimport { Flex } from 'antd';\nimport type { FlexProps as AntFlexProps } from 'antd';\nimport type { BaseComponentProps } from '../../types/common';\n\nexport interface AndContainerProps extends AntFlexProps, BaseComponentProps {}\n\nexport const AndContainer: React.FC<AndContainerProps> = ({\n id, sessionId, develop, children, ...restProps\n}) => {\n return <Flex {...restProps}>{children}</Flex>;\n};\n\nexport default AndContainer;\n","import React, { useMemo } from 'react';\nimport { QRCode } from 'antd';\nimport type { QRCodeProps as AntQRCodeProps } from 'antd';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\nexport interface AndQRCodeProps extends AntQRCodeProps, BaseComponentProps, DataSetConfig {}\n\nexport const AndQRCode: React.FC<AndQRCodeProps> = ({\n id, sessionId, develop, dataSet, dataSetField, value: propValue, ...restProps\n}) => {\n const getDataSet = useAndStore((state) => state.getDataSet);\n const getProps = useAndStore((state) => state.getProps);\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n\n const storeProps = useMemo(() => {\n if (sessionId && id) return getProps(sessionId, id);\n return null;\n }, [sessionId, id, getProps]);\n\n const storeValue = useMemo(() => {\n if (dataSetKey && dataSetField) return getDataSet(dataSetKey, dataSetField);\n return undefined;\n }, [dataSetKey, dataSetField, getDataSet]);\n\n // value 绑定\n const computedValue = useMemo(() => {\n if (develop) return propValue;\n if (storeValue !== undefined && storeValue !== null && storeValue !== '') {\n return String(storeValue);\n }\n if (storeProps?.value !== undefined) return storeProps.value;\n return propValue;\n }, [develop, storeValue, storeProps?.value, propValue]);\n\n const mergedProps = useMemo(() => {\n const baseProps = { ...restProps };\n if (storeProps && typeof storeProps === 'object') {\n Object.keys(storeProps).forEach((key) => {\n if (key !== 'value' && storeProps[key] !== undefined && storeProps[key] !== null) {\n (baseProps as any)[key] = storeProps[key];\n }\n });\n }\n return baseProps;\n }, [restProps, storeProps]);\n\n return <QRCode {...mergedProps} value={computedValue || ''} />;\n};\n\nexport default AndQRCode;\n\n","import React, { useMemo, useCallback } from 'react';\nimport { Splitter, ConfigProvider } from 'antd';\nimport * as Icons from '@ant-design/icons';\nimport type { SplitterProps as AntSplitterProps } from 'antd';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { createCommand } from '../../base/actionParser';\nimport type { BaseComponentProps } from '../../types/common';\n\n/**\n * Splitter Panel 配置接口\n */\nexport interface SplitterPanelConfig {\n /** 面板唯一标识 */\n key: string;\n /** 默认尺寸 (数字或百分比字符串) */\n defaultSize?: number | string;\n /** 最小尺寸 */\n min?: number | string;\n /** 最大尺寸 */\n max?: number | string;\n /** 是否可折叠 */\n collapsible?: boolean | { start?: boolean; end?: boolean; showCollapsibleIcon?: boolean | 'auto' };\n /** 是否可调整大小 */\n resizable?: boolean;\n}\n\n/**\n * Semantic DOM 样式配置\n */\nexport interface SplitterSemanticStyles {\n root?: React.CSSProperties;\n panel?: React.CSSProperties | ((info: { index: number }) => React.CSSProperties);\n dragger?: React.CSSProperties;\n}\n\n/**\n * AndSplitter 组件属性\n */\nexport interface AndSplitterProps extends Omit<AntSplitterProps, 'onResize' | 'onResizeEnd' | 'collapsibleIcon' | 'draggerIcon'>, BaseComponentProps {\n /** 面板配置列表 */\n panels?: SplitterPanelConfig[] | string;\n /** 布局方向 (orientation in Ant Design 6.x) */\n orientation?: 'horizontal' | 'vertical';\n /** 延迟渲染模式 */\n lazy?: boolean;\n /** 拖拽图标 (图标名称字符串) */\n draggerIcon?: string;\n /** 折叠图标 (start/end 图标名称字符串) */\n collapsibleIcon?: { start?: string; end?: string } | string;\n /** 调整大小时的动作 */\n resizeAction?: string;\n /** 调整大小结束时的动作 */\n resizeEndAction?: string;\n /** 自定义 onResize */\n onResize?: (sizes: number[]) => void;\n /** 自定义 onResizeEnd */\n onResizeEnd?: (sizes: number[]) => void;\n /** Design Token */\n token?: Record<string, any> | string;\n /** 子组件 (用于运行时渲染) */\n children?: React.ReactNode;\n /** 面板内容渲染函数 (用于编辑器模式) */\n renderPanelContent?: (panelKey: string, index: number) => React.ReactNode;\n}\n\n/**\n * 根据图标名称创建图标组件\n */\nconst createIconFromName = (iconName: string | undefined): React.ReactNode => {\n if (!iconName) return undefined;\n const IconComponent = (Icons as any)[iconName];\n if (IconComponent) {\n return React.createElement(IconComponent);\n }\n return undefined;\n};\n\n/**\n * 解析 JSON 字符串\n */\nconst parseJson = <T,>(value: T | string | undefined, fallback: T): T => {\n if (value === undefined || value === null) return fallback;\n if (typeof value === 'string') {\n try {\n const trimmed = value.trim();\n if (trimmed.startsWith('[') || trimmed.startsWith('{')) {\n return JSON.parse(trimmed);\n }\n } catch {\n return fallback;\n }\n }\n return value as T;\n};\n\n/**\n * AndSplitter 组件\n * 基于 Ant Design Splitter,支持可视化配置\n */\nexport const AndSplitter: React.FC<AndSplitterProps> = ({\n id,\n sessionId,\n develop,\n panels: propPanels,\n orientation = 'horizontal',\n lazy = false,\n draggerIcon,\n collapsibleIcon,\n resizeAction,\n resizeEndAction,\n onResize,\n onResizeEnd,\n styles,\n token: propToken,\n children,\n renderPanelContent,\n ...restProps\n}) => {\n const addCommand = useAndStore((state) => state.addCommand);\n\n // 解析面板配置\n const panels = useMemo(\n () => parseJson(propPanels, [] as SplitterPanelConfig[]),\n [propPanels]\n );\n\n // 解析 token\n const token = useMemo(() => parseJson(propToken, {}), [propToken]);\n\n // 解析图标\n const resolvedDraggerIcon = useMemo(() => createIconFromName(draggerIcon), [draggerIcon]);\n\n const resolvedCollapsibleIcon = useMemo(() => {\n if (!collapsibleIcon) return undefined;\n if (typeof collapsibleIcon === 'string') {\n // 如果是字符串,尝试解析为 JSON 或直接作为图标名 (暂不支持单字符串直接作为 icon,需明确 structure)\n //为了兼容性,如果传入字符串,假设它是 JSON\n const parsed = parseJson(collapsibleIcon, null);\n if (parsed && typeof parsed === 'object') {\n return {\n start: createIconFromName((parsed as any).start),\n end: createIconFromName((parsed as any).end),\n };\n }\n return undefined;\n }\n return {\n start: createIconFromName(collapsibleIcon.start),\n end: createIconFromName(collapsibleIcon.end),\n };\n }, [collapsibleIcon]);\n\n // 处理调整大小事件\n const handleResize = useCallback(\n (sizes: number[]) => {\n if (onResize) {\n onResize(sizes);\n return;\n }\n if (resizeAction && sessionId) {\n addCommand(sessionId, createCommand(resizeAction, { sizes }));\n }\n },\n [onResize, resizeAction, sessionId, addCommand]\n );\n\n // 处理调整大小结束事件\n const handleResizeEnd = useCallback(\n (sizes: number[]) => {\n if (onResizeEnd) {\n onResizeEnd(sizes);\n return;\n }\n if (resizeEndAction && sessionId) {\n addCommand(sessionId, createCommand(resizeEndAction, { sizes }));\n }\n },\n [onResizeEnd, resizeEndAction, sessionId, addCommand]\n );\n\n // 渲染面板内容\n const renderPanels = () => {\n // 如果有 children (运行时模式),使用 children\n if (children && React.Children.count(children) > 0) {\n return React.Children.map(children, (child, index) => {\n const panelConfig = panels[index] || {};\n return (\n <Splitter.Panel\n key={panelConfig.key || index}\n defaultSize={panelConfig.defaultSize}\n min={panelConfig.min}\n max={panelConfig.max}\n collapsible={panelConfig.collapsible}\n resizable={panelConfig.resizable !== false}\n >\n {child}\n </Splitter.Panel>\n );\n });\n }\n\n // 根据面板配置渲染\n return panels.map((panel, index) => (\n <Splitter.Panel\n key={panel.key || index}\n defaultSize={panel.defaultSize || undefined}\n min={panel.min || undefined}\n max={panel.max || undefined}\n collapsible={panel.collapsible}\n resizable={panel.resizable !== false}\n >\n {renderPanelContent ? (\n renderPanelContent(panel.key, index)\n ) : (\n <div\n style={{\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: '#999',\n fontSize: 14,\n }}\n >\n Panel {index + 1}\n </div>\n )}\n </Splitter.Panel>\n ));\n };\n\n // 创建 Splitter 元素\n // 注意: 使用 layout 解构避免 restProps 中残留的 deprecated layout 属性传入\n const { layout: _ignoredLayout, ...cleanRestProps } = restProps as any;\n const splitterElement = (\n <div style={{ width: '100%', height: '100%' }}>\n <Splitter\n key={orientation} // Force re-render inside this wrapper to avoid blank screen and GrapesJS root conflict\n {...cleanRestProps}\n orientation={orientation}\n lazy={lazy}\n onResize={handleResize}\n onResizeEnd={handleResizeEnd}\n style={{ height: '100%', width: '100%', ...cleanRestProps.style }}\n styles={styles}\n draggerIcon={resolvedDraggerIcon}\n collapsibleIcon={resolvedCollapsibleIcon}\n >\n {renderPanels()}\n </Splitter>\n </div>\n );\n\n // 应用 Design Token\n if (token && Object.keys(token).length > 0) {\n return (\n <ConfigProvider theme={{ components: { Splitter: token } }}>\n {splitterElement}\n </ConfigProvider>\n );\n }\n\n return splitterElement;\n};\n\n\n/**\n * AndSplitterPanel 组件\n * 仅用于作为 AndSplitter 的子组件容器,实际的分隔面板逻辑由 AndSplitter 处理\n * 此组件主要用于编辑器识别和属性传递\n */\nexport const AndSplitterPanel: React.FC<SplitterPanelConfig & { children?: React.ReactNode; className?: string; style?: React.CSSProperties; [key: string]: any }> = ({\n children,\n className,\n style,\n // 过滤掉 SplitterPanelConfig 中的属性,避免传递给 div 导致 React 警告\n key,\n defaultSize,\n min,\n max,\n collapsible,\n resizable,\n sessionId,\n ...restProps\n}) => {\n return (\n <div\n className={className}\n style={{ display: 'contents', width: '100%', height: '100%', ...style }}\n {...restProps}\n >\n {children}\n </div>\n );\n};\n\nexport default AndSplitter;\n","import React, { useMemo, useState } from 'react';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport { Pagination } from 'antd';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\nexport interface AndIteratorProps extends BaseComponentProps, DataSetConfig {\n /** 渲染函数 */\n renderItem?: (item: any, index: number) => React.ReactNode;\n /** 空状态渲染 */\n renderEmpty?: () => React.ReactNode;\n /** 外部数据 */\n items?: any[];\n /** 最大显示数量 */\n maxCount?: number;\n /** 容器样式 */\n containerStyle?: React.CSSProperties;\n /** 子元素 */\n children?: React.ReactNode;\n \n // 分页配置\n \"page-disabled\"?: boolean;\n \"page-defaultPageSize\"?: number;\n \"page-pageSizeOptions\"?: string[];\n \"page-showSizeChanger\"?: boolean;\n \"page-showQuickJumper\"?: boolean;\n \"page-simple\"?: boolean;\n \"page-size\"?: 'default' | 'small';\n \"page-showLessItems\"?: boolean;\n}\n\nexport const AndIterator: React.FC<AndIteratorProps> = ({\n id, sessionId, develop, dataSet, dataSetField, renderItem, renderEmpty, items: propItems, maxCount, containerStyle, children,\n \"page-disabled\": pageDisabled = false,\n \"page-defaultPageSize\": defaultPageSize = 10,\n \"page-pageSizeOptions\": pageSizeOptions = ['10', '20', '30', '40'],\n \"page-showSizeChanger\": showSizeChanger = true,\n \"page-showQuickJumper\": showQuickJumper = false,\n \"page-simple\": simple = false,\n \"page-size\": size = 'small',\n \"page-showLessItems\": showLessItems = false,\n}) => {\n const getDataSet = useAndStore((state) => state.getDataSet);\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n\n // 分页状态\n const [current, setCurrent] = useState(1);\n const [pageSize, setPageSize] = useState(defaultPageSize);\n\n // 从 store 获取数据\n const storeItems = useMemo(() => {\n if (dataSetKey && dataSetField) {\n const data = getDataSet(dataSetKey, dataSetField);\n return Array.isArray(data) ? data : [];\n }\n return [];\n }, [dataSetKey, dataSetField, getDataSet]);\n\n // 设计器模式(develop):优先 store,无则回退到静态 items;运行时且配置了 dataSet:仅用 store,不回退到静态 items\n const allItems = useMemo(() => {\n if (develop) return storeItems.length > 0 ? storeItems : (propItems || []);\n if (dataSetKey) return storeItems;\n return propItems || [];\n }, [develop, dataSetKey, storeItems, propItems]);\n\n // 计算分页后的数据\n const displayItems = useMemo(() => {\n let list = allItems;\n \n // 如果启用分页且未禁用\n if (!pageDisabled) {\n const start = (current - 1) * pageSize;\n const end = start + pageSize;\n list = list.slice(start, end);\n }\n\n return maxCount ? list.slice(0, maxCount) : list;\n }, [allItems, pageDisabled, current, pageSize, maxCount]);\n\n // 空状态\n if (!allItems || allItems.length === 0) {\n if (renderEmpty) return <>{renderEmpty()}</>;\n return <div style={{ textAlign: 'center', padding: '20px', color: '#999' }}>暂无数据</div>;\n }\n\n // 分页变更处理\n const handlePageChange = (page: number, size?: number) => {\n setCurrent(page);\n if (size) setPageSize(size);\n };\n\n // 渲染列表\n return (\n <div style={{ display: 'flex', flexDirection: 'column', ...containerStyle }}>\n <div style={{ flex: 1 }}>\n {displayItems.map((item, index) => (\n <React.Fragment key={item.id || index}>\n {renderItem ? renderItem(item, index) : (\n <div style={{ padding: '8px', borderBottom: '1px solid #f0f0f0' }}>\n {JSON.stringify(item)}\n </div>\n )}\n </React.Fragment>\n ))}\n </div>\n \n {!pageDisabled && allItems.length > 0 && (\n <div style={{ display: 'flex', justifyContent: 'flex-end', marginTop: 16 }}>\n <Pagination\n current={current}\n pageSize={pageSize}\n total={allItems.length}\n onChange={handlePageChange}\n pageSizeOptions={pageSizeOptions}\n showSizeChanger={showSizeChanger}\n showQuickJumper={showQuickJumper}\n simple={simple}\n size={size}\n showLessItems={showLessItems}\n />\n </div>\n )}\n </div>\n );\n};\n\nexport default AndIterator;\n","import React from 'react';\nimport * as Icons from '@ant-design/icons';\nimport type { BaseComponentProps } from '../../types/common';\n\nexport interface AndIconProps extends BaseComponentProps {\n /** 图标名称(Ant Design Icons) */\n name?: string;\n /** 自定义 SVG 代码,存在时优先渲染 SVG */\n svg?: string;\n /** 图标大小 */\n size?: number;\n /** 图标颜色 */\n color?: string;\n /** 是否旋转动画 */\n spin?: boolean;\n /** 旋转角度(度) */\n rotate?: number;\n /** 双色图标第二色(仅 Ant Design 双色图标) */\n twoToneColor?: string;\n /** 自定义样式 */\n style?: React.CSSProperties;\n /** 组件样式配置 */\n styles?: React.CSSProperties;\n /** 点击事件 */\n onClick?: () => void;\n}\n\nconst SPIN_KEYFRAMES = `@keyframes and-icon-spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}`;\n\n/** 使 SVG 继承外层 color:未设置 fill 的 path 等使用 currentColor */\nconst SVG_COLOR_STYLE = `.and-icon-svg-root svg,.and-icon-svg-root svg path{fill:currentColor}.and-icon-svg-root svg{color:inherit}`;\n\nexport const AndIcon: React.FC<AndIconProps> = ({\n id: _id,\n sessionId: _sessionId,\n develop: _develop,\n name,\n svg: svgRaw,\n size = 16,\n color,\n spin = false,\n rotate = 0,\n twoToneColor,\n style,\n styles,\n onClick,\n}) => {\n const svg = typeof svgRaw === 'string' ? svgRaw.trim() : '';\n\n const mergedStyle: React.CSSProperties = {\n fontSize: size,\n color,\n cursor: onClick ? 'pointer' : undefined,\n ...styles,\n ...style,\n };\n\n if (svg) {\n const wrapperStyle: React.CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: size,\n height: size,\n transform: rotate ? `rotate(${rotate}deg)` : undefined,\n ...mergedStyle,\n };\n const innerStyle: React.CSSProperties = spin\n ? { animation: 'and-icon-spin 1s linear infinite', display: 'inline-flex' }\n : { display: 'inline-flex' };\n return (\n <>\n <style>{SVG_COLOR_STYLE}</style>\n {spin && <style>{SPIN_KEYFRAMES}</style>}\n <span\n className=\"and-icon-svg-root\"\n style={wrapperStyle}\n onClick={onClick}\n role={onClick ? 'button' : undefined}\n >\n <span style={innerStyle}>\n <span\n dangerouslySetInnerHTML={{ __html: svg }}\n style={{ width: '100%', height: '100%', display: 'flex', alignItems: 'center', justifyContent: 'center' }}\n />\n </span>\n </span>\n </>\n );\n }\n\n if (!name) return null;\n\n const IconComponent = (Icons as any)[name];\n if (!IconComponent) {\n console.warn(`Icon \"${name}\" not found in @ant-design/icons`);\n return null;\n }\n\n return (\n <IconComponent\n style={mergedStyle}\n spin={spin}\n rotate={rotate}\n twoToneColor={twoToneColor || undefined}\n onClick={onClick}\n />\n );\n};\n\nexport default AndIcon;\n","import React, { useMemo } from 'react';\nimport { Card, Space, Tag } from 'antd';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport { createCommand } from '../../base/actionParser';\nimport type { BaseComponentProps, DataSetConfig } from '../../types/common';\n\ninterface ProductItem {\n id: string | number;\n name: string;\n image?: string;\n price?: number;\n originalPrice?: number;\n tags?: string[];\n}\n\nexport interface AndProductCategoryProps extends BaseComponentProps, DataSetConfig {\n /** 商品列表 */\n products?: ProductItem[];\n /** 列数 */\n columns?: number;\n /** 点击动作 */\n clickAction?: string;\n /** 容器样式 */\n style?: React.CSSProperties;\n}\n\nexport const AndProductCategory: React.FC<AndProductCategoryProps> = ({\n id, sessionId, develop, dataSet, dataSetField, products: propProducts, columns = 4, clickAction, style\n}) => {\n const addCommand = useAndStore((state) => state.addCommand);\n const getDataSet = useAndStore((state) => state.getDataSet);\n const dataSetKey = useMemo(\n () => getDataSetStoreKey(sessionId, dataSet),\n [sessionId, dataSet]\n );\n\n const storeProducts = useMemo(() => {\n if (dataSetKey && dataSetField) {\n const data = getDataSet(dataSetKey, dataSetField);\n return Array.isArray(data) ? data : [];\n }\n return [];\n }, [dataSetKey, dataSetField, getDataSet]);\n\n const products = storeProducts.length > 0 ? storeProducts : (propProducts || []);\n\n const handleClick = (product: ProductItem) => {\n if (clickAction && sessionId) {\n addCommand(sessionId, createCommand(clickAction, product));\n }\n };\n\n return (\n <div style={{ display: 'grid', gridTemplateColumns: `repeat(${columns}, 1fr)`, gap: 16, ...style }}>\n {products.map((product) => (\n <Card\n key={product.id}\n hoverable\n cover={product.image && <img alt={product.name} src={product.image} style={{ height: 200, objectFit: 'cover' }} />}\n onClick={() => handleClick(product)}\n >\n <Card.Meta\n title={product.name}\n description={\n <Space direction=\"vertical\" size={4}>\n {product.price !== undefined && (\n <div>\n <span style={{ color: '#f5222d', fontSize: 18, fontWeight: 'bold' }}>¥{product.price}</span>\n {product.originalPrice && (\n <span style={{ marginLeft: 8, color: '#999', textDecoration: 'line-through' }}>¥{product.originalPrice}</span>\n )}\n </div>\n )}\n {product.tags && product.tags.length > 0 && (\n <Space size={4} wrap>\n {product.tags.map((tag: any, idx: any) => (\n <Tag key={idx} color=\"blue\">{tag}</Tag>\n ))}\n </Space>\n )}\n </Space>\n }\n />\n </Card>\n ))}\n </div>\n );\n};\n\nexport default AndProductCategory;\n","import React, { useMemo, Suspense } from 'react';\nimport { Spin } from 'antd';\nimport { ApiOutlined, InboxOutlined } from '@ant-design/icons';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport { getDataSetStoreKey } from '../../base/storeKeyUtils';\nimport { getCoreConfig } from '../../config';\n\nexport interface AndDynamicContainerProps {\n /** 要渲染的组件名称 */\n componentName: string;\n /** 静态 props */\n componentProps?: Record<string, any>;\n /** 从 Store 获取 props 的 key */\n storePropsKey?: string;\n /** 会话 ID */\n sessionId?: string;\n /** 容器标题 (仅设计模式显示) */\n title?: string;\n /** 是否开发/设计模式 */\n develop?: boolean;\n /** 容器样式 */\n style?: React.CSSProperties;\n /** ID */\n id?: string;\n /** 组件解析器 - 由运行时注入 */\n componentResolver?: (name: string) => React.ComponentType<any> | null;\n /** 占位符文本 - 当组件未配置或未找到时显示 */\n placeholder?: string;\n /** 仅设计器:占位内容(图标/标题/storeKey)的 flex 方向 */\n placeholderFlexDirection?: 'column' | 'row';\n}\n\n// 占位符组件 - 统一样式,专业简洁的灰色风格\nconst PlaceholderBox: React.FC<{\n id?: string;\n icon?: React.ReactNode;\n title?: string;\n description?: string;\n style?: React.CSSProperties;\n}> = ({ id, icon, title, description, style }) => (\n <div\n id={id}\n style={{\n width: '100%',\n height: '100%',\n minHeight: 80,\n flex: '1 1 auto',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n border: '1px dashed #d9d9d9',\n borderRadius: 4,\n background: '#fafafa',\n color: '#8c8c8c',\n padding: 16,\n boxSizing: 'border-box',\n ...style,\n }}\n >\n {icon || <InboxOutlined style={{ fontSize: 28, marginBottom: 8, color: '#bfbfbf' }} />}\n {title && <div style={{ fontWeight: 500, fontSize: 13, marginBottom: 4 }}>{title}</div>}\n {description && <div style={{ fontSize: 12, opacity: 0.7 }}>{description}</div>}\n </div>\n);\n\n/**\n * AndDynamicContainer - 动态容器组件\n * \n * 在设计器中显示为占位符卡片,运行时动态加载指定组件。\n * \n * 使用方式:\n * 1. 设计器:拖入画布,配置 componentName 和 storePropsKey\n * 2. 运行时:通过 componentResolver 注入组件解析能力\n */\nexport const AndDynamicContainer: React.FC<AndDynamicContainerProps> = ({\n componentName,\n componentProps = {},\n storePropsKey,\n sessionId,\n title,\n develop = false,\n style,\n id,\n componentResolver,\n placeholder,\n placeholderFlexDirection = 'column',\n}) => {\n // dataSet key 统一用 getDataSetStoreKey(sessionId, baseKey),避免命名冲突\n const dataSetKey = useMemo(() => {\n if (!storePropsKey) return undefined;\n const baseKey = storePropsKey.split('.')[0];\n return getDataSetStoreKey(sessionId, baseKey);\n }, [storePropsKey, sessionId]);\n\n // 只订阅当前容器用到的 dataSet 切片,避免其它 dataSet 更新时触发本组件重渲染\n const dataSetSlice = useAndStore((state) =>\n dataSetKey ? state.dataSets[dataSetKey] : null\n );\n\n // 从 store 获取配置(包括 componentName 和 props)\n const storeData = useMemo(() => {\n if (!storePropsKey || !dataSetSlice) return { componentName: '', props: {} };\n const parts = storePropsKey.split('.');\n const field = parts[1];\n const data = field ? (dataSetSlice[field] || {}) : dataSetSlice;\n \n // 支持两种格式:\n // 1. { componentName: 'xxx', ...props } - componentName 和 props 在同一对象\n // 2. { componentName: 'xxx', props: {...} } - props 嵌套在 props 字段\n if (typeof data === 'object' && data !== null) {\n const { componentName: storeCN, props: storeP, ...restProps } = data as any;\n return {\n componentName: storeCN || '',\n props: storeP || restProps || {}\n };\n }\n \n return { componentName: '', props: {} };\n }, [storePropsKey, sessionId, dataSetSlice]);\n\n // 优先使用 store 中的 componentName,否则使用 prop\n const effectiveComponentName = storeData.componentName || componentName;\n\n // 合并 props:store props + static props\n const mergedProps = useMemo(() => ({\n ...storeData.props,\n ...componentProps,\n sessionId,\n }), [storeData.props, componentProps, sessionId]);\n\n // 默认占位符文本\n const defaultPlaceholder = placeholder || '请配置组件';\n\n // 设计模式:显示占位符(图标、标题、未配置/storeKey),布局方向由 placeholderFlexDirection 控制\n if (develop) {\n const isRow = placeholderFlexDirection === 'row';\n return (\n <div\n id={id}\n style={{\n width: '100%',\n height: '100%',\n display: 'flex',\n flexGrow: 1,\n flexDirection: placeholderFlexDirection,\n alignItems: 'center',\n justifyContent: 'center',\n gap: isRow ? 8 : 0,\n border: '2px dashed #d9d9d9',\n borderRadius: 4,\n color: '#8c8c8c',\n background: 'transparent',\n boxSizing: 'border-box',\n }}\n >\n <ApiOutlined style={{ fontSize: 20, flexShrink: 0, color: '#bfbfbf', ...(isRow ? {} : { marginBottom: 4 }) }} />\n <div style={{ fontWeight: 500, fontSize: 12 }}>\n {title || '动态容器'}\n </div>\n <div style={{ fontSize: 11, opacity: 0.7 }}>\n {effectiveComponentName ? `${effectiveComponentName}` : '未配置'}\n </div>\n {storePropsKey && (\n <div style={{ fontSize: 10, opacity: 0.5, marginTop: isRow ? 0 : 2 }}>\n {storePropsKey}\n </div>\n )}\n </div>\n );\n }\n\n // 运行模式:动态加载组件\n // 优先使用 prop 传入的 resolver,否则使用全局配置的 resolver\n const globalConfig = getCoreConfig();\n const effectiveResolver = componentResolver || globalConfig.componentResolver;\n \n // 无 resolver 时显示占位符(不再显示警告色)\n if (!effectiveResolver) {\n return (\n <PlaceholderBox\n id={id}\n title={defaultPlaceholder}\n description=\"动态容器未配置组件解析器\"\n style={style}\n />\n );\n }\n\n const Component = effectiveComponentName ? effectiveResolver(effectiveComponentName) : null;\n \n // 组件未找到时显示占位符(不再显示警告色)\n if (!Component) {\n return (\n <PlaceholderBox\n id={id}\n title={defaultPlaceholder}\n description={effectiveComponentName ? `组件 \"${effectiveComponentName}\" 未找到` : undefined}\n style={style}\n />\n );\n }\n\n return (\n <Suspense fallback={<div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', width: '100%', height: '100%' }}><Spin /></div>}>\n <div id={id} style={{ width: '100%', height: '100%', flex: '1 1 auto', ...style }}>\n <Component {...mergedProps} />\n </div>\n </Suspense>\n );\n};\n\nexport default AndDynamicContainer;\n","/**\n * AndWatermark - Ant Design Watermark wrapper for Code Canvas\n * Adds watermark to the page or a specific element\n */\nimport React from \"react\";\nimport { Watermark, ConfigProvider, theme } from \"antd\";\nimport type { WatermarkProps } from \"antd\";\n\nexport interface AndWatermarkProps extends Omit<WatermarkProps, \"children\"> {\n /** Watermark text content, can be array for multi-line */\n content?: string | string[];\n /** Width of watermark */\n width?: number;\n /** Height of watermark */\n height?: number;\n /** Rotation angle in degrees */\n rotate?: number;\n /** Z-index of watermark */\n zIndex?: number;\n /** Image URL for image watermark, higher priority than content */\n image?: string;\n /** Gap between watermarks [horizontal, vertical] */\n gap?: [number, number];\n /** Offset of first watermark from top-left [x, y] */\n offset?: [number, number];\n /** Whether to inherit parent's config (5.24.0+) */\n inherit?: boolean;\n /** Font configuration */\n font?: {\n color?: string;\n fontSize?: number;\n fontWeight?: \"normal\" | \"lighter\" | \"bold\" | \"bolder\" | number;\n fontFamily?: string;\n fontStyle?: \"none\" | \"normal\" | \"italic\" | \"oblique\";\n textAlign?: \"left\" | \"right\" | \"center\" | \"start\" | \"end\";\n };\n /** Design mode flag */\n develop?: boolean;\n /** Design Token configuration */\n token?: Record<string, any>;\n /** Child content to be wrapped with watermark */\n children?: React.ReactNode;\n}\n\n/**\n * AndWatermark component\n * Wraps Ant Design Watermark with Design Token support\n */\nexport const AndWatermark: React.FC<AndWatermarkProps> = ({\n content = \"Watermark\",\n width,\n height,\n rotate = -22,\n zIndex = 9,\n image,\n gap = [100, 100],\n offset,\n inherit = true,\n font,\n develop,\n token,\n children,\n ...rest\n}) => {\n // Parse font configuration\n const fontConfig = {\n color: font?.color ?? \"rgba(0, 0, 0, 0.15)\",\n fontSize: font?.fontSize ?? 16,\n fontWeight: font?.fontWeight ?? \"normal\",\n fontFamily: font?.fontFamily ?? \"sans-serif\",\n fontStyle: font?.fontStyle ?? \"normal\",\n textAlign: font?.textAlign ?? \"center\",\n };\n\n const watermarkElement = (\n <Watermark\n content={content}\n width={width}\n height={height}\n rotate={rotate}\n zIndex={zIndex}\n image={image}\n gap={gap}\n offset={offset}\n inherit={inherit}\n font={fontConfig}\n {...rest}\n >\n {develop ? (\n <div\n data-slot=\"content\"\n style={{\n minHeight: 100,\n minWidth: 100,\n display: \"block\",\n position: \"relative\",\n // Ensure watermark overlay is not covered\n // The slot content should not have its own background\n }}\n >\n {children}\n </div>\n ) : (\n children\n )}\n </Watermark>\n );\n\n // Wrap with ConfigProvider if token is provided\n if (token && Object.keys(token).length > 0) {\n return (\n <ConfigProvider\n theme={{\n algorithm: theme.defaultAlgorithm,\n token,\n }}\n >\n {watermarkElement}\n </ConfigProvider>\n );\n }\n\n return watermarkElement;\n};\n\nexport default AndWatermark;\n","/**\n * 图表基类 HOC\n * 简化设计:只处理数据绑定,其余配置直接透传给 Ant Design Charts\n */\nimport React, { useMemo, useRef } from 'react';\nimport { useAndStore } from '../../base/store/useAndStore';\nimport type { BaseChartProps } from './types';\n\nexport interface WithChartOptions {\n /** 图表类型名称,用于日志 */\n chartType: string;\n /** 默认高度 */\n defaultHeight?: number;\n /** 默认示例数据 (设计器中展示) */\n defaultData?: any;\n}\n\n/**\n * 解析可能是 JSON 字符串的属性\n */\nexport function parseJsonProp(value: any): any {\n if (value === undefined || value === null || value === '') {\n return undefined;\n }\n if (typeof value === 'string') {\n try {\n const trimmed = value.trim();\n if (trimmed.startsWith('{') || trimmed.startsWith('[')) {\n return JSON.parse(trimmed);\n }\n } catch (e) {\n // 解析失败返回原值\n }\n }\n return value;\n}\n\n/**\n * 处理布尔值(可能是字符串 'true'/'false')\n */\nexport function parseBoolProp(value: any, defaultValue?: boolean): boolean | undefined {\n if (value === undefined || value === null || value === '') {\n return defaultValue;\n }\n if (value === true || value === 'true') return true;\n if (value === false || value === 'false') return false;\n return defaultValue;\n}\n\n/**\n * 图表基类 HOC\n * 封装数据处理逻辑,其余配置直接透传\n */\nexport function withBaseChart<P extends BaseChartProps>(\n ChartComponent: React.ComponentType<any>,\n options: WithChartOptions\n) {\n const { chartType, defaultHeight = 300, defaultData = [] } = options;\n\n const BaseChartWrapper: React.FC<P> = (props) => {\n const {\n // 基础组件 props(不传给图表)\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n id: _id,\n sessionId,\n develop,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n style: _style,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n className: _className,\n \n // 数据相关\n dataSet,\n dataSetField,\n data: propData,\n \n // 尺寸与通用\n common,\n // 解构出这些属性,防止作为 restProps 覆盖了 finalConfig\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n // height, width 等已从 BaseChartProps 移除,但为了防止透传给图表组件导致冲突,\n // 我们仍然尝试从 props 中解构它们(如果存在)。\n // 使用 as any 规避 TS 错误\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n height: _propHeight, \n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n width: _propWidth,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n autoFit: _propAutoFit, \n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n padding: _propPadding,\n\n \n // 需要解析的 JSON 配置\n title,\n legend,\n label,\n tooltip,\n animate,\n scale,\n interaction,\n annotations,\n axis,\n scrollbar,\n slider,\n theme,\n state,\n \n // 事件配置\n events,\n \n // 其余配置直接透传\n ...restProps\n } = props as any;\n\n const chartRef = useRef<any>(null);\n const getDataSet = useAndStore((state) => state.getDataSet);\n const addCommand = useAndStore((state) => state.addCommand);\n\n // ===== 数据处理 =====\n const chartData = useMemo(() => {\n // 1. 从 DataSet 获取\n if (dataSet && dataSetField) {\n const dsData = getDataSet(dataSet, dataSetField);\n if (dsData !== undefined) return dsData;\n }\n \n // 2. 解析 JSON 字符串或直接使用\n const parsed = parseJsonProp(propData);\n // 支持数组格式(大多数图表)和对象格式(如 Gauge 的 {percent: 0.7})\n if (parsed !== undefined) return parsed;\n \n // 3. 设计器模式使用默认数据\n if (develop) return defaultData;\n \n return [];\n }, [propData, dataSet, dataSetField, getDataSet, develop]);\n\n // ===== 事件处理 =====\n const handleChartReady = (chart: any) => {\n chartRef.current = chart;\n \n // 设计器模式不注册事件\n if (!develop && sessionId) {\n // 处理 events JSON 配置\n // 直接使用完整事件名,如: { \"element:click\": \"pieClick\" }\n const eventsConfig = parseJsonProp(events);\n if (eventsConfig && typeof eventsConfig === 'object') {\n Object.entries(eventsConfig).forEach(([eventName, actionName]) => {\n if (typeof actionName === 'string') {\n chart.on(eventName, (ev: any) => {\n addCommand(sessionId, {\n actionName,\n arg: ev,\n timestamp: Date.now(),\n });\n });\n }\n });\n }\n }\n \n // 调用外部 onReady\n (restProps as any).onReady?.(chart);\n };\n\n // 解析 common 配置\n const commonConfig = parseJsonProp(common) || {};\n\n // ===== 组装最终配置 =====\n const finalConfig: Record<string, any> = {\n data: chartData,\n // 优先使用 common 中的配置,没配置则使用默认值\n height: commonConfig.height ?? defaultHeight,\n autoFit: parseBoolProp(commonConfig.autoFit, true),\n // 合并其他通用配置 (margin, padding, insert, etc.)\n ...commonConfig,\n // 设计器模式禁用动画\n animate: develop ? false : parseJsonProp(animate),\n onReady: handleChartReady,\n ...restProps,\n };\n\n // 解析 JSON 配置(只添加非空值)\n const titleConfig = parseJsonProp(title);\n if (titleConfig !== undefined) finalConfig.title = titleConfig;\n \n const legendConfig = parseJsonProp(legend);\n if (legendConfig !== undefined) finalConfig.legend = legendConfig;\n \n const labelConfig = parseJsonProp(label);\n if (labelConfig !== undefined) finalConfig.label = labelConfig;\n \n const tooltipConfig = parseJsonProp(tooltip);\n if (tooltipConfig !== undefined) finalConfig.tooltip = tooltipConfig;\n \n const scaleConfig = parseJsonProp(scale);\n if (scaleConfig !== undefined) finalConfig.scale = scaleConfig;\n \n const interactionConfig = parseJsonProp(interaction);\n if (interactionConfig !== undefined) finalConfig.interaction = interactionConfig;\n\n const annotationsConfig = parseJsonProp(annotations);\n if (annotationsConfig !== undefined) finalConfig.annotations = annotationsConfig;\n\n const axisConfig = parseJsonProp(axis);\n if (axisConfig !== undefined) finalConfig.axis = axisConfig;\n\n const scrollbarConfig = parseJsonProp(scrollbar);\n if (scrollbarConfig !== undefined) finalConfig.scrollbar = scrollbarConfig;\n\n const sliderConfig = parseJsonProp(slider);\n if (sliderConfig !== undefined) finalConfig.slider = sliderConfig;\n\n \n const themeConfig = parseJsonProp(theme);\n if (themeConfig !== undefined) finalConfig.theme = themeConfig;\n \n const stateConfig = parseJsonProp(state);\n if (stateConfig !== undefined) finalConfig.state = stateConfig;\n\n return <ChartComponent {...finalConfig} />;\n };\n\n BaseChartWrapper.displayName = `withBaseChart(${chartType})`;\n \n return BaseChartWrapper;\n}\n\nexport default withBaseChart;\n","/**\n * AndVLine - 折线图组件\n * 基于 Ant Design Charts Line\n */\nimport React from 'react';\nimport { Line } from '@ant-design/plots';\nimport { withBaseChart } from '../base/BaseChart';\nimport type { AndVLineProps } from '../base/types';\n\n// 默认示例数据(设计器中展示)\nconst DEFAULT_LINE_DATA = [\n { year: '2020', value: 3 },\n { year: '2021', value: 4 },\n { year: '2022', value: 3.5 },\n { year: '2023', value: 5 },\n { year: '2024', value: 4.9 },\n { year: '2025', value: 6 },\n];\n\n// 使用 HOC 包装基础 Line 组件\nconst LineWithBase = withBaseChart<AndVLineProps>(Line, {\n chartType: 'AndVLine',\n defaultHeight: 300,\n defaultData: DEFAULT_LINE_DATA,\n});\n\n/**\n * AndVLine 折线图组件\n * 用于展示数据的连续变化趋势,适用于时间序列分析、数据对比等场景\n */\nexport const AndVLine: React.FC<AndVLineProps> = (props) => {\n const {\n xField = 'year',\n yField = 'value',\n seriesField,\n smooth = false,\n connectNulls = false,\n lineStyle,\n ...baseProps\n } = props;\n\n return (\n <LineWithBase\n {...baseProps}\n xField={xField}\n yField={yField}\n seriesField={seriesField}\n smooth={smooth}\n connectNulls={connectNulls}\n lineStyle={lineStyle}\n />\n );\n};\n\nexport type { AndVLineProps };\nexport default AndVLine;\n","/**\n * AndVColumn - 柱状图组件\n * 基于 Ant Design Charts Column\n */\nimport React from 'react';\nimport { Column } from '@ant-design/plots';\nimport { withBaseChart } from '../base/BaseChart';\nimport type { AndVColumnProps } from '../base/types';\n\n// 默认示例数据(设计器中展示)\nconst DEFAULT_COLUMN_DATA = [\n { category: '一月', value: 38 },\n { category: '二月', value: 52 },\n { category: '三月', value: 61 },\n { category: '四月', value: 45 },\n { category: '五月', value: 48 },\n { category: '六月', value: 58 },\n];\n\n// 使用 HOC 包装基础 Column 组件\nconst ColumnWithBase = withBaseChart<AndVColumnProps>(Column, {\n chartType: 'AndVColumn',\n defaultHeight: 300,\n defaultData: DEFAULT_COLUMN_DATA,\n});\n\n/**\n * AndVColumn 柱状图组件\n * 用于展示分类数据的对比,适用于不同类别之间的数值比较\n */\nexport const AndVColumn: React.FC<AndVColumnProps> = (props) => {\n const {\n xField = 'category',\n yField = 'value',\n seriesField,\n isGroup = false,\n isStack = false,\n columnWidth,\n ...baseProps\n } = props;\n\n const chartProps: Record<string, any> = {\n ...baseProps,\n xField,\n yField,\n };\n\n if (seriesField) chartProps.seriesField = seriesField;\n if (isGroup) chartProps.isGroup = isGroup;\n if (isStack) chartProps.isStack = isStack;\n if (columnWidth) chartProps.columnWidth = columnWidth;\n\n return <ColumnWithBase {...chartProps} />;\n};\n\nexport type { AndVColumnProps };\nexport default AndVColumn;\n","/**\n * AndVPie - 饼图组件\n * 基于 Ant Design Charts Pie\n */\nimport React from 'react';\nimport { Pie } from '@ant-design/plots';\nimport { withBaseChart } from '../base/BaseChart';\nimport type { AndVPieProps } from '../base/types';\n\n// 默认示例数据(设计器中展示)\nconst DEFAULT_PIE_DATA = [\n { type: '分类一', value: 27 },\n { type: '分类二', value: 25 },\n { type: '分类三', value: 18 },\n { type: '分类四', value: 15 },\n { type: '分类五', value: 10 },\n { type: '其他', value: 5 },\n];\n\n// 使用 HOC 包装基础 Pie 组件\nconst PieWithBase = withBaseChart<AndVPieProps>(Pie, {\n chartType: 'AndVPie',\n defaultHeight: 300,\n defaultData: DEFAULT_PIE_DATA,\n});\n\n/**\n * AndVPie 饼图组件\n * 用于展示各分类占比情况,适用于展示部分与整体的关系\n */\nexport const AndVPie: React.FC<AndVPieProps> = (props) => {\n const {\n angleField = 'value',\n colorField = 'type',\n radius = 0.8,\n innerRadius,\n ...baseProps\n } = props;\n\n const chartProps: Record<string, any> = {\n ...baseProps,\n angleField,\n colorField,\n radius,\n };\n\n // 设置内半径时变为环形图\n if (innerRadius !== undefined && innerRadius > 0) {\n chartProps.innerRadius = innerRadius;\n }\n\n return <PieWithBase {...chartProps} />;\n};\n\nexport type { AndVPieProps };\nexport default AndVPie;\n","/**\n * AndVArea - 面积图组件\n * 基于 Ant Design Charts Area\n */\nimport React from 'react';\nimport { Area } from '@ant-design/plots';\nimport { withBaseChart, parseJsonProp } from '../base/BaseChart';\nimport type { AndVAreaProps } from '../base/types';\n\n// 使用 HOC 包装基础 Area 组件\nconst AreaWithBase = withBaseChart<AndVAreaProps>(Area, {\n chartType: 'AndVArea',\n defaultHeight: 300,\n defaultData: [\n { year: '1991', value: 3 },\n { year: '1992', value: 4 },\n { year: '1993', value: 3.5 },\n { year: '1994', value: 5 },\n { year: '1995', value: 4.9 },\n { year: '1996', value: 6 },\n { year: '1997', value: 7 },\n { year: '1998', value: 9 },\n { year: '1999', value: 13 },\n ],\n});\n\n/**\n * AndVArea 面积图组件\n */\nexport const AndVArea: React.FC<AndVAreaProps> = (props) => {\n const {\n // 字段\n xField,\n yField,\n seriesField,\n colorField,\n shapeField,\n sizeField,\n // JSON 配置\n line,\n point,\n // 布尔配置\n stack,\n percent,\n symmetry,\n diff,\n ...baseProps\n } = props;\n\n const chartProps: Record<string, any> = {\n ...baseProps,\n };\n\n // 添加字段配置\n if (xField) chartProps.xField = xField;\n if (yField) chartProps.yField = yField;\n if (seriesField) chartProps.seriesField = seriesField;\n if (colorField) chartProps.colorField = colorField;\n if (shapeField) chartProps.shapeField = shapeField;\n if (sizeField) chartProps.sizeField = sizeField;\n\n // 添加布尔配置\n if (stack !== undefined) chartProps.stack = (stack as any) === true || (stack as any) === 'true';\n if (percent !== undefined) chartProps.percent = (percent as any) === true || (percent as any) === 'true';\n if (symmetry !== undefined) chartProps.symmetry = (symmetry as any) === true || (symmetry as any) === 'true';\n if (diff !== undefined) chartProps.diff = (diff as any) === true || (diff as any) === 'true';\n\n // 解析 JSON 配置\n const lineConfig = parseJsonProp(line);\n if (lineConfig !== undefined) chartProps.line = lineConfig;\n\n const pointConfig = parseJsonProp(point);\n if (pointConfig !== undefined) chartProps.point = pointConfig;\n\n return <AreaWithBase {...chartProps} />;\n};\n\nexport type { AndVAreaProps };\nexport default AndVArea;\n","/**\n * AndVDualAxes - 双轴图组件\n * 基于 Ant Design Charts DualAxes\n */\nimport React from 'react';\nimport { DualAxes } from '@ant-design/plots';\nimport { withBaseChart, parseJsonProp } from '../base/BaseChart';\nimport type { AndVDualAxesProps } from '../base/types';\n\n// 使用 HOC 包装基础 DualAxes 组件\nconst DualAxesWithBase = withBaseChart<AndVDualAxesProps>(DualAxes, {\n chartType: 'AndVDualAxes',\n defaultHeight: 300,\n defaultData: [\n { year: '1991', value: 3, count: 10 },\n { year: '1992', value: 4, count: 4 },\n { year: '1993', value: 3.5, count: 5 },\n { year: '1994', value: 5, count: 5 },\n { year: '1995', value: 4.9, count: 4.9 },\n { year: '1996', value: 6, count: 35 },\n { year: '1997', value: 7, count: 7 },\n { year: '1998', value: 9, count: 1 },\n { year: '1999', value: 13, count: 20 },\n ],\n});\n\n/**\n * AndVDualAxes 双轴图组件\n */\nexport const AndVDualAxes: React.FC<AndVDualAxesProps> = (props) => {\n const {\n // 字段\n xField,\n yField,\n seriesField,\n colorField,\n // JSON 配置\n children,\n ...baseProps\n } = props;\n\n const chartProps: Record<string, any> = {\n ...baseProps,\n };\n\n // 添加字段配置\n console.log('[AndVDualAxes] props:', { xField, yField, children });\n if (xField) chartProps.xField = xField;\n \n // yField 特殊处理:如果是 JSON 字符串则解析,如果是数组则直接使用\n const parsedYField = parseJsonProp(yField);\n if (parsedYField) {\n chartProps.yField = parsedYField;\n } else if (yField) {\n // 兼容直接传字符串的情况,虽然不推荐\n chartProps.yField = yField;\n }\n\n if (seriesField) chartProps.seriesField = seriesField;\n if (colorField) chartProps.colorField = colorField;\n\n // 解析 children 配置\n const childrenConfig = parseJsonProp(children);\n if (childrenConfig !== undefined) chartProps.children = childrenConfig;\n\n return <DualAxesWithBase {...chartProps} />;\n};\n\nexport type { AndVDualAxesProps };\nexport default AndVDualAxes;\n","/**\n * AndVGauge - 仪表盘组件\n * 基于 Ant Design Charts Gauge\n */\nimport React from 'react';\nimport { Gauge } from '@ant-design/plots';\nimport { withBaseChart } from '../base/BaseChart';\nimport type { AndVGaugeProps } from '../base/types';\n\n// 使用 HOC 包装基础 Gauge 组件\nconst GaugeWithBase = withBaseChart<AndVGaugeProps>(Gauge, {\n chartType: 'AndVGauge',\n defaultHeight: 300,\n defaultData: { percent: 0.7 }, // Gauge 默认数据\n});\n\n/**\n * AndVGauge 仪表盘组件\n * 用于展示单个指标的完成度或进度,适用于 KPI 展示\n */\nexport const AndVGauge: React.FC<AndVGaugeProps> = (props) => {\n const {\n ...baseProps\n } = props;\n\n const chartProps: Record<string, any> = {\n ...baseProps,\n };\n\n // Gauge 特有配置\n // 目前官方文档仅列出 data, style, axis 等通用配置,\n // range, indicator 可能已废弃或合并到 style/theme 中,此处移除以避免错误\n\n // DEBUG: 输出传递给 Gauge 的配置\n console.log('[AndVGauge] chartProps:', JSON.stringify(chartProps, null, 2));\n\n return <GaugeWithBase {...chartProps} />;\n};\n\nexport type { AndVGaugeProps };\nexport default AndVGauge;\n","/**\n * AndVLiquid - 水波图组件\n * 基于 Ant Design Charts Liquid\n */\nimport React from 'react';\nimport { Liquid } from '@ant-design/plots';\nimport { withBaseChart } from '../base/BaseChart';\nimport type { AndVLiquidProps } from '../base/types';\n\n// 使用 HOC 包装基础 Liquid 组件\nconst LiquidWithBase = withBaseChart<AndVLiquidProps>(Liquid, {\n chartType: 'AndVLiquid',\n defaultHeight: 300,\n defaultData: 0.25, // Liquid 默认 percent (注意:Liquid 数据直接作为 percent 传递)\n});\n\n/**\n * AndVLiquid 水波图组件\n * 用于展示单个百分比数据的完成度\n */\nexport const AndVLiquid: React.FC<AndVLiquidProps> = (props) => {\n const {\n percent,\n ...baseProps\n } = props;\n\n const chartProps: Record<string, any> = {\n ...baseProps,\n };\n\n // 如果传递了 percent 属性,优先使用它\n // G2 Liquid 支持通过 percent 属性直接设置,也支持通过 data (但通常 percent 更直接)\n if (percent !== undefined) {\n chartProps.percent = percent;\n }\n\n // DEBUG: 输出传递给 Liquid 的配置\n console.log('[AndVLiquid] chartProps:', JSON.stringify(chartProps, null, 2));\n\n return <LiquidWithBase {...chartProps} />;\n};\n\nexport type { AndVLiquidProps };\nexport default AndVLiquid;\n","/**\n * AndVBar - 条形图组件\n * 基于 Ant Design Charts Bar\n */\nimport React from 'react';\nimport { Bar } from '@ant-design/plots';\nimport { withBaseChart, parseJsonProp } from '../base/BaseChart';\nimport type { AndVBarProps } from '../base/types';\n\n// 使用 HOC 包装基础 Bar 组件\nconst BarWithBase = withBaseChart<AndVBarProps>(Bar, {\n chartType: 'AndVBar',\n defaultHeight: 300,\n defaultData: [\n { year: '1951 年', value: 38 },\n { year: '1952 年', value: 52 },\n { year: '1956 年', value: 61 },\n { year: '1957 年', value: 145 },\n { year: '1958 年', value: 48 },\n ],\n});\n\n/**\n * AndVBar 条形图组件\n */\nexport const AndVBar: React.FC<AndVBarProps> = (props) => {\n const {\n // 特有字段\n xField,\n yField,\n seriesField,\n colorField,\n // 布尔配置\n stack,\n group,\n percent,\n // JSON 配置\n conversionTag,\n markBackground,\n ...baseProps\n } = props;\n\n const chartProps: Record<string, any> = {\n ...baseProps,\n };\n\n // 添加字段配置 (如果存在)\n if (xField) chartProps.xField = xField;\n if (yField) chartProps.yField = yField;\n if (seriesField) chartProps.seriesField = seriesField;\n if (colorField) chartProps.colorField = colorField;\n\n // 添加布尔配置\n // 注意:字符串 \"true\"/\"false\" 需要转换,这里假设 BaseChart透传前已经处理?\n // 不,BaseChart只透传 restProps。我们需要手动处理布尔值\n // 简单起见,如果从设计器传过来可能是字符串,AntV可能支持字符串?\n // 安全起见,做个转换\n if (stack !== undefined) chartProps.stack = (stack as any) === true || (stack as any) === 'true';\n if (group !== undefined) chartProps.group = (group as any) === true || (group as any) === 'true';\n if (percent !== undefined) chartProps.percent = (percent as any) === true || (percent as any) === 'true';\n\n // 解析专用 JSON 配置\n const conversionTagConfig = parseJsonProp(conversionTag);\n if (conversionTagConfig !== undefined) chartProps.conversionTag = conversionTagConfig;\n\n const markBackgroundConfig = parseJsonProp(markBackground);\n if (markBackgroundConfig !== undefined) chartProps.markBackground = markBackgroundConfig;\n\n // DEBUG\n console.log('[AndVBar] chartProps:', JSON.stringify(chartProps, null, 2));\n\n return <BarWithBase {...chartProps} />;\n};\n\nexport type { AndVBarProps };\nexport default AndVBar;\n"],"names":["rootMap","cacheMap","initialized","initReactMount","getOrCreateCache","doc","cache","createCache","clearCssCache","mountReactComponent","el","Component","props","customTheme","forMainDocument","skipUnmount","existingRoot","key","e","root","createRoot","iframeHead","iframeDoc","isIframeValid","container","cacheDoc","algorithm","_a","theme","renderComponent","componentProps","jsx","StyleProvider","ConfigProvider","zhCN","isEditing","finalProps","error","newProps","cleanupAllMounts","parseArrayNotation","dataSetName","match","parseNestedPath","path","result","parts","part","arrayAccessMatch","list","remaining","m","index","getNestedValue","obj","current","segment","setNestedValue","value","i","nextSegment","child","v","idx","lastSegment","getDataSetStoreKey","sessionId","dataSet","getValidateStoreKey","initialState","useAndStore","create","subscribeWithSelector","immer","set","get","name","field","append","state","baseName","fieldPath","isMerge","mergeIfNeeded","existing","slice","arr","element","valueToSet","newElement","newArr","target","seg","nextSeg","lastSeg","ds","item","data","command","queue","first","componentId","dataSetField","message","useStore","config","setValue","newValue","useStoreByName","setDataSetBatch","useAddCommand","usePopCommand","useStoreData","dataSetKey","chunk","s","storeKey","getDataSet","useMemo","useItemStore","setDataSet","getState","dataSets","prop","payload","useCommandsStore","addCommand","popCommand","getCommands","clearCommands","actionName","arg","watchCommands","_store","context","commandsToExecute","executedCommands","func","createWatchCommands","getModuleExports","store","moduleExports","parseAction","actionString","contextValue","contextProps","argsString","args","trimmedArg","parseChangeAction","changeAction","parseClickAction","clickAction","parseQueryAction","queryAction","createCommand","_extends","source","_inheritsLoose","subClass","superClass","_setPrototypeOf","_getPrototypeOf","o","p","_isNativeReflectConstruct","_construct","Parent","Class","a","Constructor","instance","_isNativeFunction","fn","_wrapNativeSuper","_cache","Wrapper","formatRegExp","warning","type","errors","convertFieldsError","fields","format","template","_len","_key","len","str","x","isNativeStringType","isEmptyValue","asyncParallelArray","callback","results","total","arrLength","count","asyncSerialArray","next","original","flattenObjArr","objArr","ret","k","AsyncValidationError","_Error","_this","asyncMap","option","_pending","resolve","reject","flattenArr","firstFields","objArrKeys","objArrLength","pending","isErrorObj","getValue","complementError","rule","oe","fieldValue","deepMerge","required$1","options","whitespace","urlReg","getUrlRegex","word","b","v4","v6seg","v6","v46Exact","v4exact","v6exact","ip","protocol","auth","ipv4","ipv6","host","domain","tld","port","regex","pattern$2","types","type$1","custom","ruleType","range","min","max","spRegexp","val","num","ENUM$1","enumerable$1","pattern$1","_pattern","rules","string","validate","method","number","_boolean","regexp","integer","floatFn","array","object","ENUM","enumerable","pattern","date","dateObject","required","any","validators","newMessages","cloned","messages","Schema","descriptor","_proto","_messages","source_","oc","_this2","complete","add","_errors","messages$1","series","keys","z","r","errorFields","doIt","deep","addFullField","schema","cb","errorList","filledErrors","fieldsSchema","paredFieldsSchema","fieldSchema","fieldSchemaList","errs","finalErrors","res","messageIndex","validator","stringToRegPattern","processValidationRules","re","FIELD","validateWithSchema","onSuccess","onError","useFieldValidation","id","develop","setValidateResult","getProps","setProps","validateStoreKey","validateErrorMsg","storeProps","validateActionKey","validateActionTrigger","applyResult","useCallback","help","msg","processedRules","validateStatus","useEffect","DEFAULT_SKIP_KEYS","mergeStoreProps","restProps","skipKeys","out","dictValueEquals","findDictOptionByValue","opt","globalConfig","setCoreConfig","getCoreConfig","request","finalConfig","upload","file","getDictOptions","dictCode","getAccessToken","req","url","params","useApiService","urlOrConfig","requestConfig","coreRequest","post","coreGetDictOptions","uploadConfig","coreUpload","coreGetAccessToken","isConfigured","useDictOptions","setOptions","useState","loading","setLoading","setError","cancelled","err","useRemoteOptions","labelKey","valueKey","immediate","responseField","paramsJson","stableParams","transformData","load","response","dataArray","toNumber","toString","toDate","timestamp","formatCurrency","currency","safeCurrency","formatNumber","formatPercent","precision","safePrecision","formatCompact","notation","formatDate","formatDateCustom","year","month","day","hours","minutes","seconds","formatTimestamp","formatRelativeTime","diff","days","months","years","formatDuration","secs","formatAge","birthDate","birth","today","age","monthDiff","formatFileSize","bytes","binary","sizes","formatPhone","phone","country","formatPhoneMask","formatEmailMask","email","username","formatIdCard","idCard","mask","formatBankCard","cardNumber","start","end","middleLength","middle","formatUsernameMask","formatTruncate","text","maxLength","suffix","safeMaxLength","formatCapitalize","formatArray","delimiter","formatGender","formatStatus","statusMap","formatStripHtml","formatByType","formatType","TOKEN_MAP","AVAILABLE_TOKENS","COMMON_TOKENS","isTokenName","useResolveTokenColor","color","token","tokenKey","resolveTokenColorWithToken","AndButton","iconName","onClick","children","mergedProps","baseProps","IconComponent","Icons","handleClick","displayText","iconPosition","iconPlacement","_clickAction","otherBtnProps","Button","SKIP_PROPS_KEYS","VALIDATE_DEBOUNCE_MS","filterEmptyToken","mergeBasePropsWithStore","base","isDisabled","AndInputInner","onChange","propValue","styles","validateOnChange","validateOnBlur","_focusAction","_blurAction","_pressEnterAction","_bordered","_addonAfter","_addonBefore","lastChangeValueRef","useRef","validateTimerRef","storeValue","displayValue","applyValidateResult","handleChange","handleBlur","valueToValidate","filteredToken","themeConfig","inputEl","jsxs","Fragment","Input","AndInput","React","AndInputNumber","pressEnterAction","stepAction","defaultValue","handleAction","actionConfig","actionType","handlePressEnter","handleStep","info","mergedRestProps","addonBefore","addonAfter","style","otherProps","inputNode","InputNumber","clsx","Space","TextArea","AndInputArea","Password","AndInputPassword","Search","AndInputSearch","searchAction","onSearch","handleSearch","AndSelect","enableDict","dictType","optionsCfg","propOptions","_showArrow","_remoteUrl","_searchAction","_selectAction","_deselectAction","_dictCode","_dropdownMatchSelectWidth","effectiveOptionsCfg","dictOptions","dictLoading","remoteOptions","remoteLoading","isLoading","rawDisplayValue","finalOptions","matched","filterOption","input","Select","AndSwitch","propChecked","defaultChecked","displayChecked","checked","Switch","AndDatePicker","valueFormat","parseDateValue","dayjs","parsed","rawValue","dateString","stringValue","formatted","raw","DatePicker","AndTimePicker","_validateOnBlur","parseTimeValue","time","timeString","status","TimePicker","RangePicker","AndRangePicker","parseRangeValue","startDayjs","endDayjs","dates","dateStrings","_b","AndRadio","buttonStyle","optionType","propDirection","Radio","AndCheckbox","multiple","onChangeMultiple","propValues","direction","displayValues","handleSingleChange","handleMultipleChange","checkedValues","Checkbox","AndRate","Rate","AndSlider","Slider","transformToCascaderOptions","nodes","cfg","currentLevel","codeKey","childrenKey","maxLevel","node","stringToArray","findPathInOptions","targetValue","findPath","nodeValue","currentPath","is1DimensionalArray","is2DimensionalArray","AndCascade","setRemoteOptions","setIsLoading","hasValidRemoteCfg","sourceArray","transformed","selectedOptions","processedValue","Cascader","AndTreeSelect","treeData","classNames","labelList","extra","treeSelectElement","TreeSelect","AndUpload","buttonText","propFileList","uploadUrl","maxSize","action","fileListToSrcArray","f","srcArrayToFileList","srcs","viewRes","toDisplayUrl","src","displayUrl","toMutableFileList","copy","pendingFileList","setPendingFileList","fileListFromStore","fileList","beforeUpload","customRequest","onProgress","srcArray","hasUploading","getPreviewUrl","previewUrl","_","p1","p2","isImageFile","ext","previewState","setPreviewState","handlePreview","cleanUrl","imageFiles","urls","useCustomUpload","merged","effectiveButtonText","effectiveListType","maxCount","currentCount","reachMaxCount","beforeUploadWithMaxCount","Upload","PlusOutlined","UploadOutlined","Image","open","AndAutoComplete","selectAction","onSelect","internalOptions","setInternalOptions","searchTimeoutRef","apiGet","searchText","queryApi","keyWordParamName","fixedParams","mappedOptions","handleSelect","AutoComplete","AndSimpleForm","submitAction","resetAction","showSubmit","showReset","submitText","resetText","onFinish","onReset","form","Form","handleFinish","values","handleReset","AndFormItem","parseJson","fallback","AndTransfer","propDataSource","propTargetKeys","propSelectedKeys","disabled","showSearch","showSelectAll","oneWay","propPagination","propTitles","propActions","propLocale","selectChangeAction","scrollAction","onSelectChange","onScroll","propStyles","propToken","titles","actions","locale","pagination","storeTargetKeys","storeDataSource","dataSource","targetKeys","selectedKeys","nextTargetKeys","moveKeys","handleSelectChange","sourceSelectedKeys","targetSelectedKeys","handleScroll","transferElement","Transfer","trimmed","getIconComponent","AntdIcons","parseOptions","AndSegmented","block","size","vertical","shape","currentValue","strValue","segmentedElement","Segmented","useAutoScrollY","containerRef","scrollY","hasPagination","calculatedScrollY","setCalculatedScrollY","isAutoHeight","rafRef","useLayoutEffect","calculateHeight","containerHeight","occupiedHeight","titleSlot","footerSlot","tableTitle","thead","paginationEl","marginTop","marginBottom","antTableWrapper","bodyHeight","finalHeight","timer","resizeObserver","mutationObserver","dictOptionsCache","getCachedDictOptions","DictCell","renderDictCell","col","renderImageCell","width","height","imgWidth","imgHeight","imageList","renderMoneyCell","moneyValue","currencySymbol","showCommaSeparator","minDecimalPlace","maxDecimalPlace","numberFormatOptions","formattedMoney","renderDateCell","formattedDate","parsedDate","renderArrayCell","separator","applyColumnRendering","processedCol","_record","_index","WIDTH_MIN","WIDTH_STEP","SIZE_OPTIONS","toColumnSettingValue","rowIndexVisible","items","scrollX","widthMap","acc","applyColumnSettingValue","defaultItems","defaultRowIndexVisible","defaultScrollX","defaultSize","order","visibleMap","fixedMap","keyToDefault","seen","def","MODAL_WIDTH","MODAL_MAX_HEIGHT","ColumnSettingModal","position","columnItems","defaultColumnItems","scrollXProp","sizeProp","onSave","onClose","rowIndexVisibleLocal","setRowIndexVisibleLocal","setItems","scrollXLocal","setScrollXLocal","sizeLocal","setSizeLocal","draggedIndex","setDraggedIndex","flushSave","buildValue","rowIdx","scroll","sz","resetItems","toggleVisible","prev","setFixed","fixed","setWidth","adjustWidth","delta","nextVal","moveItem","fromIndex","toIndex","removed","handleRowIndexVisibleChange","handleScrollXChange","handleSizeChange","onDragStart","onDragOver","onDragEnd","modalStyle","top","left","Modal","widthNum","isAuto","MenuOutlined","MinusOutlined","LeftOutlined","RightOutlined","AndTable","columns","operateColumns","sampleData","operationColumnVisible","selectRowEnable","singleSelectMode","rowKeyField","displayRowIndex","emptyText","bordered","sticky","autoFillHeight","showTitle","showSummary","showFooter","renderTitle","renderSummary","renderFooter","_columnSettingOpenKey","_columnSettingsKey","selectedRowKeys","setSelectedRowKeys","columnSettingPosition","setColumnSettingPosition","columnsArray","operateColumnsArray","columnSettingOpen","COLUMN_SETTING_MODAL_WIDTH","header","rect","savedColumnSettings","storeData","tableData","tableToken","hasTableToken","tableThemeConfig","paginationChunk","storePagination","paginationConfig","paginationProps","paginationRest","showSizeChanger","showQuickJumper","simple","defaultPageSize","pageSizeOptionsRaw","pageSizeOptions","n","page","pageSize","handleActionClick","record","w","effectiveRowIndexVisible","effectiveColumnItems","effectiveScrollX","effectiveSize","hasColumnSetting","tableColumns","__","keyToCol","colWidth","Tooltip","handleColumnSettingClose","handleColumnSettingSave","rowSelection","rowKeys","selectedRows","handleRowClick","newSelectedKeys","rowClassName","onRow","className","tableProps","rawScroll","autoScrollY","finalScroll","summarySlot","otherChildren","slotType","finalTitle","finalSummary","tableElement","Table","Flex","bg","hoverBg","textColor","linkColor","linkHoverColor","Text","Typography","AndText","content","fontSize","formatValue","fallbackDisplay","effectiveDataSet","effectiveDataSetField","dataChunk","formatOptions","isEmpty","dictTransformed","displayContent","effectiveFormatType","effectiveColor","resolvedColor","customStyle","fs","formattedFontSize","Title","AndTitle","level","Paragraph","AndParagraph","parseTabs","tabs","AndTabs","propItems","propActiveKey","defaultActiveKey","renderTabContent","parsedTabs","computedItems","internalActiveKey","setInternalActiveKey","activeKey","Tabs","AndTree","checkAction","expandAction","dragEndAction","dragEnterAction","dragLeaveAction","dragOverAction","dragStartAction","dropAction","rightClickAction","loadAction","onCheck","onExpand","onDragEnter","onDragLeave","onDrop","onRightClick","onLoad","propTreeData","keySelected","keyChecked","keyExpanded","storeTreeData","storeSelectedKeys","storeCheckedKeys","storeExpandedKeys","checkedKeys","expandedKeys","selectedKeysArr","handleCheck","checkedKeysArr","handleExpand","expandedKeysArr","handleDragEnd","handleDragEnter","handleDragLeave","handleDragOver","handleDragStart","handleDrop","handleRightClick","handleLoad","loadedKeys","treeElement","Tree","AndTimeline","remoteUrl","mode","storeItems","newItem","finalMode","Timeline","AndSteps","propCurrent","orientation","labelPlacement","titlePlacement","storeCurrent","computedOrientation","computedTitlePlacement","hasToken","stepsElement","Steps","AndStatistics","Statistic","AndStatisticsCountdown","Timer","Countdown","DOT_POSITION_TO_PLACEMENT","parseSlides","slides","AndCarousel","dotPosition","dotPlacement","afterChange","renderSlideContent","computedDotPlacement","parsedSlides","handleAfterChange","slideContents","slide","Carousel","toDisplaySrc","DEFAULT_FALLBACK","AndImage","objectFit","propSrc","computedSrc","imageProps","PreviewGroup","AndImageGroup","rawItems","AndAvatar","icon","finalSrc","computedIcon","finalIcon","IconComp","storeToken","combinedToken","numVal","avatarElement","Avatar","DEFAULT_COLOR_MAP","AndTag","autoColor","propColorMap","propColor","_closeAction","colorMap","autoTagColor","valueStr","finalColor","Tag","AndPagination","showSizeChangeAction","onShowSizeChange","propPageSize","propTotal","paginationField","emptyPagination","handleShowSizeChange","Pagination","showTotalProp","AndBreadCrumb","Breadcrumb","cssPropertiesToString","PaginationWrapper","arrowStyle","arrowIconPrev","arrowIconNext","contentRef","offset","setOffset","hasOverflow","setHasOverflow","contentSize","setContentSize","containerSize","setContainerSize","isHorizontal","checkOverflow","cSize","cntSize","overflow","observer","prevDisabled","nextDisabled","handlePrev","step","handleNext","maxOffset","_c","_d","_e","_f","PrevIcon","UpOutlined","NextIcon","DownOutlined","ScrollWrapper","AndMenu","openChangeAction","deselectAction","onOpenChange","onDeselect","propOpenKeys","defaultOpenKeys","expandIcon","overflowedIndicator","openKeysDataSet","openKeysDataSetField","inlineCollapsed","overflowStrategy","paginationArrowStyle","paginationArrowIconPrev","paginationArrowIconNext","_expandTrigger","emptyObject","safeStoreValue","storeDerivedItems","finalItems","finalSelectedKeys","finalOpenKeys","openKeysDataSetKey","legacyStoreOpenKeys","effectiveItems","process","effectiveSelectedKeys","effectiveOpenKeys","currentState","handleOpenChange","handleDeselect","inlineProps","motionProps","processedArrowIconPrev","processedArrowIconNext","effectiveOverflowedIndicator","reactId","useId","menuScopeId","subMenuTitleCss","rootConfig","cssRules","scope","cssStr","menuElement","Menu","renderMenuWithOverflow","menuContent","wrappedContent","AndCalendar","Calendar","AndBadge","showZero","overflowCount","dot","title","_dataValue","effectiveCount","antdToken","Badge","AndBadgeRibbon","placement","effectiveText","parseItems","parseColumns","parseGutter","gutter","AndMasonry","fresh","layoutChangeAction","onLayoutChange","itemRender","parsedItems","parsedColumns","parsedGutter","handleLayoutChange","sortInfo","displayItems","defaultItemRender","_layoutChangeAction","Masonry","AndAlert","closeAction","propTitle","propDescription","closeText","closable","computedTitle","computedClosable","handleClose","Alert","AndModal","okAction","cancelAction","onOk","onCancel","propOpen","storeOpen","displayOpen","handleOk","handleCancel","AndDrawer","Drawer","AndResult","Result","parseTabList","tabList","AndCard","cover","tabBarExtraContent","propTabList","propActiveTabKey","defaultActiveTabKey","tabChangeAction","onTabChange","showHeader","showCover","showActions","activeTabKey","handleTabChange","extraSlot","coverSlot","actionsSlot","actionsFromChildren","childProps","cardElement","Card","AndDivider","Divider","convertToMenuItems","AndDropdown","propOnOpenChange","hasChildren","menuProps","triggerElement","Dropdown","AndRow","Row","AndColumn","Col","AndContainer","AndQRCode","computedValue","QRCode","createIconFromName","AndSplitter","propPanels","lazy","draggerIcon","collapsibleIcon","resizeAction","resizeEndAction","onResize","onResizeEnd","renderPanelContent","panels","resolvedDraggerIcon","resolvedCollapsibleIcon","handleResize","handleResizeEnd","renderPanels","panelConfig","Splitter","panel","_ignoredLayout","cleanRestProps","splitterElement","AndSplitterPanel","collapsible","resizable","AndIterator","renderItem","renderEmpty","containerStyle","pageDisabled","showLessItems","setCurrent","setPageSize","allItems","handlePageChange","SPIN_KEYFRAMES","SVG_COLOR_STYLE","AndIcon","_id","_sessionId","_develop","svgRaw","spin","rotate","twoToneColor","svg","mergedStyle","wrapperStyle","AndProductCategory","propProducts","storeProducts","products","product","tag","PlaceholderBox","description","InboxOutlined","AndDynamicContainer","componentName","storePropsKey","componentResolver","placeholder","placeholderFlexDirection","baseKey","dataSetSlice","storeCN","storeP","effectiveComponentName","defaultPlaceholder","isRow","ApiOutlined","effectiveResolver","Suspense","Spin","AndWatermark","zIndex","image","gap","inherit","font","rest","fontConfig","watermarkElement","Watermark","parseJsonProp","parseBoolProp","withBaseChart","ChartComponent","chartType","defaultHeight","defaultData","BaseChartWrapper","_style","_className","propData","common","_propHeight","_propWidth","_propAutoFit","_propPadding","legend","label","tooltip","animate","scale","interaction","annotations","axis","scrollbar","slider","events","chartRef","chartData","dsData","handleChartReady","chart","eventsConfig","eventName","ev","commonConfig","titleConfig","legendConfig","labelConfig","tooltipConfig","scaleConfig","interactionConfig","annotationsConfig","axisConfig","scrollbarConfig","sliderConfig","stateConfig","DEFAULT_LINE_DATA","LineWithBase","Line","AndVLine","xField","yField","seriesField","smooth","connectNulls","lineStyle","DEFAULT_COLUMN_DATA","ColumnWithBase","Column","AndVColumn","isGroup","isStack","columnWidth","chartProps","DEFAULT_PIE_DATA","PieWithBase","Pie","AndVPie","angleField","colorField","radius","innerRadius","AreaWithBase","Area","AndVArea","shapeField","sizeField","line","point","stack","percent","symmetry","lineConfig","pointConfig","DualAxesWithBase","DualAxes","AndVDualAxes","parsedYField","childrenConfig","GaugeWithBase","Gauge","AndVGauge","LiquidWithBase","Liquid","AndVLiquid","BarWithBase","Bar","AndVBar","group","conversionTag","markBackground","conversionTagConfig","markBackgroundConfig"],"mappings":"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","x_google_ignoreList":[6]}
|