@tetacom/ng-components 1.4.4 → 1.4.5
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/assets/icons.svg +54 -0
- package/component/avatar/avatar/avatar.component.d.ts +1 -1
- package/component/button/button/button.component.d.ts +1 -1
- package/component/date-picker/base-calendar.d.ts +1 -1
- package/component/date-picker/base-picker.d.ts +1 -1
- package/component/date-picker/date-picker/date-calendar/date-calendar.component.d.ts +1 -1
- package/component/date-picker/date-picker/date-picker.component.d.ts +1 -1
- package/component/date-picker/date-range/date-range.component.d.ts +1 -1
- package/component/date-picker/date-range/range-calendar/range-calendar.component.d.ts +1 -1
- package/component/date-picker/day-picker/day-item/day-item.component.d.ts +1 -1
- package/component/date-picker/day-picker/day-picker.component.d.ts +4 -4
- package/component/date-picker/month-picker/month-picker.component.d.ts +2 -2
- package/component/date-picker/public-api.d.ts +2 -2
- package/component/date-picker/year-picker/year-picker.component.d.ts +3 -3
- package/component/filter/boolean-filter/boolean-filter.component.d.ts +3 -3
- package/component/message/model/message.d.ts +1 -1
- package/component/switch/switch/switch.component.d.ts +1 -1
- package/component/table/table-row/table-row.component.d.ts +2 -2
- package/component/tree/tree/tree.component.d.ts +1 -1
- package/docs/avatarDocs.mdx +78 -72
- package/docs/datePickerDocs.mdx +3 -3
- package/docs/dateRangeDocs.mdx +3 -3
- package/docs/delimiterDocs.mdx +78 -78
- package/docs/dropdownDocs.mdx +143 -123
- package/docs/expandCardlDocs.mdx +49 -45
- package/docs/expandPanelDocs.mdx +104 -92
- package/docs/fileAreaDocs.mdx +64 -59
- package/docs/inputDocs.mdx +70 -67
- package/docs/listDocs.mdx +14 -8
- package/docs/messageDocs.mdx +47 -34
- package/docs/progressBarDocs.mdx +65 -51
- package/docs/propertyGridDocs.mdx +173 -115
- package/docs/radioDocs.mdx +92 -80
- package/docs/resizePanelDocs.mdx +79 -67
- package/docs/selectDocs.mdx +262 -220
- package/docs/switchDocs.mdx +86 -73
- package/docs/tagDocs.mdx +17 -11
- package/docs/toggleDocs.mdx +42 -36
- package/docs/toolbarDocs.mdx +14 -8
- package/docs/treeDocs.mdx +108 -89
- package/esm2022/common/contract/teta-content-ref.mjs +1 -1
- package/esm2022/common/enum/align.enum.mjs +1 -1
- package/esm2022/common/enum/vertical-align.enum.mjs +1 -1
- package/esm2022/common/service/dynamic-component.service.mjs +1 -1
- package/esm2022/common/util/array-util.mjs +5 -7
- package/esm2022/common/util/dom-util.mjs +2 -3
- package/esm2022/common/util/position-util.mjs +6 -14
- package/esm2022/component/accordion/accordion-content.directive.mjs +2 -2
- package/esm2022/component/accordion/public-api.mjs +1 -1
- package/esm2022/component/autocomplete/autocomplete/autocomplete.component.mjs +2 -3
- package/esm2022/component/autocomplete/public-api.mjs +1 -1
- package/esm2022/component/avatar/avatar/avatar.component.mjs +4 -5
- package/esm2022/component/avatar/model/avatar-color.enum.mjs +1 -1
- package/esm2022/component/avatar/public-api.mjs +1 -1
- package/esm2022/component/button/button/button.component.mjs +2 -2
- package/esm2022/component/button/public-api.mjs +1 -1
- package/esm2022/component/chart-3d/chart3d/chart3d.component.mjs +11 -24
- package/esm2022/component/chart-3d/model/chart-3d-options.mjs +1 -1
- package/esm2022/component/chart-3d/public-api.mjs +1 -1
- package/esm2022/component/checkbox/checkbox/checkbox.component.mjs +3 -3
- package/esm2022/component/checkbox/public-api.mjs +1 -1
- package/esm2022/component/date-picker/base-calendar.mjs +7 -14
- package/esm2022/component/date-picker/base-picker.mjs +3 -2
- package/esm2022/component/date-picker/date-picker/date-calendar/date-calendar.component.mjs +4 -11
- package/esm2022/component/date-picker/date-picker/date-picker.component.mjs +5 -6
- package/esm2022/component/date-picker/date-range/date-range.component.mjs +6 -14
- package/esm2022/component/date-picker/date-range/range-calendar/range-calendar.component.mjs +4 -4
- package/esm2022/component/date-picker/day-picker/day-item/day-item.component.mjs +5 -6
- package/esm2022/component/date-picker/day-picker/day-picker.component.mjs +9 -9
- package/esm2022/component/date-picker/model/date-picker-mode.enum.mjs +1 -1
- package/esm2022/component/date-picker/model/from-to.model.mjs +1 -1
- package/esm2022/component/date-picker/model/min-max-date.model.mjs +1 -1
- package/esm2022/component/date-picker/month-picker/month-picker.component.mjs +4 -4
- package/esm2022/component/date-picker/public-api.mjs +3 -3
- package/esm2022/component/date-picker/year-picker/scroll-to-selected-year.directive.mjs +3 -3
- package/esm2022/component/date-picker/year-picker/year-picker.component.mjs +9 -7
- package/esm2022/component/delimiter/delimiter/delimiter.component.mjs +2 -2
- package/esm2022/component/delimiter/public-api.mjs +1 -1
- package/esm2022/component/divider/divider/divider.component.mjs +4 -4
- package/esm2022/component/divider/public-api.mjs +1 -1
- package/esm2022/component/dropdown/dropdown/dropdown.component.mjs +2 -3
- package/esm2022/component/dropdown/dropdown-base.mjs +11 -22
- package/esm2022/component/dropdown/dropdown-content.directive.mjs +2 -2
- package/esm2022/component/dropdown/dropdown-head.directive.mjs +2 -2
- package/esm2022/component/dropdown/dropdown.directive.mjs +4 -5
- package/esm2022/component/dropdown/public-api.mjs +1 -1
- package/esm2022/component/dynamic-component/popup-content/popup-content.component.mjs +4 -10
- package/esm2022/component/dynamic-component/public-api.mjs +1 -1
- package/esm2022/component/expand-card/expand-card/expand-card.component.mjs +4 -5
- package/esm2022/component/expand-card/expand-item/expand-item.component.mjs +4 -4
- package/esm2022/component/expand-card/public-api.mjs +1 -1
- package/esm2022/component/expand-panel/expand-panel/expand-panel.component.mjs +4 -9
- package/esm2022/component/expand-panel/expand-panel-content.directive.mjs +1 -1
- package/esm2022/component/expand-panel/expand-panel-head.directive.mjs +1 -1
- package/esm2022/component/expand-panel/public-api.mjs +1 -1
- package/esm2022/component/file-upload/file-item/file-item.component.mjs +1 -1
- package/esm2022/component/file-upload/file-upload-area/file-upload-area.component.mjs +3 -8
- package/esm2022/component/file-upload/public-api.mjs +1 -1
- package/esm2022/component/filter/base/filter-base.mjs +1 -1
- package/esm2022/component/filter/base/filter-component-base.mjs +1 -1
- package/esm2022/component/filter/boolean-filter/boolean-filter.component.mjs +5 -11
- package/esm2022/component/filter/contarct/boolean-filter.mjs +1 -1
- package/esm2022/component/filter/contarct/date-filter-value.mjs +3 -3
- package/esm2022/component/filter/contarct/date-filter.mjs +1 -1
- package/esm2022/component/filter/contarct/filter-component-map.mjs +2 -4
- package/esm2022/component/filter/contarct/filter-item.mjs +2 -2
- package/esm2022/component/filter/contarct/filter-state.mjs +1 -1
- package/esm2022/component/filter/contarct/list-filter.mjs +1 -1
- package/esm2022/component/filter/contarct/numeric-filter.mjs +1 -1
- package/esm2022/component/filter/contarct/sort-param.mjs +1 -1
- package/esm2022/component/filter/contarct/string-filter.mjs +1 -1
- package/esm2022/component/filter/date-filter/date-filter.component.mjs +3 -8
- package/esm2022/component/filter/enum/list-filter-type.enum.mjs +1 -1
- package/esm2022/component/filter/filter-host/filter-host.component.mjs +2 -3
- package/esm2022/component/filter/list-filter/list-filter.component.mjs +5 -14
- package/esm2022/component/filter/numeric-filter/numeric-filter.component.mjs +3 -8
- package/esm2022/component/filter/public-api.mjs +1 -1
- package/esm2022/component/filter/string-filter/string-filter.component.mjs +4 -9
- package/esm2022/component/icon/icon/icon.component.mjs +3 -3
- package/esm2022/component/icon/icon-file/icon-file.component.mjs +2 -3
- package/esm2022/component/icon/icon-sprite.directive.mjs +2 -2
- package/esm2022/component/icon/icon.service.mjs +5 -6
- package/esm2022/component/icon/public-api.mjs +1 -1
- package/esm2022/component/input/color-input/color-input.component.mjs +3 -3
- package/esm2022/component/input/form-group-title/form-group-title.component.mjs +2 -2
- package/esm2022/component/input/input/input.component.mjs +4 -4
- package/esm2022/component/input/public-api.mjs +1 -1
- package/esm2022/component/input/text-field/text-field.component.mjs +3 -9
- package/esm2022/component/message/message/message.component.mjs +3 -7
- package/esm2022/component/message/message-host/message-host.component.mjs +5 -9
- package/esm2022/component/message/message.service.mjs +2 -2
- package/esm2022/component/message/model/message.mjs +2 -2
- package/esm2022/component/message/public-api.mjs +1 -1
- package/esm2022/component/modal/dialog/dialog.component.mjs +3 -8
- package/esm2022/component/modal/dialog.service.mjs +1 -1
- package/esm2022/component/modal/modal-container/modal-container.component.mjs +4 -11
- package/esm2022/component/modal/modal.module.mjs +4 -12
- package/esm2022/component/modal/modal.service.mjs +1 -1
- package/esm2022/component/modal/model/current-modal.mjs +1 -1
- package/esm2022/component/modal/model/i-modal-result.mjs +1 -1
- package/esm2022/component/modal/model/modal-instance.mjs +1 -1
- package/esm2022/component/pager/model/pager-state.mjs +3 -2
- package/esm2022/component/pager/pager/pager.component.mjs +1 -1
- package/esm2022/component/pager/public-api.mjs +1 -1
- package/esm2022/component/pager/util/pager-util.mjs +1 -1
- package/esm2022/component/panel/panel/panel.component.mjs +4 -10
- package/esm2022/component/panel/public-api.mjs +1 -1
- package/esm2022/component/progress-bar/progress-bar/progress-bar.component.mjs +5 -6
- package/esm2022/component/progress-bar/public-api.mjs +1 -1
- package/esm2022/component/property-grid/property-grid/property-grid-group/property-grid-group.component.mjs +4 -4
- package/esm2022/component/property-grid/property-grid/property-grid-item/property-grid-item.component.mjs +7 -8
- package/esm2022/component/property-grid/property-grid/property-grid-item-description.directive.mjs +2 -2
- package/esm2022/component/property-grid/property-grid/property-grid.component.mjs +6 -11
- package/esm2022/component/property-grid/property-grid.module.mjs +1 -1
- package/esm2022/component/radio/public-api.mjs +1 -1
- package/esm2022/component/radio/radio/radio.component.mjs +7 -11
- package/esm2022/component/radio/radio-button/radio-button.component.mjs +3 -3
- package/esm2022/component/resize-panel/public-api.mjs +1 -1
- package/esm2022/component/resize-panel/resize-panel/resize-panel.component.mjs +5 -10
- package/esm2022/component/select/public-api.mjs +1 -1
- package/esm2022/component/select/select/select.component.mjs +10 -18
- package/esm2022/component/select/select-option.directive.mjs +2 -2
- package/esm2022/component/select/select-value.directive.mjs +2 -2
- package/esm2022/component/sidebar/public-api.mjs +1 -1
- package/esm2022/component/sidebar/sidebar/sidebar.component.mjs +6 -12
- package/esm2022/component/sidebar/sidebar-position.enum.mjs +1 -1
- package/esm2022/component/switch/public-api.mjs +1 -1
- package/esm2022/component/switch/switch/switch.component.mjs +4 -7
- package/esm2022/component/switch/switch-button/switch-button.component.mjs +2 -3
- package/esm2022/component/switch/switch.service.mjs +2 -2
- package/esm2022/component/table/base/cell-component-base.mjs +10 -22
- package/esm2022/component/table/base/detail-component-base.mjs +1 -1
- package/esm2022/component/table/base/head-cell-component-base.mjs +2 -2
- package/esm2022/component/table/cell/cell.component.mjs +4 -4
- package/esm2022/component/table/cell-host/cell-host.component.mjs +1 -1
- package/esm2022/component/table/contract/cell-components-map.mjs +2 -4
- package/esm2022/component/table/contract/column-reorder-event.mjs +1 -1
- package/esm2022/component/table/contract/sort-event.mjs +1 -1
- package/esm2022/component/table/contract/table-column.mjs +3 -3
- package/esm2022/component/table/default/boolean-cell/boolean-cell.component.mjs +4 -8
- package/esm2022/component/table/default/date-cell/date-cell.component.mjs +4 -9
- package/esm2022/component/table/default/date-time-cell/date-time-cell.component.mjs +4 -9
- package/esm2022/component/table/default/default-head-cell/default-head-cell.component.mjs +5 -6
- package/esm2022/component/table/default/list-cell/list-cell.component.mjs +7 -13
- package/esm2022/component/table/default/numeric-cell/numeric-cell.component.mjs +4 -9
- package/esm2022/component/table/default/string-cell/string-cell.component.mjs +4 -8
- package/esm2022/component/table/enum/edit-event.enum.mjs +1 -1
- package/esm2022/component/table/enum/edit-type.enum.mjs +1 -1
- package/esm2022/component/table/enum/select-type.enum.mjs +1 -1
- package/esm2022/component/table/head-cell-dropdown/head-cell-dropdown.component.mjs +4 -11
- package/esm2022/component/table/head-cell-host/head-cell-host.component.mjs +3 -4
- package/esm2022/component/table/public-api.mjs +1 -1
- package/esm2022/component/table/selection-cell/selection-cell.component.mjs +4 -6
- package/esm2022/component/table/selection-head-cell/selection-head-cell.component.mjs +5 -7
- package/esm2022/component/table/service/table.service.mjs +35 -52
- package/esm2022/component/table/table/table.component.mjs +12 -24
- package/esm2022/component/table/table-body/table-body.component.mjs +15 -21
- package/esm2022/component/table/table-head/filter-dropdown-tab/filter-dropdown-tab.component.mjs +5 -6
- package/esm2022/component/table/table-head/main-dropdown-tab/main-dropdown-tab.component.mjs +4 -5
- package/esm2022/component/table/table-head/table-head.component.mjs +10 -10
- package/esm2022/component/table/table-head/visibility-dropdown-tab/visibility-dropdown-tab.component.mjs +12 -12
- package/esm2022/component/table/table-head-group/table-head-group.component.mjs +7 -12
- package/esm2022/component/table/table-row/table-row.component.mjs +3 -3
- package/esm2022/component/table/util/state-util.mjs +13 -25
- package/esm2022/component/table/util/table-util.mjs +15 -9
- package/esm2022/component/tabs/public-api.mjs +1 -1
- package/esm2022/component/tabs/tab-content.directive.mjs +2 -2
- package/esm2022/component/tabs/tab-title.directive.mjs +2 -2
- package/esm2022/component/theme-switch/public-api.mjs +1 -1
- package/esm2022/component/toggle/public-api.mjs +1 -1
- package/esm2022/component/toggle/toggle/toggle.component.mjs +3 -3
- package/esm2022/component/toolbar/public-api.mjs +1 -1
- package/esm2022/component/toolbar/toolbar/toolbar.component.mjs +2 -2
- package/esm2022/component/tree/public-api.mjs +1 -1
- package/esm2022/component/tree/tree/tree.component.mjs +6 -6
- package/esm2022/component/tree/tree-item/tree-item.component.mjs +9 -20
- package/esm2022/component/tree/tree-item-toggle/tree-item-toggle.component.mjs +5 -6
- package/esm2022/component/tree/tree.service.mjs +1 -1
- package/esm2022/directive/auto-position/auto-position.directive.mjs +3 -3
- package/esm2022/directive/auto-position/public-api.mjs +1 -1
- package/esm2022/directive/click-outside/click-outside.directive.mjs +2 -2
- package/esm2022/directive/click-outside/public-api.mjs +1 -1
- package/esm2022/directive/context-menu/context-menu.directive.mjs +4 -8
- package/esm2022/directive/context-menu/public-api.mjs +1 -1
- package/esm2022/directive/disable-control/disable-control.directive.mjs +1 -1
- package/esm2022/directive/disable-control/public-api.mjs +1 -1
- package/esm2022/directive/drag-drop/drag-container.directive.mjs +8 -10
- package/esm2022/directive/drag-drop/drag-drop.service.mjs +14 -11
- package/esm2022/directive/drag-drop/drag-placeholder.directive.mjs +2 -2
- package/esm2022/directive/drag-drop/drag-preview.directive.mjs +2 -2
- package/esm2022/directive/drag-drop/drag.directive.mjs +4 -7
- package/esm2022/directive/drag-drop/model/drag-container-instance.mjs +1 -1
- package/esm2022/directive/drag-drop/model/drag-instance.mjs +1 -1
- package/esm2022/directive/drag-drop/model/drag-process.mjs +1 -1
- package/esm2022/directive/drag-drop/model/drag-selection.mjs +1 -1
- package/esm2022/directive/drag-drop/model/drop-event.mjs +1 -1
- package/esm2022/directive/drag-drop/model/drop-target.mjs +1 -1
- package/esm2022/directive/drag-sort/drag-sort-container.directive.mjs +2 -3
- package/esm2022/directive/drag-sort/drag-sort-item.directive.mjs +4 -10
- package/esm2022/directive/drag-sort/public-api.mjs +1 -1
- package/esm2022/directive/dynamic-content-base.directive.mjs +3 -3
- package/esm2022/directive/highlight/highlight.directive.mjs +4 -5
- package/esm2022/directive/highlight/public-api.mjs +1 -1
- package/esm2022/directive/hint/hint.directive.mjs +5 -14
- package/esm2022/directive/hint/public-api.mjs +1 -1
- package/esm2022/directive/let/let.directive.mjs +2 -2
- package/esm2022/directive/let/public-api.mjs +1 -1
- package/esm2022/directive/loader/loader.directive.mjs +3 -3
- package/esm2022/directive/loader/public-api.mjs +1 -1
- package/esm2022/directive/no-autofill/no-autofill.directive.mjs +1 -1
- package/esm2022/directive/no-autofill/public-api.mjs +1 -1
- package/esm2022/directive/only-number/public-api.mjs +1 -1
- package/esm2022/directive/resize-drag/public-api.mjs +1 -1
- package/esm2022/directive/resize-drag/resize-drag.directive.mjs +2 -2
- package/esm2022/directive/scroll-into-view/public-api.mjs +1 -1
- package/esm2022/directive/scroll-into-view/scroll-into-view.directive.mjs +3 -3
- package/esm2022/directive/scrollable/public-api.mjs +1 -1
- package/esm2022/directive/scrollable/scrollable/scrollable.component.mjs +6 -13
- package/esm2022/directive/scrollable/scrollable.directive.mjs +2 -2
- package/esm2022/directive/teta-template/public-api.mjs +1 -1
- package/esm2022/directive/teta-template/teta-template.directive.mjs +2 -2
- package/esm2022/directive/tooltip/public-api.mjs +1 -1
- package/esm2022/directive/tooltip/tooltip.directive.mjs +3 -4
- package/esm2022/index.mjs +1 -1
- package/esm2022/locale/en.mjs +2 -10
- package/esm2022/locale/ru.mjs +2 -10
- package/esm2022/locale/teta-config.service.mjs +2 -2
- package/esm2022/locale/teta-localisation.mjs +1 -1
- package/esm2022/observable/public-api.mjs +1 -1
- package/esm2022/observable/zone-observable.mjs +4 -4
- package/esm2022/pipe/date-pipe/teta-date.pipe.mjs +2 -2
- package/esm2022/pipe/number-pipe/number.pipe.mjs +2 -2
- package/esm2022/pipe/number-pipe/public-api.mjs +1 -1
- package/esm2022/pipe/util/number-helper.mjs +1 -1
- package/esm2022/util/bool-or-func.mjs +1 -1
- package/esm2022/util/date-util.mjs +2 -4
- package/esm2022/util/export-dom-image.mjs +1 -1
- package/esm2022/util/forms-util.mjs +6 -17
- package/esm2022/util/string-util.mjs +1 -3
- package/fesm2022/tetacom-ng-components.mjs +438 -801
- package/fesm2022/tetacom-ng-components.mjs.map +1 -1
- package/locale/teta-localisation.d.ts +1 -14
- package/package.json +1 -1
- package/style/assembly-library.scss +41 -41
- package/style/assembly-presets.scss +4 -4
- package/style/assembly.scss +3 -3
- package/style/border.scss +2 -2
- package/style/color.scss +2 -3
- package/style/datepicker.scss +9 -10
- package/style/divider.scss +2 -1
- package/style/drag.scss +1 -1
- package/style/dropdown.scss +4 -5
- package/style/font.scss +2 -2
- package/style/hint.scss +3 -3
- package/style/input.scss +14 -9
- package/style/layout.scss +8 -8
- package/style/list.scss +2 -2
- package/style/loader.scss +1 -1
- package/style/message.scss +3 -3
- package/style/navigation.scss +6 -6
- package/style/presets/color-presets.scss +2 -2
- package/style/presets/view-types.scss +1 -1
- package/style/progress.scss +3 -2
- package/style/radio.scss +2 -4
- package/style/reset.scss +3 -1
- package/style/resize-panel.scss +12 -6
- package/style/scroll.scss +1 -1
- package/style/select.scss +5 -4
- package/style/shadow.scss +3 -3
- package/style/sidebar.scss +2 -2
- package/style/sizing.scss +1 -1
- package/style/skeleton.scss +3 -4
- package/style/spacing.scss +1 -1
- package/style/switch.scss +2 -3
- package/style/tag.scss +8 -8
- package/style/toggle.scss +3 -6
- package/style/toolbar.scss +3 -3
- package/style/tooltip.scss +5 -4
- package/style/tree.scss +2 -2
- package/style/util/font-util.scss +1 -1
|
@@ -15,7 +15,7 @@ import { FormsModule } from '@angular/forms';
|
|
|
15
15
|
import { NgTemplateOutlet, NgClass, AsyncPipe } from '@angular/common';
|
|
16
16
|
import { ScrollableDirective } from '../../../directive/scrollable/scrollable.directive';
|
|
17
17
|
import { ScrollableComponent } from '../../../directive/scrollable/scrollable/scrollable.component';
|
|
18
|
-
import { TableRowComponent } from
|
|
18
|
+
import { TableRowComponent } from '../table-row/table-row.component';
|
|
19
19
|
import * as i0 from "@angular/core";
|
|
20
20
|
import * as i1 from "../service/table.service";
|
|
21
21
|
import * as i2 from "../../../locale/teta-config.service";
|
|
@@ -29,8 +29,8 @@ export class TableBodyComponent {
|
|
|
29
29
|
}
|
|
30
30
|
set columns(columns) {
|
|
31
31
|
this._columns = columns;
|
|
32
|
-
this.locked = this._columns?.filter(_ => _.locked === true);
|
|
33
|
-
this.unlocked = this._columns?.filter(_ => _.locked === false);
|
|
32
|
+
this.locked = this._columns?.filter((_) => _.locked === true);
|
|
33
|
+
this.unlocked = this._columns?.filter((_) => _.locked === false);
|
|
34
34
|
const startWidth = this.selectType === SelectType.checkBox ? 28 : 0;
|
|
35
35
|
this.lockedFlex = this.locked.reduce((prev, curr) => prev + curr.flex, 0);
|
|
36
36
|
this.lockedWidth = this.locked.reduce((prev, curr) => prev + curr.width, startWidth);
|
|
@@ -67,25 +67,23 @@ export class TableBodyComponent {
|
|
|
67
67
|
ngOnInit() {
|
|
68
68
|
this.locale = this._config.locale;
|
|
69
69
|
combineLatest([this._svc.columns, this._svc.hiddenColumns])
|
|
70
|
-
.pipe(takeWhile(_ => this._alive))
|
|
70
|
+
.pipe(takeWhile((_) => this._alive))
|
|
71
71
|
.subscribe((values) => {
|
|
72
72
|
const [columns, hiddenColumns] = values;
|
|
73
73
|
this._hiddenColumns = hiddenColumns;
|
|
74
|
-
this.columns = ArrayUtil.flatten(columns, 'columns', true).filter(_ => this._hiddenColumns.indexOf(_.name) < 0);
|
|
74
|
+
this.columns = ArrayUtil.flatten(columns, 'columns', true).filter((_) => this._hiddenColumns.indexOf(_.name) < 0);
|
|
75
75
|
this._cdr.markForCheck();
|
|
76
76
|
});
|
|
77
|
-
this._svc.displayData.pipe(takeWhile(_ => this._alive)).subscribe(_ => {
|
|
77
|
+
this._svc.displayData.pipe(takeWhile((_) => this._alive)).subscribe((_) => {
|
|
78
78
|
this.data = _;
|
|
79
79
|
this._cdr.markForCheck();
|
|
80
80
|
this.viewport?.checkViewportSize();
|
|
81
81
|
});
|
|
82
|
-
this._svc.dict.pipe(takeWhile(_ => this._alive)).subscribe(_ => {
|
|
82
|
+
this._svc.dict.pipe(takeWhile((_) => this._alive)).subscribe((_) => {
|
|
83
83
|
this.dict = _;
|
|
84
84
|
this._cdr.markForCheck();
|
|
85
85
|
});
|
|
86
|
-
this._svc.scrollIndex
|
|
87
|
-
.pipe(takeWhile(() => this._alive))
|
|
88
|
-
.subscribe(async (index) => {
|
|
86
|
+
this._svc.scrollIndex.pipe(takeWhile(() => this._alive)).subscribe(async (index) => {
|
|
89
87
|
if (this.viewport) {
|
|
90
88
|
this.viewport.scrollToIndex(index, 'auto');
|
|
91
89
|
}
|
|
@@ -95,7 +93,7 @@ export class TableBodyComponent {
|
|
|
95
93
|
}
|
|
96
94
|
this._cdr.markForCheck();
|
|
97
95
|
});
|
|
98
|
-
this._svc.activeRow.pipe(takeWhile(_ => this._alive)).subscribe(async (_) => {
|
|
96
|
+
this._svc.activeRow.pipe(takeWhile((_) => this._alive)).subscribe(async (_) => {
|
|
99
97
|
this.activeRow = _;
|
|
100
98
|
this._cdr.markForCheck();
|
|
101
99
|
});
|
|
@@ -139,7 +137,7 @@ export class TableBodyComponent {
|
|
|
139
137
|
this.scrollChange.emit(event);
|
|
140
138
|
}
|
|
141
139
|
addResizeObserver() {
|
|
142
|
-
this._obs = new ResizeObserver(_ => {
|
|
140
|
+
this._obs = new ResizeObserver((_) => {
|
|
143
141
|
this.viewport?.checkViewportSize();
|
|
144
142
|
});
|
|
145
143
|
this._obs.observe(this._elementRef.nativeElement);
|
|
@@ -155,17 +153,13 @@ export class TableBodyComponent {
|
|
|
155
153
|
}, 0);
|
|
156
154
|
}
|
|
157
155
|
getMin(columnName) {
|
|
158
|
-
return this.data?.reduce((accum, current) => accum != null && accum <= current.data[columnName]
|
|
159
|
-
? accum
|
|
160
|
-
: current.data[columnName], null);
|
|
156
|
+
return this.data?.reduce((accum, current) => accum != null && accum <= current.data[columnName] ? accum : current.data[columnName], null);
|
|
161
157
|
}
|
|
162
158
|
getMax(columnName) {
|
|
163
|
-
return this.data?.reduce((accum, current) => accum != null && accum >= current.data[columnName]
|
|
164
|
-
? accum
|
|
165
|
-
: current.data[columnName], null);
|
|
159
|
+
return this.data?.reduce((accum, current) => (accum != null && accum >= current.data[columnName] ? accum : current.data[columnName]), null);
|
|
166
160
|
}
|
|
167
161
|
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 }); }
|
|
168
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: TableBodyComponent, isStandalone: true, selector: "teta-table-body", inputs: { virtual: "virtual", activeRow: "activeRow", selectedRows: "selectedRows", additionalComponent: "additionalComponent", aggregate: "aggregate", selectType: "selectType", rowClass: "rowClass", trackRow: "trackRow", trackColumns: "trackColumns" }, 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\"\n style=\"padding-bottom: 12px\"\n [showScrollbars]=\"true\"\n >\n <cdk-virtual-scroll-viewport tetaScrollable\n class=\"table-body-container\"\n (scroll)=\"emitScroll($event)\"\n [itemSize]=\"28\">\n <ng-container\n *cdkVirtualFor=\"let row of data;templateCacheSize: 0; let rowIndex = index; trackBy: trackTableRow;\">\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 class=\"table-body-container\"\n style=\"padding-bottom: 12px\"\n direction=\"column\"\n [showScrollbars]=\"true\"\n (scroll)=\"emitScroll($event)\">\n <div class=\"table-body-container\">\n @if (!data?.length) {\n <div class=\"column column_auto\"\n style=\"position: absolute; top:0; bottom:16px;left:0;right:0;\"\n >\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 <!-- <div class=\"table-row\"-->\n <!-- ngForm-->\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 <!-- @if (locked.length > 0) {-->\n <!-- <div 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 <!-- @if (selectType === selectTypeEnum.checkBox && locked.length) {-->\n <!-- <teta-selection-cell-->\n <!-- [row]=\"row.data\"-->\n <!-- 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-->\n <!-- [row]=\"row.data\"-->\n <!-- 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 <!-- </div>-->\n <teta-table-row class=\"table-row\"\n ngForm\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 @if (locked.length > 0) {\n <div 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 @if (selectType === selectTypeEnum.checkBox && locked.length) {\n <teta-selection-cell\n [row]=\"row.data\"\n 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\n [row]=\"row.data\"\n 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 class=\"table-row\"\n [class.table-row_virtual]=\"virtual\"\n [style.flex-grow]=\"totalFlex\"\n [style.flex-basis.px]=\"totalWidth\"\n [style.min-width.px]=\"totalWidth\">\n @if (locked.length > 0) {\n <div class=\"table-row_locked\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\">\n @if (selectType === selectTypeEnum.checkBox && locked.length < 1) {\n <div class=\"cell align-center justify-content-center\"\n style=\"width: 28px;\"\n >\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n }\n @for (column of locked; track trackColumns(colIndex, column); let colIndex = $index) {\n <div 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 @if (column.aggregate !== aggregationType.none) {\n <span class=\"cell-text cell-text_numeric font-title-3\"\n >\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\"\n style=\"width: 28px;\"\n >\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n }\n @for (column of unlocked; track trackColumns(colIndex, column); let colIndex = $index) {\n <div 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 @if (column.aggregate !== aggregationType.none) {\n <span class=\"cell-text cell-text_numeric font-title-3\"\n >\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 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 }); }
|
|
162
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: TableBodyComponent, isStandalone: true, selector: "teta-table-body", inputs: { virtual: "virtual", activeRow: "activeRow", selectedRows: "selectedRows", additionalComponent: "additionalComponent", aggregate: "aggregate", selectType: "selectType", rowClass: "rowClass", trackRow: "trackRow", trackColumns: "trackColumns" }, 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]=\"28\"\n >\n <ng-container *cdkVirtualFor=\"let row of data; templateCacheSize: 0; let rowIndex = index; trackBy: trackTableRow\">\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 } @for (row of data; track trackTableRow(rowIndex, row); let rowIndex = $index) {\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: { row: row, rowIndex: rowIndex }\"></ng-container>\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 <!-- <div class=\"table-row\"-->\n <!-- ngForm-->\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 <!-- @if (locked.length > 0) {-->\n <!-- <div 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 <!-- @if (selectType === selectTypeEnum.checkBox && locked.length) {-->\n <!-- <teta-selection-cell-->\n <!-- [row]=\"row.data\"-->\n <!-- 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-->\n <!-- [row]=\"row.data\"-->\n <!-- 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 <!-- </div>-->\n <teta-table-row\n class=\"table-row\"\n ngForm\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 } @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 } @if (selectType === selectTypeEnum.checkBox && locked.length < 1) {\n <teta-selection-cell [row]=\"row.data\" style=\"width: 28px\"></teta-selection-cell>\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) { @if (aggregate) {\n <div\n class=\"table-row\"\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 } @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 } @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 } @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</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 }); }
|
|
169
163
|
}
|
|
170
164
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: TableBodyComponent, decorators: [{
|
|
171
165
|
type: Component,
|
|
@@ -184,7 +178,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImpor
|
|
|
184
178
|
AsyncPipe,
|
|
185
179
|
NumberPipe,
|
|
186
180
|
TableRowComponent,
|
|
187
|
-
], template: "@if (virtual && data.length > 0) {\n
|
|
181
|
+
], 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]=\"28\"\n >\n <ng-container *cdkVirtualFor=\"let row of data; templateCacheSize: 0; let rowIndex = index; trackBy: trackTableRow\">\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 } @for (row of data; track trackTableRow(rowIndex, row); let rowIndex = $index) {\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: { row: row, rowIndex: rowIndex }\"></ng-container>\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 <!-- <div class=\"table-row\"-->\n <!-- ngForm-->\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 <!-- @if (locked.length > 0) {-->\n <!-- <div 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 <!-- @if (selectType === selectTypeEnum.checkBox && locked.length) {-->\n <!-- <teta-selection-cell-->\n <!-- [row]=\"row.data\"-->\n <!-- 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-->\n <!-- [row]=\"row.data\"-->\n <!-- 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 <!-- </div>-->\n <teta-table-row\n class=\"table-row\"\n ngForm\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 } @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 } @if (selectType === selectTypeEnum.checkBox && locked.length < 1) {\n <teta-selection-cell [row]=\"row.data\" style=\"width: 28px\"></teta-selection-cell>\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) { @if (aggregate) {\n <div\n class=\"table-row\"\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 } @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 } @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 } @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</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" }]
|
|
188
182
|
}], ctorParameters: () => [{ type: i1.TableService }, { type: i0.ElementRef }, { type: i2.TetaConfigService }, { type: i0.ChangeDetectorRef }], propDecorators: { virtual: [{
|
|
189
183
|
type: Input
|
|
190
184
|
}], activeRow: [{
|
|
@@ -212,4 +206,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImpor
|
|
|
212
206
|
}], scrollChange: [{
|
|
213
207
|
type: Output
|
|
214
208
|
}] } });
|
|
215
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYm9keS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlLWJvZHkvdGFibGUtYm9keS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlLWJvZHkvdGFibGUtYm9keS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsd0JBQXdCLEVBQUUseUJBQXlCLEVBQUUsZUFBZSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDNUcsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFHTCxNQUFNLEVBQ04sSUFBSSxFQUNKLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsYUFBYSxFQUFhLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUl6QyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDMUQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFLdEUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDdEQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBQ2pFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFDLHNCQUFzQixF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InNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LCBDZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsLCBDZGtWaXJ0dWFsRm9yT2Z9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBUeXBlLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7dGFrZVdoaWxlfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7SURpY3Rpb25hcnl9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9jb250cmFjdC9pLWRpY3Rpb25hcnknO1xuaW1wb3J0IHtJSWROYW1lfSBmcm9tICcuLi8uLi8uLi9jb21tb24vY29udHJhY3QvaS1pZC1uYW1lJztcbmltcG9ydCB7QXJyYXlVdGlsfSBmcm9tICcuLi8uLi8uLi9jb21tb24vdXRpbC9hcnJheS11dGlsJztcbmltcG9ydCB7VGV0YUNvbmZpZ1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2xvY2FsZS90ZXRhLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7VGV0YUxvY2FsaXNhdGlvbn0gZnJvbSAnLi4vLi4vLi4vbG9jYWxlL3RldGEtbG9jYWxpc2F0aW9uJztcbmltcG9ydCB7RGV0YWlsQ29tcG9uZW50QmFzZX0gZnJvbSAnLi4vYmFzZS9kZXRhaWwtY29tcG9uZW50LWJhc2UnO1xuaW1wb3J0IHtUYWJsZUNvbHVtbn0gZnJvbSAnLi4vY29udHJhY3QvdGFibGUtY29sdW1uJztcbmltcG9ydCB7VGFibGVSb3d9IGZyb20gJy4uL2NvbnRyYWN0L3RhYmxlLXJvdyc7XG5pbXBvcnQge0FnZ3JlZ2F0aW9uVHlwZX0gZnJvbSAnLi4vZW51bS9hZ2dyZWdhdGlvbi10eXBlLmVudW0nO1xuaW1wb3J0IHtTZWxlY3RUeXBlfSBmcm9tICcuLi9lbnVtL3NlbGVjdC10eXBlLmVudW0nO1xuaW1wb3J0IHtUYWJsZVNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2UvdGFibGUuc2VydmljZSc7XG5pbXBvcnQge051bWJlclBpcGV9IGZyb20gJy4uLy4uLy4uL3BpcGUvbnVtYmVyLXBpcGUvbnVtYmVyLnBpcGUnO1xuaW1wb3J0IHtJY29uQ29tcG9uZW50fSBmcm9tICcuLi8uLi9pY29uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHtDZWxsQ29tcG9uZW50fSBmcm9tICcuLi9jZWxsL2NlbGwuY29tcG9uZW50JztcbmltcG9ydCB7U2VsZWN0aW9uQ2VsbENvbXBvbmVudH0gZnJvbSAnLi4vc2VsZWN0aW9uLWNlbGwvc2VsZWN0aW9uLWNlbGwuY29tcG9uZW50JztcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7TmdUZW1wbGF0ZU91dGxldCwgTmdDbGFzcywgQXN5bmNQaXBlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtTY3JvbGxhYmxlRGlyZWN0aXZlfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvc2Nyb2xsYWJsZS9zY3JvbGxhYmxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQge1Njcm9sbGFibGVDb21wb25lbnR9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9zY3JvbGxhYmxlL3Njcm9sbGFibGUvc2Nyb2xsYWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHtUYWJsZVJvd0NvbXBvbmVudH0gZnJvbSBcIi4uL3RhYmxlLXJvdy90YWJsZS1yb3cuY29tcG9uZW50XCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RldGEtdGFibGUtYm9keScsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1ib2R5LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUtYm9keS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIFNjcm9sbGFibGVDb21wb25lbnQsXG4gICAgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LFxuICAgIENka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGwsXG4gICAgU2Nyb2xsYWJsZURpcmVjdGl2ZSxcbiAgICBDZGtWaXJ0dWFsRm9yT2YsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBOZ0NsYXNzLFxuICAgIFNlbGVjdGlvbkNlbGxDb21wb25lbnQsXG4gICAgQ2VsbENvbXBvbmVudCxcbiAgICBJY29uQ29tcG9uZW50LFxuICAgIEFzeW5jUGlwZSxcbiAgICBOdW1iZXJQaXBlLFxuICAgIFRhYmxlUm93Q29tcG9uZW50LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUJvZHlDb21wb25lbnQ8VD4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIHZpcnR1YWw6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGFjdGl2ZVJvdzogVDtcbiAgQElucHV0KCkgc2VsZWN0ZWRSb3dzOiBUW10gPSBbXTtcbiAgQElucHV0KCkgYWRkaXRpb25hbENvbXBvbmVudDogVHlwZTxEZXRhaWxDb21wb25lbnRCYXNlPFQ+PjtcbiAgQElucHV0KCkgYWdncmVnYXRlOiBib29sZWFuO1xuICBASW5wdXQoKSBzZWxlY3RUeXBlOiBTZWxlY3RUeXBlO1xuICBASW5wdXQoKSByb3dDbGFzczogKHJvdzogVCwgaW5kZXg/OiBudW1iZXIpID0+IHN0cmluZztcbiAgQElucHV0KCkgdHJhY2tSb3c6IChpbmRleDogbnVtYmVyLCByb3c6IFQpID0+IGFueTtcbiAgQElucHV0KCkgdHJhY2tDb2x1bW5zOiAoaW5kZXg6IG51bWJlciwgY29sdW1uOiBUYWJsZUNvbHVtbikgPT4gYW55O1xuICBAVmlld0NoaWxkKENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCwge3N0YXRpYzogZmFsc2V9KVxuICB2aWV3cG9ydDogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MudGFibGUtYm9keScpIHByaXZhdGUgcmVhZG9ubHkgdGFibGVCb2R5Q2xhc3MgPSB0cnVlO1xuICBAT3V0cHV0KCkgc2Nyb2xsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcblxuICBzZXQgZGF0YShkYXRhOiBUYWJsZVJvdzxUPltdKSB7XG4gICAgdGhpcy5fZGF0YSA9IGRhdGE7XG4gIH1cblxuICBnZXQgZGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfVxuXG4gIGRpY3Q6IElEaWN0aW9uYXJ5PElJZE5hbWU8YW55PltdPjtcbiAgbG9ja2VkOiBUYWJsZUNvbHVtbltdID0gW107XG4gIHVubG9ja2VkOiBUYWJsZUNvbHVtbltdID0gW107XG4gIHNlbGVjdFR5cGVFbnVtID0gU2VsZWN0VHlwZTtcbiAgYWdncmVnYXRpb25UeXBlID0gQWdncmVnYXRpb25UeXBlO1xuICBsb2NrZWRGbGV4OiBudW1iZXI7XG4gIGxvY2tlZFdpZHRoOiBudW1iZXI7XG4gIHRvdGFsRmxleDogbnVtYmVyO1xuICB0b3RhbFdpZHRoOiBudW1iZXI7XG5cbiAgcHJpdmF0ZSBfY29sdW1uczogVGFibGVDb2x1bW5bXSA9IFtdO1xuICBwcml2YXRlIF9hbGl2ZSA9IHRydWU7XG4gIHByaXZhdGUgX2RhdGE6IFRhYmxlUm93PFQ+W107XG4gIHByaXZhdGUgX2hpZGRlbkNvbHVtbnM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgX29iczogUmVzaXplT2JzZXJ2ZXI7XG5cbiAgc2V0IGNvbHVtbnMoY29sdW1uczogVGFibGVDb2x1bW5bXSkge1xuICAgIHRoaXMuX2NvbHVtbnMgPSBjb2x1bW5zO1xuICAgIHRoaXMubG9ja2VkID0gdGhpcy5fY29sdW1ucz8uZmlsdGVyKF8gPT4gXy5sb2NrZWQgPT09IHRydWUpO1xuICAgIHRoaXMudW5sb2NrZWQgPSB0aGlzLl9jb2x1bW5zPy5maWx0ZXIoXyA9PiBfLmxvY2tlZCA9PT0gZmFsc2UpO1xuICAgIGNvbnN0IHN0YXJ0V2lkdGggPSB0aGlzLnNlbGVjdFR5cGUgPT09IFNlbGVjdFR5cGUuY2hlY2tCb3ggPyAyOCA6IDA7XG4gICAgdGhpcy5sb2NrZWRGbGV4ID0gdGhpcy5sb2NrZWQucmVkdWNlKFxuICAgICAgKHByZXY6IG51bWJlciwgY3VycjogVGFibGVDb2x1bW4pID0+IHByZXYgKyBjdXJyLmZsZXgsXG4gICAgICAwXG4gICAgKTtcbiAgICB0aGlzLmxvY2tlZFdpZHRoID0gdGhpcy5sb2NrZWQucmVkdWNlKFxuICAgICAgKHByZXY6IG51bWJlciwgY3VycjogVGFibGVDb2x1bW4pID0+IHByZXYgKyBjdXJyLndpZHRoLFxuICAgICAgc3RhcnRXaWR0aFxuICAgICk7XG4gICAgdGhpcy50b3RhbEZsZXggPSB0aGlzLl9jb2x1bW5zLnJlZHVjZShcbiAgICAgIChwcmV2OiBudW1iZXIsIGN1cnI6IFRhYmxlQ29sdW1uKSA9PiBwcmV2ICsgY3Vyci5mbGV4LFxuICAgICAgMFxuICAgICk7XG4gICAgdGhpcy50b3RhbFdpZHRoID0gdGhpcy5fY29sdW1ucy5yZWR1Y2UoXG4gICAgICAocHJldjogbnVtYmVyLCBjdXJyOiBUYWJsZUNvbHVtbikgPT4gcHJldiArIGN1cnIud2lkdGgsXG4gICAgICBzdGFydFdpZHRoXG4gICAgKTtcbiAgfVxuXG4gIGdldCBjb2x1bW5zKCk6IFRhYmxlQ29sdW1uW10ge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5zO1xuICB9XG5cbiAgbG9jYWxlOiBPYnNlcnZhYmxlPFRldGFMb2NhbGlzYXRpb24+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX3N2YzogVGFibGVTZXJ2aWNlPFQ+LFxuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBfY29uZmlnOiBUZXRhQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICB9XG5cbiAgc2V0QWN0aXZlUm93KHJvdzogVCwgZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50LnNoaWZ0S2V5ICYmICFldmVudC5jdHJsS2V5KSB7XG4gICAgICB0aGlzLl9zdmMuc2V0QWN0aXZlUm93KHJvdyk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5sb2NhbGUgPSB0aGlzLl9jb25maWcubG9jYWxlO1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuX3N2Yy5jb2x1bW5zLCB0aGlzLl9zdmMuaGlkZGVuQ29sdW1uc10pXG4gICAgICAucGlwZSh0YWtlV2hpbGUoXyA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZXM6IFtUYWJsZUNvbHVtbltdLCBzdHJpbmdbXV0pID0+IHtcbiAgICAgICAgY29uc3QgW2NvbHVtbnMsIGhpZGRlbkNvbHVtbnNdID0gdmFsdWVzO1xuICAgICAgICB0aGlzLl9oaWRkZW5Db2x1bW5zID0gaGlkZGVuQ29sdW1ucztcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gQXJyYXlVdGlsLmZsYXR0ZW4oY29sdW1ucywgJ2NvbHVtbnMnLCB0cnVlKS5maWx0ZXIoXG4gICAgICAgICAgXyA9PiB0aGlzLl9oaWRkZW5Db2x1bW5zLmluZGV4T2YoXy5uYW1lKSA8IDBcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLl9zdmMuZGlzcGxheURhdGEucGlwZSh0YWtlV2hpbGUoXyA9PiB0aGlzLl9hbGl2ZSkpLnN1YnNjcmliZShfID0+IHtcbiAgICAgIHRoaXMuZGF0YSA9IF87XG4gICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB0aGlzLnZpZXdwb3J0Py5jaGVja1ZpZXdwb3J0U2l6ZSgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fc3ZjLmRpY3QucGlwZSh0YWtlV2hpbGUoXyA9PiB0aGlzLl9hbGl2ZSkpLnN1YnNjcmliZShfID0+IHtcbiAgICAgIHRoaXMuZGljdCA9IF87XG4gICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9zdmMuc2Nyb2xsSW5kZXhcbiAgICAgIC5waXBlKHRha2VXaGlsZSgoKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKGFzeW5jIGluZGV4ID0+IHtcbiAgICAgICAgaWYgKHRoaXMudmlld3BvcnQpIHtcbiAgICAgICAgICB0aGlzLnZpZXdwb3J0LnNjcm9sbFRvSW5kZXgoaW5kZXgsICdhdXRvJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICBgLnRhYmxlLXJvd1tkYXRhLXJvdz1cIiR7aW5kZXh9XCJdYFxuICAgICAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgcm93Py5zY3JvbGxJbnRvVmlldygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5fc3ZjLmFjdGl2ZVJvdy5waXBlKHRha2VXaGlsZShfID0+IHRoaXMuX2FsaXZlKSkuc3Vic2NyaWJlKGFzeW5jIF8gPT4ge1xuICAgICAgdGhpcy5hY3RpdmVSb3cgPSBfO1xuICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkUmVzaXplT2JzZXJ2ZXIoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2FsaXZlID0gZmFsc2U7XG4gICAgdGhpcy5yZW1vdmVSZXNpemVPYnNlcnZlcigpO1xuICB9XG5cbiAgZ2V0QWdncmVnYXRlVmFsdWUoY29sdW1uOiBUYWJsZUNvbHVtbik6IG51bWJlciB7XG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgPT09IEFnZ3JlZ2F0aW9uVHlwZS5zdW0pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFN1bShjb2x1bW4ubmFtZSk7XG4gICAgfVxuICAgIGlmIChjb2x1bW4uYWdncmVnYXRlID09PSBBZ2dyZWdhdGlvblR5cGUuYXZnKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTdW0oY29sdW1uLm5hbWUpIC8gdGhpcy5kYXRhLmxlbmd0aDtcbiAgICB9XG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgPT09IEFnZ3JlZ2F0aW9uVHlwZS5taW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE1pbihjb2x1bW4ubmFtZSk7XG4gICAgfVxuICAgIGlmIChjb2x1bW4uYWdncmVnYXRlID09PSBBZ2dyZWdhdGlvblR5cGUubWF4KSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRNYXgoY29sdW1uLm5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGdldEFnZ3JlZ2F0ZVRleHQoY29sdW1uOiBUYWJsZUNvbHVtbik6IHN0cmluZyB7XG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgPT09IEFnZ3JlZ2F0aW9uVHlwZS5zdW0pIHtcbiAgICAgIHJldHVybiAnc3VtJztcbiAgICB9XG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgPT09IEFnZ3JlZ2F0aW9uVHlwZS5hdmcpIHtcbiAgICAgIHJldHVybiAnYXZnJztcbiAgICB9XG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgPT09IEFnZ3JlZ2F0aW9uVHlwZS5taW4pIHtcbiAgICAgIHJldHVybiAnbWluJztcbiAgICB9XG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgPT09IEFnZ3JlZ2F0aW9uVHlwZS5tYXgpIHtcbiAgICAgIHJldHVybiAnbWF4JztcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgZW1pdFNjcm9sbChldmVudCkge1xuICAgIHRoaXMuc2Nyb2xsQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgdHJhY2tUYWJsZVJvdyA9IChpbmRleDogbnVtYmVyLCByb3c6IFRhYmxlUm93PFQ+KTogYW55ID0+IHtcbiAgICByZXR1cm4gdGhpcy50cmFja1JvdyA/IHRoaXMudHJhY2tSb3coaW5kZXgsIHJvdy5kYXRhKSA6IHJvdy5kYXRhWydpZCddO1xuICB9O1xuXG4gIHByaXZhdGUgYWRkUmVzaXplT2JzZXJ2ZXIoKSB7XG4gICAgdGhpcy5fb2JzID0gbmV3IFJlc2l6ZU9ic2VydmVyKF8gPT4ge1xuICAgICAgdGhpcy52aWV3cG9ydD8uY2hlY2tWaWV3cG9ydFNpemUoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX29icy5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVJlc2l6ZU9ic2VydmVyKCkge1xuICAgIHRoaXMuX29icy51bm9ic2VydmUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLl9vYnMuZGlzY29ubmVjdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTdW0oY29sdW1uTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YT8ucmVkdWNlKChhY2N1bSwgY3VycmVudCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gcGFyc2VGbG9hdChjdXJyZW50LmRhdGFbY29sdW1uTmFtZV0pO1xuICAgICAgcmV0dXJuIGFjY3VtICsgKGlzTmFOKHZhbCkgPyAwIDogdmFsKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWluKGNvbHVtbk5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuICh0aGlzLmRhdGEgYXMgYW55KT8ucmVkdWNlKFxuICAgICAgKGFjY3VtLCBjdXJyZW50OiBUYWJsZVJvdzxUPikgPT5cbiAgICAgICAgYWNjdW0gIT0gbnVsbCAmJiBhY2N1bSA8PSBjdXJyZW50LmRhdGFbY29sdW1uTmFtZV1cbiAgICAgICAgICA/IGFjY3VtXG4gICAgICAgICAgOiBjdXJyZW50LmRhdGFbY29sdW1uTmFtZV0sXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWF4KGNvbHVtbk5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuICh0aGlzLmRhdGEgYXMgYW55KT8ucmVkdWNlKFxuICAgICAgKGFjY3VtLCBjdXJyZW50KSA9PlxuICAgICAgICBhY2N1bSAhPSBudWxsICYmIGFjY3VtID49IGN1cnJlbnQuZGF0YVtjb2x1bW5OYW1lXVxuICAgICAgICAgID8gYWNjdW1cbiAgICAgICAgICA6IGN1cnJlbnQuZGF0YVtjb2x1bW5OYW1lXSxcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG59XG4iLCJAaWYgKHZpcnR1YWwgJiYgZGF0YS5sZW5ndGggPiAwKSB7XG4gIDx0ZXRhLXNjcm9sbGFibGUgY2xhc3M9XCJ0YWJsZS1ib2R5LWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nLWJvdHRvbTogMTJweFwiXG4gICAgICAgICAgICAgICAgICAgW3Nob3dTY3JvbGxiYXJzXT1cInRydWVcIlxuICA+XG4gICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCB0ZXRhU2Nyb2xsYWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0YWJsZS1ib2R5LWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2Nyb2xsKT1cImVtaXRTY3JvbGwoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbVNpemVdPVwiMjhcIj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKmNka1ZpcnR1YWxGb3I9XCJsZXQgcm93IG9mIGRhdGE7dGVtcGxhdGVDYWNoZVNpemU6IDA7IGxldCByb3dJbmRleCA9IGluZGV4OyB0cmFja0J5OiB0cmFja1RhYmxlUm93O1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYm9keVRlbXBsYXRlOyBjb250ZXh0OiB7cm93OiByb3csIHJvd0luZGV4OiByb3dJbmRleH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuICA8L3RldGEtc2Nyb2xsYWJsZT5cbn0gQGVsc2Uge1xuICA8dGV0YS1zY3JvbGxhYmxlIGNsYXNzPVwidGFibGUtYm9keS1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZy1ib3R0b206IDEycHhcIlxuICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbj1cImNvbHVtblwiXG4gICAgICAgICAgICAgICAgICAgW3Nob3dTY3JvbGxiYXJzXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgIChzY3JvbGwpPVwiZW1pdFNjcm9sbCgkZXZlbnQpXCI+XG4gICAgPGRpdiBjbGFzcz1cInRhYmxlLWJvZHktY29udGFpbmVyXCI+XG4gICAgICBAaWYgKCFkYXRhPy5sZW5ndGgpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbiBjb2x1bW5fYXV0b1wiXG4gICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDowOyBib3R0b206MTZweDtsZWZ0OjA7cmlnaHQ6MDtcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIEBmb3IgKHJvdyBvZiBkYXRhOyB0cmFjayB0cmFja1RhYmxlUm93KHJvd0luZGV4LCByb3cpOyBsZXQgcm93SW5kZXggPSAkaW5kZXgpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJvZHlUZW1wbGF0ZTsgY29udGV4dDoge3Jvdzogcm93LCByb3dJbmRleDogcm93SW5kZXh9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICB9XG4gICAgICBAaWYgKGFnZ3JlZ2F0ZSkge1xuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYWdnVGVtcGxhdGU7XCI+PC9uZy1jb250YWluZXI+XG4gICAgICB9XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZW1wdHlSb3c7XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvdGV0YS1zY3JvbGxhYmxlPlxufVxuXG48bmctdGVtcGxhdGUgI2JvZHlUZW1wbGF0ZSBsZXQtcm93PVwicm93XCIgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIj5cbiAgPCEtLSAgPGRpdiBjbGFzcz1cInRhYmxlLXJvd1wiLS0+XG4gIDwhLS0gICAgbmdGb3JtLS0+XG4gIDwhLS0gICAgKGNsaWNrKT1cInNldEFjdGl2ZVJvdyhyb3cuZGF0YSwgJGV2ZW50KVwiLS0+XG4gIDwhLS0gICAgW2F0dHIuZGF0YS1yb3ddPVwicm93SW5kZXhcIi0tPlxuICA8IS0tICAgIFtjbGFzcy50YWJsZS1yb3dfb2RkXT1cInJvd0luZGV4ICUgMiA9PT0gMVwiLS0+XG4gIDwhLS0gICAgW25nQ2xhc3NdPVwicm93Q2xhc3MgPyByb3dDbGFzcyhyb3cuZGF0YSwgcm93SW5kZXgpIDogJydcIi0tPlxuICA8IS0tICAgIFtjbGFzcy50YWJsZS1yb3dfc2VsZWN0ZWRdPVwic2VsZWN0ZWRSb3dzICYmIHNlbGVjdGVkUm93cy5pbmRleE9mKHJvdy5kYXRhKSA+PSAwXCItLT5cbiAgPCEtLSAgICBbc3R5bGUuZmxleC1ncm93XT1cInRvdGFsRmxleFwiLS0+XG4gIDwhLS0gICAgW3N0eWxlLmZsZXgtYmFzaXMucHhdPVwidG90YWxXaWR0aFwiLS0+XG4gIDwhLS0gICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJ0b3RhbFdpZHRoXCI+LS0+XG4gIDwhLS0gICAgQGlmIChsb2NrZWQubGVuZ3RoID4gMCkgey0tPlxuICA8IS0tICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJvd19sb2NrZWRcIi0tPlxuICA8IS0tICAgICAgICBbc3R5bGUuZmxleC1ncm93XT1cImxvY2tlZEZsZXhcIi0tPlxuICA8IS0tICAgICAgICBbc3R5bGUuZmxleC1iYXNpcy5weF09XCJsb2NrZWRXaWR0aFwiLS0+XG4gIDwhLS0gICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwibG9ja2VkV2lkdGhcIi0tPlxuICA8IS0tICAgICAgICBbc3R5bGUuekluZGV4XT1cInJvdy5kYXRhID09PSBhY3RpdmVSb3cgPyAyIDogMVwiPi0tPlxuICA8IS0tICAgICAgICBAaWYgKHNlbGVjdFR5cGUgPT09IHNlbGVjdFR5cGVFbnVtLmNoZWNrQm94ICYmIGxvY2tlZC5sZW5ndGgpIHstLT5cbiAgPCEtLSAgICAgICAgICA8dGV0YS1zZWxlY3Rpb24tY2VsbC0tPlxuICA8IS0tICAgICAgICAgICAgW3Jvd109XCJyb3cuZGF0YVwiLS0+XG4gIDwhLS0gICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMjhweDtcIj48L3RldGEtc2VsZWN0aW9uLWNlbGw+LS0+XG4gIDwhLS0gICAgICAgIH0tLT5cbiAgPCEtLSAgICAgICAgQGZvciAoY29sdW1uIG9mIGxvY2tlZDsgdHJhY2sgdHJhY2tDb2x1bW5zKGNvbEluZGV4LCBjb2x1bW4pOyBsZXQgY29sSW5kZXggPSAkaW5kZXgpIHstLT5cbiAgPCEtLSAgICAgICAgICA8dGV0YS1jZWxsLS0+XG4gIDwhLS0gICAgICAgICAgICBbYXR0ci5kYXRhLXJvd109XCJyb3dJbmRleFwiLS0+XG4gIDwhLS0gICAgICAgICAgICBbYXR0ci5kYXRhLWNvbHVtbl09XCJjb2x1bW4ubmFtZVwiLS0+XG4gIDwhLS0gICAgICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiLS0+XG4gIDwhLS0gICAgICAgICAgICBbZmlsdGVyT3B0aW9uc109XCJkaWN0P2RpY3RbY29sdW1uLm5hbWVdOltdXCItLT5cbiAgPCEtLSAgICAgICAgICAgIFtkaWN0XT1cImRpY3RcIi0tPlxuICA8IS0tICAgICAgICAgICAgW3Jvd109XCJyb3dcIi0tPlxuICA8IS0tICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uLmNlbGxDbGFzc1wiLS0+XG4gIDwhLS0gICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCIwXCItLT5cbiAgPCEtLSAgICAgICAgICAgIFtzdHlsZS5mbGV4LWdyb3ddPVwiY29sdW1uLmZsZXhcIi0tPlxuICA8IS0tICAgICAgICAgICAgW3N0eWxlLmZsZXgtYmFzaXMucHhdPVwiY29sdW1uLndpZHRoXCItLT5cbiAgPCEtLSAgICAgICAgICA+PC90ZXRhLWNlbGw+LS0+XG4gIDwhLS0gICAgICAgIH0tLT5cbiAgPCEtLSAgICAgIDwvZGl2Pi0tPlxuICA8IS0tICAgIH0tLT5cbiAgPCEtLSAgICBAaWYgKHNlbGVjdFR5cGUgPT09IHNlbGVjdFR5cGVFbnVtLmNoZWNrQm94ICYmIGxvY2tlZC5sZW5ndGggPCAxKSB7LS0+XG4gIDwhLS0gICAgICA8dGV0YS1zZWxlY3Rpb24tY2VsbC0tPlxuICA8IS0tICAgICAgICBbcm93XT1cInJvdy5kYXRhXCItLT5cbiAgPCEtLSAgICAgIHN0eWxlPVwid2lkdGg6IDI4cHg7XCI+PC90ZXRhLXNlbGVjdGlvbi1jZWxsPi0tPlxuICA8IS0tICAgIH0tLT5cbiAgPCEtLSAgICBAZm9yIChjb2x1bW4gb2YgdW5sb2NrZWQ7IHRyYWNrIHRyYWNrQ29sdW1ucyhjb2xJbmRleCwgY29sdW1uKTsgbGV0IGNvbEluZGV4ID0gJGluZGV4KSB7LS0+XG4gIDwhLS0gICAgICA8dGV0YS1jZWxsLS0+XG4gIDwhLS0gICAgICAgIFthdHRyLmRhdGEtcm93XT1cInJvd0luZGV4XCItLT5cbiAgPCEtLSAgICAgICAgW2F0dHIuZGF0YS1jb2x1bW5dPVwiY29sdW1uLm5hbWVcIi0tPlxuICA8IS0tICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiLS0+XG4gIDwhLS0gICAgICAgIFtmaWx0ZXJPcHRpb25zXT1cImRpY3Q/ZGljdFtjb2x1bW4ubmFtZV06W11cIi0tPlxuICA8IS0tICAgICAgICBbZGljdF09XCJkaWN0XCItLT5cbiAgPCEtLSAgICAgICAgW3Jvd109XCJyb3dcIi0tPlxuICA8IS0tICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4uY2VsbENsYXNzXCItLT5cbiAgPCEtLSAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiMFwiLS0+XG4gIDwhLS0gICAgICAgIFtzdHlsZS5mbGV4LWdyb3ddPVwiY29sdW1uLmZsZXhcIi0tPlxuICA8IS0tICAgICAgICBbc3R5bGUuZmxleC1iYXNpcy5weF09XCJjb2x1bW4ud2lkdGhcIi0tPlxuICA8IS0tICAgICAgPjwvdGV0YS1jZWxsPi0tPlxuICA8IS0tICAgIH0tLT5cbiAgPCEtLSAgPC9kaXY+LS0+XG4gIDx0ZXRhLXRhYmxlLXJvdyBjbGFzcz1cInRhYmxlLXJvd1wiXG4gICAgICAgICAgICAgICAgICBuZ0Zvcm1cbiAgICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXRBY3RpdmVSb3cocm93LmRhdGEsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1yb3ddPVwicm93SW5kZXhcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnRhYmxlLXJvd19vZGRdPVwicm93SW5kZXggJSAyID09PSAxXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInJvd0NsYXNzID8gcm93Q2xhc3Mocm93LmRhdGEsIHJvd0luZGV4KSA6ICcnXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy50YWJsZS1yb3dfc2VsZWN0ZWRdPVwic2VsZWN0ZWRSb3dzICYmIHNlbGVjdGVkUm93cy5pbmRleE9mKHJvdy5kYXRhKSA+PSAwXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5mbGV4LWdyb3ddPVwidG90YWxGbGV4XCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5mbGV4LWJhc2lzLnB4XT1cInRvdGFsV2lkdGhcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJ0b3RhbFdpZHRoXCI+XG4gICAgQGlmIChsb2NrZWQubGVuZ3RoID4gMCkge1xuICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJvd19sb2NrZWRcIlxuICAgICAgICAgICBbc3R5bGUuZmxleC1ncm93XT1cImxvY2tlZEZsZXhcIlxuICAgICAgICAgICBbc3R5bGUuZmxleC1iYXNpcy5weF09XCJsb2NrZWRXaWR0aFwiXG4gICAgICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwibG9ja2VkV2lkdGhcIlxuICAgICAgICAgICBbc3R5bGUuekluZGV4XT1cInJvdy5kYXRhID09PSBhY3RpdmVSb3cgPyAyIDogMVwiPlxuICAgICAgICBAaWYgKHNlbGVjdFR5cGUgPT09IHNlbGVjdFR5cGVFbnVtLmNoZWNrQm94ICYmIGxvY2tlZC5sZW5ndGgpIHtcbiAgICAgICAgICA8dGV0YS1zZWxlY3Rpb24tY2VsbFxuICAgICAgICAgICAgW3Jvd109XCJyb3cuZGF0YVwiXG4gICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAyOHB4O1wiPjwvdGV0YS1zZWxlY3Rpb24tY2VsbD5cbiAgICAgICAgfVxuICAgICAgICBAZm9yIChjb2x1bW4gb2YgbG9ja2VkOyB0cmFjayB0cmFja0NvbHVtbnMoY29sSW5kZXgsIGNvbHVtbik7IGxldCBjb2xJbmRleCA9ICRpbmRleCkge1xuICAgICAgICAgIDx0ZXRhLWNlbGxcbiAgICAgICAgICAgIFthdHRyLmRhdGEtcm93XT1cInJvd0luZGV4XCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtY29sdW1uXT1cImNvbHVtbi5uYW1lXCJcbiAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgICAgIFtmaWx0ZXJPcHRpb25zXT1cImRpY3Q/ZGljdFtjb2x1bW4ubmFtZV06W11cIlxuICAgICAgICAgICAgW2RpY3RdPVwiZGljdFwiXG4gICAgICAgICAgICBbcm93XT1cInJvd1wiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4uY2VsbENsYXNzXCJcbiAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cIjBcIlxuICAgICAgICAgICAgW3N0eWxlLmZsZXgtZ3Jvd109XCJjb2x1bW4uZmxleFwiXG4gICAgICAgICAgICBbc3R5bGUuZmxleC1iYXNpcy5weF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgICAgID48L3RldGEtY2VsbD5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuICAgIEBpZiAoc2VsZWN0VHlwZSA9PT0gc2VsZWN0VHlwZUVudW0uY2hlY2tCb3ggJiYgbG9ja2VkLmxlbmd0aCA8IDEpIHtcbiAgICAgIDx0ZXRhLXNlbGVjdGlvbi1jZWxsXG4gICAgICAgIFtyb3ddPVwicm93LmRhdGFcIlxuICAgICAgICBzdHlsZT1cIndpZHRoOiAyOHB4O1wiPjwvdGV0YS1zZWxlY3Rpb24tY2VsbD5cbiAgICB9XG4gICAgQGZvciAoY29sdW1uIG9mIHVubG9ja2VkOyB0cmFjayB0cmFja0NvbHVtbnMoY29sSW5kZXgsIGNvbHVtbik7IGxldCBjb2xJbmRleCA9ICRpbmRleCkge1xuICAgICAgPHRldGEtY2VsbFxuICAgICAgICBbYXR0ci5kYXRhLXJvd109XCJyb3dJbmRleFwiXG4gICAgICAgIFthdHRyLmRhdGEtY29sdW1uXT1cImNvbHVtbi5uYW1lXCJcbiAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICBbZmlsdGVyT3B0aW9uc109XCJkaWN0P2RpY3RbY29sdW1uLm5hbWVdOltdXCJcbiAgICAgICAgW2RpY3RdPVwiZGljdFwiXG4gICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uLmNlbGxDbGFzc1wiXG4gICAgICAgIFthdHRyLnRhYmluZGV4XT1cIjBcIlxuICAgICAgICBbc3R5bGUuZmxleC1ncm93XT1cImNvbHVtbi5mbGV4XCJcbiAgICAgICAgW3N0eWxlLmZsZXgtYmFzaXMucHhdPVwiY29sdW1uLndpZHRoXCJcbiAgICAgID48L3RldGEtY2VsbD5cbiAgICB9XG4gIDwvdGV0YS10YWJsZS1yb3c+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2FnZ1RlbXBsYXRlPlxuICBAaWYgKGxvY2FsZSB8IGFzeW5jOyBhcyBsb2MpIHtcbiAgICBAaWYgKGFnZ3JlZ2F0ZSkge1xuICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJvd1wiXG4gICAgICAgICAgIFtjbGFzcy50YWJsZS1yb3dfdmlydHVhbF09XCJ2aXJ0dWFsXCJcbiAgICAgICAgICAgW3N0eWxlLmZsZXgtZ3Jvd109XCJ0b3RhbEZsZXhcIlxuICAgICAgICAgICBbc3R5bGUuZmxleC1iYXNpcy5weF09XCJ0b3RhbFdpZHRoXCJcbiAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJ0b3RhbFdpZHRoXCI+XG4gICAgICAgIEBpZiAobG9ja2VkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcm93X2xvY2tlZFwiXG4gICAgICAgICAgICAgICBbc3R5bGUuZmxleC1ncm93XT1cImxvY2tlZEZsZXhcIlxuICAgICAgICAgICAgICAgW3N0eWxlLmZsZXgtYmFzaXMucHhdPVwibG9ja2VkV2lkdGhcIlxuICAgICAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJsb2NrZWRXaWR0aFwiPlxuICAgICAgICAgICAgQGlmIChzZWxlY3RUeXBlID09PSBzZWxlY3RUeXBlRW51bS5jaGVja0JveCAmJiBsb2NrZWQubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2VsbCBhbGlnbi1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMjhweDtcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHRldGEtaWNvbiBbbmFtZV09XCInc3VtQ29sb3InXCI+PC90ZXRhLWljb24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGZvciAoY29sdW1uIG9mIGxvY2tlZDsgdHJhY2sgdHJhY2tDb2x1bW5zKGNvbEluZGV4LCBjb2x1bW4pOyBsZXQgY29sSW5kZXggPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNlbGwgY2VsbC1jb21wb25lbnQgYWdncmVnYXRlLWNlbGxcIlxuICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtY29sdW1uXT1cImNvbHVtbi5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4uY2VsbENsYXNzXCJcbiAgICAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcbiAgICAgICAgICAgICAgICAgICBbc3R5bGUuZmxleC1ncm93XT1cImNvbHVtbi5mbGV4XCJcbiAgICAgICAgICAgICAgICAgICBbc3R5bGUuZmxleC1iYXNpcy5weF09XCJjb2x1bW4ud2lkdGhcIj5cbiAgICAgICAgICAgICAgICBAaWYgKGNvbHVtbi5hZ2dyZWdhdGUgIT09IGFnZ3JlZ2F0aW9uVHlwZS5ub25lKSB7XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNlbGwtdGV4dCBjZWxsLXRleHRfbnVtZXJpYyBmb250LXRpdGxlLTNcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyBsb2NbZ2V0QWdncmVnYXRlVGV4dChjb2x1bW4pXSB9fTpcbiAgICAgICAgICAgICAgICAgICAge3sgZ2V0QWdncmVnYXRlVmFsdWUoY29sdW1uKSB8IHRldGFOdW1iZXIgOiAyIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKHNlbGVjdFR5cGUgPT09IHNlbGVjdFR5cGVFbnVtLmNoZWNrQm94ICYmIGxvY2tlZC5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNlbGwgYWxpZ24tY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxuICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMjhweDtcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDx0ZXRhLWljb24gW25hbWVdPVwiJ3N1bUNvbG9yJ1wiPjwvdGV0YS1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIEBmb3IgKGNvbHVtbiBvZiB1bmxvY2tlZDsgdHJhY2sgdHJhY2tDb2x1bW5zKGNvbEluZGV4LCBjb2x1bW4pOyBsZXQgY29sSW5kZXggPSAkaW5kZXgpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2VsbCBjZWxsLWNvbXBvbmVudCBhZ2dyZWdhdGUtY2VsbFwiXG4gICAgICAgICAgICAgICBbYXR0ci5kYXRhLWNvbHVtbl09XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4uY2VsbENsYXNzXCJcbiAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cIjBcIlxuICAgICAgICAgICAgICAgW3N0eWxlLmZsZXgtZ3Jvd109XCJjb2x1bW4uZmxleFwiXG4gICAgICAgICAgICAgICBbc3R5bGUuZmxleC1iYXNpcy5weF09XCJjb2x1bW4ud2lkdGhcIj5cbiAgICAgICAgICAgIEBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSAhPT0gYWdncmVnYXRpb25UeXBlLm5vbmUpIHtcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZWxsLXRleHQgY2VsbC10ZXh0X251bWVyaWMgZm9udC10aXRsZS0zXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGxvY1tnZXRBZ2dyZWdhdGVUZXh0KGNvbHVtbildIH19OlxuICAgICAgICAgICAgICAgIHt7IGdldEFnZ3JlZ2F0ZVZhbHVlKGNvbHVtbikgfCB0ZXRhTnVtYmVyIDogMiB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlSb3c+XG4gIDxkaXYgY2xhc3M9XCJlbXB0eS10YWJsZS1yb3dcIlxuICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAwLjFweFwiXG4gICAgICAgW3N0eWxlLmZsZXgtZ3Jvd109XCJ0b3RhbEZsZXhcIlxuICAgICAgIFtzdHlsZS5mbGV4LWJhc2lzLnB4XT1cInRvdGFsV2lkdGhcIlxuICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwidG90YWxXaWR0aFwiPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
209
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYm9keS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlLWJvZHkvdGFibGUtYm9keS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlLWJvZHkvdGFibGUtYm9keS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUseUJBQXlCLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUcsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFHTCxNQUFNLEVBQ04sSUFBSSxFQUNKLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUkzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDNUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFLeEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHNCQUFzQixF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c0JBQS9ELFdBQVc7dUJBQUMsa0JBQWtCO2dCQUNyQixZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LCBDZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsLCBDZGtWaXJ0dWFsRm9yT2YgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVHlwZSxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VXaGlsZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgSURpY3Rpb25hcnkgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vY29udHJhY3QvaS1kaWN0aW9uYXJ5JztcbmltcG9ydCB7IElJZE5hbWUgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vY29udHJhY3QvaS1pZC1uYW1lJztcbmltcG9ydCB7IEFycmF5VXRpbCB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi91dGlsL2FycmF5LXV0aWwnO1xuaW1wb3J0IHsgVGV0YUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9sb2NhbGUvdGV0YS1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBUZXRhTG9jYWxpc2F0aW9uIH0gZnJvbSAnLi4vLi4vLi4vbG9jYWxlL3RldGEtbG9jYWxpc2F0aW9uJztcbmltcG9ydCB7IERldGFpbENvbXBvbmVudEJhc2UgfSBmcm9tICcuLi9iYXNlL2RldGFpbC1jb21wb25lbnQtYmFzZSc7XG5pbXBvcnQgeyBUYWJsZUNvbHVtbiB9IGZyb20gJy4uL2NvbnRyYWN0L3RhYmxlLWNvbHVtbic7XG5pbXBvcnQgeyBUYWJsZVJvdyB9IGZyb20gJy4uL2NvbnRyYWN0L3RhYmxlLXJvdyc7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvblR5cGUgfSBmcm9tICcuLi9lbnVtL2FnZ3JlZ2F0aW9uLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBTZWxlY3RUeXBlIH0gZnJvbSAnLi4vZW51bS9zZWxlY3QtdHlwZS5lbnVtJztcbmltcG9ydCB7IFRhYmxlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2UvdGFibGUuc2VydmljZSc7XG5pbXBvcnQgeyBOdW1iZXJQaXBlIH0gZnJvbSAnLi4vLi4vLi4vcGlwZS9udW1iZXItcGlwZS9udW1iZXIucGlwZSc7XG5pbXBvcnQgeyBJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vaWNvbi9pY29uL2ljb24uY29tcG9uZW50JztcbmltcG9ydCB7IENlbGxDb21wb25lbnQgfSBmcm9tICcuLi9jZWxsL2NlbGwuY29tcG9uZW50JztcbmltcG9ydCB7IFNlbGVjdGlvbkNlbGxDb21wb25lbnQgfSBmcm9tICcuLi9zZWxlY3Rpb24tY2VsbC9zZWxlY3Rpb24tY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0LCBOZ0NsYXNzLCBBc3luY1BpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgU2Nyb2xsYWJsZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9zY3JvbGxhYmxlL3Njcm9sbGFibGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IFNjcm9sbGFibGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvc2Nyb2xsYWJsZS9zY3JvbGxhYmxlL3Njcm9sbGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYmxlUm93Q29tcG9uZW50IH0gZnJvbSAnLi4vdGFibGUtcm93L3RhYmxlLXJvdy5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZXRhLXRhYmxlLWJvZHknLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtYm9keS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLWJvZHkuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBTY3JvbGxhYmxlQ29tcG9uZW50LFxuICAgIENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCxcbiAgICBDZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsLFxuICAgIFNjcm9sbGFibGVEaXJlY3RpdmUsXG4gICAgQ2RrVmlydHVhbEZvck9mLFxuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgTmdDbGFzcyxcbiAgICBTZWxlY3Rpb25DZWxsQ29tcG9uZW50LFxuICAgIENlbGxDb21wb25lbnQsXG4gICAgSWNvbkNvbXBvbmVudCxcbiAgICBBc3luY1BpcGUsXG4gICAgTnVtYmVyUGlwZSxcbiAgICBUYWJsZVJvd0NvbXBvbmVudCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVCb2R5Q29tcG9uZW50PFQ+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSB2aXJ0dWFsOiBib29sZWFuO1xuICBASW5wdXQoKSBhY3RpdmVSb3c6IFQ7XG4gIEBJbnB1dCgpIHNlbGVjdGVkUm93czogVFtdID0gW107XG4gIEBJbnB1dCgpIGFkZGl0aW9uYWxDb21wb25lbnQ6IFR5cGU8RGV0YWlsQ29tcG9uZW50QmFzZTxUPj47XG4gIEBJbnB1dCgpIGFnZ3JlZ2F0ZTogYm9vbGVhbjtcbiAgQElucHV0KCkgc2VsZWN0VHlwZTogU2VsZWN0VHlwZTtcbiAgQElucHV0KCkgcm93Q2xhc3M6IChyb3c6IFQsIGluZGV4PzogbnVtYmVyKSA9PiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRyYWNrUm93OiAoaW5kZXg6IG51bWJlciwgcm93OiBUKSA9PiBhbnk7XG4gIEBJbnB1dCgpIHRyYWNrQ29sdW1uczogKGluZGV4OiBudW1iZXIsIGNvbHVtbjogVGFibGVDb2x1bW4pID0+IGFueTtcbiAgQFZpZXdDaGlsZChDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQsIHsgc3RhdGljOiBmYWxzZSB9KVxuICB2aWV3cG9ydDogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MudGFibGUtYm9keScpIHByaXZhdGUgcmVhZG9ubHkgdGFibGVCb2R5Q2xhc3MgPSB0cnVlO1xuICBAT3V0cHV0KCkgc2Nyb2xsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcblxuICBzZXQgZGF0YShkYXRhOiBUYWJsZVJvdzxUPltdKSB7XG4gICAgdGhpcy5fZGF0YSA9IGRhdGE7XG4gIH1cblxuICBnZXQgZGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfVxuXG4gIGRpY3Q6IElEaWN0aW9uYXJ5PElJZE5hbWU8YW55PltdPjtcbiAgbG9ja2VkOiBUYWJsZUNvbHVtbltdID0gW107XG4gIHVubG9ja2VkOiBUYWJsZUNvbHVtbltdID0gW107XG4gIHNlbGVjdFR5cGVFbnVtID0gU2VsZWN0VHlwZTtcbiAgYWdncmVnYXRpb25UeXBlID0gQWdncmVnYXRpb25UeXBlO1xuICBsb2NrZWRGbGV4OiBudW1iZXI7XG4gIGxvY2tlZFdpZHRoOiBudW1iZXI7XG4gIHRvdGFsRmxleDogbnVtYmVyO1xuICB0b3RhbFdpZHRoOiBudW1iZXI7XG5cbiAgcHJpdmF0ZSBfY29sdW1uczogVGFibGVDb2x1bW5bXSA9IFtdO1xuICBwcml2YXRlIF9hbGl2ZSA9IHRydWU7XG4gIHByaXZhdGUgX2RhdGE6IFRhYmxlUm93PFQ+W107XG4gIHByaXZhdGUgX2hpZGRlbkNvbHVtbnM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgX29iczogUmVzaXplT2JzZXJ2ZXI7XG5cbiAgc2V0IGNvbHVtbnMoY29sdW1uczogVGFibGVDb2x1bW5bXSkge1xuICAgIHRoaXMuX2NvbHVtbnMgPSBjb2x1bW5zO1xuICAgIHRoaXMubG9ja2VkID0gdGhpcy5fY29sdW1ucz8uZmlsdGVyKChfKSA9PiBfLmxvY2tlZCA9PT0gdHJ1ZSk7XG4gICAgdGhpcy51bmxvY2tlZCA9IHRoaXMuX2NvbHVtbnM/LmZpbHRlcigoXykgPT4gXy5sb2NrZWQgPT09IGZhbHNlKTtcbiAgICBjb25zdCBzdGFydFdpZHRoID0gdGhpcy5zZWxlY3RUeXBlID09PSBTZWxlY3RUeXBlLmNoZWNrQm94ID8gMjggOiAwO1xuICAgIHRoaXMubG9ja2VkRmxleCA9IHRoaXMubG9ja2VkLnJlZHVjZSgocHJldjogbnVtYmVyLCBjdXJyOiBUYWJsZUNvbHVtbikgPT4gcHJldiArIGN1cnIuZmxleCwgMCk7XG4gICAgdGhpcy5sb2NrZWRXaWR0aCA9IHRoaXMubG9ja2VkLnJlZHVjZSgocHJldjogbnVtYmVyLCBjdXJyOiBUYWJsZUNvbHVtbikgPT4gcHJldiArIGN1cnIud2lkdGgsIHN0YXJ0V2lkdGgpO1xuICAgIHRoaXMudG90YWxGbGV4ID0gdGhpcy5fY29sdW1ucy5yZWR1Y2UoKHByZXY6IG51bWJlciwgY3VycjogVGFibGVDb2x1bW4pID0+IHByZXYgKyBjdXJyLmZsZXgsIDApO1xuICAgIHRoaXMudG90YWxXaWR0aCA9IHRoaXMuX2NvbHVtbnMucmVkdWNlKChwcmV2OiBudW1iZXIsIGN1cnI6IFRhYmxlQ29sdW1uKSA9PiBwcmV2ICsgY3Vyci53aWR0aCwgc3RhcnRXaWR0aCk7XG4gIH1cblxuICBnZXQgY29sdW1ucygpOiBUYWJsZUNvbHVtbltdIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1ucztcbiAgfVxuXG4gIGxvY2FsZTogT2JzZXJ2YWJsZTxUZXRhTG9jYWxpc2F0aW9uPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9zdmM6IFRhYmxlU2VydmljZTxUPixcbiAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgX2NvbmZpZzogVGV0YUNvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHt9XG5cbiAgc2V0QWN0aXZlUm93KHJvdzogVCwgZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50LnNoaWZ0S2V5ICYmICFldmVudC5jdHJsS2V5KSB7XG4gICAgICB0aGlzLl9zdmMuc2V0QWN0aXZlUm93KHJvdyk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5sb2NhbGUgPSB0aGlzLl9jb25maWcubG9jYWxlO1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuX3N2Yy5jb2x1bW5zLCB0aGlzLl9zdmMuaGlkZGVuQ29sdW1uc10pXG4gICAgICAucGlwZSh0YWtlV2hpbGUoKF8pID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlczogW1RhYmxlQ29sdW1uW10sIHN0cmluZ1tdXSkgPT4ge1xuICAgICAgICBjb25zdCBbY29sdW1ucywgaGlkZGVuQ29sdW1uc10gPSB2YWx1ZXM7XG4gICAgICAgIHRoaXMuX2hpZGRlbkNvbHVtbnMgPSBoaWRkZW5Db2x1bW5zO1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSBBcnJheVV0aWwuZmxhdHRlbihjb2x1bW5zLCAnY29sdW1ucycsIHRydWUpLmZpbHRlcihcbiAgICAgICAgICAoXykgPT4gdGhpcy5faGlkZGVuQ29sdW1ucy5pbmRleE9mKF8ubmFtZSkgPCAwXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5fc3ZjLmRpc3BsYXlEYXRhLnBpcGUodGFrZVdoaWxlKChfKSA9PiB0aGlzLl9hbGl2ZSkpLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgdGhpcy5kYXRhID0gXztcbiAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHRoaXMudmlld3BvcnQ/LmNoZWNrVmlld3BvcnRTaXplKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9zdmMuZGljdC5waXBlKHRha2VXaGlsZSgoXykgPT4gdGhpcy5fYWxpdmUpKS5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgIHRoaXMuZGljdCA9IF87XG4gICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9zdmMuc2Nyb2xsSW5kZXgucGlwZSh0YWtlV2hpbGUoKCkgPT4gdGhpcy5fYWxpdmUpKS5zdWJzY3JpYmUoYXN5bmMgKGluZGV4KSA9PiB7XG4gICAgICBpZiAodGhpcy52aWV3cG9ydCkge1xuICAgICAgICB0aGlzLnZpZXdwb3J0LnNjcm9sbFRvSW5kZXgoaW5kZXgsICdhdXRvJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgLnRhYmxlLXJvd1tkYXRhLXJvdz1cIiR7aW5kZXh9XCJdYCkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIHJvdz8uc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3N2Yy5hY3RpdmVSb3cucGlwZSh0YWtlV2hpbGUoKF8pID0+IHRoaXMuX2FsaXZlKSkuc3Vic2NyaWJlKGFzeW5jIChfKSA9PiB7XG4gICAgICB0aGlzLmFjdGl2ZVJvdyA9IF87XG4gICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRSZXNpemVPYnNlcnZlcigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fYWxpdmUgPSBmYWxzZTtcbiAgICB0aGlzLnJlbW92ZVJlc2l6ZU9ic2VydmVyKCk7XG4gIH1cblxuICBnZXRBZ2dyZWdhdGVWYWx1ZShjb2x1bW46IFRhYmxlQ29sdW1uKTogbnVtYmVyIHtcbiAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSA9PT0gQWdncmVnYXRpb25UeXBlLnN1bSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U3VtKGNvbHVtbi5uYW1lKTtcbiAgICB9XG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgPT09IEFnZ3JlZ2F0aW9uVHlwZS5hdmcpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFN1bShjb2x1bW4ubmFtZSkgLyB0aGlzLmRhdGEubGVuZ3RoO1xuICAgIH1cbiAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSA9PT0gQWdncmVnYXRpb25UeXBlLm1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TWluKGNvbHVtbi5uYW1lKTtcbiAgICB9XG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgPT09IEFnZ3JlZ2F0aW9uVHlwZS5tYXgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE1heChjb2x1bW4ubmFtZSk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0QWdncmVnYXRlVGV4dChjb2x1bW46IFRhYmxlQ29sdW1uKTogc3RyaW5nIHtcbiAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSA9PT0gQWdncmVnYXRpb25UeXBlLnN1bSkge1xuICAgICAgcmV0dXJuICdzdW0nO1xuICAgIH1cbiAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSA9PT0gQWdncmVnYXRpb25UeXBlLmF2Zykge1xuICAgICAgcmV0dXJuICdhdmcnO1xuICAgIH1cbiAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSA9PT0gQWdncmVnYXRpb25UeXBlLm1pbikge1xuICAgICAgcmV0dXJuICdtaW4nO1xuICAgIH1cbiAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSA9PT0gQWdncmVnYXRpb25UeXBlLm1heCkge1xuICAgICAgcmV0dXJuICdtYXgnO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBlbWl0U2Nyb2xsKGV2ZW50KSB7XG4gICAgdGhpcy5zY3JvbGxDaGFuZ2UuZW1pdChldmVudCk7XG4gIH1cblxuICB0cmFja1RhYmxlUm93ID0gKGluZGV4OiBudW1iZXIsIHJvdzogVGFibGVSb3c8VD4pOiBhbnkgPT4ge1xuICAgIHJldHVybiB0aGlzLnRyYWNrUm93ID8gdGhpcy50cmFja1JvdyhpbmRleCwgcm93LmRhdGEpIDogcm93LmRhdGFbJ2lkJ107XG4gIH07XG5cbiAgcHJpdmF0ZSBhZGRSZXNpemVPYnNlcnZlcigpIHtcbiAgICB0aGlzLl9vYnMgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKF8pID0+IHtcbiAgICAgIHRoaXMudmlld3BvcnQ/LmNoZWNrVmlld3BvcnRTaXplKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9vYnMub2JzZXJ2ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVSZXNpemVPYnNlcnZlcigpIHtcbiAgICB0aGlzLl9vYnMudW5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgdGhpcy5fb2JzLmRpc2Nvbm5lY3QoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3VtKGNvbHVtbk5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmRhdGE/LnJlZHVjZSgoYWNjdW0sIGN1cnJlbnQpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IHBhcnNlRmxvYXQoY3VycmVudC5kYXRhW2NvbHVtbk5hbWVdKTtcbiAgICAgIHJldHVybiBhY2N1bSArIChpc05hTih2YWwpID8gMCA6IHZhbCk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBwcml2YXRlIGdldE1pbihjb2x1bW5OYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiAodGhpcy5kYXRhIGFzIGFueSk/LnJlZHVjZShcbiAgICAgIChhY2N1bSwgY3VycmVudDogVGFibGVSb3c8VD4pID0+XG4gICAgICAgIGFjY3VtICE9IG51bGwgJiYgYWNjdW0gPD0gY3VycmVudC5kYXRhW2NvbHVtbk5hbWVdID8gYWNjdW0gOiBjdXJyZW50LmRhdGFbY29sdW1uTmFtZV0sXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWF4KGNvbHVtbk5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuICh0aGlzLmRhdGEgYXMgYW55KT8ucmVkdWNlKFxuICAgICAgKGFjY3VtLCBjdXJyZW50KSA9PiAoYWNjdW0gIT0gbnVsbCAmJiBhY2N1bSA+PSBjdXJyZW50LmRhdGFbY29sdW1uTmFtZV0gPyBhY2N1bSA6IGN1cnJlbnQuZGF0YVtjb2x1bW5OYW1lXSksXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxufVxuIiwiQGlmICh2aXJ0dWFsICYmIGRhdGEubGVuZ3RoID4gMCkge1xuPHRldGEtc2Nyb2xsYWJsZSBjbGFzcz1cInRhYmxlLWJvZHktY29udGFpbmVyXCIgc3R5bGU9XCJwYWRkaW5nLWJvdHRvbTogMTJweFwiIFtzaG93U2Nyb2xsYmFyc109XCJ0cnVlXCI+XG4gIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnRcbiAgICB0ZXRhU2Nyb2xsYWJsZVxuICAgIGNsYXNzPVwidGFibGUtYm9keS1jb250YWluZXJcIlxuICAgIChzY3JvbGwpPVwiZW1pdFNjcm9sbCgkZXZlbnQpXCJcbiAgICBbaXRlbVNpemVdPVwiMjhcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqY2RrVmlydHVhbEZvcj1cImxldCByb3cgb2YgZGF0YTsgdGVtcGxhdGVDYWNoZVNpemU6IDA7IGxldCByb3dJbmRleCA9IGluZGV4OyB0cmFja0J5OiB0cmFja1RhYmxlUm93XCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYm9keVRlbXBsYXRlOyBjb250ZXh0OiB7IHJvdzogcm93LCByb3dJbmRleDogcm93SW5kZXggfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbjwvdGV0YS1zY3JvbGxhYmxlPlxufSBAZWxzZSB7XG48dGV0YS1zY3JvbGxhYmxlXG4gIGNsYXNzPVwidGFibGUtYm9keS1jb250YWluZXJcIlxuICBzdHlsZT1cInBhZGRpbmctYm90dG9tOiAxMnB4XCJcbiAgZGlyZWN0aW9uPVwiY29sdW1uXCJcbiAgW3Nob3dTY3JvbGxiYXJzXT1cInRydWVcIlxuICAoc2Nyb2xsKT1cImVtaXRTY3JvbGwoJGV2ZW50KVwiXG4+XG4gIDxkaXYgY2xhc3M9XCJ0YWJsZS1ib2R5LWNvbnRhaW5lclwiPlxuICAgIEBpZiAoIWRhdGE/Lmxlbmd0aCkge1xuICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4gY29sdW1uX2F1dG9cIiBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAwOyBib3R0b206IDE2cHg7IGxlZnQ6IDA7IHJpZ2h0OiAwXCI+XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gICAgfSBAZm9yIChyb3cgb2YgZGF0YTsgdHJhY2sgdHJhY2tUYWJsZVJvdyhyb3dJbmRleCwgcm93KTsgbGV0IHJvd0luZGV4ID0gJGluZGV4KSB7XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJvZHlUZW1wbGF0ZTsgY29udGV4dDogeyByb3c6IHJvdywgcm93SW5kZXg6IHJvd0luZGV4IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICB9IEBpZiAoYWdncmVnYXRlKSB7XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFnZ1RlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJlbXB0eVJvd1wiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvdGV0YS1zY3JvbGxhYmxlPlxufVxuXG48bmctdGVtcGxhdGUgI2JvZHlUZW1wbGF0ZSBsZXQtcm93PVwicm93XCIgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIj5cbiAgPCEtLSAgPGRpdiBjbGFzcz1cInRhYmxlLXJvd1wiLS0+XG4gIDwhLS0gICAgbmdGb3JtLS0+XG4gIDwhLS0gICAgKGNsaWNrKT1cInNldEFjdGl2ZVJvdyhyb3cuZGF0YSwgJGV2ZW50KVwiLS0+XG4gIDwhLS0gICAgW2F0dHIuZGF0YS1yb3ddPVwicm93SW5kZXhcIi0tPlxuICA8IS0tICAgIFtjbGFzcy50YWJsZS1yb3dfb2RkXT1cInJvd0luZGV4ICUgMiA9PT0gMVwiLS0+XG4gIDwhLS0gICAgW25nQ2xhc3NdPVwicm93Q2xhc3MgPyByb3dDbGFzcyhyb3cuZGF0YSwgcm93SW5kZXgpIDogJydcIi0tPlxuICA8IS0tICAgIFtjbGFzcy50YWJsZS1yb3dfc2VsZWN0ZWRdPVwic2VsZWN0ZWRSb3dzICYmIHNlbGVjdGVkUm93cy5pbmRleE9mKHJvdy5kYXRhKSA+PSAwXCItLT5cbiAgPCEtLSAgICBbc3R5bGUuZmxleC1ncm93XT1cInRvdGFsRmxleFwiLS0+XG4gIDwhLS0gICAgW3N0eWxlLmZsZXgtYmFzaXMucHhdPVwidG90YWxXaWR0aFwiLS0+XG4gIDwhLS0gICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJ0b3RhbFdpZHRoXCI+LS0+XG4gIDwhLS0gICAgQGlmIChsb2NrZWQubGVuZ3RoID4gMCkgey0tPlxuICA8IS0tICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJvd19sb2NrZWRcIi0tPlxuICA8IS0tICAgICAgICBbc3R5bGUuZmxleC1ncm93XT1cImxvY2tlZEZsZXhcIi0tPlxuICA8IS0tICAgICAgICBbc3R5bGUuZmxleC1iYXNpcy5weF09XCJsb2NrZWRXaWR0aFwiLS0+XG4gIDwhLS0gICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwibG9ja2VkV2lkdGhcIi0tPlxuICA8IS0tICAgICAgICBbc3R5bGUuekluZGV4XT1cInJvdy5kYXRhID09PSBhY3RpdmVSb3cgPyAyIDogMVwiPi0tPlxuICA8IS0tICAgICAgICBAaWYgKHNlbGVjdFR5cGUgPT09IHNlbGVjdFR5cGVFbnVtLmNoZWNrQm94ICYmIGxvY2tlZC5sZW5ndGgpIHstLT5cbiAgPCEtLSAgICAgICAgICA8dGV0YS1zZWxlY3Rpb24tY2VsbC0tPlxuICA8IS0tICAgICAgICAgICAgW3Jvd109XCJyb3cuZGF0YVwiLS0+XG4gIDwhLS0gICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMjhweDtcIj48L3RldGEtc2VsZWN0aW9uLWNlbGw+LS0+XG4gIDwhLS0gICAgICAgIH0tLT5cbiAgPCEtLSAgICAgICAgQGZvciAoY29sdW1uIG9mIGxvY2tlZDsgdHJhY2sgdHJhY2tDb2x1bW5zKGNvbEluZGV4LCBjb2x1bW4pOyBsZXQgY29sSW5kZXggPSAkaW5kZXgpIHstLT5cbiAgPCEtLSAgICAgICAgICA8dGV0YS1jZWxsLS0+XG4gIDwhLS0gICAgICAgICAgICBbYXR0ci5kYXRhLXJvd109XCJyb3dJbmRleFwiLS0+XG4gIDwhLS0gICAgICAgICAgICBbYXR0ci5kYXRhLWNvbHVtbl09XCJjb2x1bW4ubmFtZVwiLS0+XG4gIDwhLS0gICAgICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiLS0+XG4gIDwhLS0gICAgICAgICAgICBbZmlsdGVyT3B0aW9uc109XCJkaWN0P2RpY3RbY29sdW1uLm5hbWVdOltdXCItLT5cbiAgPCEtLSAgICAgICAgICAgIFtkaWN0XT1cImRpY3RcIi0tPlxuICA8IS0tICAgICAgICAgICAgW3Jvd109XCJyb3dcIi0tPlxuICA8IS0tICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uLmNlbGxDbGFzc1wiLS0+XG4gIDwhLS0gICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCIwXCItLT5cbiAgPCEtLSAgICAgICAgICAgIFtzdHlsZS5mbGV4LWdyb3ddPVwiY29sdW1uLmZsZXhcIi0tPlxuICA8IS0tICAgICAgICAgICAgW3N0eWxlLmZsZXgtYmFzaXMucHhdPVwiY29sdW1uLndpZHRoXCItLT5cbiAgPCEtLSAgICAgICAgICA+PC90ZXRhLWNlbGw+LS0+XG4gIDwhLS0gICAgICAgIH0tLT5cbiAgPCEtLSAgICAgIDwvZGl2Pi0tPlxuICA8IS0tICAgIH0tLT5cbiAgPCEtLSAgICBAaWYgKHNlbGVjdFR5cGUgPT09IHNlbGVjdFR5cGVFbnVtLmNoZWNrQm94ICYmIGxvY2tlZC5sZW5ndGggPCAxKSB7LS0+XG4gIDwhLS0gICAgICA8dGV0YS1zZWxlY3Rpb24tY2VsbC0tPlxuICA8IS0tICAgICAgICBbcm93XT1cInJvdy5kYXRhXCItLT5cbiAgPCEtLSAgICAgIHN0eWxlPVwid2lkdGg6IDI4cHg7XCI+PC90ZXRhLXNlbGVjdGlvbi1jZWxsPi0tPlxuICA8IS0tICAgIH0tLT5cbiAgPCEtLSAgICBAZm9yIChjb2x1bW4gb2YgdW5sb2NrZWQ7IHRyYWNrIHRyYWNrQ29sdW1ucyhjb2xJbmRleCwgY29sdW1uKTsgbGV0IGNvbEluZGV4ID0gJGluZGV4KSB7LS0+XG4gIDwhLS0gICAgICA8dGV0YS1jZWxsLS0+XG4gIDwhLS0gICAgICAgIFthdHRyLmRhdGEtcm93XT1cInJvd0luZGV4XCItLT5cbiAgPCEtLSAgICAgICAgW2F0dHIuZGF0YS1jb2x1bW5dPVwiY29sdW1uLm5hbWVcIi0tPlxuICA8IS0tICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiLS0+XG4gIDwhLS0gICAgICAgIFtmaWx0ZXJPcHRpb25zXT1cImRpY3Q/ZGljdFtjb2x1bW4ubmFtZV06W11cIi0tPlxuICA8IS0tICAgICAgICBbZGljdF09XCJkaWN0XCItLT5cbiAgPCEtLSAgICAgICAgW3Jvd109XCJyb3dcIi0tPlxuICA8IS0tICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4uY2VsbENsYXNzXCItLT5cbiAgPCEtLSAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiMFwiLS0+XG4gIDwhLS0gICAgICAgIFtzdHlsZS5mbGV4LWdyb3ddPVwiY29sdW1uLmZsZXhcIi0tPlxuICA8IS0tICAgICAgICBbc3R5bGUuZmxleC1iYXNpcy5weF09XCJjb2x1bW4ud2lkdGhcIi0tPlxuICA8IS0tICAgICAgPjwvdGV0YS1jZWxsPi0tPlxuICA8IS0tICAgIH0tLT5cbiAgPCEtLSAgPC9kaXY+LS0+XG4gIDx0ZXRhLXRhYmxlLXJvd1xuICAgIGNsYXNzPVwidGFibGUtcm93XCJcbiAgICBuZ0Zvcm1cbiAgICBbcm93XT1cInJvd1wiXG4gICAgKGNsaWNrKT1cInNldEFjdGl2ZVJvdyhyb3cuZGF0YSwgJGV2ZW50KVwiXG4gICAgW2F0dHIuZGF0YS1yb3ddPVwicm93SW5kZXhcIlxuICAgIFtjbGFzcy50YWJsZS1yb3dfb2RkXT1cInJvd0luZGV4ICUgMiA9PT0gMVwiXG4gICAgW25nQ2xhc3NdPVwicm93Q2xhc3MgPyByb3dDbGFzcyhyb3cuZGF0YSwgcm93SW5kZXgpIDogJydcIlxuICAgIFtjbGFzcy50YWJsZS1yb3dfc2VsZWN0ZWRdPVwic2VsZWN0ZWRSb3dzICYmIHNlbGVjdGVkUm93cy5pbmRleE9mKHJvdy5kYXRhKSA+PSAwXCJcbiAgICBbc3R5bGUuZmxleC1ncm93XT1cInRvdGFsRmxleFwiXG4gICAgW3N0eWxlLmZsZXgtYmFzaXMucHhdPVwidG90YWxXaWR0aFwiXG4gICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJ0b3RhbFdpZHRoXCJcbiAgPlxuICAgIEBpZiAobG9ja2VkLmxlbmd0aCA+IDApIHtcbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInRhYmxlLXJvd19sb2NrZWRcIlxuICAgICAgW3N0eWxlLmZsZXgtZ3Jvd109XCJsb2NrZWRGbGV4XCJcbiAgICAgIFtzdHlsZS5mbGV4LWJhc2lzLnB4XT1cImxvY2tlZFdpZHRoXCJcbiAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwibG9ja2VkV2lkdGhcIlxuICAgICAgW3N0eWxlLnpJbmRleF09XCJyb3cuZGF0YSA9PT0gYWN0aXZlUm93ID8gMiA6IDFcIlxuICAgID5cbiAgICAgIEBpZiAoc2VsZWN0VHlwZSA9PT0gc2VsZWN0VHlwZUVudW0uY2hlY2tCb3ggJiYgbG9ja2VkLmxlbmd0aCkge1xuICAgICAgPHRldGEtc2VsZWN0aW9uLWNlbGwgW3Jvd109XCJyb3cuZGF0YVwiIHN0eWxlPVwid2lkdGg6IDI4cHhcIj48L3RldGEtc2VsZWN0aW9uLWNlbGw+XG4gICAgICB9IEBmb3IgKGNvbHVtbiBvZiBsb2NrZWQ7IHRyYWNrIHRyYWNrQ29sdW1ucyhjb2xJbmRleCwgY29sdW1uKTsgbGV0IGNvbEluZGV4ID0gJGluZGV4KSB7XG4gICAgICA8dGV0YS1jZWxsXG4gICAgICAgIFthdHRyLmRhdGEtcm93XT1cInJvd0luZGV4XCJcbiAgICAgICAgW2F0dHIuZGF0YS1jb2x1bW5dPVwiY29sdW1uLm5hbWVcIlxuICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgIFtmaWx0ZXJPcHRpb25zXT1cImRpY3QgPyBkaWN0W2NvbHVtbi5uYW1lXSA6IFtdXCJcbiAgICAgICAgW2RpY3RdPVwiZGljdFwiXG4gICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uLmNlbGxDbGFzc1wiXG4gICAgICAgIFthdHRyLnRhYmluZGV4XT1cIjBcIlxuICAgICAgICBbc3R5bGUuZmxleC1ncm93XT1cImNvbHVtbi5mbGV4XCJcbiAgICAgICAgW3N0eWxlLmZsZXgtYmFzaXMucHhdPVwiY29sdW1uLndpZHRoXCJcbiAgICAgID48L3RldGEtY2VsbD5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICB9IEBpZiAoc2VsZWN0VHlwZSA9PT0gc2VsZWN0VHlwZUVudW0uY2hlY2tCb3ggJiYgbG9ja2VkLmxlbmd0aCA8IDEpIHtcbiAgICA8dGV0YS1zZWxlY3Rpb24tY2VsbCBbcm93XT1cInJvdy5kYXRhXCIgc3R5bGU9XCJ3aWR0aDogMjhweFwiPjwvdGV0YS1zZWxlY3Rpb24tY2VsbD5cbiAgICB9IEBmb3IgKGNvbHVtbiBvZiB1bmxvY2tlZDsgdHJhY2sgdHJhY2tDb2x1bW5zKGNvbEluZGV4LCBjb2x1bW4pOyBsZXQgY29sSW5kZXggPSAkaW5kZXgpIHtcbiAgICA8dGV0YS1jZWxsXG4gICAgICBbYXR0ci5kYXRhLXJvd109XCJyb3dJbmRleFwiXG4gICAgICBbYXR0ci5kYXRhLWNvbHVtbl09XCJjb2x1bW4ubmFtZVwiXG4gICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICBbZmlsdGVyT3B0aW9uc109XCJkaWN0ID8gZGljdFtjb2x1bW4ubmFtZV0gOiBbXVwiXG4gICAgICBbZGljdF09XCJkaWN0XCJcbiAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbi5jZWxsQ2xhc3NcIlxuICAgICAgW2F0dHIudGFiaW5kZXhdPVwiMFwiXG4gICAgICBbc3R5bGUuZmxleC1ncm93XT1cImNvbHVtbi5mbGV4XCJcbiAgICAgIFtzdHlsZS5mbGV4LWJhc2lzLnB4XT1cImNvbHVtbi53aWR0aFwiXG4gICAgPjwvdGV0YS1jZWxsPlxuICAgIH1cbiAgPC90ZXRhLXRhYmxlLXJvdz5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYWdnVGVtcGxhdGU+XG4gIEBpZiAobG9jYWxlIHwgYXN5bmM7IGFzIGxvYykgeyBAaWYgKGFnZ3JlZ2F0ZSkge1xuICA8ZGl2XG4gICAgY2xhc3M9XCJ0YWJsZS1yb3dcIlxuICAgIFtjbGFzcy50YWJsZS1yb3dfdmlydHVhbF09XCJ2aXJ0dWFsXCJcbiAgICBbc3R5bGUuZmxleC1ncm93XT1cInRvdGFsRmxleFwiXG4gICAgW3N0eWxlLmZsZXgtYmFzaXMucHhdPVwidG90YWxXaWR0aFwiXG4gICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJ0b3RhbFdpZHRoXCJcbiAgPlxuICAgIEBpZiAobG9ja2VkLmxlbmd0aCA+IDApIHtcbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInRhYmxlLXJvd19sb2NrZWRcIlxuICAgICAgW3N0eWxlLmZsZXgtZ3Jvd109XCJsb2NrZWRGbGV4XCJcbiAgICAgIFtzdHlsZS5mbGV4LWJhc2lzLnB4XT1cImxvY2tlZFdpZHRoXCJcbiAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwibG9ja2VkV2lkdGhcIlxuICAgID5cbiAgICAgIEBpZiAoc2VsZWN0VHlwZSA9PT0gc2VsZWN0VHlwZUVudW0uY2hlY2tCb3ggJiYgbG9ja2VkLmxlbmd0aCA8IDEpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJjZWxsIGFsaWduLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCIgc3R5bGU9XCJ3aWR0aDogMjhweFwiPlxuICAgICAgICA8dGV0YS1pY29uIFtuYW1lXT1cIidzdW1Db2xvcidcIj48L3RldGEtaWNvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgfSBAZm9yIChjb2x1bW4gb2YgbG9ja2VkOyB0cmFjayB0cmFja0NvbHVtbnMoY29sSW5kZXgsIGNvbHVtbik7IGxldCBjb2xJbmRleCA9ICRpbmRleCkge1xuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImNlbGwgY2VsbC1jb21wb25lbnQgYWdncmVnYXRlLWNlbGxcIlxuICAgICAgICBbYXR0ci5kYXRhLWNvbHVtbl09XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbi5jZWxsQ2xhc3NcIlxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcbiAgICAgICAgW3N0eWxlLmZsZXgtZ3Jvd109XCJjb2x1bW4uZmxleFwiXG4gICAgICAgIFtzdHlsZS5mbGV4LWJhc2lzLnB4XT1cImNvbHVtbi53aWR0aFwiXG4gICAgICA+XG4gICAgICAgIEBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSAhPT0gYWdncmVnYXRpb25UeXBlLm5vbmUpIHtcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjZWxsLXRleHQgY2VsbC10ZXh0X251bWVyaWMgZm9udC10aXRsZS0zXCI+XG4gICAgICAgICAge3sgbG9jW2dldEFnZ3JlZ2F0ZVRleHQoY29sdW1uKV0gfX06XG4gICAgICAgICAge3sgZ2V0QWdncmVnYXRlVmFsdWUoY29sdW1uKSB8IHRldGFOdW1iZXIgOiAyIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgfSBAaWYgKHNlbGVjdFR5cGUgPT09IHNlbGVjdFR5cGVFbnVtLmNoZWNrQm94ICYmIGxvY2tlZC5sZW5ndGggPCAxKSB7XG4gICAgPGRpdiBjbGFzcz1cImNlbGwgYWxpZ24tY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIiBzdHlsZT1cIndpZHRoOiAyOHB4XCI+XG4gICAgICA8dGV0YS1pY29uIFtuYW1lXT1cIidzdW1Db2xvcidcIj48L3RldGEtaWNvbj5cbiAgICA8L2Rpdj5cbiAgICB9IEBmb3IgKGNvbHVtbiBvZiB1bmxvY2tlZDsgdHJhY2sgdHJhY2tDb2x1bW5zKGNvbEluZGV4LCBjb2x1bW4pOyBsZXQgY29sSW5kZXggPSAkaW5kZXgpIHtcbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImNlbGwgY2VsbC1jb21wb25lbnQgYWdncmVnYXRlLWNlbGxcIlxuICAgICAgW2F0dHIuZGF0YS1jb2x1bW5dPVwiY29sdW1uLm5hbWVcIlxuICAgICAgW25nQ2xhc3NdPVwiY29sdW1uLmNlbGxDbGFzc1wiXG4gICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcbiAgICAgIFtzdHlsZS5mbGV4LWdyb3ddPVwiY29sdW1uLmZsZXhcIlxuICAgICAgW3N0eWxlLmZsZXgtYmFzaXMucHhdPVwiY29sdW1uLndpZHRoXCJcbiAgICA+XG4gICAgICBAaWYgKGNvbHVtbi5hZ2dyZWdhdGUgIT09IGFnZ3JlZ2F0aW9uVHlwZS5ub25lKSB7XG4gICAgICA8c3BhbiBjbGFzcz1cImNlbGwtdGV4dCBjZWxsLXRleHRfbnVtZXJpYyBmb250LXRpdGxlLTNcIj5cbiAgICAgICAge3sgbG9jW2dldEFnZ3JlZ2F0ZVRleHQoY29sdW1uKV0gfX06XG4gICAgICAgIHt7IGdldEFnZ3JlZ2F0ZVZhbHVlKGNvbHVtbikgfCB0ZXRhTnVtYmVyIDogMiB9fVxuICAgICAgPC9zcGFuPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG4gIH0gfVxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlSb3c+XG4gIDxkaXZcbiAgICBjbGFzcz1cImVtcHR5LXRhYmxlLXJvd1wiXG4gICAgc3R5bGU9XCJoZWlnaHQ6IDAuMXB4XCJcbiAgICBbc3R5bGUuZmxleC1ncm93XT1cInRvdGFsRmxleFwiXG4gICAgW3N0eWxlLmZsZXgtYmFzaXMucHhdPVwidG90YWxXaWR0aFwiXG4gICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJ0b3RhbFdpZHRoXCJcbiAgPjwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
package/esm2022/component/table/table-head/filter-dropdown-tab/filter-dropdown-tab.component.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, HostListener, Input } from '@angular/core';
|
|
1
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, HostListener, Input, } from '@angular/core';
|
|
2
2
|
import { TableColumn } from '../../contract/table-column';
|
|
3
3
|
import { FilterState } from '../../../filter/contarct/filter-state';
|
|
4
4
|
import { TableService } from '../../service/table.service';
|
|
@@ -33,14 +33,13 @@ export class FilterDropdownTabComponent {
|
|
|
33
33
|
this.close();
|
|
34
34
|
this._cdr.markForCheck();
|
|
35
35
|
}
|
|
36
|
-
ngOnInit() {
|
|
37
|
-
}
|
|
36
|
+
ngOnInit() { }
|
|
38
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 }); }
|
|
39
|
-
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) {
|
|
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) { @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 }); }
|
|
40
39
|
}
|
|
41
40
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: FilterDropdownTabComponent, decorators: [{
|
|
42
41
|
type: Component,
|
|
43
|
-
args: [{ selector: 'teta-filter-dropdown-tab', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [FilterHostComponent, ToolbarComponent, ButtonComponent, IconComponent, AsyncPipe], template: "@if (locale | async; as loc) {
|
|
42
|
+
args: [{ selector: 'teta-filter-dropdown-tab', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [FilterHostComponent, ToolbarComponent, ButtonComponent, IconComponent, AsyncPipe], template: "@if (locale | async; as loc) { @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"] }]
|
|
44
43
|
}], ctorParameters: () => [{ type: i1.TableService }, { type: i2.TetaConfigService }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }], propDecorators: { columns: [{
|
|
45
44
|
type: Input
|
|
46
45
|
}], column: [{
|
|
@@ -55,4 +54,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImpor
|
|
|
55
54
|
type: HostListener,
|
|
56
55
|
args: ['keydown.enter']
|
|
57
56
|
}] } });
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWRyb3Bkb3duLXRhYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlLWhlYWQvZmlsdGVyLWRyb3Bkb3duLXRhYi9maWx0ZXItZHJvcGRvd24tdGFiLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvdGFibGUvdGFibGUtaGVhZC9maWx0ZXItZHJvcGRvd24tdGFiL2ZpbHRlci1kcm9wZG93bi10YWIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxHQUVOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFHcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBSTNFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDOzs7O0FBVXhGLE1BQU0sT0FBTywwQkFBMEI7SUFVTixLQUFLO1FBQ2xDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsWUFDVSxJQUFxQixFQUNyQixPQUEwQixFQUMxQixXQUF1QixFQUN2QixJQUF1QjtRQUh2QixTQUFJLEdBQUosSUFBSSxDQUFpQjtRQUNyQixZQUFPLEdBQVAsT0FBTyxDQUFtQjtRQUMxQixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUN2QixTQUFJLEdBQUosSUFBSSxDQUFtQjtRQUUvQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDL0MsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFFBQVEsS0FBVSxDQUFDOzhHQXBDUiwwQkFBMEI7a0dBQTFCLDBCQUEwQix5T0NoQ3ZDLHNuQkFrQkEsOEhEWVksbUJBQW1CLCtJQUFFLGdCQUFnQix1RkFBRSxlQUFlLGlKQUFFLGFBQWEsK0ZBQUUsU0FBUzs7MkZBRS9FLDBCQUEwQjtrQkFSdEMsU0FBUzsrQkFDRSwwQkFBMEIsbUJBR25CLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQLENBQUMsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxTQUFTLENBQUM7MEtBR2xGLE9BQU87c0JBQWYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBS3lCLEtBQUs7c0JBQW5DLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGFibGVDb2x1bW4gfSBmcm9tICcuLi8uLi9jb250cmFjdC90YWJsZS1jb2x1bW4nO1xuaW1wb3J0IHsgRmlsdGVyU3RhdGUgfSBmcm9tICcuLi8uLi8uLi9maWx0ZXIvY29udGFyY3QvZmlsdGVyLXN0YXRlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRldGFMb2NhbGlzYXRpb24gfSBmcm9tICcuLi8uLi8uLi8uLi9sb2NhbGUvdGV0YS1sb2NhbGlzYXRpb24nO1xuaW1wb3J0IHsgVGFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS90YWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IFRldGFDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vbG9jYWxlL3RldGEtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgSURpY3Rpb25hcnkgfSBmcm9tICcuLi8uLi8uLi8uLi9jb21tb24vY29udHJhY3QvaS1kaWN0aW9uYXJ5JztcbmltcG9ydCB7IElJZE5hbWUgfSBmcm9tICcuLi8uLi8uLi8uLi9jb21tb24vY29udHJhY3QvaS1pZC1uYW1lJztcbmltcG9ydCB7IElUcmVlRGF0YSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvbW1vbi9jb250cmFjdC9pLXRyZWUtZGF0YSc7XG5pbXBvcnQgeyBBc3luY1BpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2ljb24vaWNvbi9pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9idXR0b24vYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgVG9vbGJhckNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3Rvb2xiYXIvdG9vbGJhci90b29sYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGaWx0ZXJIb3N0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vZmlsdGVyL2ZpbHRlci1ob3N0L2ZpbHRlci1ob3N0LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RldGEtZmlsdGVyLWRyb3Bkb3duLXRhYicsXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXItZHJvcGRvd24tdGFiLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmlsdGVyLWRyb3Bkb3duLXRhYi5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0ZpbHRlckhvc3RDb21wb25lbnQsIFRvb2xiYXJDb21wb25lbnQsIEJ1dHRvbkNvbXBvbmVudCwgSWNvbkNvbXBvbmVudCwgQXN5bmNQaXBlXSxcbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyRHJvcGRvd25UYWJDb21wb25lbnQ8VD4gaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBjb2x1bW5zOiBJVHJlZURhdGFbXTtcbiAgQElucHV0KCkgY29sdW1uOiBUYWJsZUNvbHVtbjtcbiAgQElucHV0KCkgc3RhdGU6IEZpbHRlclN0YXRlO1xuICBASW5wdXQoKSBkYXRhOiBUW107XG4gIEBJbnB1dCgpIGNsb3NlOiAoKSA9PiB2b2lkO1xuXG4gIGxvY2FsZTogT2JzZXJ2YWJsZTxUZXRhTG9jYWxpc2F0aW9uPjtcbiAgZmlsdGVyT3B0aW9uczogT2JzZXJ2YWJsZTxJRGljdGlvbmFyeTxJSWROYW1lPGFueT5bXT4+O1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZW50ZXInKSBlbnRlcigpIHtcbiAgICB0aGlzLmFwcGx5RmlsdGVyKCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9zdmM6IFRhYmxlU2VydmljZTxUPixcbiAgICBwcml2YXRlIF9jb25maWc6IFRldGFDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICB0aGlzLmxvY2FsZSA9IHRoaXMuX2NvbmZpZy5sb2NhbGU7XG4gICAgdGhpcy5maWx0ZXJPcHRpb25zID0gdGhpcy5fc3ZjLmZpbHRlck9wdGlvbnM7XG4gIH1cblxuICBjbGVhckZpbHRlcigpIHtcbiAgICB0aGlzLl9zdmMuY2xlYXJGaWx0ZXIodGhpcy5jb2x1bW4pO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBhcHBseUZpbHRlcigpIHtcbiAgICB0aGlzLl9zdmMuc2V0U3RhdGUobmV3IEZpbHRlclN0YXRlKHRoaXMuc3RhdGUpKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7fVxufVxuIiwiQGlmIChsb2NhbGUgfCBhc3luYzsgYXMgbG9jKSB7IEBpZiAoZmlsdGVyT3B0aW9ucyB8IGFzeW5jOyBhcyBvcHRpb25zKSB7XG48dGV0YS1maWx0ZXItaG9zdFxuICBbY29sdW1uXT1cImNvbHVtblwiXG4gIFtkYXRhXT1cImRhdGFcIlxuICBbc3RhdGVdPVwic3RhdGVcIlxuICBbZmlsdGVyT3B0aW9uc109XCJvcHRpb25zW2NvbHVtbi5uYW1lXVwiXG4+PC90ZXRhLWZpbHRlci1ob3N0PlxufVxuPHRldGEtdG9vbGJhciBjbGFzcz1cImp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XG4gIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRldGEtYnV0dG9uIFtwYWxldHRlXT1cIid0ZXh0J1wiIFt2aWV3XT1cIidnaG9zdCdcIiAoY2xpY2spPVwiY2xlYXJGaWx0ZXIoKVwiPlxuICAgIHt7IGxvYy5jbGVhciB9fVxuICA8L2J1dHRvbj5cbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGV0YS1idXR0b24gW3BhbGV0dGVdPVwiJ3ByaW1hcnknXCIgKGNsaWNrKT1cImFwcGx5RmlsdGVyKClcIj5cbiAgICA8dGV0YS1pY29uIFtuYW1lXT1cIid0aWNrJ1wiIFtwYWxldHRlXT1cIid3aGl0ZSdcIj48L3RldGEtaWNvbj5cbiAgICB7eyBsb2MuYXBwbHkgfX1cbiAgPC9idXR0b24+XG48L3RldGEtdG9vbGJhcj5cbn1cbiJdfQ==
|
package/esm2022/component/table/table-head/main-dropdown-tab/main-dropdown-tab.component.mjs
CHANGED
|
@@ -66,14 +66,13 @@ export class MainDropdownTabComponent {
|
|
|
66
66
|
autosizeAllColumns() {
|
|
67
67
|
this._svc.autosizeAllColumns(this.headCellElementRef.nativeElement);
|
|
68
68
|
}
|
|
69
|
-
ngOnInit() {
|
|
70
|
-
}
|
|
69
|
+
ngOnInit() { }
|
|
71
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 }); }
|
|
72
|
-
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
|
|
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 } @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()) { @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 } } @if (hasFilteredColumns()) { @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 }); }
|
|
73
72
|
}
|
|
74
73
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: MainDropdownTabComponent, decorators: [{
|
|
75
74
|
type: Component,
|
|
76
|
-
args: [{ selector: 'teta-main-dropdown-tab', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [AsyncPipe], template: "@if (locale | async; as loc) {\n
|
|
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 } @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()) { @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 } } @if (hasFilteredColumns()) { @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"] }]
|
|
77
76
|
}], ctorParameters: () => [{ type: i1.TableService }, { type: i2.TetaConfigService }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }], propDecorators: { columns: [{
|
|
78
77
|
type: Input
|
|
79
78
|
}], column: [{
|
|
@@ -87,4 +86,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImpor
|
|
|
87
86
|
}], headCellElementRef: [{
|
|
88
87
|
type: Input
|
|
89
88
|
}] } });
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi1kcm9wZG93bi10YWIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudC90YWJsZS90YWJsZS1oZWFkL21haW4tZHJvcGRvd24tdGFiL21haW4tZHJvcGRvd24tdGFiLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvdGFibGUvdGFibGUtaGVhZC9tYWluLWRyb3Bkb3duLXRhYi9tYWluLWRyb3Bkb3duLXRhYi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQVMsTUFBTSxlQUFlLENBQUM7QUFDL0csT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3pELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUl4RCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDaEQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBQ2xFLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFVNUMsTUFBTSxPQUFPLHdCQUF3QjtJQVVuQyxZQUFvQixJQUFxQixFQUNyQixPQUEwQixFQUMxQixXQUF1QixFQUN2QixJQUF1QjtRQUh2QixTQUFJLEdBQUosSUFBSSxDQUFpQjtRQUNyQixZQUFPLEdBQVAsT0FBTyxDQUFtQjtRQUMxQixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUN2QixTQUFJLEdBQUosSUFBSSxDQUFtQjtRQUN6QyxJQUFJLENBQUMsTUFB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O3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtUYWJsZVNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2UvdGFibGUuc2VydmljZSc7XG5pbXBvcnQge1RldGFDb25maWdTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9sb2NhbGUvdGV0YS1jb25maWcuc2VydmljZSc7XG5pbXBvcnQge1RhYmxlQ29sdW1ufSBmcm9tICcuLi8uLi9jb250cmFjdC90YWJsZS1jb2x1bW4nO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7VGV0YUxvY2FsaXNhdGlvbn0gZnJvbSAnLi4vLi4vLi4vLi4vbG9jYWxlL3RldGEtbG9jYWxpc2F0aW9uJztcbmltcG9ydCB7U29ydFBhcmFtfSBmcm9tICcuLi8uLi8uLi9maWx0ZXIvY29udGFyY3Qvc29ydC1wYXJhbSc7XG5pbXBvcnQge1N0YXRlVXRpbH0gZnJvbSAnLi4vLi4vdXRpbC9zdGF0ZS11dGlsJztcbmltcG9ydCB7RmlsdGVyU3RhdGV9IGZyb20gJy4uLy4uLy4uL2ZpbHRlci9jb250YXJjdC9maWx0ZXItc3RhdGUnO1xuaW1wb3J0IHtTb3J0RXZlbnR9IGZyb20gJy4uLy4uL2NvbnRyYWN0L3NvcnQtZXZlbnQnO1xuaW1wb3J0IHtJVHJlZURhdGF9IGZyb20gJy4uLy4uLy4uLy4uL2NvbW1vbi9jb250cmFjdC9pLXRyZWUtZGF0YSc7XG5pbXBvcnQgeyBBc3luY1BpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3RldGEtbWFpbi1kcm9wZG93bi10YWInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9tYWluLWRyb3Bkb3duLXRhYi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vbWFpbi1kcm9wZG93bi10YWIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtBc3luY1BpcGVdXG59KVxuZXhwb3J0IGNsYXNzIE1haW5Ecm9wZG93blRhYkNvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGNvbHVtbnM6IElUcmVlRGF0YVtdO1xuICBASW5wdXQoKSBjb2x1bW46IFRhYmxlQ29sdW1uO1xuICBASW5wdXQoKSBzdGF0ZTogRmlsdGVyU3RhdGU7XG4gIEBJbnB1dCgpIGRhdGE6IFRbXTtcbiAgQElucHV0KCkgY2xvc2U6ICgpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIGhlYWRDZWxsRWxlbWVudFJlZjogRWxlbWVudFJlZjtcblxuICBsb2NhbGU6IE9ic2VydmFibGU8VGV0YUxvY2FsaXNhdGlvbj47XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfc3ZjOiBUYWJsZVNlcnZpY2U8VD4sXG4gICAgICAgICAgICAgIHByaXZhdGUgX2NvbmZpZzogVGV0YUNvbmZpZ1NlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICB0aGlzLmxvY2FsZSA9IHRoaXMuX2NvbmZpZy5sb2NhbGU7XG4gIH1cblxuICBnZXQgc29ydFBhcmFtKCk6IFNvcnRQYXJhbSB7XG4gICAgcmV0dXJuIFN0YXRlVXRpbC5nZXRTb3J0U3RhdGUodGhpcy5zdGF0ZSwgdGhpcy5jb2x1bW4pO1xuICB9XG5cbiAgZ2V0IGZpbHRlcmVkKCkge1xuICAgIHJldHVybiBTdGF0ZVV0aWwuaXNDb2x1bW5GaWx0ZXJlZCh0aGlzLnN0YXRlLCB0aGlzLmNvbHVtbik7XG4gIH1cblxuICBnZXQgcGFyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9zdmMuZ2V0Q29sdW1uUGFyZW50KHRoaXMuY29sdW1uKTtcbiAgfVxuXG4gIHBpbkNvbHVtbigpIHtcbiAgICB0aGlzLl9zdmMucGluQ29sdW1uKHRoaXMuY29sdW1uKTtcbiAgfVxuXG4gIHNvcnRBc2MoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLl9zdmMuc29ydEFzYyhuZXcgU29ydEV2ZW50KHRoaXMuY29sdW1uLCBldmVudC5zaGlmdEtleSkpO1xuICB9XG5cbiAgc29ydERlc2MoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLl9zdmMuc29ydERlc2MobmV3IFNvcnRFdmVudCh0aGlzLmNvbHVtbiwgZXZlbnQuc2hpZnRLZXkpKTtcbiAgfVxuXG4gIGNsZWFyU29ydCgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdmMuY2xlYXJTb3J0KHRoaXMuY29sdW1uKTtcbiAgfVxuXG4gIGNsZWFyQWxsU29ydCgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdmMuY2xlYXJBbGxTb3J0KCk7XG4gIH1cblxuICBoYXNGaWx0ZXJlZENvbHVtbnMoKSB7XG4gICAgcmV0dXJuIFN0YXRlVXRpbC5oYXNGaWx0ZXJlZENvbHVtbnModGhpcy5zdGF0ZSk7XG4gIH1cblxuICBoYXNTb3J0ZWRDb2x1bW5zKCkge1xuICAgIHJldHVybiBTdGF0ZVV0aWwuaGFzU29ydGVkQ29sdW1ucyh0aGlzLnN0YXRlKTtcbiAgfVxuXG4gIHJlc3RvcmVEZWZhdWx0Q29sdW1ucygpIHtcbiAgICB0aGlzLl9zdmMucmVzdG9yZURlZmF1bHRDb2x1bW5zKCk7XG4gIH1cblxuICBjbGVhckZpbHRlcigpIHtcbiAgICB0aGlzLl9zdmMuY2xlYXJGaWx0ZXIodGhpcy5jb2x1bW4pO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBjbGVhckFsbEZpbHRlcnMoKSB7XG4gICAgdGhpcy5fc3ZjLmNsZWFyQWxsRmlsdGVycygpO1xuICAgIHRoaXMuY2xvc2UoKVxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGF1dG9zaXplQ29sdW1uKCkge1xuICAgIHRoaXMuX3N2Yy5hdXRvc2l6ZUNvbHVtbih0aGlzLmNvbHVtbiwgdGhpcy5oZWFkQ2VsbEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBhdXRvc2l6ZUFsbENvbHVtbnMoKSB7XG4gICAgdGhpcy5fc3ZjLmF1dG9zaXplQWxsQ29sdW1ucyh0aGlzLmhlYWRDZWxsRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICB9XG59XG4iLCJAaWYgKGxvY2FsZSB8IGFzeW5jOyBhcyBsb2MpIHtcbiAgPGRpdiBjbGFzcz1cImxpc3QgY29sdW1uX2F1dG9cIj5cbiAgICBAaWYgKCFwYXJlbnQpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWl0ZW0gbGlzdC1pdGVtX2ludGVyYWN0aXZlXCJcbiAgICAgICAgKGNsaWNrKT1cInBpbkNvbHVtbigpXCI+XG4gICAgICAgIHt7Y29sdW1uLmxvY2tlZCA/IGxvYy51bnBpbiA6IGxvYy5waW59fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibGlzdC1kaXZpZGVyXCI+PC9kaXY+XG4gICAgfVxuICAgIEBpZiAoY29sdW1uLnNvcnRhYmxlKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwibGlzdC1pdGVtIGxpc3QtaXRlbV9pbnRlcmFjdGl2ZVwiXG4gICAgICAgIChjbGljayk9XCJzb3J0QXNjKCRldmVudClcIj5cbiAgICAgICAge3tsb2Muc29ydEFzY319XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWl0ZW0gbGlzdC1pdGVtX2ludGVyYWN0aXZlXCJcbiAgICAgICAgKGNsaWNrKT1cInNvcnREZXNjKCRldmVudClcIj5cbiAgICAgICAge3tsb2Muc29ydERlc2N9fVxuICAgICAgPC9kaXY+XG4gICAgICBAaWYgKGhhc1NvcnRlZENvbHVtbnMoKSkge1xuICAgICAgICBAaWYgKHNvcnRQYXJhbSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWl0ZW0gbGlzdC1pdGVtX2ludGVyYWN0aXZlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjbGVhclNvcnQoKVwiPlxuICAgICAgICAgICAge3tsb2MuY2xlYXJTb3J0fX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1pdGVtIGxpc3QtaXRlbV9pbnRlcmFjdGl2ZVwiXG4gICAgICAgICAgKGNsaWNrKT1cImNsZWFyQWxsU29ydCgpXCI+XG4gICAgICAgICAge3tsb2MuY2xlYXJBbGxTb3J0fX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWRpdmlkZXJcIj48L2Rpdj5cbiAgICAgIH1cbiAgICB9XG4gICAgQGlmIChoYXNGaWx0ZXJlZENvbHVtbnMoKSkge1xuICAgICAgQGlmIChmaWx0ZXJlZCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1pdGVtIGxpc3QtaXRlbV9pbnRlcmFjdGl2ZVwiXG4gICAgICAgICAgKGNsaWNrKT1cImNsZWFyRmlsdGVyKClcIj5cbiAgICAgICAgICB7e2xvYy5jbGVhckZpbHRlcn19XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgPGRpdiBjbGFzcz1cImxpc3QtaXRlbSBsaXN0LWl0ZW1faW50ZXJhY3RpdmVcIlxuICAgICAgICAoY2xpY2spPVwiY2xlYXJBbGxGaWx0ZXJzKClcIj5cbiAgICAgICAge3tsb2MuY2xlYXJBbGxGaWx0ZXJzfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZGl2aWRlclwiPjwvZGl2PlxuICAgIH1cbiAgICA8ZGl2IGNsYXNzPVwibGlzdC1pdGVtIGxpc3QtaXRlbV9pbnRlcmFjdGl2ZVwiIChjbGljayk9XCJhdXRvc2l6ZUNvbHVtbigpXCI+XG4gICAgICB7e2xvYy5hdXRvc2l6ZUNvbHVtbn19XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImxpc3QtaXRlbSBsaXN0LWl0ZW1faW50ZXJhY3RpdmVcIiAoY2xpY2spPVwiYXV0b3NpemVBbGxDb2x1bW5zKClcIj5cbiAgICAgIHt7bG9jLmF1dG9zaXplQWxsfX1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibGlzdC1kaXZpZGVyXCI+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImxpc3QtaXRlbSBsaXN0LWl0ZW1faW50ZXJhY3RpdmVcIiAoY2xpY2spPVwicmVzdG9yZURlZmF1bHRDb2x1bW5zKClcIj5cbiAgICAgIHt7bG9jLnJlc2V0Q29sdW1uc1NpemV9fVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbn1cbiJdfQ==
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi1kcm9wZG93bi10YWIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudC90YWJsZS90YWJsZS1oZWFkL21haW4tZHJvcGRvd24tdGFiL21haW4tZHJvcGRvd24tdGFiLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvdGFibGUvdGFibGUtaGVhZC9tYWluLWRyb3Bkb3duLXRhYi9tYWluLWRyb3Bkb3duLXRhYi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDakgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUkxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFVNUMsTUFBTSxPQUFPLHdCQUF3QjtJQVVuQyxZQUNVLElBQXFCLEVBQ3JCLE9BQTBCLEVBQzFCLFdBQXVCLEVBQ3ZCLElBQXVCO1FBSHZCLFNBQUksR0FBSixJQUFJLENBQWlCO1FBQ3JCLFlBQU8sR0FBUCxPQUFPLENBQW1CO1FBQzFCLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQ3ZCLFNBQUksR0FBSixJQUFJLENBQW1CO1FBRS9CLElBQUksQ0FBQyxNQUFN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c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvdGFibGUuc2VydmljZSc7XG5pbXBvcnQgeyBUZXRhQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2xvY2FsZS90ZXRhLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uIH0gZnJvbSAnLi4vLi4vY29udHJhY3QvdGFibGUtY29sdW1uJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRldGFMb2NhbGlzYXRpb24gfSBmcm9tICcuLi8uLi8uLi8uLi9sb2NhbGUvdGV0YS1sb2NhbGlzYXRpb24nO1xuaW1wb3J0IHsgU29ydFBhcmFtIH0gZnJvbSAnLi4vLi4vLi4vZmlsdGVyL2NvbnRhcmN0L3NvcnQtcGFyYW0nO1xuaW1wb3J0IHsgU3RhdGVVdGlsIH0gZnJvbSAnLi4vLi4vdXRpbC9zdGF0ZS11dGlsJztcbmltcG9ydCB7IEZpbHRlclN0YXRlIH0gZnJvbSAnLi4vLi4vLi4vZmlsdGVyL2NvbnRhcmN0L2ZpbHRlci1zdGF0ZSc7XG5pbXBvcnQgeyBTb3J0RXZlbnQgfSBmcm9tICcuLi8uLi9jb250cmFjdC9zb3J0LWV2ZW50JztcbmltcG9ydCB7IElUcmVlRGF0YSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvbW1vbi9jb250cmFjdC9pLXRyZWUtZGF0YSc7XG5pbXBvcnQgeyBBc3luY1BpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZXRhLW1haW4tZHJvcGRvd24tdGFiJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21haW4tZHJvcGRvd24tdGFiLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWFpbi1kcm9wZG93bi10YWIuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtBc3luY1BpcGVdLFxufSlcbmV4cG9ydCBjbGFzcyBNYWluRHJvcGRvd25UYWJDb21wb25lbnQ8VD4gaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBjb2x1bW5zOiBJVHJlZURhdGFbXTtcbiAgQElucHV0KCkgY29sdW1uOiBUYWJsZUNvbHVtbjtcbiAgQElucHV0KCkgc3RhdGU6IEZpbHRlclN0YXRlO1xuICBASW5wdXQoKSBkYXRhOiBUW107XG4gIEBJbnB1dCgpIGNsb3NlOiAoKSA9PiB2b2lkO1xuICBASW5wdXQoKSBoZWFkQ2VsbEVsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG5cbiAgbG9jYWxlOiBPYnNlcnZhYmxlPFRldGFMb2NhbGlzYXRpb24+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX3N2YzogVGFibGVTZXJ2aWNlPFQ+LFxuICAgIHByaXZhdGUgX2NvbmZpZzogVGV0YUNvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHRoaXMubG9jYWxlID0gdGhpcy5fY29uZmlnLmxvY2FsZTtcbiAgfVxuXG4gIGdldCBzb3J0UGFyYW0oKTogU29ydFBhcmFtIHtcbiAgICByZXR1cm4gU3RhdGVVdGlsLmdldFNvcnRTdGF0ZSh0aGlzLnN0YXRlLCB0aGlzLmNvbHVtbik7XG4gIH1cblxuICBnZXQgZmlsdGVyZWQoKSB7XG4gICAgcmV0dXJuIFN0YXRlVXRpbC5pc0NvbHVtbkZpbHRlcmVkKHRoaXMuc3RhdGUsIHRoaXMuY29sdW1uKTtcbiAgfVxuXG4gIGdldCBwYXJlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N2Yy5nZXRDb2x1bW5QYXJlbnQodGhpcy5jb2x1bW4pO1xuICB9XG5cbiAgcGluQ29sdW1uKCkge1xuICAgIHRoaXMuX3N2Yy5waW5Db2x1bW4odGhpcy5jb2x1bW4pO1xuICB9XG5cbiAgc29ydEFzYyhldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuX3N2Yy5zb3J0QXNjKG5ldyBTb3J0RXZlbnQodGhpcy5jb2x1bW4sIGV2ZW50LnNoaWZ0S2V5KSk7XG4gIH1cblxuICBzb3J0RGVzYyhldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuX3N2Yy5zb3J0RGVzYyhuZXcgU29ydEV2ZW50KHRoaXMuY29sdW1uLCBldmVudC5zaGlmdEtleSkpO1xuICB9XG5cbiAgY2xlYXJTb3J0KCk6IHZvaWQge1xuICAgIHRoaXMuX3N2Yy5jbGVhclNvcnQodGhpcy5jb2x1bW4pO1xuICB9XG5cbiAgY2xlYXJBbGxTb3J0KCk6IHZvaWQge1xuICAgIHRoaXMuX3N2Yy5jbGVhckFsbFNvcnQoKTtcbiAgfVxuXG4gIGhhc0ZpbHRlcmVkQ29sdW1ucygpIHtcbiAgICByZXR1cm4gU3RhdGVVdGlsLmhhc0ZpbHRlcmVkQ29sdW1ucyh0aGlzLnN0YXRlKTtcbiAgfVxuXG4gIGhhc1NvcnRlZENvbHVtbnMoKSB7XG4gICAgcmV0dXJuIFN0YXRlVXRpbC5oYXNTb3J0ZWRDb2x1bW5zKHRoaXMuc3RhdGUpO1xuICB9XG5cbiAgcmVzdG9yZURlZmF1bHRDb2x1bW5zKCkge1xuICAgIHRoaXMuX3N2Yy5yZXN0b3JlRGVmYXVsdENvbHVtbnMoKTtcbiAgfVxuXG4gIGNsZWFyRmlsdGVyKCkge1xuICAgIHRoaXMuX3N2Yy5jbGVhckZpbHRlcih0aGlzLmNvbHVtbik7XG4gICAgdGhpcy5jbG9zZSgpO1xuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGNsZWFyQWxsRmlsdGVycygpIHtcbiAgICB0aGlzLl9zdmMuY2xlYXJBbGxGaWx0ZXJzKCk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGF1dG9zaXplQ29sdW1uKCkge1xuICAgIHRoaXMuX3N2Yy5hdXRvc2l6ZUNvbHVtbih0aGlzLmNvbHVtbiwgdGhpcy5oZWFkQ2VsbEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBhdXRvc2l6ZUFsbENvbHVtbnMoKSB7XG4gICAgdGhpcy5fc3ZjLmF1dG9zaXplQWxsQ29sdW1ucyh0aGlzLmhlYWRDZWxsRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge31cbn1cbiIsIkBpZiAobG9jYWxlIHwgYXN5bmM7IGFzIGxvYykge1xuPGRpdiBjbGFzcz1cImxpc3QgY29sdW1uX2F1dG9cIj5cbiAgQGlmICghcGFyZW50KSB7XG4gIDxkaXYgY2xhc3M9XCJsaXN0LWl0ZW0gbGlzdC1pdGVtX2ludGVyYWN0aXZlXCIgKGNsaWNrKT1cInBpbkNvbHVtbigpXCI+XG4gICAge3sgY29sdW1uLmxvY2tlZCA/IGxvYy51bnBpbiA6IGxvYy5waW4gfX1cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJsaXN0LWRpdmlkZXJcIj48L2Rpdj5cbiAgfSBAaWYgKGNvbHVtbi5zb3J0YWJsZSkge1xuICA8ZGl2IGNsYXNzPVwibGlzdC1pdGVtIGxpc3QtaXRlbV9pbnRlcmFjdGl2ZVwiIChjbGljayk9XCJzb3J0QXNjKCRldmVudClcIj5cbiAgICB7eyBsb2Muc29ydEFzYyB9fVxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImxpc3QtaXRlbSBsaXN0LWl0ZW1faW50ZXJhY3RpdmVcIiAoY2xpY2spPVwic29ydERlc2MoJGV2ZW50KVwiPlxuICAgIHt7IGxvYy5zb3J0RGVzYyB9fVxuICA8L2Rpdj5cbiAgQGlmIChoYXNTb3J0ZWRDb2x1bW5zKCkpIHsgQGlmIChzb3J0UGFyYW0pIHtcbiAgPGRpdiBjbGFzcz1cImxpc3QtaXRlbSBsaXN0LWl0ZW1faW50ZXJhY3RpdmVcIiAoY2xpY2spPVwiY2xlYXJTb3J0KClcIj5cbiAgICB7eyBsb2MuY2xlYXJTb3J0IH19XG4gIDwvZGl2PlxuICB9XG4gIDxkaXYgY2xhc3M9XCJsaXN0LWl0ZW0gbGlzdC1pdGVtX2ludGVyYWN0aXZlXCIgKGNsaWNrKT1cImNsZWFyQWxsU29ydCgpXCI+XG4gICAge3sgbG9jLmNsZWFyQWxsU29ydCB9fVxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImxpc3QtZGl2aWRlclwiPjwvZGl2PlxuICB9IH0gQGlmIChoYXNGaWx0ZXJlZENvbHVtbnMoKSkgeyBAaWYgKGZpbHRlcmVkKSB7XG4gIDxkaXYgY2xhc3M9XCJsaXN0LWl0ZW0gbGlzdC1pdGVtX2ludGVyYWN0aXZlXCIgKGNsaWNrKT1cImNsZWFyRmlsdGVyKClcIj5cbiAgICB7eyBsb2MuY2xlYXJGaWx0ZXIgfX1cbiAgPC9kaXY+XG4gIH1cbiAgPGRpdiBjbGFzcz1cImxpc3QtaXRlbSBsaXN0LWl0ZW1faW50ZXJhY3RpdmVcIiAoY2xpY2spPVwiY2xlYXJBbGxGaWx0ZXJzKClcIj5cbiAgICB7eyBsb2MuY2xlYXJBbGxGaWx0ZXJzIH19XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwibGlzdC1kaXZpZGVyXCI+PC9kaXY+XG4gIH1cbiAgPGRpdiBjbGFzcz1cImxpc3QtaXRlbSBsaXN0LWl0ZW1faW50ZXJhY3RpdmVcIiAoY2xpY2spPVwiYXV0b3NpemVDb2x1bW4oKVwiPlxuICAgIHt7IGxvYy5hdXRvc2l6ZUNvbHVtbiB9fVxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImxpc3QtaXRlbSBsaXN0LWl0ZW1faW50ZXJhY3RpdmVcIiAoY2xpY2spPVwiYXV0b3NpemVBbGxDb2x1bW5zKClcIj5cbiAgICB7eyBsb2MuYXV0b3NpemVBbGwgfX1cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJsaXN0LWRpdmlkZXJcIj48L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImxpc3QtaXRlbSBsaXN0LWl0ZW1faW50ZXJhY3RpdmVcIiAoY2xpY2spPVwicmVzdG9yZURlZmF1bHRDb2x1bW5zKClcIj5cbiAgICB7eyBsb2MucmVzZXRDb2x1bW5zU2l6ZSB9fVxuICA8L2Rpdj5cbjwvZGl2PlxufVxuIl19
|