@jinmutech/ng-zorro-form-design 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +140 -0
- package/esm2022/jinmutech-ng-zorro-form-design.mjs +5 -0
- package/esm2022/public_api.mjs +8 -0
- package/esm2022/src/app/directive/directive.module.mjs +82 -0
- package/esm2022/src/app/directive/drag-drop/drag.directive.mjs +71 -0
- package/esm2022/src/app/directive/drag-drop/drop.directive.mjs +118 -0
- package/esm2022/src/app/directive/drag-drop.service.mjs +30 -0
- package/esm2022/src/app/directive/drag-drop.types.mjs +2 -0
- package/esm2022/src/app/directive/table/bgcolor.directive.mjs +30 -0
- package/esm2022/src/app/directive/table/borderColor.directive.mjs +28 -0
- package/esm2022/src/app/directive/table/borderWidth.directive.mjs +28 -0
- package/esm2022/src/app/directive/table/cellpadding.directive.mjs +28 -0
- package/esm2022/src/app/directive/table/cellspacing.directive.mjs +28 -0
- package/esm2022/src/app/directive/table/td/align.directive.mjs +30 -0
- package/esm2022/src/app/directive/table/td/colspan.directive.mjs +28 -0
- package/esm2022/src/app/directive/table/td/height.directive.mjs +30 -0
- package/esm2022/src/app/directive/table/td/rowspan.directive.mjs +28 -0
- package/esm2022/src/app/directive/table/td/valign.directive.mjs +30 -0
- package/esm2022/src/app/directive/table/td/width.directive.mjs +30 -0
- package/esm2022/src/app/pages/designer/code-viewer/code-viewer.component.mjs +51 -0
- package/esm2022/src/app/pages/designer/code-viewer/jm-monaco-editor/jm-monaco-editor.component.mjs +29 -0
- package/esm2022/src/app/pages/designer/designer.component.mjs +341 -0
- package/esm2022/src/app/pages/designer/designer.module.mjs +115 -0
- package/esm2022/src/app/pages/designer/directive/designer-property-change.directive.mjs +37 -0
- package/esm2022/src/app/pages/designer/element-properties/card-properties/card-properties.component.mjs +36 -0
- package/esm2022/src/app/pages/designer/element-properties/card-properties/card-properties.module.mjs +19 -0
- package/esm2022/src/app/pages/designer/element-properties/cascader-properties/cascader-properties.component.mjs +74 -0
- package/esm2022/src/app/pages/designer/element-properties/cascader-properties/cascader-properties.module.mjs +19 -0
- package/esm2022/src/app/pages/designer/element-properties/checkbox-properties/checkbox-properties.component.mjs +80 -0
- package/esm2022/src/app/pages/designer/element-properties/checkbox-properties/checkbox-properties.module.mjs +19 -0
- package/esm2022/src/app/pages/designer/element-properties/col-properties/col-properties.component.mjs +66 -0
- package/esm2022/src/app/pages/designer/element-properties/col-properties/col-properties.module.mjs +19 -0
- package/esm2022/src/app/pages/designer/element-properties/components/basic-properties/basic-properties.component.mjs +78 -0
- package/esm2022/src/app/pages/designer/element-properties/components/css-properties/css-properties.component.mjs +113 -0
- package/esm2022/src/app/pages/designer/element-properties/components/events-properties/events-properties.component.mjs +41 -0
- package/esm2022/src/app/pages/designer/element-properties/components/form-layout-properties/form-layout-properties.component.mjs +57 -0
- package/esm2022/src/app/pages/designer/element-properties/components/layout-properties/layout-properties.component.mjs +110 -0
- package/esm2022/src/app/pages/designer/element-properties/components/options-properties/options-properties.component.mjs +110 -0
- package/esm2022/src/app/pages/designer/element-properties/components/tree-options-properties/tree-options-properties.component.mjs +127 -0
- package/esm2022/src/app/pages/designer/element-properties/components/validators-properties/validator-properties/validator-properties.component.mjs +72 -0
- package/esm2022/src/app/pages/designer/element-properties/components/validators-properties/validators-properties.component.mjs +33 -0
- package/esm2022/src/app/pages/designer/element-properties/date-properties/date-properties.component.mjs +120 -0
- package/esm2022/src/app/pages/designer/element-properties/date-properties/date-properties.module.mjs +19 -0
- package/esm2022/src/app/pages/designer/element-properties/divider-properties/divider-properties.component.mjs +37 -0
- package/esm2022/src/app/pages/designer/element-properties/divider-properties/divider-properties.module.mjs +19 -0
- package/esm2022/src/app/pages/designer/element-properties/element-properties.component.mjs +140 -0
- package/esm2022/src/app/pages/designer/element-properties/grid-properties/grid-properties.component.mjs +44 -0
- package/esm2022/src/app/pages/designer/element-properties/grid-properties/grid-properties.module.mjs +19 -0
- package/esm2022/src/app/pages/designer/element-properties/image-properties/image-properties.component.mjs +40 -0
- package/esm2022/src/app/pages/designer/element-properties/image-properties/image-properties.module.mjs +19 -0
- package/esm2022/src/app/pages/designer/element-properties/image-upload-properties/image-upload-properties.component.mjs +46 -0
- package/esm2022/src/app/pages/designer/element-properties/image-upload-properties/image-upload-properties.module.mjs +19 -0
- package/esm2022/src/app/pages/designer/element-properties/input-number-properties/input-number-properties.component.mjs +47 -0
- package/esm2022/src/app/pages/designer/element-properties/input-number-properties/input-number-properties.module.mjs +19 -0
- package/esm2022/src/app/pages/designer/element-properties/input-properties/input-properties.component.mjs +40 -0
- package/esm2022/src/app/pages/designer/element-properties/input-properties/input-properties.module.mjs +19 -0
- package/esm2022/src/app/pages/designer/element-properties/radio-properties/radio-properties.component.mjs +53 -0
- package/esm2022/src/app/pages/designer/element-properties/radio-properties/radio-properties.module.mjs +19 -0
- package/esm2022/src/app/pages/designer/element-properties/range-picker-properties/range-picker-properties.component.mjs +133 -0
- package/esm2022/src/app/pages/designer/element-properties/range-picker-properties/range-picker-properties.module.mjs +19 -0
- package/esm2022/src/app/pages/designer/element-properties/rate-properties/rate-properties.component.mjs +98 -0
- package/esm2022/src/app/pages/designer/element-properties/rate-properties/rate-properties.module.mjs +19 -0
- package/esm2022/src/app/pages/designer/element-properties/select-properties/select-properties.component.mjs +53 -0
- package/esm2022/src/app/pages/designer/element-properties/select-properties/select-properties.module.mjs +19 -0
- package/esm2022/src/app/pages/designer/element-properties/shared/property-panel-loader.service.mjs +46 -0
- package/esm2022/src/app/pages/designer/element-properties/shared/property-panel-registry.mjs +38 -0
- package/esm2022/src/app/pages/designer/element-properties/shared/property-panel-shared.module.mjs +93 -0
- package/esm2022/src/app/pages/designer/element-properties/slider-properties/slider-properties.component.mjs +70 -0
- package/esm2022/src/app/pages/designer/element-properties/slider-properties/slider-properties.module.mjs +19 -0
- package/esm2022/src/app/pages/designer/element-properties/space-properties/space-properties.component.mjs +47 -0
- package/esm2022/src/app/pages/designer/element-properties/space-properties/space-properties.module.mjs +19 -0
- package/esm2022/src/app/pages/designer/element-properties/switch-properties/switch-properties.component.mjs +41 -0
- package/esm2022/src/app/pages/designer/element-properties/switch-properties/switch-properties.module.mjs +19 -0
- package/esm2022/src/app/pages/designer/element-properties/table-properties/table-properties.component.mjs +45 -0
- package/esm2022/src/app/pages/designer/element-properties/table-properties/table-properties.module.mjs +19 -0
- package/esm2022/src/app/pages/designer/element-properties/tabs-properties/tabs-properties.component.mjs +67 -0
- package/esm2022/src/app/pages/designer/element-properties/tabs-properties/tabs-properties.module.mjs +19 -0
- package/esm2022/src/app/pages/designer/element-properties/td-properties/td-properties.component.mjs +43 -0
- package/esm2022/src/app/pages/designer/element-properties/td-properties/td-properties.module.mjs +19 -0
- package/esm2022/src/app/pages/designer/element-properties/text-properties/text-properties.component.mjs +38 -0
- package/esm2022/src/app/pages/designer/element-properties/text-properties/text-properties.module.mjs +19 -0
- package/esm2022/src/app/pages/designer/element-properties/textarea-properties/textarea-properties.component.mjs +39 -0
- package/esm2022/src/app/pages/designer/element-properties/textarea-properties/textarea-properties.module.mjs +19 -0
- package/esm2022/src/app/pages/designer/element-properties/time-area-properties/time-area-properties.component.mjs +82 -0
- package/esm2022/src/app/pages/designer/element-properties/time-area-properties/time-area-properties.module.mjs +19 -0
- package/esm2022/src/app/pages/designer/element-properties/time-properties/time-properties.component.mjs +88 -0
- package/esm2022/src/app/pages/designer/element-properties/time-properties/time-properties.module.mjs +19 -0
- package/esm2022/src/app/pages/designer/element-properties/tree-select-properties/tree-select-properties.component.mjs +80 -0
- package/esm2022/src/app/pages/designer/element-properties/tree-select-properties/tree-select-properties.module.mjs +19 -0
- package/esm2022/src/app/pages/designer/element-properties/upload-properties/upload-properties.component.mjs +47 -0
- package/esm2022/src/app/pages/designer/element-properties/upload-properties/upload-properties.module.mjs +19 -0
- package/esm2022/src/app/pages/designer/form-properties/form-css-properties/form-css-properties.component.mjs +84 -0
- package/esm2022/src/app/pages/designer/form-properties/form-events-properties/form-events-properties.component.mjs +35 -0
- package/esm2022/src/app/pages/designer/form-properties/form-properties.component.mjs +84 -0
- package/esm2022/src/app/pages/designer/import-json/import-json.component.mjs +64 -0
- package/esm2022/src/app/pages/designer/json-viewer/json-viewer.component.mjs +76 -0
- package/esm2022/src/app/pages/designer/left-sider/left-sider.component.mjs +33 -0
- package/esm2022/src/app/pages/designer/monaco-features/lazy-monaco-host.component.mjs +53 -0
- package/esm2022/src/app/pages/designer/monaco-features/lazy-monaco-loader.service.mjs +38 -0
- package/esm2022/src/app/pages/designer/monaco-features/monaco-features-loader.packagr.mjs +6 -0
- package/esm2022/src/app/pages/designer/monaco-features/monaco-features.module.mjs +53 -0
- package/esm2022/src/app/pages/designer/play/play-zorro/play-zorro.component.mjs +22 -0
- package/esm2022/src/app/pages/designer/play/play.component.mjs +67 -0
- package/esm2022/src/app/pages/designer/play/play.module.mjs +29 -0
- package/esm2022/src/app/pages/designer/services/designer-canvas-interaction.service.mjs +92 -0
- package/esm2022/src/app/pages/designer/services/designer-drag-drop.service.mjs +110 -0
- package/esm2022/src/app/pages/designer/services/designer-history-coordinator.service.mjs +74 -0
- package/esm2022/src/app/pages/designer/services/designer-history.service.mjs +99 -0
- package/esm2022/src/app/pages/designer/services/designer-item-tool.service.mjs +57 -0
- package/esm2022/src/app/pages/designer/services/designer-item-tree.service.mjs +50 -0
- package/esm2022/src/app/pages/designer/services/designer-shell.service.mjs +100 -0
- package/esm2022/src/app/pages/designer/services/designer-table-facade.service.mjs +86 -0
- package/esm2022/src/app/pages/designer/services/designer-table-toolbar.service.mjs +89 -0
- package/esm2022/src/app/pages/designer/services/designer-viewer.service.mjs +86 -0
- package/esm2022/src/app/shared/components/components.module.mjs +35 -0
- package/esm2022/src/app/shared/components/zorro-item/zorro-form-item/zorro-form-item.component.mjs +232 -0
- package/esm2022/src/app/shared/components/zorro-item/zorro-item.component.mjs +249 -0
- package/esm2022/src/app/shared/components/zorro-item/zorro-origin-item/zorro-origin-item.component.mjs +393 -0
- package/esm2022/src/app/shared/components/zorro-render.module.mjs +100 -0
- package/esm2022/src/app/shared/constants/upload.const.mjs +6 -0
- package/esm2022/src/app/shared/dictionaries/form-events.const.mjs +8 -0
- package/esm2022/src/app/shared/dictionaries/item-events.const.mjs +57 -0
- package/esm2022/src/app/shared/dictionaries/item-types-enum.mjs +66 -0
- package/esm2022/src/app/shared/dictionaries/items-types.const.mjs +93 -0
- package/esm2022/src/app/shared/factories/containers-producer.mjs +251 -0
- package/esm2022/src/app/shared/factories/i-items.factory.mjs +2 -0
- package/esm2022/src/app/shared/factories/items-factory.mjs +52 -0
- package/esm2022/src/app/shared/factories/items-producer.mjs +381 -0
- package/esm2022/src/app/shared/gencode/generate-container.mjs +261 -0
- package/esm2022/src/app/shared/gencode/generate-form-item.mjs +263 -0
- package/esm2022/src/app/shared/gencode/generate-form.mjs +146 -0
- package/esm2022/src/app/shared/gencode/html-gen.util.mjs +58 -0
- package/esm2022/src/app/shared/global-const.mjs +4 -0
- package/esm2022/src/app/shared/models/drag-object.model.mjs +3 -0
- package/esm2022/src/app/shared/models/form-field-value.model.mjs +2 -0
- package/esm2022/src/app/shared/models/form-item.model.mjs +96 -0
- package/esm2022/src/app/shared/models/form.model.mjs +31 -0
- package/esm2022/src/app/shared/models/i-items.model.mjs +6 -0
- package/esm2022/src/app/shared/models/i-validator.model.mjs +2 -0
- package/esm2022/src/app/shared/models/items/i-containers.model.mjs +2 -0
- package/esm2022/src/app/shared/models/items/i-form-controls.model.mjs +2 -0
- package/esm2022/src/app/shared/models/items/i-item-base.model.mjs +2 -0
- package/esm2022/src/app/shared/models/items/i-layout.model.mjs +2 -0
- package/esm2022/src/app/shared/models/layout-item.model.mjs +52 -0
- package/esm2022/src/app/shared/models/validator.model.mjs +55 -0
- package/esm2022/src/app/shared/pipes/pipes.module.mjs +19 -0
- package/esm2022/src/app/shared/pipes/substring.pipe.mjs +26 -0
- package/esm2022/src/app/shared/services/css.service.mjs +36 -0
- package/esm2022/src/app/shared/services/designer-canvas-refresh.service.mjs +22 -0
- package/esm2022/src/app/shared/services/i18n-config.service.mjs +76 -0
- package/esm2022/src/app/shared/services/stack.service.mjs +56 -0
- package/esm2022/src/app/shared/shared-zorro.module.mjs +95 -0
- package/esm2022/src/app/shared/shared.module.mjs +75 -0
- package/esm2022/src/app/shared/utils/component.operation.mjs +19 -0
- package/esm2022/src/app/shared/utils/date-format.util.mjs +59 -0
- package/esm2022/src/app/shared/utils/designer-item-move.util.mjs +68 -0
- package/esm2022/src/app/shared/utils/designer-item-mutation.util.mjs +60 -0
- package/esm2022/src/app/shared/utils/designer-item-selection.util.mjs +46 -0
- package/esm2022/src/app/shared/utils/dom-query.util.mjs +21 -0
- package/esm2022/src/app/shared/utils/form-events.util.mjs +58 -0
- package/esm2022/src/app/shared/utils/form-item-html.util.mjs +133 -0
- package/esm2022/src/app/shared/utils/form-values.util.mjs +218 -0
- package/esm2022/src/app/shared/utils/id-gen.mjs +13 -0
- package/esm2022/src/app/shared/utils/interactive-target.util.mjs +28 -0
- package/esm2022/src/app/shared/utils/item-events.util.mjs +77 -0
- package/esm2022/src/app/shared/utils/item-tree-query.util.mjs +78 -0
- package/esm2022/src/app/shared/utils/layout-responsive.util.mjs +70 -0
- package/esm2022/src/app/shared/utils/table-item-query.util.mjs +22 -0
- package/esm2022/src/app/shared/utils/table-item.operation.mjs +315 -0
- package/esm2022/src/app/shared/utils/time-area-control.util.mjs +5 -0
- package/esm2022/src/app/shared/utils/track-by.util.mjs +17 -0
- package/esm2022/src/app/shared/utils/tree-option.operation.mjs +118 -0
- package/esm2022/src/app/shared/utils/tree-option.util.mjs +11 -0
- package/esm2022/src/app/shared/utils/upload-gencode.util.mjs +163 -0
- package/esm2022/src/app/shared/utils/upload.util.mjs +83 -0
- package/esm2022/src/app/shared/utils/validator.util.mjs +116 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-card-properties.module-Bl511UvY.mjs +105 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-card-properties.module-Bl511UvY.mjs.map +1 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-cascader-properties.module-CHkFR4Rb.mjs +139 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-cascader-properties.module-CHkFR4Rb.mjs.map +1 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-checkbox-properties.module-ChMVbBT5.mjs +145 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-checkbox-properties.module-ChMVbBT5.mjs.map +1 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-col-properties.module-Rdd9Q58_.mjs +132 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-col-properties.module-Rdd9Q58_.mjs.map +1 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-date-properties.module-DGmuzB5y.mjs +181 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-date-properties.module-DGmuzB5y.mjs.map +1 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-divider-properties.module-ZfqdWRFu.mjs +105 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-divider-properties.module-ZfqdWRFu.mjs.map +1 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-grid-properties.module-DBnQuSpZ.mjs +112 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-grid-properties.module-DBnQuSpZ.mjs.map +1 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-image-properties.module-BmSpnc5A.mjs +112 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-image-properties.module-BmSpnc5A.mjs.map +1 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-image-upload-properties.module-BOQ0_c9H.mjs +111 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-image-upload-properties.module-BOQ0_c9H.mjs.map +1 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-input-number-properties.module-B7y7qW0Q.mjs +114 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-input-number-properties.module-B7y7qW0Q.mjs.map +1 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-input-properties.module-DBvTTTVO.mjs +109 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-input-properties.module-DBvTTTVO.mjs.map +1 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-jinmutech-ng-zorro-form-design-BUQ0OE6J.mjs +5945 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-jinmutech-ng-zorro-form-design-BUQ0OE6J.mjs.map +1 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-property-panel-shared.module-FJXAae9F.mjs +984 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-property-panel-shared.module-FJXAae9F.mjs.map +1 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-radio-properties.module-blNZNCdz.mjs +118 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-radio-properties.module-blNZNCdz.mjs.map +1 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-range-picker-properties.module-DU8W_k3x.mjs +193 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-range-picker-properties.module-DU8W_k3x.mjs.map +1 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-rate-properties.module-CeVoQSMI.mjs +164 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-rate-properties.module-CeVoQSMI.mjs.map +1 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-select-properties.module-CMpyQnFs.mjs +118 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-select-properties.module-CMpyQnFs.mjs.map +1 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-slider-properties.module-C5Pn6hpH.mjs +134 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-slider-properties.module-C5Pn6hpH.mjs.map +1 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-space-properties.module-CByvN3kh.mjs +116 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-space-properties.module-CByvN3kh.mjs.map +1 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-switch-properties.module-P7OlmC4y.mjs +110 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-switch-properties.module-P7OlmC4y.mjs.map +1 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-table-properties.module-B3zco-Ly.mjs +112 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-table-properties.module-B3zco-Ly.mjs.map +1 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-tabs-properties.module-CPFhV4aJ.mjs +127 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-tabs-properties.module-CPFhV4aJ.mjs.map +1 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-td-properties.module-CpkeM995.mjs +111 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-td-properties.module-CpkeM995.mjs.map +1 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-text-properties.module-DyyeDuGq.mjs +109 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-text-properties.module-DyyeDuGq.mjs.map +1 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-textarea-properties.module-jjsXFSOo.mjs +109 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-textarea-properties.module-jjsXFSOo.mjs.map +1 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-time-area-properties.module-DEUFXXv2.mjs +145 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-time-area-properties.module-DEUFXXv2.mjs.map +1 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-time-properties.module-BIVAmIsT.mjs +148 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-time-properties.module-BIVAmIsT.mjs.map +1 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-tree-select-properties.module-CuUi-Mg1.mjs +145 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-tree-select-properties.module-CuUi-Mg1.mjs.map +1 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-upload-properties.module-BjpbZWKG.mjs +111 -0
- package/fesm2022/jinmutech-ng-zorro-form-design-upload-properties.module-BjpbZWKG.mjs.map +1 -0
- package/fesm2022/jinmutech-ng-zorro-form-design.mjs +63 -0
- package/fesm2022/jinmutech-ng-zorro-form-design.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/package.json +64 -0
- package/public_api.d.ts +7 -0
- package/src/app/directive/directive.module.d.ts +19 -0
- package/src/app/directive/drag-drop/drag.directive.d.ts +23 -0
- package/src/app/directive/drag-drop/drop.directive.d.ts +25 -0
- package/src/app/directive/drag-drop.service.d.ts +14 -0
- package/src/app/directive/drag-drop.types.d.ts +3 -0
- package/src/app/directive/table/bgcolor.directive.d.ts +12 -0
- package/src/app/directive/table/borderColor.directive.d.ts +12 -0
- package/src/app/directive/table/borderWidth.directive.d.ts +12 -0
- package/src/app/directive/table/cellpadding.directive.d.ts +12 -0
- package/src/app/directive/table/cellspacing.directive.d.ts +12 -0
- package/src/app/directive/table/td/align.directive.d.ts +12 -0
- package/src/app/directive/table/td/colspan.directive.d.ts +12 -0
- package/src/app/directive/table/td/height.directive.d.ts +12 -0
- package/src/app/directive/table/td/rowspan.directive.d.ts +12 -0
- package/src/app/directive/table/td/valign.directive.d.ts +12 -0
- package/src/app/directive/table/td/width.directive.d.ts +12 -0
- package/src/app/pages/designer/code-viewer/code-viewer.component.d.ts +29 -0
- package/src/app/pages/designer/code-viewer/jm-monaco-editor/jm-monaco-editor.component.d.ts +12 -0
- package/src/app/pages/designer/designer.component.d.ts +120 -0
- package/src/app/pages/designer/designer.module.d.ts +26 -0
- package/src/app/pages/designer/directive/designer-property-change.directive.d.ts +15 -0
- package/src/app/pages/designer/element-properties/card-properties/card-properties.component.d.ts +14 -0
- package/src/app/pages/designer/element-properties/card-properties/card-properties.module.d.ts +10 -0
- package/src/app/pages/designer/element-properties/cascader-properties/cascader-properties.component.d.ts +25 -0
- package/src/app/pages/designer/element-properties/cascader-properties/cascader-properties.module.d.ts +10 -0
- package/src/app/pages/designer/element-properties/checkbox-properties/checkbox-properties.component.d.ts +29 -0
- package/src/app/pages/designer/element-properties/checkbox-properties/checkbox-properties.module.d.ts +10 -0
- package/src/app/pages/designer/element-properties/col-properties/col-properties.component.d.ts +23 -0
- package/src/app/pages/designer/element-properties/col-properties/col-properties.module.d.ts +10 -0
- package/src/app/pages/designer/element-properties/components/basic-properties/basic-properties.component.d.ts +29 -0
- package/src/app/pages/designer/element-properties/components/css-properties/css-properties.component.d.ts +33 -0
- package/src/app/pages/designer/element-properties/components/events-properties/events-properties.component.d.ts +14 -0
- package/src/app/pages/designer/element-properties/components/form-layout-properties/form-layout-properties.component.d.ts +22 -0
- package/src/app/pages/designer/element-properties/components/layout-properties/layout-properties.component.d.ts +35 -0
- package/src/app/pages/designer/element-properties/components/options-properties/options-properties.component.d.ts +32 -0
- package/src/app/pages/designer/element-properties/components/tree-options-properties/tree-options-properties.component.d.ts +36 -0
- package/src/app/pages/designer/element-properties/components/validators-properties/validator-properties/validator-properties.component.d.ts +83 -0
- package/src/app/pages/designer/element-properties/components/validators-properties/validators-properties.component.d.ts +74 -0
- package/src/app/pages/designer/element-properties/date-properties/date-properties.component.d.ts +36 -0
- package/src/app/pages/designer/element-properties/date-properties/date-properties.module.d.ts +10 -0
- package/src/app/pages/designer/element-properties/divider-properties/divider-properties.component.d.ts +14 -0
- package/src/app/pages/designer/element-properties/divider-properties/divider-properties.module.d.ts +10 -0
- package/src/app/pages/designer/element-properties/element-properties.component.d.ts +35 -0
- package/src/app/pages/designer/element-properties/grid-properties/grid-properties.component.d.ts +35 -0
- package/src/app/pages/designer/element-properties/grid-properties/grid-properties.module.d.ts +10 -0
- package/src/app/pages/designer/element-properties/image-properties/image-properties.component.d.ts +17 -0
- package/src/app/pages/designer/element-properties/image-properties/image-properties.module.d.ts +10 -0
- package/src/app/pages/designer/element-properties/image-upload-properties/image-upload-properties.component.d.ts +19 -0
- package/src/app/pages/designer/element-properties/image-upload-properties/image-upload-properties.module.d.ts +10 -0
- package/src/app/pages/designer/element-properties/input-number-properties/input-number-properties.component.d.ts +21 -0
- package/src/app/pages/designer/element-properties/input-number-properties/input-number-properties.module.d.ts +10 -0
- package/src/app/pages/designer/element-properties/input-properties/input-properties.component.d.ts +17 -0
- package/src/app/pages/designer/element-properties/input-properties/input-properties.module.d.ts +10 -0
- package/src/app/pages/designer/element-properties/radio-properties/radio-properties.component.d.ts +25 -0
- package/src/app/pages/designer/element-properties/radio-properties/radio-properties.module.d.ts +10 -0
- package/src/app/pages/designer/element-properties/range-picker-properties/range-picker-properties.component.d.ts +42 -0
- package/src/app/pages/designer/element-properties/range-picker-properties/range-picker-properties.module.d.ts +10 -0
- package/src/app/pages/designer/element-properties/rate-properties/rate-properties.component.d.ts +28 -0
- package/src/app/pages/designer/element-properties/rate-properties/rate-properties.module.d.ts +10 -0
- package/src/app/pages/designer/element-properties/select-properties/select-properties.component.d.ts +25 -0
- package/src/app/pages/designer/element-properties/select-properties/select-properties.module.d.ts +10 -0
- package/src/app/pages/designer/element-properties/shared/property-panel-loader.service.d.ts +18 -0
- package/src/app/pages/designer/element-properties/shared/property-panel-registry.d.ts +9 -0
- package/src/app/pages/designer/element-properties/shared/property-panel-shared.module.d.ts +21 -0
- package/src/app/pages/designer/element-properties/slider-properties/slider-properties.component.d.ts +23 -0
- package/src/app/pages/designer/element-properties/slider-properties/slider-properties.module.d.ts +10 -0
- package/src/app/pages/designer/element-properties/space-properties/space-properties.component.d.ts +18 -0
- package/src/app/pages/designer/element-properties/space-properties/space-properties.module.d.ts +10 -0
- package/src/app/pages/designer/element-properties/switch-properties/switch-properties.component.d.ts +19 -0
- package/src/app/pages/designer/element-properties/switch-properties/switch-properties.module.d.ts +10 -0
- package/src/app/pages/designer/element-properties/table-properties/table-properties.component.d.ts +19 -0
- package/src/app/pages/designer/element-properties/table-properties/table-properties.module.d.ts +10 -0
- package/src/app/pages/designer/element-properties/tabs-properties/tabs-properties.component.d.ts +23 -0
- package/src/app/pages/designer/element-properties/tabs-properties/tabs-properties.module.d.ts +10 -0
- package/src/app/pages/designer/element-properties/td-properties/td-properties.component.d.ts +27 -0
- package/src/app/pages/designer/element-properties/td-properties/td-properties.module.d.ts +10 -0
- package/src/app/pages/designer/element-properties/text-properties/text-properties.component.d.ts +17 -0
- package/src/app/pages/designer/element-properties/text-properties/text-properties.module.d.ts +10 -0
- package/src/app/pages/designer/element-properties/textarea-properties/textarea-properties.component.d.ts +17 -0
- package/src/app/pages/designer/element-properties/textarea-properties/textarea-properties.module.d.ts +10 -0
- package/src/app/pages/designer/element-properties/time-area-properties/time-area-properties.component.d.ts +36 -0
- package/src/app/pages/designer/element-properties/time-area-properties/time-area-properties.module.d.ts +10 -0
- package/src/app/pages/designer/element-properties/time-properties/time-properties.component.d.ts +37 -0
- package/src/app/pages/designer/element-properties/time-properties/time-properties.module.d.ts +10 -0
- package/src/app/pages/designer/element-properties/tree-select-properties/tree-select-properties.component.d.ts +25 -0
- package/src/app/pages/designer/element-properties/tree-select-properties/tree-select-properties.module.d.ts +10 -0
- package/src/app/pages/designer/element-properties/upload-properties/upload-properties.component.d.ts +19 -0
- package/src/app/pages/designer/element-properties/upload-properties/upload-properties.module.d.ts +10 -0
- package/src/app/pages/designer/form-properties/form-css-properties/form-css-properties.component.d.ts +26 -0
- package/src/app/pages/designer/form-properties/form-events-properties/form-events-properties.component.d.ts +13 -0
- package/src/app/pages/designer/form-properties/form-properties.component.d.ts +27 -0
- package/src/app/pages/designer/import-json/import-json.component.d.ts +34 -0
- package/src/app/pages/designer/json-viewer/json-viewer.component.d.ts +31 -0
- package/src/app/pages/designer/left-sider/left-sider.component.d.ts +14 -0
- package/src/app/pages/designer/monaco-features/lazy-monaco-host.component.d.ts +23 -0
- package/src/app/pages/designer/monaco-features/lazy-monaco-loader.service.d.ts +16 -0
- package/src/app/pages/designer/monaco-features/monaco-features-loader.packagr.d.ts +3 -0
- package/src/app/pages/designer/monaco-features/monaco-features.module.d.ts +20 -0
- package/src/app/pages/designer/play/play-zorro/play-zorro.component.d.ts +11 -0
- package/src/app/pages/designer/play/play.component.d.ts +19 -0
- package/src/app/pages/designer/play/play.module.d.ts +17 -0
- package/src/app/pages/designer/services/designer-canvas-interaction.service.d.ts +44 -0
- package/src/app/pages/designer/services/designer-drag-drop.service.d.ts +19 -0
- package/src/app/pages/designer/services/designer-history-coordinator.service.d.ts +27 -0
- package/src/app/pages/designer/services/designer-history.service.d.ts +26 -0
- package/src/app/pages/designer/services/designer-item-tool.service.d.ts +12 -0
- package/src/app/pages/designer/services/designer-item-tree.service.d.ts +19 -0
- package/src/app/pages/designer/services/designer-shell.service.d.ts +24 -0
- package/src/app/pages/designer/services/designer-table-facade.service.d.ts +21 -0
- package/src/app/pages/designer/services/designer-table-toolbar.service.d.ts +27 -0
- package/src/app/pages/designer/services/designer-viewer.service.d.ts +21 -0
- package/src/app/shared/components/components.module.d.ts +16 -0
- package/src/app/shared/components/zorro-item/zorro-form-item/zorro-form-item.component.d.ts +61 -0
- package/src/app/shared/components/zorro-item/zorro-item.component.d.ts +64 -0
- package/src/app/shared/components/zorro-item/zorro-origin-item/zorro-origin-item.component.d.ts +84 -0
- package/src/app/shared/components/zorro-render.module.d.ts +41 -0
- package/src/app/shared/constants/upload.const.d.ts +6 -0
- package/src/app/shared/dictionaries/form-events.const.d.ts +12 -0
- package/src/app/shared/dictionaries/item-events.const.d.ts +20 -0
- package/src/app/shared/dictionaries/item-types-enum.d.ts +38 -0
- package/src/app/shared/dictionaries/items-types.const.d.ts +115 -0
- package/src/app/shared/factories/containers-producer.d.ts +33 -0
- package/src/app/shared/factories/i-items.factory.d.ts +5 -0
- package/src/app/shared/factories/items-factory.d.ts +9 -0
- package/src/app/shared/factories/items-producer.d.ts +65 -0
- package/src/app/shared/gencode/generate-container.d.ts +16 -0
- package/src/app/shared/gencode/generate-form-item.d.ts +29 -0
- package/src/app/shared/gencode/generate-form.d.ts +20 -0
- package/src/app/shared/gencode/html-gen.util.d.ts +9 -0
- package/src/app/shared/global-const.d.ts +3 -0
- package/src/app/shared/models/drag-object.model.d.ts +11 -0
- package/src/app/shared/models/form-field-value.model.d.ts +2 -0
- package/src/app/shared/models/form-item.model.d.ts +38 -0
- package/src/app/shared/models/form.model.d.ts +25 -0
- package/src/app/shared/models/i-items.model.d.ts +5 -0
- package/src/app/shared/models/i-validator.model.d.ts +7 -0
- package/src/app/shared/models/items/i-containers.model.d.ts +90 -0
- package/src/app/shared/models/items/i-form-controls.model.d.ts +182 -0
- package/src/app/shared/models/items/i-item-base.model.d.ts +39 -0
- package/src/app/shared/models/items/i-layout.model.d.ts +40 -0
- package/src/app/shared/models/layout-item.model.d.ts +29 -0
- package/src/app/shared/models/validator.model.d.ts +13 -0
- package/src/app/shared/pipes/pipes.module.d.ts +9 -0
- package/src/app/shared/pipes/substring.pipe.d.ts +7 -0
- package/src/app/shared/services/css.service.d.ts +16 -0
- package/src/app/shared/services/designer-canvas-refresh.service.d.ts +11 -0
- package/src/app/shared/services/i18n-config.service.d.ts +27 -0
- package/src/app/shared/services/stack.service.d.ts +15 -0
- package/src/app/shared/shared-zorro.module.d.ts +7 -0
- package/src/app/shared/shared.module.d.ts +27 -0
- package/src/app/shared/utils/component.operation.d.ts +6 -0
- package/src/app/shared/utils/date-format.util.d.ts +13 -0
- package/src/app/shared/utils/designer-item-move.util.d.ts +11 -0
- package/src/app/shared/utils/designer-item-mutation.util.d.ts +9 -0
- package/src/app/shared/utils/designer-item-selection.util.d.ts +9 -0
- package/src/app/shared/utils/dom-query.util.d.ts +2 -0
- package/src/app/shared/utils/form-events.util.d.ts +18 -0
- package/src/app/shared/utils/form-item-html.util.d.ts +16 -0
- package/src/app/shared/utils/form-values.util.d.ts +34 -0
- package/src/app/shared/utils/id-gen.d.ts +5 -0
- package/src/app/shared/utils/interactive-target.util.d.ts +2 -0
- package/src/app/shared/utils/item-events.util.d.ts +21 -0
- package/src/app/shared/utils/item-tree-query.util.d.ts +10 -0
- package/src/app/shared/utils/layout-responsive.util.d.ts +12 -0
- package/src/app/shared/utils/table-item-query.util.d.ts +4 -0
- package/src/app/shared/utils/table-item.operation.d.ts +37 -0
- package/src/app/shared/utils/time-area-control.util.d.ts +5 -0
- package/src/app/shared/utils/track-by.util.d.ts +16 -0
- package/src/app/shared/utils/tree-option.operation.d.ts +11 -0
- package/src/app/shared/utils/tree-option.util.d.ts +3 -0
- package/src/app/shared/utils/upload-gencode.util.d.ts +9 -0
- package/src/app/shared/utils/upload.util.d.ts +8 -0
- package/src/app/shared/utils/validator.util.d.ts +16 -0
- package/src/assets/i18n/en-US.json +443 -0
- package/src/assets/i18n/zh-CN.json +444 -0
- package/src/assets/icons/attachment.svg +1 -0
- package/src/assets/icons/card.svg +1 -0
- package/src/assets/icons/checkbox.svg +1 -0
- package/src/assets/icons/code.svg +1 -0
- package/src/assets/icons/date-area.svg +1 -0
- package/src/assets/icons/date.svg +1 -0
- package/src/assets/icons/delete.svg +1 -0
- package/src/assets/icons/divider.svg +1 -0
- package/src/assets/icons/fold.svg +1 -0
- package/src/assets/icons/grid.svg +1 -0
- package/src/assets/icons/image-upload.svg +1 -0
- package/src/assets/icons/image.svg +1 -0
- package/src/assets/icons/import.svg +1 -0
- package/src/assets/icons/input-number.svg +1 -0
- package/src/assets/icons/input.svg +1 -0
- package/src/assets/icons/json.svg +1 -0
- package/src/assets/icons/layout.svg +1 -0
- package/src/assets/icons/level-select.svg +1 -0
- package/src/assets/icons/mobile.svg +1 -0
- package/src/assets/icons/multi-checkbox.svg +1 -0
- package/src/assets/icons/multi-input.svg +1 -0
- package/src/assets/icons/number-statistic.svg +1 -0
- package/src/assets/icons/pc.svg +1 -0
- package/src/assets/icons/play.svg +1 -0
- package/src/assets/icons/radio.svg +1 -0
- package/src/assets/icons/rate.svg +1 -0
- package/src/assets/icons/redo.svg +1 -0
- package/src/assets/icons/save.svg +1 -0
- package/src/assets/icons/select.svg +1 -0
- package/src/assets/icons/slider.svg +1 -0
- package/src/assets/icons/space.svg +1 -0
- package/src/assets/icons/switch.svg +1 -0
- package/src/assets/icons/tab.svg +1 -0
- package/src/assets/icons/table-col.svg +1 -0
- package/src/assets/icons/table-tr.svg +1 -0
- package/src/assets/icons/table.svg +1 -0
- package/src/assets/icons/tablet.svg +1 -0
- package/src/assets/icons/text.svg +1 -0
- package/src/assets/icons/time-area.svg +1 -0
- package/src/assets/icons/time.svg +1 -0
- package/src/assets/icons/tree-select.svg +1 -0
- package/src/assets/icons/undo.svg +1 -0
- package/src/assets/icons/upload.svg +1 -0
- package/src/assets/jm-logo.svg +1 -0
- package/src/assets/jm-logo1.svg +1 -0
- package/src/styles.less +135 -0
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, HostListener, Input, Output } from '@angular/core';
|
|
2
|
+
import { FormModel } from '../../shared/models/form.model';
|
|
3
|
+
import ItemTypeEnum, { ItemTypes } from '../../shared/dictionaries/item-types-enum';
|
|
4
|
+
import { Subject } from 'rxjs';
|
|
5
|
+
import { takeUntil } from 'rxjs/operators';
|
|
6
|
+
import { applyFormValues } from '../../shared/utils/form-values.util';
|
|
7
|
+
import { trackByItemId } from '../../shared/utils/track-by.util';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "ng-zorro-antd/i18n";
|
|
10
|
+
import * as i2 from "../../shared/services/i18n-config.service";
|
|
11
|
+
import * as i3 from "@ngx-translate/core";
|
|
12
|
+
import * as i4 from "ng-zorro-antd/modal";
|
|
13
|
+
import * as i5 from "./services/designer-shell.service";
|
|
14
|
+
import * as i6 from "./services/designer-history-coordinator.service";
|
|
15
|
+
import * as i7 from "./services/designer-canvas-interaction.service";
|
|
16
|
+
import * as i8 from "./services/designer-table-toolbar.service";
|
|
17
|
+
import * as i9 from "./services/designer-item-tree.service";
|
|
18
|
+
import * as i10 from "../../shared/services/designer-canvas-refresh.service";
|
|
19
|
+
import * as i11 from "ng-zorro-antd/message";
|
|
20
|
+
import * as i12 from "./services/designer-viewer.service";
|
|
21
|
+
import * as i13 from "@angular/common";
|
|
22
|
+
import * as i14 from "@angular/forms";
|
|
23
|
+
import * as i15 from "../../directive/drag-drop/drop.directive";
|
|
24
|
+
import * as i16 from "ng-zorro-antd/menu";
|
|
25
|
+
import * as i17 from "ng-zorro-antd/dropdown";
|
|
26
|
+
import * as i18 from "ng-zorro-antd/popover";
|
|
27
|
+
import * as i19 from "ng-zorro-antd/layout";
|
|
28
|
+
import * as i20 from "../../shared/components/zorro-item/zorro-item.component";
|
|
29
|
+
import * as i21 from "ng-zorro-antd/grid";
|
|
30
|
+
import * as i22 from "ng-zorro-antd/form";
|
|
31
|
+
import * as i23 from "ng-zorro-antd/divider";
|
|
32
|
+
import * as i24 from "ng-zorro-antd/space";
|
|
33
|
+
import * as i25 from "ng-zorro-antd/icon";
|
|
34
|
+
import * as i26 from "ng-zorro-antd/empty";
|
|
35
|
+
import * as i27 from "ng-zorro-antd/tooltip";
|
|
36
|
+
import * as i28 from "ng-zorro-antd/button";
|
|
37
|
+
import * as i29 from "ng-zorro-antd/core/transition-patch";
|
|
38
|
+
import * as i30 from "ng-zorro-antd/core/wave";
|
|
39
|
+
import * as i31 from "./left-sider/left-sider.component";
|
|
40
|
+
import * as i32 from "./element-properties/element-properties.component";
|
|
41
|
+
import * as i33 from "./form-properties/form-properties.component";
|
|
42
|
+
export class DesignerComponent {
|
|
43
|
+
get viewType() {
|
|
44
|
+
return this.shell.viewType;
|
|
45
|
+
}
|
|
46
|
+
get selectedItem() {
|
|
47
|
+
return this.canvasInteraction.selectedItem;
|
|
48
|
+
}
|
|
49
|
+
get canUndo() {
|
|
50
|
+
return this.historyCoordinator.canUndo;
|
|
51
|
+
}
|
|
52
|
+
get canRedo() {
|
|
53
|
+
return this.historyCoordinator.canRedo;
|
|
54
|
+
}
|
|
55
|
+
constructor(nzI18n, i18nConfig, translate, modal, viewContainerRef, changeDetectorRef, shell, historyCoordinator, canvasInteraction, tableToolbar, itemTreeService, canvasRefresh, messageService, viewerService, el, rd) {
|
|
56
|
+
this.nzI18n = nzI18n;
|
|
57
|
+
this.i18nConfig = i18nConfig;
|
|
58
|
+
this.translate = translate;
|
|
59
|
+
this.modal = modal;
|
|
60
|
+
this.viewContainerRef = viewContainerRef;
|
|
61
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
62
|
+
this.shell = shell;
|
|
63
|
+
this.historyCoordinator = historyCoordinator;
|
|
64
|
+
this.canvasInteraction = canvasInteraction;
|
|
65
|
+
this.tableToolbar = tableToolbar;
|
|
66
|
+
this.itemTreeService = itemTreeService;
|
|
67
|
+
this.canvasRefresh = canvasRefresh;
|
|
68
|
+
this.messageService = messageService;
|
|
69
|
+
this.viewerService = viewerService;
|
|
70
|
+
this.el = el;
|
|
71
|
+
this.rd = rd;
|
|
72
|
+
this.embedded = false;
|
|
73
|
+
this.initialFormModel = null;
|
|
74
|
+
this.formSave = new EventEmitter();
|
|
75
|
+
this.formChange = new EventEmitter();
|
|
76
|
+
this.isCollapsed = false;
|
|
77
|
+
this.formData = new FormModel();
|
|
78
|
+
this.itemTypeEnum = ItemTypeEnum;
|
|
79
|
+
this.itemTypes = ItemTypes;
|
|
80
|
+
this.trackByItemId = trackByItemId;
|
|
81
|
+
this.currentLang = 'en-US';
|
|
82
|
+
this.copyrightYear = new Date().getFullYear();
|
|
83
|
+
this.destroy$ = new Subject();
|
|
84
|
+
this.currentLang = this.i18nConfig.defaultLang;
|
|
85
|
+
}
|
|
86
|
+
changeLang(lang) {
|
|
87
|
+
this.currentLang = lang;
|
|
88
|
+
this.i18nConfig.applyLanguage(this.nzI18n, this.translate, lang);
|
|
89
|
+
this.syncView();
|
|
90
|
+
}
|
|
91
|
+
ngOnInit() {
|
|
92
|
+
this.canvasInteraction.configure({
|
|
93
|
+
syncView: () => this.syncView(),
|
|
94
|
+
emitFormChange: () => this.emitFormChange()
|
|
95
|
+
});
|
|
96
|
+
this.canvasInteraction.bindHost(this.el.nativeElement, this.rd);
|
|
97
|
+
this.initFormData();
|
|
98
|
+
this.canvasRefresh.onRefresh().pipe(takeUntil(this.destroy$)).subscribe(() => {
|
|
99
|
+
this.changeDetectorRef.markForCheck();
|
|
100
|
+
this.changeDetectorRef.detectChanges();
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
ngOnDestroy() {
|
|
104
|
+
this.destroy$.next();
|
|
105
|
+
this.destroy$.complete();
|
|
106
|
+
}
|
|
107
|
+
onWindowResize() {
|
|
108
|
+
this.resizeItemTool();
|
|
109
|
+
}
|
|
110
|
+
onDocumentKeyDown(event) {
|
|
111
|
+
this.shell.tryHandleHistoryShortcut(event, this.el.nativeElement, {
|
|
112
|
+
undo: () => this.undo(),
|
|
113
|
+
redo: () => this.redo()
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
ngOnChanges(changes) {
|
|
117
|
+
if (changes['initialFormModel'] && !changes['initialFormModel'].firstChange) {
|
|
118
|
+
this.initFormData();
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
initFormData() {
|
|
122
|
+
this.formData = this.shell.initializeForm(this.initialFormModel, this.embedded);
|
|
123
|
+
this.canvasInteraction.clearSelection();
|
|
124
|
+
this.syncView();
|
|
125
|
+
}
|
|
126
|
+
syncView() {
|
|
127
|
+
this.changeDetectorRef.markForCheck();
|
|
128
|
+
}
|
|
129
|
+
emitFormChange() {
|
|
130
|
+
this.formChange.emit(this.formData);
|
|
131
|
+
}
|
|
132
|
+
historyRestoreHooks() {
|
|
133
|
+
return {
|
|
134
|
+
onFormDataRestored: (formData) => {
|
|
135
|
+
this.formData = formData;
|
|
136
|
+
},
|
|
137
|
+
onSelectionChanged: (item) => {
|
|
138
|
+
this.canvasInteraction.selectedItem = item;
|
|
139
|
+
},
|
|
140
|
+
onShowItemTool: (id) => this.canvasInteraction.showItemTool({ id }, this.formData),
|
|
141
|
+
onHideItemTool: () => this.canvasInteraction.hideItemTool(),
|
|
142
|
+
onFormChange: () => this.emitFormChange(),
|
|
143
|
+
onSyncView: () => this.syncView()
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
withHistoryRecord(action) {
|
|
147
|
+
this.historyCoordinator.withHistoryRecord(this.formData, action, () => this.emitFormChange());
|
|
148
|
+
this.syncView();
|
|
149
|
+
}
|
|
150
|
+
recordTableEdit(action) {
|
|
151
|
+
this.withHistoryRecord(action);
|
|
152
|
+
}
|
|
153
|
+
undo() {
|
|
154
|
+
const restored = this.historyCoordinator.undo(this.formData, this.selectedItem?.id, this.historyRestoreHooks());
|
|
155
|
+
if (restored) {
|
|
156
|
+
this.formData = restored;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
redo() {
|
|
160
|
+
const restored = this.historyCoordinator.redo(this.formData, this.selectedItem?.id, this.historyRestoreHooks());
|
|
161
|
+
if (restored) {
|
|
162
|
+
this.formData = restored;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
emitSave() {
|
|
166
|
+
this.formSave.emit(this.formData);
|
|
167
|
+
this.messageService.success(this.translate.instant('common.save.success') || '已保存');
|
|
168
|
+
}
|
|
169
|
+
getFormModel() {
|
|
170
|
+
return this.formData;
|
|
171
|
+
}
|
|
172
|
+
setFormValues(values) {
|
|
173
|
+
applyFormValues(this.formData, values);
|
|
174
|
+
this.syncView();
|
|
175
|
+
}
|
|
176
|
+
getItemType(type) {
|
|
177
|
+
return this.itemTypes.find(res => res.value == type) ?? { icon: '', label: '', value: type };
|
|
178
|
+
}
|
|
179
|
+
clearForm() {
|
|
180
|
+
this.modal.confirm({
|
|
181
|
+
nzTitle: this.translate.instant('common.clear.form'),
|
|
182
|
+
nzContent: this.translate.instant('common.clear.form.message'),
|
|
183
|
+
nzOnOk: () => {
|
|
184
|
+
this.withHistoryRecord(() => {
|
|
185
|
+
this.formData.children = [];
|
|
186
|
+
this.canvasInteraction.clearSelection();
|
|
187
|
+
this.canvasInteraction.hideItemTool();
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
changeToPCView() {
|
|
193
|
+
this.changeViewType(1);
|
|
194
|
+
}
|
|
195
|
+
changeToTabletView() {
|
|
196
|
+
this.changeViewType(2);
|
|
197
|
+
}
|
|
198
|
+
changeToMobileView() {
|
|
199
|
+
this.changeViewType(3);
|
|
200
|
+
}
|
|
201
|
+
changeViewType(type) {
|
|
202
|
+
this.shell.changeViewType(type, () => {
|
|
203
|
+
this.syncView();
|
|
204
|
+
this.resizeItemTool();
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
play() {
|
|
208
|
+
void this.shell.openPreview(this.formData, this.viewContainerRef);
|
|
209
|
+
}
|
|
210
|
+
dragStart(_ev) {
|
|
211
|
+
this.canvasInteraction.dragStart();
|
|
212
|
+
}
|
|
213
|
+
leftSideDragEnd(_ev) {
|
|
214
|
+
this.canvasInteraction.leftSideDragEnd(this.formData);
|
|
215
|
+
}
|
|
216
|
+
drop(ev) {
|
|
217
|
+
this.canvasInteraction.drop(ev, this.formData);
|
|
218
|
+
}
|
|
219
|
+
dragOver(ev) {
|
|
220
|
+
this.canvasInteraction.dragOver(ev, this.formData);
|
|
221
|
+
}
|
|
222
|
+
click(ev) {
|
|
223
|
+
this.canvasInteraction.click(ev, this.formData);
|
|
224
|
+
}
|
|
225
|
+
resizeItemTool() {
|
|
226
|
+
this.canvasInteraction.resizeItemTool(this.formData);
|
|
227
|
+
}
|
|
228
|
+
addColItem() {
|
|
229
|
+
this.withHistoryRecord(() => this.itemTreeService.addColForChecked(this.formData.children));
|
|
230
|
+
}
|
|
231
|
+
copyItem() {
|
|
232
|
+
this.withHistoryRecord(() => {
|
|
233
|
+
this.formData.children = this.itemTreeService.copyChecked(this.formData.children);
|
|
234
|
+
setTimeout(() => this.resizeItemTool(), 20);
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
deleteItem() {
|
|
238
|
+
this.withHistoryRecord(() => {
|
|
239
|
+
this.formData.children = this.itemTreeService.deleteChecked(this.formData.children);
|
|
240
|
+
this.canvasInteraction.clearSelection();
|
|
241
|
+
this.canvasInteraction.hideItemTool();
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
isChecked(itemId) {
|
|
245
|
+
return this.canvasInteraction.isChecked(itemId, this.formData);
|
|
246
|
+
}
|
|
247
|
+
canMergeDown() {
|
|
248
|
+
return this.tableToolbar.canMergeDown(this.selectedItem, this.formData.children);
|
|
249
|
+
}
|
|
250
|
+
canMergeRight() {
|
|
251
|
+
return this.tableToolbar.canMergeRight(this.selectedItem, this.formData.children);
|
|
252
|
+
}
|
|
253
|
+
canSplitIntoCol() {
|
|
254
|
+
return this.tableToolbar.canSplitIntoCol(this.selectedItem);
|
|
255
|
+
}
|
|
256
|
+
canSplitIntoRow() {
|
|
257
|
+
return this.tableToolbar.canSplitIntoRow(this.selectedItem);
|
|
258
|
+
}
|
|
259
|
+
addTableTrItem() {
|
|
260
|
+
this.tableToolbar.addTableTr(this.formData, a => this.recordTableEdit(a), () => this.resizeItemTool());
|
|
261
|
+
}
|
|
262
|
+
addTableColItem() {
|
|
263
|
+
this.tableToolbar.addTableCol(this.formData, a => this.recordTableEdit(a), () => this.resizeItemTool());
|
|
264
|
+
}
|
|
265
|
+
insertLeftCol() {
|
|
266
|
+
this.tableToolbar.insertLeftCol(this.formData, this.selectedItem, a => this.recordTableEdit(a), () => this.resizeItemTool());
|
|
267
|
+
}
|
|
268
|
+
insertRightCol() {
|
|
269
|
+
this.tableToolbar.insertRightCol(this.formData, this.selectedItem, a => this.recordTableEdit(a), () => this.resizeItemTool());
|
|
270
|
+
}
|
|
271
|
+
insertUpRow() {
|
|
272
|
+
this.tableToolbar.insertUpRow(this.formData, this.selectedItem, a => this.recordTableEdit(a), () => this.resizeItemTool());
|
|
273
|
+
}
|
|
274
|
+
insertDownRow() {
|
|
275
|
+
this.tableToolbar.insertDownRow(this.formData, this.selectedItem, a => this.recordTableEdit(a), () => this.resizeItemTool());
|
|
276
|
+
}
|
|
277
|
+
mergeDown() {
|
|
278
|
+
this.tableToolbar.mergeDown(this.formData, this.selectedItem, a => this.recordTableEdit(a), () => this.resizeItemTool());
|
|
279
|
+
}
|
|
280
|
+
mergeRight() {
|
|
281
|
+
this.tableToolbar.mergeRight(this.formData, this.selectedItem, a => this.recordTableEdit(a), () => this.resizeItemTool());
|
|
282
|
+
}
|
|
283
|
+
splitIntoCol() {
|
|
284
|
+
this.tableToolbar.splitIntoCol(this.formData, this.selectedItem, a => this.recordTableEdit(a), () => this.resizeItemTool());
|
|
285
|
+
}
|
|
286
|
+
splitIntoRow() {
|
|
287
|
+
this.tableToolbar.splitIntoRow(this.formData, this.selectedItem, a => this.recordTableEdit(a), () => this.resizeItemTool());
|
|
288
|
+
}
|
|
289
|
+
deleteCurrentCol() {
|
|
290
|
+
this.tableToolbar.deleteCurrentCol(this.formData, this.selectedItem, a => this.recordTableEdit(a), () => this.resizeItemTool());
|
|
291
|
+
}
|
|
292
|
+
deleteCurrentRow() {
|
|
293
|
+
this.tableToolbar.deleteCurrentRow(this.formData, this.selectedItem, a => this.recordTableEdit(a), () => this.resizeItemTool());
|
|
294
|
+
}
|
|
295
|
+
importJson() {
|
|
296
|
+
void this.viewerService.openImportJson(this.viewContainerRef, this.embedded, value => {
|
|
297
|
+
this.formData = this.historyCoordinator.applyImportedForm(value, () => this.emitFormChange());
|
|
298
|
+
this.canvasInteraction.clearSelection();
|
|
299
|
+
this.canvasInteraction.hideItemTool();
|
|
300
|
+
this.syncView();
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
viewJson() {
|
|
304
|
+
void this.viewerService.openJsonViewer(this.formData);
|
|
305
|
+
}
|
|
306
|
+
viewCode() {
|
|
307
|
+
void this.viewerService.openCodeViewer(this.formData);
|
|
308
|
+
}
|
|
309
|
+
dataChangeEvent(event) {
|
|
310
|
+
this.canvasRefresh.notify();
|
|
311
|
+
this.syncView();
|
|
312
|
+
if (event === 'formSize') {
|
|
313
|
+
this.canvasInteraction.hideItemTool();
|
|
314
|
+
setTimeout(() => this.resizeItemTool(), 500);
|
|
315
|
+
}
|
|
316
|
+
else {
|
|
317
|
+
this.resizeItemTool();
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DesignerComponent, deps: [{ token: i1.NzI18nService }, { token: i2.I18nConfigService }, { token: i3.TranslateService }, { token: i4.NzModalService }, { token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }, { token: i5.DesignerShellService }, { token: i6.DesignerHistoryCoordinatorService }, { token: i7.DesignerCanvasInteractionService }, { token: i8.DesignerTableToolbarService }, { token: i9.DesignerItemTreeService }, { token: i10.DesignerCanvasRefreshService }, { token: i11.NzMessageService }, { token: i12.DesignerViewerService }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
321
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DesignerComponent, selector: "app-designer", inputs: { embedded: "embedded", initialFormModel: "initialFormModel" }, outputs: { formSave: "formSave", formChange: "formChange" }, host: { listeners: { "window:resize": "onWindowResize()", "document:keydown": "onDocumentKeyDown($event)" } }, usesOnChanges: true, ngImport: i0, template: "<nz-layout class=\"app-layout\" [class.app-layout-embedded]=\"embedded\">\n <nz-header *ngIf=\"!embedded\">\n <div class=\"app-header\">\n <div nz-row >\n <div nz-col class=\"gutter-row\" [nzSpan]=\"12\" >\n <div class=\"header-logo\">\n <a href=\"https://www.jinmutech.cn\" target=\"_blank\">\n <img src=\"/assets/jm-logo.svg\" alt=\"logo\">\n <h1>{{ \"project.name\" | translate }}</h1>\n </a>\n </div>\n </div>\n <div nz-col class=\"gutter-row\" style=\"text-align: right;padding-right: 16px\" [nzSpan]=\"12\">\n <nz-space>\n <div *nzSpaceItem><a>{{ 'project.document' | translate }}</a></div>\n <div *nzSpaceItem>\n <a nz-dropdown [nzDropdownMenu]=\"menu\">\n {{ currentLang=='zh-CN'?'\u7B80\u4F53\u4E2D\u6587':'English'}}\n <i nz-icon nzType=\"down\"></i>\n </a>\n <nz-dropdown-menu #menu=\"nzDropdownMenu\">\n <ul nz-menu nzSelectable>\n <li nz-menu-item [nzSelected]=\"currentLang=='zh-CN'\" (click)=\"changeLang('zh-CN')\">\u7B80\u4F53\u4E2D\u6587</li>\n <li nz-menu-item [nzSelected]=\"currentLang=='en-US'\" (click)=\"changeLang('en-US')\">English</li>\n </ul>\n </nz-dropdown-menu>\n </div>\n </nz-space>\n </div>\n </div>\n </div>\n </nz-header>\n <nz-layout>\n <nz-sider class=\"menu-left-sidebar\"\n nzCollapsible\n nzWidth=\"300px\"\n nzBreakpoint=\"md\"\n [(nzCollapsed)]=\"isCollapsed\"\n [nzTrigger]=\"null\">\n <app-left-sider (onLeftSideDragEnd)=\"leftSideDragEnd($event)\"></app-left-sider>\n </nz-sider>\n <nz-content>\n <div class=\"content-navigation-bar\">\n <div class=\"toolbar-section toolbar-section-left\">\n <span\n class=\"icon icon-middle icon-undo\"\n [class.icon-disabled]=\"!canUndo\"\n nz-tooltip\n [nzTooltipTitle]=\"'topbar.undo' | translate\"\n (click)=\"undo()\"\n ></span>\n <span\n class=\"icon icon-middle icon-redo\"\n [class.icon-disabled]=\"!canRedo\"\n nz-tooltip\n [nzTooltipTitle]=\"'topbar.redo' | translate\"\n (click)=\"redo()\"\n ></span>\n </div>\n <div class=\"toolbar-section toolbar-section-center\">\n <a class=\"icon icon-middle icon-play\" nz-tooltip [nzTooltipTitle]=\"'topbar.preview' | translate\" (click)=\"play()\"></a>\n </div>\n <div class=\"toolbar-section toolbar-section-right\">\n <div class=\"toolbar-actions\">\n <div class=\"toolbar-action-group\">\n <span *ngIf=\"embedded\" class=\"icon icon-middle icon-save\" nz-tooltip [nzTooltipTitle]=\"'common.save' | translate\" (click)=\"emitSave()\"></span>\n <span class=\"icon icon-middle icon-import\" nz-tooltip [nzTooltipTitle]=\"'topbar.import.json' | translate\" (click)=\"importJson()\"></span>\n <span *ngIf=\"!embedded\" class=\"icon icon-middle icon-json\" nz-tooltip [nzTooltipTitle]=\"'topbar.generate.json' | translate\" (click)=\"viewJson()\"></span>\n <span *ngIf=\"!embedded\" class=\"icon icon-middle icon-code\" nz-tooltip [nzTooltipTitle]=\"'topbar.generate.code' | translate\" (click)=\"viewCode()\"></span>\n <span class=\"icon icon-middle icon-delete\" nz-tooltip [nzTooltipTitle]=\"'topbar.clear.form' | translate\" (click)=\"clearForm()\"></span>\n </div>\n <nz-divider nzType=\"vertical\" class=\"toolbar-divider\"></nz-divider>\n <div class=\"toolbar-action-group\">\n <span class=\"icon icon-middle {{viewType==1?'icon-pc-checked':'icon-pc'}}\" nz-tooltip [nzTooltipTitle]=\"'topbar.pc.view' | translate\" (click)=\"changeToPCView()\"></span>\n <span class=\"icon icon-middle {{viewType==2?'icon-tablet-checked':'icon-tablet'}}\" nz-tooltip [nzTooltipTitle]=\"'topbar.tablet.view' | translate\" (click)=\"changeToTabletView()\"></span>\n <span class=\"icon icon-middle {{viewType==3?'icon-mobile-checked':'icon-mobile'}}\" nz-tooltip [nzTooltipTitle]=\"'topbar.mobile.view' | translate\" (click)=\"changeToMobileView()\"></span>\n </div>\n </div>\n </div>\n </div>\n <div [class]=\"'inner-content'\" >\n <div id=\"designContent\" [attr.data-item-id]=\"'designContent'\" [class]=\"viewType==1?'inner-pc-content':(viewType==2?'inner-tablet-content':'inner-mobile-content')\" \n [isDroppable]=\"true\"\n (onDragOverEvent)=\"dragOver($event)\"\n (onDropEvent)=\"drop($event)\">\n <div id=\"form-item-mask\" [isDroppable]=\"true\" (onDropEvent)=\"drop($event)\" ></div>\n <nz-space id=\"item-tool\" [attr.data-item-id]=\"'item-tool'\" class=\"item-tool\" nzSize=\"small\">\n <ng-container *ngIf=\"selectedItem?.type == itemTypeEnum.Table\">\n <button id=\"addTableTrItemBtn\" *nzSpaceItem nz-button nzType=\"primary\" nzSize=\"small\" nzShape=\"circle\" (click)=\"addTableTrItem()\">\n <span class=\"icon-button icon-table-tr\"></span>\n </button>\n <button id=\"addTableColItemBtn\" *nzSpaceItem nz-button nzType=\"primary\" nzSize=\"small\" nzShape=\"circle\" (click)=\"addTableColItem()\">\n <span class=\"icon-button icon-table-col\"></span>\n </button>\n </ng-container>\n <ng-container *ngIf=\"selectedItem?.type == itemTypeEnum.Grid\">\n <button id=\"addColItemBtn\" *nzSpaceItem nz-button nzType=\"primary\" nzSize=\"small\" nzShape=\"circle\" (click)=\"addColItem()\">\n <i nz-icon nzType=\"plus\"></i>\n </button>\n </ng-container>\n <ng-container *ngIf=\"selectedItem?.type == itemTypeEnum.Td\">\n <button id=\"tdMenu\" *nzSpaceItem nz-button nz-dropdown [nzDropdownMenu]=\"menu\" nzType=\"primary\" nzSize=\"small\" nzShape=\"circle\">\n <i nz-icon nzType=\"setting\"></i>\n </button>\n <nz-dropdown-menu #menu=\"nzDropdownMenu\">\n <ul nz-menu>\n <li nz-menu-item (click)=\"insertLeftCol()\">{{ 'table.menu.insert.left' | translate }}</li>\n <li nz-menu-item (click)=\"insertRightCol()\">{{ 'table.menu.insert.right' | translate }}</li>\n <li nz-menu-item (click)=\"insertUpRow()\">{{ 'table.menu.insert.up' | translate }}</li>\n <li nz-menu-item (click)=\"insertDownRow()\">{{ 'table.menu.insert.down' | translate }}</li>\n <li nz-menu-divider></li>\n <li nz-menu-item (click)=\"mergeDown()\" [nzDisabled]=\"canMergeDown()\">{{ 'table.menu.merge.down' | translate }}</li>\n <li nz-menu-item (click)=\"mergeRight()\" [nzDisabled]=\"canMergeRight()\">{{ 'table.menu.merge.right' | translate }}</li>\n <li nz-menu-divider></li>\n <li nz-menu-item (click)=\"splitIntoCol()\" [nzDisabled]=\"canSplitIntoCol()\">{{ 'table.menu.split.col' | translate }}</li>\n <li nz-menu-item (click)=\"splitIntoRow()\" [nzDisabled]=\"canSplitIntoRow()\">{{ 'table.menu.split.row' | translate }}</li>\n <li nz-menu-divider></li>\n <li nz-menu-item (click)=\"deleteCurrentCol()\">{{ 'table.menu.delete.col' | translate }}</li>\n <li nz-menu-item (click)=\"deleteCurrentRow()\">{{ 'table.menu.delete.row' | translate }}</li>\n </ul>\n </nz-dropdown-menu>\n </ng-container>\n <ng-container *ngIf=\"selectedItem?.type != itemTypeEnum.Td\">\n <button id=\"copyItemBtn\" *nzSpaceItem nz-button nzType=\"primary\" nzSize=\"small\" nzShape=\"circle\" (click)=\"copyItem()\">\n <i nz-icon nzType=\"copy\"></i>\n </button>\n <button id=\"deleteItemBtn\" *nzSpaceItem nz-button nzType=\"primary\" nzSize=\"small\" nzShape=\"circle\" (click)=\"deleteItem()\">\n <i nz-icon nzType=\"delete\"></i>\n </button>\n </ng-container>\n </nz-space>\n <form nz-form [nzLayout]=\"formData.layout\" >\n <ng-container *ngFor=\"let item of formData.children; trackBy: trackByItemId\">\n <zorro-item [data]=\"item\" [formData]=\"formData\"\n [viewType]=\"viewType\"\n [isChecked]=\"isChecked(item.id)\"\n [checkedId]=\"item.id\"\n (onDragOverEvent)=\"dragOver($event)\"\n (onDropEvent)=\"drop($event)\"\n (onClickEvent)=\"click($event)\"\n (onDragStartEvent)=\"dragStart($event)\"\n (onDragEndEvent)=\"leftSideDragEnd($event)\"\n [isCreate]=\"false\"\n ></zorro-item>\n </ng-container>\n </form>\n </div>\n </div>\n </nz-content>\n <nz-sider class=\"menu-right-sidebar\" \n nzCollapsible\n nzWidth=\"300px\"\n nzBreakpoint=\"md\"\n [(nzCollapsed)]=\"isCollapsed\"\n [nzTrigger]=\"null\">\n <div class=\"content-navigation-bar content-navigation-bar--sidebar\">\n <div class=\"toolbar-section toolbar-section-left toolbar-section-grow\">\n <span class=\"icon icon-{{ !!selectedItem?getItemType(selectedItem.type).icon:'' }}\"></span>\n <span class=\"toolbar-label\">{{ !!selectedItem?(getItemType(selectedItem.type).label | translate):'' }}</span>\n </div>\n <div class=\"toolbar-section toolbar-section-right\">\n <button nz-button nz-popover nzType=\"default\" nzSize=\"small\" nzPopoverTitle=\"{{ 'rightsider.form.title' | translate }}\" [nzPopoverContent]=\"formSetting\" nzPopoverTrigger=\"hover\" nzPopoverPlacement=\"bottomRight\">\n {{ 'rightsider.form.title' | translate }}\n </button>\n </div>\n </div>\n <div class=\"element-properties\">\n <element-properties *ngIf=\"!!selectedItem\" [data]=\"selectedItem\" [viewType]=\"viewType\" (dataChangeEvent)=\"dataChangeEvent($event)\"></element-properties>\n <nz-empty *ngIf=\"!selectedItem\"></nz-empty>\n </div>\n <ng-template #formSetting>\n <form-properties [formData]=\"formData\" (dataChangeEvent)=\"dataChangeEvent($event)\"></form-properties>\n </ng-template>\n </nz-sider>\n </nz-layout>\n <nz-footer>\n <div class=\"app-footer\">\n {{ 'copyright' | translate:{ year: copyrightYear } }}\n </div>\n </nz-footer>\n</nz-layout>\n\n", styles: [":host{display:flex;flex-direction:column;height:100%;min-height:0;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.app-layout{height:100vh}.app-layout-embedded{width:100%;max-width:100%;height:100%;min-height:0;overflow:hidden;border:1px solid #e5e8eb;border-radius:4px;box-sizing:border-box;background:#fff}.app-layout-embedded nz-footer{display:none}.app-layout-embedded>nz-layout.ant-layout{display:flex;flex-direction:row;width:100%;max-width:100%;height:100%;min-height:0;overflow:hidden}.app-layout-embedded nz-sider{flex:0 0 auto}.app-layout-embedded nz-content{display:flex;flex:1 1 auto;flex-direction:column;width:0;min-width:0;height:100%;overflow:hidden}.app-layout-embedded .content-navigation-bar{flex-shrink:0}.app-layout-embedded .inner-content{flex:1;min-width:0;min-height:0;height:auto;display:flex;justify-content:center;align-items:stretch;overflow-x:hidden;overflow-y:auto;padding:8px 4px 8px 8px;background:#f5f6f7;box-sizing:border-box}.app-layout-embedded .inner-pc-content,.app-layout-embedded .inner-tablet-content,.app-layout-embedded .inner-mobile-content{margin:0;padding:16px 12px 16px 16px;border:1px solid #e5e8eb;border-radius:4px;background:#fff;box-sizing:border-box;overflow-x:hidden;overflow-y:auto;position:relative;z-index:1}.app-layout-embedded .inner-pc-content{width:100%;max-width:100%;height:100%;flex:1 1 auto;align-self:stretch}.app-layout-embedded .inner-tablet-content{width:800px;max-width:calc(100% - 16px);height:100%;flex:0 0 auto}.app-layout-embedded .inner-mobile-content{width:400px;max-width:calc(100% - 16px);height:100%;flex:0 0 auto}.app-layout-embedded .menu-left-sidebar,.app-layout-embedded .menu-right-sidebar{height:100%;overflow:hidden}.app-layout-embedded .menu-right-sidebar{box-shadow:-2px 0 6px #00152926}.app-layout-embedded .element-properties{box-sizing:border-box;overflow-x:hidden;overflow-y:auto;padding-right:4px}.menu-left-sidebar{position:relative;overflow-y:auto;overflow-x:hidden;z-index:1;min-height:100%;box-shadow:0 0 2px #00152959;background:#f5f6f7;padding:8px 4px 8px 8px;scrollbar-width:thin;scrollbar-color:#bfbfbf #f5f5f5}.menu-left-sidebar::-webkit-scrollbar{width:8px;display:block}.menu-left-sidebar::-webkit-scrollbar-track{background:#f5f5f5;border-radius:4px;margin:4px 0;border:1px solid #e8e8e8}.menu-left-sidebar::-webkit-scrollbar-thumb{background:#bfbfbf;border-radius:4px;border:1px solid #d9d9d9;min-height:40px;transition:background .3s}.menu-left-sidebar::-webkit-scrollbar-thumb:hover{background:#8c8c8c;border-color:#8c8c8c}.menu-left-sidebar::-webkit-scrollbar-thumb:active{background:#595959;border-color:#595959}.menu-right-sidebar{position:relative;height:100%;min-height:100%;z-index:1;box-shadow:2px 0 6px #00152959;background:#f5f6f7}.element-properties{position:relative;overflow-y:auto;overflow-x:hidden;height:calc(100% - 35px);min-height:calc(100% - 35px);z-index:1;padding:0 4px 16px 8px;scrollbar-width:thin;scrollbar-color:#bfbfbf #f5f5f5}.element-properties::-webkit-scrollbar{width:8px;display:block}.element-properties::-webkit-scrollbar-track{background:#f5f5f5;border-radius:4px;margin:4px 0;border:1px solid #e8e8e8}.element-properties::-webkit-scrollbar-thumb{background:#bfbfbf;border-radius:4px;border:1px solid #d9d9d9;min-height:40px;transition:background .3s}.element-properties::-webkit-scrollbar-thumb:hover{background:#8c8c8c;border-color:#8c8c8c}.element-properties::-webkit-scrollbar-thumb:active{background:#595959;border-color:#595959}.header-trigger{height:64px;padding:20px 24px;font-size:20px;cursor:pointer;transition:all .3s,padding 0s}.trigger:hover{color:#1890ff}.header-logo{position:relative;height:64px;padding-left:24px;overflow:hidden;line-height:64px;background:#fff;transition:all .3s}.header-logo img{display:inline-block;height:32px;width:32px;vertical-align:middle}.header-logo h1{display:inline-block;margin:0 0 0 20px;color:#241f1f;font-weight:600;font-size:14px;font-family:Avenir,Helvetica Neue,Arial,Helvetica,sans-serif;vertical-align:middle}nz-header{padding:0;width:100%;z-index:2}.app-header{position:relative;height:64px;padding:0;background:#fff;box-shadow:0 1px 4px #00152914}nz-content{margin:0;min-height:100%;display:flex;flex-direction:column;min-width:0}.inner-content{position:relative;overflow-y:auto;overflow-x:hidden;height:calc(100% - 35px);min-height:calc(100% - 35px);padding-right:4px;box-sizing:border-box;scrollbar-width:thin;scrollbar-color:#bfbfbf #f5f5f5}.inner-content::-webkit-scrollbar{width:8px;display:block}.inner-content::-webkit-scrollbar-track{background:#f5f5f5;border-radius:4px;margin:4px 0;border:1px solid #e8e8e8}.inner-content::-webkit-scrollbar-thumb{background:#bfbfbf;border-radius:4px;border:1px solid #d9d9d9;min-height:40px;transition:background .3s}.inner-content::-webkit-scrollbar-thumb:hover{background:#8c8c8c;border-color:#8c8c8c}.inner-content::-webkit-scrollbar-thumb:active{background:#595959;border-color:#595959}.inner-pc-content{position:relative;overflow-y:auto;overflow-x:hidden;background:#fff;border-radius:10px;border:1px solid #e5e8eb;z-index:1;height:95%;padding:16px 12px 16px 16px;margin:16px;box-sizing:border-box;scrollbar-width:thin;scrollbar-color:#bfbfbf #f5f5f5}.inner-pc-content::-webkit-scrollbar{width:8px;display:block}.inner-pc-content::-webkit-scrollbar-track{background:#f5f5f5;border-radius:4px;margin:4px 0;border:1px solid #e8e8e8}.inner-pc-content::-webkit-scrollbar-thumb{background:#bfbfbf;border-radius:4px;border:1px solid #d9d9d9;min-height:40px;transition:background .3s}.inner-pc-content::-webkit-scrollbar-thumb:hover{background:#8c8c8c;border-color:#8c8c8c}.inner-pc-content::-webkit-scrollbar-thumb:active{background:#595959;border-color:#595959}.inner-tablet-content{position:relative;overflow-y:auto;overflow-x:hidden;background:#fff;height:95%;width:800px;border:1px solid #e5e8eb;border-radius:10px;padding:16px 12px 16px 16px;z-index:1;margin:16px auto;box-sizing:border-box;scrollbar-width:thin;scrollbar-color:#bfbfbf #f5f5f5}.inner-tablet-content::-webkit-scrollbar{width:8px;display:block}.inner-tablet-content::-webkit-scrollbar-track{background:#f5f5f5;border-radius:4px;margin:4px 0;border:1px solid #e8e8e8}.inner-tablet-content::-webkit-scrollbar-thumb{background:#bfbfbf;border-radius:4px;border:1px solid #d9d9d9;min-height:40px;transition:background .3s}.inner-tablet-content::-webkit-scrollbar-thumb:hover{background:#8c8c8c;border-color:#8c8c8c}.inner-tablet-content::-webkit-scrollbar-thumb:active{background:#595959;border-color:#595959}.inner-mobile-content{position:relative;overflow-y:auto;overflow-x:hidden;background:#fff;height:95%;width:400px;border:1px solid #e5e8eb;border-radius:10px;padding:16px 12px 16px 16px;z-index:1;margin:16px auto;box-sizing:border-box;scrollbar-width:thin;scrollbar-color:#bfbfbf #f5f5f5}.inner-mobile-content::-webkit-scrollbar{width:8px;display:block}.inner-mobile-content::-webkit-scrollbar-track{background:#f5f5f5;border-radius:4px;margin:4px 0;border:1px solid #e8e8e8}.inner-mobile-content::-webkit-scrollbar-thumb{background:#bfbfbf;border-radius:4px;border:1px solid #d9d9d9;min-height:40px;transition:background .3s}.inner-mobile-content::-webkit-scrollbar-thumb:hover{background:#8c8c8c;border-color:#8c8c8c}.inner-mobile-content::-webkit-scrollbar-thumb:active{background:#595959;border-color:#595959}nz-footer{padding:0;width:100%;z-index:2}.app-footer{position:relative;height:30px;padding-top:5px;padding-left:10px;background:#fff;border-top:1px solid #eef0f1;box-shadow:0 1px 4px #00152914}.content-navigation-bar{display:flex;flex-wrap:nowrap;align-items:center;justify-content:space-between;gap:8px;height:35px;min-height:35px;background-color:#f5f6f7;padding:0 8px 0 16px;border-bottom:1px solid #dfe2e4;box-sizing:border-box;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;scrollbar-width:none}.content-navigation-bar::-webkit-scrollbar{display:none}.content-navigation-bar .toolbar-section{display:flex;flex:0 0 auto;flex-wrap:nowrap;align-items:center;white-space:nowrap}.content-navigation-bar .toolbar-section-left{justify-content:flex-start}.content-navigation-bar .toolbar-section-center{flex:1 1 auto;justify-content:center;min-width:32px}.content-navigation-bar .toolbar-section-right{justify-content:flex-end;margin-left:auto}.content-navigation-bar .toolbar-section-grow{flex:1 1 auto;min-width:0;overflow:hidden}.content-navigation-bar .toolbar-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.content-navigation-bar .toolbar-actions{display:flex;flex-wrap:nowrap;align-items:center;flex-shrink:0}.content-navigation-bar .toolbar-action-group{display:inline-flex;flex-wrap:nowrap;align-items:center;flex-shrink:0}.content-navigation-bar .toolbar-divider{height:16px;margin:0 4px;flex-shrink:0}.content-navigation-bar .icon-middle{vertical-align:middle;margin-top:0;margin-bottom:0;flex-shrink:0}.content-navigation-bar .icon-save{background-image:url(/assets/icons/save.svg);cursor:pointer}.content-navigation-bar--sidebar{padding-right:12px}#form-item-mask{background-color:#e7e2e265;margin:auto;position:absolute;z-index:100;border-radius:5px;border-style:dotted;border-color:#1890ff;border-width:1px;top:0;left:0;display:none}.item-tool{position:absolute;z-index:100;display:none}.icon{display:inline-block;width:16px;height:16px;background-size:cover;color:inherit;vertical-align:-.25em;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin-right:6px}.icon-button{display:inline-block;width:16px;height:16px;background-size:cover;color:inherit;vertical-align:-.25em;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-middle{vertical-align:-.5em;width:20px;height:20px;margin-left:4px;margin-right:4px;flex-shrink:0}.icon:hover,.icon:focus{filter:invert(41%) sepia(45%) saturate(2448%) hue-rotate(191deg) brightness(101%) contrast(101%)}.icon-disabled{opacity:.35;cursor:not-allowed;pointer-events:none;filter:none}\n"], dependencies: [{ kind: "directive", type: i13.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i14.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i14.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i14.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i15.DropDirective, selector: "[isDroppable]", inputs: ["isDroppable"], outputs: ["onDragEnterEvent", "onDragOverEvent", "onDragLeaveEvent", "onDropEvent", "onClickEvent"] }, { kind: "directive", type: i16.NzMenuDirective, selector: "[nz-menu]", inputs: ["nzInlineIndent", "nzTheme", "nzMode", "nzInlineCollapsed", "nzSelectable"], outputs: ["nzClick"], exportAs: ["nzMenu"] }, { kind: "component", type: i16.NzMenuItemComponent, selector: "[nz-menu-item]", inputs: ["nzPaddingLeft", "nzDisabled", "nzSelected", "nzDanger", "nzMatchRouterExact", "nzMatchRouter"], exportAs: ["nzMenuItem"] }, { kind: "directive", type: i16.NzMenuDividerDirective, selector: "[nz-menu-divider]", exportAs: ["nzMenuDivider"] }, { kind: "directive", type: i17.NzDropDownDirective, selector: "[nz-dropdown]", inputs: ["nzDropdownMenu", "nzTrigger", "nzMatchWidthElement", "nzBackdrop", "nzClickHide", "nzDisabled", "nzVisible", "nzOverlayClassName", "nzOverlayStyle", "nzPlacement"], outputs: ["nzVisibleChange"], exportAs: ["nzDropdown"] }, { kind: "directive", type: i17.NzDropDownADirective, selector: "a[nz-dropdown]" }, { kind: "component", type: i17.NzDropdownMenuComponent, selector: "nz-dropdown-menu", exportAs: ["nzDropdownMenu"] }, { kind: "directive", type: i17.NzDropdownButtonDirective, selector: "[nz-button][nz-dropdown]" }, { kind: "directive", type: i18.NzPopoverDirective, selector: "[nz-popover]", inputs: ["nzPopoverArrowPointAtCenter", "nzPopoverTitle", "nzPopoverContent", "nz-popover", "nzPopoverTrigger", "nzPopoverPlacement", "nzPopoverOrigin", "nzPopoverVisible", "nzPopoverMouseEnterDelay", "nzPopoverMouseLeaveDelay", "nzPopoverOverlayClassName", "nzPopoverOverlayStyle", "nzPopoverBackdrop"], outputs: ["nzPopoverVisibleChange"], exportAs: ["nzPopover"] }, { kind: "component", type: i19.NzLayoutComponent, selector: "nz-layout", exportAs: ["nzLayout"] }, { kind: "component", type: i19.NzHeaderComponent, selector: "nz-header", exportAs: ["nzHeader"] }, { kind: "component", type: i19.NzContentComponent, selector: "nz-content", exportAs: ["nzContent"] }, { kind: "component", type: i19.NzFooterComponent, selector: "nz-footer", exportAs: ["nzFooter"] }, { kind: "component", type: i19.NzSiderComponent, selector: "nz-sider", inputs: ["nzWidth", "nzTheme", "nzCollapsedWidth", "nzBreakpoint", "nzZeroTrigger", "nzTrigger", "nzReverseArrow", "nzCollapsible", "nzCollapsed"], outputs: ["nzCollapsedChange"], exportAs: ["nzSider"] }, { kind: "component", type: i20.ZorroItemComponent, selector: "zorro-item", inputs: ["data", "formData", "viewType", "renderMode", "isChecked", "checkedId", "isCreate"], outputs: ["onDragStartEvent", "onDragOverEvent", "onDragEndEvent", "onDropEvent", "onClickEvent"] }, { kind: "directive", type: i21.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i21.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "directive", type: i22.NzFormDirective, selector: "[nz-form]", inputs: ["nzLayout", "nzNoColon", "nzAutoTips", "nzDisableAutoTips", "nzTooltipIcon", "nzLabelAlign", "nzLabelWrap"], exportAs: ["nzForm"] }, { kind: "component", type: i23.NzDividerComponent, selector: "nz-divider", inputs: ["nzText", "nzType", "nzOrientation", "nzDashed", "nzPlain"], exportAs: ["nzDivider"] }, { kind: "component", type: i24.NzSpaceComponent, selector: "nz-space, [nz-space]", inputs: ["nzDirection", "nzAlign", "nzSplit", "nzWrap", "nzSize"], exportAs: ["NzSpace"] }, { kind: "directive", type: i24.NzSpaceItemDirective, selector: "[nzSpaceItem]" }, { kind: "directive", type: i25.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "component", type: i26.NzEmptyComponent, selector: "nz-empty", inputs: ["nzNotFoundImage", "nzNotFoundContent", "nzNotFoundFooter"], exportAs: ["nzEmpty"] }, { kind: "directive", type: i27.NzTooltipDirective, selector: "[nz-tooltip]", inputs: ["nzTooltipTitle", "nzTooltipTitleContext", "nz-tooltip", "nzTooltipTrigger", "nzTooltipPlacement", "nzTooltipOrigin", "nzTooltipVisible", "nzTooltipMouseEnterDelay", "nzTooltipMouseLeaveDelay", "nzTooltipOverlayClassName", "nzTooltipOverlayStyle", "nzTooltipArrowPointAtCenter", "cdkConnectedOverlayPush", "nzTooltipColor"], outputs: ["nzTooltipVisibleChange"], exportAs: ["nzTooltip"] }, { kind: "component", type: i28.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i29.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i30.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { kind: "component", type: i31.LeftSiderComponent, selector: "app-left-sider", inputs: ["formData"], outputs: ["onLeftSideDragEnd"] }, { kind: "component", type: i32.ElementPropertiesComponent, selector: "element-properties", inputs: ["data", "viewType"], outputs: ["dataChangeEvent"] }, { kind: "component", type: i33.FormPropertiesComponent, selector: "form-properties", inputs: ["formData"], outputs: ["dataChangeEvent"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
322
|
+
}
|
|
323
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DesignerComponent, decorators: [{
|
|
324
|
+
type: Component,
|
|
325
|
+
args: [{ selector: 'app-designer', changeDetection: ChangeDetectionStrategy.OnPush, template: "<nz-layout class=\"app-layout\" [class.app-layout-embedded]=\"embedded\">\n <nz-header *ngIf=\"!embedded\">\n <div class=\"app-header\">\n <div nz-row >\n <div nz-col class=\"gutter-row\" [nzSpan]=\"12\" >\n <div class=\"header-logo\">\n <a href=\"https://www.jinmutech.cn\" target=\"_blank\">\n <img src=\"/assets/jm-logo.svg\" alt=\"logo\">\n <h1>{{ \"project.name\" | translate }}</h1>\n </a>\n </div>\n </div>\n <div nz-col class=\"gutter-row\" style=\"text-align: right;padding-right: 16px\" [nzSpan]=\"12\">\n <nz-space>\n <div *nzSpaceItem><a>{{ 'project.document' | translate }}</a></div>\n <div *nzSpaceItem>\n <a nz-dropdown [nzDropdownMenu]=\"menu\">\n {{ currentLang=='zh-CN'?'\u7B80\u4F53\u4E2D\u6587':'English'}}\n <i nz-icon nzType=\"down\"></i>\n </a>\n <nz-dropdown-menu #menu=\"nzDropdownMenu\">\n <ul nz-menu nzSelectable>\n <li nz-menu-item [nzSelected]=\"currentLang=='zh-CN'\" (click)=\"changeLang('zh-CN')\">\u7B80\u4F53\u4E2D\u6587</li>\n <li nz-menu-item [nzSelected]=\"currentLang=='en-US'\" (click)=\"changeLang('en-US')\">English</li>\n </ul>\n </nz-dropdown-menu>\n </div>\n </nz-space>\n </div>\n </div>\n </div>\n </nz-header>\n <nz-layout>\n <nz-sider class=\"menu-left-sidebar\"\n nzCollapsible\n nzWidth=\"300px\"\n nzBreakpoint=\"md\"\n [(nzCollapsed)]=\"isCollapsed\"\n [nzTrigger]=\"null\">\n <app-left-sider (onLeftSideDragEnd)=\"leftSideDragEnd($event)\"></app-left-sider>\n </nz-sider>\n <nz-content>\n <div class=\"content-navigation-bar\">\n <div class=\"toolbar-section toolbar-section-left\">\n <span\n class=\"icon icon-middle icon-undo\"\n [class.icon-disabled]=\"!canUndo\"\n nz-tooltip\n [nzTooltipTitle]=\"'topbar.undo' | translate\"\n (click)=\"undo()\"\n ></span>\n <span\n class=\"icon icon-middle icon-redo\"\n [class.icon-disabled]=\"!canRedo\"\n nz-tooltip\n [nzTooltipTitle]=\"'topbar.redo' | translate\"\n (click)=\"redo()\"\n ></span>\n </div>\n <div class=\"toolbar-section toolbar-section-center\">\n <a class=\"icon icon-middle icon-play\" nz-tooltip [nzTooltipTitle]=\"'topbar.preview' | translate\" (click)=\"play()\"></a>\n </div>\n <div class=\"toolbar-section toolbar-section-right\">\n <div class=\"toolbar-actions\">\n <div class=\"toolbar-action-group\">\n <span *ngIf=\"embedded\" class=\"icon icon-middle icon-save\" nz-tooltip [nzTooltipTitle]=\"'common.save' | translate\" (click)=\"emitSave()\"></span>\n <span class=\"icon icon-middle icon-import\" nz-tooltip [nzTooltipTitle]=\"'topbar.import.json' | translate\" (click)=\"importJson()\"></span>\n <span *ngIf=\"!embedded\" class=\"icon icon-middle icon-json\" nz-tooltip [nzTooltipTitle]=\"'topbar.generate.json' | translate\" (click)=\"viewJson()\"></span>\n <span *ngIf=\"!embedded\" class=\"icon icon-middle icon-code\" nz-tooltip [nzTooltipTitle]=\"'topbar.generate.code' | translate\" (click)=\"viewCode()\"></span>\n <span class=\"icon icon-middle icon-delete\" nz-tooltip [nzTooltipTitle]=\"'topbar.clear.form' | translate\" (click)=\"clearForm()\"></span>\n </div>\n <nz-divider nzType=\"vertical\" class=\"toolbar-divider\"></nz-divider>\n <div class=\"toolbar-action-group\">\n <span class=\"icon icon-middle {{viewType==1?'icon-pc-checked':'icon-pc'}}\" nz-tooltip [nzTooltipTitle]=\"'topbar.pc.view' | translate\" (click)=\"changeToPCView()\"></span>\n <span class=\"icon icon-middle {{viewType==2?'icon-tablet-checked':'icon-tablet'}}\" nz-tooltip [nzTooltipTitle]=\"'topbar.tablet.view' | translate\" (click)=\"changeToTabletView()\"></span>\n <span class=\"icon icon-middle {{viewType==3?'icon-mobile-checked':'icon-mobile'}}\" nz-tooltip [nzTooltipTitle]=\"'topbar.mobile.view' | translate\" (click)=\"changeToMobileView()\"></span>\n </div>\n </div>\n </div>\n </div>\n <div [class]=\"'inner-content'\" >\n <div id=\"designContent\" [attr.data-item-id]=\"'designContent'\" [class]=\"viewType==1?'inner-pc-content':(viewType==2?'inner-tablet-content':'inner-mobile-content')\" \n [isDroppable]=\"true\"\n (onDragOverEvent)=\"dragOver($event)\"\n (onDropEvent)=\"drop($event)\">\n <div id=\"form-item-mask\" [isDroppable]=\"true\" (onDropEvent)=\"drop($event)\" ></div>\n <nz-space id=\"item-tool\" [attr.data-item-id]=\"'item-tool'\" class=\"item-tool\" nzSize=\"small\">\n <ng-container *ngIf=\"selectedItem?.type == itemTypeEnum.Table\">\n <button id=\"addTableTrItemBtn\" *nzSpaceItem nz-button nzType=\"primary\" nzSize=\"small\" nzShape=\"circle\" (click)=\"addTableTrItem()\">\n <span class=\"icon-button icon-table-tr\"></span>\n </button>\n <button id=\"addTableColItemBtn\" *nzSpaceItem nz-button nzType=\"primary\" nzSize=\"small\" nzShape=\"circle\" (click)=\"addTableColItem()\">\n <span class=\"icon-button icon-table-col\"></span>\n </button>\n </ng-container>\n <ng-container *ngIf=\"selectedItem?.type == itemTypeEnum.Grid\">\n <button id=\"addColItemBtn\" *nzSpaceItem nz-button nzType=\"primary\" nzSize=\"small\" nzShape=\"circle\" (click)=\"addColItem()\">\n <i nz-icon nzType=\"plus\"></i>\n </button>\n </ng-container>\n <ng-container *ngIf=\"selectedItem?.type == itemTypeEnum.Td\">\n <button id=\"tdMenu\" *nzSpaceItem nz-button nz-dropdown [nzDropdownMenu]=\"menu\" nzType=\"primary\" nzSize=\"small\" nzShape=\"circle\">\n <i nz-icon nzType=\"setting\"></i>\n </button>\n <nz-dropdown-menu #menu=\"nzDropdownMenu\">\n <ul nz-menu>\n <li nz-menu-item (click)=\"insertLeftCol()\">{{ 'table.menu.insert.left' | translate }}</li>\n <li nz-menu-item (click)=\"insertRightCol()\">{{ 'table.menu.insert.right' | translate }}</li>\n <li nz-menu-item (click)=\"insertUpRow()\">{{ 'table.menu.insert.up' | translate }}</li>\n <li nz-menu-item (click)=\"insertDownRow()\">{{ 'table.menu.insert.down' | translate }}</li>\n <li nz-menu-divider></li>\n <li nz-menu-item (click)=\"mergeDown()\" [nzDisabled]=\"canMergeDown()\">{{ 'table.menu.merge.down' | translate }}</li>\n <li nz-menu-item (click)=\"mergeRight()\" [nzDisabled]=\"canMergeRight()\">{{ 'table.menu.merge.right' | translate }}</li>\n <li nz-menu-divider></li>\n <li nz-menu-item (click)=\"splitIntoCol()\" [nzDisabled]=\"canSplitIntoCol()\">{{ 'table.menu.split.col' | translate }}</li>\n <li nz-menu-item (click)=\"splitIntoRow()\" [nzDisabled]=\"canSplitIntoRow()\">{{ 'table.menu.split.row' | translate }}</li>\n <li nz-menu-divider></li>\n <li nz-menu-item (click)=\"deleteCurrentCol()\">{{ 'table.menu.delete.col' | translate }}</li>\n <li nz-menu-item (click)=\"deleteCurrentRow()\">{{ 'table.menu.delete.row' | translate }}</li>\n </ul>\n </nz-dropdown-menu>\n </ng-container>\n <ng-container *ngIf=\"selectedItem?.type != itemTypeEnum.Td\">\n <button id=\"copyItemBtn\" *nzSpaceItem nz-button nzType=\"primary\" nzSize=\"small\" nzShape=\"circle\" (click)=\"copyItem()\">\n <i nz-icon nzType=\"copy\"></i>\n </button>\n <button id=\"deleteItemBtn\" *nzSpaceItem nz-button nzType=\"primary\" nzSize=\"small\" nzShape=\"circle\" (click)=\"deleteItem()\">\n <i nz-icon nzType=\"delete\"></i>\n </button>\n </ng-container>\n </nz-space>\n <form nz-form [nzLayout]=\"formData.layout\" >\n <ng-container *ngFor=\"let item of formData.children; trackBy: trackByItemId\">\n <zorro-item [data]=\"item\" [formData]=\"formData\"\n [viewType]=\"viewType\"\n [isChecked]=\"isChecked(item.id)\"\n [checkedId]=\"item.id\"\n (onDragOverEvent)=\"dragOver($event)\"\n (onDropEvent)=\"drop($event)\"\n (onClickEvent)=\"click($event)\"\n (onDragStartEvent)=\"dragStart($event)\"\n (onDragEndEvent)=\"leftSideDragEnd($event)\"\n [isCreate]=\"false\"\n ></zorro-item>\n </ng-container>\n </form>\n </div>\n </div>\n </nz-content>\n <nz-sider class=\"menu-right-sidebar\" \n nzCollapsible\n nzWidth=\"300px\"\n nzBreakpoint=\"md\"\n [(nzCollapsed)]=\"isCollapsed\"\n [nzTrigger]=\"null\">\n <div class=\"content-navigation-bar content-navigation-bar--sidebar\">\n <div class=\"toolbar-section toolbar-section-left toolbar-section-grow\">\n <span class=\"icon icon-{{ !!selectedItem?getItemType(selectedItem.type).icon:'' }}\"></span>\n <span class=\"toolbar-label\">{{ !!selectedItem?(getItemType(selectedItem.type).label | translate):'' }}</span>\n </div>\n <div class=\"toolbar-section toolbar-section-right\">\n <button nz-button nz-popover nzType=\"default\" nzSize=\"small\" nzPopoverTitle=\"{{ 'rightsider.form.title' | translate }}\" [nzPopoverContent]=\"formSetting\" nzPopoverTrigger=\"hover\" nzPopoverPlacement=\"bottomRight\">\n {{ 'rightsider.form.title' | translate }}\n </button>\n </div>\n </div>\n <div class=\"element-properties\">\n <element-properties *ngIf=\"!!selectedItem\" [data]=\"selectedItem\" [viewType]=\"viewType\" (dataChangeEvent)=\"dataChangeEvent($event)\"></element-properties>\n <nz-empty *ngIf=\"!selectedItem\"></nz-empty>\n </div>\n <ng-template #formSetting>\n <form-properties [formData]=\"formData\" (dataChangeEvent)=\"dataChangeEvent($event)\"></form-properties>\n </ng-template>\n </nz-sider>\n </nz-layout>\n <nz-footer>\n <div class=\"app-footer\">\n {{ 'copyright' | translate:{ year: copyrightYear } }}\n </div>\n </nz-footer>\n</nz-layout>\n\n", styles: [":host{display:flex;flex-direction:column;height:100%;min-height:0;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.app-layout{height:100vh}.app-layout-embedded{width:100%;max-width:100%;height:100%;min-height:0;overflow:hidden;border:1px solid #e5e8eb;border-radius:4px;box-sizing:border-box;background:#fff}.app-layout-embedded nz-footer{display:none}.app-layout-embedded>nz-layout.ant-layout{display:flex;flex-direction:row;width:100%;max-width:100%;height:100%;min-height:0;overflow:hidden}.app-layout-embedded nz-sider{flex:0 0 auto}.app-layout-embedded nz-content{display:flex;flex:1 1 auto;flex-direction:column;width:0;min-width:0;height:100%;overflow:hidden}.app-layout-embedded .content-navigation-bar{flex-shrink:0}.app-layout-embedded .inner-content{flex:1;min-width:0;min-height:0;height:auto;display:flex;justify-content:center;align-items:stretch;overflow-x:hidden;overflow-y:auto;padding:8px 4px 8px 8px;background:#f5f6f7;box-sizing:border-box}.app-layout-embedded .inner-pc-content,.app-layout-embedded .inner-tablet-content,.app-layout-embedded .inner-mobile-content{margin:0;padding:16px 12px 16px 16px;border:1px solid #e5e8eb;border-radius:4px;background:#fff;box-sizing:border-box;overflow-x:hidden;overflow-y:auto;position:relative;z-index:1}.app-layout-embedded .inner-pc-content{width:100%;max-width:100%;height:100%;flex:1 1 auto;align-self:stretch}.app-layout-embedded .inner-tablet-content{width:800px;max-width:calc(100% - 16px);height:100%;flex:0 0 auto}.app-layout-embedded .inner-mobile-content{width:400px;max-width:calc(100% - 16px);height:100%;flex:0 0 auto}.app-layout-embedded .menu-left-sidebar,.app-layout-embedded .menu-right-sidebar{height:100%;overflow:hidden}.app-layout-embedded .menu-right-sidebar{box-shadow:-2px 0 6px #00152926}.app-layout-embedded .element-properties{box-sizing:border-box;overflow-x:hidden;overflow-y:auto;padding-right:4px}.menu-left-sidebar{position:relative;overflow-y:auto;overflow-x:hidden;z-index:1;min-height:100%;box-shadow:0 0 2px #00152959;background:#f5f6f7;padding:8px 4px 8px 8px;scrollbar-width:thin;scrollbar-color:#bfbfbf #f5f5f5}.menu-left-sidebar::-webkit-scrollbar{width:8px;display:block}.menu-left-sidebar::-webkit-scrollbar-track{background:#f5f5f5;border-radius:4px;margin:4px 0;border:1px solid #e8e8e8}.menu-left-sidebar::-webkit-scrollbar-thumb{background:#bfbfbf;border-radius:4px;border:1px solid #d9d9d9;min-height:40px;transition:background .3s}.menu-left-sidebar::-webkit-scrollbar-thumb:hover{background:#8c8c8c;border-color:#8c8c8c}.menu-left-sidebar::-webkit-scrollbar-thumb:active{background:#595959;border-color:#595959}.menu-right-sidebar{position:relative;height:100%;min-height:100%;z-index:1;box-shadow:2px 0 6px #00152959;background:#f5f6f7}.element-properties{position:relative;overflow-y:auto;overflow-x:hidden;height:calc(100% - 35px);min-height:calc(100% - 35px);z-index:1;padding:0 4px 16px 8px;scrollbar-width:thin;scrollbar-color:#bfbfbf #f5f5f5}.element-properties::-webkit-scrollbar{width:8px;display:block}.element-properties::-webkit-scrollbar-track{background:#f5f5f5;border-radius:4px;margin:4px 0;border:1px solid #e8e8e8}.element-properties::-webkit-scrollbar-thumb{background:#bfbfbf;border-radius:4px;border:1px solid #d9d9d9;min-height:40px;transition:background .3s}.element-properties::-webkit-scrollbar-thumb:hover{background:#8c8c8c;border-color:#8c8c8c}.element-properties::-webkit-scrollbar-thumb:active{background:#595959;border-color:#595959}.header-trigger{height:64px;padding:20px 24px;font-size:20px;cursor:pointer;transition:all .3s,padding 0s}.trigger:hover{color:#1890ff}.header-logo{position:relative;height:64px;padding-left:24px;overflow:hidden;line-height:64px;background:#fff;transition:all .3s}.header-logo img{display:inline-block;height:32px;width:32px;vertical-align:middle}.header-logo h1{display:inline-block;margin:0 0 0 20px;color:#241f1f;font-weight:600;font-size:14px;font-family:Avenir,Helvetica Neue,Arial,Helvetica,sans-serif;vertical-align:middle}nz-header{padding:0;width:100%;z-index:2}.app-header{position:relative;height:64px;padding:0;background:#fff;box-shadow:0 1px 4px #00152914}nz-content{margin:0;min-height:100%;display:flex;flex-direction:column;min-width:0}.inner-content{position:relative;overflow-y:auto;overflow-x:hidden;height:calc(100% - 35px);min-height:calc(100% - 35px);padding-right:4px;box-sizing:border-box;scrollbar-width:thin;scrollbar-color:#bfbfbf #f5f5f5}.inner-content::-webkit-scrollbar{width:8px;display:block}.inner-content::-webkit-scrollbar-track{background:#f5f5f5;border-radius:4px;margin:4px 0;border:1px solid #e8e8e8}.inner-content::-webkit-scrollbar-thumb{background:#bfbfbf;border-radius:4px;border:1px solid #d9d9d9;min-height:40px;transition:background .3s}.inner-content::-webkit-scrollbar-thumb:hover{background:#8c8c8c;border-color:#8c8c8c}.inner-content::-webkit-scrollbar-thumb:active{background:#595959;border-color:#595959}.inner-pc-content{position:relative;overflow-y:auto;overflow-x:hidden;background:#fff;border-radius:10px;border:1px solid #e5e8eb;z-index:1;height:95%;padding:16px 12px 16px 16px;margin:16px;box-sizing:border-box;scrollbar-width:thin;scrollbar-color:#bfbfbf #f5f5f5}.inner-pc-content::-webkit-scrollbar{width:8px;display:block}.inner-pc-content::-webkit-scrollbar-track{background:#f5f5f5;border-radius:4px;margin:4px 0;border:1px solid #e8e8e8}.inner-pc-content::-webkit-scrollbar-thumb{background:#bfbfbf;border-radius:4px;border:1px solid #d9d9d9;min-height:40px;transition:background .3s}.inner-pc-content::-webkit-scrollbar-thumb:hover{background:#8c8c8c;border-color:#8c8c8c}.inner-pc-content::-webkit-scrollbar-thumb:active{background:#595959;border-color:#595959}.inner-tablet-content{position:relative;overflow-y:auto;overflow-x:hidden;background:#fff;height:95%;width:800px;border:1px solid #e5e8eb;border-radius:10px;padding:16px 12px 16px 16px;z-index:1;margin:16px auto;box-sizing:border-box;scrollbar-width:thin;scrollbar-color:#bfbfbf #f5f5f5}.inner-tablet-content::-webkit-scrollbar{width:8px;display:block}.inner-tablet-content::-webkit-scrollbar-track{background:#f5f5f5;border-radius:4px;margin:4px 0;border:1px solid #e8e8e8}.inner-tablet-content::-webkit-scrollbar-thumb{background:#bfbfbf;border-radius:4px;border:1px solid #d9d9d9;min-height:40px;transition:background .3s}.inner-tablet-content::-webkit-scrollbar-thumb:hover{background:#8c8c8c;border-color:#8c8c8c}.inner-tablet-content::-webkit-scrollbar-thumb:active{background:#595959;border-color:#595959}.inner-mobile-content{position:relative;overflow-y:auto;overflow-x:hidden;background:#fff;height:95%;width:400px;border:1px solid #e5e8eb;border-radius:10px;padding:16px 12px 16px 16px;z-index:1;margin:16px auto;box-sizing:border-box;scrollbar-width:thin;scrollbar-color:#bfbfbf #f5f5f5}.inner-mobile-content::-webkit-scrollbar{width:8px;display:block}.inner-mobile-content::-webkit-scrollbar-track{background:#f5f5f5;border-radius:4px;margin:4px 0;border:1px solid #e8e8e8}.inner-mobile-content::-webkit-scrollbar-thumb{background:#bfbfbf;border-radius:4px;border:1px solid #d9d9d9;min-height:40px;transition:background .3s}.inner-mobile-content::-webkit-scrollbar-thumb:hover{background:#8c8c8c;border-color:#8c8c8c}.inner-mobile-content::-webkit-scrollbar-thumb:active{background:#595959;border-color:#595959}nz-footer{padding:0;width:100%;z-index:2}.app-footer{position:relative;height:30px;padding-top:5px;padding-left:10px;background:#fff;border-top:1px solid #eef0f1;box-shadow:0 1px 4px #00152914}.content-navigation-bar{display:flex;flex-wrap:nowrap;align-items:center;justify-content:space-between;gap:8px;height:35px;min-height:35px;background-color:#f5f6f7;padding:0 8px 0 16px;border-bottom:1px solid #dfe2e4;box-sizing:border-box;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;scrollbar-width:none}.content-navigation-bar::-webkit-scrollbar{display:none}.content-navigation-bar .toolbar-section{display:flex;flex:0 0 auto;flex-wrap:nowrap;align-items:center;white-space:nowrap}.content-navigation-bar .toolbar-section-left{justify-content:flex-start}.content-navigation-bar .toolbar-section-center{flex:1 1 auto;justify-content:center;min-width:32px}.content-navigation-bar .toolbar-section-right{justify-content:flex-end;margin-left:auto}.content-navigation-bar .toolbar-section-grow{flex:1 1 auto;min-width:0;overflow:hidden}.content-navigation-bar .toolbar-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.content-navigation-bar .toolbar-actions{display:flex;flex-wrap:nowrap;align-items:center;flex-shrink:0}.content-navigation-bar .toolbar-action-group{display:inline-flex;flex-wrap:nowrap;align-items:center;flex-shrink:0}.content-navigation-bar .toolbar-divider{height:16px;margin:0 4px;flex-shrink:0}.content-navigation-bar .icon-middle{vertical-align:middle;margin-top:0;margin-bottom:0;flex-shrink:0}.content-navigation-bar .icon-save{background-image:url(/assets/icons/save.svg);cursor:pointer}.content-navigation-bar--sidebar{padding-right:12px}#form-item-mask{background-color:#e7e2e265;margin:auto;position:absolute;z-index:100;border-radius:5px;border-style:dotted;border-color:#1890ff;border-width:1px;top:0;left:0;display:none}.item-tool{position:absolute;z-index:100;display:none}.icon{display:inline-block;width:16px;height:16px;background-size:cover;color:inherit;vertical-align:-.25em;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin-right:6px}.icon-button{display:inline-block;width:16px;height:16px;background-size:cover;color:inherit;vertical-align:-.25em;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-middle{vertical-align:-.5em;width:20px;height:20px;margin-left:4px;margin-right:4px;flex-shrink:0}.icon:hover,.icon:focus{filter:invert(41%) sepia(45%) saturate(2448%) hue-rotate(191deg) brightness(101%) contrast(101%)}.icon-disabled{opacity:.35;cursor:not-allowed;pointer-events:none;filter:none}\n"] }]
|
|
326
|
+
}], ctorParameters: () => [{ type: i1.NzI18nService }, { type: i2.I18nConfigService }, { type: i3.TranslateService }, { type: i4.NzModalService }, { type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }, { type: i5.DesignerShellService }, { type: i6.DesignerHistoryCoordinatorService }, { type: i7.DesignerCanvasInteractionService }, { type: i8.DesignerTableToolbarService }, { type: i9.DesignerItemTreeService }, { type: i10.DesignerCanvasRefreshService }, { type: i11.NzMessageService }, { type: i12.DesignerViewerService }, { type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { embedded: [{
|
|
327
|
+
type: Input
|
|
328
|
+
}], initialFormModel: [{
|
|
329
|
+
type: Input
|
|
330
|
+
}], formSave: [{
|
|
331
|
+
type: Output
|
|
332
|
+
}], formChange: [{
|
|
333
|
+
type: Output
|
|
334
|
+
}], onWindowResize: [{
|
|
335
|
+
type: HostListener,
|
|
336
|
+
args: ['window:resize']
|
|
337
|
+
}], onDocumentKeyDown: [{
|
|
338
|
+
type: HostListener,
|
|
339
|
+
args: ['document:keydown', ['$event']]
|
|
340
|
+
}] } });
|
|
341
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9wYWdlcy9kZXNpZ25lci9kZXNpZ25lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3BhZ2VzL2Rlc2lnbmVyL2Rlc2lnbmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFJUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0QsT0FBTyxZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUtwRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWdCakUsTUFBTSxPQUFPLGlCQUFpQjtJQWdCNUIsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDO0lBQzdDLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUM7SUFDekMsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8s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QUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUMvSCxDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDM0gsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBQzVILENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUM5SCxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDOUgsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUNsSSxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBQ2xJLENBQUM7SUFFRCxVQUFVO1FBQ1IsS0FBSyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FDcEMsSUFBSSxDQUFDLGdCQUFnQixFQUNyQixJQUFJLENBQUMsUUFBUSxFQUNiLEtBQUssQ0FBQyxFQUFFO1lBQ04sSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1lBQzlGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2xCLENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELFFBQVE7UUFDTixLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsUUFBUTtRQUNOLEtBQUssSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxlQUFlLENBQUMsS0FBYztRQUM1QixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQixJQUFJLEtBQUssS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMvQyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN4QixDQUFDO0lBQ0gsQ0FBQzsrR0FoV1UsaUJBQWlCO21HQUFqQixpQkFBaUIsNlRDM0M5QixnaFZBc0xBOzs0RkQzSWEsaUJBQWlCO2tCQU43QixTQUFTOytCQUNFLGNBQWMsbUJBR1AsdUJBQXVCLENBQUMsTUFBTTtpbUJBR3RDLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNJLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkEwRVAsY0FBYztzQkFEYixZQUFZO3VCQUFDLGVBQWU7Z0JBTTdCLGlCQUFpQjtzQkFEaEIsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUmVuZGVyZXIyLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUl0ZW1Nb2RlbCwgSVRkTW9kZWwgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL2ktaXRlbXMubW9kZWwnO1xuaW1wb3J0IHsgRm9ybU1vZGVsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9mb3JtLm1vZGVsJztcbmltcG9ydCBJdGVtVHlwZUVudW0sIHsgSXRlbVR5cGVzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2RpY3Rpb25hcmllcy9pdGVtLXR5cGVzLWVudW0nO1xuaW1wb3J0IHsgTnpNb2RhbFNlcnZpY2UgfSBmcm9tICduZy16b3Jyby1hbnRkL21vZGFsJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE56STE4blNlcnZpY2UgfSBmcm9tICduZy16b3Jyby1hbnRkL2kxOG4nO1xuaW1wb3J0IHsgSTE4bkNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvaTE4bi1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBOek1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9tZXNzYWdlJztcbmltcG9ydCB7IGFwcGx5Rm9ybVZhbHVlcyB9IGZyb20gJy4uLy4uL3NoYXJlZC91dGlscy9mb3JtLXZhbHVlcy51dGlsJztcbmltcG9ydCB7IHRyYWNrQnlJdGVtSWQgfSBmcm9tICcuLi8uLi9zaGFyZWQvdXRpbHMvdHJhY2stYnkudXRpbCc7XG5pbXBvcnQgeyBEcmFnT2JqZWN0TW9kZWwgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL2RyYWctb2JqZWN0Lm1vZGVsJztcbmltcG9ydCB7IERlc2lnbmVySGlzdG9yeUNvb3JkaW5hdG9yU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZGVzaWduZXItaGlzdG9yeS1jb29yZGluYXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IERlc2lnbmVyQ2FudmFzSW50ZXJhY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9kZXNpZ25lci1jYW52YXMtaW50ZXJhY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBEZXNpZ25lclRhYmxlVG9vbGJhclNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2Rlc2lnbmVyLXRhYmxlLXRvb2xiYXIuc2VydmljZSc7XG5pbXBvcnQgeyBEZXNpZ25lckl0ZW1UcmVlU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZGVzaWduZXItaXRlbS10cmVlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGVzaWduZXJWaWV3ZXJTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9kZXNpZ25lci12aWV3ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBEZXNpZ25lclNoZWxsU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZGVzaWduZXItc2hlbGwuc2VydmljZSc7XG5pbXBvcnQgeyBEZXNpZ25lckNhbnZhc1JlZnJlc2hTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2Rlc2lnbmVyLWNhbnZhcy1yZWZyZXNoLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZGVzaWduZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZGVzaWduZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kZXNpZ25lci5jb21wb25lbnQubGVzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBEZXNpZ25lckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBlbWJlZGRlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBpbml0aWFsRm9ybU1vZGVsOiBGb3JtTW9kZWwgfCBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgQE91dHB1dCgpIGZvcm1TYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtTW9kZWw+KCk7XG4gIEBPdXRwdXQoKSBmb3JtQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtTW9kZWw+KCk7XG5cbiAgaXNDb2xsYXBzZWQgPSBmYWxzZTtcbiAgZm9ybURhdGE6IEZvcm1Nb2RlbCA9IG5ldyBGb3JtTW9kZWwoKTtcbiAgaXRlbVR5cGVFbnVtID0gSXRlbVR5cGVFbnVtO1xuICBpdGVtVHlwZXMgPSBJdGVtVHlwZXM7XG4gIHRyYWNrQnlJdGVtSWQgPSB0cmFja0J5SXRlbUlkO1xuICBjdXJyZW50TGFuZyA9ICdlbi1VUyc7XG4gIGNvcHlyaWdodFllYXIgPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgZ2V0IHZpZXdUeXBlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc2hlbGwudmlld1R5cGU7XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRJdGVtKCk6IElJdGVtTW9kZWwgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmNhbnZhc0ludGVyYWN0aW9uLnNlbGVjdGVkSXRlbTtcbiAgfVxuXG4gIGdldCBjYW5VbmRvKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhpc3RvcnlDb29yZGluYXRvci5jYW5VbmRvO1xuICB9XG5cbiAgZ2V0IGNhblJlZG8oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGlzdG9yeUNvb3JkaW5hdG9yLmNhblJlZG87XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG56STE4bjogTnpJMThuU2VydmljZSxcbiAgICBwcml2YXRlIGkxOG5Db25maWc6IEkxOG5Db25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9kYWw6IE56TW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHNoZWxsOiBEZXNpZ25lclNoZWxsU2VydmljZSxcbiAgICBwcml2YXRlIGhpc3RvcnlDb29yZGluYXRvcjogRGVzaWduZXJIaXN0b3J5Q29vcmRpbmF0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2FudmFzSW50ZXJhY3Rpb246IERlc2lnbmVyQ2FudmFzSW50ZXJhY3Rpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgdGFibGVUb29sYmFyOiBEZXNpZ25lclRhYmxlVG9vbGJhclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpdGVtVHJlZVNlcnZpY2U6IERlc2lnbmVySXRlbVRyZWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2FudmFzUmVmcmVzaDogRGVzaWduZXJDYW52YXNSZWZyZXNoU2VydmljZSxcbiAgICBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBOek1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgdmlld2VyU2VydmljZTogRGVzaWduZXJWaWV3ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSByZDogUmVuZGVyZXIyXG4gICkge1xuICAgIHRoaXMuY3VycmVudExhbmcgPSB0aGlzLmkxOG5Db25maWcuZGVmYXVsdExhbmc7XG4gIH1cblxuICBjaGFuZ2VMYW5nKGxhbmc6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudExhbmcgPSBsYW5nO1xuICAgIHRoaXMuaTE4bkNvbmZpZy5hcHBseUxhbmd1YWdlKHRoaXMubnpJMThuLCB0aGlzLnRyYW5zbGF0ZSwgbGFuZyk7XG4gICAgdGhpcy5zeW5jVmlldygpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jYW52YXNJbnRlcmFjdGlvbi5jb25maWd1cmUoe1xuICAgICAgc3luY1ZpZXc6ICgpID0+IHRoaXMuc3luY1ZpZXcoKSxcbiAgICAgIGVtaXRGb3JtQ2hhbmdlOiAoKSA9PiB0aGlzLmVtaXRGb3JtQ2hhbmdlKClcbiAgICB9KTtcbiAgICB0aGlzLmNhbnZhc0ludGVyYWN0aW9uLmJpbmRIb3N0KHRoaXMuZWwubmF0aXZlRWxlbWVudCwgdGhpcy5yZCk7XG4gICAgdGhpcy5pbml0Rm9ybURhdGEoKTtcbiAgICB0aGlzLmNhbnZhc1JlZnJlc2gub25SZWZyZXNoKCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcbiAgb25XaW5kb3dSZXNpemUoKTogdm9pZCB7XG4gICAgdGhpcy5yZXNpemVJdGVtVG9vbCgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIG9uRG9jdW1lbnRLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5zaGVsbC50cnlIYW5kbGVIaXN0b3J5U2hvcnRjdXQoZXZlbnQsIHRoaXMuZWwubmF0aXZlRWxlbWVudCwge1xuICAgICAgdW5kbzogKCkgPT4gdGhpcy51bmRvKCksXG4gICAgICByZWRvOiAoKSA9PiB0aGlzLnJlZG8oKVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydpbml0aWFsRm9ybU1vZGVsJ10gJiYgIWNoYW5nZXNbJ2luaXRpYWxGb3JtTW9kZWwnXS5maXJzdENoYW5nZSkge1xuICAgICAgdGhpcy5pbml0Rm9ybURhdGEoKTtcbiAgICB9XG4gIH1cblxuICBpbml0Rm9ybURhdGEoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtRGF0YSA9IHRoaXMuc2hlbGwuaW5pdGlhbGl6ZUZvcm0odGhpcy5pbml0aWFsRm9ybU1vZGVsLCB0aGlzLmVtYmVkZGVkKTtcbiAgICB0aGlzLmNhbnZhc0ludGVyYWN0aW9uLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgdGhpcy5zeW5jVmlldygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzeW5jVmlldygpOiB2b2lkIHtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0Rm9ybUNoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1DaGFuZ2UuZW1pdCh0aGlzLmZvcm1EYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgaGlzdG9yeVJlc3RvcmVIb29rcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb25Gb3JtRGF0YVJlc3RvcmVkOiAoZm9ybURhdGE6IEZvcm1Nb2RlbCkgPT4ge1xuICAgICAgICB0aGlzLmZvcm1EYXRhID0gZm9ybURhdGE7XG4gICAgICB9LFxuICAgICAgb25TZWxlY3Rpb25DaGFuZ2VkOiAoaXRlbTogSUl0ZW1Nb2RlbCB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgICB0aGlzLmNhbnZhc0ludGVyYWN0aW9uLnNlbGVjdGVkSXRlbSA9IGl0ZW07XG4gICAgICB9LFxuICAgICAgb25TaG93SXRlbVRvb2w6IChpZDogc3RyaW5nKSA9PiB0aGlzLmNhbnZhc0ludGVyYWN0aW9uLnNob3dJdGVtVG9vbCh7IGlkIH0sIHRoaXMuZm9ybURhdGEpLFxuICAgICAgb25IaWRlSXRlbVRvb2w6ICgpID0+IHRoaXMuY2FudmFzSW50ZXJhY3Rpb24uaGlkZUl0ZW1Ub29sKCksXG4gICAgICBvbkZvcm1DaGFuZ2U6ICgpID0+IHRoaXMuZW1pdEZvcm1DaGFuZ2UoKSxcbiAgICAgIG9uU3luY1ZpZXc6ICgpID0+IHRoaXMuc3luY1ZpZXcoKVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHdpdGhIaXN0b3J5UmVjb3JkKGFjdGlvbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuaGlzdG9yeUNvb3JkaW5hdG9yLndpdGhIaXN0b3J5UmVjb3JkKHRoaXMuZm9ybURhdGEsIGFjdGlvbiwgKCkgPT4gdGhpcy5lbWl0Rm9ybUNoYW5nZSgpKTtcbiAgICB0aGlzLnN5bmNWaWV3KCk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZFRhYmxlRWRpdChhY3Rpb246ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLndpdGhIaXN0b3J5UmVjb3JkKGFjdGlvbik7XG4gIH1cblxuICB1bmRvKCk6IHZvaWQge1xuICAgIGNvbnN0IHJlc3RvcmVkID0gdGhpcy5oaXN0b3J5Q29vcmRpbmF0b3IudW5kbyhcbiAgICAgIHRoaXMuZm9ybURhdGEsXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbT8uaWQsXG4gICAgICB0aGlzLmhpc3RvcnlSZXN0b3JlSG9va3MoKVxuICAgICk7XG4gICAgaWYgKHJlc3RvcmVkKSB7XG4gICAgICB0aGlzLmZvcm1EYXRhID0gcmVzdG9yZWQ7XG4gICAgfVxuICB9XG5cbiAgcmVkbygpOiB2b2lkIHtcbiAgICBjb25zdCByZXN0b3JlZCA9IHRoaXMuaGlzdG9yeUNvb3JkaW5hdG9yLnJlZG8oXG4gICAgICB0aGlzLmZvcm1EYXRhLFxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0/LmlkLFxuICAgICAgdGhpcy5oaXN0b3J5UmVzdG9yZUhvb2tzKClcbiAgICApO1xuICAgIGlmIChyZXN0b3JlZCkge1xuICAgICAgdGhpcy5mb3JtRGF0YSA9IHJlc3RvcmVkO1xuICAgIH1cbiAgfVxuXG4gIGVtaXRTYXZlKCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybVNhdmUuZW1pdCh0aGlzLmZvcm1EYXRhKTtcbiAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnN1Y2Nlc3ModGhpcy50cmFuc2xhdGUuaW5zdGFudCgnY29tbW9uLnNhdmUuc3VjY2VzcycpIHx8ICflt7Lkv53lrZgnKTtcbiAgfVxuXG4gIGdldEZvcm1Nb2RlbCgpOiBGb3JtTW9kZWwge1xuICAgIHJldHVybiB0aGlzLmZvcm1EYXRhO1xuICB9XG5cbiAgc2V0Rm9ybVZhbHVlcyh2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG4gICAgYXBwbHlGb3JtVmFsdWVzKHRoaXMuZm9ybURhdGEsIHZhbHVlcyk7XG4gICAgdGhpcy5zeW5jVmlldygpO1xuICB9XG5cbiAgZ2V0SXRlbVR5cGUodHlwZTogSXRlbVR5cGVFbnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbVR5cGVzLmZpbmQocmVzID0+IHJlcy52YWx1ZSA9PSB0eXBlKSA/PyB7IGljb246ICcnLCBsYWJlbDogJycsIHZhbHVlOiB0eXBlIH07XG4gIH1cblxuICBjbGVhckZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5tb2RhbC5jb25maXJtKHtcbiAgICAgIG56VGl0bGU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2NvbW1vbi5jbGVhci5mb3JtJyksXG4gICAgICBuekNvbnRlbnQ6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2NvbW1vbi5jbGVhci5mb3JtLm1lc3NhZ2UnKSxcbiAgICAgIG56T25PazogKCkgPT4ge1xuICAgICAgICB0aGlzLndpdGhIaXN0b3J5UmVjb3JkKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmZvcm1EYXRhLmNoaWxkcmVuID0gW107XG4gICAgICAgICAgdGhpcy5jYW52YXNJbnRlcmFjdGlvbi5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICAgIHRoaXMuY2FudmFzSW50ZXJhY3Rpb24uaGlkZUl0ZW1Ub29sKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY2hhbmdlVG9QQ1ZpZXcoKTogdm9pZCB7XG4gICAgdGhpcy5jaGFuZ2VWaWV3VHlwZSgxKTtcbiAgfVxuXG4gIGNoYW5nZVRvVGFibGV0VmlldygpOiB2b2lkIHtcbiAgICB0aGlzLmNoYW5nZVZpZXdUeXBlKDIpO1xuICB9XG5cbiAgY2hhbmdlVG9Nb2JpbGVWaWV3KCk6IHZvaWQge1xuICAgIHRoaXMuY2hhbmdlVmlld1R5cGUoMyk7XG4gIH1cblxuICBwcml2YXRlIGNoYW5nZVZpZXdUeXBlKHR5cGU6IDEgfCAyIHwgMyk6IHZvaWQge1xuICAgIHRoaXMuc2hlbGwuY2hhbmdlVmlld1R5cGUodHlwZSwgKCkgPT4ge1xuICAgICAgdGhpcy5zeW5jVmlldygpO1xuICAgICAgdGhpcy5yZXNpemVJdGVtVG9vbCgpO1xuICAgIH0pO1xuICB9XG5cbiAgcGxheSgpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMuc2hlbGwub3BlblByZXZpZXcodGhpcy5mb3JtRGF0YSwgdGhpcy52aWV3Q29udGFpbmVyUmVmKTtcbiAgfVxuXG4gIGRyYWdTdGFydChfZXY6IHVua25vd24pOiB2b2lkIHtcbiAgICB0aGlzLmNhbnZhc0ludGVyYWN0aW9uLmRyYWdTdGFydCgpO1xuICB9XG5cbiAgbGVmdFNpZGVEcmFnRW5kKF9ldjogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5jYW52YXNJbnRlcmFjdGlvbi5sZWZ0U2lkZURyYWdFbmQodGhpcy5mb3JtRGF0YSk7XG4gIH1cblxuICBkcm9wKGV2OiBEcmFnT2JqZWN0TW9kZWwpOiB2b2lkIHtcbiAgICB0aGlzLmNhbnZhc0ludGVyYWN0aW9uLmRyb3AoZXYsIHRoaXMuZm9ybURhdGEpO1xuICB9XG5cbiAgZHJhZ092ZXIoZXY6IERyYWdPYmplY3RNb2RlbCk6IHZvaWQge1xuICAgIHRoaXMuY2FudmFzSW50ZXJhY3Rpb24uZHJhZ092ZXIoZXYsIHRoaXMuZm9ybURhdGEpO1xuICB9XG5cbiAgY2xpY2soZXY6IHsgaWQ6IHN0cmluZyB9KTogdm9pZCB7XG4gICAgdGhpcy5jYW52YXNJbnRlcmFjdGlvbi5jbGljayhldiwgdGhpcy5mb3JtRGF0YSk7XG4gIH1cblxuICByZXNpemVJdGVtVG9vbCgpOiB2b2lkIHtcbiAgICB0aGlzLmNhbnZhc0ludGVyYWN0aW9uLnJlc2l6ZUl0ZW1Ub29sKHRoaXMuZm9ybURhdGEpO1xuICB9XG5cbiAgYWRkQ29sSXRlbSgpOiB2b2lkIHtcbiAgICB0aGlzLndpdGhIaXN0b3J5UmVjb3JkKCgpID0+IHRoaXMuaXRlbVRyZWVTZXJ2aWNlLmFkZENvbEZvckNoZWNrZWQodGhpcy5mb3JtRGF0YS5jaGlsZHJlbikpO1xuICB9XG5cbiAgY29weUl0ZW0oKTogdm9pZCB7XG4gICAgdGhpcy53aXRoSGlzdG9yeVJlY29yZCgoKSA9PiB7XG4gICAgICB0aGlzLmZvcm1EYXRhLmNoaWxkcmVuID0gdGhpcy5pdGVtVHJlZVNlcnZpY2UuY29weUNoZWNrZWQodGhpcy5mb3JtRGF0YS5jaGlsZHJlbik7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVzaXplSXRlbVRvb2woKSwgMjApO1xuICAgIH0pO1xuICB9XG5cbiAgZGVsZXRlSXRlbSgpOiB2b2lkIHtcbiAgICB0aGlzLndpdGhIaXN0b3J5UmVjb3JkKCgpID0+IHtcbiAgICAgIHRoaXMuZm9ybURhdGEuY2hpbGRyZW4gPSB0aGlzLml0ZW1UcmVlU2VydmljZS5kZWxldGVDaGVja2VkKHRoaXMuZm9ybURhdGEuY2hpbGRyZW4pO1xuICAgICAgdGhpcy5jYW52YXNJbnRlcmFjdGlvbi5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgdGhpcy5jYW52YXNJbnRlcmFjdGlvbi5oaWRlSXRlbVRvb2woKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlzQ2hlY2tlZChpdGVtSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNhbnZhc0ludGVyYWN0aW9uLmlzQ2hlY2tlZChpdGVtSWQsIHRoaXMuZm9ybURhdGEpO1xuICB9XG5cbiAgY2FuTWVyZ2VEb3duKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRhYmxlVG9vbGJhci5jYW5NZXJnZURvd24odGhpcy5zZWxlY3RlZEl0ZW0gYXMgSVRkTW9kZWwsIHRoaXMuZm9ybURhdGEuY2hpbGRyZW4pO1xuICB9XG5cbiAgY2FuTWVyZ2VSaWdodCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZVRvb2xiYXIuY2FuTWVyZ2VSaWdodCh0aGlzLnNlbGVjdGVkSXRlbSBhcyBJVGRNb2RlbCwgdGhpcy5mb3JtRGF0YS5jaGlsZHJlbik7XG4gIH1cblxuICBjYW5TcGxpdEludG9Db2woKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVUb29sYmFyLmNhblNwbGl0SW50b0NvbCh0aGlzLnNlbGVjdGVkSXRlbSBhcyBJVGRNb2RlbCk7XG4gIH1cblxuICBjYW5TcGxpdEludG9Sb3coKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVUb29sYmFyLmNhblNwbGl0SW50b1Jvdyh0aGlzLnNlbGVjdGVkSXRlbSBhcyBJVGRNb2RlbCk7XG4gIH1cblxuICBhZGRUYWJsZVRySXRlbSgpOiB2b2lkIHtcbiAgICB0aGlzLnRhYmxlVG9vbGJhci5hZGRUYWJsZVRyKHRoaXMuZm9ybURhdGEsIGEgPT4gdGhpcy5yZWNvcmRUYWJsZUVkaXQoYSksICgpID0+IHRoaXMucmVzaXplSXRlbVRvb2woKSk7XG4gIH1cblxuICBhZGRUYWJsZUNvbEl0ZW0oKTogdm9pZCB7XG4gICAgdGhpcy50YWJsZVRvb2xiYXIuYWRkVGFibGVDb2wodGhpcy5mb3JtRGF0YSwgYSA9PiB0aGlzLnJlY29yZFRhYmxlRWRpdChhKSwgKCkgPT4gdGhpcy5yZXNpemVJdGVtVG9vbCgpKTtcbiAgfVxuXG4gIGluc2VydExlZnRDb2woKTogdm9pZCB7XG4gICAgdGhpcy50YWJsZVRvb2xiYXIuaW5zZXJ0TGVmdENvbCh0aGlzLmZvcm1EYXRhLCB0aGlzLnNlbGVjdGVkSXRlbSwgYSA9PiB0aGlzLnJlY29yZFRhYmxlRWRpdChhKSwgKCkgPT4gdGhpcy5yZXNpemVJdGVtVG9vbCgpKTtcbiAgfVxuXG4gIGluc2VydFJpZ2h0Q29sKCk6IHZvaWQge1xuICAgIHRoaXMudGFibGVUb29sYmFyLmluc2VydFJpZ2h0Q29sKHRoaXMuZm9ybURhdGEsIHRoaXMuc2VsZWN0ZWRJdGVtLCBhID0+IHRoaXMucmVjb3JkVGFibGVFZGl0KGEpLCAoKSA9PiB0aGlzLnJlc2l6ZUl0ZW1Ub29sKCkpO1xuICB9XG5cbiAgaW5zZXJ0VXBSb3coKTogdm9pZCB7XG4gICAgdGhpcy50YWJsZVRvb2xiYXIuaW5zZXJ0VXBSb3codGhpcy5mb3JtRGF0YSwgdGhpcy5zZWxlY3RlZEl0ZW0sIGEgPT4gdGhpcy5yZWNvcmRUYWJsZUVkaXQoYSksICgpID0+IHRoaXMucmVzaXplSXRlbVRvb2woKSk7XG4gIH1cblxuICBpbnNlcnREb3duUm93KCk6IHZvaWQge1xuICAgIHRoaXMudGFibGVUb29sYmFyLmluc2VydERvd25Sb3codGhpcy5mb3JtRGF0YSwgdGhpcy5zZWxlY3RlZEl0ZW0sIGEgPT4gdGhpcy5yZWNvcmRUYWJsZUVkaXQoYSksICgpID0+IHRoaXMucmVzaXplSXRlbVRvb2woKSk7XG4gIH1cblxuICBtZXJnZURvd24oKTogdm9pZCB7XG4gICAgdGhpcy50YWJsZVRvb2xiYXIubWVyZ2VEb3duKHRoaXMuZm9ybURhdGEsIHRoaXMuc2VsZWN0ZWRJdGVtLCBhID0+IHRoaXMucmVjb3JkVGFibGVFZGl0KGEpLCAoKSA9PiB0aGlzLnJlc2l6ZUl0ZW1Ub29sKCkpO1xuICB9XG5cbiAgbWVyZ2VSaWdodCgpOiB2b2lkIHtcbiAgICB0aGlzLnRhYmxlVG9vbGJhci5tZXJnZVJpZ2h0KHRoaXMuZm9ybURhdGEsIHRoaXMuc2VsZWN0ZWRJdGVtLCBhID0+IHRoaXMucmVjb3JkVGFibGVFZGl0KGEpLCAoKSA9PiB0aGlzLnJlc2l6ZUl0ZW1Ub29sKCkpO1xuICB9XG5cbiAgc3BsaXRJbnRvQ29sKCk6IHZvaWQge1xuICAgIHRoaXMudGFibGVUb29sYmFyLnNwbGl0SW50b0NvbCh0aGlzLmZvcm1EYXRhLCB0aGlzLnNlbGVjdGVkSXRlbSwgYSA9PiB0aGlzLnJlY29yZFRhYmxlRWRpdChhKSwgKCkgPT4gdGhpcy5yZXNpemVJdGVtVG9vbCgpKTtcbiAgfVxuXG4gIHNwbGl0SW50b1JvdygpOiB2b2lkIHtcbiAgICB0aGlzLnRhYmxlVG9vbGJhci5zcGxpdEludG9Sb3codGhpcy5mb3JtRGF0YSwgdGhpcy5zZWxlY3RlZEl0ZW0sIGEgPT4gdGhpcy5yZWNvcmRUYWJsZUVkaXQoYSksICgpID0+IHRoaXMucmVzaXplSXRlbVRvb2woKSk7XG4gIH1cblxuICBkZWxldGVDdXJyZW50Q29sKCk6IHZvaWQge1xuICAgIHRoaXMudGFibGVUb29sYmFyLmRlbGV0ZUN1cnJlbnRDb2wodGhpcy5mb3JtRGF0YSwgdGhpcy5zZWxlY3RlZEl0ZW0sIGEgPT4gdGhpcy5yZWNvcmRUYWJsZUVkaXQoYSksICgpID0+IHRoaXMucmVzaXplSXRlbVRvb2woKSk7XG4gIH1cblxuICBkZWxldGVDdXJyZW50Um93KCk6IHZvaWQge1xuICAgIHRoaXMudGFibGVUb29sYmFyLmRlbGV0ZUN1cnJlbnRSb3codGhpcy5mb3JtRGF0YSwgdGhpcy5zZWxlY3RlZEl0ZW0sIGEgPT4gdGhpcy5yZWNvcmRUYWJsZUVkaXQoYSksICgpID0+IHRoaXMucmVzaXplSXRlbVRvb2woKSk7XG4gIH1cblxuICBpbXBvcnRKc29uKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy52aWV3ZXJTZXJ2aWNlLm9wZW5JbXBvcnRKc29uKFxuICAgICAgdGhpcy52aWV3Q29udGFpbmVyUmVmLFxuICAgICAgdGhpcy5lbWJlZGRlZCxcbiAgICAgIHZhbHVlID0+IHtcbiAgICAgICAgdGhpcy5mb3JtRGF0YSA9IHRoaXMuaGlzdG9yeUNvb3JkaW5hdG9yLmFwcGx5SW1wb3J0ZWRGb3JtKHZhbHVlLCAoKSA9PiB0aGlzLmVtaXRGb3JtQ2hhbmdlKCkpO1xuICAgICAgICB0aGlzLmNhbnZhc0ludGVyYWN0aW9uLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgIHRoaXMuY2FudmFzSW50ZXJhY3Rpb24uaGlkZUl0ZW1Ub29sKCk7XG4gICAgICAgIHRoaXMuc3luY1ZpZXcoKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgdmlld0pzb24oKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLnZpZXdlclNlcnZpY2Uub3Blbkpzb25WaWV3ZXIodGhpcy5mb3JtRGF0YSk7XG4gIH1cblxuICB2aWV3Q29kZSgpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMudmlld2VyU2VydmljZS5vcGVuQ29kZVZpZXdlcih0aGlzLmZvcm1EYXRhKTtcbiAgfVxuXG4gIGRhdGFDaGFuZ2VFdmVudChldmVudDogdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMuY2FudmFzUmVmcmVzaC5ub3RpZnkoKTtcbiAgICB0aGlzLnN5bmNWaWV3KCk7XG4gICAgaWYgKGV2ZW50ID09PSAnZm9ybVNpemUnKSB7XG4gICAgICB0aGlzLmNhbnZhc0ludGVyYWN0aW9uLmhpZGVJdGVtVG9vbCgpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlc2l6ZUl0ZW1Ub29sKCksIDUwMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVzaXplSXRlbVRvb2woKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxuei1sYXlvdXQgY2xhc3M9XCJhcHAtbGF5b3V0XCIgW2NsYXNzLmFwcC1sYXlvdXQtZW1iZWRkZWRdPVwiZW1iZWRkZWRcIj5cbiAgPG56LWhlYWRlciAqbmdJZj1cIiFlbWJlZGRlZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJhcHAtaGVhZGVyXCI+XG4gICAgICA8ZGl2IG56LXJvdyA+XG4gICAgICAgIDxkaXYgbnotY29sIGNsYXNzPVwiZ3V0dGVyLXJvd1wiIFtuelNwYW5dPVwiMTJcIiA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1sb2dvXCI+XG4gICAgICAgICAgICA8YSBocmVmPVwiaHR0cHM6Ly93d3cuamlubXV0ZWNoLmNuXCIgdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICAgICAgICA8aW1nIHNyYz1cIi9hc3NldHMvam0tbG9nby5zdmdcIiBhbHQ9XCJsb2dvXCI+XG4gICAgICAgICAgICA8aDE+e3sgXCJwcm9qZWN0Lm5hbWVcIiB8IHRyYW5zbGF0ZSB9fTwvaDE+XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IG56LWNvbCBjbGFzcz1cImd1dHRlci1yb3dcIiBzdHlsZT1cInRleHQtYWxpZ246IHJpZ2h0O3BhZGRpbmctcmlnaHQ6IDE2cHhcIiBbbnpTcGFuXT1cIjEyXCI+XG4gICAgICAgICAgPG56LXNwYWNlPlxuICAgICAgICAgICAgPGRpdiAqbnpTcGFjZUl0ZW0+PGE+e3sgJ3Byb2plY3QuZG9jdW1lbnQnIHwgdHJhbnNsYXRlIH19PC9hPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbnpTcGFjZUl0ZW0+XG4gICAgICAgICAgICAgIDxhIG56LWRyb3Bkb3duIFtuekRyb3Bkb3duTWVudV09XCJtZW51XCI+XG4gICAgICAgICAgICAgICAge3sgY3VycmVudExhbmc9PSd6aC1DTic/J+eugOS9k+S4reaWhyc6J0VuZ2xpc2gnfX1cbiAgICAgICAgICAgICAgICA8aSBuei1pY29uIG56VHlwZT1cImRvd25cIj48L2k+XG4gICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPG56LWRyb3Bkb3duLW1lbnUgI21lbnU9XCJuekRyb3Bkb3duTWVudVwiPlxuICAgICAgICAgICAgICAgIDx1bCBuei1tZW51IG56U2VsZWN0YWJsZT5cbiAgICAgICAgICAgICAgICAgIDxsaSBuei1tZW51LWl0ZW0gW256U2VsZWN0ZWRdPVwiY3VycmVudExhbmc9PSd6aC1DTidcIiAoY2xpY2spPVwiY2hhbmdlTGFuZygnemgtQ04nKVwiPueugOS9k+S4reaWhzwvbGk+XG4gICAgICAgICAgICAgICAgICA8bGkgbnotbWVudS1pdGVtIFtuelNlbGVjdGVkXT1cImN1cnJlbnRMYW5nPT0nZW4tVVMnXCIgKGNsaWNrKT1cImNoYW5nZUxhbmcoJ2VuLVVTJylcIj5FbmdsaXNoPC9saT5cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICA8L256LWRyb3Bkb3duLW1lbnU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L256LXNwYWNlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L256LWhlYWRlcj5cbiAgPG56LWxheW91dD5cbiAgICA8bnotc2lkZXIgY2xhc3M9XCJtZW51LWxlZnQtc2lkZWJhclwiXG4gICAgbnpDb2xsYXBzaWJsZVxuICAgIG56V2lkdGg9XCIzMDBweFwiXG4gICAgbnpCcmVha3BvaW50PVwibWRcIlxuICAgIFsobnpDb2xsYXBzZWQpXT1cImlzQ29sbGFwc2VkXCJcbiAgICBbbnpUcmlnZ2VyXT1cIm51bGxcIj5cbiAgICAgIDxhcHAtbGVmdC1zaWRlciAob25MZWZ0U2lkZURyYWdFbmQpPVwibGVmdFNpZGVEcmFnRW5kKCRldmVudClcIj48L2FwcC1sZWZ0LXNpZGVyPlxuICAgIDwvbnotc2lkZXI+XG4gICAgPG56LWNvbnRlbnQ+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGVudC1uYXZpZ2F0aW9uLWJhclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidG9vbGJhci1zZWN0aW9uIHRvb2xiYXItc2VjdGlvbi1sZWZ0XCI+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzPVwiaWNvbiBpY29uLW1pZGRsZSBpY29uLXVuZG9cIlxuICAgICAgICAgICAgW2NsYXNzLmljb24tZGlzYWJsZWRdPVwiIWNhblVuZG9cIlxuICAgICAgICAgICAgbnotdG9vbHRpcFxuICAgICAgICAgICAgW256VG9vbHRpcFRpdGxlXT1cIid0b3BiYXIudW5kbycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInVuZG8oKVwiXG4gICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJpY29uIGljb24tbWlkZGxlIGljb24tcmVkb1wiXG4gICAgICAgICAgICBbY2xhc3MuaWNvbi1kaXNhYmxlZF09XCIhY2FuUmVkb1wiXG4gICAgICAgICAgICBuei10b29sdGlwXG4gICAgICAgICAgICBbbnpUb29sdGlwVGl0bGVdPVwiJ3RvcGJhci5yZWRvJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwicmVkbygpXCJcbiAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRvb2xiYXItc2VjdGlvbiB0b29sYmFyLXNlY3Rpb24tY2VudGVyXCI+XG4gICAgICAgICAgPGEgY2xhc3M9XCJpY29uIGljb24tbWlkZGxlIGljb24tcGxheVwiIG56LXRvb2x0aXAgW256VG9vbHRpcFRpdGxlXT1cIid0b3BiYXIucHJldmlldycgfCB0cmFuc2xhdGVcIiAoY2xpY2spPVwicGxheSgpXCI+PC9hPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRvb2xiYXItc2VjdGlvbiB0b29sYmFyLXNlY3Rpb24tcmlnaHRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9vbGJhci1hY3Rpb25zXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9vbGJhci1hY3Rpb24tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJlbWJlZGRlZFwiIGNsYXNzPVwiaWNvbiBpY29uLW1pZGRsZSBpY29uLXNhdmVcIiBuei10b29sdGlwIFtuelRvb2x0aXBUaXRsZV09XCInY29tbW9uLnNhdmUnIHwgdHJhbnNsYXRlXCIgKGNsaWNrKT1cImVtaXRTYXZlKClcIj48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbiBpY29uLW1pZGRsZSBpY29uLWltcG9ydFwiIG56LXRvb2x0aXAgW256VG9vbHRpcFRpdGxlXT1cIid0b3BiYXIuaW1wb3J0Lmpzb24nIHwgdHJhbnNsYXRlXCIgKGNsaWNrKT1cImltcG9ydEpzb24oKVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZW1iZWRkZWRcIiBjbGFzcz1cImljb24gaWNvbi1taWRkbGUgaWNvbi1qc29uXCIgbnotdG9vbHRpcCBbbnpUb29sdGlwVGl0bGVdPVwiJ3RvcGJhci5nZW5lcmF0ZS5qc29uJyB8IHRyYW5zbGF0ZVwiIChjbGljayk9XCJ2aWV3SnNvbigpXCI+PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFlbWJlZGRlZFwiIGNsYXNzPVwiaWNvbiBpY29uLW1pZGRsZSBpY29uLWNvZGVcIiBuei10b29sdGlwIFtuelRvb2x0aXBUaXRsZV09XCIndG9wYmFyLmdlbmVyYXRlLmNvZGUnIHwgdHJhbnNsYXRlXCIgKGNsaWNrKT1cInZpZXdDb2RlKClcIj48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbiBpY29uLW1pZGRsZSBpY29uLWRlbGV0ZVwiIG56LXRvb2x0aXAgW256VG9vbHRpcFRpdGxlXT1cIid0b3BiYXIuY2xlYXIuZm9ybScgfCB0cmFuc2xhdGVcIiAoY2xpY2spPVwiY2xlYXJGb3JtKClcIj48L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxuei1kaXZpZGVyIG56VHlwZT1cInZlcnRpY2FsXCIgY2xhc3M9XCJ0b29sYmFyLWRpdmlkZXJcIj48L256LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9vbGJhci1hY3Rpb24tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uIGljb24tbWlkZGxlIHt7dmlld1R5cGU9PTE/J2ljb24tcGMtY2hlY2tlZCc6J2ljb24tcGMnfX1cIiBuei10b29sdGlwIFtuelRvb2x0aXBUaXRsZV09XCIndG9wYmFyLnBjLnZpZXcnIHwgdHJhbnNsYXRlXCIgKGNsaWNrKT1cImNoYW5nZVRvUENWaWV3KClcIj48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbiBpY29uLW1pZGRsZSB7e3ZpZXdUeXBlPT0yPydpY29uLXRhYmxldC1jaGVja2VkJzonaWNvbi10YWJsZXQnfX1cIiBuei10b29sdGlwIFtuelRvb2x0aXBUaXRsZV09XCIndG9wYmFyLnRhYmxldC52aWV3JyB8IHRyYW5zbGF0ZVwiIChjbGljayk9XCJjaGFuZ2VUb1RhYmxldFZpZXcoKVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uIGljb24tbWlkZGxlIHt7dmlld1R5cGU9PTM/J2ljb24tbW9iaWxlLWNoZWNrZWQnOidpY29uLW1vYmlsZSd9fVwiIG56LXRvb2x0aXAgW256VG9vbHRpcFRpdGxlXT1cIid0b3BiYXIubW9iaWxlLnZpZXcnIHwgdHJhbnNsYXRlXCIgKGNsaWNrKT1cImNoYW5nZVRvTW9iaWxlVmlldygpXCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IFtjbGFzc109XCInaW5uZXItY29udGVudCdcIiA+XG4gICAgICAgIDxkaXYgaWQ9XCJkZXNpZ25Db250ZW50XCIgW2F0dHIuZGF0YS1pdGVtLWlkXT1cIidkZXNpZ25Db250ZW50J1wiIFtjbGFzc109XCJ2aWV3VHlwZT09MT8naW5uZXItcGMtY29udGVudCc6KHZpZXdUeXBlPT0yPydpbm5lci10YWJsZXQtY29udGVudCc6J2lubmVyLW1vYmlsZS1jb250ZW50JylcIiBcbiAgICAgICAgW2lzRHJvcHBhYmxlXT1cInRydWVcIlxuICAgICAgICAob25EcmFnT3ZlckV2ZW50KT1cImRyYWdPdmVyKCRldmVudClcIlxuICAgICAgICAob25Ecm9wRXZlbnQpPVwiZHJvcCgkZXZlbnQpXCI+XG4gICAgICAgICAgPGRpdiBpZD1cImZvcm0taXRlbS1tYXNrXCIgW2lzRHJvcHBhYmxlXT1cInRydWVcIiAob25Ecm9wRXZlbnQpPVwiZHJvcCgkZXZlbnQpXCIgPjwvZGl2PlxuICAgICAgICAgIDxuei1zcGFjZSBpZD1cIml0ZW0tdG9vbFwiIFthdHRyLmRhdGEtaXRlbS1pZF09XCInaXRlbS10b29sJ1wiIGNsYXNzPVwiaXRlbS10b29sXCIgbnpTaXplPVwic21hbGxcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZEl0ZW0/LnR5cGUgPT0gaXRlbVR5cGVFbnVtLlRhYmxlXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gaWQ9XCJhZGRUYWJsZVRySXRlbUJ0blwiICpuelNwYWNlSXRlbSBuei1idXR0b24gbnpUeXBlPVwicHJpbWFyeVwiIG56U2l6ZT1cInNtYWxsXCIgbnpTaGFwZT1cImNpcmNsZVwiIChjbGljayk9XCJhZGRUYWJsZVRySXRlbSgpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uLWJ1dHRvbiBpY29uLXRhYmxlLXRyXCI+PC9zcGFuPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBpZD1cImFkZFRhYmxlQ29sSXRlbUJ0blwiICpuelNwYWNlSXRlbSBuei1idXR0b24gbnpUeXBlPVwicHJpbWFyeVwiIG56U2l6ZT1cInNtYWxsXCIgbnpTaGFwZT1cImNpcmNsZVwiIChjbGljayk9XCJhZGRUYWJsZUNvbEl0ZW0oKVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbi1idXR0b24gaWNvbi10YWJsZS1jb2xcIj48L3NwYW4+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRJdGVtPy50eXBlID09IGl0ZW1UeXBlRW51bS5HcmlkXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gaWQ9XCJhZGRDb2xJdGVtQnRuXCIgKm56U3BhY2VJdGVtIG56LWJ1dHRvbiBuelR5cGU9XCJwcmltYXJ5XCIgbnpTaXplPVwic21hbGxcIiBuelNoYXBlPVwiY2lyY2xlXCIgKGNsaWNrKT1cImFkZENvbEl0ZW0oKVwiPlxuICAgICAgICAgICAgICAgIDxpIG56LWljb24gbnpUeXBlPVwicGx1c1wiPjwvaT5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZEl0ZW0/LnR5cGUgPT0gaXRlbVR5cGVFbnVtLlRkXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gaWQ9XCJ0ZE1lbnVcIiAqbnpTcGFjZUl0ZW0gbnotYnV0dG9uIG56LWRyb3Bkb3duIFtuekRyb3Bkb3duTWVudV09XCJtZW51XCIgbnpUeXBlPVwicHJpbWFyeVwiIG56U2l6ZT1cInNtYWxsXCIgbnpTaGFwZT1cImNpcmNsZVwiPlxuICAgICAgICAgICAgICAgIDxpIG56LWljb24gbnpUeXBlPVwic2V0dGluZ1wiPjwvaT5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxuei1kcm9wZG93bi1tZW51ICNtZW51PVwibnpEcm9wZG93bk1lbnVcIj5cbiAgICAgICAgICAgICAgICA8dWwgbnotbWVudT5cbiAgICAgICAgICAgICAgICAgIDxsaSBuei1tZW51LWl0ZW0gKGNsaWNrKT1cImluc2VydExlZnRDb2woKVwiPnt7ICd0YWJsZS5tZW51Lmluc2VydC5sZWZ0JyB8IHRyYW5zbGF0ZSB9fTwvbGk+XG4gICAgICAgICAgICAgICAgICA8bGkgbnotbWVudS1pdGVtIChjbGljayk9XCJpbnNlcnRSaWdodENvbCgpXCI+e3sgJ3RhYmxlLm1lbnUuaW5zZXJ0LnJpZ2h0JyB8IHRyYW5zbGF0ZSB9fTwvbGk+XG4gICAgICAgICAgICAgICAgICA8bGkgbnotbWVudS1pdGVtIChjbGljayk9XCJpbnNlcnRVcFJvdygpXCI+e3sgJ3RhYmxlLm1lbnUuaW5zZXJ0LnVwJyB8IHRyYW5zbGF0ZSB9fTwvbGk+XG4gICAgICAgICAgICAgICAgICA8bGkgbnotbWVudS1pdGVtIChjbGljayk9XCJpbnNlcnREb3duUm93KClcIj57eyAndGFibGUubWVudS5pbnNlcnQuZG93bicgfCB0cmFuc2xhdGUgfX08L2xpPlxuICAgICAgICAgICAgICAgICAgPGxpIG56LW1lbnUtZGl2aWRlcj48L2xpPlxuICAgICAgICAgICAgICAgICAgPGxpIG56LW1lbnUtaXRlbSAoY2xpY2spPVwibWVyZ2VEb3duKClcIiBbbnpEaXNhYmxlZF09XCJjYW5NZXJnZURvd24oKVwiPnt7ICd0YWJsZS5tZW51Lm1lcmdlLmRvd24nIHwgdHJhbnNsYXRlIH19PC9saT5cbiAgICAgICAgICAgICAgICAgIDxsaSBuei1tZW51LWl0ZW0gKGNsaWNrKT1cIm1lcmdlUmlnaHQoKVwiIFtuekRpc2FibGVkXT1cImNhbk1lcmdlUmlnaHQoKVwiPnt7ICd0YWJsZS5tZW51Lm1lcmdlLnJpZ2h0JyB8IHRyYW5zbGF0ZSB9fTwvbGk+XG4gICAgICAgICAgICAgICAgICA8bGkgbnotbWVudS1kaXZpZGVyPjwvbGk+XG4gICAgICAgICAgICAgICAgICA8bGkgbnotbWVudS1pdGVtIChjbGljayk9XCJzcGxpdEludG9Db2woKVwiIFtuekRpc2FibGVkXT1cImNhblNwbGl0SW50b0NvbCgpXCI+e3sgJ3RhYmxlLm1lbnUuc3BsaXQuY29sJyB8IHRyYW5zbGF0ZSB9fTwvbGk+XG4gICAgICAgICAgICAgICAgICA8bGkgbnotbWVudS1pdGVtIChjbGljayk9XCJzcGxpdEludG9Sb3coKVwiIFtuekRpc2FibGVkXT1cImNhblNwbGl0SW50b1JvdygpXCI+e3sgJ3RhYmxlLm1lbnUuc3BsaXQucm93JyB8IHRyYW5zbGF0ZSB9fTwvbGk+XG4gICAgICAgICAgICAgICAgICA8bGkgbnotbWVudS1kaXZpZGVyPjwvbGk+XG4gICAgICAgICAgICAgICAgICA8bGkgbnotbWVudS1pdGVtIChjbGljayk9XCJkZWxldGVDdXJyZW50Q29sKClcIj57eyAndGFibGUubWVudS5kZWxldGUuY29sJyB8IHRyYW5zbGF0ZSB9fTwvbGk+XG4gICAgICAgICAgICAgICAgICA8bGkgbnotbWVudS1pdGVtIChjbGljayk9XCJkZWxldGVDdXJyZW50Um93KClcIj57eyAndGFibGUubWVudS5kZWxldGUucm93JyB8IHRyYW5zbGF0ZSB9fTwvbGk+XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgPC9uei1kcm9wZG93bi1tZW51PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRJdGVtPy50eXBlICE9IGl0ZW1UeXBlRW51bS5UZFwiPlxuICAgICAgICAgICAgICA8YnV0dG9uIGlkPVwiY29weUl0ZW1CdG5cIiAqbnpTcGFjZUl0ZW0gbnotYnV0dG9uIG56VHlwZT1cInByaW1hcnlcIiBuelNpemU9XCJzbWFsbFwiIG56U2hhcGU9XCJjaXJjbGVcIiAoY2xpY2spPVwiY29weUl0ZW0oKVwiPlxuICAgICAgICAgICAgICAgIDxpIG56LWljb24gbnpUeXBlPVwiY29weVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gaWQ9XCJkZWxldGVJdGVtQnRuXCIgKm56U3BhY2VJdGVtIG56LWJ1dHRvbiBuelR5cGU9XCJwcmltYXJ5XCIgbnpTaXplPVwic21hbGxcIiBuelNoYXBlPVwiY2lyY2xlXCIgKGNsaWNrKT1cImRlbGV0ZUl0ZW0oKVwiPlxuICAgICAgICAgICAgICAgIDxpIG56LWljb24gbnpUeXBlPVwiZGVsZXRlXCI+PC9pPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbnotc3BhY2U+XG4gICAgICAgICAgPGZvcm0gbnotZm9ybSBbbnpMYXlvdXRdPVwiZm9ybURhdGEubGF5b3V0XCIgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmb3JtRGF0YS5jaGlsZHJlbjsgdHJhY2tCeTogdHJhY2tCeUl0ZW1JZFwiPlxuICAgICAgICAgICAgICA8em9ycm8taXRlbSBbZGF0YV09XCJpdGVtXCIgW2Zvcm1EYXRhXT1cImZvcm1EYXRhXCJcbiAgICAgICAgICAgICAgICBbdmlld1R5cGVdPVwidmlld1R5cGVcIlxuICAgICAgICAgICAgICAgIFtpc0NoZWNrZWRdPVwiaXNDaGVja2VkKGl0ZW0uaWQpXCJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZElkXT1cIml0ZW0uaWRcIlxuICAgICAgICAgICAgICAgIChvbkRyYWdPdmVyRXZlbnQpPVwiZHJhZ092ZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKG9uRHJvcEV2ZW50KT1cImRyb3AoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKG9uQ2xpY2tFdmVudCk9XCJjbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAob25EcmFnU3RhcnRFdmVudCk9XCJkcmFnU3RhcnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKG9uRHJhZ0VuZEV2ZW50KT1cImxlZnRTaWRlRHJhZ0VuZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbaXNDcmVhdGVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICA+PC96b3Jyby1pdGVtPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9mb3JtPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbnotY29udGVudD5cbiAgICA8bnotc2lkZXIgY2xhc3M9XCJtZW51LXJpZ2h0LXNpZGViYXJcIiBcbiAgICBuekNvbGxhcHNpYmxlXG4gICAgbnpXaWR0aD1cIjMwMHB4XCJcbiAgICBuekJyZWFrcG9pbnQ9XCJtZFwiXG4gICAgWyhuekNvbGxhcHNlZCldPVwiaXNDb2xsYXBzZWRcIlxuICAgIFtuelRyaWdnZXJdPVwibnVsbFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnQtbmF2aWdhdGlvbi1iYXIgY29udGVudC1uYXZpZ2F0aW9uLWJhci0tc2lkZWJhclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidG9vbGJhci1zZWN0aW9uIHRvb2xiYXItc2VjdGlvbi1sZWZ0IHRvb2xiYXItc2VjdGlvbi1ncm93XCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uIGljb24te3sgISFzZWxlY3RlZEl0ZW0/Z2V0SXRlbVR5cGUoc2VsZWN0ZWRJdGVtLnR5cGUpLmljb246JycgfX1cIj48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b29sYmFyLWxhYmVsXCI+e3sgISFzZWxlY3RlZEl0ZW0/KGdldEl0ZW1UeXBlKHNlbGVjdGVkSXRlbS50eXBlKS5sYWJlbCB8IHRyYW5zbGF0ZSk6JycgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwidG9vbGJhci1zZWN0aW9uIHRvb2xiYXItc2VjdGlvbi1yaWdodFwiPlxuICAgICAgICAgIDxidXR0b24gbnotYnV0dG9uIG56LXBvcG92ZXIgbnpUeXBlPVwiZGVmYXVsdFwiIG56U2l6ZT1cInNtYWxsXCIgbnpQb3BvdmVyVGl0bGU9XCJ7eyAncmlnaHRzaWRlci5mb3JtLnRpdGxlJyB8IHRyYW5zbGF0ZSB9fVwiIFtuelBvcG92ZXJDb250ZW50XT1cImZvcm1TZXR0aW5nXCIgbnpQb3BvdmVyVHJpZ2dlcj1cImhvdmVyXCIgbnpQb3BvdmVyUGxhY2VtZW50PVwiYm90dG9tUmlnaHRcIj5cbiAgICAgICAgICAgIHt7ICdyaWdodHNpZGVyLmZvcm0udGl0bGUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZWxlbWVudC1wcm9wZXJ0aWVzXCI+XG4gICAgICAgIDxlbGVtZW50LXByb3BlcnRpZXMgKm5nSWY9XCIhIXNlbGVjdGVkSXRlbVwiIFtkYXRhXT1cInNlbGVjdGVkSXRlbVwiIFt2aWV3VHlwZV09XCJ2aWV3VHlwZVwiIChkYXRhQ2hhbmdlRXZlbnQpPVwiZGF0YUNoYW5nZUV2ZW50KCRldmVudClcIj48L2VsZW1lbnQtcHJvcGVydGllcz5cbiAgICAgICAgPG56LWVtcHR5ICpuZ0lmPVwiIXNlbGVjdGVkSXRlbVwiPjwvbnotZW1wdHk+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjZm9ybVNldHRpbmc+XG4gICAgICAgIDxmb3JtLXByb3BlcnRpZXMgW2Zvcm1EYXRhXT1cImZvcm1EYXRhXCIgKGRhdGFDaGFuZ2VFdmVudCk9XCJkYXRhQ2hhbmdlRXZlbnQoJGV2ZW50KVwiPjwvZm9ybS1wcm9wZXJ0aWVzPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L256LXNpZGVyPlxuICA8L256LWxheW91dD5cbiAgPG56LWZvb3Rlcj5cbiAgICA8ZGl2IGNsYXNzPVwiYXBwLWZvb3RlclwiPlxuICAgICAge3sgJ2NvcHlyaWdodCcgfCB0cmFuc2xhdGU6eyB5ZWFyOiBjb3B5cmlnaHRZZWFyIH0gfX1cbiAgICA8L2Rpdj5cbiAgPC9uei1mb290ZXI+XG48L256LWxheW91dD5cblxuIl19
|