@tetacom/ng-components 1.4.22 → 1.5.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/.eslintrc.json +3 -5
- package/component/dropdown/dropdown-base.d.ts +1 -1
- package/directive/dynamic-content-base.directive.d.ts +1 -1
- package/fesm2022/tetacom-ng-components.mjs +515 -489
- package/fesm2022/tetacom-ng-components.mjs.map +1 -1
- package/package.json +3 -5
- package/pipe/prepend-zero/prepend-zero.pipe.d.ts +7 -0
- package/pipe/prepend-zero/public-api.d.ts +1 -0
- package/pipe/public-api.d.ts +1 -0
- package/style/badge.scss +6 -4
- package/style/checkbox.scss +3 -1
- package/style/chips.scss +3 -1
- package/style/icon.scss +3 -1
- package/style/message.scss +3 -1
- package/style/navigation.scss +3 -1
- package/style/presets/view-types.scss +3 -1
- package/style/toggle.scss +3 -1
- package/style/toolbar.scss +3 -1
- package/esm2022/common/contract/auto-close-ignore-case.mjs +0 -2
- package/esm2022/common/contract/constructor-type.mjs +0 -2
- package/esm2022/common/contract/dynamic-data.mjs +0 -10
- package/esm2022/common/contract/i-dictionary.mjs +0 -2
- package/esm2022/common/contract/i-id-name.mjs +0 -2
- package/esm2022/common/contract/i-id.mjs +0 -2
- package/esm2022/common/contract/i-rect.mjs +0 -2
- package/esm2022/common/contract/i-tree-data.mjs +0 -2
- package/esm2022/common/contract/public-api.mjs +0 -10
- package/esm2022/common/contract/teta-content-ref.mjs +0 -8
- package/esm2022/common/enum/align.enum.mjs +0 -13
- package/esm2022/common/enum/public-api.mjs +0 -4
- package/esm2022/common/enum/teta-size.enum.mjs +0 -9
- package/esm2022/common/enum/vertical-align.enum.mjs +0 -11
- package/esm2022/common/model/public-api.mjs +0 -2
- package/esm2022/common/model/view-type.model.mjs +0 -2
- package/esm2022/common/public-api.mjs +0 -6
- package/esm2022/common/service/click.service.mjs +0 -23
- package/esm2022/common/service/dynamic-component.service.mjs +0 -93
- package/esm2022/common/service/overlay-container.service.mjs +0 -41
- package/esm2022/common/service/public-api.mjs +0 -4
- package/esm2022/common/util/array-util.mjs +0 -121
- package/esm2022/common/util/dom-util.mjs +0 -19
- package/esm2022/common/util/position-util.mjs +0 -136
- package/esm2022/common/util/public-api.mjs +0 -4
- package/esm2022/component/accordion/accordion/accordion.component.mjs +0 -17
- package/esm2022/component/accordion/accordion-content.directive.mjs +0 -17
- package/esm2022/component/accordion/accordion-head/accordion-head.component.mjs +0 -51
- package/esm2022/component/accordion/accordion-item/accordion-item.component.mjs +0 -62
- package/esm2022/component/accordion/public-api.mjs +0 -5
- package/esm2022/component/autocomplete/autocomplete/autocomplete.component.mjs +0 -13
- package/esm2022/component/autocomplete/public-api.mjs +0 -2
- package/esm2022/component/avatar/avatar/avatar.component.mjs +0 -55
- package/esm2022/component/avatar/model/avatar-color.enum.mjs +0 -22
- package/esm2022/component/avatar/public-api.mjs +0 -2
- package/esm2022/component/button/button/button.component.mjs +0 -67
- package/esm2022/component/button/public-api.mjs +0 -2
- package/esm2022/component/chart-3d/chart3d/chart3d.component.mjs +0 -241
- package/esm2022/component/chart-3d/model/base-3d-point.mjs +0 -2
- package/esm2022/component/chart-3d/model/chart-3d-options.mjs +0 -7
- package/esm2022/component/chart-3d/model/public-api.mjs +0 -3
- package/esm2022/component/chart-3d/model/series-3d.mjs +0 -7
- package/esm2022/component/chart-3d/public-api.mjs +0 -3
- package/esm2022/component/checkbox/checkbox/checkbox.component.mjs +0 -137
- package/esm2022/component/checkbox/public-api.mjs +0 -2
- package/esm2022/component/date-picker/base-calendar.mjs +0 -121
- package/esm2022/component/date-picker/base-picker.mjs +0 -109
- package/esm2022/component/date-picker/date-picker/date-calendar/date-calendar.component.mjs +0 -50
- package/esm2022/component/date-picker/date-picker/date-picker.component.mjs +0 -228
- package/esm2022/component/date-picker/date-range/date-range.component.mjs +0 -233
- package/esm2022/component/date-picker/date-range/range-calendar/range-calendar.component.mjs +0 -118
- package/esm2022/component/date-picker/day-picker/day-item/day-item.component.mjs +0 -15
- package/esm2022/component/date-picker/day-picker/day-picker.component.mjs +0 -118
- package/esm2022/component/date-picker/model/date-period.mjs +0 -7
- package/esm2022/component/date-picker/model/date-picker-mode.enum.mjs +0 -7
- package/esm2022/component/date-picker/model/day-model.mjs +0 -13
- package/esm2022/component/date-picker/model/from-to.model.mjs +0 -2
- package/esm2022/component/date-picker/model/min-max-date.model.mjs +0 -2
- package/esm2022/component/date-picker/model/public-api.mjs +0 -6
- package/esm2022/component/date-picker/month-picker/month-picker.component.mjs +0 -47
- package/esm2022/component/date-picker/public-api.mjs +0 -6
- package/esm2022/component/date-picker/year-picker/scroll-to-selected-year.directive.mjs +0 -27
- package/esm2022/component/date-picker/year-picker/year-picker.component.mjs +0 -48
- package/esm2022/component/delimiter/delimiter/delimiter.component.mjs +0 -63
- package/esm2022/component/delimiter/public-api.mjs +0 -2
- package/esm2022/component/divider/divider/divider.component.mjs +0 -18
- package/esm2022/component/divider/public-api.mjs +0 -2
- package/esm2022/component/dropdown/dropdown/dropdown.component.mjs +0 -30
- package/esm2022/component/dropdown/dropdown-base.mjs +0 -224
- package/esm2022/component/dropdown/dropdown-content.directive.mjs +0 -18
- package/esm2022/component/dropdown/dropdown-head.directive.mjs +0 -19
- package/esm2022/component/dropdown/dropdown.directive.mjs +0 -38
- package/esm2022/component/dropdown/public-api.mjs +0 -5
- package/esm2022/component/dynamic-component/popup-content/popup-content.component.mjs +0 -53
- package/esm2022/component/dynamic-component/public-api.mjs +0 -2
- package/esm2022/component/expand-card/expand-card/expand-card.component.mjs +0 -34
- package/esm2022/component/expand-card/expand-item/expand-item.component.mjs +0 -25
- package/esm2022/component/expand-card/public-api.mjs +0 -3
- package/esm2022/component/expand-panel/expand-panel/expand-panel.component.mjs +0 -65
- package/esm2022/component/expand-panel/expand-panel-content.directive.mjs +0 -17
- package/esm2022/component/expand-panel/expand-panel-head.directive.mjs +0 -17
- package/esm2022/component/expand-panel/public-api.mjs +0 -4
- package/esm2022/component/file-upload/file-item/file-item.component.mjs +0 -13
- package/esm2022/component/file-upload/file-upload-area/file-upload-area.component.mjs +0 -87
- package/esm2022/component/file-upload/public-api.mjs +0 -3
- package/esm2022/component/filter/base/filter-base.mjs +0 -10
- package/esm2022/component/filter/base/filter-component-base.mjs +0 -3
- package/esm2022/component/filter/boolean-filter/boolean-filter.component.mjs +0 -63
- package/esm2022/component/filter/contarct/boolean-filter.mjs +0 -8
- package/esm2022/component/filter/contarct/date-filter-value.mjs +0 -9
- package/esm2022/component/filter/contarct/date-filter.mjs +0 -11
- package/esm2022/component/filter/contarct/filter-component-map.mjs +0 -15
- package/esm2022/component/filter/contarct/filter-item.mjs +0 -34
- package/esm2022/component/filter/contarct/filter-state.mjs +0 -145
- package/esm2022/component/filter/contarct/i-filter.mjs +0 -2
- package/esm2022/component/filter/contarct/list-filter.mjs +0 -12
- package/esm2022/component/filter/contarct/numeric-filter-value.mjs +0 -10
- package/esm2022/component/filter/contarct/numeric-filter.mjs +0 -9
- package/esm2022/component/filter/contarct/sort-param.mjs +0 -14
- package/esm2022/component/filter/contarct/string-filter.mjs +0 -12
- package/esm2022/component/filter/date-filter/date-filter.component.mjs +0 -64
- package/esm2022/component/filter/enum/filter-type.enum.mjs +0 -10
- package/esm2022/component/filter/enum/list-filter-type.enum.mjs +0 -6
- package/esm2022/component/filter/enum/string-filter-type.enum.mjs +0 -20
- package/esm2022/component/filter/filter-host/filter-host.component.mjs +0 -79
- package/esm2022/component/filter/list-filter/list-filter.component.mjs +0 -96
- package/esm2022/component/filter/numeric-filter/numeric-filter.component.mjs +0 -64
- package/esm2022/component/filter/public-api.mjs +0 -23
- package/esm2022/component/filter/string-filter/string-filter.component.mjs +0 -64
- package/esm2022/component/icon/icon/icon.component.mjs +0 -54
- package/esm2022/component/icon/icon-file/icon-file.component.mjs +0 -27
- package/esm2022/component/icon/icon-sprite.directive.mjs +0 -34
- package/esm2022/component/icon/icon.service.mjs +0 -58
- package/esm2022/component/icon/public-api.mjs +0 -5
- package/esm2022/component/input/color-input/color-input.component.mjs +0 -71
- package/esm2022/component/input/form-group-title/form-group-title.component.mjs +0 -18
- package/esm2022/component/input/input/input.component.mjs +0 -38
- package/esm2022/component/input/public-api.mjs +0 -6
- package/esm2022/component/input/text-field/text-field.component.mjs +0 -94
- package/esm2022/component/message/message/message.component.mjs +0 -76
- package/esm2022/component/message/message-host/message-host.component.mjs +0 -84
- package/esm2022/component/message/message.service.mjs +0 -35
- package/esm2022/component/message/model/message.mjs +0 -23
- package/esm2022/component/message/public-api.mjs +0 -5
- package/esm2022/component/modal/dialog/dialog.component.mjs +0 -46
- package/esm2022/component/modal/dialog.service.mjs +0 -40
- package/esm2022/component/modal/modal-container/modal-container.component.mjs +0 -77
- package/esm2022/component/modal/modal.module.mjs +0 -32
- package/esm2022/component/modal/modal.service.mjs +0 -122
- package/esm2022/component/modal/model/current-modal.mjs +0 -3
- package/esm2022/component/modal/model/i-modal-config.mjs +0 -2
- package/esm2022/component/modal/model/i-modal-result.mjs +0 -2
- package/esm2022/component/modal/model/modal-close-reason.enum.mjs +0 -8
- package/esm2022/component/modal/model/modal-instance.mjs +0 -34
- package/esm2022/component/modal/public-api.mjs +0 -11
- package/esm2022/component/pager/model/pager-state.mjs +0 -51
- package/esm2022/component/pager/pager/pager.component.mjs +0 -13
- package/esm2022/component/pager/public-api.mjs +0 -4
- package/esm2022/component/pager/util/pager-util.mjs +0 -6
- package/esm2022/component/panel/panel/panel.component.mjs +0 -45
- package/esm2022/component/panel/public-api.mjs +0 -2
- package/esm2022/component/progress-bar/progress-bar/progress-bar.component.mjs +0 -130
- package/esm2022/component/progress-bar/public-api.mjs +0 -2
- package/esm2022/component/property-grid/property-grid/property-grid-group/property-grid-group.component.mjs +0 -24
- package/esm2022/component/property-grid/property-grid/property-grid-item/property-grid-item.component.mjs +0 -133
- package/esm2022/component/property-grid/property-grid/property-grid-item-description.directive.mjs +0 -20
- package/esm2022/component/property-grid/property-grid/property-grid.component.mjs +0 -97
- package/esm2022/component/property-grid/public-api.mjs +0 -4
- package/esm2022/component/public-api.mjs +0 -72
- package/esm2022/component/radio/public-api.mjs +0 -3
- package/esm2022/component/radio/radio/radio.component.mjs +0 -240
- package/esm2022/component/radio/radio-button/radio-button.component.mjs +0 -63
- package/esm2022/component/resize-panel/public-api.mjs +0 -2
- package/esm2022/component/resize-panel/resize-panel/resize-panel.component.mjs +0 -166
- package/esm2022/component/select/public-api.mjs +0 -4
- package/esm2022/component/select/select/select.component.mjs +0 -272
- package/esm2022/component/select/select-option.directive.mjs +0 -17
- package/esm2022/component/select/select-value.directive.mjs +0 -17
- package/esm2022/component/sidebar/public-api.mjs +0 -3
- package/esm2022/component/sidebar/sidebar/sidebar.component.mjs +0 -48
- package/esm2022/component/sidebar/sidebar-position.enum.mjs +0 -8
- package/esm2022/component/stepper/public-api.mjs +0 -2
- package/esm2022/component/stepper/stepper/stepper.component.mjs +0 -16
- package/esm2022/component/switch/public-api.mjs +0 -3
- package/esm2022/component/switch/switch/switch.component.mjs +0 -61
- package/esm2022/component/switch/switch-button/switch-button.component.mjs +0 -47
- package/esm2022/component/switch/switch.service.mjs +0 -21
- package/esm2022/component/table/base/cell-component-base.mjs +0 -158
- package/esm2022/component/table/base/detail-component-base.mjs +0 -3
- package/esm2022/component/table/base/head-cell-component-base.mjs +0 -18
- package/esm2022/component/table/cell/cell.component.mjs +0 -28
- package/esm2022/component/table/cell-host/cell-host.component.mjs +0 -56
- package/esm2022/component/table/contract/cell-components-map.mjs +0 -15
- package/esm2022/component/table/contract/column-reorder-event.mjs +0 -7
- package/esm2022/component/table/contract/column-resize-event.mjs +0 -7
- package/esm2022/component/table/contract/head-dropdown-tab.mjs +0 -2
- package/esm2022/component/table/contract/i-cell-coordinates.mjs +0 -2
- package/esm2022/component/table/contract/i-cell-event.mjs +0 -2
- package/esm2022/component/table/contract/i-cell-instance.mjs +0 -2
- package/esm2022/component/table/contract/i-cell-value.mjs +0 -2
- package/esm2022/component/table/contract/public-api.mjs +0 -13
- package/esm2022/component/table/contract/sort-event.mjs +0 -7
- package/esm2022/component/table/contract/table-column-store.mjs +0 -12
- package/esm2022/component/table/contract/table-column.mjs +0 -44
- package/esm2022/component/table/contract/table-row.mjs +0 -7
- package/esm2022/component/table/default/boolean-cell/boolean-cell.component.mjs +0 -39
- package/esm2022/component/table/default/date-cell/date-cell.component.mjs +0 -40
- package/esm2022/component/table/default/date-time-cell/date-time-cell.component.mjs +0 -40
- package/esm2022/component/table/default/default-head-cell/default-head-cell.component.mjs +0 -49
- package/esm2022/component/table/default/list-cell/list-cell.component.mjs +0 -60
- package/esm2022/component/table/default/numeric-cell/numeric-cell.component.mjs +0 -39
- package/esm2022/component/table/default/string-cell/string-cell.component.mjs +0 -40
- package/esm2022/component/table/enum/aggregation-type.enum.mjs +0 -9
- package/esm2022/component/table/enum/edit-event.enum.mjs +0 -7
- package/esm2022/component/table/enum/edit-type.enum.mjs +0 -7
- package/esm2022/component/table/enum/public-api.mjs +0 -5
- package/esm2022/component/table/enum/select-type.enum.mjs +0 -7
- package/esm2022/component/table/head-cell/head-cell.component.mjs +0 -204
- package/esm2022/component/table/head-cell-dropdown/head-cell-dropdown.component.mjs +0 -50
- package/esm2022/component/table/head-cell-host/head-cell-host.component.mjs +0 -60
- package/esm2022/component/table/public-api.mjs +0 -42
- package/esm2022/component/table/selection-cell/selection-cell.component.mjs +0 -46
- package/esm2022/component/table/selection-head-cell/selection-head-cell.component.mjs +0 -45
- package/esm2022/component/table/service/table.service.mjs +0 -650
- package/esm2022/component/table/table/table.component.mjs +0 -470
- package/esm2022/component/table/table-body/table-body.component.mjs +0 -210
- package/esm2022/component/table/table-head/filter-dropdown-tab/filter-dropdown-tab.component.mjs +0 -57
- package/esm2022/component/table/table-head/main-dropdown-tab/main-dropdown-tab.component.mjs +0 -89
- package/esm2022/component/table/table-head/table-head.component.mjs +0 -76
- package/esm2022/component/table/table-head/visibility-dropdown-tab/visibility-dropdown-tab.component.mjs +0 -154
- package/esm2022/component/table/table-head-group/table-head-group.component.mjs +0 -72
- package/esm2022/component/table/table-row/table-row.component.mjs +0 -42
- package/esm2022/component/table/util/public-api.mjs +0 -3
- package/esm2022/component/table/util/state-util.mjs +0 -146
- package/esm2022/component/table/util/table-util.mjs +0 -133
- package/esm2022/component/tabs/public-api.mjs +0 -11
- package/esm2022/component/tabs/tab/tab.component.mjs +0 -42
- package/esm2022/component/tabs/tab-content.directive.mjs +0 -17
- package/esm2022/component/tabs/tab-title.directive.mjs +0 -17
- package/esm2022/component/tabs/tabs/tabs.component.mjs +0 -82
- package/esm2022/component/theme-switch/public-api.mjs +0 -3
- package/esm2022/component/theme-switch/theme-switch/theme-switch.component.mjs +0 -30
- package/esm2022/component/theme-switch/theme-switch.service.mjs +0 -34
- package/esm2022/component/toggle/public-api.mjs +0 -2
- package/esm2022/component/toggle/toggle/toggle.component.mjs +0 -79
- package/esm2022/component/toolbar/public-api.mjs +0 -5
- package/esm2022/component/toolbar/toolbar/toolbar.component.mjs +0 -26
- package/esm2022/component/tree/public-api.mjs +0 -4
- package/esm2022/component/tree/tree/tree.component.mjs +0 -143
- package/esm2022/component/tree/tree-item/tree-item.component.mjs +0 -75
- package/esm2022/component/tree/tree-item-toggle/tree-item-toggle.component.mjs +0 -28
- package/esm2022/component/tree/tree.service.mjs +0 -40
- package/esm2022/directive/auto-position/auto-position.directive.mjs +0 -71
- package/esm2022/directive/auto-position/public-api.mjs +0 -2
- package/esm2022/directive/click-outside/click-outside.directive.mjs +0 -66
- package/esm2022/directive/click-outside/public-api.mjs +0 -2
- package/esm2022/directive/context-menu/context-menu.directive.mjs +0 -119
- package/esm2022/directive/context-menu/public-api.mjs +0 -2
- package/esm2022/directive/disable-control/disable-control.directive.mjs +0 -35
- package/esm2022/directive/disable-control/public-api.mjs +0 -2
- package/esm2022/directive/drag-drop/drag-container.directive.mjs +0 -92
- package/esm2022/directive/drag-drop/drag-drop.service.mjs +0 -145
- package/esm2022/directive/drag-drop/drag-placeholder.directive.mjs +0 -15
- package/esm2022/directive/drag-drop/drag-preview.directive.mjs +0 -17
- package/esm2022/directive/drag-drop/drag.directive.mjs +0 -138
- package/esm2022/directive/drag-drop/model/drag-container-instance.mjs +0 -8
- package/esm2022/directive/drag-drop/model/drag-instance.mjs +0 -7
- package/esm2022/directive/drag-drop/model/drag-process.mjs +0 -2
- package/esm2022/directive/drag-drop/model/drag-selection.mjs +0 -2
- package/esm2022/directive/drag-drop/model/drop-event.mjs +0 -2
- package/esm2022/directive/drag-drop/model/drop-target.mjs +0 -2
- package/esm2022/directive/drag-drop/model/point.mjs +0 -2
- package/esm2022/directive/drag-drop/model/public-api.mjs +0 -8
- package/esm2022/directive/drag-drop/public-api.mjs +0 -7
- package/esm2022/directive/drag-sort/drag-sort-container.directive.mjs +0 -65
- package/esm2022/directive/drag-sort/drag-sort-event.mjs +0 -2
- package/esm2022/directive/drag-sort/drag-sort-item.directive.mjs +0 -111
- package/esm2022/directive/drag-sort/public-api.mjs +0 -4
- package/esm2022/directive/dynamic-content-base.directive.mjs +0 -80
- package/esm2022/directive/highlight/highlight.directive.mjs +0 -72
- package/esm2022/directive/highlight/public-api.mjs +0 -2
- package/esm2022/directive/hint/hint.directive.mjs +0 -102
- package/esm2022/directive/hint/public-api.mjs +0 -2
- package/esm2022/directive/let/let.directive.mjs +0 -39
- package/esm2022/directive/let/public-api.mjs +0 -2
- package/esm2022/directive/loader/loader.directive.mjs +0 -85
- package/esm2022/directive/loader/public-api.mjs +0 -2
- package/esm2022/directive/no-autofill/no-autofill.directive.mjs +0 -31
- package/esm2022/directive/no-autofill/public-api.mjs +0 -2
- package/esm2022/directive/only-number/only-number.directive.mjs +0 -184
- package/esm2022/directive/only-number/public-api.mjs +0 -2
- package/esm2022/directive/public-api.mjs +0 -19
- package/esm2022/directive/resize-drag/public-api.mjs +0 -2
- package/esm2022/directive/resize-drag/resize-drag.directive.mjs +0 -72
- package/esm2022/directive/scroll-into-view/public-api.mjs +0 -2
- package/esm2022/directive/scroll-into-view/scroll-into-view.directive.mjs +0 -41
- package/esm2022/directive/scrollable/public-api.mjs +0 -3
- package/esm2022/directive/scrollable/scrollable/scrollable.component.mjs +0 -98
- package/esm2022/directive/scrollable/scrollable.directive.mjs +0 -20
- package/esm2022/directive/teta-template/public-api.mjs +0 -2
- package/esm2022/directive/teta-template/teta-template.directive.mjs +0 -23
- package/esm2022/directive/tooltip/public-api.mjs +0 -2
- package/esm2022/directive/tooltip/tooltip.directive.mjs +0 -81
- package/esm2022/index.mjs +0 -22
- package/esm2022/locale/en.mjs +0 -50
- package/esm2022/locale/public-api.mjs +0 -5
- package/esm2022/locale/ru.mjs +0 -50
- package/esm2022/locale/teta-config.service.mjs +0 -28
- package/esm2022/locale/teta-localisation.mjs +0 -2
- package/esm2022/observable/animation-frame.mjs +0 -30
- package/esm2022/observable/public-api.mjs +0 -3
- package/esm2022/observable/zone-observable.mjs +0 -15
- package/esm2022/pipe/date-pipe/public-api.mjs +0 -2
- package/esm2022/pipe/date-pipe/teta-date.pipe.mjs +0 -43
- package/esm2022/pipe/number-pipe/number.pipe.mjs +0 -28
- package/esm2022/pipe/number-pipe/public-api.mjs +0 -2
- package/esm2022/pipe/public-api.mjs +0 -4
- package/esm2022/pipe/util/number-helper.mjs +0 -25
- package/esm2022/tetacom-ng-components.mjs +0 -5
- package/esm2022/util/bool-or-func.mjs +0 -13
- package/esm2022/util/date-util.mjs +0 -231
- package/esm2022/util/export-dom-image.mjs +0 -22
- package/esm2022/util/forms-util.mjs +0 -85
- package/esm2022/util/is-function.mjs +0 -4
- package/esm2022/util/public-api.mjs +0 -7
- package/esm2022/util/string-util.mjs +0 -9
|
@@ -1,470 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, HostBinding, HostListener, input, Input, Output, TemplateRef, Type, ViewChild, } from '@angular/core';
|
|
2
|
-
import { filter, takeWhile } from 'rxjs/operators';
|
|
3
|
-
import { Align } from '../../../common/enum/align.enum';
|
|
4
|
-
import { VerticalAlign } from '../../../common/enum/vertical-align.enum';
|
|
5
|
-
import { FilterState } from '../../filter/contarct/filter-state';
|
|
6
|
-
import { FilterType } from '../../filter/enum/filter-type.enum';
|
|
7
|
-
import { EditEvent } from '../enum/edit-event.enum';
|
|
8
|
-
import { EditType } from '../enum/edit-type.enum';
|
|
9
|
-
import { SelectType } from '../enum/select-type.enum';
|
|
10
|
-
import { TableService } from '../service/table.service';
|
|
11
|
-
import { TableBodyComponent } from '../table-body/table-body.component';
|
|
12
|
-
import { ContextMenuDirective } from '../../../directive/context-menu/context-menu.directive';
|
|
13
|
-
import { TableHeadComponent } from '../table-head/table-head.component';
|
|
14
|
-
import * as i0 from "@angular/core";
|
|
15
|
-
import * as i1 from "../service/table.service";
|
|
16
|
-
export class TableComponent {
|
|
17
|
-
set state(state) {
|
|
18
|
-
this._state = state;
|
|
19
|
-
}
|
|
20
|
-
set scrollToIndex(index) {
|
|
21
|
-
this._svc.scrollToIndex(index);
|
|
22
|
-
}
|
|
23
|
-
constructor(_svc, _elementRef) {
|
|
24
|
-
this._svc = _svc;
|
|
25
|
-
this._elementRef = _elementRef;
|
|
26
|
-
this.data = [];
|
|
27
|
-
this.columns = [];
|
|
28
|
-
this.selectType = SelectType.mouse;
|
|
29
|
-
this.trackRow = (index, row) => {
|
|
30
|
-
if (row['id']) {
|
|
31
|
-
return row['id'];
|
|
32
|
-
}
|
|
33
|
-
return index;
|
|
34
|
-
};
|
|
35
|
-
this.trackColumns = (index, column) => {
|
|
36
|
-
return column.name;
|
|
37
|
-
};
|
|
38
|
-
this.editType = EditType.cell;
|
|
39
|
-
this.editEvent = EditEvent.doubleClick;
|
|
40
|
-
this.showHeadCellMenu = true;
|
|
41
|
-
this.contextMenuOpenChange = new EventEmitter();
|
|
42
|
-
this.stateChange = new EventEmitter();
|
|
43
|
-
this.bodyLeft = new EventEmitter();
|
|
44
|
-
this.activeRowChange = new EventEmitter();
|
|
45
|
-
this.selectedRowsChange = new EventEmitter();
|
|
46
|
-
this.cellClick = new EventEmitter();
|
|
47
|
-
this.cellDoubleClick = new EventEmitter();
|
|
48
|
-
this.cellFocus = new EventEmitter();
|
|
49
|
-
this.cellKeyDown = new EventEmitter();
|
|
50
|
-
this.rowLeft = new EventEmitter();
|
|
51
|
-
this.rowEditStart = new EventEmitter();
|
|
52
|
-
this.rowEditEnd = new EventEmitter();
|
|
53
|
-
this.cellEditStart = new EventEmitter();
|
|
54
|
-
this.cellEditEnd = new EventEmitter();
|
|
55
|
-
this.valueChange = new EventEmitter();
|
|
56
|
-
this.tableService = new EventEmitter();
|
|
57
|
-
this.tableClass = true;
|
|
58
|
-
this.rowHeight = input(28);
|
|
59
|
-
this.verticalAlign = VerticalAlign;
|
|
60
|
-
this.align = Align;
|
|
61
|
-
this._alive = true;
|
|
62
|
-
this.onScroll = (event) => {
|
|
63
|
-
this._headElement.scrollLeft = event.target.scrollLeft;
|
|
64
|
-
};
|
|
65
|
-
this._svc.state
|
|
66
|
-
.pipe(takeWhile(() => this._alive), filter((state) => state !== this._state))
|
|
67
|
-
.subscribe((state) => this.stateChange.next(state));
|
|
68
|
-
this._svc.editCellStart
|
|
69
|
-
.pipe(takeWhile(() => this._alive))
|
|
70
|
-
.subscribe((item) => this.cellEditStart.emit(this._svc.getCellInstance(item)));
|
|
71
|
-
this._svc.editCellStop
|
|
72
|
-
.pipe(takeWhile(() => this._alive))
|
|
73
|
-
.subscribe((item) => this.cellEditEnd.emit(this._svc.getCellInstance(item)));
|
|
74
|
-
this._svc.editRowStart
|
|
75
|
-
.pipe(takeWhile(() => this._alive))
|
|
76
|
-
.subscribe((item) => this.rowEditStart.emit(this._svc.getCellInstance(item)));
|
|
77
|
-
this._svc.editRowStop
|
|
78
|
-
.pipe(takeWhile(() => this._alive))
|
|
79
|
-
.subscribe((item) => this.rowEditEnd.emit(this._svc.getRowByIndex(item?.row)));
|
|
80
|
-
this._svc.selectedRows.pipe(takeWhile(() => this._alive)).subscribe((items) => {
|
|
81
|
-
this.selectedRowsList = items;
|
|
82
|
-
this.selectedRowsChange.emit(items);
|
|
83
|
-
});
|
|
84
|
-
this._svc.activeRow.pipe(takeWhile(() => this._alive)).subscribe((item) => {
|
|
85
|
-
this.activeRow = item;
|
|
86
|
-
this.activeRowChange.emit(item);
|
|
87
|
-
});
|
|
88
|
-
this._svc.valueChanged.pipe(takeWhile(() => this._alive)).subscribe((coordinates) => {
|
|
89
|
-
this.valueChange.emit(this._svc.getCellInstance(coordinates));
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
handleClickOutsideAnyRow(event) {
|
|
93
|
-
const coordinates = this.getCoordinates(event);
|
|
94
|
-
const row = this.getRow(event);
|
|
95
|
-
const eventIsOnRow = this.eventIsOnRow(event);
|
|
96
|
-
setTimeout(() => {
|
|
97
|
-
if (coordinates) {
|
|
98
|
-
this.cellClick.emit({
|
|
99
|
-
...this._svc.getCellInstance(coordinates),
|
|
100
|
-
event,
|
|
101
|
-
});
|
|
102
|
-
if (this.editEvent === EditEvent.click) {
|
|
103
|
-
this.startEditRowOrCell(coordinates);
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
if (this._svc.currentEditCell &&
|
|
107
|
-
(coordinates.row !== this._svc.currentEditCell.row ||
|
|
108
|
-
coordinates.column !== this._svc.currentEditCell.column)) {
|
|
109
|
-
this.startEditRowOrCell(null);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
if (row) {
|
|
114
|
-
if (event.ctrlKey) {
|
|
115
|
-
this._svc.selectOrDeselectRow(row.data);
|
|
116
|
-
}
|
|
117
|
-
else if (event.shiftKey) {
|
|
118
|
-
this._svc.selectRange(row.data);
|
|
119
|
-
}
|
|
120
|
-
else {
|
|
121
|
-
this._svc.selectRows([row.data]);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
if (!eventIsOnRow && !event.defaultPrevented) {
|
|
125
|
-
if (this.editType === EditType.row) {
|
|
126
|
-
this._svc.startEditRow(null);
|
|
127
|
-
}
|
|
128
|
-
else {
|
|
129
|
-
this._svc.startEditCell(null);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
focusIn(event) {
|
|
135
|
-
const coordinates = this.getCoordinates(event);
|
|
136
|
-
if (coordinates) {
|
|
137
|
-
this.cellFocus.emit({
|
|
138
|
-
...this._svc.getCellInstance(coordinates),
|
|
139
|
-
event,
|
|
140
|
-
});
|
|
141
|
-
if (this.editEvent === EditEvent.focus) {
|
|
142
|
-
this.startEditRowOrCell(coordinates);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
dblclick(event) {
|
|
147
|
-
const coordinates = this.getCoordinates(event);
|
|
148
|
-
if (coordinates) {
|
|
149
|
-
setTimeout(() => {
|
|
150
|
-
this.cellDoubleClick.emit({
|
|
151
|
-
...this._svc.getCellInstance(coordinates),
|
|
152
|
-
event,
|
|
153
|
-
});
|
|
154
|
-
if (this.editEvent === EditEvent.doubleClick) {
|
|
155
|
-
this.startEditRowOrCell(coordinates);
|
|
156
|
-
}
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
keydown(event) {
|
|
161
|
-
if (event.ctrlKey) {
|
|
162
|
-
if (event.code === 'KeyA') {
|
|
163
|
-
event.preventDefault();
|
|
164
|
-
this._svc.selectAll();
|
|
165
|
-
}
|
|
166
|
-
return;
|
|
167
|
-
}
|
|
168
|
-
if (event.key === 'Escape') {
|
|
169
|
-
this._svc.deselectAll();
|
|
170
|
-
if (this.editType === EditType.row) {
|
|
171
|
-
this._svc.startEditRow(null);
|
|
172
|
-
}
|
|
173
|
-
else {
|
|
174
|
-
this._svc.startEditCell(null);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
const coordinates = this.getCoordinates(event);
|
|
178
|
-
if (event.key === 'Enter') {
|
|
179
|
-
if (this.editType === EditType.row) {
|
|
180
|
-
this._svc.startEditRow(null);
|
|
181
|
-
}
|
|
182
|
-
else {
|
|
183
|
-
if (this._svc.currentEditCell) {
|
|
184
|
-
const target = this._svc.getNextRowCell(coordinates);
|
|
185
|
-
if (target) {
|
|
186
|
-
this.startEditRowOrCell({
|
|
187
|
-
row: target.row,
|
|
188
|
-
column: target.column,
|
|
189
|
-
event: undefined,
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
else {
|
|
193
|
-
this._svc.startEditCell(null);
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
if (coordinates) {
|
|
199
|
-
this.cellKeyDown.emit({
|
|
200
|
-
...this._svc.getCellInstance(coordinates),
|
|
201
|
-
event,
|
|
202
|
-
});
|
|
203
|
-
if (event.key && (event.key.length === 1 || event.key === 'Delete')) {
|
|
204
|
-
const column = this._svc.getColumnByName(coordinates.column);
|
|
205
|
-
if (column.filterType !== FilterType.number || isFinite(event.key)) {
|
|
206
|
-
this.startEditRowOrCell({
|
|
207
|
-
row: coordinates.row,
|
|
208
|
-
column: coordinates.column,
|
|
209
|
-
event: event,
|
|
210
|
-
});
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
if (event.key === 'Tab' && this._svc.currentEditCell) {
|
|
214
|
-
event.preventDefault();
|
|
215
|
-
let target = this._svc.getNextEditableCell(coordinates);
|
|
216
|
-
if (event.shiftKey) {
|
|
217
|
-
target = this._svc.getPreviousEditableCell(coordinates);
|
|
218
|
-
}
|
|
219
|
-
if (target) {
|
|
220
|
-
this.startEditRowOrCell({
|
|
221
|
-
row: target.row,
|
|
222
|
-
column: target.column,
|
|
223
|
-
event: undefined,
|
|
224
|
-
});
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
if (!this._svc.currentEditCell) {
|
|
228
|
-
let target;
|
|
229
|
-
if (event.key === 'ArrowRight') {
|
|
230
|
-
target = this._svc.getNextCell(coordinates);
|
|
231
|
-
}
|
|
232
|
-
if (event.key === 'ArrowLeft') {
|
|
233
|
-
target = this._svc.getPreviousCell(coordinates);
|
|
234
|
-
}
|
|
235
|
-
if (event.key === 'ArrowUp') {
|
|
236
|
-
target = this._svc.getPreviousRowCell(coordinates);
|
|
237
|
-
}
|
|
238
|
-
if (event.key === 'ArrowDown') {
|
|
239
|
-
target = this._svc.getNextRowCell(coordinates);
|
|
240
|
-
}
|
|
241
|
-
if (target) {
|
|
242
|
-
event.preventDefault();
|
|
243
|
-
const element = this.getCellElement(target);
|
|
244
|
-
element?.focus();
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
mousedown(event) {
|
|
250
|
-
if (event.button === 2) {
|
|
251
|
-
event.preventDefault();
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
ngOnInit() {
|
|
255
|
-
this._svc.restoreState();
|
|
256
|
-
this._svc.restoreHiddenColumns();
|
|
257
|
-
this.tableService.emit(this._svc);
|
|
258
|
-
}
|
|
259
|
-
ngAfterViewInit() {
|
|
260
|
-
this._headElement = this._elementRef.nativeElement.querySelector('.table-head');
|
|
261
|
-
}
|
|
262
|
-
ngOnDestroy() {
|
|
263
|
-
this._alive = false;
|
|
264
|
-
}
|
|
265
|
-
ngOnChanges(changes) {
|
|
266
|
-
if (Object.prototype.hasOwnProperty.call(changes, 'editType')) {
|
|
267
|
-
this._svc.editType = this.editType;
|
|
268
|
-
}
|
|
269
|
-
if (Object.prototype.hasOwnProperty.call(changes, 'selectType')) {
|
|
270
|
-
this._svc.selectType = this.selectType;
|
|
271
|
-
}
|
|
272
|
-
if (Object.prototype.hasOwnProperty.call(changes, 'selectedRows')) {
|
|
273
|
-
this._svc.selectRows(this.selectedRows);
|
|
274
|
-
}
|
|
275
|
-
if (Object.prototype.hasOwnProperty.call(changes, 'rowEditable')) {
|
|
276
|
-
this._svc.rowEditable = this.rowEditable;
|
|
277
|
-
}
|
|
278
|
-
if (Object.prototype.hasOwnProperty.call(changes, 'cookieName')) {
|
|
279
|
-
this._svc.setCookieName(this.cookieName);
|
|
280
|
-
}
|
|
281
|
-
if (Object.prototype.hasOwnProperty.call(changes, 'columns')) {
|
|
282
|
-
if (this.columns !== null && this.columns !== undefined) {
|
|
283
|
-
this._svc.setColumns(this.columns);
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
if (Object.prototype.hasOwnProperty.call(changes, 'data')) {
|
|
287
|
-
this._svc.setData(this.data);
|
|
288
|
-
this._svc.selectRows(this.data?.filter((row) => {
|
|
289
|
-
return this.selectedRows?.some((selectedRow) => this.trackRow(this._svc.getRowIndex(selectedRow), selectedRow) ===
|
|
290
|
-
this.trackRow(this._svc.getRowIndex(row), row));
|
|
291
|
-
}));
|
|
292
|
-
}
|
|
293
|
-
if (Object.prototype.hasOwnProperty.call(changes, 'dict')) {
|
|
294
|
-
this._svc.setDict(this.dict);
|
|
295
|
-
this._svc.setFilterOptions(this.dict);
|
|
296
|
-
}
|
|
297
|
-
if (Object.prototype.hasOwnProperty.call(changes, 'filterOptions')) {
|
|
298
|
-
this._svc.setFilterOptions(this.filterOptions);
|
|
299
|
-
}
|
|
300
|
-
if (Object.prototype.hasOwnProperty.call(changes, 'trackRow')) {
|
|
301
|
-
this._svc.trackRow = this.trackRow;
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
setContextMenuOpen(value) {
|
|
305
|
-
this.contextMenuOpen = value;
|
|
306
|
-
this.contextMenuOpenChange.emit(this.contextMenuOpen);
|
|
307
|
-
}
|
|
308
|
-
setContextMenuRow(event) {
|
|
309
|
-
this.contextMenuRow = null;
|
|
310
|
-
const rowElement = this._svc.getEventRow(event);
|
|
311
|
-
if (rowElement) {
|
|
312
|
-
const rowIndex = parseInt(rowElement.getAttribute('data-row'), 10);
|
|
313
|
-
if (rowIndex >= 0) {
|
|
314
|
-
this.contextMenuRow = this._svc.getRowByIndex(rowIndex).data;
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
startEditRowOrCell(coordinates) {
|
|
319
|
-
if (this.editType === EditType.row) {
|
|
320
|
-
this._svc.startEditRow(coordinates);
|
|
321
|
-
}
|
|
322
|
-
if (this.editType === EditType.cell) {
|
|
323
|
-
this._svc.startEditCell(coordinates);
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
getCellElement(coordinates) {
|
|
327
|
-
return this._elementRef.nativeElement.querySelector(`teta-cell[data-row="${coordinates.row}"][data-column="${coordinates.column}"]`);
|
|
328
|
-
}
|
|
329
|
-
eventIsOnRow(event) {
|
|
330
|
-
const row = event.composedPath().find((target) => {
|
|
331
|
-
return target?.getAttribute && target?.getAttribute('data-row');
|
|
332
|
-
});
|
|
333
|
-
return row && this._elementRef.nativeElement.contains(row);
|
|
334
|
-
}
|
|
335
|
-
getCoordinates(event) {
|
|
336
|
-
if (event.composedPath().indexOf(this._elementRef.nativeElement) < 0) {
|
|
337
|
-
return null;
|
|
338
|
-
}
|
|
339
|
-
const cell = this._svc.getEventCell(event);
|
|
340
|
-
if (cell) {
|
|
341
|
-
const rowIndex = parseInt(cell.getAttribute('data-row'), 10);
|
|
342
|
-
const columnName = cell.getAttribute('data-column');
|
|
343
|
-
if (rowIndex >= 0 && columnName) {
|
|
344
|
-
return {
|
|
345
|
-
row: rowIndex,
|
|
346
|
-
column: columnName,
|
|
347
|
-
event,
|
|
348
|
-
};
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
return null;
|
|
352
|
-
}
|
|
353
|
-
getRow(event) {
|
|
354
|
-
if (event.composedPath().indexOf(this._elementRef.nativeElement) < 0) {
|
|
355
|
-
return null;
|
|
356
|
-
}
|
|
357
|
-
const rowElement = this._svc.getEventRow(event);
|
|
358
|
-
if (rowElement) {
|
|
359
|
-
const rowIndex = parseInt(rowElement.getAttribute('data-row'), 10);
|
|
360
|
-
if (rowIndex >= 0) {
|
|
361
|
-
return this._svc.getRowByIndex(rowIndex);
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
return null;
|
|
365
|
-
}
|
|
366
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: TableComponent, deps: [{ token: i1.TableService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
367
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.1", type: TableComponent, isStandalone: true, selector: "teta-table", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: false, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: false, isRequired: false, transformFunction: null }, dict: { classPropertyName: "dict", publicName: "dict", isSignal: false, isRequired: false, transformFunction: null }, filterOptions: { classPropertyName: "filterOptions", publicName: "filterOptions", isSignal: false, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: false, isRequired: false, transformFunction: null }, cookieName: { classPropertyName: "cookieName", publicName: "cookieName", isSignal: false, isRequired: false, transformFunction: null }, virtual: { classPropertyName: "virtual", publicName: "virtual", isSignal: false, isRequired: false, transformFunction: null }, detailComponent: { classPropertyName: "detailComponent", publicName: "detailComponent", isSignal: false, isRequired: false, transformFunction: null }, activeRow: { classPropertyName: "activeRow", publicName: "activeRow", isSignal: false, isRequired: false, transformFunction: null }, selectedRows: { classPropertyName: "selectedRows", publicName: "selectedRows", isSignal: false, isRequired: false, transformFunction: null }, selectType: { classPropertyName: "selectType", publicName: "selectType", isSignal: false, isRequired: false, transformFunction: null }, aggregate: { classPropertyName: "aggregate", publicName: "aggregate", isSignal: false, isRequired: false, transformFunction: null }, trackRow: { classPropertyName: "trackRow", publicName: "trackRow", isSignal: false, isRequired: false, transformFunction: null }, trackColumns: { classPropertyName: "trackColumns", publicName: "trackColumns", isSignal: false, isRequired: false, transformFunction: null }, editType: { classPropertyName: "editType", publicName: "editType", isSignal: false, isRequired: false, transformFunction: null }, editEvent: { classPropertyName: "editEvent", publicName: "editEvent", isSignal: false, isRequired: false, transformFunction: null }, rowEditable: { classPropertyName: "rowEditable", publicName: "rowEditable", isSignal: false, isRequired: false, transformFunction: null }, rowClass: { classPropertyName: "rowClass", publicName: "rowClass", isSignal: false, isRequired: false, transformFunction: null }, scrollToIndex: { classPropertyName: "scrollToIndex", publicName: "scrollToIndex", isSignal: false, isRequired: false, transformFunction: null }, showHeadCellMenu: { classPropertyName: "showHeadCellMenu", publicName: "showHeadCellMenu", isSignal: false, isRequired: false, transformFunction: null }, contextMenu: { classPropertyName: "contextMenu", publicName: "contextMenu", isSignal: false, isRequired: false, transformFunction: null }, contextMenuOpen: { classPropertyName: "contextMenuOpen", publicName: "contextMenuOpen", isSignal: false, isRequired: false, transformFunction: null }, rowHeight: { classPropertyName: "rowHeight", publicName: "rowHeight", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { contextMenuOpenChange: "contextMenuOpenChange", stateChange: "stateChange", bodyLeft: "bodyLeft", activeRowChange: "activeRowChange", selectedRowsChange: "selectedRowsChange", cellClick: "cellClick", cellDoubleClick: "cellDoubleClick", cellFocus: "cellFocus", cellKeyDown: "cellKeyDown", rowLeft: "rowLeft", rowEditStart: "rowEditStart", rowEditEnd: "rowEditEnd", cellEditStart: "cellEditStart", cellEditEnd: "cellEditEnd", valueChange: "valueChange", tableService: "tableService" }, host: { listeners: { "document:click": "handleClickOutsideAnyRow($event)", "focusin": "focusIn($event)", "dblclick": "dblclick($event)", "keydown": "keydown($event)", "mousedown": "mousedown($event)" }, properties: { "class.table": "this.tableClass" } }, providers: [TableService], viewQueries: [{ propertyName: "menu", first: true, predicate: ["contextMenu"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"column column_auto\">\n <teta-table-head style=\"z-index: 1\" [selectType]=\"selectType\" [showHeadCellMenu]=\"showHeadCellMenu\"></teta-table-head>\n <div\n class=\"column column_auto position-relative\"\n style=\"z-index: 0\"\n [tetaContextMenu]=\"contextMenu\"\n [verticalAlign]=\"verticalAlign.auto\"\n [align]=\"align.auto\"\n [appendToBody]=\"true\"\n [data]=\"contextMenuRow\"\n [open]=\"contextMenuOpen\"\n (openChange)=\"setContextMenuOpen($event)\"\n >\n <teta-table-body\n (contextmenu)=\"setContextMenuRow($event)\"\n (scrollChange)=\"onScroll($event)\"\n [aggregate]=\"aggregate\"\n [virtual]=\"virtual\"\n [activeRow]=\"activeRow\"\n [trackRow]=\"trackRow\"\n [trackColumns]=\"trackColumns\"\n [selectedRows]=\"selectedRowsList\"\n [additionalComponent]=\"detailComponent\"\n [selectType]=\"selectType\"\n [rowClass]=\"rowClass\"\n [rowHeight]=\"rowHeight()\"\n >\n <ng-content></ng-content>\n </teta-table-body>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: TableHeadComponent, selector: "teta-table-head", inputs: ["selectType", "showHeadCellMenu"] }, { kind: "directive", type: ContextMenuDirective, selector: "[tetaContextMenu]", inputs: ["tetaContextMenu", "autoCloseIgnore"] }, { kind: "component", type: TableBodyComponent, selector: "teta-table-body", inputs: ["virtual", "activeRow", "selectedRows", "additionalComponent", "aggregate", "selectType", "rowClass", "trackRow", "trackColumns", "rowHeight"], outputs: ["scrollChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
368
|
-
}
|
|
369
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: TableComponent, decorators: [{
|
|
370
|
-
type: Component,
|
|
371
|
-
args: [{ selector: 'teta-table', changeDetection: ChangeDetectionStrategy.OnPush, providers: [TableService], standalone: true, imports: [TableHeadComponent, ContextMenuDirective, TableBodyComponent], template: "<div class=\"column column_auto\">\n <teta-table-head style=\"z-index: 1\" [selectType]=\"selectType\" [showHeadCellMenu]=\"showHeadCellMenu\"></teta-table-head>\n <div\n class=\"column column_auto position-relative\"\n style=\"z-index: 0\"\n [tetaContextMenu]=\"contextMenu\"\n [verticalAlign]=\"verticalAlign.auto\"\n [align]=\"align.auto\"\n [appendToBody]=\"true\"\n [data]=\"contextMenuRow\"\n [open]=\"contextMenuOpen\"\n (openChange)=\"setContextMenuOpen($event)\"\n >\n <teta-table-body\n (contextmenu)=\"setContextMenuRow($event)\"\n (scrollChange)=\"onScroll($event)\"\n [aggregate]=\"aggregate\"\n [virtual]=\"virtual\"\n [activeRow]=\"activeRow\"\n [trackRow]=\"trackRow\"\n [trackColumns]=\"trackColumns\"\n [selectedRows]=\"selectedRowsList\"\n [additionalComponent]=\"detailComponent\"\n [selectType]=\"selectType\"\n [rowClass]=\"rowClass\"\n [rowHeight]=\"rowHeight()\"\n >\n <ng-content></ng-content>\n </teta-table-body>\n </div>\n</div>\n" }]
|
|
372
|
-
}], ctorParameters: () => [{ type: i1.TableService }, { type: i0.ElementRef }], propDecorators: { data: [{
|
|
373
|
-
type: Input
|
|
374
|
-
}], columns: [{
|
|
375
|
-
type: Input
|
|
376
|
-
}], dict: [{
|
|
377
|
-
type: Input
|
|
378
|
-
}], filterOptions: [{
|
|
379
|
-
type: Input
|
|
380
|
-
}], state: [{
|
|
381
|
-
type: Input
|
|
382
|
-
}], cookieName: [{
|
|
383
|
-
type: Input
|
|
384
|
-
}], virtual: [{
|
|
385
|
-
type: Input
|
|
386
|
-
}], detailComponent: [{
|
|
387
|
-
type: Input
|
|
388
|
-
}], activeRow: [{
|
|
389
|
-
type: Input
|
|
390
|
-
}], selectedRows: [{
|
|
391
|
-
type: Input
|
|
392
|
-
}], selectType: [{
|
|
393
|
-
type: Input
|
|
394
|
-
}], aggregate: [{
|
|
395
|
-
type: Input
|
|
396
|
-
}], trackRow: [{
|
|
397
|
-
type: Input
|
|
398
|
-
}], trackColumns: [{
|
|
399
|
-
type: Input
|
|
400
|
-
}], editType: [{
|
|
401
|
-
type: Input
|
|
402
|
-
}], editEvent: [{
|
|
403
|
-
type: Input
|
|
404
|
-
}], rowEditable: [{
|
|
405
|
-
type: Input
|
|
406
|
-
}], rowClass: [{
|
|
407
|
-
type: Input
|
|
408
|
-
}], scrollToIndex: [{
|
|
409
|
-
type: Input
|
|
410
|
-
}], showHeadCellMenu: [{
|
|
411
|
-
type: Input
|
|
412
|
-
}], contextMenu: [{
|
|
413
|
-
type: Input
|
|
414
|
-
}], contextMenuOpen: [{
|
|
415
|
-
type: Input
|
|
416
|
-
}], contextMenuOpenChange: [{
|
|
417
|
-
type: Output
|
|
418
|
-
}], stateChange: [{
|
|
419
|
-
type: Output
|
|
420
|
-
}], bodyLeft: [{
|
|
421
|
-
type: Output
|
|
422
|
-
}], activeRowChange: [{
|
|
423
|
-
type: Output
|
|
424
|
-
}], selectedRowsChange: [{
|
|
425
|
-
type: Output
|
|
426
|
-
}], cellClick: [{
|
|
427
|
-
type: Output
|
|
428
|
-
}], cellDoubleClick: [{
|
|
429
|
-
type: Output
|
|
430
|
-
}], cellFocus: [{
|
|
431
|
-
type: Output
|
|
432
|
-
}], cellKeyDown: [{
|
|
433
|
-
type: Output
|
|
434
|
-
}], rowLeft: [{
|
|
435
|
-
type: Output
|
|
436
|
-
}], rowEditStart: [{
|
|
437
|
-
type: Output
|
|
438
|
-
}], rowEditEnd: [{
|
|
439
|
-
type: Output
|
|
440
|
-
}], cellEditStart: [{
|
|
441
|
-
type: Output
|
|
442
|
-
}], cellEditEnd: [{
|
|
443
|
-
type: Output
|
|
444
|
-
}], valueChange: [{
|
|
445
|
-
type: Output
|
|
446
|
-
}], tableService: [{
|
|
447
|
-
type: Output
|
|
448
|
-
}], menu: [{
|
|
449
|
-
type: ViewChild,
|
|
450
|
-
args: ['contextMenu', { static: true }]
|
|
451
|
-
}], tableClass: [{
|
|
452
|
-
type: HostBinding,
|
|
453
|
-
args: ['class.table']
|
|
454
|
-
}], handleClickOutsideAnyRow: [{
|
|
455
|
-
type: HostListener,
|
|
456
|
-
args: ['document:click', ['$event']]
|
|
457
|
-
}], focusIn: [{
|
|
458
|
-
type: HostListener,
|
|
459
|
-
args: ['focusin', ['$event']]
|
|
460
|
-
}], dblclick: [{
|
|
461
|
-
type: HostListener,
|
|
462
|
-
args: ['dblclick', ['$event']]
|
|
463
|
-
}], keydown: [{
|
|
464
|
-
type: HostListener,
|
|
465
|
-
args: ['keydown', ['$event']]
|
|
466
|
-
}], mousedown: [{
|
|
467
|
-
type: HostListener,
|
|
468
|
-
args: ['mousedown', ['$event']]
|
|
469
|
-
}] } });
|
|
470
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudC90YWJsZS90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBQ0wsS0FBSyxFQUlMLE1BQU0sRUFFTixXQUFXLEVBQ1gsSUFBSSxFQUNKLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSW5ELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDekUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQU9oRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDOUYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENB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RGtCLHdCQUF3QjtzQkFBbkUsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkF5Q0wsT0FBTztzQkFBM0MsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBY25DLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBaUJwQyxPQUFPO3NCQUROLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQXdGSSxTQUFTO3NCQUEvQyxZQUFZO3VCQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgaW5wdXQsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBUeXBlLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlV2hpbGUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IElEaWN0aW9uYXJ5IH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2NvbnRyYWN0L2ktZGljdGlvbmFyeSc7XG5pbXBvcnQgeyBJSWROYW1lIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2NvbnRyYWN0L2ktaWQtbmFtZSc7XG5pbXBvcnQgeyBBbGlnbiB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9lbnVtL2FsaWduLmVudW0nO1xuaW1wb3J0IHsgVmVydGljYWxBbGlnbiB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9lbnVtL3ZlcnRpY2FsLWFsaWduLmVudW0nO1xuaW1wb3J0IHsgRmlsdGVyU3RhdGUgfSBmcm9tICcuLi8uLi9maWx0ZXIvY29udGFyY3QvZmlsdGVyLXN0YXRlJztcbmltcG9ydCB7IEZpbHRlclR5cGUgfSBmcm9tICcuLi8uLi9maWx0ZXIvZW51bS9maWx0ZXItdHlwZS5lbnVtJztcbmltcG9ydCB7IERldGFpbENvbXBvbmVudEJhc2UgfSBmcm9tICcuLi9iYXNlL2RldGFpbC1jb21wb25lbnQtYmFzZSc7XG5pbXBvcnQgeyBJQ2VsbENvb3JkaW5hdGVzIH0gZnJvbSAnLi4vY29udHJhY3QvaS1jZWxsLWNvb3JkaW5hdGVzJztcbmltcG9ydCB7IElDZWxsRXZlbnQgfSBmcm9tICcuLi9jb250cmFjdC9pLWNlbGwtZXZlbnQnO1xuaW1wb3J0IHsgSUNlbGxJbnN0YW5jZSwgSUNlbGxJbnN0YW5jZUV2ZW50IH0gZnJvbSAnLi4vY29udHJhY3QvaS1jZWxsLWluc3RhbmNlJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uIH0gZnJvbSAnLi4vY29udHJhY3QvdGFibGUtY29sdW1uJztcbmltcG9ydCB7IFRhYmxlUm93IH0gZnJvbSAnLi4vY29udHJhY3QvdGFibGUtcm93JztcbmltcG9ydCB7IEVkaXRFdmVudCB9IGZyb20gJy4uL2VudW0vZWRpdC1ldmVudC5lbnVtJztcbmltcG9ydCB7IEVkaXRUeXBlIH0gZnJvbSAnLi4vZW51bS9lZGl0LXR5cGUuZW51bSc7XG5pbXBvcnQgeyBTZWxlY3RUeXBlIH0gZnJvbSAnLi4vZW51bS9zZWxlY3QtdHlwZS5lbnVtJztcbmltcG9ydCB7IFRhYmxlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2UvdGFibGUuc2VydmljZSc7XG5pbXBvcnQgeyBUYWJsZUJvZHlDb21wb25lbnQgfSBmcm9tICcuLi90YWJsZS1ib2R5L3RhYmxlLWJvZHkuY29tcG9uZW50JztcbmltcG9ydCB7IENvbnRleHRNZW51RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2NvbnRleHQtbWVudS9jb250ZXh0LW1lbnUuZGlyZWN0aXZlJztcbmltcG9ydCB7IFRhYmxlSGVhZENvbXBvbmVudCB9IGZyb20gJy4uL3RhYmxlLWhlYWQvdGFibGUtaGVhZC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZXRhLXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1RhYmxlU2VydmljZV0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtUYWJsZUhlYWRDb21wb25lbnQsIENvbnRleHRNZW51RGlyZWN0aXZlLCBUYWJsZUJvZHlDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBkYXRhOiBUW10gPSBbXTtcbiAgQElucHV0KCkgY29sdW1uczogVGFibGVDb2x1bW5bXSA9IFtdO1xuICBASW5wdXQoKSBkaWN0OiBJRGljdGlvbmFyeTxJSWROYW1lPGFueT5bXT47XG4gIEBJbnB1dCgpIGZpbHRlck9wdGlvbnM6IElEaWN0aW9uYXJ5PElJZE5hbWU8YW55PltdPjtcblxuICBASW5wdXQoKVxuICBzZXQgc3RhdGUoc3RhdGU6IEZpbHRlclN0YXRlKSB7XG4gICAgdGhpcy5fc3RhdGUgPSBzdGF0ZTtcbiAgfVxuXG4gIEBJbnB1dCgpIGNvb2tpZU5hbWU6IHN0cmluZztcbiAgQElucHV0KCkgdmlydHVhbDogYm9vbGVhbjtcbiAgQElucHV0KCkgZGV0YWlsQ29tcG9uZW50OiBUeXBlPERldGFpbENvbXBvbmVudEJhc2U8VD4+O1xuICBASW5wdXQoKSBhY3RpdmVSb3c6IFQ7XG4gIEBJbnB1dCgpIHNlbGVjdGVkUm93czogVFtdO1xuICBASW5wdXQoKSBzZWxlY3RUeXBlOiBTZWxlY3RUeXBlID0gU2VsZWN0VHlwZS5tb3VzZTtcbiAgQElucHV0KCkgYWdncmVnYXRlOiBib29sZWFuO1xuICBASW5wdXQoKSB0cmFja1JvdzogKGluZGV4OiBudW1iZXIsIHJvdzogVCkgPT4gYW55ID0gKGluZGV4OiBudW1iZXIsIHJvdzogVCkgPT4ge1xuICAgIGlmIChyb3dbJ2lkJ10pIHtcbiAgICAgIHJldHVybiByb3dbJ2lkJ107XG4gICAgfVxuICAgIHJldHVybiBpbmRleDtcbiAgfTtcbiAgQElucHV0KCkgdHJhY2tDb2x1bW5zOiAoaW5kZXg6IG51bWJlciwgY29sdW1uOiBUYWJsZUNvbHVtbikgPT4gYW55ID0gKGluZGV4OiBudW1iZXIsIGNvbHVtbjogVGFibGVDb2x1bW4pID0+IHtcbiAgICByZXR1cm4gY29sdW1uLm5hbWU7XG4gIH07XG4gIEBJbnB1dCgpIGVkaXRUeXBlOiBFZGl0VHlwZSA9IEVkaXRUeXBlLmNlbGw7XG4gIEBJbnB1dCgpIGVkaXRFdmVudDogRWRpdEV2ZW50ID0gRWRpdEV2ZW50LmRvdWJsZUNsaWNrO1xuICBASW5wdXQoKSByb3dFZGl0YWJsZTogYm9vbGVhbiB8ICgocm93OiBUKSA9PiBib29sZWFuKTtcbiAgQElucHV0KCkgcm93Q2xhc3M6IChyb3c6IFQsIGluZGV4PzogbnVtYmVyKSA9PiBzdHJpbmc7XG5cbiAgQElucHV0KCkgc2V0IHNjcm9sbFRvSW5kZXgoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuX3N2Yy5zY3JvbGxUb0luZGV4KGluZGV4KTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNob3dIZWFkQ2VsbE1lbnUgPSB0cnVlO1xuICBASW5wdXQoKSBjb250ZXh0TWVudTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KCkgY29udGV4dE1lbnVPcGVuOiBib29sZWFuO1xuICBAT3V0cHV0KCkgY29udGV4dE1lbnVPcGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIEBPdXRwdXQoKVxuICBzdGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPEZpbHRlclN0YXRlPiA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsdGVyU3RhdGU+KCk7XG4gIEBPdXRwdXQoKSBib2R5TGVmdCA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcbiAgQE91dHB1dCgpIGFjdGl2ZVJvd0NoYW5nZTogRXZlbnRFbWl0dGVyPFQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgc2VsZWN0ZWRSb3dzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VFtdPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGNlbGxDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8SUNlbGxJbnN0YW5jZUV2ZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgY2VsbERvdWJsZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2VsbEluc3RhbmNlRXZlbnQ8VD4+KCk7XG4gIEBPdXRwdXQoKSBjZWxsRm9jdXMgPSBuZXcgRXZlbnRFbWl0dGVyPElDZWxsSW5zdGFuY2VFdmVudDxUPj4oKTtcbiAgQE91dHB1dCgpIGNlbGxLZXlEb3duID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2VsbEluc3RhbmNlRXZlbnQ8VD4+KCk7XG4gIEBPdXRwdXQoKSByb3dMZWZ0ID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xuICBAT3V0cHV0KCkgcm93RWRpdFN0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2VsbEluc3RhbmNlPFQ+PigpO1xuICBAT3V0cHV0KCkgcm93RWRpdEVuZCA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVSb3c8VD4+KCk7XG4gIEBPdXRwdXQoKSBjZWxsRWRpdFN0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2VsbEluc3RhbmNlPFQ+PigpO1xuICBAT3V0cHV0KCkgY2VsbEVkaXRFbmQgPSBuZXcgRXZlbnRFbWl0dGVyPElDZWxsSW5zdGFuY2U8VD4+KCk7XG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8SUNlbGxJbnN0YW5jZTxUPj4oKTtcbiAgQE91dHB1dCgpIHRhYmxlU2VydmljZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVTZXJ2aWNlPFQ+PigpO1xuICBAVmlld0NoaWxkKCdjb250ZXh0TWVudScsIHsgc3RhdGljOiB0cnVlIH0pIG1lbnU6IEVsZW1lbnRSZWY7XG4gIEBIb3N0QmluZGluZygnY2xhc3MudGFibGUnKSBwcml2YXRlIHJlYWRvbmx5IHRhYmxlQ2xhc3MgPSB0cnVlO1xuICByb3dIZWlnaHQgPSBpbnB1dDxudW1iZXI+KDI4KTtcblxuICBzZWxlY3RlZFJvd3NMaXN0OiBUW107XG4gIGNvbnRleHRNZW51Um93OiBUO1xuICB2ZXJ0aWNhbEFsaWduID0gVmVydGljYWxBbGlnbjtcbiAgYWxpZ24gPSBBbGlnbjtcbiAgcHJpdmF0ZSBfYWxpdmUgPSB0cnVlO1xuICBwcml2YXRlIF9oZWFkRWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX3N0YXRlOiBGaWx0ZXJTdGF0ZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9zdmM6IFRhYmxlU2VydmljZTxUPixcbiAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICApIHtcbiAgICB0aGlzLl9zdmMuc3RhdGVcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlV2hpbGUoKCkgPT4gdGhpcy5fYWxpdmUpLFxuICAgICAgICBmaWx0ZXIoKHN0YXRlKSA9PiBzdGF0ZSAhPT0gdGhpcy5fc3RhdGUpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoc3RhdGU6IEZpbHRlclN0YXRlKSA9PiB0aGlzLnN0YXRlQ2hhbmdlLm5leHQoc3RhdGUpKTtcblxuICAgIHRoaXMuX3N2Yy5lZGl0Q2VsbFN0YXJ0XG4gICAgICAucGlwZSh0YWtlV2hpbGUoKCkgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgLnN1YnNjcmliZSgoaXRlbTogSUNlbGxFdmVudCkgPT4gdGhpcy5jZWxsRWRpdFN0YXJ0LmVtaXQodGhpcy5fc3ZjLmdldENlbGxJbnN0YW5jZShpdGVtKSkpO1xuXG4gICAgdGhpcy5fc3ZjLmVkaXRDZWxsU3RvcFxuICAgICAgLnBpcGUodGFrZVdoaWxlKCgpID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGl0ZW06IElDZWxsQ29vcmRpbmF0ZXMpID0+IHRoaXMuY2VsbEVkaXRFbmQuZW1pdCh0aGlzLl9zdmMuZ2V0Q2VsbEluc3RhbmNlKGl0ZW0pKSk7XG5cbiAgICB0aGlzLl9zdmMuZWRpdFJvd1N0YXJ0XG4gICAgICAucGlwZSh0YWtlV2hpbGUoKCkgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgLnN1YnNjcmliZSgoaXRlbTogSUNlbGxFdmVudCkgPT4gdGhpcy5yb3dFZGl0U3RhcnQuZW1pdCh0aGlzLl9zdmMuZ2V0Q2VsbEluc3RhbmNlKGl0ZW0pKSk7XG5cbiAgICB0aGlzLl9zdmMuZWRpdFJvd1N0b3BcbiAgICAgIC5waXBlKHRha2VXaGlsZSgoKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKChpdGVtOiBJQ2VsbENvb3JkaW5hdGVzKSA9PiB0aGlzLnJvd0VkaXRFbmQuZW1pdCh0aGlzLl9zdmMuZ2V0Um93QnlJbmRleChpdGVtPy5yb3cpKSk7XG5cbiAgICB0aGlzLl9zdmMuc2VsZWN0ZWRSb3dzLnBpcGUodGFrZVdoaWxlKCgpID0+IHRoaXMuX2FsaXZlKSkuc3Vic2NyaWJlKChpdGVtczogVFtdKSA9PiB7XG4gICAgICB0aGlzLnNlbGVjdGVkUm93c0xpc3QgPSBpdGVtcztcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlLmVtaXQoaXRlbXMpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fc3ZjLmFjdGl2ZVJvdy5waXBlKHRha2VXaGlsZSgoKSA9PiB0aGlzLl9hbGl2ZSkpLnN1YnNjcmliZSgoaXRlbTogVCkgPT4ge1xuICAgICAgdGhpcy5hY3RpdmVSb3cgPSBpdGVtO1xuICAgICAgdGhpcy5hY3RpdmVSb3dDaGFuZ2UuZW1pdChpdGVtKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3N2Yy52YWx1ZUNoYW5nZWQucGlwZSh0YWtlV2hpbGUoKCkgPT4gdGhpcy5fYWxpdmUpKS5zdWJzY3JpYmUoKGNvb3JkaW5hdGVzOiBJQ2VsbENvb3JkaW5hdGVzKSA9PiB7XG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5fc3ZjLmdldENlbGxJbnN0YW5jZShjb29yZGluYXRlcykpO1xuICAgIH0pO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKSBoYW5kbGVDbGlja091dHNpZGVBbnlSb3coZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBjb25zdCBjb29yZGluYXRlcyA9IHRoaXMuZ2V0Q29vcmRpbmF0ZXMoZXZlbnQpO1xuICAgIGNvbnN0IHJvdyA9IHRoaXMuZ2V0Um93KGV2ZW50KTtcbiAgICBjb25zdCBldmVudElzT25Sb3cgPSB0aGlzLmV2ZW50SXNPblJvdyhldmVudCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoY29vcmRpbmF0ZXMpIHtcbiAgICAgICAgdGhpcy5jZWxsQ2xpY2suZW1pdCh7XG4gICAgICAgICAgLi4udGhpcy5fc3ZjLmdldENlbGxJbnN0YW5jZShjb29yZGluYXRlcyksXG4gICAgICAgICAgZXZlbnQsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5lZGl0RXZlbnQgPT09IEVkaXRFdmVudC5jbGljaykge1xuICAgICAgICAgIHRoaXMuc3RhcnRFZGl0Um93T3JDZWxsKGNvb3JkaW5hdGVzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLl9zdmMuY3VycmVudEVkaXRDZWxsICYmXG4gICAgICAgICAgICAoY29vcmRpbmF0ZXMucm93ICE9PSB0aGlzLl9zdmMuY3VycmVudEVkaXRDZWxsLnJvdyB8fFxuICAgICAgICAgICAgICBjb29yZGluYXRlcy5jb2x1bW4gIT09IHRoaXMuX3N2Yy5jdXJyZW50RWRpdENlbGwuY29sdW1uKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zdGFydEVkaXRSb3dPckNlbGwobnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocm93KSB7XG4gICAgICAgIGlmIChldmVudC5jdHJsS2V5KSB7XG4gICAgICAgICAgdGhpcy5fc3ZjLnNlbGVjdE9yRGVzZWxlY3RSb3cocm93LmRhdGEpO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgdGhpcy5fc3ZjLnNlbGVjdFJhbmdlKHJvdy5kYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9zdmMuc2VsZWN0Um93cyhbcm93LmRhdGFdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFldmVudElzT25Sb3cgJiYgIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgaWYgKHRoaXMuZWRpdFR5cGUgPT09IEVkaXRUeXBlLnJvdykge1xuICAgICAgICAgIHRoaXMuX3N2Yy5zdGFydEVkaXRSb3cobnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fc3ZjLnN0YXJ0RWRpdENlbGwobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2ZvY3VzaW4nLCBbJyRldmVudCddKSBmb2N1c0luKGV2ZW50OiBGb2N1c0V2ZW50KSB7XG4gICAgY29uc3QgY29vcmRpbmF0ZXMgPSB0aGlzLmdldENvb3JkaW5hdGVzKGV2ZW50KTtcbiAgICBpZiAoY29vcmRpbmF0ZXMpIHtcbiAgICAgIHRoaXMuY2VsbEZvY3VzLmVtaXQoe1xuICAgICAgICAuLi50aGlzLl9zdmMuZ2V0Q2VsbEluc3RhbmNlKGNvb3JkaW5hdGVzKSxcbiAgICAgICAgZXZlbnQsXG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLmVkaXRFdmVudCA9PT0gRWRpdEV2ZW50LmZvY3VzKSB7XG4gICAgICAgIHRoaXMuc3RhcnRFZGl0Um93T3JDZWxsKGNvb3JkaW5hdGVzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkYmxjbGljaycsIFsnJGV2ZW50J10pXG4gIGRibGNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgY29uc3QgY29vcmRpbmF0ZXMgPSB0aGlzLmdldENvb3JkaW5hdGVzKGV2ZW50KTtcbiAgICBpZiAoY29vcmRpbmF0ZXMpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmNlbGxEb3VibGVDbGljay5lbWl0KHtcbiAgICAgICAgICAuLi50aGlzLl9zdmMuZ2V0Q2VsbEluc3RhbmNlKGNvb3JkaW5hdGVzKSxcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLmVkaXRFdmVudCA9PT0gRWRpdEV2ZW50LmRvdWJsZUNsaWNrKSB7XG4gICAgICAgICAgdGhpcy5zdGFydEVkaXRSb3dPckNlbGwoY29vcmRpbmF0ZXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAga2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmIChldmVudC5jdHJsS2V5KSB7XG4gICAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ0tleUEnKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuX3N2Yy5zZWxlY3RBbGwoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIHRoaXMuX3N2Yy5kZXNlbGVjdEFsbCgpO1xuICAgICAgaWYgKHRoaXMuZWRpdFR5cGUgPT09IEVkaXRUeXBlLnJvdykge1xuICAgICAgICB0aGlzLl9zdmMuc3RhcnRFZGl0Um93KG51bGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fc3ZjLnN0YXJ0RWRpdENlbGwobnVsbCk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gdGhpcy5nZXRDb29yZGluYXRlcyhldmVudCk7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgaWYgKHRoaXMuZWRpdFR5cGUgPT09IEVkaXRUeXBlLnJvdykge1xuICAgICAgICB0aGlzLl9zdmMuc3RhcnRFZGl0Um93KG51bGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuX3N2Yy5jdXJyZW50RWRpdENlbGwpIHtcbiAgICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLl9zdmMuZ2V0TmV4dFJvd0NlbGwoY29vcmRpbmF0ZXMpO1xuICAgICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRFZGl0Um93T3JDZWxsKHtcbiAgICAgICAgICAgICAgcm93OiB0YXJnZXQucm93LFxuICAgICAgICAgICAgICBjb2x1bW46IHRhcmdldC5jb2x1bW4sXG4gICAgICAgICAgICAgIGV2ZW50OiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fc3ZjLnN0YXJ0RWRpdENlbGwobnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjb29yZGluYXRlcykge1xuICAgICAgdGhpcy5jZWxsS2V5RG93bi5lbWl0KHtcbiAgICAgICAgLi4udGhpcy5fc3ZjLmdldENlbGxJbnN0YW5jZShjb29yZGluYXRlcyksXG4gICAgICAgIGV2ZW50LFxuICAgICAgfSk7XG4gICAgICBpZiAoZXZlbnQua2V5ICYmIChldmVudC5rZXkubGVuZ3RoID09PSAxIHx8IGV2ZW50LmtleSA9PT0gJ0RlbGV0ZScpKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuX3N2Yy5nZXRDb2x1bW5CeU5hbWUoY29vcmRpbmF0ZXMuY29sdW1uKTtcbiAgICAgICAgaWYgKGNvbHVtbi5maWx0ZXJUeXBlICE9PSBGaWx0ZXJUeXBlLm51bWJlciB8fCBpc0Zpbml0ZShldmVudC5rZXkgYXMgYW55KSkge1xuICAgICAgICAgIHRoaXMuc3RhcnRFZGl0Um93T3JDZWxsKHtcbiAgICAgICAgICAgIHJvdzogY29vcmRpbmF0ZXMucm93LFxuICAgICAgICAgICAgY29sdW1uOiBjb29yZGluYXRlcy5jb2x1bW4sXG4gICAgICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdUYWInICYmIHRoaXMuX3N2Yy5jdXJyZW50RWRpdENlbGwpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgbGV0IHRhcmdldCA9IHRoaXMuX3N2Yy5nZXROZXh0RWRpdGFibGVDZWxsKGNvb3JkaW5hdGVzKTtcbiAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgdGFyZ2V0ID0gdGhpcy5fc3ZjLmdldFByZXZpb3VzRWRpdGFibGVDZWxsKGNvb3JkaW5hdGVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgICAgdGhpcy5zdGFydEVkaXRSb3dPckNlbGwoe1xuICAgICAgICAgICAgcm93OiB0YXJnZXQucm93LFxuICAgICAgICAgICAgY29sdW1uOiB0YXJnZXQuY29sdW1uLFxuICAgICAgICAgICAgZXZlbnQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLl9zdmMuY3VycmVudEVkaXRDZWxsKSB7XG4gICAgICAgIGxldCB0YXJnZXQ7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgICAgIHRhcmdldCA9IHRoaXMuX3N2Yy5nZXROZXh0Q2VsbChjb29yZGluYXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgICAgICB0YXJnZXQgPSB0aGlzLl9zdmMuZ2V0UHJldmlvdXNDZWxsKGNvb3JkaW5hdGVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgICAgICB0YXJnZXQgPSB0aGlzLl9zdmMuZ2V0UHJldmlvdXNSb3dDZWxsKGNvb3JkaW5hdGVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgICAgIHRhcmdldCA9IHRoaXMuX3N2Yy5nZXROZXh0Um93Q2VsbChjb29yZGluYXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZ2V0Q2VsbEVsZW1lbnQodGFyZ2V0KTtcbiAgICAgICAgICBlbGVtZW50Py5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJywgWyckZXZlbnQnXSkgbW91c2Vkb3duKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmJ1dHRvbiA9PT0gMikge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdmMucmVzdG9yZVN0YXRlKCk7XG4gICAgdGhpcy5fc3ZjLnJlc3RvcmVIaWRkZW5Db2x1bW5zKCk7XG4gICAgdGhpcy50YWJsZVNlcnZpY2UuZW1pdCh0aGlzLl9zdmMpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX2hlYWRFbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy50YWJsZS1oZWFkJyk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9hbGl2ZSA9IGZhbHNlO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlcywgJ2VkaXRUeXBlJykpIHtcbiAgICAgIHRoaXMuX3N2Yy5lZGl0VHlwZSA9IHRoaXMuZWRpdFR5cGU7XG4gICAgfVxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlcywgJ3NlbGVjdFR5cGUnKSkge1xuICAgICAgdGhpcy5fc3ZjLnNlbGVjdFR5cGUgPSB0aGlzLnNlbGVjdFR5cGU7XG4gICAgfVxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlcywgJ3NlbGVjdGVkUm93cycpKSB7XG4gICAgICB0aGlzLl9zdmMuc2VsZWN0Um93cyh0aGlzLnNlbGVjdGVkUm93cyk7XG4gICAgfVxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlcywgJ3Jvd0VkaXRhYmxlJykpIHtcbiAgICAgIHRoaXMuX3N2Yy5yb3dFZGl0YWJsZSA9IHRoaXMucm93RWRpdGFibGU7XG4gICAgfVxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlcywgJ2Nvb2tpZU5hbWUnKSkge1xuICAgICAgdGhpcy5fc3ZjLnNldENvb2tpZU5hbWUodGhpcy5jb29raWVOYW1lKTtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAnY29sdW1ucycpKSB7XG4gICAgICBpZiAodGhpcy5jb2x1bW5zICE9PSBudWxsICYmIHRoaXMuY29sdW1ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX3N2Yy5zZXRDb2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlcywgJ2RhdGEnKSkge1xuICAgICAgdGhpcy5fc3ZjLnNldERhdGEodGhpcy5kYXRhKTtcbiAgICAgIHRoaXMuX3N2Yy5zZWxlY3RSb3dzKFxuICAgICAgICB0aGlzLmRhdGE/LmZpbHRlcigocm93KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRSb3dzPy5zb21lKFxuICAgICAgICAgICAgKHNlbGVjdGVkUm93KSA9PlxuICAgICAgICAgICAgICB0aGlzLnRyYWNrUm93KHRoaXMuX3N2Yy5nZXRSb3dJbmRleChzZWxlY3RlZFJvdyksIHNlbGVjdGVkUm93KSA9PT1cbiAgICAgICAgICAgICAgdGhpcy50cmFja1Jvdyh0aGlzLl9zdmMuZ2V0Um93SW5kZXgocm93KSwgcm93KSxcbiAgICAgICAgICApO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlcywgJ2RpY3QnKSkge1xuICAgICAgdGhpcy5fc3ZjLnNldERpY3QodGhpcy5kaWN0KTtcbiAgICAgIHRoaXMuX3N2Yy5zZXRGaWx0ZXJPcHRpb25zKHRoaXMuZGljdCk7XG4gICAgfVxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlcywgJ2ZpbHRlck9wdGlvbnMnKSkge1xuICAgICAgdGhpcy5fc3ZjLnNldEZpbHRlck9wdGlvbnModGhpcy5maWx0ZXJPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAndHJhY2tSb3cnKSkge1xuICAgICAgdGhpcy5fc3ZjLnRyYWNrUm93ID0gdGhpcy50cmFja1JvdztcbiAgICB9XG4gIH1cblxuICBzZXRDb250ZXh0TWVudU9wZW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNvbnRleHRNZW51T3BlbiA9IHZhbHVlO1xuICAgIHRoaXMuY29udGV4dE1lbnVPcGVuQ2hhbmdlLmVtaXQodGhpcy5jb250ZXh0TWVudU9wZW4pO1xuICB9XG5cbiAgc2V0Q29udGV4dE1lbnVSb3coZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLmNvbnRleHRNZW51Um93ID0gbnVsbDtcbiAgICBjb25zdCByb3dFbGVtZW50ID0gdGhpcy5fc3ZjLmdldEV2ZW50Um93KGV2ZW50KTtcbiAgICBpZiAocm93RWxlbWVudCkge1xuICAgICAgY29uc3Qgcm93SW5kZXggPSBwYXJzZUludChyb3dFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1yb3cnKSwgMTApO1xuICAgICAgaWYgKHJvd0luZGV4ID49IDApIHtcbiAgICAgICAgdGhpcy5jb250ZXh0TWVudVJvdyA9IHRoaXMuX3N2Yy5nZXRSb3dCeUluZGV4KHJvd0luZGV4KS5kYXRhO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRFZGl0Um93T3JDZWxsKGNvb3JkaW5hdGVzOiBJQ2VsbEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZWRpdFR5cGUgPT09IEVkaXRUeXBlLnJvdykge1xuICAgICAgdGhpcy5fc3ZjLnN0YXJ0RWRpdFJvdyhjb29yZGluYXRlcyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmVkaXRUeXBlID09PSBFZGl0VHlwZS5jZWxsKSB7XG4gICAgICB0aGlzLl9zdmMuc3RhcnRFZGl0Q2VsbChjb29yZGluYXRlcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRDZWxsRWxlbWVudChjb29yZGluYXRlczogSUNlbGxDb29yZGluYXRlcyk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgYHRldGEtY2VsbFtkYXRhLXJvdz1cIiR7Y29vcmRpbmF0ZXMucm93fVwiXVtkYXRhLWNvbHVtbj1cIiR7Y29vcmRpbmF0ZXMuY29sdW1ufVwiXWAsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZXZlbnRJc09uUm93KGV2ZW50OiBFdmVudCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJvdyA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpLmZpbmQoKHRhcmdldCkgPT4ge1xuICAgICAgcmV0dXJuICh0YXJnZXQgYXMgSFRNTEVsZW1lbnQpPy5nZXRBdHRyaWJ1dGUgJiYgKHRhcmdldCBhcyBIVE1MRWxlbWVudCk/LmdldEF0dHJpYnV0ZSgnZGF0YS1yb3cnKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcm93ICYmIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhyb3cpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb29yZGluYXRlcyhldmVudDogRXZlbnQpOiBJQ2VsbEV2ZW50IHwgbnVsbCB7XG4gICAgaWYgKGV2ZW50LmNvbXBvc2VkUGF0aCgpLmluZGV4T2YodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSA8IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBjZWxsID0gdGhpcy5fc3ZjLmdldEV2ZW50Q2VsbChldmVudCk7XG4gICAgaWYgKGNlbGwpIHtcbiAgICAgIGNvbnN0IHJvd0luZGV4ID0gcGFyc2VJbnQoY2VsbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcm93JyksIDEwKTtcbiAgICAgIGNvbnN0IGNvbHVtbk5hbWUgPSBjZWxsLmdldEF0dHJpYnV0ZSgnZGF0YS1jb2x1bW4nKTtcbiAgICAgIGlmIChyb3dJbmRleCA+PSAwICYmIGNvbHVtbk5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByb3c6IHJvd0luZGV4LFxuICAgICAgICAgIGNvbHVtbjogY29sdW1uTmFtZSxcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldFJvdyhldmVudDogRXZlbnQpOiBUYWJsZVJvdzxUPiB8IG51bGwge1xuICAgIGlmIChldmVudC5jb21wb3NlZFBhdGgoKS5pbmRleE9mKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkgPCAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qgcm93RWxlbWVudCA9IHRoaXMuX3N2Yy5nZXRFdmVudFJvdyhldmVudCk7XG4gICAgaWYgKHJvd0VsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHJvd0luZGV4ID0gcGFyc2VJbnQocm93RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcm93JyksIDEwKTtcbiAgICAgIGlmIChyb3dJbmRleCA+PSAwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdmMuZ2V0Um93QnlJbmRleChyb3dJbmRleCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgb25TY3JvbGwgPSAoZXZlbnQpID0+IHtcbiAgICB0aGlzLl9oZWFkRWxlbWVudC5zY3JvbGxMZWZ0ID0gZXZlbnQudGFyZ2V0LnNjcm9sbExlZnQ7XG4gIH07XG5cbiAgLy8gcHJpdmF0ZSBnZXRTZWxlY3RlZFRleHQoKSB7XG4gIC8vICAgbGV0IHRleHQgPSAnJztcbiAgLy8gICBpZiAodHlwZW9mIHdpbmRvdy5nZXRTZWxlY3Rpb24gIT0gJ3VuZGVmaW5lZCcpIHtcbiAgLy8gICAgIHRleHQgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKTtcbiAgLy8gICB9XG4gIC8vICAgcmV0dXJuIHRleHQ7XG4gIC8vIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb2x1bW4gY29sdW1uX2F1dG9cIj5cbiAgPHRldGEtdGFibGUtaGVhZCBzdHlsZT1cInotaW5kZXg6IDFcIiBbc2VsZWN0VHlwZV09XCJzZWxlY3RUeXBlXCIgW3Nob3dIZWFkQ2VsbE1lbnVdPVwic2hvd0hlYWRDZWxsTWVudVwiPjwvdGV0YS10YWJsZS1oZWFkPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJjb2x1bW4gY29sdW1uX2F1dG8gcG9zaXRpb24tcmVsYXRpdmVcIlxuICAgIHN0eWxlPVwiei1pbmRleDogMFwiXG4gICAgW3RldGFDb250ZXh0TWVudV09XCJjb250ZXh0TWVudVwiXG4gICAgW3ZlcnRpY2FsQWxpZ25dPVwidmVydGljYWxBbGlnbi5hdXRvXCJcbiAgICBbYWxpZ25dPVwiYWxpZ24uYXV0b1wiXG4gICAgW2FwcGVuZFRvQm9keV09XCJ0cnVlXCJcbiAgICBbZGF0YV09XCJjb250ZXh0TWVudVJvd1wiXG4gICAgW29wZW5dPVwiY29udGV4dE1lbnVPcGVuXCJcbiAgICAob3BlbkNoYW5nZSk9XCJzZXRDb250ZXh0TWVudU9wZW4oJGV2ZW50KVwiXG4gID5cbiAgICA8dGV0YS10YWJsZS1ib2R5XG4gICAgICAoY29udGV4dG1lbnUpPVwic2V0Q29udGV4dE1lbnVSb3coJGV2ZW50KVwiXG4gICAgICAoc2Nyb2xsQ2hhbmdlKT1cIm9uU2Nyb2xsKCRldmVudClcIlxuICAgICAgW2FnZ3JlZ2F0ZV09XCJhZ2dyZWdhdGVcIlxuICAgICAgW3ZpcnR1YWxdPVwidmlydHVhbFwiXG4gICAgICBbYWN0aXZlUm93XT1cImFjdGl2ZVJvd1wiXG4gICAgICBbdHJhY2tSb3ddPVwidHJhY2tSb3dcIlxuICAgICAgW3RyYWNrQ29sdW1uc109XCJ0cmFja0NvbHVtbnNcIlxuICAgICAgW3NlbGVjdGVkUm93c109XCJzZWxlY3RlZFJvd3NMaXN0XCJcbiAgICAgIFthZGRpdGlvbmFsQ29tcG9uZW50XT1cImRldGFpbENvbXBvbmVudFwiXG4gICAgICBbc2VsZWN0VHlwZV09XCJzZWxlY3RUeXBlXCJcbiAgICAgIFtyb3dDbGFzc109XCJyb3dDbGFzc1wiXG4gICAgICBbcm93SGVpZ2h0XT1cInJvd0hlaWdodCgpXCJcbiAgICA+XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC90ZXRhLXRhYmxlLWJvZHk+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|