@ember-eui/core 16.0.3 → 16.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/declarations/-private/accents.d.ts +15 -0
  2. package/declarations/-private/accents.d.ts.map +1 -0
  3. package/declarations/-private/eui-render-node.d.ts +8 -3
  4. package/declarations/-private/eui-render-node.d.ts.map +1 -1
  5. package/declarations/components/eui-accordion.d.ts.map +1 -1
  6. package/declarations/components/eui-combo-box/option-text.d.ts +7 -1
  7. package/declarations/components/eui-combo-box/option-text.d.ts.map +1 -1
  8. package/declarations/components/eui-combo-box.d.ts +2 -1
  9. package/declarations/components/eui-combo-box.d.ts.map +1 -1
  10. package/declarations/components/eui-highlight.d.ts +12 -3
  11. package/declarations/components/eui-highlight.d.ts.map +1 -1
  12. package/declarations/components/eui-toast.d.ts.map +1 -1
  13. package/declarations/utils/eui/combo-box.d.ts +0 -4
  14. package/declarations/utils/eui/combo-box.d.ts.map +1 -1
  15. package/dist/-private/accents.js +40 -0
  16. package/dist/-private/accents.js.map +1 -0
  17. package/dist/-private/eui-render-node.js +6 -4
  18. package/dist/-private/eui-render-node.js.map +1 -1
  19. package/dist/components/eui-accordion.js +17 -3
  20. package/dist/components/eui-accordion.js.map +1 -1
  21. package/dist/components/eui-combo-box/option-text.js +14 -6
  22. package/dist/components/eui-combo-box/option-text.js.map +1 -1
  23. package/dist/components/eui-combo-box.js +1 -1
  24. package/dist/components/eui-combo-box.js.map +1 -1
  25. package/dist/components/eui-highlight.js +22 -8
  26. package/dist/components/eui-highlight.js.map +1 -1
  27. package/dist/components/eui-toast.js +6 -4
  28. package/dist/components/eui-toast.js.map +1 -1
  29. package/dist/utils/eui/combo-box.js +2 -4
  30. package/dist/utils/eui/combo-box.js.map +1 -1
  31. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"eui-combo-box.js","sources":["../../src/components/eui-combo-box.gts"],"sourcesContent":["import 'ember-basic-dropdown/styles';\n\nimport Component from '@glimmer/component';\nimport { getElementZIndex } from '../utils/popover/index.ts';\nimport { cached, tracked } from '@glimmer/tracking';\nimport { isArray } from '@ember/array';\nimport { action } from '@ember/object';\nimport { schedule } from '@ember/runloop';\nimport { service } from '@ember/service';\nimport { htmlSafe, isHTMLSafe } from '@ember/template';\nimport { isEqual } from '@ember/utils';\n\nimport optional from '@nullvoxpopuli/ember-composable-helpers/helpers/optional';\nimport queue from '@nullvoxpopuli/ember-composable-helpers/helpers/queue';\nimport defaultCalculatePosition from 'ember-basic-dropdown/utils/calculate-position';\nimport PowerSelect from 'ember-power-select/components/power-select';\nimport emberPowerSelectIsGroup from 'ember-power-select/helpers/ember-power-select-is-group';\nimport { and, not } from 'ember-truth-helpers';\n\nimport spreadAttributes from '../-private/eui-spread-attributes.ts';\nimport argOrDefault from '../helpers/arg-or-default.ts';\nimport classNames from '../helpers/class-names.ts';\nimport { getEuiThemeContext } from '../utils/emotion/consume.ts';\nimport {\n comboBoxBoxReset,\n comboBoxOptionLabel,\n createPartialStringEqualityOptionMatcher,\n entriesToPowerSelectOptions,\n findNextSelectableIndex,\n flattenComboBoxRows,\n flattenOptionGroups,\n getMatchingEntries,\n isComboBoxGroupLabel,\n isComboBoxOptionChecked,\n isComboBoxOptionSelected,\n selectedOptionForSearchValue,\n transformForCaseSensitivity\n} from '../utils/eui/combo-box.ts';\nimport {\n euiBackgroundColor,\n euiBorderColor,\n euiComboBoxStyles,\n euiFormVariables,\n euiPaddingSize,\n euiPanelStyles,\n euiPopoverPanelStyles,\n euiScreenReaderOnly\n} from '../utils/eui/styles.generated.ts';\nimport { euiClass, useEuiBorealisStyles } from '../utils/eui/styles.ts';\nimport EuiComboBoxOptionText from './eui-combo-box/option-text.gts';\nimport EuiComboBoxCreateOption from './eui-combo-box/create-option.gts';\nimport EuiComboBoxGroup from './eui-combo-box/group.gts';\nimport EuiComboBoxNoMatchesMessage from './eui-combo-box/no-matches-message.gts';\nimport EuiComboBoxOptions from './eui-combo-box/options.gts';\nimport EuiComboBoxSearchMessage from './eui-combo-box/search-message.gts';\nimport EuiComboBoxTrigger from './eui-combo-box/trigger.gts';\n\nimport type EuiI18n from '../services/eui-i18n';\nimport type EuiConfigService from '../services/eui-config';\nimport type {\n EuiComboBoxOptionMatcher,\n EuiComboBoxSortMatchesBy\n} from '../utils/eui/combo-box.ts';\nimport type { EuiComboBoxNode } from './eui-combo-box/node.gts';\nimport type { EuiComboBoxTruncationProps } from './eui-combo-box/option-text.gts';\nimport type { EuiTooltipArgs } from './eui-tool-tip';\nimport type { EuiCss } from '../utils/eui/styles.ts';\nimport type { PopoverAnchorPosition } from './eui-popover';\n\n/**\n * The part of upstream's `inputPopoverProps` (EuiInputPopover props) that\n * applies to the options list here: it is an ember-basic-dropdown panel, not\n * an EuiPopover. `zIndex` replaces the anchor's z-index plus 2000, and\n * `anchorPosition` picks the side (`up*` above, `down*` below) unless\n * `@verticalPosition` is set. `className` and any other key not listed\n * (`data-test-subj`, `aria-*`, …) go on the combo box root, which wraps the\n * input like upstream's popover root. `panelRef`, `popoverRef` and\n * EuiPopover's own focus props do not apply.\n */\nexport interface EuiComboBoxInputPopoverProps {\n /** Class name of the options list panel. */\n panelClassName?: string;\n /** Padding of the panel. Defaults to `'s'`. */\n panelPaddingSize?: 'none' | 'xs' | 's' | 'm' | 'l' | 'xl';\n /** Inline styles of the panel, as a camelCase object (an Emotion class). */\n panelStyle?: Record<string, string | number>;\n /** Minimum width of the panel, when the input is narrower. */\n panelMinWidth?: number;\n /** Extra styles composed last into the panel's class. */\n panelCss?: EuiCss;\n /** Upstream `panelProps`: `className` and `css` of the panel. */\n panelProps?: { className?: string; css?: EuiCss };\n /** The panel's z-index, instead of the anchor's z-index plus 2000. */\n zIndex?: number;\n /** `up*` opens the list above the input, `down*` below it. */\n anchorPosition?: PopoverAnchorPosition;\n /** Extra styles composed last into the combo box's root class. */\n css?: EuiCss;\n /**\n * Closes the list when the page, or an element containing the input,\n * scrolls (scrolling the list or the input does not). Defaults to `true`,\n * as upstream's combo box.\n */\n closeOnScroll?: boolean;\n /**\n * The open list always follows the input when the page scrolls\n * (ember-basic-dropdown); `false` is not supported.\n */\n repositionOnScroll?: boolean;\n /**\n * Distance in px between the input and the list. Defaults to `0`\n * (attached).\n */\n offset?: number;\n /**\n * Minimum distance in px between the list and the edges of the window or\n * of `container`, horizontally: a number, or `[top, right, bottom,\n * left]`. Only applied with `buffer` or `container`; then defaults to\n * `16`.\n */\n buffer?: number | [number, number, number, number];\n /** Keeps the list horizontally within this element's bounds. */\n container?: HTMLElement;\n /**\n * Called with the list's width (the input's, at least `panelMinWidth`)\n * when the combo box renders and whenever the input resizes.\n */\n onPanelResize?: (width: number) => void;\n /** Class of the combo box root (upstream's popover root). */\n className?: string;\n [key: string]: unknown;\n}\n\n/** `inputPopoverProps` keys that are not attributes of the root. */\nconst INPUT_POPOVER_ARGS = [\n 'panelClassName',\n 'panelPaddingSize',\n 'panelStyle',\n 'panelMinWidth',\n 'panelCss',\n 'panelProps',\n 'zIndex',\n 'anchorPosition',\n 'closeOnScroll',\n 'repositionOnScroll',\n 'offset',\n 'buffer',\n 'container',\n 'onPanelResize',\n 'panelRef',\n 'popoverRef',\n 'inputRef',\n 'input',\n 'isOpen',\n 'closePopover',\n 'fullWidth',\n 'disableFocusTrap',\n 'ownFocus',\n 'initialFocus',\n 'focusTrapProps',\n 'attachToAnchor',\n 'display',\n 'hasArrow',\n 'insert',\n 'repositionToCrossAxis',\n 'popoverScreenReaderText',\n 'onPositionChange',\n 'onTrapDeactivation',\n 'shouldAccountForOtherPopovers',\n 'style'\n];\n\n/** Upstream waits before listening, as opening may scroll (Firefox). */\nconst CLOSE_ON_SCROLL_DELAY = 500;\n\nexport type {\n EuiComboBoxNode,\n EuiComboBoxOptionMatcher,\n EuiComboBoxTruncationProps\n};\n\n/** `@onCreateOption`: the value, and all options with groups flattened. */\nexport type EuiComboBoxOnCreateOption = (\n search: string,\n flattenedOptions: any[]\n) => boolean | undefined | void;\n\n/**\n * An option object (options can also be plain strings). Every key is\n * optional; `label` is the text by default (see `@searchField`).\n */\nexport interface EuiComboBoxOptionOption {\n label?: string;\n /** Disables the option. */\n disabled?: boolean;\n /** Pill color, see `EuiBadge`. */\n color?: string;\n /** Text or a component before the label, in the list and the pill. */\n prepend?: EuiComboBoxNode;\n /** Text or a component after the label, in the list and the pill. */\n append?: EuiComboBoxNode;\n /** Tooltip of the option in the list (not on disabled options). */\n toolTipContent?: string;\n /** More `EuiToolTip` arguments for `toolTipContent`. */\n toolTipProps?: Partial<\n Pick<\n EuiTooltipArgs,\n | 'position'\n | 'delay'\n | 'title'\n | 'offset'\n | 'className'\n | 'css'\n | 'anchorClassName'\n >\n >;\n /** Truncation of this option, merged over `@truncationProps`. */\n truncationProps?: EuiComboBoxTruncationProps;\n /** Title of the option text (defaults to the label while truncated by CSS). */\n title?: string;\n /** A group: its options. Groups use `groupName` for their title. */\n options?: unknown[];\n [key: string]: unknown;\n}\n\ninterface PromiseProxy<T> extends Promise<T> {\n content: any;\n}\n\ninterface Select {\n selected: any;\n actions: {\n search: (str: string) => void;\n };\n}\n\nexport interface EuiComboBoxSignature {\n Element: HTMLDivElement;\n Args: {\n /**\n * Allows only one selected option (still passed to `@onChange` as a\n * one-item array). `{ asPlainText: true }` shows the selection as the\n * input's text instead of a pill. Defaults to multiple selection.\n *\n * Not upstream: with a block, a plain text selection is rendered with\n * that block (like the option rows) while nothing is typed, as\n * ember-eui 14 (ember-power-select) did, e.g. for enum values rendered\n * as an avatar and a translated label. The block receives the option,\n * then the select. Typing shows the input's text again, so search\n * works as usual. The input keeps the option's label as its value\n * (what screen readers announce and what typing replaces), so prefer\n * object options with a readable `label` over raw string values.\n * Without a block the input shows the label text, as upstream.\n */\n singleSelection?:\n | boolean\n | {\n asPlainText?: boolean;\n };\n /**\n * Lets the user add the typed text as a new option: shows an \"add\"\n * option when nothing matches (or always, with\n * `@alwaysShowCreateOption`), and Enter or leaving the combo box adds\n * the text (upstream). Called with the search text and all options\n * (groups flattened); return `false` to reject it. Add the result to\n * `@options` / `@selectedOptions` yourself. Text equal to a selected\n * option is not added again, and text equal to the only matching\n * option selects that option.\n */\n onCreateOption?: EuiComboBoxOnCreateOption;\n /** Shows the \"add\" option even when some options match. */\n alwaysShowCreateOption?: boolean;\n /**\n * The options: strings, or objects with a `label` (or `@searchField`).\n * Groups are `{ groupName: 'Fruits', options: [...] }` (or upstream's\n * `{ label: 'Fruits', options: [...] }`). In multiple selection the\n * selected options are not listed (upstream). A promise is supported\n * (shows `@loadingMessage` while pending). Never changed by the combo\n * box; pass a new array to change the options.\n */\n options: any[];\n /**\n * Custom search, e.g. to query a server: `(term, select) => results`\n * (or a promise). Without it the options are filtered locally, by\n * `@searchField` for objects. Selected options are left out of the\n * results in multiple selection.\n */\n search?: (term: string, select: Select) => any[] | PromiseProxy<any[]>;\n /** Key of object options to match the search text against, e.g. `'label'`. */\n searchField?: string;\n /** Shows the invalid state. */\n isInvalid?: boolean;\n /** Stretches the combo box to its container's width. */\n fullWidth?: boolean;\n /** Message shown before typing when `@search` is set. Defaults to \"Type to search\". */\n searchMessage?: string;\n /** Allows typing to filter options. Defaults to `true`. */\n searchEnabled?: boolean;\n /** Shows a button clearing the selection. Defaults to `true`. */\n isClearable?: boolean;\n /** Shows a spinner in the input and the list, e.g. while options load. */\n isLoading?: boolean;\n /** Disables the combo box. */\n isDisabled?: boolean;\n /** @deprecated Has no effect; use `@isDisabled`. */\n readOnly?: boolean;\n /** Component rendered instead of `@searchMessage`. */\n searchMessageComponent?: any;\n /** Smaller combo box, for dense forms. */\n compressed?: boolean;\n /** Called when the input gets focus (which opens the list, upstream). */\n onFocus?: (e: FocusEvent) => void;\n /** Called when the input loses focus. */\n onBlur?: (e: FocusEvent) => void;\n /** Called when the options list closes; return `false` to keep it open. */\n onClose?: (e: Event) => void;\n /** Called when the options list opens; return `false` to keep it closed. */\n onOpen?: (e: Event) => void;\n /**\n * Renders the options list next to the input instead of in a portal\n * at the end of the page (e.g. inside modals with their own scrolling).\n */\n renderInPlace?: boolean;\n /**\n * Text (HTML) of the \"add\" option; `{searchText}` is replaced by the\n * typed text. Defaults to \"Add **{searchText}** as custom option\".\n */\n customOptionText?: string;\n /** Message while `@options` or `@search` load. Defaults to \"Loading options...\". */\n loadingMessage?: any;\n /** Component rendering each selected option (pill). */\n selectedItemComponent?: any;\n /** Component rendered above the options. */\n beforeOptionsComponent?: any;\n /** Component rendered instead of `@placeholder`. */\n placeholderComponent?: any;\n /** Component rendered below the options. */\n afterOptionsComponent?: any;\n /** Placeholder of the search input. */\n searchPlaceholder?: any;\n /** Extra class for the options list. */\n dropdownClass?: string;\n /**\n * Props of the options list's popover (upstream `inputPopoverProps`),\n * see {@link EuiComboBoxInputPopoverProps}.\n */\n inputPopoverProps?: EuiComboBoxInputPopoverProps;\n /**\n * Called with the search `<input>` element once rendered, and with\n * `null` when it is removed.\n */\n inputRef?: (element: HTMLInputElement | null) => void;\n /** The selected options (items of `@options`). */\n selectedOptions?: any[];\n /**\n * Called with the new selection (an array, also with\n * `@singleSelection`). Update `@selectedOptions` here.\n */\n onChange: (selected: any[]) => void;\n /** Text shown when nothing is selected. */\n placeholder?: string;\n /** Anything, passed to custom components as `@extra`. */\n extra?: any;\n /**\n * Closes the options list after selecting one. Defaults to `true` for\n * single selection and `false` for multiple selection (upstream).\n */\n closeOnSelect?: boolean;\n /** Focuses the combo box and opens its options on render. */\n autoFocus?: boolean;\n /**\n * Option highlighted when the list opens, or an ember-power-select\n * `defaultHighlighted` function. By default nothing is highlighted\n * until the arrow keys are used (upstream), except single selection's\n * option when the list is opened by clicking.\n */\n defaultHighlighted?: any;\n /** Makes the options list as wide as the input. */\n matchTriggerWidth?: boolean;\n /** `tabindex` of the search input. */\n tabindex?: number;\n /** Opens the options list on render. */\n initiallyOpen?: boolean;\n /** Horizontal alignment of the options list: `'auto'`, `'left'`, `'right'` or `'center'`. */\n horizontalPosition?: string;\n /** Vertical position of the options list: `'auto'`, `'above'` or `'below'`. */\n verticalPosition?: string;\n /** Id of the element the options list renders into. */\n destination?: string;\n /** Prevents the page from scrolling while the options list is open. */\n preventScroll?: boolean;\n /**\n * Message when no option matches the search (or when there are no\n * options). Defaults to upstream's \"{searchValue} doesn't match any\n * options\" / \"There aren't any options available\".\n */\n noMatchesMessage?: string;\n /** @deprecated Has no effect; the \"no matches\" / \"add\" option is built in. */\n noMatchesMessageComponent?: any;\n /** Extra class for the element wrapping the options. */\n optionsClass?: string;\n /**\n * Height in px of each option in the (virtualized) list. Set it when the\n * block renders taller options. `'auto'` turns virtualization off so\n * long options wrap onto several lines (slower for long lists; no\n * truncation). Defaults to 29.\n */\n rowHeight?: number | 'auto';\n /**\n * Hides the options list: the combo box only takes typed values\n * (`@onCreateOption`, added with Enter), and has no dropdown icon.\n */\n noSuggestions?: boolean;\n /**\n * A character separating several values in the typed or pasted text,\n * typically `','`. Typing it adds the text before it; Enter (or leaving\n * the combo box) adds each value of pasted text.\n */\n delimiter?: string;\n /** Matches options case-sensitively. */\n isCaseSensitive?: boolean;\n /**\n * Matches options ignoring accents (\"medico\" finds \"Médico\"), as\n * ember-power-select did. Defaults to the app's\n * `euiComboBox.ignoreAccents` (eui-config), else `false` (upstream).\n * Only for the default matching (not `@matcher` / `@optionMatcher`).\n */\n ignoreAccents?: boolean;\n /**\n * `'startsWith'` lists the matches starting with the search text first;\n * `'none'` keeps the options' order. Defaults to `'none'`.\n */\n sortMatchesBy?: EuiComboBoxSortMatchesBy;\n /**\n * Truncation of long option texts, any `EuiTextTruncate` argument but\n * `text` (e.g. `{ truncation: 'middle' }`). Options can override it\n * with their own `truncationProps`. While searching, the text is\n * truncated around the match instead. Defaults to CSS truncation at\n * the end.\n */\n truncationProps?: EuiComboBoxTruncationProps;\n /**\n * Text, a component, or an array of them before the input, e.g. a\n * label. Only shown with `@singleSelection` (upstream), so pills never\n * wrap onto taller rows.\n */\n prepend?: EuiComboBoxNode | EuiComboBoxNode[];\n /** Like `@prepend`, after the input. Only with `@singleSelection`. */\n append?: EuiComboBoxNode | EuiComboBoxNode[];\n /**\n * Custom matching for local filtering: `(option, searchText) => -1` for\n * no match, anything else for a match. Defaults to upstream's matching\n * (the label includes the search text, ignoring case unless\n * `@isCaseSensitive`).\n */\n matcher?: (option: any, searchText: string) => number;\n /**\n * Upstream's custom matching, used before `@matcher`:\n * `({ option, searchValue, normalizedSearchValue, isCaseSensitive }) =>\n * boolean`.\n */\n optionMatcher?: EuiComboBoxOptionMatcher;\n /**\n * The options are already filtered for the search text (e.g. loaded\n * from a server in `@onSearchChange`): they are listed as they are,\n * without the selected options.\n */\n async?: boolean;\n /**\n * Called whenever the search text changes, with the text and whether\n * any option matches it.\n */\n onSearchChange?: (searchValue: string, hasMatchingOptions?: boolean) => void;\n /** Shows a \"return\" badge on the highlighted option. */\n onFocusBadge?: boolean;\n /** Matching used when typing while the list is closed. */\n typeAheadOptionMatcher?: (option: any, searchText: string) => number;\n /** Icon in the input, anything `EuiIcon`'s `@type` accepts. */\n triggerIcon?: any;\n /** Called when a selected option's pill is removed. */\n removeTag?: (option: any) => void;\n /** Called on every input with the text and the select API. */\n onInput?: (text: string, select: any, event: Event) => any;\n /**\n * Called on keydown (with the select API and the event) before the\n * combo box handles the key; return `false` to prevent that.\n */\n onKeydown?: (select: any, event: KeyboardEvent) => any;\n /** Called with ember-power-select's API (`actions.open()`, `search`, …). */\n registerApi?: (select: any) => void;\n /** Custom positioning of the options list, see ember-basic-dropdown. */\n calculatePosition?: (...args: any[]) => any;\n /** Event that opens the list: `'click'` or `'mousedown'`. */\n eventType?: string;\n /** Accessible label of the combo box. */\n ariaLabel?: string;\n /** Id of the element labelling the combo box. */\n ariaLabelledBy?: string;\n /** Marks the combo box as required for assistive technology. */\n required?: boolean;\n /** `role` of the search input. Defaults to `combobox`. */\n triggerRole?: string;\n /** `title` of the combo box. */\n title?: string;\n /** Id of the input, e.g. for an `EuiFormRow`'s label. */\n triggerId?: string;\n };\n Blocks: {\n /**\n * Renders each option (in the list and in the pills), with its index\n * and the search text (upstream `renderOption`): `as |option i search|`\n * → `<EuiHighlight @text={{option.label}} @search={{search}} />`. In\n * pills the second value is the select API and the search is empty.\n * Optional: without a block, options show their text (strings, or\n * `@searchField` / `label` of objects), with the search text highlighted\n * in the list like upstream. Option `prepend` / `append` render around\n * the block.\n */\n default: [any, number | Select, string];\n };\n}\n\ninterface Sliceable<T> {\n slice(): T[];\n}\n\nconst isSliceable = <T,>(coll: any): coll is Sliceable<T> => {\n return isArray(coll);\n};\n\nexport const toPlainArray = <T,>(collection: T[] | Sliceable<T>): T[] => {\n if (isSliceable<T>(collection)) {\n return collection.slice();\n } else {\n return collection;\n }\n};\n\n/**\n * Upstream `EuiInputPopover`: the options list stacks 2000 (`levels.menu`)\n * above its anchor's z-index, so it clears modals and flyouts it opens in\n * while tooltips (`levels.toast`) stay above it on the page.\n */\nexport const COMBO_BOX_LIST_Z_INDEX_OFFSET = 2000;\n\n/** The parts of ember-power-select's API the container blur uses. */\ntype ContainerBlurApi = Select & {\n uniqueId?: string;\n isOpen?: boolean;\n highlighted?: unknown;\n actions: {\n close?: (e?: Event) => void;\n highlight?: (option: unknown) => void;\n };\n};\n\nexport default class EuiComboBoxComponent extends Component<EuiComboBoxSignature> {\n @service declare euiI18n: EuiI18n;\n @service('eui-config') declare euiConfig: EuiConfigService;\n\n /**\n * `@ignoreAccents`, else the app's `euiComboBox.ignoreAccents`\n * (eui-config), else `false` (upstream).\n */\n get ignoreAccents(): boolean {\n return (\n this.args.ignoreAccents ??\n this.euiConfig?.getConfig('euiComboBox.ignoreAccents') ??\n false\n );\n }\n\n // UI state only: everything else is derived from the arguments\n\n /** ember-power-select's API (open state, highlighted option, …). */\n @tracked select: any = null;\n\n /**\n * The search text, as typed (upstream `searchValue`). Kept apart from\n * `select`, which is replaced on every highlight change: options derived\n * from it would re-run ember-power-select's options modifier, which\n * resets the highlight, in a loop.\n */\n @tracked searchValue = '';\n\n /** The options list's z-index, measured from the anchor when it opens. */\n @tracked listZIndex = COMBO_BOX_LIST_Z_INDEX_OFFSET;\n\n /** The combo box has focus (upstream `hasFocus`). */\n @tracked hasFocus = false;\n\n /** The search input itself has focus (the screen reader instructions). */\n @tracked inputHasFocus = false;\n\n /** The value `@options` resolved to, when it is a promise. */\n @tracked private settledOptions?: { promise: unknown; value: unknown };\n\n private watchedPromises = new WeakSet<object>();\n\n /** The last search text given to `@onSearchChange`. */\n private notifiedSearch = '';\n\n /**\n * The option to highlight next: after adding one (upstream moves the\n * active option to the next one), or the selected option when single\n * selection opens on click.\n */\n private pendingHighlight?:\n | { index: number; added: unknown }\n | { selected: unknown };\n\n get loadingMessage() {\n return (\n this.args.loadingMessage ||\n this.euiI18n.lookupToken(\n 'euiComboBox.loadingMessage',\n 'Loading options...'\n )\n );\n }\n\n get noMatchesMessage() {\n return (\n this.args.noMatchesMessage ||\n this.euiI18n.lookupToken(\n 'euiComboBox.noMatchesMessage',\n 'No results found'\n )\n );\n }\n\n get searchMessage() {\n return (\n this.args.searchMessage ||\n this.euiI18n.lookupToken('euiComboBox.searchMessage', 'Type to search')\n );\n }\n\n get alwaysShowCreateOption() {\n return this.args.onCreateOption && this.args.alwaysShowCreateOption;\n }\n\n /**\n * Upstream `euiComboBoxStyles` on the root (power-select's trigger):\n * relative, full width up to the form width (or 100% with `@fullWidth`).\n */\n @cached\n get rootClass(): string {\n const context = getEuiThemeContext(this);\n const form = useEuiBorealisStyles(context, euiFormVariables);\n\n return euiClass(\n context,\n comboBoxBoxReset,\n euiComboBoxStyles.euiComboBox,\n this.args.fullWidth\n ? euiComboBoxStyles.fullWidth\n : { maxInlineSize: form.maxWidth },\n this.args.inputPopoverProps?.css\n );\n }\n\n /**\n * The options list panel (ember-basic-dropdown's content): upstream\n * `EuiInputPopover` (`panelPaddingSize=\"s\"`, attached to the input), i.e.\n * an `EuiPanel` (plain, radius m) composed with the popover panel styles\n * in one class. The attached shadow follows the side the list opened on.\n */\n @cached\n get panelClass(): string {\n const context = getEuiThemeContext(this);\n const upstream = context.upstream;\n const panel = useEuiBorealisStyles(context, euiPanelStyles);\n const popover = useEuiBorealisStyles(context, euiPopoverPanelStyles);\n const colorMode = upstream.colorMode === 'DARK' ? 'dark' : 'light';\n const popoverProps = this.args.inputPopoverProps;\n\n return euiClass(\n context,\n // no React global reset; the portal also leaves the provider's color\n // wrapper, so the panel sets the theme's text color itself\n {\n boxSizing: 'border-box',\n color: upstream.euiTheme.colors.textParagraph,\n textAlign: 'start',\n '--ember-basic-dropdown-content-background-color':\n 'var(--euiPopoverBackgroundColor)'\n },\n panel.euiPanel,\n panel.grow,\n panel.radius.m,\n {\n padding:\n euiPaddingSize(upstream, this.args.inputPopoverProps?.panelPaddingSize ?? 's') ?? 0\n },\n { backgroundColor: euiBackgroundColor(upstream, 'plain') },\n upstream.highContrastMode && {\n border: upstream.euiTheme.border.thin,\n borderColor: euiBorderColor(upstream, 'plain')\n },\n popover.euiPopover__panel,\n popover[colorMode],\n popover.isOpen,\n popover.isAttached.isAttached,\n popover.isAttached.bottom,\n { '&.ember-basic-dropdown-content--above': popover.isAttached.top },\n // ember-power-select's result count announcement\n `& .ember-power-select-visually-hidden{${euiScreenReaderOnly()}}`,\n popoverProps?.panelMinWidth != null && {\n minInlineSize: popoverProps.panelMinWidth\n },\n popoverProps?.panelStyle,\n popoverProps?.panelCss,\n popoverProps?.panelProps?.css\n );\n }\n\n get listZIndexClass(): string {\n return euiClass(getEuiThemeContext(this), {\n '--ember-basic-dropdown-content-z-index': String(\n this.args.inputPopoverProps?.zIndex ?? this.listZIndex\n )\n });\n }\n\n /** `@verticalPosition`, else the side `inputPopoverProps.anchorPosition` names. */\n get verticalPosition(): string | undefined {\n if (this.args.verticalPosition) return this.args.verticalPosition;\n\n const anchorPosition = this.args.inputPopoverProps?.anchorPosition;\n\n if (anchorPosition?.startsWith('up')) return 'above';\n if (anchorPosition?.startsWith('down')) return 'below';\n\n return undefined;\n }\n\n get dropdownClass(): string {\n return [\n 'euiPanel euiPanel--plain euiPopover__panel',\n this.panelClass,\n this.listZIndexClass,\n this.args.inputPopoverProps?.panelClassName,\n this.args.inputPopoverProps?.panelProps?.className,\n this.args.dropdownClass\n ]\n .filter(Boolean)\n .join(' ');\n }\n\n\n /**\n * `@options`, or what it resolved to when it is a promise (`undefined`\n * while it is pending).\n */\n get sourceOptions(): unknown[] | undefined {\n const options = this.args.options as unknown;\n\n if (isPromiseLike(options)) {\n if (this.settledOptions?.promise === options) {\n return toList(this.settledOptions.value);\n }\n\n this.watchPromise(options);\n\n return undefined;\n }\n\n return toList(options);\n }\n\n private watchPromise(promise: PromiseLike<unknown>) {\n if (this.watchedPromises.has(promise as object)) return;\n\n this.watchedPromises.add(promise as object);\n\n const settle = (value: unknown) => {\n if (this.isDestroying || this.isDestroyed) return;\n // only the latest `@options` counts\n if (this.args.options !== (promise as unknown)) return;\n\n this.settledOptions = { promise, value };\n };\n\n promise.then(settle, () => settle([]));\n }\n\n /** `@options` is a promise that has not resolved yet. */\n get optionsPending(): boolean {\n return this.sourceOptions === undefined;\n }\n\n @cached\n get selectedOptions(): unknown[] {\n return toList(this.args.selectedOptions);\n }\n\n /**\n * `@optionMatcher` (upstream), else `@matcher` (ember-power-select's\n * `(option, searchText) => index`), else upstream's partial string\n * matcher: the label includes the search text, ignoring case unless\n * `@isCaseSensitive`.\n */\n @cached\n get optionMatcher(): EuiComboBoxOptionMatcher {\n const { optionMatcher, matcher, searchField } = this.args;\n\n if (optionMatcher) return optionMatcher;\n\n if (matcher) {\n return ({ option, searchValue }) => matcher(option, searchValue) >= 0;\n }\n\n return createPartialStringEqualityOptionMatcher(\n searchField,\n this.ignoreAccents\n );\n }\n\n /** Upstream `getMatchingOptions` (with group titles) for a search text. */\n matchingEntriesFor(\n searchValue: string,\n selectedOptions: readonly unknown[] = this.selectedOptions\n ): unknown[] {\n const { async, isCaseSensitive, search, searchField, singleSelection } =\n this.args;\n\n return getMatchingEntries({\n options: this.sourceOptions ?? [],\n selectedOptions,\n searchValue,\n optionMatcher: this.optionMatcher,\n searchField,\n isCaseSensitive,\n // `@async` options (and `@search` results) are already filtered\n isPreFiltered: Boolean(async || search),\n showPrevSelected: Boolean(singleSelection),\n sortMatchesBy: this.args.sortMatchesBy\n });\n }\n\n @cached\n get matchingEntries(): unknown[] {\n return this.matchingEntriesFor(this.searchValue);\n }\n\n /**\n * What the list shows, derived on every change of `@options`,\n * `@selectedOptions` and the search text (upstream `matchingOptions`):\n * the matches, without the selected options in multiple selection, as\n * ember-power-select options. Neither `@options` nor its options are\n * copied or changed.\n */\n @cached\n get powerSelectOptions(): unknown[] {\n return entriesToPowerSelectOptions(this.matchingEntries);\n }\n\n /**\n * `@search`, with its results filtered like `@options` (selected options\n * removed in multiple selection, `@sortMatchesBy`).\n */\n @cached\n get search(): EuiComboBoxSignature['Args']['search'] {\n const search = this.args.search;\n\n if (!search) return undefined;\n\n return (term: string, select: Select) => {\n const results = search(term, select) as unknown;\n const strip = (list: unknown) =>\n entriesToPowerSelectOptions(\n getMatchingEntries({\n options: toList(list),\n selectedOptions: this.selectedOptions,\n searchValue: term,\n optionMatcher: this.optionMatcher,\n searchField: this.args.searchField,\n isCaseSensitive: this.args.isCaseSensitive,\n isPreFiltered: true,\n showPrevSelected: Boolean(this.args.singleSelection),\n sortMatchesBy: this.args.sortMatchesBy\n })\n );\n\n if (isPromiseLike(results)) {\n const stripped = Promise.resolve(results).then(strip) as Promise<\n unknown[]\n > & { cancel?: () => void };\n const cancel = (results as { cancel?: () => void }).cancel;\n\n // ember-power-select cancels pending ember-concurrency searches\n if (typeof cancel === 'function') {\n stripped.cancel = () => cancel.call(results);\n }\n\n return stripped as unknown as PromiseProxy<any[]>;\n }\n\n return strip(results);\n };\n }\n\n /** Upstream `areAllOptionsSelected` (never with `@async` options). */\n get areAllOptionsSelected(): boolean {\n if (this.args.async || this.args.search) return false;\n\n const options = flattenOptionGroups(this.sourceOptions ?? []);\n\n return (\n options.length > 0 &&\n options.every((option) =>\n isComboBoxOptionSelected(\n option,\n this.selectedOptions,\n this.args.searchField,\n this.args.isCaseSensitive\n )\n )\n );\n }\n\n /**\n * Upstream empty states of the list: the search does not match, there\n * are no options, or all of them are selected.\n */\n get emptyStateMessage(): ReturnType<typeof htmlSafe> | string {\n const search = this.searchValue;\n const custom = this.args.noMatchesMessage;\n\n if (search) {\n return (\n custom ??\n this.i18nHtml(\n 'euiComboBoxOptionsList.noMatchingOptions',\n \"{searchValue} doesn't match any options\",\n { searchValue: strong(search) }\n )\n );\n }\n\n if (!(this.sourceOptions ?? []).length && !this.args.search) {\n return (\n custom ??\n this.euiI18n.lookupToken(\n 'euiComboBoxOptionsList.noAvailableOptions',\n \"There aren't any options available\"\n )\n );\n }\n\n if (this.areAllOptionsSelected) {\n return this.euiI18n.lookupToken(\n 'euiComboBoxOptionsList.allOptionsSelected',\n \"You've selected all available options\"\n );\n }\n\n return this.noMatchesMessage;\n }\n\n /**\n * Upstream: with `@onCreateOption`, text equal to a selected option is\n * not offered again (\"… has already been added\").\n */\n get alreadyAddedMessage(): ReturnType<typeof htmlSafe> | undefined {\n const search = this.searchValue;\n\n if (!search || !this.args.onCreateOption) return undefined;\n if (this.args.delimiter && search.includes(this.args.delimiter)) {\n return undefined;\n }\n\n const selected = selectedOptionForSearchValue(\n this.selectedOptions,\n search,\n this.args.searchField,\n this.args.isCaseSensitive\n );\n\n if (selected === undefined) return undefined;\n\n return this.i18nHtml(\n 'euiComboBoxOptionsList.alreadyAdded',\n '{label} has already been added',\n { label: strong(comboBoxOptionLabel(selected, this.args.searchField)) }\n );\n }\n\n private i18nHtml(\n token: string,\n fallback: string,\n values: Record<string, string>\n ): ReturnType<typeof htmlSafe> {\n const text = this.euiI18n.lookupToken(token, fallback, values) as unknown;\n\n return htmlSafe(\n isHTMLSafe(text) ? (text as { toString(): string }).toString() : String(text)\n );\n }\n\n /** The list shows a spinner: `@isLoading`, or `@options` still loading. */\n get isLoadingOptions(): boolean {\n return Boolean(this.args.isLoading) || this.optionsPending;\n }\n\n /**\n * Upstream: leftover text marks the combo box invalid once the list\n * closes or it loses focus (it was not added).\n */\n get markAsInvalid(): boolean {\n if (this.args.isInvalid) return true;\n if (!this.searchValue) return false;\n\n return !this.hasFocus || (!this.args.noSuggestions && !this.select?.isOpen);\n }\n\n /** Upstream closes the list after a choice only with single selection. */\n get closeOnSelect(): boolean {\n return this.args.closeOnSelect ?? Boolean(this.args.singleSelection);\n }\n\n /**\n * Upstream's screen reader instructions, read (politely) while the input\n * has focus.\n */\n get screenReaderInstructions(): string | undefined {\n if (!this.inputHasFocus) return undefined;\n\n const { placeholder } = this.args;\n const search = this.searchValue;\n const selected = this.selectedOptions;\n const value = selected\n .map((option) => comboBoxOptionLabel(option, this.args.searchField))\n .join(', ');\n const last = selected[selected.length - 1];\n\n return (\n `Combo box. Selected. ${search ? `${search}. Selected. ` : ''}${\n selected.length > 0\n ? `${value}. Press Backspace to delete ${comboBoxOptionLabel(\n last,\n this.args.searchField\n )}. `\n : ''\n }Combo box input. ${placeholder ? `${placeholder}.` : ''} Type some text or, to display a list of choices, press Down Arrow. ` +\n 'To exit the list of choices, press Escape.'\n );\n }\n\n get listboxAriaLabel(): string {\n return this.euiI18n.lookupToken(\n 'euiComboBox.listboxAriaLabel',\n 'Choose from the following options'\n );\n }\n\n /** Untracked: the first measured option row shares its width (upstream). */\n optionWidth?: number;\n\n setOptionWidth = (width: number) => {\n this.optionWidth = width;\n };\n\n /** EuiComboBox's `@truncationProps` merged with the option's own. */\n truncationFor = (option: unknown): EuiComboBoxTruncationProps | undefined => {\n const own =\n option && typeof option === 'object'\n ? (option as EuiComboBoxOptionOption).truncationProps\n : undefined;\n\n if (!this.args.truncationProps && !own) return undefined;\n\n return { ...this.args.truncationProps, ...own };\n };\n\n labelFor = (option: unknown) =>\n comboBoxOptionLabel(option, this.args.searchField);\n\n /** Options rows yield their index; pills yield the select API. */\n isOptionRow = (index: unknown) => typeof index === 'number';\n\n /** ember-power-select must not filter the matches again. */\n matchAll = () => 0;\n\n <template>\n {{! @glint-nocheck: not typesafe yet }}\n\n <PowerSelect\n @multiple={{true}}\n {{spreadAttributes @inputPopoverProps this.inputPopoverArgs}}\n ...attributes\n @onChange={{this.onChange}}\n @onFocus={{this.onFocus}}\n @onBlur={{this.onBlur}}\n @onOpen={{this.onOpen}}\n @onClose={{this.onClose}}\n @placeholderComponent={{@placeholderComponent}}\n @searchMessage={{this.searchMessage}}\n @searchMessageComponent={{if\n @searchMessageComponent\n @searchMessageComponent\n EuiComboBoxSearchMessage\n }}\n @noMatchesMessage={{this.noMatchesMessage}}\n @matchTriggerWidth={{@matchTriggerWidth}}\n @options={{this.powerSelectOptions}}\n @selected={{@selectedOptions}}\n @closeOnSelect={{this.closeOnSelect}}\n @defaultHighlighted={{if\n @defaultHighlighted\n @defaultHighlighted\n this.defaultHighlighted\n }}\n @highlightOnHover={{false}}\n @searchField={{@searchField}}\n @searchEnabled={{argOrDefault @searchEnabled true}}\n @tabindex={{if (argOrDefault @searchEnabled true) \"-1\" @tabindex}}\n @initiallyOpened={{and (not @isDisabled) @autoFocus (not @noSuggestions)}}\n @triggerComponent={{component\n EuiComboBoxTrigger\n fullWidth=@fullWidth\n compressed=@compressed\n isInvalid=this.markAsInvalid\n singleSelection=@singleSelection\n hasOptionBlock=(has-block)\n onClose=@removeTag\n isLoading=@isLoading\n autoFocus=(and (not @isDisabled) @autoFocus)\n icon=@triggerIcon\n prepend=@prepend\n append=@append\n noSuggestions=@noSuggestions\n inputTabindex=@tabindex\n inputRef=@inputRef\n inputRole=@triggerRole\n inputAriaLabel=@ariaLabel\n inputAriaLabelledBy=@ariaLabelledBy\n inputRequired=@required\n onClear=this.clearSelectedOptions\n onToggleList=this.onToggleListClick\n onToggleBlur=this.onToggleBlur\n onToggleKeydown=this.onToggleKeydown\n onPlainTextClick=this.onPlainTextClick\n screenReaderInstructions=this.screenReaderInstructions\n }}\n @matcher={{this.matchAll}}\n @initiallyOpen={{@initiallyOpen}}\n @typeAheadOptionMatcher={{@typeAheadOptionMatcher}}\n @buildSelection={{this.buildSelection}}\n @search={{this.search}}\n @onInput={{this.onInput}}\n @onKeydown={{this.onKeydown}}\n @scrollTo={{this.scrollTo}}\n @registerAPI={{queue this.registerAPI (optional @registerApi)}}\n @horizontalPosition={{@horizontalPosition}}\n @destination={{@destination}}\n @preventScroll={{@preventScroll}}\n @renderInPlace={{@renderInPlace}}\n @verticalPosition={{this.verticalPosition}}\n @disabled={{@isDisabled}}\n @calculatePosition={{this.calculatePosition}}\n @eventType={{@eventType}}\n @ariaLabel={{unless (argOrDefault @searchEnabled true) @ariaLabel}}\n @ariaLabelledBy={{unless\n (argOrDefault @searchEnabled true)\n @ariaLabelledBy\n }}\n @required={{unless (argOrDefault @searchEnabled true) @required}}\n @triggerRole={{if\n (argOrDefault @searchEnabled true)\n \"presentation\"\n @triggerRole\n }}\n @title={{@title}}\n @triggerId={{@triggerId}}\n @allowClear={{and (argOrDefault @isClearable true) (not @isDisabled)}}\n @loadingMessage={{this.loadingMessage}}\n @selectedItemComponent={{@selectedItemComponent}}\n @beforeOptionsComponent={{@beforeOptionsComponent}}\n @afterOptionsComponent={{if\n @afterOptionsComponent\n @afterOptionsComponent\n (if\n (and\n @onCreateOption\n (not this.select.loading)\n (not this.isLoadingOptions)\n this.searchValue\n this.alwaysShowCreateOption\n (not this.alreadyAddedMessage)\n )\n (component\n EuiComboBoxCreateOption\n customOptionText=@customOptionText\n onCreateOption=this.onCreateOption\n select=this.select\n alwaysShow=true\n delimiter=@delimiter\n )\n )\n }}\n @placeholder={{@placeholder}}\n @searchPlaceholder={{@searchPlaceholder}}\n @optionsComponent={{component\n EuiComboBoxOptions\n rowHeight=@rowHeight\n truncationProps=@truncationProps\n class=@optionsClass\n singleSelection=(if @singleSelection true false)\n selectedOptions=this.selectedOptions\n searchField=@searchField\n isLoading=this.isLoadingOptions\n onFocusBadge=@onFocusBadge\n listboxAriaLabel=this.listboxAriaLabel\n }}\n @extra={{@extra}}\n @groupComponent={{component EuiComboBoxGroup}}\n @triggerClass={{classNames\n \"euiComboBox\"\n this.rootClass\n @inputPopoverProps.className\n (if @isDisabled \"euiComboBox-isDisabled\")\n (if this.markAsInvalid \"euiComboBox-isInvalid\")\n (if this.select.isOpen \"euiComboBox-isOpen\")\n }}\n @noMatchesMessageComponent={{if\n this.isLoadingOptions\n (component\n EuiComboBoxOptions\n isLoading=true\n loadingMessage=this.loadingMessage\n )\n (if\n (and\n @onCreateOption\n this.searchValue\n (not this.alwaysShowCreateOption)\n (not this.alreadyAddedMessage)\n )\n (component\n EuiComboBoxCreateOption\n customOptionText=@customOptionText\n onCreateOption=this.onCreateOption\n select=this.select\n alwaysShow=false\n delimiter=@delimiter\n )\n (component\n EuiComboBoxNoMatchesMessage\n message=(if\n this.alreadyAddedMessage\n this.alreadyAddedMessage\n this.emptyStateMessage\n )\n )\n )\n }}\n @dropdownClass={{this.dropdownClass}}\n as |option i|\n >\n {{#if (has-block)}}\n {{yield option i (if (this.isOptionRow i) this.searchValue \"\")}}\n {{else if (this.isOptionRow i)}}\n <EuiComboBoxOptionText\n @text={{this.labelFor option}}\n @search={{this.searchValue}}\n @isCaseSensitive={{@isCaseSensitive}}\n @rowHeight={{@rowHeight}}\n @truncationProps={{this.truncationFor option}}\n @width={{this.optionWidth}}\n @onResize={{this.setOptionWidth}}\n />\n {{else}}\n {{this.labelFor option}}\n {{/if}}\n </PowerSelect>\n </template>\n\n /** Keeps the highlighted option in view in the virtualized list. */\n @action\n scrollTo(option: any, select: { results: unknown[]; uniqueId: string }): void {\n const optionsList = document.querySelector(\n `[data-combo-box-list=\"${select.uniqueId}\"]`\n ) as HTMLElement;\n\n if (!optionsList) {\n return;\n }\n\n const index = flattenComboBoxRows(toList(select.results)).indexOf(option);\n\n if (index === -1) {\n return;\n }\n\n const optionElement = optionsList.querySelector(\n `[data-option-index=\"${index}\"]`\n ) as HTMLElement;\n\n if (!optionElement) {\n return;\n }\n\n const optionTopScroll = optionElement.offsetTop;\n const optionBottomScroll = optionTopScroll + optionElement.offsetHeight;\n\n if (optionBottomScroll > optionsList.offsetHeight + optionsList.scrollTop) {\n optionsList.scrollTop = optionBottomScroll - optionsList.offsetHeight;\n } else if (optionTopScroll < optionsList.scrollTop) {\n optionsList.scrollTop = optionTopScroll;\n }\n }\n\n get inputPopoverArgs(): readonly string[] {\n return INPUT_POPOVER_ARGS;\n }\n\n /** The combo box root (power-select's trigger). */\n triggerElement(): HTMLElement | null {\n const id = (this.select as unknown as { uniqueId?: string } | undefined)\n ?.uniqueId;\n\n return id\n ? document.querySelector<HTMLElement>(`[data-ebd-id=\"${id}-trigger\"]`)\n : null;\n }\n\n /** The open list's panel. */\n contentElement(): HTMLElement | null {\n const id = (this.select as unknown as { uniqueId?: string } | undefined)\n ?.uniqueId;\n\n return id\n ? document.getElementById(`ember-basic-dropdown-content-${id}`)\n : null;\n }\n\n /**\n * ember-basic-dropdown's position with upstream's `offset` (a gap from\n * the input) and `buffer` / `container` (horizontal bounds).\n */\n calculatePosition = (\n trigger: HTMLElement,\n content: HTMLElement,\n destination: HTMLElement,\n options: { renderInPlace?: boolean; [key: string]: unknown }\n ) => {\n const calculate = (this.args.calculatePosition ??\n defaultCalculatePosition) as (...args: unknown[]) => {\n horizontalPosition: string;\n verticalPosition: string;\n style: { top?: number; left?: number; [key: string]: unknown };\n };\n const position = calculate(trigger, content, destination, options);\n const props = this.args.inputPopoverProps;\n\n if (!props) return position;\n\n const style = { ...position.style };\n const offset = props.offset ?? 0;\n\n if (offset && typeof style.top === 'number') {\n style.top += position.verticalPosition === 'above' ? -offset : offset;\n }\n\n if (\n (props.buffer !== undefined || props.container) &&\n typeof style.left === 'number' &&\n !options.renderInPlace\n ) {\n const buffer = props.buffer ?? 16;\n const [, right, , left] = Array.isArray(buffer)\n ? buffer\n : [buffer, buffer, buffer, buffer];\n const bounds = props.container?.getBoundingClientRect() ?? {\n left: 0,\n right: document.documentElement.clientWidth || window.innerWidth\n };\n // `style.left` is relative to the panel's positioned ancestor, or to\n // the document\n const parent = content.offsetParent;\n const origin =\n !parent ||\n parent === document.body ||\n parent === document.documentElement\n ? -window.scrollX\n : parent.getBoundingClientRect().left;\n const width = content.getBoundingClientRect().width;\n const min = bounds.left + left - origin;\n const max = bounds.right - right - width - origin;\n\n style.left = Math.max(min, Math.min(style.left as number, max));\n }\n\n return { ...position, style };\n };\n\n private scrollCleanup?: () => void;\n\n /** Upstream `closeOnScroll` (EuiInputPopover), on by default here. */\n private listenToScroll(): void {\n this.stopListeningToScroll();\n\n if (this.args.inputPopoverProps?.closeOnScroll === false) return;\n\n const onScroll = (event: Event) => {\n const target = event.target as Node | null;\n const trigger = this.triggerElement();\n const panel = this.contentElement();\n\n if (!target || !trigger) return;\n if (panel?.contains(target) || trigger.contains(target)) return;\n // only scrolling that moves the input closes the list\n if (!target.contains(trigger)) return;\n\n const api = this.select as\n | (Select & { isOpen?: boolean; actions: { close?: () => void } })\n | undefined;\n\n if (api?.isOpen) api.actions.close?.();\n };\n const timeout = window.setTimeout(() => {\n window.addEventListener('scroll', onScroll, {\n passive: true,\n capture: true\n });\n }, CLOSE_ON_SCROLL_DELAY);\n\n this.scrollCleanup = () => {\n window.clearTimeout(timeout);\n window.removeEventListener('scroll', onScroll, { capture: true });\n };\n }\n\n private stopListeningToScroll(): void {\n this.scrollCleanup?.();\n this.scrollCleanup = undefined;\n }\n\n private panelResizeObserver?: ResizeObserver;\n private lastPanelWidth?: number;\n\n /** Upstream `onPanelResize`: the input's width, at least `panelMinWidth`. */\n private observePanelWidth(): void {\n if (this.panelResizeObserver || !this.args.inputPopoverProps?.onPanelResize) {\n return;\n }\n\n const trigger = this.triggerElement();\n\n if (!trigger || typeof ResizeObserver === 'undefined') return;\n\n this.panelResizeObserver = new ResizeObserver(() => {\n const props = this.args.inputPopoverProps;\n const width = Math.max(\n trigger.getBoundingClientRect().width,\n props?.panelMinWidth ?? 0\n );\n\n if (width === this.lastPanelWidth) return;\n\n this.lastPanelWidth = width;\n props?.onPanelResize?.(width);\n });\n this.panelResizeObserver.observe(trigger);\n }\n\n willDestroy(): void {\n super.willDestroy();\n this.stopListeningToScroll();\n this.panelResizeObserver?.disconnect();\n this.panelResizeObserver = undefined;\n }\n\n @action\n registerAPI(select: Select) {\n this.select = select;\n\n if (!this.panelResizeObserver && this.args.inputPopoverProps?.onPanelResize) {\n // the trigger is in the DOM once power-select has rendered\n schedule('afterRender', () => {\n if (!this.isDestroying && !this.isDestroyed) this.observePanelWidth();\n });\n }\n\n // ember-power-select may change the search itself (e.g. after a choice)\n this.updateSearchValue(\n (select as { searchText?: string })?.searchText ?? ''\n );\n }\n\n /** Keeps `searchValue` in step and tells `@onSearchChange`. */\n updateSearchValue(value: string) {\n if (value !== this.searchValue) this.searchValue = value;\n\n if (value === this.notifiedSearch) return;\n\n this.notifiedSearch = value;\n\n const onSearchChange = this.args.onSearchChange;\n\n if (onSearchChange) {\n const hasMatchingOptions = this.matchingEntriesFor(value).some(\n (entry) => !isComboBoxGroupLabel(entry)\n );\n\n onSearchChange(value, hasMatchingOptions);\n }\n }\n\n /** Upstream `clearSearchValue`. */\n clearSearch() {\n this.select?.actions.search('');\n this.updateSearchValue('');\n }\n\n /**\n * Upstream `activeOptionIndex` rules, as ember-power-select's\n * `defaultHighlighted`: nothing is highlighted when the list opens (the\n * selected option when single selection opens on click), the highlight\n * stays while its option is listed, and after adding an option it moves\n * to the next one.\n */\n defaultHighlighted = ({\n results,\n highlighted\n }: {\n results: unknown[];\n highlighted: unknown;\n }): unknown => {\n const { rows, selectable } = selectableRows(toList(results));\n const pending = this.pendingHighlight;\n\n if (pending && 'selected' in pending) {\n this.pendingHighlight = undefined;\n\n return rows.find(\n (row, index) =>\n selectable[index] &&\n isComboBoxOptionChecked(\n row,\n [pending.selected],\n this.args.searchField\n )\n );\n }\n\n if (pending) {\n const remainingIndexes = rows\n .map((_, index) => index)\n .filter((index) => rows[index] !== pending.added);\n\n // the added option left the list: the move is done\n if (remainingIndexes.length === rows.length) {\n this.pendingHighlight = undefined;\n }\n\n const next = findNextSelectableIndex(\n remainingIndexes,\n (i) => selectable[remainingIndexes[i]!] === true,\n Math.max(0, Math.min(pending.index, remainingIndexes.length - 1))\n );\n\n return next === -1 ? undefined : rows[remainingIndexes[next]!];\n }\n\n if (highlighted !== undefined && rows.includes(highlighted)) {\n return highlighted;\n }\n\n return undefined;\n };\n\n @action\n onChange(selected: any[]) {\n if (this.args.singleSelection) {\n // keep only the option that was just chosen\n this.args.onChange(\n selected.length > 0 ? [selected[selected.length - 1]] : []\n );\n\n return;\n }\n\n this.args.onChange(selected);\n }\n\n @action\n onOpen(select: Select, event: Event): boolean | void {\n // upstream `noSuggestions`: the list never opens\n if (this.args.noSuggestions) return false;\n\n // ember-power-select calls it with its API first\n const onOpen = this.args.onOpen as\n | ((select: Select, event: Event) => boolean | void)\n | undefined;\n\n const result = onOpen?.(select, event);\n\n if (result === false) return false;\n\n const trigger = document.querySelector<HTMLElement>(\n `[data-ebd-id=\"${(select as unknown as { uniqueId: string }).uniqueId}-trigger\"]`\n );\n this.listZIndex =\n (trigger ? getElementZIndex(trigger, document.body) : 0) +\n COMBO_BOX_LIST_Z_INDEX_OFFSET;\n\n this.listenToScroll();\n\n // upstream `onComboBoxClick`: single selection highlights its option\n const selected = this.selectedOptions[0];\n\n if (\n this.args.singleSelection &&\n selected !== undefined &&\n event &&\n /^(mouse|pointer|touch|click)/.test(event.type)\n ) {\n this.pendingHighlight = { selected };\n }\n\n return result;\n }\n\n @action\n onClose(select: Select, event: Event): boolean | void {\n const onClose = this.args.onClose as\n | ((select: Select, event: Event) => boolean | void)\n | undefined;\n const result = onClose?.(select, event);\n\n if (result !== false) {\n this.pendingHighlight = undefined;\n this.stopListeningToScroll();\n }\n\n return result;\n }\n\n /** Upstream `onComboBoxFocus`: focusing the input opens the list. */\n @action\n onFocus(select: Select, event: FocusEvent): void {\n (this.args.onFocus as ((...args: unknown[]) => void) | undefined)?.(\n select,\n event\n );\n\n this.hasFocus = true;\n this.inputHasFocus = true;\n\n const api = (this.select ?? select) as Select & {\n isOpen?: boolean;\n actions: { open?: () => void };\n };\n\n if (!this.args.isDisabled && !this.args.noSuggestions && !api?.isOpen) {\n api?.actions.open?.();\n }\n }\n\n /**\n * Typing `@delimiter` adds the text before it (upstream\n * `onSearchChange`), and clears the input.\n */\n @action\n onInput(term: string, select: Select, event: Event): string | false | void {\n const corrected = this.args.onInput?.(term, select, event);\n\n if (corrected === false) return false;\n\n const text = typeof corrected === 'string' ? corrected : term;\n const delimiter = this.args.delimiter;\n\n this.updateSearchValue(text);\n\n if (delimiter && text.endsWith(delimiter) && this.setCustomOptions(text)) {\n const input = event?.target as HTMLInputElement | null;\n\n if (input && 'value' in input) input.value = '';\n\n return '';\n }\n\n return corrected as string | void;\n }\n\n /**\n * Upstream `onKeyDown`: arrows move through the options (wrapping), Enter\n * chooses the highlighted option or adds the typed text, Escape closes\n * the list, and Tab is held while an option is highlighted.\n */\n @action\n onKeydown(select: Select, event: KeyboardEvent): boolean | void {\n if (this.args.onKeydown?.(select, event) === false) return false;\n if (this.args.isDisabled) return;\n\n const target = event.target as HTMLElement | null;\n\n // only the search input's own keys (not the clear or pill buttons')\n if (!target?.classList.contains('euiComboBox__input')) return;\n\n const api = (this.select ?? select) as Select & {\n isOpen: boolean;\n highlighted: unknown;\n results: unknown[];\n actions: {\n highlight: (option: unknown) => void;\n scrollTo: (option: unknown) => void;\n close: (e?: Event) => void;\n };\n };\n const hasActiveOption = api.isOpen && api.highlighted !== undefined;\n\n switch (event.key) {\n case 'ArrowUp':\n case 'ArrowDown': {\n if (!api.isOpen) return; // ember-power-select opens the list\n\n event.preventDefault();\n event.stopPropagation();\n\n const next = this.nextActiveOption(\n api.results,\n api.highlighted,\n event.key === 'ArrowDown' ? 1 : -1\n );\n\n if (next !== undefined) {\n api.actions.highlight(next);\n api.actions.scrollTo(next);\n }\n\n return false;\n }\n\n case 'Escape':\n if (!api.isOpen) return;\n\n event.preventDefault();\n event.stopPropagation();\n api.actions.close(event);\n\n return false;\n\n case 'Enter':\n event.preventDefault();\n event.stopPropagation();\n\n // ember-power-select chooses the highlighted option\n if (hasActiveOption) return;\n\n this.setCustomOptions(this.searchValue);\n\n return false;\n\n case 'Tab':\n // no tabbing away while navigating the options\n if (hasActiveOption) {\n event.preventDefault();\n event.stopPropagation();\n\n return false;\n }\n\n return;\n\n case 'Backspace':\n // upstream: a plain text input edits its text (the selection's\n // label) as usual, and the selection goes\n if (this.asPlainText) {\n this.onPlainTextBackspace(target as HTMLInputElement);\n\n return;\n }\n\n // deleting text works as usual (and opens the list)\n if ((target as HTMLInputElement).value?.length) return;\n\n this.onBackspace(event);\n\n return false;\n }\n }\n\n /**\n * Upstream's container `onKeyDown` while the toggle button has focus\n * (after a click on it): arrows open the list or move through it, Escape\n * closes it, Tab is held while an option is highlighted. Enter and Space\n * press the button (its native click). Returns whether the key must not\n * reach ember-basic-dropdown / ember-power-select's trigger handlers\n * (which would toggle, choose or type ahead).\n */\n @action\n onToggleKeydown(event: KeyboardEvent): boolean {\n const api = this.select as\n | (Select & {\n isOpen: boolean;\n highlighted: unknown;\n results: unknown[];\n actions: {\n open: (e?: Event) => void;\n highlight: (option: unknown) => void;\n scrollTo: (option: unknown) => void;\n close: (e?: Event) => void;\n };\n })\n | undefined;\n\n if (!api || this.args.isDisabled) return true;\n if (this.args.onKeydown?.(api, event) === false) return true;\n\n switch (event.key) {\n case 'ArrowUp':\n case 'ArrowDown': {\n event.preventDefault();\n\n if (!api.isOpen) {\n if (!this.args.noSuggestions) api.actions.open(event);\n\n return true;\n }\n\n const next = this.nextActiveOption(\n api.results,\n api.highlighted,\n event.key === 'ArrowDown' ? 1 : -1\n );\n\n if (next !== undefined) {\n api.actions.highlight(next);\n api.actions.scrollTo(next);\n }\n\n return true;\n }\n\n case 'Escape':\n if (!api.isOpen) return false;\n\n event.preventDefault();\n api.actions.close(event);\n\n return true;\n\n case 'Tab':\n if (api.isOpen && api.highlighted !== undefined) {\n event.preventDefault();\n\n return true;\n }\n\n return false;\n\n default:\n return true;\n }\n }\n\n /** Upstream `incrementActiveOptionIndex`. */\n nextActiveOption(\n results: unknown[],\n highlighted: unknown,\n direction: 1 | -1\n ): unknown {\n const { rows, selectable } = selectableRows(toList(results));\n\n if (!rows.length) return undefined;\n\n const active = highlighted === undefined ? -1 : rows.indexOf(highlighted);\n const start =\n active < 0\n ? direction < 0\n ? rows.length - 1\n : 0\n : (active + direction + rows.length) % rows.length;\n const index = findNextSelectableIndex(\n rows,\n (i) => selectable[i] === true,\n start,\n direction\n );\n\n return index === -1 ? undefined : rows[index];\n }\n\n /** `@singleSelection` is `{ asPlainText: true }`. */\n get asPlainText(): boolean {\n const single = this.args.singleSelection;\n\n return Boolean(single && typeof single === 'object' && single.asPlainText);\n }\n\n /**\n * Upstream Backspace in an empty input: removes the last selection (and\n * reopens single selection's list).\n */\n @action\n onBackspace(event: KeyboardEvent): void {\n const selected = this.selectedOptions;\n const select = this.select;\n\n if (!selected.length || !select) return;\n\n const last = selected[selected.length - 1];\n\n event.preventDefault();\n this.args.onChange(selected.filter((option) => option !== last));\n this.pendingHighlight = undefined;\n\n if (this.args.singleSelection && !select.isOpen) {\n select.actions.open?.(event);\n }\n }\n\n /**\n * Upstream plain text Backspace: the input's text (the selection's label\n * while nothing is typed) becomes the search text, and the selection is\n * removed; the key then deletes a character as usual.\n */\n onPlainTextBackspace(input: HTMLInputElement): void {\n const text = input.value ?? '';\n\n this.select?.actions.search(text);\n this.updateSearchValue(text);\n\n const selected = this.selectedOptions;\n\n if (selected.length) {\n this.args.onChange(\n selected.filter((option) => option !== selected[selected.length - 1])\n );\n this.pendingHighlight = undefined;\n }\n }\n\n /** Upstream: clicking a plain text input runs the focus handler again. */\n @action\n onPlainTextClick(event: MouseEvent): void {\n this.onFocus(this.select, event as unknown as FocusEvent);\n }\n\n /**\n * Upstream toggle button: `closeList` while open, else\n * `onOpenListClick` (focus the input and open the list).\n */\n @action\n onToggleListClick(): void {\n const select = this.select;\n\n if (!select || this.args.isDisabled) return;\n\n if (select.isOpen) {\n select.actions.close?.();\n\n return;\n }\n\n document\n .getElementById(\n `ember-power-select-trigger-multiple-input-${select.uniqueId}`\n )\n ?.focus();\n\n if (!this.select?.isOpen && !this.args.noSuggestions) {\n this.select?.actions.open?.();\n }\n }\n\n /** Upstream `clearSelectedOptions`: empties the selection, focuses the input. */\n @action\n clearSelectedOptions(event?: Event): void {\n event?.stopPropagation();\n this.args.onChange([]);\n\n const input = document.getElementById(\n `ember-power-select-trigger-multiple-input-${this.select?.uniqueId}`\n );\n\n // focusing opens the list (upstream opens it too)\n input?.focus();\n\n if (this.select && !this.select.isOpen && !this.args.noSuggestions) {\n this.select.actions.open?.();\n }\n }\n\n /**\n * Upstream `onContainerBlur`: leaving the combo box closes the list and\n * adds the typed text (`@onCreateOption`, or the option it names), so it\n * does not look like a text input. Text that is not added stays, and\n * marks the combo box invalid.\n */\n @action\n onBlur(select: Select, event: FocusEvent): void {\n this.inputHasFocus = false;\n this.containerBlur((this.select ?? select) as ContainerBlurApi, event);\n }\n\n /**\n * Upstream `onContainerBlur` for the toggle button, which takes focus when\n * pressed: leaving the combo box from it closes the list as from the\n * input.\n */\n @action\n onToggleBlur(event: FocusEvent): void {\n if (this.select) this.containerBlur(this.select as ContainerBlurApi, event);\n }\n\n /**\n * Upstream `onContainerBlur`: focus moving into the list stays; focus\n * moving elsewhere in the combo box (the toggle or clear button, a pill's\n * remove button) clears the active option; leaving calls `@onBlur`,\n * closes the list and adds the typed text.\n */\n containerBlur(api: ContainerBlurApi | undefined, event?: FocusEvent): void {\n const next = event?.relatedTarget as Node | null;\n const list = api?.uniqueId\n ? document.getElementById(`ember-basic-dropdown-content-${api.uniqueId}`)\n : null;\n const root = (event?.target as HTMLElement | null)?.closest(\n '.euiComboBox'\n );\n\n if (next && list?.contains(next)) return;\n\n if (next && root?.contains(next)) {\n if (api?.highlighted !== undefined) api.actions.highlight?.(undefined);\n\n return;\n }\n\n if (!next) {\n // Focus left for nowhere, which is also what Chrome reports when it\n // blurs the focused input while Glimmer removes the combo box. That\n // happens inside the render, which has already read ember-basic-\n // dropdown's `_isOpen`, so closing the list there trips an autotracking\n // assertion (development builds). Leave after the render instead, and\n // not at all when the combo box is being torn down.\n schedule('actions', this, this.leaveComboBox, event, api);\n\n return;\n }\n\n this.leaveComboBox(event, api);\n }\n\n /** The rest of `containerBlur`: focus has left the combo box. */\n leaveComboBox(event?: FocusEvent, blurApi?: ContainerBlurApi): void {\n if (this.isDestroying || this.isDestroyed) return;\n\n const api = (this.select ?? blurApi) as ContainerBlurApi | undefined;\n\n (this.args.onBlur as ((...args: unknown[]) => void) | undefined)?.(\n api,\n event\n );\n\n const hasActiveOption = Boolean(\n api?.isOpen && api.highlighted !== undefined\n );\n\n this.hasFocus = false;\n\n if (api?.isOpen) api.actions.close?.(event);\n\n if (!hasActiveOption && this.searchValue) {\n this.setCustomOptions(this.searchValue, true);\n }\n }\n\n /** The \"add\" option. */\n @action\n onCreateOption() {\n this.setCustomOptions(this.searchValue);\n }\n\n /**\n * Upstream `setCustomOptions`: the text, or each value separated by\n * `@delimiter` (trimmed, without duplicates), is added. Returns whether\n * anything was added.\n */\n setCustomOptions(text: string, isContainerBlur = false): boolean {\n const delimiter = this.args.delimiter;\n const values = delimiter\n ? [...new Set(text.split(delimiter).map((value) => value.trim()))]\n : [text];\n let seen = this.args.selectedOptions;\n let selection = toList(seen);\n let added = false;\n\n values.forEach((value) => {\n if (!value.length) return;\n\n // the consumer may have updated `@selectedOptions` already\n if (this.args.selectedOptions !== seen) {\n seen = this.args.selectedOptions;\n selection = toList(seen);\n }\n\n const result = this.addCustomOption(value, selection, isContainerBlur);\n\n if (result === false) return;\n\n added = true;\n\n if (result) selection = result;\n });\n\n return added;\n }\n\n /**\n * Upstream `addCustomOption` for one value: the only matching option\n * when its label equals the value, else `@onCreateOption` unless an\n * option with that label is selected. Returns the new selection when an\n * existing option was chosen, `false` when nothing was added.\n */\n addCustomOption(\n value: string,\n selection: unknown[],\n isContainerBlur: boolean\n ): unknown[] | false | void {\n const { isCaseSensitive, searchField, singleSelection } = this.args;\n const matched = this.onlyMatchingOption(value, selection);\n\n if (matched !== undefined) {\n if ((matched as { disabled?: boolean } | null)?.disabled) return false;\n\n const next = singleSelection ? [matched] : [...selection, matched];\n\n this.onAddOption(matched, next, isContainerBlur);\n\n return next;\n }\n\n if (!this.args.onCreateOption || !value) return false;\n\n if (\n selectedOptionForSearchValue(\n selection,\n value,\n searchField,\n isCaseSensitive\n ) !== undefined\n ) {\n return false;\n }\n\n const created = this.args.onCreateOption(\n value,\n flattenOptionGroups(this.sourceOptions ?? [])\n );\n\n // the consumer rejects a custom option explicitly\n if (created === false) return false;\n\n this.clearSearch();\n\n // a custom single selection closes the list\n if (singleSelection) this.select?.actions.close();\n }\n\n /**\n * Upstream `onAddOption` for an option chosen by its text: single\n * selection closes the list, multiple selection keeps it open with the\n * next option highlighted.\n */\n onAddOption(option: unknown, next: unknown[], isContainerBlur: boolean) {\n const { rows } = selectableRows(toList(this.select?.results));\n const index = rows.indexOf(option);\n\n this.args.onChange(next);\n this.clearSearch();\n\n if (this.args.singleSelection) {\n this.select?.actions.close();\n } else if (!isContainerBlur && index > -1) {\n this.pendingHighlight = { index, added: option };\n }\n }\n\n /**\n * Upstream `doesSearchMatchOnlyOption`: the value matches exactly one\n * (unselected) option, and equals its label.\n */\n onlyMatchingOption(value: string, selection: unknown[]): unknown {\n const { isCaseSensitive, searchField } = this.args;\n const matches = this.matchingEntriesFor(value, selection).filter(\n (entry) => !isComboBoxGroupLabel(entry)\n );\n\n if (matches.length !== 1) return undefined;\n\n const [option] = matches;\n\n return transformForCaseSensitivity(\n comboBoxOptionLabel(option, searchField),\n isCaseSensitive\n ) === transformForCaseSensitivity(value, isCaseSensitive)\n ? option\n : undefined;\n }\n\n /**\n * ember-power-select's choice: adds the option (single selection: makes\n * it the selection; a chosen option is never deselected from the list,\n * like upstream). Removing a pill passes a selected option: it is\n * removed.\n */\n @action\n buildSelection(option: any, select: Select) {\n const current = toList(select.selected);\n const index = current.findIndex((item) => isEqual(item, option));\n\n if (this.args.singleSelection) {\n if (index > -1 && current.length === 1) return current;\n\n this.clearSearch();\n\n return [option];\n }\n\n if (index > -1) {\n return current.filter((_, i) => i !== index);\n }\n\n const { rows } = selectableRows(\n toList((select as unknown as { results?: unknown[] }).results)\n );\n const at = rows.indexOf(option);\n\n if (at > -1) this.pendingHighlight = { index: at, added: option };\n\n this.clearSearch();\n\n return [...current, option];\n }\n}\n\n/** A list from an array, an Ember array or nothing (never the same array). */\nfunction toList(collection: unknown): unknown[] {\n if (!collection) return [];\n if (Array.isArray(collection)) return collection;\n if (isArray(collection)) {\n // Ember arrays, ArrayProxy, PromiseManyArray (ember-data), …\n const list = collection as unknown as {\n slice?: () => unknown[];\n toArray?: () => unknown[];\n content?: unknown;\n [Symbol.iterator]?: () => Iterator<unknown>;\n };\n\n if (typeof list.slice === 'function') return list.slice();\n if (typeof list.toArray === 'function') return list.toArray();\n if (typeof list[Symbol.iterator] === 'function') {\n return Array.from(list as Iterable<unknown>);\n }\n\n return list.content ? toList(list.content) : [];\n }\n\n return [];\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n return Boolean(\n value &&\n (typeof value === 'object' || typeof value === 'function') &&\n typeof (value as { then?: unknown }).then === 'function'\n );\n}\n\n/** Escaped user text in bold, for i18n messages rendered as HTML. */\nfunction strong(text: string): string {\n return `<strong>${text\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;')}</strong>`;\n}\n\n/**\n * The rows of ember-power-select results (groups, then their options) and\n * which can be highlighted: options that are not disabled, in groups that\n * are not disabled.\n */\nfunction selectableRows(results: unknown[]): {\n rows: unknown[];\n selectable: boolean[];\n} {\n const rows: unknown[] = [];\n const selectable: boolean[] = [];\n const disabled = (value: unknown) =>\n Boolean(\n value &&\n typeof value === 'object' &&\n (value as { disabled?: boolean }).disabled === true\n );\n\n results.forEach((entry) => {\n if (emberPowerSelectIsGroup(entry)) {\n const group = entry as unknown as { options: unknown[] };\n\n rows.push(entry);\n selectable.push(false);\n group.options.forEach((child) => {\n rows.push(child);\n selectable.push(!disabled(entry) && !disabled(child));\n });\n } else {\n rows.push(entry);\n selectable.push(!disabled(entry));\n }\n });\n\n return { rows, selectable };\n}\n"],"names":["INPUT_POPOVER_ARGS","CLOSE_ON_SCROLL_DELAY","isSliceable","coll","isArray","toPlainArray","collection","slice","COMBO_BOX_LIST_Z_INDEX_OFFSET","EuiComboBoxComponent","Component","g","prototype","service","i","ignoreAccents","args","euiConfig","getConfig","tracked","watchedPromises","WeakSet","notifiedSearch","pendingHighlight","loadingMessage","euiI18n","lookupToken","noMatchesMessage","searchMessage","alwaysShowCreateOption","onCreateOption","rootClass","context","getEuiThemeContext","form","useEuiBorealisStyles","euiFormVariables","euiClass","comboBoxBoxReset","euiComboBoxStyles","euiComboBox","fullWidth","maxInlineSize","maxWidth","inputPopoverProps","css","n","cached","panelClass","upstream","panel","euiPanelStyles","popover","euiPopoverPanelStyles","colorMode","popoverProps","boxSizing","color","euiTheme","colors","textParagraph","textAlign","euiPanel","grow","radius","m","padding","euiPaddingSize","panelPaddingSize","backgroundColor","euiBackgroundColor","highContrastMode","border","thin","borderColor","euiBorderColor","euiPopover__panel","isOpen","isAttached","bottom","top","euiScreenReaderOnly","panelMinWidth","minInlineSize","panelStyle","panelCss","panelProps","listZIndexClass","String","zIndex","listZIndex","verticalPosition","anchorPosition","startsWith","undefined","dropdownClass","panelClassName","className","filter","Boolean","join","sourceOptions","options","isPromiseLike","settledOptions","promise","toList","value","watchPromise","has","add","settle","isDestroying","isDestroyed","then","optionsPending","selectedOptions","optionMatcher","matcher","searchField","option","searchValue","createPartialStringEqualityOptionMatcher","matchingEntriesFor","async","isCaseSensitive","search","singleSelection","getMatchingEntries","isPreFiltered","showPrevSelected","sortMatchesBy","matchingEntries","powerSelectOptions","entriesToPowerSelectOptions","term","select","results","strip","list","stripped","Promise","resolve","cancel","call","areAllOptionsSelected","flattenOptionGroups","length","every","isComboBoxOptionSelected","emptyStateMessage","custom","i18nHtml","strong","alreadyAddedMessage","delimiter","includes","selected","selectedOptionForSearchValue","label","comboBoxOptionLabel","token","fallback","values","text","htmlSafe","isHTMLSafe","toString","isLoadingOptions","isLoading","markAsInvalid","isInvalid","hasFocus","noSuggestions","closeOnSelect","screenReaderInstructions","inputHasFocus","placeholder","map","last","listboxAriaLabel","optionWidth","setOptionWidth","width","truncationFor","own","truncationProps","labelFor","isOptionRow","index","matchAll","setComponentTemplate","precompileTemplate","strictMode","scope","PowerSelect","EuiComboBoxSearchMessage","argOrDefault","and","not","EuiComboBoxTrigger","queue","optional","EuiComboBoxCreateOption","EuiComboBoxOptions","EuiComboBoxGroup","classNames","EuiComboBoxNoMatchesMessage","spreadAttributes","EuiComboBoxOptionText","scrollTo","optionsList","document","querySelector","uniqueId","flattenComboBoxRows","indexOf","optionElement","optionTopScroll","offsetTop","optionBottomScroll","offsetHeight","scrollTop","action","inputPopoverArgs","triggerElement","id","contentElement","getElementById","calculatePosition","trigger","content","destination","calculate","defaultCalculatePosition","position","props","style","offset","buffer","container","left","renderInPlace","right","Array","bounds","getBoundingClientRect","documentElement","clientWidth","window","innerWidth","parent","offsetParent","origin","body","scrollX","min","max","Math","scrollCleanup","listenToScroll","stopListeningToScroll","closeOnScroll","onScroll","event","target","contains","api","actions","close","timeout","setTimeout","addEventListener","passive","capture","clearTimeout","removeEventListener","panelResizeObserver","lastPanelWidth","observePanelWidth","onPanelResize","ResizeObserver","observe","willDestroy","disconnect","registerAPI","schedule","updateSearchValue","searchText","onSearchChange","hasMatchingOptions","some","entry","isComboBoxGroupLabel","clearSearch","defaultHighlighted","highlighted","rows","selectable","selectableRows","pending","find","row","isComboBoxOptionChecked","remainingIndexes","_","added","next","findNextSelectableIndex","onChange","onOpen","result","getElementZIndex","test","type","onClose","onFocus","isDisabled","open","onInput","corrected","endsWith","setCustomOptions","input","onKeydown","classList","hasActiveOption","key","preventDefault","stopPropagation","nextActiveOption","highlight","asPlainText","onPlainTextBackspace","onBackspace","onToggleKeydown","direction","active","start","single","onPlainTextClick","onToggleListClick","focus","clearSelectedOptions","onBlur","containerBlur","onToggleBlur","relatedTarget","root","closest","leaveComboBox","blurApi","isContainerBlur","Set","split","trim","seen","selection","forEach","addCustomOption","matched","onlyMatchingOption","disabled","onAddOption","created","matches","transformForCaseSensitivity","buildSelection","current","findIndex","item","isEqual","at","toArray","Symbol","iterator","from","replace","emberPowerSelectIsGroup","group","push","child"],"mappings":"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"}
1
+ {"version":3,"file":"eui-combo-box.js","sources":["../../src/components/eui-combo-box.gts"],"sourcesContent":["import 'ember-basic-dropdown/styles';\n\nimport Component from '@glimmer/component';\nimport { getElementZIndex } from '../utils/popover/index.ts';\nimport { cached, tracked } from '@glimmer/tracking';\nimport { isArray } from '@ember/array';\nimport { action } from '@ember/object';\nimport { schedule } from '@ember/runloop';\nimport { service } from '@ember/service';\nimport { htmlSafe, isHTMLSafe } from '@ember/template';\nimport { isEqual } from '@ember/utils';\n\nimport optional from '@nullvoxpopuli/ember-composable-helpers/helpers/optional';\nimport queue from '@nullvoxpopuli/ember-composable-helpers/helpers/queue';\nimport defaultCalculatePosition from 'ember-basic-dropdown/utils/calculate-position';\nimport PowerSelect from 'ember-power-select/components/power-select';\nimport emberPowerSelectIsGroup from 'ember-power-select/helpers/ember-power-select-is-group';\nimport { and, not } from 'ember-truth-helpers';\n\nimport spreadAttributes from '../-private/eui-spread-attributes.ts';\nimport argOrDefault from '../helpers/arg-or-default.ts';\nimport classNames from '../helpers/class-names.ts';\nimport { getEuiThemeContext } from '../utils/emotion/consume.ts';\nimport {\n comboBoxBoxReset,\n comboBoxOptionLabel,\n createPartialStringEqualityOptionMatcher,\n entriesToPowerSelectOptions,\n findNextSelectableIndex,\n flattenComboBoxRows,\n flattenOptionGroups,\n getMatchingEntries,\n isComboBoxGroupLabel,\n isComboBoxOptionChecked,\n isComboBoxOptionSelected,\n selectedOptionForSearchValue,\n transformForCaseSensitivity\n} from '../utils/eui/combo-box.ts';\nimport {\n euiBackgroundColor,\n euiBorderColor,\n euiComboBoxStyles,\n euiFormVariables,\n euiPaddingSize,\n euiPanelStyles,\n euiPopoverPanelStyles,\n euiScreenReaderOnly\n} from '../utils/eui/styles.generated.ts';\nimport { euiClass, useEuiBorealisStyles } from '../utils/eui/styles.ts';\nimport EuiComboBoxOptionText from './eui-combo-box/option-text.gts';\nimport EuiComboBoxCreateOption from './eui-combo-box/create-option.gts';\nimport EuiComboBoxGroup from './eui-combo-box/group.gts';\nimport EuiComboBoxNoMatchesMessage from './eui-combo-box/no-matches-message.gts';\nimport EuiComboBoxOptions from './eui-combo-box/options.gts';\nimport EuiComboBoxSearchMessage from './eui-combo-box/search-message.gts';\nimport EuiComboBoxTrigger from './eui-combo-box/trigger.gts';\n\nimport type EuiI18n from '../services/eui-i18n';\nimport type EuiConfigService from '../services/eui-config';\nimport type {\n EuiComboBoxOptionMatcher,\n EuiComboBoxSortMatchesBy\n} from '../utils/eui/combo-box.ts';\nimport type { EuiComboBoxNode } from './eui-combo-box/node.gts';\nimport type { EuiComboBoxTruncationProps } from './eui-combo-box/option-text.gts';\nimport type { EuiTooltipArgs } from './eui-tool-tip';\nimport type { EuiCss } from '../utils/eui/styles.ts';\nimport type { PopoverAnchorPosition } from './eui-popover';\n\n/**\n * The part of upstream's `inputPopoverProps` (EuiInputPopover props) that\n * applies to the options list here: it is an ember-basic-dropdown panel, not\n * an EuiPopover. `zIndex` replaces the anchor's z-index plus 2000, and\n * `anchorPosition` picks the side (`up*` above, `down*` below) unless\n * `@verticalPosition` is set. `className` and any other key not listed\n * (`data-test-subj`, `aria-*`, …) go on the combo box root, which wraps the\n * input like upstream's popover root. `panelRef`, `popoverRef` and\n * EuiPopover's own focus props do not apply.\n */\nexport interface EuiComboBoxInputPopoverProps {\n /** Class name of the options list panel. */\n panelClassName?: string;\n /** Padding of the panel. Defaults to `'s'`. */\n panelPaddingSize?: 'none' | 'xs' | 's' | 'm' | 'l' | 'xl';\n /** Inline styles of the panel, as a camelCase object (an Emotion class). */\n panelStyle?: Record<string, string | number>;\n /** Minimum width of the panel, when the input is narrower. */\n panelMinWidth?: number;\n /** Extra styles composed last into the panel's class. */\n panelCss?: EuiCss;\n /** Upstream `panelProps`: `className` and `css` of the panel. */\n panelProps?: { className?: string; css?: EuiCss };\n /** The panel's z-index, instead of the anchor's z-index plus 2000. */\n zIndex?: number;\n /** `up*` opens the list above the input, `down*` below it. */\n anchorPosition?: PopoverAnchorPosition;\n /** Extra styles composed last into the combo box's root class. */\n css?: EuiCss;\n /**\n * Closes the list when the page, or an element containing the input,\n * scrolls (scrolling the list or the input does not). Defaults to `true`,\n * as upstream's combo box.\n */\n closeOnScroll?: boolean;\n /**\n * The open list always follows the input when the page scrolls\n * (ember-basic-dropdown); `false` is not supported.\n */\n repositionOnScroll?: boolean;\n /**\n * Distance in px between the input and the list. Defaults to `0`\n * (attached).\n */\n offset?: number;\n /**\n * Minimum distance in px between the list and the edges of the window or\n * of `container`, horizontally: a number, or `[top, right, bottom,\n * left]`. Only applied with `buffer` or `container`; then defaults to\n * `16`.\n */\n buffer?: number | [number, number, number, number];\n /** Keeps the list horizontally within this element's bounds. */\n container?: HTMLElement;\n /**\n * Called with the list's width (the input's, at least `panelMinWidth`)\n * when the combo box renders and whenever the input resizes.\n */\n onPanelResize?: (width: number) => void;\n /** Class of the combo box root (upstream's popover root). */\n className?: string;\n [key: string]: unknown;\n}\n\n/** `inputPopoverProps` keys that are not attributes of the root. */\nconst INPUT_POPOVER_ARGS = [\n 'panelClassName',\n 'panelPaddingSize',\n 'panelStyle',\n 'panelMinWidth',\n 'panelCss',\n 'panelProps',\n 'zIndex',\n 'anchorPosition',\n 'closeOnScroll',\n 'repositionOnScroll',\n 'offset',\n 'buffer',\n 'container',\n 'onPanelResize',\n 'panelRef',\n 'popoverRef',\n 'inputRef',\n 'input',\n 'isOpen',\n 'closePopover',\n 'fullWidth',\n 'disableFocusTrap',\n 'ownFocus',\n 'initialFocus',\n 'focusTrapProps',\n 'attachToAnchor',\n 'display',\n 'hasArrow',\n 'insert',\n 'repositionToCrossAxis',\n 'popoverScreenReaderText',\n 'onPositionChange',\n 'onTrapDeactivation',\n 'shouldAccountForOtherPopovers',\n 'style'\n];\n\n/** Upstream waits before listening, as opening may scroll (Firefox). */\nconst CLOSE_ON_SCROLL_DELAY = 500;\n\nexport type {\n EuiComboBoxNode,\n EuiComboBoxOptionMatcher,\n EuiComboBoxTruncationProps\n};\n\n/** `@onCreateOption`: the value, and all options with groups flattened. */\nexport type EuiComboBoxOnCreateOption = (\n search: string,\n flattenedOptions: any[]\n) => boolean | undefined | void;\n\n/**\n * An option object (options can also be plain strings). Every key is\n * optional; `label` is the text by default (see `@searchField`).\n */\nexport interface EuiComboBoxOptionOption {\n label?: string;\n /** Disables the option. */\n disabled?: boolean;\n /** Pill color, see `EuiBadge`. */\n color?: string;\n /** Text or a component before the label, in the list and the pill. */\n prepend?: EuiComboBoxNode;\n /** Text or a component after the label, in the list and the pill. */\n append?: EuiComboBoxNode;\n /** Tooltip of the option in the list (not on disabled options). */\n toolTipContent?: string;\n /** More `EuiToolTip` arguments for `toolTipContent`. */\n toolTipProps?: Partial<\n Pick<\n EuiTooltipArgs,\n | 'position'\n | 'delay'\n | 'title'\n | 'offset'\n | 'className'\n | 'css'\n | 'anchorClassName'\n >\n >;\n /** Truncation of this option, merged over `@truncationProps`. */\n truncationProps?: EuiComboBoxTruncationProps;\n /** Title of the option text (defaults to the label while truncated by CSS). */\n title?: string;\n /** A group: its options. Groups use `groupName` for their title. */\n options?: unknown[];\n [key: string]: unknown;\n}\n\ninterface PromiseProxy<T> extends Promise<T> {\n content: any;\n}\n\ninterface Select {\n selected: any;\n actions: {\n search: (str: string) => void;\n };\n}\n\nexport interface EuiComboBoxSignature {\n Element: HTMLDivElement;\n Args: {\n /**\n * Allows only one selected option (still passed to `@onChange` as a\n * one-item array). `{ asPlainText: true }` shows the selection as the\n * input's text instead of a pill. Defaults to multiple selection.\n *\n * Not upstream: with a block, a plain text selection is rendered with\n * that block (like the option rows) while nothing is typed, as\n * ember-eui 14 (ember-power-select) did, e.g. for enum values rendered\n * as an avatar and a translated label. The block receives the option,\n * then the select. Typing shows the input's text again, so search\n * works as usual. The input keeps the option's label as its value\n * (what screen readers announce and what typing replaces), so prefer\n * object options with a readable `label` over raw string values.\n * Without a block the input shows the label text, as upstream.\n */\n singleSelection?:\n | boolean\n | {\n asPlainText?: boolean;\n };\n /**\n * Lets the user add the typed text as a new option: shows an \"add\"\n * option when nothing matches (or always, with\n * `@alwaysShowCreateOption`), and Enter or leaving the combo box adds\n * the text (upstream). Called with the search text and all options\n * (groups flattened); return `false` to reject it. Add the result to\n * `@options` / `@selectedOptions` yourself. Text equal to a selected\n * option is not added again, and text equal to the only matching\n * option selects that option.\n */\n onCreateOption?: EuiComboBoxOnCreateOption;\n /** Shows the \"add\" option even when some options match. */\n alwaysShowCreateOption?: boolean;\n /**\n * The options: strings, or objects with a `label` (or `@searchField`).\n * Groups are `{ groupName: 'Fruits', options: [...] }` (or upstream's\n * `{ label: 'Fruits', options: [...] }`). In multiple selection the\n * selected options are not listed (upstream). A promise is supported\n * (shows `@loadingMessage` while pending). Never changed by the combo\n * box; pass a new array to change the options.\n */\n options: any[];\n /**\n * Custom search, e.g. to query a server: `(term, select) => results`\n * (or a promise). Without it the options are filtered locally, by\n * `@searchField` for objects. Selected options are left out of the\n * results in multiple selection.\n */\n search?: (term: string, select: Select) => any[] | PromiseProxy<any[]>;\n /** Key of object options to match the search text against, e.g. `'label'`. */\n searchField?: string;\n /** Shows the invalid state. */\n isInvalid?: boolean;\n /** Stretches the combo box to its container's width. */\n fullWidth?: boolean;\n /** Message shown before typing when `@search` is set. Defaults to \"Type to search\". */\n searchMessage?: string;\n /** Allows typing to filter options. Defaults to `true`. */\n searchEnabled?: boolean;\n /** Shows a button clearing the selection. Defaults to `true`. */\n isClearable?: boolean;\n /** Shows a spinner in the input and the list, e.g. while options load. */\n isLoading?: boolean;\n /** Disables the combo box. */\n isDisabled?: boolean;\n /** @deprecated Has no effect; use `@isDisabled`. */\n readOnly?: boolean;\n /** Component rendered instead of `@searchMessage`. */\n searchMessageComponent?: any;\n /** Smaller combo box, for dense forms. */\n compressed?: boolean;\n /** Called when the input gets focus (which opens the list, upstream). */\n onFocus?: (e: FocusEvent) => void;\n /** Called when the input loses focus. */\n onBlur?: (e: FocusEvent) => void;\n /** Called when the options list closes; return `false` to keep it open. */\n onClose?: (e: Event) => void;\n /** Called when the options list opens; return `false` to keep it closed. */\n onOpen?: (e: Event) => void;\n /**\n * Renders the options list next to the input instead of in a portal\n * at the end of the page (e.g. inside modals with their own scrolling).\n */\n renderInPlace?: boolean;\n /**\n * Text (HTML) of the \"add\" option; `{searchText}` is replaced by the\n * typed text. Defaults to \"Add **{searchText}** as custom option\".\n */\n customOptionText?: string;\n /** Message while `@options` or `@search` load. Defaults to \"Loading options...\". */\n loadingMessage?: any;\n /** Component rendering each selected option (pill). */\n selectedItemComponent?: any;\n /** Component rendered above the options. */\n beforeOptionsComponent?: any;\n /** Component rendered instead of `@placeholder`. */\n placeholderComponent?: any;\n /** Component rendered below the options. */\n afterOptionsComponent?: any;\n /** Placeholder of the search input. */\n searchPlaceholder?: any;\n /** Extra class for the options list. */\n dropdownClass?: string;\n /**\n * Props of the options list's popover (upstream `inputPopoverProps`),\n * see {@link EuiComboBoxInputPopoverProps}.\n */\n inputPopoverProps?: EuiComboBoxInputPopoverProps;\n /**\n * Called with the search `<input>` element once rendered, and with\n * `null` when it is removed.\n */\n inputRef?: (element: HTMLInputElement | null) => void;\n /** The selected options (items of `@options`). */\n selectedOptions?: any[];\n /**\n * Called with the new selection (an array, also with\n * `@singleSelection`). Update `@selectedOptions` here.\n */\n onChange: (selected: any[]) => void;\n /** Text shown when nothing is selected. */\n placeholder?: string;\n /** Anything, passed to custom components as `@extra`. */\n extra?: any;\n /**\n * Closes the options list after selecting one. Defaults to `true` for\n * single selection and `false` for multiple selection (upstream).\n */\n closeOnSelect?: boolean;\n /** Focuses the combo box and opens its options on render. */\n autoFocus?: boolean;\n /**\n * Option highlighted when the list opens, or an ember-power-select\n * `defaultHighlighted` function. By default nothing is highlighted\n * until the arrow keys are used (upstream), except single selection's\n * option when the list is opened by clicking.\n */\n defaultHighlighted?: any;\n /** Makes the options list as wide as the input. */\n matchTriggerWidth?: boolean;\n /** `tabindex` of the search input. */\n tabindex?: number;\n /** Opens the options list on render. */\n initiallyOpen?: boolean;\n /** Horizontal alignment of the options list: `'auto'`, `'left'`, `'right'` or `'center'`. */\n horizontalPosition?: string;\n /** Vertical position of the options list: `'auto'`, `'above'` or `'below'`. */\n verticalPosition?: string;\n /** Id of the element the options list renders into. */\n destination?: string;\n /** Prevents the page from scrolling while the options list is open. */\n preventScroll?: boolean;\n /**\n * Message when no option matches the search (or when there are no\n * options). Defaults to upstream's \"{searchValue} doesn't match any\n * options\" / \"There aren't any options available\".\n */\n noMatchesMessage?: string;\n /** @deprecated Has no effect; the \"no matches\" / \"add\" option is built in. */\n noMatchesMessageComponent?: any;\n /** Extra class for the element wrapping the options. */\n optionsClass?: string;\n /**\n * Height in px of each option in the (virtualized) list. Set it when the\n * block renders taller options. `'auto'` turns virtualization off so\n * long options wrap onto several lines (slower for long lists; no\n * truncation). Defaults to 29.\n */\n rowHeight?: number | 'auto';\n /**\n * Hides the options list: the combo box only takes typed values\n * (`@onCreateOption`, added with Enter), and has no dropdown icon.\n */\n noSuggestions?: boolean;\n /**\n * A character separating several values in the typed or pasted text,\n * typically `','`. Typing it adds the text before it; Enter (or leaving\n * the combo box) adds each value of pasted text.\n */\n delimiter?: string;\n /** Matches options case-sensitively. */\n isCaseSensitive?: boolean;\n /**\n * Matches options ignoring accents (\"medico\" finds \"Médico\"), as\n * ember-power-select did. Defaults to the app's\n * `euiComboBox.ignoreAccents` (eui-config), else `false` (upstream).\n * Only for the default matching (not `@matcher` / `@optionMatcher`).\n */\n ignoreAccents?: boolean;\n /**\n * `'startsWith'` lists the matches starting with the search text first;\n * `'none'` keeps the options' order. Defaults to `'none'`.\n */\n sortMatchesBy?: EuiComboBoxSortMatchesBy;\n /**\n * Truncation of long option texts, any `EuiTextTruncate` argument but\n * `text` (e.g. `{ truncation: 'middle' }`). Options can override it\n * with their own `truncationProps`. While searching, the text is\n * truncated around the match instead. Defaults to CSS truncation at\n * the end.\n */\n truncationProps?: EuiComboBoxTruncationProps;\n /**\n * Text, a component, or an array of them before the input, e.g. a\n * label. Only shown with `@singleSelection` (upstream), so pills never\n * wrap onto taller rows.\n */\n prepend?: EuiComboBoxNode | EuiComboBoxNode[];\n /** Like `@prepend`, after the input. Only with `@singleSelection`. */\n append?: EuiComboBoxNode | EuiComboBoxNode[];\n /**\n * Custom matching for local filtering: `(option, searchText) => -1` for\n * no match, anything else for a match. Defaults to upstream's matching\n * (the label includes the search text, ignoring case unless\n * `@isCaseSensitive`).\n */\n matcher?: (option: any, searchText: string) => number;\n /**\n * Upstream's custom matching, used before `@matcher`:\n * `({ option, searchValue, normalizedSearchValue, isCaseSensitive }) =>\n * boolean`.\n */\n optionMatcher?: EuiComboBoxOptionMatcher;\n /**\n * The options are already filtered for the search text (e.g. loaded\n * from a server in `@onSearchChange`): they are listed as they are,\n * without the selected options.\n */\n async?: boolean;\n /**\n * Called whenever the search text changes, with the text and whether\n * any option matches it.\n */\n onSearchChange?: (searchValue: string, hasMatchingOptions?: boolean) => void;\n /** Shows a \"return\" badge on the highlighted option. */\n onFocusBadge?: boolean;\n /** Matching used when typing while the list is closed. */\n typeAheadOptionMatcher?: (option: any, searchText: string) => number;\n /** Icon in the input, anything `EuiIcon`'s `@type` accepts. */\n triggerIcon?: any;\n /** Called when a selected option's pill is removed. */\n removeTag?: (option: any) => void;\n /** Called on every input with the text and the select API. */\n onInput?: (text: string, select: any, event: Event) => any;\n /**\n * Called on keydown (with the select API and the event) before the\n * combo box handles the key; return `false` to prevent that.\n */\n onKeydown?: (select: any, event: KeyboardEvent) => any;\n /** Called with ember-power-select's API (`actions.open()`, `search`, …). */\n registerApi?: (select: any) => void;\n /** Custom positioning of the options list, see ember-basic-dropdown. */\n calculatePosition?: (...args: any[]) => any;\n /** Event that opens the list: `'click'` or `'mousedown'`. */\n eventType?: string;\n /** Accessible label of the combo box. */\n ariaLabel?: string;\n /** Id of the element labelling the combo box. */\n ariaLabelledBy?: string;\n /** Marks the combo box as required for assistive technology. */\n required?: boolean;\n /** `role` of the search input. Defaults to `combobox`. */\n triggerRole?: string;\n /** `title` of the combo box. */\n title?: string;\n /** Id of the input, e.g. for an `EuiFormRow`'s label. */\n triggerId?: string;\n };\n Blocks: {\n /**\n * Renders each option (in the list and in the pills), with its index\n * and the search text (upstream `renderOption`): `as |option i search|`\n * → `<EuiHighlight @text={{option.label}} @search={{search}} />`\n * (with `@ignoreAccents={{true}}` too when ignoring accents). In\n * pills the second value is the select API and the search is empty.\n * Optional: without a block, options show their text (strings, or\n * `@searchField` / `label` of objects), with the search text highlighted\n * in the list like upstream. Option `prepend` / `append` render around\n * the block.\n */\n default: [any, number | Select, string];\n };\n}\n\ninterface Sliceable<T> {\n slice(): T[];\n}\n\nconst isSliceable = <T,>(coll: any): coll is Sliceable<T> => {\n return isArray(coll);\n};\n\nexport const toPlainArray = <T,>(collection: T[] | Sliceable<T>): T[] => {\n if (isSliceable<T>(collection)) {\n return collection.slice();\n } else {\n return collection;\n }\n};\n\n/**\n * Upstream `EuiInputPopover`: the options list stacks 2000 (`levels.menu`)\n * above its anchor's z-index, so it clears modals and flyouts it opens in\n * while tooltips (`levels.toast`) stay above it on the page.\n */\nexport const COMBO_BOX_LIST_Z_INDEX_OFFSET = 2000;\n\n/** The parts of ember-power-select's API the container blur uses. */\ntype ContainerBlurApi = Select & {\n uniqueId?: string;\n isOpen?: boolean;\n highlighted?: unknown;\n actions: {\n close?: (e?: Event) => void;\n highlight?: (option: unknown) => void;\n };\n};\n\nexport default class EuiComboBoxComponent extends Component<EuiComboBoxSignature> {\n @service declare euiI18n: EuiI18n;\n @service('eui-config') declare euiConfig: EuiConfigService;\n\n /**\n * `@ignoreAccents`, else the app's `euiComboBox.ignoreAccents`\n * (eui-config), else `false` (upstream).\n */\n get ignoreAccents(): boolean {\n return (\n this.args.ignoreAccents ??\n this.euiConfig?.getConfig('euiComboBox.ignoreAccents') ??\n false\n );\n }\n\n // UI state only: everything else is derived from the arguments\n\n /** ember-power-select's API (open state, highlighted option, …). */\n @tracked select: any = null;\n\n /**\n * The search text, as typed (upstream `searchValue`). Kept apart from\n * `select`, which is replaced on every highlight change: options derived\n * from it would re-run ember-power-select's options modifier, which\n * resets the highlight, in a loop.\n */\n @tracked searchValue = '';\n\n /** The options list's z-index, measured from the anchor when it opens. */\n @tracked listZIndex = COMBO_BOX_LIST_Z_INDEX_OFFSET;\n\n /** The combo box has focus (upstream `hasFocus`). */\n @tracked hasFocus = false;\n\n /** The search input itself has focus (the screen reader instructions). */\n @tracked inputHasFocus = false;\n\n /** The value `@options` resolved to, when it is a promise. */\n @tracked private settledOptions?: { promise: unknown; value: unknown };\n\n private watchedPromises = new WeakSet<object>();\n\n /** The last search text given to `@onSearchChange`. */\n private notifiedSearch = '';\n\n /**\n * The option to highlight next: after adding one (upstream moves the\n * active option to the next one), or the selected option when single\n * selection opens on click.\n */\n private pendingHighlight?:\n | { index: number; added: unknown }\n | { selected: unknown };\n\n get loadingMessage() {\n return (\n this.args.loadingMessage ||\n this.euiI18n.lookupToken(\n 'euiComboBox.loadingMessage',\n 'Loading options...'\n )\n );\n }\n\n get noMatchesMessage() {\n return (\n this.args.noMatchesMessage ||\n this.euiI18n.lookupToken(\n 'euiComboBox.noMatchesMessage',\n 'No results found'\n )\n );\n }\n\n get searchMessage() {\n return (\n this.args.searchMessage ||\n this.euiI18n.lookupToken('euiComboBox.searchMessage', 'Type to search')\n );\n }\n\n get alwaysShowCreateOption() {\n return this.args.onCreateOption && this.args.alwaysShowCreateOption;\n }\n\n /**\n * Upstream `euiComboBoxStyles` on the root (power-select's trigger):\n * relative, full width up to the form width (or 100% with `@fullWidth`).\n */\n @cached\n get rootClass(): string {\n const context = getEuiThemeContext(this);\n const form = useEuiBorealisStyles(context, euiFormVariables);\n\n return euiClass(\n context,\n comboBoxBoxReset,\n euiComboBoxStyles.euiComboBox,\n this.args.fullWidth\n ? euiComboBoxStyles.fullWidth\n : { maxInlineSize: form.maxWidth },\n this.args.inputPopoverProps?.css\n );\n }\n\n /**\n * The options list panel (ember-basic-dropdown's content): upstream\n * `EuiInputPopover` (`panelPaddingSize=\"s\"`, attached to the input), i.e.\n * an `EuiPanel` (plain, radius m) composed with the popover panel styles\n * in one class. The attached shadow follows the side the list opened on.\n */\n @cached\n get panelClass(): string {\n const context = getEuiThemeContext(this);\n const upstream = context.upstream;\n const panel = useEuiBorealisStyles(context, euiPanelStyles);\n const popover = useEuiBorealisStyles(context, euiPopoverPanelStyles);\n const colorMode = upstream.colorMode === 'DARK' ? 'dark' : 'light';\n const popoverProps = this.args.inputPopoverProps;\n\n return euiClass(\n context,\n // no React global reset; the portal also leaves the provider's color\n // wrapper, so the panel sets the theme's text color itself\n {\n boxSizing: 'border-box',\n color: upstream.euiTheme.colors.textParagraph,\n textAlign: 'start',\n '--ember-basic-dropdown-content-background-color':\n 'var(--euiPopoverBackgroundColor)'\n },\n panel.euiPanel,\n panel.grow,\n panel.radius.m,\n {\n padding:\n euiPaddingSize(upstream, this.args.inputPopoverProps?.panelPaddingSize ?? 's') ?? 0\n },\n { backgroundColor: euiBackgroundColor(upstream, 'plain') },\n upstream.highContrastMode && {\n border: upstream.euiTheme.border.thin,\n borderColor: euiBorderColor(upstream, 'plain')\n },\n popover.euiPopover__panel,\n popover[colorMode],\n popover.isOpen,\n popover.isAttached.isAttached,\n popover.isAttached.bottom,\n { '&.ember-basic-dropdown-content--above': popover.isAttached.top },\n // ember-power-select's result count announcement\n `& .ember-power-select-visually-hidden{${euiScreenReaderOnly()}}`,\n popoverProps?.panelMinWidth != null && {\n minInlineSize: popoverProps.panelMinWidth\n },\n popoverProps?.panelStyle,\n popoverProps?.panelCss,\n popoverProps?.panelProps?.css\n );\n }\n\n get listZIndexClass(): string {\n return euiClass(getEuiThemeContext(this), {\n '--ember-basic-dropdown-content-z-index': String(\n this.args.inputPopoverProps?.zIndex ?? this.listZIndex\n )\n });\n }\n\n /** `@verticalPosition`, else the side `inputPopoverProps.anchorPosition` names. */\n get verticalPosition(): string | undefined {\n if (this.args.verticalPosition) return this.args.verticalPosition;\n\n const anchorPosition = this.args.inputPopoverProps?.anchorPosition;\n\n if (anchorPosition?.startsWith('up')) return 'above';\n if (anchorPosition?.startsWith('down')) return 'below';\n\n return undefined;\n }\n\n get dropdownClass(): string {\n return [\n 'euiPanel euiPanel--plain euiPopover__panel',\n this.panelClass,\n this.listZIndexClass,\n this.args.inputPopoverProps?.panelClassName,\n this.args.inputPopoverProps?.panelProps?.className,\n this.args.dropdownClass\n ]\n .filter(Boolean)\n .join(' ');\n }\n\n\n /**\n * `@options`, or what it resolved to when it is a promise (`undefined`\n * while it is pending).\n */\n get sourceOptions(): unknown[] | undefined {\n const options = this.args.options as unknown;\n\n if (isPromiseLike(options)) {\n if (this.settledOptions?.promise === options) {\n return toList(this.settledOptions.value);\n }\n\n this.watchPromise(options);\n\n return undefined;\n }\n\n return toList(options);\n }\n\n private watchPromise(promise: PromiseLike<unknown>) {\n if (this.watchedPromises.has(promise as object)) return;\n\n this.watchedPromises.add(promise as object);\n\n const settle = (value: unknown) => {\n if (this.isDestroying || this.isDestroyed) return;\n // only the latest `@options` counts\n if (this.args.options !== (promise as unknown)) return;\n\n this.settledOptions = { promise, value };\n };\n\n promise.then(settle, () => settle([]));\n }\n\n /** `@options` is a promise that has not resolved yet. */\n get optionsPending(): boolean {\n return this.sourceOptions === undefined;\n }\n\n @cached\n get selectedOptions(): unknown[] {\n return toList(this.args.selectedOptions);\n }\n\n /**\n * `@optionMatcher` (upstream), else `@matcher` (ember-power-select's\n * `(option, searchText) => index`), else upstream's partial string\n * matcher: the label includes the search text, ignoring case unless\n * `@isCaseSensitive`.\n */\n @cached\n get optionMatcher(): EuiComboBoxOptionMatcher {\n const { optionMatcher, matcher, searchField } = this.args;\n\n if (optionMatcher) return optionMatcher;\n\n if (matcher) {\n return ({ option, searchValue }) => matcher(option, searchValue) >= 0;\n }\n\n return createPartialStringEqualityOptionMatcher(\n searchField,\n this.ignoreAccents\n );\n }\n\n /** Upstream `getMatchingOptions` (with group titles) for a search text. */\n matchingEntriesFor(\n searchValue: string,\n selectedOptions: readonly unknown[] = this.selectedOptions\n ): unknown[] {\n const { async, isCaseSensitive, search, searchField, singleSelection } =\n this.args;\n\n return getMatchingEntries({\n options: this.sourceOptions ?? [],\n selectedOptions,\n searchValue,\n optionMatcher: this.optionMatcher,\n searchField,\n isCaseSensitive,\n // `@async` options (and `@search` results) are already filtered\n isPreFiltered: Boolean(async || search),\n showPrevSelected: Boolean(singleSelection),\n sortMatchesBy: this.args.sortMatchesBy\n });\n }\n\n @cached\n get matchingEntries(): unknown[] {\n return this.matchingEntriesFor(this.searchValue);\n }\n\n /**\n * What the list shows, derived on every change of `@options`,\n * `@selectedOptions` and the search text (upstream `matchingOptions`):\n * the matches, without the selected options in multiple selection, as\n * ember-power-select options. Neither `@options` nor its options are\n * copied or changed.\n */\n @cached\n get powerSelectOptions(): unknown[] {\n return entriesToPowerSelectOptions(this.matchingEntries);\n }\n\n /**\n * `@search`, with its results filtered like `@options` (selected options\n * removed in multiple selection, `@sortMatchesBy`).\n */\n @cached\n get search(): EuiComboBoxSignature['Args']['search'] {\n const search = this.args.search;\n\n if (!search) return undefined;\n\n return (term: string, select: Select) => {\n const results = search(term, select) as unknown;\n const strip = (list: unknown) =>\n entriesToPowerSelectOptions(\n getMatchingEntries({\n options: toList(list),\n selectedOptions: this.selectedOptions,\n searchValue: term,\n optionMatcher: this.optionMatcher,\n searchField: this.args.searchField,\n isCaseSensitive: this.args.isCaseSensitive,\n isPreFiltered: true,\n showPrevSelected: Boolean(this.args.singleSelection),\n sortMatchesBy: this.args.sortMatchesBy\n })\n );\n\n if (isPromiseLike(results)) {\n const stripped = Promise.resolve(results).then(strip) as Promise<\n unknown[]\n > & { cancel?: () => void };\n const cancel = (results as { cancel?: () => void }).cancel;\n\n // ember-power-select cancels pending ember-concurrency searches\n if (typeof cancel === 'function') {\n stripped.cancel = () => cancel.call(results);\n }\n\n return stripped as unknown as PromiseProxy<any[]>;\n }\n\n return strip(results);\n };\n }\n\n /** Upstream `areAllOptionsSelected` (never with `@async` options). */\n get areAllOptionsSelected(): boolean {\n if (this.args.async || this.args.search) return false;\n\n const options = flattenOptionGroups(this.sourceOptions ?? []);\n\n return (\n options.length > 0 &&\n options.every((option) =>\n isComboBoxOptionSelected(\n option,\n this.selectedOptions,\n this.args.searchField,\n this.args.isCaseSensitive\n )\n )\n );\n }\n\n /**\n * Upstream empty states of the list: the search does not match, there\n * are no options, or all of them are selected.\n */\n get emptyStateMessage(): ReturnType<typeof htmlSafe> | string {\n const search = this.searchValue;\n const custom = this.args.noMatchesMessage;\n\n if (search) {\n return (\n custom ??\n this.i18nHtml(\n 'euiComboBoxOptionsList.noMatchingOptions',\n \"{searchValue} doesn't match any options\",\n { searchValue: strong(search) }\n )\n );\n }\n\n if (!(this.sourceOptions ?? []).length && !this.args.search) {\n return (\n custom ??\n this.euiI18n.lookupToken(\n 'euiComboBoxOptionsList.noAvailableOptions',\n \"There aren't any options available\"\n )\n );\n }\n\n if (this.areAllOptionsSelected) {\n return this.euiI18n.lookupToken(\n 'euiComboBoxOptionsList.allOptionsSelected',\n \"You've selected all available options\"\n );\n }\n\n return this.noMatchesMessage;\n }\n\n /**\n * Upstream: with `@onCreateOption`, text equal to a selected option is\n * not offered again (\"… has already been added\").\n */\n get alreadyAddedMessage(): ReturnType<typeof htmlSafe> | undefined {\n const search = this.searchValue;\n\n if (!search || !this.args.onCreateOption) return undefined;\n if (this.args.delimiter && search.includes(this.args.delimiter)) {\n return undefined;\n }\n\n const selected = selectedOptionForSearchValue(\n this.selectedOptions,\n search,\n this.args.searchField,\n this.args.isCaseSensitive\n );\n\n if (selected === undefined) return undefined;\n\n return this.i18nHtml(\n 'euiComboBoxOptionsList.alreadyAdded',\n '{label} has already been added',\n { label: strong(comboBoxOptionLabel(selected, this.args.searchField)) }\n );\n }\n\n private i18nHtml(\n token: string,\n fallback: string,\n values: Record<string, string>\n ): ReturnType<typeof htmlSafe> {\n const text = this.euiI18n.lookupToken(token, fallback, values) as unknown;\n\n return htmlSafe(\n isHTMLSafe(text) ? (text as { toString(): string }).toString() : String(text)\n );\n }\n\n /** The list shows a spinner: `@isLoading`, or `@options` still loading. */\n get isLoadingOptions(): boolean {\n return Boolean(this.args.isLoading) || this.optionsPending;\n }\n\n /**\n * Upstream: leftover text marks the combo box invalid once the list\n * closes or it loses focus (it was not added).\n */\n get markAsInvalid(): boolean {\n if (this.args.isInvalid) return true;\n if (!this.searchValue) return false;\n\n return !this.hasFocus || (!this.args.noSuggestions && !this.select?.isOpen);\n }\n\n /** Upstream closes the list after a choice only with single selection. */\n get closeOnSelect(): boolean {\n return this.args.closeOnSelect ?? Boolean(this.args.singleSelection);\n }\n\n /**\n * Upstream's screen reader instructions, read (politely) while the input\n * has focus.\n */\n get screenReaderInstructions(): string | undefined {\n if (!this.inputHasFocus) return undefined;\n\n const { placeholder } = this.args;\n const search = this.searchValue;\n const selected = this.selectedOptions;\n const value = selected\n .map((option) => comboBoxOptionLabel(option, this.args.searchField))\n .join(', ');\n const last = selected[selected.length - 1];\n\n return (\n `Combo box. Selected. ${search ? `${search}. Selected. ` : ''}${\n selected.length > 0\n ? `${value}. Press Backspace to delete ${comboBoxOptionLabel(\n last,\n this.args.searchField\n )}. `\n : ''\n }Combo box input. ${placeholder ? `${placeholder}.` : ''} Type some text or, to display a list of choices, press Down Arrow. ` +\n 'To exit the list of choices, press Escape.'\n );\n }\n\n get listboxAriaLabel(): string {\n return this.euiI18n.lookupToken(\n 'euiComboBox.listboxAriaLabel',\n 'Choose from the following options'\n );\n }\n\n /** Untracked: the first measured option row shares its width (upstream). */\n optionWidth?: number;\n\n setOptionWidth = (width: number) => {\n this.optionWidth = width;\n };\n\n /** EuiComboBox's `@truncationProps` merged with the option's own. */\n truncationFor = (option: unknown): EuiComboBoxTruncationProps | undefined => {\n const own =\n option && typeof option === 'object'\n ? (option as EuiComboBoxOptionOption).truncationProps\n : undefined;\n\n if (!this.args.truncationProps && !own) return undefined;\n\n return { ...this.args.truncationProps, ...own };\n };\n\n labelFor = (option: unknown) =>\n comboBoxOptionLabel(option, this.args.searchField);\n\n /** Options rows yield their index; pills yield the select API. */\n isOptionRow = (index: unknown) => typeof index === 'number';\n\n /** ember-power-select must not filter the matches again. */\n matchAll = () => 0;\n\n <template>\n {{! @glint-nocheck: not typesafe yet }}\n\n <PowerSelect\n @multiple={{true}}\n {{spreadAttributes @inputPopoverProps this.inputPopoverArgs}}\n ...attributes\n @onChange={{this.onChange}}\n @onFocus={{this.onFocus}}\n @onBlur={{this.onBlur}}\n @onOpen={{this.onOpen}}\n @onClose={{this.onClose}}\n @placeholderComponent={{@placeholderComponent}}\n @searchMessage={{this.searchMessage}}\n @searchMessageComponent={{if\n @searchMessageComponent\n @searchMessageComponent\n EuiComboBoxSearchMessage\n }}\n @noMatchesMessage={{this.noMatchesMessage}}\n @matchTriggerWidth={{@matchTriggerWidth}}\n @options={{this.powerSelectOptions}}\n @selected={{@selectedOptions}}\n @closeOnSelect={{this.closeOnSelect}}\n @defaultHighlighted={{if\n @defaultHighlighted\n @defaultHighlighted\n this.defaultHighlighted\n }}\n @highlightOnHover={{false}}\n @searchField={{@searchField}}\n @searchEnabled={{argOrDefault @searchEnabled true}}\n @tabindex={{if (argOrDefault @searchEnabled true) \"-1\" @tabindex}}\n @initiallyOpened={{and (not @isDisabled) @autoFocus (not @noSuggestions)}}\n @triggerComponent={{component\n EuiComboBoxTrigger\n fullWidth=@fullWidth\n compressed=@compressed\n isInvalid=this.markAsInvalid\n singleSelection=@singleSelection\n hasOptionBlock=(has-block)\n onClose=@removeTag\n isLoading=@isLoading\n autoFocus=(and (not @isDisabled) @autoFocus)\n icon=@triggerIcon\n prepend=@prepend\n append=@append\n noSuggestions=@noSuggestions\n inputTabindex=@tabindex\n inputRef=@inputRef\n inputRole=@triggerRole\n inputAriaLabel=@ariaLabel\n inputAriaLabelledBy=@ariaLabelledBy\n inputRequired=@required\n onClear=this.clearSelectedOptions\n onToggleList=this.onToggleListClick\n onToggleBlur=this.onToggleBlur\n onToggleKeydown=this.onToggleKeydown\n onPlainTextClick=this.onPlainTextClick\n screenReaderInstructions=this.screenReaderInstructions\n }}\n @matcher={{this.matchAll}}\n @initiallyOpen={{@initiallyOpen}}\n @typeAheadOptionMatcher={{@typeAheadOptionMatcher}}\n @buildSelection={{this.buildSelection}}\n @search={{this.search}}\n @onInput={{this.onInput}}\n @onKeydown={{this.onKeydown}}\n @scrollTo={{this.scrollTo}}\n @registerAPI={{queue this.registerAPI (optional @registerApi)}}\n @horizontalPosition={{@horizontalPosition}}\n @destination={{@destination}}\n @preventScroll={{@preventScroll}}\n @renderInPlace={{@renderInPlace}}\n @verticalPosition={{this.verticalPosition}}\n @disabled={{@isDisabled}}\n @calculatePosition={{this.calculatePosition}}\n @eventType={{@eventType}}\n @ariaLabel={{unless (argOrDefault @searchEnabled true) @ariaLabel}}\n @ariaLabelledBy={{unless\n (argOrDefault @searchEnabled true)\n @ariaLabelledBy\n }}\n @required={{unless (argOrDefault @searchEnabled true) @required}}\n @triggerRole={{if\n (argOrDefault @searchEnabled true)\n \"presentation\"\n @triggerRole\n }}\n @title={{@title}}\n @triggerId={{@triggerId}}\n @allowClear={{and (argOrDefault @isClearable true) (not @isDisabled)}}\n @loadingMessage={{this.loadingMessage}}\n @selectedItemComponent={{@selectedItemComponent}}\n @beforeOptionsComponent={{@beforeOptionsComponent}}\n @afterOptionsComponent={{if\n @afterOptionsComponent\n @afterOptionsComponent\n (if\n (and\n @onCreateOption\n (not this.select.loading)\n (not this.isLoadingOptions)\n this.searchValue\n this.alwaysShowCreateOption\n (not this.alreadyAddedMessage)\n )\n (component\n EuiComboBoxCreateOption\n customOptionText=@customOptionText\n onCreateOption=this.onCreateOption\n select=this.select\n alwaysShow=true\n delimiter=@delimiter\n )\n )\n }}\n @placeholder={{@placeholder}}\n @searchPlaceholder={{@searchPlaceholder}}\n @optionsComponent={{component\n EuiComboBoxOptions\n rowHeight=@rowHeight\n truncationProps=@truncationProps\n class=@optionsClass\n singleSelection=(if @singleSelection true false)\n selectedOptions=this.selectedOptions\n searchField=@searchField\n isLoading=this.isLoadingOptions\n onFocusBadge=@onFocusBadge\n listboxAriaLabel=this.listboxAriaLabel\n }}\n @extra={{@extra}}\n @groupComponent={{component EuiComboBoxGroup}}\n @triggerClass={{classNames\n \"euiComboBox\"\n this.rootClass\n @inputPopoverProps.className\n (if @isDisabled \"euiComboBox-isDisabled\")\n (if this.markAsInvalid \"euiComboBox-isInvalid\")\n (if this.select.isOpen \"euiComboBox-isOpen\")\n }}\n @noMatchesMessageComponent={{if\n this.isLoadingOptions\n (component\n EuiComboBoxOptions\n isLoading=true\n loadingMessage=this.loadingMessage\n )\n (if\n (and\n @onCreateOption\n this.searchValue\n (not this.alwaysShowCreateOption)\n (not this.alreadyAddedMessage)\n )\n (component\n EuiComboBoxCreateOption\n customOptionText=@customOptionText\n onCreateOption=this.onCreateOption\n select=this.select\n alwaysShow=false\n delimiter=@delimiter\n )\n (component\n EuiComboBoxNoMatchesMessage\n message=(if\n this.alreadyAddedMessage\n this.alreadyAddedMessage\n this.emptyStateMessage\n )\n )\n )\n }}\n @dropdownClass={{this.dropdownClass}}\n as |option i|\n >\n {{#if (has-block)}}\n {{yield option i (if (this.isOptionRow i) this.searchValue \"\")}}\n {{else if (this.isOptionRow i)}}\n <EuiComboBoxOptionText\n @text={{this.labelFor option}}\n @search={{this.searchValue}}\n @isCaseSensitive={{@isCaseSensitive}}\n @ignoreAccents={{this.ignoreAccents}}\n @rowHeight={{@rowHeight}}\n @truncationProps={{this.truncationFor option}}\n @width={{this.optionWidth}}\n @onResize={{this.setOptionWidth}}\n />\n {{else}}\n {{this.labelFor option}}\n {{/if}}\n </PowerSelect>\n </template>\n\n /** Keeps the highlighted option in view in the virtualized list. */\n @action\n scrollTo(option: any, select: { results: unknown[]; uniqueId: string }): void {\n const optionsList = document.querySelector(\n `[data-combo-box-list=\"${select.uniqueId}\"]`\n ) as HTMLElement;\n\n if (!optionsList) {\n return;\n }\n\n const index = flattenComboBoxRows(toList(select.results)).indexOf(option);\n\n if (index === -1) {\n return;\n }\n\n const optionElement = optionsList.querySelector(\n `[data-option-index=\"${index}\"]`\n ) as HTMLElement;\n\n if (!optionElement) {\n return;\n }\n\n const optionTopScroll = optionElement.offsetTop;\n const optionBottomScroll = optionTopScroll + optionElement.offsetHeight;\n\n if (optionBottomScroll > optionsList.offsetHeight + optionsList.scrollTop) {\n optionsList.scrollTop = optionBottomScroll - optionsList.offsetHeight;\n } else if (optionTopScroll < optionsList.scrollTop) {\n optionsList.scrollTop = optionTopScroll;\n }\n }\n\n get inputPopoverArgs(): readonly string[] {\n return INPUT_POPOVER_ARGS;\n }\n\n /** The combo box root (power-select's trigger). */\n triggerElement(): HTMLElement | null {\n const id = (this.select as unknown as { uniqueId?: string } | undefined)\n ?.uniqueId;\n\n return id\n ? document.querySelector<HTMLElement>(`[data-ebd-id=\"${id}-trigger\"]`)\n : null;\n }\n\n /** The open list's panel. */\n contentElement(): HTMLElement | null {\n const id = (this.select as unknown as { uniqueId?: string } | undefined)\n ?.uniqueId;\n\n return id\n ? document.getElementById(`ember-basic-dropdown-content-${id}`)\n : null;\n }\n\n /**\n * ember-basic-dropdown's position with upstream's `offset` (a gap from\n * the input) and `buffer` / `container` (horizontal bounds).\n */\n calculatePosition = (\n trigger: HTMLElement,\n content: HTMLElement,\n destination: HTMLElement,\n options: { renderInPlace?: boolean; [key: string]: unknown }\n ) => {\n const calculate = (this.args.calculatePosition ??\n defaultCalculatePosition) as (...args: unknown[]) => {\n horizontalPosition: string;\n verticalPosition: string;\n style: { top?: number; left?: number; [key: string]: unknown };\n };\n const position = calculate(trigger, content, destination, options);\n const props = this.args.inputPopoverProps;\n\n if (!props) return position;\n\n const style = { ...position.style };\n const offset = props.offset ?? 0;\n\n if (offset && typeof style.top === 'number') {\n style.top += position.verticalPosition === 'above' ? -offset : offset;\n }\n\n if (\n (props.buffer !== undefined || props.container) &&\n typeof style.left === 'number' &&\n !options.renderInPlace\n ) {\n const buffer = props.buffer ?? 16;\n const [, right, , left] = Array.isArray(buffer)\n ? buffer\n : [buffer, buffer, buffer, buffer];\n const bounds = props.container?.getBoundingClientRect() ?? {\n left: 0,\n right: document.documentElement.clientWidth || window.innerWidth\n };\n // `style.left` is relative to the panel's positioned ancestor, or to\n // the document\n const parent = content.offsetParent;\n const origin =\n !parent ||\n parent === document.body ||\n parent === document.documentElement\n ? -window.scrollX\n : parent.getBoundingClientRect().left;\n const width = content.getBoundingClientRect().width;\n const min = bounds.left + left - origin;\n const max = bounds.right - right - width - origin;\n\n style.left = Math.max(min, Math.min(style.left as number, max));\n }\n\n return { ...position, style };\n };\n\n private scrollCleanup?: () => void;\n\n /** Upstream `closeOnScroll` (EuiInputPopover), on by default here. */\n private listenToScroll(): void {\n this.stopListeningToScroll();\n\n if (this.args.inputPopoverProps?.closeOnScroll === false) return;\n\n const onScroll = (event: Event) => {\n const target = event.target as Node | null;\n const trigger = this.triggerElement();\n const panel = this.contentElement();\n\n if (!target || !trigger) return;\n if (panel?.contains(target) || trigger.contains(target)) return;\n // only scrolling that moves the input closes the list\n if (!target.contains(trigger)) return;\n\n const api = this.select as\n | (Select & { isOpen?: boolean; actions: { close?: () => void } })\n | undefined;\n\n if (api?.isOpen) api.actions.close?.();\n };\n const timeout = window.setTimeout(() => {\n window.addEventListener('scroll', onScroll, {\n passive: true,\n capture: true\n });\n }, CLOSE_ON_SCROLL_DELAY);\n\n this.scrollCleanup = () => {\n window.clearTimeout(timeout);\n window.removeEventListener('scroll', onScroll, { capture: true });\n };\n }\n\n private stopListeningToScroll(): void {\n this.scrollCleanup?.();\n this.scrollCleanup = undefined;\n }\n\n private panelResizeObserver?: ResizeObserver;\n private lastPanelWidth?: number;\n\n /** Upstream `onPanelResize`: the input's width, at least `panelMinWidth`. */\n private observePanelWidth(): void {\n if (this.panelResizeObserver || !this.args.inputPopoverProps?.onPanelResize) {\n return;\n }\n\n const trigger = this.triggerElement();\n\n if (!trigger || typeof ResizeObserver === 'undefined') return;\n\n this.panelResizeObserver = new ResizeObserver(() => {\n const props = this.args.inputPopoverProps;\n const width = Math.max(\n trigger.getBoundingClientRect().width,\n props?.panelMinWidth ?? 0\n );\n\n if (width === this.lastPanelWidth) return;\n\n this.lastPanelWidth = width;\n props?.onPanelResize?.(width);\n });\n this.panelResizeObserver.observe(trigger);\n }\n\n willDestroy(): void {\n super.willDestroy();\n this.stopListeningToScroll();\n this.panelResizeObserver?.disconnect();\n this.panelResizeObserver = undefined;\n }\n\n @action\n registerAPI(select: Select) {\n this.select = select;\n\n if (!this.panelResizeObserver && this.args.inputPopoverProps?.onPanelResize) {\n // the trigger is in the DOM once power-select has rendered\n schedule('afterRender', () => {\n if (!this.isDestroying && !this.isDestroyed) this.observePanelWidth();\n });\n }\n\n // ember-power-select may change the search itself (e.g. after a choice)\n this.updateSearchValue(\n (select as { searchText?: string })?.searchText ?? ''\n );\n }\n\n /** Keeps `searchValue` in step and tells `@onSearchChange`. */\n updateSearchValue(value: string) {\n if (value !== this.searchValue) this.searchValue = value;\n\n if (value === this.notifiedSearch) return;\n\n this.notifiedSearch = value;\n\n const onSearchChange = this.args.onSearchChange;\n\n if (onSearchChange) {\n const hasMatchingOptions = this.matchingEntriesFor(value).some(\n (entry) => !isComboBoxGroupLabel(entry)\n );\n\n onSearchChange(value, hasMatchingOptions);\n }\n }\n\n /** Upstream `clearSearchValue`. */\n clearSearch() {\n this.select?.actions.search('');\n this.updateSearchValue('');\n }\n\n /**\n * Upstream `activeOptionIndex` rules, as ember-power-select's\n * `defaultHighlighted`: nothing is highlighted when the list opens (the\n * selected option when single selection opens on click), the highlight\n * stays while its option is listed, and after adding an option it moves\n * to the next one.\n */\n defaultHighlighted = ({\n results,\n highlighted\n }: {\n results: unknown[];\n highlighted: unknown;\n }): unknown => {\n const { rows, selectable } = selectableRows(toList(results));\n const pending = this.pendingHighlight;\n\n if (pending && 'selected' in pending) {\n this.pendingHighlight = undefined;\n\n return rows.find(\n (row, index) =>\n selectable[index] &&\n isComboBoxOptionChecked(\n row,\n [pending.selected],\n this.args.searchField\n )\n );\n }\n\n if (pending) {\n const remainingIndexes = rows\n .map((_, index) => index)\n .filter((index) => rows[index] !== pending.added);\n\n // the added option left the list: the move is done\n if (remainingIndexes.length === rows.length) {\n this.pendingHighlight = undefined;\n }\n\n const next = findNextSelectableIndex(\n remainingIndexes,\n (i) => selectable[remainingIndexes[i]!] === true,\n Math.max(0, Math.min(pending.index, remainingIndexes.length - 1))\n );\n\n return next === -1 ? undefined : rows[remainingIndexes[next]!];\n }\n\n if (highlighted !== undefined && rows.includes(highlighted)) {\n return highlighted;\n }\n\n return undefined;\n };\n\n @action\n onChange(selected: any[]) {\n if (this.args.singleSelection) {\n // keep only the option that was just chosen\n this.args.onChange(\n selected.length > 0 ? [selected[selected.length - 1]] : []\n );\n\n return;\n }\n\n this.args.onChange(selected);\n }\n\n @action\n onOpen(select: Select, event: Event): boolean | void {\n // upstream `noSuggestions`: the list never opens\n if (this.args.noSuggestions) return false;\n\n // ember-power-select calls it with its API first\n const onOpen = this.args.onOpen as\n | ((select: Select, event: Event) => boolean | void)\n | undefined;\n\n const result = onOpen?.(select, event);\n\n if (result === false) return false;\n\n const trigger = document.querySelector<HTMLElement>(\n `[data-ebd-id=\"${(select as unknown as { uniqueId: string }).uniqueId}-trigger\"]`\n );\n this.listZIndex =\n (trigger ? getElementZIndex(trigger, document.body) : 0) +\n COMBO_BOX_LIST_Z_INDEX_OFFSET;\n\n this.listenToScroll();\n\n // upstream `onComboBoxClick`: single selection highlights its option\n const selected = this.selectedOptions[0];\n\n if (\n this.args.singleSelection &&\n selected !== undefined &&\n event &&\n /^(mouse|pointer|touch|click)/.test(event.type)\n ) {\n this.pendingHighlight = { selected };\n }\n\n return result;\n }\n\n @action\n onClose(select: Select, event: Event): boolean | void {\n const onClose = this.args.onClose as\n | ((select: Select, event: Event) => boolean | void)\n | undefined;\n const result = onClose?.(select, event);\n\n if (result !== false) {\n this.pendingHighlight = undefined;\n this.stopListeningToScroll();\n }\n\n return result;\n }\n\n /** Upstream `onComboBoxFocus`: focusing the input opens the list. */\n @action\n onFocus(select: Select, event: FocusEvent): void {\n (this.args.onFocus as ((...args: unknown[]) => void) | undefined)?.(\n select,\n event\n );\n\n this.hasFocus = true;\n this.inputHasFocus = true;\n\n const api = (this.select ?? select) as Select & {\n isOpen?: boolean;\n actions: { open?: () => void };\n };\n\n if (!this.args.isDisabled && !this.args.noSuggestions && !api?.isOpen) {\n api?.actions.open?.();\n }\n }\n\n /**\n * Typing `@delimiter` adds the text before it (upstream\n * `onSearchChange`), and clears the input.\n */\n @action\n onInput(term: string, select: Select, event: Event): string | false | void {\n const corrected = this.args.onInput?.(term, select, event);\n\n if (corrected === false) return false;\n\n const text = typeof corrected === 'string' ? corrected : term;\n const delimiter = this.args.delimiter;\n\n this.updateSearchValue(text);\n\n if (delimiter && text.endsWith(delimiter) && this.setCustomOptions(text)) {\n const input = event?.target as HTMLInputElement | null;\n\n if (input && 'value' in input) input.value = '';\n\n return '';\n }\n\n return corrected as string | void;\n }\n\n /**\n * Upstream `onKeyDown`: arrows move through the options (wrapping), Enter\n * chooses the highlighted option or adds the typed text, Escape closes\n * the list, and Tab is held while an option is highlighted.\n */\n @action\n onKeydown(select: Select, event: KeyboardEvent): boolean | void {\n if (this.args.onKeydown?.(select, event) === false) return false;\n if (this.args.isDisabled) return;\n\n const target = event.target as HTMLElement | null;\n\n // only the search input's own keys (not the clear or pill buttons')\n if (!target?.classList.contains('euiComboBox__input')) return;\n\n const api = (this.select ?? select) as Select & {\n isOpen: boolean;\n highlighted: unknown;\n results: unknown[];\n actions: {\n highlight: (option: unknown) => void;\n scrollTo: (option: unknown) => void;\n close: (e?: Event) => void;\n };\n };\n const hasActiveOption = api.isOpen && api.highlighted !== undefined;\n\n switch (event.key) {\n case 'ArrowUp':\n case 'ArrowDown': {\n if (!api.isOpen) return; // ember-power-select opens the list\n\n event.preventDefault();\n event.stopPropagation();\n\n const next = this.nextActiveOption(\n api.results,\n api.highlighted,\n event.key === 'ArrowDown' ? 1 : -1\n );\n\n if (next !== undefined) {\n api.actions.highlight(next);\n api.actions.scrollTo(next);\n }\n\n return false;\n }\n\n case 'Escape':\n if (!api.isOpen) return;\n\n event.preventDefault();\n event.stopPropagation();\n api.actions.close(event);\n\n return false;\n\n case 'Enter':\n event.preventDefault();\n event.stopPropagation();\n\n // ember-power-select chooses the highlighted option\n if (hasActiveOption) return;\n\n this.setCustomOptions(this.searchValue);\n\n return false;\n\n case 'Tab':\n // no tabbing away while navigating the options\n if (hasActiveOption) {\n event.preventDefault();\n event.stopPropagation();\n\n return false;\n }\n\n return;\n\n case 'Backspace':\n // upstream: a plain text input edits its text (the selection's\n // label) as usual, and the selection goes\n if (this.asPlainText) {\n this.onPlainTextBackspace(target as HTMLInputElement);\n\n return;\n }\n\n // deleting text works as usual (and opens the list)\n if ((target as HTMLInputElement).value?.length) return;\n\n this.onBackspace(event);\n\n return false;\n }\n }\n\n /**\n * Upstream's container `onKeyDown` while the toggle button has focus\n * (after a click on it): arrows open the list or move through it, Escape\n * closes it, Tab is held while an option is highlighted. Enter and Space\n * press the button (its native click). Returns whether the key must not\n * reach ember-basic-dropdown / ember-power-select's trigger handlers\n * (which would toggle, choose or type ahead).\n */\n @action\n onToggleKeydown(event: KeyboardEvent): boolean {\n const api = this.select as\n | (Select & {\n isOpen: boolean;\n highlighted: unknown;\n results: unknown[];\n actions: {\n open: (e?: Event) => void;\n highlight: (option: unknown) => void;\n scrollTo: (option: unknown) => void;\n close: (e?: Event) => void;\n };\n })\n | undefined;\n\n if (!api || this.args.isDisabled) return true;\n if (this.args.onKeydown?.(api, event) === false) return true;\n\n switch (event.key) {\n case 'ArrowUp':\n case 'ArrowDown': {\n event.preventDefault();\n\n if (!api.isOpen) {\n if (!this.args.noSuggestions) api.actions.open(event);\n\n return true;\n }\n\n const next = this.nextActiveOption(\n api.results,\n api.highlighted,\n event.key === 'ArrowDown' ? 1 : -1\n );\n\n if (next !== undefined) {\n api.actions.highlight(next);\n api.actions.scrollTo(next);\n }\n\n return true;\n }\n\n case 'Escape':\n if (!api.isOpen) return false;\n\n event.preventDefault();\n api.actions.close(event);\n\n return true;\n\n case 'Tab':\n if (api.isOpen && api.highlighted !== undefined) {\n event.preventDefault();\n\n return true;\n }\n\n return false;\n\n default:\n return true;\n }\n }\n\n /** Upstream `incrementActiveOptionIndex`. */\n nextActiveOption(\n results: unknown[],\n highlighted: unknown,\n direction: 1 | -1\n ): unknown {\n const { rows, selectable } = selectableRows(toList(results));\n\n if (!rows.length) return undefined;\n\n const active = highlighted === undefined ? -1 : rows.indexOf(highlighted);\n const start =\n active < 0\n ? direction < 0\n ? rows.length - 1\n : 0\n : (active + direction + rows.length) % rows.length;\n const index = findNextSelectableIndex(\n rows,\n (i) => selectable[i] === true,\n start,\n direction\n );\n\n return index === -1 ? undefined : rows[index];\n }\n\n /** `@singleSelection` is `{ asPlainText: true }`. */\n get asPlainText(): boolean {\n const single = this.args.singleSelection;\n\n return Boolean(single && typeof single === 'object' && single.asPlainText);\n }\n\n /**\n * Upstream Backspace in an empty input: removes the last selection (and\n * reopens single selection's list).\n */\n @action\n onBackspace(event: KeyboardEvent): void {\n const selected = this.selectedOptions;\n const select = this.select;\n\n if (!selected.length || !select) return;\n\n const last = selected[selected.length - 1];\n\n event.preventDefault();\n this.args.onChange(selected.filter((option) => option !== last));\n this.pendingHighlight = undefined;\n\n if (this.args.singleSelection && !select.isOpen) {\n select.actions.open?.(event);\n }\n }\n\n /**\n * Upstream plain text Backspace: the input's text (the selection's label\n * while nothing is typed) becomes the search text, and the selection is\n * removed; the key then deletes a character as usual.\n */\n onPlainTextBackspace(input: HTMLInputElement): void {\n const text = input.value ?? '';\n\n this.select?.actions.search(text);\n this.updateSearchValue(text);\n\n const selected = this.selectedOptions;\n\n if (selected.length) {\n this.args.onChange(\n selected.filter((option) => option !== selected[selected.length - 1])\n );\n this.pendingHighlight = undefined;\n }\n }\n\n /** Upstream: clicking a plain text input runs the focus handler again. */\n @action\n onPlainTextClick(event: MouseEvent): void {\n this.onFocus(this.select, event as unknown as FocusEvent);\n }\n\n /**\n * Upstream toggle button: `closeList` while open, else\n * `onOpenListClick` (focus the input and open the list).\n */\n @action\n onToggleListClick(): void {\n const select = this.select;\n\n if (!select || this.args.isDisabled) return;\n\n if (select.isOpen) {\n select.actions.close?.();\n\n return;\n }\n\n document\n .getElementById(\n `ember-power-select-trigger-multiple-input-${select.uniqueId}`\n )\n ?.focus();\n\n if (!this.select?.isOpen && !this.args.noSuggestions) {\n this.select?.actions.open?.();\n }\n }\n\n /** Upstream `clearSelectedOptions`: empties the selection, focuses the input. */\n @action\n clearSelectedOptions(event?: Event): void {\n event?.stopPropagation();\n this.args.onChange([]);\n\n const input = document.getElementById(\n `ember-power-select-trigger-multiple-input-${this.select?.uniqueId}`\n );\n\n // focusing opens the list (upstream opens it too)\n input?.focus();\n\n if (this.select && !this.select.isOpen && !this.args.noSuggestions) {\n this.select.actions.open?.();\n }\n }\n\n /**\n * Upstream `onContainerBlur`: leaving the combo box closes the list and\n * adds the typed text (`@onCreateOption`, or the option it names), so it\n * does not look like a text input. Text that is not added stays, and\n * marks the combo box invalid.\n */\n @action\n onBlur(select: Select, event: FocusEvent): void {\n this.inputHasFocus = false;\n this.containerBlur((this.select ?? select) as ContainerBlurApi, event);\n }\n\n /**\n * Upstream `onContainerBlur` for the toggle button, which takes focus when\n * pressed: leaving the combo box from it closes the list as from the\n * input.\n */\n @action\n onToggleBlur(event: FocusEvent): void {\n if (this.select) this.containerBlur(this.select as ContainerBlurApi, event);\n }\n\n /**\n * Upstream `onContainerBlur`: focus moving into the list stays; focus\n * moving elsewhere in the combo box (the toggle or clear button, a pill's\n * remove button) clears the active option; leaving calls `@onBlur`,\n * closes the list and adds the typed text.\n */\n containerBlur(api: ContainerBlurApi | undefined, event?: FocusEvent): void {\n const next = event?.relatedTarget as Node | null;\n const list = api?.uniqueId\n ? document.getElementById(`ember-basic-dropdown-content-${api.uniqueId}`)\n : null;\n const root = (event?.target as HTMLElement | null)?.closest(\n '.euiComboBox'\n );\n\n if (next && list?.contains(next)) return;\n\n if (next && root?.contains(next)) {\n if (api?.highlighted !== undefined) api.actions.highlight?.(undefined);\n\n return;\n }\n\n if (!next) {\n // Focus left for nowhere, which is also what Chrome reports when it\n // blurs the focused input while Glimmer removes the combo box. That\n // happens inside the render, which has already read ember-basic-\n // dropdown's `_isOpen`, so closing the list there trips an autotracking\n // assertion (development builds). Leave after the render instead, and\n // not at all when the combo box is being torn down.\n schedule('actions', this, this.leaveComboBox, event, api);\n\n return;\n }\n\n this.leaveComboBox(event, api);\n }\n\n /** The rest of `containerBlur`: focus has left the combo box. */\n leaveComboBox(event?: FocusEvent, blurApi?: ContainerBlurApi): void {\n if (this.isDestroying || this.isDestroyed) return;\n\n const api = (this.select ?? blurApi) as ContainerBlurApi | undefined;\n\n (this.args.onBlur as ((...args: unknown[]) => void) | undefined)?.(\n api,\n event\n );\n\n const hasActiveOption = Boolean(\n api?.isOpen && api.highlighted !== undefined\n );\n\n this.hasFocus = false;\n\n if (api?.isOpen) api.actions.close?.(event);\n\n if (!hasActiveOption && this.searchValue) {\n this.setCustomOptions(this.searchValue, true);\n }\n }\n\n /** The \"add\" option. */\n @action\n onCreateOption() {\n this.setCustomOptions(this.searchValue);\n }\n\n /**\n * Upstream `setCustomOptions`: the text, or each value separated by\n * `@delimiter` (trimmed, without duplicates), is added. Returns whether\n * anything was added.\n */\n setCustomOptions(text: string, isContainerBlur = false): boolean {\n const delimiter = this.args.delimiter;\n const values = delimiter\n ? [...new Set(text.split(delimiter).map((value) => value.trim()))]\n : [text];\n let seen = this.args.selectedOptions;\n let selection = toList(seen);\n let added = false;\n\n values.forEach((value) => {\n if (!value.length) return;\n\n // the consumer may have updated `@selectedOptions` already\n if (this.args.selectedOptions !== seen) {\n seen = this.args.selectedOptions;\n selection = toList(seen);\n }\n\n const result = this.addCustomOption(value, selection, isContainerBlur);\n\n if (result === false) return;\n\n added = true;\n\n if (result) selection = result;\n });\n\n return added;\n }\n\n /**\n * Upstream `addCustomOption` for one value: the only matching option\n * when its label equals the value, else `@onCreateOption` unless an\n * option with that label is selected. Returns the new selection when an\n * existing option was chosen, `false` when nothing was added.\n */\n addCustomOption(\n value: string,\n selection: unknown[],\n isContainerBlur: boolean\n ): unknown[] | false | void {\n const { isCaseSensitive, searchField, singleSelection } = this.args;\n const matched = this.onlyMatchingOption(value, selection);\n\n if (matched !== undefined) {\n if ((matched as { disabled?: boolean } | null)?.disabled) return false;\n\n const next = singleSelection ? [matched] : [...selection, matched];\n\n this.onAddOption(matched, next, isContainerBlur);\n\n return next;\n }\n\n if (!this.args.onCreateOption || !value) return false;\n\n if (\n selectedOptionForSearchValue(\n selection,\n value,\n searchField,\n isCaseSensitive\n ) !== undefined\n ) {\n return false;\n }\n\n const created = this.args.onCreateOption(\n value,\n flattenOptionGroups(this.sourceOptions ?? [])\n );\n\n // the consumer rejects a custom option explicitly\n if (created === false) return false;\n\n this.clearSearch();\n\n // a custom single selection closes the list\n if (singleSelection) this.select?.actions.close();\n }\n\n /**\n * Upstream `onAddOption` for an option chosen by its text: single\n * selection closes the list, multiple selection keeps it open with the\n * next option highlighted.\n */\n onAddOption(option: unknown, next: unknown[], isContainerBlur: boolean) {\n const { rows } = selectableRows(toList(this.select?.results));\n const index = rows.indexOf(option);\n\n this.args.onChange(next);\n this.clearSearch();\n\n if (this.args.singleSelection) {\n this.select?.actions.close();\n } else if (!isContainerBlur && index > -1) {\n this.pendingHighlight = { index, added: option };\n }\n }\n\n /**\n * Upstream `doesSearchMatchOnlyOption`: the value matches exactly one\n * (unselected) option, and equals its label.\n */\n onlyMatchingOption(value: string, selection: unknown[]): unknown {\n const { isCaseSensitive, searchField } = this.args;\n const matches = this.matchingEntriesFor(value, selection).filter(\n (entry) => !isComboBoxGroupLabel(entry)\n );\n\n if (matches.length !== 1) return undefined;\n\n const [option] = matches;\n\n return transformForCaseSensitivity(\n comboBoxOptionLabel(option, searchField),\n isCaseSensitive\n ) === transformForCaseSensitivity(value, isCaseSensitive)\n ? option\n : undefined;\n }\n\n /**\n * ember-power-select's choice: adds the option (single selection: makes\n * it the selection; a chosen option is never deselected from the list,\n * like upstream). Removing a pill passes a selected option: it is\n * removed.\n */\n @action\n buildSelection(option: any, select: Select) {\n const current = toList(select.selected);\n const index = current.findIndex((item) => isEqual(item, option));\n\n if (this.args.singleSelection) {\n if (index > -1 && current.length === 1) return current;\n\n this.clearSearch();\n\n return [option];\n }\n\n if (index > -1) {\n return current.filter((_, i) => i !== index);\n }\n\n const { rows } = selectableRows(\n toList((select as unknown as { results?: unknown[] }).results)\n );\n const at = rows.indexOf(option);\n\n if (at > -1) this.pendingHighlight = { index: at, added: option };\n\n this.clearSearch();\n\n return [...current, option];\n }\n}\n\n/** A list from an array, an Ember array or nothing (never the same array). */\nfunction toList(collection: unknown): unknown[] {\n if (!collection) return [];\n if (Array.isArray(collection)) return collection;\n if (isArray(collection)) {\n // Ember arrays, ArrayProxy, PromiseManyArray (ember-data), …\n const list = collection as unknown as {\n slice?: () => unknown[];\n toArray?: () => unknown[];\n content?: unknown;\n [Symbol.iterator]?: () => Iterator<unknown>;\n };\n\n if (typeof list.slice === 'function') return list.slice();\n if (typeof list.toArray === 'function') return list.toArray();\n if (typeof list[Symbol.iterator] === 'function') {\n return Array.from(list as Iterable<unknown>);\n }\n\n return list.content ? toList(list.content) : [];\n }\n\n return [];\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n return Boolean(\n value &&\n (typeof value === 'object' || typeof value === 'function') &&\n typeof (value as { then?: unknown }).then === 'function'\n );\n}\n\n/** Escaped user text in bold, for i18n messages rendered as HTML. */\nfunction strong(text: string): string {\n return `<strong>${text\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;')}</strong>`;\n}\n\n/**\n * The rows of ember-power-select results (groups, then their options) and\n * which can be highlighted: options that are not disabled, in groups that\n * are not disabled.\n */\nfunction selectableRows(results: unknown[]): {\n rows: unknown[];\n selectable: boolean[];\n} {\n const rows: unknown[] = [];\n const selectable: boolean[] = [];\n const disabled = (value: unknown) =>\n Boolean(\n value &&\n typeof value === 'object' &&\n (value as { disabled?: boolean }).disabled === true\n );\n\n results.forEach((entry) => {\n if (emberPowerSelectIsGroup(entry)) {\n const group = entry as unknown as { options: unknown[] };\n\n rows.push(entry);\n selectable.push(false);\n group.options.forEach((child) => {\n rows.push(child);\n selectable.push(!disabled(entry) && !disabled(child));\n });\n } else {\n rows.push(entry);\n selectable.push(!disabled(entry));\n }\n });\n\n return { rows, selectable };\n}\n"],"names":["INPUT_POPOVER_ARGS","CLOSE_ON_SCROLL_DELAY","isSliceable","coll","isArray","toPlainArray","collection","slice","COMBO_BOX_LIST_Z_INDEX_OFFSET","EuiComboBoxComponent","Component","g","prototype","service","i","ignoreAccents","args","euiConfig","getConfig","tracked","watchedPromises","WeakSet","notifiedSearch","pendingHighlight","loadingMessage","euiI18n","lookupToken","noMatchesMessage","searchMessage","alwaysShowCreateOption","onCreateOption","rootClass","context","getEuiThemeContext","form","useEuiBorealisStyles","euiFormVariables","euiClass","comboBoxBoxReset","euiComboBoxStyles","euiComboBox","fullWidth","maxInlineSize","maxWidth","inputPopoverProps","css","n","cached","panelClass","upstream","panel","euiPanelStyles","popover","euiPopoverPanelStyles","colorMode","popoverProps","boxSizing","color","euiTheme","colors","textParagraph","textAlign","euiPanel","grow","radius","m","padding","euiPaddingSize","panelPaddingSize","backgroundColor","euiBackgroundColor","highContrastMode","border","thin","borderColor","euiBorderColor","euiPopover__panel","isOpen","isAttached","bottom","top","euiScreenReaderOnly","panelMinWidth","minInlineSize","panelStyle","panelCss","panelProps","listZIndexClass","String","zIndex","listZIndex","verticalPosition","anchorPosition","startsWith","undefined","dropdownClass","panelClassName","className","filter","Boolean","join","sourceOptions","options","isPromiseLike","settledOptions","promise","toList","value","watchPromise","has","add","settle","isDestroying","isDestroyed","then","optionsPending","selectedOptions","optionMatcher","matcher","searchField","option","searchValue","createPartialStringEqualityOptionMatcher","matchingEntriesFor","async","isCaseSensitive","search","singleSelection","getMatchingEntries","isPreFiltered","showPrevSelected","sortMatchesBy","matchingEntries","powerSelectOptions","entriesToPowerSelectOptions","term","select","results","strip","list","stripped","Promise","resolve","cancel","call","areAllOptionsSelected","flattenOptionGroups","length","every","isComboBoxOptionSelected","emptyStateMessage","custom","i18nHtml","strong","alreadyAddedMessage","delimiter","includes","selected","selectedOptionForSearchValue","label","comboBoxOptionLabel","token","fallback","values","text","htmlSafe","isHTMLSafe","toString","isLoadingOptions","isLoading","markAsInvalid","isInvalid","hasFocus","noSuggestions","closeOnSelect","screenReaderInstructions","inputHasFocus","placeholder","map","last","listboxAriaLabel","optionWidth","setOptionWidth","width","truncationFor","own","truncationProps","labelFor","isOptionRow","index","matchAll","setComponentTemplate","precompileTemplate","strictMode","scope","PowerSelect","EuiComboBoxSearchMessage","argOrDefault","and","not","EuiComboBoxTrigger","queue","optional","EuiComboBoxCreateOption","EuiComboBoxOptions","EuiComboBoxGroup","classNames","EuiComboBoxNoMatchesMessage","spreadAttributes","EuiComboBoxOptionText","scrollTo","optionsList","document","querySelector","uniqueId","flattenComboBoxRows","indexOf","optionElement","optionTopScroll","offsetTop","optionBottomScroll","offsetHeight","scrollTop","action","inputPopoverArgs","triggerElement","id","contentElement","getElementById","calculatePosition","trigger","content","destination","calculate","defaultCalculatePosition","position","props","style","offset","buffer","container","left","renderInPlace","right","Array","bounds","getBoundingClientRect","documentElement","clientWidth","window","innerWidth","parent","offsetParent","origin","body","scrollX","min","max","Math","scrollCleanup","listenToScroll","stopListeningToScroll","closeOnScroll","onScroll","event","target","contains","api","actions","close","timeout","setTimeout","addEventListener","passive","capture","clearTimeout","removeEventListener","panelResizeObserver","lastPanelWidth","observePanelWidth","onPanelResize","ResizeObserver","observe","willDestroy","disconnect","registerAPI","schedule","updateSearchValue","searchText","onSearchChange","hasMatchingOptions","some","entry","isComboBoxGroupLabel","clearSearch","defaultHighlighted","highlighted","rows","selectable","selectableRows","pending","find","row","isComboBoxOptionChecked","remainingIndexes","_","added","next","findNextSelectableIndex","onChange","onOpen","result","getElementZIndex","test","type","onClose","onFocus","isDisabled","open","onInput","corrected","endsWith","setCustomOptions","input","onKeydown","classList","hasActiveOption","key","preventDefault","stopPropagation","nextActiveOption","highlight","asPlainText","onPlainTextBackspace","onBackspace","onToggleKeydown","direction","active","start","single","onPlainTextClick","onToggleListClick","focus","clearSelectedOptions","onBlur","containerBlur","onToggleBlur","relatedTarget","root","closest","leaveComboBox","blurApi","isContainerBlur","Set","split","trim","seen","selection","forEach","addCustomOption","matched","onlyMatchingOption","disabled","onAddOption","created","matches","transformForCaseSensitivity","buildSelection","current","findIndex","item","isEqual","at","toArray","Symbol","iterator","from","replace","emberPowerSelectIsGroup","group","push","child"],"mappings":"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"}