@corto-ai/gds-angular 2.1.5-test.3 → 2.1.5-test.4

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.
@@ -5799,11 +5799,218 @@ const CDK_MENU_CONNECTED_POSITIONS_CONTAINER_LEFT = [
5799
5799
  }
5800
5800
  ];
5801
5801
 
5802
+ const flattenDrilldownOptions = (options) => options.flatMap((option) => [option, ...(option.children?.length ? flattenDrilldownOptions(option.children) : [])]);
5803
+ const resolveDrilldownPath = (options, pathValues, bindValue) => {
5804
+ if (!pathValues.length) {
5805
+ return [];
5806
+ }
5807
+ const path = [];
5808
+ let levelOptions = options;
5809
+ for (const value of pathValues) {
5810
+ const match = levelOptions.find((option) => String(option[bindValue]) === value);
5811
+ if (!match) {
5812
+ return [];
5813
+ }
5814
+ path.push(match);
5815
+ levelOptions = match.children ?? [];
5816
+ }
5817
+ return path;
5818
+ };
5819
+ const findDrilldownOptionPathByRef = (options, target, parents = []) => {
5820
+ for (const option of options) {
5821
+ const path = [...parents, option];
5822
+ if (option === target) {
5823
+ return path;
5824
+ }
5825
+ if (option.children?.length) {
5826
+ const found = findDrilldownOptionPathByRef(option.children, target, path);
5827
+ if (found.length > 0) {
5828
+ return found;
5829
+ }
5830
+ }
5831
+ }
5832
+ return [];
5833
+ };
5834
+ const drilldownOptionMatchesSearch = (option, searchText, bindLabel) => {
5835
+ if (String(option[bindLabel]).toLowerCase().includes(searchText)) {
5836
+ return true;
5837
+ }
5838
+ return !!option.children?.some((child) => drilldownOptionMatchesSearch(child, searchText, bindLabel));
5839
+ };
5840
+ const drilldownPathKey = (path, bindValue) => path.map((item) => String(item[bindValue])).join('/');
5841
+ const displayedDrilldownOptions = (options, navStack, searchText, bindLabel) => {
5842
+ const query = searchText.trim().toLowerCase();
5843
+ const currentOptions = navStack[navStack.length - 1]?.children ?? options;
5844
+ if (!query) {
5845
+ return currentOptions;
5846
+ }
5847
+ return flattenDrilldownOptions(options).filter((option) => String(option[bindLabel]).toLowerCase().includes(query));
5848
+ };
5849
+
5850
+ class GdsDrilldownSelectMobileDialogComponent extends GdsDialogBaseDirective {
5851
+ #data = this.config.data;
5852
+ #options = this.#data.options;
5853
+ bindValue = this.#data.bindValue;
5854
+ bindLabel = this.#data.bindLabel;
5855
+ layout = this.#data.layout;
5856
+ dialogTitle = this.#data.dialogTitle;
5857
+ applyLabel = this.#data.applyLabel;
5858
+ emptyText = this.#data.emptyText;
5859
+ backAriaLabel = this.#data.backAriaLabel;
5860
+ searchable = this.#data.searchable;
5861
+ searchPlaceholder = this.#data.searchPlaceholder;
5862
+ navStack = signal([], /* @ts-ignore */
5863
+ ...(ngDevMode ? [{ debugName: "navStack" }] : /* istanbul ignore next */ []));
5864
+ searchText = signal('', /* @ts-ignore */
5865
+ ...(ngDevMode ? [{ debugName: "searchText" }] : /* istanbul ignore next */ []));
5866
+ #draftPath = signal([], /* @ts-ignore */
5867
+ ...(ngDevMode ? [{ debugName: "#draftPath" }] : /* istanbul ignore next */ []));
5868
+ expandedKeys = signal(new Set(), /* @ts-ignore */
5869
+ ...(ngDevMode ? [{ debugName: "expandedKeys" }] : /* istanbul ignore next */ []));
5870
+ displayedOptions = computed(() => displayedDrilldownOptions(this.#options, this.navStack(), this.searchText(), this.bindLabel), /* @ts-ignore */
5871
+ ...(ngDevMode ? [{ debugName: "displayedOptions" }] : /* istanbul ignore next */ []));
5872
+ mobileDialogTitle = computed(() => {
5873
+ if (this.layout !== 'drilldown' || !this.navStack().length) {
5874
+ return this.#data.dialogTitle;
5875
+ }
5876
+ return [this.#data.dialogTitle, ...this.navStack().map((option) => String(option[this.bindLabel]))].join(' > ');
5877
+ }, /* @ts-ignore */
5878
+ ...(ngDevMode ? [{ debugName: "mobileDialogTitle" }] : /* istanbul ignore next */ []));
5879
+ hasValidDraft = computed(() => {
5880
+ const draft = this.#draftPath();
5881
+ if (!draft.length) {
5882
+ return false;
5883
+ }
5884
+ const path = resolveDrilldownPath(this.#options, draft, this.bindValue);
5885
+ const leaf = path[path.length - 1];
5886
+ return path.length === draft.length && !!leaf && !leaf.children?.length;
5887
+ }, /* @ts-ignore */
5888
+ ...(ngDevMode ? [{ debugName: "hasValidDraft" }] : /* istanbul ignore next */ []));
5889
+ treeRows = computed(() => {
5890
+ const searchText = this.searchText().trim().toLowerCase();
5891
+ const expandedKeys = this.expandedKeys();
5892
+ const rows = [];
5893
+ const walk = (options, path, tier) => {
5894
+ for (const option of options) {
5895
+ if (searchText && !drilldownOptionMatchesSearch(option, searchText, this.bindLabel)) {
5896
+ continue;
5897
+ }
5898
+ const nextPath = [...path, option];
5899
+ const children = option.children;
5900
+ const expanded = !!children?.length &&
5901
+ (searchText
5902
+ ? children.some((child) => drilldownOptionMatchesSearch(child, searchText, this.bindLabel))
5903
+ : expandedKeys.has(this.pathKey(nextPath)));
5904
+ rows.push({ option, path: nextPath, tier, expanded });
5905
+ if (expanded && children?.length) {
5906
+ walk(children, nextPath, tier + 1);
5907
+ }
5908
+ }
5909
+ };
5910
+ walk(this.#options, [], 1);
5911
+ return rows;
5912
+ }, /* @ts-ignore */
5913
+ ...(ngDevMode ? [{ debugName: "treeRows" }] : /* istanbul ignore next */ []));
5914
+ constructor() {
5915
+ super();
5916
+ const selected = resolveDrilldownPath(this.#options, this.#data.value, this.bindValue);
5917
+ this.#draftPath.set([...this.#data.value]);
5918
+ this.navStack.set(selected.slice(0, -1));
5919
+ this.#expandAncestors(selected);
5920
+ }
5921
+ onSearch = (event) => {
5922
+ this.searchText.set(event.target.value);
5923
+ };
5924
+ onItemClick = (option) => {
5925
+ if (option.children?.length) {
5926
+ this.#blurFocus();
5927
+ this.searchText.set('');
5928
+ this.navStack.set(findDrilldownOptionPathByRef(this.#options, option));
5929
+ return;
5930
+ }
5931
+ const path = this.searchText().trim()
5932
+ ? findDrilldownOptionPathByRef(this.#options, option)
5933
+ : [...this.navStack(), option];
5934
+ this.#draftPath.set(path.map((item) => String(item[this.bindValue])));
5935
+ };
5936
+ onTreeItemClick = (row) => {
5937
+ if (row.option.children?.length) {
5938
+ this.toggleExpanded(row.path);
5939
+ return;
5940
+ }
5941
+ this.#draftPath.set(row.path.map((item) => String(item[this.bindValue])));
5942
+ };
5943
+ toggleExpanded = (path) => {
5944
+ const key = this.pathKey(path);
5945
+ this.expandedKeys.update((keys) => {
5946
+ const next = new Set(keys);
5947
+ if (next.has(key)) {
5948
+ next.delete(key);
5949
+ }
5950
+ else {
5951
+ next.add(key);
5952
+ }
5953
+ return next;
5954
+ });
5955
+ };
5956
+ onBack = () => {
5957
+ if (this.layout === 'drilldown' && this.navStack().length) {
5958
+ this.#blurFocus();
5959
+ this.searchText.set('');
5960
+ this.navStack.update((stack) => stack.slice(0, -1));
5961
+ return;
5962
+ }
5963
+ this.hide(undefined);
5964
+ };
5965
+ onApply = () => {
5966
+ this.hide(this.#draftPath());
5967
+ };
5968
+ onDismiss = () => {
5969
+ this.hide(undefined);
5970
+ };
5971
+ isDraftLeaf = (path) => {
5972
+ const draft = this.#draftPath();
5973
+ return path.length === draft.length && path.every((item, index) => String(item[this.bindValue]) === draft[index]);
5974
+ };
5975
+ pathKey = (path) => drilldownPathKey(path, this.bindValue);
5976
+ optionPath = (option) => this.searchText().trim() ? findDrilldownOptionPathByRef(this.#options, option) : [...this.navStack(), option];
5977
+ isOptionSelected = (option) => this.isDraftLeaf(this.optionPath(option));
5978
+ #expandAncestors = (selected) => {
5979
+ const keys = new Set();
5980
+ for (let index = 1; index < selected.length; index++) {
5981
+ keys.add(this.pathKey(selected.slice(0, index)));
5982
+ }
5983
+ this.expandedKeys.set(keys);
5984
+ };
5985
+ #blurFocus = () => {
5986
+ const active = document.activeElement;
5987
+ if (active instanceof HTMLElement) {
5988
+ active.blur();
5989
+ }
5990
+ };
5991
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: GdsDrilldownSelectMobileDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5992
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: GdsDrilldownSelectMobileDialogComponent, isStandalone: true, selector: "gds-drilldown-select-mobile-dialog", usesInheritance: true, ngImport: i0, template: "<dialog\n gds-dialog\n type=\"drawer-bottom\"\n background=\"white\"\n suppressDismissBtn\n class=\"mobile-dialog\"\n (canceled)=\"onDismiss()\"\n>\n <ng-template #layoutTmpl>\n <div\n class=\"\n gds-display-flex\n gds-flex-column\n gds-gap-sm\n gds-min-height-0\n gds-padding-sm\n gds-width-100-parent\n layout\n \"\n >\n <header class=\"\n gds-align-items-center\n gds-display-grid\n mobile-dialog-header\n \">\n <button\n gds-icon-button\n variant=\"invisible\"\n class=\"mobile-dialog-back\"\n (clicked)=\"onBack()\"\n [attr.aria-label]=\"backAriaLabel\"\n >\n <gds-icon\n key=\"line-chevron-left-stroke\"\n class=\"\n gds-icon-primary\n gds-icon-size-2xs\n gds-mobile-icon-size-sm\n \"\n />\n </button>\n <span\n class=\"\n gds-min-width-0\n gds-text-align-center\n gds-text-body-large\n gds-text-primary\n gds-truncate\n mobile-dialog-title\n \"\n >\n {{ mobileDialogTitle() }}\n </span>\n <button\n gds-button\n class=\"\n gds-background-secondary\n gds-radius-pill\n mobile-dialog-apply\n \"\n [disabled]=\"!hasValidDraft()\"\n (clicked)=\"onApply()\"\n >\n {{ applyLabel }}\n </button>\n </header>\n\n @if (searchable) {\n <gds-text-input\n class=\"\n gds-gap-xs\n search\n \"\n (click)=\"$event.stopPropagation()\"\n >\n <gds-icon\n leading-visual\n key=\"line-search\"\n class=\"\n gds-icon-secondary\n gds-icon-size-2xs\n \"\n />\n <input\n type=\"text\"\n class=\"\n gds-background-none\n gds-border-none\n gds-flex-1\n gds-min-width-0\n gds-outline-none\n gds-text-body\n \"\n [placeholder]=\"searchPlaceholder\"\n [value]=\"searchText()\"\n (input)=\"onSearch($event)\"\n />\n </gds-text-input>\n }\n\n <div class=\"\n gds-flex-grow-1\n gds-min-height-0\n gds-scrollable-vertically\n \">\n @if (layout === 'tree') {\n <div class=\"\n gds-display-flex\n gds-flex-column\n gds-gap-3xs\n \">\n @for (row of treeRows(); track pathKey(row.path)) {\n <div\n class=\"\n gds-align-items-center\n gds-display-flex\n gds-gap-xs\n gds-padding-block-2xs\n gds-padding-inline-sm\n gds-position-relative\n gds-radius-sm\n gds-text-body\n gds-text-primary\n item\n \"\n [style.padding-inline-start.px]=\"12 + (row.tier - 1) * 24\"\n [ngClass]=\"{\n active: !row.option.children?.length && isDraftLeaf(row.path)\n }\"\n role=\"button\"\n tabindex=\"-1\"\n (click)=\"onTreeItemClick(row)\"\n (keydown.enter)=\"onTreeItemClick(row)\"\n >\n @if (row.option.children?.length) {\n <gds-icon\n [key]=\"row.expanded ? 'line-chevron-down-stroke' : 'line-chevron-right-stroke'\"\n class=\"\n gds-flex-0\n gds-icon-primary\n gds-icon-size-2xs\n \"\n />\n }\n <span class=\"\n gds-flex-1\n gds-min-width-0\n gds-truncate\n \">{{ row.option[bindLabel] }}</span>\n </div>\n } @empty {\n <div class=\"\n gds-padding-block-2xs\n gds-padding-inline-sm\n gds-text-body\n gds-text-secondary\n \">\n {{ emptyText }}\n </div>\n }\n </div>\n } @else {\n <div class=\"\n gds-display-flex\n gds-flex-column\n gds-gap-3xs\n \">\n @for (option of displayedOptions(); track pathKey(optionPath(option))) {\n @if (option.children?.length) {\n <div\n class=\"\n gds-align-items-center\n gds-display-flex\n gds-gap-xs\n gds-padding-block-2xs\n gds-padding-inline-sm\n gds-position-relative\n gds-radius-sm\n gds-text-body\n gds-text-primary\n item\n parent\n \"\n role=\"button\"\n tabindex=\"-1\"\n (click)=\"onItemClick(option)\"\n (keydown.enter)=\"onItemClick(option)\"\n >\n <span class=\"\n gds-flex-1\n gds-min-width-0\n gds-truncate\n \">{{ option[bindLabel] }}</span>\n <gds-icon\n key=\"line-chevron-right-stroke\"\n class=\"\n gds-flex-0\n gds-icon-primary\n gds-icon-size-2xs\n \"\n />\n </div>\n } @else {\n <div\n class=\"\n gds-align-items-center\n gds-display-flex\n gds-padding-block-2xs\n gds-padding-inline-sm\n gds-position-relative\n gds-radius-sm\n gds-text-body\n gds-text-primary\n item\n \"\n [ngClass]=\"{ active: isOptionSelected(option) }\"\n role=\"button\"\n tabindex=\"-1\"\n (click)=\"onItemClick(option)\"\n (keydown.enter)=\"onItemClick(option)\"\n >\n {{ option[bindLabel] }}\n </div>\n }\n } @empty {\n <div class=\"\n gds-padding-block-2xs\n gds-padding-inline-sm\n gds-text-body\n gds-text-secondary\n \">\n {{ emptyText }}\n </div>\n }\n </div>\n }\n </div>\n </div>\n </ng-template>\n</dialog>\n", styles: ["@layer design-system{:host .search{--gds-form-control-cursor: text;--gds-form-control-hover-color: var(--gds-palette-background-white);box-sizing:border-box}:host .item{cursor:pointer;--wrapper-margin-inline: 0px;--wrapper-margin-block: 2px}:host .item.active:before{content:\"\";position:absolute;border-radius:var(--gds-borderRadius-sm);width:calc(100% - 2 * var(--wrapper-margin-inline, var(--wrapper-margin, 0px)));height:calc(100% - 2 * var(--wrapper-margin-block, var(--wrapper-margin, 0px)));top:var(--wrapper-margin-block, var(--wrapper-margin, 0px));left:var(--wrapper-margin-inline, var(--wrapper-margin, 0px));background:var(--gds-palette-background-hover);pointer-events:none}:host .item:focus-visible{outline:none}:host .mobile-dialog{height:calc(100dvh - 12px);max-height:calc(100dvh - 12px)}:host .mobile-dialog[open]{display:flex;flex-direction:column}:host .layout{flex:1;min-height:0}:host .mobile-dialog-header{grid-template-columns:1fr auto 1fr}:host .mobile-dialog-title{grid-column:2}:host .mobile-dialog-apply{justify-self:end}}\n"], dependencies: [{ kind: "component", type: GdsButtonComponent, selector: "button[gds-button]" }, { kind: "component", type: GdsDialogComponent, selector: "dialog[gds-dialog]", inputs: ["type", "background", "headerLabelAlignment", "showFooterBorder", "closeOnBackdropClick", "suppressDismissBtn"], outputs: ["closed", "canceled"] }, { kind: "component", type: GdsTextInputComponent, selector: "gds-text-input", inputs: ["clearable"], outputs: ["cleared"] }, { kind: "component", type: GdsIconComponent, selector: "gds-icon", inputs: ["key", "width", "height", "color"] }, { kind: "component", type: GdsIconButtonComponent, selector: "button[gds-icon-button]", inputs: ["tooltipLabel"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: GdsNativeInputDirective, selector: "input" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
5993
+ }
5994
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: GdsDrilldownSelectMobileDialogComponent, decorators: [{
5995
+ type: Component,
5996
+ args: [{ selector: 'gds-drilldown-select-mobile-dialog', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
5997
+ GdsButtonComponent,
5998
+ GdsDialogComponent,
5999
+ GdsTextInputComponent,
6000
+ GdsIconComponent,
6001
+ GdsIconButtonComponent,
6002
+ NgClass,
6003
+ GdsNativeInputDirective
6004
+ ], template: "<dialog\n gds-dialog\n type=\"drawer-bottom\"\n background=\"white\"\n suppressDismissBtn\n class=\"mobile-dialog\"\n (canceled)=\"onDismiss()\"\n>\n <ng-template #layoutTmpl>\n <div\n class=\"\n gds-display-flex\n gds-flex-column\n gds-gap-sm\n gds-min-height-0\n gds-padding-sm\n gds-width-100-parent\n layout\n \"\n >\n <header class=\"\n gds-align-items-center\n gds-display-grid\n mobile-dialog-header\n \">\n <button\n gds-icon-button\n variant=\"invisible\"\n class=\"mobile-dialog-back\"\n (clicked)=\"onBack()\"\n [attr.aria-label]=\"backAriaLabel\"\n >\n <gds-icon\n key=\"line-chevron-left-stroke\"\n class=\"\n gds-icon-primary\n gds-icon-size-2xs\n gds-mobile-icon-size-sm\n \"\n />\n </button>\n <span\n class=\"\n gds-min-width-0\n gds-text-align-center\n gds-text-body-large\n gds-text-primary\n gds-truncate\n mobile-dialog-title\n \"\n >\n {{ mobileDialogTitle() }}\n </span>\n <button\n gds-button\n class=\"\n gds-background-secondary\n gds-radius-pill\n mobile-dialog-apply\n \"\n [disabled]=\"!hasValidDraft()\"\n (clicked)=\"onApply()\"\n >\n {{ applyLabel }}\n </button>\n </header>\n\n @if (searchable) {\n <gds-text-input\n class=\"\n gds-gap-xs\n search\n \"\n (click)=\"$event.stopPropagation()\"\n >\n <gds-icon\n leading-visual\n key=\"line-search\"\n class=\"\n gds-icon-secondary\n gds-icon-size-2xs\n \"\n />\n <input\n type=\"text\"\n class=\"\n gds-background-none\n gds-border-none\n gds-flex-1\n gds-min-width-0\n gds-outline-none\n gds-text-body\n \"\n [placeholder]=\"searchPlaceholder\"\n [value]=\"searchText()\"\n (input)=\"onSearch($event)\"\n />\n </gds-text-input>\n }\n\n <div class=\"\n gds-flex-grow-1\n gds-min-height-0\n gds-scrollable-vertically\n \">\n @if (layout === 'tree') {\n <div class=\"\n gds-display-flex\n gds-flex-column\n gds-gap-3xs\n \">\n @for (row of treeRows(); track pathKey(row.path)) {\n <div\n class=\"\n gds-align-items-center\n gds-display-flex\n gds-gap-xs\n gds-padding-block-2xs\n gds-padding-inline-sm\n gds-position-relative\n gds-radius-sm\n gds-text-body\n gds-text-primary\n item\n \"\n [style.padding-inline-start.px]=\"12 + (row.tier - 1) * 24\"\n [ngClass]=\"{\n active: !row.option.children?.length && isDraftLeaf(row.path)\n }\"\n role=\"button\"\n tabindex=\"-1\"\n (click)=\"onTreeItemClick(row)\"\n (keydown.enter)=\"onTreeItemClick(row)\"\n >\n @if (row.option.children?.length) {\n <gds-icon\n [key]=\"row.expanded ? 'line-chevron-down-stroke' : 'line-chevron-right-stroke'\"\n class=\"\n gds-flex-0\n gds-icon-primary\n gds-icon-size-2xs\n \"\n />\n }\n <span class=\"\n gds-flex-1\n gds-min-width-0\n gds-truncate\n \">{{ row.option[bindLabel] }}</span>\n </div>\n } @empty {\n <div class=\"\n gds-padding-block-2xs\n gds-padding-inline-sm\n gds-text-body\n gds-text-secondary\n \">\n {{ emptyText }}\n </div>\n }\n </div>\n } @else {\n <div class=\"\n gds-display-flex\n gds-flex-column\n gds-gap-3xs\n \">\n @for (option of displayedOptions(); track pathKey(optionPath(option))) {\n @if (option.children?.length) {\n <div\n class=\"\n gds-align-items-center\n gds-display-flex\n gds-gap-xs\n gds-padding-block-2xs\n gds-padding-inline-sm\n gds-position-relative\n gds-radius-sm\n gds-text-body\n gds-text-primary\n item\n parent\n \"\n role=\"button\"\n tabindex=\"-1\"\n (click)=\"onItemClick(option)\"\n (keydown.enter)=\"onItemClick(option)\"\n >\n <span class=\"\n gds-flex-1\n gds-min-width-0\n gds-truncate\n \">{{ option[bindLabel] }}</span>\n <gds-icon\n key=\"line-chevron-right-stroke\"\n class=\"\n gds-flex-0\n gds-icon-primary\n gds-icon-size-2xs\n \"\n />\n </div>\n } @else {\n <div\n class=\"\n gds-align-items-center\n gds-display-flex\n gds-padding-block-2xs\n gds-padding-inline-sm\n gds-position-relative\n gds-radius-sm\n gds-text-body\n gds-text-primary\n item\n \"\n [ngClass]=\"{ active: isOptionSelected(option) }\"\n role=\"button\"\n tabindex=\"-1\"\n (click)=\"onItemClick(option)\"\n (keydown.enter)=\"onItemClick(option)\"\n >\n {{ option[bindLabel] }}\n </div>\n }\n } @empty {\n <div class=\"\n gds-padding-block-2xs\n gds-padding-inline-sm\n gds-text-body\n gds-text-secondary\n \">\n {{ emptyText }}\n </div>\n }\n </div>\n }\n </div>\n </div>\n </ng-template>\n</dialog>\n", styles: ["@layer design-system{:host .search{--gds-form-control-cursor: text;--gds-form-control-hover-color: var(--gds-palette-background-white);box-sizing:border-box}:host .item{cursor:pointer;--wrapper-margin-inline: 0px;--wrapper-margin-block: 2px}:host .item.active:before{content:\"\";position:absolute;border-radius:var(--gds-borderRadius-sm);width:calc(100% - 2 * var(--wrapper-margin-inline, var(--wrapper-margin, 0px)));height:calc(100% - 2 * var(--wrapper-margin-block, var(--wrapper-margin, 0px)));top:var(--wrapper-margin-block, var(--wrapper-margin, 0px));left:var(--wrapper-margin-inline, var(--wrapper-margin, 0px));background:var(--gds-palette-background-hover);pointer-events:none}:host .item:focus-visible{outline:none}:host .mobile-dialog{height:calc(100dvh - 12px);max-height:calc(100dvh - 12px)}:host .mobile-dialog[open]{display:flex;flex-direction:column}:host .layout{flex:1;min-height:0}:host .mobile-dialog-header{grid-template-columns:1fr auto 1fr}:host .mobile-dialog-title{grid-column:2}:host .mobile-dialog-apply{justify-self:end}}\n"] }]
6005
+ }], ctorParameters: () => [] });
6006
+
5802
6007
  class GdsDrilldownSelectComponent extends GdsSignalFormControl {
5803
6008
  #injector = inject(Injector);
5804
6009
  #destroyRef = inject(DestroyRef);
5805
6010
  #directive = inject(CdkMenuTrigger);
5806
6011
  #elementRef = inject(ElementRef);
6012
+ #deviceDetectorSvc = inject(DeviceDetectorSignalService);
6013
+ #dialogSvc = inject(GdsDialogService);
5807
6014
  #formField = inject(FormField, { self: true, optional: true });
5808
6015
  options = input.required(/* @ts-ignore */
5809
6016
  ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
@@ -5828,6 +6035,13 @@ class GdsDrilldownSelectComponent extends GdsSignalFormControl {
5828
6035
  ...(ngDevMode ? [{ debugName: "emptyText" }] : /* istanbul ignore next */ []));
5829
6036
  backAriaLabel = input('Go back', /* @ts-ignore */
5830
6037
  ...(ngDevMode ? [{ debugName: "backAriaLabel" }] : /* istanbul ignore next */ []));
6038
+ dialogTitle = input('', /* @ts-ignore */
6039
+ ...(ngDevMode ? [{ debugName: "dialogTitle" }] : /* istanbul ignore next */ []));
6040
+ applyLabel = input('Apply', /* @ts-ignore */
6041
+ ...(ngDevMode ? [{ debugName: "applyLabel" }] : /* istanbul ignore next */ []));
6042
+ /** Mobile picker presentation. Desktop always uses the dropdown drilldown menu. */
6043
+ layout = input('drilldown', /* @ts-ignore */
6044
+ ...(ngDevMode ? [{ debugName: "layout" }] : /* istanbul ignore next */ []));
5831
6045
  value = model([], /* @ts-ignore */
5832
6046
  ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
5833
6047
  dropdownWidth = signal(0, /* @ts-ignore */
@@ -5844,19 +6058,12 @@ class GdsDrilldownSelectComponent extends GdsSignalFormControl {
5844
6058
  #reopenAfterInternalNavigation = false;
5845
6059
  /** Ignore FocusMonitor open after close — cdkMenu refocuses the trigger on escape or hitting enter on a leaf (Escape/select). */
5846
6060
  #suppressOpenOnFocus = false;
6061
+ isMobile = this.#deviceDetectorSvc.isMobile;
5847
6062
  menu = viewChild.required('menu', /* @ts-ignore */
5848
6063
  ...(ngDevMode ? [{ debugName: "menu" }] : /* istanbul ignore next */ []));
5849
6064
  searchInput = viewChild('searchInput', /* @ts-ignore */
5850
6065
  ...(ngDevMode ? [{ debugName: "searchInput" }] : /* istanbul ignore next */ []));
5851
- displayedOptions = computed(() => {
5852
- const searchText = this.searchText().trim().toLowerCase();
5853
- const stack = this.navStack();
5854
- const currentOptions = stack[stack.length - 1]?.children ?? this.options();
5855
- if (!searchText) {
5856
- return currentOptions;
5857
- }
5858
- return this.#flattenOptions(this.options()).filter((option) => String(option[this.bindLabel()]).toLowerCase().includes(searchText));
5859
- }, /* @ts-ignore */
6066
+ displayedOptions = computed(() => displayedDrilldownOptions(this.options(), this.navStack(), this.searchText(), this.bindLabel()), /* @ts-ignore */
5860
6067
  ...(ngDevMode ? [{ debugName: "displayedOptions" }] : /* istanbul ignore next */ []));
5861
6068
  label = computed(() => this.#selectedPath()
5862
6069
  .map((option) => this.optionLabel(option))
@@ -5870,12 +6077,12 @@ class GdsDrilldownSelectComponent extends GdsSignalFormControl {
5870
6077
  const pathValues = this.value();
5871
6078
  this.options();
5872
6079
  this.bindValue();
5873
- untracked(() => this.#selectedPath.set(this.#resolvePath(this.options(), pathValues ?? [])));
6080
+ untracked(() => this.#selectedPath.set(resolveDrilldownPath(this.options(), pathValues ?? [], this.bindValue())));
5874
6081
  }, /* @ts-ignore */
5875
6082
  ...(ngDevMode ? [{ debugName: "#syncSelectedOption" }] : /* istanbul ignore next */ []));
5876
6083
  #setupMenuTemplateRef = effect(() => {
5877
6084
  const menu = this.menu();
5878
- this.#directive.menuTemplateRef = !this.disabled() ? menu : null;
6085
+ this.#directive.menuTemplateRef = !this.disabled() && !this.isMobile() ? menu : null;
5879
6086
  }, /* @ts-ignore */
5880
6087
  ...(ngDevMode ? [{ debugName: "#setupMenuTemplateRef" }] : /* istanbul ignore next */ []));
5881
6088
  #setMenuPosition = effect(() => {
@@ -5932,15 +6139,22 @@ class GdsDrilldownSelectComponent extends GdsSignalFormControl {
5932
6139
  resizeObserver.observe(this.#elementRef.nativeElement);
5933
6140
  this.#destroyRef.onDestroy(() => resizeObserver.disconnect());
5934
6141
  }
6142
+ onHostClick = (event) => {
6143
+ if (!this.isMobile() || this.disabled()) {
6144
+ return;
6145
+ }
6146
+ event?.stopPropagation();
6147
+ this.openMobileDialog();
6148
+ };
5935
6149
  onItemClick = (option) => {
5936
6150
  const path = this.searchText().trim()
5937
- ? this.#findOptionPathByRef(this.options(), option)
6151
+ ? findDrilldownOptionPathByRef(this.options(), option)
5938
6152
  : [...this.navStack(), option];
5939
6153
  this.#setValue(path.map((item) => String(item[this.bindValue()])), true);
5940
6154
  };
5941
6155
  onDrilldownClick = (option) => {
5942
6156
  this.searchText.set('');
5943
- this.navStack.set(this.#findOptionPathByRef(this.options(), option));
6157
+ this.navStack.set(findDrilldownOptionPathByRef(this.options(), option));
5944
6158
  // CDKMenu closes when it loses focus. When navStack > 2 and triggers internal navigation, the menu will not close because the menu doesn't lose focus.
5945
6159
  // Force closing to be consistent so the closed subscription can reopen the menu when internal navigation is triggered. (Same as onBack and onReset and onBreadcrumbClick)
5946
6160
  this.#reopenAfterInternalNavigation = true;
@@ -5985,8 +6199,47 @@ class GdsDrilldownSelectComponent extends GdsSignalFormControl {
5985
6199
  if (this.disabled()) {
5986
6200
  return;
5987
6201
  }
6202
+ if (this.isMobile()) {
6203
+ this.openMobileDialog();
6204
+ return;
6205
+ }
5988
6206
  this.#directive.open();
5989
6207
  };
6208
+ openMobileDialog = () => {
6209
+ if (this.disabled()) {
6210
+ return;
6211
+ }
6212
+ this.#formField?.state().reset();
6213
+ this.isOpen.set(true);
6214
+ this.#dialogSvc
6215
+ .open(GdsDrilldownSelectMobileDialogComponent, {
6216
+ options: this.options(),
6217
+ bindValue: this.bindValue(),
6218
+ bindLabel: this.bindLabel(),
6219
+ layout: this.layout(),
6220
+ value: this.value() ?? [],
6221
+ dialogTitle: this.dialogTitle() || this.placeholder(),
6222
+ applyLabel: this.applyLabel(),
6223
+ emptyText: this.emptyText(),
6224
+ backAriaLabel: this.backAriaLabel(),
6225
+ searchable: this.searchable(),
6226
+ searchPlaceholder: this.searchPlaceholder()
6227
+ })
6228
+ .pipe(take(1), takeUntilDestroyed(this.#destroyRef))
6229
+ .subscribe((path) => this.#onMobileResult(path));
6230
+ };
6231
+ #onMobileResult = (path) => {
6232
+ if (path !== undefined) {
6233
+ this.#setValue(path, false);
6234
+ }
6235
+ this.isOpen.set(false);
6236
+ this.#formField?.state().markAsTouched();
6237
+ this.#suppressOpenOnFocus = true;
6238
+ this.#elementRef.nativeElement.focus();
6239
+ setTimeout(() => {
6240
+ this.#suppressOpenOnFocus = false;
6241
+ });
6242
+ };
5990
6243
  optionLabel = (option) => String(option[this.bindLabel()]);
5991
6244
  onArrowRight = (option) => {
5992
6245
  if (option.children?.length) {
@@ -6011,23 +6264,6 @@ class GdsDrilldownSelectComponent extends GdsSignalFormControl {
6011
6264
  }, { injector: this.#injector });
6012
6265
  }
6013
6266
  };
6014
- #resolvePath = (options, pathValues) => {
6015
- if (!pathValues.length) {
6016
- return [];
6017
- }
6018
- const path = [];
6019
- let levelOptions = options;
6020
- for (const value of pathValues) {
6021
- const match = levelOptions.find((option) => String(option[this.bindValue()]) === value);
6022
- if (!match) {
6023
- return [];
6024
- }
6025
- path.push(match);
6026
- levelOptions = match.children ?? [];
6027
- }
6028
- return path;
6029
- };
6030
- #flattenOptions = (options) => options.flatMap((option) => [option, ...(option.children?.length ? this.#flattenOptions(option.children) : [])]);
6031
6267
  /** Open at the parent of the selected leaf so the leaf is visible in the current list. */
6032
6268
  #syncNavStackToSelection = () => {
6033
6269
  this.navStack.set(this.#selectedPath().slice(0, -1));
@@ -6065,23 +6301,8 @@ class GdsDrilldownSelectComponent extends GdsSignalFormControl {
6065
6301
  // Prefer trigger over first item so ArrowDown (CdkMenuTrigger) is what enters the list.
6066
6302
  this.#elementRef.nativeElement.focus({ preventScroll: true });
6067
6303
  };
6068
- #findOptionPathByRef = (options, target, parents = []) => {
6069
- for (const option of options) {
6070
- const path = [...parents, option];
6071
- if (option === target) {
6072
- return path;
6073
- }
6074
- if (option.children?.length) {
6075
- const found = this.#findOptionPathByRef(option.children, target, path);
6076
- if (found.length > 0) {
6077
- return found;
6078
- }
6079
- }
6080
- }
6081
- return [];
6082
- };
6083
6304
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: GdsDrilldownSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6084
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: GdsDrilldownSelectComponent, isStandalone: true, selector: "gds-drilldown-select", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null }, bindValue: { classPropertyName: "bindValue", publicName: "bindValue", isSignal: true, isRequired: true, transformFunction: null }, bindLabel: { classPropertyName: "bindLabel", publicName: "bindLabel", isSignal: true, isRequired: true, transformFunction: null }, clearable: { classPropertyName: "clearable", publicName: "clearable", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, searchAutoFocus: { classPropertyName: "searchAutoFocus", publicName: "searchAutoFocus", isSignal: true, isRequired: false, transformFunction: null }, maxMenuHeight: { classPropertyName: "maxMenuHeight", publicName: "maxMenuHeight", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, mobileCancelLabel: { classPropertyName: "mobileCancelLabel", publicName: "mobileCancelLabel", isSignal: true, isRequired: false, transformFunction: null }, resetLabel: { classPropertyName: "resetLabel", publicName: "resetLabel", isSignal: true, isRequired: false, transformFunction: null }, emptyText: { classPropertyName: "emptyText", publicName: "emptyText", isSignal: true, isRequired: false, transformFunction: null }, backAriaLabel: { classPropertyName: "backAriaLabel", publicName: "backAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { attributes: { "role": "button" }, listeners: { "keydown.escape": "onEscape()", "keydown.arrowleft": "onArrowLeft()" }, properties: { "attr.tabindex": "disabled() ? -1 : 0", "class.is-controlled": "isOpen()" }, classAttribute: "\n gds-align-items-center\n gds-display-flex\n gds-gap-2xs\n gds-justify-content-between\n gds-mobile-padding-block-0\n gds-mobile-text-input-mobile\n gds-padding-block-3xs\n gds-padding-inline-xs\n gds-radius-sm\n gds-text-input\n gds-outline-none\n " }, viewQueries: [{ propertyName: "menu", first: true, predicate: ["menu"], descendants: true, isSignal: true }, { propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true, isSignal: true }], usesInheritance: true, hostDirectives: [{ directive: i1$1.CdkMenuTrigger }], ngImport: i0, template: "<div\n class=\"\n gds-flex-1\n gds-min-width-0\n gds-truncate\n label\n \"\n [ngClass]=\"{ placeholder: !label(), 'gds-user-select-none': !label() }\"\n>\n {{ label() ? label() : placeholder() }}\n</div>\n\n<gds-icon\n class=\"\n gds-icon-primary\n gds-icon-size-2xs\n \"\n key=\"line-chevron-down-stroke\"\n/>\n\n<ng-template #menu>\n <gds-dropdown\n [mobileCancelLabel]=\"mobileCancelLabel()\"\n cdkTargetMenuAim\n preventMobileStyling\n allowDefaultTabBehavior\n [style.minWidth]=\"dropdownWidth() + 'px'\"\n >\n <div\n class=\"\n gds-display-flex\n gds-flex-column\n gds-padding-block-end-2xs\n gds-padding-block-start-3xs\n gds-padding-inline-2xs\n \"\n >\n @if (hasNavHeader()) {\n <div class=\"\n gds-align-items-center\n gds-display-flex\n gds-gap-2xs\n gds-padding-block-end-2xs\n \">\n @if (navStack().length) {\n <button\n gds-icon-button\n variant=\"invisible\"\n class=\"\n gds-min-height-0\n gds-padding-0\n \"\n (pointerdown)=\"$event.stopPropagation()\"\n (clicked)=\"onBack()\"\n [attr.aria-label]=\"backAriaLabel()\"\n >\n <gds-icon\n key=\"line-arrow-left\"\n class=\"\n gds-icon-primary\n gds-icon-size-2xs\n \"\n />\n </button>\n }\n\n @if (clearable() && label()) {\n <button\n gds-button\n variant=\"invisible\"\n size=\"small\"\n class=\"\n gds-min-height-0\n gds-padding-0\n reset-button\n \"\n (pointerdown)=\"$event.stopPropagation()\"\n (clicked)=\"onReset()\"\n >\n {{ resetLabel() }}\n </button>\n }\n\n @for (crumb of navStack(); track $index) {\n @if ((clearable() && label()) || $index > 0) {\n <gds-icon\n key=\"line-chevron-right-stroke\"\n class=\"\n gds-flex-0\n gds-icon-primary\n gds-icon-size-3xs\n \"\n />\n }\n <button\n gds-button\n variant=\"invisible\"\n size=\"small\"\n class=\"\n breadcrumb\n gds-min-height-0\n gds-padding-0\n \"\n (pointerdown)=\"$event.stopPropagation()\"\n (clicked)=\"onBreadcrumbClick($index)\"\n >\n {{ optionLabel(crumb) }}\n </button>\n }\n </div>\n }\n\n @if (searchable()) {\n <gds-text-input\n class=\"\n gds-gap-xs\n gds-margin-block-end-2xs\n search\n \"\n (pointerdown)=\"$event.stopPropagation()\"\n (click)=\"$event.stopPropagation()\"\n >\n <gds-icon\n leading-visual\n key=\"line-search\"\n class=\"\n gds-icon-secondary\n gds-icon-size-2xs\n \"\n />\n <input\n #searchInput\n type=\"text\"\n class=\"\n gds-background-none\n gds-border-none\n gds-flex-1\n gds-min-width-0\n gds-outline-none\n gds-text-body\n \"\n [placeholder]=\"searchPlaceholder()\"\n [value]=\"searchText()\"\n (input)=\"onSearch($event)\"\n (keydown)=\"onSearchKeydown($event)\"\n />\n </gds-text-input>\n }\n\n <div\n [style.maxHeight]=\"maxMenuHeight()\"\n class=\"gds-scrollable-vertically\"\n >\n <div class=\"\n gds-display-flex\n gds-flex-column\n gds-gap-3xs\n \">\n @for (option of displayedOptions(); track option[bindValue()]) {\n @if (option.children?.length) {\n <div\n class=\"\n gds-align-items-center\n gds-display-flex\n gds-gap-xs\n gds-padding-block-2xs\n gds-padding-inline-sm\n gds-position-relative\n gds-radius-sm\n gds-text-body\n gds-text-primary\n item\n \"\n [ngClass]=\"{ active: activeItems().includes(option[bindValue()]) }\"\n cdkMenuItem\n (pointerdown)=\"$event.stopPropagation()\"\n (cdkMenuItemTriggered)=\"onDrilldownClick(option)\"\n (keydown.escape)=\"onEscape()\"\n (keydown.arrowright)=\"onArrowRight(option)\"\n (keydown.arrowleft)=\"onArrowLeft()\"\n tabindex=\"-1\"\n >\n <span class=\"\n gds-flex-1\n gds-min-width-0\n gds-truncate\n \">{{ option[bindLabel()] }}</span>\n <gds-icon\n key=\"line-chevron-right-stroke\"\n class=\"\n gds-flex-0\n gds-icon-primary\n gds-icon-size-2xs\n \"\n />\n </div>\n } @else {\n <div\n class=\"\n gds-align-items-center\n gds-display-flex\n gds-padding-block-2xs\n gds-padding-inline-sm\n gds-position-relative\n gds-radius-sm\n gds-text-body\n gds-text-primary\n item\n \"\n tabindex=\"-1\"\n [ngClass]=\"{ active: activeItems().includes(option[bindValue()]) }\"\n cdkMenuItem\n (cdkMenuItemTriggered)=\"onItemClick(option)\"\n (keydown.escape)=\"onEscape()\"\n (keydown.arrowleft)=\"onArrowLeft()\"\n (keydown.arrowright)=\"onArrowRight(option)\"\n >\n {{ option[bindLabel()] }}\n </div>\n }\n } @empty {\n <div class=\"\n gds-padding-block-2xs\n gds-padding-inline-sm\n gds-text-body\n gds-text-secondary\n \">\n {{ emptyText() }}\n </div>\n }\n </div>\n </div>\n </div>\n </gds-dropdown>\n</ng-template>\n", styles: ["@layer design-system{:host{--gds-form-control-cursor: pointer;--background-color: var(--gds-form-control-background-color, var(--gds-palette-background-white));--border-color: var(--gds-form-control-border-color, var(--gds-palette-border-default));--text-color: var(--gds-form-control-text-color, var(--gds-palette-text-default-primary));--active-color: var(--gds-form-control-active-color, var(--gds-palette-border-selected));--cursor: var(--gds-form-control-cursor, auto);--hover-color: var(--gds-form-control-hover-color, var(--gds-palette-background-secondary));--placeholder-color: var(--gds-form-control-placeholder-color, var(--gds-palette-text-default-placeholder));--invalid-color: var(--gds-form-control-invalid-color, var(--gds-palette-helper-error-inverse));--disabled-text-color: var(--gds-form-control-disabled-text-color, var(--gds-palette-text-default-disabled));--disabled-background-color: var( --gds-form-control-disabled-background-color, var(--gds-palette-background-disabled) );--disabled-border-color: var(--gds-form-control-disabled-border-color, var(--gds-palette-border-default))}:host[disabled],:host:has(*:disabled,*[disabled=true]){--background-color: var(--disabled-background-color);--text-color: var(--disabled-text-color);--hover-color: var(--disabled-background-color);--border-color: var(--disabled-border-color);--cursor: not-allowed}:host[invalid][touched]:not(:focus-within,.is-controlled),:host:has(input[invalid][touched],textarea[invalid][touched]):not(:focus-within,.is-controlled){--border-color: var(--invalid-color);--text-color: var(--invalid-color);--placeholder-color: var(--invalid-color);--active-color: var(--invalid-color)}:host{background-color:var(--background-color);border:.5px solid var(--border-color);color:var(--text-color);cursor:var(--cursor)!important}:host ::ng-deep input:focus,:host ::ng-deep textarea:focus{outline:none}:host:focus-within,:host.is-controlled{isolation:isolate;position:relative}:host:focus-within:before,:host.is-controlled:before{z-index:-1;content:\"\";position:absolute;inset:0;border-bottom:var(--gds-borderWidth-lg) solid var(--active-color);border-radius:var(--gds-borderRadius-xs)}:host{min-height:var(--gds-size-md-rem)}:is(body[isMobile=true]) :host{min-height:var(--gds-size-lg-rem)}:host:hover{background-color:var(--hover-color)}:host[disabled]::ng-deep svg-icon,:host:has(*:disabled,*[disabled=true])::ng-deep svg-icon{color:var(--disabled-text-color)}:host[invalid][touched]:not(:focus-within,.is-controlled)::ng-deep svg-icon,:host:has(input[invalid][touched],textarea[invalid][touched]):not(:focus-within,.is-controlled)::ng-deep svg-icon{color:var(--invalid-color)}:host ::ng-deep *::placeholder{color:var(--placeholder-color)}:host .label{color:var(--text-color)}:host .placeholder{color:var(--placeholder-color)}.reset-button,.breadcrumb{--gds-button-color: var(--gds-palette-text-default-secondary);--gds-button-color-hover: var(--gds-palette-text-default-secondary)}.search{--gds-form-control-cursor: text;--gds-form-control-hover-color: var(--gds-palette-background-white);box-sizing:border-box}.item{cursor:pointer;--wrapper-margin-inline: 0px;--wrapper-margin-block: 2px}.item:hover:before,.item.active:before,.item:focus-visible:before{content:\"\";position:absolute;border-radius:var(--gds-borderRadius-sm);width:calc(100% - 2 * var(--wrapper-margin-inline, var(--wrapper-margin, 0px)));height:calc(100% - 2 * var(--wrapper-margin-block, var(--wrapper-margin, 0px)));top:var(--wrapper-margin-block, var(--wrapper-margin, 0px));left:var(--wrapper-margin-inline, var(--wrapper-margin, 0px));background:var(--gds-palette-background-hover);pointer-events:none}.item:focus-visible{outline:none}}\n"], dependencies: [{ kind: "component", type: GdsButtonComponent, selector: "button[gds-button]" }, { kind: "component", type: GdsDropdownComponent, selector: "gds-dropdown", inputs: ["triggerElement", "horizontal", "preventMobileStyling", "allowDefaultTabBehavior", "mobileCancelLabel"] }, { kind: "component", type: GdsTextInputComponent, selector: "gds-text-input", inputs: ["clearable"], outputs: ["cleared"] }, { kind: "directive", type: GdsNativeInputDirective, selector: "input" }, { kind: "directive", type: CdkMenuItem, selector: "[cdkMenuItem]", inputs: ["cdkMenuItemDisabled", "cdkMenuitemTypeaheadLabel"], outputs: ["cdkMenuItemTriggered"], exportAs: ["cdkMenuItem"] }, { kind: "directive", type: CdkTargetMenuAim, selector: "[cdkTargetMenuAim]", exportAs: ["cdkTargetMenuAim"] }, { kind: "component", type: GdsIconComponent, selector: "gds-icon", inputs: ["key", "width", "height", "color"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: GdsIconButtonComponent, selector: "button[gds-icon-button]", inputs: ["tooltipLabel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6305
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: GdsDrilldownSelectComponent, isStandalone: true, selector: "gds-drilldown-select", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null }, bindValue: { classPropertyName: "bindValue", publicName: "bindValue", isSignal: true, isRequired: true, transformFunction: null }, bindLabel: { classPropertyName: "bindLabel", publicName: "bindLabel", isSignal: true, isRequired: true, transformFunction: null }, clearable: { classPropertyName: "clearable", publicName: "clearable", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, searchAutoFocus: { classPropertyName: "searchAutoFocus", publicName: "searchAutoFocus", isSignal: true, isRequired: false, transformFunction: null }, maxMenuHeight: { classPropertyName: "maxMenuHeight", publicName: "maxMenuHeight", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, mobileCancelLabel: { classPropertyName: "mobileCancelLabel", publicName: "mobileCancelLabel", isSignal: true, isRequired: false, transformFunction: null }, resetLabel: { classPropertyName: "resetLabel", publicName: "resetLabel", isSignal: true, isRequired: false, transformFunction: null }, emptyText: { classPropertyName: "emptyText", publicName: "emptyText", isSignal: true, isRequired: false, transformFunction: null }, backAriaLabel: { classPropertyName: "backAriaLabel", publicName: "backAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, dialogTitle: { classPropertyName: "dialogTitle", publicName: "dialogTitle", isSignal: true, isRequired: false, transformFunction: null }, applyLabel: { classPropertyName: "applyLabel", publicName: "applyLabel", isSignal: true, isRequired: false, transformFunction: null }, layout: { classPropertyName: "layout", publicName: "layout", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { attributes: { "role": "button" }, listeners: { "click": "onHostClick($event)", "keydown.escape": "onEscape()", "keydown.arrowleft": "onArrowLeft()" }, properties: { "attr.tabindex": "disabled() ? -1 : 0", "class.is-controlled": "isOpen()" }, classAttribute: "\n gds-align-items-center\n gds-display-flex\n gds-gap-2xs\n gds-justify-content-between\n gds-mobile-padding-block-0\n gds-mobile-text-input-mobile\n gds-padding-block-3xs\n gds-padding-inline-xs\n gds-radius-sm\n gds-text-input\n gds-outline-none\n " }, viewQueries: [{ propertyName: "menu", first: true, predicate: ["menu"], descendants: true, isSignal: true }, { propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true, isSignal: true }], usesInheritance: true, hostDirectives: [{ directive: i1$1.CdkMenuTrigger }], ngImport: i0, template: "<div\n class=\"\n gds-flex-1\n gds-min-width-0\n gds-truncate\n label\n \"\n [ngClass]=\"{ placeholder: !label(), 'gds-user-select-none': !label() }\"\n>\n {{ label() ? label() : placeholder() }}\n</div>\n\n<gds-icon\n class=\"\n gds-icon-primary\n gds-icon-size-2xs\n \"\n key=\"line-chevron-down-stroke\"\n/>\n\n<ng-template #menu>\n <gds-dropdown\n [mobileCancelLabel]=\"mobileCancelLabel()\"\n cdkTargetMenuAim\n preventMobileStyling\n allowDefaultTabBehavior\n [style.minWidth]=\"dropdownWidth() + 'px'\"\n >\n <div\n class=\"\n gds-display-flex\n gds-flex-column\n gds-padding-block-end-2xs\n gds-padding-block-start-3xs\n gds-padding-inline-2xs\n \"\n >\n @if (hasNavHeader()) {\n <div class=\"\n gds-align-items-center\n gds-display-flex\n gds-gap-2xs\n gds-padding-block-end-2xs\n \">\n @if (navStack().length) {\n <button\n gds-icon-button\n variant=\"invisible\"\n class=\"\n gds-min-height-0\n gds-padding-0\n \"\n (pointerdown)=\"$event.stopPropagation()\"\n (clicked)=\"onBack()\"\n [attr.aria-label]=\"backAriaLabel()\"\n >\n <gds-icon\n key=\"line-arrow-left\"\n class=\"\n gds-icon-primary\n gds-icon-size-2xs\n \"\n />\n </button>\n }\n\n @if (clearable() && label()) {\n <button\n gds-button\n variant=\"invisible\"\n size=\"small\"\n class=\"\n gds-min-height-0\n gds-padding-0\n reset-button\n \"\n (pointerdown)=\"$event.stopPropagation()\"\n (clicked)=\"onReset()\"\n >\n {{ resetLabel() }}\n </button>\n }\n\n @for (crumb of navStack(); track $index) {\n @if ((clearable() && label()) || $index > 0) {\n <gds-icon\n key=\"line-chevron-right-stroke\"\n class=\"\n gds-flex-0\n gds-icon-primary\n gds-icon-size-3xs\n \"\n />\n }\n <button\n gds-button\n variant=\"invisible\"\n size=\"small\"\n class=\"\n breadcrumb\n gds-min-height-0\n gds-padding-0\n \"\n (pointerdown)=\"$event.stopPropagation()\"\n (clicked)=\"onBreadcrumbClick($index)\"\n >\n {{ optionLabel(crumb) }}\n </button>\n }\n </div>\n }\n\n @if (searchable()) {\n <gds-text-input\n class=\"\n gds-gap-xs\n gds-margin-block-end-2xs\n search\n \"\n (pointerdown)=\"$event.stopPropagation()\"\n (click)=\"$event.stopPropagation()\"\n >\n <gds-icon\n leading-visual\n key=\"line-search\"\n class=\"\n gds-icon-secondary\n gds-icon-size-2xs\n \"\n />\n <input\n #searchInput\n type=\"text\"\n class=\"\n gds-background-none\n gds-border-none\n gds-flex-1\n gds-min-width-0\n gds-outline-none\n gds-text-body\n \"\n [placeholder]=\"searchPlaceholder()\"\n [value]=\"searchText()\"\n (input)=\"onSearch($event)\"\n (keydown)=\"onSearchKeydown($event)\"\n />\n </gds-text-input>\n }\n\n <div\n [style.maxHeight]=\"maxMenuHeight()\"\n class=\"gds-scrollable-vertically\"\n >\n <div class=\"\n gds-display-flex\n gds-flex-column\n gds-gap-3xs\n \">\n @for (option of displayedOptions(); track option[bindValue()]) {\n @if (option.children?.length) {\n <div\n class=\"\n gds-align-items-center\n gds-display-flex\n gds-gap-xs\n gds-padding-block-2xs\n gds-padding-inline-sm\n gds-position-relative\n gds-radius-sm\n gds-text-body\n gds-text-primary\n item\n \"\n [ngClass]=\"{ active: activeItems().includes(option[bindValue()]) }\"\n cdkMenuItem\n (pointerdown)=\"$event.stopPropagation()\"\n (cdkMenuItemTriggered)=\"onDrilldownClick(option)\"\n (keydown.escape)=\"onEscape()\"\n (keydown.arrowright)=\"onArrowRight(option)\"\n (keydown.arrowleft)=\"onArrowLeft()\"\n tabindex=\"-1\"\n >\n <span class=\"\n gds-flex-1\n gds-min-width-0\n gds-truncate\n \">{{ option[bindLabel()] }}</span>\n <gds-icon\n key=\"line-chevron-right-stroke\"\n class=\"\n gds-flex-0\n gds-icon-primary\n gds-icon-size-2xs\n \"\n />\n </div>\n } @else {\n <div\n class=\"\n gds-align-items-center\n gds-display-flex\n gds-padding-block-2xs\n gds-padding-inline-sm\n gds-position-relative\n gds-radius-sm\n gds-text-body\n gds-text-primary\n item\n \"\n tabindex=\"-1\"\n [ngClass]=\"{ active: activeItems().includes(option[bindValue()]) }\"\n cdkMenuItem\n (cdkMenuItemTriggered)=\"onItemClick(option)\"\n (keydown.escape)=\"onEscape()\"\n (keydown.arrowleft)=\"onArrowLeft()\"\n (keydown.arrowright)=\"onArrowRight(option)\"\n >\n {{ option[bindLabel()] }}\n </div>\n }\n } @empty {\n <div class=\"\n gds-padding-block-2xs\n gds-padding-inline-sm\n gds-text-body\n gds-text-secondary\n \">\n {{ emptyText() }}\n </div>\n }\n </div>\n </div>\n </div>\n </gds-dropdown>\n</ng-template>\n", styles: ["@layer design-system{:host{--gds-form-control-cursor: pointer;--background-color: var(--gds-form-control-background-color, var(--gds-palette-background-white));--border-color: var(--gds-form-control-border-color, var(--gds-palette-border-default));--text-color: var(--gds-form-control-text-color, var(--gds-palette-text-default-primary));--active-color: var(--gds-form-control-active-color, var(--gds-palette-border-selected));--cursor: var(--gds-form-control-cursor, auto);--hover-color: var(--gds-form-control-hover-color, var(--gds-palette-background-secondary));--placeholder-color: var(--gds-form-control-placeholder-color, var(--gds-palette-text-default-placeholder));--invalid-color: var(--gds-form-control-invalid-color, var(--gds-palette-helper-error-inverse));--disabled-text-color: var(--gds-form-control-disabled-text-color, var(--gds-palette-text-default-disabled));--disabled-background-color: var( --gds-form-control-disabled-background-color, var(--gds-palette-background-disabled) );--disabled-border-color: var(--gds-form-control-disabled-border-color, var(--gds-palette-border-default))}:host[disabled],:host:has(*:disabled,*[disabled=true]){--background-color: var(--disabled-background-color);--text-color: var(--disabled-text-color);--hover-color: var(--disabled-background-color);--border-color: var(--disabled-border-color);--cursor: not-allowed}:host[invalid][touched]:not(:focus-within,.is-controlled),:host:has(input[invalid][touched],textarea[invalid][touched]):not(:focus-within,.is-controlled){--border-color: var(--invalid-color);--text-color: var(--invalid-color);--placeholder-color: var(--invalid-color);--active-color: var(--invalid-color)}:host{background-color:var(--background-color);border:.5px solid var(--border-color);color:var(--text-color);cursor:var(--cursor)!important}:host ::ng-deep input:focus,:host ::ng-deep textarea:focus{outline:none}:host:focus-within,:host.is-controlled{isolation:isolate;position:relative}:host:focus-within:before,:host.is-controlled:before{z-index:-1;content:\"\";position:absolute;inset:0;border-bottom:var(--gds-borderWidth-lg) solid var(--active-color);border-radius:var(--gds-borderRadius-xs)}:host{min-height:var(--gds-size-md-rem)}:is(body[isMobile=true]) :host{min-height:var(--gds-size-lg-rem)}:host:hover{background-color:var(--hover-color)}:host[disabled]::ng-deep svg-icon,:host:has(*:disabled,*[disabled=true])::ng-deep svg-icon{color:var(--disabled-text-color)}:host[invalid][touched]:not(:focus-within,.is-controlled)::ng-deep svg-icon,:host:has(input[invalid][touched],textarea[invalid][touched]):not(:focus-within,.is-controlled)::ng-deep svg-icon{color:var(--invalid-color)}:host ::ng-deep *::placeholder{color:var(--placeholder-color)}:host .label{color:var(--text-color)}:host .placeholder{color:var(--placeholder-color)}.reset-button,.breadcrumb{--gds-button-color: var(--gds-palette-text-default-secondary);--gds-button-color-hover: var(--gds-palette-text-default-secondary)}.search{--gds-form-control-cursor: text;--gds-form-control-hover-color: var(--gds-palette-background-white);box-sizing:border-box}.item{cursor:pointer;--wrapper-margin-inline: 0px;--wrapper-margin-block: 2px}.item:hover:before,.item.active:before,.item:focus-visible:before{content:\"\";position:absolute;border-radius:var(--gds-borderRadius-sm);width:calc(100% - 2 * var(--wrapper-margin-inline, var(--wrapper-margin, 0px)));height:calc(100% - 2 * var(--wrapper-margin-block, var(--wrapper-margin, 0px)));top:var(--wrapper-margin-block, var(--wrapper-margin, 0px));left:var(--wrapper-margin-inline, var(--wrapper-margin, 0px));background:var(--gds-palette-background-hover);pointer-events:none}.item:focus-visible{outline:none}}\n"], dependencies: [{ kind: "component", type: GdsButtonComponent, selector: "button[gds-button]" }, { kind: "component", type: GdsDropdownComponent, selector: "gds-dropdown", inputs: ["triggerElement", "horizontal", "preventMobileStyling", "allowDefaultTabBehavior", "mobileCancelLabel"] }, { kind: "component", type: GdsTextInputComponent, selector: "gds-text-input", inputs: ["clearable"], outputs: ["cleared"] }, { kind: "directive", type: GdsNativeInputDirective, selector: "input" }, { kind: "directive", type: CdkMenuItem, selector: "[cdkMenuItem]", inputs: ["cdkMenuItemDisabled", "cdkMenuitemTypeaheadLabel"], outputs: ["cdkMenuItemTriggered"], exportAs: ["cdkMenuItem"] }, { kind: "directive", type: CdkTargetMenuAim, selector: "[cdkTargetMenuAim]", exportAs: ["cdkTargetMenuAim"] }, { kind: "component", type: GdsIconComponent, selector: "gds-icon", inputs: ["key", "width", "height", "color"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: GdsIconButtonComponent, selector: "button[gds-icon-button]", inputs: ["tooltipLabel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6085
6306
  }
6086
6307
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: GdsDrilldownSelectComponent, decorators: [{
6087
6308
  type: Component,
@@ -6113,10 +6334,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
6113
6334
  gds-outline-none
6114
6335
  `,
6115
6336
  '[class.is-controlled]': 'isOpen()',
6337
+ '(click)': 'onHostClick($event)',
6116
6338
  '(keydown.escape)': 'onEscape()',
6117
6339
  '(keydown.arrowleft)': 'onArrowLeft()'
6118
6340
  }, hostDirectives: [CdkMenuTrigger], template: "<div\n class=\"\n gds-flex-1\n gds-min-width-0\n gds-truncate\n label\n \"\n [ngClass]=\"{ placeholder: !label(), 'gds-user-select-none': !label() }\"\n>\n {{ label() ? label() : placeholder() }}\n</div>\n\n<gds-icon\n class=\"\n gds-icon-primary\n gds-icon-size-2xs\n \"\n key=\"line-chevron-down-stroke\"\n/>\n\n<ng-template #menu>\n <gds-dropdown\n [mobileCancelLabel]=\"mobileCancelLabel()\"\n cdkTargetMenuAim\n preventMobileStyling\n allowDefaultTabBehavior\n [style.minWidth]=\"dropdownWidth() + 'px'\"\n >\n <div\n class=\"\n gds-display-flex\n gds-flex-column\n gds-padding-block-end-2xs\n gds-padding-block-start-3xs\n gds-padding-inline-2xs\n \"\n >\n @if (hasNavHeader()) {\n <div class=\"\n gds-align-items-center\n gds-display-flex\n gds-gap-2xs\n gds-padding-block-end-2xs\n \">\n @if (navStack().length) {\n <button\n gds-icon-button\n variant=\"invisible\"\n class=\"\n gds-min-height-0\n gds-padding-0\n \"\n (pointerdown)=\"$event.stopPropagation()\"\n (clicked)=\"onBack()\"\n [attr.aria-label]=\"backAriaLabel()\"\n >\n <gds-icon\n key=\"line-arrow-left\"\n class=\"\n gds-icon-primary\n gds-icon-size-2xs\n \"\n />\n </button>\n }\n\n @if (clearable() && label()) {\n <button\n gds-button\n variant=\"invisible\"\n size=\"small\"\n class=\"\n gds-min-height-0\n gds-padding-0\n reset-button\n \"\n (pointerdown)=\"$event.stopPropagation()\"\n (clicked)=\"onReset()\"\n >\n {{ resetLabel() }}\n </button>\n }\n\n @for (crumb of navStack(); track $index) {\n @if ((clearable() && label()) || $index > 0) {\n <gds-icon\n key=\"line-chevron-right-stroke\"\n class=\"\n gds-flex-0\n gds-icon-primary\n gds-icon-size-3xs\n \"\n />\n }\n <button\n gds-button\n variant=\"invisible\"\n size=\"small\"\n class=\"\n breadcrumb\n gds-min-height-0\n gds-padding-0\n \"\n (pointerdown)=\"$event.stopPropagation()\"\n (clicked)=\"onBreadcrumbClick($index)\"\n >\n {{ optionLabel(crumb) }}\n </button>\n }\n </div>\n }\n\n @if (searchable()) {\n <gds-text-input\n class=\"\n gds-gap-xs\n gds-margin-block-end-2xs\n search\n \"\n (pointerdown)=\"$event.stopPropagation()\"\n (click)=\"$event.stopPropagation()\"\n >\n <gds-icon\n leading-visual\n key=\"line-search\"\n class=\"\n gds-icon-secondary\n gds-icon-size-2xs\n \"\n />\n <input\n #searchInput\n type=\"text\"\n class=\"\n gds-background-none\n gds-border-none\n gds-flex-1\n gds-min-width-0\n gds-outline-none\n gds-text-body\n \"\n [placeholder]=\"searchPlaceholder()\"\n [value]=\"searchText()\"\n (input)=\"onSearch($event)\"\n (keydown)=\"onSearchKeydown($event)\"\n />\n </gds-text-input>\n }\n\n <div\n [style.maxHeight]=\"maxMenuHeight()\"\n class=\"gds-scrollable-vertically\"\n >\n <div class=\"\n gds-display-flex\n gds-flex-column\n gds-gap-3xs\n \">\n @for (option of displayedOptions(); track option[bindValue()]) {\n @if (option.children?.length) {\n <div\n class=\"\n gds-align-items-center\n gds-display-flex\n gds-gap-xs\n gds-padding-block-2xs\n gds-padding-inline-sm\n gds-position-relative\n gds-radius-sm\n gds-text-body\n gds-text-primary\n item\n \"\n [ngClass]=\"{ active: activeItems().includes(option[bindValue()]) }\"\n cdkMenuItem\n (pointerdown)=\"$event.stopPropagation()\"\n (cdkMenuItemTriggered)=\"onDrilldownClick(option)\"\n (keydown.escape)=\"onEscape()\"\n (keydown.arrowright)=\"onArrowRight(option)\"\n (keydown.arrowleft)=\"onArrowLeft()\"\n tabindex=\"-1\"\n >\n <span class=\"\n gds-flex-1\n gds-min-width-0\n gds-truncate\n \">{{ option[bindLabel()] }}</span>\n <gds-icon\n key=\"line-chevron-right-stroke\"\n class=\"\n gds-flex-0\n gds-icon-primary\n gds-icon-size-2xs\n \"\n />\n </div>\n } @else {\n <div\n class=\"\n gds-align-items-center\n gds-display-flex\n gds-padding-block-2xs\n gds-padding-inline-sm\n gds-position-relative\n gds-radius-sm\n gds-text-body\n gds-text-primary\n item\n \"\n tabindex=\"-1\"\n [ngClass]=\"{ active: activeItems().includes(option[bindValue()]) }\"\n cdkMenuItem\n (cdkMenuItemTriggered)=\"onItemClick(option)\"\n (keydown.escape)=\"onEscape()\"\n (keydown.arrowleft)=\"onArrowLeft()\"\n (keydown.arrowright)=\"onArrowRight(option)\"\n >\n {{ option[bindLabel()] }}\n </div>\n }\n } @empty {\n <div class=\"\n gds-padding-block-2xs\n gds-padding-inline-sm\n gds-text-body\n gds-text-secondary\n \">\n {{ emptyText() }}\n </div>\n }\n </div>\n </div>\n </div>\n </gds-dropdown>\n</ng-template>\n", styles: ["@layer design-system{:host{--gds-form-control-cursor: pointer;--background-color: var(--gds-form-control-background-color, var(--gds-palette-background-white));--border-color: var(--gds-form-control-border-color, var(--gds-palette-border-default));--text-color: var(--gds-form-control-text-color, var(--gds-palette-text-default-primary));--active-color: var(--gds-form-control-active-color, var(--gds-palette-border-selected));--cursor: var(--gds-form-control-cursor, auto);--hover-color: var(--gds-form-control-hover-color, var(--gds-palette-background-secondary));--placeholder-color: var(--gds-form-control-placeholder-color, var(--gds-palette-text-default-placeholder));--invalid-color: var(--gds-form-control-invalid-color, var(--gds-palette-helper-error-inverse));--disabled-text-color: var(--gds-form-control-disabled-text-color, var(--gds-palette-text-default-disabled));--disabled-background-color: var( --gds-form-control-disabled-background-color, var(--gds-palette-background-disabled) );--disabled-border-color: var(--gds-form-control-disabled-border-color, var(--gds-palette-border-default))}:host[disabled],:host:has(*:disabled,*[disabled=true]){--background-color: var(--disabled-background-color);--text-color: var(--disabled-text-color);--hover-color: var(--disabled-background-color);--border-color: var(--disabled-border-color);--cursor: not-allowed}:host[invalid][touched]:not(:focus-within,.is-controlled),:host:has(input[invalid][touched],textarea[invalid][touched]):not(:focus-within,.is-controlled){--border-color: var(--invalid-color);--text-color: var(--invalid-color);--placeholder-color: var(--invalid-color);--active-color: var(--invalid-color)}:host{background-color:var(--background-color);border:.5px solid var(--border-color);color:var(--text-color);cursor:var(--cursor)!important}:host ::ng-deep input:focus,:host ::ng-deep textarea:focus{outline:none}:host:focus-within,:host.is-controlled{isolation:isolate;position:relative}:host:focus-within:before,:host.is-controlled:before{z-index:-1;content:\"\";position:absolute;inset:0;border-bottom:var(--gds-borderWidth-lg) solid var(--active-color);border-radius:var(--gds-borderRadius-xs)}:host{min-height:var(--gds-size-md-rem)}:is(body[isMobile=true]) :host{min-height:var(--gds-size-lg-rem)}:host:hover{background-color:var(--hover-color)}:host[disabled]::ng-deep svg-icon,:host:has(*:disabled,*[disabled=true])::ng-deep svg-icon{color:var(--disabled-text-color)}:host[invalid][touched]:not(:focus-within,.is-controlled)::ng-deep svg-icon,:host:has(input[invalid][touched],textarea[invalid][touched]):not(:focus-within,.is-controlled)::ng-deep svg-icon{color:var(--invalid-color)}:host ::ng-deep *::placeholder{color:var(--placeholder-color)}:host .label{color:var(--text-color)}:host .placeholder{color:var(--placeholder-color)}.reset-button,.breadcrumb{--gds-button-color: var(--gds-palette-text-default-secondary);--gds-button-color-hover: var(--gds-palette-text-default-secondary)}.search{--gds-form-control-cursor: text;--gds-form-control-hover-color: var(--gds-palette-background-white);box-sizing:border-box}.item{cursor:pointer;--wrapper-margin-inline: 0px;--wrapper-margin-block: 2px}.item:hover:before,.item.active:before,.item:focus-visible:before{content:\"\";position:absolute;border-radius:var(--gds-borderRadius-sm);width:calc(100% - 2 * var(--wrapper-margin-inline, var(--wrapper-margin, 0px)));height:calc(100% - 2 * var(--wrapper-margin-block, var(--wrapper-margin, 0px)));top:var(--wrapper-margin-block, var(--wrapper-margin, 0px));left:var(--wrapper-margin-inline, var(--wrapper-margin, 0px));background:var(--gds-palette-background-hover);pointer-events:none}.item:focus-visible{outline:none}}\n"] }]
6119
- }], ctorParameters: () => [], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: true }] }], bindValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindValue", required: true }] }], bindLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindLabel", required: true }] }], clearable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearable", required: false }] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], searchAutoFocus: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchAutoFocus", required: false }] }], maxMenuHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxMenuHeight", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], searchPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchPlaceholder", required: false }] }], mobileCancelLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "mobileCancelLabel", required: false }] }], resetLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "resetLabel", required: false }] }], emptyText: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyText", required: false }] }], backAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "backAriaLabel", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], menu: [{ type: i0.ViewChild, args: ['menu', { isSignal: true }] }], searchInput: [{ type: i0.ViewChild, args: ['searchInput', { isSignal: true }] }] } });
6341
+ }], ctorParameters: () => [], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: true }] }], bindValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindValue", required: true }] }], bindLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindLabel", required: true }] }], clearable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearable", required: false }] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], searchAutoFocus: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchAutoFocus", required: false }] }], maxMenuHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxMenuHeight", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], searchPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchPlaceholder", required: false }] }], mobileCancelLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "mobileCancelLabel", required: false }] }], resetLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "resetLabel", required: false }] }], emptyText: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyText", required: false }] }], backAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "backAriaLabel", required: false }] }], dialogTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "dialogTitle", required: false }] }], applyLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "applyLabel", required: false }] }], layout: [{ type: i0.Input, args: [{ isSignal: true, alias: "layout", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], menu: [{ type: i0.ViewChild, args: ['menu', { isSignal: true }] }], searchInput: [{ type: i0.ViewChild, args: ['searchInput', { isSignal: true }] }] } });
6120
6342
 
6121
6343
  class GdsEmptyStateComponent extends OnBrandChanged {
6122
6344
  #cdnUrl = inject(CDN_URL);
@@ -6761,8 +6983,71 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
6761
6983
  }, styles: ["@layer design-system{:host{border:var(--gds-borderWidth-md) solid;border-color:var(--gds-palette-border-primary);color:var(--gds-palette-text-primary-primary)}:host:hover,:host:checked{border-color:var(--gds-palette-border-selected);background-color:var(--gds-palette-background-hover)}:host[invalid=true],:host:disabled{border-color:inherit;color:inherit;background-color:inherit}:host[invalid=true]:hover,:host[invalid=true]:checked{background-color:var(--gds-palette-helper-error-default)}:host:focus-visible{outline:var(--gds-borderWidth-lg) solid var(--gds-palette-border-dark);outline-offset:2px}:host:before{display:block;content:attr(data-label);padding:var(--gds-spacing-2xs)}}\n"] }]
6762
6984
  }] });
6763
6985
 
6986
+ class GdsSelectMobileDialogComponent extends GdsDialogBaseDirective {
6987
+ #data = this.config.data;
6988
+ items = this.#data.items;
6989
+ bindValue = this.#data.bindValue;
6990
+ bindLabel = this.#data.bindLabel;
6991
+ dialogTitle = this.#data.dialogTitle;
6992
+ applyLabel = this.#data.applyLabel;
6993
+ emptyText = this.#data.emptyText;
6994
+ backAriaLabel = this.#data.backAriaLabel;
6995
+ searchable = this.#data.searchable;
6996
+ searchPlaceholder = this.#data.searchPlaceholder;
6997
+ searchText = signal('', /* @ts-ignore */
6998
+ ...(ngDevMode ? [{ debugName: "searchText" }] : /* istanbul ignore next */ []));
6999
+ #draftValue = signal(this.#data.value, /* @ts-ignore */
7000
+ ...(ngDevMode ? [{ debugName: "#draftValue" }] : /* istanbul ignore next */ []));
7001
+ displayedItems = computed(() => {
7002
+ const query = this.searchText().trim().toLowerCase();
7003
+ if (!query) {
7004
+ return this.items;
7005
+ }
7006
+ return this.items.filter((item) => this.itemLabel(item).toLowerCase().includes(query));
7007
+ }, /* @ts-ignore */
7008
+ ...(ngDevMode ? [{ debugName: "displayedItems" }] : /* istanbul ignore next */ []));
7009
+ hasValidDraft = computed(() => this.#draftValue() !== undefined && this.#draftValue() !== null, /* @ts-ignore */
7010
+ ...(ngDevMode ? [{ debugName: "hasValidDraft" }] : /* istanbul ignore next */ []));
7011
+ onSearch = (event) => {
7012
+ this.searchText.set(event.target.value);
7013
+ };
7014
+ onItemClick = (item) => {
7015
+ this.#draftValue.set(this.itemValue(item));
7016
+ };
7017
+ onBack = () => {
7018
+ this.hide(undefined);
7019
+ };
7020
+ onApply = () => {
7021
+ this.hide(this.#draftValue());
7022
+ };
7023
+ onDismiss = () => {
7024
+ this.hide(undefined);
7025
+ };
7026
+ isSelected = (item) => String(this.itemValue(item)) === String(this.#draftValue());
7027
+ itemLabel = (item) => String(item[this.bindLabel]);
7028
+ itemValue = (item) => item[this.bindValue];
7029
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: GdsSelectMobileDialogComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
7030
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: GdsSelectMobileDialogComponent, isStandalone: true, selector: "gds-select-mobile-dialog", usesInheritance: true, ngImport: i0, template: "<dialog\n gds-dialog\n type=\"drawer-bottom\"\n background=\"white\"\n suppressDismissBtn\n class=\"mobile-dialog\"\n (canceled)=\"onDismiss()\"\n>\n <ng-template #layoutTmpl>\n <div\n class=\"\n gds-display-flex\n gds-flex-column\n gds-gap-sm\n gds-min-height-0\n gds-padding-sm\n gds-width-100-parent\n layout\n \"\n >\n <header class=\"\n gds-align-items-center\n gds-display-grid\n mobile-dialog-header\n \">\n <button\n gds-icon-button\n variant=\"invisible\"\n class=\"mobile-dialog-back\"\n (clicked)=\"onBack()\"\n [attr.aria-label]=\"backAriaLabel\"\n >\n <gds-icon\n key=\"line-chevron-left-stroke\"\n class=\"\n gds-icon-primary\n gds-icon-size-2xs\n gds-mobile-icon-size-sm\n \"\n />\n </button>\n <span\n class=\"\n gds-min-width-0\n gds-text-align-center\n gds-text-body-large\n gds-text-primary\n gds-truncate\n mobile-dialog-title\n \"\n >\n {{ dialogTitle }}\n </span>\n <button\n gds-button\n class=\"\n gds-background-secondary\n gds-radius-pill\n mobile-dialog-apply\n \"\n [disabled]=\"!hasValidDraft()\"\n (clicked)=\"onApply()\"\n >\n {{ applyLabel }}\n </button>\n </header>\n\n @if (searchable) {\n <gds-text-input\n class=\"\n gds-gap-xs\n search\n \"\n (click)=\"$event.stopPropagation()\"\n >\n <gds-icon\n leading-visual\n key=\"line-search\"\n class=\"\n gds-icon-secondary\n gds-icon-size-2xs\n \"\n />\n <input\n type=\"text\"\n class=\"\n gds-background-none\n gds-border-none\n gds-flex-1\n gds-min-width-0\n gds-outline-none\n gds-text-body\n \"\n [placeholder]=\"searchPlaceholder\"\n [value]=\"searchText()\"\n (input)=\"onSearch($event)\"\n />\n </gds-text-input>\n }\n\n <div class=\"\n gds-flex-grow-1\n gds-min-height-0\n gds-scrollable-vertically\n \">\n <div class=\"\n gds-display-flex\n gds-flex-column\n gds-gap-3xs\n \">\n @for (item of displayedItems(); track itemValue(item)) {\n <div\n class=\"\n gds-align-items-center\n gds-display-flex\n gds-padding-block-2xs\n gds-padding-inline-sm\n gds-position-relative\n gds-radius-sm\n gds-text-body\n gds-text-primary\n item\n \"\n [ngClass]=\"{ active: isSelected(item) }\"\n role=\"button\"\n tabindex=\"-1\"\n (click)=\"onItemClick(item)\"\n (keydown.enter)=\"onItemClick(item)\"\n >\n {{ itemLabel(item) }}\n </div>\n } @empty {\n <div class=\"\n gds-padding-block-2xs\n gds-padding-inline-sm\n gds-text-body\n gds-text-secondary\n \">\n {{ emptyText }}\n </div>\n }\n </div>\n </div>\n </div>\n </ng-template>\n</dialog>\n", styles: ["@layer design-system{:host .search{--gds-form-control-cursor: text;--gds-form-control-hover-color: var(--gds-palette-background-white);box-sizing:border-box}:host .item{cursor:pointer;--wrapper-margin-inline: 0px;--wrapper-margin-block: 2px}:host .item.active:before{content:\"\";position:absolute;border-radius:var(--gds-borderRadius-sm);width:calc(100% - 2 * var(--wrapper-margin-inline, var(--wrapper-margin, 0px)));height:calc(100% - 2 * var(--wrapper-margin-block, var(--wrapper-margin, 0px)));top:var(--wrapper-margin-block, var(--wrapper-margin, 0px));left:var(--wrapper-margin-inline, var(--wrapper-margin, 0px));background:var(--gds-palette-background-hover);pointer-events:none}:host .item:focus-visible{outline:none}:host .mobile-dialog{height:calc(100dvh - 12px);max-height:calc(100dvh - 12px)}:host .mobile-dialog[open]{display:flex;flex-direction:column}:host .layout{flex:1;min-height:0}:host .mobile-dialog-header{grid-template-columns:1fr auto 1fr}:host .mobile-dialog-title{grid-column:2}:host .mobile-dialog-apply{justify-self:end}}\n"], dependencies: [{ kind: "component", type: GdsButtonComponent, selector: "button[gds-button]" }, { kind: "component", type: GdsDialogComponent, selector: "dialog[gds-dialog]", inputs: ["type", "background", "headerLabelAlignment", "showFooterBorder", "closeOnBackdropClick", "suppressDismissBtn"], outputs: ["closed", "canceled"] }, { kind: "component", type: GdsTextInputComponent, selector: "gds-text-input", inputs: ["clearable"], outputs: ["cleared"] }, { kind: "component", type: GdsIconComponent, selector: "gds-icon", inputs: ["key", "width", "height", "color"] }, { kind: "component", type: GdsIconButtonComponent, selector: "button[gds-icon-button]", inputs: ["tooltipLabel"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: GdsNativeInputDirective, selector: "input" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
7031
+ }
7032
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: GdsSelectMobileDialogComponent, decorators: [{
7033
+ type: Component,
7034
+ args: [{ selector: 'gds-select-mobile-dialog', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
7035
+ GdsButtonComponent,
7036
+ GdsDialogComponent,
7037
+ GdsTextInputComponent,
7038
+ GdsIconComponent,
7039
+ GdsIconButtonComponent,
7040
+ NgClass,
7041
+ GdsNativeInputDirective
7042
+ ], template: "<dialog\n gds-dialog\n type=\"drawer-bottom\"\n background=\"white\"\n suppressDismissBtn\n class=\"mobile-dialog\"\n (canceled)=\"onDismiss()\"\n>\n <ng-template #layoutTmpl>\n <div\n class=\"\n gds-display-flex\n gds-flex-column\n gds-gap-sm\n gds-min-height-0\n gds-padding-sm\n gds-width-100-parent\n layout\n \"\n >\n <header class=\"\n gds-align-items-center\n gds-display-grid\n mobile-dialog-header\n \">\n <button\n gds-icon-button\n variant=\"invisible\"\n class=\"mobile-dialog-back\"\n (clicked)=\"onBack()\"\n [attr.aria-label]=\"backAriaLabel\"\n >\n <gds-icon\n key=\"line-chevron-left-stroke\"\n class=\"\n gds-icon-primary\n gds-icon-size-2xs\n gds-mobile-icon-size-sm\n \"\n />\n </button>\n <span\n class=\"\n gds-min-width-0\n gds-text-align-center\n gds-text-body-large\n gds-text-primary\n gds-truncate\n mobile-dialog-title\n \"\n >\n {{ dialogTitle }}\n </span>\n <button\n gds-button\n class=\"\n gds-background-secondary\n gds-radius-pill\n mobile-dialog-apply\n \"\n [disabled]=\"!hasValidDraft()\"\n (clicked)=\"onApply()\"\n >\n {{ applyLabel }}\n </button>\n </header>\n\n @if (searchable) {\n <gds-text-input\n class=\"\n gds-gap-xs\n search\n \"\n (click)=\"$event.stopPropagation()\"\n >\n <gds-icon\n leading-visual\n key=\"line-search\"\n class=\"\n gds-icon-secondary\n gds-icon-size-2xs\n \"\n />\n <input\n type=\"text\"\n class=\"\n gds-background-none\n gds-border-none\n gds-flex-1\n gds-min-width-0\n gds-outline-none\n gds-text-body\n \"\n [placeholder]=\"searchPlaceholder\"\n [value]=\"searchText()\"\n (input)=\"onSearch($event)\"\n />\n </gds-text-input>\n }\n\n <div class=\"\n gds-flex-grow-1\n gds-min-height-0\n gds-scrollable-vertically\n \">\n <div class=\"\n gds-display-flex\n gds-flex-column\n gds-gap-3xs\n \">\n @for (item of displayedItems(); track itemValue(item)) {\n <div\n class=\"\n gds-align-items-center\n gds-display-flex\n gds-padding-block-2xs\n gds-padding-inline-sm\n gds-position-relative\n gds-radius-sm\n gds-text-body\n gds-text-primary\n item\n \"\n [ngClass]=\"{ active: isSelected(item) }\"\n role=\"button\"\n tabindex=\"-1\"\n (click)=\"onItemClick(item)\"\n (keydown.enter)=\"onItemClick(item)\"\n >\n {{ itemLabel(item) }}\n </div>\n } @empty {\n <div class=\"\n gds-padding-block-2xs\n gds-padding-inline-sm\n gds-text-body\n gds-text-secondary\n \">\n {{ emptyText }}\n </div>\n }\n </div>\n </div>\n </div>\n </ng-template>\n</dialog>\n", styles: ["@layer design-system{:host .search{--gds-form-control-cursor: text;--gds-form-control-hover-color: var(--gds-palette-background-white);box-sizing:border-box}:host .item{cursor:pointer;--wrapper-margin-inline: 0px;--wrapper-margin-block: 2px}:host .item.active:before{content:\"\";position:absolute;border-radius:var(--gds-borderRadius-sm);width:calc(100% - 2 * var(--wrapper-margin-inline, var(--wrapper-margin, 0px)));height:calc(100% - 2 * var(--wrapper-margin-block, var(--wrapper-margin, 0px)));top:var(--wrapper-margin-block, var(--wrapper-margin, 0px));left:var(--wrapper-margin-inline, var(--wrapper-margin, 0px));background:var(--gds-palette-background-hover);pointer-events:none}:host .item:focus-visible{outline:none}:host .mobile-dialog{height:calc(100dvh - 12px);max-height:calc(100dvh - 12px)}:host .mobile-dialog[open]{display:flex;flex-direction:column}:host .layout{flex:1;min-height:0}:host .mobile-dialog-header{grid-template-columns:1fr auto 1fr}:host .mobile-dialog-title{grid-column:2}:host .mobile-dialog-apply{justify-self:end}}\n"] }]
7043
+ }] });
7044
+
6764
7045
  class GdsSelectComponent extends GdsSignalFormControl {
6765
7046
  #injector = inject(Injector);
7047
+ #destroyRef = inject(DestroyRef);
7048
+ #dialogSvc = inject(GdsDialogService);
7049
+ #deviceDetectorSvc = inject(DeviceDetectorSignalService);
7050
+ #formField = inject(FormField, { self: true, optional: true });
6766
7051
  clearable = input(false, { ...(ngDevMode ? { debugName: "clearable" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
6767
7052
  searchable = input(false, { ...(ngDevMode ? { debugName: "searchable" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
6768
7053
  appendTo = input('', /* @ts-ignore */
@@ -6775,6 +7060,15 @@ class GdsSelectComponent extends GdsSignalFormControl {
6775
7060
  autofocus = input(false, { ...(ngDevMode ? { debugName: "autofocus" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
6776
7061
  multiple = input(false, { ...(ngDevMode ? { debugName: "multiple" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
6777
7062
  hideChevron = input(false, { ...(ngDevMode ? { debugName: "hideChevron" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
7063
+ preventMobileDialog = input(true, { ...(ngDevMode ? { debugName: "preventMobileDialog" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
7064
+ dialogTitle = input('', /* @ts-ignore */
7065
+ ...(ngDevMode ? [{ debugName: "dialogTitle" }] : /* istanbul ignore next */ []));
7066
+ applyLabel = input('Apply', /* @ts-ignore */
7067
+ ...(ngDevMode ? [{ debugName: "applyLabel" }] : /* istanbul ignore next */ []));
7068
+ searchPlaceholder = input('Search...', /* @ts-ignore */
7069
+ ...(ngDevMode ? [{ debugName: "searchPlaceholder" }] : /* istanbul ignore next */ []));
7070
+ backAriaLabel = input('Go back', /* @ts-ignore */
7071
+ ...(ngDevMode ? [{ debugName: "backAriaLabel" }] : /* istanbul ignore next */ []));
6778
7072
  width = input('default', /* @ts-ignore */
6779
7073
  ...(ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []));
6780
7074
  id = input('', /* @ts-ignore */
@@ -6820,6 +7114,11 @@ class GdsSelectComponent extends GdsSignalFormControl {
6820
7114
  ...(ngDevMode ? [{ debugName: "searchText" }] : /* istanbul ignore next */ []));
6821
7115
  markedIndex = signal(-1, /* @ts-ignore */
6822
7116
  ...(ngDevMode ? [{ debugName: "markedIndex" }] : /* istanbul ignore next */ []));
7117
+ #isMobileDialogOpen = signal(false, /* @ts-ignore */
7118
+ ...(ngDevMode ? [{ debugName: "#isMobileDialogOpen" }] : /* istanbul ignore next */ []));
7119
+ #suppressOpenOnFocus = false;
7120
+ #shouldUseMobileDialog = computed(() => this.#deviceDetectorSvc.isMobile() && !this.preventMobileDialog() && !this.multiple(), /* @ts-ignore */
7121
+ ...(ngDevMode ? [{ debugName: "#shouldUseMobileDialog" }] : /* istanbul ignore next */ []));
6823
7122
  onKeyDown = (event) => {
6824
7123
  if (event.code === 'Tab' && !event.shiftKey) {
6825
7124
  if (event.target === this.ref().searchInput().nativeElement) {
@@ -6851,6 +7150,13 @@ class GdsSelectComponent extends GdsSignalFormControl {
6851
7150
  }
6852
7151
  #setupEventListeners = effect(() => {
6853
7152
  this.ref().onInputFocus = () => {
7153
+ if (this.#suppressOpenOnFocus) {
7154
+ return;
7155
+ }
7156
+ if (this.#shouldUseMobileDialog()) {
7157
+ this.openMobileDialog();
7158
+ return;
7159
+ }
6854
7160
  setTimeout(() => this.ref().open());
6855
7161
  };
6856
7162
  this.ref().onInputBlur = () => {
@@ -6888,17 +7194,63 @@ class GdsSelectComponent extends GdsSignalFormControl {
6888
7194
  return this.ref().dropdownPanel()?.scrollElementRef();
6889
7195
  }
6890
7196
  handleClosed = () => {
7197
+ if (this.#shouldUseMobileDialog()) {
7198
+ return;
7199
+ }
6891
7200
  // remove the event listener to prevent memory leaks
6892
- this.dropdownPanelScroll.nativeElement.removeEventListener('mouseover', this.hideMarkedItem.bind(this));
7201
+ this.dropdownPanelScroll?.nativeElement.removeEventListener('mouseover', this.hideMarkedItem.bind(this));
6893
7202
  this.closed.emit();
6894
7203
  };
6895
7204
  handleOpened = () => {
7205
+ if (this.#shouldUseMobileDialog()) {
7206
+ this.ref().close();
7207
+ this.openMobileDialog();
7208
+ return;
7209
+ }
6896
7210
  setTimeout(() => {
6897
7211
  // add a mousemove listener to the panel to hide the marked item if the user hovers with a mouse
6898
7212
  this.dropdownPanelScroll.nativeElement.addEventListener('mouseover', this.hideMarkedItem.bind(this));
6899
7213
  }, 0);
6900
7214
  this.opened.emit();
6901
7215
  };
7216
+ openMobileDialog = () => {
7217
+ if (this.disabled() || !this.#shouldUseMobileDialog() || this.#isMobileDialogOpen()) {
7218
+ return;
7219
+ }
7220
+ this.#formField?.state().reset();
7221
+ this.#isMobileDialogOpen.set(true);
7222
+ this.opened.emit();
7223
+ this.#dialogSvc
7224
+ .open(GdsSelectMobileDialogComponent, {
7225
+ items: this.items(),
7226
+ bindValue: this.bindValue(),
7227
+ bindLabel: this.bindLabel(),
7228
+ value: this.value(),
7229
+ dialogTitle: this.dialogTitle() || this.placeholder(),
7230
+ applyLabel: this.applyLabel(),
7231
+ emptyText: this.emptyText(),
7232
+ backAriaLabel: this.backAriaLabel(),
7233
+ searchable: this.searchable(),
7234
+ searchPlaceholder: this.searchPlaceholder()
7235
+ })
7236
+ .pipe(take(1), takeUntilDestroyed(this.#destroyRef))
7237
+ .subscribe((value) => this.#onMobileResult(value));
7238
+ };
7239
+ #onMobileResult = (value) => {
7240
+ if (value !== undefined) {
7241
+ this.setValue(value);
7242
+ this.changed.emit(value);
7243
+ this.touched.set(true);
7244
+ }
7245
+ this.#isMobileDialogOpen.set(false);
7246
+ this.#formField?.state().markAsTouched();
7247
+ this.#suppressOpenOnFocus = true;
7248
+ this.ref().focus();
7249
+ setTimeout(() => {
7250
+ this.#suppressOpenOnFocus = false;
7251
+ });
7252
+ this.closed.emit();
7253
+ };
6902
7254
  unmarkItem = () => {
6903
7255
  this.ref().itemsList.unmarkItem();
6904
7256
  };
@@ -6906,7 +7258,7 @@ class GdsSelectComponent extends GdsSignalFormControl {
6906
7258
  this.ref().handleClearClick();
6907
7259
  };
6908
7260
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: GdsSelectComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
6909
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: GdsSelectComponent, isStandalone: true, selector: "gds-select", inputs: { clearable: { classPropertyName: "clearable", publicName: "clearable", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, appendTo: { classPropertyName: "appendTo", publicName: "appendTo", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, loadingText: { classPropertyName: "loadingText", publicName: "loadingText", isSignal: true, isRequired: false, transformFunction: null }, clearAriaLabel: { classPropertyName: "clearAriaLabel", publicName: "clearAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, autofocus: { classPropertyName: "autofocus", publicName: "autofocus", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, hideChevron: { classPropertyName: "hideChevron", publicName: "hideChevron", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, emptyText: { classPropertyName: "emptyText", publicName: "emptyText", isSignal: true, isRequired: false, transformFunction: null }, dropdownPosition: { classPropertyName: "dropdownPosition", publicName: "dropdownPosition", isSignal: true, isRequired: false, transformFunction: null }, bindValue: { classPropertyName: "bindValue", publicName: "bindValue", isSignal: true, isRequired: false, transformFunction: null }, bindLabel: { classPropertyName: "bindLabel", publicName: "bindLabel", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { changed: "changed", searched: "searched", blurred: "blurred", cleared: "cleared", closed: "closed", opened: "opened", bindValue: "bindValueChange", bindLabel: "bindLabelChange", value: "valueChange", items: "itemsChange" }, host: { listeners: { "keydown": "setMarkedItemIndex()" } }, queries: [{ propertyName: "multiLabelTmpl", first: true, predicate: ["multiLabelTmpl"], descendants: true, isSignal: true }, { propertyName: "labelTmpl", first: true, predicate: ["labelTmpl"], descendants: true, isSignal: true }, { propertyName: "optionTmpl", first: true, predicate: ["optionTmpl"], descendants: true, isSignal: true }, { propertyName: "footerTmpl", first: true, predicate: ["footerTmpl"], descendants: true, isSignal: true }, { propertyName: "clearBtnTmpl", first: true, predicate: ["clearBtnTmpl"], descendants: true, isSignal: true }, { propertyName: "placeholderTmpl", first: true, predicate: ["placeholderTmpl"], descendants: true, isSignal: true }], viewQueries: [{ propertyName: "ref", first: true, predicate: NgSelectComponent, descendants: true, isSignal: true }, { propertyName: "clearButton", first: true, predicate: ["clearButton"], descendants: true, read: ElementRef, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ng-select\n class=\"\n gds-mobile-text-input-mobile\n gds-text-input\n \"\n [ngClass]=\"{ 'ng-select-hide-chevron': hideChevron() }\"\n [dropdownPosition]=\"dropdownPosition()\"\n [notFoundText]=\"emptyText()\"\n [bindValue]=\"bindValue()\"\n [bindLabel]=\"bindLabel()\"\n [multiple]=\"multiple()\"\n [closeOnSelect]=\"!multiple()\"\n [disabled]=\"disabled()\"\n [items]=\"items()\"\n [ngModel]=\"value()\"\n [loading]=\"loading()\"\n [loadingText]=\"loadingText()\"\n [searchable]=\"searchable()\"\n [clearable]=\"clearable()\"\n [virtualScroll]=\"virtualScroll()\"\n [searchFn]=\"itemShouldDisplay\"\n [appendTo]=\"appendTo()\"\n [keyDownFn]=\"onKeyDown\"\n [labelForId]=\"id()\"\n (ngModelChange)=\"setValue($event)\"\n (change)=\"onHandleChange($event)\"\n (search)=\"onSearchChange($event)\"\n (clear)=\"cleared.emit()\"\n (open)=\"handleOpened()\"\n (close)=\"handleClosed()\"\n>\n <ng-template\n ng-label-tmp\n let-item=\"item\"\n >\n <ng-container *ngTemplateOutlet=\"labelTmpl() ?? defaultLabelTmpl; context: { item }\" />\n </ng-template>\n\n @if (!value()) {\n <ng-template ng-placeholder-tmp>\n <ng-container *ngTemplateOutlet=\"placeholderTmpl() ?? defaultPlaceholderTmpl\" />\n </ng-template>\n }\n\n <ng-template\n ng-multi-label-tmp\n let-items=\"items\"\n >\n <ng-container *ngTemplateOutlet=\"multiLabelTmpl() ?? defaultMultiLabelTmpl; context: { items }\" />\n </ng-template>\n\n <ng-template\n ng-option-tmp\n let-option=\"item\"\n let-selected=\"item$.selected\"\n let-index=\"index\"\n >\n @if (multiple()) {\n <input\n type=\"checkbox\"\n class=\"\n gds-margin-block-auto\n gds-margin-inline-3xs\n \"\n gds-checkbox\n [checked]=\"selected\"\n (mousedown)=\"onCheckboxChanged($event)\"\n />\n }\n <ng-container\n *ngTemplateOutlet=\"optionTmpl() ?? defaultOptionTmpl; context: { option, marked: markedIndex() === index }\"\n />\n </ng-template>\n\n @if (footerTmpl(); as footerTmpl) {\n <ng-template ng-footer-tmp>\n <div\n class=\"\n gds-height-100-parent\n gds-width-100-parent\n \"\n (mouseenter)=\"unmarkItem()\"\n >\n <ng-container *ngTemplateOutlet=\"footerTmpl\" />\n </div>\n </ng-template>\n }\n\n <ng-template ng-clearbutton-tmp>\n <span class=\"ng-clear-wrapper\">\n <ng-container *ngTemplateOutlet=\"clearBtnTmpl() ?? defaultClearBtnTmpl\" />\n </span>\n </ng-template>\n</ng-select>\n\n<ng-template\n #defaultLabelTmpl\n let-item=\"item\"\n>\n @if (value !== undefined) {\n <gds-tooltip\n onlyTextOverflow\n [tooltip]=\"item[bindLabel()]\"\n >\n {{ item[bindLabel()] }}\n </gds-tooltip>\n }\n</ng-template>\n\n<ng-template\n #defaultMultiLabelTmpl\n let-items=\"items\"\n>\n <div class=\"\n gds-align-items-center\n gds-display-inline-flex\n gds-gap-2xs\n gds-select--multi-selected-content\n \">\n <gds-tooltip\n onlyOnTextOverflow\n [tooltip]=\"items[0][bindLabel()]\"\n >\n {{ items[0][bindLabel()] }}\n </gds-tooltip>\n @if (items.length > 1) {\n <span gds-badge>+{{ items.length - 1 }}</span>\n }\n </div>\n</ng-template>\n\n<ng-template\n #defaultOptionTmpl\n let-option=\"option\"\n let-active=\"marked\"\n>\n <gds-tooltip\n class=\"option\"\n onlyTextOverflow\n [tooltip]=\"option[bindLabel()]\"\n [open]=\"active\"\n >\n {{ option[bindLabel()] }}\n </gds-tooltip>\n</ng-template>\n\n<ng-template #defaultPlaceholderTmpl>\n <span class=\"ng-placeholder\">{{ placeholder() }}</span>\n</ng-template>\n\n<ng-template #defaultClearBtnTmpl>\n <button\n #clearButton\n gds-icon-button\n class=\"gds-background-none\"\n [attr.aria-label]=\"clearAriaLabel()\"\n (click)=\"onClearClicked()\"\n (keydown.enter)=\"onClearClicked()\"\n >\n <gds-icon\n class=\"\n gds-icon-primary\n gds-icon-size-3xs\n \"\n key=\"line-dismiss\"\n />\n </button>\n</ng-template>\n", styles: ["@layer design-system{:host{--gds-form-control-cursor: pointer;--background-color: var(--gds-form-control-background-color, var(--gds-palette-background-white));--border-color: var(--gds-form-control-border-color, var(--gds-palette-border-default));--text-color: var(--gds-form-control-text-color, var(--gds-palette-text-default-primary));--active-color: var(--gds-form-control-active-color, var(--gds-palette-border-selected));--cursor: var(--gds-form-control-cursor, auto);--hover-color: var(--gds-form-control-hover-color, var(--gds-palette-background-secondary));--placeholder-color: var(--gds-form-control-placeholder-color, var(--gds-palette-text-default-placeholder));--invalid-color: var(--gds-form-control-invalid-color, var(--gds-palette-helper-error-inverse));--disabled-text-color: var(--gds-form-control-disabled-text-color, var(--gds-palette-text-default-disabled));--disabled-background-color: var( --gds-form-control-disabled-background-color, var(--gds-palette-background-disabled) );--disabled-border-color: var(--gds-form-control-disabled-border-color, var(--gds-palette-border-default))}:host[disabled],:host:has(*:disabled,*[disabled=true]){--background-color: var(--disabled-background-color);--text-color: var(--disabled-text-color);--hover-color: var(--disabled-background-color);--border-color: var(--disabled-border-color);--cursor: not-allowed}:host[invalid][touched]:not(:focus-within,.is-controlled),:host:has(input[invalid][touched],textarea[invalid][touched]):not(:focus-within,.is-controlled){--border-color: var(--invalid-color);--text-color: var(--invalid-color);--placeholder-color: var(--invalid-color);--active-color: var(--invalid-color)}:host{--arrow-url: url(\"data:image/svg+xml,%3Csvg viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M3.25 5.75L8 10.25L12.75 5.75' stroke='%231E365E' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\")}:host[invalid][touched]:not(:focus-within,.is-controlled),:host:has(input[invalid][touched],textarea[invalid][touched]):not(:focus-within,.is-controlled){--arrow-url: url(\"data:image/svg+xml,%3Csvg viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M3.25 5.75L8 10.25L12.75 5.75' stroke='%23cd2127' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\")}:host[disabled],:host:has(*:disabled,*[disabled=true]){--arrow-url: url(\"data:image/svg+xml,%3Csvg viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M3.25 5.75L8 10.25L12.75 5.75' stroke='%23b2b2b2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\");--cursor: not-allowed}:host ng-select.ng-select-clearable,:host ng-select.ng-select-hide-chevron{--arrow-display: none}:host ng-select.ng-select-opened{--arrow-url: url(\"data:image/svg+xml,%3Csvg viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.75 10.25L8 5.75L3.25 10.25' stroke='%231E365E' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\")}:host ng-select.ng-select-multiple ::ng-deep .ng-value-container{gap:var(--gds-spacing-2xs);flex-wrap:nowrap!important}:host ng-select.ng-select-multiple ::ng-deep .ng-value-container .ng-input{padding-left:0}:host ng-select ::ng-deep .ng-select-container{background-color:var(--background-color);border:.5px solid var(--border-color);color:var(--text-color);cursor:var(--cursor)!important}:host ng-select ::ng-deep .ng-select-container ::ng-deep input:focus,:host ng-select ::ng-deep .ng-select-container ::ng-deep textarea:focus{outline:none}:host ng-select ::ng-deep .ng-select-container:focus-within,:host ng-select ::ng-deep .ng-select-container.is-controlled{isolation:isolate;position:relative}:host ng-select ::ng-deep .ng-select-container:focus-within:before,:host ng-select ::ng-deep .ng-select-container.is-controlled:before{z-index:-1;content:\"\";position:absolute;inset:0;border-bottom:var(--gds-borderWidth-lg) solid var(--active-color);border-radius:var(--gds-borderRadius-xs)}:host ng-select ::ng-deep .ng-select-container{min-height:var(--gds-size-md-rem)}:is(body[isMobile=true]) :host ng-select ::ng-deep .ng-select-container{min-height:var(--gds-size-lg-rem)}:host ng-select ::ng-deep .ng-select-container:hover{background-color:var(--hover-color)}:host ng-select ::ng-deep .ng-select-container[disabled]::ng-deep svg-icon,:host ng-select ::ng-deep .ng-select-container:has(*:disabled,*[disabled=true])::ng-deep svg-icon{color:var(--disabled-text-color)}:host ng-select ::ng-deep .ng-select-container[invalid][touched]:not(:focus-within,.is-controlled)::ng-deep svg-icon,:host ng-select ::ng-deep .ng-select-container:has(input[invalid][touched],textarea[invalid][touched]):not(:focus-within,.is-controlled)::ng-deep svg-icon{color:var(--invalid-color)}:host ng-select ::ng-deep .ng-select-container ::ng-deep *::placeholder{color:var(--placeholder-color)}:host ng-select ::ng-deep .ng-select-container{border-radius:var(--gds-borderRadius-sm);padding-block:var(--gds-spacing-3xs);padding-inline:var(--gds-spacing-xs);gap:var(--gds-spacing-2xs)}:is(body[isMobile=true]) :host ng-select ::ng-deep .ng-select-container{padding-block:0}:host ng-select ::ng-deep .ng-has-value .ng-arrow-wrapper{display:var(--arrow-display);cursor:var(--cursor)}:host ng-select ::ng-deep .ng-arrow-wrapper,:host ng-select ::ng-deep .ng-clear-wrapper{width:var(--gds-size-sm-rem);height:var(--gds-size-sm-rem);display:flex;align-items:center;justify-content:center}:host ng-select ::ng-deep .ng-arrow-wrapper .ng-arrow,:host ng-select ::ng-deep .ng-clear-wrapper .ng-arrow{width:var(--gds-size-sm-rem)!important;height:var(--gds-size-sm-rem)!important;background-image:var(--arrow-url)}:host ng-select ::ng-deep .ng-arrow-wrapper .ng-clear,:host ng-select ::ng-deep .ng-clear-wrapper .ng-clear{font-size:var(--gds-fontSize-bodyLarge)}:host ng-select ::ng-deep .ng-option{display:flex!important;gap:var(--gds-spacing-3xs);padding:11px var(--gds-spacing-sm);border-radius:var(--gds-borderRadius-sm);color:var(--text-color);position:relative}:host ng-select ::ng-deep .ng-option.ng-option-marked:before{content:\"\";position:absolute;border-radius:var(--gds-borderRadius-sm);width:calc(100% - 2 * var(--wrapper-margin-inline, var(--wrapper-margin, 0px)));height:calc(100% - 2 * var(--wrapper-margin-block, var(--wrapper-margin, 0px)));top:var(--wrapper-margin-block, var(--wrapper-margin, 0px));left:var(--wrapper-margin-inline, var(--wrapper-margin, 0px));background:var(--gds-palette-background-hover);pointer-events:none;--wrapper-margin-inline: 5px;--wrapper-margin-block: 4px;z-index:-1}:host ng-select ::ng-deep .ng-value-container{overflow:hidden!important;align-items:center;height:var(--gds-primitive-lineHeight-250)}:host ng-select ::ng-deep .ng-value-container .ng-value{height:fit-content}:host ng-select ::ng-deep .ng-placeholder{color:var(--placeholder-color);white-space:nowrap;text-overflow:ellipsis;overflow:hidden;min-width:0}:host ng-select ::ng-deep .ng-option-disabled{cursor:default!important}:host ng-select ::ng-deep .ng-spinner-loader{border-left-color:var(--gds-palette-text-primary-primary)!important}.gds-select--multi-selected-content{color:var(--gds-palette-text-default-primary);font:var(--gds-text-body-shorthand);min-width:0}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: NgSelectComponent, selector: "ng-select", inputs: ["ariaLabelDropdown", "ariaLabel", "markFirst", "placeholder", "fixedPlaceholder", "notFoundText", "typeToSearchText", "preventToggleOnRightClick", "addTagText", "loadingText", "clearAllText", "removeText", "dropdownPosition", "appendTo", "outsideClickEvent", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "tabFocusOnClearButton", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "ngClass", "typeahead", "multiple", "addTag", "searchable", "clearable", "clearKeepsDisabledOptions", "deselectOnClick", "clearSearchOnAdd", "compareWith", "keyDownFn", "popover", "bindLabel", "bindValue", "appearance", "isOpen", "items"], outputs: ["bindLabelChange", "bindValueChange", "appearanceChange", "isOpenChange", "itemsChange", "blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"], exportAs: ["ngSelect"] }, { kind: "directive", type: NgLabelTemplateDirective, selector: "[ng-label-tmp]" }, { kind: "directive", type: NgMultiLabelTemplateDirective, selector: "[ng-multi-label-tmp]" }, { kind: "directive", type: NgFooterTemplateDirective, selector: "[ng-footer-tmp]" }, { kind: "directive", type: NgClearButtonTemplateDirective, selector: "[ng-clearbutton-tmp]" }, { kind: "directive", type: NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { kind: "directive", type: NgPlaceholderTemplateDirective, selector: "[ng-placeholder-tmp]" }, { kind: "component", type: GdsCheckboxComponent, selector: "input[type=\"checkbox\"][gds-checkbox]", inputs: ["checked", "touched", "disabled", "readonly", "hidden", "invalid", "tabindex"], outputs: ["checkedChange", "touchedChange", "tabindexChange"] }, { kind: "component", type: GdsBadgeComponent, selector: "span[gds-badge]", inputs: ["icon", "tooltip", "tooltipInteractive"] }, { kind: "component", type: GdsIconComponent, selector: "gds-icon", inputs: ["key", "width", "height", "color"] }, { kind: "component", type: GdsTooltipComponent, selector: "gds-tooltip", inputs: ["tooltip", "onlyTextOverflow", "disabled", "tooltipPlacement", "tooltipInteractive", "useHostWidth", "open", "maxWidth", "appendTo", "lineClamp", "tooltipOffset"] }, { kind: "component", type: GdsIconButtonComponent, selector: "button[gds-icon-button]", inputs: ["tooltipLabel"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
7261
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: GdsSelectComponent, isStandalone: true, selector: "gds-select", inputs: { clearable: { classPropertyName: "clearable", publicName: "clearable", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, appendTo: { classPropertyName: "appendTo", publicName: "appendTo", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, loadingText: { classPropertyName: "loadingText", publicName: "loadingText", isSignal: true, isRequired: false, transformFunction: null }, clearAriaLabel: { classPropertyName: "clearAriaLabel", publicName: "clearAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, autofocus: { classPropertyName: "autofocus", publicName: "autofocus", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, hideChevron: { classPropertyName: "hideChevron", publicName: "hideChevron", isSignal: true, isRequired: false, transformFunction: null }, preventMobileDialog: { classPropertyName: "preventMobileDialog", publicName: "preventMobileDialog", isSignal: true, isRequired: false, transformFunction: null }, dialogTitle: { classPropertyName: "dialogTitle", publicName: "dialogTitle", isSignal: true, isRequired: false, transformFunction: null }, applyLabel: { classPropertyName: "applyLabel", publicName: "applyLabel", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, backAriaLabel: { classPropertyName: "backAriaLabel", publicName: "backAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, emptyText: { classPropertyName: "emptyText", publicName: "emptyText", isSignal: true, isRequired: false, transformFunction: null }, dropdownPosition: { classPropertyName: "dropdownPosition", publicName: "dropdownPosition", isSignal: true, isRequired: false, transformFunction: null }, bindValue: { classPropertyName: "bindValue", publicName: "bindValue", isSignal: true, isRequired: false, transformFunction: null }, bindLabel: { classPropertyName: "bindLabel", publicName: "bindLabel", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { changed: "changed", searched: "searched", blurred: "blurred", cleared: "cleared", closed: "closed", opened: "opened", bindValue: "bindValueChange", bindLabel: "bindLabelChange", value: "valueChange", items: "itemsChange" }, host: { listeners: { "keydown": "setMarkedItemIndex()" } }, queries: [{ propertyName: "multiLabelTmpl", first: true, predicate: ["multiLabelTmpl"], descendants: true, isSignal: true }, { propertyName: "labelTmpl", first: true, predicate: ["labelTmpl"], descendants: true, isSignal: true }, { propertyName: "optionTmpl", first: true, predicate: ["optionTmpl"], descendants: true, isSignal: true }, { propertyName: "footerTmpl", first: true, predicate: ["footerTmpl"], descendants: true, isSignal: true }, { propertyName: "clearBtnTmpl", first: true, predicate: ["clearBtnTmpl"], descendants: true, isSignal: true }, { propertyName: "placeholderTmpl", first: true, predicate: ["placeholderTmpl"], descendants: true, isSignal: true }], viewQueries: [{ propertyName: "ref", first: true, predicate: NgSelectComponent, descendants: true, isSignal: true }, { propertyName: "clearButton", first: true, predicate: ["clearButton"], descendants: true, read: ElementRef, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ng-select\n class=\"\n gds-mobile-text-input-mobile\n gds-text-input\n \"\n [ngClass]=\"{ 'ng-select-hide-chevron': hideChevron() }\"\n [dropdownPosition]=\"dropdownPosition()\"\n [notFoundText]=\"emptyText()\"\n [bindValue]=\"bindValue()\"\n [bindLabel]=\"bindLabel()\"\n [multiple]=\"multiple()\"\n [closeOnSelect]=\"!multiple()\"\n [disabled]=\"disabled()\"\n [items]=\"items()\"\n [ngModel]=\"value()\"\n [loading]=\"loading()\"\n [loadingText]=\"loadingText()\"\n [searchable]=\"searchable()\"\n [clearable]=\"clearable()\"\n [virtualScroll]=\"virtualScroll()\"\n [searchFn]=\"itemShouldDisplay\"\n [appendTo]=\"appendTo()\"\n [keyDownFn]=\"onKeyDown\"\n [labelForId]=\"id()\"\n (ngModelChange)=\"setValue($event)\"\n (change)=\"onHandleChange($event)\"\n (search)=\"onSearchChange($event)\"\n (clear)=\"cleared.emit()\"\n (open)=\"handleOpened()\"\n (close)=\"handleClosed()\"\n>\n <ng-template\n ng-label-tmp\n let-item=\"item\"\n >\n <ng-container *ngTemplateOutlet=\"labelTmpl() ?? defaultLabelTmpl; context: { item }\" />\n </ng-template>\n\n @if (!value()) {\n <ng-template ng-placeholder-tmp>\n <ng-container *ngTemplateOutlet=\"placeholderTmpl() ?? defaultPlaceholderTmpl\" />\n </ng-template>\n }\n\n <ng-template\n ng-multi-label-tmp\n let-items=\"items\"\n >\n <ng-container *ngTemplateOutlet=\"multiLabelTmpl() ?? defaultMultiLabelTmpl; context: { items }\" />\n </ng-template>\n\n <ng-template\n ng-option-tmp\n let-option=\"item\"\n let-selected=\"item$.selected\"\n let-index=\"index\"\n >\n @if (multiple()) {\n <input\n type=\"checkbox\"\n class=\"\n gds-margin-block-auto\n gds-margin-inline-3xs\n \"\n gds-checkbox\n [checked]=\"selected\"\n (mousedown)=\"onCheckboxChanged($event)\"\n />\n }\n <ng-container\n *ngTemplateOutlet=\"optionTmpl() ?? defaultOptionTmpl; context: { option, marked: markedIndex() === index }\"\n />\n </ng-template>\n\n @if (footerTmpl(); as footerTmpl) {\n <ng-template ng-footer-tmp>\n <div\n class=\"\n gds-height-100-parent\n gds-width-100-parent\n \"\n (mouseenter)=\"unmarkItem()\"\n >\n <ng-container *ngTemplateOutlet=\"footerTmpl\" />\n </div>\n </ng-template>\n }\n\n <ng-template ng-clearbutton-tmp>\n <span class=\"ng-clear-wrapper\">\n <ng-container *ngTemplateOutlet=\"clearBtnTmpl() ?? defaultClearBtnTmpl\" />\n </span>\n </ng-template>\n</ng-select>\n\n<ng-template\n #defaultLabelTmpl\n let-item=\"item\"\n>\n @if (value !== undefined) {\n <gds-tooltip\n onlyTextOverflow\n [tooltip]=\"item[bindLabel()]\"\n >\n {{ item[bindLabel()] }}\n </gds-tooltip>\n }\n</ng-template>\n\n<ng-template\n #defaultMultiLabelTmpl\n let-items=\"items\"\n>\n <div class=\"\n gds-align-items-center\n gds-display-inline-flex\n gds-gap-2xs\n gds-select--multi-selected-content\n \">\n <gds-tooltip\n onlyOnTextOverflow\n [tooltip]=\"items[0][bindLabel()]\"\n >\n {{ items[0][bindLabel()] }}\n </gds-tooltip>\n @if (items.length > 1) {\n <span gds-badge>+{{ items.length - 1 }}</span>\n }\n </div>\n</ng-template>\n\n<ng-template\n #defaultOptionTmpl\n let-option=\"option\"\n let-active=\"marked\"\n>\n <gds-tooltip\n class=\"option\"\n onlyTextOverflow\n [tooltip]=\"option[bindLabel()]\"\n [open]=\"active\"\n >\n {{ option[bindLabel()] }}\n </gds-tooltip>\n</ng-template>\n\n<ng-template #defaultPlaceholderTmpl>\n <span class=\"ng-placeholder\">{{ placeholder() }}</span>\n</ng-template>\n\n<ng-template #defaultClearBtnTmpl>\n <button\n #clearButton\n gds-icon-button\n class=\"gds-background-none\"\n [attr.aria-label]=\"clearAriaLabel()\"\n (click)=\"onClearClicked()\"\n (keydown.enter)=\"onClearClicked()\"\n >\n <gds-icon\n class=\"\n gds-icon-primary\n gds-icon-size-3xs\n \"\n key=\"line-dismiss\"\n />\n </button>\n</ng-template>\n", styles: ["@layer design-system{:host{--gds-form-control-cursor: pointer;--background-color: var(--gds-form-control-background-color, var(--gds-palette-background-white));--border-color: var(--gds-form-control-border-color, var(--gds-palette-border-default));--text-color: var(--gds-form-control-text-color, var(--gds-palette-text-default-primary));--active-color: var(--gds-form-control-active-color, var(--gds-palette-border-selected));--cursor: var(--gds-form-control-cursor, auto);--hover-color: var(--gds-form-control-hover-color, var(--gds-palette-background-secondary));--placeholder-color: var(--gds-form-control-placeholder-color, var(--gds-palette-text-default-placeholder));--invalid-color: var(--gds-form-control-invalid-color, var(--gds-palette-helper-error-inverse));--disabled-text-color: var(--gds-form-control-disabled-text-color, var(--gds-palette-text-default-disabled));--disabled-background-color: var( --gds-form-control-disabled-background-color, var(--gds-palette-background-disabled) );--disabled-border-color: var(--gds-form-control-disabled-border-color, var(--gds-palette-border-default))}:host[disabled],:host:has(*:disabled,*[disabled=true]){--background-color: var(--disabled-background-color);--text-color: var(--disabled-text-color);--hover-color: var(--disabled-background-color);--border-color: var(--disabled-border-color);--cursor: not-allowed}:host[invalid][touched]:not(:focus-within,.is-controlled),:host:has(input[invalid][touched],textarea[invalid][touched]):not(:focus-within,.is-controlled){--border-color: var(--invalid-color);--text-color: var(--invalid-color);--placeholder-color: var(--invalid-color);--active-color: var(--invalid-color)}:host{--arrow-url: url(\"data:image/svg+xml,%3Csvg viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M3.25 5.75L8 10.25L12.75 5.75' stroke='%231E365E' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\")}:host[invalid][touched]:not(:focus-within,.is-controlled),:host:has(input[invalid][touched],textarea[invalid][touched]):not(:focus-within,.is-controlled){--arrow-url: url(\"data:image/svg+xml,%3Csvg viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M3.25 5.75L8 10.25L12.75 5.75' stroke='%23cd2127' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\")}:host[disabled],:host:has(*:disabled,*[disabled=true]){--arrow-url: url(\"data:image/svg+xml,%3Csvg viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M3.25 5.75L8 10.25L12.75 5.75' stroke='%23b2b2b2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\");--cursor: not-allowed}:host ng-select.ng-select-clearable,:host ng-select.ng-select-hide-chevron{--arrow-display: none}:host ng-select.ng-select-opened{--arrow-url: url(\"data:image/svg+xml,%3Csvg viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.75 10.25L8 5.75L3.25 10.25' stroke='%231E365E' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\")}:host ng-select.ng-select-multiple ::ng-deep .ng-value-container{gap:var(--gds-spacing-2xs);flex-wrap:nowrap!important}:host ng-select.ng-select-multiple ::ng-deep .ng-value-container .ng-input{padding-left:0}:host ng-select ::ng-deep .ng-select-container{background-color:var(--background-color);border:.5px solid var(--border-color);color:var(--text-color);cursor:var(--cursor)!important}:host ng-select ::ng-deep .ng-select-container ::ng-deep input:focus,:host ng-select ::ng-deep .ng-select-container ::ng-deep textarea:focus{outline:none}:host ng-select ::ng-deep .ng-select-container:focus-within,:host ng-select ::ng-deep .ng-select-container.is-controlled{isolation:isolate;position:relative}:host ng-select ::ng-deep .ng-select-container:focus-within:before,:host ng-select ::ng-deep .ng-select-container.is-controlled:before{z-index:-1;content:\"\";position:absolute;inset:0;border-bottom:var(--gds-borderWidth-lg) solid var(--active-color);border-radius:var(--gds-borderRadius-xs)}:host ng-select ::ng-deep .ng-select-container{min-height:var(--gds-size-md-rem)}:is(body[isMobile=true]) :host ng-select ::ng-deep .ng-select-container{min-height:var(--gds-size-lg-rem)}:host ng-select ::ng-deep .ng-select-container:hover{background-color:var(--hover-color)}:host ng-select ::ng-deep .ng-select-container[disabled]::ng-deep svg-icon,:host ng-select ::ng-deep .ng-select-container:has(*:disabled,*[disabled=true])::ng-deep svg-icon{color:var(--disabled-text-color)}:host ng-select ::ng-deep .ng-select-container[invalid][touched]:not(:focus-within,.is-controlled)::ng-deep svg-icon,:host ng-select ::ng-deep .ng-select-container:has(input[invalid][touched],textarea[invalid][touched]):not(:focus-within,.is-controlled)::ng-deep svg-icon{color:var(--invalid-color)}:host ng-select ::ng-deep .ng-select-container ::ng-deep *::placeholder{color:var(--placeholder-color)}:host ng-select ::ng-deep .ng-select-container{border-radius:var(--gds-borderRadius-sm);padding-block:var(--gds-spacing-3xs);padding-inline:var(--gds-spacing-xs);gap:var(--gds-spacing-2xs)}:is(body[isMobile=true]) :host ng-select ::ng-deep .ng-select-container{padding-block:0}:host ng-select ::ng-deep .ng-has-value .ng-arrow-wrapper{display:var(--arrow-display);cursor:var(--cursor)}:host ng-select ::ng-deep .ng-arrow-wrapper,:host ng-select ::ng-deep .ng-clear-wrapper{width:var(--gds-size-sm-rem);height:var(--gds-size-sm-rem);display:flex;align-items:center;justify-content:center}:host ng-select ::ng-deep .ng-arrow-wrapper .ng-arrow,:host ng-select ::ng-deep .ng-clear-wrapper .ng-arrow{width:var(--gds-size-sm-rem)!important;height:var(--gds-size-sm-rem)!important;background-image:var(--arrow-url)}:host ng-select ::ng-deep .ng-arrow-wrapper .ng-clear,:host ng-select ::ng-deep .ng-clear-wrapper .ng-clear{font-size:var(--gds-fontSize-bodyLarge)}:host ng-select ::ng-deep .ng-option{display:flex!important;gap:var(--gds-spacing-3xs);padding:11px var(--gds-spacing-sm);border-radius:var(--gds-borderRadius-sm);color:var(--text-color);position:relative}:host ng-select ::ng-deep .ng-option.ng-option-marked:before{content:\"\";position:absolute;border-radius:var(--gds-borderRadius-sm);width:calc(100% - 2 * var(--wrapper-margin-inline, var(--wrapper-margin, 0px)));height:calc(100% - 2 * var(--wrapper-margin-block, var(--wrapper-margin, 0px)));top:var(--wrapper-margin-block, var(--wrapper-margin, 0px));left:var(--wrapper-margin-inline, var(--wrapper-margin, 0px));background:var(--gds-palette-background-hover);pointer-events:none;--wrapper-margin-inline: 5px;--wrapper-margin-block: 4px;z-index:-1}:host ng-select ::ng-deep .ng-value-container{overflow:hidden!important;align-items:center;height:var(--gds-primitive-lineHeight-250)}:host ng-select ::ng-deep .ng-value-container .ng-value{height:fit-content}:host ng-select ::ng-deep .ng-placeholder{color:var(--placeholder-color);white-space:nowrap;text-overflow:ellipsis;overflow:hidden;min-width:0}:host ng-select ::ng-deep .ng-option-disabled{cursor:default!important}:host ng-select ::ng-deep .ng-spinner-loader{border-left-color:var(--gds-palette-text-primary-primary)!important}.gds-select--multi-selected-content{color:var(--gds-palette-text-default-primary);font:var(--gds-text-body-shorthand);min-width:0}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: NgSelectComponent, selector: "ng-select", inputs: ["ariaLabelDropdown", "ariaLabel", "markFirst", "placeholder", "fixedPlaceholder", "notFoundText", "typeToSearchText", "preventToggleOnRightClick", "addTagText", "loadingText", "clearAllText", "removeText", "dropdownPosition", "appendTo", "outsideClickEvent", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "tabFocusOnClearButton", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "ngClass", "typeahead", "multiple", "addTag", "searchable", "clearable", "clearKeepsDisabledOptions", "deselectOnClick", "clearSearchOnAdd", "compareWith", "keyDownFn", "popover", "bindLabel", "bindValue", "appearance", "isOpen", "items"], outputs: ["bindLabelChange", "bindValueChange", "appearanceChange", "isOpenChange", "itemsChange", "blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"], exportAs: ["ngSelect"] }, { kind: "directive", type: NgLabelTemplateDirective, selector: "[ng-label-tmp]" }, { kind: "directive", type: NgMultiLabelTemplateDirective, selector: "[ng-multi-label-tmp]" }, { kind: "directive", type: NgFooterTemplateDirective, selector: "[ng-footer-tmp]" }, { kind: "directive", type: NgClearButtonTemplateDirective, selector: "[ng-clearbutton-tmp]" }, { kind: "directive", type: NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { kind: "directive", type: NgPlaceholderTemplateDirective, selector: "[ng-placeholder-tmp]" }, { kind: "component", type: GdsCheckboxComponent, selector: "input[type=\"checkbox\"][gds-checkbox]", inputs: ["checked", "touched", "disabled", "readonly", "hidden", "invalid", "tabindex"], outputs: ["checkedChange", "touchedChange", "tabindexChange"] }, { kind: "component", type: GdsBadgeComponent, selector: "span[gds-badge]", inputs: ["icon", "tooltip", "tooltipInteractive"] }, { kind: "component", type: GdsIconComponent, selector: "gds-icon", inputs: ["key", "width", "height", "color"] }, { kind: "component", type: GdsTooltipComponent, selector: "gds-tooltip", inputs: ["tooltip", "onlyTextOverflow", "disabled", "tooltipPlacement", "tooltipInteractive", "useHostWidth", "open", "maxWidth", "appendTo", "lineClamp", "tooltipOffset"] }, { kind: "component", type: GdsIconButtonComponent, selector: "button[gds-icon-button]", inputs: ["tooltipLabel"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6910
7262
  }
6911
7263
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: GdsSelectComponent, decorators: [{
6912
7264
  type: Component,
@@ -6930,7 +7282,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
6930
7282
  ], changeDetection: ChangeDetectionStrategy.OnPush, host: {
6931
7283
  '(keydown)': 'setMarkedItemIndex()'
6932
7284
  }, template: "<ng-select\n class=\"\n gds-mobile-text-input-mobile\n gds-text-input\n \"\n [ngClass]=\"{ 'ng-select-hide-chevron': hideChevron() }\"\n [dropdownPosition]=\"dropdownPosition()\"\n [notFoundText]=\"emptyText()\"\n [bindValue]=\"bindValue()\"\n [bindLabel]=\"bindLabel()\"\n [multiple]=\"multiple()\"\n [closeOnSelect]=\"!multiple()\"\n [disabled]=\"disabled()\"\n [items]=\"items()\"\n [ngModel]=\"value()\"\n [loading]=\"loading()\"\n [loadingText]=\"loadingText()\"\n [searchable]=\"searchable()\"\n [clearable]=\"clearable()\"\n [virtualScroll]=\"virtualScroll()\"\n [searchFn]=\"itemShouldDisplay\"\n [appendTo]=\"appendTo()\"\n [keyDownFn]=\"onKeyDown\"\n [labelForId]=\"id()\"\n (ngModelChange)=\"setValue($event)\"\n (change)=\"onHandleChange($event)\"\n (search)=\"onSearchChange($event)\"\n (clear)=\"cleared.emit()\"\n (open)=\"handleOpened()\"\n (close)=\"handleClosed()\"\n>\n <ng-template\n ng-label-tmp\n let-item=\"item\"\n >\n <ng-container *ngTemplateOutlet=\"labelTmpl() ?? defaultLabelTmpl; context: { item }\" />\n </ng-template>\n\n @if (!value()) {\n <ng-template ng-placeholder-tmp>\n <ng-container *ngTemplateOutlet=\"placeholderTmpl() ?? defaultPlaceholderTmpl\" />\n </ng-template>\n }\n\n <ng-template\n ng-multi-label-tmp\n let-items=\"items\"\n >\n <ng-container *ngTemplateOutlet=\"multiLabelTmpl() ?? defaultMultiLabelTmpl; context: { items }\" />\n </ng-template>\n\n <ng-template\n ng-option-tmp\n let-option=\"item\"\n let-selected=\"item$.selected\"\n let-index=\"index\"\n >\n @if (multiple()) {\n <input\n type=\"checkbox\"\n class=\"\n gds-margin-block-auto\n gds-margin-inline-3xs\n \"\n gds-checkbox\n [checked]=\"selected\"\n (mousedown)=\"onCheckboxChanged($event)\"\n />\n }\n <ng-container\n *ngTemplateOutlet=\"optionTmpl() ?? defaultOptionTmpl; context: { option, marked: markedIndex() === index }\"\n />\n </ng-template>\n\n @if (footerTmpl(); as footerTmpl) {\n <ng-template ng-footer-tmp>\n <div\n class=\"\n gds-height-100-parent\n gds-width-100-parent\n \"\n (mouseenter)=\"unmarkItem()\"\n >\n <ng-container *ngTemplateOutlet=\"footerTmpl\" />\n </div>\n </ng-template>\n }\n\n <ng-template ng-clearbutton-tmp>\n <span class=\"ng-clear-wrapper\">\n <ng-container *ngTemplateOutlet=\"clearBtnTmpl() ?? defaultClearBtnTmpl\" />\n </span>\n </ng-template>\n</ng-select>\n\n<ng-template\n #defaultLabelTmpl\n let-item=\"item\"\n>\n @if (value !== undefined) {\n <gds-tooltip\n onlyTextOverflow\n [tooltip]=\"item[bindLabel()]\"\n >\n {{ item[bindLabel()] }}\n </gds-tooltip>\n }\n</ng-template>\n\n<ng-template\n #defaultMultiLabelTmpl\n let-items=\"items\"\n>\n <div class=\"\n gds-align-items-center\n gds-display-inline-flex\n gds-gap-2xs\n gds-select--multi-selected-content\n \">\n <gds-tooltip\n onlyOnTextOverflow\n [tooltip]=\"items[0][bindLabel()]\"\n >\n {{ items[0][bindLabel()] }}\n </gds-tooltip>\n @if (items.length > 1) {\n <span gds-badge>+{{ items.length - 1 }}</span>\n }\n </div>\n</ng-template>\n\n<ng-template\n #defaultOptionTmpl\n let-option=\"option\"\n let-active=\"marked\"\n>\n <gds-tooltip\n class=\"option\"\n onlyTextOverflow\n [tooltip]=\"option[bindLabel()]\"\n [open]=\"active\"\n >\n {{ option[bindLabel()] }}\n </gds-tooltip>\n</ng-template>\n\n<ng-template #defaultPlaceholderTmpl>\n <span class=\"ng-placeholder\">{{ placeholder() }}</span>\n</ng-template>\n\n<ng-template #defaultClearBtnTmpl>\n <button\n #clearButton\n gds-icon-button\n class=\"gds-background-none\"\n [attr.aria-label]=\"clearAriaLabel()\"\n (click)=\"onClearClicked()\"\n (keydown.enter)=\"onClearClicked()\"\n >\n <gds-icon\n class=\"\n gds-icon-primary\n gds-icon-size-3xs\n \"\n key=\"line-dismiss\"\n />\n </button>\n</ng-template>\n", styles: ["@layer design-system{:host{--gds-form-control-cursor: pointer;--background-color: var(--gds-form-control-background-color, var(--gds-palette-background-white));--border-color: var(--gds-form-control-border-color, var(--gds-palette-border-default));--text-color: var(--gds-form-control-text-color, var(--gds-palette-text-default-primary));--active-color: var(--gds-form-control-active-color, var(--gds-palette-border-selected));--cursor: var(--gds-form-control-cursor, auto);--hover-color: var(--gds-form-control-hover-color, var(--gds-palette-background-secondary));--placeholder-color: var(--gds-form-control-placeholder-color, var(--gds-palette-text-default-placeholder));--invalid-color: var(--gds-form-control-invalid-color, var(--gds-palette-helper-error-inverse));--disabled-text-color: var(--gds-form-control-disabled-text-color, var(--gds-palette-text-default-disabled));--disabled-background-color: var( --gds-form-control-disabled-background-color, var(--gds-palette-background-disabled) );--disabled-border-color: var(--gds-form-control-disabled-border-color, var(--gds-palette-border-default))}:host[disabled],:host:has(*:disabled,*[disabled=true]){--background-color: var(--disabled-background-color);--text-color: var(--disabled-text-color);--hover-color: var(--disabled-background-color);--border-color: var(--disabled-border-color);--cursor: not-allowed}:host[invalid][touched]:not(:focus-within,.is-controlled),:host:has(input[invalid][touched],textarea[invalid][touched]):not(:focus-within,.is-controlled){--border-color: var(--invalid-color);--text-color: var(--invalid-color);--placeholder-color: var(--invalid-color);--active-color: var(--invalid-color)}:host{--arrow-url: url(\"data:image/svg+xml,%3Csvg viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M3.25 5.75L8 10.25L12.75 5.75' stroke='%231E365E' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\")}:host[invalid][touched]:not(:focus-within,.is-controlled),:host:has(input[invalid][touched],textarea[invalid][touched]):not(:focus-within,.is-controlled){--arrow-url: url(\"data:image/svg+xml,%3Csvg viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M3.25 5.75L8 10.25L12.75 5.75' stroke='%23cd2127' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\")}:host[disabled],:host:has(*:disabled,*[disabled=true]){--arrow-url: url(\"data:image/svg+xml,%3Csvg viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M3.25 5.75L8 10.25L12.75 5.75' stroke='%23b2b2b2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\");--cursor: not-allowed}:host ng-select.ng-select-clearable,:host ng-select.ng-select-hide-chevron{--arrow-display: none}:host ng-select.ng-select-opened{--arrow-url: url(\"data:image/svg+xml,%3Csvg viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.75 10.25L8 5.75L3.25 10.25' stroke='%231E365E' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\")}:host ng-select.ng-select-multiple ::ng-deep .ng-value-container{gap:var(--gds-spacing-2xs);flex-wrap:nowrap!important}:host ng-select.ng-select-multiple ::ng-deep .ng-value-container .ng-input{padding-left:0}:host ng-select ::ng-deep .ng-select-container{background-color:var(--background-color);border:.5px solid var(--border-color);color:var(--text-color);cursor:var(--cursor)!important}:host ng-select ::ng-deep .ng-select-container ::ng-deep input:focus,:host ng-select ::ng-deep .ng-select-container ::ng-deep textarea:focus{outline:none}:host ng-select ::ng-deep .ng-select-container:focus-within,:host ng-select ::ng-deep .ng-select-container.is-controlled{isolation:isolate;position:relative}:host ng-select ::ng-deep .ng-select-container:focus-within:before,:host ng-select ::ng-deep .ng-select-container.is-controlled:before{z-index:-1;content:\"\";position:absolute;inset:0;border-bottom:var(--gds-borderWidth-lg) solid var(--active-color);border-radius:var(--gds-borderRadius-xs)}:host ng-select ::ng-deep .ng-select-container{min-height:var(--gds-size-md-rem)}:is(body[isMobile=true]) :host ng-select ::ng-deep .ng-select-container{min-height:var(--gds-size-lg-rem)}:host ng-select ::ng-deep .ng-select-container:hover{background-color:var(--hover-color)}:host ng-select ::ng-deep .ng-select-container[disabled]::ng-deep svg-icon,:host ng-select ::ng-deep .ng-select-container:has(*:disabled,*[disabled=true])::ng-deep svg-icon{color:var(--disabled-text-color)}:host ng-select ::ng-deep .ng-select-container[invalid][touched]:not(:focus-within,.is-controlled)::ng-deep svg-icon,:host ng-select ::ng-deep .ng-select-container:has(input[invalid][touched],textarea[invalid][touched]):not(:focus-within,.is-controlled)::ng-deep svg-icon{color:var(--invalid-color)}:host ng-select ::ng-deep .ng-select-container ::ng-deep *::placeholder{color:var(--placeholder-color)}:host ng-select ::ng-deep .ng-select-container{border-radius:var(--gds-borderRadius-sm);padding-block:var(--gds-spacing-3xs);padding-inline:var(--gds-spacing-xs);gap:var(--gds-spacing-2xs)}:is(body[isMobile=true]) :host ng-select ::ng-deep .ng-select-container{padding-block:0}:host ng-select ::ng-deep .ng-has-value .ng-arrow-wrapper{display:var(--arrow-display);cursor:var(--cursor)}:host ng-select ::ng-deep .ng-arrow-wrapper,:host ng-select ::ng-deep .ng-clear-wrapper{width:var(--gds-size-sm-rem);height:var(--gds-size-sm-rem);display:flex;align-items:center;justify-content:center}:host ng-select ::ng-deep .ng-arrow-wrapper .ng-arrow,:host ng-select ::ng-deep .ng-clear-wrapper .ng-arrow{width:var(--gds-size-sm-rem)!important;height:var(--gds-size-sm-rem)!important;background-image:var(--arrow-url)}:host ng-select ::ng-deep .ng-arrow-wrapper .ng-clear,:host ng-select ::ng-deep .ng-clear-wrapper .ng-clear{font-size:var(--gds-fontSize-bodyLarge)}:host ng-select ::ng-deep .ng-option{display:flex!important;gap:var(--gds-spacing-3xs);padding:11px var(--gds-spacing-sm);border-radius:var(--gds-borderRadius-sm);color:var(--text-color);position:relative}:host ng-select ::ng-deep .ng-option.ng-option-marked:before{content:\"\";position:absolute;border-radius:var(--gds-borderRadius-sm);width:calc(100% - 2 * var(--wrapper-margin-inline, var(--wrapper-margin, 0px)));height:calc(100% - 2 * var(--wrapper-margin-block, var(--wrapper-margin, 0px)));top:var(--wrapper-margin-block, var(--wrapper-margin, 0px));left:var(--wrapper-margin-inline, var(--wrapper-margin, 0px));background:var(--gds-palette-background-hover);pointer-events:none;--wrapper-margin-inline: 5px;--wrapper-margin-block: 4px;z-index:-1}:host ng-select ::ng-deep .ng-value-container{overflow:hidden!important;align-items:center;height:var(--gds-primitive-lineHeight-250)}:host ng-select ::ng-deep .ng-value-container .ng-value{height:fit-content}:host ng-select ::ng-deep .ng-placeholder{color:var(--placeholder-color);white-space:nowrap;text-overflow:ellipsis;overflow:hidden;min-width:0}:host ng-select ::ng-deep .ng-option-disabled{cursor:default!important}:host ng-select ::ng-deep .ng-spinner-loader{border-left-color:var(--gds-palette-text-primary-primary)!important}.gds-select--multi-selected-content{color:var(--gds-palette-text-default-primary);font:var(--gds-text-body-shorthand);min-width:0}}\n"] }]
6933
- }], propDecorators: { clearable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearable", required: false }] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], appendTo: [{ type: i0.Input, args: [{ isSignal: true, alias: "appendTo", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], loadingText: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingText", required: false }] }], clearAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearAriaLabel", required: false }] }], autofocus: [{ type: i0.Input, args: [{ isSignal: true, alias: "autofocus", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], hideChevron: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideChevron", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], emptyText: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyText", required: false }] }], dropdownPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "dropdownPosition", required: false }] }], changed: [{ type: i0.Output, args: ["changed"] }], searched: [{ type: i0.Output, args: ["searched"] }], blurred: [{ type: i0.Output, args: ["blurred"] }], cleared: [{ type: i0.Output, args: ["cleared"] }], closed: [{ type: i0.Output, args: ["closed"] }], opened: [{ type: i0.Output, args: ["opened"] }], bindValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindValue", required: false }] }, { type: i0.Output, args: ["bindValueChange"] }], bindLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindLabel", required: false }] }, { type: i0.Output, args: ["bindLabelChange"] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: true }] }, { type: i0.Output, args: ["itemsChange"] }], ref: [{ type: i0.ViewChild, args: [i0.forwardRef(() => NgSelectComponent), { isSignal: true }] }], clearButton: [{ type: i0.ViewChild, args: ['clearButton', { ...{
7285
+ }], propDecorators: { clearable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearable", required: false }] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], appendTo: [{ type: i0.Input, args: [{ isSignal: true, alias: "appendTo", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], loadingText: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingText", required: false }] }], clearAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearAriaLabel", required: false }] }], autofocus: [{ type: i0.Input, args: [{ isSignal: true, alias: "autofocus", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], hideChevron: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideChevron", required: false }] }], preventMobileDialog: [{ type: i0.Input, args: [{ isSignal: true, alias: "preventMobileDialog", required: false }] }], dialogTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "dialogTitle", required: false }] }], applyLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "applyLabel", required: false }] }], searchPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchPlaceholder", required: false }] }], backAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "backAriaLabel", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], emptyText: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyText", required: false }] }], dropdownPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "dropdownPosition", required: false }] }], changed: [{ type: i0.Output, args: ["changed"] }], searched: [{ type: i0.Output, args: ["searched"] }], blurred: [{ type: i0.Output, args: ["blurred"] }], cleared: [{ type: i0.Output, args: ["cleared"] }], closed: [{ type: i0.Output, args: ["closed"] }], opened: [{ type: i0.Output, args: ["opened"] }], bindValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindValue", required: false }] }, { type: i0.Output, args: ["bindValueChange"] }], bindLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindLabel", required: false }] }, { type: i0.Output, args: ["bindLabelChange"] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: true }] }, { type: i0.Output, args: ["itemsChange"] }], ref: [{ type: i0.ViewChild, args: [i0.forwardRef(() => NgSelectComponent), { isSignal: true }] }], clearButton: [{ type: i0.ViewChild, args: ['clearButton', { ...{
6934
7286
  read: (ElementRef)
6935
7287
  }, isSignal: true }] }], multiLabelTmpl: [{ type: i0.ContentChild, args: ['multiLabelTmpl', { isSignal: true }] }], labelTmpl: [{ type: i0.ContentChild, args: ['labelTmpl', { isSignal: true }] }], optionTmpl: [{ type: i0.ContentChild, args: ['optionTmpl', { isSignal: true }] }], footerTmpl: [{ type: i0.ContentChild, args: ['footerTmpl', { isSignal: true }] }], clearBtnTmpl: [{ type: i0.ContentChild, args: ['clearBtnTmpl', { isSignal: true }] }], placeholderTmpl: [{ type: i0.ContentChild, args: ['placeholderTmpl', { isSignal: true }] }] } });
6936
7288