zc-lowcode 0.0.2 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +437 -3
- package/designer.d.ts +5 -0
- package/dist/assets/code-editor.css +1 -0
- package/dist/assets/designer.css +1 -0
- package/dist/assets/materials.css +1 -0
- package/dist/assets/runtime-definitions.css +1 -0
- package/dist/assets/runtime.css +1 -0
- package/dist/assets/sortable.css +1 -0
- package/dist/code-editor-DJwwp3uU.js +9 -0
- package/dist/code-editor-DJwwp3uU.js.map +1 -0
- package/dist/code-editor.vue_vue_type_script_setup_true_lang-aA043pnA.js +40176 -0
- package/dist/code-editor.vue_vue_type_script_setup_true_lang-aA043pnA.js.map +1 -0
- package/dist/core/index.d.ts +560 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core.js +881 -0
- package/dist/core.js.map +1 -0
- package/dist/designer/canvas/draggable-list.vue.d.ts +15 -0
- package/dist/designer/canvas/draggable-list.vue.d.ts.map +1 -0
- package/dist/designer/canvas/widget-node.vue.d.ts +11 -0
- package/dist/designer/canvas/widget-node.vue.d.ts.map +1 -0
- package/dist/designer/canvas/workspace.vue.d.ts +3 -0
- package/dist/designer/canvas/workspace.vue.d.ts.map +1 -0
- package/dist/designer/datasource/data-editor.vue.d.ts +13 -0
- package/dist/designer/datasource/data-editor.vue.d.ts.map +1 -0
- package/dist/designer/datasource/datasource-help.d.ts +9 -0
- package/dist/designer/datasource/datasource-help.d.ts.map +1 -0
- package/dist/designer/datasource/panel.vue.d.ts +3 -0
- package/dist/designer/datasource/panel.vue.d.ts.map +1 -0
- package/dist/designer/designer.d.ts +119 -0
- package/dist/designer/designer.d.ts.map +1 -0
- package/dist/designer/designer.vue.d.ts +40 -0
- package/dist/designer/designer.vue.d.ts.map +1 -0
- package/dist/designer/index.d.ts +13 -0
- package/dist/designer/index.d.ts.map +1 -0
- package/dist/designer/material-registry.d.ts +19 -0
- package/dist/designer/material-registry.d.ts.map +1 -0
- package/dist/designer/materials/widget-library.vue.d.ts +3 -0
- package/dist/designer/materials/widget-library.vue.d.ts.map +1 -0
- package/dist/designer/methods/api-method-params-list.vue.d.ts +14 -0
- package/dist/designer/methods/api-method-params-list.vue.d.ts.map +1 -0
- package/dist/designer/methods/api-param-bind-button.vue.d.ts +17 -0
- package/dist/designer/methods/api-param-bind-button.vue.d.ts.map +1 -0
- package/dist/designer/methods/api-param-list.vue.d.ts +19 -0
- package/dist/designer/methods/api-param-list.vue.d.ts.map +1 -0
- package/dist/designer/methods/api-result-rules-list.vue.d.ts +16 -0
- package/dist/designer/methods/api-result-rules-list.vue.d.ts.map +1 -0
- package/dist/designer/methods/method-api-config-form.vue.d.ts +15 -0
- package/dist/designer/methods/method-api-config-form.vue.d.ts.map +1 -0
- package/dist/designer/methods/page-method-api.d.ts +37 -0
- package/dist/designer/methods/page-method-api.d.ts.map +1 -0
- package/dist/designer/methods/page-method-editor-modal.vue.d.ts +30 -0
- package/dist/designer/methods/page-method-editor-modal.vue.d.ts.map +1 -0
- package/dist/designer/methods/page-method-simulate-args-modal.vue.d.ts +18 -0
- package/dist/designer/methods/page-method-simulate-args-modal.vue.d.ts.map +1 -0
- package/dist/designer/methods/page-methods.vue.d.ts +3 -0
- package/dist/designer/methods/page-methods.vue.d.ts.map +1 -0
- package/dist/designer/methods/use-page-methods-editor.d.ts +163 -0
- package/dist/designer/methods/use-page-methods-editor.d.ts.map +1 -0
- package/dist/designer/outline/panel.vue.d.ts +5 -0
- package/dist/designer/outline/panel.vue.d.ts.map +1 -0
- package/dist/designer/properties/panel.vue.d.ts +18 -0
- package/dist/designer/properties/panel.vue.d.ts.map +1 -0
- package/dist/designer/shared/code-editor-page-context-completion.d.ts +39 -0
- package/dist/designer/shared/code-editor-page-context-completion.d.ts.map +1 -0
- package/dist/designer/shared/code-editor.vue.d.ts +93 -0
- package/dist/designer/shared/code-editor.vue.d.ts.map +1 -0
- package/dist/designer/use-designer-shortcuts.d.ts +21 -0
- package/dist/designer/use-designer-shortcuts.d.ts.map +1 -0
- package/dist/designer-style.js +4 -0
- package/dist/designer.js +3215 -0
- package/dist/designer.js.map +1 -0
- package/dist/materials/definitions.d.ts +3 -0
- package/dist/materials/definitions.d.ts.map +1 -0
- package/dist/materials/index.d.ts +11 -0
- package/dist/materials/index.d.ts.map +1 -0
- package/dist/materials/packages/button/index.d.ts +4 -0
- package/dist/materials/packages/button/index.d.ts.map +1 -0
- package/dist/materials/packages/button/options.d.ts +45 -0
- package/dist/materials/packages/button/options.d.ts.map +1 -0
- package/dist/materials/packages/button/setter.vue.d.ts +7 -0
- package/dist/materials/packages/button/setter.vue.d.ts.map +1 -0
- package/dist/materials/packages/button/view.vue.d.ts +11 -0
- package/dist/materials/packages/button/view.vue.d.ts.map +1 -0
- package/dist/materials/packages/card/index.d.ts +4 -0
- package/dist/materials/packages/card/index.d.ts.map +1 -0
- package/dist/materials/packages/card/options.d.ts +24 -0
- package/dist/materials/packages/card/options.d.ts.map +1 -0
- package/dist/materials/packages/card/setter.vue.d.ts +7 -0
- package/dist/materials/packages/card/setter.vue.d.ts.map +1 -0
- package/dist/materials/packages/card/view.vue.d.ts +28 -0
- package/dist/materials/packages/card/view.vue.d.ts.map +1 -0
- package/dist/materials/packages/carousel/carousel-slide/options.d.ts +12 -0
- package/dist/materials/packages/carousel/carousel-slide/options.d.ts.map +1 -0
- package/dist/materials/packages/carousel/carousel-slide/setter.vue.d.ts +7 -0
- package/dist/materials/packages/carousel/carousel-slide/setter.vue.d.ts.map +1 -0
- package/dist/materials/packages/carousel/carousel-slide/view.vue.d.ts +24 -0
- package/dist/materials/packages/carousel/carousel-slide/view.vue.d.ts.map +1 -0
- package/dist/materials/packages/carousel/designer.vue.d.ts +30 -0
- package/dist/materials/packages/carousel/designer.vue.d.ts.map +1 -0
- package/dist/materials/packages/carousel/index.d.ts +5 -0
- package/dist/materials/packages/carousel/index.d.ts.map +1 -0
- package/dist/materials/packages/carousel/options.d.ts +65 -0
- package/dist/materials/packages/carousel/options.d.ts.map +1 -0
- package/dist/materials/packages/carousel/setter.vue.d.ts +7 -0
- package/dist/materials/packages/carousel/setter.vue.d.ts.map +1 -0
- package/dist/materials/packages/carousel/view.vue.d.ts +41 -0
- package/dist/materials/packages/carousel/view.vue.d.ts.map +1 -0
- package/dist/materials/packages/divider/index.d.ts +4 -0
- package/dist/materials/packages/divider/index.d.ts.map +1 -0
- package/dist/materials/packages/divider/options.d.ts +39 -0
- package/dist/materials/packages/divider/options.d.ts.map +1 -0
- package/dist/materials/packages/divider/setter.vue.d.ts +7 -0
- package/dist/materials/packages/divider/setter.vue.d.ts.map +1 -0
- package/dist/materials/packages/divider/view.vue.d.ts +11 -0
- package/dist/materials/packages/divider/view.vue.d.ts.map +1 -0
- package/dist/materials/packages/grid/designer.vue.d.ts +160 -0
- package/dist/materials/packages/grid/designer.vue.d.ts.map +1 -0
- package/dist/materials/packages/grid/index.d.ts +4 -0
- package/dist/materials/packages/grid/index.d.ts.map +1 -0
- package/dist/materials/packages/grid/options.d.ts +41 -0
- package/dist/materials/packages/grid/options.d.ts.map +1 -0
- package/dist/materials/packages/grid/setter.vue.d.ts +7 -0
- package/dist/materials/packages/grid/setter.vue.d.ts.map +1 -0
- package/dist/materials/packages/grid/split.d.ts +18 -0
- package/dist/materials/packages/grid/split.d.ts.map +1 -0
- package/dist/materials/packages/grid/view.vue.d.ts +35 -0
- package/dist/materials/packages/grid/view.vue.d.ts.map +1 -0
- package/dist/materials/packages/image/index.d.ts +4 -0
- package/dist/materials/packages/image/index.d.ts.map +1 -0
- package/dist/materials/packages/image/options.d.ts +31 -0
- package/dist/materials/packages/image/options.d.ts.map +1 -0
- package/dist/materials/packages/image/setter.vue.d.ts +7 -0
- package/dist/materials/packages/image/setter.vue.d.ts.map +1 -0
- package/dist/materials/packages/image/view.vue.d.ts +11 -0
- package/dist/materials/packages/image/view.vue.d.ts.map +1 -0
- package/dist/materials/packages/list/designer.vue.d.ts +29 -0
- package/dist/materials/packages/list/designer.vue.d.ts.map +1 -0
- package/dist/materials/packages/list/index.d.ts +4 -0
- package/dist/materials/packages/list/index.d.ts.map +1 -0
- package/dist/materials/packages/list/options.d.ts +60 -0
- package/dist/materials/packages/list/options.d.ts.map +1 -0
- package/dist/materials/packages/list/setter.vue.d.ts +7 -0
- package/dist/materials/packages/list/setter.vue.d.ts.map +1 -0
- package/dist/materials/packages/list/view.vue.d.ts +31 -0
- package/dist/materials/packages/list/view.vue.d.ts.map +1 -0
- package/dist/materials/packages/tab/designer.vue.d.ts +30 -0
- package/dist/materials/packages/tab/designer.vue.d.ts.map +1 -0
- package/dist/materials/packages/tab/index.d.ts +5 -0
- package/dist/materials/packages/tab/index.d.ts.map +1 -0
- package/dist/materials/packages/tab/options.d.ts +48 -0
- package/dist/materials/packages/tab/options.d.ts.map +1 -0
- package/dist/materials/packages/tab/setter.vue.d.ts +7 -0
- package/dist/materials/packages/tab/setter.vue.d.ts.map +1 -0
- package/dist/materials/packages/tab/tab-pane/options.d.ts +13 -0
- package/dist/materials/packages/tab/tab-pane/options.d.ts.map +1 -0
- package/dist/materials/packages/tab/tab-pane/setter.vue.d.ts +7 -0
- package/dist/materials/packages/tab/tab-pane/setter.vue.d.ts.map +1 -0
- package/dist/materials/packages/tab/tab-pane/view.vue.d.ts +24 -0
- package/dist/materials/packages/tab/tab-pane/view.vue.d.ts.map +1 -0
- package/dist/materials/packages/tab/view.vue.d.ts +34 -0
- package/dist/materials/packages/tab/view.vue.d.ts.map +1 -0
- package/dist/materials/packages/text/index.d.ts +4 -0
- package/dist/materials/packages/text/index.d.ts.map +1 -0
- package/dist/materials/packages/text/options.d.ts +29 -0
- package/dist/materials/packages/text/options.d.ts.map +1 -0
- package/dist/materials/packages/text/setter.vue.d.ts +7 -0
- package/dist/materials/packages/text/setter.vue.d.ts.map +1 -0
- package/dist/materials/packages/text/view.vue.d.ts +11 -0
- package/dist/materials/packages/text/view.vue.d.ts.map +1 -0
- package/dist/materials/page/index.d.ts +4 -0
- package/dist/materials/page/index.d.ts.map +1 -0
- package/dist/materials/page/lifecycle-panel.vue.d.ts +13 -0
- package/dist/materials/page/lifecycle-panel.vue.d.ts.map +1 -0
- package/dist/materials/page/setter-slots.d.ts +7 -0
- package/dist/materials/page/setter-slots.d.ts.map +1 -0
- package/dist/materials/page/setter.vue.d.ts +25 -0
- package/dist/materials/page/setter.vue.d.ts.map +1 -0
- package/dist/materials/page/view.vue.d.ts +26 -0
- package/dist/materials/page/view.vue.d.ts.map +1 -0
- package/dist/materials/runtime-definitions.d.ts +10 -0
- package/dist/materials/runtime-definitions.d.ts.map +1 -0
- package/dist/materials/shared/designer/container-children.vue.d.ts +24 -0
- package/dist/materials/shared/designer/container-children.vue.d.ts.map +1 -0
- package/dist/materials/shared/designer/helpers.d.ts +68 -0
- package/dist/materials/shared/designer/helpers.d.ts.map +1 -0
- package/dist/materials/shared/designer/icon.vue.d.ts +8 -0
- package/dist/materials/shared/designer/icon.vue.d.ts.map +1 -0
- package/dist/materials/shared/designer/selection-chrome.vue.d.ts +31 -0
- package/dist/materials/shared/designer/selection-chrome.vue.d.ts.map +1 -0
- package/dist/materials/shared/designer/use-keyed-slot-sync.d.ts +15 -0
- package/dist/materials/shared/designer/use-keyed-slot-sync.d.ts.map +1 -0
- package/dist/materials/shared/designer/use-widget-size-resize.d.ts +16 -0
- package/dist/materials/shared/designer/use-widget-size-resize.d.ts.map +1 -0
- package/dist/materials/shared/envelopes/internal-pane-view.vue.d.ts +29 -0
- package/dist/materials/shared/envelopes/internal-pane-view.vue.d.ts.map +1 -0
- package/dist/materials/shared/envelopes/item-scope-provider.vue.d.ts +22 -0
- package/dist/materials/shared/envelopes/item-scope-provider.vue.d.ts.map +1 -0
- package/dist/materials/shared/setter/components/binding-form-item.vue.d.ts +40 -0
- package/dist/materials/shared/setter/components/binding-form-item.vue.d.ts.map +1 -0
- package/dist/materials/shared/setter/components/binding-picker/binding-scope-tree.d.ts +83 -0
- package/dist/materials/shared/setter/components/binding-picker/binding-scope-tree.d.ts.map +1 -0
- package/dist/materials/shared/setter/components/binding-picker/binding-utils.d.ts +105 -0
- package/dist/materials/shared/setter/components/binding-picker/binding-utils.d.ts.map +1 -0
- package/dist/materials/shared/setter/components/binding-picker/index.vue.d.ts +30 -0
- package/dist/materials/shared/setter/components/binding-picker/index.vue.d.ts.map +1 -0
- package/dist/materials/shared/setter/components/box-model.vue.d.ts +11 -0
- package/dist/materials/shared/setter/components/box-model.vue.d.ts.map +1 -0
- package/dist/materials/shared/setter/components/color-input.vue.d.ts +14 -0
- package/dist/materials/shared/setter/components/color-input.vue.d.ts.map +1 -0
- package/dist/materials/shared/setter/components/image-upload.vue.d.ts +25 -0
- package/dist/materials/shared/setter/components/image-upload.vue.d.ts.map +1 -0
- package/dist/materials/shared/setter/components/keyed-slot-child-list.vue.d.ts +17 -0
- package/dist/materials/shared/setter/components/keyed-slot-child-list.vue.d.ts.map +1 -0
- package/dist/materials/shared/setter/components/offset-box.vue.d.ts +11 -0
- package/dist/materials/shared/setter/components/offset-box.vue.d.ts.map +1 -0
- package/dist/materials/shared/setter/components/percent-input.vue.d.ts +19 -0
- package/dist/materials/shared/setter/components/percent-input.vue.d.ts.map +1 -0
- package/dist/materials/shared/setter/components/style-property-input.vue.d.ts +92 -0
- package/dist/materials/shared/setter/components/style-property-input.vue.d.ts.map +1 -0
- package/dist/materials/shared/setter/composables/use-page-data-field-options.d.ts +15 -0
- package/dist/materials/shared/setter/composables/use-page-data-field-options.d.ts.map +1 -0
- package/dist/materials/shared/setter/panels/animation-panel.vue.d.ts +7 -0
- package/dist/materials/shared/setter/panels/animation-panel.vue.d.ts.map +1 -0
- package/dist/materials/shared/setter/panels/background-panel.vue.d.ts +11 -0
- package/dist/materials/shared/setter/panels/background-panel.vue.d.ts.map +1 -0
- package/dist/materials/shared/setter/panels/border-panel.vue.d.ts +11 -0
- package/dist/materials/shared/setter/panels/border-panel.vue.d.ts.map +1 -0
- package/dist/materials/shared/setter/panels/event-panel.vue.d.ts +14 -0
- package/dist/materials/shared/setter/panels/event-panel.vue.d.ts.map +1 -0
- package/dist/materials/shared/setter/panels/layout-panel.vue.d.ts +25 -0
- package/dist/materials/shared/setter/panels/layout-panel.vue.d.ts.map +1 -0
- package/dist/materials/shared/setter/panels/position-panel.vue.d.ts +16 -0
- package/dist/materials/shared/setter/panels/position-panel.vue.d.ts.map +1 -0
- package/dist/materials/shared/setter/panels/typography-panel.vue.d.ts +11 -0
- package/dist/materials/shared/setter/panels/typography-panel.vue.d.ts.map +1 -0
- package/dist/materials/shared/setter/panels/widget-style-panel.vue.d.ts +30 -0
- package/dist/materials/shared/setter/panels/widget-style-panel.vue.d.ts.map +1 -0
- package/dist/materials/shared/setter/shell.vue.d.ts +21 -0
- package/dist/materials/shared/setter/shell.vue.d.ts.map +1 -0
- package/dist/materials/shared/setter/use-widget-setter.d.ts +35 -0
- package/dist/materials/shared/setter/use-widget-setter.d.ts.map +1 -0
- package/dist/materials-style.js +3 -0
- package/dist/materials.js +14703 -0
- package/dist/materials.js.map +1 -0
- package/dist/runtime/index.d.ts +6 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/page-renderer.vue.d.ts +4 -0
- package/dist/runtime/page-renderer.vue.d.ts.map +1 -0
- package/dist/runtime/runtime.d.ts +585 -0
- package/dist/runtime/runtime.d.ts.map +1 -0
- package/dist/runtime/scoped-style-block.vue.d.ts +7 -0
- package/dist/runtime/scoped-style-block.vue.d.ts.map +1 -0
- package/dist/runtime/widget-node.vue.d.ts +9 -0
- package/dist/runtime/widget-node.vue.d.ts.map +1 -0
- package/dist/runtime-definitions-BGShdDBK.js +1984 -0
- package/dist/runtime-definitions-BGShdDBK.js.map +1 -0
- package/dist/runtime-style.js +3 -0
- package/dist/runtime.js +262 -0
- package/dist/runtime.js.map +1 -0
- package/dist/sortable.esm-DbutZcEr.js +18104 -0
- package/dist/sortable.esm-DbutZcEr.js.map +1 -0
- package/dist/style.js +3 -0
- package/package.json +73 -37
- package/runtime.d.ts +5 -0
- package/dist/lowcode-editor.es.js +0 -45473
- package/dist/lowcode-editor.umd.js +0 -45472
- package/dist/packages/install.d.ts +0 -4
- package/dist/packages/locale/en-US.d.ts +0 -315
- package/dist/packages/locale/index.d.ts +0 -635
- package/dist/packages/locale/zh-CN.d.ts +0 -315
- package/dist/packages/lowcode-editor/components/design-panel/components/wrapper.vue.d.ts +0 -40
- package/dist/packages/lowcode-editor/components/design-panel/index.vue.d.ts +0 -64
- package/dist/packages/lowcode-editor/components/layout-panel/index.vue.d.ts +0 -33
- package/dist/packages/lowcode-editor/components/setter-panel/index.vue.d.ts +0 -22
- package/dist/packages/lowcode-editor/components/widget-panel/index.vue.d.ts +0 -100
- package/dist/packages/lowcode-editor/index.vue.d.ts +0 -349
- package/dist/packages/lowcode-editor-renderer/index.vue.d.ts +0 -100
- package/dist/packages/lowcode-editor-widgets/components/property-editor/property.d.ts +0 -4
- package/dist/packages/lowcode-editor-widgets/components/property.vue.d.ts +0 -53
- package/dist/packages/lowcode-editor-widgets/components/setter-base/index.vue.d.ts +0 -20
- package/dist/packages/lowcode-editor-widgets/components/usePropertyRegister.d.ts +0 -7
- package/dist/packages/lowcode-editor-widgets/index.d.ts +0 -4
- package/dist/packages/lowcode-editor-widgets/widgets/container/card/index.d.ts +0 -38
- package/dist/packages/lowcode-editor-widgets/widgets/container/card/setter.vue.d.ts +0 -15
- package/dist/packages/lowcode-editor-widgets/widgets/container/card/view.vue.d.ts +0 -15
- package/dist/packages/lowcode-editor-widgets/widgets/container/grid/index.d.ts +0 -67
- package/dist/packages/lowcode-editor-widgets/widgets/container/grid/setter.vue.d.ts +0 -18
- package/dist/packages/lowcode-editor-widgets/widgets/container/grid/view.vue.d.ts +0 -24
- package/dist/packages/lowcode-editor-widgets/widgets/container/grid-col/index.d.ts +0 -68
- package/dist/packages/lowcode-editor-widgets/widgets/container/grid-col/setter.vue.d.ts +0 -15
- package/dist/packages/lowcode-editor-widgets/widgets/container/grid-col/view.vue.d.ts +0 -40
- package/dist/packages/lowcode-editor-widgets/widgets/container/tab/index.d.ts +0 -38
- package/dist/packages/lowcode-editor-widgets/widgets/container/tab/setter.vue.d.ts +0 -15
- package/dist/packages/lowcode-editor-widgets/widgets/container/tab/view.vue.d.ts +0 -15
- package/dist/packages/lowcode-editor-widgets/widgets/form/radio/index.d.ts +0 -38
- package/dist/packages/lowcode-editor-widgets/widgets/form/radio/setter.vue.d.ts +0 -15
- package/dist/packages/lowcode-editor-widgets/widgets/form/radio/view.vue.d.ts +0 -15
- package/dist/packages/lowcode-editor-widgets/widgets/form/text/index.d.ts +0 -38
- package/dist/packages/lowcode-editor-widgets/widgets/form/text/setter.vue.d.ts +0 -15
- package/dist/packages/lowcode-editor-widgets/widgets/form/text/view.vue.d.ts +0 -15
- package/dist/packages/type.d.ts +0 -28
- package/dist/style.css +0 -154
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"designer.js","sources":["../node_modules/ant-design-vue/es/space/index.js","../node_modules/@ant-design/icons-svg/es/asn/ClearOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/ClearOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/CodeOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/CodeOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/ControlOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/ControlOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/DesktopOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/DesktopOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/FunctionOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/FunctionOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/PartitionOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/PartitionOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/PushpinFilled.js","../node_modules/@ant-design/icons-vue/es/icons/PushpinFilled.js","../node_modules/@ant-design/icons-svg/es/asn/PushpinOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/PushpinOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/RedoOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/RedoOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/TabletOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/TabletOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/UndoOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/UndoOutlined.js","../src/designer/canvas/workspace.vue","../src/designer/properties/panel.vue","../src/designer/materials/widget-library.vue","../src/designer/outline/panel.vue","../src/designer/datasource/data-editor.vue","../src/designer/datasource/datasource-help.ts","../src/designer/datasource/panel.vue","../src/designer/methods/api-method-params-list.vue","../src/designer/methods/api-param-bind-button.vue","../src/designer/methods/api-param-list.vue","../src/designer/methods/api-result-rules-list.vue","../src/designer/methods/method-api-config-form.vue","../src/designer/methods/use-page-methods-editor.ts","../src/designer/methods/page-method-editor-modal.vue","../src/designer/methods/page-method-simulate-args-modal.vue","../src/designer/methods/page-methods.vue","../src/designer/designer.vue"],"sourcesContent":["import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { Fragment as _Fragment, createVNode as _createVNode } from \"vue\";\nimport { defineComponent, computed, ref, watch, Fragment } from 'vue';\nimport PropTypes from '../_util/vue-types';\nimport { filterEmpty } from '../_util/props-util';\nimport { booleanType, tuple } from '../_util/type';\nimport useConfigInject from '../config-provider/hooks/useConfigInject';\nimport useFlexGapSupport from '../_util/hooks/useFlexGapSupport';\nimport classNames from '../_util/classNames';\nimport Compact from './Compact';\nimport useStyle from './style';\nconst spaceSize = {\n small: 8,\n middle: 16,\n large: 24\n};\nexport const spaceProps = () => ({\n prefixCls: String,\n size: {\n type: [String, Number, Array]\n },\n direction: PropTypes.oneOf(tuple('horizontal', 'vertical')).def('horizontal'),\n align: PropTypes.oneOf(tuple('start', 'end', 'center', 'baseline')),\n wrap: booleanType()\n});\nfunction getNumberSize(size) {\n return typeof size === 'string' ? spaceSize[size] : size || 0;\n}\nconst Space = defineComponent({\n compatConfig: {\n MODE: 3\n },\n name: 'ASpace',\n inheritAttrs: false,\n props: spaceProps(),\n slots: Object,\n setup(props, _ref) {\n let {\n slots,\n attrs\n } = _ref;\n const {\n prefixCls,\n space,\n direction: directionConfig\n } = useConfigInject('space', props);\n const [wrapSSR, hashId] = useStyle(prefixCls);\n const supportFlexGap = useFlexGapSupport();\n const size = computed(() => {\n var _a, _b, _c;\n return (_c = (_a = props.size) !== null && _a !== void 0 ? _a : (_b = space === null || space === void 0 ? void 0 : space.value) === null || _b === void 0 ? void 0 : _b.size) !== null && _c !== void 0 ? _c : 'small';\n });\n const horizontalSize = ref();\n const verticalSize = ref();\n watch(size, () => {\n [horizontalSize.value, verticalSize.value] = (Array.isArray(size.value) ? size.value : [size.value, size.value]).map(item => getNumberSize(item));\n }, {\n immediate: true\n });\n const mergedAlign = computed(() => props.align === undefined && props.direction === 'horizontal' ? 'center' : props.align);\n const cn = computed(() => {\n return classNames(prefixCls.value, hashId.value, `${prefixCls.value}-${props.direction}`, {\n [`${prefixCls.value}-rtl`]: directionConfig.value === 'rtl',\n [`${prefixCls.value}-align-${mergedAlign.value}`]: mergedAlign.value\n });\n });\n const marginDirection = computed(() => directionConfig.value === 'rtl' ? 'marginLeft' : 'marginRight');\n const style = computed(() => {\n const gapStyle = {};\n if (supportFlexGap.value) {\n gapStyle.columnGap = `${horizontalSize.value}px`;\n gapStyle.rowGap = `${verticalSize.value}px`;\n }\n return _extends(_extends({}, gapStyle), props.wrap && {\n flexWrap: 'wrap',\n marginBottom: `${-verticalSize.value}px`\n });\n });\n return () => {\n var _a, _b;\n const {\n wrap,\n direction = 'horizontal'\n } = props;\n const children = (_a = slots.default) === null || _a === void 0 ? void 0 : _a.call(slots);\n const items = filterEmpty(children);\n const len = items.length;\n if (len === 0) {\n return null;\n }\n const split = (_b = slots.split) === null || _b === void 0 ? void 0 : _b.call(slots);\n const itemClassName = `${prefixCls.value}-item`;\n const horizontalSizeVal = horizontalSize.value;\n const latestIndex = len - 1;\n return _createVNode(\"div\", _objectSpread(_objectSpread({}, attrs), {}, {\n \"class\": [cn.value, attrs.class],\n \"style\": [style.value, attrs.style]\n }), [items.map((child, index) => {\n let originIndex = children.indexOf(child);\n if (originIndex === -1) {\n originIndex = `$$space-${index}`;\n }\n let itemStyle = {};\n if (!supportFlexGap.value) {\n if (direction === 'vertical') {\n if (index < latestIndex) {\n itemStyle = {\n marginBottom: `${horizontalSizeVal / (split ? 2 : 1)}px`\n };\n }\n } else {\n itemStyle = _extends(_extends({}, index < latestIndex && {\n [marginDirection.value]: `${horizontalSizeVal / (split ? 2 : 1)}px`\n }), wrap && {\n paddingBottom: `${verticalSize.value}px`\n });\n }\n }\n return wrapSSR(_createVNode(_Fragment, {\n \"key\": originIndex\n }, [_createVNode(\"div\", {\n \"class\": itemClassName,\n \"style\": itemStyle\n }, [child]), index < latestIndex && split && _createVNode(\"span\", {\n \"class\": `${itemClassName}-split`,\n \"style\": itemStyle\n }, [split])]));\n })]);\n };\n }\n});\nSpace.Compact = Compact;\nSpace.install = function (app) {\n app.component(Space.name, Space);\n app.component(Compact.name, Compact);\n return app;\n};\nexport { Compact };\nexport default Space;","// This icon file is generated automatically.\nvar ClearOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"defs\", \"attrs\": {}, \"children\": [{ \"tag\": \"style\", \"attrs\": {} }] }, { \"tag\": \"path\", \"attrs\": { \"d\": \"M899.1 869.6l-53-305.6H864c14.4 0 26-11.6 26-26V346c0-14.4-11.6-26-26-26H618V138c0-14.4-11.6-26-26-26H432c-14.4 0-26 11.6-26 26v182H160c-14.4 0-26 11.6-26 26v192c0 14.4 11.6 26 26 26h17.9l-53 305.6a25.95 25.95 0 0025.6 30.4h723c1.5 0 3-.1 4.4-.4a25.88 25.88 0 0021.2-30zM204 390h272V182h72v208h272v104H204V390zm468 440V674c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v156H416V674c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v156H202.8l45.1-260H776l45.1 260H672z\" } }] }, \"name\": \"clear\", \"theme\": \"outlined\" };\nexport default ClearOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport ClearOutlinedSvg from \"@ant-design/icons-svg/es/asn/ClearOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar ClearOutlined = function ClearOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": ClearOutlinedSvg\n }), null);\n};\n\nClearOutlined.displayName = 'ClearOutlined';\nClearOutlined.inheritAttrs = false;\nexport default ClearOutlined;","// This icon file is generated automatically.\nvar CodeOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M516 673c0 4.4 3.4 8 7.5 8h185c4.1 0 7.5-3.6 7.5-8v-48c0-4.4-3.4-8-7.5-8h-185c-4.1 0-7.5 3.6-7.5 8v48zm-194.9 6.1l192-161c3.8-3.2 3.8-9.1 0-12.3l-192-160.9A7.95 7.95 0 00308 351v62.7c0 2.4 1 4.6 2.9 6.1L420.7 512l-109.8 92.2a8.1 8.1 0 00-2.9 6.1V673c0 6.8 7.9 10.5 13.1 6.1zM880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z\" } }] }, \"name\": \"code\", \"theme\": \"outlined\" };\nexport default CodeOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport CodeOutlinedSvg from \"@ant-design/icons-svg/es/asn/CodeOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar CodeOutlined = function CodeOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": CodeOutlinedSvg\n }), null);\n};\n\nCodeOutlined.displayName = 'CodeOutlined';\nCodeOutlined.inheritAttrs = false;\nexport default CodeOutlined;","// This icon file is generated automatically.\nvar ControlOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656zM340 683v77c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-77c-10.1 3.3-20.8 5-32 5s-21.9-1.8-32-5zm64-198V264c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v221c10.1-3.3 20.8-5 32-5s21.9 1.8 32 5zm-64 198c10.1 3.3 20.8 5 32 5s21.9-1.8 32-5c41.8-13.5 72-52.7 72-99s-30.2-85.5-72-99c-10.1-3.3-20.8-5-32-5s-21.9 1.8-32 5c-41.8 13.5-72 52.7-72 99s30.2 85.5 72 99zm.1-115.7c.3-.6.7-1.2 1-1.8v-.1l1.2-1.8c.1-.2.2-.3.3-.5.3-.5.7-.9 1-1.4.1-.1.2-.3.3-.4.5-.6.9-1.1 1.4-1.6l.3-.3 1.2-1.2.4-.4c.5-.5 1-.9 1.6-1.4.6-.5 1.1-.9 1.7-1.3.2-.1.3-.2.5-.3.5-.3.9-.7 1.4-1 .1-.1.3-.2.4-.3.6-.4 1.2-.7 1.9-1.1.1-.1.3-.1.4-.2.5-.3 1-.5 1.6-.8l.6-.3c.7-.3 1.3-.6 2-.8.7-.3 1.4-.5 2.1-.7.2-.1.4-.1.6-.2.6-.2 1.1-.3 1.7-.4.2 0 .3-.1.5-.1.7-.2 1.5-.3 2.2-.4.2 0 .3 0 .5-.1.6-.1 1.2-.1 1.8-.2h.6c.8 0 1.5-.1 2.3-.1s1.5 0 2.3.1h.6c.6 0 1.2.1 1.8.2.2 0 .3 0 .5.1.7.1 1.5.2 2.2.4.2 0 .3.1.5.1.6.1 1.2.3 1.7.4.2.1.4.1.6.2.7.2 1.4.4 2.1.7.7.2 1.3.5 2 .8l.6.3c.5.2 1.1.5 1.6.8.1.1.3.1.4.2.6.3 1.3.7 1.9 1.1.1.1.3.2.4.3.5.3 1 .6 1.4 1 .2.1.3.2.5.3.6.4 1.2.9 1.7 1.3s1.1.9 1.6 1.4l.4.4 1.2 1.2.3.3c.5.5 1 1.1 1.4 1.6.1.1.2.3.3.4.4.4.7.9 1 1.4.1.2.2.3.3.5l1.2 1.8s0 .1.1.1a36.18 36.18 0 015.1 18.5c0 6-1.5 11.7-4.1 16.7-.3.6-.7 1.2-1 1.8 0 0 0 .1-.1.1l-1.2 1.8c-.1.2-.2.3-.3.5-.3.5-.7.9-1 1.4-.1.1-.2.3-.3.4-.5.6-.9 1.1-1.4 1.6l-.3.3-1.2 1.2-.4.4c-.5.5-1 .9-1.6 1.4-.6.5-1.1.9-1.7 1.3-.2.1-.3.2-.5.3-.5.3-.9.7-1.4 1-.1.1-.3.2-.4.3-.6.4-1.2.7-1.9 1.1-.1.1-.3.1-.4.2-.5.3-1 .5-1.6.8l-.6.3c-.7.3-1.3.6-2 .8-.7.3-1.4.5-2.1.7-.2.1-.4.1-.6.2-.6.2-1.1.3-1.7.4-.2 0-.3.1-.5.1-.7.2-1.5.3-2.2.4-.2 0-.3 0-.5.1-.6.1-1.2.1-1.8.2h-.6c-.8 0-1.5.1-2.3.1s-1.5 0-2.3-.1h-.6c-.6 0-1.2-.1-1.8-.2-.2 0-.3 0-.5-.1-.7-.1-1.5-.2-2.2-.4-.2 0-.3-.1-.5-.1-.6-.1-1.2-.3-1.7-.4-.2-.1-.4-.1-.6-.2-.7-.2-1.4-.4-2.1-.7-.7-.2-1.3-.5-2-.8l-.6-.3c-.5-.2-1.1-.5-1.6-.8-.1-.1-.3-.1-.4-.2-.6-.3-1.3-.7-1.9-1.1-.1-.1-.3-.2-.4-.3-.5-.3-1-.6-1.4-1-.2-.1-.3-.2-.5-.3-.6-.4-1.2-.9-1.7-1.3s-1.1-.9-1.6-1.4l-.4-.4-1.2-1.2-.3-.3c-.5-.5-1-1.1-1.4-1.6-.1-.1-.2-.3-.3-.4-.4-.4-.7-.9-1-1.4-.1-.2-.2-.3-.3-.5l-1.2-1.8v-.1c-.4-.6-.7-1.2-1-1.8-2.6-5-4.1-10.7-4.1-16.7s1.5-11.7 4.1-16.7zM620 539v221c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V539c-10.1 3.3-20.8 5-32 5s-21.9-1.8-32-5zm64-198v-77c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v77c10.1-3.3 20.8-5 32-5s21.9 1.8 32 5zm-64 198c10.1 3.3 20.8 5 32 5s21.9-1.8 32-5c41.8-13.5 72-52.7 72-99s-30.2-85.5-72-99c-10.1-3.3-20.8-5-32-5s-21.9 1.8-32 5c-41.8 13.5-72 52.7-72 99s30.2 85.5 72 99zm.1-115.7c.3-.6.7-1.2 1-1.8v-.1l1.2-1.8c.1-.2.2-.3.3-.5.3-.5.7-.9 1-1.4.1-.1.2-.3.3-.4.5-.6.9-1.1 1.4-1.6l.3-.3 1.2-1.2.4-.4c.5-.5 1-.9 1.6-1.4.6-.5 1.1-.9 1.7-1.3.2-.1.3-.2.5-.3.5-.3.9-.7 1.4-1 .1-.1.3-.2.4-.3.6-.4 1.2-.7 1.9-1.1.1-.1.3-.1.4-.2.5-.3 1-.5 1.6-.8l.6-.3c.7-.3 1.3-.6 2-.8.7-.3 1.4-.5 2.1-.7.2-.1.4-.1.6-.2.6-.2 1.1-.3 1.7-.4.2 0 .3-.1.5-.1.7-.2 1.5-.3 2.2-.4.2 0 .3 0 .5-.1.6-.1 1.2-.1 1.8-.2h.6c.8 0 1.5-.1 2.3-.1s1.5 0 2.3.1h.6c.6 0 1.2.1 1.8.2.2 0 .3 0 .5.1.7.1 1.5.2 2.2.4.2 0 .3.1.5.1.6.1 1.2.3 1.7.4.2.1.4.1.6.2.7.2 1.4.4 2.1.7.7.2 1.3.5 2 .8l.6.3c.5.2 1.1.5 1.6.8.1.1.3.1.4.2.6.3 1.3.7 1.9 1.1.1.1.3.2.4.3.5.3 1 .6 1.4 1 .2.1.3.2.5.3.6.4 1.2.9 1.7 1.3s1.1.9 1.6 1.4l.4.4 1.2 1.2.3.3c.5.5 1 1.1 1.4 1.6.1.1.2.3.3.4.4.4.7.9 1 1.4.1.2.2.3.3.5l1.2 1.8v.1a36.18 36.18 0 015.1 18.5c0 6-1.5 11.7-4.1 16.7-.3.6-.7 1.2-1 1.8v.1l-1.2 1.8c-.1.2-.2.3-.3.5-.3.5-.7.9-1 1.4-.1.1-.2.3-.3.4-.5.6-.9 1.1-1.4 1.6l-.3.3-1.2 1.2-.4.4c-.5.5-1 .9-1.6 1.4-.6.5-1.1.9-1.7 1.3-.2.1-.3.2-.5.3-.5.3-.9.7-1.4 1-.1.1-.3.2-.4.3-.6.4-1.2.7-1.9 1.1-.1.1-.3.1-.4.2-.5.3-1 .5-1.6.8l-.6.3c-.7.3-1.3.6-2 .8-.7.3-1.4.5-2.1.7-.2.1-.4.1-.6.2-.6.2-1.1.3-1.7.4-.2 0-.3.1-.5.1-.7.2-1.5.3-2.2.4-.2 0-.3 0-.5.1-.6.1-1.2.1-1.8.2h-.6c-.8 0-1.5.1-2.3.1s-1.5 0-2.3-.1h-.6c-.6 0-1.2-.1-1.8-.2-.2 0-.3 0-.5-.1-.7-.1-1.5-.2-2.2-.4-.2 0-.3-.1-.5-.1-.6-.1-1.2-.3-1.7-.4-.2-.1-.4-.1-.6-.2-.7-.2-1.4-.4-2.1-.7-.7-.2-1.3-.5-2-.8l-.6-.3c-.5-.2-1.1-.5-1.6-.8-.1-.1-.3-.1-.4-.2-.6-.3-1.3-.7-1.9-1.1-.1-.1-.3-.2-.4-.3-.5-.3-1-.6-1.4-1-.2-.1-.3-.2-.5-.3-.6-.4-1.2-.9-1.7-1.3s-1.1-.9-1.6-1.4l-.4-.4-1.2-1.2-.3-.3c-.5-.5-1-1.1-1.4-1.6-.1-.1-.2-.3-.3-.4-.4-.4-.7-.9-1-1.4-.1-.2-.2-.3-.3-.5l-1.2-1.8v-.1c-.4-.6-.7-1.2-1-1.8-2.6-5-4.1-10.7-4.1-16.7s1.5-11.7 4.1-16.7z\" } }] }, \"name\": \"control\", \"theme\": \"outlined\" };\nexport default ControlOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport ControlOutlinedSvg from \"@ant-design/icons-svg/es/asn/ControlOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar ControlOutlined = function ControlOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": ControlOutlinedSvg\n }), null);\n};\n\nControlOutlined.displayName = 'ControlOutlined';\nControlOutlined.inheritAttrs = false;\nexport default ControlOutlined;","// This icon file is generated automatically.\nvar DesktopOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M928 140H96c-17.7 0-32 14.3-32 32v496c0 17.7 14.3 32 32 32h380v112H304c-8.8 0-16 7.2-16 16v48c0 4.4 3.6 8 8 8h432c4.4 0 8-3.6 8-8v-48c0-8.8-7.2-16-16-16H548V700h380c17.7 0 32-14.3 32-32V172c0-17.7-14.3-32-32-32zm-40 488H136V212h752v416z\" } }] }, \"name\": \"desktop\", \"theme\": \"outlined\" };\nexport default DesktopOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport DesktopOutlinedSvg from \"@ant-design/icons-svg/es/asn/DesktopOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar DesktopOutlined = function DesktopOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": DesktopOutlinedSvg\n }), null);\n};\n\nDesktopOutlined.displayName = 'DesktopOutlined';\nDesktopOutlined.inheritAttrs = false;\nexport default DesktopOutlined;","// This icon file is generated automatically.\nvar FunctionOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"defs\", \"attrs\": {}, \"children\": [{ \"tag\": \"style\", \"attrs\": {} }] }, { \"tag\": \"path\", \"attrs\": { \"d\": \"M841 370c3-3.3 2.7-8.3-.6-11.3a8.24 8.24 0 00-5.3-2.1h-72.6c-2.4 0-4.6 1-6.1 2.8L633.5 504.6a7.96 7.96 0 01-13.4-1.9l-63.5-141.3a7.9 7.9 0 00-7.3-4.7H380.7l.9-4.7 8-42.3c10.5-55.4 38-81.4 85.8-81.4 18.6 0 35.5 1.7 48.8 4.7l14.1-66.8c-22.6-4.7-35.2-6.1-54.9-6.1-103.3 0-156.4 44.3-175.9 147.3l-9.4 49.4h-97.6c-3.8 0-7.1 2.7-7.8 6.4L181.9 415a8.07 8.07 0 007.8 9.7H284l-89 429.9a8.07 8.07 0 007.8 9.7H269c3.8 0 7.1-2.7 7.8-6.4l89.7-433.1h135.8l68.2 139.1c1.4 2.9 1 6.4-1.2 8.8l-180.6 203c-2.9 3.3-2.6 8.4.7 11.3 1.5 1.3 3.4 2 5.3 2h72.7c2.4 0 4.6-1 6.1-2.8l123.7-146.7c2.8-3.4 7.9-3.8 11.3-1 .9.8 1.6 1.7 2.1 2.8L676.4 784c1.3 2.8 4.1 4.7 7.3 4.7h64.6a8.02 8.02 0 007.2-11.5l-95.2-198.9c-1.4-2.9-.9-6.4 1.3-8.8L841 370z\" } }] }, \"name\": \"function\", \"theme\": \"outlined\" };\nexport default FunctionOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport FunctionOutlinedSvg from \"@ant-design/icons-svg/es/asn/FunctionOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar FunctionOutlined = function FunctionOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": FunctionOutlinedSvg\n }), null);\n};\n\nFunctionOutlined.displayName = 'FunctionOutlined';\nFunctionOutlined.inheritAttrs = false;\nexport default FunctionOutlined;","// This icon file is generated automatically.\nvar PartitionOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"defs\", \"attrs\": {}, \"children\": [{ \"tag\": \"style\", \"attrs\": {} }] }, { \"tag\": \"path\", \"attrs\": { \"d\": \"M640.6 429.8h257.1c7.9 0 14.3-6.4 14.3-14.3V158.3c0-7.9-6.4-14.3-14.3-14.3H640.6c-7.9 0-14.3 6.4-14.3 14.3v92.9H490.6c-3.9 0-7.1 3.2-7.1 7.1v221.5h-85.7v-96.5c0-7.9-6.4-14.3-14.3-14.3H126.3c-7.9 0-14.3 6.4-14.3 14.3v257.2c0 7.9 6.4 14.3 14.3 14.3h257.1c7.9 0 14.3-6.4 14.3-14.3V544h85.7v221.5c0 3.9 3.2 7.1 7.1 7.1h135.7v92.9c0 7.9 6.4 14.3 14.3 14.3h257.1c7.9 0 14.3-6.4 14.3-14.3v-257c0-7.9-6.4-14.3-14.3-14.3h-257c-7.9 0-14.3 6.4-14.3 14.3v100h-78.6v-393h78.6v100c0 7.9 6.4 14.3 14.3 14.3zm53.5-217.9h150V362h-150V211.9zM329.9 587h-150V437h150v150zm364.2 75.1h150v150.1h-150V662.1z\" } }] }, \"name\": \"partition\", \"theme\": \"outlined\" };\nexport default PartitionOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport PartitionOutlinedSvg from \"@ant-design/icons-svg/es/asn/PartitionOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar PartitionOutlined = function PartitionOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": PartitionOutlinedSvg\n }), null);\n};\n\nPartitionOutlined.displayName = 'PartitionOutlined';\nPartitionOutlined.inheritAttrs = false;\nexport default PartitionOutlined;","// This icon file is generated automatically.\nvar PushpinFilled = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M878.3 392.1L631.9 145.7c-6.5-6.5-15-9.7-23.5-9.7s-17 3.2-23.5 9.7L423.8 306.9c-12.2-1.4-24.5-2-36.8-2-73.2 0-146.4 24.1-206.5 72.3-15.4 12.3-16.6 35.4-2.7 49.4l181.7 181.7-215.4 215.2a15.8 15.8 0 00-4.6 9.8l-3.4 37.2c-.9 9.4 6.6 17.4 15.9 17.4.5 0 1 0 1.5-.1l37.2-3.4c3.7-.3 7.2-2 9.8-4.6l215.4-215.4 181.7 181.7c6.5 6.5 15 9.7 23.5 9.7 9.7 0 19.3-4.2 25.9-12.4 56.3-70.3 79.7-158.3 70.2-243.4l161.1-161.1c12.9-12.8 12.9-33.8 0-46.8z\" } }] }, \"name\": \"pushpin\", \"theme\": \"filled\" };\nexport default PushpinFilled;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport PushpinFilledSvg from \"@ant-design/icons-svg/es/asn/PushpinFilled\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar PushpinFilled = function PushpinFilled(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": PushpinFilledSvg\n }), null);\n};\n\nPushpinFilled.displayName = 'PushpinFilled';\nPushpinFilled.inheritAttrs = false;\nexport default PushpinFilled;","// This icon file is generated automatically.\nvar PushpinOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M878.3 392.1L631.9 145.7c-6.5-6.5-15-9.7-23.5-9.7s-17 3.2-23.5 9.7L423.8 306.9c-12.2-1.4-24.5-2-36.8-2-73.2 0-146.4 24.1-206.5 72.3a33.23 33.23 0 00-2.7 49.4l181.7 181.7-215.4 215.2a15.8 15.8 0 00-4.6 9.8l-3.4 37.2c-.9 9.4 6.6 17.4 15.9 17.4.5 0 1 0 1.5-.1l37.2-3.4c3.7-.3 7.2-2 9.8-4.6l215.4-215.4 181.7 181.7c6.5 6.5 15 9.7 23.5 9.7 9.7 0 19.3-4.2 25.9-12.4 56.3-70.3 79.7-158.3 70.2-243.4l161.1-161.1c12.9-12.8 12.9-33.8 0-46.8zM666.2 549.3l-24.5 24.5 3.8 34.4a259.92 259.92 0 01-30.4 153.9L262 408.8c12.9-7.1 26.3-13.1 40.3-17.9 27.2-9.4 55.7-14.1 84.7-14.1 9.6 0 19.3.5 28.9 1.6l34.4 3.8 24.5-24.5L608.5 224 800 415.5 666.2 549.3z\" } }] }, \"name\": \"pushpin\", \"theme\": \"outlined\" };\nexport default PushpinOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport PushpinOutlinedSvg from \"@ant-design/icons-svg/es/asn/PushpinOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar PushpinOutlined = function PushpinOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": PushpinOutlinedSvg\n }), null);\n};\n\nPushpinOutlined.displayName = 'PushpinOutlined';\nPushpinOutlined.inheritAttrs = false;\nexport default PushpinOutlined;","// This icon file is generated automatically.\nvar RedoOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M758.2 839.1C851.8 765.9 912 651.9 912 523.9 912 303 733.5 124.3 512.6 124 291.4 123.7 112 302.8 112 523.9c0 125.2 57.5 236.9 147.6 310.2 3.5 2.8 8.6 2.2 11.4-1.3l39.4-50.5c2.7-3.4 2.1-8.3-1.2-11.1-8.1-6.6-15.9-13.7-23.4-21.2a318.64 318.64 0 01-68.6-101.7C200.4 609 192 567.1 192 523.9s8.4-85.1 25.1-124.5c16.1-38.1 39.2-72.3 68.6-101.7 29.4-29.4 63.6-52.5 101.7-68.6C426.9 212.4 468.8 204 512 204s85.1 8.4 124.5 25.1c38.1 16.1 72.3 39.2 101.7 68.6 29.4 29.4 52.5 63.6 68.6 101.7 16.7 39.4 25.1 81.3 25.1 124.5s-8.4 85.1-25.1 124.5a318.64 318.64 0 01-68.6 101.7c-9.3 9.3-19.1 18-29.3 26L668.2 724a8 8 0 00-14.1 3l-39.6 162.2c-1.2 5 2.6 9.9 7.7 9.9l167 .8c6.7 0 10.5-7.7 6.3-12.9l-37.3-47.9z\" } }] }, \"name\": \"redo\", \"theme\": \"outlined\" };\nexport default RedoOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport RedoOutlinedSvg from \"@ant-design/icons-svg/es/asn/RedoOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar RedoOutlined = function RedoOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": RedoOutlinedSvg\n }), null);\n};\n\nRedoOutlined.displayName = 'RedoOutlined';\nRedoOutlined.inheritAttrs = false;\nexport default RedoOutlined;","// This icon file is generated automatically.\nvar TabletOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M800 64H224c-35.3 0-64 28.7-64 64v768c0 35.3 28.7 64 64 64h576c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64zm-8 824H232V136h560v752zM472 784a40 40 0 1080 0 40 40 0 10-80 0z\" } }] }, \"name\": \"tablet\", \"theme\": \"outlined\" };\nexport default TabletOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport TabletOutlinedSvg from \"@ant-design/icons-svg/es/asn/TabletOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar TabletOutlined = function TabletOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": TabletOutlinedSvg\n }), null);\n};\n\nTabletOutlined.displayName = 'TabletOutlined';\nTabletOutlined.inheritAttrs = false;\nexport default TabletOutlined;","// This icon file is generated automatically.\nvar UndoOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M511.4 124C290.5 124.3 112 303 112 523.9c0 128 60.2 242 153.8 315.2l-37.5 48c-4.1 5.3-.3 13 6.3 12.9l167-.8c5.2 0 9-4.9 7.7-9.9L369.8 727a8 8 0 00-14.1-3L315 776.1c-10.2-8-20-16.7-29.3-26a318.64 318.64 0 01-68.6-101.7C200.4 609 192 567.1 192 523.9s8.4-85.1 25.1-124.5c16.1-38.1 39.2-72.3 68.6-101.7 29.4-29.4 63.6-52.5 101.7-68.6C426.9 212.4 468.8 204 512 204s85.1 8.4 124.5 25.1c38.1 16.1 72.3 39.2 101.7 68.6 29.4 29.4 52.5 63.6 68.6 101.7 16.7 39.4 25.1 81.3 25.1 124.5s-8.4 85.1-25.1 124.5a318.64 318.64 0 01-68.6 101.7c-7.5 7.5-15.3 14.5-23.4 21.2a7.93 7.93 0 00-1.2 11.1l39.4 50.5c2.8 3.5 7.9 4.1 11.4 1.3C854.5 760.8 912 649.1 912 523.9c0-221.1-179.4-400.2-400.6-399.9z\" } }] }, \"name\": \"undo\", \"theme\": \"outlined\" };\nexport default UndoOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport UndoOutlinedSvg from \"@ant-design/icons-svg/es/asn/UndoOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar UndoOutlined = function UndoOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": UndoOutlinedSvg\n }), null);\n};\n\nUndoOutlined.displayName = 'UndoOutlined';\nUndoOutlined.inheritAttrs = false;\nexport default UndoOutlined;","<script setup lang=\"ts\">\ndefineOptions({ name: 'LowcodeDesignerPageWorkspace' })\n\nimport { ClearOutlined, CodeOutlined, UndoOutlined, RedoOutlined, MobileOutlined, DesktopOutlined, TabletOutlined } from '@ant-design/icons-vue'\nimport { ref, computed } from 'vue'\nimport { useInjectDesigner } from '../material-registry.ts'\nimport { formatShortcutModKey } from '../use-designer-shortcuts.ts'\nimport { serializePageSnapshot } from '../../core/index.ts'\nimport DesignerWidgetNode from './widget-node.vue'\nimport { CodeEditor } from '../shared/code-editor.vue'\n\nconst designer = useInjectDesigner()\nconst shortcutModKey = formatShortcutModKey()\n\nconst undoEnabled = computed(() => {\n void designer?.historyRevision\n return designer?.undoEnabled() ?? false\n})\n\nconst redoEnabled = computed(() => {\n void designer?.historyRevision\n return designer?.redoEnabled() ?? false\n})\n\ntype DeviceType = 'Pc' | 'Pad' | 'H5'\n\nconst device = ref<DeviceType>('Pc')\n\nconst deviceMeta: Record<DeviceType, { maxWidth: string; label: string }> = {\n Pc: { maxWidth: '100%', label: '桌面' },\n Pad: { maxWidth: '768px', label: '平板 768px' },\n H5: { maxWidth: '375px', label: '手机 375px' }\n}\n\nconst deviceLabel = computed(() => deviceMeta[device.value].label)\n\nconst deviceFrameStyle = computed(() => ({\n maxWidth: deviceMeta[device.value].maxWidth\n}))\n\nfunction selectPage() {\n if (designer?.page) {\n designer.setSelected(designer.page)\n }\n}\n\nfunction handleCanvasBackdropClick(e: MouseEvent) {\n if (e.target === e.currentTarget) {\n selectPage()\n }\n}\n\nconst isPreviewJSON = ref(false)\nconst pageJSON = ref('')\nconst previewJSON = () => {\n if (!designer?.page) return\n pageJSON.value = serializePageSnapshot(designer.page, ' ')\n isPreviewJSON.value = true\n}\n</script>\n\n<template>\n <div class=\"relative h-full min-h-0 overflow-hidden\">\n <header class=\"absolute top-1 left-1/2 z-100 inline-flex w-max max-w-[calc(100%-2rem)] shrink-0 flex-nowrap items-center whitespace-nowrap overflow-x-auto rounded-xl border border-[var(--colorBorderSecondary)] bg-[color-mix(in_srgb,var(--colorBgElevated)_98%,transparent)] px-4 py-2 shadow-sm -translate-x-1/2\">\n <a-space :size=\"8\" :wrap=\"false\">\n <a-tooltip :title=\"`撤销 (${shortcutModKey}+Z)`\">\n <a-button size=\"small\" :disabled=\"!undoEnabled\" @click=\"designer?.undo()\">\n <UndoOutlined />\n </a-button>\n </a-tooltip>\n <a-tooltip :title=\"`重做 (${shortcutModKey}+Shift+Z)`\">\n <a-button size=\"small\" :disabled=\"!redoEnabled\" @click=\"designer?.redo()\">\n <RedoOutlined />\n </a-button>\n </a-tooltip>\n\n <a-divider type=\"vertical\" class=\"!h-5 !my-0\" />\n\n <a-radio-group v-model:value=\"device\" size=\"small\">\n <a-radio-button value=\"Pc\"><DesktopOutlined /></a-radio-button>\n <a-radio-button value=\"Pad\"><TabletOutlined :rotate=\"90\" /></a-radio-button>\n <a-radio-button value=\"H5\"><MobileOutlined /></a-radio-button>\n </a-radio-group>\n <span class=\"text-xs text-[var(--colorTextSecondary)] select-none\">{{ deviceLabel }}</span>\n\n <a-divider type=\"vertical\" class=\"!h-5 !my-0\" />\n\n <a-tooltip title=\"源码\">\n <a-button size=\"small\" @click=\"previewJSON()\"><CodeOutlined /></a-button>\n </a-tooltip>\n <a-tooltip title=\"清空画布\">\n <a-button size=\"small\" @click=\"designer?.clearWidgetList()\"><ClearOutlined /></a-button>\n </a-tooltip>\n </a-space>\n </header>\n\n <div class=\"lowcode-canvas-scroll relative h-full min-h-0 overflow-auto scrollbar bg-transparent p-6 pt-18\" @click=\"handleCanvasBackdropClick\">\n <div class=\"lowcode-canvas-chrome-layer pointer-events-none absolute inset-0 z-500 overflow-visible\" aria-hidden=\"true\" />\n <div class=\"relative mx-auto h-full shadow-[0_1px_4px_color-mix(in_srgb,var(--colorText)_6%,transparent)] transition-all duration-250\" :style=\"deviceFrameStyle\" @click.stop>\n <DesignerWidgetNode v-if=\"designer?.page\" :designer=\"designer\" :widget=\"designer.page\" />\n </div>\n </div>\n </div>\n\n <a-modal v-model:open=\"isPreviewJSON\" title=\"页面源码\" :footer=\"null\" width=\"80vw\" centered destroy-on-close>\n <CodeEditor v-model=\"pageJSON\" language=\"json\" read-only :height=\"480\" />\n </a-modal>\n</template>\n","<script setup lang=\"ts\">\ndefineOptions({ name: 'LowcodeDesignerWidgetSetterPanel' })\n\nimport { computed } from 'vue'\nimport { AppstoreOutlined, ControlOutlined, RightOutlined } from '@ant-design/icons-vue'\nimport type { Widget } from '../../core/index.ts'\nimport { canMutateWidgetContent } from '../../core/index.ts'\nimport { useInjectDesigner, useInjectMaterialRegistry } from '../material-registry.ts'\nimport SetterIcon from '../../materials/shared/designer/icon.vue'\n\nconst designer = useInjectDesigner()\nconst materialRegistry = useInjectMaterialRegistry()\n\nfunction getTreePath(tree: Widget[] | undefined, func: (widget: Widget) => boolean, paths: Widget[]): Widget[] {\n if (!tree) return []\n for (const data of tree) {\n paths.push(data)\n\n if (func(data)) return paths\n if (data.children) {\n const findChildren = getTreePath(data.children, func, paths)\n if (findChildren.length) return findChildren\n }\n paths.pop()\n }\n return []\n}\n\nconst selectedWidget = computed(() => designer?.selectedWidget ?? null)\n\nconst breadcrumb = computed(() => {\n if (!designer?.page || !selectedWidget.value) return []\n return getTreePath([designer.page], (widget: Widget) => widget.id === selectedWidget.value?.id, [])\n})\n\nconst isPageSelected = computed(() => selectedWidget.value?.type === 'page')\n\nconst selectionTitle = computed(() => {\n if (!selectedWidget.value) return '未选择组件'\n const { type } = selectedWidget.value\n return materialRegistry.getWidgetTypeLabel(type) ?? type ?? '未知组件'\n})\n\nconst selectedWidgetIcon = computed(() => {\n if (!selectedWidget.value) return undefined\n return materialRegistry.getWidgetTypeIcon(selectedWidget.value.type)\n})\n\nconst isReadonly = computed(() => {\n if (!designer?.page || !selectedWidget.value) return false\n if (selectedWidget.value.type === 'page') return false\n return !canMutateWidgetContent(designer.page, selectedWidget.value)\n})\n\nconst headerIconBase = 'size-8 shrink-0 flex-center rounded-lg text-[15px]'\n\nconst headerIconPage = `${headerIconBase} bg-[color-mix(in_srgb,var(--colorPrimary)_10%,var(--colorBgContainer))] text-[var(--colorPrimary)] shadow-[inset_0_0_0_1px_color-mix(in_srgb,var(--colorPrimary)_16%,transparent)]`\n\nconst headerIconWidget = `${headerIconBase} bg-[color-mix(in_srgb,var(--colorText)_6%,var(--colorBgContainer))] text-[var(--colorTextSecondary)] shadow-[inset_0_0_0_1px_color-mix(in_srgb,var(--colorText)_8%,transparent)]`\n\nconst headerIconEmpty = `${headerIconBase} bg-[color-mix(in_srgb,var(--colorPrimary)_10%,var(--colorBgContainer))] text-[var(--colorPrimary)] shadow-[inset_0_0_0_1px_color-mix(in_srgb,var(--colorPrimary)_18%,transparent)]`\n\nconst contentTransitionActive = 'transition-[opacity,transform] duration-[160ms] ease-in-out'\n\nconst contentTransitionFrom = 'opacity-0 translate-y-1.5'\n\nfunction handleSelect(widget: Widget) {\n designer?.setSelected(widget)\n}\n</script>\n\n<template>\n <div class=\"flex h-full min-h-0 flex-col bg-[var(--colorBgContainer)]\">\n <header class=\"shrink-0 border-b border-[var(--colorSplit)] bg-[linear-gradient(180deg,var(--colorBgContainer)_0%,color-mix(in_srgb,var(--colorBgContainer)_94%,var(--colorPrimary)_6%)_100%)] px-4 py-3\">\n <div class=\"flex items-start gap-3\">\n <span v-if=\"selectedWidget\" :class=\"isPageSelected ? headerIconPage : headerIconWidget\">\n <SetterIcon v-if=\"selectedWidgetIcon\" :icon=\"selectedWidgetIcon\" class=\"text-[15px]\" />\n <AppstoreOutlined v-else class=\"text-[15px]\" />\n </span>\n <span v-else :class=\"headerIconEmpty\">\n <ControlOutlined />\n </span>\n <div class=\"min-w-0 flex-1\">\n <div class=\"truncate text-sm font-medium text-[var(--colorText)]\">{{ selectionTitle }}</div>\n <div v-if=\"breadcrumb.length > 1\" class=\"mt-1.5 flex flex-wrap items-center gap-1\">\n <template v-for=\"(item, index) in breadcrumb\" :key=\"item.id\">\n <button v-if=\"index < breadcrumb.length - 1\" type=\"button\" class=\"max-w-[88px] cursor-pointer truncate border-none bg-transparent p-0 text-[11px] leading-[1.4] text-[var(--colorTextSecondary)] transition-colors duration-[180ms] ease-in-out hover:text-[var(--colorPrimary)]\" @click=\"handleSelect(item)\">\n {{ item.name }}\n </button>\n <span v-else class=\"max-w-[120px] truncate text-[11px] leading-[1.4] font-medium text-[var(--colorPrimary)]\">{{ item.name }}</span>\n <RightOutlined v-if=\"index < breadcrumb.length - 1\" class=\"text-[9px] text-[var(--colorTextQuaternary)]\" />\n </template>\n </div>\n </div>\n </div>\n </header>\n\n <div class=\"relative min-h-0 flex-1 overflow-y-auto overflow-x-hidden scrollbar\">\n <Transition mode=\"out-in\" :enter-active-class=\"contentTransitionActive\" :leave-active-class=\"contentTransitionActive\" :enter-from-class=\"contentTransitionFrom\" :leave-to-class=\"contentTransitionFrom\">\n <div v-if=\"selectedWidget\" :key=\"selectedWidget.id\" class=\"relative pt-1 pb-3\">\n <component :is=\"'widget-' + selectedWidget.type + '-setter'\" :widget=\"selectedWidget\">\n <template v-if=\"isPageSelected && $slots['page-setter-options']\" #options=\"scope\">\n <slot name=\"page-setter-options\" v-bind=\"scope\" />\n </template>\n </component>\n <div\n v-if=\"isReadonly\"\n class=\"pointer-events-none absolute inset-0 z-10 flex items-start justify-center bg-[color-mix(in_srgb,var(--colorBgContainer)_72%,transparent)] pt-16\"\n >\n <span class=\"rounded-md bg-[var(--colorFillSecondary)] px-3 py-1.5 text-xs text-[var(--colorTextSecondary)] shadow-sm\">组件已锁定,不可编辑属性</span>\n </div>\n </div>\n <div v-else key=\"empty\" class=\"flex-center min-h-[220px] px-6 py-16 text-[var(--colorTextSecondary)]\">\n <span class=\"text-sm\">请在页面工作区选中组件</span>\n </div>\n </Transition>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\ndefineOptions({ name: 'LowcodeDesignerWidgetLibrary' })\n\nimport { computed, onBeforeUnmount, ref } from 'vue'\nimport Collapse, { CollapsePanel } from 'ant-design-vue/es/collapse'\nimport { SearchOutlined } from '@ant-design/icons-vue'\nimport Sortable, { type SortableEvent } from 'sortablejs'\nimport type { Widget } from '../../core/index.ts'\nimport { widgetCanAcceptDropTarget } from '../../core/index.ts'\nimport { useInjectDesigner, useInjectMaterialRegistry } from '../material-registry.ts'\nimport SetterIcon from '../../materials/shared/designer/icon.vue'\n\n/** 画布侧放置虚影样式,组件库不使用 */\nconst CANVAS_DROP_GHOST = 'lowcode-sortable-ghost'\n\n/** 组件库拖拽时禁用 Sortable 默认样式,避免原卡片出现虚线/高亮 */\nconst PALETTE_SORTABLE_NOOP_CLASS = 'lowcode-palette-sortable-noop'\n\nconst materialRegistry = useInjectMaterialRegistry()\n\nconst searchKeyword = ref('')\n\nconst filteredPackages = computed(() => {\n const keyword = searchKeyword.value.trim().toLowerCase()\n return materialRegistry.packages\n .map(pkg => ({\n name: pkg.name,\n children: pkg.children.filter(w => {\n if (!keyword) return true\n return w.name.toLowerCase().includes(keyword) || w.type.toLowerCase().includes(keyword)\n })\n }))\n .filter(pkg => pkg.children.length > 0)\n})\n\nconst defaultActiveKeys = computed(() => filteredPackages.value.map(pkg => pkg.name))\n\nconst designer = useInjectDesigner()\n\nconst sortableMap = new Map<string, Sortable>()\n\nfunction getTemplateByType(type: string): Widget | undefined {\n for (const pkg of materialRegistry.packages) {\n const found = pkg.children.find(w => w.type === type)\n if (found) return found\n }\n return undefined\n}\n\nfunction destroySortable(name: string) {\n sortableMap.get(name)?.destroy()\n sortableMap.delete(name)\n}\n\n/** 拖拽结束后清理 Sortable 可能残留的克隆节点,避免整表重建闪烁 */\nfunction cleanupPaletteSortableArtifacts(root: HTMLElement | undefined) {\n if (!root) return\n\n root.querySelectorAll('.lowcode-draggable-item').forEach(node => node.remove())\n\n root.querySelectorAll<HTMLElement>('.palette-item').forEach(item => {\n item.classList.remove(\n 'sortable-chosen',\n 'sortable-ghost',\n 'sortable-drag',\n CANVAS_DROP_GHOST,\n PALETTE_SORTABLE_NOOP_CLASS\n )\n item.style.removeProperty('display')\n })\n}\n\nfunction initPaletteSortable(name: string, el: HTMLElement | null) {\n destroySortable(name)\n if (!el) return\n\n sortableMap.set(\n name,\n Sortable.create(el, {\n group: { name: 'dragGroup', pull: 'clone', put: false },\n sort: false,\n draggable: '.palette-item',\n animation: 150,\n ghostClass: PALETTE_SORTABLE_NOOP_CLASS,\n chosenClass: PALETTE_SORTABLE_NOOP_CLASS,\n dragClass: PALETTE_SORTABLE_NOOP_CLASS,\n removeCloneOnHide: true,\n forceFallback: true,\n fallbackOnBody: true,\n fallbackTolerance: 8,\n onStart(evt: SortableEvent) {\n const item = evt.item as HTMLElement & { _underlying_vm_?: Widget }\n item.classList.remove(CANVAS_DROP_GHOST, PALETTE_SORTABLE_NOOP_CLASS)\n\n const type = item.dataset.widgetType\n if (!type) return\n const template = getTemplateByType(type)\n if (template && designer) {\n const widget = designer.copyNewWidget(template)\n designer.setPendingPaletteWidget(widget)\n item._underlying_vm_ = widget\n }\n },\n onClone(evt: SortableEvent) {\n const item = evt.item as HTMLElement & { _underlying_vm_?: Widget }\n const clone = evt.clone as HTMLElement & { _underlying_vm_?: Widget }\n clone._underlying_vm_ = item._underlying_vm_\n // 占位克隆保持与原卡片一致,组件库视觉上不做任何变化\n },\n onEnd(evt: SortableEvent) {\n designer?.setPendingPaletteWidget(null)\n designer?.setDropHoverEmptyZoneId(null)\n cleanupPaletteSortableArtifacts(evt.from as HTMLElement | undefined)\n }\n })\n )\n}\n\nfunction setGridRef(name: string, el: Element | null) {\n if (!el) {\n destroySortable(name)\n return\n }\n initPaletteSortable(name, el as HTMLElement)\n}\n\nonBeforeUnmount(() => {\n for (const name of [...sortableMap.keys()]) {\n destroySortable(name)\n }\n})\n\nfunction resolveQuickAddParent(): Widget | undefined {\n const page = designer?.page\n const selected = designer?.selectedWidget\n if (!page || !selected || selected.id === page.id) return undefined\n if (\n widgetCanAcceptDropTarget(page, selected, {\n isContainerType: materialRegistry.isContainerType,\n getKeyedSlotConfig: materialRegistry.getKeyedSlotConfig\n })\n ) {\n return selected\n }\n return undefined\n}\n\nfunction handleQuickAdd(widget: Widget) {\n designer?.addWidget(widget, resolveQuickAddParent())\n}\n</script>\n\n<template>\n <div class=\"flex h-full min-h-0 flex-col select-none\">\n <header class=\"shrink-0 select-text border-b border-[var(--colorSplit)] bg-[var(--colorBgContainer)] px-3 py-2.5\">\n <a-input v-model:value=\"searchKeyword\" allow-clear placeholder=\"搜索组件\" size=\"small\">\n <template #prefix>\n <SearchOutlined class=\"text-[var(--colorTextSecondary)]\" />\n </template>\n </a-input>\n </header>\n\n <div class=\"min-h-0 flex-1 overflow-y-auto scrollbar\">\n <Collapse :key=\"searchKeyword\" ghost expand-icon-position=\"end\" :default-active-key=\"defaultActiveKeys\">\n <CollapsePanel v-for=\"pkg in filteredPackages\" :key=\"pkg.name\" :panel-key=\"pkg.name\">\n <template #header>\n <div class=\"flex min-w-0 flex-1 items-center justify-between gap-2 pr-1\">\n <span class=\"truncate text-sm font-medium text-[var(--colorText)]\">{{ pkg.name }}</span>\n <span class=\"shrink-0 rounded-full bg-[var(--colorFillSecondary)] px-2 py-0.5 text-[10px] text-[var(--colorTextSecondary)]\">{{ pkg.children.length }}</span>\n </div>\n </template>\n\n <div :ref=\"el => setGridRef(pkg.name, el as Element | null)\" class=\"flex flex-wrap gap-2 px-1 pb-2 pt-0.5\">\n <div v-for=\"widget in pkg.children\" :key=\"widget.type\" class=\"palette-item flex w-[calc((100%-16px)/3)] min-h-[72px] cursor-grab flex-col items-center justify-center gap-1.5 rounded-[10px] border border-transparent bg-[var(--colorBgElevated)] px-1 py-2 hover:bg-[color-mix(in_srgb,var(--colorPrimary)_8%,var(--colorBgContainer))] active:cursor-grabbing\" :data-widget-type=\"widget.type\" :title=\"`${widget.name} · 双击快速添加`\" @dblclick=\"handleQuickAdd(widget)\">\n <div class=\"flex-center size-8 rounded-lg bg-[color-mix(in_srgb,var(--colorPrimary)_8%,var(--colorBgContainer))] text-base text-[var(--colorPrimary)]\">\n <SetterIcon :icon=\"widget.icon\" />\n </div>\n <div class=\"w-full truncate px-0.5 text-center text-[11px] leading-tight text-[var(--colorTextSecondary)]\">{{ widget.name }}</div>\n </div>\n </div>\n </CollapsePanel>\n </Collapse>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\ndefineOptions({ name: 'LowcodeDesignerPageOutline' })\n\nimport { computed, nextTick, ref } from 'vue'\nimport { DeleteOutlined, LockOutlined, RightOutlined, UnlockOutlined } from '@ant-design/icons-vue'\nimport type { AntTreeNodeDropEvent, AntTreeNodeSelectedEvent } from 'ant-design-vue/es/tree/Tree'\nimport type { Key } from 'ant-design-vue/es/vc-tree/interface'\nimport type { Page, Widget } from '../../core/index.ts'\nimport { canMutateWidgetContent, canMutateWidgetStructure, canToggleWidgetLock, isWidgetEffectivelyLocked, isWidgetSelfLocked, resolveWidgetEditorTitle } from '../../core/index.ts'\nimport type { Designer } from '../designer.ts'\nimport { useInjectDesigner, useInjectMaterialRegistry } from '../material-registry.ts'\nimport SetterIcon from '../../materials/shared/designer/icon.vue'\n\n/** 大纲树节点:仅文本展示字段 + 原始 widget 引用(供选中/拖拽) */\ntype OutlineTreeNode = {\n key: number\n title: string\n widgetRef: Widget\n children?: OutlineTreeNode[]\n}\n\nconst designer = useInjectDesigner()\nconst materialRegistry = useInjectMaterialRegistry()\n\nfunction buildOutlineTreeNode(widget: Widget): OutlineTreeNode {\n return {\n key: widget.id,\n title: resolveWidgetEditorTitle(widget),\n widgetRef: widget,\n children: widget.children?.map(buildOutlineTreeNode)\n }\n}\n\nconst outlineTreeTick = ref(0)\n\nconst treeData = computed<OutlineTreeNode[]>(() => {\n void designer?.pageTreeRevision\n void outlineTreeTick.value\n return designer?.page ? [buildOutlineTreeNode(designer.page)] : []\n})\n\nconst selectedKeys = computed<Key[]>(() => {\n const id = designer?.selectedWidget?.id\n return id != null ? [id] : []\n})\n\n/** tree-data 节点为 OutlineTreeNode;事件节点为 EventDataNode(含 dataRef) */\nfunction resolveTreeWidget(node: { dataRef?: unknown; data?: unknown; widgetRef?: Widget; key?: Key; eventKey?: Key } | undefined): Widget | undefined {\n if (!node) return undefined\n if (node.widgetRef) return node.widgetRef\n\n const outlineNode = [node.data, node.dataRef].find(\n (item): item is OutlineTreeNode => !!item && typeof item === 'object' && 'widgetRef' in item && !!(item as OutlineTreeNode).widgetRef\n )\n if (outlineNode?.widgetRef) return outlineNode.widgetRef\n\n const nested = node.dataRef && typeof node.dataRef === 'object' && 'data' in node.dataRef\n ? (node.dataRef as { data?: OutlineTreeNode }).data\n : undefined\n if (nested?.widgetRef) return nested.widgetRef\n\n const widgetId = typeof node.key === 'number'\n ? node.key\n : typeof node.eventKey === 'number'\n ? node.eventKey\n : Number(node.eventKey ?? node.key)\n if (Number.isFinite(widgetId) && designer) {\n return designer.findWidgetById(widgetId) ?? undefined\n }\n\n return undefined\n}\n\ntype WidgetPlacement = {\n parent: Widget\n list: Widget[]\n index: number\n}\n\nfunction findWidgetPlacement(page: Page, widgetId: number): WidgetPlacement | null {\n const pageChildren = page.children ?? []\n const pageIndex = pageChildren.findIndex(item => item.id === widgetId)\n if (pageIndex >= 0) {\n return { parent: page, list: pageChildren, index: pageIndex }\n }\n\n function walk(parent: Widget): WidgetPlacement | null {\n const children = parent.children\n if (!children?.length) return null\n for (let index = 0; index < children.length; index++) {\n const child = children[index]\n if (child.id === widgetId) {\n return { parent, list: children, index }\n }\n const nested = walk(child)\n if (nested) return nested\n }\n return null\n }\n\n for (const child of pageChildren) {\n const found = walk(child)\n if (found) return found\n }\n return null\n}\n\nfunction widgetAcceptsChildren(widget: Widget, page: Page): boolean {\n if (widget.id === page.id) return true\n return materialRegistry.widgetCanBeParent(widget)\n}\n\nfunction ensureChildren(widget: Widget): Widget[] {\n if (!widget.children) {\n widget.children = []\n }\n return widget.children\n}\n\nfunction resolveRelativeDropPosition(info: AntTreeNodeDropEvent): number {\n const posParts = String(info.node.pos ?? '').split('-')\n return info.dropPosition - Number(posParts[posParts.length - 1] ?? 0)\n}\n\nfunction resolveOutlineDropTarget(page: Page, dropWidget: Widget, dropToGap: boolean, relativeDropPosition: number, nodeExpanded: boolean): { list: Widget[]; index: number } | null {\n if (!dropToGap) {\n if (!widgetAcceptsChildren(dropWidget, page)) return null\n return { list: ensureChildren(dropWidget), index: 0 }\n }\n\n const dropIntoExpandedChildren = (dropWidget.children?.length ?? 0) > 0 && nodeExpanded && relativeDropPosition === 1\n\n if (dropIntoExpandedChildren) {\n if (!widgetAcceptsChildren(dropWidget, page)) return null\n return { list: ensureChildren(dropWidget), index: 0 }\n }\n\n const placement = findWidgetPlacement(page, dropWidget.id)\n if (!placement) return null\n\n const index = relativeDropPosition <= 0 ? placement.index : placement.index + 1\n return { list: placement.list, index }\n}\n\nfunction isNodeDraggable(node: unknown) {\n if (!designer?.page) return false\n const widget = resolveTreeWidget(node as { widgetRef?: Widget; dataRef?: unknown })\n if (!widget || widget.id === designer.page.id) return false\n return canMutateWidgetStructure(designer.page, widget)\n}\n\nfunction isOutlineDropAllowed(ctx: Designer, options: { dragNode: { dataRef?: unknown; id?: number; type?: string }; dropNode: { dataRef?: unknown; id?: number; type?: string }; dropPosition: -1 | 0 | 1 }): boolean {\n const page = ctx.page\n const dragWidget = resolveTreeWidget(options.dragNode)\n const dropWidget = resolveTreeWidget(options.dropNode)\n if (!dragWidget || !dropWidget) return false\n if (dragWidget.id === page.id) return false\n if (!canMutateWidgetStructure(page, dragWidget)) return false\n if (ctx.widgetTreeContains(dragWidget, dropWidget.id)) return false\n\n if (options.dropPosition === 0) {\n if (!widgetAcceptsChildren(dropWidget, page)) return false\n return canMutateWidgetStructure(page, dropWidget)\n }\n return true\n}\n\nfunction applyOutlineTreeDrop(ctx: Designer, info: AntTreeNodeDropEvent): void {\n const page = ctx.page\n const dragWidget = resolveTreeWidget(info.dragNode)\n const dropWidget = resolveTreeWidget(info.node)\n if (!dragWidget || !dropWidget) return\n if (dragWidget.id === page.id) return\n if (ctx.widgetTreeContains(dragWidget, dropWidget.id)) return\n\n const relativeDropPosition = resolveRelativeDropPosition(info)\n const dropToGap = info.dropToGap ?? relativeDropPosition !== 0\n const target = resolveOutlineDropTarget(page, dropWidget, dropToGap, relativeDropPosition, Boolean(info.node.expanded))\n if (!target) return\n\n ctx.beginPageHistoryWatchSuspend()\n ctx.moveWidgetToList(dragWidget, target.list, target.index)\n ctx.endPageHistoryWatchSuspend()\n ctx.recordHistoryNow()\n ctx.setSelected(dragWidget)\n}\n\nfunction handleSelectWidget(_keys: Key[], info: AntTreeNodeSelectedEvent) {\n if (!info.selected) return\n const widget = resolveTreeWidget(info.node)\n if (widget) {\n designer?.setSelected(widget)\n }\n}\n\nfunction handleAllowDrop(options: { dragNode: { dataRef?: unknown; id?: number; type?: string }; dropNode: { dataRef?: unknown; id?: number; type?: string }; dropPosition: -1 | 0 | 1 }) {\n if (!designer) return false\n return isOutlineDropAllowed(designer, options)\n}\n\nfunction handleDrop(info: AntTreeNodeDropEvent) {\n if (!designer) return\n applyOutlineTreeDrop(designer, info)\n}\n\nfunction getOutlineNodeIcon(node: { dataRef?: unknown; widgetRef?: Widget }) {\n const widget = resolveTreeWidget(node)\n if (!widget) return undefined\n return materialRegistry.getWidgetTypeIcon(widget.type)\n}\n\nfunction getOutlineNodeTitle(node: { title?: string; dataRef?: unknown; widgetRef?: Widget }) {\n if (typeof node.title === 'string' && node.title) return node.title\n const widget = resolveTreeWidget(node)\n return widget ? resolveWidgetEditorTitle(widget) : ''\n}\n\nfunction removeOutlineWidget(widget: Widget) {\n if (!designer?.page || widget.id === designer.page.id) return\n\n const placement = findWidgetPlacement(designer.page, widget.id)\n if (!placement) return\n\n const { parent } = placement\n const keyedConfig = materialRegistry.getKeyedSlotConfig(parent.type)\n if (keyedConfig?.isContainer(parent) && keyedConfig.isChild(widget)) {\n designer.removeKeyedSlotChild(parent, widget, keyedConfig)\n outlineTreeTick.value++\n return\n }\n\n designer.removeWidget(widget, parent)\n}\n\nfunction handleTitleDblClick(node: { dataRef?: unknown; data?: unknown; widgetRef?: Widget; key?: Key; eventKey?: Key }, event: MouseEvent) {\n if (isRenamingNode(node)) return\n const widget = resolveTreeWidget(node)\n if (!widget || !designer?.page || !canMutateWidgetContent(designer.page, widget)) return\n event.preventDefault()\n event.stopPropagation()\n startInlineRename(widget)\n}\n\nfunction handleDeleteClick(node: { dataRef?: unknown; data?: unknown; widgetRef?: Widget; key?: Key; eventKey?: Key }, event: MouseEvent) {\n event.preventDefault()\n event.stopPropagation()\n const widget = resolveTreeWidget(node)\n if (!widget || !canDeleteWidget(widget)) return\n if (renamingWidgetId.value === widget.id) {\n cancelInlineRename()\n }\n removeOutlineWidget(widget)\n}\n\nfunction canDeleteWidget(widget: Widget | null | undefined) {\n if (!widget || !designer?.page) return false\n if (widget.id === designer.page.id) return false\n if (!canMutateWidgetStructure(designer.page, widget)) return false\n\n const placement = findWidgetPlacement(designer.page, widget.id)\n if (!placement) return false\n\n const keyedConfig = materialRegistry.getKeyedSlotConfig(placement.parent.type)\n if (keyedConfig?.isContainer(placement.parent) && keyedConfig.isChild(widget)) {\n return keyedConfig.getChildren(placement.parent).length > 1\n }\n return true\n}\n\nconst renamingWidgetId = ref<number | null>(null)\nconst renameDraft = ref('')\nconst renameInputRef = ref<{ focus: () => void; select?: () => void } | null>(null)\n\nfunction isRenamingNode(node: { dataRef?: unknown; data?: unknown; widgetRef?: Widget; key?: Key; eventKey?: Key }) {\n const widget = resolveTreeWidget(node)\n return widget != null && widget.id === renamingWidgetId.value\n}\n\nfunction startInlineRename(widget: Widget) {\n designer?.setSelected(widget)\n renamingWidgetId.value = widget.id\n renameDraft.value = resolveWidgetEditorTitle(widget)\n nextTick(() => {\n renameInputRef.value?.focus()\n renameInputRef.value?.select?.()\n })\n}\n\nfunction cancelInlineRename() {\n renamingWidgetId.value = null\n renameDraft.value = ''\n}\n\nfunction handleRenameKeydown(event: KeyboardEvent) {\n if (event.key === 'Enter') {\n event.preventDefault()\n commitInlineRename()\n return\n }\n if (event.key === 'Escape') {\n event.preventDefault()\n cancelInlineRename()\n }\n}\n\nfunction commitInlineRename() {\n const widgetId = renamingWidgetId.value\n if (widgetId == null || !designer) {\n cancelInlineRename()\n return\n }\n\n const widget = designer.findWidgetById(widgetId)\n if (!widget) {\n cancelInlineRename()\n return\n }\n\n if (!canMutateWidgetContent(designer.page, widget)) {\n cancelInlineRename()\n return\n }\n\n const nextTitle = renameDraft.value.trim()\n const prevTitle = typeof widget.title === 'string' ? widget.title.trim() : ''\n if (nextTitle !== prevTitle) {\n widget.title = nextTitle\n outlineTreeTick.value++\n designer.recordHistoryNow()\n }\n\n cancelInlineRename()\n}\n\nfunction canToggleLock(widget: Widget | null | undefined) {\n if (!widget || !designer?.page) return false\n return canToggleWidgetLock(designer.page, widget)\n}\n\nfunction handleLockClick(node: { dataRef?: unknown; data?: unknown; widgetRef?: Widget; key?: Key; eventKey?: Key }, event: MouseEvent) {\n event.preventDefault()\n event.stopPropagation()\n const widget = resolveTreeWidget(node)\n if (!widget || !canToggleLock(widget)) return\n designer?.toggleWidgetLock(widget)\n outlineTreeTick.value++\n}\n\nfunction isNodeLocked(node: { dataRef?: unknown; data?: unknown; widgetRef?: Widget; key?: Key; eventKey?: Key }) {\n const widget = resolveTreeWidget(node)\n if (!widget || !designer?.page) return false\n return isWidgetEffectivelyLocked(designer.page, widget)\n}\n\nfunction isNodeSelected(node: { dataRef?: unknown; data?: unknown; widgetRef?: Widget; key?: Key; eventKey?: Key }) {\n const widget = resolveTreeWidget(node)\n return widget != null && widget.id === designer?.selectedWidget?.id\n}\n\nconst outlineShowLine = { showLeafIcon: false }\n\n</script>\n\n<template>\n <div class=\"outline-panel min-h-0 flex-1 overflow-y-auto scrollbar px-2 py-2\">\n <a-tree\n class=\"outline-tree\"\n :tree-data=\"treeData\"\n :selected-keys=\"selectedKeys\"\n :show-line=\"outlineShowLine\"\n default-expand-all\n block-node\n :draggable=\"isNodeDraggable\"\n :field-names=\"{ children: 'children', title: 'title', key: 'key' }\"\n :allow-drop=\"handleAllowDrop\"\n @select=\"handleSelectWidget\"\n @drop=\"handleDrop\"\n >\n <template #switcherIcon=\"{ expanded, isLeaf }\">\n <RightOutlined v-if=\"!isLeaf\" class=\"outline-tree-switcher\" :class=\"{ 'outline-tree-switcher--expanded': expanded }\" />\n </template>\n <template #title=\"node\">\n <span\n class=\"outline-tree-node group flex min-w-0 flex-1 items-center gap-1.5\"\n :class=\"{ 'outline-tree-node--selected': isNodeSelected(node) }\"\n @dblclick=\"handleTitleDblClick(node, $event)\"\n >\n <span v-if=\"getOutlineNodeIcon(node)\" class=\"outline-tree-node-icon\">\n <SetterIcon :icon=\"getOutlineNodeIcon(node)\" class=\"text-[var(--colorTextSecondary)]\" />\n </span>\n <a-input\n v-if=\"isRenamingNode(node)\"\n ref=\"renameInputRef\"\n v-model:value=\"renameDraft\"\n size=\"small\"\n class=\"outline-rename-input min-w-0 flex-1\"\n placeholder=\"组件名称\"\n @click.stop\n @mousedown.stop\n @keydown=\"handleRenameKeydown\"\n @blur=\"commitInlineRename\"\n />\n <span v-else class=\"outline-tree-node-label\">{{ getOutlineNodeTitle(node) }}</span>\n <span\n v-if=\"!isRenamingNode(node)\"\n class=\"outline-tree-node-actions ml-auto flex shrink-0 items-center gap-0.5\"\n :class=\"isNodeSelected(node) ? 'opacity-100' : 'opacity-0 group-hover:opacity-100'\"\n >\n <button\n v-if=\"resolveTreeWidget(node)?.type !== 'page'\"\n type=\"button\"\n class=\"outline-tree-action-btn\"\n :class=\"isNodeLocked(node) && 'outline-tree-action-btn--active'\"\n :title=\"isWidgetSelfLocked(resolveTreeWidget(node)!) ? '解锁' : '锁定'\"\n :disabled=\"!canToggleLock(resolveTreeWidget(node))\"\n @click=\"handleLockClick(node, $event)\"\n @mousedown.stop\n >\n <UnlockOutlined v-if=\"isWidgetSelfLocked(resolveTreeWidget(node)!)\" />\n <LockOutlined v-else />\n </button>\n <button\n type=\"button\"\n class=\"outline-tree-action-btn outline-tree-action-btn--danger\"\n title=\"删除\"\n :disabled=\"!canDeleteWidget(resolveTreeWidget(node))\"\n @click=\"handleDeleteClick(node, $event)\"\n @mousedown.stop\n >\n <DeleteOutlined />\n </button>\n </span>\n </span>\n </template>\n </a-tree>\n </div>\n</template>\n\n<style scoped>\n.outline-tree {\n --outline-tree-row-height: 24px;\n\n background: transparent;\n font-size: 12px;\n}\n\n.outline-tree :deep(.ant-tree-treenode) {\n align-items: center !important;\n padding: 0 !important;\n}\n\n.outline-tree :deep(.ant-tree-indent) {\n align-self: center;\n height: var(--outline-tree-row-height);\n}\n\n.outline-tree :deep(.ant-tree-indent-unit) {\n width: 16px;\n height: var(--outline-tree-row-height);\n}\n\n.outline-tree :deep(.ant-tree-switcher) {\n display: flex;\n align-items: center;\n justify-content: center;\n align-self: center;\n width: 16px;\n height: var(--outline-tree-row-height);\n line-height: 1;\n}\n\n.outline-tree :deep(.ant-tree-switcher-noop) {\n pointer-events: none;\n}\n\n.outline-tree :deep(.ant-tree-switcher-icon),\n.outline-tree :deep(.ant-tree-switcher-leaf-line) {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n line-height: 1;\n}\n\n.outline-tree :deep(.ant-tree-switcher-icon svg) {\n transform: none !important;\n}\n\n.outline-tree-switcher {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 10px;\n line-height: 1;\n color: var(--colorTextQuaternary);\n transition: transform 0.2s ease;\n}\n\n.outline-tree-switcher--expanded {\n transform: rotate(90deg);\n}\n\n.outline-tree :deep(.ant-tree-draggable-icon) {\n display: none;\n}\n\n.outline-tree :deep(.ant-tree-node-content-wrapper) {\n display: flex;\n align-items: center;\n flex: 1;\n min-width: 0;\n min-height: var(--outline-tree-row-height) !important;\n height: var(--outline-tree-row-height);\n padding: 0 4px;\n line-height: var(--outline-tree-row-height);\n border-radius: 4px;\n}\n\n.outline-tree :deep(.ant-tree-title) {\n display: flex;\n align-items: center;\n flex: 1;\n min-width: 0;\n height: var(--outline-tree-row-height);\n line-height: var(--outline-tree-row-height);\n}\n\n.outline-tree :deep(.ant-tree-node-content-wrapper:hover) {\n background-color: var(--colorFillSecondary);\n}\n\n.outline-tree :deep(.ant-tree-node-content-wrapper.ant-tree-node-selected) {\n color: var(--colorText);\n background-color: var(--colorFillSecondary);\n}\n\n.outline-tree.ant-tree-show-line :deep(.ant-tree-indent-unit::before),\n.outline-tree.ant-tree-show-line :deep(.ant-tree-switcher-leaf-line::before),\n.outline-tree.ant-tree-show-line :deep(.ant-tree-switcher-leaf-line::after) {\n border-color: color-mix(in srgb, var(--colorText) 12%, transparent);\n}\n\n.outline-tree.ant-tree-show-line :deep(.ant-tree-indent-unit::before),\n.outline-tree.ant-tree-show-line :deep(.ant-tree-switcher-leaf-line::before) {\n bottom: 0;\n}\n\n.outline-tree-node {\n height: var(--outline-tree-row-height);\n width: 100%;\n}\n\n.outline-tree-node-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 14px;\n height: var(--outline-tree-row-height);\n line-height: 1;\n}\n\n.outline-tree-node-icon :deep(svg),\n.outline-tree-node-icon :deep(img) {\n display: block;\n width: 14px;\n height: 14px;\n}\n\n.outline-tree-node-label {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: 12px;\n line-height: var(--outline-tree-row-height);\n height: var(--outline-tree-row-height);\n color: var(--colorText);\n}\n\n.outline-tree-node-actions {\n height: var(--outline-tree-row-height);\n}\n\n.outline-tree-action-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n cursor: pointer;\n border: none;\n background: transparent;\n padding: 0;\n font-size: 12px;\n line-height: 1;\n color: var(--colorTextQuaternary);\n transition: color 0.15s ease;\n}\n\n.outline-tree-action-btn:hover:not(:disabled) {\n color: var(--colorTextSecondary);\n}\n\n.outline-tree-action-btn--active {\n color: var(--colorTextSecondary);\n}\n\n.outline-tree-action-btn--danger:hover:not(:disabled) {\n color: var(--colorError);\n}\n\n.outline-tree-action-btn:disabled {\n cursor: not-allowed;\n opacity: 0;\n}\n\n.outline-tree-node:hover .outline-tree-action-btn:disabled,\n.outline-tree-node--selected .outline-tree-action-btn:disabled {\n opacity: 0.35;\n}\n\n.outline-rename-input :deep(.ant-input) {\n height: 22px;\n padding-inline: 6px;\n font-size: 12px;\n line-height: 22px;\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { PageData, PageDataItem, PageDataValueType } from '../../core/index.ts'\nimport { dedupePageData, formatDraftPageDataValue, getPageDataValueSummary, inferPageDataValueType, isPageDataNameUsed, isValidPageDataName, LIFECYCLE_KEY, parseDraftPageDataValue, PAGE_DATA_VALUE_TYPE_OPTIONS } from '../../runtime/runtime.ts'\nimport { CodeOutlined, CopyOutlined, DatabaseOutlined, DeleteOutlined, EditOutlined } from '@ant-design/icons-vue'\nimport message from 'ant-design-vue/es/message'\nimport { computed, inject, ref, toRaw, watch } from 'vue'\nimport { CodeEditor } from '../shared/code-editor.vue'\n\ndefineOptions({ name: 'PageDataEditor' })\n\ntype PageDataDraft = {\n name: string\n type: PageDataValueType\n valueDraft: string\n}\n\nfunction cloneDataDraft(item: PageDataItem): PageDataDraft {\n const type = inferPageDataValueType(item.value)\n return {\n name: item.name,\n type,\n valueDraft: formatDraftPageDataValue(type, item.value)\n }\n}\n\nfunction dataDraftToItem(key: number, draft: PageDataDraft): PageDataItem | null {\n const parsed = parseDraftPageDataValue(draft.type, draft.valueDraft)\n if (!parsed.ok) return null\n\n return {\n key,\n name: draft.name.trim(),\n value: parsed.value\n }\n}\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: PageData\n }>(),\n {\n modelValue: () => []\n }\n)\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: PageData]\n}>()\n\nconst lifecycleRuntime = inject(LIFECYCLE_KEY, null)\n\nconst dataList = computed({\n get: () => (Array.isArray(props.modelValue) ? props.modelValue : []),\n set: value => emit('update:modelValue', dedupePageData(value))\n})\n\nconst editorVisible = ref(false)\nconst editingKey = ref<number | null>(null)\nconst isCreating = ref(false)\nconst editingDraft = ref<PageDataDraft | null>(null)\n\nconst editorTitle = computed(() => {\n if (isCreating.value) return '添加数据字段'\n const draft = editingDraft.value\n return draft?.name.trim() ? `编辑字段:${draft.name.trim()}` : '编辑数据字段'\n})\n\nfunction removeItem(key: number) {\n dataList.value = dataList.value.filter(item => item.key !== key)\n}\n\nfunction addItem() {\n isCreating.value = true\n editingKey.value = null\n editingDraft.value = {\n name: '',\n type: 'string',\n valueDraft: ''\n }\n editorVisible.value = true\n}\n\nfunction openEditor(item: PageDataItem) {\n const current = dataList.value.find(entry => entry.key === item.key)\n if (!current) return\n\n isCreating.value = false\n editingKey.value = current.key\n editingDraft.value = cloneDataDraft(current)\n editorVisible.value = true\n}\n\nfunction validateDraft(draft: PageDataDraft, key: number | null) {\n const name = draft.name.trim()\n if (!name) {\n return '请填写字段名'\n }\n if (!isValidPageDataName(name)) {\n return '字段名格式无效'\n }\n if (isPageDataNameUsed(dataList.value, name, key ?? undefined)) {\n return '字段名已被使用'\n }\n\n const parsed = parseDraftPageDataValue(draft.type, draft.valueDraft)\n if (!parsed.ok) {\n return parsed.error\n }\n\n return null\n}\n\nfunction saveEditor(): PageDataItem | null {\n if (!editingDraft.value) return null\n\n const error = validateDraft(editingDraft.value, editingKey.value)\n if (error) return null\n\n if (isCreating.value) {\n const nextItem = dataDraftToItem(0, editingDraft.value)\n if (!nextItem) return null\n\n dataList.value = [...dataList.value, nextItem]\n closeEditor()\n return nextItem\n }\n\n const key = editingKey.value\n if (key === null) return null\n\n const nextItem = dataDraftToItem(key, editingDraft.value)\n if (!nextItem) return null\n\n dataList.value = dataList.value.map(item => (item.key === key ? nextItem : item))\n closeEditor()\n return nextItem\n}\n\nfunction closeEditor() {\n editorVisible.value = false\n editingKey.value = null\n isCreating.value = false\n editingDraft.value = null\n}\n\nfunction getDisplayName(item: PageDataItem) {\n const name = item.name.trim()\n return name || '未命名字段'\n}\n\nfunction onDraftTypeChange(type: PageDataValueType) {\n if (!editingDraft.value) return\n\n editingDraft.value.type = type\n if (type === 'null') {\n editingDraft.value.valueDraft = 'null'\n return\n }\n if (type === 'boolean') {\n editingDraft.value.valueDraft = 'false'\n return\n }\n if (type === 'number') {\n editingDraft.value.valueDraft = '0'\n return\n }\n if (type === 'array') {\n editingDraft.value.valueDraft = '[]'\n return\n }\n if (type === 'object') {\n editingDraft.value.valueDraft = '{}'\n return\n }\n editingDraft.value.valueDraft = ''\n}\n\nfunction formatRuntimeFieldJson(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2)\n } catch {\n return String(value)\n }\n}\n\nfunction getRuntimeFieldValue(name: string): unknown | undefined {\n const key = name.trim()\n if (!key) return undefined\n\n fieldRefreshKeys.value[key]\n runtimeVersion.value\n\n const runtime = lifecycleRuntime?.pageData\n if (!runtime) return undefined\n\n try {\n const record = toRaw(runtime) as Record<string, unknown>\n return Object.prototype.hasOwnProperty.call(record, key) ? record[key] : undefined\n } catch {\n return undefined\n }\n}\n\ntype DisplayRow = {\n id: string\n kind: 'field' | 'runtime'\n name: string\n typeLabel: string\n summary: string\n jsonText: string | null\n item?: PageDataItem\n}\n\nconst runtimeVersion = ref(0)\nconst fieldRefreshKeys = ref<Record<string, number>>({})\n\nconst editingNameInvalid = computed(() => {\n const name = editingDraft.value?.name.trim()\n if (!name) return false\n return !isValidPageDataName(name)\n})\n\nconst showScalarInput = computed(() => {\n const type = editingDraft.value?.type\n return type === 'string' || type === 'number'\n})\n\nconst showBooleanInput = computed(() => editingDraft.value?.type === 'boolean')\n\nconst runtimeRecord = computed<Record<string, unknown>>(() => {\n runtimeVersion.value\n const runtime = lifecycleRuntime?.pageData\n if (!runtime) return {}\n\n try {\n return { ...(toRaw(runtime) as Record<string, unknown>) }\n } catch {\n return {}\n }\n})\n\nconst displayRows = computed<DisplayRow[]>(() => {\n const rows: DisplayRow[] = []\n const coveredNames = new Set<string>()\n\n for (const item of dataList.value) {\n const name = item.name.trim()\n if (name) coveredNames.add(name)\n\n const runtimeValue = name ? getRuntimeFieldValue(name) : undefined\n const displayValue = runtimeValue !== undefined ? runtimeValue : item.value\n\n rows.push({\n id: `field-${item.key}`,\n kind: 'field',\n name: getDisplayName(item),\n typeLabel: inferPageDataValueType(displayValue),\n summary: getPageDataValueSummary(displayValue),\n jsonText: formatRuntimeFieldJson(displayValue),\n item\n })\n }\n\n for (const [name, value] of Object.entries(runtimeRecord.value)) {\n if (coveredNames.has(name)) continue\n\n rows.push({\n id: `runtime-${name}`,\n kind: 'runtime',\n name,\n typeLabel: inferPageDataValueType(value),\n summary: getPageDataValueSummary(value),\n jsonText: formatRuntimeFieldJson(value)\n })\n }\n\n return rows\n})\n\nfunction refreshFieldSnapshot(fieldName: string) {\n const name = fieldName.trim()\n if (!name) return\n\n fieldRefreshKeys.value = {\n ...fieldRefreshKeys.value,\n [name]: (fieldRefreshKeys.value[name] ?? 0) + 1\n }\n}\n\nfunction handleSnapshotOpen(fieldName: string, open: boolean) {\n if (!open) return\n refreshFieldSnapshot(fieldName)\n}\n\nfunction createSnapshotOpenHandler(fieldName: string) {\n return (open: boolean) => handleSnapshotOpen(fieldName, open)\n}\n\nasync function copySnapshotJson(text: string | null) {\n if (!text) return\n\n try {\n await navigator.clipboard.writeText(text)\n message.success('已复制')\n } catch {\n message.error('复制失败')\n }\n}\n\nwatch(\n () => lifecycleRuntime?.pageData,\n () => {\n runtimeVersion.value++\n },\n { deep: true }\n)\n\nfunction handleSaveEditor() {\n if (!editingDraft.value) return Promise.reject()\n\n const error = validateDraft(editingDraft.value, editingKey.value)\n if (error) {\n message.warning(error)\n return Promise.reject()\n }\n\n if (!saveEditor()) {\n message.warning('保存失败,请重试')\n return Promise.reject()\n }\n}\n\nfunction updateNumberDraft(value: number | null) {\n if (!editingDraft.value) return\n editingDraft.value.valueDraft = String(value ?? 0)\n}\n\nfunction updateBooleanDraft(checked: boolean | string | number) {\n if (!editingDraft.value) return\n editingDraft.value.valueDraft = checked === true || checked === 'true' ? 'true' : 'false'\n}\n\nfunction handleCancelEditor() {\n closeEditor()\n}\n</script>\n\n<template>\n <div class=\"flex flex-col gap-2 p-3\">\n <div v-for=\"row in displayRows\" :key=\"row.id\" class=\"flex items-center\" :class=\"{ 'opacity-70': row.kind === 'runtime' }\">\n <div class=\"min-w-0 flex-1\">\n <div class=\"flex flex-wrap items-center gap-1.5 text-sm leading-tight\">\n <span class=\"inline-flex shrink-0 items-center justify-center rounded-sm p-0.5 text-[10px] leading-none\" :class=\"row.kind === 'field' ? 'text-[var(--colorPrimary)] bg-[color-mix(in_srgb,var(--colorPrimary)_12%,transparent)]' : 'text-[var(--colorTextTertiary)] bg-[color-mix(in_srgb,var(--colorText)_8%,transparent)]'\">\n <DatabaseOutlined />\n </span>\n <span class=\"truncate font-mono\">{{ row.name }}</span>\n <a-tag :bordered=\"false\" class=\"mr-0 px-1 py-0 text-[10px] leading-4\">{{ row.typeLabel }}</a-tag>\n </div>\n <div class=\"truncate font-mono text-[11px] text-[var(--colorTextQuaternary)]\">{{ row.summary }}</div>\n </div>\n\n <div class=\"flex shrink-0 items-center\">\n <a-popover v-if=\"row.jsonText\" trigger=\"click\" @open-change=\"createSnapshotOpenHandler(row.name)\">\n <template #title>\n <div class=\"flex items-center justify-between gap-3\">\n <span class=\"min-w-0 truncate font-mono\">{{ row.name }}</span>\n <a-button type=\"link\" size=\"small\" class=\"h-auto shrink-0 px-0 text-xs\" @click.stop=\"copySnapshotJson(row.jsonText)\">\n <CopyOutlined />\n 复制\n </a-button>\n </div>\n </template>\n <template #content>\n <pre class=\"m-0 max-h-60 max-w-80 overflow-auto whitespace-pre-wrap break-all font-mono text-[11px] leading-relaxed\">{{ row.jsonText }}</pre>\n </template>\n <a-tooltip title=\"快照\">\n <a-button type=\"text\" size=\"small\" class=\"shrink-0 px-1\">\n <CodeOutlined />\n </a-button>\n </a-tooltip>\n </a-popover>\n\n <template v-if=\"row.kind === 'field' && row.item\">\n <a-tooltip title=\"编辑\">\n <a-button type=\"text\" size=\"small\" @click.stop=\"openEditor(row.item)\">\n <EditOutlined />\n </a-button>\n </a-tooltip>\n\n <a-tooltip title=\"删除\">\n <a-button type=\"text\" size=\"small\" danger @click.stop=\"removeItem(row.item.key)\">\n <DeleteOutlined />\n </a-button>\n </a-tooltip>\n </template>\n </div>\n </div>\n\n <a-empty v-if=\"displayRows.length === 0\" description=\"暂无数据字段\" />\n <a-button type=\"dashed\" size=\"small\" block @click=\"addItem\">添加字段</a-button>\n </div>\n\n <a-modal v-model:open=\"editorVisible\" :title=\"editorTitle\" ok-text=\"确定\" cancel-text=\"取消\" width=\"520px\" destroy-on-close @ok=\"handleSaveEditor\" @cancel=\"handleCancelEditor\">\n <template v-if=\"editingDraft\">\n <a-form layout=\"vertical\">\n <a-form-item label=\"字段名\" :validate-status=\"editingNameInvalid ? 'error' : undefined\">\n <a-input v-model:value=\"editingDraft.name\" placeholder=\"如:count\" />\n </a-form-item>\n\n <a-form-item label=\"类型\">\n <a-select v-model:value=\"editingDraft.type\" :options=\"PAGE_DATA_VALUE_TYPE_OPTIONS\" @update:value=\"onDraftTypeChange\" />\n </a-form-item>\n\n <a-form-item v-if=\"editingDraft.type === 'null'\" label=\"值\">\n <a-input value=\"null\" disabled />\n </a-form-item>\n\n <a-form-item v-else-if=\"showScalarInput\" label=\"值\">\n <a-input-number v-if=\"editingDraft.type === 'number'\" :value=\"Number(editingDraft.valueDraft)\" @update:value=\"updateNumberDraft\" />\n <a-input v-else v-model:value=\"editingDraft.valueDraft\" placeholder=\"字符串值\" />\n </a-form-item>\n\n <a-form-item v-else-if=\"showBooleanInput\" label=\"值\">\n <a-switch :checked=\"editingDraft.valueDraft === 'true'\" checked-children=\"true\" un-checked-children=\"false\" @change=\"updateBooleanDraft\" />\n </a-form-item>\n\n <a-form-item v-else label=\"值(JSON)\">\n <CodeEditor v-model=\"editingDraft.valueDraft\" language=\"json\" :placeholder=\"editingDraft.type === 'array' ? '[]' : '{}'\" :height=\"180\" />\n </a-form-item>\n </a-form>\n </template>\n </a-modal>\n</template>\n","export type DataSourceUsagePreset = {\n key: string\n label: string\n hint: string\n example: string\n paramHint?: string\n}\n\nexport const DATA_SOURCE_USAGE_PRESETS: DataSourceUsagePreset[] = [\n {\n key: 'pageData',\n label: '页面数据字段',\n hint: '在「数据」区定义静态字段,运行时合并为 context.data;字段名须为合法标识符(如 count、pageIndex)',\n example: `// 定义字段:count = 0,pageIndex = 1\n// 在函数 / 生命周期中读写(须为 () => { ... } 写法):\n() => {\n context.data.count = (context.data.count ?? 0) + 1\n context.data.pageIndex = 2\n}`,\n paramHint: '列表中的「快照」展示当前运行时值;函数写入后也会出现在此处'\n },\n {\n key: 'widgetBinding',\n label: '组件属性绑定',\n hint: '在右侧属性面板中,可将组件选项绑定到页面数据字段,或调用页面自定义方法',\n example: `// 文本内容绑定 count\n{{ count }}\n\n// 嵌套字段\n{{ productList.title }}\n\n// 调用页面方法(参数可为 data / item 字段或字面量)\n{{ fmDate(time) }}\n{{ formatPrice(item.price) }}`,\n paramHint: '语法:{{ 字段名 }} 或 {{ 方法名(参数) }};列表项内可用 item.xxx、index;方法须同步返回值'\n },\n {\n key: 'fetchMethod',\n label: '在函数中请求接口',\n hint: 'HTTP 请求在「函数」面板以 async 方法实现,结果写入 context.data',\n example: `// loadProductList(pageIndex?, keyword?)\nasync (pageIndex, keyword) => {\n context.data.loading = true\n try {\n const qs = new URLSearchParams({\n pageIndex: String(pageIndex ?? context.data.pageIndex ?? 1),\n keyword: keyword ?? context.data.keyword ?? ''\n })\n const res = await fetch('/api/products?' + qs)\n const result = await res.json()\n context.data.productList = result.data?.items ?? []\n } finally {\n context.data.loading = false\n }\n}`,\n paramHint: '在生命周期 mounted 或事件中:await context.methods.loadProductList()'\n }\n]\n","<script setup lang=\"ts\">\ndefineOptions({ name: 'LowcodeDesignerDataSourcePanel' })\n\nimport PageDataEditor from './data-editor.vue'\nimport { DATA_SOURCE_USAGE_PRESETS } from './datasource-help.ts'\nimport type { Page, PageData } from '../../core/index.ts'\nimport { InfoCircleOutlined } from '@ant-design/icons-vue'\nimport { computed } from 'vue'\nimport { useInjectDesigner } from '../material-registry.ts'\n\nconst designer = useInjectDesigner()\n\nconst page = computed(() => designer?.page as Page | undefined)\n\nconst pageData = computed<PageData>({\n get: () => page.value?.data ?? [],\n set: value => {\n if (page.value) page.value.data = value\n }\n})\n</script>\n\n<template>\n <div class=\"min-h-0 flex-1 overflow-y-auto scrollbar\">\n <PageDataEditor v-model=\"pageData\" />\n\n <section class=\"mt-3 p-3 border-t border-[color-mix(in_srgb,var(--colorText)_8%,transparent)] pt-3\">\n <div class=\"mb-2.5 flex items-center gap-1.5\">\n <InfoCircleOutlined class=\"text-xs text-[var(--colorTextQuaternary)]\" />\n <span class=\"text-xs font-medium text-[var(--colorTextSecondary)]\">帮助</span>\n </div>\n <div class=\"flex flex-col gap-2.5\">\n <div v-for=\"preset in DATA_SOURCE_USAGE_PRESETS\" :key=\"preset.key\" class=\"rounded-sm border border-[color-mix(in_srgb,var(--colorText)_8%,transparent)] p-1\">\n <div class=\"text-xs font-medium leading-tight\">{{ preset.label }}</div>\n <div class=\"mt-0.5 text-[11px] leading-snug text-[var(--colorTextQuaternary)]\">{{ preset.hint }}</div>\n <pre class=\"mt-1.5 overflow-x-auto rounded-sm bg-[color-mix(in_srgb,var(--colorText)_4%,var(--colorBgContainer))] px-2 py-1.5 font-mono text-[10px] leading-[1.45] text-[var(--colorTextSecondary)] scrollbar\">{{ preset.example }}</pre>\n <div v-if=\"preset.paramHint\" class=\"mt-1 text-[10px] leading-snug text-[var(--colorTextQuaternary)]\">{{ preset.paramHint }}</div>\n </div>\n <div class=\"text-[11px] leading-snug text-[var(--colorTextQuaternary)]\">\n 页面数据统一挂载在 <span class=\"font-mono\">context.data</span>;HTTP 请求请在「函数」面板编写 async 方法,通过 <span class=\"font-mono\">context.methods.xxx(...)</span> 或生命周期调用;组件属性支持 <span class=\"font-mono\" v-pre>{{ 字段名 }}</span> 或 <span class=\"font-mono\" v-pre>{{ 方法名(参数) }}</span> 绑定。\n </div>\n </div>\n </section>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { ApiMethodParamEntry } from './page-method-api.ts'\nimport { createApiMethodParamEntry } from './page-method-api.ts'\nimport { DeleteOutlined, PlusOutlined } from '@ant-design/icons-vue'\n\ndefineOptions({ name: 'ApiMethodParamsList' })\n\ndefineProps<{\n invalid?: boolean\n}>()\n\nconst entries = defineModel<ApiMethodParamEntry[]>('entries', { required: true, default: () => [] })\n\nfunction addEntry() {\n entries.value = [...(entries.value ?? []), createApiMethodParamEntry()]\n}\n\nfunction removeEntry(id: string) {\n entries.value = (entries.value ?? []).filter(item => item.id !== id)\n}\n</script>\n\n<template>\n <a-form-item class=\"mb-2\" :validate-status=\"invalid ? 'error' : undefined\">\n <template #label>\n <span>函数参数</span>\n </template>\n\n <div class=\"flex flex-col gap-1.5\">\n <div v-if=\"!(entries?.length)\" class=\"text-[11px] text-[var(--colorTextQuaternary)]\">暂无参数,调用时可不传参</div>\n\n <div v-for=\"entry in entries ?? []\" :key=\"entry.id\" class=\"flex items-center gap-1.5\">\n <a-input v-model:value=\"entry.name\" class=\"min-w-0 flex-1\" placeholder=\"参数名,如 pageIndex\" allow-clear />\n <a-tooltip title=\"删除\">\n <a-button type=\"text\" size=\"small\" danger class=\"shrink-0 px-1\" @click=\"removeEntry(entry.id)\">\n <DeleteOutlined />\n </a-button>\n </a-tooltip>\n </div>\n\n <a-button type=\"dashed\" size=\"small\" block @click=\"addEntry\">\n <template #icon><PlusOutlined /></template>\n 添加参数\n </a-button>\n\n <div class=\"text-[11px] leading-snug text-[var(--colorTextQuaternary)]\">\n 对应调用时的形参,如 <span class=\"font-mono\">context.methods.loadList(pageIndex, keyword)</span>。\n </div>\n </div>\n </a-form-item>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n dataFields?: string[]\n methodParams?: string[]\n /** true: 写入 {{name}};false: 写入裸字段名(用于 target) */\n bindAsExpression?: boolean\n }>(),\n {\n dataFields: () => [],\n methodParams: () => [],\n bindAsExpression: false\n }\n)\n\nconst emit = defineEmits<{\n select: [value: string]\n}>()\n\nconst hasOptions = computed(() => props.methodParams.length > 0 || props.dataFields.length > 0)\n\nfunction bind(name: string) {\n emit('select', props.bindAsExpression ? `{{${name}}}` : name)\n}\n</script>\n\n<template>\n <a-dropdown v-if=\"hasOptions\" :trigger=\"['click']\">\n <a-tooltip title=\"绑定入参或页面数据\">\n <a-button type=\"text\" size=\"small\" class=\"shrink-0 px-1\">\n <span class=\"inline-flex items-center justify-center rounded-sm px-0.5 text-[9px] font-serif italic leading-none text-[var(--colorPrimary)] bg-[color-mix(in_srgb,var(--colorPrimary)_12%,transparent)]\">fx</span>\n </a-button>\n </a-tooltip>\n <template #overlay>\n <a-menu class=\"max-h-60 overflow-y-auto\">\n <a-menu-item-group v-if=\"methodParams.length\" title=\"函数入参\">\n <a-menu-item v-for=\"param in methodParams\" :key=\"`param-${param}`\" @click=\"bind(param)\">\n <span class=\"font-mono text-xs\">{{ param }}</span>\n </a-menu-item>\n </a-menu-item-group>\n <a-menu-item-group v-if=\"dataFields.length\" title=\"页面数据\">\n <a-menu-item v-for=\"field in dataFields\" :key=\"`field-${field}`\" @click=\"bind(field)\">\n <span class=\"font-mono text-xs\">{{ field }}</span>\n </a-menu-item>\n </a-menu-item-group>\n </a-menu>\n </template>\n </a-dropdown>\n</template>\n","<script setup lang=\"ts\">\nimport type { ApiParamEntry } from '../../runtime/runtime.ts'\nimport { createApiParamEntry } from '../../runtime/runtime.ts'\nimport { DeleteOutlined, PlusOutlined } from '@ant-design/icons-vue'\nimport ApiParamBindButton from './api-param-bind-button.vue'\n\ndefineOptions({ name: 'ApiParamListEditor' })\n\nwithDefaults(\n defineProps<{\n label: string\n dataFields?: string[]\n methodParams?: string[]\n }>(),\n {\n dataFields: () => [],\n methodParams: () => []\n }\n)\n\nconst entries = defineModel<ApiParamEntry[]>('entries', { required: true, default: () => [] })\n\nfunction addEntry() {\n entries.value = [...(entries.value ?? []), createApiParamEntry()]\n}\n\nfunction removeEntry(id: string) {\n entries.value = entries.value.filter(item => item.id !== id)\n}\n</script>\n\n<template>\n <a-form-item class=\"mb-2\">\n <template #label>\n <span>{{ label }}</span>\n </template>\n\n <div class=\"flex flex-col gap-1.5\">\n <div v-if=\"!(entries?.length)\" class=\"text-[11px] text-[var(--colorTextQuaternary)]\">暂无参数</div>\n\n <div v-for=\"entry in entries ?? []\" :key=\"entry.id\" class=\"flex items-center gap-1.5\">\n <a-input v-model:value=\"entry.key\" class=\"min-w-0 flex-[2]\" placeholder=\"Key\" allow-clear />\n <a-input v-model:value=\"entry.value\" class=\"min-w-0 flex-[3]\" placeholder=\"值或 {{入参/字段}}\" allow-clear />\n <ApiParamBindButton :data-fields=\"dataFields\" :method-params=\"methodParams\" bind-as-expression @select=\"value => (entry.value = value)\" />\n <a-tooltip title=\"删除\">\n <a-button type=\"text\" size=\"small\" danger class=\"shrink-0 px-1\" @click=\"removeEntry(entry.id)\">\n <DeleteOutlined />\n </a-button>\n </a-tooltip>\n </div>\n\n <a-button type=\"dashed\" size=\"small\" block @click=\"addEntry\">\n <template #icon><PlusOutlined /></template>\n 添加参数\n </a-button>\n\n <div class=\"text-[11px] leading-snug text-[var(--colorTextQuaternary)]\">\n 值支持固定输入,或通过 <span class=\"font-mono\">fx</span> 绑定函数入参 / 页面数据。\n </div>\n </div>\n </a-form-item>\n</template>\n","<script setup lang=\"ts\">\nimport type { PageMethodApiResultRule } from '../../core/index.ts'\nimport { createDefaultApiResultRule } from './page-method-api.ts'\nimport { DeleteOutlined, PlusOutlined } from '@ant-design/icons-vue'\nimport ApiParamBindButton from './api-param-bind-button.vue'\n\ndefineOptions({ name: 'ApiResultRulesList' })\n\ndefineProps<{\n dataFields?: string[]\n methodParams?: string[]\n targetInvalid?: boolean\n}>()\n\nconst rules = defineModel<PageMethodApiResultRule[]>('rules', { required: true, default: () => [] })\n\nfunction addRule() {\n rules.value = [...(rules.value ?? []), createDefaultApiResultRule()]\n}\n\nfunction removeRule(index: number) {\n rules.value = (rules.value ?? []).filter((_, i) => i !== index)\n}\n</script>\n\n<template>\n <a-form-item class=\"mb-2\" :validate-status=\"targetInvalid ? 'error' : undefined\">\n <template #label>\n <span>结果处理(可选)</span>\n </template>\n\n <div class=\"flex flex-col gap-2\">\n <div v-if=\"!(rules?.length)\" class=\"text-[11px] text-[var(--colorTextQuaternary)]\">未配置:请求成功但不写入页面数据</div>\n\n <div v-for=\"(rule, index) in rules ?? []\" :key=\"index\" class=\"rounded-sm border border-[color-mix(in_srgb,var(--colorText)_10%,transparent)] p-2\">\n <div class=\"mb-1.5 flex items-center justify-between gap-2\">\n <span class=\"text-[11px] font-medium text-[var(--colorTextSecondary)]\">映射 {{ index + 1 }}</span>\n <a-tooltip title=\"删除\">\n <a-button type=\"text\" size=\"small\" danger class=\"px-1\" @click=\"removeRule(index)\">\n <DeleteOutlined />\n </a-button>\n </a-tooltip>\n </div>\n <div class=\"grid grid-cols-1 gap-1.5\">\n <div class=\"flex items-center gap-1.5\">\n <a-input v-model:value=\"rule.target\" class=\"min-w-0 flex-1\" placeholder=\"目标字段,如 productList\" allow-clear />\n <ApiParamBindButton :data-fields=\"dataFields\" :method-params=\"methodParams\" @select=\"value => (rule.target = value)\" />\n </div>\n <a-input v-model:value=\"rule.sourcePath\" placeholder=\"来源路径,如 data.items(留空=整段响应)\" allow-clear />\n <div class=\"flex items-center gap-1.5\">\n <a-input v-model:value=\"rule.fallback\" class=\"min-w-0 flex-1\" placeholder=\"默认值,可选 {{字段}}\" allow-clear />\n <ApiParamBindButton :data-fields=\"dataFields\" :method-params=\"methodParams\" bind-as-expression @select=\"value => (rule.fallback = value)\" />\n </div>\n </div>\n </div>\n\n <a-button type=\"dashed\" size=\"small\" block @click=\"addRule\">\n <template #icon><PlusOutlined /></template>\n 添加映射\n </a-button>\n\n <div class=\"text-[11px] leading-snug text-[var(--colorTextQuaternary)]\">\n 将响应写入 <span class=\"font-mono\">context.data</span>;来源路径相对响应根对象;默认值支持 <code v-pre>{{ 入参/字段 }}</code>。\n </div>\n </div>\n </a-form-item>\n</template>\n","<script setup lang=\"ts\">\nimport type { PageData, PageMethodApiConfig } from '../../core/index.ts'\nimport ApiMethodParamsList from './api-method-params-list.vue'\nimport ApiParamListEditor from './api-param-list.vue'\nimport ApiResultRulesList from './api-result-rules-list.vue'\nimport {\n clonePageMethodApiConfig,\n parsePageMethodApiParamEntries,\n parsePageMethodApiParamNames,\n serializePageMethodApiParamEntries\n} from './page-method-api.ts'\nimport { parseApiParamEntries, serializeApiParamEntries } from '../../runtime/runtime.ts'\nimport type { PageMethodApiResultRule } from '../../core/index.ts'\nimport { computed, ref, watch } from 'vue'\n\ndefineOptions({ name: 'MethodApiConfigForm' })\n\nconst props = defineProps<{\n modelValue: PageMethodApiConfig\n pageData?: PageData\n urlInvalid?: boolean\n resultInvalid?: boolean\n paramsInvalid?: boolean\n}>()\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: PageMethodApiConfig]\n}>()\n\nconst draft = ref(clonePageMethodApiConfig(props.modelValue))\n\nconst resultRules = computed<PageMethodApiResultRule[]>({\n get() {\n if (!draft.value.result) draft.value.result = []\n return draft.value.result\n },\n set(value) {\n draft.value.result = value\n }\n})\nconst queryEntries = ref(parseApiParamEntries(props.modelValue.request.query))\nconst headersEntries = ref(parseApiParamEntries(props.modelValue.request.headers))\nconst bodyEntries = ref(parseApiParamEntries(props.modelValue.request.body))\nconst paramEntries = ref(parsePageMethodApiParamEntries(props.modelValue.params))\n\nfunction syncParamEntriesToDraft() {\n draft.value.params = serializePageMethodApiParamEntries(paramEntries.value)\n}\n\nfunction commitDraft() {\n emit('update:modelValue', clonePageMethodApiConfig(draft.value))\n}\n\nfunction syncRequestEntriesToDraft() {\n draft.value.request.query = serializeApiParamEntries(queryEntries.value)\n draft.value.request.headers = serializeApiParamEntries(headersEntries.value)\n draft.value.request.body = serializeApiParamEntries(bodyEntries.value)\n}\n\nwatch([queryEntries, headersEntries, bodyEntries], () => {\n syncRequestEntriesToDraft()\n}, { deep: true })\n\nwatch(paramEntries, () => {\n syncParamEntriesToDraft()\n}, { deep: true })\n\nwatch(\n draft,\n () => {\n commitDraft()\n },\n { deep: true }\n)\n\nconst methodOptions = [\n { value: 'GET', label: 'GET' },\n { value: 'POST', label: 'POST' },\n { value: 'PUT', label: 'PUT' },\n { value: 'DELETE', label: 'DELETE' }\n]\n\nconst methodParamOptions = computed(() => parsePageMethodApiParamNames(draft.value.params))\n\nconst dataFieldOptions = computed(() => {\n const paramSet = new Set(methodParamOptions.value)\n const names = new Set<string>()\n for (const item of props.pageData ?? []) {\n const name = item.name.trim()\n if (name && !paramSet.has(name)) names.add(name)\n }\n const loadingField = draft.value.loadingField?.trim()\n if (loadingField && !paramSet.has(loadingField)) names.add(loadingField)\n for (const rule of draft.value.result ?? []) {\n const target = rule.target.trim()\n if (target && !paramSet.has(target)) names.add(target)\n }\n return [...names].sort()\n})\n</script>\n\n<template>\n <a-form layout=\"vertical\" class=\"mb-1\">\n <ApiMethodParamsList v-model:entries=\"paramEntries\" :invalid=\"paramsInvalid\" />\n\n <a-form-item label=\"Loading 字段(可选)\" class=\"mb-2\">\n <a-input v-model:value=\"draft.loadingField\" placeholder=\"如:loading\" allow-clear />\n </a-form-item>\n\n <div class=\"grid grid-cols-[88px_1fr] gap-x-3\">\n <a-form-item label=\"Method\" class=\"mb-2\">\n <a-select v-model:value=\"draft.request.method\" :options=\"methodOptions\" />\n </a-form-item>\n <a-form-item label=\"URL\" class=\"mb-2\" :validate-status=\"urlInvalid ? 'error' : undefined\">\n <a-input v-model:value=\"draft.request.url\" placeholder=\"如:https://example.com/api/products/list\" />\n </a-form-item>\n </div>\n\n <ApiParamListEditor v-model:entries=\"queryEntries\" label=\"Query\" :data-fields=\"dataFieldOptions\" :method-params=\"methodParamOptions\" />\n <ApiParamListEditor v-model:entries=\"headersEntries\" label=\"Headers\" :data-fields=\"dataFieldOptions\" :method-params=\"methodParamOptions\" />\n <ApiParamListEditor v-if=\"(draft.request.method ?? 'GET') !== 'GET'\" v-model:entries=\"bodyEntries\" label=\"Body\" :data-fields=\"dataFieldOptions\" :method-params=\"methodParamOptions\" />\n\n <ApiResultRulesList\n v-model:rules=\"resultRules\"\n :data-fields=\"dataFieldOptions\"\n :method-params=\"methodParamOptions\"\n :target-invalid=\"resultInvalid\"\n />\n </a-form>\n</template>\n","import type { Page, PageMethodApiConfig, PageMethodItem, PageMethods } from '../../core/index.ts'\nimport {\n clonePageMethodApiConfig,\n createDefaultPageMethodApiConfig,\n ensurePageDataFieldsFromApiConfig,\n generatePageMethodHandlerFromApiConfig,\n isApiMethodItem,\n isValidPageMethodApiParamList,\n parsePageMethodSimulateArgValue,\n resolvePageMethodSimulateParamNames,\n validatePageMethodApiConfig\n} from './page-method-api.ts'\nimport {\n ensurePageData,\n ensurePageScript,\n formatPageMethodSignature,\n isPageMethodNameUsed,\n isValidPageMethodApiTarget,\n isValidPageMethodApiUrl,\n isValidPageMethodHandler,\n isValidPageMethodName,\n LIFECYCLE_KEY,\n commitPageMethods\n} from '../../runtime/runtime.ts'\nimport message from 'ant-design-vue/es/message'\nimport { computed, inject, ref, type WritableComputedRef } from 'vue'\nimport { useInjectDesigner } from '../material-registry.ts'\n\nexport type MethodUsagePreset = {\n key: string\n label: string\n hint: string\n example: string\n placeholder?: string\n paramHint?: string\n}\n\nexport const METHOD_USAGE_PRESETS: MethodUsagePreset[] = [\n {\n key: 'updateData',\n label: '读写页面数据',\n hint: 'context.data 与「页面数据」面板字段同一引用,修改后绑定该数据的组件会自动更新',\n example: `() => {\n context.data.count = (context.data.count ?? 0) + 1\n}`,\n placeholder: `() => {\n context.data.count = (context.data.count ?? 0) + 1\n}`,\n paramHint: '无参时可写 () => { ... };页面环境通过闭包 context 访问'\n },\n {\n key: 'fetchData',\n label: '请求接口(async 函数)',\n hint: 'HTTP 请求在 async 函数中通过 fetch 实现,结果写入 context.data',\n example: `async (pageIndex, keyword) => {\n context.data.loading = true\n try {\n const qs = new URLSearchParams({\n pageIndex: String(pageIndex ?? context.data.pageIndex ?? 1),\n keyword: keyword ?? context.data.keyword ?? ''\n })\n const res = await fetch('/api/products?' + qs)\n const result = await res.json()\n context.data.productList = result.data?.items ?? []\n } finally {\n context.data.loading = false\n }\n}`,\n placeholder: `async () => {\n const res = await fetch('/api/products')\n context.data.productList = (await res.json()).data?.items ?? []\n}`,\n paramHint: '在生命周期或事件中:await context.methods.loadProductList(...)'\n },\n {\n key: 'widgetBinding',\n label: '在组件属性中调用',\n hint: '组件属性 / 接口参数绑定中可写 {{ 函数名(参数) }};参数支持 data / item 字段、字面量或嵌套函数调用',\n example: `// 组件文本属性示例\n{{ fmDate(time) }}\n{{ formatPrice(item.price) }}\n\n// 函数体示例(须同步 return 结果;可选参数与形参一一对应)\n(url, w, h) => {\n if (!url) return ''\n const width = w ?? context.data.defaultImgW ?? 200\n const height = h ?? context.data.defaultImgH ?? width\n return String(url)\n}`,\n paramHint: '绑定表达式中不支持 async 返回值;形参仅对应 {{ }} 传入的参数,context 由运行时注入;列表项内可用 item.xxx、index'\n },\n {\n key: 'callMethod',\n label: '调用其他函数',\n hint: '在函数内组合调用同页其它自定义函数,便于拆分复用逻辑',\n example: `async () => {\n context.methods.resetFilters()\n await context.methods.loadProductList()\n}`,\n paramHint: '可用:context.methods.methodName(...args)'\n },\n {\n key: 'widgetEvent',\n label: '响应组件事件',\n hint: '在组件「事件」面板编写 handler,点击等交互会触发',\n example: `(event, widgetCtx) => {\n context.data.lastClickedId = widgetCtx.widget.id\n}`,\n paramHint: '形参 event、widgetCtx 由事件传入;context 由闭包注入'\n },\n {\n key: 'async',\n label: '异步 / await',\n hint: '需要等待接口返回时使用 async 写法;函数体以 async 开头同样支持',\n example: `async () => {\n context.data.submitting = true\n try {\n await context.methods.submitOrder()\n context.methods.showSuccessToast()\n } finally {\n context.data.submitting = false\n }\n}`,\n paramHint: '须写 async () => { ... } 或 (args) => { await ... } 形式'\n }\n]\n\nexport const DEFAULT_METHOD_PLACEHOLDER = METHOD_USAGE_PRESETS[0]?.placeholder ?? `() => {\n context.data.count += 1\n}`\n\nexport type PageMethodDraftKind = 'function' | 'api'\n\nexport type PageMethodDraft = {\n name: string\n handler: string\n kind: PageMethodDraftKind\n api: PageMethodApiConfig\n}\n\nexport type PageMethodSimulateArgsDraft = {\n item: PageMethodItem\n handlerSource?: string\n methodName: string\n paramNames: string[]\n values: Record<string, string>\n}\n\nfunction cloneMethodDraft(item: PageMethodItem): PageMethodDraft {\n const kind: PageMethodDraftKind = isApiMethodItem(item) ? 'api' : 'function'\n return {\n name: item.name,\n handler: item.handler,\n kind,\n api: clonePageMethodApiConfig(item.meta?.api)\n }\n}\n\nfunction createEmptyMethodDraft(kind: PageMethodDraftKind): PageMethodDraft {\n return {\n name: '',\n handler: '',\n kind,\n api: createDefaultPageMethodApiConfig()\n }\n}\n\nfunction resolveGeneratedHandler(api: PageMethodApiConfig): string {\n return generatePageMethodHandlerFromApiConfig(api)\n}\n\nfunction methodDraftToItem(key: number, draft: PageMethodDraft): PageMethodItem {\n if (draft.kind === 'api') {\n return {\n key,\n name: draft.name,\n handler: resolveGeneratedHandler(draft.api),\n meta: {\n template: 'api',\n api: clonePageMethodApiConfig(draft.api)\n }\n }\n }\n\n return {\n key,\n name: draft.name,\n handler: draft.handler\n }\n}\n\nexport type SavePageMethodEditorResult = {\n item: PageMethodItem\n addedPageDataFields: string[]\n}\n\nexport function usePageMethodsEditor(\n methodList: WritableComputedRef<PageMethods>,\n options?: {\n selectedMethod?: WritableComputedRef<string>\n onSaved?: (item: PageMethodItem | null) => void\n onRemoved?: (item: PageMethodItem) => void\n }\n) {\n const designer = useInjectDesigner()\n const lifecycleRuntime = inject(LIFECYCLE_KEY, null)\n\n const editorVisible = ref(false)\n const editingKey = ref<number | null>(null)\n const isCreating = ref(false)\n const editingDraft = ref<PageMethodDraft | null>(null)\n const simulateArgsVisible = ref(false)\n const simulateArgsDraft = ref<PageMethodSimulateArgsDraft | null>(null)\n\n const editorTitle = computed(() => {\n const draft = editingDraft.value\n const name = draft?.name.trim()\n if (isCreating.value) {\n return draft?.kind === 'api' ? '添加接口' : '添加函数'\n }\n if (draft?.kind === 'api') {\n return name ? `编辑接口:${name}()` : '编辑接口'\n }\n return name ? `编辑函数:${name}()` : '编辑函数'\n })\n\n function hasHandler(handler: string) {\n return typeof handler === 'string' && handler.trim().length > 0\n }\n\n function removeItem(key: number) {\n const removed = methodList.value.find(item => item.key === key)\n methodList.value = methodList.value.filter(item => item.key !== key)\n return removed ?? null\n }\n\n function openEditor(kind: PageMethodDraftKind) {\n isCreating.value = true\n editingKey.value = null\n editingDraft.value = createEmptyMethodDraft(kind)\n editorVisible.value = true\n }\n\n function addFunction() {\n openEditor('function')\n }\n\n function addApi() {\n openEditor('api')\n }\n\n function editItem(item: PageMethodItem) {\n const current = methodList.value.find(entry => entry.key === item.key)\n if (!current) return\n\n isCreating.value = false\n editingKey.value = current.key\n editingDraft.value = cloneMethodDraft(current)\n editorVisible.value = true\n }\n\n function resolveDraftHandler(draft: PageMethodDraft): string {\n if (draft.kind === 'api') {\n return resolveGeneratedHandler(draft.api)\n }\n return draft.handler\n }\n\n function validateDraft(draft: PageMethodDraft, key: number | null) {\n const name = draft.name.trim()\n if (!name) return draft.kind === 'api' ? '请填写接口名' : '请填写函数名'\n if (!isValidPageMethodName(name)) {\n return draft.kind === 'api' ? '接口名格式无效' : '函数名格式无效'\n }\n if (isPageMethodNameUsed(methodList.value, name, key ?? undefined)) {\n return draft.kind === 'api' ? '接口名已被使用' : '函数名已被使用'\n }\n\n if (draft.kind === 'api') {\n return validatePageMethodApiConfig(draft.api, isValidPageMethodApiUrl, isValidPageMethodApiTarget)\n }\n\n const handler = draft.handler.trim()\n if (!handler) return '请编写函数体'\n if (!isValidPageMethodHandler(handler)) {\n return '函数须为带 {} 的完整函数写法,如 () => { ... } 或 (url, w) => { return ... }'\n }\n return null\n }\n\n function syncPageDataFromApiConfig(api: PageMethodApiConfig): string[] {\n const page = designer?.page as Page | undefined\n if (!page) return []\n\n const current = page.data ?? []\n const { pageData: next, added } = ensurePageDataFieldsFromApiConfig(current, api, isValidPageMethodApiTarget)\n if (!added.length) return []\n\n page.data = ensurePageData(next)\n return added\n }\n\n function saveEditor(): SavePageMethodEditorResult | null {\n if (!editingDraft.value) return null\n\n const error = validateDraft(editingDraft.value, editingKey.value)\n if (error) return null\n\n const addedPageDataFields =\n editingDraft.value.kind === 'api' ? syncPageDataFromApiConfig(editingDraft.value.api) : []\n\n if (isCreating.value) {\n const added = methodDraftToItem(0, editingDraft.value)\n methodList.value = commitPageMethods([...methodList.value, added])\n closeEditor()\n return { item: added, addedPageDataFields }\n }\n\n const key = editingKey.value\n if (key === null) return null\n\n const nextItem = methodDraftToItem(key, editingDraft.value)\n const matched = methodList.value.some(item => item.key === key)\n if (!matched) return null\n\n methodList.value = commitPageMethods(methodList.value.map(item => (item.key === key ? nextItem : item)))\n closeEditor()\n return { item: nextItem, addedPageDataFields }\n }\n\n function closeEditor() {\n editorVisible.value = false\n editingKey.value = null\n isCreating.value = false\n editingDraft.value = null\n }\n\n function getDisplayName(item: PageMethodItem) {\n const name = item.name.trim()\n if (!name) return isApiMethodItem(item) ? '未命名接口' : '未命名函数'\n return formatPageMethodSignature(name, item.handler)\n }\n\n function isSelectable(item: PageMethodItem) {\n const name = item.name.trim()\n return Boolean(name && isValidPageMethodName(name))\n }\n\n function buildDraftItem(): PageMethodItem | null {\n if (!editingDraft.value) return null\n if (isCreating.value) {\n return methodDraftToItem(0, editingDraft.value)\n }\n if (editingKey.value === null) return null\n return methodDraftToItem(editingKey.value, editingDraft.value)\n }\n\n const selectedMethodKeys = computed(() => {\n const selected = options?.selectedMethod?.value ?? ''\n return selected ? [selected] : []\n })\n\n const editingNameInvalid = computed(() => {\n const name = editingDraft.value?.name.trim()\n if (!name) return false\n return !isValidPageMethodName(name)\n })\n\n const editingHandlerInvalid = computed(() => {\n if (editingDraft.value?.kind === 'api') return false\n const handler = editingDraft.value?.handler.trim()\n if (!handler) return false\n return !isValidPageMethodHandler(handler)\n })\n\n const editingApiUrlInvalid = computed(() => {\n if (editingDraft.value?.kind !== 'api') return false\n const url = editingDraft.value.api.request.url.trim()\n if (!url) return false\n return !isValidPageMethodApiUrl(url)\n })\n\n const editingApiResultInvalid = computed(() => {\n if (editingDraft.value?.kind !== 'api') return false\n for (const rule of editingDraft.value.api.result ?? []) {\n const target = rule.target.trim()\n if (!target) continue\n if (!isValidPageMethodApiTarget(target)) return true\n }\n return false\n })\n\n const editingApiParamsInvalid = computed(() => {\n if (editingDraft.value?.kind !== 'api') return false\n return !isValidPageMethodApiParamList(editingDraft.value.api.params)\n })\n\n function handleRemove(key: number) {\n const removed = removeItem(key)\n if (!removed) return\n if (options?.selectedMethod && options.selectedMethod.value.trim() === removed.name.trim()) {\n options.selectedMethod.value = ''\n }\n options?.onRemoved?.(removed)\n }\n\n function selectMethod(name: string) {\n if (!options?.selectedMethod) return\n options.selectedMethod.value = name\n }\n\n function handleSaveEditor() {\n if (!editingDraft.value) return Promise.reject()\n\n const previousName = editingKey.value !== null ? (methodList.value.find(item => item.key === editingKey.value)?.name ?? '') : ''\n const error = validateDraft(editingDraft.value, editingKey.value)\n if (error) {\n message.warning(error)\n return Promise.reject()\n }\n\n const savedResult = saveEditor()\n if (!savedResult) {\n message.warning('保存失败,请重试')\n return Promise.reject()\n }\n\n const { item: saved, addedPageDataFields } = savedResult\n if (addedPageDataFields.length) {\n message.info(`已自动添加页面数据字段:${addedPageDataFields.join('、')}`)\n }\n if (saved.name.trim() && isValidPageMethodName(saved.name) && options?.selectedMethod) {\n if (options.selectedMethod.value.trim() === previousName.trim()) {\n options.selectedMethod.value = saved.name.trim()\n }\n }\n options?.onSaved?.(saved)\n }\n\n function handleCancelEditor() {\n closeEditor()\n }\n\n function canSimulateMethod(item: PageMethodItem) {\n const handler = item.handler.trim()\n return isSelectable(item) && hasHandler(handler) && isValidPageMethodHandler(handler)\n }\n\n function canSimulateDraft(): boolean {\n if (!editingDraft.value) return false\n return validateDraft(editingDraft.value, editingKey.value) === null\n }\n\n function getSimulateErrorMessage(result: { ok: false; reason: string; error?: unknown }) {\n if (result.reason === 'empty') return '请先编写函数函数'\n if (result.reason === 'invalid_name') return '请先填写有效函数名'\n if (result.reason === 'invalid_handler') return '函数须为带 {} 的完整函数写法'\n if (result.reason === 'compile_failed') return '函数解析失败,请检查语法'\n const err = result.error\n if (err instanceof Error && err.message) return `执行失败:${err.message}`\n return '执行失败,请查看控制台'\n }\n\n function runSimulateMethod(item: PageMethodItem, handlerSource?: string, args?: unknown[]) {\n if (!lifecycleRuntime) {\n message.warning('页面脚本运行时未就绪')\n return\n }\n\n const name = item.name.trim()\n if (!name || !isValidPageMethodName(name)) {\n message.warning('请先填写有效函数名')\n return\n }\n\n const code = (handlerSource ?? item.handler).trim()\n if (!code) {\n message.warning('请先编写函数函数')\n return\n }\n if (!isValidPageMethodHandler(code)) {\n message.warning('函数须为带 {} 的完整函数写法')\n return\n }\n\n const result = lifecycleRuntime.simulateMethod(name, {\n handlerSource: handlerSource !== undefined ? handlerSource : undefined,\n methodKey: isCreating.value ? undefined : (editingKey.value ?? undefined),\n args\n })\n\n if (result.ok) {\n message.success(`已模拟执行 ${getDisplayName(item)}`)\n return\n }\n\n message.warning(getSimulateErrorMessage(result))\n }\n\n function beginSimulateMethod(item: PageMethodItem, handlerSource?: string) {\n const paramNames = resolvePageMethodSimulateParamNames(item, handlerSource)\n if (!paramNames.length) {\n runSimulateMethod(item, handlerSource)\n return\n }\n\n simulateArgsDraft.value = {\n item,\n handlerSource,\n methodName: item.name.trim(),\n paramNames,\n values: Object.fromEntries(paramNames.map(name => [name, '']))\n }\n simulateArgsVisible.value = true\n }\n\n function confirmSimulateArgs() {\n const draft = simulateArgsDraft.value\n if (!draft) return Promise.reject()\n\n const args = draft.paramNames.map(name => parsePageMethodSimulateArgValue(draft.values[name] ?? ''))\n simulateArgsVisible.value = false\n simulateArgsDraft.value = null\n runSimulateMethod(draft.item, draft.handlerSource, args)\n }\n\n function cancelSimulateArgs() {\n simulateArgsVisible.value = false\n simulateArgsDraft.value = null\n }\n\n function simulateMethodFromList(item: PageMethodItem) {\n beginSimulateMethod(item)\n }\n\n function simulateMethodFromEditor() {\n if (!canSimulateDraft()) {\n message.warning('请先完善配置')\n return\n }\n const item = buildDraftItem()\n if (!item || !editingDraft.value) return\n beginSimulateMethod(item, resolveDraftHandler(editingDraft.value))\n }\n\n function insertUsageExample(example: string) {\n if (!editingDraft.value || editingDraft.value.kind !== 'function') return\n editingDraft.value.handler = example\n }\n\n return {\n editorVisible,\n editingDraft,\n editorTitle,\n editingNameInvalid,\n editingHandlerInvalid,\n editingApiUrlInvalid,\n editingApiResultInvalid,\n editingApiParamsInvalid,\n selectedMethodKeys,\n getDisplayName,\n isSelectable,\n canSimulateMethod,\n addFunction,\n addApi,\n editItem,\n handleRemove,\n selectMethod,\n handleSaveEditor,\n handleCancelEditor,\n simulateArgsVisible,\n simulateArgsDraft,\n confirmSimulateArgs,\n cancelSimulateArgs,\n simulateMethodFromList,\n simulateMethodFromEditor,\n insertUsageExample\n }\n}\n\n/** 绑定设计器当前页面的 methods 列表 */\nexport function useDesignerPageMethods() {\n const designer = useInjectDesigner()\n const page = computed(() => designer?.page as Page | undefined)\n\n return computed<PageMethods>({\n get: () => {\n if (page.value) ensurePageScript(page.value)\n return page.value?.methods ?? []\n },\n set: value => {\n if (page.value) page.value.methods = commitPageMethods(value)\n }\n })\n}\n","<script setup lang=\"ts\">\nimport { CaretRightOutlined, InfoCircleOutlined } from '@ant-design/icons-vue'\nimport MethodApiConfigForm from './method-api-config-form.vue'\nimport { DEFAULT_METHOD_PLACEHOLDER, METHOD_USAGE_PRESETS, type PageMethodDraft } from './use-page-methods-editor.ts'\nimport type { Page, PageData } from '../../core/index.ts'\nimport { CodeEditor } from '../shared/code-editor.vue'\nimport { buildPageContextCompletion } from '../shared/code-editor-page-context-completion.ts'\nimport { useInjectDesigner } from '../material-registry.ts'\nimport { computed } from 'vue'\n\ndefineOptions({ name: 'PageMethodEditorModal' })\n\nconst open = defineModel<boolean>('open', { default: false })\n\nconst props = defineProps<{\n editingDraft: PageMethodDraft | null\n title: string\n pageData?: PageData\n nameInvalid: boolean\n handlerInvalid?: boolean\n apiUrlInvalid?: boolean\n apiResultInvalid?: boolean\n apiParamsInvalid?: boolean\n}>()\n\nconst emit = defineEmits<{\n save: []\n cancel: []\n simulate: []\n insertExample: [example: string]\n}>()\n\nconst isApiDraft = computed(() => props.editingDraft?.kind === 'api')\n\nconst designer = useInjectDesigner()\n\nconst pageContextCompletion = computed(() => {\n if (isApiDraft.value || !props.editingDraft) return undefined\n return buildPageContextCompletion({\n pageData: props.pageData,\n methods: (designer?.page as Page | undefined)?.methods,\n handler: props.editingDraft.handler,\n excludeMethodName: props.editingDraft.name\n })\n})\n\nconst nameFieldHint = computed(() => {\n if (isApiDraft.value) {\n return '保存时根据接口配置自动生成 async 函数,可通过 context.methods.函数名(...) 调用'\n }\n return '须为合法标识符;在组件属性 {{ fn() }} 或事件中通过 context.methods 调用'\n})\n</script>\n\n<template>\n <a-modal v-model:open=\"open\" :title=\"title\" ok-text=\"确定\" cancel-text=\"取消\" width=\"640px\" destroy-on-close @ok=\"emit('save')\" @cancel=\"emit('cancel')\">\n <template v-if=\"editingDraft\">\n <a-form layout=\"vertical\" class=\"mb-1\">\n <a-form-item :label=\"isApiDraft ? '接口名' : '函数名'\" class=\"mb-2\" :validate-status=\"nameInvalid ? 'error' : undefined\">\n <a-input v-model:value=\"editingDraft.name\" :placeholder=\"isApiDraft ? '如:loadProductList、fetchUserInfo' : '如:formatPrice、onBannerClick'\" />\n <div class=\"mt-1 text-[11px] leading-snug text-[var(--colorTextQuaternary)]\">{{ nameFieldHint }}</div>\n </a-form-item>\n </a-form>\n\n <div v-if=\"isApiDraft\" class=\"relative min-h-[280px]\">\n <MethodApiConfigForm\n v-model=\"editingDraft.api\"\n :page-data=\"pageData\"\n :url-invalid=\"apiUrlInvalid\"\n :result-invalid=\"apiResultInvalid\"\n :params-invalid=\"apiParamsInvalid\"\n />\n\n <div class=\"mt-3 flex items-center justify-between gap-2\">\n <div class=\"min-w-0 text-[11px] leading-[1.4] text-[var(--colorTextQuaternary)]\">保存时将根据上方配置自动生成 async 函数;可在生命周期或事件中 <span class=\"font-mono\">await context.methods.函数名(...)</span> 调用</div>\n <a-button type=\"link\" size=\"small\" class=\"shrink-0 px-0\" :disabled=\"!editingDraft.name.trim() || nameInvalid || apiUrlInvalid || apiResultInvalid || apiParamsInvalid\" @click=\"emit('simulate')\">\n <template #icon><CaretRightOutlined /></template>\n 模拟执行\n </a-button>\n </div>\n </div>\n\n <div v-else class=\"relative min-h-[280px]\">\n <a-form layout=\"vertical\" class=\"mb-1\">\n <a-form-item label=\"函数体\" class=\"mb-0\" :validate-status=\"handlerInvalid ? 'error' : undefined\">\n <CodeEditor v-model=\"editingDraft.handler\" language=\"javascript\" :placeholder=\"DEFAULT_METHOD_PLACEHOLDER\" :height=\"240\" :page-context-completion=\"pageContextCompletion\" />\n <div v-if=\"handlerInvalid\" class=\"mt-1 text-[11px] leading-snug text-[var(--colorError)]\">须为带 <span class=\"font-mono\">{}</span> 的完整函数,如 <span class=\"font-mono\">() => { ... }</span> 或 <span class=\"font-mono\">(url, w) => { return ... }</span></div>\n </a-form-item>\n </a-form>\n\n <a-collapse :bordered=\"false\" expand-icon-position=\"end\" :default-active-key=\"[]\" class=\"mt-2\">\n <a-collapse-panel v-for=\"preset in METHOD_USAGE_PRESETS\" :key=\"preset.key\" :header=\"preset.label\">\n <div class=\"mb-2 flex items-center justify-between gap-2\">\n <div class=\"flex min-w-0 flex-1 items-center gap-1 text-[11px] text-[var(--colorTextQuaternary)]\">\n <InfoCircleOutlined class=\"shrink-0 text-[10px] opacity-80\" />\n <span>{{ preset.hint }}</span>\n </div>\n <a-button type=\"link\" size=\"small\" class=\"shrink-0 px-0\" @click=\"emit('insertExample', preset.example)\">插入示例</a-button>\n </div>\n <pre class=\"overflow-x-auto rounded-sm bg-[color-mix(in_srgb,var(--colorText)_4%,var(--colorBgContainer))] px-2 py-1.5 font-mono text-[10px] leading-[1.45] text-[var(--colorTextSecondary)]\">{{ preset.example }}</pre>\n <div v-if=\"preset.paramHint\" class=\"mt-2 text-[11px] leading-[1.4] text-[var(--colorTextQuaternary)]\">{{ preset.paramHint }}</div>\n </a-collapse-panel>\n </a-collapse>\n\n <div class=\"mt-2 flex items-center justify-between gap-2\">\n <div class=\"min-w-0 text-[11px] leading-[1.4] text-[var(--colorTextQuaternary)]\">须写完整函数(带 <span class=\"font-mono\">{}</span> 函数体);运行时注入 <span class=\"font-mono\">context</span>(含 data / methods),调用方参数通过形参传入</div>\n <a-button type=\"link\" size=\"small\" class=\"shrink-0 px-0\" :disabled=\"!editingDraft.handler.trim() || !editingDraft.name.trim() || nameInvalid || handlerInvalid\" @click=\"emit('simulate')\">\n <template #icon><CaretRightOutlined /></template>\n 模拟执行\n </a-button>\n </div>\n </div>\n </template>\n </a-modal>\n</template>\n","<script setup lang=\"ts\">\nimport type { PageMethodSimulateArgsDraft } from './use-page-methods-editor.ts'\n\ndefineOptions({ name: 'PageMethodSimulateArgsModal' })\n\nconst open = defineModel<boolean>('open', { default: false })\n\ndefineProps<{\n draft: PageMethodSimulateArgsDraft | null\n}>()\n\nconst emit = defineEmits<{\n confirm: []\n cancel: []\n}>()\n</script>\n\n<template>\n <a-modal\n v-model:open=\"open\"\n :title=\"draft ? `模拟执行:${draft.methodName}()` : '模拟执行'\"\n ok-text=\"执行\"\n cancel-text=\"取消\"\n width=\"480px\"\n destroy-on-close\n @ok=\"emit('confirm')\"\n @cancel=\"emit('cancel')\"\n >\n <template v-if=\"draft\">\n <div class=\"mb-3 text-[11px] leading-snug text-[var(--colorTextQuaternary)]\">为形参填写测试值;支持 JSON 字面量(如 <span class=\"font-mono\">1</span>、<span class=\"font-mono\">\"text\"</span>、<span class=\"font-mono\">true</span>),留空为 <span class=\"font-mono\">undefined</span>。</div>\n\n <a-form layout=\"vertical\" class=\"mb-0\">\n <a-form-item v-for=\"param in draft.paramNames\" :key=\"param\" :label=\"param\" class=\"mb-2\">\n <a-input v-model:value=\"draft.values[param]\" :placeholder=\"`参数 ${param}`\" allow-clear />\n </a-form-item>\n </a-form>\n </template>\n </a-modal>\n</template>\n","<script setup lang=\"ts\">\nimport { ApiOutlined, CaretRightOutlined, DeleteOutlined, EditOutlined, FunctionOutlined, InfoCircleOutlined } from '@ant-design/icons-vue'\nimport { computed } from 'vue'\nimport PageMethodEditorModal from './page-method-editor-modal.vue'\nimport PageMethodSimulateArgsModal from './page-method-simulate-args-modal.vue'\nimport { isApiMethodItem } from './page-method-api.ts'\nimport { METHOD_USAGE_PRESETS, useDesignerPageMethods, usePageMethodsEditor } from './use-page-methods-editor.ts'\nimport { useInjectDesigner } from '../material-registry.ts'\nimport type { Page } from '../../core/index.ts'\n\ndefineOptions({ name: 'PageMethods' })\n\nconst methodList = useDesignerPageMethods()\nconst designer = useInjectDesigner()\nconst pageData = computed(() => (designer?.page as Page | undefined)?.data ?? [])\n\nconst { editorVisible, editingDraft, editorTitle, editingNameInvalid, editingHandlerInvalid, editingApiUrlInvalid, editingApiResultInvalid, editingApiParamsInvalid, getDisplayName, canSimulateMethod, addFunction, addApi, editItem, handleRemove, handleSaveEditor, handleCancelEditor, simulateArgsVisible, simulateArgsDraft, confirmSimulateArgs, cancelSimulateArgs, simulateMethodFromList, simulateMethodFromEditor, insertUsageExample } = usePageMethodsEditor(methodList)\n</script>\n\n<template>\n <div class=\"min-h-0 flex-1 overflow-y-auto scrollbar p-3\">\n <div v-for=\"item in methodList\" :key=\"item.key\" class=\"flex items-center\">\n <div class=\"min-w-0 flex-1\">\n <div class=\"flex min-w-0 flex-1 items-center gap-1.5 text-sm leading-tight\">\n <span class=\"inline-flex shrink-0 items-center justify-center rounded-sm p-0.5 text-[10px] leading-none text-[var(--colorPrimary)] bg-[color-mix(in_srgb,var(--colorPrimary)_12%,transparent)]\">\n <ApiOutlined v-if=\"isApiMethodItem(item)\" />\n <FunctionOutlined v-else />\n </span>\n <span class=\"truncate font-mono text-xs\" :title=\"getDisplayName(item)\">{{ getDisplayName(item) }}</span>\n </div>\n </div>\n\n <a-tooltip title=\"执行\">\n <a-button type=\"text\" size=\"small\" :disabled=\"!canSimulateMethod(item)\" @click.stop=\"simulateMethodFromList(item)\">\n <CaretRightOutlined />\n </a-button>\n </a-tooltip>\n\n <a-tooltip title=\"编辑\">\n <a-button type=\"text\" size=\"small\" @click.stop=\"editItem(item)\">\n <EditOutlined />\n </a-button>\n </a-tooltip>\n\n <a-tooltip title=\"删除\">\n <a-button type=\"text\" size=\"small\" danger @click.stop=\"handleRemove(item.key)\">\n <DeleteOutlined />\n </a-button>\n </a-tooltip>\n </div>\n\n <a-empty v-if=\"methodList.length === 0\" description=\"暂无函数\" />\n\n <div class=\"mt-2 grid grid-cols-2 gap-2\">\n <a-button type=\"dashed\" size=\"small\" block @click=\"addFunction()\">\n <template #icon><FunctionOutlined /></template>\n 添加函数</a-button\n >\n <a-button type=\"dashed\" size=\"small\" block @click=\"addApi()\">\n <template #icon><ApiOutlined /></template>\n 添加接口\n </a-button>\n </div>\n\n <section class=\"mt-3 border-t border-[color-mix(in_srgb,var(--colorText)_8%,transparent)] pt-3\">\n <div class=\"mb-2.5 flex items-center gap-1.5\">\n <InfoCircleOutlined class=\"text-xs text-[var(--colorTextQuaternary)]\" />\n <span class=\"text-xs font-medium text-[var(--colorTextSecondary)]\">帮助</span>\n </div>\n <div class=\"flex flex-col gap-2.5\">\n <div v-for=\"preset in METHOD_USAGE_PRESETS\" :key=\"preset.key\" class=\"rounded-sm border border-[color-mix(in_srgb,var(--colorText)_8%,transparent)] p-1\">\n <div class=\"text-xs font-medium leading-tight\">{{ preset.label }}</div>\n <div class=\"mt-0.5 text-[11px] leading-snug text-[var(--colorTextQuaternary)]\">{{ preset.hint }}</div>\n <pre class=\"mt-1.5 overflow-x-auto rounded-sm bg-[color-mix(in_srgb,var(--colorText)_4%,var(--colorBgContainer))] px-2 py-1.5 font-mono text-[10px] leading-[1.45] text-[var(--colorTextSecondary)] scrollbar\">{{ preset.example }}</pre>\n <div v-if=\"preset.paramHint\" class=\"mt-1 text-[10px] leading-snug text-[var(--colorTextQuaternary)]\">{{ preset.paramHint }}</div>\n </div>\n <div class=\"text-[11px] leading-snug text-[var(--colorTextQuaternary)]\">自定义函数须为带 <span class=\"font-mono\">{}</span> 的完整写法;接口函数通过表单配置后自动生成 async 函数。均可通过 <span class=\"font-mono\">context.methods.xxx(...)</span> 调用。</div>\n </div>\n </section>\n </div>\n\n <PageMethodEditorModal v-model:open=\"editorVisible\" :editing-draft=\"editingDraft\" :title=\"editorTitle\" :page-data=\"pageData\" :name-invalid=\"editingNameInvalid\" :handler-invalid=\"editingHandlerInvalid\" :api-url-invalid=\"editingApiUrlInvalid\" :api-result-invalid=\"editingApiResultInvalid\" :api-params-invalid=\"editingApiParamsInvalid\" @save=\"handleSaveEditor\" @cancel=\"handleCancelEditor\" @simulate=\"simulateMethodFromEditor\" @insert-example=\"insertUsageExample\" />\n\n <PageMethodSimulateArgsModal v-model:open=\"simulateArgsVisible\" :draft=\"simulateArgsDraft\" @confirm=\"confirmSimulateArgs\" @cancel=\"cancelSimulateArgs\" />\n</template>\n","<script setup lang=\"ts\">\ndefineOptions({ name: 'LowcodeDesigner' })\n\nimport LowcodeDesignerPageWorkspace from './canvas/workspace.vue'\nimport LowcodeDesignerWidgetSetterPanel from './properties/panel.vue'\nimport LowcodeDesignerWidgetLibrary from './materials/widget-library.vue'\nimport LowcodeDesignerPageOutline from './outline/panel.vue'\nimport LowcodeDesignerDataSourcePanel from './datasource/panel.vue'\nimport LowcodeDesignerMethodsPanel from './methods/page-methods.vue'\nimport ConfigProvider from 'ant-design-vue/es/config-provider'\nimport antTheme from 'ant-design-vue/es/theme'\nimport { onClickOutside } from '@vueuse/core'\nimport { AppstoreOutlined, CloseOutlined, DatabaseOutlined, FunctionOutlined, PartitionOutlined, PushpinFilled, PushpinOutlined } from '@ant-design/icons-vue'\nimport type { Component } from 'vue'\nimport { computed, getCurrentInstance, nextTick, provide, reactive, ref, watch, watchEffect } from 'vue'\nimport { clonePageSnapshot, createDefaultPage, isSamePageSnapshot, type Page } from '../core/index.ts'\nimport { createDesigner, DESIGNER_KEY } from './designer.ts'\nimport { createDesignerMaterialRegistry, registerDesignWidgetComponents } from './material-registry.ts'\nimport { useDesignerShortcuts } from './use-designer-shortcuts.ts'\nimport type { PageSetterOptionsSlotProps } from '../materials/page/setter-slots.ts'\nimport { applyLowcodeThemeCssVariables, DEFAULT_LOWCODE_DESIGNER_HEIGHT, DEFAULT_LOWCODE_DESIGNER_WIDTH, LIFECYCLE_KEY, LOWCODE_DESIGNER_SELECT_WIDGET_KEY, LOWCODE_DESIGN_MODE_KEY, LOWCODE_STYLE_PREVIEW_KEY, MATERIAL_REGISTRY_KEY, provideLowcodeUpload, useLifecycle, type LowcodeDesignerProps } from '../runtime/runtime.ts'\n\ndefineSlots<{\n 'page-setter-options'(props: PageSetterOptionsSlotProps): unknown\n}>()\n\ntype DesignerSidebarTab = 'widgetLibrary' | 'pageOutline' | 'dataSource' | 'methods'\n\nconst SIDEBAR_ITEMS: { key: DesignerSidebarTab; title: string; icon: Component }[] = [\n { key: 'pageOutline', title: '大纲', icon: PartitionOutlined },\n { key: 'widgetLibrary', title: '组件库', icon: AppstoreOutlined },\n { key: 'dataSource', title: '数据源', icon: DatabaseOutlined },\n { key: 'methods', title: '函数', icon: FunctionOutlined }\n]\n\nconst page = defineModel<Page>('page', {\n default: () => createDefaultPage()\n})\n\nconst props = withDefaults(defineProps<LowcodeDesignerProps>(), {\n height: DEFAULT_LOWCODE_DESIGNER_HEIGHT,\n width: DEFAULT_LOWCODE_DESIGNER_WIDTH\n})\n\nif (!props.definitions?.length) {\n throw new Error('[@fp-mall/lowcode/designer] 请通过 :definitions 传入物料定义(如 materialDefinitions)')\n}\n\n// ── 物料注册与全局 provide ────────────────────────────────────\n\nprovideLowcodeUpload(props.uploadHandler)\n\nconst materialRegistry = createDesignerMaterialRegistry(props.definitions)\n\nconst instance = getCurrentInstance()\nif (instance) {\n registerDesignWidgetComponents(instance.appContext.app, materialRegistry)\n}\n\nprovide(MATERIAL_REGISTRY_KEY, materialRegistry)\nprovide(LOWCODE_DESIGN_MODE_KEY, true)\n\n// ── 设计器核心状态 ────────────────────────────────────────────\n\nconst designer = reactive(\n createDesigner({\n page: page.value,\n widgetNormalizers: materialRegistry.widgetNormalizers,\n copyNormalizeTypes: materialRegistry.copyNormalizeTypes,\n widgetAcceptsChild: materialRegistry.widgetAcceptsChild\n })\n)\nprovide(DESIGNER_KEY, designer)\nprovide(\n LOWCODE_STYLE_PREVIEW_KEY,\n computed(() => ({\n widgetId: designer.stylePreview.pinned ? designer.stylePreview.widgetId : null,\n state: designer.stylePreview.pinned ? designer.stylePreview.state : null\n }))\n)\nprovide(LOWCODE_DESIGNER_SELECT_WIDGET_KEY, widget => designer.setSelected(widget))\n\nuseDesignerShortcuts({\n designer: () => designer,\n getKeyedSlotConfig: type => materialRegistry.getKeyedSlotConfig(type)\n})\n\nconst lifecycleRuntime = useLifecycle({\n page: () => designer.page,\n designMode: () => true\n})\nprovide(LIFECYCLE_KEY, lifecycleRuntime)\n\n// ── page ↔ v-model 双向同步 ───────────────────────────────────\n// 内部编辑 → 克隆快照写回 v-model,并即时记录历史\n// 外部灌入 → loadPage(通过 syncSource 标记避免回环)\n\ntype PageSyncSource = 'designer' | 'external' | null\nlet pageSyncSource: PageSyncSource = null\n\nwatch(\n () => designer.page,\n val => {\n pageSyncSource = 'designer'\n page.value = clonePageSnapshot(val)\n designer.commitHistoryIfChanged()\n nextTick(() => {\n pageSyncSource = null\n })\n },\n { deep: true, flush: 'sync' }\n)\n\nwatch(\n page,\n val => {\n if (pageSyncSource === 'designer' || !val) return\n if (!isSamePageSnapshot(val, designer.page)) {\n designer.loadPage(val)\n }\n },\n { deep: true, flush: 'sync' }\n)\n\n// ── 主题作用域 ────────────────────────────────────────────────\n\nconst { token } = antTheme.useToken()\nconst themeScopeRootEl = ref<HTMLElement | null>(null)\n\nwatchEffect(() => {\n if (!themeScopeRootEl.value) return\n applyLowcodeThemeCssVariables(token.value, themeScopeRootEl.value)\n})\n\n/** 弹层挂到主题作用域内,使 scoped UnoCSS(.lowcode-theme-scope)对 Modal 等内容生效 */\nfunction getPopupContainer(triggerNode?: HTMLElement) {\n return themeScopeRootEl.value ?? triggerNode?.parentElement ?? document.body\n}\n\n// ── 侧栏 ──────────────────────────────────────────────────────\n\nconst sidebarActiveTab = ref<DesignerSidebarTab | null>('widgetLibrary')\nconst sidebarPinned = ref(true)\nconst sidebarPanelRef = ref<HTMLElement | null>(null)\n\nonClickOutside(sidebarPanelRef, () => {\n if (sidebarPinned.value || !sidebarActiveTab.value) return\n sidebarActiveTab.value = null\n})\n\nconst sidebarActiveTitle = computed(() => SIDEBAR_ITEMS.find(item => item.key === sidebarActiveTab.value)?.title ?? '')\n\nconst sidebarFloating = computed(() => !sidebarPinned.value && !!sidebarActiveTab.value)\n\nconst designerLayoutStyle = computed(() => ({\n height: props.height,\n width: props.width\n}))\n\nfunction handleSidebarClick(key: DesignerSidebarTab) {\n sidebarActiveTab.value = sidebarActiveTab.value === key ? null : key\n}\n\nconst sidebarItemBase = 'relative flex-center h-9 w-full cursor-pointer border-none rounded-lg transition-colors duration-200'\n</script>\n\n<template>\n <ConfigProvider :theme=\"props.theme\" :locale=\"props.locale\" :get-popup-container=\"getPopupContainer\">\n <div ref=\"themeScopeRootEl\" class=\"lowcode-theme-scope h-full w-full min-h-0 min-w-0\">\n <div class=\"flex h-full w-full flex-row overflow-hidden\" :style=\"designerLayoutStyle\">\n <div ref=\"sidebarPanelRef\" class=\"flex h-full shrink-0\" :class=\"sidebarFloating && 'relative z-30'\">\n <nav class=\"flex h-full w-12 min-w-12 shrink-0 flex-col gap-1 border-r border-r-solid border-r-[var(--colorSplit)] bg-[var(--colorBgContainer)] px-1.5 py-3\" aria-label=\"编辑器侧栏\">\n <button v-for=\"item in SIDEBAR_ITEMS\" :key=\"item.key\" type=\"button\" :class=\"[sidebarItemBase, sidebarActiveTab === item.key ? 'bg-[var(--colorPrimary)] text-[var(--colorTextLightSolid)] hover:bg-[var(--colorPrimary)] hover:text-[var(--colorTextLightSolid)]' : 'bg-transparent text-[var(--colorTextSecondary)] hover:bg-[var(--colorFillSecondary)] hover:text-[var(--colorText)]']\" :title=\"item.title\" :aria-label=\"item.title\" :aria-current=\"sidebarActiveTab === item.key ? 'page' : undefined\" @click=\"handleSidebarClick(item.key)\">\n <component :is=\"item.icon\" class=\"text-base\" />\n </button>\n </nav>\n\n <aside v-if=\"sidebarActiveTab\" class=\"flex h-full w-[280px] min-w-[280px] flex-col border-r border-[var(--colorSplit)] bg-[var(--colorBgContainer)]\" :class=\"sidebarPinned ? 'shrink-0' : 'absolute top-0 left-12 z-30 shadow-[0_4px_12px_color-mix(in_srgb,var(--colorText)_8%,transparent)]'\">\n <header class=\"shrink-0 border-b border-[var(--colorSplit)] px-3 py-2.5\">\n <div class=\"flex items-center justify-between gap-2\">\n <span class=\"text-sm font-medium text-[var(--colorText)]\">{{ sidebarActiveTitle }}</span>\n <div class=\"flex items-center gap-0.5\">\n <a-button type=\"text\" size=\"small\" class=\"!h-7 !w-7 !p-0\" :title=\"sidebarPinned ? '取消固定' : '固定面板'\" @click=\"sidebarPinned = !sidebarPinned\">\n <PushpinFilled v-if=\"sidebarPinned\" class=\"text-xs text-[var(--colorPrimary)]\" />\n <PushpinOutlined v-else class=\"text-xs text-[var(--colorTextSecondary)]\" />\n </a-button>\n <a-button type=\"text\" size=\"small\" class=\"!h-7 !w-7 !p-0\" title=\"关闭\" aria-label=\"关闭\" @click=\"sidebarActiveTab = null\">\n <CloseOutlined class=\"text-xs text-[var(--colorTextSecondary)]\" />\n </a-button>\n </div>\n </div>\n </header>\n\n <LowcodeDesignerWidgetLibrary v-if=\"sidebarActiveTab === 'widgetLibrary'\" />\n <LowcodeDesignerPageOutline v-else-if=\"sidebarActiveTab === 'pageOutline'\" />\n <LowcodeDesignerDataSourcePanel v-else-if=\"sidebarActiveTab === 'dataSource'\" />\n <LowcodeDesignerMethodsPanel v-else-if=\"sidebarActiveTab === 'methods'\" />\n </aside>\n </div>\n\n <main class=\"min-h-0 min-w-0 flex-1 overflow-hidden border-r border-[var(--colorSplit)] bg-[var(--colorBgLayout)] [background-image:linear-gradient(90deg,color-mix(in_srgb,var(--colorText)_4%,transparent)_1px,transparent_1px),linear-gradient(color-mix(in_srgb,var(--colorText)_4%,transparent)_1px,transparent_1px)] [background-size:20px_20px]\">\n <LowcodeDesignerPageWorkspace />\n </main>\n\n <LowcodeDesignerWidgetSetterPanel class=\"h-full w-[320px] min-w-[320px] shrink-0\">\n <template #page-setter-options=\"scope\">\n <slot name=\"page-setter-options\" v-bind=\"scope\" />\n </template>\n </LowcodeDesignerWidgetSetterPanel>\n </div>\n </div>\n </ConfigProvider>\n</template>\n"],"names":["spaceSize","spaceProps","PropTypes","tuple","booleanType","getNumberSize","size","Space","defineComponent","props","_ref","slots","attrs","prefixCls","space","directionConfig","useConfigInject","wrapSSR","hashId","useStyle","supportFlexGap","useFlexGapSupport","computed","_a","_b","_c","horizontalSize","ref","verticalSize","watch","item","mergedAlign","cn","classNames","marginDirection","style","gapStyle","_extends","wrap","direction","children","items","filterEmpty","len","split","itemClassName","horizontalSizeVal","latestIndex","_createVNode","_objectSpread","child","index","originIndex","itemStyle","_Fragment","Compact","app","ClearOutlined","target","i","source","ownKeys","sym","key","_defineProperty","obj","value","context","p","AntdIcon","ClearOutlinedSvg","CodeOutlined","CodeOutlinedSvg","ControlOutlined","ControlOutlinedSvg","DesktopOutlined","DesktopOutlinedSvg","FunctionOutlined","FunctionOutlinedSvg","PartitionOutlined","PartitionOutlinedSvg","PushpinFilled","PushpinFilledSvg","PushpinOutlined","PushpinOutlinedSvg","RedoOutlined","RedoOutlinedSvg","TabletOutlined","TabletOutlinedSvg","UndoOutlined","UndoOutlinedSvg","designer","useInjectDesigner","shortcutModKey","formatShortcutModKey","undoEnabled","redoEnabled","device","deviceMeta","deviceLabel","deviceFrameStyle","selectPage","handleCanvasBackdropClick","e","isPreviewJSON","pageJSON","previewJSON","serializePageSnapshot","_createElementVNode","_hoisted_1","_hoisted_2","_component_a_space","_component_a_tooltip","_unref","_component_a_button","_cache","$event","_component_a_divider","_component_a_radio_group","_component_a_radio_button","MobileOutlined","_hoisted_3","_toDisplayString","_createBlock","DesignerWidgetNode","_component_a_modal","CodeEditor","headerIconBase","contentTransitionActive","contentTransitionFrom","materialRegistry","useInjectMaterialRegistry","getTreePath","tree","func","paths","data","findChildren","selectedWidget","breadcrumb","widget","isPageSelected","selectionTitle","type","selectedWidgetIcon","isReadonly","canMutateWidgetContent","headerIconPage","headerIconWidget","headerIconEmpty","handleSelect","_openBlock","_createElementBlock","_normalizeClass","SetterIcon","AppstoreOutlined","_hoisted_4","_hoisted_5","_hoisted_6","_renderList","_hoisted_7","_hoisted_8","RightOutlined","_hoisted_9","_Transition","_resolveDynamicComponent","_createSlots","$slots","_withCtx","scope","_renderSlot","_ctx","_hoisted_10","_hoisted_11","CANVAS_DROP_GHOST","PALETTE_SORTABLE_NOOP_CLASS","searchKeyword","filteredPackages","keyword","pkg","w","defaultActiveKeys","sortableMap","getTemplateByType","found","destroySortable","name","cleanupPaletteSortableArtifacts","root","node","initPaletteSortable","el","Sortable","evt","template","clone","setGridRef","onBeforeUnmount","resolveQuickAddParent","page","selected","widgetCanAcceptDropTarget","handleQuickAdd","_component_a_input","SearchOutlined","Collapse","CollapsePanel","buildOutlineTreeNode","resolveWidgetEditorTitle","outlineTreeTick","treeData","selectedKeys","id","resolveTreeWidget","outlineNode","nested","widgetId","findWidgetPlacement","pageChildren","pageIndex","walk","parent","widgetAcceptsChildren","ensureChildren","resolveRelativeDropPosition","info","posParts","resolveOutlineDropTarget","dropWidget","dropToGap","relativeDropPosition","nodeExpanded","placement","isNodeDraggable","canMutateWidgetStructure","isOutlineDropAllowed","ctx","options","dragWidget","applyOutlineTreeDrop","handleSelectWidget","_keys","handleAllowDrop","handleDrop","getOutlineNodeIcon","getOutlineNodeTitle","removeOutlineWidget","keyedConfig","handleTitleDblClick","event","isRenamingNode","startInlineRename","handleDeleteClick","canDeleteWidget","renamingWidgetId","cancelInlineRename","renameDraft","renameInputRef","nextTick","handleRenameKeydown","commitInlineRename","nextTitle","prevTitle","canToggleLock","canToggleWidgetLock","handleLockClick","isNodeLocked","isWidgetEffectivelyLocked","isNodeSelected","outlineShowLine","_component_a_tree","expanded","isLeaf","isWidgetSelfLocked","UnlockOutlined","LockOutlined","DeleteOutlined","cloneDataDraft","inferPageDataValueType","formatDraftPageDataValue","dataDraftToItem","draft","parsed","parseDraftPageDataValue","__props","emit","__emit","lifecycleRuntime","inject","LIFECYCLE_KEY","dataList","dedupePageData","editorVisible","editingKey","isCreating","editingDraft","editorTitle","removeItem","addItem","openEditor","current","entry","validateDraft","isValidPageDataName","isPageDataNameUsed","saveEditor","nextItem","closeEditor","getDisplayName","onDraftTypeChange","formatRuntimeFieldJson","getRuntimeFieldValue","fieldRefreshKeys","runtimeVersion","runtime","record","toRaw","editingNameInvalid","showScalarInput","showBooleanInput","runtimeRecord","displayRows","rows","coveredNames","runtimeValue","displayValue","getPageDataValueSummary","refreshFieldSnapshot","fieldName","handleSnapshotOpen","open","createSnapshotOpenHandler","copySnapshotJson","text","message","handleSaveEditor","error","updateNumberDraft","updateBooleanDraft","checked","handleCancelEditor","row","DatabaseOutlined","_component_a_tag","_createTextVNode","_component_a_popover","_withModifiers","CopyOutlined","EditOutlined","_component_a_empty","_component_a_form","_component_a_form_item","_component_a_select","PAGE_DATA_VALUE_TYPE_OPTIONS","_component_a_input_number","_component_a_switch","DATA_SOURCE_USAGE_PRESETS","pageData","PageDataEditor","InfoCircleOutlined","preset","entries","_useModel","addEntry","createApiMethodParamEntry","removeEntry","PlusOutlined","hasOptions","bind","_component_a_dropdown","_component_a_menu","_component_a_menu_item_group","param","_component_a_menu_item","field","createApiParamEntry","ApiParamBindButton","rules","addRule","createDefaultApiResultRule","removeRule","_","rule","clonePageMethodApiConfig","resultRules","queryEntries","parseApiParamEntries","headersEntries","bodyEntries","paramEntries","parsePageMethodApiParamEntries","syncParamEntriesToDraft","serializePageMethodApiParamEntries","commitDraft","syncRequestEntriesToDraft","serializeApiParamEntries","methodOptions","methodParamOptions","parsePageMethodApiParamNames","dataFieldOptions","paramSet","names","loadingField","ApiMethodParamsList","ApiParamListEditor","ApiResultRulesList","METHOD_USAGE_PRESETS","DEFAULT_METHOD_PLACEHOLDER","cloneMethodDraft","kind","isApiMethodItem","createEmptyMethodDraft","createDefaultPageMethodApiConfig","resolveGeneratedHandler","api","generatePageMethodHandlerFromApiConfig","methodDraftToItem","usePageMethodsEditor","methodList","simulateArgsVisible","simulateArgsDraft","hasHandler","handler","removed","addFunction","addApi","editItem","resolveDraftHandler","isValidPageMethodName","isPageMethodNameUsed","validatePageMethodApiConfig","isValidPageMethodApiUrl","isValidPageMethodApiTarget","isValidPageMethodHandler","syncPageDataFromApiConfig","next","added","ensurePageDataFieldsFromApiConfig","ensurePageData","addedPageDataFields","commitPageMethods","formatPageMethodSignature","isSelectable","buildDraftItem","selectedMethodKeys","editingHandlerInvalid","editingApiUrlInvalid","url","editingApiResultInvalid","editingApiParamsInvalid","isValidPageMethodApiParamList","handleRemove","selectMethod","savedResult","saved","canSimulateMethod","canSimulateDraft","getSimulateErrorMessage","result","err","runSimulateMethod","handlerSource","args","code","beginSimulateMethod","paramNames","resolvePageMethodSimulateParamNames","confirmSimulateArgs","parsePageMethodSimulateArgValue","cancelSimulateArgs","simulateMethodFromList","simulateMethodFromEditor","insertUsageExample","example","useDesignerPageMethods","ensurePageScript","isApiDraft","pageContextCompletion","buildPageContextCompletion","nameFieldHint","MethodApiConfigForm","CaretRightOutlined","_component_a_collapse","_component_a_collapse_panel","ApiOutlined","_hoisted_12","_hoisted_13","PageMethodEditorModal","PageMethodSimulateArgsModal","sidebarItemBase","SIDEBAR_ITEMS","provideLowcodeUpload","createDesignerMaterialRegistry","instance","getCurrentInstance","registerDesignWidgetComponents","provide","MATERIAL_REGISTRY_KEY","LOWCODE_DESIGN_MODE_KEY","reactive","createDesigner","DESIGNER_KEY","LOWCODE_STYLE_PREVIEW_KEY","LOWCODE_DESIGNER_SELECT_WIDGET_KEY","useDesignerShortcuts","useLifecycle","pageSyncSource","val","clonePageSnapshot","isSamePageSnapshot","token","antTheme","themeScopeRootEl","watchEffect","applyLowcodeThemeCssVariables","getPopupContainer","triggerNode","sidebarActiveTab","sidebarPinned","sidebarPanelRef","onClickOutside","sidebarActiveTitle","sidebarFloating","designerLayoutStyle","handleSidebarClick","ConfigProvider","CloseOutlined","LowcodeDesignerWidgetLibrary","LowcodeDesignerPageOutline","LowcodeDesignerDataSourcePanel","LowcodeDesignerMethodsPanel","LowcodeDesignerPageWorkspace","LowcodeDesignerWidgetSetterPanel"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22]}
|