@ds-mo/ui 14.16.0 → 14.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.package-ready.json +1 -1
- package/dist/agent-patterns.json +1 -1
- package/dist/agent.json +167 -11
- package/dist/angular/ds-table-filter.d.ts +44 -0
- package/dist/angular/ds-table-filter.js +57 -0
- package/dist/angular/index.d.ts +1 -1
- package/dist/angular/index.js +1 -0
- package/dist/angular/proxies.d.ts +1 -0
- package/dist/angular/proxies.js +1 -0
- package/dist/components/ds-agent-questionnaire.js +1 -1
- package/dist/components/ds-agent-response.js +1 -1
- package/dist/components/ds-banner.js +1 -1
- package/dist/components/ds-bar-nav.js +1 -1
- package/dist/components/ds-bar-title.js +1 -1
- package/dist/components/ds-bar-workflow.js +1 -1
- package/dist/components/ds-button-unfilled.js +1 -1
- package/dist/components/ds-card-chart.js +1 -1
- package/dist/components/ds-card-overview.js +1 -1
- package/dist/components/ds-card-setting.js +1 -1
- package/dist/components/ds-chart.js +1 -1
- package/dist/components/ds-code-block.js +1 -1
- package/dist/components/ds-filter-menu.js +1 -1
- package/dist/components/ds-filter-menu.js.map +1 -1
- package/dist/components/ds-input.js +1 -1
- package/dist/components/ds-markdown.js +1 -1
- package/dist/components/ds-menu.js +1 -1
- package/dist/components/ds-message-actions.js +1 -1
- package/dist/components/ds-message-composer.js +1 -1
- package/dist/components/ds-message-scroller.js +1 -1
- package/dist/components/ds-mobile-header.js +1 -1
- package/dist/components/ds-mobile-section-switcher.js +1 -1
- package/dist/components/ds-mobile-sheet-nav.js +1 -1
- package/dist/components/ds-modal.js +1 -1
- package/dist/components/ds-pagination.js +1 -1
- package/dist/components/ds-panel-nav.js +1 -1
- package/dist/components/ds-panel-tool-header.js +1 -1
- package/dist/components/ds-panel-tool-search.js +1 -1
- package/dist/components/ds-panel-tools.js +1 -1
- package/dist/components/ds-select.js +1 -1
- package/dist/components/ds-shell-app.js +1 -1
- package/dist/components/ds-shell-tools.js +1 -1
- package/dist/components/ds-table-filter.d.ts +11 -0
- package/dist/components/ds-table-filter.js +2 -0
- package/dist/components/ds-table-filter.js.map +1 -0
- package/dist/components/ds-table-saved-views.js +1 -1
- package/dist/components/ds-table-sort.js +1 -1
- package/dist/components/ds-table-sort.js.map +1 -1
- package/dist/components/ds-table-toolbar.js +1 -1
- package/dist/components/ds-table-toolbar.js.map +1 -1
- package/dist/components/ds-table.js +1 -1
- package/dist/components/ds-toast.js +1 -1
- package/dist/components/ds-tooltip-chart.js +1 -1
- package/dist/components/ds-tooltip.js +1 -1
- package/dist/components/ds-typing-indicator.js +1 -1
- package/dist/components/{p-3dYwA4i_.js → p-Asi9h3pa.js} +2 -2
- package/dist/components/p-BFSLT0yc.js +2 -0
- package/dist/components/p-BFSLT0yc.js.map +1 -0
- package/dist/components/{p-C4p2i59V.js → p-BHz78C8h.js} +2 -2
- package/dist/components/{p-Dcnd5ZX5.js → p-BKp__CQX.js} +2 -2
- package/dist/components/{p-Ct2GVdSI.js → p-Be1sY58w.js} +2 -2
- package/dist/components/{p-vzxD117T.js → p-Bh67XbfB.js} +2 -2
- package/dist/components/{p-C_TOgX82.js → p-Bn8NryHK.js} +2 -2
- package/dist/components/{p-CaAZ-D08.js → p-C4TgWJi9.js} +2 -2
- package/dist/components/{p-COVcyUAA.js → p-CKmfuK7k.js} +2 -2
- package/dist/components/p-CKmfuK7k.js.map +1 -0
- package/dist/components/{p-EWI6ccs-.js → p-CMFvaY05.js} +2 -2
- package/dist/components/{p-BK-JjdoN.js → p-D4K9CE8a.js} +2 -2
- package/dist/components/{p-CxBE3l74.js → p-DEjh3klB.js} +2 -2
- package/dist/components/{p-NdahPypA.js → p-DFQ9mcbK.js} +2 -2
- package/dist/components/{p-WGZWqh-B.js → p-DHuyj-9J.js} +2 -2
- package/dist/components/{p-BUhShHfb.js → p-DIEK54fV.js} +2 -2
- package/dist/components/p-DOqnJVos.js +2 -0
- package/dist/components/{p-CwkcFMMe.js.map → p-DOqnJVos.js.map} +1 -1
- package/dist/components/{p-DRBTr6TS.js → p-DZ55e3j9.js} +2 -2
- package/dist/components/{p-MxptXwlW.js → p-DsJW5W3W.js} +2 -2
- package/dist/components/p-JPTkZ3Ji.js.map +1 -1
- package/dist/components/{p-DAV32g35.js → p-NzGRAPcF.js} +2 -2
- package/dist/components/p-NzGRAPcF.js.map +1 -0
- package/dist/components/{p-BUrbVZJU.js → p-ZZzC52Ea.js} +2 -2
- package/dist/components/{p-C91izpHV.js → p-__lNIImO.js} +2 -2
- package/dist/components/{p-0IbKxhqM.js → p-rrFMAZkj.js} +2 -2
- package/dist/components/{p-Cr2VT5zv.js → p-ruPTIV6t.js} +2 -2
- package/dist/docs/components.json +435 -6
- package/dist/mcp-data/registry/button-unfilled.json +3 -3
- package/dist/mcp-data/registry/filter-menu.json +5 -5
- package/dist/mcp-data/registry/loader.json +2 -1
- package/dist/mcp-data/registry/registry.json +169 -10
- package/dist/mcp-data/registry/select.json +1 -1
- package/dist/mcp-data/registry/table-filter.json +399 -0
- package/dist/mcp-data/registry/table-saved-views.json +1 -1
- package/dist/mcp-data/registry/table-sort.json +2 -2
- package/dist/mcp-data/registry/table-toolbar.json +9 -9
- package/dist/mcp-data/registry/table.json +1 -0
- package/dist/react/components.d.ts +1 -0
- package/dist/react/components.js +1 -0
- package/dist/react/ds-table-filter.d.ts +17 -0
- package/dist/react/ds-table-filter.js +19 -0
- package/dist/types/components/ButtonUnfilled/ButtonUnfilled.d.ts +2 -0
- package/dist/types/components/FilterMenu/FilterMenu.d.ts +2 -0
- package/dist/types/components/Select/Select.d.ts +2 -0
- package/dist/types/components/TableFilter/TableFilter.d.ts +37 -0
- package/dist/types/components/TableToolbar/TableToolbar.d.ts +0 -6
- package/dist/types/components.d.ts +160 -4
- package/dist/vue/components.d.ts +1 -0
- package/dist/vue/components.js +1 -0
- package/dist/vue/ds-table-filter.d.ts +3 -0
- package/dist/vue/ds-table-filter.js +29 -0
- package/package.json +1 -1
- package/dist/components/p-COVcyUAA.js.map +0 -1
- package/dist/components/p-CwkcFMMe.js +0 -2
- package/dist/components/p-DAV32g35.js.map +0 -1
- /package/dist/components/{p-3dYwA4i_.js.map → p-Asi9h3pa.js.map} +0 -0
- /package/dist/components/{p-C4p2i59V.js.map → p-BHz78C8h.js.map} +0 -0
- /package/dist/components/{p-Dcnd5ZX5.js.map → p-BKp__CQX.js.map} +0 -0
- /package/dist/components/{p-Ct2GVdSI.js.map → p-Be1sY58w.js.map} +0 -0
- /package/dist/components/{p-vzxD117T.js.map → p-Bh67XbfB.js.map} +0 -0
- /package/dist/components/{p-C_TOgX82.js.map → p-Bn8NryHK.js.map} +0 -0
- /package/dist/components/{p-CaAZ-D08.js.map → p-C4TgWJi9.js.map} +0 -0
- /package/dist/components/{p-EWI6ccs-.js.map → p-CMFvaY05.js.map} +0 -0
- /package/dist/components/{p-BK-JjdoN.js.map → p-D4K9CE8a.js.map} +0 -0
- /package/dist/components/{p-CxBE3l74.js.map → p-DEjh3klB.js.map} +0 -0
- /package/dist/components/{p-NdahPypA.js.map → p-DFQ9mcbK.js.map} +0 -0
- /package/dist/components/{p-WGZWqh-B.js.map → p-DHuyj-9J.js.map} +0 -0
- /package/dist/components/{p-BUhShHfb.js.map → p-DIEK54fV.js.map} +0 -0
- /package/dist/components/{p-DRBTr6TS.js.map → p-DZ55e3j9.js.map} +0 -0
- /package/dist/components/{p-MxptXwlW.js.map → p-DsJW5W3W.js.map} +0 -0
- /package/dist/components/{p-BUrbVZJU.js.map → p-ZZzC52Ea.js.map} +0 -0
- /package/dist/components/{p-C91izpHV.js.map → p-__lNIImO.js.map} +0 -0
- /package/dist/components/{p-0IbKxhqM.js.map → p-rrFMAZkj.js.map} +0 -0
- /package/dist/components/{p-Cr2VT5zv.js.map → p-ruPTIV6t.js.map} +0 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { EventEmitter } from '../../stencil-public-runtime';
|
|
2
|
+
import type { FilterMenuChangeDetail, FilterMenuFilter, FilterMenuValues } from '../FilterMenu/FilterMenu';
|
|
3
|
+
export declare class TableFilter {
|
|
4
|
+
/** Controlled popup visibility. */
|
|
5
|
+
open: boolean;
|
|
6
|
+
/** Product-owned filter categories and option definitions. */
|
|
7
|
+
filters: FilterMenuFilter[];
|
|
8
|
+
/** Controlled values keyed by filter id. */
|
|
9
|
+
values: FilterMenuValues;
|
|
10
|
+
/** Controlled category shown in the option pane. */
|
|
11
|
+
activeFilterId: string | undefined;
|
|
12
|
+
/** Visible trigger label. */
|
|
13
|
+
label: string;
|
|
14
|
+
/** Accessible name for the trigger. Defaults to Filter table. */
|
|
15
|
+
ariaLabel: string | null;
|
|
16
|
+
/** Accessible name for the non-modal filter dialog. Defaults to the trigger name. */
|
|
17
|
+
menuLabel: string | null;
|
|
18
|
+
/** Accessible name for the category tab list. */
|
|
19
|
+
categoriesLabel: string;
|
|
20
|
+
/** Footer action and date-clear accessible label. */
|
|
21
|
+
clearLabel: string;
|
|
22
|
+
/** Requests a controlled value replacement without closing the popup. */
|
|
23
|
+
dsChange: EventEmitter<FilterMenuChangeDetail>;
|
|
24
|
+
/** Requests that the consumer clear every filter value. */
|
|
25
|
+
dsClear: EventEmitter<void>;
|
|
26
|
+
/** Requests a controlled active-category replacement. */
|
|
27
|
+
dsActiveFilterChange: EventEmitter<string>;
|
|
28
|
+
/** Requests that the controlled popup close. */
|
|
29
|
+
dsClose: EventEmitter<void>;
|
|
30
|
+
/** Emitted whenever trigger activation changes popup visibility. */
|
|
31
|
+
dsOpenChange: EventEmitter<boolean>;
|
|
32
|
+
/** Emitted after exit motion and rendered popup removal complete. */
|
|
33
|
+
dsAfterClose: EventEmitter<void>;
|
|
34
|
+
render(): any;
|
|
35
|
+
private forward;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=TableFilter.d.ts.map
|
|
@@ -1,12 +1,6 @@
|
|
|
1
1
|
export declare class TableToolbar {
|
|
2
|
-
private el;
|
|
3
2
|
/** Accessible name for the grouped table controls. */
|
|
4
3
|
label: string;
|
|
5
|
-
private captionControlObserver;
|
|
6
|
-
componentDidLoad(): void;
|
|
7
|
-
disconnectedCallback(): void;
|
|
8
4
|
render(): any;
|
|
9
|
-
private connectCaptionControlObserver;
|
|
10
|
-
private syncCaptionControls;
|
|
11
5
|
}
|
|
12
6
|
//# sourceMappingURL=TableToolbar.d.ts.map
|
|
@@ -66,6 +66,7 @@ import { SwatchPickerOption, SwatchPickerSection } from "./components/SwatchPick
|
|
|
66
66
|
import { SwitchSize } from "./components/Switch/Switch";
|
|
67
67
|
import { TabBackground, TabGroupSize as TabGroupSize1, TabGroupWidth } from "./components/TabGroup/TabGroup";
|
|
68
68
|
import { TableCaptionVisibility, TableCellActionDetail, TableColumn, TableColumnsConfigChangeDetail, TableDataMode, TableDataModeChangeDetail, TableGroup, TableGroupCollapseChangeDetail, TableGroupingState, TableGroupLoadMoreDetail, TableLoadMoreDetail, TableLoadMoreMode, TablePaginationState, TableRow, TableRowActivateDetail, TableSelectionChangeDetail, TableSelectionMode, TableSortChangeDetail, TableSortState } from "./components/Table/table-types";
|
|
69
|
+
import { FilterMenuChangeDetail as FilterMenuChangeDetail1, FilterMenuFilter as FilterMenuFilter1, FilterMenuValues as FilterMenuValues1 } from "./components/FilterMenu/FilterMenu";
|
|
69
70
|
import { TableSavedView, TableSavedViewChangeDetail, TableSavedViewCreateDetail, TableSavedViewDiscardDetail, TableSavedViewRemoveDetail, TableSavedViewRenameDetail, TableSavedViewSaveDetail } from "./components/TableSavedViews/table-saved-views-types";
|
|
70
71
|
import { TagContrast, TagIntent, TagSize } from "./components/Tag/Tag";
|
|
71
72
|
import { ToastActionEventDetail, ToastCloseEventDetail, ToastEventDetail, ToastManager, ToastSwipeDirection } from "./toast";
|
|
@@ -132,6 +133,7 @@ export { SwatchPickerOption, SwatchPickerSection } from "./components/SwatchPick
|
|
|
132
133
|
export { SwitchSize } from "./components/Switch/Switch";
|
|
133
134
|
export { TabBackground, TabGroupSize as TabGroupSize1, TabGroupWidth } from "./components/TabGroup/TabGroup";
|
|
134
135
|
export { TableCaptionVisibility, TableCellActionDetail, TableColumn, TableColumnsConfigChangeDetail, TableDataMode, TableDataModeChangeDetail, TableGroup, TableGroupCollapseChangeDetail, TableGroupingState, TableGroupLoadMoreDetail, TableLoadMoreDetail, TableLoadMoreMode, TablePaginationState, TableRow, TableRowActivateDetail, TableSelectionChangeDetail, TableSelectionMode, TableSortChangeDetail, TableSortState } from "./components/Table/table-types";
|
|
136
|
+
export { FilterMenuChangeDetail as FilterMenuChangeDetail1, FilterMenuFilter as FilterMenuFilter1, FilterMenuValues as FilterMenuValues1 } from "./components/FilterMenu/FilterMenu";
|
|
135
137
|
export { TableSavedView, TableSavedViewChangeDetail, TableSavedViewCreateDetail, TableSavedViewDiscardDetail, TableSavedViewRemoveDetail, TableSavedViewRenameDetail, TableSavedViewSaveDetail } from "./components/TableSavedViews/table-saved-views-types";
|
|
136
138
|
export { TagContrast, TagIntent, TagSize } from "./components/Tag/Tag";
|
|
137
139
|
export { ToastActionEventDetail, ToastCloseEventDetail, ToastEventDetail, ToastManager, ToastSwipeDirection } from "./toast";
|
|
@@ -1258,7 +1260,7 @@ export namespace Components {
|
|
|
1258
1260
|
"inputId": string | undefined;
|
|
1259
1261
|
/**
|
|
1260
1262
|
* Accessible name for the non-modal filter dialog.
|
|
1261
|
-
* @default '
|
|
1263
|
+
* @default 'Filters'
|
|
1262
1264
|
*/
|
|
1263
1265
|
"menuLabel": string;
|
|
1264
1266
|
/**
|
|
@@ -1288,7 +1290,7 @@ export namespace Components {
|
|
|
1288
1290
|
"size": FilterMenuSize;
|
|
1289
1291
|
/**
|
|
1290
1292
|
* Select trigger text. The selected count is appended automatically.
|
|
1291
|
-
* @default '
|
|
1293
|
+
* @default 'Filters'
|
|
1292
1294
|
*/
|
|
1293
1295
|
"triggerLabel": string;
|
|
1294
1296
|
/**
|
|
@@ -3150,6 +3152,52 @@ export namespace Components {
|
|
|
3150
3152
|
*/
|
|
3151
3153
|
"virtualModeLabel": string;
|
|
3152
3154
|
}
|
|
3155
|
+
interface DsTableFilter {
|
|
3156
|
+
/**
|
|
3157
|
+
* Controlled category shown in the option pane.
|
|
3158
|
+
*/
|
|
3159
|
+
"activeFilterId": string | undefined;
|
|
3160
|
+
/**
|
|
3161
|
+
* Accessible name for the trigger. Defaults to Filter table.
|
|
3162
|
+
* @default null
|
|
3163
|
+
*/
|
|
3164
|
+
"ariaLabel": string | null;
|
|
3165
|
+
/**
|
|
3166
|
+
* Accessible name for the category tab list.
|
|
3167
|
+
* @default 'Filter categories'
|
|
3168
|
+
*/
|
|
3169
|
+
"categoriesLabel": string;
|
|
3170
|
+
/**
|
|
3171
|
+
* Footer action and date-clear accessible label.
|
|
3172
|
+
* @default 'Clear'
|
|
3173
|
+
*/
|
|
3174
|
+
"clearLabel": string;
|
|
3175
|
+
/**
|
|
3176
|
+
* Product-owned filter categories and option definitions.
|
|
3177
|
+
* @default []
|
|
3178
|
+
*/
|
|
3179
|
+
"filters": FilterMenuFilter1[];
|
|
3180
|
+
/**
|
|
3181
|
+
* Visible trigger label.
|
|
3182
|
+
* @default 'Filter'
|
|
3183
|
+
*/
|
|
3184
|
+
"label": string;
|
|
3185
|
+
/**
|
|
3186
|
+
* Accessible name for the non-modal filter dialog. Defaults to the trigger name.
|
|
3187
|
+
* @default null
|
|
3188
|
+
*/
|
|
3189
|
+
"menuLabel": string | null;
|
|
3190
|
+
/**
|
|
3191
|
+
* Controlled popup visibility.
|
|
3192
|
+
* @default false
|
|
3193
|
+
*/
|
|
3194
|
+
"open": boolean;
|
|
3195
|
+
/**
|
|
3196
|
+
* Controlled values keyed by filter id.
|
|
3197
|
+
* @default {}
|
|
3198
|
+
*/
|
|
3199
|
+
"values": FilterMenuValues1;
|
|
3200
|
+
}
|
|
3153
3201
|
interface DsTableSavedViews {
|
|
3154
3202
|
/**
|
|
3155
3203
|
* Footer action label that opens the create-view dialog.
|
|
@@ -3660,6 +3708,10 @@ export interface DsTableCustomEvent<T> extends CustomEvent<T> {
|
|
|
3660
3708
|
detail: T;
|
|
3661
3709
|
target: HTMLDsTableElement;
|
|
3662
3710
|
}
|
|
3711
|
+
export interface DsTableFilterCustomEvent<T> extends CustomEvent<T> {
|
|
3712
|
+
detail: T;
|
|
3713
|
+
target: HTMLDsTableFilterElement;
|
|
3714
|
+
}
|
|
3663
3715
|
export interface DsTableSavedViewsCustomEvent<T> extends CustomEvent<T> {
|
|
3664
3716
|
detail: T;
|
|
3665
3717
|
target: HTMLDsTableSavedViewsElement;
|
|
@@ -4681,6 +4733,28 @@ declare global {
|
|
|
4681
4733
|
prototype: HTMLDsTableElement;
|
|
4682
4734
|
new (): HTMLDsTableElement;
|
|
4683
4735
|
};
|
|
4736
|
+
interface HTMLDsTableFilterElementEventMap {
|
|
4737
|
+
"dsChange": FilterMenuChangeDetail1;
|
|
4738
|
+
"dsClear": void;
|
|
4739
|
+
"dsActiveFilterChange": string;
|
|
4740
|
+
"dsClose": void;
|
|
4741
|
+
"dsOpenChange": boolean;
|
|
4742
|
+
"dsAfterClose": void;
|
|
4743
|
+
}
|
|
4744
|
+
interface HTMLDsTableFilterElement extends Components.DsTableFilter, HTMLStencilElement {
|
|
4745
|
+
addEventListener<K extends keyof HTMLDsTableFilterElementEventMap>(type: K, listener: (this: HTMLDsTableFilterElement, ev: DsTableFilterCustomEvent<HTMLDsTableFilterElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
|
|
4746
|
+
addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
|
|
4747
|
+
addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
|
|
4748
|
+
addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
|
|
4749
|
+
removeEventListener<K extends keyof HTMLDsTableFilterElementEventMap>(type: K, listener: (this: HTMLDsTableFilterElement, ev: DsTableFilterCustomEvent<HTMLDsTableFilterElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
|
|
4750
|
+
removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
|
|
4751
|
+
removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
|
|
4752
|
+
removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
|
|
4753
|
+
}
|
|
4754
|
+
var HTMLDsTableFilterElement: {
|
|
4755
|
+
prototype: HTMLDsTableFilterElement;
|
|
4756
|
+
new (): HTMLDsTableFilterElement;
|
|
4757
|
+
};
|
|
4684
4758
|
interface HTMLDsTableSavedViewsElementEventMap {
|
|
4685
4759
|
"dsViewChange": TableSavedViewChangeDetail;
|
|
4686
4760
|
"dsViewCreate": TableSavedViewCreateDetail;
|
|
@@ -4872,6 +4946,7 @@ declare global {
|
|
|
4872
4946
|
"ds-switch": HTMLDsSwitchElement;
|
|
4873
4947
|
"ds-tab-group": HTMLDsTabGroupElement;
|
|
4874
4948
|
"ds-table": HTMLDsTableElement;
|
|
4949
|
+
"ds-table-filter": HTMLDsTableFilterElement;
|
|
4875
4950
|
"ds-table-saved-views": HTMLDsTableSavedViewsElement;
|
|
4876
4951
|
"ds-table-sort": HTMLDsTableSortElement;
|
|
4877
4952
|
"ds-table-toolbar": HTMLDsTableToolbarElement;
|
|
@@ -6095,7 +6170,7 @@ declare namespace LocalJSX {
|
|
|
6095
6170
|
"inputId"?: string | undefined;
|
|
6096
6171
|
/**
|
|
6097
6172
|
* Accessible name for the non-modal filter dialog.
|
|
6098
|
-
* @default '
|
|
6173
|
+
* @default 'Filters'
|
|
6099
6174
|
*/
|
|
6100
6175
|
"menuLabel"?: string;
|
|
6101
6176
|
/**
|
|
@@ -6149,7 +6224,7 @@ declare namespace LocalJSX {
|
|
|
6149
6224
|
"size"?: FilterMenuSize;
|
|
6150
6225
|
/**
|
|
6151
6226
|
* Select trigger text. The selected count is appended automatically.
|
|
6152
|
-
* @default '
|
|
6227
|
+
* @default 'Filters'
|
|
6153
6228
|
*/
|
|
6154
6229
|
"triggerLabel"?: string;
|
|
6155
6230
|
/**
|
|
@@ -8181,6 +8256,76 @@ declare namespace LocalJSX {
|
|
|
8181
8256
|
*/
|
|
8182
8257
|
"virtualModeLabel"?: string;
|
|
8183
8258
|
}
|
|
8259
|
+
interface DsTableFilter {
|
|
8260
|
+
/**
|
|
8261
|
+
* Controlled category shown in the option pane.
|
|
8262
|
+
*/
|
|
8263
|
+
"activeFilterId"?: string | undefined;
|
|
8264
|
+
/**
|
|
8265
|
+
* Accessible name for the trigger. Defaults to Filter table.
|
|
8266
|
+
* @default null
|
|
8267
|
+
*/
|
|
8268
|
+
"ariaLabel"?: string | null;
|
|
8269
|
+
/**
|
|
8270
|
+
* Accessible name for the category tab list.
|
|
8271
|
+
* @default 'Filter categories'
|
|
8272
|
+
*/
|
|
8273
|
+
"categoriesLabel"?: string;
|
|
8274
|
+
/**
|
|
8275
|
+
* Footer action and date-clear accessible label.
|
|
8276
|
+
* @default 'Clear'
|
|
8277
|
+
*/
|
|
8278
|
+
"clearLabel"?: string;
|
|
8279
|
+
/**
|
|
8280
|
+
* Product-owned filter categories and option definitions.
|
|
8281
|
+
* @default []
|
|
8282
|
+
*/
|
|
8283
|
+
"filters"?: FilterMenuFilter1[];
|
|
8284
|
+
/**
|
|
8285
|
+
* Visible trigger label.
|
|
8286
|
+
* @default 'Filter'
|
|
8287
|
+
*/
|
|
8288
|
+
"label"?: string;
|
|
8289
|
+
/**
|
|
8290
|
+
* Accessible name for the non-modal filter dialog. Defaults to the trigger name.
|
|
8291
|
+
* @default null
|
|
8292
|
+
*/
|
|
8293
|
+
"menuLabel"?: string | null;
|
|
8294
|
+
/**
|
|
8295
|
+
* Requests a controlled active-category replacement.
|
|
8296
|
+
*/
|
|
8297
|
+
"onDsActiveFilterChange"?: (event: DsTableFilterCustomEvent<string>) => void;
|
|
8298
|
+
/**
|
|
8299
|
+
* Emitted after exit motion and rendered popup removal complete.
|
|
8300
|
+
*/
|
|
8301
|
+
"onDsAfterClose"?: (event: DsTableFilterCustomEvent<void>) => void;
|
|
8302
|
+
/**
|
|
8303
|
+
* Requests a controlled value replacement without closing the popup.
|
|
8304
|
+
*/
|
|
8305
|
+
"onDsChange"?: (event: DsTableFilterCustomEvent<FilterMenuChangeDetail1>) => void;
|
|
8306
|
+
/**
|
|
8307
|
+
* Requests that the consumer clear every filter value.
|
|
8308
|
+
*/
|
|
8309
|
+
"onDsClear"?: (event: DsTableFilterCustomEvent<void>) => void;
|
|
8310
|
+
/**
|
|
8311
|
+
* Requests that the controlled popup close.
|
|
8312
|
+
*/
|
|
8313
|
+
"onDsClose"?: (event: DsTableFilterCustomEvent<void>) => void;
|
|
8314
|
+
/**
|
|
8315
|
+
* Emitted whenever trigger activation changes popup visibility.
|
|
8316
|
+
*/
|
|
8317
|
+
"onDsOpenChange"?: (event: DsTableFilterCustomEvent<boolean>) => void;
|
|
8318
|
+
/**
|
|
8319
|
+
* Controlled popup visibility.
|
|
8320
|
+
* @default false
|
|
8321
|
+
*/
|
|
8322
|
+
"open"?: boolean;
|
|
8323
|
+
/**
|
|
8324
|
+
* Controlled values keyed by filter id.
|
|
8325
|
+
* @default {}
|
|
8326
|
+
*/
|
|
8327
|
+
"values"?: FilterMenuValues1;
|
|
8328
|
+
}
|
|
8184
8329
|
interface DsTableSavedViews {
|
|
8185
8330
|
/**
|
|
8186
8331
|
* Footer action label that opens the create-view dialog.
|
|
@@ -9231,6 +9376,15 @@ declare namespace LocalJSX {
|
|
|
9231
9376
|
"groupEndOfResultsLabel": string;
|
|
9232
9377
|
"groupRowsLoadedLabel": string;
|
|
9233
9378
|
}
|
|
9379
|
+
interface DsTableFilterAttributes {
|
|
9380
|
+
"open": boolean;
|
|
9381
|
+
"activeFilterId": string | undefined;
|
|
9382
|
+
"label": string;
|
|
9383
|
+
"ariaLabel": string | null;
|
|
9384
|
+
"menuLabel": string | null;
|
|
9385
|
+
"categoriesLabel": string;
|
|
9386
|
+
"clearLabel": string;
|
|
9387
|
+
}
|
|
9234
9388
|
interface DsTableSavedViewsAttributes {
|
|
9235
9389
|
"value": string;
|
|
9236
9390
|
"dirty": boolean;
|
|
@@ -9374,6 +9528,7 @@ declare namespace LocalJSX {
|
|
|
9374
9528
|
"ds-switch": Omit<DsSwitch, keyof DsSwitchAttributes> & { [K in keyof DsSwitch & keyof DsSwitchAttributes]?: DsSwitch[K] } & { [K in keyof DsSwitch & keyof DsSwitchAttributes as `attr:${K}`]?: DsSwitchAttributes[K] } & { [K in keyof DsSwitch & keyof DsSwitchAttributes as `prop:${K}`]?: DsSwitch[K] };
|
|
9375
9529
|
"ds-tab-group": Omit<DsTabGroup, keyof DsTabGroupAttributes> & { [K in keyof DsTabGroup & keyof DsTabGroupAttributes]?: DsTabGroup[K] } & { [K in keyof DsTabGroup & keyof DsTabGroupAttributes as `attr:${K}`]?: DsTabGroupAttributes[K] } & { [K in keyof DsTabGroup & keyof DsTabGroupAttributes as `prop:${K}`]?: DsTabGroup[K] };
|
|
9376
9530
|
"ds-table": Omit<DsTable, keyof DsTableAttributes> & { [K in keyof DsTable & keyof DsTableAttributes]?: DsTable[K] } & { [K in keyof DsTable & keyof DsTableAttributes as `attr:${K}`]?: DsTableAttributes[K] } & { [K in keyof DsTable & keyof DsTableAttributes as `prop:${K}`]?: DsTable[K] } & OneOf<"caption", DsTable["caption"], DsTableAttributes["caption"]>;
|
|
9531
|
+
"ds-table-filter": Omit<DsTableFilter, keyof DsTableFilterAttributes> & { [K in keyof DsTableFilter & keyof DsTableFilterAttributes]?: DsTableFilter[K] } & { [K in keyof DsTableFilter & keyof DsTableFilterAttributes as `attr:${K}`]?: DsTableFilterAttributes[K] } & { [K in keyof DsTableFilter & keyof DsTableFilterAttributes as `prop:${K}`]?: DsTableFilter[K] };
|
|
9377
9532
|
"ds-table-saved-views": Omit<DsTableSavedViews, keyof DsTableSavedViewsAttributes> & { [K in keyof DsTableSavedViews & keyof DsTableSavedViewsAttributes]?: DsTableSavedViews[K] } & { [K in keyof DsTableSavedViews & keyof DsTableSavedViewsAttributes as `attr:${K}`]?: DsTableSavedViewsAttributes[K] } & { [K in keyof DsTableSavedViews & keyof DsTableSavedViewsAttributes as `prop:${K}`]?: DsTableSavedViews[K] };
|
|
9378
9533
|
"ds-table-sort": Omit<DsTableSort, keyof DsTableSortAttributes> & { [K in keyof DsTableSort & keyof DsTableSortAttributes]?: DsTableSort[K] } & { [K in keyof DsTableSort & keyof DsTableSortAttributes as `attr:${K}`]?: DsTableSortAttributes[K] } & { [K in keyof DsTableSort & keyof DsTableSortAttributes as `prop:${K}`]?: DsTableSort[K] };
|
|
9379
9534
|
"ds-table-toolbar": Omit<DsTableToolbar, keyof DsTableToolbarAttributes> & { [K in keyof DsTableToolbar & keyof DsTableToolbarAttributes]?: DsTableToolbar[K] } & { [K in keyof DsTableToolbar & keyof DsTableToolbarAttributes as `attr:${K}`]?: DsTableToolbarAttributes[K] } & { [K in keyof DsTableToolbar & keyof DsTableToolbarAttributes as `prop:${K}`]?: DsTableToolbar[K] };
|
|
@@ -9470,6 +9625,7 @@ declare module "@stencil/core" {
|
|
|
9470
9625
|
"ds-switch": LocalJSX.IntrinsicElements["ds-switch"] & JSXBase.HTMLAttributes<HTMLDsSwitchElement>;
|
|
9471
9626
|
"ds-tab-group": LocalJSX.IntrinsicElements["ds-tab-group"] & JSXBase.HTMLAttributes<HTMLDsTabGroupElement>;
|
|
9472
9627
|
"ds-table": LocalJSX.IntrinsicElements["ds-table"] & JSXBase.HTMLAttributes<HTMLDsTableElement>;
|
|
9628
|
+
"ds-table-filter": LocalJSX.IntrinsicElements["ds-table-filter"] & JSXBase.HTMLAttributes<HTMLDsTableFilterElement>;
|
|
9473
9629
|
"ds-table-saved-views": LocalJSX.IntrinsicElements["ds-table-saved-views"] & JSXBase.HTMLAttributes<HTMLDsTableSavedViewsElement>;
|
|
9474
9630
|
"ds-table-sort": LocalJSX.IntrinsicElements["ds-table-sort"] & JSXBase.HTMLAttributes<HTMLDsTableSortElement>;
|
|
9475
9631
|
"ds-table-toolbar": LocalJSX.IntrinsicElements["ds-table-toolbar"] & JSXBase.HTMLAttributes<HTMLDsTableToolbarElement>;
|
package/dist/vue/components.d.ts
CHANGED
|
@@ -67,6 +67,7 @@ export { DsSwatchPicker } from './ds-swatch-picker.js';
|
|
|
67
67
|
export { DsSwitch } from './ds-switch.js';
|
|
68
68
|
export { DsTabGroup } from './ds-tab-group.js';
|
|
69
69
|
export { DsTable } from './ds-table.js';
|
|
70
|
+
export { DsTableFilter } from './ds-table-filter.js';
|
|
70
71
|
export { DsTableSavedViews } from './ds-table-saved-views.js';
|
|
71
72
|
export { DsTableSort } from './ds-table-sort.js';
|
|
72
73
|
export { DsTableToolbar } from './ds-table-toolbar.js';
|
package/dist/vue/components.js
CHANGED
|
@@ -69,6 +69,7 @@ export { DsSwatchPicker } from './ds-swatch-picker.js';
|
|
|
69
69
|
export { DsSwitch } from './ds-switch.js';
|
|
70
70
|
export { DsTabGroup } from './ds-tab-group.js';
|
|
71
71
|
export { DsTable } from './ds-table.js';
|
|
72
|
+
export { DsTableFilter } from './ds-table-filter.js';
|
|
72
73
|
export { DsTableSavedViews } from './ds-table-saved-views.js';
|
|
73
74
|
export { DsTableSort } from './ds-table-sort.js';
|
|
74
75
|
export { DsTableToolbar } from './ds-table-toolbar.js';
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
/* tslint:disable */
|
|
3
|
+
/* auto-generated vue proxies */
|
|
4
|
+
import { defineContainer } from './vue-runtime.js';
|
|
5
|
+
import { defineCustomElement as defineDsTableFilter } from '@ds-mo/ui/components/ds-table-filter.js';
|
|
6
|
+
export const DsTableFilter = /*@__PURE__*/ defineContainer('ds-table-filter', defineDsTableFilter, [
|
|
7
|
+
'open',
|
|
8
|
+
'filters',
|
|
9
|
+
'values',
|
|
10
|
+
'activeFilterId',
|
|
11
|
+
'label',
|
|
12
|
+
'ariaLabel',
|
|
13
|
+
'menuLabel',
|
|
14
|
+
'categoriesLabel',
|
|
15
|
+
'clearLabel',
|
|
16
|
+
'dsChange',
|
|
17
|
+
'dsClear',
|
|
18
|
+
'dsActiveFilterChange',
|
|
19
|
+
'dsClose',
|
|
20
|
+
'dsOpenChange',
|
|
21
|
+
'dsAfterClose'
|
|
22
|
+
], [
|
|
23
|
+
'dsChange',
|
|
24
|
+
'dsClear',
|
|
25
|
+
'dsActiveFilterChange',
|
|
26
|
+
'dsClose',
|
|
27
|
+
'dsOpenChange',
|
|
28
|
+
'dsAfterClose'
|
|
29
|
+
]);
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["SelectController","constructor","state","this","triggerEl","popupEl","searchEl","typeahead","typeaheadTimer","outsideHandler","setTriggerElement","element","setPopupElement","setSearchElement","handleTriggerKeyDown","event","open","includes","key","preventDefault","openPopup","isTypeaheadKey","searchable","searchTerm","handleTypeahead","handleListKeyDown","focusRingVisible","activeIndex","moveChoiceIndex","options","enabledChoiceIndexes","enabled","length","target","option","selectOption","closePopup","position","AnchoredPositionController","getAnchor","getPopup","measure","trigger","popup","isConnected","host","contains","sectionPadding","resolveCssLengthPx","TOKEN_DEFAULTS","space050","style","minWidth","menuWidthXs","choicePopupMinWidth","offsetWidth","align","popupAlign","anchorRect","getBoundingClientRect","popupWidth","popupHeight","offsetHeight","side","sideOffsetPx","alignOffsetPx","resolveChoicePopupAlignOffset","sectionInsetPx","viewportPadPx","viewportWidth","window","innerWidth","viewportHeight","innerHeight","apply","x","y","positionReady","topLayer","activeOptionId","isLoading","generatedId","undefined","connect","openChanged","disconnect","cancelPositionRetry","unbindPopupListeners","clearTimeout","setFocus","focus","optionsChanged","requestAnimationFrame","updatePosition","loadingChanged","positionChanged","bindPopupListeners","schedulePositionUpdate","scrollActiveOptionIntoView","searchChanged","activeIndexChanged","focusVisible","edge","isDisabled","preferredIndex","restoreFocus","focusSearchOrTrigger","metaKey","ctrlKey","altKey","normalized","toLocaleLowerCase","repeatedCharacter","every","character","match","findChoiceTypeaheadMatch","resetMs","resolveCssTimeMs","animationDurationMedium1","setTimeout","querySelector","scrollIntoView","block","inline","document","addEventListener","observe","removeEventListener","unobserve","cancel","onReady","schedule","update","selectCss","ICON_SIZE","lg","md","sm","xs","OPTION_ACTION_SIZE","selectId","Select","__stencil_proxyCustomElement","HTMLElement","registerHost","sections","multiple","value","disabled","required","requiredMessage","DEFAULT_REQUIRED_MESSAGE","placeholder","triggerLabelPlaceholder","dot","size","width","isInactive","activeFill","collapseLabel","hasBorder","indicator","allowClear","clearLabel","selectedLabel","searchPlaceholder","noResultsText","loadingLabel","error","ariaLabel","formDisabled","compactFooterSummary","captionCompact","listboxId","errorId","initialValue","controller","createController","clearSelection","stopPropagation","dsChange","emit","dsClear","visibleOptions","activateFooterAction","dsFooterAction","owner","el","findIndex","scalarValue","componentWillLoad","normalizeValueForMode","Array","isArray","syncFormValue","componentDidLoad","observeFooterContent","syncCaptionCompactObserver","componentDidRender","scheduleFooterSummaryMeasurement","disconnectedCallback","footerResizeObserver","observedFooterContentElement","footerMeasurementFrame","cancelAnimationFrame","disconnectCaptionCompactObserver","onCollapseLabelChange","inactive","values","resolvedValues","setRepeatedFormControlValue","internals","name","hasSelection","setFormControlValue","missing","setRequiredValidity","onLoadingChange","onPopupAlignChange","onOpenChange","dsOpenChange","onSearchTermChange","onActiveIndexChange","formDisabledCallback","formResetCallback","formStateRestoreCallback","restoreStringFormState","restoreStringArrayFormState","allSections","resolveChoiceSections","allOptions","flattenChoiceSections","visibleSections","filterChoiceSections","valid","Set","map","filter","has","selectedOption","find","Boolean","popupRole","some","action","content","footerContentElement","ResizeObserver","measureFooterSummary","summary","footerSummaryMeasureElement","clear","footerClearElement","styles","getComputedStyle","clientWidth","Number","parseFloat","paddingInlineStart","paddingInlineEnd","requiredWidth","columnGap","nextCompact","current","next","renderOption","index","usesIcons","usesSubtext","selected","active","actionId","h","ChoiceOptionRow","id","actionOpen","expanded","leading","class","label","checked","presentation","icon","color","supporting","subtextActions","actionIndex","as","variant","CONTROL_SUPPORTING_TEXT_VARIANT","type","tone","onKeyDown","onClick","dsOptionSubtextAction","actionValue","originalEvent","rounded","haspopup","controls","onDsClick","dsOptionAction","anchorId","detail","onHover","onSelect","captionIconOnly","captionCompactDisconnect","observeTableCaptionCompact","compact","render","showPlaceholder","count","triggerLabel","textVariant","CONTROL_TEXT_VARIANT","iconSize","usesOptionIcons","choiceListUsesIcons","usesOptionSubtext","choiceListUsesSubtext","showError","errorMessage","describedBy","ariaDescribedby","join","popupStyle","left","top","transform","Math","round","zIndex","visibility","flatIndex","Host","controlWidthClass","background","ref","inputId","choiceBackgroundClassMap","role","String","ariaLabelledby","shiftKey","getElementById","lineTruncation","hasRing","popover","ChoiceSearch","activeDescendant","inputRef","onValueChange","body","section","sectionIndex","divider","header","emphasis","footerActionLabel","ChoiceActionFooter","onAction","ChoiceFooter","compactSummary","useCompactSummary","contentRef","summaryMeasureRef","clearRef","onClear","textId"],"sources":["src/wc/utils/select-controller.ts","src/wc/components/Select/Select.css?tag=ds-select&encapsulation=scoped","src/wc/components/Select/Select.tsx"],"sourcesContent":["import { AnchoredPositionController } from './anchored-position-controller';\nimport {\n enabledChoiceIndexes,\n findChoiceTypeaheadMatch,\n moveChoiceIndex,\n type ChoiceOption,\n} from './choice-list';\nimport { choicePopupMinWidth, resolveChoicePopupAlignOffset } from './choice-popup-alignment';\nimport { resolveCssLengthPx } from './resolve-css-length-px';\nimport { resolveCssTimeMs } from './resolve-css-time-ms';\nimport { TOKEN_DEFAULTS } from './token-defaults';\n\ntype PopupPosition = { x: number; y: number };\n\nexport interface SelectControllerState<T extends ChoiceOption> {\n readonly host: HTMLElement;\n readonly generatedId: string;\n readonly options: T[];\n readonly searchable: boolean;\n readonly isLoading: boolean;\n readonly isDisabled: boolean;\n readonly preferredIndex: number;\n readonly popupAlign: 'start' | 'end';\n open: boolean;\n activeIndex: number;\n searchTerm: string;\n focusRingVisible: boolean;\n position: PopupPosition;\n positionReady: boolean;\n selectOption(option: T): void;\n}\n\n/**\n * Shared single/multiple Select interaction controller.\n *\n * Decorated Stencil state and scalar/array selection remain in each component;\n * this controller owns only popup lifecycle, focus, positioning, typeahead,\n * and listbox keyboard traversal. Anchored placement is delegated to\n * `AnchoredPositionController`; only the choice-cell measurement stays here.\n */\nexport class SelectController<T extends ChoiceOption> {\n private triggerEl: HTMLButtonElement | null = null;\n private popupEl: HTMLDivElement | null = null;\n private searchEl: HTMLInputElement | null = null;\n private typeahead = '';\n private typeaheadTimer: ReturnType<typeof setTimeout> | null = null;\n private outsideHandler: ((event: MouseEvent) => void) | null = null;\n private readonly position: AnchoredPositionController;\n\n constructor(private readonly state: SelectControllerState<T>) {\n this.position = new AnchoredPositionController({\n getAnchor: () => this.triggerEl,\n getPopup: () => this.popupEl,\n measure: (trigger, popup) => {\n if (!this.state.open || !popup.isConnected || !this.state.host.contains(popup)) return null;\n\n const sectionPadding = resolveCssLengthPx(TOKEN_DEFAULTS.space050, TOKEN_DEFAULTS.space050);\n popup.style.minWidth = `max(var(--ds-choice-popup-min-inline-size, ${TOKEN_DEFAULTS.menuWidthXs}), ${choicePopupMinWidth(trigger.offsetWidth, sectionPadding)}px)`;\n\n const align = this.state.popupAlign;\n return {\n anchorRect: trigger.getBoundingClientRect(),\n popupWidth: popup.offsetWidth,\n popupHeight: popup.offsetHeight,\n side: 'bottom',\n align,\n sideOffsetPx: sectionPadding,\n alignOffsetPx: resolveChoicePopupAlignOffset({\n align,\n alignOffsetPx: 0,\n sectionInsetPx: sectionPadding,\n }),\n viewportPadPx: sectionPadding,\n viewportWidth: window.innerWidth,\n viewportHeight: window.innerHeight,\n };\n },\n apply: ({ x, y }) => {\n this.state.position = { x, y };\n this.state.positionReady = true;\n },\n topLayer: true,\n });\n }\n\n get activeOptionId(): string | undefined {\n return !this.state.isLoading && this.state.activeIndex >= 0\n ? `${this.state.generatedId}-option-${this.state.activeIndex}`\n : undefined;\n }\n\n setTriggerElement = (element: HTMLButtonElement | null) => {\n this.triggerEl = element;\n };\n\n setPopupElement = (element: HTMLDivElement | null) => {\n this.popupEl = element;\n };\n\n setSearchElement = (element: HTMLInputElement | null) => {\n this.searchEl = element;\n };\n\n connect() {\n if (this.state.open) this.openChanged(true);\n }\n\n disconnect() {\n this.cancelPositionRetry();\n this.unbindPopupListeners();\n if (this.typeaheadTimer) clearTimeout(this.typeaheadTimer);\n }\n\n setFocus() {\n this.triggerEl?.focus();\n }\n\n optionsChanged() {\n if (!this.state.open) return;\n const enabled = enabledChoiceIndexes(this.state.options);\n if (!enabled.includes(this.state.activeIndex)) this.state.activeIndex = enabled[0] ?? -1;\n requestAnimationFrame(() => this.updatePosition());\n }\n\n loadingChanged() {\n if (this.state.open) requestAnimationFrame(() => this.updatePosition());\n }\n\n positionChanged() {\n if (this.state.open) requestAnimationFrame(() => this.updatePosition());\n }\n\n openChanged(open: boolean) {\n if (open) {\n this.bindPopupListeners();\n this.schedulePositionUpdate(() => {\n this.scrollActiveOptionIntoView();\n if (this.state.searchable) this.searchEl?.focus();\n });\n return;\n }\n this.cancelPositionRetry();\n this.unbindPopupListeners();\n this.state.searchTerm = '';\n this.state.positionReady = false;\n }\n\n searchChanged() {\n this.state.activeIndex = enabledChoiceIndexes(this.state.options)[0] ?? -1;\n requestAnimationFrame(() => {\n this.updatePosition();\n this.scrollActiveOptionIntoView();\n });\n }\n\n activeIndexChanged() {\n requestAnimationFrame(() => this.scrollActiveOptionIntoView());\n }\n\n openPopup(focusVisible: boolean, edge?: 'first' | 'last') {\n if (this.state.isDisabled || (!this.state.options.length && !this.state.isLoading)) return;\n const enabled = enabledChoiceIndexes(this.state.options);\n this.state.activeIndex =\n edge === 'last'\n ? (enabled[enabled.length - 1] ?? -1)\n : this.state.preferredIndex >= 0\n ? this.state.preferredIndex\n : (enabled[0] ?? -1);\n this.state.focusRingVisible = focusVisible;\n this.state.open = true;\n }\n\n closePopup(restoreFocus = false) {\n if (!this.state.open) return;\n this.state.open = false;\n if (restoreFocus) requestAnimationFrame(() => this.triggerEl?.focus());\n }\n\n focusSearchOrTrigger() {\n requestAnimationFrame(() =>\n this.state.searchable ? this.searchEl?.focus() : this.triggerEl?.focus()\n );\n }\n\n handleTriggerKeyDown = (event: KeyboardEvent) => {\n if (!this.state.open) {\n if (['ArrowDown', 'ArrowUp', 'Enter', ' '].includes(event.key)) {\n event.preventDefault();\n this.openPopup(true, event.key === 'ArrowUp' ? 'last' : 'first');\n } else if (this.isTypeaheadKey(event)) {\n event.preventDefault();\n this.openPopup(true);\n if (this.state.searchable) this.state.searchTerm = event.key;\n else this.handleTypeahead(event.key);\n }\n return;\n }\n this.handleListKeyDown(event);\n };\n\n handleListKeyDown = (event: KeyboardEvent) => {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.state.focusRingVisible = true;\n this.state.activeIndex = moveChoiceIndex(this.state.options, this.state.activeIndex, 1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.state.focusRingVisible = true;\n this.state.activeIndex = moveChoiceIndex(this.state.options, this.state.activeIndex, -1);\n break;\n case 'Home':\n event.preventDefault();\n this.state.focusRingVisible = true;\n this.state.activeIndex = enabledChoiceIndexes(this.state.options)[0] ?? -1;\n break;\n case 'End': {\n event.preventDefault();\n this.state.focusRingVisible = true;\n const enabled = enabledChoiceIndexes(this.state.options);\n this.state.activeIndex = enabled[enabled.length - 1] ?? -1;\n break;\n }\n case 'Enter':\n case ' ': {\n if (event.key === ' ' && this.state.searchable && event.target === this.searchEl) break;\n event.preventDefault();\n const option = this.state.options[this.state.activeIndex];\n if (option) this.state.selectOption(option);\n break;\n }\n case 'Escape':\n event.preventDefault();\n this.closePopup(true);\n break;\n case 'Tab':\n this.closePopup();\n break;\n default:\n if (!this.state.searchable && this.isTypeaheadKey(event)) {\n this.handleTypeahead(event.key);\n }\n }\n };\n\n private isTypeaheadKey(event: KeyboardEvent) {\n return event.key.length === 1 && !event.metaKey && !event.ctrlKey && !event.altKey;\n }\n\n private handleTypeahead(key: string) {\n if (this.typeaheadTimer) clearTimeout(this.typeaheadTimer);\n this.state.focusRingVisible = true;\n const normalized = key.toLocaleLowerCase();\n const repeatedCharacter =\n this.typeahead.length > 0 && [...this.typeahead].every(character => character === normalized);\n this.typeahead = repeatedCharacter ? normalized : `${this.typeahead}${normalized}`;\n const match = findChoiceTypeaheadMatch(\n this.state.options,\n this.typeahead,\n this.state.activeIndex\n );\n if (match >= 0) this.state.activeIndex = match;\n const resetMs = resolveCssTimeMs(\n TOKEN_DEFAULTS.animationDurationMedium1,\n TOKEN_DEFAULTS.animationDurationMedium1\n );\n this.typeaheadTimer = setTimeout(() => {\n this.typeahead = '';\n this.typeaheadTimer = null;\n }, resetMs);\n }\n\n private scrollActiveOptionIntoView() {\n if (!this.state.open || !this.activeOptionId) return;\n this.state.host\n .querySelector<HTMLElement>(`#${this.activeOptionId}`)\n ?.scrollIntoView({ block: 'nearest', inline: 'nearest' });\n }\n\n private bindPopupListeners() {\n this.unbindPopupListeners();\n this.outsideHandler = event => {\n if (this.state.host.contains(event.target as Node)) return;\n this.closePopup();\n };\n document.addEventListener('mousedown', this.outsideHandler, true);\n this.position.observe();\n }\n\n private unbindPopupListeners() {\n if (this.outsideHandler) {\n document.removeEventListener('mousedown', this.outsideHandler, true);\n this.outsideHandler = null;\n }\n this.position.unobserve();\n }\n\n private cancelPositionRetry() {\n this.position.cancel();\n }\n\n private schedulePositionUpdate(onReady?: () => void) {\n if (!this.state.open) return;\n this.state.positionReady = false;\n this.position.schedule(onReady);\n }\n\n private updatePosition(): boolean {\n return this.position.update();\n }\n}\n","@import '../../utils/choice-list.css';\n@import '../../utils/control-parts.css';\n@import '../../utils/control-width.css';\n@import '../../utils/field-stack.css';\n@import '../../utils/search-control.css';\n@import '../../utils/select-trigger.css';\n@import '../../utils/table-caption-control.css';\n@import '../../utils/typography.css';\n@import '../../styles/control-elevation.css';\n\n.wrapper--error {\n --ds-interaction-border-width: var(--dimension-stroke-width-018);\n --ds-interaction-border-color: var(--color-border-bold-negative);\n}\n\n.select-popup {\n color: var(--color-foreground-secondary);\n}\n\n.select-option[aria-selected='true'] .ds-choice-item__icon {\n color: var(--color-foreground-primary);\n}\n\n.select-option-row {\n position: relative;\n isolation: isolate;\n}\n\n.select-option-row__action {\n position: absolute;\n top: 50%;\n right: var(--dimension-space-050);\n z-index: var(--dimension-z-index-floating);\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--dimension-radius-half);\n background: var(--color-background-transparent);\n -webkit-backdrop-filter: blur(var(--effect-blur-sm));\n backdrop-filter: blur(var(--effect-blur-sm));\n opacity: 0;\n pointer-events: none;\n transform: translateY(-50%);\n}\n\n.select-option-row:has(:focus-visible) .select-option-row__action,\n.select-option-row--action-open .select-option-row__action,\n.select-option-row--keyboard-active .select-option-row__action {\n opacity: 1;\n pointer-events: auto;\n}\n\n.select-option-row--action-open .select-option::after {\n background: var(--ds-interaction-hover);\n}\n\n.select-option__subtext-actions {\n display: flex;\n align-items: center;\n gap: var(--dimension-space-050);\n min-inline-size: 0;\n color: var(--color-foreground-secondary);\n}\n\n.select-option__subtext-action {\n appearance: none;\n display: inline-flex;\n align-items: center;\n padding: 0;\n border: 0;\n border-radius: var(--dimension-radius-025);\n background: transparent;\n cursor: pointer;\n}\n\n.select-option__subtext-action--negative {\n --ds-text-action-foreground: var(--color-foreground-bold-negative);\n}\n\n.select-option__subtext-action-separator {\n color: var(--color-foreground-tertiary);\n pointer-events: none;\n}\n\n@media (hover: hover) and (pointer: fine) {\n .select-option-row:hover .select-option-row__action {\n opacity: 1;\n pointer-events: auto;\n }\n\n .select-option-row:hover .select-option::after {\n background: var(--ds-interaction-hover);\n }\n}\n\n@media (hover: none) {\n .select-option-row__action {\n opacity: 1;\n pointer-events: auto;\n }\n\n .select-option-row--has-action .ds-choice-item__content {\n padding-inline-end: var(--dimension-size-400);\n }\n}\n\n.error-text {\n width: 100%;\n}\n","import {\n AttachInternals,\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport {\n controlWidthClass,\n CONTROL_SUPPORTING_TEXT_VARIANT,\n CONTROL_TEXT_VARIANT,\n DEFAULT_REQUIRED_MESSAGE,\n restoreStringArrayFormState,\n restoreStringFormState,\n setFormControlValue,\n setRepeatedFormControlValue,\n setRequiredValidity,\n type ControlWidth,\n} from '../../utils';\nimport {\n ChoiceActionFooter,\n ChoiceFooter,\n ChoiceOptionRow,\n ChoiceSearch,\n} from '../../utils/choice-list-parts';\nimport {\n choiceBackgroundClassMap,\n choiceListUsesIcons,\n choiceListUsesSubtext,\n enabledChoiceIndexes,\n filterChoiceSections,\n flattenChoiceSections,\n resolveChoiceSections,\n type ChoiceBackground,\n type ChoiceOption,\n type ChoiceSection,\n} from '../../utils/choice-list';\nimport { SelectController } from '../../utils/select-controller';\nimport { observeTableCaptionCompact } from '../../utils/table-caption-compact';\n\nexport type SelectOption = ChoiceOption;\nexport type SelectSection = ChoiceSection;\nexport type SelectBackground = ChoiceBackground;\nexport type SelectSize = 'lg' | 'md' | 'sm' | 'xs';\nexport type SelectWidth = ControlWidth;\nexport type SelectPopupAlign = 'start' | 'end';\nexport type SelectValue = string | string[];\nexport type SelectIndicator = 'down' | 'up-down';\n\nexport interface SelectOptionActionDetail {\n value: string;\n anchorId: string;\n originalEvent: MouseEvent;\n}\n\nexport interface SelectOptionSubtextActionDetail {\n value: string;\n actionValue: string;\n originalEvent: MouseEvent;\n}\n\nconst ICON_SIZE: Record<SelectSize, 'lg' | 'md' | 'sm' | 'xs'> = {\n lg: 'lg',\n md: 'md',\n sm: 'sm',\n xs: 'xs',\n};\n\nconst OPTION_ACTION_SIZE: Record<SelectSize, 'md' | 'sm' | 'xs'> = {\n lg: 'md',\n md: 'sm',\n sm: 'xs',\n xs: 'xs',\n};\n\nlet selectId = 0;\n\n@Component({\n tag: 'ds-select',\n styleUrl: 'Select.css',\n scoped: true,\n formAssociated: true,\n})\nexport class Select {\n @Element() el!: HTMLElement;\n @AttachInternals() internals!: ElementInternals;\n\n /** Flat choices. Assign arrays through the JavaScript property. */\n @Prop() options: SelectOption[] = [];\n /** Grouped choices; takes precedence over options. Assign through JavaScript. */\n @Prop() sections: SelectSection[] = [];\n /** Enable independent multi-value selection while keeping the popup open. */\n @Prop({ reflect: true }) multiple: boolean = false;\n /** Selected scalar or array value according to `multiple`. */\n @Prop({ mutable: true }) value: SelectValue = '';\n /** Controlled popup visibility. */\n @Prop({ mutable: true, reflect: true }) open: boolean = false;\n /** Native form field name. */\n @Prop({ reflect: true }) name: string | undefined;\n /** Native disabled state. */\n @Prop({ reflect: true }) disabled: boolean = false;\n /** Require one valid selected value. */\n @Prop({ reflect: true }) required: boolean = false;\n /** Validation message used when required is missing. */\n @Prop() requiredMessage: string = DEFAULT_REQUIRED_MESSAGE;\n /** Trigger text shown when no valid value is selected. */\n @Prop() placeholder: string = 'Select';\n /** Optional scalar-mode trigger text that does not change the selected option label. */\n @Prop() triggerLabel: string | undefined;\n /** Present triggerLabel with placeholder emphasis while preserving the selected value. */\n @Prop() triggerLabelPlaceholder: boolean = false;\n /** Show a supplemental notification dot beside the trigger label. */\n @Prop() dot: boolean = false;\n /** Control density. */\n @Prop() size: SelectSize = 'md';\n /** Width fit — hug content (default) or fill the parent. */\n @Prop() width: SelectWidth = 'hug';\n /** Align the popup's choice edge to the trigger start or end edge. */\n @Prop() popupAlign: SelectPopupAlign = 'start';\n /** Shared inactive treatment; removes interaction and form submission. */\n @Prop() isInactive: boolean = false;\n /** Replace the prefix with a loader and disable option interaction. */\n @Prop() isLoading: boolean = false;\n /** Show the selected interaction fill when a valid value exists. */\n @Prop() activeFill: boolean = true;\n /**\n * Opt into table-caption icon-only chrome below 900px. The trigger omits its\n * visible label and chevron; keep an accessible name via aria-label.\n */\n @Prop({ reflect: true }) collapseLabel: boolean = false;\n /** Show the surface-aware inset border, including focused and invalid strokes. */\n @Prop() hasBorder: boolean = true;\n /** Optional trigger prefix icon name. */\n @Prop() icon: string | undefined;\n /** Trailing choice indicator. Use up-down for compact value steppers such as page size. */\n @Prop() indicator: SelectIndicator = 'down';\n /** Show the clear footer action when a value exists. */\n @Prop() allowClear: boolean = true;\n /** Localized clear action label. */\n @Prop() clearLabel: string = 'Clear';\n /** Localized noun displayed after the selected count in multiple mode. */\n @Prop() selectedLabel: string = 'selected';\n /** Optional text action shown in the popup footer instead of the clear action. */\n @Prop() footerActionLabel: string | undefined;\n /** Show immediate local filtering over option labels, subtext, and section headings. */\n @Prop() searchable: boolean = false;\n /** Localized search-field placeholder and accessible name. */\n @Prop() searchPlaceholder: string = 'Search';\n /** Localized empty-filter result text. */\n @Prop() noResultsText: string = 'No results found';\n /** Accessible loading status label. */\n @Prop() loadingLabel: string = 'Loading';\n /** Actual parent surface context; omit on primary and secondary surfaces. */\n @Prop() background: SelectBackground | undefined;\n /** Show invalid visual state. */\n @Prop() error: boolean = false;\n /** Error text rendered below the trigger when error is true. */\n @Prop() errorMessage: string | undefined;\n /** ID applied to the internal combobox trigger for external labels. */\n @Prop() inputId: string | undefined;\n /** Direct accessible name when no external label is available. */\n @Prop({ attribute: 'aria-label' }) ariaLabel: string | null = null;\n /** IDs of elements that label the combobox. */\n @Prop({ attribute: 'aria-labelledby' }) ariaLabelledby: string | undefined;\n /** Additional IDs that describe the combobox. */\n @Prop({ attribute: 'aria-describedby' }) ariaDescribedby: string | undefined;\n\n /** Emitted after selection or clearing with the next scalar or array value. */\n @Event() dsChange!: EventEmitter<SelectValue>;\n /** Emitted after the footer clear action. */\n @Event() dsClear!: EventEmitter<void>;\n /** Emitted whenever popup visibility changes. */\n @Event() dsOpenChange!: EventEmitter<boolean>;\n /** Emitted when the optional popup footer action is activated. */\n @Event() dsFooterAction!: EventEmitter<void>;\n /** Emitted when an option's contextual ellipsis action is activated. */\n @Event() dsOptionAction!: EventEmitter<SelectOptionActionDetail>;\n /** Emitted when an option's supporting text action is activated. */\n @Event() dsOptionSubtextAction!: EventEmitter<SelectOptionSubtextActionDetail>;\n\n @State() private activeIndex = -1;\n @State() private searchTerm = '';\n @State() private formDisabled = false;\n @State() private position = { x: 0, y: 0 };\n @State() private positionReady = false;\n @State() private focusRingVisible = false;\n @State() private compactFooterSummary = false;\n @State() private captionCompact = false;\n\n private readonly generatedId = `ds-select-${++selectId}`;\n private readonly listboxId = `${this.generatedId}-listbox`;\n private readonly errorId = `${this.generatedId}-error`;\n private initialValue: SelectValue = '';\n private readonly controller = this.createController();\n private footerContentElement?: HTMLDivElement;\n private footerSummaryMeasureElement?: HTMLElement;\n private footerClearElement?: HTMLButtonElement;\n private footerResizeObserver?: ResizeObserver;\n private observedFooterContentElement?: HTMLDivElement;\n private footerMeasurementFrame?: number;\n private captionCompactDisconnect: (() => void) | undefined;\n\n private createController() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias -- adapter getters preserve reactive component ownership without inheritance.\n const owner = this;\n return new SelectController<SelectOption>({\n get host() {\n return owner.el;\n },\n generatedId: owner.generatedId,\n get options() {\n return owner.visibleOptions;\n },\n get searchable() {\n return owner.searchable;\n },\n get isLoading() {\n return owner.isLoading;\n },\n get isDisabled() {\n return owner.isDisabled;\n },\n get preferredIndex() {\n if (owner.multiple) return -1;\n return owner.visibleOptions.findIndex(\n option => option.value === owner.scalarValue && !option.isInactive\n );\n },\n get popupAlign() {\n return owner.popupAlign;\n },\n get open() {\n return owner.open;\n },\n set open(value) {\n owner.open = value;\n },\n get activeIndex() {\n return owner.activeIndex;\n },\n set activeIndex(value) {\n owner.activeIndex = value;\n },\n get searchTerm() {\n return owner.searchTerm;\n },\n set searchTerm(value) {\n owner.searchTerm = value;\n },\n get focusRingVisible() {\n return owner.focusRingVisible;\n },\n set focusRingVisible(value) {\n owner.focusRingVisible = value;\n },\n get position() {\n return owner.position;\n },\n set position(value) {\n owner.position = value;\n },\n get positionReady() {\n return owner.positionReady;\n },\n set positionReady(value) {\n owner.positionReady = value;\n },\n selectOption: option => owner.selectOption(option),\n });\n }\n\n componentWillLoad() {\n this.value = this.normalizeValueForMode(this.value);\n this.initialValue = Array.isArray(this.value) ? [...this.value] : this.value;\n this.syncFormValue();\n }\n\n componentDidLoad() {\n this.controller.connect();\n this.observeFooterContent();\n this.syncCaptionCompactObserver();\n }\n\n componentDidRender() {\n this.observeFooterContent();\n this.scheduleFooterSummaryMeasurement();\n }\n\n disconnectedCallback() {\n this.controller.disconnect();\n this.footerResizeObserver?.disconnect();\n this.observedFooterContentElement = undefined;\n if (this.footerMeasurementFrame !== undefined) {\n cancelAnimationFrame(this.footerMeasurementFrame);\n }\n this.disconnectCaptionCompactObserver();\n }\n\n @Watch('collapseLabel')\n onCollapseLabelChange() {\n this.syncCaptionCompactObserver();\n }\n\n @Watch('value')\n @Watch('multiple')\n @Watch('disabled')\n @Watch('isInactive')\n @Watch('required')\n @Watch('name')\n @Watch('options')\n @Watch('sections')\n syncFormValue() {\n if (\n (this.multiple && !Array.isArray(this.value)) ||\n (!this.multiple && Array.isArray(this.value))\n ) {\n this.value = this.normalizeValueForMode(this.value);\n }\n const inactive = this.isDisabled;\n if (this.multiple) {\n const values = this.resolvedValues;\n setRepeatedFormControlValue(this.internals, this.name, values, { inactive });\n } else {\n const value = this.hasSelection ? this.scalarValue : '';\n setFormControlValue(this.internals, value, { inactive });\n }\n const missing = this.required && !inactive && !this.hasSelection;\n setRequiredValidity(this.internals, missing, this.requiredMessage);\n this.controller.optionsChanged();\n }\n\n @Watch('isLoading')\n onLoadingChange() {\n this.controller.loadingChanged();\n }\n\n @Watch('popupAlign')\n onPopupAlignChange() {\n this.controller.positionChanged();\n }\n\n @Watch('open')\n onOpenChange(open: boolean) {\n this.dsOpenChange.emit(open);\n this.controller.openChanged(open);\n }\n\n @Watch('searchTerm')\n onSearchTermChange() {\n this.controller.searchChanged();\n }\n\n @Watch('activeIndex')\n onActiveIndexChange() {\n this.controller.activeIndexChanged();\n }\n\n formDisabledCallback(disabled: boolean) {\n this.formDisabled = disabled;\n this.syncFormValue();\n }\n\n formResetCallback() {\n this.value = this.normalizeValueForMode(this.initialValue);\n this.closePopup();\n }\n\n formStateRestoreCallback(state: string | File | FormData | null) {\n if (!this.multiple) {\n this.value = restoreStringFormState(state);\n return;\n }\n this.value = restoreStringArrayFormState(state);\n }\n\n @Method()\n async setFocus() {\n this.controller.setFocus();\n }\n\n private get isDisabled(): boolean {\n return this.disabled || this.isInactive || this.formDisabled;\n }\n\n private normalizeValueForMode(value: SelectValue): SelectValue {\n if (this.multiple) {\n return Array.isArray(value) ? [...value] : value ? [value] : [];\n }\n return Array.isArray(value) ? (value[0] ?? '') : value;\n }\n\n private get allSections(): SelectSection[] {\n return resolveChoiceSections(this.options, this.sections);\n }\n\n private get allOptions(): SelectOption[] {\n return flattenChoiceSections(this.allSections);\n }\n\n private get visibleSections(): SelectSection[] {\n return this.searchable\n ? filterChoiceSections(this.allSections, this.searchTerm)\n : this.allSections;\n }\n\n private get visibleOptions(): SelectOption[] {\n return flattenChoiceSections(this.visibleSections);\n }\n\n private get scalarValue(): string {\n return typeof this.value === 'string' ? this.value : '';\n }\n\n private get resolvedValues(): string[] {\n if (!this.multiple || !Array.isArray(this.value)) return [];\n const valid = new Set(this.allOptions.map(option => option.value));\n return [...new Set(this.value.filter(value => valid.has(value)))];\n }\n\n private get selectedOption(): SelectOption | undefined {\n if (this.multiple) return undefined;\n return this.allOptions.find(option => option.value === this.scalarValue);\n }\n\n private get hasSelection(): boolean {\n return this.multiple ? this.resolvedValues.length > 0 : Boolean(this.selectedOption);\n }\n\n private get activeOptionId(): string | undefined {\n return this.controller.activeOptionId;\n }\n\n private get popupRole(): 'listbox' | 'grid' {\n return this.allOptions.some(option => Boolean(option.action)) ? 'grid' : 'listbox';\n }\n\n private observeFooterContent() {\n const content =\n this.open && this.multiple && this.hasSelection ? this.footerContentElement : undefined;\n if (!content?.isConnected) {\n this.footerResizeObserver?.disconnect();\n this.observedFooterContentElement = undefined;\n return;\n }\n if (this.observedFooterContentElement === content) return;\n\n this.footerResizeObserver?.disconnect();\n if (typeof ResizeObserver !== 'undefined') {\n this.footerResizeObserver = new ResizeObserver(() => this.scheduleFooterSummaryMeasurement());\n this.footerResizeObserver.observe(content);\n }\n this.observedFooterContentElement = content;\n }\n\n private scheduleFooterSummaryMeasurement() {\n if (\n !this.open ||\n !this.multiple ||\n !this.hasSelection ||\n this.footerMeasurementFrame !== undefined\n ) {\n return;\n }\n this.footerMeasurementFrame = requestAnimationFrame(() => {\n this.footerMeasurementFrame = undefined;\n this.measureFooterSummary();\n });\n }\n\n private measureFooterSummary() {\n const content = this.footerContentElement;\n const summary = this.footerSummaryMeasureElement;\n const clear = this.footerClearElement;\n if (!content?.isConnected || !summary?.isConnected || !clear?.isConnected) return;\n\n const styles = getComputedStyle(content);\n const innerWidth =\n content.clientWidth -\n Number.parseFloat(styles.paddingInlineStart || '0') -\n Number.parseFloat(styles.paddingInlineEnd || '0');\n const requiredWidth =\n summary.getBoundingClientRect().width +\n clear.getBoundingClientRect().width +\n Number.parseFloat(styles.columnGap || '0');\n const nextCompact = requiredWidth > innerWidth + 0.5;\n if (nextCompact !== this.compactFooterSummary) {\n this.compactFooterSummary = nextCompact;\n }\n }\n\n private closePopup(restoreFocus = false) {\n this.controller.closePopup(restoreFocus);\n }\n\n private openPopup(focusVisible: boolean, edge?: 'first' | 'last') {\n this.controller.openPopup(focusVisible, edge);\n }\n\n private selectOption(option: SelectOption) {\n if (option.isInactive || this.isLoading) return;\n if (this.multiple) {\n const current = this.resolvedValues;\n const next = current.includes(option.value)\n ? current.filter(value => value !== option.value)\n : [...current, option.value];\n this.value = next;\n this.dsChange.emit([...next]);\n return;\n }\n this.value = option.value;\n this.dsChange.emit(option.value);\n this.controller.closePopup(true);\n }\n\n private clearSelection = (event: Event) => {\n event.preventDefault();\n event.stopPropagation();\n this.value = this.multiple ? [] : '';\n this.dsChange.emit(this.multiple ? [] : '');\n this.dsClear.emit();\n if (!this.multiple) {\n const enabled = enabledChoiceIndexes(this.visibleOptions);\n this.activeIndex = enabled[0] ?? -1;\n }\n this.controller.focusSearchOrTrigger();\n };\n\n private activateFooterAction = (event: MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n this.dsFooterAction.emit();\n this.closePopup();\n };\n\n private readonly handleListKeyDown = this.controller.handleListKeyDown;\n private readonly handleTriggerKeyDown = this.controller.handleTriggerKeyDown;\n\n private renderOption(\n option: SelectOption,\n index: number,\n usesIcons: boolean,\n usesSubtext: boolean\n ) {\n const selected = this.multiple\n ? this.resolvedValues.includes(option.value)\n : option.value === this.scalarValue;\n const active = index === this.activeIndex;\n const actionId = `${this.generatedId}-option-action-${index}`;\n return (\n <ChoiceOptionRow\n size={this.size}\n id={`${this.generatedId}-option-${index}`}\n option={option}\n selected={selected}\n active={active}\n focusRingVisible={this.focusRingVisible}\n usesSubtext={usesSubtext}\n actionOpen={option.action?.expanded}\n popupRole={this.popupRole}\n leading={\n this.multiple ? (\n <span\n class=\"ds-choice-item__icon ds-control-icon-box ds-interaction-fill__content\"\n aria-hidden=\"true\"\n >\n <ds-checkbox\n class=\"select-option__checkbox\"\n label=\"\"\n size={this.size}\n checked={selected}\n presentation\n />\n </span>\n ) : usesIcons && option.icon ? (\n <span\n class=\"ds-choice-item__icon ds-control-icon-box ds-interaction-fill__content\"\n aria-hidden=\"true\"\n >\n <ds-icon name={option.icon} size={this.size} color=\"inherit\" />\n </span>\n ) : undefined\n }\n supporting={\n option.subtextActions?.length ? (\n <span class=\"ds-choice-item__subtext ds-control-label-box select-option__subtext-actions\">\n {option.subtextActions.map((action, actionIndex) => [\n actionIndex > 0 ? (\n <ds-text\n class=\"select-option__subtext-action-separator\"\n as=\"span\"\n variant={CONTROL_SUPPORTING_TEXT_VARIANT[this.size]}\n color=\"inherit\"\n aria-hidden=\"true\"\n >\n ·\n </ds-text>\n ) : null,\n <button\n type=\"button\"\n class={{\n 'select-option__subtext-action': true,\n 'select-option__subtext-action--negative': action.tone === 'negative',\n 'ds-text-action': true,\n 'ds-focus-ring': true,\n }}\n onKeyDown={(event: KeyboardEvent) => event.stopPropagation()}\n onClick={(event: MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n this.dsOptionSubtextAction.emit({\n value: option.value,\n actionValue: action.value,\n originalEvent: event,\n });\n }}\n >\n <ds-text\n as=\"span\"\n variant={CONTROL_SUPPORTING_TEXT_VARIANT[this.size]}\n color=\"inherit\"\n >\n {action.label}\n </ds-text>\n </button>,\n ])}\n </span>\n ) : undefined\n }\n action={\n option.action ? (\n <ds-tooltip label={option.action.label} side=\"left\" size=\"sm\">\n <ds-button-unfilled\n id={actionId}\n variant=\"icon\"\n size={OPTION_ACTION_SIZE[this.size]}\n icon=\"Ellipses\"\n rounded\n hasBorder={false}\n activeFill={false}\n ariaLabel={option.action.label}\n haspopup=\"menu\"\n controls={option.action.controls}\n expanded={option.action.expanded}\n onKeyDown={event => {\n event.stopPropagation();\n if (event.key === 'Escape' || event.key === 'ArrowLeft') {\n event.preventDefault();\n this.controller.focusSearchOrTrigger();\n }\n }}\n onDsClick={(event: CustomEvent<MouseEvent>) => {\n event.stopPropagation();\n this.dsOptionAction.emit({\n value: option.value,\n anchorId: actionId,\n originalEvent: event.detail,\n });\n }}\n />\n </ds-tooltip>\n ) : undefined\n }\n onHover={() => {\n this.focusRingVisible = false;\n this.activeIndex = index;\n }}\n onSelect={() => this.selectOption(option)}\n />\n );\n }\n\n private get captionIconOnly(): boolean {\n return this.collapseLabel && this.captionCompact && Boolean(this.icon || this.isLoading);\n }\n\n private syncCaptionCompactObserver(): void {\n this.disconnectCaptionCompactObserver();\n if (!this.collapseLabel) {\n if (this.captionCompact) this.captionCompact = false;\n return;\n }\n this.captionCompactDisconnect = observeTableCaptionCompact(this.el, compact => {\n if (this.captionCompact !== compact) this.captionCompact = compact;\n });\n }\n\n private disconnectCaptionCompactObserver(): void {\n this.captionCompactDisconnect?.();\n this.captionCompactDisconnect = undefined;\n }\n\n render() {\n const inactive = this.isDisabled;\n const showPlaceholder = !this.hasSelection;\n const count = this.resolvedValues.length;\n const label = this.multiple\n ? `${this.placeholder}${count > 0 ? ` · ${count}` : ''}`\n : showPlaceholder\n ? this.placeholder\n : (this.triggerLabel ?? this.selectedOption?.label);\n const textVariant = CONTROL_TEXT_VARIANT[this.size];\n const iconSize = ICON_SIZE[this.size];\n const usesOptionIcons = !this.multiple && choiceListUsesIcons(this.allOptions);\n const usesOptionSubtext = choiceListUsesSubtext(this.allOptions);\n const showError = this.error && Boolean(this.errorMessage);\n const describedBy =\n [this.ariaDescribedby, showError ? this.errorId : undefined].filter(Boolean).join(' ') ||\n undefined;\n const popupStyle = {\n position: 'fixed',\n left: '0',\n top: '0',\n transform: `translate(${Math.round(this.position.x)}px, ${Math.round(this.position.y)}px)`,\n zIndex: 'var(--dimension-z-index-floating)',\n visibility: this.positionReady ? 'visible' : 'hidden',\n };\n let flatIndex = 0;\n\n return (\n <Host\n class={{\n 'select-host': true,\n 'ds-select-trigger-host': true,\n 'select-host--multiple': this.multiple,\n 'ds-field-stack': true,\n 'ds-control-inactive': inactive,\n [`ds-control--${this.size}`]: true,\n 'ds-table-caption-control': this.collapseLabel,\n 'ds-table-caption-control--compact': this.captionIconOnly,\n ...controlWidthClass(this.width),\n [`select-host--background-${this.background}`]: !!this.background,\n [`ds-select-trigger-host--background-${this.background}`]: !!this.background,\n }}\n >\n <button\n ref={element => {\n this.controller.setTriggerElement((element as HTMLButtonElement) ?? null);\n }}\n id={this.inputId ?? this.generatedId}\n type=\"button\"\n class={{\n trigger: true,\n 'ds-control-frame': true,\n 'ds-focus-ring-inset': true,\n 'ds-interaction-fill': true,\n 'ds-interaction-fill--selected': !inactive && this.activeFill && this.hasSelection,\n 'trigger--expanded': !inactive && this.open,\n 'trigger--bordered': this.hasBorder,\n 'trigger--placeholder': showPlaceholder && !this.multiple,\n 'trigger--has-value': this.hasSelection,\n 'trigger--label-placeholder':\n !this.multiple && Boolean(this.triggerLabel) && this.triggerLabelPlaceholder,\n 'wrapper--error': this.hasBorder && this.error,\n [`ds-control--${this.size}`]: true,\n ...choiceBackgroundClassMap(this.background),\n }}\n disabled={inactive}\n role=\"combobox\"\n aria-haspopup={this.popupRole}\n aria-expanded={String(this.open)}\n aria-controls={this.open ? this.listboxId : undefined}\n aria-activedescendant={this.open && !this.searchable ? this.activeOptionId : undefined}\n aria-label={this.ariaLabel ?? (this.captionIconOnly ? label : undefined)}\n aria-labelledby={this.ariaLabelledby}\n aria-describedby={describedBy}\n aria-invalid={this.error ? 'true' : undefined}\n aria-required={this.required || undefined}\n aria-busy={this.isLoading ? 'true' : undefined}\n onClick={() => (this.open ? this.closePopup() : this.openPopup(false))}\n onKeyDown={event => {\n const action = this.visibleOptions[this.activeIndex]?.action;\n if (\n this.open &&\n action &&\n (event.key === 'ArrowRight' || (event.key === 'F10' && event.shiftKey))\n ) {\n event.preventDefault();\n document\n .getElementById(`${this.generatedId}-option-action-${this.activeIndex}`)\n ?.querySelector<HTMLElement>('button')\n ?.focus();\n return;\n }\n this.handleTriggerKeyDown(event);\n }}\n >\n {(this.icon || this.isLoading) && (\n <span\n class=\"trigger__prefix ds-control-icon-box ds-interaction-fill__content\"\n aria-hidden=\"true\"\n >\n {this.isLoading ? (\n <ds-loader size={iconSize} color=\"inherit\" />\n ) : (\n <ds-icon name={this.icon} size={iconSize} color=\"inherit\" />\n )}\n </span>\n )}\n {this.captionIconOnly ? null : (\n <span\n class={{\n 'trigger__label-box': true,\n 'ds-interaction-fill__content': true,\n }}\n >\n <span\n class={{\n 'trigger__label-content': true,\n 'ds-control-label-box': true,\n 'ds-control-label-dot': this.dot,\n 'trigger__label-content--dot': this.dot,\n }}\n >\n <ds-text\n class=\"trigger__label\"\n as=\"span\"\n variant={textVariant}\n color=\"inherit\"\n lineTruncation={1}\n >\n {label}\n </ds-text>\n {this.dot && (\n <ds-badge\n class=\"trigger__dot ds-control-label-dot__badge\"\n variant=\"dot\"\n hasRing={false}\n label=\"\"\n aria-hidden=\"true\"\n />\n )}\n </span>\n </span>\n )}\n {this.captionIconOnly ? null : (\n <span\n class=\"trigger__chevron ds-control-icon-box ds-interaction-fill__content\"\n aria-hidden=\"true\"\n >\n <ds-icon\n name={this.indicator === 'up-down' ? 'ChevronUpDown' : 'ChevronDown'}\n size={iconSize}\n color=\"inherit\"\n />\n </span>\n )}\n </button>\n\n {this.open && (\n <div\n popover=\"manual\"\n ref={element => {\n this.controller.setPopupElement((element as HTMLDivElement) ?? null);\n }}\n class=\"select-popup ds-choice-popup\"\n style={popupStyle}\n >\n {this.searchable && (\n <ChoiceSearch\n size={this.size}\n value={this.searchTerm}\n placeholder={this.searchPlaceholder}\n controls={this.listboxId}\n activeDescendant={this.activeOptionId}\n inputRef={this.controller.setSearchElement}\n clearLabel={this.clearLabel}\n onValueChange={value => {\n this.searchTerm = value;\n }}\n onKeyDown={event => this.handleListKeyDown(event)}\n />\n )}\n <div\n id={this.listboxId}\n class=\"ds-choice-list\"\n role={this.popupRole}\n aria-multiselectable={this.multiple ? 'true' : undefined}\n aria-label={this.ariaLabel ?? this.placeholder}\n aria-busy={this.isLoading ? 'true' : undefined}\n >\n {this.isLoading ? (\n <div\n class=\"ds-choice-loading ds-empty-region\"\n role={this.popupRole === 'grid' ? 'row' : 'option'}\n aria-selected=\"false\"\n aria-disabled=\"true\"\n aria-label={this.loadingLabel}\n aria-live=\"polite\"\n >\n {this.popupRole === 'grid' ? (\n <span role=\"gridcell\">\n <ds-loader size={this.size} color=\"inherit\" />\n </span>\n ) : (\n <ds-loader size={this.size} color=\"inherit\" />\n )}\n </div>\n ) : this.visibleOptions.length === 0 ? (\n <div\n class=\"ds-choice-empty ds-empty-region\"\n role={this.popupRole === 'grid' ? 'row' : 'option'}\n aria-selected=\"false\"\n aria-disabled=\"true\"\n aria-label={this.noResultsText}\n aria-live=\"polite\"\n >\n {this.popupRole === 'grid' ? (\n <span role=\"gridcell\">\n <ds-empty-state body={this.noResultsText} />\n </span>\n ) : (\n <ds-empty-state body={this.noResultsText} />\n )}\n </div>\n ) : (\n this.visibleSections.map((section, sectionIndex) => (\n <div\n class={{\n 'ds-choice-section': true,\n 'ds-chrome-column': true,\n 'ds-chrome-space--sm': true,\n 'ds-choice-section--divided': !!section.divider,\n 'ds-choice-section--headed-after-first':\n sectionIndex > 0 && Boolean(section.header),\n }}\n role={\n this.popupRole === 'grid' ? 'rowgroup' : section.header ? 'group' : undefined\n }\n aria-label={section.header}\n >\n {section.header && this.popupRole === 'grid' ? (\n <ds-text\n class={`ds-choice-section__header ds-control-section-heading ds-control--${this.size}`}\n as=\"span\"\n variant={CONTROL_SUPPORTING_TEXT_VARIANT[this.size]}\n emphasis\n color=\"primary\"\n role=\"row\"\n >\n <span class=\"ds-choice-section__header-label\" role=\"gridcell\">\n {section.header}\n </span>\n </ds-text>\n ) : section.header ? (\n <ds-text\n class={`ds-choice-section__header ds-control-section-heading ds-control--${this.size}`}\n as=\"span\"\n variant={CONTROL_SUPPORTING_TEXT_VARIANT[this.size]}\n emphasis\n color=\"primary\"\n aria-hidden=\"true\"\n >\n <span class=\"ds-choice-section__header-label\">{section.header}</span>\n </ds-text>\n ) : null}\n {section.options.map(option =>\n this.renderOption(option, flatIndex++, usesOptionIcons, usesOptionSubtext)\n )}\n </div>\n ))\n )}\n </div>\n {this.footerActionLabel && !this.isLoading ? (\n <ChoiceActionFooter\n size={this.size}\n label={this.footerActionLabel}\n onAction={this.activateFooterAction}\n />\n ) : this.allowClear && this.hasSelection && !this.isLoading ? (\n <ChoiceFooter\n size={this.size}\n summary={this.multiple ? `${count} ${this.selectedLabel}` : undefined}\n compactSummary={this.multiple ? String(count) : undefined}\n useCompactSummary={this.compactFooterSummary}\n contentRef={element => {\n this.footerContentElement = element ?? undefined;\n }}\n summaryMeasureRef={element => {\n this.footerSummaryMeasureElement = element ?? undefined;\n }}\n clearRef={element => {\n this.footerClearElement = element ?? undefined;\n }}\n clearLabel={this.clearLabel}\n onClear={this.clearSelection}\n />\n ) : null}\n </div>\n )}\n\n {showError && (\n <ds-text\n class=\"error-text\"\n as=\"div\"\n variant=\"text-body-small\"\n color=\"negative\"\n textId={this.errorId}\n role=\"alert\"\n >\n {this.errorMessage}\n </ds-text>\n )}\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{p as e,H as s,c as t,h as i,a as o,t as l}from"./index.js";import{o as a,a as r,r as n,b as d,d as h}from"./p-vzxD117T.js";import{i as c,r as m}from"./p-BEvBJ65v.js";import{d as u}from"./p-a6qP60zb.js";import{d as b}from"./p-DAV32g35.js";import{d as p}from"./p-BFfLvMZd.js";import{d as f}from"./p-JPTkZ3Ji.js";import{d as g}from"./p-3dYwA4i_.js";import{d as v}from"./p-MxptXwlW.js";import{d as k}from"./p-C4p2i59V.js";import{d as w}from"./p-Ct2GVdSI.js";import{d as _}from"./p-BHDkJmrC.js";import{d as y}from"./p-BhYWdbEp.js";import{d as x}from"./p-D2z2DgtX.js";import{d as E}from"./p-y4jhIkRc.js";import{d as j}from"./p-BGXqFq2C.js";import{d as C}from"./p-BK-JjdoN.js";const D=()=>`:host{display:block;min-width:0;min-height:0;height:100%;background:transparent}:host([responsive-mode='mobile']){width:100%;background:var(--color-background-primary)}.shell-tools__desktop,.shell-tools__desktop ds-panel-tools,.shell-tools__mobile{display:block;min-width:0;min-height:0;height:100%}.shell-tools__slot-proxy{display:block;width:100%;height:100%;min-width:0;min-height:0}.shell-tools__mobile{display:grid;grid-template-rows:auto minmax(0, 1fr);background:var(--color-background-primary)}.shell-tools__mobile-header{grid-row:1}.shell-tools__mobile-body,.shell-tools__view{min-width:0;min-height:0;height:100%}.shell-tools__mobile-body{grid-row:2;overflow:hidden}.shell-tools__view{overflow:auto;overscroll-behavior:contain}.shell-tools__view[hidden]{display:none}.shell-tools__view ::slotted(*){min-height:0}`;const T=e(class e extends s{constructor(e){super();if(e!==false){this.__registerHost()}this.__attachShadow();this.dsToolChange=t(this,"dsToolChange",7);this.dsPresentationChange=t(this,"dsPresentationChange",7);this.dsHeaderBack=t(this,"dsHeaderBack",7);this.dsHeaderAction=t(this,"dsHeaderAction",7);this.responsiveMode="desktop";this.open=false;this.activeTool="";this.presentation="drawer";this.fullscreenHeaderMode="shared";this.items=[];this.headers={};this.storageKey="";this.toolsLabel="Tools";this.toolShortcutsLabel="Tool shortcuts";this.inboxLabel="Inbox";this.inboxNavigationLabel="Inbox sections";this.panelToolsEl=null;this.selectInboxTool=e=>{const s=e.detail;if(!this.availableInboxTools.includes(s)||s===this.mobileActiveTool)return;this.open=true;this.activeTool=s;this.dsToolChange.emit({id:s,selected:true})};this.handlePanelToolChange=e=>{this.activeTool=e.detail.id;this.open=e.detail.selected};this.handlePanelPresentationChange=e=>{this.presentation=e.detail.presentation};this.handleMobileHeaderAction=(e,s,t)=>{t.stopPropagation();this.dsHeaderAction.emit({tool:e,id:s})}}presentationChanged(e,s){if(e===s)return;if(this.panelToolsEl&&this.panelToolsEl.getAttribute("presentation")!==e){this.panelToolsEl.setAttribute("presentation",e)}}get resolvedItems(){return this.items??[]}get availableInboxTools(){return this.resolvedItems.filter((e=>!e.isInactive&&(e.mobileDestination==="inbox"||c(e.id)))).map((e=>e.id))}get mobileViewOrder(){return a(this.resolvedItems).map((e=>e.id))}toolLabel(e){const s=this.resolvedItems.find((s=>s.id===e));return s?.label??s?.ariaLabel??r[e]??e}get mobileActiveTool(){const e=this.resolvedItems.find((e=>e.id===this.activeTool));const s=e?.mobileDestination==="inbox"||c(this.activeTool);if(!s)return this.activeTool;return m(this.activeTool,this.availableInboxTools)}componentWillLoad(){this.reconcileAvailability()}handleItemsChange(){this.reconcileAvailability()}reconcileAvailability(){const e=n(this.resolvedItems,this.open,this.activeTool);this.open=e.open;this.activeTool=e.activeTool}resolvedHeaders(){return this.headers??{}}activeHeader(e){return this.resolvedHeaders()[e]??{}}activateMobileTool(e){const s=this.resolvedItems.find((s=>s.id===e));if(!s||s.isInactive)return;const t=d(this.open,this.activeTool,e);this.open=t.open;this.activeTool=t.activeTool;this.dsToolChange.emit({id:e,selected:t.selected})}async activateTool(e){if(this.responsiveMode!=="mobile"){await(this.panelToolsEl?.activateTool(e));return}this.activateMobileTool(e)}async closeDrawer(){if(this.responsiveMode!=="mobile"){await(this.panelToolsEl?.closeDrawer());return}if(!this.open)return;const e=this.activeTool;this.open=false;if(e)this.dsToolChange.emit({id:e,selected:false})}async focusHeaderAction(e){if(this.responsiveMode!=="mobile"){await(this.panelToolsEl?.focusHeaderAction(e));return}const s=(this.el.shadowRoot??this.el).querySelector(`[data-header-action-id="${CSS.escape(e)}"]`);await(s?.setFocus?.())}renderForwardedSlots(){return this.mobileViewOrder.flatMap((e=>[i("div",{key:`tool:${e}`,class:"shell-tools__slot-proxy",slot:e},i("slot",{name:e})),i("div",{key:`tool-view:${e}`,class:"shell-tools__slot-proxy",slot:`${e}-view`},i("slot",{name:`${e}-view`}))]))}renderDesktop(){return i("div",{class:"shell-tools__desktop"},i("ds-panel-tools",{open:this.open,activeTool:this.activeTool,presentation:this.presentation,fullscreenHeaderMode:this.fullscreenHeaderMode,items:this.resolvedItems,headers:this.resolvedHeaders(),storageKey:this.storageKey,toolsLabel:this.toolsLabel,toolShortcutsLabel:this.toolShortcutsLabel,ref:e=>{this.panelToolsEl=e},onDsToolChange:this.handlePanelToolChange,onDsPresentationChange:this.handlePanelPresentationChange},this.renderForwardedSlots()))}renderMobileHeader(e){const s=this.activeHeader(e);const t=s.title?.trim();const o=t||this.toolLabel(e);const l=(s.actions??[]).filter((e=>e.id!=="fullscreen"));const a=c(e)&&!s.showBack;const r=a?this.availableInboxTools.map((e=>{const s=this.resolvedItems.find((s=>s.id===e));return{id:e,label:this.toolLabel(e),variant:"label",dot:s?.dot}})):[];return i("ds-mobile-header",{class:"shell-tools__mobile-header",heading:o,headingLevel:"h2",sections:r,value:e,sectionsAriaLabel:this.inboxNavigationLabel,sectionsPresentation:a?"segmented":"switcher",sectionsSize:"lg",onDsSectionChange:this.selectInboxTool},s.showBack?i("ds-tooltip",{slot:"leading",label:s.backAriaLabel||"Back",side:"bottom",size:"sm"},i("ds-button-unfilled",{variant:"icon",icon:s.backIcon||"ChevronLeft",size:"md","aria-label":s.backAriaLabel||"Back",activeFill:false,hasBorder:false,onDsClick:()=>this.dsHeaderBack.emit({tool:e})})):null,l.map((s=>i("ds-tooltip",{slot:"trailing",key:s.id,label:s.ariaLabel,side:"bottom",size:"sm"},i("ds-button-unfilled",{id:s.triggerId||undefined,"data-header-action-id":s.id,variant:"icon",icon:s.icon,size:"md","aria-label":s.ariaLabel,haspopup:s.haspopup,controls:s.controls,expanded:s.expanded,pressed:s.pressed,isInactive:s.isInactive,activeFill:false,hasBorder:false,onDsClick:t=>this.handleMobileHeaderAction(e,s.id,t)})))))}renderMobile(){const e=this.mobileActiveTool;return i("div",{class:"shell-tools__mobile","aria-hidden":this.open&&e?undefined:"true",inert:this.open&&e?undefined:true},e?this.renderMobileHeader(e):null,i("div",{class:"shell-tools__mobile-body"},this.mobileViewOrder.map((s=>{const t=this.open&&s===e;return i("div",{key:`mobile-tool-view:${s}`,class:{"shell-tools__view":true,"shell-tools__view--active":t},hidden:!t,"aria-hidden":t?undefined:"true",inert:t?undefined:true},i("slot",{name:`${s}-view`},i("slot",{name:s})))}))))}render(){const e=this.responsiveMode==="mobile";return i(o,{key:"5b5c813d7099816de2efef68d0f5335b5f6d212e",role:e?this.presentation==="fullscreen"?"dialog":"complementary":undefined,"aria-modal":e&&this.presentation==="fullscreen"?"true":undefined,"aria-label":e?this.toolsLabel:undefined},e?this.renderMobile():this.renderDesktop())}get el(){return this}static get watchers(){return{presentation:[{presentationChanged:0}],items:[{handleItemsChange:0}]}}static get style(){return D()}},[257,"ds-shell-tools",{responsiveMode:[513,"responsive-mode"],open:[1540],activeTool:[1537,"active-tool"],presentation:[1537],fullscreenHeaderMode:[513,"fullscreen-header-mode"],items:[16],headers:[16],storageKey:[1,"storage-key"],toolsLabel:[1,"tools-label"],toolShortcutsLabel:[1,"tool-shortcuts-label"],inboxLabel:[1,"inbox-label"],inboxNavigationLabel:[1,"inbox-navigation-label"],activateTool:[64],closeDrawer:[64],focusHeaderAction:[64]},undefined,{presentation:[{presentationChanged:0}],items:[{handleItemsChange:0}]}]);function B(){if(typeof customElements==="undefined"){return}const e=["ds-shell-tools","ds-badge","ds-button-unfilled","ds-icon","ds-loader","ds-menu","ds-mobile-header","ds-mobile-section-switcher","ds-panel-tool-header","ds-panel-tools","ds-swatch-picker","ds-switch","ds-tab-group","ds-tag","ds-text","ds-tooltip"];e.forEach((e=>{switch(e){case"ds-shell-tools":if(!customElements.get(l(e))){customElements.define(l(e),T)}break;case"ds-badge":if(!customElements.get(l(e))){u()}break;case"ds-button-unfilled":if(!customElements.get(l(e))){b()}break;case"ds-icon":if(!customElements.get(l(e))){p()}break;case"ds-loader":if(!customElements.get(l(e))){f()}break;case"ds-menu":if(!customElements.get(l(e))){g()}break;case"ds-mobile-header":if(!customElements.get(l(e))){v()}break;case"ds-mobile-section-switcher":if(!customElements.get(l(e))){k()}break;case"ds-panel-tool-header":if(!customElements.get(l(e))){w()}break;case"ds-panel-tools":if(!customElements.get(l(e))){h()}break;case"ds-swatch-picker":if(!customElements.get(l(e))){_()}break;case"ds-switch":if(!customElements.get(l(e))){y()}break;case"ds-tab-group":if(!customElements.get(l(e))){x()}break;case"ds-tag":if(!customElements.get(l(e))){E()}break;case"ds-text":if(!customElements.get(l(e))){j()}break;case"ds-tooltip":if(!customElements.get(l(e))){C()}break}}))}B();export{T as S,B as d};
|
|
2
|
-
//# sourceMappingURL=p-CwkcFMMe.js.map
|