@wizishop/angular-components 15.1.4 → 15.1.6
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/angular-components.scss +193 -178
- package/esm2020/lib/components/alert/alert.component.mjs +3 -3
- package/esm2020/lib/components/alert-popup/alert-popup-module.mjs +4 -4
- package/esm2020/lib/components/alert-popup/alert-popup.component.mjs +5 -5
- package/esm2020/lib/components/alert-popup/alert-popup.service.mjs +3 -3
- package/esm2020/lib/components/back/back.component.mjs +3 -3
- package/esm2020/lib/components/block/block-title-legacy/block-title-legacy.component.mjs +3 -3
- package/esm2020/lib/components/block/block.component.mjs +7 -7
- package/esm2020/lib/components/block/separator/block-separator.component.mjs +3 -3
- package/esm2020/lib/components/block-with-checkbox/block-with-checkbox.component.mjs +3 -3
- package/esm2020/lib/components/breadcrumbs/breadcrumbs.component.mjs +3 -3
- package/esm2020/lib/components/button/button.component.mjs +12 -12
- package/esm2020/lib/components/calendar/calendar.component.mjs +26 -26
- package/esm2020/lib/components/card-price/card-price.component.mjs +3 -3
- package/esm2020/lib/components/charging-bar/charging-bar.component.mjs +3 -3
- package/esm2020/lib/components/checkbox/checkbox.component.mjs +12 -12
- package/esm2020/lib/components/checkbox/checkbox.module.mjs +4 -4
- package/esm2020/lib/components/common/label/label.component.mjs +3 -3
- package/esm2020/lib/components/common/placeholder/placeholder.component.mjs +3 -3
- package/esm2020/lib/components/confirm-delete/confirm-delete.component.mjs +3 -3
- package/esm2020/lib/components/content-with-buttons/content-with-buttons.component.mjs +3 -3
- package/esm2020/lib/components/delete/delete.component.mjs +3 -3
- package/esm2020/lib/components/draganddrop-list/draganddrop-list.component.mjs +3 -3
- package/esm2020/lib/components/dropdown/dropdown.component.mjs +3 -3
- package/esm2020/lib/components/edit-in-place/edit-in-place.component.mjs +3 -3
- package/esm2020/lib/components/expanded-panel/expanded-panel.component.mjs +3 -3
- package/esm2020/lib/components/expansion/accordion/accordion.component.mjs +5 -5
- package/esm2020/lib/components/expansion/expansion-panel/expansion-panel.component.mjs +9 -9
- package/esm2020/lib/components/expansion/expansion-panel/expansion-panel.directive.mjs +77 -9
- package/esm2020/lib/components/expansion/expansion-panel-header/expansion-panel-header.component.mjs +9 -9
- package/esm2020/lib/components/expansion/expansion-panel-header/expansion-panel-header.directive.mjs +38 -9
- package/esm2020/lib/components/expansion/expansion.module.mjs +4 -4
- package/esm2020/lib/components/filters/filters.component.mjs +3 -3
- package/esm2020/lib/components/free-popin/free-popin.component.mjs +3 -3
- package/esm2020/lib/components/google-preview/google-preview.component.mjs +3 -3
- package/esm2020/lib/components/header-page/header-page.component.mjs +4 -4
- package/esm2020/lib/components/hn/h1/h1.component.mjs +3 -3
- package/esm2020/lib/components/hn/h2/h2.component.mjs +3 -3
- package/esm2020/lib/components/hn/h3/h3.component.mjs +3 -3
- package/esm2020/lib/components/hn/h4/h4.component.mjs +3 -3
- package/esm2020/lib/components/image/image.component.mjs +3 -3
- package/esm2020/lib/components/info/info.component.mjs +3 -3
- package/esm2020/lib/components/inputs/input/input.component.mjs +3 -3
- package/esm2020/lib/components/inputs/input/input.module.mjs +4 -4
- package/esm2020/lib/components/inputs/input-search/input-search.component.mjs +4 -4
- package/esm2020/lib/components/inputs/input-search/input-search.module.mjs +4 -4
- package/esm2020/lib/components/inputs/input-with-select/input-with-select.component.mjs +3 -3
- package/esm2020/lib/components/link/link.component.mjs +9 -9
- package/esm2020/lib/components/loader/loader.component.mjs +3 -3
- package/esm2020/lib/components/loader/loader.module.mjs +4 -4
- package/esm2020/lib/components/logo/logo.component.mjs +3 -3
- package/esm2020/lib/components/mosaic/mosaic.component.mjs +3 -3
- package/esm2020/lib/components/multiple-search/multiple-search.component.mjs +3 -3
- package/esm2020/lib/components/multiple-search-plus/multiple-search-plus.component.mjs +3 -3
- package/esm2020/lib/components/optional-disable-container/optional-disable-container.component.mjs +3 -3
- package/esm2020/lib/components/pagination/pagination.component.mjs +7 -7
- package/esm2020/lib/components/pagination/pagination.module.mjs +4 -4
- package/esm2020/lib/components/pagination/pipes/array-pages.pipe.mjs +3 -3
- package/esm2020/lib/components/pagination/pipes/custom-text.pipe.mjs +3 -3
- package/esm2020/lib/components/pagination/pipes/is-last-page.pipe.mjs +3 -3
- package/esm2020/lib/components/popin/popin.component.mjs +3 -3
- package/esm2020/lib/components/progress-bar/progress-bar.component.mjs +3 -3
- package/esm2020/lib/components/progress-bar/progress-bar.module.mjs +4 -4
- package/esm2020/lib/components/radio/radio-directive.mjs +6 -6
- package/esm2020/lib/components/radio/radio-group.directive.mjs +11 -11
- package/esm2020/lib/components/radio/radio.component.mjs +3 -3
- package/esm2020/lib/components/search/search.component.mjs +4 -4
- package/esm2020/lib/components/select/call-to-action.model.mjs +2 -0
- package/esm2020/lib/components/select/option/option-selection-handler.interface.mjs +2 -0
- package/esm2020/lib/components/select/option/option-selection-handler.token.mjs +3 -0
- package/esm2020/lib/components/select/option/option.component.mjs +28 -0
- package/esm2020/lib/components/select/option/select-option.directive.mjs +97 -0
- package/esm2020/lib/components/select/option-call-to-action/option-call-to-action.component.mjs +12 -0
- package/esm2020/lib/components/select/select/select.component.mjs +194 -0
- package/esm2020/lib/components/select/select/select.directive.mjs +164 -0
- package/esm2020/lib/components/select/select/value-change.service.mjs +190 -0
- package/esm2020/lib/components/select/select-items.dto.mjs +2 -0
- package/esm2020/lib/components/{selects → select}/select-search-trigger/select-search-trigger.component.mjs +4 -4
- package/esm2020/lib/components/select-in-text/select-in-text.component.mjs +103 -0
- package/esm2020/lib/components/selected-list/selected-list.component.mjs +3 -3
- package/esm2020/lib/components/separator/separator.component.mjs +3 -3
- package/esm2020/lib/components/settings/settings.component.mjs +3 -3
- package/esm2020/lib/components/shared-components.module.mjs +19 -18
- package/esm2020/lib/components/snackbar/snackbar.component.mjs +3 -3
- package/esm2020/lib/components/state/state.component.mjs +3 -3
- package/esm2020/lib/components/summary/summary.component.mjs +8 -8
- package/esm2020/lib/components/switch/switch.component.mjs +3 -3
- package/esm2020/lib/components/tab/tab.component.mjs +8 -5
- package/esm2020/lib/components/table/directives/checkBoxRow.directive.mjs +16 -19
- package/esm2020/lib/components/table/directives/column.directive.mjs +6 -8
- package/esm2020/lib/components/table/directives/columnHeader.directive.mjs +17 -23
- package/esm2020/lib/components/table/directives/raw.directive.mjs +3 -3
- package/esm2020/lib/components/table/shared/filters-table.service.mjs +3 -3
- package/esm2020/lib/components/table/shared/table-checkbox-id.service.mjs +3 -3
- package/esm2020/lib/components/table/table.component.mjs +3 -3
- package/esm2020/lib/components/table/table.module.mjs +4 -4
- package/esm2020/lib/components/tag/tag.component.mjs +3 -3
- package/esm2020/lib/components/tag-label/tag-label.component.mjs +3 -3
- package/esm2020/lib/components/text/text.component.mjs +3 -3
- package/esm2020/lib/components/text-area/text-area.component.mjs +3 -3
- package/esm2020/lib/components/token-check/token-check.component.mjs +3 -3
- package/esm2020/lib/components/tooltip/tooltip.component.mjs +3 -3
- package/esm2020/lib/components/tooltip/tooltip.module.mjs +4 -4
- package/esm2020/lib/components/tree/tree.component.mjs +3 -3
- package/esm2020/lib/components/tree/tree.module.mjs +4 -4
- package/esm2020/lib/components/upload/upload.component.mjs +3 -3
- package/esm2020/lib/components/wrapper/wrapper.component.mjs +3 -3
- package/esm2020/lib/components/wrapper-blocs/wrapper-blocs.component.mjs +3 -3
- package/esm2020/lib/components/wrapper-multiple-block/wrapper-multiple-block.component.mjs +3 -3
- package/esm2020/lib/components/wrapper-sidebar/wrapper-sidebar.component.mjs +3 -3
- package/esm2020/lib/directives/abstract-debounce/abstract-debounce.directive.mjs +3 -3
- package/esm2020/lib/directives/abstract-debounce/debounce-keyup.directive.mjs +3 -3
- package/esm2020/lib/directives/auto-hide/auto-hide.directive.mjs +3 -3
- package/esm2020/lib/directives/copy-to-clipboard/copy-to-clipboard.directive.mjs +32 -0
- package/esm2020/lib/directives/keyboard-events/keypress-enter.directive.mjs +8 -8
- package/esm2020/lib/directives/keyboard-events/only-numbers.directive.mjs +3 -3
- package/esm2020/lib/directives/keyboard-events/two-digital-decimal-number.directive.mjs +3 -3
- package/esm2020/lib/directives/ng-var.directive.mjs +12 -12
- package/esm2020/lib/directives/shared-directives.module.mjs +13 -12
- package/esm2020/lib/directives/zindex-toggle/zindex-toggle.directive.mjs +9 -9
- package/esm2020/lib/pipes/call-component-function.pipe.mjs +5 -4
- package/esm2020/lib/pipes/find-option-selected-field.pipe.mjs +3 -3
- package/esm2020/lib/pipes/select/filter-options.pipe.mjs +3 -3
- package/esm2020/lib/pipes/select/select-filters.pipe.mjs +4 -4
- package/esm2020/lib/pipes/selected-list/are-all-options-selected.pipe.mjs +3 -3
- package/esm2020/lib/pipes/shared-pipes.module.mjs +12 -15
- package/esm2020/lib/pipes/tree/format-object-to-recursif-tree.pipe.mjs +3 -3
- package/esm2020/lib/pipes/tree/format-object-to-simple-tree.pipe.mjs +3 -3
- package/esm2020/lib/services/dom.service.mjs +3 -3
- package/esm2020/lib/services/history.service.mjs +3 -3
- package/esm2020/lib/services/multiple-selection.service.mjs +3 -3
- package/esm2020/lib/wizi-components.module.mjs +4 -4
- package/esm2020/public-api.mjs +13 -12
- package/fesm2015/wizishop-angular-components.mjs +638 -645
- package/fesm2015/wizishop-angular-components.mjs.map +1 -1
- package/fesm2020/wizishop-angular-components.mjs +638 -645
- package/fesm2020/wizishop-angular-components.mjs.map +1 -1
- package/lib/components/alert/alert.component.d.ts +1 -1
- package/lib/components/alert-popup/alert-popup.component.d.ts +1 -1
- package/lib/components/back/back.component.d.ts +1 -1
- package/lib/components/block/block-title-legacy/block-title-legacy.component.d.ts +1 -1
- package/lib/components/block/block.component.d.ts +2 -2
- package/lib/components/block/separator/block-separator.component.d.ts +1 -1
- package/lib/components/block-with-checkbox/block-with-checkbox.component.d.ts +1 -1
- package/lib/components/breadcrumbs/breadcrumbs.component.d.ts +1 -1
- package/lib/components/button/button.component.d.ts +1 -1
- package/lib/components/calendar/calendar.component.d.ts +1 -1
- package/lib/components/card-price/card-price.component.d.ts +1 -1
- package/lib/components/charging-bar/charging-bar.component.d.ts +1 -1
- package/lib/components/checkbox/checkbox.component.d.ts +1 -1
- package/lib/components/common/label/label.component.d.ts +1 -1
- package/lib/components/common/placeholder/placeholder.component.d.ts +1 -1
- package/lib/components/confirm-delete/confirm-delete.component.d.ts +1 -1
- package/lib/components/content-with-buttons/content-with-buttons.component.d.ts +1 -1
- package/lib/components/delete/delete.component.d.ts +1 -1
- package/lib/components/draganddrop-list/draganddrop-list.component.d.ts +1 -1
- package/lib/components/dropdown/dropdown.component.d.ts +1 -1
- package/lib/components/edit-in-place/edit-in-place.component.d.ts +1 -1
- package/lib/components/expanded-panel/expanded-panel.component.d.ts +1 -1
- package/lib/components/expansion/accordion/accordion.component.d.ts +1 -1
- package/lib/components/expansion/expansion-panel/expansion-panel.component.d.ts +3 -3
- package/lib/components/expansion/expansion-panel/expansion-panel.directive.d.ts +21 -4
- package/lib/components/expansion/expansion-panel-header/expansion-panel-header.component.d.ts +3 -3
- package/lib/components/expansion/expansion-panel-header/expansion-panel-header.directive.d.ts +14 -4
- package/lib/components/expansion/expansion.module.d.ts +1 -3
- package/lib/components/filters/filters.component.d.ts +1 -1
- package/lib/components/free-popin/free-popin.component.d.ts +1 -1
- package/lib/components/google-preview/google-preview.component.d.ts +1 -1
- package/lib/components/header-page/header-page.component.d.ts +1 -1
- package/lib/components/hn/h1/h1.component.d.ts +1 -1
- package/lib/components/hn/h2/h2.component.d.ts +1 -1
- package/lib/components/hn/h3/h3.component.d.ts +1 -1
- package/lib/components/hn/h4/h4.component.d.ts +1 -1
- package/lib/components/image/image.component.d.ts +1 -1
- package/lib/components/info/info.component.d.ts +1 -1
- package/lib/components/inputs/input/input.component.d.ts +1 -1
- package/lib/components/inputs/input-search/input-search.component.d.ts +1 -1
- package/lib/components/inputs/input-with-select/input-with-select.component.d.ts +1 -1
- package/lib/components/inputs/input-with-select/option-item.dto.d.ts +1 -1
- package/lib/components/link/link.component.d.ts +1 -1
- package/lib/components/loader/loader.component.d.ts +1 -1
- package/lib/components/logo/logo.component.d.ts +1 -1
- package/lib/components/mosaic/mosaic.component.d.ts +5 -5
- package/lib/components/multiple-search/multiple-search.component.d.ts +1 -1
- package/lib/components/multiple-search-plus/multiple-search-plus.component.d.ts +1 -1
- package/lib/components/optional-disable-container/optional-disable-container.component.d.ts +1 -1
- package/lib/components/pagination/pagination.component.d.ts +1 -1
- package/lib/components/popin/popin.component.d.ts +1 -1
- package/lib/components/progress-bar/progress-bar.component.d.ts +1 -1
- package/lib/components/radio/radio-directive.d.ts +2 -2
- package/lib/components/radio/radio-group.directive.d.ts +3 -3
- package/lib/components/radio/radio.component.d.ts +1 -1
- package/lib/components/search/search.component.d.ts +1 -1
- package/lib/components/{selects → select}/call-to-action.model.d.ts +0 -0
- package/lib/components/{selects → select}/option/option-selection-handler.interface.d.ts +0 -0
- package/lib/components/{selects → select}/option/option-selection-handler.token.d.ts +0 -0
- package/lib/components/{selects → select}/option/option.component.d.ts +1 -1
- package/lib/components/{selects → select}/option/select-option.directive.d.ts +1 -1
- package/lib/components/{selects → select}/option-call-to-action/option-call-to-action.component.d.ts +1 -1
- package/lib/components/{selects → select}/select/select.component.d.ts +1 -2
- package/lib/components/{selects → select}/select/select.directive.d.ts +1 -1
- package/lib/components/{selects → select}/select/value-change.service.d.ts +0 -0
- package/lib/components/{selects → select}/select-items.dto.d.ts +0 -0
- package/lib/components/{selects → select}/select-search-trigger/select-search-trigger.component.d.ts +1 -1
- package/lib/components/{selects/select-in-text → select-in-text}/select-in-text.component.d.ts +3 -3
- package/lib/components/selected-list/selected-list.component.d.ts +1 -1
- package/lib/components/separator/separator.component.d.ts +1 -1
- package/lib/components/settings/settings.component.d.ts +1 -1
- package/lib/components/shared-components.module.d.ts +88 -88
- package/lib/components/snackbar/snackbar.component.d.ts +1 -1
- package/lib/components/state/state.component.d.ts +1 -1
- package/lib/components/summary/summary.component.d.ts +1 -1
- package/lib/components/switch/switch.component.d.ts +1 -1
- package/lib/components/tab/tab.component.d.ts +6 -2
- package/lib/components/table/directives/checkBoxRow.directive.d.ts +1 -1
- package/lib/components/table/directives/column.directive.d.ts +1 -1
- package/lib/components/table/directives/columnHeader.directive.d.ts +1 -1
- package/lib/components/table/directives/raw.directive.d.ts +1 -1
- package/lib/components/table/table.component.d.ts +1 -1
- package/lib/components/tag/tag.component.d.ts +1 -1
- package/lib/components/tag-label/tag-label.component.d.ts +1 -1
- package/lib/components/text/text.component.d.ts +1 -1
- package/lib/components/text-area/text-area.component.d.ts +1 -1
- package/lib/components/token-check/token-check.component.d.ts +1 -1
- package/lib/components/tooltip/tooltip.component.d.ts +1 -1
- package/lib/components/tree/tree.component.d.ts +1 -1
- package/lib/components/upload/upload.component.d.ts +1 -1
- package/lib/components/wrapper/wrapper.component.d.ts +1 -1
- package/lib/components/wrapper-blocs/wrapper-blocs.component.d.ts +1 -1
- package/lib/components/wrapper-multiple-block/wrapper-multiple-block.component.d.ts +1 -1
- package/lib/components/wrapper-sidebar/wrapper-sidebar.component.d.ts +1 -1
- package/lib/directives/abstract-debounce/abstract-debounce.directive.d.ts +1 -1
- package/lib/directives/abstract-debounce/debounce-keyup.directive.d.ts +1 -1
- package/lib/directives/auto-hide/auto-hide.directive.d.ts +1 -1
- package/lib/directives/copy-to-clipboard/copy-to-clipboard.directive.d.ts +12 -0
- package/lib/directives/keyboard-events/keypress-enter.directive.d.ts +1 -1
- package/lib/directives/keyboard-events/only-numbers.directive.d.ts +1 -1
- package/lib/directives/keyboard-events/two-digital-decimal-number.directive.d.ts +1 -1
- package/lib/directives/ng-var.directive.d.ts +1 -1
- package/lib/directives/shared-directives.module.d.ts +4 -3
- package/lib/directives/zindex-toggle/zindex-toggle.directive.d.ts +1 -1
- package/lib/pipes/call-component-function.pipe.d.ts +2 -2
- package/lib/pipes/select/select-filters.pipe.d.ts +1 -1
- package/lib/pipes/shared-pipes.module.d.ts +6 -6
- package/package.json +1 -1
- package/public-api.d.ts +12 -11
- package/wizishop-angular-components-15.1.6.tgz +0 -0
- package/esm2020/lib/components/expansion/expansion-panel/expansion-panel-base.mjs +0 -83
- package/esm2020/lib/components/expansion/expansion-panel-header/expansion-panel-header-base.mjs +0 -44
- package/esm2020/lib/components/selects/call-to-action.model.mjs +0 -2
- package/esm2020/lib/components/selects/option/option-selection-handler.interface.mjs +0 -2
- package/esm2020/lib/components/selects/option/option-selection-handler.token.mjs +0 -3
- package/esm2020/lib/components/selects/option/option.component.mjs +0 -28
- package/esm2020/lib/components/selects/option/select-option.directive.mjs +0 -97
- package/esm2020/lib/components/selects/option-call-to-action/option-call-to-action.component.mjs +0 -12
- package/esm2020/lib/components/selects/select/select.component.mjs +0 -197
- package/esm2020/lib/components/selects/select/select.directive.mjs +0 -164
- package/esm2020/lib/components/selects/select/value-change.service.mjs +0 -190
- package/esm2020/lib/components/selects/select-in-text/select-in-text.component.mjs +0 -103
- package/esm2020/lib/components/selects/select-items.dto.mjs +0 -2
- package/lib/components/expansion/expansion-panel/expansion-panel-base.d.ts +0 -26
- package/lib/components/expansion/expansion-panel-header/expansion-panel-header-base.d.ts +0 -20
- package/wizishop-angular-components-15.1.4.tgz +0 -0
|
@@ -1,197 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, HostBinding, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';
|
|
2
|
-
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
|
-
import { filter, takeUntil } from 'rxjs/operators';
|
|
4
|
-
import { ValueChangeService } from './value-change.service';
|
|
5
|
-
import { Subject } from 'rxjs';
|
|
6
|
-
import { SelectSearchTriggerComponent } from '../select-search-trigger/select-search-trigger.component';
|
|
7
|
-
import { DOWN_ARROW, ENTER, ESCAPE, hasModifierKey, LEFT_ARROW, RIGHT_ARROW, TAB, UP_ARROW, } from '@angular/cdk/keycodes';
|
|
8
|
-
import { LabelComponent } from '../../common/label/label.component';
|
|
9
|
-
import { SelectDirective } from './select.directive';
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
import * as i1 from "./value-change.service";
|
|
12
|
-
import * as i2 from "@angular/common";
|
|
13
|
-
import * as i3 from "../../../directives/auto-hide/auto-hide.directive";
|
|
14
|
-
import * as i4 from "../../../directives/zindex-toggle/zindex-toggle.directive";
|
|
15
|
-
import * as i5 from "ngx-perfect-scrollbar";
|
|
16
|
-
import * as i6 from "@ngx-translate/core";
|
|
17
|
-
export class SelectComponent extends SelectDirective {
|
|
18
|
-
/** Whether the component is required. */
|
|
19
|
-
get required() {
|
|
20
|
-
return this._required ?? false;
|
|
21
|
-
}
|
|
22
|
-
set required(value) {
|
|
23
|
-
this._required = value;
|
|
24
|
-
}
|
|
25
|
-
get selectedOptionContent() {
|
|
26
|
-
return this.valueChangeService.selectedOptionContent;
|
|
27
|
-
}
|
|
28
|
-
;
|
|
29
|
-
set keepPanelOpen(keepPanelOpen) {
|
|
30
|
-
this.openPanel = keepPanelOpen;
|
|
31
|
-
this._keepPanelOpen = keepPanelOpen;
|
|
32
|
-
}
|
|
33
|
-
get keepPanelOpen() {
|
|
34
|
-
return this._keepPanelOpen;
|
|
35
|
-
}
|
|
36
|
-
set openPanel(openPanel) {
|
|
37
|
-
const wasOpen = this._openPanel;
|
|
38
|
-
this._openPanel = this.keepPanelOpen || openPanel;
|
|
39
|
-
if (openPanel) {
|
|
40
|
-
this.customSearchTrigger?.setFocus();
|
|
41
|
-
}
|
|
42
|
-
if (wasOpen) {
|
|
43
|
-
this.onSelectTouch(this.value);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
get openPanel() {
|
|
47
|
-
return this._openPanel;
|
|
48
|
-
}
|
|
49
|
-
constructor(valueChangeService) {
|
|
50
|
-
super(valueChangeService);
|
|
51
|
-
this.valueChangeService = valueChangeService;
|
|
52
|
-
//! Refacto improve sroll on mobile, see with Pauline
|
|
53
|
-
// angular material select https://github.com/angular/components/blob/main/src/material/select/select.ts
|
|
54
|
-
this.role = 'combobox';
|
|
55
|
-
this._openPanel = false;
|
|
56
|
-
this.openPanelChange = new EventEmitter();
|
|
57
|
-
this.enableSearch = false;
|
|
58
|
-
this.tabIndex = -1;
|
|
59
|
-
this.isDestroyed$ = new Subject();
|
|
60
|
-
this.isKeyBoardAction = false;
|
|
61
|
-
this.skipIfTriggeredByKeyboardAction = () => {
|
|
62
|
-
if (!this.isKeyBoardAction) {
|
|
63
|
-
return true;
|
|
64
|
-
}
|
|
65
|
-
this.isKeyBoardAction = false;
|
|
66
|
-
return false;
|
|
67
|
-
};
|
|
68
|
-
this.onSelectTouch = () => { };
|
|
69
|
-
}
|
|
70
|
-
ngOnInit() {
|
|
71
|
-
super.ngOnInit();
|
|
72
|
-
this.closeTabOnValueChange();
|
|
73
|
-
}
|
|
74
|
-
closeTabOnValueChange() {
|
|
75
|
-
this.valueChangeService.valueChange$.pipe(takeUntil(this.isDestroyed$), filter(this.skipIfTriggeredByKeyboardAction)).subscribe(() => {
|
|
76
|
-
this.onClosePanel();
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
onTogglePanel() {
|
|
80
|
-
this.openPanel = !this.openPanel;
|
|
81
|
-
this.openPanelChange.emit(this.openPanel);
|
|
82
|
-
}
|
|
83
|
-
onClosePanel() {
|
|
84
|
-
this.openPanel = false;
|
|
85
|
-
this.openPanelChange.emit(this.openPanel);
|
|
86
|
-
}
|
|
87
|
-
onKeydown(event) {
|
|
88
|
-
const keyCode = event.keyCode;
|
|
89
|
-
if (event.keyCode === TAB) {
|
|
90
|
-
// go to the next element with tabindex
|
|
91
|
-
if (this.openPanel) {
|
|
92
|
-
this.openPanel = false;
|
|
93
|
-
}
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
if (this.disabled) {
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
const actionTriggered = this.openPanel ? this._handleOpenKeydown(event) : this._handleClosedKeydown(event);
|
|
100
|
-
if (actionTriggered) {
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
this.isKeyBoardAction = true;
|
|
104
|
-
super.onKeydown(event);
|
|
105
|
-
}
|
|
106
|
-
handleKeyboardActionWithSearch(event) {
|
|
107
|
-
const keyCode = event.keyCode;
|
|
108
|
-
if (keyCode === DOWN_ARROW) {
|
|
109
|
-
this.isKeyBoardAction = true;
|
|
110
|
-
this.valueChangeService.selectNextOption();
|
|
111
|
-
return true;
|
|
112
|
-
}
|
|
113
|
-
if (keyCode === UP_ARROW) {
|
|
114
|
-
this.isKeyBoardAction = true;
|
|
115
|
-
this.valueChangeService.selectPreviousOption();
|
|
116
|
-
return true;
|
|
117
|
-
}
|
|
118
|
-
return false;
|
|
119
|
-
}
|
|
120
|
-
/** Handles keyboard events while the select is closed. */
|
|
121
|
-
_handleClosedKeydown(event) {
|
|
122
|
-
const keyCode = event.keyCode;
|
|
123
|
-
const isArrowKey = keyCode === DOWN_ARROW ||
|
|
124
|
-
keyCode === UP_ARROW ||
|
|
125
|
-
keyCode === LEFT_ARROW ||
|
|
126
|
-
keyCode === RIGHT_ARROW;
|
|
127
|
-
const isOpenKey = keyCode === ENTER;
|
|
128
|
-
// Open the select on ALT + arrow key to match the native <select>
|
|
129
|
-
if ((isOpenKey && !hasModifierKey(event)) ||
|
|
130
|
-
(event.altKey && isArrowKey)) {
|
|
131
|
-
this.openPanel = true;
|
|
132
|
-
return true;
|
|
133
|
-
}
|
|
134
|
-
return false;
|
|
135
|
-
}
|
|
136
|
-
/** Handles keyboard events when the selected is open. */
|
|
137
|
-
_handleOpenKeydown(event) {
|
|
138
|
-
const keyCode = event.keyCode;
|
|
139
|
-
const isArrowKey = keyCode === DOWN_ARROW ||
|
|
140
|
-
keyCode === UP_ARROW ||
|
|
141
|
-
keyCode === LEFT_ARROW ||
|
|
142
|
-
keyCode === RIGHT_ARROW;
|
|
143
|
-
const isEscapeKey = keyCode === ESCAPE || keyCode === ENTER || keyCode === TAB;
|
|
144
|
-
if ((isArrowKey && event.altKey) || isEscapeKey) {
|
|
145
|
-
// Close the select on ALT + arrow key to match the native <select>
|
|
146
|
-
this.openPanel = false;
|
|
147
|
-
if (this.customSearchTrigger && keyCode !== TAB) {
|
|
148
|
-
// If a escape key is used with the search, the focus on the select is loosed. And we can not interact with the select anymore.
|
|
149
|
-
this.selectHeader.nativeElement.focus();
|
|
150
|
-
}
|
|
151
|
-
return true;
|
|
152
|
-
}
|
|
153
|
-
return false;
|
|
154
|
-
}
|
|
155
|
-
registerOnTouched(fn) {
|
|
156
|
-
this.onSelectTouch = fn;
|
|
157
|
-
}
|
|
158
|
-
ngOnDestroy() {
|
|
159
|
-
this.isDestroyed$.next();
|
|
160
|
-
this.isDestroyed$.complete();
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
SelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: SelectComponent, deps: [{ token: i1.ValueChangeService }], target: i0.ɵɵFactoryTarget.Component });
|
|
164
|
-
SelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.1", type: SelectComponent, selector: "wac-select", inputs: { required: "required", keepPanelOpen: "keepPanelOpen", openPanel: "openPanel", enableSearch: "enableSearch" }, outputs: { openPanelChange: "openPanelChange" }, host: { properties: { "attr.role": "this.role" } }, providers: [
|
|
165
|
-
{ provide: NG_VALUE_ACCESSOR, useExisting: SelectComponent, multi: true },
|
|
166
|
-
ValueChangeService
|
|
167
|
-
], queries: [{ propertyName: "customSearchTrigger", first: true, predicate: SelectSearchTriggerComponent, descendants: true }, { propertyName: "label", first: true, predicate: LabelComponent, descendants: true }], viewQueries: [{ propertyName: "selectHeader", first: true, predicate: ["selectHeader"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<p *ngIf=\"!!label\" class=\"wac-select__label\">\n <ng-content select=\"wac-label, .wac-label\" ></ng-content>\n</p>\n\n<div\n class=\"wac-select\"\n wzAutoHide\n (clickOutside)=\"onClosePanel()\"\n [triggerElement]=\"'wac-select__header__selection'\"\n [zIndexToggle]=\"openPanel\"\n >\n\n <div #selectHeader class=\"wac-select__header\" [ngClass]=\"{ 'select-disabled' : disabled }\" (click)=\"!disabled && onTogglePanel()\" tabindex=\"0\">\n\n <ng-container [ngTemplateOutlet]=\"openPanel ? openPanelTrigger : closePanelTrigger\" >\n\n <ng-template #closePanelTrigger>\n <ng-container [ngTemplateOutlet]=\"defaultTrigger\"></ng-container>\n </ng-template>\n\n <ng-template #openPanelTrigger>\n <ng-content *ngIf=\"!!customSearchTrigger; else defaultTrigger\" select=\"wac-select-search-trigger\" ></ng-content>\n </ng-template>\n\n <ng-template #defaultTrigger>\n <ng-content *ngIf=\"!selectedOptionContent\" select=\"wac-placeholder,[role=placeholder]\"></ng-content>\n <div\n class=\"wac-select__header__selection wac-option__placeholder\"\n *ngIf=\"!!selectedOptionContent\"\n [innerHtml]=\"selectedOptionContent\">\n </div>\n </ng-template>\n\n </ng-container>\n\n <span class=\"wac-select__header__chevron\"><i class=\"fas fa-chevron-down\"></i></span>\n\n </div>\n\n\n <div class=\"wac-select__content\" *ngIf=\"!disabled\" [ngClass]=\"{ hidden: !openPanel, open: openPanel }\">\n\n <perfect-scrollbar [config]=\"{ suppressScrollX: true }\">\n <ng-content\n select=\"wac-option-call-to-action, wac-option, option, .option, [selectOption]\">\n </ng-content>\n </perfect-scrollbar>\n\n <div *ngIf=\"!optionChildren?.length\" class=\"wac-select__content__empty\">\n <span>{{'wac.datatable.noresult' | translate}}</span>\n </div>\n\n </div>\n</div>", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.AutoHideDirective, selector: "[wzAutoHide]", inputs: ["triggerElement", "forceOn"], outputs: ["clickOutside"] }, { kind: "directive", type: i4.ZindexToggleDirective, selector: "[zIndexToggle]", inputs: ["zIndexToggle"], outputs: ["onEventChange"] }, { kind: "component", type: i5.PerfectScrollbarComponent, selector: "perfect-scrollbar", inputs: ["disabled", "usePSClass", "autoPropagation", "scrollIndicators", "config"], outputs: ["psScrollY", "psScrollX", "psScrollUp", "psScrollDown", "psScrollLeft", "psScrollRight", "psYReachEnd", "psYReachStart", "psXReachEnd", "psXReachStart"], exportAs: ["ngxPerfectScrollbar"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });
|
|
168
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: SelectComponent, decorators: [{
|
|
169
|
-
type: Component,
|
|
170
|
-
args: [{ selector: 'wac-select', providers: [
|
|
171
|
-
{ provide: NG_VALUE_ACCESSOR, useExisting: SelectComponent, multi: true },
|
|
172
|
-
ValueChangeService
|
|
173
|
-
], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.Default, template: "<p *ngIf=\"!!label\" class=\"wac-select__label\">\n <ng-content select=\"wac-label, .wac-label\" ></ng-content>\n</p>\n\n<div\n class=\"wac-select\"\n wzAutoHide\n (clickOutside)=\"onClosePanel()\"\n [triggerElement]=\"'wac-select__header__selection'\"\n [zIndexToggle]=\"openPanel\"\n >\n\n <div #selectHeader class=\"wac-select__header\" [ngClass]=\"{ 'select-disabled' : disabled }\" (click)=\"!disabled && onTogglePanel()\" tabindex=\"0\">\n\n <ng-container [ngTemplateOutlet]=\"openPanel ? openPanelTrigger : closePanelTrigger\" >\n\n <ng-template #closePanelTrigger>\n <ng-container [ngTemplateOutlet]=\"defaultTrigger\"></ng-container>\n </ng-template>\n\n <ng-template #openPanelTrigger>\n <ng-content *ngIf=\"!!customSearchTrigger; else defaultTrigger\" select=\"wac-select-search-trigger\" ></ng-content>\n </ng-template>\n\n <ng-template #defaultTrigger>\n <ng-content *ngIf=\"!selectedOptionContent\" select=\"wac-placeholder,[role=placeholder]\"></ng-content>\n <div\n class=\"wac-select__header__selection wac-option__placeholder\"\n *ngIf=\"!!selectedOptionContent\"\n [innerHtml]=\"selectedOptionContent\">\n </div>\n </ng-template>\n\n </ng-container>\n\n <span class=\"wac-select__header__chevron\"><i class=\"fas fa-chevron-down\"></i></span>\n\n </div>\n\n\n <div class=\"wac-select__content\" *ngIf=\"!disabled\" [ngClass]=\"{ hidden: !openPanel, open: openPanel }\">\n\n <perfect-scrollbar [config]=\"{ suppressScrollX: true }\">\n <ng-content\n select=\"wac-option-call-to-action, wac-option, option, .option, [selectOption]\">\n </ng-content>\n </perfect-scrollbar>\n\n <div *ngIf=\"!optionChildren?.length\" class=\"wac-select__content__empty\">\n <span>{{'wac.datatable.noresult' | translate}}</span>\n </div>\n\n </div>\n</div>" }]
|
|
174
|
-
}], ctorParameters: function () { return [{ type: i1.ValueChangeService }]; }, propDecorators: { role: [{
|
|
175
|
-
type: HostBinding,
|
|
176
|
-
args: ['attr.role']
|
|
177
|
-
}], customSearchTrigger: [{
|
|
178
|
-
type: ContentChild,
|
|
179
|
-
args: [SelectSearchTriggerComponent]
|
|
180
|
-
}], label: [{
|
|
181
|
-
type: ContentChild,
|
|
182
|
-
args: [LabelComponent]
|
|
183
|
-
}], selectHeader: [{
|
|
184
|
-
type: ViewChild,
|
|
185
|
-
args: ['selectHeader']
|
|
186
|
-
}], required: [{
|
|
187
|
-
type: Input
|
|
188
|
-
}], keepPanelOpen: [{
|
|
189
|
-
type: Input
|
|
190
|
-
}], openPanel: [{
|
|
191
|
-
type: Input
|
|
192
|
-
}], openPanelChange: [{
|
|
193
|
-
type: Output
|
|
194
|
-
}], enableSearch: [{
|
|
195
|
-
type: Input
|
|
196
|
-
}] } });
|
|
197
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0cy9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0cy9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFjLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZMLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUN4RyxPQUFPLEVBQ0wsVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBQ04sY0FBYyxFQUNkLFVBQVUsRUFDVixXQUFXLEVBQ1gsR0FBRyxFQUNILFFBQVEsR0FDVCxNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7Ozs7O0FBYXJELE1BQU0sT0FBTyxlQUE4QixTQUFRLGVB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YW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb259IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFZhbHVlQ2hhbmdlU2VydmljZSB9IGZyb20gJy4vdmFsdWUtY2hhbmdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU2VsZWN0U2VhcmNoVHJpZ2dlckNvbXBvbmVudCB9IGZyb20gJy4uL3NlbGVjdC1zZWFyY2gtdHJpZ2dlci9zZWxlY3Qtc2VhcmNoLXRyaWdnZXIuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIERPV05fQVJST1csXG4gIEVOVEVSLFxuICBFU0NBUEUsXG4gIGhhc01vZGlmaWVyS2V5LFxuICBMRUZUX0FSUk9XLFxuICBSSUdIVF9BUlJPVyxcbiAgVEFCLFxuICBVUF9BUlJPVyxcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7IExhYmVsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tbW9uL2xhYmVsL2xhYmVsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWxlY3REaXJlY3RpdmUgfSBmcm9tICcuL3NlbGVjdC5kaXJlY3RpdmUnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3dhYy1zZWxlY3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAgeyBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IFNlbGVjdENvbXBvbmVudCwgbXVsdGk6IHRydWUgfSxcbiAgICBWYWx1ZUNoYW5nZVNlcnZpY2VcbiAgXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5EZWZhdWx0LFxufSlcbmV4cG9ydCBjbGFzcyBTZWxlY3RDb21wb25lbnQ8VE9wdGlvblZhbHVlPiBleHRlbmRzIFNlbGVjdERpcmVjdGl2ZTxUT3B0aW9uVmFsdWU+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvLyEgUmVmYWN0byBpbXByb3ZlIHNyb2xsIG9uIG1vYmlsZSwgc2VlIHdpdGggUGF1bGluZVxuICAvLyBhbmd1bGFyIG1hdGVyaWFsIHNlbGVjdCBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL2Jsb2IvbWFpbi9zcmMvbWF0ZXJpYWwvc2VsZWN0L3NlbGVjdC50c1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJykgcm9sZSA9ICdjb21ib2JveCc7XG5cbiAgQENvbnRlbnRDaGlsZChTZWxlY3RTZWFyY2hUcmlnZ2VyQ29tcG9uZW50KSBjdXN0b21TZWFyY2hUcmlnZ2VyOiBTZWxlY3RTZWFyY2hUcmlnZ2VyQ29tcG9uZW50O1xuXG4gIEBDb250ZW50Q2hpbGQoTGFiZWxDb21wb25lbnQpIGxhYmVsOiBMYWJlbENvbXBvbmVudDtcblxuICBAVmlld0NoaWxkKCdzZWxlY3RIZWFkZXInKSBzZWxlY3RIZWFkZXI6IEVsZW1lbnRSZWY7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGNvbXBvbmVudCBpcyByZXF1aXJlZC4gKi9cbiAgQElucHV0KClcbiAgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZCA/PyBmYWxzZTtcbiAgfVxuXG4gIHNldCByZXF1aXJlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3JlcXVpcmVkID0gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF9yZXF1aXJlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICBnZXQgc2VsZWN0ZWRPcHRpb25Db250ZW50KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVDaGFuZ2VTZXJ2aWNlLnNlbGVjdGVkT3B0aW9uQ29udGVudDtcbiAgfTtcblxuICBASW5wdXQoKVxuICBzZXQga2VlcFBhbmVsT3BlbihrZWVwUGFuZWxPcGVuOiBib29sZWFuKSB7XG4gICAgdGhpcy5vcGVuUGFuZWwgPSBrZWVwUGFuZWxPcGVuO1xuICAgIHRoaXMuX2tlZXBQYW5lbE9wZW4gPSBrZWVwUGFuZWxPcGVuO1xuICB9XG5cbiAgZ2V0IGtlZXBQYW5lbE9wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2tlZXBQYW5lbE9wZW4gO1xuICB9XG5cbiAgcHJpdmF0ZSBfa2VlcFBhbmVsT3BlbjogYm9vbGVhbjtcblxuICBASW5wdXQoKVxuICBzZXQgb3BlblBhbmVsKG9wZW5QYW5lbDogYm9vbGVhbikge1xuICAgIGNvbnN0IHdhc09wZW4gPSB0aGlzLl9vcGVuUGFuZWw7XG4gICAgdGhpcy5fb3BlblBhbmVsID0gdGhpcy5rZWVwUGFuZWxPcGVuIHx8IG9wZW5QYW5lbDtcblxuICAgIGlmIChvcGVuUGFuZWwpIHtcbiAgICAgIHRoaXMuY3VzdG9tU2VhcmNoVHJpZ2dlcj8uc2V0Rm9jdXMoKTtcbiAgICB9XG5cbiAgICBpZiAod2FzT3Blbikge1xuICAgICAgdGhpcy5vblNlbGVjdFRvdWNoKHRoaXMudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBvcGVuUGFuZWwoKSA6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9vcGVuUGFuZWw7XG4gIH1cbiAgX29wZW5QYW5lbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBvcGVuUGFuZWxDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgQElucHV0KCkgZW5hYmxlU2VhcmNoOiBib29sZWFuID0gZmFsc2U7XG5cbiAgb3ZlcnJpZGUgdGFiSW5kZXg6IG51bWJlciA9IC0xO1xuXG4gIGlzRGVzdHJveWVkJDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgcHJpdmF0ZSBpc0tleUJvYXJkQWN0aW9uID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHZhbHVlQ2hhbmdlU2VydmljZTogVmFsdWVDaGFuZ2VTZXJ2aWNlPFRPcHRpb25WYWx1ZT4sXG4gICAgKSB7XG4gICAgICBzdXBlcih2YWx1ZUNoYW5nZVNlcnZpY2UpO1xuICAgIH1cblxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIHRoaXMuY2xvc2VUYWJPblZhbHVlQ2hhbmdlKCk7XG4gIH1cblxuICBwcml2YXRlIGNsb3NlVGFiT25WYWx1ZUNoYW5nZSgpIHtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlU2VydmljZS52YWx1ZUNoYW5nZSQucGlwZSh0YWtlVW50aWwodGhpcy5pc0Rlc3Ryb3llZCQpLCBmaWx0ZXIodGhpcy5za2lwSWZUcmlnZ2VyZWRCeUtleWJvYXJkQWN0aW9uKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMub25DbG9zZVBhbmVsKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNraXBJZlRyaWdnZXJlZEJ5S2V5Ym9hcmRBY3Rpb24gPSAoKSA9PiB7XG4gICAgaWYoIXRoaXMuaXNLZXlCb2FyZEFjdGlvbikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHRoaXMuaXNLZXlCb2FyZEFjdGlvbiA9IGZhbHNlO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIG9uVG9nZ2xlUGFuZWwoKSB7XG4gICAgdGhpcy5vcGVuUGFuZWwgPSAhdGhpcy5vcGVuUGFuZWw7XG4gICAgdGhpcy5vcGVuUGFuZWxDaGFuZ2UuZW1pdCh0aGlzLm9wZW5QYW5lbCk7XG4gIH1cblxuICBvbkNsb3NlUGFuZWwoKSB7XG4gICAgdGhpcy5vcGVuUGFuZWwgPSBmYWxzZTtcbiAgICB0aGlzLm9wZW5QYW5lbENoYW5nZS5lbWl0KHRoaXMub3BlblBhbmVsKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG9uS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGtleUNvZGUgPSBldmVudC5rZXlDb2RlO1xuICAgIGlmIChldmVudC5rZXlDb2RlID09PSBUQUIpIHtcbiAgICAgIC8vIGdvIHRvIHRoZSBuZXh0IGVsZW1lbnQgd2l0aCB0YWJpbmRleFxuICAgICAgaWYgKHRoaXMub3BlblBhbmVsKSB7XG4gICAgICAgIHRoaXMub3BlblBhbmVsID0gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYWN0aW9uVHJpZ2dlcmVkID0gdGhpcy5vcGVuUGFuZWwgPyB0aGlzLl9oYW5kbGVPcGVuS2V5ZG93bihldmVudCkgOiB0aGlzLl9oYW5kbGVDbG9zZWRLZXlkb3duKGV2ZW50KTtcblxuICAgIGlmIChhY3Rpb25UcmlnZ2VyZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pc0tleUJvYXJkQWN0aW9uID0gdHJ1ZTtcbiAgICBzdXBlci5vbktleWRvd24oZXZlbnQpO1xuICB9XG5cbiAgaGFuZGxlS2V5Ym9hcmRBY3Rpb25XaXRoU2VhcmNoKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgY29uc3Qga2V5Q29kZSA9IGV2ZW50LmtleUNvZGU7XG5cbiAgICBpZiAoa2V5Q29kZSA9PT0gRE9XTl9BUlJPVykge1xuICAgICAgdGhpcy5pc0tleUJvYXJkQWN0aW9uID0gdHJ1ZTtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2VTZXJ2aWNlLnNlbGVjdE5leHRPcHRpb24oKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoa2V5Q29kZSA9PT0gVVBfQVJST1cpIHtcbiAgICAgIHRoaXMuaXNLZXlCb2FyZEFjdGlvbiA9IHRydWU7XG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlU2VydmljZS5zZWxlY3RQcmV2aW91c09wdGlvbigpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKiBIYW5kbGVzIGtleWJvYXJkIGV2ZW50cyB3aGlsZSB0aGUgc2VsZWN0IGlzIGNsb3NlZC4gKi9cbiAgcHJpdmF0ZSBfaGFuZGxlQ2xvc2VkS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGtleUNvZGUgPSBldmVudC5rZXlDb2RlO1xuICAgIGNvbnN0IGlzQXJyb3dLZXkgPVxuICAgICAga2V5Q29kZSA9PT0gRE9XTl9BUlJPVyB8fFxuICAgICAga2V5Q29kZSA9PT0gVVBfQVJST1cgfHxcbiAgICAgIGtleUNvZGUgPT09IExFRlRfQVJST1cgfHxcbiAgICAgIGtleUNvZGUgPT09IFJJR0hUX0FSUk9XO1xuICAgIGNvbnN0IGlzT3BlbktleSA9IGtleUNvZGUgPT09IEVOVEVSO1xuICAgIC8vIE9wZW4gdGhlIHNlbGVjdCBvbiBBTFQgKyBhcnJvdyBrZXkgdG8gbWF0Y2ggdGhlIG5hdGl2ZSA8c2VsZWN0PlxuICAgIGlmIChcbiAgICAgIChpc09wZW5LZXkgJiYgIWhhc01vZGlmaWVyS2V5KGV2ZW50KSkgfHxcbiAgICAgIChldmVudC5hbHRLZXkgJiYgaXNBcnJvd0tleSlcbiAgICApIHtcbiAgICAgIHRoaXMub3BlblBhbmVsID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKiBIYW5kbGVzIGtleWJvYXJkIGV2ZW50cyB3aGVuIHRoZSBzZWxlY3RlZCBpcyBvcGVuLiAqL1xuICBwcml2YXRlIF9oYW5kbGVPcGVuS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGtleUNvZGUgPSBldmVudC5rZXlDb2RlO1xuICAgIGNvbnN0IGlzQXJyb3dLZXkgPVxuICAgICAga2V5Q29kZSA9PT0gRE9XTl9BUlJPVyB8fFxuICAgICAga2V5Q29kZSA9PT0gVVBfQVJST1cgfHxcbiAgICAgIGtleUNvZGUgPT09IExFRlRfQVJST1cgfHxcbiAgICAgIGtleUNvZGUgPT09IFJJR0hUX0FSUk9XO1xuICAgIGNvbnN0IGlzRXNjYXBlS2V5ID0ga2V5Q29kZSA9PT0gRVNDQVBFIHx8IGtleUNvZGUgPT09IEVOVEVSIHx8IGtleUNvZGUgPT09IFRBQjtcblxuICAgIGlmICgoaXNBcnJvd0tleSAmJiBldmVudC5hbHRLZXkpIHx8IGlzRXNjYXBlS2V5KSB7XG4gICAgICAvLyBDbG9zZSB0aGUgc2VsZWN0IG9uIEFMVCArIGFycm93IGtleSB0byBtYXRjaCB0aGUgbmF0aXZlIDxzZWxlY3Q+XG4gICAgICB0aGlzLm9wZW5QYW5lbCA9IGZhbHNlO1xuXG4gICAgICBpZiAodGhpcy5jdXN0b21TZWFyY2hUcmlnZ2VyICYmIGtleUNvZGUgIT09IFRBQikge1xuICAgICAgICAvLyBJZiBhIGVzY2FwZSBrZXkgaXMgdXNlZCB3aXRoIHRoZSBzZWFyY2gsIHRoZSBmb2N1cyBvbiB0aGUgc2VsZWN0IGlzIGxvb3NlZC4gQW5kIHdlIGNhbiBub3QgaW50ZXJhY3Qgd2l0aCB0aGUgc2VsZWN0IGFueW1vcmUuXG4gICAgICAgIHRoaXMuc2VsZWN0SGVhZGVyLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIG9uU2VsZWN0VG91Y2g6ICh2YWx1ZTogYW55KSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgb3ZlcnJpZGUgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSl7XG4gICAgdGhpcy5vblNlbGVjdFRvdWNoID0gZm47XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmlzRGVzdHJveWVkJC5uZXh0KCk7XG4gICAgdGhpcy5pc0Rlc3Ryb3llZCQuY29tcGxldGUoKTtcbiAgfVxufVxuIiwiPHAgKm5nSWY9XCIhIWxhYmVsXCIgY2xhc3M9XCJ3YWMtc2VsZWN0X19sYWJlbFwiPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJ3YWMtbGFiZWwsIC53YWMtbGFiZWxcIiA+PC9uZy1jb250ZW50PlxuPC9wPlxuXG48ZGl2XG4gIGNsYXNzPVwid2FjLXNlbGVjdFwiXG4gIHd6QXV0b0hpZGVcbiAgKGNsaWNrT3V0c2lkZSk9XCJvbkNsb3NlUGFuZWwoKVwiXG4gIFt0cmlnZ2VyRWxlbWVudF09XCInd2FjLXNlbGVjdF9faGVhZGVyX19zZWxlY3Rpb24nXCJcbiAgW3pJbmRleFRvZ2dsZV09XCJvcGVuUGFuZWxcIlxuICA+XG5cbiAgICA8ZGl2ICNzZWxlY3RIZWFkZXIgY2xhc3M9XCJ3YWMtc2VsZWN0X19oZWFkZXJcIiBbbmdDbGFzc109XCJ7ICdzZWxlY3QtZGlzYWJsZWQnIDogZGlzYWJsZWQgfVwiIChjbGljayk9XCIhZGlzYWJsZWQgJiYgb25Ub2dnbGVQYW5lbCgpXCIgdGFiaW5kZXg9XCIwXCI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwib3BlblBhbmVsID8gb3BlblBhbmVsVHJpZ2dlciA6IGNsb3NlUGFuZWxUcmlnZ2VyXCIgPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjY2xvc2VQYW5lbFRyaWdnZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJkZWZhdWx0VHJpZ2dlclwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjb3BlblBhbmVsVHJpZ2dlcj5cbiAgICAgICAgICA8bmctY29udGVudCAqbmdJZj1cIiEhY3VzdG9tU2VhcmNoVHJpZ2dlcjsgZWxzZSBkZWZhdWx0VHJpZ2dlclwiIHNlbGVjdD1cIndhYy1zZWxlY3Qtc2VhcmNoLXRyaWdnZXJcIiA+PC9uZy1jb250ZW50PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFRyaWdnZXI+XG4gICAgICAgICAgPG5nLWNvbnRlbnQgKm5nSWY9XCIhc2VsZWN0ZWRPcHRpb25Db250ZW50XCIgc2VsZWN0PVwid2FjLXBsYWNlaG9sZGVyLFtyb2xlPXBsYWNlaG9sZGVyXVwiPjwvbmctY29udGVudD5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cIndhYy1zZWxlY3RfX2hlYWRlcl9fc2VsZWN0aW9uIHdhYy1vcHRpb25fX3BsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICpuZ0lmPVwiISFzZWxlY3RlZE9wdGlvbkNvbnRlbnRcIlxuICAgICAgICAgICAgW2lubmVySHRtbF09XCJzZWxlY3RlZE9wdGlvbkNvbnRlbnRcIj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxzcGFuIGNsYXNzPVwid2FjLXNlbGVjdF9faGVhZGVyX19jaGV2cm9uXCI+PGkgY2xhc3M9XCJmYXMgZmEtY2hldnJvbi1kb3duXCI+PC9pPjwvc3Bhbj5cblxuICAgIDwvZGl2PlxuXG5cbiAgICA8ZGl2IGNsYXNzPVwid2FjLXNlbGVjdF9fY29udGVudFwiICpuZ0lmPVwiIWRpc2FibGVkXCIgW25nQ2xhc3NdPVwieyBoaWRkZW46ICFvcGVuUGFuZWwsIG9wZW46IG9wZW5QYW5lbCB9XCI+XG5cbiAgICAgIDxwZXJmZWN0LXNjcm9sbGJhciBbY29uZmlnXT1cInsgc3VwcHJlc3NTY3JvbGxYOiB0cnVlIH1cIj5cbiAgICAgICAgPG5nLWNvbnRlbnRcbiAgICAgICAgICBzZWxlY3Q9XCJ3YWMtb3B0aW9uLWNhbGwtdG8tYWN0aW9uLCB3YWMtb3B0aW9uLCBvcHRpb24sIC5vcHRpb24sIFtzZWxlY3RPcHRpb25dXCI+XG4gICAgICAgIDwvbmctY29udGVudD5cbiAgICAgIDwvcGVyZmVjdC1zY3JvbGxiYXI+XG5cbiAgICAgIDxkaXYgKm5nSWY9XCIhb3B0aW9uQ2hpbGRyZW4/Lmxlbmd0aFwiIGNsYXNzPVwid2FjLXNlbGVjdF9fY29udGVudF9fZW1wdHlcIj5cbiAgICAgICAgPHNwYW4+e3snd2FjLmRhdGF0YWJsZS5ub3Jlc3VsdCcgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgPC9kaXY+XG48L2Rpdj4iXX0=
|
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
import { DOWN_ARROW, UP_ARROW, LEFT_ARROW, RIGHT_ARROW, TAB } from '@angular/cdk/keycodes';
|
|
2
|
-
import { ContentChildren, Directive, EventEmitter, HostBinding, HostListener, Input, Output } from '@angular/core';
|
|
3
|
-
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
4
|
-
import { startWith, Subject, takeUntil } from 'rxjs';
|
|
5
|
-
import { OPTION_SELECTION_HANDLER } from '../option/option-selection-handler.token';
|
|
6
|
-
import { ValueChangeService } from './value-change.service';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "./value-change.service";
|
|
9
|
-
export class SelectDirective {
|
|
10
|
-
get tabindex() {
|
|
11
|
-
return this.tabIndex;
|
|
12
|
-
}
|
|
13
|
-
get isSelectDisabled() {
|
|
14
|
-
return this.disabled;
|
|
15
|
-
}
|
|
16
|
-
/** Handles all keydown events on the select. */
|
|
17
|
-
onKeydown(event) {
|
|
18
|
-
if (event.keyCode === TAB) {
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
if (this.disabled) {
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
this.handleKeyboardAction(event);
|
|
25
|
-
}
|
|
26
|
-
set value(value) {
|
|
27
|
-
this._value = value;
|
|
28
|
-
if (!this.optionChildren) {
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
this.valueChangeService.assignValue(value);
|
|
32
|
-
}
|
|
33
|
-
get value() {
|
|
34
|
-
return this._value;
|
|
35
|
-
}
|
|
36
|
-
get multiple() {
|
|
37
|
-
return this._multiple;
|
|
38
|
-
}
|
|
39
|
-
set multiple(value) {
|
|
40
|
-
this._multiple = value;
|
|
41
|
-
this.valueChangeService.setMultiple(value);
|
|
42
|
-
}
|
|
43
|
-
set disabled(disabled) {
|
|
44
|
-
this._disabled = disabled;
|
|
45
|
-
this.valueChangeService.setDisabledState(disabled);
|
|
46
|
-
}
|
|
47
|
-
get disabled() {
|
|
48
|
-
return this._disabled;
|
|
49
|
-
}
|
|
50
|
-
constructor(valueChangeService) {
|
|
51
|
-
this.valueChangeService = valueChangeService;
|
|
52
|
-
this.valueChange = new EventEmitter();
|
|
53
|
-
this._multiple = false;
|
|
54
|
-
this._disabled = false;
|
|
55
|
-
this.tabIndex = 0;
|
|
56
|
-
this.isDestroyed$ = new Subject();
|
|
57
|
-
// ControlValueAccessor methods
|
|
58
|
-
this.onChange = () => { };
|
|
59
|
-
this.onTouch = () => { };
|
|
60
|
-
}
|
|
61
|
-
ngOnInit() {
|
|
62
|
-
this.handleValueChange();
|
|
63
|
-
}
|
|
64
|
-
ngAfterViewInit() {
|
|
65
|
-
this.handleOptionChildren();
|
|
66
|
-
}
|
|
67
|
-
handleValueChange() {
|
|
68
|
-
this.valueChangeService.valueChange$.pipe(takeUntil(this.isDestroyed$)).subscribe(value => {
|
|
69
|
-
this._value = value;
|
|
70
|
-
this.valueChange.emit(this.value);
|
|
71
|
-
this.onChange(this.value);
|
|
72
|
-
this.onTouch(this.value);
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
handleOptionChildren() {
|
|
76
|
-
this.optionChildren.changes.pipe(takeUntil(this.isDestroyed$), startWith(this.optionChildren)).subscribe(optionChildren => {
|
|
77
|
-
this.valueChangeService.handleSelectOptionsChange(optionChildren, this.value);
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
/** Handles keyboard events when the selected is open. */
|
|
81
|
-
handleKeyboardAction(event) {
|
|
82
|
-
const keyCode = event.keyCode;
|
|
83
|
-
const isArrowKey = keyCode === DOWN_ARROW ||
|
|
84
|
-
keyCode === UP_ARROW ||
|
|
85
|
-
keyCode === LEFT_ARROW ||
|
|
86
|
-
keyCode === RIGHT_ARROW;
|
|
87
|
-
// const isTyping = (keyCode >= A && keyCode <= Z) || (keyCode >= ZERO && keyCode <= NINE);
|
|
88
|
-
if (isArrowKey) {
|
|
89
|
-
event.preventDefault(); // prevents the page from scrolling
|
|
90
|
-
// select the next option on arrow key down
|
|
91
|
-
if (keyCode === DOWN_ARROW || keyCode === RIGHT_ARROW) {
|
|
92
|
-
this.valueChangeService.selectNextOption();
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
this.valueChangeService.selectPreviousOption();
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
/*
|
|
99
|
-
if (isTyping) {
|
|
100
|
-
this.valueChangeService.searchOptionByFirstLetter(event.key);
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
*/
|
|
104
|
-
}
|
|
105
|
-
writeValue(value) {
|
|
106
|
-
if (typeof value === 'undefined') {
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
this.value = value;
|
|
110
|
-
}
|
|
111
|
-
registerOnChange(fn) {
|
|
112
|
-
this.onChange = fn;
|
|
113
|
-
}
|
|
114
|
-
registerOnTouched(fn) {
|
|
115
|
-
this.onTouch = fn;
|
|
116
|
-
}
|
|
117
|
-
setDisabledState(isDisabled) {
|
|
118
|
-
this.disabled = isDisabled;
|
|
119
|
-
}
|
|
120
|
-
;
|
|
121
|
-
ngOnDestroy() {
|
|
122
|
-
this.isDestroyed$.next();
|
|
123
|
-
this.isDestroyed$.complete();
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
SelectDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: SelectDirective, deps: [{ token: i1.ValueChangeService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
127
|
-
SelectDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.1", type: SelectDirective, selector: "[wacSelect]", inputs: { value: "value", multiple: "multiple", disabled: "disabled", tabIndex: "tabIndex" }, outputs: { valueChange: "valueChange" }, host: { listeners: { "keydown": "onKeydown($event)" }, properties: { "attr.tabindex": "this.tabindex", "class.wac-select-disabled": "this.isSelectDisabled" } }, providers: [
|
|
128
|
-
{ provide: NG_VALUE_ACCESSOR, useExisting: SelectDirective, multi: true },
|
|
129
|
-
ValueChangeService
|
|
130
|
-
], queries: [{ propertyName: "optionChildren", predicate: OPTION_SELECTION_HANDLER, descendants: true }], exportAs: ["wacSelect"], ngImport: i0 });
|
|
131
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: SelectDirective, decorators: [{
|
|
132
|
-
type: Directive,
|
|
133
|
-
args: [{
|
|
134
|
-
selector: '[wacSelect]',
|
|
135
|
-
providers: [
|
|
136
|
-
{ provide: NG_VALUE_ACCESSOR, useExisting: SelectDirective, multi: true },
|
|
137
|
-
ValueChangeService
|
|
138
|
-
],
|
|
139
|
-
exportAs: 'wacSelect'
|
|
140
|
-
}]
|
|
141
|
-
}], ctorParameters: function () { return [{ type: i1.ValueChangeService }]; }, propDecorators: { tabindex: [{
|
|
142
|
-
type: HostBinding,
|
|
143
|
-
args: ['attr.tabindex']
|
|
144
|
-
}], isSelectDisabled: [{
|
|
145
|
-
type: HostBinding,
|
|
146
|
-
args: ['class.wac-select-disabled']
|
|
147
|
-
}], onKeydown: [{
|
|
148
|
-
type: HostListener,
|
|
149
|
-
args: ['keydown', ['$event']]
|
|
150
|
-
}], optionChildren: [{
|
|
151
|
-
type: ContentChildren,
|
|
152
|
-
args: [OPTION_SELECTION_HANDLER, { descendants: true }]
|
|
153
|
-
}], value: [{
|
|
154
|
-
type: Input
|
|
155
|
-
}], valueChange: [{
|
|
156
|
-
type: Output
|
|
157
|
-
}], multiple: [{
|
|
158
|
-
type: Input
|
|
159
|
-
}], disabled: [{
|
|
160
|
-
type: Input
|
|
161
|
-
}], tabIndex: [{
|
|
162
|
-
type: Input
|
|
163
|
-
}] } });
|
|
164
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0cy9zZWxlY3Qvc2VsZWN0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFvQixHQUFHLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RyxPQUFPLEVBQWlCLGVBQWUsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDaEssT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVyRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNwRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7O0FBVzVELE1BQU0sT0FBTyxlQUFlO0lBRXhCLElBQWtDLFFBQVE7UUFDeEMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUE4QyxnQkFBZ0I7UUFDNUQsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxnREFBZ0Q7SUFDWCxTQUFTLENBQUMsS0FBb0I7UUFDakUsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLEdBQUcsRUFBRTtZQUN6QixPQUFPO1NBQ1I7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxD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LGVBQWU7a0JBVDNCLFNBQVM7bUJBQ1I7b0JBQ0UsUUFBUSxFQUFFLGFBQWE7b0JBQ3ZCLFNBQVMsRUFBRTt3QkFDUCxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLGlCQUFpQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7d0JBQ3pFLGtCQUFrQjtxQkFDbkI7b0JBQ0gsUUFBUSxFQUFFLFdBQVc7aUJBQ3hCO3lHQUdxQyxRQUFRO3NCQUF6QyxXQUFXO3VCQUFDLGVBQWU7Z0JBSWtCLGdCQUFnQjtzQkFBN0QsV0FBVzt1QkFBQywyQkFBMkI7Z0JBS0gsU0FBUztzQkFBN0MsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBVXNDLGNBQWM7c0JBQXRGLGVBQWU7dUJBQUMsd0JBQStCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQUduRSxLQUFLO3NCQURSLEtBQUs7Z0JBaUJOLFdBQVc7c0JBRFYsTUFBTTtnQkFJSCxRQUFRO3NCQURYLEtBQUs7Z0JBV0YsUUFBUTtzQkFEWCxLQUFLO2dCQVdHLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET1dOX0FSUk9XLCBVUF9BUlJPVywgTEVGVF9BUlJPVywgUklHSFRfQVJST1csIEEsIFosIFpFUk8sIE5JTkUsIFRBQiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb250ZW50Q2hpbGRyZW4sIERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgUXVlcnlMaXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBzdGFydFdpdGgsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgT3B0aW9uU2VsZWN0aW9uSGFuZGxlciB9IGZyb20gJy4uL29wdGlvbi9vcHRpb24tc2VsZWN0aW9uLWhhbmRsZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IE9QVElPTl9TRUxFQ1RJT05fSEFORExFUiB9IGZyb20gJy4uL29wdGlvbi9vcHRpb24tc2VsZWN0aW9uLWhhbmRsZXIudG9rZW4nO1xuaW1wb3J0IHsgVmFsdWVDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi92YWx1ZS1jaGFuZ2Uuc2VydmljZSc7XG5cbkBEaXJlY3RpdmUoXG4gIHtcbiAgICBzZWxlY3RvcjogJ1t3YWNTZWxlY3RdJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IFNlbGVjdERpcmVjdGl2ZSwgbXVsdGk6IHRydWUgfSxcbiAgICAgICAgVmFsdWVDaGFuZ2VTZXJ2aWNlXG4gICAgICBdLFxuICAgIGV4cG9ydEFzOiAnd2FjU2VsZWN0J1xufSlcbmV4cG9ydCBjbGFzcyBTZWxlY3REaXJlY3RpdmU8VE9wdGlvblZhbHVlPiBpbXBsZW1lbnRzICBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnRhYmluZGV4JykgZ2V0IHRhYmluZGV4KCkge1xuICAgICAgcmV0dXJuIHRoaXMudGFiSW5kZXg7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy53YWMtc2VsZWN0LWRpc2FibGVkJykgZ2V0IGlzU2VsZWN0RGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZDtcbiAgICB9XG5cbiAgICAvKiogSGFuZGxlcyBhbGwga2V5ZG93biBldmVudHMgb24gdGhlIHNlbGVjdC4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSkgb25LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gVEFCKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaGFuZGxlS2V5Ym9hcmRBY3Rpb24oZXZlbnQpO1xuICAgIH1cblxuICAgIEBDb250ZW50Q2hpbGRyZW4oT1BUSU9OX1NFTEVDVElPTl9IQU5ETEVSIGFzIGFueSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBvcHRpb25DaGlsZHJlbiE6IFF1ZXJ5TGlzdDxPcHRpb25TZWxlY3Rpb25IYW5kbGVyPFRPcHRpb25WYWx1ZT4+O1xuXG4gICAgQElucHV0KClcbiAgICBzZXQgdmFsdWUodmFsdWU6IFRPcHRpb25WYWx1ZSB8IFRPcHRpb25WYWx1ZVtdKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuXG4gICAgICBpZiAoIXRoaXMub3B0aW9uQ2hpbGRyZW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlU2VydmljZS5hc3NpZ25WYWx1ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0IHZhbHVlKCkgOiBUT3B0aW9uVmFsdWUgfCBUT3B0aW9uVmFsdWVbXSB7XG4gICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfVxuICAgIF92YWx1ZTogVE9wdGlvblZhbHVlIHwgVE9wdGlvblZhbHVlW107XG5cbiAgICBAT3V0cHV0KClcbiAgICB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgQElucHV0KClcbiAgICBnZXQgbXVsdGlwbGUoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy5fbXVsdGlwbGU7XG4gICAgfVxuICAgIHNldCBtdWx0aXBsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgdGhpcy5fbXVsdGlwbGUgPSB2YWx1ZTtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2VTZXJ2aWNlLnNldE11bHRpcGxlKHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfbXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGRpc2FibGVkKGRpc2FibGVkOiBib29sZWFuKSB7XG4gICAgICB0aGlzLl9kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgICAgdGhpcy52YWx1ZUNoYW5nZVNlcnZpY2Uuc2V0RGlzYWJsZWRTdGF0ZShkaXNhYmxlZCk7XG4gICAgfVxuICAgIGdldCBkaXNhYmxlZCgpIDogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gICAgfVxuICAgIF9kaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG5cbiAgICBASW5wdXQoKSB0YWJJbmRleDogbnVtYmVyID0gMDtcblxuICAgIGlzRGVzdHJveWVkJDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgdmFsdWVDaGFuZ2VTZXJ2aWNlOiBWYWx1ZUNoYW5nZVNlcnZpY2U8VE9wdGlvblZhbHVlPikge1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgdGhpcy5oYW5kbGVWYWx1ZUNoYW5nZSgpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgIHRoaXMuaGFuZGxlT3B0aW9uQ2hpbGRyZW4oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVZhbHVlQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlU2VydmljZS52YWx1ZUNoYW5nZSQucGlwZSh0YWtlVW50aWwodGhpcy5pc0Rlc3Ryb3llZCQpKS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XG4gICAgICAgICAgdGhpcy5vblRvdWNoKHRoaXMudmFsdWUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZU9wdGlvbkNoaWxkcmVuKCkge1xuICAgICAgICB0aGlzLm9wdGlvbkNoaWxkcmVuLmNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5pc0Rlc3Ryb3llZCQpLCBzdGFydFdpdGgodGhpcy5vcHRpb25DaGlsZHJlbikpLnN1YnNjcmliZShvcHRpb25DaGlsZHJlbiA9PiB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlU2VydmljZS5oYW5kbGVTZWxlY3RPcHRpb25zQ2hhbmdlKG9wdGlvbkNoaWxkcmVuLCB0aGlzLnZhbHVlKTtcblxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogSGFuZGxlcyBrZXlib2FyZCBldmVudHMgd2hlbiB0aGUgc2VsZWN0ZWQgaXMgb3Blbi4gKi9cbiAgICBwcm90ZWN0ZWQgaGFuZGxlS2V5Ym9hcmRBY3Rpb24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgIGNvbnN0IGtleUNvZGUgPSBldmVudC5rZXlDb2RlO1xuICAgICAgY29uc3QgaXNBcnJvd0tleSA9XG4gICAgICAgIGtleUNvZGUgPT09IERPV05fQVJST1cgfHxcbiAgICAgICAga2V5Q29kZSA9PT0gVVBfQVJST1cgfHxcbiAgICAgICAga2V5Q29kZSA9PT0gTEVGVF9BUlJPVyB8fFxuICAgICAgICBrZXlDb2RlID09PSBSSUdIVF9BUlJPVztcbiAgICAgIC8vIGNvbnN0IGlzVHlwaW5nID0gKGtleUNvZGUgPj0gQSAmJiBrZXlDb2RlIDw9IFopIHx8IChrZXlDb2RlID49IFpFUk8gJiYga2V5Q29kZSA8PSBOSU5FKTtcbiAgICAgIGlmIChpc0Fycm93S2V5KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIHByZXZlbnRzIHRoZSBwYWdlIGZyb20gc2Nyb2xsaW5nXG4gICAgICAgIC8vIHNlbGVjdCB0aGUgbmV4dCBvcHRpb24gb24gYXJyb3cga2V5IGRvd25cbiAgICAgICAgaWYgKGtleUNvZGUgPT09IERPV05fQVJST1cgfHwga2V5Q29kZSA9PT0gUklHSFRfQVJST1cpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlU2VydmljZS5zZWxlY3ROZXh0T3B0aW9uKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2VTZXJ2aWNlLnNlbGVjdFByZXZpb3VzT3B0aW9uKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLypcbiAgICAgIGlmIChpc1R5cGluZykge1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlU2VydmljZS5zZWFyY2hPcHRpb25CeUZpcnN0TGV0dGVyKGV2ZW50LmtleSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgICAqL1xuICAgIH1cblxuICAgIC8vIENvbnRyb2xWYWx1ZUFjY2Vzc29yIG1ldGhvZHNcblxuICAgIG9uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gICAgb25Ub3VjaDogKHZhbHVlOiBhbnkpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICAgIHdyaXRlVmFsdWUodmFsdWU6IGFueSl7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSl7XG4gICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICAgfVxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpe1xuICAgICAgdGhpcy5vblRvdWNoID0gZm47XG4gICAgfVxuXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9O1xuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICB0aGlzLmlzRGVzdHJveWVkJC5uZXh0KCk7XG4gICAgICB0aGlzLmlzRGVzdHJveWVkJC5jb21wbGV0ZSgpO1xuICAgIH1cblxufVxuIl19
|