@daxiangme/form-vue 0.1.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/infrastructure/FormModalShell.vue","../../../node_modules/.pnpm/@iconify+vue@5.0.1_vue@3.5.42_typescript@5.9.3_/node_modules/@iconify/vue/dist/iconify.mjs","../src/infrastructure/FormIcon.vue","../src/composables/use-designer-engine.ts","../src/workbench/workbench-preferences.ts","../src/form/controls/DxFormBlockSubtable.vue","../src/form/controls/DxFormRowSubtable.vue","../../../node_modules/.pnpm/dayjs@1.11.23/node_modules/dayjs/dayjs.min.js","../src/form/controls/DxStepProgress.vue","../src/rendering/DesignerDetailField.vue","../src/rendering/DesignerSignatureField.vue","../src/rendering/DesignerLocalPickerField.vue","../src/rendering/DesignerStaticControl.vue","../src/rendering/DesignerRuntimeNode.vue","../src/rendering/DesignerPreviewForm.vue","../../../node_modules/.pnpm/vue-draggable-plus@0.6.1_@types+sortablejs@1.15.9/node_modules/vue-draggable-plus/dist/vue-draggable-plus.js","../src/workbench/DesignerDropIndicator.vue","../src/workbench/DesignerDropZone.vue","../src/workbench/DesignerGridDropCell.vue","../src/workbench/DesignerNodeFrame.vue","../src/workbench/DesignerTabsFrame.vue","../src/workbench/DesignerCanvasNode.vue","../src/workbench/DesignerOverlayCanvasFrame.vue","../src/workbench/DesignerCanvas.vue","../src/workbench/DesignerEventStepTree.vue","../src/workbench/DesignerExpressionEditor.vue","../src/workbench/DesignerEventFlowWorkbench.vue","../src/workbench/DesignerBehaviorRuleListItem.vue","../src/workbench/DesignerBehaviorRuleWorkbench.vue","../src/workbench/DesignerValidationRuleConfiguration.vue","../src/workbench/DesignerAdvancedBehaviorEditor.vue","../src/workbench/DesignerFieldDefaultValueEditor.vue","../src/workbench/DesignerBatchDefaultEditor.vue","../src/workbench/DesignerCommandBar.vue","../src/workbench/DesignerEventFlowEditor.vue","../src/workbench/DesignerFieldTree.vue","../src/workbench/DesignerGlobalAdvancedEditor.vue","../src/workbench/DesignerOptionsEditor.vue","../src/workbench/DesignerPropertyEditorHost.vue","../src/workbench/DesignerInspector.vue","../src/workbench/DesignerModuleManager.vue","../src/workbench/DesignerOutline.vue","../src/workbench/DesignerPalette.vue","../src/workbench/DesignerQuickGridEditor.vue","../src/composables/local-draft.ts","../src/workbench/DesignerSchemaInspector.vue","../src/FormDesigner.vue","../src/index.ts"],"sourcesContent":["<template>\n <ElDialog\n :model-value=\"modelValue\"\n :title=\"title\"\n :class=\"['daxiang-form-modal', dialogClass]\"\n width=\"var(--daxiang-form-modal-width)\"\n :style=\"modalStyle\"\n :align-center=\"alignCenter\"\n :draggable=\"draggable\"\n :overflow=\"dragOverflow\"\n :body-class=\"bodyClass\"\n :destroy-on-close=\"destroyOnClose\"\n :close-on-click-modal=\"closeOnClickModal && !busy\"\n :close-on-press-escape=\"closeOnPressEscape && !busy\"\n :show-close=\"showClose && !busy\"\n @update:model-value=\"handleModelValueUpdate\"\n @closed=\"emit('closed')\"\n >\n <div v-loading=\"loading\" class=\"daxiang-form-modal__body\">\n <slot />\n </div>\n\n <template v-if=\"showFooter || $slots.footer\" #footer>\n <slot name=\"footer\" :busy=\"busy\" :close=\"requestClose\" :confirm=\"requestConfirm\">\n <ElButton v-if=\"showCancel\" :disabled=\"busy\" @click=\"requestClose\">\n {{ cancelText }}\n </ElButton>\n <ElButton\n v-if=\"showConfirm\"\n type=\"primary\"\n :loading=\"confirmLoading\"\n :disabled=\"confirmDisabled || loading\"\n @click=\"requestConfirm\"\n >\n {{ confirmText }}\n </ElButton>\n </slot>\n </template>\n </ElDialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, type CSSProperties } from 'vue'\n\ndefineOptions({ name: 'FormModalShell' })\n\nconst props = withDefaults(\n defineProps<{\n modelValue: boolean\n title?: string\n dialogClass?: string\n width?: string | number\n maxHeight?: string | number\n loading?: boolean\n confirmLoading?: boolean\n confirmDisabled?: boolean\n showFooter?: boolean\n showCancel?: boolean\n showConfirm?: boolean\n showClose?: boolean\n cancelText?: string\n confirmText?: string\n destroyOnClose?: boolean\n closeOnClickModal?: boolean\n closeOnPressEscape?: boolean\n alignCenter?: boolean\n draggable?: boolean\n dragOverflow?: boolean\n flushContentVertical?: boolean\n }>(),\n {\n title: '',\n dialogClass: '',\n width: 640,\n maxHeight: 'calc(100vh - var(--daxiang-form-space-4) * 2)',\n loading: false,\n confirmLoading: false,\n confirmDisabled: false,\n showFooter: true,\n showCancel: true,\n showConfirm: true,\n showClose: true,\n cancelText: '取消',\n confirmText: '确认',\n destroyOnClose: true,\n closeOnClickModal: true,\n closeOnPressEscape: true,\n alignCenter: true,\n draggable: true,\n dragOverflow: false,\n flushContentVertical: false,\n },\n)\n\nconst emit = defineEmits<{\n 'update:modelValue': [boolean]\n confirm: []\n cancel: []\n closed: []\n}>()\n\nconst busy = computed(() => props.loading || props.confirmLoading)\nconst bodyClass = computed(() =>\n props.flushContentVertical\n ? 'daxiang-form-modal__content daxiang-form-modal__content--flush-vertical'\n : 'daxiang-form-modal__content',\n)\nconst modalStyle = computed<CSSProperties>(() => ({\n '--daxiang-form-modal-width': typeof props.width === 'number' ? `${props.width}px` : props.width,\n '--daxiang-form-modal-max-height':\n typeof props.maxHeight === 'number' ? `${props.maxHeight}px` : props.maxHeight,\n}))\n\nfunction requestClose() {\n if (busy.value) return\n emit('cancel')\n emit('update:modelValue', false)\n}\n\nfunction requestConfirm() {\n if (busy.value || props.confirmDisabled) return\n emit('confirm')\n}\n\nfunction handleModelValueUpdate(value: boolean) {\n if (value) {\n emit('update:modelValue', true)\n return\n }\n requestClose()\n}\n\ndefineExpose({ busy, requestClose, requestConfirm })\n</script>\n\n<style>\n.daxiang-form-modal.el-dialog {\n display: flex;\n flex-direction: column;\n max-width: calc(100vw - var(--daxiang-form-space-4) * 2);\n max-height: var(--daxiang-form-modal-max-height);\n overflow: hidden;\n}\n\n.daxiang-form-modal .el-dialog__header,\n.daxiang-form-modal .el-dialog__footer {\n flex: 0 0 auto;\n}\n\n.daxiang-form-modal .el-dialog__body.daxiang-form-modal__content {\n display: flex;\n flex: 1 1 auto;\n min-height: 0;\n overflow: hidden;\n}\n\n.daxiang-form-modal .el-dialog__body.daxiang-form-modal__content--flush-vertical {\n padding-block: 0;\n}\n\n.daxiang-form-modal .daxiang-form-modal__body {\n flex: 1 1 auto;\n min-height: 0;\n overflow: auto;\n}\n</style>\n","import { h, defineComponent, ref, shallowRef, onMounted, watch, onUnmounted, nextTick } from 'vue';\n\n/**\n* Expression to test part of icon name.\n*\n* Used when loading icons from Iconify API due to project naming convension.\n* Ignored when using custom icon sets - convension does not apply.\n*/\nconst matchIconName = /^[a-z0-9]+(-[a-z0-9]+)*$/;\n/**\n* Convert string icon name to IconifyIconName object.\n*/\nconst stringToIcon = (value, validate, allowSimpleName, provider = \"\") => {\n\tconst colonSeparated = value.split(\":\");\n\tif (value.slice(0, 1) === \"@\") {\n\t\tif (colonSeparated.length < 2 || colonSeparated.length > 3) return null;\n\t\tprovider = colonSeparated.shift().slice(1);\n\t}\n\tif (colonSeparated.length > 3 || !colonSeparated.length) return null;\n\tif (colonSeparated.length > 1) {\n\t\tconst name = colonSeparated.pop();\n\t\tconst prefix = colonSeparated.pop();\n\t\tconst result = {\n\t\t\tprovider: colonSeparated.length > 0 ? colonSeparated[0] : provider,\n\t\t\tprefix,\n\t\t\tname\n\t\t};\n\t\treturn validate && !validateIconName(result) ? null : result;\n\t}\n\tconst name = colonSeparated[0];\n\tconst dashSeparated = name.split(\"-\");\n\tif (dashSeparated.length > 1) {\n\t\tconst result = {\n\t\t\tprovider,\n\t\t\tprefix: dashSeparated.shift(),\n\t\t\tname: dashSeparated.join(\"-\")\n\t\t};\n\t\treturn validate && !validateIconName(result) ? null : result;\n\t}\n\tif (allowSimpleName && provider === \"\") {\n\t\tconst result = {\n\t\t\tprovider,\n\t\t\tprefix: \"\",\n\t\t\tname\n\t\t};\n\t\treturn validate && !validateIconName(result, allowSimpleName) ? null : result;\n\t}\n\treturn null;\n};\n/**\n* Check if icon is valid.\n*\n* This function is not part of stringToIcon because validation is not needed for most code.\n*/\nconst validateIconName = (icon, allowSimpleName) => {\n\tif (!icon) return false;\n\treturn !!((allowSimpleName && icon.prefix === \"\" || !!icon.prefix) && !!icon.name);\n};\n\n/**\n* Resolve icon set icons\n*\n* Returns parent icon for each icon\n*/\nfunction getIconsTree(data, names) {\n\tconst icons = data.icons;\n\tconst aliases = data.aliases || Object.create(null);\n\tconst resolved = Object.create(null);\n\tfunction resolve(name) {\n\t\tif (icons[name]) return resolved[name] = [];\n\t\tif (!(name in resolved)) {\n\t\t\tresolved[name] = null;\n\t\t\tconst parent = aliases[name] && aliases[name].parent;\n\t\t\tconst value = parent && resolve(parent);\n\t\t\tif (value) resolved[name] = [parent].concat(value);\n\t\t}\n\t\treturn resolved[name];\n\t}\n\t(Object.keys(icons).concat(Object.keys(aliases))).forEach(resolve);\n\treturn resolved;\n}\n\n/** Default values for dimensions */\nconst defaultIconDimensions = Object.freeze({\n\tleft: 0,\n\ttop: 0,\n\twidth: 16,\n\theight: 16\n});\n/** Default values for transformations */\nconst defaultIconTransformations = Object.freeze({\n\trotate: 0,\n\tvFlip: false,\n\thFlip: false\n});\n/** Default values for all optional IconifyIcon properties */\nconst defaultIconProps = Object.freeze({\n\t...defaultIconDimensions,\n\t...defaultIconTransformations\n});\n/** Default values for all properties used in ExtendedIconifyIcon */\nconst defaultExtendedIconProps = Object.freeze({\n\t...defaultIconProps,\n\tbody: \"\",\n\thidden: false\n});\n\n/**\n* Merge transformations\n*/\nfunction mergeIconTransformations(obj1, obj2) {\n\tconst result = {};\n\tif (!obj1.hFlip !== !obj2.hFlip) result.hFlip = true;\n\tif (!obj1.vFlip !== !obj2.vFlip) result.vFlip = true;\n\tconst rotate = ((obj1.rotate || 0) + (obj2.rotate || 0)) % 4;\n\tif (rotate) result.rotate = rotate;\n\treturn result;\n}\n\n/**\n* Merge icon and alias\n*\n* Can also be used to merge default values and icon\n*/\nfunction mergeIconData(parent, child) {\n\tconst result = mergeIconTransformations(parent, child);\n\tfor (const key in defaultExtendedIconProps) if (key in defaultIconTransformations) {\n\t\tif (key in parent && !(key in result)) result[key] = defaultIconTransformations[key];\n\t} else if (key in child) result[key] = child[key];\n\telse if (key in parent) result[key] = parent[key];\n\treturn result;\n}\n\n/**\n* Get icon data, using prepared aliases tree\n*/\nfunction internalGetIconData(data, name, tree) {\n\tconst icons = data.icons;\n\tconst aliases = data.aliases || Object.create(null);\n\tlet currentProps = {};\n\tfunction parse(name) {\n\t\tcurrentProps = mergeIconData(icons[name] || aliases[name], currentProps);\n\t}\n\tparse(name);\n\ttree.forEach(parse);\n\treturn mergeIconData(data, currentProps);\n}\n\n/**\n* Extract icons from an icon set\n*\n* Returns list of icons that were found in icon set\n*/\nfunction parseIconSet(data, callback) {\n\tconst names = [];\n\tif (typeof data !== \"object\" || typeof data.icons !== \"object\") return names;\n\tif (data.not_found instanceof Array) data.not_found.forEach((name) => {\n\t\tcallback(name, null);\n\t\tnames.push(name);\n\t});\n\tconst tree = getIconsTree(data);\n\tfor (const name in tree) {\n\t\tconst item = tree[name];\n\t\tif (item) {\n\t\t\tcallback(name, internalGetIconData(data, name, item));\n\t\t\tnames.push(name);\n\t\t}\n\t}\n\treturn names;\n}\n\n/**\n* Optional properties\n*/\nconst optionalPropertyDefaults = {\n\tprovider: \"\",\n\taliases: {},\n\tnot_found: {},\n\t...defaultIconDimensions\n};\n/**\n* Check props\n*/\nfunction checkOptionalProps(item, defaults) {\n\tfor (const prop in defaults) if (prop in item && typeof item[prop] !== typeof defaults[prop]) return false;\n\treturn true;\n}\n/**\n* Validate icon set, return it as IconifyJSON on success, null on failure\n*\n* Unlike validateIconSet(), this function is very basic.\n* It does not throw exceptions, it does not check metadata, it does not fix stuff.\n*/\nfunction quicklyValidateIconSet(obj) {\n\tif (typeof obj !== \"object\" || obj === null) return null;\n\tconst data = obj;\n\tif (typeof data.prefix !== \"string\" || !obj.icons || typeof obj.icons !== \"object\") return null;\n\tif (!checkOptionalProps(obj, optionalPropertyDefaults)) return null;\n\tconst icons = data.icons;\n\tfor (const name in icons) {\n\t\tconst icon = icons[name];\n\t\tif (!name || typeof icon.body !== \"string\" || !checkOptionalProps(icon, defaultExtendedIconProps)) return null;\n\t}\n\tconst aliases = data.aliases || Object.create(null);\n\tfor (const name in aliases) {\n\t\tconst icon = aliases[name];\n\t\tconst parent = icon.parent;\n\t\tif (!name || typeof parent !== \"string\" || !icons[parent] && !aliases[parent] || !checkOptionalProps(icon, defaultExtendedIconProps)) return null;\n\t}\n\treturn data;\n}\n\n/**\n* Storage by provider and prefix\n*/\nconst dataStorage = Object.create(null);\n/**\n* Create new storage\n*/\nfunction newStorage(provider, prefix) {\n\treturn {\n\t\tprovider,\n\t\tprefix,\n\t\ticons: Object.create(null),\n\t\tmissing: /* @__PURE__ */ new Set()\n\t};\n}\n/**\n* Get storage for provider and prefix\n*/\nfunction getStorage(provider, prefix) {\n\tconst providerStorage = dataStorage[provider] || (dataStorage[provider] = Object.create(null));\n\treturn providerStorage[prefix] || (providerStorage[prefix] = newStorage(provider, prefix));\n}\n/**\n* Add icon set to storage\n*\n* Returns array of added icons\n*/\nfunction addIconSet(storage, data) {\n\tif (!quicklyValidateIconSet(data)) return [];\n\treturn parseIconSet(data, (name, icon) => {\n\t\tif (icon) storage.icons[name] = icon;\n\t\telse storage.missing.add(name);\n\t});\n}\n/**\n* Add icon to storage\n*/\nfunction addIconToStorage(storage, name, icon) {\n\ttry {\n\t\tif (typeof icon.body === \"string\") {\n\t\t\tstorage.icons[name] = { ...icon };\n\t\t\treturn true;\n\t\t}\n\t} catch (err) {}\n\treturn false;\n}\n/**\n* List available icons\n*/\nfunction listIcons(provider, prefix) {\n\tlet allIcons = [];\n\t(typeof provider === \"string\" ? [provider] : Object.keys(dataStorage)).forEach((provider) => {\n\t\t(typeof provider === \"string\" && typeof prefix === \"string\" ? [prefix] : Object.keys(dataStorage[provider] || {})).forEach((prefix) => {\n\t\t\tconst storage = getStorage(provider, prefix);\n\t\t\tallIcons = allIcons.concat(Object.keys(storage.icons).map((name) => (provider !== \"\" ? \"@\" + provider + \":\" : \"\") + prefix + \":\" + name));\n\t\t});\n\t});\n\treturn allIcons;\n}\n\n/**\n* Allow storing icons without provider or prefix, making it possible to store icons like \"home\"\n*/\nlet simpleNames = false;\nfunction allowSimpleNames(allow) {\n\tif (typeof allow === \"boolean\") simpleNames = allow;\n\treturn simpleNames;\n}\n/**\n* Get icon data\n*\n* Returns:\n* - IconifyIcon on success, object directly from storage so don't modify it\n* - null if icon is marked as missing (returned in `not_found` property from API, so don't bother sending API requests)\n* - undefined if icon is missing in storage\n*/\nfunction getIconData(name) {\n\tconst icon = typeof name === \"string\" ? stringToIcon(name, true, simpleNames) : name;\n\tif (icon) {\n\t\tconst storage = getStorage(icon.provider, icon.prefix);\n\t\tconst iconName = icon.name;\n\t\treturn storage.icons[iconName] || (storage.missing.has(iconName) ? null : void 0);\n\t}\n}\n/**\n* Add one icon\n*/\nfunction addIcon(name, data) {\n\tconst icon = stringToIcon(name, true, simpleNames);\n\tif (!icon) return false;\n\tconst storage = getStorage(icon.provider, icon.prefix);\n\tif (data) return addIconToStorage(storage, icon.name, data);\n\telse {\n\t\tstorage.missing.add(icon.name);\n\t\treturn true;\n\t}\n}\n/**\n* Add icon set\n*/\nfunction addCollection(data, provider) {\n\tif (typeof data !== \"object\") return false;\n\tif (typeof provider !== \"string\") provider = data.provider || \"\";\n\tif (simpleNames && !provider && !data.prefix) {\n\t\tlet added = false;\n\t\tif (quicklyValidateIconSet(data)) {\n\t\t\tdata.prefix = \"\";\n\t\t\tparseIconSet(data, (name, icon) => {\n\t\t\t\tif (addIcon(name, icon)) added = true;\n\t\t\t});\n\t\t}\n\t\treturn added;\n\t}\n\tconst prefix = data.prefix;\n\tif (!validateIconName({\n\t\tprefix,\n\t\tname: \"a\"\n\t})) return false;\n\treturn !!addIconSet(getStorage(provider, prefix), data);\n}\n/**\n* Check if icon data is available\n*/\nfunction iconLoaded(name) {\n\treturn !!getIconData(name);\n}\n/**\n* Get full icon\n*/\nfunction getIcon(name) {\n\tconst result = getIconData(name);\n\treturn result ? {\n\t\t...defaultIconProps,\n\t\t...result\n\t} : result;\n}\n\n/**\n* Default icon customisations values\n*/\nconst defaultIconSizeCustomisations = Object.freeze({\n\twidth: null,\n\theight: null\n});\nconst defaultIconCustomisations = Object.freeze({\n\t...defaultIconSizeCustomisations,\n\t...defaultIconTransformations\n});\n\n/**\n* Regular expressions for calculating dimensions\n*/\nconst unitsSplit = /(-?[0-9.]*[0-9]+[0-9.]*)/g;\nconst unitsTest = /^-?[0-9.]*[0-9]+[0-9.]*$/g;\nfunction calculateSize(size, ratio, precision) {\n\tif (ratio === 1) return size;\n\tprecision = precision || 100;\n\tif (typeof size === \"number\") return Math.ceil(size * ratio * precision) / precision;\n\tif (typeof size !== \"string\") return size;\n\tconst oldParts = size.split(unitsSplit);\n\tif (oldParts === null || !oldParts.length) return size;\n\tconst newParts = [];\n\tlet code = oldParts.shift();\n\tlet isNumber = unitsTest.test(code);\n\twhile (true) {\n\t\tif (isNumber) {\n\t\t\tconst num = parseFloat(code);\n\t\t\tif (isNaN(num)) newParts.push(code);\n\t\t\telse newParts.push(Math.ceil(num * ratio * precision) / precision);\n\t\t} else newParts.push(code);\n\t\tcode = oldParts.shift();\n\t\tif (code === void 0) return newParts.join(\"\");\n\t\tisNumber = !isNumber;\n\t}\n}\n\nfunction splitSVGDefs(content, tag = \"defs\") {\n\tlet defs = \"\";\n\tconst index = content.indexOf(\"<\" + tag);\n\twhile (index >= 0) {\n\t\tconst start = content.indexOf(\">\", index);\n\t\tconst end = content.indexOf(\"</\" + tag);\n\t\tif (start === -1 || end === -1) break;\n\t\tconst endEnd = content.indexOf(\">\", end);\n\t\tif (endEnd === -1) break;\n\t\tdefs += content.slice(start + 1, end).trim();\n\t\tcontent = content.slice(0, index).trim() + content.slice(endEnd + 1);\n\t}\n\treturn {\n\t\tdefs,\n\t\tcontent\n\t};\n}\n/**\n* Merge defs and content\n*/\nfunction mergeDefsAndContent(defs, content) {\n\treturn defs ? \"<defs>\" + defs + \"</defs>\" + content : content;\n}\n/**\n* Wrap SVG content, without wrapping definitions\n*/\nfunction wrapSVGContent(body, start, end) {\n\tconst split = splitSVGDefs(body);\n\treturn mergeDefsAndContent(split.defs, start + split.content + end);\n}\n\n/**\n* Check if value should be unset. Allows multiple keywords\n*/\nconst isUnsetKeyword = (value) => value === \"unset\" || value === \"undefined\" || value === \"none\";\n/**\n* Get SVG attributes and content from icon + customisations\n*\n* Does not generate style to make it compatible with frameworks that use objects for style, such as React.\n* Instead, it generates 'inline' value. If true, rendering engine should add verticalAlign: -0.125em to icon.\n*\n* Customisations should be normalised by platform specific parser.\n* Result should be converted to <svg> by platform specific parser.\n* Use replaceIDs to generate unique IDs for body.\n*/\nfunction iconToSVG(icon, customisations) {\n\tconst fullIcon = {\n\t\t...defaultIconProps,\n\t\t...icon\n\t};\n\tconst fullCustomisations = {\n\t\t...defaultIconCustomisations,\n\t\t...customisations\n\t};\n\tconst box = {\n\t\tleft: fullIcon.left,\n\t\ttop: fullIcon.top,\n\t\twidth: fullIcon.width,\n\t\theight: fullIcon.height\n\t};\n\tlet body = fullIcon.body;\n\t[fullIcon, fullCustomisations].forEach((props) => {\n\t\tconst transformations = [];\n\t\tconst hFlip = props.hFlip;\n\t\tconst vFlip = props.vFlip;\n\t\tlet rotation = props.rotate;\n\t\tif (hFlip) if (vFlip) rotation += 2;\n\t\telse {\n\t\t\ttransformations.push(\"translate(\" + (box.width + box.left).toString() + \" \" + (0 - box.top).toString() + \")\");\n\t\t\ttransformations.push(\"scale(-1 1)\");\n\t\t\tbox.top = box.left = 0;\n\t\t}\n\t\telse if (vFlip) {\n\t\t\ttransformations.push(\"translate(\" + (0 - box.left).toString() + \" \" + (box.height + box.top).toString() + \")\");\n\t\t\ttransformations.push(\"scale(1 -1)\");\n\t\t\tbox.top = box.left = 0;\n\t\t}\n\t\tlet tempValue;\n\t\tif (rotation < 0) rotation -= Math.floor(rotation / 4) * 4;\n\t\trotation = rotation % 4;\n\t\tswitch (rotation) {\n\t\t\tcase 1:\n\t\t\t\ttempValue = box.height / 2 + box.top;\n\t\t\t\ttransformations.unshift(\"rotate(90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\");\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\ttransformations.unshift(\"rotate(180 \" + (box.width / 2 + box.left).toString() + \" \" + (box.height / 2 + box.top).toString() + \")\");\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\ttempValue = box.width / 2 + box.left;\n\t\t\t\ttransformations.unshift(\"rotate(-90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\");\n\t\t\t\tbreak;\n\t\t}\n\t\tif (rotation % 2 === 1) {\n\t\t\tif (box.left !== box.top) {\n\t\t\t\ttempValue = box.left;\n\t\t\t\tbox.left = box.top;\n\t\t\t\tbox.top = tempValue;\n\t\t\t}\n\t\t\tif (box.width !== box.height) {\n\t\t\t\ttempValue = box.width;\n\t\t\t\tbox.width = box.height;\n\t\t\t\tbox.height = tempValue;\n\t\t\t}\n\t\t}\n\t\tif (transformations.length) body = wrapSVGContent(body, \"<g transform=\\\"\" + transformations.join(\" \") + \"\\\">\", \"</g>\");\n\t});\n\tconst customisationsWidth = fullCustomisations.width;\n\tconst customisationsHeight = fullCustomisations.height;\n\tconst boxWidth = box.width;\n\tconst boxHeight = box.height;\n\tlet width;\n\tlet height;\n\tif (customisationsWidth === null) {\n\t\theight = customisationsHeight === null ? \"1em\" : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n\t\twidth = calculateSize(height, boxWidth / boxHeight);\n\t} else {\n\t\twidth = customisationsWidth === \"auto\" ? boxWidth : customisationsWidth;\n\t\theight = customisationsHeight === null ? calculateSize(width, boxHeight / boxWidth) : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n\t}\n\tconst attributes = {};\n\tconst setAttr = (prop, value) => {\n\t\tif (!isUnsetKeyword(value)) attributes[prop] = value.toString();\n\t};\n\tsetAttr(\"width\", width);\n\tsetAttr(\"height\", height);\n\tconst viewBox = [\n\t\tbox.left,\n\t\tbox.top,\n\t\tboxWidth,\n\t\tboxHeight\n\t];\n\tattributes.viewBox = viewBox.join(\" \");\n\treturn {\n\t\tattributes,\n\t\tviewBox,\n\t\tbody\n\t};\n}\n\n/**\n* Regular expression for finding ids\n*/\nconst regex = /\\sid=\"(\\S+)\"/g;\n/**\n* Counters\n*/\nconst counters = /* @__PURE__ */ new Map();\n/**\n* Get unique new ID\n*/\nfunction nextID(id) {\n\tid = id.replace(/[0-9]+$/, \"\") || \"a\";\n\tconst count = counters.get(id) || 0;\n\tcounters.set(id, count + 1);\n\treturn count ? `${id}${count}` : id;\n}\n/**\n* Replace IDs in SVG output with unique IDs\n*/\nfunction replaceIDs(body) {\n\tconst ids = [];\n\tlet match;\n\twhile (match = regex.exec(body)) ids.push(match[1]);\n\tif (!ids.length) return body;\n\tconst suffix = \"suffix\" + (Math.random() * 16777216 | Date.now()).toString(16);\n\tids.forEach((id) => {\n\t\tconst newID = nextID(id);\n\t\tconst escapedID = id.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\t\tbody = body.replace(new RegExp(\"([#;\\\"])(\" + escapedID + \")([\\\")]|\\\\.[a-z])\", \"g\"), \"$1\" + newID + suffix + \"$3\");\n\t});\n\tbody = body.replace(new RegExp(suffix, \"g\"), \"\");\n\treturn body;\n}\n/**\n* Clear ID cache\n*/\nfunction clearIDCache() {\n\tcounters.clear();\n}\n\n/**\n* Local storate types and entries\n*/\nconst storage = Object.create(null);\n/**\n* Set API module\n*/\nfunction setAPIModule(provider, item) {\n\tstorage[provider] = item;\n}\n/**\n* Get API module\n*/\nfunction getAPIModule(provider) {\n\treturn storage[provider] || storage[\"\"];\n}\n\n/**\n* Create full API configuration from partial data\n*/\nfunction createAPIConfig(source) {\n\tlet resources;\n\tif (typeof source.resources === \"string\") resources = [source.resources];\n\telse {\n\t\tresources = source.resources;\n\t\tif (!(resources instanceof Array) || !resources.length) return null;\n\t}\n\treturn {\n\t\tresources,\n\t\tpath: source.path || \"/\",\n\t\tmaxURL: source.maxURL || 500,\n\t\trotate: source.rotate || 750,\n\t\ttimeout: source.timeout || 5e3,\n\t\trandom: source.random === true,\n\t\tindex: source.index || 0,\n\t\tdataAfterTimeout: source.dataAfterTimeout !== false\n\t};\n}\n/**\n* Local storage\n*/\nconst configStorage = Object.create(null);\n/**\n* Redundancy for API servers.\n*\n* API should have very high uptime because of implemented redundancy at server level, but\n* sometimes bad things happen. On internet 100% uptime is not possible.\n*\n* There could be routing problems. Server might go down for whatever reason, but it takes\n* few minutes to detect that downtime, so during those few minutes API might not be accessible.\n*\n* This script has some redundancy to mitigate possible network issues.\n*\n* If one host cannot be reached in 'rotate' (750 by default) ms, script will try to retrieve\n* data from different host. Hosts have different configurations, pointing to different\n* API servers hosted at different providers.\n*/\nconst fallBackAPISources = [\"https://api.simplesvg.com\", \"https://api.unisvg.com\"];\nconst fallBackAPI = [];\nwhile (fallBackAPISources.length > 0) if (fallBackAPISources.length === 1) fallBackAPI.push(fallBackAPISources.shift());\nelse if (Math.random() > .5) fallBackAPI.push(fallBackAPISources.shift());\nelse fallBackAPI.push(fallBackAPISources.pop());\nconfigStorage[\"\"] = createAPIConfig({ resources: [\"https://api.iconify.design\"].concat(fallBackAPI) });\n/**\n* Add custom config for provider\n*/\nfunction addAPIProvider(provider, customConfig) {\n\tconst config = createAPIConfig(customConfig);\n\tif (config === null) return false;\n\tconfigStorage[provider] = config;\n\treturn true;\n}\n/**\n* Get API configuration\n*/\nfunction getAPIConfig(provider) {\n\treturn configStorage[provider];\n}\n/**\n* List API providers\n*/\nfunction listAPIProviders() {\n\treturn Object.keys(configStorage);\n}\n\nconst detectFetch = () => {\n\tlet callback;\n\ttry {\n\t\tcallback = fetch;\n\t\tif (typeof callback === \"function\") return callback;\n\t} catch (err) {}\n};\n/**\n* Fetch function\n*/\nlet fetchModule = detectFetch();\n/**\n* Set custom fetch() function\n*/\nfunction setFetch(fetch) {\n\tfetchModule = fetch;\n}\n/**\n* Get fetch() function. Used by Icon Finder Core\n*/\nfunction getFetch() {\n\treturn fetchModule;\n}\n/**\n* Calculate maximum icons list length for prefix\n*/\nfunction calculateMaxLength(provider, prefix) {\n\tconst config = getAPIConfig(provider);\n\tif (!config) return 0;\n\tlet result;\n\tif (!config.maxURL) result = 0;\n\telse {\n\t\tlet maxHostLength = 0;\n\t\tconfig.resources.forEach((item) => {\n\t\t\tmaxHostLength = Math.max(maxHostLength, item.length);\n\t\t});\n\t\tconst url = prefix + \".json?icons=\";\n\t\tresult = config.maxURL - maxHostLength - config.path.length - url.length;\n\t}\n\treturn result;\n}\n/**\n* Should query be aborted, based on last HTTP status\n*/\nfunction shouldAbort(status) {\n\treturn status === 404;\n}\n/**\n* Prepare params\n*/\nconst prepare = (provider, prefix, icons) => {\n\tconst results = [];\n\tconst maxLength = calculateMaxLength(provider, prefix);\n\tconst type = \"icons\";\n\tlet item = {\n\t\ttype,\n\t\tprovider,\n\t\tprefix,\n\t\ticons: []\n\t};\n\tlet length = 0;\n\ticons.forEach((name, index) => {\n\t\tlength += name.length + 1;\n\t\tif (length >= maxLength && index > 0) {\n\t\t\tresults.push(item);\n\t\t\titem = {\n\t\t\t\ttype,\n\t\t\t\tprovider,\n\t\t\t\tprefix,\n\t\t\t\ticons: []\n\t\t\t};\n\t\t\tlength = name.length;\n\t\t}\n\t\titem.icons.push(name);\n\t});\n\tresults.push(item);\n\treturn results;\n};\n/**\n* Get path\n*/\nfunction getPath(provider) {\n\tif (typeof provider === \"string\") {\n\t\tconst config = getAPIConfig(provider);\n\t\tif (config) return config.path;\n\t}\n\treturn \"/\";\n}\n/**\n* Load icons\n*/\nconst send = (host, params, callback) => {\n\tif (!fetchModule) {\n\t\tcallback(\"abort\", 424);\n\t\treturn;\n\t}\n\tlet path = getPath(params.provider);\n\tswitch (params.type) {\n\t\tcase \"icons\": {\n\t\t\tconst prefix = params.prefix;\n\t\t\tconst iconsList = params.icons.join(\",\");\n\t\t\tconst urlParams = new URLSearchParams({ icons: iconsList });\n\t\t\tpath += prefix + \".json?\" + urlParams.toString();\n\t\t\tbreak;\n\t\t}\n\t\tcase \"custom\": {\n\t\t\tconst uri = params.uri;\n\t\t\tpath += uri.slice(0, 1) === \"/\" ? uri.slice(1) : uri;\n\t\t\tbreak;\n\t\t}\n\t\tdefault:\n\t\t\tcallback(\"abort\", 400);\n\t\t\treturn;\n\t}\n\tlet defaultError = 503;\n\tfetchModule(host + path).then((response) => {\n\t\tconst status = response.status;\n\t\tif (status !== 200) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tcallback(shouldAbort(status) ? \"abort\" : \"next\", status);\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tdefaultError = 501;\n\t\treturn response.json();\n\t}).then((data) => {\n\t\tif (typeof data !== \"object\" || data === null) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (data === 404) callback(\"abort\", data);\n\t\t\t\telse callback(\"next\", defaultError);\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tsetTimeout(() => {\n\t\t\tcallback(\"success\", data);\n\t\t});\n\t}).catch(() => {\n\t\tcallback(\"next\", defaultError);\n\t});\n};\n/**\n* Export module\n*/\nconst fetchAPIModule = {\n\tprepare,\n\tsend\n};\n\n/**\n* Remove callback\n*/\nfunction removeCallback(storages, id) {\n\tstorages.forEach((storage) => {\n\t\tconst items = storage.loaderCallbacks;\n\t\tif (items) storage.loaderCallbacks = items.filter((row) => row.id !== id);\n\t});\n}\n/**\n* Update all callbacks for provider and prefix\n*/\nfunction updateCallbacks(storage) {\n\tif (!storage.pendingCallbacksFlag) {\n\t\tstorage.pendingCallbacksFlag = true;\n\t\tsetTimeout(() => {\n\t\t\tstorage.pendingCallbacksFlag = false;\n\t\t\tconst items = storage.loaderCallbacks ? storage.loaderCallbacks.slice(0) : [];\n\t\t\tif (!items.length) return;\n\t\t\tlet hasPending = false;\n\t\t\tconst provider = storage.provider;\n\t\t\tconst prefix = storage.prefix;\n\t\t\titems.forEach((item) => {\n\t\t\t\tconst icons = item.icons;\n\t\t\t\tconst oldLength = icons.pending.length;\n\t\t\t\ticons.pending = icons.pending.filter((icon) => {\n\t\t\t\t\tif (icon.prefix !== prefix) return true;\n\t\t\t\t\tconst name = icon.name;\n\t\t\t\t\tif (storage.icons[name]) icons.loaded.push({\n\t\t\t\t\t\tprovider,\n\t\t\t\t\t\tprefix,\n\t\t\t\t\t\tname\n\t\t\t\t\t});\n\t\t\t\t\telse if (storage.missing.has(name)) icons.missing.push({\n\t\t\t\t\t\tprovider,\n\t\t\t\t\t\tprefix,\n\t\t\t\t\t\tname\n\t\t\t\t\t});\n\t\t\t\t\telse {\n\t\t\t\t\t\thasPending = true;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t\tif (icons.pending.length !== oldLength) {\n\t\t\t\t\tif (!hasPending) removeCallback([storage], item.id);\n\t\t\t\t\titem.callback(icons.loaded.slice(0), icons.missing.slice(0), icons.pending.slice(0), item.abort);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n}\n/**\n* Unique id counter for callbacks\n*/\nlet idCounter = 0;\n/**\n* Add callback\n*/\nfunction storeCallback(callback, icons, pendingSources) {\n\tconst id = idCounter++;\n\tconst abort = removeCallback.bind(null, pendingSources, id);\n\tif (!icons.pending.length) return abort;\n\tconst item = {\n\t\tid,\n\t\ticons,\n\t\tcallback,\n\t\tabort\n\t};\n\tpendingSources.forEach((storage) => {\n\t\t(storage.loaderCallbacks || (storage.loaderCallbacks = [])).push(item);\n\t});\n\treturn abort;\n}\n\n/**\n* Check if icons have been loaded\n*/\nfunction sortIcons(icons) {\n\tconst result = {\n\t\tloaded: [],\n\t\tmissing: [],\n\t\tpending: []\n\t};\n\tconst storage = Object.create(null);\n\ticons.sort((a, b) => {\n\t\tif (a.provider !== b.provider) return a.provider.localeCompare(b.provider);\n\t\tif (a.prefix !== b.prefix) return a.prefix.localeCompare(b.prefix);\n\t\treturn a.name.localeCompare(b.name);\n\t});\n\tlet lastIcon = {\n\t\tprovider: \"\",\n\t\tprefix: \"\",\n\t\tname: \"\"\n\t};\n\ticons.forEach((icon) => {\n\t\tif (lastIcon.name === icon.name && lastIcon.prefix === icon.prefix && lastIcon.provider === icon.provider) return;\n\t\tlastIcon = icon;\n\t\tconst provider = icon.provider;\n\t\tconst prefix = icon.prefix;\n\t\tconst name = icon.name;\n\t\tconst providerStorage = storage[provider] || (storage[provider] = Object.create(null));\n\t\tconst localStorage = providerStorage[prefix] || (providerStorage[prefix] = getStorage(provider, prefix));\n\t\tlet list;\n\t\tif (name in localStorage.icons) list = result.loaded;\n\t\telse if (prefix === \"\" || localStorage.missing.has(name)) list = result.missing;\n\t\telse list = result.pending;\n\t\tconst item = {\n\t\t\tprovider,\n\t\t\tprefix,\n\t\t\tname\n\t\t};\n\t\tlist.push(item);\n\t});\n\treturn result;\n}\n\n/**\n* Convert icons list from string/icon mix to icons and validate them\n*/\nfunction listToIcons(list, validate = true, simpleNames = false) {\n\tconst result = [];\n\tlist.forEach((item) => {\n\t\tconst icon = typeof item === \"string\" ? stringToIcon(item, validate, simpleNames) : item;\n\t\tif (icon) result.push(icon);\n\t});\n\treturn result;\n}\n\n/**\n* Default RedundancyConfig for API calls\n*/\nconst defaultConfig = {\n\tresources: [],\n\tindex: 0,\n\ttimeout: 2e3,\n\trotate: 750,\n\trandom: false,\n\tdataAfterTimeout: false\n};\n/**\n* Send query\n*/\nfunction sendQuery(config, payload, query, done) {\n\tconst resourcesCount = config.resources.length;\n\tconst startIndex = config.random ? Math.floor(Math.random() * resourcesCount) : config.index;\n\tlet resources;\n\tif (config.random) {\n\t\tlet list = config.resources.slice(0);\n\t\tresources = [];\n\t\twhile (list.length > 1) {\n\t\t\tconst nextIndex = Math.floor(Math.random() * list.length);\n\t\t\tresources.push(list[nextIndex]);\n\t\t\tlist = list.slice(0, nextIndex).concat(list.slice(nextIndex + 1));\n\t\t}\n\t\tresources = resources.concat(list);\n\t} else resources = config.resources.slice(startIndex).concat(config.resources.slice(0, startIndex));\n\tconst startTime = Date.now();\n\tlet status = \"pending\";\n\tlet queriesSent = 0;\n\tlet lastError;\n\tlet timer = null;\n\tlet queue = [];\n\tlet doneCallbacks = [];\n\tif (typeof done === \"function\") doneCallbacks.push(done);\n\t/**\n\t* Reset timer\n\t*/\n\tfunction resetTimer() {\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\ttimer = null;\n\t\t}\n\t}\n\t/**\n\t* Abort everything\n\t*/\n\tfunction abort() {\n\t\tif (status === \"pending\") status = \"aborted\";\n\t\tresetTimer();\n\t\tqueue.forEach((item) => {\n\t\t\tif (item.status === \"pending\") item.status = \"aborted\";\n\t\t});\n\t\tqueue = [];\n\t}\n\t/**\n\t* Add / replace callback to call when execution is complete.\n\t* This can be used to abort pending query implementations when query is complete or aborted.\n\t*/\n\tfunction subscribe(callback, overwrite) {\n\t\tif (overwrite) doneCallbacks = [];\n\t\tif (typeof callback === \"function\") doneCallbacks.push(callback);\n\t}\n\t/**\n\t* Get query status\n\t*/\n\tfunction getQueryStatus() {\n\t\treturn {\n\t\t\tstartTime,\n\t\t\tpayload,\n\t\t\tstatus,\n\t\t\tqueriesSent,\n\t\t\tqueriesPending: queue.length,\n\t\t\tsubscribe,\n\t\t\tabort\n\t\t};\n\t}\n\t/**\n\t* Fail query\n\t*/\n\tfunction failQuery() {\n\t\tstatus = \"failed\";\n\t\tdoneCallbacks.forEach((callback) => {\n\t\t\tcallback(void 0, lastError);\n\t\t});\n\t}\n\t/**\n\t* Clear queue\n\t*/\n\tfunction clearQueue() {\n\t\tqueue.forEach((item) => {\n\t\t\tif (item.status === \"pending\") item.status = \"aborted\";\n\t\t});\n\t\tqueue = [];\n\t}\n\t/**\n\t* Got response from module\n\t*/\n\tfunction moduleResponse(item, response, data) {\n\t\tconst isError = response !== \"success\";\n\t\tqueue = queue.filter((queued) => queued !== item);\n\t\tswitch (status) {\n\t\t\tcase \"pending\": break;\n\t\t\tcase \"failed\":\n\t\t\t\tif (isError || !config.dataAfterTimeout) return;\n\t\t\t\tbreak;\n\t\t\tdefault: return;\n\t\t}\n\t\tif (response === \"abort\") {\n\t\t\tlastError = data;\n\t\t\tfailQuery();\n\t\t\treturn;\n\t\t}\n\t\tif (isError) {\n\t\t\tlastError = data;\n\t\t\tif (!queue.length) if (!resources.length) failQuery();\n\t\t\telse execNext();\n\t\t\treturn;\n\t\t}\n\t\tresetTimer();\n\t\tclearQueue();\n\t\tif (!config.random) {\n\t\t\tconst index = config.resources.indexOf(item.resource);\n\t\t\tif (index !== -1 && index !== config.index) config.index = index;\n\t\t}\n\t\tstatus = \"completed\";\n\t\tdoneCallbacks.forEach((callback) => {\n\t\t\tcallback(data);\n\t\t});\n\t}\n\t/**\n\t* Execute next query\n\t*/\n\tfunction execNext() {\n\t\tif (status !== \"pending\") return;\n\t\tresetTimer();\n\t\tconst resource = resources.shift();\n\t\tif (resource === void 0) {\n\t\t\tif (queue.length) {\n\t\t\t\ttimer = setTimeout(() => {\n\t\t\t\t\tresetTimer();\n\t\t\t\t\tif (status === \"pending\") {\n\t\t\t\t\t\tclearQueue();\n\t\t\t\t\t\tfailQuery();\n\t\t\t\t\t}\n\t\t\t\t}, config.timeout);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfailQuery();\n\t\t\treturn;\n\t\t}\n\t\tconst item = {\n\t\t\tstatus: \"pending\",\n\t\t\tresource,\n\t\t\tcallback: (status, data) => {\n\t\t\t\tmoduleResponse(item, status, data);\n\t\t\t}\n\t\t};\n\t\tqueue.push(item);\n\t\tqueriesSent++;\n\t\ttimer = setTimeout(execNext, config.rotate);\n\t\tquery(resource, payload, item.callback);\n\t}\n\tsetTimeout(execNext);\n\treturn getQueryStatus;\n}\n/**\n* Redundancy instance\n*/\nfunction initRedundancy(cfg) {\n\tconst config = {\n\t\t...defaultConfig,\n\t\t...cfg\n\t};\n\tlet queries = [];\n\t/**\n\t* Remove aborted and completed queries\n\t*/\n\tfunction cleanup() {\n\t\tqueries = queries.filter((item) => item().status === \"pending\");\n\t}\n\t/**\n\t* Send query\n\t*/\n\tfunction query(payload, queryCallback, doneCallback) {\n\t\tconst query = sendQuery(config, payload, queryCallback, (data, error) => {\n\t\t\tcleanup();\n\t\t\tif (doneCallback) doneCallback(data, error);\n\t\t});\n\t\tqueries.push(query);\n\t\treturn query;\n\t}\n\t/**\n\t* Find instance\n\t*/\n\tfunction find(callback) {\n\t\treturn queries.find((value) => {\n\t\t\treturn callback(value);\n\t\t}) || null;\n\t}\n\treturn {\n\t\tquery,\n\t\tfind,\n\t\tsetIndex: (index) => {\n\t\t\tconfig.index = index;\n\t\t},\n\t\tgetIndex: () => config.index,\n\t\tcleanup\n\t};\n}\n\nfunction emptyCallback$1() {}\nconst redundancyCache = Object.create(null);\n/**\n* Get Redundancy instance for provider\n*/\nfunction getRedundancyCache(provider) {\n\tif (!redundancyCache[provider]) {\n\t\tconst config = getAPIConfig(provider);\n\t\tif (!config) return;\n\t\tredundancyCache[provider] = {\n\t\t\tconfig,\n\t\t\tredundancy: initRedundancy(config)\n\t\t};\n\t}\n\treturn redundancyCache[provider];\n}\n/**\n* Send API query\n*/\nfunction sendAPIQuery(target, query, callback) {\n\tlet redundancy;\n\tlet send;\n\tif (typeof target === \"string\") {\n\t\tconst api = getAPIModule(target);\n\t\tif (!api) {\n\t\t\tcallback(void 0, 424);\n\t\t\treturn emptyCallback$1;\n\t\t}\n\t\tsend = api.send;\n\t\tconst cached = getRedundancyCache(target);\n\t\tif (cached) redundancy = cached.redundancy;\n\t} else {\n\t\tconst config = createAPIConfig(target);\n\t\tif (config) {\n\t\t\tredundancy = initRedundancy(config);\n\t\t\tconst api = getAPIModule(target.resources ? target.resources[0] : \"\");\n\t\t\tif (api) send = api.send;\n\t\t}\n\t}\n\tif (!redundancy || !send) {\n\t\tcallback(void 0, 424);\n\t\treturn emptyCallback$1;\n\t}\n\treturn redundancy.query(query, send, callback)().abort;\n}\n\nfunction emptyCallback() {}\n/**\n* Function called when new icons have been loaded\n*/\nfunction loadedNewIcons(storage) {\n\tif (!storage.iconsLoaderFlag) {\n\t\tstorage.iconsLoaderFlag = true;\n\t\tsetTimeout(() => {\n\t\t\tstorage.iconsLoaderFlag = false;\n\t\t\tupdateCallbacks(storage);\n\t\t});\n\t}\n}\n/**\n* Check icon names for API\n*/\nfunction checkIconNamesForAPI(icons) {\n\tconst valid = [];\n\tconst invalid = [];\n\ticons.forEach((name) => {\n\t\t(name.match(matchIconName) ? valid : invalid).push(name);\n\t});\n\treturn {\n\t\tvalid,\n\t\tinvalid\n\t};\n}\n/**\n* Parse loader response\n*/\nfunction parseLoaderResponse(storage, icons, data) {\n\tfunction checkMissing() {\n\t\tconst pending = storage.pendingIcons;\n\t\ticons.forEach((name) => {\n\t\t\tif (pending) pending.delete(name);\n\t\t\tif (!storage.icons[name]) storage.missing.add(name);\n\t\t});\n\t}\n\tif (data && typeof data === \"object\") try {\n\t\tif (!addIconSet(storage, data).length) {\n\t\t\tcheckMissing();\n\t\t\treturn;\n\t\t}\n\t} catch (err) {\n\t\tconsole.error(err);\n\t}\n\tcheckMissing();\n\tloadedNewIcons(storage);\n}\n/**\n* Handle response that can be async\n*/\nfunction parsePossiblyAsyncResponse(response, callback) {\n\tif (response instanceof Promise) response.then((data) => {\n\t\tcallback(data);\n\t}).catch(() => {\n\t\tcallback(null);\n\t});\n\telse callback(response);\n}\n/**\n* Load icons\n*/\nfunction loadNewIcons(storage, icons) {\n\tif (!storage.iconsToLoad) storage.iconsToLoad = icons;\n\telse storage.iconsToLoad = storage.iconsToLoad.concat(icons).sort();\n\tif (!storage.iconsQueueFlag) {\n\t\tstorage.iconsQueueFlag = true;\n\t\tsetTimeout(() => {\n\t\t\tstorage.iconsQueueFlag = false;\n\t\t\tconst { provider, prefix } = storage;\n\t\t\tconst icons = storage.iconsToLoad;\n\t\t\tdelete storage.iconsToLoad;\n\t\t\tif (!icons || !icons.length) return;\n\t\t\tconst customIconLoader = storage.loadIcon;\n\t\t\tif (storage.loadIcons && (icons.length > 1 || !customIconLoader)) {\n\t\t\t\tparsePossiblyAsyncResponse(storage.loadIcons(icons, prefix, provider), (data) => {\n\t\t\t\t\tparseLoaderResponse(storage, icons, data);\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (customIconLoader) {\n\t\t\t\ticons.forEach((name) => {\n\t\t\t\t\tparsePossiblyAsyncResponse(customIconLoader(name, prefix, provider), (data) => {\n\t\t\t\t\t\tparseLoaderResponse(storage, [name], data ? {\n\t\t\t\t\t\t\tprefix,\n\t\t\t\t\t\t\ticons: { [name]: data }\n\t\t\t\t\t\t} : null);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst { valid, invalid } = checkIconNamesForAPI(icons);\n\t\t\tif (invalid.length) parseLoaderResponse(storage, invalid, null);\n\t\t\tif (!valid.length) return;\n\t\t\tconst api = prefix.match(matchIconName) ? getAPIModule(provider) : null;\n\t\t\tif (!api) {\n\t\t\t\tparseLoaderResponse(storage, valid, null);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tapi.prepare(provider, prefix, valid).forEach((item) => {\n\t\t\t\tsendAPIQuery(provider, item, (data) => {\n\t\t\t\t\tparseLoaderResponse(storage, item.icons, data);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}\n}\n/**\n* Load icons\n*/\nconst loadIcons = (icons, callback) => {\n\tconst sortedIcons = sortIcons(listToIcons(icons, true, allowSimpleNames()));\n\tif (!sortedIcons.pending.length) {\n\t\tlet callCallback = true;\n\t\tif (callback) setTimeout(() => {\n\t\t\tif (callCallback) callback(sortedIcons.loaded, sortedIcons.missing, sortedIcons.pending, emptyCallback);\n\t\t});\n\t\treturn () => {\n\t\t\tcallCallback = false;\n\t\t};\n\t}\n\tconst newIcons = Object.create(null);\n\tconst sources = [];\n\tlet lastProvider, lastPrefix;\n\tsortedIcons.pending.forEach((icon) => {\n\t\tconst { provider, prefix } = icon;\n\t\tif (prefix === lastPrefix && provider === lastProvider) return;\n\t\tlastProvider = provider;\n\t\tlastPrefix = prefix;\n\t\tsources.push(getStorage(provider, prefix));\n\t\tconst providerNewIcons = newIcons[provider] || (newIcons[provider] = Object.create(null));\n\t\tif (!providerNewIcons[prefix]) providerNewIcons[prefix] = [];\n\t});\n\tsortedIcons.pending.forEach((icon) => {\n\t\tconst { provider, prefix, name } = icon;\n\t\tconst storage = getStorage(provider, prefix);\n\t\tconst pendingQueue = storage.pendingIcons || (storage.pendingIcons = /* @__PURE__ */ new Set());\n\t\tif (!pendingQueue.has(name)) {\n\t\t\tpendingQueue.add(name);\n\t\t\tnewIcons[provider][prefix].push(name);\n\t\t}\n\t});\n\tsources.forEach((storage) => {\n\t\tconst list = newIcons[storage.provider][storage.prefix];\n\t\tif (list.length) loadNewIcons(storage, list);\n\t});\n\treturn callback ? storeCallback(callback, sortedIcons, sources) : emptyCallback;\n};\n/**\n* Load one icon using Promise\n*/\nconst loadIcon = (icon) => {\n\treturn new Promise((fulfill, reject) => {\n\t\tconst iconObj = typeof icon === \"string\" ? stringToIcon(icon, true) : icon;\n\t\tif (!iconObj) {\n\t\t\treject(icon);\n\t\t\treturn;\n\t\t}\n\t\tloadIcons([iconObj || icon], (loaded) => {\n\t\t\tif (loaded.length && iconObj) {\n\t\t\t\tconst data = getIconData(iconObj);\n\t\t\t\tif (data) {\n\t\t\t\t\tfulfill({\n\t\t\t\t\t\t...defaultIconProps,\n\t\t\t\t\t\t...data\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\treject(icon);\n\t\t});\n\t});\n};\n\n/**\n* Set custom loader for multiple icons\n*/\nfunction setCustomIconsLoader(loader, prefix, provider) {\n\tgetStorage(provider || \"\", prefix).loadIcons = loader;\n}\n/**\n* Set custom loader for one icon\n*/\nfunction setCustomIconLoader(loader, prefix, provider) {\n\tgetStorage(provider || \"\", prefix).loadIcon = loader;\n}\n\n/**\n* Convert IconifyIconCustomisations to FullIconCustomisations, checking value types\n*/\nfunction mergeCustomisations(defaults, item) {\n\tconst result = { ...defaults };\n\tfor (const key in item) {\n\t\tconst value = item[key];\n\t\tconst valueType = typeof value;\n\t\tif (key in defaultIconSizeCustomisations) {\n\t\t\tif (value === null || value && (valueType === \"string\" || valueType === \"number\")) result[key] = value;\n\t\t} else if (valueType === typeof result[key]) result[key] = key === \"rotate\" ? value % 4 : value;\n\t}\n\treturn result;\n}\n\nconst separator = /[\\s,]+/;\n/**\n* Apply \"flip\" string to icon customisations\n*/\nfunction flipFromString(custom, flip) {\n\tflip.split(separator).forEach((str) => {\n\t\tswitch (str.trim()) {\n\t\t\tcase \"horizontal\":\n\t\t\t\tcustom.hFlip = true;\n\t\t\t\tbreak;\n\t\t\tcase \"vertical\":\n\t\t\t\tcustom.vFlip = true;\n\t\t\t\tbreak;\n\t\t}\n\t});\n}\n\n/**\n* Get rotation value\n*/\nfunction rotateFromString(value, defaultValue = 0) {\n\tconst units = value.replace(/^-?[0-9.]*/, \"\");\n\tfunction cleanup(value) {\n\t\twhile (value < 0) value += 4;\n\t\treturn value % 4;\n\t}\n\tif (units === \"\") {\n\t\tconst num = parseInt(value);\n\t\treturn isNaN(num) ? 0 : cleanup(num);\n\t} else if (units !== value) {\n\t\tlet split = 0;\n\t\tswitch (units) {\n\t\t\tcase \"%\":\n\t\t\t\tsplit = 25;\n\t\t\t\tbreak;\n\t\t\tcase \"deg\": split = 90;\n\t\t}\n\t\tif (split) {\n\t\t\tlet num = parseFloat(value.slice(0, value.length - units.length));\n\t\t\tif (isNaN(num)) return 0;\n\t\t\tnum = num / split;\n\t\t\treturn num % 1 === 0 ? cleanup(num) : 0;\n\t\t}\n\t}\n\treturn defaultValue;\n}\n\n/**\n* Generate <svg>\n*/\nfunction iconToHTML(body, attributes) {\n\tlet renderAttribsHTML = body.indexOf(\"xlink:\") === -1 ? \"\" : \" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\"\";\n\tfor (const attr in attributes) renderAttribsHTML += \" \" + attr + \"=\\\"\" + attributes[attr] + \"\\\"\";\n\treturn \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\"\" + renderAttribsHTML + \">\" + body + \"</svg>\";\n}\n\n/**\n* Encode SVG for use in url()\n*\n* Short alternative to encodeURIComponent() that encodes only stuff used in SVG, generating\n* smaller code.\n*/\nfunction encodeSVGforURL(svg) {\n\treturn svg.replace(/\"/g, \"'\").replace(/%/g, \"%25\").replace(/#/g, \"%23\").replace(/</g, \"%3C\").replace(/>/g, \"%3E\").replace(/\\s+/g, \" \");\n}\n/**\n* Generate data: URL from SVG\n*/\nfunction svgToData(svg) {\n\treturn \"data:image/svg+xml,\" + encodeSVGforURL(svg);\n}\n/**\n* Generate url() from SVG\n*/\nfunction svgToURL(svg) {\n\treturn \"url(\\\"\" + svgToData(svg) + \"\\\")\";\n}\n\nconst defaultExtendedIconCustomisations = {\n ...defaultIconCustomisations,\n inline: false,\n};\n\n/**\n * Default SVG attributes\n */\nconst svgDefaults = {\n 'xmlns': 'http://www.w3.org/2000/svg',\n 'xmlns:xlink': 'http://www.w3.org/1999/xlink',\n 'aria-hidden': true,\n 'role': 'img',\n};\n/**\n * Style modes\n */\nconst commonProps = {\n display: 'inline-block',\n};\nconst monotoneProps = {\n backgroundColor: 'currentColor',\n};\nconst coloredProps = {\n backgroundColor: 'transparent',\n};\n// Dynamically add common props to variables above\nconst propsToAdd = {\n Image: 'var(--svg)',\n Repeat: 'no-repeat',\n Size: '100% 100%',\n};\nconst propsToAddTo = {\n webkitMask: monotoneProps,\n mask: monotoneProps,\n background: coloredProps,\n};\nfor (const prefix in propsToAddTo) {\n const list = propsToAddTo[prefix];\n for (const prop in propsToAdd) {\n list[prefix + prop] = propsToAdd[prop];\n }\n}\n/**\n * Aliases for customisations.\n * In Vue 'v-' properties are reserved, so v-flip must be renamed\n */\nconst customisationAliases = {};\n['horizontal', 'vertical'].forEach((prefix) => {\n const attr = prefix.slice(0, 1) + 'Flip';\n // vertical-flip\n customisationAliases[prefix + '-flip'] = attr;\n // v-flip\n customisationAliases[prefix.slice(0, 1) + '-flip'] = attr;\n // verticalFlip\n customisationAliases[prefix + 'Flip'] = attr;\n});\n/**\n * Fix size: add 'px' to numbers\n */\nfunction fixSize(value) {\n return value + (value.match(/^[-0-9.]+$/) ? 'px' : '');\n}\n/**\n * Render icon\n */\nconst render = (\n// Icon must be validated before calling this function\nicon, \n// Partial properties\nprops) => {\n // Split properties\n const customisations = mergeCustomisations(defaultExtendedIconCustomisations, props);\n const componentProps = { ...svgDefaults };\n // Check mode\n const mode = props.mode || 'svg';\n // Copy style\n const style = {};\n const propsStyle = props.style;\n const customStyle = typeof propsStyle === 'object' && !(propsStyle instanceof Array)\n ? propsStyle\n : {};\n // Get element properties\n for (let key in props) {\n const value = props[key];\n if (value === void 0) {\n continue;\n }\n switch (key) {\n // Properties to ignore\n case 'icon':\n case 'style':\n case 'onLoad':\n case 'mode':\n case 'ssr':\n case 'customise':\n break;\n // Boolean attributes\n case 'inline':\n case 'hFlip':\n case 'vFlip':\n customisations[key] =\n value === true || value === 'true' || value === 1;\n break;\n // Flip as string: 'horizontal,vertical'\n case 'flip':\n if (typeof value === 'string') {\n flipFromString(customisations, value);\n }\n break;\n // Color: override style\n case 'color':\n style.color = value;\n break;\n // Rotation as string\n case 'rotate':\n if (typeof value === 'string') {\n customisations[key] = rotateFromString(value);\n }\n else if (typeof value === 'number') {\n customisations[key] = value;\n }\n break;\n // Remove aria-hidden\n case 'ariaHidden':\n case 'aria-hidden':\n // Vue transforms 'aria-hidden' property to 'ariaHidden'\n if (value !== true && value !== 'true') {\n delete componentProps['aria-hidden'];\n }\n break;\n default: {\n const alias = customisationAliases[key];\n if (alias) {\n // Aliases for boolean customisations\n if (value === true || value === 'true' || value === 1) {\n customisations[alias] = true;\n }\n }\n else if (defaultExtendedIconCustomisations[key] === void 0) {\n // Copy missing property if it does not exist in customisations\n componentProps[key] = value;\n }\n }\n }\n }\n // Generate icon\n const item = iconToSVG(icon, customisations);\n const renderAttribs = item.attributes;\n // Inline display\n if (customisations.inline) {\n style.verticalAlign = '-0.125em';\n }\n if (mode === 'svg') {\n // Add style\n componentProps.style = {\n ...style,\n ...customStyle,\n };\n // Add icon stuff\n Object.assign(componentProps, renderAttribs);\n // Add innerHTML and style to props\n componentProps['innerHTML'] = replaceIDs(item.body);\n // Render icon\n return h('svg', componentProps);\n }\n // Render <span> with style\n const { body, width, height } = icon;\n const useMask = mode === 'mask' ||\n (mode === 'bg' ? false : body.indexOf('currentColor') !== -1);\n // Generate SVG\n const html = iconToHTML(body, {\n ...renderAttribs,\n width: width + '',\n height: height + '',\n });\n // Generate style\n componentProps.style = {\n ...style,\n '--svg': svgToURL(html),\n 'width': fixSize(renderAttribs.width),\n 'height': fixSize(renderAttribs.height),\n ...commonProps,\n ...(useMask ? monotoneProps : coloredProps),\n ...customStyle,\n };\n return h('span', componentProps);\n};\n\n/**\n * Initialise stuff\n */\n// Enable short names\nallowSimpleNames(true);\n// Set API module\nsetAPIModule('', fetchAPIModule);\n/**\n * Browser stuff\n */\nif (typeof document !== 'undefined' && typeof window !== 'undefined') {\n const _window = window;\n // Load icons from global \"IconifyPreload\"\n if (_window.IconifyPreload !== void 0) {\n const preload = _window.IconifyPreload;\n const err = 'Invalid IconifyPreload syntax.';\n if (typeof preload === 'object' && preload !== null) {\n (preload instanceof Array ? preload : [preload]).forEach((item) => {\n try {\n if (\n // Check if item is an object and not null/array\n typeof item !== 'object' ||\n item === null ||\n item instanceof Array ||\n // Check for 'icons' and 'prefix'\n typeof item.icons !== 'object' ||\n typeof item.prefix !== 'string' ||\n // Add icon set\n !addCollection(item)) {\n console.error(err);\n }\n }\n catch (e) {\n console.error(err);\n }\n });\n }\n }\n // Set API from global \"IconifyProviders\"\n if (_window.IconifyProviders !== void 0) {\n const providers = _window.IconifyProviders;\n if (typeof providers === 'object' && providers !== null) {\n for (let key in providers) {\n const err = 'IconifyProviders[' + key + '] is invalid.';\n try {\n const value = providers[key];\n if (typeof value !== 'object' ||\n !value ||\n value.resources === void 0) {\n continue;\n }\n if (!addAPIProvider(key, value)) {\n console.error(err);\n }\n }\n catch (e) {\n console.error(err);\n }\n }\n }\n }\n}\n/**\n * Empty icon data, rendered when icon is not available\n */\nconst emptyIcon = {\n ...defaultIconProps,\n body: '',\n};\n/**\n * Component\n */\nconst Icon = defineComponent((props, { emit }) => {\n const loader = ref(null);\n function abortLoading() {\n if (loader.value) {\n loader.value.abort?.();\n loader.value = null;\n }\n }\n // Render state\n const rendering = ref(!!props.ssr);\n const lastRenderedIconName = ref('');\n const iconData = shallowRef(null);\n // Update icon data\n function getIcon() {\n const icon = props.icon;\n // Icon is an object\n if (typeof icon === 'object' &&\n icon !== null &&\n typeof icon.body === 'string') {\n lastRenderedIconName.value = '';\n return {\n data: icon,\n };\n }\n // Check for valid icon name\n let iconName;\n if (typeof icon !== 'string' ||\n (iconName = stringToIcon(icon, false, true)) === null) {\n return null;\n }\n // Load icon\n let data = getIconData(iconName);\n if (!data) {\n // Icon data is not available\n const oldState = loader.value;\n if (!oldState || oldState.name !== icon) {\n // Icon name does not match old loader state\n if (data === null) {\n // Failed to load\n loader.value = {\n name: icon,\n };\n }\n else {\n loader.value = {\n name: icon,\n abort: loadIcons([iconName], updateIconData),\n };\n }\n }\n return null;\n }\n // Icon data is available\n abortLoading();\n if (lastRenderedIconName.value !== icon) {\n lastRenderedIconName.value = icon;\n // Emit on next tick because render will be called on next tick\n nextTick(() => {\n emit('load', icon);\n });\n }\n // Customise icon\n const customise = props.customise;\n if (customise) {\n // Clone data and customise it\n data = Object.assign({}, data);\n const customised = customise(data.body, iconName.name, iconName.prefix, iconName.provider);\n if (typeof customised === 'string') {\n data.body = customised;\n }\n }\n // Add classes\n const classes = ['iconify'];\n if (iconName.prefix !== '') {\n classes.push('iconify--' + iconName.prefix);\n }\n if (iconName.provider !== '') {\n classes.push('iconify--' + iconName.provider);\n }\n return { data, classes };\n }\n function updateIconData() {\n const icon = getIcon();\n if (!icon) {\n iconData.value = null;\n }\n else if (icon.data !== iconData.value?.data) {\n iconData.value = icon;\n }\n }\n // Set icon data\n if (rendering.value) {\n updateIconData();\n }\n else {\n onMounted(() => {\n rendering.value = true;\n updateIconData();\n });\n }\n watch(() => props.icon, updateIconData);\n // Abort loading on unmount\n onUnmounted(abortLoading);\n // Render function\n return () => {\n // Get icon data\n const icon = iconData.value;\n if (!icon) {\n // Icon is not available\n return render(emptyIcon, props);\n }\n // Add classes\n let newProps = props;\n if (icon.classes) {\n newProps = {\n ...props,\n class: icon.classes.join(' '),\n };\n }\n // Render icon\n return render({\n ...defaultIconProps,\n ...icon.data,\n }, newProps);\n };\n}, {\n props: [\n // Icon and render mode\n 'icon',\n 'mode',\n 'ssr',\n // Layout and style\n 'width',\n 'height',\n 'style',\n 'color',\n 'inline',\n // Transformations\n 'rotate',\n 'hFlip',\n 'horizontalFlip',\n 'vFlip',\n 'verticalFlip',\n 'flip',\n // Misc\n 'id',\n 'ariaHidden',\n 'customise',\n 'title',\n ],\n emits: ['load'],\n});\n/**\n * Internal API\n */\nconst _api = {\n getAPIConfig,\n setAPIModule,\n sendAPIQuery,\n setFetch,\n getFetch,\n listAPIProviders,\n};\n\nexport { Icon, _api, addAPIProvider, addCollection, addIcon, iconToSVG as buildIcon, calculateSize, clearIDCache, getIcon, iconLoaded, listIcons, loadIcon, loadIcons, replaceIDs, setCustomIconLoader, setCustomIconsLoader };\n","<template>\n <Icon v-if=\"icon\" :icon=\"icon\" v-bind=\"$attrs\" class=\"daxiang-form-icon\" aria-hidden=\"true\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { icons } from '@iconify-json/ri'\nimport { Icon, addCollection } from '@iconify/vue'\n\ndefineOptions({ name: 'FormIcon', inheritAttrs: false })\n\ndefineProps<{\n /** 随包发布的 Remix Icon 名称,例如 `ri:add-line`。 */\n icon?: string\n}>()\n\naddCollection(icons)\n</script>\n\n<style scoped>\n.daxiang-form-icon {\n display: inline-block;\n width: 1em;\n height: 1em;\n line-height: 1;\n vertical-align: -0.125em;\n}\n</style>\n","import { computed, ref, shallowRef, type Ref } from 'vue'\nimport {\n cloneDesignerDocument,\n decodeDesignerDocument,\n serializeDesignerDocument,\n} from '@daxiangme/form-core'\nimport type { DesignerDocument, DesignerDocumentDecodeResult } from '@daxiangme/form-core'\n\n/** 独立设计器命令引擎。文档之外的路由、接口和权限状态不得进入该模块。 */\nexport interface DesignerEngine {\n document: Ref<DesignerDocument>\n selectedNodeId: Ref<string>\n dirty: Readonly<Ref<boolean>>\n canUndo: Readonly<Ref<boolean>>\n canRedo: Readonly<Ref<boolean>>\n execute: (mutation: (draft: DesignerDocument) => void) => void\n commitExternalMutation: () => void\n replaceDocument: (document: DesignerDocument, keepHistory?: boolean) => void\n undo: () => void\n redo: () => void\n markClean: () => void\n}\n\n/**\n * 创建文档快照驱动的命令引擎。\n *\n * @param initialDocument 初始独立设计文档。\n * @param historyLimit 最大历史快照数量。\n * @returns 可由工作台装配的命令、历史、选择和脏状态。\n */\nexport function useDesignerEngine(\n initialDocument: DesignerDocument,\n historyLimit = 80,\n): DesignerEngine {\n const document = shallowRef(cloneDesignerDocument(initialDocument))\n const selectedNodeId = ref('')\n const initialSnapshot = serializeDesignerDocument(document.value)\n const history = ref<string[]>([initialSnapshot])\n const historyIndex = ref(0)\n const cleanSnapshot = ref(initialSnapshot)\n const dirty = computed(() => serializeDesignerDocument(document.value) !== cleanSnapshot.value)\n const canUndo = computed(() => historyIndex.value > 0)\n const canRedo = computed(() => historyIndex.value < history.value.length - 1)\n\n /** 在克隆草稿中执行原子修改并提交一个历史快照。 */\n function execute(mutation: (draft: DesignerDocument) => void): void {\n const draft = cloneDesignerDocument(document.value)\n mutation(draft)\n commitDocument(draft)\n }\n\n /** 记录拖拽库已经完成的受控数组修改。 */\n function commitExternalMutation(): void {\n commitDocument(cloneDesignerDocument(document.value), true)\n }\n\n /** 替换完整文档;导入保留为可撤销命令,初始化或恢复则重置历史。 */\n function replaceDocument(next: DesignerDocument, keepHistory = false): void {\n if (keepHistory) {\n commitDocument(cloneDesignerDocument(next))\n return\n }\n const snapshot = serializeDesignerDocument(next)\n document.value = cloneDesignerDocument(next)\n history.value = [snapshot]\n historyIndex.value = 0\n cleanSnapshot.value = snapshot\n selectedNodeId.value = ''\n }\n\n /** 撤销最近一次命令。 */\n function undo(): void {\n if (!canUndo.value) return\n historyIndex.value -= 1\n restoreSnapshot(history.value[historyIndex.value]!)\n }\n\n /** 重做最近一次被撤销的命令。 */\n function redo(): void {\n if (!canRedo.value) return\n historyIndex.value += 1\n restoreSnapshot(history.value[historyIndex.value]!)\n }\n\n /** 将当前文档标记为已保存基线。 */\n function markClean(): void {\n cleanSnapshot.value = serializeDesignerDocument(document.value)\n }\n\n function commitDocument(next: DesignerDocument, allowSameSnapshot = false): void {\n const snapshot = serializeDesignerDocument(next)\n const current = history.value[historyIndex.value]\n document.value = next\n if (!allowSameSnapshot && snapshot === current) return\n if (snapshot === current) return\n history.value = history.value.slice(0, historyIndex.value + 1)\n history.value.push(snapshot)\n if (history.value.length > historyLimit) history.value.shift()\n historyIndex.value = history.value.length - 1\n }\n\n function restoreSnapshot(snapshot: string): void {\n const parsed = JSON.parse(snapshot) as unknown\n const decoded = decodeDesignerDocument(parsed)\n if (!decoded.document) return\n document.value = decoded.document\n if (!selectedNodeExists(document.value, selectedNodeId.value)) selectedNodeId.value = ''\n }\n\n return {\n document,\n selectedNodeId,\n dirty,\n canUndo,\n canRedo,\n execute,\n commitExternalMutation,\n replaceDocument,\n undo,\n redo,\n markClean,\n }\n}\n\n/** 将未知导入内容转换为可替换文档。 */\nexport function decodeDesignerImport(source: string): DesignerDocumentDecodeResult {\n try {\n return decodeDesignerDocument(JSON.parse(source) as unknown)\n } catch {\n return {\n diagnostics: [\n { severity: 'ERROR', code: 'IMPORT_JSON', message: '导入文件不是合法 JSON', path: '$' },\n ],\n }\n }\n}\n\nfunction selectedNodeExists(document: DesignerDocument, nodeId: string): boolean {\n if (!nodeId) return false\n const visit = (nodes: DesignerDocument['uiSchema']['root']): boolean => {\n for (const node of nodes) {\n if (node.id === nodeId) return true\n if (node.nodeType === 'CONTAINER' && node.slots.some((slot) => visit(slot.children)))\n return true\n }\n return false\n }\n return [\n document.uiSchema.root,\n ...document.uiSchema.overlays.map((overlay) => overlay.root),\n ].some(visit)\n}\n","/** 设计画布的受控视口档位。 */\nexport type DesignerCanvasViewportPreset =\n 'FIT' | 'PC_1920' | 'PC_1440' | 'PC_1280' | 'PC_1024' | 'MOBILE_440' | 'MOBILE_375'\n\n/** 工作区本地偏好;该对象不属于设计文档、命令历史或脏状态。 */\nexport interface DesignerWorkbenchPreferences {\n version: 1\n leftCollapsed: boolean\n rightCollapsed: boolean\n leftWidth: number\n rightWidth: number\n gridVisible: boolean\n viewport: DesignerCanvasViewportPreset\n}\n\nconst STORAGE_PREFIX = 'daxiang-form:designer-workbench:v1:'\nconst DEFAULT_PREFERENCES: DesignerWorkbenchPreferences = {\n version: 1,\n leftCollapsed: false,\n rightCollapsed: false,\n leftWidth: 280,\n rightWidth: 380,\n gridVisible: true,\n viewport: 'FIT',\n}\n\n/** 读取当前文档隔离的工作区偏好;非法内容回退默认值且不抛出。 */\nexport function loadDesignerWorkbenchPreferences(documentId: string): DesignerWorkbenchPreferences {\n try {\n const raw = window.localStorage.getItem(storageKey(documentId))\n if (!raw) return { ...DEFAULT_PREFERENCES }\n const source = JSON.parse(raw) as unknown\n if (!isRecord(source) || source.version !== 1) return { ...DEFAULT_PREFERENCES }\n return {\n version: 1,\n leftCollapsed: source.leftCollapsed === true,\n rightCollapsed: source.rightCollapsed === true,\n leftWidth: clampNumber(source.leftWidth, 240, 360, DEFAULT_PREFERENCES.leftWidth),\n rightWidth: clampNumber(source.rightWidth, 320, 480, DEFAULT_PREFERENCES.rightWidth),\n gridVisible: source.gridVisible !== false,\n viewport: isViewportPreset(source.viewport) ? source.viewport : 'FIT',\n }\n } catch {\n return { ...DEFAULT_PREFERENCES }\n }\n}\n\n/** 保存工作区偏好;浏览器存储不可用时保持当前会话状态。 */\nexport function saveDesignerWorkbenchPreferences(\n documentId: string,\n preferences: DesignerWorkbenchPreferences,\n): void {\n try {\n window.localStorage.setItem(storageKey(documentId), JSON.stringify(preferences))\n } catch {\n // 工作区偏好不是设计数据,存储失败不阻断编辑与保存。\n }\n}\n\n/** 将视口档位转换为画布设备和固定宽度;FIT 使用 undefined 表示自适应。 */\nexport function resolveDesignerViewportPreset(preset: DesignerCanvasViewportPreset): {\n device: 'desktop' | 'mobile'\n width?: number\n} {\n if (preset === 'FIT') return { device: 'desktop' }\n if (preset === 'MOBILE_440') return { device: 'mobile', width: 440 }\n if (preset === 'MOBILE_375') return { device: 'mobile', width: 375 }\n return {\n device: 'desktop',\n width: Number(preset.slice('PC_'.length)),\n }\n}\n\nfunction storageKey(documentId: string): string {\n return `${STORAGE_PREFIX}${encodeURIComponent(documentId || 'standalone')}`\n}\n\nfunction clampNumber(value: unknown, minimum: number, maximum: number, fallback: number): number {\n return typeof value === 'number' && Number.isFinite(value)\n ? Math.max(minimum, Math.min(maximum, Math.round(value)))\n : fallback\n}\n\nfunction isViewportPreset(value: unknown): value is DesignerCanvasViewportPreset {\n return ['FIT', 'PC_1920', 'PC_1440', 'PC_1280', 'PC_1024', 'MOBILE_440', 'MOBILE_375'].includes(\n String(value),\n )\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n","<template>\n <section class=\"daxiang-form-block-subtable\" :class=\"{ 'is-mobile': device === 'mobile' }\">\n <header v-if=\"title || canCreate\" class=\"daxiang-form-block-subtable__header\">\n <div class=\"daxiang-form-block-subtable__heading\">\n <strong v-if=\"title\">{{ title }}</strong>\n <span>{{ modelValue.length }} 条</span>\n </div>\n <ElButton v-if=\"canCreate\" type=\"primary\" link @click=\"addRow\">\n <DxSvgIcon icon=\"ri:add-line\" />新增区块\n </ElButton>\n </header>\n\n <ElEmpty\n v-if=\"columns.length === 0\"\n class=\"daxiang-form-block-subtable__empty\"\n description=\"请先配置区块字段\"\n :image-size=\"48\"\n />\n <ElEmpty\n v-else-if=\"modelValue.length === 0\"\n class=\"daxiang-form-block-subtable__empty\"\n description=\"暂无明细\"\n :image-size=\"48\"\n />\n\n <div v-else-if=\"mode === 'DETAIL'\" class=\"daxiang-form-block-subtable__blocks is-detail\">\n <article\n v-for=\"(row, index) in modelValue\"\n :key=\"row.rowId\"\n class=\"daxiang-form-block-subtable__block\"\n >\n <header class=\"daxiang-form-block-subtable__block-header\">\n <strong>第 {{ index + 1 }} 条</strong>\n </header>\n <div class=\"daxiang-form-block-subtable__field-grid\">\n <div\n v-for=\"column in columns\"\n :key=\"column.columnId\"\n class=\"daxiang-form-block-subtable__detail-field\"\n >\n <span>{{ column.label }}</span>\n <div>\n <slot\n name=\"detail-field\"\n :row=\"row\"\n :column=\"column\"\n :row-index=\"index\"\n :value=\"row.values[column.fieldId]\"\n >\n {{ displayValue(row.values[column.fieldId]) }}\n </slot>\n </div>\n </div>\n </div>\n </article>\n </div>\n\n <div v-else-if=\"dialogEditing\" class=\"daxiang-form-block-subtable__summaries\">\n <article\n v-for=\"(row, index) in modelValue\"\n :key=\"row.rowId\"\n class=\"daxiang-form-block-subtable__summary\"\n >\n <header class=\"daxiang-form-block-subtable__block-header\">\n <strong>第 {{ index + 1 }} 条</strong>\n <span class=\"daxiang-form-block-subtable__actions\">\n <ElButton link type=\"primary\" @click=\"openEditor(row)\">编辑</ElButton>\n <ElButton v-if=\"allowCopy\" link @click=\"copyRow(row.rowId)\">复制</ElButton>\n <ElButton v-if=\"allowDelete\" link type=\"danger\" @click=\"deleteRow(row.rowId)\"\n >删除</ElButton\n >\n </span>\n </header>\n <div class=\"daxiang-form-block-subtable__summary-grid\">\n <div v-for=\"column in summaryColumns\" :key=\"column.columnId\">\n <span>{{ column.label }}</span>\n <div>\n <slot\n name=\"detail-field\"\n :row=\"row\"\n :column=\"column\"\n :row-index=\"index\"\n :value=\"row.values[column.fieldId]\"\n >\n {{ displayValue(row.values[column.fieldId]) }}\n </slot>\n </div>\n </div>\n </div>\n </article>\n </div>\n\n <div v-else class=\"daxiang-form-block-subtable__blocks\">\n <article\n v-for=\"(row, index) in modelValue\"\n :key=\"row.rowId\"\n class=\"daxiang-form-block-subtable__block\"\n >\n <header class=\"daxiang-form-block-subtable__block-header\">\n <strong>第 {{ index + 1 }} 条</strong>\n <span\n v-if=\"editable && (allowCopy || allowDelete)\"\n class=\"daxiang-form-block-subtable__actions\"\n >\n <ElButton v-if=\"allowCopy\" link @click=\"copyRow(row.rowId)\">复制</ElButton>\n <ElButton v-if=\"allowDelete\" link type=\"danger\" @click=\"deleteRow(row.rowId)\"\n >删除</ElButton\n >\n </span>\n </header>\n <div class=\"daxiang-form-block-subtable__field-grid\">\n <div\n v-for=\"column in columns\"\n :key=\"column.columnId\"\n class=\"daxiang-form-block-subtable__field\"\n >\n <span>{{ column.label }}</span>\n <div>\n <slot\n name=\"field\"\n :row=\"row\"\n :column=\"column\"\n :row-index=\"index\"\n :value=\"row.values[column.fieldId]\"\n :update=\"(value: unknown) => updateInlineValue(row.rowId, column.fieldId, value)\"\n >\n {{ displayValue(row.values[column.fieldId]) }}\n </slot>\n </div>\n </div>\n </div>\n </article>\n </div>\n\n <DModal\n v-model=\"editorVisible\"\n :title=\"editorTitle\"\n :width=\"editorWidth\"\n :confirm-disabled=\"!editorDraft\"\n @confirm=\"confirmEditor\"\n @cancel=\"cancelEditor\"\n >\n <div v-if=\"editorDraft\" class=\"daxiang-form-block-subtable__editor-grid\">\n <div\n v-for=\"column in columns\"\n :key=\"column.columnId\"\n class=\"daxiang-form-block-subtable__field\"\n >\n <span>{{ column.label }}</span>\n <div>\n <slot\n name=\"field\"\n :row=\"editorDraft\"\n :column=\"column\"\n :row-index=\"editorSourceIndex\"\n :value=\"editorDraft.values[column.fieldId]\"\n :update=\"(value: unknown) => updateDraftValue(column.fieldId, value)\"\n >\n {{ displayValue(editorDraft.values[column.fieldId]) }}\n </slot>\n </div>\n </div>\n </div>\n </DModal>\n </section>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue'\nimport DxSvgIcon from '../../infrastructure/FormIcon.vue'\nimport DModal from '../../infrastructure/FormModalShell.vue'\nimport { cloneDesignerSubtableRow, createDesignerSubtableRow } from '@daxiangme/form-core'\nimport type {\n DesignerDevice,\n DesignerRuntimeMode,\n DesignerSubtableColumn,\n DesignerSubtableRow,\n} from '@daxiangme/form-core'\n\ndefineOptions({ name: 'DxFormBlockSubtable' })\n\ninterface SubtableFieldSlotProps {\n row: DesignerSubtableRow\n column: DesignerSubtableColumn\n rowIndex: number\n value: unknown\n update: (value: unknown) => void\n}\n\ninterface SubtableSummarySlotProps {\n row: DesignerSubtableRow\n column: DesignerSubtableColumn\n rowIndex: number\n value: unknown\n}\n\nconst props = withDefaults(\n defineProps<{\n modelValue: DesignerSubtableRow[]\n columns: DesignerSubtableColumn[]\n mode: DesignerRuntimeMode\n device?: DesignerDevice\n title?: string\n allowCreate?: boolean\n allowCopy?: boolean\n allowDelete?: boolean\n initialRows?: number\n defaultValues?: Readonly<Record<string, unknown>>\n deepEditMode?: 'INLINE' | 'DIALOG' | 'DRAWER' | string\n }>(),\n {\n device: 'desktop',\n title: '',\n allowCreate: true,\n allowCopy: true,\n allowDelete: true,\n initialRows: 0,\n defaultValues: () => ({}),\n deepEditMode: 'INLINE',\n },\n)\n\ndefineSlots<{\n field: (props: SubtableFieldSlotProps) => unknown\n 'detail-field': (props: SubtableSummarySlotProps) => unknown\n}>()\n\nconst emit = defineEmits<{ 'update:modelValue': [rows: DesignerSubtableRow[]] }>()\nconst initialized = ref(false)\nconst editorVisible = ref(false)\nconst editorDraft = ref<DesignerSubtableRow>()\nconst editorSourceRowId = ref('')\nconst editable = computed(() => props.mode === 'CREATE' || props.mode === 'EDIT')\nconst canCreate = computed(() => editable.value && props.allowCreate)\nconst normalizedInitialRows = computed(() => normalizeInteger(props.initialRows, 0, 20, 0))\nconst normalizedEditMode = computed<'INLINE' | 'DIALOG'>(() =>\n ['DIALOG', 'DRAWER'].includes(String(props.deepEditMode).toUpperCase()) ? 'DIALOG' : 'INLINE',\n)\nconst dialogEditing = computed(() => editable.value && normalizedEditMode.value === 'DIALOG')\nconst summaryColumns = computed(() => props.columns.slice(0, 3))\nconst editorSourceIndex = computed(() => {\n if (!editorSourceRowId.value) return props.modelValue.length\n return props.modelValue.findIndex((row) => row.rowId === editorSourceRowId.value)\n})\nconst editorTitle = computed(() => {\n const subject = props.title || '明细'\n return editorSourceRowId.value ? `编辑${subject}` : `新增${subject}`\n})\nconst editorWidth = computed(() =>\n props.device === 'mobile' ? 'min(360px, calc(100vw - 32px))' : 'min(760px, calc(100vw - 32px))',\n)\n\nwatch(\n editable,\n (enabled) => {\n if (enabled) initializeRows()\n },\n { immediate: true },\n)\n\nwatch(\n [dialogEditing, () => props.modelValue.map((row) => row.rowId).join('\\u0000')],\n ([editingEnabled]) => {\n if (!editorVisible.value) return\n const sourceStillExists =\n !editorSourceRowId.value ||\n props.modelValue.some((row) => row.rowId === editorSourceRowId.value)\n if (!editingEnabled || !sourceStillExists) resetEditor()\n },\n)\n\n/** 首次进入可编辑会话时补足声明的初始块数,之后用户删除数据不会触发自动回填。 */\nfunction initializeRows(): void {\n if (initialized.value) return\n if (!editable.value) return\n initialized.value = true\n const expected = normalizedInitialRows.value\n if (props.modelValue.length >= expected) return\n const additions = Array.from({ length: expected - props.modelValue.length }, () =>\n createDesignerSubtableRow(props.columns, props.defaultValues),\n )\n emit('update:modelValue', [...props.modelValue, ...additions])\n}\n\n/** INLINE 直接追加空块;DIALOG 先编辑独立草稿,确认后才写回集合。 */\nfunction addRow(): void {\n if (!canCreate.value) return\n if (dialogEditing.value) {\n editorSourceRowId.value = ''\n editorDraft.value = createDesignerSubtableRow(props.columns, props.defaultValues)\n editorVisible.value = true\n return\n }\n emit('update:modelValue', [\n ...props.modelValue,\n createDesignerSubtableRow(props.columns, props.defaultValues),\n ])\n}\n\n/** 打开现有行的深克隆草稿,弹窗输入不会提前污染预览值。 */\nfunction openEditor(row: DesignerSubtableRow): void {\n if (!dialogEditing.value) return\n editorSourceRowId.value = row.rowId\n editorDraft.value = { ...cloneDesignerSubtableRow(row), rowId: row.rowId }\n editorVisible.value = true\n}\n\n/** 确认时一次性新增或替换整行,保持事务式弹窗编辑语义。 */\nfunction confirmEditor(): void {\n const draft = editorDraft.value\n if (!draft || !dialogEditing.value) return\n if (!editorSourceRowId.value) {\n emit('update:modelValue', [...props.modelValue, draft])\n } else {\n emit(\n 'update:modelValue',\n props.modelValue.map((row) => (row.rowId === editorSourceRowId.value ? draft : row)),\n )\n }\n resetEditor()\n}\n\n/** 取消时只销毁草稿,不触发集合更新。 */\nfunction cancelEditor(): void {\n resetEditor()\n}\n\n/** 清理弹窗会话,避免下一次新增继承上一次编辑身份。 */\nfunction resetEditor(): void {\n editorVisible.value = false\n editorDraft.value = undefined\n editorSourceRowId.value = ''\n}\n\n/** 深复制目标块并插入源块之后。 */\nfunction copyRow(rowId: string): void {\n if (!editable.value || !props.allowCopy) return\n const index = props.modelValue.findIndex((row) => row.rowId === rowId)\n if (index < 0) return\n const rows = [...props.modelValue]\n rows.splice(index + 1, 0, cloneDesignerSubtableRow(rows[index]))\n emit('update:modelValue', rows)\n}\n\n/** 按行身份删除,避免界面重排后误删相邻区块。 */\nfunction deleteRow(rowId: string): void {\n if (!editable.value || !props.allowDelete) return\n emit(\n 'update:modelValue',\n props.modelValue.filter((row) => row.rowId !== rowId),\n )\n}\n\n/** INLINE 模式以不可变方式回写字段值;只读和详情模式拒绝修改。 */\nfunction updateInlineValue(rowId: string, fieldId: string, value: unknown): void {\n if (!editable.value) return\n emit(\n 'update:modelValue',\n props.modelValue.map((row) =>\n row.rowId === rowId ? { ...row, values: { ...row.values, [fieldId]: value } } : row,\n ),\n )\n}\n\n/** 弹窗字段仅更新独立行草稿,直到用户确认才提交。 */\nfunction updateDraftValue(fieldId: string, value: unknown): void {\n if (!editorDraft.value) return\n editorDraft.value = {\n ...editorDraft.value,\n values: { ...editorDraft.value.values, [fieldId]: value },\n }\n}\n\n/** 缺少详情插槽时提供安全的简洁摘要。 */\nfunction displayValue(value: unknown): string {\n if (value === undefined || value === null || value === '') return '—'\n if (Array.isArray(value)) return value.map(displayValue).join('、') || '—'\n if (typeof value === 'object') return '已填写'\n return String(value)\n}\n\n/** 将导入配置约束到领域组件承诺的安全整数范围。 */\nfunction normalizeInteger(\n value: unknown,\n minimum: number,\n maximum: number,\n fallback: number,\n): number {\n if (typeof value !== 'number' || !Number.isFinite(value)) return fallback\n return Math.max(minimum, Math.min(maximum, Math.trunc(value)))\n}\n</script>\n\n<style scoped>\n.daxiang-form-block-subtable {\n width: 100%;\n min-width: 0;\n}\n\n.daxiang-form-block-subtable__header,\n.daxiang-form-block-subtable__block-header {\n display: flex;\n min-height: 36px;\n align-items: center;\n justify-content: space-between;\n}\n\n.daxiang-form-block-subtable__heading {\n display: inline-flex;\n min-width: 0;\n align-items: baseline;\n gap: var(--daxiang-form-space-2);\n}\n\n.daxiang-form-block-subtable__heading span,\n.daxiang-form-block-subtable__block-header {\n color: var(--el-text-color-secondary);\n font-size: 12px;\n}\n\n.daxiang-form-block-subtable__blocks,\n.daxiang-form-block-subtable__summaries {\n border-top: 1px solid var(--el-border-color-lighter);\n}\n\n.daxiang-form-block-subtable__block,\n.daxiang-form-block-subtable__summary {\n padding: var(--daxiang-form-space-3) 0;\n border-bottom: 1px solid var(--el-border-color-lighter);\n}\n\n.daxiang-form-block-subtable__field-grid,\n.daxiang-form-block-subtable__editor-grid {\n display: grid;\n min-width: 0;\n padding-top: var(--daxiang-form-space-2);\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: var(--daxiang-form-space-3) var(--daxiang-form-space-4);\n}\n\n.daxiang-form-block-subtable__field,\n.daxiang-form-block-subtable__detail-field {\n display: flex;\n min-width: 0;\n flex-direction: column;\n}\n\n.daxiang-form-block-subtable__field > span,\n.daxiang-form-block-subtable__detail-field > span,\n.daxiang-form-block-subtable__summary-grid span {\n margin-bottom: var(--daxiang-form-space-1);\n color: var(--el-text-color-regular);\n font-size: 13px;\n font-weight: 500;\n}\n\n.daxiang-form-block-subtable__field > div,\n.daxiang-form-block-subtable__detail-field > div,\n.daxiang-form-block-subtable__summary-grid div {\n min-width: 0;\n}\n\n.daxiang-form-block-subtable__actions {\n display: inline-flex;\n white-space: nowrap;\n}\n\n.daxiang-form-block-subtable__summary-grid {\n display: grid;\n padding-top: var(--daxiang-form-space-2);\n grid-template-columns: repeat(3, minmax(0, 1fr));\n column-gap: var(--daxiang-form-space-4);\n}\n\n.daxiang-form-block-subtable__summary-grid > div {\n display: flex;\n min-width: 0;\n flex-direction: column;\n}\n\n.daxiang-form-block-subtable__summary-grid > div > div,\n.daxiang-form-block-subtable__detail-field > div {\n color: var(--el-text-color-secondary);\n line-height: 1.6;\n overflow-wrap: anywhere;\n}\n\n.daxiang-form-block-subtable.is-mobile .daxiang-form-block-subtable__field-grid,\n.daxiang-form-block-subtable.is-mobile .daxiang-form-block-subtable__summary-grid,\n.daxiang-form-block-subtable.is-mobile .daxiang-form-block-subtable__editor-grid {\n grid-template-columns: minmax(0, 1fr);\n row-gap: var(--daxiang-form-space-3);\n}\n\n.daxiang-form-block-subtable__empty {\n min-height: 120px;\n}\n</style>\n","<template>\n <section class=\"daxiang-form-row-subtable\">\n <header v-if=\"title || canCreate\" class=\"daxiang-form-row-subtable__header\">\n <div class=\"daxiang-form-row-subtable__heading\">\n <strong v-if=\"title\">{{ title }}</strong>\n <span>{{ modelValue.length }} 条</span>\n </div>\n <ElButton v-if=\"canCreate\" type=\"primary\" link @click=\"addRow\">\n <DxSvgIcon icon=\"ri:add-line\" />新增一行\n </ElButton>\n </header>\n\n <ElEmpty\n v-if=\"columns.length === 0\"\n class=\"daxiang-form-row-subtable__empty\"\n description=\"请先配置子表列\"\n :image-size=\"48\"\n />\n <ElEmpty\n v-else-if=\"modelValue.length === 0\"\n class=\"daxiang-form-row-subtable__empty\"\n description=\"暂无明细\"\n :image-size=\"48\"\n />\n\n <div v-else-if=\"device === 'mobile'\" class=\"daxiang-form-row-subtable__records\">\n <article\n v-for=\"(row, localIndex) in visibleRows\"\n :key=\"row.rowId\"\n class=\"daxiang-form-row-subtable__record\"\n >\n <header v-if=\"showIndex || showActions\" class=\"daxiang-form-row-subtable__record-header\">\n <strong v-if=\"showIndex\">第 {{ displayIndex(localIndex) }} 条</strong>\n <span v-else />\n <span v-if=\"showActions\" class=\"daxiang-form-row-subtable__actions\">\n <ElButton v-if=\"allowCopy\" link @click=\"copyRow(row.rowId)\">复制</ElButton>\n <ElButton v-if=\"allowDelete\" link type=\"danger\" @click=\"deleteRow(row.rowId)\"\n >删除</ElButton\n >\n </span>\n </header>\n <div\n v-for=\"column in columns\"\n :key=\"column.columnId\"\n class=\"daxiang-form-row-subtable__record-field\"\n >\n <span class=\"daxiang-form-row-subtable__record-label\">{{ column.label }}</span>\n <div class=\"daxiang-form-row-subtable__record-value\">\n <slot\n v-if=\"mode === 'DETAIL'\"\n name=\"detail-cell\"\n :row=\"row\"\n :column=\"column\"\n :row-index=\"sourceIndex(localIndex)\"\n :value=\"row.values[column.fieldId]\"\n >\n {{ displayValue(row.values[column.fieldId]) }}\n </slot>\n <slot\n v-else\n name=\"cell\"\n :row=\"row\"\n :column=\"column\"\n :row-index=\"sourceIndex(localIndex)\"\n :value=\"row.values[column.fieldId]\"\n :update=\"(value: unknown) => updateCell(row.rowId, column.fieldId, value)\"\n >\n {{ displayValue(row.values[column.fieldId]) }}\n </slot>\n </div>\n </div>\n </article>\n </div>\n\n <div\n v-else\n class=\"daxiang-form-row-subtable__scroll\"\n role=\"region\"\n :aria-label=\"title || '子表明细'\"\n >\n <div\n class=\"daxiang-form-row-subtable__table\"\n :style=\"{ minWidth: gridLayout.minimumWidth }\"\n role=\"table\"\n :aria-label=\"title || '子表明细'\"\n :aria-rowcount=\"modelValue.length + 1\"\n >\n <div\n class=\"daxiang-form-row-subtable__grid daxiang-form-row-subtable__table-head\"\n :style=\"{ gridTemplateColumns: gridLayout.template }\"\n role=\"row\"\n >\n <span v-if=\"showIndex\" class=\"daxiang-form-row-subtable__index\" role=\"columnheader\"\n >序号</span\n >\n <span v-for=\"column in columns\" :key=\"column.columnId\" role=\"columnheader\">\n {{ column.label }}\n </span>\n <span\n v-if=\"showActions\"\n class=\"daxiang-form-row-subtable__sticky-action\"\n role=\"columnheader\"\n >\n 操作\n </span>\n </div>\n\n <div\n v-for=\"(row, localIndex) in visibleRows\"\n :key=\"row.rowId\"\n class=\"daxiang-form-row-subtable__grid daxiang-form-row-subtable__table-row\"\n :class=\"{ 'is-detail': mode === 'DETAIL' }\"\n :style=\"{ gridTemplateColumns: gridLayout.template }\"\n role=\"row\"\n >\n <span v-if=\"showIndex\" class=\"daxiang-form-row-subtable__index\" role=\"cell\">\n {{ displayIndex(localIndex) }}\n </span>\n <div v-for=\"column in columns\" :key=\"column.columnId\" role=\"cell\">\n <slot\n v-if=\"mode === 'DETAIL'\"\n name=\"detail-cell\"\n :row=\"row\"\n :column=\"column\"\n :row-index=\"sourceIndex(localIndex)\"\n :value=\"row.values[column.fieldId]\"\n >\n {{ displayValue(row.values[column.fieldId]) }}\n </slot>\n <slot\n v-else\n name=\"cell\"\n :row=\"row\"\n :column=\"column\"\n :row-index=\"sourceIndex(localIndex)\"\n :value=\"row.values[column.fieldId]\"\n :update=\"(value: unknown) => updateCell(row.rowId, column.fieldId, value)\"\n >\n {{ displayValue(row.values[column.fieldId]) }}\n </slot>\n </div>\n <div v-if=\"showActions\" class=\"daxiang-form-row-subtable__sticky-action\" role=\"cell\">\n <span class=\"daxiang-form-row-subtable__actions\">\n <ElButton v-if=\"allowCopy\" link @click=\"copyRow(row.rowId)\">复制</ElButton>\n <ElButton v-if=\"allowDelete\" link type=\"danger\" @click=\"deleteRow(row.rowId)\"\n >删除</ElButton\n >\n </span>\n </div>\n </div>\n </div>\n </div>\n\n <ElPagination\n v-if=\"pagination && modelValue.length > normalizedPageSize\"\n v-model:current-page=\"currentPage\"\n class=\"daxiang-form-row-subtable__pagination\"\n :page-size=\"normalizedPageSize\"\n :total=\"modelValue.length\"\n :layout=\"paginationLayout\"\n :pager-count=\"device === 'mobile' ? 5 : 7\"\n />\n </section>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch, nextTick } from 'vue'\nimport DxSvgIcon from '../../infrastructure/FormIcon.vue'\nimport {\n cloneDesignerSubtableRow,\n createDesignerSubtableGridLayout,\n createDesignerSubtableRow,\n} from '@daxiangme/form-core'\nimport type {\n DesignerDevice,\n DesignerRuntimeMode,\n DesignerSubtableColumn,\n DesignerSubtableRow,\n} from '@daxiangme/form-core'\n\ndefineOptions({ name: 'DxFormRowSubtable' })\n\ninterface SubtableCellSlotProps {\n row: DesignerSubtableRow\n column: DesignerSubtableColumn\n rowIndex: number\n value: unknown\n update: (value: unknown) => void\n}\n\ninterface SubtableDetailCellSlotProps {\n row: DesignerSubtableRow\n column: DesignerSubtableColumn\n rowIndex: number\n value: unknown\n}\n\nconst props = withDefaults(\n defineProps<{\n modelValue: DesignerSubtableRow[]\n columns: DesignerSubtableColumn[]\n mode: DesignerRuntimeMode\n device?: DesignerDevice\n title?: string\n allowCreate?: boolean\n allowCopy?: boolean\n allowDelete?: boolean\n showIndex?: boolean\n pagination?: boolean\n pageSize?: number\n initialRows?: number\n defaultValues?: Readonly<Record<string, unknown>>\n }>(),\n {\n device: 'desktop',\n title: '',\n allowCreate: true,\n allowCopy: true,\n allowDelete: true,\n showIndex: true,\n pagination: false,\n pageSize: 10,\n initialRows: 0,\n defaultValues: () => ({}),\n },\n)\n\ndefineSlots<{\n cell: (props: SubtableCellSlotProps) => unknown\n 'detail-cell': (props: SubtableDetailCellSlotProps) => unknown\n}>()\n\nconst emit = defineEmits<{ 'update:modelValue': [rows: DesignerSubtableRow[]] }>()\nconst currentPage = ref(1)\nconst initialized = ref(false)\nconst editable = computed(() => props.mode === 'CREATE' || props.mode === 'EDIT')\nconst canCreate = computed(() => editable.value && props.allowCreate)\nconst showActions = computed(() => editable.value && (props.allowCopy || props.allowDelete))\nconst normalizedPageSize = computed(() => normalizeInteger(props.pageSize, 1, 100, 10))\nconst normalizedInitialRows = computed(() => normalizeInteger(props.initialRows, 0, 20, 0))\nconst paginationLayout = computed(() =>\n props.device === 'mobile' ? 'prev, pager, next' : 'total, prev, pager, next',\n)\nconst gridLayout = computed(() =>\n createDesignerSubtableGridLayout(props.columns, {\n showIndex: props.showIndex,\n showActions: showActions.value,\n }),\n)\nconst visibleRows = computed(() => {\n if (!props.pagination) return props.modelValue\n const start = (currentPage.value - 1) * normalizedPageSize.value\n return props.modelValue.slice(start, start + normalizedPageSize.value)\n})\n\nwatch(\n editable,\n (enabled) => {\n if (enabled) initializeRows()\n },\n { immediate: true },\n)\n\nwatch([() => props.modelValue.length, normalizedPageSize], clampCurrentPage)\n\n/** 首次进入可编辑会话时补足声明的初始行数,用户随后删除为空时不会被静默重建。 */\nfunction initializeRows(): void {\n if (initialized.value) return\n if (!editable.value) return\n initialized.value = true\n const expected = normalizedInitialRows.value\n if (props.modelValue.length >= expected) return\n const additions = Array.from({ length: expected - props.modelValue.length }, () =>\n createDesignerSubtableRow(props.columns, props.defaultValues),\n )\n emit('update:modelValue', [...props.modelValue, ...additions])\n}\n\n/** 追加空白行,并在分页开启时定位到最后一页。 */\nfunction addRow(): void {\n if (!canCreate.value) return\n const rows = [...props.modelValue, createDesignerSubtableRow(props.columns, props.defaultValues)]\n emit('update:modelValue', rows)\n if (props.pagination)\n currentPage.value = Math.max(1, Math.ceil(rows.length / normalizedPageSize.value))\n}\n\n/** 深复制目标行,插入在源行之后并保留各字段值的引用隔离。 */\nfunction copyRow(rowId: string): void {\n if (!editable.value || !props.allowCopy) return\n const index = props.modelValue.findIndex((row) => row.rowId === rowId)\n if (index < 0) return\n const rows = [...props.modelValue]\n rows.splice(index + 1, 0, cloneDesignerSubtableRow(rows[index]))\n emit('update:modelValue', rows)\n if (props.pagination) currentPage.value = Math.floor((index + 1) / normalizedPageSize.value) + 1\n}\n\n/** 按稳定行身份删除,避免分页下用可见索引误删其他行。 */\nfunction deleteRow(rowId: string): void {\n if (!editable.value || !props.allowDelete) return\n emit(\n 'update:modelValue',\n props.modelValue.filter((row) => row.rowId !== rowId),\n )\n nextTick(clampCurrentPage)\n}\n\n/** 以不可变方式更新单元格值,确保每一行的数据容器保持独立。 */\nfunction updateCell(rowId: string, fieldId: string, value: unknown): void {\n if (!editable.value) return\n emit(\n 'update:modelValue',\n props.modelValue.map((row) =>\n row.rowId === rowId ? { ...row, values: { ...row.values, [fieldId]: value } } : row,\n ),\n )\n}\n\n/** 将当前分页内的相对索引换算为完整集合索引。 */\nfunction sourceIndex(localIndex: number): number {\n return props.pagination\n ? (currentPage.value - 1) * normalizedPageSize.value + localIndex\n : localIndex\n}\n\n/** 返回面向用户的一基序号。 */\nfunction displayIndex(localIndex: number): number {\n return sourceIndex(localIndex) + 1\n}\n\n/** 删除或页大小变化后,将页码约束到仍存在的数据范围。 */\nfunction clampCurrentPage(): void {\n const pageCount = Math.max(1, Math.ceil(props.modelValue.length / normalizedPageSize.value))\n currentPage.value = Math.min(currentPage.value, pageCount)\n}\n\n/** 无渲染插槽时提供保守的可读文本,不把对象直接输出为技术字符串。 */\nfunction displayValue(value: unknown): string {\n if (value === undefined || value === null || value === '') return '—'\n if (Array.isArray(value)) return value.map(displayValue).join('、') || '—'\n if (typeof value === 'object') return '已填写'\n return String(value)\n}\n\n/** 将导入配置约束到领域组件承诺的安全整数范围。 */\nfunction normalizeInteger(\n value: unknown,\n minimum: number,\n maximum: number,\n fallback: number,\n): number {\n if (typeof value !== 'number' || !Number.isFinite(value)) return fallback\n return Math.max(minimum, Math.min(maximum, Math.trunc(value)))\n}\n</script>\n\n<style scoped>\n.daxiang-form-row-subtable {\n width: 100%;\n min-width: 0;\n}\n\n.daxiang-form-row-subtable__header,\n.daxiang-form-row-subtable__record-header {\n display: flex;\n min-height: 36px;\n align-items: center;\n justify-content: space-between;\n}\n\n.daxiang-form-row-subtable__heading {\n display: inline-flex;\n min-width: 0;\n align-items: baseline;\n gap: var(--daxiang-form-space-2);\n}\n\n.daxiang-form-row-subtable__heading span,\n.daxiang-form-row-subtable__record-header {\n color: var(--el-text-color-secondary);\n font-size: 12px;\n}\n\n.daxiang-form-row-subtable__scroll {\n width: 100%;\n min-width: 0;\n overflow-x: auto;\n border: 1px solid var(--el-border-color-lighter);\n}\n\n.daxiang-form-row-subtable__table {\n width: 100%;\n}\n\n.daxiang-form-row-subtable__grid {\n display: grid;\n width: 100%;\n min-width: 100%;\n align-items: stretch;\n}\n\n.daxiang-form-row-subtable__grid > * {\n display: flex;\n min-width: 0;\n min-height: 48px;\n align-items: center;\n padding: var(--daxiang-form-space-2) var(--daxiang-form-space-3);\n border-right: 1px solid var(--el-border-color-lighter);\n}\n\n.daxiang-form-row-subtable__grid > :last-child {\n border-right: 0;\n}\n\n.daxiang-form-row-subtable__table-head {\n min-height: 40px;\n color: var(--el-text-color-secondary);\n background: var(--el-fill-color-light);\n font-size: 12px;\n font-weight: 600;\n}\n\n.daxiang-form-row-subtable__table-head > * {\n min-height: 40px;\n}\n\n.daxiang-form-row-subtable__table-row {\n border-top: 1px solid var(--el-border-color-lighter);\n background: var(--el-bg-color);\n}\n\n.daxiang-form-row-subtable__table-row > * {\n align-items: flex-start;\n min-height: 44px;\n}\n\n.daxiang-form-row-subtable__table-row:hover {\n background: var(--el-fill-color-extra-light);\n}\n\n.daxiang-form-row-subtable__index {\n justify-content: center;\n color: var(--el-text-color-secondary);\n font-variant-numeric: tabular-nums;\n}\n\n.daxiang-form-row-subtable__sticky-action {\n position: sticky;\n z-index: 1;\n right: 0;\n justify-content: center;\n background: inherit;\n border-left: 1px solid var(--el-border-color-lighter);\n}\n\n.daxiang-form-row-subtable__actions {\n display: inline-flex;\n white-space: nowrap;\n}\n\n.daxiang-form-row-subtable__pagination {\n max-width: 100%;\n justify-content: flex-end;\n margin-top: var(--daxiang-form-space-3);\n overflow: hidden;\n}\n\n.daxiang-form-row-subtable__records {\n border-top: 1px solid var(--el-border-color-lighter);\n}\n\n.daxiang-form-row-subtable__record {\n padding: var(--daxiang-form-space-3) 0;\n border-bottom: 1px solid var(--el-border-color-lighter);\n}\n\n.daxiang-form-row-subtable__record-field {\n display: grid;\n min-width: 0;\n align-items: start;\n padding-top: var(--daxiang-form-space-2);\n grid-template-columns: minmax(84px, 30%) minmax(0, 1fr);\n column-gap: var(--daxiang-form-space-3);\n}\n\n.daxiang-form-row-subtable__record-label {\n color: var(--el-text-color-secondary);\n font-size: 12px;\n line-height: 32px;\n}\n\n.daxiang-form-row-subtable__record-value {\n min-width: 0;\n}\n\n.daxiang-form-row-subtable__empty {\n min-height: 120px;\n}\n\n@media (width <= 640px) {\n .daxiang-form-row-subtable__pagination {\n justify-content: center;\n }\n}\n</style>\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|YYYY|YY|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),Y=_.prototype;return O.prototype=Y,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){Y[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","<template>\n <div\n class=\"dx-step-progress\"\n :class=\"[\n `is-${direction}`,\n `is-finish-${finishStatus}`,\n { 'is-compact': compact, 'is-disabled': disabled },\n ]\"\n >\n <ol v-if=\"items.length\" class=\"dx-step-progress__list\" aria-label=\"步骤进度\">\n <li\n v-for=\"(item, index) in items\"\n :key=\"String(item.value)\"\n class=\"dx-step-progress__item\"\n :class=\"stepState(index)\"\n >\n <button\n type=\"button\"\n class=\"dx-step-progress__trigger\"\n :disabled=\"disabled || item.disabled\"\n :aria-current=\"index === activeIndex ? 'step' : undefined\"\n @click=\"selectStep(item)\"\n >\n <span class=\"dx-step-progress__marker\" aria-hidden=\"true\">\n <DxSvgIcon v-if=\"index < activeIndex && completedIcon\" :icon=\"completedIcon\" />\n <span v-else>{{ index + 1 }}</span>\n </span>\n <span class=\"dx-step-progress__content\">\n <strong>{{ item.label }}</strong>\n <small v-if=\"showDescription && item.description\">{{ item.description }}</small>\n </span>\n </button>\n <span\n v-if=\"index < items.length - 1\"\n class=\"dx-step-progress__tail\"\n :class=\"{ 'is-complete': index < activeIndex }\"\n aria-hidden=\"true\"\n />\n </li>\n </ol>\n <span v-else class=\"dx-step-progress__empty\">暂无步骤</span>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport DxSvgIcon from '../../infrastructure/FormIcon.vue'\n\ndefineOptions({ name: 'DxStepProgress' })\n\ntype StepValue = string | number | boolean\n\ninterface StepProgressItem {\n label: string\n value: StepValue\n description?: string | null\n disabled?: boolean\n}\n\nconst props = withDefaults(\n defineProps<{\n modelValue: unknown\n items: StepProgressItem[]\n direction?: 'horizontal' | 'vertical'\n finishStatus?: 'wait' | 'process' | 'finish' | 'error' | 'success'\n compact?: boolean\n showDescription?: boolean\n disabled?: boolean\n }>(),\n {\n direction: 'horizontal',\n finishStatus: 'success',\n compact: false,\n showDescription: true,\n disabled: false,\n },\n)\n\nconst emit = defineEmits<{ 'update:modelValue': [value: StepValue] }>()\n\nconst activeIndex = computed(() => {\n const index = props.items.findIndex((item) => sameStepValue(item.value, props.modelValue))\n return index >= 0 ? index : 0\n})\n\nconst completedIcon = computed(() => {\n if (props.finishStatus === 'wait') return ''\n return props.finishStatus === 'error' ? 'ri:close-line' : 'ri:check-line'\n})\n\n/** 根据当前值生成稳定的完成、当前与等待状态,供视觉和辅助技术共同识别。 */\nfunction stepState(index: number): string {\n if (index < activeIndex.value) return 'is-complete'\n return index === activeIndex.value ? 'is-current' : 'is-wait'\n}\n\n/** 运行态允许选择未禁用步骤,设计态通过 disabled 阻断数据变更。 */\nfunction selectStep(item: StepProgressItem): void {\n if (props.disabled || item.disabled) return\n emit('update:modelValue', item.value)\n}\n\n/** 兼容数据库字符值与 Schema 数字值表达同一选项。 */\nfunction sameStepValue(left: StepValue, right: unknown): boolean {\n return left === right || String(left) === String(right ?? '')\n}\n</script>\n\n<style scoped>\n.dx-step-progress {\n --step-progress-finish-color: var(--el-color-primary);\n --step-progress-finish-fill: var(--el-color-primary-light-9);\n\n width: 100%;\n min-width: 0;\n}\n\n.dx-step-progress.is-finish-success {\n --step-progress-finish-color: var(--el-color-success);\n --step-progress-finish-fill: var(--el-color-success-light-9);\n}\n\n.dx-step-progress.is-finish-error {\n --step-progress-finish-color: var(--el-color-danger);\n --step-progress-finish-fill: var(--el-color-danger-light-9);\n}\n\n.dx-step-progress__list {\n display: flex;\n width: 100%;\n min-width: 0;\n padding: 0;\n margin: 0;\n list-style: none;\n}\n\n.dx-step-progress__item {\n position: relative;\n min-width: 0;\n flex: 1 1 0;\n}\n\n.dx-step-progress__trigger {\n position: relative;\n z-index: 1;\n display: flex;\n width: 100%;\n min-width: 0;\n align-items: center;\n padding: 0;\n color: var(--el-text-color-secondary);\n background: transparent;\n border: 0;\n cursor: pointer;\n font: inherit;\n}\n\n.dx-step-progress__trigger:disabled {\n cursor: default;\n}\n\n.dx-step-progress__marker {\n display: inline-flex;\n width: 24px;\n height: 24px;\n flex: 0 0 24px;\n align-items: center;\n justify-content: center;\n color: var(--el-text-color-placeholder);\n background: var(--el-fill-color-blank);\n border: 1px solid var(--el-border-color);\n border-radius: 50%;\n font-size: 12px;\n font-weight: 600;\n transition:\n color var(--el-transition-duration-fast),\n background-color var(--el-transition-duration-fast),\n border-color var(--el-transition-duration-fast);\n}\n\n.dx-step-progress__marker > :deep(svg) {\n width: 14px;\n height: 14px;\n}\n\n.dx-step-progress__content {\n display: flex;\n min-width: 0;\n flex-direction: column;\n line-height: 1.35;\n}\n\n.dx-step-progress__content strong,\n.dx-step-progress__content small {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.dx-step-progress__content strong {\n color: inherit;\n font-size: 13px;\n font-weight: 500;\n}\n\n.dx-step-progress__content small {\n margin-top: 2px;\n color: var(--el-text-color-placeholder);\n font-size: 11px;\n}\n\n.dx-step-progress__tail {\n position: absolute;\n z-index: 0;\n background: var(--el-border-color-light);\n transition: background-color var(--el-transition-duration-fast);\n}\n\n.dx-step-progress__tail.is-complete {\n background: var(--step-progress-finish-color);\n}\n\n.dx-step-progress__item.is-complete .dx-step-progress__marker {\n color: var(--step-progress-finish-color);\n background: var(--step-progress-finish-fill);\n border-color: var(--step-progress-finish-color);\n}\n\n.dx-step-progress__item.is-complete .dx-step-progress__content strong {\n color: var(--el-text-color-regular);\n}\n\n.dx-step-progress__item.is-current .dx-step-progress__marker {\n color: var(--el-color-white);\n background: var(--el-color-primary);\n border-color: var(--el-color-primary);\n box-shadow: 0 0 0 3px var(--el-color-primary-light-9);\n}\n\n.dx-step-progress__item.is-current .dx-step-progress__content strong {\n color: var(--el-color-primary);\n font-weight: 600;\n}\n\n.dx-step-progress__item.is-wait\n .dx-step-progress__trigger:not(:disabled):hover\n .dx-step-progress__marker {\n color: var(--el-color-primary);\n border-color: var(--el-color-primary-light-5);\n}\n\n.dx-step-progress.is-horizontal .dx-step-progress__trigger {\n flex-direction: column;\n gap: 6px;\n text-align: center;\n}\n\n.dx-step-progress.is-horizontal .dx-step-progress__tail {\n top: 11px;\n right: calc(-50% + 18px);\n left: calc(50% + 18px);\n height: 2px;\n}\n\n.dx-step-progress.is-horizontal.is-compact .dx-step-progress__trigger {\n gap: 4px;\n}\n\n.dx-step-progress.is-horizontal.is-compact .dx-step-progress__marker {\n width: 20px;\n height: 20px;\n flex-basis: 20px;\n}\n\n.dx-step-progress.is-horizontal.is-compact .dx-step-progress__tail {\n top: 9px;\n right: calc(-50% + 16px);\n left: calc(50% + 16px);\n}\n\n.dx-step-progress.is-horizontal.is-compact .dx-step-progress__content strong {\n font-size: 12px;\n}\n\n.dx-step-progress.is-vertical .dx-step-progress__list {\n flex-direction: column;\n gap: var(--daxiang-form-space-3);\n}\n\n.dx-step-progress.is-vertical .dx-step-progress__trigger {\n gap: var(--daxiang-form-space-2);\n text-align: left;\n}\n\n.dx-step-progress.is-vertical .dx-step-progress__tail {\n top: 30px;\n bottom: calc(var(--daxiang-form-space-3) * -1 + 2px);\n left: 11px;\n width: 2px;\n}\n\n.dx-step-progress__empty {\n display: inline-flex;\n min-height: 32px;\n align-items: center;\n color: var(--el-text-color-placeholder);\n font-size: 12px;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .dx-step-progress__marker,\n .dx-step-progress__tail {\n transition: none;\n }\n}\n</style>\n","<template>\n <div class=\"designer-detail-field\" :class=\"{ 'is-empty': empty, 'is-compact': compact }\">\n <div v-if=\"showLabel\" class=\"designer-detail-field__label\">\n <span>{{ field.label }}</span>\n <ElTag v-if=\"field.required\" size=\"small\" type=\"danger\" effect=\"plain\">必填</ElTag>\n </div>\n\n <div class=\"designer-detail-field__value\">\n <img\n v-if=\"field.componentType === 'signature' && imageValue\"\n class=\"designer-detail-field__signature\"\n :src=\"imageValue\"\n alt=\"签名\"\n />\n <div v-else-if=\"field.componentType === 'opinion'\" class=\"designer-detail-field__opinion\">\n <p>{{ opinionText || emptyText }}</p>\n <img v-if=\"opinionSignature\" :src=\"opinionSignature\" alt=\"意见签名\" />\n </div>\n <div\n v-else-if=\"field.componentType === 'file' && detailFiles.length\"\n class=\"designer-detail-field__files\"\n >\n <ElTag v-for=\"file in detailFiles\" :key=\"file.key\" type=\"info\" effect=\"plain\">\n <DxSvgIcon icon=\"ri:attachment-2\" />{{ file.name }}\n </ElTag>\n </div>\n <DxStepProgress\n v-else-if=\"field.componentType === 'steps'\"\n :model-value=\"stepValue\"\n :items=\"options\"\n :direction=\"textConfiguration('direction') === 'vertical' ? 'vertical' : 'horizontal'\"\n :compact=\"booleanConfiguration('simple')\"\n :show-description=\"field.configuration.showDescription !== false\"\n disabled\n />\n <ElTag\n v-else-if=\"typeof modelValue === 'boolean'\"\n :type=\"modelValue ? 'success' : 'info'\"\n effect=\"light\"\n >\n {{ modelValue ? booleanActiveText : booleanInactiveText }}\n </ElTag>\n <div\n v-else-if=\"field.componentType === 'position' && positionItems.length\"\n class=\"designer-detail-field__meta\"\n >\n <span v-for=\"item in positionItems\" :key=\"item.label\">\n <small>{{ item.label }}</small\n >{{ item.value }}\n </span>\n </div>\n <p v-else-if=\"field.componentType === 'rich-text'\" class=\"designer-detail-field__rich\">\n {{ displayText }}\n </p>\n <span v-else>{{ displayText }}</span>\n </div>\n\n <small v-if=\"shouldShowHelp && field.helpText\" class=\"designer-detail-field__help\">{{\n field.helpText\n }}</small>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport DxSvgIcon from '../infrastructure/FormIcon.vue'\nimport dayjs from 'dayjs'\nimport { formatDesignerNumber } from '@daxiangme/form-core'\nimport type { DesignerField, DesignerOption } from '@daxiangme/form-core'\nimport DxStepProgress from '../form/controls/DxStepProgress.vue'\n\ndefineOptions({ name: 'DesignerDetailField' })\n\nconst props = withDefaults(\n defineProps<{\n field: DesignerField\n modelValue: unknown\n showLabel: boolean\n compact?: boolean\n showHelp?: boolean\n }>(),\n { compact: false },\n)\n\nconst emptyText = '—'\nconst shouldShowHelp = computed(() => props.showHelp ?? !props.compact)\nconst options = computed<DesignerOption[]>(() =>\n normalizeOptions(props.field.configuration.options),\n)\nconst empty = computed(() => isEmptyValue(props.modelValue))\nconst imageValue = computed(() =>\n typeof props.modelValue === 'string' && props.modelValue.startsWith('data:image/')\n ? props.modelValue\n : '',\n)\nconst opinionText = computed(() => objectText(props.modelValue, 'opinion'))\nconst opinionSignature = computed(() => {\n const value = objectText(props.modelValue, 'signature')\n return value.startsWith('data:image/') ? value : ''\n})\nconst detailFiles = computed(() => {\n if (!Array.isArray(props.modelValue)) return []\n return props.modelValue.flatMap((item, index) => {\n if (typeof item === 'string' && item) {\n return [{ key: `file-string-${index}-${item}`, name: item }]\n }\n if (typeof item !== 'object' || item === null) return []\n const source = item as Record<string, unknown>\n const name = source.name\n if (typeof name !== 'string' || !name) return []\n const identity = source.uid ?? source.id ?? source.url ?? name\n return [{ key: `file-object-${String(identity)}-${index}`, name }]\n })\n})\nconst stepValue = computed(() =>\n typeof props.modelValue === 'number' || typeof props.modelValue === 'string'\n ? props.modelValue\n : 0,\n)\nconst booleanActiveText = computed(() => textConfiguration('activeText') || '是')\nconst booleanInactiveText = computed(() => textConfiguration('inactiveText') || '否')\nconst positionItems = computed(() => {\n if (\n typeof props.modelValue !== 'object' ||\n props.modelValue === null ||\n Array.isArray(props.modelValue)\n )\n return []\n const source = props.modelValue as Record<string, unknown>\n const labels: Record<string, string> = {\n longitude: '经度',\n latitude: '纬度',\n accuracy: '精度',\n capturedAt: '采集时间',\n }\n return Object.entries(labels).flatMap(([key, label]) => {\n const value = source[key]\n return isEmptyValue(value) ? [] : [{ label, value: String(value) }]\n })\n})\nconst displayText = computed(() => formatValue(props.modelValue))\n\nfunction formatValue(value: unknown): string {\n if (isEmptyValue(value)) return emptyText\n if (props.field.componentType === 'number' && typeof value === 'number')\n return formatNumber(value)\n if (['date', 'date-range', 'date-multiple'].includes(props.field.componentType))\n return formatDateValue(value)\n if (hasOptionSemantics()) return formatOptionValue(value)\n if (Array.isArray(value))\n return value.map(formatStructuredItem).filter(Boolean).join('、') || emptyText\n if (typeof value === 'object' && value !== null) return formatStructuredItem(value) || emptyText\n return String(value)\n}\n\nfunction formatNumber(value: number): string {\n return formatDesignerNumber(value, props.field.configuration)\n}\n\nfunction formatDateValue(value: unknown): string {\n const values = Array.isArray(value) ? value : [value]\n const dateTime = usesDateTimeSemantics()\n const format = resolveDateFormat(dateTime)\n const formatted = values.map((item) => formatDateItem(item, format, dateTime))\n return formatted.join(textConfiguration('separator') || ' 至 ')\n}\n\nfunction usesDateTimeSemantics(): boolean {\n if (props.field.semanticType === 'DATE_TIME') return true\n if (props.field.componentType === 'date') return textConfiguration('dateType') === 'datetime'\n return props.field.componentType === 'date-range' && textConfiguration('rangeType') === 'DATETIME'\n}\n\nfunction resolveDateFormat(dateTime: boolean): string {\n const configuredFormat = textConfiguration('format')\n if (configuredFormat) return configuredFormat\n if (props.field.componentType === 'date' && textConfiguration('dateType') === 'month')\n return 'YYYY-MM'\n if (props.field.componentType === 'date' && textConfiguration('dateType') === 'year')\n return 'YYYY'\n return dateTime ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD'\n}\n\nfunction formatDateItem(value: unknown, format: string, dateTime: boolean): string {\n if (typeof value !== 'string' && typeof value !== 'number' && !(value instanceof Date)) {\n return String(value)\n }\n const normalizedValue = !dateTime && typeof value === 'string' ? calendarDatePrefix(value) : value\n const parsed = dayjs(normalizedValue)\n return parsed.isValid() ? parsed.format(format) : String(value)\n}\n\nfunction calendarDatePrefix(value: string): string {\n const matched = /^(\\d{4})-(\\d{2})-(\\d{2})/.exec(value)\n return matched ? `${matched[1]}-${matched[2]}-${matched[3]}` : value\n}\n\nfunction formatOptionValue(value: unknown): string {\n const values = Array.isArray(value) ? value : [value]\n return (\n values\n .map((item) => findOptionLabel(options.value, item) ?? formatStructuredItem(item))\n .filter(Boolean)\n .join('、') || emptyText\n )\n}\n\nfunction formatStructuredItem(value: unknown): string {\n if (isEmptyValue(value)) return ''\n if (typeof value !== 'object' || value === null) return String(value)\n const source = value as Record<string, unknown>\n for (const key of ['label', 'name', 'title', 'displayName', 'value']) {\n const candidate = source[key]\n if (['string', 'number', 'boolean'].includes(typeof candidate)) return String(candidate)\n }\n return Object.entries(source)\n .filter(([, item]) => !isEmptyValue(item))\n .map(([key, item]) => `${key}:${String(item)}`)\n .join(';')\n}\n\nfunction hasOptionSemantics(): boolean {\n return [\n 'select',\n 'multi-select',\n 'checkbox',\n 'radio',\n 'dynamic-select',\n 'dynamic-cascade',\n 'region',\n 'dictionary-tree',\n ].includes(props.field.componentType)\n}\n\nfunction findOptionLabel(items: DesignerOption[], value: unknown): string | undefined {\n for (const item of items) {\n if (item.value === value) return item.label\n const nested = findOptionLabel(item.children ?? [], value)\n if (nested) return nested\n }\n return undefined\n}\n\nfunction normalizeOptions(source: unknown): DesignerOption[] {\n if (!Array.isArray(source)) return []\n return source.map<DesignerOption>((item, index) => {\n if (typeof item !== 'object' || item === null || Array.isArray(item)) {\n return { label: String(item), value: String(item) }\n }\n const option = item as Record<string, unknown>\n const value = option.value\n return {\n label: String(option.label ?? `选项 ${index + 1}`),\n value: ['string', 'number', 'boolean'].includes(typeof value)\n ? (value as string | number | boolean)\n : `option-${index + 1}`,\n children: normalizeOptions(option.children),\n }\n })\n}\n\nfunction objectText(value: unknown, key: string): string {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return ''\n const candidate = (value as Record<string, unknown>)[key]\n return typeof candidate === 'string' ? candidate : ''\n}\n\nfunction isEmptyValue(value: unknown): boolean {\n return (\n value === undefined ||\n value === null ||\n value === '' ||\n (Array.isArray(value) && value.length === 0)\n )\n}\n\nfunction textConfiguration(key: string): string {\n const value = props.field.configuration[key]\n return typeof value === 'string' ? value : ''\n}\n\nfunction booleanConfiguration(key: string): boolean {\n return props.field.configuration[key] === true\n}\n</script>\n\n<style scoped>\n.designer-detail-field {\n min-width: 0;\n padding: var(--daxiang-form-space-2) 0;\n}\n\n.designer-detail-field.is-compact {\n padding: 0;\n}\n\n.designer-detail-field__label {\n display: flex;\n min-width: 0;\n align-items: center;\n margin-bottom: var(--daxiang-form-space-1);\n color: var(--el-text-color-secondary);\n gap: var(--daxiang-form-space-2);\n font-size: 12px;\n}\n\n.designer-detail-field__value {\n min-height: 24px;\n color: var(--el-text-color-primary);\n line-height: 24px;\n overflow-wrap: anywhere;\n}\n\n.designer-detail-field.is-empty .designer-detail-field__value {\n color: var(--el-text-color-placeholder);\n}\n\n.designer-detail-field__help {\n display: block;\n margin-top: var(--daxiang-form-space-1);\n color: var(--el-text-color-secondary);\n line-height: 18px;\n}\n\n.designer-detail-field__signature,\n.designer-detail-field__opinion img {\n display: block;\n max-width: 240px;\n max-height: 96px;\n object-fit: contain;\n}\n\n.designer-detail-field__opinion,\n.designer-detail-field__files,\n.designer-detail-field__meta {\n display: flex;\n flex-wrap: wrap;\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-detail-field__opinion {\n flex-direction: column;\n}\n\n.designer-detail-field__opinion p,\n.designer-detail-field__rich {\n margin: 0;\n white-space: pre-wrap;\n}\n\n.designer-detail-field__meta > span {\n display: inline-flex;\n flex-direction: column;\n padding: var(--daxiang-form-space-1) var(--daxiang-form-space-2);\n background: var(--el-fill-color-light);\n border-radius: var(--el-border-radius-small);\n}\n\n.designer-detail-field__meta small {\n color: var(--el-text-color-secondary);\n line-height: 16px;\n}\n</style>\n","<template>\n <div class=\"designer-signature-field\" :class=\"{ 'is-disabled': disabled }\">\n <canvas\n ref=\"canvasRef\"\n class=\"designer-signature-field__canvas\"\n :aria-label=\"disabled ? '签名预览' : '手写签名区域'\"\n @pointerdown=\"beginStroke\"\n @pointermove=\"continueStroke\"\n @pointerup=\"endStroke\"\n @pointerleave=\"endStroke\"\n />\n <div class=\"designer-signature-field__actions\">\n <span>{{ disabled ? '运行预览中可手写签名' : '请在上方区域签名' }}</span>\n <ElButton v-if=\"!disabled\" link @click=\"clearCanvas\">清空</ElButton>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, watch, onMounted } from 'vue'\ndefineOptions({ name: 'DesignerSignatureField' })\n\nconst props = withDefaults(\n defineProps<{\n disabled?: boolean\n lineWidth?: number\n penColor?: string\n modelValue?: string\n }>(),\n { disabled: false, lineWidth: 2, penColor: '#111827', modelValue: '' },\n)\nconst emit = defineEmits<{ 'update:modelValue': [value: string] }>()\n\nconst canvasRef = ref<HTMLCanvasElement>()\nlet drawing = false\n\nonMounted(() => {\n resizeCanvas()\n restoreImage(props.modelValue)\n})\nwatch(\n () => props.modelValue,\n (value) => restoreImage(value),\n)\n\n/** 开始一段本地签名笔画,不产生文件上传或远程请求。 */\nfunction beginStroke(event: PointerEvent): void {\n if (props.disabled) return\n const context = drawingContext()\n if (!context) return\n drawing = true\n canvasRef.value?.setPointerCapture(event.pointerId)\n const point = canvasPoint(event)\n context.beginPath()\n context.moveTo(point.x, point.y)\n}\n\n/** 延续当前签名笔画。 */\nfunction continueStroke(event: PointerEvent): void {\n if (!drawing || props.disabled) return\n const context = drawingContext()\n if (!context) return\n const point = canvasPoint(event)\n context.lineTo(point.x, point.y)\n context.stroke()\n}\n\n/** 结束当前签名笔画。 */\nfunction endStroke(): void {\n if (!drawing) return\n drawing = false\n emit('update:modelValue', canvasRef.value?.toDataURL('image/png') ?? '')\n}\n\n/** 清除当前预览会话中的签名,不写入设计文档。 */\nfunction clearCanvas(): void {\n const canvas = canvasRef.value\n const context = canvas?.getContext('2d')\n if (!canvas || !context) return\n context.clearRect(0, 0, canvas.width, canvas.height)\n emit('update:modelValue', '')\n}\n\nfunction resizeCanvas(): void {\n const canvas = canvasRef.value\n if (!canvas) return\n const rect = canvas.getBoundingClientRect()\n const ratio = window.devicePixelRatio || 1\n canvas.width = Math.max(1, Math.round(rect.width * ratio))\n canvas.height = Math.max(1, Math.round(rect.height * ratio))\n const context = canvas.getContext('2d')\n context?.scale(ratio, ratio)\n}\n\nfunction drawingContext(): CanvasRenderingContext2D | null {\n const context = canvasRef.value?.getContext('2d') ?? null\n if (!context) return null\n context.lineCap = 'round'\n context.lineJoin = 'round'\n context.lineWidth = Math.max(1, props.lineWidth)\n context.strokeStyle = props.penColor || '#111827'\n return context\n}\n\nfunction canvasPoint(event: PointerEvent): { x: number; y: number } {\n const rect = canvasRef.value?.getBoundingClientRect()\n return { x: event.clientX - (rect?.left ?? 0), y: event.clientY - (rect?.top ?? 0) }\n}\n\n/** 将预览会话内的签名数据还原到画布,不读取远程资源。 */\nfunction restoreImage(value: string): void {\n const canvas = canvasRef.value\n const context = canvas?.getContext('2d')\n if (!canvas || !context) return\n context.clearRect(0, 0, canvas.width, canvas.height)\n if (!value.startsWith('data:image/')) return\n const image = new Image()\n image.onload = () => context.drawImage(image, 0, 0, canvas.clientWidth, canvas.clientHeight)\n image.src = value\n}\n</script>\n\n<style scoped>\n.designer-signature-field {\n overflow: hidden;\n background: var(--el-bg-color);\n border: 1px dashed var(--el-border-color);\n border-radius: var(--el-border-radius-base);\n}\n\n.designer-signature-field__canvas {\n display: block;\n width: 100%;\n height: 140px;\n cursor: crosshair;\n touch-action: none;\n}\n\n.designer-signature-field.is-disabled .designer-signature-field__canvas {\n cursor: default;\n}\n\n.designer-signature-field__actions {\n display: flex;\n min-height: 36px;\n align-items: center;\n justify-content: space-between;\n padding: 0 var(--daxiang-form-space-3);\n color: var(--el-text-color-secondary);\n border-top: 1px solid var(--el-border-color-lighter);\n font-size: 12px;\n}\n</style>\n","<template>\n <div class=\"designer-local-picker\">\n <div class=\"designer-local-picker__value\">\n <template v-if=\"selectedItems.length\">\n <ElTag\n v-for=\"item in selectedItems\"\n :key=\"item.id\"\n effect=\"plain\"\n :disable-transitions=\"true\"\n >\n {{ item.label }}\n </ElTag>\n </template>\n <span v-else>{{ placeholder }}</span>\n </div>\n <ElButton :disabled=\"disabled || !adapter\" @click=\"openPicker\">\n <DxSvgIcon :icon=\"icon\" />{{ buttonText }}\n </ElButton>\n\n <DModal\n v-model=\"visible\"\n :title=\"buttonText\"\n width=\"720px\"\n confirm-text=\"确认选择\"\n @confirm=\"confirmSelection\"\n >\n <div class=\"designer-local-picker__dialog-toolbar\">\n <ElInput v-model=\"keyword\" clearable placeholder=\"输入关键词\" @keyup.enter=\"loadItems\">\n <template #prefix><DxSvgIcon icon=\"ri:search-line\" /></template>\n </ElInput>\n <ElButton :loading=\"loading\" @click=\"loadItems\">查询</ElButton>\n </div>\n <ElAlert v-if=\"loadError\" type=\"error\" :closable=\"false\" :title=\"loadError\" />\n <ElCheckboxGroup v-if=\"multiple\" v-model=\"draftIds\" class=\"designer-local-picker__records\">\n <ElCheckbox v-for=\"item in items\" :key=\"item.id\" :value=\"item.id\">\n <span>{{ item.label }}</span\n ><small>{{ item.description }}</small>\n </ElCheckbox>\n </ElCheckboxGroup>\n <ElRadioGroup v-else v-model=\"draftSingleId\" class=\"designer-local-picker__records\">\n <ElRadio v-for=\"item in items\" :key=\"item.id\" :value=\"item.id\">\n <span>{{ item.label }}</span\n ><small>{{ item.description }}</small>\n </ElRadio>\n </ElRadioGroup>\n <ElEmpty v-if=\"!loading && items.length === 0\" description=\"没有匹配记录\" :image-size=\"56\" />\n </DModal>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport type { FormDirectoryAdapter, FormRuntimeAdapterContext } from '@daxiangme/form-core'\nimport DModal from '../infrastructure/FormModalShell.vue'\nimport DxSvgIcon from '../infrastructure/FormIcon.vue'\n\ndefineOptions({ name: 'DesignerLocalPickerField' })\n\ninterface DirectoryPickerItem {\n id: string\n label: string\n description?: string\n}\n\nconst props = defineProps<{\n modelValue: unknown\n componentType: string\n icon: string\n buttonText: string\n disabled: boolean\n multiple: boolean\n adapter?: FormDirectoryAdapter\n adapterContext: FormRuntimeAdapterContext\n}>()\nconst emit = defineEmits<{\n 'update:modelValue': [value: unknown]\n 'runtime-warning': [message: string]\n}>()\nconst visible = ref(false)\nconst keyword = ref('')\nconst draftIds = ref<string[]>([])\nconst draftSingleId = ref('')\nconst items = ref<DirectoryPickerItem[]>([])\nconst loading = ref(false)\nconst loadError = ref('')\nconst selectedItems = computed(() => {\n const ids = selectedIds(props.modelValue)\n return ids.map(\n (id) =>\n selectedValueItem(props.modelValue, id) ??\n items.value.find((item) => item.id === id) ?? { id, label: id },\n )\n})\nconst placeholder = computed(() =>\n props.disabled ? '尚未选择' : `请选择${props.buttonText.replace(/^选择/, '')}`,\n)\n\nfunction openPicker(): void {\n if (props.disabled) return\n if (!props.adapter) {\n emit('runtime-warning', `宿主未配置${props.buttonText}所需的目录 Adapter`)\n return\n }\n const ids = selectedIds(props.modelValue)\n draftIds.value = [...ids]\n draftSingleId.value = ids[0] ?? ''\n keyword.value = ''\n visible.value = true\n void loadItems()\n}\n\nasync function loadItems(): Promise<void> {\n if (!props.adapter || loading.value) return\n loading.value = true\n loadError.value = ''\n try {\n const result = await props.adapter.query({\n subjectType: props.componentType,\n keyword: keyword.value.trim(),\n pageNo: 1,\n pageSize: 100,\n context: props.adapterContext,\n })\n items.value = result.items\n } catch (error) {\n loadError.value = error instanceof Error ? error.message : '目录数据加载失败'\n emit('runtime-warning', loadError.value)\n } finally {\n loading.value = false\n }\n}\n\nfunction confirmSelection(): void {\n const ids = props.multiple ? draftIds.value : draftSingleId.value ? [draftSingleId.value] : []\n const selected = ids\n .map((id) => items.value.find((item) => item.id === id))\n .filter((item): item is DirectoryPickerItem => Boolean(item))\n .map(({ id, label }) => ({ id, label }))\n emit('update:modelValue', props.multiple ? selected : (selected[0] ?? null))\n visible.value = false\n}\n\nfunction selectedValueItem(value: unknown, id: string): DirectoryPickerItem | undefined {\n const values = Array.isArray(value) ? value : value ? [value] : []\n const source = values.find(\n (item) =>\n typeof item === 'object' && item !== null && (item as Record<string, unknown>).id === id,\n ) as Record<string, unknown> | undefined\n return source && typeof source.label === 'string' ? { id, label: source.label } : undefined\n}\n\nfunction selectedIds(value: unknown): string[] {\n const values = Array.isArray(value) ? value : value ? [value] : []\n return values.flatMap((item) => {\n if (typeof item === 'string') return [item]\n if (typeof item !== 'object' || item === null) return []\n const id = (item as Record<string, unknown>).id\n return typeof id === 'string' ? [id] : []\n })\n}\n</script>\n\n<style scoped>\n.designer-local-picker {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-local-picker__value {\n display: flex;\n min-height: 32px;\n align-items: center;\n padding: 0 var(--daxiang-form-space-2);\n overflow: hidden;\n color: var(--el-text-color-placeholder);\n background: var(--el-fill-color-blank);\n border: 1px solid var(--el-border-color);\n border-radius: var(--el-border-radius-base);\n gap: var(--daxiang-form-space-1);\n}\n\n.designer-local-picker__dialog-toolbar {\n display: grid;\n align-items: center;\n margin-bottom: var(--daxiang-form-space-3);\n grid-template-columns: minmax(0, 1fr) auto;\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-local-picker__records {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-local-picker__records :deep(.el-checkbox),\n.designer-local-picker__records :deep(.el-radio) {\n width: 100%;\n height: auto;\n min-height: 58px;\n align-items: flex-start;\n padding: var(--daxiang-form-space-3);\n margin: 0;\n background: var(--el-fill-color-extra-light);\n border-radius: var(--el-border-radius-base);\n}\n\n.designer-local-picker__records :deep(.el-checkbox__label),\n.designer-local-picker__records :deep(.el-radio__label) {\n display: flex;\n min-width: 0;\n flex-direction: column;\n}\n\n.designer-local-picker__records small {\n color: var(--el-text-color-secondary);\n font-size: 12px;\n}\n</style>\n","<template>\n <div class=\"designer-static-control\" :class=\"{ 'is-readonly': readonlyMode }\">\n <DesignerDetailField\n v-if=\"readonlyMode && appearanceMode === 'TEXT'\"\n compact\n :field=\"field\"\n :model-value=\"modelValue\"\n :show-label=\"false\"\n :show-help=\"false\"\n />\n\n <template v-else>\n <ElInput\n v-if=\"componentType === 'text'\"\n :model-value=\"textValue\"\n :placeholder=\"placeholder\"\n :clearable=\"booleanConfiguration('clearable')\"\n :maxlength=\"numberConfiguration('maxLength') || undefined\"\n :disabled=\"controlDisabled\"\n @update:model-value=\"updateValue\"\n >\n <template v-if=\"textConfiguration('prefix')\" #prepend>{{\n textConfiguration('prefix')\n }}</template>\n <template v-if=\"textConfiguration('suffix')\" #append>{{\n textConfiguration('suffix')\n }}</template>\n </ElInput>\n <ElInput\n v-else-if=\"componentType === 'textarea'\"\n :model-value=\"textValue\"\n type=\"textarea\"\n :rows=\"numberConfiguration('rows') || 4\"\n :placeholder=\"placeholder\"\n :maxlength=\"numberConfiguration('maxLength') || undefined\"\n :show-word-limit=\"booleanConfiguration('showWordLimit')\"\n :disabled=\"controlDisabled\"\n @update:model-value=\"updateValue\"\n />\n <div v-else-if=\"componentType === 'number'\">\n <ElInputNumber\n :model-value=\"numberValue\"\n :min=\"nullableNumberConfiguration('minimum')\"\n :max=\"nullableNumberConfiguration('maximum')\"\n :step=\"numberConfiguration('step') || 1\"\n :precision=\"effectiveNumberPrecision\"\n :controls=\"booleanConfiguration('controls')\"\n :controls-position=\"textConfiguration('controlsPosition') === 'RIGHT' ? 'right' : ''\"\n :disabled=\"controlDisabled\"\n @update:model-value=\"updateValue\"\n />\n <div v-if=\"numberSummary\" class=\"designer-static-control__summary\">\n {{ numberSummary }}\n </div>\n </div>\n\n <ElSelect\n v-else-if=\"['select', 'multi-select', 'dynamic-select'].includes(componentType)\"\n :model-value=\"selectValue\"\n :multiple=\"\n componentType !== 'select' &&\n (componentType !== 'dynamic-select' || booleanConfiguration('multiple'))\n \"\n :multiple-limit=\"\n numberConfiguration('maxSelections') || numberConfiguration('multipleLimit') || 0\n \"\n :clearable=\"booleanConfiguration('clearable')\"\n :filterable=\"booleanConfiguration('filterable')\"\n :placeholder=\"placeholder\"\n :disabled=\"controlDisabled\"\n @update:model-value=\"updateValue\"\n >\n <ElOption\n v-for=\"option in options\"\n :key=\"String(option.value)\"\n :label=\"option.label\"\n :value=\"option.value\"\n :disabled=\"option.disabled\"\n />\n </ElSelect>\n\n <ElCheckboxGroup\n v-else-if=\"componentType === 'checkbox'\"\n :model-value=\"arrayValue\"\n :disabled=\"controlDisabled\"\n @update:model-value=\"updateValue\"\n >\n <template v-if=\"textConfiguration('optionStyle') === 'BUTTON'\">\n <ElCheckboxButton\n v-for=\"option in options\"\n :key=\"String(option.value)\"\n :value=\"option.value\"\n >\n {{ option.label }}\n </ElCheckboxButton>\n </template>\n <template v-else>\n <ElCheckbox v-for=\"option in options\" :key=\"String(option.value)\" :value=\"option.value\">\n {{ option.label }}\n </ElCheckbox>\n </template>\n </ElCheckboxGroup>\n\n <ElRadioGroup\n v-else-if=\"componentType === 'radio'\"\n :model-value=\"scalarValue\"\n :disabled=\"controlDisabled\"\n @update:model-value=\"updateValue\"\n >\n <template v-if=\"textConfiguration('optionStyle') === 'BUTTON'\">\n <ElRadioButton\n v-for=\"option in options\"\n :key=\"String(option.value)\"\n :value=\"option.value\"\n >\n {{ option.label }}\n </ElRadioButton>\n </template>\n <template v-else>\n <ElRadio v-for=\"option in options\" :key=\"String(option.value)\" :value=\"option.value\">\n {{ option.label }}\n </ElRadio>\n </template>\n </ElRadioGroup>\n\n <ElDatePicker\n v-else-if=\"componentType === 'date'\"\n :model-value=\"dateValue\"\n :type=\"datePickerType\"\n :format=\"textConfiguration('format') || undefined\"\n :placeholder=\"placeholder\"\n :clearable=\"booleanConfiguration('clearable')\"\n :disabled=\"controlDisabled\"\n @update:model-value=\"updateValue\"\n />\n <ElDatePicker\n v-else-if=\"componentType === 'date-range'\"\n :model-value=\"arrayValue\"\n :type=\"textConfiguration('rangeType') === 'DATETIME' ? 'datetimerange' : 'daterange'\"\n :range-separator=\"textConfiguration('separator') || '至'\"\n start-placeholder=\"开始日期\"\n end-placeholder=\"结束日期\"\n :disabled=\"controlDisabled\"\n @update:model-value=\"updateValue\"\n />\n <ElDatePicker\n v-else-if=\"componentType === 'date-multiple'\"\n :model-value=\"arrayValue\"\n type=\"dates\"\n placeholder=\"选择多个日期\"\n :disabled=\"controlDisabled\"\n @update:model-value=\"updateValue\"\n />\n\n <div v-else-if=\"componentType === 'serial-number'\" class=\"designer-static-control__serial\">\n <ElInput model-value=\"保存后自动生成\" disabled>\n <template #prepend><DxSvgIcon icon=\"ri:sort-number-asc\" /></template>\n </ElInput>\n <div v-if=\"booleanConfiguration('showCode')\" class=\"designer-static-control__code-preview\">\n <DxSvgIcon\n :icon=\"\n textConfiguration('codeType') === 'QRCODE' ? 'ri:qr-code-line' : 'ri:barcode-line'\n \"\n />\n <small>{{\n textConfiguration('codeType') === 'QRCODE' ? '二维码预览' : '条形码预览'\n }}</small>\n </div>\n </div>\n <ElUpload\n v-else-if=\"componentType === 'file' && textConfiguration('displayMode') === 'DRAG'\"\n drag\n action=\"#\"\n :auto-upload=\"false\"\n :limit=\"numberConfiguration('maxCount') || 5\"\n :accept=\"textConfiguration('accept')\"\n :disabled=\"controlDisabled || !assetAdapter || assetUploading\"\n :file-list=\"fileList\"\n @change=\"uploadSelectedFile\"\n @remove=\"removeAsset\"\n @preview=\"downloadAsset\"\n >\n <DxSvgIcon class=\"designer-static-control__upload-icon\" icon=\"ri:upload-cloud-2-line\" />\n <div>拖入文件,或点击选择</div>\n <template #tip\n ><div class=\"el-upload__tip\">{{ assetCapabilityTip }}</div></template\n >\n </ElUpload>\n <ElUpload\n v-else-if=\"componentType === 'file'\"\n action=\"#\"\n :auto-upload=\"false\"\n :limit=\"numberConfiguration('maxCount') || 5\"\n :accept=\"textConfiguration('accept')\"\n :disabled=\"controlDisabled || !assetAdapter || assetUploading\"\n :file-list=\"fileList\"\n @change=\"uploadSelectedFile\"\n @remove=\"removeAsset\"\n @preview=\"downloadAsset\"\n >\n <ElButton :loading=\"assetUploading\" :disabled=\"controlDisabled || !assetAdapter\">\n <DxSvgIcon icon=\"ri:upload-2-line\" />选择文件\n </ElButton>\n <template #tip\n ><div class=\"el-upload__tip\">{{ assetCapabilityTip }}</div></template\n >\n </ElUpload>\n <ElSwitch\n v-else-if=\"componentType === 'switch'\"\n :model-value=\"booleanValue\"\n :active-text=\"textConfiguration('activeText')\"\n :inactive-text=\"textConfiguration('inactiveText')\"\n :active-color=\"textConfiguration('activeColor') || undefined\"\n :inactive-color=\"textConfiguration('inactiveColor') || undefined\"\n :disabled=\"controlDisabled\"\n @update:model-value=\"updateValue\"\n />\n <ElRate\n v-else-if=\"componentType === 'rate'\"\n :model-value=\"numberValue || 0\"\n :max=\"numberConfiguration('max') || 5\"\n :allow-half=\"booleanConfiguration('allowHalf')\"\n :show-score=\"booleanConfiguration('showText')\"\n :disabled=\"controlDisabled\"\n @update:model-value=\"updateValue\"\n />\n <DxStepProgress\n v-else-if=\"componentType === 'steps'\"\n :model-value=\"scalarValue ?? 0\"\n :items=\"options\"\n :direction=\"textConfiguration('direction') === 'vertical' ? 'vertical' : 'horizontal'\"\n :finish-status=\"stepFinishStatus\"\n :compact=\"booleanConfiguration('simple')\"\n :show-description=\"field.configuration.showDescription !== false\"\n :disabled=\"controlDisabled\"\n @update:model-value=\"updateValue\"\n />\n <div v-else-if=\"componentType === 'rich-text'\" class=\"designer-static-control__rich-text\">\n <div class=\"designer-static-control__rich-toolbar\">\n <DxSvgIcon icon=\"ri:bold\" />\n <DxSvgIcon icon=\"ri:italic\" />\n <DxSvgIcon icon=\"ri:list-unordered\" />\n <DxSvgIcon icon=\"ri:link\" />\n </div>\n <div\n class=\"designer-static-control__rich-content\"\n :contenteditable=\"!controlDisabled\"\n :data-placeholder=\"placeholder || '请输入富文本内容'\"\n @input=\"updateRichText\"\n >\n {{ textValue }}\n </div>\n </div>\n <ElTag v-else-if=\"componentType === 'hidden'\" effect=\"plain\" type=\"info\">\n 隐藏字段 · 运行时不展示\n </ElTag>\n\n <DesignerSignatureField\n v-else-if=\"componentType === 'signature'\"\n :model-value=\"signatureValue\"\n :disabled=\"controlDisabled\"\n :line-width=\"numberConfiguration('lineWidth') || 2\"\n :pen-color=\"textConfiguration('penColor') || '#111827'\"\n @update:model-value=\"updateValue\"\n />\n\n <div v-else-if=\"componentType === 'opinion'\" class=\"designer-static-control__opinion\">\n <ElInput\n v-if=\"textConfiguration('mode') !== 'SIGNATURE'\"\n :model-value=\"opinionText\"\n type=\"textarea\"\n :rows=\"numberConfiguration('rows') || 4\"\n :maxlength=\"numberConfiguration('maxLength') || 2000\"\n placeholder=\"请输入审批意见\"\n :disabled=\"controlDisabled\"\n @update:model-value=\"updateOpinionText\"\n />\n <DesignerSignatureField\n v-if=\"textConfiguration('mode') !== 'OPINION'\"\n :model-value=\"opinionSignature\"\n :disabled=\"controlDisabled\"\n :line-width=\"2\"\n pen-color=\"#111827\"\n @update:model-value=\"updateOpinionSignature\"\n />\n <ElTag effect=\"plain\" type=\"info\">审批上下文控件</ElTag>\n </div>\n\n <DesignerLocalPickerField\n v-else-if=\"localPickerTypes.includes(componentType)\"\n :model-value=\"modelValue\"\n :component-type=\"componentType\"\n :icon=\"componentIcon\"\n :button-text=\"buttonText\"\n :disabled=\"controlDisabled\"\n :multiple=\"localPickerMultiple\"\n :adapter=\"adapters?.directory\"\n :adapter-context=\"adapterContext\"\n @update:model-value=\"updateValue\"\n @runtime-warning=\"(message) => emit('runtime-warning', message)\"\n />\n\n <ElCascader\n v-else-if=\"componentType === 'region'\"\n :model-value=\"arrayValue\"\n :options=\"regionOptions\"\n :props=\"{\n multiple: booleanConfiguration('multiple'),\n checkStrictly: booleanConfiguration('checkStrictly'),\n }\"\n :show-all-levels=\"booleanConfiguration('showFullPath')\"\n :separator=\"textConfiguration('separator') || ' / '\"\n placeholder=\"请选择省 / 市 / 区\"\n :disabled=\"controlDisabled\"\n @update:model-value=\"updateValue\"\n />\n\n <ElTreeSelect\n v-else-if=\"componentType === 'dictionary-tree'\"\n :model-value=\"modelValue\"\n :data=\"dictionaryOptions\"\n :multiple=\"booleanConfiguration('multiple')\"\n :check-strictly=\"booleanConfiguration('checkStrictly')\"\n show-checkbox\n check-on-click-node\n placeholder=\"请选择字典节点\"\n :disabled=\"controlDisabled\"\n @update:model-value=\"updateValue\"\n />\n\n <ElInput\n v-else-if=\"componentType === 'scan-code'\"\n :model-value=\"textValue\"\n :disabled=\"controlDisabled || !booleanConfiguration('allowManualInput')\"\n placeholder=\"扫码结果\"\n @update:model-value=\"updateValue\"\n >\n <template #append>\n <ElTooltip :content=\"adapters?.scan ? '扫描二维码或条码' : '宿主未配置扫码 Adapter'\">\n <ElButton\n :disabled=\"controlDisabled || !adapters?.scan\"\n aria-label=\"扫码\"\n @click=\"scanCode\"\n >\n <DxSvgIcon icon=\"ri:qr-scan-2-line\" />\n </ElButton>\n </ElTooltip>\n </template>\n </ElInput>\n\n <div v-else-if=\"componentType === 'ocr'\" class=\"designer-static-control__ocr\">\n <ElUpload\n action=\"#\"\n :auto-upload=\"false\"\n :disabled=\"controlDisabled || !adapters?.ocr\"\n @change=\"recognizeImage\"\n >\n <ElButton :disabled=\"controlDisabled || !adapters?.ocr\" :loading=\"capabilityLoading\">\n <DxSvgIcon icon=\"ri:image-add-line\" />选择识别图片\n </ElButton>\n <template #tip>\n <div class=\"el-upload__tip\">\n {{ adapters?.ocr ? '识别结果由 OCR Adapter 返回' : '宿主未配置 OCR Adapter' }}\n </div>\n </template>\n </ElUpload>\n </div>\n\n <div v-else-if=\"componentType === 'position'\" class=\"designer-static-control__position\">\n <ElInput :model-value=\"positionSummary\" disabled />\n <ElButton\n :disabled=\"controlDisabled || !adapters?.location\"\n :loading=\"capabilityLoading\"\n @click=\"locatePosition\"\n >\n <DxSvgIcon icon=\"ri:map-pin-line\" />获取位置\n </ElButton>\n <small>{{\n adapters?.location ? '运行时保存受控定位结果' : '宿主未配置定位 Adapter'\n }}</small>\n </div>\n\n <ElAlert\n v-else-if=\"componentType === 'online-document'\"\n type=\"warning\"\n :closable=\"false\"\n show-icon\n title=\"在线文档不可用\"\n description=\"当前部署未配置 Web Office 服务\"\n />\n\n <ElCascader\n v-else-if=\"componentType === 'dynamic-cascade'\"\n :model-value=\"arrayValue\"\n :options=\"cascaderOptions\"\n :props=\"{\n multiple: booleanConfiguration('multiple'),\n checkStrictly: booleanConfiguration('checkStrictly'),\n }\"\n :show-all-levels=\"booleanConfiguration('showAllLevels')\"\n :separator=\"textConfiguration('separator') || ' / '\"\n :disabled=\"controlDisabled\"\n @update:model-value=\"updateValue\"\n />\n\n <ElAlert\n v-else\n type=\"error\"\n :closable=\"false\"\n show-icon\n :title=\"`${componentName}缺少独立渲染器`\"\n description=\"该组件已失败关闭,不能回退为文本框\"\n />\n </template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue'\nimport type { CascaderOption, UploadFile, UploadUserFile } from 'element-plus'\nimport DxSvgIcon from '../infrastructure/FormIcon.vue'\nimport { findDesignerComponent } from '@daxiangme/form-core'\nimport { formatDesignerNumber, resolveDesignerNumberPrecision } from '@daxiangme/form-core'\nimport type {\n DesignerField,\n DesignerOption,\n DesignerRuntimeAdapters,\n DesignerRuntimeMode,\n FormAssetAdapter,\n FormAssetReference,\n FormRuntimeAdapterContext,\n} from '@daxiangme/form-core'\nimport DxStepProgress from '../form/controls/DxStepProgress.vue'\nimport DesignerDetailField from './DesignerDetailField.vue'\nimport DesignerSignatureField from './DesignerSignatureField.vue'\nimport DesignerLocalPickerField from './DesignerLocalPickerField.vue'\n\ndefineOptions({ name: 'DesignerStaticControl' })\n\nconst props = withDefaults(\n defineProps<{\n modelValue: unknown\n field: DesignerField\n mode: DesignerRuntimeMode\n appearanceMode?: 'CONTROL' | 'TEXT'\n adapters?: DesignerRuntimeAdapters\n adapterContext?: FormRuntimeAdapterContext\n }>(),\n { appearanceMode: 'CONTROL', adapterContext: () => ({}) },\n)\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: unknown]\n 'runtime-warning': [message: string]\n}>()\nconst assetAdapter = computed<FormAssetAdapter | undefined>(() => props.adapters?.asset)\nconst registration = computed(() => findDesignerComponent(props.field.componentType))\nconst componentType = computed(() => props.field.componentType)\nconst componentName = computed(() => registration.value?.name ?? props.field.componentType)\nconst componentIcon = computed(() => registration.value?.icon ?? 'ri:error-warning-line')\nconst controlDisabled = computed(\n () =>\n props.mode === 'DESIGN' ||\n props.mode === 'READ_ONLY' ||\n props.mode === 'DETAIL' ||\n props.field.display.readonly,\n)\nconst readonlyMode = computed(() => props.mode === 'READ_ONLY' || props.field.display.readonly)\nconst placeholder = computed(\n () => props.field.display.placeholder || textConfiguration('placeholder') || '请输入',\n)\nconst textValue = computed(() => (typeof props.modelValue === 'string' ? props.modelValue : ''))\nconst numberValue = computed(() => (typeof props.modelValue === 'number' ? props.modelValue : null))\nconst effectiveNumberPrecision = computed(() =>\n resolveDesignerNumberPrecision(props.field.configuration),\n)\nconst booleanValue = computed(() => Boolean(props.modelValue))\nconst arrayValue = computed(() => (Array.isArray(props.modelValue) ? props.modelValue : []))\nconst selectValue = computed<\n string | number | boolean | Array<string | number | boolean> | undefined\n>(() => {\n if (Array.isArray(props.modelValue)) {\n return props.modelValue.filter((item): item is string | number | boolean =>\n ['string', 'number', 'boolean'].includes(typeof item),\n )\n }\n return ['string', 'number', 'boolean'].includes(typeof props.modelValue)\n ? (props.modelValue as string | number | boolean)\n : undefined\n})\nconst scalarValue = computed<string | number | boolean | undefined>(() =>\n ['string', 'number', 'boolean'].includes(typeof props.modelValue)\n ? (props.modelValue as string | number | boolean)\n : undefined,\n)\nconst stepFinishStatus = computed<'wait' | 'process' | 'finish' | 'error' | 'success'>(() => {\n const status = textConfiguration('finishStatus')\n return ['wait', 'process', 'finish', 'error', 'success'].includes(status)\n ? (status as 'wait' | 'process' | 'finish' | 'error' | 'success')\n : 'success'\n})\nconst dateValue = computed(() =>\n props.modelValue instanceof Date || typeof props.modelValue === 'string' ? props.modelValue : '',\n)\nconst options = computed<DesignerOption[]>(() =>\n normalizeOptions(props.field.configuration.options),\n)\nconst cascaderOptions = computed<CascaderOption[]>(() =>\n normalizeOptions(props.field.configuration.options).map(toCascaderOption),\n)\nconst localPickerTypes = [\n 'user',\n 'role',\n 'organization',\n 'post',\n 'custom-data',\n 'process-reference',\n 'form-reference',\n 'data-dialog',\n]\nconst localPickerMultiple = computed(() => textConfiguration('selectionMode') === 'MULTIPLE')\nconst regionOptions = computed<CascaderOption[]>(() => [\n {\n label: '华北地区',\n value: 'north',\n children: [\n {\n label: '北京市',\n value: 'beijing',\n children: [\n { label: '东城区', value: 'dongcheng' },\n { label: '海淀区', value: 'haidian' },\n ],\n },\n ],\n },\n {\n label: '华东地区',\n value: 'east',\n children: [\n {\n label: '上海市',\n value: 'shanghai',\n children: [{ label: '浦东新区', value: 'pudong' }],\n },\n ],\n },\n])\nconst dictionaryOptions = computed(() => [\n {\n value: 'business',\n label: '业务分类',\n children: [\n { value: 'procurement', label: '采购' },\n { value: 'expense', label: '费用' },\n ],\n },\n {\n value: 'priority',\n label: '优先级',\n children: [\n { value: 'normal', label: '普通' },\n { value: 'urgent', label: '紧急' },\n ],\n },\n])\nconst datePickerType = computed<'date' | 'datetime' | 'month' | 'year'>(() => {\n const type = textConfiguration('dateType')\n return ['date', 'datetime', 'month', 'year'].includes(type)\n ? (type as 'date' | 'datetime' | 'month' | 'year')\n : 'date'\n})\nconst buttonText = computed(\n () =>\n textConfiguration('buttonText') ||\n (registration.value?.availability === 'UNAVAILABLE'\n ? '当前不可用'\n : `选择${componentName.value}`),\n)\nconst opinionText = computed(() => {\n if (typeof props.modelValue === 'string') return props.modelValue\n if (typeof props.modelValue !== 'object' || props.modelValue === null) return ''\n const value = (props.modelValue as Record<string, unknown>).opinion\n return typeof value === 'string' ? value : ''\n})\nconst opinionSignature = computed(() => {\n if (typeof props.modelValue !== 'object' || props.modelValue === null) return ''\n const value = (props.modelValue as Record<string, unknown>).signature\n return typeof value === 'string' ? value : ''\n})\nconst signatureValue = computed(() =>\n typeof props.modelValue === 'string' ? props.modelValue : '',\n)\nconst resolvedAssets = ref<FormAssetReference[]>([])\nconst assetUploading = ref(false)\nconst capabilityLoading = ref(false)\nconst assetIds = computed(() => normalizeAssetIds(props.modelValue))\nconst fileList = computed<UploadUserFile[]>(() => {\n return assetIds.value.map((assetId, index) => {\n const asset = resolvedAssets.value.find((item) => item.assetId === assetId)\n return {\n name: asset?.name ?? `文件 ${index + 1}`,\n uid: index + 1,\n size: asset?.size,\n url: asset?.downloadUrl,\n status: 'success' as const,\n }\n })\n})\nconst assetCapabilityTip = computed(() => {\n if (props.mode === 'DESIGN') return '设计态不执行上传,运行时由宿主资产 Adapter 接管'\n return assetAdapter.value\n ? '文件将通过宿主注入的资产 Adapter 上传,表单值仅保存 assetId'\n : '宿主未配置文件能力,上传已禁用'\n})\nconst positionSummary = computed(() => {\n if (typeof props.modelValue !== 'object' || props.modelValue === null) return '经度 — / 纬度 —'\n const value = props.modelValue as Record<string, unknown>\n const address = typeof value.address === 'string' && value.address ? ` / ${value.address}` : ''\n return `经度 ${String(value.longitude ?? '—')} / 纬度 ${String(value.latitude ?? '—')}${address}`\n})\nconst numberSummary = computed(() => {\n if (numberValue.value === null) return ''\n if (\n !textConfiguration('currencyPrefix') &&\n !booleanConfiguration('thousandsSeparator') &&\n !booleanConfiguration('uppercaseRmb')\n ) {\n return ''\n }\n return formatDesignerNumber(numberValue.value, props.field.configuration)\n})\n\nwatch(\n [assetIds, assetAdapter],\n async ([ids, adapter]) => {\n if (!adapter || ids.length === 0) {\n resolvedAssets.value = []\n return\n }\n try {\n resolvedAssets.value = await adapter.resolve({\n assetIds: ids,\n fieldId: props.field.id,\n fieldCode: props.field.key,\n context: props.adapterContext,\n })\n } catch (error) {\n reportAssetFailure(error, '文件信息解析失败')\n }\n },\n { immediate: true },\n)\n\n/** 向静态预览值容器回传交互结果;设计态控件已禁用。 */\nfunction updateValue(value: unknown): void {\n if (controlDisabled.value) return\n emit('update:modelValue', value)\n}\n\nfunction updateOpinionText(value: string): void {\n if (controlDisabled.value) return\n const source =\n typeof props.modelValue === 'object' && props.modelValue !== null ? props.modelValue : {}\n emit('update:modelValue', { ...source, opinion: value })\n}\n\nfunction updateOpinionSignature(value: string): void {\n if (controlDisabled.value) return\n const source =\n typeof props.modelValue === 'object' && props.modelValue !== null ? props.modelValue : {}\n emit('update:modelValue', { ...source, signature: value })\n}\n\nfunction updateRichText(event: Event): void {\n if (controlDisabled.value) return\n updateValue((event.currentTarget as HTMLElement | null)?.innerText ?? '')\n}\n\nasync function uploadSelectedFile(file: UploadFile): Promise<void> {\n if (controlDisabled.value || !assetAdapter.value || !file.raw || assetUploading.value) return\n assetUploading.value = true\n try {\n const asset = await assetAdapter.value.upload({\n file: file.raw,\n fieldId: props.field.id,\n fieldCode: props.field.key,\n policyRef: textConfiguration('assetPolicyRef') || undefined,\n context: props.adapterContext,\n })\n resolvedAssets.value = [\n ...resolvedAssets.value.filter((item) => item.assetId !== asset.assetId),\n asset,\n ]\n emit('update:modelValue', [...assetIds.value, asset.assetId])\n } catch (error) {\n reportAssetFailure(error, '文件上传失败')\n } finally {\n assetUploading.value = false\n }\n}\n\n/** 移除只修改字段引用,不触发服务端物理删除。 */\nfunction removeAsset(file: UploadFile): void {\n if (controlDisabled.value) return\n const index = Math.max(0, Number(file.uid) - 1)\n emit(\n 'update:modelValue',\n assetIds.value.filter((_, currentIndex) => currentIndex !== index),\n )\n}\n\n/** 下载始终通过 Adapter 获取受控 URL 或 Blob。 */\nasync function downloadAsset(file: UploadFile): Promise<void> {\n if (!assetAdapter.value) return\n const assetId = assetIds.value[Math.max(0, Number(file.uid) - 1)]\n if (!assetId) return\n try {\n const result = await assetAdapter.value.download({\n assetId,\n fieldId: props.field.id,\n fieldCode: props.field.key,\n context: props.adapterContext,\n })\n const url = result.kind === 'URL' ? result.url : URL.createObjectURL(result.blob)\n const link = document.createElement('a')\n link.href = url\n link.download = result.fileName ?? file.name\n link.rel = 'noopener noreferrer'\n link.click()\n if (result.kind === 'BLOB') URL.revokeObjectURL(url)\n } catch (error) {\n reportAssetFailure(error, '文件下载失败')\n }\n}\n\n/** 新协议只输出 assetId;旧对象值只在内存中读取兼容字段。 */\nfunction normalizeAssetIds(value: unknown): string[] {\n if (!Array.isArray(value)) return []\n return value.flatMap((item) => {\n if (typeof item === 'string' && item.trim()) return [item]\n if (typeof item !== 'object' || item === null) return []\n const assetId = (item as Record<string, unknown>).assetId\n return typeof assetId === 'string' && assetId.trim() ? [assetId] : []\n })\n}\n\nfunction reportAssetFailure(error: unknown, fallback: string): void {\n emit('runtime-warning', error instanceof Error ? error.message : fallback)\n}\n\nasync function scanCode(): Promise<void> {\n if (!props.adapters?.scan || controlDisabled.value) return\n try {\n const result = await props.adapters.scan.scan({ context: props.adapterContext })\n updateValue(result.text)\n } catch (error) {\n reportAssetFailure(error, '扫码失败')\n }\n}\n\nasync function recognizeImage(file: UploadFile): Promise<void> {\n if (!props.adapters?.ocr || !file.raw || controlDisabled.value || capabilityLoading.value) return\n capabilityLoading.value = true\n try {\n const result = await props.adapters.ocr.recognize({\n file: file.raw,\n fieldId: props.field.id,\n fieldCode: props.field.key,\n provider: textConfiguration('provider') || undefined,\n context: props.adapterContext,\n })\n updateValue(result)\n } catch (error) {\n reportAssetFailure(error, 'OCR 识别失败')\n } finally {\n capabilityLoading.value = false\n }\n}\n\nasync function locatePosition(): Promise<void> {\n if (!props.adapters?.location || controlDisabled.value || capabilityLoading.value) return\n capabilityLoading.value = true\n try {\n const result = await props.adapters.location.locate({ context: props.adapterContext })\n updateValue({ ...result, collectedAt: new Date().toISOString() })\n } catch (error) {\n reportAssetFailure(error, '定位失败')\n } finally {\n capabilityLoading.value = false\n }\n}\n\nfunction textConfiguration(key: string): string {\n const value = props.field.configuration[key]\n return typeof value === 'string' ? value : ''\n}\n\nfunction numberConfiguration(key: string): number {\n const value = props.field.configuration[key]\n return typeof value === 'number' && Number.isFinite(value) ? value : 0\n}\n\nfunction nullableNumberConfiguration(key: string): number | undefined {\n const value = props.field.configuration[key]\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined\n}\n\nfunction booleanConfiguration(key: string): boolean {\n return props.field.configuration[key] === true\n}\n\nfunction normalizeOptions(source: unknown): DesignerOption[] {\n if (!Array.isArray(source)) return []\n return source.map((item, index) => {\n if (typeof item !== 'object' || item === null || Array.isArray(item)) {\n return { label: String(item), value: String(item) }\n }\n const option = item as Record<string, unknown>\n return {\n label: String(option.label ?? `选项 ${index + 1}`),\n value: normalizeOptionValue(option.value, index),\n disabled: option.disabled === true,\n children: normalizeOptions(option.children),\n }\n })\n}\n\nfunction normalizeOptionValue(value: unknown, index: number): string | number | boolean {\n return ['string', 'number', 'boolean'].includes(typeof value)\n ? (value as string | number | boolean)\n : `option-${index + 1}`\n}\n\nfunction toCascaderOption(option: DesignerOption): CascaderOption {\n return {\n label: option.label,\n value: typeof option.value === 'boolean' ? String(option.value) : option.value,\n disabled: option.disabled,\n children: option.children?.map(toCascaderOption),\n }\n}\n</script>\n\n<style scoped>\n.designer-static-control,\n.designer-static-control :deep(.el-select),\n.designer-static-control :deep(.el-date-editor),\n.designer-static-control :deep(.el-input-number),\n.designer-static-control :deep(.el-cascader) {\n width: 100%;\n}\n\n.designer-static-control__readonly {\n display: inline-flex;\n min-height: 32px;\n align-items: center;\n color: var(--el-text-color-regular);\n overflow-wrap: anywhere;\n}\n\n.designer-static-control__summary,\n.designer-static-control__position small {\n display: block;\n margin-top: var(--daxiang-form-space-1);\n color: var(--el-text-color-secondary);\n font-size: 12px;\n}\n\n.designer-static-control__rich-text {\n overflow: hidden;\n border: 1px solid var(--el-border-color);\n border-radius: var(--el-border-radius-base);\n}\n\n.designer-static-control__rich-toolbar {\n display: flex;\n align-items: center;\n padding: var(--daxiang-form-space-2);\n gap: var(--daxiang-form-space-3);\n color: var(--el-text-color-secondary);\n background: var(--el-fill-color-light);\n border-bottom: 1px solid var(--el-border-color-lighter);\n}\n\n.designer-static-control__rich-content {\n min-height: 140px;\n padding: var(--daxiang-form-space-3);\n outline: none;\n}\n\n.designer-static-control__rich-content:empty::before {\n color: var(--el-text-color-placeholder);\n content: attr(data-placeholder);\n}\n\n.designer-static-control__serial,\n.designer-static-control__opinion,\n.designer-static-control__position {\n display: grid;\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-static-control__code-preview {\n display: flex;\n align-items: center;\n color: var(--el-text-color-secondary);\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-static-control__code-preview > :first-child,\n.designer-static-control__upload-icon {\n font-size: 28px;\n}\n\n.designer-static-control__position {\n grid-template-columns: minmax(0, 1fr) auto;\n}\n\n.designer-static-control__position small {\n grid-column: 1 / -1;\n}\n</style>\n","<template>\n <ElCol\n v-if=\"node.nodeType === 'FIELD' && runtimeVisibleField\"\n :span=\"grid.span\"\n :offset=\"grid.offset\"\n >\n <DesignerDetailField\n v-if=\"mode === 'DETAIL'\"\n :field=\"runtimeVisibleField\"\n :model-value=\"valueStore.fields[runtimeVisibleField.id]\"\n :show-label=\"detailShowLabel\"\n />\n <ElFormItem\n v-else\n :label=\"grid.showLabel ? runtimeVisibleField.label : ''\"\n :label-position=\"fieldLabelPosition\"\n :required=\"runtimeFieldState.required\"\n :error=\"runtimeFieldFeedback?.error\"\n @focusin=\"emitComponentEvent(node.id, 'FOCUS')\"\n @focusout=\"emitComponentEvent(node.id, 'BLUR')\"\n >\n <DesignerStaticControl\n :model-value=\"valueStore.fields[runtimeVisibleField.id]\"\n :field=\"runtimeField\"\n :mode=\"mode\"\n :appearance-mode=\"readonlyDisplayMode\"\n :adapters=\"adapters\"\n :adapter-context=\"adapterContext\"\n @update:model-value=\"updateFieldValue\"\n @runtime-warning=\"(message) => emit('runtime-warning', message)\"\n />\n <small v-if=\"runtimeVisibleField.helpText\" class=\"designer-runtime-node__help\">{{\n runtimeVisibleField.helpText\n }}</small>\n <small v-if=\"runtimeFieldFeedback?.warning\" class=\"designer-runtime-node__warning\">\n {{ runtimeFieldFeedback.warning }}\n </small>\n </ElFormItem>\n </ElCol>\n\n <ElCol\n v-else-if=\"\n node.nodeType === 'CONTAINER' && !(mode === 'DETAIL' && node.componentType === 'button')\n \"\n :span=\"grid.span\"\n :offset=\"grid.offset\"\n >\n <div class=\"designer-runtime-node__surface-host\" :class=\"containerAppearanceClasses\">\n <component\n :is=\"`h${headingLevel}`\"\n v-if=\"node.componentType === 'title'\"\n class=\"designer-runtime-node__heading\"\n :style=\"headingStyle\"\n >\n {{ textConfiguration('text') || '标题' }}\n </component>\n <ElDivider\n v-else-if=\"node.componentType === 'divider'\"\n class=\"designer-runtime-node__divider\"\n :content-position=\"dividerPosition\"\n :border-style=\"dividerBorderStyle\"\n >\n {{ textConfiguration('text') }}\n </ElDivider>\n <ElAlert\n v-else-if=\"node.componentType === 'alert'\"\n :title=\"textConfiguration('title') || '提示内容'\"\n :type=\"alertType\"\n :effect=\"textConfiguration('effect') === 'dark' ? 'dark' : 'light'\"\n :show-icon=\"booleanConfiguration('showIcon')\"\n :closable=\"booleanConfiguration('closable')\"\n />\n <div\n v-else-if=\"node.componentType === 'button'\"\n class=\"designer-runtime-node__button\"\n :class=\"`is-${buttonAlign}`\"\n >\n <ElButton\n :type=\"buttonType\"\n :plain=\"booleanConfiguration('plain')\"\n :round=\"booleanConfiguration('round')\"\n :disabled=\"mode === 'READ_ONLY' || mode === 'DETAIL' || booleanConfiguration('disabled')\"\n @click=\"emitComponentEvent(node.id, 'CLICK')\"\n >\n {{ textConfiguration('text') || '按钮' }}\n </ElButton>\n </div>\n <ElAlert\n v-else-if=\"node.componentType === 'captcha'\"\n type=\"warning\"\n :closable=\"false\"\n show-icon\n title=\"当前部署未配置短信或邮箱验证码渠道\"\n />\n <ElAlert\n v-else-if=\"node.componentType === 'iframe'\"\n type=\"info\"\n :closable=\"false\"\n show-icon\n :title=\"textConfiguration('title') || '外部页面'\"\n description=\"静态 Core 不加载任意外部 URL\"\n />\n <ElTabs\n v-else-if=\"node.componentType === 'tabs'\"\n v-model=\"activeSlot\"\n class=\"designer-runtime-node__tabs\"\n :class=\"[`is-${tabsType || 'line'}`, { 'is-detail': mode === 'DETAIL' }]\"\n :type=\"tabsType\"\n >\n <ElTabPane\n v-for=\"slot in node.slots\"\n :key=\"slot.id\"\n :name=\"slot.slotCode\"\n :label=\"slot.label\"\n >\n <ElRow class=\"designer-runtime-node__grid\" :gutter=\"gutter\">\n <DesignerRuntimeNode\n v-for=\"child in slot.children\"\n :key=\"child.id\"\n :node=\"child\"\n :fields=\"fields\"\n :value-store=\"valueStore\"\n :mode=\"mode\"\n :device=\"device\"\n :gutter=\"gutter\"\n :appearance=\"appearance\"\n :field-states=\"fieldStates\"\n :field-feedbacks=\"fieldFeedbacks\"\n :feedback-scope=\"feedbackScope\"\n :adapters=\"adapters\"\n :adapter-context=\"adapterContext\"\n :readonly-display-mode=\"readonlyDisplayMode\"\n @update-field-value=\"(fieldId, value) => emit('update-field-value', fieldId, value)\"\n @update-collection=\"\n (containerId, rows) => emit('update-collection', containerId, rows)\n \"\n @component-event=\"(...args) => emit('component-event', ...args)\"\n @runtime-warning=\"(message) => emit('runtime-warning', message)\"\n />\n </ElRow>\n </ElTabPane>\n </ElTabs>\n <DxFormRowSubtable\n v-else-if=\"node.componentType === 'row-subtable'\"\n :model-value=\"subtableRows\"\n :columns=\"subtableColumns\"\n :mode=\"mode\"\n :device=\"device\"\n :title=\"containerTitle || componentName\"\n :allow-create=\"booleanConfiguration('allowCreate')\"\n :allow-copy=\"booleanConfiguration('allowCopy')\"\n :allow-delete=\"booleanConfiguration('allowDelete')\"\n :show-index=\"booleanConfiguration('showIndex')\"\n :pagination=\"booleanConfiguration('pagination')\"\n :page-size=\"numberConfiguration('pageSize') || 10\"\n :initial-rows=\"numberConfiguration('initialRows')\"\n :default-values=\"subtableDefaultValues\"\n @update:model-value=\"updateSubtableRows\"\n >\n <template #cell=\"{ column, value, update, row }\">\n <div\n v-if=\"fieldForColumn(column)\"\n @focusin=\"emitComponentEvent(column.columnId, 'FOCUS', row, node.id)\"\n @focusout=\"emitComponentEvent(column.columnId, 'BLUR', row, node.id)\"\n >\n <DesignerStaticControl\n :model-value=\"value\"\n :field=\"runtimeSubtableField(column)\"\n :mode=\"mode\"\n :appearance-mode=\"readonlyDisplayMode\"\n :adapters=\"adapters\"\n :adapter-context=\"{ ...adapterContext, rowKey: row.rowId }\"\n @update:model-value=\"updateSubtableField(column, row, $event, update, node.id)\"\n @runtime-warning=\"(message) => emit('runtime-warning', message)\"\n />\n <small\n v-if=\"subtableFeedback(column.fieldId, row, node.id)?.error\"\n class=\"designer-runtime-node__error\"\n >\n {{ subtableFeedback(column.fieldId, row, node.id)?.error }}\n </small>\n <small\n v-if=\"subtableFeedback(column.fieldId, row, node.id)?.warning\"\n class=\"designer-runtime-node__warning\"\n >\n {{ subtableFeedback(column.fieldId, row, node.id)?.warning }}\n </small>\n </div>\n <ElText v-else type=\"danger\">失效字段</ElText>\n </template>\n <template #detail-cell=\"{ column, value }\">\n <DesignerDetailField\n v-if=\"fieldForColumn(column)\"\n compact\n :field=\"fieldForColumn(column)!\"\n :model-value=\"value\"\n :show-label=\"false\"\n />\n <ElText v-else type=\"danger\">失效字段</ElText>\n </template>\n </DxFormRowSubtable>\n <DxFormBlockSubtable\n v-else-if=\"node.componentType === 'block-subtable'\"\n :model-value=\"subtableRows\"\n :columns=\"subtableColumns\"\n :mode=\"mode\"\n :device=\"device\"\n :title=\"containerTitle || componentName\"\n :allow-create=\"booleanConfiguration('allowCreate')\"\n :allow-copy=\"booleanConfiguration('allowCopy')\"\n :allow-delete=\"booleanConfiguration('allowDelete')\"\n :initial-rows=\"numberConfiguration('initialRows')\"\n :deep-edit-mode=\"textConfiguration('deepEditMode') || 'INLINE'\"\n :default-values=\"subtableDefaultValues\"\n @update:model-value=\"updateSubtableRows\"\n >\n <template #field=\"{ column, value, update, row }\">\n <div\n v-if=\"fieldForColumn(column)\"\n @focusin=\"emitComponentEvent(column.columnId, 'FOCUS', row, node.id)\"\n @focusout=\"emitComponentEvent(column.columnId, 'BLUR', row, node.id)\"\n >\n <DesignerStaticControl\n :model-value=\"value\"\n :field=\"runtimeSubtableField(column)\"\n :mode=\"mode\"\n :appearance-mode=\"readonlyDisplayMode\"\n :adapters=\"adapters\"\n :adapter-context=\"{ ...adapterContext, rowKey: row.rowId }\"\n @update:model-value=\"updateSubtableField(column, row, $event, update, node.id)\"\n @runtime-warning=\"(message) => emit('runtime-warning', message)\"\n />\n <small\n v-if=\"subtableFeedback(column.fieldId, row, node.id)?.error\"\n class=\"designer-runtime-node__error\"\n >\n {{ subtableFeedback(column.fieldId, row, node.id)?.error }}\n </small>\n <small\n v-if=\"subtableFeedback(column.fieldId, row, node.id)?.warning\"\n class=\"designer-runtime-node__warning\"\n >\n {{ subtableFeedback(column.fieldId, row, node.id)?.warning }}\n </small>\n </div>\n <ElText v-else type=\"danger\">失效字段</ElText>\n </template>\n <template #detail-field=\"{ column, value }\">\n <DesignerDetailField\n v-if=\"fieldForColumn(column)\"\n compact\n :field=\"fieldForColumn(column)!\"\n :model-value=\"value\"\n :show-label=\"false\"\n />\n <ElText v-else type=\"danger\">失效字段</ElText>\n </template>\n </DxFormBlockSubtable>\n <section v-else class=\"designer-runtime-node__container\" :class=\"`is-${node.componentType}`\">\n <header v-if=\"containerTitle\" class=\"designer-runtime-node__container-header\">\n <strong>{{ containerTitle || componentName }}</strong>\n </header>\n <ElRow\n v-for=\"slot in node.slots\"\n :key=\"slot.id\"\n class=\"designer-runtime-node__grid\"\n :gutter=\"gutter\"\n >\n <DesignerRuntimeNode\n v-for=\"child in slot.children\"\n :key=\"child.id\"\n :node=\"child\"\n :fields=\"fields\"\n :value-store=\"valueStore\"\n :mode=\"mode\"\n :device=\"device\"\n :gutter=\"gutter\"\n :appearance=\"appearance\"\n :field-states=\"fieldStates\"\n :field-feedbacks=\"fieldFeedbacks\"\n :feedback-scope=\"feedbackScope\"\n :adapters=\"adapters\"\n :adapter-context=\"adapterContext\"\n :readonly-display-mode=\"readonlyDisplayMode\"\n @update-field-value=\"(fieldId, value) => emit('update-field-value', fieldId, value)\"\n @update-collection=\"(containerId, rows) => emit('update-collection', containerId, rows)\"\n @component-event=\"(...args) => emit('component-event', ...args)\"\n @runtime-warning=\"(message) => emit('runtime-warning', message)\"\n />\n </ElRow>\n <ElEmpty\n v-if=\"node.slots.every((slot) => slot.children.length === 0)\"\n description=\"暂无内容\"\n :image-size=\"48\"\n />\n </section>\n </div>\n </ElCol>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watchEffect } from 'vue'\nimport { findDesignerComponent } from '@daxiangme/form-core'\nimport {\n designerContainerAppearanceClasses,\n resolveDesignerContainerAppearance,\n} from '@daxiangme/form-core'\nimport { createDesignerFieldFeedbackKey } from '@daxiangme/form-core'\nimport { projectDesignerSubtableColumns } from '@daxiangme/form-core'\nimport type {\n DesignerAppearance,\n DesignerDevice,\n DesignerComponentEvent,\n DesignerField,\n DesignerFieldFeedback,\n DesignerLayoutNode,\n DesignerResolvedFieldState,\n DesignerRuntimeMode,\n DesignerRuntimeAdapters,\n DesignerRuntimeValueStore,\n DesignerSubtableColumn,\n DesignerSubtableRow,\n FormRuntimeAdapterContext,\n} from '@daxiangme/form-core'\nimport DxFormBlockSubtable from '../form/controls/DxFormBlockSubtable.vue'\nimport DxFormRowSubtable from '../form/controls/DxFormRowSubtable.vue'\nimport DesignerDetailField from './DesignerDetailField.vue'\nimport DesignerStaticControl from './DesignerStaticControl.vue'\n\ndefineOptions({ name: 'DesignerRuntimeNode' })\n\nconst props = defineProps<{\n node: DesignerLayoutNode\n fields: DesignerField[]\n valueStore: DesignerRuntimeValueStore\n mode: DesignerRuntimeMode\n device: DesignerDevice\n gutter: number\n appearance: DesignerAppearance\n fieldStates: Record<string, DesignerResolvedFieldState>\n fieldFeedbacks: Record<string, DesignerFieldFeedback>\n feedbackScope: string\n adapters?: DesignerRuntimeAdapters\n adapterContext: FormRuntimeAdapterContext\n readonlyDisplayMode: 'CONTROL' | 'TEXT'\n}>()\n\nconst emit = defineEmits<{\n 'update-field-value': [fieldId: string, value: unknown]\n 'update-collection': [containerId: string, rows: DesignerSubtableRow[]]\n 'component-event': [\n nodeId: string,\n event: DesignerComponentEvent,\n currentRow?: DesignerSubtableRow,\n containerId?: string,\n ]\n 'runtime-warning': [message: string]\n}>()\nconst field = computed(() => {\n const node = props.node\n return node.nodeType === 'FIELD'\n ? props.fields.find((item) => item.id === node.fieldId)\n : undefined\n})\nconst runtimeVisibleField = computed(() => {\n const currentField = field.value\n if (!currentField || !runtimeFieldState.value.visible) return undefined\n return currentField\n})\nconst runtimeFieldState = computed<DesignerResolvedFieldState>(() =>\n field.value\n ? (props.fieldStates[field.value.id] ?? {\n visible: field.value.componentType !== 'hidden' && !field.value.display.hidden,\n required: field.value.required,\n disabled: field.value.display.readonly,\n })\n : { visible: false, required: false, disabled: false },\n)\nconst runtimeField = computed<DesignerField>(() => ({\n ...runtimeVisibleField.value!,\n required: runtimeFieldState.value.required,\n display: { ...runtimeVisibleField.value!.display, readonly: runtimeFieldState.value.disabled },\n}))\nconst runtimeFieldFeedback = computed(() =>\n runtimeVisibleField.value\n ? props.fieldFeedbacks[\n createDesignerFieldFeedbackKey(runtimeVisibleField.value.id, {\n viewCode: props.feedbackScope,\n })\n ]\n : undefined,\n)\nconst fieldRegistration = computed(() =>\n runtimeVisibleField.value\n ? findDesignerComponent(runtimeVisibleField.value.componentType)\n : undefined,\n)\nconst grid = computed(() => props.node.layout[props.device === 'mobile' ? 'mobile' : 'pc'])\nconst detailShowLabel = computed(\n () => grid.value.showLabel && fieldRegistration.value?.detailLabelPolicy !== 'HIDE',\n)\nconst activeSlot = ref('')\nconst lastActiveSlotIndex = ref(0)\nconst fieldLabelPosition = computed(() => {\n const position = grid.value.labelPosition\n return position === 'INHERIT' ? undefined : (position.toLowerCase() as 'top' | 'left' | 'right')\n})\nconst container = computed(() => (props.node.nodeType === 'CONTAINER' ? props.node : undefined))\nconst registration = computed(() =>\n container.value ? findDesignerComponent(container.value.componentType) : undefined,\n)\nconst componentName = computed(() => registration.value?.name ?? '')\nconst containerTitle = computed(() => {\n const value = container.value?.configuration.title\n return typeof value === 'string' ? value : ''\n})\nconst containerAppearanceClasses = computed(() =>\n container.value\n ? designerContainerAppearanceClasses(\n resolveDesignerContainerAppearance(props.appearance, container.value),\n )\n : [],\n)\nconst headingLevel = computed(() => Math.max(1, Math.min(6, numberConfiguration('level') || 3)))\nconst headingStyle = computed(() => ({\n color: textConfiguration('fontColor') || undefined,\n fontSize: numberConfiguration('fontSize') ? `${numberConfiguration('fontSize')}px` : undefined,\n textAlign: ['left', 'center', 'right'].includes(textConfiguration('align'))\n ? textConfiguration('align')\n : undefined,\n}))\nconst dividerPosition = computed(() => {\n const value = textConfiguration('position')\n return ['left', 'center', 'right'].includes(value)\n ? (value as 'left' | 'center' | 'right')\n : 'left'\n})\nconst dividerBorderStyle = computed(() => {\n const value = textConfiguration('borderStyle')\n return ['solid', 'dashed', 'dotted'].includes(value)\n ? (value as 'solid' | 'dashed' | 'dotted')\n : 'solid'\n})\nconst alertType = computed(() => {\n const value = textConfiguration('type')\n return ['success', 'warning', 'info', 'error'].includes(value)\n ? (value as 'success' | 'warning' | 'info' | 'error')\n : 'info'\n})\nconst buttonType = computed(() => {\n const value = textConfiguration('buttonType')\n return ['primary', 'success', 'warning', 'danger', 'info'].includes(value)\n ? (value as 'primary' | 'success' | 'warning' | 'danger' | 'info')\n : 'primary'\n})\nconst buttonAlign = computed(() => {\n const value = textConfiguration('align')\n return ['left', 'center', 'right'].includes(value) ? value : 'left'\n})\nconst tabsType = computed(() => {\n const value = textConfiguration('tabsType')\n return ['card', 'border-card'].includes(value) ? (value as 'card' | 'border-card') : undefined\n})\n\nwatchEffect(() => {\n if (props.node.nodeType !== 'CONTAINER' || props.node.componentType !== 'tabs') return\n const currentIndex = props.node.slots.findIndex((slot) => slot.slotCode === activeSlot.value)\n if (currentIndex >= 0) {\n lastActiveSlotIndex.value = currentIndex\n return\n }\n if (props.node.slots.length === 0) {\n activeSlot.value = ''\n lastActiveSlotIndex.value = 0\n return\n }\n const fallbackIndex = Math.min(lastActiveSlotIndex.value, props.node.slots.length - 1)\n activeSlot.value = props.node.slots[fallbackIndex]?.slotCode ?? ''\n})\nconst subtableColumns = computed(() =>\n container.value ? projectDesignerSubtableColumns(container.value, props.fields) : [],\n)\nconst subtableRows = computed(() =>\n container.value ? (props.valueStore.collections[container.value.id] ?? []) : [],\n)\nconst subtableDefaultValues = computed<Record<string, unknown>>(() =>\n Object.fromEntries(\n subtableColumns.value.map((column) => [\n column.fieldId,\n cloneValue(fieldForColumn(column)?.defaultValue),\n ]),\n ),\n)\n\nfunction updateFieldValue(value: unknown): void {\n if (field.value) {\n emit('update-field-value', field.value.id, value)\n emitComponentEvent(props.node.id, 'CHANGE')\n }\n}\n\n/** 将子表领域组件产生的多行值回传给运行值仓库。 */\nfunction updateSubtableRows(rows: DesignerSubtableRow[]): void {\n if (container.value) emit('update-collection', container.value.id, rows)\n}\n\nfunction textConfiguration(key: string): string {\n const value = container.value?.configuration[key]\n return typeof value === 'string' ? value : ''\n}\n\nfunction numberConfiguration(key: string): number {\n const value = container.value?.configuration[key]\n return typeof value === 'number' ? value : 0\n}\n\nfunction booleanConfiguration(key: string): boolean {\n return container.value?.configuration[key] === true\n}\n\n/** 返回稳定列投影对应的字段定义。 */\nfunction fieldForColumn(column: DesignerSubtableColumn): DesignerField | undefined {\n return props.fields.find((item) => item.id === column.fieldId)\n}\n\nfunction runtimeSubtableField(column: DesignerSubtableColumn): DesignerField {\n const source = fieldForColumn(column)!\n const state = props.fieldStates[source.id]\n return state\n ? {\n ...source,\n required: state.required,\n display: { ...source.display, readonly: state.disabled },\n }\n : source\n}\n\nfunction updateSubtableField(\n column: DesignerSubtableColumn,\n row: DesignerSubtableRow,\n value: unknown,\n update: (value: unknown) => void,\n containerId: string,\n): void {\n update(value)\n emitComponentEvent(column.columnId, 'CHANGE', row, containerId)\n}\n\nfunction subtableFeedback(fieldId: string, row: DesignerSubtableRow, containerId: string) {\n return props.fieldFeedbacks[\n createDesignerFieldFeedbackKey(fieldId, {\n viewCode: props.feedbackScope,\n containerId,\n rowId: row.rowId,\n })\n ]\n}\n\nfunction emitComponentEvent(\n nodeId: string,\n event: DesignerComponentEvent,\n currentRow?: DesignerSubtableRow,\n containerId?: string,\n): void {\n emit('component-event', nodeId, event, currentRow, containerId)\n}\n\n/** 克隆字段默认值,避免新行共享数组或对象引用。 */\nfunction cloneValue(value: unknown): unknown {\n if (value === undefined) return undefined\n if (typeof globalThis.structuredClone === 'function') {\n try {\n return globalThis.structuredClone(value)\n } catch {\n // 文件等宿主对象无法克隆时交给子表投影的保守克隆策略处理。\n }\n }\n return value === null || typeof value !== 'object' ? value : JSON.parse(JSON.stringify(value))\n}\n</script>\n\n<style scoped>\n.designer-runtime-node__help {\n display: block;\n width: 100%;\n margin-top: var(--daxiang-form-space-1);\n color: var(--el-text-color-secondary);\n font-size: 12px;\n}\n\n.designer-runtime-node__warning,\n.designer-runtime-node__error {\n display: block;\n width: 100%;\n margin-top: var(--daxiang-form-space-1);\n color: var(--el-color-warning);\n font-size: 12px;\n}\n\n.designer-runtime-node__error {\n color: var(--el-color-danger);\n}\n\n.designer-runtime-node__grid {\n row-gap: var(--designer-row-gap);\n}\n\n.designer-runtime-node__heading {\n margin: 0;\n}\n\n.designer-runtime-node__divider {\n margin: var(--daxiang-form-space-3) 0;\n}\n\n.designer-runtime-node__tabs {\n width: 100%;\n}\n\n.designer-runtime-node__tabs:not(.is-border-card) :deep(.el-tabs__header) {\n margin-bottom: 0;\n}\n\n.designer-runtime-node__tabs:not(.is-border-card) :deep(.el-tabs__content) {\n padding-top: var(--daxiang-form-section-gap);\n}\n\n.designer-runtime-node__tabs.is-detail :deep(.el-tabs__content) {\n padding-top: var(--daxiang-form-space-1);\n}\n\n.designer-runtime-node__button {\n width: 100%;\n}\n\n.designer-runtime-node__button.is-center {\n text-align: center;\n}\n\n.designer-runtime-node__button.is-right {\n text-align: right;\n}\n\n.designer-runtime-node__surface-host {\n box-sizing: border-box;\n width: 100%;\n min-width: 0;\n}\n\n.designer-runtime-node__surface-host.daxiang-form-container-surface.is-surface-none,\n.designer-runtime-node__container {\n padding: 0;\n}\n\n.designer-runtime-node__surface-host.daxiang-form-container-surface:not(.is-surface-none) {\n padding: var(--daxiang-form-space-3);\n border-radius: var(--daxiang-form-container-radius);\n}\n\n.designer-runtime-node__surface-host.daxiang-form-container-surface.is-surface-bordered {\n border: 1px solid var(--el-border-color-lighter);\n}\n\n.designer-runtime-node__surface-host.daxiang-form-container-surface.is-surface-shadow {\n background: var(--el-bg-color);\n box-shadow: var(--el-box-shadow-light);\n}\n\n.designer-runtime-node__surface-host.daxiang-form-container-surface.is-surface-filled {\n background: var(--el-fill-color-light);\n}\n\n.designer-runtime-node__container-header {\n display: flex;\n min-height: 36px;\n align-items: center;\n justify-content: space-between;\n margin-bottom: var(--daxiang-form-space-2);\n}\n</style>\n","<template>\n <div\n class=\"daxiang-form designer-preview-form\"\n :class=\"[\n `is-${device}`,\n `is-mode-${modeModel.toLowerCase()}`,\n { 'is-overlay-only': overlayOnly },\n ]\"\n :style=\"previewStyle\"\n >\n <template v-if=\"!overlayOnly\">\n <div v-if=\"showToolbar\" class=\"designer-preview-form__toolbar\">\n <span><DxSvgIcon :icon=\"modeIcon\" />{{ modeLabel }}</span>\n <div>\n <ElSelect\n v-if=\"document.i18n.enabled\"\n v-model=\"activeLocale\"\n class=\"designer-preview-form__locale\"\n aria-label=\"预览语言\"\n >\n <ElOption\n v-for=\"locale in document.i18n.locales\"\n :key=\"locale\"\n :label=\"locale\"\n :value=\"locale\"\n />\n </ElSelect>\n <ElSegmented v-model=\"modeModel\" :options=\"modeOptions\" />\n </div>\n </div>\n\n <ElAlert\n v-if=\"runtimeNotice\"\n class=\"designer-preview-form__notice\"\n :type=\"runtimeNotice.type\"\n :title=\"runtimeNotice.message\"\n show-icon\n closable\n @close=\"runtimeNotice = undefined\"\n />\n\n <div\n v-if=\"showActionBarAt('TOP')\"\n class=\"designer-preview-form__actions\"\n :class=\"`is-${document.actionBar.align.toLowerCase()}`\"\n >\n <ElButton\n v-for=\"button in localizedActionButtons\"\n :key=\"`top-${button.action}`\"\n :type=\"button.action === 'SUBMIT' ? 'primary' : 'default'\"\n @click=\"runAction(button.action)\"\n >\n {{ button.label }}\n </ElButton>\n </div>\n\n <ElForm\n class=\"designer-preview-form__form\"\n :class=\"designerControlRadiusClass(document.appearance.controlRadius)\"\n :label-position=\"formLabelPosition\"\n :label-width=\"document.appearance.labelWidth\"\n :label-suffix=\"document.appearance.labelSuffix\"\n :size=\"elementSize\"\n >\n <ElRow class=\"designer-preview-form__grid\" :gutter=\"document.appearance.gridGutter\">\n <DesignerRuntimeNode\n v-for=\"node in document.uiSchema.root\"\n :key=\"node.id\"\n :node=\"node\"\n :fields=\"localizedFields\"\n :value-store=\"valueStore\"\n :mode=\"modeModel\"\n :device=\"device\"\n :gutter=\"document.appearance.gridGutter\"\n :appearance=\"document.appearance\"\n :field-states=\"fieldStates\"\n :field-feedbacks=\"fieldFeedbacks\"\n feedback-scope=\"main\"\n :adapters=\"adapters\"\n :adapter-context=\"adapterContext\"\n :readonly-display-mode=\"document.appearance.readonlyDisplayMode\"\n @update-field-value=\"updateFieldValue\"\n @update-collection=\"updateCollection\"\n @component-event=\"handleComponentEvent\"\n @runtime-warning=\"showRuntimeWarning\"\n />\n </ElRow>\n <ElEmpty v-if=\"document.uiSchema.root.length === 0\" description=\"当前表单没有可预览内容\" />\n </ElForm>\n\n <div\n v-if=\"showActionBarAt('BOTTOM')\"\n class=\"designer-preview-form__actions\"\n :class=\"`is-${document.actionBar.align.toLowerCase()}`\"\n >\n <ElButton\n v-for=\"button in localizedActionButtons\"\n :key=\"`bottom-${button.action}`\"\n :type=\"button.action === 'SUBMIT' ? 'primary' : 'default'\"\n @click=\"runAction(button.action)\"\n >\n {{ button.label }}\n </ElButton>\n </div>\n </template>\n\n <DModal\n :model-value=\"activeOverlay?.kind === 'DIALOG'\"\n :title=\"localizedOverlayName\"\n :width=\"activeOverlay?.width ?? 720\"\n :max-height=\"resolveDesignerOverlayMaxHeight(activeOverlay?.maxHeightPreset ?? 'VIEWPORT')\"\n :dialog-class=\"activeOverlay ? designerDialogRadiusClass(activeOverlay.radius) : ''\"\n confirm-text=\"确认\"\n @update:model-value=\"handleDialogVisibility\"\n @confirm=\"confirmActiveModule\"\n @cancel=\"cancelActiveModule\"\n >\n <div v-if=\"activeOverlay && overlayValueStore\" class=\"designer-preview-form__overlay-content\">\n <ElForm\n :class=\"designerControlRadiusClass(document.appearance.controlRadius)\"\n :label-position=\"formLabelPosition\"\n :label-width=\"document.appearance.labelWidth\"\n :label-suffix=\"document.appearance.labelSuffix\"\n :size=\"elementSize\"\n >\n <ElRow :gutter=\"document.appearance.gridGutter\" class=\"designer-preview-form__grid\">\n <DesignerRuntimeNode\n v-for=\"node in activeOverlay.root\"\n :key=\"node.id\"\n :node=\"node\"\n :fields=\"localizedFields\"\n :value-store=\"overlayValueStore\"\n :mode=\"modeModel\"\n :device=\"device\"\n :gutter=\"document.appearance.gridGutter\"\n :appearance=\"document.appearance\"\n :field-states=\"overlayFieldStates\"\n :field-feedbacks=\"fieldFeedbacks\"\n :feedback-scope=\"activeOverlay.code\"\n :adapters=\"adapters\"\n :adapter-context=\"overlayAdapterContext\"\n :readonly-display-mode=\"document.appearance.readonlyDisplayMode\"\n @update-field-value=\"updateOverlayFieldValue\"\n @update-collection=\"updateOverlayCollection\"\n @component-event=\"handleComponentEvent\"\n @runtime-warning=\"showRuntimeWarning\"\n />\n </ElRow>\n </ElForm>\n </div>\n </DModal>\n\n <ElDrawer\n :model-value=\"activeOverlay?.kind === 'DRAWER'\"\n class=\"daxiang-form daxiang-form-drawer\"\n :title=\"localizedOverlayName\"\n :size=\"`${activeOverlay?.width ?? 480}px`\"\n destroy-on-close\n @update:model-value=\"handleDrawerVisibility\"\n >\n <div v-if=\"activeOverlay && overlayValueStore\" class=\"designer-preview-form__overlay-content\">\n <ElForm\n :class=\"designerControlRadiusClass(document.appearance.controlRadius)\"\n :label-position=\"formLabelPosition\"\n :label-width=\"document.appearance.labelWidth\"\n :label-suffix=\"document.appearance.labelSuffix\"\n :size=\"elementSize\"\n >\n <ElRow :gutter=\"document.appearance.gridGutter\" class=\"designer-preview-form__grid\">\n <DesignerRuntimeNode\n v-for=\"node in activeOverlay.root\"\n :key=\"node.id\"\n :node=\"node\"\n :fields=\"localizedFields\"\n :value-store=\"overlayValueStore\"\n :mode=\"modeModel\"\n :device=\"device\"\n :gutter=\"document.appearance.gridGutter\"\n :appearance=\"document.appearance\"\n :field-states=\"overlayFieldStates\"\n :field-feedbacks=\"fieldFeedbacks\"\n :feedback-scope=\"activeOverlay.code\"\n :adapters=\"adapters\"\n :adapter-context=\"overlayAdapterContext\"\n :readonly-display-mode=\"document.appearance.readonlyDisplayMode\"\n @update-field-value=\"updateOverlayFieldValue\"\n @update-collection=\"updateOverlayCollection\"\n @component-event=\"handleComponentEvent\"\n @runtime-warning=\"showRuntimeWarning\"\n />\n </ElRow>\n </ElForm>\n </div>\n <template #footer>\n <div class=\"designer-preview-form__drawer-footer\">\n <ElButton @click=\"cancelActiveModule()\">取消</ElButton>\n <ElButton type=\"primary\" @click=\"confirmActiveModule()\">确认</ElButton>\n </div>\n </template>\n </ElDrawer>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, reactive, watch, nextTick } from 'vue'\nimport type { CSSProperties } from 'vue'\nimport DModal from '../infrastructure/FormModalShell.vue'\nimport DxSvgIcon from '../infrastructure/FormIcon.vue'\nimport { designerControlRadiusClass, designerDialogRadiusClass } from '@daxiangme/form-core'\nimport { executeDesignerEventFlow } from '@daxiangme/form-core'\nimport { resolveDesignerOverlayMaxHeight } from '@daxiangme/form-core'\nimport {\n designerActionI18nKey,\n designerFieldHelpI18nKey,\n designerFieldLabelI18nKey,\n designerModuleI18nKey,\n resolveDesignerLocalizedText,\n} from '@daxiangme/form-core'\nimport { projectDesignerSubmission } from '@daxiangme/form-core'\nimport { createDesignerSubtableRow, projectDesignerSubtableColumns } from '@daxiangme/form-core'\nimport {\n applyDesignerCurrentRowValueRules,\n applyDesignerValueRules,\n createDesignerFieldFeedbackKey,\n projectDesignerFieldFeedback,\n resolveDesignerFieldState,\n validateDesignerField,\n} from '@daxiangme/form-core'\nimport type {\n DesignerActionBarButton,\n DesignerComponentEvent,\n DesignerContainerNode,\n DesignerDevice,\n DesignerDocument,\n DesignerEventFlow,\n DesignerFieldFeedback,\n DesignerFormEvent,\n DesignerLayoutNode,\n DesignerOverlayModule,\n DesignerResolvedFieldState,\n DesignerRuntimeAdapters,\n DesignerRuntimeMode,\n DesignerRuntimeValueStore,\n DesignerSubtableRow,\n DesignerValidationResult,\n FormRuntimeAdapterContext,\n DesignerSubmissionProjection,\n} from '@daxiangme/form-core'\nimport DesignerRuntimeNode from './DesignerRuntimeNode.vue'\n\ndefineOptions({ name: 'FormRenderer' })\n\nconst props = withDefaults(\n defineProps<{\n document: DesignerDocument\n modelValue?: DesignerRuntimeValueStore\n mode?: Exclude<DesignerRuntimeMode, 'DESIGN'>\n device?: DesignerDevice\n adapters?: DesignerRuntimeAdapters\n adapterContext?: FormRuntimeAdapterContext\n activeModule?: string\n /** @deprecated 请使用 activeModule。 */\n initialOverlayCode?: string\n overlayOnly?: boolean\n showToolbar?: boolean\n }>(),\n {\n mode: 'CREATE',\n device: 'desktop',\n adapterContext: () => ({}),\n activeModule: '',\n initialOverlayCode: '',\n overlayOnly: false,\n showToolbar: false,\n },\n)\nconst emit = defineEmits<{\n 'update:modelValue': [value: DesignerRuntimeValueStore]\n submit: [projection: DesignerSubmissionProjection]\n reset: [value: DesignerRuntimeValueStore]\n action: [action: DesignerActionBarButton['action']]\n 'runtime-warning': [message: string]\n 'overlay-closed': []\n 'overlay-open-failed': [message: string]\n}>()\nconst modeModel = ref<Exclude<DesignerRuntimeMode, 'DESIGN'>>(props.mode)\nconst activeLocale = ref(props.document.i18n.defaultLocale)\nconst modeOptions = [\n { label: '新增', value: 'CREATE' },\n { label: '编辑', value: 'EDIT' },\n { label: '只读', value: 'READ_ONLY' },\n { label: '详情', value: 'DETAIL' },\n]\nconst valueStore = reactive<DesignerRuntimeValueStore>({ fields: {}, collections: {} })\nconst variables = reactive<Record<string, unknown>>({})\nconst fieldFeedbacks = reactive<Record<string, DesignerFieldFeedback>>({})\nconst activeFlowIds = new Set<string>()\nconst activeOverlayCode = ref('')\nconst overlayValueStore = ref<DesignerRuntimeValueStore>()\nconst overlaySourceRow = ref<DesignerSubtableRow>()\nconst overlaySourceContainerId = ref('')\nconst submitting = ref(false)\nconst runtimeNotice = ref<{ type: 'success' | 'info' | 'warning' | 'error'; message: string }>()\nconst activeOverlay = computed<DesignerOverlayModule | undefined>(() =>\n props.document.uiSchema.overlays.find((overlay) => overlay.code === activeOverlayCode.value),\n)\nconst requestedOverlayCode = computed(() => props.activeModule || props.initialOverlayCode)\nconst overlayAdapterContext = computed<FormRuntimeAdapterContext>(() => ({\n ...props.adapterContext,\n moduleCode: activeOverlay.value?.code,\n rowKey: overlaySourceRow.value?.rowId,\n}))\nconst localizedFields = computed(() =>\n props.document.dataSchema.fields.map((field) => ({\n ...field,\n label: resolveDesignerLocalizedText(\n props.document.i18n,\n designerFieldLabelI18nKey(field.key),\n activeLocale.value,\n field.label,\n ),\n helpText: resolveDesignerLocalizedText(\n props.document.i18n,\n designerFieldHelpI18nKey(field.key),\n activeLocale.value,\n field.helpText,\n ),\n })),\n)\nconst localizedOverlayName = computed(() =>\n activeOverlay.value\n ? resolveDesignerLocalizedText(\n props.document.i18n,\n designerModuleI18nKey(activeOverlay.value.code),\n activeLocale.value,\n activeOverlay.value.name,\n )\n : '',\n)\nconst modeLabel = computed(\n () =>\n ({ CREATE: '新增表单', EDIT: '编辑表单', READ_ONLY: '只读表单', DETAIL: '数据详情' })[\n modeModel.value\n ],\n)\nconst modeIcon = computed(\n () =>\n ({\n CREATE: 'ri:add-circle-line',\n EDIT: 'ri:edit-line',\n READ_ONLY: 'ri:lock-line',\n DETAIL: 'ri:file-list-3-line',\n })[modeModel.value],\n)\nconst elementSize = computed(() => {\n const size = props.document.appearance.size\n return size === 'SMALL' ? 'small' : size === 'LARGE' ? 'large' : 'default'\n})\nconst formLabelPosition = computed(\n () => props.document.appearance.labelPosition.toLowerCase() as 'top' | 'left' | 'right',\n)\nconst previewStyle = computed<CSSProperties>(() => ({\n '--designer-row-gap': `${props.document.appearance.rowGap}px`,\n}))\nconst expressionContext = computed(() => ({\n fields: valueStore.fields,\n variables,\n context: {\n RUNTIME_MODE: modeModel.value,\n DEVICE: props.device,\n NOW: new Date().toISOString(),\n },\n}))\nconst fieldStates = computed<Record<string, DesignerResolvedFieldState>>(() =>\n resolveFieldStates(valueStore),\n)\nconst overlayFieldStates = computed<Record<string, DesignerResolvedFieldState>>(() =>\n resolveFieldStates(overlayValueStore.value ?? valueStore),\n)\nconst enabledActionButtons = computed(() =>\n props.document.actionBar.buttons.filter((button) => button.enabled),\n)\nconst localizedActionButtons = computed(() =>\n enabledActionButtons.value.map((button) => ({\n ...button,\n label: resolveDesignerLocalizedText(\n props.document.i18n,\n designerActionI18nKey(button.action),\n activeLocale.value,\n button.label,\n ),\n })),\n)\n\nwatch([() => props.document, requestedOverlayCode], ([document]) => initializeRuntime(document), {\n immediate: true,\n deep: true,\n})\nwatch(\n () => props.mode,\n (mode) => {\n modeModel.value = mode\n },\n)\nwatch(\n () => props.modelValue,\n (value) => {\n if (!value || runtimeStoreSignature(value) === runtimeStoreSignature(valueStore)) return\n replaceValueStore(valueStore, value)\n },\n { deep: true },\n)\n\n/** 使用文档默认值建立一个与设计文档隔离的运行副本。 */\nfunction initializeRuntime(document: DesignerDocument, emitInitialized = true): void {\n clearRecord(valueStore.fields)\n clearRecord(valueStore.collections)\n clearRecord(variables)\n clearRecord(fieldFeedbacks)\n closeActiveModule()\n activeLocale.value = document.i18n.locales.includes(document.i18n.defaultLocale)\n ? document.i18n.defaultLocale\n : (document.i18n.locales[0] ?? 'zh-CN')\n for (const variable of document.variables)\n variables[variable.code] = cloneValue(variable.initialValue)\n const collectionFieldIds = collectSubtableFieldIds(allViewRoots(document), document)\n for (const field of document.dataSchema.fields) {\n if (!collectionFieldIds.has(field.id))\n valueStore.fields[field.id] = cloneValue(field.defaultValue)\n }\n initializeSubtableCollections(document.uiSchema.root, document, valueStore)\n if (props.modelValue) mergeValueStore(valueStore, props.modelValue)\n void applyValueRules(valueStore, 'INITIALIZE')\n void applyCollectionValueRules(valueStore)\n if (requestedOverlayCode.value) openInitialOverlay(requestedOverlayCode.value)\n if (emitInitialized) void nextTick(() => runFormEvent('INITIALIZED'))\n}\n\n/** 在独立预览会话初始化后直接打开设计器当前选中的弹层模块。 */\nfunction openInitialOverlay(moduleCode: string): void {\n try {\n openModule(moduleCode)\n } catch (error) {\n showRuntimeError(error)\n if (props.overlayOnly) emit('overlay-open-failed', runtimeErrorMessage(error))\n }\n}\n\n/** 更新根表字段,执行受控计算规则;组件事件由渲染节点随后触发。 */\nasync function updateFieldValue(fieldId: string, value: unknown): Promise<void> {\n valueStore.fields[fieldId] = value\n await applyValueRules(valueStore, 'CHANGE', [fieldId])\n await applyCollectionValueRules(valueStore, undefined, 'CHANGE', [fieldId])\n emitRuntimeValue()\n}\n\n/** 更新指定子表容器的多行值。 */\nfunction updateCollection(containerId: string, rows: DesignerSubtableRow[]): void {\n valueStore.collections[containerId] = rows\n void applyCollectionValueRules(valueStore, rows)\n emitRuntimeValue()\n}\n\n/** 更新弹层草稿字段,不提前污染主体。 */\nasync function updateOverlayFieldValue(fieldId: string, value: unknown): Promise<void> {\n if (!overlayValueStore.value) return\n overlayValueStore.value.fields[fieldId] = value\n await applyValueRules(overlayValueStore.value, 'CHANGE', [fieldId])\n await applyCollectionValueRules(overlayValueStore.value, undefined, 'CHANGE', [fieldId])\n}\n\n/** 更新弹层草稿中的子表集合。 */\nfunction updateOverlayCollection(containerId: string, rows: DesignerSubtableRow[]): void {\n if (!overlayValueStore.value) return\n overlayValueStore.value.collections[containerId] = rows\n void applyCollectionValueRules(overlayValueStore.value, rows)\n}\n\n/** 执行组件事件对应的验证和声明式事件流。 */\nasync function handleComponentEvent(\n nodeId: string,\n event: DesignerComponentEvent,\n currentRow?: DesignerSubtableRow,\n containerId?: string,\n): Promise<void> {\n const fieldId = fieldIdForNode(nodeId)\n if (fieldId && event === 'CHANGE' && currentRow) {\n await applyCurrentRowValueRules(fieldId, currentRow, undefined, 'CHANGE', [fieldId])\n }\n if (fieldId && (event === 'CHANGE' || event === 'BLUR')) {\n await validateSingleField(fieldId, event, currentRow)\n }\n const flows = resolveComponentFlows(nodeId, event, fieldId)\n for (const flow of flows) await runFlow(flow, currentRow, containerId)\n}\n\n/** 执行动作栏按钮;只读和详情态不产生写入动作。 */\nfunction runAction(action: DesignerActionBarButton['action']): void {\n emit('action', action)\n if (action === 'SUBMIT') void submitForm()\n if (action === 'RESET') resetForm()\n if (action === 'PRINT') window.print()\n}\n\n/** 先执行提交前事件和完整验证,再生成纯前端提交投影。 */\nasync function submitForm(): Promise<void> {\n if (submitting.value) throw new Error('表单正在提交,不能重复进入提交动作')\n submitting.value = true\n try {\n const beforeCompleted = await runFormEvent('BEFORE_SUBMIT')\n if (!beforeCompleted || !(await validateForm())) return\n const projection = projectDesignerSubmission(props.document, valueStore, fieldStates.value, {\n dirtyOverlayModuleIds: activeOverlay.value ? [activeOverlay.value.id] : [],\n })\n runtimeNotice.value = {\n type: 'success',\n message: `提交投影已生成:${Object.keys(projection.fields).length} 个主表字段,${Object.keys(projection.collections).length} 个子表集合`,\n }\n emit('submit', cloneValue(projection))\n await runFormEvent('AFTER_SUBMIT')\n } catch (error) {\n showRuntimeError(error)\n } finally {\n submitting.value = false\n }\n}\n\n/** 恢复默认值并触发表单重置事件。 */\nfunction resetForm(): void {\n initializeRuntime(props.document, false)\n void runFormEvent('RESET')\n runtimeNotice.value = { type: 'info', message: '已恢复表单默认值' }\n const value = cloneValue(valueStore)\n emit('update:modelValue', value)\n emit('reset', value)\n}\n\n/** 执行完整提交校验,并将根字段错误投影到控件外壳。 */\nasync function validateForm(): Promise<boolean> {\n clearRecord(fieldFeedbacks)\n const results: DesignerValidationResult[] = []\n const collectionFields = collectSubtableFieldIds(allViewRoots(props.document), props.document)\n for (const field of props.document.dataSchema.fields) {\n if (collectionFields.has(field.id)) continue\n const fieldResults = await validateDesignerField(\n field,\n valueStore.fields[field.id],\n 'SUBMIT',\n expressionContext.value,\n {\n state: fieldStates.value[field.id],\n remoteAdapter: props.adapters?.remoteValidation,\n collectionRows: validationCollectionRows(field.id),\n },\n )\n results.push(...fieldResults)\n const feedback = projectDesignerFieldFeedback(fieldResults)\n if (feedback) fieldFeedbacks[createDesignerFieldFeedbackKey(field.id)] = feedback\n }\n for (const [containerId, rows] of Object.entries(valueStore.collections)) {\n for (const row of rows) {\n for (const [fieldId, value] of Object.entries(row.values)) {\n const field = props.document.dataSchema.fields.find((item) => item.id === fieldId)\n if (!field) continue\n const rowResults = await validateDesignerField(\n field,\n value,\n 'SUBMIT',\n { ...expressionContext.value, currentRow: row.values },\n {\n remoteAdapter: props.adapters?.remoteValidation,\n collectionRows: validationCollectionRows(field.id),\n },\n )\n results.push(...rowResults)\n const feedback = projectDesignerFieldFeedback(rowResults)\n if (feedback) {\n fieldFeedbacks[\n createDesignerFieldFeedbackKey(field.id, {\n viewCode: 'main',\n containerId,\n rowId: row.rowId,\n })\n ] = feedback\n }\n }\n }\n }\n const errors = results.filter((result) => result.severity === 'ERROR')\n const warnings = results.filter((result) => result.severity === 'WARNING')\n if (errors.length > 0) {\n runtimeNotice.value = { type: 'error', message: `验证未通过:${errors[0]!.message}` }\n return false\n }\n if (warnings.length > 0)\n runtimeNotice.value = { type: 'warning', message: `验证警告:${warnings[0]!.message}` }\n return true\n}\n\n/** 验证单个根字段或当前子表行字段。 */\nasync function validateSingleField(\n fieldId: string,\n trigger: 'CHANGE' | 'BLUR',\n currentRow?: DesignerSubtableRow,\n): Promise<void> {\n const field = props.document.dataSchema.fields.find((item) => item.id === fieldId)\n if (!field) return\n const store = overlayValueStore.value ?? valueStore\n const value = currentRow ? currentRow.values[fieldId] : store.fields[fieldId]\n const results = await validateDesignerField(\n field,\n value,\n trigger,\n { ...expressionContext.value, fields: store.fields, currentRow: currentRow?.values },\n {\n state: resolveDesignerFieldState(field, expressionRuntime(store, currentRow)),\n remoteAdapter: props.adapters?.remoteValidation,\n collectionRows: validationCollectionRows(field.id),\n },\n )\n const viewCode = activeOverlay.value?.code ?? 'main'\n const key = createDesignerFieldFeedbackKey(fieldId, {\n viewCode,\n containerId: currentRow ? findCollectionContainerId(currentRow) : undefined,\n rowId: currentRow?.rowId,\n })\n const feedback = projectDesignerFieldFeedback(results)\n if (feedback) fieldFeedbacks[key] = feedback\n else delete fieldFeedbacks[key]\n}\n\nfunction findCollectionContainerId(row: DesignerSubtableRow): string | undefined {\n const store = overlayValueStore.value ?? valueStore\n return Object.entries(store.collections).find(([, rows]) =>\n rows.some((item) => item.rowId === row.rowId),\n )?.[0]\n}\n\n/** 打开模块并按配置建立表单草稿或子表当前行草稿。 */\nfunction openModule(\n moduleCode: string,\n currentRow?: DesignerSubtableRow,\n containerId?: string,\n): void {\n if (activeOverlay.value) throw new Error('当前已有弹层模块打开,不支持嵌套弹层')\n const overlay = props.document.uiSchema.overlays.find((item) => item.code === moduleCode)\n if (!overlay) throw new Error(`模块 ${moduleCode} 不存在`)\n if (overlay.dataContext === 'SUBTABLE_ROW_DRAFT' && !currentRow) {\n throw new Error('当前事件没有子表行上下文,不能打开行草稿模块')\n }\n activeOverlayCode.value = moduleCode\n overlaySourceRow.value = currentRow\n overlaySourceContainerId.value = containerId ?? ''\n overlayValueStore.value =\n overlay.dataContext === 'SUBTABLE_ROW_DRAFT'\n ? { fields: cloneValue(currentRow!.values), collections: {} }\n : cloneValue(valueStore)\n initializeSubtableCollections(overlay.root, props.document, overlayValueStore.value)\n}\n\n/** 确认模块草稿,并合并回它打开时的数据上下文。 */\nfunction confirmActiveModule(moduleCode = activeOverlayCode.value): void {\n if (!activeOverlay.value || activeOverlay.value.code !== moduleCode || !overlayValueStore.value)\n return\n if (activeOverlay.value.dataContext === 'SUBTABLE_ROW_DRAFT' && overlaySourceRow.value) {\n overlaySourceRow.value.values = cloneValue(overlayValueStore.value.fields)\n if (overlaySourceContainerId.value) {\n valueStore.collections[overlaySourceContainerId.value] = [\n ...(valueStore.collections[overlaySourceContainerId.value] ?? []),\n ]\n }\n } else {\n replaceValueStore(valueStore, overlayValueStore.value)\n }\n emitRuntimeValue()\n closeActiveModule()\n runtimeNotice.value = { type: 'success', message: '模块草稿已确认' }\n if (props.overlayOnly) emit('overlay-closed')\n}\n\n/** 取消模块草稿,不修改主体或原子表行。 */\nfunction cancelActiveModule(moduleCode = activeOverlayCode.value): void {\n if (!activeOverlay.value) return\n if (moduleCode && activeOverlay.value?.code !== moduleCode) return\n closeActiveModule()\n runtimeNotice.value = { type: 'info', message: '已放弃模块草稿' }\n if (props.overlayOnly) emit('overlay-closed')\n}\n\n/** 执行表单生命周期事件,返回是否未被动作阻断。 */\nasync function runFormEvent(event: DesignerFormEvent): Promise<boolean> {\n const flows = props.document.eventFlows.filter(\n (flow) => flow.trigger.scope === 'FORM' && flow.trigger.event === event,\n )\n let completed = true\n for (const flow of flows) {\n const result = await runFlow(flow)\n if (!result) completed = false\n }\n return completed\n}\n\n/** 在受控 Host 中执行一个事件流,并统一反馈错误。 */\nasync function runFlow(\n flow: DesignerEventFlow,\n currentRow?: DesignerSubtableRow,\n containerId?: string,\n): Promise<boolean> {\n const store = overlayValueStore.value ?? valueStore\n const result = await executeDesignerEventFlow(\n flow,\n {\n document: props.document,\n valueStore: store,\n variables,\n currentRow: currentRow?.values,\n expressionContext: {\n ...expressionContext.value.context,\n RUNTIME_MODE: modeModel.value,\n DEVICE: props.device,\n },\n adapters: props.adapters,\n validate: validateForm,\n submit: submitForm,\n reset: resetForm,\n print: () => window.print(),\n message: (message, level) => {\n runtimeNotice.value = { type: messageType(level), message }\n },\n openModule: (moduleCode) => openModule(moduleCode, currentRow, containerId),\n confirmModule: confirmActiveModule,\n cancelModule: cancelActiveModule,\n },\n activeFlowIds,\n )\n if (result.errors.length > 0) {\n runtimeNotice.value = { type: result.blocked ? 'error' : 'warning', message: result.errors[0]! }\n }\n return result.completed && !result.blocked\n}\n\n/** 解析节点显式绑定和同节点触发器,去重后按文档顺序返回。 */\nfunction resolveComponentFlows(\n nodeId: string,\n event: DesignerComponentEvent,\n fieldId?: string,\n): DesignerEventFlow[] {\n const bindingCode = componentEventBindings(nodeId, fieldId)?.[event]\n return props.document.eventFlows.filter(\n (flow, index, flows) =>\n (flow.code === bindingCode ||\n (flow.trigger.scope === 'COMPONENT' &&\n flow.trigger.nodeId === nodeId &&\n flow.trigger.event === event)) &&\n flows.findIndex((candidate) => candidate.id === flow.id) === index,\n )\n}\n\n/** 返回字段或容器节点保存的事件绑定。 */\nfunction componentEventBindings(nodeId: string, fieldId?: string) {\n if (fieldId)\n return props.document.dataSchema.fields.find((field) => field.id === fieldId)?.behavior\n .eventBindings\n const node = findNode(nodeId)\n return node?.nodeType === 'CONTAINER' ? node.eventBindings : undefined\n}\n\n/** 由布局节点身份解析字段身份。 */\nfunction fieldIdForNode(nodeId: string): string | undefined {\n const node = findNode(nodeId)\n return node?.nodeType === 'FIELD' ? node.fieldId : undefined\n}\n\n/** 在主体和所有弹层中查找节点。 */\nfunction findNode(nodeId: string): DesignerLayoutNode | undefined {\n const visit = (nodes: DesignerLayoutNode[]): DesignerLayoutNode | undefined => {\n for (const node of nodes) {\n if (node.id === nodeId) return node\n if (node.nodeType === 'CONTAINER') {\n for (const slot of node.slots) {\n const match = visit(slot.children)\n if (match) return match\n }\n }\n }\n return undefined\n }\n for (const root of allViewRoots(props.document)) {\n const match = visit(root)\n if (match) return match\n }\n return undefined\n}\n\n/** 计算给定值仓库下所有字段的最终状态。 */\nfunction resolveFieldStates(\n store: DesignerRuntimeValueStore,\n): Record<string, DesignerResolvedFieldState> {\n return Object.fromEntries(\n props.document.dataSchema.fields.map((field) => [\n field.id,\n resolveDesignerFieldState(field, expressionRuntime(store)),\n ]),\n )\n}\n\n/** 建立表达式运行上下文,当前行仅在子表事件或校验期间注入。 */\nfunction expressionRuntime(store: DesignerRuntimeValueStore, currentRow?: DesignerSubtableRow) {\n return {\n fields: store.fields,\n currentRow: currentRow?.values,\n variables,\n context: expressionContext.value.context,\n }\n}\n\n/** 执行值规则并把诊断反馈到预览,不吞掉循环依赖。 */\nasync function applyValueRules(\n store: DesignerRuntimeValueStore,\n phase: 'INITIALIZE' | 'CHANGE',\n changedFieldIds: Iterable<string> = [],\n): Promise<void> {\n const failures = await applyDesignerValueRules(\n props.document,\n store,\n {\n variables,\n context: expressionContext.value.context,\n },\n { phase, changedFieldIds, confirmationAdapter: props.adapters?.linkageConfirmation },\n )\n if (failures.length > 0) runtimeNotice.value = { type: 'error', message: failures[0]! }\n}\n\n/** 执行当前行所属子实体的计算规则,主表字段仍从所在运行副本读取。 */\nasync function applyCurrentRowValueRules(\n fieldId: string,\n row: DesignerSubtableRow,\n store: DesignerRuntimeValueStore = activeOverlay.value && overlayValueStore.value\n ? overlayValueStore.value\n : valueStore,\n phase: 'INITIALIZE' | 'CHANGE' = 'INITIALIZE',\n changedFieldIds: Iterable<string> = [],\n): Promise<void> {\n const entityCode = props.document.dataSchema.fields.find(\n (field) => field.id === fieldId,\n )?.entityCode\n if (!entityCode || entityCode === props.document.dataSchema.rootEntity.code) return\n const failures = await applyDesignerCurrentRowValueRules(\n props.document,\n row.values,\n entityCode,\n {\n fields: store.fields,\n variables,\n context: expressionContext.value.context,\n },\n {\n phase,\n changedFieldIds,\n confirmationAdapter: props.adapters?.linkageConfirmation,\n },\n )\n if (failures.length > 0) runtimeNotice.value = { type: 'error', message: failures[0]! }\n}\n\n/** 为新建、复制及初始化的子表行补齐当前行计算结果。 */\nasync function applyCollectionValueRules(\n store: DesignerRuntimeValueStore,\n rows: DesignerSubtableRow[] = Object.values(store.collections).flat(),\n phase: 'INITIALIZE' | 'CHANGE' = 'INITIALIZE',\n changedFieldIds: Iterable<string> = [],\n): Promise<void> {\n for (const row of rows) {\n const fieldId = Object.keys(row.values).find((candidate) =>\n props.document.dataSchema.fields.some((field) => field.id === candidate),\n )\n if (fieldId) await applyCurrentRowValueRules(fieldId, row, store, phase, changedFieldIds)\n }\n}\n\n/** 读取字段子表规则引用的集合行数;未配置容器时保持零行并由规则决定结果。 */\nfunction validationCollectionRows(fieldId: string): number | undefined {\n const field = props.document.dataSchema.fields.find((item) => item.id === fieldId)\n const rule = field?.behavior.validationRules.find(\n (item) => item.type === 'SUBTABLE' && item.enabled,\n )\n const containerId = (rule?.configuration as { containerId?: unknown } | undefined)?.containerId\n return typeof containerId === 'string'\n ? (valueStore.collections[containerId]?.length ?? 0)\n : undefined\n}\n\n/** 判断动作栏在当前位置是否可见。 */\nfunction showActionBarAt(position: 'TOP' | 'BOTTOM'): boolean {\n if (!props.document.actionBar.visible || ['READ_ONLY', 'DETAIL'].includes(modeModel.value))\n return false\n return (\n props.document.actionBar.position === position || props.document.actionBar.position === 'BOTH'\n )\n}\n\n/** 为当前预览副本建立各子表的初始行。 */\nfunction initializeSubtableCollections(\n nodes: DesignerLayoutNode[],\n document: DesignerDocument,\n store: DesignerRuntimeValueStore,\n): void {\n for (const node of nodes) {\n if (node.nodeType !== 'CONTAINER') continue\n if (\n ['row-subtable', 'block-subtable'].includes(node.componentType) &&\n !store.collections[node.id]\n ) {\n const count = normalizedInitialRows(node)\n store.collections[node.id] = Array.from({ length: count }, () =>\n createSubtableRow(node, document),\n )\n }\n for (const slot of node.slots) initializeSubtableCollections(slot.children, document, store)\n }\n}\n\n/** 收集所有视图的子表直接字段,避免根字段仓库重复持有相同数据。 */\nfunction collectSubtableFieldIds(\n roots: DesignerLayoutNode[][],\n document: DesignerDocument,\n): Set<string> {\n const fieldIds = new Set<string>()\n const visit = (nodes: DesignerLayoutNode[]): void => {\n for (const node of nodes) {\n if (node.nodeType !== 'CONTAINER') continue\n if (['row-subtable', 'block-subtable'].includes(node.componentType)) {\n for (const column of projectDesignerSubtableColumns(\n node,\n document.dataSchema.fields,\n undefined,\n {\n includeHidden: true,\n },\n )) {\n fieldIds.add(column.fieldId)\n }\n continue\n }\n for (const slot of node.slots) visit(slot.children)\n }\n }\n roots.forEach(visit)\n return fieldIds\n}\n\n/** 返回主体与全部弹层视图的根节点集合。 */\nfunction allViewRoots(document: DesignerDocument): DesignerLayoutNode[][] {\n return [document.uiSchema.root, ...document.uiSchema.overlays.map((overlay) => overlay.root)]\n}\n\n/** 根据子表直接字段创建一行隔离的默认值。 */\nfunction createSubtableRow(\n node: DesignerContainerNode,\n document: DesignerDocument,\n): DesignerSubtableRow {\n const columns = projectDesignerSubtableColumns(node, document.dataSchema.fields)\n const defaults = Object.fromEntries(\n columns.map((column) => [\n column.fieldId,\n document.dataSchema.fields.find((field) => field.id === column.fieldId)?.defaultValue,\n ]),\n )\n return createDesignerSubtableRow(columns, defaults)\n}\n\n/** 读取并限制子表初始行数量。 */\nfunction normalizedInitialRows(node: DesignerContainerNode): number {\n const value = node.configuration.initialRows\n return typeof value === 'number' && Number.isFinite(value)\n ? Math.max(0, Math.min(20, Math.trunc(value)))\n : 0\n}\n\n/** Element Plus 对话框关闭事件统一走丢弃草稿语义。 */\nfunction handleDialogVisibility(visible: boolean): void {\n if (!visible) cancelActiveModule()\n}\n\n/** Element Plus 抽屉关闭事件统一走丢弃草稿语义。 */\nfunction handleDrawerVisibility(visible: boolean): void {\n if (!visible) cancelActiveModule()\n}\n\n/** 清理当前弹层运行上下文。 */\nfunction closeActiveModule(): void {\n activeOverlayCode.value = ''\n overlayValueStore.value = undefined\n overlaySourceRow.value = undefined\n overlaySourceContainerId.value = ''\n}\n\n/** 原位替换值仓库,保持 Vue 响应式对象身份。 */\nfunction replaceValueStore(\n target: DesignerRuntimeValueStore,\n source: DesignerRuntimeValueStore,\n): void {\n clearRecord(target.fields)\n clearRecord(target.collections)\n Object.assign(target.fields, cloneValue(source.fields))\n Object.assign(target.collections, cloneValue(source.collections))\n}\n\n/** 清空响应式记录并保留对象引用。 */\nfunction clearRecord<T>(record: Record<string, T>): void {\n for (const key of Object.keys(record)) delete record[key]\n}\n\n/** 将事件消息级别映射为 Element Plus 提示类型。 */\nfunction messageType(level: 'SUCCESS' | 'INFO' | 'WARNING' | 'ERROR') {\n return level.toLowerCase() as 'success' | 'info' | 'warning' | 'error'\n}\n\n/** 将运行异常转换为页面内可见反馈。 */\nfunction showRuntimeError(error: unknown): void {\n runtimeNotice.value = {\n type: 'error',\n message: runtimeErrorMessage(error),\n }\n emit('runtime-warning', runtimeNotice.value.message)\n}\n\n/** 将可预期的能力缺失或运行降级同时反馈给页面和宿主。 */\nfunction showRuntimeWarning(message: string): void {\n runtimeNotice.value = { type: 'warning', message }\n emit('runtime-warning', message)\n}\n\n/** 输出与内部反应式容器隔离的值副本。 */\nfunction emitRuntimeValue(): void {\n emit('update:modelValue', cloneValue(valueStore))\n}\n\n/** 将外部受控值合并到已建立默认值的运行仓库。 */\nfunction mergeValueStore(\n target: DesignerRuntimeValueStore,\n source: DesignerRuntimeValueStore,\n): void {\n Object.assign(target.fields, cloneValue(source.fields))\n Object.assign(target.collections, cloneValue(source.collections))\n}\n\n/** 用稳定 JSON 签名阻止受控回传导致的无效循环。 */\nfunction runtimeStoreSignature(store: DesignerRuntimeValueStore): string {\n return JSON.stringify(store)\n}\n\n/** 将任意运行异常规范化为可向外层反馈的明确消息。 */\nfunction runtimeErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : '运行预览执行失败'\n}\n\n/** 克隆运行值;优先支持 File 等浏览器宿主对象。 */\nfunction cloneValue<T>(value: T): T {\n if (value === undefined || value === null) return value\n if (typeof globalThis.structuredClone === 'function') {\n try {\n return globalThis.structuredClone(value)\n } catch {\n // 无法结构化克隆的宿主对象继续使用保守递归策略。\n }\n }\n if (Array.isArray(value)) return value.map((item) => cloneValue(item)) as T\n if (typeof value === 'object' && Object.getPrototypeOf(value) === Object.prototype) {\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>).map(([key, item]) => [\n key,\n cloneValue(item),\n ]),\n ) as T\n }\n return value\n}\n</script>\n\n<style scoped>\n.designer-preview-form {\n box-sizing: border-box;\n width: 100%;\n min-height: 480px;\n padding: var(--daxiang-form-space-4);\n margin: auto;\n background: var(--el-bg-color);\n transition: width var(--el-transition-duration-fast);\n}\n\n.designer-preview-form.is-mobile {\n width: min(390px, 100%);\n}\n\n.designer-preview-form.is-overlay-only {\n width: 0;\n min-height: 0;\n padding: 0;\n margin: 0;\n overflow: hidden;\n}\n\n.designer-preview-form__toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding-bottom: var(--daxiang-form-space-3);\n margin-bottom: var(--daxiang-form-space-4);\n border-bottom: 1px solid var(--el-border-color-lighter);\n}\n\n.designer-preview-form__toolbar > span {\n display: inline-flex;\n align-items: center;\n color: var(--el-text-color-regular);\n gap: var(--daxiang-form-space-2);\n font-size: 13px;\n font-weight: 600;\n}\n\n.designer-preview-form__toolbar > div {\n display: flex;\n align-items: center;\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-preview-form__locale {\n width: 120px;\n}\n\n.designer-preview-form__notice {\n margin-bottom: var(--daxiang-form-space-3);\n}\n\n.designer-preview-form__actions {\n display: flex;\n padding: var(--daxiang-form-space-3) 0;\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-preview-form__actions.is-center {\n justify-content: center;\n}\n\n.designer-preview-form__actions.is-right,\n.designer-preview-form__drawer-footer {\n justify-content: flex-end;\n}\n\n.designer-preview-form__grid {\n row-gap: var(--designer-row-gap);\n}\n\n.designer-preview-form__form :deep(.el-form-item) {\n margin-bottom: 0;\n}\n\n.designer-preview-form__overlay-content {\n min-height: 160px;\n padding: var(--daxiang-form-space-2);\n}\n\n.designer-preview-form__drawer-footer {\n display: flex;\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-preview-form.is-mode-detail {\n background: var(--el-fill-color-blank);\n}\n\n@media (width <= 640px) {\n .designer-preview-form {\n padding: var(--daxiang-form-space-3);\n }\n\n .designer-preview-form__toolbar {\n align-items: stretch;\n flex-direction: column;\n gap: var(--daxiang-form-space-2);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .designer-preview-form {\n transition: none;\n }\n}\n</style>\n","var an = Object.defineProperty;\nvar Pe = Object.getOwnPropertySymbols;\nvar yt = Object.prototype.hasOwnProperty, wt = Object.prototype.propertyIsEnumerable;\nvar bt = (t, e, n) => e in t ? an(t, e, { enumerable: !0, configurable: !0, writable: !0, value: n }) : t[e] = n, fe = (t, e) => {\n for (var n in e || (e = {}))\n yt.call(e, n) && bt(t, n, e[n]);\n if (Pe)\n for (var n of Pe(e))\n wt.call(e, n) && bt(t, n, e[n]);\n return t;\n};\nvar $e = (t, e) => {\n var n = {};\n for (var o in t)\n yt.call(t, o) && e.indexOf(o) < 0 && (n[o] = t[o]);\n if (t != null && Pe)\n for (var o of Pe(t))\n e.indexOf(o) < 0 && wt.call(t, o) && (n[o] = t[o]);\n return n;\n};\nimport { getCurrentInstance as dt, unref as U, watch as ln, onUnmounted as sn, onMounted as un, nextTick as kt, isRef as qe, defineComponent as cn, computed as Et, toRefs as fn, ref as dn, reactive as hn, h as pn, isProxy as gn } from \"vue\";\nconst Ht = \"[vue-draggable-plus]: \";\nfunction mn(t) {\n console.warn(Ht + t);\n}\nfunction vn(t) {\n console.error(Ht + t);\n}\nfunction St(t, e, n) {\n return n >= 0 && n < t.length && t.splice(n, 0, t.splice(e, 1)[0]), t;\n}\nfunction bn(t) {\n return t.replace(/-(\\w)/g, (e, n) => n ? n.toUpperCase() : \"\");\n}\nfunction yn(t) {\n return Object.keys(t).reduce((e, n) => (typeof t[n] != \"undefined\" && (e[bn(n)] = t[n]), e), {});\n}\nfunction Dt(t, e) {\n return Array.isArray(t) && t.splice(e, 1), t;\n}\nfunction _t(t, e, n) {\n return Array.isArray(t) && t.splice(e, 0, n), t;\n}\nfunction wn(t) {\n return typeof t == \"undefined\";\n}\nfunction En(t) {\n return typeof t == \"string\";\n}\nfunction Tt(t, e, n) {\n const o = t.children[n];\n t.insertBefore(e, o);\n}\nfunction Ke(t) {\n t.parentNode && t.parentNode.removeChild(t);\n}\nfunction Sn(t, e = document) {\n var o;\n let n = null;\n return typeof (e == null ? void 0 : e.querySelector) == \"function\" ? n = (o = e == null ? void 0 : e.querySelector) == null ? void 0 : o.call(e, t) : n = document.querySelector(t), n || mn(`Element not found: ${t}`), n;\n}\nfunction Dn(t, e, n = null) {\n return function(...o) {\n return t.apply(n, o), e.apply(n, o);\n };\n}\nfunction _n(t, e) {\n const n = fe({}, t);\n return Object.keys(e).forEach((o) => {\n n[o] ? n[o] = Dn(t[o], e[o]) : n[o] = e[o];\n }), n;\n}\nfunction Tn(t) {\n return t instanceof HTMLElement;\n}\nfunction Ct(t, e) {\n Object.keys(t).forEach((n) => {\n e(n, t[n]);\n });\n}\nfunction Cn(t) {\n return t.charCodeAt(0) === 111 && t.charCodeAt(1) === 110 && (t.charCodeAt(2) > 122 || t.charCodeAt(2) < 97);\n}\nconst On = Object.assign;\n/**!\n * Sortable 1.15.2\n * @author\tRubaXa <trash@rubaxa.org>\n * @author\towenm <owen23355@gmail.com>\n * @license MIT\n */\nfunction Ot(t, e) {\n var n = Object.keys(t);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(t);\n e && (o = o.filter(function(r) {\n return Object.getOwnPropertyDescriptor(t, r).enumerable;\n })), n.push.apply(n, o);\n }\n return n;\n}\nfunction ne(t) {\n for (var e = 1; e < arguments.length; e++) {\n var n = arguments[e] != null ? arguments[e] : {};\n e % 2 ? Ot(Object(n), !0).forEach(function(o) {\n In(t, o, n[o]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : Ot(Object(n)).forEach(function(o) {\n Object.defineProperty(t, o, Object.getOwnPropertyDescriptor(n, o));\n });\n }\n return t;\n}\nfunction Ye(t) {\n \"@babel/helpers - typeof\";\n return typeof Symbol == \"function\" && typeof Symbol.iterator == \"symbol\" ? Ye = function(e) {\n return typeof e;\n } : Ye = function(e) {\n return e && typeof Symbol == \"function\" && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n }, Ye(t);\n}\nfunction In(t, e, n) {\n return e in t ? Object.defineProperty(t, e, {\n value: n,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : t[e] = n, t;\n}\nfunction ie() {\n return ie = Object.assign || function(t) {\n for (var e = 1; e < arguments.length; e++) {\n var n = arguments[e];\n for (var o in n)\n Object.prototype.hasOwnProperty.call(n, o) && (t[o] = n[o]);\n }\n return t;\n }, ie.apply(this, arguments);\n}\nfunction An(t, e) {\n if (t == null)\n return {};\n var n = {}, o = Object.keys(t), r, i;\n for (i = 0; i < o.length; i++)\n r = o[i], !(e.indexOf(r) >= 0) && (n[r] = t[r]);\n return n;\n}\nfunction xn(t, e) {\n if (t == null)\n return {};\n var n = An(t, e), o, r;\n if (Object.getOwnPropertySymbols) {\n var i = Object.getOwnPropertySymbols(t);\n for (r = 0; r < i.length; r++)\n o = i[r], !(e.indexOf(o) >= 0) && Object.prototype.propertyIsEnumerable.call(t, o) && (n[o] = t[o]);\n }\n return n;\n}\nvar Nn = \"1.15.2\";\nfunction re(t) {\n if (typeof window != \"undefined\" && window.navigator)\n return !!/* @__PURE__ */ navigator.userAgent.match(t);\n}\nvar ae = re(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i), xe = re(/Edge/i), It = re(/firefox/i), Te = re(/safari/i) && !re(/chrome/i) && !re(/android/i), Lt = re(/iP(ad|od|hone)/i), Wt = re(/chrome/i) && re(/android/i), Gt = {\n capture: !1,\n passive: !1\n};\nfunction S(t, e, n) {\n t.addEventListener(e, n, !ae && Gt);\n}\nfunction E(t, e, n) {\n t.removeEventListener(e, n, !ae && Gt);\n}\nfunction We(t, e) {\n if (e) {\n if (e[0] === \">\" && (e = e.substring(1)), t)\n try {\n if (t.matches)\n return t.matches(e);\n if (t.msMatchesSelector)\n return t.msMatchesSelector(e);\n if (t.webkitMatchesSelector)\n return t.webkitMatchesSelector(e);\n } catch (n) {\n return !1;\n }\n return !1;\n }\n}\nfunction Pn(t) {\n return t.host && t !== document && t.host.nodeType ? t.host : t.parentNode;\n}\nfunction Q(t, e, n, o) {\n if (t) {\n n = n || document;\n do {\n if (e != null && (e[0] === \">\" ? t.parentNode === n && We(t, e) : We(t, e)) || o && t === n)\n return t;\n if (t === n)\n break;\n } while (t = Pn(t));\n }\n return null;\n}\nvar At = /\\s+/g;\nfunction V(t, e, n) {\n if (t && e)\n if (t.classList)\n t.classList[n ? \"add\" : \"remove\"](e);\n else {\n var o = (\" \" + t.className + \" \").replace(At, \" \").replace(\" \" + e + \" \", \" \");\n t.className = (o + (n ? \" \" + e : \"\")).replace(At, \" \");\n }\n}\nfunction h(t, e, n) {\n var o = t && t.style;\n if (o) {\n if (n === void 0)\n return document.defaultView && document.defaultView.getComputedStyle ? n = document.defaultView.getComputedStyle(t, \"\") : t.currentStyle && (n = t.currentStyle), e === void 0 ? n : n[e];\n !(e in o) && e.indexOf(\"webkit\") === -1 && (e = \"-webkit-\" + e), o[e] = n + (typeof n == \"string\" ? \"\" : \"px\");\n }\n}\nfunction ye(t, e) {\n var n = \"\";\n if (typeof t == \"string\")\n n = t;\n else\n do {\n var o = h(t, \"transform\");\n o && o !== \"none\" && (n = o + \" \" + n);\n } while (!e && (t = t.parentNode));\n var r = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n return r && new r(n);\n}\nfunction jt(t, e, n) {\n if (t) {\n var o = t.getElementsByTagName(e), r = 0, i = o.length;\n if (n)\n for (; r < i; r++)\n n(o[r], r);\n return o;\n }\n return [];\n}\nfunction te() {\n var t = document.scrollingElement;\n return t || document.documentElement;\n}\nfunction P(t, e, n, o, r) {\n if (!(!t.getBoundingClientRect && t !== window)) {\n var i, a, l, s, u, d, f;\n if (t !== window && t.parentNode && t !== te() ? (i = t.getBoundingClientRect(), a = i.top, l = i.left, s = i.bottom, u = i.right, d = i.height, f = i.width) : (a = 0, l = 0, s = window.innerHeight, u = window.innerWidth, d = window.innerHeight, f = window.innerWidth), (e || n) && t !== window && (r = r || t.parentNode, !ae))\n do\n if (r && r.getBoundingClientRect && (h(r, \"transform\") !== \"none\" || n && h(r, \"position\") !== \"static\")) {\n var m = r.getBoundingClientRect();\n a -= m.top + parseInt(h(r, \"border-top-width\")), l -= m.left + parseInt(h(r, \"border-left-width\")), s = a + i.height, u = l + i.width;\n break;\n }\n while (r = r.parentNode);\n if (o && t !== window) {\n var y = ye(r || t), b = y && y.a, w = y && y.d;\n y && (a /= w, l /= b, f /= b, d /= w, s = a + d, u = l + f);\n }\n return {\n top: a,\n left: l,\n bottom: s,\n right: u,\n width: f,\n height: d\n };\n }\n}\nfunction xt(t, e, n) {\n for (var o = ce(t, !0), r = P(t)[e]; o; ) {\n var i = P(o)[n], a = void 0;\n if (a = r >= i, !a)\n return o;\n if (o === te())\n break;\n o = ce(o, !1);\n }\n return !1;\n}\nfunction we(t, e, n, o) {\n for (var r = 0, i = 0, a = t.children; i < a.length; ) {\n if (a[i].style.display !== \"none\" && a[i] !== p.ghost && (o || a[i] !== p.dragged) && Q(a[i], n.draggable, t, !1)) {\n if (r === e)\n return a[i];\n r++;\n }\n i++;\n }\n return null;\n}\nfunction ht(t, e) {\n for (var n = t.lastElementChild; n && (n === p.ghost || h(n, \"display\") === \"none\" || e && !We(n, e)); )\n n = n.previousElementSibling;\n return n || null;\n}\nfunction J(t, e) {\n var n = 0;\n if (!t || !t.parentNode)\n return -1;\n for (; t = t.previousElementSibling; )\n t.nodeName.toUpperCase() !== \"TEMPLATE\" && t !== p.clone && (!e || We(t, e)) && n++;\n return n;\n}\nfunction Nt(t) {\n var e = 0, n = 0, o = te();\n if (t)\n do {\n var r = ye(t), i = r.a, a = r.d;\n e += t.scrollLeft * i, n += t.scrollTop * a;\n } while (t !== o && (t = t.parentNode));\n return [e, n];\n}\nfunction Mn(t, e) {\n for (var n in t)\n if (t.hasOwnProperty(n)) {\n for (var o in e)\n if (e.hasOwnProperty(o) && e[o] === t[n][o])\n return Number(n);\n }\n return -1;\n}\nfunction ce(t, e) {\n if (!t || !t.getBoundingClientRect)\n return te();\n var n = t, o = !1;\n do\n if (n.clientWidth < n.scrollWidth || n.clientHeight < n.scrollHeight) {\n var r = h(n);\n if (n.clientWidth < n.scrollWidth && (r.overflowX == \"auto\" || r.overflowX == \"scroll\") || n.clientHeight < n.scrollHeight && (r.overflowY == \"auto\" || r.overflowY == \"scroll\")) {\n if (!n.getBoundingClientRect || n === document.body)\n return te();\n if (o || e)\n return n;\n o = !0;\n }\n }\n while (n = n.parentNode);\n return te();\n}\nfunction Fn(t, e) {\n if (t && e)\n for (var n in e)\n e.hasOwnProperty(n) && (t[n] = e[n]);\n return t;\n}\nfunction Je(t, e) {\n return Math.round(t.top) === Math.round(e.top) && Math.round(t.left) === Math.round(e.left) && Math.round(t.height) === Math.round(e.height) && Math.round(t.width) === Math.round(e.width);\n}\nvar Ce;\nfunction zt(t, e) {\n return function() {\n if (!Ce) {\n var n = arguments, o = this;\n n.length === 1 ? t.call(o, n[0]) : t.apply(o, n), Ce = setTimeout(function() {\n Ce = void 0;\n }, e);\n }\n };\n}\nfunction Rn() {\n clearTimeout(Ce), Ce = void 0;\n}\nfunction Ut(t, e, n) {\n t.scrollLeft += e, t.scrollTop += n;\n}\nfunction Vt(t) {\n var e = window.Polymer, n = window.jQuery || window.Zepto;\n return e && e.dom ? e.dom(t).cloneNode(!0) : n ? n(t).clone(!0)[0] : t.cloneNode(!0);\n}\nfunction $t(t, e, n) {\n var o = {};\n return Array.from(t.children).forEach(function(r) {\n var i, a, l, s;\n if (!(!Q(r, e.draggable, t, !1) || r.animated || r === n)) {\n var u = P(r);\n o.left = Math.min((i = o.left) !== null && i !== void 0 ? i : 1 / 0, u.left), o.top = Math.min((a = o.top) !== null && a !== void 0 ? a : 1 / 0, u.top), o.right = Math.max((l = o.right) !== null && l !== void 0 ? l : -1 / 0, u.right), o.bottom = Math.max((s = o.bottom) !== null && s !== void 0 ? s : -1 / 0, u.bottom);\n }\n }), o.width = o.right - o.left, o.height = o.bottom - o.top, o.x = o.left, o.y = o.top, o;\n}\nvar q = \"Sortable\" + (/* @__PURE__ */ new Date()).getTime();\nfunction Xn() {\n var t = [], e;\n return {\n captureAnimationState: function() {\n if (t = [], !!this.options.animation) {\n var o = [].slice.call(this.el.children);\n o.forEach(function(r) {\n if (!(h(r, \"display\") === \"none\" || r === p.ghost)) {\n t.push({\n target: r,\n rect: P(r)\n });\n var i = ne({}, t[t.length - 1].rect);\n if (r.thisAnimationDuration) {\n var a = ye(r, !0);\n a && (i.top -= a.f, i.left -= a.e);\n }\n r.fromRect = i;\n }\n });\n }\n },\n addAnimationState: function(o) {\n t.push(o);\n },\n removeAnimationState: function(o) {\n t.splice(Mn(t, {\n target: o\n }), 1);\n },\n animateAll: function(o) {\n var r = this;\n if (!this.options.animation) {\n clearTimeout(e), typeof o == \"function\" && o();\n return;\n }\n var i = !1, a = 0;\n t.forEach(function(l) {\n var s = 0, u = l.target, d = u.fromRect, f = P(u), m = u.prevFromRect, y = u.prevToRect, b = l.rect, w = ye(u, !0);\n w && (f.top -= w.f, f.left -= w.e), u.toRect = f, u.thisAnimationDuration && Je(m, f) && !Je(d, f) && // Make sure animatingRect is on line between toRect & fromRect\n (b.top - f.top) / (b.left - f.left) === (d.top - f.top) / (d.left - f.left) && (s = Bn(b, m, y, r.options)), Je(f, d) || (u.prevFromRect = d, u.prevToRect = f, s || (s = r.options.animation), r.animate(u, b, f, s)), s && (i = !0, a = Math.max(a, s), clearTimeout(u.animationResetTimer), u.animationResetTimer = setTimeout(function() {\n u.animationTime = 0, u.prevFromRect = null, u.fromRect = null, u.prevToRect = null, u.thisAnimationDuration = null;\n }, s), u.thisAnimationDuration = s);\n }), clearTimeout(e), i ? e = setTimeout(function() {\n typeof o == \"function\" && o();\n }, a) : typeof o == \"function\" && o(), t = [];\n },\n animate: function(o, r, i, a) {\n if (a) {\n h(o, \"transition\", \"\"), h(o, \"transform\", \"\");\n var l = ye(this.el), s = l && l.a, u = l && l.d, d = (r.left - i.left) / (s || 1), f = (r.top - i.top) / (u || 1);\n o.animatingX = !!d, o.animatingY = !!f, h(o, \"transform\", \"translate3d(\" + d + \"px,\" + f + \"px,0)\"), this.forRepaintDummy = Yn(o), h(o, \"transition\", \"transform \" + a + \"ms\" + (this.options.easing ? \" \" + this.options.easing : \"\")), h(o, \"transform\", \"translate3d(0,0,0)\"), typeof o.animated == \"number\" && clearTimeout(o.animated), o.animated = setTimeout(function() {\n h(o, \"transition\", \"\"), h(o, \"transform\", \"\"), o.animated = !1, o.animatingX = !1, o.animatingY = !1;\n }, a);\n }\n }\n };\n}\nfunction Yn(t) {\n return t.offsetWidth;\n}\nfunction Bn(t, e, n, o) {\n return Math.sqrt(Math.pow(e.top - t.top, 2) + Math.pow(e.left - t.left, 2)) / Math.sqrt(Math.pow(e.top - n.top, 2) + Math.pow(e.left - n.left, 2)) * o.animation;\n}\nvar ge = [], Ze = {\n initializeByDefault: !0\n}, Ne = {\n mount: function(e) {\n for (var n in Ze)\n Ze.hasOwnProperty(n) && !(n in e) && (e[n] = Ze[n]);\n ge.forEach(function(o) {\n if (o.pluginName === e.pluginName)\n throw \"Sortable: Cannot mount plugin \".concat(e.pluginName, \" more than once\");\n }), ge.push(e);\n },\n pluginEvent: function(e, n, o) {\n var r = this;\n this.eventCanceled = !1, o.cancel = function() {\n r.eventCanceled = !0;\n };\n var i = e + \"Global\";\n ge.forEach(function(a) {\n n[a.pluginName] && (n[a.pluginName][i] && n[a.pluginName][i](ne({\n sortable: n\n }, o)), n.options[a.pluginName] && n[a.pluginName][e] && n[a.pluginName][e](ne({\n sortable: n\n }, o)));\n });\n },\n initializePlugins: function(e, n, o, r) {\n ge.forEach(function(l) {\n var s = l.pluginName;\n if (!(!e.options[s] && !l.initializeByDefault)) {\n var u = new l(e, n, e.options);\n u.sortable = e, u.options = e.options, e[s] = u, ie(o, u.defaults);\n }\n });\n for (var i in e.options)\n if (e.options.hasOwnProperty(i)) {\n var a = this.modifyOption(e, i, e.options[i]);\n typeof a != \"undefined\" && (e.options[i] = a);\n }\n },\n getEventProperties: function(e, n) {\n var o = {};\n return ge.forEach(function(r) {\n typeof r.eventProperties == \"function\" && ie(o, r.eventProperties.call(n[r.pluginName], e));\n }), o;\n },\n modifyOption: function(e, n, o) {\n var r;\n return ge.forEach(function(i) {\n e[i.pluginName] && i.optionListeners && typeof i.optionListeners[n] == \"function\" && (r = i.optionListeners[n].call(e[i.pluginName], o));\n }), r;\n }\n};\nfunction kn(t) {\n var e = t.sortable, n = t.rootEl, o = t.name, r = t.targetEl, i = t.cloneEl, a = t.toEl, l = t.fromEl, s = t.oldIndex, u = t.newIndex, d = t.oldDraggableIndex, f = t.newDraggableIndex, m = t.originalEvent, y = t.putSortable, b = t.extraEventProperties;\n if (e = e || n && n[q], !!e) {\n var w, L = e.options, G = \"on\" + o.charAt(0).toUpperCase() + o.substr(1);\n window.CustomEvent && !ae && !xe ? w = new CustomEvent(o, {\n bubbles: !0,\n cancelable: !0\n }) : (w = document.createEvent(\"Event\"), w.initEvent(o, !0, !0)), w.to = a || n, w.from = l || n, w.item = r || n, w.clone = i, w.oldIndex = s, w.newIndex = u, w.oldDraggableIndex = d, w.newDraggableIndex = f, w.originalEvent = m, w.pullMode = y ? y.lastPutMode : void 0;\n var R = ne(ne({}, b), Ne.getEventProperties(o, e));\n for (var j in R)\n w[j] = R[j];\n n && n.dispatchEvent(w), L[G] && L[G].call(e, w);\n }\n}\nvar Hn = [\"evt\"], z = function(e, n) {\n var o = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}, r = o.evt, i = xn(o, Hn);\n Ne.pluginEvent.bind(p)(e, n, ne({\n dragEl: c,\n parentEl: O,\n ghostEl: g,\n rootEl: T,\n nextEl: pe,\n lastDownEl: Be,\n cloneEl: C,\n cloneHidden: ue,\n dragStarted: Se,\n putSortable: Y,\n activeSortable: p.active,\n originalEvent: r,\n oldIndex: be,\n oldDraggableIndex: Oe,\n newIndex: $,\n newDraggableIndex: se,\n hideGhostForTarget: Zt,\n unhideGhostForTarget: Qt,\n cloneNowHidden: function() {\n ue = !0;\n },\n cloneNowShown: function() {\n ue = !1;\n },\n dispatchSortableEvent: function(l) {\n W({\n sortable: n,\n name: l,\n originalEvent: r\n });\n }\n }, i));\n};\nfunction W(t) {\n kn(ne({\n putSortable: Y,\n cloneEl: C,\n targetEl: c,\n rootEl: T,\n oldIndex: be,\n oldDraggableIndex: Oe,\n newIndex: $,\n newDraggableIndex: se\n }, t));\n}\nvar c, O, g, T, pe, Be, C, ue, be, $, Oe, se, Me, Y, ve = !1, Ge = !1, je = [], de, Z, Qe, et, Pt, Mt, Se, me, Ie, Ae = !1, Fe = !1, ke, H, tt = [], lt = !1, ze = [], Ve = typeof document != \"undefined\", Re = Lt, Ft = xe || ae ? \"cssFloat\" : \"float\", Ln = Ve && !Wt && !Lt && \"draggable\" in document.createElement(\"div\"), qt = function() {\n if (Ve) {\n if (ae)\n return !1;\n var t = document.createElement(\"x\");\n return t.style.cssText = \"pointer-events:auto\", t.style.pointerEvents === \"auto\";\n }\n}(), Kt = function(e, n) {\n var o = h(e), r = parseInt(o.width) - parseInt(o.paddingLeft) - parseInt(o.paddingRight) - parseInt(o.borderLeftWidth) - parseInt(o.borderRightWidth), i = we(e, 0, n), a = we(e, 1, n), l = i && h(i), s = a && h(a), u = l && parseInt(l.marginLeft) + parseInt(l.marginRight) + P(i).width, d = s && parseInt(s.marginLeft) + parseInt(s.marginRight) + P(a).width;\n if (o.display === \"flex\")\n return o.flexDirection === \"column\" || o.flexDirection === \"column-reverse\" ? \"vertical\" : \"horizontal\";\n if (o.display === \"grid\")\n return o.gridTemplateColumns.split(\" \").length <= 1 ? \"vertical\" : \"horizontal\";\n if (i && l.float && l.float !== \"none\") {\n var f = l.float === \"left\" ? \"left\" : \"right\";\n return a && (s.clear === \"both\" || s.clear === f) ? \"vertical\" : \"horizontal\";\n }\n return i && (l.display === \"block\" || l.display === \"flex\" || l.display === \"table\" || l.display === \"grid\" || u >= r && o[Ft] === \"none\" || a && o[Ft] === \"none\" && u + d > r) ? \"vertical\" : \"horizontal\";\n}, Wn = function(e, n, o) {\n var r = o ? e.left : e.top, i = o ? e.right : e.bottom, a = o ? e.width : e.height, l = o ? n.left : n.top, s = o ? n.right : n.bottom, u = o ? n.width : n.height;\n return r === l || i === s || r + a / 2 === l + u / 2;\n}, Gn = function(e, n) {\n var o;\n return je.some(function(r) {\n var i = r[q].options.emptyInsertThreshold;\n if (!(!i || ht(r))) {\n var a = P(r), l = e >= a.left - i && e <= a.right + i, s = n >= a.top - i && n <= a.bottom + i;\n if (l && s)\n return o = r;\n }\n }), o;\n}, Jt = function(e) {\n function n(i, a) {\n return function(l, s, u, d) {\n var f = l.options.group.name && s.options.group.name && l.options.group.name === s.options.group.name;\n if (i == null && (a || f))\n return !0;\n if (i == null || i === !1)\n return !1;\n if (a && i === \"clone\")\n return i;\n if (typeof i == \"function\")\n return n(i(l, s, u, d), a)(l, s, u, d);\n var m = (a ? l : s).options.group.name;\n return i === !0 || typeof i == \"string\" && i === m || i.join && i.indexOf(m) > -1;\n };\n }\n var o = {}, r = e.group;\n (!r || Ye(r) != \"object\") && (r = {\n name: r\n }), o.name = r.name, o.checkPull = n(r.pull, !0), o.checkPut = n(r.put), o.revertClone = r.revertClone, e.group = o;\n}, Zt = function() {\n !qt && g && h(g, \"display\", \"none\");\n}, Qt = function() {\n !qt && g && h(g, \"display\", \"\");\n};\nVe && !Wt && document.addEventListener(\"click\", function(t) {\n if (Ge)\n return t.preventDefault(), t.stopPropagation && t.stopPropagation(), t.stopImmediatePropagation && t.stopImmediatePropagation(), Ge = !1, !1;\n}, !0);\nvar he = function(e) {\n if (c) {\n e = e.touches ? e.touches[0] : e;\n var n = Gn(e.clientX, e.clientY);\n if (n) {\n var o = {};\n for (var r in e)\n e.hasOwnProperty(r) && (o[r] = e[r]);\n o.target = o.rootEl = n, o.preventDefault = void 0, o.stopPropagation = void 0, n[q]._onDragOver(o);\n }\n }\n}, jn = function(e) {\n c && c.parentNode[q]._isOutsideThisEl(e.target);\n};\nfunction p(t, e) {\n if (!(t && t.nodeType && t.nodeType === 1))\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(t));\n this.el = t, this.options = e = ie({}, e), t[q] = this;\n var n = {\n group: null,\n sort: !0,\n disabled: !1,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(t.nodeName) ? \">li\" : \">*\",\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: !1,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: !0,\n direction: function() {\n return Kt(t, this.options);\n },\n ghostClass: \"sortable-ghost\",\n chosenClass: \"sortable-chosen\",\n dragClass: \"sortable-drag\",\n ignore: \"a, img\",\n filter: null,\n preventOnFilter: !0,\n animation: 0,\n easing: null,\n setData: function(a, l) {\n a.setData(\"Text\", l.textContent);\n },\n dropBubble: !1,\n dragoverBubble: !1,\n dataIdAttr: \"data-id\",\n delay: 0,\n delayOnTouchOnly: !1,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: !1,\n fallbackClass: \"sortable-fallback\",\n fallbackOnBody: !1,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n supportPointer: p.supportPointer !== !1 && \"PointerEvent\" in window && !Te,\n emptyInsertThreshold: 5\n };\n Ne.initializePlugins(this, t, n);\n for (var o in n)\n !(o in e) && (e[o] = n[o]);\n Jt(e);\n for (var r in this)\n r.charAt(0) === \"_\" && typeof this[r] == \"function\" && (this[r] = this[r].bind(this));\n this.nativeDraggable = e.forceFallback ? !1 : Ln, this.nativeDraggable && (this.options.touchStartThreshold = 1), e.supportPointer ? S(t, \"pointerdown\", this._onTapStart) : (S(t, \"mousedown\", this._onTapStart), S(t, \"touchstart\", this._onTapStart)), this.nativeDraggable && (S(t, \"dragover\", this), S(t, \"dragenter\", this)), je.push(this.el), e.store && e.store.get && this.sort(e.store.get(this) || []), ie(this, Xn());\n}\np.prototype = /** @lends Sortable.prototype */\n{\n constructor: p,\n _isOutsideThisEl: function(e) {\n !this.el.contains(e) && e !== this.el && (me = null);\n },\n _getDirection: function(e, n) {\n return typeof this.options.direction == \"function\" ? this.options.direction.call(this, e, n, c) : this.options.direction;\n },\n _onTapStart: function(e) {\n if (e.cancelable) {\n var n = this, o = this.el, r = this.options, i = r.preventOnFilter, a = e.type, l = e.touches && e.touches[0] || e.pointerType && e.pointerType === \"touch\" && e, s = (l || e).target, u = e.target.shadowRoot && (e.path && e.path[0] || e.composedPath && e.composedPath()[0]) || s, d = r.filter;\n if (Zn(o), !c && !(/mousedown|pointerdown/.test(a) && e.button !== 0 || r.disabled) && !u.isContentEditable && !(!this.nativeDraggable && Te && s && s.tagName.toUpperCase() === \"SELECT\") && (s = Q(s, r.draggable, o, !1), !(s && s.animated) && Be !== s)) {\n if (be = J(s), Oe = J(s, r.draggable), typeof d == \"function\") {\n if (d.call(this, e, s, this)) {\n W({\n sortable: n,\n rootEl: u,\n name: \"filter\",\n targetEl: s,\n toEl: o,\n fromEl: o\n }), z(\"filter\", n, {\n evt: e\n }), i && e.cancelable && e.preventDefault();\n return;\n }\n } else if (d && (d = d.split(\",\").some(function(f) {\n if (f = Q(u, f.trim(), o, !1), f)\n return W({\n sortable: n,\n rootEl: f,\n name: \"filter\",\n targetEl: s,\n fromEl: o,\n toEl: o\n }), z(\"filter\", n, {\n evt: e\n }), !0;\n }), d)) {\n i && e.cancelable && e.preventDefault();\n return;\n }\n r.handle && !Q(u, r.handle, o, !1) || this._prepareDragStart(e, l, s);\n }\n }\n },\n _prepareDragStart: function(e, n, o) {\n var r = this, i = r.el, a = r.options, l = i.ownerDocument, s;\n if (o && !c && o.parentNode === i) {\n var u = P(o);\n if (T = i, c = o, O = c.parentNode, pe = c.nextSibling, Be = o, Me = a.group, p.dragged = c, de = {\n target: c,\n clientX: (n || e).clientX,\n clientY: (n || e).clientY\n }, Pt = de.clientX - u.left, Mt = de.clientY - u.top, this._lastX = (n || e).clientX, this._lastY = (n || e).clientY, c.style[\"will-change\"] = \"all\", s = function() {\n if (z(\"delayEnded\", r, {\n evt: e\n }), p.eventCanceled) {\n r._onDrop();\n return;\n }\n r._disableDelayedDragEvents(), !It && r.nativeDraggable && (c.draggable = !0), r._triggerDragStart(e, n), W({\n sortable: r,\n name: \"choose\",\n originalEvent: e\n }), V(c, a.chosenClass, !0);\n }, a.ignore.split(\",\").forEach(function(d) {\n jt(c, d.trim(), nt);\n }), S(l, \"dragover\", he), S(l, \"mousemove\", he), S(l, \"touchmove\", he), S(l, \"mouseup\", r._onDrop), S(l, \"touchend\", r._onDrop), S(l, \"touchcancel\", r._onDrop), It && this.nativeDraggable && (this.options.touchStartThreshold = 4, c.draggable = !0), z(\"delayStart\", this, {\n evt: e\n }), a.delay && (!a.delayOnTouchOnly || n) && (!this.nativeDraggable || !(xe || ae))) {\n if (p.eventCanceled) {\n this._onDrop();\n return;\n }\n S(l, \"mouseup\", r._disableDelayedDrag), S(l, \"touchend\", r._disableDelayedDrag), S(l, \"touchcancel\", r._disableDelayedDrag), S(l, \"mousemove\", r._delayedDragTouchMoveHandler), S(l, \"touchmove\", r._delayedDragTouchMoveHandler), a.supportPointer && S(l, \"pointermove\", r._delayedDragTouchMoveHandler), r._dragStartTimer = setTimeout(s, a.delay);\n } else\n s();\n }\n },\n _delayedDragTouchMoveHandler: function(e) {\n var n = e.touches ? e.touches[0] : e;\n Math.max(Math.abs(n.clientX - this._lastX), Math.abs(n.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1)) && this._disableDelayedDrag();\n },\n _disableDelayedDrag: function() {\n c && nt(c), clearTimeout(this._dragStartTimer), this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function() {\n var e = this.el.ownerDocument;\n E(e, \"mouseup\", this._disableDelayedDrag), E(e, \"touchend\", this._disableDelayedDrag), E(e, \"touchcancel\", this._disableDelayedDrag), E(e, \"mousemove\", this._delayedDragTouchMoveHandler), E(e, \"touchmove\", this._delayedDragTouchMoveHandler), E(e, \"pointermove\", this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function(e, n) {\n n = n || e.pointerType == \"touch\" && e, !this.nativeDraggable || n ? this.options.supportPointer ? S(document, \"pointermove\", this._onTouchMove) : n ? S(document, \"touchmove\", this._onTouchMove) : S(document, \"mousemove\", this._onTouchMove) : (S(c, \"dragend\", this), S(T, \"dragstart\", this._onDragStart));\n try {\n document.selection ? He(function() {\n document.selection.empty();\n }) : window.getSelection().removeAllRanges();\n } catch (o) {\n }\n },\n _dragStarted: function(e, n) {\n if (ve = !1, T && c) {\n z(\"dragStarted\", this, {\n evt: n\n }), this.nativeDraggable && S(document, \"dragover\", jn);\n var o = this.options;\n !e && V(c, o.dragClass, !1), V(c, o.ghostClass, !0), p.active = this, e && this._appendGhost(), W({\n sortable: this,\n name: \"start\",\n originalEvent: n\n });\n } else\n this._nulling();\n },\n _emulateDragOver: function() {\n if (Z) {\n this._lastX = Z.clientX, this._lastY = Z.clientY, Zt();\n for (var e = document.elementFromPoint(Z.clientX, Z.clientY), n = e; e && e.shadowRoot && (e = e.shadowRoot.elementFromPoint(Z.clientX, Z.clientY), e !== n); )\n n = e;\n if (c.parentNode[q]._isOutsideThisEl(e), n)\n do {\n if (n[q]) {\n var o = void 0;\n if (o = n[q]._onDragOver({\n clientX: Z.clientX,\n clientY: Z.clientY,\n target: e,\n rootEl: n\n }), o && !this.options.dragoverBubble)\n break;\n }\n e = n;\n } while (n = n.parentNode);\n Qt();\n }\n },\n _onTouchMove: function(e) {\n if (de) {\n var n = this.options, o = n.fallbackTolerance, r = n.fallbackOffset, i = e.touches ? e.touches[0] : e, a = g && ye(g, !0), l = g && a && a.a, s = g && a && a.d, u = Re && H && Nt(H), d = (i.clientX - de.clientX + r.x) / (l || 1) + (u ? u[0] - tt[0] : 0) / (l || 1), f = (i.clientY - de.clientY + r.y) / (s || 1) + (u ? u[1] - tt[1] : 0) / (s || 1);\n if (!p.active && !ve) {\n if (o && Math.max(Math.abs(i.clientX - this._lastX), Math.abs(i.clientY - this._lastY)) < o)\n return;\n this._onDragStart(e, !0);\n }\n if (g) {\n a ? (a.e += d - (Qe || 0), a.f += f - (et || 0)) : a = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: d,\n f\n };\n var m = \"matrix(\".concat(a.a, \",\").concat(a.b, \",\").concat(a.c, \",\").concat(a.d, \",\").concat(a.e, \",\").concat(a.f, \")\");\n h(g, \"webkitTransform\", m), h(g, \"mozTransform\", m), h(g, \"msTransform\", m), h(g, \"transform\", m), Qe = d, et = f, Z = i;\n }\n e.cancelable && e.preventDefault();\n }\n },\n _appendGhost: function() {\n if (!g) {\n var e = this.options.fallbackOnBody ? document.body : T, n = P(c, !0, Re, !0, e), o = this.options;\n if (Re) {\n for (H = e; h(H, \"position\") === \"static\" && h(H, \"transform\") === \"none\" && H !== document; )\n H = H.parentNode;\n H !== document.body && H !== document.documentElement ? (H === document && (H = te()), n.top += H.scrollTop, n.left += H.scrollLeft) : H = te(), tt = Nt(H);\n }\n g = c.cloneNode(!0), V(g, o.ghostClass, !1), V(g, o.fallbackClass, !0), V(g, o.dragClass, !0), h(g, \"transition\", \"\"), h(g, \"transform\", \"\"), h(g, \"box-sizing\", \"border-box\"), h(g, \"margin\", 0), h(g, \"top\", n.top), h(g, \"left\", n.left), h(g, \"width\", n.width), h(g, \"height\", n.height), h(g, \"opacity\", \"0.8\"), h(g, \"position\", Re ? \"absolute\" : \"fixed\"), h(g, \"zIndex\", \"100000\"), h(g, \"pointerEvents\", \"none\"), p.ghost = g, e.appendChild(g), h(g, \"transform-origin\", Pt / parseInt(g.style.width) * 100 + \"% \" + Mt / parseInt(g.style.height) * 100 + \"%\");\n }\n },\n _onDragStart: function(e, n) {\n var o = this, r = e.dataTransfer, i = o.options;\n if (z(\"dragStart\", this, {\n evt: e\n }), p.eventCanceled) {\n this._onDrop();\n return;\n }\n z(\"setupClone\", this), p.eventCanceled || (C = Vt(c), C.removeAttribute(\"id\"), C.draggable = !1, C.style[\"will-change\"] = \"\", this._hideClone(), V(C, this.options.chosenClass, !1), p.clone = C), o.cloneId = He(function() {\n z(\"clone\", o), !p.eventCanceled && (o.options.removeCloneOnHide || T.insertBefore(C, c), o._hideClone(), W({\n sortable: o,\n name: \"clone\"\n }));\n }), !n && V(c, i.dragClass, !0), n ? (Ge = !0, o._loopId = setInterval(o._emulateDragOver, 50)) : (E(document, \"mouseup\", o._onDrop), E(document, \"touchend\", o._onDrop), E(document, \"touchcancel\", o._onDrop), r && (r.effectAllowed = \"move\", i.setData && i.setData.call(o, r, c)), S(document, \"drop\", o), h(c, \"transform\", \"translateZ(0)\")), ve = !0, o._dragStartId = He(o._dragStarted.bind(o, n, e)), S(document, \"selectstart\", o), Se = !0, Te && h(document.body, \"user-select\", \"none\");\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function(e) {\n var n = this.el, o = e.target, r, i, a, l = this.options, s = l.group, u = p.active, d = Me === s, f = l.sort, m = Y || u, y, b = this, w = !1;\n if (lt)\n return;\n function L(ee, Ee) {\n z(ee, b, ne({\n evt: e,\n isOwner: d,\n axis: y ? \"vertical\" : \"horizontal\",\n revert: a,\n dragRect: r,\n targetRect: i,\n canSort: f,\n fromSortable: m,\n target: o,\n completed: R,\n onMove: function(vt, rn) {\n return Xe(T, n, c, r, vt, P(vt), e, rn);\n },\n changed: j\n }, Ee));\n }\n function G() {\n L(\"dragOverAnimationCapture\"), b.captureAnimationState(), b !== m && m.captureAnimationState();\n }\n function R(ee) {\n return L(\"dragOverCompleted\", {\n insertion: ee\n }), ee && (d ? u._hideClone() : u._showClone(b), b !== m && (V(c, Y ? Y.options.ghostClass : u.options.ghostClass, !1), V(c, l.ghostClass, !0)), Y !== b && b !== p.active ? Y = b : b === p.active && Y && (Y = null), m === b && (b._ignoreWhileAnimating = o), b.animateAll(function() {\n L(\"dragOverAnimationComplete\"), b._ignoreWhileAnimating = null;\n }), b !== m && (m.animateAll(), m._ignoreWhileAnimating = null)), (o === c && !c.animated || o === n && !o.animated) && (me = null), !l.dragoverBubble && !e.rootEl && o !== document && (c.parentNode[q]._isOutsideThisEl(e.target), !ee && he(e)), !l.dragoverBubble && e.stopPropagation && e.stopPropagation(), w = !0;\n }\n function j() {\n $ = J(c), se = J(c, l.draggable), W({\n sortable: b,\n name: \"change\",\n toEl: n,\n newIndex: $,\n newDraggableIndex: se,\n originalEvent: e\n });\n }\n if (e.preventDefault !== void 0 && e.cancelable && e.preventDefault(), o = Q(o, l.draggable, n, !0), L(\"dragOver\"), p.eventCanceled)\n return w;\n if (c.contains(e.target) || o.animated && o.animatingX && o.animatingY || b._ignoreWhileAnimating === o)\n return R(!1);\n if (Ge = !1, u && !l.disabled && (d ? f || (a = O !== T) : Y === this || (this.lastPutMode = Me.checkPull(this, u, c, e)) && s.checkPut(this, u, c, e))) {\n if (y = this._getDirection(e, o) === \"vertical\", r = P(c), L(\"dragOverValid\"), p.eventCanceled)\n return w;\n if (a)\n return O = T, G(), this._hideClone(), L(\"revert\"), p.eventCanceled || (pe ? T.insertBefore(c, pe) : T.appendChild(c)), R(!0);\n var B = ht(n, l.draggable);\n if (!B || $n(e, y, this) && !B.animated) {\n if (B === c)\n return R(!1);\n if (B && n === e.target && (o = B), o && (i = P(o)), Xe(T, n, c, r, o, i, e, !!o) !== !1)\n return G(), B && B.nextSibling ? n.insertBefore(c, B.nextSibling) : n.appendChild(c), O = n, j(), R(!0);\n } else if (B && Vn(e, y, this)) {\n var X = we(n, 0, l, !0);\n if (X === c)\n return R(!1);\n if (o = X, i = P(o), Xe(T, n, c, r, o, i, e, !1) !== !1)\n return G(), n.insertBefore(c, X), O = n, j(), R(!0);\n } else if (o.parentNode === n) {\n i = P(o);\n var K = 0, oe, le = c.parentNode !== n, k = !Wn(c.animated && c.toRect || r, o.animated && o.toRect || i, y), v = y ? \"top\" : \"left\", D = xt(o, \"top\", \"top\") || xt(c, \"top\", \"top\"), A = D ? D.scrollTop : void 0;\n me !== o && (oe = i[v], Ae = !1, Fe = !k && l.invertSwap || le), K = qn(e, o, i, y, k ? 1 : l.swapThreshold, l.invertedSwapThreshold == null ? l.swapThreshold : l.invertedSwapThreshold, Fe, me === o);\n var I;\n if (K !== 0) {\n var _ = J(c);\n do\n _ -= K, I = O.children[_];\n while (I && (h(I, \"display\") === \"none\" || I === g));\n }\n if (K === 0 || I === o)\n return R(!1);\n me = o, Ie = K;\n var x = o.nextElementSibling, M = !1;\n M = K === 1;\n var F = Xe(T, n, c, r, o, i, e, M);\n if (F !== !1)\n return (F === 1 || F === -1) && (M = F === 1), lt = !0, setTimeout(Un, 30), G(), M && !x ? n.appendChild(c) : o.parentNode.insertBefore(c, M ? x : o), D && Ut(D, 0, A - D.scrollTop), O = c.parentNode, oe !== void 0 && !Fe && (ke = Math.abs(oe - P(o)[v])), j(), R(!0);\n }\n if (n.contains(c))\n return R(!1);\n }\n return !1;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function() {\n E(document, \"mousemove\", this._onTouchMove), E(document, \"touchmove\", this._onTouchMove), E(document, \"pointermove\", this._onTouchMove), E(document, \"dragover\", he), E(document, \"mousemove\", he), E(document, \"touchmove\", he);\n },\n _offUpEvents: function() {\n var e = this.el.ownerDocument;\n E(e, \"mouseup\", this._onDrop), E(e, \"touchend\", this._onDrop), E(e, \"pointerup\", this._onDrop), E(e, \"touchcancel\", this._onDrop), E(document, \"selectstart\", this);\n },\n _onDrop: function(e) {\n var n = this.el, o = this.options;\n if ($ = J(c), se = J(c, o.draggable), z(\"drop\", this, {\n evt: e\n }), O = c && c.parentNode, $ = J(c), se = J(c, o.draggable), p.eventCanceled) {\n this._nulling();\n return;\n }\n ve = !1, Fe = !1, Ae = !1, clearInterval(this._loopId), clearTimeout(this._dragStartTimer), st(this.cloneId), st(this._dragStartId), this.nativeDraggable && (E(document, \"drop\", this), E(n, \"dragstart\", this._onDragStart)), this._offMoveEvents(), this._offUpEvents(), Te && h(document.body, \"user-select\", \"\"), h(c, \"transform\", \"\"), e && (Se && (e.cancelable && e.preventDefault(), !o.dropBubble && e.stopPropagation()), g && g.parentNode && g.parentNode.removeChild(g), (T === O || Y && Y.lastPutMode !== \"clone\") && C && C.parentNode && C.parentNode.removeChild(C), c && (this.nativeDraggable && E(c, \"dragend\", this), nt(c), c.style[\"will-change\"] = \"\", Se && !ve && V(c, Y ? Y.options.ghostClass : this.options.ghostClass, !1), V(c, this.options.chosenClass, !1), W({\n sortable: this,\n name: \"unchoose\",\n toEl: O,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: e\n }), T !== O ? ($ >= 0 && (W({\n rootEl: O,\n name: \"add\",\n toEl: O,\n fromEl: T,\n originalEvent: e\n }), W({\n sortable: this,\n name: \"remove\",\n toEl: O,\n originalEvent: e\n }), W({\n rootEl: O,\n name: \"sort\",\n toEl: O,\n fromEl: T,\n originalEvent: e\n }), W({\n sortable: this,\n name: \"sort\",\n toEl: O,\n originalEvent: e\n })), Y && Y.save()) : $ !== be && $ >= 0 && (W({\n sortable: this,\n name: \"update\",\n toEl: O,\n originalEvent: e\n }), W({\n sortable: this,\n name: \"sort\",\n toEl: O,\n originalEvent: e\n })), p.active && (($ == null || $ === -1) && ($ = be, se = Oe), W({\n sortable: this,\n name: \"end\",\n toEl: O,\n originalEvent: e\n }), this.save()))), this._nulling();\n },\n _nulling: function() {\n z(\"nulling\", this), T = c = O = g = pe = C = Be = ue = de = Z = Se = $ = se = be = Oe = me = Ie = Y = Me = p.dragged = p.ghost = p.clone = p.active = null, ze.forEach(function(e) {\n e.checked = !0;\n }), ze.length = Qe = et = 0;\n },\n handleEvent: function(e) {\n switch (e.type) {\n case \"drop\":\n case \"dragend\":\n this._onDrop(e);\n break;\n case \"dragenter\":\n case \"dragover\":\n c && (this._onDragOver(e), zn(e));\n break;\n case \"selectstart\":\n e.preventDefault();\n break;\n }\n },\n /**\n * Serializes the item into an array of string.\n * @returns {String[]}\n */\n toArray: function() {\n for (var e = [], n, o = this.el.children, r = 0, i = o.length, a = this.options; r < i; r++)\n n = o[r], Q(n, a.draggable, this.el, !1) && e.push(n.getAttribute(a.dataIdAttr) || Jn(n));\n return e;\n },\n /**\n * Sorts the elements according to the array.\n * @param {String[]} order order of the items\n */\n sort: function(e, n) {\n var o = {}, r = this.el;\n this.toArray().forEach(function(i, a) {\n var l = r.children[a];\n Q(l, this.options.draggable, r, !1) && (o[i] = l);\n }, this), n && this.captureAnimationState(), e.forEach(function(i) {\n o[i] && (r.removeChild(o[i]), r.appendChild(o[i]));\n }), n && this.animateAll();\n },\n /**\n * Save the current sorting\n */\n save: function() {\n var e = this.options.store;\n e && e.set && e.set(this);\n },\n /**\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\n * @param {HTMLElement} el\n * @param {String} [selector] default: `options.draggable`\n * @returns {HTMLElement|null}\n */\n closest: function(e, n) {\n return Q(e, n || this.options.draggable, this.el, !1);\n },\n /**\n * Set/get option\n * @param {string} name\n * @param {*} [value]\n * @returns {*}\n */\n option: function(e, n) {\n var o = this.options;\n if (n === void 0)\n return o[e];\n var r = Ne.modifyOption(this, e, n);\n typeof r != \"undefined\" ? o[e] = r : o[e] = n, e === \"group\" && Jt(o);\n },\n /**\n * Destroy\n */\n destroy: function() {\n z(\"destroy\", this);\n var e = this.el;\n e[q] = null, E(e, \"mousedown\", this._onTapStart), E(e, \"touchstart\", this._onTapStart), E(e, \"pointerdown\", this._onTapStart), this.nativeDraggable && (E(e, \"dragover\", this), E(e, \"dragenter\", this)), Array.prototype.forEach.call(e.querySelectorAll(\"[draggable]\"), function(n) {\n n.removeAttribute(\"draggable\");\n }), this._onDrop(), this._disableDelayedDragEvents(), je.splice(je.indexOf(this.el), 1), this.el = e = null;\n },\n _hideClone: function() {\n if (!ue) {\n if (z(\"hideClone\", this), p.eventCanceled)\n return;\n h(C, \"display\", \"none\"), this.options.removeCloneOnHide && C.parentNode && C.parentNode.removeChild(C), ue = !0;\n }\n },\n _showClone: function(e) {\n if (e.lastPutMode !== \"clone\") {\n this._hideClone();\n return;\n }\n if (ue) {\n if (z(\"showClone\", this), p.eventCanceled)\n return;\n c.parentNode == T && !this.options.group.revertClone ? T.insertBefore(C, c) : pe ? T.insertBefore(C, pe) : T.appendChild(C), this.options.group.revertClone && this.animate(c, C), h(C, \"display\", \"\"), ue = !1;\n }\n }\n};\nfunction zn(t) {\n t.dataTransfer && (t.dataTransfer.dropEffect = \"move\"), t.cancelable && t.preventDefault();\n}\nfunction Xe(t, e, n, o, r, i, a, l) {\n var s, u = t[q], d = u.options.onMove, f;\n return window.CustomEvent && !ae && !xe ? s = new CustomEvent(\"move\", {\n bubbles: !0,\n cancelable: !0\n }) : (s = document.createEvent(\"Event\"), s.initEvent(\"move\", !0, !0)), s.to = e, s.from = t, s.dragged = n, s.draggedRect = o, s.related = r || e, s.relatedRect = i || P(e), s.willInsertAfter = l, s.originalEvent = a, t.dispatchEvent(s), d && (f = d.call(u, s, a)), f;\n}\nfunction nt(t) {\n t.draggable = !1;\n}\nfunction Un() {\n lt = !1;\n}\nfunction Vn(t, e, n) {\n var o = P(we(n.el, 0, n.options, !0)), r = $t(n.el, n.options, g), i = 10;\n return e ? t.clientX < r.left - i || t.clientY < o.top && t.clientX < o.right : t.clientY < r.top - i || t.clientY < o.bottom && t.clientX < o.left;\n}\nfunction $n(t, e, n) {\n var o = P(ht(n.el, n.options.draggable)), r = $t(n.el, n.options, g), i = 10;\n return e ? t.clientX > r.right + i || t.clientY > o.bottom && t.clientX > o.left : t.clientY > r.bottom + i || t.clientX > o.right && t.clientY > o.top;\n}\nfunction qn(t, e, n, o, r, i, a, l) {\n var s = o ? t.clientY : t.clientX, u = o ? n.height : n.width, d = o ? n.top : n.left, f = o ? n.bottom : n.right, m = !1;\n if (!a) {\n if (l && ke < u * r) {\n if (!Ae && (Ie === 1 ? s > d + u * i / 2 : s < f - u * i / 2) && (Ae = !0), Ae)\n m = !0;\n else if (Ie === 1 ? s < d + ke : s > f - ke)\n return -Ie;\n } else if (s > d + u * (1 - r) / 2 && s < f - u * (1 - r) / 2)\n return Kn(e);\n }\n return m = m || a, m && (s < d + u * i / 2 || s > f - u * i / 2) ? s > d + u / 2 ? 1 : -1 : 0;\n}\nfunction Kn(t) {\n return J(c) < J(t) ? 1 : -1;\n}\nfunction Jn(t) {\n for (var e = t.tagName + t.className + t.src + t.href + t.textContent, n = e.length, o = 0; n--; )\n o += e.charCodeAt(n);\n return o.toString(36);\n}\nfunction Zn(t) {\n ze.length = 0;\n for (var e = t.getElementsByTagName(\"input\"), n = e.length; n--; ) {\n var o = e[n];\n o.checked && ze.push(o);\n }\n}\nfunction He(t) {\n return setTimeout(t, 0);\n}\nfunction st(t) {\n return clearTimeout(t);\n}\nVe && S(document, \"touchmove\", function(t) {\n (p.active || ve) && t.cancelable && t.preventDefault();\n});\np.utils = {\n on: S,\n off: E,\n css: h,\n find: jt,\n is: function(e, n) {\n return !!Q(e, n, e, !1);\n },\n extend: Fn,\n throttle: zt,\n closest: Q,\n toggleClass: V,\n clone: Vt,\n index: J,\n nextTick: He,\n cancelNextTick: st,\n detectDirection: Kt,\n getChild: we\n};\np.get = function(t) {\n return t[q];\n};\np.mount = function() {\n for (var t = arguments.length, e = new Array(t), n = 0; n < t; n++)\n e[n] = arguments[n];\n e[0].constructor === Array && (e = e[0]), e.forEach(function(o) {\n if (!o.prototype || !o.prototype.constructor)\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(o));\n o.utils && (p.utils = ne(ne({}, p.utils), o.utils)), Ne.mount(o);\n });\n};\np.create = function(t, e) {\n return new p(t, e);\n};\np.version = Nn;\nvar N = [], De, ut, ct = !1, ot, rt, Ue, _e;\nfunction Qn() {\n function t() {\n this.defaults = {\n scroll: !0,\n forceAutoScrollFallback: !1,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: !0\n };\n for (var e in this)\n e.charAt(0) === \"_\" && typeof this[e] == \"function\" && (this[e] = this[e].bind(this));\n }\n return t.prototype = {\n dragStarted: function(n) {\n var o = n.originalEvent;\n this.sortable.nativeDraggable ? S(document, \"dragover\", this._handleAutoScroll) : this.options.supportPointer ? S(document, \"pointermove\", this._handleFallbackAutoScroll) : o.touches ? S(document, \"touchmove\", this._handleFallbackAutoScroll) : S(document, \"mousemove\", this._handleFallbackAutoScroll);\n },\n dragOverCompleted: function(n) {\n var o = n.originalEvent;\n !this.options.dragOverBubble && !o.rootEl && this._handleAutoScroll(o);\n },\n drop: function() {\n this.sortable.nativeDraggable ? E(document, \"dragover\", this._handleAutoScroll) : (E(document, \"pointermove\", this._handleFallbackAutoScroll), E(document, \"touchmove\", this._handleFallbackAutoScroll), E(document, \"mousemove\", this._handleFallbackAutoScroll)), Rt(), Le(), Rn();\n },\n nulling: function() {\n Ue = ut = De = ct = _e = ot = rt = null, N.length = 0;\n },\n _handleFallbackAutoScroll: function(n) {\n this._handleAutoScroll(n, !0);\n },\n _handleAutoScroll: function(n, o) {\n var r = this, i = (n.touches ? n.touches[0] : n).clientX, a = (n.touches ? n.touches[0] : n).clientY, l = document.elementFromPoint(i, a);\n if (Ue = n, o || this.options.forceAutoScrollFallback || xe || ae || Te) {\n it(n, this.options, l, o);\n var s = ce(l, !0);\n ct && (!_e || i !== ot || a !== rt) && (_e && Rt(), _e = setInterval(function() {\n var u = ce(document.elementFromPoint(i, a), !0);\n u !== s && (s = u, Le()), it(n, r.options, u, o);\n }, 10), ot = i, rt = a);\n } else {\n if (!this.options.bubbleScroll || ce(l, !0) === te()) {\n Le();\n return;\n }\n it(n, this.options, ce(l, !1), !1);\n }\n }\n }, ie(t, {\n pluginName: \"scroll\",\n initializeByDefault: !0\n });\n}\nfunction Le() {\n N.forEach(function(t) {\n clearInterval(t.pid);\n }), N = [];\n}\nfunction Rt() {\n clearInterval(_e);\n}\nvar it = zt(function(t, e, n, o) {\n if (e.scroll) {\n var r = (t.touches ? t.touches[0] : t).clientX, i = (t.touches ? t.touches[0] : t).clientY, a = e.scrollSensitivity, l = e.scrollSpeed, s = te(), u = !1, d;\n ut !== n && (ut = n, Le(), De = e.scroll, d = e.scrollFn, De === !0 && (De = ce(n, !0)));\n var f = 0, m = De;\n do {\n var y = m, b = P(y), w = b.top, L = b.bottom, G = b.left, R = b.right, j = b.width, B = b.height, X = void 0, K = void 0, oe = y.scrollWidth, le = y.scrollHeight, k = h(y), v = y.scrollLeft, D = y.scrollTop;\n y === s ? (X = j < oe && (k.overflowX === \"auto\" || k.overflowX === \"scroll\" || k.overflowX === \"visible\"), K = B < le && (k.overflowY === \"auto\" || k.overflowY === \"scroll\" || k.overflowY === \"visible\")) : (X = j < oe && (k.overflowX === \"auto\" || k.overflowX === \"scroll\"), K = B < le && (k.overflowY === \"auto\" || k.overflowY === \"scroll\"));\n var A = X && (Math.abs(R - r) <= a && v + j < oe) - (Math.abs(G - r) <= a && !!v), I = K && (Math.abs(L - i) <= a && D + B < le) - (Math.abs(w - i) <= a && !!D);\n if (!N[f])\n for (var _ = 0; _ <= f; _++)\n N[_] || (N[_] = {});\n (N[f].vx != A || N[f].vy != I || N[f].el !== y) && (N[f].el = y, N[f].vx = A, N[f].vy = I, clearInterval(N[f].pid), (A != 0 || I != 0) && (u = !0, N[f].pid = setInterval(function() {\n o && this.layer === 0 && p.active._onTouchMove(Ue);\n var x = N[this.layer].vy ? N[this.layer].vy * l : 0, M = N[this.layer].vx ? N[this.layer].vx * l : 0;\n typeof d == \"function\" && d.call(p.dragged.parentNode[q], M, x, t, Ue, N[this.layer].el) !== \"continue\" || Ut(N[this.layer].el, M, x);\n }.bind({\n layer: f\n }), 24))), f++;\n } while (e.bubbleScroll && m !== s && (m = ce(m, !1)));\n ct = u;\n }\n}, 30), en = function(e) {\n var n = e.originalEvent, o = e.putSortable, r = e.dragEl, i = e.activeSortable, a = e.dispatchSortableEvent, l = e.hideGhostForTarget, s = e.unhideGhostForTarget;\n if (n) {\n var u = o || i;\n l();\n var d = n.changedTouches && n.changedTouches.length ? n.changedTouches[0] : n, f = document.elementFromPoint(d.clientX, d.clientY);\n s(), u && !u.el.contains(f) && (a(\"spill\"), this.onSpill({\n dragEl: r,\n putSortable: o\n }));\n }\n};\nfunction pt() {\n}\npt.prototype = {\n startIndex: null,\n dragStart: function(e) {\n var n = e.oldDraggableIndex;\n this.startIndex = n;\n },\n onSpill: function(e) {\n var n = e.dragEl, o = e.putSortable;\n this.sortable.captureAnimationState(), o && o.captureAnimationState();\n var r = we(this.sortable.el, this.startIndex, this.options);\n r ? this.sortable.el.insertBefore(n, r) : this.sortable.el.appendChild(n), this.sortable.animateAll(), o && o.animateAll();\n },\n drop: en\n};\nie(pt, {\n pluginName: \"revertOnSpill\"\n});\nfunction gt() {\n}\ngt.prototype = {\n onSpill: function(e) {\n var n = e.dragEl, o = e.putSortable, r = o || this.sortable;\n r.captureAnimationState(), n.parentNode && n.parentNode.removeChild(n), r.animateAll();\n },\n drop: en\n};\nie(gt, {\n pluginName: \"removeOnSpill\"\n});\np.mount(new Qn());\np.mount(gt, pt);\nfunction eo(t) {\n return t == null ? t : JSON.parse(JSON.stringify(t));\n}\nfunction to(t) {\n dt() && sn(t);\n}\nfunction no(t) {\n dt() ? un(t) : kt(t);\n}\nlet tn = null, nn = null;\nfunction Xt(t = null, e = null) {\n tn = t, nn = e;\n}\nfunction oo() {\n return {\n data: tn,\n clonedData: nn\n };\n}\nconst Yt = Symbol(\"cloneElement\");\nfunction on(...t) {\n var le, k;\n const e = (le = dt()) == null ? void 0 : le.proxy;\n let n = null;\n const o = t[0];\n let [, r, i] = t;\n Array.isArray(U(r)) || (i = r, r = null);\n let a = null;\n const {\n immediate: l = !0,\n clone: s = eo,\n forceFallback: u,\n fallbackOnBody: d,\n customUpdate: f\n } = (k = U(i)) != null ? k : {};\n function m(v) {\n var F;\n const { from: D, oldIndex: A, item: I } = v, _ = Array.from(D.childNodes);\n n = u && !d ? _.slice(0, -1) : _;\n const x = U((F = U(r)) == null ? void 0 : F[A]), M = s(x);\n Xt(x, M), I[Yt] = M;\n }\n function y(v) {\n const D = v.item[Yt];\n if (!wn(D)) {\n if (Ke(v.item), qe(r)) {\n const A = [...U(r)];\n r.value = _t(A, v.newDraggableIndex, D);\n return;\n }\n _t(U(r), v.newDraggableIndex, D);\n }\n }\n function b(v) {\n const { from: D, item: A, oldIndex: I, oldDraggableIndex: _, pullMode: x, clone: M } = v;\n if (Tt(D, A, I), x === \"clone\") {\n Ke(M);\n return;\n }\n if (qe(r)) {\n const F = [...U(r)];\n r.value = Dt(F, _);\n return;\n }\n Dt(U(r), _);\n }\n function w(v) {\n if (f) {\n f(v);\n return;\n }\n const { from: D, item: A, oldIndex: I, oldDraggableIndex: _, newDraggableIndex: x } = v;\n if (Ke(A), Tt(D, A, I), qe(r)) {\n const M = [...U(r)];\n r.value = St(\n M,\n _,\n x\n );\n return;\n }\n St(U(r), _, x);\n }\n function L(v) {\n const { newIndex: D, oldIndex: A, from: I, to: _ } = v;\n let x = null;\n const M = D === A && I === _;\n try {\n if (M) {\n let F = null;\n n == null || n.some((ee, Ee) => {\n if (F && (n == null ? void 0 : n.length) !== _.childNodes.length)\n return I.insertBefore(F, ee.nextSibling), !0;\n const mt = _.childNodes[Ee];\n F = _ == null ? void 0 : _.replaceChild(ee, mt);\n });\n }\n } catch (F) {\n x = F;\n } finally {\n n = null;\n }\n kt(() => {\n if (Xt(), x)\n throw x;\n });\n }\n const G = {\n onUpdate: w,\n onStart: m,\n onAdd: y,\n onRemove: b,\n onEnd: L\n };\n function R(v) {\n const D = U(o);\n return v || (v = En(D) ? Sn(D, e == null ? void 0 : e.$el) : D), v && !Tn(v) && (v = v.$el), v || vn(\"Root element not found\"), v;\n }\n function j() {\n var I;\n const _ = (I = U(i)) != null ? I : {}, { immediate: v, clone: D } = _, A = $e(_, [\"immediate\", \"clone\"]);\n return Ct(A, (x, M) => {\n Cn(x) && (A[x] = (F, ...ee) => {\n const Ee = oo();\n return On(F, Ee), M(F, ...ee);\n });\n }), _n(\n r === null ? {} : G,\n A\n );\n }\n const B = (v) => {\n v = R(v), a && X.destroy(), a = new p(v, j());\n };\n ln(\n () => i,\n () => {\n a && Ct(j(), (v, D) => {\n a == null || a.option(v, D);\n });\n },\n { deep: !0 }\n );\n const X = {\n option: (v, D) => a == null ? void 0 : a.option(v, D),\n destroy: () => {\n a == null || a.destroy(), a = null;\n },\n save: () => a == null ? void 0 : a.save(),\n toArray: () => a == null ? void 0 : a.toArray(),\n closest: (...v) => a == null ? void 0 : a.closest(...v)\n }, K = () => X == null ? void 0 : X.option(\"disabled\", !0), oe = () => X == null ? void 0 : X.option(\"disabled\", !1);\n return no(() => {\n l && B();\n }), to(X.destroy), fe({ start: B, pause: K, resume: oe }, X);\n}\nconst ft = [\n \"update\",\n \"start\",\n \"add\",\n \"remove\",\n \"choose\",\n \"unchoose\",\n \"end\",\n \"sort\",\n \"filter\",\n \"clone\",\n \"move\",\n \"change\"\n], ro = [\n \"clone\",\n \"animation\",\n \"ghostClass\",\n \"group\",\n \"sort\",\n \"disabled\",\n \"store\",\n \"handle\",\n \"draggable\",\n \"swapThreshold\",\n \"invertSwap\",\n \"invertedSwapThreshold\",\n \"removeCloneOnHide\",\n \"direction\",\n \"chosenClass\",\n \"dragClass\",\n \"ignore\",\n \"filter\",\n \"preventOnFilter\",\n \"easing\",\n \"setData\",\n \"dropBubble\",\n \"dragoverBubble\",\n \"dataIdAttr\",\n \"delay\",\n \"delayOnTouchOnly\",\n \"touchStartThreshold\",\n \"forceFallback\",\n \"fallbackClass\",\n \"fallbackOnBody\",\n \"fallbackTolerance\",\n \"fallbackOffset\",\n \"supportPointer\",\n \"emptyInsertThreshold\",\n \"scroll\",\n \"forceAutoScrollFallback\",\n \"scrollSensitivity\",\n \"scrollSpeed\",\n \"bubbleScroll\",\n \"modelValue\",\n \"tag\",\n \"target\",\n \"customUpdate\",\n ...ft.map((t) => `on${t.replace(/^\\S/, (e) => e.toUpperCase())}`)\n], lo = cn({\n name: \"VueDraggable\",\n model: {\n prop: \"modelValue\",\n event: \"update:modelValue\"\n },\n props: ro,\n emits: [\"update:modelValue\", ...ft],\n setup(t, { slots: e, emit: n, expose: o, attrs: r }) {\n const i = ft.reduce((d, f) => {\n const m = `on${f.replace(/^\\S/, (y) => y.toUpperCase())}`;\n return d[m] = (...y) => n(f, ...y), d;\n }, {}), a = Et(() => {\n const y = fn(t), { modelValue: d } = y, f = $e(y, [\"modelValue\"]), m = Object.entries(f).reduce((b, [w, L]) => {\n const G = U(L);\n return G !== void 0 && (b[w] = G), b;\n }, {});\n return fe(fe({}, i), yn(fe(fe({}, r), m)));\n }), l = Et({\n get: () => t.modelValue,\n set: (d) => n(\"update:modelValue\", d)\n }), s = dn(), u = hn(\n on(t.target || s, l, a)\n );\n return o(u), () => {\n var d;\n return pn(t.tag || \"div\", { ref: s }, (d = e == null ? void 0 : e.default) == null ? void 0 : d.call(e, u));\n };\n }\n}), Bt = {\n mounted: \"mounted\",\n unmounted: \"unmounted\"\n}, at = /* @__PURE__ */ new WeakMap(), so = {\n [Bt.mounted](t, e) {\n const n = gn(e.value) ? [e.value] : e.value, [o, r] = n, i = on(t, o, r);\n at.set(t, i.destroy);\n },\n [Bt.unmounted](t) {\n var e;\n (e = at.get(t)) == null || e(), at.delete(t);\n }\n};\nexport {\n lo as VueDraggable,\n on as useDraggable,\n so as vDraggable\n};\n","<template>\n <div class=\"designer-drop-indicator\" :class=\"`is-${placement.toLowerCase()}`\" aria-hidden=\"true\">\n <span>放置到这里</span>\n </div>\n</template>\n\n<script setup lang=\"ts\">\ndefineOptions({ name: 'DesignerDropIndicator' })\n\ndefineProps<{ placement: 'BEFORE' | 'AFTER' }>()\n</script>\n\n<style scoped>\n.designer-drop-indicator {\n position: absolute;\n z-index: 8;\n right: 0;\n left: 0;\n height: 2px;\n pointer-events: none;\n color: var(--el-color-primary);\n background: var(--el-color-primary);\n}\n\n.designer-drop-indicator::before {\n position: absolute;\n top: 50%;\n left: -4px;\n width: 8px;\n height: 8px;\n content: '';\n background: var(--el-color-primary);\n border-radius: 50%;\n transform: translateY(-50%);\n}\n\n.designer-drop-indicator.is-before {\n top: -5px;\n}\n\n.designer-drop-indicator.is-after {\n bottom: -5px;\n}\n\n.designer-drop-indicator span {\n position: absolute;\n top: 50%;\n left: 50%;\n padding: 0 var(--daxiang-form-space-1);\n background: var(--el-bg-color);\n font-size: 11px;\n line-height: 18px;\n transform: translate(-50%, -50%);\n white-space: nowrap;\n}\n</style>\n","<template>\n <div\n class=\"designer-drop-zone\"\n :class=\"{ 'is-active': active, 'is-over': over }\"\n @dragenter.prevent=\"handleDragEnter\"\n @dragover.prevent=\"allowDrop\"\n @dragleave=\"over = false\"\n @drop.prevent.stop=\"handleDrop\"\n >\n <span>{{ label }}</span>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\ndefineOptions({ name: 'DesignerDropZone' })\n\nwithDefaults(defineProps<{ active: boolean; label?: string }>(), { label: '放置到这里' })\nconst emit = defineEmits<{ drop: [payload: string] }>()\nconst over = ref(false)\n\nfunction allowDrop(event: DragEvent): void {\n if (!acceptsPaletteComponent(event)) return\n if (event.dataTransfer) event.dataTransfer.dropEffect = 'copy'\n}\n\nfunction handleDrop(event: DragEvent): void {\n over.value = false\n const componentType = event.dataTransfer?.getData('application/x-daxiang-form-component') ?? ''\n if (componentType) emit('drop', `component:${componentType}`)\n}\n\nfunction handleDragEnter(event: DragEvent): void {\n if (acceptsPaletteComponent(event)) over.value = true\n}\n\nfunction acceptsPaletteComponent(event: DragEvent): boolean {\n return Array.from(event.dataTransfer?.types ?? []).includes(\n 'application/x-daxiang-form-component',\n )\n}\n</script>\n\n<style scoped>\n.designer-drop-zone {\n display: flex;\n width: 100%;\n min-height: 88px;\n align-items: center;\n justify-content: center;\n color: var(--el-text-color-placeholder);\n background: color-mix(in srgb, var(--el-fill-color-light) 64%, transparent);\n border: 1px dashed var(--el-border-color);\n pointer-events: none;\n transition:\n color var(--el-transition-duration-fast),\n background-color var(--el-transition-duration-fast),\n border-color var(--el-transition-duration-fast);\n}\n\n.designer-drop-zone span {\n font-size: 12px;\n}\n\n.designer-drop-zone.is-active {\n color: var(--el-color-primary);\n border-color: var(--el-color-primary-light-5);\n pointer-events: auto;\n}\n\n.designer-drop-zone.is-over {\n background: var(--el-color-primary-light-9);\n border-color: var(--el-color-primary);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .designer-drop-zone {\n transition: none;\n }\n}\n</style>\n","<template>\n <div\n class=\"designer-grid-drop-cell\"\n :class=\"{ 'is-active': active, 'is-over': over }\"\n :style=\"gridStyle\"\n @dragenter.prevent=\"handleDragEnter\"\n @dragover.prevent=\"allowDrop\"\n @dragleave=\"over = false\"\n @drop.prevent.stop=\"handleDrop\"\n >\n <span><DxSvgIcon icon=\"ri:add-line\" />放置到此列</span>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport DxSvgIcon from '../infrastructure/FormIcon.vue'\nimport type { DesignerCanvasGap, DesignerDropTarget } from '@daxiangme/form-core'\n\ndefineOptions({ name: 'DesignerGridDropCell' })\n\nconst props = defineProps<{\n gap: DesignerCanvasGap\n active: boolean\n target: Omit<DesignerDropTarget, 'columnStart' | 'index'>\n}>()\nconst emit = defineEmits<{ drop: [payload: string, target: DesignerDropTarget] }>()\nconst over = ref(false)\nconst gridStyle = computed(() => ({\n gridColumn: `${props.gap.start + 1} / span ${props.gap.span}`,\n gridRow: `${props.gap.row + 1}`,\n}))\n\nfunction handleDragEnter(event: DragEvent): void {\n if (!acceptsPaletteComponent(event)) return\n over.value = true\n}\n\nfunction allowDrop(event: DragEvent): void {\n if (!acceptsPaletteComponent(event)) return\n if (event.dataTransfer) event.dataTransfer.dropEffect = 'copy'\n}\n\nfunction handleDrop(event: DragEvent): void {\n over.value = false\n const componentType = event.dataTransfer?.getData('application/x-daxiang-form-component') ?? ''\n if (!componentType) return\n emit('drop', `component:${componentType}`, {\n ...props.target,\n index: props.gap.index,\n placement: 'GRID',\n columnStart: props.gap.start,\n })\n}\n\nfunction acceptsPaletteComponent(event: DragEvent): boolean {\n return (\n props.active &&\n Array.from(event.dataTransfer?.types ?? []).includes('application/x-daxiang-form-component')\n )\n}\n</script>\n\n<style scoped>\n.designer-grid-drop-cell {\n z-index: 4;\n display: none;\n min-height: 44px;\n align-items: center;\n justify-content: center;\n pointer-events: none;\n color: var(--el-color-primary);\n background: color-mix(in srgb, var(--el-color-primary) 4%, transparent);\n outline: 1px dashed var(--el-color-primary-light-5);\n outline-offset: -3px;\n font-size: 11px;\n}\n\n.designer-grid-drop-cell.is-active {\n display: flex;\n pointer-events: auto;\n}\n\n.designer-grid-drop-cell.is-over {\n background: var(--el-color-primary-light-9);\n outline-color: var(--el-color-primary);\n}\n\n.designer-grid-drop-cell span {\n display: inline-flex;\n align-items: center;\n gap: var(--daxiang-form-space-1);\n}\n</style>\n","<template>\n <article\n class=\"designer-node-frame\"\n :class=\"[\n { 'is-selected': selected, 'is-label-hidden': !showLabel },\n `is-label-${resolvedLabelPosition.toLowerCase()}`,\n ]\"\n :style=\"frameStyle\"\n @click.stop=\"emit('select')\"\n @dragenter.prevent=\"handleDragEnter\"\n @dragover.prevent=\"handleDragOver\"\n @dragleave=\"handleDragLeave\"\n @drop.prevent.stop=\"handleDrop\"\n >\n <button\n class=\"designer-node-frame__handle designer-node-drag-handle\"\n type=\"button\"\n aria-label=\"拖动字段\"\n >\n <DxSvgIcon icon=\"ri:draggable\" />\n </button>\n\n <div class=\"designer-node-frame__content\">\n <div v-if=\"showLabel\" class=\"designer-node-frame__label\">\n <span v-if=\"required\" aria-hidden=\"true\">*</span>{{ label }}\n </div>\n <div class=\"designer-node-frame__control\">\n <slot />\n </div>\n </div>\n\n <div class=\"designer-node-frame__actions\">\n <small>{{ componentName }}</small>\n <button type=\"button\" aria-label=\"复制字段\" @click.stop=\"emit('duplicate')\">\n <DxSvgIcon icon=\"ri:file-copy-line\" />\n </button>\n <button type=\"button\" aria-label=\"从布局移除字段\" @click.stop=\"emit('remove')\">\n <DxSvgIcon icon=\"ri:delete-bin-line\" />\n </button>\n </div>\n\n <DesignerDropIndicator v-if=\"dropPlacement\" :placement=\"dropPlacement\" />\n </article>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport DxSvgIcon from '../infrastructure/FormIcon.vue'\nimport type { DesignerDropTarget } from '@daxiangme/form-core'\nimport DesignerDropIndicator from './DesignerDropIndicator.vue'\n\ndefineOptions({ name: 'DesignerNodeFrame' })\n\nconst props = defineProps<{\n label: string\n componentName: string\n selected: boolean\n required: boolean\n showLabel: boolean\n labelPosition: 'INHERIT' | 'TOP' | 'LEFT' | 'RIGHT'\n formLabelPosition: 'TOP' | 'LEFT' | 'RIGHT'\n labelWidth: number\n paletteDragActive: boolean\n dropTarget: DesignerDropTarget\n}>()\nconst emit = defineEmits<{\n select: []\n duplicate: []\n remove: []\n drop: [payload: string, target: DesignerDropTarget]\n}>()\nconst dropPlacement = ref<'BEFORE' | 'AFTER' | ''>('')\nconst resolvedLabelPosition = computed(() =>\n props.labelPosition === 'INHERIT' ? props.formLabelPosition : props.labelPosition,\n)\nconst frameStyle = computed(() => ({ '--designer-label-width': `${props.labelWidth}px` }))\n\nfunction handleDragEnter(event: DragEvent): void {\n if (!acceptsPaletteComponent(event)) return\n updateDropPlacement(event)\n}\n\nfunction handleDragOver(event: DragEvent): void {\n if (!acceptsPaletteComponent(event)) return\n if (event.dataTransfer) event.dataTransfer.dropEffect = 'copy'\n updateDropPlacement(event)\n}\n\nfunction handleDragLeave(event: DragEvent): void {\n const current = event.currentTarget as HTMLElement | null\n const related = event.relatedTarget as Node | null\n if (current && related && current.contains(related)) return\n dropPlacement.value = ''\n}\n\nfunction handleDrop(event: DragEvent): void {\n const componentType = event.dataTransfer?.getData('application/x-daxiang-form-component') ?? ''\n if (!componentType || !dropPlacement.value) return\n const placement = dropPlacement.value\n dropPlacement.value = ''\n emit('drop', `component:${componentType}`, {\n ...props.dropTarget,\n index: props.dropTarget.index + (placement === 'AFTER' ? 1 : 0),\n placement,\n })\n}\n\nfunction acceptsPaletteComponent(event: DragEvent): boolean {\n return (\n props.paletteDragActive &&\n Array.from(event.dataTransfer?.types ?? []).includes('application/x-daxiang-form-component')\n )\n}\n\nfunction updateDropPlacement(event: DragEvent): void {\n const element = event.currentTarget as HTMLElement\n const bounds = element.getBoundingClientRect()\n dropPlacement.value = event.clientY < bounds.top + bounds.height / 2 ? 'BEFORE' : 'AFTER'\n}\n</script>\n\n<style scoped>\n.designer-node-frame {\n position: relative;\n min-width: 0;\n min-height: 44px;\n background: var(--el-bg-color);\n border: 1px solid transparent;\n transition:\n border-color var(--el-transition-duration-fast),\n background-color var(--el-transition-duration-fast);\n}\n\n.designer-node-frame:hover {\n border-color: var(--el-color-primary-light-7);\n}\n\n.designer-node-frame.is-selected {\n border-color: var(--el-color-primary);\n}\n\n.designer-node-frame__handle {\n position: absolute;\n z-index: 5;\n top: 50%;\n left: 3px;\n display: flex;\n width: 16px;\n height: 26px;\n align-items: center;\n justify-content: center;\n color: var(--el-color-white);\n background: var(--el-color-primary);\n border: 0;\n border-radius: 3px;\n cursor: grab;\n opacity: 0;\n transform: translateY(-50%);\n transition:\n opacity var(--el-transition-duration-fast),\n background-color var(--el-transition-duration-fast);\n}\n\n.designer-node-frame__handle :deep(svg) {\n width: 12px;\n height: 12px;\n}\n\n.designer-node-frame:hover > .designer-node-frame__handle,\n.designer-node-frame.is-selected > .designer-node-frame__handle {\n opacity: 1;\n}\n\n.designer-node-frame__content {\n display: grid;\n min-width: 0;\n min-height: 42px;\n align-items: center;\n grid-template-columns: minmax(72px, var(--designer-label-width)) minmax(0, 1fr);\n}\n\n.designer-node-frame.is-label-top .designer-node-frame__content {\n padding: var(--daxiang-form-space-2);\n grid-template-columns: minmax(0, 1fr);\n gap: var(--daxiang-form-space-1);\n}\n\n.designer-node-frame.is-label-hidden .designer-node-frame__content {\n grid-template-columns: minmax(0, 1fr);\n}\n\n.designer-node-frame__label {\n align-self: stretch;\n display: flex;\n min-width: 0;\n align-items: center;\n padding: var(--daxiang-form-space-2);\n color: var(--el-text-color-primary);\n background: var(--el-fill-color-extra-light);\n font-size: 13px;\n}\n\n.designer-node-frame.is-label-right .designer-node-frame__label {\n justify-content: flex-end;\n order: 2;\n text-align: right;\n}\n\n.designer-node-frame.is-label-top .designer-node-frame__label {\n padding: 0;\n background: transparent;\n}\n\n.designer-node-frame__label span {\n margin-right: 3px;\n color: var(--el-color-danger);\n}\n\n.designer-node-frame__control {\n min-width: 0;\n padding: var(--daxiang-form-space-1) var(--daxiang-form-space-2);\n pointer-events: none;\n user-select: none;\n}\n\n.designer-node-frame.is-label-top .designer-node-frame__control {\n padding: 0;\n}\n\n.designer-node-frame__actions {\n position: absolute;\n z-index: 5;\n right: 3px;\n bottom: 3px;\n display: flex;\n height: 22px;\n align-items: center;\n color: var(--el-color-white);\n background: var(--el-color-primary);\n border-radius: 3px;\n opacity: 0;\n transition: opacity var(--el-transition-duration-fast);\n}\n\n.designer-node-frame:hover > .designer-node-frame__actions,\n.designer-node-frame.is-selected > .designer-node-frame__actions {\n opacity: 1;\n}\n\n.designer-node-frame__actions small {\n padding: 0 5px;\n font-size: 10px;\n}\n\n.designer-node-frame__actions button {\n display: inline-flex;\n width: 22px;\n height: 22px;\n align-items: center;\n justify-content: center;\n padding: 0;\n color: inherit;\n background: transparent;\n border: 0;\n cursor: pointer;\n}\n\n.designer-node-frame__actions button :deep(svg) {\n width: 13px;\n height: 13px;\n}\n\n.designer-node-frame__actions button:hover {\n background: color-mix(in srgb, var(--el-color-white) 16%, transparent);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .designer-node-frame,\n .designer-node-frame__handle,\n .designer-node-frame__actions {\n transition: none;\n }\n}\n</style>\n","<template>\n <section class=\"designer-tabs-frame\" :class=\"`is-${type || 'line'}`\">\n <div class=\"designer-tabs-frame__nav\" role=\"tablist\" aria-label=\"布局页签\">\n <button\n v-for=\"(item, index) in items\"\n :id=\"tabId(index)\"\n :key=\"item.id\"\n class=\"designer-tabs-frame__tab\"\n :class=\"{ 'is-active': item.slotCode === modelValue }\"\n type=\"button\"\n role=\"tab\"\n :aria-controls=\"panelId\"\n :aria-selected=\"item.slotCode === modelValue\"\n :tabindex=\"item.slotCode === modelValue ? 0 : -1\"\n @click.stop=\"selectSlot(item.slotCode)\"\n @keydown.left.prevent=\"selectRelative(index, -1)\"\n @keydown.right.prevent=\"selectRelative(index, 1)\"\n @keydown.home.prevent=\"selectRelative(0, 0)\"\n @keydown.end.prevent=\"selectRelative(items.length - 1, 0)\"\n >\n {{ item.label }}\n </button>\n </div>\n\n <div\n v-if=\"activeItem\"\n :id=\"panelId\"\n class=\"designer-tabs-frame__content\"\n role=\"tabpanel\"\n :aria-labelledby=\"tabId(activeIndex)\"\n >\n <slot :item=\"activeItem\" />\n </div>\n <div v-else class=\"designer-tabs-frame__empty\">暂无页签</div>\n </section>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, useId } from 'vue'\nimport type { DesignerLayoutSlot } from '@daxiangme/form-core'\n\ndefineOptions({ name: 'DesignerTabsFrame' })\n\nconst props = defineProps<{\n modelValue: string\n items: DesignerLayoutSlot[]\n type?: 'card' | 'border-card'\n}>()\n\nconst emit = defineEmits<{\n 'update:modelValue': [slotCode: string]\n}>()\n\nconst frameId = useId()\nconst activeIndex = computed(() =>\n props.items.findIndex((item) => item.slotCode === props.modelValue),\n)\nconst activeItem = computed(() => props.items[activeIndex.value])\nconst panelId = `${frameId}-panel`\n\nfunction tabId(index: number): string {\n return `${frameId}-tab-${index}`\n}\n\nfunction selectSlot(slotCode: string): void {\n if (slotCode !== props.modelValue) emit('update:modelValue', slotCode)\n}\n\nfunction selectRelative(currentIndex: number, offset: number): void {\n if (props.items.length === 0) return\n const nextIndex = Math.min(props.items.length - 1, Math.max(0, currentIndex + offset))\n selectSlot(props.items[nextIndex]?.slotCode ?? '')\n}\n</script>\n\n<style scoped>\n.designer-tabs-frame {\n min-width: 0;\n padding: var(--daxiang-form-space-2);\n}\n\n.designer-tabs-frame__nav {\n display: flex;\n min-width: 0;\n align-items: end;\n overflow-x: auto;\n border-bottom: 1px solid var(--el-border-color-light);\n}\n\n.designer-tabs-frame__tab {\n position: relative;\n flex: 0 0 auto;\n min-height: 34px;\n padding: 0 var(--daxiang-form-space-3);\n color: var(--el-text-color-regular);\n background: transparent;\n border: 0;\n cursor: pointer;\n font: inherit;\n transition:\n color var(--el-transition-duration-fast),\n background-color var(--el-transition-duration-fast);\n}\n\n.designer-tabs-frame__tab:hover,\n.designer-tabs-frame__tab:focus-visible {\n color: var(--el-color-primary);\n background: var(--el-color-primary-light-9);\n outline: none;\n}\n\n.designer-tabs-frame__tab.is-active {\n color: var(--el-color-primary);\n font-weight: 500;\n}\n\n.designer-tabs-frame__tab.is-active::after {\n position: absolute;\n right: var(--daxiang-form-space-2);\n bottom: -1px;\n left: var(--daxiang-form-space-2);\n height: 2px;\n background: var(--el-color-primary);\n content: '';\n}\n\n.designer-tabs-frame.is-card .designer-tabs-frame__tab,\n.designer-tabs-frame.is-border-card .designer-tabs-frame__tab {\n border: 1px solid transparent;\n border-bottom: 0;\n}\n\n.designer-tabs-frame.is-card .designer-tabs-frame__tab.is-active,\n.designer-tabs-frame.is-border-card .designer-tabs-frame__tab.is-active {\n background: var(--el-bg-color);\n border-color: var(--el-border-color-light);\n}\n\n.designer-tabs-frame.is-card .designer-tabs-frame__tab.is-active::after,\n.designer-tabs-frame.is-border-card .designer-tabs-frame__tab.is-active::after {\n display: none;\n}\n\n.designer-tabs-frame.is-border-card .designer-tabs-frame__content {\n padding: var(--daxiang-form-space-2);\n border: 1px solid var(--el-border-color-light);\n border-top: 0;\n}\n\n.designer-tabs-frame__content {\n min-width: 0;\n padding-top: var(--daxiang-form-space-2);\n}\n\n.designer-tabs-frame__empty {\n min-height: 44px;\n padding: var(--daxiang-form-space-3);\n color: var(--el-text-color-secondary);\n text-align: center;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .designer-tabs-frame__tab {\n transition: none;\n }\n}\n</style>\n","<template>\n <div\n v-if=\"node.nodeType === 'FIELD' && field\"\n class=\"designer-canvas-node designer-canvas-node--field\"\n :class=\"{ 'is-table-cell': tableCell }\"\n :data-designer-node-id=\"node.id\"\n :data-designer-node-label=\"field.label\"\n :data-designer-index=\"itemIndex\"\n :style=\"nodeGridStyle\"\n >\n <DesignerNodeFrame\n :label=\"field.label\"\n :component-name=\"componentName\"\n :selected=\"selectedNodeId === node.id\"\n :required=\"field.required\"\n :show-label=\"tableCell ? false : grid.showLabel\"\n :label-position=\"grid.labelPosition\"\n :form-label-position=\"formLabelPosition\"\n :label-width=\"formLabelWidth\"\n :palette-drag-active=\"paletteDragActive\"\n :drop-target=\"dropTarget\"\n @select=\"emit('select', node.id)\"\n @duplicate=\"emit('duplicate', node.id)\"\n @remove=\"emit('remove', node.id)\"\n @drop=\"forwardDrop\"\n >\n <DesignerStaticControl :model-value=\"field.defaultValue\" :field=\"field\" mode=\"DESIGN\" />\n <small v-if=\"field.helpText && !tableCell\" class=\"designer-canvas-node__help\">\n {{ field.helpText }}\n </small>\n </DesignerNodeFrame>\n </div>\n\n <section\n v-else-if=\"node.nodeType === 'CONTAINER'\"\n class=\"designer-canvas-node designer-canvas-node--container\"\n :class=\"[\n { 'is-selected': selectedNodeId === node.id, 'is-structural': registration?.acceptsChildren },\n `is-${node.componentType}`,\n ...containerAppearanceClasses,\n ]\"\n :data-designer-node-id=\"node.id\"\n :data-designer-node-label=\"textConfiguration('title') || componentName\"\n :data-designer-index=\"itemIndex\"\n :style=\"nodeGridStyle\"\n @click.stop=\"emit('select', node.id)\"\n @dragenter.prevent=\"handleContainerDragEnter\"\n @dragover.prevent=\"handleContainerDragOver\"\n @dragleave=\"handleContainerDragLeave\"\n @drop.prevent.stop=\"handleContainerDrop\"\n >\n <DesignerDropIndicator v-if=\"containerDropPlacement\" :placement=\"containerDropPlacement\" />\n\n <header class=\"designer-canvas-node__chrome\">\n <button\n class=\"designer-canvas-node__handle designer-node-drag-handle\"\n type=\"button\"\n aria-label=\"拖动组件\"\n >\n <DxSvgIcon icon=\"ri:draggable\" />\n </button>\n <DxSvgIcon :icon=\"registration?.icon ?? 'ri:error-warning-line'\" />\n <strong>{{ textConfiguration('title') || componentName }}</strong>\n <small v-if=\"registration?.acceptsChildren\">{{ childCount }} 项</small>\n <span />\n <button type=\"button\" aria-label=\"复制组件\" @click.stop=\"emit('duplicate', node.id)\">\n <DxSvgIcon icon=\"ri:file-copy-line\" />\n </button>\n <button type=\"button\" aria-label=\"移除组件\" @click.stop=\"emit('remove', node.id)\">\n <DxSvgIcon icon=\"ri:delete-bin-line\" />\n </button>\n </header>\n\n <component :is=\"`h${headingLevel}`\" v-if=\"node.componentType === 'title'\" :style=\"headingStyle\">\n {{ textConfiguration('text') || '标题' }}\n </component>\n <ElDivider\n v-else-if=\"node.componentType === 'divider'\"\n :content-position=\"dividerPosition\"\n :border-style=\"dividerBorderStyle\"\n >\n {{ textConfiguration('text') }}\n </ElDivider>\n <ElAlert\n v-else-if=\"node.componentType === 'alert'\"\n :title=\"textConfiguration('title') || '提示内容'\"\n :type=\"alertType\"\n :effect=\"textConfiguration('effect') === 'dark' ? 'dark' : 'light'\"\n :show-icon=\"booleanConfiguration('showIcon')\"\n :closable=\"false\"\n />\n <div\n v-else-if=\"node.componentType === 'button'\"\n class=\"designer-canvas-node__button\"\n :class=\"`is-${buttonAlign}`\"\n >\n <ElButton\n :type=\"buttonType\"\n :plain=\"booleanConfiguration('plain')\"\n :round=\"booleanConfiguration('round')\"\n disabled\n >\n {{ textConfiguration('text') || '按钮' }}\n </ElButton>\n </div>\n <ElAlert\n v-else-if=\"node.componentType === 'captcha'\"\n type=\"warning\"\n :closable=\"false\"\n show-icon\n title=\"当前部署未配置短信或邮箱验证码渠道\"\n />\n <ElAlert\n v-else-if=\"node.componentType === 'iframe'\"\n type=\"info\"\n :closable=\"false\"\n show-icon\n :title=\"textConfiguration('title') || '外部页面'\"\n description=\"静态 Core 不加载任意外部 URL\"\n />\n\n <DesignerTabsFrame\n v-else-if=\"node.componentType === 'tabs'\"\n v-model=\"activeSlot\"\n class=\"designer-canvas-node__tabs\"\n :items=\"node.slots\"\n :type=\"tabsType\"\n >\n <template #default=\"{ item: slot }\">\n <DesignerDropZone\n v-if=\"slot.children.length === 0\"\n :active=\"paletteDragActive\"\n @drop=\"forwardDrop($event, slotDropTarget(slot.slotCode, 0))\"\n />\n <VueDraggable\n v-else\n class=\"designer-canvas-node__slot-list\"\n :model-value=\"slot.children\"\n :group=\"sortableGroup\"\n :animation=\"120\"\n :disabled=\"device === 'mobile'\"\n :on-move=\"canSortMove\"\n draggable=\".designer-canvas-node\"\n handle=\".designer-node-drag-handle\"\n ghost-class=\"designer-canvas-node--ghost\"\n chosen-class=\"designer-canvas-node--chosen\"\n drag-class=\"designer-canvas-node--dragging\"\n :data-container-id=\"node.id\"\n :data-slot-code=\"slot.slotCode\"\n @update:model-value=\"updateSlotChildren(slot.slotCode, $event)\"\n @start=\"emit('drag-start', $event)\"\n @end=\"emit('drag-end')\"\n >\n <DesignerGridDropCell\n v-for=\"gap in slotProjection(slot.slotCode).gaps\"\n :key=\"`${slot.id}-gap-${gap.row}-${gap.start}-${gap.index}`\"\n :gap=\"gap\"\n :active=\"paletteDragActive && device === 'desktop'\"\n :target=\"{ containerId: node.id, slotCode: slot.slotCode }\"\n @drop=\"forwardDrop\"\n />\n <DesignerCanvasNode\n v-for=\"(child, index) in slot.children\"\n :key=\"child.id\"\n :node=\"child\"\n :item-index=\"index\"\n :fields=\"fields\"\n :selected-node-id=\"selectedNodeId\"\n :device=\"device\"\n :gutter=\"gutter\"\n :appearance=\"appearance\"\n :grid-cell=\"slotCell(slot.slotCode, child.id)\"\n :form-label-position=\"formLabelPosition\"\n :form-label-width=\"formLabelWidth\"\n :palette-drag-active=\"paletteDragActive\"\n :drop-target=\"slotDropTarget(slot.slotCode, index)\"\n :can-sort-move=\"canSortMove\"\n @select=\"emit('select', $event)\"\n @remove=\"emit('remove', $event)\"\n @duplicate=\"emit('duplicate', $event)\"\n @drop=\"forwardDrop\"\n @reorder=\"forwardReorder\"\n @drag-start=\"emit('drag-start', $event)\"\n @drag-end=\"emit('drag-end')\"\n />\n </VueDraggable>\n </template>\n </DesignerTabsFrame>\n\n <div\n v-else-if=\"node.componentType === 'row-subtable'\"\n class=\"designer-canvas-node__subtable is-row\"\n >\n <div class=\"designer-canvas-node__subtable-bar\">\n <span>示例行</span>\n <ElButton disabled><DxSvgIcon icon=\"ri:add-line\" />新增一行</ElButton>\n </div>\n <template v-for=\"slot in node.slots\" :key=\"slot.id\">\n <DesignerDropZone\n v-if=\"slot.children.length === 0\"\n :active=\"paletteDragActive\"\n label=\"拖入字段形成子表列\"\n @drop=\"forwardDrop($event, slotDropTarget(slot.slotCode, 0))\"\n />\n <template v-else>\n <div class=\"designer-canvas-node__table-head\" :style=\"tableColumnsStyle(slot.slotCode)\">\n <span v-for=\"column in subtableColumns(slot.slotCode)\" :key=\"column.columnId\">\n {{ column.label }}\n </span>\n </div>\n <VueDraggable\n class=\"designer-canvas-node__table-row\"\n :style=\"tableColumnsStyle(slot.slotCode)\"\n :model-value=\"slot.children\"\n :group=\"sortableGroup\"\n :animation=\"120\"\n :disabled=\"device === 'mobile'\"\n :on-move=\"canSortMove\"\n draggable=\".designer-canvas-node\"\n handle=\".designer-node-drag-handle\"\n ghost-class=\"designer-canvas-node--ghost\"\n chosen-class=\"designer-canvas-node--chosen\"\n drag-class=\"designer-canvas-node--dragging\"\n :data-container-id=\"node.id\"\n :data-slot-code=\"slot.slotCode\"\n @update:model-value=\"updateSlotChildren(slot.slotCode, $event)\"\n @start=\"emit('drag-start', $event)\"\n @end=\"emit('drag-end')\"\n >\n <DesignerCanvasNode\n v-for=\"(child, index) in slot.children\"\n :key=\"child.id\"\n :node=\"child\"\n :item-index=\"index\"\n :fields=\"fields\"\n :selected-node-id=\"selectedNodeId\"\n :device=\"device\"\n :gutter=\"gutter\"\n :appearance=\"appearance\"\n :grid-cell=\"slotCell(slot.slotCode, child.id)\"\n :form-label-position=\"formLabelPosition\"\n :form-label-width=\"formLabelWidth\"\n :palette-drag-active=\"paletteDragActive\"\n :drop-target=\"slotDropTarget(slot.slotCode, index)\"\n :can-sort-move=\"canSortMove\"\n table-cell\n @select=\"emit('select', $event)\"\n @remove=\"emit('remove', $event)\"\n @duplicate=\"emit('duplicate', $event)\"\n @drop=\"forwardDrop\"\n @reorder=\"forwardReorder\"\n @drag-start=\"emit('drag-start', $event)\"\n @drag-end=\"emit('drag-end')\"\n />\n </VueDraggable>\n </template>\n </template>\n </div>\n\n <div\n v-else-if=\"node.componentType === 'block-subtable' || registration?.acceptsChildren\"\n class=\"designer-canvas-node__container-content\"\n :class=\"{ 'is-block-subtable': node.componentType === 'block-subtable' }\"\n >\n <div v-if=\"node.componentType === 'block-subtable'\" class=\"designer-canvas-node__block-index\">\n # 1 示例数据块\n </div>\n <template v-for=\"slot in node.slots\" :key=\"slot.id\">\n <DesignerDropZone\n v-if=\"slot.children.length === 0\"\n :active=\"paletteDragActive\"\n @drop=\"forwardDrop($event, slotDropTarget(slot.slotCode, 0))\"\n />\n <VueDraggable\n v-else\n class=\"designer-canvas-node__slot-list\"\n :model-value=\"slot.children\"\n :group=\"sortableGroup\"\n :animation=\"120\"\n :disabled=\"device === 'mobile'\"\n :on-move=\"canSortMove\"\n draggable=\".designer-canvas-node\"\n handle=\".designer-node-drag-handle\"\n ghost-class=\"designer-canvas-node--ghost\"\n chosen-class=\"designer-canvas-node--chosen\"\n drag-class=\"designer-canvas-node--dragging\"\n :data-container-id=\"node.id\"\n :data-slot-code=\"slot.slotCode\"\n @update:model-value=\"updateSlotChildren(slot.slotCode, $event)\"\n @start=\"emit('drag-start', $event)\"\n @end=\"emit('drag-end')\"\n >\n <DesignerGridDropCell\n v-for=\"gap in slotProjection(slot.slotCode).gaps\"\n :key=\"`${slot.id}-gap-${gap.row}-${gap.start}-${gap.index}`\"\n :gap=\"gap\"\n :active=\"paletteDragActive && device === 'desktop'\"\n :target=\"{ containerId: node.id, slotCode: slot.slotCode }\"\n @drop=\"forwardDrop\"\n />\n <DesignerCanvasNode\n v-for=\"(child, index) in slot.children\"\n :key=\"child.id\"\n :node=\"child\"\n :item-index=\"index\"\n :fields=\"fields\"\n :selected-node-id=\"selectedNodeId\"\n :device=\"device\"\n :gutter=\"gutter\"\n :appearance=\"appearance\"\n :grid-cell=\"slotCell(slot.slotCode, child.id)\"\n :form-label-position=\"formLabelPosition\"\n :form-label-width=\"formLabelWidth\"\n :palette-drag-active=\"paletteDragActive\"\n :drop-target=\"slotDropTarget(slot.slotCode, index)\"\n :can-sort-move=\"canSortMove\"\n @select=\"emit('select', $event)\"\n @remove=\"emit('remove', $event)\"\n @duplicate=\"emit('duplicate', $event)\"\n @drop=\"forwardDrop\"\n @reorder=\"forwardReorder\"\n @drag-start=\"emit('drag-start', $event)\"\n @drag-end=\"emit('drag-end')\"\n />\n </VueDraggable>\n </template>\n </div>\n </section>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watchEffect } from 'vue'\nimport type { CSSProperties } from 'vue'\nimport { VueDraggable, type SortableEvent } from 'vue-draggable-plus'\nimport DxSvgIcon from '../infrastructure/FormIcon.vue'\nimport { projectDesignerCanvas } from '@daxiangme/form-core'\nimport { findDesignerComponent } from '@daxiangme/form-core'\nimport {\n designerContainerAppearanceClasses,\n resolveDesignerContainerAppearance,\n} from '@daxiangme/form-core'\nimport {\n createDesignerSubtableGridLayout,\n projectDesignerSubtableColumns,\n} from '@daxiangme/form-core'\nimport type {\n DesignerCanvasCell,\n DesignerCanvasProjection,\n DesignerAppearance,\n DesignerDevice,\n DesignerDropTarget,\n DesignerField,\n DesignerLayoutNode,\n DesignerSortableMoveEvent,\n DesignerSubtableColumn,\n} from '@daxiangme/form-core'\nimport DesignerStaticControl from '../rendering/DesignerStaticControl.vue'\nimport DesignerDropIndicator from './DesignerDropIndicator.vue'\nimport DesignerDropZone from './DesignerDropZone.vue'\nimport DesignerGridDropCell from './DesignerGridDropCell.vue'\nimport DesignerNodeFrame from './DesignerNodeFrame.vue'\nimport DesignerTabsFrame from './DesignerTabsFrame.vue'\n\ndefineOptions({ name: 'DesignerCanvasNode' })\n\nconst props = withDefaults(\n defineProps<{\n node: DesignerLayoutNode\n itemIndex: number\n fields: DesignerField[]\n selectedNodeId: string\n device: DesignerDevice\n gutter: number\n appearance: DesignerAppearance\n gridCell: DesignerCanvasCell\n formLabelPosition: 'TOP' | 'LEFT' | 'RIGHT'\n formLabelWidth: number\n paletteDragActive: boolean\n dropTarget: DesignerDropTarget\n canSortMove: (event: DesignerSortableMoveEvent) => boolean\n tableCell?: boolean\n }>(),\n { tableCell: false },\n)\nconst emit = defineEmits<{\n select: [nodeId: string]\n remove: [nodeId: string]\n duplicate: [nodeId: string]\n drop: [payload: string, target: DesignerDropTarget]\n reorder: [containerId: string | null, slotCode: string, nodes: DesignerLayoutNode[]]\n 'drag-start': [event?: SortableEvent]\n 'drag-end': []\n}>()\nconst sortableGroup = { name: 'daxiang-form-designer-canvas', pull: true, put: true }\nconst containerDropPlacement = ref<'BEFORE' | 'AFTER' | ''>('')\nconst field = computed(() => {\n const current = props.node\n return current.nodeType === 'FIELD'\n ? props.fields.find((item) => item.id === current.fieldId)\n : undefined\n})\nconst registration = computed(() =>\n findDesignerComponent(\n props.node.nodeType === 'FIELD' ? (field.value?.componentType ?? '') : props.node.componentType,\n ),\n)\nconst componentName = computed(() => registration.value?.name ?? '未知组件')\nconst grid = computed(() => props.node.layout[props.device === 'mobile' ? 'mobile' : 'pc'])\nconst activeSlot = ref('')\nconst lastActiveSlotIndex = ref(0)\nconst childCount = computed(() =>\n props.node.nodeType === 'CONTAINER'\n ? props.node.slots.reduce((count, slot) => count + slot.children.length, 0)\n : 0,\n)\nconst containerAppearanceClasses = computed(() =>\n props.node.nodeType === 'CONTAINER'\n ? designerContainerAppearanceClasses(\n resolveDesignerContainerAppearance(props.appearance, props.node),\n )\n : [],\n)\nconst headingLevel = computed(() => Math.max(1, Math.min(6, numberConfiguration('level') || 3)))\nconst headingStyle = computed<CSSProperties>(() => ({\n color: textConfiguration('fontColor') || undefined,\n fontSize: numberConfiguration('fontSize') ? `${numberConfiguration('fontSize')}px` : undefined,\n textAlign: normalizedTextAlign(textConfiguration('align')),\n}))\nconst dividerPosition = computed(() => normalizedTextAlign(textConfiguration('position')) ?? 'left')\nconst dividerBorderStyle = computed(() => {\n const value = textConfiguration('borderStyle')\n return ['solid', 'dashed', 'dotted'].includes(value)\n ? (value as 'solid' | 'dashed' | 'dotted')\n : 'solid'\n})\nconst alertType = computed(() => {\n const value = textConfiguration('type')\n return ['success', 'warning', 'info', 'error'].includes(value)\n ? (value as 'success' | 'warning' | 'info' | 'error')\n : 'info'\n})\nconst buttonType = computed(() => {\n const value = textConfiguration('buttonType')\n return ['primary', 'success', 'warning', 'danger', 'info'].includes(value)\n ? (value as 'primary' | 'success' | 'warning' | 'danger' | 'info')\n : 'primary'\n})\nconst buttonAlign = computed(() => normalizedTextAlign(textConfiguration('align')) ?? 'left')\nconst tabsType = computed(() => {\n const value = textConfiguration('tabsType')\n return ['card', 'border-card'].includes(value) ? (value as 'card' | 'border-card') : undefined\n})\nconst nodeGridStyle = computed<CSSProperties>(() =>\n props.tableCell\n ? { gridColumn: 'auto', gridRow: '1' }\n : {\n gridColumn: `${props.gridCell.start + 1} / span ${props.gridCell.span}`,\n gridRow: `${props.gridCell.row + 1}`,\n },\n)\n\nwatchEffect(() => {\n if (props.node.nodeType !== 'CONTAINER' || props.node.componentType !== 'tabs') return\n const currentIndex = props.node.slots.findIndex((slot) => slot.slotCode === activeSlot.value)\n if (currentIndex >= 0) {\n lastActiveSlotIndex.value = currentIndex\n return\n }\n if (props.node.slots.length === 0) {\n activeSlot.value = ''\n lastActiveSlotIndex.value = 0\n return\n }\n const fallbackIndex = Math.min(lastActiveSlotIndex.value, props.node.slots.length - 1)\n activeSlot.value = props.node.slots[fallbackIndex]?.slotCode ?? ''\n})\n\nfunction slotProjection(slotCode: string): DesignerCanvasProjection {\n if (props.node.nodeType !== 'CONTAINER') return { cells: [], gaps: [], rowCount: 1 }\n const slot = props.node.slots.find((item) => item.slotCode === slotCode)\n return projectDesignerCanvas(slot?.children ?? [], props.device)\n}\n\nfunction slotCell(slotCode: string, nodeId: string): DesignerCanvasCell {\n return (\n slotProjection(slotCode).cells.find((cell) => cell.nodeId === nodeId) ?? {\n nodeId,\n index: 0,\n row: 0,\n start: 0,\n span: 24,\n }\n )\n}\n\nfunction slotDropTarget(slotCode: string, index: number): DesignerDropTarget {\n return { containerId: props.node.id, slotCode, index, placement: 'INSIDE' }\n}\n\nfunction updateSlotChildren(slotCode: string, children: DesignerLayoutNode[]): void {\n emit('reorder', props.node.id, slotCode, children)\n}\n\nfunction forwardDrop(payload: string, target: DesignerDropTarget): void {\n emit('drop', payload, target)\n}\n\nfunction forwardReorder(\n containerId: string | null,\n slotCode: string,\n nodes: DesignerLayoutNode[],\n): void {\n emit('reorder', containerId, slotCode, nodes)\n}\n\nfunction handleContainerDragEnter(event: DragEvent): void {\n if (!acceptsPaletteComponent(event)) return\n updateContainerDropPlacement(event)\n}\n\nfunction handleContainerDragOver(event: DragEvent): void {\n if (!acceptsPaletteComponent(event)) return\n if (event.dataTransfer) event.dataTransfer.dropEffect = 'copy'\n updateContainerDropPlacement(event)\n}\n\nfunction handleContainerDragLeave(event: DragEvent): void {\n const current = event.currentTarget as HTMLElement | null\n const related = event.relatedTarget as Node | null\n if (current && related && current.contains(related)) return\n containerDropPlacement.value = ''\n}\n\nfunction handleContainerDrop(event: DragEvent): void {\n const componentType = event.dataTransfer?.getData('application/x-daxiang-form-component') ?? ''\n if (!componentType || !containerDropPlacement.value) return\n const placement = containerDropPlacement.value\n containerDropPlacement.value = ''\n emit('drop', `component:${componentType}`, {\n ...props.dropTarget,\n index: props.dropTarget.index + (placement === 'AFTER' ? 1 : 0),\n placement,\n })\n}\n\nfunction acceptsPaletteComponent(event: DragEvent): boolean {\n return (\n props.paletteDragActive &&\n Array.from(event.dataTransfer?.types ?? []).includes('application/x-daxiang-form-component')\n )\n}\n\nfunction updateContainerDropPlacement(event: DragEvent): void {\n const element = event.currentTarget as HTMLElement\n const bounds = element.getBoundingClientRect()\n containerDropPlacement.value = event.clientY < bounds.top + bounds.height / 2 ? 'BEFORE' : 'AFTER'\n}\n\n/** 返回设计行、表头和运行态共用的子表列投影。 */\nfunction subtableColumns(slotCode: string): DesignerSubtableColumn[] {\n return props.node.nodeType === 'CONTAINER'\n ? projectDesignerSubtableColumns(props.node, props.fields, slotCode, { includeHidden: true })\n : []\n}\n\n/** 将统一子表列投影转换为设计画布使用的网格样式。 */\nfunction tableColumnsStyle(slotCode: string): CSSProperties {\n const layout = createDesignerSubtableGridLayout(subtableColumns(slotCode))\n return { gridTemplateColumns: layout.template, minWidth: layout.minimumWidth }\n}\n\nfunction textConfiguration(key: string): string {\n const value = props.node.nodeType === 'CONTAINER' ? props.node.configuration[key] : undefined\n return typeof value === 'string' ? value : ''\n}\n\nfunction numberConfiguration(key: string): number {\n const value = props.node.nodeType === 'CONTAINER' ? props.node.configuration[key] : undefined\n return typeof value === 'number' ? value : 0\n}\n\nfunction booleanConfiguration(key: string): boolean {\n return props.node.nodeType === 'CONTAINER' && props.node.configuration[key] === true\n}\n\nfunction normalizedTextAlign(value: string): 'left' | 'center' | 'right' | undefined {\n return ['left', 'center', 'right'].includes(value)\n ? (value as 'left' | 'center' | 'right')\n : undefined\n}\n</script>\n\n<style scoped>\n.designer-canvas-node {\n position: relative;\n min-width: 0;\n align-self: start;\n}\n\n.designer-canvas-node__help {\n display: block;\n width: 100%;\n margin-top: var(--daxiang-form-space-1);\n color: var(--el-text-color-secondary);\n font-size: 12px;\n}\n\n.designer-canvas-node__chrome {\n display: grid;\n min-height: 34px;\n align-items: center;\n padding: 0 var(--daxiang-form-space-2);\n color: var(--el-text-color-regular);\n background: color-mix(in srgb, var(--el-fill-color-light) 72%, transparent);\n border-bottom: 1px dashed var(--el-border-color-lighter);\n grid-template-columns: auto auto auto auto 1fr auto auto;\n gap: var(--daxiang-form-space-1);\n font-size: 12px;\n}\n\n.designer-canvas-node__chrome small {\n color: var(--el-text-color-secondary);\n}\n\n.designer-canvas-node__chrome button {\n display: inline-flex;\n padding: var(--daxiang-form-space-1);\n color: inherit;\n background: transparent;\n border: 0;\n cursor: pointer;\n}\n\n.designer-canvas-node__handle {\n cursor: grab !important;\n}\n\n.designer-canvas-node--container {\n border: 1px solid transparent;\n transition: border-color var(--el-transition-duration-fast);\n}\n\n.designer-canvas-node--container:hover,\n.designer-canvas-node--container.is-selected {\n border-color: var(--el-color-primary-light-5);\n}\n\n.designer-canvas-node--container.is-selected {\n box-shadow: inset 0 0 0 1px var(--el-color-primary-light-8);\n}\n\n.designer-canvas-node--container.is-structural {\n border-color: var(--el-border-color-lighter);\n border-style: dashed;\n}\n\n.designer-canvas-node--container.daxiang-form-container-surface.is-surface-none {\n border-color: var(--el-border-color-lighter);\n background: transparent;\n}\n\n.designer-canvas-node--container.daxiang-form-container-surface:not(.is-surface-none) {\n border-radius: var(--daxiang-form-container-radius);\n}\n\n.designer-canvas-node--container.daxiang-form-container-surface.is-surface-bordered {\n background: var(--el-bg-color);\n border-color: var(--el-border-color-lighter);\n border-style: solid;\n}\n\n.designer-canvas-node--container.daxiang-form-container-surface.is-surface-shadow {\n background: var(--el-bg-color);\n border-color: transparent;\n border-style: solid;\n box-shadow: var(--el-box-shadow-light);\n}\n\n.designer-canvas-node--container.daxiang-form-container-surface.is-surface-shadow:hover,\n.designer-canvas-node--container.daxiang-form-container-surface.is-surface-shadow.is-selected {\n border-color: var(--el-color-primary-light-5);\n}\n\n.designer-canvas-node--container.daxiang-form-container-surface.is-surface-shadow.is-selected {\n box-shadow:\n var(--el-box-shadow-light),\n inset 0 0 0 1px var(--el-color-primary-light-8);\n}\n\n.designer-canvas-node--container.daxiang-form-container-surface.is-surface-filled,\n.designer-canvas-node__container-content.is-block-subtable {\n background: var(--el-fill-color-extra-light);\n}\n\n.designer-canvas-node__container-content,\n.designer-canvas-node__subtable {\n min-width: 0;\n padding: var(--daxiang-form-space-2);\n}\n\n.designer-canvas-node__subtable.is-row {\n overflow-x: auto;\n}\n\n.designer-canvas-node__slot-list {\n display: grid;\n min-width: 0;\n min-height: 44px;\n align-content: start;\n grid-template-columns: repeat(24, minmax(0, 1fr));\n grid-auto-rows: minmax(44px, auto);\n gap: var(--designer-row-gap) var(--designer-grid-gutter);\n}\n\n.designer-canvas-node__subtable-bar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding-bottom: var(--daxiang-form-space-2);\n color: var(--el-text-color-secondary);\n font-size: 12px;\n}\n\n.designer-canvas-node__table-head,\n.designer-canvas-node__table-row {\n display: grid;\n min-width: max-content;\n}\n\n.designer-canvas-node__table-head {\n min-height: 34px;\n align-items: center;\n color: var(--el-text-color-secondary);\n background: var(--el-fill-color-light);\n border: 1px solid var(--el-border-color-lighter);\n font-size: 12px;\n}\n\n.designer-canvas-node__table-head span {\n min-width: 0;\n padding: 0 var(--daxiang-form-space-2);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.designer-canvas-node__table-row {\n border-right: 1px solid var(--el-border-color-lighter);\n border-bottom: 1px solid var(--el-border-color-lighter);\n border-left: 1px solid var(--el-border-color-lighter);\n}\n\n.designer-canvas-node__table-row > :deep(.designer-canvas-node) {\n border-right: 1px solid var(--el-border-color-lighter);\n}\n\n.designer-canvas-node__table-row > :deep(.designer-canvas-node:last-child) {\n border-right: 0;\n}\n\n.designer-canvas-node__block-index {\n display: inline-flex;\n min-height: 24px;\n align-items: center;\n margin-bottom: var(--daxiang-form-space-2);\n color: var(--el-color-primary);\n font-size: 12px;\n}\n\n.designer-canvas-node__button.is-center {\n text-align: center;\n}\n\n.designer-canvas-node__button.is-right {\n text-align: right;\n}\n</style>\n","<template>\n <section\n class=\"designer-overlay-canvas-frame\"\n :class=\"`is-${module.kind.toLowerCase()}`\"\n @click.self=\"emit('select-frame')\"\n >\n <article\n class=\"designer-overlay-canvas-frame__panel\"\n :class=\"module.kind === 'DIALOG' ? designerDialogRadiusClass(module.radius) : undefined\"\n :style=\"panelStyle\"\n @click.self=\"emit('select-frame')\"\n >\n <header class=\"designer-overlay-canvas-frame__header\" @click=\"emit('select-frame')\">\n <strong>{{ module.name }}</strong>\n <div aria-hidden=\"true\">\n <span><DxSvgIcon icon=\"ri:fullscreen-line\" /></span>\n <span><DxSvgIcon icon=\"ri:close-line\" /></span>\n </div>\n </header>\n <div class=\"designer-overlay-canvas-frame__content\" @click.self=\"emit('select-frame')\">\n <slot />\n </div>\n <footer class=\"designer-overlay-canvas-frame__footer\" aria-hidden=\"true\">\n <ElButton tabindex=\"-1\">取消</ElButton>\n <ElButton type=\"primary\" tabindex=\"-1\">确认</ElButton>\n </footer>\n </article>\n </section>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport type { CSSProperties } from 'vue'\nimport DxSvgIcon from '../infrastructure/FormIcon.vue'\nimport { designerDialogRadiusClass } from '@daxiangme/form-core'\nimport type { DesignerOverlayModule } from '@daxiangme/form-core'\n\ndefineOptions({ name: 'DesignerOverlayCanvasFrame' })\n\nconst props = defineProps<{ module: DesignerOverlayModule }>()\nconst emit = defineEmits<{ 'select-frame': [] }>()\n\n/**\n * 将持久化模块宽度作为设计外壳的最大宽度。\n *\n * 可用空间不足时外壳占满内容区,空间充足时再按配置上限居中展示,\n * 避免窄画布被固定像素宽度挤出,也避免宽画布仅在单侧留下大块空白。\n */\nconst panelStyle = computed<CSSProperties>(() => ({\n width: '100%',\n maxWidth: `${props.module.width}px`,\n}))\n</script>\n\n<style scoped>\n.designer-overlay-canvas-frame {\n box-sizing: border-box;\n display: flex;\n width: 100%;\n min-height: var(--designer-canvas-min-height, 640px);\n padding: var(--daxiang-form-space-2);\n background: color-mix(in srgb, var(--el-fill-color-light) 72%, transparent);\n}\n\n.designer-overlay-canvas-frame.is-dialog {\n align-items: center;\n justify-content: center;\n}\n\n.designer-overlay-canvas-frame.is-drawer {\n align-items: stretch;\n justify-content: center;\n padding: 0;\n}\n\n.designer-overlay-canvas-frame__panel {\n box-sizing: border-box;\n display: flex;\n max-width: 100%;\n min-height: calc(var(--designer-canvas-min-height, 640px) - 16px);\n min-width: 0;\n flex-direction: column;\n overflow: hidden;\n background: var(--el-bg-color);\n border: 1px solid var(--el-border-color-light);\n box-shadow: var(--el-box-shadow-light);\n}\n\n.is-dialog .designer-overlay-canvas-frame__panel {\n border-radius: var(--el-border-radius-base);\n}\n\n.is-drawer .designer-overlay-canvas-frame__panel {\n min-height: var(--designer-canvas-min-height, 640px);\n border-top: 0;\n border-right: 0;\n border-bottom: 0;\n}\n\n.designer-overlay-canvas-frame__header,\n.designer-overlay-canvas-frame__footer {\n display: flex;\n flex: 0 0 auto;\n align-items: center;\n padding: 0 var(--daxiang-form-space-3);\n background: var(--el-bg-color);\n}\n\n.designer-overlay-canvas-frame__header {\n min-height: 54px;\n justify-content: space-between;\n border-bottom: 1px solid var(--el-border-color-lighter);\n}\n\n.designer-overlay-canvas-frame__header > div {\n display: flex;\n color: var(--el-text-color-secondary);\n gap: var(--daxiang-form-space-3);\n pointer-events: none;\n}\n\n.designer-overlay-canvas-frame__header span {\n display: inline-flex;\n width: 24px;\n height: 24px;\n align-items: center;\n justify-content: center;\n}\n\n.designer-overlay-canvas-frame__content {\n display: flex;\n min-width: 0;\n min-height: 0;\n flex: 1 1 0;\n padding: var(--daxiang-form-space-3);\n overflow: hidden auto;\n overscroll-behavior: contain;\n background: var(--el-bg-color);\n}\n\n.designer-overlay-canvas-frame__footer {\n min-height: 60px;\n justify-content: flex-end;\n border-top: 1px solid var(--el-border-color-lighter);\n gap: var(--daxiang-form-space-2);\n pointer-events: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .designer-overlay-canvas-frame * {\n scroll-behavior: auto !important;\n }\n}\n</style>\n","<template>\n <main\n ref=\"canvasRef\"\n class=\"designer-canvas\"\n :class=\"{\n 'is-grid-visible': gridVisible,\n 'is-adaptive-viewport': !viewportWidth,\n }\"\n @dragenter=\"handleStageDragEnter\"\n @dragover=\"handleStageDragOver\"\n @dragleave=\"handleStageDragLeave\"\n @drop=\"endPaletteDrag\"\n >\n <div ref=\"stageRef\" class=\"designer-canvas__stage\">\n <div class=\"designer-canvas__scene\" :style=\"sceneStyle\">\n <ElForm\n ref=\"surfaceRef\"\n class=\"designer-canvas__surface\"\n :class=\"[\n `is-${device}`,\n `is-align-${document.appearance.labelAlign.toLowerCase()}`,\n designerControlRadiusClass(document.appearance.controlRadius),\n {\n 'is-overlay-module': Boolean(activeModule),\n 'is-adaptive-viewport': !viewportWidth,\n },\n ]\"\n :style=\"surfaceStyle\"\n :label-position=\"elementLabelPosition\"\n :label-width=\"document.appearance.labelWidth\"\n :label-suffix=\"document.appearance.labelSuffix\"\n :size=\"elementSize\"\n >\n <component\n :is=\"activeModule ? DesignerOverlayCanvasFrame : 'div'\"\n class=\"designer-canvas__view-frame\"\n v-bind=\"canvasFrameProps\"\n @select-frame=\"emit('select', '')\"\n >\n <div class=\"designer-canvas__root-editor\" @click.self=\"emit('select', '')\">\n <VueDraggable\n v-if=\"document.uiSchema.root.length > 0\"\n class=\"designer-canvas__node-list\"\n :model-value=\"document.uiSchema.root\"\n :group=\"sortableGroup\"\n :animation=\"120\"\n :disabled=\"device === 'mobile'\"\n :on-move=\"canSortMove\"\n draggable=\".designer-canvas-node\"\n handle=\".designer-node-drag-handle\"\n ghost-class=\"designer-canvas-node--ghost\"\n chosen-class=\"designer-canvas-node--chosen\"\n drag-class=\"designer-canvas-node--dragging\"\n data-container-id=\"\"\n data-slot-code=\"root\"\n @update:model-value=\"updateRootNodes\"\n @start=\"handleNodeDragStart\"\n @end=\"handleNodeDragEnd\"\n >\n <DesignerGridDropCell\n v-for=\"gap in rootProjection.gaps\"\n :key=\"`root-gap-${gap.row}-${gap.start}-${gap.index}`\"\n :gap=\"gap\"\n :active=\"paletteDragActive && device === 'desktop'\"\n :target=\"{ containerId: null, slotCode: 'root' }\"\n @drop=\"handleDrop\"\n />\n <DesignerCanvasNode\n v-for=\"(node, index) in document.uiSchema.root\"\n :key=\"node.id\"\n :node=\"node\"\n :item-index=\"index\"\n :fields=\"document.dataSchema.fields\"\n :selected-node-id=\"selectedNodeId\"\n :device=\"device\"\n :gutter=\"document.appearance.gridGutter\"\n :appearance=\"document.appearance\"\n :grid-cell=\"cellFor(rootProjection, node.id)\"\n :form-label-position=\"formLabelPosition\"\n :form-label-width=\"document.appearance.labelWidth\"\n :palette-drag-active=\"paletteDragActive\"\n :drop-target=\"{ containerId: null, slotCode: 'root', index }\"\n :can-sort-move=\"canSortMove\"\n @select=\"emit('select', $event)\"\n @remove=\"emit('remove', $event)\"\n @duplicate=\"emit('duplicate', $event)\"\n @drop=\"handleDrop\"\n @reorder=\"forwardReorder\"\n @drag-start=\"handleNodeDragStart\"\n @drag-end=\"handleNodeDragEnd\"\n />\n </VueDraggable>\n <DesignerDropZone\n class=\"designer-canvas__tail-drop-zone\"\n :class=\"{ 'is-empty': document.uiSchema.root.length === 0 }\"\n :active=\"paletteDragActive\"\n :label=\"emptyDropLabel\"\n @drop=\"\n handleDrop($event, {\n containerId: null,\n slotCode: 'root',\n index: document.uiSchema.root.length,\n placement: 'INSIDE',\n })\n \"\n />\n </div>\n </component>\n </ElForm>\n </div>\n <div\n v-if=\"dragCandidate.visible\"\n class=\"designer-canvas__drop-candidate\"\n :style=\"dragCandidateStyle\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <span>{{ dragCandidate.label }}</span>\n </div>\n <div\n v-if=\"dragSession.active && !dragSession.accepted\"\n class=\"designer-canvas__drag-rejection\"\n >\n <DxSvgIcon icon=\"ri:error-warning-line\" />{{ dragSession.rejectionReason }}\n </div>\n </div>\n </main>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, reactive, watch, nextTick, onMounted, onBeforeUnmount } from 'vue'\nimport type { CSSProperties } from 'vue'\nimport { VueDraggable, type SortableEvent } from 'vue-draggable-plus'\nimport DxSvgIcon from '../infrastructure/FormIcon.vue'\nimport { projectDesignerCanvas } from '@daxiangme/form-core'\nimport { designerControlRadiusClass } from '@daxiangme/form-core'\nimport { designerNodeDropRejection } from '@daxiangme/form-core'\nimport type {\n DesignerCanvasCell,\n DesignerCanvasProjection,\n DesignerDevice,\n DesignerDocument,\n DesignerDragSession,\n DesignerDropTarget,\n DesignerLayoutNode,\n DesignerOverlayModule,\n DesignerSortableMoveEvent,\n} from '@daxiangme/form-core'\nimport DesignerCanvasNode from './DesignerCanvasNode.vue'\nimport DesignerDropZone from './DesignerDropZone.vue'\nimport DesignerGridDropCell from './DesignerGridDropCell.vue'\nimport DesignerOverlayCanvasFrame from './DesignerOverlayCanvasFrame.vue'\n\ndefineOptions({ name: 'DesignerCanvas' })\n\nconst props = defineProps<{\n document: DesignerDocument\n selectedNodeId: string\n device: DesignerDevice\n viewportWidth?: number\n zoom: number\n gridVisible: boolean\n activeModule?: DesignerOverlayModule\n}>()\nconst emit = defineEmits<{\n 'update:zoom': [zoom: number]\n select: [nodeId: string]\n remove: [nodeId: string]\n duplicate: [nodeId: string]\n drop: [payload: string, target: DesignerDropTarget]\n reorder: [containerId: string | null, slotCode: string, nodes: DesignerLayoutNode[]]\n 'drag-start': []\n 'drag-end': []\n}>()\nconst dragSession = ref<DesignerDragSession>(createEmptyDragSession())\nconst dragCandidate = reactive({ visible: false, left: 0, top: 0, width: 0, label: '' })\nconst canvasRef = ref<HTMLElement>()\nconst stageRef = ref<HTMLElement>()\nconst surfaceRef = ref<{ $el: HTMLElement }>()\nconst stageSize = reactive({ width: 0, height: 0 })\nconst naturalHeight = ref(0)\nconst sortableGroup = { name: 'daxiang-form-designer-canvas', pull: true, put: true }\nconst paletteDragActive = computed(\n () => dragSession.value.active && dragSession.value.source === 'PALETTE',\n)\nconst canvasFrameProps = computed(() => (props.activeModule ? { module: props.activeModule } : {}))\nconst emptyDropLabel = computed(() => {\n if (props.document.uiSchema.root.length > 0) return '拖放到末尾'\n return props.activeModule ? '拖放组件到模块内容区' : '拖放组件到表单内容区'\n})\nconst formLabelPosition = computed(() => props.document.appearance.labelPosition)\nconst elementLabelPosition = computed(() => {\n const position = props.document.appearance.labelPosition.toLowerCase()\n return position as 'top' | 'left' | 'right'\n})\nconst elementSize = computed(() => {\n const size = props.document.appearance.size\n return size === 'SMALL' ? 'small' : size === 'LARGE' ? 'large' : 'default'\n})\nconst rootProjection = computed(() =>\n projectDesignerCanvas(props.document.uiSchema.root, props.device),\n)\nconst naturalWidth = computed(() => {\n if (props.viewportWidth) return props.viewportWidth\n if (props.device === 'mobile') return 390\n return Math.max(320, stageSize.width - 8)\n})\nconst scale = computed(() => props.zoom / 100)\nconst minimumSceneHeight = computed(() => Math.max(480, stageSize.height - 16))\nconst sceneStyle = computed(() => ({\n width: `${naturalWidth.value * scale.value}px`,\n height: `${Math.max(minimumSceneHeight.value, naturalHeight.value * scale.value)}px`,\n}))\nconst surfaceStyle = computed(() => ({\n width: `${naturalWidth.value}px`,\n minHeight: `${minimumSceneHeight.value / Math.max(scale.value, 0.5)}px`,\n transform: `scale(${scale.value})`,\n '--designer-grid-gutter': `${props.document.appearance.gridGutter}px`,\n '--designer-row-gap': `${props.document.appearance.rowGap}px`,\n '--designer-canvas-min-height': `${minimumSceneHeight.value / Math.max(scale.value, 0.5)}px`,\n}))\nconst dragCandidateStyle = computed<CSSProperties>(() => ({\n left: `${dragCandidate.left}px`,\n top: `${dragCandidate.top}px`,\n width: `${dragCandidate.width}px`,\n}))\n\nlet stageResizeObserver: ResizeObserver | undefined\nlet surfaceResizeObserver: ResizeObserver | undefined\n\nonMounted(() => {\n stageResizeObserver = new ResizeObserver(updateStageSize)\n surfaceResizeObserver = new ResizeObserver(updateSurfaceHeight)\n if (stageRef.value) stageResizeObserver.observe(stageRef.value)\n if (surfaceRef.value?.$el) surfaceResizeObserver.observe(surfaceRef.value.$el)\n updateStageSize()\n updateSurfaceHeight()\n})\n\nonBeforeUnmount(() => {\n stageResizeObserver?.disconnect()\n surfaceResizeObserver?.disconnect()\n})\n\nwatch(\n () => props.selectedNodeId,\n async (nodeId) => {\n if (!nodeId) return\n await nextTick()\n const target = canvasRef.value?.querySelector<HTMLElement>(\n `[data-designer-node-id=\"${nodeId}\"]`,\n )\n target?.scrollIntoView({ block: 'nearest', inline: 'nearest' })\n },\n)\n\nwatch(\n () => props.zoom,\n async (nextZoom, previousZoom) => {\n const stage = stageRef.value\n if (!stage || nextZoom === previousZoom) return\n const previousScale = previousZoom / 100\n const horizontalCenter =\n (stage.scrollLeft + stage.clientWidth / 2) / Math.max(1, naturalWidth.value * previousScale)\n const verticalCenter =\n (stage.scrollTop + stage.clientHeight / 2) / Math.max(1, naturalHeight.value * previousScale)\n await nextTick()\n stage.scrollLeft = horizontalCenter * naturalWidth.value * scale.value - stage.clientWidth / 2\n stage.scrollTop = verticalCenter * naturalHeight.value * scale.value - stage.clientHeight / 2\n },\n)\n\nfunction updateStageSize(): void {\n const stage = stageRef.value\n if (!stage) return\n stageSize.width = stage.clientWidth\n stageSize.height = stage.clientHeight\n}\n\nfunction updateSurfaceHeight(): void {\n naturalHeight.value = surfaceRef.value?.$el.offsetHeight ?? 0\n}\n\nfunction updateRootNodes(nodes: DesignerLayoutNode[]): void {\n emit('reorder', null, 'root', nodes)\n}\n\nfunction handleNodeDragStart(event?: SortableEvent): void {\n const sourceNodeId = event?.item.dataset.designerNodeId ?? ''\n dragSession.value = {\n active: true,\n source: 'CANVAS',\n sourceNodeId,\n accepted: true,\n rejectionReason: '',\n }\n emit('drag-start')\n}\n\nfunction handleNodeDragEnd(): void {\n clearDragCandidate()\n dragSession.value = createEmptyDragSession()\n emit('drag-end')\n}\n\nfunction handleStageDragEnter(event: DragEvent): void {\n if (!Array.from(event.dataTransfer?.types ?? []).includes('application/x-daxiang-form-component'))\n return\n dragSession.value = {\n active: true,\n source: 'PALETTE',\n sourceNodeId: '',\n accepted: true,\n rejectionReason: '',\n }\n}\n\nfunction handleStageDragOver(event: DragEvent): void {\n if (!dragSession.value.active) return\n const stage = stageRef.value\n if (!stage) return\n const bounds = stage.getBoundingClientRect()\n const threshold = 52\n if (event.clientY < bounds.top + threshold) stage.scrollTop -= 14\n if (event.clientY > bounds.bottom - threshold) stage.scrollTop += 14\n if (event.clientX < bounds.left + threshold) stage.scrollLeft -= 14\n if (event.clientX > bounds.right - threshold) stage.scrollLeft += 14\n}\n\nfunction handleStageDragLeave(event: DragEvent): void {\n const current = event.currentTarget as HTMLElement | null\n const related = event.relatedTarget as Node | null\n if (!current || (related && current.contains(related))) return\n endPaletteDrag()\n}\n\nfunction endPaletteDrag(): void {\n if (dragSession.value.source === 'PALETTE') {\n clearDragCandidate()\n dragSession.value = createEmptyDragSession()\n }\n}\n\nfunction handleDrop(payload: string, target: DesignerDropTarget): void {\n endPaletteDrag()\n emit('drop', payload, target)\n}\n\nfunction forwardReorder(\n containerId: string | null,\n slotCode: string,\n nodes: DesignerLayoutNode[],\n): void {\n emit('reorder', containerId, slotCode, nodes)\n}\n\nfunction canSortMove(event: DesignerSortableMoveEvent): boolean {\n const nodeId = event.dragged.dataset.designerNodeId ?? ''\n const targetContainerId = event.to.dataset.containerId || null\n const targetIndex = resolveTargetIndex(event)\n const placement =\n event.related === event.to ? 'INSIDE' : event.willInsertAfter ? 'AFTER' : 'BEFORE'\n const target: DesignerDropTarget = {\n containerId: targetContainerId,\n slotCode: event.to.dataset.slotCode ?? 'root',\n index: targetIndex,\n placement,\n }\n const rejectionReason = nodeId\n ? designerNodeDropRejection(props.document, nodeId, target)\n : '拖动节点不存在'\n const accepted = !rejectionReason\n dragSession.value = {\n ...dragSession.value,\n target,\n accepted,\n rejectionReason,\n }\n updateDragCandidate(event, accepted)\n return accepted\n}\n\nfunction resolveTargetIndex(event: DesignerSortableMoveEvent): number {\n if (event.related === event.to) return 0\n const relatedIndex = Number(event.related.dataset.designerIndex)\n if (!Number.isFinite(relatedIndex)) return 0\n return relatedIndex + (event.willInsertAfter ? 1 : 0)\n}\n\nfunction updateDragCandidate(event: DesignerSortableMoveEvent, accepted: boolean): void {\n const stage = stageRef.value\n if (!stage || !accepted) {\n clearDragCandidate()\n return\n }\n const stageBounds = stage.getBoundingClientRect()\n const targetBounds = event.related.getBoundingClientRect()\n const insertAfter = event.related !== event.to && event.willInsertAfter === true\n const targetName = event.related.dataset.designerNodeLabel\n dragCandidate.visible = true\n dragCandidate.left = Math.max(8, targetBounds.left - stageBounds.left + stage.scrollLeft)\n dragCandidate.top =\n (insertAfter ? targetBounds.bottom : targetBounds.top) - stageBounds.top + stage.scrollTop\n dragCandidate.width = Math.max(\n 96,\n Math.min(targetBounds.width, stage.scrollWidth - dragCandidate.left - 8),\n )\n dragCandidate.label = targetName\n ? `插入到「${targetName}」${insertAfter ? '之后' : '之前'}`\n : '放入当前布局区域'\n}\n\nfunction clearDragCandidate(): void {\n dragCandidate.visible = false\n dragCandidate.label = ''\n}\n\nfunction cellFor(projection: DesignerCanvasProjection, nodeId: string): DesignerCanvasCell {\n return (\n projection.cells.find((cell) => cell.nodeId === nodeId) ?? {\n nodeId,\n index: 0,\n row: 0,\n start: 0,\n span: 24,\n }\n )\n}\n\nfunction fitToWidth(): void {\n const availableWidth = Math.max(1, stageSize.width - 16)\n const targetZoom = Math.max(\n 50,\n Math.min(150, Math.floor((availableWidth / naturalWidth.value) * 10) * 10),\n )\n emit('update:zoom', targetZoom)\n}\n\n/** 捕获画布当前相对中心,用于侧栏调宽前后保持观察位置。 */\nfunction captureViewport(): { horizontal: number; vertical: number } {\n const stage = stageRef.value\n if (!stage) return { horizontal: 0.5, vertical: 0 }\n return {\n horizontal: (stage.scrollLeft + stage.clientWidth / 2) / Math.max(1, stage.scrollWidth),\n vertical: (stage.scrollTop + stage.clientHeight / 2) / Math.max(1, stage.scrollHeight),\n }\n}\n\n/** 恢复画布相对中心,不改变节点选择和缩放。 */\nasync function restoreViewport(position: { horizontal: number; vertical: number }): Promise<void> {\n await nextTick()\n const stage = stageRef.value\n if (!stage) return\n stage.scrollLeft = position.horizontal * stage.scrollWidth - stage.clientWidth / 2\n stage.scrollTop = position.vertical * stage.scrollHeight - stage.clientHeight / 2\n}\n\nfunction createEmptyDragSession(): DesignerDragSession {\n return {\n active: false,\n source: null,\n sourceNodeId: '',\n accepted: true,\n rejectionReason: '',\n }\n}\n\ndefineExpose({ fitToWidth, captureViewport, restoreViewport })\n</script>\n\n<style scoped>\n.designer-canvas {\n display: flex;\n min-width: 0;\n min-height: 0;\n flex: 1 1 0;\n overflow: hidden;\n background: var(--el-fill-color-extra-light);\n}\n\n.designer-canvas__stage {\n position: relative;\n min-width: 0;\n min-height: 0;\n flex: 1 1 0;\n padding: var(--daxiang-form-space-2);\n overflow: auto;\n background-color: var(--el-fill-color-extra-light);\n}\n\n.designer-canvas.is-adaptive-viewport .designer-canvas__stage {\n padding: var(--daxiang-form-space-1);\n}\n\n.designer-canvas__drag-rejection {\n position: sticky;\n z-index: 20;\n bottom: var(--daxiang-form-space-2);\n left: 50%;\n display: flex;\n width: max-content;\n max-width: min(520px, calc(100% - 32px));\n align-items: center;\n padding: var(--daxiang-form-space-2) var(--daxiang-form-space-3);\n margin: 0 auto;\n color: var(--el-color-danger);\n background: var(--el-color-danger-light-9);\n border: 1px solid var(--el-color-danger-light-5);\n border-radius: var(--el-border-radius-base);\n gap: var(--daxiang-form-space-1);\n transform: translateY(-100%);\n}\n\n.designer-canvas__drop-candidate {\n position: absolute;\n z-index: 24;\n height: 2px;\n pointer-events: none;\n color: var(--el-color-primary);\n background: var(--el-color-primary);\n box-shadow: 0 0 0 1px color-mix(in srgb, var(--el-color-primary) 20%, transparent);\n}\n\n.designer-canvas__drop-candidate::before,\n.designer-canvas__drop-candidate::after {\n position: absolute;\n top: 50%;\n width: 8px;\n height: 8px;\n content: '';\n background: var(--el-color-primary);\n border: 2px solid var(--el-bg-color);\n border-radius: 50%;\n transform: translateY(-50%);\n}\n\n.designer-canvas__drop-candidate::before {\n left: -4px;\n}\n\n.designer-canvas__drop-candidate::after {\n right: -4px;\n}\n\n.designer-canvas__drop-candidate span {\n position: absolute;\n bottom: 6px;\n left: 50%;\n max-width: calc(100% - 16px);\n padding: var(--daxiang-form-space-1) var(--daxiang-form-space-2);\n overflow: hidden;\n color: var(--el-color-white);\n background: var(--el-color-primary);\n border-radius: var(--el-border-radius-small);\n box-shadow: var(--el-box-shadow-light);\n font-size: 11px;\n line-height: 16px;\n text-overflow: ellipsis;\n transform: translateX(-50%);\n white-space: nowrap;\n}\n\n.designer-canvas.is-grid-visible .designer-canvas__stage {\n background-image: radial-gradient(var(--el-border-color) 1px, transparent 1px);\n background-size: 18px 18px;\n}\n\n.designer-canvas__scene {\n position: relative;\n min-width: 0;\n margin: 0 auto;\n}\n\n.designer-canvas__surface {\n position: absolute;\n top: 0;\n left: 0;\n box-sizing: border-box;\n padding: var(--daxiang-form-space-2);\n background: transparent;\n border: 0;\n transform-origin: top left;\n}\n\n.designer-canvas__surface.is-mobile {\n background: var(--el-bg-color);\n box-shadow: var(--el-box-shadow-light);\n}\n\n.designer-canvas__surface.is-overlay-module,\n.designer-canvas__surface.is-adaptive-viewport {\n padding: 0;\n}\n\n.designer-canvas__surface > div.designer-canvas__view-frame {\n box-sizing: border-box;\n display: flex;\n width: 100%;\n min-height: var(--designer-canvas-min-height);\n flex-direction: column;\n}\n\n.designer-canvas__root-editor {\n display: flex;\n width: 100%;\n min-width: 0;\n min-height: 0;\n flex: 1 1 0;\n flex-direction: column;\n}\n\n.designer-canvas__node-list {\n position: relative;\n display: grid;\n min-height: 0;\n flex: 0 0 auto;\n align-content: start;\n grid-template-columns: repeat(24, minmax(0, 1fr));\n grid-auto-rows: minmax(44px, auto);\n gap: var(--designer-row-gap) var(--designer-grid-gutter);\n}\n\n.designer-canvas__tail-drop-zone {\n min-height: 120px;\n flex: 1 1 120px;\n margin-top: var(--designer-row-gap);\n}\n\n.designer-canvas__tail-drop-zone.is-empty {\n min-height: 100%;\n margin-top: 0;\n}\n\n.designer-canvas__tail-drop-zone:not(.is-empty, .is-active) {\n background: transparent;\n border-color: transparent;\n}\n\n.designer-canvas__tail-drop-zone:not(.is-empty, .is-active) :deep(span) {\n opacity: 0;\n}\n\n.designer-canvas__surface.is-align-left :deep(.designer-node-frame__label) {\n justify-content: flex-start;\n text-align: left;\n}\n\n.designer-canvas__surface.is-align-right :deep(.designer-node-frame__label) {\n justify-content: flex-end;\n text-align: right;\n}\n\n.designer-canvas :deep(.designer-canvas-node--ghost) {\n background: color-mix(in srgb, var(--el-color-primary) 8%, transparent);\n outline: 1px dashed var(--el-color-primary-light-3);\n opacity: 0.22;\n}\n\n.designer-canvas :deep(.designer-canvas-node--chosen) {\n cursor: grabbing;\n}\n\n.designer-canvas :deep(.designer-canvas-node--dragging) {\n box-shadow: var(--el-box-shadow-light);\n opacity: 0.9;\n}\n</style>\n","<template>\n <div class=\"designer-event-step-tree\">\n <article\n v-for=\"step in steps\"\n :key=\"step.id\"\n class=\"designer-event-step-tree__step\"\n :class=\"{ 'is-selected': selectedStepId === step.id }\"\n >\n <button type=\"button\" @click=\"emit('select', step)\">\n <DxSvgIcon\n :icon=\"step.stepType === 'ACTION' ? 'ri:play-circle-line' : 'ri:git-branch-line'\"\n />\n <span>\n <strong>{{ step.name }}</strong>\n <small>{{\n step.stepType === 'ACTION' ? actionLabel(step.actionType) : '条件分支'\n }}</small>\n </span>\n </button>\n <ElButton text type=\"danger\" aria-label=\"删除步骤\" @click=\"removeStep(step.id)\">\n <DxSvgIcon icon=\"ri:delete-bin-line\" />\n </ElButton>\n <div v-if=\"step.stepType === 'CONDITION'\" class=\"designer-event-step-tree__branches\">\n <section v-for=\"branch in step.branches\" :key=\"branch.id\">\n <header><DxSvgIcon icon=\"ri:git-branch-line\" />{{ branch.name }}</header>\n <DesignerEventStepTree\n :steps=\"branch.steps\"\n :selected-step-id=\"selectedStepId\"\n @select=\"emit('select', $event)\"\n @delete=\"emit('delete', $event)\"\n @update:steps=\"updateBranchSteps(step.id, branch.id, $event)\"\n />\n </section>\n <section>\n <header><DxSvgIcon icon=\"ri:corner-down-right-line\" />其他情况</header>\n <DesignerEventStepTree\n :steps=\"step.elseSteps\"\n :selected-step-id=\"selectedStepId\"\n @select=\"emit('select', $event)\"\n @delete=\"emit('delete', $event)\"\n @update:steps=\"updateElseSteps(step.id, $event)\"\n />\n </section>\n </div>\n </article>\n <ElDropdown trigger=\"click\" @command=\"addStep\">\n <ElButton class=\"designer-event-step-tree__add\" text>\n <DxSvgIcon icon=\"ri:add-circle-line\" />添加步骤\n </ElButton>\n <template #dropdown>\n <ElDropdownMenu>\n <ElDropdownItem command=\"ACTION\"\n ><DxSvgIcon icon=\"ri:play-circle-line\" />动作</ElDropdownItem\n >\n <ElDropdownItem command=\"CONDITION\"\n ><DxSvgIcon icon=\"ri:git-branch-line\" />条件</ElDropdownItem\n >\n </ElDropdownMenu>\n </template>\n </ElDropdown>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport DxSvgIcon from '../infrastructure/FormIcon.vue'\nimport type { DesignerEventActionType, DesignerEventStep } from '@daxiangme/form-core'\n\ndefineOptions({ name: 'DesignerEventStepTree' })\n\nconst props = defineProps<{ steps: DesignerEventStep[]; selectedStepId: string }>()\nconst emit = defineEmits<{\n select: [step: DesignerEventStep]\n delete: [stepId: string]\n 'update:steps': [steps: DesignerEventStep[]]\n}>()\n\nfunction addStep(command: string | number | object): void {\n if (command === 'ACTION') {\n const step: DesignerEventStep = {\n id: createId('action'),\n stepType: 'ACTION',\n name: '显示消息',\n actionType: 'MESSAGE',\n configuration: { message: '操作已完成', level: 'SUCCESS' },\n guardFailure: 'SKIP',\n onError: 'STOP',\n }\n emit('update:steps', [...props.steps, step])\n emit('select', step)\n }\n if (command === 'CONDITION') {\n const step: DesignerEventStep = {\n id: createId('condition'),\n stepType: 'CONDITION',\n name: '条件判断',\n branches: [\n {\n id: createId('branch'),\n name: '条件 1',\n condition: { kind: 'LITERAL', value: true },\n steps: [],\n },\n ],\n elseSteps: [],\n }\n emit('update:steps', [...props.steps, step])\n emit('select', step)\n }\n}\n\nfunction removeStep(stepId: string): void {\n emit(\n 'update:steps',\n props.steps.filter((step) => step.id !== stepId),\n )\n emit('delete', stepId)\n}\n\nfunction updateBranchSteps(stepId: string, branchId: string, steps: DesignerEventStep[]): void {\n emit(\n 'update:steps',\n props.steps.map((step) => {\n if (step.id !== stepId || step.stepType !== 'CONDITION') return step\n return {\n ...step,\n branches: step.branches.map((branch) =>\n branch.id === branchId ? { ...branch, steps } : branch,\n ),\n }\n }),\n )\n}\n\nfunction updateElseSteps(stepId: string, steps: DesignerEventStep[]): void {\n emit(\n 'update:steps',\n props.steps.map((step) =>\n step.id === stepId && step.stepType === 'CONDITION' ? { ...step, elseSteps: steps } : step,\n ),\n )\n}\n\nfunction actionLabel(type: DesignerEventActionType): string {\n return {\n SET_FIELD: '设置字段',\n CLEAR_FIELD: '清空字段',\n COPY_FIELD: '复制字段',\n SET_VARIABLE: '设置变量',\n VALIDATE: '验证表单',\n SUBMIT: '提交表单',\n RESET: '重置表单',\n PRINT: '打印',\n MESSAGE: '显示消息',\n OPEN_MODULE: '打开模块',\n CONFIRM_MODULE: '确认模块',\n CANCEL_MODULE: '取消模块',\n NAVIGATE_RESOURCE: '资源导航',\n REFRESH_DATA_SOURCE: '刷新数据源',\n HOST_ACTION: 'Host 动作',\n }[type]\n}\n\nfunction createId(prefix: string): string {\n return `${prefix}-${crypto.randomUUID().replaceAll('-', '')}`\n}\n</script>\n\n<style scoped>\n.designer-event-step-tree {\n display: flex;\n flex-direction: column;\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-event-step-tree__step {\n display: grid;\n overflow: hidden;\n background: var(--el-bg-color);\n border: 1px solid var(--el-border-color-lighter);\n border-radius: var(--el-border-radius-base);\n grid-template-columns: minmax(0, 1fr) auto;\n}\n\n.designer-event-step-tree__step.is-selected {\n border-color: var(--el-color-primary);\n box-shadow: 0 0 0 1px var(--el-color-primary-light-5);\n}\n\n.designer-event-step-tree__step > button {\n display: grid;\n min-width: 0;\n align-items: center;\n padding: var(--daxiang-form-space-2);\n color: var(--el-text-color-regular);\n text-align: left;\n background: transparent;\n border: 0;\n cursor: pointer;\n grid-template-columns: auto minmax(0, 1fr);\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-event-step-tree__step > button span {\n display: flex;\n min-width: 0;\n flex-direction: column;\n}\n\n.designer-event-step-tree__step small {\n color: var(--el-text-color-secondary);\n font-size: 11px;\n}\n\n.designer-event-step-tree__branches {\n padding: var(--daxiang-form-space-2);\n background: var(--el-fill-color-extra-light);\n border-top: 1px solid var(--el-border-color-lighter);\n grid-column: 1 / -1;\n}\n\n.designer-event-step-tree__branches section + section {\n margin-top: var(--daxiang-form-space-2);\n}\n\n.designer-event-step-tree__branches header {\n display: flex;\n align-items: center;\n padding-bottom: var(--daxiang-form-space-1);\n color: var(--el-text-color-secondary);\n gap: var(--daxiang-form-space-1);\n font-size: 12px;\n}\n\n.designer-event-step-tree__add {\n align-self: center;\n color: var(--el-color-primary);\n}\n</style>\n","<template>\n <div class=\"designer-expression-editor\" :class=\"{ 'is-nested': depth > 0 }\">\n <div class=\"designer-expression-editor__node\">\n <ElSelect\n :model-value=\"expression.kind\"\n class=\"designer-expression-editor__kind\"\n aria-label=\"表达式节点类型\"\n @update:model-value=\"changeKind\"\n >\n <ElOption label=\"固定值\" value=\"LITERAL\" />\n <ElOption label=\"字段值\" value=\"FIELD\" />\n <ElOption label=\"表单变量\" value=\"VARIABLE\" />\n <ElOption label=\"运行上下文\" value=\"CONTEXT\" />\n <ElOption label=\"函数\" value=\"CALL\" />\n </ElSelect>\n\n <template v-if=\"expression.kind === 'LITERAL'\">\n <ElSelect :model-value=\"literalType\" @update:model-value=\"changeLiteralType\">\n <ElOption label=\"文本\" value=\"STRING\" />\n <ElOption label=\"数值\" value=\"NUMBER\" />\n <ElOption label=\"布尔\" value=\"BOOLEAN\" />\n <ElOption label=\"空值\" value=\"NULL\" />\n </ElSelect>\n <ElInput\n v-if=\"literalType === 'STRING'\"\n :model-value=\"String(expression.value ?? '')\"\n placeholder=\"输入文本\"\n @update:model-value=\"updateLiteral\"\n />\n <ElInputNumber\n v-else-if=\"literalType === 'NUMBER'\"\n :model-value=\"typeof expression.value === 'number' ? expression.value : 0\"\n controls-position=\"right\"\n @update:model-value=\"updateLiteral\"\n />\n <ElSegmented\n v-else-if=\"literalType === 'BOOLEAN'\"\n :model-value=\"expression.value === true\"\n :options=\"[\n { label: '是', value: true },\n { label: '否', value: false },\n ]\"\n @update:model-value=\"updateLiteral\"\n />\n <ElText v-else type=\"info\">null</ElText>\n </template>\n\n <template v-else-if=\"expression.kind === 'FIELD'\">\n <ElSelect\n v-if=\"allowCurrentRow\"\n :model-value=\"expression.scope\"\n aria-label=\"字段作用域\"\n @update:model-value=\"updateFieldScope\"\n >\n <ElOption label=\"主表字段\" value=\"ROOT\" />\n <ElOption label=\"当前子表行\" value=\"CURRENT_ROW\" />\n </ElSelect>\n <ElSelect\n :model-value=\"expression.fieldId\"\n filterable\n aria-label=\"表达式字段\"\n @update:model-value=\"updateFieldId\"\n >\n <ElOption\n v-for=\"field in fields\"\n :key=\"field.id\"\n :label=\"field.label\"\n :value=\"field.id\"\n />\n </ElSelect>\n </template>\n\n <ElSelect\n v-else-if=\"expression.kind === 'VARIABLE'\"\n :model-value=\"expression.variableCode\"\n aria-label=\"表单变量\"\n @update:model-value=\"updateVariable\"\n >\n <ElOption\n v-for=\"variable in variables\"\n :key=\"variable.code\"\n :label=\"variable.name\"\n :value=\"variable.code\"\n />\n </ElSelect>\n\n <ElSelect\n v-else-if=\"expression.kind === 'CONTEXT'\"\n :model-value=\"expression.key\"\n aria-label=\"运行上下文\"\n @update:model-value=\"updateContext\"\n >\n <ElOption label=\"运行模式\" value=\"RUNTIME_MODE\" />\n <ElOption label=\"设备类型\" value=\"DEVICE\" />\n <ElOption label=\"当前用户\" value=\"CURRENT_USER_ID\" />\n <ElOption label=\"当前租户\" value=\"CURRENT_TENANT_ID\" />\n <ElOption label=\"当前时间\" value=\"NOW\" />\n </ElSelect>\n\n <template v-else>\n <ElSelect\n :model-value=\"expression.function\"\n filterable\n aria-label=\"表达式函数\"\n @update:model-value=\"changeFunction\"\n >\n <ElOptionGroup v-for=\"group in functionGroups\" :key=\"group.label\" :label=\"group.label\">\n <ElOption\n v-for=\"item in group.options\"\n :key=\"item.value\"\n :label=\"item.label\"\n :value=\"item.value\"\n />\n </ElOptionGroup>\n </ElSelect>\n <ElButton\n v-if=\"isVariadicFunction(expression.function)\"\n text\n :disabled=\"expression.arguments.length >= 8\"\n @click=\"addArgument\"\n >\n <DxSvgIcon icon=\"ri:add-line\" />参数\n </ElButton>\n </template>\n </div>\n\n <div v-if=\"expression.kind === 'CALL'\" class=\"designer-expression-editor__arguments\">\n <div\n v-for=\"(argument, index) in expression.arguments\"\n :key=\"index\"\n class=\"designer-expression-editor__argument\"\n >\n <span>{{ argumentLabel(expression.function, index) }}</span>\n <DesignerExpressionEditor\n :model-value=\"argument\"\n :fields=\"fields\"\n :variables=\"variables\"\n :mode=\"argumentMode(expression.function, index)\"\n :allow-current-row=\"allowCurrentRow\"\n :depth=\"depth + 1\"\n @update:model-value=\"updateArgument(index, $event)\"\n />\n <ElButton\n v-if=\"canRemoveArgument(expression.function, expression.arguments.length)\"\n text\n type=\"danger\"\n aria-label=\"删除函数参数\"\n @click=\"removeArgument(index)\"\n >\n <DxSvgIcon icon=\"ri:delete-bin-line\" />\n </ElButton>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport DxSvgIcon from '../infrastructure/FormIcon.vue'\nimport type {\n DesignerExpression,\n DesignerExpressionContextKey,\n DesignerExpressionFieldScope,\n DesignerExpressionFunction,\n DesignerField,\n DesignerVariableDefinition,\n} from '@daxiangme/form-core'\n\ndefineOptions({ name: 'DesignerExpressionEditor' })\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: DesignerExpression\n fields: DesignerField[]\n variables: DesignerVariableDefinition[]\n mode: 'condition' | 'value'\n allowCurrentRow?: boolean\n depth?: number\n }>(),\n { allowCurrentRow: false, depth: 0 },\n)\nconst emit = defineEmits<{ 'update:modelValue': [expression: DesignerExpression] }>()\nconst expression = computed<DesignerExpression>(\n () => props.modelValue ?? defaultExpression(props.mode),\n)\nconst literalType = computed<'STRING' | 'NUMBER' | 'BOOLEAN' | 'NULL'>(() => {\n if (expression.value.kind !== 'LITERAL') return 'STRING'\n if (expression.value.value === null) return 'NULL'\n if (typeof expression.value.value === 'number') return 'NUMBER'\n if (typeof expression.value.value === 'boolean') return 'BOOLEAN'\n return 'STRING'\n})\nconst functionGroups = computed(() => {\n const conditionOptions = [\n ['并且', 'AND'],\n ['或者', 'OR'],\n ['取反', 'NOT'],\n ['等于', 'EQ'],\n ['不等于', 'NE'],\n ['大于', 'GT'],\n ['大于等于', 'GTE'],\n ['小于', 'LT'],\n ['小于等于', 'LTE'],\n ['为空', 'EMPTY'],\n ['不为空', 'NOT_EMPTY'],\n ['属于集合', 'IN'],\n ['包含', 'CONTAINS'],\n ] as const\n const valueOptions = [\n ['相加', 'ADD'],\n ['相减', 'SUBTRACT'],\n ['相乘', 'MULTIPLY'],\n ['相除', 'DIVIDE'],\n ['拼接文本', 'CONCAT'],\n ['首个非空值', 'COALESCE'],\n ['长度', 'LENGTH'],\n ['条件取值', 'IF'],\n ] as const\n const convert = (items: ReadonlyArray<readonly [string, DesignerExpressionFunction]>) =>\n items.map(([label, value]) => ({ label, value }))\n return props.mode === 'condition'\n ? [{ label: '逻辑与比较', options: convert(conditionOptions) }]\n : [\n { label: '计算与文本', options: convert(valueOptions) },\n { label: '逻辑与比较', options: convert(conditionOptions) },\n ]\n})\n\nfunction changeKind(value: unknown): void {\n if (value === 'LITERAL') emit('update:modelValue', { kind: 'LITERAL', value: '' })\n if (value === 'FIELD') {\n emit('update:modelValue', { kind: 'FIELD', fieldId: props.fields[0]?.id ?? '', scope: 'ROOT' })\n }\n if (value === 'VARIABLE') {\n emit('update:modelValue', { kind: 'VARIABLE', variableCode: props.variables[0]?.code ?? '' })\n }\n if (value === 'CONTEXT') emit('update:modelValue', { kind: 'CONTEXT', key: 'NOW' })\n if (value === 'CALL')\n emit('update:modelValue', createCall(props.mode === 'condition' ? 'EQ' : 'ADD'))\n}\n\nfunction changeLiteralType(value: unknown): void {\n if (value === 'STRING') emit('update:modelValue', { kind: 'LITERAL', value: '' })\n if (value === 'NUMBER') emit('update:modelValue', { kind: 'LITERAL', value: 0 })\n if (value === 'BOOLEAN') emit('update:modelValue', { kind: 'LITERAL', value: false })\n if (value === 'NULL') emit('update:modelValue', { kind: 'LITERAL', value: null })\n}\n\nfunction updateLiteral(value: unknown): void {\n if (['string', 'number', 'boolean'].includes(typeof value) || value === null) {\n emit('update:modelValue', { kind: 'LITERAL', value: value as string | number | boolean | null })\n }\n}\n\nfunction updateFieldId(value: unknown): void {\n if (expression.value.kind === 'FIELD' && typeof value === 'string') {\n emit('update:modelValue', { ...expression.value, fieldId: value })\n }\n}\n\nfunction updateFieldScope(value: unknown): void {\n if (\n expression.value.kind === 'FIELD' &&\n (value === 'ROOT' || (value === 'CURRENT_ROW' && props.allowCurrentRow))\n ) {\n emit('update:modelValue', { ...expression.value, scope: value as DesignerExpressionFieldScope })\n }\n}\n\nfunction updateVariable(value: unknown): void {\n if (typeof value === 'string')\n emit('update:modelValue', { kind: 'VARIABLE', variableCode: value })\n}\n\nfunction updateContext(value: unknown): void {\n if (\n ['RUNTIME_MODE', 'DEVICE', 'CURRENT_USER_ID', 'CURRENT_TENANT_ID', 'NOW'].includes(\n String(value),\n )\n ) {\n emit('update:modelValue', { kind: 'CONTEXT', key: value as DesignerExpressionContextKey })\n }\n}\n\nfunction changeFunction(value: unknown): void {\n if (!isExpressionFunction(value)) return\n const next = createCall(value)\n const current = expression.value\n if (current.kind === 'CALL') {\n next.arguments = next.arguments.map((fallback, index) => current.arguments[index] ?? fallback)\n }\n emit('update:modelValue', next)\n}\n\nfunction createCall(\n functionName: DesignerExpressionFunction,\n): Extract<DesignerExpression, { kind: 'CALL' }> {\n return {\n kind: 'CALL',\n function: functionName,\n arguments: Array.from({ length: minimumArgumentCount(functionName) }, (_, index) =>\n defaultArgument(functionName, index),\n ),\n }\n}\n\nfunction updateArgument(index: number, value: DesignerExpression): void {\n if (expression.value.kind !== 'CALL') return\n const argumentsList = [...expression.value.arguments]\n argumentsList[index] = value\n emit('update:modelValue', { ...expression.value, arguments: argumentsList })\n}\n\nfunction addArgument(): void {\n if (expression.value.kind !== 'CALL' || expression.value.arguments.length >= 8) return\n emit('update:modelValue', {\n ...expression.value,\n arguments: [\n ...expression.value.arguments,\n defaultArgument(expression.value.function, expression.value.arguments.length),\n ],\n })\n}\n\nfunction removeArgument(index: number): void {\n if (\n expression.value.kind !== 'CALL' ||\n !canRemoveArgument(expression.value.function, expression.value.arguments.length)\n )\n return\n emit('update:modelValue', {\n ...expression.value,\n arguments: expression.value.arguments.filter((_, argumentIndex) => argumentIndex !== index),\n })\n}\n\nfunction minimumArgumentCount(functionName: DesignerExpressionFunction): number {\n if (['NOT', 'EMPTY', 'NOT_EMPTY', 'LENGTH'].includes(functionName)) return 1\n if (functionName === 'IF') return 3\n return 2\n}\n\nfunction isVariadicFunction(functionName: DesignerExpressionFunction): boolean {\n return ['AND', 'OR', 'CONCAT', 'COALESCE'].includes(functionName)\n}\n\nfunction canRemoveArgument(functionName: DesignerExpressionFunction, count: number): boolean {\n return isVariadicFunction(functionName) && count > minimumArgumentCount(functionName)\n}\n\nfunction defaultArgument(\n functionName: DesignerExpressionFunction,\n index: number,\n): DesignerExpression {\n if (['AND', 'OR', 'NOT'].includes(functionName) || (functionName === 'IF' && index === 0)) {\n return { kind: 'LITERAL', value: true }\n }\n if (['ADD', 'SUBTRACT', 'MULTIPLY', 'DIVIDE'].includes(functionName)) {\n return { kind: 'LITERAL', value: 0 }\n }\n if (props.fields[0]) return { kind: 'FIELD', fieldId: props.fields[0].id, scope: 'ROOT' }\n return { kind: 'LITERAL', value: null }\n}\n\nfunction argumentMode(\n functionName: DesignerExpressionFunction,\n index: number,\n): 'condition' | 'value' {\n return ['AND', 'OR', 'NOT'].includes(functionName) || (functionName === 'IF' && index === 0)\n ? 'condition'\n : 'value'\n}\n\nfunction argumentLabel(functionName: DesignerExpressionFunction, index: number): string {\n if (functionName === 'IF') return ['条件', '成立时', '不成立时'][index] ?? `参数 ${index + 1}`\n if (['EQ', 'NE', 'GT', 'GTE', 'LT', 'LTE', 'IN', 'CONTAINS'].includes(functionName)) {\n return index === 0 ? '左值' : '右值'\n }\n return `参数 ${index + 1}`\n}\n\nfunction defaultExpression(mode: 'condition' | 'value'): DesignerExpression {\n return mode === 'condition' ? createCall('EQ') : { kind: 'LITERAL', value: null }\n}\n\nfunction isExpressionFunction(value: unknown): value is DesignerExpressionFunction {\n return functionGroups.value.some((group) => group.options.some((item) => item.value === value))\n}\n</script>\n\n<style scoped>\n.designer-expression-editor {\n display: flex;\n width: 100%;\n min-width: 0;\n padding: var(--daxiang-form-space-2);\n flex-direction: column;\n background: var(--el-fill-color-extra-light);\n border: 1px solid var(--el-border-color-lighter);\n border-radius: var(--el-border-radius-base);\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-expression-editor.is-nested {\n background: var(--el-bg-color);\n}\n\n.designer-expression-editor__node {\n display: grid;\n min-width: 0;\n align-items: center;\n grid-template-columns: minmax(110px, 0.7fr) minmax(140px, 1fr) minmax(160px, 1.3fr);\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-expression-editor__kind {\n min-width: 0;\n}\n\n.designer-expression-editor__arguments {\n display: flex;\n padding-left: var(--daxiang-form-space-3);\n flex-direction: column;\n border-left: 2px solid var(--el-color-primary-light-7);\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-expression-editor__argument {\n display: grid;\n min-width: 0;\n align-items: start;\n grid-template-columns: 56px minmax(0, 1fr) auto;\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-expression-editor__argument > span {\n padding-top: 8px;\n color: var(--el-text-color-secondary);\n font-size: 12px;\n}\n\n@media (width <= 720px) {\n .designer-expression-editor__node {\n grid-template-columns: 1fr;\n }\n\n .designer-expression-editor__arguments {\n padding-left: var(--daxiang-form-space-2);\n }\n\n .designer-expression-editor__argument {\n grid-template-columns: 1fr auto;\n }\n\n .designer-expression-editor__argument > span {\n grid-column: 1 / -1;\n }\n}\n</style>\n","<template>\n <div class=\"designer-event-flow-workbench\">\n <aside>\n <ElDropdown v-if=\"allowCreate\" trigger=\"click\" @command=\"createFlow\">\n <ElButton type=\"primary\" plain><DxSvgIcon icon=\"ri:add-line\" />创建事件</ElButton>\n <template #dropdown>\n <ElDropdownMenu>\n <ElDropdownItem command=\"FORM\">表单事件</ElDropdownItem>\n <ElDropdownItem :disabled=\"!selectedNodeId\" command=\"COMPONENT\"\n >当前组件事件</ElDropdownItem\n >\n </ElDropdownMenu>\n </template>\n </ElDropdown>\n <button\n v-for=\"flow in visibleFlows\"\n :key=\"flow.id\"\n type=\"button\"\n :class=\"{ 'is-active': selectedFlowId === flow.id }\"\n @click=\"selectFlow(flow)\"\n >\n <DxSvgIcon icon=\"ri:flashlight-line\" />\n <span\n ><strong>{{ flow.name }}</strong\n ><small>{{ flowLabel(flow) }}</small></span\n >\n <ElButton\n v-if=\"allowDelete\"\n text\n type=\"danger\"\n aria-label=\"删除事件\"\n @click.stop=\"removeFlow(flow.id)\"\n >\n <DxSvgIcon icon=\"ri:delete-bin-line\" />\n </ElButton>\n </button>\n <ElEmpty v-if=\"visibleFlows.length === 0\" description=\"尚未创建事件\" :image-size=\"48\" />\n </aside>\n\n <main v-if=\"selectedFlow\">\n <header>\n <ElInput v-model=\"selectedFlow.name\" maxlength=\"80\" aria-label=\"事件名称\" />\n <ElInput\n v-model=\"selectedFlow.code\"\n maxlength=\"64\"\n aria-label=\"事件编码\"\n :disabled=\"lockIdentity\"\n />\n <ElSelect\n v-if=\"selectedFlow.trigger.scope === 'FORM'\"\n v-model=\"selectedFlow.trigger.event\"\n :disabled=\"lockIdentity\"\n >\n <ElOption label=\"初始化完成\" value=\"INITIALIZED\" />\n <ElOption label=\"提交前\" value=\"BEFORE_SUBMIT\" />\n <ElOption label=\"提交后\" value=\"AFTER_SUBMIT\" />\n <ElOption label=\"重置\" value=\"RESET\" />\n </ElSelect>\n <ElSelect v-else v-model=\"selectedFlow.trigger.event\" :disabled=\"lockIdentity\">\n <ElOption\n v-for=\"event in selectedFlowComponentEvents\"\n :key=\"event\"\n :label=\"componentEventLabel(event)\"\n :value=\"event\"\n />\n </ElSelect>\n <ElSwitch\n v-model=\"selectedFlow.enabled\"\n inline-prompt\n active-text=\"启用\"\n inactive-text=\"停用\"\n />\n </header>\n <div class=\"designer-event-flow-workbench__flow\">\n <div class=\"designer-event-flow-workbench__start\">开始</div>\n <DesignerEventStepTree\n :steps=\"selectedFlow.steps\"\n :selected-step-id=\"selectedStep?.id ?? ''\"\n @select=\"selectedStep = $event\"\n @delete=\"handleStepDelete\"\n @update:steps=\"selectedFlow.steps = $event\"\n />\n <div class=\"designer-event-flow-workbench__end\">结束</div>\n </div>\n </main>\n\n <section v-if=\"selectedStep\" class=\"designer-event-flow-workbench__configuration\">\n <template v-if=\"selectedStep.stepType === 'ACTION'\">\n <header>\n <strong>动作配置</strong>\n <small>{{ actionDescription(selectedStep.actionType) }}</small>\n </header>\n <ElForm label-position=\"top\">\n <ElFormItem label=\"动作名称\"\n ><ElInput v-model=\"selectedStep.name\" maxlength=\"80\"\n /></ElFormItem>\n <ElFormItem label=\"执行动作\">\n <ElSelect\n v-model=\"selectedStep.actionType\"\n @change=\"resetActionConfiguration(selectedStep)\"\n >\n <ElOption\n v-for=\"item in actionTypes\"\n :key=\"item.value\"\n :label=\"item.label\"\n :value=\"item.value\"\n :disabled=\"!item.available\"\n >\n <span>{{ item.label }}</span>\n <small v-if=\"!item.available\">{{ item.unavailableReason }}</small>\n </ElOption>\n </ElSelect>\n </ElFormItem>\n\n <ElFormItem\n v-if=\"['SET_FIELD', 'CLEAR_FIELD'].includes(selectedStep.actionType)\"\n label=\"目标字段\"\n >\n <ElSelect\n :model-value=\"configurationText(selectedStep, 'fieldId')\"\n @update:model-value=\"setActionConfiguration(selectedStep, 'fieldId', $event)\"\n >\n <ElOption\n v-for=\"field in document.dataSchema.fields\"\n :key=\"field.id\"\n :label=\"field.label\"\n :value=\"field.id\"\n />\n </ElSelect>\n </ElFormItem>\n <template v-if=\"selectedStep.actionType === 'COPY_FIELD'\">\n <ElFormItem label=\"来源字段\">\n <ElSelect\n :model-value=\"configurationText(selectedStep, 'sourceFieldId')\"\n @update:model-value=\"setActionConfiguration(selectedStep, 'sourceFieldId', $event)\"\n >\n <ElOption\n v-for=\"field in document.dataSchema.fields\"\n :key=\"field.id\"\n :label=\"field.label\"\n :value=\"field.id\"\n />\n </ElSelect>\n </ElFormItem>\n <ElFormItem label=\"目标字段\">\n <ElSelect\n :model-value=\"configurationText(selectedStep, 'targetFieldId')\"\n @update:model-value=\"setActionConfiguration(selectedStep, 'targetFieldId', $event)\"\n >\n <ElOption\n v-for=\"field in document.dataSchema.fields\"\n :key=\"field.id\"\n :label=\"field.label\"\n :value=\"field.id\"\n />\n </ElSelect>\n </ElFormItem>\n </template>\n <ElFormItem\n v-if=\"['SET_FIELD', 'SET_VARIABLE'].includes(selectedStep.actionType)\"\n label=\"设置值\"\n >\n <DesignerExpressionEditor\n :model-value=\"expressionConfiguration(selectedStep)\"\n :fields=\"document.dataSchema.fields\"\n :variables=\"document.variables\"\n :allow-current-row=\"selectedFlowAllowsCurrentRow\"\n mode=\"value\"\n @update:model-value=\"selectedStep.configuration.expression = $event\"\n />\n </ElFormItem>\n <ElFormItem v-if=\"selectedStep.actionType === 'SET_VARIABLE'\" label=\"目标变量\">\n <ElSelect\n :model-value=\"configurationText(selectedStep, 'variableCode')\"\n @update:model-value=\"setActionConfiguration(selectedStep, 'variableCode', $event)\"\n >\n <ElOption\n v-for=\"variable in document.variables\"\n :key=\"variable.code\"\n :label=\"variable.name\"\n :value=\"variable.code\"\n />\n </ElSelect>\n </ElFormItem>\n <ElFormItem v-if=\"selectedStep.actionType === 'MESSAGE'\" label=\"消息内容\">\n <ElInput\n :model-value=\"configurationText(selectedStep, 'message')\"\n maxlength=\"160\"\n @update:model-value=\"setActionConfiguration(selectedStep, 'message', $event)\"\n />\n </ElFormItem>\n <ElFormItem v-if=\"selectedStep.actionType === 'MESSAGE'\" label=\"消息级别\">\n <ElSelect\n :model-value=\"configurationText(selectedStep, 'level')\"\n @update:model-value=\"setActionConfiguration(selectedStep, 'level', $event)\"\n >\n <ElOption label=\"成功\" value=\"SUCCESS\" />\n <ElOption label=\"信息\" value=\"INFO\" />\n <ElOption label=\"警告\" value=\"WARNING\" />\n <ElOption label=\"错误\" value=\"ERROR\" />\n </ElSelect>\n </ElFormItem>\n <ElFormItem\n v-if=\"\n ['OPEN_MODULE', 'CONFIRM_MODULE', 'CANCEL_MODULE'].includes(selectedStep.actionType)\n \"\n label=\"模块\"\n >\n <ElSelect\n :model-value=\"configurationText(selectedStep, 'moduleCode')\"\n @update:model-value=\"setActionConfiguration(selectedStep, 'moduleCode', $event)\"\n >\n <ElOption\n v-for=\"module in document.uiSchema.overlays\"\n :key=\"module.code\"\n :label=\"module.name\"\n :value=\"module.code\"\n />\n </ElSelect>\n </ElFormItem>\n <ElFormItem v-if=\"selectedStep.actionType === 'REFRESH_DATA_SOURCE'\" label=\"数据源\">\n <ElSelect\n :model-value=\"configurationText(selectedStep, 'dataSourceCode')\"\n @update:model-value=\"setActionConfiguration(selectedStep, 'dataSourceCode', $event)\"\n >\n <ElOption\n v-for=\"source in document.dataSources\"\n :key=\"source.code\"\n :label=\"source.name\"\n :value=\"source.code\"\n />\n </ElSelect>\n </ElFormItem>\n <ElFormItem v-if=\"selectedStep.actionType === 'NAVIGATE_RESOURCE'\" label=\"同应用资源编码\">\n <ElInput\n :model-value=\"configurationText(selectedStep, 'resourceCode')\"\n maxlength=\"64\"\n @update:model-value=\"setActionConfiguration(selectedStep, 'resourceCode', $event)\"\n />\n </ElFormItem>\n <ElFormItem v-if=\"selectedStep.actionType === 'NAVIGATE_RESOURCE'\" label=\"在新页面打开\">\n <ElSwitch\n :model-value=\"selectedStep.configuration.openInNewPage === true\"\n @update:model-value=\"setActionConfiguration(selectedStep, 'openInNewPage', $event)\"\n />\n </ElFormItem>\n <ElFormItem v-if=\"selectedStep.actionType === 'HOST_ACTION'\" label=\"Host 动作编码\">\n <ElInput\n :model-value=\"configurationText(selectedStep, 'actionCode')\"\n maxlength=\"64\"\n @update:model-value=\"setActionConfiguration(selectedStep, 'actionCode', $event)\"\n />\n </ElFormItem>\n <ElFormItem label=\"执行条件\">\n <div class=\"designer-event-flow-workbench__guard-toggle\">\n <ElSwitch\n :model-value=\"Boolean(selectedStep.guard)\"\n active-text=\"启用条件\"\n @update:model-value=\"toggleGuard(selectedStep, Boolean($event))\"\n />\n <small>条件为空时动作始终执行。</small>\n </div>\n <DesignerExpressionEditor\n v-if=\"selectedStep.guard\"\n v-model=\"selectedStep.guard\"\n :fields=\"document.dataSchema.fields\"\n :variables=\"document.variables\"\n :allow-current-row=\"selectedFlowAllowsCurrentRow\"\n mode=\"condition\"\n />\n </ElFormItem>\n <ElFormItem label=\"条件不满足\">\n <ElSegmented\n v-model=\"selectedStep.guardFailure\"\n :options=\"[\n { label: '跳过动作', value: 'SKIP' },\n { label: '阻断事件', value: 'BLOCK' },\n ]\"\n />\n </ElFormItem>\n <ElFormItem label=\"执行异常\">\n <ElSegmented\n v-model=\"selectedStep.onError\"\n :options=\"[\n { label: '停止后续', value: 'STOP' },\n { label: '继续后续', value: 'CONTINUE' },\n ]\"\n />\n </ElFormItem>\n </ElForm>\n </template>\n <template v-else>\n <header>\n <strong>条件配置</strong><small>按顺序命中第一个分支,否则进入其他情况。</small>\n </header>\n <ElForm label-position=\"top\">\n <ElFormItem label=\"条件名称\"\n ><ElInput v-model=\"selectedStep.name\" maxlength=\"80\"\n /></ElFormItem>\n <article v-for=\"(branch, index) in selectedStep.branches\" :key=\"branch.id\">\n <div>\n <ElInput v-model=\"branch.name\" />\n <ElButton text type=\"danger\" @click=\"selectedStep.branches.splice(index, 1)\">\n <DxSvgIcon icon=\"ri:delete-bin-line\" />\n </ElButton>\n </div>\n <DesignerExpressionEditor\n v-model=\"branch.condition\"\n :fields=\"document.dataSchema.fields\"\n :variables=\"document.variables\"\n :allow-current-row=\"selectedFlowAllowsCurrentRow\"\n mode=\"condition\"\n />\n </article>\n <ElButton plain @click=\"addBranch\">添加条件分支</ElButton>\n </ElForm>\n </template>\n </section>\n <ElEmpty\n v-else-if=\"selectedFlow\"\n class=\"designer-event-flow-workbench__configuration\"\n description=\"选择步骤后配置\"\n />\n <ElEmpty\n v-else\n class=\"designer-event-flow-workbench__welcome\"\n description=\"创建或选择一个事件\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue'\nimport DxSvgIcon from '../infrastructure/FormIcon.vue'\nimport { findDesignerComponent } from '@daxiangme/form-core'\nimport { findDesignerNode } from '@daxiangme/form-core'\nimport {\n resolveDesignerEventActionAvailability,\n type DesignerFieldBehaviorCapabilities,\n} from '@daxiangme/form-core'\nimport type {\n DesignerComponentEvent,\n DesignerDocument,\n DesignerEventActionStep,\n DesignerEventActionType,\n DesignerEventFlow,\n DesignerEventStep,\n DesignerExpression,\n} from '@daxiangme/form-core'\nimport DesignerEventStepTree from './DesignerEventStepTree.vue'\nimport DesignerExpressionEditor from './DesignerExpressionEditor.vue'\n\ndefineOptions({ name: 'DesignerEventFlowWorkbench' })\n\nconst props = withDefaults(\n defineProps<{\n document: DesignerDocument\n selectedNodeId: string\n initialFlowId?: string\n editableFlowCodes?: string[]\n allowCreate?: boolean\n allowDelete?: boolean\n lockIdentity?: boolean\n capabilities: DesignerFieldBehaviorCapabilities\n }>(),\n {\n initialFlowId: '',\n editableFlowCodes: () => [],\n allowCreate: true,\n allowDelete: true,\n lockIdentity: false,\n },\n)\nconst flowsModel = defineModel<DesignerEventFlow[]>({ required: true })\nconst draftFlows = ref<DesignerEventFlow[]>(cloneValue(flowsModel.value))\nconst selectedFlowId = ref('')\nconst selectedStep = ref<DesignerEventStep>()\nconst visibleFlows = computed(() => {\n if (props.editableFlowCodes.length === 0) return draftFlows.value\n const allowed = new Set(props.editableFlowCodes)\n return draftFlows.value.filter((flow) => allowed.has(flow.code))\n})\nconst selectedFlow = computed(() =>\n draftFlows.value.find((flow) => flow.id === selectedFlowId.value),\n)\nconst selectedFlowAllowsCurrentRow = computed(() => {\n const flow = selectedFlow.value\n return flow?.trigger.scope === 'COMPONENT' && nodeUsesCurrentRowContext(flow.trigger.nodeId)\n})\nconst selectedFlowComponentEvents = computed<DesignerComponentEvent[]>(() => {\n const flow = selectedFlow.value\n return flow?.trigger.scope === 'COMPONENT'\n ? supportedEventsForNode(flow.trigger.nodeId)\n : ['CHANGE', 'BLUR', 'FOCUS']\n})\nconst actionTypes = computed(() =>\n ACTION_TYPES.map((item) => ({\n ...item,\n ...resolveDesignerEventActionAvailability(item.value, props.capabilities),\n })),\n)\n\nconst ACTION_TYPES: Array<{ label: string; value: DesignerEventActionType }> = [\n { label: '设置字段', value: 'SET_FIELD' },\n { label: '清空字段', value: 'CLEAR_FIELD' },\n { label: '复制字段', value: 'COPY_FIELD' },\n { label: '设置变量', value: 'SET_VARIABLE' },\n { label: '验证表单', value: 'VALIDATE' },\n { label: '提交表单', value: 'SUBMIT' },\n { label: '重置表单', value: 'RESET' },\n { label: '打印', value: 'PRINT' },\n { label: '显示消息', value: 'MESSAGE' },\n { label: '打开模块', value: 'OPEN_MODULE' },\n { label: '确认模块', value: 'CONFIRM_MODULE' },\n { label: '取消模块', value: 'CANCEL_MODULE' },\n { label: '资源导航', value: 'NAVIGATE_RESOURCE' },\n { label: '刷新数据源', value: 'REFRESH_DATA_SOURCE' },\n { label: 'Host 动作', value: 'HOST_ACTION' },\n]\n\nwatch(\n () => flowsModel.value,\n (flows) => {\n if (JSON.stringify(flows) !== JSON.stringify(draftFlows.value))\n draftFlows.value = cloneValue(flows)\n },\n { deep: true },\n)\nwatch(\n draftFlows,\n (flows) => {\n if (JSON.stringify(flows) !== JSON.stringify(flowsModel.value))\n flowsModel.value = cloneValue(flows)\n },\n { deep: true },\n)\nwatch(\n [visibleFlows, () => props.initialFlowId],\n ([flows, initialFlowId]) => {\n const preferred = flows.find((flow) => flow.id === initialFlowId)\n const fallback = preferred ?? flows[0]\n if (!flows.some((flow) => flow.id === selectedFlowId.value))\n selectedFlowId.value = fallback?.id ?? ''\n },\n { immediate: true },\n)\n\nfunction createFlow(command: string | number | object): void {\n if (command !== 'FORM' && command !== 'COMPONENT') return\n const serial = draftFlows.value.length + 1\n const flow: DesignerEventFlow = {\n id: createId('flow'),\n code: uniqueFlowCode(`event_${serial}`),\n name: command === 'FORM' ? `表单事件${serial}` : `组件事件${serial}`,\n trigger:\n command === 'FORM'\n ? { scope: 'FORM', event: 'BEFORE_SUBMIT' }\n : {\n scope: 'COMPONENT',\n event: supportedEventsForNode(props.selectedNodeId)[0] ?? 'CHANGE',\n nodeId: props.selectedNodeId,\n },\n enabled: true,\n steps: [],\n }\n draftFlows.value.push(flow)\n selectFlow(flow)\n}\n\nfunction selectFlow(flow: DesignerEventFlow): void {\n selectedFlowId.value = flow.id\n selectedStep.value = undefined\n}\n\nfunction removeFlow(flowId: string): void {\n const index = draftFlows.value.findIndex((flow) => flow.id === flowId)\n if (index < 0) return\n draftFlows.value.splice(index, 1)\n if (selectedFlowId.value !== flowId) return\n selectedFlowId.value =\n visibleFlows.value[Math.max(0, index - 1)]?.id ?? visibleFlows.value[0]?.id ?? ''\n selectedStep.value = undefined\n}\n\nfunction handleStepDelete(stepId: string): void {\n if (selectedStep.value?.id === stepId) selectedStep.value = undefined\n}\n\nfunction configurationText(step: DesignerEventActionStep, key: string): string {\n const value = step.configuration[key]\n return typeof value === 'string' ? value : ''\n}\n\nfunction setActionConfiguration(step: DesignerEventActionStep, key: string, value: unknown): void {\n step.configuration = { ...step.configuration, [key]: value }\n}\n\nfunction toggleGuard(step: DesignerEventActionStep, enabled: boolean): void {\n step.guard = enabled ? (step.guard ?? { kind: 'LITERAL', value: true }) : undefined\n}\n\nfunction resetActionConfiguration(step: DesignerEventActionStep): void {\n const availability = resolveDesignerEventActionAvailability(step.actionType, props.capabilities)\n if (!availability.available) return\n step.configuration = defaultActionConfiguration(step.actionType)\n step.name = ACTION_TYPES.find((item) => item.value === step.actionType)?.label ?? '执行动作'\n}\n\nfunction defaultActionConfiguration(type: DesignerEventActionType): Record<string, unknown> {\n if (type === 'MESSAGE') return { message: '操作已完成', level: 'SUCCESS' }\n if (['SET_FIELD', 'CLEAR_FIELD'].includes(type)) {\n return { fieldId: props.document.dataSchema.fields[0]?.id ?? '' }\n }\n if (type === 'COPY_FIELD') return { sourceFieldId: '', targetFieldId: '' }\n if (type === 'SET_VARIABLE') {\n return {\n variableCode: props.document.variables[0]?.code ?? '',\n expression: { kind: 'LITERAL', value: null },\n }\n }\n if (['OPEN_MODULE', 'CONFIRM_MODULE', 'CANCEL_MODULE'].includes(type)) {\n return { moduleCode: props.document.uiSchema.overlays[0]?.code ?? '' }\n }\n if (type === 'REFRESH_DATA_SOURCE')\n return { dataSourceCode: props.document.dataSources[0]?.code ?? '' }\n if (type === 'NAVIGATE_RESOURCE') return { resourceCode: '', openInNewPage: false }\n if (type === 'HOST_ACTION') return { actionCode: '' }\n return {}\n}\n\nfunction expressionConfiguration(step: DesignerEventActionStep): DesignerExpression | undefined {\n const value = step.configuration.expression\n return typeof value === 'object' && value !== null ? (value as DesignerExpression) : undefined\n}\n\nfunction addBranch(): void {\n if (!selectedStep.value || selectedStep.value.stepType !== 'CONDITION') return\n selectedStep.value.branches.push({\n id: createId('branch'),\n name: `条件 ${selectedStep.value.branches.length + 1}`,\n condition: { kind: 'LITERAL', value: true },\n steps: [],\n })\n}\n\nfunction flowLabel(flow: DesignerEventFlow): string {\n return flow.trigger.scope === 'FORM'\n ? `表单 · ${flow.trigger.event}`\n : `组件 · ${flow.trigger.event}`\n}\n\nfunction actionDescription(type: DesignerEventActionType): string {\n const availability = resolveDesignerEventActionAvailability(type, props.capabilities)\n return availability.available\n ? '动作按事件流顺序执行,可配置阻断和异常策略。'\n : `${availability.unavailableReason};历史步骤保留并在运行时失败关闭。`\n}\n\nfunction supportedEventsForNode(nodeId: string): DesignerComponentEvent[] {\n for (const root of [\n props.document.uiSchema.root,\n ...props.document.uiSchema.overlays.map((overlay) => overlay.root),\n ]) {\n const node = findDesignerNode(root, nodeId)\n if (!node) continue\n const componentType =\n node.nodeType === 'FIELD'\n ? props.document.dataSchema.fields.find((field) => field.id === node.fieldId)?.componentType\n : node.componentType\n return (componentType ? findDesignerComponent(componentType)?.supportedEvents : undefined) ?? []\n }\n return []\n}\n\nfunction nodeUsesCurrentRowContext(nodeId: string): boolean {\n const visit = (nodes: DesignerDocument['uiSchema']['root'], insideSubtable: boolean): boolean => {\n for (const node of nodes) {\n if (node.id === nodeId) return insideSubtable\n if (node.nodeType !== 'CONTAINER') continue\n const nextInside =\n insideSubtable || ['row-subtable', 'block-subtable'].includes(node.componentType)\n for (const slot of node.slots) if (visit(slot.children, nextInside)) return true\n }\n return false\n }\n return [\n props.document.uiSchema.root,\n ...props.document.uiSchema.overlays.map((item) => item.root),\n ].some((root) => visit(root, false))\n}\n\nfunction componentEventLabel(event: DesignerComponentEvent): string {\n return { CHANGE: '值变化', BLUR: '失焦', FOCUS: '聚焦', CLICK: '点击' }[event]\n}\n\nfunction uniqueFlowCode(candidate: string): string {\n const existing = new Set(draftFlows.value.map((flow) => flow.code))\n let code = candidate\n let serial = 2\n while (existing.has(code)) code = `${candidate}_${serial++}`\n return code\n}\n\nfunction createId(prefix: string): string {\n return `${prefix}-${crypto.randomUUID().replaceAll('-', '')}`\n}\n\nfunction cloneValue<T>(value: T): T {\n return JSON.parse(JSON.stringify(value)) as T\n}\n</script>\n\n<style scoped>\n.designer-event-flow-workbench {\n display: grid;\n min-height: 560px;\n overflow: hidden;\n border: 1px solid var(--el-border-color-lighter);\n grid-template-columns: 220px minmax(300px, 1fr) minmax(280px, 340px);\n}\n\n.designer-event-flow-workbench > aside,\n.designer-event-flow-workbench > main,\n.designer-event-flow-workbench__configuration {\n min-width: 0;\n min-height: 0;\n overflow: auto;\n}\n\n.designer-event-flow-workbench > aside {\n display: flex;\n padding: var(--daxiang-form-space-2);\n flex-direction: column;\n border-right: 1px solid var(--el-border-color-lighter);\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-event-flow-workbench > aside > button {\n display: grid;\n align-items: center;\n padding: var(--daxiang-form-space-2);\n color: var(--el-text-color-regular);\n text-align: left;\n background: transparent;\n border: 1px solid transparent;\n border-radius: var(--el-border-radius-base);\n cursor: pointer;\n grid-template-columns: auto minmax(0, 1fr) auto;\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-event-flow-workbench > aside > button.is-active {\n color: var(--el-color-primary);\n background: var(--el-color-primary-light-9);\n border-color: var(--el-color-primary-light-5);\n}\n\n.designer-event-flow-workbench > aside span,\n.designer-event-flow-workbench__configuration > header {\n display: flex;\n min-width: 0;\n flex-direction: column;\n}\n\n.designer-event-flow-workbench > aside strong,\n.designer-event-flow-workbench > aside small {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.designer-event-flow-workbench > main {\n display: flex;\n flex-direction: column;\n background-image: radial-gradient(var(--el-border-color-light) 1px, transparent 1px);\n background-size: 20px 20px;\n}\n\n.designer-event-flow-workbench > main > header {\n display: grid;\n padding: var(--daxiang-form-space-2);\n background: var(--el-bg-color);\n border-bottom: 1px solid var(--el-border-color-lighter);\n grid-template-columns: 1.3fr 1fr 150px auto;\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-event-flow-workbench__flow {\n display: flex;\n align-items: stretch;\n padding: var(--daxiang-form-space-5);\n flex: 1 1 0;\n flex-direction: column;\n gap: var(--daxiang-form-space-3);\n}\n\n.designer-event-flow-workbench__start,\n.designer-event-flow-workbench__end {\n padding: var(--daxiang-form-space-2);\n color: var(--el-color-white);\n text-align: center;\n background: var(--el-color-primary);\n border-radius: var(--el-border-radius-base);\n}\n\n.designer-event-flow-workbench__end {\n background: var(--el-text-color-secondary);\n}\n\n.designer-event-flow-workbench__configuration {\n padding: var(--daxiang-form-space-3);\n background: var(--el-bg-color);\n border-left: 1px solid var(--el-border-color-lighter);\n}\n\n.designer-event-flow-workbench__configuration > header {\n margin-bottom: var(--daxiang-form-space-3);\n}\n\n.designer-event-flow-workbench__configuration article {\n padding: var(--daxiang-form-space-2);\n margin-bottom: var(--daxiang-form-space-2);\n background: var(--el-fill-color-lighter);\n border-radius: var(--el-border-radius-base);\n}\n\n.designer-event-flow-workbench__configuration article > div,\n.designer-event-flow-workbench__guard-toggle {\n display: flex;\n align-items: center;\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-event-flow-workbench__configuration :deep(.el-segmented),\n.designer-event-flow-workbench__configuration :deep(.el-select) {\n width: 100%;\n}\n\n.designer-event-flow-workbench__welcome {\n grid-column: 2 / -1;\n}\n\n@media (width <= 980px) {\n .designer-event-flow-workbench {\n overflow: auto;\n grid-template-columns: 190px minmax(420px, 1fr);\n }\n\n .designer-event-flow-workbench__configuration {\n grid-column: 1 / -1;\n border-top: 1px solid var(--el-border-color-lighter);\n border-left: 0;\n }\n}\n</style>\n","<template>\n <article\n class=\"designer-behavior-rule-list-item\"\n :class=\"{ 'is-active': active }\"\n tabindex=\"0\"\n role=\"button\"\n @click=\"$emit('click')\"\n @keydown.enter=\"$emit('click')\"\n >\n <div class=\"designer-behavior-rule-list-item__identity\">\n <strong>{{ title }}</strong>\n <small>{{ summary }}</small>\n </div>\n <ElSwitch\n v-if=\"enabled !== undefined\"\n :model-value=\"enabled\"\n aria-label=\"启停规则\"\n @click.stop\n @update:model-value=\"$emit('toggle')\"\n />\n <div v-if=\"diagnostics.length > 0\" class=\"designer-behavior-rule-list-item__diagnostics\">\n <ElTag\n v-for=\"item in diagnostics.slice(0, 2)\"\n :key=\"`${item.code}:${item.path}`\"\n :type=\"item.severity === 'ERROR' ? 'danger' : 'warning'\"\n effect=\"plain\"\n >\n {{ item.message }}\n </ElTag>\n </div>\n <footer @click.stop>\n <ElButton text :disabled=\"moveUpDisabled\" aria-label=\"上移规则\" @click=\"$emit('move-up')\">\n <DxSvgIcon icon=\"ri:arrow-up-line\" />\n </ElButton>\n <ElButton text :disabled=\"moveDownDisabled\" aria-label=\"下移规则\" @click=\"$emit('move-down')\">\n <DxSvgIcon icon=\"ri:arrow-down-line\" />\n </ElButton>\n <ElButton text aria-label=\"复制规则\" @click=\"$emit('copy')\">\n <DxSvgIcon icon=\"ri:file-copy-line\" />\n </ElButton>\n <ElButton text type=\"danger\" aria-label=\"删除规则\" @click=\"$emit('delete')\">\n <DxSvgIcon icon=\"ri:delete-bin-line\" />\n </ElButton>\n </footer>\n </article>\n</template>\n\n<script setup lang=\"ts\">\nimport DxSvgIcon from '../infrastructure/FormIcon.vue'\nimport type { DesignerFieldBehaviorDiagnostic } from '@daxiangme/form-core'\n\ndefineOptions({ name: 'DesignerBehaviorRuleListItem' })\ndefineProps<{\n active: boolean\n title: string\n summary: string\n diagnostics: DesignerFieldBehaviorDiagnostic[]\n enabled?: boolean\n moveUpDisabled: boolean\n moveDownDisabled: boolean\n}>()\ndefineEmits<{ click: []; toggle: []; copy: []; delete: []; 'move-up': []; 'move-down': [] }>()\n</script>\n\n<style scoped>\n.designer-behavior-rule-list-item {\n display: grid;\n align-items: start;\n padding: var(--daxiang-form-space-2);\n margin-bottom: var(--daxiang-form-space-2);\n background: var(--el-fill-color-extra-light);\n border: 1px solid transparent;\n border-radius: var(--el-border-radius-base);\n cursor: pointer;\n grid-template-columns: minmax(0, 1fr) auto;\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-behavior-rule-list-item.is-active {\n background: var(--el-color-primary-light-9);\n border-color: var(--el-color-primary-light-5);\n}\n\n.designer-behavior-rule-list-item__identity {\n display: flex;\n min-width: 0;\n flex-direction: column;\n}\n\n.designer-behavior-rule-list-item__identity strong,\n.designer-behavior-rule-list-item__identity small {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.designer-behavior-rule-list-item__identity small {\n color: var(--el-text-color-secondary);\n}\n\n.designer-behavior-rule-list-item__diagnostics,\n.designer-behavior-rule-list-item footer {\n display: flex;\n min-width: 0;\n grid-column: 1 / -1;\n gap: var(--daxiang-form-space-1);\n}\n\n.designer-behavior-rule-list-item__diagnostics {\n flex-direction: column;\n}\n\n.designer-behavior-rule-list-item__diagnostics :deep(.el-tag) {\n display: block;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.designer-behavior-rule-list-item footer {\n justify-content: flex-end;\n}\n</style>\n","<template>\n <section class=\"designer-behavior-rule-workbench\">\n <header>\n <div>\n <strong>{{ title }}</strong\n ><small>{{ description }}</small>\n </div>\n <slot name=\"add\"\n ><ElButton plain @click=\"$emit('add')\"\n ><DxSvgIcon icon=\"ri:add-line\" />添加规则</ElButton\n ></slot\n >\n </header>\n <div v-if=\"!empty\" class=\"designer-behavior-rule-workbench__body\">\n <aside><slot name=\"list\" /></aside>\n <main><slot name=\"detail\" /></main>\n </div>\n <ElEmpty v-else description=\"尚未配置规则\" :image-size=\"64\" />\n </section>\n</template>\n\n<script setup lang=\"ts\">\nimport DxSvgIcon from '../infrastructure/FormIcon.vue'\n\ndefineOptions({ name: 'DesignerBehaviorRuleWorkbench' })\ndefineProps<{ title: string; description: string; empty: boolean }>()\ndefineEmits<{ add: [] }>()\n</script>\n\n<style scoped>\n.designer-behavior-rule-workbench {\n display: flex;\n min-height: 540px;\n flex-direction: column;\n}\n\n.designer-behavior-rule-workbench > header {\n display: flex;\n align-items: center;\n padding-bottom: var(--daxiang-form-space-3);\n justify-content: space-between;\n border-bottom: 1px solid var(--el-border-color-lighter);\n}\n\n.designer-behavior-rule-workbench > header > div {\n display: flex;\n flex-direction: column;\n}\n\n.designer-behavior-rule-workbench small {\n color: var(--el-text-color-secondary);\n}\n\n.designer-behavior-rule-workbench__body {\n display: grid;\n min-height: 0;\n flex: 1 1 0;\n grid-template-columns: 290px minmax(0, 1fr);\n}\n\n.designer-behavior-rule-workbench__body > aside {\n min-width: 0;\n padding: var(--daxiang-form-space-3) var(--daxiang-form-space-3) var(--daxiang-form-space-3) 0;\n overflow: auto;\n border-right: 1px solid var(--el-border-color-lighter);\n}\n\n.designer-behavior-rule-workbench__body > main {\n min-width: 0;\n padding: var(--daxiang-form-space-3) 0 var(--daxiang-form-space-3) var(--daxiang-form-space-4);\n overflow: auto;\n}\n\n@media (width <= 760px) {\n .designer-behavior-rule-workbench__body {\n display: flex;\n flex-direction: column;\n }\n\n .designer-behavior-rule-workbench__body > aside {\n max-height: 230px;\n padding-right: 0;\n border-right: 0;\n border-bottom: 1px solid var(--el-border-color-lighter);\n }\n\n .designer-behavior-rule-workbench__body > main {\n padding-left: 0;\n }\n}\n</style>\n","<template>\n <section class=\"designer-validation-rule-configuration\">\n <template v-if=\"['LENGTH', 'RANGE', 'SELECTION'].includes(rule.type)\">\n <ElFormItem label=\"最小值\">\n <ElInputNumber\n :model-value=\"numberValue('minimum')\"\n :min=\"rule.type === 'RANGE' ? -1000000000000 : 0\"\n controls-position=\"right\"\n @change=\"update('minimum', $event)\"\n />\n </ElFormItem>\n <ElFormItem label=\"最大值\">\n <ElInputNumber\n :model-value=\"numberValue('maximum')\"\n :min=\"rule.type === 'RANGE' ? -1000000000000 : 0\"\n controls-position=\"right\"\n @change=\"update('maximum', $event)\"\n />\n </ElFormItem>\n </template>\n <ElFormItem v-else-if=\"rule.type === 'PRECISION'\" label=\"最大小数位数\">\n <ElInputNumber\n :model-value=\"numberValue('scale')\"\n :min=\"0\"\n :max=\"12\"\n controls-position=\"right\"\n @change=\"update('scale', $event)\"\n />\n </ElFormItem>\n <ElFormItem v-else-if=\"rule.type === 'FORMAT'\" label=\"格式\">\n <ElSelect :model-value=\"textValue('format')\" @update:model-value=\"update('format', $event)\">\n <ElOption label=\"邮箱\" value=\"EMAIL\" />\n <ElOption label=\"电话号码\" value=\"PHONE\" />\n <ElOption label=\"稳定编码\" value=\"IDENTIFIER\" />\n </ElSelect>\n </ElFormItem>\n <ElFormItem v-else-if=\"rule.type === 'REGEX'\" label=\"安全正则表达式\">\n <ElInput\n :model-value=\"textValue('pattern')\"\n placeholder=\"例如 ^[A-Za-z0-9_]+$\"\n maxlength=\"200\"\n @update:model-value=\"update('pattern', $event)\"\n />\n </ElFormItem>\n <template v-else-if=\"rule.type === 'DATE'\">\n <ElFormItem label=\"最早时间\">\n <ElDatePicker\n :model-value=\"textValue('minimum')\"\n type=\"datetime\"\n value-format=\"YYYY-MM-DD HH:mm:ss\"\n @update:model-value=\"update('minimum', $event)\"\n />\n </ElFormItem>\n <ElFormItem label=\"最晚时间\">\n <ElDatePicker\n :model-value=\"textValue('maximum')\"\n type=\"datetime\"\n value-format=\"YYYY-MM-DD HH:mm:ss\"\n @update:model-value=\"update('maximum', $event)\"\n />\n </ElFormItem>\n </template>\n <template v-else-if=\"rule.type === 'FILE'\">\n <ElFormItem label=\"最多文件数\">\n <ElInputNumber\n :model-value=\"numberValue('maximumCount')\"\n :min=\"1\"\n :max=\"100\"\n @change=\"update('maximumCount', $event)\"\n />\n </ElFormItem>\n <ElFormItem label=\"单文件大小(MB)\">\n <ElInputNumber\n :model-value=\"numberValue('maximumSizeMb')\"\n :min=\"1\"\n :max=\"1024\"\n @change=\"update('maximumSizeMb', $event)\"\n />\n </ElFormItem>\n <ElFormItem label=\"允许类型\">\n <ElInput\n :model-value=\"textValue('accept')\"\n placeholder=\".pdf,image/*\"\n @update:model-value=\"update('accept', $event)\"\n />\n </ElFormItem>\n </template>\n <template v-else-if=\"rule.type === 'COMPARE_FIELD'\">\n <ElFormItem label=\"比较字段\">\n <ElSelect\n :model-value=\"textValue('fieldId')\"\n @update:model-value=\"update('fieldId', $event)\"\n >\n <ElOption\n v-for=\"candidate in comparisonFields\"\n :key=\"candidate.id\"\n :label=\"candidate.label\"\n :value=\"candidate.id\"\n />\n </ElSelect>\n </ElFormItem>\n <ElFormItem label=\"比较方式\">\n <ElSelect\n :model-value=\"textValue('operator')\"\n @update:model-value=\"update('operator', $event)\"\n >\n <ElOption label=\"等于\" value=\"EQ\" />\n <ElOption label=\"不等于\" value=\"NE\" />\n <ElOption label=\"大于\" value=\"GT\" />\n <ElOption label=\"大于等于\" value=\"GTE\" />\n <ElOption label=\"小于\" value=\"LT\" />\n <ElOption label=\"小于等于\" value=\"LTE\" />\n </ElSelect>\n </ElFormItem>\n </template>\n <ElFormItem v-else-if=\"rule.type === 'EXPRESSION'\" label=\"验证表达式\">\n <DesignerExpressionEditor\n :model-value=\"expressionValue\"\n :fields=\"document.dataSchema.fields\"\n :variables=\"document.variables\"\n :allow-current-row=\"allowCurrentRow\"\n mode=\"condition\"\n @update:model-value=\"update('expression', $event)\"\n />\n </ElFormItem>\n <template v-else-if=\"rule.type === 'SUBTABLE'\">\n <ElFormItem label=\"关联子表\">\n <ElSelect\n :model-value=\"textValue('containerId')\"\n @update:model-value=\"update('containerId', $event)\"\n >\n <ElOption\n v-for=\"container in subtableContainers\"\n :key=\"container.id\"\n :label=\"container.label\"\n :value=\"container.id\"\n />\n </ElSelect>\n </ElFormItem>\n <ElFormItem label=\"最少行数\">\n <ElInputNumber\n :model-value=\"numberValue('minimumRows')\"\n :min=\"0\"\n @change=\"update('minimumRows', $event)\"\n />\n </ElFormItem>\n <ElFormItem label=\"最多行数\">\n <ElInputNumber\n :model-value=\"numberValue('maximumRows')\"\n :min=\"0\"\n @change=\"update('maximumRows', $event)\"\n />\n </ElFormItem>\n </template>\n <template v-else-if=\"rule.type === 'REMOTE'\">\n <ElFormItem label=\"Provider 编码\">\n <ElInput\n :model-value=\"textValue('provider')\"\n @update:model-value=\"update('provider', $event)\"\n />\n </ElFormItem>\n <ElFormItem label=\"验证器编码\">\n <ElInput\n :model-value=\"textValue('validatorId')\"\n @update:model-value=\"update('validatorId', $event)\"\n />\n </ElFormItem>\n <ElTag type=\"warning\" effect=\"plain\">需要 Host 远程验证 Adapter</ElTag>\n </template>\n </section>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport type {\n DesignerContainerNode,\n DesignerDocument,\n DesignerExpression,\n DesignerField,\n DesignerValidationRule,\n} from '@daxiangme/form-core'\nimport DesignerExpressionEditor from './DesignerExpressionEditor.vue'\n\ndefineOptions({ name: 'DesignerValidationRuleConfiguration' })\n\nconst props = defineProps<{\n rule: DesignerValidationRule\n document: DesignerDocument\n field: DesignerField\n allowCurrentRow: boolean\n}>()\nconst emit = defineEmits<{ updateConfiguration: [key: string, value: unknown] }>()\nconst configuration = computed(() => props.rule.configuration as unknown as Record<string, unknown>)\nconst comparisonFields = computed(() =>\n props.document.dataSchema.fields.filter(\n (candidate) =>\n candidate.id !== props.field.id && candidate.entityCode === props.field.entityCode,\n ),\n)\nconst expressionValue = computed(() => {\n const value = configuration.value.expression\n return typeof value === 'object' && value !== null ? (value as DesignerExpression) : undefined\n})\nconst subtableContainers = computed(() => {\n const result: Array<{ id: string; label: string }> = []\n const visit = (nodes: DesignerDocument['uiSchema']['root']): void => {\n for (const node of nodes) {\n if (node.nodeType !== 'CONTAINER') continue\n if (['row-subtable', 'block-subtable'].includes(node.componentType)) {\n result.push({ id: node.id, label: containerLabel(node) })\n }\n node.slots.forEach((slot) => visit(slot.children))\n }\n }\n visit(props.document.uiSchema.root)\n props.document.uiSchema.overlays.forEach((overlay) => visit(overlay.root))\n return result\n})\n\nfunction update(key: string, value: unknown): void {\n emit('updateConfiguration', key, value)\n}\n\nfunction numberValue(key: string): number | undefined {\n const value = configuration.value[key]\n return typeof value === 'number' ? value : undefined\n}\n\nfunction textValue(key: string): string {\n const value = configuration.value[key]\n return typeof value === 'string' ? value : ''\n}\n\nfunction containerLabel(container: DesignerContainerNode): string {\n const title = container.configuration.title\n return typeof title === 'string' && title ? title : container.componentType\n}\n</script>\n\n<style scoped>\n.designer-validation-rule-configuration {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 0 var(--daxiang-form-space-3);\n}\n\n.designer-validation-rule-configuration > :only-child,\n.designer-validation-rule-configuration > .el-tag {\n grid-column: 1 / -1;\n}\n\n.designer-validation-rule-configuration :deep(.el-select),\n.designer-validation-rule-configuration :deep(.el-input-number),\n.designer-validation-rule-configuration :deep(.el-date-editor) {\n width: 100%;\n}\n\n@media (width <= 760px) {\n .designer-validation-rule-configuration {\n grid-template-columns: 1fr;\n }\n}\n</style>\n","<template>\n <DModal\n v-model=\"visibleModel\"\n :title=\"`${field.label} · 高级配置`\"\n width=\"min(1120px, calc(100vw - 32px))\"\n confirm-text=\"保存配置\"\n :confirm-disabled=\"hasErrors\"\n :flush-content-vertical=\"true\"\n @confirm=\"save\"\n >\n <template v-if=\"editingFlow\">\n <div class=\"designer-advanced-behavior__event-heading\">\n <ElButton text @click=\"finishEditingFlow\"\n ><DxSvgIcon icon=\"ri:arrow-left-line\" />返回高级配置</ElButton\n >\n <div>\n <strong>{{ editingFlow.name }}</strong\n ><small>事件步骤与字段行为将在保存配置时原子提交</small>\n </div>\n </div>\n <DesignerEventFlowWorkbench\n v-model=\"draftFlows\"\n :document=\"document\"\n :selected-node-id=\"selectedNodeId\"\n :initial-flow-id=\"editingFlow.id\"\n :editable-flow-codes=\"[editingFlow.code]\"\n :allow-create=\"false\"\n :allow-delete=\"false\"\n lock-identity\n :capabilities=\"capabilities\"\n />\n </template>\n\n <ElTabs v-else v-model=\"activeTab\" class=\"designer-advanced-behavior\">\n <ElTabPane :label=\"tabLabel('state', '状态条件', draft.stateRules.length)\" name=\"state\">\n <RuleWorkbench\n title=\"状态规则\"\n description=\"条件成立时改变字段的显示、必填或禁用状态\"\n :empty=\"draft.stateRules.length === 0\"\n @add=\"addStateRule\"\n >\n <template #list>\n <RuleListItem\n v-for=\"(rule, index) in draft.stateRules\"\n :key=\"rule.id\"\n :active=\"selectedStateId === rule.id\"\n :title=\"stateRuleTitle(rule)\"\n :summary=\"summarizeDesignerStateRule(rule)\"\n :diagnostics=\"diagnosticsForRule(rule.id)\"\n :move-up-disabled=\"index === 0\"\n :move-down-disabled=\"index === draft.stateRules.length - 1\"\n @click=\"selectedStateId = rule.id\"\n @copy=\"copyRule(draft.stateRules, index, 'state')\"\n @delete=\"removeRule(draft.stateRules, index, 'state')\"\n @move-up=\"moveRule(draft.stateRules, index, -1)\"\n @move-down=\"moveRule(draft.stateRules, index, 1)\"\n />\n </template>\n <template #detail>\n <ElForm v-if=\"selectedStateRule\" label-position=\"top\">\n <div class=\"designer-advanced-behavior__detail-grid\">\n <ElFormItem label=\"改变状态\">\n <ElSelect v-model=\"selectedStateRule.target\">\n <ElOption label=\"显示状态\" value=\"VISIBLE\" />\n <ElOption label=\"必填状态\" value=\"REQUIRED\" />\n <ElOption label=\"禁用状态\" value=\"DISABLED\" />\n </ElSelect>\n </ElFormItem>\n <ElFormItem label=\"条件成立时\">\n <ElSegmented\n v-model=\"selectedStateRule.valueWhenTrue\"\n :options=\"booleanOptions\"\n />\n </ElFormItem>\n </div>\n <ElFormItem label=\"执行条件\">\n <DesignerExpressionEditor\n v-model=\"selectedStateRule.condition\"\n :fields=\"document.dataSchema.fields\"\n :variables=\"document.variables\"\n :allow-current-row=\"allowCurrentRow\"\n mode=\"condition\"\n />\n </ElFormItem>\n </ElForm>\n </template>\n </RuleWorkbench>\n </ElTabPane>\n\n <ElTabPane :label=\"tabLabel('value', '计算与联动', draft.valueRules.length)\" name=\"value\">\n <RuleWorkbench\n title=\"计算与联动规则\"\n description=\"公式确定性重算;联动只响应依赖字段变化\"\n :empty=\"draft.valueRules.length === 0\"\n @add=\"addValueRule\"\n >\n <template #list>\n <RuleListItem\n v-for=\"(rule, index) in draft.valueRules\"\n :key=\"rule.id\"\n :active=\"selectedValueId === rule.id\"\n :title=\"rule.mode === 'FORMULA' ? '计算公式' : '数据联动'\"\n :summary=\"summarizeDesignerValueRule(rule)\"\n :diagnostics=\"diagnosticsForRule(rule.id)\"\n :move-up-disabled=\"index === 0\"\n :move-down-disabled=\"index === draft.valueRules.length - 1\"\n @click=\"selectedValueId = rule.id\"\n @copy=\"copyRule(draft.valueRules, index, 'value')\"\n @delete=\"removeRule(draft.valueRules, index, 'value')\"\n @move-up=\"moveRule(draft.valueRules, index, -1)\"\n @move-down=\"moveRule(draft.valueRules, index, 1)\"\n />\n </template>\n <template #detail>\n <ElForm v-if=\"selectedValueRule\" label-position=\"top\">\n <ElFormItem label=\"规则类型\">\n <ElSegmented\n :model-value=\"selectedValueRule.mode\"\n :options=\"[\n { label: '计算公式', value: 'FORMULA' },\n { label: '数据联动', value: 'LINKAGE' },\n ]\"\n @update:model-value=\"changeValueMode($event)\"\n />\n <small>\n {{\n selectedValueRule.mode === 'FORMULA'\n ? '公式字段在编辑态只读,并随依赖变化按拓扑顺序重算。'\n : '联动只在表达式或条件依赖字段变化时执行。'\n }}\n </small>\n </ElFormItem>\n <ElFormItem v-if=\"selectedValueRule.mode === 'LINKAGE'\" label=\"已有值覆盖策略\">\n <ElSegmented\n v-model=\"selectedValueRule.overwritePolicy\"\n :options=\"[\n { label: '始终覆盖', value: 'ALWAYS' },\n { label: '仅空值', value: 'EMPTY_ONLY' },\n { label: '覆盖前确认', value: 'CONFIRM' },\n ]\"\n />\n </ElFormItem>\n <ElFormItem label=\"设置值\">\n <DesignerExpressionEditor\n v-model=\"selectedValueRule.expression\"\n :fields=\"document.dataSchema.fields\"\n :variables=\"document.variables\"\n :allow-current-row=\"allowCurrentRow\"\n mode=\"value\"\n />\n </ElFormItem>\n <ElFormItem label=\"执行条件\">\n <ElSwitch\n :model-value=\"selectedValueRule.condition !== undefined\"\n active-text=\"仅条件成立时执行\"\n @update:model-value=\"toggleValueRuleCondition($event === true)\"\n />\n <DesignerExpressionEditor\n v-if=\"selectedValueRule.condition\"\n v-model=\"selectedValueRule.condition\"\n :fields=\"document.dataSchema.fields\"\n :variables=\"document.variables\"\n :allow-current-row=\"allowCurrentRow\"\n mode=\"condition\"\n />\n </ElFormItem>\n </ElForm>\n </template>\n </RuleWorkbench>\n </ElTabPane>\n\n <ElTabPane\n :label=\"tabLabel('validation', '验证规则', draft.validationRules.length)\"\n name=\"validation\"\n >\n <RuleWorkbench\n title=\"验证规则\"\n description=\"验证数据是否正确,与必填互相独立\"\n :empty=\"draft.validationRules.length === 0\"\n >\n <template #add>\n <ElDropdown trigger=\"click\" @command=\"addValidationRule\">\n <ElButton plain><DxSvgIcon icon=\"ri:add-line\" />添加规则</ElButton>\n <template #dropdown>\n <ElDropdownMenu>\n <ElDropdownItem\n v-for=\"item in validationCatalog\"\n :key=\"item.type\"\n :command=\"item.type\"\n :disabled=\"!item.available\"\n >\n <span>{{ item.label }}</span>\n <small v-if=\"!item.available\">{{ item.unavailableReason }}</small>\n </ElDropdownItem>\n </ElDropdownMenu>\n </template>\n </ElDropdown>\n </template>\n <template #list>\n <RuleListItem\n v-for=\"(rule, index) in draft.validationRules\"\n :key=\"rule.id\"\n :active=\"selectedValidationId === rule.id\"\n :title=\"rule.name || '未命名验证规则'\"\n :summary=\"summarizeDesignerValidationRule(rule)\"\n :diagnostics=\"diagnosticsForRule(rule.id)\"\n :enabled=\"rule.enabled\"\n :move-up-disabled=\"index === 0\"\n :move-down-disabled=\"index === draft.validationRules.length - 1\"\n @click=\"selectedValidationId = rule.id\"\n @toggle=\"rule.enabled = !rule.enabled\"\n @copy=\"copyRule(draft.validationRules, index, 'validation')\"\n @delete=\"removeRule(draft.validationRules, index, 'validation')\"\n @move-up=\"moveRule(draft.validationRules, index, -1)\"\n @move-down=\"moveRule(draft.validationRules, index, 1)\"\n />\n </template>\n <template #detail>\n <ElForm v-if=\"selectedValidationRule\" label-position=\"top\">\n <div class=\"designer-advanced-behavior__validation-meta\">\n <ElFormItem label=\"规则名称\">\n <ElInput v-model=\"selectedValidationRule.name\" maxlength=\"60\" />\n </ElFormItem>\n <ElFormItem label=\"规则类型\">\n <ElSelect\n :model-value=\"selectedValidationRule.type\"\n @update:model-value=\"changeValidationType($event)\"\n >\n <ElOption\n v-for=\"item in validationCatalogWithLegacy\"\n :key=\"item.type\"\n :label=\"item.label\"\n :value=\"item.type\"\n :disabled=\"!item.available\"\n />\n </ElSelect>\n </ElFormItem>\n <ElFormItem label=\"触发时机\">\n <ElSelect v-model=\"selectedValidationRule.trigger\">\n <ElOption label=\"值变化\" value=\"CHANGE\" />\n <ElOption label=\"失焦\" value=\"BLUR\" />\n <ElOption label=\"提交\" value=\"SUBMIT\" />\n </ElSelect>\n </ElFormItem>\n <ElFormItem label=\"反馈级别\">\n <ElSelect v-model=\"selectedValidationRule.severity\">\n <ElOption label=\"阻断错误\" value=\"ERROR\" />\n <ElOption label=\"字段警告\" value=\"WARNING\" />\n </ElSelect>\n </ElFormItem>\n </div>\n <ValidationRuleConfiguration\n :rule=\"selectedValidationRule\"\n :document=\"document\"\n :field=\"field\"\n :allow-current-row=\"allowCurrentRow\"\n @update-configuration=\"setSelectedValidationConfiguration\"\n />\n <ElFormItem label=\"校验条件\">\n <ElSwitch\n :model-value=\"selectedValidationRule.condition !== undefined\"\n active-text=\"仅条件成立时验证\"\n @update:model-value=\"toggleValidationCondition($event === true)\"\n />\n <DesignerExpressionEditor\n v-if=\"selectedValidationRule.condition\"\n v-model=\"selectedValidationRule.condition\"\n :fields=\"document.dataSchema.fields\"\n :variables=\"document.variables\"\n :allow-current-row=\"allowCurrentRow\"\n mode=\"condition\"\n />\n </ElFormItem>\n <ElFormItem label=\"失败提示\">\n <ElInput v-model=\"selectedValidationRule.message\" maxlength=\"160\" />\n </ElFormItem>\n </ElForm>\n </template>\n </RuleWorkbench>\n </ElTabPane>\n\n <ElTabPane :label=\"tabLabel('submit', '提交与事件', supportedEvents.length)\" name=\"submit\">\n <section class=\"designer-advanced-behavior__submit\">\n <ElForm label-position=\"top\">\n <ElFormItem label=\"提交行为\">\n <ElSegmented\n v-model=\"draft.submitBehavior\"\n :options=\"[\n { label: '跟随表单', value: 'AUTO' },\n { label: '始终提交', value: 'INCLUDE' },\n { label: '忽略提交', value: 'EXCLUDE' },\n ]\"\n />\n <small>忽略提交只影响最终数据投影,字段仍可展示和参与页面联动。</small>\n </ElFormItem>\n </ElForm>\n <div class=\"designer-advanced-behavior__events\">\n <article v-for=\"event in supportedEvents\" :key=\"event\">\n <div>\n <strong>{{ eventLabel(event) }}事件</strong>\n <small>{{ boundFlow(event)?.name ?? '尚未创建事件流' }}</small>\n </div>\n <ElButton\n v-if=\"!boundFlow(event)\"\n text\n type=\"primary\"\n @click=\"createEventFlow(event)\"\n >\n 创建\n </ElButton>\n <template v-else>\n <ElButton text type=\"primary\" @click=\"editEventFlow(event)\">编辑</ElButton>\n <ElButton text type=\"danger\" @click=\"unbindEvent(event)\">解绑</ElButton>\n </template>\n </article>\n </div>\n </section>\n </ElTabPane>\n </ElTabs>\n\n <ElAlert\n v-if=\"!editingFlow && diagnostics.length > 0\"\n class=\"designer-advanced-behavior__diagnostics\"\n :type=\"hasErrors ? 'error' : 'warning'\"\n :closable=\"false\"\n show-icon\n >\n <template #title>{{\n hasErrors ? '请修正错误后保存' : '配置可保存,但存在能力警告'\n }}</template>\n <button\n v-for=\"item in diagnostics.slice(0, 5)\"\n :key=\"`${item.code}:${item.path}:${item.ruleId ?? ''}`\"\n type=\"button\"\n @click=\"locateDiagnostic(item)\"\n >\n {{ item.message }}\n </button>\n </ElAlert>\n </DModal>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, reactive, watch } from 'vue'\nimport DModal from '../infrastructure/FormModalShell.vue'\nimport DxSvgIcon from '../infrastructure/FormIcon.vue'\nimport { createDefaultDesignerFieldBehavior } from '@daxiangme/form-core'\nimport {\n createDesignerStateRule,\n createDesignerValidationRule,\n createDesignerValueRule,\n diagnoseDesignerFieldBehaviorDraft,\n resolveDesignerValidationCatalog,\n summarizeDesignerStateRule,\n summarizeDesignerValidationRule,\n summarizeDesignerValueRule,\n type DesignerFieldBehaviorCapabilities,\n type DesignerFieldBehaviorDiagnostic,\n type DesignerValidationCatalogItem,\n} from '@daxiangme/form-core'\nimport type {\n DesignerComponentEvent,\n DesignerDocument,\n DesignerEventFlow,\n DesignerField,\n DesignerFieldBehavior,\n DesignerFieldStateRule,\n DesignerValidationRule,\n DesignerValidationRuleType,\n} from '@daxiangme/form-core'\nimport DesignerEventFlowWorkbench from './DesignerEventFlowWorkbench.vue'\nimport DesignerExpressionEditor from './DesignerExpressionEditor.vue'\nimport RuleListItem from './DesignerBehaviorRuleListItem.vue'\nimport RuleWorkbench from './DesignerBehaviorRuleWorkbench.vue'\nimport ValidationRuleConfiguration from './DesignerValidationRuleConfiguration.vue'\n\ndefineOptions({ name: 'DesignerAdvancedBehaviorEditor' })\n\nconst props = defineProps<{\n field: DesignerField\n document: DesignerDocument\n selectedNodeId: string\n supportedEvents: DesignerComponentEvent[]\n capabilities: DesignerFieldBehaviorCapabilities\n}>()\nconst emit = defineEmits<{\n save: [payload: { behavior: DesignerFieldBehavior; eventFlows: DesignerEventFlow[] }]\n}>()\nconst visibleModel = defineModel<boolean>({ default: false })\nconst activeTab = ref<DesignerFieldBehaviorDiagnostic['tab']>('state')\nconst draft = reactive<DesignerFieldBehavior>(createDefaultDesignerFieldBehavior())\nconst draftFlows = ref<DesignerEventFlow[]>([])\nconst selectedStateId = ref('')\nconst selectedValueId = ref('')\nconst selectedValidationId = ref('')\nconst editingFlowId = ref('')\nconst editingEvent = ref<DesignerComponentEvent>()\nconst booleanOptions = [\n { label: '是', value: true },\n { label: '否', value: false },\n]\nconst allowCurrentRow = computed(\n () => props.field.entityCode !== props.document.dataSchema.rootEntity.code,\n)\nconst validationCatalog = computed(() =>\n resolveDesignerValidationCatalog(props.document, props.field, props.capabilities),\n)\nconst validationCatalogWithLegacy = computed<DesignerValidationCatalogItem[]>(() => {\n const result = [...validationCatalog.value]\n const existing = selectedValidationRule.value?.type\n if (existing && !result.some((item) => item.type === existing)) {\n result.push({\n type: existing,\n label: `历史规则 · ${existing}`,\n description: '当前组件不再适用该规则,保存前请确认是否保留',\n available: false,\n unavailableReason: '当前组件不适用',\n })\n }\n return result\n})\nconst selectedStateRule = computed(() =>\n draft.stateRules.find((rule) => rule.id === selectedStateId.value),\n)\nconst selectedValueRule = computed(() =>\n draft.valueRules.find((rule) => rule.id === selectedValueId.value),\n)\nconst selectedValidationRule = computed(() =>\n draft.validationRules.find((rule) => rule.id === selectedValidationId.value),\n)\nconst editingFlow = computed(() => draftFlows.value.find((flow) => flow.id === editingFlowId.value))\nconst diagnostics = computed(() =>\n diagnoseDesignerFieldBehaviorDraft({\n document: props.document,\n fieldId: props.field.id,\n behavior: cloneValue(draft),\n eventFlows: draftFlows.value,\n capabilities: props.capabilities,\n }),\n)\nconst hasErrors = computed(() => diagnostics.value.some((item) => item.severity === 'ERROR'))\n\nwatch(\n visibleModel,\n (visible) => {\n if (!visible) return\n Object.assign(draft, cloneValue(props.field.behavior))\n draftFlows.value = cloneValue(props.document.eventFlows)\n selectedStateId.value = draft.stateRules[0]?.id ?? ''\n selectedValueId.value = draft.valueRules[0]?.id ?? ''\n selectedValidationId.value = draft.validationRules[0]?.id ?? ''\n editingFlowId.value = ''\n editingEvent.value = undefined\n },\n { immediate: true },\n)\n\nfunction addStateRule(): void {\n const rule = createDesignerStateRule(props.document, props.field)\n draft.stateRules.push(rule)\n selectedStateId.value = rule.id\n}\n\nfunction addValueRule(): void {\n const rule = createDesignerValueRule('FORMULA')\n draft.valueRules.push(rule)\n selectedValueId.value = rule.id\n}\n\nfunction addValidationRule(command: string | number | object): void {\n if (typeof command !== 'string') return\n const catalog = validationCatalog.value.find((item) => item.type === command)\n if (!catalog?.available) return\n const rule = createDesignerValidationRule(\n command as DesignerValidationRuleType,\n props.document,\n props.field,\n draft.validationRules.length + 1,\n )\n draft.validationRules.push(rule)\n selectedValidationId.value = rule.id\n}\n\nfunction changeValueMode(value: unknown): void {\n const rule = selectedValueRule.value\n if (!rule || (value !== 'FORMULA' && value !== 'LINKAGE') || rule.mode === value) return\n const index = draft.valueRules.findIndex((item) => item.id === rule.id)\n const replacement = createDesignerValueRule(value)\n replacement.id = rule.id\n replacement.expression = rule.expression\n replacement.condition = rule.condition\n draft.valueRules.splice(index, 1, replacement)\n}\n\nfunction changeValidationType(value: unknown): void {\n const rule = selectedValidationRule.value\n if (!rule || typeof value !== 'string' || rule.type === value) return\n const catalog = validationCatalog.value.find((item) => item.type === value)\n if (!catalog?.available) return\n const index = draft.validationRules.findIndex((item) => item.id === rule.id)\n const replacement = createDesignerValidationRule(\n value as DesignerValidationRuleType,\n props.document,\n props.field,\n index + 1,\n )\n Object.assign(replacement, {\n id: rule.id,\n name: rule.name,\n enabled: rule.enabled,\n trigger: rule.trigger,\n severity: rule.severity,\n message: rule.message,\n condition: rule.condition,\n })\n draft.validationRules.splice(index, 1, replacement)\n}\n\nfunction setSelectedValidationConfiguration(key: string, value: unknown): void {\n const rule = selectedValidationRule.value\n if (!rule) return\n rule.configuration = {\n ...(rule.configuration as unknown as Record<string, unknown>),\n [key]: value,\n } as DesignerValidationRule['configuration']\n}\n\nfunction toggleValueRuleCondition(enabled: boolean): void {\n const rule = selectedValueRule.value\n if (!rule) return\n rule.condition = enabled ? (rule.condition ?? defaultCondition()) : undefined\n}\n\nfunction toggleValidationCondition(enabled: boolean): void {\n const rule = selectedValidationRule.value\n if (!rule) return\n rule.condition = enabled ? (rule.condition ?? defaultCondition()) : undefined\n}\n\nfunction copyRule<T extends { id: string }>(items: T[], index: number, prefix: string): void {\n const source = items[index]\n if (!source) return\n const copy = cloneValue(source)\n copy.id = createId(prefix)\n if ('name' in copy && typeof copy.name === 'string') copy.name = `${copy.name}副本`\n items.splice(index + 1, 0, copy)\n selectRule(prefix, copy.id)\n}\n\nfunction removeRule<T extends { id: string }>(items: T[], index: number, prefix: string): void {\n const removed = items[index]\n if (!removed) return\n items.splice(index, 1)\n const selectedId =\n prefix === 'state'\n ? selectedStateId\n : prefix === 'value'\n ? selectedValueId\n : selectedValidationId\n if (selectedId.value === removed.id) selectedId.value = items[Math.max(0, index - 1)]?.id ?? ''\n}\n\nfunction moveRule<T>(items: T[], index: number, offset: -1 | 1): void {\n const target = index + offset\n if (target < 0 || target >= items.length) return\n const [item] = items.splice(index, 1)\n if (item) items.splice(target, 0, item)\n}\n\nfunction selectRule(prefix: string, id: string): void {\n if (prefix === 'state') selectedStateId.value = id\n if (prefix === 'value') selectedValueId.value = id\n if (prefix === 'validation') selectedValidationId.value = id\n}\n\nfunction boundFlow(event: DesignerComponentEvent): DesignerEventFlow | undefined {\n const code = draft.eventBindings[event]\n return code ? draftFlows.value.find((flow) => flow.code === code) : undefined\n}\n\nfunction createEventFlow(event: DesignerComponentEvent): void {\n const code = uniqueEventCode(event)\n const flow: DesignerEventFlow = {\n id: createId('flow'),\n code,\n name: `${props.field.label}${eventLabel(event)}事件`,\n trigger: { scope: 'COMPONENT', event, nodeId: props.selectedNodeId },\n enabled: true,\n steps: [],\n }\n draftFlows.value.push(flow)\n draft.eventBindings[event] = code\n editingEvent.value = event\n editingFlowId.value = flow.id\n}\n\nfunction editEventFlow(event: DesignerComponentEvent): void {\n const flow = boundFlow(event)\n if (!flow) return\n editingEvent.value = event\n editingFlowId.value = flow.id\n}\n\nfunction unbindEvent(event: DesignerComponentEvent): void {\n delete draft.eventBindings[event]\n}\n\nfunction finishEditingFlow(): void {\n editingFlowId.value = ''\n editingEvent.value = undefined\n activeTab.value = 'submit'\n}\n\nfunction stateRuleTitle(rule: DesignerFieldStateRule): string {\n return { VISIBLE: '显示状态', REQUIRED: '必填状态', DISABLED: '禁用状态' }[rule.target]\n}\n\nfunction tabLabel(\n tab: DesignerFieldBehaviorDiagnostic['tab'],\n label: string,\n count: number,\n): string {\n const errors = diagnostics.value.filter(\n (item) => item.tab === tab && item.severity === 'ERROR',\n ).length\n return errors > 0 ? `${label} ${count} · ${errors} 错误` : `${label} ${count}`\n}\n\nfunction diagnosticsForRule(ruleId: string): DesignerFieldBehaviorDiagnostic[] {\n return diagnostics.value.filter((item) => item.ruleId === ruleId)\n}\n\nfunction locateDiagnostic(item: DesignerFieldBehaviorDiagnostic): void {\n activeTab.value = item.tab\n if (!item.ruleId) return\n selectRule(item.tab, item.ruleId)\n}\n\nfunction eventLabel(event: DesignerComponentEvent): string {\n return { CHANGE: '值变化', BLUR: '失焦', FOCUS: '聚焦', CLICK: '点击' }[event]\n}\n\nfunction defaultCondition() {\n const fieldId =\n props.document.dataSchema.fields.find((item) => item.entityCode === props.field.entityCode)\n ?.id ?? props.field.id\n return {\n kind: 'CALL' as const,\n function: 'NOT_EMPTY' as const,\n arguments: [\n {\n kind: 'FIELD' as const,\n fieldId,\n scope:\n props.field.entityCode === props.document.dataSchema.rootEntity.code\n ? ('ROOT' as const)\n : ('CURRENT_ROW' as const),\n },\n ],\n }\n}\n\nfunction uniqueEventCode(event: DesignerComponentEvent): string {\n const base = `${props.field.key}_${event.toLocaleLowerCase()}`\n .replace(/[^A-Za-z0-9_]/g, '_')\n .replace(/^[^A-Za-z]+/, 'event_')\n .slice(0, 56)\n const existing = new Set(draftFlows.value.map((flow) => flow.code))\n let candidate = base || 'event_component'\n let serial = 2\n while (existing.has(candidate)) candidate = `${base.slice(0, 52)}_${serial++}`\n return candidate\n}\n\nfunction save(): void {\n if (hasErrors.value) return\n emit('save', { behavior: cloneValue(draft), eventFlows: cloneValue(draftFlows.value) })\n visibleModel.value = false\n}\n\nfunction createId(prefix: string): string {\n return `${prefix}-${crypto.randomUUID().replaceAll('-', '')}`\n}\n\nfunction cloneValue<T>(value: T): T {\n return JSON.parse(JSON.stringify(value)) as T\n}\n</script>\n\n<style scoped>\n.designer-advanced-behavior {\n min-height: 590px;\n}\n\n.designer-advanced-behavior__event-heading {\n display: flex;\n align-items: center;\n margin-bottom: var(--daxiang-form-space-3);\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-advanced-behavior__event-heading > div {\n display: flex;\n flex-direction: column;\n}\n\n.designer-advanced-behavior__detail-grid,\n.designer-advanced-behavior__validation-meta {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 0 var(--daxiang-form-space-3);\n}\n\n.designer-advanced-behavior__validation-meta {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n}\n\n.designer-advanced-behavior__submit {\n min-height: 500px;\n}\n\n.designer-advanced-behavior__submit :deep(.el-segmented) {\n width: 100%;\n}\n\n.designer-advanced-behavior__submit small,\n.designer-advanced-behavior__event-heading small {\n color: var(--el-text-color-secondary);\n}\n\n.designer-advanced-behavior__events {\n display: flex;\n flex-direction: column;\n border-top: 1px solid var(--el-border-color-lighter);\n}\n\n.designer-advanced-behavior__events article {\n display: flex;\n align-items: center;\n min-height: 64px;\n border-bottom: 1px solid var(--el-border-color-lighter);\n}\n\n.designer-advanced-behavior__events article > div {\n display: flex;\n min-width: 0;\n flex: 1 1 0;\n flex-direction: column;\n}\n\n.designer-advanced-behavior__diagnostics {\n margin-top: var(--daxiang-form-space-3);\n}\n\n.designer-advanced-behavior__diagnostics :deep(.el-alert__content) {\n width: 100%;\n}\n\n.designer-advanced-behavior__diagnostics button {\n display: block;\n width: 100%;\n padding: 2px 0;\n color: inherit;\n text-align: left;\n background: transparent;\n border: 0;\n cursor: pointer;\n}\n\n@media (width <= 860px) {\n .designer-advanced-behavior__validation-meta,\n .designer-advanced-behavior__detail-grid {\n grid-template-columns: 1fr;\n }\n}\n</style>\n","<template>\n <div class=\"designer-default-value-editor\">\n <ElInputNumber\n v-if=\"field.semanticType === 'NUMBER' && field.componentType !== 'rate'\"\n :model-value=\"numberValue\"\n :min=\"numberConfiguration('minimum')\"\n :max=\"numberConfiguration('maximum')\"\n :step=\"numberConfiguration('step') ?? 1\"\n :precision=\"integerConfiguration('precision')\"\n @update:model-value=\"emitValue($event ?? null)\"\n />\n <ElRate\n v-else-if=\"field.componentType === 'rate'\"\n :model-value=\"numberValue ?? 0\"\n :max=\"integerConfiguration('max') ?? 5\"\n :allow-half=\"field.configuration.allowHalf === true\"\n clearable\n @update:model-value=\"emitValue\"\n />\n <ElSwitch\n v-else-if=\"field.semanticType === 'BOOLEAN'\"\n :model-value=\"field.defaultValue === true\"\n @update:model-value=\"emitValue(Boolean($event))\"\n />\n <ElDatePicker\n v-else-if=\"field.componentType === 'date'\"\n :model-value=\"stringValue\"\n :type=\"datePickerType\"\n :value-format=\"dateValueFormat\"\n clearable\n @update:model-value=\"emitValue($event ?? '')\"\n />\n <ElSelect\n v-else-if=\"field.componentType === 'steps'\"\n :model-value=\"primitiveValue\"\n clearable\n placeholder=\"请选择默认步骤\"\n @update:model-value=\"emitValue\"\n >\n <ElOption\n v-for=\"option in fieldOptions\"\n :key=\"String(option.value)\"\n :label=\"option.label\"\n :value=\"option.value\"\n :disabled=\"option.disabled\"\n />\n </ElSelect>\n <ElSelect\n v-else-if=\"usesOptionDefault\"\n :model-value=\"optionDefaultValue\"\n :multiple=\"multipleOptionDefault\"\n clearable\n placeholder=\"请选择默认值\"\n @update:model-value=\"emitValue\"\n >\n <ElOption\n v-for=\"option in fieldOptions\"\n :key=\"String(option.value)\"\n :label=\"option.label\"\n :value=\"option.value\"\n :disabled=\"option.disabled\"\n />\n </ElSelect>\n <template v-else-if=\"defaultValueUnavailable\">\n <ElTag effect=\"plain\" type=\"info\">不设置默认值</ElTag>\n <small>{{ defaultValueUnavailable }}</small>\n </template>\n <ElInput\n v-else\n :model-value=\"stringValue\"\n :maxlength=\"textMaximumLength\"\n @update:model-value=\"emitValue\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport type { DesignerField, DesignerOption } from '@daxiangme/form-core'\n\ndefineOptions({ name: 'DesignerFieldDefaultValueEditor' })\n\nconst props = defineProps<{ field: DesignerField }>()\nconst emit = defineEmits<{ 'update:modelValue': [value: unknown] }>()\n\nconst numberValue = computed(() =>\n typeof props.field.defaultValue === 'number' && Number.isFinite(props.field.defaultValue)\n ? props.field.defaultValue\n : undefined,\n)\nconst stringValue = computed(() =>\n typeof props.field.defaultValue === 'string' ? props.field.defaultValue : '',\n)\nconst primitiveValue = computed(() =>\n ['string', 'number', 'boolean'].includes(typeof props.field.defaultValue)\n ? (props.field.defaultValue as string | number | boolean)\n : undefined,\n)\nconst fieldOptions = computed(() => normalizeFieldOptions(props.field.configuration.options))\nconst multipleOptionDefault = computed(\n () =>\n ['multi-select', 'checkbox'].includes(props.field.componentType) ||\n (props.field.componentType === 'dynamic-select' && props.field.configuration.multiple === true),\n)\nconst optionDefaultValue = computed(() => {\n if (multipleOptionDefault.value)\n return Array.isArray(props.field.defaultValue) ? props.field.defaultValue : []\n return primitiveValue.value\n})\nconst usesOptionDefault = computed(() =>\n ['select', 'multi-select', 'checkbox', 'radio', 'dynamic-select'].includes(\n props.field.componentType,\n ),\n)\nconst defaultValueUnavailable = computed(() => {\n if (props.field.semanticType === 'FILE')\n return '文件默认值必须来自受控文件资源,静态 Core 不伪造文件引用'\n if (props.field.semanticType === 'OBJECT') return '对象默认值必须由对应能力 Adapter 提供'\n if (props.field.semanticType === 'REFERENCE')\n return '资源引用 Adapter 尚未接入,不能设置伪造默认值'\n if (props.field.semanticType === 'ARRAY' && !usesOptionDefault.value)\n return '当前数组组件不支持静态默认值'\n return ''\n})\nconst datePickerType = computed<'date' | 'datetime' | 'month' | 'year'>(() => {\n const configured = props.field.configuration.dateType\n return ['date', 'datetime', 'month', 'year'].includes(String(configured))\n ? (configured as 'date' | 'datetime' | 'month' | 'year')\n : 'date'\n})\nconst dateValueFormat = computed(() => {\n if (datePickerType.value === 'datetime') return 'YYYY-MM-DD HH:mm:ss'\n if (datePickerType.value === 'month') return 'YYYY-MM'\n if (datePickerType.value === 'year') return 'YYYY'\n return 'YYYY-MM-DD'\n})\nconst textMaximumLength = computed(() => {\n const configured = props.field.configuration.maxLength\n return typeof configured === 'number' && Number.isInteger(configured) ? configured : undefined\n})\n\nfunction emitValue(value: unknown): void {\n emit('update:modelValue', value)\n}\n\nfunction numberConfiguration(key: string): number | undefined {\n const value = props.field.configuration[key]\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined\n}\n\nfunction integerConfiguration(key: string): number | undefined {\n const value = numberConfiguration(key)\n return value !== undefined && Number.isInteger(value) ? value : undefined\n}\n\nfunction normalizeFieldOptions(value: unknown): DesignerOption[] {\n if (!Array.isArray(value)) return []\n return value.filter(\n (item): item is DesignerOption =>\n typeof item === 'object' &&\n item !== null &&\n typeof (item as DesignerOption).label === 'string' &&\n ['string', 'number', 'boolean'].includes(typeof (item as DesignerOption).value),\n )\n}\n</script>\n\n<style scoped>\n.designer-default-value-editor,\n.designer-default-value-editor :deep(.el-select),\n.designer-default-value-editor :deep(.el-input-number),\n.designer-default-value-editor :deep(.el-date-editor) {\n width: 100%;\n}\n\n.designer-default-value-editor small {\n display: block;\n margin-top: var(--daxiang-form-space-1);\n color: var(--el-text-color-secondary);\n font-size: 12px;\n}\n</style>\n","<template>\n <DModal\n v-model=\"visibleModel\"\n title=\"批量设置字段默认值\"\n width=\"min(760px, calc(100vw - 32px))\"\n confirm-text=\"应用默认值\"\n :confirm-disabled=\"selectedIds.length === 0\"\n :flush-content-vertical=\"true\"\n @confirm=\"save\"\n >\n <ElAlert\n type=\"info\"\n :closable=\"false\"\n show-icon\n title=\"整次应用形成一个可撤销命令\"\n description=\"主键、系统字段、文件、对象和未接 Adapter 的引用字段已自动排除。\"\n />\n <div class=\"designer-batch-default-editor\">\n <article v-for=\"field in fields\" :key=\"field.id\">\n <ElCheckbox v-model=\"selectedMap[field.id]\" :label=\"field.id\">\n <span\n ><strong>{{ field.label }}</strong\n ><small>{{ field.key }} · {{ field.semanticType }}</small></span\n >\n </ElCheckbox>\n <DesignerFieldDefaultValueEditor\n :field=\"draftField(field)\"\n @update:model-value=\"values[field.id] = $event\"\n />\n </article>\n <ElEmpty v-if=\"fields.length === 0\" description=\"当前文档没有可批量设置的字段\" />\n </div>\n </DModal>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, reactive, watch } from 'vue'\nimport DModal from '../infrastructure/FormModalShell.vue'\nimport type { DesignerField } from '@daxiangme/form-core'\nimport DesignerFieldDefaultValueEditor from './DesignerFieldDefaultValueEditor.vue'\n\ndefineOptions({ name: 'DesignerBatchDefaultEditor' })\n\nconst props = defineProps<{ fields: DesignerField[] }>()\nconst emit = defineEmits<{ save: [values: Record<string, unknown>] }>()\nconst visibleModel = defineModel<boolean>({ default: false })\nconst selectedMap = reactive<Record<string, boolean>>({})\nconst values = reactive<Record<string, unknown>>({})\nconst selectedIds = computed(() =>\n props.fields.filter((field) => selectedMap[field.id]).map((field) => field.id),\n)\n\nwatch(visibleModel, (visible) => {\n if (!visible) return\n clearRecord(selectedMap)\n clearRecord(values)\n for (const field of props.fields) values[field.id] = cloneValue(field.defaultValue)\n})\n\nfunction draftField(field: DesignerField): DesignerField {\n return { ...field, defaultValue: values[field.id] }\n}\n\nfunction save(): void {\n emit(\n 'save',\n Object.fromEntries(selectedIds.value.map((fieldId) => [fieldId, cloneValue(values[fieldId])])),\n )\n visibleModel.value = false\n}\n\nfunction clearRecord(record: Record<string, unknown>): void {\n for (const key of Object.keys(record)) delete record[key]\n}\n\nfunction cloneValue<T>(value: T): T {\n if (value === undefined || value === null) return value\n if (typeof globalThis.structuredClone === 'function') {\n try {\n return globalThis.structuredClone(value)\n } catch {\n // 默认值中的宿主对象无法结构化克隆时继续使用保守递归策略。\n }\n }\n if (Array.isArray(value)) return value.map((item) => cloneValue(item)) as T\n if (typeof value === 'object' && Object.getPrototypeOf(value) === Object.prototype) {\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>).map(([key, item]) => [\n key,\n cloneValue(item),\n ]),\n ) as T\n }\n return value\n}\n</script>\n\n<style scoped>\n.designer-batch-default-editor {\n display: flex;\n max-height: 560px;\n padding-top: var(--daxiang-form-space-3);\n flex-direction: column;\n overflow-y: auto;\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-batch-default-editor article {\n display: grid;\n align-items: center;\n padding: var(--daxiang-form-space-2);\n background: var(--el-fill-color-extra-light);\n border: 1px solid var(--el-border-color-lighter);\n border-radius: var(--el-border-radius-base);\n grid-template-columns: minmax(180px, 0.8fr) minmax(220px, 1.2fr);\n gap: var(--daxiang-form-space-3);\n}\n\n.designer-batch-default-editor article span {\n display: flex;\n flex-direction: column;\n}\n\n.designer-batch-default-editor small {\n color: var(--el-text-color-secondary);\n font-size: 11px;\n}\n</style>\n","<template>\n <header class=\"designer-command-bar\">\n <div class=\"designer-command-bar__leading\">\n <slot name=\"leading\" />\n <span class=\"designer-command-bar__title\" :title=\"documentName\">\n {{ documentName }}\n <i v-if=\"dirty\" aria-label=\"存在未保存修改\" />\n </span>\n </div>\n <div class=\"designer-command-bar__tools\">\n <ElSelect\n class=\"designer-command-bar__device\"\n :model-value=\"viewport\"\n aria-label=\"画布视口\"\n @update:model-value=\"changeViewport\"\n >\n <ElOption label=\"自适应 PC\" value=\"FIT\" />\n <ElOption label=\"PC · 1920\" value=\"PC_1920\" />\n <ElOption label=\"PC · 1440\" value=\"PC_1440\" />\n <ElOption label=\"PC · 1280\" value=\"PC_1280\" />\n <ElOption label=\"PC · 1024\" value=\"PC_1024\" />\n <ElOption label=\"移动 · 440\" value=\"MOBILE_440\" />\n <ElOption label=\"移动 · 375\" value=\"MOBILE_375\" />\n </ElSelect>\n <ElButtonGroup>\n <ElTooltip content=\"显示或隐藏栅格\">\n <ElButton\n :type=\"gridVisible ? 'primary' : 'default'\"\n plain\n aria-label=\"切换栅格\"\n @click=\"emit('toggle-grid')\"\n >\n <DxSvgIcon icon=\"ri:grid-line\" />\n </ElButton>\n </ElTooltip>\n <ElTooltip content=\"缩小画布\">\n <ElButton\n :disabled=\"zoom <= 50\"\n aria-label=\"缩小画布\"\n @click=\"emit('update:zoom', zoom - 10)\"\n >\n <DxSvgIcon icon=\"ri:zoom-out-line\" />\n </ElButton>\n </ElTooltip>\n <ElButton\n class=\"designer-command-bar__zoom\"\n aria-label=\"恢复 100%\"\n @click=\"emit('update:zoom', 100)\"\n >\n {{ zoom }}%\n </ElButton>\n <ElTooltip content=\"放大画布\">\n <ElButton\n :disabled=\"zoom >= 150\"\n aria-label=\"放大画布\"\n @click=\"emit('update:zoom', zoom + 10)\"\n >\n <DxSvgIcon icon=\"ri:zoom-in-line\" />\n </ElButton>\n </ElTooltip>\n <ElTooltip content=\"适应可用宽度\">\n <ElButton aria-label=\"适应可用宽度\" @click=\"emit('fit')\">\n <DxSvgIcon icon=\"ri:aspect-ratio-line\" />\n </ElButton>\n </ElTooltip>\n <ElTooltip content=\"等分当前容器字段\">\n <ElButton aria-label=\"等分当前容器字段\" @click=\"emit('equal-layout')\">\n <DxSvgIcon icon=\"ri:layout-column-line\" />\n </ElButton>\n </ElTooltip>\n </ElButtonGroup>\n <ElButtonGroup>\n <ElTooltip content=\"撤销(⌘Z)\">\n <ElButton :disabled=\"!canUndo\" aria-label=\"撤销\" @click=\"emit('undo')\">\n <DxSvgIcon icon=\"ri:arrow-go-back-line\" />\n </ElButton>\n </ElTooltip>\n <ElTooltip content=\"重做(⇧⌘Z)\">\n <ElButton :disabled=\"!canRedo\" aria-label=\"重做\" @click=\"emit('redo')\">\n <DxSvgIcon icon=\"ri:arrow-go-forward-line\" />\n </ElButton>\n </ElTooltip>\n </ElButtonGroup>\n </div>\n <div class=\"designer-command-bar__actions\">\n <ElSpace :size=\"12\">\n <ElButton @click=\"emit('preview')\"><DxSvgIcon icon=\"ri:eye-line\" />预览</ElButton>\n <ElButton type=\"primary\" @click=\"emit('save')\"\n ><DxSvgIcon icon=\"ri:save-3-line\" />保存</ElButton\n >\n <ElDropdown trigger=\"click\" @command=\"handleMoreCommand\">\n <ElButton aria-label=\"更多设计操作\"><DxSvgIcon icon=\"ri:more-fill\" /></ElButton>\n <template #dropdown>\n <ElDropdownMenu>\n <ElDropdownItem command=\"import\"\n ><DxSvgIcon icon=\"ri:upload-2-line\" />导入 JSON</ElDropdownItem\n >\n <ElDropdownItem command=\"export\"\n ><DxSvgIcon icon=\"ri:download-2-line\" />导出 JSON</ElDropdownItem\n >\n <ElDropdownItem command=\"schema\"\n ><DxSvgIcon icon=\"ri:code-s-slash-line\" />Schema 工具</ElDropdownItem\n >\n <ElDropdownItem command=\"batch-defaults\"\n ><DxSvgIcon icon=\"ri:list-settings-line\" />批量默认值</ElDropdownItem\n >\n <ElDropdownItem command=\"print\"\n ><DxSvgIcon icon=\"ri:printer-line\" />打印预览</ElDropdownItem\n >\n <ElDropdownItem divided command=\"clear\"\n ><DxSvgIcon icon=\"ri:delete-bin-line\" />清空设计</ElDropdownItem\n >\n </ElDropdownMenu>\n </template>\n </ElDropdown>\n </ElSpace>\n </div>\n </header>\n</template>\n\n<script setup lang=\"ts\">\nimport DxSvgIcon from '../infrastructure/FormIcon.vue'\nimport type { DesignerCanvasViewportPreset } from './workbench-preferences'\n\ndefineOptions({ name: 'DesignerCommandBar' })\n\ndefineProps<{\n documentName: string\n dirty: boolean\n canUndo: boolean\n canRedo: boolean\n viewport: DesignerCanvasViewportPreset\n zoom: number\n gridVisible: boolean\n}>()\nconst emit = defineEmits<{\n 'update:viewport': [viewport: DesignerCanvasViewportPreset]\n 'update:zoom': [zoom: number]\n 'toggle-grid': []\n fit: []\n 'equal-layout': []\n 'batch-defaults': []\n schema: []\n print: []\n undo: []\n redo: []\n import: []\n export: []\n clear: []\n preview: []\n save: []\n}>()\n\nfunction changeViewport(value: string | number | boolean | undefined): void {\n if (\n typeof value === 'string' &&\n ['FIT', 'PC_1920', 'PC_1440', 'PC_1280', 'PC_1024', 'MOBILE_440', 'MOBILE_375'].includes(value)\n ) {\n emit('update:viewport', value as DesignerCanvasViewportPreset)\n }\n}\n\nfunction handleMoreCommand(command: string | number | object): void {\n if (command === 'import') emit('import')\n if (command === 'export') emit('export')\n if (command === 'schema') emit('schema')\n if (command === 'batch-defaults') emit('batch-defaults')\n if (command === 'print') emit('print')\n if (command === 'clear') emit('clear')\n}\n</script>\n\n<style scoped>\n.designer-command-bar {\n display: grid;\n min-width: 0;\n min-height: 54px;\n flex: 0 0 auto;\n align-items: center;\n padding: 0 var(--daxiang-form-space-3);\n background: var(--el-bg-color);\n border-bottom: 1px solid var(--el-border-color-lighter);\n grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);\n gap: var(--daxiang-form-space-3);\n}\n\n.designer-command-bar__leading,\n.designer-command-bar__tools,\n.designer-command-bar__actions {\n display: flex;\n min-width: 0;\n align-items: center;\n}\n\n.designer-command-bar__leading {\n justify-self: stretch;\n}\n\n.designer-command-bar__tools {\n justify-content: center;\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-command-bar__actions {\n justify-content: flex-end;\n}\n\n.designer-command-bar__device {\n width: 138px;\n}\n\n.designer-command-bar__zoom {\n min-width: 58px;\n font-variant-numeric: tabular-nums;\n}\n\n.designer-command-bar__title {\n display: inline-flex;\n min-width: 0;\n align-items: center;\n overflow: hidden;\n font-weight: 600;\n gap: var(--daxiang-form-space-2);\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.designer-command-bar__title i {\n width: 7px;\n height: 7px;\n flex: 0 0 auto;\n background: var(--el-color-warning);\n border-radius: 50%;\n}\n\n@media (width <= 1080px) {\n .designer-command-bar {\n grid-template-columns: minmax(0, 1fr) minmax(0, auto);\n min-height: 96px;\n }\n\n .designer-command-bar__tools {\n grid-column: 1 / -1;\n grid-row: 2;\n justify-self: center;\n }\n}\n</style>\n","<template>\n <DModal\n v-model=\"visibleModel\"\n title=\"设置事件\"\n width=\"min(1180px, calc(100vw - 32px))\"\n confirm-text=\"保存全部事件\"\n :flush-content-vertical=\"true\"\n @confirm=\"save\"\n >\n <DesignerEventFlowWorkbench\n v-model=\"draftFlows\"\n :document=\"document\"\n :selected-node-id=\"selectedNodeId\"\n :capabilities=\"capabilities\"\n />\n </DModal>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, watch } from 'vue'\nimport DModal from '../infrastructure/FormModalShell.vue'\nimport type { DesignerFieldBehaviorCapabilities } from '@daxiangme/form-core'\nimport type { DesignerDocument, DesignerEventFlow } from '@daxiangme/form-core'\nimport DesignerEventFlowWorkbench from './DesignerEventFlowWorkbench.vue'\n\ndefineOptions({ name: 'DesignerEventFlowEditor' })\n\nconst props = defineProps<{\n document: DesignerDocument\n selectedNodeId: string\n capabilities: DesignerFieldBehaviorCapabilities\n}>()\nconst emit = defineEmits<{ save: [flows: DesignerEventFlow[]] }>()\nconst visibleModel = defineModel<boolean>({ default: false })\nconst draftFlows = ref<DesignerEventFlow[]>([])\n\nwatch(visibleModel, (visible) => {\n if (visible) draftFlows.value = cloneValue(props.document.eventFlows)\n})\n\nfunction save(): void {\n emit('save', cloneValue(draftFlows.value))\n visibleModel.value = false\n}\n\nfunction cloneValue<T>(value: T): T {\n return JSON.parse(JSON.stringify(value)) as T\n}\n</script>\n","<template>\n <section class=\"designer-field-tree\">\n <div class=\"designer-field-tree__search\">\n <ElInput v-model=\"keyword\" clearable placeholder=\"搜索名称、编码或类型\">\n <template #prefix><DxSvgIcon icon=\"ri:search-line\" /></template>\n </ElInput>\n </div>\n <div class=\"designer-field-tree__summary\">\n <span>字段 {{ document.dataSchema.fields.length }} · 未放置 {{ unplacedCount }}</span>\n <ElButton\n link\n type=\"primary\"\n :disabled=\"generationCandidateCount === 0\"\n @click=\"openGenerator\"\n >\n 一键生成布局\n </ElButton>\n </div>\n <div class=\"designer-field-tree__scroll\">\n <section\n v-for=\"group in filteredGroups\"\n :key=\"group.entity.id\"\n class=\"designer-field-tree__group\"\n >\n <header class=\"designer-field-tree__group-header\">\n <button type=\"button\" @click=\"toggleGroup(group.entity.id)\">\n <DxSvgIcon\n :icon=\"\n expandedGroups[group.entity.id] ? 'ri:arrow-down-s-line' : 'ri:arrow-right-s-line'\n \"\n />\n <DxSvgIcon icon=\"ri:folder-3-fill\" class=\"designer-field-tree__folder\" />\n <span>\n <strong>{{ group.entity.name }}</strong>\n <small>{{ group.entity.code }}</small>\n </span>\n <ElTooltip\n v-if=\"group.relation\"\n :content=\"`一级一对多子表 · ${group.relation.name}`\"\n placement=\"right\"\n >\n <span class=\"designer-field-tree__child-badge\">\n <DxSvgIcon icon=\"ri:git-branch-line\" />子\n </span>\n </ElTooltip>\n </button>\n <ElTooltip\n v-if=\"group.relation && !placedRelationCodes.has(group.relation.code)\"\n content=\"先创建子表容器,再手动放置该实体字段\"\n >\n <ElButton\n link\n type=\"primary\"\n aria-label=\"创建行子表\"\n @click=\"emit('create-relation', group.relation.code, 'row-subtable')\"\n >\n <DxSvgIcon icon=\"ri:add-box-line\" />\n </ElButton>\n </ElTooltip>\n </header>\n <div v-if=\"expandedGroups[group.entity.id]\" class=\"designer-field-tree__group-body\">\n <div v-if=\"hasSourceMetadata(group)\" class=\"designer-field-tree__source\">\n <span v-if=\"entityPhysicalName(group.entity.id)\">\n 物理表 · {{ entityPhysicalName(group.entity.id) }}\n </span>\n <span v-for=\"mapping in relationMappingLabels(group.relation?.id)\" :key=\"mapping\">\n {{ mapping }}\n </span>\n </div>\n <button\n v-for=\"field in group.fields\"\n :key=\"field.id\"\n type=\"button\"\n class=\"designer-field-tree__item\"\n :class=\"{\n 'is-selected': selectedFieldId === field.id,\n 'is-unplaced': !placedFieldIds.has(field.id),\n }\"\n @click=\"emit('select', field.id)\"\n >\n <DxSvgIcon :icon=\"componentIcon(field.componentType)\" />\n <span>\n <strong>{{ field.label }}</strong>\n <small>\n {{ field.key }} · {{ semanticTypeLabel(field.semanticType) }}\n <template v-if=\"fieldPhysicalName(field.id)\">\n · {{ fieldPhysicalName(field.id) }}</template\n >\n </small>\n </span>\n <span class=\"designer-field-tree__trailing\">\n <ElTooltip\n v-if=\"field.primaryKey\"\n content=\"主键字段默认不生成可写控件\"\n placement=\"right\"\n >\n <span class=\"designer-field-tree__state is-restricted\">\n <DxSvgIcon icon=\"ri:key-2-line\" />主键\n </span>\n </ElTooltip>\n <ElTooltip\n v-else-if=\"field.systemField\"\n content=\"系统字段默认不生成可写控件\"\n placement=\"right\"\n >\n <span class=\"designer-field-tree__state is-restricted\">\n <DxSvgIcon icon=\"ri:lock-line\" />系统\n </span>\n </ElTooltip>\n <ElTooltip\n v-else-if=\"field.display.readonly\"\n content=\"该字段放置后保持只读\"\n placement=\"right\"\n >\n <span class=\"designer-field-tree__state\">\n <DxSvgIcon icon=\"ri:eye-line\" />只读\n </span>\n </ElTooltip>\n <ElTooltip\n v-else-if=\"field.bindingStatus !== 'UNBOUND'\"\n content=\"字段来自首次传入的数据模型\"\n placement=\"right\"\n >\n <span class=\"designer-field-tree__state is-source\" aria-label=\"来源字段\">\n <DxSvgIcon icon=\"ri:link-m\" />\n </span>\n </ElTooltip>\n <span\n v-if=\"canRestoreField(field, group.relation) || canDeleteField(field)\"\n class=\"designer-field-tree__actions\"\n >\n <ElTooltip\n v-if=\"canRestoreField(field, group.relation)\"\n :content=\"group.relation ? '放置到已绑定子表' : '放置到主实体布局'\"\n >\n <ElButton link aria-label=\"重新放置\" @click.stop=\"emit('restore', field.id)\">\n <DxSvgIcon icon=\"ri:add-line\" />\n </ElButton>\n </ElTooltip>\n <ElTooltip v-if=\"canDeleteField(field)\" content=\"永久删除未放置本地字段\">\n <ElButton\n link\n type=\"danger\"\n aria-label=\"删除字段\"\n @click.stop=\"emit('delete', field.id)\"\n >\n <DxSvgIcon icon=\"ri:delete-bin-line\" />\n </ElButton>\n </ElTooltip>\n </span>\n </span>\n </button>\n <ElEmpty\n v-if=\"group.fields.length === 0\"\n description=\"当前实体没有匹配字段\"\n :image-size=\"48\"\n />\n </div>\n </section>\n <ElEmpty v-if=\"filteredGroups.length === 0\" description=\"当前没有匹配字段\" :image-size=\"56\" />\n </div>\n\n <DModal\n v-model=\"generatorVisible\"\n title=\"一键生成数据模型布局\"\n width=\"min(840px, calc(100vw - 32px))\"\n confirm-text=\"生成布局\"\n :confirm-disabled=\"selectedFieldIds.length === 0 && selectedRelationCodes.length === 0\"\n @confirm=\"confirmGenerate\"\n >\n <ElAlert\n type=\"info\"\n :closable=\"false\"\n show-icon\n title=\"只添加尚未放置的字段和关系;主键、系统字段不会生成普通可写控件。\"\n />\n <section\n v-for=\"group in groups\"\n :key=\"group.entity.id\"\n class=\"designer-field-tree__generator-group\"\n >\n <header>\n <span class=\"designer-field-tree__generator-identity\">\n <DxSvgIcon icon=\"ri:folder-3-line\" />\n <strong>{{ group.entity.name }}</strong>\n <ElTag v-if=\"group.relation\" effect=\"plain\" type=\"warning\">子</ElTag>\n </span>\n <ElCheckbox\n :model-value=\"isGeneratedGroupFullySelected(group)\"\n :indeterminate=\"isGeneratedGroupPartiallySelected(group)\"\n :disabled=\"generationFields(group).length === 0\"\n @change=\"toggleGeneratedGroup(group, Boolean($event))\"\n >\n {{ isGeneratedGroupFullySelected(group) ? '取消全选' : '全选' }}\n </ElCheckbox>\n <div v-if=\"group.relation\" class=\"designer-field-tree__generator-relation\">\n <ElCheckbox\n :model-value=\"selectedRelationCodes.includes(group.relation.code)\"\n @change=\"toggleGeneratedRelation(group.relation.code, Boolean($event))\"\n >\n 生成子表\n </ElCheckbox>\n <ElSelect v-model=\"relationComponentTypes[group.relation.code]\">\n <ElOption label=\"行子表\" value=\"row-subtable\" />\n <ElOption label=\"块子表\" value=\"block-subtable\" />\n </ElSelect>\n </div>\n </header>\n <ElCheckboxGroup v-model=\"selectedFieldIds\" class=\"designer-field-tree__generator-fields\">\n <ElCheckbox v-for=\"field in generationFields(group)\" :key=\"field.id\" :value=\"field.id\">\n {{ field.label }}\n <small>{{ field.key }}</small>\n </ElCheckbox>\n </ElCheckboxGroup>\n </section>\n </DModal>\n </section>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, reactive, ref, watch } from 'vue'\nimport DModal from '../infrastructure/FormModalShell.vue'\nimport DxSvgIcon from '../infrastructure/FormIcon.vue'\nimport { findDesignerComponent } from '@daxiangme/form-core'\nimport type {\n DesignerDataEntity,\n DesignerDocument,\n DesignerField,\n DesignerGenerateLayoutRequest,\n DesignerOneToManyRelation,\n DesignerSemanticType,\n DesignerSourceMetadataIndex,\n} from '@daxiangme/form-core'\n\ndefineOptions({ name: 'DesignerFieldTree' })\n\ninterface DesignerFieldGroup {\n entity: DesignerDataEntity\n relation?: DesignerOneToManyRelation\n fields: DesignerField[]\n}\n\nconst props = defineProps<{\n document: DesignerDocument\n sourceMetadata: DesignerSourceMetadataIndex\n placedFieldIds: Set<string>\n placedRelationCodes: Set<string>\n selectedFieldId: string\n}>()\nconst emit = defineEmits<{\n select: [fieldId: string]\n restore: [fieldId: string]\n delete: [fieldId: string]\n 'create-relation': [relationCode: string, componentType: 'row-subtable' | 'block-subtable']\n 'generate-layout': [request: DesignerGenerateLayoutRequest]\n}>()\nconst keyword = ref('')\nconst expandedGroups = reactive<Record<string, boolean>>({})\nconst generatorVisible = ref(false)\nconst selectedFieldIds = ref<string[]>([])\nconst selectedRelationCodes = ref<string[]>([])\nconst relationComponentTypes = reactive<Record<string, 'row-subtable' | 'block-subtable'>>({})\n\nconst groups = computed<DesignerFieldGroup[]>(() => {\n const root = props.document.dataSchema.rootEntity\n return [\n { entity: root, fields: fieldsForEntity(root.code) },\n ...props.document.dataSchema.relations.map((relation) => ({\n entity: relation.childEntity,\n relation,\n fields: fieldsForEntity(relation.childEntity.code),\n })),\n ]\n})\nconst filteredGroups = computed(() => {\n const query = keyword.value.trim().toLowerCase()\n if (!query) return groups.value\n return groups.value\n .map((group) => {\n const groupMatches = `${group.entity.name} ${group.entity.code} ${group.relation?.name ?? ''}`\n .toLowerCase()\n .includes(query)\n return {\n ...group,\n fields: groupMatches\n ? group.fields\n : group.fields.filter((field) =>\n `${field.label} ${field.key} ${field.semanticType} ${field.componentType}`\n .toLowerCase()\n .includes(query),\n ),\n }\n })\n .filter(\n (group) =>\n group.fields.length > 0 ||\n `${group.entity.name} ${group.entity.code}`.toLowerCase().includes(query),\n )\n})\nconst unplacedCount = computed(\n () =>\n props.document.dataSchema.fields.filter((field) => !props.placedFieldIds.has(field.id)).length,\n)\nconst generationCandidateCount = computed(() =>\n groups.value.reduce((count, group) => count + generationFields(group).length, 0),\n)\n\nwatch(\n groups,\n (items) => {\n items.forEach((group) => {\n if (!(group.entity.id in expandedGroups)) expandedGroups[group.entity.id] = true\n if (group.relation && !relationComponentTypes[group.relation.code]) {\n relationComponentTypes[group.relation.code] = 'row-subtable'\n }\n })\n },\n { immediate: true },\n)\n\nfunction fieldsForEntity(entityCode: string): DesignerField[] {\n return props.document.dataSchema.fields\n .filter((field) => field.entityCode === entityCode)\n .sort((left, right) => left.displayOrder - right.displayOrder)\n}\n\nfunction generationFields(group: DesignerFieldGroup): DesignerField[] {\n return group.fields.filter(\n (field) => !props.placedFieldIds.has(field.id) && !field.primaryKey && !field.systemField,\n )\n}\n\nfunction canRestoreField(field: DesignerField, relation?: DesignerOneToManyRelation): boolean {\n if (props.placedFieldIds.has(field.id) || field.primaryKey || field.systemField) return false\n return !relation || props.placedRelationCodes.has(relation.code)\n}\n\nfunction canDeleteField(field: DesignerField): boolean {\n return !props.placedFieldIds.has(field.id) && field.bindingStatus === 'UNBOUND'\n}\n\nfunction toggleGroup(entityId: string): void {\n expandedGroups[entityId] = !expandedGroups[entityId]\n}\n\nfunction openGenerator(): void {\n selectedFieldIds.value = groups.value.flatMap((group) =>\n generationFields(group).map((field) => field.id),\n )\n selectedRelationCodes.value = groups.value\n .filter(\n (group) =>\n group.relation &&\n !props.placedRelationCodes.has(group.relation.code) &&\n generationFields(group).length > 0,\n )\n .map((group) => group.relation!.code)\n generatorVisible.value = true\n}\n\nfunction toggleGeneratedRelation(relationCode: string, selected: boolean): void {\n selectedRelationCodes.value = selected\n ? [...new Set([...selectedRelationCodes.value, relationCode])]\n : selectedRelationCodes.value.filter((code) => code !== relationCode)\n}\n\nfunction isGeneratedGroupFullySelected(group: DesignerFieldGroup): boolean {\n const fieldIds = generationFields(group).map((field) => field.id)\n return (\n fieldIds.length > 0 && fieldIds.every((fieldId) => selectedFieldIds.value.includes(fieldId))\n )\n}\n\nfunction isGeneratedGroupPartiallySelected(group: DesignerFieldGroup): boolean {\n const fieldIds = generationFields(group).map((field) => field.id)\n const selectedCount = fieldIds.filter((fieldId) =>\n selectedFieldIds.value.includes(fieldId),\n ).length\n return selectedCount > 0 && selectedCount < fieldIds.length\n}\n\nfunction toggleGeneratedGroup(group: DesignerFieldGroup, selected: boolean): void {\n const groupFieldIds = new Set(generationFields(group).map((field) => field.id))\n const otherSelectedIds = selectedFieldIds.value.filter((fieldId) => !groupFieldIds.has(fieldId))\n selectedFieldIds.value = selected ? [...otherSelectedIds, ...groupFieldIds] : otherSelectedIds\n}\n\nfunction confirmGenerate(): void {\n emit('generate-layout', {\n fieldIds: [...selectedFieldIds.value],\n relations: selectedRelationCodes.value.map((relationCode) => ({\n relationCode,\n componentType: relationComponentTypes[relationCode] ?? 'row-subtable',\n })),\n })\n generatorVisible.value = false\n}\n\nfunction componentIcon(componentType: string): string {\n return findDesignerComponent(componentType)?.icon ?? 'ri:error-warning-line'\n}\n\nfunction entityPhysicalName(entityId: string): string {\n return props.sourceMetadata.entities[entityId]?.physicalTableName ?? ''\n}\n\nfunction hasSourceMetadata(group: DesignerFieldGroup): boolean {\n return Boolean(\n entityPhysicalName(group.entity.id) || relationMappingLabels(group.relation?.id).length,\n )\n}\n\nfunction fieldPhysicalName(fieldId: string): string {\n return props.sourceMetadata.fields[fieldId]?.physicalColumnName ?? ''\n}\n\nfunction relationMappingLabels(relationId?: string): string[] {\n if (!relationId) return []\n return (props.sourceMetadata.relations[relationId]?.keyMappings ?? []).map((mapping) => {\n const parent = props.document.dataSchema.fields.find(\n (field) => field.binding?.fieldId === mapping.parentFieldId,\n )\n const child = props.document.dataSchema.fields.find(\n (field) => field.binding?.fieldId === mapping.childFieldId,\n )\n return `关联字段 · ${parent?.label ?? mapping.parentFieldId} → ${child?.label ?? mapping.childFieldId}`\n })\n}\n\nfunction semanticTypeLabel(type: DesignerSemanticType): string {\n return {\n STRING: '文本',\n LONG_TEXT: '长文本',\n NUMBER: '数字',\n BOOLEAN: '布尔',\n DATE: '日期',\n DATE_TIME: '日期时间',\n FILE: '文件',\n REFERENCE: '引用',\n OBJECT: '对象',\n ARRAY: '多值',\n }[type]\n}\n</script>\n\n<style scoped>\n.designer-field-tree {\n display: flex;\n min-height: 0;\n flex: 1 1 0;\n flex-direction: column;\n padding-block-start: var(--daxiang-form-space-2);\n}\n\n.designer-field-tree__search {\n padding-inline: var(--daxiang-form-space-3);\n}\n\n.designer-field-tree__summary {\n display: flex;\n min-height: 32px;\n align-items: center;\n justify-content: space-between;\n padding: var(--daxiang-form-space-1) var(--daxiang-form-space-3);\n color: var(--el-text-color-secondary);\n font-size: 12px;\n}\n\n.designer-field-tree__scroll {\n min-height: 0;\n flex: 1 1 0;\n padding: 0 var(--daxiang-form-space-2) var(--daxiang-form-space-3) var(--daxiang-form-space-3);\n overflow: auto;\n}\n\n.designer-field-tree__group + .designer-field-tree__group {\n margin-top: var(--daxiang-form-space-1);\n}\n\n.designer-field-tree__group-header {\n display: grid;\n min-height: 38px;\n align-items: center;\n grid-template-columns: minmax(0, 1fr) auto;\n}\n\n.designer-field-tree__group-header > button:first-child {\n display: grid;\n min-width: 0;\n align-items: center;\n padding: var(--daxiang-form-space-1) 0;\n color: var(--el-text-color-primary);\n background: transparent;\n border: 0;\n cursor: pointer;\n grid-template-columns: auto auto minmax(0, 1fr) auto;\n gap: var(--daxiang-form-space-1);\n text-align: left;\n}\n\n.designer-field-tree__folder {\n color: var(--el-color-primary);\n}\n\n.designer-field-tree__group-header span:not(.designer-field-tree__child-badge) {\n display: flex;\n min-width: 0;\n flex-direction: column;\n}\n\n.designer-field-tree__group-header small,\n.designer-field-tree__source,\n.designer-field-tree__item small,\n.designer-field-tree__generator-fields small {\n color: var(--el-text-color-secondary);\n font-size: 11px;\n}\n\n.designer-field-tree__child-badge {\n display: inline-flex;\n align-items: center;\n color: var(--el-color-primary);\n font-size: 10px;\n gap: 2px;\n}\n\n.designer-field-tree__source {\n display: flex;\n padding: 0 var(--daxiang-form-space-2) var(--daxiang-form-space-1) 32px;\n flex-wrap: wrap;\n gap: var(--daxiang-form-space-1) var(--daxiang-form-space-2);\n}\n\n.designer-field-tree__group-body {\n padding-inline-start: var(--daxiang-form-space-2);\n}\n\n.designer-field-tree__item {\n display: grid;\n width: 100%;\n min-height: 40px;\n align-items: center;\n padding: var(--daxiang-form-space-1) var(--daxiang-form-space-2);\n color: var(--el-text-color-regular);\n background: transparent;\n border: 0;\n border-radius: var(--el-border-radius-base);\n cursor: pointer;\n grid-template-columns: auto minmax(0, 1fr) auto;\n gap: var(--daxiang-form-space-1);\n text-align: left;\n}\n\n.designer-field-tree__item:hover,\n.designer-field-tree__item.is-selected {\n color: var(--el-color-primary);\n background: var(--el-color-primary-light-9);\n}\n\n.designer-field-tree__item > span:nth-child(2) {\n display: flex;\n min-width: 0;\n flex-direction: column;\n}\n\n.designer-field-tree__item > svg {\n font-size: 16px;\n}\n\n.designer-field-tree__item strong,\n.designer-field-tree__item small {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.designer-field-tree__item strong {\n font-size: 13px;\n line-height: 18px;\n}\n\n.designer-field-tree__item small {\n line-height: 14px;\n}\n\n.designer-field-tree__trailing,\n.designer-field-tree__actions,\n.designer-field-tree__state {\n display: flex;\n align-items: center;\n}\n\n.designer-field-tree__trailing {\n gap: var(--daxiang-form-space-1);\n}\n\n.designer-field-tree__actions {\n gap: 2px;\n}\n\n.designer-field-tree__state {\n color: var(--el-text-color-secondary);\n font-size: 10px;\n gap: 2px;\n white-space: nowrap;\n}\n\n.designer-field-tree__state.is-restricted {\n color: var(--el-color-warning-dark-2);\n}\n\n.designer-field-tree__state.is-source {\n color: var(--el-color-success);\n font-size: 13px;\n}\n\n.designer-field-tree__generator-group {\n padding: var(--daxiang-form-space-3) 0;\n border-bottom: 1px solid var(--el-border-color-lighter);\n}\n\n.designer-field-tree__generator-group > header {\n display: grid;\n align-items: center;\n grid-template-columns: minmax(0, 1fr) auto minmax(220px, auto);\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-field-tree__generator-identity,\n.designer-field-tree__generator-relation {\n display: flex;\n align-items: center;\n gap: var(--daxiang-form-space-1);\n}\n\n.designer-field-tree__generator-relation {\n justify-content: flex-end;\n}\n\n.designer-field-tree__generator-relation :deep(.el-select) {\n width: 140px;\n}\n\n.designer-field-tree__generator-fields {\n display: grid;\n padding-top: var(--daxiang-form-space-2);\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: var(--daxiang-form-space-1) var(--daxiang-form-space-3);\n}\n\n.designer-field-tree__generator-fields :deep(.el-checkbox) {\n min-width: 0;\n margin-right: 0;\n}\n\n.designer-field-tree__generator-fields small {\n margin-left: var(--daxiang-form-space-1);\n}\n</style>\n","<template>\n <DModal\n v-model=\"visibleModel\"\n title=\"表单全局高级配置\"\n width=\"min(980px, calc(100vw - 32px))\"\n confirm-text=\"保存全局配置\"\n :flush-content-vertical=\"true\"\n @confirm=\"save\"\n >\n <ElTabs v-model=\"activeTab\" class=\"designer-global-advanced\">\n <ElTabPane label=\"变量\" name=\"variables\">\n <section>\n <header>\n <span>表单变量只保存定义,运行值默认不进入提交数据。</span\n ><ElButton plain @click=\"addVariable\">添加变量</ElButton>\n </header>\n <article v-for=\"(variable, index) in draft.variables\" :key=\"variable.id\">\n <ElInput v-model=\"variable.name\" placeholder=\"变量名称\" maxlength=\"80\" />\n <ElInput v-model=\"variable.code\" placeholder=\"变量编码\" maxlength=\"64\" />\n <ElSelect v-model=\"variable.valueType\">\n <ElOption label=\"文本\" value=\"STRING\" /><ElOption label=\"数值\" value=\"NUMBER\" />\n <ElOption label=\"布尔\" value=\"BOOLEAN\" /><ElOption label=\"日期\" value=\"DATE\" />\n <ElOption label=\"对象\" value=\"OBJECT\" />\n </ElSelect>\n <ElInput\n :model-value=\"String(variable.initialValue ?? '')\"\n placeholder=\"初始值\"\n @change=\"variable.initialValue = parseInitialValue($event, variable.valueType)\"\n />\n <ElButton text type=\"danger\" @click=\"draft.variables.splice(index, 1)\"\n ><DxSvgIcon icon=\"ri:delete-bin-line\"\n /></ElButton>\n </article>\n <ElEmpty\n v-if=\"draft.variables.length === 0\"\n description=\"暂无表单变量\"\n :image-size=\"56\"\n />\n </section>\n </ElTabPane>\n <ElTabPane label=\"数据源\" name=\"dataSources\">\n <section>\n <header>\n <span>只记录 Provider 与来源身份,不保存 URL、SQL、请求头或凭据。</span\n ><ElButton plain @click=\"addDataSource\">添加数据源</ElButton>\n </header>\n <article\n v-for=\"(source, index) in draft.dataSources\"\n :key=\"source.id\"\n class=\"is-data-source\"\n >\n <div class=\"designer-global-advanced__source-grid\">\n <ElInput v-model=\"source.name\" placeholder=\"名称\" maxlength=\"80\" />\n <ElInput v-model=\"source.code\" placeholder=\"编码\" maxlength=\"64\" />\n <ElInput v-model=\"source.provider\" placeholder=\"Provider\" maxlength=\"64\" />\n <ElInput v-model=\"source.sourceId\" placeholder=\"来源 ID\" maxlength=\"128\" />\n <ElInputNumber\n v-model=\"source.sourceRevision\"\n :min=\"0\"\n placeholder=\"版本\"\n controls-position=\"right\"\n />\n <ElButton text type=\"danger\" @click=\"draft.dataSources.splice(index, 1)\"\n ><DxSvgIcon icon=\"ri:delete-bin-line\"\n /></ElButton>\n </div>\n <ElCollapse>\n <ElCollapseItem title=\"输入映射\" name=\"input\">\n <div\n v-for=\"(mapping, mappingIndex) in source.inputMappings\"\n :key=\"mappingIndex\"\n class=\"designer-global-advanced__mapping\"\n >\n <ElInput v-model=\"mapping.source\" placeholder=\"field:字段ID / variable:编码\" />\n <ElInput v-model=\"mapping.target\" placeholder=\"Adapter 输入名\" />\n <ElButton text type=\"danger\" @click=\"source.inputMappings.splice(mappingIndex, 1)\"\n ><DxSvgIcon icon=\"ri:delete-bin-line\"\n /></ElButton>\n </div>\n <ElButton text @click=\"source.inputMappings.push({ source: '', target: '' })\"\n >添加输入映射</ElButton\n >\n </ElCollapseItem>\n <ElCollapseItem title=\"输出映射\" name=\"output\">\n <div\n v-for=\"(mapping, mappingIndex) in source.outputMappings\"\n :key=\"mappingIndex\"\n class=\"designer-global-advanced__mapping\"\n >\n <ElInput v-model=\"mapping.source\" placeholder=\"Adapter 输出名\" />\n <ElInput v-model=\"mapping.target\" placeholder=\"field:字段ID / variable:编码\" />\n <ElButton\n text\n type=\"danger\"\n @click=\"source.outputMappings.splice(mappingIndex, 1)\"\n ><DxSvgIcon icon=\"ri:delete-bin-line\"\n /></ElButton>\n </div>\n <ElButton text @click=\"source.outputMappings.push({ source: '', target: '' })\"\n >添加输出映射</ElButton\n >\n </ElCollapseItem>\n </ElCollapse>\n <ElTag type=\"warning\" effect=\"plain\">运行需要 Host DataSource Adapter</ElTag>\n </article>\n <ElEmpty\n v-if=\"draft.dataSources.length === 0\"\n description=\"暂无数据源\"\n :image-size=\"56\"\n />\n </section>\n </ElTabPane>\n <ElTabPane label=\"国际化\" name=\"i18n\">\n <section>\n <ElForm label-position=\"top\">\n <ElFormItem label=\"启用国际化\"><ElSwitch v-model=\"draft.i18n.enabled\" /></ElFormItem>\n <ElFormItem label=\"语言列表\">\n <ElSelect\n v-model=\"draft.i18n.locales\"\n multiple\n filterable\n allow-create\n default-first-option\n >\n <ElOption\n v-for=\"locale in draft.i18n.locales\"\n :key=\"locale\"\n :label=\"locale\"\n :value=\"locale\"\n />\n </ElSelect>\n </ElFormItem>\n <ElFormItem label=\"默认语言\">\n <ElSelect v-model=\"draft.i18n.defaultLocale\">\n <ElOption\n v-for=\"locale in draft.i18n.locales\"\n :key=\"locale\"\n :label=\"locale\"\n :value=\"locale\"\n />\n </ElSelect>\n </ElFormItem>\n </ElForm>\n <header>\n <span>回退顺序:当前语言 → 默认语言 → 原文。</span>\n <div>\n <ElButton plain @click=\"seedI18nEntries\">补齐表单词条</ElButton>\n <ElButton plain @click=\"addI18nEntry\">添加词条</ElButton>\n </div>\n </header>\n <article v-for=\"(entry, index) in draft.i18n.entries\" :key=\"index\" class=\"is-i18n\">\n <ElInput v-model=\"entry.key\" placeholder=\"稳定词条 key\" maxlength=\"64\" />\n <ElInput\n v-for=\"locale in draft.i18n.locales\"\n :key=\"locale\"\n v-model=\"entry.values[locale]\"\n :placeholder=\"locale\"\n maxlength=\"300\"\n />\n <ElButton text type=\"danger\" @click=\"draft.i18n.entries.splice(index, 1)\"\n ><DxSvgIcon icon=\"ri:delete-bin-line\"\n /></ElButton>\n </article>\n <ElEmpty\n v-if=\"draft.i18n.entries.length === 0\"\n description=\"暂无国际化词条\"\n :image-size=\"56\"\n />\n </section>\n </ElTabPane>\n </ElTabs>\n </DModal>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, reactive, watch } from 'vue'\nimport DModal from '../infrastructure/FormModalShell.vue'\nimport DxSvgIcon from '../infrastructure/FormIcon.vue'\nimport {\n designerActionI18nKey,\n designerFieldHelpI18nKey,\n designerFieldLabelI18nKey,\n designerModuleI18nKey,\n} from '@daxiangme/form-core'\nimport type {\n DesignerDataSourceDefinition,\n DesignerDocument,\n DesignerI18nConfiguration,\n DesignerVariableDefinition,\n} from '@daxiangme/form-core'\n\ndefineOptions({ name: 'DesignerGlobalAdvancedEditor' })\n\nconst props = defineProps<{ document: DesignerDocument }>()\nconst emit = defineEmits<{\n save: [\n patch: {\n variables: DesignerVariableDefinition[]\n dataSources: DesignerDataSourceDefinition[]\n i18n: DesignerI18nConfiguration\n },\n ]\n}>()\nconst visibleModel = defineModel<boolean>({ default: false })\nconst activeTab = ref('variables')\nconst draft = reactive({\n variables: [] as DesignerVariableDefinition[],\n dataSources: [] as DesignerDataSourceDefinition[],\n i18n: {\n enabled: false,\n defaultLocale: 'zh-CN',\n locales: ['zh-CN'],\n entries: [],\n } as DesignerI18nConfiguration,\n})\n\nwatch(visibleModel, (visible) => {\n if (!visible) return\n draft.variables = cloneValue(props.document.variables)\n draft.dataSources = cloneValue(props.document.dataSources)\n draft.i18n = cloneValue(props.document.i18n)\n})\n\nfunction addVariable(): void {\n const serial = draft.variables.length + 1\n draft.variables.push({\n id: createId('variable'),\n code: `variable_${serial}`,\n name: `变量${serial}`,\n valueType: 'STRING',\n initialValue: '',\n })\n}\n\nfunction addDataSource(): void {\n const serial = draft.dataSources.length + 1\n draft.dataSources.push({\n id: createId('source'),\n code: `data_source_${serial}`,\n name: `数据源${serial}`,\n provider: '',\n sourceId: '',\n inputMappings: [],\n outputMappings: [],\n })\n}\n\nfunction addI18nEntry(): void {\n const serial = draft.i18n.entries.length + 1\n draft.i18n.entries.push({\n key: `label_${serial}`,\n values: Object.fromEntries(draft.i18n.locales.map((locale) => [locale, ''])),\n })\n}\n\n/** 按字段、动作栏和模块的稳定约定 key 补齐尚不存在的词条。 */\nfunction seedI18nEntries(): void {\n const candidates = [\n ...props.document.dataSchema.fields.flatMap((field) => [\n { key: designerFieldLabelI18nKey(field.key), text: field.label },\n ...(field.helpText\n ? [{ key: designerFieldHelpI18nKey(field.key), text: field.helpText }]\n : []),\n ]),\n ...props.document.actionBar.buttons.map((button) => ({\n key: designerActionI18nKey(button.action),\n text: button.label,\n })),\n ...props.document.uiSchema.overlays.map((module) => ({\n key: designerModuleI18nKey(module.code),\n text: module.name,\n })),\n ]\n const existing = new Set(draft.i18n.entries.map((entry) => entry.key))\n for (const candidate of candidates) {\n if (existing.has(candidate.key)) continue\n draft.i18n.entries.push({\n key: candidate.key,\n values: Object.fromEntries(\n draft.i18n.locales.map((locale) => [\n locale,\n locale === draft.i18n.defaultLocale ? candidate.text : '',\n ]),\n ),\n })\n existing.add(candidate.key)\n }\n}\n\nfunction parseInitialValue(\n value: string,\n type: DesignerVariableDefinition['valueType'],\n): string | number | boolean | null {\n if (type === 'NUMBER') return Number.isFinite(Number(value)) ? Number(value) : 0\n if (type === 'BOOLEAN') return value === 'true'\n return value || null\n}\n\nfunction save(): void {\n emit('save', cloneValue(draft))\n visibleModel.value = false\n}\n\nfunction createId(prefix: string): string {\n return `${prefix}-${crypto.randomUUID().replaceAll('-', '')}`\n}\n\nfunction cloneValue<T>(value: T): T {\n return JSON.parse(JSON.stringify(value)) as T\n}\n</script>\n\n<style scoped>\n.designer-global-advanced {\n min-height: 560px;\n}\n\n.designer-global-advanced section {\n display: flex;\n flex-direction: column;\n gap: var(--daxiang-form-space-3);\n}\n\n.designer-global-advanced section > header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n color: var(--el-text-color-secondary);\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-global-advanced section > header > div {\n display: flex;\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-global-advanced article {\n display: grid;\n align-items: center;\n padding: var(--daxiang-form-space-3);\n background: var(--el-fill-color-extra-light);\n border: 1px solid var(--el-border-color-lighter);\n border-radius: var(--el-border-radius-base);\n grid-template-columns: repeat(4, minmax(120px, 1fr)) auto;\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-global-advanced article.is-data-source {\n display: flex;\n align-items: stretch;\n flex-direction: column;\n}\n\n.designer-global-advanced__source-grid {\n display: grid;\n grid-template-columns: repeat(5, minmax(100px, 1fr)) auto;\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-global-advanced__mapping {\n display: grid;\n grid-template-columns: 1fr 1fr auto;\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-global-advanced article.is-i18n {\n grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)) auto;\n}\n\n.designer-global-advanced :deep(.el-select),\n.designer-global-advanced :deep(.el-input-number) {\n width: 100%;\n}\n</style>\n","<template>\n <div class=\"designer-options-editor\">\n <div v-for=\"(option, index) in options\" :key=\"index\" class=\"designer-options-editor__row\">\n <ElInput\n :model-value=\"option.label\"\n placeholder=\"显示文字\"\n @change=\"updateOption(index, 'label', $event)\"\n />\n <ElInput\n :model-value=\"String(option.value)\"\n placeholder=\"选项值\"\n @change=\"updateOption(index, 'value', $event)\"\n />\n <ElButton link type=\"danger\" aria-label=\"删除选项\" @click=\"removeOption(index)\">\n <DxSvgIcon icon=\"ri:delete-bin-line\" />\n </ElButton>\n </div>\n <ElButton link @click=\"addOption\"><DxSvgIcon icon=\"ri:add-line\" />添加选项</ElButton>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport DxSvgIcon from '../infrastructure/FormIcon.vue'\nimport type { DesignerOption } from '@daxiangme/form-core'\n\ndefineOptions({ name: 'DesignerOptionsEditor' })\n\nconst props = defineProps<{ modelValue: unknown }>()\nconst emit = defineEmits<{ 'update:modelValue': [value: DesignerOption[]] }>()\nconst options = computed(() => normalizeOptions(props.modelValue))\n\nfunction updateOption(index: number, key: 'label' | 'value', value: string): void {\n const next = cloneOptions()\n const current = next[index]\n if (!current) return\n current[key] = value\n emit('update:modelValue', next)\n}\n\nfunction addOption(): void {\n const next = cloneOptions()\n next.push({ label: `选项 ${next.length + 1}`, value: `option-${next.length + 1}` })\n emit('update:modelValue', next)\n}\n\nfunction removeOption(index: number): void {\n const next = cloneOptions()\n next.splice(index, 1)\n emit('update:modelValue', next)\n}\n\nfunction cloneOptions(): DesignerOption[] {\n return options.value.map((item) => ({ ...item }))\n}\n\nfunction normalizeOptions(source: unknown): DesignerOption[] {\n if (!Array.isArray(source)) return []\n return source.map((item, index) => {\n if (typeof item !== 'object' || item === null || Array.isArray(item)) {\n return { label: String(item), value: String(item) }\n }\n const option = item as Record<string, unknown>\n return {\n label: String(option.label ?? `选项 ${index + 1}`),\n value: ['string', 'number', 'boolean'].includes(typeof option.value)\n ? (option.value as string | number | boolean)\n : `option-${index + 1}`,\n }\n })\n}\n</script>\n\n<style scoped>\n.designer-options-editor {\n display: flex;\n flex-direction: column;\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-options-editor__row {\n display: grid;\n align-items: center;\n grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) auto;\n gap: var(--daxiang-form-space-1);\n}\n</style>\n","<template>\n <div class=\"designer-property-editor\">\n <ElInput\n v-if=\"editor.type === 'TEXT'\"\n :model-value=\"stringValue\"\n :maxlength=\"editor.maxLength\"\n @update:model-value=\"emitValue\"\n />\n <ElInput\n v-else-if=\"editor.type === 'TEXTAREA'\"\n :model-value=\"stringValue\"\n type=\"textarea\"\n :rows=\"editor.rows ?? 3\"\n :maxlength=\"editor.maxLength\"\n @update:model-value=\"emitValue\"\n />\n <template v-else-if=\"editor.type === 'IDENTIFIER'\">\n <ElInput\n :model-value=\"identifierDraft\"\n :maxlength=\"editor.maxLength ?? 64\"\n placeholder=\"以字母开头,仅字母、数字和下划线\"\n @update:model-value=\"updateIdentifierDraft\"\n @blur=\"commitIdentifier\"\n @keydown.enter=\"blurIdentifier\"\n />\n <small v-if=\"identifierTouched && identifierError\" class=\"designer-property-editor__error\">\n {{ identifierError }}\n </small>\n </template>\n <div v-else-if=\"editor.type === 'NUMBER'\" class=\"designer-property-editor__unit-control\">\n <ElInputNumber\n :model-value=\"numberValue\"\n :min=\"editor.minimum\"\n :max=\"editor.maximum\"\n :step=\"editor.step ?? 1\"\n @update:model-value=\"emitNumberValue\"\n />\n <span v-if=\"editor.unit\">{{ editor.unit }}</span>\n </div>\n <ElSwitch\n v-else-if=\"editor.type === 'BOOLEAN'\"\n :model-value=\"modelValue === true\"\n @update:model-value=\"emitValue(Boolean($event))\"\n />\n <ElSelect\n v-else-if=\"editor.type === 'SELECT' || editor.type === 'PRESET_NUMBER'\"\n :model-value=\"primitiveValue\"\n @update:model-value=\"emitValue\"\n >\n <ElOption\n v-for=\"option in controlledOptions\"\n :key=\"String(option.value)\"\n :label=\"option.label\"\n :value=\"option.value\"\n :disabled=\"option.disabled\"\n />\n </ElSelect>\n <ElSegmented\n v-else-if=\"editor.type === 'SEGMENTED'\"\n :model-value=\"primitiveValue\"\n :options=\"controlledOptions\"\n @update:model-value=\"emitValue\"\n />\n <ElColorPicker\n v-else-if=\"editor.type === 'COLOR'\"\n :model-value=\"stringValue\"\n @update:model-value=\"emitValue($event ?? '')\"\n />\n <DesignerOptionsEditor\n v-else-if=\"editor.type === 'OPTIONS'\"\n :model-value=\"modelValue\"\n @update:model-value=\"emitValue\"\n />\n <ElSelect\n v-else-if=\"editor.type === 'DATE_FORMAT'\"\n :model-value=\"primitiveValue\"\n @update:model-value=\"emitValue\"\n >\n <ElOption\n v-for=\"option in controlledOptions\"\n :key=\"String(option.value)\"\n :label=\"option.label\"\n :value=\"option.value\"\n />\n </ElSelect>\n <ElSelect\n v-else-if=\"editor.type === 'FILE_TYPES'\"\n :model-value=\"selectedFileExtensions\"\n multiple\n collapse-tags\n collapse-tags-tooltip\n clearable\n placeholder=\"不限文件类型\"\n @update:model-value=\"updateFileTypes\"\n >\n <ElOptionGroup label=\"快捷分组\">\n <ElOption\n v-for=\"option in fileTypeGroups\"\n :key=\"option.value\"\n :label=\"option.label\"\n :value=\"option.value\"\n />\n </ElOptionGroup>\n <ElOptionGroup label=\"扩展名\">\n <ElOption\n v-for=\"option in fileExtensionOptions\"\n :key=\"option.value\"\n :label=\"option.label\"\n :value=\"option.value\"\n />\n </ElOptionGroup>\n </ElSelect>\n <template v-else-if=\"editor.type === 'URL'\">\n <ElInput\n :model-value=\"urlDraft\"\n :maxlength=\"editor.maxLength\"\n placeholder=\"https://\"\n clearable\n @update:model-value=\"updateUrlDraft\"\n />\n <small v-if=\"urlError\" class=\"designer-property-editor__error\">{{ urlError }}</small>\n </template>\n <template v-else-if=\"editor.type === 'RESOURCE_REFERENCE'\">\n <ElInput :model-value=\"stringValue\" disabled :placeholder=\"`尚未选择${resourceLabel}`\" />\n <small class=\"designer-property-editor__availability\">{{ editor.unavailableReason }}</small>\n </template>\n <ElSelect\n v-else-if=\"editor.type === 'GRID_SPAN' || editor.type === 'GRID_OFFSET'\"\n :model-value=\"primitiveValue\"\n @update:model-value=\"emitValue\"\n >\n <ElOption\n v-for=\"option in controlledOptions\"\n :key=\"String(option.value)\"\n :label=\"option.label\"\n :value=\"option.value\"\n />\n </ElSelect>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue'\nimport type { DesignerPropertyDefinition, DesignerPropertyOption } from '@daxiangme/form-core'\nimport {\n DESIGNER_FILE_TYPE_OPTIONS,\n DESIGNER_MOBILE_SPAN_PRESETS,\n DESIGNER_PC_SPAN_PRESETS,\n designerDateFormatOptions,\n includeDesignerCurrentOption,\n numberOptions,\n} from '@daxiangme/form-core'\nimport DesignerOptionsEditor from './DesignerOptionsEditor.vue'\n\ndefineOptions({ name: 'DesignerPropertyEditorHost' })\n\nconst props = withDefaults(\n defineProps<{\n definition: DesignerPropertyDefinition\n modelValue: unknown\n configuration?: Readonly<Record<string, unknown>>\n }>(),\n {\n configuration: () => ({}),\n },\n)\nconst emit = defineEmits<{ 'update:modelValue': [value: unknown] }>()\nconst urlDraft = ref('')\nconst identifierDraft = ref('')\nconst identifierTouched = ref(false)\n\nconst editor = computed(() => props.definition.editor)\nconst stringValue = computed(() => (typeof props.modelValue === 'string' ? props.modelValue : ''))\nconst numberValue = computed(() =>\n typeof props.modelValue === 'number' && Number.isFinite(props.modelValue)\n ? props.modelValue\n : undefined,\n)\nconst primitiveValue = computed(() =>\n ['string', 'number', 'boolean'].includes(typeof props.modelValue)\n ? (props.modelValue as string | number | boolean)\n : undefined,\n)\nconst controlledOptions = computed<DesignerPropertyOption[]>(() => {\n const currentEditor = editor.value\n if (currentEditor.type === 'DATE_FORMAT') {\n return includeDesignerCurrentOption(\n designerDateFormatOptions(props.configuration[currentEditor.sourceKey]),\n props.modelValue,\n )\n }\n if (currentEditor.type === 'GRID_SPAN') {\n const presets =\n currentEditor.device === 'desktop' ? DESIGNER_PC_SPAN_PRESETS : DESIGNER_MOBILE_SPAN_PRESETS\n return includeDesignerCurrentOption(presets, props.modelValue, (value) => `${value}/24`)\n }\n if (currentEditor.type === 'GRID_OFFSET') {\n const span = finiteInteger(props.configuration[currentEditor.spanKey], 24)\n const maximum = Math.max(0, 24 - Math.max(1, Math.min(24, span)))\n const presets: DesignerPropertyOption[] = [\n { label: '无偏移', value: 0 },\n ...numberOptions(\n Array.from({ length: maximum }, (_, index) => index + 1),\n (value) => `${value}/24`,\n ),\n ]\n return includeDesignerCurrentOption(presets, props.modelValue, (value) => `${value}/24`)\n }\n if (\n currentEditor.type === 'SELECT' ||\n currentEditor.type === 'SEGMENTED' ||\n currentEditor.type === 'PRESET_NUMBER'\n ) {\n return currentEditor.legacyValuePolicy === 'PRESERVE' || currentEditor.type === 'PRESET_NUMBER'\n ? includeDesignerCurrentOption(\n currentEditor.options,\n props.modelValue,\n (value) => currentEditor.legacyValueLabels?.[String(value)] ?? String(value),\n )\n : currentEditor.options\n }\n return []\n})\nconst selectedFileExtensions = computed(() => parseFileExtensions(stringValue.value))\nconst fileTypeGroups = computed(() =>\n DESIGNER_FILE_TYPE_OPTIONS.filter((item) => item.group).map((item) => ({\n label: item.label,\n value: `group:${item.extensions.join('|')}`,\n })),\n)\nconst fileExtensionOptions = computed(() => {\n const known = DESIGNER_FILE_TYPE_OPTIONS.filter((item) => !item.group).map((item) => ({\n label: item.label,\n value: item.extensions[0] ?? '',\n }))\n const knownValues = new Set(known.map((item) => item.value))\n const legacy = selectedFileExtensions.value\n .filter((extension) => !knownValues.has(extension))\n .map((extension) => ({ label: `当前扩展名 · ${extension}`, value: extension }))\n return [...legacy, ...known]\n})\nconst urlError = computed(() => validateHttpsUrl(urlDraft.value))\nconst identifierError = computed(() => validateIdentifier(identifierDraft.value))\nconst resourceLabel = computed(() => {\n const currentEditor = editor.value\n if (currentEditor.type !== 'RESOURCE_REFERENCE') return '资源'\n return {\n DICTIONARY: '字典',\n PROCESS: '流程',\n FORM: '表单',\n ASSET_POLICY: '文件策略',\n }[currentEditor.resourceType]\n})\n\nwatch(\n () => props.modelValue,\n (value) => {\n urlDraft.value = typeof value === 'string' ? value : ''\n identifierDraft.value = typeof value === 'string' ? value : ''\n identifierTouched.value = false\n },\n { immediate: true },\n)\n\nfunction emitValue(value: unknown): void {\n emit('update:modelValue', value)\n}\n\nfunction emitNumberValue(value: number | undefined): void {\n emitValue(value === undefined && props.modelValue === null ? null : value)\n}\n\nfunction updateUrlDraft(value: string): void {\n urlDraft.value = value\n if (!validateHttpsUrl(value)) emitValue(value)\n}\n\nfunction updateIdentifierDraft(value: string): void {\n identifierDraft.value = value\n}\n\nfunction commitIdentifier(): void {\n identifierTouched.value = true\n if (identifierError.value || identifierDraft.value === props.modelValue) return\n emitValue(identifierDraft.value)\n}\n\nfunction blurIdentifier(event: Event | KeyboardEvent): void {\n const target = event.currentTarget as HTMLInputElement | null\n target?.blur()\n}\n\nfunction updateFileTypes(values: string[]): void {\n const extensions = new Set<string>()\n for (const value of values) {\n if (value.startsWith('group:')) {\n for (const extension of value.slice('group:'.length).split('|')) extensions.add(extension)\n continue\n }\n extensions.add(normalizeExtension(value))\n }\n emitValue([...extensions].filter(Boolean).sort().join(','))\n}\n\nfunction parseFileExtensions(value: string): string[] {\n return [...new Set(value.split(',').map(normalizeExtension).filter(Boolean))]\n}\n\nfunction normalizeExtension(value: string): string {\n const normalized = value.trim().toLowerCase()\n if (!normalized) return ''\n return normalized.startsWith('.') ? normalized : `.${normalized}`\n}\n\nfunction validateHttpsUrl(value: string): string {\n if (!value.trim()) return ''\n try {\n return new URL(value).protocol === 'https:' ? '' : '仅允许 HTTPS 地址'\n } catch {\n return '请输入完整的 HTTPS 地址'\n }\n}\n\nfunction validateIdentifier(value: string): string {\n if (!value) return '编码不能为空'\n return /^[A-Za-z][A-Za-z0-9_]{0,63}$/.test(value)\n ? ''\n : '必须以字母开头,且只能包含字母、数字和下划线'\n}\n\nfunction finiteInteger(value: unknown, fallback: number): number {\n return typeof value === 'number' && Number.isInteger(value) ? value : fallback\n}\n</script>\n\n<style scoped>\n.designer-property-editor,\n.designer-property-editor :deep(.el-select),\n.designer-property-editor :deep(.el-input-number),\n.designer-property-editor :deep(.el-segmented) {\n width: 100%;\n}\n\n.designer-property-editor__unit-control {\n display: grid;\n align-items: center;\n grid-template-columns: minmax(0, 1fr) auto;\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-property-editor__unit-control > span,\n.designer-property-editor__availability {\n color: var(--el-text-color-secondary);\n font-size: 12px;\n}\n\n.designer-property-editor__availability,\n.designer-property-editor__error {\n display: block;\n margin-top: var(--daxiang-form-space-1);\n}\n\n.designer-property-editor__error {\n color: var(--el-color-danger);\n font-size: 12px;\n}\n</style>\n","<template>\n <aside class=\"designer-inspector\">\n <ElTabs v-model=\"activeTabModel\" class=\"designer-inspector__tabs\">\n <ElTabPane label=\"组件配置\" name=\"component\">\n <div\n v-if=\"selectedNode && registration\"\n ref=\"componentScrollRef\"\n class=\"designer-inspector__scroll\"\n >\n <nav class=\"designer-inspector__section-nav\" aria-label=\"属性分区\">\n <ElTooltip\n v-for=\"item in inspectorNavigation\"\n :key=\"item.name\"\n :content=\"item.label\"\n placement=\"bottom\"\n >\n <button\n type=\"button\"\n :class=\"{ 'is-active': activeSection === item.name }\"\n :aria-label=\"item.label\"\n @click=\"jumpToSection(item.name)\"\n >\n <DxSvgIcon :icon=\"item.icon\" />\n </button>\n </ElTooltip>\n </nav>\n <header class=\"designer-inspector__identity\">\n <DxSvgIcon :icon=\"registration.icon\" />\n <div>\n <strong>{{ selectedField?.label || registration.name }}</strong>\n <small\n >{{ registration.componentType }} · 配置 v{{\n registration.configurationVersion\n }}</small\n >\n </div>\n </header>\n <ElAlert\n v-if=\"registration.availability !== 'AVAILABLE'\"\n :type=\"registration.availability === 'UNAVAILABLE' ? 'warning' : 'info'\"\n :closable=\"false\"\n show-icon\n :title=\"registration.unavailableReason\"\n />\n\n <ElCollapse v-model=\"openedSections\">\n <ElCollapseItem\n v-if=\"selectedField\"\n id=\"designer-inspector-section-identity\"\n title=\"字段身份\"\n name=\"identity\"\n >\n <ElForm label-position=\"top\">\n <ElFormItem label=\"字段名称\" required>\n <ElInput\n :model-value=\"selectedField.label\"\n maxlength=\"80\"\n @update:model-value=\"updateField({ label: $event })\"\n />\n </ElFormItem>\n <ElFormItem label=\"字段编码\" required>\n <ElInput\n :model-value=\"selectedField.key\"\n maxlength=\"64\"\n @update:model-value=\"updateField({ key: normalizeKey($event) })\"\n />\n </ElFormItem>\n <ElFormItem label=\"语义类型\">\n <ElInput :model-value=\"selectedField.semanticType\" disabled />\n </ElFormItem>\n <ElFormItem label=\"展示控件\">\n <ElSelect\n :model-value=\"selectedField.componentType\"\n @update:model-value=\"changeComponent\"\n >\n <ElOption\n v-for=\"item in compatibleComponents\"\n :key=\"item.componentType\"\n :label=\"item.name\"\n :value=\"item.componentType\"\n :disabled=\"item.availability === 'UNAVAILABLE'\"\n />\n </ElSelect>\n </ElFormItem>\n <ElFormItem label=\"绑定状态\">\n <ElTag\n effect=\"plain\"\n :type=\"selectedField.bindingStatus === 'UNBOUND' ? 'info' : 'success'\"\n >\n {{ selectedField.entityCode }} ·\n {{ selectedField.bindingStatus === 'UNBOUND' ? '本地字段' : '来源字段' }}\n </ElTag>\n </ElFormItem>\n </ElForm>\n </ElCollapseItem>\n\n <ElCollapseItem\n v-if=\"selectedField\"\n id=\"designer-inspector-section-advanced\"\n title=\"高级能力\"\n name=\"advanced\"\n >\n <div class=\"designer-inspector__advanced-actions\">\n <div>\n <span>数据联动与计算</span>\n <small>{{ selectedField.behavior.valueRules.length }} 条规则</small>\n <ElButton plain @click=\"emit('open-field-advanced')\">配置</ElButton>\n </div>\n <div>\n <span>隐藏 / 必填 / 禁用条件</span>\n <small>{{ selectedField.behavior.stateRules.length }} 条规则</small>\n <ElButton plain @click=\"emit('open-field-advanced')\">配置</ElButton>\n </div>\n <div>\n <span>验证规则</span>\n <small>与必填独立 · {{ selectedField.behavior.validationRules.length }} 条</small>\n <ElButton plain @click=\"emit('open-field-advanced')\">配置</ElButton>\n </div>\n <div>\n <span>组件事件</span>\n <small\n >{{ Object.keys(selectedField.behavior.eventBindings).length }} 个绑定</small\n >\n <ElButton plain @click=\"emit('open-event-editor')\">设置事件</ElButton>\n </div>\n </div>\n </ElCollapseItem>\n\n <ElCollapseItem\n v-else-if=\"registration.supportedEvents?.length\"\n id=\"designer-inspector-section-advanced\"\n title=\"事件能力\"\n name=\"advanced\"\n >\n <div class=\"designer-inspector__container-events\">\n <div>\n <ElTag v-for=\"event in registration.supportedEvents\" :key=\"event\" effect=\"plain\">\n {{ componentEventLabel(event) }}\n </ElTag>\n </div>\n <small>事件使用声明式动作与条件步骤,不执行自由脚本。</small>\n <ElButton plain @click=\"emit('open-event-editor')\">设置事件</ElButton>\n </div>\n </ElCollapseItem>\n\n <ElCollapseItem\n v-if=\"selectedRelation\"\n id=\"designer-inspector-section-relation\"\n title=\"主子关系\"\n name=\"relation\"\n >\n <ElForm label-position=\"top\">\n <ElFormItem label=\"关系名称\" required>\n <ElInput\n :model-value=\"selectedRelation.name\"\n maxlength=\"80\"\n @update:model-value=\"updateRelation({ name: $event })\"\n />\n </ElFormItem>\n <ElFormItem label=\"关系编码\" required>\n <DesignerPropertyEditorHost\n :definition=\"identifierDefinitions.relationCode\"\n :model-value=\"selectedRelation.code\"\n @update:model-value=\"updateRelation({ code: String($event) })\"\n />\n </ElFormItem>\n <ElFormItem label=\"父实体\">\n <ElInput\n :model-value=\"`${document.dataSchema.rootEntity.name} · ${document.dataSchema.rootEntity.code}`\"\n disabled\n />\n </ElFormItem>\n <ElFormItem label=\"子实体名称\" required>\n <ElInput\n :model-value=\"selectedRelation.childEntity.name\"\n maxlength=\"80\"\n @update:model-value=\"updateRelation({ childEntityName: $event })\"\n />\n </ElFormItem>\n <ElFormItem label=\"子实体编码\" required>\n <DesignerPropertyEditorHost\n :definition=\"identifierDefinitions.childEntityCode\"\n :model-value=\"selectedRelation.childEntity.code\"\n @update:model-value=\"updateRelation({ childEntityCode: String($event) })\"\n />\n </ElFormItem>\n <div class=\"designer-inspector__two-columns\">\n <ElFormItem label=\"关系类型\">\n <ElInput model-value=\"一对多\" disabled />\n </ElFormItem>\n <ElFormItem label=\"加载方式\">\n <ElInput\n :model-value=\"selectedRelation.loadMode === 'ASYNC' ? '异步' : '同步'\"\n disabled\n />\n </ElFormItem>\n </div>\n <ElTag effect=\"plain\" :type=\"document.dataSchema.source ? 'success' : 'warning'\">\n {{\n document.dataSchema.source\n ? '来源关系 · 待服务端解析'\n : '本地关系 · 待服务端解析'\n }}\n </ElTag>\n </ElForm>\n </ElCollapseItem>\n\n <ElCollapseItem\n v-if=\"selectedField\"\n id=\"designer-inspector-section-field-basic\"\n title=\"基础与校验\"\n name=\"field-basic\"\n >\n <ElForm label-position=\"top\">\n <ElFormItem label=\"帮助文字\">\n <ElInput\n :model-value=\"selectedField.helpText\"\n maxlength=\"300\"\n @update:model-value=\"updateField({ helpText: $event })\"\n />\n </ElFormItem>\n <ElFormItem label=\"占位提示\">\n <ElInput\n :model-value=\"selectedField.display.placeholder\"\n maxlength=\"160\"\n @update:model-value=\"updateDisplay('placeholder', $event)\"\n />\n </ElFormItem>\n <ElFormItem label=\"必填\">\n <ElSwitch\n :model-value=\"selectedField.required\"\n @update:model-value=\"updateField({ required: Boolean($event) })\"\n />\n </ElFormItem>\n <ElFormItem label=\"只读\">\n <ElSwitch\n :model-value=\"selectedField.display.readonly\"\n @update:model-value=\"updateDisplay('readonly', Boolean($event))\"\n />\n </ElFormItem>\n <ElFormItem label=\"隐藏\">\n <ElSwitch\n :model-value=\"selectedField.display.hidden\"\n @update:model-value=\"updateDisplay('hidden', Boolean($event))\"\n />\n </ElFormItem>\n <ElFormItem label=\"默认值\">\n <DesignerFieldDefaultValueEditor\n :field=\"selectedField\"\n @update:model-value=\"updateField({ defaultValue: $event })\"\n />\n </ElFormItem>\n <ElFormItem label=\"校验提示\">\n <ElInput\n :model-value=\"selectedField.validation.message ?? ''\"\n @update:model-value=\"updateValidation('message', $event)\"\n />\n </ElFormItem>\n </ElForm>\n </ElCollapseItem>\n\n <ElCollapseItem\n v-for=\"section in propertySections\"\n :key=\"section.code\"\n :id=\"`designer-inspector-section-configuration-${section.code}`\"\n :title=\"section.label\"\n :name=\"`configuration-${section.code}`\"\n >\n <ElForm label-position=\"top\">\n <ElFormItem\n v-for=\"definition in section.items\"\n :key=\"definition.key\"\n :label=\"definition.label\"\n >\n <DesignerPropertyEditorHost\n :definition=\"definition\"\n :model-value=\"configurationValue(definition.key)\"\n :configuration=\"selectedConfiguration\"\n @update:model-value=\"updateConfiguration(definition.key, $event)\"\n />\n <small v-if=\"definition.description\">{{ definition.description }}</small>\n </ElFormItem>\n </ElForm>\n </ElCollapseItem>\n\n <div\n v-if=\"selectedContainerAppearance\"\n class=\"designer-inspector__effective-appearance\"\n >\n <DxSvgIcon icon=\"ri:palette-line\" />\n <span>\n 当前生效:{{ containerStyleLabel(selectedContainerAppearance.style) }} ·\n {{ radiusLabel(selectedContainerAppearance.radius) }}\n </span>\n <small>\n 样式{{\n selectedContainerAppearance.styleSource === 'FORM' ? '跟随表单' : '组件覆盖'\n }}, 圆角{{\n selectedContainerAppearance.radiusSource === 'FORM' ? '跟随表单' : '组件覆盖'\n }}\n </small>\n </div>\n\n <ElCollapseItem id=\"designer-inspector-section-layout\" title=\"响应式布局\" name=\"layout\">\n <div class=\"designer-inspector__device-grid\">\n <template v-for=\"deviceName in ['pc', 'mobile'] as const\" :key=\"deviceName\">\n <strong>{{ deviceName === 'pc' ? 'PC' : '移动端' }}</strong>\n <ElForm label-position=\"top\">\n <div class=\"designer-inspector__two-columns\">\n <ElFormItem label=\"跨度\">\n <DesignerPropertyEditorHost\n :definition=\"gridSpanDefinition(deviceName)\"\n :model-value=\"selectedNode.layout[deviceName].span\"\n :configuration=\"{ ...selectedNode.layout[deviceName] }\"\n @update:model-value=\"updateGrid(deviceName, 'span', Number($event))\"\n />\n </ElFormItem>\n <ElFormItem label=\"偏移\">\n <DesignerPropertyEditorHost\n :definition=\"gridOffsetDefinition\"\n :model-value=\"selectedNode.layout[deviceName].offset\"\n :configuration=\"{ ...selectedNode.layout[deviceName] }\"\n @update:model-value=\"updateGrid(deviceName, 'offset', Number($event))\"\n />\n </ElFormItem>\n </div>\n <ElFormItem :label=\"layoutShowLabelText\">\n <ElSwitch\n :model-value=\"selectedNode.layout[deviceName].showLabel\"\n @update:model-value=\"updateGrid(deviceName, 'showLabel', Boolean($event))\"\n />\n </ElFormItem>\n <ElFormItem label=\"标签位置\">\n <ElSelect\n :model-value=\"selectedNode.layout[deviceName].labelPosition\"\n @update:model-value=\"updateGrid(deviceName, 'labelPosition', $event)\"\n >\n <ElOption label=\"继承表单\" value=\"INHERIT\" />\n <ElOption label=\"顶部\" value=\"TOP\" />\n <ElOption label=\"左侧\" value=\"LEFT\" />\n <ElOption label=\"右侧\" value=\"RIGHT\" />\n </ElSelect>\n </ElFormItem>\n </ElForm>\n </template>\n </div>\n </ElCollapseItem>\n </ElCollapse>\n </div>\n <div v-else-if=\"activeModule\" class=\"designer-inspector__scroll\">\n <header class=\"designer-inspector__identity\">\n <DxSvgIcon\n :icon=\"activeModule.kind === 'DIALOG' ? 'ri:window-line' : 'ri:layout-right-2-line'\"\n />\n <div>\n <strong>{{ activeModule.name }}</strong>\n <small\n >{{ activeModule.kind === 'DIALOG' ? '弹窗模块' : '抽屉模块' }} ·\n {{ activeModule.code }}</small\n >\n </div>\n </header>\n <ElForm label-position=\"top\">\n <ElDivider content-position=\"left\">模块配置</ElDivider>\n <ElFormItem label=\"模块名称\" required>\n <ElInput v-model=\"moduleNameDraft\" maxlength=\"80\" @blur=\"commitModuleName\" />\n </ElFormItem>\n <ElFormItem label=\"模块编码\" required>\n <ElInput v-model=\"moduleCodeDraft\" maxlength=\"64\" @blur=\"commitModuleCode\" />\n </ElFormItem>\n <ElFormItem label=\"模块类型\">\n <ElInput :model-value=\"activeModule.kind === 'DIALOG' ? '弹窗' : '抽屉'\" disabled />\n </ElFormItem>\n <ElFormItem label=\"数据草稿\">\n <ElSelect\n :model-value=\"activeModule.dataContext\"\n @update:model-value=\"\n emit('update-module', activeModule.code, { dataContext: $event })\n \"\n >\n <ElOption label=\"主表草稿\" value=\"FORM_DRAFT\" />\n <ElOption label=\"当前子表行草稿\" value=\"SUBTABLE_ROW_DRAFT\" />\n </ElSelect>\n </ElFormItem>\n <ElFormItem :label=\"activeModule.kind === 'DIALOG' ? '弹窗最大宽度' : '抽屉最大宽度'\">\n <ElInputNumber\n :model-value=\"activeModule.width\"\n :min=\"320\"\n :max=\"1200\"\n :step=\"20\"\n controls-position=\"right\"\n @change=\"updateModuleWidth(activeModule.code, $event)\"\n />\n <small>设计外壳优先占满可用空间,达到此上限后居中展示;运行预览沿用该配置值。</small>\n </ElFormItem>\n <ElFormItem v-if=\"activeModule.kind === 'DIALOG'\" label=\"弹窗圆角\">\n <ElSelect\n :model-value=\"activeModule.radius ?? 'THEME'\"\n @update:model-value=\"updateModuleRadius(activeModule.code, $event)\"\n >\n <ElOption\n v-for=\"option in radiusOptions(false)\"\n :key=\"String(option.value)\"\n :label=\"option.label\"\n :value=\"option.value\"\n />\n </ElSelect>\n <small>默认跟随系统全局圆角,也可选择直角、小、标准或大圆角。</small>\n </ElFormItem>\n <ElFormItem v-if=\"activeModule.kind === 'DIALOG'\" label=\"运行最大高度\">\n <ElSelect\n :model-value=\"activeModule.maxHeightPreset ?? 'VIEWPORT'\"\n @update:model-value=\"updateModuleMaxHeight(activeModule.code, $event)\"\n >\n <ElOption label=\"紧凑 · 60vh\" value=\"COMPACT\" />\n <ElOption label=\"标准 · 72vh\" value=\"STANDARD\" />\n <ElOption label=\"宽松 · 84vh\" value=\"SPACIOUS\" />\n <ElOption label=\"适应视口\" value=\"VIEWPORT\" />\n </ElSelect>\n <small>仅在运行预览和实际使用时限制弹窗高度;设计画布始终完整展开。</small>\n </ElFormItem>\n </ElForm>\n </div>\n <ElEmpty\n v-else\n class=\"designer-inspector__empty\"\n description=\"选择画布节点后配置属性\"\n :image-size=\"64\"\n />\n </ElTabPane>\n\n <ElTabPane label=\"表单配置\" name=\"form\">\n <div class=\"designer-inspector__scroll\">\n <ElForm label-position=\"top\">\n <ElFormItem label=\"表单名称\" required>\n <ElInput\n :model-value=\"document.name\"\n maxlength=\"80\"\n @update:model-value=\"emit('update-document', { name: $event })\"\n />\n </ElFormItem>\n <ElFormItem label=\"表单说明\">\n <ElInput\n :model-value=\"document.description\"\n type=\"textarea\"\n :rows=\"3\"\n maxlength=\"300\"\n @update:model-value=\"emit('update-document', { description: $event })\"\n />\n </ElFormItem>\n <ElDivider content-position=\"left\">主实体</ElDivider>\n <ElFormItem label=\"主实体名称\" required>\n <ElInput\n :model-value=\"document.dataSchema.rootEntity.name\"\n maxlength=\"80\"\n @update:model-value=\"updateRootEntity({ name: $event })\"\n />\n </ElFormItem>\n <ElFormItem label=\"主实体编码\" required>\n <DesignerPropertyEditorHost\n :definition=\"identifierDefinitions.rootEntityCode\"\n :model-value=\"document.dataSchema.rootEntity.code\"\n @update:model-value=\"updateRootEntity({ code: String($event) })\"\n />\n </ElFormItem>\n <ElFormItem label=\"数据模型来源\">\n <ElTag effect=\"plain\" :type=\"document.dataSchema.source ? 'success' : 'info'\">\n {{ dataModelSourceLabel }}\n </ElTag>\n </ElFormItem>\n <ElDivider content-position=\"left\">标签</ElDivider>\n <ElFormItem label=\"默认位置\">\n <DesignerPropertyEditorHost\n :definition=\"appearanceDefinitions.labelPosition\"\n :model-value=\"document.appearance.labelPosition\"\n @update:model-value=\"updateAppearance('labelPosition', $event)\"\n />\n </ElFormItem>\n <ElFormItem label=\"标签宽度\">\n <DesignerPropertyEditorHost\n :definition=\"appearanceDefinitions.labelWidth\"\n :model-value=\"document.appearance.labelWidth\"\n @update:model-value=\"updateAppearance('labelWidth', Number($event))\"\n />\n </ElFormItem>\n <ElFormItem label=\"标签后缀\">\n <ElInput\n :model-value=\"document.appearance.labelSuffix\"\n maxlength=\"4\"\n @update:model-value=\"updateAppearance('labelSuffix', $event)\"\n />\n </ElFormItem>\n <ElFormItem label=\"标签对齐\">\n <DesignerPropertyEditorHost\n :definition=\"appearanceDefinitions.labelAlign\"\n :model-value=\"document.appearance.labelAlign\"\n @update:model-value=\"updateAppearance('labelAlign', $event)\"\n />\n </ElFormItem>\n <ElDivider content-position=\"left\">栅格与控件</ElDivider>\n <div class=\"designer-inspector__two-columns\">\n <ElFormItem label=\"列间距\">\n <DesignerPropertyEditorHost\n :definition=\"appearanceDefinitions.gridGutter\"\n :model-value=\"document.appearance.gridGutter\"\n @update:model-value=\"updateAppearance('gridGutter', Number($event))\"\n />\n </ElFormItem>\n <ElFormItem label=\"字段行距\">\n <DesignerPropertyEditorHost\n :definition=\"appearanceDefinitions.rowGap\"\n :model-value=\"document.appearance.rowGap\"\n @update:model-value=\"updateAppearance('rowGap', Number($event))\"\n />\n </ElFormItem>\n </div>\n <div class=\"designer-inspector__two-columns\">\n <ElFormItem label=\"PC 默认跨度\">\n <DesignerPropertyEditorHost\n :definition=\"appearanceDefinitions.defaultPcSpan\"\n :model-value=\"document.appearance.defaultPcSpan\"\n @update:model-value=\"updateAppearance('defaultPcSpan', Number($event))\"\n />\n </ElFormItem>\n <ElFormItem label=\"移动默认跨度\">\n <DesignerPropertyEditorHost\n :definition=\"appearanceDefinitions.defaultMobileSpan\"\n :model-value=\"document.appearance.defaultMobileSpan\"\n @update:model-value=\"updateAppearance('defaultMobileSpan', Number($event))\"\n />\n </ElFormItem>\n </div>\n <ElFormItem label=\"控件尺寸\">\n <DesignerPropertyEditorHost\n :definition=\"appearanceDefinitions.size\"\n :model-value=\"document.appearance.size\"\n @update:model-value=\"updateAppearance('size', $event)\"\n />\n </ElFormItem>\n <ElFormItem label=\"只读展示\">\n <DesignerPropertyEditorHost\n :definition=\"appearanceDefinitions.readonlyDisplayMode\"\n :model-value=\"document.appearance.readonlyDisplayMode\"\n @update:model-value=\"updateAppearance('readonlyDisplayMode', $event)\"\n />\n </ElFormItem>\n <ElFormItem label=\"默认占位提示\">\n <ElInput\n :model-value=\"document.appearance.defaultPlaceholder\"\n @update:model-value=\"updateAppearance('defaultPlaceholder', $event)\"\n />\n </ElFormItem>\n <ElDivider content-position=\"left\">外观</ElDivider>\n <ElFormItem label=\"控件圆角\">\n <DesignerPropertyEditorHost\n :definition=\"appearanceDefinitions.controlRadius\"\n :model-value=\"document.appearance.controlRadius\"\n @update:model-value=\"updateAppearance('controlRadius', $event)\"\n />\n </ElFormItem>\n <ElFormItem label=\"默认容器样式\">\n <DesignerPropertyEditorHost\n :definition=\"appearanceDefinitions.containerStyle\"\n :model-value=\"document.appearance.containerStyle\"\n @update:model-value=\"updateAppearance('containerStyle', $event)\"\n />\n </ElFormItem>\n <ElFormItem label=\"默认容器圆角\">\n <DesignerPropertyEditorHost\n :definition=\"appearanceDefinitions.containerRadius\"\n :model-value=\"document.appearance.containerRadius\"\n @update:model-value=\"updateAppearance('containerRadius', $event)\"\n />\n </ElFormItem>\n <div\n class=\"designer-inspector__appearance-preview\"\n :class=\"designerControlRadiusClass(document.appearance.controlRadius)\"\n >\n <div :class=\"formContainerAppearanceClasses\">\n <span>容器外观预览</span>\n <ElInput model-value=\"字段控件\" readonly />\n </div>\n </div>\n <div class=\"designer-inspector__bulk-appearance\">\n <ElButton\n :disabled=\"surfaceContainerCount === 0\"\n @click=\"openApplyContainerAppearance\"\n >\n 应用到全部容器\n </ElButton>\n <small>清除组件独立设置,使后续表单外观调整继续联动。</small>\n </div>\n <ElDivider content-position=\"left\">提交与动作栏</ElDivider>\n <ElFormItem label=\"提交时忽略普通隐藏字段\">\n <ElSwitch\n :model-value=\"document.submitPolicy.ignoreHiddenFields\"\n @update:model-value=\"\n emit('update-submit-policy', { ignoreHiddenFields: Boolean($event) })\n \"\n />\n <small>技术隐藏字段仍提交;字段“忽略提交”始终优先。</small>\n </ElFormItem>\n <ElFormItem label=\"显示运行按钮\">\n <ElSwitch\n :model-value=\"document.actionBar.visible\"\n @update:model-value=\"emit('update-action-bar', { visible: Boolean($event) })\"\n />\n </ElFormItem>\n <div class=\"designer-inspector__two-columns\">\n <ElFormItem label=\"按钮位置\">\n <ElSelect\n :model-value=\"document.actionBar.position\"\n @update:model-value=\"emit('update-action-bar', { position: $event })\"\n >\n <ElOption label=\"顶部\" value=\"TOP\" /><ElOption label=\"底部\" value=\"BOTTOM\" />\n <ElOption label=\"顶部和底部\" value=\"BOTH\" />\n </ElSelect>\n </ElFormItem>\n <ElFormItem label=\"按钮对齐\">\n <ElSelect\n :model-value=\"document.actionBar.align\"\n @update:model-value=\"emit('update-action-bar', { align: $event })\"\n >\n <ElOption label=\"左侧\" value=\"LEFT\" /><ElOption label=\"居中\" value=\"CENTER\" />\n <ElOption label=\"右侧\" value=\"RIGHT\" />\n </ElSelect>\n </ElFormItem>\n </div>\n <div class=\"designer-inspector__action-buttons\">\n <ElCheckbox\n v-for=\"button in document.actionBar.buttons\"\n :key=\"button.action\"\n :model-value=\"button.enabled\"\n @update:model-value=\"updateActionButton(button.action, Boolean($event))\"\n >{{ button.label }}</ElCheckbox\n >\n </div>\n <ElDivider content-position=\"left\">全局高级能力</ElDivider>\n <div class=\"designer-inspector__global-actions\">\n <ElButton plain @click=\"emit('open-event-editor')\"\n ><DxSvgIcon icon=\"ri:flashlight-line\" />表单事件</ElButton\n >\n <ElButton plain @click=\"emit('open-global-advanced')\"\n ><DxSvgIcon icon=\"ri:database-2-line\" />变量 / 数据源 / 国际化</ElButton\n >\n <ElButton plain @click=\"emit('open-schema')\"\n ><DxSvgIcon icon=\"ri:code-s-slash-line\" />Schema 工具</ElButton\n >\n </div>\n </ElForm>\n </div>\n </ElTabPane>\n </ElTabs>\n\n <DModal\n v-model=\"applyAppearanceVisible\"\n title=\"应用表单外观到全部容器\"\n width=\"440px\"\n confirm-text=\"应用\"\n :confirm-disabled=\"applyAppearanceDimensions.length === 0 || surfaceContainerCount === 0\"\n @confirm=\"confirmApplyContainerAppearance\"\n >\n <ElAlert\n type=\"info\"\n :closable=\"false\"\n show-icon\n :title=\"`检测到 ${surfaceContainerCount} 个支持外观的显式容器`\"\n description=\"所选维度会恢复为跟随表单,包括历史填充样式;操作可整体撤销。\"\n />\n <ElCheckboxGroup v-model=\"applyAppearanceDimensions\" class=\"designer-inspector__bulk-options\">\n <ElCheckbox value=\"STYLE\">容器样式</ElCheckbox>\n <ElCheckbox value=\"RADIUS\">容器圆角</ElCheckbox>\n </ElCheckboxGroup>\n </DModal>\n </aside>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch, nextTick } from 'vue'\nimport DModal from '../infrastructure/FormModalShell.vue'\nimport DxSvgIcon from '../infrastructure/FormIcon.vue'\nimport { compatibleDesignerComponents, findDesignerComponent } from '@daxiangme/form-core'\nimport {\n countDesignerSurfaceContainers,\n designerContainerAppearanceClasses,\n designerControlRadiusClass,\n resolveDesignerContainerAppearance,\n} from '@daxiangme/form-core'\nimport { DESIGNER_SPACING_PRESETS, numberOptions } from '@daxiangme/form-core'\nimport type {\n DesignerComponentEvent,\n DesignerComponentRegistration,\n DesignerContainerAppearanceDimension,\n DesignerContainerNode,\n DesignerContainerStyleOverride,\n DesignerDocument,\n DesignerField,\n DesignerLayoutNode,\n DesignerOneToManyRelation,\n DesignerOverlayMaxHeightPreset,\n DesignerOverlayModule,\n DesignerPropertyDefinition,\n DesignerRadiusPreset,\n DesignerRelationPatch,\n DesignerRootEntityPatch,\n} from '@daxiangme/form-core'\nimport DesignerFieldDefaultValueEditor from './DesignerFieldDefaultValueEditor.vue'\nimport DesignerPropertyEditorHost from './DesignerPropertyEditorHost.vue'\n\ndefineOptions({ name: 'DesignerInspector' })\n\nconst props = defineProps<{\n document: DesignerDocument\n selectedNode?: DesignerLayoutNode\n selectedField?: DesignerField\n activeModule?: DesignerOverlayModule\n activeTab?: 'component' | 'form'\n}>()\nconst emit = defineEmits<{\n 'update-document': [patch: Partial<DesignerDocument>]\n 'update-appearance': [key: keyof DesignerDocument['appearance'], value: unknown]\n 'update-field': [patch: Partial<DesignerField>]\n 'change-component': [componentType: string]\n 'update-node': [patch: Partial<DesignerContainerNode>]\n 'update-configuration': [key: string, value: unknown]\n 'update-grid': [device: 'pc' | 'mobile', key: string, value: unknown]\n 'apply-container-appearance': [dimensions: DesignerContainerAppearanceDimension[]]\n 'update-root-entity': [patch: DesignerRootEntityPatch]\n 'update-relation': [relationCode: string, patch: DesignerRelationPatch]\n 'update-submit-policy': [patch: Partial<DesignerDocument['submitPolicy']>]\n 'update-action-bar': [patch: Partial<DesignerDocument['actionBar']>]\n 'update-module': [moduleCode: string, patch: Partial<DesignerOverlayModule>]\n 'open-field-advanced': []\n 'open-event-editor': []\n 'open-global-advanced': []\n 'open-schema': []\n 'update:active-tab': [tab: 'component' | 'form']\n}>()\nconst internalActiveTab = ref<'component' | 'form'>('component')\nconst activeTabModel = computed({\n get: () => props.activeTab ?? internalActiveTab.value,\n set: (value: string) => {\n if (value !== 'component' && value !== 'form') return\n internalActiveTab.value = value\n emit('update:active-tab', value)\n },\n})\nconst componentScrollRef = ref<HTMLElement>()\nconst openedSections = ref(['identity', 'field-basic', 'relation', 'configuration-BASIC', 'layout'])\nconst activeSection = ref('identity')\nconst applyAppearanceVisible = ref(false)\nconst applyAppearanceDimensions = ref<DesignerContainerAppearanceDimension[]>(['STYLE', 'RADIUS'])\nconst moduleNameDraft = ref('')\nconst moduleCodeDraft = ref('')\nconst identifierDefinitions = {\n rootEntityCode: propertyDefinition('rootEntityCode', '主实体编码', {\n type: 'IDENTIFIER',\n maxLength: 64,\n }),\n relationCode: propertyDefinition('relationCode', '关系编码', {\n type: 'IDENTIFIER',\n maxLength: 64,\n }),\n childEntityCode: propertyDefinition('childEntityCode', '子实体编码', {\n type: 'IDENTIFIER',\n maxLength: 64,\n }),\n} satisfies Record<string, DesignerPropertyDefinition>\nconst appearanceDefinitions = {\n labelPosition: propertyDefinition('labelPosition', '默认位置', {\n type: 'SEGMENTED',\n options: [\n { label: '顶部', value: 'TOP' },\n { label: '左侧', value: 'LEFT' },\n { label: '右侧', value: 'RIGHT' },\n ],\n }),\n labelWidth: propertyDefinition('labelWidth', '标签宽度', {\n type: 'PRESET_NUMBER',\n options: numberOptions([80, 100, 120, 160, 200], (value) => `${value} px`),\n minimum: 0,\n maximum: 320,\n unit: 'px',\n legacyValuePolicy: 'PRESERVE',\n }),\n labelAlign: propertyDefinition('labelAlign', '标签对齐', {\n type: 'SEGMENTED',\n options: [\n { label: '左对齐', value: 'LEFT' },\n { label: '右对齐', value: 'RIGHT' },\n ],\n }),\n gridGutter: propertyDefinition('gridGutter', '列间距', {\n type: 'PRESET_NUMBER',\n options: DESIGNER_SPACING_PRESETS,\n minimum: 0,\n maximum: 64,\n unit: 'px',\n legacyValuePolicy: 'PRESERVE',\n }),\n rowGap: propertyDefinition('rowGap', '字段行距', {\n type: 'PRESET_NUMBER',\n options: DESIGNER_SPACING_PRESETS,\n minimum: 0,\n maximum: 64,\n unit: 'px',\n legacyValuePolicy: 'PRESERVE',\n }),\n defaultPcSpan: propertyDefinition('defaultPcSpan', 'PC 默认跨度', {\n type: 'GRID_SPAN',\n device: 'desktop',\n legacyValuePolicy: 'PRESERVE',\n }),\n defaultMobileSpan: propertyDefinition('defaultMobileSpan', '移动默认跨度', {\n type: 'GRID_SPAN',\n device: 'mobile',\n legacyValuePolicy: 'PRESERVE',\n }),\n size: propertyDefinition('size', '控件尺寸', {\n type: 'SELECT',\n options: [\n { label: '小', value: 'SMALL' },\n { label: '默认', value: 'DEFAULT' },\n { label: '大', value: 'LARGE' },\n ],\n }),\n readonlyDisplayMode: propertyDefinition('readonlyDisplayMode', '只读展示', {\n type: 'SELECT',\n options: [\n { label: '禁用控件', value: 'CONTROL' },\n { label: '纯文本', value: 'TEXT' },\n ],\n }),\n controlRadius: propertyDefinition('controlRadius', '控件圆角', {\n type: 'SELECT',\n options: radiusOptions(false),\n }),\n containerStyle: propertyDefinition('containerStyle', '默认容器样式', {\n type: 'SEGMENTED',\n options: [\n { label: '无', value: 'NONE' },\n { label: '边框', value: 'BORDERED' },\n { label: '阴影', value: 'SHADOW' },\n ],\n }),\n containerRadius: propertyDefinition('containerRadius', '默认容器圆角', {\n type: 'SELECT',\n options: radiusOptions(false),\n }),\n} satisfies Record<string, DesignerPropertyDefinition>\nconst gridOffsetDefinition = propertyDefinition('offset', '偏移', {\n type: 'GRID_OFFSET',\n spanKey: 'span',\n legacyValuePolicy: 'PRESERVE',\n})\nconst registration = computed<DesignerComponentRegistration | undefined>(() => {\n if (props.selectedField) return findDesignerComponent(props.selectedField.componentType)\n if (props.selectedNode?.nodeType === 'CONTAINER')\n return findDesignerComponent(props.selectedNode.componentType)\n return undefined\n})\nconst compatibleComponents = computed(() =>\n props.selectedField ? compatibleDesignerComponents(props.selectedField.semanticType) : [],\n)\nconst selectedConfiguration = computed(\n () =>\n props.selectedField?.configuration ??\n (props.selectedNode?.nodeType === 'CONTAINER' ? props.selectedNode.configuration : {}),\n)\nconst selectedRelation = computed<DesignerOneToManyRelation | undefined>(() => {\n const node = props.selectedNode\n if (\n node?.nodeType !== 'CONTAINER' ||\n !['row-subtable', 'block-subtable'].includes(node.componentType)\n ) {\n return undefined\n }\n const relationCode =\n typeof node.configuration.relationCode === 'string' ? node.configuration.relationCode : ''\n return props.document.dataSchema.relations.find((relation) => relation.code === relationCode)\n})\nconst dataModelSourceLabel = computed(() => {\n const source = props.document.dataSchema.source\n if (!source) return '本地语义模型'\n const revision = source.sourceRevision === undefined ? '' : ` · r${source.sourceRevision}`\n return `${source.provider} · ${source.sourceId}${revision}`\n})\nconst propertySections = computed(() => {\n const definitions = registration.value?.properties ?? []\n const labels: Record<DesignerPropertyDefinition['section'], string> = {\n BASIC: '组件基础',\n DATA: '数据能力',\n DISPLAY: '显示效果',\n CAPABILITY: '专属能力',\n }\n return (Object.keys(labels) as DesignerPropertyDefinition['section'][])\n .map((code) => ({\n code,\n label: labels[code],\n items: definitions.filter(\n (item) =>\n item.section === code &&\n (!item.editor.visibleWhen || item.editor.visibleWhen(selectedConfiguration.value)),\n ),\n }))\n .filter((section) => section.items.length > 0)\n})\nconst inspectorNavigation = computed(() => {\n const items = [] as Array<{ name: string; label: string; icon: string }>\n if (props.selectedField) {\n items.push(\n { name: 'identity', label: '字段身份', icon: 'ri:file-settings-line' },\n { name: 'field-basic', label: '基础与校验', icon: 'ri:equalizer-2-line' },\n { name: 'advanced', label: '高级能力', icon: 'ri:flashlight-line' },\n )\n } else if (registration.value?.supportedEvents?.length) {\n items.push({ name: 'advanced', label: '事件能力', icon: 'ri:flashlight-line' })\n }\n if (selectedRelation.value) {\n items.push({ name: 'relation', label: '主子关系', icon: 'ri:git-branch-line' })\n }\n const icons: Record<DesignerPropertyDefinition['section'], string> = {\n BASIC: 'ri:settings-3-line',\n DATA: 'ri:database-2-line',\n DISPLAY: 'ri:font-size-2',\n CAPABILITY: 'ri:flashlight-line',\n }\n for (const section of propertySections.value) {\n items.push({\n name: `configuration-${section.code}`,\n label: section.label,\n icon: icons[section.code],\n })\n }\n items.push({ name: 'layout', label: '响应式布局', icon: 'ri:layout-grid-line' })\n return items\n})\nconst layoutShowLabelText = computed(() =>\n registration.value?.componentType === 'steps' ? '显示外层字段标题' : '显示标签',\n)\nconst selectedContainerAppearance = computed(() => {\n const selectedNode = props.selectedNode\n return selectedNode?.nodeType === 'CONTAINER'\n ? resolveDesignerContainerAppearance(props.document.appearance, selectedNode)\n : undefined\n})\nconst surfaceContainerCount = computed(() => countDesignerSurfaceContainers(props.document))\nconst formContainerAppearanceClasses = computed(() =>\n designerContainerAppearanceClasses({\n style: props.document.appearance.containerStyle,\n radius: props.document.appearance.containerRadius,\n styleSource: 'FORM',\n radiusSource: 'FORM',\n }),\n)\n\nwatch(\n () => [props.activeModule?.id, props.activeModule?.name, props.activeModule?.code] as const,\n ([, name, code]) => {\n moduleNameDraft.value = name ?? ''\n moduleCodeDraft.value = code ?? ''\n },\n { immediate: true },\n)\n\nfunction updateField(patch: Partial<DesignerField>): void {\n emit('update-field', patch)\n}\n\nfunction changeComponent(value: string): void {\n emit('change-component', value)\n}\n\nfunction updateDisplay(key: keyof DesignerField['display'], value: unknown): void {\n if (!props.selectedField) return\n emit('update-field', { display: { ...props.selectedField.display, [key]: value } })\n}\n\nfunction updateValidation(key: keyof DesignerField['validation'], value: unknown): void {\n if (!props.selectedField) return\n emit('update-field', { validation: { ...props.selectedField.validation, [key]: value } })\n}\n\nfunction updateConfiguration(key: string, value: unknown): void {\n emit('update-configuration', key, value)\n}\n\nfunction updateGrid(device: 'pc' | 'mobile', key: string, value: unknown): void {\n emit('update-grid', device, key, value)\n}\n\nfunction updateAppearance(key: keyof DesignerDocument['appearance'], value: unknown): void {\n emit('update-appearance', key, value)\n}\n\nfunction updateRootEntity(patch: DesignerRootEntityPatch): void {\n emit('update-root-entity', patch)\n}\n\nfunction updateRelation(patch: DesignerRelationPatch): void {\n if (!selectedRelation.value) return\n emit('update-relation', selectedRelation.value.code, patch)\n}\n\n/** 失焦时一次提交模块名称;校验拒绝后恢复文档中的权威值。 */\nasync function commitModuleName(): Promise<void> {\n const module = props.activeModule\n if (!module) return\n emit('update-module', module.code, { name: moduleNameDraft.value.trim() })\n await nextTick()\n moduleNameDraft.value = props.activeModule?.name ?? ''\n}\n\n/** 失焦时一次提交模块编码;编码变化由工作区统一同步事件引用。 */\nasync function commitModuleCode(): Promise<void> {\n const module = props.activeModule\n if (!module) return\n emit('update-module', module.code, { code: moduleCodeDraft.value.trim() })\n await nextTick()\n moduleCodeDraft.value = props.activeModule?.code ?? ''\n}\n\n/** 仅提交有效模块宽度,避免清空数字输入时产生非法文档值。 */\nfunction updateModuleWidth(moduleCode: string, value: number | undefined): void {\n if (typeof value !== 'number' || !Number.isFinite(value)) return\n emit('update-module', moduleCode, { width: value })\n}\n\n/** 仅提交受控弹窗圆角档位,拒绝自由数值和未知枚举。 */\nfunction updateModuleRadius(moduleCode: string, value: unknown): void {\n if (!['THEME', 'NONE', 'SMALL', 'BASE', 'LARGE'].includes(String(value))) return\n emit('update-module', moduleCode, { radius: value as DesignerRadiusPreset })\n}\n\n/** 仅提交受控弹窗运行高度档位,设计画布不会消费该值。 */\nfunction updateModuleMaxHeight(moduleCode: string, value: unknown): void {\n if (!['COMPACT', 'STANDARD', 'SPACIOUS', 'VIEWPORT'].includes(String(value))) return\n emit('update-module', moduleCode, {\n maxHeightPreset: value as DesignerOverlayMaxHeightPreset,\n })\n}\n\nfunction updateActionButton(\n action: DesignerDocument['actionBar']['buttons'][number]['action'],\n enabled: boolean,\n): void {\n emit('update-action-bar', {\n buttons: props.document.actionBar.buttons.map((button) =>\n button.action === action ? { ...button, enabled } : button,\n ),\n })\n}\n\nfunction openApplyContainerAppearance(): void {\n applyAppearanceDimensions.value = ['STYLE', 'RADIUS']\n applyAppearanceVisible.value = true\n}\n\nfunction confirmApplyContainerAppearance(): void {\n if (applyAppearanceDimensions.value.length === 0) return\n emit('apply-container-appearance', [...applyAppearanceDimensions.value])\n applyAppearanceVisible.value = false\n}\n\nfunction configurationValue(key: string): unknown {\n return selectedConfiguration.value[key]\n}\n\nfunction gridSpanDefinition(device: 'pc' | 'mobile'): DesignerPropertyDefinition {\n return propertyDefinition('span', '跨度', {\n type: 'GRID_SPAN',\n device: device === 'pc' ? 'desktop' : 'mobile',\n legacyValuePolicy: 'PRESERVE',\n })\n}\n\nfunction propertyDefinition(\n key: string,\n label: string,\n editor: DesignerPropertyDefinition['editor'],\n): DesignerPropertyDefinition {\n return { key, label, section: 'DISPLAY', editor }\n}\n\nfunction radiusOptions(includeInherit: boolean) {\n return [\n ...(includeInherit ? [{ label: '跟随表单', value: 'INHERIT' }] : []),\n { label: '跟随系统', value: 'THEME' },\n { label: '直角 · 0px', value: 'NONE' },\n { label: '小 · 4px', value: 'SMALL' },\n { label: '标准 · 8px', value: 'BASE' },\n { label: '大 · 12px', value: 'LARGE' },\n ]\n}\n\nfunction containerStyleLabel(style: Exclude<DesignerContainerStyleOverride, 'INHERIT'>): string {\n return { NONE: '无容器', BORDERED: '边框', SHADOW: '阴影', FILLED: '历史填充' }[style]\n}\n\nfunction radiusLabel(radius: DesignerRadiusPreset): string {\n return {\n THEME: '跟随系统',\n NONE: '直角',\n SMALL: '小圆角 4px',\n BASE: '标准圆角 8px',\n LARGE: '大圆角 12px',\n }[radius]\n}\n\nfunction normalizeKey(value: string): string {\n return value\n .trim()\n .replace(/[^a-zA-Z0-9_]/g, '_')\n .replace(/^([0-9])/, '_$1')\n}\n\nfunction componentEventLabel(event: DesignerComponentEvent): string {\n return { CHANGE: '值变化', BLUR: '失焦', FOCUS: '聚焦', CLICK: '点击' }[event]\n}\n\nasync function jumpToSection(name: string): Promise<void> {\n activeSection.value = name\n if (!openedSections.value.includes(name)) openedSections.value = [...openedSections.value, name]\n await nextTick()\n componentScrollRef.value\n ?.querySelector<HTMLElement>(`#designer-inspector-section-${name}`)\n ?.scrollIntoView({\n behavior: 'smooth',\n block: 'start',\n })\n}\n</script>\n\n<style scoped>\n.designer-inspector {\n display: flex;\n min-width: 0;\n min-height: 0;\n overflow: hidden;\n background: var(--el-bg-color);\n}\n\n.designer-inspector__tabs {\n display: flex;\n width: 100%;\n min-height: 0;\n flex-direction: column;\n}\n\n.designer-inspector__tabs :deep(.el-tabs__header) {\n flex: 0 0 auto;\n padding: 0 var(--daxiang-form-space-3);\n margin-bottom: 0;\n}\n\n.designer-inspector__tabs :deep(.el-tabs__content),\n.designer-inspector__tabs :deep(.el-tab-pane) {\n display: flex;\n width: 100%;\n min-width: 0;\n min-height: 0;\n flex: 1 1 0;\n overflow: hidden;\n}\n\n.designer-inspector__scroll {\n width: 100%;\n min-width: 0;\n min-height: 0;\n flex: 1 1 0;\n padding: var(--daxiang-form-space-3);\n overflow: hidden auto;\n overscroll-behavior: contain;\n}\n\n.designer-inspector__empty {\n display: flex;\n width: 100%;\n min-width: 0;\n min-height: 0;\n flex: 1 1 0;\n align-items: center;\n justify-content: center;\n}\n\n.designer-inspector__container-events {\n display: flex;\n flex-direction: column;\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-inspector__container-events > div {\n display: flex;\n flex-wrap: wrap;\n gap: var(--daxiang-form-space-1);\n}\n\n.designer-inspector__container-events small {\n color: var(--el-text-color-secondary);\n}\n\n.designer-inspector__section-nav {\n position: sticky;\n z-index: 4;\n top: calc(var(--daxiang-form-space-3) * -1);\n display: flex;\n align-items: center;\n padding: var(--daxiang-form-space-2) 0;\n margin-bottom: var(--daxiang-form-space-2);\n background: var(--el-bg-color);\n border-bottom: 1px solid var(--el-border-color-lighter);\n gap: var(--daxiang-form-space-1);\n}\n\n.designer-inspector__section-nav button {\n display: inline-flex;\n width: 32px;\n height: 32px;\n align-items: center;\n justify-content: center;\n color: var(--el-text-color-secondary);\n background: transparent;\n border: 0;\n border-radius: var(--el-border-radius-base);\n cursor: pointer;\n}\n\n.designer-inspector__section-nav button:hover,\n.designer-inspector__section-nav button.is-active {\n color: var(--el-color-primary);\n background: var(--el-color-primary-light-9);\n}\n\n.designer-inspector__identity {\n display: grid;\n align-items: center;\n padding-bottom: var(--daxiang-form-space-3);\n grid-template-columns: auto minmax(0, 1fr);\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-inspector__identity > div {\n display: flex;\n min-width: 0;\n flex-direction: column;\n}\n\n.designer-inspector__identity small,\n.designer-inspector :deep(.el-form-item small) {\n color: var(--el-text-color-secondary);\n font-size: 11px;\n}\n\n.designer-inspector :deep(.el-select),\n.designer-inspector :deep(.el-input-number),\n.designer-inspector :deep(.el-segmented) {\n width: 100%;\n}\n\n.designer-inspector :deep(.el-form-item) {\n margin-bottom: var(--daxiang-form-space-3);\n}\n\n.designer-inspector :deep(.el-collapse-item__header) {\n height: 42px;\n font-weight: 600;\n}\n\n.designer-inspector__two-columns {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-inspector__device-grid > strong {\n display: block;\n padding: var(--daxiang-form-space-2) 0;\n color: var(--el-text-color-primary);\n}\n\n.designer-inspector__effective-appearance {\n display: grid;\n align-items: center;\n padding: var(--daxiang-form-space-2);\n margin: var(--daxiang-form-space-2) 0;\n color: var(--el-text-color-regular);\n background: var(--el-fill-color-light);\n border-radius: var(--el-border-radius-base);\n grid-template-columns: auto minmax(0, 1fr);\n gap: var(--daxiang-form-space-1) var(--daxiang-form-space-2);\n}\n\n.designer-inspector__effective-appearance small {\n grid-column: 2;\n}\n\n.designer-inspector__appearance-preview {\n padding: var(--daxiang-form-space-2);\n margin-bottom: var(--daxiang-form-space-3);\n background: var(--el-fill-color-extra-light);\n border: 1px dashed var(--el-border-color);\n border-radius: var(--el-border-radius-base);\n}\n\n.designer-inspector__appearance-preview > div {\n display: grid;\n padding: var(--daxiang-form-space-3);\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-inspector__appearance-preview > .is-surface-none {\n padding: 0;\n}\n\n.designer-inspector__appearance-preview > .is-surface-bordered {\n border: 1px solid var(--el-border-color-lighter);\n border-radius: var(--daxiang-form-container-radius);\n}\n\n.designer-inspector__appearance-preview > .is-surface-shadow {\n background: var(--el-bg-color);\n border-radius: var(--daxiang-form-container-radius);\n box-shadow: var(--el-box-shadow-light);\n}\n\n.designer-inspector__appearance-preview span {\n color: var(--el-text-color-secondary);\n font-size: 12px;\n}\n\n.designer-inspector__bulk-appearance {\n display: flex;\n align-items: flex-start;\n flex-direction: column;\n gap: var(--daxiang-form-space-1);\n}\n\n.designer-inspector__bulk-appearance small {\n color: var(--el-text-color-secondary);\n font-size: 11px;\n}\n\n.designer-inspector__bulk-options {\n display: flex;\n padding-top: var(--daxiang-form-space-3);\n flex-direction: column;\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-inspector__advanced-actions,\n.designer-inspector__global-actions {\n display: flex;\n flex-direction: column;\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-inspector__advanced-actions > div {\n display: grid;\n align-items: center;\n padding: var(--daxiang-form-space-2);\n background: var(--el-fill-color-extra-light);\n border-radius: var(--el-border-radius-base);\n grid-template-columns: minmax(0, 1fr) auto;\n gap: var(--daxiang-form-space-1) var(--daxiang-form-space-2);\n}\n\n.designer-inspector__advanced-actions small {\n grid-column: 1;\n}\n\n.designer-inspector__advanced-actions .el-button {\n grid-column: 2;\n grid-row: 1 / span 2;\n}\n\n.designer-inspector__action-buttons {\n display: flex;\n margin-bottom: var(--daxiang-form-space-3);\n flex-wrap: wrap;\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-inspector__global-actions .el-button {\n width: 100%;\n justify-content: flex-start;\n margin-left: 0;\n}\n</style>\n","<template>\n <section class=\"designer-module-manager\">\n <header>\n <div>\n <strong>模块管理</strong>\n <small>主体之外可设计弹窗或抽屉,由声明式事件打开。</small>\n </div>\n </header>\n <div class=\"designer-module-manager__scroll\">\n <button\n type=\"button\"\n class=\"designer-module-manager__item\"\n :class=\"{ 'is-active': activeViewCode === 'main' }\"\n @click=\"emit('select', 'main')\"\n >\n <DxSvgIcon icon=\"ri:file-list-3-line\" />\n <span><strong>主体</strong><small>主表单</small></span>\n <DxSvgIcon v-if=\"activeViewCode === 'main'\" icon=\"ri:check-line\" />\n </button>\n <article\n v-for=\"module in document.uiSchema.overlays\"\n :key=\"module.id\"\n class=\"designer-module-manager__module\"\n :class=\"{ 'is-active': activeViewCode === module.code }\"\n >\n <button type=\"button\" @click=\"emit('select', module.code)\">\n <DxSvgIcon\n :icon=\"module.kind === 'DIALOG' ? 'ri:window-line' : 'ri:layout-right-2-line'\"\n />\n <span\n ><strong>{{ module.name }}</strong\n ><small>{{ module.code }}</small></span\n >\n <DxSvgIcon v-if=\"activeViewCode === module.code\" icon=\"ri:check-line\" />\n </button>\n <div>\n <ElTooltip content=\"复制模块\">\n <ElButton\n text\n circle\n aria-label=\"复制模块\"\n @click.stop=\"emit('duplicate', module.code)\"\n >\n <DxSvgIcon icon=\"ri:file-copy-line\" />\n </ElButton>\n </ElTooltip>\n <ElTooltip content=\"删除模块\">\n <ElButton\n text\n circle\n type=\"danger\"\n aria-label=\"删除模块\"\n @click.stop=\"emit('delete', module.code)\"\n >\n <DxSvgIcon icon=\"ri:delete-bin-line\" />\n </ElButton>\n </ElTooltip>\n </div>\n </article>\n <ElEmpty\n v-if=\"document.uiSchema.overlays.length === 0\"\n description=\"暂无弹窗或抽屉模块\"\n :image-size=\"56\"\n />\n <footer class=\"designer-module-manager__add\">\n <ElDropdown trigger=\"click\" @command=\"addModule\">\n <ElButton text>\n <DxSvgIcon icon=\"ri:add-line\" />\n 添加模块\n <DxSvgIcon icon=\"ri:arrow-down-s-line\" />\n </ElButton>\n <template #dropdown>\n <ElDropdownMenu>\n <ElDropdownItem command=\"DIALOG\">\n <DxSvgIcon icon=\"ri:window-line\" />弹窗\n </ElDropdownItem>\n <ElDropdownItem command=\"DRAWER\">\n <DxSvgIcon icon=\"ri:layout-right-2-line\" />抽屉\n </ElDropdownItem>\n </ElDropdownMenu>\n </template>\n </ElDropdown>\n </footer>\n </div>\n </section>\n</template>\n\n<script setup lang=\"ts\">\nimport DxSvgIcon from '../infrastructure/FormIcon.vue'\nimport type { DesignerDocument, DesignerOverlayModule } from '@daxiangme/form-core'\n\ndefineOptions({ name: 'DesignerModuleManager' })\n\ndefineProps<{ document: DesignerDocument; activeViewCode: string }>()\nconst emit = defineEmits<{\n select: [viewCode: string]\n add: [kind: DesignerOverlayModule['kind']]\n duplicate: [moduleCode: string]\n delete: [moduleCode: string]\n}>()\n\nfunction addModule(command: string | number | object): void {\n if (command === 'DIALOG' || command === 'DRAWER') emit('add', command)\n}\n</script>\n\n<style scoped>\n.designer-module-manager {\n display: flex;\n width: 100%;\n min-width: 0;\n min-height: 0;\n flex-direction: column;\n}\n\n.designer-module-manager > header {\n display: flex;\n padding: var(--daxiang-form-space-3);\n border-bottom: 1px solid var(--el-border-color-lighter);\n}\n\n.designer-module-manager > header > div,\n.designer-module-manager__item span,\n.designer-module-manager__module button span {\n display: flex;\n min-width: 0;\n flex-direction: column;\n}\n\n.designer-module-manager small {\n color: var(--el-text-color-secondary);\n font-size: 11px;\n}\n\n.designer-module-manager__scroll {\n min-height: 0;\n flex: 1 1 0;\n padding: var(--daxiang-form-space-2);\n overflow: hidden auto;\n}\n\n.designer-module-manager__item,\n.designer-module-manager__module > button {\n display: grid;\n width: 100%;\n min-width: 0;\n align-items: center;\n padding: var(--daxiang-form-space-2);\n color: var(--el-text-color-regular);\n text-align: left;\n background: transparent;\n border: 0;\n border-radius: var(--el-border-radius-base);\n cursor: pointer;\n grid-template-columns: auto minmax(0, 1fr) auto;\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-module-manager__item:hover,\n.designer-module-manager__item.is-active,\n.designer-module-manager__module.is-active > button {\n color: var(--el-color-primary);\n background: var(--el-color-primary-light-9);\n}\n\n.designer-module-manager__module {\n display: grid;\n align-items: center;\n border-bottom: 1px solid var(--el-border-color-extra-light);\n grid-template-columns: minmax(0, 1fr) auto;\n}\n\n.designer-module-manager__module > div {\n display: flex;\n}\n\n.designer-module-manager__add {\n padding-top: var(--daxiang-form-space-2);\n border-top: 1px solid var(--el-border-color-extra-light);\n}\n\n.designer-module-manager__add .el-button {\n justify-content: flex-start;\n padding-inline: var(--daxiang-form-space-2);\n}\n</style>\n","<template>\n <section class=\"designer-outline\">\n <ElTree\n v-if=\"items.length > 0\"\n :data=\"items\"\n node-key=\"id\"\n default-expand-all\n highlight-current\n :current-node-key=\"selectedNodeId\"\n :expand-on-click-node=\"false\"\n @node-click=\"selectNode\"\n >\n <template #default=\"{ data }\">\n <span class=\"designer-outline__node\">\n <DxSvgIcon :icon=\"data.children.length > 0 ? 'ri:folder-line' : 'ri:input-field'\" />\n <span>{{ data.label }}</span>\n <small>{{ data.typeLabel }}</small>\n </span>\n </template>\n </ElTree>\n <ElEmpty v-else description=\"画布暂无节点\" :image-size=\"56\" />\n </section>\n</template>\n\n<script setup lang=\"ts\">\nimport DxSvgIcon from '../infrastructure/FormIcon.vue'\nimport type { DesignerOutlineItem } from '@daxiangme/form-core'\n\ndefineOptions({ name: 'DesignerOutline' })\n\ndefineProps<{ items: DesignerOutlineItem[]; selectedNodeId: string }>()\nconst emit = defineEmits<{ select: [nodeId: string] }>()\n\nfunction selectNode(data: DesignerOutlineItem): void {\n emit('select', data.id)\n}\n</script>\n\n<style scoped>\n.designer-outline {\n min-height: 0;\n flex: 1 1 0;\n padding: var(--daxiang-form-space-2);\n overflow: auto;\n}\n\n.designer-outline__node {\n display: grid;\n width: 100%;\n min-width: 0;\n align-items: center;\n grid-template-columns: auto minmax(0, 1fr) auto;\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-outline__node span {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.designer-outline__node small {\n color: var(--el-text-color-secondary);\n font-size: 11px;\n}\n</style>\n","<template>\n <section class=\"designer-palette\">\n <div class=\"designer-palette__search\">\n <ElInput v-model=\"keyword\" clearable placeholder=\"搜索组件\">\n <template #prefix><DxSvgIcon icon=\"ri:search-line\" /></template>\n </ElInput>\n </div>\n <div class=\"designer-palette__scroll\">\n <section v-if=\"!keyword\" class=\"designer-palette__templates-section\">\n <header>\n <span>常用模板</span>\n <small>快速开始</small>\n </header>\n <div class=\"designer-palette__templates\">\n <button type=\"button\" @click=\"emit('apply-template', 'TWO_COLUMN')\">\n <DxSvgIcon icon=\"ri:layout-column-line\" />双列表单\n </button>\n <button type=\"button\" @click=\"emit('apply-template', 'SECTIONED')\">\n <DxSvgIcon icon=\"ri:layout-row-line\" />分组表单\n </button>\n <button type=\"button\" @click=\"emit('apply-template', 'SHOWCASE')\">\n <DxSvgIcon icon=\"ri:apps-2-line\" />能力示例\n </button>\n </div>\n </section>\n\n <ElCollapse v-model=\"expandedGroups\" class=\"designer-palette__groups\">\n <ElCollapseItem v-for=\"group in groups\" :key=\"group.code\" :name=\"group.code\">\n <template #title>\n <span class=\"designer-palette__group-title\"\n >{{ group.label }}<small>{{ group.items.length }}</small></span\n >\n </template>\n <div class=\"designer-palette__items\">\n <ElTooltip\n v-for=\"item in group.items\"\n :key=\"item.componentType\"\n :content=\"componentTooltip(item)\"\n popper-class=\"designer-palette-tooltip\"\n placement=\"right\"\n >\n <button\n type=\"button\"\n :aria-label=\"componentAriaLabel(item)\"\n :draggable=\"item.availability !== 'UNAVAILABLE'\"\n :disabled=\"item.availability === 'UNAVAILABLE'\"\n :class=\"{ 'is-conditional': item.availability === 'CONDITIONAL' }\"\n @click=\"emit('add', item.componentType)\"\n @dragstart=\"beginDrag($event, item.componentType)\"\n >\n <DxSvgIcon :icon=\"item.icon\" />\n <span>{{ item.name }}</span>\n <span\n v-if=\"item.availability !== 'AVAILABLE'\"\n class=\"designer-palette__status\"\n :class=\"`is-${item.availability.toLowerCase()}`\"\n aria-hidden=\"true\"\n >\n <DxSvgIcon icon=\"ri:plug-line\" />\n </span>\n </button>\n </ElTooltip>\n </div>\n </ElCollapseItem>\n </ElCollapse>\n <ElEmpty\n v-if=\"groups.every((group) => group.items.length === 0)\"\n description=\"没有匹配的组件\"\n :image-size=\"48\"\n />\n </div>\n </section>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport DxSvgIcon from '../infrastructure/FormIcon.vue'\nimport { DESIGNER_COMPONENTS } from '@daxiangme/form-core'\nimport type { DesignerComponentGroup, DesignerComponentRegistration } from '@daxiangme/form-core'\n\ndefineOptions({ name: 'DesignerPalette' })\n\nconst emit = defineEmits<{\n add: [componentType: string]\n 'apply-template': [templateCode: 'TWO_COLUMN' | 'SECTIONED' | 'SHOWCASE']\n}>()\nconst keyword = ref('')\nconst expandedGroups = ref<DesignerComponentGroup[]>([\n 'LAYOUT',\n 'BASIC',\n 'ADVANCED',\n 'DYNAMIC',\n 'SUBTABLE',\n 'AUXILIARY',\n])\nconst GROUPS: Array<{ code: DesignerComponentGroup; label: string }> = [\n { code: 'LAYOUT', label: '布局组件' },\n { code: 'BASIC', label: '基础组件' },\n { code: 'ADVANCED', label: '高级组件' },\n { code: 'DYNAMIC', label: '动态组件' },\n { code: 'SUBTABLE', label: '子表组件' },\n { code: 'AUXILIARY', label: '辅助组件' },\n]\nconst groups = computed(() => {\n const query = keyword.value.trim().toLowerCase()\n return GROUPS.map((group) => ({\n ...group,\n items: DESIGNER_COMPONENTS.filter(\n (item) =>\n item.group === group.code &&\n (!query || item.name.includes(query) || item.componentType.includes(query)),\n ),\n }))\n})\n\n/** 使用稳定 MIME 向画布传递组件编码,不把临时节点写入 Schema。 */\nfunction beginDrag(event: DragEvent, componentType: string): void {\n event.dataTransfer?.setData('application/x-daxiang-form-component', componentType)\n if (event.dataTransfer) event.dataTransfer.effectAllowed = 'copy'\n}\n\n/** 说明组件在静态设计器中的可用状态及缺失能力。 */\nfunction componentTooltip(item: DesignerComponentRegistration): string {\n if (item.availability === 'CONDITIONAL') {\n return `${item.name} · 需接入:${item.unavailableReason}`\n }\n if (item.availability === 'UNAVAILABLE') {\n return `${item.name} · 不可用:${item.unavailableReason}`\n }\n return `${item.name}:点击或拖入画布`\n}\n\n/** 为键盘和读屏用户补充与视觉徽标一致的状态说明。 */\nfunction componentAriaLabel(item: DesignerComponentRegistration): string {\n if (item.availability === 'CONDITIONAL') return `${item.name},需接入业务能力`\n if (item.availability === 'UNAVAILABLE') return `${item.name},当前不可用`\n return item.name\n}\n</script>\n\n<style scoped>\n.designer-palette {\n display: flex;\n min-height: 0;\n flex: 1 1 0;\n flex-direction: column;\n padding-block-start: var(--daxiang-form-space-3);\n}\n\n.designer-palette__search {\n padding-inline: var(--daxiang-form-space-3);\n}\n\n.designer-palette__scroll {\n min-height: 0;\n flex: 1 1 0;\n padding: var(--daxiang-form-space-3) var(--daxiang-form-space-2) 0 var(--daxiang-form-space-3);\n overflow: auto;\n}\n\n.designer-palette__templates-section > header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: var(--daxiang-form-space-2);\n color: var(--el-text-color-primary);\n font-weight: 600;\n}\n\n.designer-palette__templates-section > header small,\n.designer-palette__group-title small {\n color: var(--el-text-color-secondary);\n font-weight: 400;\n}\n\n.designer-palette__groups {\n margin-top: var(--daxiang-form-space-3);\n border: 0;\n}\n\n.designer-palette__groups :deep(.el-collapse-item__header) {\n height: 40px;\n border: 0;\n font-weight: 600;\n}\n\n.designer-palette__groups :deep(.el-collapse-item__wrap) {\n border: 0;\n}\n\n.designer-palette__groups :deep(.el-collapse-item__content) {\n padding-bottom: var(--daxiang-form-space-3);\n}\n\n.designer-palette__group-title {\n display: flex;\n flex: 1;\n align-items: center;\n justify-content: space-between;\n padding-right: var(--daxiang-form-space-2);\n}\n\n.designer-palette__items,\n.designer-palette__templates {\n display: grid;\n grid-template-columns: repeat(3, minmax(0, 1fr));\n gap: var(--daxiang-form-space-1);\n}\n\n.designer-palette__items button,\n.designer-palette__templates button {\n position: relative;\n display: flex;\n min-width: 0;\n min-height: 54px;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n padding: var(--daxiang-form-space-1);\n color: var(--el-text-color-regular);\n background: transparent;\n border: 1px solid transparent;\n border-radius: var(--el-border-radius-base);\n cursor: grab;\n gap: 2px;\n font: inherit;\n font-size: 12px;\n transition:\n color var(--el-transition-duration-fast),\n background-color var(--el-transition-duration-fast),\n border-color var(--el-transition-duration-fast);\n}\n\n.designer-palette__items button {\n min-height: 54px;\n}\n\n.designer-palette__items button > :deep(svg),\n.designer-palette__templates button > :deep(svg) {\n font-size: 18px;\n}\n\n.designer-palette__items button:hover:not(:disabled),\n.designer-palette__templates button:hover {\n color: var(--el-color-primary);\n background: var(--el-color-primary-light-9);\n border-color: transparent;\n}\n\n.designer-palette__items button:disabled {\n color: var(--el-text-color-disabled);\n cursor: not-allowed;\n opacity: 0.7;\n}\n\n.designer-palette__status {\n position: absolute;\n top: 4px;\n right: 4px;\n display: inline-flex;\n width: 16px;\n height: 16px;\n align-items: center;\n justify-content: center;\n color: var(--el-color-warning);\n font-size: 15px;\n}\n\n.designer-palette__status.is-unavailable {\n color: var(--el-text-color-disabled);\n}\n\n:global(.designer-palette-tooltip) {\n max-width: 280px;\n line-height: 1.6;\n white-space: normal;\n overflow-wrap: anywhere;\n}\n\n@media (width <= 1365px) {\n .designer-palette {\n padding-block-start: var(--daxiang-form-space-2);\n }\n\n .designer-palette__search {\n padding-inline: var(--daxiang-form-space-2);\n }\n\n .designer-palette__scroll {\n padding-inline-start: var(--daxiang-form-space-2);\n }\n\n .designer-palette__items,\n .designer-palette__templates {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .designer-palette__items button,\n .designer-palette__templates button {\n transition: none;\n }\n}\n</style>\n","<template>\n <DModal\n v-model=\"visibleModel\"\n title=\"等分当前容器字段\"\n width=\"460px\"\n confirm-text=\"应用布局\"\n :confirm-disabled=\"affectedCount === 0\"\n @confirm=\"save\"\n >\n <ElAlert\n :type=\"affectedCount > 0 ? 'info' : 'warning'\"\n :closable=\"false\"\n show-icon\n :title=\"`${targetLabel}:将调整 ${affectedCount} 个直接字段`\"\n :description=\"`跳过 ${skippedCount} 个整行、布局、子表、标题或不可处理节点;移动布局保持不变。`\"\n />\n <ElForm label-position=\"top\" class=\"designer-quick-grid-editor\">\n <ElFormItem label=\"PC 每行字段数\">\n <ElSegmented\n v-model=\"span\"\n :options=\"[\n { label: '1 列', value: 24 },\n { label: '2 列', value: 12 },\n { label: '3 列', value: 8 },\n { label: '4 列', value: 6 },\n ]\"\n />\n </ElFormItem>\n <small>应用时会同时清零这些字段的 PC 偏移,整次操作可一次撤销。</small>\n </ElForm>\n </DModal>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport DModal from '../infrastructure/FormModalShell.vue'\n\ndefineOptions({ name: 'DesignerQuickGridEditor' })\n\ndefineProps<{ targetLabel: string; affectedCount: number; skippedCount: number }>()\nconst emit = defineEmits<{ save: [span: 24 | 12 | 8 | 6] }>()\nconst visibleModel = defineModel<boolean>({ default: false })\nconst span = ref<24 | 12 | 8 | 6>(12)\n\nfunction save(): void {\n emit('save', span.value)\n visibleModel.value = false\n}\n</script>\n\n<style scoped>\n.designer-quick-grid-editor {\n padding-top: var(--daxiang-form-space-3);\n}\n\n.designer-quick-grid-editor :deep(.el-segmented) {\n width: 100%;\n}\n\n.designer-quick-grid-editor small {\n color: var(--el-text-color-secondary);\n}\n</style>\n","import { decodeDesignerDocument, serializeDesignerDocument } from '@daxiangme/form-core'\nimport type { DesignerDiagnostic, DesignerDocument } from '@daxiangme/form-core'\n\nconst STORAGE_PREFIX = 'daxiang-form:designer-document:v1:'\n\n/** 本地草稿恢复结果;损坏原文必须保留给用户下载。 */\nexport interface DesignerDraftLoadResult {\n document?: DesignerDocument\n raw?: string\n diagnostics: DesignerDiagnostic[]\n}\n\n/** 按当前表单路由标识生成相互隔离的存储键。 */\nexport function designerDraftStorageKey(documentId: string): string {\n return `${STORAGE_PREFIX}${encodeURIComponent(documentId || 'standalone')}`\n}\n\n/** 从浏览器本地存储读取并校验独立设计器草稿。 */\nexport function loadDesignerDraft(documentId: string): DesignerDraftLoadResult {\n const raw = window.localStorage.getItem(designerDraftStorageKey(documentId))\n if (!raw) return { diagnostics: [] }\n try {\n const decoded = decodeDesignerDocument(JSON.parse(raw) as unknown)\n if (decoded.document) return { document: decoded.document, diagnostics: decoded.diagnostics }\n return { raw, diagnostics: decoded.diagnostics }\n } catch {\n return {\n raw,\n diagnostics: [\n { severity: 'ERROR', code: 'DRAFT_JSON', message: '本地草稿不是合法 JSON', path: '$' },\n ],\n }\n }\n}\n\n/** 显式保存规范化草稿;预览和导入均不得自动调用。 */\nexport function saveDesignerDraft(documentId: string, document: DesignerDocument): void {\n window.localStorage.setItem(\n designerDraftStorageKey(documentId),\n serializeDesignerDocument(document),\n )\n}\n\n/** 清除当前表单隔离草稿。 */\nexport function removeDesignerDraft(documentId: string): void {\n window.localStorage.removeItem(designerDraftStorageKey(documentId))\n}\n\n/** 下载规范化设计文档或损坏草稿原文。 */\nexport function downloadDesignerText(content: string, filename: string): void {\n const url = URL.createObjectURL(new Blob([content], { type: 'application/json;charset=utf-8' }))\n const anchor = document.createElement('a')\n anchor.href = url\n anchor.download = filename\n anchor.click()\n URL.revokeObjectURL(url)\n}\n","<template>\n <DModal\n v-model=\"visibleModel\"\n title=\"Schema 工具\"\n width=\"min(1040px, calc(100vw - 32px))\"\n :show-footer=\"false\"\n :flush-content-vertical=\"true\"\n >\n <div class=\"designer-schema-inspector__actions\">\n <ElButton @click=\"copySchema\"><DxSvgIcon icon=\"ri:file-copy-line\" />复制 JSON</ElButton>\n <ElButton @click=\"downloadSchema\"><DxSvgIcon icon=\"ri:download-2-line\" />下载 JSON</ElButton>\n <ElButton type=\"primary\" plain @click=\"openImport\"\n ><DxSvgIcon icon=\"ri:upload-2-line\" />严格导入并比较</ElButton\n >\n <input\n ref=\"inputRef\"\n type=\"file\"\n accept=\"application/json,.json\"\n hidden\n @change=\"readImport\"\n />\n </div>\n <ElTabs v-model=\"activeTab\" class=\"designer-schema-inspector\">\n <ElTabPane label=\"只读预览\" name=\"preview\">\n <pre>{{ formattedDocument }}</pre>\n </ElTabPane>\n <ElTabPane :label=\"`诊断 ${diagnostics.length}`\" name=\"diagnostics\">\n <ElResult v-if=\"diagnostics.length === 0\" icon=\"success\" title=\"当前文档诊断通过\" />\n <ul v-else>\n <li v-for=\"item in diagnostics\" :key=\"`${item.code}:${item.path}`\">\n <ElTag :type=\"item.severity === 'ERROR' ? 'danger' : 'warning'\" effect=\"plain\">{{\n item.severity\n }}</ElTag>\n <code>{{ item.path }}</code\n ><span>{{ item.message }}</span>\n </li>\n </ul>\n </ElTabPane>\n <ElTabPane :label=\"`导入差异 ${diffItems.length}`\" name=\"diff\">\n <ElAlert\n v-if=\"importDiagnostics.length > 0\"\n type=\"error\"\n :closable=\"false\"\n show-icon\n title=\"导入文档未通过严格诊断\"\n :description=\"importDiagnostics.map((item) => `${item.path}:${item.message}`).join(';')\"\n />\n <template v-else-if=\"importDocument\">\n <div class=\"designer-schema-inspector__diff-actions\">\n <span>导入只在确认后形成一个可撤销命令,原草稿不会被后台改写。</span>\n <ElButton type=\"primary\" @click=\"confirmImport\">确认导入</ElButton>\n </div>\n <ul>\n <li v-for=\"item in diffItems\" :key=\"item.path\">\n <ElTag\n :type=\"\n item.kind === 'ADDED' ? 'success' : item.kind === 'REMOVED' ? 'danger' : 'warning'\n \"\n effect=\"plain\"\n >{{ diffLabel(item.kind) }}</ElTag\n >\n <code>{{ item.path }}</code\n ><span>{{ item.summary }}</span>\n </li>\n </ul>\n <ElEmpty v-if=\"diffItems.length === 0\" description=\"导入文档与当前文档一致\" />\n </template>\n <ElEmpty v-else description=\"选择 JSON 文件后查看严格诊断与差异\" />\n </ElTabPane>\n </ElTabs>\n </DModal>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport { ElMessage } from 'element-plus'\nimport DModal from '../infrastructure/FormModalShell.vue'\nimport DxSvgIcon from '../infrastructure/FormIcon.vue'\nimport { diagnoseDesignerDocument } from '@daxiangme/form-core'\nimport { downloadDesignerText } from '../composables/local-draft'\nimport { decodeDesignerImport } from '../composables/use-designer-engine'\nimport type { DesignerDiagnostic, DesignerDocument } from '@daxiangme/form-core'\n\ndefineOptions({ name: 'DesignerSchemaInspector' })\n\nconst props = defineProps<{ document: DesignerDocument }>()\nconst emit = defineEmits<{ import: [document: DesignerDocument] }>()\nconst visibleModel = defineModel<boolean>({ default: false })\nconst activeTab = ref('preview')\nconst inputRef = ref<HTMLInputElement>()\nconst importDocument = ref<DesignerDocument>()\nconst importDiagnostics = ref<DesignerDiagnostic[]>([])\nconst formattedDocument = computed(() => JSON.stringify(props.document, null, 2))\nconst diagnostics = computed(() => diagnoseDesignerDocument(props.document))\nconst diffItems = computed(() =>\n importDocument.value ? diffValues(props.document, importDocument.value, '$').slice(0, 500) : [],\n)\n\nasync function copySchema(): Promise<void> {\n try {\n await navigator.clipboard.writeText(formattedDocument.value)\n ElMessage.success('Schema JSON 已复制')\n } catch {\n ElMessage.error('浏览器未允许复制,请使用下载')\n }\n}\n\nfunction downloadSchema(): void {\n downloadDesignerText(\n formattedDocument.value,\n `form-designer-${safeFilename(props.document.id)}.json`,\n )\n}\n\nfunction openImport(): void {\n if (!inputRef.value) return\n inputRef.value.value = ''\n inputRef.value.click()\n}\n\nasync function readImport(event: Event): Promise<void> {\n const file = (event.target as HTMLInputElement).files?.[0]\n if (!file) return\n const decoded = decodeDesignerImport(await file.text())\n importDocument.value = decoded.document\n importDiagnostics.value = decoded.diagnostics.filter((item) => item.severity === 'ERROR')\n activeTab.value = 'diff'\n}\n\nfunction confirmImport(): void {\n if (!importDocument.value || importDiagnostics.value.length > 0) return\n emit('import', importDocument.value)\n visibleModel.value = false\n}\n\ninterface SchemaDiffItem {\n path: string\n kind: 'ADDED' | 'REMOVED' | 'CHANGED'\n summary: string\n}\n\nfunction diffValues(left: unknown, right: unknown, path: string): SchemaDiffItem[] {\n if (JSON.stringify(left) === JSON.stringify(right)) return []\n if (Array.isArray(left) && Array.isArray(right)) {\n const result: SchemaDiffItem[] = []\n const length = Math.max(left.length, right.length)\n for (let index = 0; index < length; index += 1) {\n if (index >= left.length)\n result.push({ path: `${path}[${index}]`, kind: 'ADDED', summary: summarize(right[index]) })\n else if (index >= right.length)\n result.push({ path: `${path}[${index}]`, kind: 'REMOVED', summary: summarize(left[index]) })\n else result.push(...diffValues(left[index], right[index], `${path}[${index}]`))\n }\n return result\n }\n if (isRecord(left) && isRecord(right)) {\n const result: SchemaDiffItem[] = []\n const keys = new Set([...Object.keys(left), ...Object.keys(right)])\n for (const key of keys) {\n if (!(key in left))\n result.push({ path: `${path}.${key}`, kind: 'ADDED', summary: summarize(right[key]) })\n else if (!(key in right))\n result.push({ path: `${path}.${key}`, kind: 'REMOVED', summary: summarize(left[key]) })\n else result.push(...diffValues(left[key], right[key], `${path}.${key}`))\n }\n return result\n }\n return [{ path, kind: 'CHANGED', summary: `${summarize(left)} → ${summarize(right)}` }]\n}\n\nfunction summarize(value: unknown): string {\n const serialized = JSON.stringify(value)\n const text = serialized === undefined ? String(value) : serialized\n return text.length > 120 ? `${text.slice(0, 117)}…` : text\n}\n\nfunction diffLabel(kind: SchemaDiffItem['kind']): string {\n return { ADDED: '新增', REMOVED: '移除', CHANGED: '修改' }[kind]\n}\n\nfunction safeFilename(value: string): string {\n return value.replace(/[^a-zA-Z0-9_-]/g, '_') || 'standalone'\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n</script>\n\n<style scoped>\n.designer-schema-inspector__actions,\n.designer-schema-inspector__diff-actions {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n padding-bottom: var(--daxiang-form-space-3);\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-schema-inspector {\n min-height: 620px;\n}\n\n.designer-schema-inspector pre {\n max-height: 560px;\n padding: var(--daxiang-form-space-3);\n margin: 0;\n overflow: auto;\n color: var(--el-text-color-regular);\n background: var(--el-fill-color-extra-light);\n border-radius: var(--el-border-radius-base);\n font-family: var(--el-font-family-monospace, ui-monospace, monospace);\n font-size: 12px;\n line-height: 1.65;\n white-space: pre;\n}\n\n.designer-schema-inspector ul {\n display: flex;\n padding: 0;\n margin: 0;\n flex-direction: column;\n list-style: none;\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-schema-inspector li {\n display: grid;\n align-items: start;\n padding: var(--daxiang-form-space-2);\n background: var(--el-fill-color-extra-light);\n border-radius: var(--el-border-radius-base);\n grid-template-columns: auto minmax(160px, 0.6fr) minmax(0, 1fr);\n gap: var(--daxiang-form-space-2);\n}\n\n.designer-schema-inspector code {\n overflow-wrap: anywhere;\n}\n\n.designer-schema-inspector__diff-actions span {\n margin-right: auto;\n color: var(--el-text-color-secondary);\n}\n</style>\n","<template>\n <section class=\"daxiang-form form-designer-core\">\n <DesignerCommandBar\n :document-name=\"engine.document.value.name\"\n :dirty=\"engine.dirty.value\"\n :can-undo=\"engine.canUndo.value\"\n :can-redo=\"engine.canRedo.value\"\n :viewport=\"viewport\"\n :zoom=\"zoom\"\n :grid-visible=\"gridVisible\"\n @update:viewport=\"viewport = $event\"\n @update:zoom=\"zoom = clampZoom($event)\"\n @toggle-grid=\"gridVisible = !gridVisible\"\n @fit=\"canvasRef?.fitToWidth()\"\n @equal-layout=\"openQuickGrid\"\n @batch-defaults=\"batchDefaultVisible = true\"\n @schema=\"schemaVisible = true\"\n @print=\"printPreview\"\n @undo=\"engine.undo\"\n @redo=\"engine.redo\"\n @import=\"openImportPicker\"\n @export=\"emit('export-request', currentDocument())\"\n @clear=\"clearDocument\"\n @preview=\"openPreview\"\n @save=\"emit('save-request', currentDocument())\"\n >\n <template #leading><slot name=\"header-leading\" /></template>\n </DesignerCommandBar>\n\n <div ref=\"workspaceRef\" class=\"form-designer-core__workspace\" :style=\"workspaceStyle\">\n <nav class=\"form-designer-core__rail is-left\" aria-label=\"设计资源\">\n <ElTooltip\n v-for=\"item in leftRailItems\"\n :key=\"item.name\"\n :content=\"item.label\"\n placement=\"right\"\n >\n <button\n type=\"button\"\n :class=\"{ 'is-active': leftTab === item.name && !leftCollapsed }\"\n :aria-label=\"item.label\"\n @click=\"openLeftPanel(item.name)\"\n >\n <DxSvgIcon :icon=\"item.icon\" />\n </button>\n </ElTooltip>\n <ElTooltip :content=\"leftCollapsed ? '展开左侧栏' : '收起左侧栏'\" placement=\"right\">\n <button\n type=\"button\"\n class=\"is-bottom\"\n :aria-label=\"leftCollapsed ? '展开左侧栏' : '收起左侧栏'\"\n @click=\"toggleLeftPanel\"\n >\n <DxSvgIcon :icon=\"leftCollapsed ? 'ri:side-bar-line' : 'ri:side-bar-fill'\" />\n </button>\n </ElTooltip>\n </nav>\n\n <aside\n v-show=\"!leftCollapsed\"\n class=\"form-designer-core__left\"\n :aria-hidden=\"leftCollapsed\"\n :inert=\"leftCollapsed || undefined\"\n >\n <DesignerPalette\n v-show=\"leftTab === 'components'\"\n @add=\"addComponent\"\n @apply-template=\"applyTemplate\"\n />\n <DesignerFieldTree\n v-show=\"leftTab === 'fields'\"\n :document=\"canvasDocument\"\n :source-metadata=\"sourceMetadata\"\n :placed-field-ids=\"placedFieldIds\"\n :placed-relation-codes=\"placedRelationCodes\"\n :selected-field-id=\"selectedField?.id ?? ''\"\n @select=\"selectField\"\n @restore=\"restoreField\"\n @delete=\"deleteField\"\n @create-relation=\"createRelationContainer\"\n @generate-layout=\"generateDataModelLayout\"\n />\n <DesignerOutline\n v-show=\"leftTab === 'outline'\"\n :items=\"outline\"\n :selected-node-id=\"engine.selectedNodeId.value\"\n @select=\"engine.selectedNodeId.value = $event\"\n />\n <DesignerModuleManager\n v-show=\"leftTab === 'modules'\"\n :document=\"engine.document.value\"\n :active-view-code=\"activeViewCode\"\n @select=\"selectView\"\n @add=\"addModule\"\n @duplicate=\"duplicateModule\"\n @delete=\"deleteModule\"\n />\n </aside>\n\n <div\n v-show=\"!leftCollapsed\"\n class=\"form-designer-core__resizer is-left\"\n role=\"separator\"\n aria-label=\"调整左侧栏宽度\"\n aria-orientation=\"vertical\"\n :aria-valuemin=\"240\"\n :aria-valuemax=\"360\"\n :aria-valuenow=\"leftWidth\"\n tabindex=\"0\"\n @pointerdown=\"startResize('left', $event)\"\n @keydown=\"resizeWithKeyboard('left', $event)\"\n />\n\n <DesignerCanvas\n ref=\"canvasRef\"\n class=\"form-designer-core__canvas\"\n :document=\"canvasDocument\"\n :selected-node-id=\"engine.selectedNodeId.value\"\n :device=\"device\"\n :viewport-width=\"viewportWidth\"\n :zoom=\"zoom\"\n :grid-visible=\"gridVisible\"\n :active-module=\"activeModule\"\n @select=\"engine.selectedNodeId.value = $event\"\n @remove=\"removeNode\"\n @duplicate=\"duplicateNode\"\n @drop=\"handleDrop\"\n @reorder=\"applySortableOrder\"\n @drag-end=\"engine.commitExternalMutation\"\n />\n\n <div\n v-show=\"!rightCollapsed\"\n class=\"form-designer-core__resizer is-right\"\n role=\"separator\"\n aria-label=\"调整右侧栏宽度\"\n aria-orientation=\"vertical\"\n :aria-valuemin=\"320\"\n :aria-valuemax=\"480\"\n :aria-valuenow=\"rightWidth\"\n tabindex=\"0\"\n @pointerdown=\"startResize('right', $event)\"\n @keydown=\"resizeWithKeyboard('right', $event)\"\n />\n\n <div\n v-show=\"!rightCollapsed\"\n class=\"form-designer-core__right\"\n :aria-hidden=\"rightCollapsed\"\n :inert=\"rightCollapsed || undefined\"\n >\n <DesignerInspector\n v-model:active-tab=\"rightTab\"\n :document=\"engine.document.value\"\n :selected-node=\"selectedNode\"\n :selected-field=\"selectedField\"\n :active-module=\"activeModule\"\n @update-document=\"updateDocument\"\n @update-appearance=\"updateAppearance\"\n @update-field=\"updateField\"\n @change-component=\"changeFieldComponent\"\n @update-configuration=\"updateConfiguration\"\n @update-grid=\"updateGrid\"\n @apply-container-appearance=\"applyContainerAppearance\"\n @update-root-entity=\"updateRootEntity\"\n @update-relation=\"updateRelation\"\n @update-submit-policy=\"updateSubmitPolicy\"\n @update-action-bar=\"updateActionBar\"\n @update-module=\"updateModule\"\n @open-field-advanced=\"fieldAdvancedVisible = true\"\n @open-event-editor=\"eventEditorVisible = true\"\n @open-global-advanced=\"globalAdvancedVisible = true\"\n @open-schema=\"schemaVisible = true\"\n />\n </div>\n\n <nav class=\"form-designer-core__rail is-right\" aria-label=\"设计配置\">\n <ElTooltip content=\"组件配置\" placement=\"left\">\n <button\n type=\"button\"\n :class=\"{ 'is-active': rightTab === 'component' && !rightCollapsed }\"\n aria-label=\"组件配置\"\n @click=\"openRightPanel('component')\"\n >\n <DxSvgIcon icon=\"ri:file-settings-line\" />\n </button>\n </ElTooltip>\n <ElTooltip content=\"表单配置\" placement=\"left\">\n <button\n type=\"button\"\n :class=\"{ 'is-active': rightTab === 'form' && !rightCollapsed }\"\n aria-label=\"表单配置\"\n @click=\"openRightPanel('form')\"\n >\n <DxSvgIcon icon=\"ri:settings-3-line\" />\n </button>\n </ElTooltip>\n <ElTooltip :content=\"rightCollapsed ? '展开右侧栏' : '收起右侧栏'\" placement=\"left\">\n <button\n type=\"button\"\n class=\"is-bottom\"\n :aria-label=\"rightCollapsed ? '展开右侧栏' : '收起右侧栏'\"\n @click=\"toggleRightPanel\"\n >\n <DxSvgIcon :icon=\"rightCollapsed ? 'ri:side-bar-line' : 'ri:side-bar-fill'\" />\n </button>\n </ElTooltip>\n </nav>\n </div>\n\n <input\n ref=\"importInputRef\"\n type=\"file\"\n accept=\"application/json,.json\"\n hidden\n @change=\"importFile\"\n />\n <DModal\n v-if=\"!previewOverlayCode\"\n v-model=\"previewVisible\"\n :title=\"previewTitle\"\n width=\"min(1120px, calc(100vw - 32px))\"\n :show-footer=\"false\"\n :flush-content-vertical=\"true\"\n >\n <DesignerPreviewForm\n :key=\"previewSession\"\n :document=\"previewDocument\"\n :device=\"device\"\n :adapters=\"effectiveRuntimeAdapters\"\n :adapter-context=\"adapterContext\"\n show-toolbar\n :initial-overlay-code=\"previewOverlayCode\"\n />\n </DModal>\n <DesignerPreviewForm\n v-else-if=\"previewVisible\"\n :key=\"previewSession\"\n :document=\"previewDocument\"\n :device=\"device\"\n :adapters=\"effectiveRuntimeAdapters\"\n :adapter-context=\"adapterContext\"\n show-toolbar\n :initial-overlay-code=\"previewOverlayCode\"\n overlay-only\n @overlay-closed=\"closePreviewSession\"\n @overlay-open-failed=\"handlePreviewOpenFailure\"\n />\n <DesignerQuickGridEditor\n v-model=\"quickGridVisible\"\n :target-label=\"quickGridPreview.targetLabel\"\n :affected-count=\"quickGridPreview.affectedNodeIds.length\"\n :skipped-count=\"quickGridPreview.skippedCount\"\n @save=\"applyQuickGrid\"\n />\n <DesignerBatchDefaultEditor\n v-model=\"batchDefaultVisible\"\n :fields=\"batchDefaultFields\"\n @save=\"applyBatchDefaults\"\n />\n <DesignerAdvancedBehaviorEditor\n v-if=\"selectedField\"\n v-model=\"fieldAdvancedVisible\"\n :field=\"selectedField\"\n :document=\"engine.document.value\"\n :selected-node-id=\"selectedNode?.id ?? ''\"\n :supported-events=\"selectedSupportedEvents\"\n :capabilities=\"fieldBehaviorCapabilities\"\n @save=\"saveFieldBehavior\"\n />\n <DesignerEventFlowEditor\n v-model=\"eventEditorVisible\"\n :document=\"engine.document.value\"\n :selected-node-id=\"selectedNode?.id ?? ''\"\n :capabilities=\"fieldBehaviorCapabilities\"\n @save=\"saveEventFlows\"\n />\n <DesignerGlobalAdvancedEditor\n v-model=\"globalAdvancedVisible\"\n :document=\"engine.document.value\"\n @save=\"saveGlobalAdvanced\"\n />\n <DesignerSchemaInspector\n v-model=\"schemaVisible\"\n :document=\"engine.document.value\"\n @import=\"replaceDocument($event, true)\"\n />\n </section>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch, nextTick, onMounted, onBeforeUnmount } from 'vue'\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport DModal from './infrastructure/FormModalShell.vue'\nimport DxSvgIcon from './infrastructure/FormIcon.vue'\nimport {\n applyDesignerBatchDefaults,\n applyDesignerQuickGrid,\n collectDesignerBatchDefaultFields,\n previewDesignerQuickGrid,\n} from '@daxiangme/form-core'\nimport { compatibleDesignerComponents, findDesignerComponent } from '@daxiangme/form-core'\nimport { applyDesignerContainerAppearanceInheritance } from '@daxiangme/form-core'\nimport {\n collectPlacedRelationCodes,\n prepareDesignerDataModel,\n resolveDesignerTargetEntityCode,\n updateDesignerRelation,\n updateDesignerRootEntity,\n} from '@daxiangme/form-core'\nimport {\n cloneDesignerDocument,\n collectPlacedFieldIds,\n createDesignerOutline,\n createEmptyDesignerDocument,\n createNodeFromComponent,\n createDesignerRelationContainer,\n deleteUnplacedDesignerField,\n designerComponentDropRejection,\n designerNodeDropRejection,\n diagnoseDesignerDocument,\n duplicateDesignerNode,\n findDesignerNode,\n generateDesignerDataModelLayout,\n insertDesignerNode,\n moveDesignerNode,\n removeDesignerNode,\n restoreDesignerFieldNode,\n serializeDesignerDocument,\n synchronizeContainerSlots,\n} from '@daxiangme/form-core'\nimport { decodeDesignerImport, useDesignerEngine } from './composables/use-designer-engine'\nimport {\n createDesignerOverlayModule,\n DESIGNER_MAIN_VIEW_CODE,\n duplicateDesignerOverlayModule,\n mutateDesignerView,\n removeDesignerOverlayModule,\n resolveDesignerViewRoot,\n} from '@daxiangme/form-core'\nimport {\n loadDesignerWorkbenchPreferences,\n resolveDesignerViewportPreset,\n saveDesignerWorkbenchPreferences,\n type DesignerCanvasViewportPreset,\n} from './workbench/workbench-preferences'\nimport type {\n DesignerActionBar,\n DesignerComponentEvent,\n DesignerContainerAppearanceDimension,\n DesignerDevice,\n DesignerDocument,\n DesignerDropTarget,\n DesignerField,\n DesignerFieldBehavior,\n DesignerEventFlow,\n DesignerEventStep,\n DesignerGenerateLayoutRequest,\n DesignerInitialDataModel,\n DesignerLayoutNode,\n DesignerOverlayModule,\n DesignerRelationPatch,\n DesignerRuntimeAdapters,\n DesignerRootEntityPatch,\n FormRuntimeAdapterContext,\n} from '@daxiangme/form-core'\nimport DesignerPreviewForm from './rendering/DesignerPreviewForm.vue'\nimport type { DesignerFieldBehaviorCapabilities } from '@daxiangme/form-core'\nimport DesignerCanvas from './workbench/DesignerCanvas.vue'\nimport DesignerAdvancedBehaviorEditor from './workbench/DesignerAdvancedBehaviorEditor.vue'\nimport DesignerBatchDefaultEditor from './workbench/DesignerBatchDefaultEditor.vue'\nimport DesignerCommandBar from './workbench/DesignerCommandBar.vue'\nimport DesignerEventFlowEditor from './workbench/DesignerEventFlowEditor.vue'\nimport DesignerFieldTree from './workbench/DesignerFieldTree.vue'\nimport DesignerGlobalAdvancedEditor from './workbench/DesignerGlobalAdvancedEditor.vue'\nimport DesignerInspector from './workbench/DesignerInspector.vue'\nimport DesignerModuleManager from './workbench/DesignerModuleManager.vue'\nimport DesignerOutline from './workbench/DesignerOutline.vue'\nimport DesignerPalette from './workbench/DesignerPalette.vue'\nimport DesignerQuickGridEditor from './workbench/DesignerQuickGridEditor.vue'\nimport DesignerSchemaInspector from './workbench/DesignerSchemaInspector.vue'\n\ndefineOptions({ name: 'FormDesigner' })\n\nconst props = defineProps<{\n modelValue: DesignerDocument\n initialDataModel?: DesignerInitialDataModel\n adapters?: DesignerRuntimeAdapters\n adapterContext?: FormRuntimeAdapterContext\n /** @deprecated 请使用 adapters。 */\n runtimeAdapters?: DesignerRuntimeAdapters\n}>()\nconst emit = defineEmits<{\n 'update:modelValue': [document: DesignerDocument]\n 'dirty-change': [dirty: boolean]\n diagnostics: [items: ReturnType<typeof diagnoseDesignerDocument>]\n 'save-request': [document: DesignerDocument]\n 'export-request': [document: DesignerDocument]\n}>()\nconst initialPreparation = prepareDesignerDataModel(props.modelValue, props.initialDataModel)\nconst engine = useDesignerEngine(initialPreparation.document)\nconst sourceMetadata = ref(initialPreparation.sourceMetadata)\nconst initializationDiagnostics = ref(initialPreparation.diagnostics)\nconst initialPreferences = loadDesignerWorkbenchPreferences(props.modelValue.id)\nconst viewport = ref<DesignerCanvasViewportPreset>(initialPreferences.viewport)\nconst viewportResolution = computed(() => resolveDesignerViewportPreset(viewport.value))\nconst device = computed<DesignerDevice>(() => viewportResolution.value.device)\nconst viewportWidth = computed(() => viewportResolution.value.width)\nconst zoom = ref(100)\nconst gridVisible = ref(initialPreferences.gridVisible)\nconst leftTab = ref('components')\nconst rightTab = ref<'component' | 'form'>('component')\nconst activeViewCode = ref(DESIGNER_MAIN_VIEW_CODE)\nconst leftManualCollapsed = ref(initialPreferences.leftCollapsed)\nconst rightManualCollapsed = ref(initialPreferences.rightCollapsed)\nconst leftWidth = ref(initialPreferences.leftWidth)\nconst rightWidth = ref(initialPreferences.rightWidth)\nconst workspaceRef = ref<HTMLElement>()\nconst workspaceWidth = ref(0)\nconst autoCollapseLeft = computed(\n () => workspaceWidth.value > 0 && workspaceWidth.value < leftWidth.value + rightWidth.value + 620,\n)\nconst autoCollapseRight = computed(\n () => workspaceWidth.value > 0 && workspaceWidth.value < rightWidth.value + 620,\n)\nconst leftCollapsed = computed(() => leftManualCollapsed.value || autoCollapseLeft.value)\nconst rightCollapsed = computed(() => rightManualCollapsed.value || autoCollapseRight.value)\nconst workspaceStyle = computed(() => ({\n gridTemplateColumns: [\n '44px',\n leftCollapsed.value ? '0px' : `${leftWidth.value}px`,\n leftCollapsed.value ? '0px' : '6px',\n 'minmax(0, 1fr)',\n rightCollapsed.value ? '0px' : '6px',\n rightCollapsed.value ? '0px' : `${rightWidth.value}px`,\n '44px',\n ].join(' '),\n}))\nconst leftRailItems = [\n { name: 'components', label: '组件', icon: 'ri:apps-2-line' },\n { name: 'fields', label: '字段', icon: 'ri:list-check-3' },\n { name: 'outline', label: '大纲', icon: 'ri:node-tree' },\n { name: 'modules', label: '模块', icon: 'ri:window-line' },\n] as const\nconst previewVisible = ref(false)\nconst previewSession = ref(0)\nconst previewTargetViewCode = ref(DESIGNER_MAIN_VIEW_CODE)\nconst quickGridVisible = ref(false)\nconst batchDefaultVisible = ref(false)\nconst fieldAdvancedVisible = ref(false)\nconst eventEditorVisible = ref(false)\nconst globalAdvancedVisible = ref(false)\nconst schemaVisible = ref(false)\nconst importInputRef = ref<HTMLInputElement>()\nconst canvasRef = ref<{\n fitToWidth: () => void\n captureViewport: () => { horizontal: number; vertical: number }\n restoreViewport: (position: { horizontal: number; vertical: number }) => Promise<void>\n}>()\nconst activeViewRoot = computed(() =>\n resolveDesignerViewRoot(engine.document.value, activeViewCode.value),\n)\nconst activeModule = computed(() =>\n engine.document.value.uiSchema.overlays.find((module) => module.code === activeViewCode.value),\n)\nconst canvasDocument = computed<DesignerDocument>(() => ({\n ...engine.document.value,\n uiSchema: { ...engine.document.value.uiSchema, root: activeViewRoot.value },\n}))\nconst outline = computed(() => createDesignerOutline(canvasDocument.value))\nconst placedFieldIds = computed(() => collectPlacedFieldIds(activeViewRoot.value))\nconst placedRelationCodes = computed(() => collectPlacedRelationCodes(activeViewRoot.value))\nconst selectedNode = computed(() =>\n findDesignerNode(activeViewRoot.value, engine.selectedNodeId.value),\n)\nconst selectedField = computed(() => {\n const node = selectedNode.value\n return node?.nodeType === 'FIELD'\n ? engine.document.value.dataSchema.fields.find((field) => field.id === node.fieldId)\n : undefined\n})\nconst previewDocument = computed(() => cloneDesignerDocument(engine.document.value))\nconst previewTargetModule = computed(() =>\n engine.document.value.uiSchema.overlays.find(\n (module) => module.code === previewTargetViewCode.value,\n ),\n)\nconst previewOverlayCode = computed(() => previewTargetModule.value?.code)\nconst previewTitle = computed(() =>\n previewTargetModule.value ? `运行预览 · ${previewTargetModule.value.name}` : '运行预览',\n)\nconst quickGridPreview = computed(() =>\n previewDesignerQuickGrid(canvasDocument.value, engine.selectedNodeId.value),\n)\nconst batchDefaultFields = computed(() => collectDesignerBatchDefaultFields(engine.document.value))\nconst selectedSupportedEvents = computed<DesignerComponentEvent[]>(() => {\n const registration = selectedField.value\n ? findDesignerComponent(selectedField.value.componentType)\n : undefined\n return registration?.supportedEvents ?? ['CHANGE', 'BLUR', 'FOCUS']\n})\nconst hostAdapters = computed(() => props.adapters ?? props.runtimeAdapters)\nconst adapterContext = computed<FormRuntimeAdapterContext>(() => props.adapterContext ?? {})\nconst effectiveRuntimeAdapters = computed<DesignerRuntimeAdapters>(() => ({\n ...hostAdapters.value,\n linkageConfirmation: hostAdapters.value?.linkageConfirmation ?? {\n confirmOverwrite: async ({ fieldLabel }) => {\n try {\n await ElMessageBox.confirm(`${fieldLabel}已有值,是否使用联动结果覆盖?`, '确认联动覆盖', {\n type: 'warning',\n confirmButtonText: '覆盖',\n cancelButtonText: '保留原值',\n })\n return true\n } catch {\n return false\n }\n },\n },\n}))\nconst fieldBehaviorCapabilities = computed<DesignerFieldBehaviorCapabilities>(() => ({\n remoteValidation: Boolean(effectiveRuntimeAdapters.value.remoteValidation),\n dataSource: Boolean(effectiveRuntimeAdapters.value.dataSource),\n navigation: Boolean(effectiveRuntimeAdapters.value.hostAction?.navigateResource),\n hostAction: Boolean(effectiveRuntimeAdapters.value.hostAction?.execute),\n linkageConfirmation: Boolean(effectiveRuntimeAdapters.value.linkageConfirmation),\n}))\n\nlet workspaceResizeObserver: ResizeObserver | undefined\n\nwatch(\n () => props.modelValue,\n (document) => {\n if (serializeDesignerDocument(document) === serializeDesignerDocument(engine.document.value))\n return\n replaceDocument(document)\n },\n { deep: true },\n)\n\nwatch(\n () => engine.document.value,\n (document) => {\n const next = cloneDesignerDocument(document)\n emit('update:modelValue', next)\n emit('diagnostics', [...initializationDiagnostics.value, ...diagnoseDesignerDocument(next)])\n },\n { deep: true },\n)\nwatch(\n () => engine.dirty.value,\n (dirty) => emit('dirty-change', dirty),\n { immediate: true },\n)\nwatch(\n [leftManualCollapsed, rightManualCollapsed, leftWidth, rightWidth, gridVisible, viewport],\n () => {\n saveDesignerWorkbenchPreferences(engine.document.value.id, {\n version: 1,\n leftCollapsed: leftManualCollapsed.value,\n rightCollapsed: rightManualCollapsed.value,\n leftWidth: leftWidth.value,\n rightWidth: rightWidth.value,\n gridVisible: gridVisible.value,\n viewport: viewport.value,\n })\n },\n)\nonMounted(() => {\n window.addEventListener('keydown', handleShortcut)\n workspaceResizeObserver = new ResizeObserver(() => {\n workspaceWidth.value = workspaceRef.value?.clientWidth ?? 0\n })\n if (workspaceRef.value) workspaceResizeObserver.observe(workspaceRef.value)\n workspaceWidth.value = workspaceRef.value?.clientWidth ?? 0\n emit('update:modelValue', currentDocument())\n emit('diagnostics', [\n ...initializationDiagnostics.value,\n ...diagnoseDesignerDocument(currentDocument()),\n ])\n})\nonBeforeUnmount(() => {\n window.removeEventListener('keydown', handleShortcut)\n workspaceResizeObserver?.disconnect()\n})\n\n/** 返回与 Vue 代理隔离的当前文档。 */\nfunction currentDocument(): DesignerDocument {\n return cloneDesignerDocument(engine.document.value)\n}\n\n/** 替换文档时重新执行一次性参数判定,并刷新只读来源索引。 */\nfunction replaceDocument(document: DesignerDocument, keepHistory = false): void {\n const preparation = prepareDesignerDataModel(document, props.initialDataModel)\n sourceMetadata.value = preparation.sourceMetadata\n initializationDiagnostics.value = preparation.diagnostics\n engine.replaceDocument(preparation.document, keepHistory)\n activeViewCode.value = DESIGNER_MAIN_VIEW_CODE\n}\n\n/** 将组件点击添加到根布局末尾。 */\nfunction addComponent(componentType: string): void {\n addComponentAt(componentType, {\n containerId: null,\n slotCode: 'root',\n index: activeViewRoot.value.length,\n })\n}\n\nfunction addComponentAt(componentType: string, target: DesignerDropTarget): void {\n const registration = findDesignerComponent(componentType)\n if (!registration) {\n ElMessage.error(`组件 ${componentType} 未注册`)\n return\n }\n if (registration.availability === 'UNAVAILABLE') {\n ElMessage.warning(registration.unavailableReason)\n return\n }\n const rejection = designerComponentDropRejection(canvasDocument.value, componentType, target)\n if (rejection) {\n ElMessage.warning(rejection)\n return\n }\n let selectedId = ''\n engine.execute((document) => {\n mutateDesignerView(document, activeViewCode.value, (viewDocument) => {\n const entityCode =\n registration.nodeKind === 'FIELD'\n ? resolveDesignerTargetEntityCode(viewDocument, target.containerId)\n : undefined\n const node = createNodeFromComponent(viewDocument, componentType, { entityCode })\n if (!node || !insertDesignerNode(viewDocument, node, target)) return\n selectedId = node.id\n })\n })\n if (selectedId) engine.selectedNodeId.value = selectedId\n}\n\n/** 处理组件或现有节点的原生拖放载荷。 */\nfunction handleDrop(payload: string, target: DesignerDropTarget): void {\n if (payload.startsWith('component:')) {\n addComponentAt(payload.slice('component:'.length), target)\n return\n }\n if (!payload.startsWith('node:')) return\n const nodeId = payload.slice('node:'.length)\n const rejection = designerNodeDropRejection(canvasDocument.value, nodeId, target)\n if (rejection) {\n ElMessage.warning(rejection)\n return\n }\n let moved = false\n engine.execute((document) => {\n mutateDesignerView(document, activeViewCode.value, (viewDocument) => {\n moved = moveDesignerNode(viewDocument, nodeId, target)\n })\n })\n if (!moved) ElMessage.warning('当前节点无法移动到目标位置')\n else engine.selectedNodeId.value = nodeId\n}\n\n/** 在 Sortable 事务期间同步目标列表,拖动结束时由命令引擎统一记录一个快照。 */\nfunction applySortableOrder(\n containerId: string | null,\n slotCode: string,\n nodes: DesignerLayoutNode[],\n): void {\n const target = containerId ? findDesignerNode(activeViewRoot.value, containerId) : undefined\n const collection = containerId\n ? target?.nodeType === 'CONTAINER'\n ? target.slots.find((slot) => slot.slotCode === slotCode)?.children\n : undefined\n : activeViewRoot.value\n if (collection) collection.splice(0, collection.length, ...nodes)\n}\n\nfunction removeNode(nodeId: string): void {\n engine.execute((document) => {\n mutateDesignerView(document, activeViewCode.value, (viewDocument) => {\n removeDesignerNode(viewDocument, nodeId)\n })\n })\n if (engine.selectedNodeId.value === nodeId) engine.selectedNodeId.value = ''\n}\n\nfunction duplicateNode(nodeId: string): void {\n let copyId = ''\n engine.execute((document) => {\n mutateDesignerView(document, activeViewCode.value, (viewDocument) => {\n copyId = duplicateDesignerNode(viewDocument, nodeId)?.id ?? ''\n })\n })\n if (copyId) engine.selectedNodeId.value = copyId\n}\n\nfunction selectField(fieldId: string): void {\n const nodeId = findFieldNodeId(activeViewRoot.value, fieldId)\n if (nodeId) engine.selectedNodeId.value = nodeId\n else leftTab.value = 'fields'\n}\n\nfunction restoreField(fieldId: string): void {\n let nodeId = ''\n engine.execute((document) => {\n mutateDesignerView(document, activeViewCode.value, (viewDocument) => {\n nodeId = restoreDesignerFieldNode(viewDocument, fieldId)?.id ?? ''\n })\n })\n if (nodeId) engine.selectedNodeId.value = nodeId\n else ElMessage.warning('请先在字段目录中创建该子实体对应的子表容器')\n}\n\n/** 在字段目录中为未放置关系创建指定子表容器。 */\nfunction createRelationContainer(\n relationCode: string,\n componentType: 'row-subtable' | 'block-subtable',\n): void {\n if (activeViewCode.value !== DESIGNER_MAIN_VIEW_CODE) {\n ElMessage.warning('一级子表关系只能放置在主表单主体')\n return\n }\n let nodeId = ''\n engine.execute((document) => {\n nodeId = createDesignerRelationContainer(document, relationCode, componentType)?.id ?? ''\n })\n if (!nodeId) {\n ElMessage.warning('当前关系不存在或已经放置')\n return\n }\n engine.selectedNodeId.value = nodeId\n}\n\n/** 将字段页选中的主字段和子关系作为一个命令生成布局。 */\nfunction generateDataModelLayout(request: DesignerGenerateLayoutRequest): void {\n if (activeViewCode.value !== DESIGNER_MAIN_VIEW_CODE && request.relations.length > 0) {\n ElMessage.warning('弹层模块只能生成当前实体字段,不能创建一级子表关系')\n return\n }\n let createdNodeIds: string[] = []\n let skippedFieldIds: string[] = []\n engine.execute((document) => {\n mutateDesignerView(document, activeViewCode.value, (viewDocument) => {\n const result = generateDesignerDataModelLayout(viewDocument, request)\n createdNodeIds = result.createdNodeIds\n skippedFieldIds = result.skippedFieldIds\n })\n })\n const selectedId = createdNodeIds.at(-1)\n if (selectedId) engine.selectedNodeId.value = selectedId\n if (skippedFieldIds.length > 0) {\n ElMessage.warning(`已跳过 ${skippedFieldIds.length} 个已放置、系统或暂不可放置字段`)\n } else if (createdNodeIds.length > 0) {\n ElMessage.success(`已生成 ${createdNodeIds.length} 个布局节点`)\n }\n}\n\nasync function deleteField(fieldId: string): Promise<void> {\n const placedAnywhere = [\n engine.document.value.uiSchema.root,\n ...engine.document.value.uiSchema.overlays.map((item) => item.root),\n ].some((root) => collectPlacedFieldIds(root).has(fieldId))\n if (placedAnywhere) {\n ElMessage.warning('该字段仍在主体或弹层模块中使用,不能删除字段定义')\n return\n }\n try {\n await ElMessageBox.confirm('该字段尚未放置,删除后只可通过撤销恢复。', '删除本地字段', {\n type: 'warning',\n confirmButtonText: '删除',\n })\n } catch {\n return\n }\n engine.execute((document) => {\n deleteUnplacedDesignerField(document, fieldId)\n })\n}\n\nfunction updateDocument(patch: Partial<DesignerDocument>): void {\n engine.execute((document) => Object.assign(document, patch))\n}\n\n/** 更新表单提交投影策略。 */\nfunction updateSubmitPolicy(patch: Partial<DesignerDocument['submitPolicy']>): void {\n engine.execute((document) => {\n document.submitPolicy = { ...document.submitPolicy, ...patch }\n })\n}\n\n/** 更新运行态动作栏;按钮集合始终作为完整受控值替换。 */\nfunction updateActionBar(patch: Partial<DesignerActionBar>): void {\n engine.execute((document) => {\n document.actionBar = { ...document.actionBar, ...patch }\n })\n}\n\n/** 将字段高级行为与事件流草稿作为一个历史命令原子保存。 */\nfunction saveFieldBehavior(payload: {\n behavior: DesignerFieldBehavior\n eventFlows: DesignerEventFlow[]\n}): void {\n const fieldId = selectedField.value?.id\n if (!fieldId) return\n engine.execute((document) => {\n const field = document.dataSchema.fields.find((item) => item.id === fieldId)\n if (!field) return\n field.behavior = payload.behavior\n document.eventFlows = payload.eventFlows\n })\n}\n\n/** 将事件流列表作为一个历史命令保存,并清理已经失效的字段事件绑定。 */\nfunction saveEventFlows(flows: DesignerEventFlow[]): void {\n engine.execute((document) => {\n document.eventFlows = flows\n const validCodes = new Set(flows.map((flow) => flow.code))\n for (const field of document.dataSchema.fields) {\n field.behavior.eventBindings = Object.fromEntries(\n Object.entries(field.behavior.eventBindings).filter(\n ([, code]) => code && validCodes.has(code),\n ),\n )\n }\n const cleanContainerBindings = (nodes: DesignerLayoutNode[]): void => {\n for (const node of nodes) {\n if (node.nodeType !== 'CONTAINER') continue\n if (node.eventBindings) {\n node.eventBindings = Object.fromEntries(\n Object.entries(node.eventBindings).filter(([, code]) => code && validCodes.has(code)),\n )\n }\n node.slots.forEach((slot) => cleanContainerBindings(slot.children))\n }\n }\n cleanContainerBindings(document.uiSchema.root)\n document.uiSchema.overlays.forEach((overlay) => cleanContainerBindings(overlay.root))\n })\n}\n\n/** 将变量、数据源和国际化配置作为一个历史命令保存。 */\nfunction saveGlobalAdvanced(\n patch: Pick<DesignerDocument, 'variables' | 'dataSources' | 'i18n'>,\n): void {\n engine.execute((document) => {\n document.variables = patch.variables\n document.dataSources = patch.dataSources\n document.i18n = patch.i18n\n })\n}\n\n/** 按当前活动视图建立新的运行预览会话。 */\nfunction openPreview(): void {\n previewTargetViewCode.value = activeModule.value?.code ?? DESIGNER_MAIN_VIEW_CODE\n previewSession.value += 1\n previewVisible.value = true\n}\n\n/** 关闭当前定向模块预览;再次预览会重新建立独立运行草稿。 */\nfunction closePreviewSession(): void {\n previewVisible.value = false\n}\n\n/** 模块缺少必要上下文时关闭不可见 Host,并将失败原因反馈给用户。 */\nfunction handlePreviewOpenFailure(message: string): void {\n closePreviewSession()\n ElMessage.error(message)\n}\n\n/** 打开当前活动视图的运行预览后调用浏览器打印能力。 */\nasync function printPreview(): Promise<void> {\n openPreview()\n await nextTick()\n window.print()\n}\n\nfunction openQuickGrid(): void {\n quickGridVisible.value = true\n}\n\n/** 应用当前视图快捷栅格;整批只产生一个历史快照。 */\nfunction applyQuickGrid(span: 24 | 12 | 8 | 6): void {\n let changed = 0\n engine.execute((document) => {\n mutateDesignerView(document, activeViewCode.value, (viewDocument) => {\n changed = applyDesignerQuickGrid(viewDocument, engine.selectedNodeId.value, span)\n })\n })\n if (changed > 0) ElMessage.success(`已调整 ${changed} 个字段的 PC 栅格`)\n else ElMessage.info('当前容器没有可调整的直接字段')\n}\n\n/** 应用批量默认值;整批只产生一个历史快照。 */\nfunction applyBatchDefaults(values: Record<string, unknown>): void {\n let changed = 0\n engine.execute((document) => {\n changed = applyDesignerBatchDefaults(document, values)\n })\n if (changed > 0) ElMessage.success(`已更新 ${changed} 个字段默认值`)\n}\n\nfunction updateAppearance(key: keyof DesignerDocument['appearance'], value: unknown): void {\n engine.execute((document) => {\n const appearance = { ...document.appearance, [key]: value }\n // 顶部标签从左侧开始阅读更符合纵向表单习惯;只在切换位置时应用默认值,后续仍允许手动调整。\n if (key === 'labelPosition' && value === 'TOP') appearance.labelAlign = 'LEFT'\n document.appearance = appearance\n })\n}\n\n/** 更新主实体语义身份;实体编码修改会同步主实体字段作用域。 */\nfunction updateRootEntity(patch: DesignerRootEntityPatch): void {\n let rejection = ''\n engine.execute((document) => {\n rejection = updateDesignerRootEntity(document, patch)\n })\n if (rejection) ElMessage.warning(rejection)\n}\n\n/** 更新一级子表关系;关系和子实体编码修改会同步节点引用及字段作用域。 */\nfunction updateRelation(relationCode: string, patch: DesignerRelationPatch): void {\n let rejection = ''\n engine.execute((document) => {\n rejection = updateDesignerRelation(document, relationCode, patch)\n })\n if (rejection) ElMessage.warning(rejection)\n}\n\n/** 将全部表面容器的所选外观维度作为一个命令恢复为表单继承。 */\nfunction applyContainerAppearance(dimensions: DesignerContainerAppearanceDimension[]): void {\n let changed = 0\n engine.execute((document) => {\n changed = applyDesignerContainerAppearanceInheritance(document, dimensions)\n })\n if (changed > 0) {\n ElMessage.success(`已将 ${changed} 个容器恢复为跟随表单`)\n return\n }\n ElMessage.info('全部容器已经跟随表单,无需重复应用')\n}\n\nfunction updateField(patch: Partial<DesignerField>): void {\n const fieldId = selectedField.value?.id\n if (!fieldId) return\n if (\n patch.key &&\n engine.document.value.dataSchema.fields.some(\n (field) =>\n field.id !== fieldId &&\n field.entityCode === selectedField.value?.entityCode &&\n field.key === patch.key,\n )\n ) {\n ElMessage.warning('字段编码不能重复')\n return\n }\n engine.execute((document) => {\n const field = document.dataSchema.fields.find((item) => item.id === fieldId)\n if (field) Object.assign(field, patch)\n })\n}\n\nfunction changeFieldComponent(componentType: string): void {\n const source = selectedField.value\n const target = source ? findDesignerComponent(componentType) : undefined\n if (!source || !target || target.nodeKind !== 'FIELD') return\n if (\n !compatibleDesignerComponents(source.semanticType).some(\n (item) => item.componentType === componentType,\n )\n ) {\n ElMessage.warning('目标控件与当前字段语义类型不兼容')\n return\n }\n if (target.availability === 'UNAVAILABLE') {\n ElMessage.warning(target.unavailableReason)\n return\n }\n engine.execute((document) => {\n const field = document.dataSchema.fields.find((item) => item.id === source.id)\n if (!field) return\n const retained = Object.fromEntries(\n Object.entries(field.configuration).filter(([key]) => key in target.defaultConfiguration),\n )\n field.componentType = target.componentType\n field.configurationVersion = target.configurationVersion\n field.configuration = { ...target.defaultConfiguration, ...retained }\n })\n}\n\nfunction updateConfiguration(key: string, value: unknown): void {\n const node = selectedNode.value\n const field = selectedField.value\n if (!node) return\n engine.execute((document) => {\n if (field) {\n const target = document.dataSchema.fields.find((item) => item.id === field.id)\n if (target) target.configuration = { ...target.configuration, [key]: value }\n return\n }\n mutateDesignerView(document, activeViewCode.value, (viewDocument) => {\n const target = findDesignerNode(viewDocument.uiSchema.root, node.id)\n if (target?.nodeType !== 'CONTAINER') return\n target.configuration = { ...target.configuration, [key]: value }\n synchronizeContainerSlots(target)\n })\n })\n}\n\nfunction updateGrid(deviceName: 'pc' | 'mobile', key: string, value: unknown): void {\n const nodeId = selectedNode.value?.id\n if (!nodeId) return\n engine.execute((document) => {\n mutateDesignerView(document, activeViewCode.value, (viewDocument) => {\n const target = findDesignerNode(viewDocument.uiSchema.root, nodeId)\n if (!target) return\n target.layout = {\n ...target.layout,\n [deviceName]: { ...target.layout[deviceName], [key]: value },\n }\n })\n })\n}\n\nasync function applyTemplate(templateCode: 'TWO_COLUMN' | 'SECTIONED' | 'SHOWCASE'): Promise<void> {\n const targetViewCode = activeViewCode.value\n if (resolveDesignerViewRoot(engine.document.value, targetViewCode).length > 0) {\n try {\n await ElMessageBox.confirm(\n '应用模板将替换当前画布布局;原字段保留为未放置字段,其他模块和表单配置不受影响,可通过撤销恢复。',\n '应用模板',\n {\n type: 'warning',\n confirmButtonText: '应用模板',\n },\n )\n } catch {\n return\n }\n }\n engine.execute((document) => {\n mutateDesignerView(document, targetViewCode, (viewDocument) => {\n viewDocument.uiSchema.root = []\n appendTemplateLayout(viewDocument, templateCode)\n })\n })\n engine.selectedNodeId.value = ''\n}\n\n/** 向当前视图追加模板布局,同时复用现有数据模型和全局文档配置。 */\nfunction appendTemplateLayout(\n document: DesignerDocument,\n templateCode: 'TWO_COLUMN' | 'SECTIONED' | 'SHOWCASE',\n): void {\n if (templateCode === 'TWO_COLUMN') {\n appendTwoColumnTemplate(document)\n return\n }\n if (templateCode === 'SECTIONED') {\n appendSectionedTemplate(document)\n return\n }\n appendShowcaseTemplate(document)\n}\n\nasync function clearDocument(): Promise<void> {\n try {\n await ElMessageBox.confirm('清空会移除所有本地字段和布局,可通过撤销恢复。', '清空设计', {\n type: 'warning',\n confirmButtonText: '清空',\n })\n } catch {\n return\n }\n const empty = createEmptyDesignerDocument(engine.document.value.id, engine.document.value.name)\n replaceDocument(empty, true)\n engine.selectedNodeId.value = ''\n}\n\nfunction openImportPicker(): void {\n if (!importInputRef.value) return\n importInputRef.value.value = ''\n importInputRef.value.click()\n}\n\nasync function importFile(event: Event): Promise<void> {\n const input = event.target as HTMLInputElement\n const file = input.files?.[0]\n if (!file) return\n const decoded = decodeDesignerImport(await file.text())\n if (!decoded.document) {\n await ElMessageBox.alert(\n decoded.diagnostics.map((item) => `${item.path}:${item.message}`).join('\\n'),\n '导入失败',\n {\n type: 'error',\n },\n )\n return\n }\n replaceDocument(decoded.document, true)\n ElMessage.success('设计文档已导入,保存前仍可撤销')\n}\n\nfunction selectView(viewCode: string): void {\n activeViewCode.value = viewCode\n engine.selectedNodeId.value = ''\n if (viewCode !== DESIGNER_MAIN_VIEW_CODE) rightTab.value = 'component'\n}\n\n/** 新增弹窗或抽屉模块并立即切换到其独立视图。 */\nfunction addModule(kind: DesignerOverlayModule['kind']): void {\n let moduleCode = ''\n engine.execute((document) => {\n const module = createDesignerOverlayModule(document, kind)\n document.uiSchema.overlays.push(module)\n moduleCode = module.code\n })\n if (moduleCode) selectView(moduleCode)\n}\n\n/** 复制模块视图,但继续复用语义字段定义。 */\nfunction duplicateModule(moduleCode: string): void {\n let copyCode = ''\n engine.execute((document) => {\n copyCode = duplicateDesignerOverlayModule(document, moduleCode)?.code ?? ''\n })\n if (copyCode) selectView(copyCode)\n}\n\nasync function deleteModule(moduleCode: string): Promise<void> {\n try {\n await ElMessageBox.confirm('删除模块会移除其视图和相关打开动作,可通过撤销恢复。', '删除模块', {\n type: 'warning',\n confirmButtonText: '删除',\n })\n } catch {\n return\n }\n engine.execute((document) => {\n removeDesignerOverlayModule(document, moduleCode)\n })\n if (activeViewCode.value === moduleCode) selectView(DESIGNER_MAIN_VIEW_CODE)\n}\n\n/** 更新模块语义身份;编码修改同步事件动作引用。 */\nfunction updateModule(moduleCode: string, patch: Partial<DesignerOverlayModule>): void {\n const normalizedPatch = normalizeModulePatch(patch)\n if (normalizedPatch.name !== undefined && normalizedPatch.name.length === 0) {\n ElMessage.warning('模块名称不能为空')\n return\n }\n if (normalizedPatch.code !== undefined) {\n if (!/^[A-Za-z][A-Za-z0-9_]{0,63}$/.test(normalizedPatch.code)) {\n ElMessage.warning('模块编码必须以字母开头,且只能包含字母、数字和下划线')\n return\n }\n if (\n engine.document.value.uiSchema.overlays.some(\n (module) => module.code !== moduleCode && module.code === normalizedPatch.code,\n )\n ) {\n ElMessage.warning('模块编码不能重复')\n return\n }\n }\n const currentModule = engine.document.value.uiSchema.overlays.find(\n (item) => item.code === moduleCode,\n )\n if (!currentModule || modulePatchMatches(currentModule, normalizedPatch)) return\n engine.execute((document) => {\n const module = document.uiSchema.overlays.find((item) => item.code === moduleCode)\n if (!module) return\n const nextCode = normalizedPatch.code\n Object.assign(module, normalizedPatch)\n if (nextCode && nextCode !== moduleCode) {\n synchronizeModuleActionReferences(\n document.eventFlows.flatMap((flow) => flow.steps),\n moduleCode,\n nextCode,\n )\n }\n })\n if (normalizedPatch.code && activeViewCode.value === moduleCode)\n activeViewCode.value = normalizedPatch.code\n}\n\n/** 规范化右侧模块配置输入,保证宽度和受控枚举不会污染设计文档。 */\nfunction normalizeModulePatch(\n patch: Partial<DesignerOverlayModule>,\n): Partial<DesignerOverlayModule> {\n const normalized: Partial<DesignerOverlayModule> = {}\n if (patch.name !== undefined) normalized.name = patch.name.trim()\n if (patch.code !== undefined) normalized.code = patch.code.trim()\n if (patch.width !== undefined && Number.isFinite(patch.width)) {\n normalized.width = clampPanelWidth(patch.width, 320, 1200)\n }\n if (\n patch.dataContext !== undefined &&\n ['FORM_DRAFT', 'SUBTABLE_ROW_DRAFT'].includes(patch.dataContext)\n ) {\n normalized.dataContext = patch.dataContext\n }\n if (\n patch.radius !== undefined &&\n ['THEME', 'NONE', 'SMALL', 'BASE', 'LARGE'].includes(patch.radius)\n ) {\n normalized.radius = patch.radius\n }\n if (\n patch.maxHeightPreset !== undefined &&\n ['COMPACT', 'STANDARD', 'SPACIOUS', 'VIEWPORT'].includes(patch.maxHeightPreset)\n ) {\n normalized.maxHeightPreset = patch.maxHeightPreset\n }\n return normalized\n}\n\n/** 判断模块配置是否实际变化,避免失焦提交无效历史命令。 */\nfunction modulePatchMatches(\n module: DesignerOverlayModule,\n patch: Partial<DesignerOverlayModule>,\n): boolean {\n return Object.entries(patch).every(\n ([key, value]) => module[key as keyof DesignerOverlayModule] === value,\n )\n}\n\nfunction synchronizeModuleActionReferences(\n steps: DesignerEventStep[],\n sourceCode: string,\n targetCode: string,\n): void {\n for (const step of steps) {\n if (\n step.stepType === 'ACTION' &&\n ['OPEN_MODULE', 'CONFIRM_MODULE', 'CANCEL_MODULE'].includes(step.actionType) &&\n step.configuration.moduleCode === sourceCode\n ) {\n step.configuration.moduleCode = targetCode\n }\n if (step.stepType === 'CONDITION') {\n step.branches.forEach((branch) =>\n synchronizeModuleActionReferences(branch.steps, sourceCode, targetCode),\n )\n synchronizeModuleActionReferences(step.elseSteps, sourceCode, targetCode)\n }\n }\n}\n\nfunction openLeftPanel(tab: (typeof leftRailItems)[number]['name']): void {\n leftTab.value = tab\n leftManualCollapsed.value = false\n}\n\nfunction openRightPanel(tab: 'component' | 'form'): void {\n rightTab.value = tab\n rightManualCollapsed.value = false\n}\n\nasync function toggleLeftPanel(): Promise<void> {\n const position = canvasRef.value?.captureViewport()\n if (autoCollapseLeft.value && !leftManualCollapsed.value) {\n ElMessage.info('当前宽度不足,左侧栏会保持自动收起')\n return\n }\n leftManualCollapsed.value = !leftManualCollapsed.value\n await restoreCanvasViewportAfterLayout(position, true)\n}\n\nasync function toggleRightPanel(): Promise<void> {\n const position = canvasRef.value?.captureViewport()\n if (autoCollapseRight.value && !rightManualCollapsed.value) {\n ElMessage.info('当前宽度不足,右侧栏会保持自动收起')\n return\n }\n rightManualCollapsed.value = !rightManualCollapsed.value\n await restoreCanvasViewportAfterLayout(position, true)\n}\n\nfunction startResize(side: 'left' | 'right', event: PointerEvent): void {\n event.preventDefault()\n const startX = event.clientX\n const startWidth = side === 'left' ? leftWidth.value : rightWidth.value\n const viewportPosition = canvasRef.value?.captureViewport()\n const handleMove = (moveEvent: PointerEvent): void => {\n const delta = moveEvent.clientX - startX\n if (side === 'left') leftWidth.value = clampPanelWidth(startWidth + delta, 240, 360)\n else rightWidth.value = clampPanelWidth(startWidth - delta, 320, 480)\n }\n const handleUp = async (): Promise<void> => {\n window.removeEventListener('pointermove', handleMove)\n window.removeEventListener('pointerup', handleUp)\n document.body.classList.remove('is-resizing-form-designer')\n await restoreCanvasViewportAfterLayout(viewportPosition)\n }\n document.body.classList.add('is-resizing-form-designer')\n window.addEventListener('pointermove', handleMove)\n window.addEventListener('pointerup', handleUp, { once: true })\n}\n\nasync function resizeWithKeyboard(side: 'left' | 'right', event: KeyboardEvent): Promise<void> {\n const minimum = side === 'left' ? 240 : 320\n const maximum = side === 'left' ? 360 : 480\n const current = side === 'left' ? leftWidth.value : rightWidth.value\n const next = (() => {\n if (event.key === 'ArrowLeft') return current + (side === 'left' ? -10 : 10)\n if (event.key === 'ArrowRight') return current + (side === 'left' ? 10 : -10)\n if (event.key === 'Home') return minimum\n if (event.key === 'End') return maximum\n return undefined\n })()\n if (next === undefined) return\n event.preventDefault()\n const position = canvasRef.value?.captureViewport()\n if (side === 'left') leftWidth.value = clampPanelWidth(next, minimum, maximum)\n else rightWidth.value = clampPanelWidth(next, minimum, maximum)\n await restoreCanvasViewportAfterLayout(position, true)\n}\n\n/** 等待工作区列宽稳定后恢复画布观察位置,避免收展动画中途按旧尺寸计算滚动量。 */\nasync function restoreCanvasViewportAfterLayout(\n position: { horizontal: number; vertical: number } | undefined,\n waitForTransition = false,\n): Promise<void> {\n if (!position) return\n await nextTick()\n if (waitForTransition) await waitForWorkspaceGridTransition()\n await canvasRef.value?.restoreViewport(position)\n}\n\n/** 等待 Grid 列宽过渡完成;减少动态效果或无过渡时立即返回。 */\nasync function waitForWorkspaceGridTransition(): Promise<void> {\n const workspace = workspaceRef.value\n if (!workspace || window.matchMedia('(prefers-reduced-motion: reduce)').matches) return\n const style = window.getComputedStyle(workspace)\n const durations = style.transitionDuration.split(',').map(parseTransitionTime)\n const delays = style.transitionDelay.split(',').map(parseTransitionTime)\n const transitionCount = Math.max(durations.length, delays.length)\n const maximumDuration = Math.max(\n 0,\n ...Array.from(\n { length: transitionCount },\n (_, index) =>\n (durations[index % durations.length] ?? 0) + (delays[index % delays.length] ?? 0),\n ),\n )\n if (maximumDuration <= 0) return\n await new Promise<void>((resolve) => {\n let settled = false\n const finish = (): void => {\n if (settled) return\n settled = true\n workspace.removeEventListener('transitionend', handleTransitionEnd)\n window.clearTimeout(timeoutId)\n resolve()\n }\n const handleTransitionEnd = (event: TransitionEvent): void => {\n if (event.target === workspace && event.propertyName === 'grid-template-columns') finish()\n }\n const timeoutId = window.setTimeout(finish, maximumDuration + 80)\n workspace.addEventListener('transitionend', handleTransitionEnd)\n })\n}\n\n/** 将 CSS 秒或毫秒时间转换为毫秒。 */\nfunction parseTransitionTime(value: string): number {\n const normalized = value.trim()\n if (normalized.endsWith('ms')) return Number.parseFloat(normalized) || 0\n if (normalized.endsWith('s')) return (Number.parseFloat(normalized) || 0) * 1000\n return 0\n}\n\nfunction clampPanelWidth(value: number, minimum: number, maximum: number): number {\n return Math.max(minimum, Math.min(maximum, Math.round(value)))\n}\n\nfunction handleShortcut(event: KeyboardEvent): void {\n const target = event.target as HTMLElement | null\n const editing = Boolean(target?.closest('input,textarea,[contenteditable=true]'))\n if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === 's') {\n event.preventDefault()\n emit('save-request', currentDocument())\n return\n }\n if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === 'z') {\n event.preventDefault()\n if (event.shiftKey) engine.redo()\n else engine.undo()\n return\n }\n if (\n !editing &&\n (event.key === 'Backspace' || event.key === 'Delete') &&\n engine.selectedNodeId.value\n ) {\n event.preventDefault()\n removeNode(engine.selectedNodeId.value)\n }\n}\n\nfunction findFieldNodeId(nodes: DesignerLayoutNode[], fieldId: string): string {\n for (const node of nodes) {\n if (node.nodeType === 'FIELD' && node.fieldId === fieldId) return node.id\n if (node.nodeType === 'CONTAINER') {\n for (const slot of node.slots) {\n const found = findFieldNodeId(slot.children, fieldId)\n if (found) return found\n }\n }\n }\n return ''\n}\n\nfunction clampZoom(value: number): number {\n return Math.min(150, Math.max(50, Math.round(value / 10) * 10))\n}\n\n/** 向当前视图追加双列业务表单模板。 */\nfunction appendTwoColumnTemplate(document: DesignerDocument): void {\n const samples: Array<[string, string, Partial<Record<string, unknown>>]> = [\n ['text', '申请主题', { placeholder: '请输入申请主题' }],\n ['select', '申请类型', {}],\n ['textarea', '申请说明', { rows: 4 }],\n ['number', '申请金额', { precision: 2, currencyPrefix: '¥', thousandsSeparator: true }],\n ['date', '期望完成日期', {}],\n ['file', '相关附件', {}],\n ]\n for (const [componentType, label, configuration] of samples) {\n const node = createNodeFromComponent(document, componentType, { label, configuration })\n if (node) document.uiSchema.root.push(node)\n }\n}\n\n/** 向当前视图追加分组表单模板。 */\nfunction appendSectionedTemplate(document: DesignerDocument): void {\n const group = createNodeFromComponent(document, 'group', { configuration: { title: '基础信息' } })\n if (group?.nodeType !== 'CONTAINER') return\n for (const [type, label] of [\n ['text', '申请主题'],\n ['select', '申请类型'],\n ['textarea', '申请说明'],\n ['date', '期望日期'],\n ] as const) {\n const node = createNodeFromComponent(document, type, { label })\n if (node) group.slots[0]?.children.push(node)\n }\n document.uiSchema.root.push(group)\n}\n\n/** 创建覆盖高级、动态及子表专属渲染器的本地能力示例。 */\nfunction appendShowcaseTemplate(document: DesignerDocument): void {\n const sections: Array<{\n title: string\n fields: ReadonlyArray<readonly [string, string]>\n }> = [\n {\n title: '基础输入',\n fields: [\n ['text', '单行文本'],\n ['textarea', '多行文本'],\n ['select', '下拉选择'],\n ['multi-select', '多选下拉'],\n ['checkbox', '复选框'],\n ['radio', '单选框'],\n ['date', '日期'],\n ['serial-number', '流水号'],\n ['file', '文件'],\n ['number', '数字'],\n ['switch', '开关'],\n ['rate', '评分'],\n ['steps', '步骤'],\n ['rich-text', '富文本'],\n ['hidden', '隐藏字段'],\n ],\n },\n {\n title: '目录与引用',\n fields: [\n ['user', '申请人'],\n ['role', '审批角色'],\n ['organization', '申请部门'],\n ['post', '申请岗位'],\n ['custom-data', '自定义数据'],\n ['process-reference', '关联流程'],\n ['form-reference', '关联表单'],\n ],\n },\n {\n title: '结构化数据',\n fields: [\n ['region', '所属地区'],\n ['dictionary-tree', '业务分类'],\n ['data-dialog', '数据对话框'],\n ['dynamic-select', '动态选择'],\n ['dynamic-cascade', '动态级联'],\n ],\n },\n {\n title: '审批与采集',\n fields: [\n ['date-range', '日期范围'],\n ['date-multiple', '多日期'],\n ['signature', '手写签名'],\n ['opinion', '审批意见'],\n ['scan-code', '扫码内容'],\n ['ocr', 'OCR 识别'],\n ['position', '采集位置'],\n ],\n },\n ]\n\n for (const section of sections) {\n const heading = createNodeFromComponent(document, 'title', {\n configuration: { text: section.title, level: 3 },\n })\n if (heading) document.uiSchema.root.push(heading)\n for (const [componentType, label] of section.fields) {\n const child = createNodeFromComponent(document, componentType, { label })\n if (child) document.uiSchema.root.push(child)\n }\n }\n\n const tabs = createNodeFromComponent(document, 'tabs', {\n configuration: { tabsType: 'card', tabs: ['布局示例', '辅助组件'] },\n })\n if (tabs?.nodeType === 'CONTAINER') {\n const firstTabField = createNodeFromComponent(document, 'text', { label: '标签页字段' })\n if (firstTabField) tabs.slots[0]?.children.push(firstTabField)\n for (const componentType of ['title', 'divider', 'alert', 'button', 'iframe'] as const) {\n const child = createNodeFromComponent(document, componentType)\n if (child) tabs.slots[1]?.children.push(child)\n }\n document.uiSchema.root.push(tabs)\n }\n\n const rowSubtable = createNodeFromComponent(document, 'row-subtable', {\n configuration: { title: '费用明细', initialRows: 1 },\n })\n if (rowSubtable?.nodeType === 'CONTAINER') {\n const relationCode = String(rowSubtable.configuration.relationCode ?? '')\n const entityCode = document.dataSchema.relations.find(\n (relation) => relation.code === relationCode,\n )?.childEntity.code\n for (const [componentType, label] of [\n ['text', '费用事项'],\n ['number', '费用金额'],\n ['date', '发生日期'],\n ] as const) {\n const child = createNodeFromComponent(document, componentType, { label, entityCode })\n if (child) rowSubtable.slots[0]?.children.push(child)\n }\n document.uiSchema.root.push(rowSubtable)\n }\n\n const blockSubtable = createNodeFromComponent(document, 'block-subtable', {\n configuration: { title: '行程信息', initialRows: 1 },\n })\n if (blockSubtable?.nodeType === 'CONTAINER') {\n const relationCode = String(blockSubtable.configuration.relationCode ?? '')\n const entityCode = document.dataSchema.relations.find(\n (relation) => relation.code === relationCode,\n )?.childEntity.code\n for (const [componentType, label] of [\n ['text', '目的地'],\n ['date-range', '行程日期'],\n ['textarea', '行程说明'],\n ] as const) {\n const child = createNodeFromComponent(document, componentType, { label, entityCode })\n if (child) blockSubtable.slots[0]?.children.push(child)\n }\n document.uiSchema.root.push(blockSubtable)\n }\n}\n\ndefineExpose({\n markClean: engine.markClean,\n dirty: engine.dirty,\n replaceDocument,\n currentDocument,\n})\n</script>\n\n<style scoped>\n.form-designer-core {\n display: flex;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n flex: 1 1 0;\n flex-direction: column;\n overflow: hidden;\n background: var(--el-bg-color);\n}\n\n.form-designer-core__workspace {\n display: grid;\n min-width: 0;\n min-height: 0;\n flex: 1 1 0;\n overflow: hidden;\n transition: grid-template-columns var(--el-transition-duration-fast);\n}\n\n.form-designer-core__left {\n display: flex;\n min-width: 0;\n min-height: 0;\n overflow: hidden;\n background: var(--el-bg-color);\n border-right: 1px solid var(--el-border-color-lighter);\n}\n\n.form-designer-core__rail.is-left {\n grid-column: 1;\n}\n\n.form-designer-core__left {\n grid-column: 2;\n}\n\n.form-designer-core__resizer.is-left {\n grid-column: 3;\n}\n\n.form-designer-core__canvas {\n grid-column: 4;\n}\n\n.form-designer-core__resizer.is-right {\n grid-column: 5;\n}\n\n.form-designer-core__right {\n grid-column: 6;\n}\n\n.form-designer-core__rail.is-right {\n grid-column: 7;\n}\n\n.form-designer-core__left > * {\n width: 100%;\n min-width: 0;\n min-height: 0;\n flex: 1 1 0;\n}\n\n.form-designer-core__right {\n display: flex;\n min-width: 0;\n min-height: 0;\n overflow: hidden;\n}\n\n.form-designer-core__right > * {\n width: 100%;\n min-width: 0;\n min-height: 0;\n flex: 1 1 0;\n}\n\n.form-designer-core__rail {\n z-index: 5;\n display: flex;\n min-width: 0;\n min-height: 0;\n align-items: center;\n padding: var(--daxiang-form-space-2) 0;\n flex-direction: column;\n background: var(--el-bg-color);\n gap: var(--daxiang-form-space-1);\n}\n\n.form-designer-core__rail.is-left {\n border-right: 1px solid var(--el-border-color-lighter);\n}\n\n.form-designer-core__rail.is-right {\n border-left: 1px solid var(--el-border-color-lighter);\n}\n\n.form-designer-core__rail button {\n display: inline-flex;\n width: 34px;\n height: 34px;\n align-items: center;\n justify-content: center;\n color: var(--el-text-color-secondary);\n background: transparent;\n border: 0;\n border-radius: var(--el-border-radius-base);\n cursor: pointer;\n}\n\n.form-designer-core__rail button:hover,\n.form-designer-core__rail button.is-active {\n color: var(--el-color-primary);\n background: var(--el-color-primary-light-9);\n}\n\n.form-designer-core__rail button.is-bottom {\n margin-top: auto;\n}\n\n.form-designer-core__resizer {\n position: relative;\n z-index: 6;\n min-width: 0;\n min-height: 0;\n cursor: col-resize;\n outline: none;\n}\n\n.form-designer-core__resizer::after {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 2px;\n width: 2px;\n content: '';\n background: transparent;\n}\n\n.form-designer-core__resizer:hover::after,\n.form-designer-core__resizer:focus-visible::after {\n background: var(--el-color-primary);\n}\n\n:global(body.is-resizing-form-designer) {\n cursor: col-resize !important;\n user-select: none;\n}\n\n:global(body.is-resizing-form-designer) .form-designer-core__workspace {\n transition: none;\n}\n\n.form-designer-core__left-tabs {\n display: flex;\n width: 100%;\n min-height: 0;\n flex-direction: column;\n}\n\n.form-designer-core__left-tabs :deep(.el-tabs__header) {\n flex: 0 0 auto;\n padding: 0 var(--daxiang-form-space-3);\n margin-bottom: 0;\n}\n\n.form-designer-core__left-tabs :deep(.el-tabs__content),\n.form-designer-core__left-tabs :deep(.el-tab-pane) {\n display: flex;\n min-height: 0;\n flex: 1 1 0;\n}\n\n.form-designer-core :deep(.designer-inspector) {\n border-left: 1px solid var(--el-border-color-lighter);\n}\n\n.form-designer-core :deep(.designer-palette__scroll),\n.form-designer-core :deep(.designer-field-tree__scroll),\n.form-designer-core :deep(.designer-outline),\n.form-designer-core :deep(.designer-module-manager__scroll),\n.form-designer-core :deep(.designer-canvas__stage),\n.form-designer-core :deep(.designer-inspector__scroll) {\n scrollbar-gutter: stable;\n scrollbar-color: var(--el-border-color) transparent;\n scrollbar-width: thin;\n}\n\n.form-designer-core :deep(.designer-palette__scroll::-webkit-scrollbar),\n.form-designer-core :deep(.designer-field-tree__scroll::-webkit-scrollbar),\n.form-designer-core :deep(.designer-outline::-webkit-scrollbar),\n.form-designer-core :deep(.designer-module-manager__scroll::-webkit-scrollbar),\n.form-designer-core :deep(.designer-canvas__stage::-webkit-scrollbar),\n.form-designer-core :deep(.designer-inspector__scroll::-webkit-scrollbar) {\n width: 5px !important;\n height: 5px !important;\n}\n\n.form-designer-core :deep(.designer-palette__scroll::-webkit-scrollbar-track),\n.form-designer-core :deep(.designer-field-tree__scroll::-webkit-scrollbar-track),\n.form-designer-core :deep(.designer-outline::-webkit-scrollbar-track),\n.form-designer-core :deep(.designer-module-manager__scroll::-webkit-scrollbar-track),\n.form-designer-core :deep(.designer-canvas__stage::-webkit-scrollbar-track),\n.form-designer-core :deep(.designer-inspector__scroll::-webkit-scrollbar-track) {\n background: transparent;\n}\n\n.form-designer-core :deep(.designer-palette__scroll::-webkit-scrollbar-thumb),\n.form-designer-core :deep(.designer-field-tree__scroll::-webkit-scrollbar-thumb),\n.form-designer-core :deep(.designer-outline::-webkit-scrollbar-thumb),\n.form-designer-core :deep(.designer-module-manager__scroll::-webkit-scrollbar-thumb),\n.form-designer-core :deep(.designer-canvas__stage::-webkit-scrollbar-thumb),\n.form-designer-core :deep(.designer-inspector__scroll::-webkit-scrollbar-thumb) {\n background-color: var(--el-border-color) !important;\n border-radius: var(--el-border-radius-base);\n}\n\n.form-designer-core :deep(.designer-palette__scroll::-webkit-scrollbar-thumb:hover),\n.form-designer-core :deep(.designer-field-tree__scroll::-webkit-scrollbar-thumb:hover),\n.form-designer-core :deep(.designer-outline::-webkit-scrollbar-thumb:hover),\n.form-designer-core :deep(.designer-module-manager__scroll::-webkit-scrollbar-thumb:hover),\n.form-designer-core :deep(.designer-canvas__stage::-webkit-scrollbar-thumb:hover),\n.form-designer-core :deep(.designer-inspector__scroll::-webkit-scrollbar-thumb:hover) {\n background-color: var(--el-border-color-darker) !important;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .form-designer-core__workspace {\n transition: none;\n }\n}\n</style>\n","import type { App, Plugin } from 'vue'\nimport FormDesigner from './FormDesigner.vue'\nimport FormRenderer from './rendering/DesignerPreviewForm.vue'\nimport './style.css'\n\n/** Vue 3 全局安装入口;按需使用时可以直接导入具名组件。 */\nexport const DaxiangFormVue: Plugin = {\n install(app: App) {\n app.component('FormDesigner', FormDesigner)\n app.component('FormRenderer', FormRenderer)\n },\n}\n\nexport { FormDesigner, FormRenderer }\nexport { default as FormIcon } from './infrastructure/FormIcon.vue'\nexport { default as FormModalShell } from './infrastructure/FormModalShell.vue'\nexport type { DesignerCanvasViewportPreset } from './workbench/workbench-preferences'\n\nexport default DaxiangFormVue\n"],"names":["props","__props","emit","__emit","busy","computed","bodyClass","modalStyle","requestClose","requestConfirm","handleModelValueUpdate","value","__expose","_createBlock","_component_ElDialog","_withDirectives","_openBlock","_createElementBlock","_hoisted_1","_renderSlot","_ctx","$slots","_component_ElButton","matchIconName","stringToIcon","validate","allowSimpleName","provider","colonSeparated","name","prefix","result","validateIconName","dashSeparated","icon","getIconsTree","data","names","icons","aliases","resolved","resolve","parent","defaultIconDimensions","defaultIconTransformations","defaultIconProps","defaultExtendedIconProps","mergeIconTransformations","obj1","obj2","rotate","mergeIconData","child","key","internalGetIconData","tree","currentProps","parse","parseIconSet","callback","item","optionalPropertyDefaults","checkOptionalProps","defaults","prop","quicklyValidateIconSet","obj","dataStorage","newStorage","getStorage","providerStorage","addIconSet","storage","addIconToStorage","simpleNames","allowSimpleNames","allow","getIconData","iconName","addIcon","addCollection","added","defaultIconSizeCustomisations","defaultIconCustomisations","unitsSplit","unitsTest","calculateSize","size","ratio","precision","oldParts","newParts","code","isNumber","num","splitSVGDefs","content","tag","defs","index","start","end","endEnd","mergeDefsAndContent","wrapSVGContent","body","split","isUnsetKeyword","iconToSVG","customisations","fullIcon","fullCustomisations","box","transformations","hFlip","vFlip","rotation","tempValue","customisationsWidth","customisationsHeight","boxWidth","boxHeight","width","height","attributes","setAttr","viewBox","regex","counters","nextID","id","count","replaceIDs","ids","match","suffix","newID","escapedID","setAPIModule","getAPIModule","createAPIConfig","source","resources","configStorage","fallBackAPISources","fallBackAPI","addAPIProvider","customConfig","config","getAPIConfig","detectFetch","fetchModule","calculateMaxLength","maxHostLength","url","shouldAbort","status","prepare","results","maxLength","type","length","getPath","send","host","params","path","iconsList","urlParams","uri","defaultError","response","fetchAPIModule","removeCallback","storages","items","row","updateCallbacks","hasPending","oldLength","idCounter","storeCallback","pendingSources","abort","sortIcons","a","b","lastIcon","localStorage","list","listToIcons","defaultConfig","sendQuery","payload","query","done","resourcesCount","startIndex","nextIndex","startTime","queriesSent","lastError","timer","queue","doneCallbacks","resetTimer","subscribe","overwrite","getQueryStatus","failQuery","clearQueue","moduleResponse","isError","queued","execNext","resource","initRedundancy","cfg","queries","cleanup","queryCallback","doneCallback","error","find","emptyCallback$1","redundancyCache","getRedundancyCache","sendAPIQuery","target","redundancy","api","cached","emptyCallback","loadedNewIcons","checkIconNamesForAPI","valid","invalid","parseLoaderResponse","checkMissing","pending","err","parsePossiblyAsyncResponse","loadNewIcons","customIconLoader","loadIcons","sortedIcons","callCallback","newIcons","sources","lastProvider","lastPrefix","providerNewIcons","pendingQueue","mergeCustomisations","valueType","separator","flipFromString","custom","flip","str","rotateFromString","defaultValue","units","iconToHTML","renderAttribsHTML","attr","encodeSVGforURL","svg","svgToData","svgToURL","defaultExtendedIconCustomisations","svgDefaults","commonProps","monotoneProps","coloredProps","propsToAdd","propsToAddTo","customisationAliases","fixSize","render","componentProps","mode","style","propsStyle","customStyle","alias","renderAttribs","h","useMask","html","_window","preload","providers","emptyIcon","Icon","defineComponent","loader","ref","abortLoading","rendering","lastRenderedIconName","iconData","shallowRef","getIcon","oldState","updateIconData","nextTick","customise","customised","classes","onMounted","watch","onUnmounted","newProps","_unref","_mergeProps","$attrs","useDesignerEngine","initialDocument","historyLimit","document","cloneDesignerDocument","selectedNodeId","initialSnapshot","serializeDesignerDocument","history","historyIndex","cleanSnapshot","dirty","canUndo","canRedo","execute","mutation","draft","commitDocument","commitExternalMutation","replaceDocument","next","keepHistory","snapshot","undo","restoreSnapshot","redo","markClean","allowSameSnapshot","current","parsed","decoded","decodeDesignerDocument","selectedNodeExists","decodeDesignerImport","nodeId","visit","nodes","node","slot","overlay","STORAGE_PREFIX","DEFAULT_PREFERENCES","loadDesignerWorkbenchPreferences","documentId","raw","storageKey","isRecord","clampNumber","isViewportPreset","saveDesignerWorkbenchPreferences","preferences","resolveDesignerViewportPreset","preset","minimum","maximum","fallback","initialized","editorVisible","editorDraft","editorSourceRowId","editable","canCreate","normalizedInitialRows","normalizeInteger","normalizedEditMode","dialogEditing","summaryColumns","editorSourceIndex","editorTitle","subject","editorWidth","enabled","initializeRows","editingEnabled","sourceStillExists","resetEditor","expected","additions","createDesignerSubtableRow","addRow","openEditor","cloneDesignerSubtableRow","confirmEditor","cancelEditor","copyRow","rowId","rows","deleteRow","updateInlineValue","fieldId","updateDraftValue","displayValue","_normalizeClass","_createElementVNode","_hoisted_2","_toDisplayString","_createVNode","DxSvgIcon","_component_ElEmpty","_hoisted_4","_Fragment","_renderList","_hoisted_5","_hoisted_6","column","_createTextVNode","_hoisted_7","_hoisted_8","_hoisted_9","$event","_cache","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","DModal","_hoisted_15","currentPage","showActions","normalizedPageSize","paginationLayout","gridLayout","createDesignerSubtableGridLayout","visibleRows","clampCurrentPage","updateCell","sourceIndex","localIndex","displayIndex","pageCount","_hoisted_3","_normalizeStyle","_hoisted_16","_hoisted_17","_hoisted_18","_component_ElPagination","t","module","this","r","i","s","u","o","c","f","d","l","$","y","M","e","n","m","v","g","D","p","S","_","w","O","Y","activeIndex","sameStepValue","completedIcon","stepState","selectStep","left","right","emptyText","shouldShowHelp","options","normalizeOptions","empty","isEmptyValue","imageValue","opinionText","objectText","opinionSignature","detailFiles","identity","stepValue","booleanActiveText","textConfiguration","booleanInactiveText","positionItems","label","displayText","formatValue","formatNumber","formatDateValue","hasOptionSemantics","formatOptionValue","formatStructuredItem","formatDesignerNumber","values","dateTime","usesDateTimeSemantics","format","resolveDateFormat","formatDateItem","configuredFormat","normalizedValue","calendarDatePrefix","dayjs","matched","findOptionLabel","candidate","nested","option","booleanConfiguration","_component_ElTag","file","DxStepProgress","canvasRef","drawing","resizeCanvas","restoreImage","beginStroke","event","context","drawingContext","point","canvasPoint","continueStroke","endStroke","clearCanvas","canvas","rect","image","visible","keyword","draftIds","draftSingleId","loading","loadError","selectedItems","selectedIds","selectedValueItem","placeholder","openPicker","loadItems","confirmSelection","selected","_component_ElInput","_component_ElAlert","_component_ElCheckboxGroup","_component_ElCheckbox","_component_ElRadioGroup","_component_ElRadio","assetAdapter","registration","findDesignerComponent","componentType","componentName","componentIcon","controlDisabled","readonlyMode","textValue","numberValue","effectiveNumberPrecision","resolveDesignerNumberPrecision","booleanValue","arrayValue","selectValue","scalarValue","stepFinishStatus","dateValue","cascaderOptions","toCascaderOption","localPickerTypes","localPickerMultiple","regionOptions","dictionaryOptions","datePickerType","buttonText","signatureValue","resolvedAssets","assetUploading","capabilityLoading","assetIds","normalizeAssetIds","fileList","assetId","asset","assetCapabilityTip","positionSummary","address","numberSummary","adapter","reportAssetFailure","updateValue","updateOpinionText","updateOpinionSignature","updateRichText","uploadSelectedFile","removeAsset","currentIndex","downloadAsset","link","scanCode","recognizeImage","locatePosition","numberConfiguration","nullableNumberConfiguration","normalizeOptionValue","DesignerDetailField","_component_ElInputNumber","_component_ElSelect","_component_ElOption","_component_ElCheckboxButton","_component_ElRadioButton","_component_ElDatePicker","_component_ElUpload","_component_ElSwitch","_component_ElRate","DesignerSignatureField","DesignerLocalPickerField","message","_component_ElCascader","_component_ElTreeSelect","_component_ElTooltip","field","runtimeVisibleField","currentField","runtimeFieldState","runtimeField","runtimeFieldFeedback","createDesignerFieldFeedbackKey","fieldRegistration","grid","detailShowLabel","activeSlot","lastActiveSlotIndex","fieldLabelPosition","position","container","containerTitle","containerAppearanceClasses","designerContainerAppearanceClasses","resolveDesignerContainerAppearance","headingLevel","headingStyle","dividerPosition","dividerBorderStyle","alertType","buttonType","buttonAlign","tabsType","watchEffect","fallbackIndex","subtableColumns","projectDesignerSubtableColumns","subtableRows","subtableDefaultValues","cloneValue","fieldForColumn","updateFieldValue","emitComponentEvent","updateSubtableRows","runtimeSubtableField","state","updateSubtableField","update","containerId","subtableFeedback","currentRow","_component_ElCol","_component_ElFormItem","DesignerStaticControl","_resolveDynamicComponent","_component_ElDivider","_component_ElTabs","_component_ElTabPane","_component_ElRow","_component_DesignerRuntimeNode","args","DxFormRowSubtable","_withCtx","_component_ElText","DxFormBlockSubtable","modeModel","activeLocale","modeOptions","valueStore","reactive","variables","fieldFeedbacks","activeFlowIds","activeOverlayCode","overlayValueStore","overlaySourceRow","overlaySourceContainerId","submitting","runtimeNotice","activeOverlay","requestedOverlayCode","overlayAdapterContext","localizedFields","resolveDesignerLocalizedText","designerFieldLabelI18nKey","designerFieldHelpI18nKey","localizedOverlayName","designerModuleI18nKey","modeLabel","modeIcon","elementSize","formLabelPosition","previewStyle","expressionContext","fieldStates","resolveFieldStates","overlayFieldStates","enabledActionButtons","button","localizedActionButtons","designerActionI18nKey","initializeRuntime","runtimeStoreSignature","replaceValueStore","emitInitialized","clearRecord","closeActiveModule","variable","collectionFieldIds","collectSubtableFieldIds","allViewRoots","initializeSubtableCollections","mergeValueStore","applyValueRules","applyCollectionValueRules","openInitialOverlay","runFormEvent","moduleCode","openModule","showRuntimeError","runtimeErrorMessage","emitRuntimeValue","updateCollection","updateOverlayFieldValue","updateOverlayCollection","handleComponentEvent","fieldIdForNode","applyCurrentRowValueRules","validateSingleField","flows","resolveComponentFlows","flow","runFlow","runAction","action","submitForm","resetForm","validateForm","projection","projectDesignerSubmission","collectionFields","fieldResults","validateDesignerField","validationCollectionRows","feedback","projectDesignerFieldFeedback","rowResults","errors","warnings","trigger","store","resolveDesignerFieldState","expressionRuntime","viewCode","findCollectionContainerId","confirmActiveModule","cancelActiveModule","completed","executeDesignerEventFlow","level","messageType","bindingCode","componentEventBindings","findNode","root","phase","changedFieldIds","failures","applyDesignerValueRules","entityCode","applyDesignerCurrentRowValueRules","showActionBarAt","createSubtableRow","roots","fieldIds","columns","handleDialogVisibility","handleDrawerVisibility","record","showRuntimeWarning","locale","_component_ElSegmented","_component_ElForm","designerControlRadiusClass","DesignerRuntimeNode","resolveDesignerOverlayMaxHeight","_component_ElDrawer","an","Pe","yt","wt","bt","fe","$e","Ht","mn","vn","St","bn","yn","Dt","_t","wn","En","Tt","Ke","Sn","Dn","_n","Tn","Ct","Cn","On","Ot","ne","In","Ye","ie","An","xn","Nn","re","ae","xe","It","Te","Lt","Wt","Gt","E","We","Pn","Q","At","V","ye","jt","te","P","xt","ce","we","ht","J","Nt","Mn","Fn","Je","Ce","zt","Rn","Ut","Vt","$t","q","Xn","Bn","Yn","ge","Ze","Ne","kn","L","G","R","j","Hn","z","T","pe","Be","C","ue","Se","be","Oe","se","Zt","Qt","W","Me","ve","Ge","je","de","Z","Qe","et","Pt","Mt","me","Ie","Ae","Fe","ke","H","tt","lt","ze","Ve","Re","Ft","Ln","qt","Kt","Wn","Gn","Jt","he","jn","Zn","nt","He","ee","Ee","vt","rn","Xe","B","$n","Vn","X","K","oe","le","k","A","qn","I","x","F","Un","st","zn","Jn","Kn","N","De","ut","ct","ot","rt","Ue","_e","Qn","Rt","Le","it","en","pt","gt","eo","to","dt","sn","no","un","kt","tn","nn","Xt","oo","Yt","on","U","qe","mt","ln","ft","ro","lo","cn","Et","fn","dn","hn","pn","over","allowDrop","acceptsPaletteComponent","handleDrop","handleDragEnter","gridStyle","dropPlacement","resolvedLabelPosition","frameStyle","updateDropPlacement","handleDragOver","handleDragLeave","related","placement","bounds","DesignerDropIndicator","frameId","useId","activeItem","panelId","tabId","selectSlot","slotCode","selectRelative","offset","_withModifiers","_withKeys","sortableGroup","containerDropPlacement","childCount","normalizedTextAlign","nodeGridStyle","slotProjection","projectDesignerCanvas","slotCell","cell","slotDropTarget","updateSlotChildren","children","forwardDrop","forwardReorder","handleContainerDragEnter","updateContainerDropPlacement","handleContainerDragOver","handleContainerDragLeave","handleContainerDrop","tableColumnsStyle","layout","DesignerNodeFrame","DesignerTabsFrame","DesignerDropZone","VueDraggable","gap","DesignerGridDropCell","_component_DesignerCanvasNode","panelStyle","designerDialogRadiusClass","dragSession","createEmptyDragSession","dragCandidate","stageRef","surfaceRef","stageSize","naturalHeight","paletteDragActive","canvasFrameProps","emptyDropLabel","elementLabelPosition","rootProjection","naturalWidth","scale","minimumSceneHeight","sceneStyle","surfaceStyle","dragCandidateStyle","stageResizeObserver","surfaceResizeObserver","updateStageSize","updateSurfaceHeight","onBeforeUnmount","nextZoom","previousZoom","stage","previousScale","horizontalCenter","verticalCenter","updateRootNodes","handleNodeDragStart","sourceNodeId","handleNodeDragEnd","clearDragCandidate","handleStageDragEnter","handleStageDragOver","threshold","handleStageDragLeave","endPaletteDrag","canSortMove","targetContainerId","targetIndex","resolveTargetIndex","rejectionReason","designerNodeDropRejection","accepted","updateDragCandidate","relatedIndex","stageBounds","targetBounds","insertAfter","targetName","cellFor","fitToWidth","availableWidth","targetZoom","captureViewport","restoreViewport","DesignerOverlayCanvasFrame","DesignerCanvasNode","addStep","command","step","createId","removeStep","stepId","updateBranchSteps","branchId","steps","branch","updateElseSteps","actionLabel","_component_DesignerEventStepTree","_component_ElDropdown","_component_ElDropdownMenu","_component_ElDropdownItem","expression","defaultExpression","literalType","functionGroups","conditionOptions","valueOptions","convert","changeKind","createCall","changeLiteralType","updateLiteral","updateFieldId","updateFieldScope","updateVariable","updateContext","changeFunction","isExpressionFunction","functionName","minimumArgumentCount","defaultArgument","updateArgument","argumentsList","addArgument","removeArgument","canRemoveArgument","argumentIndex","isVariadicFunction","argumentMode","argumentLabel","group","_component_ElOptionGroup","argument","_component_DesignerExpressionEditor","flowsModel","_useModel","draftFlows","selectedFlowId","selectedStep","visibleFlows","allowed","selectedFlow","selectedFlowAllowsCurrentRow","nodeUsesCurrentRowContext","selectedFlowComponentEvents","supportedEventsForNode","actionTypes","ACTION_TYPES","resolveDesignerEventActionAvailability","initialFlowId","createFlow","serial","uniqueFlowCode","selectFlow","removeFlow","flowId","handleStepDelete","configurationText","setActionConfiguration","toggleGuard","resetActionConfiguration","defaultActionConfiguration","expressionConfiguration","addBranch","flowLabel","actionDescription","availability","findDesignerNode","insideSubtable","nextInside","componentEventLabel","existing","DesignerEventStepTree","DesignerExpressionEditor","$emit","configuration","comparisonFields","expressionValue","subtableContainers","containerLabel","title","visibleModel","activeTab","createDefaultDesignerFieldBehavior","selectedStateId","selectedValueId","selectedValidationId","editingFlowId","editingEvent","booleanOptions","allowCurrentRow","validationCatalog","resolveDesignerValidationCatalog","validationCatalogWithLegacy","selectedValidationRule","selectedStateRule","rule","selectedValueRule","editingFlow","diagnostics","diagnoseDesignerFieldBehaviorDraft","hasErrors","addStateRule","createDesignerStateRule","addValueRule","createDesignerValueRule","addValidationRule","createDesignerValidationRule","changeValueMode","replacement","changeValidationType","setSelectedValidationConfiguration","toggleValueRuleCondition","defaultCondition","toggleValidationCondition","copyRule","copy","selectRule","removeRule","removed","selectedId","moveRule","boundFlow","createEventFlow","uniqueEventCode","eventLabel","editEventFlow","unbindEvent","finishEditingFlow","stateRuleTitle","tabLabel","tab","diagnosticsForRule","ruleId","locateDiagnostic","base","save","DesignerEventFlowWorkbench","RuleWorkbench","RuleListItem","summarizeDesignerStateRule","summarizeDesignerValueRule","summarizeDesignerValidationRule","ValidationRuleConfiguration","stringValue","primitiveValue","fieldOptions","normalizeFieldOptions","multipleOptionDefault","optionDefaultValue","usesOptionDefault","defaultValueUnavailable","configured","dateValueFormat","textMaximumLength","emitValue","integerConfiguration","selectedMap","draftField","DesignerFieldDefaultValueEditor","changeViewport","handleMoreCommand","_component_ElButtonGroup","_component_ElSpace","expandedGroups","generatorVisible","selectedFieldIds","selectedRelationCodes","relationComponentTypes","groups","fieldsForEntity","relation","filteredGroups","groupMatches","unplacedCount","generationCandidateCount","generationFields","canRestoreField","canDeleteField","toggleGroup","entityId","openGenerator","toggleGeneratedRelation","relationCode","isGeneratedGroupFullySelected","isGeneratedGroupPartiallySelected","selectedCount","toggleGeneratedGroup","groupFieldIds","otherSelectedIds","confirmGenerate","entityPhysicalName","hasSourceMetadata","relationMappingLabels","fieldPhysicalName","relationId","mapping","semanticTypeLabel","_hoisted_19","addVariable","addDataSource","addI18nEntry","seedI18nEntries","candidates","entry","parseInitialValue","_component_ElCollapse","_component_ElCollapseItem","mappingIndex","updateOption","cloneOptions","addOption","removeOption","urlDraft","identifierDraft","identifierTouched","editor","controlledOptions","currentEditor","includeDesignerCurrentOption","designerDateFormatOptions","presets","DESIGNER_PC_SPAN_PRESETS","DESIGNER_MOBILE_SPAN_PRESETS","span","finiteInteger","numberOptions","selectedFileExtensions","parseFileExtensions","fileTypeGroups","DESIGNER_FILE_TYPE_OPTIONS","fileExtensionOptions","known","knownValues","extension","urlError","validateHttpsUrl","identifierError","validateIdentifier","resourceLabel","emitNumberValue","updateUrlDraft","updateIdentifierDraft","commitIdentifier","blurIdentifier","updateFileTypes","extensions","normalizeExtension","normalized","_component_ElColorPicker","DesignerOptionsEditor","internalActiveTab","activeTabModel","componentScrollRef","openedSections","activeSection","applyAppearanceVisible","applyAppearanceDimensions","moduleNameDraft","moduleCodeDraft","identifierDefinitions","propertyDefinition","appearanceDefinitions","DESIGNER_SPACING_PRESETS","radiusOptions","gridOffsetDefinition","compatibleComponents","compatibleDesignerComponents","selectedConfiguration","selectedRelation","dataModelSourceLabel","revision","propertySections","definitions","labels","section","inspectorNavigation","layoutShowLabelText","selectedContainerAppearance","selectedNode","surfaceContainerCount","countDesignerSurfaceContainers","formContainerAppearanceClasses","updateField","patch","changeComponent","updateDisplay","updateValidation","updateConfiguration","updateGrid","device","updateAppearance","updateRootEntity","updateRelation","commitModuleName","commitModuleCode","updateModuleWidth","updateModuleRadius","updateModuleMaxHeight","updateActionButton","openApplyContainerAppearance","confirmApplyContainerAppearance","configurationValue","gridSpanDefinition","includeInherit","containerStyleLabel","radiusLabel","radius","normalizeKey","jumpToSection","DesignerPropertyEditorHost","definition","deviceName","_hoisted_20","addModule","selectNode","_component_ElTree","GROUPS","DESIGNER_COMPONENTS","beginDrag","componentTooltip","componentAriaLabel","downloadDesignerText","filename","anchor","inputRef","importDocument","importDiagnostics","formattedDocument","diagnoseDesignerDocument","diffItems","diffValues","copySchema","ElMessage","downloadSchema","safeFilename","openImport","readImport","confirmImport","summarize","keys","serialized","text","diffLabel","kind","_component_ElResult","initialPreparation","prepareDesignerDataModel","engine","sourceMetadata","initializationDiagnostics","initialPreferences","viewport","viewportResolution","viewportWidth","zoom","gridVisible","leftTab","rightTab","activeViewCode","DESIGNER_MAIN_VIEW_CODE","leftManualCollapsed","rightManualCollapsed","leftWidth","rightWidth","workspaceRef","workspaceWidth","autoCollapseLeft","autoCollapseRight","leftCollapsed","rightCollapsed","workspaceStyle","leftRailItems","previewVisible","previewSession","previewTargetViewCode","quickGridVisible","batchDefaultVisible","fieldAdvancedVisible","eventEditorVisible","globalAdvancedVisible","schemaVisible","importInputRef","activeViewRoot","resolveDesignerViewRoot","activeModule","canvasDocument","outline","createDesignerOutline","placedFieldIds","collectPlacedFieldIds","placedRelationCodes","collectPlacedRelationCodes","selectedField","previewDocument","previewTargetModule","previewOverlayCode","previewTitle","quickGridPreview","previewDesignerQuickGrid","batchDefaultFields","collectDesignerBatchDefaultFields","selectedSupportedEvents","hostAdapters","adapterContext","effectiveRuntimeAdapters","fieldLabel","ElMessageBox","fieldBehaviorCapabilities","workspaceResizeObserver","handleShortcut","currentDocument","preparation","addComponent","addComponentAt","rejection","designerComponentDropRejection","mutateDesignerView","viewDocument","resolveDesignerTargetEntityCode","createNodeFromComponent","insertDesignerNode","moved","moveDesignerNode","applySortableOrder","collection","removeNode","removeDesignerNode","duplicateNode","copyId","duplicateDesignerNode","selectField","findFieldNodeId","restoreField","restoreDesignerFieldNode","createRelationContainer","createDesignerRelationContainer","generateDataModelLayout","request","createdNodeIds","skippedFieldIds","generateDesignerDataModelLayout","deleteField","deleteUnplacedDesignerField","updateDocument","updateSubmitPolicy","updateActionBar","saveFieldBehavior","saveEventFlows","validCodes","cleanContainerBindings","saveGlobalAdvanced","openPreview","closePreviewSession","handlePreviewOpenFailure","printPreview","openQuickGrid","applyQuickGrid","changed","applyDesignerQuickGrid","applyBatchDefaults","applyDesignerBatchDefaults","appearance","updateDesignerRootEntity","updateDesignerRelation","applyContainerAppearance","dimensions","applyDesignerContainerAppearanceInheritance","changeFieldComponent","retained","synchronizeContainerSlots","applyTemplate","templateCode","targetViewCode","appendTemplateLayout","appendTwoColumnTemplate","appendSectionedTemplate","appendShowcaseTemplate","clearDocument","createEmptyDesignerDocument","openImportPicker","importFile","selectView","createDesignerOverlayModule","duplicateModule","copyCode","duplicateDesignerOverlayModule","deleteModule","removeDesignerOverlayModule","updateModule","normalizedPatch","normalizeModulePatch","currentModule","modulePatchMatches","nextCode","synchronizeModuleActionReferences","clampPanelWidth","sourceCode","targetCode","openLeftPanel","openRightPanel","toggleLeftPanel","restoreCanvasViewportAfterLayout","toggleRightPanel","startResize","side","startX","startWidth","viewportPosition","handleMove","moveEvent","delta","handleUp","resizeWithKeyboard","waitForTransition","waitForWorkspaceGridTransition","workspace","durations","parseTransitionTime","delays","transitionCount","maximumDuration","settled","finish","handleTransitionEnd","timeoutId","editing","found","clampZoom","samples","sections","heading","tabs","firstTabField","rowSubtable","blockSubtable","DesignerCommandBar","DesignerPalette","DesignerFieldTree","DesignerOutline","DesignerModuleManager","DesignerCanvas","DesignerInspector","DesignerPreviewForm","DesignerQuickGridEditor","DesignerBatchDefaultEditor","DesignerAdvancedBehaviorEditor","DesignerEventFlowEditor","DesignerGlobalAdvancedEditor","DesignerSchemaInspector","DaxiangFormVue","app","FormDesigner","FormRenderer"],"mappings":"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","x_google_ignoreList":[1,7,15]}