@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,210 +0,0 @@
|
|
|
1
|
-
import { CdkVirtualScrollViewport, CdkFixedSizeVirtualScroll, CdkVirtualForOf } from '@angular/cdk/scrolling';
|
|
2
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostBinding, input, Input, Output, Type, ViewChild, } from '@angular/core';
|
|
3
|
-
import { combineLatest } from 'rxjs';
|
|
4
|
-
import { takeWhile } from 'rxjs/operators';
|
|
5
|
-
import { ArrayUtil } from '../../../common/util/array-util';
|
|
6
|
-
import { TetaConfigService } from '../../../locale/teta-config.service';
|
|
7
|
-
import { AggregationType } from '../enum/aggregation-type.enum';
|
|
8
|
-
import { SelectType } from '../enum/select-type.enum';
|
|
9
|
-
import { TableService } from '../service/table.service';
|
|
10
|
-
import { NumberPipe } from '../../../pipe/number-pipe/number.pipe';
|
|
11
|
-
import { IconComponent } from '../../icon/icon/icon.component';
|
|
12
|
-
import { CellComponent } from '../cell/cell.component';
|
|
13
|
-
import { SelectionCellComponent } from '../selection-cell/selection-cell.component';
|
|
14
|
-
import { FormsModule } from '@angular/forms';
|
|
15
|
-
import { NgTemplateOutlet, NgClass, AsyncPipe } from '@angular/common';
|
|
16
|
-
import { ScrollableDirective } from '../../../directive/scrollable/scrollable.directive';
|
|
17
|
-
import { ScrollableComponent } from '../../../directive/scrollable/scrollable/scrollable.component';
|
|
18
|
-
import { TableRowComponent } from '../table-row/table-row.component';
|
|
19
|
-
import * as i0 from "@angular/core";
|
|
20
|
-
import * as i1 from "../service/table.service";
|
|
21
|
-
import * as i2 from "../../../locale/teta-config.service";
|
|
22
|
-
import * as i3 from "@angular/forms";
|
|
23
|
-
export class TableBodyComponent {
|
|
24
|
-
set data(data) {
|
|
25
|
-
this._data = data;
|
|
26
|
-
}
|
|
27
|
-
get data() {
|
|
28
|
-
return this._data;
|
|
29
|
-
}
|
|
30
|
-
set columns(columns) {
|
|
31
|
-
this._columns = columns;
|
|
32
|
-
this.locked = this._columns?.filter((_) => _.locked === true);
|
|
33
|
-
this.unlocked = this._columns?.filter((_) => _.locked === false);
|
|
34
|
-
const startWidth = this.selectType === SelectType.checkBox ? 28 : 0;
|
|
35
|
-
this.lockedFlex = this.locked.reduce((prev, curr) => prev + curr.flex, 0);
|
|
36
|
-
this.lockedWidth = this.locked.reduce((prev, curr) => prev + curr.width, startWidth);
|
|
37
|
-
this.totalFlex = this._columns.reduce((prev, curr) => prev + curr.flex, 0);
|
|
38
|
-
this.totalWidth = this._columns.reduce((prev, curr) => prev + curr.width, startWidth);
|
|
39
|
-
}
|
|
40
|
-
get columns() {
|
|
41
|
-
return this._columns;
|
|
42
|
-
}
|
|
43
|
-
constructor(_svc, _elementRef, _config, _cdr) {
|
|
44
|
-
this._svc = _svc;
|
|
45
|
-
this._elementRef = _elementRef;
|
|
46
|
-
this._config = _config;
|
|
47
|
-
this._cdr = _cdr;
|
|
48
|
-
this.selectedRows = [];
|
|
49
|
-
this.rowHeight = input(28);
|
|
50
|
-
this.tableBodyClass = true;
|
|
51
|
-
this.scrollChange = new EventEmitter();
|
|
52
|
-
this.locked = [];
|
|
53
|
-
this.unlocked = [];
|
|
54
|
-
this.selectTypeEnum = SelectType;
|
|
55
|
-
this.aggregationType = AggregationType;
|
|
56
|
-
this._columns = [];
|
|
57
|
-
this._alive = true;
|
|
58
|
-
this._hiddenColumns = [];
|
|
59
|
-
this.trackTableRow = (index, row) => {
|
|
60
|
-
return this.trackRow ? this.trackRow(index, row.data) : row.data['id'];
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
setActiveRow(row, event) {
|
|
64
|
-
if (!event.shiftKey && !event.ctrlKey) {
|
|
65
|
-
this._svc.setActiveRow(row);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
ngOnInit() {
|
|
69
|
-
this.locale = this._config.locale;
|
|
70
|
-
combineLatest([this._svc.columns, this._svc.hiddenColumns])
|
|
71
|
-
.pipe(takeWhile((_) => this._alive))
|
|
72
|
-
.subscribe((values) => {
|
|
73
|
-
const [columns, hiddenColumns] = values;
|
|
74
|
-
this._hiddenColumns = hiddenColumns;
|
|
75
|
-
this.columns = ArrayUtil.flatten(columns, 'columns', true).filter((_) => this._hiddenColumns.indexOf(_.name) < 0);
|
|
76
|
-
this._cdr.markForCheck();
|
|
77
|
-
});
|
|
78
|
-
this._svc.displayData.pipe(takeWhile((_) => this._alive)).subscribe((_) => {
|
|
79
|
-
this.data = _;
|
|
80
|
-
this._cdr.markForCheck();
|
|
81
|
-
this.viewport?.checkViewportSize();
|
|
82
|
-
});
|
|
83
|
-
this._svc.dict.pipe(takeWhile((_) => this._alive)).subscribe((_) => {
|
|
84
|
-
this.dict = _;
|
|
85
|
-
this._cdr.markForCheck();
|
|
86
|
-
});
|
|
87
|
-
this._svc.scrollIndex.pipe(takeWhile(() => this._alive)).subscribe(async (index) => {
|
|
88
|
-
if (this.viewport) {
|
|
89
|
-
this.viewport.scrollToIndex(index, 'auto');
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
92
|
-
const row = this._elementRef.nativeElement.querySelector(`.table-row[data-row="${index}"]`);
|
|
93
|
-
row?.scrollIntoView();
|
|
94
|
-
}
|
|
95
|
-
this._cdr.markForCheck();
|
|
96
|
-
});
|
|
97
|
-
this._svc.activeRow.pipe(takeWhile((_) => this._alive)).subscribe(async (_) => {
|
|
98
|
-
this.activeRow = _;
|
|
99
|
-
this._cdr.markForCheck();
|
|
100
|
-
});
|
|
101
|
-
this.addResizeObserver();
|
|
102
|
-
}
|
|
103
|
-
ngOnDestroy() {
|
|
104
|
-
this._alive = false;
|
|
105
|
-
this.removeResizeObserver();
|
|
106
|
-
}
|
|
107
|
-
getAggregateValue(column) {
|
|
108
|
-
if (column.aggregate === AggregationType.sum) {
|
|
109
|
-
return this.getSum(column.name);
|
|
110
|
-
}
|
|
111
|
-
if (column.aggregate === AggregationType.avg) {
|
|
112
|
-
return this.getSum(column.name) / this.data.length;
|
|
113
|
-
}
|
|
114
|
-
if (column.aggregate === AggregationType.min) {
|
|
115
|
-
return this.getMin(column.name);
|
|
116
|
-
}
|
|
117
|
-
if (column.aggregate === AggregationType.max) {
|
|
118
|
-
return this.getMax(column.name);
|
|
119
|
-
}
|
|
120
|
-
return null;
|
|
121
|
-
}
|
|
122
|
-
getAggregateText(column) {
|
|
123
|
-
if (column.aggregate === AggregationType.sum) {
|
|
124
|
-
return 'sum';
|
|
125
|
-
}
|
|
126
|
-
if (column.aggregate === AggregationType.avg) {
|
|
127
|
-
return 'avg';
|
|
128
|
-
}
|
|
129
|
-
if (column.aggregate === AggregationType.min) {
|
|
130
|
-
return 'min';
|
|
131
|
-
}
|
|
132
|
-
if (column.aggregate === AggregationType.max) {
|
|
133
|
-
return 'max';
|
|
134
|
-
}
|
|
135
|
-
return '';
|
|
136
|
-
}
|
|
137
|
-
emitScroll(event) {
|
|
138
|
-
this.scrollChange.emit(event);
|
|
139
|
-
}
|
|
140
|
-
addResizeObserver() {
|
|
141
|
-
this._obs = new ResizeObserver((_) => {
|
|
142
|
-
this.viewport?.checkViewportSize();
|
|
143
|
-
});
|
|
144
|
-
this._obs.observe(this._elementRef.nativeElement);
|
|
145
|
-
}
|
|
146
|
-
removeResizeObserver() {
|
|
147
|
-
this._obs.unobserve(this._elementRef.nativeElement);
|
|
148
|
-
this._obs.disconnect();
|
|
149
|
-
}
|
|
150
|
-
getSum(columnName) {
|
|
151
|
-
return this.data?.reduce((accum, current) => {
|
|
152
|
-
const val = parseFloat(current.data[columnName]);
|
|
153
|
-
return accum + (isNaN(val) ? 0 : val);
|
|
154
|
-
}, 0);
|
|
155
|
-
}
|
|
156
|
-
getMin(columnName) {
|
|
157
|
-
return this.data?.reduce((accum, current) => accum != null && accum <= current.data[columnName] ? accum : current.data[columnName], null);
|
|
158
|
-
}
|
|
159
|
-
getMax(columnName) {
|
|
160
|
-
return this.data?.reduce((accum, current) => (accum != null && accum >= current.data[columnName] ? accum : current.data[columnName]), null);
|
|
161
|
-
}
|
|
162
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: TableBodyComponent, deps: [{ token: i1.TableService }, { token: i0.ElementRef }, { token: i2.TetaConfigService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
163
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: TableBodyComponent, isStandalone: true, selector: "teta-table-body", inputs: { virtual: { classPropertyName: "virtual", publicName: "virtual", 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 }, additionalComponent: { classPropertyName: "additionalComponent", publicName: "additionalComponent", isSignal: false, isRequired: false, transformFunction: null }, aggregate: { classPropertyName: "aggregate", publicName: "aggregate", isSignal: false, isRequired: false, transformFunction: null }, selectType: { classPropertyName: "selectType", publicName: "selectType", isSignal: false, isRequired: false, transformFunction: null }, rowClass: { classPropertyName: "rowClass", publicName: "rowClass", 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 }, rowHeight: { classPropertyName: "rowHeight", publicName: "rowHeight", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { scrollChange: "scrollChange" }, host: { properties: { "class.table-body": "this.tableBodyClass" } }, viewQueries: [{ propertyName: "viewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], ngImport: i0, template: "@if (virtual && data.length > 0) {\n <teta-scrollable class=\"table-body-container\" style=\"padding-bottom: 12px\" [showScrollbars]=\"true\">\n <cdk-virtual-scroll-viewport\n tetaScrollable\n class=\"table-body-container\"\n (scroll)=\"emitScroll($event)\"\n [itemSize]=\"rowHeight()\"\n >\n <ng-container\n *cdkVirtualFor=\"let row of data; templateCacheSize: 0; let rowIndex = index; trackBy: trackTableRow\"\n >\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: { row: row, rowIndex: rowIndex }\"></ng-container>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n </teta-scrollable>\n} @else {\n <teta-scrollable\n class=\"table-body-container\"\n style=\"padding-bottom: 12px\"\n direction=\"column\"\n [showScrollbars]=\"true\"\n (scroll)=\"emitScroll($event)\"\n >\n <div class=\"table-body-container\">\n @if (!data?.length) {\n <div class=\"column column_auto\" style=\"position: absolute; top: 0; bottom: 16px; left: 0; right: 0\">\n <ng-content></ng-content>\n </div>\n }\n @for (row of data; track trackTableRow(rowIndex, row); let rowIndex = $index) {\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: { row: row, rowIndex: rowIndex }\"></ng-container>\n }\n @if (aggregate) {\n <ng-container *ngTemplateOutlet=\"aggTemplate\"></ng-container>\n }\n <ng-container *ngTemplateOutlet=\"emptyRow\"></ng-container>\n </div>\n </teta-scrollable>\n}\n\n<ng-template #bodyTemplate let-row=\"row\" let-rowIndex=\"rowIndex\">\n <teta-table-row\n class=\"table-row\"\n ngForm\n [style.height.px]=\"rowHeight()\"\n [row]=\"row\"\n (click)=\"setActiveRow(row.data, $event)\"\n [attr.data-row]=\"rowIndex\"\n [class.table-row_odd]=\"rowIndex % 2 === 1\"\n [ngClass]=\"rowClass ? rowClass(row.data, rowIndex) : ''\"\n [class.table-row_selected]=\"selectedRows && selectedRows.indexOf(row.data) >= 0\"\n [style.flex-grow]=\"totalFlex\"\n [style.flex-basis.px]=\"totalWidth\"\n [style.min-width.px]=\"totalWidth\"\n >\n @if (locked.length > 0) {\n <div\n class=\"table-row_locked\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\"\n [style.zIndex]=\"row.data === activeRow ? 2 : 1\"\n >\n @if (selectType === selectTypeEnum.checkBox && locked.length) {\n <teta-selection-cell [row]=\"row.data\" style=\"width: 28px\"></teta-selection-cell>\n }\n @for (column of locked; track trackColumns(colIndex, column); let colIndex = $index) {\n <teta-cell\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict ? dict[column.name] : []\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n ></teta-cell>\n }\n </div>\n }\n @if (selectType === selectTypeEnum.checkBox && locked.length < 1) {\n <teta-selection-cell [row]=\"row.data\" style=\"width: 28px\"></teta-selection-cell>\n }\n @for (column of unlocked; track trackColumns(colIndex, column); let colIndex = $index) {\n <teta-cell\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict ? dict[column.name] : []\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n ></teta-cell>\n }\n </teta-table-row>\n</ng-template>\n\n<ng-template #aggTemplate>\n @if (locale | async; as loc) {\n @if (aggregate) {\n <div\n class=\"table-row\"\n [style.height.px]=\"rowHeight()\"\n [class.table-row_virtual]=\"virtual\"\n [style.flex-grow]=\"totalFlex\"\n [style.flex-basis.px]=\"totalWidth\"\n [style.min-width.px]=\"totalWidth\"\n >\n @if (locked.length > 0) {\n <div\n class=\"table-row_locked\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\"\n >\n @if (selectType === selectTypeEnum.checkBox && locked.length < 1) {\n <div class=\"cell align-center justify-content-center\" style=\"width: 28px\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n }\n @for (column of locked; track trackColumns(colIndex, column); let colIndex = $index) {\n <div\n class=\"cell cell-component aggregate-cell\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n >\n @if (column.aggregate !== aggregationType.none) {\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{ loc[getAggregateText(column)] }}:\n {{ getAggregateValue(column) | tetaNumber: 2 }}\n </span>\n }\n </div>\n }\n </div>\n }\n @if (selectType === selectTypeEnum.checkBox && locked.length < 1) {\n <div class=\"cell align-center justify-content-center\" style=\"width: 28px\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n }\n @for (column of unlocked; track trackColumns(colIndex, column); let colIndex = $index) {\n <div\n class=\"cell cell-component aggregate-cell\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n >\n @if (column.aggregate !== aggregationType.none) {\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{ loc[getAggregateText(column)] }}:\n {{ getAggregateValue(column) | tetaNumber: 2 }}\n </span>\n }\n </div>\n }\n </div>\n }\n }\n</ng-template>\n<ng-template #emptyRow>\n <div\n class=\"empty-table-row\"\n style=\"height: 0.1px\"\n [style.flex-grow]=\"totalFlex\"\n [style.flex-basis.px]=\"totalWidth\"\n [style.min-width.px]=\"totalWidth\"\n ></div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "component", type: ScrollableComponent, selector: "teta-scrollable", inputs: ["direction", "showScrollbars", "contentClass"], outputs: ["scroll"] }, { kind: "component", type: CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: ScrollableDirective, selector: "[tetaScrollable]" }, { kind: "directive", type: CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: SelectionCellComponent, selector: "teta-selection-cell", inputs: ["row"] }, { kind: "component", type: CellComponent, selector: "teta-cell", inputs: ["column", "filterOptions", "dict", "row"] }, { kind: "component", type: IconComponent, selector: "teta-icon", inputs: ["name", "size", "palette", "class"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: NumberPipe, name: "tetaNumber" }, { kind: "component", type: TableRowComponent, selector: "teta-table-row", inputs: ["row"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
164
|
-
}
|
|
165
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: TableBodyComponent, decorators: [{
|
|
166
|
-
type: Component,
|
|
167
|
-
args: [{ selector: 'teta-table-body', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
168
|
-
ScrollableComponent,
|
|
169
|
-
CdkVirtualScrollViewport,
|
|
170
|
-
CdkFixedSizeVirtualScroll,
|
|
171
|
-
ScrollableDirective,
|
|
172
|
-
CdkVirtualForOf,
|
|
173
|
-
NgTemplateOutlet,
|
|
174
|
-
FormsModule,
|
|
175
|
-
NgClass,
|
|
176
|
-
SelectionCellComponent,
|
|
177
|
-
CellComponent,
|
|
178
|
-
IconComponent,
|
|
179
|
-
AsyncPipe,
|
|
180
|
-
NumberPipe,
|
|
181
|
-
TableRowComponent,
|
|
182
|
-
], template: "@if (virtual && data.length > 0) {\n <teta-scrollable class=\"table-body-container\" style=\"padding-bottom: 12px\" [showScrollbars]=\"true\">\n <cdk-virtual-scroll-viewport\n tetaScrollable\n class=\"table-body-container\"\n (scroll)=\"emitScroll($event)\"\n [itemSize]=\"rowHeight()\"\n >\n <ng-container\n *cdkVirtualFor=\"let row of data; templateCacheSize: 0; let rowIndex = index; trackBy: trackTableRow\"\n >\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: { row: row, rowIndex: rowIndex }\"></ng-container>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n </teta-scrollable>\n} @else {\n <teta-scrollable\n class=\"table-body-container\"\n style=\"padding-bottom: 12px\"\n direction=\"column\"\n [showScrollbars]=\"true\"\n (scroll)=\"emitScroll($event)\"\n >\n <div class=\"table-body-container\">\n @if (!data?.length) {\n <div class=\"column column_auto\" style=\"position: absolute; top: 0; bottom: 16px; left: 0; right: 0\">\n <ng-content></ng-content>\n </div>\n }\n @for (row of data; track trackTableRow(rowIndex, row); let rowIndex = $index) {\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: { row: row, rowIndex: rowIndex }\"></ng-container>\n }\n @if (aggregate) {\n <ng-container *ngTemplateOutlet=\"aggTemplate\"></ng-container>\n }\n <ng-container *ngTemplateOutlet=\"emptyRow\"></ng-container>\n </div>\n </teta-scrollable>\n}\n\n<ng-template #bodyTemplate let-row=\"row\" let-rowIndex=\"rowIndex\">\n <teta-table-row\n class=\"table-row\"\n ngForm\n [style.height.px]=\"rowHeight()\"\n [row]=\"row\"\n (click)=\"setActiveRow(row.data, $event)\"\n [attr.data-row]=\"rowIndex\"\n [class.table-row_odd]=\"rowIndex % 2 === 1\"\n [ngClass]=\"rowClass ? rowClass(row.data, rowIndex) : ''\"\n [class.table-row_selected]=\"selectedRows && selectedRows.indexOf(row.data) >= 0\"\n [style.flex-grow]=\"totalFlex\"\n [style.flex-basis.px]=\"totalWidth\"\n [style.min-width.px]=\"totalWidth\"\n >\n @if (locked.length > 0) {\n <div\n class=\"table-row_locked\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\"\n [style.zIndex]=\"row.data === activeRow ? 2 : 1\"\n >\n @if (selectType === selectTypeEnum.checkBox && locked.length) {\n <teta-selection-cell [row]=\"row.data\" style=\"width: 28px\"></teta-selection-cell>\n }\n @for (column of locked; track trackColumns(colIndex, column); let colIndex = $index) {\n <teta-cell\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict ? dict[column.name] : []\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n ></teta-cell>\n }\n </div>\n }\n @if (selectType === selectTypeEnum.checkBox && locked.length < 1) {\n <teta-selection-cell [row]=\"row.data\" style=\"width: 28px\"></teta-selection-cell>\n }\n @for (column of unlocked; track trackColumns(colIndex, column); let colIndex = $index) {\n <teta-cell\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict ? dict[column.name] : []\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n ></teta-cell>\n }\n </teta-table-row>\n</ng-template>\n\n<ng-template #aggTemplate>\n @if (locale | async; as loc) {\n @if (aggregate) {\n <div\n class=\"table-row\"\n [style.height.px]=\"rowHeight()\"\n [class.table-row_virtual]=\"virtual\"\n [style.flex-grow]=\"totalFlex\"\n [style.flex-basis.px]=\"totalWidth\"\n [style.min-width.px]=\"totalWidth\"\n >\n @if (locked.length > 0) {\n <div\n class=\"table-row_locked\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\"\n >\n @if (selectType === selectTypeEnum.checkBox && locked.length < 1) {\n <div class=\"cell align-center justify-content-center\" style=\"width: 28px\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n }\n @for (column of locked; track trackColumns(colIndex, column); let colIndex = $index) {\n <div\n class=\"cell cell-component aggregate-cell\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n >\n @if (column.aggregate !== aggregationType.none) {\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{ loc[getAggregateText(column)] }}:\n {{ getAggregateValue(column) | tetaNumber: 2 }}\n </span>\n }\n </div>\n }\n </div>\n }\n @if (selectType === selectTypeEnum.checkBox && locked.length < 1) {\n <div class=\"cell align-center justify-content-center\" style=\"width: 28px\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n }\n @for (column of unlocked; track trackColumns(colIndex, column); let colIndex = $index) {\n <div\n class=\"cell cell-component aggregate-cell\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n >\n @if (column.aggregate !== aggregationType.none) {\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{ loc[getAggregateText(column)] }}:\n {{ getAggregateValue(column) | tetaNumber: 2 }}\n </span>\n }\n </div>\n }\n </div>\n }\n }\n</ng-template>\n<ng-template #emptyRow>\n <div\n class=\"empty-table-row\"\n style=\"height: 0.1px\"\n [style.flex-grow]=\"totalFlex\"\n [style.flex-basis.px]=\"totalWidth\"\n [style.min-width.px]=\"totalWidth\"\n ></div>\n</ng-template>\n" }]
|
|
183
|
-
}], ctorParameters: () => [{ type: i1.TableService }, { type: i0.ElementRef }, { type: i2.TetaConfigService }, { type: i0.ChangeDetectorRef }], propDecorators: { virtual: [{
|
|
184
|
-
type: Input
|
|
185
|
-
}], activeRow: [{
|
|
186
|
-
type: Input
|
|
187
|
-
}], selectedRows: [{
|
|
188
|
-
type: Input
|
|
189
|
-
}], additionalComponent: [{
|
|
190
|
-
type: Input
|
|
191
|
-
}], aggregate: [{
|
|
192
|
-
type: Input
|
|
193
|
-
}], selectType: [{
|
|
194
|
-
type: Input
|
|
195
|
-
}], rowClass: [{
|
|
196
|
-
type: Input
|
|
197
|
-
}], trackRow: [{
|
|
198
|
-
type: Input
|
|
199
|
-
}], trackColumns: [{
|
|
200
|
-
type: Input
|
|
201
|
-
}], viewport: [{
|
|
202
|
-
type: ViewChild,
|
|
203
|
-
args: [CdkVirtualScrollViewport, { static: false }]
|
|
204
|
-
}], tableBodyClass: [{
|
|
205
|
-
type: HostBinding,
|
|
206
|
-
args: ['class.table-body']
|
|
207
|
-
}], scrollChange: [{
|
|
208
|
-
type: Output
|
|
209
|
-
}] } });
|
|
210
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYm9keS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlLWJvZHkvdGFibGUtYm9keS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlLWJvZHkvdGFibGUtYm9keS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUseUJBQXlCLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUcsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFDTCxLQUFLLEVBR0wsTUFBTSxFQUNOLElBQUksRUFDSixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBS3hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDL0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFB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QUFDLHdCQUF3QixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFLSixjQUFjO3NCQUEvRCxXQUFXO3VCQUFDLGtCQUFrQjtnQkFDckIsWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCwgQ2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbCwgQ2RrVmlydHVhbEZvck9mIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgaW5wdXQsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBUeXBlLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVdoaWxlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBJRGljdGlvbmFyeSB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9jb250cmFjdC9pLWRpY3Rpb25hcnknO1xuaW1wb3J0IHsgSUlkTmFtZSB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9jb250cmFjdC9pLWlkLW5hbWUnO1xuaW1wb3J0IHsgQXJyYXlVdGlsIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL3V0aWwvYXJyYXktdXRpbCc7XG5pbXBvcnQgeyBUZXRhQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2xvY2FsZS90ZXRhLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IFRldGFMb2NhbGlzYXRpb24gfSBmcm9tICcuLi8uLi8uLi9sb2NhbGUvdGV0YS1sb2NhbGlzYXRpb24nO1xuaW1wb3J0IHsgRGV0YWlsQ29tcG9uZW50QmFzZSB9IGZyb20gJy4uL2Jhc2UvZGV0YWlsLWNvbXBvbmVudC1iYXNlJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uIH0gZnJvbSAnLi4vY29udHJhY3QvdGFibGUtY29sdW1uJztcbmltcG9ydCB7IFRhYmxlUm93IH0gZnJvbSAnLi4vY29udHJhY3QvdGFibGUtcm93JztcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uVHlwZSB9IGZyb20gJy4uL2VudW0vYWdncmVnYXRpb24tdHlwZS5lbnVtJztcbmltcG9ydCB7IFNlbGVjdFR5cGUgfSBmcm9tICcuLi9lbnVtL3NlbGVjdC10eXBlLmVudW0nO1xuaW1wb3J0IHsgVGFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS90YWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IE51bWJlclBpcGUgfSBmcm9tICcuLi8uLi8uLi9waXBlL251bWJlci1waXBlL251bWJlci5waXBlJztcbmltcG9ydCB7IEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9pY29uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2VsbENvbXBvbmVudCB9IGZyb20gJy4uL2NlbGwvY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VsZWN0aW9uQ2VsbENvbXBvbmVudCB9IGZyb20gJy4uL3NlbGVjdGlvbi1jZWxsL3NlbGVjdGlvbi1jZWxsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQsIE5nQ2xhc3MsIEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBTY3JvbGxhYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL3Njcm9sbGFibGUvc2Nyb2xsYWJsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU2Nyb2xsYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9zY3JvbGxhYmxlL3Njcm9sbGFibGUvc2Nyb2xsYWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFibGVSb3dDb21wb25lbnQgfSBmcm9tICcuLi90YWJsZS1yb3cvdGFibGUtcm93LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RldGEtdGFibGUtYm9keScsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1ib2R5LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUtYm9keS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIFNjcm9sbGFibGVDb21wb25lbnQsXG4gICAgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LFxuICAgIENka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGwsXG4gICAgU2Nyb2xsYWJsZURpcmVjdGl2ZSxcbiAgICBDZGtWaXJ0dWFsRm9yT2YsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBOZ0NsYXNzLFxuICAgIFNlbGVjdGlvbkNlbGxDb21wb25lbnQsXG4gICAgQ2VsbENvbXBvbmVudCxcbiAgICBJY29uQ29tcG9uZW50LFxuICAgIEFzeW5jUGlwZSxcbiAgICBOdW1iZXJQaXBlLFxuICAgIFRhYmxlUm93Q29tcG9uZW50LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUJvZHlDb21wb25lbnQ8VD4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIHZpcnR1YWw6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGFjdGl2ZVJvdzogVDtcbiAgQElucHV0KCkgc2VsZWN0ZWRSb3dzOiBUW10gPSBbXTtcbiAgQElucHV0KCkgYWRkaXRpb25hbENvbXBvbmVudDogVHlwZTxEZXRhaWxDb21wb25lbnRCYXNlPFQ+PjtcbiAgQElucHV0KCkgYWdncmVnYXRlOiBib29sZWFuO1xuICBASW5wdXQoKSBzZWxlY3RUeXBlOiBTZWxlY3RUeXBlO1xuICBASW5wdXQoKSByb3dDbGFzczogKHJvdzogVCwgaW5kZXg/OiBudW1iZXIpID0+IHN0cmluZztcbiAgQElucHV0KCkgdHJhY2tSb3c6IChpbmRleDogbnVtYmVyLCByb3c6IFQpID0+IGFueTtcbiAgQElucHV0KCkgdHJhY2tDb2x1bW5zOiAoaW5kZXg6IG51bWJlciwgY29sdW1uOiBUYWJsZUNvbHVtbikgPT4gYW55O1xuICBAVmlld0NoaWxkKENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIHZpZXdwb3J0OiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQ7XG5cbiAgcm93SGVpZ2h0ID0gaW5wdXQ8bnVtYmVyPigyOCk7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy50YWJsZS1ib2R5JykgcHJpdmF0ZSByZWFkb25seSB0YWJsZUJvZHlDbGFzcyA9IHRydWU7XG4gIEBPdXRwdXQoKSBzY3JvbGxDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuXG4gIHNldCBkYXRhKGRhdGE6IFRhYmxlUm93PFQ+W10pIHtcbiAgICB0aGlzLl9kYXRhID0gZGF0YTtcbiAgfVxuXG4gIGdldCBkYXRhKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICB9XG5cbiAgZGljdDogSURpY3Rpb25hcnk8SUlkTmFtZTxhbnk+W10+O1xuICBsb2NrZWQ6IFRhYmxlQ29sdW1uW10gPSBbXTtcbiAgdW5sb2NrZWQ6IFRhYmxlQ29sdW1uW10gPSBbXTtcbiAgc2VsZWN0VHlwZUVudW0gPSBTZWxlY3RUeXBlO1xuICBhZ2dyZWdhdGlvblR5cGUgPSBBZ2dyZWdhdGlvblR5cGU7XG4gIGxvY2tlZEZsZXg6IG51bWJlcjtcbiAgbG9ja2VkV2lkdGg6IG51bWJlcjtcbiAgdG90YWxGbGV4OiBudW1iZXI7XG4gIHRvdGFsV2lkdGg6IG51bWJlcjtcblxuICBwcml2YXRlIF9jb2x1bW5zOiBUYWJsZUNvbHVtbltdID0gW107XG4gIHByaXZhdGUgX2FsaXZlID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfZGF0YTogVGFibGVSb3c8VD5bXTtcbiAgcHJpdmF0ZSBfaGlkZGVuQ29sdW1uczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBfb2JzOiBSZXNpemVPYnNlcnZlcjtcblxuICBzZXQgY29sdW1ucyhjb2x1bW5zOiBUYWJsZUNvbHVtbltdKSB7XG4gICAgdGhpcy5fY29sdW1ucyA9IGNvbHVtbnM7XG4gICAgdGhpcy5sb2NrZWQgPSB0aGlzLl9jb2x1bW5zPy5maWx0ZXIoKF8pID0+IF8ubG9ja2VkID09PSB0cnVlKTtcbiAgICB0aGlzLnVubG9ja2VkID0gdGhpcy5fY29sdW1ucz8uZmlsdGVyKChfKSA9PiBfLmxvY2tlZCA9PT0gZmFsc2UpO1xuICAgIGNvbnN0IHN0YXJ0V2lkdGggPSB0aGlzLnNlbGVjdFR5cGUgPT09IFNlbGVjdFR5cGUuY2hlY2tCb3ggPyAyOCA6IDA7XG4gICAgdGhpcy5sb2NrZWRGbGV4ID0gdGhpcy5sb2NrZWQucmVkdWNlKChwcmV2OiBudW1iZXIsIGN1cnI6IFRhYmxlQ29sdW1uKSA9PiBwcmV2ICsgY3Vyci5mbGV4LCAwKTtcbiAgICB0aGlzLmxvY2tlZFdpZHRoID0gdGhpcy5sb2NrZWQucmVkdWNlKChwcmV2OiBudW1iZXIsIGN1cnI6IFRhYmxlQ29sdW1uKSA9PiBwcmV2ICsgY3Vyci53aWR0aCwgc3RhcnRXaWR0aCk7XG4gICAgdGhpcy50b3RhbEZsZXggPSB0aGlzLl9jb2x1bW5zLnJlZHVjZSgocHJldjogbnVtYmVyLCBjdXJyOiBUYWJsZUNvbHVtbikgPT4gcHJldiArIGN1cnIuZmxleCwgMCk7XG4gICAgdGhpcy50b3RhbFdpZHRoID0gdGhpcy5fY29sdW1ucy5yZWR1Y2UoKHByZXY6IG51bWJlciwgY3VycjogVGFibGVDb2x1bW4pID0+IHByZXYgKyBjdXJyLndpZHRoLCBzdGFydFdpZHRoKTtcbiAgfVxuXG4gIGdldCBjb2x1bW5zKCk6IFRhYmxlQ29sdW1uW10ge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5zO1xuICB9XG5cbiAgbG9jYWxlOiBPYnNlcnZhYmxlPFRldGFMb2NhbGlzYXRpb24+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX3N2YzogVGFibGVTZXJ2aWNlPFQ+LFxuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBfY29uZmlnOiBUZXRhQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICApIHt9XG5cbiAgc2V0QWN0aXZlUm93KHJvdzogVCwgZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50LnNoaWZ0S2V5ICYmICFldmVudC5jdHJsS2V5KSB7XG4gICAgICB0aGlzLl9zdmMuc2V0QWN0aXZlUm93KHJvdyk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5sb2NhbGUgPSB0aGlzLl9jb25maWcubG9jYWxlO1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuX3N2Yy5jb2x1bW5zLCB0aGlzLl9zdmMuaGlkZGVuQ29sdW1uc10pXG4gICAgICAucGlwZSh0YWtlV2hpbGUoKF8pID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlczogW1RhYmxlQ29sdW1uW10sIHN0cmluZ1tdXSkgPT4ge1xuICAgICAgICBjb25zdCBbY29sdW1ucywgaGlkZGVuQ29sdW1uc10gPSB2YWx1ZXM7XG4gICAgICAgIHRoaXMuX2hpZGRlbkNvbHVtbnMgPSBoaWRkZW5Db2x1bW5zO1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSBBcnJheVV0aWwuZmxhdHRlbihjb2x1bW5zLCAnY29sdW1ucycsIHRydWUpLmZpbHRlcihcbiAgICAgICAgICAoXykgPT4gdGhpcy5faGlkZGVuQ29sdW1ucy5pbmRleE9mKF8ubmFtZSkgPCAwLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuX3N2Yy5kaXNwbGF5RGF0YS5waXBlKHRha2VXaGlsZSgoXykgPT4gdGhpcy5fYWxpdmUpKS5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgIHRoaXMuZGF0YSA9IF87XG4gICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB0aGlzLnZpZXdwb3J0Py5jaGVja1ZpZXdwb3J0U2l6ZSgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fc3ZjLmRpY3QucGlwZSh0YWtlV2hpbGUoKF8pID0+IHRoaXMuX2FsaXZlKSkuc3Vic2NyaWJlKChfKSA9PiB7XG4gICAgICB0aGlzLmRpY3QgPSBfO1xuICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fc3ZjLnNjcm9sbEluZGV4LnBpcGUodGFrZVdoaWxlKCgpID0+IHRoaXMuX2FsaXZlKSkuc3Vic2NyaWJlKGFzeW5jIChpbmRleCkgPT4ge1xuICAgICAgaWYgKHRoaXMudmlld3BvcnQpIHtcbiAgICAgICAgdGhpcy52aWV3cG9ydC5zY3JvbGxUb0luZGV4KGluZGV4LCAnYXV0bycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYC50YWJsZS1yb3dbZGF0YS1yb3c9XCIke2luZGV4fVwiXWApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICByb3c/LnNjcm9sbEludG9WaWV3KCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9zdmMuYWN0aXZlUm93LnBpcGUodGFrZVdoaWxlKChfKSA9PiB0aGlzLl9hbGl2ZSkpLnN1YnNjcmliZShhc3luYyAoXykgPT4ge1xuICAgICAgdGhpcy5hY3RpdmVSb3cgPSBfO1xuICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkUmVzaXplT2JzZXJ2ZXIoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2FsaXZlID0gZmFsc2U7XG4gICAgdGhpcy5yZW1vdmVSZXNpemVPYnNlcnZlcigpO1xuICB9XG5cbiAgZ2V0QWdncmVnYXRlVmFsdWUoY29sdW1uOiBUYWJsZUNvbHVtbik6IG51bWJlciB7XG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgPT09IEFnZ3JlZ2F0aW9uVHlwZS5zdW0pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFN1bShjb2x1bW4ubmFtZSk7XG4gICAgfVxuICAgIGlmIChjb2x1bW4uYWdncmVnYXRlID09PSBBZ2dyZWdhdGlvblR5cGUuYXZnKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTdW0oY29sdW1uLm5hbWUpIC8gdGhpcy5kYXRhLmxlbmd0aDtcbiAgICB9XG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgPT09IEFnZ3JlZ2F0aW9uVHlwZS5taW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE1pbihjb2x1bW4ubmFtZSk7XG4gICAgfVxuICAgIGlmIChjb2x1bW4uYWdncmVnYXRlID09PSBBZ2dyZWdhdGlvblR5cGUubWF4KSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRNYXgoY29sdW1uLm5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGdldEFnZ3JlZ2F0ZVRleHQoY29sdW1uOiBUYWJsZUNvbHVtbik6IHN0cmluZyB7XG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgPT09IEFnZ3JlZ2F0aW9uVHlwZS5zdW0pIHtcbiAgICAgIHJldHVybiAnc3VtJztcbiAgICB9XG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgPT09IEFnZ3JlZ2F0aW9uVHlwZS5hdmcpIHtcbiAgICAgIHJldHVybiAnYXZnJztcbiAgICB9XG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgPT09IEFnZ3JlZ2F0aW9uVHlwZS5taW4pIHtcbiAgICAgIHJldHVybiAnbWluJztcbiAgICB9XG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgPT09IEFnZ3JlZ2F0aW9uVHlwZS5tYXgpIHtcbiAgICAgIHJldHVybiAnbWF4JztcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgZW1pdFNjcm9sbChldmVudCkge1xuICAgIHRoaXMuc2Nyb2xsQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgdHJhY2tUYWJsZVJvdyA9IChpbmRleDogbnVtYmVyLCByb3c6IFRhYmxlUm93PFQ+KTogYW55ID0+IHtcbiAgICByZXR1cm4gdGhpcy50cmFja1JvdyA/IHRoaXMudHJhY2tSb3coaW5kZXgsIHJvdy5kYXRhKSA6IHJvdy5kYXRhWydpZCddO1xuICB9O1xuXG4gIHByaXZhdGUgYWRkUmVzaXplT2JzZXJ2ZXIoKSB7XG4gICAgdGhpcy5fb2JzID0gbmV3IFJlc2l6ZU9ic2VydmVyKChfKSA9PiB7XG4gICAgICB0aGlzLnZpZXdwb3J0Py5jaGVja1ZpZXdwb3J0U2l6ZSgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fb2JzLm9ic2VydmUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlUmVzaXplT2JzZXJ2ZXIoKSB7XG4gICAgdGhpcy5fb2JzLnVub2JzZXJ2ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMuX29icy5kaXNjb25uZWN0KCk7XG4gIH1cblxuICBwcml2YXRlIGdldFN1bShjb2x1bW5OYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhPy5yZWR1Y2UoKGFjY3VtLCBjdXJyZW50KSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSBwYXJzZUZsb2F0KGN1cnJlbnQuZGF0YVtjb2x1bW5OYW1lXSk7XG4gICAgICByZXR1cm4gYWNjdW0gKyAoaXNOYU4odmFsKSA/IDAgOiB2YWwpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNaW4oY29sdW1uTmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKHRoaXMuZGF0YSBhcyBhbnkpPy5yZWR1Y2UoXG4gICAgICAoYWNjdW0sIGN1cnJlbnQ6IFRhYmxlUm93PFQ+KSA9PlxuICAgICAgICBhY2N1bSAhPSBudWxsICYmIGFjY3VtIDw9IGN1cnJlbnQuZGF0YVtjb2x1bW5OYW1lXSA/IGFjY3VtIDogY3VycmVudC5kYXRhW2NvbHVtbk5hbWVdLFxuICAgICAgbnVsbCxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNYXgoY29sdW1uTmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKHRoaXMuZGF0YSBhcyBhbnkpPy5yZWR1Y2UoXG4gICAgICAoYWNjdW0sIGN1cnJlbnQpID0+IChhY2N1bSAhPSBudWxsICYmIGFjY3VtID49IGN1cnJlbnQuZGF0YVtjb2x1bW5OYW1lXSA/IGFjY3VtIDogY3VycmVudC5kYXRhW2NvbHVtbk5hbWVdKSxcbiAgICAgIG51bGwsXG4gICAgKTtcbiAgfVxufVxuIiwiQGlmICh2aXJ0dWFsICYmIGRhdGEubGVuZ3RoID4gMCkge1xuICA8dGV0YS1zY3JvbGxhYmxlIGNsYXNzPVwidGFibGUtYm9keS1jb250YWluZXJcIiBzdHlsZT1cInBhZGRpbmctYm90dG9tOiAxMnB4XCIgW3Nob3dTY3JvbGxiYXJzXT1cInRydWVcIj5cbiAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XG4gICAgICB0ZXRhU2Nyb2xsYWJsZVxuICAgICAgY2xhc3M9XCJ0YWJsZS1ib2R5LWNvbnRhaW5lclwiXG4gICAgICAoc2Nyb2xsKT1cImVtaXRTY3JvbGwoJGV2ZW50KVwiXG4gICAgICBbaXRlbVNpemVdPVwicm93SGVpZ2h0KClcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKmNka1ZpcnR1YWxGb3I9XCJsZXQgcm93IG9mIGRhdGE7IHRlbXBsYXRlQ2FjaGVTaXplOiAwOyBsZXQgcm93SW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tUYWJsZVJvd1wiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJib2R5VGVtcGxhdGU7IGNvbnRleHQ6IHsgcm93OiByb3csIHJvd0luZGV4OiByb3dJbmRleCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbiAgPC90ZXRhLXNjcm9sbGFibGU+XG59IEBlbHNlIHtcbiAgPHRldGEtc2Nyb2xsYWJsZVxuICAgIGNsYXNzPVwidGFibGUtYm9keS1jb250YWluZXJcIlxuICAgIHN0eWxlPVwicGFkZGluZy1ib3R0b206IDEycHhcIlxuICAgIGRpcmVjdGlvbj1cImNvbHVtblwiXG4gICAgW3Nob3dTY3JvbGxiYXJzXT1cInRydWVcIlxuICAgIChzY3JvbGwpPVwiZW1pdFNjcm9sbCgkZXZlbnQpXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1ib2R5LWNvbnRhaW5lclwiPlxuICAgICAgQGlmICghZGF0YT8ubGVuZ3RoKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4gY29sdW1uX2F1dG9cIiBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAwOyBib3R0b206IDE2cHg7IGxlZnQ6IDA7IHJpZ2h0OiAwXCI+XG4gICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIEBmb3IgKHJvdyBvZiBkYXRhOyB0cmFjayB0cmFja1RhYmxlUm93KHJvd0luZGV4LCByb3cpOyBsZXQgcm93SW5kZXggPSAkaW5kZXgpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJvZHlUZW1wbGF0ZTsgY29udGV4dDogeyByb3c6IHJvdywgcm93SW5kZXg6IHJvd0luZGV4IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIH1cbiAgICAgIEBpZiAoYWdncmVnYXRlKSB7XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhZ2dUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgfVxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImVtcHR5Um93XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvdGV0YS1zY3JvbGxhYmxlPlxufVxuXG48bmctdGVtcGxhdGUgI2JvZHlUZW1wbGF0ZSBsZXQtcm93PVwicm93XCIgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIj5cbiAgPHRldGEtdGFibGUtcm93XG4gICAgY2xhc3M9XCJ0YWJsZS1yb3dcIlxuICAgIG5nRm9ybVxuICAgIFtzdHlsZS5oZWlnaHQucHhdPVwicm93SGVpZ2h0KClcIlxuICAgIFtyb3ddPVwicm93XCJcbiAgICAoY2xpY2spPVwic2V0QWN0aXZlUm93KHJvdy5kYXRhLCAkZXZlbnQpXCJcbiAgICBbYXR0ci5kYXRhLXJvd109XCJyb3dJbmRleFwiXG4gICAgW2NsYXNzLnRhYmxlLXJvd19vZGRdPVwicm93SW5kZXggJSAyID09PSAxXCJcbiAgICBbbmdDbGFzc109XCJyb3dDbGFzcyA/IHJvd0NsYXNzKHJvdy5kYXRhLCByb3dJbmRleCkgOiAnJ1wiXG4gICAgW2NsYXNzLnRhYmxlLXJvd19zZWxlY3RlZF09XCJzZWxlY3RlZFJvd3MgJiYgc2VsZWN0ZWRSb3dzLmluZGV4T2Yocm93LmRhdGEpID49IDBcIlxuICAgIFtzdHlsZS5mbGV4LWdyb3ddPVwidG90YWxGbGV4XCJcbiAgICBbc3R5bGUuZmxleC1iYXNpcy5weF09XCJ0b3RhbFdpZHRoXCJcbiAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cInRvdGFsV2lkdGhcIlxuICA+XG4gICAgQGlmIChsb2NrZWQubGVuZ3RoID4gMCkge1xuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInRhYmxlLXJvd19sb2NrZWRcIlxuICAgICAgICBbc3R5bGUuZmxleC1ncm93XT1cImxvY2tlZEZsZXhcIlxuICAgICAgICBbc3R5bGUuZmxleC1iYXNpcy5weF09XCJsb2NrZWRXaWR0aFwiXG4gICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwibG9ja2VkV2lkdGhcIlxuICAgICAgICBbc3R5bGUuekluZGV4XT1cInJvdy5kYXRhID09PSBhY3RpdmVSb3cgPyAyIDogMVwiXG4gICAgICA+XG4gICAgICAgIEBpZiAoc2VsZWN0VHlwZSA9PT0gc2VsZWN0VHlwZUVudW0uY2hlY2tCb3ggJiYgbG9ja2VkLmxlbmd0aCkge1xuICAgICAgICAgIDx0ZXRhLXNlbGVjdGlvbi1jZWxsIFtyb3ddPVwicm93LmRhdGFcIiBzdHlsZT1cIndpZHRoOiAyOHB4XCI+PC90ZXRhLXNlbGVjdGlvbi1jZWxsPlxuICAgICAgICB9XG4gICAgICAgIEBmb3IgKGNvbHVtbiBvZiBsb2NrZWQ7IHRyYWNrIHRyYWNrQ29sdW1ucyhjb2xJbmRleCwgY29sdW1uKTsgbGV0IGNvbEluZGV4ID0gJGluZGV4KSB7XG4gICAgICAgICAgPHRldGEtY2VsbFxuICAgICAgICAgICAgW2F0dHIuZGF0YS1yb3ddPVwicm93SW5kZXhcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1jb2x1bW5dPVwiY29sdW1uLm5hbWVcIlxuICAgICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICAgICAgW2ZpbHRlck9wdGlvbnNdPVwiZGljdCA/IGRpY3RbY29sdW1uLm5hbWVdIDogW11cIlxuICAgICAgICAgICAgW2RpY3RdPVwiZGljdFwiXG4gICAgICAgICAgICBbcm93XT1cInJvd1wiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4uY2VsbENsYXNzXCJcbiAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cIjBcIlxuICAgICAgICAgICAgW3N0eWxlLmZsZXgtZ3Jvd109XCJjb2x1bW4uZmxleFwiXG4gICAgICAgICAgICBbc3R5bGUuZmxleC1iYXNpcy5weF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgICAgID48L3RldGEtY2VsbD5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuICAgIEBpZiAoc2VsZWN0VHlwZSA9PT0gc2VsZWN0VHlwZUVudW0uY2hlY2tCb3ggJiYgbG9ja2VkLmxlbmd0aCA8IDEpIHtcbiAgICAgIDx0ZXRhLXNlbGVjdGlvbi1jZWxsIFtyb3ddPVwicm93LmRhdGFcIiBzdHlsZT1cIndpZHRoOiAyOHB4XCI+PC90ZXRhLXNlbGVjdGlvbi1jZWxsPlxuICAgIH1cbiAgICBAZm9yIChjb2x1bW4gb2YgdW5sb2NrZWQ7IHRyYWNrIHRyYWNrQ29sdW1ucyhjb2xJbmRleCwgY29sdW1uKTsgbGV0IGNvbEluZGV4ID0gJGluZGV4KSB7XG4gICAgICA8dGV0YS1jZWxsXG4gICAgICAgIFthdHRyLmRhdGEtcm93XT1cInJvd0luZGV4XCJcbiAgICAgICAgW2F0dHIuZGF0YS1jb2x1bW5dPVwiY29sdW1uLm5hbWVcIlxuICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgIFtmaWx0ZXJPcHRpb25zXT1cImRpY3QgPyBkaWN0W2NvbHVtbi5uYW1lXSA6IFtdXCJcbiAgICAgICAgW2RpY3RdPVwiZGljdFwiXG4gICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uLmNlbGxDbGFzc1wiXG4gICAgICAgIFthdHRyLnRhYmluZGV4XT1cIjBcIlxuICAgICAgICBbc3R5bGUuZmxleC1ncm93XT1cImNvbHVtbi5mbGV4XCJcbiAgICAgICAgW3N0eWxlLmZsZXgtYmFzaXMucHhdPVwiY29sdW1uLndpZHRoXCJcbiAgICAgID48L3RldGEtY2VsbD5cbiAgICB9XG4gIDwvdGV0YS10YWJsZS1yb3c+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2FnZ1RlbXBsYXRlPlxuICBAaWYgKGxvY2FsZSB8IGFzeW5jOyBhcyBsb2MpIHtcbiAgICBAaWYgKGFnZ3JlZ2F0ZSkge1xuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInRhYmxlLXJvd1wiXG4gICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwicm93SGVpZ2h0KClcIlxuICAgICAgICBbY2xhc3MudGFibGUtcm93X3ZpcnR1YWxdPVwidmlydHVhbFwiXG4gICAgICAgIFtzdHlsZS5mbGV4LWdyb3ddPVwidG90YWxGbGV4XCJcbiAgICAgICAgW3N0eWxlLmZsZXgtYmFzaXMucHhdPVwidG90YWxXaWR0aFwiXG4gICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwidG90YWxXaWR0aFwiXG4gICAgICA+XG4gICAgICAgIEBpZiAobG9ja2VkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInRhYmxlLXJvd19sb2NrZWRcIlxuICAgICAgICAgICAgW3N0eWxlLmZsZXgtZ3Jvd109XCJsb2NrZWRGbGV4XCJcbiAgICAgICAgICAgIFtzdHlsZS5mbGV4LWJhc2lzLnB4XT1cImxvY2tlZFdpZHRoXCJcbiAgICAgICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwibG9ja2VkV2lkdGhcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoc2VsZWN0VHlwZSA9PT0gc2VsZWN0VHlwZUVudW0uY2hlY2tCb3ggJiYgbG9ja2VkLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNlbGwgYWxpZ24tY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIiBzdHlsZT1cIndpZHRoOiAyOHB4XCI+XG4gICAgICAgICAgICAgICAgPHRldGEtaWNvbiBbbmFtZV09XCInc3VtQ29sb3InXCI+PC90ZXRhLWljb24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGZvciAoY29sdW1uIG9mIGxvY2tlZDsgdHJhY2sgdHJhY2tDb2x1bW5zKGNvbEluZGV4LCBjb2x1bW4pOyBsZXQgY29sSW5kZXggPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2VsbCBjZWxsLWNvbXBvbmVudCBhZ2dyZWdhdGUtY2VsbFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1jb2x1bW5dPVwiY29sdW1uLm5hbWVcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbi5jZWxsQ2xhc3NcIlxuICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cIjBcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5mbGV4LWdyb3ddPVwiY29sdW1uLmZsZXhcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5mbGV4LWJhc2lzLnB4XT1cImNvbHVtbi53aWR0aFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBAaWYgKGNvbHVtbi5hZ2dyZWdhdGUgIT09IGFnZ3JlZ2F0aW9uVHlwZS5ub25lKSB7XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNlbGwtdGV4dCBjZWxsLXRleHRfbnVtZXJpYyBmb250LXRpdGxlLTNcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgbG9jW2dldEFnZ3JlZ2F0ZVRleHQoY29sdW1uKV0gfX06XG4gICAgICAgICAgICAgICAgICAgIHt7IGdldEFnZ3JlZ2F0ZVZhbHVlKGNvbHVtbikgfCB0ZXRhTnVtYmVyOiAyIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKHNlbGVjdFR5cGUgPT09IHNlbGVjdFR5cGVFbnVtLmNoZWNrQm94ICYmIGxvY2tlZC5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNlbGwgYWxpZ24tY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIiBzdHlsZT1cIndpZHRoOiAyOHB4XCI+XG4gICAgICAgICAgICA8dGV0YS1pY29uIFtuYW1lXT1cIidzdW1Db2xvcidcIj48L3RldGEtaWNvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICBAZm9yIChjb2x1bW4gb2YgdW5sb2NrZWQ7IHRyYWNrIHRyYWNrQ29sdW1ucyhjb2xJbmRleCwgY29sdW1uKTsgbGV0IGNvbEluZGV4ID0gJGluZGV4KSB7XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJjZWxsIGNlbGwtY29tcG9uZW50IGFnZ3JlZ2F0ZS1jZWxsXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtY29sdW1uXT1cImNvbHVtbi5uYW1lXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbi5jZWxsQ2xhc3NcIlxuICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiMFwiXG4gICAgICAgICAgICBbc3R5bGUuZmxleC1ncm93XT1cImNvbHVtbi5mbGV4XCJcbiAgICAgICAgICAgIFtzdHlsZS5mbGV4LWJhc2lzLnB4XT1cImNvbHVtbi53aWR0aFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgQGlmIChjb2x1bW4uYWdncmVnYXRlICE9PSBhZ2dyZWdhdGlvblR5cGUubm9uZSkge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNlbGwtdGV4dCBjZWxsLXRleHRfbnVtZXJpYyBmb250LXRpdGxlLTNcIj5cbiAgICAgICAgICAgICAgICB7eyBsb2NbZ2V0QWdncmVnYXRlVGV4dChjb2x1bW4pXSB9fTpcbiAgICAgICAgICAgICAgICB7eyBnZXRBZ2dyZWdhdGVWYWx1ZShjb2x1bW4pIHwgdGV0YU51bWJlcjogMiB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlSb3c+XG4gIDxkaXZcbiAgICBjbGFzcz1cImVtcHR5LXRhYmxlLXJvd1wiXG4gICAgc3R5bGU9XCJoZWlnaHQ6IDAuMXB4XCJcbiAgICBbc3R5bGUuZmxleC1ncm93XT1cInRvdGFsRmxleFwiXG4gICAgW3N0eWxlLmZsZXgtYmFzaXMucHhdPVwidG90YWxXaWR0aFwiXG4gICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJ0b3RhbFdpZHRoXCJcbiAgPjwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
package/esm2022/component/table/table-head/filter-dropdown-tab/filter-dropdown-tab.component.mjs
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, HostListener, Input, } from '@angular/core';
|
|
2
|
-
import { TableColumn } from '../../contract/table-column';
|
|
3
|
-
import { FilterState } from '../../../filter/contarct/filter-state';
|
|
4
|
-
import { TableService } from '../../service/table.service';
|
|
5
|
-
import { TetaConfigService } from '../../../../locale/teta-config.service';
|
|
6
|
-
import { AsyncPipe } from '@angular/common';
|
|
7
|
-
import { IconComponent } from '../../../icon/icon/icon.component';
|
|
8
|
-
import { ButtonComponent } from '../../../button/button/button.component';
|
|
9
|
-
import { ToolbarComponent } from '../../../toolbar/toolbar/toolbar.component';
|
|
10
|
-
import { FilterHostComponent } from '../../../filter/filter-host/filter-host.component';
|
|
11
|
-
import * as i0 from "@angular/core";
|
|
12
|
-
import * as i1 from "../../service/table.service";
|
|
13
|
-
import * as i2 from "../../../../locale/teta-config.service";
|
|
14
|
-
export class FilterDropdownTabComponent {
|
|
15
|
-
enter() {
|
|
16
|
-
this.applyFilter();
|
|
17
|
-
}
|
|
18
|
-
constructor(_svc, _config, _elementRef, _cdr) {
|
|
19
|
-
this._svc = _svc;
|
|
20
|
-
this._config = _config;
|
|
21
|
-
this._elementRef = _elementRef;
|
|
22
|
-
this._cdr = _cdr;
|
|
23
|
-
this.locale = this._config.locale;
|
|
24
|
-
this.filterOptions = this._svc.filterOptions;
|
|
25
|
-
}
|
|
26
|
-
clearFilter() {
|
|
27
|
-
this._svc.clearFilter(this.column);
|
|
28
|
-
this.close();
|
|
29
|
-
this._cdr.markForCheck();
|
|
30
|
-
}
|
|
31
|
-
applyFilter() {
|
|
32
|
-
this._svc.setState(new FilterState(this.state));
|
|
33
|
-
this.close();
|
|
34
|
-
this._cdr.markForCheck();
|
|
35
|
-
}
|
|
36
|
-
ngOnInit() { }
|
|
37
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: FilterDropdownTabComponent, deps: [{ token: i1.TableService }, { token: i2.TetaConfigService }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
38
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: FilterDropdownTabComponent, isStandalone: true, selector: "teta-filter-dropdown-tab", inputs: { columns: "columns", column: "column", state: "state", data: "data", close: "close" }, host: { listeners: { "keydown.enter": "enter()" } }, ngImport: i0, template: "@if (locale | async; as loc) {\n @if (filterOptions | async; as options) {\n <teta-filter-host\n [column]=\"column\"\n [data]=\"data\"\n [state]=\"state\"\n [filterOptions]=\"options[column.name]\"\n ></teta-filter-host>\n }\n <teta-toolbar class=\"justify-content-between\">\n <button type=\"button\" teta-button [palette]=\"'text'\" [view]=\"'ghost'\" (click)=\"clearFilter()\">\n {{ loc.clear }}\n </button>\n <button type=\"button\" teta-button [palette]=\"'primary'\" (click)=\"applyFilter()\">\n <teta-icon [name]=\"'tick'\" [palette]=\"'white'\"></teta-icon>\n {{ loc.apply }}\n </button>\n </teta-toolbar>\n}\n", styles: [":host{display:flex;flex-direction:column;min-height:0;min-width:0}\n"], dependencies: [{ kind: "component", type: FilterHostComponent, selector: "teta-filter-host", inputs: ["column", "state", "data", "filterOptions"], outputs: ["filterChanged"] }, { kind: "component", type: ToolbarComponent, selector: "teta-toolbar", inputs: ["palette", "class"] }, { kind: "component", type: ButtonComponent, selector: "button[teta-button], teta-button", inputs: ["palette", "class", "view", "square", "viewType", "size"] }, { kind: "component", type: IconComponent, selector: "teta-icon", inputs: ["name", "size", "palette", "class"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
39
|
-
}
|
|
40
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: FilterDropdownTabComponent, decorators: [{
|
|
41
|
-
type: Component,
|
|
42
|
-
args: [{ selector: 'teta-filter-dropdown-tab', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [FilterHostComponent, ToolbarComponent, ButtonComponent, IconComponent, AsyncPipe], template: "@if (locale | async; as loc) {\n @if (filterOptions | async; as options) {\n <teta-filter-host\n [column]=\"column\"\n [data]=\"data\"\n [state]=\"state\"\n [filterOptions]=\"options[column.name]\"\n ></teta-filter-host>\n }\n <teta-toolbar class=\"justify-content-between\">\n <button type=\"button\" teta-button [palette]=\"'text'\" [view]=\"'ghost'\" (click)=\"clearFilter()\">\n {{ loc.clear }}\n </button>\n <button type=\"button\" teta-button [palette]=\"'primary'\" (click)=\"applyFilter()\">\n <teta-icon [name]=\"'tick'\" [palette]=\"'white'\"></teta-icon>\n {{ loc.apply }}\n </button>\n </teta-toolbar>\n}\n", styles: [":host{display:flex;flex-direction:column;min-height:0;min-width:0}\n"] }]
|
|
43
|
-
}], ctorParameters: () => [{ type: i1.TableService }, { type: i2.TetaConfigService }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }], propDecorators: { columns: [{
|
|
44
|
-
type: Input
|
|
45
|
-
}], column: [{
|
|
46
|
-
type: Input
|
|
47
|
-
}], state: [{
|
|
48
|
-
type: Input
|
|
49
|
-
}], data: [{
|
|
50
|
-
type: Input
|
|
51
|
-
}], close: [{
|
|
52
|
-
type: Input
|
|
53
|
-
}], enter: [{
|
|
54
|
-
type: HostListener,
|
|
55
|
-
args: ['keydown.enter']
|
|
56
|
-
}] } });
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWRyb3Bkb3duLXRhYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlLWhlYWQvZmlsdGVyLWRyb3Bkb3duLXRhYi9maWx0ZXItZHJvcGRvd24tdGFiLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvdGFibGUvdGFibGUtaGVhZC9maWx0ZXItZHJvcGRvd24tdGFiL2ZpbHRlci1kcm9wZG93bi10YWIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxHQUVOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFHcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBSTNFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDOzs7O0FBVXhGLE1BQU0sT0FBTywwQkFBMEI7SUFVTixLQUFLO1FBQ2xDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsWUFDVSxJQUFxQixFQUNyQixPQUEwQixFQUMxQixXQUF1QixFQUN2QixJQUF1QjtRQUh2QixTQUFJLEdBQUosSUFBSSxDQUFpQjtRQUNyQixZQUFPLEdBQVAsT0FBTyxDQUFtQjtRQUMxQixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUN2QixTQUFJLEdBQUosSUFBSSxDQUFtQjtRQUUvQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDL0MsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFFBQVEsS0FBVSxDQUFDOzhHQXBDUiwwQkFBMEI7a0dBQTFCLDBCQUEwQix5T0NoQ3ZDLHFxQkFtQkEsOEhEV1ksbUJBQW1CLCtJQUFFLGdCQUFnQix1RkFBRSxlQUFlLGlKQUFFLGFBQWEsK0ZBQUUsU0FBUzs7MkZBRS9FLDBCQUEwQjtrQkFSdEMsU0FBUzsrQkFDRSwwQkFBMEIsbUJBR25CLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQLENBQUMsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxTQUFTLENBQUM7MEtBR2xGLE9BQU87c0JBQWYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBS3lCLEtBQUs7c0JBQW5DLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGFibGVDb2x1bW4gfSBmcm9tICcuLi8uLi9jb250cmFjdC90YWJsZS1jb2x1bW4nO1xuaW1wb3J0IHsgRmlsdGVyU3RhdGUgfSBmcm9tICcuLi8uLi8uLi9maWx0ZXIvY29udGFyY3QvZmlsdGVyLXN0YXRlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRldGFMb2NhbGlzYXRpb24gfSBmcm9tICcuLi8uLi8uLi8uLi9sb2NhbGUvdGV0YS1sb2NhbGlzYXRpb24nO1xuaW1wb3J0IHsgVGFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS90YWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IFRldGFDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vbG9jYWxlL3RldGEtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgSURpY3Rpb25hcnkgfSBmcm9tICcuLi8uLi8uLi8uLi9jb21tb24vY29udHJhY3QvaS1kaWN0aW9uYXJ5JztcbmltcG9ydCB7IElJZE5hbWUgfSBmcm9tICcuLi8uLi8uLi8uLi9jb21tb24vY29udHJhY3QvaS1pZC1uYW1lJztcbmltcG9ydCB7IElUcmVlRGF0YSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvbW1vbi9jb250cmFjdC9pLXRyZWUtZGF0YSc7XG5pbXBvcnQgeyBBc3luY1BpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2ljb24vaWNvbi9pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9idXR0b24vYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgVG9vbGJhckNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3Rvb2xiYXIvdG9vbGJhci90b29sYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGaWx0ZXJIb3N0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vZmlsdGVyL2ZpbHRlci1ob3N0L2ZpbHRlci1ob3N0LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RldGEtZmlsdGVyLWRyb3Bkb3duLXRhYicsXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXItZHJvcGRvd24tdGFiLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmlsdGVyLWRyb3Bkb3duLXRhYi5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0ZpbHRlckhvc3RDb21wb25lbnQsIFRvb2xiYXJDb21wb25lbnQsIEJ1dHRvbkNvbXBvbmVudCwgSWNvbkNvbXBvbmVudCwgQXN5bmNQaXBlXSxcbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyRHJvcGRvd25UYWJDb21wb25lbnQ8VD4gaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBjb2x1bW5zOiBJVHJlZURhdGFbXTtcbiAgQElucHV0KCkgY29sdW1uOiBUYWJsZUNvbHVtbjtcbiAgQElucHV0KCkgc3RhdGU6IEZpbHRlclN0YXRlO1xuICBASW5wdXQoKSBkYXRhOiBUW107XG4gIEBJbnB1dCgpIGNsb3NlOiAoKSA9PiB2b2lkO1xuXG4gIGxvY2FsZTogT2JzZXJ2YWJsZTxUZXRhTG9jYWxpc2F0aW9uPjtcbiAgZmlsdGVyT3B0aW9uczogT2JzZXJ2YWJsZTxJRGljdGlvbmFyeTxJSWROYW1lPGFueT5bXT4+O1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZW50ZXInKSBlbnRlcigpIHtcbiAgICB0aGlzLmFwcGx5RmlsdGVyKCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9zdmM6IFRhYmxlU2VydmljZTxUPixcbiAgICBwcml2YXRlIF9jb25maWc6IFRldGFDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgKSB7XG4gICAgdGhpcy5sb2NhbGUgPSB0aGlzLl9jb25maWcubG9jYWxlO1xuICAgIHRoaXMuZmlsdGVyT3B0aW9ucyA9IHRoaXMuX3N2Yy5maWx0ZXJPcHRpb25zO1xuICB9XG5cbiAgY2xlYXJGaWx0ZXIoKSB7XG4gICAgdGhpcy5fc3ZjLmNsZWFyRmlsdGVyKHRoaXMuY29sdW1uKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgYXBwbHlGaWx0ZXIoKSB7XG4gICAgdGhpcy5fc3ZjLnNldFN0YXRlKG5ldyBGaWx0ZXJTdGF0ZSh0aGlzLnN0YXRlKSk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge31cbn1cbiIsIkBpZiAobG9jYWxlIHwgYXN5bmM7IGFzIGxvYykge1xuICBAaWYgKGZpbHRlck9wdGlvbnMgfCBhc3luYzsgYXMgb3B0aW9ucykge1xuICAgIDx0ZXRhLWZpbHRlci1ob3N0XG4gICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICBbZGF0YV09XCJkYXRhXCJcbiAgICAgIFtzdGF0ZV09XCJzdGF0ZVwiXG4gICAgICBbZmlsdGVyT3B0aW9uc109XCJvcHRpb25zW2NvbHVtbi5uYW1lXVwiXG4gICAgPjwvdGV0YS1maWx0ZXItaG9zdD5cbiAgfVxuICA8dGV0YS10b29sYmFyIGNsYXNzPVwianVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0ZXRhLWJ1dHRvbiBbcGFsZXR0ZV09XCIndGV4dCdcIiBbdmlld109XCInZ2hvc3QnXCIgKGNsaWNrKT1cImNsZWFyRmlsdGVyKClcIj5cbiAgICAgIHt7IGxvYy5jbGVhciB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRldGEtYnV0dG9uIFtwYWxldHRlXT1cIidwcmltYXJ5J1wiIChjbGljayk9XCJhcHBseUZpbHRlcigpXCI+XG4gICAgICA8dGV0YS1pY29uIFtuYW1lXT1cIid0aWNrJ1wiIFtwYWxldHRlXT1cIid3aGl0ZSdcIj48L3RldGEtaWNvbj5cbiAgICAgIHt7IGxvYy5hcHBseSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L3RldGEtdG9vbGJhcj5cbn1cbiJdfQ==
|
package/esm2022/component/table/table-head/main-dropdown-tab/main-dropdown-tab.component.mjs
DELETED
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Input } from '@angular/core';
|
|
2
|
-
import { TableService } from '../../service/table.service';
|
|
3
|
-
import { TetaConfigService } from '../../../../locale/teta-config.service';
|
|
4
|
-
import { TableColumn } from '../../contract/table-column';
|
|
5
|
-
import { StateUtil } from '../../util/state-util';
|
|
6
|
-
import { FilterState } from '../../../filter/contarct/filter-state';
|
|
7
|
-
import { SortEvent } from '../../contract/sort-event';
|
|
8
|
-
import { AsyncPipe } from '@angular/common';
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
import * as i1 from "../../service/table.service";
|
|
11
|
-
import * as i2 from "../../../../locale/teta-config.service";
|
|
12
|
-
export class MainDropdownTabComponent {
|
|
13
|
-
constructor(_svc, _config, _elementRef, _cdr) {
|
|
14
|
-
this._svc = _svc;
|
|
15
|
-
this._config = _config;
|
|
16
|
-
this._elementRef = _elementRef;
|
|
17
|
-
this._cdr = _cdr;
|
|
18
|
-
this.locale = this._config.locale;
|
|
19
|
-
}
|
|
20
|
-
get sortParam() {
|
|
21
|
-
return StateUtil.getSortState(this.state, this.column);
|
|
22
|
-
}
|
|
23
|
-
get filtered() {
|
|
24
|
-
return StateUtil.isColumnFiltered(this.state, this.column);
|
|
25
|
-
}
|
|
26
|
-
get parent() {
|
|
27
|
-
return this._svc.getColumnParent(this.column);
|
|
28
|
-
}
|
|
29
|
-
pinColumn() {
|
|
30
|
-
this._svc.pinColumn(this.column);
|
|
31
|
-
}
|
|
32
|
-
sortAsc(event) {
|
|
33
|
-
this._svc.sortAsc(new SortEvent(this.column, event.shiftKey));
|
|
34
|
-
}
|
|
35
|
-
sortDesc(event) {
|
|
36
|
-
this._svc.sortDesc(new SortEvent(this.column, event.shiftKey));
|
|
37
|
-
}
|
|
38
|
-
clearSort() {
|
|
39
|
-
this._svc.clearSort(this.column);
|
|
40
|
-
}
|
|
41
|
-
clearAllSort() {
|
|
42
|
-
this._svc.clearAllSort();
|
|
43
|
-
}
|
|
44
|
-
hasFilteredColumns() {
|
|
45
|
-
return StateUtil.hasFilteredColumns(this.state);
|
|
46
|
-
}
|
|
47
|
-
hasSortedColumns() {
|
|
48
|
-
return StateUtil.hasSortedColumns(this.state);
|
|
49
|
-
}
|
|
50
|
-
restoreDefaultColumns() {
|
|
51
|
-
this._svc.restoreDefaultColumns();
|
|
52
|
-
}
|
|
53
|
-
clearFilter() {
|
|
54
|
-
this._svc.clearFilter(this.column);
|
|
55
|
-
this.close();
|
|
56
|
-
this._cdr.markForCheck();
|
|
57
|
-
}
|
|
58
|
-
clearAllFilters() {
|
|
59
|
-
this._svc.clearAllFilters();
|
|
60
|
-
this.close();
|
|
61
|
-
this._cdr.markForCheck();
|
|
62
|
-
}
|
|
63
|
-
autosizeColumn() {
|
|
64
|
-
this._svc.autosizeColumn(this.column, this.headCellElementRef.nativeElement);
|
|
65
|
-
}
|
|
66
|
-
autosizeAllColumns() {
|
|
67
|
-
this._svc.autosizeAllColumns(this.headCellElementRef.nativeElement);
|
|
68
|
-
}
|
|
69
|
-
ngOnInit() { }
|
|
70
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: MainDropdownTabComponent, deps: [{ token: i1.TableService }, { token: i2.TetaConfigService }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
71
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: MainDropdownTabComponent, isStandalone: true, selector: "teta-main-dropdown-tab", inputs: { columns: "columns", column: "column", state: "state", data: "data", close: "close", headCellElementRef: "headCellElementRef" }, ngImport: i0, template: "@if (locale | async; as loc) {\n <div class=\"list column_auto\">\n @if (!parent) {\n <div class=\"list-item list-item_interactive\" (click)=\"pinColumn()\">\n {{ column.locked ? loc.unpin : loc.pin }}\n </div>\n <div class=\"list-divider\"></div>\n }\n @if (column.sortable) {\n <div class=\"list-item list-item_interactive\" (click)=\"sortAsc($event)\">\n {{ loc.sortAsc }}\n </div>\n <div class=\"list-item list-item_interactive\" (click)=\"sortDesc($event)\">\n {{ loc.sortDesc }}\n </div>\n @if (hasSortedColumns()) {\n @if (sortParam) {\n <div class=\"list-item list-item_interactive\" (click)=\"clearSort()\">\n {{ loc.clearSort }}\n </div>\n }\n <div class=\"list-item list-item_interactive\" (click)=\"clearAllSort()\">\n {{ loc.clearAllSort }}\n </div>\n <div class=\"list-divider\"></div>\n }\n }\n @if (hasFilteredColumns()) {\n @if (filtered) {\n <div class=\"list-item list-item_interactive\" (click)=\"clearFilter()\">\n {{ loc.clearFilter }}\n </div>\n }\n <div class=\"list-item list-item_interactive\" (click)=\"clearAllFilters()\">\n {{ loc.clearAllFilters }}\n </div>\n <div class=\"list-divider\"></div>\n }\n <div class=\"list-item list-item_interactive\" (click)=\"autosizeColumn()\">\n {{ loc.autosizeColumn }}\n </div>\n <div class=\"list-item list-item_interactive\" (click)=\"autosizeAllColumns()\">\n {{ loc.autosizeAll }}\n </div>\n <div class=\"list-divider\"></div>\n <div class=\"list-item list-item_interactive\" (click)=\"restoreDefaultColumns()\">\n {{ loc.resetColumnsSize }}\n </div>\n </div>\n}\n", styles: [":host{display:flex;flex-direction:column}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
72
|
-
}
|
|
73
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: MainDropdownTabComponent, decorators: [{
|
|
74
|
-
type: Component,
|
|
75
|
-
args: [{ selector: 'teta-main-dropdown-tab', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [AsyncPipe], template: "@if (locale | async; as loc) {\n <div class=\"list column_auto\">\n @if (!parent) {\n <div class=\"list-item list-item_interactive\" (click)=\"pinColumn()\">\n {{ column.locked ? loc.unpin : loc.pin }}\n </div>\n <div class=\"list-divider\"></div>\n }\n @if (column.sortable) {\n <div class=\"list-item list-item_interactive\" (click)=\"sortAsc($event)\">\n {{ loc.sortAsc }}\n </div>\n <div class=\"list-item list-item_interactive\" (click)=\"sortDesc($event)\">\n {{ loc.sortDesc }}\n </div>\n @if (hasSortedColumns()) {\n @if (sortParam) {\n <div class=\"list-item list-item_interactive\" (click)=\"clearSort()\">\n {{ loc.clearSort }}\n </div>\n }\n <div class=\"list-item list-item_interactive\" (click)=\"clearAllSort()\">\n {{ loc.clearAllSort }}\n </div>\n <div class=\"list-divider\"></div>\n }\n }\n @if (hasFilteredColumns()) {\n @if (filtered) {\n <div class=\"list-item list-item_interactive\" (click)=\"clearFilter()\">\n {{ loc.clearFilter }}\n </div>\n }\n <div class=\"list-item list-item_interactive\" (click)=\"clearAllFilters()\">\n {{ loc.clearAllFilters }}\n </div>\n <div class=\"list-divider\"></div>\n }\n <div class=\"list-item list-item_interactive\" (click)=\"autosizeColumn()\">\n {{ loc.autosizeColumn }}\n </div>\n <div class=\"list-item list-item_interactive\" (click)=\"autosizeAllColumns()\">\n {{ loc.autosizeAll }}\n </div>\n <div class=\"list-divider\"></div>\n <div class=\"list-item list-item_interactive\" (click)=\"restoreDefaultColumns()\">\n {{ loc.resetColumnsSize }}\n </div>\n </div>\n}\n", styles: [":host{display:flex;flex-direction:column}\n"] }]
|
|
76
|
-
}], ctorParameters: () => [{ type: i1.TableService }, { type: i2.TetaConfigService }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }], propDecorators: { columns: [{
|
|
77
|
-
type: Input
|
|
78
|
-
}], column: [{
|
|
79
|
-
type: Input
|
|
80
|
-
}], state: [{
|
|
81
|
-
type: Input
|
|
82
|
-
}], data: [{
|
|
83
|
-
type: Input
|
|
84
|
-
}], close: [{
|
|
85
|
-
type: Input
|
|
86
|
-
}], headCellElementRef: [{
|
|
87
|
-
type: Input
|
|
88
|
-
}] } });
|
|
89
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi1kcm9wZG93bi10YWIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudC90YWJsZS90YWJsZS1oZWFkL21haW4tZHJvcGRvd24tdGFiL21haW4tZHJvcGRvd24tdGFiLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvdGFibGUvdGFibGUtaGVhZC9tYWluLWRyb3Bkb3duLXRhYi9tYWluLWRyb3Bkb3duLXRhYi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDakgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUkxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFVNUMsTUFBTSxPQUFPLHdCQUF3QjtJQVVuQyxZQUNVLElBQXFCLEVBQ3JCLE9BQTBCLEVBQzFCLFdBQXVCLEVBQ3ZCLElBQXVCO1FBSHZCLFNBQUksR0FBSixJQUFJLENBQWlCO1FBQ3JCLFlBQU8sR0FBUCxPQUFPLENBQW1CO1FBQzFCLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQ3ZCLFNBQUksR0FBSixJQUFJLENBQW1CO1FBRS9CLElBQUksQ0FBQyxNQUFN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c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvdGFibGUuc2VydmljZSc7XG5pbXBvcnQgeyBUZXRhQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2xvY2FsZS90ZXRhLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uIH0gZnJvbSAnLi4vLi4vY29udHJhY3QvdGFibGUtY29sdW1uJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRldGFMb2NhbGlzYXRpb24gfSBmcm9tICcuLi8uLi8uLi8uLi9sb2NhbGUvdGV0YS1sb2NhbGlzYXRpb24nO1xuaW1wb3J0IHsgU29ydFBhcmFtIH0gZnJvbSAnLi4vLi4vLi4vZmlsdGVyL2NvbnRhcmN0L3NvcnQtcGFyYW0nO1xuaW1wb3J0IHsgU3RhdGVVdGlsIH0gZnJvbSAnLi4vLi4vdXRpbC9zdGF0ZS11dGlsJztcbmltcG9ydCB7IEZpbHRlclN0YXRlIH0gZnJvbSAnLi4vLi4vLi4vZmlsdGVyL2NvbnRhcmN0L2ZpbHRlci1zdGF0ZSc7XG5pbXBvcnQgeyBTb3J0RXZlbnQgfSBmcm9tICcuLi8uLi9jb250cmFjdC9zb3J0LWV2ZW50JztcbmltcG9ydCB7IElUcmVlRGF0YSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvbW1vbi9jb250cmFjdC9pLXRyZWUtZGF0YSc7XG5pbXBvcnQgeyBBc3luY1BpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZXRhLW1haW4tZHJvcGRvd24tdGFiJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21haW4tZHJvcGRvd24tdGFiLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWFpbi1kcm9wZG93bi10YWIuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtBc3luY1BpcGVdLFxufSlcbmV4cG9ydCBjbGFzcyBNYWluRHJvcGRvd25UYWJDb21wb25lbnQ8VD4gaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBjb2x1bW5zOiBJVHJlZURhdGFbXTtcbiAgQElucHV0KCkgY29sdW1uOiBUYWJsZUNvbHVtbjtcbiAgQElucHV0KCkgc3RhdGU6IEZpbHRlclN0YXRlO1xuICBASW5wdXQoKSBkYXRhOiBUW107XG4gIEBJbnB1dCgpIGNsb3NlOiAoKSA9PiB2b2lkO1xuICBASW5wdXQoKSBoZWFkQ2VsbEVsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG5cbiAgbG9jYWxlOiBPYnNlcnZhYmxlPFRldGFMb2NhbGlzYXRpb24+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX3N2YzogVGFibGVTZXJ2aWNlPFQ+LFxuICAgIHByaXZhdGUgX2NvbmZpZzogVGV0YUNvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICApIHtcbiAgICB0aGlzLmxvY2FsZSA9IHRoaXMuX2NvbmZpZy5sb2NhbGU7XG4gIH1cblxuICBnZXQgc29ydFBhcmFtKCk6IFNvcnRQYXJhbSB7XG4gICAgcmV0dXJuIFN0YXRlVXRpbC5nZXRTb3J0U3RhdGUodGhpcy5zdGF0ZSwgdGhpcy5jb2x1bW4pO1xuICB9XG5cbiAgZ2V0IGZpbHRlcmVkKCkge1xuICAgIHJldHVybiBTdGF0ZVV0aWwuaXNDb2x1bW5GaWx0ZXJlZCh0aGlzLnN0YXRlLCB0aGlzLmNvbHVtbik7XG4gIH1cblxuICBnZXQgcGFyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9zdmMuZ2V0Q29sdW1uUGFyZW50KHRoaXMuY29sdW1uKTtcbiAgfVxuXG4gIHBpbkNvbHVtbigpIHtcbiAgICB0aGlzLl9zdmMucGluQ29sdW1uKHRoaXMuY29sdW1uKTtcbiAgfVxuXG4gIHNvcnRBc2MoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLl9zdmMuc29ydEFzYyhuZXcgU29ydEV2ZW50KHRoaXMuY29sdW1uLCBldmVudC5zaGlmdEtleSkpO1xuICB9XG5cbiAgc29ydERlc2MoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLl9zdmMuc29ydERlc2MobmV3IFNvcnRFdmVudCh0aGlzLmNvbHVtbiwgZXZlbnQuc2hpZnRLZXkpKTtcbiAgfVxuXG4gIGNsZWFyU29ydCgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdmMuY2xlYXJTb3J0KHRoaXMuY29sdW1uKTtcbiAgfVxuXG4gIGNsZWFyQWxsU29ydCgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdmMuY2xlYXJBbGxTb3J0KCk7XG4gIH1cblxuICBoYXNGaWx0ZXJlZENvbHVtbnMoKSB7XG4gICAgcmV0dXJuIFN0YXRlVXRpbC5oYXNGaWx0ZXJlZENvbHVtbnModGhpcy5zdGF0ZSk7XG4gIH1cblxuICBoYXNTb3J0ZWRDb2x1bW5zKCkge1xuICAgIHJldHVybiBTdGF0ZVV0aWwuaGFzU29ydGVkQ29sdW1ucyh0aGlzLnN0YXRlKTtcbiAgfVxuXG4gIHJlc3RvcmVEZWZhdWx0Q29sdW1ucygpIHtcbiAgICB0aGlzLl9zdmMucmVzdG9yZURlZmF1bHRDb2x1bW5zKCk7XG4gIH1cblxuICBjbGVhckZpbHRlcigpIHtcbiAgICB0aGlzLl9zdmMuY2xlYXJGaWx0ZXIodGhpcy5jb2x1bW4pO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBjbGVhckFsbEZpbHRlcnMoKSB7XG4gICAgdGhpcy5fc3ZjLmNsZWFyQWxsRmlsdGVycygpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBhdXRvc2l6ZUNvbHVtbigpIHtcbiAgICB0aGlzLl9zdmMuYXV0b3NpemVDb2x1bW4odGhpcy5jb2x1bW4sIHRoaXMuaGVhZENlbGxFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgYXV0b3NpemVBbGxDb2x1bW5zKCkge1xuICAgIHRoaXMuX3N2Yy5hdXRvc2l6ZUFsbENvbHVtbnModGhpcy5oZWFkQ2VsbEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHt9XG59XG4iLCJAaWYgKGxvY2FsZSB8IGFzeW5jOyBhcyBsb2MpIHtcbiAgPGRpdiBjbGFzcz1cImxpc3QgY29sdW1uX2F1dG9cIj5cbiAgICBAaWYgKCFwYXJlbnQpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWl0ZW0gbGlzdC1pdGVtX2ludGVyYWN0aXZlXCIgKGNsaWNrKT1cInBpbkNvbHVtbigpXCI+XG4gICAgICAgIHt7IGNvbHVtbi5sb2NrZWQgPyBsb2MudW5waW4gOiBsb2MucGluIH19XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWRpdmlkZXJcIj48L2Rpdj5cbiAgICB9XG4gICAgQGlmIChjb2x1bW4uc29ydGFibGUpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWl0ZW0gbGlzdC1pdGVtX2ludGVyYWN0aXZlXCIgKGNsaWNrKT1cInNvcnRBc2MoJGV2ZW50KVwiPlxuICAgICAgICB7eyBsb2Muc29ydEFzYyB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibGlzdC1pdGVtIGxpc3QtaXRlbV9pbnRlcmFjdGl2ZVwiIChjbGljayk9XCJzb3J0RGVzYygkZXZlbnQpXCI+XG4gICAgICAgIHt7IGxvYy5zb3J0RGVzYyB9fVxuICAgICAgPC9kaXY+XG4gICAgICBAaWYgKGhhc1NvcnRlZENvbHVtbnMoKSkge1xuICAgICAgICBAaWYgKHNvcnRQYXJhbSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWl0ZW0gbGlzdC1pdGVtX2ludGVyYWN0aXZlXCIgKGNsaWNrKT1cImNsZWFyU29ydCgpXCI+XG4gICAgICAgICAgICB7eyBsb2MuY2xlYXJTb3J0IH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtaXRlbSBsaXN0LWl0ZW1faW50ZXJhY3RpdmVcIiAoY2xpY2spPVwiY2xlYXJBbGxTb3J0KClcIj5cbiAgICAgICAgICB7eyBsb2MuY2xlYXJBbGxTb3J0IH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1kaXZpZGVyXCI+PC9kaXY+XG4gICAgICB9XG4gICAgfVxuICAgIEBpZiAoaGFzRmlsdGVyZWRDb2x1bW5zKCkpIHtcbiAgICAgIEBpZiAoZmlsdGVyZWQpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtaXRlbSBsaXN0LWl0ZW1faW50ZXJhY3RpdmVcIiAoY2xpY2spPVwiY2xlYXJGaWx0ZXIoKVwiPlxuICAgICAgICAgIHt7IGxvYy5jbGVhckZpbHRlciB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWl0ZW0gbGlzdC1pdGVtX2ludGVyYWN0aXZlXCIgKGNsaWNrKT1cImNsZWFyQWxsRmlsdGVycygpXCI+XG4gICAgICAgIHt7IGxvYy5jbGVhckFsbEZpbHRlcnMgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZGl2aWRlclwiPjwvZGl2PlxuICAgIH1cbiAgICA8ZGl2IGNsYXNzPVwibGlzdC1pdGVtIGxpc3QtaXRlbV9pbnRlcmFjdGl2ZVwiIChjbGljayk9XCJhdXRvc2l6ZUNvbHVtbigpXCI+XG4gICAgICB7eyBsb2MuYXV0b3NpemVDb2x1bW4gfX1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibGlzdC1pdGVtIGxpc3QtaXRlbV9pbnRlcmFjdGl2ZVwiIChjbGljayk9XCJhdXRvc2l6ZUFsbENvbHVtbnMoKVwiPlxuICAgICAge3sgbG9jLmF1dG9zaXplQWxsIH19XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImxpc3QtZGl2aWRlclwiPjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJsaXN0LWl0ZW0gbGlzdC1pdGVtX2ludGVyYWN0aXZlXCIgKGNsaWNrKT1cInJlc3RvcmVEZWZhdWx0Q29sdW1ucygpXCI+XG4gICAgICB7eyBsb2MucmVzZXRDb2x1bW5zU2l6ZSB9fVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbn1cbiJdfQ==
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostBinding, Input, } from '@angular/core';
|
|
2
|
-
import { combineLatest } from 'rxjs';
|
|
3
|
-
import { takeWhile } from 'rxjs/operators';
|
|
4
|
-
import { ArrayUtil } from '../../../common/util/array-util';
|
|
5
|
-
import { SelectType } from '../enum/select-type.enum';
|
|
6
|
-
import { TableService } from '../service/table.service';
|
|
7
|
-
import { TableHeadGroupComponent } from '../table-head-group/table-head-group.component';
|
|
8
|
-
import { SelectionHeadCellComponent } from '../selection-head-cell/selection-head-cell.component';
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
import * as i1 from "../service/table.service";
|
|
11
|
-
export class TableHeadComponent {
|
|
12
|
-
set columns(columns) {
|
|
13
|
-
this._columns = columns;
|
|
14
|
-
this._cdr.markForCheck();
|
|
15
|
-
}
|
|
16
|
-
get columns() {
|
|
17
|
-
return this._columns;
|
|
18
|
-
}
|
|
19
|
-
get locked() {
|
|
20
|
-
return this._columns.filter((_) => _.locked === true && this._hiddenColumns.indexOf(_.name) < 0);
|
|
21
|
-
}
|
|
22
|
-
get unlocked() {
|
|
23
|
-
return this._columns.filter((_) => _.locked === false && this._hiddenColumns.indexOf(_.name) < 0);
|
|
24
|
-
}
|
|
25
|
-
constructor(_svc, _cdr) {
|
|
26
|
-
this._svc = _svc;
|
|
27
|
-
this._cdr = _cdr;
|
|
28
|
-
this.tableHeadClass = true;
|
|
29
|
-
this.selectTypeEnum = SelectType;
|
|
30
|
-
this._alive = true;
|
|
31
|
-
this._columns = [];
|
|
32
|
-
this._hiddenColumns = [];
|
|
33
|
-
}
|
|
34
|
-
track(index, item) {
|
|
35
|
-
return item.name;
|
|
36
|
-
}
|
|
37
|
-
ngOnInit() {
|
|
38
|
-
combineLatest([this._svc.columns, this._svc.hiddenColumns])
|
|
39
|
-
.pipe(takeWhile((_) => this._alive))
|
|
40
|
-
.subscribe((values) => {
|
|
41
|
-
const [columns, hiddenColumns] = values;
|
|
42
|
-
this._hiddenColumns = hiddenColumns;
|
|
43
|
-
this.columns = columns;
|
|
44
|
-
const locked = ArrayUtil.flatten(columns, 'columns', true).filter((_) => this._hiddenColumns.indexOf(_.name) < 0 && _.locked);
|
|
45
|
-
const startWidth = this.selectType === SelectType.checkBox ? 28 : 0;
|
|
46
|
-
this.lockedFlex = locked.reduce((prev, curr) => prev + curr.flex, 0);
|
|
47
|
-
this.lockedWidth = locked.reduce((prev, curr) => prev + curr.width, startWidth);
|
|
48
|
-
this._cdr.markForCheck();
|
|
49
|
-
});
|
|
50
|
-
this._svc.state.pipe(takeWhile((_) => this._alive)).subscribe((_) => {
|
|
51
|
-
this.state = _;
|
|
52
|
-
this._cdr.markForCheck();
|
|
53
|
-
});
|
|
54
|
-
this._svc.displayData.pipe(takeWhile((_) => this._alive)).subscribe((_) => {
|
|
55
|
-
this.data = _.map((_) => _.data);
|
|
56
|
-
this._cdr.markForCheck();
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
ngOnDestroy() {
|
|
60
|
-
this._alive = false;
|
|
61
|
-
}
|
|
62
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: TableHeadComponent, deps: [{ token: i1.TableService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
63
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: TableHeadComponent, isStandalone: true, selector: "teta-table-head", inputs: { selectType: "selectType", showHeadCellMenu: "showHeadCellMenu" }, host: { properties: { "class.table-head": "this.tableHeadClass" } }, ngImport: i0, template: "@if (locked?.length) {\n <div\n class=\"table-head_locked\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\"\n >\n @if (selectType === selectTypeEnum.checkBox) {\n <teta-selection-head-cell style=\"width: 28px\"></teta-selection-head-cell>\n }\n @for (column of locked; track track($index, column)) {\n <teta-table-head-group\n class=\"table-head__group\"\n [data]=\"data\"\n [showHeadCellMenu]=\"showHeadCellMenu\"\n [column]=\"column\"\n ></teta-table-head-group>\n }\n </div>\n}\n@if (unlocked?.length) {\n @if (selectType === selectTypeEnum.checkBox && locked?.length < 1) {\n <teta-selection-head-cell style=\"width: 28px\"></teta-selection-head-cell>\n }\n @for (column of unlocked; track track($index, column)) {\n <teta-table-head-group\n class=\"table-head__group\"\n [data]=\"data\"\n [showHeadCellMenu]=\"showHeadCellMenu\"\n [column]=\"column\"\n ></teta-table-head-group>\n }\n}\n", styles: [""], dependencies: [{ kind: "component", type: SelectionHeadCellComponent, selector: "teta-selection-head-cell" }, { kind: "component", type: TableHeadGroupComponent, selector: "teta-table-head-group", inputs: ["showHeadCellMenu", "data", "column"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
64
|
-
}
|
|
65
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: TableHeadComponent, decorators: [{
|
|
66
|
-
type: Component,
|
|
67
|
-
args: [{ selector: 'teta-table-head', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [SelectionHeadCellComponent, TableHeadGroupComponent], template: "@if (locked?.length) {\n <div\n class=\"table-head_locked\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\"\n >\n @if (selectType === selectTypeEnum.checkBox) {\n <teta-selection-head-cell style=\"width: 28px\"></teta-selection-head-cell>\n }\n @for (column of locked; track track($index, column)) {\n <teta-table-head-group\n class=\"table-head__group\"\n [data]=\"data\"\n [showHeadCellMenu]=\"showHeadCellMenu\"\n [column]=\"column\"\n ></teta-table-head-group>\n }\n </div>\n}\n@if (unlocked?.length) {\n @if (selectType === selectTypeEnum.checkBox && locked?.length < 1) {\n <teta-selection-head-cell style=\"width: 28px\"></teta-selection-head-cell>\n }\n @for (column of unlocked; track track($index, column)) {\n <teta-table-head-group\n class=\"table-head__group\"\n [data]=\"data\"\n [showHeadCellMenu]=\"showHeadCellMenu\"\n [column]=\"column\"\n ></teta-table-head-group>\n }\n}\n" }]
|
|
68
|
-
}], ctorParameters: () => [{ type: i1.TableService }, { type: i0.ChangeDetectorRef }], propDecorators: { selectType: [{
|
|
69
|
-
type: Input
|
|
70
|
-
}], showHeadCellMenu: [{
|
|
71
|
-
type: Input
|
|
72
|
-
}], tableHeadClass: [{
|
|
73
|
-
type: HostBinding,
|
|
74
|
-
args: ['class.table-head']
|
|
75
|
-
}] } });
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtaGVhZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlLWhlYWQvdGFibGUtaGVhZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlLWhlYWQvdGFibGUtaGVhZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsV0FBVyxFQUNYLEtBQUssR0FHTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHNUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQzs7O0FBVWxHLE1BQU0sT0FBTyxrQkFBa0I7SUFjN0IsSUFBSSxPQUFPLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbkcsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNwRyxDQUFDO0lBSUQsWUFDVSxJQUFxQixFQUNyQixJQUF1QjtRQUR2QixTQUFJLEdBQUosSUFBSSxDQUFpQjtRQUNyQixTQUFJLEdBQUosSUFBSSxDQUFtQjtRQWhDaUIsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFHeEUsbUJBQWMsR0FBRyxVQUFVLENBQUM7UUFJcEIsV0FBTSxHQUFHLElBQUksQ0FBQztRQUNkLGFBQVEsR0FBa0IsRUFBRSxDQUFDO1FBQzdCLG1CQUFjLEdBQWEsRUFBRSxDQUFDO0lBd0JuQyxDQUFDO0lBRUosS0FBSyxDQUFDLEtBQWEsRUFBRSxJQUFpQjtRQUNwQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVELFFBQVE7UUFDTixhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ3hELElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNuQyxTQUFTLENBQUMsQ0FBQyxNQUFpQyxFQUFFLEVBQUU7WUFDL0MsTUFBTSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7WUFDeEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxhQUFhLENBQUM7WUFDcEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7WUFDdkIsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FDL0QsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FDM0QsQ0FBQztZQUNGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLEtBQUssVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEUsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBWSxFQUFFLElBQWlCLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzFGLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQVksRUFBRSxJQUFpQixFQUFFLEVBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNyRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDbEUsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDeEUsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDdEIsQ0FBQzs4R0F2RVUsa0JBQWtCO2tHQUFsQixrQkFBa0IsNE5DNUIvQix1aUNBaUNBLDBERFBZLDBCQUEwQixxRUFBRSx1QkFBdUI7OzJGQUVsRCxrQkFBa0I7a0JBUjlCLFNBQVM7K0JBQ0UsaUJBQWlCLG1CQUdWLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQLENBQUMsMEJBQTBCLEVBQUUsdUJBQXVCLENBQUM7aUhBR3JELFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUM0QyxjQUFjO3NCQUEvRCxXQUFXO3VCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VXaGlsZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQXJyYXlVdGlsIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL3V0aWwvYXJyYXktdXRpbCc7XG5pbXBvcnQgeyBGaWx0ZXJTdGF0ZSB9IGZyb20gJy4uLy4uL2ZpbHRlci9jb250YXJjdC9maWx0ZXItc3RhdGUnO1xuaW1wb3J0IHsgVGFibGVDb2x1bW4gfSBmcm9tICcuLi9jb250cmFjdC90YWJsZS1jb2x1bW4nO1xuaW1wb3J0IHsgU2VsZWN0VHlwZSB9IGZyb20gJy4uL2VudW0vc2VsZWN0LXR5cGUuZW51bSc7XG5pbXBvcnQgeyBUYWJsZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL3RhYmxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGFibGVIZWFkR3JvdXBDb21wb25lbnQgfSBmcm9tICcuLi90YWJsZS1oZWFkLWdyb3VwL3RhYmxlLWhlYWQtZ3JvdXAuY29tcG9uZW50JztcbmltcG9ydCB7IFNlbGVjdGlvbkhlYWRDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vc2VsZWN0aW9uLWhlYWQtY2VsbC9zZWxlY3Rpb24taGVhZC1jZWxsLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RldGEtdGFibGUtaGVhZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1oZWFkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUtaGVhZC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1NlbGVjdGlvbkhlYWRDZWxsQ29tcG9uZW50LCBUYWJsZUhlYWRHcm91cENvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlSGVhZENvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgc2VsZWN0VHlwZTogU2VsZWN0VHlwZTtcbiAgQElucHV0KCkgc2hvd0hlYWRDZWxsTWVudTogYm9vbGVhbjtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy50YWJsZS1oZWFkJykgcHJpdmF0ZSByZWFkb25seSB0YWJsZUhlYWRDbGFzcyA9IHRydWU7XG5cbiAgc3RhdGU6IEZpbHRlclN0YXRlO1xuICBzZWxlY3RUeXBlRW51bSA9IFNlbGVjdFR5cGU7XG4gIGxvY2tlZEZsZXg6IG51bWJlcjtcbiAgbG9ja2VkV2lkdGg6IG51bWJlcjtcblxuICBwcml2YXRlIF9hbGl2ZSA9IHRydWU7XG4gIHByaXZhdGUgX2NvbHVtbnM6IFRhYmxlQ29sdW1uW10gPSBbXTtcbiAgcHJpdmF0ZSBfaGlkZGVuQ29sdW1uczogc3RyaW5nW10gPSBbXTtcblxuICBzZXQgY29sdW1ucyhjb2x1bW5zOiBUYWJsZUNvbHVtbltdKSB7XG4gICAgdGhpcy5fY29sdW1ucyA9IGNvbHVtbnM7XG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2V0IGNvbHVtbnMoKTogVGFibGVDb2x1bW5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbnM7XG4gIH1cblxuICBnZXQgbG9ja2VkKCk6IFRhYmxlQ29sdW1uW10ge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5zLmZpbHRlcigoXykgPT4gXy5sb2NrZWQgPT09IHRydWUgJiYgdGhpcy5faGlkZGVuQ29sdW1ucy5pbmRleE9mKF8ubmFtZSkgPCAwKTtcbiAgfVxuXG4gIGdldCB1bmxvY2tlZCgpOiBUYWJsZUNvbHVtbltdIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1ucy5maWx0ZXIoKF8pID0+IF8ubG9ja2VkID09PSBmYWxzZSAmJiB0aGlzLl9oaWRkZW5Db2x1bW5zLmluZGV4T2YoXy5uYW1lKSA8IDApO1xuICB9XG5cbiAgZGF0YTogVFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX3N2YzogVGFibGVTZXJ2aWNlPFQ+LFxuICAgIHByaXZhdGUgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICkge31cblxuICB0cmFjayhpbmRleDogbnVtYmVyLCBpdGVtOiBUYWJsZUNvbHVtbik6IGFueSB7XG4gICAgcmV0dXJuIGl0ZW0ubmFtZTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuX3N2Yy5jb2x1bW5zLCB0aGlzLl9zdmMuaGlkZGVuQ29sdW1uc10pXG4gICAgICAucGlwZSh0YWtlV2hpbGUoKF8pID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlczogW1RhYmxlQ29sdW1uW10sIHN0cmluZ1tdXSkgPT4ge1xuICAgICAgICBjb25zdCBbY29sdW1ucywgaGlkZGVuQ29sdW1uc10gPSB2YWx1ZXM7XG4gICAgICAgIHRoaXMuX2hpZGRlbkNvbHVtbnMgPSBoaWRkZW5Db2x1bW5zO1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSBjb2x1bW5zO1xuICAgICAgICBjb25zdCBsb2NrZWQgPSBBcnJheVV0aWwuZmxhdHRlbihjb2x1bW5zLCAnY29sdW1ucycsIHRydWUpLmZpbHRlcihcbiAgICAgICAgICAoXykgPT4gdGhpcy5faGlkZGVuQ29sdW1ucy5pbmRleE9mKF8ubmFtZSkgPCAwICYmIF8ubG9ja2VkLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBzdGFydFdpZHRoID0gdGhpcy5zZWxlY3RUeXBlID09PSBTZWxlY3RUeXBlLmNoZWNrQm94ID8gMjggOiAwO1xuICAgICAgICB0aGlzLmxvY2tlZEZsZXggPSBsb2NrZWQucmVkdWNlKChwcmV2OiBudW1iZXIsIGN1cnI6IFRhYmxlQ29sdW1uKSA9PiBwcmV2ICsgY3Vyci5mbGV4LCAwKTtcbiAgICAgICAgdGhpcy5sb2NrZWRXaWR0aCA9IGxvY2tlZC5yZWR1Y2UoKHByZXY6IG51bWJlciwgY3VycjogVGFibGVDb2x1bW4pID0+IHByZXYgKyBjdXJyLndpZHRoLCBzdGFydFdpZHRoKTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLl9zdmMuc3RhdGUucGlwZSh0YWtlV2hpbGUoKF8pID0+IHRoaXMuX2FsaXZlKSkuc3Vic2NyaWJlKChfKSA9PiB7XG4gICAgICB0aGlzLnN0YXRlID0gXztcbiAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3N2Yy5kaXNwbGF5RGF0YS5waXBlKHRha2VXaGlsZSgoXykgPT4gdGhpcy5fYWxpdmUpKS5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgIHRoaXMuZGF0YSA9IF8ubWFwKChfKSA9PiBfLmRhdGEpO1xuICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fYWxpdmUgPSBmYWxzZTtcbiAgfVxufVxuIiwiQGlmIChsb2NrZWQ/Lmxlbmd0aCkge1xuICA8ZGl2XG4gICAgY2xhc3M9XCJ0YWJsZS1oZWFkX2xvY2tlZFwiXG4gICAgW3N0eWxlLmZsZXgtZ3Jvd109XCJsb2NrZWRGbGV4XCJcbiAgICBbc3R5bGUuZmxleC1iYXNpcy5weF09XCJsb2NrZWRXaWR0aFwiXG4gICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJsb2NrZWRXaWR0aFwiXG4gID5cbiAgICBAaWYgKHNlbGVjdFR5cGUgPT09IHNlbGVjdFR5cGVFbnVtLmNoZWNrQm94KSB7XG4gICAgICA8dGV0YS1zZWxlY3Rpb24taGVhZC1jZWxsIHN0eWxlPVwid2lkdGg6IDI4cHhcIj48L3RldGEtc2VsZWN0aW9uLWhlYWQtY2VsbD5cbiAgICB9XG4gICAgQGZvciAoY29sdW1uIG9mIGxvY2tlZDsgdHJhY2sgdHJhY2soJGluZGV4LCBjb2x1bW4pKSB7XG4gICAgICA8dGV0YS10YWJsZS1oZWFkLWdyb3VwXG4gICAgICAgIGNsYXNzPVwidGFibGUtaGVhZF9fZ3JvdXBcIlxuICAgICAgICBbZGF0YV09XCJkYXRhXCJcbiAgICAgICAgW3Nob3dIZWFkQ2VsbE1lbnVdPVwic2hvd0hlYWRDZWxsTWVudVwiXG4gICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgID48L3RldGEtdGFibGUtaGVhZC1ncm91cD5cbiAgICB9XG4gIDwvZGl2PlxufVxuQGlmICh1bmxvY2tlZD8ubGVuZ3RoKSB7XG4gIEBpZiAoc2VsZWN0VHlwZSA9PT0gc2VsZWN0VHlwZUVudW0uY2hlY2tCb3ggJiYgbG9ja2VkPy5sZW5ndGggPCAxKSB7XG4gICAgPHRldGEtc2VsZWN0aW9uLWhlYWQtY2VsbCBzdHlsZT1cIndpZHRoOiAyOHB4XCI+PC90ZXRhLXNlbGVjdGlvbi1oZWFkLWNlbGw+XG4gIH1cbiAgQGZvciAoY29sdW1uIG9mIHVubG9ja2VkOyB0cmFjayB0cmFjaygkaW5kZXgsIGNvbHVtbikpIHtcbiAgICA8dGV0YS10YWJsZS1oZWFkLWdyb3VwXG4gICAgICBjbGFzcz1cInRhYmxlLWhlYWRfX2dyb3VwXCJcbiAgICAgIFtkYXRhXT1cImRhdGFcIlxuICAgICAgW3Nob3dIZWFkQ2VsbE1lbnVdPVwic2hvd0hlYWRDZWxsTWVudVwiXG4gICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgPjwvdGV0YS10YWJsZS1oZWFkLWdyb3VwPlxuICB9XG59XG4iXX0=
|