@kp-ui/lowcode-pc 1.0.0-alpha.4 → 1.0.0-alpha.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_virtual/_plugin-vue_export-helper.js +11 -0
- package/_virtual/_plugin-vue_export-helper.js.map +1 -0
- package/assets/styles/style.css +260 -256
- package/core/src/components/DragBtn.vue.js +8 -0
- package/core/src/components/DragBtn.vue.js.map +1 -0
- package/core/src/components/DragBtn.vue2.js +33 -0
- package/core/src/components/DragBtn.vue2.js.map +1 -0
- package/core/src/components/common/RenderWidgetList.vue.js +8 -0
- package/core/src/components/common/RenderWidgetList.vue.js.map +1 -0
- package/core/src/components/common/RenderWidgetList.vue2.js +94 -0
- package/core/src/components/common/RenderWidgetList.vue2.js.map +1 -0
- package/core/src/components/common/desginer/WidgetWrapper.vue.js +8 -0
- package/core/src/components/common/desginer/WidgetWrapper.vue.js.map +1 -0
- package/core/src/components/common/desginer/WidgetWrapper.vue2.js +67 -0
- package/core/src/components/common/desginer/WidgetWrapper.vue2.js.map +1 -0
- package/core/src/components/common/render/Debugger.vue.js +8 -0
- package/core/src/components/common/render/Debugger.vue.js.map +1 -0
- package/core/src/components/common/render/Debugger.vue2.js +73 -0
- package/core/src/components/common/render/Debugger.vue2.js.map +1 -0
- package/core/src/components/common/render/LowcodeRenderProvider.vue.js +51 -0
- package/core/src/components/common/render/LowcodeRenderProvider.vue.js.map +1 -0
- package/core/src/components/common/render/LowcodeRenderProvider.vue2.js +5 -0
- package/core/src/components/common/render/LowcodeRenderProvider.vue2.js.map +1 -0
- package/core/src/components/common/render/RenderForm.vue.js +69 -0
- package/core/src/components/common/render/RenderForm.vue.js.map +1 -0
- package/core/src/components/common/render/RenderForm.vue2.js +5 -0
- package/core/src/components/common/render/RenderForm.vue2.js.map +1 -0
- package/core/src/components/common/render/useFormContext.js +261 -0
- package/core/src/components/common/render/useFormContext.js.map +1 -0
- package/core/src/components/contextMenu/WidgetContextMenu.vue.js +8 -0
- package/core/src/components/contextMenu/WidgetContextMenu.vue.js.map +1 -0
- package/core/src/components/contextMenu/WidgetContextMenu.vue2.js +125 -0
- package/core/src/components/contextMenu/WidgetContextMenu.vue2.js.map +1 -0
- package/core/src/components/contextMenu/useWidgetContextMenu.js +165 -0
- package/core/src/components/contextMenu/useWidgetContextMenu.js.map +1 -0
- package/core/src/constants/LayoutTypeEnum.js +10 -0
- package/core/src/constants/LayoutTypeEnum.js.map +1 -0
- package/core/src/constants/WidgetTypeEnum.js +63 -0
- package/core/src/constants/WidgetTypeEnum.js.map +1 -0
- package/core/src/constants/index.js +9 -0
- package/core/src/constants/index.js.map +1 -0
- package/core/src/hooks/useAppRef.js +56 -0
- package/core/src/hooks/useAppRef.js.map +1 -0
- package/core/src/hooks/useDataHttp.js +65 -0
- package/core/src/hooks/useDataHttp.js.map +1 -0
- package/core/src/hooks/useDesigner.js +56 -0
- package/core/src/hooks/useDesigner.js.map +1 -0
- package/core/src/hooks/useField.js +570 -0
- package/core/src/hooks/useField.js.map +1 -0
- package/core/src/hooks/useFormValidation.js +112 -0
- package/core/src/hooks/useFormValidation.js.map +1 -0
- package/core/src/hooks/useLowcode.js +94 -0
- package/core/src/hooks/useLowcode.js.map +1 -0
- package/core/src/hooks/useWidget.js +15 -0
- package/core/src/hooks/useWidget.js.map +1 -0
- package/{assets/en-US.mjs → core/src/lang/en-US.js} +2 -1
- package/core/src/lang/en-US.js.map +1 -0
- package/{assets/en-US_extension.mjs → core/src/lang/en-US_extension.js} +1 -1
- package/core/src/lang/en-US_extension.js.map +1 -0
- package/{assets/en-US_render.mjs → core/src/lang/en-US_render.js} +1 -1
- package/core/src/lang/en-US_render.js.map +1 -0
- package/{assets/zh-CN.mjs → core/src/lang/zh-CN.js} +3 -1
- package/core/src/lang/zh-CN.js.map +1 -0
- package/{assets/zh-CN_extension.mjs → core/src/lang/zh-CN_extension.js} +1 -1
- package/core/src/lang/zh-CN_extension.js.map +1 -0
- package/{assets/zh-CN_render.mjs → core/src/lang/zh-CN_render.js} +1 -1
- package/core/src/lang/zh-CN_render.js.map +1 -0
- package/core/src/utils/event-bus.js +8 -0
- package/core/src/utils/event-bus.js.map +1 -0
- package/core/src/utils/format.js +46 -0
- package/core/src/utils/format.js.map +1 -0
- package/core/src/utils/getFileName.js +10 -0
- package/core/src/utils/getFileName.js.map +1 -0
- package/core/src/utils/i18n.js +33 -0
- package/core/src/utils/i18n.js.map +1 -0
- package/core/src/utils/smart-vue-i18n/index.js +84 -0
- package/core/src/utils/smart-vue-i18n/index.js.map +1 -0
- package/core/src/utils/useEmitter.js +95 -0
- package/core/src/utils/useEmitter.js.map +1 -0
- package/core/src/utils/util.js +155 -0
- package/core/src/utils/util.js.map +1 -0
- package/core/src/utils/validators.js +114 -0
- package/core/src/utils/validators.js.map +1 -0
- package/install.js +27 -0
- package/install.js.map +1 -0
- package/package.json +2 -2
- package/src/components/desginer/form-widget/container-widget/data-table-widget.vue.js +8 -0
- package/src/components/desginer/form-widget/container-widget/data-table-widget.vue.js.map +1 -0
- package/{assets/data-table-widget.mjs → src/components/desginer/form-widget/container-widget/data-table-widget.vue2.js} +5 -4
- package/src/components/desginer/form-widget/container-widget/data-table-widget.vue2.js.map +1 -0
- package/src/components/desginer/form-widget/container-widget/grid-col-widget.vue.js +8 -0
- package/src/components/desginer/form-widget/container-widget/grid-col-widget.vue.js.map +1 -0
- package/{assets/grid-col-widget.mjs → src/components/desginer/form-widget/container-widget/grid-col-widget.vue2.js} +8 -15
- package/src/components/desginer/form-widget/container-widget/grid-col-widget.vue2.js.map +1 -0
- package/src/components/desginer/form-widget/container-widget/grid-sub-form-widget.vue.js +8 -0
- package/src/components/desginer/form-widget/container-widget/grid-sub-form-widget.vue.js.map +1 -0
- package/{assets/grid-sub-form-widget.mjs → src/components/desginer/form-widget/container-widget/grid-sub-form-widget.vue2.js} +4 -4
- package/src/components/desginer/form-widget/container-widget/grid-sub-form-widget.vue2.js.map +1 -0
- package/src/components/desginer/form-widget/container-widget/grid-sub-form-widget.vue3.js +2 -0
- package/src/components/desginer/form-widget/container-widget/grid-sub-form-widget.vue3.js.map +1 -0
- package/src/components/desginer/form-widget/container-widget/grid-widget.vue.js +8 -0
- package/src/components/desginer/form-widget/container-widget/grid-widget.vue.js.map +1 -0
- package/{assets/grid-widget.mjs → src/components/desginer/form-widget/container-widget/grid-widget.vue2.js} +5 -5
- package/src/components/desginer/form-widget/container-widget/grid-widget.vue2.js.map +1 -0
- package/src/components/desginer/form-widget/container-widget/index.js +19 -0
- package/src/components/desginer/form-widget/container-widget/index.js.map +1 -0
- package/src/components/desginer/form-widget/container-widget/tab-widget.vue.js +8 -0
- package/src/components/desginer/form-widget/container-widget/tab-widget.vue.js.map +1 -0
- package/{assets/tab-widget.mjs → src/components/desginer/form-widget/container-widget/tab-widget.vue2.js} +5 -4
- package/src/components/desginer/form-widget/container-widget/tab-widget.vue2.js.map +1 -0
- package/src/components/desginer/form-widget/container-widget/useTableWidget.js +297 -0
- package/src/components/desginer/form-widget/container-widget/useTableWidget.js.map +1 -0
- package/src/components/desginer/form-widget/container-widget/vf-box-widget.vue.js +8 -0
- package/src/components/desginer/form-widget/container-widget/vf-box-widget.vue.js.map +1 -0
- package/{assets/vf-box-widget.mjs → src/components/desginer/form-widget/container-widget/vf-box-widget.vue2.js} +5 -4
- package/src/components/desginer/form-widget/container-widget/vf-box-widget.vue2.js.map +1 -0
- package/src/components/desginer/form-widget/container-widget/vf-collapse-widget.vue.js +9 -0
- package/src/components/desginer/form-widget/container-widget/vf-collapse-widget.vue.js.map +1 -0
- package/{assets/vf-collapse-widget.mjs → src/components/desginer/form-widget/container-widget/vf-collapse-widget.vue2.js} +5 -4
- package/src/components/desginer/form-widget/container-widget/vf-collapse-widget.vue2.js.map +1 -0
- package/src/components/desginer/form-widget/container-widget/vf-dialog-widget.vue.js +8 -0
- package/src/components/desginer/form-widget/container-widget/vf-dialog-widget.vue.js.map +1 -0
- package/{assets/vf-dialog-widget.mjs → src/components/desginer/form-widget/container-widget/vf-dialog-widget.vue2.js} +13 -4
- package/src/components/desginer/form-widget/container-widget/vf-dialog-widget.vue2.js.map +1 -0
- package/src/components/desginer/form-widget/index.vue.js +2 -0
- package/src/components/desginer/form-widget/index.vue.js.map +1 -0
- package/src/components/desginer/widget-panel/advanced/bpmn-editor.js +30 -0
- package/src/components/desginer/widget-panel/advanced/bpmn-editor.js.map +1 -0
- package/src/components/desginer/widget-panel/advanced/cascader.js +68 -0
- package/src/components/desginer/widget-panel/advanced/cascader.js.map +1 -0
- package/src/components/desginer/widget-panel/advanced/code-editor.js +44 -0
- package/src/components/desginer/widget-panel/advanced/code-editor.js.map +1 -0
- package/src/components/desginer/widget-panel/advanced/data-table.js +102 -0
- package/src/components/desginer/widget-panel/advanced/data-table.js.map +1 -0
- package/src/components/desginer/widget-panel/advanced/diy-compontent.js +30 -0
- package/src/components/desginer/widget-panel/advanced/diy-compontent.js.map +1 -0
- package/src/components/desginer/widget-panel/advanced/file-upload.js +43 -0
- package/src/components/desginer/widget-panel/advanced/file-upload.js.map +1 -0
- package/src/components/desginer/widget-panel/advanced/rich-editor.js +40 -0
- package/src/components/desginer/widget-panel/advanced/rich-editor.js.map +1 -0
- package/src/components/desginer/widget-panel/advanced/tree-select.js +69 -0
- package/src/components/desginer/widget-panel/advanced/tree-select.js.map +1 -0
- package/src/components/desginer/widget-panel/advanced/tree.js +47 -0
- package/src/components/desginer/widget-panel/advanced/tree.js.map +1 -0
- package/src/components/desginer/widget-panel/advancedFieldsEnums.js +24 -0
- package/src/components/desginer/widget-panel/advancedFieldsEnums.js.map +1 -0
- package/src/components/desginer/widget-panel/basicFields/button.js +37 -0
- package/src/components/desginer/widget-panel/basicFields/button.js.map +1 -0
- package/src/components/desginer/widget-panel/basicFields/buttonList.js +45 -0
- package/src/components/desginer/widget-panel/basicFields/buttonList.js.map +1 -0
- package/src/components/desginer/widget-panel/basicFields/checkbox.js +64 -0
- package/src/components/desginer/widget-panel/basicFields/checkbox.js.map +1 -0
- package/src/components/desginer/widget-panel/basicFields/color.js +38 -0
- package/src/components/desginer/widget-panel/basicFields/color.js.map +1 -0
- package/src/components/desginer/widget-panel/basicFields/date.js +55 -0
- package/src/components/desginer/widget-panel/basicFields/date.js.map +1 -0
- package/src/components/desginer/widget-panel/basicFields/dateRange.js +55 -0
- package/src/components/desginer/widget-panel/basicFields/dateRange.js.map +1 -0
- package/src/components/desginer/widget-panel/basicFields/divider.js +31 -0
- package/src/components/desginer/widget-panel/basicFields/divider.js.map +1 -0
- package/src/components/desginer/widget-panel/basicFields/dropdown.js +42 -0
- package/src/components/desginer/widget-panel/basicFields/dropdown.js.map +1 -0
- package/src/components/desginer/widget-panel/basicFields/htmlText.js +29 -0
- package/src/components/desginer/widget-panel/basicFields/htmlText.js.map +1 -0
- package/src/components/desginer/widget-panel/basicFields/input.js +56 -0
- package/src/components/desginer/widget-panel/basicFields/input.js.map +1 -0
- package/src/components/desginer/widget-panel/basicFields/number.js +50 -0
- package/src/components/desginer/widget-panel/basicFields/number.js.map +1 -0
- package/src/components/desginer/widget-panel/basicFields/radio.js +70 -0
- package/src/components/desginer/widget-panel/basicFields/radio.js.map +1 -0
- package/src/components/desginer/widget-panel/basicFields/rate.js +45 -0
- package/src/components/desginer/widget-panel/basicFields/rate.js.map +1 -0
- package/src/components/desginer/widget-panel/basicFields/select.js +77 -0
- package/src/components/desginer/widget-panel/basicFields/select.js.map +1 -0
- package/src/components/desginer/widget-panel/basicFields/slider.js +47 -0
- package/src/components/desginer/widget-panel/basicFields/slider.js.map +1 -0
- package/src/components/desginer/widget-panel/basicFields/staticText.js +29 -0
- package/src/components/desginer/widget-panel/basicFields/staticText.js.map +1 -0
- package/src/components/desginer/widget-panel/basicFields/switch.js +41 -0
- package/src/components/desginer/widget-panel/basicFields/switch.js.map +1 -0
- package/src/components/desginer/widget-panel/basicFields/textarea.js +53 -0
- package/src/components/desginer/widget-panel/basicFields/textarea.js.map +1 -0
- package/src/components/desginer/widget-panel/basicFields/time.js +51 -0
- package/src/components/desginer/widget-panel/basicFields/time.js.map +1 -0
- package/src/components/desginer/widget-panel/basicFields/timeRange.js +52 -0
- package/src/components/desginer/widget-panel/basicFields/timeRange.js.map +1 -0
- package/src/components/desginer/widget-panel/basicFieldsEnums.js +46 -0
- package/src/components/desginer/widget-panel/basicFieldsEnums.js.map +1 -0
- package/src/components/desginer/widget-panel/containers/grid-col.js +29 -0
- package/src/components/desginer/widget-panel/containers/grid-col.js.map +1 -0
- package/src/components/desginer/widget-panel/containers/grid-sub-form.js +22 -0
- package/src/components/desginer/widget-panel/containers/grid-sub-form.js.map +1 -0
- package/src/components/desginer/widget-panel/containers/grid.js +26 -0
- package/src/components/desginer/widget-panel/containers/grid.js.map +1 -0
- package/src/components/desginer/widget-panel/containers/index.js +19 -0
- package/{index.js.map → src/components/desginer/widget-panel/containers/index.js.map} +1 -1
- package/src/components/desginer/widget-panel/containers/tab-pane.js +23 -0
- package/src/components/desginer/widget-panel/containers/tab-pane.js.map +1 -0
- package/src/components/desginer/widget-panel/containers/tab.js +27 -0
- package/src/components/desginer/widget-panel/containers/tab.js.map +1 -0
- package/src/components/desginer/widget-panel/containers/vf-box.js +47 -0
- package/src/components/desginer/widget-panel/containers/vf-box.js.map +1 -0
- package/src/components/desginer/widget-panel/containers/vf-collapse.js +25 -0
- package/src/components/desginer/widget-panel/containers/vf-collapse.js.map +1 -0
- package/src/components/desginer/widget-panel/containers/vf-dialog.js +55 -0
- package/src/components/desginer/widget-panel/containers/vf-dialog.js.map +1 -0
- package/src/components/desginer/widget-panel/widgetsConfig.js +7 -0
- package/src/components/desginer/widget-panel/widgetsConfig.js.map +1 -0
- package/src/components/field-widget/bpmn-editor-widget.vue.js +8 -0
- package/src/components/field-widget/bpmn-editor-widget.vue.js.map +1 -0
- package/{assets/bpmn-editor-widget.mjs → src/components/field-widget/bpmn-editor-widget.vue2.js} +5 -6
- package/src/components/field-widget/bpmn-editor-widget.vue2.js.map +1 -0
- package/src/components/field-widget/button-list-widget.vue.js +8 -0
- package/src/components/field-widget/button-list-widget.vue.js.map +1 -0
- package/{assets/button-list-widget.mjs → src/components/field-widget/button-list-widget.vue2.js} +13 -5
- package/src/components/field-widget/button-list-widget.vue2.js.map +1 -0
- package/src/components/field-widget/button-widget.vue.js +8 -0
- package/src/components/field-widget/button-widget.vue.js.map +1 -0
- package/{assets/button-widget.mjs → src/components/field-widget/button-widget.vue2.js} +4 -4
- package/src/components/field-widget/button-widget.vue2.js.map +1 -0
- package/src/components/field-widget/cascader-widget.vue.js +5 -0
- package/src/components/field-widget/cascader-widget.vue.js.map +1 -0
- package/{assets/cascader-widget.mjs → src/components/field-widget/cascader-widget.vue2.js} +6 -4
- package/src/components/field-widget/cascader-widget.vue2.js.map +1 -0
- package/src/components/field-widget/checkbox-widget.vue.js +5 -0
- package/src/components/field-widget/checkbox-widget.vue.js.map +1 -0
- package/{assets/checkbox-widget.mjs → src/components/field-widget/checkbox-widget.vue2.js} +9 -10
- package/src/components/field-widget/checkbox-widget.vue2.js.map +1 -0
- package/src/components/field-widget/code-editor-widget.vue.js +5 -0
- package/src/components/field-widget/code-editor-widget.vue.js.map +1 -0
- package/{assets/code-editor-widget.mjs → src/components/field-widget/code-editor-widget.vue2.js} +4 -4
- package/src/components/field-widget/code-editor-widget.vue2.js.map +1 -0
- package/src/components/field-widget/color-widget.vue.js +8 -0
- package/src/components/field-widget/color-widget.vue.js.map +1 -0
- package/{assets/color-widget.mjs → src/components/field-widget/color-widget.vue2.js} +5 -5
- package/src/components/field-widget/color-widget.vue2.js.map +1 -0
- package/src/components/field-widget/date-range-widget.vue.js +8 -0
- package/src/components/field-widget/date-range-widget.vue.js.map +1 -0
- package/{assets/date-range-widget.mjs → src/components/field-widget/date-range-widget.vue2.js} +5 -5
- package/src/components/field-widget/date-range-widget.vue2.js.map +1 -0
- package/src/components/field-widget/date-widget.vue.js +8 -0
- package/src/components/field-widget/date-widget.vue.js.map +1 -0
- package/{assets/date-widget.mjs → src/components/field-widget/date-widget.vue2.js} +5 -5
- package/src/components/field-widget/date-widget.vue2.js.map +1 -0
- package/src/components/field-widget/divider-widget.vue.js +5 -0
- package/src/components/field-widget/divider-widget.vue.js.map +1 -0
- package/{assets/divider-widget.mjs → src/components/field-widget/divider-widget.vue2.js} +3 -3
- package/src/components/field-widget/divider-widget.vue2.js.map +1 -0
- package/src/components/field-widget/diy-compontent-widget.vue.js +5 -0
- package/src/components/field-widget/diy-compontent-widget.vue.js.map +1 -0
- package/{assets/diy-compontent-widget.mjs → src/components/field-widget/diy-compontent-widget.vue2.js} +4 -4
- package/src/components/field-widget/diy-compontent-widget.vue2.js.map +1 -0
- package/src/components/field-widget/dropdown-widget.vue.js +8 -0
- package/src/components/field-widget/dropdown-widget.vue.js.map +1 -0
- package/{assets/dropdown-widget.mjs → src/components/field-widget/dropdown-widget.vue2.js} +4 -5
- package/src/components/field-widget/dropdown-widget.vue2.js.map +1 -0
- package/src/components/field-widget/file-upload-widget.vue.js +8 -0
- package/src/components/field-widget/file-upload-widget.vue.js.map +1 -0
- package/{assets/file-upload-widget.mjs → src/components/field-widget/file-upload-widget.vue2.js} +5 -5
- package/src/components/field-widget/file-upload-widget.vue2.js.map +1 -0
- package/src/components/field-widget/form-item-wrapper.vue.js +8 -0
- package/src/components/field-widget/form-item-wrapper.vue.js.map +1 -0
- package/{assets/form-item-wrapper.mjs → src/components/field-widget/form-item-wrapper.vue2.js} +3 -4
- package/src/components/field-widget/form-item-wrapper.vue2.js.map +1 -0
- package/{assets/useSelect.mjs → src/components/field-widget/hooks/useSelect.js} +3 -3
- package/src/components/field-widget/hooks/useSelect.js.map +1 -0
- package/src/components/field-widget/html-text-widget.vue.js +8 -0
- package/src/components/field-widget/html-text-widget.vue.js.map +1 -0
- package/{assets/html-text-widget.mjs → src/components/field-widget/html-text-widget.vue2.js} +4 -4
- package/src/components/field-widget/html-text-widget.vue2.js.map +1 -0
- package/src/components/field-widget/html-text-widget.vue3.js +2 -0
- package/src/components/field-widget/html-text-widget.vue3.js.map +1 -0
- package/src/components/field-widget/index.js +12 -0
- package/src/components/field-widget/index.js.map +1 -0
- package/src/components/field-widget/input-widget.vue.js +8 -0
- package/src/components/field-widget/input-widget.vue.js.map +1 -0
- package/{assets/input-widget.mjs → src/components/field-widget/input-widget.vue2.js} +5 -5
- package/src/components/field-widget/input-widget.vue2.js.map +1 -0
- package/src/components/field-widget/number-widget.vue.js +5 -0
- package/src/components/field-widget/number-widget.vue.js.map +1 -0
- package/{assets/number-widget.mjs → src/components/field-widget/number-widget.vue2.js} +4 -4
- package/src/components/field-widget/number-widget.vue2.js.map +1 -0
- package/src/components/field-widget/radio-widget.vue.js +8 -0
- package/src/components/field-widget/radio-widget.vue.js.map +1 -0
- package/{assets/radio-widget.mjs → src/components/field-widget/radio-widget.vue2.js} +6 -6
- package/src/components/field-widget/radio-widget.vue2.js.map +1 -0
- package/src/components/field-widget/rate-widget.vue.js +8 -0
- package/src/components/field-widget/rate-widget.vue.js.map +1 -0
- package/{assets/rate-widget.mjs → src/components/field-widget/rate-widget.vue2.js} +5 -5
- package/src/components/field-widget/rate-widget.vue2.js.map +1 -0
- package/src/components/field-widget/rich-editor-widget.vue.js +8 -0
- package/src/components/field-widget/rich-editor-widget.vue.js.map +1 -0
- package/{assets/rich-editor-widget.mjs → src/components/field-widget/rich-editor-widget.vue2.js} +5 -6
- package/src/components/field-widget/rich-editor-widget.vue2.js.map +1 -0
- package/src/components/field-widget/select-widget.vue.js +8 -0
- package/src/components/field-widget/select-widget.vue.js.map +1 -0
- package/{assets/select-widget.mjs → src/components/field-widget/select-widget.vue2.js} +5 -6
- package/src/components/field-widget/select-widget.vue2.js.map +1 -0
- package/src/components/field-widget/slider-widget.vue.js +5 -0
- package/src/components/field-widget/slider-widget.vue.js.map +1 -0
- package/{assets/slider-widget.mjs → src/components/field-widget/slider-widget.vue2.js} +4 -3
- package/src/components/field-widget/slider-widget.vue2.js.map +1 -0
- package/src/components/field-widget/static-text-widget.vue.js +5 -0
- package/src/components/field-widget/static-text-widget.vue.js.map +1 -0
- package/{assets/static-text-widget.mjs → src/components/field-widget/static-text-widget.vue2.js} +3 -2
- package/src/components/field-widget/static-text-widget.vue2.js.map +1 -0
- package/src/components/field-widget/switch-widget.vue.js +8 -0
- package/src/components/field-widget/switch-widget.vue.js.map +1 -0
- package/{assets/switch-widget.mjs → src/components/field-widget/switch-widget.vue2.js} +5 -5
- package/src/components/field-widget/switch-widget.vue2.js.map +1 -0
- package/src/components/field-widget/textarea-widget.vue.js +8 -0
- package/src/components/field-widget/textarea-widget.vue.js.map +1 -0
- package/{assets/textarea-widget.mjs → src/components/field-widget/textarea-widget.vue2.js} +5 -6
- package/src/components/field-widget/textarea-widget.vue2.js.map +1 -0
- package/src/components/field-widget/time-range-widget.vue.js +8 -0
- package/src/components/field-widget/time-range-widget.vue.js.map +1 -0
- package/{assets/time-range-widget.mjs → src/components/field-widget/time-range-widget.vue2.js} +5 -5
- package/src/components/field-widget/time-range-widget.vue2.js.map +1 -0
- package/src/components/field-widget/time-widget.vue.js +8 -0
- package/src/components/field-widget/time-widget.vue.js.map +1 -0
- package/{assets/time-widget.mjs → src/components/field-widget/time-widget.vue2.js} +5 -5
- package/src/components/field-widget/time-widget.vue2.js.map +1 -0
- package/src/components/field-widget/tree-widget.vue.js +8 -0
- package/src/components/field-widget/tree-widget.vue.js.map +1 -0
- package/{assets/tree-widget.mjs → src/components/field-widget/tree-widget.vue2.js} +6 -6
- package/src/components/field-widget/tree-widget.vue2.js.map +1 -0
- package/src/components/field-widget/treeSelect-widget.vue.js +5 -0
- package/src/components/field-widget/treeSelect-widget.vue.js.map +1 -0
- package/{assets/treeSelect-widget.mjs → src/components/field-widget/treeSelect-widget.vue2.js} +6 -5
- package/src/components/field-widget/treeSelect-widget.vue2.js.map +1 -0
- package/{assets/useField.mjs → src/components/field-widget/useField.js} +7 -3
- package/src/components/field-widget/useField.js.map +1 -0
- package/src/components/field-widget/vue-render-widget.vue.js +5 -0
- package/src/components/field-widget/vue-render-widget.vue.js.map +1 -0
- package/{assets/vue-render-widget.mjs → src/components/field-widget/vue-render-widget.vue2.js} +4 -4
- package/src/components/field-widget/vue-render-widget.vue2.js.map +1 -0
- package/src/components/form-render/RenderWigetList.vue.js +5 -0
- package/src/components/form-render/RenderWigetList.vue.js.map +1 -0
- package/src/components/form-render/RenderWigetList.vue2.js +46 -0
- package/src/components/form-render/RenderWigetList.vue2.js.map +1 -0
- package/src/components/form-render/container-items/data-table-widget.vue.js +8 -0
- package/src/components/form-render/container-items/data-table-widget.vue.js.map +1 -0
- package/src/components/form-render/container-items/data-table-widget.vue2.js +119 -0
- package/src/components/form-render/container-items/data-table-widget.vue2.js.map +1 -0
- package/src/components/form-render/container-items/grid-col-widget.vue.js +8 -0
- package/src/components/form-render/container-items/grid-col-widget.vue.js.map +1 -0
- package/src/components/form-render/container-items/grid-col-widget.vue2.js +56 -0
- package/src/components/form-render/container-items/grid-col-widget.vue2.js.map +1 -0
- package/src/components/form-render/container-items/grid-sub-form-widget.vue.js +8 -0
- package/src/components/form-render/container-items/grid-sub-form-widget.vue.js.map +1 -0
- package/src/components/form-render/container-items/grid-sub-form-widget.vue2.js +263 -0
- package/src/components/form-render/container-items/grid-sub-form-widget.vue2.js.map +1 -0
- package/src/components/form-render/container-items/grid-widget.vue.js +8 -0
- package/src/components/form-render/container-items/grid-widget.vue.js.map +1 -0
- package/src/components/form-render/container-items/grid-widget.vue2.js +61 -0
- package/src/components/form-render/container-items/grid-widget.vue2.js.map +1 -0
- package/src/components/form-render/container-items/grid-widget.vue3.js +2 -0
- package/src/components/form-render/container-items/grid-widget.vue3.js.map +1 -0
- package/src/components/form-render/container-items/index.js +21 -0
- package/src/components/form-render/container-items/index.js.map +1 -0
- package/src/components/form-render/container-items/tab-widget.vue.js +8 -0
- package/src/components/form-render/container-items/tab-widget.vue.js.map +1 -0
- package/src/components/form-render/container-items/tab-widget.vue2.js +66 -0
- package/src/components/form-render/container-items/tab-widget.vue2.js.map +1 -0
- package/src/components/form-render/container-items/vf-box-widget.vue.js +8 -0
- package/src/components/form-render/container-items/vf-box-widget.vue.js.map +1 -0
- package/src/components/form-render/container-items/vf-box-widget.vue2.js +59 -0
- package/src/components/form-render/container-items/vf-box-widget.vue2.js.map +1 -0
- package/src/components/form-render/container-items/vf-collapse-widget.vue.js +9 -0
- package/src/components/form-render/container-items/vf-collapse-widget.vue.js.map +1 -0
- package/src/components/form-render/container-items/vf-collapse-widget.vue2.js +70 -0
- package/src/components/form-render/container-items/vf-collapse-widget.vue2.js.map +1 -0
- package/src/components/public/ActionButtonListRender.vue.js +53 -0
- package/src/components/public/ActionButtonListRender.vue.js.map +1 -0
- package/src/components/public/ActionButtonListRender.vue2.js +130 -0
- package/src/components/public/ActionButtonListRender.vue2.js.map +1 -0
- package/src/components/public/ConfigView/CustomPageRender.vue.js +74 -0
- package/src/components/public/ConfigView/CustomPageRender.vue.js.map +1 -0
- package/src/components/public/ConfigView/CustomPageRender.vue2.js +5 -0
- package/src/components/public/ConfigView/CustomPageRender.vue2.js.map +1 -0
- package/src/components/public/CustomerModal/CustomerModal.vue.js +5 -0
- package/src/components/public/CustomerModal/CustomerModal.vue.js.map +1 -0
- package/{assets/CustomerModal.mjs → src/components/public/CustomerModal/CustomerModal.vue2.js} +5 -2
- package/src/components/public/CustomerModal/CustomerModal.vue2.js.map +1 -0
- package/{assets/useCustomerModal.mjs → src/components/public/CustomerModal/useCustomerModal.js} +2 -2
- package/src/components/public/CustomerModal/useCustomerModal.js.map +1 -0
- package/src/components/public/DynamicDialog.vue.js +227 -0
- package/src/components/public/DynamicDialog.vue.js.map +1 -0
- package/src/components/public/DynamicDialog.vue3.js +6 -0
- package/src/components/public/DynamicDialog.vue3.js.map +1 -0
- package/src/components/render/index.vue.js +8 -0
- package/src/components/render/index.vue.js.map +1 -0
- package/src/components/render/index.vue2.js +107 -0
- package/src/components/render/index.vue2.js.map +1 -0
- package/src/components/render/useRenderWidget.js +11 -0
- package/src/components/render/useRenderWidget.js.map +1 -0
- package/src/hooks/useLowcode.js +113 -0
- package/src/hooks/useLowcode.js.map +1 -0
- package/stats.html +1 -1
- package/assets/CustomerModal.mjs.map +0 -1
- package/assets/bpmn-editor-widget.mjs.map +0 -1
- package/assets/button-list-widget.mjs.map +0 -1
- package/assets/button-widget.mjs.map +0 -1
- package/assets/cascader-widget.mjs.map +0 -1
- package/assets/checkbox-widget.mjs.map +0 -1
- package/assets/code-editor-widget.mjs.map +0 -1
- package/assets/color-widget.mjs.map +0 -1
- package/assets/data-table-widget.mjs.map +0 -1
- package/assets/date-range-widget.mjs.map +0 -1
- package/assets/date-widget.mjs.map +0 -1
- package/assets/divider-widget.mjs.map +0 -1
- package/assets/diy-compontent-widget.mjs.map +0 -1
- package/assets/dropdown-widget.mjs.map +0 -1
- package/assets/en-US.mjs.map +0 -1
- package/assets/en-US_extension.mjs.map +0 -1
- package/assets/en-US_render.mjs.map +0 -1
- package/assets/file-upload-widget.mjs.map +0 -1
- package/assets/form-item-wrapper.mjs.map +0 -1
- package/assets/grid-col-widget.mjs.map +0 -1
- package/assets/grid-sub-form-widget.mjs.map +0 -1
- package/assets/grid-widget.mjs.map +0 -1
- package/assets/html-text-widget.mjs.map +0 -1
- package/assets/input-widget.mjs.map +0 -1
- package/assets/install.mjs +0 -5590
- package/assets/install.mjs.map +0 -1
- package/assets/number-widget.mjs.map +0 -1
- package/assets/radio-widget.mjs.map +0 -1
- package/assets/rate-widget.mjs.map +0 -1
- package/assets/rich-editor-widget.mjs.map +0 -1
- package/assets/select-widget.mjs.map +0 -1
- package/assets/slider-widget.mjs.map +0 -1
- package/assets/static-text-widget.mjs.map +0 -1
- package/assets/switch-widget.mjs.map +0 -1
- package/assets/tab-widget.mjs.map +0 -1
- package/assets/textarea-widget.mjs.map +0 -1
- package/assets/time-range-widget.mjs.map +0 -1
- package/assets/time-widget.mjs.map +0 -1
- package/assets/tree-widget.mjs.map +0 -1
- package/assets/treeSelect-widget.mjs.map +0 -1
- package/assets/useCustomerModal.mjs.map +0 -1
- package/assets/useField.mjs.map +0 -1
- package/assets/useSelect.mjs.map +0 -1
- package/assets/vf-box-widget.mjs.map +0 -1
- package/assets/vf-collapse-widget.mjs.map +0 -1
- package/assets/vf-dialog-widget.mjs.map +0 -1
- package/assets/vue-render-widget.mjs.map +0 -1
- package/assets/zh-CN.mjs.map +0 -1
- package/assets/zh-CN_extension.mjs.map +0 -1
- package/assets/zh-CN_render.mjs.map +0 -1
- package/index.js +0 -12
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sources":["../../../../../core/src/utils/format.ts"],"sourcesContent":["import { isArray } from 'lodash-es';\n\nfunction validateDate(dateStr: string | number | Date): boolean {\n const date = new Date(typeof dateStr === 'string' ? Date.parse(dateStr) : dateStr);\n return date instanceof Date && !isNaN(date.getTime());\n}\n\nexport function formatDate1(date: string | number | Date): string {\n if (!validateDate(date)) {\n return String(date);\n }\n const d = new Date(typeof date === 'string' ? Date.parse(date) : date); //转换成Date\n const y = d.getFullYear();\n let m: string | number = d.getMonth() + 1;\n m = m < 10 ? '0' + m : m;\n let day: string | number = d.getDate();\n day = day < 10 ? '0' + day : day;\n return y + '-' + m + '-' + day;\n}\n\nexport function formatDate2(date: string | number | Date): string {\n if (!validateDate(date)) {\n return String(date);\n }\n const d = new Date(typeof date === 'string' ? Date.parse(date) : date); //转换成Date\n const y = d.getFullYear();\n let m: string | number = d.getMonth() + 1;\n m = m < 10 ? '0' + m : m;\n let day: string | number = d.getDate();\n day = day < 10 ? '0' + day : day;\n return y + '/' + m + '/' + day;\n}\n\nexport function formatDate3(date: string | number | Date): string {\n if (!validateDate(date)) {\n return String(date);\n }\n const d = new Date(typeof date === 'string' ? Date.parse(date) : date); //转换成Date\n const y = d.getFullYear();\n let m: string | number = d.getMonth() + 1;\n m = m < 10 ? '0' + m : m;\n let day: string | number = d.getDate();\n day = day < 10 ? '0' + day : day;\n return y + '年' + m + '月' + day + '日';\n}\n\nexport function formatDate4(date: string | number | Date): string {\n if (!validateDate(date)) {\n return String(date);\n }\n const d = new Date(typeof date === 'string' ? Date.parse(date) : date); //转换成Date\n return d.toLocaleString();\n}\n\nexport function formatDate5(date: string | number | Date): string {\n if (!validateDate(date)) {\n return String(date);\n }\n const d = new Date(typeof date === 'string' ? Date.parse(date) : date); //转换成Date\n return d.toLocaleString('chinese', { hour12: false });\n}\n\n// ###,###,###,##0.######\nexport function formatNumber1(v: number): string | number {\n if (typeof v !== 'number') {\n return v;\n }\n\n const parts = v.toString().split('.');\n const length = parts[1]?.length || 0;\n let formatted: string;\n switch (length) {\n case 0:\n formatted = v.toFixed(0);\n break;\n case 1:\n formatted = v.toFixed(1);\n break;\n case 2:\n formatted = v.toFixed(2);\n break;\n case 3:\n formatted = v.toFixed(3);\n break;\n case 4:\n formatted = v.toFixed(4);\n break;\n case 5:\n formatted = v.toFixed(5);\n break;\n default:\n formatted = v.toFixed(6);\n }\n const res = formatted.replace(/\\d+/, function (n) {\n // 先提取整数部分\n return n.replace(/(\\d)(?=(\\d{3})+$)/g, function ($1) {\n return $1 + ',';\n });\n });\n return res;\n}\n\n//###,###,###,##0.00####\nexport function formatNumber2(v: number): string | number {\n if (typeof v !== 'number') {\n return v;\n }\n\n const parts = v.toString().split('.');\n const length = parts[1]?.length || 0;\n let formatted: string;\n switch (length) {\n case 0:\n case 1:\n case 2:\n formatted = v.toFixed(2);\n break;\n case 3:\n formatted = v.toFixed(3);\n break;\n case 4:\n formatted = v.toFixed(4);\n break;\n case 5:\n formatted = v.toFixed(5);\n break;\n default:\n formatted = v.toFixed(6);\n }\n\n const res = formatted.replace(/\\d+/, function (n) {\n // 先提取整数部分\n return n.replace(/(\\d)(?=(\\d{3})+$)/g, function ($1) {\n return $1 + ',';\n });\n });\n return res;\n}\n\n// ###,###,###,##0.000000\nexport function formatNumber3(v: number): string | number {\n if (typeof v !== 'number') {\n return v;\n }\n\n const formatted = v.toFixed(6);\n const res = formatted.replace(/\\d+/, function (n) {\n // 先提取整数部分\n return n.replace(/(\\d)(?=(\\d{3})+$)/g, function ($1) {\n return $1 + ',';\n });\n });\n return res;\n}\n\n// ###,###,###,##0.000\nexport function formatNumber4(v: number): string | number {\n if (typeof v !== 'number') {\n return v;\n }\n\n const formatted = v.toFixed(3);\n const res = formatted.replace(/\\d+/, function (n) {\n // 先提取整数部分\n return n.replace(/(\\d)(?=(\\d{3})+$)/g, function ($1) {\n return $1 + ',';\n });\n });\n return res;\n}\n\n// ###,###,###,##0.00\nexport function formatNumber5(v: number): string | number {\n if (typeof v !== 'number') {\n return v;\n }\n\n const formatted = v.toFixed(2);\n const res = formatted.replace(/\\d+/, function (n) {\n // 先提取整数部分\n return n.replace(/(\\d)(?=(\\d{3})+$)/g, function ($1) {\n return $1 + ',';\n });\n });\n return res;\n}\n\n// ###,###,###,##0\nexport function formatNumber6(v: number): string | number {\n if (typeof v !== 'number') {\n return v;\n }\n\n const formatted = v.toFixed(0);\n const res = formatted.replace(/\\d+/, function (n) {\n // 先提取整数部分\n return n.replace(/(\\d)(?=(\\d{3})+$)/g, function ($1) {\n return $1 + ',';\n });\n });\n return res;\n}\n\n// ###,##0.00##%\nexport function formatNumber7(v: number): string | number {\n if (typeof v !== 'number') {\n return v;\n }\n\n const parts = v.toString().split('.');\n const length = parts[1]?.length || 0;\n let multiplied = v * 100;\n let formatted: string;\n switch (length) {\n case 0:\n case 1:\n case 2:\n formatted = multiplied.toFixed(2);\n break;\n case 3:\n formatted = multiplied.toFixed(3);\n break;\n default:\n formatted = multiplied.toFixed(4);\n }\n\n const res = formatted.replace(/\\d+/, function (n) {\n // 先提取整数部分\n return n.replace(/(\\d)(?=(\\d{3})+$)/g, function ($1) {\n return $1 + ',';\n });\n });\n return res + '%';\n}\n\ninterface FieldNames {\n label: string;\n value: string;\n children: string;\n}\n\ninterface TreeItem {\n [key: string]: unknown;\n}\n\n/**\n * 将Cascader转义为汉字\n * @param arr 数据数组\n * @param codeList 代码列表\n * @param fieldNames 字段名称映射\n * @param emblem 拼接符号\n * @returns\n */\nexport const formateCascaderCode = (\n arr: TreeItem[] = [],\n codeList: string[] | string[][] | undefined,\n fieldNames: FieldNames = { label: 'label', value: 'value', children: 'children' },\n emblem = '/'\n): string | undefined => {\n if (!codeList || codeList.length === 0) return;\n if (isArray(codeList[0])) {\n const res2 = (codeList as string[][]).map(item =>\n getTreeName(arr, item, fieldNames).join(emblem)\n );\n return res2.join(',');\n } else {\n const res = getTreeName(arr, codeList as string[], fieldNames);\n return res.join(emblem);\n }\n};\n\nconst getTreeName = (\n list: TreeItem[] = [],\n val: string[] = [],\n fieldNames: FieldNames = { label: 'label', value: 'value', children: 'children' }\n): string[] => {\n const nameList: string[] = [];\n list.forEach(item => {\n if (val.length === 0) return;\n if (item[fieldNames.value] === val[0]) {\n nameList.push(item[fieldNames.label] as string);\n const children = item[fieldNames.children];\n if (isArray(children)) {\n const res = getTreeName(children as TreeItem[], val.slice(1), fieldNames);\n nameList.push(...res);\n }\n }\n });\n return nameList;\n};\n\n/**\n * 将tree转义为汉字\n * @param arr 值数组\n * @param codeList 代码列表\n * @param fieldNames 字段名称映射\n * @param emblem 拼接符号\n * @returns\n */\nexport const formateTreeToName = (\n arr: string[] = [],\n codeList: TreeItem[] | undefined,\n fieldNames: FieldNames = { label: 'label', value: 'value', children: 'children' },\n emblem = ','\n): string | undefined => {\n if (!codeList || codeList.length === 0) return;\n const str = arr.reduce<TreeItem[]>((t, v) => {\n const res = getListName(v, codeList, fieldNames);\n if (res) {\n t = [...t, res];\n }\n return t;\n }, []);\n return str.map(item => item[fieldNames.label] as string).join(emblem);\n};\n\nconst getListName = (\n val: string,\n list: TreeItem[],\n fieldNames: FieldNames\n): TreeItem | undefined => {\n let res: TreeItem | undefined;\n list.forEach(it1 => {\n if (it1[fieldNames.value] === val) {\n res = it1;\n return;\n }\n const childrenList = (it1[fieldNames.children] as TreeItem[]) || [];\n if (childrenList.length) {\n const found = getListName(val, childrenList, fieldNames);\n if (found) {\n res = found;\n }\n }\n });\n return res;\n};\n\n/**\n * 格式化尺寸,支持数字、px、%\n * @param value 尺寸值\n * @param defaultSize 默认尺寸\n * @returns 格式化后的尺寸字符串\n */\nexport function formatSize(value: string | number | undefined | null, defaultSize = ''): string {\n if (value === undefined || value === null || value === '') {\n return defaultSize;\n }\n const strValue = String(value);\n if (strValue.endsWith('px') || strValue.endsWith('%')) {\n return strValue;\n }\n if (!isNaN(Number(strValue))) {\n return `${strValue}px`;\n }\n return strValue;\n}\n"],"names":[],"mappings":";AA6PO,MAAM,sBAAsB,CAC/B,MAAkB,CAAA,GAClB,UACA,aAAyB,EAAE,OAAO,SAAS,OAAO,SAAS,UAAU,WAAA,GACrE,SAAS,QACY;AACrB,MAAI,CAAC,YAAY,SAAS,WAAW,EAAG;AACxC,MAAI,QAAQ,SAAS,CAAC,CAAC,GAAG;AACtB,UAAM,OAAQ,SAAwB;AAAA,MAAI,UACtC,YAAY,KAAK,MAAM,UAAU,EAAE,KAAK,MAAM;AAAA,IAAA;AAElD,WAAO,KAAK,KAAK,GAAG;AAAA,EACxB,OAAO;AACH,UAAM,MAAM,YAAY,KAAK,UAAsB,UAAU;AAC7D,WAAO,IAAI,KAAK,MAAM;AAAA,EAC1B;AACJ;AAEA,MAAM,cAAc,CAChB,OAAmB,CAAA,GACnB,MAAgB,CAAA,GAChB,aAAyB,EAAE,OAAO,SAAS,OAAO,SAAS,UAAU,iBAC1D;AACX,QAAM,WAAqB,CAAA;AAC3B,OAAK,QAAQ,CAAA,SAAQ;AACjB,QAAI,IAAI,WAAW,EAAG;AACtB,QAAI,KAAK,WAAW,KAAK,MAAM,IAAI,CAAC,GAAG;AACnC,eAAS,KAAK,KAAK,WAAW,KAAK,CAAW;AAC9C,YAAM,WAAW,KAAK,WAAW,QAAQ;AACzC,UAAI,QAAQ,QAAQ,GAAG;AACnB,cAAM,MAAM,YAAY,UAAwB,IAAI,MAAM,CAAC,GAAG,UAAU;AACxE,iBAAS,KAAK,GAAG,GAAG;AAAA,MACxB;AAAA,IACJ;AAAA,EACJ,CAAC;AACD,SAAO;AACX;AAuDO,SAAS,WAAW,OAA2C,cAAc,IAAY;AAC5F,MAAI,UAAU,UAAa,UAAU,QAAQ,UAAU,IAAI;AACvD,WAAO;AAAA,EACX;AACA,QAAM,WAAW,OAAO,KAAK;AAC7B,MAAI,SAAS,SAAS,IAAI,KAAK,SAAS,SAAS,GAAG,GAAG;AACnD,WAAO;AAAA,EACX;AACA,MAAI,CAAC,MAAM,OAAO,QAAQ,CAAC,GAAG;AAC1B,WAAO,GAAG,QAAQ;AAAA,EACtB;AACA,SAAO;AACX;"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
function getFileName(path) {
|
|
2
|
+
const normalizedPath = path.replace(/\\/g, "/");
|
|
3
|
+
const filenameWithExt = normalizedPath.split("/").pop() || "";
|
|
4
|
+
const lastDotIndex = filenameWithExt.lastIndexOf(".");
|
|
5
|
+
return lastDotIndex === -1 ? filenameWithExt : filenameWithExt.substring(0, lastDotIndex);
|
|
6
|
+
}
|
|
7
|
+
export {
|
|
8
|
+
getFileName
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=getFileName.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getFileName.js","sources":["../../../../../core/src/utils/getFileName.ts"],"sourcesContent":["export function getFileName(path: string): string {\n // 处理Windows路径分隔符\n const normalizedPath = path.replace(/\\\\/g, '/');\n // 获取带扩展名的文件名\n const filenameWithExt = normalizedPath.split('/').pop() || '';\n // 分离文件名和扩展名\n const lastDotIndex = filenameWithExt.lastIndexOf('.');\n return lastDotIndex === -1 ? filenameWithExt : filenameWithExt.substring(0, lastDotIndex);\n}\n"],"names":[],"mappings":"AAAO,SAAS,YAAY,MAAsB;AAE9C,QAAM,iBAAiB,KAAK,QAAQ,OAAO,GAAG;AAE9C,QAAM,kBAAkB,eAAe,MAAM,GAAG,EAAE,SAAS;AAE3D,QAAM,eAAe,gBAAgB,YAAY,GAAG;AACpD,SAAO,iBAAiB,KAAK,kBAAkB,gBAAgB,UAAU,GAAG,YAAY;AAC5F;"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { mapActions, mapState } from "pinia";
|
|
2
|
+
import { createI18n } from "./smart-vue-i18n/index.js";
|
|
3
|
+
import { useLocaleStore } from "@kp-ui/i18n";
|
|
4
|
+
const i18n = createI18n();
|
|
5
|
+
({
|
|
6
|
+
computed: {
|
|
7
|
+
...mapState(useLocaleStore, ["getLocale"])
|
|
8
|
+
},
|
|
9
|
+
methods: {
|
|
10
|
+
...mapActions(useLocaleStore, ["setLocale"])
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
function useI18n() {
|
|
14
|
+
const i18nt = (key, obj) => {
|
|
15
|
+
return i18n.$st(key, obj);
|
|
16
|
+
};
|
|
17
|
+
const i18n2t = (key1, key2) => {
|
|
18
|
+
return i18n.$st2(key1, key2);
|
|
19
|
+
};
|
|
20
|
+
const initLocale = (locale) => {
|
|
21
|
+
i18n.setLang(locale);
|
|
22
|
+
};
|
|
23
|
+
return {
|
|
24
|
+
i18nt,
|
|
25
|
+
i18n2t,
|
|
26
|
+
initLocale
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export {
|
|
30
|
+
i18n,
|
|
31
|
+
useI18n
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=i18n.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n.js","sources":["../../../../../core/src/utils/i18n.ts"],"sourcesContent":["import { mapActions, mapState } from 'pinia';\nimport { createI18n } from './smart-vue-i18n';\nimport { useLocaleStore } from '@kp-ui/i18n';\n\nconst i18n = createI18n({\n locale: 'zh-CN'\n});\n\nexport const translate = function (key: string): string {\n return i18n.$st(key);\n};\n\nexport const setLangMessages = (langName: string, messages: any) => {\n i18n.setLangMessages(langName, messages);\n};\n\nexport default {\n computed: {\n ...mapState(useLocaleStore, ['getLocale'])\n },\n methods: {\n ...mapActions(useLocaleStore, ['setLocale']),\n async changeLocale(langName: string) {\n await i18n.setLang(langName);\n },\n i18nt(key: string): string {\n return i18n.$st(key);\n },\n /* 如果key1不存在,则查找key2 */\n i18n2t(key1: string, key2: string): string {\n return i18n.$st2(key1, key2);\n }\n }\n};\n\nexport function useI18n() {\n const i18nt = (key: string, obj?: Record<string, any>): string => {\n return i18n.$st(key, obj);\n };\n const i18n2t = (key1: string, key2: string): string => {\n return i18n.$st2(key1, key2);\n };\n\n const initLocale = (locale: string) => {\n i18n.setLang(locale);\n };\n\n return {\n i18nt,\n i18n2t,\n initLocale\n };\n}\n\nexport { i18n };\n"],"names":[],"mappings":";;;AAIA,MAAM,OAAO,WAEZ;AAAA,CAUc;AAAA,EACX,UAAU;AAAA,IACN,GAAG,SAAS,gBAAgB,CAAC,WAAW,CAAC;AAAA,EAAA;AAAA,EAE7C,SAAS;AAAA,IACL,GAAG,WAAW,gBAAgB,CAAC,WAAW,CAAC;AAAA,EAW/C;AACJ;AAEO,SAAS,UAAU;AACtB,QAAM,QAAQ,CAAC,KAAa,QAAsC;AAC9D,WAAO,KAAK,IAAI,KAAK,GAAG;AAAA,EAC5B;AACA,QAAM,SAAS,CAAC,MAAc,SAAyB;AACnD,WAAO,KAAK,KAAK,MAAM,IAAI;AAAA,EAC/B;AAEA,QAAM,aAAa,CAAC,WAAmB;AACnC,SAAK,QAAQ,MAAM;AAAA,EACvB;AAEA,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAER;"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { reactive } from "vue";
|
|
2
|
+
import { get, isObject } from "lodash-es";
|
|
3
|
+
const locale = reactive({
|
|
4
|
+
lang: "zh-CN",
|
|
5
|
+
messages: {}
|
|
6
|
+
});
|
|
7
|
+
const langLoaders = {
|
|
8
|
+
"zh-CN": async () => {
|
|
9
|
+
const [zhCN, zhLocale, zhLocale_render, zhLocale_extension] = await Promise.all([
|
|
10
|
+
import("ant-design-vue/es/locale/zh_CN"),
|
|
11
|
+
import("../../lang/zh-CN.js"),
|
|
12
|
+
import("../../lang/zh-CN_render.js"),
|
|
13
|
+
import("../../lang/zh-CN_extension.js")
|
|
14
|
+
]);
|
|
15
|
+
return {
|
|
16
|
+
...zhCN.default,
|
|
17
|
+
...zhLocale.default,
|
|
18
|
+
...zhLocale_render.default,
|
|
19
|
+
...zhLocale_extension.default
|
|
20
|
+
};
|
|
21
|
+
},
|
|
22
|
+
"en-US": async () => {
|
|
23
|
+
const [enUS, enLocale, enLocale_render, enLocale_extension] = await Promise.all([
|
|
24
|
+
import("ant-design-vue/es/locale/en_US"),
|
|
25
|
+
import("../../lang/en-US.js"),
|
|
26
|
+
import("../../lang/en-US_render.js"),
|
|
27
|
+
import("../../lang/en-US_extension.js")
|
|
28
|
+
]);
|
|
29
|
+
return {
|
|
30
|
+
...enUS.default,
|
|
31
|
+
...enLocale.default,
|
|
32
|
+
...enLocale_render.default,
|
|
33
|
+
...enLocale_extension.default
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
function createI18n(options) {
|
|
38
|
+
const methoad = {
|
|
39
|
+
get messages() {
|
|
40
|
+
return locale.messages;
|
|
41
|
+
},
|
|
42
|
+
$st(path, args) {
|
|
43
|
+
const message = get(this.messages[locale.lang], path);
|
|
44
|
+
if (isObject(args)) {
|
|
45
|
+
let result = "";
|
|
46
|
+
Object.entries(args).forEach(([key, value]) => {
|
|
47
|
+
result = message.replace(`{${key}}`, value);
|
|
48
|
+
});
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
if (typeof message === "undefined") {
|
|
52
|
+
return path;
|
|
53
|
+
}
|
|
54
|
+
return typeof message === "function" ? message(...args) : message !== null ? message : path;
|
|
55
|
+
},
|
|
56
|
+
$st2(path, path2) {
|
|
57
|
+
const messages = this.messages[locale.lang];
|
|
58
|
+
const message = get(messages, path);
|
|
59
|
+
return message !== null ? message : get(messages, path2);
|
|
60
|
+
},
|
|
61
|
+
async setLang(lang) {
|
|
62
|
+
locale.lang = lang;
|
|
63
|
+
if (!(lang in locale.messages)) {
|
|
64
|
+
locale.messages[lang] = {};
|
|
65
|
+
}
|
|
66
|
+
if (lang in langLoaders) {
|
|
67
|
+
const messages = await langLoaders[lang]();
|
|
68
|
+
locale.messages[lang] = messages;
|
|
69
|
+
}
|
|
70
|
+
locale.lang = lang;
|
|
71
|
+
},
|
|
72
|
+
setLangMessages(lang, messages) {
|
|
73
|
+
locale.messages[lang] = {
|
|
74
|
+
...locale.messages[lang],
|
|
75
|
+
...messages
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
return methoad;
|
|
80
|
+
}
|
|
81
|
+
export {
|
|
82
|
+
createI18n
|
|
83
|
+
};
|
|
84
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../core/src/utils/smart-vue-i18n/index.ts"],"sourcesContent":["import { reactive } from 'vue';\nimport { isObject, get } from 'lodash-es';\n\nconst locale = reactive({\n lang: 'zh-CN',\n messages: {}\n});\n\ntype i18nOptionsType = {\n locale: string;\n};\n\nconst langLoaders = {\n 'zh-CN': async () => {\n const [zhCN, zhLocale, zhLocale_render, zhLocale_extension] = await Promise.all([\n import('ant-design-vue/es/locale/zh_CN'),\n import('../../lang/zh-CN'),\n import('../../lang/zh-CN_render'),\n import('../../lang/zh-CN_extension')\n ]);\n return {\n ...zhCN.default,\n ...zhLocale.default,\n ...zhLocale_render.default,\n ...zhLocale_extension.default\n };\n },\n 'en-US': async () => {\n const [enUS, enLocale, enLocale_render, enLocale_extension] = await Promise.all([\n import('ant-design-vue/es/locale/en_US'),\n import('../../lang/en-US'),\n import('../../lang/en-US_render'),\n import('../../lang/en-US_extension')\n ]);\n return {\n ...enUS.default,\n ...enLocale.default,\n ...enLocale_render.default,\n ...enLocale_extension.default\n };\n }\n};\n\nexport function createI18n(options: i18nOptionsType) {\n const methoad = {\n get messages() {\n return locale.messages;\n },\n $st(path: string, args) {\n const message = get(this.messages[locale.lang], path);\n\n if (isObject(args)) {\n let result = '';\n Object.entries(args).forEach(([key, value]) => {\n result = message.replace(`{${key}}`, value);\n });\n return result;\n }\n\n if (typeof message === 'undefined') {\n return path;\n }\n\n return typeof message === 'function'\n ? message(...args)\n : message !== null\n ? message\n : path;\n },\n\n $st2(path, path2) {\n const messages = this.messages[locale.lang];\n const message = get(messages, path);\n return message !== null ? message : get(messages, path2);\n },\n\n async setLang(lang) {\n locale.lang = lang;\n if (!(lang in locale.messages)) {\n locale.messages[lang] = {};\n }\n if (lang in langLoaders) {\n const messages = await langLoaders[lang]();\n locale.messages[lang] = messages;\n }\n locale.lang = lang;\n },\n setLangMessages(lang, messages) {\n locale.messages[lang] = {\n ...locale.messages[lang],\n ...messages\n };\n }\n };\n\n return methoad;\n}\n"],"names":[],"mappings":";;AAGA,MAAM,SAAS,SAAS;AAAA,EACpB,MAAM;AAAA,EACN,UAAU,CAAA;AACd,CAAC;AAMD,MAAM,cAAc;AAAA,EAChB,SAAS,YAAY;AACjB,UAAM,CAAC,MAAM,UAAU,iBAAiB,kBAAkB,IAAI,MAAM,QAAQ,IAAI;AAAA,MAC5E,OAAO,gCAAgC;AAAA,MACvC,OAAO,qBAAkB;AAAA,MACzB,OAAO,4BAAyB;AAAA,MAChC,OAAO,+BAA4B;AAAA,IAAA,CACtC;AACD,WAAO;AAAA,MACH,GAAG,KAAK;AAAA,MACR,GAAG,SAAS;AAAA,MACZ,GAAG,gBAAgB;AAAA,MACnB,GAAG,mBAAmB;AAAA,IAAA;AAAA,EAE9B;AAAA,EACA,SAAS,YAAY;AACjB,UAAM,CAAC,MAAM,UAAU,iBAAiB,kBAAkB,IAAI,MAAM,QAAQ,IAAI;AAAA,MAC5E,OAAO,gCAAgC;AAAA,MACvC,OAAO,qBAAkB;AAAA,MACzB,OAAO,4BAAyB;AAAA,MAChC,OAAO,+BAA4B;AAAA,IAAA,CACtC;AACD,WAAO;AAAA,MACH,GAAG,KAAK;AAAA,MACR,GAAG,SAAS;AAAA,MACZ,GAAG,gBAAgB;AAAA,MACnB,GAAG,mBAAmB;AAAA,IAAA;AAAA,EAE9B;AACJ;AAEO,SAAS,WAAW,SAA0B;AACjD,QAAM,UAAU;AAAA,IACZ,IAAI,WAAW;AACX,aAAO,OAAO;AAAA,IAClB;AAAA,IACA,IAAI,MAAc,MAAM;AACpB,YAAM,UAAU,IAAI,KAAK,SAAS,OAAO,IAAI,GAAG,IAAI;AAEpD,UAAI,SAAS,IAAI,GAAG;AAChB,YAAI,SAAS;AACb,eAAO,QAAQ,IAAI,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC3C,mBAAS,QAAQ,QAAQ,IAAI,GAAG,KAAK,KAAK;AAAA,QAC9C,CAAC;AACD,eAAO;AAAA,MACX;AAEA,UAAI,OAAO,YAAY,aAAa;AAChC,eAAO;AAAA,MACX;AAEA,aAAO,OAAO,YAAY,aACpB,QAAQ,GAAG,IAAI,IACf,YAAY,OACZ,UACA;AAAA,IACV;AAAA,IAEA,KAAK,MAAM,OAAO;AACd,YAAM,WAAW,KAAK,SAAS,OAAO,IAAI;AAC1C,YAAM,UAAU,IAAI,UAAU,IAAI;AAClC,aAAO,YAAY,OAAO,UAAU,IAAI,UAAU,KAAK;AAAA,IAC3D;AAAA,IAEA,MAAM,QAAQ,MAAM;AAChB,aAAO,OAAO;AACd,UAAI,EAAE,QAAQ,OAAO,WAAW;AAC5B,eAAO,SAAS,IAAI,IAAI,CAAA;AAAA,MAC5B;AACA,UAAI,QAAQ,aAAa;AACrB,cAAM,WAAW,MAAM,YAAY,IAAI,EAAA;AACvC,eAAO,SAAS,IAAI,IAAI;AAAA,MAC5B;AACA,aAAO,OAAO;AAAA,IAClB;AAAA,IACA,gBAAgB,MAAM,UAAU;AAC5B,aAAO,SAAS,IAAI,IAAI;AAAA,QACpB,GAAG,OAAO,SAAS,IAAI;AAAA,QACvB,GAAG;AAAA,MAAA;AAAA,IAEX;AAAA,EAAA;AAGJ,SAAO;AACX;"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { ref, getCurrentInstance } from "vue";
|
|
2
|
+
function useEmitter() {
|
|
3
|
+
const vfEvents = ref({});
|
|
4
|
+
const instance = getCurrentInstance();
|
|
5
|
+
const emit$ = (eventName, data) => {
|
|
6
|
+
if (vfEvents.value[eventName]) {
|
|
7
|
+
vfEvents.value[eventName].forEach((fn) => {
|
|
8
|
+
fn(data);
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
const on$ = (eventName, fn) => {
|
|
13
|
+
vfEvents.value[eventName] = vfEvents.value[eventName] || [];
|
|
14
|
+
vfEvents.value[eventName].push(fn);
|
|
15
|
+
};
|
|
16
|
+
const off$ = (eventName, fn) => {
|
|
17
|
+
if (vfEvents.value[eventName]) {
|
|
18
|
+
if (fn === void 0 || fn === null) {
|
|
19
|
+
vfEvents.value[eventName].length = 0;
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
for (let i = 0; i < vfEvents.value[eventName].length; i++) {
|
|
23
|
+
if (vfEvents.value[eventName][i] === fn) {
|
|
24
|
+
vfEvents.value[eventName].splice(i, 1);
|
|
25
|
+
break;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
const dispatch = (componentName, eventName, params) => {
|
|
31
|
+
var _a, _b, _c, _d, _e, _f;
|
|
32
|
+
if (!instance) return;
|
|
33
|
+
let parent = instance.parent;
|
|
34
|
+
let name = (_a = parent == null ? void 0 : parent.type) == null ? void 0 : _a["componentName"];
|
|
35
|
+
while (parent && (!name || name !== componentName)) {
|
|
36
|
+
parent = parent.parent;
|
|
37
|
+
if (parent) {
|
|
38
|
+
name = (_b = parent.type) == null ? void 0 : _b["componentName"];
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (parent) {
|
|
42
|
+
if (((_c = parent.exposed) == null ? void 0 : _c.emit$) || ((_d = parent.ctx) == null ? void 0 : _d.emit$)) {
|
|
43
|
+
const targetEmit$ = ((_e = parent.exposed) == null ? void 0 : _e.emit$) || ((_f = parent.ctx) == null ? void 0 : _f.emit$);
|
|
44
|
+
targetEmit$.call(parent.proxy, eventName, params);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
const broadcast = (componentName, eventName, params) => {
|
|
49
|
+
const ctx = instance == null ? void 0 : instance.proxy;
|
|
50
|
+
if (ctx == null ? void 0 : ctx.widgetRefList) {
|
|
51
|
+
Object.keys(ctx.widgetRefList).forEach((refName) => {
|
|
52
|
+
var _a;
|
|
53
|
+
const widget = ctx.widgetRefList[refName];
|
|
54
|
+
const cmpName = (_a = widget.$options) == null ? void 0 : _a.componentName;
|
|
55
|
+
if (cmpName === componentName) {
|
|
56
|
+
if (widget.emit$) {
|
|
57
|
+
widget.emit$.call(widget, eventName, params);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
if (ctx == null ? void 0 : ctx.refList) {
|
|
63
|
+
Object.keys(ctx.refList).forEach((refName) => {
|
|
64
|
+
var _a;
|
|
65
|
+
const ref2 = ctx.refList[refName];
|
|
66
|
+
const cmpName = (_a = ref2.$options) == null ? void 0 : _a.componentName;
|
|
67
|
+
if (cmpName === componentName) {
|
|
68
|
+
if (ref2.emit$) {
|
|
69
|
+
ref2.emit$.call(ref2, eventName, params);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
const editEventHandler = (eventName, eventParams, mode) => {
|
|
76
|
+
dispatch("SettingPanel", "editEventHandler", [eventName, [...eventParams], mode]);
|
|
77
|
+
};
|
|
78
|
+
const onChangeEditEventHandler = (params) => {
|
|
79
|
+
dispatch("SettingPanel", "onChangeEventHandler", params);
|
|
80
|
+
};
|
|
81
|
+
return {
|
|
82
|
+
vfEvents,
|
|
83
|
+
editEventHandler,
|
|
84
|
+
onChangeEditEventHandler,
|
|
85
|
+
emit$,
|
|
86
|
+
on$,
|
|
87
|
+
off$,
|
|
88
|
+
dispatch,
|
|
89
|
+
broadcast
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
export {
|
|
93
|
+
useEmitter
|
|
94
|
+
};
|
|
95
|
+
//# sourceMappingURL=useEmitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useEmitter.js","sources":["../../../../../core/src/utils/useEmitter.ts"],"sourcesContent":["import { ref, getCurrentInstance, ComponentInternalInstance, Ref } from 'vue';\n\n/**\n * 事件处理函数类型\n */\nexport type EventHandler<T = any> = (data: T) => void;\n\n/**\n * 事件存储对象类型\n */\nexport interface EventsMap {\n [eventName: string]: EventHandler[];\n}\n\n/**\n * 组件引用类型\n */\ninterface ComponentRef {\n $options?: {\n componentName?: string;\n };\n emit$?: (eventName: string, params: any) => void;\n}\n\n/**\n * 组件上下文类型\n */\ninterface ComponentContext {\n widgetRefList?: Record<string, ComponentRef>;\n refList?: Record<string, ComponentRef>;\n}\n\nexport type EditEventHandlerParams = {\n title?: string;\n attr: string;\n eventParams?: string[];\n mode?: string;\n};\n\n/**\n * 组合式API版本的事件总线\n * 用于组件间通信\n */\nexport function useEmitter() {\n // 使用ref创建响应式事件存储对象\n const vfEvents: Ref<EventsMap> = ref({});\n const instance = getCurrentInstance();\n\n /**\n * 触发事件\n * @param {string} eventName 事件名称\n * @param {any} data 事件数据\n */\n const emit$ = <T = any>(eventName: string, data: T): void => {\n if (vfEvents.value[eventName]) {\n vfEvents.value[eventName].forEach(fn => {\n fn(data);\n });\n }\n };\n\n /**\n * 监听事件\n * @param {string} eventName 事件名称\n * @param {Function} fn 回调函数\n */\n const on$ = <T = any>(eventName: string, fn: EventHandler<T>): void => {\n vfEvents.value[eventName] = vfEvents.value[eventName] || [];\n vfEvents.value[eventName].push(fn as EventHandler);\n };\n\n /**\n * 移除事件监听\n * @param {string} eventName 事件名称\n * @param {Function} fn 回调函数,如果不传则移除该事件的所有监听\n */\n const off$ = <T = any>(eventName: string, fn?: EventHandler<T>): void => {\n if (vfEvents.value[eventName]) {\n if (fn === undefined || fn === null) {\n vfEvents.value[eventName].length = 0;\n return;\n }\n\n for (let i = 0; i < vfEvents.value[eventName].length; i++) {\n if (vfEvents.value[eventName][i] === fn) {\n vfEvents.value[eventName].splice(i, 1);\n break;\n }\n }\n }\n };\n\n /**\n * 向上派发事件,寻找指定组件并触发其事件\n * @param {string} componentName 目标组件名称\n * @param {string} eventName 事件名称\n * @param {any} params 事件参数\n */\n const dispatch = (componentName: string, eventName: string, params: any): void => {\n if (!instance) return;\n let parent = instance.parent as ComponentInternalInstance | null;\n let name = parent?.type?.['componentName'] as string | undefined;\n\n while (parent && (!name || name !== componentName)) {\n parent = parent.parent;\n\n if (parent) {\n name = parent.type?.['componentName'] as string | undefined;\n }\n }\n\n if (parent) {\n // 检查目标组件是否有emit$方法\n if (parent.exposed?.emit$ || (parent as any).ctx?.emit$) {\n const targetEmit$ = parent.exposed?.emit$ || parent.ctx?.emit$;\n targetEmit$.call(parent.proxy, eventName, params);\n\n // if (componentName === 'VFormRender') {\n // // 执行原生$emit,以便可以用@进行声明式事件处理\n // parent.emit(eventName, ...(Array.isArray(params) ? params : [params]));\n // }\n }\n }\n };\n\n /**\n * 向下广播事件,寻找指定组件并触发其事件\n * @param {string} componentName 目标组件名称\n * @param {string} eventName 事件名称\n * @param {any} params 事件参数\n */\n const broadcast = (componentName: string, eventName: string, params: any): void => {\n // Vue3中不再有$children属性,需要通过其他方式获取子组件\n // 使用widgetRefList或refList属性\n\n // 处理FormRender组件的widgetRefList\n const ctx = instance?.proxy as unknown as ComponentContext;\n if (ctx?.widgetRefList) {\n Object.keys(ctx.widgetRefList).forEach(refName => {\n const widget = ctx.widgetRefList[refName];\n const cmpName = widget.$options?.componentName;\n if (cmpName === componentName) {\n if (widget.emit$) {\n widget.emit$.call(widget, eventName, params);\n }\n }\n });\n }\n\n // 处理其他组件的refList\n if (ctx?.refList) {\n Object.keys(ctx.refList).forEach(refName => {\n const ref = ctx.refList[refName];\n const cmpName = ref.$options?.componentName;\n if (cmpName === componentName) {\n if (ref.emit$) {\n ref.emit$.call(ref, eventName, params);\n }\n }\n });\n }\n };\n\n /**\n * 编辑事件处理器\n * @param {string} eventName 事件名称\n * @param {any[]} eventParams 事件参数\n * @deprecated\n */\n const editEventHandler = (eventName: string, eventParams: any[], mode: string): void => {\n dispatch('SettingPanel', 'editEventHandler', [eventName, [...eventParams], mode]);\n };\n\n const onChangeEditEventHandler = (params: EditEventHandlerParams): void => {\n dispatch('SettingPanel', 'onChangeEventHandler', params);\n };\n\n return {\n vfEvents,\n editEventHandler,\n onChangeEditEventHandler,\n emit$,\n on$,\n off$,\n dispatch,\n broadcast\n };\n}\n"],"names":["ref"],"mappings":";AA2CO,SAAS,aAAa;AAEzB,QAAM,WAA2B,IAAI,EAAE;AACvC,QAAM,WAAW,mBAAA;AAOjB,QAAM,QAAQ,CAAU,WAAmB,SAAkB;AACzD,QAAI,SAAS,MAAM,SAAS,GAAG;AAC3B,eAAS,MAAM,SAAS,EAAE,QAAQ,CAAA,OAAM;AACpC,WAAG,IAAI;AAAA,MACX,CAAC;AAAA,IACL;AAAA,EACJ;AAOA,QAAM,MAAM,CAAU,WAAmB,OAA8B;AACnE,aAAS,MAAM,SAAS,IAAI,SAAS,MAAM,SAAS,KAAK,CAAA;AACzD,aAAS,MAAM,SAAS,EAAE,KAAK,EAAkB;AAAA,EACrD;AAOA,QAAM,OAAO,CAAU,WAAmB,OAA+B;AACrE,QAAI,SAAS,MAAM,SAAS,GAAG;AAC3B,UAAI,OAAO,UAAa,OAAO,MAAM;AACjC,iBAAS,MAAM,SAAS,EAAE,SAAS;AACnC;AAAA,MACJ;AAEA,eAAS,IAAI,GAAG,IAAI,SAAS,MAAM,SAAS,EAAE,QAAQ,KAAK;AACvD,YAAI,SAAS,MAAM,SAAS,EAAE,CAAC,MAAM,IAAI;AACrC,mBAAS,MAAM,SAAS,EAAE,OAAO,GAAG,CAAC;AACrC;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAQA,QAAM,WAAW,CAAC,eAAuB,WAAmB,WAAsB;;AAC9E,QAAI,CAAC,SAAU;AACf,QAAI,SAAS,SAAS;AACtB,QAAI,QAAO,sCAAQ,SAAR,mBAAe;AAE1B,WAAO,WAAW,CAAC,QAAQ,SAAS,gBAAgB;AAChD,eAAS,OAAO;AAEhB,UAAI,QAAQ;AACR,gBAAO,YAAO,SAAP,mBAAc;AAAA,MACzB;AAAA,IACJ;AAEA,QAAI,QAAQ;AAER,YAAI,YAAO,YAAP,mBAAgB,YAAU,YAAe,QAAf,mBAAoB,QAAO;AACrD,cAAM,gBAAc,YAAO,YAAP,mBAAgB,YAAS,YAAO,QAAP,mBAAY;AACzD,oBAAY,KAAK,OAAO,OAAO,WAAW,MAAM;AAAA,MAMpD;AAAA,IACJ;AAAA,EACJ;AAQA,QAAM,YAAY,CAAC,eAAuB,WAAmB,WAAsB;AAK/E,UAAM,MAAM,qCAAU;AACtB,QAAI,2BAAK,eAAe;AACpB,aAAO,KAAK,IAAI,aAAa,EAAE,QAAQ,CAAA,YAAW;;AAC9C,cAAM,SAAS,IAAI,cAAc,OAAO;AACxC,cAAM,WAAU,YAAO,aAAP,mBAAiB;AACjC,YAAI,YAAY,eAAe;AAC3B,cAAI,OAAO,OAAO;AACd,mBAAO,MAAM,KAAK,QAAQ,WAAW,MAAM;AAAA,UAC/C;AAAA,QACJ;AAAA,MACJ,CAAC;AAAA,IACL;AAGA,QAAI,2BAAK,SAAS;AACd,aAAO,KAAK,IAAI,OAAO,EAAE,QAAQ,CAAA,YAAW;;AACxC,cAAMA,OAAM,IAAI,QAAQ,OAAO;AAC/B,cAAM,WAAUA,UAAI,aAAJA,mBAAc;AAC9B,YAAI,YAAY,eAAe;AAC3B,cAAIA,KAAI,OAAO;AACXA,iBAAI,MAAM,KAAKA,MAAK,WAAW,MAAM;AAAA,UACzC;AAAA,QACJ;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,EACJ;AAQA,QAAM,mBAAmB,CAAC,WAAmB,aAAoB,SAAuB;AACpF,aAAS,gBAAgB,oBAAoB,CAAC,WAAW,CAAC,GAAG,WAAW,GAAG,IAAI,CAAC;AAAA,EACpF;AAEA,QAAM,2BAA2B,CAAC,WAAyC;AACvE,aAAS,gBAAgB,wBAAwB,MAAM;AAAA,EAC3D;AAEA,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAER;"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import "clipboard";
|
|
2
|
+
import "@kp-ui/tool";
|
|
3
|
+
import { cloneDeep } from "lodash-es";
|
|
4
|
+
function isNull(value) {
|
|
5
|
+
return value === null || value === void 0;
|
|
6
|
+
}
|
|
7
|
+
const generateId = function() {
|
|
8
|
+
return Math.floor(Math.random() * 1e5 + Math.random() * 2e4 + Math.random() * 5e3);
|
|
9
|
+
};
|
|
10
|
+
const deepClone = function(origin) {
|
|
11
|
+
return cloneDeep(origin);
|
|
12
|
+
};
|
|
13
|
+
const insertCustomCssToHead = function(cssCode, formId = "") {
|
|
14
|
+
const head = document.getElementsByTagName("head")[0];
|
|
15
|
+
const newStyle = document.createElement("style");
|
|
16
|
+
newStyle.type = "text/css";
|
|
17
|
+
newStyle.id = formId ? "vform-custom-css-" + formId : "vform-custom-css";
|
|
18
|
+
try {
|
|
19
|
+
newStyle.appendChild(document.createTextNode(cssCode));
|
|
20
|
+
} catch (ex) {
|
|
21
|
+
newStyle.styleSheet.cssText = cssCode;
|
|
22
|
+
}
|
|
23
|
+
head.appendChild(newStyle);
|
|
24
|
+
};
|
|
25
|
+
const insertGlobalFunctionsToHtml = function(functionsCode, formId = "") {
|
|
26
|
+
const bodyEle = document.getElementsByTagName("body")[0];
|
|
27
|
+
const newScriptEle = document.createElement("script");
|
|
28
|
+
newScriptEle.id = formId ? "v_form_global_functions-" + formId : "v_form_global_functions";
|
|
29
|
+
newScriptEle.type = "text/javascript";
|
|
30
|
+
newScriptEle.innerHTML = functionsCode;
|
|
31
|
+
bodyEle.appendChild(newScriptEle);
|
|
32
|
+
};
|
|
33
|
+
function traverseContainerWidgets(widgetList, handler) {
|
|
34
|
+
if (!(widgetList == null ? void 0 : widgetList.length)) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
widgetList.forEach((w) => {
|
|
38
|
+
var _a, _b, _c;
|
|
39
|
+
if (w.category === "container") {
|
|
40
|
+
handler(w);
|
|
41
|
+
}
|
|
42
|
+
if (w.type === "grid") {
|
|
43
|
+
(_a = w.cols) == null ? void 0 : _a.forEach((col) => {
|
|
44
|
+
traverseContainerWidgets(col.widgetList, handler);
|
|
45
|
+
});
|
|
46
|
+
} else if (w.type === "table") {
|
|
47
|
+
(_b = w.rows) == null ? void 0 : _b.forEach((row) => {
|
|
48
|
+
var _a2;
|
|
49
|
+
(_a2 = row.cols) == null ? void 0 : _a2.forEach((cell) => {
|
|
50
|
+
traverseContainerWidgets(cell.widgetList, handler);
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
} else if (w.type === "tab") {
|
|
54
|
+
(_c = w.tabs) == null ? void 0 : _c.forEach((tab) => {
|
|
55
|
+
traverseContainerWidgets(tab.widgetList, handler);
|
|
56
|
+
});
|
|
57
|
+
} else if (w.type === "sub-form" || w.type === "grid-sub-form") {
|
|
58
|
+
traverseContainerWidgets(w.widgetList, handler);
|
|
59
|
+
} else if (w.category === "container") {
|
|
60
|
+
traverseContainerWidgets(w.widgetList, handler);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
function handleWidgetForTraverse(widget, handler) {
|
|
65
|
+
if (widget.category && widget.category === "container") {
|
|
66
|
+
traverseFieldWidgetsOfContainer(widget, handler);
|
|
67
|
+
} else if (widget.formItemFlag) {
|
|
68
|
+
handler(widget);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function traverseFieldWidgetsOfContainer(con, handler) {
|
|
72
|
+
var _a, _b, _c, _d, _e;
|
|
73
|
+
if (con.type === "grid") {
|
|
74
|
+
(_a = con.cols) == null ? void 0 : _a.forEach((col) => {
|
|
75
|
+
var _a2;
|
|
76
|
+
(_a2 = col.widgetList) == null ? void 0 : _a2.forEach((cw) => {
|
|
77
|
+
handleWidgetForTraverse(cw, handler);
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
} else if (con.type === "table") {
|
|
81
|
+
(_b = con.rows) == null ? void 0 : _b.forEach((row) => {
|
|
82
|
+
var _a2;
|
|
83
|
+
(_a2 = row.cols) == null ? void 0 : _a2.forEach((cell) => {
|
|
84
|
+
var _a3;
|
|
85
|
+
(_a3 = cell.widgetList) == null ? void 0 : _a3.forEach((cw) => {
|
|
86
|
+
handleWidgetForTraverse(cw, handler);
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
} else if (con.type === "tab") {
|
|
91
|
+
(_c = con.tabs) == null ? void 0 : _c.forEach((tab) => {
|
|
92
|
+
var _a2;
|
|
93
|
+
(_a2 = tab.widgetList) == null ? void 0 : _a2.forEach((cw) => {
|
|
94
|
+
handleWidgetForTraverse(cw, handler);
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
} else if (con.type === "sub-form" || con.type === "grid-sub-form") {
|
|
98
|
+
(_d = con.widgetList) == null ? void 0 : _d.forEach((cw) => {
|
|
99
|
+
handleWidgetForTraverse(cw, handler);
|
|
100
|
+
});
|
|
101
|
+
} else if (con.category === "container") {
|
|
102
|
+
(_e = con.widgetList) == null ? void 0 : _e.forEach((cw) => {
|
|
103
|
+
handleWidgetForTraverse(cw, handler);
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function getContainerWidgetByName(widgetList, containerName) {
|
|
108
|
+
if (!widgetList) {
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
let foundContainer = null;
|
|
112
|
+
const handlerFn = (con) => {
|
|
113
|
+
var _a;
|
|
114
|
+
if (((_a = con.options) == null ? void 0 : _a.name) === containerName) {
|
|
115
|
+
foundContainer = con;
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
traverseContainerWidgets(widgetList, handlerFn);
|
|
119
|
+
return foundContainer;
|
|
120
|
+
}
|
|
121
|
+
function cloneFormConfigWithoutEventHandler(formConfig) {
|
|
122
|
+
const newFC = deepClone(formConfig);
|
|
123
|
+
newFC.onFormCreated = "";
|
|
124
|
+
newFC.onFormMounted = "";
|
|
125
|
+
newFC.onFormDataChange = "";
|
|
126
|
+
return newFC;
|
|
127
|
+
}
|
|
128
|
+
function translateOptionItems(rawData, widgetType, labelKey, valueKey) {
|
|
129
|
+
if (["cascader", "treeSelect", "select"].includes(widgetType)) {
|
|
130
|
+
return deepClone(rawData);
|
|
131
|
+
}
|
|
132
|
+
const result = [];
|
|
133
|
+
if (rawData && rawData.length > 0) {
|
|
134
|
+
rawData.forEach((ri) => {
|
|
135
|
+
result.push({
|
|
136
|
+
label: ri[labelKey],
|
|
137
|
+
value: ri[valueKey]
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
return rawData;
|
|
142
|
+
}
|
|
143
|
+
export {
|
|
144
|
+
cloneFormConfigWithoutEventHandler,
|
|
145
|
+
deepClone,
|
|
146
|
+
generateId,
|
|
147
|
+
getContainerWidgetByName,
|
|
148
|
+
insertCustomCssToHead,
|
|
149
|
+
insertGlobalFunctionsToHtml,
|
|
150
|
+
isNull,
|
|
151
|
+
translateOptionItems,
|
|
152
|
+
traverseContainerWidgets,
|
|
153
|
+
traverseFieldWidgetsOfContainer
|
|
154
|
+
};
|
|
155
|
+
//# sourceMappingURL=util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sources":["../../../../../core/src/utils/util.ts"],"sourcesContent":["import Clipboard from 'clipboard';\nimport { getLocat } from '@kp-ui/tool';\nimport { isArray, isEmpty, cloneDeep } from 'lodash-es';\n\nimport { FormConfig, Widget, FormJsonType } from '@kp-ui/lowcode-core';\n\nexport function isNull(value: unknown): value is null | undefined {\n return value === null || value === undefined;\n}\n\nexport function isNotNull(value: unknown): boolean {\n return value !== null && value !== undefined;\n}\n\nexport function isEmptyStr(str: unknown): boolean {\n //return (str === undefined) || (!str) || (!/[^\\s]/.test(str));\n return (\n str === undefined ||\n (!str && str !== 0 && str !== '0') ||\n (typeof str === 'string' && !/[^\\s]/.test(str))\n );\n}\n\nexport const generateId = function (): number {\n return Math.floor(Math.random() * 100000 + Math.random() * 20000 + Math.random() * 5000);\n};\n\nexport const deepClone = function <T>(origin: T): T {\n return cloneDeep(origin);\n};\n\nexport const overwriteObj = function <T extends Record<string, unknown>>(\n obj1: T,\n obj2: Partial<T>\n): void {\n /* 浅拷贝对象属性,obj2覆盖obj1 */\n Object.keys(obj2).forEach(prop => {\n (obj1 as Record<string, unknown>)[prop] = obj2[prop as keyof T];\n });\n};\n\nexport const insertCustomCssToHead = function (cssCode: string, formId = ''): void {\n const head = document.getElementsByTagName('head')[0];\n\n const newStyle = document.createElement('style');\n newStyle.type = 'text/css';\n newStyle.id = formId ? 'vform-custom-css' + '-' + formId : 'vform-custom-css';\n\n try {\n newStyle.appendChild(document.createTextNode(cssCode));\n } catch (ex) {\n (newStyle as HTMLStyleElement & { styleSheet?: { cssText: string } }).styleSheet!.cssText =\n cssCode;\n }\n\n head.appendChild(newStyle);\n};\n\nexport const insertGlobalFunctionsToHtml = function (functionsCode: string, formId = ''): void {\n const bodyEle = document.getElementsByTagName('body')[0];\n\n const newScriptEle = document.createElement('script');\n newScriptEle.id = formId ? 'v_form_global_functions' + '-' + formId : 'v_form_global_functions';\n newScriptEle.type = 'text/javascript';\n newScriptEle.innerHTML = functionsCode;\n bodyEle.appendChild(newScriptEle);\n};\n\nexport const optionExists = function (\n optionsObj: Record<string, unknown> | null | undefined,\n optionName: string\n): boolean {\n if (!optionsObj) {\n return false;\n }\n\n return Object.keys(optionsObj).indexOf(optionName) > -1;\n};\n\nexport const loadRemoteScript = function (srcPath: string, callback: () => void): void {\n /*加载远程js,加载成功后执行回调函数*/\n const sid = encodeURIComponent(srcPath);\n const oldScriptEle = document.getElementById(sid);\n\n if (!oldScriptEle) {\n let s: HTMLScriptElement | null = document.createElement('script');\n s.src = srcPath;\n s.id = sid;\n document.body.appendChild(s);\n\n s.onload = s.onreadystatechange = function (\n this: HTMLScriptElement,\n _?: Event | string,\n isAbort?: boolean\n ) {\n /* 借鉴自ace.js */\n const scriptEl = this as HTMLScriptElement & { readyState?: string };\n if (\n isAbort ||\n !scriptEl.readyState ||\n scriptEl.readyState === 'loaded' ||\n scriptEl.readyState === 'complete'\n ) {\n s = null;\n if (!isAbort) {\n callback();\n }\n }\n } as OnErrorEventHandler;\n }\n};\n\nexport type WidgetHandler = (widget: Widget, parent?: Widget | null) => void;\nexport type ContainerHandler = (container: Widget) => void;\n\nexport function traverseFieldWidgets(\n widgetList: Widget[] | undefined,\n handler: WidgetHandler,\n parent: Widget | null = null,\n staticWidgetsIncluded = false\n): void {\n if (!widgetList) {\n return;\n }\n\n widgetList.forEach(w => {\n if (w.formItemFlag || (w.formItemFlag === false && staticWidgetsIncluded)) {\n handler(w, parent);\n } else if (w.type === 'grid') {\n w.cols?.forEach(col => {\n traverseFieldWidgets(col.widgetList, handler, w, staticWidgetsIncluded);\n });\n } else if (w.type === 'table') {\n w.rows?.forEach(row => {\n row.cols?.forEach(cell => {\n traverseFieldWidgets(cell.widgetList, handler, w, staticWidgetsIncluded);\n });\n });\n } else if (w.type === 'tab') {\n w.tabs?.forEach(tab => {\n traverseFieldWidgets(tab.widgetList, handler, w, staticWidgetsIncluded);\n });\n } else if (w.type === 'sub-form' || w.type === 'grid-sub-form') {\n traverseFieldWidgets(w.widgetList, handler, w, staticWidgetsIncluded);\n } else if (w.category === 'container') {\n //自定义容器\n traverseFieldWidgets(w.widgetList, handler, w, staticWidgetsIncluded);\n }\n });\n}\n\nexport function traverseContainerWidgets(\n widgetList: Widget[] | undefined,\n handler: ContainerHandler\n): void {\n if (!widgetList?.length) {\n return;\n }\n\n widgetList.forEach(w => {\n if (w.category === 'container') {\n handler(w);\n }\n\n if (w.type === 'grid') {\n w.cols?.forEach(col => {\n traverseContainerWidgets(col.widgetList, handler);\n });\n } else if (w.type === 'table') {\n w.rows?.forEach(row => {\n row.cols?.forEach(cell => {\n traverseContainerWidgets(cell.widgetList, handler);\n });\n });\n } else if (w.type === 'tab') {\n w.tabs?.forEach(tab => {\n traverseContainerWidgets(tab.widgetList, handler);\n });\n } else if (w.type === 'sub-form' || w.type === 'grid-sub-form') {\n traverseContainerWidgets(w.widgetList, handler);\n } else if (w.category === 'container') {\n //自定义容器\n traverseContainerWidgets(w.widgetList, handler);\n }\n });\n}\n\nexport function traverseAllWidgets(\n widgetList: Widget[] | undefined,\n handler: (widget: Widget) => void\n): void {\n if (!widgetList) {\n return;\n }\n\n widgetList.forEach(w => {\n handler(w);\n\n if (w.type === 'grid') {\n w.cols?.forEach(col => {\n handler(col as unknown as Widget);\n traverseAllWidgets(col.widgetList, handler);\n });\n } else if (w.type === 'table') {\n w.rows?.forEach(row => {\n row.cols?.forEach(cell => {\n handler(cell as unknown as Widget);\n traverseAllWidgets(cell.widgetList, handler);\n });\n });\n } else if (w.type === 'tab') {\n w.tabs?.forEach(tab => {\n traverseAllWidgets(tab.widgetList, handler);\n });\n } else if (w.type === 'sub-form' || w.type === 'grid-sub-form') {\n traverseAllWidgets(w.widgetList, handler);\n } else if (w.category === 'container') {\n //自定义容器\n traverseAllWidgets(w.widgetList, handler);\n }\n });\n}\n\nfunction handleWidgetForTraverse(widget: Widget, handler: WidgetHandler): void {\n if (widget.category && widget.category === 'container') {\n traverseFieldWidgetsOfContainer(widget, handler);\n } else if (widget.formItemFlag) {\n handler(widget);\n }\n}\n\n/**\n * 遍历容器内的字段组件\n * @param con\n * @param handler\n */\nexport function traverseFieldWidgetsOfContainer(con: Widget, handler: WidgetHandler): void {\n if (con.type === 'grid') {\n con.cols?.forEach(col => {\n col.widgetList?.forEach(cw => {\n handleWidgetForTraverse(cw, handler);\n });\n });\n } else if (con.type === 'table') {\n con.rows?.forEach(row => {\n row.cols?.forEach(cell => {\n cell.widgetList?.forEach(cw => {\n handleWidgetForTraverse(cw, handler);\n });\n });\n });\n } else if (con.type === 'tab') {\n con.tabs?.forEach(tab => {\n tab.widgetList?.forEach(cw => {\n handleWidgetForTraverse(cw, handler);\n });\n });\n } else if (con.type === 'sub-form' || con.type === 'grid-sub-form') {\n con.widgetList?.forEach(cw => {\n handleWidgetForTraverse(cw, handler);\n });\n } else if (con.category === 'container') {\n //自定义容器\n con.widgetList?.forEach(cw => {\n handleWidgetForTraverse(cw, handler);\n });\n }\n}\n\nfunction handleContainerTraverse(\n widget: Widget,\n fieldHandler: WidgetHandler,\n containerHandler: ContainerHandler\n): void {\n if (widget.category && widget.category === 'container') {\n traverseWidgetsOfContainer(widget, fieldHandler, containerHandler);\n } else if (widget.formItemFlag) {\n fieldHandler(widget);\n }\n}\n\n/**\n * 遍历容器内部的字段组件和容器组件\n * @param con\n * @param fieldHandler\n * @param containerHandler\n */\nexport function traverseWidgetsOfContainer(\n con: Widget,\n fieldHandler: WidgetHandler,\n containerHandler: ContainerHandler\n): void {\n if (con.type === 'grid') {\n con.cols?.forEach(col => {\n col.widgetList?.forEach(cw => {\n handleContainerTraverse(cw, fieldHandler, containerHandler);\n });\n });\n } else if (con.type === 'table') {\n con.rows?.forEach(row => {\n row.cols?.forEach(cell => {\n cell.widgetList?.forEach(cw => {\n handleContainerTraverse(cw, fieldHandler, containerHandler);\n });\n });\n });\n } else if (con.type === 'tab') {\n con.tabs?.forEach(tab => {\n tab.widgetList?.forEach(cw => {\n handleContainerTraverse(cw, fieldHandler, containerHandler);\n });\n });\n } else if (con.type === 'sub-form' || con.type === 'grid-sub-form') {\n con.widgetList?.forEach(cw => {\n handleContainerTraverse(cw, fieldHandler, containerHandler);\n });\n } else if (con.category === 'container') {\n //自定义容器\n con.widgetList?.forEach(cw => {\n handleContainerTraverse(cw, fieldHandler, containerHandler);\n });\n }\n}\n\nexport interface FieldWidgetInfo {\n type: string;\n name: string | undefined;\n field: Widget;\n}\n\n/**\n * 获取所有字段组件\n * @param widgetList\n * @param staticWidgetsIncluded 是否包含按钮等静态组件,默认不包含\n * @returns {[]}\n */\nexport function getAllFieldWidgets(\n widgetList: Widget[] | undefined,\n staticWidgetsIncluded = false\n): FieldWidgetInfo[] {\n if (!widgetList) {\n return [];\n }\n\n const result: FieldWidgetInfo[] = [];\n const handlerFn: WidgetHandler = w => {\n result.push({\n type: w.type,\n name: w.options?.name,\n field: w\n });\n };\n traverseFieldWidgets(widgetList, handlerFn, null, staticWidgetsIncluded);\n\n return result;\n}\n\nexport interface ContainerWidgetInfo {\n type: string;\n name: string | undefined;\n container: Widget;\n}\n\n/**\n * 获取所有容器组件\n * @param widgetList\n * @returns {[]}\n */\nexport function getAllContainerWidgets(widgetList: Widget[] | undefined): ContainerWidgetInfo[] {\n if (!widgetList) {\n return [];\n }\n\n const result: ContainerWidgetInfo[] = [];\n const handlerFn: ContainerHandler = w => {\n result.push({\n type: w.type,\n name: w.options?.name,\n container: w\n });\n };\n traverseContainerWidgets(widgetList, handlerFn);\n\n return result;\n}\n\nexport function getFieldWidgetByName(\n widgetList: Widget[] | undefined,\n fieldName: string,\n staticWidgetsIncluded?: boolean\n): Widget | null {\n if (!widgetList) {\n return null;\n }\n\n let foundWidget: Widget | null = null;\n const handlerFn: WidgetHandler = widget => {\n if (widget.options?.name === fieldName) {\n foundWidget = widget;\n }\n };\n\n traverseFieldWidgets(widgetList, handlerFn, null, staticWidgetsIncluded);\n return foundWidget;\n}\n\nexport function getContainerWidgetByName(\n widgetList: Widget[] | undefined,\n containerName: string\n): Widget | null {\n if (!widgetList) {\n return null;\n }\n\n let foundContainer: Widget | null = null;\n const handlerFn: ContainerHandler = con => {\n if (con.options?.name === containerName) {\n foundContainer = con;\n }\n };\n\n traverseContainerWidgets(widgetList, handlerFn);\n return foundContainer;\n}\n\nexport function getContainerWidgetById(\n widgetList: Widget[] | undefined,\n containerId: string\n): Widget | null {\n if (!widgetList) {\n return null;\n }\n\n let foundContainer: Widget | null = null;\n const handlerFn: ContainerHandler = con => {\n if (con.id === containerId) {\n foundContainer = con;\n }\n };\n\n traverseContainerWidgets(widgetList, handlerFn);\n return foundContainer;\n}\n\ninterface MessageApi {\n success: (msg: string) => void;\n error: (msg: string) => void;\n}\n\nexport function copyToClipboard(\n content: string,\n clickEvent: MouseEvent,\n $message: MessageApi,\n successMsg: string,\n errorMsg: string\n): void {\n const clipboard = new Clipboard(clickEvent.target as Element, {\n text: () => content\n });\n\n clipboard.on('success', () => {\n $message.success(successMsg);\n clipboard.destroy();\n });\n\n clipboard.on('error', () => {\n $message.error(errorMsg);\n clipboard.destroy();\n });\n\n clipboard.onClick(clickEvent);\n}\n\nexport function getQueryParam(variable: string): string | undefined {\n const query = window.location.search.substring(1);\n const vars = query.split('&');\n for (let i = 0; i < vars.length; i++) {\n const pair = vars[i].split('=');\n if (pair[0] == variable) {\n return pair[1];\n }\n }\n\n return undefined;\n}\n\nexport function getDefaultFormConfig(): FormConfig {\n const { formCode = '' } = getLocat() as { formCode?: string };\n\n return {\n labelWidth: 80,\n labelPosition: 'horizontal', //'left',\n size: '',\n labelAlign: 'right',\n cssCode: '',\n customClass: [],\n\n isEnterSubmit: 0,\n\n buttonList: [],\n\n functions: '', //全局函数\n layoutType: 'PC',\n scaleMode: 'auto',\n onFormCreated: '',\n onFormMounted: `\n if(!this.vfCtx) return\n if(!this.vfCtx._id) return\n const type = this.vfCtx.type\n this.setReadMode(type==='view')\n this.onFormDetail().then(res=>{\n this.setFormData({...res})\n })\n `,\n\n onFormDataChange: '',\n\n serveList: {\n list: [],\n vformUpdate: {\n http: {\n url: `/api/tmgc2-mgt/formDefinition/${formCode}/evaluate/formSubmit`,\n method: 'post',\n data: { _id: '${_id}' },\n params: {}\n },\n dataReqHandlerCode: `const d=data.data||{};\\n Object.keys(d).forEach(k=>{\\n if(d[k]==='null'){\\n d[k]=null\\n }\\n })\\nreturn {...data,data:d}`,\n dataHandlerCode: ''\n },\n vformDetail: {\n http: {\n url: `/api/tmgc2-mgt/formDefinition/${formCode}/evaluate/formLoad`,\n method: 'post',\n data: { _id: '${_id}' },\n params: {}\n },\n dataReqHandlerCode: `const d=data.data||{};\\n Object.keys(d).forEach(k=>{\\n if(d[k]==='null'){\\n d[k]=null\\n }\\n })\\nreturn {...data,data:d}`,\n dataHandlerCode: 'return data.data.object||{}'\n }\n }\n };\n}\n\nexport function buildDefaultFormJson(): FormJsonType {\n return {\n widgetList: [],\n formConfig: deepClone(getDefaultFormConfig())\n };\n}\n\nexport function cloneFormConfigWithoutEventHandler(formConfig: FormConfig): FormConfig {\n const newFC = deepClone(formConfig);\n newFC.onFormCreated = '';\n newFC.onFormMounted = '';\n newFC.onFormDataChange = '';\n\n return newFC;\n}\n\n/**\n * 转译选择项数据\n * @param rawData\n * @param widgetType\n * @param labelKey\n * @param valueKey\n * @returns {[]}\n */\nexport function translateOptionItems<T extends Record<string, unknown>>(\n rawData: T[],\n widgetType: string,\n labelKey: string,\n valueKey: string\n): Array<{ label: unknown; value: unknown }> | T[] {\n if (['cascader', 'treeSelect', 'select'].includes(widgetType)) {\n // 级联选择不转译\n return deepClone(rawData);\n }\n\n const result: Array<{ label: unknown; value: unknown }> = [];\n if (rawData && rawData.length > 0) {\n rawData.forEach(ri => {\n result.push({\n label: ri[labelKey],\n value: ri[valueKey]\n });\n });\n }\n\n return rawData; //result;\n}\n\nexport function getDSByName(\n formConfig: FormConfig,\n dsName: string\n): { uniqueName: string; [key: string]: unknown } | null {\n let resultDS: { uniqueName: string; [key: string]: unknown } | null = null;\n if (dsName && formConfig.dataSources) {\n formConfig.dataSources.forEach(ds => {\n if (ds.uniqueName === dsName) {\n resultDS = ds;\n }\n });\n }\n\n return resultDS;\n}\n"],"names":["_a"],"mappings":"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"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { isNull } from "./util.js";
|
|
2
|
+
const commonRegExp = {
|
|
3
|
+
number: /^[-]?\d+(\.\d+)?$/,
|
|
4
|
+
letter: /^[A-Za-z]+$/,
|
|
5
|
+
letterAndNumber: /^[A-Za-z0-9]+$/,
|
|
6
|
+
mobilePhone: /^[1][3-9][0-9]{9}$/,
|
|
7
|
+
letterStartNumberIncluded: /^[A-Za-z]+[A-Za-z\d]*$/,
|
|
8
|
+
noChinese: /^[^\u4e00-\u9fa5]+$/,
|
|
9
|
+
chinese: /^[\u4e00-\u9fa5]+$/,
|
|
10
|
+
email: /^([-_A-Za-z0-9.]+)@([_A-Za-z0-9]+\.)+[A-Za-z0-9]{2,3}$/,
|
|
11
|
+
url: /^([hH][tT]{2}[pP]:\/\/|[hH][tT]{2}[pP][sS]:\/\/)(([A-Za-z0-9-~]+)\.)+([A-Za-z0-9-~\/])+$/
|
|
12
|
+
};
|
|
13
|
+
const getRegExp = function(validatorName) {
|
|
14
|
+
return commonRegExp[validatorName];
|
|
15
|
+
};
|
|
16
|
+
const parseRegExpString = (regExpStr) => {
|
|
17
|
+
try {
|
|
18
|
+
const match = regExpStr.match(/^\/(.+)\/([gimsuy]*)$/);
|
|
19
|
+
if (match) {
|
|
20
|
+
return new RegExp(match[1], match[2]);
|
|
21
|
+
}
|
|
22
|
+
return new RegExp(regExpStr);
|
|
23
|
+
} catch {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
const validateFn = function(validatorName, rule, value, defaultErrorMsg) {
|
|
28
|
+
try {
|
|
29
|
+
if (isNull(value) || typeof value === "string" && value.length <= 0) {
|
|
30
|
+
return Promise.resolve();
|
|
31
|
+
}
|
|
32
|
+
const reg = getRegExp(validatorName);
|
|
33
|
+
if (!reg) {
|
|
34
|
+
return Promise.resolve();
|
|
35
|
+
}
|
|
36
|
+
if (!reg.test(String(value))) {
|
|
37
|
+
const errTxt = rule.errorMsg || defaultErrorMsg;
|
|
38
|
+
return Promise.reject(errTxt);
|
|
39
|
+
} else {
|
|
40
|
+
return Promise.resolve();
|
|
41
|
+
}
|
|
42
|
+
} catch (error) {
|
|
43
|
+
return Promise.resolve();
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
const FormValidators = {
|
|
47
|
+
/* 数字 */
|
|
48
|
+
number(rule, value) {
|
|
49
|
+
return validateFn("number", rule, value, "[" + rule.label + "]包含非数字字符");
|
|
50
|
+
},
|
|
51
|
+
/* 字母 */
|
|
52
|
+
letter(rule, value) {
|
|
53
|
+
return validateFn("letter", rule, value, "[" + rule.label + "]包含非字母字符");
|
|
54
|
+
},
|
|
55
|
+
/* 字母和数字 */
|
|
56
|
+
letterAndNumber(rule, value) {
|
|
57
|
+
return validateFn("letterAndNumber", rule, value, "[" + rule.label + "]只能输入字母或数字");
|
|
58
|
+
},
|
|
59
|
+
/* 手机号码 */
|
|
60
|
+
mobilePhone(rule, value) {
|
|
61
|
+
return validateFn("mobilePhone", rule, value, "[" + rule.label + "]手机号码格式有误");
|
|
62
|
+
},
|
|
63
|
+
/* 禁止空白字符开头 */
|
|
64
|
+
noBlankStart(_rule, _value) {
|
|
65
|
+
},
|
|
66
|
+
/* 禁止空白字符结尾 */
|
|
67
|
+
noBlankEnd(_rule, _value) {
|
|
68
|
+
},
|
|
69
|
+
/* 字母开头,仅可包含数字 */
|
|
70
|
+
letterStartNumberIncluded(rule, value) {
|
|
71
|
+
return validateFn(
|
|
72
|
+
"letterStartNumberIncluded",
|
|
73
|
+
rule,
|
|
74
|
+
value,
|
|
75
|
+
"[" + rule.label + "]必须以字母开头,可包含数字"
|
|
76
|
+
);
|
|
77
|
+
},
|
|
78
|
+
/* 禁止中文输入 */
|
|
79
|
+
noChinese(rule, value) {
|
|
80
|
+
return validateFn("noChinese", rule, value, "[" + rule.label + "]不可输入中文字符");
|
|
81
|
+
},
|
|
82
|
+
/* 必须中文输入 */
|
|
83
|
+
chinese(rule, value) {
|
|
84
|
+
return validateFn("chinese", rule, value, "[" + rule.label + "]只能输入中文字符");
|
|
85
|
+
},
|
|
86
|
+
/* 电子邮箱 */
|
|
87
|
+
email(rule, value) {
|
|
88
|
+
return validateFn("email", rule, value, "[" + rule.label + "]邮箱格式有误");
|
|
89
|
+
},
|
|
90
|
+
/* URL网址 */
|
|
91
|
+
url(rule, value) {
|
|
92
|
+
return validateFn("url", rule, value, "[" + rule.label + "]URL格式有误");
|
|
93
|
+
},
|
|
94
|
+
regExp(rule, value) {
|
|
95
|
+
if (isNull(value) || typeof value === "string" && value.length <= 0) {
|
|
96
|
+
return Promise.resolve();
|
|
97
|
+
}
|
|
98
|
+
const pattern = parseRegExpString(rule.regExp || "");
|
|
99
|
+
if (!pattern) {
|
|
100
|
+
return Promise.resolve();
|
|
101
|
+
}
|
|
102
|
+
if (!pattern.test(String(value))) {
|
|
103
|
+
const errTxt = rule.errorMsg || "[" + rule.label + "]invalid value";
|
|
104
|
+
return Promise.reject(errTxt);
|
|
105
|
+
} else {
|
|
106
|
+
return Promise.resolve();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
export {
|
|
111
|
+
FormValidators as default,
|
|
112
|
+
getRegExp
|
|
113
|
+
};
|
|
114
|
+
//# sourceMappingURL=validators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validators.js","sources":["../../../../../core/src/utils/validators.ts"],"sourcesContent":["import { isNull } from './util';\n\ntype RegExpName =\n | 'number'\n | 'letter'\n | 'letterAndNumber'\n | 'mobilePhone'\n | 'letterStartNumberIncluded'\n | 'noChinese'\n | 'chinese'\n | 'email'\n | 'url';\n\ninterface ValidationRule {\n label?: string;\n errorMsg?: string;\n regExp?: string;\n [key: string]: unknown;\n}\n\n// 直接存储 RegExp 对象,避免使用 eval\nconst commonRegExp: Record<RegExpName, RegExp> = {\n number: /^[-]?\\d+(\\.\\d+)?$/,\n letter: /^[A-Za-z]+$/,\n letterAndNumber: /^[A-Za-z0-9]+$/,\n mobilePhone: /^[1][3-9][0-9]{9}$/,\n letterStartNumberIncluded: /^[A-Za-z]+[A-Za-z\\d]*$/,\n noChinese: /^[^\\u4e00-\\u9fa5]+$/,\n chinese: /^[\\u4e00-\\u9fa5]+$/,\n email: /^([-_A-Za-z0-9.]+)@([_A-Za-z0-9]+\\.)+[A-Za-z0-9]{2,3}$/,\n url: /^([hH][tT]{2}[pP]:\\/\\/|[hH][tT]{2}[pP][sS]:\\/\\/)(([A-Za-z0-9-~]+)\\.)+([A-Za-z0-9-~\\/])+$/\n};\n\nexport const getRegExp = function (validatorName: RegExpName): RegExp | undefined {\n return commonRegExp[validatorName];\n};\n\n/**\n * 将正则表达式字符串转换为 RegExp 对象\n * 支持格式: '/pattern/flags' 或 'pattern'\n */\nconst parseRegExpString = (regExpStr: string): RegExp | null => {\n try {\n // 处理 /pattern/flags 格式\n const match = regExpStr.match(/^\\/(.+)\\/([gimsuy]*)$/);\n if (match) {\n return new RegExp(match[1], match[2]);\n }\n // 普通字符串作为 pattern\n return new RegExp(regExpStr);\n } catch {\n return null;\n }\n};\n\nconst validateFn = function (\n validatorName: RegExpName,\n rule: ValidationRule,\n value: unknown,\n defaultErrorMsg: string\n): Promise<void> {\n try {\n // 空值不校验\n if (isNull(value) || (typeof value === 'string' && value.length <= 0)) {\n return Promise.resolve();\n }\n\n const reg = getRegExp(validatorName);\n if (!reg) {\n return Promise.resolve();\n }\n\n if (!reg.test(String(value))) {\n const errTxt = rule.errorMsg || defaultErrorMsg;\n return Promise.reject(errTxt);\n } else {\n return Promise.resolve();\n }\n } catch (error) {\n return Promise.resolve();\n }\n};\n\ntype ValidatorFn = (rule: ValidationRule, value: unknown) => Promise<void> | void;\n\ninterface FormValidatorsType {\n number: ValidatorFn;\n letter: ValidatorFn;\n letterAndNumber: ValidatorFn;\n mobilePhone: ValidatorFn;\n noBlankStart: ValidatorFn;\n noBlankEnd: ValidatorFn;\n letterStartNumberIncluded: ValidatorFn;\n noChinese: ValidatorFn;\n chinese: ValidatorFn;\n email: ValidatorFn;\n url: ValidatorFn;\n regExp: ValidatorFn;\n}\n\nconst FormValidators: FormValidatorsType = {\n /* 数字 */\n number(rule: ValidationRule, value: unknown): Promise<void> {\n return validateFn('number', rule, value, '[' + rule.label + ']包含非数字字符');\n },\n\n /* 字母 */\n letter(rule: ValidationRule, value: unknown): Promise<void> {\n return validateFn('letter', rule, value, '[' + rule.label + ']包含非字母字符');\n },\n\n /* 字母和数字 */\n letterAndNumber(rule: ValidationRule, value: unknown): Promise<void> {\n return validateFn('letterAndNumber', rule, value, '[' + rule.label + ']只能输入字母或数字');\n },\n\n /* 手机号码 */\n mobilePhone(rule: ValidationRule, value: unknown): Promise<void> {\n return validateFn('mobilePhone', rule, value, '[' + rule.label + ']手机号码格式有误');\n },\n\n /* 禁止空白字符开头 */\n noBlankStart(_rule: ValidationRule, _value: unknown): void {\n //暂未实现\n },\n\n /* 禁止空白字符结尾 */\n noBlankEnd(_rule: ValidationRule, _value: unknown): void {\n //暂未实现\n },\n\n /* 字母开头,仅可包含数字 */\n letterStartNumberIncluded(rule: ValidationRule, value: unknown): Promise<void> {\n return validateFn(\n 'letterStartNumberIncluded',\n rule,\n value,\n '[' + rule.label + ']必须以字母开头,可包含数字'\n );\n },\n\n /* 禁止中文输入 */\n noChinese(rule: ValidationRule, value: unknown): Promise<void> {\n return validateFn('noChinese', rule, value, '[' + rule.label + ']不可输入中文字符');\n },\n\n /* 必须中文输入 */\n chinese(rule: ValidationRule, value: unknown): Promise<void> {\n return validateFn('chinese', rule, value, '[' + rule.label + ']只能输入中文字符');\n },\n\n /* 电子邮箱 */\n email(rule: ValidationRule, value: unknown): Promise<void> {\n return validateFn('email', rule, value, '[' + rule.label + ']邮箱格式有误');\n },\n\n /* URL网址 */\n url(rule: ValidationRule, value: unknown): Promise<void> {\n return validateFn('url', rule, value, '[' + rule.label + ']URL格式有误');\n },\n\n regExp(rule: ValidationRule, value: unknown): Promise<void> {\n // 空值不校验\n if (isNull(value) || (typeof value === 'string' && value.length <= 0)) {\n return Promise.resolve();\n }\n\n const pattern = parseRegExpString(rule.regExp || '');\n if (!pattern) {\n return Promise.resolve();\n }\n\n if (!pattern.test(String(value))) {\n const errTxt = rule.errorMsg || '[' + rule.label + ']invalid value';\n return Promise.reject(errTxt);\n } else {\n return Promise.resolve();\n }\n }\n};\n\nexport default FormValidators;\n"],"names":[],"mappings":";AAqBA,MAAM,eAA2C;AAAA,EAC7C,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,2BAA2B;AAAA,EAC3B,WAAW;AAAA,EACX,SAAS;AAAA,EACT,OAAO;AAAA,EACP,KAAK;AACT;AAEO,MAAM,YAAY,SAAU,eAA+C;AAC9E,SAAO,aAAa,aAAa;AACrC;AAMA,MAAM,oBAAoB,CAAC,cAAqC;AAC5D,MAAI;AAEA,UAAM,QAAQ,UAAU,MAAM,uBAAuB;AACrD,QAAI,OAAO;AACP,aAAO,IAAI,OAAO,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;AAAA,IACxC;AAEA,WAAO,IAAI,OAAO,SAAS;AAAA,EAC/B,QAAQ;AACJ,WAAO;AAAA,EACX;AACJ;AAEA,MAAM,aAAa,SACf,eACA,MACA,OACA,iBACa;AACb,MAAI;AAEA,QAAI,OAAO,KAAK,KAAM,OAAO,UAAU,YAAY,MAAM,UAAU,GAAI;AACnE,aAAO,QAAQ,QAAA;AAAA,IACnB;AAEA,UAAM,MAAM,UAAU,aAAa;AACnC,QAAI,CAAC,KAAK;AACN,aAAO,QAAQ,QAAA;AAAA,IACnB;AAEA,QAAI,CAAC,IAAI,KAAK,OAAO,KAAK,CAAC,GAAG;AAC1B,YAAM,SAAS,KAAK,YAAY;AAChC,aAAO,QAAQ,OAAO,MAAM;AAAA,IAChC,OAAO;AACH,aAAO,QAAQ,QAAA;AAAA,IACnB;AAAA,EACJ,SAAS,OAAO;AACZ,WAAO,QAAQ,QAAA;AAAA,EACnB;AACJ;AAmBA,MAAM,iBAAqC;AAAA;AAAA,EAEvC,OAAO,MAAsB,OAA+B;AACxD,WAAO,WAAW,UAAU,MAAM,OAAO,MAAM,KAAK,QAAQ,UAAU;AAAA,EAC1E;AAAA;AAAA,EAGA,OAAO,MAAsB,OAA+B;AACxD,WAAO,WAAW,UAAU,MAAM,OAAO,MAAM,KAAK,QAAQ,UAAU;AAAA,EAC1E;AAAA;AAAA,EAGA,gBAAgB,MAAsB,OAA+B;AACjE,WAAO,WAAW,mBAAmB,MAAM,OAAO,MAAM,KAAK,QAAQ,YAAY;AAAA,EACrF;AAAA;AAAA,EAGA,YAAY,MAAsB,OAA+B;AAC7D,WAAO,WAAW,eAAe,MAAM,OAAO,MAAM,KAAK,QAAQ,WAAW;AAAA,EAChF;AAAA;AAAA,EAGA,aAAa,OAAuB,QAAuB;AAAA,EAE3D;AAAA;AAAA,EAGA,WAAW,OAAuB,QAAuB;AAAA,EAEzD;AAAA;AAAA,EAGA,0BAA0B,MAAsB,OAA+B;AAC3E,WAAO;AAAA,MACH;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAM,KAAK,QAAQ;AAAA,IAAA;AAAA,EAE3B;AAAA;AAAA,EAGA,UAAU,MAAsB,OAA+B;AAC3D,WAAO,WAAW,aAAa,MAAM,OAAO,MAAM,KAAK,QAAQ,WAAW;AAAA,EAC9E;AAAA;AAAA,EAGA,QAAQ,MAAsB,OAA+B;AACzD,WAAO,WAAW,WAAW,MAAM,OAAO,MAAM,KAAK,QAAQ,WAAW;AAAA,EAC5E;AAAA;AAAA,EAGA,MAAM,MAAsB,OAA+B;AACvD,WAAO,WAAW,SAAS,MAAM,OAAO,MAAM,KAAK,QAAQ,SAAS;AAAA,EACxE;AAAA;AAAA,EAGA,IAAI,MAAsB,OAA+B;AACrD,WAAO,WAAW,OAAO,MAAM,OAAO,MAAM,KAAK,QAAQ,UAAU;AAAA,EACvE;AAAA,EAEA,OAAO,MAAsB,OAA+B;AAExD,QAAI,OAAO,KAAK,KAAM,OAAO,UAAU,YAAY,MAAM,UAAU,GAAI;AACnE,aAAO,QAAQ,QAAA;AAAA,IACnB;AAEA,UAAM,UAAU,kBAAkB,KAAK,UAAU,EAAE;AACnD,QAAI,CAAC,SAAS;AACV,aAAO,QAAQ,QAAA;AAAA,IACnB;AAEA,QAAI,CAAC,QAAQ,KAAK,OAAO,KAAK,CAAC,GAAG;AAC9B,YAAM,SAAS,KAAK,YAAY,MAAM,KAAK,QAAQ;AACnD,aAAO,QAAQ,OAAO,MAAM;AAAA,IAChC,OAAO;AACH,aAAO,QAAQ,QAAA;AAAA,IACnB;AAAA,EACJ;AACJ;"}
|