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":"runtime-definitions-BGShdDBK.js","sources":["../src/runtime/scoped-style-block.vue","../src/materials/packages/button/options.ts","../src/materials/packages/button/view.vue","../src/materials/packages/image/options.ts","../src/materials/packages/image/view.vue","../src/materials/packages/text/options.ts","../src/materials/packages/text/view.vue","../src/materials/packages/divider/options.ts","../src/materials/packages/divider/view.vue","../src/designer/canvas/draggable-list.vue","../src/materials/shared/designer/container-children.vue","../src/materials/packages/card/options.ts","../src/materials/packages/card/view.vue","../src/materials/packages/carousel/carousel-slide/options.ts","../src/materials/packages/carousel/options.ts","../src/materials/packages/carousel/view.vue","../src/materials/shared/envelopes/internal-pane-view.vue","../src/materials/packages/carousel/carousel-slide/view.vue","../src/materials/packages/grid/options.ts","../src/materials/packages/grid/view.vue","../src/materials/packages/tab/tab-pane/options.ts","../src/materials/packages/tab/options.ts","../src/materials/packages/tab/view.vue","../src/materials/packages/tab/tab-pane/view.vue","../src/materials/shared/envelopes/item-scope-provider.vue","../src/materials/packages/list/view.vue","../src/materials/page/view.vue","../src/materials/runtime-definitions.ts"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, watch } from 'vue'\n\nconst props = defineProps<{\n css: string\n id: string | number\n}>()\n\nconst styleId = computed(() => `lc-style-${String(props.id)}`)\n\nlet styleEl: HTMLStyleElement | null = null\n\nfunction syncStyle(text: string) {\n if (typeof document === 'undefined') return\n\n if (!text) {\n styleEl?.remove()\n styleEl = null\n return\n }\n\n if (!styleEl) {\n styleEl = document.getElementById(styleId.value) as HTMLStyleElement | null\n if (!styleEl) {\n styleEl = document.createElement('style')\n styleEl.id = styleId.value\n document.head.appendChild(styleEl)\n }\n }\n\n styleEl.textContent = text\n}\n\nwatch(() => props.css, syncStyle, { immediate: true })\n\nonBeforeUnmount(() => {\n styleEl?.remove()\n styleEl = null\n})\n</script>\n\n<template />\n","import type { CssStyle } from '../../../core/index.ts'\nimport type { Widget } from '../../../core/index.ts'\nimport { ensureWidgetStyles } from '../../../core/index.ts'\nimport { patchWidgetEvents } from '../../../runtime/runtime.ts'\n\nexport type ButtonType = 'primary' | 'default' | 'dashed' | 'link' | 'text'\nexport type ButtonSize = 'large' | 'middle' | 'small'\nexport type ButtonShape = 'default' | 'round' | 'circle'\n\nexport const BUTTON_TYPE_OPTIONS: { value: ButtonType; label: string }[] = [\n { value: 'primary', label: '主要' },\n { value: 'default', label: '默认' },\n { value: 'dashed', label: '虚线' },\n { value: 'link', label: '链接' },\n { value: 'text', label: '文字' }\n]\n\nexport const BUTTON_SIZE_OPTIONS: { value: ButtonSize; label: string }[] = [\n { value: 'large', label: '大' },\n { value: 'middle', label: '中' },\n { value: 'small', label: '小' }\n]\n\nexport const BUTTON_SHAPE_OPTIONS: { value: ButtonShape; label: string }[] = [\n { value: 'default', label: '默认' },\n { value: 'round', label: '圆角' },\n { value: 'circle', label: '圆形' }\n]\n\nexport const DEFAULT_BUTTON_TITLE = '按钮'\n\nexport type ButtonOptions = {\n hidden?: boolean\n text?: string\n type?: ButtonType\n size?: ButtonSize\n shape?: ButtonShape\n disabled?: boolean\n block?: boolean\n danger?: boolean\n ghost?: boolean\n}\n\n/** 块级宽度开启时为 block,关闭时省略 display(物料默认 inline-block) */\nexport function getButtonLayoutDisplay(block?: boolean): CssStyle['display'] | undefined {\n return block ? 'block' : undefined\n}\n\nexport const DEFAULT_BUTTON_OPTIONS: Required<\n Pick<ButtonOptions, 'text' | 'type' | 'size' | 'shape' | 'disabled' | 'block' | 'danger' | 'ghost'>\n> = {\n text: '按钮',\n type: 'default',\n size: 'middle',\n shape: 'default',\n disabled: false,\n block: false,\n danger: false,\n ghost: false\n}\n\nconst BUTTON_TYPES = new Set<ButtonType>(BUTTON_TYPE_OPTIONS.map(item => item.value))\nconst BUTTON_SIZES = new Set<ButtonSize>(BUTTON_SIZE_OPTIONS.map(item => item.value))\nconst BUTTON_SHAPES = new Set<ButtonShape>(BUTTON_SHAPE_OPTIONS.map(item => item.value))\n\nconst BTN_BASE =\n 'inline-flex items-center justify-center gap-2 box-border m-0 font-normal leading-[1.5714] whitespace-nowrap text-center cursor-pointer select-none touch-manipulation border border-transparent bg-[var(--colorBgContainer)] text-[var(--colorText)] transition-all duration-200 ease-[cubic-bezier(0.645,0.045,0.355,1)]'\n\nconst BTN_SIZE: Record<ButtonSize, string> = {\n middle: 'h-8 px-[15px] py-1 text-sm rounded-md',\n large: 'h-10 px-[15px] py-[6.4px] text-base rounded-lg',\n small: 'h-6 px-[7px] text-sm rounded'\n}\n\nconst BTN_ROUND: Record<ButtonSize, string> = {\n middle: 'rounded-[32px]',\n large: 'rounded-[40px]',\n small: 'rounded-[24px]'\n}\n\nconst BTN_CIRCLE: Record<ButtonSize, string> = {\n middle: 'w-8 px-0 rounded-full',\n large: 'w-10 px-0 rounded-full',\n small: 'w-6 px-0 rounded-full'\n}\n\nconst BTN_TYPE: Record<ButtonType, string> = {\n default:\n 'border-[var(--colorBorder)] bg-[var(--colorBgContainer)] hover:text-[var(--colorPrimary)] hover:border-[var(--colorPrimary)]',\n primary: 'text-white border-[var(--colorPrimary)] bg-[var(--colorPrimary)] hover:brightness-105',\n dashed: 'border-dashed border-[var(--colorBorder)] bg-[var(--colorBgContainer)]',\n link: 'border-transparent bg-transparent shadow-none text-[var(--colorLink,var(--colorPrimary))]',\n text: 'border-transparent bg-transparent shadow-none text-[var(--colorText)]'\n}\n\nfunction stripPseudoVariantClasses(classes: string, variant: 'hover' | 'active' | 'focus'): string {\n const prefix = `${variant}:`\n return classes\n .split(/\\s+/)\n .filter(token => token && !token.startsWith(prefix))\n .join(' ')\n}\n\nexport function resolveButtonViewClasses(options: {\n type?: ButtonType\n size?: ButtonSize\n shape?: ButtonShape\n block?: boolean\n danger?: boolean\n ghost?: boolean\n disabled?: boolean\n hasCustomHover?: boolean\n hasCustomActive?: boolean\n hasCustomFocus?: boolean\n} = {}): string[] {\n const type = options.type ?? DEFAULT_BUTTON_OPTIONS.type\n const size = options.size ?? DEFAULT_BUTTON_OPTIONS.size\n const shape = options.shape ?? DEFAULT_BUTTON_OPTIONS.shape\n let typeClasses = BTN_TYPE[type]\n if (options.hasCustomHover) typeClasses = stripPseudoVariantClasses(typeClasses, 'hover')\n if (options.hasCustomActive) typeClasses = stripPseudoVariantClasses(typeClasses, 'active')\n if (options.hasCustomFocus) typeClasses = stripPseudoVariantClasses(typeClasses, 'focus')\n const classes = [BTN_BASE, BTN_SIZE[size], typeClasses]\n\n if (shape === 'round') classes.push(BTN_ROUND[size])\n if (shape === 'circle') classes.push(BTN_CIRCLE[size])\n if (options.danger && type === 'primary') classes.push('border-[#ff4d4f] bg-[#ff4d4f]')\n if (options.ghost && type === 'primary') classes.push('text-[var(--colorPrimary)] bg-transparent')\n if (options.block) classes.push('flex w-full')\n if (options.disabled) classes.push('cursor-not-allowed opacity-45 pointer-events-none')\n\n return classes\n}\n\nexport function ensureButtonOptions(widget: Widget) {\n widget.options ??= {}\n const options = widget.options as ButtonOptions\n if (options.text === undefined) options.text = DEFAULT_BUTTON_OPTIONS.text\n if (options.type === undefined || !BUTTON_TYPES.has(options.type)) {\n options.type = DEFAULT_BUTTON_OPTIONS.type\n }\n if (options.size === undefined || !BUTTON_SIZES.has(options.size)) {\n options.size = DEFAULT_BUTTON_OPTIONS.size\n }\n if (options.shape === undefined || !BUTTON_SHAPES.has(options.shape)) {\n options.shape = DEFAULT_BUTTON_OPTIONS.shape\n }\n if (options.disabled === undefined) options.disabled = DEFAULT_BUTTON_OPTIONS.disabled\n if (options.block === undefined) options.block = DEFAULT_BUTTON_OPTIONS.block\n const layoutDisplay = getButtonLayoutDisplay(options.block)\n const styles = ensureWidgetStyles(widget)\n if (!styles.default) {\n styles.default = {}\n }\n if (layoutDisplay != null && layoutDisplay !== '') {\n styles.default.display = layoutDisplay\n } else {\n delete styles.default.display\n }\n if (options.danger === undefined) options.danger = DEFAULT_BUTTON_OPTIONS.danger\n if (options.ghost === undefined) options.ghost = DEFAULT_BUTTON_OPTIONS.ghost\n patchWidgetEvents(widget)\n return options\n}\n","<script setup lang=\"ts\">\nimport type { Widget } from '../../../core/index.ts'\nimport { coerceBindingDisplayString, useWidgetEvents, useWidgetVisualStyles, useResolvedWidgetOptions, LOWCODE_DESIGN_MODE_KEY } from '../../../runtime/runtime.ts'\nimport ScopedStyleBlock from '../../../runtime/scoped-style-block.vue'\nimport { useElementSize } from '@vueuse/core'\nimport { ref } from 'vue'\nimport {\n DEFAULT_BUTTON_OPTIONS,\n resolveButtonViewClasses,\n type ButtonOptions,\n type ButtonShape,\n type ButtonSize,\n type ButtonType\n} from './options.ts'\nimport { computed, inject, toRef } from 'vue'\n\nconst props = defineProps<{\n widget: Widget\n parentWidget?: Widget | null\n index?: number\n}>()\n\nconst designMode = inject(LOWCODE_DESIGN_MODE_KEY, false)\n\nconst resolvedOptions = useResolvedWidgetOptions<ButtonOptions>(() => props.widget)\n\nconst text = computed(() => coerceBindingDisplayString(resolvedOptions.value.text, DEFAULT_BUTTON_OPTIONS.text))\n\nconst buttonType = computed<ButtonType>(() => {\n const value = resolvedOptions.value.type\n return value === 'primary' || value === 'dashed' || value === 'link' || value === 'text' ? value : DEFAULT_BUTTON_OPTIONS.type\n})\n\nconst buttonSize = computed<ButtonSize>(() => {\n const value = resolvedOptions.value.size\n return value === 'large' || value === 'small' ? value : DEFAULT_BUTTON_OPTIONS.size\n})\n\nconst buttonShape = computed<ButtonShape>(() => {\n const value = resolvedOptions.value.shape\n return value === 'round' || value === 'circle' ? value : DEFAULT_BUTTON_OPTIONS.shape\n})\n\nconst hostRef = ref<HTMLElement | null>(null)\nconst { width: hostWidth } = useElementSize(hostRef)\nconst { scopeAttr, scopedStyleCss, hasStateStyle } = useWidgetVisualStyles(() => props.widget, {\n designMode: () => designMode,\n containerWidth: () => hostWidth.value,\n hostRef\n})\n\nconst disabled = computed(() => resolvedOptions.value.disabled === true)\nconst block = computed(() => resolvedOptions.value.block === true)\nconst danger = computed(() => resolvedOptions.value.danger === true)\nconst ghost = computed(() => resolvedOptions.value.ghost === true)\n\nconst buttonClass = computed(() =>\n resolveButtonViewClasses({\n type: buttonType.value,\n size: buttonSize.value,\n shape: buttonShape.value,\n block: block.value,\n danger: danger.value,\n ghost: ghost.value,\n disabled: disabled.value,\n hasCustomHover: hasStateStyle('hover'),\n hasCustomActive: hasStateStyle('active'),\n hasCustomFocus: hasStateStyle('focus')\n })\n)\n\nconst { domEventHandlers } = useWidgetEvents({\n widget: toRef(props, 'widget'),\n designMode: () => designMode\n})\n</script>\n\n<template>\n <ScopedStyleBlock :css=\"scopedStyleCss\" :id=\"widget.id\" />\n <button ref=\"hostRef\" type=\"button\" :class=\"buttonClass\" :disabled=\"disabled\" v-bind=\"scopeAttr\" v-on=\"domEventHandlers\">\n {{ text }}\n </button>\n</template>\n","import { coerceBindingDisplayString, isOverflowClipSize, patchWidgetEvents, unwrapListRowScalar } from '../../../runtime/runtime.ts'\nimport type { Widget } from '../../../core/index.ts'\nimport { ensureWidgetStyles } from '../../../core/index.ts'\nimport type { CssStyle, StyleBreakpoint } from '../../../core/index.ts'\nimport { readStyleValue, resolveFlatCssStyle } from '../../../core/index.ts'\n\nexport type ImageFit = 'fill' | 'contain' | 'cover' | 'none' | 'scale-down'\n\nexport const IMAGE_FIT_OPTIONS: { value: ImageFit; label: string }[] = [\n { value: 'fill', label: '拉伸' },\n { value: 'contain', label: '包含' },\n { value: 'cover', label: '覆盖' },\n { value: 'none', label: '原始' },\n { value: 'scale-down', label: '缩小' }\n]\n\nexport const DEFAULT_IMAGE_TITLE = '图片'\n\nexport type ImageOptions = {\n hidden?: boolean\n src?: string\n alt?: string\n fit?: ImageFit\n}\n\nexport type ResolvedImageViewStyle = {\n imageClasses: string[]\n wrapperClasses: string[]\n hasFixedSize: boolean\n}\n\nconst IMAGE_FIT_CLASS: Record<ImageFit, string> = {\n fill: 'object-fill',\n contain: 'object-contain',\n cover: 'object-cover',\n none: 'object-none',\n 'scale-down': 'object-scale-down'\n}\n\nexport const DEFAULT_IMAGE_OPTIONS: Required<Pick<ImageOptions, 'src' | 'alt' | 'fit'>> = {\n src: '',\n alt: '',\n fit: 'cover'\n}\n\nconst IMAGE_FITS = new Set<ImageFit>(IMAGE_FIT_OPTIONS.map(item => item.value))\n\nconst IMAGE_LAYOUT_STYLE_KEYS = ['width', 'height', 'maxWidth', 'maxHeight', 'minWidth', 'minHeight', 'margin', 'marginTop', 'marginRight', 'marginBottom', 'marginLeft', 'padding', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft', 'display', 'opacity', 'borderRadius', 'borderTopLeftRadius', 'borderTopRightRadius', 'borderBottomRightRadius', 'borderBottomLeftRadius', 'border', 'borderWidth', 'borderStyle', 'borderColor', 'borderTop', 'borderRight', 'borderBottom', 'borderLeft', 'boxShadow', 'overflow'] as const\n\nexport function normalizeImageSrc(src?: string | null): string {\n if (typeof src !== 'string') return DEFAULT_IMAGE_OPTIONS.src\n return src.trim()\n}\n\nfunction pickImageUrlFromObject(value: Record<string, unknown>): string {\n for (const key of ['url', 'src', 'href'] as const) {\n const candidate = value[key]\n if (typeof candidate === 'string' && candidate.trim()) {\n return candidate.trim()\n }\n }\n return DEFAULT_IMAGE_OPTIONS.src\n}\n\n/** 将绑定解析结果(string / 数组 / 带 url 的对象 / 列表原始值行等)规范为图片地址 */\nexport function coerceImageSrcValue(value: unknown): string {\n const unwrapped = unwrapListRowScalar(value)\n if (unwrapped !== value) {\n return coerceImageSrcValue(unwrapped)\n }\n\n if (unwrapped === undefined || unwrapped === null) return DEFAULT_IMAGE_OPTIONS.src\n if (typeof unwrapped === 'string') return normalizeImageSrc(unwrapped)\n if (Array.isArray(unwrapped)) {\n for (const item of unwrapped) {\n const resolved = coerceImageSrcValue(item)\n if (resolved) return resolved\n }\n return DEFAULT_IMAGE_OPTIONS.src\n }\n if (typeof unwrapped === 'object') {\n return pickImageUrlFromObject(unwrapped as Record<string, unknown>)\n }\n const text = String(unwrapped).trim()\n return text || DEFAULT_IMAGE_OPTIONS.src\n}\n\n/** 将绑定解析结果规范为图片替代文本 */\nexport function coerceImageAltValue(value: unknown, fallback = DEFAULT_IMAGE_OPTIONS.alt): string {\n return coerceBindingDisplayString(value, fallback)\n}\n\nexport function hasImageSrc(src?: string | null): boolean {\n return normalizeImageSrc(src).length > 0\n}\n\nexport function shouldImageWidgetFixedLayout(style: CssStyle = {}, breakpoint: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl' = 'xl'): boolean {\n return isOverflowClipSize(readStyleValue(style, 'width', breakpoint)) || isOverflowClipSize(readStyleValue(style, 'height', breakpoint))\n}\n\nexport function ensureImageOptions(widget: Widget) {\n widget.options ??= {}\n const options = widget.options as ImageOptions\n if (options.src === undefined) options.src = DEFAULT_IMAGE_OPTIONS.src\n else options.src = normalizeImageSrc(options.src)\n if (options.alt === undefined) options.alt = DEFAULT_IMAGE_OPTIONS.alt\n else if (typeof options.alt !== 'string') options.alt = DEFAULT_IMAGE_OPTIONS.alt\n if (options.fit === undefined || !IMAGE_FITS.has(options.fit)) {\n options.fit = DEFAULT_IMAGE_OPTIONS.fit\n }\n delete (options as Record<string, unknown>).preview\n if (!widget.styles?.default) {\n ensureWidgetStyles(widget).default = {}\n }\n patchWidgetEvents(widget)\n return options\n}\n\nfunction pickImageLayoutStyle(style: CssStyle): CssStyle {\n const layout: CssStyle = {}\n IMAGE_LAYOUT_STYLE_KEYS.forEach(key => {\n const value = style[key]\n if (value !== undefined && value !== '') {\n layout[key] = value\n }\n })\n return layout\n}\n\nexport function resolveImageViewStyle(options: ImageOptions = {}, style: CssStyle = {}): ResolvedImageViewStyle {\n const fit = options.fit ?? DEFAULT_IMAGE_OPTIONS.fit\n const hasFixedSize = shouldImageWidgetFixedLayout(style)\n const flatLayout = resolveFlatCssStyle(pickImageLayoutStyle(style), 'xs')\n const imageClasses = ['block', IMAGE_FIT_CLASS[fit]]\n\n const wrapperClasses = ['align-top', 'max-w-full', 'box-border', 'inline-block']\n\n if (hasFixedSize) {\n imageClasses.push('h-full', 'w-full')\n wrapperClasses.push('overflow-hidden')\n if (flatLayout.width) {\n wrapperClasses.push('min-w-0')\n }\n if (flatLayout.height) {\n wrapperClasses.push('min-h-0')\n }\n } else {\n imageClasses.push('max-w-full', 'h-auto')\n }\n\n return {\n imageClasses,\n wrapperClasses,\n hasFixedSize\n }\n}\n\n/** 图片加载失败时的占位图(JPEG base64) */\nexport const IMAGE_FALLBACK_SRC =\n 'data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAA8AAD/4QMdaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA5LjEtYzAwMiA3OS5kYmEzZGEzYjUsIDIwMjMvMTIvMTUtMTA6NDI6MzcgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjIyOTIyNzg3MTUyMTExRjBCNzlBODYyNzkyOTkyNkI3IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjIyOTIyNzg2MTUyMTExRjBCNzlBODYyNzkyOTkyNkI3IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyMDI0IFdpbmRvd3MiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0iMDlENTUzQThEMDI3NzEzQzA1NEYzN0ZERDlBMzUyNjQiIHN0UmVmOmRvY3VtZW50SUQ9IjA5RDU1M0E4RDAyNzcxM0MwNTRGMzdGREQ5QTM1MjY0Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoKDBAMDAwM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'\n\n","<script setup lang=\"ts\">\nimport { IMAGE_FALLBACK_SRC } from './options.ts'\nimport type { Widget } from '../../../core/index.ts'\nimport { getWidgetDefaultStyle } from '../../../core/index.ts'\nimport { useWidgetEvents } from '../../../runtime/runtime.ts'\nimport { LOWCODE_DESIGN_MODE_KEY } from '../../../runtime/runtime.ts'\nimport { coerceImageAltValue, coerceImageSrcValue, hasImageSrc, resolveImageViewStyle, type ImageOptions } from './options.ts'\nimport { useResolvedWidgetOptions, useWidgetVisualStyles } from '../../../runtime/runtime.ts'\nimport ScopedStyleBlock from '../../../runtime/scoped-style-block.vue'\nimport { computed, inject, ref, toRef, watch } from 'vue'\n\nconst props = defineProps<{\n widget: Widget\n parentWidget?: Widget | null\n index?: number\n}>()\n\nconst designMode = inject(LOWCODE_DESIGN_MODE_KEY, false)\n\nconst resolvedOptions = useResolvedWidgetOptions<ImageOptions>(() => props.widget)\n\nconst src = computed(() => coerceImageSrcValue(resolvedOptions.value.src))\n\nconst alt = computed(() => coerceImageAltValue(resolvedOptions.value.alt))\n\nconst hostRef = ref<HTMLElement | null>(null)\n\nconst { scopeAttr, scopedStyleCss } = useWidgetVisualStyles(() => props.widget, {\n designMode: () => designMode,\n hostRef\n})\n\nconst resolvedView = computed(() => resolveImageViewStyle(resolvedOptions.value, getWidgetDefaultStyle(props.widget)))\n\nconst showPlaceholder = computed(() => !hasImageSrc(src.value))\n\nconst loadFailed = ref(false)\n\nwatch(src, () => {\n loadFailed.value = false\n})\n\nconst displaySrc = computed(() => (loadFailed.value ? IMAGE_FALLBACK_SRC : src.value))\n\nconst { domEventHandlers } = useWidgetEvents({\n widget: toRef(props, 'widget'),\n designMode: () => designMode\n})\n\nconst IMG_DOM_EVENTS = new Set(['load', 'error'])\n\nconst wrapperDomEventHandlers = computed(() => {\n const handlers: Record<string, (event: Event) => void> = {}\n for (const [name, handler] of Object.entries(domEventHandlers.value)) {\n if (!IMG_DOM_EVENTS.has(name)) {\n handlers[name] = handler\n }\n }\n return handlers\n})\n\nfunction handleImageError(event: Event) {\n loadFailed.value = true\n domEventHandlers.value.error?.(event)\n}\n</script>\n\n<template>\n <ScopedStyleBlock :css=\"scopedStyleCss\" :id=\"widget.id\" />\n <div ref=\"hostRef\" :class=\"resolvedView.wrapperClasses\" v-bind=\"scopeAttr\" v-on=\"wrapperDomEventHandlers\">\n <img\n v-if=\"!showPlaceholder\"\n :src=\"displaySrc\"\n :alt=\"alt || undefined\"\n :class=\"resolvedView.imageClasses\"\n :draggable=\"false\"\n @load=\"(event: Event) => domEventHandlers.load?.(event)\"\n @error=\"handleImageError\"\n />\n <div\n v-else\n class=\"flex min-h-24 min-w-24 items-center justify-center rounded border border-dashed border-[var(--colorBorderSecondary)] bg-[var(--colorFillQuaternary)] text-[var(--colorTextQuaternary)]\"\n :class=\"resolvedView.hasFixedSize ? 'h-full w-full min-h-0 min-w-0' : ''\"\n >\n <svg class=\"h-8 w-8\" viewBox=\"0 0 1024 1024\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M928 160H96c-17.7 0-32 13.3-32 32v640c0 17.7 13.3 32 32 32h832c17.7 0 32-13.3 32-32V192c0-17.7-13.3-32-32-32zM338 304c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm513.9 503.8H172.1c-11.8 0-23.5-4.5-32.4-13.4-8.9-8.9-13.4-20.6-13.4-32.4V684.2h768v78.2c0 11.8-4.5 23.5-13.4 32.4-8.9 8.9-20.6 13.4-32.3 13.4zM684.2 684.2V419.8c0-11.8 4.5-23.5 13.4-32.4 8.9-8.9 20.6-13.4 32.4-13.4h78.2v310.2h-124z\" />\n </svg>\n </div>\n </div>\n</template>\n","import { isOverflowClipSize, parseSize, patchWidgetEvents } from '../../../runtime/runtime.ts'\nimport type { Widget } from '../../../core/index.ts'\nimport { ensureWidgetStyles } from '../../../core/index.ts'\nimport type { CssStyle, FlatCssStyle, StyleBreakpoint } from '../../../core/index.ts'\nimport { readStyleValue, resolveFlatCssStyle } from '../../../core/index.ts'\n\nexport const DEFAULT_TEXT_TITLE = '文本'\n\n/** 文本组件默认布局模式,与 index.ts 中 styles.default.display 及样式面板 displayDefault 一致 */\nexport const TEXT_DISPLAY_DEFAULT = 'inline-block'\n\nexport type TextOptions = {\n hidden?: boolean\n text?: string\n strikethrough?: boolean\n underline?: boolean\n mark?: boolean\n}\n\nexport type TextClipMode = 'line-clamp' | 'box' | null\n\nexport type ResolvedTextViewStyle = {\n style: FlatCssStyle\n clipMode: TextClipMode\n lineClamp?: number\n classes: string[]\n}\n\nexport const DEFAULT_TEXT_OPTIONS: Required<Pick<TextOptions, 'text' | 'strikethrough' | 'underline' | 'mark'>> = {\n text: '文本内容',\n strikethrough: false,\n underline: false,\n mark: false\n}\n\nexport function ensureTextOptions(widget: Widget) {\n widget.options ??= {}\n const options = widget.options as TextOptions\n if (options.text === undefined) options.text = DEFAULT_TEXT_OPTIONS.text\n if (options.strikethrough === undefined) options.strikethrough = DEFAULT_TEXT_OPTIONS.strikethrough\n if (options.underline === undefined) options.underline = DEFAULT_TEXT_OPTIONS.underline\n if (options.mark === undefined) options.mark = DEFAULT_TEXT_OPTIONS.mark\n if (!widget.styles?.default) {\n ensureWidgetStyles(widget).default = {}\n }\n patchWidgetEvents(widget)\n return options\n}\n\nexport function shouldTextWidgetClip(style: CssStyle = {}, breakpoint: StyleBreakpoint = 'xs'): boolean {\n return isOverflowClipSize(readStyleValue(style, 'height', breakpoint))\n}\n\nfunction resolveTextLineClamp(style: CssStyle, breakpoint: StyleBreakpoint): number | undefined {\n const heightValue = readStyleValue(style, 'height', breakpoint)\n if (!isOverflowClipSize(heightValue)) return undefined\n\n const height = parseSize(heightValue)\n if (!height.value || height.value <= 0 || height.unit === '%') return undefined\n\n const lineHeight = parseSize(readStyleValue(style, 'lineHeight', breakpoint))\n if (lineHeight.value && lineHeight.value > 0 && height.unit === lineHeight.unit) {\n return Math.max(1, Math.floor(height.value / lineHeight.value))\n }\n\n const fontSize = parseSize(readStyleValue(style, 'fontSize', breakpoint))\n if (fontSize.value && fontSize.value > 0 && height.unit === fontSize.unit) {\n return Math.max(1, Math.floor(height.value / fontSize.value))\n }\n\n if (height.unit === 'px') {\n return Math.max(1, Math.floor(height.value / 20))\n }\n\n return undefined\n}\n\nexport function resolveTextViewClasses(clipMode: TextClipMode, lineClamp?: number): string[] {\n const base = ['align-top', 'min-w-0', 'max-w-full', 'box-border']\n\n if (clipMode === 'line-clamp') {\n return [...base, 'h-full', 'max-h-full', 'min-h-0', 'w-full', 'overflow-hidden', 'break-words', ...(lineClamp !== undefined ? [`line-clamp-${lineClamp}`] : [])]\n }\n\n if (clipMode === 'box') {\n return [...base, 'h-full', 'max-h-full', 'min-h-0', 'w-full', 'overflow-hidden', 'break-words', 'whitespace-pre-wrap']\n }\n\n return [...base, 'whitespace-pre-wrap', 'break-words']\n}\n\nexport function resolveTextDecorationClasses(options: {\n strikethrough?: boolean\n underline?: boolean\n mark?: boolean\n}): string[] {\n const classes: string[] = []\n if (options.underline) classes.push('underline')\n if (options.strikethrough) classes.push('line-through')\n if (options.mark) classes.push('bg-[#ffe58f]', 'p-0')\n return classes\n}\n\nexport function resolveTextViewStyle(style: CssStyle = {}, breakpoint: StyleBreakpoint = 'xs'): ResolvedTextViewStyle {\n const next = resolveFlatCssStyle(style, breakpoint)\n const clipWidth = isOverflowClipSize(next.width)\n const clipHeight = isOverflowClipSize(next.height)\n const widthWrap = clipWidth && !clipHeight\n\n const layoutStyle: FlatCssStyle = {}\n if (widthWrap && next.width) {\n layoutStyle.maxWidth = next.maxWidth ?? next.width\n }\n\n if (!clipHeight) {\n return {\n style: layoutStyle,\n clipMode: null,\n classes: resolveTextViewClasses(null, undefined)\n }\n }\n\n const lineClamp = resolveTextLineClamp(style, breakpoint)\n const clipMode: TextClipMode = lineClamp !== undefined ? 'line-clamp' : 'box'\n\n return {\n style: layoutStyle,\n clipMode,\n lineClamp,\n classes: resolveTextViewClasses(clipMode, lineClamp)\n }\n}\n","<script setup lang=\"ts\">\nimport type { Widget } from '../../../core/index.ts'\nimport { getWidgetDefaultStyle } from '../../../core/index.ts'\nimport { buildScopedStyleCss, coerceBindingDisplayString, useWidgetEvents, useWidgetVisualStyles, useResolvedWidgetOptions, LOWCODE_DESIGN_MODE_KEY } from '../../../runtime/runtime.ts'\nimport ScopedStyleBlock from '../../../runtime/scoped-style-block.vue'\nimport { DEFAULT_TEXT_OPTIONS, resolveTextDecorationClasses, resolveTextViewStyle, type TextOptions } from './options.ts'\nimport { useElementSize } from '@vueuse/core'\nimport { computed, inject, ref, toRef } from 'vue'\n\nconst props = defineProps<{\n widget: Widget\n parentWidget?: Widget | null\n index?: number\n}>()\n\nconst designMode = inject(LOWCODE_DESIGN_MODE_KEY, false)\nconst hostRef = ref<HTMLElement | null>(null)\nconst { width: hostWidth } = useElementSize(hostRef)\n\nconst resolvedOptions = useResolvedWidgetOptions<TextOptions>(() => props.widget)\n\nconst text = computed(() => coerceBindingDisplayString(resolvedOptions.value.text, DEFAULT_TEXT_OPTIONS.text))\n\nconst { scopeAttr, scopedStyleCss, activeBreakpoint } = useWidgetVisualStyles(() => props.widget, {\n designMode: () => designMode,\n containerWidth: () => hostWidth.value,\n hostRef\n})\n\nconst resolvedView = computed(() => resolveTextViewStyle(getWidgetDefaultStyle(props.widget), activeBreakpoint.value))\n\nconst textClasses = computed(() => resolvedView.value.classes)\n\nconst clipScopedCss = computed(() => {\n const layout = resolvedView.value.style\n if (!Object.keys(layout).length) return ''\n return buildScopedStyleCss(props.widget.id, layout)\n})\n\nconst mergedScopedCss = computed(() => [scopedStyleCss.value, clipScopedCss.value].filter(Boolean).join('\\n'))\n\nconst decorationClasses = computed(() =>\n resolveTextDecorationClasses({\n strikethrough: resolvedOptions.value.strikethrough === true,\n underline: resolvedOptions.value.underline === true,\n mark: resolvedOptions.value.mark === true\n })\n)\n\nconst textTag = computed(() => (resolvedOptions.value.mark === true ? 'mark' : 'span'))\n\nconst { domEventHandlers } = useWidgetEvents({\n widget: toRef(props, 'widget'),\n designMode: () => designMode\n})\n</script>\n\n<template>\n <div ref=\"hostRef\" :class=\"textClasses\" v-bind=\"scopeAttr\" v-on=\"domEventHandlers\">\n <component :is=\"textTag\" class=\"[box-decoration-break:clone]\" :class=\"decorationClasses\">\n {{ text }}\n </component>\n <ScopedStyleBlock :css=\"mergedScopedCss\" :id=\"widget.id\" />\n </div>\n</template>\n","import type { Widget } from '../../../core/index.ts'\nimport { ensureWidgetStyles } from '../../../core/index.ts'\nimport { patchWidgetEvents } from '../../../runtime/runtime.ts'\nimport type { CssStyle, FlatCssStyle } from '../../../core/index.ts'\n\nexport type DividerOrientation = 'left' | 'right' | 'center'\nexport type DividerType = 'horizontal' | 'vertical'\n\nexport const DIVIDER_ORIENTATION_OPTIONS: { value: DividerOrientation; label: string }[] = [\n { value: 'left', label: '左' },\n { value: 'right', label: '右' },\n { value: 'center', label: '居中' }\n]\n\nexport const DIVIDER_TYPE_OPTIONS: { value: DividerType; label: string }[] = [\n { value: 'horizontal', label: '水平' },\n { value: 'vertical', label: '垂直' }\n]\n\n/** 文案边距单位(与布局宽高 UnitInput 一致,不含 auto) */\nexport const ORIENTATION_MARGIN_UNITS = ['px', '%', 'em', 'rem'] as const\n\n/** 转为 UnitInput 绑定的字符串(如 16 → 16px) */\nexport function formatOrientationMarginInput(margin?: string | number | null): string {\n if (margin === undefined || margin === null || margin === '') return ''\n if (typeof margin === 'number' && Number.isFinite(margin)) return `${margin}px`\n const trimmed = String(margin).trim()\n if (!trimmed) return ''\n if (/^-?\\d+(\\.\\d+)?$/.test(trimmed)) return `${trimmed}px`\n return trimmed\n}\n\n/** 持久化用的带单位文案边距 */\nexport function normalizeOrientationMargin(margin?: string | number | null): string | undefined {\n const formatted = formatOrientationMarginInput(margin)\n return formatted || undefined\n}\n\nexport const DEFAULT_DIVIDER_TITLE = '分割线'\n\nexport type DividerOptions = {\n hidden?: boolean\n text?: string\n dashed?: boolean\n orientation?: DividerOrientation\n orientationMargin?: string | number\n type?: DividerType\n}\n\n/** 水平占满宽度;垂直为 inline-block(高度由样式类 0.9em 决定,与 Ant Design Divider 一致) */\nexport function getDividerLayoutStyle(type?: DividerType): FlatCssStyle {\n return type === 'vertical' ? { display: 'inline-block' } : { display: 'block', width: '100%' }\n}\n\nexport const DEFAULT_DIVIDER_OPTIONS: Required<Pick<DividerOptions, 'text' | 'dashed' | 'orientation' | 'type'>> = {\n text: '',\n dashed: false,\n orientation: 'center',\n type: 'horizontal'\n}\n\nconst DIVIDER_ORIENTATIONS = new Set<DividerOrientation>(DIVIDER_ORIENTATION_OPTIONS.map(item => item.value))\nconst DIVIDER_TYPES = new Set<DividerType>(DIVIDER_TYPE_OPTIONS.map(item => item.value))\n\nexport function isDividerHorizontal(type?: DividerType) {\n return type !== 'vertical'\n}\n\nexport function isDividerOrientationMarginApplicable(orientation?: DividerOrientation) {\n return orientation === 'left' || orientation === 'right'\n}\n\nconst DIVIDER_BASE = 'box-border m-0 p-0 text-sm leading-[1.5714] text-[var(--colorText)]'\n\n/** 水平无文案:元素自身 top 边框;有文案:flex + 伪元素,伪元素需 translateY(50%) 与文字中线对齐 */\nexport function resolveDividerViewClasses(options: {\n type?: DividerType\n dashed?: boolean\n showText?: boolean\n}) {\n const isHorizontal = isDividerHorizontal(options.type)\n if (!isHorizontal) {\n return [\n DIVIDER_BASE,\n 'relative -top-[0.06em] inline-block h-[0.9em] mx-2 align-middle border-0 border-s border-[var(--colorSplit)]',\n options.dashed ? 'border-dashed' : 'border-solid'\n ].filter(Boolean) as string[]\n }\n\n if (!options.showText) {\n return [\n DIVIDER_BASE,\n 'block w-full min-w-full clear-both my-6 border-0 border-t border-[var(--colorSplit)]',\n options.dashed ? 'border-dashed' : 'border-solid'\n ].filter(Boolean) as string[]\n }\n\n const classes = [\n DIVIDER_BASE,\n 'lc-divider-with-text w-full min-w-full my-4 whitespace-nowrap border-0 border-t-0 font-medium text-base'\n ]\n\n return classes.filter(Boolean) as string[]\n}\n\nexport function ensureDividerOptions(widget: Widget) {\n widget.options ??= {}\n const options = widget.options as DividerOptions\n if (options.text === undefined) options.text = DEFAULT_DIVIDER_OPTIONS.text\n if (options.dashed === undefined) options.dashed = DEFAULT_DIVIDER_OPTIONS.dashed\n if (options.orientation === undefined || !DIVIDER_ORIENTATIONS.has(options.orientation)) {\n options.orientation = DEFAULT_DIVIDER_OPTIONS.orientation\n }\n if (options.type === undefined || !DIVIDER_TYPES.has(options.type)) {\n options.type = DEFAULT_DIVIDER_OPTIONS.type\n }\n const layoutStyle = getDividerLayoutStyle(options.type)\n const styles = ensureWidgetStyles(widget)\n if (!styles.default) {\n styles.default = { ...layoutStyle }\n } else {\n styles.default.display = layoutStyle.display\n if (options.type === 'vertical') {\n if (styles.default.height === '100%') {\n delete styles.default.height\n }\n delete styles.default.width\n } else {\n styles.default.width = styles.default.width ?? layoutStyle.width\n delete styles.default.height\n }\n }\n if (!isDividerOrientationMarginApplicable(options.orientation)) {\n delete options.orientationMargin\n } else if (options.orientationMargin !== undefined) {\n const normalized = normalizeOrientationMargin(options.orientationMargin)\n if (normalized === undefined) {\n delete options.orientationMargin\n } else {\n options.orientationMargin = normalized\n }\n }\n patchWidgetEvents(widget)\n return options\n}\n","<script setup lang=\"ts\">\nimport type { Widget } from '../../../core/index.ts'\nimport { coerceBindingDisplayString, useWidgetEvents, useWidgetVisualStyles, useResolvedWidgetOptions, LOWCODE_DESIGN_MODE_KEY } from '../../../runtime/runtime.ts'\nimport ScopedStyleBlock from '../../../runtime/scoped-style-block.vue'\nimport { useElementSize } from '@vueuse/core'\nimport { ref } from 'vue'\nimport {\n DEFAULT_DIVIDER_OPTIONS,\n type DividerOptions,\n type DividerOrientation,\n type DividerType,\n isDividerHorizontal,\n isDividerOrientationMarginApplicable,\n normalizeOrientationMargin,\n resolveDividerViewClasses\n} from './options.ts'\nimport { computed, inject, toRef } from 'vue'\n\nconst props = defineProps<{\n widget: Widget\n parentWidget?: Widget | null\n index?: number\n}>()\n\nconst designMode = inject(LOWCODE_DESIGN_MODE_KEY, false)\n\nconst resolvedOptions = useResolvedWidgetOptions<DividerOptions>(() => props.widget)\n\nconst dashed = computed(() => resolvedOptions.value.dashed === true)\n\nconst orientation = computed<DividerOrientation>(() => {\n const value = resolvedOptions.value.orientation\n return value === 'left' || value === 'right' || value === 'center' ? value : DEFAULT_DIVIDER_OPTIONS.orientation\n})\n\nconst orientationMargin = computed(() => {\n if (!isDividerOrientationMarginApplicable(orientation.value)) {\n return undefined\n }\n const margin = resolvedOptions.value.orientationMargin\n return normalizeOrientationMargin(typeof margin === 'string' || typeof margin === 'number' ? margin : undefined)\n})\n\nconst dividerType = computed<DividerType>(() => {\n const value = resolvedOptions.value.type\n return value === 'vertical' ? value : DEFAULT_DIVIDER_OPTIONS.type\n})\n\nconst isHorizontal = computed(() => isDividerHorizontal(dividerType.value))\n\nconst hostRef = ref<HTMLElement | null>(null)\nconst { width: hostWidth } = useElementSize(hostRef)\nconst { scopeAttr, scopedStyleCss } = useWidgetVisualStyles(() => props.widget, {\n designMode: () => designMode,\n containerWidth: () => hostWidth.value,\n hostRef\n})\n\nconst text = computed(() => coerceBindingDisplayString(resolvedOptions.value.text, DEFAULT_DIVIDER_OPTIONS.text))\n\nconst showText = computed(() => isHorizontal.value && text.value.length > 0)\n\nconst hasCustomOrientationMargin = computed(\n () => showText.value && orientationMargin.value != null && orientationMargin.value !== ''\n)\n\nconst dividerClass = computed(() =>\n [\n ...resolveDividerViewClasses({\n type: dividerType.value,\n dashed: dashed.value,\n showText: showText.value\n }),\n showText.value && `lc-divider-orient-${orientation.value}`,\n hasCustomOrientationMargin.value && orientation.value === 'left' && 'lc-divider-custom-margin-left',\n hasCustomOrientationMargin.value && orientation.value === 'right' && 'lc-divider-custom-margin-right',\n dashed.value && showText.value && 'lc-divider-dashed-text'\n ].filter(Boolean)\n)\n\nconst innerMarginCss = computed(() => {\n if (!hasCustomOrientationMargin.value || orientationMargin.value == null || orientationMargin.value === '') {\n return ''\n }\n const margin = typeof orientationMargin.value === 'number' ? `${orientationMargin.value}px` : orientationMargin.value\n const property = orientation.value === 'left' ? 'margin-inline-start' : 'margin-inline-end'\n return `[data-lc-rs=\"${props.widget.id}\"] .lc-divider-inner{${property}:${margin}}`\n})\n\nconst mergedScopedCss = computed(() => [scopedStyleCss.value, innerMarginCss.value].filter(Boolean).join('\\n'))\n\nconst { domEventHandlers } = useWidgetEvents({\n widget: toRef(props, 'widget'),\n designMode: () => designMode\n})\n</script>\n\n<template>\n <div ref=\"hostRef\" :class=\"dividerClass\" v-bind=\"scopeAttr\" role=\"separator\" v-on=\"domEventHandlers\">\n <template v-if=\"showText\">\n <span class=\"lc-divider-line\" aria-hidden=\"true\" />\n <span class=\"lc-divider-inner\">{{ text }}</span>\n <span class=\"lc-divider-line\" aria-hidden=\"true\" />\n </template>\n <ScopedStyleBlock :css=\"mergedScopedCss\" :id=\"widget.id\" />\n </div>\n</template>\n\n<style scoped>\n.lc-divider-with-text {\n display: grid;\n align-items: center;\n}\n\n.lc-divider-line {\n min-width: 0;\n height: 0;\n border: 0;\n border-top: 1px solid var(--colorSplit);\n}\n\n.lc-divider-inner {\n padding-inline: 1em;\n}\n\n.lc-divider-orient-center {\n grid-template-columns: 1fr auto 1fr;\n}\n\n.lc-divider-orient-left {\n grid-template-columns: 5% auto 1fr;\n}\n\n.lc-divider-orient-right {\n grid-template-columns: 1fr auto 5%;\n}\n\n.lc-divider-custom-margin-left {\n grid-template-columns: 0 auto 1fr;\n}\n\n.lc-divider-custom-margin-right {\n grid-template-columns: 1fr auto 0;\n}\n\n.lc-divider-dashed-text .lc-divider-line {\n border-top-style: dashed;\n}\n</style>\n","<script setup lang=\"ts\">\ndefineOptions({ name: 'CanvasDraggableList' })\n\nimport type { Designer } from '../designer.ts'\nimport type { Widget } from '../../core/index.ts'\nimport CanvasSelectionChrome from '../../materials/shared/designer/selection-chrome.vue'\nimport DesignerWidgetNode from './widget-node.vue'\nimport { hasExplicitWidgetWidth } from '../../runtime/runtime.ts'\nimport { LOWCODE_DESIGN_MODE_KEY } from '../../runtime/runtime.ts'\nimport { getWidgetDefaultStyle, isWidgetEffectivelyLocked, moveArrayIndex, shouldWidgetStretchFullWidth, widgetCanAcceptDropTarget } from '../../core/index.ts'\nimport { useInjectMaterialRegistry } from '../material-registry.ts'\nimport Sortable, { type SortableEvent } from 'sortablejs'\nimport { dispatchWidgetDragPointerdown, LOWCODE_WIDGET_DRAG_START_KEY, type WidgetDragStart } from '../../materials/shared/designer/helpers.ts'\nimport { computed, inject, nextTick, onBeforeUnmount, onMounted, provide, ref, shallowRef, toRef, watch, type ComponentPublicInstance, type MaybeRefOrGetter, toValue } from 'vue'\n\ntype DragItemEl = HTMLElement & { _underlying_vm_?: Widget }\n\nconst SORTABLE_GROUP = 'dragGroup'\nconst EMPTY_INSERT_THRESHOLD = 48\n\ntype UseSortableWidgetListOptions = {\n designer: Designer\n widgets: MaybeRefOrGetter<Widget[]>\n parentWidget?: MaybeRefOrGetter<Widget | null | undefined>\n emptyHint?: string\n dropZoneId?: MaybeRefOrGetter<number | undefined>\n}\n\nfunction useSortableWidgetList(options: UseSortableWidgetListOptions) {\n const materialRegistry = useInjectMaterialRegistry()\n const anchorRef = shallowRef<HTMLElement | null>(null)\n const sortable = shallowRef<Sortable | null>(null)\n\n const widgets = computed(() => {\n void options.designer.pageTreeRevision\n return toValue(options.widgets) ?? []\n })\n const parentWidget = computed(() => toValue(options.parentWidget) ?? null)\n const emptyHint = options.emptyHint ?? '拖拽组件到这里'\n\n const isEmpty = computed(() => !widgets.value.length)\n\n const dropZoneId = computed(() => toValue(options.dropZoneId) ?? parentWidget.value?.id ?? 0)\n\n const showEmptyHint = computed(() => isEmpty.value && options.designer.dropHoverEmptyZoneId !== dropZoneId.value)\n\n const canAcceptDrop = computed(() => {\n void options.designer.pageTreeRevision\n const parent = parentWidget.value\n if (!parent) return true\n return widgetCanAcceptDropTarget(options.designer.page, parent, {\n isContainerType: materialRegistry.isContainerType,\n getKeyedSlotConfig: materialRegistry.getKeyedSlotConfig\n })\n })\n\n const widgetIdsKey = computed(() => widgets.value.map(widget => widget.id).join(','))\n\n function destroySortable() {\n sortable.value?.destroy()\n sortable.value = null\n }\n\n function resolveWidgetFromItem(item: DragItemEl): Widget | null {\n if (item._underlying_vm_) return item._underlying_vm_\n\n const id = Number(item.dataset.widgetId)\n if (!Number.isNaN(id)) {\n const found = options.designer.findWidgetById(id)\n if (found) return found\n }\n\n return options.designer.pendingPaletteWidget\n }\n\n function onSortableAdd(evt: SortableEvent) {\n const item = evt.item as DragItemEl\n const widget = options.designer.pendingPaletteWidget ?? resolveWidgetFromItem(item)\n\n if (!widget) return\n\n const list = widgets.value\n const newIndex = evt.newIndex ?? list.length\n options.designer.moveWidgetToList(widget, list, newIndex)\n\n item.remove()\n options.designer.setPendingPaletteWidget(null)\n if (options.designer.dropHoverEmptyZoneId === dropZoneId.value) {\n options.designer.setDropHoverEmptyZoneId(null)\n }\n }\n\n function onSortableRemove(evt: SortableEvent) {\n const item = evt.item as DragItemEl\n const widget = resolveWidgetFromItem(item)\n if (!widget) return\n\n const list = widgets.value\n const index = list.findIndex(w => w.id === widget.id)\n if (index >= 0) {\n list.splice(index, 1)\n }\n }\n\n function onSortableUpdate(evt: SortableEvent) {\n const { oldIndex, newIndex } = evt\n if (oldIndex === undefined || newIndex === undefined || oldIndex === newIndex) return\n moveArrayIndex(widgets.value, oldIndex, newIndex)\n }\n\n function onSortableEnd() {\n options.designer.setPendingPaletteWidget(null)\n }\n\n function setAnchorEl(el: Element | ComponentPublicInstance | null) {\n if (el instanceof HTMLElement) {\n anchorRef.value = el\n return\n }\n if (el && '$el' in el && el.$el instanceof HTMLElement) {\n anchorRef.value = el.$el\n return\n }\n anchorRef.value = null\n }\n\n function resolveSortableRoot(): HTMLElement | null {\n return anchorRef.value?.parentElement ?? null\n }\n\n function initSortable() {\n const root = resolveSortableRoot()\n if (!root) return\n\n destroySortable()\n\n const designer = options.designer\n const zoneId = dropZoneId.value\n\n sortable.value = Sortable.create(root, {\n group: { name: SORTABLE_GROUP, pull: true, put: canAcceptDrop.value },\n animation: 150,\n draggable: '> .lowcode-draggable-item',\n filter: '.lowcode-no-drag',\n preventOnFilter: true,\n forceFallback: true,\n emptyInsertThreshold: EMPTY_INSERT_THRESHOLD,\n swapThreshold: 0.65,\n invertSwap: true,\n fallbackOnBody: true,\n fallbackTolerance: 8,\n ghostClass: 'lowcode-sortable-ghost',\n onStart(evt: SortableEvent) {\n designer.beginPageHistoryWatchSuspend()\n const id = Number((evt.item as DragItemEl).dataset.widgetId)\n const widget = designer.findWidgetById(id)\n if (widget) {\n ;(evt.item as DragItemEl)._underlying_vm_ = widget\n }\n },\n onChange: () => {\n if (!isEmpty.value) return\n designer.setDropHoverEmptyZoneId(zoneId)\n },\n onAdd: onSortableAdd,\n onRemove: onSortableRemove,\n onUpdate: onSortableUpdate,\n onEnd: () => {\n designer.setDropHoverEmptyZoneId(null)\n onSortableEnd()\n nextTick(() => {\n designer.endPageHistoryWatchSuspend()\n designer.recordHistoryNow()\n })\n }\n })\n }\n\n function draggableItemClass(widget: Widget): string | undefined {\n const classes: string[] = []\n if (isWidgetEffectivelyLocked(options.designer.page, widget)) {\n classes.push('lowcode-no-drag')\n }\n if (hasExplicitWidgetWidth(getWidgetDefaultStyle(widget))) {\n classes.push('self-start')\n } else if (shouldWidgetStretchFullWidth(widget, materialRegistry)) {\n classes.push('self-stretch')\n }\n return classes.length ? classes.join(' ') : undefined\n }\n\n watch(anchorRef, () => {\n nextTick(() => initSortable())\n })\n\n watch(widgetIdsKey, () => {\n nextTick(() => initSortable())\n })\n\n watch(canAcceptDrop, () => {\n nextTick(() => initSortable())\n })\n\n watch(isEmpty, empty => {\n if (!empty && options.designer.dropHoverEmptyZoneId === dropZoneId.value) {\n options.designer.setDropHoverEmptyZoneId(null)\n }\n })\n\n onMounted(() => {\n initSortable()\n })\n\n onBeforeUnmount(() => {\n if (options.designer.dropHoverEmptyZoneId === dropZoneId.value) {\n options.designer.setDropHoverEmptyZoneId(null)\n }\n destroySortable()\n })\n\n const startWidgetDrag: WidgetDragStart = (widgetId, event) => {\n const root = resolveSortableRoot()\n if (!root) return\n\n const item = root.querySelector(`.lowcode-draggable-item[data-widget-id=\"${widgetId}\"]`) as HTMLElement | null\n if (!item) return\n\n dispatchWidgetDragPointerdown(item, event)\n }\n\n provide(LOWCODE_WIDGET_DRAG_START_KEY, startWidgetDrag)\n\n return {\n setAnchorEl,\n emptyHint,\n isEmpty,\n showEmptyHint,\n draggableItemClass,\n widgets\n }\n}\n\nconst props = withDefaults(\n defineProps<{\n designer: Designer\n parentWidget?: Widget | null\n widgets: Widget[]\n emptyHint?: string\n dropZoneId?: number\n }>(),\n {\n parentWidget: null,\n emptyHint: '拖拽组件到这里'\n }\n)\n\nconst { setAnchorEl, isEmpty, showEmptyHint, emptyHint, draggableItemClass, widgets } = useSortableWidgetList({\n designer: props.designer,\n widgets: toRef(props, 'widgets'),\n parentWidget: toRef(props, 'parentWidget'),\n emptyHint: props.emptyHint,\n dropZoneId: toRef(props, 'dropZoneId')\n})\n\nconst designMode = inject(LOWCODE_DESIGN_MODE_KEY, false)\n\nconst emptyPlaceholderClass = computed(() => {\n if (showEmptyHint.value) {\n return 'flex h-full min-h-[48px] w-full items-center justify-center bg-[var(--colorFillTertiary)]'\n }\n if (designMode) {\n return 'flex min-h-[48px] w-full items-center justify-center'\n }\n return 'hidden'\n})\n</script>\n\n<template>\n <div v-if=\"isEmpty\" :ref=\"setAnchorEl\" class=\"pointer-events-none text-center text-[var(--colorPrimary)] opacity-50\" :class=\"emptyPlaceholderClass\">\n {{ emptyHint }}\n </div>\n <div\n v-for=\"(widget, index) in widgets\"\n :key=\"widget.id\"\n :ref=\"\n el => {\n if (index === 0) setAnchorEl(el)\n }\n \"\n class=\"lowcode-draggable-item contents\"\n :class=\"draggableItemClass(widget)\"\n :data-widget-id=\"widget.id\"\n >\n <CanvasSelectionChrome :designer=\"designer\" :widget=\"widget\" :parent-widget=\"parentWidget\">\n <DesignerWidgetNode :designer=\"designer\" :widget=\"widget\" :parent-widget=\"parentWidget\" :index=\"index\" />\n </CanvasSelectionChrome>\n </div>\n</template>\n","<script setup lang=\"ts\">\ndefineOptions({ name: 'DesignModeContainerChildren' })\n\nimport type { Widget } from '../../../core/index.ts'\nimport CanvasDraggableList from '../../../designer/canvas/draggable-list.vue'\nimport { useInjectDesigner } from '../../../designer/material-registry.ts'\nimport { LOWCODE_DESIGN_MODE_KEY } from '../../../runtime/runtime.ts'\nimport { computed, inject } from 'vue'\n\nconst props = defineProps<{\n widget: Widget\n emptyHint?: string\n dropZoneId?: number\n}>()\n\nconst designMode = inject(LOWCODE_DESIGN_MODE_KEY, false)\nconst designer = useInjectDesigner()\n\nconst childWidgets = computed(() => {\n void designer?.pageTreeRevision\n return props.widget.children ?? []\n})\n\nconst childListKey = computed(() => {\n void designer?.pageTreeRevision\n return childWidgets.value.map(item => item.id).join(',')\n})\n</script>\n\n<template>\n <CanvasDraggableList\n v-if=\"designMode && designer\"\n :key=\"childListKey\"\n :designer=\"designer\"\n :parent-widget=\"widget\"\n :widgets=\"childWidgets\"\n :empty-hint=\"emptyHint\"\n :drop-zone-id=\"dropZoneId\"\n />\n <slot v-else />\n</template>\n","import type { Widget } from '../../../core/index.ts'\nimport { ensureWidgetStyles } from '../../../core/index.ts'\nimport { patchWidgetEvents } from '../../../runtime/runtime.ts'\nimport type { CssStyle } from '../../../core/index.ts'\n\nexport type CardSize = 'default' | 'small'\n\nexport const CARD_SIZE_OPTIONS: { value: CardSize; label: string }[] = [\n { value: 'default', label: '默认' },\n { value: 'small', label: '紧凑' }\n]\n\nexport const DEFAULT_CARD_WIDGET_TITLE = '卡片'\nexport const DEFAULT_CARD_HEAD_TITLE = '卡片标题'\n\nexport type CardOptions = {\n hidden?: boolean\n /** 卡片头部展示标题 */\n cardTitle?: string\n size?: CardSize\n}\n\nexport const DEFAULT_CARD_STYLE: CssStyle = {\n display: 'block',\n height: 'auto'\n}\n\nexport const DEFAULT_CARD_OPTIONS: Required<Pick<CardOptions, 'cardTitle' | 'size'>> = {\n cardTitle: DEFAULT_CARD_HEAD_TITLE,\n size: 'default'\n}\n\nexport function resolveCardViewClasses(size: CardSize = DEFAULT_CARD_OPTIONS.size) {\n return {\n root: [\n 'flex flex-col box-border m-0 p-0 text-sm leading-[1.5714] text-[var(--colorText)] bg-[var(--colorBgContainer)] rounded-lg'\n ],\n head: [\n 'flex items-center border-b border-[var(--colorSplit)]',\n size === 'small' ? 'min-h-[38px] px-3' : 'min-h-14 px-6'\n ],\n title: 'flex-1 overflow-hidden font-semibold whitespace-nowrap text-ellipsis',\n body: size === 'small' ? 'p-3' : 'p-6'\n }\n}\n\nexport function ensureCardOptions(widget: Widget) {\n widget.options ??= {}\n const options = widget.options as CardOptions\n if (options.cardTitle === undefined) {\n options.cardTitle = DEFAULT_CARD_OPTIONS.cardTitle\n }\n if (options.size === undefined || (options.size !== 'default' && options.size !== 'small')) {\n options.size = DEFAULT_CARD_OPTIONS.size\n }\n if (widget.styles?.default === undefined) {\n ensureWidgetStyles(widget).default = { ...DEFAULT_CARD_STYLE }\n }\n patchWidgetEvents(widget)\n return options\n}\n","<script setup lang=\"ts\">\nimport type { Widget } from '../../../core/index.ts'\nimport DesignModeContainerChildren from '../../shared/designer/container-children.vue'\nimport { useWidgetEvents } from '../../../runtime/runtime.ts'\nimport { LOWCODE_DESIGN_MODE_KEY } from '../../../runtime/runtime.ts'\nimport { DEFAULT_CARD_OPTIONS, resolveCardViewClasses, type CardOptions, type CardSize } from './options.ts'\nimport { coerceBindingDisplayString, useCardContainerStyle, useResolvedWidgetOptions } from '../../../runtime/runtime.ts'\nimport ScopedStyleBlock from '../../../runtime/scoped-style-block.vue'\nimport { computed, inject, toRef } from 'vue'\n\nconst props = defineProps<{\n widget: Widget\n parentWidget?: Widget | null\n index?: number\n}>()\n\nconst designMode = inject(LOWCODE_DESIGN_MODE_KEY, false)\n\nconst resolvedOptions = useResolvedWidgetOptions<CardOptions>(() => props.widget)\n\nconst cardTitle = computed(() => coerceBindingDisplayString(resolvedOptions.value.cardTitle))\nconst showHead = computed(() => Boolean(cardTitle.value))\n\nconst cardSize = computed<CardSize>(() => (props.widget.options?.size === 'small' ? 'small' : DEFAULT_CARD_OPTIONS.size))\n\nconst cardClasses = computed(() => resolveCardViewClasses(cardSize.value))\n\nconst { bodyScopeAttr, scopeAttr, scopedStyleCss, hostRef } = useCardContainerStyle(\n () => props.widget,\n {},\n { omitMinHeightOnCard: true, bodyPadding: '12px' }\n)\n\nconst { domEventHandlers } = useWidgetEvents({\n widget: toRef(props, 'widget'),\n designMode: () => designMode\n})\n</script>\n\n<template>\n <ScopedStyleBlock :css=\"scopedStyleCss\" :id=\"widget.id\" />\n <div ref=\"hostRef\" :class=\"cardClasses.root\" v-bind=\"scopeAttr\" v-on=\"domEventHandlers\">\n <div v-if=\"showHead\" :class=\"cardClasses.head\">\n <div :class=\"cardClasses.title\">{{ cardTitle }}</div>\n </div>\n <div :class=\"cardClasses.body\" v-bind=\"bodyScopeAttr\">\n <DesignModeContainerChildren :widget=\"widget\">\n <slot />\n </DesignModeContainerChildren>\n </div>\n </div>\n</template>\n","import type { Widget, CssStyle } from '../../../../core/index.ts'\nimport {\n ensureInternalPaneWidget,\n FLEX_LAYOUT_FLEX_DEFAULTS,\n resolveInternalPaneContainerCssStyle,\n resolveInternalPaneContainerStyle\n} from '../../../../runtime/runtime.ts'\nimport { resolveCarouselHeight } from '../options.ts'\n\nexport type CarouselSlideOptions = {\n hidden?: boolean\n}\n\nexport const CAROUSEL_SLIDE_FLEX_LAYOUT_DEFAULTS = FLEX_LAYOUT_FLEX_DEFAULTS\n\nexport const DEFAULT_CAROUSEL_SLIDE_STYLE: CssStyle = {}\n\nexport const DEFAULT_CAROUSEL_SLIDE_TITLE = '轮播项'\n\nexport function resolveCarouselSlideHeight(carouselWidget?: Widget | null): string | undefined {\n return resolveCarouselHeight(carouselWidget)\n}\n\nexport function resolveCarouselSlideContainerCssStyle(widget: Widget, parentWidget?: Widget | null, includeUserStyle = true) {\n const merged = resolveInternalPaneContainerCssStyle(widget, DEFAULT_CAROUSEL_SLIDE_STYLE, includeUserStyle, ['height'])\n const carouselHeight = resolveCarouselSlideHeight(parentWidget)\n if (carouselHeight) {\n merged.height = carouselHeight\n }\n return merged\n}\n\nexport function resolveCarouselSlideContainerStyle(widget: Widget, parentWidget?: Widget | null, includeUserStyle = true): Record<string, string> {\n const merged = resolveInternalPaneContainerStyle(widget, DEFAULT_CAROUSEL_SLIDE_STYLE, includeUserStyle, ['height'])\n const carouselHeight = resolveCarouselSlideHeight(parentWidget)\n if (carouselHeight) {\n merged.height = carouselHeight\n }\n return merged\n}\n\nexport function ensureCarouselSlideWidget(widget: Widget): void {\n ensureInternalPaneWidget(widget, {\n defaultTitle: DEFAULT_CAROUSEL_SLIDE_TITLE,\n defaultStyle: DEFAULT_CAROUSEL_SLIDE_STYLE,\n beforePatchStyle: widget => {\n delete widget.styles?.default?.height\n }\n })\n}\n","import type { Widget } from '../../../core/index.ts'\nimport { ensureWidgetEditorTitle } from '../../../core/index.ts'\nimport { ensureWidgetStyles } from '../../../core/index.ts'\nimport { patchWidgetEvents } from '../../../runtime/runtime.ts'\nimport type { CssStyle } from '../../../core/index.ts'\nimport { createKeyedSlotMaterialHelpers } from '../../../runtime/runtime.ts'\nimport { DEFAULT_CAROUSEL_SLIDE_STYLE, DEFAULT_CAROUSEL_SLIDE_TITLE, ensureCarouselSlideWidget } from './carousel-slide/options.ts'\n\nexport type CarouselEffect = 'scrollx' | 'fade'\nexport type CarouselDotPosition = 'top' | 'bottom' | 'left' | 'right'\n\nexport const CAROUSEL_EFFECT_OPTIONS: { value: CarouselEffect; label: string }[] = [\n { value: 'scrollx', label: '横向滚动' },\n { value: 'fade', label: '淡入淡出' }\n]\n\nexport const CAROUSEL_DOT_POSITION_OPTIONS: { value: CarouselDotPosition; label: string }[] = [\n { value: 'bottom', label: '底部' },\n { value: 'top', label: '顶部' },\n { value: 'left', label: '左侧' },\n { value: 'right', label: '右侧' }\n]\n\nexport const DEFAULT_CAROUSEL_TITLE = '走马灯'\nexport const DEFAULT_CAROUSEL_MIN_HEIGHT = '160px'\n\nexport type CarouselOptions = {\n hidden?: boolean\n activeKey?: number\n /** 轮播项统一高度;空或 auto 时为自动高度 */\n height?: string\n autoplay?: boolean\n autoplaySpeed?: number\n dots?: boolean\n /** 指示点背景色(非激活态通过 opacity 区分) */\n dotColor?: string\n dotPosition?: CarouselDotPosition\n effect?: CarouselEffect\n speed?: number\n pauseOnHover?: boolean\n arrows?: boolean\n infinite?: boolean\n}\n\nexport const DEFAULT_CAROUSEL_STYLE: CssStyle = {\n display: 'block',\n minHeight: DEFAULT_CAROUSEL_MIN_HEIGHT\n}\n\nexport const DEFAULT_CAROUSEL_OPTIONS: Required<Pick<CarouselOptions, 'height' | 'autoplay' | 'autoplaySpeed' | 'dots' | 'dotColor' | 'dotPosition' | 'effect' | 'speed' | 'pauseOnHover' | 'arrows' | 'infinite'>> = {\n height: '200px',\n autoplay: true,\n autoplaySpeed: 3000,\n dots: true,\n dotColor: 'rgba(0, 0, 0, 1)',\n dotPosition: 'bottom',\n effect: 'scrollx',\n speed: 500,\n pauseOnHover: true,\n arrows: false,\n infinite: true\n}\n\nexport function ensureCarouselOptions(widget: Widget) {\n ensureWidgetEditorTitle(widget, DEFAULT_CAROUSEL_TITLE)\n const options = (widget.options ?? {}) as CarouselOptions\n widget.options = options\n if (options.height === undefined) {\n options.height = DEFAULT_CAROUSEL_OPTIONS.height\n }\n if (options.autoplay === undefined) {\n options.autoplay = DEFAULT_CAROUSEL_OPTIONS.autoplay\n }\n if (options.autoplaySpeed === undefined || options.autoplaySpeed < 500) {\n options.autoplaySpeed = DEFAULT_CAROUSEL_OPTIONS.autoplaySpeed\n }\n if (options.dots === undefined) {\n options.dots = DEFAULT_CAROUSEL_OPTIONS.dots\n }\n if (options.dotColor === undefined || !String(options.dotColor).trim()) {\n options.dotColor = DEFAULT_CAROUSEL_OPTIONS.dotColor\n }\n if (options.dotPosition === undefined || !CAROUSEL_DOT_POSITION_OPTIONS.some(item => item.value === options.dotPosition)) {\n options.dotPosition = DEFAULT_CAROUSEL_OPTIONS.dotPosition\n }\n if (options.effect === undefined || !CAROUSEL_EFFECT_OPTIONS.some(item => item.value === options.effect)) {\n options.effect = DEFAULT_CAROUSEL_OPTIONS.effect\n }\n if (options.speed === undefined || options.speed < 0) {\n options.speed = DEFAULT_CAROUSEL_OPTIONS.speed\n }\n if (options.pauseOnHover === undefined) {\n options.pauseOnHover = DEFAULT_CAROUSEL_OPTIONS.pauseOnHover\n }\n if (options.arrows === undefined) {\n options.arrows = DEFAULT_CAROUSEL_OPTIONS.arrows\n }\n if (options.infinite === undefined) {\n options.infinite = DEFAULT_CAROUSEL_OPTIONS.infinite\n }\n if (widget.styles?.default === undefined) {\n ensureWidgetStyles(widget).default = { ...DEFAULT_CAROUSEL_STYLE }\n }\n patchWidgetEvents(widget)\n return options\n}\n\nexport function resolveCarouselDotColor(options?: CarouselOptions | null): string {\n const color = options?.dotColor\n return typeof color === 'string' && color.trim() ? color.trim() : DEFAULT_CAROUSEL_OPTIONS.dotColor\n}\n\nexport function resolveCarouselDotStyleVars(options?: CarouselOptions | null): Record<string, string> {\n return {\n '--lc-carousel-dot-color': resolveCarouselDotColor(options)\n }\n}\n\nexport function resolveCarouselHeight(widget?: Widget | null): string | undefined {\n const height = (widget?.options as CarouselOptions | undefined)?.height\n if (height == null || height === '' || height === 'auto') {\n return undefined\n }\n return height\n}\n\nconst CAROUSEL_DOTS_POSITION: Record<CarouselDotPosition, string> = {\n bottom: 'bottom-3 left-1/2 -translate-x-1/2',\n top: 'top-3 left-1/2 -translate-x-1/2',\n left: 'top-1/2 left-3 flex-col -translate-y-1/2',\n right: 'top-1/2 right-3 flex-col -translate-y-1/2'\n}\n\nexport function resolveCarouselViewClasses(dotPosition: CarouselDotPosition) {\n return {\n root: 'w-full',\n carousel: ['relative w-full h-full', `lc-carousel--dots-${dotPosition}`],\n viewport: 'relative overflow-hidden w-full h-full',\n track: 'flex w-full h-full',\n slide: 'flex-[0_0_100%] w-full h-full min-w-0',\n fade: 'relative w-full h-full',\n fadeItem: (active: boolean) => [\n 'lc-carousel-fade-item absolute inset-0 opacity-0 pointer-events-none',\n active && 'opacity-100 pointer-events-auto'\n ].filter(Boolean),\n dots: ['absolute z-10 flex gap-1.5 m-0 p-0 list-none', CAROUSEL_DOTS_POSITION[dotPosition]],\n dotButton: (active: boolean) => [\n 'w-2 h-2 p-0 border-0 rounded-full cursor-pointer transition-opacity duration-200',\n 'bg-[var(--lc-carousel-dot-color,var(--colorPrimary))]',\n active ? 'opacity-100' : 'opacity-30 hover:opacity-45 focus:opacity-45'\n ],\n arrow: 'absolute top-1/2 z-10 flex justify-center items-center w-8 h-8 -mt-4 text-white text-base leading-none bg-black/25 border-0 rounded-full cursor-pointer transition-colors duration-200 hover:bg-black/45 focus:bg-black/45',\n arrowPrev: 'start-3',\n arrowNext: 'end-3'\n }\n}\n\nconst carouselSlot = createKeyedSlotMaterialHelpers({\n containerType: 'carousel',\n childType: 'carousel-slide',\n defaultChildTitle: DEFAULT_CAROUSEL_SLIDE_TITLE,\n childTitlePrefix: '轮播项',\n defaultChildStyle: DEFAULT_CAROUSEL_SLIDE_STYLE,\n defaultChildCount: 3,\n ensureContainerOptions: ensureCarouselOptions,\n ensureChildOptions: ensureCarouselSlideWidget\n})\n\nexport const isCarouselSlideNode = carouselSlot.isChildNode\nexport const isCarouselNode = carouselSlot.isContainerNode\nexport const getCarouselSlideTitle = carouselSlot.getChildTitle\nexport const createCarouselSlideWidget = (title = DEFAULT_CAROUSEL_SLIDE_TITLE, id = 0) =>\n carouselSlot.createChildWidget(title, id, DEFAULT_CAROUSEL_SLIDE_STYLE)\nexport const createDefaultCarouselSlides = carouselSlot.createDefaultChildren\nexport const getCarouselSlides = carouselSlot.getChildren\nexport const resolveActiveCarouselKey = carouselSlot.resolveActiveKey\nexport const setCarouselActiveKey = carouselSlot.setActiveKey\nexport const CAROUSEL_KEYED_SLOT_CONFIG = carouselSlot.keyedSlotConfig\nexport const findOwningCarouselSlide = carouselSlot.findOwningChild\nexport const normalizeCarouselWidget = carouselSlot.normalizeWidget\n\nexport function resolveActiveCarouselIndex(widget: Widget): number {\n const slides = getCarouselSlides(widget)\n const activeKey = resolveActiveCarouselKey(widget)\n const index = slides.findIndex(slide => slide.id === activeKey)\n return index >= 0 ? index : 0\n}\n","<script setup lang=\"ts\">\nimport type { Widget } from '../../../core/index.ts'\nimport { useWidgetEvents } from '../../../runtime/runtime.ts'\nimport {\n DEFAULT_CAROUSEL_MIN_HEIGHT,\n DEFAULT_CAROUSEL_OPTIONS,\n getCarouselSlides,\n resolveActiveCarouselIndex,\n resolveActiveCarouselKey,\n resolveCarouselDotColor,\n resolveCarouselHeight,\n resolveCarouselViewClasses,\n setCarouselActiveKey,\n type CarouselDotPosition,\n type CarouselEffect\n} from './options.ts'\nimport { useContainerStyle } from '../../../runtime/runtime.ts'\nimport ScopedStyleBlock from '../../../runtime/scoped-style-block.vue'\nimport { computed, inject, nextTick, onBeforeUnmount, onMounted, ref, toRef, watch } from 'vue'\nimport { LOWCODE_DESIGN_MODE_KEY } from '../../../runtime/runtime.ts'\n\nconst props = defineProps<{\n widget: Widget\n parentWidget?: Widget | null\n index?: number\n}>()\n\nconst designMode = inject(LOWCODE_DESIGN_MODE_KEY, false)\n\nconst currentIndex = ref(0)\nconst isHovered = ref(false)\nconst isTransitioning = ref(false)\nlet autoplayTimer: ReturnType<typeof setInterval> | null = null\n\nconst { scopeAttr, scopedStyleCss: rootScopedCss, hostRef } = useContainerStyle(\n () => props.widget,\n { minHeight: DEFAULT_CAROUSEL_MIN_HEIGHT }\n)\n\nconst mergedScopedCss = computed(() => {\n const decl: string[] = []\n const height = resolveCarouselHeight(props.widget)\n if (height) decl.push(`height:${height}`)\n decl.push(`--lc-carousel-dot-color:${resolveCarouselDotColor(props.widget.options)}`)\n const extra = decl.length ? `[data-lc-rs=\"${props.widget.id}\"]{${decl.join(';')}}` : ''\n return [rootScopedCss.value, extra].filter(Boolean).join('\\n')\n})\n\nconst carouselSlides = computed(() => getCarouselSlides(props.widget))\nconst carouselSlideIdsKey = computed(() => carouselSlides.value.map(slide => slide.id).join(','))\nconst slideCount = computed(() => carouselSlides.value.length)\n\nconst dotPosition = computed<CarouselDotPosition>(() => {\n const value = props.widget.options?.dotPosition\n return value === 'top' || value === 'left' || value === 'right' ? value : DEFAULT_CAROUSEL_OPTIONS.dotPosition\n})\n\nconst effect = computed<CarouselEffect>(() => {\n const value = props.widget.options?.effect\n return value === 'fade' ? 'fade' : DEFAULT_CAROUSEL_OPTIONS.effect\n})\n\nconst autoplay = computed(() => props.widget.options?.autoplay !== false)\n\nconst autoplaySpeed = computed(() => {\n const value = Number(props.widget.options?.autoplaySpeed)\n return Number.isFinite(value) && value >= 500 ? value : DEFAULT_CAROUSEL_OPTIONS.autoplaySpeed\n})\n\nconst speed = computed(() => {\n const value = Number(props.widget.options?.speed)\n return Number.isFinite(value) && value >= 0 ? value : DEFAULT_CAROUSEL_OPTIONS.speed\n})\n\nconst carouselScopedCss = computed(() => {\n const fadeTransitionCss = `.lc-carousel-fade-item{transition:opacity ${speed.value}ms ease}`\n return [mergedScopedCss.value, fadeTransitionCss].filter(Boolean).join('\\n')\n})\n\nconst showDots = computed(() => props.widget.options?.dots !== false)\nconst showArrows = computed(() => props.widget.options?.arrows === true)\nconst pauseOnHover = computed(() => props.widget.options?.pauseOnHover !== false)\nconst infinite = computed(() => props.widget.options?.infinite !== false)\n\nconst initialSlide = computed(() => resolveActiveCarouselIndex(props.widget))\n\nconst carouselRenderKey = computed(() => {\n const options = props.widget.options ?? {}\n return [carouselSlideIdsKey.value, options.dots, options.arrows, options.infinite, options.dotPosition, options.effect, options.autoplay, options.autoplaySpeed, options.speed, options.pauseOnHover].join('|')\n})\n\nconst activeKey = computed({\n get: () => resolveActiveCarouselKey(props.widget),\n set: value => {\n if (value == null) return\n const parsed = typeof value === 'number' ? value : Number(value)\n if (Number.isNaN(parsed)) return\n setCarouselActiveKey(props.widget, parsed)\n }\n})\n\nconst trackStyle = computed(() => {\n if (effect.value === 'fade') return {}\n const offset = -currentIndex.value * 100\n return {\n transform: `translate3d(${offset}%, 0, 0)`,\n transition: isTransitioning.value ? `transform ${speed.value}ms ease` : 'none'\n }\n})\n\nconst carouselClasses = computed(() => resolveCarouselViewClasses(dotPosition.value))\n\nfunction isSlideActive(slide: Widget): boolean {\n return resolveActiveCarouselKey(props.widget) === slide.id\n}\n\nfunction shouldRenderSlide(slide: Widget): boolean {\n return isSlideActive(slide) || (autoplay.value && carouselSlides.value.length > 1)\n}\n\nfunction normalizeIndex(index: number): number {\n if (slideCount.value <= 0) return 0\n if (!infinite.value) {\n return Math.max(0, Math.min(index, slideCount.value - 1))\n }\n let next = index % slideCount.value\n if (next < 0) next += slideCount.value\n return next\n}\n\nfunction goTo(index: number, animate = true) {\n if (slideCount.value <= 0) return\n const next = normalizeIndex(index)\n const prev = currentIndex.value\n if (next === prev) return\n handleBeforeChange(prev, next)\n isTransitioning.value = animate\n currentIndex.value = next\n if (animate && speed.value > 0) {\n window.setTimeout(() => {\n isTransitioning.value = false\n handleAfterChange(next)\n }, speed.value)\n } else {\n isTransitioning.value = false\n handleAfterChange(next)\n }\n}\n\nfunction nextSlide() {\n goTo(currentIndex.value + 1)\n}\n\nfunction prevSlide() {\n goTo(currentIndex.value - 1)\n}\n\nfunction syncCarouselToActiveKey(key: number | undefined, animate = false) {\n if (key == null) return\n const index = carouselSlides.value.findIndex(slide => slide.id === key)\n if (index < 0 || index === currentIndex.value) return\n goTo(index, animate)\n}\n\nfunction startAutoplay() {\n stopAutoplay()\n if (!autoplay.value || slideCount.value <= 1) return\n autoplayTimer = setInterval(() => {\n if (pauseOnHover.value && isHovered.value) return\n nextSlide()\n }, autoplaySpeed.value)\n}\n\nfunction stopAutoplay() {\n if (autoplayTimer) {\n clearInterval(autoplayTimer)\n autoplayTimer = null\n }\n}\n\nwatch(activeKey, (key, prevKey) => {\n if (key == null || key === prevKey) return\n nextTick(() => syncCarouselToActiveKey(key, false))\n})\n\nwatch(carouselSlideIdsKey, () => {\n nextTick(() => syncCarouselToActiveKey(activeKey.value, false))\n})\n\nwatch(\n () => [autoplay.value, autoplaySpeed.value, slideCount.value] as const,\n () => startAutoplay()\n)\n\nwatch(\n () => initialSlide.value,\n value => {\n if (typeof value === 'number' && value !== currentIndex.value) {\n goTo(value, false)\n }\n }\n)\n\nonMounted(() => {\n if (initialSlide.value > 0) {\n goTo(initialSlide.value, false)\n }\n startAutoplay()\n})\n\nonBeforeUnmount(stopAutoplay)\n\nconst { domEventHandlers } = useWidgetEvents({\n widget: toRef(props, 'widget'),\n designMode: () => designMode\n})\n\nfunction handleBeforeChange(from: number, to: number) {\n domEventHandlers.value.beforeChange?.(new CustomEvent('beforeChange', { detail: { from, to } }))\n}\n\nfunction handleAfterChange(current: number) {\n const slide = carouselSlides.value[current]\n if (slide && slide.id !== activeKey.value) {\n activeKey.value = slide.id\n }\n domEventHandlers.value.afterChange?.(new CustomEvent('afterChange', { detail: current }))\n}\n\ndefineExpose({\n goTo,\n get currentSlide() {\n return currentIndex.value\n }\n})\n</script>\n\n<template>\n <ScopedStyleBlock :css=\"carouselScopedCss\" :id=\"widget.id\" />\n <div ref=\"hostRef\" :class=\"carouselClasses.root\" v-bind=\"scopeAttr\" v-on=\"domEventHandlers\">\n <div\n :key=\"carouselRenderKey\"\n :class=\"carouselClasses.carousel\"\n @mouseenter=\"isHovered = true\"\n @mouseleave=\"isHovered = false\"\n >\n <button\n v-if=\"showArrows && slideCount > 1\"\n type=\"button\"\n :class=\"[carouselClasses.arrow, carouselClasses.arrowPrev]\"\n aria-label=\"Previous\"\n @click=\"prevSlide\"\n >\n ‹\n </button>\n\n <div :class=\"carouselClasses.viewport\">\n <div v-if=\"effect === 'scrollx'\" :class=\"carouselClasses.track\" :style=\"trackStyle\">\n <div v-for=\"(slide, slideIndex) in carouselSlides\" :key=\"slide.id\" :class=\"carouselClasses.slide\">\n <slot name=\"item\" :item=\"slide\" :index=\"slideIndex\" :visible=\"shouldRenderSlide(slide)\" />\n </div>\n </div>\n <div v-else :class=\"carouselClasses.fade\">\n <div\n v-for=\"(slide, slideIndex) in carouselSlides\"\n :key=\"slide.id\"\n :class=\"carouselClasses.fadeItem(slideIndex === currentIndex)\"\n >\n <slot name=\"item\" :item=\"slide\" :index=\"slideIndex\" :visible=\"shouldRenderSlide(slide)\" />\n </div>\n </div>\n </div>\n\n <button\n v-if=\"showArrows && slideCount > 1\"\n type=\"button\"\n :class=\"[carouselClasses.arrow, carouselClasses.arrowNext]\"\n aria-label=\"Next\"\n @click=\"nextSlide\"\n >\n ›\n </button>\n\n <ul v-if=\"showDots && slideCount > 1\" :class=\"carouselClasses.dots\">\n <li v-for=\"(_, index) in carouselSlides\" :key=\"index\">\n <button type=\"button\" :class=\"carouselClasses.dotButton(index === currentIndex)\" @click=\"goTo(index)\" />\n </li>\n </ul>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { CssStyle, Widget } from '../../../core/index.ts'\nimport DesignModeContainerChildren from '../designer/container-children.vue'\nimport { useWidgetEvents, useWidgetVisualStyles, LOWCODE_DESIGN_MODE_KEY } from '../../../runtime/runtime.ts'\nimport ScopedStyleBlock from '../../../runtime/scoped-style-block.vue'\nimport { useElementSize } from '@vueuse/core'\nimport { computed, inject, ref, toRef } from 'vue'\n\nconst props = defineProps<{\n widget: Widget\n parentWidget?: Widget | null\n index?: number\n resolveContainerCssStyle: (widget: Widget, parentWidget?: Widget | null, includeUserStyle?: boolean) => CssStyle\n}>()\n\nconst designMode = inject(LOWCODE_DESIGN_MODE_KEY, false)\nconst hostRef = ref<HTMLElement | null>(null)\nconst { width: hostWidth } = useElementSize(hostRef)\n\nconst paneDefaultStyle = computed(() => props.resolveContainerCssStyle(props.widget, props.parentWidget, false))\n\nconst { scopeAttr, scopedStyleCss } = useWidgetVisualStyles(() => props.widget, {\n designMode: () => designMode,\n containerWidth: () => hostWidth.value,\n defaultStyle: paneDefaultStyle,\n hostRef\n})\n\nconst { domEventHandlers } = useWidgetEvents({\n widget: toRef(props, 'widget'),\n designMode: () => designMode\n})\n</script>\n\n<template>\n <div ref=\"hostRef\" v-bind=\"scopeAttr\" v-on=\"domEventHandlers\">\n <DesignModeContainerChildren :widget=\"widget\">\n <slot />\n </DesignModeContainerChildren>\n <ScopedStyleBlock :css=\"scopedStyleCss\" :id=\"widget.id\" />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { Widget } from '../../../../core/index.ts'\nimport InternalPaneView from '../../../shared/envelopes/internal-pane-view.vue'\nimport { resolveCarouselSlideContainerCssStyle } from './options.ts'\n\ndefineProps<{\n widget: Widget\n parentWidget?: Widget | null\n index?: number\n}>()\n</script>\n\n<template>\n <InternalPaneView :widget=\"widget\" :parent-widget=\"parentWidget\" :index=\"index\" :resolve-container-css-style=\"resolveCarouselSlideContainerCssStyle\">\n <slot />\n </InternalPaneView>\n</template>\n","import { patchWidgetEvents } from '../../../runtime/runtime.ts'\nimport type { CssStyle } from '../../../core/index.ts'\nimport { isResponsiveStyleValue, readStyleValue, resolveFlatCssStyle, STYLE_BREAKPOINTS, cleanResponsiveValue, resolveResponsiveValue } from '../../../core/index.ts'\nimport type { CssStyleValue, ResponsiveStyleValue } from '../../../core/index.ts'\nimport { applyBackgroundImageStyleDefaults, DEFAULT_FLEX_CONTAINER_STYLE, DEFAULT_FLEX_PANE_STYLE, FLEX_LAYOUT_FLEX_DEFAULTS, FLEX_LAYOUT_KEYS, hasExplicitWidgetHeight, hasExplicitWidgetWidth } from '../../../runtime/runtime.ts'\nimport type { Widget } from '../../../core/index.ts'\nimport { ensureWidgetEditorTitle, ensureWidgetStyles, getWidgetDefaultStyle } from '../../../core/index.ts'\n\n/** 子格排列:row=左右并排,column=上下堆叠 */\nexport type GridChildrenLayout = 'row' | 'column'\n\n/** 容器类型:container=可横纵调整;row=行(仅高);column=列(仅宽) */\nexport type GridKind = 'container' | 'row' | 'column'\n\nexport const GRID_KIND_LABELS: Record<GridKind, string> = {\n container: '容器',\n row: '行',\n column: '列'\n}\n\n/** 裁剪子格类型:row 布局 → 列;column 布局 → 行 */\nexport const GRID_LAYOUT_PANE_KIND: Record<GridChildrenLayout, GridKind> = {\n row: 'column',\n column: 'row'\n}\n\nexport type GridResizeAxes = {\n width: boolean\n height: boolean\n both: boolean\n}\n\nexport function resolveGridResizeAxes(kind: GridKind): GridResizeAxes {\n switch (kind) {\n case 'row':\n return { width: false, height: true, both: false }\n case 'column':\n return { width: true, height: false, both: false }\n default:\n return { width: true, height: true, both: true }\n }\n}\n\nexport function getGridKind(widget: Widget): GridKind {\n const kind = (widget.options as GridOptions)?.gridKind\n if (kind === 'container' || kind === 'row' || kind === 'column') {\n return kind\n }\n const name = widget.name?.trim() ?? ''\n if (name.startsWith('行')) return 'row'\n if (name.startsWith('列')) return 'column'\n return 'container'\n}\n\nexport function resolveGridPaneLabel(kind: GridKind, index: number): string {\n return `${GRID_KIND_LABELS[kind]}${index + 1}`\n}\n\nexport function getChildrenLayout(widget: Widget): GridChildrenLayout | undefined {\n const layout = widget.options?.childrenLayout\n return layout === 'row' || layout === 'column' ? layout : undefined\n}\n\nexport function isGridStructuredNode(widget: Widget): boolean {\n const layout = getChildrenLayout(widget)\n const children = widget.children ?? []\n return layout != null && children.length >= 2\n}\n\nexport function normalizeGridWidget(widget: Widget): void {\n if (widget.type === 'grid' && widget.children == null) {\n widget.children = []\n }\n widget.children?.forEach(child => normalizeGridWidget(child))\n}\n\nconst DEFAULT_GRID_TITLE = '容器'\n\ntype GridOptions = {\n gridKind?: GridKind\n childrenLayout?: GridChildrenLayout\n}\n\nexport const GRID_FLEX_LAYOUT_DEFAULTS = FLEX_LAYOUT_FLEX_DEFAULTS\n\n/** 拖入页面的根级 grid 默认尺寸 */\nexport const GRID_ROOT_DEFAULT_STYLE: CssStyle = {\n // width: '100%',\n height: '200px',\n boxSizing: 'border-box',\n overflow: 'hidden'\n}\n\n/** 裁剪子格默认铺满父级,由 flex 均分 */\nexport const GRID_FILL_STYLE: CssStyle = {\n // width: '100%',\n height: '100%',\n overflow: 'hidden'\n}\n\nconst DEFAULT_GRID_ROOT_STYLE: CssStyle = {\n ...DEFAULT_FLEX_CONTAINER_STYLE,\n ...GRID_ROOT_DEFAULT_STYLE,\n minHeight: '200px'\n}\n\nconst DEFAULT_GRID_PANE_STYLE: CssStyle = {\n ...DEFAULT_FLEX_PANE_STYLE,\n ...GRID_FILL_STYLE\n}\n\n/** 裁剪后父级仅写入 flex 布局,不覆盖已有 width/height/flex */\nconst STRUCTURED_PARENT_SPLIT_LAYOUT: Record<GridChildrenLayout, CssStyle> = {\n row: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'stretch',\n flexWrap: 'nowrap',\n minWidth: '0',\n minHeight: '0',\n boxSizing: 'border-box',\n overflow: 'hidden'\n },\n column: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n flexWrap: 'nowrap',\n minWidth: '0',\n minHeight: '0',\n boxSizing: 'border-box',\n overflow: 'hidden'\n }\n}\n\nfunction formatEqualSharePercent(count: number): string {\n if (count <= 0) return '50%'\n const share = Math.round((100 / count) * 10000) / 10000\n return `${share}%`\n}\n\n/** 裁剪后子格主轴按均分百分比(2 格 → 50%),交叉轴铺满 */\nfunction buildStructuredPaneSplitStyle(layout: GridChildrenLayout, childCount: number): CssStyle {\n const share = formatEqualSharePercent(childCount)\n const base: CssStyle = {\n alignSelf: 'stretch',\n minWidth: '0',\n minHeight: '0',\n boxSizing: 'border-box',\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n flexWrap: 'nowrap'\n }\n\n if (layout === 'row') {\n return {\n ...base,\n width: share,\n flex: `0 0 ${share}`,\n height: '100%'\n }\n }\n\n return {\n ...base,\n height: share,\n flex: `0 0 ${share}`,\n width: '100%'\n }\n}\n\n/** 裁剪时清除子格主轴固定尺寸,便于 flex 均分 */\nexport const GRID_SPLIT_AXIS_SIZE_KEYS: Record<GridChildrenLayout, readonly string[]> = {\n row: ['width', 'flex', 'minWidth', 'maxWidth'],\n column: ['height', 'minHeight', 'flex', 'maxHeight']\n}\n\n/**\n * 裁剪后写入父级 flex 布局与子格百分比均分(持久化到 widget.styles.default)。\n * row=左右并排 → 子格 width 50%(n 格均分);column=上下堆叠 → 子格 height 50%。\n */\nexport function applyGridStructuredSplitStyles(widget: Widget, layout: GridChildrenLayout): void {\n const styles = ensureWidgetStyles(widget)\n const prev = getWidgetDefaultStyle(widget)\n styles.default = {\n ...prev,\n ...STRUCTURED_PARENT_SPLIT_LAYOUT[layout]\n }\n delete styles.default.flex\n\n const children = widget.children ?? []\n const paneStyle = buildStructuredPaneSplitStyle(layout, children.length)\n for (const child of children) {\n const childStyles = ensureWidgetStyles(child)\n const next = { ...getWidgetDefaultStyle(child) }\n for (const key of GRID_SPLIT_AXIS_SIZE_KEYS[layout]) {\n delete next[key]\n }\n childStyles.default = { ...next, ...paneStyle }\n }\n}\n\n/** flex 子格 shell:默认 100% 铺满分配区域 */\nconst GRID_PANE_SHELL: CssStyle = {\n display: 'flex',\n flexDirection: 'column',\n flex: '1 1 0%',\n alignSelf: 'stretch',\n // width: '100%',\n height: '100%',\n minWidth: '0',\n minHeight: '0',\n boxSizing: 'border-box',\n overflow: 'hidden'\n}\n\nconst STRUCTURED_CONTAINER_IGNORE_USER_KEYS = new Set(['display', 'flexDirection', 'alignItems', 'flexWrap', 'flex', 'width', 'height', 'minWidth', 'minHeight', 'maxWidth', 'maxHeight'])\n\nconst GRID_ROOT_SHELL: CssStyle = {\n display: 'flex',\n flexDirection: 'column',\n // width: '100%',\n height: '100%',\n minHeight: '0',\n boxSizing: 'border-box',\n overflow: 'hidden'\n}\n\n/** 结构化 grid 的直接子格(由 split 产生,父级带 childrenLayout) */\nexport function isGridInternalPane(widget: Widget, parentWidget?: Widget | null): boolean {\n if (widget.type !== 'grid') return false\n if (!parentWidget || parentWidget.type !== 'grid') return false\n const layout = parentWidget.options?.childrenLayout\n return layout === 'row' || layout === 'column'\n}\n\nfunction getDefaultGridStyle(widget: Widget, parentWidget?: Widget | null): CssStyle {\n if (parentWidget !== undefined) {\n return isGridInternalPane(widget, parentWidget) ? { ...DEFAULT_GRID_PANE_STYLE } : { ...DEFAULT_GRID_ROOT_STYLE }\n }\n return getGridKind(widget) !== 'container' ? { ...DEFAULT_GRID_PANE_STYLE } : { ...DEFAULT_GRID_ROOT_STYLE }\n}\n\n/** 布局默认(flex、box-sizing 等),不含 width/height,便于用户清空尺寸后不回落默认值 */\nfunction getGridLayoutDefaults(widget: Widget, parentWidget?: Widget | null): CssStyle {\n const defaults = getDefaultGridStyle(widget, parentWidget)\n const { width: _width, height: _height, ...layout } = defaults\n return layout\n}\n\nfunction patchGridFlexLayoutDefaults(widget: Widget, defaults: CssStyle): void {\n const styles = ensureWidgetStyles(widget)\n if (!styles.default) {\n styles.default = { ...defaults }\n return\n }\n const display = readStyleValue(styles.default, 'display', 'xs')\n if (display && display !== 'flex') {\n return\n }\n for (const key of FLEX_LAYOUT_KEYS) {\n const value = defaults[key]\n if (value == null) continue\n const current = styles.default[key]\n if (current == null || current === '') {\n styles.default[key] = value\n }\n }\n}\n\nexport function resolveGridContainerCssStyle(widget: Widget, structuredLayout?: GridChildrenLayout, includeUserStyle = true, parentWidget?: Widget | null): CssStyle {\n const merged: CssStyle = {\n ...getGridLayoutDefaults(widget, parentWidget)\n }\n\n if (includeUserStyle) {\n const user = getWidgetDefaultStyle(widget)\n for (const [key, value] of Object.entries(user)) {\n if (value == null || value === '') continue\n if (structuredLayout && STRUCTURED_CONTAINER_IGNORE_USER_KEYS.has(key)) continue\n merged[key] = value\n }\n }\n\n if (structuredLayout) {\n Object.assign(merged, STRUCTURED_PARENT_SPLIT_LAYOUT[structuredLayout])\n }\n\n return applyGridClipOverflowCss(merged, getWidgetDefaultStyle(widget))\n}\n\nconst GRID_SHELL_LAYOUT_KEYS = ['flex', 'alignSelf', 'width', 'height', 'minHeight', 'minWidth', 'maxWidth', 'maxHeight'] as const\n\n/** 合并 shell(参与父级 flex)与 container(子项布局默认),用户样式仍由 useWidgetVisualStyles 覆盖 */\nexport function resolveGridHostCssStyle(widget: Widget, structuredLayout?: GridChildrenLayout, parentWidget?: Widget | null): CssStyle {\n const shell = resolveGridShellCssStyle(widget, parentWidget ?? null, structuredLayout)\n const container = resolveGridContainerCssStyle(widget, structuredLayout, false, parentWidget ?? null)\n const merged: CssStyle = { ...container }\n\n for (const key of GRID_SHELL_LAYOUT_KEYS) {\n const value = shell[key]\n if (value != null && value !== '') {\n merged[key] = value\n }\n }\n\n return merged\n}\n\nexport function resolveGridContainerStyle(widget: Widget, structuredLayout?: GridChildrenLayout, includeUserStyle = true, parentWidget?: Widget | null): Record<string, string> {\n return applyBackgroundImageStyleDefaults(resolveFlatCssStyle(resolveGridContainerCssStyle(widget, structuredLayout, includeUserStyle, parentWidget), 'xs'))\n}\n\nfunction applyGridClipOverflowCss(style: CssStyle, source: CssStyle = style): CssStyle {\n if (readStyleValue(source, 'overflow') || readStyleValue(source, 'overflowX') || readStyleValue(source, 'overflowY')) {\n return style\n }\n return { ...style, overflow: 'hidden' }\n}\n\nfunction buildResponsiveShellFlexForWidth(width: ResponsiveStyleValue, parentLayout?: GridChildrenLayout): CssStyleValue | undefined {\n const byBp: ResponsiveStyleValue = {}\n let has = false\n for (const bp of STYLE_BREAKPOINTS) {\n const resolved = resolveResponsiveValue(width, bp).trim()\n if (!resolved) continue\n has = true\n byBp[bp] = resolved === '100%' || resolved === 'auto' ? '1 1 0%' : parentLayout === 'row' ? '0 1 auto' : '0 0 auto'\n }\n return has ? (cleanResponsiveValue(byBp) as CssStyleValue) : undefined\n}\n\nfunction buildResponsiveShellFlexForHeight(height: ResponsiveStyleValue, parentLayout?: GridChildrenLayout): CssStyleValue | undefined {\n const byBp: ResponsiveStyleValue = {}\n let has = false\n for (const bp of STYLE_BREAKPOINTS) {\n const resolved = resolveResponsiveValue(height, bp).trim()\n if (!resolved) continue\n has = true\n byBp[bp] = resolved === '100%' || resolved === 'auto' ? '1 1 0%' : parentLayout === 'column' ? '0 1 auto' : '0 0 auto'\n }\n return has ? (cleanResponsiveValue(byBp) as CssStyleValue) : undefined\n}\n\nfunction buildResponsiveAlignSelfForRowWidth(width: ResponsiveStyleValue): CssStyleValue | undefined {\n const byBp: ResponsiveStyleValue = {}\n let has = false\n for (const bp of STYLE_BREAKPOINTS) {\n const resolved = resolveResponsiveValue(width, bp).trim()\n if (!resolved || resolved === '100%' || resolved === 'auto') continue\n has = true\n byBp[bp] = 'stretch'\n }\n return has ? (cleanResponsiveValue(byBp) as CssStyleValue) : undefined\n}\n\nfunction buildResponsiveAlignSelfForColumnHeight(height: ResponsiveStyleValue): CssStyleValue | undefined {\n const byBp: ResponsiveStyleValue = {}\n let has = false\n for (const bp of STYLE_BREAKPOINTS) {\n const resolved = resolveResponsiveValue(height, bp).trim()\n if (!resolved || resolved === '100%' || resolved === 'auto') continue\n has = true\n byBp[bp] = 'stretch'\n }\n return has ? (cleanResponsiveValue(byBp) as CssStyleValue) : undefined\n}\n\nfunction mergeUserShellDimensions(shell: Record<string, string>, widget: Widget, parentLayout?: GridChildrenLayout): Record<string, string> {\n const style = getWidgetDefaultStyle(widget)\n const next = { ...shell }\n\n const widthIsResponsive = isResponsiveStyleValue(style.width)\n const width = widthIsResponsive ? '' : readStyleValue(style, 'width').trim()\n const skipWidth = parentLayout === 'row' && !hasExplicitWidgetWidth(style)\n if (width && !skipWidth) {\n next.width = width\n if (next.flex && width !== '100%' && width !== 'auto') {\n // row 主轴固定宽度时保留交叉轴 stretch,避免 flex:0 0 auto 导致高度随内容收缩\n next.flex = parentLayout === 'row' ? '0 1 auto' : '0 0 auto'\n if (parentLayout === 'row') {\n next.alignSelf = 'stretch'\n }\n }\n } else if (!skipWidth && !widthIsResponsive) {\n delete next.width\n }\n\n const heightIsResponsive = isResponsiveStyleValue(style.height)\n const height = heightIsResponsive ? '' : readStyleValue(style, 'height').trim()\n const skipHeight = parentLayout === 'column' && !hasExplicitWidgetHeight(style)\n if (height && !skipHeight) {\n next.height = height\n if (next.flex && height !== '100%' && height !== 'auto') {\n // column 主轴固定高度时保留交叉轴 stretch,避免 flex:0 0 auto 导致宽度随内容收缩\n next.flex = parentLayout === 'column' ? '0 1 auto' : '0 0 auto'\n if (parentLayout === 'column') {\n next.alignSelf = 'stretch'\n }\n }\n } else if (!skipHeight && !heightIsResponsive) {\n delete next.height\n }\n\n const minHeightIsResponsive = isResponsiveStyleValue(style.minHeight)\n const minHeight = minHeightIsResponsive ? '' : readStyleValue(style, 'minHeight').trim()\n if (minHeight && !height && !skipHeight && !minHeightIsResponsive) {\n next.minHeight = minHeight\n }\n\n return applyBackgroundImageStyleDefaults(applyGridClipOverflowCss(next, style) as Record<string, string>)\n}\n\nexport function resolveGridShellCssStyle(widget: Widget, parentWidget?: Widget | null, structuredLayout?: GridChildrenLayout): CssStyle {\n const parentLayout = parentWidget ? getChildrenLayout(parentWidget) : undefined\n const flat = resolveGridShellStyle(widget, parentWidget, structuredLayout)\n const userStyle = getWidgetDefaultStyle(widget)\n const cssStyle: CssStyle = { ...flat }\n\n if (isResponsiveStyleValue(userStyle.width)) {\n if (cssStyle.flex != null) {\n delete cssStyle.flex\n delete cssStyle.alignSelf\n const flex = buildResponsiveShellFlexForWidth(userStyle.width, parentLayout)\n if (flex) cssStyle.flex = flex\n if (parentLayout === 'row') {\n const alignSelf = buildResponsiveAlignSelfForRowWidth(userStyle.width)\n if (alignSelf) cssStyle.alignSelf = alignSelf\n }\n }\n cssStyle.width = userStyle.width\n } else if (userStyle.width != null && userStyle.width !== '') {\n cssStyle.width = userStyle.width\n }\n\n if (isResponsiveStyleValue(userStyle.height)) {\n if (parentLayout === 'column' && cssStyle.flex != null) {\n delete cssStyle.flex\n delete cssStyle.alignSelf\n const flex = buildResponsiveShellFlexForHeight(userStyle.height, parentLayout)\n if (flex) cssStyle.flex = flex\n const alignSelf = buildResponsiveAlignSelfForColumnHeight(userStyle.height)\n if (alignSelf) cssStyle.alignSelf = alignSelf\n }\n cssStyle.height = userStyle.height\n } else if (userStyle.height != null && userStyle.height !== '') {\n cssStyle.height = userStyle.height\n }\n\n if (userStyle.minHeight != null && userStyle.minHeight !== '') {\n cssStyle.minHeight = userStyle.minHeight\n }\n\n return cssStyle\n}\n\nexport function resolveGridShellStyle(widget: Widget, parentWidget?: Widget | null, structuredLayout?: GridChildrenLayout): Record<string, string> {\n const parentLayout = parentWidget ? getChildrenLayout(parentWidget) : undefined\n\n if (parentLayout === 'row' || parentLayout === 'column') {\n return mergeUserShellDimensions({ ...resolveFlatCssStyle(GRID_PANE_SHELL, 'xs') }, widget, parentLayout)\n }\n\n const shell: Record<string, string> = { ...resolveFlatCssStyle(GRID_ROOT_SHELL, 'xs') }\n\n if (structuredLayout) {\n const minHeight = readStyleValue(getWidgetDefaultStyle(widget), 'minHeight') || readStyleValue(DEFAULT_GRID_ROOT_STYLE, 'minHeight')\n if (minHeight && !readStyleValue(getWidgetDefaultStyle(widget), 'height')) {\n shell.minHeight = minHeight\n }\n }\n\n return mergeUserShellDimensions(shell, widget, undefined)\n}\n\nexport function ensureGridOptions(widget: Widget): void {\n if (!widget.options) {\n widget.options = {}\n }\n const options = widget.options as GridOptions\n\n ensureWidgetEditorTitle(widget, DEFAULT_GRID_TITLE)\n\n if (options.gridKind === undefined) {\n options.gridKind = getGridKind(widget)\n }\n\n if (widget.styles?.default === undefined) {\n ensureWidgetStyles(widget).default = { ...getDefaultGridStyle(widget) }\n } else {\n patchGridFlexLayoutDefaults(widget, getDefaultGridStyle(widget))\n }\n\n patchWidgetEvents(widget)\n}\n","<script setup lang=\"ts\">\nimport type { Widget } from '../../../core/index.ts'\nimport DesignModeContainerChildren from '../../shared/designer/container-children.vue'\nimport { useWidgetEvents, useWidgetVisualStyles, LOWCODE_DESIGN_MODE_KEY } from '../../../runtime/runtime.ts'\nimport ScopedStyleBlock from '../../../runtime/scoped-style-block.vue'\nimport { getChildrenLayout, isGridStructuredNode, resolveGridHostCssStyle } from './options.ts'\nimport { useResizeObserver } from '@vueuse/core'\nimport { computed, inject, ref, toRef } from 'vue'\n\nconst props = defineProps<{\n widget: Widget\n parentWidget?: Widget | null\n index?: number\n}>()\n\nconst designMode = inject(LOWCODE_DESIGN_MODE_KEY, false)\nconst gridRef = ref<HTMLElement | null>(null)\nconst gridWidth = ref(0)\n\nuseResizeObserver(gridRef, entries => {\n gridWidth.value = entries[0]?.contentRect.width ?? 0\n})\n\nconst childrenLayout = computed(() => getChildrenLayout(props.widget))\nconst isStructuredLayout = computed(() => isGridStructuredNode(props.widget))\n\nconst hostCssStyle = computed(() => resolveGridHostCssStyle(props.widget, isStructuredLayout.value ? childrenLayout.value : undefined, props.parentWidget ?? null))\n\nconst { scopeAttr, scopedStyleCss } = useWidgetVisualStyles(() => props.widget, {\n designMode: () => designMode,\n containerWidth: () => gridWidth.value,\n defaultStyle: hostCssStyle,\n hostRef: gridRef\n})\n\nconst { domEventHandlers } = useWidgetEvents({\n widget: toRef(props, 'widget'),\n designMode: () => designMode\n})\n\ndefineExpose({ hostRef: gridRef })\n</script>\n\n<template>\n <div ref=\"gridRef\" :class=\"{ relative: designMode }\" v-bind=\"scopeAttr\" v-on=\"domEventHandlers\">\n <template v-if=\"isStructuredLayout\">\n <template v-for=\"(child, childIndex) in widget.children\" :key=\"child.id\">\n <slot name=\"item\" :item=\"child\" :index=\"childIndex\" />\n </template>\n </template>\n\n <DesignModeContainerChildren v-else :widget=\"widget\">\n <slot />\n </DesignModeContainerChildren>\n\n <slot name=\"designer-chrome\" />\n\n <ScopedStyleBlock :css=\"scopedStyleCss\" :id=\"widget.id\" />\n </div>\n</template>\n","import type { Widget } from '../../../../core/index.ts'\nimport type { CssStyle } from '../../../../core/index.ts'\nimport { DEFAULT_FLEX_PANE_STYLE } from '../../../../runtime/runtime.ts'\nimport {\n ensureInternalPaneWidget,\n FLEX_LAYOUT_FLEX_DEFAULTS,\n resolveInternalPaneContainerCssStyle,\n resolveInternalPaneContainerStyle\n} from '../../../../runtime/runtime.ts'\n\nexport type TabPaneOptions = {\n hidden?: boolean\n disabled?: boolean\n}\n\n/** 供 LayoutPanel 默认值与样式补全共用 */\nexport const TAB_PANE_FLEX_LAYOUT_DEFAULTS = FLEX_LAYOUT_FLEX_DEFAULTS\n\nexport const DEFAULT_TAB_PANE_STYLE: CssStyle = {\n ...DEFAULT_FLEX_PANE_STYLE\n}\n\nexport const DEFAULT_TAB_PANE_TITLE = '标签'\n\nexport function resolveTabPaneContainerCssStyle(widget: Widget, _parentWidget?: Widget | null, includeUserStyle = true) {\n return resolveInternalPaneContainerCssStyle(widget, DEFAULT_TAB_PANE_STYLE, includeUserStyle)\n}\n\nexport function resolveTabPaneContainerStyle(\n widget: Widget,\n _parentWidget?: Widget | null,\n includeUserStyle = true\n): Record<string, string> {\n return resolveInternalPaneContainerStyle(widget, DEFAULT_TAB_PANE_STYLE, includeUserStyle)\n}\n\nexport function ensureTabPaneWidget(widget: Widget): void {\n ensureInternalPaneWidget(widget, {\n defaultTitle: DEFAULT_TAB_PANE_TITLE,\n defaultStyle: DEFAULT_TAB_PANE_STYLE\n })\n}\n","import type { Widget } from '../../../core/index.ts'\nimport { ensureWidgetEditorTitle } from '../../../core/index.ts'\nimport { ensureWidgetStyles } from '../../../core/index.ts'\nimport { patchWidgetEvents } from '../../../runtime/runtime.ts'\nimport type { CssStyle } from '../../../core/index.ts'\nimport { createKeyedSlotMaterialHelpers } from '../../../runtime/runtime.ts'\nimport { DEFAULT_TAB_PANE_STYLE, DEFAULT_TAB_PANE_TITLE, ensureTabPaneWidget } from './tab-pane/options.ts'\n\nexport type TabPosition = 'top' | 'right' | 'bottom' | 'left'\nexport type TabSize = 'large' | 'middle' | 'small'\n\nexport const TAB_POSITION_OPTIONS: { value: TabPosition; label: string }[] = [\n { value: 'top', label: '顶部' },\n { value: 'bottom', label: '底部' },\n { value: 'left', label: '左侧' },\n { value: 'right', label: '右侧' }\n]\n\nexport const TAB_SIZE_OPTIONS: { value: TabSize; label: string }[] = [\n { value: 'large', label: '大' },\n { value: 'middle', label: '默认' },\n { value: 'small', label: '小' }\n]\n\nexport const DEFAULT_TAB_TITLE = '标签页'\n\nexport type TabOptions = {\n hidden?: boolean\n activeKey?: number\n tabPosition?: TabPosition\n size?: TabSize\n animated?: boolean\n}\n\nexport const DEFAULT_TAB_STYLE: CssStyle = {\n display: 'block',\n minHeight: '120px'\n}\n\nexport const DEFAULT_TAB_OPTIONS: Required<Pick<TabOptions, 'tabPosition' | 'size' | 'animated'>> = {\n tabPosition: 'top',\n size: 'middle',\n animated: true\n}\n\nexport function ensureTabOptions(widget: Widget) {\n ensureWidgetEditorTitle(widget, DEFAULT_TAB_TITLE)\n const options = (widget.options ?? {}) as TabOptions\n widget.options = options\n if (options.tabPosition === undefined || !TAB_POSITION_OPTIONS.some(item => item.value === options.tabPosition)) {\n options.tabPosition = DEFAULT_TAB_OPTIONS.tabPosition\n }\n if ((options.size as string | undefined) === 'default') {\n options.size = 'middle'\n }\n if (options.size === undefined || !TAB_SIZE_OPTIONS.some(item => item.value === options.size)) {\n options.size = DEFAULT_TAB_OPTIONS.size\n }\n if (options.animated === undefined) {\n options.animated = DEFAULT_TAB_OPTIONS.animated\n }\n if (widget.styles?.default === undefined) {\n ensureWidgetStyles(widget).default = { ...DEFAULT_TAB_STYLE }\n }\n patchWidgetEvents(widget)\n return options\n}\n\nconst TAB_NAV_WRAP_BORDER: Record<TabPosition, string> = {\n top: 'border-b border-[var(--colorSplit)]',\n bottom: 'border-t border-[var(--colorSplit)] border-b-0',\n left: 'border-e border-[var(--colorSplit)]',\n right: 'border-s border-[var(--colorSplit)] border-e-0'\n}\n\nconst TAB_ROOT_LAYOUT: Record<TabPosition, string> = {\n top: 'flex-col',\n bottom: 'flex-col-reverse',\n left: 'flex-row',\n right: 'flex-row-reverse'\n}\n\nconst TAB_TAB_PADDING: Record<TabSize, string> = {\n large: 'py-4 text-base',\n middle: 'py-3 text-sm',\n small: 'py-2 text-sm'\n}\n\nexport function resolveTabViewClasses(tabPosition: TabPosition, tabSize: TabSize) {\n const isVertical = tabPosition === 'left' || tabPosition === 'right'\n return {\n root: 'flex h-full min-h-0 w-full flex-1 flex-col',\n tabs: ['flex w-full h-full min-h-0', TAB_ROOT_LAYOUT[tabPosition]],\n navWrap: ['flex-none', TAB_NAV_WRAP_BORDER[tabPosition]],\n nav: [\n 'relative flex gap-0 m-0 px-4',\n isVertical && 'flex-col py-2 px-0'\n ].filter(Boolean),\n tab: (active: boolean) => [\n 'relative inline-flex items-center m-0 bg-transparent border-0 cursor-pointer transition-colors duration-200 text-[var(--colorText)]',\n TAB_TAB_PADDING[tabSize],\n isVertical ? 'justify-start w-full m-0 py-2 px-6' : 'ms-4 me-0',\n active && 'text-[var(--colorPrimary)] font-medium'\n ].filter(Boolean),\n inkBar: [\n 'absolute bg-[var(--colorPrimary)] pointer-events-none transition-all duration-200',\n tabPosition === 'top'\n ? 'bottom-0 h-0.5'\n : tabPosition === 'bottom'\n ? 'top-0 h-0.5'\n : tabPosition === 'left'\n ? 'end-0 w-0.5'\n : 'start-0 w-0.5'\n ],\n contentHolder: 'box-border flex-1 min-w-0 min-h-0 p-3',\n content: 'flex flex-1 flex-col h-full min-h-0',\n tabpane: 'flex flex-1 flex-col h-full min-h-0',\n paneBody: 'flex flex-1 flex-col h-full min-h-0'\n }\n}\n\nconst tabSlot = createKeyedSlotMaterialHelpers({\n containerType: 'tab',\n childType: 'tab-pane',\n defaultChildTitle: DEFAULT_TAB_PANE_TITLE,\n childTitlePrefix: '标签项',\n defaultChildStyle: DEFAULT_TAB_PANE_STYLE,\n defaultChildCount: 2,\n ensureContainerOptions: ensureTabOptions,\n ensureChildOptions: ensureTabPaneWidget\n})\n\nexport const isTabPaneNode = tabSlot.isChildNode\nexport const isTabNode = tabSlot.isContainerNode\nexport const getTabPaneTitle = tabSlot.getChildTitle\nexport const createTabPaneWidget = (title = DEFAULT_TAB_PANE_TITLE, id = 0) =>\n tabSlot.createChildWidget(title, id, DEFAULT_TAB_PANE_STYLE)\nexport const createDefaultTabPanes = tabSlot.createDefaultChildren\nexport const getTabPanes = tabSlot.getChildren\nexport const resolveActiveTabKey = tabSlot.resolveActiveKey\nexport const setTabActiveKey = tabSlot.setActiveKey\nexport const TAB_KEYED_SLOT_CONFIG = tabSlot.keyedSlotConfig\nexport const findOwningTabPane = tabSlot.findOwningChild\nexport const normalizeTabWidget = tabSlot.normalizeWidget\n","<script setup lang=\"ts\">\nimport type { Widget } from '../../../core/index.ts'\nimport { useWidgetEvents } from '../../../runtime/runtime.ts'\nimport {\n DEFAULT_TAB_OPTIONS,\n DEFAULT_TAB_STYLE,\n getTabPaneTitle,\n getTabPanes,\n resolveActiveTabKey,\n resolveTabViewClasses,\n setTabActiveKey,\n type TabPosition,\n type TabSize\n} from './options.ts'\nimport { useContainerStyle } from '../../../runtime/runtime.ts'\nimport ScopedStyleBlock from '../../../runtime/scoped-style-block.vue'\nimport { computed, inject, nextTick, onBeforeUnmount, onMounted, ref, toRef, watch } from 'vue'\nimport { LOWCODE_DESIGN_MODE_KEY } from '../../../runtime/runtime.ts'\n\nconst props = defineProps<{\n widget: Widget\n parentWidget?: Widget | null\n index?: number\n}>()\n\nconst designMode = inject(LOWCODE_DESIGN_MODE_KEY, false)\n\nconst { scopeAttr, scopedStyleCss, hostRef } = useContainerStyle(\n () => props.widget,\n { minHeight: DEFAULT_TAB_STYLE.minHeight }\n)\nconst tabPanes = computed(() => getTabPanes(props.widget))\n\nconst tabPosition = computed<TabPosition>(() => {\n const value = props.widget.options?.tabPosition\n return value === 'bottom' || value === 'left' || value === 'right' ? value : DEFAULT_TAB_OPTIONS.tabPosition\n})\n\nconst tabSize = computed<TabSize>(() => {\n const value = props.widget.options?.size\n return value === 'large' || value === 'middle' || value === 'small' ? value : DEFAULT_TAB_OPTIONS.size\n})\n\nconst tabClasses = computed(() => resolveTabViewClasses(tabPosition.value, tabSize.value))\n\nconst inkBarEnabled = computed(() => props.widget.options?.animated !== false)\n\nconst localActiveKey = ref<number | undefined>()\n\nwatch(\n () => resolveActiveTabKey(props.widget),\n key => {\n if (key != null) localActiveKey.value = key\n },\n { immediate: true }\n)\n\nconst activeKey = computed({\n get: () => {\n if (designMode) return resolveActiveTabKey(props.widget)\n return localActiveKey.value ?? resolveActiveTabKey(props.widget)\n },\n set: value => {\n if (value == null) return\n const parsed = typeof value === 'number' ? value : Number(value)\n if (Number.isNaN(parsed)) return\n if (designMode) {\n setTabActiveKey(props.widget, parsed)\n return\n }\n localActiveKey.value = parsed\n }\n})\n\nfunction isPaneActive(pane: Widget): boolean {\n return activeKey.value === pane.id\n}\n\nconst { domEventHandlers } = useWidgetEvents({\n widget: toRef(props, 'widget'),\n designMode: () => designMode\n})\n\nfunction selectPane(key: number) {\n if (key === activeKey.value) return\n activeKey.value = key\n domEventHandlers.value.change?.(new CustomEvent('change', { detail: key }))\n}\n\nconst navRef = ref<HTMLElement | null>(null)\nconst inkBarStyle = ref<Record<string, string | number>>({ opacity: 0 })\n\nasync function updateInkBarPosition() {\n await nextTick()\n const nav = navRef.value\n if (!nav || !inkBarEnabled.value) {\n inkBarStyle.value = { opacity: 0 }\n return\n }\n\n const activeIndex = tabPanes.value.findIndex(pane => isPaneActive(pane))\n if (activeIndex < 0) {\n inkBarStyle.value = { opacity: 0 }\n return\n }\n\n const activeEl = nav.querySelectorAll<HTMLElement>('[role=\"tab\"]')[activeIndex]\n if (!activeEl) {\n inkBarStyle.value = { opacity: 0 }\n return\n }\n\n const isVertical = tabPosition.value === 'left' || tabPosition.value === 'right'\n if (isVertical) {\n inkBarStyle.value = {\n top: `${activeEl.offsetTop}px`,\n height: `${activeEl.offsetHeight}px`,\n opacity: 1\n }\n return\n }\n\n inkBarStyle.value = {\n left: `${activeEl.offsetLeft}px`,\n width: `${activeEl.offsetWidth}px`,\n opacity: 1\n }\n}\n\nlet resizeObserver: ResizeObserver | undefined\n\nwatch(\n [activeKey, tabPanes, tabPosition, inkBarEnabled, tabSize],\n () => {\n void updateInkBarPosition()\n },\n { flush: 'post' }\n)\n\nonMounted(() => {\n void updateInkBarPosition()\n const nav = navRef.value\n if (!nav || typeof ResizeObserver === 'undefined') return\n resizeObserver = new ResizeObserver(() => {\n void updateInkBarPosition()\n })\n resizeObserver.observe(nav)\n})\n\nonBeforeUnmount(() => {\n resizeObserver?.disconnect()\n})\n</script>\n\n<template>\n <ScopedStyleBlock :css=\"scopedStyleCss\" :id=\"widget.id\" />\n <div ref=\"hostRef\" :class=\"tabClasses.root\" v-bind=\"scopeAttr\" v-on=\"domEventHandlers\">\n <div :class=\"tabClasses.tabs\">\n <div :class=\"tabClasses.navWrap\">\n <div ref=\"navRef\" :class=\"tabClasses.nav\" role=\"tablist\">\n <button\n v-for=\"pane in tabPanes\"\n :key=\"pane.id\"\n type=\"button\"\n :class=\"tabClasses.tab(isPaneActive(pane))\"\n role=\"tab\"\n :aria-selected=\"isPaneActive(pane)\"\n @click=\"selectPane(pane.id)\"\n >\n {{ getTabPaneTitle(pane) }}\n </button>\n <span v-if=\"inkBarEnabled\" :class=\"tabClasses.inkBar\" :style=\"inkBarStyle\" />\n </div>\n </div>\n <div :class=\"tabClasses.contentHolder\">\n <div :class=\"tabClasses.content\">\n <div\n v-for=\"(pane, paneIndex) in tabPanes\"\n :key=\"pane.id\"\n v-show=\"isPaneActive(pane)\"\n :class=\"tabClasses.tabpane\"\n >\n <div :class=\"[tabClasses.paneBody, 'lc-tab-pane-body']\">\n <slot name=\"item\" :item=\"pane\" :index=\"paneIndex\" :visible=\"isPaneActive(pane)\" />\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n.lc-tab-pane-body :deep(> .drag-handler [data-lc-rs]) {\n display: flex;\n height: 100%;\n min-height: 0;\n flex: 1 1 auto;\n flex-direction: column;\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { Widget } from '../../../../core/index.ts'\nimport InternalPaneView from '../../../shared/envelopes/internal-pane-view.vue'\nimport { resolveTabPaneContainerCssStyle } from './options.ts'\n\ndefineProps<{\n widget: Widget\n parentWidget?: Widget | null\n index?: number\n}>()\n</script>\n\n<template>\n <InternalPaneView :widget=\"widget\" :parent-widget=\"parentWidget\" :index=\"index\" :resolve-container-css-style=\"resolveTabPaneContainerCssStyle\">\n <slot />\n </InternalPaneView>\n</template>\n","<script setup lang=\"ts\">\nimport { ITEM_SCOPE_KEY, type ItemScope } from '../../../runtime/runtime.ts'\nimport { computed, provide } from 'vue'\n\nconst props = defineProps<{\n item: Record<string, unknown>\n index: number\n}>()\n\nconst scope = computed<ItemScope>(() => ({\n item: props.item,\n index: props.index\n}))\n\nprovide(ITEM_SCOPE_KEY, scope)\n</script>\n\n<template>\n <slot />\n</template>\n","<script setup lang=\"ts\">\nimport type { Widget } from '../../../core/index.ts'\nimport DesignModeContainerChildren from '../../shared/designer/container-children.vue'\nimport { DESIGN_MODE_PREVENT_DEFAULT_EVENTS } from '../../../core/index.ts'\nimport { ITEM_SCOPE_KEY, LIFECYCLE_KEY, hasWidgetEventBinding, normalizeWidgetEvents, useResolvedWidgetOptions, useWidgetEvents } from '../../../runtime/runtime.ts'\nimport { LOWCODE_DESIGN_MODE_KEY } from '../../../runtime/runtime.ts'\nimport ItemScopeProvider from '../../shared/envelopes/item-scope-provider.vue'\nimport { DEFAULT_LIST_STYLE, resolveListRowKey, resolveListRows, runListScopedEvent, shouldHideListRow, type ListOptions } from './options.ts'\nimport { useContainerStyle } from '../../../runtime/runtime.ts'\nimport ScopedStyleBlock from '../../../runtime/scoped-style-block.vue'\nimport { computed, inject, toRef, unref } from 'vue'\n\nconst props = defineProps<{\n widget: Widget\n parentWidget?: Widget | null\n index?: number\n}>()\n\nconst designMode = inject(LOWCODE_DESIGN_MODE_KEY, false)\nconst lifecycle = inject(LIFECYCLE_KEY, null)\nconst itemScope = inject(ITEM_SCOPE_KEY, null)\n\nconst listOptions = useResolvedWidgetOptions<ListOptions>(() => props.widget)\nconst pageData = computed(() => lifecycle?.pageData ?? {})\nconst listChildren = computed(() => props.widget.children ?? [])\n\nconst allRows = computed(() => {\n lifecycle?.scriptRevision.value\n const scope = itemScope ? unref(itemScope) : null\n return resolveListRows(listOptions.value.dataSource, pageData.value, listOptions.value.itemsField, scope\n ? { item: scope.item, index: scope.index, methods: lifecycle?.getMethods() }\n : undefined)\n})\n\nconst isPreviewMode = computed(() => designMode && allRows.value.length === 0)\nconst previewRows = computed<Record<string, unknown>[]>(() => [{}])\nconst renderRows = computed(() => (isPreviewMode.value ? previewRows.value : allRows.value))\n\nconst { scopeAttr, scopedStyleCss, hostRef } = useContainerStyle(() => props.widget, { minHeight: DEFAULT_LIST_STYLE.minHeight })\n\nconst { domEventHandlers } = useWidgetEvents({\n widget: toRef(props, 'widget'),\n designMode: () => designMode\n})\n\nfunction rowKey(row: Record<string, unknown>, index: number) {\n return resolveListRowKey(row, index, listOptions.value.itemKey)\n}\n\nfunction isRowHidden(row: Record<string, unknown>, rowIndex: number) {\n lifecycle?.scriptRevision.value\n return shouldHideListRow(listOptions.value, row, rowIndex, pageData.value, lifecycle?.getMethods())\n}\n\nfunction handleItemClick(row: Record<string, unknown>, rowIndex: number, event: Event) {\n if (designMode) {\n if (DESIGN_MODE_PREVENT_DEFAULT_EVENTS.has('click')) {\n event.preventDefault()\n }\n return\n }\n\n if (!hasBoundListEvent('itemClick')) return\n\n runListScopedEvent(props.widget, 'itemClick', event, lifecycle, { item: row, index: rowIndex })\n}\n\nfunction hasBoundListEvent(name: string) {\n const items = normalizeWidgetEvents(props.widget.events)\n return items.some(item => item.name.trim() === name && hasWidgetEventBinding(item))\n}\n</script>\n\n<template>\n <ScopedStyleBlock :css=\"scopedStyleCss\" :id=\"widget.id\" />\n <div ref=\"hostRef\" v-bind=\"scopeAttr\" v-on=\"domEventHandlers\">\n <template v-for=\"(row, rowIndex) in renderRows\" :key=\"rowKey(row, rowIndex)\">\n <ItemScopeProvider :item=\"row\" :index=\"rowIndex\">\n <DesignModeContainerChildren v-if=\"isPreviewMode\" :widget=\"widget\" />\n\n <template v-for=\"(child, childIndex) in listChildren\" :key=\"child.id\" @click=\"handleItemClick(row, rowIndex, $event)\">\n <slot name=\"item\" :item=\"child\" :index=\"childIndex\" />\n </template>\n </ItemScopeProvider>\n </template>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { Page } from '../../core/index.ts'\nimport DesignModeContainerChildren from '../shared/designer/container-children.vue'\nimport { LIFECYCLE_KEY, useLifecycle, useWidgetVisualStyles, LOWCODE_DESIGN_MODE_KEY } from '../../runtime/runtime.ts'\nimport ScopedStyleBlock from '../../runtime/scoped-style-block.vue'\nimport { LOWCODE_DESIGNER_SELECT_WIDGET_KEY } from '../../runtime/runtime.ts'\nimport { useElementSize } from '@vueuse/core'\nimport { computed, inject, provide, ref } from 'vue'\n\nconst props = defineProps<{\n widget: Page\n}>()\n\nconst designMode = inject(LOWCODE_DESIGN_MODE_KEY, false)\nconst selectWidget = inject(LOWCODE_DESIGNER_SELECT_WIDGET_KEY, null)\nconst hostRef = ref<HTMLElement | null>(null)\nconst { width: hostWidth } = useElementSize(hostRef)\n\nfunction handlePageClick() {\n if (!designMode || !selectWidget) return\n selectWidget(props.widget)\n}\n\nconst { scopeAttr, scopedStyleCss } = useWidgetVisualStyles(() => props.widget, {\n designMode: () => designMode,\n containerWidth: () => hostWidth.value,\n hostRef\n})\n\nconst injectedLifecycle = inject(LIFECYCLE_KEY, null)\nif (!injectedLifecycle) {\n const localLifecycle = useLifecycle({\n page: () => props.widget,\n designMode: () => designMode\n })\n provide(LIFECYCLE_KEY, localLifecycle)\n}\n</script>\n\n<template>\n <div ref=\"hostRef\" class=\"flex h-full min-h-full flex-1 flex-col\" v-bind=\"scopeAttr\" @click=\"handlePageClick\">\n <DesignModeContainerChildren :widget=\"widget\">\n <slot />\n </DesignModeContainerChildren>\n <ScopedStyleBlock :css=\"scopedStyleCss\" :id=\"widget.id\" />\n </div>\n</template>\n","import type { MaterialDefinition } from '../core/index.ts'\nimport ButtonView from './packages/button/view.vue'\nimport ImageView from './packages/image/view.vue'\nimport TextView from './packages/text/view.vue'\nimport DividerView from './packages/divider/view.vue'\nimport CardView from './packages/card/view.vue'\nimport CarouselView from './packages/carousel/view.vue'\nimport CarouselSlideView from './packages/carousel/carousel-slide/view.vue'\nimport GridView from './packages/grid/view.vue'\nimport TabView from './packages/tab/view.vue'\nimport TabPaneView from './packages/tab/tab-pane/view.vue'\nimport ListView from './packages/list/view.vue'\nimport PageView from './page/view.vue'\nimport { isGridStructuredNode } from './packages/grid/options.ts'\nimport { TAB_KEYED_SLOT_CONFIG } from './packages/tab/options.ts'\nimport { CAROUSEL_KEYED_SLOT_CONFIG } from './packages/carousel/options.ts'\n\n/**\n * 运行时物料:仅 import view.vue,禁止从 definitions.ts 推导。\n *\n * definitions.ts → index.ts 会静态 import setter/designer,若在此引用 definitions,\n * Rollup 会把设计器代码打进 runtime 包(见 dist/runtime-definitions-*.js)。\n * 新增物料时须同步维护本文件;toRuntimeMaterialDefinitions 仅用于已隔离的 view-only 源。\n */\nexport const runtimeMaterialDefinitions: MaterialDefinition[] = [\n {\n widget: {\n id: 0,\n type: 'grid',\n name: 'grid',\n component: GridView,\n usesItemSlot: isGridStructuredNode,\n children: [],\n options: {}\n }\n },\n { widget: { id: 0, type: 'card', name: 'card', component: CardView, children: [], options: {} } },\n {\n widget: {\n id: 0,\n type: 'tab',\n name: 'tab',\n component: TabView,\n keyedSlotConfig: TAB_KEYED_SLOT_CONFIG,\n children: [],\n options: {}\n }\n },\n {\n widget: {\n id: 0,\n type: 'carousel',\n name: 'carousel',\n component: CarouselView,\n keyedSlotConfig: CAROUSEL_KEYED_SLOT_CONFIG,\n children: [],\n options: {}\n }\n },\n {\n widget: {\n id: 0,\n type: 'list',\n name: 'list',\n component: ListView,\n usesItemSlot: true,\n children: [],\n options: {}\n }\n },\n { widget: { id: 0, type: 'button', name: 'button', component: ButtonView, children: [], options: {} } },\n { widget: { id: 0, type: 'image', name: 'image', component: ImageView, children: [], options: {} } },\n { widget: { id: 0, type: 'text', name: 'text', component: TextView, children: [], options: {} } },\n { widget: { id: 0, type: 'divider', name: 'divider', component: DividerView, children: [], options: {} } },\n { widget: { id: 0, type: 'tab-pane', name: 'tab-pane', component: TabPaneView, children: [], options: {} } },\n { widget: { id: 0, type: 'carousel-slide', name: 'carousel-slide', component: CarouselSlideView, children: [], options: {} } },\n { widget: { id: 0, type: 'page', name: 'page', component: PageView, children: [], options: {} } }\n]\n"],"names":["props","__props","styleId","computed","styleEl","syncStyle","text","watch","onBeforeUnmount","BUTTON_TYPE_OPTIONS","BUTTON_SIZE_OPTIONS","BUTTON_SHAPE_OPTIONS","getButtonLayoutDisplay","block","DEFAULT_BUTTON_OPTIONS","BUTTON_TYPES","item","BUTTON_SIZES","BUTTON_SHAPES","BTN_BASE","BTN_SIZE","BTN_ROUND","BTN_CIRCLE","BTN_TYPE","stripPseudoVariantClasses","classes","variant","prefix","token","resolveButtonViewClasses","options","type","size","shape","typeClasses","ensureButtonOptions","widget","layoutDisplay","styles","ensureWidgetStyles","patchWidgetEvents","designMode","inject","LOWCODE_DESIGN_MODE_KEY","resolvedOptions","useResolvedWidgetOptions","coerceBindingDisplayString","buttonType","value","buttonSize","buttonShape","hostRef","ref","hostWidth","useElementSize","scopeAttr","scopedStyleCss","hasStateStyle","useWidgetVisualStyles","disabled","danger","ghost","buttonClass","domEventHandlers","useWidgetEvents","toRef","_createVNode","ScopedStyleBlock","_unref","_createElementVNode","_mergeProps","_toHandlers","_hoisted_1","IMAGE_FIT_OPTIONS","IMAGE_FIT_CLASS","DEFAULT_IMAGE_OPTIONS","IMAGE_FITS","IMAGE_LAYOUT_STYLE_KEYS","normalizeImageSrc","src","pickImageUrlFromObject","key","candidate","coerceImageSrcValue","unwrapped","unwrapListRowScalar","resolved","coerceImageAltValue","fallback","hasImageSrc","shouldImageWidgetFixedLayout","style","breakpoint","isOverflowClipSize","readStyleValue","ensureImageOptions","_a","pickImageLayoutStyle","layout","resolveImageViewStyle","fit","hasFixedSize","flatLayout","resolveFlatCssStyle","imageClasses","wrapperClasses","IMAGE_FALLBACK_SRC","alt","resolvedView","getWidgetDefaultStyle","showPlaceholder","loadFailed","displaySrc","IMG_DOM_EVENTS","wrapperDomEventHandlers","handlers","name","handler","handleImageError","event","_b","_createElementBlock","_normalizeClass","TEXT_DISPLAY_DEFAULT","DEFAULT_TEXT_OPTIONS","ensureTextOptions","resolveTextLineClamp","heightValue","height","parseSize","lineHeight","fontSize","resolveTextViewClasses","clipMode","lineClamp","base","resolveTextDecorationClasses","resolveTextViewStyle","next","clipWidth","clipHeight","widthWrap","layoutStyle","activeBreakpoint","textClasses","clipScopedCss","buildScopedStyleCss","mergedScopedCss","decorationClasses","textTag","_openBlock","_createBlock","_resolveDynamicComponent","DIVIDER_ORIENTATION_OPTIONS","DIVIDER_TYPE_OPTIONS","formatOrientationMarginInput","margin","trimmed","normalizeOrientationMargin","getDividerLayoutStyle","DEFAULT_DIVIDER_OPTIONS","DIVIDER_ORIENTATIONS","DIVIDER_TYPES","isDividerHorizontal","isDividerOrientationMarginApplicable","orientation","DIVIDER_BASE","resolveDividerViewClasses","ensureDividerOptions","normalized","dashed","orientationMargin","dividerType","isHorizontal","showText","hasCustomOrientationMargin","dividerClass","innerMarginCss","property","_Fragment","_toDisplayString","SORTABLE_GROUP","EMPTY_INSERT_THRESHOLD","useSortableWidgetList","materialRegistry","useInjectMaterialRegistry","anchorRef","shallowRef","sortable","widgets","toValue","parentWidget","emptyHint","isEmpty","dropZoneId","showEmptyHint","canAcceptDrop","parent","widgetCanAcceptDropTarget","widgetIdsKey","destroySortable","resolveWidgetFromItem","id","found","onSortableAdd","evt","list","newIndex","onSortableRemove","index","w","onSortableUpdate","oldIndex","moveArrayIndex","onSortableEnd","setAnchorEl","el","resolveSortableRoot","initSortable","root","designer","zoneId","Sortable","nextTick","draggableItemClass","isWidgetEffectivelyLocked","hasExplicitWidgetWidth","shouldWidgetStretchFullWidth","empty","onMounted","provide","LOWCODE_WIDGET_DRAG_START_KEY","widgetId","dispatchWidgetDragPointerdown","emptyPlaceholderClass","_renderList","CanvasSelectionChrome","DesignerWidgetNode","useInjectDesigner","childWidgets","childListKey","CanvasDraggableList","_renderSlot","_ctx","CARD_SIZE_OPTIONS","DEFAULT_CARD_HEAD_TITLE","DEFAULT_CARD_STYLE","DEFAULT_CARD_OPTIONS","resolveCardViewClasses","ensureCardOptions","cardTitle","showHead","cardSize","cardClasses","bodyScopeAttr","useCardContainerStyle","DesignModeContainerChildren","CAROUSEL_SLIDE_FLEX_LAYOUT_DEFAULTS","FLEX_LAYOUT_FLEX_DEFAULTS","DEFAULT_CAROUSEL_SLIDE_STYLE","DEFAULT_CAROUSEL_SLIDE_TITLE","resolveCarouselSlideHeight","carouselWidget","resolveCarouselHeight","resolveCarouselSlideContainerCssStyle","includeUserStyle","merged","resolveInternalPaneContainerCssStyle","carouselHeight","ensureCarouselSlideWidget","ensureInternalPaneWidget","CAROUSEL_EFFECT_OPTIONS","CAROUSEL_DOT_POSITION_OPTIONS","DEFAULT_CAROUSEL_TITLE","DEFAULT_CAROUSEL_MIN_HEIGHT","DEFAULT_CAROUSEL_STYLE","DEFAULT_CAROUSEL_OPTIONS","ensureCarouselOptions","ensureWidgetEditorTitle","resolveCarouselDotColor","color","CAROUSEL_DOTS_POSITION","resolveCarouselViewClasses","dotPosition","active","carouselSlot","createKeyedSlotMaterialHelpers","isCarouselSlideNode","createDefaultCarouselSlides","getCarouselSlides","resolveActiveCarouselKey","setCarouselActiveKey","CAROUSEL_KEYED_SLOT_CONFIG","findOwningCarouselSlide","normalizeCarouselWidget","resolveActiveCarouselIndex","slides","activeKey","slide","currentIndex","isHovered","isTransitioning","autoplayTimer","rootScopedCss","useContainerStyle","decl","extra","carouselSlides","carouselSlideIdsKey","slideCount","effect","autoplay","autoplaySpeed","speed","carouselScopedCss","fadeTransitionCss","showDots","showArrows","pauseOnHover","infinite","initialSlide","carouselRenderKey","parsed","trackStyle","carouselClasses","isSlideActive","shouldRenderSlide","normalizeIndex","goTo","animate","prev","handleBeforeChange","handleAfterChange","nextSlide","prevSlide","syncCarouselToActiveKey","startAutoplay","stopAutoplay","prevKey","from","to","current","__expose","slideIndex","_","$event","paneDefaultStyle","InternalPaneView","GRID_KIND_LABELS","GRID_LAYOUT_PANE_KIND","resolveGridResizeAxes","kind","getGridKind","resolveGridPaneLabel","getChildrenLayout","isGridStructuredNode","children","normalizeGridWidget","child","DEFAULT_GRID_TITLE","GRID_FLEX_LAYOUT_DEFAULTS","GRID_ROOT_DEFAULT_STYLE","GRID_FILL_STYLE","DEFAULT_GRID_ROOT_STYLE","DEFAULT_FLEX_CONTAINER_STYLE","DEFAULT_GRID_PANE_STYLE","DEFAULT_FLEX_PANE_STYLE","STRUCTURED_PARENT_SPLIT_LAYOUT","formatEqualSharePercent","count","buildStructuredPaneSplitStyle","childCount","share","GRID_SPLIT_AXIS_SIZE_KEYS","applyGridStructuredSplitStyles","paneStyle","childStyles","GRID_PANE_SHELL","STRUCTURED_CONTAINER_IGNORE_USER_KEYS","GRID_ROOT_SHELL","isGridInternalPane","getDefaultGridStyle","getGridLayoutDefaults","defaults","_width","_height","patchGridFlexLayoutDefaults","display","FLEX_LAYOUT_KEYS","resolveGridContainerCssStyle","structuredLayout","user","applyGridClipOverflowCss","GRID_SHELL_LAYOUT_KEYS","resolveGridHostCssStyle","shell","resolveGridShellCssStyle","source","buildResponsiveShellFlexForWidth","width","parentLayout","byBp","has","bp","STYLE_BREAKPOINTS","resolveResponsiveValue","cleanResponsiveValue","buildResponsiveShellFlexForHeight","buildResponsiveAlignSelfForRowWidth","buildResponsiveAlignSelfForColumnHeight","mergeUserShellDimensions","widthIsResponsive","isResponsiveStyleValue","skipWidth","heightIsResponsive","skipHeight","hasExplicitWidgetHeight","minHeightIsResponsive","minHeight","applyBackgroundImageStyleDefaults","flat","resolveGridShellStyle","userStyle","cssStyle","flex","alignSelf","ensureGridOptions","gridRef","gridWidth","useResizeObserver","entries","childrenLayout","isStructuredLayout","hostCssStyle","childIndex","TAB_PANE_FLEX_LAYOUT_DEFAULTS","DEFAULT_TAB_PANE_STYLE","DEFAULT_TAB_PANE_TITLE","resolveTabPaneContainerCssStyle","_parentWidget","ensureTabPaneWidget","TAB_POSITION_OPTIONS","TAB_SIZE_OPTIONS","DEFAULT_TAB_TITLE","DEFAULT_TAB_STYLE","DEFAULT_TAB_OPTIONS","ensureTabOptions","TAB_NAV_WRAP_BORDER","TAB_ROOT_LAYOUT","TAB_TAB_PADDING","resolveTabViewClasses","tabPosition","tabSize","isVertical","tabSlot","isTabPaneNode","getTabPaneTitle","createDefaultTabPanes","getTabPanes","resolveActiveTabKey","setTabActiveKey","TAB_KEYED_SLOT_CONFIG","findOwningTabPane","normalizeTabWidget","tabPanes","tabClasses","inkBarEnabled","localActiveKey","isPaneActive","pane","selectPane","navRef","inkBarStyle","updateInkBarPosition","nav","activeIndex","activeEl","resizeObserver","paneIndex","_vShow","scope","ITEM_SCOPE_KEY","lifecycle","LIFECYCLE_KEY","itemScope","listOptions","pageData","listChildren","allRows","unref","resolveListRows","isPreviewMode","previewRows","renderRows","DEFAULT_LIST_STYLE","rowKey","row","resolveListRowKey","rowIndex","ItemScopeProvider","selectWidget","LOWCODE_DESIGNER_SELECT_WIDGET_KEY","handlePageClick","localLifecycle","useLifecycle","runtimeMaterialDefinitions","GridView","CardView","TabView","CarouselView","ListView","ButtonView","ImageView","TextView","DividerView","TabPaneView","CarouselSlideView","PageView"],"mappings":";;;;;;;;;;AAGA,UAAMA,IAAQC,GAKRC,IAAUC,EAAS,MAAM,YAAY,OAAOH,EAAM,EAAE,CAAC,EAAE;AAE7D,QAAII,IAAmC;AAEvC,aAASC,EAAUC,GAAc;AAC/B,UAAI,SAAO,WAAa,MAExB;AAAA,YAAI,CAACA,GAAM;AACT,UAAAF,KAAA,QAAAA,EAAS,UACTA,IAAU;AACV;AAAA,QACF;AAEA,QAAKA,MACHA,IAAU,SAAS,eAAeF,EAAQ,KAAK,GAC1CE,MACHA,IAAU,SAAS,cAAc,OAAO,GACxCA,EAAQ,KAAKF,EAAQ,OACrB,SAAS,KAAK,YAAYE,CAAO,KAIrCA,EAAQ,cAAcE;AAAA;AAAA,IACxB;AAEA,WAAAC,EAAM,MAAMP,EAAM,KAAKK,GAAW,EAAE,WAAW,IAAM,GAErDG,GAAgB,MAAM;AACpB,MAAAJ,KAAA,QAAAA,EAAS,UACTA,IAAU;AAAA,IACZ,CAAC;;IC7BYK,KAA8D;AAAA,EACzE,EAAE,OAAO,WAAW,OAAO,KAAA;AAAA,EAC3B,EAAE,OAAO,WAAW,OAAO,KAAA;AAAA,EAC3B,EAAE,OAAO,UAAU,OAAO,KAAA;AAAA,EAC1B,EAAE,OAAO,QAAQ,OAAO,KAAA;AAAA,EACxB,EAAE,OAAO,QAAQ,OAAO,KAAA;AAC1B,GAEaC,KAA8D;AAAA,EACzE,EAAE,OAAO,SAAS,OAAO,IAAA;AAAA,EACzB,EAAE,OAAO,UAAU,OAAO,IAAA;AAAA,EAC1B,EAAE,OAAO,SAAS,OAAO,IAAA;AAC3B,GAEaC,KAAgE;AAAA,EAC3E,EAAE,OAAO,WAAW,OAAO,KAAA;AAAA,EAC3B,EAAE,OAAO,SAAS,OAAO,KAAA;AAAA,EACzB,EAAE,OAAO,UAAU,OAAO,KAAA;AAC5B;AAiBO,SAASC,GAAuBC,GAAkD;AACvF,SAAOA,IAAQ,UAAU;AAC3B;AAEO,MAAMC,IAET;AAAA,EACF,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,UAAU;AAAA,EACV,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AACT,GAEMC,KAAe,IAAI,IAAgBN,GAAoB,IAAI,CAAAO,MAAQA,EAAK,KAAK,CAAC,GAC9EC,KAAe,IAAI,IAAgBP,GAAoB,IAAI,CAAAM,MAAQA,EAAK,KAAK,CAAC,GAC9EE,KAAgB,IAAI,IAAiBP,GAAqB,IAAI,CAAAK,MAAQA,EAAK,KAAK,CAAC,GAEjFG,KACJ,6TAEIC,KAAuC;AAAA,EAC3C,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,OAAO;AACT,GAEMC,KAAwC;AAAA,EAC5C,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,OAAO;AACT,GAEMC,KAAyC;AAAA,EAC7C,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,OAAO;AACT,GAEMC,KAAuC;AAAA,EAC3C,SACE;AAAA,EACF,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,MAAM;AACR;AAEA,SAASC,GAA0BC,GAAiBC,GAA+C;AACjG,QAAMC,IAAS,GAAGD,CAAO;AACzB,SAAOD,EACJ,MAAM,KAAK,EACX,OAAO,CAAAG,MAASA,KAAS,CAACA,EAAM,WAAWD,CAAM,CAAC,EAClD,KAAK,GAAG;AACb;AAEO,SAASE,GAAyBC,IAWrC,IAAc;AAChB,QAAMC,IAAOD,EAAQ,QAAQhB,EAAuB,MAC9CkB,IAAOF,EAAQ,QAAQhB,EAAuB,MAC9CmB,IAAQH,EAAQ,SAAShB,EAAuB;AACtD,MAAIoB,IAAcX,GAASQ,CAAI;AAC/B,EAAID,EAAQ,mBAAgBI,IAAcV,GAA0BU,GAAa,OAAO,IACpFJ,EAAQ,oBAAiBI,IAAcV,GAA0BU,GAAa,QAAQ,IACtFJ,EAAQ,mBAAgBI,IAAcV,GAA0BU,GAAa,OAAO;AACxF,QAAMT,IAAU,CAACN,IAAUC,GAASY,CAAI,GAAGE,CAAW;AAEtD,SAAID,MAAU,WAASR,EAAQ,KAAKJ,GAAUW,CAAI,CAAC,GAC/CC,MAAU,YAAUR,EAAQ,KAAKH,GAAWU,CAAI,CAAC,GACjDF,EAAQ,UAAUC,MAAS,aAAWN,EAAQ,KAAK,+BAA+B,GAClFK,EAAQ,SAASC,MAAS,aAAWN,EAAQ,KAAK,2CAA2C,GAC7FK,EAAQ,SAAOL,EAAQ,KAAK,aAAa,GACzCK,EAAQ,YAAUL,EAAQ,KAAK,mDAAmD,GAE/EA;AACT;AAEO,SAASU,GAAoBC,GAAgB;AAClD,EAAAA,EAAO,YAAPA,EAAO,UAAY,CAAA;AACnB,QAAMN,IAAUM,EAAO;AACvB,EAAIN,EAAQ,SAAS,WAAWA,EAAQ,OAAOhB,EAAuB,QAClEgB,EAAQ,SAAS,UAAa,CAACf,GAAa,IAAIe,EAAQ,IAAI,OAC9DA,EAAQ,OAAOhB,EAAuB,QAEpCgB,EAAQ,SAAS,UAAa,CAACb,GAAa,IAAIa,EAAQ,IAAI,OAC9DA,EAAQ,OAAOhB,EAAuB,QAEpCgB,EAAQ,UAAU,UAAa,CAACZ,GAAc,IAAIY,EAAQ,KAAK,OACjEA,EAAQ,QAAQhB,EAAuB,QAErCgB,EAAQ,aAAa,WAAWA,EAAQ,WAAWhB,EAAuB,WAC1EgB,EAAQ,UAAU,WAAWA,EAAQ,QAAQhB,EAAuB;AACxE,QAAMuB,IAAgBzB,GAAuBkB,EAAQ,KAAK,GACpDQ,IAASC,EAAmBH,CAAM;AACxC,SAAKE,EAAO,YACVA,EAAO,UAAU,CAAA,IAEfD,KAAiB,QAAQA,MAAkB,KAC7CC,EAAO,QAAQ,UAAUD,IAEzB,OAAOC,EAAO,QAAQ,SAEpBR,EAAQ,WAAW,WAAWA,EAAQ,SAAShB,EAAuB,SACtEgB,EAAQ,UAAU,WAAWA,EAAQ,QAAQhB,EAAuB,QACxE0B,GAAkBJ,CAAM,GACjBN;AACT;;;;;;;;;ACnJA,UAAM9B,IAAQC,GAMRwC,IAAaC,EAAOC,GAAyB,EAAK,GAElDC,IAAkBC,GAAwC,MAAM7C,EAAM,MAAM,GAE5EM,IAAOH,EAAS,MAAM2C,GAA2BF,EAAgB,MAAM,MAAM9B,EAAuB,IAAI,CAAC,GAEzGiC,IAAa5C,EAAqB,MAAM;AAC5C,YAAM6C,IAAQJ,EAAgB,MAAM;AACpC,aAAOI,MAAU,aAAaA,MAAU,YAAYA,MAAU,UAAUA,MAAU,SAASA,IAAQlC,EAAuB;AAAA,IAC5H,CAAC,GAEKmC,IAAa9C,EAAqB,MAAM;AAC5C,YAAM6C,IAAQJ,EAAgB,MAAM;AACpC,aAAOI,MAAU,WAAWA,MAAU,UAAUA,IAAQlC,EAAuB;AAAA,IACjF,CAAC,GAEKoC,IAAc/C,EAAsB,MAAM;AAC9C,YAAM6C,IAAQJ,EAAgB,MAAM;AACpC,aAAOI,MAAU,WAAWA,MAAU,WAAWA,IAAQlC,EAAuB;AAAA,IAClF,CAAC,GAEKqC,IAAUC,EAAwB,IAAI,GACtC,EAAE,OAAOC,MAAcC,GAAeH,CAAO,GAC7C,EAAE,WAAAI,GAAW,gBAAAC,GAAgB,eAAAC,EAAA,IAAkBC,GAAsB,MAAM1D,EAAM,QAAQ;AAAA,MAC7F,YAAY,MAAMyC;AAAA,MAClB,gBAAgB,MAAMY,EAAU;AAAA,MAChC,SAAAF;AAAA,IAAA,CACD,GAEKQ,IAAWxD,EAAS,MAAMyC,EAAgB,MAAM,aAAa,EAAI,GACjE/B,IAAQV,EAAS,MAAMyC,EAAgB,MAAM,UAAU,EAAI,GAC3DgB,IAASzD,EAAS,MAAMyC,EAAgB,MAAM,WAAW,EAAI,GAC7DiB,IAAQ1D,EAAS,MAAMyC,EAAgB,MAAM,UAAU,EAAI,GAE3DkB,IAAc3D;AAAA,MAAS,MAC3B0B,GAAyB;AAAA,QACvB,MAAMkB,EAAW;AAAA,QACjB,MAAME,EAAW;AAAA,QACjB,OAAOC,EAAY;AAAA,QACnB,OAAOrC,EAAM;AAAA,QACb,QAAQ+C,EAAO;AAAA,QACf,OAAOC,EAAM;AAAA,QACb,UAAUF,EAAS;AAAA,QACnB,gBAAgBF,EAAc,OAAO;AAAA,QACrC,iBAAiBA,EAAc,QAAQ;AAAA,QACvC,gBAAgBA,EAAc,OAAO;AAAA,MAAA,CACtC;AAAA,IAAA,GAGG,EAAE,kBAAAM,EAAA,IAAqBC,GAAgB;AAAA,MAC3C,QAAQC,EAAMjE,GAAO,QAAQ;AAAA,MAC7B,YAAY,MAAMyC;AAAA,IAAA,CACnB;;MAICyB,EAA0DC,IAAA;AAAA,QAAvC,KAAKC,EAAAZ,CAAA;AAAA,QAAiB,IAAIvD,EAAA,OAAO;AAAA,MAAA;MACpDoE,EAES,UAFTC,EAES;AAAA,iBAFG;AAAA,QAAJ,KAAInB;AAAA,QAAU,MAAK;AAAA,QAAU,OAAOW,EAAA;AAAA,QAAc,UAAUH,EAAA;AAAA,MAAA,GAAkBS,EAAAb,CAAA,GAAWgB,GAAMH,EAAiBL,CAAA,YACnHzD,EAAA,KAAI,GAAA,IAAAkE,EAAA;AAAA,IAAA;;ICxEEC,KAA0D;AAAA,EACrE,EAAE,OAAO,QAAQ,OAAO,KAAA;AAAA,EACxB,EAAE,OAAO,WAAW,OAAO,KAAA;AAAA,EAC3B,EAAE,OAAO,SAAS,OAAO,KAAA;AAAA,EACzB,EAAE,OAAO,QAAQ,OAAO,KAAA;AAAA,EACxB,EAAE,OAAO,cAAc,OAAO,KAAA;AAChC,GAiBMC,KAA4C;AAAA,EAChD,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA,EACP,MAAM;AAAA,EACN,cAAc;AAChB,GAEaC,IAA6E;AAAA,EACxF,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AACP,GAEMC,KAAa,IAAI,IAAcH,GAAkB,IAAI,CAAAzD,MAAQA,EAAK,KAAK,CAAC,GAExE6D,KAA0B,CAAC,SAAS,UAAU,YAAY,aAAa,YAAY,aAAa,UAAU,aAAa,eAAe,gBAAgB,cAAc,WAAW,cAAc,gBAAgB,iBAAiB,eAAe,WAAW,WAAW,gBAAgB,uBAAuB,wBAAwB,2BAA2B,0BAA0B,UAAU,eAAe,eAAe,eAAe,aAAa,eAAe,gBAAgB,cAAc,aAAa,UAAU;AAE9f,SAASC,GAAkBC,GAA6B;AAC7D,SAAI,OAAOA,KAAQ,WAAiBJ,EAAsB,MACnDI,EAAI,KAAA;AACb;AAEA,SAASC,GAAuBhC,GAAwC;AACtE,aAAWiC,KAAO,CAAC,OAAO,OAAO,MAAM,GAAY;AACjD,UAAMC,IAAYlC,EAAMiC,CAAG;AAC3B,QAAI,OAAOC,KAAc,YAAYA,EAAU;AAC7C,aAAOA,EAAU,KAAA;AAAA,EAErB;AACA,SAAOP,EAAsB;AAC/B;AAGO,SAASQ,GAAoBnC,GAAwB;AAC1D,QAAMoC,IAAYC,GAAoBrC,CAAK;AAC3C,MAAIoC,MAAcpC;AAChB,WAAOmC,GAAoBC,CAAS;AAGtC,MAA+BA,KAAc,aAAaT,EAAsB;AAChF,MAAI,OAAOS,KAAc,SAAU,QAAON,GAAkBM,CAAS;AACrE,MAAI,MAAM,QAAQA,CAAS,GAAG;AAC5B,eAAWpE,KAAQoE,GAAW;AAC5B,YAAME,IAAWH,GAAoBnE,CAAI;AACzC,UAAIsE,EAAU,QAAOA;AAAA,IACvB;AACA,WAAOX,EAAsB;AAAA,EAC/B;AACA,SAAI,OAAOS,KAAc,WAChBJ,GAAuBI,CAAoC,IAEvD,OAAOA,CAAS,EAAE,KAAA,KAChBT,EAAsB;AACvC;AAGO,SAASY,GAAoBvC,GAAgBwC,IAAWb,EAAsB,KAAa;AAChG,SAAO7B,GAA2BE,GAAOwC,CAAQ;AACnD;AAEO,SAASC,GAAYV,GAA8B;AACxD,SAAOD,GAAkBC,CAAG,EAAE,SAAS;AACzC;AAEO,SAASW,GAA6BC,IAAkB,IAAIC,IAAuD,MAAe;AACvI,SAAOC,GAAmBC,EAAeH,GAAO,SAASC,CAAU,CAAC,KAAKC,GAAmBC,EAAeH,GAAO,UAAUC,CAAU,CAAC;AACzI;AAEO,SAASG,GAAmB3D,GAAgB;;AACjD,EAAAA,EAAO,YAAPA,EAAO,UAAY,CAAA;AACnB,QAAMN,IAAUM,EAAO;AACvB,SAAIN,EAAQ,QAAQ,SAAWA,EAAQ,MAAM6C,EAAsB,MAC9D7C,EAAQ,MAAMgD,GAAkBhD,EAAQ,GAAG,IAC5CA,EAAQ,QAAQ,UACX,OAAOA,EAAQ,OAAQ,cAAUA,EAAQ,MAAM6C,EAAsB,OAC1E7C,EAAQ,QAAQ,UAAa,CAAC8C,GAAW,IAAI9C,EAAQ,GAAG,OAC1DA,EAAQ,MAAM6C,EAAsB,MAEtC,OAAQ7C,EAAoC,UACvCkE,IAAA5D,EAAO,WAAP,QAAA4D,EAAe,YAClBzD,EAAmBH,CAAM,EAAE,UAAU,CAAA,IAEvCI,GAAkBJ,CAAM,GACjBN;AACT;AAEA,SAASmE,GAAqBN,GAA2B;AACvD,QAAMO,IAAmB,CAAA;AACzB,SAAArB,GAAwB,QAAQ,CAAAI,MAAO;AACrC,UAAMjC,IAAQ2C,EAAMV,CAAG;AACvB,IAAIjC,MAAU,UAAaA,MAAU,OACnCkD,EAAOjB,CAAG,IAAIjC;AAAA,EAElB,CAAC,GACMkD;AACT;AAEO,SAASC,GAAsBrE,IAAwB,IAAI6D,IAAkB,CAAA,GAA4B;AAC9G,QAAMS,IAAMtE,EAAQ,OAAO6C,EAAsB,KAC3C0B,IAAeX,GAA6BC,CAAK,GACjDW,IAAaC,GAAoBN,GAAqBN,CAAK,GAAG,IAAI,GAClEa,IAAe,CAAC,SAAS9B,GAAgB0B,CAAG,CAAC,GAE7CK,IAAiB,CAAC,aAAa,cAAc,cAAc,cAAc;AAE/E,SAAIJ,KACFG,EAAa,KAAK,UAAU,QAAQ,GACpCC,EAAe,KAAK,iBAAiB,GACjCH,EAAW,SACbG,EAAe,KAAK,SAAS,GAE3BH,EAAW,UACbG,EAAe,KAAK,SAAS,KAG/BD,EAAa,KAAK,cAAc,QAAQ,GAGnC;AAAA,IACL,cAAAA;AAAA,IACA,gBAAAC;AAAA,IACA,cAAAJ;AAAA,EAAA;AAEJ;AAGO,MAAMK,KACX;;;;;;;;ACpJF,UAAM1G,IAAQC,GAMRwC,IAAaC,EAAOC,GAAyB,EAAK,GAElDC,IAAkBC,GAAuC,MAAM7C,EAAM,MAAM,GAE3E+E,IAAM5E,EAAS,MAAMgF,GAAoBvC,EAAgB,MAAM,GAAG,CAAC,GAEnE+D,IAAMxG,EAAS,MAAMoF,GAAoB3C,EAAgB,MAAM,GAAG,CAAC,GAEnEO,IAAUC,EAAwB,IAAI,GAEtC,EAAE,WAAAG,GAAW,gBAAAC,EAAA,IAAmBE,GAAsB,MAAM1D,EAAM,QAAQ;AAAA,MAC9E,YAAY,MAAMyC;AAAA,MAClB,SAAAU;AAAA,IAAA,CACD,GAEKyD,IAAezG,EAAS,MAAMgG,GAAsBvD,EAAgB,OAAOiE,EAAsB7G,EAAM,MAAM,CAAC,CAAC,GAE/G8G,IAAkB3G,EAAS,MAAM,CAACsF,GAAYV,EAAI,KAAK,CAAC,GAExDgC,IAAa3D,EAAI,EAAK;AAE5B,IAAA7C,EAAMwE,GAAK,MAAM;AACf,MAAAgC,EAAW,QAAQ;AAAA,IACrB,CAAC;AAED,UAAMC,IAAa7G,EAAS,MAAO4G,EAAW,QAAQL,KAAqB3B,EAAI,KAAM,GAE/E,EAAE,kBAAAhB,EAAA,IAAqBC,GAAgB;AAAA,MAC3C,QAAQC,EAAMjE,GAAO,QAAQ;AAAA,MAC7B,YAAY,MAAMyC;AAAA,IAAA,CACnB,GAEKwE,IAAiB,oBAAI,IAAI,CAAC,QAAQ,OAAO,CAAC,GAE1CC,IAA0B/G,EAAS,MAAM;AAC7C,YAAMgH,IAAmD,CAAA;AACzD,iBAAW,CAACC,GAAMC,CAAO,KAAK,OAAO,QAAQtD,EAAiB,KAAK;AACjE,QAAKkD,EAAe,IAAIG,CAAI,MAC1BD,EAASC,CAAI,IAAIC;AAGrB,aAAOF;AAAA,IACT,CAAC;AAED,aAASG,EAAiBC,GAAc;;AACtC,MAAAR,EAAW,QAAQ,KACnBS,KAAAxB,IAAAjC,EAAiB,OAAM,UAAvB,QAAAyD,EAAA,KAAAxB,GAA+BuB;AAAA,IACjC;;MAIErD,EAA0DC,IAAA;AAAA,QAAvC,KAAKC,EAAAZ,CAAA;AAAA,QAAiB,IAAIvD,EAAA,OAAO;AAAA,MAAA;MACpDoE,EAmBM,OAnBNC,EAmBM;AAAA,iBAnBG;AAAA,QAAJ,KAAInB;AAAA,QAAW,OAAOyD,EAAA,MAAa;AAAA,MAAA,GAAwBxC,EAAAb,CAAA,GAAWgB,GAA8B2C,EAAA,OAAD,EAAA,CAAA,GAAA;AAAA,QAE7FJ,EAAA,cAQTW,EAQM,OAAA;AAAA;UANJ,OAAKC,EAAA,CAAC,0LACEd,EAAA,MAAa,eAAY,kCAAA,EAAA,CAAA;AAAA,QAAA;UAEjCvC,EAEM,OAAA;AAAA,YAFD,OAAM;AAAA,YAAU,SAAQ;AAAA,YAAgB,MAAK;AAAA,YAAe,eAAY;AAAA,UAAA;YAC3EA,EAA2a,QAAA,EAAra,GAAE,kaAAga;AAAA,UAAA;yBAf5aoD,EAQE,OAAA;AAAA;UANC,KAAKT,EAAA;AAAA,UACL,KAAKL,EAAA,SAAO;AAAA,UACZ,OAAKe,EAAEd,EAAA,MAAa,YAAY;AAAA,UAChC,WAAW;AAAA,UACX,yBAAOW,MAAA;;AAAiBnD,oBAAAA,KAAAA,IAAAA,MAAiB,SAAjBA,gBAAAA,EAAAA,KAAAA,GAAwBmD;AAAA;AAAA,UAChD,SAAOD;AAAA,QAAA;;;;ICpEDK,KAAuB,gBAmBvBC,KAAqG;AAAA,EAChH,MAAM;AAAA,EACN,eAAe;AAAA,EACf,WAAW;AAAA,EACX,MAAM;AACR;AAEO,SAASC,GAAkBzF,GAAgB;;AAChD,EAAAA,EAAO,YAAPA,EAAO,UAAY,CAAA;AACnB,QAAMN,IAAUM,EAAO;AACvB,SAAIN,EAAQ,SAAS,WAAWA,EAAQ,OAAO8F,GAAqB,OAChE9F,EAAQ,kBAAkB,WAAWA,EAAQ,gBAAgB8F,GAAqB,gBAClF9F,EAAQ,cAAc,WAAWA,EAAQ,YAAY8F,GAAqB,YAC1E9F,EAAQ,SAAS,WAAWA,EAAQ,OAAO8F,GAAqB,QAC/D5B,IAAA5D,EAAO,WAAP,QAAA4D,EAAe,YAClBzD,EAAmBH,CAAM,EAAE,UAAU,CAAA,IAEvCI,GAAkBJ,CAAM,GACjBN;AACT;AAMA,SAASgG,GAAqBnC,GAAiBC,GAAiD;AAC9F,QAAMmC,IAAcjC,EAAeH,GAAO,UAAUC,CAAU;AAC9D,MAAI,CAACC,GAAmBkC,CAAW,EAAG;AAEtC,QAAMC,IAASC,GAAUF,CAAW;AACpC,MAAI,CAACC,EAAO,SAASA,EAAO,SAAS,KAAKA,EAAO,SAAS,IAAK;AAE/D,QAAME,IAAaD,GAAUnC,EAAeH,GAAO,cAAcC,CAAU,CAAC;AAC5E,MAAIsC,EAAW,SAASA,EAAW,QAAQ,KAAKF,EAAO,SAASE,EAAW;AACzE,WAAO,KAAK,IAAI,GAAG,KAAK,MAAMF,EAAO,QAAQE,EAAW,KAAK,CAAC;AAGhE,QAAMC,IAAWF,GAAUnC,EAAeH,GAAO,YAAYC,CAAU,CAAC;AACxE,MAAIuC,EAAS,SAASA,EAAS,QAAQ,KAAKH,EAAO,SAASG,EAAS;AACnE,WAAO,KAAK,IAAI,GAAG,KAAK,MAAMH,EAAO,QAAQG,EAAS,KAAK,CAAC;AAG9D,MAAIH,EAAO,SAAS;AAClB,WAAO,KAAK,IAAI,GAAG,KAAK,MAAMA,EAAO,QAAQ,EAAE,CAAC;AAIpD;AAEO,SAASI,GAAuBC,GAAwBC,GAA8B;AAC3F,QAAMC,IAAO,CAAC,aAAa,WAAW,cAAc,YAAY;AAEhE,SAAIF,MAAa,eACR,CAAC,GAAGE,GAAM,UAAU,cAAc,WAAW,UAAU,mBAAmB,eAAe,GAAID,MAAc,SAAY,CAAC,cAAcA,CAAS,EAAE,IAAI,EAAG,IAG7JD,MAAa,QACR,CAAC,GAAGE,GAAM,UAAU,cAAc,WAAW,UAAU,mBAAmB,eAAe,qBAAqB,IAGhH,CAAC,GAAGA,GAAM,uBAAuB,aAAa;AACvD;AAEO,SAASC,GAA6B1G,GAIhC;AACX,QAAML,IAAoB,CAAA;AAC1B,SAAIK,EAAQ,aAAWL,EAAQ,KAAK,WAAW,GAC3CK,EAAQ,iBAAeL,EAAQ,KAAK,cAAc,GAClDK,EAAQ,QAAML,EAAQ,KAAK,gBAAgB,KAAK,GAC7CA;AACT;AAEO,SAASgH,GAAqB9C,IAAkB,IAAIC,IAA8B,MAA6B;AACpH,QAAM8C,IAAOnC,GAAoBZ,GAAOC,CAAU,GAC5C+C,IAAY9C,GAAmB6C,EAAK,KAAK,GACzCE,IAAa/C,GAAmB6C,EAAK,MAAM,GAC3CG,IAAYF,KAAa,CAACC,GAE1BE,IAA4B,CAAA;AAKlC,MAJID,KAAaH,EAAK,UACpBI,EAAY,WAAWJ,EAAK,YAAYA,EAAK,QAG3C,CAACE;AACH,WAAO;AAAA,MACL,OAAOE;AAAA,MACP,UAAU;AAAA,MACV,SAASV,GAAuB,MAAM,MAAS;AAAA,IAAA;AAInD,QAAME,IAAYR,GAAqBnC,GAAOC,CAAU,GAClDyC,IAAyBC,MAAc,SAAY,eAAe;AAExE,SAAO;AAAA,IACL,OAAOQ;AAAA,IACP,UAAAT;AAAA,IACA,WAAAC;AAAA,IACA,SAASF,GAAuBC,GAAUC,CAAS;AAAA,EAAA;AAEvD;;;;;;;;;AC1HA,UAAMtI,IAAQC,GAMRwC,IAAaC,EAAOC,GAAyB,EAAK,GAClDQ,IAAUC,EAAwB,IAAI,GACtC,EAAE,OAAOC,MAAcC,GAAeH,CAAO,GAE7CP,IAAkBC,GAAsC,MAAM7C,EAAM,MAAM,GAE1EM,IAAOH,EAAS,MAAM2C,GAA2BF,EAAgB,MAAM,MAAMgF,GAAqB,IAAI,CAAC,GAEvG,EAAE,WAAArE,GAAW,gBAAAC,GAAgB,kBAAAuF,EAAA,IAAqBrF,GAAsB,MAAM1D,EAAM,QAAQ;AAAA,MAChG,YAAY,MAAMyC;AAAA,MAClB,gBAAgB,MAAMY,EAAU;AAAA,MAChC,SAAAF;AAAA,IAAA,CACD,GAEKyD,IAAezG,EAAS,MAAMsI,GAAqB5B,EAAsB7G,EAAM,MAAM,GAAG+I,EAAiB,KAAK,CAAC,GAE/GC,IAAc7I,EAAS,MAAMyG,EAAa,MAAM,OAAO,GAEvDqC,IAAgB9I,EAAS,MAAM;AACnC,YAAM+F,IAASU,EAAa,MAAM;AAClC,aAAK,OAAO,KAAKV,CAAM,EAAE,SAClBgD,GAAoBlJ,EAAM,OAAO,IAAIkG,CAAM,IADV;AAAA,IAE1C,CAAC,GAEKiD,IAAkBhJ,EAAS,MAAM,CAACqD,EAAe,OAAOyF,EAAc,KAAK,EAAE,OAAO,OAAO,EAAE,KAAK;AAAA,CAAI,CAAC,GAEvGG,IAAoBjJ;AAAA,MAAS,MACjCqI,GAA6B;AAAA,QAC3B,eAAe5F,EAAgB,MAAM,kBAAkB;AAAA,QACvD,WAAWA,EAAgB,MAAM,cAAc;AAAA,QAC/C,MAAMA,EAAgB,MAAM,SAAS;AAAA,MAAA,CACtC;AAAA,IAAA,GAGGyG,IAAUlJ,EAAS,MAAOyC,EAAgB,MAAM,SAAS,KAAO,SAAS,MAAO,GAEhF,EAAE,kBAAAmB,EAAA,IAAqBC,GAAgB;AAAA,MAC3C,QAAQC,EAAMjE,GAAO,QAAQ;AAAA,MAC7B,YAAY,MAAMyC;AAAA,IAAA,CACnB;sBAIC6G,EAAA,GAAA7B,EAKM,OALNnD,EAKM;AAAA,eALG;AAAA,MAAJ,KAAInB;AAAA,MAAW,OAAO6F,EAAA;AAAA,IAAA,GAAqB5E,EAAAb,CAAA,GAAWgB,GAAuBH,EAAAL,CAAA,GAAD,EAAA,CAAA,GAAA;AAAA,OAC/EuF,KAAAC,GAEYC,GAFIH,EAAA,KAAO,GAAA;AAAA,QAAE,OAAK3B,EAAA,CAAC,gCAAuC0B,EAAA,KAAiB,CAAA;AAAA,MAAA;oBACrF,MAAU;AAAA,gBAAP9I,EAAA,KAAI,GAAA,CAAA;AAAA,QAAA;;;MAET4D,EAA2DC,IAAA;AAAA,QAAxC,KAAKgF,EAAA;AAAA,QAAkB,IAAIlJ,EAAA,OAAO;AAAA,MAAA;;;ICtD5CwJ,KAA8E;AAAA,EACzF,EAAE,OAAO,QAAQ,OAAO,IAAA;AAAA,EACxB,EAAE,OAAO,SAAS,OAAO,IAAA;AAAA,EACzB,EAAE,OAAO,UAAU,OAAO,KAAA;AAC5B,GAEaC,KAAgE;AAAA,EAC3E,EAAE,OAAO,cAAc,OAAO,KAAA;AAAA,EAC9B,EAAE,OAAO,YAAY,OAAO,KAAA;AAC9B;AAMO,SAASC,GAA6BC,GAAyC;AACpF,MAA4BA,KAAW,QAAQA,MAAW,GAAI,QAAO;AACrE,MAAI,OAAOA,KAAW,YAAY,OAAO,SAASA,CAAM,EAAG,QAAO,GAAGA,CAAM;AAC3E,QAAMC,IAAU,OAAOD,CAAM,EAAE,KAAA;AAC/B,SAAKC,IACD,kBAAkB,KAAKA,CAAO,IAAU,GAAGA,CAAO,OAC/CA,IAFc;AAGvB;AAGO,SAASC,GAA2BF,GAAqD;AAE9F,SADkBD,GAA6BC,CAAM,KACjC;AACtB;AAcO,SAASG,GAAsBhI,GAAkC;AACtE,SAAOA,MAAS,aAAa,EAAE,SAAS,mBAAmB,EAAE,SAAS,SAAS,OAAO,OAAA;AACxF;AAEO,MAAMiI,KAAsG;AAAA,EACjH,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,MAAM;AACR,GAEMC,KAAuB,IAAI,IAAwBR,GAA4B,IAAI,CAAAzI,MAAQA,EAAK,KAAK,CAAC,GACtGkJ,KAAgB,IAAI,IAAiBR,GAAqB,IAAI,CAAA1I,MAAQA,EAAK,KAAK,CAAC;AAEhF,SAASmJ,GAAoBpI,GAAoB;AACtD,SAAOA,MAAS;AAClB;AAEO,SAASqI,GAAqCC,GAAkC;AACrF,SAAOA,MAAgB,UAAUA,MAAgB;AACnD;AAEA,MAAMC,KAAe;AAGd,SAASC,GAA0BzI,GAIvC;AAED,SADqBqI,GAAoBrI,EAAQ,IAAI,IAShDA,EAAQ,WAQG;AAAA,IACdwI;AAAA,IACA;AAAA,EAAA,EAGa,OAAO,OAAO,IAZpB;AAAA,IACLA;AAAA,IACA;AAAA,IACAxI,EAAQ,SAAS,kBAAkB;AAAA,EAAA,EACnC,OAAO,OAAO,IAZT;AAAA,IACLwI;AAAA,IACA;AAAA,IACAxI,EAAQ,SAAS,kBAAkB;AAAA,EAAA,EACnC,OAAO,OAAO;AAiBpB;AAEO,SAAS0I,GAAqBpI,GAAgB;AACnD,EAAAA,EAAO,YAAPA,EAAO,UAAY,CAAA;AACnB,QAAMN,IAAUM,EAAO;AACvB,EAAIN,EAAQ,SAAS,WAAWA,EAAQ,OAAOkI,GAAwB,OACnElI,EAAQ,WAAW,WAAWA,EAAQ,SAASkI,GAAwB,UACvElI,EAAQ,gBAAgB,UAAa,CAACmI,GAAqB,IAAInI,EAAQ,WAAW,OACpFA,EAAQ,cAAckI,GAAwB,eAE5ClI,EAAQ,SAAS,UAAa,CAACoI,GAAc,IAAIpI,EAAQ,IAAI,OAC/DA,EAAQ,OAAOkI,GAAwB;AAEzC,QAAMlB,IAAciB,GAAsBjI,EAAQ,IAAI,GAChDQ,IAASC,EAAmBH,CAAM;AAexC,MAdKE,EAAO,WAGVA,EAAO,QAAQ,UAAUwG,EAAY,SACjChH,EAAQ,SAAS,cACfQ,EAAO,QAAQ,WAAW,UAC5B,OAAOA,EAAO,QAAQ,QAExB,OAAOA,EAAO,QAAQ,UAEtBA,EAAO,QAAQ,QAAQA,EAAO,QAAQ,SAASwG,EAAY,OAC3D,OAAOxG,EAAO,QAAQ,WAVxBA,EAAO,UAAU,EAAE,GAAGwG,EAAA,GAapB,CAACsB,GAAqCtI,EAAQ,WAAW;AAC3D,WAAOA,EAAQ;AAAA,WACNA,EAAQ,sBAAsB,QAAW;AAClD,UAAM2I,IAAaX,GAA2BhI,EAAQ,iBAAiB;AACvE,IAAI2I,MAAe,SACjB,OAAO3I,EAAQ,oBAEfA,EAAQ,oBAAoB2I;AAAA,EAEhC;AACA,SAAAjI,GAAkBJ,CAAM,GACjBN;AACT;;;;;;;;;AC9HA,UAAM9B,IAAQC,GAMRwC,IAAaC,EAAOC,GAAyB,EAAK,GAElDC,IAAkBC,GAAyC,MAAM7C,EAAM,MAAM,GAE7E0K,IAASvK,EAAS,MAAMyC,EAAgB,MAAM,WAAW,EAAI,GAE7DyH,IAAclK,EAA6B,MAAM;AACrD,YAAM6C,IAAQJ,EAAgB,MAAM;AACpC,aAAOI,MAAU,UAAUA,MAAU,WAAWA,MAAU,WAAWA,IAAQgH,GAAwB;AAAA,IACvG,CAAC,GAEKW,IAAoBxK,EAAS,MAAM;AACvC,UAAI,CAACiK,GAAqCC,EAAY,KAAK;AACzD;AAEF,YAAMT,IAAShH,EAAgB,MAAM;AACrC,aAAOkH,GAA2B,OAAOF,KAAW,YAAY,OAAOA,KAAW,WAAWA,IAAS,MAAS;AAAA,IACjH,CAAC,GAEKgB,IAAczK,EAAsB,MAAM;AAC9C,YAAM6C,IAAQJ,EAAgB,MAAM;AACpC,aAAOI,MAAU,aAAaA,IAAQgH,GAAwB;AAAA,IAChE,CAAC,GAEKa,IAAe1K,EAAS,MAAMgK,GAAoBS,EAAY,KAAK,CAAC,GAEpEzH,IAAUC,EAAwB,IAAI,GACtC,EAAE,OAAOC,MAAcC,GAAeH,CAAO,GAC7C,EAAE,WAAAI,GAAW,gBAAAC,EAAA,IAAmBE,GAAsB,MAAM1D,EAAM,QAAQ;AAAA,MAC9E,YAAY,MAAMyC;AAAA,MAClB,gBAAgB,MAAMY,EAAU;AAAA,MAChC,SAAAF;AAAA,IAAA,CACD,GAEK7C,IAAOH,EAAS,MAAM2C,GAA2BF,EAAgB,MAAM,MAAMoH,GAAwB,IAAI,CAAC,GAE1Gc,IAAW3K,EAAS,MAAM0K,EAAa,SAASvK,EAAK,MAAM,SAAS,CAAC,GAErEyK,IAA6B5K;AAAA,MACjC,MAAM2K,EAAS,SAASH,EAAkB,SAAS,QAAQA,EAAkB,UAAU;AAAA,IAAA,GAGnFK,IAAe7K;AAAA,MAAS,MAC5B;AAAA,QACE,GAAGoK,GAA0B;AAAA,UAC3B,MAAMK,EAAY;AAAA,UAClB,QAAQF,EAAO;AAAA,UACf,UAAUI,EAAS;AAAA,QAAA,CACpB;AAAA,QACDA,EAAS,SAAS,qBAAqBT,EAAY,KAAK;AAAA,QACxDU,EAA2B,SAASV,EAAY,UAAU,UAAU;AAAA,QACpEU,EAA2B,SAASV,EAAY,UAAU,WAAW;AAAA,QACrEK,EAAO,SAASI,EAAS,SAAS;AAAA,MAAA,EAClC,OAAO,OAAO;AAAA,IAAA,GAGZG,IAAiB9K,EAAS,MAAM;AACpC,UAAI,CAAC4K,EAA2B,SAASJ,EAAkB,SAAS,QAAQA,EAAkB,UAAU;AACtG,eAAO;AAET,YAAMf,IAAS,OAAOe,EAAkB,SAAU,WAAW,GAAGA,EAAkB,KAAK,OAAOA,EAAkB,OAC1GO,IAAWb,EAAY,UAAU,SAAS,wBAAwB;AACxE,aAAO,gBAAgBrK,EAAM,OAAO,EAAE,wBAAwBkL,CAAQ,IAAItB,CAAM;AAAA,IAClF,CAAC,GAEKT,IAAkBhJ,EAAS,MAAM,CAACqD,EAAe,OAAOyH,EAAe,KAAK,EAAE,OAAO,OAAO,EAAE,KAAK;AAAA,CAAI,CAAC,GAExG,EAAE,kBAAAlH,EAAA,IAAqBC,GAAgB;AAAA,MAC3C,QAAQC,EAAMjE,GAAO,QAAQ;AAAA,MAC7B,YAAY,MAAMyC;AAAA,IAAA,CACnB;sBAIC6G,EAAA,GAAA7B,EAOM,OAPNnD,EAOM;AAAA,eAPG;AAAA,MAAJ,KAAInB;AAAA,MAAW,OAAO6H,EAAA;AAAA,IAAA,GAAsB5G,EAAAb,CAAA,KAAW,MAAK,YAAA,GAAYgB,GAAMH,EAAiBL,CAAA,GAAD,EAAA,CAAA,GAAA;AAAA,MACjF+G,EAAA,cAAhBrD,EAIW0D,GAAA,EAAA,KAAA,KAAA;AAAA,wBAHT9G,EAAmD,QAAA;AAAA,UAA7C,OAAM;AAAA,UAAkB,eAAY;AAAA,QAAA;QAC1CA,EAAgD,QAAhDG,IAAgD4G,GAAd9K,EAAA,KAAI,GAAA,CAAA;AAAA,wBACtC+D,EAAmD,QAAA;AAAA,UAA7C,OAAM;AAAA,UAAkB,eAAY;AAAA,QAAA;;MAE5CH,EAA2DC,IAAA;AAAA,QAAxC,KAAKgF,EAAA;AAAA,QAAkB,IAAIlJ,EAAA,OAAO;AAAA,MAAA;;;8FCvFnDoL,KAAiB,aACjBC,KAAyB;;;;;;;;;;;AAU/B,aAASC,EAAsBzJ,GAAuC;AACpE,YAAM0J,IAAmBC,GAAA,GACnBC,IAAYC,GAA+B,IAAI,GAC/CC,IAAWD,GAA4B,IAAI,GAE3CE,IAAU1L,EAAS,OAClB2B,EAAQ,SAAS,kBACfgK,GAAQhK,EAAQ,OAAO,KAAK,CAAA,EACpC,GACKiK,IAAe5L,EAAS,MAAM2L,GAAQhK,EAAQ,YAAY,KAAK,IAAI,GACnEkK,IAAYlK,EAAQ,aAAa,WAEjCmK,IAAU9L,EAAS,MAAM,CAAC0L,EAAQ,MAAM,MAAM,GAE9CK,IAAa/L,EAAS,MAAA;;AAAM,eAAA2L,GAAQhK,EAAQ,UAAU,OAAKkE,IAAA+F,EAAa,UAAb,gBAAA/F,EAAoB,OAAM;AAAA,OAAC,GAEtFmG,IAAgBhM,EAAS,MAAM8L,EAAQ,SAASnK,EAAQ,SAAS,yBAAyBoK,EAAW,KAAK,GAE1GE,IAAgBjM,EAAS,MAAM;AACnC,QAAK2B,EAAQ,SAAS;AACtB,cAAMuK,IAASN,EAAa;AAC5B,eAAKM,IACEC,GAA0BxK,EAAQ,SAAS,MAAMuK,GAAQ;AAAA,UAC9D,iBAAiBb,EAAiB;AAAA,UAClC,oBAAoBA,EAAiB;AAAA,QAAA,CACtC,IAJmB;AAAA,MAKtB,CAAC,GAEKe,IAAepM,EAAS,MAAM0L,EAAQ,MAAM,IAAI,CAAAzJ,MAAUA,EAAO,EAAE,EAAE,KAAK,GAAG,CAAC;AAEpF,eAASoK,KAAkB;;AACzB,SAAAxG,IAAA4F,EAAS,UAAT,QAAA5F,EAAgB,WAChB4F,EAAS,QAAQ;AAAA,MACnB;AAEA,eAASa,GAAsBzL,GAAiC;AAC9D,YAAIA,EAAK,gBAAiB,QAAOA,EAAK;AAEtC,cAAM0L,IAAK,OAAO1L,EAAK,QAAQ,QAAQ;AACvC,YAAI,CAAC,OAAO,MAAM0L,CAAE,GAAG;AACrB,gBAAMC,IAAQ7K,EAAQ,SAAS,eAAe4K,CAAE;AAChD,cAAIC,EAAO,QAAOA;AAAA,QACpB;AAEA,eAAO7K,EAAQ,SAAS;AAAA,MAC1B;AAEA,eAAS8K,GAAcC,GAAoB;AACzC,cAAM7L,IAAO6L,EAAI,MACXzK,IAASN,EAAQ,SAAS,wBAAwB2K,GAAsBzL,CAAI;AAElF,YAAI,CAACoB,EAAQ;AAEb,cAAM0K,IAAOjB,EAAQ,OACfkB,KAAWF,EAAI,YAAYC,EAAK;AACtC,QAAAhL,EAAQ,SAAS,iBAAiBM,GAAQ0K,GAAMC,EAAQ,GAExD/L,EAAK,OAAA,GACLc,EAAQ,SAAS,wBAAwB,IAAI,GACzCA,EAAQ,SAAS,yBAAyBoK,EAAW,SACvDpK,EAAQ,SAAS,wBAAwB,IAAI;AAAA,MAEjD;AAEA,eAASkL,GAAiBH,GAAoB;AAC5C,cAAM7L,IAAO6L,EAAI,MACXzK,IAASqK,GAAsBzL,CAAI;AACzC,YAAI,CAACoB,EAAQ;AAEb,cAAM0K,IAAOjB,EAAQ,OACfoB,KAAQH,EAAK,UAAU,QAAKI,GAAE,OAAO9K,EAAO,EAAE;AACpD,QAAI6K,MAAS,KACXH,EAAK,OAAOG,IAAO,CAAC;AAAA,MAExB;AAEA,eAASE,GAAiBN,GAAoB;AAC5C,cAAM,EAAE,UAAAO,GAAU,UAAAL,EAAA,IAAaF;AAC/B,QAAIO,MAAa,UAAaL,MAAa,UAAaK,MAAaL,KACrEM,GAAexB,EAAQ,OAAOuB,GAAUL,CAAQ;AAAA,MAClD;AAEA,eAASO,KAAgB;AACvB,QAAAxL,EAAQ,SAAS,wBAAwB,IAAI;AAAA,MAC/C;AAEA,eAASyL,EAAYC,GAA8C;AACjE,YAAIA,aAAc,aAAa;AAC7B,UAAA9B,EAAU,QAAQ8B;AAClB;AAAA,QACF;AACA,YAAIA,KAAM,SAASA,KAAMA,EAAG,eAAe,aAAa;AACtD,UAAA9B,EAAU,QAAQ8B,EAAG;AACrB;AAAA,QACF;AACA,QAAA9B,EAAU,QAAQ;AAAA,MACpB;AAEA,eAAS+B,KAA0C;;AACjD,iBAAOzH,IAAA0F,EAAU,UAAV,gBAAA1F,EAAiB,kBAAiB;AAAA,MAC3C;AAEA,eAAS0H,KAAe;AACtB,cAAMC,IAAOF,GAAA;AACb,YAAI,CAACE,EAAM;AAEX,QAAAnB,GAAA;AAEA,cAAMoB,IAAW9L,EAAQ,UACnB+L,IAAS3B,EAAW;AAE1B,QAAAN,EAAS,QAAQkC,GAAS,OAAOH,GAAM;AAAA,UACrC,OAAO,EAAE,MAAMtC,IAAgB,MAAM,IAAM,KAAKe,EAAc,MAAA;AAAA,UAC9D,WAAW;AAAA,UACX,WAAW;AAAA,UACX,QAAQ;AAAA,UACR,iBAAiB;AAAA,UACjB,eAAe;AAAA,UACf,sBAAsBd;AAAA,UACtB,eAAe;AAAA,UACf,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,mBAAmB;AAAA,UACnB,YAAY;AAAA,UACZ,QAAQuB,GAAoB;AAC1B,YAAAe,EAAS,6BAAA;AACT,kBAAMlB,KAAK,OAAQG,EAAI,KAAoB,QAAQ,QAAQ,GACrDzK,KAASwL,EAAS,eAAelB,EAAE;AACzC,YAAItK,OACAyK,EAAI,KAAoB,kBAAkBzK;AAAA,UAEhD;AAAA,UACA,UAAU,MAAM;AACd,YAAK6J,EAAQ,SACb2B,EAAS,wBAAwBC,CAAM;AAAA,UACzC;AAAA,UACA,OAAOjB;AAAA,UACP,UAAUI;AAAA,UACV,UAAUG;AAAA,UACV,OAAO,MAAM;AACX,YAAAS,EAAS,wBAAwB,IAAI,GACrCN,GAAA,GACAS,GAAS,MAAM;AACb,cAAAH,EAAS,2BAAA,GACTA,EAAS,iBAAA;AAAA,YACX,CAAC;AAAA,UACH;AAAA,QAAA,CACD;AAAA,MACH;AAEA,eAASI,GAAmB5L,GAAoC;AAC9D,cAAMX,IAAoB,CAAA;AAC1B,eAAIwM,GAA0BnM,EAAQ,SAAS,MAAMM,CAAM,KACzDX,EAAQ,KAAK,iBAAiB,GAE5ByM,GAAuBrH,EAAsBzE,CAAM,CAAC,IACtDX,EAAQ,KAAK,YAAY,IAChB0M,GAA6B/L,GAAQoJ,CAAgB,KAC9D/J,EAAQ,KAAK,cAAc,GAEtBA,EAAQ,SAASA,EAAQ,KAAK,GAAG,IAAI;AAAA,MAC9C;AAEA,aAAAlB,EAAMmL,GAAW,MAAM;AACrB,QAAAqC,GAAS,MAAML,IAAc;AAAA,MAC/B,CAAC,GAEDnN,EAAMgM,GAAc,MAAM;AACxB,QAAAwB,GAAS,MAAML,IAAc;AAAA,MAC/B,CAAC,GAEDnN,EAAM6L,GAAe,MAAM;AACzB,QAAA2B,GAAS,MAAML,IAAc;AAAA,MAC/B,CAAC,GAEDnN,EAAM0L,GAAS,CAAAmC,MAAS;AACtB,QAAI,CAACA,KAAStM,EAAQ,SAAS,yBAAyBoK,EAAW,SACjEpK,EAAQ,SAAS,wBAAwB,IAAI;AAAA,MAEjD,CAAC,GAEDuM,GAAU,MAAM;AACd,QAAAX,GAAA;AAAA,MACF,CAAC,GAEDlN,GAAgB,MAAM;AACpB,QAAIsB,EAAQ,SAAS,yBAAyBoK,EAAW,SACvDpK,EAAQ,SAAS,wBAAwB,IAAI,GAE/C0K,GAAA;AAAA,MACF,CAAC,GAYD8B,GAAQC,IAViC,CAACC,GAAUjH,MAAU;AAC5D,cAAMoG,IAAOF,GAAA;AACb,YAAI,CAACE,EAAM;AAEX,cAAM3M,IAAO2M,EAAK,cAAc,2CAA2Ca,CAAQ,IAAI;AACvF,QAAKxN,KAELyN,GAA8BzN,GAAMuG,CAAK;AAAA,MAC3C,CAEsD,GAE/C;AAAA,QACL,aAAAgG;AAAAA,QACA,WAAAvB;AAAAA,QACA,SAAAC;AAAAA,QACA,eAAAE;AAAAA,QACA,oBAAA6B;AAAAA,QACA,SAAAnC;AAAAA,MAAA;AAAA,IAEJ;AAEA,UAAM7L,IAAQC,GAcR,EAAE,aAAAsN,GAAa,SAAAtB,GAAS,eAAAE,GAAe,WAAAH,GAAW,oBAAAgC,GAAoB,SAAAnC,EAAA,IAAYN,EAAsB;AAAA,MAC5G,UAAUvL,EAAM;AAAA,MAChB,SAASiE,EAAMjE,GAAO,SAAS;AAAA,MAC/B,cAAciE,EAAMjE,GAAO,cAAc;AAAA,MACzC,WAAWA,EAAM;AAAA,MACjB,YAAYiE,EAAMjE,GAAO,YAAY;AAAA,IAAA,CACtC,GAEKyC,IAAaC,EAAOC,GAAyB,EAAK,GAElD+L,IAAwBvO,EAAS,MACjCgM,EAAc,QACT,8FAEL1J,IACK,yDAEF,QACR;;MAIY2B,EAAA6H,CAAA,UAAXxE,EAEM,OAAA;AAAA;QAFe,KAAKrD,EAAAmJ,CAAA;AAAA,QAAa,OAAK7F,EAAA,CAAC,yEAAgFgH,EAAA,KAAqB,CAAA;AAAA,MAAA,MAC7ItK,EAAA4H,CAAA,CAAS,GAAA,CAAA;OAEd1C,EAAA,EAAA,GAAA7B,EAeM0D,GAAA,MAAAwD,GAdsBvK,EAAAyH,CAAA,GAAO,CAAzBzJ,GAAQ6K,YADlBxF,EAeM,OAAA;AAAA,QAbH,KAAKrF,EAAO;AAAA;QACZ,KAAY,CAAAoL,MAAE;UAAkBP,MAAK,KAAQ7I,EAAAmJ,CAAA,EAAYC,CAAE;AAAA;QAK5D,OAAK9F,EAAA,CAAC,mCACEtD,EAAA4J,CAAA,EAAmB5L,CAAM,CAAA,CAAA;AAAA,QAChC,kBAAgBA,EAAO;AAAA,MAAA;QAExB8B,EAEwB0K,IAAA;AAAA,UAFA,UAAU3O,EAAA;AAAA,UAAW,QAAAmC;AAAA,UAAiB,iBAAenC,EAAA;AAAA,QAAA;sBAC3E,MAAyG;AAAA,YAAzGiE,EAAyG2K,IAAA;AAAA,cAApF,UAAU5O,EAAA;AAAA,cAAW,QAAAmC;AAAA,cAAiB,iBAAenC,EAAA;AAAA,cAAe,OAAAgN;AAAA,YAAA;;;;;;;;;;;;;;;;AC7R/F,UAAMjN,IAAQC,GAMRwC,IAAaC,EAAOC,GAAyB,EAAK,GAClDiL,IAAWkB,GAAA,GAEXC,IAAe5O,EAAS,OACvByN,KAAA,QAAAA,EAAU,kBACR5N,EAAM,OAAO,YAAY,CAAA,EACjC,GAEKgP,IAAe7O,EAAS,OACvByN,KAAA,QAAAA,EAAU,kBACRmB,EAAa,MAAM,IAAI,CAAA/N,MAAQA,EAAK,EAAE,EAAE,KAAK,GAAG,EACxD;qBAKSoD,EAAA3B,CAAA,KAAc2B,EAAAwJ,CAAA,UADtBrE,GAQE0F,IAAA;AAAA,MANC,KAAKD,EAAA;AAAA,MACL,UAAU5K,EAAAwJ,CAAA;AAAA,MACV,iBAAe3N,EAAA;AAAA,MACf,SAAS8O,EAAA;AAAA,MACT,cAAY9O,EAAA;AAAA,MACZ,gBAAcA,EAAA;AAAA,IAAA,uFAEjBiP,EAAeC,EAAA,QAAA,WAAA,EAAA,KAAA,GAAA;AAAA;IChCJC,KAA0D;AAAA,EACrE,EAAE,OAAO,WAAW,OAAO,KAAA;AAAA,EAC3B,EAAE,OAAO,SAAS,OAAO,KAAA;AAC3B,GAGaC,KAA0B,QAS1BC,KAA+B;AAAA,EAC1C,SAAS;AAAA,EACT,QAAQ;AACV,GAEaC,KAA0E;AAAA,EACrF,WAAWF;AAAA,EACX,MAAM;AACR;AAEO,SAASG,GAAuBxN,IAAiBuN,GAAqB,MAAM;AACjF,SAAO;AAAA,IACL,MAAM;AAAA,MACJ;AAAA,IAAA;AAAA,IAEF,MAAM;AAAA,MACJ;AAAA,MACAvN,MAAS,UAAU,sBAAsB;AAAA,IAAA;AAAA,IAE3C,OAAO;AAAA,IACP,MAAMA,MAAS,UAAU,QAAQ;AAAA,EAAA;AAErC;AAEO,SAASyN,GAAkBrN,GAAgB;;AAChD,EAAAA,EAAO,YAAPA,EAAO,UAAY,CAAA;AACnB,QAAMN,IAAUM,EAAO;AACvB,SAAIN,EAAQ,cAAc,WACxBA,EAAQ,YAAYyN,GAAqB,aAEvCzN,EAAQ,SAAS,UAAcA,EAAQ,SAAS,aAAaA,EAAQ,SAAS,aAChFA,EAAQ,OAAOyN,GAAqB,SAElCvJ,IAAA5D,EAAO,WAAP,gBAAA4D,EAAe,aAAY,WAC7BzD,EAAmBH,CAAM,EAAE,UAAU,EAAE,GAAGkN,GAAA,IAE5C9M,GAAkBJ,CAAM,GACjBN;AACT;;;;;;;;;AClDA,UAAM9B,IAAQC,GAMRwC,IAAaC,EAAOC,GAAyB,EAAK,GAElDC,IAAkBC,GAAsC,MAAM7C,EAAM,MAAM,GAE1E0P,IAAYvP,EAAS,MAAM2C,GAA2BF,EAAgB,MAAM,SAAS,CAAC,GACtF+M,IAAWxP,EAAS,MAAM,EAAQuP,EAAU,KAAM,GAElDE,IAAWzP,EAAmB,MAAA;;AAAO,eAAA6F,IAAAhG,EAAM,OAAO,YAAb,gBAAAgG,EAAsB,UAAS,UAAU,UAAUuJ,GAAqB;AAAA,KAAK,GAElHM,IAAc1P,EAAS,MAAMqP,GAAuBI,EAAS,KAAK,CAAC,GAEnE,EAAE,eAAAE,GAAe,WAAAvM,GAAW,gBAAAC,GAAgB,SAAAL,MAAY4M;AAAA,MAC5D,MAAM/P,EAAM;AAAA,MACZ,CAAA;AAAA,MACA,EAAE,qBAAqB,IAAM,aAAa,OAAA;AAAA,IAAO,GAG7C,EAAE,kBAAA+D,EAAA,IAAqBC,GAAgB;AAAA,MAC3C,QAAQC,EAAMjE,GAAO,QAAQ;AAAA,MAC7B,YAAY,MAAMyC;AAAA,IAAA,CACnB;;MAICyB,EAA0DC,IAAA;AAAA,QAAvC,KAAKC,EAAAZ,CAAA;AAAA,QAAiB,IAAIvD,EAAA,OAAO;AAAA,MAAA;MACpDoE,EASM,OATNC,EASM;AAAA,iBATG;AAAA,QAAJ,KAAInB;AAAA,QAAW,OAAO0M,EAAA,MAAY;AAAA,MAAA,GAAczL,EAAAb,CAAA,GAAWgB,GAAuBH,EAAAL,CAAA,GAAD,EAAA,CAAA,GAAA;AAAA,QACzE4L,EAAA,cAAXlI,EAEM,OAAA;AAAA;UAFgB,OAAKC,EAAEmI,EAAA,MAAY,IAAI;AAAA,QAAA;UAC3CxL,EAAqD,OAAA;AAAA,YAA/C,OAAKqD,EAAEmI,EAAA,MAAY,KAAK;AAAA,UAAA,MAAKH,EAAA,KAAS,GAAA,CAAA;AAAA,QAAA;QAE9CrL,EAIM,OAJNC,EAIM;AAAA,UAJA,OAAOuL,EAAA,MAAY;AAAA,QAAA,GAAczL,EAAA0L,CAAA,CAAa,GAAA;AAAA,UAClD5L,EAE8B8L,IAAA,EAFA,QAAQ/P,EAAA,UAAM;AAAA,wBAC1C,MAAQ;AAAA,cAARiP,EAAQC,EAAA,QAAA,SAAA;AAAA,YAAA;;;;;;;IClCHc,KAAsCC,IAEtCC,KAAyC,CAAA,GAEzCC,KAA+B;AAErC,SAASC,GAA2BC,GAAoD;AAC7F,SAAOC,GAAsBD,CAAc;AAC7C;AAEO,SAASE,GAAsCpO,GAAgB2J,GAA8B0E,IAAmB,IAAM;AAC3H,QAAMC,IAASC,GAAqCvO,GAAQ+N,IAA8BM,GAAkB,CAAC,QAAQ,CAAC,GAChHG,IAAiBP,GAA2BtE,CAAY;AAC9D,SAAI6E,MACFF,EAAO,SAASE,IAEXF;AACT;AAWO,SAASG,GAA0BzO,GAAsB;AAC9D,EAAA0O,GAAyB1O,GAAQ;AAAA,IAC/B,cAAcgO;AAAA,IACd,cAAcD;AAAA,IACd,kBAAkB,CAAA/N,MAAU;;AAC1B,OAAAoF,KAAOpF,IAAAA,EAAO,WAAPA,gBAAAA,EAAe,YAAtB,eAAAoF,EAA+B;AAAA,IACjC;AAAA,EAAA,CACD;AACH;ACtCO,MAAMuJ,KAAsE;AAAA,EACjF,EAAE,OAAO,WAAW,OAAO,OAAA;AAAA,EAC3B,EAAE,OAAO,QAAQ,OAAO,OAAA;AAC1B,GAEaC,KAAiF;AAAA,EAC5F,EAAE,OAAO,UAAU,OAAO,KAAA;AAAA,EAC1B,EAAE,OAAO,OAAO,OAAO,KAAA;AAAA,EACvB,EAAE,OAAO,QAAQ,OAAO,KAAA;AAAA,EACxB,EAAE,OAAO,SAAS,OAAO,KAAA;AAC3B,GAEaC,KAAyB,OACzBC,KAA8B,SAoB9BC,KAAmC;AAAA,EAC9C,SAAS;AAAA,EACT,WAAWD;AACb,GAEaE,IAAyM;AAAA,EACpN,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,eAAe;AAAA,EACf,MAAM;AAAA,EACN,UAAU;AAAA,EACV,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,UAAU;AACZ;AAEO,SAASC,GAAsBjP,GAAgB;;AACpD,EAAAkP,GAAwBlP,GAAQ6O,EAAsB;AACtD,QAAMnP,IAAWM,EAAO,WAAW,CAAA;AACnC,SAAAA,EAAO,UAAUN,GACbA,EAAQ,WAAW,WACrBA,EAAQ,SAASsP,EAAyB,SAExCtP,EAAQ,aAAa,WACvBA,EAAQ,WAAWsP,EAAyB,YAE1CtP,EAAQ,kBAAkB,UAAaA,EAAQ,gBAAgB,SACjEA,EAAQ,gBAAgBsP,EAAyB,gBAE/CtP,EAAQ,SAAS,WACnBA,EAAQ,OAAOsP,EAAyB,QAEtCtP,EAAQ,aAAa,UAAa,CAAC,OAAOA,EAAQ,QAAQ,EAAE,YAC9DA,EAAQ,WAAWsP,EAAyB,YAE1CtP,EAAQ,gBAAgB,UAAa,CAACkP,GAA8B,KAAK,CAAAhQ,MAAQA,EAAK,UAAUc,EAAQ,WAAW,OACrHA,EAAQ,cAAcsP,EAAyB,eAE7CtP,EAAQ,WAAW,UAAa,CAACiP,GAAwB,KAAK,CAAA/P,MAAQA,EAAK,UAAUc,EAAQ,MAAM,OACrGA,EAAQ,SAASsP,EAAyB,UAExCtP,EAAQ,UAAU,UAAaA,EAAQ,QAAQ,OACjDA,EAAQ,QAAQsP,EAAyB,QAEvCtP,EAAQ,iBAAiB,WAC3BA,EAAQ,eAAesP,EAAyB,eAE9CtP,EAAQ,WAAW,WACrBA,EAAQ,SAASsP,EAAyB,SAExCtP,EAAQ,aAAa,WACvBA,EAAQ,WAAWsP,EAAyB,aAE1CpL,IAAA5D,EAAO,WAAP,gBAAA4D,EAAe,aAAY,WAC7BzD,EAAmBH,CAAM,EAAE,UAAU,EAAE,GAAG+O,GAAA,IAE5C3O,GAAkBJ,CAAM,GACjBN;AACT;AAEO,SAASyP,GAAwBzP,GAA0C;AAChF,QAAM0P,IAAQ1P,KAAA,gBAAAA,EAAS;AACvB,SAAO,OAAO0P,KAAU,YAAYA,EAAM,SAASA,EAAM,SAASJ,EAAyB;AAC7F;AAQO,SAASb,GAAsBnO,GAA4C;;AAChF,QAAM4F,KAAUhC,IAAA5D,KAAA,gBAAAA,EAAQ,YAAR,gBAAA4D,EAAiD;AACjE,MAAI,EAAAgC,KAAU,QAAQA,MAAW,MAAMA,MAAW;AAGlD,WAAOA;AACT;AAEA,MAAMyJ,KAA8D;AAAA,EAClE,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,MAAM;AAAA,EACN,OAAO;AACT;AAEO,SAASC,GAA2BC,GAAkC;AAC3E,SAAO;AAAA,IACL,MAAM;AAAA,IACN,UAAU,CAAC,0BAA0B,qBAAqBA,CAAW,EAAE;AAAA,IACvE,UAAU;AAAA,IACV,OAAO;AAAA,IACP,OAAO;AAAA,IACP,MAAM;AAAA,IACN,UAAU,CAACC,MAAoB;AAAA,MAC7B;AAAA,MACAA,KAAU;AAAA,IAAA,EACV,OAAO,OAAO;AAAA,IAChB,MAAM,CAAC,gDAAgDH,GAAuBE,CAAW,CAAC;AAAA,IAC1F,WAAW,CAACC,MAAoB;AAAA,MAC9B;AAAA,MACA;AAAA,MACAA,IAAS,gBAAgB;AAAA,IAAA;AAAA,IAE3B,OAAO;AAAA,IACP,WAAW;AAAA,IACX,WAAW;AAAA,EAAA;AAEf;AAEA,MAAMC,KAAeC,GAA+B;AAAA,EAClD,eAAe;AAAA,EACf,WAAW;AAAA,EACX,mBAAmB1B;AAAA,EACnB,kBAAkB;AAAA,EAClB,mBAAmBD;AAAA,EACnB,mBAAmB;AAAA,EACnB,wBAAwBkB;AAAA,EACxB,oBAAoBR;AACtB,CAAC,GAEYkB,KAAsBF,GAAa;AAClBA,GAAa;AACNA,GAAa;AAG3C,MAAMG,KAA8BH,GAAa,uBAC3CI,KAAoBJ,GAAa,aACjCK,KAA2BL,GAAa,kBACxCM,KAAuBN,GAAa,cACpCO,KAA6BP,GAAa,iBAC1CQ,KAA0BR,GAAa,iBACvCS,KAA0BT,GAAa;AAE7C,SAASU,GAA2BnQ,GAAwB;AACjE,QAAMoQ,IAASP,GAAkB7P,CAAM,GACjCqQ,IAAYP,GAAyB9P,CAAM,GAC3C6K,IAAQuF,EAAO,UAAU,CAAAE,MAASA,EAAM,OAAOD,CAAS;AAC9D,SAAOxF,KAAS,IAAIA,IAAQ;AAC9B;;;;;;;;;ACrKA,UAAMjN,IAAQC,GAMRwC,IAAaC,EAAOC,GAAyB,EAAK,GAElDgQ,IAAevP,EAAI,CAAC,GACpBwP,IAAYxP,EAAI,EAAK,GACrByP,IAAkBzP,EAAI,EAAK;AACjC,QAAI0P,IAAuD;AAE3D,UAAM,EAAE,WAAAvP,GAAW,gBAAgBwP,GAAe,SAAA5P,MAAY6P;AAAA,MAC5D,MAAMhT,EAAM;AAAA,MACZ,EAAE,WAAWkR,GAAA;AAAA,IAA4B,GAGrC/H,IAAkBhJ,EAAS,MAAM;AACrC,YAAM8S,IAAiB,CAAA,GACjBjL,IAASuI,GAAsBvQ,EAAM,MAAM;AACjD,MAAIgI,KAAQiL,EAAK,KAAK,UAAUjL,CAAM,EAAE,GACxCiL,EAAK,KAAK,2BAA2B1B,GAAwBvR,EAAM,OAAO,OAAO,CAAC,EAAE;AACpF,YAAMkT,IAAQD,EAAK,SAAS,gBAAgBjT,EAAM,OAAO,EAAE,MAAMiT,EAAK,KAAK,GAAG,CAAC,MAAM;AACrF,aAAO,CAACF,EAAc,OAAOG,CAAK,EAAE,OAAO,OAAO,EAAE,KAAK;AAAA,CAAI;AAAA,IAC/D,CAAC,GAEKC,IAAiBhT,EAAS,MAAM8R,GAAkBjS,EAAM,MAAM,CAAC,GAC/DoT,IAAsBjT,EAAS,MAAMgT,EAAe,MAAM,IAAI,CAAAT,MAASA,EAAM,EAAE,EAAE,KAAK,GAAG,CAAC,GAC1FW,IAAalT,EAAS,MAAMgT,EAAe,MAAM,MAAM,GAEvDxB,IAAcxR,EAA8B,MAAM;;AACtD,YAAM6C,KAAQgD,IAAAhG,EAAM,OAAO,YAAb,gBAAAgG,EAAsB;AACpC,aAAOhD,MAAU,SAASA,MAAU,UAAUA,MAAU,UAAUA,IAAQoO,EAAyB;AAAA,IACrG,CAAC,GAEKkC,IAASnT,EAAyB,MAAM;;AAE5C,eADc6F,IAAAhG,EAAM,OAAO,YAAb,gBAAAgG,EAAsB,YACnB,SAAS,SAASoL,EAAyB;AAAA,IAC9D,CAAC,GAEKmC,IAAWpT,EAAS,MAAA;;AAAM,eAAA6F,IAAAhG,EAAM,OAAO,YAAb,gBAAAgG,EAAsB,cAAa;AAAA,KAAK,GAElEwN,IAAgBrT,EAAS,MAAM;;AACnC,YAAM6C,IAAQ,QAAOgD,IAAAhG,EAAM,OAAO,YAAb,gBAAAgG,EAAsB,aAAa;AACxD,aAAO,OAAO,SAAShD,CAAK,KAAKA,KAAS,MAAMA,IAAQoO,EAAyB;AAAA,IACnF,CAAC,GAEKqC,IAAQtT,EAAS,MAAM;;AAC3B,YAAM6C,IAAQ,QAAOgD,IAAAhG,EAAM,OAAO,YAAb,gBAAAgG,EAAsB,KAAK;AAChD,aAAO,OAAO,SAAShD,CAAK,KAAKA,KAAS,IAAIA,IAAQoO,EAAyB;AAAA,IACjF,CAAC,GAEKsC,IAAoBvT,EAAS,MAAM;AACvC,YAAMwT,IAAoB,6CAA6CF,EAAM,KAAK;AAClF,aAAO,CAACtK,EAAgB,OAAOwK,CAAiB,EAAE,OAAO,OAAO,EAAE,KAAK;AAAA,CAAI;AAAA,IAC7E,CAAC,GAEKC,IAAWzT,EAAS,MAAA;;AAAM,eAAA6F,IAAAhG,EAAM,OAAO,YAAb,gBAAAgG,EAAsB,UAAS;AAAA,KAAK,GAC9D6N,IAAa1T,EAAS,MAAA;;AAAM,eAAA6F,IAAAhG,EAAM,OAAO,YAAb,gBAAAgG,EAAsB,YAAW;AAAA,KAAI,GACjE8N,KAAe3T,EAAS,MAAA;;AAAM,eAAA6F,IAAAhG,EAAM,OAAO,YAAb,gBAAAgG,EAAsB,kBAAiB;AAAA,KAAK,GAC1E+N,KAAW5T,EAAS,MAAA;;AAAM,eAAA6F,IAAAhG,EAAM,OAAO,YAAb,gBAAAgG,EAAsB,cAAa;AAAA,KAAK,GAElEgO,KAAe7T,EAAS,MAAMoS,GAA2BvS,EAAM,MAAM,CAAC,GAEtEiU,KAAoB9T,EAAS,MAAM;AACvC,YAAM2B,IAAU9B,EAAM,OAAO,WAAW,CAAA;AACxC,aAAO,CAACoT,EAAoB,OAAOtR,EAAQ,MAAMA,EAAQ,QAAQA,EAAQ,UAAUA,EAAQ,aAAaA,EAAQ,QAAQA,EAAQ,UAAUA,EAAQ,eAAeA,EAAQ,OAAOA,EAAQ,YAAY,EAAE,KAAK,GAAG;AAAA,IAChN,CAAC,GAEK2Q,KAAYtS,EAAS;AAAA,MACzB,KAAK,MAAM+R,GAAyBlS,EAAM,MAAM;AAAA,MAChD,KAAK,CAAAgD,MAAS;AACZ,YAAIA,KAAS,KAAM;AACnB,cAAMkR,IAAS,OAAOlR,KAAU,WAAWA,IAAQ,OAAOA,CAAK;AAC/D,QAAI,OAAO,MAAMkR,CAAM,KACvB/B,GAAqBnS,EAAM,QAAQkU,CAAM;AAAA,MAC3C;AAAA,IAAA,CACD,GAEKC,KAAahU,EAAS,MACtBmT,EAAO,UAAU,SAAe,CAAA,IAE7B;AAAA,MACL,WAAW,eAFE,CAACX,EAAa,QAAQ,GAEH;AAAA,MAChC,YAAYE,EAAgB,QAAQ,aAAaY,EAAM,KAAK,YAAY;AAAA,IAAA,CAE3E,GAEKW,IAAkBjU,EAAS,MAAMuR,GAA2BC,EAAY,KAAK,CAAC;AAEpF,aAAS0C,GAAc3B,GAAwB;AAC7C,aAAOR,GAAyBlS,EAAM,MAAM,MAAM0S,EAAM;AAAA,IAC1D;AAEA,aAAS4B,GAAkB5B,GAAwB;AACjD,aAAO2B,GAAc3B,CAAK,KAAMa,EAAS,SAASJ,EAAe,MAAM,SAAS;AAAA,IAClF;AAEA,aAASoB,GAAetH,GAAuB;AAC7C,UAAIoG,EAAW,SAAS,EAAG,QAAO;AAClC,UAAI,CAACU,GAAS;AACZ,eAAO,KAAK,IAAI,GAAG,KAAK,IAAI9G,GAAOoG,EAAW,QAAQ,CAAC,CAAC;AAE1D,UAAI3K,IAAOuE,IAAQoG,EAAW;AAC9B,aAAI3K,IAAO,MAAGA,KAAQ2K,EAAW,QAC1B3K;AAAA,IACT;AAEA,aAAS8L,GAAKvH,GAAewH,IAAU,IAAM;AAC3C,UAAIpB,EAAW,SAAS,EAAG;AAC3B,YAAM3K,IAAO6L,GAAetH,CAAK,GAC3ByH,IAAO/B,EAAa;AAC1B,MAAIjK,MAASgM,MACbC,GAAmBD,GAAMhM,CAAI,GAC7BmK,EAAgB,QAAQ4B,GACxB9B,EAAa,QAAQjK,GACjB+L,KAAWhB,EAAM,QAAQ,IAC3B,OAAO,WAAW,MAAM;AACtB,QAAAZ,EAAgB,QAAQ,IACxB+B,GAAkBlM,CAAI;AAAA,MACxB,GAAG+K,EAAM,KAAK,KAEdZ,EAAgB,QAAQ,IACxB+B,GAAkBlM,CAAI;AAAA,IAE1B;AAEA,aAASmM,IAAY;AACnB,MAAAL,GAAK7B,EAAa,QAAQ,CAAC;AAAA,IAC7B;AAEA,aAASmC,IAAY;AACnB,MAAAN,GAAK7B,EAAa,QAAQ,CAAC;AAAA,IAC7B;AAEA,aAASoC,EAAwB9P,GAAyBwP,IAAU,IAAO;AACzE,UAAIxP,KAAO,KAAM;AACjB,YAAMgI,IAAQkG,EAAe,MAAM,UAAU,CAAAT,MAASA,EAAM,OAAOzN,CAAG;AACtE,MAAIgI,IAAQ,KAAKA,MAAU0F,EAAa,SACxC6B,GAAKvH,GAAOwH,CAAO;AAAA,IACrB;AAEA,aAASO,IAAgB;AAEvB,MADAC,GAAA,GACI,GAAC1B,EAAS,SAASF,EAAW,SAAS,OAC3CP,IAAgB,YAAY,MAAM;AAChC,QAAIgB,GAAa,SAASlB,EAAU,SACpCiC,EAAA;AAAA,MACF,GAAGrB,EAAc,KAAK;AAAA,IACxB;AAEA,aAASyB,KAAe;AACtB,MAAInC,MACF,cAAcA,CAAa,GAC3BA,IAAgB;AAAA,IAEpB;AAEA,IAAAvS,EAAMkS,IAAW,CAACxN,GAAKiQ,MAAY;AACjC,MAAIjQ,KAAO,QAAQA,MAAQiQ,KAC3BnH,GAAS,MAAMgH,EAAwB9P,GAAK,EAAK,CAAC;AAAA,IACpD,CAAC,GAED1E,EAAM6S,GAAqB,MAAM;AAC/B,MAAArF,GAAS,MAAMgH,EAAwBtC,GAAU,OAAO,EAAK,CAAC;AAAA,IAChE,CAAC,GAEDlS;AAAA,MACE,MAAM,CAACgT,EAAS,OAAOC,EAAc,OAAOH,EAAW,KAAK;AAAA,MAC5D,MAAM2B,EAAA;AAAA,IAAc,GAGtBzU;AAAA,MACE,MAAMyT,GAAa;AAAA,MACnB,CAAAhR,MAAS;AACP,QAAI,OAAOA,KAAU,YAAYA,MAAU2P,EAAa,SACtD6B,GAAKxR,GAAO,EAAK;AAAA,MAErB;AAAA,IAAA,GAGFqL,GAAU,MAAM;AACd,MAAI2F,GAAa,QAAQ,KACvBQ,GAAKR,GAAa,OAAO,EAAK,GAEhCgB,EAAA;AAAA,IACF,CAAC,GAEDxU,GAAgByU,EAAY;AAE5B,UAAM,EAAE,kBAAAlR,GAAA,IAAqBC,GAAgB;AAAA,MAC3C,QAAQC,EAAMjE,GAAO,QAAQ;AAAA,MAC7B,YAAY,MAAMyC;AAAA,IAAA,CACnB;AAED,aAASkS,GAAmBQ,GAAcC,GAAY;;AACpD,OAAA5N,KAAAxB,IAAAjC,GAAiB,OAAM,iBAAvB,QAAAyD,EAAA,KAAAxB,GAAsC,IAAI,YAAY,gBAAgB,EAAE,QAAQ,EAAE,MAAAmP,GAAM,IAAAC,EAAA,EAAG,CAAG;AAAA,IAChG;AAEA,aAASR,GAAkBS,GAAiB;;AAC1C,YAAM3C,IAAQS,EAAe,MAAMkC,CAAO;AAC1C,MAAI3C,KAASA,EAAM,OAAOD,GAAU,UAClCA,GAAU,QAAQC,EAAM,MAE1BlL,KAAAxB,IAAAjC,GAAiB,OAAM,gBAAvB,QAAAyD,EAAA,KAAAxB,GAAqC,IAAI,YAAY,eAAe,EAAE,QAAQqP,EAAA,CAAS;AAAA,IACzF;AAEA,WAAAC,EAAa;AAAA,MACX,MAAAd;AAAA,MACA,IAAI,eAAe;AACjB,eAAO7B,EAAa;AAAA,MACtB;AAAA,IAAA,CACD;MAICzO,EAA6DC,IAAA;AAAA,QAA1C,KAAKuP,EAAA;AAAA,QAAoB,IAAIzT,EAAA,OAAO;AAAA,MAAA;MACvDoE,EAkDM,OAlDNC,EAkDM;AAAA,iBAlDG;AAAA,QAAJ,KAAInB;AAAA,QAAW,OAAOiR,EAAA,MAAgB;AAAA,MAAA,GAAchQ,EAAAb,CAAA,GAAWgB,GAAuBH,EAAAL,EAAA,GAAD,EAAA,CAAA,GAAA;AAAA,cACxF0D,EAgDM,OAAA;AAAA,UA/CH,KAAKwM,GAAA;AAAA,UACL,OAAKvM,EAAE0M,EAAA,MAAgB,QAAQ;AAAA,UAC/B,qCAAYxB,EAAA,QAAS;AAAA,UACrB,qCAAYA,EAAA,QAAS;AAAA,QAAA;UAGdiB,EAAA,SAAcR,EAAA,QAAU,UADhC5L,EAQS,UAAA;AAAA;YANP,MAAK;AAAA,YACJ,UAAQ2M,EAAA,MAAgB,OAAOA,EAAA,MAAgB,SAAS,CAAA;AAAA,YACzD,cAAW;AAAA,YACV,SAAOU;AAAA,UAAA,GACT,OAED,CAAA;UAEAzQ,EAeM,OAAA;AAAA,YAfA,OAAKqD,EAAE0M,EAAA,MAAgB,QAAQ;AAAA,UAAA;YACxBd,EAAA,UAAM,kBAAjB7L,EAIM,OAAA;AAAA;cAJ4B,OAAKC,EAAE0M,EAAA,MAAgB,KAAK;AAAA,cAAG,UAAOD,GAAA,KAAU;AAAA,YAAA;eAChF7K,EAAA,EAAA,GAAA7B,EAEM0D,GAAA,MAAAwD,GAF6BwE,EAAA,OAAc,CAApCT,GAAO6C,YAApB9N,EAEM,OAAA;AAAA,gBAF8C,KAAKiL,EAAM;AAAA,gBAAK,OAAKhL,EAAE0M,EAAA,MAAgB,KAAK;AAAA,cAAA;gBAC9FlF,EAA0FC,EAAA,QAAA,QAAA;AAAA,kBAAvE,MAAMuD;AAAA,kBAAQ,OAAO6C;AAAA,kBAAa,SAASjB,GAAkB5B,CAAK;AAAA,gBAAA;;2BAGzFjL,EAQM,OAAA;AAAA;cARO,OAAKC,EAAE0M,EAAA,MAAgB,IAAI;AAAA,YAAA;eACtC9K,EAAA,EAAA,GAAA7B,EAMM0D,GAAA,MAAAwD,GAL0BwE,EAAA,OAAc,CAApCT,GAAO6C,YADjB9N,EAMM,OAAA;AAAA,gBAJH,KAAKiL,EAAM;AAAA,gBACX,SAAO0B,EAAA,MAAgB,SAASmB,MAAe5C,EAAA,KAAY,CAAA;AAAA,cAAA;gBAE5DzD,EAA0FC,EAAA,QAAA,QAAA;AAAA,kBAAvE,MAAMuD;AAAA,kBAAQ,OAAO6C;AAAA,kBAAa,SAASjB,GAAkB5B,CAAK;AAAA,gBAAA;;;;UAMnFmB,EAAA,SAAcR,EAAA,QAAU,UADhC5L,EAQS,UAAA;AAAA;YANP,MAAK;AAAA,YACJ,UAAQ2M,EAAA,MAAgB,OAAOA,EAAA,MAAgB,SAAS,CAAA;AAAA,YACzD,cAAW;AAAA,YACV,SAAOS;AAAA,UAAA,GACT,OAED,CAAA;UAEUjB,EAAA,SAAYP,EAAA,QAAU,UAAhC5L,EAIK,MAAA;AAAA;YAJkC,OAAKC,EAAE0M,EAAA,MAAgB,IAAI;AAAA,UAAA;aAChE9K,EAAA,EAAA,GAAA7B,EAEK0D,GAAA,MAAAwD,GAFoBwE,EAAA,OAAc,CAA3BqC,GAAGvI,YAAfxF,EAEK,MAAA,EAFqC,KAAKwF,KAAK;AAAA,cAClD5I,EAAwG,UAAA;AAAA,gBAAhG,MAAK;AAAA,gBAAU,SAAO+P,EAAA,MAAgB,UAAUnH,MAAU0F,EAAA,KAAY,CAAA;AAAA,gBAAI,SAAK,CAAA8C,OAAEjB,GAAKvH,CAAK;AAAA,cAAA;;;;;;;;;;;;;;;;ACrR7G,UAAMjN,IAAQC,GAORwC,IAAaC,EAAOC,GAAyB,EAAK,GAClDQ,IAAUC,EAAwB,IAAI,GACtC,EAAE,OAAOC,MAAcC,GAAeH,CAAO,GAE7CuS,IAAmBvV,EAAS,MAAMH,EAAM,yBAAyBA,EAAM,QAAQA,EAAM,cAAc,EAAK,CAAC,GAEzG,EAAE,WAAAuD,GAAW,gBAAAC,EAAA,IAAmBE,GAAsB,MAAM1D,EAAM,QAAQ;AAAA,MAC9E,YAAY,MAAMyC;AAAA,MAClB,gBAAgB,MAAMY,EAAU;AAAA,MAChC,cAAcqS;AAAA,MACd,SAAAvS;AAAA,IAAA,CACD,GAEK,EAAE,kBAAAY,EAAA,IAAqBC,GAAgB;AAAA,MAC3C,QAAQC,EAAMjE,GAAO,QAAQ;AAAA,MAC7B,YAAY,MAAMyC;AAAA,IAAA,CACnB;sBAIC6G,EAAA,GAAA7B,EAKM,OALNnD,EAKM;AAAA,eALG;AAAA,MAAJ,KAAInB;AAAA,IAAA,GAAkBiB,EAAAb,CAAA,GAAWgB,GAAuBH,EAAAL,CAAA,GAAD,EAAA,CAAA,GAAA;AAAA,MAC1DG,EAE8B8L,IAAA,EAFA,QAAQ/P,EAAA,UAAM;AAAA,oBAC1C,MAAQ;AAAA,UAARiP,EAAQC,EAAA,QAAA,SAAA;AAAA,QAAA;;;MAEVjL,EAA0DC,IAAA;AAAA,QAAvC,KAAKC,EAAAZ,CAAA;AAAA,QAAiB,IAAIvD,EAAA,OAAO;AAAA,MAAA;;;;;;;;;;;2BC1BtDsJ,GAEmBoM,IAAA;AAAA,MAFA,QAAQ1V,EAAA;AAAA,MAAS,iBAAeA,EAAA;AAAA,MAAe,OAAOA,EAAA;AAAA,MAAQ,+BAA6BmE,EAAAoM,EAAA;AAAA,IAAA;kBAC5G,MAAQ;AAAA,QAARtB,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;ICACyG,KAA6C;AAAA,EACxD,WAAW;AAAA,EACX,KAAK;AAAA,EACL,QAAQ;AACV,GAGaC,KAA8D;AAAA,EACzE,KAAK;AAAA,EACL,QAAQ;AACV;AAQO,SAASC,GAAsBC,GAAgC;AACpE,UAAQA,GAAA;AAAA,IACN,KAAK;AACH,aAAO,EAAE,OAAO,IAAO,QAAQ,IAAM,MAAM,GAAA;AAAA,IAC7C,KAAK;AACH,aAAO,EAAE,OAAO,IAAM,QAAQ,IAAO,MAAM,GAAA;AAAA,IAC7C;AACE,aAAO,EAAE,OAAO,IAAM,QAAQ,IAAM,MAAM,GAAA;AAAA,EAAK;AAErD;AAEO,SAASC,GAAY5T,GAA0B;;AACpD,QAAM2T,KAAQ/P,IAAA5D,EAAO,YAAP,gBAAA4D,EAAgC;AAC9C,MAAI+P,MAAS,eAAeA,MAAS,SAASA,MAAS;AACrD,WAAOA;AAET,QAAM3O,MAAOI,IAAApF,EAAO,SAAP,gBAAAoF,EAAa,WAAU;AACpC,SAAIJ,EAAK,WAAW,GAAG,IAAU,QAC7BA,EAAK,WAAW,GAAG,IAAU,WAC1B;AACT;AAEO,SAAS6O,GAAqBF,GAAgB9I,GAAuB;AAC1E,SAAO,GAAG2I,GAAiBG,CAAI,CAAC,GAAG9I,IAAQ,CAAC;AAC9C;AAEO,SAASiJ,GAAkB9T,GAAgD;;AAChF,QAAM8D,KAASF,IAAA5D,EAAO,YAAP,gBAAA4D,EAAgB;AAC/B,SAAOE,MAAW,SAASA,MAAW,WAAWA,IAAS;AAC5D;AAEO,SAASiQ,GAAqB/T,GAAyB;AAC5D,QAAM8D,IAASgQ,GAAkB9T,CAAM,GACjCgU,IAAWhU,EAAO,YAAY,CAAA;AACpC,SAAO8D,KAAU,QAAQkQ,EAAS,UAAU;AAC9C;AAEO,SAASC,GAAoBjU,GAAsB;;AACxD,EAAIA,EAAO,SAAS,UAAUA,EAAO,YAAY,SAC/CA,EAAO,WAAW,CAAA,KAEpB4D,IAAA5D,EAAO,aAAP,QAAA4D,EAAiB,QAAQ,CAAAsQ,MAASD,GAAoBC,CAAK;AAC7D;AAEA,MAAMC,KAAqB,MAOdC,KAA4BtG,IAG5BuG,KAAoC;AAAA;AAAA,EAE/C,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,UAAU;AACZ,GAGaC,KAA4B;AAAA;AAAA,EAEvC,QAAQ;AAAA,EACR,UAAU;AACZ,GAEMC,KAAoC;AAAA,EACxC,GAAGC;AAAA,EACH,GAAGH;AAAA,EACH,WAAW;AACb,GAEMI,KAAoC;AAAA,EACxC,GAAGC;AAAA,EACH,GAAGJ;AACL,GAGMK,KAAuE;AAAA,EAC3E,KAAK;AAAA,IACH,SAAS;AAAA,IACT,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,UAAU;AAAA,IACV,WAAW;AAAA,IACX,WAAW;AAAA,IACX,UAAU;AAAA,EAAA;AAAA,EAEZ,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,UAAU;AAAA,IACV,WAAW;AAAA,IACX,WAAW;AAAA,IACX,UAAU;AAAA,EAAA;AAEd;AAEA,SAASC,GAAwBC,GAAuB;AACtD,SAAIA,KAAS,IAAU,QAEhB,GADO,KAAK,MAAO,MAAMA,IAAS,GAAK,IAAI,GACnC;AACjB;AAGA,SAASC,GAA8BhR,GAA4BiR,GAA8B;AAC/F,QAAMC,IAAQJ,GAAwBG,CAAU,GAC1C5O,IAAiB;AAAA,IACrB,WAAW;AAAA,IACX,UAAU;AAAA,IACV,WAAW;AAAA,IACX,WAAW;AAAA,IACX,UAAU;AAAA,IACV,SAAS;AAAA,IACT,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,UAAU;AAAA,EAAA;AAGZ,SAAIrC,MAAW,QACN;AAAA,IACL,GAAGqC;AAAA,IACH,OAAO6O;AAAA,IACP,MAAM,OAAOA,CAAK;AAAA,IAClB,QAAQ;AAAA,EAAA,IAIL;AAAA,IACL,GAAG7O;AAAA,IACH,QAAQ6O;AAAA,IACR,MAAM,OAAOA,CAAK;AAAA,IAClB,OAAO;AAAA,EAAA;AAEX;AAGO,MAAMC,KAA2E;AAAA,EACtF,KAAK,CAAC,SAAS,QAAQ,YAAY,UAAU;AAAA,EAC7C,QAAQ,CAAC,UAAU,aAAa,QAAQ,WAAW;AACrD;AAMO,SAASC,GAA+BlV,GAAgB8D,GAAkC;AAC/F,QAAM5D,IAASC,EAAmBH,CAAM,GAClCsS,IAAO7N,EAAsBzE,CAAM;AACzC,EAAAE,EAAO,UAAU;AAAA,IACf,GAAGoS;AAAA,IACH,GAAGqC,GAA+B7Q,CAAM;AAAA,EAAA,GAE1C,OAAO5D,EAAO,QAAQ;AAEtB,QAAM8T,IAAWhU,EAAO,YAAY,CAAA,GAC9BmV,IAAYL,GAA8BhR,GAAQkQ,EAAS,MAAM;AACvE,aAAWE,KAASF,GAAU;AAC5B,UAAMoB,IAAcjV,EAAmB+T,CAAK,GACtC5N,IAAO,EAAE,GAAG7B,EAAsByP,CAAK,EAAA;AAC7C,eAAWrR,KAAOoS,GAA0BnR,CAAM;AAChD,aAAOwC,EAAKzD,CAAG;AAEjB,IAAAuS,EAAY,UAAU,EAAE,GAAG9O,GAAM,GAAG6O,EAAA;AAAA,EACtC;AACF;AAGA,MAAME,KAA4B;AAAA,EAChC,SAAS;AAAA,EACT,eAAe;AAAA,EACf,MAAM;AAAA,EACN,WAAW;AAAA;AAAA,EAEX,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,WAAW;AAAA,EACX,WAAW;AAAA,EACX,UAAU;AACZ,GAEMC,KAAwC,oBAAI,IAAI,CAAC,WAAW,iBAAiB,cAAc,YAAY,QAAQ,SAAS,UAAU,YAAY,aAAa,YAAY,WAAW,CAAC,GAEnLC,KAA4B;AAAA,EAChC,SAAS;AAAA,EACT,eAAe;AAAA;AAAA,EAEf,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,WAAW;AAAA,EACX,UAAU;AACZ;AAGO,SAASC,GAAmBxV,GAAgB2J,GAAuC;;AAExF,MADI3J,EAAO,SAAS,UAChB,CAAC2J,KAAgBA,EAAa,SAAS,OAAQ,QAAO;AAC1D,QAAM7F,KAASF,IAAA+F,EAAa,YAAb,gBAAA/F,EAAsB;AACrC,SAAOE,MAAW,SAASA,MAAW;AACxC;AAEA,SAAS2R,GAAoBzV,GAAgB2J,GAAwC;AACnF,SAAIA,MAAiB,SACZ6L,GAAmBxV,GAAQ2J,CAAY,IAAI,EAAE,GAAG8K,GAAA,IAA4B,EAAE,GAAGF,GAAA,IAEnFX,GAAY5T,CAAM,MAAM,cAAc,EAAE,GAAGyU,GAAA,IAA4B,EAAE,GAAGF,GAAA;AACrF;AAGA,SAASmB,GAAsB1V,GAAgB2J,GAAwC;AACrF,QAAMgM,IAAWF,GAAoBzV,GAAQ2J,CAAY,GACnD,EAAE,OAAOiM,GAAQ,QAAQC,GAAS,GAAG/R,MAAW6R;AACtD,SAAO7R;AACT;AAEA,SAASgS,GAA4B9V,GAAgB2V,GAA0B;AAC7E,QAAMzV,IAASC,EAAmBH,CAAM;AACxC,MAAI,CAACE,EAAO,SAAS;AACnB,IAAAA,EAAO,UAAU,EAAE,GAAGyV,EAAA;AACtB;AAAA,EACF;AACA,QAAMI,IAAUrS,EAAexD,EAAO,SAAS,WAAW,IAAI;AAC9D,MAAI,EAAA6V,KAAWA,MAAY;AAG3B,eAAWlT,KAAOmT,IAAkB;AAClC,YAAMpV,IAAQ+U,EAAS9S,CAAG;AAC1B,UAAIjC,KAAS,KAAM;AACnB,YAAMqS,IAAU/S,EAAO,QAAQ2C,CAAG;AAClC,OAAIoQ,KAAW,QAAQA,MAAY,QACjC/S,EAAO,QAAQ2C,CAAG,IAAIjC;AAAA,IAE1B;AACF;AAEO,SAASqV,GAA6BjW,GAAgBkW,GAAuC7H,IAAmB,IAAM1E,GAAwC;AACnK,QAAM2E,IAAmB;AAAA,IACvB,GAAGoH,GAAsB1V,GAAQ2J,CAAY;AAAA,EAAA;AAG/C,MAAI0E,GAAkB;AACpB,UAAM8H,IAAO1R,EAAsBzE,CAAM;AACzC,eAAW,CAAC6C,GAAKjC,CAAK,KAAK,OAAO,QAAQuV,CAAI;AAC5C,MAAIvV,KAAS,QAAQA,MAAU,MAC3BsV,KAAoBZ,GAAsC,IAAIzS,CAAG,MACrEyL,EAAOzL,CAAG,IAAIjC;AAAA,EAElB;AAEA,SAAIsV,KACF,OAAO,OAAO5H,GAAQqG,GAA+BuB,CAAgB,CAAC,GAGjEE,GAAyB9H,GAAQ7J,EAAsBzE,CAAM,CAAC;AACvE;AAEA,MAAMqW,KAAyB,CAAC,QAAQ,aAAa,SAAS,UAAU,aAAa,YAAY,YAAY,WAAW;AAGjH,SAASC,GAAwBtW,GAAgBkW,GAAuCvM,GAAwC;AACrI,QAAM4M,IAAQC,GAAyBxW,GAAQ2J,KAAgB,MAAMuM,CAAgB,GAE/E5H,IAAmB,EAAE,GADT2H,GAA6BjW,GAAQkW,GAAkB,IAAOvM,KAAgB,IAAI,EACtE;AAE9B,aAAW9G,KAAOwT,IAAwB;AACxC,UAAMzV,IAAQ2V,EAAM1T,CAAG;AACvB,IAAIjC,KAAS,QAAQA,MAAU,OAC7B0N,EAAOzL,CAAG,IAAIjC;AAAA,EAElB;AAEA,SAAO0N;AACT;AAMA,SAAS8H,GAAyB7S,GAAiBkT,IAAmBlT,GAAiB;AACrF,SAAIG,EAAe+S,GAAQ,UAAU,KAAK/S,EAAe+S,GAAQ,WAAW,KAAK/S,EAAe+S,GAAQ,WAAW,IAC1GlT,IAEF,EAAE,GAAGA,GAAO,UAAU,SAAA;AAC/B;AAEA,SAASmT,GAAiCC,GAA6BC,GAA8D;AACnI,QAAMC,IAA6B,CAAA;AACnC,MAAIC,IAAM;AACV,aAAWC,KAAMC,IAAmB;AAClC,UAAM9T,IAAW+T,GAAuBN,GAAOI,CAAE,EAAE,KAAA;AACnD,IAAK7T,MACL4T,IAAM,IACND,EAAKE,CAAE,IAAI7T,MAAa,UAAUA,MAAa,SAAS,WAAW0T,MAAiB,QAAQ,aAAa;AAAA,EAC3G;AACA,SAAOE,IAAOI,GAAqBL,CAAI,IAAsB;AAC/D;AAEA,SAASM,GAAkCvR,GAA8BgR,GAA8D;AACrI,QAAMC,IAA6B,CAAA;AACnC,MAAIC,IAAM;AACV,aAAWC,KAAMC,IAAmB;AAClC,UAAM9T,IAAW+T,GAAuBrR,GAAQmR,CAAE,EAAE,KAAA;AACpD,IAAK7T,MACL4T,IAAM,IACND,EAAKE,CAAE,IAAI7T,MAAa,UAAUA,MAAa,SAAS,WAAW0T,MAAiB,WAAW,aAAa;AAAA,EAC9G;AACA,SAAOE,IAAOI,GAAqBL,CAAI,IAAsB;AAC/D;AAEA,SAASO,GAAoCT,GAAwD;AACnG,QAAME,IAA6B,CAAA;AACnC,MAAIC,IAAM;AACV,aAAWC,KAAMC,IAAmB;AAClC,UAAM9T,IAAW+T,GAAuBN,GAAOI,CAAE,EAAE,KAAA;AACnD,IAAI,CAAC7T,KAAYA,MAAa,UAAUA,MAAa,WACrD4T,IAAM,IACND,EAAKE,CAAE,IAAI;AAAA,EACb;AACA,SAAOD,IAAOI,GAAqBL,CAAI,IAAsB;AAC/D;AAEA,SAASQ,GAAwCzR,GAAyD;AACxG,QAAMiR,IAA6B,CAAA;AACnC,MAAIC,IAAM;AACV,aAAWC,KAAMC,IAAmB;AAClC,UAAM9T,IAAW+T,GAAuBrR,GAAQmR,CAAE,EAAE,KAAA;AACpD,IAAI,CAAC7T,KAAYA,MAAa,UAAUA,MAAa,WACrD4T,IAAM,IACND,EAAKE,CAAE,IAAI;AAAA,EACb;AACA,SAAOD,IAAOI,GAAqBL,CAAI,IAAsB;AAC/D;AAEA,SAASS,GAAyBf,GAA+BvW,GAAgB4W,GAA2D;AAC1I,QAAMrT,IAAQkB,EAAsBzE,CAAM,GACpCsG,IAAO,EAAE,GAAGiQ,EAAA,GAEZgB,IAAoBC,GAAuBjU,EAAM,KAAK,GACtDoT,IAAQY,IAAoB,KAAK7T,EAAeH,GAAO,OAAO,EAAE,KAAA,GAChEkU,IAAYb,MAAiB,SAAS,CAAC9K,GAAuBvI,CAAK;AACzE,EAAIoT,KAAS,CAACc,KACZnR,EAAK,QAAQqQ,GACTrQ,EAAK,QAAQqQ,MAAU,UAAUA,MAAU,WAE7CrQ,EAAK,OAAOsQ,MAAiB,QAAQ,aAAa,YAC9CA,MAAiB,UACnBtQ,EAAK,YAAY,eAGZ,CAACmR,KAAa,CAACF,KACxB,OAAOjR,EAAK;AAGd,QAAMoR,IAAqBF,GAAuBjU,EAAM,MAAM,GACxDqC,IAAS8R,IAAqB,KAAKhU,EAAeH,GAAO,QAAQ,EAAE,KAAA,GACnEoU,IAAaf,MAAiB,YAAY,CAACgB,GAAwBrU,CAAK;AAC9E,EAAIqC,KAAU,CAAC+R,KACbrR,EAAK,SAASV,GACVU,EAAK,QAAQV,MAAW,UAAUA,MAAW,WAE/CU,EAAK,OAAOsQ,MAAiB,WAAW,aAAa,YACjDA,MAAiB,aACnBtQ,EAAK,YAAY,eAGZ,CAACqR,KAAc,CAACD,KACzB,OAAOpR,EAAK;AAGd,QAAMuR,IAAwBL,GAAuBjU,EAAM,SAAS,GAC9DuU,IAAYD,IAAwB,KAAKnU,EAAeH,GAAO,WAAW,EAAE,KAAA;AAClF,SAAIuU,KAAa,CAAClS,KAAU,CAAC+R,KAAc,CAACE,MAC1CvR,EAAK,YAAYwR,IAGZC,GAAkC3B,GAAyB9P,GAAM/C,CAAK,CAA2B;AAC1G;AAEO,SAASiT,GAAyBxW,GAAgB2J,GAA8BuM,GAAiD;AACtI,QAAMU,IAAejN,IAAemK,GAAkBnK,CAAY,IAAI,QAChEqO,IAAOC,GAAsBjY,GAAQ2J,GAAcuM,CAAgB,GACnEgC,IAAYzT,EAAsBzE,CAAM,GACxCmY,IAAqB,EAAE,GAAGH,EAAA;AAEhC,MAAIR,GAAuBU,EAAU,KAAK,GAAG;AAC3C,QAAIC,EAAS,QAAQ,MAAM;AACzB,aAAOA,EAAS,MAChB,OAAOA,EAAS;AAChB,YAAMC,IAAO1B,GAAiCwB,EAAU,OAAOtB,CAAY;AAE3E,UADIwB,QAAe,OAAOA,IACtBxB,MAAiB,OAAO;AAC1B,cAAMyB,IAAYjB,GAAoCc,EAAU,KAAK;AACrE,QAAIG,QAAoB,YAAYA;AAAA,MACtC;AAAA,IACF;AACA,IAAAF,EAAS,QAAQD,EAAU;AAAA,EAC7B,OAAWA,EAAU,SAAS,QAAQA,EAAU,UAAU,OACxDC,EAAS,QAAQD,EAAU;AAG7B,MAAIV,GAAuBU,EAAU,MAAM,GAAG;AAC5C,QAAItB,MAAiB,YAAYuB,EAAS,QAAQ,MAAM;AACtD,aAAOA,EAAS,MAChB,OAAOA,EAAS;AAChB,YAAMC,IAAOjB,GAAkCe,EAAU,QAAQtB,CAAY;AAC7E,MAAIwB,QAAe,OAAOA;AAC1B,YAAMC,IAAYhB,GAAwCa,EAAU,MAAM;AAC1E,MAAIG,QAAoB,YAAYA;AAAA,IACtC;AACA,IAAAF,EAAS,SAASD,EAAU;AAAA,EAC9B,OAAWA,EAAU,UAAU,QAAQA,EAAU,WAAW,OAC1DC,EAAS,SAASD,EAAU;AAG9B,SAAIA,EAAU,aAAa,QAAQA,EAAU,cAAc,OACzDC,EAAS,YAAYD,EAAU,YAG1BC;AACT;AAEO,SAASF,GAAsBjY,GAAgB2J,GAA8BuM,GAA+D;AACjJ,QAAMU,IAAejN,IAAemK,GAAkBnK,CAAY,IAAI;AAEtE,MAAIiN,MAAiB,SAASA,MAAiB;AAC7C,WAAOU,GAAyB,EAAE,GAAGnT,GAAoBkR,IAAiB,IAAI,EAAA,GAAKrV,GAAQ4W,CAAY;AAGzG,QAAML,IAAgC,EAAE,GAAGpS,GAAoBoR,IAAiB,IAAI,EAAA;AAEpF,MAAIW,GAAkB;AACpB,UAAM4B,IAAYpU,EAAee,EAAsBzE,CAAM,GAAG,WAAW,KAAK0D,EAAe6Q,IAAyB,WAAW;AACnI,IAAIuD,KAAa,CAACpU,EAAee,EAAsBzE,CAAM,GAAG,QAAQ,MACtEuW,EAAM,YAAYuB;AAAA,EAEtB;AAEA,SAAOR,GAAyBf,GAAOvW,GAAQ,MAAS;AAC1D;AAEO,SAASsY,GAAkBtY,GAAsB;;AACtD,EAAKA,EAAO,YACVA,EAAO,UAAU,CAAA;AAEnB,QAAMN,IAAUM,EAAO;AAEvB,EAAAkP,GAAwBlP,GAAQmU,EAAkB,GAE9CzU,EAAQ,aAAa,WACvBA,EAAQ,WAAWkU,GAAY5T,CAAM,MAGnC4D,IAAA5D,EAAO,WAAP,gBAAA4D,EAAe,aAAY,SAC7BzD,EAAmBH,CAAM,EAAE,UAAU,EAAE,GAAGyV,GAAoBzV,CAAM,EAAA,IAEpE8V,GAA4B9V,GAAQyV,GAAoBzV,CAAM,CAAC,GAGjEI,GAAkBJ,CAAM;AAC1B;;;;;;;;;ACveA,UAAMpC,IAAQC,GAMRwC,IAAaC,EAAOC,GAAyB,EAAK,GAClDgY,IAAUvX,EAAwB,IAAI,GACtCwX,IAAYxX,EAAI,CAAC;AAEvB,IAAAyX,GAAkBF,GAAS,CAAAG,MAAW;;AACpC,MAAAF,EAAU,UAAQ5U,IAAA8U,EAAQ,CAAC,MAAT,gBAAA9U,EAAY,YAAY,UAAS;AAAA,IACrD,CAAC;AAED,UAAM+U,IAAiB5a,EAAS,MAAM+V,GAAkBlW,EAAM,MAAM,CAAC,GAC/Dgb,IAAqB7a,EAAS,MAAMgW,GAAqBnW,EAAM,MAAM,CAAC,GAEtEib,IAAe9a,EAAS,MAAMuY,GAAwB1Y,EAAM,QAAQgb,EAAmB,QAAQD,EAAe,QAAQ,QAAW/a,EAAM,gBAAgB,IAAI,CAAC,GAE5J,EAAE,WAAAuD,GAAW,gBAAAC,EAAA,IAAmBE,GAAsB,MAAM1D,EAAM,QAAQ;AAAA,MAC9E,YAAY,MAAMyC;AAAA,MAClB,gBAAgB,MAAMmY,EAAU;AAAA,MAChC,cAAcK;AAAA,MACd,SAASN;AAAA,IAAA,CACV,GAEK,EAAE,kBAAA5W,EAAA,IAAqBC,GAAgB;AAAA,MAC3C,QAAQC,EAAMjE,GAAO,QAAQ;AAAA,MAC7B,YAAY,MAAMyC;AAAA,IAAA,CACnB;AAED,WAAA6S,EAAa,EAAE,SAASqF,GAAS,cAI/BrR,EAAA,GAAA7B,EAcM,OAdNnD,EAcM;AAAA,eAdG;AAAA,MAAJ,KAAIqW;AAAA,MAAW,mBAAmBvW,EAAA3B,CAAA,EAAA;AAAA,IAAU,GAAY2B,EAAAb,CAAA,GAAWgB,GAAuBH,EAAAL,CAAA,GAAD,EAAA,CAAA,GAAA;AAAA,MAC5EiX,EAAA,SACd1R,EAAA,EAAA,GAAA7B,EAEW0D,kBAF6BlL,EAAA,OAAO,UAAQ,CAArCqW,GAAO4E,MACvBhM,EAAsDC,EAAA,QAAA,QAAA;AAAA,QADO,KAAAmH,EAAM;AAAA,QAChD,MAAMA;AAAA,QAAQ,OAAO4E;AAAA,MAAA,mBAI5C3R,GAE8ByG,IAAA;AAAA;QAFO,QAAQ/P,EAAA;AAAA,MAAA;oBAC3C,MAAQ;AAAA,UAARiP,EAAQC,EAAA,QAAA,SAAA;AAAA,QAAA;;;MAGVD,EAA+BC,EAAA,QAAA,iBAAA;AAAA,MAE/BjL,EAA0DC,IAAA;AAAA,QAAvC,KAAKC,EAAAZ,CAAA;AAAA,QAAiB,IAAIvD,EAAA,OAAO;AAAA,MAAA;;;ICzC3Ckb,KAAgCjL,IAEhCkL,KAAmC;AAAA,EAC9C,GAAGtE;AACL,GAEauE,KAAyB;AAE/B,SAASC,GAAgClZ,GAAgBmZ,GAA+B9K,IAAmB,IAAM;AACtH,SAAOE,GAAqCvO,GAAQgZ,IAAwB3K,CAAgB;AAC9F;AAUO,SAAS+K,GAAoBpZ,GAAsB;AACxD,EAAA0O,GAAyB1O,GAAQ;AAAA,IAC/B,cAAciZ;AAAA,IACd,cAAcD;AAAA,EAAA,CACf;AACH;AC9BO,MAAMK,KAAgE;AAAA,EAC3E,EAAE,OAAO,OAAO,OAAO,KAAA;AAAA,EACvB,EAAE,OAAO,UAAU,OAAO,KAAA;AAAA,EAC1B,EAAE,OAAO,QAAQ,OAAO,KAAA;AAAA,EACxB,EAAE,OAAO,SAAS,OAAO,KAAA;AAC3B,GAEaC,KAAwD;AAAA,EACnE,EAAE,OAAO,SAAS,OAAO,IAAA;AAAA,EACzB,EAAE,OAAO,UAAU,OAAO,KAAA;AAAA,EAC1B,EAAE,OAAO,SAAS,OAAO,IAAA;AAC3B,GAEaC,KAAoB,OAUpBC,KAA8B;AAAA,EACzC,SAAS;AAAA,EACT,WAAW;AACb,GAEaC,KAAuF;AAAA,EAClG,aAAa;AAAA,EACb,MAAM;AAAA,EACN,UAAU;AACZ;AAEO,SAASC,GAAiB1Z,GAAgB;;AAC/C,EAAAkP,GAAwBlP,GAAQuZ,EAAiB;AACjD,QAAM7Z,IAAWM,EAAO,WAAW,CAAA;AACnC,SAAAA,EAAO,UAAUN,IACbA,EAAQ,gBAAgB,UAAa,CAAC2Z,GAAqB,KAAK,CAAAza,MAAQA,EAAK,UAAUc,EAAQ,WAAW,OAC5GA,EAAQ,cAAc+Z,GAAoB,cAEvC/Z,EAAQ,SAAgC,cAC3CA,EAAQ,OAAO,YAEbA,EAAQ,SAAS,UAAa,CAAC4Z,GAAiB,KAAK,CAAA1a,MAAQA,EAAK,UAAUc,EAAQ,IAAI,OAC1FA,EAAQ,OAAO+Z,GAAoB,OAEjC/Z,EAAQ,aAAa,WACvBA,EAAQ,WAAW+Z,GAAoB,aAErC7V,IAAA5D,EAAO,WAAP,gBAAA4D,EAAe,aAAY,WAC7BzD,EAAmBH,CAAM,EAAE,UAAU,EAAE,GAAGwZ,GAAA,IAE5CpZ,GAAkBJ,CAAM,GACjBN;AACT;AAEA,MAAMia,KAAmD;AAAA,EACvD,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AACT,GAEMC,KAA+C;AAAA,EACnD,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AACT,GAEMC,KAA2C;AAAA,EAC/C,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AACT;AAEO,SAASC,GAAsBC,GAA0BC,GAAkB;AAChF,QAAMC,IAAaF,MAAgB,UAAUA,MAAgB;AAC7D,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,CAAC,8BAA8BH,GAAgBG,CAAW,CAAC;AAAA,IACjE,SAAS,CAAC,aAAaJ,GAAoBI,CAAW,CAAC;AAAA,IACvD,KAAK;AAAA,MACH;AAAA,MACAE,KAAc;AAAA,IAAA,EACd,OAAO,OAAO;AAAA,IAChB,KAAK,CAACzK,MAAoB;AAAA,MACxB;AAAA,MACAqK,GAAgBG,CAAO;AAAA,MACvBC,IAAa,uCAAuC;AAAA,MACpDzK,KAAU;AAAA,IAAA,EACV,OAAO,OAAO;AAAA,IAChB,QAAQ;AAAA,MACN;AAAA,MACAuK,MAAgB,QACZ,mBACAA,MAAgB,WACd,gBACAA,MAAgB,SACd,gBACA;AAAA,IAAA;AAAA,IAEV,eAAe;AAAA,IACf,SAAS;AAAA,IACT,SAAS;AAAA,IACT,UAAU;AAAA,EAAA;AAEd;AAEA,MAAMG,KAAUxK,GAA+B;AAAA,EAC7C,eAAe;AAAA,EACf,WAAW;AAAA,EACX,mBAAmBuJ;AAAA,EACnB,kBAAkB;AAAA,EAClB,mBAAmBD;AAAA,EACnB,mBAAmB;AAAA,EACnB,wBAAwBU;AAAA,EACxB,oBAAoBN;AACtB,CAAC,GAEYe,KAAgBD,GAAQ;AACZA,GAAQ;AAC1B,MAAME,KAAkBF,GAAQ,eAG1BG,KAAwBH,GAAQ,uBAChCI,KAAcJ,GAAQ,aACtBK,KAAsBL,GAAQ,kBAC9BM,KAAkBN,GAAQ,cAC1BO,KAAwBP,GAAQ,iBAChCQ,KAAoBR,GAAQ,iBAC5BS,KAAqBT,GAAQ;;;;;;;;AC5H1C,UAAMtc,IAAQC,GAMRwC,IAAaC,EAAOC,GAAyB,EAAK,GAElD,EAAE,WAAAY,GAAW,gBAAAC,GAAgB,SAAAL,EAAA,IAAY6P;AAAA,MAC7C,MAAMhT,EAAM;AAAA,MACZ,EAAE,WAAW4b,GAAkB,UAAA;AAAA,IAAU,GAErCoB,IAAW7c,EAAS,MAAMuc,GAAY1c,EAAM,MAAM,CAAC,GAEnDmc,IAAchc,EAAsB,MAAM;;AAC9C,YAAM6C,KAAQgD,IAAAhG,EAAM,OAAO,YAAb,gBAAAgG,EAAsB;AACpC,aAAOhD,MAAU,YAAYA,MAAU,UAAUA,MAAU,UAAUA,IAAQ6Y,GAAoB;AAAA,IACnG,CAAC,GAEKO,IAAUjc,EAAkB,MAAM;;AACtC,YAAM6C,KAAQgD,IAAAhG,EAAM,OAAO,YAAb,gBAAAgG,EAAsB;AACpC,aAAOhD,MAAU,WAAWA,MAAU,YAAYA,MAAU,UAAUA,IAAQ6Y,GAAoB;AAAA,IACpG,CAAC,GAEKoB,IAAa9c,EAAS,MAAM+b,GAAsBC,EAAY,OAAOC,EAAQ,KAAK,CAAC,GAEnFc,IAAgB/c,EAAS,MAAA;;AAAM,eAAA6F,IAAAhG,EAAM,OAAO,YAAb,gBAAAgG,EAAsB,cAAa;AAAA,KAAK,GAEvEmX,IAAiB/Z,EAAA;AAEvB,IAAA7C;AAAA,MACE,MAAMoc,GAAoB3c,EAAM,MAAM;AAAA,MACtC,CAAAiF,MAAO;AACL,QAAIA,KAAO,SAAMkY,EAAe,QAAQlY;AAAA,MAC1C;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK;AAGpB,UAAMwN,IAAYtS,EAAS;AAAA,MACzB,KAAK,MACCsC,IAAmBka,GAAoB3c,EAAM,MAAM,IAChDmd,EAAe,SAASR,GAAoB3c,EAAM,MAAM;AAAA,MAEjE,KAAK,CAAAgD,MAAS;AACZ,YAAIA,KAAS,KAAM;AACnB,cAAMkR,IAAS,OAAOlR,KAAU,WAAWA,IAAQ,OAAOA,CAAK;AAC/D,YAAI,QAAO,MAAMkR,CAAM,GACvB;AAAA,cAAIzR,GAAY;AACd,YAAAma,GAAgB5c,EAAM,QAAQkU,CAAM;AACpC;AAAA,UACF;AACA,UAAAiJ,EAAe,QAAQjJ;AAAA;AAAA,MACzB;AAAA,IAAA,CACD;AAED,aAASkJ,EAAaC,GAAuB;AAC3C,aAAO5K,EAAU,UAAU4K,EAAK;AAAA,IAClC;AAEA,UAAM,EAAE,kBAAAtZ,EAAA,IAAqBC,GAAgB;AAAA,MAC3C,QAAQC,EAAMjE,GAAO,QAAQ;AAAA,MAC7B,YAAY,MAAMyC;AAAA,IAAA,CACnB;AAED,aAAS6a,EAAWrY,GAAa;;AAC/B,MAAIA,MAAQwN,EAAU,UACtBA,EAAU,QAAQxN,IAClBuC,KAAAxB,IAAAjC,EAAiB,OAAM,WAAvB,QAAAyD,EAAA,KAAAxB,GAAgC,IAAI,YAAY,UAAU,EAAE,QAAQf,EAAA,CAAK;AAAA,IAC3E;AAEA,UAAMsY,IAASna,EAAwB,IAAI,GACrCoa,IAAcpa,EAAqC,EAAE,SAAS,GAAG;AAEvE,mBAAeqa,IAAuB;AACpC,YAAM1P,GAAA;AACN,YAAM2P,IAAMH,EAAO;AACnB,UAAI,CAACG,KAAO,CAACR,EAAc,OAAO;AAChC,QAAAM,EAAY,QAAQ,EAAE,SAAS,EAAA;AAC/B;AAAA,MACF;AAEA,YAAMG,IAAcX,EAAS,MAAM,UAAU,CAAAK,OAAQD,EAAaC,EAAI,CAAC;AACvE,UAAIM,IAAc,GAAG;AACnB,QAAAH,EAAY,QAAQ,EAAE,SAAS,EAAA;AAC/B;AAAA,MACF;AAEA,YAAMI,IAAWF,EAAI,iBAA8B,cAAc,EAAEC,CAAW;AAC9E,UAAI,CAACC,GAAU;AACb,QAAAJ,EAAY,QAAQ,EAAE,SAAS,EAAA;AAC/B;AAAA,MACF;AAGA,UADmBrB,EAAY,UAAU,UAAUA,EAAY,UAAU,SACzD;AACd,QAAAqB,EAAY,QAAQ;AAAA,UAClB,KAAK,GAAGI,EAAS,SAAS;AAAA,UAC1B,QAAQ,GAAGA,EAAS,YAAY;AAAA,UAChC,SAAS;AAAA,QAAA;AAEX;AAAA,MACF;AAEA,MAAAJ,EAAY,QAAQ;AAAA,QAClB,MAAM,GAAGI,EAAS,UAAU;AAAA,QAC5B,OAAO,GAAGA,EAAS,WAAW;AAAA,QAC9B,SAAS;AAAA,MAAA;AAAA,IAEb;AAEA,QAAIC;AAEJ,WAAAtd;AAAA,MACE,CAACkS,GAAWuK,GAAUb,GAAae,GAAed,CAAO;AAAA,MACzD,MAAM;AACJ,QAAKqB,EAAA;AAAA,MACP;AAAA,MACA,EAAE,OAAO,OAAA;AAAA,IAAO,GAGlBpP,GAAU,MAAM;AACd,MAAKoP,EAAA;AACL,YAAMC,IAAMH,EAAO;AACnB,MAAI,CAACG,KAAO,OAAO,iBAAmB,QACtCG,IAAiB,IAAI,eAAe,MAAM;AACxC,QAAKJ,EAAA;AAAA,MACP,CAAC,GACDI,EAAe,QAAQH,CAAG;AAAA,IAC5B,CAAC,GAEDld,GAAgB,MAAM;AACpB,MAAAqd,KAAA,QAAAA,EAAgB;AAAA,IAClB,CAAC;MAIC3Z,EAA0DC,IAAA;AAAA,QAAvC,KAAKC,EAAAZ,CAAA;AAAA,QAAiB,IAAIvD,EAAA,OAAO;AAAA,MAAA;MACpDoE,EAiCM,OAjCNC,EAiCM;AAAA,iBAjCG;AAAA,QAAJ,KAAInB;AAAA,QAAW,OAAO8Z,EAAA,MAAW;AAAA,MAAA,GAAc7Y,EAAAb,CAAA,GAAWgB,GAAuBH,EAAAL,CAAA,GAAD,EAAA,CAAA,GAAA;AAAA,QACnFM,EA+BM,OAAA;AAAA,UA/BA,OAAKqD,EAAEuV,EAAA,MAAW,IAAI;AAAA,QAAA;UAC1B5Y,EAeM,OAAA;AAAA,YAfA,OAAKqD,EAAEuV,EAAA,MAAW,OAAO;AAAA,UAAA;YAC7B5Y,EAaM,OAAA;AAAA,uBAbG;AAAA,cAAJ,KAAIkZ;AAAA,cAAU,OAAK7V,EAAEuV,EAAA,MAAW,GAAG;AAAA,cAAE,MAAK;AAAA,YAAA;sBAC7CxV,EAUS0D,GAAA,MAAAwD,GATQqO,EAAA,OAAQ,CAAhBK,YADT5V,EAUS,UAAA;AAAA,gBARN,KAAK4V,EAAK;AAAA,gBACX,MAAK;AAAA,gBACJ,SAAOJ,EAAA,MAAW,IAAIG,EAAaC,CAAI,CAAA,CAAA;AAAA,gBACxC,MAAK;AAAA,gBACJ,iBAAeD,EAAaC,CAAI;AAAA,gBAChC,SAAK,CAAA5H,OAAE6H,EAAWD,EAAK,EAAE;AAAA,cAAA,GAEvBjS,GAAAhH,EAAAoY,EAAA,EAAgBa,CAAI,CAAA,GAAA,IAAA7Y,EAAA;cAEb0Y,EAAA,cAAZzV,EAA6E,QAAA;AAAA;gBAAjD,OAAKC,EAAEuV,EAAA,MAAW,MAAM;AAAA,gBAAG,UAAOO,EAAA,KAAW;AAAA,cAAA;;;UAG7EnZ,EAaM,OAAA;AAAA,YAbA,OAAKqD,EAAEuV,EAAA,MAAW,aAAa;AAAA,UAAA;YACnC5Y,EAWM,OAAA;AAAA,cAXA,OAAKqD,EAAEuV,EAAA,MAAW,OAAO;AAAA,YAAA;eAC7B3T,EAAA,EAAA,GAAA7B,EASM0D,GAAA,MAAAwD,GARwBqO,EAAA,OAAQ,CAA5BK,GAAMS,gBADhBrW,EASM,OAAA;AAAA,gBAPH,KAAK4V,EAAK;AAAA,gBAEV,OAAK3V,EAAEuV,EAAA,MAAW,OAAO;AAAA,cAAA;gBAE1B5Y,EAEM,OAAA;AAAA,kBAFA,OAAKqD,EAAA,CAAGuV,EAAA,MAAW,UAAQ,kBAAA,CAAA;AAAA,gBAAA;kBAC/B/N,EAAkFC,EAAA,QAAA,QAAA;AAAA,oBAA/D,MAAMkO;AAAA,oBAAO,OAAOS;AAAA,oBAAY,SAASV,EAAaC,CAAI;AAAA,kBAAA;;;gBAJvE,CAAAU,IAAAX,EAAaC,CAAI,CAAA;AAAA,cAAA;;;;;;;;;;;;;;;2BCtKnC9T,GAEmBoM,IAAA;AAAA,MAFA,QAAQ1V,EAAA;AAAA,MAAS,iBAAeA,EAAA;AAAA,MAAe,OAAOA,EAAA;AAAA,MAAQ,+BAA6BmE,EAAAkX,EAAA;AAAA,IAAA;kBAC5G,MAAQ;AAAA,QAARpM,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;;;;;;;ACVZ,UAAMnP,IAAQC,GAKR+d,IAAQ7d,EAAoB,OAAO;AAAA,MACvC,MAAMH,EAAM;AAAA,MACZ,OAAOA,EAAM;AAAA,IAAA,EACb;AAEF,WAAAsO,GAAQ2P,IAAgBD,CAAK,aAI3B9O,EAAQC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;ACNV,UAAMnP,IAAQC,GAMRwC,IAAaC,EAAOC,GAAyB,EAAK,GAClDub,IAAYxb,EAAOyb,IAAe,IAAI,GACtCC,IAAY1b,EAAOub,IAAgB,IAAI,GAEvCI,IAAcxb,GAAsC,MAAM7C,EAAM,MAAM,GACtEse,IAAWne,EAAS,OAAM+d,KAAA,gBAAAA,EAAW,aAAY,CAAA,CAAE,GACnDK,IAAepe,EAAS,MAAMH,EAAM,OAAO,YAAY,EAAE,GAEzDwe,IAAUre,EAAS,MAAM;AAC7B,MAAA+d,KAAA,QAAAA,EAAW,eAAe;AAC1B,YAAMF,IAAQI,IAAYK,EAAML,CAAS,IAAI;AAC7C,aAAOM,GAAgBL,EAAY,MAAM,YAAYC,EAAS,OAAOD,EAAY,MAAM,YAAYL,IAC/F,EAAE,MAAMA,EAAM,MAAM,OAAOA,EAAM,OAAO,SAASE,KAAA,gBAAAA,EAAW,aAAW,IACvE,MAAS;AAAA,IACf,CAAC,GAEKS,IAAgBxe,EAAS,MAAMsC,KAAc+b,EAAQ,MAAM,WAAW,CAAC,GACvEI,IAAcze,EAAoC,MAAM,CAAC,CAAA,CAAE,CAAC,GAC5D0e,IAAa1e,EAAS,MAAOwe,EAAc,QAAQC,EAAY,QAAQJ,EAAQ,KAAM,GAErF,EAAE,WAAAjb,GAAW,gBAAAC,GAAgB,SAAAL,EAAA,IAAY6P,GAAkB,MAAMhT,EAAM,QAAQ,EAAE,WAAW8e,GAAmB,WAAW,GAE1H,EAAE,kBAAA/a,EAAA,IAAqBC,GAAgB;AAAA,MAC3C,QAAQC,EAAMjE,GAAO,QAAQ;AAAA,MAC7B,YAAY,MAAMyC;AAAA,IAAA,CACnB;AAED,aAASsc,EAAOC,GAA8B/R,GAAe;AAC3D,aAAOgS,GAAkBD,GAAK/R,GAAOoR,EAAY,MAAM,OAAO;AAAA,IAChE;;MA2BEna,EAA0DC,IAAA;AAAA,QAAvC,KAAKC,EAAAZ,CAAA;AAAA,QAAiB,IAAIvD,EAAA,OAAO;AAAA,MAAA;MACpDoE,EAUM,OAVNC,EAUM;AAAA,iBAVG;AAAA,QAAJ,KAAInB;AAAA,MAAA,GAAkBiB,EAAAb,CAAA,GAAWgB,GAAuBH,EAAAL,CAAA,GAAD,EAAA,CAAA,GAAA;AAAA,SAC1DuF,EAAA,EAAA,GAAA7B,EAQW0D,GAAA,MAAAwD,GARyBkQ,EAAA,OAAU,CAA5BG,GAAKE,YACrB3V,GAMoB4V,IAAA;AAAA,eAPgCJ,EAAOC,GAAKE,CAAQ;AAAA,UACpD,MAAMF;AAAA,UAAM,OAAOE;AAAA,QAAA;sBACrC,MAAqE;AAAA,YAAlCP,EAAA,cAAnCpV,GAAqEyG,IAAA;AAAA;cAAlB,QAAQ/P,EAAA;AAAA,YAAA;aAE3DqJ,EAAA,EAAA,GAAA7B,EAEW0D,GAAA,MAAAwD,GAF6B4P,EAAA,OAAY,CAAlCjI,GAAO4E,MACvBhM,EAAsDC,EAAA,QAAA,QAAA;AAAA,cADI,KAAAmH,EAAM;AAAA,cAC7C,MAAMA;AAAA,cAAQ,OAAO4E;AAAA,YAAA;;;;;;;;;;;;;ACxElD,UAAMlb,IAAQC,GAIRwC,IAAaC,EAAOC,GAAyB,EAAK,GAClDyc,IAAe1c,EAAO2c,IAAoC,IAAI,GAC9Dlc,IAAUC,EAAwB,IAAI,GACtC,EAAE,OAAOC,MAAcC,GAAeH,CAAO;AAEnD,aAASmc,IAAkB;AACzB,MAAI,CAAC7c,KAAc,CAAC2c,KACpBA,EAAapf,EAAM,MAAM;AAAA,IAC3B;AAEA,UAAM,EAAE,WAAAuD,GAAW,gBAAAC,EAAA,IAAmBE,GAAsB,MAAM1D,EAAM,QAAQ;AAAA,MAC9E,YAAY,MAAMyC;AAAA,MAClB,gBAAgB,MAAMY,EAAU;AAAA,MAChC,SAAAF;AAAA,IAAA,CACD;AAGD,QAAI,CADsBT,EAAOyb,IAAe,IAAI,GAC5B;AACtB,YAAMoB,IAAiBC,GAAa;AAAA,QAClC,MAAM,MAAMxf,EAAM;AAAA,QAClB,YAAY,MAAMyC;AAAA,MAAA,CACnB;AACD,MAAA6L,GAAQ6P,IAAeoB,CAAc;AAAA,IACvC;sBAIEjW,EAAA,GAAA7B,EAKM,OALNnD,EAKM;AAAA,eALG;AAAA,MAAJ,KAAInB;AAAA,MAAU,OAAM;AAAA,IAAA,GAAiDiB,EAAAb,CAAA,GAAS,EAAG,SAAO+b,EAAA,CAAe,GAAA;AAAA,MAC1Gpb,EAE8B8L,IAAA,EAFA,QAAQ/P,EAAA,UAAM;AAAA,oBAC1C,MAAQ;AAAA,UAARiP,EAAQC,EAAA,QAAA,SAAA;AAAA,QAAA;;;MAEVjL,EAA0DC,IAAA;AAAA,QAAvC,KAAKC,EAAAZ,CAAA;AAAA,QAAiB,IAAIvD,EAAA,OAAO;AAAA,MAAA;;;ICpB3Cwf,KAAmD;AAAA,EAC9D;AAAA,IACE,QAAQ;AAAA,MACN,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,MAAM;AAAA,MACN,WAAWC;AAAAA,MACX,cAAcvJ;AAAA,MACd,UAAU,CAAA;AAAA,MACV,SAAS,CAAA;AAAA,IAAC;AAAA,EACZ;AAAA,EAEF,EAAE,QAAQ,EAAE,IAAI,GAAG,MAAM,QAAQ,MAAM,QAAQ,WAAWwJ,IAAU,UAAU,CAAA,GAAI,SAAS,CAAA,IAAG;AAAA,EAC9F;AAAA,IACE,QAAQ;AAAA,MACN,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,MAAM;AAAA,MACN,WAAWC;AAAA,MACX,iBAAiB/C;AAAA,MACjB,UAAU,CAAA;AAAA,MACV,SAAS,CAAA;AAAA,IAAC;AAAA,EACZ;AAAA,EAEF;AAAA,IACE,QAAQ;AAAA,MACN,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,MAAM;AAAA,MACN,WAAWgD;AAAAA,MACX,iBAAiBzN;AAAA,MACjB,UAAU,CAAA;AAAA,MACV,SAAS,CAAA;AAAA,IAAC;AAAA,EACZ;AAAA,EAEF;AAAA,IACE,QAAQ;AAAA,MACN,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,MAAM;AAAA,MACN,WAAW0N;AAAAA,MACX,cAAc;AAAA,MACd,UAAU,CAAA;AAAA,MACV,SAAS,CAAA;AAAA,IAAC;AAAA,EACZ;AAAA,EAEF,EAAE,QAAQ,EAAE,IAAI,GAAG,MAAM,UAAU,MAAM,UAAU,WAAWC,IAAY,UAAU,CAAA,GAAI,SAAS,CAAA,IAAG;AAAA,EACpG,EAAE,QAAQ,EAAE,IAAI,GAAG,MAAM,SAAS,MAAM,SAAS,WAAWC,IAAW,UAAU,CAAA,GAAI,SAAS,CAAA,IAAG;AAAA,EACjG,EAAE,QAAQ,EAAE,IAAI,GAAG,MAAM,QAAQ,MAAM,QAAQ,WAAWC,IAAU,UAAU,CAAA,GAAI,SAAS,CAAA,IAAG;AAAA,EAC9F,EAAE,QAAQ,EAAE,IAAI,GAAG,MAAM,WAAW,MAAM,WAAW,WAAWC,IAAa,UAAU,CAAA,GAAI,SAAS,CAAA,IAAG;AAAA,EACvG,EAAE,QAAQ,EAAE,IAAI,GAAG,MAAM,YAAY,MAAM,YAAY,WAAWC,IAAa,UAAU,CAAA,GAAI,SAAS,CAAA,IAAG;AAAA,EACzG,EAAE,QAAQ,EAAE,IAAI,GAAG,MAAM,kBAAkB,MAAM,kBAAkB,WAAWC,IAAmB,UAAU,CAAA,GAAI,SAAS,CAAA,IAAG;AAAA,EAC3H,EAAE,QAAQ,EAAE,IAAI,GAAG,MAAM,QAAQ,MAAM,QAAQ,WAAWC,IAAU,UAAU,CAAA,GAAI,SAAS,CAAA,IAAG;AAChG;"}
|