@acorex/components 6.5.71 → 6.5.73
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/README.md +6 -2
- package/esm2022/acorex-components.mjs +5 -0
- package/esm2022/index.mjs +158 -0
- package/esm2022/lib/accordion/accordion.component.mjs +45 -0
- package/esm2022/lib/accordion/accordion.module.mjs +20 -0
- package/esm2022/lib/base/base-page.class.mjs +95 -0
- package/esm2022/lib/base/components.class.mjs +17 -0
- package/esm2022/lib/base/element.class.mjs +301 -0
- package/esm2022/lib/base/events.class.mjs +17 -0
- package/esm2022/lib/button/button.component.mjs +74 -0
- package/esm2022/lib/button/button.module.mjs +21 -0
- package/esm2022/lib/calendar/calendar-box/calendar-box.component.mjs +426 -0
- package/esm2022/lib/calendar/calendar-box/calendar-box.module.mjs +22 -0
- package/esm2022/lib/calendar/scheduler/scheduler-views.property.mjs +59 -0
- package/esm2022/lib/calendar/scheduler/scheduler.class.mjs +16 -0
- package/esm2022/lib/calendar/scheduler/scheduler.component.mjs +226 -0
- package/esm2022/lib/calendar/scheduler/scheduler.module.mjs +68 -0
- package/esm2022/lib/calendar/scheduler/toolbars/scheduler-toolbar-navigator.mjs +136 -0
- package/esm2022/lib/calendar/scheduler/toolbars/scheduler-toolbar-views.mjs +37 -0
- package/esm2022/lib/calendar/scheduler/views/agenda/scheduler-agenda-view.component.mjs +49 -0
- package/esm2022/lib/calendar/scheduler/views/daytime/scheduler-daytime-view.component.mjs +102 -0
- package/esm2022/lib/calendar/scheduler/views/month/scheduler-month-view.component.mjs +214 -0
- package/esm2022/lib/calendar/scheduler/views/scheduler-view.component.mjs +99 -0
- package/esm2022/lib/calendar/scheduler/views/timeline/scheduler-timeline-view.component.mjs +85 -0
- package/esm2022/lib/checkbox/checkbox.component.mjs +102 -0
- package/esm2022/lib/checkbox/checkbox.module.mjs +20 -0
- package/esm2022/lib/color-picker/color-box/color-box.component.mjs +423 -0
- package/esm2022/lib/color-picker/color-picker.component.mjs +89 -0
- package/esm2022/lib/color-picker/color-picker.module.mjs +24 -0
- package/esm2022/lib/context-menu/context-menu.component.mjs +68 -0
- package/esm2022/lib/context-menu/context-menu.directive.mjs +146 -0
- package/esm2022/lib/context-menu/context-menu.module.mjs +20 -0
- package/esm2022/lib/data-filter/columns/filter-column-date.component.mjs +140 -0
- package/esm2022/lib/data-filter/columns/filter-column-number.component.mjs +119 -0
- package/esm2022/lib/data-filter/columns/filter-column-selection.component.mjs +75 -0
- package/esm2022/lib/data-filter/columns/filter-column-string.component.mjs +119 -0
- package/esm2022/lib/data-filter/filter-panel/filter-panel.component.mjs +267 -0
- package/esm2022/lib/data-filter/filter.class.mjs +46 -0
- package/esm2022/lib/data-filter/filter.module.mjs +88 -0
- package/esm2022/lib/data-filter/toolbar/filter-toolbar.component.mjs +168 -0
- package/esm2022/lib/data-list/core/data-list.component.mjs +37 -0
- package/esm2022/lib/data-list/list/list.component.mjs +134 -0
- package/esm2022/lib/data-list/list/list.module.mjs +22 -0
- package/esm2022/lib/data-list/list/toolbar-list-view.component.mjs +84 -0
- package/esm2022/lib/data-source/datasource.component.mjs +47 -0
- package/esm2022/lib/data-source/datasource.module.mjs +18 -0
- package/esm2022/lib/data-source/read-param.mjs +7 -0
- package/esm2022/lib/date-picker/date-picker.component.mjs +718 -0
- package/esm2022/lib/date-picker/date-picker.module.mjs +49 -0
- package/esm2022/lib/dialog/dialog.component.mjs +26 -0
- package/esm2022/lib/dialog/dialog.module.mjs +21 -0
- package/esm2022/lib/dialog/dialog.service.mjs +160 -0
- package/esm2022/lib/drawer/content.component.mjs +18 -0
- package/esm2022/lib/drawer/drawer-container.component.mjs +38 -0
- package/esm2022/lib/drawer/drawer.component.mjs +146 -0
- package/esm2022/lib/drawer/drawer.module.mjs +23 -0
- package/esm2022/lib/dropdown/dropdown.component.mjs +186 -0
- package/esm2022/lib/dropdown/dropdown.module.mjs +26 -0
- package/esm2022/lib/fieldset/fieldset.component.mjs +57 -0
- package/esm2022/lib/fieldset/fieldset.module.mjs +19 -0
- package/esm2022/lib/form-group/form-group.component.mjs +37 -0
- package/esm2022/lib/form-group/form-group.module.mjs +21 -0
- package/esm2022/lib/label/label.component.mjs +19 -0
- package/esm2022/lib/label/label.module.mjs +21 -0
- package/esm2022/lib/loading/loading-indicator.component.mjs +18 -0
- package/esm2022/lib/loading/loading-panel.component.mjs +45 -0
- package/esm2022/lib/loading/loading.module.mjs +21 -0
- package/{esm2020 → esm2022}/lib/loading/loading.service.mjs +7 -5
- package/esm2022/lib/menu/menu-item.component.mjs +50 -0
- package/esm2022/lib/menu/menu.component.mjs +98 -0
- package/esm2022/lib/menu/menu.module.mjs +22 -0
- package/esm2022/lib/menu/menu2.component.mjs +100 -0
- package/esm2022/lib/number-box/number-box.component.mjs +628 -0
- package/esm2022/lib/number-box/number-box.module.mjs +21 -0
- package/esm2022/lib/page/content.component.mjs +27 -0
- package/esm2022/lib/page/footer.component.mjs +19 -0
- package/esm2022/lib/page/page.component.mjs +57 -0
- package/esm2022/lib/page/page.module.mjs +22 -0
- package/esm2022/lib/panel-box/panel-box.component.mjs +87 -0
- package/esm2022/lib/panel-box/panel-box.module.mjs +19 -0
- package/esm2022/lib/password-box/password-box.component.mjs +32 -0
- package/esm2022/lib/password-box/password-box.module.mjs +23 -0
- package/esm2022/lib/popover/custom-cdk-overlay.service.mjs +50 -0
- package/esm2022/lib/popover/overlay.service.mjs +94 -0
- package/esm2022/lib/popover/popover.component.mjs +145 -0
- package/esm2022/lib/popover/popover.module.mjs +19 -0
- package/esm2022/lib/popup/popup.component.mjs +159 -0
- package/esm2022/lib/popup/popup.module.mjs +25 -0
- package/esm2022/lib/popup/popup.service.mjs +94 -0
- package/esm2022/lib/progress-bar/progress-bar.component.mjs +16 -0
- package/esm2022/lib/progress-bar/progress-bar.module.mjs +19 -0
- package/esm2022/lib/property-editor/editors/check-editor/check-editor.mjs +65 -0
- package/esm2022/lib/property-editor/editors/check-editor/check.module.mjs +22 -0
- package/esm2022/lib/property-editor/editors/color-editor/color.editor.mjs +41 -0
- package/esm2022/lib/property-editor/editors/color-editor/color.module.mjs +24 -0
- package/esm2022/lib/property-editor/editors/column-editor/column.editor.mjs +118 -0
- package/esm2022/lib/property-editor/editors/column-editor/column.module.mjs +32 -0
- package/esm2022/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.mjs +216 -0
- package/esm2022/lib/property-editor/editors/conditional-color-editor/conditional-color.module.mjs +76 -0
- package/esm2022/lib/property-editor/editors/date-editor/date.editor.mjs +87 -0
- package/esm2022/lib/property-editor/editors/date-editor/date.module.mjs +24 -0
- package/esm2022/lib/property-editor/editors/number-editor/number.editor.mjs +66 -0
- package/esm2022/lib/property-editor/editors/number-editor/number.module.mjs +24 -0
- package/esm2022/lib/property-editor/editors/range-editor/range.editor.mjs +145 -0
- package/esm2022/lib/property-editor/editors/range-editor/range.module.mjs +59 -0
- package/esm2022/lib/property-editor/editors/searchbar-selectbox-editor/searchbar-selectbox-editor.mjs +76 -0
- package/esm2022/lib/property-editor/editors/selectbox-editor/selectbox.editor.mjs +75 -0
- package/esm2022/lib/property-editor/editors/selectbox-editor/selectbox.module.mjs +25 -0
- package/esm2022/lib/property-editor/editors/selection-editor/selection-editor.mjs +73 -0
- package/esm2022/lib/property-editor/editors/selection-editor/selection.module.mjs +22 -0
- package/esm2022/lib/property-editor/editors/switch-editor/number.editor.mjs +30 -0
- package/esm2022/lib/property-editor/editors/switch-editor/number.module.mjs +25 -0
- package/esm2022/lib/property-editor/editors/text-editor/text.editor.mjs +36 -0
- package/esm2022/lib/property-editor/editors/text-editor/text.module.mjs +24 -0
- package/esm2022/lib/property-editor/editors/textarea-editor/textarea.editor.mjs +35 -0
- package/esm2022/lib/property-editor/editors/textarea-editor/textarea.module.mjs +24 -0
- package/esm2022/lib/property-editor/editors/time-editor/time.editor.mjs +47 -0
- package/esm2022/lib/property-editor/editors/time-editor/time.module.mjs +24 -0
- package/esm2022/lib/property-editor/property-editor-renderer.directive.mjs +167 -0
- package/esm2022/lib/property-editor/property-editor.class.mjs +108 -0
- package/esm2022/lib/property-editor/property-editor.module.mjs +194 -0
- package/esm2022/lib/query-builder/query-builder-group.component.mjs +129 -0
- package/esm2022/lib/query-builder/query-builder-popup/query-builder-popup.component.mjs +177 -0
- package/esm2022/lib/query-builder/query-builder-rule.component.mjs +428 -0
- package/esm2022/lib/query-builder/query-builder.class.mjs +42 -0
- package/esm2022/lib/query-builder/query-builder.component.mjs +92 -0
- package/esm2022/lib/query-builder/query-builder.module.mjs +62 -0
- package/esm2022/lib/query-builder/query-builder.service.mjs +199 -0
- package/esm2022/lib/search-bar/search-bar.component.mjs +293 -0
- package/esm2022/lib/search-bar/search-bar.module.mjs +61 -0
- package/esm2022/lib/searchbox/searchbox.component.mjs +105 -0
- package/esm2022/lib/searchbox/searchbox.module.mjs +24 -0
- package/esm2022/lib/selectbox/selectbox.component.mjs +1028 -0
- package/esm2022/lib/selectbox/selectbox.module.mjs +44 -0
- package/esm2022/lib/selectbox/selectbox2.component.mjs +617 -0
- package/esm2022/lib/selection-list/selection-list.component.mjs +113 -0
- package/esm2022/lib/selection-list/selection-list.module.mjs +21 -0
- package/esm2022/lib/switch/switch.component.mjs +55 -0
- package/esm2022/lib/switch/switch.module.mjs +20 -0
- package/esm2022/lib/tab-page/tab-page-Renderer.component.mjs +75 -0
- package/esm2022/lib/tab-page/tab-page-host.component.mjs +124 -0
- package/esm2022/lib/tab-page/tab-page.module.mjs +21 -0
- package/esm2022/lib/tab-page/tab-page.service.mjs +158 -0
- package/esm2022/lib/tab-strip/tab-strip.component.mjs +38 -0
- package/esm2022/lib/tab-strip/tab-strip.module.mjs +19 -0
- package/esm2022/lib/tab-view/dynamic-tabs.directive.mjs +25 -0
- package/esm2022/lib/tab-view/tab-view.component.mjs +110 -0
- package/esm2022/lib/tab-view/tab-view.module.mjs +21 -0
- package/esm2022/lib/tab-view/tab.component.mjs +33 -0
- package/esm2022/lib/textarea/textarea.component.mjs +27 -0
- package/esm2022/lib/textarea/textarea.module.mjs +21 -0
- package/esm2022/lib/textbox/textbox.component.mjs +42 -0
- package/esm2022/lib/textbox/textbox.module.mjs +36 -0
- package/esm2022/lib/time-picker/time-picker.component.mjs +1107 -0
- package/esm2022/lib/time-picker/time-picker.module.mjs +34 -0
- package/esm2022/lib/toast/toast-message/toast-message.component.mjs +76 -0
- package/esm2022/lib/toast/toast-wrapper/toast-wrapper.component.mjs +13 -0
- package/esm2022/lib/toast/toast.module.mjs +21 -0
- package/esm2022/lib/toast/toast.service.mjs +45 -0
- package/esm2022/lib/toolbar/group-button/toolbar-group-button.component.mjs +77 -0
- package/esm2022/lib/toolbar/menu/toolbar-menu.component.mjs +62 -0
- package/esm2022/lib/toolbar/search/toolbar-search.component.mjs +56 -0
- package/esm2022/lib/toolbar/title/toolbar-title.component.mjs +37 -0
- package/esm2022/lib/toolbar/toolbar-item.mjs +4 -0
- package/esm2022/lib/toolbar/toolbar.component.mjs +13 -0
- package/esm2022/lib/toolbar/toolbar.module.mjs +40 -0
- package/esm2022/lib/tooltip/tooltip.directive.mjs +104 -0
- package/esm2022/lib/tooltip/tooltip.module.mjs +19 -0
- package/esm2022/lib/tree-side-menu/tree-side-menu.component.mjs +697 -0
- package/esm2022/lib/tree-side-menu/tree-side-menu.module.mjs +33 -0
- package/esm2022/lib/tree-view/tree-view.component.mjs +854 -0
- package/esm2022/lib/tree-view/tree-view.module.mjs +22 -0
- package/esm2022/lib/upload-file/upload-file.component.mjs +226 -0
- package/esm2022/lib/upload-file/upload-file.events.mjs +2 -0
- package/esm2022/lib/upload-file/upload-file.module.mjs +24 -0
- package/esm2022/lib/validation/validation-form.component.mjs +68 -0
- package/esm2022/lib/validation/validation-rule.widget.mjs +114 -0
- package/esm2022/lib/validation/validation.class.mjs +2 -0
- package/esm2022/lib/validation/validation.component.mjs +89 -0
- package/esm2022/lib/validation/validation.module.mjs +34 -0
- package/{fesm2020 → fesm2022}/acorex-components.mjs +3611 -2674
- package/fesm2022/acorex-components.mjs.map +1 -0
- package/lib/accordion/accordion.component.d.ts +1 -1
- package/lib/base/base-page.class.d.ts +2 -2
- package/lib/base/element.class.d.ts +6 -6
- package/lib/button/button.component.d.ts +1 -1
- package/lib/calendar/calendar-box/calendar-box.component.d.ts +6 -6
- package/lib/calendar/scheduler/scheduler-views.property.d.ts +2 -2
- package/lib/calendar/scheduler/scheduler.class.d.ts +1 -1
- package/lib/calendar/scheduler/scheduler.component.d.ts +1 -1
- package/lib/calendar/scheduler/toolbars/scheduler-toolbar-navigator.d.ts +1 -1
- package/lib/calendar/scheduler/toolbars/scheduler-toolbar-views.d.ts +1 -1
- package/lib/calendar/scheduler/views/agenda/scheduler-agenda-view.component.d.ts +1 -1
- package/lib/calendar/scheduler/views/daytime/scheduler-daytime-view.component.d.ts +1 -1
- package/lib/calendar/scheduler/views/month/scheduler-month-view.component.d.ts +1 -1
- package/lib/calendar/scheduler/views/scheduler-view.component.d.ts +1 -1
- package/lib/calendar/scheduler/views/timeline/scheduler-timeline-view.component.d.ts +1 -1
- package/lib/checkbox/checkbox.component.d.ts +1 -1
- package/lib/color-picker/color-box/color-box.component.d.ts +1 -1
- package/lib/color-picker/color-picker.component.d.ts +1 -1
- package/lib/context-menu/context-menu.component.d.ts +1 -1
- package/lib/context-menu/context-menu.directive.d.ts +3 -3
- package/lib/data-filter/columns/filter-column-date.component.d.ts +1 -1
- package/lib/data-filter/columns/filter-column-number.component.d.ts +1 -1
- package/lib/data-filter/columns/filter-column-selection.component.d.ts +1 -1
- package/lib/data-filter/columns/filter-column-string.component.d.ts +1 -1
- package/lib/data-filter/filter-panel/filter-panel.component.d.ts +1 -1
- package/lib/data-filter/filter.class.d.ts +1 -1
- package/lib/data-filter/toolbar/filter-toolbar.component.d.ts +1 -1
- package/lib/data-list/core/data-list.component.d.ts +1 -1
- package/lib/data-list/list/list.component.d.ts +1 -1
- package/lib/data-list/list/toolbar-list-view.component.d.ts +2 -2
- package/lib/data-source/datasource.component.d.ts +1 -1
- package/lib/date-picker/date-picker.component.d.ts +1 -1
- package/lib/date-picker/date-picker.module.d.ts +2 -2
- package/lib/dialog/dialog.component.d.ts +1 -1
- package/lib/drawer/content.component.d.ts +1 -1
- package/lib/drawer/drawer-container.component.d.ts +1 -1
- package/lib/drawer/drawer.component.d.ts +3 -3
- package/lib/dropdown/dropdown.component.d.ts +1 -1
- package/lib/fieldset/fieldset.component.d.ts +1 -1
- package/lib/form-group/form-group.component.d.ts +1 -1
- package/lib/label/label.component.d.ts +1 -1
- package/lib/loading/loading-indicator.component.d.ts +1 -1
- package/lib/loading/loading-panel.component.d.ts +1 -1
- package/lib/menu/menu-item.component.d.ts +1 -1
- package/lib/menu/menu.component.d.ts +1 -1
- package/lib/menu/menu2.component.d.ts +1 -1
- package/lib/number-box/number-box.component.d.ts +1 -1
- package/lib/page/content.component.d.ts +1 -1
- package/lib/page/footer.component.d.ts +1 -1
- package/lib/page/page.component.d.ts +1 -1
- package/lib/panel-box/panel-box.component.d.ts +1 -1
- package/lib/password-box/password-box.component.d.ts +1 -1
- package/lib/popover/popover.component.d.ts +1 -1
- package/lib/popup/popup.component.d.ts +1 -1
- package/lib/progress-bar/progress-bar.component.d.ts +1 -1
- package/lib/property-editor/editors/check-editor/check-editor.d.ts +1 -1
- package/lib/property-editor/editors/color-editor/color.editor.d.ts +1 -1
- package/lib/property-editor/editors/column-editor/column.editor.d.ts +1 -1
- package/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.d.ts +1 -1
- package/lib/property-editor/editors/date-editor/date.editor.d.ts +1 -1
- package/lib/property-editor/editors/number-editor/number.editor.d.ts +1 -1
- package/lib/property-editor/editors/range-editor/range.editor.d.ts +1 -1
- package/lib/property-editor/editors/searchbar-selectbox-editor/searchbar-selectbox-editor.d.ts +1 -1
- package/lib/property-editor/editors/selectbox-editor/selectbox.editor.d.ts +1 -1
- package/lib/property-editor/editors/selection-editor/selection-editor.d.ts +1 -1
- package/lib/property-editor/editors/switch-editor/number.editor.d.ts +1 -1
- package/lib/property-editor/editors/text-editor/text.editor.d.ts +1 -1
- package/lib/property-editor/editors/textarea-editor/textarea.editor.d.ts +1 -1
- package/lib/property-editor/editors/time-editor/time.editor.d.ts +1 -1
- package/lib/property-editor/property-editor-renderer.directive.d.ts +1 -1
- package/lib/property-editor/property-editor.class.d.ts +3 -3
- package/lib/query-builder/query-builder-group.component.d.ts +1 -1
- package/lib/query-builder/query-builder-popup/query-builder-popup.component.d.ts +1 -1
- package/lib/query-builder/query-builder-rule.component.d.ts +3 -3
- package/lib/query-builder/query-builder.class.d.ts +4 -4
- package/lib/query-builder/query-builder.component.d.ts +1 -1
- package/lib/search-bar/search-bar.component.d.ts +1 -1
- package/lib/searchbox/searchbox.component.d.ts +2 -1
- package/lib/selectbox/selectbox.component.d.ts +2 -1
- package/lib/selectbox/selectbox2.component.d.ts +1 -1
- package/lib/selection-list/selection-list.component.d.ts +2 -2
- package/lib/switch/switch.component.d.ts +1 -1
- package/lib/tab-page/tab-page-Renderer.component.d.ts +1 -1
- package/lib/tab-page/tab-page-host.component.d.ts +1 -1
- package/lib/tab-strip/tab-strip.component.d.ts +1 -1
- package/lib/tab-view/dynamic-tabs.directive.d.ts +1 -1
- package/lib/tab-view/tab-view.component.d.ts +1 -1
- package/lib/tab-view/tab.component.d.ts +1 -1
- package/lib/textarea/textarea.component.d.ts +1 -1
- package/lib/textbox/textbox.component.d.ts +2 -2
- package/lib/textbox/textbox.module.d.ts +2 -2
- package/lib/time-picker/time-picker.component.d.ts +2 -1
- package/lib/time-picker/time-picker.module.d.ts +2 -2
- package/lib/toast/toast-message/toast-message.component.d.ts +1 -1
- package/lib/toast/toast-wrapper/toast-wrapper.component.d.ts +1 -1
- package/lib/toolbar/group-button/toolbar-group-button.component.d.ts +1 -1
- package/lib/toolbar/menu/toolbar-menu.component.d.ts +1 -1
- package/lib/toolbar/search/toolbar-search.component.d.ts +1 -1
- package/lib/toolbar/title/toolbar-title.component.d.ts +1 -1
- package/lib/toolbar/toolbar.component.d.ts +1 -1
- package/lib/tooltip/tooltip.directive.d.ts +1 -1
- package/lib/tree-side-menu/tree-side-menu.component.d.ts +1 -1
- package/lib/tree-view/tree-view.component.d.ts +1 -1
- package/lib/upload-file/upload-file.component.d.ts +2 -2
- package/lib/validation/validation-form.component.d.ts +1 -1
- package/lib/validation/validation-rule.widget.d.ts +1 -1
- package/lib/validation/validation.class.d.ts +1 -1
- package/lib/validation/validation.component.d.ts +1 -1
- package/package.json +15 -20
- package/acorex-components.d.ts +0 -5
- package/esm2020/acorex-components.mjs +0 -5
- package/esm2020/lib/accordion/accordion.component.mjs +0 -44
- package/esm2020/lib/accordion/accordion.module.mjs +0 -20
- package/esm2020/lib/base/base-page.class.mjs +0 -94
- package/esm2020/lib/base/components.class.mjs +0 -17
- package/esm2020/lib/base/element.class.mjs +0 -294
- package/esm2020/lib/base/events.class.mjs +0 -11
- package/esm2020/lib/button/button.component.mjs +0 -71
- package/esm2020/lib/button/button.module.mjs +0 -21
- package/esm2020/lib/calendar/calendar-box/calendar-box.component.mjs +0 -413
- package/esm2020/lib/calendar/calendar-box/calendar-box.module.mjs +0 -22
- package/esm2020/lib/calendar/scheduler/scheduler-views.property.mjs +0 -54
- package/esm2020/lib/calendar/scheduler/scheduler.class.mjs +0 -18
- package/esm2020/lib/calendar/scheduler/scheduler.component.mjs +0 -213
- package/esm2020/lib/calendar/scheduler/scheduler.module.mjs +0 -68
- package/esm2020/lib/calendar/scheduler/toolbars/scheduler-toolbar-navigator.mjs +0 -132
- package/esm2020/lib/calendar/scheduler/toolbars/scheduler-toolbar-views.mjs +0 -37
- package/esm2020/lib/calendar/scheduler/views/agenda/scheduler-agenda-view.component.mjs +0 -47
- package/esm2020/lib/calendar/scheduler/views/daytime/scheduler-daytime-view.component.mjs +0 -95
- package/esm2020/lib/calendar/scheduler/views/month/scheduler-month-view.component.mjs +0 -204
- package/esm2020/lib/calendar/scheduler/views/scheduler-view.component.mjs +0 -99
- package/esm2020/lib/calendar/scheduler/views/timeline/scheduler-timeline-view.component.mjs +0 -77
- package/esm2020/lib/checkbox/checkbox.component.mjs +0 -98
- package/esm2020/lib/checkbox/checkbox.module.mjs +0 -20
- package/esm2020/lib/color-picker/color-box/color-box.component.mjs +0 -422
- package/esm2020/lib/color-picker/color-picker.component.mjs +0 -82
- package/esm2020/lib/color-picker/color-picker.module.mjs +0 -24
- package/esm2020/lib/context-menu/context-menu.component.mjs +0 -65
- package/esm2020/lib/context-menu/context-menu.directive.mjs +0 -135
- package/esm2020/lib/context-menu/context-menu.module.mjs +0 -20
- package/esm2020/lib/data-filter/columns/filter-column-date.component.mjs +0 -138
- package/esm2020/lib/data-filter/columns/filter-column-number.component.mjs +0 -117
- package/esm2020/lib/data-filter/columns/filter-column-selection.component.mjs +0 -74
- package/esm2020/lib/data-filter/columns/filter-column-string.component.mjs +0 -117
- package/esm2020/lib/data-filter/filter-panel/filter-panel.component.mjs +0 -258
- package/esm2020/lib/data-filter/filter.class.mjs +0 -44
- package/esm2020/lib/data-filter/filter.module.mjs +0 -90
- package/esm2020/lib/data-filter/toolbar/filter-toolbar.component.mjs +0 -166
- package/esm2020/lib/data-list/core/data-list.component.mjs +0 -40
- package/esm2020/lib/data-list/list/list.component.mjs +0 -124
- package/esm2020/lib/data-list/list/list.module.mjs +0 -22
- package/esm2020/lib/data-list/list/toolbar-list-view.component.mjs +0 -85
- package/esm2020/lib/data-source/datasource.component.mjs +0 -47
- package/esm2020/lib/data-source/datasource.module.mjs +0 -18
- package/esm2020/lib/data-source/read-param.mjs +0 -5
- package/esm2020/lib/date-picker/date-picker.component.mjs +0 -702
- package/esm2020/lib/date-picker/date-picker.module.mjs +0 -25
- package/esm2020/lib/dialog/dialog.component.mjs +0 -24
- package/esm2020/lib/dialog/dialog.module.mjs +0 -21
- package/esm2020/lib/dialog/dialog.service.mjs +0 -150
- package/esm2020/lib/drawer/content.component.mjs +0 -18
- package/esm2020/lib/drawer/drawer-container.component.mjs +0 -36
- package/esm2020/lib/drawer/drawer.component.mjs +0 -142
- package/esm2020/lib/drawer/drawer.module.mjs +0 -23
- package/esm2020/lib/dropdown/dropdown.component.mjs +0 -176
- package/esm2020/lib/dropdown/dropdown.module.mjs +0 -26
- package/esm2020/lib/fieldset/fieldset.component.mjs +0 -59
- package/esm2020/lib/fieldset/fieldset.module.mjs +0 -19
- package/esm2020/lib/form-group/form-group.component.mjs +0 -34
- package/esm2020/lib/form-group/form-group.module.mjs +0 -21
- package/esm2020/lib/label/label.component.mjs +0 -19
- package/esm2020/lib/label/label.module.mjs +0 -21
- package/esm2020/lib/loading/loading-indicator.component.mjs +0 -17
- package/esm2020/lib/loading/loading-panel.component.mjs +0 -44
- package/esm2020/lib/loading/loading.module.mjs +0 -21
- package/esm2020/lib/menu/menu-item.component.mjs +0 -47
- package/esm2020/lib/menu/menu.component.mjs +0 -86
- package/esm2020/lib/menu/menu.module.mjs +0 -22
- package/esm2020/lib/menu/menu2.component.mjs +0 -96
- package/esm2020/lib/number-box/number-box.component.mjs +0 -622
- package/esm2020/lib/number-box/number-box.module.mjs +0 -21
- package/esm2020/lib/page/content.component.mjs +0 -32
- package/esm2020/lib/page/footer.component.mjs +0 -19
- package/esm2020/lib/page/page.component.mjs +0 -53
- package/esm2020/lib/page/page.module.mjs +0 -22
- package/esm2020/lib/panel-box/panel-box.component.mjs +0 -88
- package/esm2020/lib/panel-box/panel-box.module.mjs +0 -19
- package/esm2020/lib/password-box/password-box.component.mjs +0 -31
- package/esm2020/lib/password-box/password-box.module.mjs +0 -23
- package/esm2020/lib/popover/custom-cdk-overlay.service.mjs +0 -48
- package/esm2020/lib/popover/overlay.service.mjs +0 -91
- package/esm2020/lib/popover/popover.component.mjs +0 -133
- package/esm2020/lib/popover/popover.module.mjs +0 -19
- package/esm2020/lib/popup/popup.component.mjs +0 -147
- package/esm2020/lib/popup/popup.module.mjs +0 -25
- package/esm2020/lib/popup/popup.service.mjs +0 -93
- package/esm2020/lib/progress-bar/progress-bar.component.mjs +0 -19
- package/esm2020/lib/progress-bar/progress-bar.module.mjs +0 -19
- package/esm2020/lib/property-editor/editors/check-editor/check-editor.mjs +0 -61
- package/esm2020/lib/property-editor/editors/check-editor/check.module.mjs +0 -22
- package/esm2020/lib/property-editor/editors/color-editor/color.editor.mjs +0 -38
- package/esm2020/lib/property-editor/editors/color-editor/color.module.mjs +0 -24
- package/esm2020/lib/property-editor/editors/column-editor/column.editor.mjs +0 -115
- package/esm2020/lib/property-editor/editors/column-editor/column.module.mjs +0 -32
- package/esm2020/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.mjs +0 -211
- package/esm2020/lib/property-editor/editors/conditional-color-editor/conditional-color.module.mjs +0 -78
- package/esm2020/lib/property-editor/editors/date-editor/date.editor.mjs +0 -51
- package/esm2020/lib/property-editor/editors/date-editor/date.module.mjs +0 -24
- package/esm2020/lib/property-editor/editors/number-editor/number.editor.mjs +0 -63
- package/esm2020/lib/property-editor/editors/number-editor/number.module.mjs +0 -24
- package/esm2020/lib/property-editor/editors/range-editor/range.editor.mjs +0 -140
- package/esm2020/lib/property-editor/editors/range-editor/range.module.mjs +0 -61
- package/esm2020/lib/property-editor/editors/searchbar-selectbox-editor/searchbar-selectbox-editor.mjs +0 -72
- package/esm2020/lib/property-editor/editors/selectbox-editor/selectbox.editor.mjs +0 -71
- package/esm2020/lib/property-editor/editors/selectbox-editor/selectbox.module.mjs +0 -25
- package/esm2020/lib/property-editor/editors/selection-editor/selection-editor.mjs +0 -69
- package/esm2020/lib/property-editor/editors/selection-editor/selection.module.mjs +0 -22
- package/esm2020/lib/property-editor/editors/switch-editor/number.editor.mjs +0 -29
- package/esm2020/lib/property-editor/editors/switch-editor/number.module.mjs +0 -25
- package/esm2020/lib/property-editor/editors/text-editor/text.editor.mjs +0 -32
- package/esm2020/lib/property-editor/editors/text-editor/text.module.mjs +0 -24
- package/esm2020/lib/property-editor/editors/textarea-editor/textarea.editor.mjs +0 -32
- package/esm2020/lib/property-editor/editors/textarea-editor/textarea.module.mjs +0 -24
- package/esm2020/lib/property-editor/editors/time-editor/time.editor.mjs +0 -43
- package/esm2020/lib/property-editor/editors/time-editor/time.module.mjs +0 -24
- package/esm2020/lib/property-editor/property-editor-renderer.directive.mjs +0 -157
- package/esm2020/lib/property-editor/property-editor.class.mjs +0 -102
- package/esm2020/lib/property-editor/property-editor.module.mjs +0 -196
- package/esm2020/lib/query-builder/query-builder-group.component.mjs +0 -124
- package/esm2020/lib/query-builder/query-builder-popup/query-builder-popup.component.mjs +0 -172
- package/esm2020/lib/query-builder/query-builder-rule.component.mjs +0 -399
- package/esm2020/lib/query-builder/query-builder.class.mjs +0 -20
- package/esm2020/lib/query-builder/query-builder.component.mjs +0 -87
- package/esm2020/lib/query-builder/query-builder.module.mjs +0 -62
- package/esm2020/lib/query-builder/query-builder.service.mjs +0 -197
- package/esm2020/lib/search-bar/search-bar.component.mjs +0 -286
- package/esm2020/lib/search-bar/search-bar.module.mjs +0 -63
- package/esm2020/lib/searchbox/searchbox.component.mjs +0 -79
- package/esm2020/lib/searchbox/searchbox.module.mjs +0 -24
- package/esm2020/lib/selectbox/selectbox.component.mjs +0 -961
- package/esm2020/lib/selectbox/selectbox.module.mjs +0 -44
- package/esm2020/lib/selectbox/selectbox2.component.mjs +0 -574
- package/esm2020/lib/selection-list/selection-list.component.mjs +0 -108
- package/esm2020/lib/selection-list/selection-list.module.mjs +0 -21
- package/esm2020/lib/switch/switch.component.mjs +0 -51
- package/esm2020/lib/switch/switch.module.mjs +0 -20
- package/esm2020/lib/tab-page/tab-page-Renderer.component.mjs +0 -71
- package/esm2020/lib/tab-page/tab-page-host.component.mjs +0 -114
- package/esm2020/lib/tab-page/tab-page.module.mjs +0 -21
- package/esm2020/lib/tab-page/tab-page.service.mjs +0 -160
- package/esm2020/lib/tab-strip/tab-strip.component.mjs +0 -36
- package/esm2020/lib/tab-strip/tab-strip.module.mjs +0 -19
- package/esm2020/lib/tab-view/dynamic-tabs.directive.mjs +0 -24
- package/esm2020/lib/tab-view/tab-view.component.mjs +0 -105
- package/esm2020/lib/tab-view/tab-view.module.mjs +0 -21
- package/esm2020/lib/tab-view/tab.component.mjs +0 -30
- package/esm2020/lib/textarea/textarea.component.mjs +0 -26
- package/esm2020/lib/textarea/textarea.module.mjs +0 -21
- package/esm2020/lib/textbox/textbox.component.mjs +0 -39
- package/esm2020/lib/textbox/textbox.module.mjs +0 -24
- package/esm2020/lib/time-picker/time-picker.component.mjs +0 -943
- package/esm2020/lib/time-picker/time-picker.module.mjs +0 -22
- package/esm2020/lib/toast/toast-message/toast-message.component.mjs +0 -74
- package/esm2020/lib/toast/toast-wrapper/toast-wrapper.component.mjs +0 -13
- package/esm2020/lib/toast/toast.module.mjs +0 -21
- package/esm2020/lib/toast/toast.service.mjs +0 -44
- package/esm2020/lib/toolbar/group-button/toolbar-group-button.component.mjs +0 -78
- package/esm2020/lib/toolbar/menu/toolbar-menu.component.mjs +0 -57
- package/esm2020/lib/toolbar/search/toolbar-search.component.mjs +0 -54
- package/esm2020/lib/toolbar/title/toolbar-title.component.mjs +0 -47
- package/esm2020/lib/toolbar/toolbar-item.mjs +0 -6
- package/esm2020/lib/toolbar/toolbar.component.mjs +0 -13
- package/esm2020/lib/toolbar/toolbar.module.mjs +0 -40
- package/esm2020/lib/tooltip/tooltip.directive.mjs +0 -100
- package/esm2020/lib/tooltip/tooltip.module.mjs +0 -19
- package/esm2020/lib/tree-side-menu/tree-side-menu.component.mjs +0 -646
- package/esm2020/lib/tree-side-menu/tree-side-menu.module.mjs +0 -35
- package/esm2020/lib/tree-view/tree-view.component.mjs +0 -775
- package/esm2020/lib/tree-view/tree-view.module.mjs +0 -22
- package/esm2020/lib/upload-file/upload-file.component.mjs +0 -208
- package/esm2020/lib/upload-file/upload-file.events.mjs +0 -2
- package/esm2020/lib/upload-file/upload-file.module.mjs +0 -24
- package/esm2020/lib/validation/validation-form.component.mjs +0 -65
- package/esm2020/lib/validation/validation-rule.widget.mjs +0 -111
- package/esm2020/lib/validation/validation.class.mjs +0 -2
- package/esm2020/lib/validation/validation.component.mjs +0 -89
- package/esm2020/lib/validation/validation.module.mjs +0 -34
- package/esm2020/public-api.mjs +0 -158
- package/fesm2015/acorex-components.mjs +0 -16012
- package/fesm2015/acorex-components.mjs.map +0 -1
- package/fesm2020/acorex-components.mjs.map +0 -1
- /package/{public-api.d.ts → index.d.ts} +0 -0
@@ -0,0 +1,1028 @@
|
|
1
|
+
import { Component, ViewEncapsulation, ChangeDetectionStrategy, Input, EventEmitter, Output, ViewChild, ChangeDetectorRef, ElementRef, ContentChild, NgZone, TemplateRef, } from '@angular/core';
|
2
|
+
import { Observable } from 'rxjs';
|
3
|
+
import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
|
4
|
+
import { AXTextBoxComponent } from '../textbox/textbox.component';
|
5
|
+
import { AXDropdownComponent } from '../dropdown/dropdown.component';
|
6
|
+
import { AXValidatableComponent, } from '../base/element.class';
|
7
|
+
import { AXDataSourceComponent } from '../data-source/datasource.component';
|
8
|
+
import { AXValidation } from '../validation/validation.component';
|
9
|
+
import { AXBaseEvent } from '../base/events.class';
|
10
|
+
import { AXSearchBoxComponent } from '../searchbox/searchbox.component';
|
11
|
+
import { AXConfig } from '@acorex/core';
|
12
|
+
import { differenceBy } from 'lodash';
|
13
|
+
import * as i0 from "@angular/core";
|
14
|
+
import * as i1 from "@angular/common";
|
15
|
+
import * as i2 from "../dropdown/dropdown.component";
|
16
|
+
import * as i3 from "../textbox/textbox.component";
|
17
|
+
import * as i4 from "@acorex/core";
|
18
|
+
import * as i5 from "../checkbox/checkbox.component";
|
19
|
+
import * as i6 from "../searchbox/searchbox.component";
|
20
|
+
export class AXSelectBoxSelectionChangedEvent extends AXBaseEvent {
|
21
|
+
selectedItems;
|
22
|
+
selectedValues;
|
23
|
+
constructor(component, selectedItems, selectedValues) {
|
24
|
+
super();
|
25
|
+
this.selectedItems = selectedItems;
|
26
|
+
this.selectedValues = selectedValues;
|
27
|
+
this.component = component;
|
28
|
+
}
|
29
|
+
}
|
30
|
+
export class AXSelectBoxComponent extends AXValidatableComponent {
|
31
|
+
cdr;
|
32
|
+
ref;
|
33
|
+
zone;
|
34
|
+
showDropDownButton = true;
|
35
|
+
rowTemplate;
|
36
|
+
rowInputTemplate;
|
37
|
+
span;
|
38
|
+
textbox;
|
39
|
+
listContainer;
|
40
|
+
serchBox;
|
41
|
+
textBoxSelectBox;
|
42
|
+
showCheckBox = true;
|
43
|
+
readonly = false;
|
44
|
+
rtl = AXConfig.get('layout.rtl');
|
45
|
+
disabled = false;
|
46
|
+
placeholder;
|
47
|
+
size = 'md';
|
48
|
+
allowNull = true;
|
49
|
+
textAlign = null;
|
50
|
+
bufferSize = 20;
|
51
|
+
remoteOperation = false;
|
52
|
+
fitParent = true;
|
53
|
+
dropdownWidth = '300px';
|
54
|
+
dropdownToggle = new EventEmitter();
|
55
|
+
// this input is Private and only use in LOV
|
56
|
+
onDemandTranslate = false;
|
57
|
+
currentfocusedIndex = -1;
|
58
|
+
showLoading = false;
|
59
|
+
skip = -1;
|
60
|
+
searchText = '';
|
61
|
+
// @Input()
|
62
|
+
// chipsWidth: string = '';
|
63
|
+
text = '';
|
64
|
+
totalCount = 0;
|
65
|
+
_contentDataSource;
|
66
|
+
_dataSource;
|
67
|
+
get dataSource() {
|
68
|
+
return this._dataSource ? this._dataSource : this._contentDataSource;
|
69
|
+
}
|
70
|
+
set dataSource(v) {
|
71
|
+
this._dataSource = v;
|
72
|
+
}
|
73
|
+
_contentValidation;
|
74
|
+
_validation;
|
75
|
+
get validation() {
|
76
|
+
return this._validation ? this._validation : this._contentValidation;
|
77
|
+
}
|
78
|
+
set validation(v) {
|
79
|
+
this._validation = v;
|
80
|
+
}
|
81
|
+
constructor(cdr, ref, zone) {
|
82
|
+
super();
|
83
|
+
this.cdr = cdr;
|
84
|
+
this.ref = ref;
|
85
|
+
this.zone = zone;
|
86
|
+
}
|
87
|
+
dropdown;
|
88
|
+
disabledCallback;
|
89
|
+
allowSearch = true;
|
90
|
+
textField = 'text';
|
91
|
+
valueField = 'value';
|
92
|
+
disabledField = 'disabled';
|
93
|
+
mode = 'single';
|
94
|
+
itemRemove = false;
|
95
|
+
itemsChange = new EventEmitter();
|
96
|
+
onBlur = new EventEmitter();
|
97
|
+
onFocus = new EventEmitter();
|
98
|
+
_items = [];
|
99
|
+
get items() {
|
100
|
+
return this._items;
|
101
|
+
}
|
102
|
+
set items(v) {
|
103
|
+
this._items = v;
|
104
|
+
if (this.itemsChange) {
|
105
|
+
this.itemsChange.emit(v);
|
106
|
+
}
|
107
|
+
if (this.itemsStatusObserver) {
|
108
|
+
this.itemsStatusObserver.next(this.items.length);
|
109
|
+
}
|
110
|
+
}
|
111
|
+
hasSelectedValue = false;
|
112
|
+
itemsFiltered = [];
|
113
|
+
// #endregion
|
114
|
+
dropDownDisabled = false;
|
115
|
+
selectionChanged = new EventEmitter();
|
116
|
+
selectedItemsChange = new EventEmitter();
|
117
|
+
_selectedItems = [];
|
118
|
+
get selectedItems() {
|
119
|
+
return this._selectedItems || [];
|
120
|
+
}
|
121
|
+
set selectedItems(v) {
|
122
|
+
this.setSelectedItemsChange(v);
|
123
|
+
// if (!v) {
|
124
|
+
// v = [];
|
125
|
+
// }
|
126
|
+
// const old = this.selectedItems;
|
127
|
+
// if (JSON.stringify(old) !== JSON.stringify(v)) {
|
128
|
+
// this._selectedItems = this.mode == 'single' ? v.slice(0, 1) : [...new Set(v)]; //[...new Set(v[0])] : [...new Set(v)];
|
129
|
+
// this._selectedItems.forEach((c) => (c.selected = true));
|
130
|
+
// this.selectedItemsChange.emit(this._selectedItems);
|
131
|
+
// this.selectedValuesChange.emit(this.selectedValues);
|
132
|
+
// this.clearValidationStyle(this.ref.nativeElement);
|
133
|
+
// this.waitForData(() => {
|
134
|
+
// if (this._selectedItems) {
|
135
|
+
// this.items.forEach((c) => (c.selected = this._selectedItems.some((i) => i[this.valueField] == c[this.valueField])));
|
136
|
+
// }
|
137
|
+
// });
|
138
|
+
// }
|
139
|
+
}
|
140
|
+
setSelectedItemsChange(v, old = this.selectedItems) {
|
141
|
+
if (!v) {
|
142
|
+
v = [];
|
143
|
+
}
|
144
|
+
// const old = this.selectedItems;
|
145
|
+
var f = differenceBy(old, v, this.valueField);
|
146
|
+
var s = differenceBy(v, old, this.valueField);
|
147
|
+
// if (JSON.stringify(old) !== JSON.stringify(v)) {
|
148
|
+
if (f.length != 0 || s.length != 0) {
|
149
|
+
this._selectedItems =
|
150
|
+
this.mode == 'single' ? v.slice(0, 1) : [...new Set(v)]; //[...new Set(v[0])] : [...new Set(v)];
|
151
|
+
this._selectedItems.forEach((c) => (c.selected = true));
|
152
|
+
this.selectedItemsChange.emit(this._selectedItems);
|
153
|
+
this.selectedValuesChange.emit(this.selectedValues);
|
154
|
+
this.clearValidationStyle(this.ref.nativeElement);
|
155
|
+
this.waitForData(() => {
|
156
|
+
if (this._selectedItems) {
|
157
|
+
this.items.forEach((c) => (c.selected = this._selectedItems.some((i) => i[this.valueField] == c[this.valueField])));
|
158
|
+
}
|
159
|
+
});
|
160
|
+
}
|
161
|
+
}
|
162
|
+
ngOnInit() {
|
163
|
+
if (this.rowTemplate === undefined && this.rowInputTemplate != undefined) {
|
164
|
+
this.rowTemplate = this.rowInputTemplate;
|
165
|
+
}
|
166
|
+
if (this.rtl == null) {
|
167
|
+
this.rtl =
|
168
|
+
window
|
169
|
+
.getComputedStyle(this.ref.nativeElement, null)
|
170
|
+
.getPropertyValue('direction') === 'rtl';
|
171
|
+
}
|
172
|
+
}
|
173
|
+
scrolled(e) {
|
174
|
+
if (this.remoteOperation &&
|
175
|
+
this.totalCount > this.items.length &&
|
176
|
+
this.listContainer.nativeElement.scrollHeight != 0 &&
|
177
|
+
this.listContainer.nativeElement.scrollHeight -
|
178
|
+
this.listContainer.nativeElement.scrollTop -
|
179
|
+
300 <
|
180
|
+
50) {
|
181
|
+
if (this.skip !== this.items.length) {
|
182
|
+
this.showLoading = true;
|
183
|
+
this.skip = this.items.length;
|
184
|
+
const params = {};
|
185
|
+
params.skip = this.items.length;
|
186
|
+
params.take = this.bufferSize; //* (Math.floor(this.items.length / this.bufferSize) + 1);
|
187
|
+
if (this.textbox) {
|
188
|
+
params.searchText = this.text;
|
189
|
+
}
|
190
|
+
else {
|
191
|
+
params.searchText = null;
|
192
|
+
}
|
193
|
+
this.fetch(params);
|
194
|
+
}
|
195
|
+
}
|
196
|
+
}
|
197
|
+
setSelectedItems(v, isUserInput) {
|
198
|
+
let changed = false;
|
199
|
+
if (isUserInput) {
|
200
|
+
changed = JSON.stringify(v) !== JSON.stringify(this.selectedItems);
|
201
|
+
}
|
202
|
+
this.selectedItems = v;
|
203
|
+
this.setSelectedIndex();
|
204
|
+
if (isUserInput && changed) {
|
205
|
+
this.emitSelectionChangedEvent();
|
206
|
+
}
|
207
|
+
}
|
208
|
+
searchChangeObserver;
|
209
|
+
delay = 500;
|
210
|
+
textChanged(e) {
|
211
|
+
if ((e.value === null || e.value === undefined || e.value === '') &&
|
212
|
+
(e.oldValue === null || e.oldValue === undefined || e.oldValue === '')) {
|
213
|
+
}
|
214
|
+
else {
|
215
|
+
this.currentfocusedIndex = -1;
|
216
|
+
if (this.remoteOperation) {
|
217
|
+
this.searchText = this.text;
|
218
|
+
// this.searchText = e.value;
|
219
|
+
// this.text = e.value;
|
220
|
+
// this.items = [];
|
221
|
+
if (this.items) {
|
222
|
+
let t = this.items.length;
|
223
|
+
for (let i = 0; i < t; i++) {
|
224
|
+
this.items.pop();
|
225
|
+
}
|
226
|
+
}
|
227
|
+
// this.items.forEach((element) => {
|
228
|
+
// this.items.pop();
|
229
|
+
// });
|
230
|
+
const params = {};
|
231
|
+
params.searchText = this.text;
|
232
|
+
// params.searchText = e.value;
|
233
|
+
params.skip = 0;
|
234
|
+
params.take = this.bufferSize;
|
235
|
+
this.fetch(params);
|
236
|
+
}
|
237
|
+
}
|
238
|
+
}
|
239
|
+
isItemDisabled(item) {
|
240
|
+
if (item[this.disabledField] == true) {
|
241
|
+
return true;
|
242
|
+
}
|
243
|
+
else if (this.disabledCallback) {
|
244
|
+
return this.disabledCallback({ item, index: -1 });
|
245
|
+
}
|
246
|
+
else {
|
247
|
+
return false;
|
248
|
+
}
|
249
|
+
}
|
250
|
+
onButtonClick(e) { }
|
251
|
+
setSelectedIndex(sign = null) {
|
252
|
+
if (sign == null) {
|
253
|
+
if (!this.remoteOperation && this.text && this.text !== '') {
|
254
|
+
this.currentfocusedIndex = this.items
|
255
|
+
.filter((c) => c[this.textField]
|
256
|
+
.toLowerCase()
|
257
|
+
.includes(this.text.toLowerCase()))
|
258
|
+
.indexOf(this.selectedItems[this.selectedItems.length - 1]);
|
259
|
+
}
|
260
|
+
else {
|
261
|
+
this.currentfocusedIndex = this.items.indexOf(this.selectedItems[this.selectedItems.length - 1]);
|
262
|
+
}
|
263
|
+
}
|
264
|
+
else {
|
265
|
+
sign === -1 ? this.currentfocusedIndex-- : this.currentfocusedIndex++;
|
266
|
+
}
|
267
|
+
if (this.remoteOperation) {
|
268
|
+
this.itemsFiltered = this.items;
|
269
|
+
}
|
270
|
+
else {
|
271
|
+
this.itemsFiltered = this.text
|
272
|
+
? this.items.filter((c) => c[this.textField]
|
273
|
+
.toLowerCase()
|
274
|
+
.includes(this.text.toLowerCase()))
|
275
|
+
: this.items;
|
276
|
+
}
|
277
|
+
this.currentfocusedIndex =
|
278
|
+
this.currentfocusedIndex < 0
|
279
|
+
? 0
|
280
|
+
: this.currentfocusedIndex >= this.itemsFiltered.length
|
281
|
+
? this.itemsFiltered.length - 1
|
282
|
+
: this.currentfocusedIndex;
|
283
|
+
//
|
284
|
+
// set scroll
|
285
|
+
if (this.listContainer) {
|
286
|
+
this.zone.runOutsideAngular(() => {
|
287
|
+
const itemDiv = this.listContainer.nativeElement.querySelector(`.list-item:nth-child(${this.currentfocusedIndex})`);
|
288
|
+
if (itemDiv) {
|
289
|
+
itemDiv.scrollIntoView({ behavior: 'smooth' });
|
290
|
+
}
|
291
|
+
});
|
292
|
+
}
|
293
|
+
}
|
294
|
+
selectedValuesChange = new EventEmitter();
|
295
|
+
get selectedValues() {
|
296
|
+
if (this.mode === 'single') {
|
297
|
+
return this._selectedItems.map((c) => c[this.valueField])[0];
|
298
|
+
}
|
299
|
+
else {
|
300
|
+
return this._selectedItems.map((c) => c[this.valueField]) || [];
|
301
|
+
}
|
302
|
+
}
|
303
|
+
set selectedValues(v) {
|
304
|
+
if (this.compareSelectedValues(v)) {
|
305
|
+
return;
|
306
|
+
}
|
307
|
+
if (v == null) {
|
308
|
+
this.selectedItems = [];
|
309
|
+
}
|
310
|
+
else {
|
311
|
+
if (v !== undefined) {
|
312
|
+
if (v != [] && v != '' && v != null) {
|
313
|
+
this.hasSelectedValue = true;
|
314
|
+
}
|
315
|
+
this.waitForData(() => {
|
316
|
+
if (this.mode === 'single') {
|
317
|
+
if (this.items.filter((c) => v == c[this.valueField])) {
|
318
|
+
this.selectedItems = this.items.filter((c) => v == c[this.valueField]);
|
319
|
+
}
|
320
|
+
else {
|
321
|
+
this.selectedItems = [];
|
322
|
+
}
|
323
|
+
}
|
324
|
+
else {
|
325
|
+
if (Array.isArray(v)) {
|
326
|
+
if (this.selectedItems.length > v.length) {
|
327
|
+
this.selectedItems = this.selectedItems.filter((c) => v.includes(c[this.valueField]));
|
328
|
+
}
|
329
|
+
else {
|
330
|
+
let addId = [];
|
331
|
+
v.forEach((vId) => {
|
332
|
+
addId.push({
|
333
|
+
[this.valueField]: vId,
|
334
|
+
});
|
335
|
+
});
|
336
|
+
let newId = differenceBy(addId, this.selectedItems, this.valueField);
|
337
|
+
let vv = [];
|
338
|
+
newId.forEach((rc) => {
|
339
|
+
vv.push(rc[this.valueField]);
|
340
|
+
});
|
341
|
+
this.items
|
342
|
+
.filter((c) => vv.includes(c[this.valueField]))
|
343
|
+
.forEach((res) => {
|
344
|
+
this.selectedItems.push(res);
|
345
|
+
});
|
346
|
+
// this.selectedItems.push(this.items.filter((c) => vv.includes(c[this.valueField])));
|
347
|
+
this.setSelectedItemsChange(this.selectedItems, vv.length > 0 ? [1] : this.selectedItems);
|
348
|
+
}
|
349
|
+
// this.selectedItems = this.items.filter((c) => v.includes(c[this.valueField]));
|
350
|
+
}
|
351
|
+
else if (v) {
|
352
|
+
this.selectedItems = this.items.filter((c) => v === c[this.valueField]);
|
353
|
+
}
|
354
|
+
else {
|
355
|
+
this.selectedItems = [];
|
356
|
+
}
|
357
|
+
}
|
358
|
+
this.selectedValuesChange.emit(this.selectedValues);
|
359
|
+
this.cdr.markForCheck();
|
360
|
+
this.cdr.detectChanges();
|
361
|
+
});
|
362
|
+
}
|
363
|
+
}
|
364
|
+
}
|
365
|
+
compareSelectedValues(newValue) {
|
366
|
+
const currentValue = this.selectedValues;
|
367
|
+
return ((currentValue == null && newValue == null) ||
|
368
|
+
JSON.stringify(currentValue) === JSON.stringify(newValue));
|
369
|
+
}
|
370
|
+
setSelectedValues(v, isUserInput) {
|
371
|
+
const changed = isUserInput ? !this.compareSelectedValues(v) : false;
|
372
|
+
this.selectedValues = v;
|
373
|
+
if (isUserInput && changed) {
|
374
|
+
this.emitSelectionChangedEvent();
|
375
|
+
}
|
376
|
+
}
|
377
|
+
emitSelectionChangedEvent() {
|
378
|
+
this.selectedValuesChange.emit(this.selectedValues);
|
379
|
+
this.selectionChanged.emit(new AXSelectBoxSelectionChangedEvent(this, this.selectedItems, this.selectedValues));
|
380
|
+
}
|
381
|
+
ngAfterViewInit() {
|
382
|
+
if (this.bufferSize < 10) {
|
383
|
+
this.bufferSize = 10;
|
384
|
+
}
|
385
|
+
if (this.mode == 'single') {
|
386
|
+
this.showCheckBox = false;
|
387
|
+
}
|
388
|
+
else {
|
389
|
+
this.showCheckBox = true;
|
390
|
+
}
|
391
|
+
if (!this.remoteOperation ||
|
392
|
+
(this.remoteOperation && this.hasSelectedValue)) {
|
393
|
+
this.refresh();
|
394
|
+
}
|
395
|
+
}
|
396
|
+
dropdownToggleSelecBox(e) {
|
397
|
+
this.text = '';
|
398
|
+
if (this.dropdown.isOpen) {
|
399
|
+
this.refresh();
|
400
|
+
setTimeout(() => {
|
401
|
+
if (this.serchBox) {
|
402
|
+
this.serchBox.focus();
|
403
|
+
}
|
404
|
+
}, 1);
|
405
|
+
}
|
406
|
+
else {
|
407
|
+
// this.refresh();
|
408
|
+
}
|
409
|
+
this.dropdownToggle.emit(e);
|
410
|
+
}
|
411
|
+
ngAfterContentInit() {
|
412
|
+
// if (!this.allowSearch) {
|
413
|
+
// if (this.readonly == false) {
|
414
|
+
// this.itemRemove = true;
|
415
|
+
// this.readonly = true;
|
416
|
+
// }
|
417
|
+
// }
|
418
|
+
this.initValidation(this.ref, 'selectedItems', this.validation);
|
419
|
+
if (this.dataSource) {
|
420
|
+
// if (this.allowSearch == false) {
|
421
|
+
// this.fetch();
|
422
|
+
// }
|
423
|
+
this.dataSource.onDataReceived.subscribe((c) => {
|
424
|
+
this.showLoading = false;
|
425
|
+
this.dataReceived(c.data.result);
|
426
|
+
});
|
427
|
+
}
|
428
|
+
this.cdr.markForCheck();
|
429
|
+
this.cdr.detectChanges();
|
430
|
+
}
|
431
|
+
dataReceived(data) {
|
432
|
+
if (this.remoteOperation) {
|
433
|
+
if (this.searchText &&
|
434
|
+
this.searchText != null &&
|
435
|
+
this.searchText !== '') {
|
436
|
+
if (data.totalCount) {
|
437
|
+
if (this.items.length == 0) {
|
438
|
+
//this.items = data.items;
|
439
|
+
data.items.forEach((item) => {
|
440
|
+
this.items.push(item);
|
441
|
+
});
|
442
|
+
}
|
443
|
+
else {
|
444
|
+
data.items.forEach((item) => {
|
445
|
+
this.items.push(item);
|
446
|
+
});
|
447
|
+
// if (this.itemsStatusObserver) {
|
448
|
+
// this.itemsStatusObserver.next(this.items.length);
|
449
|
+
// }
|
450
|
+
}
|
451
|
+
this.totalCount = data.totalCount;
|
452
|
+
}
|
453
|
+
else {
|
454
|
+
if (this.items.length == 0) {
|
455
|
+
this.items = data.items;
|
456
|
+
}
|
457
|
+
else {
|
458
|
+
data.items.forEach((item) => {
|
459
|
+
this.items.push(item);
|
460
|
+
});
|
461
|
+
// if (this.itemsStatusObserver) {
|
462
|
+
// this.itemsStatusObserver.next(this.items.length);
|
463
|
+
// }
|
464
|
+
}
|
465
|
+
this.totalCount = data.items == undefined ? 0 : data.items.length;
|
466
|
+
}
|
467
|
+
}
|
468
|
+
else if (data.items && data.items.length === data.totalCount) {
|
469
|
+
this.items = data.items;
|
470
|
+
this.totalCount = data.items.length;
|
471
|
+
}
|
472
|
+
else if (data.totalCount) {
|
473
|
+
data.items.forEach((elm) => {
|
474
|
+
this.items.push(elm);
|
475
|
+
});
|
476
|
+
// if (this.itemsStatusObserver) {
|
477
|
+
// this.itemsStatusObserver.next(this.items.length);
|
478
|
+
// }
|
479
|
+
this.totalCount = data.totalCount;
|
480
|
+
}
|
481
|
+
else {
|
482
|
+
data.forEach((elm) => {
|
483
|
+
this.items.push(elm);
|
484
|
+
// if (this.itemsStatusObserver) {
|
485
|
+
// this.itemsStatusObserver.next(this.items.length);
|
486
|
+
// }
|
487
|
+
});
|
488
|
+
this.totalCount = data.length;
|
489
|
+
}
|
490
|
+
}
|
491
|
+
else {
|
492
|
+
this.items = data;
|
493
|
+
}
|
494
|
+
this.cdr.markForCheck();
|
495
|
+
this.cdr.detectChanges();
|
496
|
+
this.dropdown.updatePosition();
|
497
|
+
}
|
498
|
+
// private params: AXDataSourceReadParams = {};
|
499
|
+
fetch(params = {}) {
|
500
|
+
// this.params = params;
|
501
|
+
if (this.dataSource) {
|
502
|
+
this.showLoading = true;
|
503
|
+
this.dataSource.fetch(params);
|
504
|
+
}
|
505
|
+
}
|
506
|
+
refresh() {
|
507
|
+
const params = {};
|
508
|
+
if (this.remoteOperation) {
|
509
|
+
params.skip = 0;
|
510
|
+
this.skip = 0;
|
511
|
+
params.take = this.bufferSize;
|
512
|
+
}
|
513
|
+
if (this.dataSource != undefined) {
|
514
|
+
// this.items = [];
|
515
|
+
// this.items.forEach((element) => {
|
516
|
+
// this.items.pop();
|
517
|
+
// });
|
518
|
+
if (this.items) {
|
519
|
+
let t = this.items.length;
|
520
|
+
for (let i = 0; i < t; i++) {
|
521
|
+
this.items.pop();
|
522
|
+
}
|
523
|
+
}
|
524
|
+
this.fetch(params);
|
525
|
+
}
|
526
|
+
}
|
527
|
+
handleItemRemoveClick(item) {
|
528
|
+
if (this.mode === 'single') {
|
529
|
+
// this.selectedItems = null;
|
530
|
+
this.setSelectedValues(null, true);
|
531
|
+
// this.selectedItemsChange.emit(this._selectedItems);
|
532
|
+
// this.clearValidationStyle(this.ref.nativeElement);
|
533
|
+
}
|
534
|
+
else {
|
535
|
+
// this.selectedItems = this.selectedItems.filter((c) => c !== item);
|
536
|
+
this.setSelectedItems(this.selectedItems.filter((c) => c[this.valueField] !== item[this.valueField]), true);
|
537
|
+
// this._selectedItems = this._selectedItems.filter(c => c !== item);
|
538
|
+
// this.selectedItemsChange.emit(this._selectedItems);
|
539
|
+
// this.clearValidationStyle(this.ref.nativeElement);
|
540
|
+
}
|
541
|
+
// this.text = '';
|
542
|
+
this.validate();
|
543
|
+
this.cdr.markForCheck();
|
544
|
+
}
|
545
|
+
onFocusTextBox(e) { }
|
546
|
+
onTextBoxClick(e) {
|
547
|
+
if (this.disabled == false && this.readonly == false) {
|
548
|
+
this.dropdown.open();
|
549
|
+
}
|
550
|
+
}
|
551
|
+
handleItemClick(e, item) {
|
552
|
+
if (this.isItemDisabled(item) == false) {
|
553
|
+
const value = item[this.valueField];
|
554
|
+
if (this.mode === 'single') {
|
555
|
+
// this.selectedValues = value;
|
556
|
+
this.setSelectedValues(value, true);
|
557
|
+
}
|
558
|
+
else {
|
559
|
+
const exists = this.selectedValues.slice(0);
|
560
|
+
if (exists.includes(value)) {
|
561
|
+
if (this.allowNull == true ||
|
562
|
+
(this.allowNull == false && this.selectedItems.length > 1)) {
|
563
|
+
this.handleItemRemoveClick(item);
|
564
|
+
}
|
565
|
+
}
|
566
|
+
else {
|
567
|
+
exists.push(value);
|
568
|
+
// this.selectedValues = exists;
|
569
|
+
this.setSelectedValues(exists, true);
|
570
|
+
}
|
571
|
+
}
|
572
|
+
if (this.mode == 'single') {
|
573
|
+
this.text = '';
|
574
|
+
this.dropdown.close();
|
575
|
+
this.cdr.markForCheck();
|
576
|
+
}
|
577
|
+
// if (e.stopPropagation() == undefined) {
|
578
|
+
// e.stopPropagation();
|
579
|
+
// }
|
580
|
+
setTimeout(() => {
|
581
|
+
if (this.serchBox) {
|
582
|
+
this.serchBox.focus();
|
583
|
+
}
|
584
|
+
}, 0);
|
585
|
+
}
|
586
|
+
e.stopPropagation();
|
587
|
+
}
|
588
|
+
handleKeyEventSearch(e) {
|
589
|
+
if (this.disabled || this.readonly) {
|
590
|
+
this.dropdown.close();
|
591
|
+
setTimeout(() => {
|
592
|
+
this.textBoxSelectBox.focus();
|
593
|
+
}, 0);
|
594
|
+
return false;
|
595
|
+
}
|
596
|
+
if (e.key === 'Escape') {
|
597
|
+
this.text = null;
|
598
|
+
setTimeout(() => {
|
599
|
+
this.textBoxSelectBox.focus();
|
600
|
+
}, 0);
|
601
|
+
}
|
602
|
+
if ((e.key === 'ArrowDown' || e.key === 'ArrowUp') &&
|
603
|
+
this.getItems().length > 0 &&
|
604
|
+
e.type === 'keydown') {
|
605
|
+
if (this.mode === 'single') {
|
606
|
+
this.currentfocusedIndex =
|
607
|
+
this.currentfocusedIndex + (e.key === 'ArrowDown' ? 1 : -1);
|
608
|
+
this.selectedItemByIndex(this.currentfocusedIndex);
|
609
|
+
}
|
610
|
+
else {
|
611
|
+
if (this.dropdown.isOpen) {
|
612
|
+
this.setSelectedIndex(e.key === 'ArrowDown' ? 1 : -1);
|
613
|
+
}
|
614
|
+
else {
|
615
|
+
this.dropdown.open();
|
616
|
+
setTimeout(() => {
|
617
|
+
if (this.serchBox) {
|
618
|
+
this.serchBox.focus();
|
619
|
+
}
|
620
|
+
}, 0);
|
621
|
+
}
|
622
|
+
}
|
623
|
+
}
|
624
|
+
// if (e.key == 'Enter' && this.dropdown.isOpen && this.mode == 'single') {
|
625
|
+
// this.dropdown.close();
|
626
|
+
// setTimeout(() => {
|
627
|
+
// this.dropdown.focus();
|
628
|
+
// }, 0);
|
629
|
+
// }
|
630
|
+
//e.stopPropagation();
|
631
|
+
//e.preventDefault();
|
632
|
+
e.stopImmediatePropagation();
|
633
|
+
if (e.type === 'keydown' && e.key == 'Enter' && this.dropdown.isOpen) {
|
634
|
+
if (!this.remoteOperation && this.text && this.text !== '') {
|
635
|
+
this.itemsFiltered = this.items.filter((c) => c[this.textField]
|
636
|
+
.toLowerCase()
|
637
|
+
.includes(this.text.toLowerCase()));
|
638
|
+
if (this.itemsFiltered.length === 1) {
|
639
|
+
this.currentfocusedIndex = 0;
|
640
|
+
}
|
641
|
+
}
|
642
|
+
else {
|
643
|
+
this.itemsFiltered = this.items;
|
644
|
+
}
|
645
|
+
if (this.selectedItems.filter((c) => c[this.valueField] ===
|
646
|
+
this.itemsFiltered[this.currentfocusedIndex][this.valueField]).length > 0 &&
|
647
|
+
this.mode == 'multiple') {
|
648
|
+
if (this.allowNull == true ||
|
649
|
+
(this.allowNull == false && this.selectedItems.length > 1)) {
|
650
|
+
if (!this.remoteOperation && this.text && this.text !== '') {
|
651
|
+
this.selectedItems = this.selectedItems.filter((c) => c !==
|
652
|
+
this.items.filter((c) => c[this.textField]
|
653
|
+
.toLowerCase()
|
654
|
+
.includes(this.text.toLowerCase()))[this.currentfocusedIndex]);
|
655
|
+
}
|
656
|
+
else {
|
657
|
+
this.selectedItems = this.selectedItems.filter((c) => c[this.valueField] !==
|
658
|
+
this.items[this.currentfocusedIndex][this.valueField]);
|
659
|
+
}
|
660
|
+
this.emitSelectionChangedEvent();
|
661
|
+
}
|
662
|
+
}
|
663
|
+
else {
|
664
|
+
if (this.mode == 'multiple') {
|
665
|
+
if (this.currentfocusedIndex != -1) {
|
666
|
+
if (!this.remoteOperation && this.text && this.text !== '') {
|
667
|
+
if (this.itemsFiltered.length === 1) {
|
668
|
+
this.selectedItems.push(this.itemsFiltered[0]);
|
669
|
+
}
|
670
|
+
else {
|
671
|
+
this.selectedItems.push(this.itemsFiltered[this.currentfocusedIndex]);
|
672
|
+
}
|
673
|
+
}
|
674
|
+
else {
|
675
|
+
this.selectedItems.push(this.items[this.currentfocusedIndex]);
|
676
|
+
}
|
677
|
+
this.emitSelectionChangedEvent();
|
678
|
+
}
|
679
|
+
}
|
680
|
+
else {
|
681
|
+
if (this.text && this.itemsFiltered?.length === 1) {
|
682
|
+
this.setSelectedItems(this.itemsFiltered, true);
|
683
|
+
}
|
684
|
+
if (this.mode == 'single') {
|
685
|
+
this.dropdown.close();
|
686
|
+
setTimeout(() => {
|
687
|
+
this.textBoxSelectBox.focus();
|
688
|
+
}, 0);
|
689
|
+
}
|
690
|
+
}
|
691
|
+
}
|
692
|
+
e.stopPropagation();
|
693
|
+
e.preventDefault();
|
694
|
+
e.stopImmediatePropagation();
|
695
|
+
}
|
696
|
+
this.cdr.markForCheck();
|
697
|
+
}
|
698
|
+
isChar(str) {
|
699
|
+
if (str.includes('Shift') ||
|
700
|
+
str.includes('Tab') ||
|
701
|
+
str.includes('Control') ||
|
702
|
+
str.includes('Alt') ||
|
703
|
+
str.includes('CapsLock') ||
|
704
|
+
str.includes('Meta') ||
|
705
|
+
str.includes('ContextMenu') ||
|
706
|
+
str.includes('Enter') ||
|
707
|
+
str.includes('Backspace') ||
|
708
|
+
str.includes('PrintScreen') ||
|
709
|
+
str.includes('ScrollLock') ||
|
710
|
+
str.includes('Pause') ||
|
711
|
+
str.includes('Home') ||
|
712
|
+
str.includes('End') ||
|
713
|
+
str.includes('Insert') ||
|
714
|
+
str.includes('PageUp') ||
|
715
|
+
str.includes('Delete') ||
|
716
|
+
str.includes('PageDown') ||
|
717
|
+
str.includes('NumLock') ||
|
718
|
+
str.includes('Escape') ||
|
719
|
+
str.includes('Arrow') ||
|
720
|
+
str.includes('ّF1') ||
|
721
|
+
str.includes('F2') ||
|
722
|
+
str.includes('F3') ||
|
723
|
+
str.includes('F4') ||
|
724
|
+
str.includes('F5') ||
|
725
|
+
str.includes('F6') ||
|
726
|
+
str.includes('F7') ||
|
727
|
+
str.includes('F8') ||
|
728
|
+
str.includes('F9') ||
|
729
|
+
str.includes('F10') ||
|
730
|
+
str.includes('F11') ||
|
731
|
+
str.includes('F12')) {
|
732
|
+
return false;
|
733
|
+
}
|
734
|
+
else {
|
735
|
+
return true;
|
736
|
+
}
|
737
|
+
}
|
738
|
+
handleKeyEvent(e) {
|
739
|
+
// const NumberMinusPattern = /[a-zA-Z0-9\-]/g;
|
740
|
+
// const Farsi = /[پچجحخهعغفقثصضشسیبلاتنمکگوئدذرزطظژؤإأءًٌٍَُِّ\s]+$/;
|
741
|
+
// const inputChar = String.fromCharCode(e.charCode);
|
742
|
+
// const patternEn = /^[a-zA-Z0-9]*$/;
|
743
|
+
// const pattern = /^[\u0600-\u06FF\s]+$/;
|
744
|
+
const inputChar = e.key;
|
745
|
+
if ((inputChar != 'Backspace' &&
|
746
|
+
inputChar != 'Backspace' &&
|
747
|
+
inputChar != 'Tab' &&
|
748
|
+
inputChar != 'Enter' &&
|
749
|
+
inputChar != 'Escape' &&
|
750
|
+
inputChar != 'ArrowDown' &&
|
751
|
+
inputChar != 'ArrowUp') ||
|
752
|
+
e.code === 'Space' ||
|
753
|
+
e.ctrlKey == true) {
|
754
|
+
e.preventDefault();
|
755
|
+
}
|
756
|
+
if (e.key === 'Backspace' &&
|
757
|
+
e.type === 'keydown' &&
|
758
|
+
((this.allowNull === true && this.selectedItems.length > 0) ||
|
759
|
+
(this.allowNull === false && this.selectedItems.length > 1))) {
|
760
|
+
this.selectedItems.pop();
|
761
|
+
this.emitSelectionChangedEvent();
|
762
|
+
}
|
763
|
+
if (this.disabled || this.readonly) {
|
764
|
+
this.dropdown.close();
|
765
|
+
setTimeout(() => {
|
766
|
+
this.textBoxSelectBox.focus();
|
767
|
+
}, 0);
|
768
|
+
return false;
|
769
|
+
}
|
770
|
+
const INPUT = String.fromCharCode(e.keyCode);
|
771
|
+
if (this.isChar(e.key) && this.allowSearch && e.ctrlKey == false) {
|
772
|
+
this.dropdown.open();
|
773
|
+
setTimeout(() => {
|
774
|
+
if (this.serchBox) {
|
775
|
+
this.serchBox.focus();
|
776
|
+
}
|
777
|
+
}, 0);
|
778
|
+
this.text = e.key;
|
779
|
+
}
|
780
|
+
if (e.key === 'Escape') {
|
781
|
+
this.text = null;
|
782
|
+
this.dropdown.close();
|
783
|
+
setTimeout(() => {
|
784
|
+
this.textBoxSelectBox.focus();
|
785
|
+
}, 0);
|
786
|
+
}
|
787
|
+
if ((e.key === 'ArrowDown' || e.key === 'ArrowUp') &&
|
788
|
+
this.getItems().length > 0 &&
|
789
|
+
e.type === 'keydown') {
|
790
|
+
if (this.mode === 'single') {
|
791
|
+
this.selectedItemByIndex(this.currentfocusedIndex + (e.key === 'ArrowDown' ? 1 : -1));
|
792
|
+
}
|
793
|
+
else {
|
794
|
+
if (this.dropdown.isOpen) {
|
795
|
+
// this.setSelectedIndex((e.key === 'ArrowDown' ? 1 : -1));
|
796
|
+
if (this.allowSearch == false) {
|
797
|
+
this.setSelectedIndex(e.key === 'ArrowDown' ? 1 : -1);
|
798
|
+
}
|
799
|
+
else {
|
800
|
+
setTimeout(() => {
|
801
|
+
if (this.serchBox) {
|
802
|
+
this.serchBox.focus();
|
803
|
+
}
|
804
|
+
}, 0);
|
805
|
+
}
|
806
|
+
}
|
807
|
+
else {
|
808
|
+
this.dropdown.open();
|
809
|
+
if (this.allowSearch == true) {
|
810
|
+
setTimeout(() => {
|
811
|
+
if (this.serchBox) {
|
812
|
+
this.serchBox.focus();
|
813
|
+
}
|
814
|
+
}, 0);
|
815
|
+
}
|
816
|
+
}
|
817
|
+
}
|
818
|
+
}
|
819
|
+
if (this.allowSearch === false) {
|
820
|
+
if (e.type === 'keydown' && e.key == 'Enter' && this.dropdown.isOpen) {
|
821
|
+
e.stopImmediatePropagation();
|
822
|
+
if (this.selectedItems.filter((c) => c[this.valueField] ===
|
823
|
+
this.itemsFiltered[this.currentfocusedIndex][this.valueField]).length > 0 &&
|
824
|
+
this.mode == 'multiple') {
|
825
|
+
if (this.allowNull == true ||
|
826
|
+
(this.allowNull == false && this.selectedItems.length > 1)) {
|
827
|
+
if (!this.remoteOperation && this.text && this.text !== '') {
|
828
|
+
this.selectedItems = this.selectedItems.filter((c) => c !==
|
829
|
+
this.items.filter((c) => c[this.textField]
|
830
|
+
.toLowerCase()
|
831
|
+
.includes(this.text.toLowerCase()))[this.currentfocusedIndex]);
|
832
|
+
}
|
833
|
+
else {
|
834
|
+
this.selectedItems = this.selectedItems.filter((c) => c[this.valueField] !==
|
835
|
+
this.items[this.currentfocusedIndex][this.valueField]);
|
836
|
+
}
|
837
|
+
this.emitSelectionChangedEvent();
|
838
|
+
}
|
839
|
+
}
|
840
|
+
else {
|
841
|
+
if (this.mode == 'multiple') {
|
842
|
+
if (this.currentfocusedIndex != -1) {
|
843
|
+
if (!this.remoteOperation && this.text && this.text !== '') {
|
844
|
+
if (this.itemsFiltered.length === 1) {
|
845
|
+
this.selectedItems.push(this.itemsFiltered[0]);
|
846
|
+
}
|
847
|
+
else {
|
848
|
+
this.selectedItems.push(this.itemsFiltered[this.currentfocusedIndex]);
|
849
|
+
}
|
850
|
+
}
|
851
|
+
else {
|
852
|
+
this.selectedItems.push(this.items[this.currentfocusedIndex]);
|
853
|
+
}
|
854
|
+
this.emitSelectionChangedEvent();
|
855
|
+
}
|
856
|
+
}
|
857
|
+
else {
|
858
|
+
if (this.text && this.itemsFiltered.length === 1) {
|
859
|
+
this.setSelectedItems(this.itemsFiltered, true);
|
860
|
+
}
|
861
|
+
if (this.mode == 'single') {
|
862
|
+
this.dropdown.close();
|
863
|
+
setTimeout(() => {
|
864
|
+
this.textBoxSelectBox.focus();
|
865
|
+
}, 0);
|
866
|
+
}
|
867
|
+
}
|
868
|
+
}
|
869
|
+
}
|
870
|
+
}
|
871
|
+
this.cdr.markForCheck();
|
872
|
+
}
|
873
|
+
focus() {
|
874
|
+
this.textbox.focus();
|
875
|
+
}
|
876
|
+
selectedItemByIndex(index) {
|
877
|
+
let item = [];
|
878
|
+
if (!this.remoteOperation && this.text && this.text !== '') {
|
879
|
+
this.itemsFiltered = this.items.filter((c) => c[this.textField]
|
880
|
+
.toLowerCase()
|
881
|
+
.includes(this.text.toLowerCase()));
|
882
|
+
item = this.itemsFiltered[index];
|
883
|
+
}
|
884
|
+
else {
|
885
|
+
item = this.items[index];
|
886
|
+
}
|
887
|
+
//
|
888
|
+
// const item = this.text ? this.items.filter((c) => (c[this.textField] as string).toLowerCase().includes(this.text.toLowerCase()))[index] : this.items[index];
|
889
|
+
if (item) {
|
890
|
+
this.setSelectedItems([item], true);
|
891
|
+
}
|
892
|
+
this.setSelectedIndex();
|
893
|
+
}
|
894
|
+
getItems() {
|
895
|
+
if (this.items == null) {
|
896
|
+
return [];
|
897
|
+
}
|
898
|
+
return !this.remoteOperation && this.text && this.text !== ''
|
899
|
+
? this.items.filter((c) => c[this.textField]
|
900
|
+
.toLowerCase()
|
901
|
+
.includes(this.text.toLowerCase()))
|
902
|
+
: this.items;
|
903
|
+
}
|
904
|
+
isItemSelected(item) {
|
905
|
+
return (this.selectedItems &&
|
906
|
+
this.selectedItems.filter((c) => c[this.valueField] === item[this.valueField]).length > 0);
|
907
|
+
}
|
908
|
+
itemsStatusObserver;
|
909
|
+
waitForData(callbackfn) {
|
910
|
+
if (this.items && this.items.length) {
|
911
|
+
callbackfn();
|
912
|
+
}
|
913
|
+
else if (!this.itemsStatusObserver) {
|
914
|
+
Observable.create((observer) => {
|
915
|
+
this.itemsStatusObserver = observer;
|
916
|
+
})
|
917
|
+
.pipe(debounceTime(100))
|
918
|
+
.pipe(distinctUntilChanged())
|
919
|
+
.subscribe((c) => {
|
920
|
+
callbackfn();
|
921
|
+
});
|
922
|
+
}
|
923
|
+
}
|
924
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AXSelectBoxComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
925
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AXSelectBoxComponent, selector: "ax-select-box", inputs: { showDropDownButton: "showDropDownButton", rowInputTemplate: "rowInputTemplate", showCheckBox: "showCheckBox", readonly: "readonly", rtl: "rtl", disabled: "disabled", placeholder: "placeholder", size: "size", allowNull: "allowNull", textAlign: "textAlign", bufferSize: "bufferSize", remoteOperation: "remoteOperation", fitParent: "fitParent", dropdownWidth: "dropdownWidth", onDemandTranslate: "onDemandTranslate", dataSource: "dataSource", validation: "validation", disabledCallback: "disabledCallback", allowSearch: "allowSearch", textField: "textField", valueField: "valueField", disabledField: "disabledField", mode: "mode", items: "items", selectedItems: "selectedItems", selectedValues: "selectedValues" }, outputs: { dropdownToggle: "dropdownToggle", itemsChange: "itemsChange", onBlur: "onBlur", onFocus: "onFocus", selectionChanged: "selectionChanged", selectedItemsChange: "selectedItemsChange", selectedValuesChange: "selectedValuesChange" }, host: { styleAttribute: "width: 100%" }, providers: [
|
926
|
+
{ provide: AXValidatableComponent, useExisting: AXSelectBoxComponent },
|
927
|
+
], queries: [{ propertyName: "rowTemplate", first: true, predicate: TemplateRef, descendants: true, static: true }, { propertyName: "_contentDataSource", first: true, predicate: AXDataSourceComponent, descendants: true, static: true }, { propertyName: "_contentValidation", first: true, predicate: AXValidation, descendants: true, static: true }], viewQueries: [{ propertyName: "span", first: true, predicate: AXTextBoxComponent, descendants: true, static: true }, { propertyName: "textbox", first: true, predicate: AXTextBoxComponent, descendants: true, static: true }, { propertyName: "listContainer", first: true, predicate: ["listContainer"], descendants: true, static: true }, { propertyName: "serchBox", first: true, predicate: ["serchBox"], descendants: true }, { propertyName: "textBoxSelectBox", first: true, predicate: ["textBoxSelectBox"], descendants: true, static: true }, { propertyName: "dropdown", first: true, predicate: ["d"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ax-drop-down #d [size]=\"size\" [fitParent]=\"fitParent\" [dropdownWidth]=\"dropdownWidth\" [rtl]=\"rtl\"\n [showDropDownButton]=\"showDropDownButton\" [disabled]=\"disabled\" [readonly]=\"readonly\"\n (dropdownToggle)=\"dropdownToggleSelecBox($event)\">\n <ng-container start>\n <ng-content select=\"[start]\">\n </ng-content>\n </ng-container>\n <ng-container header>\n <div class=\"ax chips-container\" [horizontalScroll]=\"40\">\n <div class=\"chips\" [class.chips-blank]=\"mode === 'single'\" [title]=\"item[textField]\"\n *ngFor=\"let item of selectedItems\">\n <span class=\"chips-text\"\n [ngStyle]=\"{'width': item[textField].length > 15 && this.mode ==='multiple' ? '110px' : 'auto'}\">\n {{ item[textField] }}\n </span>\n <span class=\"close-icon\" (click)=\"handleItemRemoveClick(item)\"\n *ngIf=\"(readonly!=true || itemRemove ==true)&& disabled!=true && (allowNull==true || (selectedItems.length > 1))\">\n <i class=\"far fa-times close\"></i>\n </span>\n </div>\n <div class=\"search-wrapper\" (click)=\"onTextBoxClick($event)\">\n <ax-text-box #textBoxSelectBox [textAlign]=\"textAlign\"\n [placeholder]=\"selectedItems.length == 0 ? placeholder : ''\" [readonly]=\"readonly\"\n [disabled]=\"disabled\" (onkey)=\"handleKeyEvent($event)\" [size]=\"size\"\n (onFocus)=\"onFocusTextBox($event)\">\n </ax-text-box>\n </div>\n </div>\n </ng-container>\n <ng-container end>\n <ng-content select=\"[end]\">\n </ng-content>\n </ng-container>\n\n <ng-container panel>\n <div *ngIf=\"allowSearch\" class=\"search-wrapper\" style=\"padding: 0.7em;\">\n <ax-search-box #serchBox [onDemandTranslate]=\"onDemandTranslate\" [(value)]=\"text\" (onkey)=\"handleKeyEventSearch($event)\"\n (textChanged)=\"textChanged($event)\" (onButtonClick)=\"textChanged($event)\">\n </ax-search-box>\n </div>\n <div class=\"ax list-container\">\n <div #listContainer class=\"list-container-items\" (scroll)=\"scrolled($event)\">\n <ng-container *ngIf=\"getItems().length>0; then thenTemplate; else elseTemplate\"></ng-container>\n <ng-template #thenTemplate>\n <div [class.ax-state-disabled]=\"isItemDisabled(item)\" class=\"list-item\"\n *ngFor=\"let item of getItems();let i = index\" [class.focused]=\"i==currentfocusedIndex\"\n [class.selected]=\"isItemSelected(item)\" (click)=\"handleItemClick($event,item)\">\n <div style=\"display: flex;\">\n <ax-check-box *ngIf=\"showCheckBox\" [size]=\"size\" [value]=\"isItemSelected(item)\"\n [disabled]=\"(!allowNull && selectedItems.length === 1 && isItemSelected(item)) || isItemDisabled(item)\"\n (onClick)=\"handleItemClick($event,item)\">\n </ax-check-box>\n <ng-container *ngIf=\"rowTemplate; else elseTemplate\">\n <div style=\"white-space: nowrap;text-overflow: ellipsis;overflow: hidden;flex: 1;\"\n [title]=\"item[textField]\"\n [ngStyle]=\"(showCheckBox) ? {'padding-inline-start': '0.5rem'}:''\">\n <ng-container *ngTemplateOutlet=\"rowTemplate; context:{ $implicit: item }\">\n </ng-container>\n </div>\n\n </ng-container>\n <ng-template #elseTemplate>\n <div style=\"white-space: nowrap;text-overflow: ellipsis;overflow: hidden;flex: 1;\"\n [title]=\"item[textField]\"\n [ngStyle]=\"(showCheckBox) ? {'padding-inline-start': '0.5rem'}:''\">\n {{ item[textField] }}\n </div>\n </ng-template>\n\n </div>\n\n </div>\n\n </ng-template>\n <div *ngIf=\"showLoading\" class=\"ax-pad-sm\" style=\"text-align: center;\">\n <i class=\"far fa-spinner-third fa-pulse fa-2x\" style=\"color: var(--ax-primary-color);\"></i>\n\n </div>\n <!-- <ax-loading-indicator ></ax-loading-indicator> -->\n <ng-template #elseTemplate>\n <ng-container *ngIf=\"showLoading == true; then searchTemplate else noDataTemplate\"></ng-container>\n <ng-template #searchTemplate>\n <div class=\"list-item\">\n {{'common.search' | trans}}\n </div>\n </ng-template>\n <ng-template #noDataTemplate>\n <div class=\"list-item\">\n {{'common.noDataFound' | trans}}\n </div>\n </ng-template>\n\n </ng-template>\n\n </div>\n\n </div>\n </ng-container>\n\n</ax-drop-down>", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.AXDropdownComponent, selector: "ax-drop-down", inputs: ["rtl", "readonly", "loading", "dropdownWidth"], outputs: ["dropdownToggle", "onButtonClick"] }, { kind: "component", type: i3.AXTextBoxComponent, selector: "ax-text-box", inputs: ["mask", "showMask", "type", "maxLength", "maskGuid", "maskPlaceholder", "maskKeepCharPositions"] }, { kind: "directive", type: i4.AXHorizontalScrollDirective, selector: "[horizontalScroll]", inputs: ["horizontalScroll"] }, { kind: "component", type: i5.AXCheckBoxComponent, selector: "ax-check-box", inputs: ["readonly", "disabled", "size", "label", "tabIndex", "indeterminate", "value"], outputs: ["onValueChanged", "valueChange", "onClick"] }, { kind: "component", type: i6.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["placeholder", "onDemandTranslate", "text", "delay"], outputs: ["textChanged", "onButtonClick"] }, { kind: "pipe", type: i4.AXTranslatorPipe, name: "trans" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
928
|
+
}
|
929
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AXSelectBoxComponent, decorators: [{
|
930
|
+
type: Component,
|
931
|
+
args: [{ selector: 'ax-select-box', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: { style: 'width: 100%' }, providers: [
|
932
|
+
{ provide: AXValidatableComponent, useExisting: AXSelectBoxComponent },
|
933
|
+
], template: "<ax-drop-down #d [size]=\"size\" [fitParent]=\"fitParent\" [dropdownWidth]=\"dropdownWidth\" [rtl]=\"rtl\"\n [showDropDownButton]=\"showDropDownButton\" [disabled]=\"disabled\" [readonly]=\"readonly\"\n (dropdownToggle)=\"dropdownToggleSelecBox($event)\">\n <ng-container start>\n <ng-content select=\"[start]\">\n </ng-content>\n </ng-container>\n <ng-container header>\n <div class=\"ax chips-container\" [horizontalScroll]=\"40\">\n <div class=\"chips\" [class.chips-blank]=\"mode === 'single'\" [title]=\"item[textField]\"\n *ngFor=\"let item of selectedItems\">\n <span class=\"chips-text\"\n [ngStyle]=\"{'width': item[textField].length > 15 && this.mode ==='multiple' ? '110px' : 'auto'}\">\n {{ item[textField] }}\n </span>\n <span class=\"close-icon\" (click)=\"handleItemRemoveClick(item)\"\n *ngIf=\"(readonly!=true || itemRemove ==true)&& disabled!=true && (allowNull==true || (selectedItems.length > 1))\">\n <i class=\"far fa-times close\"></i>\n </span>\n </div>\n <div class=\"search-wrapper\" (click)=\"onTextBoxClick($event)\">\n <ax-text-box #textBoxSelectBox [textAlign]=\"textAlign\"\n [placeholder]=\"selectedItems.length == 0 ? placeholder : ''\" [readonly]=\"readonly\"\n [disabled]=\"disabled\" (onkey)=\"handleKeyEvent($event)\" [size]=\"size\"\n (onFocus)=\"onFocusTextBox($event)\">\n </ax-text-box>\n </div>\n </div>\n </ng-container>\n <ng-container end>\n <ng-content select=\"[end]\">\n </ng-content>\n </ng-container>\n\n <ng-container panel>\n <div *ngIf=\"allowSearch\" class=\"search-wrapper\" style=\"padding: 0.7em;\">\n <ax-search-box #serchBox [onDemandTranslate]=\"onDemandTranslate\" [(value)]=\"text\" (onkey)=\"handleKeyEventSearch($event)\"\n (textChanged)=\"textChanged($event)\" (onButtonClick)=\"textChanged($event)\">\n </ax-search-box>\n </div>\n <div class=\"ax list-container\">\n <div #listContainer class=\"list-container-items\" (scroll)=\"scrolled($event)\">\n <ng-container *ngIf=\"getItems().length>0; then thenTemplate; else elseTemplate\"></ng-container>\n <ng-template #thenTemplate>\n <div [class.ax-state-disabled]=\"isItemDisabled(item)\" class=\"list-item\"\n *ngFor=\"let item of getItems();let i = index\" [class.focused]=\"i==currentfocusedIndex\"\n [class.selected]=\"isItemSelected(item)\" (click)=\"handleItemClick($event,item)\">\n <div style=\"display: flex;\">\n <ax-check-box *ngIf=\"showCheckBox\" [size]=\"size\" [value]=\"isItemSelected(item)\"\n [disabled]=\"(!allowNull && selectedItems.length === 1 && isItemSelected(item)) || isItemDisabled(item)\"\n (onClick)=\"handleItemClick($event,item)\">\n </ax-check-box>\n <ng-container *ngIf=\"rowTemplate; else elseTemplate\">\n <div style=\"white-space: nowrap;text-overflow: ellipsis;overflow: hidden;flex: 1;\"\n [title]=\"item[textField]\"\n [ngStyle]=\"(showCheckBox) ? {'padding-inline-start': '0.5rem'}:''\">\n <ng-container *ngTemplateOutlet=\"rowTemplate; context:{ $implicit: item }\">\n </ng-container>\n </div>\n\n </ng-container>\n <ng-template #elseTemplate>\n <div style=\"white-space: nowrap;text-overflow: ellipsis;overflow: hidden;flex: 1;\"\n [title]=\"item[textField]\"\n [ngStyle]=\"(showCheckBox) ? {'padding-inline-start': '0.5rem'}:''\">\n {{ item[textField] }}\n </div>\n </ng-template>\n\n </div>\n\n </div>\n\n </ng-template>\n <div *ngIf=\"showLoading\" class=\"ax-pad-sm\" style=\"text-align: center;\">\n <i class=\"far fa-spinner-third fa-pulse fa-2x\" style=\"color: var(--ax-primary-color);\"></i>\n\n </div>\n <!-- <ax-loading-indicator ></ax-loading-indicator> -->\n <ng-template #elseTemplate>\n <ng-container *ngIf=\"showLoading == true; then searchTemplate else noDataTemplate\"></ng-container>\n <ng-template #searchTemplate>\n <div class=\"list-item\">\n {{'common.search' | trans}}\n </div>\n </ng-template>\n <ng-template #noDataTemplate>\n <div class=\"list-item\">\n {{'common.noDataFound' | trans}}\n </div>\n </ng-template>\n\n </ng-template>\n\n </div>\n\n </div>\n </ng-container>\n\n</ax-drop-down>" }]
|
934
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { showDropDownButton: [{
|
935
|
+
type: Input
|
936
|
+
}], rowTemplate: [{
|
937
|
+
type: ContentChild,
|
938
|
+
args: [TemplateRef, { static: true }]
|
939
|
+
}], rowInputTemplate: [{
|
940
|
+
type: Input
|
941
|
+
}], span: [{
|
942
|
+
type: ViewChild,
|
943
|
+
args: [AXTextBoxComponent, { static: true }]
|
944
|
+
}], textbox: [{
|
945
|
+
type: ViewChild,
|
946
|
+
args: [AXTextBoxComponent, { static: true }]
|
947
|
+
}], listContainer: [{
|
948
|
+
type: ViewChild,
|
949
|
+
args: ['listContainer', { static: true }]
|
950
|
+
}], serchBox: [{
|
951
|
+
type: ViewChild,
|
952
|
+
args: ['serchBox', { static: false }]
|
953
|
+
}], textBoxSelectBox: [{
|
954
|
+
type: ViewChild,
|
955
|
+
args: ['textBoxSelectBox', { static: true }]
|
956
|
+
}], showCheckBox: [{
|
957
|
+
type: Input
|
958
|
+
}], readonly: [{
|
959
|
+
type: Input
|
960
|
+
}], rtl: [{
|
961
|
+
type: Input
|
962
|
+
}], disabled: [{
|
963
|
+
type: Input
|
964
|
+
}], placeholder: [{
|
965
|
+
type: Input
|
966
|
+
}], size: [{
|
967
|
+
type: Input
|
968
|
+
}], allowNull: [{
|
969
|
+
type: Input
|
970
|
+
}], textAlign: [{
|
971
|
+
type: Input
|
972
|
+
}], bufferSize: [{
|
973
|
+
type: Input
|
974
|
+
}], remoteOperation: [{
|
975
|
+
type: Input
|
976
|
+
}], fitParent: [{
|
977
|
+
type: Input
|
978
|
+
}], dropdownWidth: [{
|
979
|
+
type: Input
|
980
|
+
}], dropdownToggle: [{
|
981
|
+
type: Output
|
982
|
+
}], onDemandTranslate: [{
|
983
|
+
type: Input
|
984
|
+
}], _contentDataSource: [{
|
985
|
+
type: ContentChild,
|
986
|
+
args: [AXDataSourceComponent, { static: true }]
|
987
|
+
}], dataSource: [{
|
988
|
+
type: Input
|
989
|
+
}], _contentValidation: [{
|
990
|
+
type: ContentChild,
|
991
|
+
args: [AXValidation, { static: true }]
|
992
|
+
}], validation: [{
|
993
|
+
type: Input
|
994
|
+
}], dropdown: [{
|
995
|
+
type: ViewChild,
|
996
|
+
args: ['d', { static: true }]
|
997
|
+
}], disabledCallback: [{
|
998
|
+
type: Input
|
999
|
+
}], allowSearch: [{
|
1000
|
+
type: Input
|
1001
|
+
}], textField: [{
|
1002
|
+
type: Input
|
1003
|
+
}], valueField: [{
|
1004
|
+
type: Input
|
1005
|
+
}], disabledField: [{
|
1006
|
+
type: Input
|
1007
|
+
}], mode: [{
|
1008
|
+
type: Input
|
1009
|
+
}], itemsChange: [{
|
1010
|
+
type: Output
|
1011
|
+
}], onBlur: [{
|
1012
|
+
type: Output
|
1013
|
+
}], onFocus: [{
|
1014
|
+
type: Output
|
1015
|
+
}], items: [{
|
1016
|
+
type: Input
|
1017
|
+
}], selectionChanged: [{
|
1018
|
+
type: Output
|
1019
|
+
}], selectedItemsChange: [{
|
1020
|
+
type: Output
|
1021
|
+
}], selectedItems: [{
|
1022
|
+
type: Input
|
1023
|
+
}], selectedValuesChange: [{
|
1024
|
+
type: Output
|
1025
|
+
}], selectedValues: [{
|
1026
|
+
type: Input
|
1027
|
+
}] } });
|
1028
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0Ym94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9zcmMvbGliL3NlbGVjdGJveC9zZWxlY3Rib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3NyYy9saWIvc2VsZWN0Ym94L3NlbGVjdGJveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULGlCQUFpQixFQUNqQix1QkFBdUIsRUFDdkIsS0FBSyxFQUNMLFlBQVksRUFDWixNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixFQUNqQixVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFHTixXQUFXLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUlMLHNCQUFzQixHQUN2QixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUVsRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDeEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sUUFBUSxDQUFD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QUs7Z0JBR04sY0FBYztzQkFEYixNQUFNO2dCQUlFLGlCQUFpQjtzQkFBekIsS0FBSztnQkFjRSxrQkFBa0I7c0JBRHpCLFlBQVk7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQU0xQyxVQUFVO3NCQURwQixLQUFLO2dCQVVFLGtCQUFrQjtzQkFEekIsWUFBWTt1QkFBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQU1qQyxVQUFVO3NCQURwQixLQUFLO2dCQWtCTixRQUFRO3NCQURQLFNBQVM7dUJBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHdkIsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBRUcsTUFBTTtzQkFBZixNQUFNO2dCQUVHLE9BQU87c0JBQWhCLE1BQU07Z0JBSUksS0FBSztzQkFEZixLQUFLO2dCQXNCTixnQkFBZ0I7c0JBRGYsTUFBTTtnQkFLUCxtQkFBbUI7c0JBRGxCLE1BQU07Z0JBS0ksYUFBYTtzQkFEdkIsS0FBSztnQkEwTU4sb0JBQW9CO3NCQURuQixNQUFNO2dCQU1JLGNBQWM7c0JBRHhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgSW5wdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBFbGVtZW50UmVmLFxuICBDb250ZW50Q2hpbGQsXG4gIE5nWm9uZSxcbiAgUXVlcnlMaXN0LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIFRlbXBsYXRlUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBWFRleHRCb3hDb21wb25lbnQgfSBmcm9tICcuLi90ZXh0Ym94L3RleHRib3guY29tcG9uZW50JztcbmltcG9ydCB7IEFYRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuLi9kcm9wZG93bi9kcm9wZG93bi5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgQVhCYXNlU2l6YWJsZUNvbXBvbmVudCxcbiAgQVhCYXNlSW5wdXRDb21wb25lbnQsXG4gIEFYRWxlbWVudFNpemUsXG4gIEFYVmFsaWRhdGFibGVDb21wb25lbnQsXG59IGZyb20gJy4uL2Jhc2UvZWxlbWVudC5jbGFzcyc7XG5pbXBvcnQgeyBBWERhdGFTb3VyY2VDb21wb25lbnQgfSBmcm9tICcuLi9kYXRhLXNvdXJjZS9kYXRhc291cmNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWFZhbGlkYXRpb24gfSBmcm9tICcuLi92YWxpZGF0aW9uL3ZhbGlkYXRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IEFYRGF0YVNvdXJjZVJlYWRQYXJhbXMgfSBmcm9tICcuLi9kYXRhLXNvdXJjZS9yZWFkLXBhcmFtJztcbmltcG9ydCB7IEFYQmFzZUV2ZW50IH0gZnJvbSAnLi4vYmFzZS9ldmVudHMuY2xhc3MnO1xuaW1wb3J0IHsgQVhTZWFyY2hCb3hDb21wb25lbnQgfSBmcm9tICcuLi9zZWFyY2hib3gvc2VhcmNoYm94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWENvbmZpZyB9IGZyb20gJ0BhY29yZXgvY29yZSc7XG5pbXBvcnQgeyBkaWZmZXJlbmNlQnkgfSBmcm9tICdsb2Rhc2gnO1xuZXhwb3J0IGNsYXNzIEFYU2VsZWN0Qm94U2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV4dGVuZHMgQVhCYXNlRXZlbnQge1xuICBjb25zdHJ1Y3RvcihcbiAgICBjb21wb25lbnQ6IGFueSxcbiAgICBwdWJsaWMgc2VsZWN0ZWRJdGVtczogYW55W10sXG4gICAgcHVibGljIHNlbGVjdGVkVmFsdWVzOiBhbnlbXSB8IGFueVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY29tcG9uZW50ID0gY29tcG9uZW50O1xuICB9XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LXNlbGVjdC1ib3gnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0Ym94LmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3Q6IHsgc3R5bGU6ICd3aWR0aDogMTAwJScgfSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgeyBwcm92aWRlOiBBWFZhbGlkYXRhYmxlQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhTZWxlY3RCb3hDb21wb25lbnQgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhTZWxlY3RCb3hDb21wb25lbnRcbiAgZXh0ZW5kcyBBWFZhbGlkYXRhYmxlQ29tcG9uZW50XG4gIGltcGxlbWVudHMgQVhCYXNlU2l6YWJsZUNvbXBvbmVudCwgQVhCYXNlSW5wdXRDb21wb25lbnRcbntcbiAgQElucHV0KCkgc2hvd0Ryb3BEb3duQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcblxuICBAQ29udGVudENoaWxkKFRlbXBsYXRlUmVmLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICByb3dUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBASW5wdXQoKVxuICByb3dJbnB1dFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAVmlld0NoaWxkKEFYVGV4dEJveENvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgc3BhbjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgQFZpZXdDaGlsZChBWFRleHRCb3hDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHRleHRib3g6IEFYVGV4dEJveENvbXBvbmVudDtcblxuICBAVmlld0NoaWxkKCdsaXN0Q29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgbGlzdENvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgQFZpZXdDaGlsZCgnc2VyY2hCb3gnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgc2VyY2hCb3g6IEFYU2VhcmNoQm94Q29tcG9uZW50O1xuXG4gIEBWaWV3Q2hpbGQoJ3RleHRCb3hTZWxlY3RCb3gnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICB0ZXh0Qm94U2VsZWN0Qm94OiBBWFRleHRCb3hDb21wb25lbnQ7XG5cbiAgQElucHV0KCkgc2hvd0NoZWNrQm94OiBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoKSByZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHJ0bDogYm9vbGVhbiA9IEFYQ29uZmlnLmdldCgnbGF5b3V0LnJ0bCcpO1xuXG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcblxuICBASW5wdXQoKSBzaXplOiBBWEVsZW1lbnRTaXplID0gJ21kJztcblxuICBASW5wdXQoKSBhbGxvd051bGw6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpIHRleHRBbGlnbjogJ3JpZ2h0JyB8ICdsZWZ0JyB8IG51bGwgPSBudWxsO1xuXG4gIEBJbnB1dCgpIGJ1ZmZlclNpemU6IG51bWJlciA9IDIwO1xuXG4gIEBJbnB1dCgpIHJlbW90ZU9wZXJhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGZpdFBhcmVudDogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KCkgZHJvcGRvd25XaWR0aDogc3RyaW5nID0gJzMwMHB4JztcblxuICBAT3V0cHV0KClcbiAgZHJvcGRvd25Ub2dnbGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIC8vIHRoaXMgaW5wdXQgaXMgUHJpdmF0ZSBhbmQgb25seSB1c2UgaW4gTE9WXG5cbiAgQElucHV0KCkgb25EZW1hbmRUcmFuc2xhdGU6Ym9vbGVhbiA9IGZhbHNlXG5cbiAgY3VycmVudGZvY3VzZWRJbmRleDogbnVtYmVyID0gLTE7XG4gIHNob3dMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgc2tpcDogbnVtYmVyID0gLTE7XG4gIHNlYXJjaFRleHQ6IHN0cmluZyA9ICcnO1xuICAvLyBASW5wdXQoKVxuICAvLyBjaGlwc1dpZHRoOiBzdHJpbmcgPSAnJztcblxuICB0ZXh0OiBzdHJpbmcgPSAnJztcbiAgdG90YWxDb3VudDogbnVtYmVyID0gMDtcblxuICBAQ29udGVudENoaWxkKEFYRGF0YVNvdXJjZUNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgcHJpdmF0ZSBfY29udGVudERhdGFTb3VyY2U6IEFYRGF0YVNvdXJjZUNvbXBvbmVudDtcblxuICBwcml2YXRlIF9kYXRhU291cmNlOiBBWERhdGFTb3VyY2VDb21wb25lbnQ7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGdldCBkYXRhU291cmNlKCk6IEFYRGF0YVNvdXJjZUNvbXBvbmVudCB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2UgPyB0aGlzLl9kYXRhU291cmNlIDogdGhpcy5fY29udGVudERhdGFTb3VyY2U7XG4gIH1cblxuICBwdWJsaWMgc2V0IGRhdGFTb3VyY2UodjogQVhEYXRhU291cmNlQ29tcG9uZW50KSB7XG4gICAgdGhpcy5fZGF0YVNvdXJjZSA9IHY7XG4gIH1cblxuICBAQ29udGVudENoaWxkKEFYVmFsaWRhdGlvbiwgeyBzdGF0aWM6IHRydWUgfSlcbiAgcHJpdmF0ZSBfY29udGVudFZhbGlkYXRpb246IEFYVmFsaWRhdGlvbjtcblxuICBwcml2YXRlIF92YWxpZGF0aW9uOiBBWFZhbGlkYXRpb247XG5cbiAgQElucHV0KClcbiAgcHVibGljIGdldCB2YWxpZGF0aW9uKCk6IEFYVmFsaWRhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRpb24gPyB0aGlzLl92YWxpZGF0aW9uIDogdGhpcy5fY29udGVudFZhbGlkYXRpb247XG4gIH1cblxuICBwdWJsaWMgc2V0IHZhbGlkYXRpb24odjogQVhWYWxpZGF0aW9uKSB7XG4gICAgdGhpcy5fdmFsaWRhdGlvbiA9IHY7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSByZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSB6b25lOiBOZ1pvbmVcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ2QnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBkcm9wZG93bjogQVhEcm9wZG93bkNvbXBvbmVudDtcblxuICBASW5wdXQoKSBkaXNhYmxlZENhbGxiYWNrOiAoZTogeyBpdGVtOiBhbnk7IGluZGV4OiBudW1iZXIgfSkgPT4gYm9vbGVhbjtcblxuICBASW5wdXQoKSBhbGxvd1NlYXJjaDogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHRleHRGaWVsZDogc3RyaW5nID0gJ3RleHQnO1xuICBASW5wdXQoKSB2YWx1ZUZpZWxkOiBzdHJpbmcgPSAndmFsdWUnO1xuICBASW5wdXQoKSBkaXNhYmxlZEZpZWxkOiBzdHJpbmcgPSAnZGlzYWJsZWQnO1xuICBASW5wdXQoKSBtb2RlOiAnc2luZ2xlJyB8ICdtdWx0aXBsZScgPSAnc2luZ2xlJztcbiAgaXRlbVJlbW92ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBAT3V0cHV0KCkgaXRlbXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnlbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuXG4gIEBPdXRwdXQoKSBvbkJsdXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpIG9uRm9jdXM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgcHJpdmF0ZSBfaXRlbXM6IGFueVtdID0gW107XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgaXRlbXMoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLl9pdGVtcztcbiAgfVxuICBwdWJsaWMgc2V0IGl0ZW1zKHY6IGFueVtdKSB7XG4gICAgdGhpcy5faXRlbXMgPSB2O1xuICAgIGlmICh0aGlzLml0ZW1zQ2hhbmdlKSB7XG4gICAgICB0aGlzLml0ZW1zQ2hhbmdlLmVtaXQodik7XG4gICAgfVxuICAgIGlmICh0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMuaXRlbXNTdGF0dXNPYnNlcnZlci5uZXh0KHRoaXMuaXRlbXMubGVuZ3RoKTtcbiAgICB9XG4gIH1cblxuICBoYXNTZWxlY3RlZFZhbHVlOiBib29sZWFuID0gZmFsc2U7XG4gIGl0ZW1zRmlsdGVyZWQ6IGFueVtdID0gW107XG5cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIGRyb3BEb3duRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAT3V0cHV0KClcbiAgc2VsZWN0aW9uQ2hhbmdlZDogRXZlbnRFbWl0dGVyPEFYU2VsZWN0Qm94U2VsZWN0aW9uQ2hhbmdlZEV2ZW50PiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxBWFNlbGVjdEJveFNlbGVjdGlvbkNoYW5nZWRFdmVudD4oKTtcblxuICBAT3V0cHV0KClcbiAgc2VsZWN0ZWRJdGVtc0NoYW5nZTogRXZlbnRFbWl0dGVyPGFueVtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG5cbiAgcHJpdmF0ZSBfc2VsZWN0ZWRJdGVtczogYW55W10gPSBbXTtcbiAgQElucHV0KClcbiAgcHVibGljIGdldCBzZWxlY3RlZEl0ZW1zKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJdGVtcyB8fCBbXTtcbiAgfVxuICBwdWJsaWMgc2V0IHNlbGVjdGVkSXRlbXModjogYW55W10pIHtcbiAgICB0aGlzLnNldFNlbGVjdGVkSXRlbXNDaGFuZ2Uodik7XG4gICAgLy8gaWYgKCF2KSB7XG4gICAgLy8gICB2ID0gW107XG4gICAgLy8gfVxuXG4gICAgLy8gY29uc3Qgb2xkID0gdGhpcy5zZWxlY3RlZEl0ZW1zO1xuICAgIC8vIGlmIChKU09OLnN0cmluZ2lmeShvbGQpICE9PSBKU09OLnN0cmluZ2lmeSh2KSkge1xuICAgIC8vICAgdGhpcy5fc2VsZWN0ZWRJdGVtcyA9IHRoaXMubW9kZSA9PSAnc2luZ2xlJyA/IHYuc2xpY2UoMCwgMSkgOiBbLi4ubmV3IFNldCh2KV07IC8vWy4uLm5ldyBTZXQodlswXSldIDogWy4uLm5ldyBTZXQodildO1xuICAgIC8vICAgdGhpcy5fc2VsZWN0ZWRJdGVtcy5mb3JFYWNoKChjKSA9PiAoYy5zZWxlY3RlZCA9IHRydWUpKTtcbiAgICAvLyAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KHRoaXMuX3NlbGVjdGVkSXRlbXMpO1xuICAgIC8vICAgdGhpcy5zZWxlY3RlZFZhbHVlc0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRWYWx1ZXMpO1xuICAgIC8vICAgdGhpcy5jbGVhclZhbGlkYXRpb25TdHlsZSh0aGlzLnJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICAvLyAgIHRoaXMud2FpdEZvckRhdGEoKCkgPT4ge1xuICAgIC8vICAgICBpZiAodGhpcy5fc2VsZWN0ZWRJdGVtcykge1xuICAgIC8vICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaCgoYykgPT4gKGMuc2VsZWN0ZWQgPSB0aGlzLl9zZWxlY3RlZEl0ZW1zLnNvbWUoKGkpID0+IGlbdGhpcy52YWx1ZUZpZWxkXSA9PSBjW3RoaXMudmFsdWVGaWVsZF0pKSk7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgIH0pO1xuICAgIC8vIH1cbiAgfVxuXG4gIHNldFNlbGVjdGVkSXRlbXNDaGFuZ2UodjogYW55W10sIG9sZDogYW55W10gPSB0aGlzLnNlbGVjdGVkSXRlbXMpIHtcbiAgICBpZiAoIXYpIHtcbiAgICAgIHYgPSBbXTtcbiAgICB9XG4gICAgLy8gY29uc3Qgb2xkID0gdGhpcy5zZWxlY3RlZEl0ZW1zO1xuICAgIHZhciBmID0gZGlmZmVyZW5jZUJ5KG9sZCwgdiwgdGhpcy52YWx1ZUZpZWxkKTtcbiAgICB2YXIgcyA9IGRpZmZlcmVuY2VCeSh2LCBvbGQsIHRoaXMudmFsdWVGaWVsZCk7XG4gICAgLy8gaWYgKEpTT04uc3RyaW5naWZ5KG9sZCkgIT09IEpTT04uc3RyaW5naWZ5KHYpKSB7XG4gICAgaWYgKGYubGVuZ3RoICE9IDAgfHwgcy5sZW5ndGggIT0gMCkge1xuICAgICAgdGhpcy5fc2VsZWN0ZWRJdGVtcyA9XG4gICAgICAgIHRoaXMubW9kZSA9PSAnc2luZ2xlJyA/IHYuc2xpY2UoMCwgMSkgOiBbLi4ubmV3IFNldCh2KV07IC8vWy4uLm5ldyBTZXQodlswXSldIDogWy4uLm5ldyBTZXQodildO1xuICAgICAgdGhpcy5fc2VsZWN0ZWRJdGVtcy5mb3JFYWNoKChjKSA9PiAoYy5zZWxlY3RlZCA9IHRydWUpKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KHRoaXMuX3NlbGVjdGVkSXRlbXMpO1xuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlc0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRWYWx1ZXMpO1xuICAgICAgdGhpcy5jbGVhclZhbGlkYXRpb25TdHlsZSh0aGlzLnJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICAgIHRoaXMud2FpdEZvckRhdGEoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fc2VsZWN0ZWRJdGVtcykge1xuICAgICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChcbiAgICAgICAgICAgIChjKSA9PlxuICAgICAgICAgICAgICAoYy5zZWxlY3RlZCA9IHRoaXMuX3NlbGVjdGVkSXRlbXMuc29tZShcbiAgICAgICAgICAgICAgICAoaSkgPT4gaVt0aGlzLnZhbHVlRmllbGRdID09IGNbdGhpcy52YWx1ZUZpZWxkXVxuICAgICAgICAgICAgICApKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLnJvd1RlbXBsYXRlID09PSB1bmRlZmluZWQgJiYgdGhpcy5yb3dJbnB1dFRlbXBsYXRlICE9IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5yb3dUZW1wbGF0ZSA9IHRoaXMucm93SW5wdXRUZW1wbGF0ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMucnRsID09IG51bGwpIHtcbiAgICAgIHRoaXMucnRsID1cbiAgICAgICAgd2luZG93XG4gICAgICAgICAgLmdldENvbXB1dGVkU3R5bGUodGhpcy5yZWYubmF0aXZlRWxlbWVudCwgbnVsbClcbiAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnZGlyZWN0aW9uJykgPT09ICdydGwnO1xuICAgIH1cbiAgfVxuXG4gIHNjcm9sbGVkKGUpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJlxuICAgICAgdGhpcy50b3RhbENvdW50ID4gdGhpcy5pdGVtcy5sZW5ndGggJiZcbiAgICAgIHRoaXMubGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodCAhPSAwICYmXG4gICAgICB0aGlzLmxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgLVxuICAgICAgICB0aGlzLmxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgLVxuICAgICAgICAzMDAgPFxuICAgICAgICA1MFxuICAgICkge1xuICAgICAgaWYgKHRoaXMuc2tpcCAhPT0gdGhpcy5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zaG93TG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2tpcCA9IHRoaXMuaXRlbXMubGVuZ3RoO1xuICAgICAgICBjb25zdCBwYXJhbXM6IEFYRGF0YVNvdXJjZVJlYWRQYXJhbXMgPSB7fTtcbiAgICAgICAgcGFyYW1zLnNraXAgPSB0aGlzLml0ZW1zLmxlbmd0aDtcbiAgICAgICAgcGFyYW1zLnRha2UgPSB0aGlzLmJ1ZmZlclNpemU7IC8vKiAoTWF0aC5mbG9vcih0aGlzLml0ZW1zLmxlbmd0aCAvIHRoaXMuYnVmZmVyU2l6ZSkgKyAxKTtcbiAgICAgICAgaWYgKHRoaXMudGV4dGJveCkge1xuICAgICAgICAgIHBhcmFtcy5zZWFyY2hUZXh0ID0gdGhpcy50ZXh0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcmFtcy5zZWFyY2hUZXh0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZldGNoKHBhcmFtcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgc2V0U2VsZWN0ZWRJdGVtcyh2OiBhbnlbXSwgaXNVc2VySW5wdXQ6IGJvb2xlYW4pIHtcbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xuICAgIGlmIChpc1VzZXJJbnB1dCkge1xuICAgICAgY2hhbmdlZCA9IEpTT04uc3RyaW5naWZ5KHYpICE9PSBKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkSXRlbXMpO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB2O1xuICAgIHRoaXMuc2V0U2VsZWN0ZWRJbmRleCgpO1xuICAgIGlmIChpc1VzZXJJbnB1dCAmJiBjaGFuZ2VkKSB7XG4gICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNlYXJjaENoYW5nZU9ic2VydmVyOiBhbnk7XG5cbiAgZGVsYXk6IG51bWJlciA9IDUwMDtcblxuICB0ZXh0Q2hhbmdlZChlKSB7XG4gICAgaWYgKFxuICAgICAgKGUudmFsdWUgPT09IG51bGwgfHwgZS52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGUudmFsdWUgPT09ICcnKSAmJlxuICAgICAgKGUub2xkVmFsdWUgPT09IG51bGwgfHwgZS5vbGRWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGUub2xkVmFsdWUgPT09ICcnKVxuICAgICkge1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggPSAtMTtcbiAgICAgIGlmICh0aGlzLnJlbW90ZU9wZXJhdGlvbikge1xuICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSB0aGlzLnRleHQ7XG4gICAgICAgIC8vICB0aGlzLnNlYXJjaFRleHQgPSBlLnZhbHVlO1xuICAgICAgICAvLyB0aGlzLnRleHQgPSBlLnZhbHVlO1xuICAgICAgICAvLyB0aGlzLml0ZW1zID0gW107XG4gICAgICAgIGlmICh0aGlzLml0ZW1zKSB7XG4gICAgICAgICAgbGV0IHQgPSB0aGlzLml0ZW1zLmxlbmd0aDtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHQ7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5pdGVtcy5wb3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0aGlzLml0ZW1zLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgLy8gICB0aGlzLml0ZW1zLnBvcCgpO1xuICAgICAgICAvLyB9KTtcbiAgICAgICAgY29uc3QgcGFyYW1zOiBBWERhdGFTb3VyY2VSZWFkUGFyYW1zID0ge307XG4gICAgICAgIHBhcmFtcy5zZWFyY2hUZXh0ID0gdGhpcy50ZXh0O1xuICAgICAgICAvLyBwYXJhbXMuc2VhcmNoVGV4dCA9IGUudmFsdWU7XG4gICAgICAgIHBhcmFtcy5za2lwID0gMDtcbiAgICAgICAgcGFyYW1zLnRha2UgPSB0aGlzLmJ1ZmZlclNpemU7XG4gICAgICAgIHRoaXMuZmV0Y2gocGFyYW1zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpc0l0ZW1EaXNhYmxlZChpdGVtOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoaXRlbVt0aGlzLmRpc2FibGVkRmllbGRdID09IHRydWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5kaXNhYmxlZENhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZENhbGxiYWNrKHsgaXRlbSwgaW5kZXg6IC0xIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgb25CdXR0b25DbGljayhlKSB7fVxuXG4gIHByaXZhdGUgc2V0U2VsZWN0ZWRJbmRleChzaWduOiAtMSB8IDEgfCBudWxsID0gbnVsbCk6IHZvaWQge1xuICAgIGlmIChzaWduID09IG51bGwpIHtcbiAgICAgIGlmICghdGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgdGhpcy50ZXh0ICYmIHRoaXMudGV4dCAhPT0gJycpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ID0gdGhpcy5pdGVtc1xuICAgICAgICAgIC5maWx0ZXIoKGMpID0+XG4gICAgICAgICAgICAoY1t0aGlzLnRleHRGaWVsZF0gYXMgc3RyaW5nKVxuICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAuaW5jbHVkZXModGhpcy50ZXh0LnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgKVxuICAgICAgICAgIC5pbmRleE9mKHRoaXMuc2VsZWN0ZWRJdGVtc1t0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoIC0gMV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ID0gdGhpcy5pdGVtcy5pbmRleE9mKFxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtc1t0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoIC0gMV1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2lnbiA9PT0gLTEgPyB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXgtLSA6IHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCsrO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlbW90ZU9wZXJhdGlvbikge1xuICAgICAgdGhpcy5pdGVtc0ZpbHRlcmVkID0gdGhpcy5pdGVtcztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pdGVtc0ZpbHRlcmVkID0gdGhpcy50ZXh0XG4gICAgICAgID8gdGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+XG4gICAgICAgICAgICAoY1t0aGlzLnRleHRGaWVsZF0gYXMgc3RyaW5nKVxuICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAuaW5jbHVkZXModGhpcy50ZXh0LnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgKVxuICAgICAgICA6IHRoaXMuaXRlbXM7XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ID1cbiAgICAgIHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCA8IDBcbiAgICAgICAgPyAwXG4gICAgICAgIDogdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ID49IHRoaXMuaXRlbXNGaWx0ZXJlZC5sZW5ndGhcbiAgICAgICAgPyB0aGlzLml0ZW1zRmlsdGVyZWQubGVuZ3RoIC0gMVxuICAgICAgICA6IHRoaXMuY3VycmVudGZvY3VzZWRJbmRleDtcbiAgICAvL1xuICAgIC8vIHNldCBzY3JvbGxcbiAgICBpZiAodGhpcy5saXN0Q29udGFpbmVyKSB7XG4gICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICBjb25zdCBpdGVtRGl2ID0gdGhpcy5saXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICBgLmxpc3QtaXRlbTpudGgtY2hpbGQoJHt0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXh9KWBcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGl0ZW1EaXYpIHtcbiAgICAgICAgICBpdGVtRGl2LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBAT3V0cHV0KClcbiAgc2VsZWN0ZWRWYWx1ZXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnlbXSB8IGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPFxuICAgIGFueVtdIHwgYW55XG4gID4oKTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkVmFsdWVzKCk6IGFueVtdIHwgYW55IHtcbiAgICBpZiAodGhpcy5tb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkSXRlbXMubWFwKChjKSA9PiBjW3RoaXMudmFsdWVGaWVsZF0pWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJdGVtcy5tYXAoKGMpID0+IGNbdGhpcy52YWx1ZUZpZWxkXSkgfHwgW107XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldCBzZWxlY3RlZFZhbHVlcyh2OiBhbnlbXSB8IGFueSkge1xuICAgIGlmICh0aGlzLmNvbXBhcmVTZWxlY3RlZFZhbHVlcyh2KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodiA9PSBudWxsKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodiAhPSBbXSEgJiYgdiAhPSAnJyAmJiB2ICE9IG51bGwpIHtcbiAgICAgICAgICB0aGlzLmhhc1NlbGVjdGVkVmFsdWUgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy53YWl0Rm9yRGF0YSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLml0ZW1zLmZpbHRlcigoYykgPT4gdiA9PSBjW3RoaXMudmFsdWVGaWVsZF0pKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChjKSA9PiB2ID09IGNbdGhpcy52YWx1ZUZpZWxkXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHYpKSB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gdi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKChjKSA9PlxuICAgICAgICAgICAgICAgICAgdi5pbmNsdWRlcyhjW3RoaXMudmFsdWVGaWVsZF0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgYWRkSWQgPSBbXTtcbiAgICAgICAgICAgICAgICB2LmZvckVhY2goKHZJZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgYWRkSWQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIFt0aGlzLnZhbHVlRmllbGRdOiB2SWQsXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGxldCBuZXdJZCA9IGRpZmZlcmVuY2VCeShcbiAgICAgICAgICAgICAgICAgIGFkZElkLFxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLFxuICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZUZpZWxkXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBsZXQgdnYgPSBbXTtcbiAgICAgICAgICAgICAgICBuZXdJZC5mb3JFYWNoKChyYykgPT4ge1xuICAgICAgICAgICAgICAgICAgdnYucHVzaChyY1t0aGlzLnZhbHVlRmllbGRdKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zXG4gICAgICAgICAgICAgICAgICAuZmlsdGVyKChjKSA9PiB2di5pbmNsdWRlcyhjW3RoaXMudmFsdWVGaWVsZF0pKVxuICAgICAgICAgICAgICAgICAgLmZvckVhY2goKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChyZXMpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy8gIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PiB2di5pbmNsdWRlcyhjW3RoaXMudmFsdWVGaWVsZF0pKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEl0ZW1zQ2hhbmdlKFxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLFxuICAgICAgICAgICAgICAgICAgdnYubGVuZ3RoID4gMCA/IFsxXSA6IHRoaXMuc2VsZWN0ZWRJdGVtc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+IHYuaW5jbHVkZXMoY1t0aGlzLnZhbHVlRmllbGRdKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKGMpID0+IHYgPT09IGNbdGhpcy52YWx1ZUZpZWxkXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXNDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkVmFsdWVzKTtcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29tcGFyZVNlbGVjdGVkVmFsdWVzKG5ld1ZhbHVlOiBhbnlbXSB8IGFueSkge1xuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZXM7XG4gICAgcmV0dXJuIChcbiAgICAgIChjdXJyZW50VmFsdWUgPT0gbnVsbCAmJiBuZXdWYWx1ZSA9PSBudWxsKSB8fFxuICAgICAgSlNPTi5zdHJpbmdpZnkoY3VycmVudFZhbHVlKSA9PT0gSlNPTi5zdHJpbmdpZnkobmV3VmFsdWUpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U2VsZWN0ZWRWYWx1ZXModjogYW55W10gfCBhbnksIGlzVXNlcklucHV0OiBib29sZWFuKSB7XG4gICAgY29uc3QgY2hhbmdlZCA9IGlzVXNlcklucHV0ID8gIXRoaXMuY29tcGFyZVNlbGVjdGVkVmFsdWVzKHYpIDogZmFsc2U7XG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlcyA9IHY7XG4gICAgaWYgKGlzVXNlcklucHV0ICYmIGNoYW5nZWQpIHtcbiAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZWRFdmVudCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZW1pdFNlbGVjdGlvbkNoYW5nZWRFdmVudCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWVzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFZhbHVlcyk7XG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VkLmVtaXQoXG4gICAgICBuZXcgQVhTZWxlY3RCb3hTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyxcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlc1xuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYnVmZmVyU2l6ZSA8IDEwKSB7XG4gICAgICB0aGlzLmJ1ZmZlclNpemUgPSAxMDtcbiAgICB9XG4gICAgaWYgKHRoaXMubW9kZSA9PSAnc2luZ2xlJykge1xuICAgICAgdGhpcy5zaG93Q2hlY2tCb3ggPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93Q2hlY2tCb3ggPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAhdGhpcy5yZW1vdGVPcGVyYXRpb24gfHxcbiAgICAgICh0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJiB0aGlzLmhhc1NlbGVjdGVkVmFsdWUpXG4gICAgKSB7XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG4gIH1cbiAgZHJvcGRvd25Ub2dnbGVTZWxlY0JveChlKSB7XG4gICAgdGhpcy50ZXh0ID0gJyc7XG4gICAgaWYgKHRoaXMuZHJvcGRvd24uaXNPcGVuKSB7XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5zZXJjaEJveCkge1xuICAgICAgICAgIHRoaXMuc2VyY2hCb3guZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfSwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG4gICAgdGhpcy5kcm9wZG93blRvZ2dsZS5lbWl0KGUpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIC8vIGlmICghdGhpcy5hbGxvd1NlYXJjaCkge1xuICAgIC8vICAgICBpZiAodGhpcy5yZWFkb25seSA9PSBmYWxzZSkge1xuICAgIC8vICAgICAgICAgdGhpcy5pdGVtUmVtb3ZlID0gdHJ1ZTtcbiAgICAvLyAgICAgICAgIHRoaXMucmVhZG9ubHkgPSB0cnVlO1xuICAgIC8vICAgICB9XG4gICAgLy8gfVxuICAgIHRoaXMuaW5pdFZhbGlkYXRpb24odGhpcy5yZWYsICdzZWxlY3RlZEl0ZW1zJywgdGhpcy52YWxpZGF0aW9uKTtcbiAgICBpZiAodGhpcy5kYXRhU291cmNlKSB7XG4gICAgICAvLyBpZiAodGhpcy5hbGxvd1NlYXJjaCA9PSBmYWxzZSkge1xuICAgICAgLy8gICB0aGlzLmZldGNoKCk7XG4gICAgICAvLyB9XG4gICAgICB0aGlzLmRhdGFTb3VyY2Uub25EYXRhUmVjZWl2ZWQuc3Vic2NyaWJlKChjKSA9PiB7XG4gICAgICAgIHRoaXMuc2hvd0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kYXRhUmVjZWl2ZWQoYy5kYXRhLnJlc3VsdCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBkYXRhUmVjZWl2ZWQoZGF0YTogYW55KSB7XG4gICAgaWYgKHRoaXMucmVtb3RlT3BlcmF0aW9uKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCAmJlxuICAgICAgICB0aGlzLnNlYXJjaFRleHQgIT0gbnVsbCAmJlxuICAgICAgICB0aGlzLnNlYXJjaFRleHQgIT09ICcnXG4gICAgICApIHtcbiAgICAgICAgaWYgKGRhdGEudG90YWxDb3VudCkge1xuICAgICAgICAgIGlmICh0aGlzLml0ZW1zLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAvL3RoaXMuaXRlbXMgPSBkYXRhLml0ZW1zO1xuICAgICAgICAgICAgZGF0YS5pdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhLml0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBpZiAodGhpcy5pdGVtc1N0YXR1c09ic2VydmVyKSB7XG4gICAgICAgICAgICAvLyAgIHRoaXMuaXRlbXNTdGF0dXNPYnNlcnZlci5uZXh0KHRoaXMuaXRlbXMubGVuZ3RoKTtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSBkYXRhLnRvdGFsQ291bnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXRlbXMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbXMgPSBkYXRhLml0ZW1zO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhLml0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBpZiAodGhpcy5pdGVtc1N0YXR1c09ic2VydmVyKSB7XG4gICAgICAgICAgICAvLyAgIHRoaXMuaXRlbXNTdGF0dXNPYnNlcnZlci5uZXh0KHRoaXMuaXRlbXMubGVuZ3RoKTtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy50b3RhbENvdW50ID0gZGF0YS5pdGVtcyA9PSB1bmRlZmluZWQgPyAwIDogZGF0YS5pdGVtcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5pdGVtcyAmJiBkYXRhLml0ZW1zLmxlbmd0aCA9PT0gZGF0YS50b3RhbENvdW50KSB7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBkYXRhLml0ZW1zO1xuICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSBkYXRhLml0ZW1zLmxlbmd0aDtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS50b3RhbENvdW50KSB7XG4gICAgICAgIGRhdGEuaXRlbXMuZm9yRWFjaCgoZWxtKSA9PiB7XG4gICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGVsbSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBpZiAodGhpcy5pdGVtc1N0YXR1c09ic2VydmVyKSB7XG4gICAgICAgIC8vICAgdGhpcy5pdGVtc1N0YXR1c09ic2VydmVyLm5leHQodGhpcy5pdGVtcy5sZW5ndGgpO1xuICAgICAgICAvLyB9XG4gICAgICAgIHRoaXMudG90YWxDb3VudCA9IGRhdGEudG90YWxDb3VudDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGEuZm9yRWFjaCgoZWxtKSA9PiB7XG4gICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGVsbSk7XG4gICAgICAgICAgLy8gaWYgKHRoaXMuaXRlbXNTdGF0dXNPYnNlcnZlcikge1xuICAgICAgICAgIC8vICAgdGhpcy5pdGVtc1N0YXR1c09ic2VydmVyLm5leHQodGhpcy5pdGVtcy5sZW5ndGgpO1xuICAgICAgICAgIC8vIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudG90YWxDb3VudCA9IGRhdGEubGVuZ3RoO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLml0ZW1zID0gZGF0YTtcbiAgICB9XG5cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICB0aGlzLmRyb3Bkb3duLnVwZGF0ZVBvc2l0aW9uKCk7XG4gIH1cblxuICAvLyBwcml2YXRlIHBhcmFtczogQVhEYXRhU291cmNlUmVhZFBhcmFtcyA9IHt9O1xuXG4gIGZldGNoKHBhcmFtczogQVhEYXRhU291cmNlUmVhZFBhcmFtcyA9IHt9KSB7XG4gICAgLy8gIHRoaXMucGFyYW1zID0gcGFyYW1zO1xuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UpIHtcbiAgICAgIHRoaXMuc2hvd0xvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5kYXRhU291cmNlLmZldGNoKHBhcmFtcyk7XG4gICAgfVxuICB9XG5cbiAgcmVmcmVzaCgpIHtcbiAgICBjb25zdCBwYXJhbXM6IEFYRGF0YVNvdXJjZVJlYWRQYXJhbXMgPSB7fTtcbiAgICBpZiAodGhpcy5yZW1vdGVPcGVyYXRpb24pIHtcbiAgICAgIHBhcmFtcy5za2lwID0gMDtcbiAgICAgIHRoaXMuc2tpcCA9IDA7XG4gICAgICBwYXJhbXMudGFrZSA9IHRoaXMuYnVmZmVyU2l6ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGF0YVNvdXJjZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHRoaXMuaXRlbXMgPSBbXTtcbiAgICAgIC8vIHRoaXMuaXRlbXMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgLy8gICB0aGlzLml0ZW1zLnBvcCgpO1xuICAgICAgLy8gfSk7XG5cbiAgICAgIGlmICh0aGlzLml0ZW1zKSB7XG4gICAgICAgIGxldCB0ID0gdGhpcy5pdGVtcy5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdDsgaSsrKSB7XG4gICAgICAgICAgdGhpcy5pdGVtcy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmZldGNoKHBhcmFtcyk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlSXRlbVJlbW92ZUNsaWNrKGl0ZW0pIHtcbiAgICBpZiAodGhpcy5tb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgLy8gdGhpcy5zZWxlY3RlZEl0ZW1zID0gbnVsbDtcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRWYWx1ZXMobnVsbCwgdHJ1ZSk7XG4gICAgICAvLyB0aGlzLnNlbGVjdGVkSXRlbXNDaGFuZ2UuZW1pdCh0aGlzLl9zZWxlY3RlZEl0ZW1zKTtcbiAgICAgIC8vIHRoaXMuY2xlYXJWYWxpZGF0aW9uU3R5bGUodGhpcy5yZWYubmF0aXZlRWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoKGMpID0+IGMgIT09IGl0ZW0pO1xuICAgICAgdGhpcy5zZXRTZWxlY3RlZEl0ZW1zKFxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKFxuICAgICAgICAgIChjKSA9PiBjW3RoaXMudmFsdWVGaWVsZF0gIT09IGl0ZW1bdGhpcy52YWx1ZUZpZWxkXVxuICAgICAgICApLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgICAgLy8gdGhpcy5fc2VsZWN0ZWRJdGVtcyA9IHRoaXMuX3NlbGVjdGVkSXRlbXMuZmlsdGVyKGMgPT4gYyAhPT0gaXRlbSk7XG4gICAgICAvLyB0aGlzLnNlbGVjdGVkSXRlbXNDaGFuZ2UuZW1pdCh0aGlzLl9zZWxlY3RlZEl0ZW1zKTtcbiAgICAgIC8vIHRoaXMuY2xlYXJWYWxpZGF0aW9uU3R5bGUodGhpcy5yZWYubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuICAgIC8vIHRoaXMudGV4dCA9ICcnO1xuICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uRm9jdXNUZXh0Qm94KGUpIHt9XG5cbiAgb25UZXh0Qm94Q2xpY2soZSkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkID09IGZhbHNlICYmIHRoaXMucmVhZG9ubHkgPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZHJvcGRvd24ub3BlbigpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUl0ZW1DbGljayhlOiBNb3VzZUV2ZW50LCBpdGVtOiBhbnkpIHtcbiAgICBpZiAodGhpcy5pc0l0ZW1EaXNhYmxlZChpdGVtKSA9PSBmYWxzZSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBpdGVtW3RoaXMudmFsdWVGaWVsZF07XG5cbiAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgIC8vIHRoaXMuc2VsZWN0ZWRWYWx1ZXMgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZFZhbHVlcyh2YWx1ZSwgdHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBleGlzdHMgPSB0aGlzLnNlbGVjdGVkVmFsdWVzLnNsaWNlKDApO1xuICAgICAgICBpZiAoZXhpc3RzLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuYWxsb3dOdWxsID09IHRydWUgfHxcbiAgICAgICAgICAgICh0aGlzLmFsbG93TnVsbCA9PSBmYWxzZSAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlSXRlbVJlbW92ZUNsaWNrKGl0ZW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBleGlzdHMucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgLy8gdGhpcy5zZWxlY3RlZFZhbHVlcyA9IGV4aXN0cztcbiAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkVmFsdWVzKGV4aXN0cywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMubW9kZSA9PSAnc2luZ2xlJykge1xuICAgICAgICB0aGlzLnRleHQgPSAnJztcbiAgICAgICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICAgIC8vIGlmIChlLnN0b3BQcm9wYWdhdGlvbigpID09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAvLyB9XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuc2VyY2hCb3gpIHtcbiAgICAgICAgICB0aGlzLnNlcmNoQm94LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0sIDApO1xuICAgIH1cblxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBoYW5kbGVLZXlFdmVudFNlYXJjaChlOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudGV4dEJveFNlbGVjdEJveC5mb2N1cygpO1xuICAgICAgfSwgMCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIHRoaXMudGV4dCA9IG51bGw7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy50ZXh0Qm94U2VsZWN0Qm94LmZvY3VzKCk7XG4gICAgICB9LCAwKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgKGUua2V5ID09PSAnQXJyb3dEb3duJyB8fCBlLmtleSA9PT0gJ0Fycm93VXAnKSAmJlxuICAgICAgdGhpcy5nZXRJdGVtcygpLmxlbmd0aCA+IDAgJiZcbiAgICAgIGUudHlwZSA9PT0gJ2tleWRvd24nXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5tb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgICB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggPVxuICAgICAgICAgIHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCArIChlLmtleSA9PT0gJ0Fycm93RG93bicgPyAxIDogLTEpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUJ5SW5kZXgodGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmRyb3Bkb3duLmlzT3Blbikge1xuICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJbmRleChlLmtleSA9PT0gJ0Fycm93RG93bicgPyAxIDogLTEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZHJvcGRvd24ub3BlbigpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VyY2hCb3gpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXJjaEJveC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIGlmIChlLmtleSA9PSAnRW50ZXInICYmIHRoaXMuZHJvcGRvd24uaXNPcGVuICYmIHRoaXMubW9kZSA9PSAnc2luZ2xlJykge1xuICAgIC8vICAgICB0aGlzLmRyb3Bkb3duLmNsb3NlKCk7XG4gICAgLy8gICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICAgICAgdGhpcy5kcm9wZG93bi5mb2N1cygpO1xuICAgIC8vICAgICB9LCAwKTtcbiAgICAvLyB9XG4gICAgLy9lLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIC8vZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKGUudHlwZSA9PT0gJ2tleWRvd24nICYmIGUua2V5ID09ICdFbnRlcicgJiYgdGhpcy5kcm9wZG93bi5pc09wZW4pIHtcbiAgICAgIGlmICghdGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgdGhpcy50ZXh0ICYmIHRoaXMudGV4dCAhPT0gJycpIHtcbiAgICAgICAgdGhpcy5pdGVtc0ZpbHRlcmVkID0gdGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+XG4gICAgICAgICAgKGNbdGhpcy50ZXh0RmllbGRdIGFzIHN0cmluZylcbiAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAuaW5jbHVkZXModGhpcy50ZXh0LnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0aGlzLml0ZW1zRmlsdGVyZWQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ID0gMDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pdGVtc0ZpbHRlcmVkID0gdGhpcy5pdGVtcztcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKFxuICAgICAgICAgIChjKSA9PlxuICAgICAgICAgICAgY1t0aGlzLnZhbHVlRmllbGRdID09PVxuICAgICAgICAgICAgdGhpcy5pdGVtc0ZpbHRlcmVkW3RoaXMuY3VycmVudGZvY3VzZWRJbmRleF1bdGhpcy52YWx1ZUZpZWxkXVxuICAgICAgICApLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgdGhpcy5tb2RlID09ICdtdWx0aXBsZSdcbiAgICAgICkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5hbGxvd051bGwgPT0gdHJ1ZSB8fFxuICAgICAgICAgICh0aGlzLmFsbG93TnVsbCA9PSBmYWxzZSAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJiB0aGlzLnRleHQgJiYgdGhpcy50ZXh0ICE9PSAnJykge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcihcbiAgICAgICAgICAgICAgKGMpID0+XG4gICAgICAgICAgICAgICAgYyAhPT1cbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLmZpbHRlcigoYykgPT5cbiAgICAgICAgICAgICAgICAgIChjW3RoaXMudGV4dEZpZWxkXSBhcyBzdHJpbmcpXG4gICAgICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgIC5pbmNsdWRlcyh0aGlzLnRleHQudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgICAgICApW3RoaXMuY3VycmVudGZvY3VzZWRJbmRleF1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoXG4gICAgICAgICAgICAgIChjKSA9PlxuICAgICAgICAgICAgICAgIGNbdGhpcy52YWx1ZUZpZWxkXSAhPT1cbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW3RoaXMuY3VycmVudGZvY3VzZWRJbmRleF1bdGhpcy52YWx1ZUZpZWxkXVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlZEV2ZW50KCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGUgPT0gJ211bHRpcGxlJykge1xuICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggIT0gLTEpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgdGhpcy50ZXh0ICYmIHRoaXMudGV4dCAhPT0gJycpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuaXRlbXNGaWx0ZXJlZC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaCh0aGlzLml0ZW1zRmlsdGVyZWRbMF0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKFxuICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtc0ZpbHRlcmVkW3RoaXMuY3VycmVudGZvY3VzZWRJbmRleF1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaCh0aGlzLml0ZW1zW3RoaXMuY3VycmVudGZvY3VzZWRJbmRleF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlZEV2ZW50KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLnRleHQgJiYgdGhpcy5pdGVtc0ZpbHRlcmVkPy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtcyh0aGlzLml0ZW1zRmlsdGVyZWQsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5tb2RlID09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duLmNsb3NlKCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy50ZXh0Qm94U2VsZWN0Qm94LmZvY3VzKCk7XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGlzQ2hhcihzdHI6IHN0cmluZykge1xuICAgIGlmIChcbiAgICAgIHN0ci5pbmNsdWRlcygnU2hpZnQnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdUYWInKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdDb250cm9sJykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnQWx0JykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnQ2Fwc0xvY2snKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdNZXRhJykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnQ29udGV4dE1lbnUnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdFbnRlcicpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0JhY2tzcGFjZScpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ1ByaW50U2NyZWVuJykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnU2Nyb2xsTG9jaycpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ1BhdXNlJykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnSG9tZScpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0VuZCcpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0luc2VydCcpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ1BhZ2VVcCcpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0RlbGV0ZScpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ1BhZ2VEb3duJykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnTnVtTG9jaycpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0VzY2FwZScpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0Fycm93JykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygn2ZFGMScpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0YyJykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnRjMnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdGNCcpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0Y1JykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnRjYnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdGNycpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0Y4JykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnRjknKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdGMTAnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdGMTEnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdGMTInKVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVLZXlFdmVudChlOiBhbnkpIHtcbiAgICAvLyBjb25zdCBOdW1iZXJNaW51c1BhdHRlcm4gPSAvW2EtekEtWjAtOVxcLV0vZztcbiAgICAvLyBjb25zdCBGYXJzaSA9IC9b2b7ahtis2K3YrtmH2LnYutmB2YLYq9i12LbYtNiz24zYqNmE2KfYqtmG2YXaqdqv2YjYptiv2LDYsdiy2LfYuNqY2KTYpdij2KHZi9mM2Y3ZjtmP2ZDZkVxcc10rJC87XG4gICAgLy8gIGNvbnN0IGlucHV0Q2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoZS5jaGFyQ29kZSk7XG4gICAgLy8gY29uc3QgcGF0dGVybkVuID0gL15bYS16QS1aMC05XSokLztcbiAgICAvLyBjb25zdCBwYXR0ZXJuID0gL15bXFx1MDYwMC1cXHUwNkZGXFxzXSskLztcbiAgICBjb25zdCBpbnB1dENoYXIgPSBlLmtleTtcbiAgICBpZiAoXG4gICAgICAoaW5wdXRDaGFyICE9ICdCYWNrc3BhY2UnICYmXG4gICAgICAgIGlucHV0Q2hhciAhPSAnQmFja3NwYWNlJyAmJlxuICAgICAgICBpbnB1dENoYXIgIT0gJ1RhYicgJiZcbiAgICAgICAgaW5wdXRDaGFyICE9ICdFbnRlcicgJiZcbiAgICAgICAgaW5wdXRDaGFyICE9ICdFc2NhcGUnICYmXG4gICAgICAgIGlucHV0Q2hhciAhPSAnQXJyb3dEb3duJyAmJlxuICAgICAgICBpbnB1dENoYXIgIT0gJ0Fycm93VXAnKSB8fFxuICAgICAgZS5jb2RlID09PSAnU3BhY2UnIHx8XG4gICAgICBlLmN0cmxLZXkgPT0gdHJ1ZVxuICAgICkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBlLmtleSA9PT0gJ0JhY2tzcGFjZScgJiZcbiAgICAgIGUudHlwZSA9PT0gJ2tleWRvd24nICYmXG4gICAgICAoKHRoaXMuYWxsb3dOdWxsID09PSB0cnVlICYmIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwKSB8fFxuICAgICAgICAodGhpcy5hbGxvd051bGwgPT09IGZhbHNlICYmIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAxKSlcbiAgICApIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wb3AoKTtcbiAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZWRFdmVudCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSB7XG4gICAgICB0aGlzLmRyb3Bkb3duLmNsb3NlKCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy50ZXh0Qm94U2VsZWN0Qm94LmZvY3VzKCk7XG4gICAgICB9LCAwKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgSU5QVVQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGUua2V5Q29kZSk7XG4gICAgaWYgKHRoaXMuaXNDaGFyKGUua2V5KSAmJiB0aGlzLmFsbG93U2VhcmNoICYmIGUuY3RybEtleSA9PSBmYWxzZSkge1xuICAgICAgdGhpcy5kcm9wZG93bi5vcGVuKCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuc2VyY2hCb3gpIHtcbiAgICAgICAgICB0aGlzLnNlcmNoQm94LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0sIDApO1xuICAgICAgdGhpcy50ZXh0ID0gZS5rZXk7XG4gICAgfVxuXG4gICAgaWYgKGUua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgdGhpcy50ZXh0ID0gbnVsbDtcbiAgICAgIHRoaXMuZHJvcGRvd24uY2xvc2UoKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnRleHRCb3hTZWxlY3RCb3guZm9jdXMoKTtcbiAgICAgIH0sIDApO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAoZS5rZXkgPT09ICdBcnJvd0Rvd24nIHx8IGUua2V5ID09PSAnQXJyb3dVcCcpICYmXG4gICAgICB0aGlzLmdldEl0ZW1zKCkubGVuZ3RoID4gMCAmJlxuICAgICAgZS50eXBlID09PSAna2V5ZG93bidcbiAgICApIHtcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtQnlJbmRleChcbiAgICAgICAgICB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggKyAoZS5rZXkgPT09ICdBcnJvd0Rvd24nID8gMSA6IC0xKVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuZHJvcGRvd24uaXNPcGVuKSB7XG4gICAgICAgICAgLy8gIHRoaXMuc2V0U2VsZWN0ZWRJbmRleCgoZS5rZXkgPT09ICdBcnJvd0Rvd24nID8gMSA6IC0xKSk7XG4gICAgICAgICAgaWYgKHRoaXMuYWxsb3dTZWFyY2ggPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJbmRleChlLmtleSA9PT0gJ0Fycm93RG93bicgPyAxIDogLTEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2VyY2hCb3gpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlcmNoQm94LmZvY3VzKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRyb3Bkb3duLm9wZW4oKTtcbiAgICAgICAgICBpZiAodGhpcy5hbGxvd1NlYXJjaCA9PSB0cnVlKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2VyY2hCb3gpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlcmNoQm94LmZvY3VzKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmFsbG93U2VhcmNoID09PSBmYWxzZSkge1xuICAgICAgaWYgKGUudHlwZSA9PT0gJ2tleWRvd24nICYmIGUua2V5ID09ICdFbnRlcicgJiYgdGhpcy5kcm9wZG93bi5pc09wZW4pIHtcbiAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoXG4gICAgICAgICAgICAoYykgPT5cbiAgICAgICAgICAgICAgY1t0aGlzLnZhbHVlRmllbGRdID09PVxuICAgICAgICAgICAgICB0aGlzLml0ZW1zRmlsdGVyZWRbdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4XVt0aGlzLnZhbHVlRmllbGRdXG4gICAgICAgICAgKS5sZW5ndGggPiAwICYmXG4gICAgICAgICAgdGhpcy5tb2RlID09ICdtdWx0aXBsZSdcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5hbGxvd051bGwgPT0gdHJ1ZSB8fFxuICAgICAgICAgICAgKHRoaXMuYWxsb3dOdWxsID09IGZhbHNlICYmIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAxKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJiB0aGlzLnRleHQgJiYgdGhpcy50ZXh0ICE9PSAnJykge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChjKSA9PlxuICAgICAgICAgICAgICAgICAgYyAhPT1cbiAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PlxuICAgICAgICAgICAgICAgICAgICAoY1t0aGlzLnRleHRGaWVsZF0gYXMgc3RyaW5nKVxuICAgICAgICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgICAgLmluY2x1ZGVzKHRoaXMudGV4dC50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgICAgICAgKVt0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChjKSA9PlxuICAgICAgICAgICAgICAgICAgY1t0aGlzLnZhbHVlRmllbGRdICE9PVxuICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtc1t0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdW3RoaXMudmFsdWVGaWVsZF1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZWRFdmVudCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5tb2RlID09ICdtdWx0aXBsZScpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggIT0gLTEpIHtcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJiB0aGlzLnRleHQgJiYgdGhpcy50ZXh0ICE9PSAnJykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLml0ZW1zRmlsdGVyZWQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaCh0aGlzLml0ZW1zRmlsdGVyZWRbMF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtc0ZpbHRlcmVkW3RoaXMuY3VycmVudGZvY3VzZWRJbmRleF1cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKHRoaXMuaXRlbXNbdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4XSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlZEV2ZW50KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRleHQgJiYgdGhpcy5pdGVtc0ZpbHRlcmVkLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkSXRlbXModGhpcy5pdGVtc0ZpbHRlcmVkLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGUgPT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRleHRCb3hTZWxlY3RCb3guZm9jdXMoKTtcbiAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBmb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLnRleHRib3guZm9jdXMoKTtcbiAgfVxuXG4gIHNlbGVjdGVkSXRlbUJ5SW5kZXgoaW5kZXg6IG51bWJlcikge1xuICAgIGxldCBpdGVtID0gW107XG4gICAgaWYgKCF0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJiB0aGlzLnRleHQgJiYgdGhpcy50ZXh0ICE9PSAnJykge1xuICAgICAgdGhpcy5pdGVtc0ZpbHRlcmVkID0gdGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+XG4gICAgICAgIChjW3RoaXMudGV4dEZpZWxkXSBhcyBzdHJpbmcpXG4gICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAuaW5jbHVkZXModGhpcy50ZXh0LnRvTG93ZXJDYXNlKCkpXG4gICAgICApO1xuXG4gICAgICBpdGVtID0gdGhpcy5pdGVtc0ZpbHRlcmVkW2luZGV4XTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbSA9IHRoaXMuaXRlbXNbaW5kZXhdO1xuICAgIH1cbiAgICAvL1xuICAgIC8vICBjb25zdCBpdGVtID0gdGhpcy50ZXh0ID8gdGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+IChjW3RoaXMudGV4dEZpZWxkXSBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy50ZXh0LnRvTG93ZXJDYXNlKCkpKVtpbmRleF0gOiB0aGlzLml0ZW1zW2luZGV4XTtcbiAgICBpZiAoaXRlbSkge1xuICAgICAgdGhpcy5zZXRTZWxlY3RlZEl0ZW1zKFtpdGVtXSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRTZWxlY3RlZEluZGV4KCk7XG4gIH1cblxuICBnZXRJdGVtcygpOiBhbnlbXSB7XG4gICAgaWYgKHRoaXMuaXRlbXMgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gIXRoaXMucmVtb3RlT3BlcmF0aW9uICYmIHRoaXMudGV4dCAmJiB0aGlzLnRleHQgIT09ICcnXG4gICAgICA/IHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PlxuICAgICAgICAgIChjW3RoaXMudGV4dEZpZWxkXSBhcyBzdHJpbmcpXG4gICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgLmluY2x1ZGVzKHRoaXMudGV4dC50b0xvd2VyQ2FzZSgpKVxuICAgICAgICApXG4gICAgICA6IHRoaXMuaXRlbXM7XG4gIH1cblxuICBpc0l0ZW1TZWxlY3RlZChpdGVtOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zICYmXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKFxuICAgICAgICAoYykgPT4gY1t0aGlzLnZhbHVlRmllbGRdID09PSBpdGVtW3RoaXMudmFsdWVGaWVsZF1cbiAgICAgICkubGVuZ3RoID4gMFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGl0ZW1zU3RhdHVzT2JzZXJ2ZXI6IGFueTtcbiAgcHJpdmF0ZSB3YWl0Rm9yRGF0YShjYWxsYmFja2ZuOiAoKSA9PiB2b2lkKSB7XG4gICAgaWYgKHRoaXMuaXRlbXMgJiYgdGhpcy5pdGVtcy5sZW5ndGgpIHtcbiAgICAgIGNhbGxiYWNrZm4oKTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIpIHtcbiAgICAgIE9ic2VydmFibGUuY3JlYXRlKChvYnNlcnZlcikgPT4ge1xuICAgICAgICB0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIgPSBvYnNlcnZlcjtcbiAgICAgIH0pXG4gICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgxMDApKVxuICAgICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuICAgICAgICAuc3Vic2NyaWJlKChjKSA9PiB7XG4gICAgICAgICAgY2FsbGJhY2tmbigpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxheC1kcm9wLWRvd24gI2QgW3NpemVdPVwic2l6ZVwiIFtmaXRQYXJlbnRdPVwiZml0UGFyZW50XCIgW2Ryb3Bkb3duV2lkdGhdPVwiZHJvcGRvd25XaWR0aFwiIFtydGxdPVwicnRsXCJcbiAgICBbc2hvd0Ryb3BEb3duQnV0dG9uXT1cInNob3dEcm9wRG93bkJ1dHRvblwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgKGRyb3Bkb3duVG9nZ2xlKT1cImRyb3Bkb3duVG9nZ2xlU2VsZWNCb3goJGV2ZW50KVwiPlxuICAgIDxuZy1jb250YWluZXIgc3RhcnQ+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltzdGFydF1cIj5cbiAgICAgICAgPC9uZy1jb250ZW50PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgaGVhZGVyPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXggY2hpcHMtY29udGFpbmVyXCIgW2hvcml6b250YWxTY3JvbGxdPVwiNDBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwc1wiIFtjbGFzcy5jaGlwcy1ibGFua109XCJtb2RlID09PSAnc2luZ2xlJ1wiIFt0aXRsZV09XCJpdGVtW3RleHRGaWVsZF1cIlxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHNlbGVjdGVkSXRlbXNcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBzLXRleHRcIlxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7J3dpZHRoJzogaXRlbVt0ZXh0RmllbGRdLmxlbmd0aCA+IDE1ICYmIHRoaXMubW9kZSA9PT0nbXVsdGlwbGUnID8gJzExMHB4JyA6ICdhdXRvJ31cIj5cbiAgICAgICAgICAgICAgICAgICAge3sgaXRlbVt0ZXh0RmllbGRdIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2xvc2UtaWNvblwiIChjbGljayk9XCJoYW5kbGVJdGVtUmVtb3ZlQ2xpY2soaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIihyZWFkb25seSE9dHJ1ZSB8fCBpdGVtUmVtb3ZlID09dHJ1ZSkmJiBkaXNhYmxlZCE9dHJ1ZSAmJiAoYWxsb3dOdWxsPT10cnVlIHx8IChzZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDEpKVwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhciBmYS10aW1lcyBjbG9zZVwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtd3JhcHBlclwiIChjbGljayk9XCJvblRleHRCb3hDbGljaygkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPGF4LXRleHQtYm94ICN0ZXh0Qm94U2VsZWN0Qm94IFt0ZXh0QWxpZ25dPVwidGV4dEFsaWduXCJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlbGVjdGVkSXRlbXMubGVuZ3RoID09IDAgPyBwbGFjZWhvbGRlciA6ICcnXCIgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgKG9ua2V5KT1cImhhbmRsZUtleUV2ZW50KCRldmVudClcIiBbc2l6ZV09XCJzaXplXCJcbiAgICAgICAgICAgICAgICAgICAgKG9uRm9jdXMpPVwib25Gb2N1c1RleHRCb3goJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDwvYXgtdGV4dC1ib3g+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciBlbmQ+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltlbmRdXCI+XG4gICAgICAgIDwvbmctY29udGVudD5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgcGFuZWw+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJhbGxvd1NlYXJjaFwiIGNsYXNzPVwic2VhcmNoLXdyYXBwZXJcIiBzdHlsZT1cInBhZGRpbmc6IDAuN2VtO1wiPlxuICAgICAgICAgICAgPGF4LXNlYXJjaC1ib3ggI3NlcmNoQm94IFtvbkRlbWFuZFRyYW5zbGF0ZV09XCJvbkRlbWFuZFRyYW5zbGF0ZVwiIFsodmFsdWUpXT1cInRleHRcIiAob25rZXkpPVwiaGFuZGxlS2V5RXZlbnRTZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKHRleHRDaGFuZ2VkKT1cInRleHRDaGFuZ2VkKCRldmVudClcIiAob25CdXR0b25DbGljayk9XCJ0ZXh0Q2hhbmdlZCgkZXZlbnQpXCI+XG4gICAgICAgICAgICA8L2F4LXNlYXJjaC1ib3g+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXggbGlzdC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgI2xpc3RDb250YWluZXIgY2xhc3M9XCJsaXN0LWNvbnRhaW5lci1pdGVtc1wiIChzY3JvbGwpPVwic2Nyb2xsZWQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRJdGVtcygpLmxlbmd0aD4wOyB0aGVuIHRoZW5UZW1wbGF0ZTsgZWxzZSBlbHNlVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3RoZW5UZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbY2xhc3MuYXgtc3RhdGUtZGlzYWJsZWRdPVwiaXNJdGVtRGlzYWJsZWQoaXRlbSlcIiBjbGFzcz1cImxpc3QtaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBnZXRJdGVtcygpO2xldCBpID0gaW5kZXhcIiBbY2xhc3MuZm9jdXNlZF09XCJpPT1jdXJyZW50Zm9jdXNlZEluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJpc0l0ZW1TZWxlY3RlZChpdGVtKVwiIChjbGljayk9XCJoYW5kbGVJdGVtQ2xpY2soJGV2ZW50LGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXgtY2hlY2stYm94ICpuZ0lmPVwic2hvd0NoZWNrQm94XCIgW3NpemVdPVwic2l6ZVwiIFt2YWx1ZV09XCJpc0l0ZW1TZWxlY3RlZChpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIoIWFsbG93TnVsbCAmJiBzZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMSAmJiBpc0l0ZW1TZWxlY3RlZChpdGVtKSkgfHwgaXNJdGVtRGlzYWJsZWQoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJoYW5kbGVJdGVtQ2xpY2soJGV2ZW50LGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9heC1jaGVjay1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvd1RlbXBsYXRlOyBlbHNlIGVsc2VUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwid2hpdGUtc3BhY2U6IG5vd3JhcDt0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztvdmVyZmxvdzogaGlkZGVuO2ZsZXg6IDE7XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJpdGVtW3RleHRGaWVsZF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiKHNob3dDaGVja0JveCkgPyB7J3BhZGRpbmctaW5saW5lLXN0YXJ0JzogJzAuNXJlbSd9OicnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicm93VGVtcGxhdGU7IGNvbnRleHQ6eyAkaW1wbGljaXQ6IGl0ZW0gfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNlbHNlVGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogbm93cmFwO3RleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO292ZXJmbG93OiBoaWRkZW47ZmxleDogMTtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIml0ZW1bdGV4dEZpZWxkXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCIoc2hvd0NoZWNrQm94KSA/IHsncGFkZGluZy1pbmxpbmUtc3RhcnQnOiAnMC41cmVtJ306JydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW1bdGV4dEZpZWxkXSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dMb2FkaW5nXCIgY2xhc3M9XCJheC1wYWQtc21cIiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjtcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXIgZmEtc3Bpbm5lci10aGlyZCBmYS1wdWxzZSBmYS0yeFwiIHN0eWxlPVwiY29sb3I6IHZhcigtLWF4LXByaW1hcnktY29sb3IpO1wiPjwvaT5cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwhLS0gPGF4LWxvYWRpbmctaW5kaWNhdG9yID48L2F4LWxvYWRpbmctaW5kaWNhdG9yPiAtLT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Vsc2VUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dMb2FkaW5nID09IHRydWU7IHRoZW4gc2VhcmNoVGVtcGxhdGUgZWxzZSBub0RhdGFUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3NlYXJjaFRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J2NvbW1vbi5zZWFyY2gnIHwgdHJhbnN9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9EYXRhVGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3snY29tbW9uLm5vRGF0YUZvdW5kJyB8IHRyYW5zfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbjwvYXgtZHJvcC1kb3duPiJdfQ==
|