@keenmate/web-multiselect 1.8.5 → 1.8.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +669 -0
- package/dist/multiselect.js +3 -3
- package/dist/multiselect.umd.js +2 -2
- package/package.json +4 -3
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,669 @@
|
|
|
1
|
+
import { Placement } from '@floating-ui/dom';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Action button configuration for dropdown actions (Select All, Clear All, custom actions)
|
|
5
|
+
* @template T The type of data items
|
|
6
|
+
*/
|
|
7
|
+
declare interface ActionButton<T = any> {
|
|
8
|
+
/** Action identifier ('select-all', 'clear-all', or 'custom' for custom actions) */
|
|
9
|
+
action: 'select-all' | 'clear-all' | 'custom';
|
|
10
|
+
/** Button text label */
|
|
11
|
+
text: string;
|
|
12
|
+
/** Optional CSS class(es) to add to the button */
|
|
13
|
+
cssClass?: string;
|
|
14
|
+
/** Optional tooltip text */
|
|
15
|
+
tooltip?: string;
|
|
16
|
+
/** Static visibility - set to false to hide button */
|
|
17
|
+
isVisible?: boolean;
|
|
18
|
+
/** Static disabled state - set to true to disable button */
|
|
19
|
+
isDisabled?: boolean;
|
|
20
|
+
/** Custom click handler (required for 'custom' action) */
|
|
21
|
+
onClick?: (multiselect: any) => void | Promise<void>;
|
|
22
|
+
/** Dynamic visibility callback - return false to hide button (takes priority over isVisible) */
|
|
23
|
+
isVisibleCallback?: (multiselect: any) => boolean;
|
|
24
|
+
/** Dynamic disabled state callback - return true to disable button (takes priority over isDisabled) */
|
|
25
|
+
isDisabledCallback?: (multiselect: any) => boolean;
|
|
26
|
+
/** Dynamic text callback - return button text (takes priority over text) */
|
|
27
|
+
getTextCallback?: (multiselect: any) => string;
|
|
28
|
+
/** Dynamic CSS class callback - return class name(s) (takes priority over cssClass) */
|
|
29
|
+
getClassCallback?: (multiselect: any) => string | string[];
|
|
30
|
+
/** Dynamic tooltip callback - return tooltip text (takes priority over tooltip) */
|
|
31
|
+
getTooltipCallback?: (multiselect: any) => string;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Layout mode for action buttons container
|
|
36
|
+
* - 'nowrap': Buttons stay in single row (default)
|
|
37
|
+
* - 'wrap': Buttons wrap to multiple rows when needed
|
|
38
|
+
*/
|
|
39
|
+
declare type ActionsLayout = 'nowrap' | 'wrap';
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Context provided to renderBadgeContentCallback
|
|
43
|
+
*/
|
|
44
|
+
declare interface BadgeContentRenderContext {
|
|
45
|
+
/** Current badges display mode */
|
|
46
|
+
displayMode: BadgesDisplayMode;
|
|
47
|
+
/** Whether the badge is being rendered in the selected items popover */
|
|
48
|
+
isInPopover: boolean;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Display mode for selected items (badges area)
|
|
53
|
+
*/
|
|
54
|
+
export declare type BadgesDisplayMode = 'badges' | 'count' | 'compact' | 'partial' | 'none';
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Position of the badges container relative to the input
|
|
58
|
+
*/
|
|
59
|
+
export declare type BadgesPosition = 'top' | 'bottom' | 'left' | 'right';
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Threshold behavior mode when badges exceed threshold
|
|
63
|
+
*/
|
|
64
|
+
export declare type BadgesThresholdMode = 'count' | 'partial';
|
|
65
|
+
|
|
66
|
+
declare const BaseElement: typeof HTMLElement;
|
|
67
|
+
|
|
68
|
+
export declare const dataLogger: any;
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Disable all logging (set to silent level)
|
|
72
|
+
*/
|
|
73
|
+
export declare function disableLogging(): void;
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Enable all logging (set to debug level)
|
|
77
|
+
*/
|
|
78
|
+
export declare function enableLogging(): void;
|
|
79
|
+
|
|
80
|
+
export declare interface GlobalMultiSelectAPI {
|
|
81
|
+
version: () => string;
|
|
82
|
+
config: {
|
|
83
|
+
name: string;
|
|
84
|
+
version: string;
|
|
85
|
+
author: string;
|
|
86
|
+
license: string;
|
|
87
|
+
repository: string;
|
|
88
|
+
homepage: string;
|
|
89
|
+
};
|
|
90
|
+
logging: {
|
|
91
|
+
enableLogging: () => void;
|
|
92
|
+
disableLogging: () => void;
|
|
93
|
+
setLogLevel: (level: string) => void;
|
|
94
|
+
setCategoryLevel: (category: string, level: string) => void;
|
|
95
|
+
getCategories: () => string[];
|
|
96
|
+
};
|
|
97
|
+
register: () => void;
|
|
98
|
+
getInstances: () => HTMLElement[];
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export declare const initLogger: any;
|
|
102
|
+
|
|
103
|
+
export declare const interactionLogger: any;
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* List of all logging categories for introspection
|
|
107
|
+
*/
|
|
108
|
+
export declare const LOGGING_CATEGORIES: string[];
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Generic configuration options for the MultiSelect component
|
|
112
|
+
* @template T The type of data items
|
|
113
|
+
*/
|
|
114
|
+
declare interface MultiSelectConfig<T = any> {
|
|
115
|
+
/** Options array - can be objects or [key, value] tuples */
|
|
116
|
+
options?: T[];
|
|
117
|
+
/** Member property name for value/ID extraction */
|
|
118
|
+
valueMember?: string;
|
|
119
|
+
/** Callback to extract value/ID from item */
|
|
120
|
+
getValueCallback?: (item: T) => string | number;
|
|
121
|
+
/** Member property name for display value extraction */
|
|
122
|
+
displayValueMember?: string;
|
|
123
|
+
/** Callback to extract display value from item */
|
|
124
|
+
getDisplayValueCallback?: (item: T) => string;
|
|
125
|
+
/** Callback to customize badge display text (defaults to display value if not provided) */
|
|
126
|
+
getBadgeDisplayCallback?: (item: T) => string;
|
|
127
|
+
/** Callback to add custom CSS classes to badges - return string or array of class names */
|
|
128
|
+
getBadgeClassCallback?: (item: T) => string | string[];
|
|
129
|
+
/** Callback to inject custom CSS into Shadow DOM - return CSS string for styling custom classes */
|
|
130
|
+
customStylesCallback?: () => string;
|
|
131
|
+
/** Member property name for search value extraction */
|
|
132
|
+
searchValueMember?: string;
|
|
133
|
+
/** Callback to extract search value from item */
|
|
134
|
+
getSearchValueCallback?: (item: T) => string;
|
|
135
|
+
/** Member property name for icon extraction */
|
|
136
|
+
iconMember?: string;
|
|
137
|
+
/** Callback to extract icon from item */
|
|
138
|
+
getIconCallback?: (item: T) => string;
|
|
139
|
+
/** Member property name for subtitle extraction */
|
|
140
|
+
subtitleMember?: string;
|
|
141
|
+
/** Callback to extract subtitle from item */
|
|
142
|
+
getSubtitleCallback?: (item: T) => string;
|
|
143
|
+
/** Member property name for group extraction */
|
|
144
|
+
groupMember?: string;
|
|
145
|
+
/** Callback to extract group from item */
|
|
146
|
+
getGroupCallback?: (item: T) => string;
|
|
147
|
+
/** Callback to customize group label content (can return HTML) */
|
|
148
|
+
renderGroupLabelContentCallback?: (groupName: string) => string | HTMLElement;
|
|
149
|
+
/** Member property name for disabled state extraction */
|
|
150
|
+
disabledMember?: string;
|
|
151
|
+
/** Callback to extract disabled state from item */
|
|
152
|
+
getDisabledCallback?: (item: T) => boolean;
|
|
153
|
+
/** Custom renderer for dropdown option content - return HTML string or HTMLElement */
|
|
154
|
+
renderOptionContentCallback?: (item: T, context: OptionContentRenderContext) => string | HTMLElement;
|
|
155
|
+
/** Custom renderer for badge content (main badges area) - return HTML string or HTMLElement */
|
|
156
|
+
renderBadgeContentCallback?: (item: T, context: BadgeContentRenderContext) => string | HTMLElement;
|
|
157
|
+
/** Custom renderer for selected item content in popover - return HTML string or HTMLElement */
|
|
158
|
+
renderSelectedItemContentCallback?: (item: T) => string | HTMLElement;
|
|
159
|
+
/** Callback to add custom CSS classes to selected items in popover - return string or array of class names */
|
|
160
|
+
getSelectedItemClassCallback?: (item: T) => string | string[];
|
|
161
|
+
/** Custom renderer for selected item display in single-select mode - return plain text */
|
|
162
|
+
renderSelectedContentCallback?: (item: T) => string;
|
|
163
|
+
/** HTML form field ID/name for hidden input */
|
|
164
|
+
formFieldId?: string;
|
|
165
|
+
/** Format for value serialization (forms and callbacks) */
|
|
166
|
+
valueFormat?: ValueFormat;
|
|
167
|
+
/** Custom callback to format value */
|
|
168
|
+
getValueFormatCallback?: (selectedValues: (string | number)[]) => string;
|
|
169
|
+
/** Allow multiple selections (internal: isMultipleEnabled) */
|
|
170
|
+
isMultipleEnabled?: boolean;
|
|
171
|
+
/** Enable search/filtering (internal: isSearchEnabled) */
|
|
172
|
+
isSearchEnabled?: boolean;
|
|
173
|
+
/** Allow grouping of options (internal: isGroupsAllowed) */
|
|
174
|
+
isGroupsAllowed?: boolean;
|
|
175
|
+
/** Action buttons configuration (Select All, Clear All, custom actions) */
|
|
176
|
+
actionButtons?: ActionButton<T>[];
|
|
177
|
+
/** Show checkboxes next to options (internal: isCheckboxesShown) */
|
|
178
|
+
isCheckboxesShown?: boolean;
|
|
179
|
+
/** Keep Select All/Clear All buttons fixed at top while scrolling (internal: isActionsSticky) */
|
|
180
|
+
isActionsSticky?: boolean;
|
|
181
|
+
/** Close dropdown after selecting an option (internal: isCloseOnSelect) */
|
|
182
|
+
isCloseOnSelect?: boolean;
|
|
183
|
+
/** Lock dropdown placement after first open (internal: isPlacementLocked) */
|
|
184
|
+
isPlacementLocked?: boolean;
|
|
185
|
+
/** Allow adding new options not in the list (internal: isAddNewAllowed) */
|
|
186
|
+
isAddNewAllowed?: boolean;
|
|
187
|
+
/** Show count badge next to toggle icon (internal: isCounterShown) */
|
|
188
|
+
isCounterShown?: boolean;
|
|
189
|
+
/** Keep initial options visible when searchCallback is active and search term is empty/short (internal: isKeepOptionsOnSearch) */
|
|
190
|
+
isKeepOptionsOnSearch?: boolean;
|
|
191
|
+
/** Keep search text and filtered results when dropdown closes (default: true) */
|
|
192
|
+
shouldKeepSearchOnClose?: boolean;
|
|
193
|
+
/** Enable virtual scrolling for large datasets (internal: isVirtualScrollEnabled) */
|
|
194
|
+
isVirtualScrollEnabled?: boolean;
|
|
195
|
+
/** Vertical alignment of checkboxes relative to option content */
|
|
196
|
+
checkboxAlign?: 'top' | 'center' | 'bottom';
|
|
197
|
+
/** Hint text shown above the input when focused */
|
|
198
|
+
searchHint?: string;
|
|
199
|
+
/** Placeholder text for the search input */
|
|
200
|
+
searchPlaceholder?: string;
|
|
201
|
+
/** Minimum width for the dropdown (e.g., '20rem', '300px') */
|
|
202
|
+
dropdownMinWidth?: string | null;
|
|
203
|
+
/** Maximum width for the dropdown (e.g., '40rem', '500px') */
|
|
204
|
+
dropdownMaxWidth?: string | null;
|
|
205
|
+
/** Display mode for selected items in badges area */
|
|
206
|
+
badgesDisplayMode?: BadgesDisplayMode;
|
|
207
|
+
/** Position of badges container */
|
|
208
|
+
badgesPosition?: BadgesPosition;
|
|
209
|
+
/** Threshold behavior mode: 'count' shows count badge, 'partial' shows limited badges + more badge */
|
|
210
|
+
badgesThresholdMode?: BadgesThresholdMode;
|
|
211
|
+
/** Maximum height for dropdown */
|
|
212
|
+
maxHeight?: string;
|
|
213
|
+
/** Message shown when no results found */
|
|
214
|
+
emptyMessage?: string;
|
|
215
|
+
/** Message shown while loading async data */
|
|
216
|
+
loadingMessage?: string;
|
|
217
|
+
/** Search input display mode */
|
|
218
|
+
searchInputMode?: SearchInputMode;
|
|
219
|
+
/** Search behavior mode: 'filter' (hide non-matches) or 'navigate' (jump to matches, keep all visible) */
|
|
220
|
+
searchMode?: SearchMode;
|
|
221
|
+
/** Layout mode for action buttons: 'nowrap' (default) or 'wrap' for multi-row */
|
|
222
|
+
actionsLayout?: ActionsLayout;
|
|
223
|
+
/** Auto-switch from badges to count when threshold is exceeded */
|
|
224
|
+
badgesThreshold?: number | null;
|
|
225
|
+
/** Maximum number of badges to show in partial mode (used with thresholdMode='partial') */
|
|
226
|
+
badgesMaxVisible?: number | null;
|
|
227
|
+
/** Minimum search length before loading data */
|
|
228
|
+
minSearchLength?: number;
|
|
229
|
+
/** Minimum items before virtual scroll activates (default: 100) */
|
|
230
|
+
virtualScrollThreshold?: number;
|
|
231
|
+
/** Fixed height for each option in pixels (required for virtual scroll, default: 50) */
|
|
232
|
+
optionHeight?: number;
|
|
233
|
+
/** Fixed height for each badge in selected items popover in pixels (required for virtual scroll, default: 36) */
|
|
234
|
+
badgeHeight?: number;
|
|
235
|
+
/** Buffer size for virtual scroll - items above/below viewport (default: 10) */
|
|
236
|
+
virtualScrollBuffer?: number;
|
|
237
|
+
/** Pre-process search term before calling searchCallback. Return null to prevent search. Use for accent removal, validation, etc. */
|
|
238
|
+
beforeSearchCallback?: ((searchTerm: string) => string | null) | null;
|
|
239
|
+
/** Async function to load data: (searchTerm) => Promise<options[]> */
|
|
240
|
+
searchCallback?: ((searchTerm: string) => Promise<T[]>) | null;
|
|
241
|
+
/** Callback to add a new option when isAddNewAllowed is true */
|
|
242
|
+
addNewCallback?: ((value: string) => T | Promise<T>) | null;
|
|
243
|
+
/** Callback when an option is selected */
|
|
244
|
+
selectCallback?: ((option: T) => void) | null;
|
|
245
|
+
/** Callback when an option is deselected */
|
|
246
|
+
deselectCallback?: ((option: T) => void) | null;
|
|
247
|
+
/** Callback when selection changes */
|
|
248
|
+
changeCallback?: ((selectedOptions: T[]) => void) | null;
|
|
249
|
+
/** Callback to format count badge text (for i18n/pluralization). When moreCount is provided, it's for the "+X more" badge in partial mode. */
|
|
250
|
+
getCounterCallback?: ((count: number, moreCount?: number) => string) | null;
|
|
251
|
+
/** Enable tooltips on selected item badges (internal: isBadgeTooltipsEnabled) */
|
|
252
|
+
isBadgeTooltipsEnabled?: boolean;
|
|
253
|
+
/** Callback to generate custom tooltip content for a badge */
|
|
254
|
+
getBadgeTooltipCallback?: ((item: T) => string | HTMLElement) | null;
|
|
255
|
+
/** Callback to generate custom tooltip text for a remove button */
|
|
256
|
+
getRemoveButtonTooltipCallback?: ((item: T) => string) | null;
|
|
257
|
+
/** Format string for remove button tooltip text. Use {0} as placeholder for item name. Default: "Remove {0}" */
|
|
258
|
+
removeButtonTooltipText?: string;
|
|
259
|
+
/** Tooltip placement relative to badge */
|
|
260
|
+
badgeTooltipPlacement?: Placement;
|
|
261
|
+
/** Delay before showing tooltip in milliseconds */
|
|
262
|
+
badgeTooltipDelay?: number;
|
|
263
|
+
/** Offset distance for tooltip in pixels */
|
|
264
|
+
badgeTooltipOffset?: number;
|
|
265
|
+
/** Container element for dropdown/hint/popover (for Shadow DOM support) */
|
|
266
|
+
container?: HTMLElement | null;
|
|
267
|
+
/** Host element for appending hidden inputs (for form integration with shadow DOM) */
|
|
268
|
+
hostElement?: HTMLElement;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
export declare class MultiSelectElement<T = any> extends BaseElement {
|
|
272
|
+
private picker?;
|
|
273
|
+
private containerElement?;
|
|
274
|
+
private shadow;
|
|
275
|
+
private _options?;
|
|
276
|
+
private _valueMember?;
|
|
277
|
+
private _getValueCallback?;
|
|
278
|
+
private _displayValueMember?;
|
|
279
|
+
private _getDisplayValueCallback?;
|
|
280
|
+
private _getBadgeDisplayCallback?;
|
|
281
|
+
private _getBadgeClassCallback?;
|
|
282
|
+
private _customStylesCallback?;
|
|
283
|
+
private _searchValueMember?;
|
|
284
|
+
private _getSearchValueCallback?;
|
|
285
|
+
private _iconMember?;
|
|
286
|
+
private _getIconCallback?;
|
|
287
|
+
private _subtitleMember?;
|
|
288
|
+
private _getSubtitleCallback?;
|
|
289
|
+
private _groupMember?;
|
|
290
|
+
private _getGroupCallback?;
|
|
291
|
+
private _renderGroupLabelContentCallback?;
|
|
292
|
+
private _disabledMember?;
|
|
293
|
+
private _getDisabledCallback?;
|
|
294
|
+
private _getValueFormatCallback?;
|
|
295
|
+
private _getBadgeTooltipCallback?;
|
|
296
|
+
private _getRemoveButtonTooltipCallback?;
|
|
297
|
+
private _renderOptionContentCallback?;
|
|
298
|
+
private _renderBadgeContentCallback?;
|
|
299
|
+
private _renderSelectedItemContentCallback?;
|
|
300
|
+
private _getSelectedItemClassCallback?;
|
|
301
|
+
private _renderSelectedContentCallback?;
|
|
302
|
+
private _getCounterCallback?;
|
|
303
|
+
private _actionButtons?;
|
|
304
|
+
private _beforeSearchCallback?;
|
|
305
|
+
private _searchCallback?;
|
|
306
|
+
private _addNewCallback?;
|
|
307
|
+
private _selectCallback?;
|
|
308
|
+
private _deselectCallback?;
|
|
309
|
+
private _changeCallback?;
|
|
310
|
+
static get observedAttributes(): string[];
|
|
311
|
+
constructor();
|
|
312
|
+
connectedCallback(): void;
|
|
313
|
+
disconnectedCallback(): void;
|
|
314
|
+
attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
|
|
315
|
+
private render;
|
|
316
|
+
private renderDebugInfo;
|
|
317
|
+
private updateDebugInfo;
|
|
318
|
+
/**
|
|
319
|
+
* Parse declarative <option> and <optgroup> elements from Light DOM
|
|
320
|
+
* Returns array of options in the format expected by the picker
|
|
321
|
+
*/
|
|
322
|
+
private parseDeclarativeOptions;
|
|
323
|
+
private _declarativeSelectedValues?;
|
|
324
|
+
private initializePicker;
|
|
325
|
+
private reinitialize;
|
|
326
|
+
get options(): T[] | undefined;
|
|
327
|
+
set options(value: T[] | undefined);
|
|
328
|
+
set valueMember(value: string | null);
|
|
329
|
+
get valueMember(): string | null;
|
|
330
|
+
set displayValueMember(value: string | null);
|
|
331
|
+
get displayValueMember(): string | null;
|
|
332
|
+
set searchValueMember(value: string | null);
|
|
333
|
+
get searchValueMember(): string | null;
|
|
334
|
+
set iconMember(value: string | null);
|
|
335
|
+
get iconMember(): string | null;
|
|
336
|
+
set subtitleMember(value: string | null);
|
|
337
|
+
get subtitleMember(): string | null;
|
|
338
|
+
set groupMember(value: string | null);
|
|
339
|
+
get groupMember(): string | null;
|
|
340
|
+
set disabledMember(value: string | null);
|
|
341
|
+
get disabledMember(): string | null;
|
|
342
|
+
set getValueCallback(callback: ((item: T) => string | number) | undefined);
|
|
343
|
+
get getValueCallback(): ((item: T) => string | number) | undefined;
|
|
344
|
+
set getDisplayValueCallback(callback: ((item: T) => string) | undefined);
|
|
345
|
+
get getDisplayValueCallback(): ((item: T) => string) | undefined;
|
|
346
|
+
set getBadgeDisplayCallback(callback: ((item: T) => string) | undefined);
|
|
347
|
+
get getBadgeDisplayCallback(): ((item: T) => string) | undefined;
|
|
348
|
+
set getBadgeClassCallback(callback: ((item: T) => string | string[]) | undefined);
|
|
349
|
+
get getBadgeClassCallback(): ((item: T) => string | string[]) | undefined;
|
|
350
|
+
set customStylesCallback(value: (() => string) | undefined);
|
|
351
|
+
get customStylesCallback(): (() => string) | undefined;
|
|
352
|
+
set getSearchValueCallback(callback: ((item: T) => string) | undefined);
|
|
353
|
+
get getSearchValueCallback(): ((item: T) => string) | undefined;
|
|
354
|
+
set getIconCallback(callback: ((item: T) => string) | undefined);
|
|
355
|
+
get getIconCallback(): ((item: T) => string) | undefined;
|
|
356
|
+
set getSubtitleCallback(callback: ((item: T) => string) | undefined);
|
|
357
|
+
get getSubtitleCallback(): ((item: T) => string) | undefined;
|
|
358
|
+
set getGroupCallback(callback: ((item: T) => string) | undefined);
|
|
359
|
+
get getGroupCallback(): ((item: T) => string) | undefined;
|
|
360
|
+
set renderGroupLabelContentCallback(callback: ((groupName: string) => string | HTMLElement) | undefined);
|
|
361
|
+
get renderGroupLabelContentCallback(): ((groupName: string) => string | HTMLElement) | undefined;
|
|
362
|
+
set getDisabledCallback(callback: ((item: T) => boolean) | undefined);
|
|
363
|
+
get getDisabledCallback(): ((item: T) => boolean) | undefined;
|
|
364
|
+
set renderOptionContentCallback(callback: ((item: T, context: OptionContentRenderContext) => string | HTMLElement) | undefined);
|
|
365
|
+
get renderOptionContentCallback(): ((item: T, context: OptionContentRenderContext) => string | HTMLElement) | undefined;
|
|
366
|
+
set renderBadgeContentCallback(callback: ((item: T, context: BadgeContentRenderContext) => string | HTMLElement) | undefined);
|
|
367
|
+
get renderBadgeContentCallback(): ((item: T, context: BadgeContentRenderContext) => string | HTMLElement) | undefined;
|
|
368
|
+
set renderSelectedItemContentCallback(callback: ((item: T) => string | HTMLElement) | undefined);
|
|
369
|
+
get renderSelectedItemContentCallback(): ((item: T) => string | HTMLElement) | undefined;
|
|
370
|
+
set getSelectedItemClassCallback(callback: ((item: T) => string | string[]) | undefined);
|
|
371
|
+
get getSelectedItemClassCallback(): ((item: T) => string | string[]) | undefined;
|
|
372
|
+
set renderSelectedContentCallback(callback: ((item: T) => string) | undefined);
|
|
373
|
+
get renderSelectedContentCallback(): ((item: T) => string) | undefined;
|
|
374
|
+
set name(value: string | null);
|
|
375
|
+
get name(): string | null;
|
|
376
|
+
set valueFormat(value: 'json' | 'csv' | 'array' | null);
|
|
377
|
+
get valueFormat(): string | null;
|
|
378
|
+
set getValueFormatCallback(callback: ((values: (string | number)[]) => string) | undefined);
|
|
379
|
+
get getValueFormatCallback(): ((values: (string | number)[]) => string) | undefined;
|
|
380
|
+
set thresholdMode(value: 'count' | 'partial' | null);
|
|
381
|
+
get thresholdMode(): string | null;
|
|
382
|
+
set badgesMaxVisible(value: number | null);
|
|
383
|
+
get badgesMaxVisible(): number | null;
|
|
384
|
+
set checkboxAlign(value: 'top' | 'center' | 'bottom' | null);
|
|
385
|
+
get checkboxAlign(): string | null;
|
|
386
|
+
set enableBadgeTooltips(value: boolean);
|
|
387
|
+
get enableBadgeTooltips(): boolean;
|
|
388
|
+
set badgeTooltipPlacement(value: string | null);
|
|
389
|
+
get badgeTooltipPlacement(): string | null;
|
|
390
|
+
set getBadgeTooltipCallback(callback: ((item: T) => string | HTMLElement) | undefined);
|
|
391
|
+
get getBadgeTooltipCallback(): ((item: T) => string | HTMLElement) | undefined;
|
|
392
|
+
set getRemoveButtonTooltipCallback(callback: ((item: T) => string) | undefined);
|
|
393
|
+
get getRemoveButtonTooltipCallback(): ((item: T) => string) | undefined;
|
|
394
|
+
set removeButtonTooltipText(value: string | null);
|
|
395
|
+
get removeButtonTooltipText(): string | null;
|
|
396
|
+
set getCounterCallback(callback: ((count: number, moreCount?: number) => string) | undefined);
|
|
397
|
+
get getCounterCallback(): ((count: number, moreCount?: number) => string) | undefined;
|
|
398
|
+
get beforeSearchCallback(): ((searchTerm: string) => string | null) | undefined;
|
|
399
|
+
set beforeSearchCallback(callback: ((searchTerm: string) => string | null) | undefined);
|
|
400
|
+
get searchCallback(): ((searchTerm: string) => Promise<T[]>) | undefined;
|
|
401
|
+
set searchCallback(callback: ((searchTerm: string) => Promise<T[]>) | undefined);
|
|
402
|
+
get addNewCallback(): ((value: string) => T | Promise<T>) | undefined;
|
|
403
|
+
set addNewCallback(callback: ((value: string) => T | Promise<T>) | undefined);
|
|
404
|
+
get selectCallback(): ((option: T) => void) | undefined;
|
|
405
|
+
set selectCallback(callback: ((option: T) => void) | undefined);
|
|
406
|
+
get deselectCallback(): ((option: T) => void) | undefined;
|
|
407
|
+
set deselectCallback(callback: ((option: T) => void) | undefined);
|
|
408
|
+
get changeCallback(): ((selectedOptions: T[]) => void) | undefined;
|
|
409
|
+
set changeCallback(callback: ((selectedOptions: T[]) => void) | undefined);
|
|
410
|
+
get actionButtons(): any[] | undefined;
|
|
411
|
+
set actionButtons(value: any[] | undefined);
|
|
412
|
+
get selectedValue(): string | number | (string | number)[] | null;
|
|
413
|
+
get selectedItem(): T | null;
|
|
414
|
+
getSelected(): T[];
|
|
415
|
+
setSelected(values: (string | number)[]): void;
|
|
416
|
+
getValue(): string | number | (string | number)[] | null;
|
|
417
|
+
destroy(): void;
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
/**
|
|
421
|
+
* Event detail structure for multiselect events
|
|
422
|
+
* @template T The type of data items
|
|
423
|
+
*/
|
|
424
|
+
export declare interface MultiSelectEventDetail<T = any> {
|
|
425
|
+
/** Currently selected options */
|
|
426
|
+
selectedOptions: T[];
|
|
427
|
+
/** Selected values array */
|
|
428
|
+
selectedValues: (string | number)[];
|
|
429
|
+
/** The option that triggered the event (for select/deselect) */
|
|
430
|
+
option?: T;
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
/**
|
|
434
|
+
* Legacy interface for backward reference
|
|
435
|
+
* Note: New code should use generic types with member/callback properties
|
|
436
|
+
* @deprecated Use generic types with valueMember/displayValueMember instead
|
|
437
|
+
*/
|
|
438
|
+
export declare interface MultiSelectOption {
|
|
439
|
+
/** Unique identifier for the option */
|
|
440
|
+
value: string;
|
|
441
|
+
/** Display label */
|
|
442
|
+
label: string;
|
|
443
|
+
/** Optional icon or emoji */
|
|
444
|
+
icon?: string;
|
|
445
|
+
/** Optional subtitle/description */
|
|
446
|
+
subtitle?: string;
|
|
447
|
+
/** Optional group name */
|
|
448
|
+
group?: string;
|
|
449
|
+
/** Whether the option is disabled */
|
|
450
|
+
disabled?: boolean;
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
/**
|
|
454
|
+
* Legacy options interface
|
|
455
|
+
* @deprecated Use MultiSelectConfig<T> instead
|
|
456
|
+
*/
|
|
457
|
+
export declare interface MultiSelectOptions extends MultiSelectConfig<MultiSelectOption> {
|
|
458
|
+
options?: MultiSelectOption[];
|
|
459
|
+
searchCallback?: ((searchTerm: string) => Promise<MultiSelectOption[]>) | null;
|
|
460
|
+
addNewCallback?: ((value: string) => MultiSelectOption | Promise<MultiSelectOption>) | null;
|
|
461
|
+
selectCallback?: ((option: MultiSelectOption) => void) | null;
|
|
462
|
+
deselectCallback?: ((option: MultiSelectOption) => void) | null;
|
|
463
|
+
changeCallback?: ((selectedOptions: MultiSelectOption[]) => void) | null;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
/**
|
|
467
|
+
* Context provided to renderOptionContentCallback
|
|
468
|
+
*/
|
|
469
|
+
declare interface OptionContentRenderContext {
|
|
470
|
+
/** Index of the option in the filtered list */
|
|
471
|
+
index: number;
|
|
472
|
+
/** Whether the option is currently selected */
|
|
473
|
+
isSelected: boolean;
|
|
474
|
+
/** Whether the option is currently focused (keyboard navigation) */
|
|
475
|
+
isFocused: boolean;
|
|
476
|
+
/** Whether the option matches the current search term (navigate mode only) */
|
|
477
|
+
isMatched: boolean;
|
|
478
|
+
/** Whether the option is disabled */
|
|
479
|
+
isDisabled: boolean;
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
/**
|
|
483
|
+
* Search input display mode
|
|
484
|
+
*/
|
|
485
|
+
export declare type SearchInputMode = 'normal' | 'readonly' | 'hidden';
|
|
486
|
+
|
|
487
|
+
/**
|
|
488
|
+
* Search behavior mode
|
|
489
|
+
* - 'filter': Hide non-matching options (default)
|
|
490
|
+
* - 'navigate': Keep all options visible, jump to matches
|
|
491
|
+
*/
|
|
492
|
+
export declare type SearchMode = 'filter' | 'navigate';
|
|
493
|
+
|
|
494
|
+
/**
|
|
495
|
+
* Set log level for a specific category
|
|
496
|
+
* @param category Category logger to configure (e.g., 'MULTISELECT:UI')
|
|
497
|
+
* @param level Log level to set ('trace' | 'debug' | 'info' | 'warn' | 'error' | 'silent')
|
|
498
|
+
*/
|
|
499
|
+
export declare function setCategoryLevel(category: string, level: string): void;
|
|
500
|
+
|
|
501
|
+
/**
|
|
502
|
+
* Set log level for all loggers
|
|
503
|
+
* @param level Log level to set ('trace' | 'debug' | 'info' | 'warn' | 'error' | 'silent')
|
|
504
|
+
*/
|
|
505
|
+
export declare function setLogLevel(level: string): void;
|
|
506
|
+
|
|
507
|
+
export declare const uiLogger: any;
|
|
508
|
+
|
|
509
|
+
/**
|
|
510
|
+
* Value format for serialization (forms and callbacks)
|
|
511
|
+
*/
|
|
512
|
+
export declare type ValueFormat = 'json' | 'csv' | 'array';
|
|
513
|
+
|
|
514
|
+
export declare class WebMultiSelect<T = any> {
|
|
515
|
+
private element;
|
|
516
|
+
private instanceId;
|
|
517
|
+
private options;
|
|
518
|
+
private isOpen;
|
|
519
|
+
private selectedValues;
|
|
520
|
+
private selectedOptions;
|
|
521
|
+
private allOptions;
|
|
522
|
+
private filteredOptions;
|
|
523
|
+
private hiddenInputs;
|
|
524
|
+
private focusedIndex;
|
|
525
|
+
private matchingIndices;
|
|
526
|
+
private searchTerm;
|
|
527
|
+
private isLoading;
|
|
528
|
+
private showSelectedPopover;
|
|
529
|
+
private selectedPopoverPlacement;
|
|
530
|
+
private dropdownPlacement;
|
|
531
|
+
private isRTL;
|
|
532
|
+
private effectiveBadgesPosition;
|
|
533
|
+
private justClosedViaClick;
|
|
534
|
+
private dropdownCleanup;
|
|
535
|
+
private hintCleanup;
|
|
536
|
+
private selectedPopoverCleanup;
|
|
537
|
+
private badgeTooltips;
|
|
538
|
+
private badgeTooltipCleanups;
|
|
539
|
+
private badgeTooltipShowTimeouts;
|
|
540
|
+
private badgeTooltipHideTimeouts;
|
|
541
|
+
private actionButtonTooltips;
|
|
542
|
+
private actionButtonTooltipCleanups;
|
|
543
|
+
private virtualScroll;
|
|
544
|
+
private optionsContainer;
|
|
545
|
+
private selectedPopoverVirtualScroll;
|
|
546
|
+
private selectedPopoverContainer;
|
|
547
|
+
private input;
|
|
548
|
+
private dropdown;
|
|
549
|
+
private dropdownInner;
|
|
550
|
+
private badgesContainer;
|
|
551
|
+
private counter;
|
|
552
|
+
private hint?;
|
|
553
|
+
private selectedPopover;
|
|
554
|
+
private documentKeydownHandler;
|
|
555
|
+
private documentClickHandler;
|
|
556
|
+
/**
|
|
557
|
+
* Extract value/ID from item
|
|
558
|
+
* Precedence: tuple[0] -> valueMember -> getValueCallback -> '[N/A]'
|
|
559
|
+
*/
|
|
560
|
+
private getItemValue;
|
|
561
|
+
/**
|
|
562
|
+
* Extract display value from item
|
|
563
|
+
* Precedence: tuple[1] -> displayValueMember -> getDisplayValueCallback -> '[N/A]'
|
|
564
|
+
*/
|
|
565
|
+
private getItemDisplayValue;
|
|
566
|
+
/**
|
|
567
|
+
* Extract badge display value from item
|
|
568
|
+
* Precedence: getBadgeDisplayCallback -> getItemDisplayValue()
|
|
569
|
+
* This allows customizing badge text separately from dropdown display text
|
|
570
|
+
*/
|
|
571
|
+
private getItemBadgeDisplayValue;
|
|
572
|
+
/**
|
|
573
|
+
* Extract search value from item
|
|
574
|
+
* Precedence: searchValueMember -> getSearchValueCallback -> displayValue
|
|
575
|
+
*/
|
|
576
|
+
private getItemSearchValue;
|
|
577
|
+
/**
|
|
578
|
+
* Extract icon from item
|
|
579
|
+
*/
|
|
580
|
+
private getItemIcon;
|
|
581
|
+
/**
|
|
582
|
+
* Extract subtitle from item
|
|
583
|
+
*/
|
|
584
|
+
private getItemSubtitle;
|
|
585
|
+
/**
|
|
586
|
+
* Extract group from item
|
|
587
|
+
*/
|
|
588
|
+
private getItemGroup;
|
|
589
|
+
/**
|
|
590
|
+
* Extract disabled state from item
|
|
591
|
+
*/
|
|
592
|
+
private getItemDisabled;
|
|
593
|
+
constructor(element: HTMLElement, options?: Partial<MultiSelectConfig<T>>);
|
|
594
|
+
private init;
|
|
595
|
+
private parseOptions;
|
|
596
|
+
private buildHTML;
|
|
597
|
+
/**
|
|
598
|
+
* Check if virtual scroll should be used
|
|
599
|
+
*/
|
|
600
|
+
private shouldUseVirtualScroll;
|
|
601
|
+
/**
|
|
602
|
+
* Check if any options have groups
|
|
603
|
+
*/
|
|
604
|
+
private hasGroups;
|
|
605
|
+
private renderDropdown;
|
|
606
|
+
/**
|
|
607
|
+
* Render dropdown with virtual scrolling
|
|
608
|
+
*/
|
|
609
|
+
private renderDropdownVirtual;
|
|
610
|
+
private renderOption;
|
|
611
|
+
private highlightMatch;
|
|
612
|
+
private groupOptions;
|
|
613
|
+
private renderBadges;
|
|
614
|
+
private attachEvents;
|
|
615
|
+
private handleSearch;
|
|
616
|
+
private handleKeydown;
|
|
617
|
+
private handleDropdownClick;
|
|
618
|
+
private handleBadgeClick;
|
|
619
|
+
private handleClickOutside;
|
|
620
|
+
private focusNext;
|
|
621
|
+
private focusPrevious;
|
|
622
|
+
private focusFirst;
|
|
623
|
+
private focusLast;
|
|
624
|
+
private focusNextMatch;
|
|
625
|
+
private focusPreviousMatch;
|
|
626
|
+
private focusPageUp;
|
|
627
|
+
private focusPageDown;
|
|
628
|
+
private scrollToFocused;
|
|
629
|
+
private toggleOption;
|
|
630
|
+
private handleAddNew;
|
|
631
|
+
private selectOption;
|
|
632
|
+
private deselectOption;
|
|
633
|
+
private selectAll;
|
|
634
|
+
private clearAll;
|
|
635
|
+
private open;
|
|
636
|
+
private close;
|
|
637
|
+
private positionDropdown;
|
|
638
|
+
private positionHint;
|
|
639
|
+
private parseInitialSelection;
|
|
640
|
+
private toggleSelectedPopover;
|
|
641
|
+
private showPopover;
|
|
642
|
+
private hideSelectedPopover;
|
|
643
|
+
private renderSelectedPopover;
|
|
644
|
+
private renderSelectedPopoverVirtual;
|
|
645
|
+
private renderBadgeForPopover;
|
|
646
|
+
private handleSelectedPopoverClick;
|
|
647
|
+
private positionSelectedPopover;
|
|
648
|
+
private updateHiddenInput;
|
|
649
|
+
private getFormValue;
|
|
650
|
+
getSelected(): T[];
|
|
651
|
+
setSelected(values: (string | number)[]): void;
|
|
652
|
+
get selectedItem(): T | null;
|
|
653
|
+
get selectedValue(): string | number | (string | number)[] | null;
|
|
654
|
+
getValue(): string | number | (string | number)[] | null;
|
|
655
|
+
private attachBadgeTooltips;
|
|
656
|
+
private createTooltipForElement;
|
|
657
|
+
private createRemoveButtonTooltip;
|
|
658
|
+
private positionBadgeTooltip;
|
|
659
|
+
private cleanupBadgeTooltip;
|
|
660
|
+
private destroyAllBadgeTooltips;
|
|
661
|
+
private attachActionButtonTooltips;
|
|
662
|
+
private createActionButtonTooltip;
|
|
663
|
+
private positionActionButtonTooltip;
|
|
664
|
+
private cleanupActionButtonTooltip;
|
|
665
|
+
private destroyAllActionButtonTooltips;
|
|
666
|
+
destroy(): void;
|
|
667
|
+
}
|
|
668
|
+
|
|
669
|
+
export { }
|
package/dist/multiselect.js
CHANGED
|
@@ -2616,7 +2616,7 @@ class nt extends bs {
|
|
|
2616
2616
|
var h, g;
|
|
2617
2617
|
const t = this.shadow.querySelector(".ms-debug-stats");
|
|
2618
2618
|
if (!t || !this.picker) return;
|
|
2619
|
-
const s = "1.8.
|
|
2619
|
+
const s = "1.8.6", i = rt().length, n = this.picker.getSelected().length, a = ((h = this._options) == null ? void 0 : h.length) || 0, l = this.picker, c = l.isOpen || !1, d = l.searchTerm || "", p = l.isLoading || !1, u = ((g = l.filteredOptions) == null ? void 0 : g.length) || 0;
|
|
2620
2620
|
t.innerHTML = `
|
|
2621
2621
|
<span>Version: ${s}</span>
|
|
2622
2622
|
<span>Total Instances: ${i}</span>
|
|
@@ -3125,10 +3125,10 @@ class nt extends bs {
|
|
|
3125
3125
|
}
|
|
3126
3126
|
typeof window < "u" && typeof customElements < "u" && (customElements.get("web-multiselect") || customElements.define("web-multiselect", nt));
|
|
3127
3127
|
typeof window < "u" && (window.components = window.components || {}, window.components["web-multiselect"] = {
|
|
3128
|
-
version: () => "1.8.
|
|
3128
|
+
version: () => "1.8.6",
|
|
3129
3129
|
config: {
|
|
3130
3130
|
name: "@keenmate/web-multiselect",
|
|
3131
|
-
version: "1.8.
|
|
3131
|
+
version: "1.8.6",
|
|
3132
3132
|
author: "Keenmate",
|
|
3133
3133
|
license: "MIT",
|
|
3134
3134
|
repository: "git+https://github.com/keenmate/web-multiselect.git",
|
package/dist/multiselect.umd.js
CHANGED
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
<button type="button" class="ms__badge-remove" data-value="${t}" aria-label="Remove ${this.getItemBadgeDisplayValue(e)}"></button>
|
|
44
44
|
</div>
|
|
45
45
|
`}handleSelectedPopoverClick(e){if(e.stopPropagation(),e.target.closest(".ms__selected-popover-close")){e.preventDefault(),this.hideSelectedPopover();return}const s=e.target.closest(".ms__badge-remove");if(s){e.preventDefault();const i=s.dataset.value,r=this.selectedOptions.get(i);r&&(this.deselectOption(r),this.renderSelectedPopover(),this.selectedValues.size===0&&this.hideSelectedPopover())}}positionSelectedPopover(){this.selectedPopoverCleanup=q(this.input,this.selectedPopover,()=>{const e=this.selectedPopoverPlacement||"bottom-start";se(this.input,this.selectedPopover,{placement:e,middleware:[ee(4),...this.selectedPopoverPlacement?[]:[fe()],te({padding:8})]}).then(({x:t,y:s,placement:i})=>{this.selectedPopoverPlacement||(this.selectedPopoverPlacement=i,v.debug(`[${this.instanceId}] Locked popover placement:`,i));const r={left:`${t}px`,top:`${s}px`,width:`${this.input.offsetWidth}px`};this.options.dropdownMinWidth&&(r.minWidth=this.options.dropdownMinWidth),Object.assign(this.selectedPopover.style,r)})})}updateHiddenInput(){if(!this.options.formFieldId)return;this.hiddenInputs.forEach(i=>i.remove()),this.hiddenInputs=[];const e=this.options.valueFormat||"json",t=Array.from(this.selectedOptions.values()).map(i=>this.getItemValue(i)),s=this.options.hostElement||this.element;if(e==="array")t.forEach(i=>{const r=document.createElement("input");r.type="hidden",r.name=`${this.options.formFieldId}[]`,r.value=String(i),s.appendChild(r),this.hiddenInputs.push(r)});else{const i=document.createElement("input");i.type="hidden",i.name=this.options.formFieldId,i.id=this.options.formFieldId,i.value=this.getFormValue(),s.appendChild(i),this.hiddenInputs.push(i)}}getFormValue(){const e=Array.from(this.selectedOptions.values()).map(s=>this.getItemValue(s));return this.options.getValueFormatCallback?this.options.getValueFormatCallback(e):(this.options.valueFormat||"json")==="csv"?e.join(","):JSON.stringify(e)}getSelected(){return Array.from(this.selectedOptions.values())}setSelected(e){this.selectedValues=new Set(e.map(t=>String(t))),this.selectedOptions.clear(),e.forEach(t=>{const s=String(t),i=this.allOptions.find(r=>String(this.getItemValue(r))===s);i&&this.selectedOptions.set(s,i)}),this.renderDropdown(),this.renderBadges(),this.updateHiddenInput()}get selectedItem(){return this.selectedOptions.size===0?null:Array.from(this.selectedOptions.values())[0]}get selectedValue(){if(!this.options.valueMember&&!this.options.getValueCallback)return null;if(this.selectedOptions.size===0)return this.options.isMultipleEnabled?[]:null;const e=Array.from(this.selectedOptions.values()).map(t=>this.getItemValue(t));return this.options.isMultipleEnabled?e:e[0]??null}getValue(){if(this.selectedOptions.size===0)return this.options.isMultipleEnabled?[]:null;const e=Array.from(this.selectedOptions.values()).map(t=>this.getItemValue(t));return this.options.isMultipleEnabled?e:e[0]??null}attachBadgeTooltips(e){if(!this.options.isBadgeTooltipsEnabled){v.debug(`[${this.instanceId}] Tooltips disabled - isBadgeTooltipsEnabled is false`);return}const s=(e||this.badgesContainer).querySelectorAll(".ms__badge:not(.ms__badge--more)");if(v.debug(`[${this.instanceId}] Found ${s.length} badges to attach tooltips to`),s.forEach(i=>{const r=i,n=r.querySelector(".ms__badge-remove");if(!n)return;const a=n.dataset.value,l=this.selectedOptions.get(a);if(!l)return;const c=r.querySelector(".ms__badge-text");c&&this.createTooltipForElement(c,l,a);const d=this.getItemBadgeDisplayValue(l);this.createRemoveButtonTooltip(n,d,a,l)}),!e){const i=this.badgesContainer.querySelector(".ms__badge--more");if(i){const r=i.querySelector(".ms__badge-remove");if(r&&r.dataset.action==="remove-hidden"){const n=this.options.badgesMaxVisible||3,l=Array.from(this.selectedOptions.values()).length-n;this.createRemoveButtonTooltip(r,`${l} hidden items`,"more-badge-remove")}}}}createTooltipForElement(e,t,s){const i=document.createElement("div");i.className="ms__badge-tooltip";let r;if(this.options.getBadgeTooltipCallback)r=this.options.getBadgeTooltipCallback(t),v.debug(`[${this.instanceId}] Using custom callback for tooltip content`);else{const c=this.getItemBadgeDisplayValue(t),d=this.getItemSubtitle(t);r=d?`${c}
|
|
46
|
-
${d}`:c,v.debug(`[${this.instanceId}] Using default content: "${r}"`)}typeof r=="string"?i.textContent=r:i.appendChild(r),(this.options.container||document.body).appendChild(i),v.debug(`[${this.instanceId}] Tooltip element created and appended for "${s}"`),this.badgeTooltips.set(s,i);const a=()=>{const c=this.badgeTooltipHideTimeouts.get(s);c&&(clearTimeout(c),this.badgeTooltipHideTimeouts.delete(s)),v.debug(`[${this.instanceId}] Mouse entered badge "${s}", will show tooltip in ${this.options.badgeTooltipDelay??100}ms`);const d=window.setTimeout(()=>{v.debug(`[${this.instanceId}] Showing tooltip for "${s}"`),i.classList.add("ms__badge-tooltip--visible"),this.positionBadgeTooltip(e,i,s),this.badgeTooltipShowTimeouts.delete(s)},this.options.badgeTooltipDelay??100);this.badgeTooltipShowTimeouts.set(s,d)},l=()=>{const c=this.badgeTooltipShowTimeouts.get(s);c&&(clearTimeout(c),this.badgeTooltipShowTimeouts.delete(s));const d=window.setTimeout(()=>{i.classList.remove("ms__badge-tooltip--visible"),this.cleanupBadgeTooltip(s),this.badgeTooltipHideTimeouts.delete(s)},100);this.badgeTooltipHideTimeouts.set(s,d)};e.addEventListener("mouseenter",a),e.addEventListener("mouseleave",l)}createRemoveButtonTooltip(e,t,s,i){const r=document.createElement("div");r.className="ms__badge-tooltip";let n;i&&this.options.getRemoveButtonTooltipCallback?n=this.options.getRemoveButtonTooltipCallback(i):this.options.removeButtonTooltipText?n=this.options.removeButtonTooltipText.replace("{0}",t):n=`Remove ${t}`,r.textContent=n,(this.options.container||document.body).appendChild(r);const l=`${s}-remove`;this.badgeTooltips.set(l,r);const c=()=>{const p=this.badgeTooltipHideTimeouts.get(l);p&&(clearTimeout(p),this.badgeTooltipHideTimeouts.delete(l));const u=this.badgeTooltips.get(s);u&&u.classList.remove("ms__badge-tooltip--visible");const h=window.setTimeout(()=>{r.classList.add("ms__badge-tooltip--visible"),this.positionBadgeTooltip(e,r,l),this.badgeTooltipShowTimeouts.delete(l)},this.options.badgeTooltipDelay??100);this.badgeTooltipShowTimeouts.set(l,h)},d=()=>{const p=this.badgeTooltipShowTimeouts.get(l);p&&(clearTimeout(p),this.badgeTooltipShowTimeouts.delete(l));const u=window.setTimeout(()=>{r.classList.remove("ms__badge-tooltip--visible"),this.cleanupBadgeTooltip(l),this.badgeTooltipHideTimeouts.delete(l)},100);this.badgeTooltipHideTimeouts.set(l,u)};e.addEventListener("mouseenter",c),e.addEventListener("mouseleave",d)}positionBadgeTooltip(e,t,s){const i=q(e,t,()=>{se(e,t,{placement:this.options.badgeTooltipPlacement||"top",strategy:"fixed",middleware:[ee(this.options.badgeTooltipOffset||8),fe(),te({padding:8})]}).then(({x:r,y:n})=>{Object.assign(t.style,{left:`${r}px`,top:`${n}px`}),v.debug(`[${this.instanceId}] Positioned tooltip "${s}" at x:${r}, y:${n}`,{placement:this.options.badgeTooltipPlacement||"top",tooltipClasses:t.className,tooltipDisplay:window.getComputedStyle(t).display,tooltipOpacity:window.getComputedStyle(t).opacity,tooltipVisibility:window.getComputedStyle(t).visibility,tooltipZIndex:window.getComputedStyle(t).zIndex,tooltipPosition:window.getComputedStyle(t).position})})});this.badgeTooltipCleanups.set(s,i)}cleanupBadgeTooltip(e){const t=this.badgeTooltipShowTimeouts.get(e);t&&(clearTimeout(t),this.badgeTooltipShowTimeouts.delete(e));const s=this.badgeTooltipHideTimeouts.get(e);s&&(clearTimeout(s),this.badgeTooltipHideTimeouts.delete(e));const i=this.badgeTooltipCleanups.get(e);i&&(i(),this.badgeTooltipCleanups.delete(e))}destroyAllBadgeTooltips(){this.badgeTooltipShowTimeouts.forEach(e=>clearTimeout(e)),this.badgeTooltipShowTimeouts.clear(),this.badgeTooltipHideTimeouts.forEach(e=>clearTimeout(e)),this.badgeTooltipHideTimeouts.clear(),this.badgeTooltipCleanups.forEach(e=>e()),this.badgeTooltipCleanups.clear(),this.badgeTooltips.forEach(e=>e.remove()),this.badgeTooltips.clear()}attachActionButtonTooltips(){const e=this.dropdown.querySelectorAll(".ms__action-btn");v.debug(`[${this.instanceId}] Found ${e.length} action buttons to attach tooltips to`),e.forEach(t=>{var l;const s=t,i=s.dataset.action;if(!i)return;const r=(l=this.options.actionButtons)==null?void 0:l.find(c=>c.action==="custom"?s.dataset.customAction===s.dataset.action:c.action===i);if(!r)return;let n;if(r.getTooltipCallback?(n=r.getTooltipCallback(this),v.debug(`[${this.instanceId}] Using getTooltipCallback for action button "${i}": "${n}"`)):(n=r.tooltip,v.debug(`[${this.instanceId}] Using static tooltip for action button "${i}": "${n}"`)),!n){v.debug(`[${this.instanceId}] No tooltip for action button "${i}"`);return}const a=`action-${i}-${Date.now()}`;this.createActionButtonTooltip(s,n,a)})}createActionButtonTooltip(e,t,s){const i=document.createElement("div");i.className="ms__badge-tooltip",i.textContent=t,(this.options.container||document.body).appendChild(i),v.debug(`[${this.instanceId}] Tooltip element created for action button "${s}"`),this.actionButtonTooltips.set(s,i);let n,a;const l=()=>{clearTimeout(a),v.debug(`[${this.instanceId}] Mouse entered action button "${s}", will show tooltip in ${this.options.badgeTooltipDelay??100}ms`),n=window.setTimeout(()=>{v.debug(`[${this.instanceId}] Showing tooltip for action button "${s}"`),i.classList.add("ms__badge-tooltip--visible"),this.positionActionButtonTooltip(e,i,s)},this.options.badgeTooltipDelay??100)},c=()=>{clearTimeout(n),a=window.setTimeout(()=>{i.classList.remove("ms__badge-tooltip--visible"),this.cleanupActionButtonTooltip(s)},100)};e.addEventListener("mouseenter",l),e.addEventListener("mouseleave",c)}positionActionButtonTooltip(e,t,s){const i=q(e,t,()=>{se(e,t,{placement:this.options.badgeTooltipPlacement||"top",strategy:"fixed",middleware:[ee(this.options.badgeTooltipOffset||8),fe(),te({padding:8})]}).then(({x:r,y:n})=>{Object.assign(t.style,{left:`${r}px`,top:`${n}px`}),v.debug(`[${this.instanceId}] Positioned action button tooltip "${s}" at x:${r}, y:${n}`)})});this.actionButtonTooltipCleanups.set(s,i)}cleanupActionButtonTooltip(e){const t=this.actionButtonTooltipCleanups.get(e);t&&(t(),this.actionButtonTooltipCleanups.delete(e))}destroyAllActionButtonTooltips(){this.actionButtonTooltipCleanups.forEach(e=>e()),this.actionButtonTooltipCleanups.clear(),this.actionButtonTooltips.forEach(e=>e.remove()),this.actionButtonTooltips.clear()}destroy(){this.destroyAllBadgeTooltips(),this.destroyAllActionButtonTooltips(),this.dropdownCleanup&&this.dropdownCleanup(),this.hintCleanup&&this.hintCleanup(),this.selectedPopoverCleanup&&this.selectedPopoverCleanup(),this.documentClickHandler&&(document.removeEventListener("click",this.documentClickHandler),this.documentClickHandler=null),this.documentKeydownHandler&&(document.removeEventListener("keydown",this.documentKeydownHandler),this.documentKeydownHandler=null),this.virtualScroll&&(this.virtualScroll.destroy(),this.virtualScroll=null),this.dropdown&&this.dropdown.remove(),this.hint&&this.hint.remove(),this.selectedPopover&&this.selectedPopover.remove(),this.element.innerHTML="",this.element.classList.remove("ms","ms--open","ms--no-checkboxes"),re.info(`[${this.instanceId}] Component destroyed`)}}const ps=':host{--ms-rem: 10px;font-family:var(--ms-font-family, var(--base-font-family, inherit));display:block;--ms-accent-color: var(--base-accent-color, #3b82f6);--ms-accent-color-hover: var(--base-accent-color-hover, #2563eb);--ms-accent-color-active: var(--base-accent-color-active, #1d4ed8);--ms-accent-color-light: var(--base-accent-color-light, #eff6ff);--ms-accent-color-light-hover: var(--base-accent-color-light-hover, #e0f2fe);--ms-text-color-1: var(--base-text-color-1, #111827);--ms-text-color-2: var(--base-text-color-2, #353b47);--ms-text-color-3: var(--base-text-color-3, #6b7280);--ms-text-color-4: var(--base-text-color-4, #a0a3a9);--ms-text-color-on-accent: var(--base-text-color-on-accent, #ffffff);--ms-text-primary: var(--ms-text-color-1);--ms-text-secondary: var(--ms-text-color-3);--ms-primary-bg: var(--base-main-bg, #f3f4f6);--ms-primary-bg-hover: var(--base-hover-bg, #e5e7eb);--ms-border-color: var(--base-border-color, #e5e7eb);--ms-border: var(--base-border, 1px solid var(--ms-border-color));--ms-input-bg: var(--base-input-bg, #ffffff);--ms-input-color: var(--base-input-color, var(--ms-text-color-1));--ms-input-border: var(--base-input-border, 1px solid var(--ms-border-color));--ms-input-border-hover: var(--base-input-border-hover, 1px solid var(--ms-accent-color));--ms-input-border-focus: var(--base-input-border-focus, 1px solid var(--ms-accent-color));--ms-input-placeholder-color: var(--base-input-placeholder-color, var(--ms-text-color-4));--ms-input-bg-disabled: var(--base-input-bg-disabled, rgba(107, 114, 128, .05));--ms-toggle-icon-color: var(--ms-text-color-3);--ms-toggle-icon-color-open: var(--ms-text-color-3);--ms-counter-badge-bg: var(--ms-accent-color);--ms-counter-badge-bg-hover: var(--ms-accent-color-hover);--ms-counter-badge-color: var(--ms-text-color-on-accent);--ms-hint-bg: var(--base-main-bg, #ffffff);--ms-hint-color: var(--ms-text-color-4);--ms-hint-border-color: var(--ms-border-color);--ms-dropdown-bg: var(--base-dropdown-bg, #ffffff);--ms-dropdown-text-color: var(--ms-text-color-1);--ms-dropdown-border-color: var(--ms-border-color);--ms-dropdown-box-shadow-semantic: var(--base-dropdown-box-shadow, 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1));--ms-actions-bg: var(--base-main-bg, #ffffff);--ms-actions-border-color: var(--ms-border-color);--ms-action-button-bg: transparent;--ms-action-button-bg-hover: var(--ms-primary-bg);--ms-action-button-border-color: var(--ms-border-color);--ms-action-button-border-color-hover: var(--ms-accent-color);--ms-action-button-color: var(--ms-text-color-1);--ms-group-border-color: var(--ms-border-color);--ms-option-text-color: var(--ms-text-color-1);--ms-option-color-hover: inherit;--ms-option-color-focused: inherit;--ms-option-outline-color-focused: var(--ms-accent-color);--ms-option-color-matched: inherit;--ms-option-border-matched-color: color-mix(in srgb, var(--ms-accent-color) 40%, transparent);--ms-option-title-color: var(--ms-text-color-1);--ms-option-subtitle-color: var(--ms-text-color-3);--ms-loading-color: var(--ms-text-color-3);--ms-badge-bg-hover: var(--base-hover-bg, var(--ms-input-bg));--ms-badge-text-bg-hover: var(--base-hover-bg, var(--ms-input-bg));--ms-badge-text-color-hover: var(--ms-badge-text-color);--ms-badge-counter-border-color: var(--ms-border-color);--ms-badge-counter-text-bg: var(--ms-primary-bg-hover);--ms-badge-counter-text-color: var(--ms-text-color-1);--ms-badge-counter-remove-bg: var(--ms-text-color-3);--ms-badge-counter-remove-bg-hover: var(--ms-text-color-1);--ms-badge-counter-remove-color: var(--ms-text-color-on-accent);--ms-counter-wrapper-border-color: var(--ms-border-color);--ms-count-clear-bg-hover: var(--ms-accent-color);--ms-tooltip-bg: var(--base-tooltip-bg, #333333);--ms-tooltip-text-color: var(--base-tooltip-text-color, #ffffff);--ms-selected-popover-bg: var(--base-dropdown-bg, #ffffff);--ms-selected-popover-border-color: var(--ms-border-color);--ms-selected-popover-header-border-color: var(--ms-border-color);--ms-selected-popover-close-bg-hover: var(--ms-accent-color);--ms-input-padding: calc(.8 * var(--ms-rem)) calc(1.2 * var(--ms-rem));--ms-input-padding-right: calc(4 * var(--ms-rem));--ms-input-padding-h: calc(1.2 * var(--ms-rem));--ms-input-height: calc(var(--base-input-size-md-height, 3.5) * var(--ms-rem));--ms-input-font-size: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-input-border-width: 1px;--ms-input-border-radius: var(--ms-border-radius-md);--ms-input-text: var(--ms-text-color-1);--ms-input-bg-disabled: rgba(107, 114, 128, .05);--ms-input-size-xs-font: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-input-size-xs-padding-v: calc(.4 * var(--ms-rem));--ms-input-size-xs-padding-h: calc(.8 * var(--ms-rem));--ms-input-size-xs-height: calc(var(--base-input-size-xs-height, 3.1) * var(--ms-rem));--ms-input-size-sm-font: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-input-size-sm-padding-v: calc(.5 * var(--ms-rem));--ms-input-size-sm-padding-h: calc(1 * var(--ms-rem));--ms-input-size-sm-height: calc(var(--base-input-size-sm-height, 3.3) * var(--ms-rem));--ms-input-size-md-font: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-input-size-md-padding-v: calc(.8 * var(--ms-rem));--ms-input-size-md-padding-h: calc(1.2 * var(--ms-rem));--ms-input-size-md-height: calc(var(--base-input-size-md-height, 3.5) * var(--ms-rem));--ms-input-size-lg-font: calc(var(--base-font-size-base, 1.6) * var(--ms-rem));--ms-input-size-lg-padding-v: calc(1 * var(--ms-rem));--ms-input-size-lg-padding-h: calc(1.4 * var(--ms-rem));--ms-input-size-lg-height: calc(var(--base-input-size-lg-height, 3.8) * var(--ms-rem));--ms-input-size-xl-font: calc(var(--base-font-size-lg, 1.8) * var(--ms-rem));--ms-input-size-xl-padding-v: calc(1.2 * var(--ms-rem));--ms-input-size-xl-padding-h: calc(1.6 * var(--ms-rem));--ms-input-size-xl-height: calc(var(--base-input-size-xl-height, 4.1) * var(--ms-rem));--ms-toggle-right: calc(1.2 * var(--ms-rem));--ms-toggle-color: var(--ms-text-color-3);--ms-transform-center-y: translateY(-50%);--ms-transform-rotate-180: 180deg;--ms-counter-offset: calc(3.2 * var(--ms-rem));--ms-counter-padding: calc(.2 * var(--ms-rem)) calc(.4 * var(--ms-rem));--ms-counter-bg: var(--ms-accent-color);--ms-counter-color: var(--ms-text-color-on-accent);--ms-counter-font-size: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-counter-font-weight: var(--base-font-weight-semibold, 600);--ms-counter-border-radius: var(--ms-border-radius-sm);--ms-counter-bg-hover: var(--ms-accent-color-hover);--ms-transform-scale-hover: 1.1;--ms-hint-padding: calc(.8 * var(--ms-rem)) calc(1.2 * var(--ms-rem));--ms-hint-border: var(--ms-border);--ms-hint-border-radius: var(--ms-border-radius-lg);--ms-hint-box-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--ms-hint-font-size: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-dropdown-border: var(--base-dropdown-border, 1px solid var(--ms-border-color));--ms-dropdown-border-radius: var(--ms-border-radius-lg);--ms-dropdown-box-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--ms-options-max-height: calc(32 * var(--ms-rem));--ms-option-color: var(--ms-text-color-1);--ms-z-index-dropdown: 9999;--ms-z-index-sticky: 1;--ms-actions-gap: calc(.4 * var(--ms-rem));--ms-actions-padding: calc(.8 * var(--ms-rem));--ms-actions-border-bottom: var(--ms-border);--ms-action-btn-padding: calc(.4 * var(--ms-rem)) calc(.8 * var(--ms-rem));--ms-action-btn-font-size: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-action-btn-border: var(--ms-border);--ms-action-btn-border-radius: var(--ms-border-radius-sm);--ms-action-btn-bg: transparent;--ms-action-btn-color: inherit;--ms-action-btn-bg-hover: var(--ms-primary-bg);--ms-action-btn-border-color-hover: var(--ms-accent-color);--ms-transform-scale-active: .98;--ms-options-padding: 0;--ms-group-border-top: var(--ms-border);--ms-group-margin-top: calc(.4 * var(--ms-rem));--ms-group-padding-top: calc(.4 * var(--ms-rem));--ms-group-label-padding: calc(.4 * var(--ms-rem)) calc(1.2 * var(--ms-rem));--ms-group-label-font-size: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-group-label-font-weight: var(--base-font-weight-semibold, 600);--ms-group-label-color: var(--ms-text-color-3);--ms-group-label-transform: uppercase;--ms-group-label-letter-spacing: .05em;--ms-option-gap: calc(.8 * var(--ms-rem));--ms-option-padding: calc(.8 * var(--ms-rem)) calc(1.2 * var(--ms-rem));--ms-option-padding-h: calc(1.2 * var(--ms-rem));--ms-option-bg: transparent;--ms-option-bg-hover: var(--ms-primary-bg);--ms-option-bg-focused: var(--ms-primary-bg);--ms-option-outline-focused: 2px solid var(--ms-accent-color);--ms-option-focus-outline-offset: -2px;--ms-option-bg-matched: color-mix(in srgb, var(--ms-accent-color) 8%, transparent);--ms-option-border-matched: 3px solid color-mix(in srgb, var(--ms-accent-color) 40%, transparent);--ms-option-bg-selected: color-mix(in srgb, var(--ms-accent-color) 10%, transparent);--ms-option-bg-focused-hover: var(--ms-primary-bg);--ms-option-bg-matched-hover: color-mix(in srgb, var(--ms-accent-color) 12%, transparent);--ms-option-bg-selected-focused: color-mix(in srgb, var(--ms-accent-color) 15%, transparent);--ms-option-bg-selected-matched: color-mix(in srgb, var(--ms-accent-color) 15%, transparent);--ms-option-disabled-bg: var(--base-disabled-bg, transparent);--ms-option-bg-disabled-selected: color-mix(in srgb, var(--ms-accent-color) 10%, transparent);--ms-disabled-opacity: .5;--ms-option-content-gap: calc(.8 * var(--ms-rem));--ms-option-icon-size: calc(2 * var(--ms-rem));--ms-option-icon-font-size: calc(var(--base-font-size-base, 1.6) * var(--ms-rem));--ms-option-title-font-size: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-option-mark-bg: color-mix(in srgb, var(--ms-accent-color) 20%, transparent);--ms-option-mark-color: inherit;--ms-option-mark-font-weight: var(--base-font-weight-semibold, 600);--ms-option-subtitle-margin-top: calc(.4 * var(--ms-rem));--ms-option-subtitle-font-size: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-option-subtitle-line-height: var(--base-line-height-tight, 1.25);--ms-checkbox-margin-top: calc(.2 * var(--ms-rem));--ms-checkbox-margin-right: 0;--ms-checkbox-margin-bottom: 0;--ms-checkbox-margin-left: 0;--ms-checkbox-size: calc(1.6 * var(--ms-rem));--ms-checkbox-scale: 1;--ms-checkbox-align: center;--ms-checkbox-bg: var(--ms-input-bg);--ms-checkbox-border: var(--ms-border);--ms-checkbox-border-radius: calc(.3 * var(--ms-rem));--ms-checkbox-checked-bg: var(--ms-accent-color);--ms-checkbox-checked-border: 1px solid var(--ms-accent-color);--ms-checkbox-checkmark-color: var(--ms-text-color-on-accent);--ms-checkbox-hover-border-color: var(--ms-accent-color);--ms-checkbox-disabled-bg: var(--ms-primary-bg);--ms-checkbox-disabled-border: var(--ms-border);--ms-checkbox-checked-bg-hover: var(--ms-accent-color-hover);--ms-checkbox-checked-border-color-hover: var(--ms-accent-color-hover);--ms-empty-padding: calc(1.6 * var(--ms-rem)) calc(1.2 * var(--ms-rem));--ms-empty-font-size: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-empty-color: var(--ms-text-color-3);--ms-loader-padding: calc(1.6 * var(--ms-rem));--ms-loader-gap: calc(.8 * var(--ms-rem));--ms-loading-text-font-size: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-loading-text-color: var(--ms-text-color-3);--ms-badges-gap: calc(.8 * var(--ms-rem));--ms-badges-margin-bottom: calc(.8 * var(--ms-rem));--ms-badges-margin-top: calc(.8 * var(--ms-rem));--ms-badges-margin-left: calc(.4 * var(--ms-rem));--ms-badges-margin-right: calc(.4 * var(--ms-rem));--ms-inline-align: center;--ms-badge-gap: calc(.8 * var(--ms-rem));--ms-badge-height: calc(2.7 * var(--ms-rem));--ms-badge-font-size: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-badge-font-weight: var(--base-font-weight-semibold, 600);--ms-badge-border-radius: var(--ms-border-radius-sm);--ms-badge-bg: var(--ms-accent-color-light);--ms-badge-bg-hover: var(--ms-badge-bg-hover);--ms-badge-bg-active: var(--ms-accent-color-light-hover);--ms-order-first: -1;--ms-badge-text-padding: 0 calc(.8 * var(--ms-rem));--ms-badge-text-bg: var(--ms-accent-color-light);--ms-badge-text-color: var(--ms-accent-color);--ms-badge-text-border: none;--ms-badge-remove-width: calc(2.7 * var(--ms-rem));--ms-badge-remove-bg: var(--ms-accent-color);--ms-badge-remove-color: var(--ms-text-color-on-accent);--ms-badge-remove-border: none;--ms-badge-remove-font-size: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-badge-remove-bg-hover: var(--ms-accent-color-hover);--ms-badge-remove-box-shadow-focus: 0 0 0 2px color-mix(in srgb, var(--ms-accent-color) 50%, transparent);--ms-icon-remove: "×";--ms-badge-counter-bg: transparent;--ms-badge-counter-border: var(--ms-border);--ms-badge-counter-border-radius: var(--ms-border-radius-sm);--ms-more-badge-bg: var(--ms-accent-color-light);--ms-more-badge-hover-bg: var(--ms-badge-bg-hover);--ms-more-badge-active-bg: var(--ms-accent-color-light-hover);--ms-count-display-margin-bottom: calc(.8 * var(--ms-rem));--ms-count-display-margin-top: calc(.8 * var(--ms-rem));--ms-count-display-margin-left: calc(.8 * var(--ms-rem));--ms-count-display-margin-right: calc(.8 * var(--ms-rem));--ms-counter-wrapper-bg: transparent;--ms-counter-wrapper-border: var(--ms-border);--ms-counter-wrapper-border-radius: var(--ms-border-radius-sm);--ms-counter-wrapper-padding: calc(.4 * var(--ms-rem)) calc(.8 * var(--ms-rem));--ms-counter-wrapper-gap: calc(.4 * var(--ms-rem));--ms-counter-wrapper-bg-hover: var(--ms-primary-bg);--ms-counter-wrapper-border-color-hover: var(--ms-accent-color);--ms-count-text-bg: transparent;--ms-count-text-border: none;--ms-count-text-font-size: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-count-text-color: var(--ms-text-color-1);--ms-count-clear-size: calc(1.6 * var(--ms-rem));--ms-count-clear-bg: transparent;--ms-count-clear-color: var(--ms-text-color-3);--ms-count-clear-font-size: calc(var(--base-font-size-lg, 1.8) * var(--ms-rem));--ms-count-clear-border-radius: 50%;--ms-count-clear-bg-hover: color-mix(in srgb, var(--ms-accent-color) 20%, transparent);--ms-count-clear-color-hover: var(--ms-accent-color);--ms-icon-clear: "×";--ms-tooltip-color: var(--ms-tooltip-text-color);--ms-tooltip-padding: calc(.8 * var(--ms-rem)) calc(1.2 * var(--ms-rem));--ms-tooltip-border-radius: var(--ms-border-radius-lg);--ms-tooltip-font-size: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-tooltip-max-width: calc(32 * var(--ms-rem));--ms-tooltip-shadow: 0 2px 8px rgba(0, 0, 0, .15);--ms-tooltip-z-index: 10000;--ms-z-index-popover: 10000;--ms-selected-popover-width: calc(32 * var(--ms-rem));--ms-selected-popover-max-height: calc(32 * var(--ms-rem));--ms-selected-popover-border: var(--ms-border);--ms-selected-popover-border-radius: var(--ms-border-radius-lg);--ms-selected-popover-box-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--ms-selected-popover-header-padding: calc(.8 * var(--ms-rem)) calc(1.2 * var(--ms-rem));--ms-selected-popover-header-bg: color-mix(in srgb, var(--ms-accent-color) 10%, transparent);--ms-selected-popover-header-border-bottom: var(--ms-border);--ms-selected-popover-header-font-size: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-selected-popover-header-font-weight: var(--base-font-weight-semibold, 600);--ms-selected-popover-header-color: var(--ms-text-color-1);--ms-popover-close-size: calc(2.4 * var(--ms-rem));--ms-selected-popover-close-bg: transparent;--ms-selected-popover-close-color: var(--ms-text-color-3);--ms-selected-popover-close-font-size: calc(var(--base-font-size-xl, 2) * var(--ms-rem));--ms-selected-popover-close-border-radius: 50%;--ms-selected-popover-close-bg-hover: color-mix(in srgb, var(--ms-accent-color) 20%, transparent);--ms-selected-popover-close-color-hover: var(--ms-accent-color);--ms-selected-popover-body-gap: calc(.4 * var(--ms-rem));--ms-selected-popover-body-padding: calc(.8 * var(--ms-rem));--ms-selected-popover-body-max-height: calc(28.8 * var(--ms-rem));--ms-font-size-2xs: calc(var(--base-font-size-2xs, 1) * var(--ms-rem));--ms-font-size-xs: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-font-size-sm: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-font-size-base: calc(var(--base-font-size-base, 1.6) * var(--ms-rem));--ms-font-size-lg: calc(var(--base-font-size-lg, 1.8) * var(--ms-rem));--ms-font-weight-normal: var(--base-font-weight-normal, 400);--ms-font-weight-medium: var(--base-font-weight-medium, 500);--ms-font-weight-semibold: var(--base-font-weight-semibold, 600);--ms-line-height-none: 1;--ms-line-height-tight: var(--base-line-height-tight, 1.25);--ms-line-height-normal: var(--base-line-height-normal, 1.5);--ms-line-height-relaxed: var(--base-line-height-relaxed, 1.75);--ms-border-radius-sm: calc(var(--base-border-radius-sm, .4) * var(--ms-rem));--ms-border-radius-md: calc(var(--base-border-radius-md, .6) * var(--ms-rem));--ms-border-radius-lg: calc(var(--base-border-radius-lg, .8) * var(--ms-rem));--ms-border-radius: var(--ms-border-radius-md);--ms-spacing-xs: calc(.4 * var(--ms-rem));--ms-spacing-sm: calc(.8 * var(--ms-rem));--ms-spacing-md: calc(1.2 * var(--ms-rem));--ms-spacing-lg: calc(1.6 * var(--ms-rem));--ms-transition-fast: .15s;--ms-transition-normal: .2s;--ms-easing-snappy: cubic-bezier(.4, 0, .2, 1);--ms-placeholder-opacity: .6;--ms-disabled-input-opacity: .6;--ms-scrollbar-width: 8px;--ms-scrollbar-track-bg: transparent;--ms-scrollbar-thumb-bg: var(--ms-border-color);--ms-scrollbar-thumb-bg-hover: var(--ms-text-color-3);--ms-scrollbar-thumb-border-radius: 4px}multi-select:not(:defined){display:block;min-height:calc(3.5 * var(--ms-rem));color:transparent!important;background:transparent}.ms-wrapper{display:flex;flex-direction:column;align-items:stretch}.ms-wrapper--inline{flex-direction:row;align-items:var(--ms-inline-align, center)}.ms{position:relative;width:100%}.ms__input-wrapper{position:relative;display:flex;align-items:center}.ms__input{box-sizing:border-box;width:100%;font-family:inherit;height:var(--ms-input-height);padding:var(--ms-input-padding);padding-right:var(--ms-input-padding-right);font-size:var(--ms-input-font-size);border:var(--ms-input-border);border-radius:var(--ms-input-border-radius);background:var(--ms-input-bg);color:var(--ms-input-color);cursor:pointer;transition:border var(--ms-transition-fast) var(--ms-easing-snappy)}.ms__input:hover:not(:focus):not(:disabled){border:var(--ms-input-border-hover)}.ms__input:focus{outline:none;border:var(--ms-input-border-focus)}.ms__input::placeholder{color:var(--ms-input-placeholder-color);opacity:0;transition:opacity var(--ms-transition-fast) var(--ms-easing-snappy)}:host([data-ready]) .ms__input::placeholder{opacity:var(--ms-placeholder-opacity)}.ms__input.ms__input--xs{font-size:var(--ms-input-size-xs-font);padding:var(--ms-input-size-xs-padding-v) var(--ms-input-size-xs-padding-h);padding-right:calc(var(--ms-input-size-xs-padding-h) * 2.5);height:var(--ms-input-size-xs-height)}.ms__input.ms__input--sm{font-size:var(--ms-input-size-sm-font);padding:var(--ms-input-size-sm-padding-v) var(--ms-input-size-sm-padding-h);padding-right:calc(var(--ms-input-size-sm-padding-h) * 2.5);height:var(--ms-input-size-sm-height)}.ms__input.ms__input--lg{font-size:var(--ms-input-size-lg-font);padding:var(--ms-input-size-lg-padding-v) var(--ms-input-size-lg-padding-h);padding-right:calc(var(--ms-input-size-lg-padding-h) * 2.5);height:var(--ms-input-size-lg-height)}.ms__input.ms__input--xl{font-size:var(--ms-input-size-xl-font);padding:var(--ms-input-size-xl-padding-v) var(--ms-input-size-xl-padding-h);padding-right:calc(var(--ms-input-size-xl-padding-h) * 2.5);height:var(--ms-input-size-xl-height)}.ms__toggle{position:absolute;right:var(--ms-toggle-right);top:50%;transform:var(--ms-transform-center-y);pointer-events:none;color:var(--ms-toggle-icon-color);transition:transform var(--ms-transition-fast) var(--ms-easing-snappy)}.ms--open .ms__toggle{transform:var(--ms-transform-center-y) rotate(var(--ms-transform-rotate-180));color:var(--ms-toggle-icon-color-open)}.ms__counter{position:absolute;right:var(--ms-counter-offset);top:50%;transform:var(--ms-transform-center-y);padding:var(--ms-counter-padding);background:var(--ms-counter-badge-bg);color:var(--ms-counter-badge-color);font-size:var(--ms-counter-font-size);font-weight:var(--ms-counter-font-weight);border-radius:var(--ms-counter-border-radius);cursor:pointer;transition:all var(--ms-transition-fast) var(--ms-easing-snappy)}.ms__counter:hover{background:var(--ms-counter-badge-bg-hover);transform:var(--ms-transform-center-y) scale(var(--ms-transform-scale-hover))}.ms__hint{display:none;position:absolute;z-index:var(--ms-z-index-popover);padding:var(--ms-hint-padding);background:var(--ms-hint-bg);border:var(--ms-hint-border);border-radius:var(--ms-hint-border-radius);box-shadow:var(--ms-hint-box-shadow);font-size:var(--ms-hint-font-size);color:var(--ms-hint-color);line-height:var(--ms-line-height-relaxed);max-width:100%}.ms__hint--visible{display:block}.ms__dropdown{display:none;position:absolute;font-family:inherit;z-index:var(--ms-z-index-dropdown);background:var(--ms-dropdown-bg);border:var(--ms-dropdown-border);border-radius:var(--ms-dropdown-border-radius);box-shadow:var(--ms-dropdown-box-shadow);max-height:var(--ms-options-max-height);overflow:hidden;color:var(--ms-dropdown-text-color)}.ms__dropdown--visible{display:flex;flex-direction:column}.ms__dropdown-inner{flex:1;overflow-y:auto;overscroll-behavior:contain;touch-action:pan-y;-webkit-overflow-scrolling:touch;scrollbar-width:thin;scrollbar-color:var(--ms-scrollbar-thumb-bg) var(--ms-scrollbar-track-bg)}.ms__dropdown-inner::-webkit-scrollbar{width:var(--ms-scrollbar-width)}.ms__dropdown-inner::-webkit-scrollbar-track{background:var(--ms-scrollbar-track-bg)}.ms__dropdown-inner::-webkit-scrollbar-thumb{background:var(--ms-scrollbar-thumb-bg);border-radius:var(--ms-scrollbar-thumb-border-radius)}.ms__dropdown-inner::-webkit-scrollbar-thumb:hover{background:var(--ms-scrollbar-thumb-bg-hover)}.ms__dropdown--virtual{max-height:none}.ms__dropdown--virtual .ms__dropdown-inner{overflow-y:visible}.ms__actions{display:flex;flex-wrap:nowrap;gap:var(--ms-actions-gap);padding:var(--ms-actions-padding);border-bottom:var(--ms-actions-border-bottom)}.ms__actions--wrap{flex-wrap:wrap}.ms__actions--sticky{position:sticky;top:0;z-index:var(--ms-z-index-sticky);background:var(--ms-actions-bg)}.ms__action-btn{flex:1;font-family:inherit;padding:var(--ms-action-btn-padding);font-size:var(--ms-action-btn-font-size);border:var(--ms-action-btn-border);border-radius:var(--ms-action-btn-border-radius);background:var(--ms-action-button-bg);color:var(--ms-action-button-color);cursor:pointer;transition:all var(--ms-transition-fast) var(--ms-easing-snappy)}.ms__action-btn:hover{background:var(--ms-action-button-bg-hover);border-color:var(--ms-action-button-border-color-hover)}.ms__action-btn:active{transform:scale(var(--ms-transform-scale-active))}.ms__action-btn:disabled,.ms__action-btn[disabled]{opacity:var(--ms-disabled-opacity);cursor:not-allowed;pointer-events:none}.ms__options{padding:var(--ms-options-padding);scrollbar-width:thin;scrollbar-color:var(--ms-scrollbar-thumb-bg) var(--ms-scrollbar-track-bg)}.ms__options::-webkit-scrollbar{width:var(--ms-scrollbar-width)}.ms__options::-webkit-scrollbar-track{background:var(--ms-scrollbar-track-bg)}.ms__options::-webkit-scrollbar-thumb{background:var(--ms-scrollbar-thumb-bg);border-radius:var(--ms-scrollbar-thumb-border-radius)}.ms__options::-webkit-scrollbar-thumb:hover{background:var(--ms-scrollbar-thumb-bg-hover)}.ms__options--virtual .ms__option{height:var(--ms-option-height, 50px);min-height:var(--ms-option-height, 50px);max-height:var(--ms-option-height, 50px);overflow:hidden;box-sizing:border-box}.ms__group+.ms__group{border-top:var(--ms-group-border-top);margin-top:var(--ms-group-margin-top);padding-top:var(--ms-group-padding-top)}.ms__group-label{padding:var(--ms-group-label-padding);font-size:var(--ms-group-label-font-size);font-weight:var(--ms-group-label-font-weight);color:var(--ms-group-label-color);text-transform:var(--ms-group-label-transform);letter-spacing:var(--ms-group-label-letter-spacing)}.ms__option{display:flex;align-items:var(--ms-checkbox-align, center);gap:var(--ms-option-gap);padding:var(--ms-option-padding);color:var(--ms-option-text-color);background:var(--ms-option-bg);cursor:pointer}.ms__option:hover{background:var(--ms-option-bg-hover);color:var(--ms-option-color-hover, inherit)}.ms__option--focused{background:var(--ms-option-bg-focused);color:var(--ms-option-color-focused, inherit);outline:var(--ms-option-outline-focused);outline-offset:var(--ms-option-focus-outline-offset)}.ms__option--matched{background:var(--ms-option-bg-matched);color:var(--ms-option-color-matched, inherit);border-left:var(--ms-option-border-matched)}.ms__option--selected{background:var(--ms-option-bg-selected)}.ms__option--selected:hover{background:var(--ms-option-bg-selected-hover, var(--ms-option-bg-selected))}.ms__option--disabled{opacity:var(--ms-disabled-opacity);cursor:not-allowed;background:var(--ms-option-disabled-bg)}.ms__option--disabled:hover{background:var(--ms-option-disabled-bg)}.ms__option--focused:hover{background:var(--ms-option-bg-focused-hover);color:var(--ms-option-color-focused-hover, var(--ms-option-color-focused, var(--ms-option-text-color)))}.ms__option--matched:hover{background:var(--ms-option-bg-matched-hover);color:var(--ms-option-color-matched-hover, var(--ms-option-color-matched, var(--ms-option-text-color)))}.ms__option--selected.ms__option--focused{background:var(--ms-option-bg-selected-focused);outline:var(--ms-option-outline-focused);outline-offset:var(--ms-option-focus-outline-offset)}.ms__option--selected.ms__option--matched{background:var(--ms-option-bg-selected-matched);border-left:var(--ms-option-border-matched)}.ms__option--disabled.ms__option--selected{background:var(--ms-option-bg-disabled-selected)}.ms__option--disabled.ms__option--focused{outline:none}.ms__option[data-checkbox-align=top]{--ms-checkbox-align: flex-start}.ms__option[data-checkbox-align=bottom]{--ms-checkbox-align: flex-end}.ms__checkbox{appearance:none;-webkit-appearance:none;-moz-appearance:none;flex-shrink:0;position:relative;margin-top:var(--ms-checkbox-margin-top);margin-right:var(--ms-checkbox-margin-right);margin-bottom:var(--ms-checkbox-margin-bottom);margin-left:var(--ms-checkbox-margin-left);width:var(--ms-checkbox-size);height:var(--ms-checkbox-size);transform:scale(var(--ms-checkbox-scale));transform-origin:top left;cursor:pointer;background:var(--ms-checkbox-bg);border:var(--ms-checkbox-border);border-radius:var(--ms-checkbox-border-radius);transition:background-color .15s ease,border-color .15s ease}.ms__checkbox:after{content:"";position:absolute;display:none;left:50%;top:40%;width:30%;height:55%;transform:translate(-50%,-50%) rotate(45deg);border:solid var(--ms-checkbox-checkmark-color);border-width:0 2px 2px 0}.ms__checkbox:hover:not(:disabled){border-color:var(--ms-checkbox-hover-border-color)}.ms__checkbox:checked{background:var(--ms-checkbox-checked-bg);border:var(--ms-checkbox-checked-border)}.ms__checkbox:checked:after{display:block}.ms__checkbox:checked:hover:not(:disabled){background:var(--ms-checkbox-checked-bg-hover);border-color:var(--ms-checkbox-checked-border-color-hover)}.ms__checkbox:focus-visible{outline:2px solid var(--ms-checkbox-checked-bg);outline-offset:2px}.ms__checkbox:disabled{cursor:not-allowed;background:var(--ms-checkbox-disabled-bg);border:var(--ms-checkbox-disabled-border);opacity:.6}.ms__checkbox:disabled:checked{background:var(--ms-checkbox-disabled-bg)}.ms__option--disabled .ms__checkbox{cursor:not-allowed}.ms__option-content{flex:1;display:flex;align-items:center;gap:var(--ms-option-content-gap);min-width:0}.ms__option-icon{flex-shrink:0;width:var(--ms-option-icon-size);height:var(--ms-option-icon-size);display:flex;align-items:center;justify-content:center;font-size:var(--ms-option-icon-font-size)}.ms__option-icon svg{width:100%;height:100%;fill:currentColor}.ms__option-text{flex:1;min-width:0}.ms__option-title{font-size:var(--ms-option-title-font-size);color:var(--ms-option-title-color);line-height:var(--ms-line-height-relaxed)}.ms__option:hover .ms__option-title{color:var(--ms-option-title-color-hover, var(--ms-option-title-color))}.ms__option--selected .ms__option-title{color:var(--ms-option-title-color-selected, var(--ms-option-title-color))}.ms__option--selected:hover .ms__option-title{color:var(--ms-option-title-color-selected-hover, var(--ms-option-title-color-selected, var(--ms-option-title-color)))}.ms__option-title mark{background:var(--ms-option-mark-bg);color:var(--ms-option-mark-color);font-weight:var(--ms-option-mark-font-weight)}.ms__option-subtitle{margin-top:var(--ms-option-subtitle-margin-top);font-size:var(--ms-option-subtitle-font-size);color:var(--ms-option-subtitle-color);line-height:var(--ms-option-subtitle-line-height)}.ms__option:hover .ms__option-subtitle{color:var(--ms-option-subtitle-color-hover, var(--ms-option-subtitle-color))}.ms__option--selected .ms__option-subtitle{color:var(--ms-option-subtitle-color-selected, var(--ms-option-subtitle-color))}.ms__option--selected:hover .ms__option-subtitle{color:var(--ms-option-subtitle-color-selected-hover, var(--ms-option-subtitle-color-selected, var(--ms-option-subtitle-color)))}.ms__empty{padding:var(--ms-empty-padding);text-align:center;font-size:var(--ms-empty-font-size);color:var(--ms-empty-color)}.ms__loader{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--ms-loader-padding);gap:var(--ms-loader-gap)}.ms__loading-text{font-size:var(--ms-loading-text-font-size);color:var(--ms-loading-color)}.ms__badges{display:flex;flex-wrap:wrap;gap:var(--ms-badges-gap);padding:0}.ms__badges:empty{display:none}.ms__badges--bottom{margin-top:var(--ms-badges-margin-bottom)}.ms__badges--top{margin-bottom:var(--ms-badges-margin-top);order:var(--ms-order-first)}.ms__badges--left{order:var(--ms-order-first);margin-right:var(--ms-badges-margin-left);justify-content:flex-end}.ms__badges--right{margin-left:var(--ms-badges-margin-right);justify-content:flex-start}.ms__count-display{display:flex;align-items:center}.ms__count-display:empty{display:none}.ms__count-display--bottom{margin-top:var(--ms-count-display-margin-bottom)}.ms__count-display--top{margin-bottom:var(--ms-count-display-margin-top);order:var(--ms-order-first)}.ms__count-display--left{order:var(--ms-order-first);margin-right:var(--ms-count-display-margin-left);justify-content:flex-start}.ms__count-display--right{margin-left:var(--ms-count-display-margin-right);justify-content:flex-end}.ms__counter-wrapper{display:inline-flex;align-items:center;gap:var(--ms-counter-wrapper-gap);background:var(--ms-counter-wrapper-bg);border:var(--ms-counter-wrapper-border);border-radius:var(--ms-counter-wrapper-border-radius);padding:var(--ms-counter-wrapper-padding);transition:all var(--ms-transition-fast) var(--ms-easing-snappy)}.ms__counter-wrapper:hover{background:var(--ms-counter-wrapper-bg-hover);border-color:var(--ms-counter-wrapper-border-color-hover)}.ms__count-text{display:inline-flex;align-items:center;background:var(--ms-count-text-bg);border:var(--ms-count-text-border);padding:0;font-size:var(--ms-count-text-font-size);color:var(--ms-count-text-color);cursor:pointer;transition:color var(--ms-transition-fast) var(--ms-easing-snappy)}.ms__count-clear{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:var(--ms-count-clear-size);height:var(--ms-count-clear-size);padding:0;border:none;background:var(--ms-count-clear-bg);color:var(--ms-count-clear-color);font-size:var(--ms-count-clear-font-size);line-height:var(--ms-line-height-none);cursor:pointer;border-radius:var(--ms-count-clear-border-radius);transition:all var(--ms-transition-fast) var(--ms-easing-snappy)}.ms__count-clear:hover{background:var(--ms-count-clear-bg-hover);color:var(--ms-count-clear-color-hover)}.ms__count-clear:before{content:var(--ms-icon-clear)}.ms__badge{display:inline-flex;align-items:center;height:var(--ms-badge-height);font-size:var(--ms-badge-font-size);font-weight:var(--ms-badge-font-weight);line-height:var(--ms-line-height-none);border-radius:var(--ms-badge-border-radius);overflow:hidden;max-width:100%}.ms__badge-text{display:flex;align-items:center;box-sizing:border-box;height:100%;padding:var(--ms-badge-text-padding);background:var(--ms-badge-text-bg);color:var(--ms-badge-text-color);border:var(--ms-badge-text-border);border-right:none;border-radius:var(--ms-badge-border-radius) 0 0 var(--ms-badge-border-radius);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transition:background-color var(--ms-transition-normal) ease,color var(--ms-transition-normal) ease}.ms__badge:hover .ms__badge-text{background:var(--ms-badge-text-bg-hover, var(--ms-badge-text-bg));color:var(--ms-badge-text-color-hover, var(--ms-badge-text-color))}.ms__badge-remove{display:flex;align-items:center;justify-content:center;box-sizing:border-box;font-family:inherit;width:var(--ms-badge-remove-width);height:100%;flex-shrink:0;background:var(--ms-badge-remove-bg);color:var(--ms-badge-remove-color);border:var(--ms-badge-remove-border);border-left:none;border-radius:0 var(--ms-badge-border-radius) var(--ms-badge-border-radius) 0;cursor:pointer;transition:background-color var(--ms-transition-normal) ease;font-size:var(--ms-badge-remove-font-size)}.ms__badge-remove:hover{background:var(--ms-badge-remove-bg-hover)}.ms__badge-remove:focus{outline:none;box-shadow:var(--ms-badge-remove-box-shadow-focus)}.ms__badge-remove:before{content:var(--ms-icon-remove);font-size:var(--ms-font-size-base);line-height:var(--ms-line-height-none)}.ms__badge--counter{cursor:pointer}.ms__badge--counter .ms__badge-text{background:var(--ms-badge-counter-text-bg);color:var(--ms-badge-counter-text-color);border:var(--ms-badge-counter-border);border-right:none}.ms__badge--counter .ms__badge-remove{background:var(--ms-badge-counter-remove-bg);color:var(--ms-badge-counter-remove-color);border:var(--ms-badge-counter-border);border-left:none}.ms__badge--counter .ms__badge-remove:hover{background:var(--ms-badge-counter-remove-bg-hover)}.ms__badge--more{cursor:pointer}.ms__badge-tooltip{position:fixed;z-index:var(--ms-tooltip-z-index);opacity:0;visibility:hidden;transition:opacity var(--ms-transition-normal) ease,visibility var(--ms-transition-normal) ease;background:var(--ms-tooltip-bg);color:var(--ms-tooltip-text-color);padding:var(--ms-tooltip-padding);border-radius:var(--ms-tooltip-border-radius);font-size:var(--ms-tooltip-font-size);line-height:var(--ms-line-height-relaxed);max-width:var(--ms-tooltip-max-width);word-wrap:break-word;white-space:pre-wrap;box-shadow:var(--ms-tooltip-shadow);pointer-events:none}.ms__badge-tooltip--visible{opacity:1;visibility:visible}.ms__selected-popover{display:none;position:absolute;z-index:var(--ms-z-index-popover);background:var(--ms-selected-popover-bg);border:var(--ms-selected-popover-border);border-radius:var(--ms-selected-popover-border-radius);box-shadow:var(--ms-selected-popover-box-shadow);width:var(--ms-selected-popover-width);max-height:var(--ms-selected-popover-max-height);overflow:hidden}.ms__selected-popover--visible{display:flex;flex-direction:column}.ms__selected-popover--virtual{display:block;overflow:visible;max-height:none}.ms__selected-popover-header{display:flex;align-items:center;justify-content:space-between;padding:var(--ms-selected-popover-header-padding);background:var(--ms-selected-popover-header-bg);border-bottom:var(--ms-selected-popover-header-border-bottom);font-size:var(--ms-selected-popover-header-font-size);font-weight:var(--ms-selected-popover-header-font-weight);color:var(--ms-selected-popover-header-color)}.ms__selected-popover-close{display:flex;align-items:center;justify-content:center;width:var(--ms-popover-close-size);height:var(--ms-popover-close-size);padding:0;border:none;background:var(--ms-selected-popover-close-bg);color:var(--ms-selected-popover-close-color);font-size:var(--ms-selected-popover-close-font-size);line-height:var(--ms-line-height-none);cursor:pointer;border-radius:var(--ms-selected-popover-close-border-radius);transition:all var(--ms-transition-fast) var(--ms-easing-snappy)}.ms__selected-popover-close:hover{background:var(--ms-selected-popover-close-bg-hover);color:var(--ms-selected-popover-close-color-hover)}.ms__selected-popover-body{display:flex;flex-direction:column;gap:var(--ms-selected-popover-body-gap);padding:var(--ms-selected-popover-body-padding);overflow-y:auto;max-height:var(--ms-selected-popover-body-max-height);scrollbar-width:thin;scrollbar-color:var(--ms-scrollbar-thumb-bg) var(--ms-scrollbar-track-bg)}.ms__selected-popover-body::-webkit-scrollbar{width:var(--ms-scrollbar-width)}.ms__selected-popover-body::-webkit-scrollbar-track{background:var(--ms-scrollbar-track-bg)}.ms__selected-popover-body::-webkit-scrollbar-thumb{background:var(--ms-scrollbar-thumb-bg);border-radius:var(--ms-scrollbar-thumb-border-radius)}.ms__selected-popover-body::-webkit-scrollbar-thumb:hover{background:var(--ms-scrollbar-thumb-bg-hover)}.ms__selected-popover-body .ms__badge{width:100%;min-height:fit-content;line-height:var(--ms-line-height-relaxed)}.ms__selected-popover-body .ms__badge-text{flex:1;min-width:0;white-space:normal;word-wrap:break-word}.ms__selected-popover-body--virtual{display:block;max-height:none;padding:0}.ms__selected-popover-body--virtual .ms__badge{height:var(--ms-badge-height-virtual, 36px);min-height:var(--ms-badge-height-virtual, 36px);max-height:var(--ms-badge-height-virtual, 36px);margin-bottom:var(--ms-selected-popover-body-gap);overflow:hidden;box-sizing:border-box}.ms__selected-popover-body--virtual .ms__badge-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ms--rtl .ms__input-wrapper{direction:rtl}.ms--rtl .ms__input{text-align:right;padding-left:var(--ms-input-padding-right);padding-right:var(--ms-input-padding-h)}.ms--rtl .ms__toggle{left:var(--ms-toggle-right)!important;right:auto!important}.ms--rtl .ms__counter{left:var(--ms-counter-offset)!important;right:auto!important}.ms--rtl .ms__dropdown{direction:rtl;text-align:right}.ms--rtl .ms__option{flex-direction:row-reverse}.ms--rtl .ms__checkbox{margin-left:var(--ms-spacing-sm);margin-right:0}.ms--rtl .ms__option-content{text-align:right}.ms--rtl .ms__option-icon{margin-left:var(--ms-spacing-xs);margin-right:0}.ms--rtl .ms__badges{direction:rtl}.ms--rtl .ms__badges--right{margin-left:0;margin-right:var(--ms-badges-margin-right)}.ms--rtl .ms__badges--left{margin-right:0;margin-left:var(--ms-badges-margin-left)}.ms--rtl .ms__badge{flex-direction:row-reverse}.ms--rtl .ms__badge-remove{border-radius:var(--ms-badge-border-radius) 0 0 var(--ms-badge-border-radius);border-left:var(--ms-badge-remove-border);border-right:none}.ms--rtl .ms__badge-text{border-radius:0 var(--ms-badge-border-radius) var(--ms-badge-border-radius) 0;border-right:var(--ms-badge-text-border);border-left:none}.ms--rtl .ms__count-display{direction:rtl}.ms--rtl .ms__count-display--right{margin-left:0;margin-right:var(--ms-count-display-margin-right)}.ms--rtl .ms__count-display--left{margin-right:0;margin-left:var(--ms-count-display-margin-left)}.ms--rtl .ms__counter-wrapper{flex-direction:row-reverse}.ms--rtl .ms__selected-popover{direction:rtl;text-align:right}.ms--rtl .ms__actions{direction:rtl}.ms--rtl .ms__group-label,.ms--rtl .ms__empty{text-align:right}.ms--rtl .ms__hint{direction:rtl;text-align:right}.ms--disabled .ms__input{opacity:var(--ms-disabled-input-opacity);cursor:not-allowed;background:var(--ms-input-bg-disabled)}.ms--disabled .ms__toggle{opacity:var(--ms-disabled-input-opacity)}.ms--no-checkboxes .ms__option{gap:0;padding-left:var(--ms-option-padding-h)}.ms--no-checkboxes .ms__option-content{padding-left:0}.ms-debug-info{margin-top:calc(.4 * var(--ms-rem));padding:calc(.4 * var(--ms-rem));background-color:#f9fafb;border:1px solid #e5e7eb;border-radius:calc(var(--base-border-radius-md, .6) * var(--ms-rem));font-size:calc(1.2 * var(--ms-rem));color:#111827}.ms-debug-info details summary{cursor:pointer;font-weight:600;color:#2563eb;-webkit-user-select:none;user-select:none;padding:calc(.4 * var(--ms-rem));border-radius:calc(var(--base-border-radius-sm, .4) * var(--ms-rem))}.ms-debug-info details summary:hover{background-color:#f3f4f6}.ms-debug-info details summary:focus{outline:2px solid #3b82f6;outline-offset:2px}.ms-debug-info .ms-debug-stats{display:flex;flex-direction:column;gap:calc(.4 * var(--ms-rem));margin-top:calc(.4 * var(--ms-rem));padding:calc(.4 * var(--ms-rem));background-color:#fff;border-radius:calc(var(--base-border-radius-sm, .4) * var(--ms-rem))}.ms-debug-info .ms-debug-stats span{display:flex;justify-content:space-between;padding:2px 4px;font-family:monospace;font-size:calc(1 * var(--ms-rem))}.ms-debug-info .ms-debug-stats span:before{content:"•";margin-right:calc(.4 * var(--ms-rem));color:#3b82f6}',us=typeof HTMLElement<"u"?HTMLElement:class{},Ae=new Set;function dt(){return Array.from(Ae)}class Ie extends us{constructor(){super();m(this,"picker");m(this,"containerElement");m(this,"shadow");m(this,"_options");m(this,"_valueMember");m(this,"_getValueCallback");m(this,"_displayValueMember");m(this,"_getDisplayValueCallback");m(this,"_getBadgeDisplayCallback");m(this,"_getBadgeClassCallback");m(this,"_customStylesCallback");m(this,"_searchValueMember");m(this,"_getSearchValueCallback");m(this,"_iconMember");m(this,"_getIconCallback");m(this,"_subtitleMember");m(this,"_getSubtitleCallback");m(this,"_groupMember");m(this,"_getGroupCallback");m(this,"_renderGroupLabelContentCallback");m(this,"_disabledMember");m(this,"_getDisabledCallback");m(this,"_getValueFormatCallback");m(this,"_getBadgeTooltipCallback");m(this,"_getRemoveButtonTooltipCallback");m(this,"_renderOptionContentCallback");m(this,"_renderBadgeContentCallback");m(this,"_renderSelectedItemContentCallback");m(this,"_getSelectedItemClassCallback");m(this,"_renderSelectedContentCallback");m(this,"_getCounterCallback");m(this,"_actionButtons");m(this,"_beforeSearchCallback");m(this,"_searchCallback");m(this,"_addNewCallback");m(this,"_selectCallback");m(this,"_deselectCallback");m(this,"_changeCallback");m(this,"_declarativeSelectedValues");this.shadow=this.attachShadow({mode:"open"});const t=document.createElement("style");t.textContent=ps,this.shadow.appendChild(t),requestAnimationFrame(()=>{this.setAttribute("data-ready","")})}static get observedAttributes(){return["search-hint","search-placeholder","multiple","allow-groups","show-checkboxes","sticky-actions","close-on-select","lock-placement","dropdown-min-width","dropdown-max-width","badges-display-mode","badges-threshold","badges-max-visible","badges-threshold-mode","badges-position","show-counter","keep-options-on-search","should-keep-search-on-close","max-height","empty-message","loading-message","min-search-length","enable-search","search-input-mode","search-mode","actions-layout","allow-add-new","initial-values","enable-virtual-scroll","virtual-scroll-threshold","option-height","badge-height","virtual-scroll-buffer","value-member","display-value-member","search-value-member","icon-member","subtitle-member","group-member","disabled-member","name","value-format","enable-badge-tooltips","badge-tooltip-placement","remove-button-tooltip-text","show-debug-info"]}connectedCallback(){Ae.add(this),this.render();const t=this.parseDeclarativeOptions();t&&(this._options&&this._options.length>0&&k.warn("[MultiSelectElement] Both declarative <option> elements and programmatic .options detected. Using declarative options."),this._options=t),this.initializePicker()}disconnectedCallback(){Ae.delete(this),this.picker&&this.picker.destroy()}attributeChangedCallback(t,s,i){s!==i&&this.picker&&t!=="initial-values"&&(this.picker.destroy(),this.initializePicker())}render(){this.containerElement=document.createElement("div"),this.containerElement.setAttribute("data-multiselect",""),this.className&&(this.containerElement.className=this.className),this.shadow.appendChild(this.containerElement),this.getAttribute("show-debug-info")==="true"&&this.renderDebugInfo()}renderDebugInfo(){const t=this.shadow.querySelector(".ms-debug-info");t&&t.remove();const s=document.createElement("div");s.className="ms-debug-info";const i=document.createElement("details"),r=document.createElement("summary");r.textContent="Debug Info";const n=document.createElement("div");n.className="ms-debug-stats",i.appendChild(r),i.appendChild(n),s.appendChild(i),this.shadow.appendChild(s),this.updateDebugInfo()}updateDebugInfo(){var h,g;const t=this.shadow.querySelector(".ms-debug-stats");if(!t||!this.picker)return;const s="1.8.5",i=dt().length,n=this.picker.getSelected().length,a=((h=this._options)==null?void 0:h.length)||0,l=this.picker,c=l.isOpen||!1,d=l.searchTerm||"",p=l.isLoading||!1,u=((g=l.filteredOptions)==null?void 0:g.length)||0;t.innerHTML=`
|
|
46
|
+
${d}`:c,v.debug(`[${this.instanceId}] Using default content: "${r}"`)}typeof r=="string"?i.textContent=r:i.appendChild(r),(this.options.container||document.body).appendChild(i),v.debug(`[${this.instanceId}] Tooltip element created and appended for "${s}"`),this.badgeTooltips.set(s,i);const a=()=>{const c=this.badgeTooltipHideTimeouts.get(s);c&&(clearTimeout(c),this.badgeTooltipHideTimeouts.delete(s)),v.debug(`[${this.instanceId}] Mouse entered badge "${s}", will show tooltip in ${this.options.badgeTooltipDelay??100}ms`);const d=window.setTimeout(()=>{v.debug(`[${this.instanceId}] Showing tooltip for "${s}"`),i.classList.add("ms__badge-tooltip--visible"),this.positionBadgeTooltip(e,i,s),this.badgeTooltipShowTimeouts.delete(s)},this.options.badgeTooltipDelay??100);this.badgeTooltipShowTimeouts.set(s,d)},l=()=>{const c=this.badgeTooltipShowTimeouts.get(s);c&&(clearTimeout(c),this.badgeTooltipShowTimeouts.delete(s));const d=window.setTimeout(()=>{i.classList.remove("ms__badge-tooltip--visible"),this.cleanupBadgeTooltip(s),this.badgeTooltipHideTimeouts.delete(s)},100);this.badgeTooltipHideTimeouts.set(s,d)};e.addEventListener("mouseenter",a),e.addEventListener("mouseleave",l)}createRemoveButtonTooltip(e,t,s,i){const r=document.createElement("div");r.className="ms__badge-tooltip";let n;i&&this.options.getRemoveButtonTooltipCallback?n=this.options.getRemoveButtonTooltipCallback(i):this.options.removeButtonTooltipText?n=this.options.removeButtonTooltipText.replace("{0}",t):n=`Remove ${t}`,r.textContent=n,(this.options.container||document.body).appendChild(r);const l=`${s}-remove`;this.badgeTooltips.set(l,r);const c=()=>{const p=this.badgeTooltipHideTimeouts.get(l);p&&(clearTimeout(p),this.badgeTooltipHideTimeouts.delete(l));const u=this.badgeTooltips.get(s);u&&u.classList.remove("ms__badge-tooltip--visible");const h=window.setTimeout(()=>{r.classList.add("ms__badge-tooltip--visible"),this.positionBadgeTooltip(e,r,l),this.badgeTooltipShowTimeouts.delete(l)},this.options.badgeTooltipDelay??100);this.badgeTooltipShowTimeouts.set(l,h)},d=()=>{const p=this.badgeTooltipShowTimeouts.get(l);p&&(clearTimeout(p),this.badgeTooltipShowTimeouts.delete(l));const u=window.setTimeout(()=>{r.classList.remove("ms__badge-tooltip--visible"),this.cleanupBadgeTooltip(l),this.badgeTooltipHideTimeouts.delete(l)},100);this.badgeTooltipHideTimeouts.set(l,u)};e.addEventListener("mouseenter",c),e.addEventListener("mouseleave",d)}positionBadgeTooltip(e,t,s){const i=q(e,t,()=>{se(e,t,{placement:this.options.badgeTooltipPlacement||"top",strategy:"fixed",middleware:[ee(this.options.badgeTooltipOffset||8),fe(),te({padding:8})]}).then(({x:r,y:n})=>{Object.assign(t.style,{left:`${r}px`,top:`${n}px`}),v.debug(`[${this.instanceId}] Positioned tooltip "${s}" at x:${r}, y:${n}`,{placement:this.options.badgeTooltipPlacement||"top",tooltipClasses:t.className,tooltipDisplay:window.getComputedStyle(t).display,tooltipOpacity:window.getComputedStyle(t).opacity,tooltipVisibility:window.getComputedStyle(t).visibility,tooltipZIndex:window.getComputedStyle(t).zIndex,tooltipPosition:window.getComputedStyle(t).position})})});this.badgeTooltipCleanups.set(s,i)}cleanupBadgeTooltip(e){const t=this.badgeTooltipShowTimeouts.get(e);t&&(clearTimeout(t),this.badgeTooltipShowTimeouts.delete(e));const s=this.badgeTooltipHideTimeouts.get(e);s&&(clearTimeout(s),this.badgeTooltipHideTimeouts.delete(e));const i=this.badgeTooltipCleanups.get(e);i&&(i(),this.badgeTooltipCleanups.delete(e))}destroyAllBadgeTooltips(){this.badgeTooltipShowTimeouts.forEach(e=>clearTimeout(e)),this.badgeTooltipShowTimeouts.clear(),this.badgeTooltipHideTimeouts.forEach(e=>clearTimeout(e)),this.badgeTooltipHideTimeouts.clear(),this.badgeTooltipCleanups.forEach(e=>e()),this.badgeTooltipCleanups.clear(),this.badgeTooltips.forEach(e=>e.remove()),this.badgeTooltips.clear()}attachActionButtonTooltips(){const e=this.dropdown.querySelectorAll(".ms__action-btn");v.debug(`[${this.instanceId}] Found ${e.length} action buttons to attach tooltips to`),e.forEach(t=>{var l;const s=t,i=s.dataset.action;if(!i)return;const r=(l=this.options.actionButtons)==null?void 0:l.find(c=>c.action==="custom"?s.dataset.customAction===s.dataset.action:c.action===i);if(!r)return;let n;if(r.getTooltipCallback?(n=r.getTooltipCallback(this),v.debug(`[${this.instanceId}] Using getTooltipCallback for action button "${i}": "${n}"`)):(n=r.tooltip,v.debug(`[${this.instanceId}] Using static tooltip for action button "${i}": "${n}"`)),!n){v.debug(`[${this.instanceId}] No tooltip for action button "${i}"`);return}const a=`action-${i}-${Date.now()}`;this.createActionButtonTooltip(s,n,a)})}createActionButtonTooltip(e,t,s){const i=document.createElement("div");i.className="ms__badge-tooltip",i.textContent=t,(this.options.container||document.body).appendChild(i),v.debug(`[${this.instanceId}] Tooltip element created for action button "${s}"`),this.actionButtonTooltips.set(s,i);let n,a;const l=()=>{clearTimeout(a),v.debug(`[${this.instanceId}] Mouse entered action button "${s}", will show tooltip in ${this.options.badgeTooltipDelay??100}ms`),n=window.setTimeout(()=>{v.debug(`[${this.instanceId}] Showing tooltip for action button "${s}"`),i.classList.add("ms__badge-tooltip--visible"),this.positionActionButtonTooltip(e,i,s)},this.options.badgeTooltipDelay??100)},c=()=>{clearTimeout(n),a=window.setTimeout(()=>{i.classList.remove("ms__badge-tooltip--visible"),this.cleanupActionButtonTooltip(s)},100)};e.addEventListener("mouseenter",l),e.addEventListener("mouseleave",c)}positionActionButtonTooltip(e,t,s){const i=q(e,t,()=>{se(e,t,{placement:this.options.badgeTooltipPlacement||"top",strategy:"fixed",middleware:[ee(this.options.badgeTooltipOffset||8),fe(),te({padding:8})]}).then(({x:r,y:n})=>{Object.assign(t.style,{left:`${r}px`,top:`${n}px`}),v.debug(`[${this.instanceId}] Positioned action button tooltip "${s}" at x:${r}, y:${n}`)})});this.actionButtonTooltipCleanups.set(s,i)}cleanupActionButtonTooltip(e){const t=this.actionButtonTooltipCleanups.get(e);t&&(t(),this.actionButtonTooltipCleanups.delete(e))}destroyAllActionButtonTooltips(){this.actionButtonTooltipCleanups.forEach(e=>e()),this.actionButtonTooltipCleanups.clear(),this.actionButtonTooltips.forEach(e=>e.remove()),this.actionButtonTooltips.clear()}destroy(){this.destroyAllBadgeTooltips(),this.destroyAllActionButtonTooltips(),this.dropdownCleanup&&this.dropdownCleanup(),this.hintCleanup&&this.hintCleanup(),this.selectedPopoverCleanup&&this.selectedPopoverCleanup(),this.documentClickHandler&&(document.removeEventListener("click",this.documentClickHandler),this.documentClickHandler=null),this.documentKeydownHandler&&(document.removeEventListener("keydown",this.documentKeydownHandler),this.documentKeydownHandler=null),this.virtualScroll&&(this.virtualScroll.destroy(),this.virtualScroll=null),this.dropdown&&this.dropdown.remove(),this.hint&&this.hint.remove(),this.selectedPopover&&this.selectedPopover.remove(),this.element.innerHTML="",this.element.classList.remove("ms","ms--open","ms--no-checkboxes"),re.info(`[${this.instanceId}] Component destroyed`)}}const ps=':host{--ms-rem: 10px;font-family:var(--ms-font-family, var(--base-font-family, inherit));display:block;--ms-accent-color: var(--base-accent-color, #3b82f6);--ms-accent-color-hover: var(--base-accent-color-hover, #2563eb);--ms-accent-color-active: var(--base-accent-color-active, #1d4ed8);--ms-accent-color-light: var(--base-accent-color-light, #eff6ff);--ms-accent-color-light-hover: var(--base-accent-color-light-hover, #e0f2fe);--ms-text-color-1: var(--base-text-color-1, #111827);--ms-text-color-2: var(--base-text-color-2, #353b47);--ms-text-color-3: var(--base-text-color-3, #6b7280);--ms-text-color-4: var(--base-text-color-4, #a0a3a9);--ms-text-color-on-accent: var(--base-text-color-on-accent, #ffffff);--ms-text-primary: var(--ms-text-color-1);--ms-text-secondary: var(--ms-text-color-3);--ms-primary-bg: var(--base-main-bg, #f3f4f6);--ms-primary-bg-hover: var(--base-hover-bg, #e5e7eb);--ms-border-color: var(--base-border-color, #e5e7eb);--ms-border: var(--base-border, 1px solid var(--ms-border-color));--ms-input-bg: var(--base-input-bg, #ffffff);--ms-input-color: var(--base-input-color, var(--ms-text-color-1));--ms-input-border: var(--base-input-border, 1px solid var(--ms-border-color));--ms-input-border-hover: var(--base-input-border-hover, 1px solid var(--ms-accent-color));--ms-input-border-focus: var(--base-input-border-focus, 1px solid var(--ms-accent-color));--ms-input-placeholder-color: var(--base-input-placeholder-color, var(--ms-text-color-4));--ms-input-bg-disabled: var(--base-input-bg-disabled, rgba(107, 114, 128, .05));--ms-toggle-icon-color: var(--ms-text-color-3);--ms-toggle-icon-color-open: var(--ms-text-color-3);--ms-counter-badge-bg: var(--ms-accent-color);--ms-counter-badge-bg-hover: var(--ms-accent-color-hover);--ms-counter-badge-color: var(--ms-text-color-on-accent);--ms-hint-bg: var(--base-main-bg, #ffffff);--ms-hint-color: var(--ms-text-color-4);--ms-hint-border-color: var(--ms-border-color);--ms-dropdown-bg: var(--base-dropdown-bg, #ffffff);--ms-dropdown-text-color: var(--ms-text-color-1);--ms-dropdown-border-color: var(--ms-border-color);--ms-dropdown-box-shadow-semantic: var(--base-dropdown-box-shadow, 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1));--ms-actions-bg: var(--base-main-bg, #ffffff);--ms-actions-border-color: var(--ms-border-color);--ms-action-button-bg: transparent;--ms-action-button-bg-hover: var(--ms-primary-bg);--ms-action-button-border-color: var(--ms-border-color);--ms-action-button-border-color-hover: var(--ms-accent-color);--ms-action-button-color: var(--ms-text-color-1);--ms-group-border-color: var(--ms-border-color);--ms-option-text-color: var(--ms-text-color-1);--ms-option-color-hover: inherit;--ms-option-color-focused: inherit;--ms-option-outline-color-focused: var(--ms-accent-color);--ms-option-color-matched: inherit;--ms-option-border-matched-color: color-mix(in srgb, var(--ms-accent-color) 40%, transparent);--ms-option-title-color: var(--ms-text-color-1);--ms-option-subtitle-color: var(--ms-text-color-3);--ms-loading-color: var(--ms-text-color-3);--ms-badge-bg-hover: var(--base-hover-bg, var(--ms-input-bg));--ms-badge-text-bg-hover: var(--base-hover-bg, var(--ms-input-bg));--ms-badge-text-color-hover: var(--ms-badge-text-color);--ms-badge-counter-border-color: var(--ms-border-color);--ms-badge-counter-text-bg: var(--ms-primary-bg-hover);--ms-badge-counter-text-color: var(--ms-text-color-1);--ms-badge-counter-remove-bg: var(--ms-text-color-3);--ms-badge-counter-remove-bg-hover: var(--ms-text-color-1);--ms-badge-counter-remove-color: var(--ms-text-color-on-accent);--ms-counter-wrapper-border-color: var(--ms-border-color);--ms-count-clear-bg-hover: var(--ms-accent-color);--ms-tooltip-bg: var(--base-tooltip-bg, #333333);--ms-tooltip-text-color: var(--base-tooltip-text-color, #ffffff);--ms-selected-popover-bg: var(--base-dropdown-bg, #ffffff);--ms-selected-popover-border-color: var(--ms-border-color);--ms-selected-popover-header-border-color: var(--ms-border-color);--ms-selected-popover-close-bg-hover: var(--ms-accent-color);--ms-input-padding: calc(.8 * var(--ms-rem)) calc(1.2 * var(--ms-rem));--ms-input-padding-right: calc(4 * var(--ms-rem));--ms-input-padding-h: calc(1.2 * var(--ms-rem));--ms-input-height: calc(var(--base-input-size-md-height, 3.5) * var(--ms-rem));--ms-input-font-size: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-input-border-width: 1px;--ms-input-border-radius: var(--ms-border-radius-md);--ms-input-text: var(--ms-text-color-1);--ms-input-bg-disabled: rgba(107, 114, 128, .05);--ms-input-size-xs-font: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-input-size-xs-padding-v: calc(.4 * var(--ms-rem));--ms-input-size-xs-padding-h: calc(.8 * var(--ms-rem));--ms-input-size-xs-height: calc(var(--base-input-size-xs-height, 3.1) * var(--ms-rem));--ms-input-size-sm-font: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-input-size-sm-padding-v: calc(.5 * var(--ms-rem));--ms-input-size-sm-padding-h: calc(1 * var(--ms-rem));--ms-input-size-sm-height: calc(var(--base-input-size-sm-height, 3.3) * var(--ms-rem));--ms-input-size-md-font: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-input-size-md-padding-v: calc(.8 * var(--ms-rem));--ms-input-size-md-padding-h: calc(1.2 * var(--ms-rem));--ms-input-size-md-height: calc(var(--base-input-size-md-height, 3.5) * var(--ms-rem));--ms-input-size-lg-font: calc(var(--base-font-size-base, 1.6) * var(--ms-rem));--ms-input-size-lg-padding-v: calc(1 * var(--ms-rem));--ms-input-size-lg-padding-h: calc(1.4 * var(--ms-rem));--ms-input-size-lg-height: calc(var(--base-input-size-lg-height, 3.8) * var(--ms-rem));--ms-input-size-xl-font: calc(var(--base-font-size-lg, 1.8) * var(--ms-rem));--ms-input-size-xl-padding-v: calc(1.2 * var(--ms-rem));--ms-input-size-xl-padding-h: calc(1.6 * var(--ms-rem));--ms-input-size-xl-height: calc(var(--base-input-size-xl-height, 4.1) * var(--ms-rem));--ms-toggle-right: calc(1.2 * var(--ms-rem));--ms-toggle-color: var(--ms-text-color-3);--ms-transform-center-y: translateY(-50%);--ms-transform-rotate-180: 180deg;--ms-counter-offset: calc(3.2 * var(--ms-rem));--ms-counter-padding: calc(.2 * var(--ms-rem)) calc(.4 * var(--ms-rem));--ms-counter-bg: var(--ms-accent-color);--ms-counter-color: var(--ms-text-color-on-accent);--ms-counter-font-size: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-counter-font-weight: var(--base-font-weight-semibold, 600);--ms-counter-border-radius: var(--ms-border-radius-sm);--ms-counter-bg-hover: var(--ms-accent-color-hover);--ms-transform-scale-hover: 1.1;--ms-hint-padding: calc(.8 * var(--ms-rem)) calc(1.2 * var(--ms-rem));--ms-hint-border: var(--ms-border);--ms-hint-border-radius: var(--ms-border-radius-lg);--ms-hint-box-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--ms-hint-font-size: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-dropdown-border: var(--base-dropdown-border, 1px solid var(--ms-border-color));--ms-dropdown-border-radius: var(--ms-border-radius-lg);--ms-dropdown-box-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--ms-options-max-height: calc(32 * var(--ms-rem));--ms-option-color: var(--ms-text-color-1);--ms-z-index-dropdown: 9999;--ms-z-index-sticky: 1;--ms-actions-gap: calc(.4 * var(--ms-rem));--ms-actions-padding: calc(.8 * var(--ms-rem));--ms-actions-border-bottom: var(--ms-border);--ms-action-btn-padding: calc(.4 * var(--ms-rem)) calc(.8 * var(--ms-rem));--ms-action-btn-font-size: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-action-btn-border: var(--ms-border);--ms-action-btn-border-radius: var(--ms-border-radius-sm);--ms-action-btn-bg: transparent;--ms-action-btn-color: inherit;--ms-action-btn-bg-hover: var(--ms-primary-bg);--ms-action-btn-border-color-hover: var(--ms-accent-color);--ms-transform-scale-active: .98;--ms-options-padding: 0;--ms-group-border-top: var(--ms-border);--ms-group-margin-top: calc(.4 * var(--ms-rem));--ms-group-padding-top: calc(.4 * var(--ms-rem));--ms-group-label-padding: calc(.4 * var(--ms-rem)) calc(1.2 * var(--ms-rem));--ms-group-label-font-size: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-group-label-font-weight: var(--base-font-weight-semibold, 600);--ms-group-label-color: var(--ms-text-color-3);--ms-group-label-transform: uppercase;--ms-group-label-letter-spacing: .05em;--ms-option-gap: calc(.8 * var(--ms-rem));--ms-option-padding: calc(.8 * var(--ms-rem)) calc(1.2 * var(--ms-rem));--ms-option-padding-h: calc(1.2 * var(--ms-rem));--ms-option-bg: transparent;--ms-option-bg-hover: var(--ms-primary-bg);--ms-option-bg-focused: var(--ms-primary-bg);--ms-option-outline-focused: 2px solid var(--ms-accent-color);--ms-option-focus-outline-offset: -2px;--ms-option-bg-matched: color-mix(in srgb, var(--ms-accent-color) 8%, transparent);--ms-option-border-matched: 3px solid color-mix(in srgb, var(--ms-accent-color) 40%, transparent);--ms-option-bg-selected: color-mix(in srgb, var(--ms-accent-color) 10%, transparent);--ms-option-bg-focused-hover: var(--ms-primary-bg);--ms-option-bg-matched-hover: color-mix(in srgb, var(--ms-accent-color) 12%, transparent);--ms-option-bg-selected-focused: color-mix(in srgb, var(--ms-accent-color) 15%, transparent);--ms-option-bg-selected-matched: color-mix(in srgb, var(--ms-accent-color) 15%, transparent);--ms-option-disabled-bg: var(--base-disabled-bg, transparent);--ms-option-bg-disabled-selected: color-mix(in srgb, var(--ms-accent-color) 10%, transparent);--ms-disabled-opacity: .5;--ms-option-content-gap: calc(.8 * var(--ms-rem));--ms-option-icon-size: calc(2 * var(--ms-rem));--ms-option-icon-font-size: calc(var(--base-font-size-base, 1.6) * var(--ms-rem));--ms-option-title-font-size: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-option-mark-bg: color-mix(in srgb, var(--ms-accent-color) 20%, transparent);--ms-option-mark-color: inherit;--ms-option-mark-font-weight: var(--base-font-weight-semibold, 600);--ms-option-subtitle-margin-top: calc(.4 * var(--ms-rem));--ms-option-subtitle-font-size: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-option-subtitle-line-height: var(--base-line-height-tight, 1.25);--ms-checkbox-margin-top: calc(.2 * var(--ms-rem));--ms-checkbox-margin-right: 0;--ms-checkbox-margin-bottom: 0;--ms-checkbox-margin-left: 0;--ms-checkbox-size: calc(1.6 * var(--ms-rem));--ms-checkbox-scale: 1;--ms-checkbox-align: center;--ms-checkbox-bg: var(--ms-input-bg);--ms-checkbox-border: var(--ms-border);--ms-checkbox-border-radius: calc(.3 * var(--ms-rem));--ms-checkbox-checked-bg: var(--ms-accent-color);--ms-checkbox-checked-border: 1px solid var(--ms-accent-color);--ms-checkbox-checkmark-color: var(--ms-text-color-on-accent);--ms-checkbox-hover-border-color: var(--ms-accent-color);--ms-checkbox-disabled-bg: var(--ms-primary-bg);--ms-checkbox-disabled-border: var(--ms-border);--ms-checkbox-checked-bg-hover: var(--ms-accent-color-hover);--ms-checkbox-checked-border-color-hover: var(--ms-accent-color-hover);--ms-empty-padding: calc(1.6 * var(--ms-rem)) calc(1.2 * var(--ms-rem));--ms-empty-font-size: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-empty-color: var(--ms-text-color-3);--ms-loader-padding: calc(1.6 * var(--ms-rem));--ms-loader-gap: calc(.8 * var(--ms-rem));--ms-loading-text-font-size: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-loading-text-color: var(--ms-text-color-3);--ms-badges-gap: calc(.8 * var(--ms-rem));--ms-badges-margin-bottom: calc(.8 * var(--ms-rem));--ms-badges-margin-top: calc(.8 * var(--ms-rem));--ms-badges-margin-left: calc(.4 * var(--ms-rem));--ms-badges-margin-right: calc(.4 * var(--ms-rem));--ms-inline-align: center;--ms-badge-gap: calc(.8 * var(--ms-rem));--ms-badge-height: calc(2.7 * var(--ms-rem));--ms-badge-font-size: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-badge-font-weight: var(--base-font-weight-semibold, 600);--ms-badge-border-radius: var(--ms-border-radius-sm);--ms-badge-bg: var(--ms-accent-color-light);--ms-badge-bg-hover: var(--ms-badge-bg-hover);--ms-badge-bg-active: var(--ms-accent-color-light-hover);--ms-order-first: -1;--ms-badge-text-padding: 0 calc(.8 * var(--ms-rem));--ms-badge-text-bg: var(--ms-accent-color-light);--ms-badge-text-color: var(--ms-accent-color);--ms-badge-text-border: none;--ms-badge-remove-width: calc(2.7 * var(--ms-rem));--ms-badge-remove-bg: var(--ms-accent-color);--ms-badge-remove-color: var(--ms-text-color-on-accent);--ms-badge-remove-border: none;--ms-badge-remove-font-size: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-badge-remove-bg-hover: var(--ms-accent-color-hover);--ms-badge-remove-box-shadow-focus: 0 0 0 2px color-mix(in srgb, var(--ms-accent-color) 50%, transparent);--ms-icon-remove: "×";--ms-badge-counter-bg: transparent;--ms-badge-counter-border: var(--ms-border);--ms-badge-counter-border-radius: var(--ms-border-radius-sm);--ms-more-badge-bg: var(--ms-accent-color-light);--ms-more-badge-hover-bg: var(--ms-badge-bg-hover);--ms-more-badge-active-bg: var(--ms-accent-color-light-hover);--ms-count-display-margin-bottom: calc(.8 * var(--ms-rem));--ms-count-display-margin-top: calc(.8 * var(--ms-rem));--ms-count-display-margin-left: calc(.8 * var(--ms-rem));--ms-count-display-margin-right: calc(.8 * var(--ms-rem));--ms-counter-wrapper-bg: transparent;--ms-counter-wrapper-border: var(--ms-border);--ms-counter-wrapper-border-radius: var(--ms-border-radius-sm);--ms-counter-wrapper-padding: calc(.4 * var(--ms-rem)) calc(.8 * var(--ms-rem));--ms-counter-wrapper-gap: calc(.4 * var(--ms-rem));--ms-counter-wrapper-bg-hover: var(--ms-primary-bg);--ms-counter-wrapper-border-color-hover: var(--ms-accent-color);--ms-count-text-bg: transparent;--ms-count-text-border: none;--ms-count-text-font-size: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-count-text-color: var(--ms-text-color-1);--ms-count-clear-size: calc(1.6 * var(--ms-rem));--ms-count-clear-bg: transparent;--ms-count-clear-color: var(--ms-text-color-3);--ms-count-clear-font-size: calc(var(--base-font-size-lg, 1.8) * var(--ms-rem));--ms-count-clear-border-radius: 50%;--ms-count-clear-bg-hover: color-mix(in srgb, var(--ms-accent-color) 20%, transparent);--ms-count-clear-color-hover: var(--ms-accent-color);--ms-icon-clear: "×";--ms-tooltip-color: var(--ms-tooltip-text-color);--ms-tooltip-padding: calc(.8 * var(--ms-rem)) calc(1.2 * var(--ms-rem));--ms-tooltip-border-radius: var(--ms-border-radius-lg);--ms-tooltip-font-size: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-tooltip-max-width: calc(32 * var(--ms-rem));--ms-tooltip-shadow: 0 2px 8px rgba(0, 0, 0, .15);--ms-tooltip-z-index: 10000;--ms-z-index-popover: 10000;--ms-selected-popover-width: calc(32 * var(--ms-rem));--ms-selected-popover-max-height: calc(32 * var(--ms-rem));--ms-selected-popover-border: var(--ms-border);--ms-selected-popover-border-radius: var(--ms-border-radius-lg);--ms-selected-popover-box-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--ms-selected-popover-header-padding: calc(.8 * var(--ms-rem)) calc(1.2 * var(--ms-rem));--ms-selected-popover-header-bg: color-mix(in srgb, var(--ms-accent-color) 10%, transparent);--ms-selected-popover-header-border-bottom: var(--ms-border);--ms-selected-popover-header-font-size: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-selected-popover-header-font-weight: var(--base-font-weight-semibold, 600);--ms-selected-popover-header-color: var(--ms-text-color-1);--ms-popover-close-size: calc(2.4 * var(--ms-rem));--ms-selected-popover-close-bg: transparent;--ms-selected-popover-close-color: var(--ms-text-color-3);--ms-selected-popover-close-font-size: calc(var(--base-font-size-xl, 2) * var(--ms-rem));--ms-selected-popover-close-border-radius: 50%;--ms-selected-popover-close-bg-hover: color-mix(in srgb, var(--ms-accent-color) 20%, transparent);--ms-selected-popover-close-color-hover: var(--ms-accent-color);--ms-selected-popover-body-gap: calc(.4 * var(--ms-rem));--ms-selected-popover-body-padding: calc(.8 * var(--ms-rem));--ms-selected-popover-body-max-height: calc(28.8 * var(--ms-rem));--ms-font-size-2xs: calc(var(--base-font-size-2xs, 1) * var(--ms-rem));--ms-font-size-xs: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-font-size-sm: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-font-size-base: calc(var(--base-font-size-base, 1.6) * var(--ms-rem));--ms-font-size-lg: calc(var(--base-font-size-lg, 1.8) * var(--ms-rem));--ms-font-weight-normal: var(--base-font-weight-normal, 400);--ms-font-weight-medium: var(--base-font-weight-medium, 500);--ms-font-weight-semibold: var(--base-font-weight-semibold, 600);--ms-line-height-none: 1;--ms-line-height-tight: var(--base-line-height-tight, 1.25);--ms-line-height-normal: var(--base-line-height-normal, 1.5);--ms-line-height-relaxed: var(--base-line-height-relaxed, 1.75);--ms-border-radius-sm: calc(var(--base-border-radius-sm, .4) * var(--ms-rem));--ms-border-radius-md: calc(var(--base-border-radius-md, .6) * var(--ms-rem));--ms-border-radius-lg: calc(var(--base-border-radius-lg, .8) * var(--ms-rem));--ms-border-radius: var(--ms-border-radius-md);--ms-spacing-xs: calc(.4 * var(--ms-rem));--ms-spacing-sm: calc(.8 * var(--ms-rem));--ms-spacing-md: calc(1.2 * var(--ms-rem));--ms-spacing-lg: calc(1.6 * var(--ms-rem));--ms-transition-fast: .15s;--ms-transition-normal: .2s;--ms-easing-snappy: cubic-bezier(.4, 0, .2, 1);--ms-placeholder-opacity: .6;--ms-disabled-input-opacity: .6;--ms-scrollbar-width: 8px;--ms-scrollbar-track-bg: transparent;--ms-scrollbar-thumb-bg: var(--ms-border-color);--ms-scrollbar-thumb-bg-hover: var(--ms-text-color-3);--ms-scrollbar-thumb-border-radius: 4px}multi-select:not(:defined){display:block;min-height:calc(3.5 * var(--ms-rem));color:transparent!important;background:transparent}.ms-wrapper{display:flex;flex-direction:column;align-items:stretch}.ms-wrapper--inline{flex-direction:row;align-items:var(--ms-inline-align, center)}.ms{position:relative;width:100%}.ms__input-wrapper{position:relative;display:flex;align-items:center}.ms__input{box-sizing:border-box;width:100%;font-family:inherit;height:var(--ms-input-height);padding:var(--ms-input-padding);padding-right:var(--ms-input-padding-right);font-size:var(--ms-input-font-size);border:var(--ms-input-border);border-radius:var(--ms-input-border-radius);background:var(--ms-input-bg);color:var(--ms-input-color);cursor:pointer;transition:border var(--ms-transition-fast) var(--ms-easing-snappy)}.ms__input:hover:not(:focus):not(:disabled){border:var(--ms-input-border-hover)}.ms__input:focus{outline:none;border:var(--ms-input-border-focus)}.ms__input::placeholder{color:var(--ms-input-placeholder-color);opacity:0;transition:opacity var(--ms-transition-fast) var(--ms-easing-snappy)}:host([data-ready]) .ms__input::placeholder{opacity:var(--ms-placeholder-opacity)}.ms__input.ms__input--xs{font-size:var(--ms-input-size-xs-font);padding:var(--ms-input-size-xs-padding-v) var(--ms-input-size-xs-padding-h);padding-right:calc(var(--ms-input-size-xs-padding-h) * 2.5);height:var(--ms-input-size-xs-height)}.ms__input.ms__input--sm{font-size:var(--ms-input-size-sm-font);padding:var(--ms-input-size-sm-padding-v) var(--ms-input-size-sm-padding-h);padding-right:calc(var(--ms-input-size-sm-padding-h) * 2.5);height:var(--ms-input-size-sm-height)}.ms__input.ms__input--lg{font-size:var(--ms-input-size-lg-font);padding:var(--ms-input-size-lg-padding-v) var(--ms-input-size-lg-padding-h);padding-right:calc(var(--ms-input-size-lg-padding-h) * 2.5);height:var(--ms-input-size-lg-height)}.ms__input.ms__input--xl{font-size:var(--ms-input-size-xl-font);padding:var(--ms-input-size-xl-padding-v) var(--ms-input-size-xl-padding-h);padding-right:calc(var(--ms-input-size-xl-padding-h) * 2.5);height:var(--ms-input-size-xl-height)}.ms__toggle{position:absolute;right:var(--ms-toggle-right);top:50%;transform:var(--ms-transform-center-y);pointer-events:none;color:var(--ms-toggle-icon-color);transition:transform var(--ms-transition-fast) var(--ms-easing-snappy)}.ms--open .ms__toggle{transform:var(--ms-transform-center-y) rotate(var(--ms-transform-rotate-180));color:var(--ms-toggle-icon-color-open)}.ms__counter{position:absolute;right:var(--ms-counter-offset);top:50%;transform:var(--ms-transform-center-y);padding:var(--ms-counter-padding);background:var(--ms-counter-badge-bg);color:var(--ms-counter-badge-color);font-size:var(--ms-counter-font-size);font-weight:var(--ms-counter-font-weight);border-radius:var(--ms-counter-border-radius);cursor:pointer;transition:all var(--ms-transition-fast) var(--ms-easing-snappy)}.ms__counter:hover{background:var(--ms-counter-badge-bg-hover);transform:var(--ms-transform-center-y) scale(var(--ms-transform-scale-hover))}.ms__hint{display:none;position:absolute;z-index:var(--ms-z-index-popover);padding:var(--ms-hint-padding);background:var(--ms-hint-bg);border:var(--ms-hint-border);border-radius:var(--ms-hint-border-radius);box-shadow:var(--ms-hint-box-shadow);font-size:var(--ms-hint-font-size);color:var(--ms-hint-color);line-height:var(--ms-line-height-relaxed);max-width:100%}.ms__hint--visible{display:block}.ms__dropdown{display:none;position:absolute;font-family:inherit;z-index:var(--ms-z-index-dropdown);background:var(--ms-dropdown-bg);border:var(--ms-dropdown-border);border-radius:var(--ms-dropdown-border-radius);box-shadow:var(--ms-dropdown-box-shadow);max-height:var(--ms-options-max-height);overflow:hidden;color:var(--ms-dropdown-text-color)}.ms__dropdown--visible{display:flex;flex-direction:column}.ms__dropdown-inner{flex:1;overflow-y:auto;overscroll-behavior:contain;touch-action:pan-y;-webkit-overflow-scrolling:touch;scrollbar-width:thin;scrollbar-color:var(--ms-scrollbar-thumb-bg) var(--ms-scrollbar-track-bg)}.ms__dropdown-inner::-webkit-scrollbar{width:var(--ms-scrollbar-width)}.ms__dropdown-inner::-webkit-scrollbar-track{background:var(--ms-scrollbar-track-bg)}.ms__dropdown-inner::-webkit-scrollbar-thumb{background:var(--ms-scrollbar-thumb-bg);border-radius:var(--ms-scrollbar-thumb-border-radius)}.ms__dropdown-inner::-webkit-scrollbar-thumb:hover{background:var(--ms-scrollbar-thumb-bg-hover)}.ms__dropdown--virtual{max-height:none}.ms__dropdown--virtual .ms__dropdown-inner{overflow-y:visible}.ms__actions{display:flex;flex-wrap:nowrap;gap:var(--ms-actions-gap);padding:var(--ms-actions-padding);border-bottom:var(--ms-actions-border-bottom)}.ms__actions--wrap{flex-wrap:wrap}.ms__actions--sticky{position:sticky;top:0;z-index:var(--ms-z-index-sticky);background:var(--ms-actions-bg)}.ms__action-btn{flex:1;font-family:inherit;padding:var(--ms-action-btn-padding);font-size:var(--ms-action-btn-font-size);border:var(--ms-action-btn-border);border-radius:var(--ms-action-btn-border-radius);background:var(--ms-action-button-bg);color:var(--ms-action-button-color);cursor:pointer;transition:all var(--ms-transition-fast) var(--ms-easing-snappy)}.ms__action-btn:hover{background:var(--ms-action-button-bg-hover);border-color:var(--ms-action-button-border-color-hover)}.ms__action-btn:active{transform:scale(var(--ms-transform-scale-active))}.ms__action-btn:disabled,.ms__action-btn[disabled]{opacity:var(--ms-disabled-opacity);cursor:not-allowed;pointer-events:none}.ms__options{padding:var(--ms-options-padding);scrollbar-width:thin;scrollbar-color:var(--ms-scrollbar-thumb-bg) var(--ms-scrollbar-track-bg)}.ms__options::-webkit-scrollbar{width:var(--ms-scrollbar-width)}.ms__options::-webkit-scrollbar-track{background:var(--ms-scrollbar-track-bg)}.ms__options::-webkit-scrollbar-thumb{background:var(--ms-scrollbar-thumb-bg);border-radius:var(--ms-scrollbar-thumb-border-radius)}.ms__options::-webkit-scrollbar-thumb:hover{background:var(--ms-scrollbar-thumb-bg-hover)}.ms__options--virtual .ms__option{height:var(--ms-option-height, 50px);min-height:var(--ms-option-height, 50px);max-height:var(--ms-option-height, 50px);overflow:hidden;box-sizing:border-box}.ms__group+.ms__group{border-top:var(--ms-group-border-top);margin-top:var(--ms-group-margin-top);padding-top:var(--ms-group-padding-top)}.ms__group-label{padding:var(--ms-group-label-padding);font-size:var(--ms-group-label-font-size);font-weight:var(--ms-group-label-font-weight);color:var(--ms-group-label-color);text-transform:var(--ms-group-label-transform);letter-spacing:var(--ms-group-label-letter-spacing)}.ms__option{display:flex;align-items:var(--ms-checkbox-align, center);gap:var(--ms-option-gap);padding:var(--ms-option-padding);color:var(--ms-option-text-color);background:var(--ms-option-bg);cursor:pointer}.ms__option:hover{background:var(--ms-option-bg-hover);color:var(--ms-option-color-hover, inherit)}.ms__option--focused{background:var(--ms-option-bg-focused);color:var(--ms-option-color-focused, inherit);outline:var(--ms-option-outline-focused);outline-offset:var(--ms-option-focus-outline-offset)}.ms__option--matched{background:var(--ms-option-bg-matched);color:var(--ms-option-color-matched, inherit);border-left:var(--ms-option-border-matched)}.ms__option--selected{background:var(--ms-option-bg-selected)}.ms__option--selected:hover{background:var(--ms-option-bg-selected-hover, var(--ms-option-bg-selected))}.ms__option--disabled{opacity:var(--ms-disabled-opacity);cursor:not-allowed;background:var(--ms-option-disabled-bg)}.ms__option--disabled:hover{background:var(--ms-option-disabled-bg)}.ms__option--focused:hover{background:var(--ms-option-bg-focused-hover);color:var(--ms-option-color-focused-hover, var(--ms-option-color-focused, var(--ms-option-text-color)))}.ms__option--matched:hover{background:var(--ms-option-bg-matched-hover);color:var(--ms-option-color-matched-hover, var(--ms-option-color-matched, var(--ms-option-text-color)))}.ms__option--selected.ms__option--focused{background:var(--ms-option-bg-selected-focused);outline:var(--ms-option-outline-focused);outline-offset:var(--ms-option-focus-outline-offset)}.ms__option--selected.ms__option--matched{background:var(--ms-option-bg-selected-matched);border-left:var(--ms-option-border-matched)}.ms__option--disabled.ms__option--selected{background:var(--ms-option-bg-disabled-selected)}.ms__option--disabled.ms__option--focused{outline:none}.ms__option[data-checkbox-align=top]{--ms-checkbox-align: flex-start}.ms__option[data-checkbox-align=bottom]{--ms-checkbox-align: flex-end}.ms__checkbox{appearance:none;-webkit-appearance:none;-moz-appearance:none;flex-shrink:0;position:relative;margin-top:var(--ms-checkbox-margin-top);margin-right:var(--ms-checkbox-margin-right);margin-bottom:var(--ms-checkbox-margin-bottom);margin-left:var(--ms-checkbox-margin-left);width:var(--ms-checkbox-size);height:var(--ms-checkbox-size);transform:scale(var(--ms-checkbox-scale));transform-origin:top left;cursor:pointer;background:var(--ms-checkbox-bg);border:var(--ms-checkbox-border);border-radius:var(--ms-checkbox-border-radius);transition:background-color .15s ease,border-color .15s ease}.ms__checkbox:after{content:"";position:absolute;display:none;left:50%;top:40%;width:30%;height:55%;transform:translate(-50%,-50%) rotate(45deg);border:solid var(--ms-checkbox-checkmark-color);border-width:0 2px 2px 0}.ms__checkbox:hover:not(:disabled){border-color:var(--ms-checkbox-hover-border-color)}.ms__checkbox:checked{background:var(--ms-checkbox-checked-bg);border:var(--ms-checkbox-checked-border)}.ms__checkbox:checked:after{display:block}.ms__checkbox:checked:hover:not(:disabled){background:var(--ms-checkbox-checked-bg-hover);border-color:var(--ms-checkbox-checked-border-color-hover)}.ms__checkbox:focus-visible{outline:2px solid var(--ms-checkbox-checked-bg);outline-offset:2px}.ms__checkbox:disabled{cursor:not-allowed;background:var(--ms-checkbox-disabled-bg);border:var(--ms-checkbox-disabled-border);opacity:.6}.ms__checkbox:disabled:checked{background:var(--ms-checkbox-disabled-bg)}.ms__option--disabled .ms__checkbox{cursor:not-allowed}.ms__option-content{flex:1;display:flex;align-items:center;gap:var(--ms-option-content-gap);min-width:0}.ms__option-icon{flex-shrink:0;width:var(--ms-option-icon-size);height:var(--ms-option-icon-size);display:flex;align-items:center;justify-content:center;font-size:var(--ms-option-icon-font-size)}.ms__option-icon svg{width:100%;height:100%;fill:currentColor}.ms__option-text{flex:1;min-width:0}.ms__option-title{font-size:var(--ms-option-title-font-size);color:var(--ms-option-title-color);line-height:var(--ms-line-height-relaxed)}.ms__option:hover .ms__option-title{color:var(--ms-option-title-color-hover, var(--ms-option-title-color))}.ms__option--selected .ms__option-title{color:var(--ms-option-title-color-selected, var(--ms-option-title-color))}.ms__option--selected:hover .ms__option-title{color:var(--ms-option-title-color-selected-hover, var(--ms-option-title-color-selected, var(--ms-option-title-color)))}.ms__option-title mark{background:var(--ms-option-mark-bg);color:var(--ms-option-mark-color);font-weight:var(--ms-option-mark-font-weight)}.ms__option-subtitle{margin-top:var(--ms-option-subtitle-margin-top);font-size:var(--ms-option-subtitle-font-size);color:var(--ms-option-subtitle-color);line-height:var(--ms-option-subtitle-line-height)}.ms__option:hover .ms__option-subtitle{color:var(--ms-option-subtitle-color-hover, var(--ms-option-subtitle-color))}.ms__option--selected .ms__option-subtitle{color:var(--ms-option-subtitle-color-selected, var(--ms-option-subtitle-color))}.ms__option--selected:hover .ms__option-subtitle{color:var(--ms-option-subtitle-color-selected-hover, var(--ms-option-subtitle-color-selected, var(--ms-option-subtitle-color)))}.ms__empty{padding:var(--ms-empty-padding);text-align:center;font-size:var(--ms-empty-font-size);color:var(--ms-empty-color)}.ms__loader{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--ms-loader-padding);gap:var(--ms-loader-gap)}.ms__loading-text{font-size:var(--ms-loading-text-font-size);color:var(--ms-loading-color)}.ms__badges{display:flex;flex-wrap:wrap;gap:var(--ms-badges-gap);padding:0}.ms__badges:empty{display:none}.ms__badges--bottom{margin-top:var(--ms-badges-margin-bottom)}.ms__badges--top{margin-bottom:var(--ms-badges-margin-top);order:var(--ms-order-first)}.ms__badges--left{order:var(--ms-order-first);margin-right:var(--ms-badges-margin-left);justify-content:flex-end}.ms__badges--right{margin-left:var(--ms-badges-margin-right);justify-content:flex-start}.ms__count-display{display:flex;align-items:center}.ms__count-display:empty{display:none}.ms__count-display--bottom{margin-top:var(--ms-count-display-margin-bottom)}.ms__count-display--top{margin-bottom:var(--ms-count-display-margin-top);order:var(--ms-order-first)}.ms__count-display--left{order:var(--ms-order-first);margin-right:var(--ms-count-display-margin-left);justify-content:flex-start}.ms__count-display--right{margin-left:var(--ms-count-display-margin-right);justify-content:flex-end}.ms__counter-wrapper{display:inline-flex;align-items:center;gap:var(--ms-counter-wrapper-gap);background:var(--ms-counter-wrapper-bg);border:var(--ms-counter-wrapper-border);border-radius:var(--ms-counter-wrapper-border-radius);padding:var(--ms-counter-wrapper-padding);transition:all var(--ms-transition-fast) var(--ms-easing-snappy)}.ms__counter-wrapper:hover{background:var(--ms-counter-wrapper-bg-hover);border-color:var(--ms-counter-wrapper-border-color-hover)}.ms__count-text{display:inline-flex;align-items:center;background:var(--ms-count-text-bg);border:var(--ms-count-text-border);padding:0;font-size:var(--ms-count-text-font-size);color:var(--ms-count-text-color);cursor:pointer;transition:color var(--ms-transition-fast) var(--ms-easing-snappy)}.ms__count-clear{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:var(--ms-count-clear-size);height:var(--ms-count-clear-size);padding:0;border:none;background:var(--ms-count-clear-bg);color:var(--ms-count-clear-color);font-size:var(--ms-count-clear-font-size);line-height:var(--ms-line-height-none);cursor:pointer;border-radius:var(--ms-count-clear-border-radius);transition:all var(--ms-transition-fast) var(--ms-easing-snappy)}.ms__count-clear:hover{background:var(--ms-count-clear-bg-hover);color:var(--ms-count-clear-color-hover)}.ms__count-clear:before{content:var(--ms-icon-clear)}.ms__badge{display:inline-flex;align-items:center;height:var(--ms-badge-height);font-size:var(--ms-badge-font-size);font-weight:var(--ms-badge-font-weight);line-height:var(--ms-line-height-none);border-radius:var(--ms-badge-border-radius);overflow:hidden;max-width:100%}.ms__badge-text{display:flex;align-items:center;box-sizing:border-box;height:100%;padding:var(--ms-badge-text-padding);background:var(--ms-badge-text-bg);color:var(--ms-badge-text-color);border:var(--ms-badge-text-border);border-right:none;border-radius:var(--ms-badge-border-radius) 0 0 var(--ms-badge-border-radius);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transition:background-color var(--ms-transition-normal) ease,color var(--ms-transition-normal) ease}.ms__badge:hover .ms__badge-text{background:var(--ms-badge-text-bg-hover, var(--ms-badge-text-bg));color:var(--ms-badge-text-color-hover, var(--ms-badge-text-color))}.ms__badge-remove{display:flex;align-items:center;justify-content:center;box-sizing:border-box;font-family:inherit;width:var(--ms-badge-remove-width);height:100%;flex-shrink:0;background:var(--ms-badge-remove-bg);color:var(--ms-badge-remove-color);border:var(--ms-badge-remove-border);border-left:none;border-radius:0 var(--ms-badge-border-radius) var(--ms-badge-border-radius) 0;cursor:pointer;transition:background-color var(--ms-transition-normal) ease;font-size:var(--ms-badge-remove-font-size)}.ms__badge-remove:hover{background:var(--ms-badge-remove-bg-hover)}.ms__badge-remove:focus{outline:none;box-shadow:var(--ms-badge-remove-box-shadow-focus)}.ms__badge-remove:before{content:var(--ms-icon-remove);font-size:var(--ms-font-size-base);line-height:var(--ms-line-height-none)}.ms__badge--counter{cursor:pointer}.ms__badge--counter .ms__badge-text{background:var(--ms-badge-counter-text-bg);color:var(--ms-badge-counter-text-color);border:var(--ms-badge-counter-border);border-right:none}.ms__badge--counter .ms__badge-remove{background:var(--ms-badge-counter-remove-bg);color:var(--ms-badge-counter-remove-color);border:var(--ms-badge-counter-border);border-left:none}.ms__badge--counter .ms__badge-remove:hover{background:var(--ms-badge-counter-remove-bg-hover)}.ms__badge--more{cursor:pointer}.ms__badge-tooltip{position:fixed;z-index:var(--ms-tooltip-z-index);opacity:0;visibility:hidden;transition:opacity var(--ms-transition-normal) ease,visibility var(--ms-transition-normal) ease;background:var(--ms-tooltip-bg);color:var(--ms-tooltip-text-color);padding:var(--ms-tooltip-padding);border-radius:var(--ms-tooltip-border-radius);font-size:var(--ms-tooltip-font-size);line-height:var(--ms-line-height-relaxed);max-width:var(--ms-tooltip-max-width);word-wrap:break-word;white-space:pre-wrap;box-shadow:var(--ms-tooltip-shadow);pointer-events:none}.ms__badge-tooltip--visible{opacity:1;visibility:visible}.ms__selected-popover{display:none;position:absolute;z-index:var(--ms-z-index-popover);background:var(--ms-selected-popover-bg);border:var(--ms-selected-popover-border);border-radius:var(--ms-selected-popover-border-radius);box-shadow:var(--ms-selected-popover-box-shadow);width:var(--ms-selected-popover-width);max-height:var(--ms-selected-popover-max-height);overflow:hidden}.ms__selected-popover--visible{display:flex;flex-direction:column}.ms__selected-popover--virtual{display:block;overflow:visible;max-height:none}.ms__selected-popover-header{display:flex;align-items:center;justify-content:space-between;padding:var(--ms-selected-popover-header-padding);background:var(--ms-selected-popover-header-bg);border-bottom:var(--ms-selected-popover-header-border-bottom);font-size:var(--ms-selected-popover-header-font-size);font-weight:var(--ms-selected-popover-header-font-weight);color:var(--ms-selected-popover-header-color)}.ms__selected-popover-close{display:flex;align-items:center;justify-content:center;width:var(--ms-popover-close-size);height:var(--ms-popover-close-size);padding:0;border:none;background:var(--ms-selected-popover-close-bg);color:var(--ms-selected-popover-close-color);font-size:var(--ms-selected-popover-close-font-size);line-height:var(--ms-line-height-none);cursor:pointer;border-radius:var(--ms-selected-popover-close-border-radius);transition:all var(--ms-transition-fast) var(--ms-easing-snappy)}.ms__selected-popover-close:hover{background:var(--ms-selected-popover-close-bg-hover);color:var(--ms-selected-popover-close-color-hover)}.ms__selected-popover-body{display:flex;flex-direction:column;gap:var(--ms-selected-popover-body-gap);padding:var(--ms-selected-popover-body-padding);overflow-y:auto;max-height:var(--ms-selected-popover-body-max-height);scrollbar-width:thin;scrollbar-color:var(--ms-scrollbar-thumb-bg) var(--ms-scrollbar-track-bg)}.ms__selected-popover-body::-webkit-scrollbar{width:var(--ms-scrollbar-width)}.ms__selected-popover-body::-webkit-scrollbar-track{background:var(--ms-scrollbar-track-bg)}.ms__selected-popover-body::-webkit-scrollbar-thumb{background:var(--ms-scrollbar-thumb-bg);border-radius:var(--ms-scrollbar-thumb-border-radius)}.ms__selected-popover-body::-webkit-scrollbar-thumb:hover{background:var(--ms-scrollbar-thumb-bg-hover)}.ms__selected-popover-body .ms__badge{width:100%;min-height:fit-content;line-height:var(--ms-line-height-relaxed)}.ms__selected-popover-body .ms__badge-text{flex:1;min-width:0;white-space:normal;word-wrap:break-word}.ms__selected-popover-body--virtual{display:block;max-height:none;padding:0}.ms__selected-popover-body--virtual .ms__badge{height:var(--ms-badge-height-virtual, 36px);min-height:var(--ms-badge-height-virtual, 36px);max-height:var(--ms-badge-height-virtual, 36px);margin-bottom:var(--ms-selected-popover-body-gap);overflow:hidden;box-sizing:border-box}.ms__selected-popover-body--virtual .ms__badge-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ms--rtl .ms__input-wrapper{direction:rtl}.ms--rtl .ms__input{text-align:right;padding-left:var(--ms-input-padding-right);padding-right:var(--ms-input-padding-h)}.ms--rtl .ms__toggle{left:var(--ms-toggle-right)!important;right:auto!important}.ms--rtl .ms__counter{left:var(--ms-counter-offset)!important;right:auto!important}.ms--rtl .ms__dropdown{direction:rtl;text-align:right}.ms--rtl .ms__option{flex-direction:row-reverse}.ms--rtl .ms__checkbox{margin-left:var(--ms-spacing-sm);margin-right:0}.ms--rtl .ms__option-content{text-align:right}.ms--rtl .ms__option-icon{margin-left:var(--ms-spacing-xs);margin-right:0}.ms--rtl .ms__badges{direction:rtl}.ms--rtl .ms__badges--right{margin-left:0;margin-right:var(--ms-badges-margin-right)}.ms--rtl .ms__badges--left{margin-right:0;margin-left:var(--ms-badges-margin-left)}.ms--rtl .ms__badge{flex-direction:row-reverse}.ms--rtl .ms__badge-remove{border-radius:var(--ms-badge-border-radius) 0 0 var(--ms-badge-border-radius);border-left:var(--ms-badge-remove-border);border-right:none}.ms--rtl .ms__badge-text{border-radius:0 var(--ms-badge-border-radius) var(--ms-badge-border-radius) 0;border-right:var(--ms-badge-text-border);border-left:none}.ms--rtl .ms__count-display{direction:rtl}.ms--rtl .ms__count-display--right{margin-left:0;margin-right:var(--ms-count-display-margin-right)}.ms--rtl .ms__count-display--left{margin-right:0;margin-left:var(--ms-count-display-margin-left)}.ms--rtl .ms__counter-wrapper{flex-direction:row-reverse}.ms--rtl .ms__selected-popover{direction:rtl;text-align:right}.ms--rtl .ms__actions{direction:rtl}.ms--rtl .ms__group-label,.ms--rtl .ms__empty{text-align:right}.ms--rtl .ms__hint{direction:rtl;text-align:right}.ms--disabled .ms__input{opacity:var(--ms-disabled-input-opacity);cursor:not-allowed;background:var(--ms-input-bg-disabled)}.ms--disabled .ms__toggle{opacity:var(--ms-disabled-input-opacity)}.ms--no-checkboxes .ms__option{gap:0;padding-left:var(--ms-option-padding-h)}.ms--no-checkboxes .ms__option-content{padding-left:0}.ms-debug-info{margin-top:calc(.4 * var(--ms-rem));padding:calc(.4 * var(--ms-rem));background-color:#f9fafb;border:1px solid #e5e7eb;border-radius:calc(var(--base-border-radius-md, .6) * var(--ms-rem));font-size:calc(1.2 * var(--ms-rem));color:#111827}.ms-debug-info details summary{cursor:pointer;font-weight:600;color:#2563eb;-webkit-user-select:none;user-select:none;padding:calc(.4 * var(--ms-rem));border-radius:calc(var(--base-border-radius-sm, .4) * var(--ms-rem))}.ms-debug-info details summary:hover{background-color:#f3f4f6}.ms-debug-info details summary:focus{outline:2px solid #3b82f6;outline-offset:2px}.ms-debug-info .ms-debug-stats{display:flex;flex-direction:column;gap:calc(.4 * var(--ms-rem));margin-top:calc(.4 * var(--ms-rem));padding:calc(.4 * var(--ms-rem));background-color:#fff;border-radius:calc(var(--base-border-radius-sm, .4) * var(--ms-rem))}.ms-debug-info .ms-debug-stats span{display:flex;justify-content:space-between;padding:2px 4px;font-family:monospace;font-size:calc(1 * var(--ms-rem))}.ms-debug-info .ms-debug-stats span:before{content:"•";margin-right:calc(.4 * var(--ms-rem));color:#3b82f6}',us=typeof HTMLElement<"u"?HTMLElement:class{},Ae=new Set;function dt(){return Array.from(Ae)}class Ie extends us{constructor(){super();m(this,"picker");m(this,"containerElement");m(this,"shadow");m(this,"_options");m(this,"_valueMember");m(this,"_getValueCallback");m(this,"_displayValueMember");m(this,"_getDisplayValueCallback");m(this,"_getBadgeDisplayCallback");m(this,"_getBadgeClassCallback");m(this,"_customStylesCallback");m(this,"_searchValueMember");m(this,"_getSearchValueCallback");m(this,"_iconMember");m(this,"_getIconCallback");m(this,"_subtitleMember");m(this,"_getSubtitleCallback");m(this,"_groupMember");m(this,"_getGroupCallback");m(this,"_renderGroupLabelContentCallback");m(this,"_disabledMember");m(this,"_getDisabledCallback");m(this,"_getValueFormatCallback");m(this,"_getBadgeTooltipCallback");m(this,"_getRemoveButtonTooltipCallback");m(this,"_renderOptionContentCallback");m(this,"_renderBadgeContentCallback");m(this,"_renderSelectedItemContentCallback");m(this,"_getSelectedItemClassCallback");m(this,"_renderSelectedContentCallback");m(this,"_getCounterCallback");m(this,"_actionButtons");m(this,"_beforeSearchCallback");m(this,"_searchCallback");m(this,"_addNewCallback");m(this,"_selectCallback");m(this,"_deselectCallback");m(this,"_changeCallback");m(this,"_declarativeSelectedValues");this.shadow=this.attachShadow({mode:"open"});const t=document.createElement("style");t.textContent=ps,this.shadow.appendChild(t),requestAnimationFrame(()=>{this.setAttribute("data-ready","")})}static get observedAttributes(){return["search-hint","search-placeholder","multiple","allow-groups","show-checkboxes","sticky-actions","close-on-select","lock-placement","dropdown-min-width","dropdown-max-width","badges-display-mode","badges-threshold","badges-max-visible","badges-threshold-mode","badges-position","show-counter","keep-options-on-search","should-keep-search-on-close","max-height","empty-message","loading-message","min-search-length","enable-search","search-input-mode","search-mode","actions-layout","allow-add-new","initial-values","enable-virtual-scroll","virtual-scroll-threshold","option-height","badge-height","virtual-scroll-buffer","value-member","display-value-member","search-value-member","icon-member","subtitle-member","group-member","disabled-member","name","value-format","enable-badge-tooltips","badge-tooltip-placement","remove-button-tooltip-text","show-debug-info"]}connectedCallback(){Ae.add(this),this.render();const t=this.parseDeclarativeOptions();t&&(this._options&&this._options.length>0&&k.warn("[MultiSelectElement] Both declarative <option> elements and programmatic .options detected. Using declarative options."),this._options=t),this.initializePicker()}disconnectedCallback(){Ae.delete(this),this.picker&&this.picker.destroy()}attributeChangedCallback(t,s,i){s!==i&&this.picker&&t!=="initial-values"&&(this.picker.destroy(),this.initializePicker())}render(){this.containerElement=document.createElement("div"),this.containerElement.setAttribute("data-multiselect",""),this.className&&(this.containerElement.className=this.className),this.shadow.appendChild(this.containerElement),this.getAttribute("show-debug-info")==="true"&&this.renderDebugInfo()}renderDebugInfo(){const t=this.shadow.querySelector(".ms-debug-info");t&&t.remove();const s=document.createElement("div");s.className="ms-debug-info";const i=document.createElement("details"),r=document.createElement("summary");r.textContent="Debug Info";const n=document.createElement("div");n.className="ms-debug-stats",i.appendChild(r),i.appendChild(n),s.appendChild(i),this.shadow.appendChild(s),this.updateDebugInfo()}updateDebugInfo(){var h,g;const t=this.shadow.querySelector(".ms-debug-stats");if(!t||!this.picker)return;const s="1.8.6",i=dt().length,n=this.picker.getSelected().length,a=((h=this._options)==null?void 0:h.length)||0,l=this.picker,c=l.isOpen||!1,d=l.searchTerm||"",p=l.isLoading||!1,u=((g=l.filteredOptions)==null?void 0:g.length)||0;t.innerHTML=`
|
|
47
47
|
<span>Version: ${s}</span>
|
|
48
48
|
<span>Total Instances: ${i}</span>
|
|
49
49
|
<span>Options: ${a}</span>
|
|
@@ -52,4 +52,4 @@ ${d}`:c,v.debug(`[${this.instanceId}] Using default content: "${r}"`)}typeof r==
|
|
|
52
52
|
<span>Dropdown: ${c?"Open":"Closed"}</span>
|
|
53
53
|
<span>Search: ${d||"none"}</span>
|
|
54
54
|
<span>Loading: ${p?"Yes":"No"}</span>
|
|
55
|
-
`,setTimeout(()=>{this.getAttribute("show-debug-info")==="true"&&this.updateDebugInfo()},500)}parseDeclarativeOptions(){var r,n,a,l;const t=[],s=Array.from(this.children);if(s.length===0)return null;let i=!1;for(const c of s)if(c.tagName==="OPTION"){const d=c,p={value:d.value||((r=d.textContent)==null?void 0:r.trim())||"",label:((n=d.textContent)==null?void 0:n.trim())||d.value||""};d.hasAttribute("selected")&&(this._declarativeSelectedValues||(this._declarativeSelectedValues=[]),this._declarativeSelectedValues.push(p.value)),d.hasAttribute("disabled")&&(p.disabled=!0),d.hasAttribute("data-icon")&&(p.icon=d.getAttribute("data-icon")),d.hasAttribute("data-subtitle")&&(p.subtitle=d.getAttribute("data-subtitle")),t.push(p),i=!0}else if(c.tagName==="OPTGROUP"){const d=c,p=d.label||d.getAttribute("label")||"Group",u=Array.from(d.querySelectorAll("option"));for(const h of u){const g={value:h.value||((a=h.textContent)==null?void 0:a.trim())||"",label:((l=h.textContent)==null?void 0:l.trim())||h.value||"",group:p};h.hasAttribute("selected")&&(this._declarativeSelectedValues||(this._declarativeSelectedValues=[]),this._declarativeSelectedValues.push(g.value)),h.hasAttribute("disabled")&&(g.disabled=!0),h.hasAttribute("data-icon")&&(g.icon=h.getAttribute("data-icon")),h.hasAttribute("data-subtitle")&&(g.subtitle=h.getAttribute("data-subtitle")),t.push(g),i=!0}}return i?(k.debug(`[MultiSelectElement] Parsed ${t.length} declarative options from Light DOM`),s.forEach(c=>{(c.tagName==="OPTION"||c.tagName==="OPTGROUP")&&c.remove()}),t):null}initializePicker(){if(!this.containerElement)return;let t;if(this._declarativeSelectedValues&&this._declarativeSelectedValues.length>0)t=this._declarativeSelectedValues,k.debug(`[MultiSelectElement] Using ${t.length} declaratively selected values`);else{const i=this.getAttribute("initial-values");if(i)try{t=JSON.parse(i)}catch(r){k.error("[MultiSelectElement] Failed to parse initial-values:",r)}}const s={searchHint:this.getAttribute("search-hint")||void 0,searchPlaceholder:this.getAttribute("search-placeholder")||"Search...",dropdownMinWidth:this.getAttribute("dropdown-min-width")||void 0,dropdownMaxWidth:this.getAttribute("dropdown-max-width")||void 0,badgesDisplayMode:this.getAttribute("badges-display-mode")||"badges",badgesPosition:this.getAttribute("badges-position")||"bottom",badgesThresholdMode:this.getAttribute("badges-threshold-mode")||"count",maxHeight:this.getAttribute("max-height")||"20rem",emptyMessage:this.getAttribute("empty-message")||"No results found",loadingMessage:this.getAttribute("loading-message")||"Loading...",searchInputMode:this.getAttribute("search-input-mode")||"normal",searchMode:this.getAttribute("search-mode")||"filter",actionsLayout:this.getAttribute("actions-layout")||"nowrap",badgesThreshold:this.getAttribute("badges-threshold")?parseInt(this.getAttribute("badges-threshold")):void 0,badgesMaxVisible:this.getAttribute("badges-max-visible")?parseInt(this.getAttribute("badges-max-visible")):void 0,minSearchLength:this.getAttribute("min-search-length")?parseInt(this.getAttribute("min-search-length")):0,isMultipleEnabled:this.getAttribute("multiple")!=="false",isGroupsAllowed:this.getAttribute("allow-groups")!=="false",isCheckboxesShown:this.getAttribute("show-checkboxes")!=="false",isActionsSticky:this.getAttribute("sticky-actions")!=="false",isCloseOnSelect:this.getAttribute("close-on-select")==="true",isPlacementLocked:this.getAttribute("lock-placement")!=="false",isSearchEnabled:this.getAttribute("enable-search")!=="false",isAddNewAllowed:this.getAttribute("allow-add-new")==="true",isCounterShown:this.getAttribute("show-counter")==="true",isKeepOptionsOnSearch:this.getAttribute("keep-options-on-search")!=="false",shouldKeepSearchOnClose:this.getAttribute("should-keep-search-on-close")!=="false",isVirtualScrollEnabled:this.getAttribute("enable-virtual-scroll")==="true",actionButtons:this._actionButtons,checkboxAlign:this.getAttribute("checkbox-align")||"center",virtualScrollThreshold:this.getAttribute("virtual-scroll-threshold")?parseInt(this.getAttribute("virtual-scroll-threshold")):100,optionHeight:this.getAttribute("option-height")?parseInt(this.getAttribute("option-height")):50,badgeHeight:this.getAttribute("badge-height")?parseInt(this.getAttribute("badge-height")):36,virtualScrollBuffer:this.getAttribute("virtual-scroll-buffer")?parseInt(this.getAttribute("virtual-scroll-buffer")):10,valueMember:this.getAttribute("value-member")||this._valueMember,displayValueMember:this.getAttribute("display-value-member")||this._displayValueMember,searchValueMember:this.getAttribute("search-value-member")||this._searchValueMember,iconMember:this.getAttribute("icon-member")||this._iconMember,subtitleMember:this.getAttribute("subtitle-member")||this._subtitleMember,groupMember:this.getAttribute("group-member")||this._groupMember,disabledMember:this.getAttribute("disabled-member")||this._disabledMember,getValueCallback:this._getValueCallback,getDisplayValueCallback:this._getDisplayValueCallback,getBadgeDisplayCallback:this._getBadgeDisplayCallback,getBadgeClassCallback:this._getBadgeClassCallback,customStylesCallback:this._customStylesCallback,getSearchValueCallback:this._getSearchValueCallback,getIconCallback:this._getIconCallback,getSubtitleCallback:this._getSubtitleCallback,getGroupCallback:this._getGroupCallback,renderGroupLabelContentCallback:this._renderGroupLabelContentCallback,getDisabledCallback:this._getDisabledCallback,renderOptionContentCallback:this._renderOptionContentCallback,renderBadgeContentCallback:this._renderBadgeContentCallback,renderSelectedItemContentCallback:this._renderSelectedItemContentCallback,getSelectedItemClassCallback:this._getSelectedItemClassCallback,renderSelectedContentCallback:this._renderSelectedContentCallback,formFieldId:this.getAttribute("name")||void 0,valueFormat:this.getAttribute("value-format")||"json",getValueFormatCallback:this._getValueFormatCallback,isBadgeTooltipsEnabled:this.getAttribute("enable-badge-tooltips")==="true",getBadgeTooltipCallback:this._getBadgeTooltipCallback,getRemoveButtonTooltipCallback:this._getRemoveButtonTooltipCallback,removeButtonTooltipText:this.getAttribute("remove-button-tooltip-text")||void 0,badgeTooltipPlacement:this.getAttribute("badge-tooltip-placement")||"top",badgeTooltipDelay:parseInt(this.getAttribute("badge-tooltip-delay")||"100"),badgeTooltipOffset:parseInt(this.getAttribute("badge-tooltip-offset")||"8"),getCounterCallback:this._getCounterCallback||((i,r)=>r!==void 0?`+${r} more`:`${i} selected`),options:this._options,beforeSearchCallback:this._beforeSearchCallback,searchCallback:this._searchCallback,addNewCallback:this._addNewCallback,selectCallback:i=>{var r;this._selectCallback&&this._selectCallback(i),this.dispatchEvent(new CustomEvent("select",{detail:{option:i,selectedOptions:(r=this.picker)==null?void 0:r.getSelected(),selectedValues:(()=>{var a;const n=(a=this.picker)==null?void 0:a.getValue();return n==null?[]:Array.isArray(n)?n:[n]})()}}))},deselectCallback:i=>{var r;this._deselectCallback&&this._deselectCallback(i),this.dispatchEvent(new CustomEvent("deselect",{detail:{option:i,selectedOptions:(r=this.picker)==null?void 0:r.getSelected(),selectedValues:(()=>{var a;const n=(a=this.picker)==null?void 0:a.getValue();return n==null?[]:Array.isArray(n)?n:[n]})()}}))},changeCallback:i=>{this._changeCallback&&this._changeCallback(i),this.dispatchEvent(new CustomEvent("change",{detail:{selectedOptions:i,selectedValues:(()=>{var n;const r=(n=this.picker)==null?void 0:n.getValue();return r==null?[]:Array.isArray(r)?r:[r]})()}}))},container:this.shadow,hostElement:this};if(t&&(this.containerElement.dataset.initialValues=JSON.stringify(t)),this.picker=new ct(this.containerElement,s),this._customStylesCallback){const i=this._customStylesCallback();if(i){const r=document.createElement("style");r.className="ms-custom-styles",r.textContent=i,this.shadow.insertBefore(r,this.shadow.firstChild)}}}reinitialize(){this.picker&&(this.picker.destroy(),this.initializePicker())}get options(){return this._options}set options(t){this._options=t,this.reinitialize()}set valueMember(t){this._valueMember=t||void 0,t?this.setAttribute("value-member",t):this.removeAttribute("value-member")}get valueMember(){return this.getAttribute("value-member")}set displayValueMember(t){this._displayValueMember=t||void 0,t?this.setAttribute("display-value-member",t):this.removeAttribute("display-value-member")}get displayValueMember(){return this.getAttribute("display-value-member")}set searchValueMember(t){this._searchValueMember=t||void 0,t?this.setAttribute("search-value-member",t):this.removeAttribute("search-value-member")}get searchValueMember(){return this.getAttribute("search-value-member")}set iconMember(t){this._iconMember=t||void 0,t?this.setAttribute("icon-member",t):this.removeAttribute("icon-member")}get iconMember(){return this.getAttribute("icon-member")}set subtitleMember(t){this._subtitleMember=t||void 0,t?this.setAttribute("subtitle-member",t):this.removeAttribute("subtitle-member")}get subtitleMember(){return this.getAttribute("subtitle-member")}set groupMember(t){this._groupMember=t||void 0,t?this.setAttribute("group-member",t):this.removeAttribute("group-member")}get groupMember(){return this.getAttribute("group-member")}set disabledMember(t){this._disabledMember=t||void 0,t?this.setAttribute("disabled-member",t):this.removeAttribute("disabled-member")}get disabledMember(){return this.getAttribute("disabled-member")}set getValueCallback(t){this._getValueCallback=t,this.reinitialize()}get getValueCallback(){return this._getValueCallback}set getDisplayValueCallback(t){this._getDisplayValueCallback=t,this.reinitialize()}get getDisplayValueCallback(){return this._getDisplayValueCallback}set getBadgeDisplayCallback(t){this._getBadgeDisplayCallback=t,this.reinitialize()}get getBadgeDisplayCallback(){return this._getBadgeDisplayCallback}set getBadgeClassCallback(t){this._getBadgeClassCallback=t,this.reinitialize()}get getBadgeClassCallback(){return this._getBadgeClassCallback}set customStylesCallback(t){if(this._customStylesCallback=t,this.picker&&t){const s=t();if(s){const i=this.shadow.querySelector("style.ms-custom-styles");i&&i.remove();const r=document.createElement("style");r.className="ms-custom-styles",r.textContent=s,this.shadow.appendChild(r),this.picker.renderBadges()}}}get customStylesCallback(){return this._customStylesCallback}set getSearchValueCallback(t){this._getSearchValueCallback=t,this.reinitialize()}get getSearchValueCallback(){return this._getSearchValueCallback}set getIconCallback(t){this._getIconCallback=t,this.reinitialize()}get getIconCallback(){return this._getIconCallback}set getSubtitleCallback(t){this._getSubtitleCallback=t,this.reinitialize()}get getSubtitleCallback(){return this._getSubtitleCallback}set getGroupCallback(t){this._getGroupCallback=t,this.reinitialize()}get getGroupCallback(){return this._getGroupCallback}set renderGroupLabelContentCallback(t){this._renderGroupLabelContentCallback=t,this.reinitialize()}get renderGroupLabelContentCallback(){return this._renderGroupLabelContentCallback}set getDisabledCallback(t){this._getDisabledCallback=t,this.reinitialize()}get getDisabledCallback(){return this._getDisabledCallback}set renderOptionContentCallback(t){this._renderOptionContentCallback=t,this.reinitialize()}get renderOptionContentCallback(){return this._renderOptionContentCallback}set renderBadgeContentCallback(t){this._renderBadgeContentCallback=t,this.reinitialize()}get renderBadgeContentCallback(){return this._renderBadgeContentCallback}set renderSelectedItemContentCallback(t){this._renderSelectedItemContentCallback=t,this.reinitialize()}get renderSelectedItemContentCallback(){return this._renderSelectedItemContentCallback}set getSelectedItemClassCallback(t){this._getSelectedItemClassCallback=t,this.reinitialize()}get getSelectedItemClassCallback(){return this._getSelectedItemClassCallback}set renderSelectedContentCallback(t){this._renderSelectedContentCallback=t,this.reinitialize()}get renderSelectedContentCallback(){return this._renderSelectedContentCallback}set name(t){t?this.setAttribute("name",t):this.removeAttribute("name")}get name(){return this.getAttribute("name")}set valueFormat(t){t?this.setAttribute("value-format",t):this.removeAttribute("value-format")}get valueFormat(){return this.getAttribute("value-format")}set getValueFormatCallback(t){this._getValueFormatCallback=t,this.reinitialize()}get getValueFormatCallback(){return this._getValueFormatCallback}set thresholdMode(t){t?this.setAttribute("threshold-mode",t):this.removeAttribute("threshold-mode")}get thresholdMode(){return this.getAttribute("threshold-mode")}set badgesMaxVisible(t){t!==null?this.setAttribute("badges-max-visible",String(t)):this.removeAttribute("badges-max-visible")}get badgesMaxVisible(){const t=this.getAttribute("badges-max-visible");return t?parseInt(t):null}set checkboxAlign(t){t?this.setAttribute("checkbox-align",t):this.removeAttribute("checkbox-align")}get checkboxAlign(){return this.getAttribute("checkbox-align")}set enableBadgeTooltips(t){t?this.setAttribute("enable-badge-tooltips","true"):this.removeAttribute("enable-badge-tooltips")}get enableBadgeTooltips(){return this.getAttribute("enable-badge-tooltips")==="true"}set badgeTooltipPlacement(t){t?this.setAttribute("badge-tooltip-placement",t):this.removeAttribute("badge-tooltip-placement")}get badgeTooltipPlacement(){return this.getAttribute("badge-tooltip-placement")}set getBadgeTooltipCallback(t){this._getBadgeTooltipCallback=t,this.reinitialize()}get getBadgeTooltipCallback(){return this._getBadgeTooltipCallback}set getRemoveButtonTooltipCallback(t){this._getRemoveButtonTooltipCallback=t,this.reinitialize()}get getRemoveButtonTooltipCallback(){return this._getRemoveButtonTooltipCallback}set removeButtonTooltipText(t){t?this.setAttribute("remove-button-tooltip-text",t):this.removeAttribute("remove-button-tooltip-text")}get removeButtonTooltipText(){return this.getAttribute("remove-button-tooltip-text")}set getCounterCallback(t){this._getCounterCallback=t,this.reinitialize()}get getCounterCallback(){return this._getCounterCallback}get beforeSearchCallback(){return this._beforeSearchCallback}set beforeSearchCallback(t){this._beforeSearchCallback=t,this.reinitialize()}get searchCallback(){return this._searchCallback}set searchCallback(t){this._searchCallback=t,this.reinitialize()}get addNewCallback(){return this._addNewCallback}set addNewCallback(t){this._addNewCallback=t,this.reinitialize()}get selectCallback(){return this._selectCallback}set selectCallback(t){this._selectCallback=t}get deselectCallback(){return this._deselectCallback}set deselectCallback(t){this._deselectCallback=t}get changeCallback(){return this._changeCallback}set changeCallback(t){this._changeCallback=t}get actionButtons(){return this._actionButtons}set actionButtons(t){this._actionButtons=t,this.reinitialize()}get selectedValue(){var t;return((t=this.picker)==null?void 0:t.selectedValue)??null}get selectedItem(){var t;return((t=this.picker)==null?void 0:t.selectedItem)??null}getSelected(){return this.picker?this.picker.getSelected():[]}setSelected(t){this.picker&&this.picker.setSelected(t)}getValue(){return this.picker?this.picker.getValue():null}destroy(){this.picker&&this.picker.destroy()}}typeof window<"u"&&typeof customElements<"u"&&(customElements.get("web-multiselect")||customElements.define("web-multiselect",Ie)),typeof window<"u"&&(window.components=window.components||{},window.components["web-multiselect"]={version:()=>"1.8.5",config:{name:"@keenmate/web-multiselect",version:"1.8.5",author:"Keenmate",license:"MIT",repository:"git+https://github.com/keenmate/web-multiselect.git",homepage:"https://github.com/keenmate/web-multiselect#readme"},logging:{enableLogging:it,disableLogging:rt,setLogLevel:nt,setCategoryLevel:at,getCategories:()=>[...ot]},register:()=>{typeof customElements<"u"&&!customElements.get("web-multiselect")&&customElements.define("web-multiselect",Ie)},getInstances:()=>dt()}),C.LOGGING_CATEGORIES=ot,C.MultiSelectElement=Ie,C.WebMultiSelect=ct,C.dataLogger=k,C.disableLogging=rt,C.enableLogging=it,C.initLogger=re,C.interactionLogger=T,C.setCategoryLevel=at,C.setLogLevel=nt,C.uiLogger=v,Object.defineProperty(C,Symbol.toStringTag,{value:"Module"})});
|
|
55
|
+
`,setTimeout(()=>{this.getAttribute("show-debug-info")==="true"&&this.updateDebugInfo()},500)}parseDeclarativeOptions(){var r,n,a,l;const t=[],s=Array.from(this.children);if(s.length===0)return null;let i=!1;for(const c of s)if(c.tagName==="OPTION"){const d=c,p={value:d.value||((r=d.textContent)==null?void 0:r.trim())||"",label:((n=d.textContent)==null?void 0:n.trim())||d.value||""};d.hasAttribute("selected")&&(this._declarativeSelectedValues||(this._declarativeSelectedValues=[]),this._declarativeSelectedValues.push(p.value)),d.hasAttribute("disabled")&&(p.disabled=!0),d.hasAttribute("data-icon")&&(p.icon=d.getAttribute("data-icon")),d.hasAttribute("data-subtitle")&&(p.subtitle=d.getAttribute("data-subtitle")),t.push(p),i=!0}else if(c.tagName==="OPTGROUP"){const d=c,p=d.label||d.getAttribute("label")||"Group",u=Array.from(d.querySelectorAll("option"));for(const h of u){const g={value:h.value||((a=h.textContent)==null?void 0:a.trim())||"",label:((l=h.textContent)==null?void 0:l.trim())||h.value||"",group:p};h.hasAttribute("selected")&&(this._declarativeSelectedValues||(this._declarativeSelectedValues=[]),this._declarativeSelectedValues.push(g.value)),h.hasAttribute("disabled")&&(g.disabled=!0),h.hasAttribute("data-icon")&&(g.icon=h.getAttribute("data-icon")),h.hasAttribute("data-subtitle")&&(g.subtitle=h.getAttribute("data-subtitle")),t.push(g),i=!0}}return i?(k.debug(`[MultiSelectElement] Parsed ${t.length} declarative options from Light DOM`),s.forEach(c=>{(c.tagName==="OPTION"||c.tagName==="OPTGROUP")&&c.remove()}),t):null}initializePicker(){if(!this.containerElement)return;let t;if(this._declarativeSelectedValues&&this._declarativeSelectedValues.length>0)t=this._declarativeSelectedValues,k.debug(`[MultiSelectElement] Using ${t.length} declaratively selected values`);else{const i=this.getAttribute("initial-values");if(i)try{t=JSON.parse(i)}catch(r){k.error("[MultiSelectElement] Failed to parse initial-values:",r)}}const s={searchHint:this.getAttribute("search-hint")||void 0,searchPlaceholder:this.getAttribute("search-placeholder")||"Search...",dropdownMinWidth:this.getAttribute("dropdown-min-width")||void 0,dropdownMaxWidth:this.getAttribute("dropdown-max-width")||void 0,badgesDisplayMode:this.getAttribute("badges-display-mode")||"badges",badgesPosition:this.getAttribute("badges-position")||"bottom",badgesThresholdMode:this.getAttribute("badges-threshold-mode")||"count",maxHeight:this.getAttribute("max-height")||"20rem",emptyMessage:this.getAttribute("empty-message")||"No results found",loadingMessage:this.getAttribute("loading-message")||"Loading...",searchInputMode:this.getAttribute("search-input-mode")||"normal",searchMode:this.getAttribute("search-mode")||"filter",actionsLayout:this.getAttribute("actions-layout")||"nowrap",badgesThreshold:this.getAttribute("badges-threshold")?parseInt(this.getAttribute("badges-threshold")):void 0,badgesMaxVisible:this.getAttribute("badges-max-visible")?parseInt(this.getAttribute("badges-max-visible")):void 0,minSearchLength:this.getAttribute("min-search-length")?parseInt(this.getAttribute("min-search-length")):0,isMultipleEnabled:this.getAttribute("multiple")!=="false",isGroupsAllowed:this.getAttribute("allow-groups")!=="false",isCheckboxesShown:this.getAttribute("show-checkboxes")!=="false",isActionsSticky:this.getAttribute("sticky-actions")!=="false",isCloseOnSelect:this.getAttribute("close-on-select")==="true",isPlacementLocked:this.getAttribute("lock-placement")!=="false",isSearchEnabled:this.getAttribute("enable-search")!=="false",isAddNewAllowed:this.getAttribute("allow-add-new")==="true",isCounterShown:this.getAttribute("show-counter")==="true",isKeepOptionsOnSearch:this.getAttribute("keep-options-on-search")!=="false",shouldKeepSearchOnClose:this.getAttribute("should-keep-search-on-close")!=="false",isVirtualScrollEnabled:this.getAttribute("enable-virtual-scroll")==="true",actionButtons:this._actionButtons,checkboxAlign:this.getAttribute("checkbox-align")||"center",virtualScrollThreshold:this.getAttribute("virtual-scroll-threshold")?parseInt(this.getAttribute("virtual-scroll-threshold")):100,optionHeight:this.getAttribute("option-height")?parseInt(this.getAttribute("option-height")):50,badgeHeight:this.getAttribute("badge-height")?parseInt(this.getAttribute("badge-height")):36,virtualScrollBuffer:this.getAttribute("virtual-scroll-buffer")?parseInt(this.getAttribute("virtual-scroll-buffer")):10,valueMember:this.getAttribute("value-member")||this._valueMember,displayValueMember:this.getAttribute("display-value-member")||this._displayValueMember,searchValueMember:this.getAttribute("search-value-member")||this._searchValueMember,iconMember:this.getAttribute("icon-member")||this._iconMember,subtitleMember:this.getAttribute("subtitle-member")||this._subtitleMember,groupMember:this.getAttribute("group-member")||this._groupMember,disabledMember:this.getAttribute("disabled-member")||this._disabledMember,getValueCallback:this._getValueCallback,getDisplayValueCallback:this._getDisplayValueCallback,getBadgeDisplayCallback:this._getBadgeDisplayCallback,getBadgeClassCallback:this._getBadgeClassCallback,customStylesCallback:this._customStylesCallback,getSearchValueCallback:this._getSearchValueCallback,getIconCallback:this._getIconCallback,getSubtitleCallback:this._getSubtitleCallback,getGroupCallback:this._getGroupCallback,renderGroupLabelContentCallback:this._renderGroupLabelContentCallback,getDisabledCallback:this._getDisabledCallback,renderOptionContentCallback:this._renderOptionContentCallback,renderBadgeContentCallback:this._renderBadgeContentCallback,renderSelectedItemContentCallback:this._renderSelectedItemContentCallback,getSelectedItemClassCallback:this._getSelectedItemClassCallback,renderSelectedContentCallback:this._renderSelectedContentCallback,formFieldId:this.getAttribute("name")||void 0,valueFormat:this.getAttribute("value-format")||"json",getValueFormatCallback:this._getValueFormatCallback,isBadgeTooltipsEnabled:this.getAttribute("enable-badge-tooltips")==="true",getBadgeTooltipCallback:this._getBadgeTooltipCallback,getRemoveButtonTooltipCallback:this._getRemoveButtonTooltipCallback,removeButtonTooltipText:this.getAttribute("remove-button-tooltip-text")||void 0,badgeTooltipPlacement:this.getAttribute("badge-tooltip-placement")||"top",badgeTooltipDelay:parseInt(this.getAttribute("badge-tooltip-delay")||"100"),badgeTooltipOffset:parseInt(this.getAttribute("badge-tooltip-offset")||"8"),getCounterCallback:this._getCounterCallback||((i,r)=>r!==void 0?`+${r} more`:`${i} selected`),options:this._options,beforeSearchCallback:this._beforeSearchCallback,searchCallback:this._searchCallback,addNewCallback:this._addNewCallback,selectCallback:i=>{var r;this._selectCallback&&this._selectCallback(i),this.dispatchEvent(new CustomEvent("select",{detail:{option:i,selectedOptions:(r=this.picker)==null?void 0:r.getSelected(),selectedValues:(()=>{var a;const n=(a=this.picker)==null?void 0:a.getValue();return n==null?[]:Array.isArray(n)?n:[n]})()}}))},deselectCallback:i=>{var r;this._deselectCallback&&this._deselectCallback(i),this.dispatchEvent(new CustomEvent("deselect",{detail:{option:i,selectedOptions:(r=this.picker)==null?void 0:r.getSelected(),selectedValues:(()=>{var a;const n=(a=this.picker)==null?void 0:a.getValue();return n==null?[]:Array.isArray(n)?n:[n]})()}}))},changeCallback:i=>{this._changeCallback&&this._changeCallback(i),this.dispatchEvent(new CustomEvent("change",{detail:{selectedOptions:i,selectedValues:(()=>{var n;const r=(n=this.picker)==null?void 0:n.getValue();return r==null?[]:Array.isArray(r)?r:[r]})()}}))},container:this.shadow,hostElement:this};if(t&&(this.containerElement.dataset.initialValues=JSON.stringify(t)),this.picker=new ct(this.containerElement,s),this._customStylesCallback){const i=this._customStylesCallback();if(i){const r=document.createElement("style");r.className="ms-custom-styles",r.textContent=i,this.shadow.insertBefore(r,this.shadow.firstChild)}}}reinitialize(){this.picker&&(this.picker.destroy(),this.initializePicker())}get options(){return this._options}set options(t){this._options=t,this.reinitialize()}set valueMember(t){this._valueMember=t||void 0,t?this.setAttribute("value-member",t):this.removeAttribute("value-member")}get valueMember(){return this.getAttribute("value-member")}set displayValueMember(t){this._displayValueMember=t||void 0,t?this.setAttribute("display-value-member",t):this.removeAttribute("display-value-member")}get displayValueMember(){return this.getAttribute("display-value-member")}set searchValueMember(t){this._searchValueMember=t||void 0,t?this.setAttribute("search-value-member",t):this.removeAttribute("search-value-member")}get searchValueMember(){return this.getAttribute("search-value-member")}set iconMember(t){this._iconMember=t||void 0,t?this.setAttribute("icon-member",t):this.removeAttribute("icon-member")}get iconMember(){return this.getAttribute("icon-member")}set subtitleMember(t){this._subtitleMember=t||void 0,t?this.setAttribute("subtitle-member",t):this.removeAttribute("subtitle-member")}get subtitleMember(){return this.getAttribute("subtitle-member")}set groupMember(t){this._groupMember=t||void 0,t?this.setAttribute("group-member",t):this.removeAttribute("group-member")}get groupMember(){return this.getAttribute("group-member")}set disabledMember(t){this._disabledMember=t||void 0,t?this.setAttribute("disabled-member",t):this.removeAttribute("disabled-member")}get disabledMember(){return this.getAttribute("disabled-member")}set getValueCallback(t){this._getValueCallback=t,this.reinitialize()}get getValueCallback(){return this._getValueCallback}set getDisplayValueCallback(t){this._getDisplayValueCallback=t,this.reinitialize()}get getDisplayValueCallback(){return this._getDisplayValueCallback}set getBadgeDisplayCallback(t){this._getBadgeDisplayCallback=t,this.reinitialize()}get getBadgeDisplayCallback(){return this._getBadgeDisplayCallback}set getBadgeClassCallback(t){this._getBadgeClassCallback=t,this.reinitialize()}get getBadgeClassCallback(){return this._getBadgeClassCallback}set customStylesCallback(t){if(this._customStylesCallback=t,this.picker&&t){const s=t();if(s){const i=this.shadow.querySelector("style.ms-custom-styles");i&&i.remove();const r=document.createElement("style");r.className="ms-custom-styles",r.textContent=s,this.shadow.appendChild(r),this.picker.renderBadges()}}}get customStylesCallback(){return this._customStylesCallback}set getSearchValueCallback(t){this._getSearchValueCallback=t,this.reinitialize()}get getSearchValueCallback(){return this._getSearchValueCallback}set getIconCallback(t){this._getIconCallback=t,this.reinitialize()}get getIconCallback(){return this._getIconCallback}set getSubtitleCallback(t){this._getSubtitleCallback=t,this.reinitialize()}get getSubtitleCallback(){return this._getSubtitleCallback}set getGroupCallback(t){this._getGroupCallback=t,this.reinitialize()}get getGroupCallback(){return this._getGroupCallback}set renderGroupLabelContentCallback(t){this._renderGroupLabelContentCallback=t,this.reinitialize()}get renderGroupLabelContentCallback(){return this._renderGroupLabelContentCallback}set getDisabledCallback(t){this._getDisabledCallback=t,this.reinitialize()}get getDisabledCallback(){return this._getDisabledCallback}set renderOptionContentCallback(t){this._renderOptionContentCallback=t,this.reinitialize()}get renderOptionContentCallback(){return this._renderOptionContentCallback}set renderBadgeContentCallback(t){this._renderBadgeContentCallback=t,this.reinitialize()}get renderBadgeContentCallback(){return this._renderBadgeContentCallback}set renderSelectedItemContentCallback(t){this._renderSelectedItemContentCallback=t,this.reinitialize()}get renderSelectedItemContentCallback(){return this._renderSelectedItemContentCallback}set getSelectedItemClassCallback(t){this._getSelectedItemClassCallback=t,this.reinitialize()}get getSelectedItemClassCallback(){return this._getSelectedItemClassCallback}set renderSelectedContentCallback(t){this._renderSelectedContentCallback=t,this.reinitialize()}get renderSelectedContentCallback(){return this._renderSelectedContentCallback}set name(t){t?this.setAttribute("name",t):this.removeAttribute("name")}get name(){return this.getAttribute("name")}set valueFormat(t){t?this.setAttribute("value-format",t):this.removeAttribute("value-format")}get valueFormat(){return this.getAttribute("value-format")}set getValueFormatCallback(t){this._getValueFormatCallback=t,this.reinitialize()}get getValueFormatCallback(){return this._getValueFormatCallback}set thresholdMode(t){t?this.setAttribute("threshold-mode",t):this.removeAttribute("threshold-mode")}get thresholdMode(){return this.getAttribute("threshold-mode")}set badgesMaxVisible(t){t!==null?this.setAttribute("badges-max-visible",String(t)):this.removeAttribute("badges-max-visible")}get badgesMaxVisible(){const t=this.getAttribute("badges-max-visible");return t?parseInt(t):null}set checkboxAlign(t){t?this.setAttribute("checkbox-align",t):this.removeAttribute("checkbox-align")}get checkboxAlign(){return this.getAttribute("checkbox-align")}set enableBadgeTooltips(t){t?this.setAttribute("enable-badge-tooltips","true"):this.removeAttribute("enable-badge-tooltips")}get enableBadgeTooltips(){return this.getAttribute("enable-badge-tooltips")==="true"}set badgeTooltipPlacement(t){t?this.setAttribute("badge-tooltip-placement",t):this.removeAttribute("badge-tooltip-placement")}get badgeTooltipPlacement(){return this.getAttribute("badge-tooltip-placement")}set getBadgeTooltipCallback(t){this._getBadgeTooltipCallback=t,this.reinitialize()}get getBadgeTooltipCallback(){return this._getBadgeTooltipCallback}set getRemoveButtonTooltipCallback(t){this._getRemoveButtonTooltipCallback=t,this.reinitialize()}get getRemoveButtonTooltipCallback(){return this._getRemoveButtonTooltipCallback}set removeButtonTooltipText(t){t?this.setAttribute("remove-button-tooltip-text",t):this.removeAttribute("remove-button-tooltip-text")}get removeButtonTooltipText(){return this.getAttribute("remove-button-tooltip-text")}set getCounterCallback(t){this._getCounterCallback=t,this.reinitialize()}get getCounterCallback(){return this._getCounterCallback}get beforeSearchCallback(){return this._beforeSearchCallback}set beforeSearchCallback(t){this._beforeSearchCallback=t,this.reinitialize()}get searchCallback(){return this._searchCallback}set searchCallback(t){this._searchCallback=t,this.reinitialize()}get addNewCallback(){return this._addNewCallback}set addNewCallback(t){this._addNewCallback=t,this.reinitialize()}get selectCallback(){return this._selectCallback}set selectCallback(t){this._selectCallback=t}get deselectCallback(){return this._deselectCallback}set deselectCallback(t){this._deselectCallback=t}get changeCallback(){return this._changeCallback}set changeCallback(t){this._changeCallback=t}get actionButtons(){return this._actionButtons}set actionButtons(t){this._actionButtons=t,this.reinitialize()}get selectedValue(){var t;return((t=this.picker)==null?void 0:t.selectedValue)??null}get selectedItem(){var t;return((t=this.picker)==null?void 0:t.selectedItem)??null}getSelected(){return this.picker?this.picker.getSelected():[]}setSelected(t){this.picker&&this.picker.setSelected(t)}getValue(){return this.picker?this.picker.getValue():null}destroy(){this.picker&&this.picker.destroy()}}typeof window<"u"&&typeof customElements<"u"&&(customElements.get("web-multiselect")||customElements.define("web-multiselect",Ie)),typeof window<"u"&&(window.components=window.components||{},window.components["web-multiselect"]={version:()=>"1.8.6",config:{name:"@keenmate/web-multiselect",version:"1.8.6",author:"Keenmate",license:"MIT",repository:"git+https://github.com/keenmate/web-multiselect.git",homepage:"https://github.com/keenmate/web-multiselect#readme"},logging:{enableLogging:it,disableLogging:rt,setLogLevel:nt,setCategoryLevel:at,getCategories:()=>[...ot]},register:()=>{typeof customElements<"u"&&!customElements.get("web-multiselect")&&customElements.define("web-multiselect",Ie)},getInstances:()=>dt()}),C.LOGGING_CATEGORIES=ot,C.MultiSelectElement=Ie,C.WebMultiSelect=ct,C.dataLogger=k,C.disableLogging=rt,C.enableLogging=it,C.initLogger=re,C.interactionLogger=T,C.setCategoryLevel=at,C.setLogLevel=nt,C.uiLogger=v,Object.defineProperty(C,Symbol.toStringTag,{value:"Module"})});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@keenmate/web-multiselect",
|
|
3
|
-
"version": "1.8.
|
|
3
|
+
"version": "1.8.6",
|
|
4
4
|
"description": "Lightweight multiselect web component with typeahead search, rich content support, and excellent keyboard navigation",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/multiselect.umd.js",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
],
|
|
34
34
|
"scripts": {
|
|
35
35
|
"dev": "vite --port 12200",
|
|
36
|
-
"build": "npm run clean:dist &&
|
|
36
|
+
"build": "npm run clean:dist && vite build",
|
|
37
37
|
"build:types": "tsc",
|
|
38
38
|
"build:full": "npm run build",
|
|
39
39
|
"preview": "vite preview",
|
|
@@ -67,7 +67,8 @@
|
|
|
67
67
|
"devDependencies": {
|
|
68
68
|
"rimraf": "^5.0.5",
|
|
69
69
|
"typescript": "^5.3.3",
|
|
70
|
-
"vite": "^5.0.8"
|
|
70
|
+
"vite": "^5.0.8",
|
|
71
|
+
"vite-plugin-dts": "^4.5.4"
|
|
71
72
|
},
|
|
72
73
|
"dependencies": {
|
|
73
74
|
"@floating-ui/dom": "^1.5.3"
|