@elderbyte/ngx-starter 14.5.2 → 14.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/common/enums/elder-enum-translation.service.mjs +3 -3
- package/esm2020/lib/common/forms/elder-form-field-control-base.directive.mjs +3 -3
- package/esm2020/lib/common/forms/elder-from-field-base.mjs +3 -3
- package/esm2020/lib/common/forms/elder-from-field-entity-base.mjs +3 -3
- package/esm2020/lib/common/forms/elder-from-field-multi-entity-base.mjs +3 -3
- package/esm2020/lib/common/forms/form-field-base.component.mjs +3 -3
- package/esm2020/lib/common/forms/multi-model-base.component.mjs +3 -3
- package/esm2020/lib/common/forms/template-composite-control.mjs +3 -3
- package/esm2020/lib/common/forms/value-accessor-base.mjs +3 -3
- package/esm2020/lib/common/http/http-client-builder.service.mjs +3 -3
- package/esm2020/lib/common/http/http-client-pristine.mjs +3 -3
- package/esm2020/lib/common/http/transfer/data-transfer-factory.mjs +3 -3
- package/esm2020/lib/common/url/elder-url-fragment-params.service.mjs +3 -3
- package/esm2020/lib/components/access-denied/elder-access-denied.component.mjs +3 -3
- package/esm2020/lib/components/access-denied/elder-access-denied.module.mjs +4 -4
- package/esm2020/lib/components/auditing/audited-entity/elder-audited-entity.component.mjs +8 -5
- package/esm2020/lib/components/auditing/elder-audit.module.mjs +4 -4
- package/esm2020/lib/components/button-group/elder-button-group/elder-button-group.component.mjs +3 -3
- package/esm2020/lib/components/button-group/elder-button-group.module.mjs +4 -4
- package/esm2020/lib/components/card-organizer/card-organizer/elder-card-organizer.component.mjs +3 -3
- package/esm2020/lib/components/card-organizer/card-organizer/elder-stack-card.directive.mjs +3 -3
- package/esm2020/lib/components/card-organizer/card-stack/elder-card-stack.component.mjs +3 -3
- package/esm2020/lib/components/card-organizer/elder-card-organizer.module.mjs +4 -4
- package/esm2020/lib/components/cards/elder-card/elder-card-header/elder-card-header.component.mjs +3 -3
- package/esm2020/lib/components/cards/elder-card/elder-card.component.mjs +18 -18
- package/esm2020/lib/components/cards/elder-card/elder-card.module.mjs +4 -4
- package/esm2020/lib/components/connectivity/elder-connectivity.module.mjs +4 -4
- package/esm2020/lib/components/connectivity/elder-connectivity.service.mjs +3 -3
- package/esm2020/lib/components/connectivity/offline-indicator/elder-offline-indicator.component.mjs +3 -3
- package/esm2020/lib/components/containers/elder-containers.module.mjs +4 -4
- package/esm2020/lib/components/containers/elder-scroll-container/elder-scroll-container.component.mjs +3 -3
- package/esm2020/lib/components/csv/elder-csv-export-btn/elder-csv-export-btn.component.mjs +3 -3
- package/esm2020/lib/components/csv/elder-csv-stream-exporter-builder.service.mjs +3 -3
- package/esm2020/lib/components/csv/elder-csv.module.mjs +4 -4
- package/esm2020/lib/components/currency/elder-currency.module.mjs +4 -4
- package/esm2020/lib/components/currency/elder-currency.pipe.mjs +3 -3
- package/esm2020/lib/components/data-transfer/elder-data-transfer.module.mjs +4 -4
- package/esm2020/lib/components/data-transfer/elder-data-transfer.service.mjs +3 -3
- package/esm2020/lib/components/data-transfer/http-data-transfer/http-data-transfer.component.mjs +3 -3
- package/esm2020/lib/components/data-transfer/http-data-transfer-aggregate/http-data-transfer-aggregate.component.mjs +3 -3
- package/esm2020/lib/components/data-transfer/http-data-transfer-indicator/http-data-transfer-indicator.component.mjs +3 -3
- package/esm2020/lib/components/data-transfer/http-data-transfer-overview/http-data-transfer-overview.component.mjs +3 -3
- package/esm2020/lib/components/data-view/base/elder-data-view-base.mjs +3 -3
- package/esm2020/lib/components/data-view/common/data-context-state-indicator/data-context-state-indicator.component.mjs +3 -3
- package/esm2020/lib/components/data-view/common/elder-data-common.module.mjs +4 -4
- package/esm2020/lib/components/data-view/common/elder-data-toolbar/elder-data-toolbar.component.mjs +6 -6
- package/esm2020/lib/components/data-view/common/elder-single-sort/elder-single-sort.component.mjs +3 -3
- package/esm2020/lib/components/data-view/common/selection/data-context-selection.directive.mjs +3 -3
- package/esm2020/lib/components/data-view/common/selection/elder-selection-master-checkbox/elder-selection-master-checkbox.component.mjs +3 -3
- package/esm2020/lib/components/data-view/grid/elder-grid/elder-grid.component.mjs +9 -9
- package/esm2020/lib/components/data-view/grid/elder-grid.module.mjs +4 -4
- package/esm2020/lib/components/data-view/simple/elder-simple-selection-view/elder-simple-selection-view.component.mjs +3 -3
- package/esm2020/lib/components/data-view/simple/elder-simple-selection-view/elder-simple-selection-view.module.mjs +4 -4
- package/esm2020/lib/components/data-view/table/activation/elder-table-activation.directive.mjs +3 -3
- package/esm2020/lib/components/data-view/table/elder-number-cell.directive.mjs +3 -3
- package/esm2020/lib/components/data-view/table/elder-paginator-intl.mjs +3 -3
- package/esm2020/lib/components/data-view/table/elder-table/elder-table-toolbar.directive.mjs +3 -3
- package/esm2020/lib/components/data-view/table/elder-table/elder-table.component.mjs +3 -3
- package/esm2020/lib/components/data-view/table/elder-table-column.directive.mjs +3 -3
- package/esm2020/lib/components/data-view/table/elder-table-extension.directive.mjs +3 -3
- package/esm2020/lib/components/data-view/table/elder-table-root.directive.mjs +3 -3
- package/esm2020/lib/components/data-view/table/elder-table-row.directive.mjs +3 -3
- package/esm2020/lib/components/data-view/table/elder-table-sort.directive.mjs +3 -3
- package/esm2020/lib/components/data-view/table/elder-table.module.mjs +4 -4
- package/esm2020/lib/components/data-view/table/model/elder-table-model.mjs +3 -3
- package/esm2020/lib/components/dialogs/confirm-dialog/elder-confirm-dialog.component.mjs +3 -3
- package/esm2020/lib/components/dialogs/elder-dialog.module.mjs +7 -7
- package/esm2020/lib/components/dialogs/elder-dialog.service.mjs +3 -3
- package/esm2020/lib/components/dialogs/question-dialog/elder-question-dialog.component.mjs +3 -3
- package/esm2020/lib/components/dialogs/selection-dialog/elder-selection-dialog/elder-selection-dialog.component.mjs +3 -3
- package/esm2020/lib/components/dialogs/selection-dialog/elder-selection-dialog.directive.mjs +3 -3
- package/esm2020/lib/components/errors/elder-error.module.mjs +4 -4
- package/esm2020/lib/components/errors/exception-detail/elder-exception-detail.component.mjs +3 -3
- package/esm2020/lib/components/expand-toggle-button/elder-expand-toggle-button.component.mjs +3 -3
- package/esm2020/lib/components/expand-toggle-button/elder-expand-toggle-button.module.mjs +4 -4
- package/esm2020/lib/components/files/blob-viewer/elder-blob-viewer.component.mjs +3 -3
- package/esm2020/lib/components/files/elder-file-drop-zone.directive.mjs +3 -3
- package/esm2020/lib/components/files/elder-file-select.directive.mjs +3 -3
- package/esm2020/lib/components/files/elder-file.module.mjs +4 -4
- package/esm2020/lib/components/files/file-select/file-select.component.mjs +3 -3
- package/esm2020/lib/components/files/file-upload/file-upload.component.mjs +3 -3
- package/esm2020/lib/components/forms/clipboard/elder-clipboard.service.mjs +3 -3
- package/esm2020/lib/components/forms/directives/base/elder-class-hostbinding-base.mjs +3 -3
- package/esm2020/lib/components/forms/directives/elder-clipboard-put.directive.mjs +3 -3
- package/esm2020/lib/components/forms/directives/elder-delayed-focus.directive.mjs +3 -3
- package/esm2020/lib/components/forms/directives/elder-form-field-dense.directive.mjs +3 -3
- package/esm2020/lib/components/forms/directives/elder-form-field-label.directive.mjs +3 -3
- package/esm2020/lib/components/forms/directives/elder-form-field-no-hint.directive.mjs +3 -3
- package/esm2020/lib/components/forms/directives/elder-form-field-no-spinner.directive.mjs +3 -3
- package/esm2020/lib/components/forms/directives/elder-forms-directives.module.mjs +13 -13
- package/esm2020/lib/components/forms/directives/elder-input-pattern.directive.mjs +3 -3
- package/esm2020/lib/components/forms/directives/elder-key-event.directive.mjs +3 -3
- package/esm2020/lib/components/forms/directives/elder-max.directive.mjs +3 -3
- package/esm2020/lib/components/forms/directives/elder-min.directive.mjs +3 -3
- package/esm2020/lib/components/forms/directives/elder-next-focusable.directive.mjs +3 -3
- package/esm2020/lib/components/forms/directives/elder-plug-parent-form.directive.mjs +3 -3
- package/esm2020/lib/components/forms/directives/elder-stop-event-propagation.directive.mjs +3 -3
- package/esm2020/lib/components/forms/directives/elder-tab-focus-trap.directive.mjs +3 -3
- package/esm2020/lib/components/forms/directives/elder-touched.directive.mjs +3 -3
- package/esm2020/lib/components/forms/directives/elder-triple-state-checkbox.directive.mjs +3 -3
- package/esm2020/lib/components/forms/directives/validation/elder-multiple-of.validator.mjs +3 -3
- package/esm2020/lib/components/forms/directives/validation/elder-required-ignore-zero.validator.mjs +3 -3
- package/esm2020/lib/components/forms/elder-forms.module.mjs +4 -4
- package/esm2020/lib/components/forms/search/elder-search-context.directive.mjs +3 -3
- package/esm2020/lib/components/forms/search/elder-search-input.directive.mjs +9 -15
- package/esm2020/lib/components/forms/search/elder-search.module.mjs +4 -4
- package/esm2020/lib/components/forms/search/search-box/elder-search-box.component.mjs +3 -3
- package/esm2020/lib/components/forms/search/search-box/elder-search-panel.component.mjs +3 -3
- package/esm2020/lib/components/global-search/elder-global-search.component.mjs +3 -3
- package/esm2020/lib/components/global-search/elder-global-search.module.mjs +4 -4
- package/esm2020/lib/components/global-search/elder-global-search.service.mjs +3 -3
- package/esm2020/lib/components/graph/elder-progress-bar/elder-progress-bar.component.mjs +3 -3
- package/esm2020/lib/components/graph/elder-progress-bar/elder-progress-bar.module.mjs +4 -4
- package/esm2020/lib/components/headers/elder-header/elder-header.component.mjs +3 -3
- package/esm2020/lib/components/headers/elder-header.module.mjs +4 -4
- package/esm2020/lib/components/http-support/elder-http-client.service.mjs +3 -3
- package/esm2020/lib/components/i18n/entities/elder-i18n-entities.module.mjs +4 -4
- package/esm2020/lib/components/i18n/entities/elder-localized-input/elder-localized-input.component.mjs +3 -3
- package/esm2020/lib/components/i18n/entities/elder-localized-input-dialog/elder-localized-input-dialog.component.mjs +3 -3
- package/esm2020/lib/components/i18n/entities/elder-localized-input-dialog.service.mjs +3 -3
- package/esm2020/lib/components/i18n/entities/elder-localized-input-table/elder-localized-input-table.component.mjs +3 -3
- package/esm2020/lib/components/i18n/entities/elder-localized-text-column.directive.mjs +3 -3
- package/esm2020/lib/components/i18n/entities/elder-localized-texts.directive.mjs +3 -3
- package/esm2020/lib/components/i18n/entities/picker/i18n-pick-async.pipe.mjs +3 -3
- package/esm2020/lib/components/i18n/entities/picker/i18n-pick.pipe.mjs +3 -3
- package/esm2020/lib/components/i18n/entities/picker/localisation-picker.service.mjs +3 -3
- package/esm2020/lib/components/i18n/language/elder-language-interceptor.mjs +3 -3
- package/esm2020/lib/components/i18n/language/elder-language.module.mjs +4 -4
- package/esm2020/lib/components/i18n/language/elder-language.service.mjs +3 -3
- package/esm2020/lib/components/i18n/language/language-switcher/elder-language-switcher.component.mjs +3 -3
- package/esm2020/lib/components/i18n/locales/elder-locales-de-ch.module.mjs +4 -4
- package/esm2020/lib/components/iframes/data-view/data-view-iframe/data-view-iframe.component.mjs +3 -3
- package/esm2020/lib/components/iframes/data-view/data-view-iframe-adapter.directive.mjs +3 -3
- package/esm2020/lib/components/iframes/elder-iframe.module.mjs +4 -4
- package/esm2020/lib/components/iframes/iframe-close.directive.mjs +3 -3
- package/esm2020/lib/components/iframes/iframe-dialog/iframe-dialog.component.mjs +3 -3
- package/esm2020/lib/components/iframes/iframe-host/iframe-host.component.mjs +3 -3
- package/esm2020/lib/components/iframes/iframe-side-content/iframe-side-content.component.mjs +3 -3
- package/esm2020/lib/components/iframes/iframe.service.mjs +3 -3
- package/esm2020/lib/components/infinitescroll/elder-infinite-autocomplete.directive.mjs +3 -3
- package/esm2020/lib/components/infinitescroll/elder-infinite-scroll.directive.mjs +3 -3
- package/esm2020/lib/components/infinitescroll/elder-infinite-scroll.module.mjs +7 -7
- package/esm2020/lib/components/input/autocomplete/elder-autocomplete/elder-autocomplete-option-selected.mjs +9 -0
- package/esm2020/lib/components/input/autocomplete/elder-autocomplete/elder-autocomplete.component.mjs +42 -27
- package/esm2020/lib/components/input/autocomplete/elder-autocomplete-many.directive.mjs +197 -0
- package/esm2020/lib/components/input/autocomplete/elder-autocomplete.directive.mjs +11 -11
- package/esm2020/lib/components/input/autocomplete/elder-autocomplete.module.mjs +22 -11
- package/esm2020/lib/components/input/autocomplete/many/word-position-finder.mjs +58 -0
- package/esm2020/lib/components/labels/elder-labels.module.mjs +4 -4
- package/esm2020/lib/components/labels/labels-input/labels-input.component.mjs +3 -3
- package/esm2020/lib/components/measures/dimensions-input/elder-dimensions-input.component.mjs +3 -3
- package/esm2020/lib/components/measures/directives/elder-unit-select.directive.mjs +3 -3
- package/esm2020/lib/components/measures/elder-measures.module.mjs +8 -8
- package/esm2020/lib/components/measures/elder-quantity-transform.pipe.mjs +3 -3
- package/esm2020/lib/components/measures/elder-quantity.pipe.mjs +3 -3
- package/esm2020/lib/components/measures/elder-unit.service.mjs +3 -3
- package/esm2020/lib/components/measures/quantity-input/elder-quantity-input.component.mjs +3 -3
- package/esm2020/lib/components/measures/util/elder-quantity.service.mjs +3 -3
- package/esm2020/lib/components/navigation/bread-crumbs/bread-crumbs/elder-bread-crumbs.component.mjs +3 -3
- package/esm2020/lib/components/navigation/bread-crumbs/elder-bread-crumbs.module.mjs +4 -4
- package/esm2020/lib/components/navigation/nav/elder-nav.module.mjs +4 -4
- package/esm2020/lib/components/navigation/nav/nav-group/elder-nav-group.component.mjs +3 -3
- package/esm2020/lib/components/navigation/nav/nav-link/elder-nav-link.component.mjs +3 -3
- package/esm2020/lib/components/navigation/nav/nav-list/elder-nav-list.component.mjs +3 -3
- package/esm2020/lib/components/navigation/toolbar/elder-toolbar-column.directive.mjs +3 -3
- package/esm2020/lib/components/navigation/toolbar/elder-toolbar.module.mjs +4 -4
- package/esm2020/lib/components/navigation/toolbar/elder-toolbar.service.mjs +3 -3
- package/esm2020/lib/components/navigation/toolbar/toolbar/elder-toolbar.component.mjs +3 -3
- package/esm2020/lib/components/navigation/toolbar/toolbar-title/elder-toolbar-title.component.mjs +3 -3
- package/esm2020/lib/components/navigation/toolbar/toolbar-title/elder-toolbar-title.service.mjs +3 -3
- package/esm2020/lib/components/overlays/elder-overlay-origin.directive.mjs +3 -3
- package/esm2020/lib/components/overlays/elder-overlay-trigger.directive.mjs +3 -3
- package/esm2020/lib/components/overlays/elder-overlay.component.mjs +3 -3
- package/esm2020/lib/components/overlays/elder-overlay.module.mjs +4 -4
- package/esm2020/lib/components/panels/card-panel/elder-card-panel.component.mjs +3 -3
- package/esm2020/lib/components/panels/elder-dialog-panel/elder-dialog-panel.component.mjs +3 -3
- package/esm2020/lib/components/panels/elder-panel.module.mjs +4 -4
- package/esm2020/lib/components/panels/flat/elder-panel.component.mjs +3 -3
- package/esm2020/lib/components/public_api.mjs +1 -2
- package/esm2020/lib/components/select/auto/elder-auto-select-first.directive.mjs +3 -3
- package/esm2020/lib/components/select/elder-select-base.mjs +3 -3
- package/esm2020/lib/components/select/elder-select-chip.directive.mjs +9 -9
- package/esm2020/lib/components/select/elder-select-on-tab.directive.mjs +3 -3
- package/esm2020/lib/components/select/elder-select-value.directive.mjs +3 -3
- package/esm2020/lib/components/select/elder-select.module.mjs +5 -5
- package/esm2020/lib/components/select/multi/elder-multi-select-base.mjs +3 -3
- package/esm2020/lib/components/select/multi/elder-multi-select-chips/elder-multi-select-chips.component.mjs +22 -21
- package/esm2020/lib/components/select/multi/elder-multi-select-form-field.mjs +3 -3
- package/esm2020/lib/components/select/popup/selection-model-popup.directive.mjs +3 -3
- package/esm2020/lib/components/select/popup/templated-selection-dialog/templated-selection-dialog.component.mjs +3 -3
- package/esm2020/lib/components/select/single/elder-clear-select.directive.mjs +3 -3
- package/esm2020/lib/components/select/single/elder-select/elder-select.component.mjs +10 -9
- package/esm2020/lib/components/select/single/elder-select-form-field.mjs +3 -3
- package/esm2020/lib/components/select-chip-list/chip-list-select/elder-chip-list-select.component.mjs +3 -3
- package/esm2020/lib/components/select-chip-list/elder-chip-list-select.module.mjs +4 -4
- package/esm2020/lib/components/select-list/elder-select-list.module.mjs +4 -4
- package/esm2020/lib/components/select-list/select-list/elder-select-list.component.mjs +3 -3
- package/esm2020/lib/components/select-list/select-list-item/elder-select-list-item.component.mjs +3 -3
- package/esm2020/lib/components/shell/drawers/elder-route-outlet-drawer.service.mjs +3 -3
- package/esm2020/lib/components/shell/drawers/elder-router-outlet.service.mjs +3 -3
- package/esm2020/lib/components/shell/elder-shell-slot.directive.mjs +3 -3
- package/esm2020/lib/components/shell/elder-shell.module.mjs +4 -4
- package/esm2020/lib/components/shell/elder-shell.service.mjs +3 -3
- package/esm2020/lib/components/shell/header/elder-app-header/elder-app-header.component.mjs +3 -3
- package/esm2020/lib/components/shell/shell/elder-shell.component.mjs +12 -12
- package/esm2020/lib/components/shell/shell-navigation-toggle/elder-shell-navigation-toggle.component.mjs +3 -3
- package/esm2020/lib/components/tabs/elder-tab/elder-tab.directive.mjs +3 -3
- package/esm2020/lib/components/tabs/elder-tab-group-routing/elder-tab-group-routing.directive.mjs +3 -3
- package/esm2020/lib/components/tabs/elder-tab.module.mjs +4 -4
- package/esm2020/lib/components/theme/elder-theme-applier.directive.mjs +3 -3
- package/esm2020/lib/components/theme/elder-theme-preference.service.mjs +3 -3
- package/esm2020/lib/components/theme/elder-theme-toggle/elder-theme-toggle.component.mjs +3 -3
- package/esm2020/lib/components/theme/elder-theme.directive.mjs +3 -3
- package/esm2020/lib/components/theme/elder-theme.module.mjs +4 -4
- package/esm2020/lib/components/theme/elder-theme.service.mjs +3 -3
- package/esm2020/lib/components/time/date-adapters/custom-date-adapter.mjs +3 -3
- package/esm2020/lib/components/time/duration/elder-duration-input/elder-duration-input.component.mjs +3 -3
- package/esm2020/lib/components/time/elder-date-switcher/elder-date-switcher.component.mjs +3 -3
- package/esm2020/lib/components/time/elder-date-time-input/elder-date-time-input.component.mjs +3 -3
- package/esm2020/lib/components/time/elder-interval-input/elder-interval-input.component.mjs +3 -3
- package/esm2020/lib/components/time/elder-local-date-input/elder-local-date-input.component.mjs +3 -3
- package/esm2020/lib/components/time/elder-local-time-input/elder-local-time-input.component.mjs +3 -3
- package/esm2020/lib/components/time/elder-time.module.mjs +8 -8
- package/esm2020/lib/components/time/period/elder-period-input/elder-period-input.component.mjs +3 -3
- package/esm2020/lib/components/toasts/elder-toast.module.mjs +4 -4
- package/esm2020/lib/components/toasts/elder-toast.service.mjs +9 -9
- package/esm2020/lib/components/toasts/standard-toast/standard-toast.component.mjs +3 -3
- package/esm2020/lib/components/url-fragment/elder-url-fragment.module.mjs +4 -4
- package/esm2020/lib/components/url-fragment/url-fragment-switcher/elder-url-fragment-switcher.component.mjs +3 -3
- package/esm2020/lib/components/viewers/elder-svg-viewer/elder-svg-viewer.component.mjs +3 -3
- package/esm2020/lib/components/viewers/elder-viewers.module.mjs +4 -4
- package/esm2020/lib/features/event-source/elder-event-source.service.mjs +3 -3
- package/esm2020/lib/features/kafent/access-token-provider.mjs +3 -3
- package/esm2020/lib/features/kafent/kafent-config.mjs +3 -3
- package/esm2020/lib/features/kafent/kafent-event-stream.mjs +3 -3
- package/esm2020/lib/features/kafent/kafent-event.service.mjs +3 -3
- package/esm2020/lib/features/kafent/kafent.module.mjs +4 -4
- package/esm2020/lib/features/kafent/sse/kafent-event-stream-sse.service.mjs +3 -3
- package/esm2020/lib/pipes/bytes.pipe.mjs +3 -3
- package/esm2020/lib/pipes/elder-pipes.module.mjs +10 -10
- package/esm2020/lib/pipes/elder-repeat.pipe.mjs +3 -3
- package/esm2020/lib/pipes/elder-round.pipe.mjs +3 -3
- package/esm2020/lib/pipes/elder-safe-url.pipe.mjs +3 -3
- package/esm2020/lib/pipes/elder-truncate.pipe.mjs +3 -3
- package/esm2020/lib/pipes/iso-duration.pipe.mjs +3 -3
- package/esm2020/lib/pipes/iso-interval-parse.pipe.mjs +3 -3
- package/esm2020/lib/pipes/iso-interval.pipe.mjs +3 -3
- package/esm2020/lib/pipes/time-ago.pipe.mjs +3 -3
- package/esm2020/lib/pipes/time-duration.pipe.mjs +3 -3
- package/esm2020/lib/pipes/weight.pipe.mjs +3 -3
- package/fesm2015/elderbyte-ngx-starter.mjs +1217 -1104
- package/fesm2015/elderbyte-ngx-starter.mjs.map +1 -1
- package/fesm2020/elderbyte-ngx-starter.mjs +1214 -1104
- package/fesm2020/elderbyte-ngx-starter.mjs.map +1 -1
- package/lib/components/auditing/audited-entity/elder-audited-entity.component.d.ts +2 -1
- package/lib/components/forms/search/elder-search-input.directive.d.ts +6 -7
- package/lib/components/input/autocomplete/elder-autocomplete/elder-autocomplete-option-selected.d.ts +8 -0
- package/lib/components/input/autocomplete/elder-autocomplete/elder-autocomplete.component.d.ts +14 -14
- package/lib/components/{multi-autocomplete/elder-multi-autocomplete.component.d.ts → input/autocomplete/elder-autocomplete-many.directive.d.ts} +46 -27
- package/lib/components/input/autocomplete/elder-autocomplete.directive.d.ts +1 -1
- package/lib/components/input/autocomplete/elder-autocomplete.module.d.ts +11 -7
- package/lib/components/{multi-autocomplete/word-position.d.ts → input/autocomplete/many/word-position-finder.d.ts} +0 -0
- package/lib/components/public_api.d.ts +0 -1
- package/lib/components/select/elder-select.module.d.ts +1 -1
- package/lib/components/select/multi/elder-multi-select-chips/elder-multi-select-chips.component.d.ts +19 -8
- package/lib/components/select/single/elder-select/elder-select.component.d.ts +2 -1
- package/package.json +1 -1
- package/src/lib/components/select/multi/elder-multi-select-chips/elder-multi-select-chips.component.scss +8 -0
- package/esm2020/lib/components/multi-autocomplete/elder-multi-auto-complete.module.mjs +0 -30
- package/esm2020/lib/components/multi-autocomplete/elder-multi-autocomplete.component.mjs +0 -122
- package/esm2020/lib/components/multi-autocomplete/word-position.mjs +0 -38
- package/lib/components/multi-autocomplete/elder-multi-auto-complete.module.d.ts +0 -14
- package/src/lib/components/multi-autocomplete/elder-multi-autocomplete.component.scss +0 -0
|
@@ -10,11 +10,12 @@ declare class AuditedEntityCtx {
|
|
|
10
10
|
export declare class ElderAuditedEntityComponent implements OnInit {
|
|
11
11
|
layout: string;
|
|
12
12
|
appearance: MatFormFieldAppearance;
|
|
13
|
+
dateFormat: string;
|
|
13
14
|
readonly auditedCtx$: BehaviorSubject<AuditedEntityCtx>;
|
|
14
15
|
constructor();
|
|
15
16
|
ngOnInit(): void;
|
|
16
17
|
set audited(audited: IAuditedEntity);
|
|
17
18
|
static ɵfac: i0.ɵɵFactoryDeclaration<ElderAuditedEntityComponent, never>;
|
|
18
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ElderAuditedEntityComponent, "elder-audited-entity", never, { "layout": "layout"; "appearance": "appearance"; "audited": "audited"; }, {}, never, never, false>;
|
|
19
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ElderAuditedEntityComponent, "elder-audited-entity", never, { "layout": "layout"; "appearance": "appearance"; "dateFormat": "dateFormat"; "audited": "audited"; }, {}, never, never, false>;
|
|
19
20
|
}
|
|
20
21
|
export {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AfterViewInit, OnDestroy
|
|
1
|
+
import { AfterViewInit, OnDestroy } from '@angular/core';
|
|
2
2
|
import { ElderSearchContextDirective } from './elder-search-context.directive';
|
|
3
3
|
import { Observable } from 'rxjs/internal/Observable';
|
|
4
4
|
import { NgModel } from '@angular/forms';
|
|
@@ -8,7 +8,7 @@ import * as i0 from "@angular/core";
|
|
|
8
8
|
/**
|
|
9
9
|
* Search name adapter for input controls.
|
|
10
10
|
*/
|
|
11
|
-
export declare class ElderSearchInputDirective implements
|
|
11
|
+
export declare class ElderSearchInputDirective implements OnDestroy, AfterViewInit, SearchInput {
|
|
12
12
|
private searchContext;
|
|
13
13
|
private ngModel;
|
|
14
14
|
/***************************************************************************
|
|
@@ -16,10 +16,6 @@ export declare class ElderSearchInputDirective implements OnInit, OnDestroy, Aft
|
|
|
16
16
|
* Fields *
|
|
17
17
|
* *
|
|
18
18
|
**************************************************************************/
|
|
19
|
-
private readonly logger;
|
|
20
|
-
private readonly _state;
|
|
21
|
-
private _extractedName;
|
|
22
|
-
private readonly unsubscribe$;
|
|
23
19
|
/**
|
|
24
20
|
* (Optional) Usually the control name is used, this allows a custom query key
|
|
25
21
|
*/
|
|
@@ -37,6 +33,10 @@ export declare class ElderSearchInputDirective implements OnInit, OnDestroy, Aft
|
|
|
37
33
|
* (Optional) Use this value for the query if none is provided.
|
|
38
34
|
*/
|
|
39
35
|
fallbackValue: string | string[];
|
|
36
|
+
private readonly _state;
|
|
37
|
+
private _extractedName;
|
|
38
|
+
private readonly destroy$;
|
|
39
|
+
private readonly log;
|
|
40
40
|
/***************************************************************************
|
|
41
41
|
* *
|
|
42
42
|
* Constructor *
|
|
@@ -48,7 +48,6 @@ export declare class ElderSearchInputDirective implements OnInit, OnDestroy, Aft
|
|
|
48
48
|
* Life Cycle *
|
|
49
49
|
* *
|
|
50
50
|
**************************************************************************/
|
|
51
|
-
ngOnInit(): void;
|
|
52
51
|
ngAfterViewInit(): void;
|
|
53
52
|
ngOnDestroy(): void;
|
|
54
53
|
/***************************************************************************
|
package/lib/components/input/autocomplete/elder-autocomplete/elder-autocomplete-option-selected.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ElderAutocompleteComponent } from './elder-autocomplete.component';
|
|
2
|
+
export declare class ElderAutocompleteOptionSelected<T = any, TId = any> {
|
|
3
|
+
readonly source: ElderAutocompleteComponent<T, TId>;
|
|
4
|
+
readonly entityId: TId;
|
|
5
|
+
readonly entity: T;
|
|
6
|
+
readonly optionValue: any;
|
|
7
|
+
constructor(source: ElderAutocompleteComponent<T, TId>, entityId: TId, entity: T, optionValue: any);
|
|
8
|
+
}
|
package/lib/components/input/autocomplete/elder-autocomplete/elder-autocomplete.component.d.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { NgZone, TemplateRef } from '@angular/core';
|
|
2
2
|
import { BehaviorSubject, Observable, Subject } from 'rxjs';
|
|
3
3
|
import { IDataContext } from '../../../../common/data/data-context/data-context';
|
|
4
4
|
import { DataContextStatus } from '../../../../common/data/data-context/data-context-status';
|
|
5
5
|
import { MatAutocomplete, MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';
|
|
6
|
+
import { ElderAutocompleteOptionSelected } from './elder-autocomplete-option-selected';
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
7
8
|
declare type TextResolverFn = (value: any) => string;
|
|
8
|
-
export declare class ElderAutocompleteComponent<T = any, TId = any>
|
|
9
|
+
export declare class ElderAutocompleteComponent<T = any, TId = any> {
|
|
9
10
|
private readonly zone;
|
|
10
11
|
/***************************************************************************
|
|
11
12
|
* *
|
|
@@ -29,25 +30,22 @@ export declare class ElderAutocompleteComponent<T = any, TId = any> implements O
|
|
|
29
30
|
set matAutocomplete(auto: MatAutocomplete);
|
|
30
31
|
isOptionDisabledFn: (option: T) => boolean;
|
|
31
32
|
isOptionHiddenFn: (option: T) => boolean;
|
|
32
|
-
|
|
33
|
-
|
|
33
|
+
optionValueConverterFn: (option: T) => any;
|
|
34
|
+
/**
|
|
35
|
+
* The DataContext which holds the autocomplete suggestions.
|
|
36
|
+
*/
|
|
37
|
+
readonly dataContext$: BehaviorSubject<IDataContext<T>>;
|
|
34
38
|
readonly triggerReload$: Subject<any>;
|
|
35
39
|
readonly displayPropertyResolver$: BehaviorSubject<TextResolverFn>;
|
|
36
40
|
readonly dataState$: Observable<DataContextStatus>;
|
|
37
41
|
readonly availableSuggestions$: Observable<T[]>;
|
|
38
|
-
readonly optionSelected: Subject<
|
|
42
|
+
readonly optionSelected: Subject<ElderAutocompleteOptionSelected<any, any>>;
|
|
39
43
|
/***************************************************************************
|
|
40
44
|
* *
|
|
41
45
|
* Constructor *
|
|
42
46
|
* *
|
|
43
47
|
**************************************************************************/
|
|
44
48
|
constructor(zone: NgZone);
|
|
45
|
-
/***************************************************************************
|
|
46
|
-
* *
|
|
47
|
-
* Life Cycle *
|
|
48
|
-
* *
|
|
49
|
-
**************************************************************************/
|
|
50
|
-
ngOnInit(): void;
|
|
51
49
|
/***************************************************************************
|
|
52
50
|
* *
|
|
53
51
|
* Properties *
|
|
@@ -57,8 +55,8 @@ export declare class ElderAutocompleteComponent<T = any, TId = any> implements O
|
|
|
57
55
|
get enabled(): boolean;
|
|
58
56
|
set valueTemplate(template: TemplateRef<any>);
|
|
59
57
|
get valueTemplate(): TemplateRef<any>;
|
|
60
|
-
set
|
|
61
|
-
get
|
|
58
|
+
set dataContext(data: IDataContext<T>);
|
|
59
|
+
get dataContext(): IDataContext<T>;
|
|
62
60
|
set displayPropertyResolver(resolver: TextResolverFn);
|
|
63
61
|
/***************************************************************************
|
|
64
62
|
* *
|
|
@@ -66,12 +64,14 @@ export declare class ElderAutocompleteComponent<T = any, TId = any> implements O
|
|
|
66
64
|
* *
|
|
67
65
|
**************************************************************************/
|
|
68
66
|
onOptionSelected(event: MatAutocompleteSelectedEvent): void;
|
|
67
|
+
private getEntityById;
|
|
69
68
|
onAutocompleteOpened(event: any): void;
|
|
70
69
|
onAutoCompleteCloseToEnd(event: UIEvent): void;
|
|
71
70
|
getIdAsString(value: T): string;
|
|
72
71
|
getId(value: T): TId;
|
|
73
72
|
isOptionAvailable(option: T): boolean;
|
|
74
73
|
isOptionVisible(option: T): boolean;
|
|
74
|
+
toOptionValue(option: T): any;
|
|
75
75
|
/***************************************************************************
|
|
76
76
|
* *
|
|
77
77
|
* Private methods *
|
|
@@ -82,6 +82,6 @@ export declare class ElderAutocompleteComponent<T = any, TId = any> implements O
|
|
|
82
82
|
*/
|
|
83
83
|
private propertyStringValue;
|
|
84
84
|
static ɵfac: i0.ɵɵFactoryDeclaration<ElderAutocompleteComponent<any, any>, never>;
|
|
85
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ElderAutocompleteComponent<any, any>, "elder-autocomplete", ["elderAutocomplete"], { "isOptionDisabledFn": "isOptionDisabledFn"; "isOptionHiddenFn": "isOptionHiddenFn"; "enabled": "enabled"; "valueTemplate": "valueTemplate"; "
|
|
85
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ElderAutocompleteComponent<any, any>, "elder-autocomplete", ["elderAutocomplete"], { "isOptionDisabledFn": "isOptionDisabledFn"; "isOptionHiddenFn": "isOptionHiddenFn"; "optionValueConverterFn": "optionValueConverterFn"; "enabled": "enabled"; "valueTemplate": "valueTemplate"; "dataContext": "dataContext"; "displayPropertyResolver": "displayPropertyResolver"; }, { "optionSelected": "optionSelected"; }, ["valueTemplateQuery"], never, false>;
|
|
86
86
|
}
|
|
87
87
|
export {};
|
|
@@ -1,59 +1,78 @@
|
|
|
1
|
-
import { ElementRef,
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { ElementRef, OnDestroy, OnInit } from '@angular/core';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
import { ElderAutocompleteComponent } from './elder-autocomplete/elder-autocomplete.component';
|
|
4
|
+
import { MatAutocompleteTrigger } from '@angular/material/autocomplete';
|
|
5
|
+
import { Filter } from '../../../common/data/filter';
|
|
6
|
+
import { Sort } from '../../../common/data/sort';
|
|
7
|
+
import { TextResolverFn } from '../../select/elder-select-base';
|
|
5
8
|
import * as i0 from "@angular/core";
|
|
6
|
-
export declare class
|
|
9
|
+
export declare class ElderAutocompleteManyDirective<T> implements OnInit, OnDestroy {
|
|
10
|
+
private readonly autoCompleteTrigger;
|
|
11
|
+
private readonly inputRef;
|
|
7
12
|
/***************************************************************************
|
|
8
13
|
* *
|
|
9
14
|
* Fields *
|
|
10
15
|
* *
|
|
11
16
|
**************************************************************************/
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
suggestionProvider: ISuggestionProvider<string>;
|
|
17
|
+
queryFilter: string;
|
|
18
|
+
filters: Filter[];
|
|
19
|
+
sorts: Sort[];
|
|
16
20
|
/**
|
|
17
|
-
*
|
|
21
|
+
* The property on a suggestion object which is used
|
|
22
|
+
* as the display and insert value.
|
|
18
23
|
*/
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
private
|
|
24
|
+
textProperty: string;
|
|
25
|
+
textPropertyResolverFn: TextResolverFn;
|
|
26
|
+
readonly inputKeyup$: Subject<KeyboardEvent>;
|
|
27
|
+
private readonly ignoreKeys;
|
|
28
|
+
private readonly log;
|
|
29
|
+
private readonly wordFinder;
|
|
30
|
+
private _elderAutocomplete;
|
|
31
|
+
private readonly destroy$;
|
|
32
|
+
private readonly destroyAutocompleteBinding$;
|
|
24
33
|
/***************************************************************************
|
|
25
34
|
* *
|
|
26
35
|
* Constructor *
|
|
27
36
|
* *
|
|
28
37
|
**************************************************************************/
|
|
29
|
-
constructor();
|
|
38
|
+
constructor(autoCompleteTrigger: MatAutocompleteTrigger, inputRef: ElementRef<HTMLInputElement>);
|
|
30
39
|
/***************************************************************************
|
|
31
40
|
* *
|
|
32
|
-
*
|
|
41
|
+
* Properties *
|
|
33
42
|
* *
|
|
34
43
|
**************************************************************************/
|
|
35
|
-
|
|
36
|
-
|
|
44
|
+
set autocomplete(auto: ElderAutocompleteComponent);
|
|
45
|
+
get autocomplete(): ElderAutocompleteComponent;
|
|
46
|
+
private get cursorPosition();
|
|
47
|
+
private set cursorPosition(value);
|
|
48
|
+
private get dataContext();
|
|
37
49
|
/***************************************************************************
|
|
38
50
|
* *
|
|
39
|
-
*
|
|
51
|
+
* Host Listener *
|
|
40
52
|
* *
|
|
41
53
|
**************************************************************************/
|
|
54
|
+
onKeyUp(event: KeyboardEvent): void;
|
|
42
55
|
/***************************************************************************
|
|
43
56
|
* *
|
|
44
|
-
*
|
|
57
|
+
* Life Cycle *
|
|
45
58
|
* *
|
|
46
59
|
**************************************************************************/
|
|
47
|
-
|
|
48
|
-
|
|
60
|
+
ngOnInit(): void;
|
|
61
|
+
ngOnDestroy(): void;
|
|
49
62
|
/***************************************************************************
|
|
50
63
|
* *
|
|
51
64
|
* Private methods *
|
|
52
65
|
* *
|
|
53
66
|
**************************************************************************/
|
|
54
|
-
private
|
|
55
|
-
private
|
|
67
|
+
private extractWordAtCursor;
|
|
68
|
+
private cursorBeforeAutocomplete;
|
|
69
|
+
private rememberCursorPosition;
|
|
56
70
|
private extractWordFrom;
|
|
57
|
-
|
|
58
|
-
|
|
71
|
+
private updateSuggestions;
|
|
72
|
+
private insertSuggestion;
|
|
73
|
+
private currentInputValue;
|
|
74
|
+
private resolveSuggestionText;
|
|
75
|
+
private onOptionSelected;
|
|
76
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ElderAutocompleteManyDirective<any>, never>;
|
|
77
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<ElderAutocompleteManyDirective<any>, "[elderAutocompleteMany]", never, { "queryFilter": "queryFilter"; "filters": "filters"; "sorts": "sorts"; "textProperty": "textProperty"; "textPropertyResolverFn": "textPropertyResolverFn"; "autocomplete": "elderAutocompleteMany"; }, {}, never, never, false>;
|
|
59
78
|
}
|
|
@@ -28,7 +28,6 @@ export declare class ElderAutocompleteDirective implements OnInit, OnDestroy {
|
|
|
28
28
|
* *
|
|
29
29
|
**************************************************************************/
|
|
30
30
|
constructor(autoCompleteTrigger: MatAutocompleteTrigger);
|
|
31
|
-
ngOnDestroy(): void;
|
|
32
31
|
/***************************************************************************
|
|
33
32
|
* *
|
|
34
33
|
* Host Listener *
|
|
@@ -41,6 +40,7 @@ export declare class ElderAutocompleteDirective implements OnInit, OnDestroy {
|
|
|
41
40
|
* *
|
|
42
41
|
**************************************************************************/
|
|
43
42
|
ngOnInit(): void;
|
|
43
|
+
ngOnDestroy(): void;
|
|
44
44
|
/***************************************************************************
|
|
45
45
|
* *
|
|
46
46
|
* Properties *
|
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
import * as i0 from "@angular/core";
|
|
2
2
|
import * as i1 from "./elder-autocomplete/elder-autocomplete.component";
|
|
3
3
|
import * as i2 from "./elder-autocomplete.directive";
|
|
4
|
-
import * as i3 from "
|
|
5
|
-
import * as i4 from "@angular/
|
|
6
|
-
import * as i5 from "
|
|
7
|
-
import * as i6 from "@angular/material/
|
|
8
|
-
import * as i7 from "@angular/
|
|
9
|
-
import * as i8 from "
|
|
4
|
+
import * as i3 from "./elder-autocomplete-many.directive";
|
|
5
|
+
import * as i4 from "@angular/common";
|
|
6
|
+
import * as i5 from "@angular/forms";
|
|
7
|
+
import * as i6 from "@angular/material/input";
|
|
8
|
+
import * as i7 from "@angular/material/autocomplete";
|
|
9
|
+
import * as i8 from "../../infinitescroll/elder-infinite-scroll.module";
|
|
10
|
+
import * as i9 from "@angular/material/icon";
|
|
11
|
+
import * as i10 from "@angular/flex-layout";
|
|
12
|
+
import * as i11 from "@angular/material/progress-bar";
|
|
10
13
|
export { ElderAutocompleteComponent } from './elder-autocomplete/elder-autocomplete.component';
|
|
14
|
+
export { ElderAutocompleteManyDirective } from './elder-autocomplete-many.directive';
|
|
11
15
|
export { ElderAutocompleteDirective } from './elder-autocomplete.directive';
|
|
12
16
|
export declare class ElderAutocompleteModule {
|
|
13
17
|
static ɵfac: i0.ɵɵFactoryDeclaration<ElderAutocompleteModule, never>;
|
|
14
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<ElderAutocompleteModule, [typeof i1.ElderAutocompleteComponent, typeof i2.ElderAutocompleteDirective], [typeof
|
|
18
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<ElderAutocompleteModule, [typeof i1.ElderAutocompleteComponent, typeof i2.ElderAutocompleteDirective, typeof i3.ElderAutocompleteManyDirective], [typeof i4.CommonModule, typeof i5.ReactiveFormsModule, typeof i6.MatInputModule, typeof i7.MatAutocompleteModule, typeof i8.ElderInfiniteScrollModule, typeof i9.MatIconModule, typeof i10.FlexModule, typeof i11.MatProgressBarModule], [typeof i1.ElderAutocompleteComponent, typeof i2.ElderAutocompleteDirective, typeof i3.ElderAutocompleteManyDirective]>;
|
|
15
19
|
static ɵinj: i0.ɵɵInjectorDeclaration<ElderAutocompleteModule>;
|
|
16
20
|
}
|
|
File without changes
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
export * from './theme/public_api';
|
|
2
2
|
export * from './access-denied/elder-access-denied.module';
|
|
3
3
|
export * from './expand-toggle-button/elder-expand-toggle-button.module';
|
|
4
|
-
export * from './multi-autocomplete/elder-multi-auto-complete.module';
|
|
5
4
|
export * from './labels/elder-labels.module';
|
|
6
5
|
export * from './panels/elder-panel.module';
|
|
7
6
|
export * from './files/elder-file.module';
|
|
@@ -37,7 +37,7 @@ export { ElderSelectComponent } from './single/elder-select/elder-select.compone
|
|
|
37
37
|
export { TemplatedSelectionDialogComponent, ISelectionModelDialogOptions } from './popup/templated-selection-dialog/templated-selection-dialog.component';
|
|
38
38
|
export { SelectionModelPopupDirective } from './popup/selection-model-popup.directive';
|
|
39
39
|
export { ElderMultiSelectBase } from './multi/elder-multi-select-base';
|
|
40
|
-
export { ElderMultiSelectChipsComponent } from './multi/elder-multi-select-chips/elder-multi-select-chips.component';
|
|
40
|
+
export { ElderMultiSelectChipsComponent, ChipAvatarSpec } from './multi/elder-multi-select-chips/elder-multi-select-chips.component';
|
|
41
41
|
export { ElderAutoSelectFirstDirective } from './auto/elder-auto-select-first.directive';
|
|
42
42
|
export { ElderClearSelectDirective } from './single/elder-clear-select.directive';
|
|
43
43
|
export declare class ElderSelectModule {
|
package/lib/components/select/multi/elder-multi-select-chips/elder-multi-select-chips.component.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ElementRef, NgZone, TemplateRef } from '@angular/core';
|
|
2
2
|
import { ElderMultiSelectBase } from '../elder-multi-select-base';
|
|
3
3
|
import { Observable } from 'rxjs';
|
|
4
4
|
import { ThemePalette } from '@angular/material/core';
|
|
@@ -12,7 +12,18 @@ declare class ChipModel<T> {
|
|
|
12
12
|
readonly displayText: string;
|
|
13
13
|
readonly color: ThemePalette;
|
|
14
14
|
readonly removeable: boolean;
|
|
15
|
-
|
|
15
|
+
readonly avatarSpec: ChipAvatarSpec;
|
|
16
|
+
constructor(value: T, displayText: string, color: ThemePalette, removeable: boolean, avatarSpec: ChipAvatarSpec);
|
|
17
|
+
}
|
|
18
|
+
export interface ChipAvatarSpec {
|
|
19
|
+
/**
|
|
20
|
+
* Hides the avatar for this chip.
|
|
21
|
+
*/
|
|
22
|
+
hide?: boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Enables large styling of the avatar for this chip
|
|
25
|
+
*/
|
|
26
|
+
large?: boolean;
|
|
16
27
|
}
|
|
17
28
|
export declare class ElderMultiSelectChipsComponent<TId = any, TEntity = any, TValue = any> extends ElderMultiSelectBase<TId, TEntity, TValue> {
|
|
18
29
|
/***************************************************************************
|
|
@@ -20,14 +31,12 @@ export declare class ElderMultiSelectChipsComponent<TId = any, TEntity = any, TV
|
|
|
20
31
|
* Fields *
|
|
21
32
|
* *
|
|
22
33
|
**************************************************************************/
|
|
23
|
-
private readonly log;
|
|
24
34
|
readonly selectChips$: Observable<ChipModel<TEntity>[]>;
|
|
25
|
-
|
|
35
|
+
defaultAvatarSpec: ChipAvatarSpec;
|
|
26
36
|
/**
|
|
27
|
-
*
|
|
28
|
-
* Usefull if not all chips support avatars (empty chipAvatarTemplate).
|
|
37
|
+
* Allows to customize each chip avatar individually.
|
|
29
38
|
*/
|
|
30
|
-
|
|
39
|
+
avatarSpecFn: (e: TEntity) => ChipAvatarSpec;
|
|
31
40
|
selectable: boolean;
|
|
32
41
|
allowRemove: boolean;
|
|
33
42
|
chipTemplateQuery: TemplateRef<any>;
|
|
@@ -36,7 +45,9 @@ export declare class ElderMultiSelectChipsComponent<TId = any, TEntity = any, TV
|
|
|
36
45
|
private _chipAvatarTemplate;
|
|
37
46
|
customInputTemplateQuery: TemplateRef<any>;
|
|
38
47
|
private _customInputTemplate;
|
|
48
|
+
private readonly chipColorResolver$;
|
|
39
49
|
private _chipColorEnabled;
|
|
50
|
+
private readonly log;
|
|
40
51
|
/***************************************************************************
|
|
41
52
|
* *
|
|
42
53
|
* Constructor *
|
|
@@ -89,6 +100,6 @@ export declare class ElderMultiSelectChipsComponent<TId = any, TEntity = any, TV
|
|
|
89
100
|
private buildChipFallbackModels;
|
|
90
101
|
private buildChipModels;
|
|
91
102
|
static ɵfac: i0.ɵɵFactoryDeclaration<ElderMultiSelectChipsComponent<any, any, any>, [null, null, null, null, null, { optional: true; self: true; }]>;
|
|
92
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ElderMultiSelectChipsComponent<any, any, any>, "elder-multi-select-chips", never, { "
|
|
103
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ElderMultiSelectChipsComponent<any, any, any>, "elder-multi-select-chips", never, { "defaultAvatarSpec": "defaultAvatarSpec"; "avatarSpecFn": "avatarSpecFn"; "allowRemove": "allowRemove"; "chipTemplate": "chipTemplate"; "chipAvatarTemplate": "chipAvatarTemplate"; "customInputTemplate": "customInputTemplate"; "chipColorEnabled": "chipColorEnabled"; "chipColorResolver": "chipColorResolver"; }, {}, ["chipTemplateQuery", "chipAvatarTemplateQuery", "customInputTemplateQuery"], never, false>;
|
|
93
104
|
}
|
|
94
105
|
export {};
|
|
@@ -8,6 +8,7 @@ import { IElderEntityValueAccessor } from '../../../../common/forms/elder-entity
|
|
|
8
8
|
import { NgControl } from '@angular/forms';
|
|
9
9
|
import { FocusMonitor } from '@angular/cdk/a11y';
|
|
10
10
|
import { TranslateService } from '@ngx-translate/core';
|
|
11
|
+
import { ElderAutocompleteOptionSelected } from '../../../input/autocomplete/elder-autocomplete/elder-autocomplete-option-selected';
|
|
11
12
|
import * as i0 from "@angular/core";
|
|
12
13
|
declare class EntityContext<T> {
|
|
13
14
|
readonly value: T;
|
|
@@ -114,7 +115,7 @@ export declare class ElderSelectComponent<TEntity = any, TId = any, TValue = TEn
|
|
|
114
115
|
togglePanel(autoTrigger: MatAutocompleteTrigger): void;
|
|
115
116
|
openPanel(autoTrigger: MatAutocompleteTrigger): void;
|
|
116
117
|
onInputClicked(autoTrigger: MatAutocompleteTrigger): void;
|
|
117
|
-
onOptionSelected(
|
|
118
|
+
onOptionSelected(optionSelected: ElderAutocompleteOptionSelected<TEntity, TId>): void;
|
|
118
119
|
openSelectionPopup(event: Event): void;
|
|
119
120
|
clear(event?: Event): void;
|
|
120
121
|
forceReloadFirst(): void;
|
package/package.json
CHANGED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { NgModule } from '@angular/core';
|
|
2
|
-
import { ElderMultiAutocompleteComponent } from './elder-multi-autocomplete.component';
|
|
3
|
-
import { CommonModule } from '@angular/common';
|
|
4
|
-
import { FlexLayoutModule } from '@angular/flex-layout';
|
|
5
|
-
import { MatAutocompleteModule } from '@angular/material/autocomplete';
|
|
6
|
-
import { MatInputModule } from '@angular/material/input';
|
|
7
|
-
import { ReactiveFormsModule } from '@angular/forms';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
export { ElderMultiAutocompleteComponent } from './elder-multi-autocomplete.component';
|
|
10
|
-
export * from './word-position';
|
|
11
|
-
export class ElderMultiAutoCompleteModule {
|
|
12
|
-
}
|
|
13
|
-
ElderMultiAutoCompleteModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderMultiAutoCompleteModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
14
|
-
ElderMultiAutoCompleteModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.1.0", ngImport: i0, type: ElderMultiAutoCompleteModule, declarations: [ElderMultiAutocompleteComponent], imports: [CommonModule, ReactiveFormsModule, MatInputModule, MatAutocompleteModule, FlexLayoutModule], exports: [ElderMultiAutocompleteComponent] });
|
|
15
|
-
ElderMultiAutoCompleteModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderMultiAutoCompleteModule, imports: [CommonModule, ReactiveFormsModule, MatInputModule, MatAutocompleteModule, FlexLayoutModule] });
|
|
16
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderMultiAutoCompleteModule, decorators: [{
|
|
17
|
-
type: NgModule,
|
|
18
|
-
args: [{
|
|
19
|
-
imports: [
|
|
20
|
-
CommonModule, ReactiveFormsModule, MatInputModule, MatAutocompleteModule, FlexLayoutModule
|
|
21
|
-
],
|
|
22
|
-
declarations: [
|
|
23
|
-
ElderMultiAutocompleteComponent
|
|
24
|
-
],
|
|
25
|
-
exports: [
|
|
26
|
-
ElderMultiAutocompleteComponent
|
|
27
|
-
]
|
|
28
|
-
}]
|
|
29
|
-
}] });
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItbXVsdGktYXV0by1jb21wbGV0ZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21wb25lbnRzL211bHRpLWF1dG9jb21wbGV0ZS9lbGRlci1tdWx0aS1hdXRvLWNvbXBsZXRlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQywrQkFBK0IsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQ3JGLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7O0FBRW5ELE9BQU8sRUFBQywrQkFBK0IsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQ3JGLGNBQWMsaUJBQWlCLENBQUM7QUFjaEMsTUFBTSxPQUFPLDRCQUE0Qjs7eUhBQTVCLDRCQUE0QjswSEFBNUIsNEJBQTRCLGlCQU5qQywrQkFBK0IsYUFIL0IsWUFBWSxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsYUFNMUYsK0JBQStCOzBIQUcxQiw0QkFBNEIsWUFUakMsWUFBWSxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0I7MkZBU3JGLDRCQUE0QjtrQkFYeEMsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUU7d0JBQ0wsWUFBWSxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0I7cUJBQzdGO29CQUNELFlBQVksRUFBRTt3QkFDViwrQkFBK0I7cUJBQ2xDO29CQUNELE9BQU8sRUFBRzt3QkFDTiwrQkFBK0I7cUJBQ2xDO2lCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RWxkZXJNdWx0aUF1dG9jb21wbGV0ZUNvbXBvbmVudH0gZnJvbSAnLi9lbGRlci1tdWx0aS1hdXRvY29tcGxldGUuY29tcG9uZW50JztcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtGbGV4TGF5b3V0TW9kdWxlfSBmcm9tICdAYW5ndWxhci9mbGV4LWxheW91dCc7XG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQge1JlYWN0aXZlRm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuZXhwb3J0IHtFbGRlck11bHRpQXV0b2NvbXBsZXRlQ29tcG9uZW50fSBmcm9tICcuL2VsZGVyLW11bHRpLWF1dG9jb21wbGV0ZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi93b3JkLXBvc2l0aW9uJztcblxuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBNYXRJbnB1dE1vZHVsZSwgTWF0QXV0b2NvbXBsZXRlTW9kdWxlLCBGbGV4TGF5b3V0TW9kdWxlXG4gICAgXSxcbiAgICBkZWNsYXJhdGlvbnM6IFtcbiAgICAgICAgRWxkZXJNdWx0aUF1dG9jb21wbGV0ZUNvbXBvbmVudFxuICAgIF0sXG4gICAgZXhwb3J0cyA6IFtcbiAgICAgICAgRWxkZXJNdWx0aUF1dG9jb21wbGV0ZUNvbXBvbmVudFxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgRWxkZXJNdWx0aUF1dG9Db21wbGV0ZU1vZHVsZSB7XG5cbn1cbiJdfQ==
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
-
import { UntypedFormControl } from '@angular/forms';
|
|
3
|
-
import { WordPositionFinder } from './word-position';
|
|
4
|
-
import { LoggerFactory } from '@elderbyte/ts-logger';
|
|
5
|
-
import { EMPTY, of } from 'rxjs';
|
|
6
|
-
import { debounceTime, switchMap } from 'rxjs/operators';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "@angular/common";
|
|
9
|
-
import * as i2 from "@angular/forms";
|
|
10
|
-
import * as i3 from "@angular/material/form-field";
|
|
11
|
-
import * as i4 from "@angular/material/input";
|
|
12
|
-
import * as i5 from "@angular/material/autocomplete";
|
|
13
|
-
import * as i6 from "@angular/material/core";
|
|
14
|
-
import * as i7 from "@angular/flex-layout/flex";
|
|
15
|
-
export class ElderMultiAutocompleteComponent {
|
|
16
|
-
/***************************************************************************
|
|
17
|
-
* *
|
|
18
|
-
* Constructor *
|
|
19
|
-
* *
|
|
20
|
-
**************************************************************************/
|
|
21
|
-
constructor() {
|
|
22
|
-
/***************************************************************************
|
|
23
|
-
* *
|
|
24
|
-
* Fields *
|
|
25
|
-
* *
|
|
26
|
-
**************************************************************************/
|
|
27
|
-
this.logger = LoggerFactory.getLogger(this.constructor.name);
|
|
28
|
-
/**
|
|
29
|
-
* Occurs when the value has been changed and committed
|
|
30
|
-
*/
|
|
31
|
-
this.valueChanged = new EventEmitter();
|
|
32
|
-
this.formControl = new UntypedFormControl();
|
|
33
|
-
this.wordFinder = new WordPositionFinder();
|
|
34
|
-
}
|
|
35
|
-
/***************************************************************************
|
|
36
|
-
* *
|
|
37
|
-
* Life-Cycle *
|
|
38
|
-
* *
|
|
39
|
-
**************************************************************************/
|
|
40
|
-
ngOnInit() {
|
|
41
|
-
this.availableSuggestions = this.formControl.valueChanges.pipe(debounceTime(150), switchMap((value) => {
|
|
42
|
-
if (this.cursorPosition) {
|
|
43
|
-
const cursor = this.cursorPosition;
|
|
44
|
-
const word = this.extractWordFrom(value, cursor);
|
|
45
|
-
return this.getSuggestions(word);
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
return EMPTY;
|
|
49
|
-
}
|
|
50
|
-
}));
|
|
51
|
-
this._sub = this.formControl.valueChanges.
|
|
52
|
-
subscribe(value => this.onValueChanged(value));
|
|
53
|
-
}
|
|
54
|
-
ngOnDestroy() {
|
|
55
|
-
this._sub.unsubscribe();
|
|
56
|
-
}
|
|
57
|
-
/***************************************************************************
|
|
58
|
-
* *
|
|
59
|
-
* Properties *
|
|
60
|
-
* *
|
|
61
|
-
**************************************************************************/
|
|
62
|
-
/***************************************************************************
|
|
63
|
-
* *
|
|
64
|
-
* Public API *
|
|
65
|
-
* *
|
|
66
|
-
**************************************************************************/
|
|
67
|
-
onValueChanged(value) {
|
|
68
|
-
this.logger.debug('value changed', value);
|
|
69
|
-
this.valueChanged.next(value);
|
|
70
|
-
}
|
|
71
|
-
insertSuggestion(suggestion) {
|
|
72
|
-
const full = this.formControl.value != null ? this.formControl.value : '';
|
|
73
|
-
if (this.cursorPosition) {
|
|
74
|
-
const cursor = this.cursorPosition;
|
|
75
|
-
const replacement = this.wordFinder.replaceWord(full, cursor, suggestion + ' ');
|
|
76
|
-
return replacement.newText;
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
-
this.logger.warn('Insert not possible as no cursor-position was available!');
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
/***************************************************************************
|
|
83
|
-
* *
|
|
84
|
-
* Private methods *
|
|
85
|
-
* *
|
|
86
|
-
**************************************************************************/
|
|
87
|
-
getSuggestions(input) {
|
|
88
|
-
if (this.suggestionProvider) {
|
|
89
|
-
return this.suggestionProvider.loadSuggestions(input);
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
92
|
-
return of([]);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
get cursorPosition() {
|
|
96
|
-
if (this.suggestionInput) {
|
|
97
|
-
return this.suggestionInput.nativeElement.selectionStart;
|
|
98
|
-
}
|
|
99
|
-
return null;
|
|
100
|
-
}
|
|
101
|
-
extractWordFrom(text, position) {
|
|
102
|
-
const word = this.wordFinder.findWord(text, position);
|
|
103
|
-
return word.value;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
ElderMultiAutocompleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderMultiAutocompleteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
107
|
-
ElderMultiAutocompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: ElderMultiAutocompleteComponent, selector: "elder-multi-autocomplete", inputs: { placeholder: "placeholder", suggestionProvider: "suggestionProvider" }, outputs: { valueChanged: "modify" }, viewQueries: [{ propertyName: "suggestionInput", first: true, predicate: ["suggestionInput"], descendants: true, static: true }], ngImport: i0, template: "\n<!--\n TODO This should probably be refactored to a directive\n-->\n\n<mat-form-field fxFlex\n\n>\n\n\n <input matInput\n #suggestionInput\n type=\"text\"\n [matAutocomplete]=\"auto\"\n [formControl]=\"formControl\"\n name=\"multiinput\" [placeholder]=\"placeholder\">\n\n <mat-autocomplete #auto=\"matAutocomplete\" >\n <mat-option *ngFor=\"let suggestion of availableSuggestions | async\" [value]=\"insertSuggestion(suggestion)\">\n {{ suggestion }}\n </mat-option>\n </mat-autocomplete>\n</mat-form-field>\n\n\n\n\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i5.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i5.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i7.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] });
|
|
108
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderMultiAutocompleteComponent, decorators: [{
|
|
109
|
-
type: Component,
|
|
110
|
-
args: [{ selector: 'elder-multi-autocomplete', template: "\n<!--\n TODO This should probably be refactored to a directive\n-->\n\n<mat-form-field fxFlex\n\n>\n\n\n <input matInput\n #suggestionInput\n type=\"text\"\n [matAutocomplete]=\"auto\"\n [formControl]=\"formControl\"\n name=\"multiinput\" [placeholder]=\"placeholder\">\n\n <mat-autocomplete #auto=\"matAutocomplete\" >\n <mat-option *ngFor=\"let suggestion of availableSuggestions | async\" [value]=\"insertSuggestion(suggestion)\">\n {{ suggestion }}\n </mat-option>\n </mat-autocomplete>\n</mat-form-field>\n\n\n\n\n" }]
|
|
111
|
-
}], ctorParameters: function () { return []; }, propDecorators: { placeholder: [{
|
|
112
|
-
type: Input
|
|
113
|
-
}], suggestionProvider: [{
|
|
114
|
-
type: Input
|
|
115
|
-
}], valueChanged: [{
|
|
116
|
-
type: Output,
|
|
117
|
-
args: ['modify']
|
|
118
|
-
}], suggestionInput: [{
|
|
119
|
-
type: ViewChild,
|
|
120
|
-
args: ['suggestionInput', { static: true }]
|
|
121
|
-
}] } });
|
|
122
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItbXVsdGktYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VsZGVyYnl0ZS9uZ3gtc3RhcnRlci9zcmMvbGliL2NvbXBvbmVudHMvbXVsdGktYXV0b2NvbXBsZXRlL2VsZGVyLW11bHRpLWF1dG9jb21wbGV0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21wb25lbnRzL211bHRpLWF1dG9jb21wbGV0ZS9lbGRlci1tdWx0aS1hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQy9HLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsS0FBSyxFQUE0QixFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDekQsT0FBTyxFQUFDLFlBQVksRUFBVyxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7O0FBU2hFLE1BQU0sT0FBTywrQkFBK0I7SUFpQ3hDOzs7O2dGQUk0RTtJQUU1RTtRQXJDQTs7OztvRkFJNEU7UUFFM0QsV0FBTSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQVd6RTs7V0FFRztRQUVJLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUsxQyxnQkFBVyxHQUF1QixJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFZOUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7O2dGQUk0RTtJQUVyRSxRQUFRO1FBQ1gsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDMUQsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUNqQixTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUVoQixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQ3JCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7Z0JBQ25DLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFHLE1BQU0sQ0FBQyxDQUFDO2dCQUNsRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDcEM7aUJBQU07Z0JBQ0gsT0FBTyxLQUFLLENBQUM7YUFDaEI7UUFDTCxDQUFDLENBQUMsQ0FDTCxDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVk7WUFDekMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFTSxXQUFXO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQ7Ozs7Z0ZBSTRFO0lBRzVFOzs7O2dGQUk0RTtJQUdyRSxjQUFjLENBQUMsS0FBYTtRQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVNLGdCQUFnQixDQUFDLFVBQWtCO1FBQ3RDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMxRSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDckIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUNuQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFVBQVUsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUNoRixPQUFPLFdBQVcsQ0FBQyxPQUFPLENBQUM7U0FDOUI7YUFBTTtZQUNILElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDBEQUEwRCxDQUFDLENBQUM7U0FDaEY7SUFDTCxDQUFDO0lBRUQ7Ozs7Z0ZBSTRFO0lBRXBFLGNBQWMsQ0FBQyxLQUFhO1FBRWhDLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQ3pCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN6RDthQUFNO1lBQ0gsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDakI7SUFDTCxDQUFDO0lBRUQsSUFBWSxjQUFjO1FBQ3hCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN4QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQztTQUMxRDtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVPLGVBQWUsQ0FBQyxJQUFZLEVBQUUsUUFBZ0I7UUFDbEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3RELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFDOzs0SEE5SFEsK0JBQStCO2dIQUEvQiwrQkFBK0IseVRDZDVDLCtrQkEyQkE7MkZEYmEsK0JBQStCO2tCQUwzQyxTQUFTOytCQUNJLDBCQUEwQjswRUFrQjdCLFdBQVc7c0JBRGpCLEtBQUs7Z0JBSUMsa0JBQWtCO3NCQUR4QixLQUFLO2dCQU9DLFlBQVk7c0JBRGxCLE1BQU07dUJBQUMsUUFBUTtnQkFJVCxlQUFlO3NCQURyQixTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtVbnR5cGVkRm9ybUNvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7V29yZFBvc2l0aW9uRmluZGVyfSBmcm9tICcuL3dvcmQtcG9zaXRpb24nO1xuaW1wb3J0IHtMb2dnZXJGYWN0b3J5fSBmcm9tICdAZWxkZXJieXRlL3RzLWxvZ2dlcic7XG5pbXBvcnQge0VNUFRZLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIG9mfSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBmbGF0TWFwLCBzd2l0Y2hNYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7SVN1Z2dlc3Rpb25Qcm92aWRlcn0gZnJvbSAnLi4vLi4vY29tbW9uL3N1Z2dlc3Rpb24tcHJvdmlkZXInO1xuXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZWxkZXItbXVsdGktYXV0b2NvbXBsZXRlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZWxkZXItbXVsdGktYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9lbGRlci1tdWx0aS1hdXRvY29tcGxldGUuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBFbGRlck11bHRpQXV0b2NvbXBsZXRlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgKiBGaWVsZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIodGhpcy5jb25zdHJ1Y3Rvci5uYW1lKTtcblxuICAgIHByaXZhdGUgX3N1YjogU3Vic2NyaXB0aW9uO1xuXG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBwbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc3VnZ2VzdGlvblByb3ZpZGVyOiBJU3VnZ2VzdGlvblByb3ZpZGVyPHN0cmluZz47XG5cbiAgICAvKipcbiAgICAgKiBPY2N1cnMgd2hlbiB0aGUgdmFsdWUgaGFzIGJlZW4gY2hhbmdlZCBhbmQgY29tbWl0dGVkXG4gICAgICovXG4gICAgQE91dHB1dCgnbW9kaWZ5JylcbiAgICBwdWJsaWMgdmFsdWVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICBAVmlld0NoaWxkKCdzdWdnZXN0aW9uSW5wdXQnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyBzdWdnZXN0aW9uSW5wdXQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgICBwdWJsaWMgZm9ybUNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcbiAgICBwdWJsaWMgYXZhaWxhYmxlU3VnZ2VzdGlvbnM6IE9ic2VydmFibGU8c3RyaW5nW10+O1xuXG4gICAgcHJpdmF0ZSB3b3JkRmluZGVyOiBXb3JkUG9zaXRpb25GaW5kZXI7XG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgICAqIENvbnN0cnVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMud29yZEZpbmRlciA9IG5ldyBXb3JkUG9zaXRpb25GaW5kZXIoKTtcbiAgICB9XG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgICAqIExpZmUtQ3ljbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmF2YWlsYWJsZVN1Z2dlc3Rpb25zID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgIGRlYm91bmNlVGltZSgxNTApLFxuICAgICAgICAgICAgc3dpdGNoTWFwKCh2YWx1ZSkgPT4ge1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3Vyc29yUG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3Vyc29yID0gdGhpcy5jdXJzb3JQb3NpdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd29yZCA9IHRoaXMuZXh0cmFjdFdvcmRGcm9tKHZhbHVlLCAgY3Vyc29yKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3VnZ2VzdGlvbnMod29yZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3N1YiA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLlxuICAgICAgICBzdWJzY3JpYmUodmFsdWUgPT4gdGhpcy5vblZhbHVlQ2hhbmdlZCh2YWx1ZSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgKiBQcm9wZXJ0aWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgKiBQdWJsaWMgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXG4gICAgcHVibGljIG9uVmFsdWVDaGFuZ2VkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ3ZhbHVlIGNoYW5nZWQnLCB2YWx1ZSk7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2VkLm5leHQodmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbnNlcnRTdWdnZXN0aW9uKHN1Z2dlc3Rpb246IHN0cmluZykge1xuICAgICAgICBjb25zdCBmdWxsID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZSAhPSBudWxsID8gdGhpcy5mb3JtQ29udHJvbC52YWx1ZSA6ICcnO1xuICAgICAgICBpZiAodGhpcy5jdXJzb3JQb3NpdGlvbikge1xuICAgICAgICAgICAgY29uc3QgY3Vyc29yID0gdGhpcy5jdXJzb3JQb3NpdGlvbjtcbiAgICAgICAgICAgIGNvbnN0IHJlcGxhY2VtZW50ID0gdGhpcy53b3JkRmluZGVyLnJlcGxhY2VXb3JkKGZ1bGwsIGN1cnNvciwgc3VnZ2VzdGlvbiArICcgJyk7XG4gICAgICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQubmV3VGV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ0luc2VydCBub3QgcG9zc2libGUgYXMgbm8gY3Vyc29yLXBvc2l0aW9uIHdhcyBhdmFpbGFibGUhJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgICAqIFByaXZhdGUgbWV0aG9kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgcHJpdmF0ZSBnZXRTdWdnZXN0aW9ucyhpbnB1dDogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmdbXT4ge1xuXG4gICAgICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25Qcm92aWRlcikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3VnZ2VzdGlvblByb3ZpZGVyLmxvYWRTdWdnZXN0aW9ucyhpbnB1dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgY3Vyc29yUG9zaXRpb24oKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgICBpZiAodGhpcy5zdWdnZXN0aW9uSW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VnZ2VzdGlvbklucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGV4dHJhY3RXb3JkRnJvbSh0ZXh0OiBzdHJpbmcsIHBvc2l0aW9uOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCB3b3JkID0gdGhpcy53b3JkRmluZGVyLmZpbmRXb3JkKHRleHQsIHBvc2l0aW9uKTtcbiAgICAgICAgcmV0dXJuIHdvcmQudmFsdWU7XG4gICAgfVxuXG59XG4iLCJcbjwhLS1cbiAgICAgICAgICAgICAgICBUT0RPIFRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIHJlZmFjdG9yZWQgdG8gYSBkaXJlY3RpdmVcbi0tPlxuXG48bWF0LWZvcm0tZmllbGQgZnhGbGV4XG5cbj5cblxuXG4gIDxpbnB1dCBtYXRJbnB1dFxuICAgICAgICAgI3N1Z2dlc3Rpb25JbnB1dFxuICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvXCJcbiAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgICBuYW1lPVwibXVsdGlpbnB1dFwiIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiPlxuXG4gIDxtYXQtYXV0b2NvbXBsZXRlICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCIgPlxuICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBzdWdnZXN0aW9uIG9mIGF2YWlsYWJsZVN1Z2dlc3Rpb25zIHwgYXN5bmNcIiBbdmFsdWVdPVwiaW5zZXJ0U3VnZ2VzdGlvbihzdWdnZXN0aW9uKVwiPlxuICAgICAge3sgc3VnZ2VzdGlvbiB9fVxuICAgIDwvbWF0LW9wdGlvbj5cbiAgPC9tYXQtYXV0b2NvbXBsZXRlPlxuPC9tYXQtZm9ybS1maWVsZD5cblxuXG5cblxuIl19
|