@acorex/platform 18.0.15 → 18.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/common/lib/schema/entity/entity.class.d.ts +2 -1
- package/core/index.d.ts +1 -0
- package/core/utils/data-conditioner.d.ts +6 -0
- package/esm2022/common/lib/schema/entity/entity.class.mjs +1 -1
- package/esm2022/common/lib/schema/widget/widget-renderer.mjs +3 -3
- package/esm2022/common/lib/workflows/common.workflow.mjs +1 -1
- package/esm2022/core/index.mjs +2 -1
- package/esm2022/core/utils/data-conditioner.mjs +138 -0
- package/esm2022/layout/builder/lib/builder/widget-registery.service.mjs +2 -2
- package/esm2022/layout/builder/lib/builder/widget-renderer.component.mjs +3 -3
- package/esm2022/layout/builder/lib/builder/widget.types.mjs +10 -8
- package/esm2022/layout/designer/index.mjs +2 -7
- package/esm2022/layout/designer/lib/{helpers → designer/components}/add-widget-button/add-widget-button.component.mjs +2 -2
- package/esm2022/layout/designer/lib/designer/components/board/board.component.mjs +112 -0
- package/esm2022/layout/designer/lib/designer/components/breadcrumbs/breadcrumbs.component.mjs +64 -0
- package/esm2022/layout/designer/lib/designer/components/drawers/data-sources/data-sources.component.mjs +32 -0
- package/esm2022/layout/designer/lib/designer/components/drawers/history/history.component.mjs +30 -0
- package/esm2022/layout/designer/lib/designer/components/drawers/outline/outline.component.mjs +61 -0
- package/esm2022/layout/designer/lib/designer/components/drawers/pages/pages.component.mjs +28 -0
- package/esm2022/layout/designer/lib/designer/components/grid-drawer/grid-drawer.component.mjs +82 -0
- package/esm2022/layout/designer/lib/designer/components/header-menu/header-menu.component.mjs +24 -0
- package/esm2022/layout/designer/lib/{widget-picker → designer/components/widget-picker}/widget-picker.component.mjs +1 -1
- package/esm2022/layout/designer/lib/designer/designer.component.mjs +28 -17
- package/esm2022/layout/designer/lib/designer/index.mjs +8 -0
- package/esm2022/layout/designer/lib/designer/shared/command.mjs +185 -0
- package/esm2022/layout/designer/lib/designer/shared/designer-connector.service.mjs +10 -0
- package/esm2022/layout/designer/lib/designer/shared/designer.service.mjs +488 -0
- package/esm2022/layout/designer/lib/designer/shared/designer.typs.mjs +2 -0
- package/esm2022/layout/designer/lib/designer/shared/drawer-content/drawer-content.component.mjs +16 -0
- package/esm2022/layout/designer/lib/designer/shared/widget-designer-renderer.directive.mjs +224 -0
- package/esm2022/layout/designer/lib/property-viewer/widget-property-viewer.component.mjs +17 -5
- package/esm2022/layout/entity/lib/entity-master-create.viewmodel.mjs +2 -5
- package/esm2022/layout/entity/lib/entity-registery.service.mjs +3 -3
- package/esm2022/layout/entity/lib/entity.module.mjs +4 -2
- package/esm2022/layout/entity/lib/widgets/lookup-widget/lookup-widget-view.component.mjs +7 -4
- package/esm2022/layout/entity/lib/widgets/lookup-widget/lookup-widget.config.mjs +2 -1
- package/esm2022/layout/entity/lib/workflows/create-entity.workflow.mjs +4 -3
- package/esm2022/layout/entity/lib/workflows/delete-entity.workflow.mjs +10 -11
- package/esm2022/layouts/lib/admin/entity-layout/entity-create-view/entity-create-view.component.mjs +3 -2
- package/esm2022/layouts/lib/admin/entity-layout/entity-details-view/detail-view.config.mjs +2 -3
- package/esm2022/layouts/lib/admin/entity-layout/entity-list-view/entity-list-view.component.mjs +3 -3
- package/esm2022/layouts/lib/admin/entity-layout/index.mjs +2 -2
- package/esm2022/layouts/lib/admin/entity-layout/workflows/show-list.workflow.mjs +2 -2
- package/esm2022/themes/default/index.mjs +3 -2
- package/esm2022/themes/default/lib/entity-reuse.strategy.mjs +2 -4
- package/esm2022/themes/default/lib/layouts/entity-layouts/entity-detail-list-view/entity-detail-list-view.component.mjs +41 -18
- package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-list-view/entity-master-list-view.component.mjs +4 -4
- package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-single-view/comments/comment-list-view.component.mjs +123 -0
- package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-single-view/comments/comments.service.mjs +3 -0
- package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-single-view/entity-master-single-view.component.mjs +22 -23
- package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-single-view/overview/entity-single-overview.component.mjs +68 -0
- package/esm2022/themes/default/lib/layouts/entity-layouts/index.mjs +2 -0
- package/esm2022/widgets/lib/properties/data-source.props.mjs +21 -0
- package/esm2022/widgets/lib/properties/editors.props.mjs +76 -3
- package/esm2022/widgets/lib/properties/general.props.mjs +31 -3
- package/esm2022/widgets/lib/properties/index.mjs +2 -1
- package/esm2022/widgets/lib/properties/table-column.props.mjs +18 -3
- package/esm2022/widgets/lib/widgets/actions/button/button-widget-designer.component.mjs +23 -7
- package/esm2022/widgets/lib/widgets/actions/button/button-widget-view.component.mjs +24 -8
- package/esm2022/widgets/lib/widgets/actions/button/button-widget.config.mjs +5 -2
- package/esm2022/widgets/lib/widgets/advance/file/file-box-widget-column.component.mjs +3 -3
- package/esm2022/widgets/lib/widgets/advance/file/file-box-widget.config.mjs +2 -1
- package/esm2022/widgets/lib/widgets/advance/gallery/gallery-widget-column.component.mjs +3 -3
- package/esm2022/widgets/lib/widgets/advance/gallery/gallery-widget.config.mjs +2 -1
- package/esm2022/widgets/lib/widgets/advance/map/index.mjs +1 -4
- package/esm2022/widgets/lib/widgets/advance/map/map-box-widget-edit.component.mjs +50 -158
- package/esm2022/widgets/lib/widgets/advance/map/map-box-widget-view.component.mjs +40 -53
- package/esm2022/widgets/lib/widgets/advance/map/map-box-widget.config.mjs +95 -11
- package/esm2022/widgets/lib/widgets/advance/qrcode/qrcode-widget-view.component.mjs +11 -11
- package/esm2022/widgets/lib/widgets/advance/qrcode/qrcode-widget.config.mjs +8 -7
- package/esm2022/widgets/lib/widgets/advance/signature/signature-pad-widget-column.component.mjs +3 -3
- package/esm2022/widgets/lib/widgets/advance/signature/signature-pad-widget.config.mjs +4 -6
- package/esm2022/widgets/lib/widgets/editors/checkbox/checkbox-widget-column.component.mjs +6 -6
- package/esm2022/widgets/lib/widgets/editors/checkbox/checkbox-widget.config.mjs +2 -2
- package/esm2022/widgets/lib/widgets/editors/color/color-box-widget.config.mjs +2 -1
- package/esm2022/widgets/lib/widgets/editors/contact/contact-widget-edit.component.mjs +23 -14
- package/esm2022/widgets/lib/widgets/editors/contact/contact-widget-view.component.mjs +58 -58
- package/esm2022/widgets/lib/widgets/editors/contact/contact-widget.config.mjs +4 -3
- package/esm2022/widgets/lib/widgets/editors/contact/index.mjs +3 -4
- package/esm2022/widgets/lib/widgets/editors/date-time/date-time-box-widget-column.component.mjs +1 -1
- package/esm2022/widgets/lib/widgets/editors/date-time/date-time-box-widget-edit.component.mjs +63 -41
- package/esm2022/widgets/lib/widgets/editors/date-time/date-time-box-widget-view.component.mjs +14 -20
- package/esm2022/widgets/lib/widgets/editors/date-time/date-time-box-widget.config.mjs +2 -1
- package/esm2022/widgets/lib/widgets/editors/email/email-box-widget.config.mjs +2 -1
- package/esm2022/widgets/lib/widgets/editors/large-text/large-text-widget-column.component.mjs +1 -1
- package/esm2022/widgets/lib/widgets/editors/large-text/large-text-widget-edit.component.mjs +1 -1
- package/esm2022/widgets/lib/widgets/editors/large-text/large-text-widget-view.component.mjs +1 -1
- package/esm2022/widgets/lib/widgets/editors/large-text/large-text-widget.config.mjs +6 -4
- package/esm2022/widgets/lib/widgets/editors/link/link-widget.config.mjs +2 -1
- package/esm2022/widgets/lib/widgets/editors/number/number-box-widget-edit.component.mjs +49 -57
- package/esm2022/widgets/lib/widgets/editors/number/number-box-widget-view.component.mjs +11 -17
- package/esm2022/widgets/lib/widgets/editors/number/number-box-widget.config.mjs +4 -2
- package/esm2022/widgets/lib/widgets/editors/password/password-box-widget-column.component.mjs +44 -7
- package/esm2022/widgets/lib/widgets/editors/password/password-box-widget-edit.component.mjs +1 -1
- package/esm2022/widgets/lib/widgets/editors/password/password-box-widget-view.component.mjs +11 -5
- package/esm2022/widgets/lib/widgets/editors/password/password-box-widget.config.mjs +2 -1
- package/esm2022/widgets/lib/widgets/editors/phone/phone-box-widget.config.mjs +2 -1
- package/esm2022/widgets/lib/widgets/editors/rich-text/rich-text-widget-edit.component.mjs +33 -15
- package/esm2022/widgets/lib/widgets/editors/rich-text/rich-text-widget.config.mjs +5 -4
- package/esm2022/widgets/lib/widgets/editors/select/select-box-widget-edit.component.mjs +14 -2
- package/esm2022/widgets/lib/widgets/editors/select/select-box-widget.config.mjs +2 -1
- package/esm2022/widgets/lib/widgets/editors/selection-list/index.mjs +2 -1
- package/esm2022/widgets/lib/widgets/editors/selection-list/selection-list-widget-column.component.mjs +20 -6
- package/esm2022/widgets/lib/widgets/editors/selection-list/selection-list-widget-designer.component.mjs +75 -0
- package/esm2022/widgets/lib/widgets/editors/selection-list/selection-list-widget-edit.component.mjs +13 -10
- package/esm2022/widgets/lib/widgets/editors/selection-list/selection-list-widget-view.component.mjs +2 -3
- package/esm2022/widgets/lib/widgets/editors/selection-list/selection-list-widget.config.mjs +15 -2
- package/esm2022/widgets/lib/widgets/editors/text/text-box-widget.config.mjs +5 -4
- package/esm2022/widgets/lib/widgets/editors/toggle/toggle-widget.config.mjs +2 -1
- package/esm2022/widgets/lib/widgets/layout/block/block-widget.config.mjs +2 -2
- package/esm2022/widgets/lib/widgets/layout/document/document-widget.config.mjs +2 -2
- package/esm2022/widgets/lib/widgets/layout/form-field/form-field-widget.config.mjs +2 -2
- package/esm2022/widgets/lib/widgets/layout/grid/grid-widget.config.mjs +2 -2
- package/esm2022/widgets/lib/widgets/layout/grid-item/grid-item-widget.config.mjs +2 -2
- package/esm2022/widgets/lib/widgets/layout/grid-row/grid-row-widget.config.mjs +2 -2
- package/esm2022/widgets/lib/widgets/layout/page/page-widget.config.mjs +7 -3
- package/esm2022/widgets/lib/widgets/layout/repeater/repeater-widget.config.mjs +2 -2
- package/esm2022/widgets/lib/widgets/layout/text-block/text-block-widget.config.mjs +2 -1
- package/esm2022/widgets/lib/widgets.module.mjs +16 -10
- package/fesm2022/acorex-platform-common.mjs +1 -1
- package/fesm2022/acorex-platform-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-core.mjs +139 -1
- package/fesm2022/acorex-platform-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-builder.mjs +12 -10
- package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
- package/fesm2022/{acorex-platform-layout-designer-preview.component-9dJh_ulU.mjs → acorex-platform-layout-designer-preview.component-CaRHf4x_.mjs} +3 -3
- package/fesm2022/{acorex-platform-layout-designer-preview.component-9dJh_ulU.mjs.map → acorex-platform-layout-designer-preview.component-CaRHf4x_.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-layout-designer-widget-picker.component-DXgcm-fP.mjs → acorex-platform-layout-designer-widget-picker.component-BZryrCyh.mjs} +4 -4
- package/fesm2022/acorex-platform-layout-designer-widget-picker.component-BZryrCyh.mjs.map +1 -0
- package/fesm2022/acorex-platform-layout-designer.mjs +438 -282
- package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity.mjs +20 -17
- package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
- package/fesm2022/{acorex-platform-layouts-entity-create-view.component-C2pYReAo.mjs → acorex-platform-layouts-entity-create-view.component-CPGbLM4C.mjs} +3 -2
- package/fesm2022/acorex-platform-layouts-entity-create-view.component-CPGbLM4C.mjs.map +1 -0
- package/fesm2022/acorex-platform-layouts.mjs +1633 -1633
- package/fesm2022/acorex-platform-layouts.mjs.map +1 -1
- package/fesm2022/{acorex-platform-themes-default-entity-master-create-view.component-BGT0puX_.mjs → acorex-platform-themes-default-entity-master-create-view.component-Q8eTfAVx.mjs} +7 -7
- package/fesm2022/{acorex-platform-themes-default-entity-master-create-view.component-BGT0puX_.mjs.map → acorex-platform-themes-default-entity-master-create-view.component-Q8eTfAVx.mjs.map} +1 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-CWXJxLS0.mjs +281 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-CWXJxLS0.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-default-entity-master-modify-view.component-BHo31YVi.mjs → acorex-platform-themes-default-entity-master-modify-view.component-BijYXMme.mjs} +7 -7
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-BijYXMme.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-CGhOE3jO.mjs +357 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-CGhOE3jO.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-default-error-401.component-zyAGwz2j.mjs → acorex-platform-themes-default-error-401.component-D5QQ2HAv.mjs} +3 -3
- package/fesm2022/{acorex-platform-themes-default-error-401.component-zyAGwz2j.mjs.map → acorex-platform-themes-default-error-401.component-D5QQ2HAv.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-themes-default-error-404.component-DcxQ89LL.mjs → acorex-platform-themes-default-error-404.component-DSY_D3Iq.mjs} +3 -3
- package/fesm2022/{acorex-platform-themes-default-error-404.component-DcxQ89LL.mjs.map → acorex-platform-themes-default-error-404.component-DSY_D3Iq.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-themes-default-error-offline.component-BMB6D5Cx.mjs → acorex-platform-themes-default-error-offline.component-B6wSkMdd.mjs} +3 -3
- package/fesm2022/{acorex-platform-themes-default-error-offline.component-BMB6D5Cx.mjs.map → acorex-platform-themes-default-error-offline.component-B6wSkMdd.mjs.map} +1 -1
- package/fesm2022/acorex-platform-themes-default.mjs +37 -434
- package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
- package/fesm2022/{acorex-platform-widgets-button-widget-designer.component-C0S_HJkl.mjs → acorex-platform-widgets-button-widget-designer.component-COvuxaTt.mjs} +23 -7
- package/fesm2022/acorex-platform-widgets-button-widget-designer.component-COvuxaTt.mjs.map +1 -0
- package/fesm2022/{acorex-platform-widgets-checkbox-widget-column.component-BzNhzB9y.mjs → acorex-platform-widgets-checkbox-widget-column.component-j1jG8pCr.mjs} +6 -6
- package/fesm2022/acorex-platform-widgets-checkbox-widget-column.component-j1jG8pCr.mjs.map +1 -0
- package/fesm2022/{acorex-platform-widgets-checkbox-widget-designer.component-DfUr_DMU.mjs → acorex-platform-widgets-checkbox-widget-designer.component-DAGbdSTk.mjs} +4 -4
- package/fesm2022/{acorex-platform-widgets-checkbox-widget-designer.component-DfUr_DMU.mjs.map → acorex-platform-widgets-checkbox-widget-designer.component-DAGbdSTk.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-widgets-color-box-widget-designer.component-BF24k3Y-.mjs → acorex-platform-widgets-color-box-widget-designer.component-Bb3aXCNZ.mjs} +4 -4
- package/fesm2022/acorex-platform-widgets-color-box-widget-designer.component-Bb3aXCNZ.mjs.map +1 -0
- package/fesm2022/acorex-platform-widgets-contact-widget-filter.component-GTwK51nJ.mjs +23 -0
- package/fesm2022/acorex-platform-widgets-contact-widget-filter.component-GTwK51nJ.mjs.map +1 -0
- package/fesm2022/acorex-platform-widgets.mjs +1139 -907
- package/fesm2022/acorex-platform-widgets.mjs.map +1 -1
- package/layout/builder/lib/builder/widget.types.d.ts +13 -4
- package/layout/designer/index.d.ts +1 -6
- package/layout/designer/lib/{board → designer/components/board}/board.component.d.ts +1 -1
- package/layout/designer/lib/{breadcrumbs → designer/components/breadcrumbs}/breadcrumbs.component.d.ts +1 -1
- package/layout/designer/lib/designer/components/drawers/data-sources/data-sources.component.d.ts +12 -0
- package/layout/designer/lib/{history → designer/components/drawers/history}/history.component.d.ts +1 -1
- package/layout/designer/lib/{outline → designer/components/drawers/outline}/outline.component.d.ts +1 -1
- package/layout/designer/lib/{pages → designer/components/drawers/pages}/pages.component.d.ts +1 -1
- package/layout/designer/lib/{header-menu → designer/components/header-menu}/header-menu.component.d.ts +1 -1
- package/layout/designer/lib/designer/designer.component.d.ts +1 -1
- package/layout/designer/lib/designer/index.d.ts +7 -0
- package/layout/designer/lib/designer/shared/designer-connector.service.d.ts +11 -0
- package/layout/designer/lib/{designer.service.d.ts → designer/shared/designer.service.d.ts} +9 -12
- package/layout/designer/lib/designer/shared/designer.typs.d.ts +4 -0
- package/layout/designer/lib/designer/shared/drawer-content/drawer-content.component.d.ts +8 -0
- package/layout/designer/lib/property-viewer/widget-property-viewer.component.d.ts +8 -0
- package/layout/entity/lib/entity-registery.service.d.ts +1 -1
- package/layout/entity/lib/widgets/lookup-widget/lookup-widget-view.component.d.ts +1 -1
- package/layout/entity/lib/workflows/create-entity.workflow.d.ts +2 -0
- package/layout/entity/lib/workflows/delete-entity.workflow.d.ts +2 -0
- package/layouts/lib/admin/entity-layout/index.d.ts +1 -1
- package/package.json +18 -18
- package/themes/default/index.d.ts +2 -1
- package/themes/default/lib/entity-reuse.strategy.d.ts +1 -1
- package/themes/default/lib/layouts/entity-layouts/entity-detail-list-view/entity-detail-list-view.component.d.ts +10 -3
- package/themes/default/lib/layouts/entity-layouts/entity-master-single-view/comments/comment-list-view.component.d.ts +33 -0
- package/themes/default/lib/layouts/entity-layouts/entity-master-single-view/comments/comments.service.d.ts +11 -0
- package/themes/default/lib/layouts/entity-layouts/entity-master-single-view/entity-master-single-view.component.d.ts +3 -2
- package/themes/default/lib/layouts/entity-layouts/entity-master-single-view/overview/entity-single-overview.component.d.ts +11 -0
- package/themes/default/lib/layouts/entity-layouts/index.d.ts +1 -0
- package/widgets/lib/properties/data-source.props.d.ts +2 -0
- package/widgets/lib/properties/editors.props.d.ts +5 -0
- package/widgets/lib/properties/general.props.d.ts +2 -1
- package/widgets/lib/properties/index.d.ts +1 -0
- package/widgets/lib/properties/table-column.props.d.ts +1 -0
- package/widgets/lib/widgets/actions/button/button-widget-designer.component.d.ts +2 -1
- package/widgets/lib/widgets/actions/button/button-widget-view.component.d.ts +2 -1
- package/widgets/lib/widgets/advance/file/file-box-widget-column.component.d.ts +1 -1
- package/widgets/lib/widgets/advance/gallery/gallery-widget-column.component.d.ts +1 -1
- package/widgets/lib/widgets/advance/map/index.d.ts +0 -3
- package/widgets/lib/widgets/advance/map/map-box-widget-edit.component.d.ts +11 -32
- package/widgets/lib/widgets/advance/map/map-box-widget-view.component.d.ts +6 -11
- package/widgets/lib/widgets/advance/qrcode/qrcode-widget-view.component.d.ts +4 -4
- package/widgets/lib/widgets/advance/signature/signature-pad-widget-column.component.d.ts +1 -1
- package/widgets/lib/widgets/editors/checkbox/checkbox-widget-column.component.d.ts +1 -1
- package/widgets/lib/widgets/editors/contact/contact-widget-edit.component.d.ts +1 -0
- package/widgets/lib/widgets/editors/contact/contact-widget-view.component.d.ts +2 -2
- package/widgets/lib/widgets/editors/contact/index.d.ts +2 -3
- package/widgets/lib/widgets/editors/date-time/date-time-box-widget-column.component.d.ts +1 -1
- package/widgets/lib/widgets/editors/date-time/date-time-box-widget-edit.component.d.ts +2 -1
- package/widgets/lib/widgets/editors/date-time/date-time-box-widget-view.component.d.ts +2 -2
- package/widgets/lib/widgets/editors/large-text/large-text-widget-column.component.d.ts +1 -1
- package/widgets/lib/widgets/editors/large-text/large-text-widget-edit.component.d.ts +1 -1
- package/widgets/lib/widgets/editors/large-text/large-text-widget-view.component.d.ts +1 -1
- package/widgets/lib/widgets/editors/number/number-box-widget-edit.component.d.ts +1 -1
- package/widgets/lib/widgets/editors/password/password-box-widget-column.component.d.ts +7 -3
- package/widgets/lib/widgets/editors/password/password-box-widget-edit.component.d.ts +1 -1
- package/widgets/lib/widgets/editors/password/password-box-widget-view.component.d.ts +1 -1
- package/widgets/lib/widgets/editors/rich-text/rich-text-widget-edit.component.d.ts +2 -0
- package/widgets/lib/widgets/editors/selection-list/index.d.ts +1 -0
- package/widgets/lib/widgets/editors/selection-list/selection-list-widget-column.component.d.ts +1 -1
- package/widgets/lib/widgets/editors/selection-list/selection-list-widget-designer.component.d.ts +16 -0
- package/widgets/lib/widgets/editors/selection-list/selection-list-widget-edit.component.d.ts +3 -2
- package/widgets/lib/widgets/editors/selection-list/selection-list-widget-view.component.d.ts +1 -1
- package/esm2022/layout/designer/lib/board/board.component.mjs +0 -112
- package/esm2022/layout/designer/lib/breadcrumbs/breadcrumbs.component.mjs +0 -64
- package/esm2022/layout/designer/lib/command.mjs +0 -185
- package/esm2022/layout/designer/lib/designer.service.mjs +0 -399
- package/esm2022/layout/designer/lib/header-menu/header-menu.component.mjs +0 -24
- package/esm2022/layout/designer/lib/helpers/grid-drawer/grid-drawer.component.mjs +0 -82
- package/esm2022/layout/designer/lib/history/history.component.mjs +0 -28
- package/esm2022/layout/designer/lib/outline/outline.component.mjs +0 -56
- package/esm2022/layout/designer/lib/pages/pages.component.mjs +0 -28
- package/esm2022/layout/designer/lib/widget-designer-renderer.directive.mjs +0 -224
- package/esm2022/widgets/lib/widgets/advance/map/map-box-widget-column.component.mjs +0 -19
- package/esm2022/widgets/lib/widgets/advance/map/map-box-widget-filter.component.mjs +0 -20
- package/esm2022/widgets/lib/widgets/advance/map/map-box-widget-print.component.mjs +0 -19
- package/fesm2022/acorex-platform-layout-designer-widget-picker.component-DXgcm-fP.mjs.map +0 -1
- package/fesm2022/acorex-platform-layouts-entity-create-view.component-C2pYReAo.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-BHo31YVi.mjs.map +0 -1
- package/fesm2022/acorex-platform-widgets-button-widget-designer.component-C0S_HJkl.mjs.map +0 -1
- package/fesm2022/acorex-platform-widgets-checkbox-widget-column.component-BzNhzB9y.mjs.map +0 -1
- package/fesm2022/acorex-platform-widgets-color-box-widget-designer.component-BF24k3Y-.mjs.map +0 -1
- package/widgets/lib/widgets/advance/map/map-box-widget-column.component.d.ts +0 -6
- package/widgets/lib/widgets/advance/map/map-box-widget-filter.component.d.ts +0 -6
- package/widgets/lib/widgets/advance/map/map-box-widget-print.component.d.ts +0 -6
- /package/layout/designer/lib/{helpers → designer/components}/add-widget-button/add-widget-button.component.d.ts +0 -0
- /package/layout/designer/lib/{helpers → designer/components}/grid-drawer/grid-drawer.component.d.ts +0 -0
- /package/layout/designer/lib/{widget-picker → designer/components/widget-picker}/widget-picker.component.d.ts +0 -0
- /package/layout/designer/lib/{command.d.ts → designer/shared/command.d.ts} +0 -0
- /package/layout/designer/lib/{widget-designer-renderer.directive.d.ts → designer/shared/widget-designer-renderer.directive.d.ts} +0 -0
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
import { computed, Injectable, signal } from "@angular/core";
|
|
2
|
-
import { cloneDeep, merge } from "lodash-es";
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
// AddWidgetCommand
|
|
5
|
-
export class AddWidgetCommand {
|
|
6
|
-
constructor(widget, parent, previousSelection) {
|
|
7
|
-
this.widget = widget;
|
|
8
|
-
this.parent = parent;
|
|
9
|
-
this.previousSelection = previousSelection;
|
|
10
|
-
}
|
|
11
|
-
execute() {
|
|
12
|
-
this.parent.children = this.parent.children || [];
|
|
13
|
-
this.parent.children.push(this.widget);
|
|
14
|
-
}
|
|
15
|
-
undo() {
|
|
16
|
-
this.parent.children = this.parent.children || [];
|
|
17
|
-
const index = this.parent.children.indexOf(this.widget);
|
|
18
|
-
if (index > -1) {
|
|
19
|
-
this.parent.children.splice(index, 1);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
description() {
|
|
23
|
-
return `Added widget ${this.widget.name}`;
|
|
24
|
-
}
|
|
25
|
-
icon() {
|
|
26
|
-
return `fa-solid fa-square-plus`;
|
|
27
|
-
}
|
|
28
|
-
getExecutionSelection() {
|
|
29
|
-
return this.widget; // After executing, select the newly added widget
|
|
30
|
-
}
|
|
31
|
-
getUndoSelection() {
|
|
32
|
-
return this.previousSelection; // After undo, select the previously selected widget
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
export class RemoveWidgetCommand {
|
|
36
|
-
constructor(widget, parent, previousSelection) {
|
|
37
|
-
this.widget = widget;
|
|
38
|
-
this.parent = parent;
|
|
39
|
-
this.previousSelection = previousSelection;
|
|
40
|
-
parent.children = parent.children || [];
|
|
41
|
-
this.index = parent.children.indexOf(widget); // Capture the index for undo purposes
|
|
42
|
-
}
|
|
43
|
-
execute() {
|
|
44
|
-
this.parent.children = this.parent.children || [];
|
|
45
|
-
this.index = this.parent.children.indexOf(this.widget); // Re-assert the index in case it has changed
|
|
46
|
-
this.parent.children.splice(this.index, 1);
|
|
47
|
-
}
|
|
48
|
-
undo() {
|
|
49
|
-
this.parent.children = this.parent.children || [];
|
|
50
|
-
this.parent.children.splice(this.index, 0, this.widget); // Reinsert at the original index
|
|
51
|
-
}
|
|
52
|
-
description() {
|
|
53
|
-
return `Removed widget ${this.widget.name}`;
|
|
54
|
-
}
|
|
55
|
-
icon() {
|
|
56
|
-
return `fa-solid fa-square-minus`;
|
|
57
|
-
}
|
|
58
|
-
getExecutionSelection() {
|
|
59
|
-
return this.previousSelection; // Typically the parent or a nearby sibling could be focused
|
|
60
|
-
}
|
|
61
|
-
getUndoSelection() {
|
|
62
|
-
return this.widget; // Select the widget itself when the operation is undone
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
export class UpdateWidgetCommand {
|
|
66
|
-
constructor(widget, values, previousSelection) {
|
|
67
|
-
this.widget = widget;
|
|
68
|
-
this.newState = merge(cloneDeep(widget), values);
|
|
69
|
-
this.previousSelection = previousSelection;
|
|
70
|
-
this.previousState = cloneDeep(widget);
|
|
71
|
-
}
|
|
72
|
-
execute() {
|
|
73
|
-
merge(this.widget, this.newState);
|
|
74
|
-
}
|
|
75
|
-
undo() {
|
|
76
|
-
this.deepPruneAndRestore(this.widget, this.previousState);
|
|
77
|
-
}
|
|
78
|
-
description() {
|
|
79
|
-
return `Updated widget ${this.widget.name}`;
|
|
80
|
-
}
|
|
81
|
-
icon() {
|
|
82
|
-
return `fa-solid fa-pen-to-square`;
|
|
83
|
-
}
|
|
84
|
-
getExecutionSelection() {
|
|
85
|
-
return this.widget; // Focus the widget after it's updated
|
|
86
|
-
}
|
|
87
|
-
getUndoSelection() {
|
|
88
|
-
return this.previousSelection; // Restore the focus to where it was before the update
|
|
89
|
-
}
|
|
90
|
-
deepPruneAndRestore(current, original) {
|
|
91
|
-
Object.keys(current).forEach(key => {
|
|
92
|
-
if (original.hasOwnProperty(key)) {
|
|
93
|
-
if (typeof current[key] === 'object' && current[key] !== null && !(current[key] instanceof Array)) {
|
|
94
|
-
this.deepPruneAndRestore(current[key], original[key]);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
delete current[key]; // Remove properties not present in original
|
|
99
|
-
}
|
|
100
|
-
});
|
|
101
|
-
// Restore the original properties
|
|
102
|
-
merge(current, original);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
export class CommandManager {
|
|
106
|
-
constructor() {
|
|
107
|
-
this.undoStack = signal([]);
|
|
108
|
-
this.currentIndex = signal(-1);
|
|
109
|
-
this.selectedNode = signal(null);
|
|
110
|
-
this.canUndo = computed(() => this.currentIndex() >= 0);
|
|
111
|
-
this.canRedo = computed(() => this.currentIndex() < this.undoStack().length - 1);
|
|
112
|
-
this.history = computed(() => this.undoStack().map((cmd, index) => ({
|
|
113
|
-
description: cmd.description(),
|
|
114
|
-
icon: cmd.icon(),
|
|
115
|
-
isPast: this.currentIndex() > index,
|
|
116
|
-
isFuture: this.currentIndex() < index,
|
|
117
|
-
isCurrent: this.currentIndex() == index
|
|
118
|
-
})));
|
|
119
|
-
}
|
|
120
|
-
executeCommand(command) {
|
|
121
|
-
// Check if the currentIndex is not at the end of the undoStack
|
|
122
|
-
if (this.currentIndex() !== this.undoStack().length - 1) {
|
|
123
|
-
// Remove all commands beyond the current index to discard the "future" commands
|
|
124
|
-
const newUndoStack = this.undoStack().slice(0, this.currentIndex() + 1);
|
|
125
|
-
this.undoStack.set(newUndoStack);
|
|
126
|
-
}
|
|
127
|
-
command.execute();
|
|
128
|
-
this.undoStack.set([...this.undoStack(), command]); // Add the new command to the stack
|
|
129
|
-
this.currentIndex.set(this.undoStack().length - 1); // Update currentIndex to the end of the stack
|
|
130
|
-
this.selectedNode.set(command.getExecutionSelection()); // Update the selected node
|
|
131
|
-
}
|
|
132
|
-
undo() {
|
|
133
|
-
if (this.currentIndex() >= 0) {
|
|
134
|
-
const command = this.undoStack()[this.currentIndex()];
|
|
135
|
-
command.undo();
|
|
136
|
-
this.currentIndex.set(this.currentIndex() - 1);
|
|
137
|
-
if (this.currentIndex() >= 0) {
|
|
138
|
-
this.selectedNode.set(this.undoStack()[this.currentIndex()].getUndoSelection());
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
this.selectedNode.set(null); // No selection if all commands are undone
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
redo() {
|
|
146
|
-
if (this.currentIndex() < this.undoStack().length - 1) {
|
|
147
|
-
this.currentIndex.set(this.currentIndex() + 1);
|
|
148
|
-
const command = this.undoStack()[this.currentIndex()];
|
|
149
|
-
command.execute();
|
|
150
|
-
this.selectedNode.set(command.getExecutionSelection());
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
goToCommand(index) {
|
|
154
|
-
if (index < 0 || index >= this.undoStack().length || index === this.currentIndex()) {
|
|
155
|
-
return; // Out of bounds or already at the desired index
|
|
156
|
-
}
|
|
157
|
-
if (index > this.currentIndex()) {
|
|
158
|
-
// Need to redo until reaching the desired index
|
|
159
|
-
while (this.currentIndex() < index) {
|
|
160
|
-
this.redo();
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
else {
|
|
164
|
-
// Need to undo until reaching the desired index
|
|
165
|
-
while (this.currentIndex() > index) {
|
|
166
|
-
this.undo();
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
// Optionally update any UI components or state here
|
|
170
|
-
this.selectedNode.set(this.undoStack()[this.currentIndex()].getExecutionSelection());
|
|
171
|
-
}
|
|
172
|
-
clear() {
|
|
173
|
-
this.undoStack.set([]);
|
|
174
|
-
this.currentIndex.set(-1);
|
|
175
|
-
}
|
|
176
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CommandManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
177
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CommandManager, providedIn: 'root' }); }
|
|
178
|
-
}
|
|
179
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CommandManager, decorators: [{
|
|
180
|
-
type: Injectable,
|
|
181
|
-
args: [{
|
|
182
|
-
providedIn: 'root'
|
|
183
|
-
}]
|
|
184
|
-
}] });
|
|
185
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vbGF5b3V0L2Rlc2lnbmVyL3NyYy9saWIvY29tbWFuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLENBQUM7O0FBWTdDLG1CQUFtQjtBQUNuQixNQUFNLE9BQU8sZ0JBQWdCO0lBS3pCLFlBQVksTUFBcUIsRUFBRSxNQUFxQixFQUFFLGlCQUFnQztRQUN0RixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7SUFDL0MsQ0FBQztJQUVELE9BQU87UUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDbEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsSUFBSTtRQUNBLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUNsRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hELElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFF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QUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQztJQUN6RixDQUFDO0lBYU0sS0FBSztRQUNSLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsQ0FBQzs4R0EvRVEsY0FBYztrSEFBZCxjQUFjLGNBRlgsTUFBTTs7MkZBRVQsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFBXaWRnZXROb2RlIH0gZnJvbSBcIkBhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2J1aWxkZXJcIjtcbmltcG9ydCB7IGNvbXB1dGVkLCBJbmplY3RhYmxlLCBzaWduYWwgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBtZXJnZSB9IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuLy8gQ29tbWFuZCBpbnRlcmZhY2VcbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZCB7XG4gICAgZXhlY3V0ZSgpOiB2b2lkO1xuICAgIHVuZG8oKTogdm9pZDtcbiAgICBkZXNjcmlwdGlvbigpOiBzdHJpbmc7XG4gICAgaWNvbigpOiBzdHJpbmc7XG4gICAgZ2V0RXhlY3V0aW9uU2VsZWN0aW9uKCk6IEFYUFdpZGdldE5vZGU7ICAvLyBOb2RlIHRvIHNlbGVjdCBhZnRlciBleGVjdXRpb25cbiAgICBnZXRVbmRvU2VsZWN0aW9uKCk6IEFYUFdpZGdldE5vZGU7ICAgICAgIC8vIE5vZGUgdG8gc2VsZWN0IGFmdGVyIHVuZG9cbn1cblxuLy8gQWRkV2lkZ2V0Q29tbWFuZFxuZXhwb3J0IGNsYXNzIEFkZFdpZGdldENvbW1hbmQgaW1wbGVtZW50cyBDb21tYW5kIHtcbiAgICBwcml2YXRlIHdpZGdldDogQVhQV2lkZ2V0Tm9kZTtcbiAgICBwcml2YXRlIHBhcmVudDogQVhQV2lkZ2V0Tm9kZTtcbiAgICBwcml2YXRlIHByZXZpb3VzU2VsZWN0aW9uOiBBWFBXaWRnZXROb2RlO1xuXG4gICAgY29uc3RydWN0b3Iod2lkZ2V0OiBBWFBXaWRnZXROb2RlLCBwYXJlbnQ6IEFYUFdpZGdldE5vZGUsIHByZXZpb3VzU2VsZWN0aW9uOiBBWFBXaWRnZXROb2RlKSB7XG4gICAgICAgIHRoaXMud2lkZ2V0ID0gd2lkZ2V0O1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgdGhpcy5wcmV2aW91c1NlbGVjdGlvbiA9IHByZXZpb3VzU2VsZWN0aW9uO1xuICAgIH1cblxuICAgIGV4ZWN1dGUoKSB7XG4gICAgICAgIHRoaXMucGFyZW50LmNoaWxkcmVuID0gdGhpcy5wYXJlbnQuY2hpbGRyZW4gfHwgW107XG4gICAgICAgIHRoaXMucGFyZW50LmNoaWxkcmVuLnB1c2godGhpcy53aWRnZXQpO1xuICAgIH1cblxuICAgIHVuZG8oKSB7XG4gICAgICAgIHRoaXMucGFyZW50LmNoaWxkcmVuID0gdGhpcy5wYXJlbnQuY2hpbGRyZW4gfHwgW107XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZih0aGlzLndpZGdldCk7XG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGVzY3JpcHRpb24oKSB7XG4gICAgICAgIHJldHVybiBgQWRkZWQgd2lkZ2V0ICR7dGhpcy53aWRnZXQubmFtZX1gO1xuICAgIH1cblxuICAgIGljb24oKSB7XG4gICAgICAgIHJldHVybiBgZmEtc29saWQgZmEtc3F1YXJlLXBsdXNgO1xuICAgIH1cblxuICAgIGdldEV4ZWN1dGlvblNlbGVjdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2lkZ2V0OyAgLy8gQWZ0ZXIgZXhlY3V0aW5nLCBzZWxlY3QgdGhlIG5ld2x5IGFkZGVkIHdpZGdldFxuICAgIH1cblxuICAgIGdldFVuZG9TZWxlY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByZXZpb3VzU2VsZWN0aW9uOyAgLy8gQWZ0ZXIgdW5kbywgc2VsZWN0IHRoZSBwcmV2aW91c2x5IHNlbGVjdGVkIHdpZGdldFxuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgUmVtb3ZlV2lkZ2V0Q29tbWFuZCBpbXBsZW1lbnRzIENvbW1hbmQge1xuICAgIHByaXZhdGUgd2lkZ2V0OiBBWFBXaWRnZXROb2RlO1xuICAgIHByaXZhdGUgcGFyZW50OiBBWFBXaWRnZXROb2RlO1xuICAgIHByaXZhdGUgcHJldmlvdXNTZWxlY3Rpb246IEFYUFdpZGdldE5vZGU7XG4gICAgcHJpdmF0ZSBpbmRleDogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3Iod2lkZ2V0OiBBWFBXaWRnZXROb2RlLCBwYXJlbnQ6IEFYUFdpZGdldE5vZGUsIHByZXZpb3VzU2VsZWN0aW9uOiBBWFBXaWRnZXROb2RlKSB7XG4gICAgICAgIHRoaXMud2lkZ2V0ID0gd2lkZ2V0O1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgdGhpcy5wcmV2aW91c1NlbGVjdGlvbiA9IHByZXZpb3VzU2VsZWN0aW9uO1xuICAgICAgICBwYXJlbnQuY2hpbGRyZW4gPSBwYXJlbnQuY2hpbGRyZW4gfHwgW107XG4gICAgICAgIHRoaXMuaW5kZXggPSBwYXJlbnQuY2hpbGRyZW4uaW5kZXhPZih3aWRnZXQpOyAgLy8gQ2FwdHVyZSB0aGUgaW5kZXggZm9yIHVuZG8gcHVycG9zZXNcbiAgICB9XG5cbiAgICBleGVjdXRlKCkge1xuICAgICAgICB0aGlzLnBhcmVudC5jaGlsZHJlbiA9IHRoaXMucGFyZW50LmNoaWxkcmVuIHx8IFtdO1xuICAgICAgICB0aGlzLmluZGV4ID0gdGhpcy5wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZih0aGlzLndpZGdldCk7ICAvLyBSZS1hc3NlcnQgdGhlIGluZGV4IGluIGNhc2UgaXQgaGFzIGNoYW5nZWRcbiAgICAgICAgdGhpcy5wYXJlbnQuY2hpbGRyZW4uc3BsaWNlKHRoaXMuaW5kZXgsIDEpO1xuICAgIH1cblxuICAgIHVuZG8oKSB7XG4gICAgICAgIHRoaXMucGFyZW50LmNoaWxkcmVuID0gdGhpcy5wYXJlbnQuY2hpbGRyZW4gfHwgW107XG4gICAgICAgIHRoaXMucGFyZW50LmNoaWxkcmVuLnNwbGljZSh0aGlzLmluZGV4LCAwLCB0aGlzLndpZGdldCk7ICAvLyBSZWluc2VydCBhdCB0aGUgb3JpZ2luYWwgaW5kZXhcbiAgICB9XG5cbiAgICBkZXNjcmlwdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGBSZW1vdmVkIHdpZGdldCAke3RoaXMud2lkZ2V0Lm5hbWV9YDtcbiAgICB9XG5cbiAgICBpY29uKCkge1xuICAgICAgICByZXR1cm4gYGZhLXNvbGlkIGZhLXNxdWFyZS1taW51c2A7XG4gICAgfVxuXG4gICAgZ2V0RXhlY3V0aW9uU2VsZWN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcmV2aW91c1NlbGVjdGlvbjsgIC8vIFR5cGljYWxseSB0aGUgcGFyZW50IG9yIGEgbmVhcmJ5IHNpYmxpbmcgY291bGQgYmUgZm9jdXNlZFxuICAgIH1cblxuICAgIGdldFVuZG9TZWxlY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndpZGdldDsgIC8vIFNlbGVjdCB0aGUgd2lkZ2V0IGl0c2VsZiB3aGVuIHRoZSBvcGVyYXRpb24gaXMgdW5kb25lXG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlV2lkZ2V0Q29tbWFuZCBpbXBsZW1lbnRzIENvbW1hbmQge1xuICAgIHByaXZhdGUgd2lkZ2V0OiBBWFBXaWRnZXROb2RlO1xuICAgIHByaXZhdGUgcHJldmlvdXNTdGF0ZTogQVhQV2lkZ2V0Tm9kZTtcbiAgICBwcml2YXRlIG5ld1N0YXRlOiBBWFBXaWRnZXROb2RlO1xuICAgIHByaXZhdGUgcHJldmlvdXNTZWxlY3Rpb246IEFYUFdpZGdldE5vZGU7XG5cbiAgICBjb25zdHJ1Y3Rvcih3aWRnZXQ6IEFYUFdpZGdldE5vZGUsIHZhbHVlczogUGFydGlhbDxBWFBXaWRnZXROb2RlPiwgcHJldmlvdXNTZWxlY3Rpb246IEFYUFdpZGdldE5vZGUpIHtcbiAgICAgICAgdGhpcy53aWRnZXQgPSB3aWRnZXQ7XG4gICAgICAgIHRoaXMubmV3U3RhdGUgPSBtZXJnZShjbG9uZURlZXAod2lkZ2V0KSwgdmFsdWVzKTtcbiAgICAgICAgdGhpcy5wcmV2aW91c1NlbGVjdGlvbiA9IHByZXZpb3VzU2VsZWN0aW9uO1xuICAgICAgICB0aGlzLnByZXZpb3VzU3RhdGUgPSBjbG9uZURlZXAod2lkZ2V0KTtcbiAgICB9XG5cbiAgICBleGVjdXRlKCkge1xuICAgICAgICBtZXJnZSh0aGlzLndpZGdldCwgdGhpcy5uZXdTdGF0ZSlcbiAgICB9XG5cbiAgICB1bmRvKCkge1xuICAgICAgICB0aGlzLmRlZXBQcnVuZUFuZFJlc3RvcmUodGhpcy53aWRnZXQsIHRoaXMucHJldmlvdXNTdGF0ZSk7XG4gICAgfVxuXG4gICAgZGVzY3JpcHRpb24oKSB7XG4gICAgICAgIHJldHVybiBgVXBkYXRlZCB3aWRnZXQgJHt0aGlzLndpZGdldC5uYW1lfWA7XG4gICAgfVxuXG4gICAgaWNvbigpIHtcbiAgICAgICAgcmV0dXJuIGBmYS1zb2xpZCBmYS1wZW4tdG8tc3F1YXJlYDtcbiAgICB9XG5cbiAgICBnZXRFeGVjdXRpb25TZWxlY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndpZGdldDsgIC8vIEZvY3VzIHRoZSB3aWRnZXQgYWZ0ZXIgaXQncyB1cGRhdGVkXG4gICAgfVxuXG4gICAgZ2V0VW5kb1NlbGVjdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJldmlvdXNTZWxlY3Rpb247ICAvLyBSZXN0b3JlIHRoZSBmb2N1cyB0byB3aGVyZSBpdCB3YXMgYmVmb3JlIHRoZSB1cGRhdGVcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlZXBQcnVuZUFuZFJlc3RvcmUoY3VycmVudDogYW55LCBvcmlnaW5hbDogYW55KSB7XG4gICAgICAgIE9iamVjdC5rZXlzKGN1cnJlbnQpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGlmIChvcmlnaW5hbC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50W2tleV0gPT09ICdvYmplY3QnICYmIGN1cnJlbnRba2V5XSAhPT0gbnVsbCAmJiAhKGN1cnJlbnRba2V5XSBpbnN0YW5jZW9mIEFycmF5KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZXBQcnVuZUFuZFJlc3RvcmUoY3VycmVudFtrZXldLCBvcmlnaW5hbFtrZXldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBjdXJyZW50W2tleV07ICAvLyBSZW1vdmUgcHJvcGVydGllcyBub3QgcHJlc2VudCBpbiBvcmlnaW5hbFxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBwcm9wZXJ0aWVzXG4gICAgICAgIG1lcmdlKGN1cnJlbnQsIG9yaWdpbmFsKTtcbiAgICB9XG59XG5cblxuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENvbW1hbmRNYW5hZ2VyIHtcbiAgICBwcml2YXRlIHVuZG9TdGFjayA9IHNpZ25hbDxDb21tYW5kW10+KFtdKTtcbiAgICBwcml2YXRlIGN1cnJlbnRJbmRleCA9IHNpZ25hbDxudW1iZXI+KC0xKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0ZWROb2RlID0gc2lnbmFsPEFYUFdpZGdldE5vZGUgfCBudWxsPihudWxsKTtcblxuICAgIHB1YmxpYyBjYW5VbmRvID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jdXJyZW50SW5kZXgoKSA+PSAwKVxuICAgIHB1YmxpYyBjYW5SZWRvID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jdXJyZW50SW5kZXgoKSA8IHRoaXMudW5kb1N0YWNrKCkubGVuZ3RoIC0gMSlcblxuICAgIGV4ZWN1dGVDb21tYW5kKGNvbW1hbmQ6IENvbW1hbmQpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGN1cnJlbnRJbmRleCBpcyBub3QgYXQgdGhlIGVuZCBvZiB0aGUgdW5kb1N0YWNrXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCgpICE9PSB0aGlzLnVuZG9TdGFjaygpLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSBhbGwgY29tbWFuZHMgYmV5b25kIHRoZSBjdXJyZW50IGluZGV4IHRvIGRpc2NhcmQgdGhlIFwiZnV0dXJlXCIgY29tbWFuZHNcbiAgICAgICAgICAgIGNvbnN0IG5ld1VuZG9TdGFjayA9IHRoaXMudW5kb1N0YWNrKCkuc2xpY2UoMCwgdGhpcy5jdXJyZW50SW5kZXgoKSArIDEpO1xuICAgICAgICAgICAgdGhpcy51bmRvU3RhY2suc2V0KG5ld1VuZG9TdGFjayk7XG4gICAgICAgIH1cblxuICAgICAgICBjb21tYW5kLmV4ZWN1dGUoKTtcbiAgICAgICAgdGhpcy51bmRvU3RhY2suc2V0KFsuLi50aGlzLnVuZG9TdGFjaygpLCBjb21tYW5kXSk7IC8vIEFkZCB0aGUgbmV3IGNvbW1hbmQgdG8gdGhlIHN0YWNrXG4gICAgICAgIHRoaXMuY3VycmVudEluZGV4LnNldCh0aGlzLnVuZG9TdGFjaygpLmxlbmd0aCAtIDEpOyAvLyBVcGRhdGUgY3VycmVudEluZGV4IHRvIHRoZSBlbmQgb2YgdGhlIHN0YWNrXG4gICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlLnNldChjb21tYW5kLmdldEV4ZWN1dGlvblNlbGVjdGlvbigpKTsgLy8gVXBkYXRlIHRoZSBzZWxlY3RlZCBub2RlXG4gICAgfVxuXG4gICAgdW5kbygpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEluZGV4KCkgPj0gMCkge1xuICAgICAgICAgICAgY29uc3QgY29tbWFuZCA9IHRoaXMudW5kb1N0YWNrKClbdGhpcy5jdXJyZW50SW5kZXgoKV07XG4gICAgICAgICAgICBjb21tYW5kLnVuZG8oKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEluZGV4LnNldCh0aGlzLmN1cnJlbnRJbmRleCgpIC0gMSk7XG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50SW5kZXgoKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUuc2V0KHRoaXMudW5kb1N0YWNrKClbdGhpcy5jdXJyZW50SW5kZXgoKV0uZ2V0VW5kb1NlbGVjdGlvbigpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUuc2V0KG51bGwpOyAvLyBObyBzZWxlY3Rpb24gaWYgYWxsIGNvbW1hbmRzIGFyZSB1bmRvbmVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlZG8oKSB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCgpIDwgdGhpcy51bmRvU3RhY2soKS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRJbmRleC5zZXQodGhpcy5jdXJyZW50SW5kZXgoKSArIDEpO1xuICAgICAgICAgICAgY29uc3QgY29tbWFuZCA9IHRoaXMudW5kb1N0YWNrKClbdGhpcy5jdXJyZW50SW5kZXgoKV07XG4gICAgICAgICAgICBjb21tYW5kLmV4ZWN1dGUoKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlLnNldChjb21tYW5kLmdldEV4ZWN1dGlvblNlbGVjdGlvbigpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdvVG9Db21tYW5kKGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLnVuZG9TdGFjaygpLmxlbmd0aCB8fCBpbmRleCA9PT0gdGhpcy5jdXJyZW50SW5kZXgoKSkge1xuICAgICAgICAgICAgcmV0dXJuOyAgLy8gT3V0IG9mIGJvdW5kcyBvciBhbHJlYWR5IGF0IHRoZSBkZXNpcmVkIGluZGV4XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5kZXggPiB0aGlzLmN1cnJlbnRJbmRleCgpKSB7XG4gICAgICAgICAgICAvLyBOZWVkIHRvIHJlZG8gdW50aWwgcmVhY2hpbmcgdGhlIGRlc2lyZWQgaW5kZXhcbiAgICAgICAgICAgIHdoaWxlICh0aGlzLmN1cnJlbnRJbmRleCgpIDwgaW5kZXgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlZG8oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5lZWQgdG8gdW5kbyB1bnRpbCByZWFjaGluZyB0aGUgZGVzaXJlZCBpbmRleFxuICAgICAgICAgICAgd2hpbGUgKHRoaXMuY3VycmVudEluZGV4KCkgPiBpbmRleCkge1xuICAgICAgICAgICAgICAgIHRoaXMudW5kbygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3B0aW9uYWxseSB1cGRhdGUgYW55IFVJIGNvbXBvbmVudHMgb3Igc3RhdGUgaGVyZVxuICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZS5zZXQodGhpcy51bmRvU3RhY2soKVt0aGlzLmN1cnJlbnRJbmRleCgpXS5nZXRFeGVjdXRpb25TZWxlY3Rpb24oKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGhpc3RvcnkgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnVuZG9TdGFjaygpLm1hcCgoY21kLCBpbmRleCkgPT4gKFxuICAgICAgICB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogY21kLmRlc2NyaXB0aW9uKCksXG4gICAgICAgICAgICBpY29uOiBjbWQuaWNvbigpLFxuICAgICAgICAgICAgaXNQYXN0OiB0aGlzLmN1cnJlbnRJbmRleCgpID4gaW5kZXgsXG4gICAgICAgICAgICBpc0Z1dHVyZTogdGhpcy5jdXJyZW50SW5kZXgoKSA8IGluZGV4LFxuICAgICAgICAgICAgaXNDdXJyZW50OiB0aGlzLmN1cnJlbnRJbmRleCgpID09IGluZGV4XG4gICAgICAgIH1cbiAgICApKSlcblxuXG4gICAgcHVibGljIGNsZWFyKCkge1xuICAgICAgICB0aGlzLnVuZG9TdGFjay5zZXQoW10pO1xuICAgICAgICB0aGlzLmN1cnJlbnRJbmRleC5zZXQoLTEpO1xuICAgIH1cbn0iXX0=
|