@igo2/common 1.15.3 → 1.15.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/igo2-common.mjs +4 -4
- package/esm2020/lib/action/action.module.mjs +27 -27
- package/esm2020/lib/action/actionbar/actionbar-item.component.mjs +252 -252
- package/esm2020/lib/action/actionbar/actionbar.component.mjs +370 -370
- package/esm2020/lib/action/actionbar/actionbar.module.mjs +57 -57
- package/esm2020/lib/action/index.mjs +3 -3
- package/esm2020/lib/action/shared/action.enums.mjs +7 -7
- package/esm2020/lib/action/shared/action.interfaces.mjs +2 -2
- package/esm2020/lib/action/shared/index.mjs +4 -4
- package/esm2020/lib/action/shared/store.mjs +8 -8
- package/esm2020/lib/backdrop/backdrop.component.mjs +26 -26
- package/esm2020/lib/backdrop/backdrop.module.mjs +25 -25
- package/esm2020/lib/backdrop/index.mjs +2 -2
- package/esm2020/lib/badge-icon/badge-icon.directive.mjs +141 -141
- package/esm2020/lib/badge-icon/badge-icon.module.mjs +26 -26
- package/esm2020/lib/badge-icon/index.mjs +2 -2
- package/esm2020/lib/clickout/clickout.directive.mjs +32 -32
- package/esm2020/lib/clickout/clickout.module.mjs +24 -24
- package/esm2020/lib/clickout/index.mjs +2 -2
- package/esm2020/lib/clone/clone.module.mjs +24 -24
- package/esm2020/lib/clone/clone.pipe.mjs +24 -24
- package/esm2020/lib/clone/index.mjs +2 -2
- package/esm2020/lib/collapsible/collapse.directive.mjs +55 -55
- package/esm2020/lib/collapsible/collapsible.component.mjs +57 -57
- package/esm2020/lib/collapsible/collapsible.module.mjs +27 -27
- package/esm2020/lib/collapsible/index.mjs +3 -3
- package/esm2020/lib/confirm-dialog/confirm-dialog.component.mjs +44 -44
- package/esm2020/lib/confirm-dialog/confirm-dialog.module.mjs +29 -29
- package/esm2020/lib/confirm-dialog/confirm-dialog.service.mjs +24 -24
- package/esm2020/lib/confirm-dialog/index.mjs +3 -3
- package/esm2020/lib/context-menu/context-menu.directive.mjs +103 -103
- package/esm2020/lib/context-menu/context-menu.module.mjs +25 -25
- package/esm2020/lib/context-menu/index.mjs +3 -3
- package/esm2020/lib/context-menu/long-press.directive.mjs +67 -67
- package/esm2020/lib/custom-html/custom-html.component.mjs +28 -28
- package/esm2020/lib/custom-html/custom-html.module.mjs +47 -47
- package/esm2020/lib/custom-html/custom-html.pipe.mjs +18 -18
- package/esm2020/lib/custom-html/index.mjs +3 -3
- package/esm2020/lib/dom/dom.interfaces.mjs +2 -2
- package/esm2020/lib/dom/dom.module.mjs +23 -23
- package/esm2020/lib/dom/dom.service.mjs +30 -30
- package/esm2020/lib/dom/index.mjs +3 -3
- package/esm2020/lib/drag-drop/drag-drop.directive.mjs +87 -87
- package/esm2020/lib/drag-drop/drag-drop.module.mjs +24 -24
- package/esm2020/lib/drag-drop/index.mjs +2 -2
- package/esm2020/lib/dynamic-component/dynamic-component.module.mjs +31 -31
- package/esm2020/lib/dynamic-component/dynamic-outlet/dynamic-outlet.component.mjs +122 -122
- package/esm2020/lib/dynamic-component/dynamic-outlet/dynamic-outlet.module.mjs +28 -28
- package/esm2020/lib/dynamic-component/index.mjs +3 -3
- package/esm2020/lib/dynamic-component/shared/dynamic-component.interfaces.mjs +2 -2
- package/esm2020/lib/dynamic-component/shared/dynamic-component.mjs +174 -174
- package/esm2020/lib/dynamic-component/shared/dynamic-component.service.mjs +29 -29
- package/esm2020/lib/dynamic-component/shared/index.mjs +4 -4
- package/esm2020/lib/entity/entity-selector/entity-selector.component.mjs +194 -194
- package/esm2020/lib/entity/entity-selector/entity-selector.module.mjs +32 -32
- package/esm2020/lib/entity/entity-table/entity-table-row.directive.mjs +137 -137
- package/esm2020/lib/entity/entity-table/entity-table.component.mjs +1376 -1376
- package/esm2020/lib/entity/entity-table/entity-table.module.mjs +102 -102
- package/esm2020/lib/entity/entity-table-paginator/entity-table-paginator.component.mjs +132 -132
- package/esm2020/lib/entity/entity-table-paginator/entity-table-paginator.interface.mjs +2 -2
- package/esm2020/lib/entity/entity-table-paginator/entity-table-paginator.module.mjs +28 -28
- package/esm2020/lib/entity/entity.module.mjs +31 -31
- package/esm2020/lib/entity/index.mjs +6 -6
- package/esm2020/lib/entity/shared/entity.enums.mjs +28 -28
- package/esm2020/lib/entity/shared/entity.interfaces.mjs +2 -2
- package/esm2020/lib/entity/shared/entity.utils.mjs +67 -67
- package/esm2020/lib/entity/shared/index.mjs +10 -10
- package/esm2020/lib/entity/shared/state.mjs +191 -191
- package/esm2020/lib/entity/shared/store.mjs +288 -288
- package/esm2020/lib/entity/shared/strategies/filter-custom-function.mjs +79 -79
- package/esm2020/lib/entity/shared/strategies/filter-selection.mjs +84 -84
- package/esm2020/lib/entity/shared/strategies/index.mjs +4 -4
- package/esm2020/lib/entity/shared/strategies/strategy.mjs +75 -75
- package/esm2020/lib/entity/shared/transaction.mjs +316 -316
- package/esm2020/lib/entity/shared/view.mjs +315 -315
- package/esm2020/lib/entity/shared/watcher.mjs +120 -120
- package/esm2020/lib/flexible/flexible.component.mjs +148 -148
- package/esm2020/lib/flexible/flexible.module.mjs +24 -24
- package/esm2020/lib/flexible/flexible.type.mjs +2 -2
- package/esm2020/lib/flexible/index.mjs +3 -3
- package/esm2020/lib/form/form/form.component.mjs +117 -117
- package/esm2020/lib/form/form/form.module.mjs +40 -40
- package/esm2020/lib/form/form-field/form-field-select.component.mjs +127 -127
- package/esm2020/lib/form/form-field/form-field-text.component.mjs +104 -104
- package/esm2020/lib/form/form-field/form-field-textarea.component.mjs +105 -105
- package/esm2020/lib/form/form-field/form-field.component.mjs +72 -72
- package/esm2020/lib/form/form-field/form-field.module.mjs +74 -74
- package/esm2020/lib/form/form-field/index.mjs +5 -5
- package/esm2020/lib/form/form-group/form-group.component.mjs +105 -105
- package/esm2020/lib/form/form-group/form-group.module.mjs +40 -40
- package/esm2020/lib/form/form.module.mjs +49 -49
- package/esm2020/lib/form/index.mjs +5 -5
- package/esm2020/lib/form/shared/form-field-component.mjs +7 -7
- package/esm2020/lib/form/shared/form-field.service.mjs +29 -29
- package/esm2020/lib/form/shared/form.interfaces.mjs +2 -2
- package/esm2020/lib/form/shared/form.service.mjs +81 -81
- package/esm2020/lib/form/shared/form.utils.mjs +40 -40
- package/esm2020/lib/form/shared/index.mjs +6 -6
- package/esm2020/lib/home-button/home-button.component.mjs +31 -31
- package/esm2020/lib/home-button/home-button.module.mjs +41 -41
- package/esm2020/lib/home-button/index.mjs +2 -2
- package/esm2020/lib/image/image-error.directive.mjs +35 -35
- package/esm2020/lib/image/image.module.mjs +25 -25
- package/esm2020/lib/image/index.mjs +3 -3
- package/esm2020/lib/image/secure-image.pipe.mjs +59 -59
- package/esm2020/lib/interactive-tour/index.mjs +5 -5
- package/esm2020/lib/interactive-tour/interactive-tour.component.mjs +135 -135
- package/esm2020/lib/interactive-tour/interactive-tour.interface.mjs +2 -2
- package/esm2020/lib/interactive-tour/interactive-tour.loader.mjs +44 -44
- package/esm2020/lib/interactive-tour/interactive-tour.module.mjs +40 -40
- package/esm2020/lib/interactive-tour/interactive-tour.service.mjs +285 -285
- package/esm2020/lib/json-dialog/index.mjs +3 -3
- package/esm2020/lib/json-dialog/json-dialog.component.mjs +109 -109
- package/esm2020/lib/json-dialog/json-dialog.module.mjs +29 -29
- package/esm2020/lib/json-dialog/json-dialog.service.mjs +24 -24
- package/esm2020/lib/keyvalue/index.mjs +2 -2
- package/esm2020/lib/keyvalue/keyvalue.module.mjs +24 -24
- package/esm2020/lib/keyvalue/keyvalue.pipe.mjs +18 -18
- package/esm2020/lib/list/index.mjs +3 -3
- package/esm2020/lib/list/list-item.directive.mjs +165 -165
- package/esm2020/lib/list/list.component.mjs +262 -262
- package/esm2020/lib/list/list.module.mjs +29 -29
- package/esm2020/lib/panel/index.mjs +2 -2
- package/esm2020/lib/panel/panel.component.mjs +59 -59
- package/esm2020/lib/panel/panel.module.mjs +19 -19
- package/esm2020/lib/sidenav/index.mjs +2 -2
- package/esm2020/lib/sidenav/sidenav-shim.directive.mjs +55 -55
- package/esm2020/lib/sidenav/sidenav.module.mjs +24 -24
- package/esm2020/lib/spinner/index.mjs +3 -3
- package/esm2020/lib/spinner/spinner-activity.directive.mjs +47 -47
- package/esm2020/lib/spinner/spinner.component.mjs +35 -35
- package/esm2020/lib/spinner/spinner.module.mjs +21 -21
- package/esm2020/lib/stop-propagation/index.mjs +3 -3
- package/esm2020/lib/stop-propagation/stop-drop-propagation.directive.mjs +22 -22
- package/esm2020/lib/stop-propagation/stop-propagation.directive.mjs +21 -21
- package/esm2020/lib/stop-propagation/stop-propagation.module.mjs +25 -25
- package/esm2020/lib/table/index.mjs +6 -6
- package/esm2020/lib/table/table-action-color.enum.mjs +7 -7
- package/esm2020/lib/table/table-database.mjs +28 -28
- package/esm2020/lib/table/table-datasource.mjs +61 -61
- package/esm2020/lib/table/table-model.interface.mjs +2 -2
- package/esm2020/lib/table/table.component.mjs +297 -297
- package/esm2020/lib/table/table.module.mjs +67 -67
- package/esm2020/lib/tool/index.mjs +3 -3
- package/esm2020/lib/tool/shared/index.mjs +6 -6
- package/esm2020/lib/tool/shared/tool-component.mjs +9 -9
- package/esm2020/lib/tool/shared/tool.interface.mjs +2 -2
- package/esm2020/lib/tool/shared/tool.service.mjs +43 -43
- package/esm2020/lib/tool/shared/toolbox.enums.mjs +7 -7
- package/esm2020/lib/tool/shared/toolbox.mjs +179 -179
- package/esm2020/lib/tool/tool.module.mjs +32 -32
- package/esm2020/lib/tool/toolbox/toolbox.animation.mjs +10 -10
- package/esm2020/lib/tool/toolbox/toolbox.component.mjs +255 -255
- package/esm2020/lib/tool/toolbox/toolbox.module.mjs +36 -36
- package/esm2020/lib/widget/index.mjs +3 -3
- package/esm2020/lib/widget/shared/index.mjs +4 -4
- package/esm2020/lib/widget/shared/widget.interfaces.mjs +2 -2
- package/esm2020/lib/widget/shared/widget.mjs +4 -4
- package/esm2020/lib/widget/shared/widget.service.mjs +20 -20
- package/esm2020/lib/widget/widget-outlet/widget-outlet.component.mjs +116 -116
- package/esm2020/lib/widget/widget-outlet/widget-outlet.module.mjs +32 -32
- package/esm2020/lib/widget/widget.module.mjs +32 -32
- package/esm2020/lib/workspace/index.mjs +4 -4
- package/esm2020/lib/workspace/shared/index.mjs +4 -4
- package/esm2020/lib/workspace/shared/store.mjs +40 -40
- package/esm2020/lib/workspace/shared/workspace.interfaces.mjs +2 -2
- package/esm2020/lib/workspace/shared/workspace.mjs +117 -117
- package/esm2020/lib/workspace/workspace-selector/workspace-selector.component.mjs +51 -51
- package/esm2020/lib/workspace/workspace-selector/workspace-selector.module.mjs +32 -32
- package/esm2020/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.component.mjs +88 -88
- package/esm2020/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.module.mjs +32 -32
- package/esm2020/lib/workspace/workspace.module.mjs +27 -27
- package/esm2020/public_api.mjs +74 -74
- package/fesm2015/igo2-common.mjs +10016 -10016
- package/fesm2015/igo2-common.mjs.map +1 -1
- package/fesm2020/igo2-common.mjs +9319 -9319
- package/fesm2020/igo2-common.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/lib/action/action.module.d.ts +8 -8
- package/lib/action/actionbar/actionbar-item.component.d.ts +78 -78
- package/lib/action/actionbar/actionbar.component.d.ts +146 -146
- package/lib/action/actionbar/actionbar.module.d.ts +20 -20
- package/lib/action/index.d.ts +2 -2
- package/lib/action/shared/action.enums.d.ts +5 -5
- package/lib/action/shared/action.interfaces.d.ts +17 -17
- package/lib/action/shared/index.d.ts +3 -3
- package/lib/action/shared/store.d.ts +8 -8
- package/lib/backdrop/backdrop.component.d.ts +9 -9
- package/lib/backdrop/backdrop.module.d.ts +10 -10
- package/lib/backdrop/index.d.ts +1 -1
- package/lib/badge-icon/badge-icon.directive.d.ts +36 -36
- package/lib/badge-icon/badge-icon.module.d.ts +11 -11
- package/lib/badge-icon/index.d.ts +1 -1
- package/lib/clickout/clickout.directive.d.ts +10 -10
- package/lib/clickout/clickout.module.d.ts +9 -9
- package/lib/clickout/index.d.ts +1 -1
- package/lib/clone/clone.module.d.ts +9 -9
- package/lib/clone/clone.pipe.d.ts +7 -7
- package/lib/clone/index.d.ts +1 -1
- package/lib/collapsible/collapse.directive.d.ts +19 -19
- package/lib/collapsible/collapsible.component.d.ts +13 -13
- package/lib/collapsible/collapsible.module.d.ts +12 -12
- package/lib/collapsible/index.d.ts +2 -2
- package/lib/confirm-dialog/confirm-dialog.component.d.ts +9 -9
- package/lib/confirm-dialog/confirm-dialog.module.d.ts +12 -12
- package/lib/confirm-dialog/confirm-dialog.service.d.ts +12 -12
- package/lib/confirm-dialog/index.d.ts +2 -2
- package/lib/context-menu/context-menu.directive.d.ts +21 -21
- package/lib/context-menu/context-menu.module.d.ts +10 -10
- package/lib/context-menu/index.d.ts +2 -2
- package/lib/context-menu/long-press.directive.d.ts +20 -20
- package/lib/custom-html/custom-html.component.d.ts +9 -9
- package/lib/custom-html/custom-html.module.d.ts +16 -16
- package/lib/custom-html/custom-html.pipe.d.ts +10 -10
- package/lib/custom-html/index.d.ts +2 -2
- package/lib/dom/dom.interfaces.d.ts +10 -10
- package/lib/dom/dom.module.d.ts +8 -8
- package/lib/dom/dom.service.d.ts +10 -10
- package/lib/dom/index.d.ts +2 -2
- package/lib/drag-drop/drag-drop.directive.d.ts +14 -14
- package/lib/drag-drop/drag-drop.module.d.ts +9 -9
- package/lib/drag-drop/index.d.ts +1 -1
- package/lib/dynamic-component/dynamic-component.module.d.ts +8 -8
- package/lib/dynamic-component/dynamic-outlet/dynamic-outlet.component.d.ts +70 -70
- package/lib/dynamic-component/dynamic-outlet/dynamic-outlet.module.d.ts +11 -11
- package/lib/dynamic-component/index.d.ts +2 -2
- package/lib/dynamic-component/shared/dynamic-component.d.ts +88 -88
- package/lib/dynamic-component/shared/dynamic-component.interfaces.d.ts +3 -3
- package/lib/dynamic-component/shared/dynamic-component.service.d.ts +18 -18
- package/lib/dynamic-component/shared/index.d.ts +3 -3
- package/lib/entity/entity-selector/entity-selector.component.d.ts +92 -92
- package/lib/entity/entity-selector/entity-selector.module.d.ts +13 -13
- package/lib/entity/entity-table/entity-table-row.directive.d.ts +69 -69
- package/lib/entity/entity-table/entity-table.component.d.ts +333 -333
- package/lib/entity/entity-table/entity-table.module.d.ts +29 -29
- package/lib/entity/entity-table-paginator/entity-table-paginator.component.d.ts +49 -49
- package/lib/entity/entity-table-paginator/entity-table-paginator.interface.d.ts +8 -8
- package/lib/entity/entity-table-paginator/entity-table-paginator.module.d.ts +11 -11
- package/lib/entity/entity.module.d.ts +10 -10
- package/lib/entity/index.d.ts +5 -5
- package/lib/entity/shared/entity.enums.d.ts +23 -23
- package/lib/entity/shared/entity.interfaces.d.ts +114 -114
- package/lib/entity/shared/entity.utils.d.ts +49 -49
- package/lib/entity/shared/index.d.ts +9 -9
- package/lib/entity/shared/state.d.ts +103 -103
- package/lib/entity/shared/store.d.ts +176 -176
- package/lib/entity/shared/strategies/filter-custom-function.d.ts +51 -51
- package/lib/entity/shared/strategies/filter-selection.d.ts +48 -48
- package/lib/entity/shared/strategies/index.d.ts +3 -3
- package/lib/entity/shared/strategies/strategy.d.ts +56 -56
- package/lib/entity/shared/transaction.d.ts +168 -168
- package/lib/entity/shared/view.d.ts +193 -193
- package/lib/entity/shared/watcher.d.ts +72 -72
- package/lib/flexible/flexible.component.d.ts +41 -41
- package/lib/flexible/flexible.module.d.ts +9 -9
- package/lib/flexible/flexible.type.d.ts +2 -2
- package/lib/flexible/index.d.ts +2 -2
- package/lib/form/form/form.component.d.ts +53 -53
- package/lib/form/form/form.module.d.ts +12 -12
- package/lib/form/form-field/form-field-select.component.d.ts +48 -48
- package/lib/form/form-field/form-field-text.component.d.ts +41 -41
- package/lib/form/form-field/form-field-textarea.component.d.ts +41 -41
- package/lib/form/form-field/form-field.component.d.ts +34 -34
- package/lib/form/form-field/form-field.module.d.ts +21 -21
- package/lib/form/form-field/index.d.ts +4 -4
- package/lib/form/form-group/form-group.component.d.ts +49 -49
- package/lib/form/form-group/form-group.module.d.ts +14 -14
- package/lib/form/form.module.d.ts +13 -13
- package/lib/form/index.d.ts +4 -4
- package/lib/form/shared/form-field-component.d.ts +1 -1
- package/lib/form/shared/form-field.service.d.ts +19 -19
- package/lib/form/shared/form.interfaces.d.ts +57 -57
- package/lib/form/shared/form.service.d.ts +15 -15
- package/lib/form/shared/form.utils.d.ts +11 -11
- package/lib/form/shared/index.d.ts +5 -5
- package/lib/home-button/home-button.component.d.ts +9 -9
- package/lib/home-button/home-button.module.d.ts +15 -15
- package/lib/home-button/index.d.ts +1 -1
- package/lib/image/image-error.directive.d.ts +11 -11
- package/lib/image/image.module.d.ts +10 -10
- package/lib/image/index.d.ts +2 -2
- package/lib/image/secure-image.pipe.d.ts +13 -13
- package/lib/interactive-tour/index.d.ts +4 -4
- package/lib/interactive-tour/interactive-tour.component.d.ts +30 -30
- package/lib/interactive-tour/interactive-tour.interface.d.ts +32 -32
- package/lib/interactive-tour/interactive-tour.loader.d.ts +18 -18
- package/lib/interactive-tour/interactive-tour.module.d.ts +12 -12
- package/lib/interactive-tour/interactive-tour.service.d.ts +29 -29
- package/lib/json-dialog/index.d.ts +2 -2
- package/lib/json-dialog/json-dialog.component.d.ts +13 -13
- package/lib/json-dialog/json-dialog.module.d.ts +13 -13
- package/lib/json-dialog/json-dialog.service.d.ts +10 -10
- package/lib/keyvalue/index.d.ts +1 -1
- package/lib/keyvalue/keyvalue.module.d.ts +9 -9
- package/lib/keyvalue/keyvalue.pipe.d.ts +7 -7
- package/lib/list/index.d.ts +2 -2
- package/lib/list/list-item.directive.d.ts +43 -43
- package/lib/list/list.component.d.ts +51 -51
- package/lib/list/list.module.d.ts +14 -14
- package/lib/panel/index.d.ts +1 -1
- package/lib/panel/panel.component.d.ts +10 -10
- package/lib/panel/panel.module.d.ts +8 -8
- package/lib/sidenav/index.d.ts +1 -1
- package/lib/sidenav/sidenav-shim.directive.d.ts +20 -20
- package/lib/sidenav/sidenav.module.d.ts +9 -9
- package/lib/spinner/index.d.ts +2 -2
- package/lib/spinner/spinner-activity.directive.d.ts +32 -32
- package/lib/spinner/spinner.component.d.ts +12 -12
- package/lib/spinner/spinner.module.d.ts +10 -10
- package/lib/stop-propagation/index.d.ts +2 -2
- package/lib/stop-propagation/stop-drop-propagation.directive.d.ts +6 -6
- package/lib/stop-propagation/stop-propagation.directive.d.ts +6 -6
- package/lib/stop-propagation/stop-propagation.module.d.ts +10 -10
- package/lib/table/index.d.ts +5 -5
- package/lib/table/table-action-color.enum.d.ts +5 -5
- package/lib/table/table-database.d.ts +10 -10
- package/lib/table/table-datasource.d.ts +17 -17
- package/lib/table/table-model.interface.d.ts +28 -28
- package/lib/table/table.component.d.ts +40 -40
- package/lib/table/table.module.d.ts +20 -20
- package/lib/tool/index.d.ts +2 -2
- package/lib/tool/shared/index.d.ts +5 -5
- package/lib/tool/shared/tool-component.d.ts +2 -2
- package/lib/tool/shared/tool.interface.d.ts +18 -18
- package/lib/tool/shared/tool.service.d.ts +30 -30
- package/lib/tool/shared/toolbox.d.ts +95 -95
- package/lib/tool/shared/toolbox.enums.d.ts +5 -5
- package/lib/tool/tool.module.d.ts +10 -10
- package/lib/tool/toolbox/toolbox.animation.d.ts +2 -2
- package/lib/tool/toolbox/toolbox.component.d.ts +127 -127
- package/lib/tool/toolbox/toolbox.module.d.ts +13 -13
- package/lib/widget/index.d.ts +2 -2
- package/lib/widget/shared/index.d.ts +3 -3
- package/lib/widget/shared/widget.d.ts +4 -4
- package/lib/widget/shared/widget.interfaces.d.ts +12 -12
- package/lib/widget/shared/widget.service.d.ts +10 -10
- package/lib/widget/widget-outlet/widget-outlet.component.d.ts +71 -71
- package/lib/widget/widget-outlet/widget-outlet.module.d.ts +12 -12
- package/lib/widget/widget.module.d.ts +8 -8
- package/lib/workspace/index.d.ts +3 -3
- package/lib/workspace/shared/index.d.ts +3 -3
- package/lib/workspace/shared/store.d.ts +20 -20
- package/lib/workspace/shared/workspace.d.ts +108 -108
- package/lib/workspace/shared/workspace.interfaces.d.ts +11 -11
- package/lib/workspace/workspace-selector/workspace-selector.component.d.ts +39 -39
- package/lib/workspace/workspace-selector/workspace-selector.module.d.ts +12 -12
- package/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.component.d.ts +57 -57
- package/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.module.d.ts +12 -12
- package/lib/workspace/workspace.module.d.ts +9 -9
- package/package.json +3 -3
- package/public_api.d.ts +70 -70
- package/style/common.theming.scss +12 -12
- package/style/partial/action.scss +18 -18
- package/style/partial/common.variables.scss +8 -8
|
@@ -1,262 +1,262 @@
|
|
|
1
|
-
import { Component, Input, ContentChildren, HostListener } from '@angular/core';
|
|
2
|
-
import { ListItemDirective } from './list-item.directive';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@angular/common";
|
|
5
|
-
import * as i2 from "@angular/material/list";
|
|
6
|
-
import * as i3 from "../clickout/clickout.directive";
|
|
7
|
-
const _c0 = function (a0) { return { "selectable": a0 }; };
|
|
8
|
-
const _c1 = ["*"];
|
|
9
|
-
export class ListComponent {
|
|
10
|
-
constructor(el) {
|
|
11
|
-
this.el = el;
|
|
12
|
-
this._navigation = true;
|
|
13
|
-
this._selection = true;
|
|
14
|
-
this.subscriptions = [];
|
|
15
|
-
}
|
|
16
|
-
get navigation() {
|
|
17
|
-
return this._navigation;
|
|
18
|
-
}
|
|
19
|
-
set navigation(value) {
|
|
20
|
-
this._navigation = value;
|
|
21
|
-
}
|
|
22
|
-
get selection() {
|
|
23
|
-
return this._selection;
|
|
24
|
-
}
|
|
25
|
-
set selection(value) {
|
|
26
|
-
this._selection = value;
|
|
27
|
-
}
|
|
28
|
-
get selectedItem() {
|
|
29
|
-
return this._selectedItem;
|
|
30
|
-
}
|
|
31
|
-
set selectedItem(value) {
|
|
32
|
-
this.focusedItem = value;
|
|
33
|
-
this._selectedItem = value;
|
|
34
|
-
}
|
|
35
|
-
get focusedItem() {
|
|
36
|
-
return this._focusedItem;
|
|
37
|
-
}
|
|
38
|
-
set focusedItem(value) {
|
|
39
|
-
this._focusedItem = value;
|
|
40
|
-
}
|
|
41
|
-
handleKeyboardEvent(event) {
|
|
42
|
-
// It would be nice to be able to unsubscribe to the event
|
|
43
|
-
// completely but until ES7 this won't be possible because
|
|
44
|
-
// document events are not observables
|
|
45
|
-
if (this.navigationEnabled) {
|
|
46
|
-
if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
|
|
47
|
-
event.preventDefault();
|
|
48
|
-
this.navigate(event.key);
|
|
49
|
-
}
|
|
50
|
-
else if (event.key === 'Enter') {
|
|
51
|
-
this.select(this.focusedItem);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
ngOnInit() {
|
|
56
|
-
this.enableNavigation();
|
|
57
|
-
}
|
|
58
|
-
ngAfterViewInit() {
|
|
59
|
-
if (this.listItems.length) {
|
|
60
|
-
this.init();
|
|
61
|
-
}
|
|
62
|
-
this.listItems$$ = this.listItems.changes.subscribe((items) => this.init());
|
|
63
|
-
}
|
|
64
|
-
ngOnDestroy() {
|
|
65
|
-
this.listItems$$.unsubscribe();
|
|
66
|
-
}
|
|
67
|
-
focus(item) {
|
|
68
|
-
if (!this.selection) {
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
this.unfocus();
|
|
72
|
-
// We need to make this check because dynamic
|
|
73
|
-
// lists such as in the search results list may fail
|
|
74
|
-
if (item !== undefined) {
|
|
75
|
-
item.focused = true;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
unfocus() {
|
|
79
|
-
if (this.focusedItem !== undefined) {
|
|
80
|
-
this.focusedItem.focused = false;
|
|
81
|
-
}
|
|
82
|
-
this.focusedItem = undefined;
|
|
83
|
-
}
|
|
84
|
-
focusNext() {
|
|
85
|
-
const items = this.listItems.toArray();
|
|
86
|
-
let item;
|
|
87
|
-
const igoList = this.el.nativeElement;
|
|
88
|
-
let disabled = true;
|
|
89
|
-
let index = this.getFocusedIndex();
|
|
90
|
-
if (index === undefined) {
|
|
91
|
-
index = -1;
|
|
92
|
-
}
|
|
93
|
-
while (disabled && index < items.length - 1) {
|
|
94
|
-
index += 1;
|
|
95
|
-
item = items[index];
|
|
96
|
-
disabled = item.disabled;
|
|
97
|
-
}
|
|
98
|
-
if (item !== undefined) {
|
|
99
|
-
this.focus(item);
|
|
100
|
-
}
|
|
101
|
-
if (!items[index + 1]) {
|
|
102
|
-
igoList.scrollTop = igoList.scrollHeight - igoList.clientHeight;
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
if (item !== undefined && !this.isScrolledIntoView(item.el.nativeElement)) {
|
|
106
|
-
igoList.scrollTop =
|
|
107
|
-
item.el.nativeElement.offsetTop +
|
|
108
|
-
item.el.nativeElement.children[0].offsetHeight -
|
|
109
|
-
igoList.clientHeight;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
focusPrevious() {
|
|
113
|
-
const items = this.listItems.toArray();
|
|
114
|
-
let item;
|
|
115
|
-
const igoList = this.el.nativeElement;
|
|
116
|
-
let disabled = true;
|
|
117
|
-
let index = this.getFocusedIndex();
|
|
118
|
-
while (disabled && index > 0) {
|
|
119
|
-
index -= 1;
|
|
120
|
-
item = items[index];
|
|
121
|
-
disabled = item.disabled;
|
|
122
|
-
}
|
|
123
|
-
if (item !== undefined) {
|
|
124
|
-
this.focus(item);
|
|
125
|
-
}
|
|
126
|
-
if (!items[index - 1]) {
|
|
127
|
-
igoList.scrollTop = 0;
|
|
128
|
-
return;
|
|
129
|
-
}
|
|
130
|
-
if (item !== undefined && !this.isScrolledIntoView(item.el.nativeElement)) {
|
|
131
|
-
const padding = 3;
|
|
132
|
-
igoList.scrollTop = item.el.nativeElement.offsetTop - padding;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
select(item) {
|
|
136
|
-
if (!this.selection) {
|
|
137
|
-
return;
|
|
138
|
-
}
|
|
139
|
-
this.unselect();
|
|
140
|
-
if (item !== undefined) {
|
|
141
|
-
item.selected = true;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
unselect() {
|
|
145
|
-
this.unfocus();
|
|
146
|
-
if (this.selectedItem !== undefined) {
|
|
147
|
-
this.selectedItem.selected = false;
|
|
148
|
-
}
|
|
149
|
-
this.selectedItem = undefined;
|
|
150
|
-
}
|
|
151
|
-
enableNavigation() {
|
|
152
|
-
if (this.navigation) {
|
|
153
|
-
this.navigationEnabled = true;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
disableNavigation() {
|
|
157
|
-
this.navigationEnabled = false;
|
|
158
|
-
}
|
|
159
|
-
scrollToItem(item) {
|
|
160
|
-
this.el.nativeElement.scrollTop = item.getOffsetTop();
|
|
161
|
-
}
|
|
162
|
-
isScrolledIntoView(elem) {
|
|
163
|
-
const docViewTop = this.el.nativeElement.scrollTop + this.el.nativeElement.offsetTop;
|
|
164
|
-
const docViewBottom = docViewTop + this.el.nativeElement.clientHeight;
|
|
165
|
-
const elemTop = elem.offsetTop;
|
|
166
|
-
const elemBottom = elemTop + elem.children[0].offsetHeight;
|
|
167
|
-
return elemBottom <= docViewBottom && elemTop >= docViewTop;
|
|
168
|
-
}
|
|
169
|
-
init() {
|
|
170
|
-
this.subscribe();
|
|
171
|
-
this.selectedItem = this.findSelectedItem();
|
|
172
|
-
this.focusedItem = this.findFocusedItem();
|
|
173
|
-
this.enableNavigation();
|
|
174
|
-
}
|
|
175
|
-
subscribe() {
|
|
176
|
-
this.unsubscribe();
|
|
177
|
-
this.listItems.toArray().forEach(item => {
|
|
178
|
-
this.subscriptions.push(item.beforeSelect.subscribe((item2) => this.handleItemBeforeSelect(item2)));
|
|
179
|
-
this.subscriptions.push(item.select.subscribe((item2) => this.handleItemSelect(item2)));
|
|
180
|
-
this.subscriptions.push(item.beforeFocus.subscribe((item2) => this.handleItemBeforeFocus(item2)));
|
|
181
|
-
this.subscriptions.push(item.focus.subscribe((item2) => this.handleItemFocus(item2)));
|
|
182
|
-
}, this);
|
|
183
|
-
}
|
|
184
|
-
unsubscribe() {
|
|
185
|
-
this.subscriptions.forEach((sub) => sub.unsubscribe());
|
|
186
|
-
this.subscriptions = [];
|
|
187
|
-
}
|
|
188
|
-
handleItemBeforeFocus(item) {
|
|
189
|
-
if (item !== this.focusedItem) {
|
|
190
|
-
this.unfocus();
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
handleItemFocus(item) {
|
|
194
|
-
this.focusedItem = item;
|
|
195
|
-
}
|
|
196
|
-
handleItemBeforeSelect(item) {
|
|
197
|
-
if (item !== this.focusedItem) {
|
|
198
|
-
this.unselect();
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
handleItemSelect(item) {
|
|
202
|
-
this.selectedItem = item;
|
|
203
|
-
}
|
|
204
|
-
findSelectedItem() {
|
|
205
|
-
return this.listItems.toArray().find(item => item.selected);
|
|
206
|
-
}
|
|
207
|
-
findFocusedItem() {
|
|
208
|
-
return this.listItems.toArray().find(item => item.focused);
|
|
209
|
-
}
|
|
210
|
-
getFocusedIndex() {
|
|
211
|
-
return this.listItems
|
|
212
|
-
.toArray()
|
|
213
|
-
.findIndex(item => item === this.focusedItem);
|
|
214
|
-
}
|
|
215
|
-
navigate(key) {
|
|
216
|
-
switch (key) {
|
|
217
|
-
case 'ArrowUp':
|
|
218
|
-
this.focusPrevious();
|
|
219
|
-
break;
|
|
220
|
-
case 'ArrowDown':
|
|
221
|
-
this.focusNext();
|
|
222
|
-
break;
|
|
223
|
-
default:
|
|
224
|
-
break;
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
ListComponent.ɵfac = function ListComponent_Factory(t) { return new (t || ListComponent)(i0.ɵɵdirectiveInject(i0.ElementRef)); };
|
|
229
|
-
ListComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ListComponent, selectors: [["igo-list"]], contentQueries: function ListComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
|
|
230
|
-
i0.ɵɵcontentQuery(dirIndex, ListItemDirective, 5);
|
|
231
|
-
} if (rf & 2) {
|
|
232
|
-
let _t;
|
|
233
|
-
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.listItems = _t);
|
|
234
|
-
} }, hostBindings: function ListComponent_HostBindings(rf, ctx) { if (rf & 1) {
|
|
235
|
-
i0.ɵɵlistener("keydown", function ListComponent_keydown_HostBindingHandler($event) { return ctx.handleKeyboardEvent($event); }, false, i0.ɵɵresolveDocument)("enter", function ListComponent_enter_HostBindingHandler($event) { return ctx.handleKeyboardEvent($event); }, false, i0.ɵɵresolveDocument);
|
|
236
|
-
} }, inputs: { navigation: "navigation", selection: "selection" }, ngContentSelectors: _c1, decls: 2, vars: 3, consts: [["igoClickout", "", 3, "ngClass", "clickout", "click"]], template: function ListComponent_Template(rf, ctx) { if (rf & 1) {
|
|
237
|
-
i0.ɵɵprojectionDef();
|
|
238
|
-
i0.ɵɵelementStart(0, "mat-list", 0);
|
|
239
|
-
i0.ɵɵlistener("clickout", function ListComponent_Template_mat_list_clickout_0_listener() { return ctx.disableNavigation(); })("click", function ListComponent_Template_mat_list_click_0_listener() { return ctx.enableNavigation(); });
|
|
240
|
-
i0.ɵɵprojection(1);
|
|
241
|
-
i0.ɵɵelementEnd();
|
|
242
|
-
} if (rf & 2) {
|
|
243
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(1, _c0, ctx.selection));
|
|
244
|
-
} }, dependencies: [i1.NgClass, i2.MatList, i3.ClickoutDirective], styles: ["[_nghost-%COMP%]{display:block;height:100%;overflow:auto;position:relative}mat-list[_ngcontent-%COMP%]{padding-top:0}[_nghost-%COMP%]{position:static}[_nghost-%COMP%] .mat-list .mat-list-item .mat-list-text>*{white-space:normal;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;max-height:36px;line-height:18px;-webkit-box-orient:vertical;-webkit-line-clamp:2}[_nghost-%COMP%] .mat-list .mat-list-item.mat-list-item-with-avatar .mat-list-item-content{display:-webkit-flex;height:46px;padding:3px}[_nghost-%COMP%] .mat-list .mat-list-item.mat-list-item-with-avatar{height:46px}[_nghost-%COMP%] .mat-list igo-collapsible>.mat-list-item>.mat-list-item-content>.mat-list-text>.mat-line{font-weight:700;opacity:.9}[_nghost-%COMP%] .mat-list .mat-list-item.mat-list-item-with-avatar .mat-list-item-content>mat-icon{padding:8px}[_nghost-%COMP%] [igolistitem] mat-list-item [mat-list-avatar]{height:auto;width:40px}[_nghost-%COMP%] mat-list.selectable[_ngcontent-%COMP%] [igolistitem]:not(.igo-list-item-disabled) mat-list-item:hover{cursor:pointer}[_nghost-%COMP%] [igolistitem]:focus{outline:none}"] });
|
|
245
|
-
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ListComponent, [{
|
|
246
|
-
type: Component,
|
|
247
|
-
args: [{ selector: 'igo-list', template: "<mat-list\
|
|
248
|
-
}], function () { return [{ type: i0.ElementRef }]; }, { navigation: [{
|
|
249
|
-
type: Input
|
|
250
|
-
}], selection: [{
|
|
251
|
-
type: Input
|
|
252
|
-
}], listItems: [{
|
|
253
|
-
type: ContentChildren,
|
|
254
|
-
args: [ListItemDirective, { descendants: true }]
|
|
255
|
-
}], handleKeyboardEvent: [{
|
|
256
|
-
type: HostListener,
|
|
257
|
-
args: ['document:keydown', ['$event']]
|
|
258
|
-
}, {
|
|
259
|
-
type: HostListener,
|
|
260
|
-
args: ['document:enter', ['$event']]
|
|
261
|
-
}] }); })();
|
|
262
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2xpYi9saXN0L2xpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9saWIvbGlzdC9saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBSVQsS0FBSyxFQUNMLGVBQWUsRUFDZixZQUFZLEVBRWIsTUFBTSxlQUFlLENBQUM7QUFLdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7QUFPMUQsTUFBTSxPQUFPLGFBQWE7SUEyRHhCLFlBQW9CLEVBQWM7UUFBZCxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBbkQxQixnQkFBVyxHQUFHLElBQUksQ0FBQztRQVNuQixlQUFVLEdBQUcsSUFBSSxDQUFDO1FBcUJsQixrQkFBYSxHQUFtQixFQUFFLENBQUM7SUFxQk4sQ0FBQztJQTFEdEMsSUFDSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFDRCxJQUFJLFVBQVUsQ0FBQyxLQUFjO1FBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzNCLENBQUM7SUFHRCxJQUNJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUNELElBQUksU0FBUyxDQUFDLEtBQWM7UUFDMUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUdELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBQ0QsSUFBSSxZQUFZLENBQUMsS0FBd0I7UUFDdkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLGFBQWEsR0FB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bXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIE9uSW5pdCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgSW5wdXQsXHJcbiAgQ29udGVudENoaWxkcmVuLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBFbGVtZW50UmVmXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB0eXBlIHsgUXVlcnlMaXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IExpc3RJdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi9saXN0LWl0ZW0uZGlyZWN0aXZlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWdvLWxpc3QnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9saXN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9saXN0LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KClcclxuICBnZXQgbmF2aWdhdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLl9uYXZpZ2F0aW9uO1xyXG4gIH1cclxuICBzZXQgbmF2aWdhdGlvbih2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fbmF2aWdhdGlvbiA9IHZhbHVlO1xyXG4gIH1cclxuICBwcml2YXRlIF9uYXZpZ2F0aW9uID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgc2VsZWN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbjtcclxuICB9XHJcbiAgc2V0IHNlbGVjdGlvbih2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fc2VsZWN0aW9uID0gdmFsdWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3NlbGVjdGlvbiA9IHRydWU7XHJcblxyXG4gIGdldCBzZWxlY3RlZEl0ZW0oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJdGVtO1xyXG4gIH1cclxuICBzZXQgc2VsZWN0ZWRJdGVtKHZhbHVlOiBMaXN0SXRlbURpcmVjdGl2ZSkge1xyXG4gICAgdGhpcy5mb2N1c2VkSXRlbSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fc2VsZWN0ZWRJdGVtID0gdmFsdWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3NlbGVjdGVkSXRlbTogTGlzdEl0ZW1EaXJlY3RpdmU7XHJcblxyXG4gIGdldCBmb2N1c2VkSXRlbSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9mb2N1c2VkSXRlbTtcclxuICB9XHJcbiAgc2V0IGZvY3VzZWRJdGVtKHZhbHVlOiBMaXN0SXRlbURpcmVjdGl2ZSkge1xyXG4gICAgdGhpcy5fZm9jdXNlZEl0ZW0gPSB2YWx1ZTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfZm9jdXNlZEl0ZW06IExpc3RJdGVtRGlyZWN0aXZlO1xyXG5cclxuICBwcml2YXRlIG5hdmlnYXRpb25FbmFibGVkOiBib29sZWFuO1xyXG4gIHByaXZhdGUgbGlzdEl0ZW1zJCQ6IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcblxyXG4gIEBDb250ZW50Q2hpbGRyZW4oTGlzdEl0ZW1EaXJlY3RpdmUsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcclxuICBsaXN0SXRlbXM6IFF1ZXJ5TGlzdDxMaXN0SXRlbURpcmVjdGl2ZT47XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmVudGVyJywgWyckZXZlbnQnXSlcclxuICBoYW5kbGVLZXlib2FyZEV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAvLyBJdCB3b3VsZCBiZSBuaWNlIHRvIGJlIGFibGUgdG8gdW5zdWJzY3JpYmUgdG8gdGhlIGV2ZW50XHJcbiAgICAvLyBjb21wbGV0ZWx5IGJ1dCB1bnRpbCBFUzcgdGhpcyB3b24ndCBiZSBwb3NzaWJsZSBiZWNhdXNlXHJcbiAgICAvLyBkb2N1bWVudCBldmVudHMgYXJlIG5vdCBvYnNlcnZhYmxlc1xyXG4gICAgaWYgKHRoaXMubmF2aWdhdGlvbkVuYWJsZWQpIHtcclxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGUoZXZlbnQua2V5KTtcclxuICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdCh0aGlzLmZvY3VzZWRJdGVtKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZikge31cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmVuYWJsZU5hdmlnYXRpb24oKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGlmICh0aGlzLmxpc3RJdGVtcy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5saXN0SXRlbXMkJCA9IHRoaXMubGlzdEl0ZW1zLmNoYW5nZXMuc3Vic2NyaWJlKFxyXG4gICAgICAoaXRlbXM6IExpc3RJdGVtRGlyZWN0aXZlW10pID0+IHRoaXMuaW5pdCgpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLmxpc3RJdGVtcyQkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBmb2N1cyhpdGVtPzogTGlzdEl0ZW1EaXJlY3RpdmUpIHtcclxuICAgIGlmICghdGhpcy5zZWxlY3Rpb24pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudW5mb2N1cygpO1xyXG5cclxuICAgIC8vIFdlIG5lZWQgdG8gbWFrZSB0aGlzIGNoZWNrIGJlY2F1c2UgZHluYW1pY1xyXG4gICAgLy8gbGlzdHMgc3VjaCBhcyBpbiB0aGUgc2VhcmNoIHJlc3VsdHMgbGlzdCBtYXkgZmFpbFxyXG4gICAgaWYgKGl0ZW0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpdGVtLmZvY3VzZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdW5mb2N1cygpIHtcclxuICAgIGlmICh0aGlzLmZvY3VzZWRJdGVtICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5mb2N1c2VkSXRlbS5mb2N1c2VkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5mb2N1c2VkSXRlbSA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIGZvY3VzTmV4dCgpIHtcclxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5saXN0SXRlbXMudG9BcnJheSgpO1xyXG4gICAgbGV0IGl0ZW07XHJcbiAgICBjb25zdCBpZ29MaXN0ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xyXG4gICAgbGV0IGRpc2FibGVkID0gdHJ1ZTtcclxuICAgIGxldCBpbmRleCA9IHRoaXMuZ2V0Rm9jdXNlZEluZGV4KCk7XHJcbiAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpbmRleCA9IC0xO1xyXG4gICAgfVxyXG5cclxuICAgIHdoaWxlIChkaXNhYmxlZCAmJiBpbmRleCA8IGl0ZW1zLmxlbmd0aCAtIDEpIHtcclxuICAgICAgaW5kZXggKz0gMTtcclxuICAgICAgaXRlbSA9IGl0ZW1zW2luZGV4XTtcclxuICAgICAgZGlzYWJsZWQgPSBpdGVtLmRpc2FibGVkO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpdGVtICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5mb2N1cyhpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWl0ZW1zW2luZGV4ICsgMV0pIHtcclxuICAgICAgaWdvTGlzdC5zY3JvbGxUb3AgPSBpZ29MaXN0LnNjcm9sbEhlaWdodCAtIGlnb0xpc3QuY2xpZW50SGVpZ2h0O1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGl0ZW0gIT09IHVuZGVmaW5lZCAmJiAhdGhpcy5pc1Njcm9sbGVkSW50b1ZpZXcoaXRlbS5lbC5uYXRpdmVFbGVtZW50KSkge1xyXG4gICAgICBpZ29MaXN0LnNjcm9sbFRvcCA9XHJcbiAgICAgICAgaXRlbS5lbC5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcCArXHJcbiAgICAgICAgaXRlbS5lbC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdLm9mZnNldEhlaWdodCAtXHJcbiAgICAgICAgaWdvTGlzdC5jbGllbnRIZWlnaHQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmb2N1c1ByZXZpb3VzKCkge1xyXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmxpc3RJdGVtcy50b0FycmF5KCk7XHJcbiAgICBsZXQgaXRlbTogTGlzdEl0ZW1EaXJlY3RpdmU7XHJcbiAgICBjb25zdCBpZ29MaXN0ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xyXG4gICAgbGV0IGRpc2FibGVkID0gdHJ1ZTtcclxuICAgIGxldCBpbmRleCA9IHRoaXMuZ2V0Rm9jdXNlZEluZGV4KCk7XHJcblxyXG4gICAgd2hpbGUgKGRpc2FibGVkICYmIGluZGV4ID4gMCkge1xyXG4gICAgICBpbmRleCAtPSAxO1xyXG4gICAgICBpdGVtID0gaXRlbXNbaW5kZXhdO1xyXG4gICAgICBkaXNhYmxlZCA9IGl0ZW0uZGlzYWJsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGl0ZW0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmZvY3VzKGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaXRlbXNbaW5kZXggLSAxXSkge1xyXG4gICAgICBpZ29MaXN0LnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXRlbSAhPT0gdW5kZWZpbmVkICYmICF0aGlzLmlzU2Nyb2xsZWRJbnRvVmlldyhpdGVtLmVsLm5hdGl2ZUVsZW1lbnQpKSB7XHJcbiAgICAgIGNvbnN0IHBhZGRpbmcgPSAzO1xyXG4gICAgICBpZ29MaXN0LnNjcm9sbFRvcCA9IGl0ZW0uZWwubmF0aXZlRWxlbWVudC5vZmZzZXRUb3AgLSBwYWRkaW5nO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0KGl0ZW0/OiBMaXN0SXRlbURpcmVjdGl2ZSkge1xyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGlvbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51bnNlbGVjdCgpO1xyXG5cclxuICAgIGlmIChpdGVtICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaXRlbS5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1bnNlbGVjdCgpIHtcclxuICAgIHRoaXMudW5mb2N1cygpO1xyXG5cclxuICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBlbmFibGVOYXZpZ2F0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMubmF2aWdhdGlvbikge1xyXG4gICAgICB0aGlzLm5hdmlnYXRpb25FbmFibGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRpc2FibGVOYXZpZ2F0aW9uKCkge1xyXG4gICAgdGhpcy5uYXZpZ2F0aW9uRW5hYmxlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2Nyb2xsVG9JdGVtKGl0ZW06IExpc3RJdGVtRGlyZWN0aXZlKSB7XHJcbiAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gaXRlbS5nZXRPZmZzZXRUb3AoKTtcclxuICB9XHJcblxyXG4gIGlzU2Nyb2xsZWRJbnRvVmlldyhlbGVtKSB7XHJcbiAgICBjb25zdCBkb2NWaWV3VG9wID1cclxuICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCArIHRoaXMuZWwubmF0aXZlRWxlbWVudC5vZmZzZXRUb3A7XHJcbiAgICBjb25zdCBkb2NWaWV3Qm90dG9tID0gZG9jVmlld1RvcCArIHRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQ7XHJcblxyXG4gICAgY29uc3QgZWxlbVRvcCA9IGVsZW0ub2Zmc2V0VG9wO1xyXG4gICAgY29uc3QgZWxlbUJvdHRvbSA9IGVsZW1Ub3AgKyBlbGVtLmNoaWxkcmVuWzBdLm9mZnNldEhlaWdodDtcclxuICAgIHJldHVybiBlbGVtQm90dG9tIDw9IGRvY1ZpZXdCb3R0b20gJiYgZWxlbVRvcCA+PSBkb2NWaWV3VG9wO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0KCkge1xyXG4gICAgdGhpcy5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IHRoaXMuZmluZFNlbGVjdGVkSXRlbSgpO1xyXG4gICAgdGhpcy5mb2N1c2VkSXRlbSA9IHRoaXMuZmluZEZvY3VzZWRJdGVtKCk7XHJcblxyXG4gICAgdGhpcy5lbmFibGVOYXZpZ2F0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN1YnNjcmliZSgpIHtcclxuICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLmxpc3RJdGVtcy50b0FycmF5KCkuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgaXRlbS5iZWZvcmVTZWxlY3Quc3Vic2NyaWJlKChpdGVtMjogTGlzdEl0ZW1EaXJlY3RpdmUpID0+XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUl0ZW1CZWZvcmVTZWxlY3QoaXRlbTIpXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgaXRlbS5zZWxlY3Quc3Vic2NyaWJlKChpdGVtMjogTGlzdEl0ZW1EaXJlY3RpdmUpID0+XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUl0ZW1TZWxlY3QoaXRlbTIpXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgaXRlbS5iZWZvcmVGb2N1cy5zdWJzY3JpYmUoKGl0ZW0yOiBMaXN0SXRlbURpcmVjdGl2ZSkgPT5cclxuICAgICAgICAgIHRoaXMuaGFuZGxlSXRlbUJlZm9yZUZvY3VzKGl0ZW0yKVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIGl0ZW0uZm9jdXMuc3Vic2NyaWJlKChpdGVtMjogTGlzdEl0ZW1EaXJlY3RpdmUpID0+XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUl0ZW1Gb2N1cyhpdGVtMilcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9LCB0aGlzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdW5zdWJzY3JpYmUoKSB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3ViOiBTdWJzY3JpcHRpb24pID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVJdGVtQmVmb3JlRm9jdXMoaXRlbTogTGlzdEl0ZW1EaXJlY3RpdmUpIHtcclxuICAgIGlmIChpdGVtICE9PSB0aGlzLmZvY3VzZWRJdGVtKSB7XHJcbiAgICAgIHRoaXMudW5mb2N1cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVJdGVtRm9jdXMoaXRlbTogTGlzdEl0ZW1EaXJlY3RpdmUpIHtcclxuICAgIHRoaXMuZm9jdXNlZEl0ZW0gPSBpdGVtO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVJdGVtQmVmb3JlU2VsZWN0KGl0ZW06IExpc3RJdGVtRGlyZWN0aXZlKSB7XHJcbiAgICBpZiAoaXRlbSAhPT0gdGhpcy5mb2N1c2VkSXRlbSkge1xyXG4gICAgICB0aGlzLnVuc2VsZWN0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUl0ZW1TZWxlY3QoaXRlbTogTGlzdEl0ZW1EaXJlY3RpdmUpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gaXRlbTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmluZFNlbGVjdGVkSXRlbSgpIHtcclxuICAgIHJldHVybiB0aGlzLmxpc3RJdGVtcy50b0FycmF5KCkuZmluZChpdGVtID0+IGl0ZW0uc2VsZWN0ZWQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaW5kRm9jdXNlZEl0ZW0oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5saXN0SXRlbXMudG9BcnJheSgpLmZpbmQoaXRlbSA9PiBpdGVtLmZvY3VzZWQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRGb2N1c2VkSW5kZXgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5saXN0SXRlbXNcclxuICAgICAgLnRvQXJyYXkoKVxyXG4gICAgICAuZmluZEluZGV4KGl0ZW0gPT4gaXRlbSA9PT0gdGhpcy5mb2N1c2VkSXRlbSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG5hdmlnYXRlKGtleTogc3RyaW5nKSB7XHJcbiAgICBzd2l0Y2ggKGtleSkge1xyXG4gICAgICBjYXNlICdBcnJvd1VwJzpcclxuICAgICAgICB0aGlzLmZvY3VzUHJldmlvdXMoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcclxuICAgICAgICB0aGlzLmZvY3VzTmV4dCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8bWF0LWxpc3RcclxuICBpZ29DbGlja291dFxyXG4gIFtuZ0NsYXNzXT1cInsnc2VsZWN0YWJsZSc6IHNlbGVjdGlvbn1cIlxyXG4gIChjbGlja291dCk9XCJkaXNhYmxlTmF2aWdhdGlvbigpXCJcclxuICAoY2xpY2spPVwiZW5hYmxlTmF2aWdhdGlvbigpXCI+XHJcbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG48L21hdC1saXN0PlxyXG4iXX0=
|
|
1
|
+
import { Component, Input, ContentChildren, HostListener } from '@angular/core';
|
|
2
|
+
import { ListItemDirective } from './list-item.directive';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common";
|
|
5
|
+
import * as i2 from "@angular/material/list";
|
|
6
|
+
import * as i3 from "../clickout/clickout.directive";
|
|
7
|
+
const _c0 = function (a0) { return { "selectable": a0 }; };
|
|
8
|
+
const _c1 = ["*"];
|
|
9
|
+
export class ListComponent {
|
|
10
|
+
constructor(el) {
|
|
11
|
+
this.el = el;
|
|
12
|
+
this._navigation = true;
|
|
13
|
+
this._selection = true;
|
|
14
|
+
this.subscriptions = [];
|
|
15
|
+
}
|
|
16
|
+
get navigation() {
|
|
17
|
+
return this._navigation;
|
|
18
|
+
}
|
|
19
|
+
set navigation(value) {
|
|
20
|
+
this._navigation = value;
|
|
21
|
+
}
|
|
22
|
+
get selection() {
|
|
23
|
+
return this._selection;
|
|
24
|
+
}
|
|
25
|
+
set selection(value) {
|
|
26
|
+
this._selection = value;
|
|
27
|
+
}
|
|
28
|
+
get selectedItem() {
|
|
29
|
+
return this._selectedItem;
|
|
30
|
+
}
|
|
31
|
+
set selectedItem(value) {
|
|
32
|
+
this.focusedItem = value;
|
|
33
|
+
this._selectedItem = value;
|
|
34
|
+
}
|
|
35
|
+
get focusedItem() {
|
|
36
|
+
return this._focusedItem;
|
|
37
|
+
}
|
|
38
|
+
set focusedItem(value) {
|
|
39
|
+
this._focusedItem = value;
|
|
40
|
+
}
|
|
41
|
+
handleKeyboardEvent(event) {
|
|
42
|
+
// It would be nice to be able to unsubscribe to the event
|
|
43
|
+
// completely but until ES7 this won't be possible because
|
|
44
|
+
// document events are not observables
|
|
45
|
+
if (this.navigationEnabled) {
|
|
46
|
+
if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
|
|
47
|
+
event.preventDefault();
|
|
48
|
+
this.navigate(event.key);
|
|
49
|
+
}
|
|
50
|
+
else if (event.key === 'Enter') {
|
|
51
|
+
this.select(this.focusedItem);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
ngOnInit() {
|
|
56
|
+
this.enableNavigation();
|
|
57
|
+
}
|
|
58
|
+
ngAfterViewInit() {
|
|
59
|
+
if (this.listItems.length) {
|
|
60
|
+
this.init();
|
|
61
|
+
}
|
|
62
|
+
this.listItems$$ = this.listItems.changes.subscribe((items) => this.init());
|
|
63
|
+
}
|
|
64
|
+
ngOnDestroy() {
|
|
65
|
+
this.listItems$$.unsubscribe();
|
|
66
|
+
}
|
|
67
|
+
focus(item) {
|
|
68
|
+
if (!this.selection) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
this.unfocus();
|
|
72
|
+
// We need to make this check because dynamic
|
|
73
|
+
// lists such as in the search results list may fail
|
|
74
|
+
if (item !== undefined) {
|
|
75
|
+
item.focused = true;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
unfocus() {
|
|
79
|
+
if (this.focusedItem !== undefined) {
|
|
80
|
+
this.focusedItem.focused = false;
|
|
81
|
+
}
|
|
82
|
+
this.focusedItem = undefined;
|
|
83
|
+
}
|
|
84
|
+
focusNext() {
|
|
85
|
+
const items = this.listItems.toArray();
|
|
86
|
+
let item;
|
|
87
|
+
const igoList = this.el.nativeElement;
|
|
88
|
+
let disabled = true;
|
|
89
|
+
let index = this.getFocusedIndex();
|
|
90
|
+
if (index === undefined) {
|
|
91
|
+
index = -1;
|
|
92
|
+
}
|
|
93
|
+
while (disabled && index < items.length - 1) {
|
|
94
|
+
index += 1;
|
|
95
|
+
item = items[index];
|
|
96
|
+
disabled = item.disabled;
|
|
97
|
+
}
|
|
98
|
+
if (item !== undefined) {
|
|
99
|
+
this.focus(item);
|
|
100
|
+
}
|
|
101
|
+
if (!items[index + 1]) {
|
|
102
|
+
igoList.scrollTop = igoList.scrollHeight - igoList.clientHeight;
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
if (item !== undefined && !this.isScrolledIntoView(item.el.nativeElement)) {
|
|
106
|
+
igoList.scrollTop =
|
|
107
|
+
item.el.nativeElement.offsetTop +
|
|
108
|
+
item.el.nativeElement.children[0].offsetHeight -
|
|
109
|
+
igoList.clientHeight;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
focusPrevious() {
|
|
113
|
+
const items = this.listItems.toArray();
|
|
114
|
+
let item;
|
|
115
|
+
const igoList = this.el.nativeElement;
|
|
116
|
+
let disabled = true;
|
|
117
|
+
let index = this.getFocusedIndex();
|
|
118
|
+
while (disabled && index > 0) {
|
|
119
|
+
index -= 1;
|
|
120
|
+
item = items[index];
|
|
121
|
+
disabled = item.disabled;
|
|
122
|
+
}
|
|
123
|
+
if (item !== undefined) {
|
|
124
|
+
this.focus(item);
|
|
125
|
+
}
|
|
126
|
+
if (!items[index - 1]) {
|
|
127
|
+
igoList.scrollTop = 0;
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
if (item !== undefined && !this.isScrolledIntoView(item.el.nativeElement)) {
|
|
131
|
+
const padding = 3;
|
|
132
|
+
igoList.scrollTop = item.el.nativeElement.offsetTop - padding;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
select(item) {
|
|
136
|
+
if (!this.selection) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
this.unselect();
|
|
140
|
+
if (item !== undefined) {
|
|
141
|
+
item.selected = true;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
unselect() {
|
|
145
|
+
this.unfocus();
|
|
146
|
+
if (this.selectedItem !== undefined) {
|
|
147
|
+
this.selectedItem.selected = false;
|
|
148
|
+
}
|
|
149
|
+
this.selectedItem = undefined;
|
|
150
|
+
}
|
|
151
|
+
enableNavigation() {
|
|
152
|
+
if (this.navigation) {
|
|
153
|
+
this.navigationEnabled = true;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
disableNavigation() {
|
|
157
|
+
this.navigationEnabled = false;
|
|
158
|
+
}
|
|
159
|
+
scrollToItem(item) {
|
|
160
|
+
this.el.nativeElement.scrollTop = item.getOffsetTop();
|
|
161
|
+
}
|
|
162
|
+
isScrolledIntoView(elem) {
|
|
163
|
+
const docViewTop = this.el.nativeElement.scrollTop + this.el.nativeElement.offsetTop;
|
|
164
|
+
const docViewBottom = docViewTop + this.el.nativeElement.clientHeight;
|
|
165
|
+
const elemTop = elem.offsetTop;
|
|
166
|
+
const elemBottom = elemTop + elem.children[0].offsetHeight;
|
|
167
|
+
return elemBottom <= docViewBottom && elemTop >= docViewTop;
|
|
168
|
+
}
|
|
169
|
+
init() {
|
|
170
|
+
this.subscribe();
|
|
171
|
+
this.selectedItem = this.findSelectedItem();
|
|
172
|
+
this.focusedItem = this.findFocusedItem();
|
|
173
|
+
this.enableNavigation();
|
|
174
|
+
}
|
|
175
|
+
subscribe() {
|
|
176
|
+
this.unsubscribe();
|
|
177
|
+
this.listItems.toArray().forEach(item => {
|
|
178
|
+
this.subscriptions.push(item.beforeSelect.subscribe((item2) => this.handleItemBeforeSelect(item2)));
|
|
179
|
+
this.subscriptions.push(item.select.subscribe((item2) => this.handleItemSelect(item2)));
|
|
180
|
+
this.subscriptions.push(item.beforeFocus.subscribe((item2) => this.handleItemBeforeFocus(item2)));
|
|
181
|
+
this.subscriptions.push(item.focus.subscribe((item2) => this.handleItemFocus(item2)));
|
|
182
|
+
}, this);
|
|
183
|
+
}
|
|
184
|
+
unsubscribe() {
|
|
185
|
+
this.subscriptions.forEach((sub) => sub.unsubscribe());
|
|
186
|
+
this.subscriptions = [];
|
|
187
|
+
}
|
|
188
|
+
handleItemBeforeFocus(item) {
|
|
189
|
+
if (item !== this.focusedItem) {
|
|
190
|
+
this.unfocus();
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
handleItemFocus(item) {
|
|
194
|
+
this.focusedItem = item;
|
|
195
|
+
}
|
|
196
|
+
handleItemBeforeSelect(item) {
|
|
197
|
+
if (item !== this.focusedItem) {
|
|
198
|
+
this.unselect();
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
handleItemSelect(item) {
|
|
202
|
+
this.selectedItem = item;
|
|
203
|
+
}
|
|
204
|
+
findSelectedItem() {
|
|
205
|
+
return this.listItems.toArray().find(item => item.selected);
|
|
206
|
+
}
|
|
207
|
+
findFocusedItem() {
|
|
208
|
+
return this.listItems.toArray().find(item => item.focused);
|
|
209
|
+
}
|
|
210
|
+
getFocusedIndex() {
|
|
211
|
+
return this.listItems
|
|
212
|
+
.toArray()
|
|
213
|
+
.findIndex(item => item === this.focusedItem);
|
|
214
|
+
}
|
|
215
|
+
navigate(key) {
|
|
216
|
+
switch (key) {
|
|
217
|
+
case 'ArrowUp':
|
|
218
|
+
this.focusPrevious();
|
|
219
|
+
break;
|
|
220
|
+
case 'ArrowDown':
|
|
221
|
+
this.focusNext();
|
|
222
|
+
break;
|
|
223
|
+
default:
|
|
224
|
+
break;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
ListComponent.ɵfac = function ListComponent_Factory(t) { return new (t || ListComponent)(i0.ɵɵdirectiveInject(i0.ElementRef)); };
|
|
229
|
+
ListComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ListComponent, selectors: [["igo-list"]], contentQueries: function ListComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
|
|
230
|
+
i0.ɵɵcontentQuery(dirIndex, ListItemDirective, 5);
|
|
231
|
+
} if (rf & 2) {
|
|
232
|
+
let _t;
|
|
233
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.listItems = _t);
|
|
234
|
+
} }, hostBindings: function ListComponent_HostBindings(rf, ctx) { if (rf & 1) {
|
|
235
|
+
i0.ɵɵlistener("keydown", function ListComponent_keydown_HostBindingHandler($event) { return ctx.handleKeyboardEvent($event); }, false, i0.ɵɵresolveDocument)("enter", function ListComponent_enter_HostBindingHandler($event) { return ctx.handleKeyboardEvent($event); }, false, i0.ɵɵresolveDocument);
|
|
236
|
+
} }, inputs: { navigation: "navigation", selection: "selection" }, ngContentSelectors: _c1, decls: 2, vars: 3, consts: [["igoClickout", "", 3, "ngClass", "clickout", "click"]], template: function ListComponent_Template(rf, ctx) { if (rf & 1) {
|
|
237
|
+
i0.ɵɵprojectionDef();
|
|
238
|
+
i0.ɵɵelementStart(0, "mat-list", 0);
|
|
239
|
+
i0.ɵɵlistener("clickout", function ListComponent_Template_mat_list_clickout_0_listener() { return ctx.disableNavigation(); })("click", function ListComponent_Template_mat_list_click_0_listener() { return ctx.enableNavigation(); });
|
|
240
|
+
i0.ɵɵprojection(1);
|
|
241
|
+
i0.ɵɵelementEnd();
|
|
242
|
+
} if (rf & 2) {
|
|
243
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(1, _c0, ctx.selection));
|
|
244
|
+
} }, dependencies: [i1.NgClass, i2.MatList, i3.ClickoutDirective], styles: ["[_nghost-%COMP%]{display:block;height:100%;overflow:auto;position:relative}mat-list[_ngcontent-%COMP%]{padding-top:0}[_nghost-%COMP%]{position:static}[_nghost-%COMP%] .mat-list .mat-list-item .mat-list-text>*{white-space:normal;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;max-height:36px;line-height:18px;-webkit-box-orient:vertical;-webkit-line-clamp:2}[_nghost-%COMP%] .mat-list .mat-list-item.mat-list-item-with-avatar .mat-list-item-content{display:-webkit-flex;height:46px;padding:3px}[_nghost-%COMP%] .mat-list .mat-list-item.mat-list-item-with-avatar{height:46px}[_nghost-%COMP%] .mat-list igo-collapsible>.mat-list-item>.mat-list-item-content>.mat-list-text>.mat-line{font-weight:700;opacity:.9}[_nghost-%COMP%] .mat-list .mat-list-item.mat-list-item-with-avatar .mat-list-item-content>mat-icon{padding:8px}[_nghost-%COMP%] [igolistitem] mat-list-item [mat-list-avatar]{height:auto;width:40px}[_nghost-%COMP%] mat-list.selectable[_ngcontent-%COMP%] [igolistitem]:not(.igo-list-item-disabled) mat-list-item:hover{cursor:pointer}[_nghost-%COMP%] [igolistitem]:focus{outline:none}"] });
|
|
245
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ListComponent, [{
|
|
246
|
+
type: Component,
|
|
247
|
+
args: [{ selector: 'igo-list', template: "<mat-list\n igoClickout\n [ngClass]=\"{'selectable': selection}\"\n (clickout)=\"disableNavigation()\"\n (click)=\"enableNavigation()\">\n <ng-content></ng-content>\n</mat-list>\n", styles: [":host{display:block;height:100%;overflow:auto;position:relative}mat-list{padding-top:0}:host{position:static}:host ::ng-deep .mat-list .mat-list-item .mat-list-text>*{white-space:normal;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;max-height:36px;line-height:18px;-webkit-box-orient:vertical;-webkit-line-clamp:2}:host ::ng-deep .mat-list .mat-list-item.mat-list-item-with-avatar .mat-list-item-content{display:-webkit-flex;height:46px;padding:3px}:host ::ng-deep .mat-list .mat-list-item.mat-list-item-with-avatar{height:46px}:host ::ng-deep .mat-list ::ng-deep igo-collapsible>.mat-list-item>.mat-list-item-content>.mat-list-text>.mat-line{font-weight:700;opacity:.9}:host ::ng-deep .mat-list .mat-list-item.mat-list-item-with-avatar .mat-list-item-content>mat-icon{padding:8px}:host ::ng-deep [igolistitem] mat-list-item [mat-list-avatar]{height:auto;width:40px}:host mat-list.selectable ::ng-deep [igolistitem]:not(.igo-list-item-disabled) mat-list-item:hover{cursor:pointer}:host ::ng-deep [igolistitem]:focus{outline:none}\n"] }]
|
|
248
|
+
}], function () { return [{ type: i0.ElementRef }]; }, { navigation: [{
|
|
249
|
+
type: Input
|
|
250
|
+
}], selection: [{
|
|
251
|
+
type: Input
|
|
252
|
+
}], listItems: [{
|
|
253
|
+
type: ContentChildren,
|
|
254
|
+
args: [ListItemDirective, { descendants: true }]
|
|
255
|
+
}], handleKeyboardEvent: [{
|
|
256
|
+
type: HostListener,
|
|
257
|
+
args: ['document:keydown', ['$event']]
|
|
258
|
+
}, {
|
|
259
|
+
type: HostListener,
|
|
260
|
+
args: ['document:enter', ['$event']]
|
|
261
|
+
}] }); })();
|
|
262
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2xpYi9saXN0L2xpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9saWIvbGlzdC9saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBSVQsS0FBSyxFQUNMLGVBQWUsRUFDZixZQUFZLEVBRWIsTUFBTSxlQUFlLENBQUM7QUFLdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7QUFPMUQsTUFBTSxPQUFPLGFBQWE7SUEyRHhCLFlBQW9CLEVBQWM7UUFBZCxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBbkQxQixnQkFBVyxHQUFHLElBQUksQ0FBQztRQVNuQixlQUFVLEdBQUcsSUFBSSxDQUFDO1FBcUJsQixrQkFBYSxHQUFtQixFQUFFLENBQUM7SUFxQk4sQ0FBQztJQTFEdEMsSUFDSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFDRCxJQUFJLFVBQVUsQ0FBQyxLQUFjO1FBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzNCLENBQUM7SUFHRCxJQUNJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUNELElBQUksU0FBUyxDQUFDLEtBQWM7UUFDMUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUdELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBQ0QsSUFBSSxZQUFZLENBQUMsS0FBd0I7UUFDdkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUdELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBQ0QsSUFBSSxXQUFXLENBQUMsS0FBd0I7UUFDdEMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQVlELG1CQUFtQixDQUFDLEtBQW9CO1FBQ3RDLDBEQUEwRDtRQUMxRCwwREFBMEQ7UUFDMUQsc0NBQXNDO1FBQ3RDLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQzFCLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxXQUFXLEVBQUU7Z0JBQ3hELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDMUI7aUJBQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLE9BQU8sRUFBRTtnQkFDaEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDL0I7U0FDRjtJQUNILENBQUM7SUFJRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNiO1FBRUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQ2pELENBQUMsS0FBMEIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUM1QyxDQUFDO0lBQ0osQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBd0I7UUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbkIsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRWYsNkNBQTZDO1FBQzdDLG9EQUFvRDtRQUNwRCxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7WUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7U0FDckI7SUFDSCxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxTQUFTLEVBQUU7WUFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1NBQ2xDO1FBRUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7SUFDL0IsQ0FBQztJQUVELFNBQVM7UUFDUCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3ZDLElBQUksSUFBSSxDQUFDO1FBQ1QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUM7UUFDdEMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNuQyxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7WUFDdkIsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ1o7UUFFRCxPQUFPLFFBQVEsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDM0MsS0FBSyxJQUFJLENBQUMsQ0FBQztZQUNYLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEIsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDMUI7UUFFRCxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7WUFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNsQjtRQUVELElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ3JCLE9BQU8sQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDO1lBQ2hFLE9BQU87U0FDUjtRQUVELElBQUksSUFBSSxLQUFLLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQ3pFLE9BQU8sQ0FBQyxTQUFTO2dCQUNmLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFNBQVM7b0JBQy9CLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZO29CQUM5QyxPQUFPLENBQUMsWUFBWSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQUVELGFBQWE7UUFDWCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3ZDLElBQUksSUFBdUIsQ0FBQztRQUM1QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQztRQUN0QyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRW5DLE9BQU8sUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7WUFDNUIsS0FBSyxJQUFJLENBQUMsQ0FBQztZQUNYLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEIsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDMUI7UUFFRCxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7WUFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNsQjtRQUVELElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ3JCLE9BQU8sQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ3RCLE9BQU87U0FDUjtRQUVELElBQUksSUFBSSxLQUFLLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQ3pFLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQztZQUNsQixPQUFPLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUM7U0FDL0Q7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQXdCO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ25CLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUVoQixJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7WUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7U0FDdEI7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUVmLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxTQUFTLEVBQUU7WUFDbkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1NBQ3BDO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7SUFDaEMsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7SUFDakMsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUF1QjtRQUNsQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3hELENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxJQUFJO1FBQ3JCLE1BQU0sVUFBVSxHQUNkLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUM7UUFDcEUsTUFBTSxhQUFhLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQztRQUV0RSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQy9CLE1BQU0sVUFBVSxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztRQUMzRCxPQUFPLFVBQVUsSUFBSSxhQUFhLElBQUksT0FBTyxJQUFJLFVBQVUsQ0FBQztJQUM5RCxDQUFDO0lBRU8sSUFBSTtRQUNWLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVqQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRTFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxTQUFTO1FBQ2YsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRW5CLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3RDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQXdCLEVBQUUsRUFBRSxDQUN2RCxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQ25DLENBQ0YsQ0FBQztZQUVGLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQXdCLEVBQUUsRUFBRSxDQUNqRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQzdCLENBQ0YsQ0FBQztZQUVGLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQXdCLEVBQUUsRUFBRSxDQUN0RCxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQ2xDLENBQ0YsQ0FBQztZQUVGLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQXdCLEVBQUUsRUFBRSxDQUNoRCxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUM1QixDQUNGLENBQUM7UUFDSixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRU8sV0FBVztRQUNqQixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQWlCLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxJQUF1QjtRQUNuRCxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQzdCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNoQjtJQUNILENBQUM7SUFFTyxlQUFlLENBQUMsSUFBdUI7UUFDN0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDMUIsQ0FBQztJQUVPLHNCQUFzQixDQUFDLElBQXVCO1FBQ3BELElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDN0IsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ2pCO0lBQ0gsQ0FBQztJQUVPLGdCQUFnQixDQUFDLElBQXVCO1FBQzlDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0lBQzNCLENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRU8sZUFBZTtRQUNyQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFTyxlQUFlO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLFNBQVM7YUFDbEIsT0FBTyxFQUFFO2FBQ1QsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU8sUUFBUSxDQUFDLEdBQVc7UUFDMUIsUUFBUSxHQUFHLEVBQUU7WUFDWCxLQUFLLFNBQVM7Z0JBQ1osSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNyQixNQUFNO1lBQ1IsS0FBSyxXQUFXO2dCQUNkLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDakIsTUFBTTtZQUNSO2dCQUNFLE1BQU07U0FDVDtJQUNILENBQUM7OzBFQXpTVSxhQUFhO2dFQUFiLGFBQWE7b0NBd0NQLGlCQUFpQjs7Ozs7b0dBeEN2QiwrQkFBMkIsNEdBQTNCLCtCQUEyQjs7O1FDckJ4QyxtQ0FJK0I7UUFEN0Isa0dBQVksdUJBQW1CLElBQUMsK0VBQ3ZCLHNCQUFrQixJQURLO1FBRWhDLGtCQUF5QjtRQUMzQixpQkFBVzs7UUFKVCxtRUFBcUM7O3VGRG1CMUIsYUFBYTtjQUx6QixTQUFTOzJCQUNFLFVBQVU7NkRBTWhCLFVBQVU7a0JBRGIsS0FBSztZQVVGLFNBQVM7a0JBRFosS0FBSztZQStCTixTQUFTO2tCQURSLGVBQWU7bUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO1lBS3pELG1CQUFtQjtrQkFGbEIsWUFBWTttQkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7a0JBQzNDLFlBQVk7bUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEFmdGVyVmlld0luaXQsXG4gIE9uSW5pdCxcbiAgT25EZXN0cm95LFxuICBJbnB1dCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBIb3N0TGlzdGVuZXIsXG4gIEVsZW1lbnRSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IFF1ZXJ5TGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgTGlzdEl0ZW1EaXJlY3RpdmUgfSBmcm9tICcuL2xpc3QtaXRlbS5kaXJlY3RpdmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpZ28tbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbGlzdC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpXG4gIGdldCBuYXZpZ2F0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9uYXZpZ2F0aW9uO1xuICB9XG4gIHNldCBuYXZpZ2F0aW9uKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fbmF2aWdhdGlvbiA9IHZhbHVlO1xuICB9XG4gIHByaXZhdGUgX25hdmlnYXRpb24gPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBzZWxlY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbjtcbiAgfVxuICBzZXQgc2VsZWN0aW9uKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2VsZWN0aW9uID0gdmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBfc2VsZWN0aW9uID0gdHJ1ZTtcblxuICBnZXQgc2VsZWN0ZWRJdGVtKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZEl0ZW07XG4gIH1cbiAgc2V0IHNlbGVjdGVkSXRlbSh2YWx1ZTogTGlzdEl0ZW1EaXJlY3RpdmUpIHtcbiAgICB0aGlzLmZvY3VzZWRJdGVtID0gdmFsdWU7XG4gICAgdGhpcy5fc2VsZWN0ZWRJdGVtID0gdmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBfc2VsZWN0ZWRJdGVtOiBMaXN0SXRlbURpcmVjdGl2ZTtcblxuICBnZXQgZm9jdXNlZEl0ZW0oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZvY3VzZWRJdGVtO1xuICB9XG4gIHNldCBmb2N1c2VkSXRlbSh2YWx1ZTogTGlzdEl0ZW1EaXJlY3RpdmUpIHtcbiAgICB0aGlzLl9mb2N1c2VkSXRlbSA9IHZhbHVlO1xuICB9XG4gIHByaXZhdGUgX2ZvY3VzZWRJdGVtOiBMaXN0SXRlbURpcmVjdGl2ZTtcblxuICBwcml2YXRlIG5hdmlnYXRpb25FbmFibGVkOiBib29sZWFuO1xuICBwcml2YXRlIGxpc3RJdGVtcyQkOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICBAQ29udGVudENoaWxkcmVuKExpc3RJdGVtRGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIGxpc3RJdGVtczogUXVlcnlMaXN0PExpc3RJdGVtRGlyZWN0aXZlPjtcblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJywgWyckZXZlbnQnXSlcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6ZW50ZXInLCBbJyRldmVudCddKVxuICBoYW5kbGVLZXlib2FyZEV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgLy8gSXQgd291bGQgYmUgbmljZSB0byBiZSBhYmxlIHRvIHVuc3Vic2NyaWJlIHRvIHRoZSBldmVudFxuICAgIC8vIGNvbXBsZXRlbHkgYnV0IHVudGlsIEVTNyB0aGlzIHdvbid0IGJlIHBvc3NpYmxlIGJlY2F1c2VcbiAgICAvLyBkb2N1bWVudCBldmVudHMgYXJlIG5vdCBvYnNlcnZhYmxlc1xuICAgIGlmICh0aGlzLm5hdmlnYXRpb25FbmFibGVkKSB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcgfHwgZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLm5hdmlnYXRlKGV2ZW50LmtleSk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgICB0aGlzLnNlbGVjdCh0aGlzLmZvY3VzZWRJdGVtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZW5hYmxlTmF2aWdhdGlvbigpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmICh0aGlzLmxpc3RJdGVtcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH1cblxuICAgIHRoaXMubGlzdEl0ZW1zJCQgPSB0aGlzLmxpc3RJdGVtcy5jaGFuZ2VzLnN1YnNjcmliZShcbiAgICAgIChpdGVtczogTGlzdEl0ZW1EaXJlY3RpdmVbXSkgPT4gdGhpcy5pbml0KClcbiAgICApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5saXN0SXRlbXMkJC51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgZm9jdXMoaXRlbT86IExpc3RJdGVtRGlyZWN0aXZlKSB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudW5mb2N1cygpO1xuXG4gICAgLy8gV2UgbmVlZCB0byBtYWtlIHRoaXMgY2hlY2sgYmVjYXVzZSBkeW5hbWljXG4gICAgLy8gbGlzdHMgc3VjaCBhcyBpbiB0aGUgc2VhcmNoIHJlc3VsdHMgbGlzdCBtYXkgZmFpbFxuICAgIGlmIChpdGVtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGl0ZW0uZm9jdXNlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdW5mb2N1cygpIHtcbiAgICBpZiAodGhpcy5mb2N1c2VkSXRlbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmZvY3VzZWRJdGVtLmZvY3VzZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmZvY3VzZWRJdGVtID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgZm9jdXNOZXh0KCkge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5saXN0SXRlbXMudG9BcnJheSgpO1xuICAgIGxldCBpdGVtO1xuICAgIGNvbnN0IGlnb0xpc3QgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgbGV0IGRpc2FibGVkID0gdHJ1ZTtcbiAgICBsZXQgaW5kZXggPSB0aGlzLmdldEZvY3VzZWRJbmRleCgpO1xuICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpbmRleCA9IC0xO1xuICAgIH1cblxuICAgIHdoaWxlIChkaXNhYmxlZCAmJiBpbmRleCA8IGl0ZW1zLmxlbmd0aCAtIDEpIHtcbiAgICAgIGluZGV4ICs9IDE7XG4gICAgICBpdGVtID0gaXRlbXNbaW5kZXhdO1xuICAgICAgZGlzYWJsZWQgPSBpdGVtLmRpc2FibGVkO1xuICAgIH1cblxuICAgIGlmIChpdGVtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZm9jdXMoaXRlbSk7XG4gICAgfVxuXG4gICAgaWYgKCFpdGVtc1tpbmRleCArIDFdKSB7XG4gICAgICBpZ29MaXN0LnNjcm9sbFRvcCA9IGlnb0xpc3Quc2Nyb2xsSGVpZ2h0IC0gaWdvTGlzdC5jbGllbnRIZWlnaHQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGl0ZW0gIT09IHVuZGVmaW5lZCAmJiAhdGhpcy5pc1Njcm9sbGVkSW50b1ZpZXcoaXRlbS5lbC5uYXRpdmVFbGVtZW50KSkge1xuICAgICAgaWdvTGlzdC5zY3JvbGxUb3AgPVxuICAgICAgICBpdGVtLmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0VG9wICtcbiAgICAgICAgaXRlbS5lbC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdLm9mZnNldEhlaWdodCAtXG4gICAgICAgIGlnb0xpc3QuY2xpZW50SGVpZ2h0O1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzUHJldmlvdXMoKSB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmxpc3RJdGVtcy50b0FycmF5KCk7XG4gICAgbGV0IGl0ZW06IExpc3RJdGVtRGlyZWN0aXZlO1xuICAgIGNvbnN0IGlnb0xpc3QgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgbGV0IGRpc2FibGVkID0gdHJ1ZTtcbiAgICBsZXQgaW5kZXggPSB0aGlzLmdldEZvY3VzZWRJbmRleCgpO1xuXG4gICAgd2hpbGUgKGRpc2FibGVkICYmIGluZGV4ID4gMCkge1xuICAgICAgaW5kZXggLT0gMTtcbiAgICAgIGl0ZW0gPSBpdGVtc1tpbmRleF07XG4gICAgICBkaXNhYmxlZCA9IGl0ZW0uZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgaWYgKGl0ZW0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5mb2N1cyhpdGVtKTtcbiAgICB9XG5cbiAgICBpZiAoIWl0ZW1zW2luZGV4IC0gMV0pIHtcbiAgICAgIGlnb0xpc3Quc2Nyb2xsVG9wID0gMDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXRlbSAhPT0gdW5kZWZpbmVkICYmICF0aGlzLmlzU2Nyb2xsZWRJbnRvVmlldyhpdGVtLmVsLm5hdGl2ZUVsZW1lbnQpKSB7XG4gICAgICBjb25zdCBwYWRkaW5nID0gMztcbiAgICAgIGlnb0xpc3Quc2Nyb2xsVG9wID0gaXRlbS5lbC5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcCAtIHBhZGRpbmc7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0KGl0ZW0/OiBMaXN0SXRlbURpcmVjdGl2ZSkge1xuICAgIGlmICghdGhpcy5zZWxlY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnVuc2VsZWN0KCk7XG5cbiAgICBpZiAoaXRlbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpdGVtLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB1bnNlbGVjdCgpIHtcbiAgICB0aGlzLnVuZm9jdXMoKTtcblxuICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgZW5hYmxlTmF2aWdhdGlvbigpIHtcbiAgICBpZiAodGhpcy5uYXZpZ2F0aW9uKSB7XG4gICAgICB0aGlzLm5hdmlnYXRpb25FbmFibGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBkaXNhYmxlTmF2aWdhdGlvbigpIHtcbiAgICB0aGlzLm5hdmlnYXRpb25FbmFibGVkID0gZmFsc2U7XG4gIH1cblxuICBzY3JvbGxUb0l0ZW0oaXRlbTogTGlzdEl0ZW1EaXJlY3RpdmUpIHtcbiAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gaXRlbS5nZXRPZmZzZXRUb3AoKTtcbiAgfVxuXG4gIGlzU2Nyb2xsZWRJbnRvVmlldyhlbGVtKSB7XG4gICAgY29uc3QgZG9jVmlld1RvcCA9XG4gICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wICsgdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcDtcbiAgICBjb25zdCBkb2NWaWV3Qm90dG9tID0gZG9jVmlld1RvcCArIHRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQ7XG5cbiAgICBjb25zdCBlbGVtVG9wID0gZWxlbS5vZmZzZXRUb3A7XG4gICAgY29uc3QgZWxlbUJvdHRvbSA9IGVsZW1Ub3AgKyBlbGVtLmNoaWxkcmVuWzBdLm9mZnNldEhlaWdodDtcbiAgICByZXR1cm4gZWxlbUJvdHRvbSA8PSBkb2NWaWV3Qm90dG9tICYmIGVsZW1Ub3AgPj0gZG9jVmlld1RvcDtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdCgpIHtcbiAgICB0aGlzLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSB0aGlzLmZpbmRTZWxlY3RlZEl0ZW0oKTtcbiAgICB0aGlzLmZvY3VzZWRJdGVtID0gdGhpcy5maW5kRm9jdXNlZEl0ZW0oKTtcblxuICAgIHRoaXMuZW5hYmxlTmF2aWdhdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmUoKSB7XG4gICAgdGhpcy51bnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5saXN0SXRlbXMudG9BcnJheSgpLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgaXRlbS5iZWZvcmVTZWxlY3Quc3Vic2NyaWJlKChpdGVtMjogTGlzdEl0ZW1EaXJlY3RpdmUpID0+XG4gICAgICAgICAgdGhpcy5oYW5kbGVJdGVtQmVmb3JlU2VsZWN0KGl0ZW0yKVxuICAgICAgICApXG4gICAgICApO1xuXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgaXRlbS5zZWxlY3Quc3Vic2NyaWJlKChpdGVtMjogTGlzdEl0ZW1EaXJlY3RpdmUpID0+XG4gICAgICAgICAgdGhpcy5oYW5kbGVJdGVtU2VsZWN0KGl0ZW0yKVxuICAgICAgICApXG4gICAgICApO1xuXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgaXRlbS5iZWZvcmVGb2N1cy5zdWJzY3JpYmUoKGl0ZW0yOiBMaXN0SXRlbURpcmVjdGl2ZSkgPT5cbiAgICAgICAgICB0aGlzLmhhbmRsZUl0ZW1CZWZvcmVGb2N1cyhpdGVtMilcbiAgICAgICAgKVxuICAgICAgKTtcblxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgIGl0ZW0uZm9jdXMuc3Vic2NyaWJlKChpdGVtMjogTGlzdEl0ZW1EaXJlY3RpdmUpID0+XG4gICAgICAgICAgdGhpcy5oYW5kbGVJdGVtRm9jdXMoaXRlbTIpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSwgdGhpcyk7XG4gIH1cblxuICBwcml2YXRlIHVuc3Vic2NyaWJlKCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzdWI6IFN1YnNjcmlwdGlvbikgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVJdGVtQmVmb3JlRm9jdXMoaXRlbTogTGlzdEl0ZW1EaXJlY3RpdmUpIHtcbiAgICBpZiAoaXRlbSAhPT0gdGhpcy5mb2N1c2VkSXRlbSkge1xuICAgICAgdGhpcy51bmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVJdGVtRm9jdXMoaXRlbTogTGlzdEl0ZW1EaXJlY3RpdmUpIHtcbiAgICB0aGlzLmZvY3VzZWRJdGVtID0gaXRlbTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlSXRlbUJlZm9yZVNlbGVjdChpdGVtOiBMaXN0SXRlbURpcmVjdGl2ZSkge1xuICAgIGlmIChpdGVtICE9PSB0aGlzLmZvY3VzZWRJdGVtKSB7XG4gICAgICB0aGlzLnVuc2VsZWN0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVJdGVtU2VsZWN0KGl0ZW06IExpc3RJdGVtRGlyZWN0aXZlKSB7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBpdGVtO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kU2VsZWN0ZWRJdGVtKCkge1xuICAgIHJldHVybiB0aGlzLmxpc3RJdGVtcy50b0FycmF5KCkuZmluZChpdGVtID0+IGl0ZW0uc2VsZWN0ZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kRm9jdXNlZEl0ZW0oKSB7XG4gICAgcmV0dXJuIHRoaXMubGlzdEl0ZW1zLnRvQXJyYXkoKS5maW5kKGl0ZW0gPT4gaXRlbS5mb2N1c2VkKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Rm9jdXNlZEluZGV4KCkge1xuICAgIHJldHVybiB0aGlzLmxpc3RJdGVtc1xuICAgICAgLnRvQXJyYXkoKVxuICAgICAgLmZpbmRJbmRleChpdGVtID0+IGl0ZW0gPT09IHRoaXMuZm9jdXNlZEl0ZW0pO1xuICB9XG5cbiAgcHJpdmF0ZSBuYXZpZ2F0ZShrZXk6IHN0cmluZykge1xuICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgdGhpcy5mb2N1c1ByZXZpb3VzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgdGhpcy5mb2N1c05leHQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbn1cbiIsIjxtYXQtbGlzdFxuICBpZ29DbGlja291dFxuICBbbmdDbGFzc109XCJ7J3NlbGVjdGFibGUnOiBzZWxlY3Rpb259XCJcbiAgKGNsaWNrb3V0KT1cImRpc2FibGVOYXZpZ2F0aW9uKClcIlxuICAoY2xpY2spPVwiZW5hYmxlTmF2aWdhdGlvbigpXCI+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvbWF0LWxpc3Q+XG4iXX0=
|