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