@skyux/list-builder 5.7.2 → 6.0.0-beta.2
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/index.mjs +78 -0
- package/esm2020/lib/modules/list/list-data-request.model.mjs +18 -0
- package/esm2020/lib/modules/list/list-data-response.model.mjs +9 -0
- package/esm2020/lib/modules/list/list-data.provider.mjs +9 -0
- package/esm2020/lib/modules/list/list-paging.component.mjs +13 -0
- package/esm2020/lib/modules/list/list-view.component.mjs +29 -0
- package/esm2020/lib/modules/list/list.component.mjs +305 -0
- package/esm2020/lib/modules/list/list.module.mjs +18 -0
- package/esm2020/lib/modules/list/state/filters/filters.orchestrator.mjs +16 -0
- package/esm2020/lib/modules/list/state/filters/update.action.mjs +9 -0
- package/esm2020/lib/modules/list/state/items/items.orchestrator.mjs +53 -0
- package/esm2020/lib/modules/list/state/items/load.action.mjs +12 -0
- package/esm2020/lib/modules/list/state/items/set-items-selected.action.mjs +13 -0
- package/esm2020/lib/modules/list/state/items/set-loading.action.mjs +9 -0
- package/esm2020/lib/modules/list/state/list-state-action.type.mjs +2 -0
- package/esm2020/lib/modules/list/state/list-state.model.mjs +24 -0
- package/esm2020/lib/modules/list/state/list-state.rxstate.mjs +80 -0
- package/esm2020/lib/modules/list/state/list-state.state-node.mjs +37 -0
- package/esm2020/lib/modules/list/state/paging/paging.model.mjs +14 -0
- package/esm2020/lib/modules/list/state/paging/paging.orchestrator.mjs +27 -0
- package/esm2020/lib/modules/list/state/paging/set-items-per-page.action.mjs +9 -0
- package/esm2020/lib/modules/list/state/paging/set-max-pages.action.mjs +9 -0
- package/esm2020/lib/modules/list/state/paging/set-page-number.action.mjs +9 -0
- package/esm2020/lib/modules/list/state/search/search.model.mjs +32 -0
- package/esm2020/lib/modules/list/state/search/search.orchestrator.mjs +47 -0
- package/esm2020/lib/modules/list/state/search/set-field-selectors.action.mjs +9 -0
- package/esm2020/lib/modules/list/state/search/set-functions.action.mjs +9 -0
- package/esm2020/lib/modules/list/state/search/set-options.action.mjs +11 -0
- package/esm2020/lib/modules/list/state/search/set-search-text.action.mjs +9 -0
- package/esm2020/lib/modules/list/state/selected/load.action.mjs +9 -0
- package/esm2020/lib/modules/list/state/selected/selected.model.mjs +9 -0
- package/esm2020/lib/modules/list/state/selected/selected.orchestrator.mjs +56 -0
- package/esm2020/lib/modules/list/state/selected/set-item-selected.action.mjs +10 -0
- package/esm2020/lib/modules/list/state/selected/set-items-selected.action.mjs +11 -0
- package/esm2020/lib/modules/list/state/selected/set-loading.action.mjs +9 -0
- package/esm2020/lib/modules/list/state/sort/label.model.mjs +25 -0
- package/esm2020/lib/modules/list/state/sort/set-available.action.mjs +9 -0
- package/esm2020/lib/modules/list/state/sort/set-field-selectors.action.mjs +9 -0
- package/esm2020/lib/modules/list/state/sort/set-global.action.mjs +9 -0
- package/esm2020/lib/modules/list/state/sort/sort.model.mjs +27 -0
- package/esm2020/lib/modules/list/state/sort/sort.orchestrator.mjs +30 -0
- package/esm2020/lib/modules/list/state/toolbar/disable.action.mjs +9 -0
- package/esm2020/lib/modules/list/state/toolbar/load.action.mjs +10 -0
- package/esm2020/lib/modules/list/state/toolbar/remove.action.mjs +9 -0
- package/esm2020/lib/modules/list/state/toolbar/set-exists.action.mjs +9 -0
- package/esm2020/lib/modules/list/state/toolbar/set-type.action.mjs +9 -0
- package/esm2020/lib/modules/list/state/toolbar/show-multiselect-toolbar.action.mjs +9 -0
- package/esm2020/lib/modules/list/state/toolbar/toolbar-item.model.mjs +16 -0
- package/esm2020/lib/modules/list/state/toolbar/toolbar.model.mjs +17 -0
- package/esm2020/lib/modules/list/state/toolbar/toolbar.orchestrator.mjs +80 -0
- package/esm2020/lib/modules/list/state/views/load.action.mjs +9 -0
- package/esm2020/lib/modules/list/state/views/set-active.action.mjs +9 -0
- package/esm2020/lib/modules/list/state/views/view.model.mjs +10 -0
- package/esm2020/lib/modules/list/state/views/views.model.mjs +13 -0
- package/esm2020/lib/modules/list/state/views/views.orchestrator.mjs +21 -0
- package/esm2020/lib/modules/list-data-provider-in-memory/list-data-in-memory.provider.mjs +160 -0
- package/esm2020/lib/modules/list-filters/filter.model.mjs +18 -0
- package/esm2020/lib/modules/list-filters/list-filter-button.component.mjs +41 -0
- package/esm2020/lib/modules/list-filters/list-filter-inline-item-renderer.component.mjs +34 -0
- package/esm2020/lib/modules/list-filters/list-filter-inline-item.component.mjs +45 -0
- package/esm2020/lib/modules/list-filters/list-filter-inline.component.mjs +71 -0
- package/esm2020/lib/modules/list-filters/list-filter-inline.model.mjs +21 -0
- package/esm2020/lib/modules/list-filters/list-filter-summary.component.mjs +57 -0
- package/esm2020/lib/modules/list-filters/list-filters.module.mjs +41 -0
- package/esm2020/lib/modules/list-paging/list-paging.component.mjs +84 -0
- package/esm2020/lib/modules/list-paging/list-paging.module.mjs +19 -0
- package/esm2020/lib/modules/list-toolbar/list-multiselect-toolbar.component.mjs +148 -0
- package/esm2020/lib/modules/list-toolbar/list-secondary-actions/list-secondary-action.component.mjs +30 -0
- package/esm2020/lib/modules/list-toolbar/list-secondary-actions/list-secondary-action.mjs +2 -0
- package/esm2020/lib/modules/list-toolbar/list-secondary-actions/list-secondary-actions-host.component.mjs +45 -0
- package/esm2020/lib/modules/list-toolbar/list-secondary-actions/list-secondary-actions.component.mjs +40 -0
- package/esm2020/lib/modules/list-toolbar/list-secondary-actions/list-secondary-actions.module.mjs +46 -0
- package/esm2020/lib/modules/list-toolbar/list-secondary-actions/list-secondary-actions.service.mjs +36 -0
- package/esm2020/lib/modules/list-toolbar/list-toolbar-item-renderer.component.mjs +30 -0
- package/esm2020/lib/modules/list-toolbar/list-toolbar-item.component.mjs +47 -0
- package/esm2020/lib/modules/list-toolbar/list-toolbar-search-actions.component.mjs +14 -0
- package/esm2020/lib/modules/list-toolbar/list-toolbar-sort.component.mjs +25 -0
- package/esm2020/lib/modules/list-toolbar/list-toolbar-view-actions.component.mjs +17 -0
- package/esm2020/lib/modules/list-toolbar/list-toolbar.component.mjs +354 -0
- package/esm2020/lib/modules/list-toolbar/list-toolbar.module.mjs +87 -0
- package/esm2020/lib/modules/list-toolbar/state/config/config.model.mjs +14 -0
- package/esm2020/lib/modules/list-toolbar/state/config/config.orchestrator.mjs +21 -0
- package/esm2020/lib/modules/list-toolbar/state/config/set-search-enabled.action.mjs +9 -0
- package/esm2020/lib/modules/list-toolbar/state/config/set-sort-selector-enabled.action.mjs +10 -0
- package/esm2020/lib/modules/list-toolbar/state/toolbar-state-action.type.mjs +2 -0
- package/esm2020/lib/modules/list-toolbar/state/toolbar-state.model.mjs +10 -0
- package/esm2020/lib/modules/list-toolbar/state/toolbar-state.rxstate.mjs +19 -0
- package/esm2020/lib/modules/list-toolbar/state/toolbar-state.state-node.mjs +23 -0
- package/esm2020/lib/modules/shared/sky-list-builder-resources.module.mjs +53 -0
- package/esm2020/skyux-list-builder.mjs +5 -0
- package/fesm2015/{skyux-list-builder.js → skyux-list-builder.mjs} +104 -150
- package/fesm2015/skyux-list-builder.mjs.map +1 -0
- package/fesm2020/skyux-list-builder.mjs +2667 -0
- package/fesm2020/skyux-list-builder.mjs.map +1 -0
- package/package.json +33 -17
- package/bundles/skyux-list-builder.umd.js +0 -3357
- package/esm2015/index.js +0 -78
- package/esm2015/index.js.map +0 -1
- package/esm2015/lib/modules/list/list-data-request.model.js +0 -18
- package/esm2015/lib/modules/list/list-data-request.model.js.map +0 -1
- package/esm2015/lib/modules/list/list-data-response.model.js +0 -9
- package/esm2015/lib/modules/list/list-data-response.model.js.map +0 -1
- package/esm2015/lib/modules/list/list-data.provider.js +0 -9
- package/esm2015/lib/modules/list/list-data.provider.js.map +0 -1
- package/esm2015/lib/modules/list/list-paging.component.js +0 -13
- package/esm2015/lib/modules/list/list-paging.component.js.map +0 -1
- package/esm2015/lib/modules/list/list-view.component.js +0 -29
- package/esm2015/lib/modules/list/list-view.component.js.map +0 -1
- package/esm2015/lib/modules/list/list.component.js +0 -305
- package/esm2015/lib/modules/list/list.component.js.map +0 -1
- package/esm2015/lib/modules/list/list.module.js +0 -18
- package/esm2015/lib/modules/list/list.module.js.map +0 -1
- package/esm2015/lib/modules/list/state/filters/filters.orchestrator.js +0 -16
- package/esm2015/lib/modules/list/state/filters/filters.orchestrator.js.map +0 -1
- package/esm2015/lib/modules/list/state/filters/update.action.js +0 -9
- package/esm2015/lib/modules/list/state/filters/update.action.js.map +0 -1
- package/esm2015/lib/modules/list/state/items/items.orchestrator.js +0 -53
- package/esm2015/lib/modules/list/state/items/items.orchestrator.js.map +0 -1
- package/esm2015/lib/modules/list/state/items/load.action.js +0 -12
- package/esm2015/lib/modules/list/state/items/load.action.js.map +0 -1
- package/esm2015/lib/modules/list/state/items/set-items-selected.action.js +0 -13
- package/esm2015/lib/modules/list/state/items/set-items-selected.action.js.map +0 -1
- package/esm2015/lib/modules/list/state/items/set-loading.action.js +0 -9
- package/esm2015/lib/modules/list/state/items/set-loading.action.js.map +0 -1
- package/esm2015/lib/modules/list/state/list-state-action.type.js +0 -2
- package/esm2015/lib/modules/list/state/list-state-action.type.js.map +0 -1
- package/esm2015/lib/modules/list/state/list-state.model.js +0 -24
- package/esm2015/lib/modules/list/state/list-state.model.js.map +0 -1
- package/esm2015/lib/modules/list/state/list-state.rxstate.js +0 -80
- package/esm2015/lib/modules/list/state/list-state.rxstate.js.map +0 -1
- package/esm2015/lib/modules/list/state/list-state.state-node.js +0 -37
- package/esm2015/lib/modules/list/state/list-state.state-node.js.map +0 -1
- package/esm2015/lib/modules/list/state/paging/paging.model.js +0 -14
- package/esm2015/lib/modules/list/state/paging/paging.model.js.map +0 -1
- package/esm2015/lib/modules/list/state/paging/paging.orchestrator.js +0 -27
- package/esm2015/lib/modules/list/state/paging/paging.orchestrator.js.map +0 -1
- package/esm2015/lib/modules/list/state/paging/set-items-per-page.action.js +0 -9
- package/esm2015/lib/modules/list/state/paging/set-items-per-page.action.js.map +0 -1
- package/esm2015/lib/modules/list/state/paging/set-max-pages.action.js +0 -9
- package/esm2015/lib/modules/list/state/paging/set-max-pages.action.js.map +0 -1
- package/esm2015/lib/modules/list/state/paging/set-page-number.action.js +0 -9
- package/esm2015/lib/modules/list/state/paging/set-page-number.action.js.map +0 -1
- package/esm2015/lib/modules/list/state/search/search.model.js +0 -32
- package/esm2015/lib/modules/list/state/search/search.model.js.map +0 -1
- package/esm2015/lib/modules/list/state/search/search.orchestrator.js +0 -47
- package/esm2015/lib/modules/list/state/search/search.orchestrator.js.map +0 -1
- package/esm2015/lib/modules/list/state/search/set-field-selectors.action.js +0 -9
- package/esm2015/lib/modules/list/state/search/set-field-selectors.action.js.map +0 -1
- package/esm2015/lib/modules/list/state/search/set-functions.action.js +0 -9
- package/esm2015/lib/modules/list/state/search/set-functions.action.js.map +0 -1
- package/esm2015/lib/modules/list/state/search/set-options.action.js +0 -11
- package/esm2015/lib/modules/list/state/search/set-options.action.js.map +0 -1
- package/esm2015/lib/modules/list/state/search/set-search-text.action.js +0 -9
- package/esm2015/lib/modules/list/state/search/set-search-text.action.js.map +0 -1
- package/esm2015/lib/modules/list/state/selected/load.action.js +0 -9
- package/esm2015/lib/modules/list/state/selected/load.action.js.map +0 -1
- package/esm2015/lib/modules/list/state/selected/selected.model.js +0 -9
- package/esm2015/lib/modules/list/state/selected/selected.model.js.map +0 -1
- package/esm2015/lib/modules/list/state/selected/selected.orchestrator.js +0 -56
- package/esm2015/lib/modules/list/state/selected/selected.orchestrator.js.map +0 -1
- package/esm2015/lib/modules/list/state/selected/set-item-selected.action.js +0 -10
- package/esm2015/lib/modules/list/state/selected/set-item-selected.action.js.map +0 -1
- package/esm2015/lib/modules/list/state/selected/set-items-selected.action.js +0 -11
- package/esm2015/lib/modules/list/state/selected/set-items-selected.action.js.map +0 -1
- package/esm2015/lib/modules/list/state/selected/set-loading.action.js +0 -9
- package/esm2015/lib/modules/list/state/selected/set-loading.action.js.map +0 -1
- package/esm2015/lib/modules/list/state/sort/label.model.js +0 -25
- package/esm2015/lib/modules/list/state/sort/label.model.js.map +0 -1
- package/esm2015/lib/modules/list/state/sort/set-available.action.js +0 -9
- package/esm2015/lib/modules/list/state/sort/set-available.action.js.map +0 -1
- package/esm2015/lib/modules/list/state/sort/set-field-selectors.action.js +0 -9
- package/esm2015/lib/modules/list/state/sort/set-field-selectors.action.js.map +0 -1
- package/esm2015/lib/modules/list/state/sort/set-global.action.js +0 -9
- package/esm2015/lib/modules/list/state/sort/set-global.action.js.map +0 -1
- package/esm2015/lib/modules/list/state/sort/sort.model.js +0 -27
- package/esm2015/lib/modules/list/state/sort/sort.model.js.map +0 -1
- package/esm2015/lib/modules/list/state/sort/sort.orchestrator.js +0 -30
- package/esm2015/lib/modules/list/state/sort/sort.orchestrator.js.map +0 -1
- package/esm2015/lib/modules/list/state/toolbar/disable.action.js +0 -9
- package/esm2015/lib/modules/list/state/toolbar/disable.action.js.map +0 -1
- package/esm2015/lib/modules/list/state/toolbar/load.action.js +0 -10
- package/esm2015/lib/modules/list/state/toolbar/load.action.js.map +0 -1
- package/esm2015/lib/modules/list/state/toolbar/remove.action.js +0 -9
- package/esm2015/lib/modules/list/state/toolbar/remove.action.js.map +0 -1
- package/esm2015/lib/modules/list/state/toolbar/set-exists.action.js +0 -9
- package/esm2015/lib/modules/list/state/toolbar/set-exists.action.js.map +0 -1
- package/esm2015/lib/modules/list/state/toolbar/set-type.action.js +0 -9
- package/esm2015/lib/modules/list/state/toolbar/set-type.action.js.map +0 -1
- package/esm2015/lib/modules/list/state/toolbar/show-multiselect-toolbar.action.js +0 -9
- package/esm2015/lib/modules/list/state/toolbar/show-multiselect-toolbar.action.js.map +0 -1
- package/esm2015/lib/modules/list/state/toolbar/toolbar-item.model.js +0 -16
- package/esm2015/lib/modules/list/state/toolbar/toolbar-item.model.js.map +0 -1
- package/esm2015/lib/modules/list/state/toolbar/toolbar.model.js +0 -17
- package/esm2015/lib/modules/list/state/toolbar/toolbar.model.js.map +0 -1
- package/esm2015/lib/modules/list/state/toolbar/toolbar.orchestrator.js +0 -80
- package/esm2015/lib/modules/list/state/toolbar/toolbar.orchestrator.js.map +0 -1
- package/esm2015/lib/modules/list/state/views/load.action.js +0 -9
- package/esm2015/lib/modules/list/state/views/load.action.js.map +0 -1
- package/esm2015/lib/modules/list/state/views/set-active.action.js +0 -9
- package/esm2015/lib/modules/list/state/views/set-active.action.js.map +0 -1
- package/esm2015/lib/modules/list/state/views/view.model.js +0 -10
- package/esm2015/lib/modules/list/state/views/view.model.js.map +0 -1
- package/esm2015/lib/modules/list/state/views/views.model.js +0 -13
- package/esm2015/lib/modules/list/state/views/views.model.js.map +0 -1
- package/esm2015/lib/modules/list/state/views/views.orchestrator.js +0 -21
- package/esm2015/lib/modules/list/state/views/views.orchestrator.js.map +0 -1
- package/esm2015/lib/modules/list-data-provider-in-memory/list-data-in-memory.provider.js +0 -160
- package/esm2015/lib/modules/list-data-provider-in-memory/list-data-in-memory.provider.js.map +0 -1
- package/esm2015/lib/modules/list-filters/filter.model.js +0 -18
- package/esm2015/lib/modules/list-filters/filter.model.js.map +0 -1
- package/esm2015/lib/modules/list-filters/list-filter-button.component.js +0 -44
- package/esm2015/lib/modules/list-filters/list-filter-button.component.js.map +0 -1
- package/esm2015/lib/modules/list-filters/list-filter-inline-item-renderer.component.js +0 -34
- package/esm2015/lib/modules/list-filters/list-filter-inline-item-renderer.component.js.map +0 -1
- package/esm2015/lib/modules/list-filters/list-filter-inline-item.component.js +0 -45
- package/esm2015/lib/modules/list-filters/list-filter-inline-item.component.js.map +0 -1
- package/esm2015/lib/modules/list-filters/list-filter-inline.component.js +0 -74
- package/esm2015/lib/modules/list-filters/list-filter-inline.component.js.map +0 -1
- package/esm2015/lib/modules/list-filters/list-filter-inline.model.js +0 -21
- package/esm2015/lib/modules/list-filters/list-filter-inline.model.js.map +0 -1
- package/esm2015/lib/modules/list-filters/list-filter-summary.component.js +0 -60
- package/esm2015/lib/modules/list-filters/list-filter-summary.component.js.map +0 -1
- package/esm2015/lib/modules/list-filters/list-filters.module.js +0 -41
- package/esm2015/lib/modules/list-filters/list-filters.module.js.map +0 -1
- package/esm2015/lib/modules/list-paging/list-paging.component.js +0 -89
- package/esm2015/lib/modules/list-paging/list-paging.component.js.map +0 -1
- package/esm2015/lib/modules/list-paging/list-paging.module.js +0 -19
- package/esm2015/lib/modules/list-paging/list-paging.module.js.map +0 -1
- package/esm2015/lib/modules/list-toolbar/list-multiselect-toolbar.component.js +0 -152
- package/esm2015/lib/modules/list-toolbar/list-multiselect-toolbar.component.js.map +0 -1
- package/esm2015/lib/modules/list-toolbar/list-secondary-actions/list-secondary-action.component.js +0 -33
- package/esm2015/lib/modules/list-toolbar/list-secondary-actions/list-secondary-action.component.js.map +0 -1
- package/esm2015/lib/modules/list-toolbar/list-secondary-actions/list-secondary-action.js +0 -2
- package/esm2015/lib/modules/list-toolbar/list-secondary-actions/list-secondary-action.js.map +0 -1
- package/esm2015/lib/modules/list-toolbar/list-secondary-actions/list-secondary-actions-host.component.js +0 -50
- package/esm2015/lib/modules/list-toolbar/list-secondary-actions/list-secondary-actions-host.component.js.map +0 -1
- package/esm2015/lib/modules/list-toolbar/list-secondary-actions/list-secondary-actions.component.js +0 -45
- package/esm2015/lib/modules/list-toolbar/list-secondary-actions/list-secondary-actions.component.js.map +0 -1
- package/esm2015/lib/modules/list-toolbar/list-secondary-actions/list-secondary-actions.module.js +0 -46
- package/esm2015/lib/modules/list-toolbar/list-secondary-actions/list-secondary-actions.module.js.map +0 -1
- package/esm2015/lib/modules/list-toolbar/list-secondary-actions/list-secondary-actions.service.js +0 -36
- package/esm2015/lib/modules/list-toolbar/list-secondary-actions/list-secondary-actions.service.js.map +0 -1
- package/esm2015/lib/modules/list-toolbar/list-toolbar-item-renderer.component.js +0 -30
- package/esm2015/lib/modules/list-toolbar/list-toolbar-item-renderer.component.js.map +0 -1
- package/esm2015/lib/modules/list-toolbar/list-toolbar-item.component.js +0 -47
- package/esm2015/lib/modules/list-toolbar/list-toolbar-item.component.js.map +0 -1
- package/esm2015/lib/modules/list-toolbar/list-toolbar-search-actions.component.js +0 -19
- package/esm2015/lib/modules/list-toolbar/list-toolbar-search-actions.component.js.map +0 -1
- package/esm2015/lib/modules/list-toolbar/list-toolbar-sort.component.js +0 -25
- package/esm2015/lib/modules/list-toolbar/list-toolbar-sort.component.js.map +0 -1
- package/esm2015/lib/modules/list-toolbar/list-toolbar-view-actions.component.js +0 -21
- package/esm2015/lib/modules/list-toolbar/list-toolbar-view-actions.component.js.map +0 -1
- package/esm2015/lib/modules/list-toolbar/list-toolbar.component.js +0 -360
- package/esm2015/lib/modules/list-toolbar/list-toolbar.component.js.map +0 -1
- package/esm2015/lib/modules/list-toolbar/list-toolbar.module.js +0 -87
- package/esm2015/lib/modules/list-toolbar/list-toolbar.module.js.map +0 -1
- package/esm2015/lib/modules/list-toolbar/state/config/config.model.js +0 -14
- package/esm2015/lib/modules/list-toolbar/state/config/config.model.js.map +0 -1
- package/esm2015/lib/modules/list-toolbar/state/config/config.orchestrator.js +0 -21
- package/esm2015/lib/modules/list-toolbar/state/config/config.orchestrator.js.map +0 -1
- package/esm2015/lib/modules/list-toolbar/state/config/set-search-enabled.action.js +0 -9
- package/esm2015/lib/modules/list-toolbar/state/config/set-search-enabled.action.js.map +0 -1
- package/esm2015/lib/modules/list-toolbar/state/config/set-sort-selector-enabled.action.js +0 -10
- package/esm2015/lib/modules/list-toolbar/state/config/set-sort-selector-enabled.action.js.map +0 -1
- package/esm2015/lib/modules/list-toolbar/state/toolbar-state-action.type.js +0 -2
- package/esm2015/lib/modules/list-toolbar/state/toolbar-state-action.type.js.map +0 -1
- package/esm2015/lib/modules/list-toolbar/state/toolbar-state.model.js +0 -10
- package/esm2015/lib/modules/list-toolbar/state/toolbar-state.model.js.map +0 -1
- package/esm2015/lib/modules/list-toolbar/state/toolbar-state.rxstate.js +0 -19
- package/esm2015/lib/modules/list-toolbar/state/toolbar-state.rxstate.js.map +0 -1
- package/esm2015/lib/modules/list-toolbar/state/toolbar-state.state-node.js +0 -23
- package/esm2015/lib/modules/list-toolbar/state/toolbar-state.state-node.js.map +0 -1
- package/esm2015/lib/modules/shared/sky-list-builder-resources.module.js +0 -53
- package/esm2015/lib/modules/shared/sky-list-builder-resources.module.js.map +0 -1
- package/esm2015/skyux-list-builder.js +0 -5
- package/esm2015/skyux-list-builder.js.map +0 -1
- package/fesm2015/skyux-list-builder.js.map +0 -1
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Component, ContentChildren, Input, QueryList, TemplateRef, } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
let idIndex = 0;
|
|
4
|
+
/**
|
|
5
|
+
* Defines a toolbar item for the list toolbar.
|
|
6
|
+
*/
|
|
7
|
+
export class SkyListToolbarItemComponent {
|
|
8
|
+
constructor() {
|
|
9
|
+
/**
|
|
10
|
+
* Specifies the ID of the item.
|
|
11
|
+
*/
|
|
12
|
+
this.id = `sky-list-toolbar-item-${++idIndex}`;
|
|
13
|
+
/**
|
|
14
|
+
* Specifies the index of the item at the given item location.
|
|
15
|
+
* @default -1
|
|
16
|
+
*/
|
|
17
|
+
this.index = -1;
|
|
18
|
+
/**
|
|
19
|
+
* Specifies the toolbar location of the item. The valid options are `"left"`,
|
|
20
|
+
* `"center"`, and `"right"`.
|
|
21
|
+
* @default "left"
|
|
22
|
+
*/
|
|
23
|
+
this.location = 'left';
|
|
24
|
+
}
|
|
25
|
+
get template() {
|
|
26
|
+
return this.templates.length > 0 ? this.templates.first : undefined;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
SkyListToolbarItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyListToolbarItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
30
|
+
SkyListToolbarItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: SkyListToolbarItemComponent, selector: "sky-list-toolbar-item", inputs: { id: "id", index: "index", location: "location" }, queries: [{ propertyName: "templates", predicate: TemplateRef }], ngImport: i0, template: '<ng-content></ng-content>', isInline: true });
|
|
31
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyListToolbarItemComponent, decorators: [{
|
|
32
|
+
type: Component,
|
|
33
|
+
args: [{
|
|
34
|
+
selector: 'sky-list-toolbar-item',
|
|
35
|
+
template: '<ng-content></ng-content>',
|
|
36
|
+
}]
|
|
37
|
+
}], propDecorators: { id: [{
|
|
38
|
+
type: Input
|
|
39
|
+
}], index: [{
|
|
40
|
+
type: Input
|
|
41
|
+
}], location: [{
|
|
42
|
+
type: Input
|
|
43
|
+
}], templates: [{
|
|
44
|
+
type: ContentChildren,
|
|
45
|
+
args: [TemplateRef]
|
|
46
|
+
}] } });
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC10b29sYmFyLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xpc3QtYnVpbGRlci9zcmMvbGliL21vZHVsZXMvbGlzdC10b29sYmFyL2xpc3QtdG9vbGJhci1pdGVtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULGVBQWUsRUFDZixLQUFLLEVBQ0wsU0FBUyxFQUNULFdBQVcsR0FDWixNQUFNLGVBQWUsQ0FBQzs7QUFFdkIsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBRWhCOztHQUVHO0FBS0gsTUFBTSxPQUFPLDJCQUEyQjtJQUp4QztRQUtFOztXQUVHO1FBQ2EsT0FBRSxHQUFHLHlCQUF5QixFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQzFEOzs7V0FHRztRQUNhLFVBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMzQjs7OztXQUlHO1FBQ2EsYUFBUSxHQUFHLE1BQU0sQ0FBQztLQUtuQztJQUhDLElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUN0RSxDQUFDOzt3SEFuQlUsMkJBQTJCOzRHQUEzQiwyQkFBMkIsbUpBZ0JyQixXQUFXLDZCQWxCbEIsMkJBQTJCOzJGQUUxQiwyQkFBMkI7a0JBSnZDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHVCQUF1QjtvQkFDakMsUUFBUSxFQUFFLDJCQUEyQjtpQkFDdEM7OEJBS2lCLEVBQUU7c0JBQWpCLEtBQUs7Z0JBS1UsS0FBSztzQkFBcEIsS0FBSztnQkFNVSxRQUFRO3NCQUF2QixLQUFLO2dCQUNnQyxTQUFTO3NCQUE5QyxlQUFlO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgSW5wdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVGVtcGxhdGVSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5sZXQgaWRJbmRleCA9IDA7XG5cbi8qKlxuICogRGVmaW5lcyBhIHRvb2xiYXIgaXRlbSBmb3IgdGhlIGxpc3QgdG9vbGJhci5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2t5LWxpc3QtdG9vbGJhci1pdGVtJyxcbiAgdGVtcGxhdGU6ICc8bmctY29udGVudD48L25nLWNvbnRlbnQ+Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2t5TGlzdFRvb2xiYXJJdGVtQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgSUQgb2YgdGhlIGl0ZW0uXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgaWQgPSBgc2t5LWxpc3QtdG9vbGJhci1pdGVtLSR7KytpZEluZGV4fWA7XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIGluZGV4IG9mIHRoZSBpdGVtIGF0IHRoZSBnaXZlbiBpdGVtIGxvY2F0aW9uLlxuICAgKiBAZGVmYXVsdCAtMVxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGluZGV4ID0gLTE7XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIHRvb2xiYXIgbG9jYXRpb24gb2YgdGhlIGl0ZW0uIFRoZSB2YWxpZCBvcHRpb25zIGFyZSBgXCJsZWZ0XCJgLFxuICAgKiBgXCJjZW50ZXJcImAsIGFuZCBgXCJyaWdodFwiYC5cbiAgICogQGRlZmF1bHQgXCJsZWZ0XCJcbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBsb2NhdGlvbiA9ICdsZWZ0JztcbiAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZVJlZikgcHJpdmF0ZSB0ZW1wbGF0ZXM6IFF1ZXJ5TGlzdDxUZW1wbGF0ZVJlZjxhbnk+PjtcbiAgcHVibGljIGdldCB0ZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZXMubGVuZ3RoID4gMCA/IHRoaXMudGVtcGxhdGVzLmZpcnN0IDogdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* Displays custom actions in the toolbar beside to the search bar.
|
|
5
|
+
*/
|
|
6
|
+
export class SkyListToolbarSearchActionsComponent {
|
|
7
|
+
}
|
|
8
|
+
SkyListToolbarSearchActionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyListToolbarSearchActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
9
|
+
SkyListToolbarSearchActionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: SkyListToolbarSearchActionsComponent, selector: "sky-list-toolbar-search-actions", ngImport: i0, template: "<div class=\"sky-list-toolbar-search-actions\">\n <ng-content></ng-content>\n</div>\n", styles: [".sky-list-toolbar-search-actions{margin-left:10px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyListToolbarSearchActionsComponent, decorators: [{
|
|
11
|
+
type: Component,
|
|
12
|
+
args: [{ selector: 'sky-list-toolbar-search-actions', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"sky-list-toolbar-search-actions\">\n <ng-content></ng-content>\n</div>\n", styles: [".sky-list-toolbar-search-actions{margin-left:10px}\n"] }]
|
|
13
|
+
}] });
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC10b29sYmFyLXNlYXJjaC1hY3Rpb25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9saXN0LWJ1aWxkZXIvc3JjL2xpYi9tb2R1bGVzL2xpc3QtdG9vbGJhci9saXN0LXRvb2xiYXItc2VhcmNoLWFjdGlvbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xpc3QtYnVpbGRlci9zcmMvbGliL21vZHVsZXMvbGlzdC10b29sYmFyL2xpc3QtdG9vbGJhci1zZWFyY2gtYWN0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUVuRTs7R0FFRztBQU9ILE1BQU0sT0FBTyxvQ0FBb0M7O2lJQUFwQyxvQ0FBb0M7cUhBQXBDLG9DQUFvQyx1RUNYakQsd0ZBR0E7MkZEUWEsb0NBQW9DO2tCQU5oRCxTQUFTOytCQUNFLGlDQUFpQyxtQkFHMUIsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBEaXNwbGF5cyBjdXN0b20gYWN0aW9ucyBpbiB0aGUgdG9vbGJhciBiZXNpZGUgdG8gdGhlIHNlYXJjaCBiYXIuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS1saXN0LXRvb2xiYXItc2VhcmNoLWFjdGlvbnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vbGlzdC10b29sYmFyLXNlYXJjaC1hY3Rpb25zLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbGlzdC10b29sYmFyLXNlYXJjaC1hY3Rpb25zLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lMaXN0VG9vbGJhclNlYXJjaEFjdGlvbnNDb21wb25lbnQge31cbiIsIjxkaXYgY2xhc3M9XCJza3ktbGlzdC10b29sYmFyLXNlYXJjaC1hY3Rpb25zXCI+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZGl2PlxuIl19
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* Adds a sort dropdown to the list toolbar.
|
|
5
|
+
*/
|
|
6
|
+
export class SkyListToolbarSortComponent {
|
|
7
|
+
}
|
|
8
|
+
SkyListToolbarSortComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyListToolbarSortComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
9
|
+
SkyListToolbarSortComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: SkyListToolbarSortComponent, selector: "sky-list-toolbar-sort", inputs: { label: "label", field: "field", type: "type", descending: "descending" }, ngImport: i0, template: '', isInline: true });
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyListToolbarSortComponent, decorators: [{
|
|
11
|
+
type: Component,
|
|
12
|
+
args: [{
|
|
13
|
+
selector: 'sky-list-toolbar-sort',
|
|
14
|
+
template: '',
|
|
15
|
+
}]
|
|
16
|
+
}], propDecorators: { label: [{
|
|
17
|
+
type: Input
|
|
18
|
+
}], field: [{
|
|
19
|
+
type: Input
|
|
20
|
+
}], type: [{
|
|
21
|
+
type: Input
|
|
22
|
+
}], descending: [{
|
|
23
|
+
type: Input
|
|
24
|
+
}] } });
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC10b29sYmFyLXNvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xpc3QtYnVpbGRlci9zcmMvbGliL21vZHVsZXMvbGlzdC10b29sYmFyL2xpc3QtdG9vbGJhci1zb3J0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFakQ7O0dBRUc7QUFLSCxNQUFNLE9BQU8sMkJBQTJCOzt3SEFBM0IsMkJBQTJCOzRHQUEzQiwyQkFBMkIsaUpBRjVCLEVBQUU7MkZBRUQsMkJBQTJCO2tCQUp2QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx1QkFBdUI7b0JBQ2pDLFFBQVEsRUFBRSxFQUFFO2lCQUNiOzhCQU9RLEtBQUs7c0JBRFgsS0FBSztnQkFPQyxLQUFLO3NCQURYLEtBQUs7Z0JBT0MsSUFBSTtzQkFEVixLQUFLO2dCQU9DLFVBQVU7c0JBRGhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogQWRkcyBhIHNvcnQgZHJvcGRvd24gdG8gdGhlIGxpc3QgdG9vbGJhci5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2t5LWxpc3QtdG9vbGJhci1zb3J0JyxcbiAgdGVtcGxhdGU6ICcnLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lMaXN0VG9vbGJhclNvcnRDb21wb25lbnQge1xuICAvKipcbiAgICogU3BlY2lmaWVzIGEgbGFiZWwgZm9yIGEgc29ydCBvcHRpb24uXG4gICAqIEByZXF1aXJlZFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGxhYmVsOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIGRhdGEgZmllbGQgdG8gc29ydCB0aGUgbGlzdCBvbi5cbiAgICogQHJlcXVpcmVkXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZmllbGQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgZGF0YSB0eXBlIG9mIHRoZSBkYXRhIGZpZWxkIHRvIHNvcnQgdGhlIGxpc3Qgb24uXG4gICAqIEByZXF1aXJlZFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHR5cGU6IHN0cmluZztcbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIHNvcnQgZGF0YSBpbiBkZXNjZW5kaW5nIG9yZGVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGRlc2NlbmRpbmc6IGJvb2xlYW47XG59XG4iXX0=
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* Adds a section on the right side of the toolbar for items that substantially change
|
|
5
|
+
* or affect the view of the list. This includes simple filters and view switchers.
|
|
6
|
+
* If the view section includes more than one item, simple filters appear on the left
|
|
7
|
+
* and view switchers appear on the right.
|
|
8
|
+
*/
|
|
9
|
+
export class SkyListToolbarViewActionsComponent {
|
|
10
|
+
}
|
|
11
|
+
SkyListToolbarViewActionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyListToolbarViewActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
12
|
+
SkyListToolbarViewActionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: SkyListToolbarViewActionsComponent, selector: "sky-list-toolbar-view-actions", ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{display:flex;align-items:center}:host::ng-deep>:not(:last-child){margin-right:5px}.sky-list-toolbar-view-actions ::ng-deep>:not(:last-child){margin-right:5px}\n"] });
|
|
13
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyListToolbarViewActionsComponent, decorators: [{
|
|
14
|
+
type: Component,
|
|
15
|
+
args: [{ selector: 'sky-list-toolbar-view-actions', template: "<ng-content></ng-content>\n", styles: [":host{display:flex;align-items:center}:host::ng-deep>:not(:last-child){margin-right:5px}.sky-list-toolbar-view-actions ::ng-deep>:not(:last-child){margin-right:5px}\n"] }]
|
|
16
|
+
}] });
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC10b29sYmFyLXZpZXctYWN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbGlzdC1idWlsZGVyL3NyYy9saWIvbW9kdWxlcy9saXN0LXRvb2xiYXIvbGlzdC10b29sYmFyLXZpZXctYWN0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbGlzdC1idWlsZGVyL3NyYy9saWIvbW9kdWxlcy9saXN0LXRvb2xiYXIvbGlzdC10b29sYmFyLXZpZXctYWN0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUUxQzs7Ozs7R0FLRztBQU1ILE1BQU0sT0FBTyxrQ0FBa0M7OytIQUFsQyxrQ0FBa0M7bUhBQWxDLGtDQUFrQyxxRUNiL0MsNkJBQ0E7MkZEWWEsa0NBQWtDO2tCQUw5QyxTQUFTOytCQUNFLCtCQUErQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIEFkZHMgYSBzZWN0aW9uIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSB0b29sYmFyIGZvciBpdGVtcyB0aGF0IHN1YnN0YW50aWFsbHkgY2hhbmdlXG4gKiBvciBhZmZlY3QgdGhlIHZpZXcgb2YgdGhlIGxpc3QuIFRoaXMgaW5jbHVkZXMgc2ltcGxlIGZpbHRlcnMgYW5kIHZpZXcgc3dpdGNoZXJzLlxuICogSWYgdGhlIHZpZXcgc2VjdGlvbiBpbmNsdWRlcyBtb3JlIHRoYW4gb25lIGl0ZW0sIHNpbXBsZSBmaWx0ZXJzIGFwcGVhciBvbiB0aGUgbGVmdFxuICogYW5kIHZpZXcgc3dpdGNoZXJzIGFwcGVhciBvbiB0aGUgcmlnaHQuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS1saXN0LXRvb2xiYXItdmlldy1hY3Rpb25zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xpc3QtdG9vbGJhci12aWV3LWFjdGlvbnMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9saXN0LXRvb2xiYXItdmlldy1hY3Rpb25zLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFNreUxpc3RUb29sYmFyVmlld0FjdGlvbnNDb21wb25lbnQge31cbiIsIjxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiJdfQ==
|
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, Input, QueryList, TemplateRef, ViewChild, } from '@angular/core';
|
|
2
|
+
import { getValue } from '@skyux/list-builder-common';
|
|
3
|
+
import { SkySearchComponent } from '@skyux/lookup';
|
|
4
|
+
import { Subject, combineLatest as observableCombineLatest, } from 'rxjs';
|
|
5
|
+
import { distinctUntilChanged, map as observableMap, take, takeUntil, } from 'rxjs/operators';
|
|
6
|
+
import { SkyListFilterInlineComponent } from '../list-filters/list-filter-inline.component';
|
|
7
|
+
import { SkyListFilterSummaryComponent } from '../list-filters/list-filter-summary.component';
|
|
8
|
+
import { ListStateDispatcher } from '../list/state/list-state.rxstate';
|
|
9
|
+
import { ListState } from '../list/state/list-state.state-node';
|
|
10
|
+
import { ListPagingSetPageNumberAction } from '../list/state/paging/set-page-number.action';
|
|
11
|
+
import { ListSortLabelModel } from '../list/state/sort/label.model';
|
|
12
|
+
import { ListToolbarSetTypeAction } from '../list/state/toolbar/set-type.action';
|
|
13
|
+
import { ListToolbarItemModel } from '../list/state/toolbar/toolbar-item.model';
|
|
14
|
+
import { SkyListToolbarItemComponent } from './list-toolbar-item.component';
|
|
15
|
+
import { SkyListToolbarSortComponent } from './list-toolbar-sort.component';
|
|
16
|
+
import { SkyListToolbarViewActionsComponent } from './list-toolbar-view-actions.component';
|
|
17
|
+
import { ListToolbarConfigSetSearchEnabledAction } from './state/config/set-search-enabled.action';
|
|
18
|
+
import { ListToolbarConfigSetSortSelectorEnabledAction } from './state/config/set-sort-selector-enabled.action';
|
|
19
|
+
import { ListToolbarStateModel } from './state/toolbar-state.model';
|
|
20
|
+
import { ListToolbarStateDispatcher } from './state/toolbar-state.rxstate';
|
|
21
|
+
import { ListToolbarState } from './state/toolbar-state.state-node';
|
|
22
|
+
import * as i0 from "@angular/core";
|
|
23
|
+
import * as i1 from "../list/state/list-state.state-node";
|
|
24
|
+
import * as i2 from "../list/state/list-state.rxstate";
|
|
25
|
+
import * as i3 from "./state/toolbar-state.state-node";
|
|
26
|
+
import * as i4 from "./state/toolbar-state.rxstate";
|
|
27
|
+
import * as i5 from "@skyux/layout";
|
|
28
|
+
import * as i6 from "./list-toolbar-item-renderer.component";
|
|
29
|
+
import * as i7 from "./list-multiselect-toolbar.component";
|
|
30
|
+
import * as i8 from "@skyux/lookup";
|
|
31
|
+
import * as i9 from "@skyux/lists";
|
|
32
|
+
import * as i10 from "@angular/common";
|
|
33
|
+
let nextId = 0;
|
|
34
|
+
/**
|
|
35
|
+
* Displays a toolbar for a SKY UX-themed list of data.
|
|
36
|
+
*/
|
|
37
|
+
export class SkyListToolbarComponent {
|
|
38
|
+
constructor(changeDetector, state, dispatcher, toolbarState, toolbarDispatcher) {
|
|
39
|
+
this.changeDetector = changeDetector;
|
|
40
|
+
this.state = state;
|
|
41
|
+
this.dispatcher = dispatcher;
|
|
42
|
+
this.toolbarState = toolbarState;
|
|
43
|
+
this.toolbarDispatcher = toolbarDispatcher;
|
|
44
|
+
/**
|
|
45
|
+
* Display the search bar in the standard position or in a separate section.
|
|
46
|
+
* To highlight the search bar in a section above all other toolbar items,
|
|
47
|
+
* set this property to `search`.
|
|
48
|
+
* @default "standard"
|
|
49
|
+
*/
|
|
50
|
+
this.toolbarType = 'standard';
|
|
51
|
+
this.isToolbarDisabled = false;
|
|
52
|
+
this.inlineFilterBarExpanded = false;
|
|
53
|
+
this.hasAdditionalToolbarSection = false;
|
|
54
|
+
this.hasViewActions = false;
|
|
55
|
+
this.filterButtonId = `sky-list-toolbar-filter-button-${++nextId}`;
|
|
56
|
+
this.listFilterInlineId = `sky-list-toolbar-filter-inline-${++nextId}`;
|
|
57
|
+
/**
|
|
58
|
+
* Fires when users submit a search.
|
|
59
|
+
* @internal
|
|
60
|
+
*/
|
|
61
|
+
this.searchApplied = new Subject();
|
|
62
|
+
this.customItemIds = [];
|
|
63
|
+
this.hasSortSelectors = false;
|
|
64
|
+
this.inlineFiltersItemToolbarIndex = 5000;
|
|
65
|
+
this.sortSelectorItemToolbarIndex = 6000;
|
|
66
|
+
this.ngUnsubscribe = new Subject();
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Indicates whether to use the in-memory search.
|
|
70
|
+
* Setting this to `false` will allow consumers to run their own searches remotely,
|
|
71
|
+
* and push new values to the list component by updating the `data` property.
|
|
72
|
+
* @default true
|
|
73
|
+
* @internal
|
|
74
|
+
*/
|
|
75
|
+
set inMemorySearchEnabled(value) {
|
|
76
|
+
this._inMemorySearchEnabled = value;
|
|
77
|
+
}
|
|
78
|
+
get inMemorySearchEnabled() {
|
|
79
|
+
if (this._inMemorySearchEnabled === undefined) {
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
return this._inMemorySearchEnabled;
|
|
83
|
+
}
|
|
84
|
+
get isFilterBarDisplayed() {
|
|
85
|
+
return (!this.isToolbarDisabled &&
|
|
86
|
+
this.hasInlineFilters &&
|
|
87
|
+
this.inlineFilterBarExpanded);
|
|
88
|
+
}
|
|
89
|
+
get filterButtonAriaControls() {
|
|
90
|
+
return this.isFilterBarDisplayed ? this.listFilterInlineId : undefined;
|
|
91
|
+
}
|
|
92
|
+
ngOnInit() {
|
|
93
|
+
this.dispatcher.toolbarExists(true);
|
|
94
|
+
getValue(this.searchText, (searchText) => {
|
|
95
|
+
this.updateSearchText(searchText);
|
|
96
|
+
});
|
|
97
|
+
getValue(this.searchEnabled, (searchEnabled) => {
|
|
98
|
+
this.toolbarDispatcher.next(new ListToolbarConfigSetSearchEnabledAction(searchEnabled === undefined ? true : searchEnabled));
|
|
99
|
+
});
|
|
100
|
+
getValue(this.toolbarType, (type) => {
|
|
101
|
+
this.dispatcher.next(new ListToolbarSetTypeAction(this.toolbarType));
|
|
102
|
+
});
|
|
103
|
+
getValue(this.sortSelectorEnabled, (sortSelectorEnabled) => {
|
|
104
|
+
this.toolbarDispatcher.next(new ListToolbarConfigSetSortSelectorEnabledAction(sortSelectorEnabled === undefined ? true : sortSelectorEnabled));
|
|
105
|
+
});
|
|
106
|
+
this.sortSelectors = this.getSortSelectors();
|
|
107
|
+
// Initialize the sort toolbar item if necessary
|
|
108
|
+
this.sortSelectors
|
|
109
|
+
.pipe(takeUntil(this.ngUnsubscribe), distinctUntilChanged())
|
|
110
|
+
.subscribe((currentSort) => {
|
|
111
|
+
if (currentSort.length > 0 && !this.hasSortSelectors) {
|
|
112
|
+
this.hasSortSelectors = true;
|
|
113
|
+
this.dispatcher.toolbarAddItems([
|
|
114
|
+
new ListToolbarItemModel({
|
|
115
|
+
id: 'sort-selector',
|
|
116
|
+
template: this.sortSelectorTemplate,
|
|
117
|
+
location: 'left',
|
|
118
|
+
index: this.sortSelectorItemToolbarIndex,
|
|
119
|
+
}),
|
|
120
|
+
]);
|
|
121
|
+
}
|
|
122
|
+
else if (currentSort.length < 1 && this.hasSortSelectors) {
|
|
123
|
+
this.hasSortSelectors = false;
|
|
124
|
+
this.dispatcher.toolbarRemoveItems(['sort-selector']);
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
this.searchTextInput = this.state.pipe(takeUntil(this.ngUnsubscribe), observableMap((s) => s.search.searchText), distinctUntilChanged());
|
|
128
|
+
this.view = this.state.pipe(takeUntil(this.ngUnsubscribe), observableMap((s) => s.views.active), distinctUntilChanged());
|
|
129
|
+
this.watchTemplates();
|
|
130
|
+
this.type = this.state.pipe(takeUntil(this.ngUnsubscribe), observableMap((state) => state.toolbar.type), distinctUntilChanged());
|
|
131
|
+
this.type.pipe(takeUntil(this.ngUnsubscribe)).subscribe((toolbarType) => {
|
|
132
|
+
if (toolbarType === 'search') {
|
|
133
|
+
this.dispatcher.toolbarRemoveItems(['search']);
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
this.dispatcher.toolbarAddItems([
|
|
137
|
+
new ListToolbarItemModel({
|
|
138
|
+
id: 'search',
|
|
139
|
+
template: this.searchTemplate,
|
|
140
|
+
location: 'right',
|
|
141
|
+
}),
|
|
142
|
+
]);
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
this.isSearchEnabled = this.toolbarState.pipe(takeUntil(this.ngUnsubscribe), observableMap((s) => s.config), distinctUntilChanged(), observableMap((c) => c.searchEnabled));
|
|
146
|
+
this.state
|
|
147
|
+
.pipe(observableMap((s) => s.toolbar), takeUntil(this.ngUnsubscribe), distinctUntilChanged(), observableMap((c) => c.disabled))
|
|
148
|
+
.subscribe((isDisabled) => (this.isToolbarDisabled = isDisabled));
|
|
149
|
+
this.isSortSelectorEnabled = this.toolbarState.pipe(takeUntil(this.ngUnsubscribe), observableMap((s) => s.config), distinctUntilChanged(), observableMap((c) => c.sortSelectorEnabled));
|
|
150
|
+
this.isMultiselectEnabled = this.state.pipe(takeUntil(this.ngUnsubscribe), observableMap((s) => s.toolbar), distinctUntilChanged(), observableMap((t) => t.showMultiselectToolbar));
|
|
151
|
+
this.hasAppliedFilters = this.state.pipe(takeUntil(this.ngUnsubscribe), observableMap((s) => s.filters), distinctUntilChanged(), observableMap((filters) => {
|
|
152
|
+
const activeFilters = filters.filter((f) => {
|
|
153
|
+
return (f.value !== '' &&
|
|
154
|
+
f.value !== undefined &&
|
|
155
|
+
f.value !== false &&
|
|
156
|
+
f.value !== f.defaultValue);
|
|
157
|
+
});
|
|
158
|
+
return activeFilters.length > 0;
|
|
159
|
+
}));
|
|
160
|
+
this.state.pipe(takeUntil(this.ngUnsubscribe)).subscribe((current) => {
|
|
161
|
+
this.hasAdditionalToolbarSection = current.toolbar.items.length > 0;
|
|
162
|
+
this.changeDetector.detectChanges();
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
ngAfterContentInit() {
|
|
166
|
+
// Inject custom toolbar items.
|
|
167
|
+
this.toolbarItems.forEach((toolbarItem) => {
|
|
168
|
+
this.dispatcher.toolbarAddItems([new ListToolbarItemModel(toolbarItem)]);
|
|
169
|
+
this.customItemIds.push(toolbarItem.id);
|
|
170
|
+
});
|
|
171
|
+
this.toolbarItems.changes
|
|
172
|
+
.pipe(takeUntil(this.ngUnsubscribe))
|
|
173
|
+
.subscribe((newItems) => {
|
|
174
|
+
newItems.forEach((item) => {
|
|
175
|
+
if (this.customItemIds.indexOf(item.id) < 0) {
|
|
176
|
+
this.dispatcher.toolbarAddItems([new ListToolbarItemModel(item)]);
|
|
177
|
+
this.customItemIds.push(item.id);
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
const itemsToRemove = [];
|
|
181
|
+
this.customItemIds.forEach((itemId, index) => {
|
|
182
|
+
if (!newItems.find((item) => item.id === itemId)) {
|
|
183
|
+
itemsToRemove.push(itemId);
|
|
184
|
+
this.customItemIds.splice(index, 1);
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
this.dispatcher.toolbarRemoveItems(itemsToRemove);
|
|
188
|
+
});
|
|
189
|
+
const sortModels = this.toolbarSorts.map((sort) => new ListSortLabelModel({
|
|
190
|
+
text: sort.label,
|
|
191
|
+
fieldSelector: sort.field,
|
|
192
|
+
fieldType: sort.type,
|
|
193
|
+
global: true,
|
|
194
|
+
descending: sort.descending,
|
|
195
|
+
}));
|
|
196
|
+
this.dispatcher.sortSetGlobal(sortModels);
|
|
197
|
+
// Add inline filters.
|
|
198
|
+
this.showFilterSummary = this.filterSummary.length > 0;
|
|
199
|
+
this.hasInlineFilters = this.inlineFilter.length > 0;
|
|
200
|
+
if (this.hasInlineFilters) {
|
|
201
|
+
this.dispatcher.toolbarAddItems([
|
|
202
|
+
new ListToolbarItemModel({
|
|
203
|
+
template: this.inlineFilterButtonTemplate,
|
|
204
|
+
location: 'left',
|
|
205
|
+
index: this.inlineFiltersItemToolbarIndex,
|
|
206
|
+
}),
|
|
207
|
+
]);
|
|
208
|
+
}
|
|
209
|
+
// Check for view actions
|
|
210
|
+
this.hasViewActions = this.viewActions.length > 0;
|
|
211
|
+
}
|
|
212
|
+
ngOnDestroy() {
|
|
213
|
+
this.searchApplied.complete();
|
|
214
|
+
this.ngUnsubscribe.next();
|
|
215
|
+
this.ngUnsubscribe.complete();
|
|
216
|
+
}
|
|
217
|
+
setSort(sort) {
|
|
218
|
+
this.state.pipe(take(1)).subscribe((currentState) => {
|
|
219
|
+
if (currentState.paging.pageNumber &&
|
|
220
|
+
currentState.paging.pageNumber !== 1) {
|
|
221
|
+
this.dispatcher.next(new ListPagingSetPageNumberAction(Number(1)));
|
|
222
|
+
}
|
|
223
|
+
this.dispatcher.sortSetFieldSelectors([
|
|
224
|
+
{ fieldSelector: sort.fieldSelector, descending: sort.descending },
|
|
225
|
+
]);
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
inlineFilterButtonClick() {
|
|
229
|
+
this.inlineFilterBarExpanded = !this.inlineFilterBarExpanded;
|
|
230
|
+
}
|
|
231
|
+
updateSearchText(searchText) {
|
|
232
|
+
this.searchApplied.next(searchText);
|
|
233
|
+
if (this.inMemorySearchEnabled) {
|
|
234
|
+
this.state.pipe(take(1)).subscribe((currentState) => {
|
|
235
|
+
if (currentState.paging.pageNumber &&
|
|
236
|
+
currentState.paging.pageNumber !== 1) {
|
|
237
|
+
this.dispatcher.next(new ListPagingSetPageNumberAction(Number(1)));
|
|
238
|
+
}
|
|
239
|
+
this.dispatcher.searchSetText(searchText);
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
itemIsInView(itemView, activeView) {
|
|
244
|
+
return itemView === undefined || itemView === activeView;
|
|
245
|
+
}
|
|
246
|
+
getSortSelectors() {
|
|
247
|
+
return observableCombineLatest(this.state.pipe(observableMap((s) => s.sort.available), distinctUntilChanged()), this.state.pipe(observableMap((s) => s.sort.global), distinctUntilChanged()), this.state.pipe(observableMap((s) => s.sort.fieldSelectors), distinctUntilChanged()), (available, global, fieldSelectors) => {
|
|
248
|
+
// Get sorts that are in the global that are not in the available
|
|
249
|
+
const sorts = global.filter((g) => available.filter((a) => a.fieldSelector === g.fieldSelector)
|
|
250
|
+
.length === 0);
|
|
251
|
+
const resultSortSelectors = [...sorts, ...available].map((sortLabels) => {
|
|
252
|
+
const fs = fieldSelectors.filter((f) => {
|
|
253
|
+
return (f.fieldSelector === sortLabels.fieldSelector &&
|
|
254
|
+
f.descending === sortLabels.descending);
|
|
255
|
+
});
|
|
256
|
+
let selected = false;
|
|
257
|
+
if (fs.length > 0) {
|
|
258
|
+
selected = true;
|
|
259
|
+
}
|
|
260
|
+
return {
|
|
261
|
+
sort: sortLabels,
|
|
262
|
+
selected: selected,
|
|
263
|
+
};
|
|
264
|
+
});
|
|
265
|
+
return resultSortSelectors;
|
|
266
|
+
}).pipe(takeUntil(this.ngUnsubscribe));
|
|
267
|
+
}
|
|
268
|
+
watchTemplates() {
|
|
269
|
+
observableCombineLatest(this.state.pipe(observableMap((s) => s.toolbar), distinctUntilChanged()), this.view.pipe(distinctUntilChanged()), (toolbar, view) => {
|
|
270
|
+
const items = toolbar.items.filter((i) => {
|
|
271
|
+
return this.itemIsInView(i.view, view);
|
|
272
|
+
});
|
|
273
|
+
const templates = {};
|
|
274
|
+
items.forEach((item) => {
|
|
275
|
+
templates[item.location] = templates[item.location] || [];
|
|
276
|
+
templates[item.location].push(item);
|
|
277
|
+
});
|
|
278
|
+
return templates;
|
|
279
|
+
})
|
|
280
|
+
.pipe(takeUntil(this.ngUnsubscribe))
|
|
281
|
+
.subscribe((value) => {
|
|
282
|
+
this.leftTemplates = value.left;
|
|
283
|
+
this.centerTemplates = value.center;
|
|
284
|
+
this.rightTemplates = value.right;
|
|
285
|
+
this.changeDetector.markForCheck();
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
SkyListToolbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyListToolbarComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.ListState }, { token: i2.ListStateDispatcher }, { token: i3.ListToolbarState }, { token: i4.ListToolbarStateDispatcher }], target: i0.ɵɵFactoryTarget.Component });
|
|
290
|
+
SkyListToolbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: SkyListToolbarComponent, selector: "sky-list-toolbar", inputs: { inMemorySearchEnabled: "inMemorySearchEnabled", placeholder: "placeholder", searchEnabled: "searchEnabled", sortSelectorEnabled: "sortSelectorEnabled", toolbarType: "toolbarType", searchText: "searchText" }, providers: [
|
|
291
|
+
ListToolbarState,
|
|
292
|
+
ListToolbarStateDispatcher,
|
|
293
|
+
ListToolbarStateModel,
|
|
294
|
+
], queries: [{ propertyName: "toolbarItems", predicate: SkyListToolbarItemComponent }, { propertyName: "toolbarSorts", predicate: SkyListToolbarSortComponent }, { propertyName: "filterSummary", predicate: SkyListFilterSummaryComponent }, { propertyName: "inlineFilter", predicate: SkyListFilterInlineComponent }, { propertyName: "viewActions", predicate: SkyListToolbarViewActionsComponent }], viewQueries: [{ propertyName: "searchComponent", first: true, predicate: SkySearchComponent, descendants: true, read: SkySearchComponent }, { propertyName: "searchTemplate", first: true, predicate: ["search"], descendants: true, read: TemplateRef, static: true }, { propertyName: "sortSelectorTemplate", first: true, predicate: ["sortSelector"], descendants: true, read: TemplateRef, static: true }, { propertyName: "inlineFilterButtonTemplate", first: true, predicate: ["inlineFilterButton"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: "<div class=\"sky-list-toolbar-container\">\n <sky-toolbar *ngIf=\"(type | async) !== 'search'\">\n <sky-toolbar-section>\n <sky-toolbar-item *ngFor=\"let item of leftTemplates\">\n <sky-list-toolbar-item-renderer\n [attr.sky-cmp-id]=\"item.id\"\n [template]=\"item.template\"\n >\n </sky-list-toolbar-item-renderer>\n </sky-toolbar-item>\n <sky-toolbar-item *ngFor=\"let item of centerTemplates\">\n <sky-list-toolbar-item-renderer\n [attr.sky-cmp-id]=\"item.id\"\n [template]=\"item.template\"\n >\n </sky-list-toolbar-item-renderer>\n </sky-toolbar-item>\n <sky-toolbar-item\n *ngFor=\"let item of rightTemplates\"\n [attr.sky-toolbar-id]=\"item.id\"\n >\n <sky-list-toolbar-item-renderer\n [attr.sky-cmp-id]=\"item.id\"\n [template]=\"item.template\"\n >\n </sky-list-toolbar-item-renderer>\n </sky-toolbar-item>\n\n <ng-content></ng-content>\n\n <sky-toolbar-view-actions *ngIf=\"hasViewActions\">\n <ng-content select=\"sky-list-toolbar-view-actions\"> </ng-content>\n </sky-toolbar-view-actions>\n </sky-toolbar-section>\n\n <sky-toolbar-section\n *ngIf=\"showFilterSummary && (hasAppliedFilters | async)\"\n >\n <ng-content select=\"sky-list-filter-summary\"> </ng-content>\n </sky-toolbar-section>\n </sky-toolbar>\n\n <div\n *ngIf=\"\n (type | async) === 'search' &&\n ((isSearchEnabled | async) || hasAdditionalToolbarSection)\n \"\n class=\"sky-list-toolbar-search\"\n >\n <sky-toolbar>\n <sky-toolbar-section *ngIf=\"isSearchEnabled | async\">\n <sky-toolbar-item>\n <sky-list-toolbar-item-renderer\n sky-cmp-id=\"search\"\n [template]=\"search\"\n >\n </sky-list-toolbar-item-renderer>\n </sky-toolbar-item>\n </sky-toolbar-section>\n <sky-toolbar-section [hidden]=\"!hasAdditionalToolbarSection\">\n <sky-toolbar-item *ngFor=\"let item of leftTemplates\">\n <sky-list-toolbar-item-renderer\n [attr.sky-cmp-id]=\"item.id\"\n [template]=\"item.template\"\n >\n </sky-list-toolbar-item-renderer>\n </sky-toolbar-item>\n <sky-toolbar-item *ngFor=\"let item of centerTemplates\">\n <sky-list-toolbar-item-renderer\n [attr.sky-cmp-id]=\"item.id\"\n [template]=\"item.template\"\n >\n </sky-list-toolbar-item-renderer>\n </sky-toolbar-item>\n <sky-toolbar-item\n *ngFor=\"let item of rightTemplates\"\n [attr.sky-toolbar-id]=\"item.id\"\n >\n <sky-list-toolbar-item-renderer\n *ngIf=\"item.id !== 'search'\"\n [attr.sky-cmp-id]=\"item.id\"\n [template]=\"item.template\"\n >\n </sky-list-toolbar-item-renderer>\n </sky-toolbar-item>\n <ng-content></ng-content>\n\n <sky-toolbar-view-actions *ngIf=\"hasViewActions\">\n <ng-content select=\"sky-list-toolbar-view-actions\"> </ng-content>\n </sky-toolbar-view-actions>\n </sky-toolbar-section>\n </sky-toolbar>\n </div>\n <div\n *ngIf=\"isFilterBarDisplayed\"\n [attr.aria-labelledby]=\"filterButtonId\"\n [id]=\"listFilterInlineId\"\n >\n <ng-content select=\"sky-list-filter-inline\"> </ng-content>\n </div>\n <sky-list-multiselect-toolbar *ngIf=\"isMultiselectEnabled | async\">\n </sky-list-multiselect-toolbar>\n</div>\n\n<ng-template #search>\n <div *ngIf=\"isSearchEnabled | async\" class=\"sky-list-toolbar-search-wrapper\">\n <sky-search\n [disabled]=\"isToolbarDisabled\"\n [expandMode]=\"(type | async) === 'search' ? 'fit' : 'responsive'\"\n [placeholderText]=\"placeholder\"\n [searchText]=\"searchTextInput | async\"\n (searchApply)=\"updateSearchText($event)\"\n >\n </sky-search>\n <ng-content select=\"sky-list-toolbar-search-actions\"></ng-content>\n </div>\n</ng-template>\n\n<ng-template #sortSelector>\n <div\n *ngIf=\"\n (isSortSelectorEnabled | async) && (sortSelectors | async).length > 0\n \"\n class=\"sky-toolbar-item-sort-container\"\n >\n <sky-sort [showButtonText]=\"true\">\n <sky-sort-item\n *ngFor=\"let item of sortSelectors | async\"\n [active]=\"item.selected\"\n (itemSelect)=\"setSort(item.sort)\"\n >\n {{ item.sort.text }}\n </sky-sort-item>\n </sky-sort>\n </div>\n</ng-template>\n\n<ng-template #inlineFilterButton>\n <sky-filter-button\n [active]=\"hasAppliedFilters | async\"\n [ariaControls]=\"filterButtonAriaControls\"\n [ariaExpanded]=\"inlineFilterBarExpanded\"\n [disabled]=\"isToolbarDisabled\"\n [filterButtonId]=\"filterButtonId\"\n [showButtonText]=\"true\"\n (filterButtonClick)=\"inlineFilterButtonClick()\"\n >\n </sky-filter-button>\n</ng-template>\n", styles: [".sky-list-toolbar-search-wrapper{display:flex}.sky-list-toolbar-search-wrapper ::ng-deep .sky-search-dismiss-absolute{padding:0;position:static}.sky-list-toolbar-search-wrapper ::ng-deep .sky-search-container{position:relative;height:100%}.sky-list-toolbar-search-wrapper ::ng-deep sky-search{flex:1 1 auto}.sky-list-toolbar-search-wrapper ::ng-deep sky-list-toolbar-search-actions{flex:0 0 auto;z-index:1}.sky-list-toolbar-container ::ng-deep .sky-toolbar-section-items sky-toolbar-item{flex:0 1 auto;align-self:flex-start}.sky-list-toolbar-search ::ng-deep .sky-toolbar-section{padding-top:0}.sky-list-toolbar-search ::ng-deep .sky-toolbar-section-items{display:block;width:100%}.sky-list-toolbar-search ::ng-deep .sky-toolbar-item{margin:0}.sky-list-toolbar-search ::ng-deep .sky-toolbar-container,.sky-list-toolbar-search ::ng-deep .sky-search-dismiss-absolute{background-color:#eeeeef}.sky-list-toolbar-search ::ng-deep input[type=text]:disabled,.sky-list-toolbar-search ::ng-deep .sky-search-btn:disabled{background-color:#cdcfd2;opacity:1}.sky-list-toolbar-container ::ng-deep sky-toolbar-item[sky-toolbar-id=sort-selector] .sky-toolbar-item{margin-right:0}.sky-list-toolbar-container ::ng-deep sky-checkbox{position:relative;top:-2px}\n"], components: [{ type: i5.λ37, selector: "sky-toolbar" }, { type: i5.λ38, selector: "sky-toolbar-section" }, { type: i5.λ39, selector: "sky-toolbar-item" }, { type: i6.SkyListToolbarItemRendererComponent, selector: "sky-list-toolbar-item-renderer", inputs: ["template"] }, { type: i5.λ40, selector: "sky-toolbar-view-actions" }, { type: i7.SkyListMultiselectToolbarComponent, selector: "sky-list-multiselect-toolbar", inputs: ["showOnlySelected"] }, { type: i8.SkySearchComponent, selector: "sky-search", inputs: ["searchText", "expandMode", "debounceTime", "disabled", "placeholderText"], outputs: ["searchApply", "searchChange", "searchClear"] }, { type: i9.λ14, selector: "sky-sort", inputs: ["showButtonText"] }, { type: i9.λ13, selector: "sky-sort-item", inputs: ["active"], outputs: ["itemSelect"] }, { type: i9.λ1, selector: "sky-filter-button", inputs: ["filterButtonId", "ariaControls", "ariaExpanded", "active", "disabled", "showButtonText"], outputs: ["filterButtonClick"] }], directives: [{ type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "async": i10.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
295
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyListToolbarComponent, decorators: [{
|
|
296
|
+
type: Component,
|
|
297
|
+
args: [{ selector: 'sky-list-toolbar', providers: [
|
|
298
|
+
ListToolbarState,
|
|
299
|
+
ListToolbarStateDispatcher,
|
|
300
|
+
ListToolbarStateModel,
|
|
301
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"sky-list-toolbar-container\">\n <sky-toolbar *ngIf=\"(type | async) !== 'search'\">\n <sky-toolbar-section>\n <sky-toolbar-item *ngFor=\"let item of leftTemplates\">\n <sky-list-toolbar-item-renderer\n [attr.sky-cmp-id]=\"item.id\"\n [template]=\"item.template\"\n >\n </sky-list-toolbar-item-renderer>\n </sky-toolbar-item>\n <sky-toolbar-item *ngFor=\"let item of centerTemplates\">\n <sky-list-toolbar-item-renderer\n [attr.sky-cmp-id]=\"item.id\"\n [template]=\"item.template\"\n >\n </sky-list-toolbar-item-renderer>\n </sky-toolbar-item>\n <sky-toolbar-item\n *ngFor=\"let item of rightTemplates\"\n [attr.sky-toolbar-id]=\"item.id\"\n >\n <sky-list-toolbar-item-renderer\n [attr.sky-cmp-id]=\"item.id\"\n [template]=\"item.template\"\n >\n </sky-list-toolbar-item-renderer>\n </sky-toolbar-item>\n\n <ng-content></ng-content>\n\n <sky-toolbar-view-actions *ngIf=\"hasViewActions\">\n <ng-content select=\"sky-list-toolbar-view-actions\"> </ng-content>\n </sky-toolbar-view-actions>\n </sky-toolbar-section>\n\n <sky-toolbar-section\n *ngIf=\"showFilterSummary && (hasAppliedFilters | async)\"\n >\n <ng-content select=\"sky-list-filter-summary\"> </ng-content>\n </sky-toolbar-section>\n </sky-toolbar>\n\n <div\n *ngIf=\"\n (type | async) === 'search' &&\n ((isSearchEnabled | async) || hasAdditionalToolbarSection)\n \"\n class=\"sky-list-toolbar-search\"\n >\n <sky-toolbar>\n <sky-toolbar-section *ngIf=\"isSearchEnabled | async\">\n <sky-toolbar-item>\n <sky-list-toolbar-item-renderer\n sky-cmp-id=\"search\"\n [template]=\"search\"\n >\n </sky-list-toolbar-item-renderer>\n </sky-toolbar-item>\n </sky-toolbar-section>\n <sky-toolbar-section [hidden]=\"!hasAdditionalToolbarSection\">\n <sky-toolbar-item *ngFor=\"let item of leftTemplates\">\n <sky-list-toolbar-item-renderer\n [attr.sky-cmp-id]=\"item.id\"\n [template]=\"item.template\"\n >\n </sky-list-toolbar-item-renderer>\n </sky-toolbar-item>\n <sky-toolbar-item *ngFor=\"let item of centerTemplates\">\n <sky-list-toolbar-item-renderer\n [attr.sky-cmp-id]=\"item.id\"\n [template]=\"item.template\"\n >\n </sky-list-toolbar-item-renderer>\n </sky-toolbar-item>\n <sky-toolbar-item\n *ngFor=\"let item of rightTemplates\"\n [attr.sky-toolbar-id]=\"item.id\"\n >\n <sky-list-toolbar-item-renderer\n *ngIf=\"item.id !== 'search'\"\n [attr.sky-cmp-id]=\"item.id\"\n [template]=\"item.template\"\n >\n </sky-list-toolbar-item-renderer>\n </sky-toolbar-item>\n <ng-content></ng-content>\n\n <sky-toolbar-view-actions *ngIf=\"hasViewActions\">\n <ng-content select=\"sky-list-toolbar-view-actions\"> </ng-content>\n </sky-toolbar-view-actions>\n </sky-toolbar-section>\n </sky-toolbar>\n </div>\n <div\n *ngIf=\"isFilterBarDisplayed\"\n [attr.aria-labelledby]=\"filterButtonId\"\n [id]=\"listFilterInlineId\"\n >\n <ng-content select=\"sky-list-filter-inline\"> </ng-content>\n </div>\n <sky-list-multiselect-toolbar *ngIf=\"isMultiselectEnabled | async\">\n </sky-list-multiselect-toolbar>\n</div>\n\n<ng-template #search>\n <div *ngIf=\"isSearchEnabled | async\" class=\"sky-list-toolbar-search-wrapper\">\n <sky-search\n [disabled]=\"isToolbarDisabled\"\n [expandMode]=\"(type | async) === 'search' ? 'fit' : 'responsive'\"\n [placeholderText]=\"placeholder\"\n [searchText]=\"searchTextInput | async\"\n (searchApply)=\"updateSearchText($event)\"\n >\n </sky-search>\n <ng-content select=\"sky-list-toolbar-search-actions\"></ng-content>\n </div>\n</ng-template>\n\n<ng-template #sortSelector>\n <div\n *ngIf=\"\n (isSortSelectorEnabled | async) && (sortSelectors | async).length > 0\n \"\n class=\"sky-toolbar-item-sort-container\"\n >\n <sky-sort [showButtonText]=\"true\">\n <sky-sort-item\n *ngFor=\"let item of sortSelectors | async\"\n [active]=\"item.selected\"\n (itemSelect)=\"setSort(item.sort)\"\n >\n {{ item.sort.text }}\n </sky-sort-item>\n </sky-sort>\n </div>\n</ng-template>\n\n<ng-template #inlineFilterButton>\n <sky-filter-button\n [active]=\"hasAppliedFilters | async\"\n [ariaControls]=\"filterButtonAriaControls\"\n [ariaExpanded]=\"inlineFilterBarExpanded\"\n [disabled]=\"isToolbarDisabled\"\n [filterButtonId]=\"filterButtonId\"\n [showButtonText]=\"true\"\n (filterButtonClick)=\"inlineFilterButtonClick()\"\n >\n </sky-filter-button>\n</ng-template>\n", styles: [".sky-list-toolbar-search-wrapper{display:flex}.sky-list-toolbar-search-wrapper ::ng-deep .sky-search-dismiss-absolute{padding:0;position:static}.sky-list-toolbar-search-wrapper ::ng-deep .sky-search-container{position:relative;height:100%}.sky-list-toolbar-search-wrapper ::ng-deep sky-search{flex:1 1 auto}.sky-list-toolbar-search-wrapper ::ng-deep sky-list-toolbar-search-actions{flex:0 0 auto;z-index:1}.sky-list-toolbar-container ::ng-deep .sky-toolbar-section-items sky-toolbar-item{flex:0 1 auto;align-self:flex-start}.sky-list-toolbar-search ::ng-deep .sky-toolbar-section{padding-top:0}.sky-list-toolbar-search ::ng-deep .sky-toolbar-section-items{display:block;width:100%}.sky-list-toolbar-search ::ng-deep .sky-toolbar-item{margin:0}.sky-list-toolbar-search ::ng-deep .sky-toolbar-container,.sky-list-toolbar-search ::ng-deep .sky-search-dismiss-absolute{background-color:#eeeeef}.sky-list-toolbar-search ::ng-deep input[type=text]:disabled,.sky-list-toolbar-search ::ng-deep .sky-search-btn:disabled{background-color:#cdcfd2;opacity:1}.sky-list-toolbar-container ::ng-deep sky-toolbar-item[sky-toolbar-id=sort-selector] .sky-toolbar-item{margin-right:0}.sky-list-toolbar-container ::ng-deep sky-checkbox{position:relative;top:-2px}\n"] }]
|
|
302
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.ListState }, { type: i2.ListStateDispatcher }, { type: i3.ListToolbarState }, { type: i4.ListToolbarStateDispatcher }]; }, propDecorators: { inMemorySearchEnabled: [{
|
|
303
|
+
type: Input
|
|
304
|
+
}], placeholder: [{
|
|
305
|
+
type: Input
|
|
306
|
+
}], searchEnabled: [{
|
|
307
|
+
type: Input
|
|
308
|
+
}], searchComponent: [{
|
|
309
|
+
type: ViewChild,
|
|
310
|
+
args: [SkySearchComponent, {
|
|
311
|
+
read: SkySearchComponent,
|
|
312
|
+
static: false,
|
|
313
|
+
}]
|
|
314
|
+
}], sortSelectorEnabled: [{
|
|
315
|
+
type: Input
|
|
316
|
+
}], toolbarType: [{
|
|
317
|
+
type: Input
|
|
318
|
+
}], searchText: [{
|
|
319
|
+
type: Input
|
|
320
|
+
}], toolbarItems: [{
|
|
321
|
+
type: ContentChildren,
|
|
322
|
+
args: [SkyListToolbarItemComponent]
|
|
323
|
+
}], toolbarSorts: [{
|
|
324
|
+
type: ContentChildren,
|
|
325
|
+
args: [SkyListToolbarSortComponent]
|
|
326
|
+
}], filterSummary: [{
|
|
327
|
+
type: ContentChildren,
|
|
328
|
+
args: [SkyListFilterSummaryComponent]
|
|
329
|
+
}], inlineFilter: [{
|
|
330
|
+
type: ContentChildren,
|
|
331
|
+
args: [SkyListFilterInlineComponent]
|
|
332
|
+
}], viewActions: [{
|
|
333
|
+
type: ContentChildren,
|
|
334
|
+
args: [SkyListToolbarViewActionsComponent]
|
|
335
|
+
}], searchTemplate: [{
|
|
336
|
+
type: ViewChild,
|
|
337
|
+
args: ['search', {
|
|
338
|
+
read: TemplateRef,
|
|
339
|
+
static: true,
|
|
340
|
+
}]
|
|
341
|
+
}], sortSelectorTemplate: [{
|
|
342
|
+
type: ViewChild,
|
|
343
|
+
args: ['sortSelector', {
|
|
344
|
+
read: TemplateRef,
|
|
345
|
+
static: true,
|
|
346
|
+
}]
|
|
347
|
+
}], inlineFilterButtonTemplate: [{
|
|
348
|
+
type: ViewChild,
|
|
349
|
+
args: ['inlineFilterButton', {
|
|
350
|
+
read: TemplateRef,
|
|
351
|
+
static: true,
|
|
352
|
+
}]
|
|
353
|
+
}] } });
|
|
354
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC10b29sYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9saXN0LWJ1aWxkZXIvc3JjL2xpYi9tb2R1bGVzL2xpc3QtdG9vbGJhci9saXN0LXRvb2xiYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xpc3QtYnVpbGRlci9zcmMvbGliL21vZHVsZXMvbGlzdC10b29sYmFyL2xpc3QtdG9vbGJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsZUFBZSxFQUNmLEtBQUssRUFHTCxTQUFTLEVBQ1QsV0FBVyxFQUNYLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFFTCxPQUFPLEVBQ1AsYUFBYSxJQUFJLHVCQUF1QixHQUN6QyxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsR0FBRyxJQUFJLGFBQWEsRUFDcEIsSUFBSSxFQUNKLFNBQVMsR0FDVixNQUFNLGdCQUFnQixDQUFDO0FBR3hCLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzVGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQzlGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM1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QyxXQUFXO3NCQURqQixLQUFLO2dCQU9DLFVBQVU7c0JBRGhCLEtBQUs7Z0JBNENFLFlBQVk7c0JBRG5CLGVBQWU7dUJBQUMsMkJBQTJCO2dCQUlwQyxZQUFZO3NCQURuQixlQUFlO3VCQUFDLDJCQUEyQjtnQkFJcEMsYUFBYTtzQkFEcEIsZUFBZTt1QkFBQyw2QkFBNkI7Z0JBSXRDLFlBQVk7c0JBRG5CLGVBQWU7dUJBQUMsNEJBQTRCO2dCQUlyQyxXQUFXO3NCQURsQixlQUFlO3VCQUFDLGtDQUFrQztnQkFPM0MsY0FBYztzQkFKckIsU0FBUzt1QkFBQyxRQUFRLEVBQUU7d0JBQ25CLElBQUksRUFBRSxXQUFXO3dCQUNqQixNQUFNLEVBQUUsSUFBSTtxQkFDYjtnQkFPTyxvQkFBb0I7c0JBSjNCLFNBQVM7dUJBQUMsY0FBYyxFQUFFO3dCQUN6QixJQUFJLEVBQUUsV0FBVzt3QkFDakIsTUFBTSxFQUFFLElBQUk7cUJBQ2I7Z0JBT08sMEJBQTBCO3NCQUpqQyxTQUFTO3VCQUFDLG9CQUFvQixFQUFFO3dCQUMvQixJQUFJLEVBQUUsV0FBVzt3QkFDakIsTUFBTSxFQUFFLElBQUk7cUJBQ2IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBnZXRWYWx1ZSB9IGZyb20gJ0Bza3l1eC9saXN0LWJ1aWxkZXItY29tbW9uJztcbmltcG9ydCB7IExpc3RTb3J0RmllbGRTZWxlY3Rvck1vZGVsIH0gZnJvbSAnQHNreXV4L2xpc3QtYnVpbGRlci1jb21tb24nO1xuaW1wb3J0IHsgU2t5U2VhcmNoQ29tcG9uZW50IH0gZnJvbSAnQHNreXV4L2xvb2t1cCc7XG5cbmltcG9ydCB7XG4gIE9ic2VydmFibGUsXG4gIFN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QgYXMgb2JzZXJ2YWJsZUNvbWJpbmVMYXRlc3QsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIG1hcCBhcyBvYnNlcnZhYmxlTWFwLFxuICB0YWtlLFxuICB0YWtlVW50aWwsXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgTGlzdEZpbHRlck1vZGVsIH0gZnJvbSAnLi4vbGlzdC1maWx0ZXJzL2ZpbHRlci5tb2RlbCc7XG5pbXBvcnQgeyBTa3lMaXN0RmlsdGVySW5saW5lQ29tcG9uZW50IH0gZnJvbSAnLi4vbGlzdC1maWx0ZXJzL2xpc3QtZmlsdGVyLWlubGluZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5TGlzdEZpbHRlclN1bW1hcnlDb21wb25lbnQgfSBmcm9tICcuLi9saXN0LWZpbHRlcnMvbGlzdC1maWx0ZXItc3VtbWFyeS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTGlzdFN0YXRlRGlzcGF0Y2hlciB9IGZyb20gJy4uL2xpc3Qvc3RhdGUvbGlzdC1zdGF0ZS5yeHN0YXRlJztcbmltcG9ydCB7IExpc3RTdGF0ZSB9IGZyb20gJy4uL2xpc3Qvc3RhdGUvbGlzdC1zdGF0ZS5zdGF0ZS1ub2RlJztcbmltcG9ydCB7IExpc3RQYWdpbmdTZXRQYWdlTnVtYmVyQWN0aW9uIH0gZnJvbSAnLi4vbGlzdC9zdGF0ZS9wYWdpbmcvc2V0LXBhZ2UtbnVtYmVyLmFjdGlvbic7XG5pbXBvcnQgeyBMaXN0U29ydExhYmVsTW9kZWwgfSBmcm9tICcuLi9saXN0L3N0YXRlL3NvcnQvbGFiZWwubW9kZWwnO1xuaW1wb3J0IHsgTGlzdFRvb2xiYXJTZXRUeXBlQWN0aW9uIH0gZnJvbSAnLi4vbGlzdC9zdGF0ZS90b29sYmFyL3NldC10eXBlLmFjdGlvbic7XG5pbXBvcnQgeyBMaXN0VG9vbGJhckl0ZW1Nb2RlbCB9IGZyb20gJy4uL2xpc3Qvc3RhdGUvdG9vbGJhci90b29sYmFyLWl0ZW0ubW9kZWwnO1xuaW1wb3J0IHsgTGlzdFRvb2xiYXJNb2RlbCB9IGZyb20gJy4uL2xpc3Qvc3RhdGUvdG9vbGJhci90b29sYmFyLm1vZGVsJztcblxuaW1wb3J0IHsgU2t5TGlzdFRvb2xiYXJJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9saXN0LXRvb2xiYXItaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5TGlzdFRvb2xiYXJTb3J0Q29tcG9uZW50IH0gZnJvbSAnLi9saXN0LXRvb2xiYXItc29ydC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5TGlzdFRvb2xiYXJWaWV3QWN0aW9uc0NvbXBvbmVudCB9IGZyb20gJy4vbGlzdC10b29sYmFyLXZpZXctYWN0aW9ucy5jb21wb25lbnQnO1xuaW1wb3J0IHsgTGlzdFRvb2xiYXJDb25maWdTZXRTZWFyY2hFbmFibGVkQWN0aW9uIH0gZnJvbSAnLi9zdGF0ZS9jb25maWcvc2V0LXNlYXJjaC1lbmFibGVkLmFjdGlvbic7XG5pbXBvcnQgeyBMaXN0VG9vbGJhckNvbmZpZ1NldFNvcnRTZWxlY3RvckVuYWJsZWRBY3Rpb24gfSBmcm9tICcuL3N0YXRlL2NvbmZpZy9zZXQtc29ydC1zZWxlY3Rvci1lbmFibGVkLmFjdGlvbic7XG5pbXBvcnQgeyBMaXN0VG9vbGJhclN0YXRlTW9kZWwgfSBmcm9tICcuL3N0YXRlL3Rvb2xiYXItc3RhdGUubW9kZWwnO1xuaW1wb3J0IHsgTGlzdFRvb2xiYXJTdGF0ZURpc3BhdGNoZXIgfSBmcm9tICcuL3N0YXRlL3Rvb2xiYXItc3RhdGUucnhzdGF0ZSc7XG5pbXBvcnQgeyBMaXN0VG9vbGJhclN0YXRlIH0gZnJvbSAnLi9zdGF0ZS90b29sYmFyLXN0YXRlLnN0YXRlLW5vZGUnO1xuXG5sZXQgbmV4dElkID0gMDtcblxuLyoqXG4gKiBEaXNwbGF5cyBhIHRvb2xiYXIgZm9yIGEgU0tZIFVYLXRoZW1lZCBsaXN0IG9mIGRhdGEuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS1saXN0LXRvb2xiYXInLFxuICB0ZW1wbGF0ZVVybDogJy4vbGlzdC10b29sYmFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbGlzdC10b29sYmFyLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIExpc3RUb29sYmFyU3RhdGUsXG4gICAgTGlzdFRvb2xiYXJTdGF0ZURpc3BhdGNoZXIsXG4gICAgTGlzdFRvb2xiYXJTdGF0ZU1vZGVsLFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2t5TGlzdFRvb2xiYXJDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveVxue1xuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gdXNlIHRoZSBpbi1tZW1vcnkgc2VhcmNoLlxuICAgKiBTZXR0aW5nIHRoaXMgdG8gYGZhbHNlYCB3aWxsIGFsbG93IGNvbnN1bWVycyB0byBydW4gdGhlaXIgb3duIHNlYXJjaGVzIHJlbW90ZWx5LFxuICAgKiBhbmQgcHVzaCBuZXcgdmFsdWVzIHRvIHRoZSBsaXN0IGNvbXBvbmVudCBieSB1cGRhdGluZyB0aGUgYGRhdGFgIHByb3BlcnR5LlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBpbk1lbW9yeVNlYXJjaEVuYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9pbk1lbW9yeVNlYXJjaEVuYWJsZWQgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW5NZW1vcnlTZWFyY2hFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLl9pbk1lbW9yeVNlYXJjaEVuYWJsZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9pbk1lbW9yeVNlYXJjaEVuYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogU3BlY2lmaWVzIHBsYWNlaG9sZGVyIHRleHQgZm9yIHRoZSBzZWFyY2ggYmFyIHRoYXQgdGhlIGxpc3QgdG9vbGJhciBjcmVhdGVzIHdpdGhcbiAgICogYSBbc2VhcmNoIGNvbXBvbmVudF0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9jb21wb25lbnRzL3NlYXJjaCkuXG4gICAqIEBkZWZhdWx0IFwiRmluZCBpbiB0aGlzIGxpc3RcIlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIGVuYWJsZSB0aGUgc2VhcmNoIGJhci5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNlYXJjaEVuYWJsZWQ6IGJvb2xlYW4gfCBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gIEBWaWV3Q2hpbGQoU2t5U2VhcmNoQ29tcG9uZW50LCB7XG4gICAgcmVhZDogU2t5U2VhcmNoQ29tcG9uZW50LFxuICAgIHN0YXRpYzogZmFsc2UsXG4gIH0pXG4gIHB1YmxpYyBzZWFyY2hDb21wb25lbnQ6IFNreVNlYXJjaENvbXBvbmVudDtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gZW5hYmxlIHRoZSBzb3J0IHNlbGVjdG9yLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNvcnRTZWxlY3RvckVuYWJsZWQ6IGJvb2xlYW4gfCBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gIC8qKlxuICAgKiBEaXNwbGF5IHRoZSBzZWFyY2ggYmFyIGluIHRoZSBzdGFuZGFyZCBwb3NpdGlvbiBvciBpbiBhIHNlcGFyYXRlIHNlY3Rpb24uXG4gICAqIFRvIGhpZ2hsaWdodCB0aGUgc2VhcmNoIGJhciBpbiBhIHNlY3Rpb24gYWJvdmUgYWxsIG90aGVyIHRvb2xiYXIgaXRlbXMsXG4gICAqIHNldCB0aGlzIHByb3BlcnR5IHRvIGBzZWFyY2hgLlxuICAgKiBAZGVmYXVsdCBcInN0YW5kYXJkXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0b29sYmFyVHlwZSA9ICdzdGFuZGFyZCc7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBhIHRleHQgc3RyaW5nIHRvIHNlYXJjaCB3aXRoLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNlYXJjaFRleHQ6IHN0cmluZyB8IE9ic2VydmFibGU8c3RyaW5nPjtcblxuICBwdWJsaWMgZ2V0IGlzRmlsdGVyQmFyRGlzcGxheWVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAhdGhpcy5pc1Rvb2xiYXJEaXNhYmxlZCAmJlxuICAgICAgdGhpcy5oYXNJbmxpbmVGaWx0ZXJzICYmXG4gICAgICB0aGlzLmlubGluZUZpbHRlckJhckV4cGFuZGVkXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZmlsdGVyQnV0dG9uQXJpYUNvbnRyb2xzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXNGaWx0ZXJCYXJEaXNwbGF5ZWQgPyB0aGlzLmxpc3RGaWx0ZXJJbmxpbmVJZCA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBzb3J0U2VsZWN0b3JzOiBPYnNlcnZhYmxlPEFycmF5PGFueT4+O1xuICBwdWJsaWMgc2VhcmNoVGV4dElucHV0OiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIHB1YmxpYyB2aWV3OiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIHB1YmxpYyBsZWZ0VGVtcGxhdGVzOiBMaXN0VG9vbGJhckl0ZW1Nb2RlbFtdO1xuICBwdWJsaWMgY2VudGVyVGVtcGxhdGVzOiBMaXN0VG9vbGJhckl0ZW1Nb2RlbFtdO1xuICBwdWJsaWMgcmlnaHRUZW1wbGF0ZXM6IExpc3RUb29sYmFySXRlbU1vZGVsW107XG4gIHB1YmxpYyB0eXBlOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIHB1YmxpYyBpc1NlYXJjaEVuYWJsZWQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHB1YmxpYyBpc1Rvb2xiYXJEaXNhYmxlZCA9IGZhbHNlO1xuICBwdWJsaWMgaXNNdWx0aXNlbGVjdEVuYWJsZWQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHB1YmxpYyBpc1NvcnRTZWxlY3RvckVuYWJsZWQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHB1YmxpYyBhcHBsaWVkRmlsdGVyczogT2JzZXJ2YWJsZTxBcnJheTxMaXN0RmlsdGVyTW9kZWw+PjtcbiAgcHVibGljIGhhc0FwcGxpZWRGaWx0ZXJzOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBwdWJsaWMgc2hvd0ZpbHRlclN1bW1hcnk6IGJvb2xlYW47XG4gIHB1YmxpYyBoYXNJbmxpbmVGaWx0ZXJzOiBib29sZWFuO1xuICBwdWJsaWMgaW5saW5lRmlsdGVyQmFyRXhwYW5kZWQgPSBmYWxzZTtcbiAgcHVibGljIGhhc0FkZGl0aW9uYWxUb29sYmFyU2VjdGlvbiA9IGZhbHNlO1xuICBwdWJsaWMgaGFzVmlld0FjdGlvbnMgPSBmYWxzZTtcblxuICBwdWJsaWMgZmlsdGVyQnV0dG9uSWQgPSBgc2t5LWxpc3QtdG9vbGJhci1maWx0ZXItYnV0dG9uLSR7KytuZXh0SWR9YDtcbiAgcHVibGljIGxpc3RGaWx0ZXJJbmxpbmVJZCA9IGBza3ktbGlzdC10b29sYmFyLWZpbHRlci1pbmxpbmUtJHsrK25leHRJZH1gO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHVzZXJzIHN1Ym1pdCBhIHNlYXJjaC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgc2VhcmNoQXBwbGllZDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oU2t5TGlzdFRvb2xiYXJJdGVtQ29tcG9uZW50KVxuICBwcml2YXRlIHRvb2xiYXJJdGVtczogUXVlcnlMaXN0PFNreUxpc3RUb29sYmFySXRlbUNvbXBvbmVudD47XG5cbiAgQENvbnRlbnRDaGlsZHJlbihTa3lMaXN0VG9vbGJhclNvcnRDb21wb25lbnQpXG4gIHByaXZhdGUgdG9vbGJhclNvcnRzOiBRdWVyeUxpc3Q8U2t5TGlzdFRvb2xiYXJTb3J0Q29tcG9uZW50PjtcblxuICBAQ29udGVudENoaWxkcmVuKFNreUxpc3RGaWx0ZXJTdW1tYXJ5Q29tcG9uZW50KVxuICBwcml2YXRlIGZpbHRlclN1bW1hcnk6IFF1ZXJ5TGlzdDxTa3lMaXN0RmlsdGVyU3VtbWFyeUNvbXBvbmVudD47XG5cbiAgQENvbnRlbnRDaGlsZHJlbihTa3lMaXN0RmlsdGVySW5saW5lQ29tcG9uZW50KVxuICBwcml2YXRlIGlubGluZUZpbHRlcjogUXVlcnlMaXN0PFNreUxpc3RGaWx0ZXJJbmxpbmVDb21wb25lbnQ+O1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oU2t5TGlzdFRvb2xiYXJWaWV3QWN0aW9uc0NvbXBvbmVudClcbiAgcHJpdmF0ZSB2aWV3QWN0aW9uczogUXVlcnlMaXN0PFNreUxpc3RUb29sYmFyVmlld0FjdGlvbnNDb21wb25lbnQ+O1xuXG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaCcsIHtcbiAgICByZWFkOiBUZW1wbGF0ZVJlZixcbiAgICBzdGF0aWM6IHRydWUsXG4gIH0pXG4gIHByaXZhdGUgc2VhcmNoVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQFZpZXdDaGlsZCgnc29ydFNlbGVjdG9yJywge1xuICAgIHJlYWQ6IFRlbXBsYXRlUmVmLFxuICAgIHN0YXRpYzogdHJ1ZSxcbiAgfSlcbiAgcHJpdmF0ZSBzb3J0U2VsZWN0b3JUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAVmlld0NoaWxkKCdpbmxpbmVGaWx0ZXJCdXR0b24nLCB7XG4gICAgcmVhZDogVGVtcGxhdGVSZWYsXG4gICAgc3RhdGljOiB0cnVlLFxuICB9KVxuICBwcml2YXRlIGlubGluZUZpbHRlckJ1dHRvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIHByaXZhdGUgY3VzdG9tSXRlbUlkczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBoYXNTb3J0U2VsZWN0b3JzID0gZmFsc2U7XG4gIHByaXZhdGUgaW5saW5lRmlsdGVyc0l0ZW1Ub29sYmFySW5kZXggPSA1MDAwO1xuICBwcml2YXRlIHNvcnRTZWxlY3Rvckl0ZW1Ub29sYmFySW5kZXggPSA2MDAwO1xuICBwcml2YXRlIG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdCgpO1xuXG4gIHByaXZhdGUgX2luTWVtb3J5U2VhcmNoRW5hYmxlZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHN0YXRlOiBMaXN0U3RhdGUsXG4gICAgcHJpdmF0ZSBkaXNwYXRjaGVyOiBMaXN0U3RhdGVEaXNwYXRjaGVyLFxuICAgIHByaXZhdGUgdG9vbGJhclN0YXRlOiBMaXN0VG9vbGJhclN0YXRlLFxuICAgIHB1YmxpYyB0b29sYmFyRGlzcGF0Y2hlcjogTGlzdFRvb2xiYXJTdGF0ZURpc3BhdGNoZXJcbiAgKSB7fVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmRpc3BhdGNoZXIudG9vbGJhckV4aXN0cyh0cnVlKTtcblxuICAgIGdldFZhbHVlKHRoaXMuc2VhcmNoVGV4dCwgKHNlYXJjaFRleHQ6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy51cGRhdGVTZWFyY2hUZXh0KHNlYXJjaFRleHQpO1xuICAgIH0pO1xuXG4gICAgZ2V0VmFsdWUodGhpcy5zZWFyY2hFbmFibGVkLCAoc2VhcmNoRW5hYmxlZDogYm9vbGVhbikgPT4ge1xuICAgICAgdGhpcy50b29sYmFyRGlzcGF0Y2hlci5uZXh0KFxuICAgICAgICBuZXcgTGlzdFRvb2xiYXJDb25maWdTZXRTZWFyY2hFbmFibGVkQWN0aW9uKFxuICAgICAgICAgIHNlYXJjaEVuYWJsZWQgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBzZWFyY2hFbmFibGVkXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBnZXRWYWx1ZSh0aGlzLnRvb2xiYXJUeXBlLCAodHlwZTogc3RyaW5nKSA9PiB7XG4gICAgICB0aGlzLmRpc3BhdGNoZXIubmV4dChuZXcgTGlzdFRvb2xiYXJTZXRUeXBlQWN0aW9uKHRoaXMudG9vbGJhclR5cGUpKTtcbiAgICB9KTtcblxuICAgIGdldFZhbHVlKHRoaXMuc29ydFNlbGVjdG9yRW5hYmxlZCwgKHNvcnRTZWxlY3RvckVuYWJsZWQ6IGFueSkgPT4ge1xuICAgICAgdGhpcy50b29sYmFyRGlzcGF0Y2hlci5uZXh0KFxuICAgICAgICBuZXcgTGlzdFRvb2xiYXJDb25maWdTZXRTb3J0U2VsZWN0b3JFbmFibGVkQWN0aW9uKFxuICAgICAgICAgIHNvcnRTZWxlY3RvckVuYWJsZWQgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBzb3J0U2VsZWN0b3JFbmFibGVkXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnNvcnRTZWxlY3RvcnMgPSB0aGlzLmdldFNvcnRTZWxlY3RvcnMoKTtcblxuICAgIC8vIEluaXRpYWxpemUgdGhlIHNvcnQgdG9vbGJhciBpdGVtIGlmIG5lY2Vzc2FyeVxuICAgIHRoaXMuc29ydFNlbGVjdG9yc1xuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXG4gICAgICAuc3Vic2NyaWJlKChjdXJyZW50U29ydCkgPT4ge1xuICAgICAgICBpZiAoY3VycmVudFNvcnQubGVuZ3RoID4gMCAmJiAhdGhpcy5oYXNTb3J0U2VsZWN0b3JzKSB7XG4gICAgICAgICAgdGhpcy5oYXNTb3J0U2VsZWN0b3JzID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoZXIudG9vbGJhckFkZEl0ZW1zKFtcbiAgICAgICAgICAgIG5ldyBMaXN0VG9vbGJhckl0ZW1Nb2RlbCh7XG4gICAgICAgICAgICAgIGlkOiAnc29ydC1zZWxlY3RvcicsXG4gICAgICAgICAgICAgIHRlbXBsYXRlOiB0aGlzLnNvcnRTZWxlY3RvclRlbXBsYXRlLFxuICAgICAgICAgICAgICBsb2NhdGlvbjogJ2xlZnQnLFxuICAgICAgICAgICAgICBpbmRleDogdGhpcy5zb3J0U2VsZWN0b3JJdGVtVG9vbGJhckluZGV4LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFNvcnQubGVuZ3RoIDwgMSAmJiB0aGlzLmhhc1NvcnRTZWxlY3RvcnMpIHtcbiAgICAgICAgICB0aGlzLmhhc1NvcnRTZWxlY3RvcnMgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoZXIudG9vbGJhclJlbW92ZUl0ZW1zKFsnc29ydC1zZWxlY3RvciddKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLnNlYXJjaFRleHRJbnB1dCA9IHRoaXMuc3RhdGUucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgb2JzZXJ2YWJsZU1hcCgocykgPT4gcy5zZWFyY2guc2VhcmNoVGV4dCksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgKTtcblxuICAgIHRoaXMudmlldyA9IHRoaXMuc3RhdGUucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgb2JzZXJ2YWJsZU1hcCgocykgPT4gcy52aWV3cy5hY3RpdmUpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICk7XG5cbiAgICB0aGlzLndhdGNoVGVtcGxhdGVzKCk7XG5cbiAgICB0aGlzLnR5cGUgPSB0aGlzLnN0YXRlLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgIG9ic2VydmFibGVNYXAoKHN0YXRlKSA9PiBzdGF0ZS50b29sYmFyLnR5cGUpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICk7XG5cbiAgICB0aGlzLnR5cGUucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCh0b29sYmFyVHlwZSkgPT4ge1xuICAgICAgaWYgKHRvb2xiYXJUeXBlID09PSAnc2VhcmNoJykge1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIudG9vbGJhclJlbW92ZUl0ZW1zKFsnc2VhcmNoJ10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyLnRvb2xiYXJBZGRJdGVtcyhbXG4gICAgICAgICAgbmV3IExpc3RUb29sYmFySXRlbU1vZGVsKHtcbiAgICAgICAgICAgIGlkOiAnc2VhcmNoJyxcbiAgICAgICAgICAgIHRlbXBsYXRlOiB0aGlzLnNlYXJjaFRlbXBsYXRlLFxuICAgICAgICAgICAgbG9jYXRpb246ICdyaWdodCcsXG4gICAgICAgICAgfSksXG4gICAgICAgIF0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5pc1NlYXJjaEVuYWJsZWQgPSB0aGlzLnRvb2xiYXJTdGF0ZS5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICBvYnNlcnZhYmxlTWFwKChzKSA9PiBzLmNvbmZpZyksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgb2JzZXJ2YWJsZU1hcCgoYykgPT4gYy5zZWFyY2hFbmFibGVkKVxuICAgICk7XG5cbiAgICB0aGlzLnN0YXRlXG4gICAgICAucGlwZShcbiAgICAgICAgb2JzZXJ2YWJsZU1hcCgocykgPT4gcy50b29sYmFyKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIG9ic2VydmFibGVNYXAoKGMpID0+IGMuZGlzYWJsZWQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChpc0Rpc2FibGVkKSA9PiAodGhpcy5pc1Rvb2xiYXJEaXNhYmxlZCA9IGlzRGlzYWJsZWQpKTtcblxuICAgIHRoaXMuaXNTb3J0U2VsZWN0b3JFbmFibGVkID0gdGhpcy50b29sYmFyU3RhdGUucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgb2JzZXJ2YWJsZU1hcCgocykgPT4gcy5jb25maWcpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIG9ic2VydmFibGVNYXAoKGMpID0+IGMuc29ydFNlbGVjdG9yRW5hYmxlZClcbiAgICApO1xuXG4gICAgdGhpcy5pc011bHRpc2VsZWN0RW5hYmxlZCA9IHRoaXMuc3RhdGUucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgb2JzZXJ2YWJsZU1hcCgocykgPT4gcy50b29sYmFyKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBvYnNlcnZhYmxlTWFwKCh0KSA9PiB0LnNob3dNdWx0aXNlbGVjdFRvb2xiYXIpXG4gICAgKTtcblxuICAgIHRoaXMuaGFzQXBwbGllZEZpbHRlcnMgPSB0aGlzLnN0YXRlLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgIG9ic2VydmFibGVNYXAoKHMpID0+IHMuZmlsdGVycyksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgb2JzZXJ2YWJsZU1hcCgoZmlsdGVycykgPT4ge1xuICAgICAgICBjb25zdCBhY3RpdmVGaWx0ZXJzID0gZmlsdGVycy5maWx0ZXIoKGYpID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgZi52YWx1ZSAhPT0gJycgJiZcbiAgICAgICAgICAgIGYudmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgZi52YWx1ZSAhPT0gZmFsc2UgJiZcbiAgICAgICAgICAgIGYudmFsdWUgIT09IGYuZGVmYXVsdFZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBhY3RpdmVGaWx0ZXJzLmxlbmd0aCA+IDA7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN0YXRlLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgoY3VycmVudDogYW55KSA9PiB7XG4gICAgICB0aGlzLmhhc0FkZGl0aW9uYWxUb29sYmFyU2VjdGlvbiA9IGN1cnJlbnQudG9vbGJhci5pdGVtcy5sZW5ndGggPiAwO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIC8vIEluamVjdCBjdXN0b20gdG9vbGJhciBpdGVtcy5cbiAgICB0aGlzLnRvb2xiYXJJdGVtcy5mb3JFYWNoKCh0b29sYmFySXRlbSkgPT4ge1xuICAgICAgdGhpcy5kaXNwYXRjaGVyLnRvb2xiYXJBZGRJdGVtcyhbbmV3IExpc3RUb29sYmFySXRlbU1vZGVsKHRvb2xiYXJJdGVtKV0pO1xuXG4gICAgICB0aGlzLmN1c3RvbUl0ZW1JZHMucHVzaCh0b29sYmFySXRlbS5pZCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnRvb2xiYXJJdGVtcy5jaGFuZ2VzXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKG5ld0l0ZW1zOiBRdWVyeUxpc3Q8U2t5TGlzdFRvb2xiYXJJdGVtQ29tcG9uZW50PikgPT4ge1xuICAgICAgICBuZXdJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuY3VzdG9tSXRlbUlkcy5pbmRleE9mKGl0ZW0uaWQpIDwgMCkge1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaGVyLnRvb2xiYXJBZGRJdGVtcyhbbmV3IExpc3RUb29sYmFySXRlbU1vZGVsKGl0ZW0pXSk7XG5cbiAgICAgICAgICAgIHRoaXMuY3VzdG9tSXRlbUlkcy5wdXNoKGl0ZW0uaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgaXRlbXNUb1JlbW92ZTogc3RyaW5nW10gPSBbXTtcblxuICAgICAgICB0aGlzLmN1c3RvbUl0ZW1JZHMuZm9yRWFjaCgoaXRlbUlkLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGlmICghbmV3SXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gaXRlbUlkKSkge1xuICAgICAgICAgICAgaXRlbXNUb1JlbW92ZS5wdXNoKGl0ZW1JZCk7XG4gICAgICAgICAgICB0aGlzLmN1c3RvbUl0ZW1JZHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlci50b29sYmFyUmVtb3ZlSXRlbXMoaXRlbXNUb1JlbW92ZSk7XG4gICAgICB9KTtcblxuICAgIGNvbnN0IHNvcnRNb2RlbHMgPSB0aGlzLnRvb2xiYXJTb3J0cy5tYXAoXG4gICAgICAoc29ydCkgPT5cbiAgICAgICAgbmV3IExpc3RTb3J0TGFiZWxNb2RlbCh7XG4gICAgICAgICAgdGV4dDogc29ydC5sYWJlbCxcbiAgICAgICAgICBmaWVsZFNlbGVjdG9yOiBzb3J0LmZpZWxkLFxuICAgICAgICAgIGZpZWxkVHlwZTogc29ydC50eXBlLFxuICAgICAgICAgIGdsb2JhbDogdHJ1ZSxcbiAgICAgICAgICBkZXNjZW5kaW5nOiBzb3J0LmRlc2NlbmRpbmcsXG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuZGlzcGF0Y2hlci5zb3J0U2V0R2xvYmFsKHNvcnRNb2RlbHMpO1xuXG4gICAgLy8gQWRkIGlubGluZSBmaWx0ZXJzLlxuICAgIHRoaXMuc2hvd0ZpbHRlclN1bW1hcnkgPSB0aGlzLmZpbHRlclN1bW1hcnkubGVuZ3RoID4gMDtcbiAgICB0aGlzLmhhc0lubGluZUZpbHRlcnMgPSB0aGlzLmlubGluZUZpbHRlci5sZW5ndGggPiAwO1xuXG4gICAgaWYgKHRoaXMuaGFzSW5saW5lRmlsdGVycykge1xuICAgICAgdGhpcy5kaXNwYXRjaGVyLnRvb2xiYXJBZGRJdGVtcyhbXG4gICAgICAgIG5ldyBMaXN0VG9vbGJhckl0ZW1Nb2RlbCh7XG4gICAgICAgICAgdGVtcGxhdGU6IHRoaXMuaW5saW5lRmlsdGVyQnV0dG9uVGVtcGxhdGUsXG4gICAgICAgICAgbG9jYXRpb246ICdsZWZ0JyxcbiAgICAgICAgICBpbmRleDogdGhpcy5pbmxpbmVGaWx0ZXJzSXRlbVRvb2xiYXJJbmRleCxcbiAgICAgICAgfSksXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3IgdmlldyBhY3Rpb25zXG4gICAgdGhpcy5oYXNWaWV3QWN0aW9ucyA9IHRoaXMudmlld0FjdGlvbnMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnNlYXJjaEFwcGxpZWQuY29tcGxldGUoKTtcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIHNldFNvcnQoc29ydDogTGlzdFNvcnRMYWJlbE1vZGVsKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoY3VycmVudFN0YXRlKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGN1cnJlbnRTdGF0ZS5wYWdpbmcucGFnZU51bWJlciAmJlxuICAgICAgICBjdXJyZW50U3RhdGUucGFnaW5nLnBhZ2VOdW1iZXIgIT09IDFcbiAgICAgICkge1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIubmV4dChuZXcgTGlzdFBhZ2luZ1NldFBhZ2VOdW1iZXJBY3Rpb24oTnVtYmVyKDEpKSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGlzcGF0Y2hlci5zb3J0U2V0RmllbGRTZWxlY3RvcnMoW1xuICAgICAgICB7IGZpZWxkU2VsZWN0b3I6IHNvcnQuZmllbGRTZWxlY3RvciwgZGVzY2VuZGluZzogc29ydC5kZXNjZW5kaW5nIH0sXG4gICAgICBdKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBpbmxpbmVGaWx0ZXJCdXR0b25DbGljaygpIHtcbiAgICB0aGlzLmlubGluZUZpbHRlckJhckV4cGFuZGVkID0gIXRoaXMuaW5saW5lRmlsdGVyQmFyRXhwYW5kZWQ7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlU2VhcmNoVGV4dChzZWFyY2hUZXh0OiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlYXJjaEFwcGxpZWQubmV4dChzZWFyY2hUZXh0KTtcbiAgICBpZiAodGhpcy5pbk1lbW9yeVNlYXJjaEVuYWJsZWQpIHtcbiAgICAgIHRoaXMuc3RhdGUucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKGN1cnJlbnRTdGF0ZSkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY3VycmVudFN0YXRlLnBhZ2luZy5wYWdlTnVtYmVyICYmXG4gICAgICAgICAgY3VycmVudFN0YXRlLnBhZ2luZy5wYWdlTnVtYmVyICE9PSAxXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuZGlzcGF0Y2hlci5uZXh0KG5ldyBMaXN0UGFnaW5nU2V0UGFnZU51bWJlckFjdGlvbihOdW1iZXIoMSkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlci5zZWFyY2hTZXRUZXh0KHNlYXJjaFRleHQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpdGVtSXNJblZpZXcoaXRlbVZpZXc6IHN0cmluZywgYWN0aXZlVmlldzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGl0ZW1WaWV3ID09PSB1bmRlZmluZWQgfHwgaXRlbVZpZXcgPT09IGFjdGl2ZVZpZXc7XG4gIH1cblxuICBwcml2YXRlIGdldFNvcnRTZWxlY3RvcnMoKSB7XG4gICAgcmV0dXJuIG9ic2VydmFibGVDb21iaW5lTGF0ZXN0KFxuICAgICAgdGhpcy5zdGF0ZS5waXBlKFxuICAgICAgICBvYnNlcnZhYmxlTWFwKChzKSA9PiBzLnNvcnQuYXZhaWxhYmxlKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgKSxcbiAgICAgIHRoaXMuc3RhdGUucGlwZShcbiAgICAgICAgb2JzZXJ2YWJsZU1hcCgocykgPT4gcy5zb3J0Lmdsb2JhbCksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICksXG4gICAgICB0aGlzLnN0YXRlLnBpcGUoXG4gICAgICAgIG9ic2VydmFibGVNYXAoKHMpID0+IHMuc29ydC5maWVsZFNlbGVjdG9ycyksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICksXG4gICAgICAoXG4gICAgICAgIGF2YWlsYWJsZTogQXJyYXk8TGlzdFNvcnRMYWJlbE1vZGVsPixcbiAgICAgICAgZ2xvYmFsOiBBcnJheTxMaXN0U29ydExhYmVsTW9kZWw+LFxuICAgICAgICBmaWVsZFNlbGVjdG9yczogQXJyYXk8TGlzdFNvcnRGaWVsZFNlbGVjdG9yTW9kZWw+XG4gICAgICApID0+IHtcbiAgICAgICAgLy8gR2V0IHNvcnRzIHRoYXQgYXJlIGluIHRoZSBnbG9iYWwgdGhhdCBhcmUgbm90IGluIHRoZSBhdmFpbGFibGVcbiAgICAgICAgY29uc3Qgc29ydHMgPSBnbG9iYWwuZmlsdGVyKFxuICAgICAgICAgIChnKSA9PlxuICAgICAgICAgICAgYXZhaWxhYmxlLmZpbHRlcigoYSkgPT4gYS5maWVsZFNlbGVjdG9yID09PSBnLmZpZWxkU2VsZWN0b3IpXG4gICAgICAgICAgICAgIC5sZW5ndGggPT09IDBcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCByZXN1bHRTb3J0U2VsZWN0b3JzID0gWy4uLnNvcnRzLCAuLi5hdmFpbGFibGVdLm1hcChcbiAgICAgICAgICAoc29ydExhYmVscykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZnMgPSBmaWVsZFNlbGVjdG9ycy5maWx0ZXIoKGYpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBmLmZpZWxkU2VsZWN0b3IgPT09IHNvcnRMYWJlbHMuZmllbGRTZWxlY3RvciAmJlxuICAgICAgICAgICAgICAgIGYuZGVzY2VuZGluZyA9PT0gc29ydExhYmVscy5kZXNjZW5kaW5nXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxldCBzZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKGZzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzb3J0OiBzb3J0TGFiZWxzLFxuICAgICAgICAgICAgICBzZWxlY3RlZDogc2VsZWN0ZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0U29ydFNlbGVjdG9ycztcbiAgICAgIH1cbiAgICApLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSB3YXRjaFRlbXBsYXRlcygpIHtcbiAgICBvYnNlcnZhYmxlQ29tYmluZUxhdGVzdChcbiAgICAgIHRoaXMuc3RhdGUucGlwZShcbiAgICAgICAgb2JzZXJ2YWJsZU1hcCgocykgPT4gcy50b29sYmFyKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgKSxcbiAgICAgIHRoaXMudmlldy5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLFxuICAgICAgKHRvb2xiYXI6IExpc3RUb29sYmFyTW9kZWwsIHZpZXc6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBpdGVtcyA9IHRvb2xiYXIuaXRlbXMuZmlsdGVyKChpOiBMaXN0VG9vbGJhckl0ZW1Nb2RlbCkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLml0ZW1Jc0luVmlldyhpLnZpZXcsIHZpZXcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0ZW1wbGF0ZXM6IGFueSA9IHt9O1xuXG4gICAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW06IExpc3RUb29sYmFySXRlbU1vZGVsKSA9PiB7XG4gICAgICAgICAgdGVtcGxhdGVzW2l0ZW0ubG9jYXRpb25dID0gdGVtcGxhdGVzW2l0ZW0ubG9jYXRpb25dIHx8IFtdO1xuICAgICAgICAgIHRlbXBsYXRlc1tpdGVtLmxvY2F0aW9uXS5wdXNoKGl0ZW0pO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGVtcGxhdGVzO1xuICAgICAgfVxuICAgIClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgdGhpcy5sZWZ0VGVtcGxhdGVzID0gdmFsdWUubGVmdDtcbiAgICAgICAgdGhpcy5jZW50ZXJUZW1wbGF0ZXMgPSB2YWx1ZS5jZW50ZXI7XG4gICAgICAgIHRoaXMucmlnaHRUZW1wbGF0ZXMgPSB2YWx1ZS5yaWdodDtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic2t5LWxpc3QtdG9vbGJhci1jb250YWluZXJcIj5cbiAgPHNreS10b29sYmFyICpuZ0lmPVwiKHR5cGUgfCBhc3luYykgIT09ICdzZWFyY2gnXCI+XG4gICAgPHNreS10b29sYmFyLXNlY3Rpb24+XG4gICAgICA8c2t5LXRvb2xiYXItaXRlbSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBsZWZ0VGVtcGxhdGVzXCI+XG4gICAgICAgIDxza3ktbGlzdC10b29sYmFyLWl0ZW0tcmVuZGVyZXJcbiAgICAgICAgICBbYXR0ci5za3ktY21wLWlkXT1cIml0ZW0uaWRcIlxuICAgICAgICAgIFt0ZW1wbGF0ZV09XCJpdGVtLnRlbXBsYXRlXCJcbiAgICAgICAgPlxuICAgICAgICA8L3NreS1saXN0LXRvb2xiYXItaXRlbS1yZW5kZXJlcj5cbiAgICAgIDwvc2t5LXRvb2xiYXItaXRlbT5cbiAgICAgIDxza3ktdG9vbGJhci1pdGVtICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNlbnRlclRlbXBsYXRlc1wiPlxuICAgICAgICA8c2t5LWxpc3QtdG9vbGJhci1pdGVtLXJlbmRlcmVyXG4gICAgICAgICAgW2F0dHIuc2t5LWNtcC1pZF09XCJpdGVtLmlkXCJcbiAgICAgICAgICBbdGVtcGxhdGVdPVwiaXRlbS50ZW1wbGF0ZVwiXG4gICAgICAgID5cbiAgICAgICAgPC9za3ktbGlzdC10b29sYmFyLWl0ZW0tcmVuZGVyZXI+XG4gICAgICA8L3NreS10b29sYmFyLWl0ZW0+XG4gICAgICA8c2t5LXRvb2xiYXItaXRlbVxuICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiByaWdodFRlbXBsYXRlc1wiXG4gICAgICAgIFthdHRyLnNreS10b29sYmFyLWlkXT1cIml0ZW0uaWRcIlxuICAgICAgPlxuICAgICAgICA8c2t5LWxpc3QtdG9vbGJhci1pdGVtLXJlbmRlcmVyXG4gICAgICAgICAgW2F0dHIuc2t5LWNtcC1pZF09XCJpdGVtLmlkXCJcbiAgICAgICAgICBbdGVtcGxhdGVdPVwiaXRlbS50ZW1wbGF0ZVwiXG4gICAgICAgID5cbiAgICAgICAgPC9za3ktbGlzdC10b29sYmFyLWl0ZW0tcmVuZGVyZXI+XG4gICAgICA8L3NreS10b29sYmFyLWl0ZW0+XG5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cblxuICAgICAgPHNreS10b29sYmFyLXZpZXctYWN0aW9ucyAqbmdJZj1cImhhc1ZpZXdBY3Rpb25zXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInNreS1saXN0LXRvb2xiYXItdmlldy1hY3Rpb25zXCI+IDwvbmctY29udGVudD5cbiAgICAgIDwvc2t5LXRvb2xiYXItdmlldy1hY3Rpb25zPlxuICAgIDwvc2t5LXRvb2xiYXItc2VjdGlvbj5cblxuICAgIDxza3ktdG9vbGJhci1zZWN0aW9uXG4gICAgICAqbmdJZj1cInNob3dGaWx0ZXJTdW1tYXJ5ICYmIChoYXNBcHBsaWVkRmlsdGVycyB8IGFzeW5jKVwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwic2t5LWxpc3QtZmlsdGVyLXN1bW1hcnlcIj4gPC9uZy1jb250ZW50PlxuICAgIDwvc2t5LXRvb2xiYXItc2VjdGlvbj5cbiAgPC9za3ktdG9vbGJhcj5cblxuICA8ZGl2XG4gICAgKm5nSWY9XCJcbiAgICAgICh0eXBlIHwgYXN5bmMpID09PSAnc2VhcmNoJyAmJlxuICAgICAgKChpc1NlYXJjaEVuYWJsZWQgfCBhc3luYykgfHwgaGFzQWRkaXRpb25hbFRvb2xiYXJTZWN0aW9uKVxuICAgIFwiXG4gICAgY2xhc3M9XCJza3ktbGlzdC10b29sYmFyLXNlYXJjaFwiXG4gID5cbiAgICA8c2t5LXRvb2xiYXI+XG4gICAgICA8c2t5LXRvb2xiYXItc2VjdGlvbiAqbmdJZj1cImlzU2VhcmNoRW5hYmxlZCB8IGFzeW5jXCI+XG4gICAgICAgIDxza3ktdG9vbGJhci1pdGVtPlxuICAgICAgICAgIDxza3ktbGlzdC10b29sYmFyLWl0ZW0tcmVuZGVyZXJcbiAgICAgICAgICAgIHNreS1jbXAtaWQ9XCJzZWFyY2hcIlxuICAgICAgICAgICAgW3RlbXBsYXRlXT1cInNlYXJjaFwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvc2t5LWxpc3QtdG9vbGJhci1pdGVtLXJlbmRlcmVyPlxuICAgICAgICA8L3NreS10b29sYmFyLWl0ZW0+XG4gICAgICA8L3NreS10b29sYmFyLXNlY3Rpb24+XG4gICAgICA8c2t5LXRvb2xiYXItc2VjdGlvbiBbaGlkZGVuXT1cIiFoYXNBZGRpdGlvbmFsVG9vbGJhclNlY3Rpb25cIj5cbiAgICAgICAgPHNreS10b29sYmFyLWl0ZW0gKm5nRm9yPVwibGV0IGl0ZW0gb2YgbGVmdFRlbXBsYXRlc1wiPlxuICAgICAgICAgIDxza3ktbGlzdC10b29sYmFyLWl0ZW0tcmVuZGVyZXJcbiAgICAgICAgICAgIFthdHRyLnNreS1jbXAtaWRdPVwiaXRlbS5pZFwiXG4gICAgICAgICAgICBbdGVtcGxhdGVdPVwiaXRlbS50ZW1wbGF0ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvc2t5LWxpc3QtdG9vbGJhci1pdGVtLXJlbmRlcmVyPlxuICAgICAgICA8L3NreS10b29sYmFyLWl0ZW0+XG4gICAgICAgIDxza3ktdG9vbGJhci1pdGVtICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNlbnRlclRlbXBsYXRlc1wiPlxuICAgICAgICAgIDxza3ktbGlzdC10b29sYmFyLWl0ZW0tcmVuZGVyZXJcbiAgICAgICAgICAgIFthdHRyLnNreS1jbXAtaWRdPVwiaXRlbS5pZFwiXG4gICAgICAgICAgICBbdGVtcGxhdGVdPVwiaXRlbS50ZW1wbGF0ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvc2t5LWxpc3QtdG9vbGJhci1pdGVtLXJlbmRlcmVyPlxuICAgICAgICA8L3NreS10b29sYmFyLWl0ZW0+XG4gICAgICAgIDxza3ktdG9vbGJhci1pdGVtXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcmlnaHRUZW1wbGF0ZXNcIlxuICAgICAgICAgIFthdHRyLnNreS10b29sYmFyLWlkXT1cIml0ZW0uaWRcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNreS1saXN0LXRvb2xiYXItaXRlbS1yZW5kZXJlclxuICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmlkICE9PSAnc2VhcmNoJ1wiXG4gICAgICAgICAgICBbYXR0ci5za3ktY21wLWlkXT1cIml0ZW0uaWRcIlxuICAgICAgICAgICAgW3RlbXBsYXRlXT1cIml0ZW0udGVtcGxhdGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L3NreS1saXN0LXRvb2xiYXItaXRlbS1yZW5kZXJlcj5cbiAgICAgICAgPC9za3ktdG9vbGJhci1pdGVtPlxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG5cbiAgICAgICAgPHNreS10b29sYmFyLXZpZXctYWN0aW9ucyAqbmdJZj1cImhhc1ZpZXdBY3Rpb25zXCI+XG4gICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwic2t5LWxpc3QtdG9vbGJhci12aWV3LWFjdGlvbnNcIj4gPC9uZy1jb250ZW50PlxuICAgICAgICA8L3NreS10b29sYmFyLXZpZXctYWN0aW9ucz5cbiAgICAgIDwvc2t5LXRvb2xiYXItc2VjdGlvbj5cbiAgICA8L3NreS10b29sYmFyPlxuICA8L2Rpdj5cbiAgPGRpdlxuICAgICpuZ0lmPVwiaXNGaWx0ZXJCYXJEaXNwbGF5ZWRcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJmaWx0ZXJCdXR0b25JZFwiXG4gICAgW2lkXT1cImxpc3RGaWx0ZXJJbmxpbmVJZFwiXG4gID5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJza3ktbGlzdC1maWx0ZXItaW5saW5lXCI+IDwvbmctY29udGVudD5cbiAgPC9kaXY+XG4gIDxza3ktbGlzdC1tdWx0aXNlbGVjdC10b29sYmFyICpuZ0lmPVwiaXNNdWx0aXNlbGVjdEVuYWJsZWQgfCBhc3luY1wiPlxuICA8L3NreS1saXN0LW11bHRpc2VsZWN0LXRvb2xiYXI+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNzZWFyY2g+XG4gIDxkaXYgKm5nSWY9XCJpc1NlYXJjaEVuYWJsZWQgfCBhc3luY1wiIGNsYXNzPVwic2t5LWxpc3QtdG9vbGJhci1zZWFyY2gtd3JhcHBlclwiPlxuICAgIDxza3ktc2VhcmNoXG4gICAgICBbZGlzYWJsZWRdPVwiaXNUb29sYmFyRGlzYWJsZWRcIlxuICAgICAgW2V4cGFuZE1vZGVdPVwiKHR5cGUgfCBhc3luYykgPT09ICdzZWFyY2gnID8gJ2ZpdCcgOiAncmVzcG9uc2l2ZSdcIlxuICAgICAgW3BsYWNlaG9sZGVyVGV4dF09XCJwbGFjZWhvbGRlclwiXG4gICAgICBbc2VhcmNoVGV4dF09XCJzZWFyY2hUZXh0SW5wdXQgfCBhc3luY1wiXG4gICAgICAoc2VhcmNoQXBwbHkpPVwidXBkYXRlU2VhcmNoVGV4dCgkZXZlbnQpXCJcbiAgICA+XG4gICAgPC9za3ktc2VhcmNoPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInNreS1saXN0LXRvb2xiYXItc2VhcmNoLWFjdGlvbnNcIj48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzb3J0U2VsZWN0b3I+XG4gIDxkaXZcbiAgICAqbmdJZj1cIlxuICAgICAgKGlzU29ydFNlbGVjdG9yRW5hYmxlZCB8IGFzeW5jKSAmJiAoc29ydFNlbGVjdG9ycyB8IGFzeW5jKS5sZW5ndGggPiAwXG4gICAgXCJcbiAgICBjbGFzcz1cInNreS10b29sYmFyLWl0ZW0tc29ydC1jb250YWluZXJcIlxuICA+XG4gICAgPHNreS1zb3J0IFtzaG93QnV0dG9uVGV4dF09XCJ0cnVlXCI+XG4gICAgICA8c2t5LXNvcnQtaXRlbVxuICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBzb3J0U2VsZWN0b3JzIHwgYXN5bmNcIlxuICAgICAgICBbYWN0aXZlXT1cIml0ZW0uc2VsZWN0ZWRcIlxuICAgICAgICAoaXRlbVNlbGVjdCk9XCJzZXRTb3J0KGl0ZW0uc29ydClcIlxuICAgICAgPlxuICAgICAgICB7eyBpdGVtLnNvcnQudGV4dCB9fVxuICAgICAgPC9za3ktc29ydC1pdGVtPlxuICAgIDwvc2t5LXNvcnQ+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNpbmxpbmVGaWx0ZXJCdXR0b24+XG4gIDxza3ktZmlsdGVyLWJ1dHRvblxuICAgIFthY3RpdmVdPVwiaGFzQXBwbGllZEZpbHRlcnMgfCBhc3luY1wiXG4gICAgW2FyaWFDb250cm9sc109XCJmaWx0ZXJCdXR0b25BcmlhQ29udHJvbHNcIlxuICAgIFthcmlhRXhwYW5kZWRdPVwiaW5saW5lRmlsdGVyQmFyRXhwYW5kZWRcIlxuICAgIFtkaXNhYmxlZF09XCJpc1Rvb2xiYXJEaXNhYmxlZFwiXG4gICAgW2ZpbHRlckJ1dHRvbklkXT1cImZpbHRlckJ1dHRvbklkXCJcbiAgICBbc2hvd0J1dHRvblRleHRdPVwidHJ1ZVwiXG4gICAgKGZpbHRlckJ1dHRvbkNsaWNrKT1cImlubGluZUZpbHRlckJ1dHRvbkNsaWNrKClcIlxuICA+XG4gIDwvc2t5LWZpbHRlci1idXR0b24+XG48L25nLXRlbXBsYXRlPlxuIl19
|