@sky.ui/core 0.0.23 → 0.0.25
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/custom-elements.json +1299 -1299
- package/dist/helper/controllers/animation-controller.js.map +1 -1
- package/dist/helper/controllers/index.js +2 -0
- package/dist/helper/controllers/index.js.map +1 -0
- package/dist/helper/controllers/popover-controller.js +1 -1
- package/dist/helper/controllers/popover-controller.js.map +1 -1
- package/dist/helper/form-control-base.js +2 -0
- package/dist/helper/form-control-base.js.map +1 -0
- package/dist/helper/iconify-offline.js.map +1 -1
- package/dist/helper/index.js +2 -0
- package/dist/helper/index.js.map +1 -0
- package/dist/helper/internals/form-control-base.js +1 -1
- package/dist/helper/internals/form-control-base.js.map +1 -1
- package/dist/helper/internals/index.js +2 -0
- package/dist/helper/internals/index.js.map +1 -0
- package/dist/helper/utils/color-resolver.js.map +1 -1
- package/dist/helper/utils/index.js +2 -0
- package/dist/helper/utils/index.js.map +1 -0
- package/dist/helper/utils/size-resolver.js.map +1 -1
- package/dist/sky-alert/index.js.map +1 -0
- package/dist/sky-alert/sky-alert.js +45 -45
- package/dist/sky-alert/sky-alert.js.map +1 -1
- package/dist/sky-appbar/index.js.map +1 -0
- package/dist/sky-appbar/sky-appbar.js +30 -30
- package/dist/sky-appbar/sky-appbar.js.map +1 -1
- package/dist/sky-avatar/index.js.map +1 -0
- package/dist/sky-avatar/sky-avatar.js +25 -25
- package/dist/sky-avatar/sky-avatar.js.map +1 -1
- package/dist/sky-badge/index.js.map +1 -0
- package/dist/sky-badge/sky-badge.d.ts +1 -1
- package/dist/sky-badge/sky-badge.js +27 -27
- package/dist/sky-badge/sky-badge.js.map +1 -1
- package/dist/sky-button/index.js.map +1 -0
- package/dist/sky-button/sky-button.js +25 -25
- package/dist/sky-button/sky-button.js.map +1 -1
- package/dist/sky-card/index.js.map +1 -0
- package/dist/sky-card/sky-card.js +22 -22
- package/dist/sky-card/sky-card.js.map +1 -1
- package/dist/sky-checkbox/index.js.map +1 -0
- package/dist/sky-checkbox/sky-checkbox.d.ts +2 -2
- package/dist/sky-checkbox/sky-checkbox.js +43 -43
- package/dist/sky-checkbox/sky-checkbox.js.map +1 -1
- package/dist/sky-chip/index.js.map +1 -0
- package/dist/sky-chip/sky-chip.js +35 -35
- package/dist/sky-chip/sky-chip.js.map +1 -1
- package/dist/sky-col/index.js.map +1 -0
- package/dist/sky-col/sky-col.js +7 -7
- package/dist/sky-col/sky-col.js.map +1 -1
- package/dist/sky-combobox/index.js.map +1 -0
- package/dist/sky-combobox/sky-combobox.d.ts +2 -2
- package/dist/sky-combobox/sky-combobox.js +244 -244
- package/dist/sky-combobox/sky-combobox.js.map +1 -1
- package/dist/sky-dialog/index.js.map +1 -0
- package/dist/sky-dialog/sky-dialog.js +43 -43
- package/dist/sky-dialog/sky-dialog.js.map +1 -1
- package/dist/sky-divider/index.js.map +1 -0
- package/dist/sky-divider/sky-divider.js +16 -16
- package/dist/sky-divider/sky-divider.js.map +1 -1
- package/dist/sky-flexbox/index.js.map +1 -0
- package/dist/sky-flexbox/sky-flexbox.js +9 -9
- package/dist/sky-flexbox/sky-flexbox.js.map +1 -1
- package/dist/sky-flexcol/index.js.map +1 -0
- package/dist/sky-flexcol/sky-flexcol.js +2 -2
- package/dist/sky-flexcol/sky-flexcol.js.map +1 -1
- package/dist/sky-form/index.js.map +1 -0
- package/dist/sky-form/sky-form.js +12 -12
- package/dist/sky-form/sky-form.js.map +1 -1
- package/dist/sky-grid/index.js.map +1 -0
- package/dist/sky-grid/sky-grid.js +6 -6
- package/dist/sky-grid/sky-grid.js.map +1 -1
- package/dist/sky-icon/index.js.map +1 -0
- package/dist/sky-icon/sky-icon.js +13 -13
- package/dist/sky-icon/sky-icon.js.map +1 -1
- package/dist/sky-image/index.js.map +1 -0
- package/dist/sky-image/sky-image.js +21 -21
- package/dist/sky-image/sky-image.js.map +1 -1
- package/dist/sky-image/srcset-utils.js.map +1 -1
- package/dist/sky-input/index.js.map +1 -0
- package/dist/sky-input/sky-input.d.ts +2 -2
- package/dist/sky-input/sky-input.js +225 -225
- package/dist/sky-input/sky-input.js.map +1 -1
- package/dist/sky-list/index.js.map +1 -0
- package/dist/sky-list/sky-list.js +6 -6
- package/dist/sky-list/sky-list.js.map +1 -1
- package/dist/sky-listitem/index.js.map +1 -0
- package/dist/sky-listitem/sky-listitem.js +31 -31
- package/dist/sky-listitem/sky-listitem.js.map +1 -1
- package/dist/sky-radio/index.js.map +1 -0
- package/dist/sky-radio/sky-radio.d.ts +2 -2
- package/dist/sky-radio/sky-radio.js +27 -27
- package/dist/sky-radio/sky-radio.js.map +1 -1
- package/dist/sky-row/index.js.map +1 -0
- package/dist/sky-row/sky-row.js +2 -2
- package/dist/sky-row/sky-row.js.map +1 -1
- package/dist/sky-sheet/index.js.map +1 -0
- package/dist/sky-sheet/sky-sheet.js +2 -2
- package/dist/sky-sheet/sky-sheet.js.map +1 -1
- package/dist/sky-simple-table/index.js.map +1 -0
- package/dist/sky-simple-table/sky-simple-table.js +34 -34
- package/dist/sky-simple-table/sky-simple-table.js.map +1 -1
- package/dist/sky-theme-provider/index.js.map +1 -0
- package/dist/sky-theme-provider/sky-theme-provider.js +2 -2
- package/dist/sky-theme-provider/sky-theme-provider.js.map +1 -1
- package/package.json +2 -2
- package/plugins/rollup-plugin.d.ts +5 -8
- package/plugins/vite-plugin.d.ts +5 -8
- package/plugins/webpack-plugin.d.ts +3 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sky-combobox.js","sources":["../../src/sky-combobox/sky-combobox.ts"],"sourcesContent":[null],"names":["SkyCombobox","FormControlBase","this","dependencies","SkyIcon","SkyCheckbox","options","_options","value","old","Array","isArray","requestUpdate","validations","_validations","_SEARCH_DEBOUNCE_MS","_SEARCH_DEBOUNCE_OPTIONS_THRESHOLD","styles","css","constructor","super","placeholder","searchPlaceholder","label","chipSize","color","clearable","loading","compact","disabled","searchable","multiSelect","visibleChips","selectAll","showErrors","errorDisplayMode","required","emitFullObject","emittedKey","displayKey","addOption","validationArrayFormat","prefix","suffix","prefixColor","suffixColor","justify","zIndex","height","requiredMessage","readonly","enforceMinOneSelection","openAbove","validationActive","invalid","variant","searchQuery","filteredOptions","focused","open","selectedItems","hiddenChipsOpen","activeIndex","validationErrors","validationStatus","hasLeftIcon","hasRightIcon","optionSlotSet","Set","_searchDebounceId","dropdownPopover","PopoverController","getAnchor","inputWrapperEl","getPopover","dropdownEl","cssVarLeft","cssVarTop","cssVarWidth","getPlacement","getAlign","getGap","getPadding","getMatchAnchorWidth","getMaxWidthToViewport","getMaxWidthMode","getFlip","getFlipOrder","getAnimateReposition","getRepositionMs","getCloseOnEscape","getCloseOnOutside","getRestoreFocusOnClose","onOpenChange","meta","filterOptions","requestAnimationFrame","focusOnOpen","emitSearchQueryChanged","hiddenPopover","closePopover","overflowChipEl","hiddenDropdownEl","refreshOptionSlots","set","querySelectorAll","forEach","el","slotName","slot","add","onSearchKeydown","e","key","shiftKey","preventDefault","stopPropagation","commitDropdownEnter","hasSearchRow","minIndex","headerRows","maxIndex","Math","max","length","dir","scrollActiveItemIntoView","handleAddaddOption","canAddaddOption","trim","dispatchEvent","CustomEvent","detail","bubbles","composed","onIconSlotChange","iconLeftEls","iconRightEls","captureDefaultValue","shadowRootOptions","LitElement","delegatesFocus","connectedCallback","hasAttribute","tabIndex","firstUpdated","refreshTargets","getFormValue","name","formData","FormData","item","JSON","stringify","String","getOptionValue","append","setValueFromFormState","state","values","getAll","parsed","parse","setValueFromArray","stringValue","get","toString","syncSelectedItemsWithValue","syncFormValue","internals","setFormValue","v","optionsArray","filter","option","optionValue","optionValueString","some","parsedValue","map","getValidityAnchor","isEmpty","getNativeControl","getCustomErrorMessage","onFormReset","onFormDisabled","onFormStateRestore","toggleSelectAll","keyOf","o","isAllFilteredSelected","filteredKeys","opt","original","nextSelected","has","selectedKeys","additions","valuesArray","emittedValues","isFilteredSelection","syncValidity","every","truncateText","text","maxLength","slice","validateInput","target","push","res","errors","validateForForm","focus","searchInputEl","blur","handleFocus","reset","openDropdown","openPopover","closeDropdown","clearSelection","handleClear","handleBlur","updated","changedProperties","style","setProperty","resolveColor","willUpdate","isEmptyMulti","_","getValueForComparison","val","raw","providedKeys","optValue","targetValue","selectedOption","find","makeRow","idx","getOptionLabel","_idx","highlighted","query","toLowerCase","row","includes","regex","RegExp","replace","m","handleInput","event","optionsLength","shouldDebounce","SkyCombobox_1","applyFilter","clearTimeout","setTimeout","disconnectedCallback","hasSelection","selectOption","getEmittedValue","wasFiltered","alreadySelected","index","findIndex","toggleHiddenChips","toggle","renderHiddenChipsDropdown","html","onToggle","repeat","removeChip","next","renderChips","visible","overflow","when","handleKeydown","closest","was","n","getOptionByActiveIndex","kind","selectAllBase","optionIndex","search","document","activeElement","optionIdx","firstSelVal","idxInFiltered","q","active","from","rowEls","r","Number","dataset","rowIndex","scrollIntoView","block","behavior","toggleDropdown","renderDropdown","selectAllRowIndex","selectAllClasses","classMap","selected","hasSlot","isSelected","isActive","itemClasses","unsafeHTML","stringValues","Object","renderValidationErrors","msgs","getErrorMessages","errId","id","errs","handleIconClick","position","render","leftIconClasses","left","rightIconClasses","right","placeholderClasses","__decorate","property","prototype","type","Boolean","reflect","attribute","HTMLElement","HTMLInputElement","queryAll","queryAssignedElements","customElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sky-combobox.js","sources":["../../src/sky-combobox/sky-combobox.ts"],"sourcesContent":["import { LitElement, html, css, nothing, PropertyValues } from \"lit\";\nimport { property, customElement, query, queryAll, queryAssignedElements, state } from \"lit/decorators.js\";\nimport { unsafeHTML } from \"lit/directives/unsafe-html.js\";\nimport { when } from \"lit/directives/when.js\";\nimport { repeat } from \"lit/directives/repeat.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { resolveColor } from \"../helper/utils/color-resolver\";\nimport { PopoverController } from \"../helper/controllers/popover-controller\";\nimport {\n FormControlBase,\n FormState,\n} from \"../helper/internals/form-control-base\";\nimport { SkyIcon } from \"../sky-icon/sky-icon.js\";\nimport { SkyCheckbox } from \"../sky-checkbox/sky-checkbox.js\";\n\nexport type SkyComboboxJustify =\n | \"flex-start\"\n | \"center\"\n | \"flex-end\"\n | \"space-between\"\n | \"space-around\"\n | \"space-evenly\";\nexport type SkyComboboxErrorDisplayMode = \"single\" | \"all\" | \"none\";\nexport type SkyComboboxIconPosition = \"left\" | \"right\";\nexport type SkyComboboxValueChangedDetail = {\n value: any | any[];\n selectedItems: any[];\n emittedValues?: any | any[];\n isFilteredSelection?: boolean;\n};\nexport type SkyComboboxSearchQueryChangedDetail = { searchQuery: string };\nexport type SkyComboboxValidationErrorDetail = { errors: string[] };\nexport type SkyComboboxValidationSuccessDetail = { value: any };\nexport type SkyComboboxIconClickDetail = {\n position: SkyComboboxIconPosition;\n event: MouseEvent;\n};\nexport type SkyComboboxAddNewOptionDetail = { value: string };\n\n/**\n * @element sky-combobox\n *\n * @summary Interactive combobox with single/multi select, search, chips, validation, and popover-based option selection.\n *\n * @status stable\n * @since 1.0.0\n *\n * @documentation https://library.sky-ui.com/components/combobox\n * @dependency sky-icon\n * @dependency sky-checkbox\n *\n * @uiVModel value value-changed\n * @uiVModel searchQuery search-query-changed\n *\n * @slot icon-left - Slot for the left icon in the combobox (e.g., search icon).\n * @slot icon-right - Slot for the right icon in the combobox (e.g., dropdown icon).\n * @slot - Default slot for adding custom options or content.\n *\n * @csspart combo-box-container - The main container element wrapping the entire component\n * @csspart input-wrapper - The input field wrapper that contains chips, icons, and dropdown button\n * @csspart icon-slot - Both left and right icon containers\n * @csspart placeholder-label - The placeholder text label\n * @csspart clear-button - The clear (×) button\n * @csspart dropdown-button - The dropdown toggle arrow button\n * @csspart chip-container - Container for the chips in multi-select mode\n * @csspart chip - Individual chip element\n * @csspart single-select-chip - Chip shown in single-select mode\n * @csspart overflow-chip - The \"+N\" chip that shows hidden chips count\n * @csspart remove-chip-icon - The remove icon within chips\n * @csspart hidden-chips-dropdown - Dropdown that appears when clicking overflow chip\n * @csspart hidden-chip-inner - Individual chip in the hidden chips dropdown\n * @csspart hidden-chip-label - Label text in hidden chips dropdown\n * @csspart dropdown - The main dropdown container\n * @csspart search-container - Container for the search input in the dropdown\n * @csspart search-input - The search input field\n * @csspart add-option-icon - The \"+\" icon for adding new options\n * @csspart select-all - The \"Select All\" row in the dropdown\n * @csspart checkbox - Checkbox elements in multi-select mode\n * @csspart option - Individual option row in the dropdown\n * @csspart highlighted-text - Highlighted text in search results\n * @csspart no-options - \"No options found\" message\n * @csspart error-list - Container for validation error messages\n * @csspart error-item - Individual validation error message\n * @csspart dropdown-scroller - Scrollable container for dropdown options\n * @csspart chip-label - Label text within chips\n *\n * @fires {CustomEvent<SkyComboboxValueChangedDetail>} value-changed - Fired whenever selection changes.\n * @fires {CustomEvent<SkyComboboxSearchQueryChangedDetail>} search-query-changed - Fired when search query changes.\n * @fires {CustomEvent<SkyComboboxValidationErrorDetail>} validation-error - Fired when validation fails.\n * @fires {CustomEvent<SkyComboboxValidationSuccessDetail>} validation-success - Fired when validation passes.\n * @fires {CustomEvent<SkyComboboxIconClickDetail>} icon-click - Fired when icon slot is clicked.\n * @fires {CustomEvent<SkyComboboxAddNewOptionDetail>} add-new-option - Fired when user confirms adding a new option.\n *\n * @property {any} value - Current selection value (single) or value array (multi).\n * @property {string} placeholder - Main placeholder text.\n * @property {string} searchPlaceholder - Search input placeholder text.\n * @property {string} searchQuery - Current search filter text when `searchable` is enabled. Default: `\"\"`.\n * @property {string} label - Optional external label text.\n * @property {any[]} options - Available options list.\n * @property {boolean} searchable - Enables search input and filtering.\n * @property {boolean} addOption - Enables ad-hoc option creation from search query.\n * @property {boolean} multiSelect - Enables multi-select chip behavior.\n * @property {boolean} selectAll - Shows select-all row in eligible modes.\n * @property {boolean} clearable - Shows clear button when value exists.\n * @property {boolean} loading - Shows loading affordance.\n * @property {boolean} compact - Enables compact sizing.\n * @property {boolean} disabled - Disables interaction.\n * @property {boolean} required - Enables required validation.\n * @property {boolean} readonly - Enables read-only mode.\n * @property {boolean} emitFullObject - Emits full option objects in events.\n * @property {string} emittedKey - Key emitted from object options when `emitFullObject` is false.\n * @property {string} displayKey - Key used for visual labels in object options.\n * @property {number} visibleChips - Number of visible chips before `+N` overflow chip.\n * @property {number} chipSize - Maximum label length for each chip.\n * @property {string} color - Accent color token/CSS color.\n * @property {number} zIndex - Dropdown overlay z-index.\n * @property {string} height - Max dropdown scroll height.\n * @property {boolean} openAbove - Opens dropdown above when true.\n * @property {SkyComboboxJustify} justify - Option-row content justification.\n * @property {boolean} showErrors - Renders validation errors below control.\n * @property {SkyComboboxErrorDisplayMode} errorDisplayMode - Validation error rendering strategy.\n * @property {(value:any)=>true|string} validations - External validator callbacks.\n * @property {boolean} validationArrayFormat - Sends selected array into validators when true.\n * @property {string} prefix - Optional inline prefix text.\n * @property {string} suffix - Optional inline suffix text.\n * @property {string} prefixColor - Prefix color value.\n * @property {string} suffixColor - Suffix color value.\n * @property {string} requiredMessage - Required validation failure text.\n * @property {boolean} enforceMinOneSelection - Prevents clearing all selections in multi-select mode.\n * @property {boolean} validationActive - Enables validation UI state.\n * @property {boolean} invalid - Reflects invalid state.\n * @property {string} variant - Visual variant style.\n *\n * @method openDropdown Opens the combobox dropdown.\n * @method closeDropdown Closes the combobox dropdown.\n * @method clearSelection Clears current selection if allowed.\n * @method reset Resets combobox state and clears validation UI.\n *\n * @example\n * ```html\n * <sky-combobox label=\"Assignee\" searchable clearable placeholder=\"Select user\"></sky-combobox>\n * ```\n * ```vue\n * <template>\n * <sky-combobox label=\"Assignee\" searchable clearable placeholder=\"Select user\"></sky-combobox>\n * </template>\n * ```\n * ```jsx\n * export default function Demo() {\n * return <sky-combobox label=\"Assignee\" searchable clearable placeholder=\"Select user\"></sky-combobox>;\n * }\n * ```\n */\n@customElement(\"sky-combobox\")\nexport class SkyCombobox extends FormControlBase {\n\n static dependencies: Record<string, CustomElementConstructor> = {\n \"sky-icon\": SkyIcon,\n \"sky-checkbox\": SkyCheckbox,\n };\n\n // ============================================================\n // ✅ PUBLIC PROPERTIES (user-configurable)\n // ============================================================\n\n /** Current value. Set via attribute in HTML (e.g. value=\"option-1\") or via JS (string or array when multiSelect). Not reflected when set to array from JS. */\n @property() value: any = \"\";\n @property({ type: String }) placeholder: string = \"Select An Option\";\n @property({ type: String }) searchPlaceholder: string = \"Search...\";\n @property({ type: String }) label: string = \"\";\n private _options: any[] = [];\n @property({ type: Array })\n get options(): any[] {\n return this._options;\n }\n set options(value: any[] | null | undefined) {\n const old = this._options;\n this._options = Array.isArray(value) ? value : [];\n this.requestUpdate(\"options\", old);\n }\n @property({ type: Number }) chipSize: number = 20;\n @property({ type: String }) color: string = \"primary\";\n @property({ type: Boolean, reflect: true }) clearable: boolean = false;\n @property({ type: Boolean, reflect: true }) loading: boolean = false;\n @property({ type: Boolean, reflect: true }) compact: boolean = false;\n @property({ type: Boolean, reflect: true }) override disabled: boolean = false;\n @property({ type: Boolean, reflect: true }) searchable: boolean = false;\n @property({ type: Boolean, reflect: true }) multiSelect: boolean = false;\n @property({ type: Number, reflect: true }) visibleChips: number = 2;\n @property({ type: Boolean, reflect: true }) selectAll: boolean = false;\n private _validations: ((value: any) => true | string)[] = [];\n @property({ type: Array })\n get validations(): ((value: any) => true | string)[] {\n return this._validations;\n }\n set validations(value: ((value: any) => true | string)[] | null | undefined) {\n const old = this._validations;\n this._validations = Array.isArray(value) ? value : [];\n this.requestUpdate(\"validations\", old);\n }\n @property({ type: Boolean }) showErrors: boolean = false;\n @property({ type: String }) errorDisplayMode: SkyComboboxErrorDisplayMode = \"single\";\n @property({ type: Boolean, reflect: true }) override required: boolean = false;\n @property({ type: Boolean, reflect: true }) emitFullObject: boolean = false;\n @property({ type: String }) emittedKey: string = \"value\";\n @property({ type: String }) displayKey: string = \"\";\n @property({ type: Boolean }) addOption: boolean = false;\n @property({ type: Boolean }) validationArrayFormat: boolean = false;\n @property({ type: String }) override prefix: string = \"\";\n @property({ type: String }) suffix: string = \"\";\n @property({ type: String }) prefixColor: string = \"\";\n @property({ type: String }) suffixColor: string = \"\";\n @property({ type: String }) justify: SkyComboboxJustify = \"flex-start\";\n @property({ type: Number }) zIndex: number = 11;\n @property({ type: String }) height: string = \"200px\";\n @property({ type: String }) override requiredMessage: string = \"Selection is required.\";\n @property({ type: Boolean, reflect: true }) override readonly: boolean = false;\n @property({ type: Boolean }) enforceMinOneSelection: boolean = false;\n @property({ type: Boolean }) openAbove: boolean = false;\n @property({ type: Boolean, reflect: true }) validationActive: boolean = false;\n @property({ type: Boolean, reflect: true }) invalid = false;\n @property({ type: String, reflect: true }) variant: string = \"default\";\n\n // ============================================================\n // ✅ INTERNAL STATE (read-only, managed by component)\n // ============================================================\n\n /** Current search filter when `searchable`; exposed for controlled search / `v-model:search-query`. */\n @property({ type: String, attribute: false }) searchQuery = \"\";\n @state() filteredOptions: any[] = [];\n @state() focused: boolean = false;\n @state() open: boolean = false;\n @state() selectedItems: any[] = [];\n @state() hiddenChipsOpen: boolean = false;\n @state() activeIndex: number = -1;\n @state() validationErrors: string[] = [];\n @state() validationStatus: any[] = [];\n @state() private hasLeftIcon = false;\n @state() private hasRightIcon = false;\n @state() private optionSlotSet = new Set<string>();\n\n // ============================================================\n // ✅ PRIVATE FIELDS (internal, not reactive)\n // ============================================================\n\n @query(\".input-wrapper\") private inputWrapperEl!: HTMLElement;\n @query(\".dropdown\") private dropdownEl!: HTMLElement;\n @query(\".hidden-chips-dropdown\") private hiddenDropdownEl!: HTMLElement;\n @query(\".search-container .input\") private searchInputEl!: HTMLInputElement;\n @query(\".overflow-chip\") private overflowChipEl!: HTMLElement;\n @query(\".combo-box-container\") private comboContainerEl!: HTMLElement;\n @queryAll(\"[data-row-index]\") private rowEls!: NodeListOf<HTMLElement>;\n @queryAssignedElements({ slot: \"icon-left\" }) private iconLeftEls!: HTMLElement[];\n @queryAssignedElements({ slot: \"icon-right\" }) private iconRightEls!: HTMLElement[];\n\n private _searchDebounceId: ReturnType<typeof setTimeout> | null = null;\n private static readonly _SEARCH_DEBOUNCE_MS = 150;\n private static readonly _SEARCH_DEBOUNCE_OPTIONS_THRESHOLD = 30;\n\n private dropdownPopover = new PopoverController(this, {\n getAnchor: () => this.inputWrapperEl,\n getPopover: () => this.dropdownEl,\n cssVarLeft: \"--sky-dd-left\",\n cssVarTop: \"--sky-dd-top\",\n cssVarWidth: \"--sky-dd-width\",\n getPlacement: () => 'bottom' as any,\n getAlign: () => \"start\" as any,\n getGap: () => 6,\n getPadding: () => 8,\n getMatchAnchorWidth: () => true,\n getMaxWidthToViewport: () => true,\n getMaxWidthMode: () => \"cap\" as any,\n getFlip: () => true,\n getFlipOrder: () => [],\n getAnimateReposition: () => true,\n getRepositionMs: () => 160,\n getCloseOnEscape: () => true,\n getCloseOnOutside: () => true,\n getRestoreFocusOnClose: () => true,\n onOpenChange: (open, meta) => {\n this.open = open;\n\n if (open) {\n this.validationActive = true;\n this.filterOptions();\n requestAnimationFrame(() => this.focusOnOpen());\n } else {\n this.activeIndex = -1;\n this.searchQuery = \"\";\n this.emitSearchQueryChanged();\n this.filterOptions();\n\n // close hidden chips too\n this.hiddenChipsOpen = false;\n this.hiddenPopover.closePopover(\"api\");\n }\n },\n });\n\n private hiddenPopover = new PopoverController(this, {\n getAnchor: () => this.overflowChipEl,\n getPopover: () => this.hiddenDropdownEl,\n cssVarLeft: \"--sky-hc-left\",\n cssVarTop: \"--sky-hc-top\",\n cssVarWidth: \"--sky-hc-width\",\n getPlacement: () => \"bottom\" as any,\n getAlign: () => \"center\" as any,\n getGap: () => 4,\n getPadding: () => 8,\n getMatchAnchorWidth: () => false,\n getMaxWidthToViewport: () => true,\n getMaxWidthMode: () => \"cap\" as any,\n getFlip: () => true,\n getFlipOrder: () => [],\n getAnimateReposition: () => true,\n getRepositionMs: () => 120,\n getCloseOnEscape: () => true,\n getCloseOnOutside: () => true,\n getRestoreFocusOnClose: () => false,\n onOpenChange: (open) => {\n this.hiddenChipsOpen = open;\n\n // if opening hidden chips, close main dropdown\n if (open && this.open) {\n this.dropdownPopover.closePopover(\"api\");\n }\n },\n });\n\n static override styles = css`\n :host {\n display: block;\n font-family: var(--sky-font);\n width: 100%;\n }\n\n :host([disabled]) {\n pointer-events: none;\n opacity: var(--sky-opacity-disabled, 0.6);\n }\n\n :host([readonly]) .input-wrapper {\n cursor: default;\n }\n\n :host([variant=\"highlight\"]) {\n .label{\n color: var(--sky-dropdown-color);\n }\n }\n\n .combo-box-container:focus-within .label {\n color: var(--sky-dropdown-color);\n font-size: var(--sky-font-size-sm);\n transition: all 0.3s ease;\n }\n .label {\n font-size: var(--sky-font-size-sm);\n margin-bottom: 5px;\n text-align: start;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n font-family: var(--sky-font);\n }\n\n .combo-box-container:focus-within[compact] .label {\n font-size: var(--sky-font-size-xs);\n color: var(--sky-dropdown-color);\n }\n\n .combo-box-container {\n position: relative;\n display: flex;\n flex-direction: column;\n max-width: 100%;\n overflow: visible;\n width: 100%;\n }\n\n .combo-box-container.shake {\n animation: shake 0.3s ease-in-out;\n animation-iteration-count: 1;\n }\n\n @keyframes shake {\n 0% {\n transform: translateX(0);\n }\n 25% {\n transform: translateX(-3px);\n }\n 50% {\n transform: translateX(3px);\n }\n 75% {\n transform: translateX(-3px);\n }\n 100% {\n transform: translateX(0);\n }\n }\n\n .search-container {\n display: flex;\n align-items: center;\n padding: 8px 10px;\n gap: 5px;\n border-bottom: 1px solid var(--sky-border-light);\n justify-content: space-between;\n margin-bottom: 5px;\n }\n\n .search-container sky-icon {\n width: 16px;\n height: 16px;\n color: var(--sky-text-secondary);\n transition: color 0.15s ease;\n }\n\n .search-container:has(.input:focus) sky-icon {\n color: var(--sky-active-primary);\n }\n\n .new-option-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n border-radius: var(--sky-radius-primary);\n margin-left: 6px;\n cursor: pointer;\n background: var(--sky-hover-primary);\n border: var(--sky-border-primary);\n color: var(--sky-dropdown-color);\n flex-shrink: 0;\n transition: color 0.15s ease;\n }\n .new-option-btn:hover {\n color: var(--sky-active-primary);\n }\n .new-option-btn[disabled] {\n opacity: 0.6;\n pointer-events: none;\n }\n\n .input-wrapper {\n display: flex;\n align-items: center;\n background: var(--sky-glass-solid);\n backdrop-filter: none;\n -webkit-backdrop-filter: none;\n box-sizing: border-box;\n border-radius: var(--sky-radius-secondary);\n height: 38px;\n width: 100%;\n flex-wrap: nowrap;\n position: relative;\n border: var(--sky-border-primary);\n box-shadow: var(--sky-box-shadow-primary);\n transition: border-color 0.3s ease, box-shadow 0.3s ease;\n flex: 1 1 auto;\n min-width: 0;\n \n }\n\n .input-wrapper:focus-visible {\n border-bottom: 1px solid var(--sky-dropdown-color);\n outline: none;\n }\n\n .input-wrapper::after {\n content: \"\";\n position: absolute;\n top: -1px;\n left: -1px;\n right: -1px;\n bottom: -1px;\n border-radius: inherit;\n border: 1px solid transparent;\n border-bottom-color: transparent;\n opacity: 0;\n transition:\n opacity 0.3s ease,\n border-color 0.3s ease;\n pointer-events: none;\n }\n\n .input-wrapper[open]::after {\n opacity: 1;\n border-bottom-color: var(--sky-dropdown-color);\n }\n\n :host([validationActive]:invalid) .input-wrapper::after {\n opacity: 1;\n border-bottom-color: var(--sky-danger-primary);\n }\n :host([validationActive]:invalid) .label {\n color: var(--sky-danger-primary);\n }\n\n :host([validationActive]:invalid) .icon-slot {\n color: var(--sky-danger-primary);\n }\n\n .placeholder-label.active[compact] {\n top: 10px;\n background-color: var(--sky-dropdown-color);\n color: white;\n font-size: var(--sky-font-size-xs);\n padding: 0 5px;\n border-radius: 4px;\n }\n\n .input-wrapper[compact] {\n height: 30px;\n }\n\n :host([compact]) .placeholder-label {\n font-size: var(--sky-font-size-sm);\n }\n\n sky-icon {\n display: inline-block;\n width: 1em;\n height: 1em;\n }\n\n .chip-container {\n margin-left: 5px;\n display: flex;\n gap: 8px;\n flex: 1 1 auto;\n min-width: 0;\n flex-wrap: nowrap;\n }\n\n :dir(rtl).chip-container {\n margin-right: 5px;\n margin-left: 0px;\n }\n\n .chip-container::-webkit-scrollbar {\n display: none;\n }\n\n .chip-container[compact] {\n gap: 4px;\n }\n\n .chip {\n background-color: var(--sky-glass-primary);\n border-radius: var(--sky-radius-primary);\n padding: 4px 8px;\n font-size: var(--sky-font-size-sm);\n display: flex;\n align-items: center;\n gap: 6px;\n flex-shrink: 0;\n min-width: 0;\n border: var(--sky-border-primary);\n font-family: var(--sky-font);\n }\n\n .chip .chip-label {\n min-width: 0;\n flex: 1 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .chip[single-select] {\n background-color: transparent;\n box-shadow: none;\n border: none;\n font-size: var(--sky-font-size-md);\n padding: 4px;\n gap: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n min-width: 0;\n width:100%;\n }\n\n .chip[single-select] .chip-label {\n flex: 1 1 auto;\n min-width: 0;\n }\n\n :host([icon-left]) .chip[single-select] {\n padding:4px 0;\n }\n\n .chip[single-select] .remove-chip {\n display: none;\n }\n\n .chip .remove-chip[compact] {\n flex-shrink: 0;\n }\n .remove-chip-inner {\n font-size: var(--sky-font-size-md);\n color: var(--sky-dropdown-color);\n background-color: var(--sky-hover-primary);\n border-radius: var(--sky-radius-full);\n border: none;\n cursor: pointer;\n transition: color 0.2s ease, background-color 0.2s ease;\n }\n .remove-chip-inner:hover {\n color: var(--sky-danger-primary);\n }\n .remove-chip:hover {\n color: var(--sky-danger-primary);\n }\n\n .chip .remove-chip {\n position: static;\n flex-shrink: 0;\n align-self: center;\n font-size: var(--sky-font-size-sm);\n color: var(--sky-dropdown-color);\n background-color: var(--sky-hover-primary);\n border-radius: var(--sky-radius-full);\n cursor: pointer;\n border: none;\n transition: color 0.2s ease, background-color 0.2s ease;\n }\n\n .input {\n border: none;\n font-family: var(--sky-font);\n outline: none;\n font-size: var(--sky-font-size-md);\n background: transparent;\n box-sizing: border-box;\n color: var(--sky-text-secondary);\n width: 100%;\n transition: all 0.2 ease-in-out;\n }\n\n .search-container:has(.input:focus:focus) {\n border-bottom-color: var(--sky-active-primary);\n }\n\n .input:-webkit-autofill {\n -webkit-text-fill-color: var(--sky-text-secondary, inherit) !important;\n transition: background-color 9999s ease-in-out 0s !important;\n }\n\n .input[disabled] {\n opacity: 70%;\n color: var(--sky-text-primary);\n cursor: disabled;\n }\n\n .input-wrapper[disabled] {\n opacity: 0.6;\n pointer-events: none;\n }\n\n .dropdown {\n position: fixed;\n padding: 5px;\n background: var(--sky-glass-tertiary);\n background-image: var(--sky-glass-surface);\n backdrop-filter: var(--sky-blur-tertiary) var(--sky-brightness-tertiary)\n var(--sky-saturation-tertiary);\n -webkit-backdrop-filter: var(--sky-blur-tertiary)\n var(--sky-brightness-tertiary) var(--sky-saturation-tertiary);\n border-radius: var(--sky-radius-secondary);\n box-shadow:\n var(--sky-box-shadow-inset),\n var(--sky-box-shadow-tertiary);\n box-sizing: border-box;\n pointer-events: auto;\n margin: 0;\n \n border: var(--sky-border-tertiary);\n \n }\n\n .dropdown-scroller {\n max-height: var(--sky-scroll-height);\n overflow: auto;\n scrollbar-width: thin;\n scrollbar-color: var(--sky-scrollbar-thumb) var(--sky-scrollbar-track);\n }\n\n .dropdown-scroller::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n }\n\n .dropdown-scroller::-webkit-scrollbar-thumb {\n background-color: var(--sky-scrollbar-thumb);\n border-radius: var(--sky-radius-full, 9999px);\n transition: background-color var(--sky-duration-normal, 200ms)\n var(--sky-ease-default, ease);\n cursor: grab;\n }\n\n .dropdown-scroller::-webkit-scrollbar-thumb:hover {\n background-color: var(--sky-scrollbar-thumb-hover);\n }\n\n .dropdown-scroller::-webkit-scrollbar-track {\n background: var(--sky-scrollbar-track);\n }\n\n .dropdown-scroller::-webkit-scrollbar-button {\n background-color: transparent;\n }\n\n .dropdown-item.active {\n background-color: var(--sky-hover-primary);\n }\n .dropdown-item.selected {\n color: var(--sky-dropdown-color, var(--sky-active-primary));\n }\n\n .dropdown-item.active.selected {\n background-color: var(--sky-active-g0);\n }\n\n .dropdown-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 10px;\n border-radius: var(--sky-radius-secondary);\n cursor: pointer;\n text-align: left;\n font-size: var(--sky-font-size-sm);\n color: var(--sky-text-primary);\n transition: all 0.2s ease-in-out;\n box-sizing: border-box;\n margin: 2px 0;\n font-family: var(--sky-font);\n }\n\n :host([compact]) .dropdown-item {\n font-size: var(--sky-font-size-sm);\n padding: 5px 8px;\n margin: 1px 0;\n }\n\n .icon-slot {\n display: none;\n justify-content: center;\n font-size: var(--sky-font-size-xl);\n align-items: center;\n border-radius: var(--sky-radius-secondary);\n height: inherit;\n max-height: 100%;\n box-sizing: border-box;\n min-width: 36px;\n background: var(--sky-glass-solid);\n color: var(--sky-text-primary);\n backdrop-filter: none;\n -webkit-backdrop-filter: none;\n \n transition:\n transform 0.3s ease,\n color 0.3s ease;\n }\n\n.hidden-chips-dropdown {\n position: fixed; /* important: popover top layer */\n background: var(--sky-glass-tertiary);\n background-image: var(--sky-glass-surface);\n backdrop-filter: var(--sky-blur-tertiary) var(--sky-brightness-tertiary)\n var(--sky-saturation-tertiary);\n -webkit-backdrop-filter: var(--sky-blur-tertiary)\n var(--sky-brightness-tertiary) var(--sky-saturation-tertiary);\n box-shadow:\n var(--sky-box-shadow-inset),\n var(--sky-box-shadow-tertiary);\n border-radius: var(--sky-radius-secondary);\n border: var(--sky-border-tertiary);\n width: max-content;\n \n opacity: 0;\n transform: scale(0.98);\n transition: opacity 0.15s ease, transform 0.15s ease;\n margin: 0;\n}\n\n.hidden-chips-dropdown:popover-open {\n opacity: 1;\n transform: scale(1);\n}\n\n\n .hidden-chip-inner {\n padding: 4px 8px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n cursor: pointer;\n gap: 5px;\n font-size: var(--sky-font-size-sm);\n border-bottom: var(--sky-border-primary);\n font-family: var(--sky-font);\n }\n\n .hidden-chip-inner:last-child {\n border-bottom: none;\n }\n\n .icon-slot[filled] {\n display: flex;\n cursor: pointer;\n }\n .icon-slot.left {\n border-right: var(--sky-border-primary);\n }\n\n :dir(rtl) .icon-slot.left {\n border-left: var(--sky-border-primary);\n border-right: unset;\n }\n\n .icon-slot.right {\n border-left: var(--sky-border-primary);\n }\n\n :dir(rtl) .icon-slot.right {\n border-right: var(--sky-border-primary);\n border-left: unset;\n }\n\n .input-wrapper[open] .icon-slot {\n transform: translate(-5px, -5px);\n border: var(--sky-border-primary) !important;\n color: var(--sky-dropdown-color);\n background-color: var(--sky-glass-solid);\n }\n\n :dir(rtl) .input-wrapper[open] .icon-slot {\n transform: translate(5px, -5px);\n }\n\n .input-wrapper[open] .icon-slot.right {\n transform: translate(5px, -5px);\n }\n\n :dir(rtl) .input-wrapper[open] .icon-slot.right {\n transform: translate(-5px, -5px);\n }\n\n .placeholder-label {\n white-space: nowrap;\n padding: 0 8px;\n flex: 1 1 0%;\n text-align: start;\n font-size: var(--sky-font-size-md);\n color: var(--sky-text-tertiary);\n transition: all 0.3s ease;\n pointer-events: none;\n overflow: hidden;\n text-overflow: ellipsis;\n font-family: var(--sky-font);\n }\n\n .placeholder-label.active {\n display: none;\n }\n\n .dropdown-item:hover {\n background-color: var(--sky-hover-primary);\n }\n\n .clear-button {\n flex-shrink: 0;\n margin-inline-end: var(--sky-space-1, 4px);\n border: none;\n font-size: var(--sky-font-size-xl);\n color: var(--sky-dropdown-color);\n background-color: var(--sky-hover-primary);\n border-radius: var(--sky-radius-full);\n backdrop-filter: none;\n -webkit-backdrop-filter: none;\n cursor: pointer;\n transition: color 0.3s ease;\n }\n\n .clear-button[compact] {\n font-size: var(--sky-font-size-md);\n }\n\n .clear-button:hover {\n color: var(--sky-danger-primary);\n }\n\n .dropdown-button {\n flex-shrink: 0;\n color: var(--sky-text-primary);\n height: 100%;\n width: auto;\n aspect-ratio: 1;\n display: flex;\n border: none;\n font-size: var(--sky-font-size-sm);\n cursor: pointer;\n transition: color 0.3s ease;\n }\n\n .dropdown-button[compact] {\n font-size: var(--sky-font-size-md);\n }\n\n .loading-indicator {\n flex-shrink: 0;\n margin-inline-end: var(--sky-space-1, 4px);\n width: 16px;\n height: 16px;\n border: 2px solid var(--sky-text-white);\n border-top: 2px solid var(--sky-dropdown-color, var(--sky-active-primary));\n border-radius: var(--sky-radius-full);\n animation: spin 1s linear infinite;\n }\n\n ::slotted(.icon-slot) {\n display: block;\n }\n\n @keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n\n .highlight {\n color: var(--sky-dropdown-color);\n font-weight: var(--sky-font-weight-semibold);\n }\n\n .progress-container {\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: flex-start;\n position: absolute;\n width: 100%;\n top: 100%;\n }\n\n .progress-message {\n pointer-events: none;\n width: 100%;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n font-size: var(--sky-font-size-sm);\n margin-left: 5px;\n font-family: var(--sky-font);\n }\n\n :dir(rtl) .progress-message {\n margin-left: unset;\n margin-right: 5px;\n }\n\n .error-list {\n list-style: none;\n margin: 0;\n padding: 0;\n width: 100%;\n }\n\n .error {\n font-size: var(--sky-font-size-xs);\n color: var(--sky-danger-primary);\n text-align: start;\n white-space: nowrap;\n text-overflow: ellipsis;\n font-family: var(--sky-font);\n }\n .sky-checkbox {\n appearance: none;\n flex-shrink: 0;\n width: 16px;\n height: 16px;\n border-radius: 6px;\n margin-right: 5px;\n border: 1px solid var(--sky-text-tertiary);\n background-color: transparent;\n box-shadow: none;\n cursor: pointer;\n position: relative;\n transition:\n background-color 0.3s ease,\n border-color 0.3s ease,\n box-shadow 0.3s ease;\n }\n\n .sky-checkbox:hover {\n background-color: var(--sky-text-tertiary);\n border-color: var(--sky-text-tertiary);\n }\n\n .sky-checkbox:focus-visible {\n background-color: var(--sky-text-tertiary);\n border-color: var(--sky-text-tertiary);\n outline: none;\n }\n\n .sky-checkbox:checked {\n background-color: var(--sky-active-primary);\n border-color: var(--sky-active-primary);\n }\n\n .sky-checkbox::after {\n content: \"\";\n width: 8px;\n height: 4px;\n border: 2px solid var(--sky-text-white);\n border-top: none;\n border-right: none;\n position: absolute;\n top: 6px;\n left: 50%;\n transform: translate(-50%, -50%) rotate(-90deg) scale(0.8);\n opacity: 0;\n transition:\n opacity 0.2s ease-in-out,\n transform 0.2s ease-in-out;\n }\n\n .sky-checkbox.indeterminate {\n background-color: var(--sky-active-primary);\n border-color: var(--sky-active-primary);\n }\n\n .sky-checkbox.indeterminate::after {\n width: 8px;\n height: 2px;\n background-color: var(--sky-text-white);\n border: none;\n top: 50%;\n left: 50%;\n opacity: 1;\n transform: translate(-50%, -50%) scale(1);\n }\n\n .sky-checkbox:checked::after {\n opacity: 1;\n transform: translate(-50%, -50%) rotate(-45deg) scale(1);\n }\n\n .sky-checkbox:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n `;\n\n constructor() {\n super();\n this.captureDefaultValue(\"\");\n }\n\n static override shadowRootOptions = {\n ...LitElement.shadowRootOptions,\n delegatesFocus: true,\n };\n\n override connectedCallback() {\n super.connectedCallback();\n\n // ✅ allow keyboard tabbing to the component\n if (!this.hasAttribute(\"tabindex\")) {\n this.tabIndex = this.disabled ? -1 : 0;\n }\n this.refreshOptionSlots();\n\n }\n\n override firstUpdated() {\n this.dropdownPopover.refreshTargets();\n this.hiddenPopover.refreshTargets();\n }\n\n private refreshOptionSlots = () => {\n const set = new Set<string>();\n this.querySelectorAll<HTMLElement>('[slot^=\"option-\"]').forEach((el) => {\n const slotName = (el as HTMLElement).slot;\n if (slotName) set.add(slotName);\n });\n this.optionSlotSet = set;\n };\n\n /** Get the current value for form submission */\n protected override getFormValue(): FormState {\n if (this.disabled || !this.name) return null;\n\n if (this.multiSelect) {\n // For multi-select, return a FormData object with all selected values\n const formData = new FormData();\n this.selectedItems.forEach((item) => {\n const value = this.emitFullObject\n ? JSON.stringify(item)\n : String(this.getOptionValue(item));\n formData.append(this.name, value);\n });\n // Add a dummy input when nothing is selected (for form validation)\n if (this.selectedItems.length === 0 && this.required) {\n formData.append(this.name, \"\");\n }\n return formData;\n } else {\n // For single select\n if (this.selectedItems.length === 0) return \"\";\n const item = this.selectedItems[0];\n return this.emitFullObject\n ? JSON.stringify(item)\n : String(this.getOptionValue(item));\n }\n }\n\n /** Set value from form state (e.g., form reset) */\n protected override setValueFromFormState(state: FormState): void {\n if (state === null || state === \"\") {\n this.value = this.multiSelect ? [] : \"\";\n this.selectedItems = [];\n return;\n }\n\n if (this.multiSelect) {\n let values: any[] = [];\n\n if (state instanceof FormData) {\n // Get all values with the same name from FormData\n values = state.getAll(this.name);\n } else if (Array.isArray(state)) {\n values = state;\n } else if (typeof state === \"string\") {\n try {\n const parsed = JSON.parse(state);\n if (Array.isArray(parsed)) {\n values = parsed;\n } else {\n values = [state];\n }\n } catch {\n values = [state];\n }\n }\n\n this.setValueFromArray(values);\n } else {\n // Single select\n let stringValue = \"\";\n if (typeof state === \"string\") {\n stringValue = state;\n } else if (state instanceof FormData) {\n stringValue = state.get(this.name)?.toString() || \"\";\n } else if (Array.isArray(state) && state.length > 0) {\n stringValue = state[0].toString();\n }\n\n this.value = stringValue;\n this.syncSelectedItemsWithValue();\n }\n }\n protected override syncFormValue(): void {\n if (!this.name || this.disabled) {\n this.internals.setFormValue(null);\n return;\n }\n\n const v = this.getFormValue();\n\n if (v === null) {\n this.internals.setFormValue(null);\n return;\n }\n\n if (this.multiSelect && Array.isArray(v)) {\n // For multi-select, set multiple form values with the same name\n // This matches how native <select multiple> works\n const formData = new FormData();\n v.forEach((value) => {\n if (value !== null && value !== undefined && value !== \"\") {\n formData.append(this.name, String(value));\n }\n });\n this.internals.setFormValue(formData);\n } else {\n // Single select\n this.internals.setFormValue(v as string | File | null);\n }\n }\n private setValueFromArray(values: any[]) {\n // Ensure options is always an array\n const optionsArray = Array.isArray(this.options) ? this.options : [];\n\n // Filter options based on the submitted values\n this.selectedItems = optionsArray.filter((option) => {\n const optionValue = this.getOptionValue(option);\n const optionValueString = this.emitFullObject\n ? JSON.stringify(option)\n : String(optionValue);\n\n return values.some((value) => {\n const stringValue = String(value);\n\n // Handle both string comparison and JSON comparison\n if (this.emitFullObject) {\n try {\n const parsedValue = JSON.parse(stringValue);\n return JSON.stringify(parsedValue) === optionValueString;\n } catch {\n return stringValue === optionValueString;\n }\n } else {\n return stringValue === optionValueString;\n }\n });\n });\n\n // Update the internal value\n this.value = this.selectedItems.map((item) =>\n this.emitFullObject ? item : this.getOptionValue(item),\n );\n }\n\n /** Get the validity anchor (for validation messages) */\n protected override getValidityAnchor(): HTMLElement | undefined {\n return this;\n }\n\n /** Check if empty (for required validation) */\n protected override isEmpty(): boolean {\n if (this.multiSelect) {\n return this.selectedItems.length === 0;\n } else {\n return this.selectedItems.length === 0 || !this.value;\n }\n }\n\n protected override getNativeControl(): HTMLElement | null {\n // Return the input wrapper or a focusable element within it\n return this.inputWrapperEl || null;\n }\n /** Override to provide custom error messages */\n protected override getCustomErrorMessage(): string {\n return this.validationErrors?.[0] || \"\";\n }\n\n // ============================================================\n // Override FormControlBase methods for combobox-specific behavior\n // ============================================================\n\n /** Override form reset callback */\n protected override onFormReset(): void {\n super.onFormReset();\n this.searchQuery = \"\";\n this.emitSearchQueryChanged();\n this.open = false;\n this.invalid = false;\n this.validationErrors = [];\n this.validationActive = false;\n }\n\n /** Override form disabled callback */\n protected override onFormDisabled(disabled: boolean): void {\n this.disabled = disabled;\n }\n\n /** Override form state restore callback */\n protected override onFormStateRestore(state: FormState): void {\n this.setValueFromFormState(state);\n }\n\n\n private toggleSelectAll(): void {\n if (this.disabled || this.readonly) return;\n const keyOf = (o: any) => String(this.getOptionValue(o));\n\n if (this.isAllFilteredSelected()) {\n const filteredKeys = new Set(\n this.filteredOptions.map((opt) =>\n String(this.getOptionValue(opt.original)),\n ),\n );\n\n const nextSelected = this.selectedItems.filter(\n (item) => !filteredKeys.has(keyOf(item)),\n );\n\n // 🚫 prevent going below 1 selection when enforced\n if (this.enforceMinOneSelection && nextSelected.length === 0) {\n return;\n }\n\n this.selectedItems = nextSelected;\n } else {\n const selectedKeys = new Set(\n this.selectedItems.map((item) => keyOf(item)),\n );\n const additions = this.filteredOptions\n .map((o) => o.original)\n .filter((opt) => !selectedKeys.has(keyOf(opt)));\n this.selectedItems = [...this.selectedItems, ...additions];\n }\n\n const valuesArray = this.selectedItems.map((opt) =>\n this.emitFullObject ? opt : this.getOptionValue(opt),\n );\n this.value = valuesArray;\n\n this.dispatchEvent(\n new CustomEvent<SkyComboboxValueChangedDetail>(\"value-changed\", {\n detail: {\n value: valuesArray,\n selectedItems: [...this.selectedItems],\n emittedValues: valuesArray,\n isFilteredSelection: !!this.searchQuery.trim(),\n },\n bubbles: true,\n composed: true,\n }),\n );\n\n this.syncFormValue();\n this.syncValidity();\n this.requestUpdate();\n }\n\n private isAllFilteredSelected(): boolean {\n if (this.filteredOptions.length === 0) return false;\n\n const filteredValues = this.filteredOptions.map((opt) =>\n this.getOptionValue(opt.original),\n );\n return filteredValues.every((value) =>\n this.selectedItems.some((item) => this.getOptionValue(item) === value),\n );\n }\n\n private truncateText(text: string, maxLength: number): string {\n if (text.length > maxLength) {\n return text.slice(0, maxLength) + \"...\";\n }\n return text;\n }\n\n private validateInput(): void {\n if (!this.validationActive) return;\n\n this.validationErrors = [];\n\n const target = this.validationArrayFormat ? this.selectedItems : this.value;\n\n // 1) required first (single source of truth inside component UI)\n if (this.required && this.isEmpty()) {\n this.validationErrors.push(\n this.requiredMessage || \"Selection is required.\",\n );\n } else {\n // 2) run external validations only when not empty (optional but cleaner)\n if (Array.isArray(this.validations) && this.validations.length) {\n for (const v of this.validations) {\n const res = v(target);\n if (res !== true)\n this.validationErrors.push(String(res || \"Invalid value.\"));\n }\n }\n }\n\n this.invalid = this.validationErrors.length > 0;\n\n this.dispatchEvent(\n new CustomEvent<SkyComboboxValidationErrorDetail | SkyComboboxValidationSuccessDetail>(\n this.invalid ? \"validation-error\" : \"validation-success\",\n {\n detail: this.invalid\n ? { errors: this.validationErrors }\n : { value: this.selectedItems },\n bubbles: true,\n composed: true,\n },\n ),\n );\n\n this.syncValidity();\n this.requestUpdate();\n }\n\n // ✅ Always blocks form submit when invalid (even if validationActive=false)\n protected override validateForForm(): string {\n if (this.disabled) return \"\";\n\n // What should validators receive?\n const target = this.validationArrayFormat ? this.selectedItems : this.value;\n\n // 1) external validations first\n if (Array.isArray(this.validations) && this.validations.length) {\n for (const v of this.validations) {\n const res = v(target);\n if (res !== true) return String(res || \"Invalid value.\");\n }\n }\n\n // 2) enforceMinOneSelection as a hard rule (optional but makes form correct)\n if (this.enforceMinOneSelection && this.isEmpty()) {\n return this.requiredMessage || \"At least one selection is required.\";\n }\n\n // 3) required rule\n if (this.required && this.isEmpty()) {\n return this.requiredMessage || \"Selection is required.\";\n }\n\n return \"\";\n }\n\n override focus(options?: FocusOptions) {\n super.focus(options);\n if (this.searchInputEl) {\n this.searchInputEl.focus(options);\n } else if (this.inputWrapperEl) {\n this.inputWrapperEl.focus(options);\n }\n }\n\n override blur() {\n if (this.open) {\n this.dropdownPopover.closePopover(\"light-dismiss\");\n }\n super.blur();\n }\n\n private handleFocus(): void {\n this.focused = true;\n\n if (!this.validationActive) {\n this.validationActive = true;\n }\n }\n\n /**\n * Resets combobox state and clears validation UI.\n *\n * @returns {void}\n */\n public reset(): void {\n this.value = this.multiSelect ? [] : \"\";\n this.selectedItems = [];\n this.searchQuery = \"\";\n this.emitSearchQueryChanged();\n this.filterOptions();\n this.validationErrors = [];\n this.validationActive = false;\n this.open = false;\n this.invalid = false;\n this.syncFormValue();\n this.syncValidity();\n this.requestUpdate();\n }\n\n /**\n * Opens the combobox dropdown.\n *\n * @returns {void}\n */\n public openDropdown(): void {\n if (this.disabled || this.readonly) return;\n this.dropdownPopover.openPopover();\n }\n\n /**\n * Closes the combobox dropdown.\n *\n * @returns {void}\n */\n public closeDropdown(): void {\n this.dropdownPopover.closePopover(\"api\");\n }\n\n /**\n * Clears current selection when allowed by component settings.\n *\n * @returns {void}\n */\n public clearSelection(): void {\n this.handleClear();\n }\n\n private handleBlur(): void {\n this.focused = false;\n\n if (this.validationActive) {\n this.validateInput();\n }\n }\n\n override updated(changedProperties: Map<string, unknown>) {\n if (changedProperties.has(\"color\")) {\n this.style.setProperty(\"--sky-dropdown-color\", resolveColor(this.color));\n }\n if (changedProperties.has(\"height\")) {\n this.style.setProperty(\"--sky-scroll-height\", this.height);\n }\n }\n override willUpdate(changedProperties: Map<string, unknown>) {\n if (changedProperties.has(\"value\")) {\n this.syncSelectedItemsWithValue();\n this.syncFormValue();\n this.syncValidity();\n }\n\n if (changedProperties.has(\"options\")) {\n // ✅ Ensure options is an array before processing\n if (!Array.isArray(this.options)) {\n this.options = [];\n }\n this.syncSelectedItemsWithValue();\n this.filterOptions();\n this.syncFormValue();\n this.syncValidity();\n }\n\n if (changedProperties.has(\"searchable\")) {\n // ✅ Call filterOptions which now handles non-array options safely\n this.filterOptions();\n }\n\n if (changedProperties.has(\"searchQuery\")) {\n this.filterOptions();\n }\n\n if (changedProperties.has(\"validationErrors\")) {\n this.requestUpdate();\n }\n }\n\n private syncSelectedItemsWithValue(): void {\n // Ensure options is always an array\n const optionsArray = Array.isArray(this.options) ? this.options : [];\n\n // Treat null/undefined or [] (when multi) as empty\n const isEmptyMulti =\n this.multiSelect && Array.isArray(this.value) && this.value.length === 0;\n\n if (this.value == null || this.value === \"\" || isEmptyMulti) {\n this.selectedItems = [];\n this.value = this.multiSelect ? [] : \"\";\n return;\n }\n\n // Back-compat: if someone still passes a JSON stringified array\n if (this.multiSelect && typeof this.value === \"string\") {\n try {\n const parsed = JSON.parse(this.value);\n if (Array.isArray(parsed)) this.value = parsed;\n } catch (_) {\n // ignore non-JSON strings\n }\n }\n\n const getValueForComparison = (item: any) => {\n const val = this.getOptionValue(item);\n return typeof val === \"object\" ? JSON.stringify(val) : String(val);\n };\n\n if (this.multiSelect) {\n // Normalize incoming to an array\n const raw = Array.isArray(this.value) ? this.value : [this.value];\n\n // Build a comparable key set from provided values\n const providedKeys = new Set(\n raw.map((v) => {\n if (this.emitFullObject && typeof v === \"object\") {\n return JSON.stringify(v);\n }\n return String(v);\n }),\n );\n\n // Filter actual option objects whose key is in providedKeys\n this.selectedItems = optionsArray.filter((opt) => {\n const optValue = this.emitFullObject\n ? JSON.stringify(opt)\n : getValueForComparison(opt);\n return providedKeys.has(optValue);\n });\n\n // Normalize this.value to the canonical emitted values\n this.value = this.selectedItems.map((opt) =>\n this.emitFullObject ? opt : this.getOptionValue(opt),\n );\n } else {\n const targetValue =\n this.emitFullObject && typeof this.value === \"object\"\n ? JSON.stringify(this.value)\n : String(this.value);\n\n const selectedOption = optionsArray.find((opt) => {\n const optValue = this.emitFullObject\n ? JSON.stringify(opt)\n : getValueForComparison(opt);\n return optValue === targetValue;\n });\n\n this.selectedItems = selectedOption ? [selectedOption] : [];\n this.value = selectedOption\n ? this.emitFullObject\n ? selectedOption\n : this.getOptionValue(selectedOption)\n : \"\";\n }\n }\n\n private filterOptions(): void {\n const optionsArray = Array.isArray(this.options) ? this.options : [];\n\n const makeRow = (option: any, idx: number) => {\n const label = this.getOptionLabel(option);\n return {\n original: option,\n _idx: idx, // ✅ stable index\n label,\n highlighted: label,\n };\n };\n\n if (!this.searchable || !this.searchQuery.trim()) {\n this.filteredOptions = optionsArray.map(makeRow);\n return;\n }\n\n const query = this.searchQuery.toLowerCase();\n\n this.filteredOptions = optionsArray\n .map(makeRow)\n .filter((row) => String(row.label).toLowerCase().includes(query))\n .map((row) => {\n const regex = new RegExp(`(${query})`, \"gi\");\n return {\n ...row,\n highlighted: String(row.label).replace(\n regex,\n (m: string) => `<span class=\"highlight\">${m}</span>`,\n ),\n };\n });\n }\n\n\n /** Emit search query for hosts / `v-model:search-query` when `searchQuery` changes outside the search input handler. */\n private emitSearchQueryChanged(): void {\n this.dispatchEvent(\n new CustomEvent<SkyComboboxSearchQueryChangedDetail>(\"search-query-changed\", {\n detail: { searchQuery: this.searchQuery },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private handleInput(event: InputEvent): void {\n if (this.disabled || this.readonly) return;\n this.searchQuery = (event.target as HTMLInputElement).value;\n const optionsLength = Array.isArray(this.options) ? this.options.length : 0;\n const shouldDebounce =\n this.searchable &&\n optionsLength > SkyCombobox._SEARCH_DEBOUNCE_OPTIONS_THRESHOLD;\n\n const applyFilter = () => {\n this.filterOptions();\n this.emitSearchQueryChanged();\n };\n\n if (shouldDebounce) {\n if (this._searchDebounceId != null) clearTimeout(this._searchDebounceId);\n this._searchDebounceId = setTimeout(() => {\n this._searchDebounceId = null;\n applyFilter();\n }, SkyCombobox._SEARCH_DEBOUNCE_MS);\n } else {\n applyFilter();\n }\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n if (this._searchDebounceId != null) {\n clearTimeout(this._searchDebounceId);\n this._searchDebounceId = null;\n }\n }\n\n private handleClear(): void {\n if (this.disabled || this.readonly) return;\n\n const hasSelection = this.multiSelect\n ? this.selectedItems.length > 0\n : !!this.value;\n\n if (this.enforceMinOneSelection && hasSelection) {\n return;\n }\n this.value = this.multiSelect ? [] : \"\";\n this.selectedItems = [];\n this.searchQuery = \"\";\n this.emitSearchQueryChanged();\n this.open = false;\n\n this.dispatchEvent(\n new CustomEvent<SkyComboboxValueChangedDetail>(\"value-changed\", {\n detail: {\n value: this.value,\n selectedItems: [],\n isFilteredSelection: false,\n },\n bubbles: true,\n composed: true,\n }),\n );\n\n this.syncFormValue();\n this.syncValidity();\n }\n\n selectOption(option: any) {\n if (this.disabled || this.readonly) return;\n\n // Get the actual value to emit based on configuration\n const getEmittedValue = (item: any) => {\n return this.emitFullObject ? item : this.getOptionValue(item);\n };\n\n const keyOf = (o: any) => {\n const val = this.getOptionValue(o);\n return typeof val === \"object\" ? JSON.stringify(val) : String(val);\n };\n\n const wasFiltered = this.searchQuery.trim() !== \"\";\n\n if (!this.multiSelect) {\n const alreadySelected =\n this.selectedItems.length &&\n keyOf(this.selectedItems[0]) === keyOf(option);\n\n if (alreadySelected && this.enforceMinOneSelection) {\n this.open = false;\n return;\n }\n\n if (alreadySelected) {\n this.selectedItems = [];\n this.value = \"\";\n } else {\n this.selectedItems = [option];\n this.value = getEmittedValue(option);\n }\n\n this.validateInput();\n\n this.dispatchEvent(\n new CustomEvent(\"value-changed\", {\n detail: {\n value: this.value,\n selectedItems: this.selectedItems,\n emittedValues: this.selectedItems.map(getEmittedValue),\n isFilteredSelection: wasFiltered,\n },\n bubbles: true,\n composed: true,\n }),\n );\n\n this.searchQuery = \"\";\n this.emitSearchQueryChanged();\n this.dropdownPopover.closePopover(\"api\");\n this.syncFormValue();\n this.syncValidity();\n this.requestUpdate();\n return;\n }\n\n // Multi-select branch\n const index = this.selectedItems.findIndex(\n (item) => keyOf(item) === keyOf(option),\n );\n\n let nextSelected: any[];\n\n if (index > -1) {\n nextSelected = [\n ...this.selectedItems.slice(0, index),\n ...this.selectedItems.slice(index + 1),\n ];\n } else {\n nextSelected = [...this.selectedItems, option];\n }\n\n if (this.enforceMinOneSelection && nextSelected.length === 0) {\n return;\n }\n\n this.selectedItems = nextSelected;\n this.value = nextSelected.map(getEmittedValue);\n\n this.validateInput();\n\n this.dispatchEvent(\n new CustomEvent(\"value-changed\", {\n detail: {\n value: this.value,\n selectedItems: this.selectedItems,\n emittedValues: this.value,\n isFilteredSelection: wasFiltered,\n },\n bubbles: true,\n composed: true,\n }),\n );\n\n this.syncFormValue();\n this.syncValidity();\n this.open = true;\n this.requestUpdate();\n }\n\n toggleHiddenChips(e: Event) {\n e.stopPropagation();\n e.preventDefault();\n if (this.disabled || this.readonly) return;\n\n // close main dropdown if open\n if (this.open) {\n this.dropdownPopover.closePopover(\"api\");\n }\n\n this.hiddenPopover.toggle();\n }\n\n\n renderHiddenChipsDropdown() {\n return html`\n <div\n class=\"hidden-chips-dropdown\"\n part=\"hidden-chips-dropdown\"\n popover=\"manual\"\n @toggle=${this.hiddenPopover.onToggle}\n @click=${(e: MouseEvent) => e.stopPropagation()}\n style=\"\n left: var(--sky-hc-left, 0px);\n top: var(--sky-hc-top, 0px);\n width: var(--sky-hc-width, max-content);\n z-index: ${this.zIndex};\n \"\n >\n ${repeat(\n this.selectedItems.slice(this.visibleChips),\n (item) => String(this.getOptionValue(item)),\n (item) => html`\n <div class=\"hidden-chip-inner\" part=\"hidden-chip-inner\">\n <span part=\"hidden-chip-label\">\n ${this.truncateText(String(this.getOptionLabel(item)), this.chipSize)}\n </span>\n <sky-icon\n part=\"remove-chip-icon\"\n class=\"remove-chip-inner\"\n icon=\"ion:close\"\n @click=${(e: MouseEvent) => {\n e.stopPropagation();\n this.removeChip(item);\n }}\n ></sky-icon>\n </div>\n `,\n )}\n </div>\n `;\n }\n\n removeChip(option: any) {\n if (this.disabled || this.readonly) return;\n const keyOf = (o: any) => String(this.getOptionValue(o));\n\n const next = this.selectedItems.filter(\n (item) => keyOf(item) !== keyOf(option),\n );\n\n // 🚫 prevent going below 1 selection when enforced\n if (this.enforceMinOneSelection && next.length === 0) {\n return;\n }\n\n this.selectedItems = next;\n if (this.selectedItems.length <= this.visibleChips) {\n this.hiddenPopover.closePopover(\"api\");\n }\n\n if (this.multiSelect) {\n const valuesArray = this.selectedItems.map((opt) =>\n this.emitFullObject ? opt : this.getOptionValue(opt),\n );\n this.value = valuesArray;\n\n this.dispatchEvent(\n new CustomEvent(\"value-changed\", {\n detail: {\n value: valuesArray,\n selectedItems: [...this.selectedItems],\n emittedValues: valuesArray,\n isFilteredSelection: false,\n },\n bubbles: true,\n composed: true,\n }),\n );\n } else {\n this.value = \"\";\n this.dispatchEvent(\n new CustomEvent(\"value-changed\", {\n detail: {\n value: this.value,\n selectedItems: [],\n isFilteredSelection: false,\n },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n this.syncFormValue();\n this.syncValidity();\n this.validateInput();\n this.requestUpdate();\n }\n\n renderChips() {\n if (!this.multiSelect && this.selectedItems.length) {\n return html`\n <span class=\"chip\" single-select part=\"single-select-chip\">\n <span class=\"chip-label\" part=\"chip-label\"\n >${this.getOptionLabel(this.selectedItems[0])}</span\n >\n </span>\n `;\n }\n\n const visible = Array.isArray(this.selectedItems)\n ? this.selectedItems.slice(0, this.visibleChips)\n : [];\n const overflow = this.selectedItems.length - this.visibleChips;\n return html`\n ${repeat(\n visible,\n (item) => String(this.getOptionValue(item)),\n (item) => html`\n <span class=\"chip\" ?compact=${this.compact} part=\"chip\">\n <span class=\"chip-label\" part=\"chip-label\"\n >${this.truncateText(String(this.getOptionLabel(item)), this.chipSize)}</span\n >\n ${when(\n this.multiSelect,\n () => html`\n <sky-icon\n class=\"remove-chip\"\n part=\"remove-chip-icon\"\n ?compact=${this.compact}\n @click=${(e: MouseEvent) => {\n e.stopPropagation();\n this.removeChip(item);\n }}\n icon=\"ion:close\"\n ></sky-icon>\n `,\n )}\n </span>\n `,\n )}\n ${when(\n overflow > 0,\n () => html`\n <span\n class=\"chip overflow-chip\"\n part=\"overflow-chip\"\n style=\"cursor:pointer\"\n ?compact=${this.compact}\n @click=${this.toggleHiddenChips}\n >\n + ${overflow}\n </span>\n `,\n )}\n `;\n }\n\n handleKeydown(event: KeyboardEvent) {\n if ((event.target as HTMLElement)?.closest(\".search-container\")) return;\n const { key, shiftKey } = event;\n\n if (!this.open && (key === \"ArrowDown\" || key === \"ArrowUp\" || key === \"Enter\")) {\n this.dropdownPopover.openPopover();\n event.preventDefault();\n return;\n }\n\n if (!this.open) return;\n\n const hasSearchRow = this.searchable || this.addOption;\n const firstSelectableIndex =\n this.multiSelect && this.selectAll\n ? hasSearchRow\n ? 1\n : 0\n : this.headerRows;\n\n const minIndex = firstSelectableIndex;\n const maxIndex =\n this.headerRows + Math.max(0, this.filteredOptions.length) - 1;\n\n if (this.activeIndex < minIndex) this.activeIndex = minIndex;\n\n if (key === \"ArrowDown\") {\n const was = this.activeIndex < minIndex ? minIndex : this.activeIndex;\n this.activeIndex = was >= maxIndex ? minIndex : was + 1;\n this.scrollActiveItemIntoView();\n event.preventDefault();\n return;\n }\n\n if (key === \"ArrowUp\") {\n const was = this.activeIndex < minIndex ? minIndex : this.activeIndex;\n this.activeIndex = was <= minIndex ? maxIndex : was - 1;\n this.scrollActiveItemIntoView();\n event.preventDefault();\n return;\n }\n\n if (key === \"Tab\") {\n if (shiftKey) {\n const was = this.activeIndex < minIndex ? minIndex : this.activeIndex;\n this.activeIndex = was <= minIndex ? maxIndex : was - 1;\n } else {\n const was = this.activeIndex < minIndex ? minIndex : this.activeIndex;\n this.activeIndex = was >= maxIndex ? minIndex : was + 1;\n }\n this.scrollActiveItemIntoView();\n event.preventDefault();\n return;\n }\n\n if (key === \"Enter\") {\n event.preventDefault();\n event.stopPropagation();\n this.commitDropdownEnter();\n return;\n }\n\n if (this.readonly) {\n if (key === \"Escape\") {\n this.open = false;\n event.preventDefault();\n }\n return;\n }\n\n if (key === \"Home\") {\n this.activeIndex = minIndex;\n this.scrollActiveItemIntoView();\n event.preventDefault();\n return;\n }\n\n if (key === \"End\") {\n this.activeIndex = Math.max(minIndex, maxIndex);\n this.scrollActiveItemIntoView();\n event.preventDefault();\n return;\n }\n }\n\n private onSearchKeydown = (e: KeyboardEvent) => {\n const { key, shiftKey } = e;\n\n if (key === \"Enter\") {\n e.preventDefault();\n e.stopPropagation();\n this.commitDropdownEnter();\n return;\n }\n\n if (key === \"ArrowDown\" || key === \"ArrowUp\" || key === \"Tab\") {\n e.preventDefault();\n e.stopPropagation();\n\n const hasSearchRow = this.searchable || this.addOption;\n const firstSelectableIndex =\n this.multiSelect && this.selectAll\n ? hasSearchRow\n ? 1\n : 0\n : this.headerRows;\n\n const minIndex = firstSelectableIndex;\n const maxIndex =\n this.headerRows + Math.max(0, this.filteredOptions.length) - 1;\n\n const dir = key === \"ArrowUp\" || (key === \"Tab\" && e.shiftKey) ? -1 : 1;\n if (this.activeIndex < minIndex) this.activeIndex = minIndex;\n else\n this.activeIndex =\n this.activeIndex + dir < minIndex\n ? maxIndex\n : this.activeIndex + dir > maxIndex\n ? minIndex\n : this.activeIndex + dir;\n\n this.scrollActiveItemIntoView();\n }\n\n if (key === \"Escape\") {\n e.preventDefault();\n e.stopPropagation();\n this.dropdownPopover.closePopover(\"escape\");\n return;\n }\n };\n\n /** Number of non-option rows before the first option (search + select-all). */\n private get headerRows(): number {\n let n = 0;\n if (this.searchable || this.addOption) n += 1;\n if (this.multiSelect && this.selectAll) n += 1;\n return n;\n }\n\n\n private getOptionByActiveIndex(): {\n kind: \"search\" | \"select-all\" | \"option\";\n optionIndex?: number;\n } | null {\n if (!this.open) return null;\n const idx = this.activeIndex;\n if (idx < 0) return null;\n\n if (this.searchable || this.addOption) {\n if (idx === 0) return { kind: \"search\" };\n }\n\n const selectAllBase = this.searchable || this.addOption ? 1 : 0;\n if (this.multiSelect && this.selectAll && idx === selectAllBase) {\n return { kind: \"select-all\" };\n }\n\n const optionIndex = idx - this.headerRows;\n if (optionIndex >= 0 && optionIndex < this.filteredOptions.length) {\n return { kind: \"option\", optionIndex };\n }\n return null;\n }\n\n /**\n * Commits the current keyboard highlight on Enter (search row vs select-all vs option).\n * Shared by {@link handleKeydown} and {@link onSearchKeydown} so focus in the search\n * field matches the same semantics as the input wrapper.\n */\n private commitDropdownEnter(): void {\n const target = this.getOptionByActiveIndex();\n if (!target) return;\n\n if (target.kind === \"search\") {\n if (this.addOption && this.canAddaddOption()) {\n this.dispatchEvent(\n new CustomEvent(\"add-new-option\", {\n detail: { value: this.searchQuery.trim() },\n bubbles: true,\n composed: true,\n }),\n );\n this.searchQuery = \"\";\n this.emitSearchQueryChanged();\n this.filterOptions();\n } else if (this.filteredOptions.length > 0) {\n this.selectOption(this.filteredOptions[0].original);\n this.searchQuery = \"\";\n this.emitSearchQueryChanged();\n }\n return;\n }\n if (target.kind === \"select-all\") {\n this.toggleSelectAll();\n return;\n }\n if (target.kind === \"option\" && typeof target.optionIndex === \"number\") {\n const selectedOption =\n this.filteredOptions[target.optionIndex].original;\n this.selectOption(selectedOption);\n this.searchQuery = \"\";\n this.emitSearchQueryChanged();\n }\n }\n\n /** Focus logic when opening the dropdown. */\n private focusOnOpen() {\n const search = this.searchInputEl;\n if (search) {\n if (document.activeElement !== search) {\n requestAnimationFrame(() => search.focus());\n }\n\n this.activeIndex = 0;\n this.scrollActiveItemIntoView();\n return;\n }\n\n let optionIdx = 0;\n if (this.selectedItems.length > 0) {\n const firstSelVal = this.getOptionValue(this.selectedItems[0]);\n const idxInFiltered = this.filteredOptions.findIndex(\n (o) => this.getOptionValue(o.original) === firstSelVal,\n );\n if (idxInFiltered >= 0) optionIdx = idxInFiltered;\n }\n this.activeIndex = this.headerRows + optionIdx;\n this.scrollActiveItemIntoView();\n }\n\n private canAddaddOption(): boolean {\n if (!this.addOption) return false;\n const q = this.searchQuery.trim();\n if (!q) return false;\n\n // Ensure options is always an array\n const optionsArray = Array.isArray(this.options) ? this.options : [];\n\n const dup = optionsArray.some((opt) => {\n const label = String(this.getOptionLabel(opt) || \"\").toLowerCase();\n const val = (this.getOptionValue(opt) ?? \"\").toString().toLowerCase();\n return label === q.toLowerCase() || val === q.toLowerCase();\n });\n return !dup;\n }\n private handleAddaddOption = (e: MouseEvent) => {\n e.stopPropagation();\n if (this.disabled || this.readonly) return;\n if (!this.canAddaddOption()) return;\n\n const value = this.searchQuery.trim();\n\n this.dispatchEvent(\n new CustomEvent(\"add-new-option\", {\n detail: { value },\n bubbles: true,\n composed: true,\n }),\n );\n\n this.searchQuery = \"\";\n this.emitSearchQueryChanged();\n this.filterOptions();\n };\n\n scrollActiveItemIntoView() {\n const rows = Array.from(this.rowEls);\n const active = rows.find(\n (r) => Number(r.dataset.rowIndex) === this.activeIndex,\n );\n active?.scrollIntoView({ block: \"nearest\", behavior: \"smooth\" });\n }\n\n toggleDropdown(event: MouseEvent) {\n event.stopPropagation();\n if (this.disabled || this.readonly) return;\n\n // close hidden chips if open\n if (this.hiddenChipsOpen) {\n this.hiddenPopover.closePopover(\"api\");\n }\n\n this.validationActive = true;\n this.dropdownPopover.toggle();\n }\n\n\n\n renderDropdown() {\n return html`\n <div\n class=\"dropdown\"\n part=\"dropdown\"\n popover=\"manual\"\n @toggle=${this.dropdownPopover.onToggle}\n @click=${(e: MouseEvent) => e.stopPropagation()}\n style=\"\n left: var(--sky-dd-left, 0px);\n top: var(--sky-dd-top, 0px);\n min-width: var(--sky-dd-width, 100%);\n \"\n >\n ${when(\n this.searchable || this.addOption,\n () => html`\n <div\n class=\"search-container\"\n data-row-index=\"0\"\n part=\"search-container\"\n >\n <sky-icon icon=\"ion:search\"></sky-icon>\n\n <input\n .value=${this.searchQuery}\n part=\"search-input\"\n tabindex=\"0\"\n ?readonly=${this.readonly ||\n (!this.searchable && !this.addOption)}\n @input=${this.searchable || this.addOption\n ? this.handleInput\n : null}\n @keydown=${this.onSearchKeydown}\n @focus=${this.searchable || this.addOption\n ? this.handleFocus\n : null}\n @blur=${this.searchable || this.addOption\n ? this.handleBlur\n : null}\n ?compact=${this.compact}\n ?disabled=${this.disabled}\n placeholder=${this.searchPlaceholder}\n class=\"input\"\n />\n\n ${when(\n this.addOption,\n () => html`\n <sky-icon\n class=\"new-option-btn\"\n icon=\"ion:add\"\n part=\"add-option-icon\"\n title=\"Add as new option\"\n aria-label=\"Add as new option\"\n @click=${this.handleAddaddOption}\n ></sky-icon>\n `,\n )}\n </div>\n `,\n )}\n\n<div class=\"dropdown-scroller\">\n ${when(this.open, () => html`\n ${when(\n this.multiSelect && this.selectAll && this.filteredOptions.length,\n () => {\n const selectAllRowIndex = this.searchable || this.addOption ? 1 : 0;\n const selectAllClasses = classMap({\n \"dropdown-item\": true,\n active: this.activeIndex === selectAllRowIndex,\n selected: this.isAllFilteredSelected(),\n });\n return html`\n <div\n class=${selectAllClasses}\n data-row-index=${selectAllRowIndex}\n style=\"justify-content: ${this.justify};\"\n part=\"select-all\"\n @click=${this.toggleSelectAll}\n >\n <sky-checkbox\n .checked=${this.isAllFilteredSelected()}\n readonly\n ></sky-checkbox>\n Select All\n </div>\n `;\n },\n )}\n ${when(\n this.filteredOptions.length > 0,\n () => repeat(\n this.filteredOptions,\n ({ original, _idx }) => `${_idx}-${String(this.getOptionValue(original))}`,\n ({ original, highlighted, _idx }, index) => {\n const slotName = `option-${_idx}`;\n const hasSlot = this.optionSlotSet.has(slotName);\n\n const keyOf = (o: any) =>\n String(this.getOptionValue(o.original ?? o));\n const isSelected =\n Array.isArray(this.selectedItems) &&\n this.selectedItems.some(\n (item) => keyOf(item) === keyOf(original),\n );\n const rowIndex = this.headerRows + index;\n const isActive = rowIndex === this.activeIndex;\n const itemClasses = classMap({\n \"dropdown-item\": true,\n active: isActive,\n selected: isSelected,\n });\n\n return html`\n <div\n class=${itemClasses}\n data-row-index=${rowIndex}\n style=\"justify-content: ${this.justify};\"\n part=\"option\"\n @click=${() => this.selectOption(original)}\n ?compact=${this.compact}\n >\n ${when(\n this.multiSelect,\n () => html` <sky-checkbox\n .checked=${isSelected}\n readonly\n ></sky-checkbox>`,\n )}\n ${when(\n hasSlot,\n () => html`\n <div style=\"display: flex; gap: 8px;width:100%\">\n <slot name=${slotName}>\n <span\n class=\"highlighted-text\"\n part=\"highlighted-text\"\n >${unsafeHTML(highlighted)}</span\n >\n </slot>\n </div>\n `,\n () => html`<span\n class=\"highlighted-text\"\n part=\"highlighted-text\"\n >${unsafeHTML(highlighted)}</span\n >`,\n )}\n </div>\n `;\n },\n ),\n () => html`<div\n class=\"dropdown-item\"\n part=\"no-options\"\n data-row-index=${this.headerRows}\n >\n No options found\n </div>`,\n )}\n `)}\n </div>\n </div>\n `;\n }\n\n\n getOptionValue(option: any): any {\n if (this.emitFullObject) {\n return option; // Return the full object\n }\n\n // When emitFullObject is false, return the emittedKey value\n if (typeof option === \"object\" && option !== null) {\n // First try the emittedKey\n if (this.emittedKey in option) {\n return option[this.emittedKey];\n }\n // Fallback to any value property\n if (\"value\" in option) {\n return option.value;\n }\n // Fallback to the object itself\n return option;\n }\n\n // For primitives, return as-is\n return option;\n }\n\n getOptionLabel(option: any): string {\n if (!option) return \"\";\n\n // Ensure options is an array before calling find/map methods\n const optionsArray = Array.isArray(this.options) ? this.options : [];\n\n if (\n this.displayKey &&\n typeof option === \"object\" &&\n option[this.displayKey]\n ) {\n return String(option[this.displayKey]);\n }\n\n if (typeof option === \"object\") {\n const stringValues = Object.values(option).filter(\n (value) => typeof value === \"string\",\n ) as string[];\n return stringValues.length > 0 ? stringValues[0]! : JSON.stringify(option);\n }\n\n return String(option);\n }\n\n renderValidationErrors() {\n if (!this.showErrors || !this.validationActive) return null;\n\n const msgs = this.getErrorMessages(); // ✅ respects single/all/none\n\n if (!msgs.length) return null;\n\n const errId = `${this.id || \"sky-combobox\"}-errors`;\n\n return html`\n <div class=\"progress-message\">\n <ul id=${errId} class=\"error-list\" part=\"error-list\">\n ${repeat(msgs, (m) => m, (m) => html`<li class=\"error\" part=\"error-item\">${m}</li>`)}\n </ul>\n </div>\n `;\n }\n\n getErrorMessages() {\n const errs = Array.isArray(this.validationErrors)\n ? this.validationErrors\n : [];\n switch (this.errorDisplayMode) {\n case \"single\":\n return errs.slice(0, 1);\n case \"all\":\n return errs;\n case \"none\":\n default:\n return [];\n }\n }\n\n handleIconClick(position: \"left\" | \"right\", event: MouseEvent) {\n this.dispatchEvent(\n new CustomEvent(\"icon-click\", {\n detail: { position, event },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private onIconSlotChange = () => {\n this.hasLeftIcon = (this.iconLeftEls?.length ?? 0) > 0;\n this.hasRightIcon = (this.iconRightEls?.length ?? 0) > 0;\n };\n\n override render() {\n const leftIconClasses = classMap({ \"icon-slot\": true, left: true, focused: this.focused });\n const rightIconClasses = classMap({ \"icon-slot\": true, right: true, focused: this.focused });\n const placeholderClasses = classMap({\n \"placeholder-label\": true,\n active: this.selectedItems.length > 0,\n });\n return html`\n <div class=\"combo-box-container\" part=\"combo-box-container\">\n ${when(this.label, () => html`<div class=\"label\" part=\"label\">${this.label}</div>`)}\n <div\n class=\"input-wrapper\"\n tabindex=\"0\"\n part=\"input-wrapper\"\n ?disabled=${this.disabled}\n ?compact=${this.compact}\n ?loading=${this.loading}\n ?open=${this.open}\n ?invalid=${this.invalid}\n @click=${(e: MouseEvent) => {\n if (!this.disabled && !this.readonly) {\n this.toggleDropdown(e);\n }\n }}\n @keydown=${this.handleKeydown}\n >\n <!-- Left Icon or Loading Indicator -->\n <div\n class=${leftIconClasses}\n part=\"icon-slot\"\n ?filled=${this.hasLeftIcon}\n @click=${(e: MouseEvent) => this.handleIconClick(\"left\", e)}\n >\n <slot name=\"icon-left\" @slotchange=${this.onIconSlotChange}></slot>\n </div>\n ${when(\n this.selectedItems.length > 0,\n () => html`\n <div\n class=\"chip-container\"\n part=\"chip-container\"\n ?compact=${this.compact}\n >\n ${this.renderChips()}\n </div>\n `,\n () => html`<label\n class=${placeholderClasses}\n part=\"placeholder-label\"\n ?compact=${this.compact}\n >\n <span style=\"color:${this.prefixColor}\">${this.prefix}</span\n >${this.placeholder}<span style=\"color:${this.suffixColor}\"\n >${this.suffix}</span\n >\n </label>`,\n )}\n ${when(\n this.clearable &&\n !this.enforceMinOneSelection &&\n (this.value || this.selectedItems.length),\n () => html`<sky-icon\n class=\"clear-button\"\n part=\"clear-button\"\n @click=${this.handleClear}\n ?loading=${this.loading}\n icon=\"ion:close\"\n ></sky-icon>`,\n )}\n ${when(\n this.loading,\n () => html`<div class=\"loading-indicator right\"></div>`,\n () => html`<div\n part=\"icon-slot\"\n class=${rightIconClasses}\n ?filled=${this.hasRightIcon}\n @click=${(e: MouseEvent) => this.handleIconClick(\"right\", e)}\n >\n <slot name=\"icon-right\" @slotchange=${this.onIconSlotChange}></slot>\n </div>`,\n )}\n <sky-icon\n class=\"dropdown-button\"\n part=\"dropdown-button\"\n @click=${(e: MouseEvent) => {\n if (!this.disabled && !this.readonly) {\n this.toggleDropdown(e);\n }\n }}\n icon=${this.open ? \"ion:ios-arrow-up\" : \"ion:chevron-down\"}\n >\n </sky-icon>\n </div>\n ${this.renderHiddenChipsDropdown()} ${this.renderDropdown()}\n ${this.renderValidationErrors()}\n <slot style=\"display:none\" @slotchange=${this.refreshOptionSlots}></slot>\n </div>\n `;\n }\n}\n"],"names":["SkyCombobox","FormControlBase","constructor","super","this","value","placeholder","searchPlaceholder","label","_options","chipSize","color","clearable","loading","compact","disabled","searchable","multiSelect","visibleChips","selectAll","_validations","showErrors","errorDisplayMode","required","emitFullObject","emittedKey","displayKey","addOption","validationArrayFormat","prefix","suffix","prefixColor","suffixColor","justify","zIndex","height","requiredMessage","readonly","enforceMinOneSelection","openAbove","validationActive","invalid","variant","searchQuery","filteredOptions","focused","open","selectedItems","hiddenChipsOpen","activeIndex","validationErrors","validationStatus","hasLeftIcon","hasRightIcon","optionSlotSet","Set","_searchDebounceId","dropdownPopover","PopoverController","getAnchor","inputWrapperEl","getPopover","dropdownEl","cssVarLeft","cssVarTop","cssVarWidth","getPlacement","getAlign","getGap","getPadding","getMatchAnchorWidth","getMaxWidthToViewport","getMaxWidthMode","getFlip","getFlipOrder","getAnimateReposition","getRepositionMs","getCloseOnEscape","getCloseOnOutside","getRestoreFocusOnClose","onOpenChange","meta","filterOptions","requestAnimationFrame","focusOnOpen","emitSearchQueryChanged","hiddenPopover","closePopover","overflowChipEl","hiddenDropdownEl","refreshOptionSlots","set","querySelectorAll","forEach","el","slotName","slot","add","onSearchKeydown","e","key","shiftKey","preventDefault","stopPropagation","commitDropdownEnter","hasSearchRow","minIndex","headerRows","maxIndex","Math","max","length","dir","scrollActiveItemIntoView","handleAddaddOption","canAddaddOption","trim","dispatchEvent","CustomEvent","detail","bubbles","composed","onIconSlotChange","iconLeftEls","iconRightEls","captureDefaultValue","options","old","Array","isArray","requestUpdate","validations","connectedCallback","hasAttribute","tabIndex","firstUpdated","refreshTargets","getFormValue","name","formData","FormData","item","JSON","stringify","String","getOptionValue","append","setValueFromFormState","state","values","getAll","parsed","parse","setValueFromArray","stringValue","get","toString","syncSelectedItemsWithValue","syncFormValue","internals","setFormValue","v","optionsArray","filter","option","optionValue","optionValueString","some","parsedValue","map","getValidityAnchor","isEmpty","getNativeControl","getCustomErrorMessage","onFormReset","onFormDisabled","onFormStateRestore","toggleSelectAll","keyOf","o","isAllFilteredSelected","filteredKeys","opt","original","nextSelected","has","selectedKeys","additions","valuesArray","emittedValues","isFilteredSelection","syncValidity","every","truncateText","text","maxLength","slice","validateInput","target","push","res","errors","validateForForm","focus","searchInputEl","blur","handleFocus","reset","openDropdown","openPopover","closeDropdown","clearSelection","handleClear","handleBlur","updated","changedProperties","style","setProperty","resolveColor","willUpdate","isEmptyMulti","_","getValueForComparison","val","raw","providedKeys","optValue","targetValue","selectedOption","find","makeRow","idx","getOptionLabel","_idx","highlighted","query","toLowerCase","row","includes","regex","RegExp","replace","m","handleInput","event","optionsLength","shouldDebounce","_SEARCH_DEBOUNCE_OPTIONS_THRESHOLD","applyFilter","clearTimeout","setTimeout","_SEARCH_DEBOUNCE_MS","disconnectedCallback","hasSelection","selectOption","getEmittedValue","wasFiltered","alreadySelected","index","findIndex","toggleHiddenChips","toggle","renderHiddenChipsDropdown","html","onToggle","repeat","removeChip","next","renderChips","visible","overflow","when","handleKeydown","closest","was","n","getOptionByActiveIndex","kind","selectAllBase","optionIndex","search","document","activeElement","optionIdx","firstSelVal","idxInFiltered","q","active","from","rowEls","r","Number","dataset","rowIndex","scrollIntoView","block","behavior","toggleDropdown","renderDropdown","selectAllRowIndex","selectAllClasses","classMap","selected","hasSlot","isSelected","isActive","itemClasses","unsafeHTML","stringValues","Object","renderValidationErrors","msgs","getErrorMessages","errId","id","errs","handleIconClick","position","render","leftIconClasses","left","rightIconClasses","right","placeholderClasses","dependencies","SkyIcon","SkyCheckbox","styles","css","shadowRootOptions","LitElement","delegatesFocus","__decorateClass","property","prototype","type","Boolean","reflect","attribute","queryAll","queryAssignedElements","customElement"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,4 +1,45 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{css as e,LitElement as t,html as o}from"lit";import{property as i,state as s,query as n,customElement as a}from"lit/decorators.js";import{when as r}from"lit/directives/when.js";import{createRef as d,ref as l}from"lit/directives/ref.js";import{classMap as c}from"lit/directives/class-map.js";import{animate as h}from"@lit-labs/motion";import{SkyIcon as p}from"../sky-icon/sky-icon.js";var g=Object.defineProperty,y=Object.getOwnPropertyDescriptor,m=(e,t,o,i)=>{for(var s,n=i>1?void 0:i?y(t,o):t,a=e.length-1;a>=0;a--)(s=e[a])&&(n=(i?s(t,o,n):s(n))||n);return i&&n&&g(t,o,n),n};let u=0,f=0,b=class extends t{constructor(){super(),this.open=!1,this.closable=!1,this.message="",this.overlay=!1,this.width="auto",this.separator=!1,this.persistent=!1,this.closeOnEsc=!1,this.headerPadding="sm",this.bodyPadding="sm",this.footerPadding="sm",this.highlightOnOutsideClick=!0,this._hasHeader=!1,this._hasBody=!1,this._hasFooter=!1,this._isClosing=!1,this._openAnimation=null,this._closeAnimation=null,this._highlightAnimation=null,this.dialogRef=d(),this._onBackdropPointerDown=e=>{const t=this.dialogElement;t&&t.open&&e.target===t&&(this.persistent?this._highlightDialog():this._requestClose("backdrop"))},this._onNativeClose=()=>{this.open&&requestAnimationFrame(()=>{this.dialogElement?.open||this.dialogElement?.showModal()})},this._onHeaderSlotChange=e=>{const t=e.target;this._hasHeader=this._slotHasContent(t)},this._onBodySlotChange=e=>{const t=e.target;this._hasBody=this._slotHasContent(t)},this._onFooterSlotChange=e=>{const t=e.target;this._hasFooter=this._slotHasContent(t)},this._onKeyDown=e=>{"Escape"===e.key&&(e.preventDefault(),e.stopPropagation(),!this.persistent&&this.closeOnEsc?this._requestClose("escape"):this._highlightDialog())},this._handleCancel=this._handleCancel.bind(this)}firstUpdated(){const e=this.dialogElement;e&&(e.addEventListener("keydown",this._onKeyDown,{capture:!0}),e.addEventListener("pointerdown",this._onBackdropPointerDown),e.addEventListener("cancel",this._handleCancel),e.addEventListener("close",this._onNativeClose))}disconnectedCallback(){const e=this.dialogElement;e&&(e.removeEventListener("keydown",this._onKeyDown,{capture:!0}),e.removeEventListener("pointerdown",this._onBackdropPointerDown),e.removeEventListener("cancel",this._handleCancel),e.removeEventListener("close",this._onNativeClose)),super.disconnectedCallback(),this._unlockScroll(),e?.open&&e.close()}show(){this.open=!0}hide(){this.open=!1}focusDialog(){this.dialogElement&&this.dialogElement.focus()}getDialogElement(){return this.dialogElement}updated(e){e.has("open")&&requestAnimationFrame(()=>{this._handleOpenChange(e.get("open"))})}_handleOpenChange(e){this.dialogElement&&(this.open&&!this.dialogElement.open?(this._lockScroll(),this.dialogElement.showModal(),requestAnimationFrame(()=>{this._animateOpen()})):!this.open&&e&&(this._isClosing=!0,this._animateClose()))}_lockScroll(){"undefined"!=typeof window&&"undefined"!=typeof document&&(0===u&&(f=window.scrollY,window.scrollTo(0,0)),u++,document.documentElement.setAttribute("data-sky-dialog-open","true"))}_unlockScroll(){"undefined"!=typeof window&&"undefined"!=typeof document&&(u=Math.max(0,u-1),0===u&&(document.documentElement.removeAttribute("data-sky-dialog-open"),window.scrollTo(0,f)))}_prefersReducedMotion(){return!("undefined"==typeof window||!window.matchMedia)&&window.matchMedia("(prefers-reduced-motion: reduce)").matches}_animateOpen(){const e=this.dialogElement;if(!e)return;this._openAnimation?.cancel(),this._closeAnimation?.cancel();const t=this._prefersReducedMotion()?0:300,o=e.animate([{opacity:0,transform:"scale(0.95)",transformOrigin:"center center"},{opacity:1,transform:"scale(1)",transformOrigin:"center center"}],{duration:t,easing:"ease-out",fill:"forwards"});o.onfinish=()=>{this.dispatchEvent(new CustomEvent("dialog-opened",{bubbles:!0,composed:!0}))},this._openAnimation=o}_animateClose(){const e=this.dialogElement;if(!e)return;this._openAnimation?.cancel(),this._closeAnimation?.cancel();const t=this._prefersReducedMotion()?0:150,o=e.animate([{opacity:1,transform:"scale(1)",transformOrigin:"center center"},{opacity:0,transform:"scale(0.95)",transformOrigin:"center center"}],{duration:t,easing:"ease-out",fill:"forwards"});o.onfinish=()=>{e.close(),this._unlockScroll(),this._isClosing=!1,this.dispatchEvent(new CustomEvent("dialog-closed",{bubbles:!0,composed:!0}))},this._closeAnimation=o}_handleCancel(e){e.preventDefault(),!this.persistent&&this.closeOnEsc?this._requestClose("escape"):this._highlightDialog()}_highlightDialog(){if(!this.highlightOnOutsideClick)return;if(this._prefersReducedMotion())return;const e=this.dialogElement;if(!e)return;this._highlightAnimation?.cancel();const t=e.animate([{transform:"scale(1)"},{transform:"scale(1.05)"},{transform:"scale(1)"}],{duration:300,easing:"ease-in-out"});this._highlightAnimation=t}_requestClose(e){this._isClosing||this.dispatchEvent(new CustomEvent("request-close",{detail:{reason:e},bubbles:!0,composed:!0}))}_slotHasContent(e){return e.assignedNodes({flatten:!0}).some(e=>e.nodeType!==Node.TEXT_NODE||!!e.textContent?.trim())}render(){const e={none:!0,xs:!0,sm:!0,md:!0,lg:!0,xl:!0},t=e[this.headerPadding]?this.headerPadding:"md",i=e[this.bodyPadding]?this.bodyPadding:"md",s=e[this.footerPadding]?this.footerPadding:"md",n={};this._hasHeader&&(n[`header-padding-${t}`]=!0,this.separator&&(n["header-separator"]=!0));const a={};return this._hasFooter?(a.actions=!0,a[`footer-padding-${s}`]=!0,this.separator&&(a["footer-separator"]=!0)):a.actions=!0,o`
|
|
2
|
+
<dialog
|
|
3
|
+
part="dialog"
|
|
4
|
+
aria-modal="true"
|
|
5
|
+
style="max-width: ${this.width};"
|
|
6
|
+
@cancel="${this._handleCancel}"
|
|
7
|
+
${l(this.dialogRef)}
|
|
8
|
+
${h({keyframeOptions:{duration:300,easing:"ease-out"}})}
|
|
9
|
+
>
|
|
10
|
+
<slot></slot>
|
|
11
|
+
|
|
12
|
+
${r(this.message,()=>o`
|
|
13
|
+
<p class="message" part="message">${this.message}</p>
|
|
14
|
+
`)}
|
|
15
|
+
|
|
16
|
+
<div class=${c(n)} part="header">
|
|
17
|
+
<slot name="header" @slotchange=${this._onHeaderSlotChange}></slot>
|
|
18
|
+
</div>
|
|
19
|
+
|
|
20
|
+
<div
|
|
21
|
+
class=${c({[`body-padding-${i}`]:this._hasBody})}
|
|
22
|
+
part="content"
|
|
23
|
+
>
|
|
24
|
+
<slot name="body" @slotchange=${this._onBodySlotChange}></slot>
|
|
25
|
+
</div>
|
|
26
|
+
|
|
27
|
+
<div class=${c(a)} part="actions footer">
|
|
28
|
+
<slot name="footer" @slotchange=${this._onFooterSlotChange}></slot>
|
|
29
|
+
</div>
|
|
30
|
+
${r(this.closable,()=>o`
|
|
31
|
+
<button
|
|
32
|
+
class="close-button"
|
|
33
|
+
part="close-button"
|
|
34
|
+
type="button"
|
|
35
|
+
aria-label="Close dialog"
|
|
36
|
+
@click=${()=>this._requestClose("close-button")}
|
|
37
|
+
>
|
|
38
|
+
<sky-icon icon="ion:close"></sky-icon>
|
|
39
|
+
</button>
|
|
40
|
+
`)}
|
|
41
|
+
</dialog>
|
|
42
|
+
`}};b.dependencies={"sky-icon":p},b.styles=e`
|
|
2
43
|
:host {
|
|
3
44
|
display: contents;
|
|
4
45
|
font-family: var(--sky-font);
|
|
@@ -167,46 +208,5 @@ import{__decorate as e,__metadata as t}from"tslib";import{LitElement as o,css as
|
|
|
167
208
|
transition: none;
|
|
168
209
|
}
|
|
169
210
|
}
|
|
170
|
-
|
|
171
|
-
<dialog
|
|
172
|
-
part="dialog"
|
|
173
|
-
aria-modal="true"
|
|
174
|
-
style="max-width: ${this.width};"
|
|
175
|
-
@cancel="${this._handleCancel}"
|
|
176
|
-
${p(this.dialogRef)}
|
|
177
|
-
${g({keyframeOptions:{duration:300,easing:"ease-out"}})}
|
|
178
|
-
>
|
|
179
|
-
<slot></slot>
|
|
180
|
-
|
|
181
|
-
${l(this.message,()=>s`
|
|
182
|
-
<p class="message" part="message">${this.message}</p>
|
|
183
|
-
`)}
|
|
184
|
-
|
|
185
|
-
<div class=${h(n)} part="header">
|
|
186
|
-
<slot name="header" @slotchange=${this._onHeaderSlotChange}></slot>
|
|
187
|
-
</div>
|
|
188
|
-
|
|
189
|
-
<div
|
|
190
|
-
class=${h({[`body-padding-${o}`]:this._hasBody})}
|
|
191
|
-
part="content"
|
|
192
|
-
>
|
|
193
|
-
<slot name="body" @slotchange=${this._onBodySlotChange}></slot>
|
|
194
|
-
</div>
|
|
195
|
-
|
|
196
|
-
<div class=${h(a)} part="actions footer">
|
|
197
|
-
<slot name="footer" @slotchange=${this._onFooterSlotChange}></slot>
|
|
198
|
-
</div>
|
|
199
|
-
${l(this.closable,()=>s`
|
|
200
|
-
<button
|
|
201
|
-
class="close-button"
|
|
202
|
-
part="close-button"
|
|
203
|
-
type="button"
|
|
204
|
-
aria-label="Close dialog"
|
|
205
|
-
@click=${()=>this._requestClose("close-button")}
|
|
206
|
-
>
|
|
207
|
-
<sky-icon icon="ion:close"></sky-icon>
|
|
208
|
-
</button>
|
|
209
|
-
`)}
|
|
210
|
-
</dialog>
|
|
211
|
-
`}};e([n({type:Boolean,reflect:!0}),t("design:type",Object)],f.prototype,"open",void 0),e([n({type:Boolean,reflect:!0}),t("design:type",Object)],f.prototype,"closable",void 0),e([n({type:String}),t("design:type",Object)],f.prototype,"message",void 0),e([n({type:Boolean,reflect:!0}),t("design:type",Object)],f.prototype,"overlay",void 0),e([n({type:String}),t("design:type",Object)],f.prototype,"width",void 0),e([n({type:Boolean,reflect:!0}),t("design:type",Object)],f.prototype,"separator",void 0),e([n({type:Boolean,reflect:!0}),t("design:type",Object)],f.prototype,"persistent",void 0),e([n({type:Boolean,reflect:!0}),t("design:type",Object)],f.prototype,"closeOnEsc",void 0),e([n({type:String,reflect:!0}),t("design:type",String)],f.prototype,"headerPadding",void 0),e([n({type:String,reflect:!0}),t("design:type",String)],f.prototype,"bodyPadding",void 0),e([n({type:String,reflect:!0}),t("design:type",String)],f.prototype,"footerPadding",void 0),e([n({type:Boolean,reflect:!0}),t("design:type",Object)],f.prototype,"highlightOnOutsideClick",void 0),e([a(),t("design:type",Object)],f.prototype,"_hasHeader",void 0),e([a(),t("design:type",Object)],f.prototype,"_hasBody",void 0),e([a(),t("design:type",Object)],f.prototype,"_hasFooter",void 0),e([a(),t("design:type",Object)],f.prototype,"_isClosing",void 0),e([r("dialog"),t("design:type",HTMLDialogElement)],f.prototype,"dialogElement",void 0),f=e([d("sky-dialog"),t("design:paramtypes",[])],f);export{f as SkyDialog};
|
|
211
|
+
`,m([i({type:Boolean,reflect:!0})],b.prototype,"open",2),m([i({type:Boolean,reflect:!0})],b.prototype,"closable",2),m([i({type:String})],b.prototype,"message",2),m([i({type:Boolean,reflect:!0})],b.prototype,"overlay",2),m([i({type:String})],b.prototype,"width",2),m([i({type:Boolean,reflect:!0})],b.prototype,"separator",2),m([i({type:Boolean,reflect:!0})],b.prototype,"persistent",2),m([i({type:Boolean,reflect:!0})],b.prototype,"closeOnEsc",2),m([i({type:String,reflect:!0})],b.prototype,"headerPadding",2),m([i({type:String,reflect:!0})],b.prototype,"bodyPadding",2),m([i({type:String,reflect:!0})],b.prototype,"footerPadding",2),m([i({type:Boolean,reflect:!0})],b.prototype,"highlightOnOutsideClick",2),m([s()],b.prototype,"_hasHeader",2),m([s()],b.prototype,"_hasBody",2),m([s()],b.prototype,"_hasFooter",2),m([s()],b.prototype,"_isClosing",2),m([n("dialog")],b.prototype,"dialogElement",2),b=m([a("sky-dialog")],b);export{b as SkyDialog};
|
|
212
212
|
//# sourceMappingURL=sky-dialog.js.map
|