@ni/nimble-components 32.9.3 → 32.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/dist/all-components-bundle.js +149 -77
  2. package/dist/all-components-bundle.js.map +1 -1
  3. package/dist/all-components-bundle.min.js +3553 -3517
  4. package/dist/all-components-bundle.min.js.map +1 -1
  5. package/dist/esm/combobox/index.d.ts +7 -0
  6. package/dist/esm/combobox/index.js +2 -1
  7. package/dist/esm/combobox/index.js.map +1 -1
  8. package/dist/esm/combobox/styles.js +2 -0
  9. package/dist/esm/combobox/styles.js.map +1 -1
  10. package/dist/esm/combobox/template.js +8 -3
  11. package/dist/esm/combobox/template.js.map +1 -1
  12. package/dist/esm/icon-base/styles.js +2 -2
  13. package/dist/esm/icon-base/styles.js.map +1 -1
  14. package/dist/esm/patterns/required-visible/styles.d.ts +1 -0
  15. package/dist/esm/patterns/required-visible/styles.js +17 -0
  16. package/dist/esm/patterns/required-visible/styles.js.map +1 -0
  17. package/dist/esm/patterns/required-visible/template.d.ts +9 -0
  18. package/dist/esm/patterns/required-visible/template.js +20 -0
  19. package/dist/esm/patterns/required-visible/template.js.map +1 -0
  20. package/dist/esm/patterns/required-visible/testing/required-visible-pattern.pageobject.d.ts +10 -0
  21. package/dist/esm/patterns/required-visible/testing/required-visible-pattern.pageobject.js +19 -0
  22. package/dist/esm/patterns/required-visible/testing/required-visible-pattern.pageobject.js.map +1 -0
  23. package/dist/esm/patterns/required-visible/types.d.ts +17 -0
  24. package/dist/esm/patterns/required-visible/types.js +21 -0
  25. package/dist/esm/patterns/required-visible/types.js.map +1 -0
  26. package/dist/esm/radio-group/index.d.ts +7 -0
  27. package/dist/esm/radio-group/index.js +2 -1
  28. package/dist/esm/radio-group/index.js.map +1 -1
  29. package/dist/esm/radio-group/styles.js +3 -1
  30. package/dist/esm/radio-group/styles.js.map +1 -1
  31. package/dist/esm/radio-group/template.js +4 -1
  32. package/dist/esm/radio-group/template.js.map +1 -1
  33. package/dist/esm/select/index.d.ts +7 -0
  34. package/dist/esm/select/index.js +2 -1
  35. package/dist/esm/select/index.js.map +1 -1
  36. package/dist/esm/select/styles.js +2 -0
  37. package/dist/esm/select/styles.js.map +1 -1
  38. package/dist/esm/select/template.js +8 -3
  39. package/dist/esm/select/template.js.map +1 -1
  40. package/dist/esm/text-area/index.d.ts +11 -0
  41. package/dist/esm/text-area/index.js +2 -1
  42. package/dist/esm/text-area/index.js.map +1 -1
  43. package/dist/esm/text-area/styles.js +2 -0
  44. package/dist/esm/text-area/styles.js.map +1 -1
  45. package/dist/esm/text-area/template.js +6 -1
  46. package/dist/esm/text-area/template.js.map +1 -1
  47. package/package.json +1 -1
@@ -17,6 +17,13 @@ declare const Combobox_base: (abstract new (...args: any[]) => {
17
17
  connectedCallback(): void;
18
18
  disconnectedCallback(): void;
19
19
  attributeChangedCallback(name: string, oldValue: string, newValue: string): void;
20
+ }) & (abstract new (...args: any[]) => {
21
+ requiredVisible: boolean;
22
+ readonly $fastController: import("@microsoft/fast-element").Controller;
23
+ $emit(type: string, detail?: any, options?: Omit<CustomEventInit<any>, "detail"> | undefined): boolean | void;
24
+ connectedCallback(): void;
25
+ disconnectedCallback(): void;
26
+ attributeChangedCallback(name: string, oldValue: string, newValue: string): void;
20
27
  }) & typeof FormAssociatedCombobox;
21
28
  /**
22
29
  * A nimble-styed HTML combobox
@@ -11,10 +11,11 @@ import { mixinErrorPattern } from '../patterns/error/types';
11
11
  import { DropdownAppearance } from '../patterns/dropdown/types';
12
12
  import { template } from './template';
13
13
  import { FormAssociatedCombobox } from './models/combobox-form-associated';
14
+ import { mixinRequiredVisiblePattern } from '../patterns/required-visible/types';
14
15
  /**
15
16
  * A nimble-styed HTML combobox
16
17
  */
17
- export class Combobox extends mixinErrorPattern(FormAssociatedCombobox) {
18
+ export class Combobox extends mixinErrorPattern(mixinRequiredVisiblePattern(FormAssociatedCombobox)) {
18
19
  constructor() {
19
20
  super(...arguments);
20
21
  this.appearance = DropdownAppearance.underline;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/combobox/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DOM,\n Observable,\n attr,\n html,\n observable,\n ref\n} from '@microsoft/fast-element';\nimport {\n DesignSystem,\n ComboboxOptions,\n ComboboxAutocomplete,\n SelectPosition,\n ListboxOption,\n DelegatesARIACombobox,\n applyMixins,\n StartEnd\n} from '@microsoft/fast-foundation';\nimport {\n keyArrowDown,\n keyArrowUp,\n keyEnter,\n keyEscape,\n keySpace,\n keyTab,\n limit,\n uniqueId\n} from '@microsoft/fast-web-utilities';\nimport { ToggleButton, toggleButtonTag } from '../toggle-button';\nimport { errorTextTemplate } from '../patterns/error/template';\nimport { iconArrowExpanderDownTag } from '../icons/arrow-expander-down';\nimport { iconExclamationMarkTag } from '../icons/exclamation-mark';\n\nimport { styles } from './styles';\nimport { mixinErrorPattern } from '../patterns/error/types';\nimport {\n DropdownAppearance,\n type DropdownPattern\n} from '../patterns/dropdown/types';\nimport type { AnchoredRegion } from '../anchored-region';\nimport { template } from './template';\nimport { FormAssociatedCombobox } from './models/combobox-form-associated';\nimport type { ListOption } from '../list-option';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nimble-combobox': Combobox;\n }\n}\n\n/**\n * A nimble-styed HTML combobox\n */\nexport class Combobox\n extends mixinErrorPattern(FormAssociatedCombobox)\n implements DropdownPattern {\n @attr\n public appearance: DropdownAppearance = DropdownAppearance.underline;\n\n /**\n * The autocomplete attribute.\n */\n @attr({ attribute: 'autocomplete', mode: 'fromView' })\n public autocomplete?: ComboboxAutocomplete;\n\n /**\n * The placement for the listbox when the combobox is open.\n */\n @attr({ attribute: 'position' })\n public positionAttribute?: SelectPosition;\n\n /**\n * The open attribute.\n */\n @attr({ attribute: 'open', mode: 'boolean' })\n public open = false;\n\n /**\n * Sets the placeholder value of the element, generally used to provide a hint to the user.\n * @remarks Using a non-null assertion to mimic FAST's original improper typing of an\n * uninitialized property:\n * https://github.com/microsoft/fast/blob/0c27d027ff6e8616ad4fddc17f4432aa7f6cbad0/packages/web-components/fast-foundation/src/combobox/combobox.ts#L199\n */\n @attr\n public placeholder!: string;\n\n /**\n * The current state of the calculated position of the listbox.\n *\n * @public\n */\n @observable\n public position?: SelectPosition;\n\n /**\n * @internal\n */\n @observable\n public region?: AnchoredRegion;\n\n /**\n * @internal\n */\n @observable\n public controlWrapper!: HTMLElement;\n\n /**\n * @internal\n */\n @observable\n public control!: HTMLInputElement;\n\n /**\n * @internal\n */\n @observable\n public listbox!: HTMLDivElement;\n\n /**\n * @internal\n */\n @observable\n public readonly dropdownButton?: ToggleButton;\n\n /**\n * @internal\n *\n * The collection of currently filtered options.\n */\n @observable\n public filteredOptions: ListboxOption[] = [];\n\n /** @internal */\n @observable\n public hasOverflow = false;\n\n public override get value(): string {\n Observable.track(this, 'value');\n return this._value;\n }\n\n public override set value(next: string) {\n const prev = this._value;\n let updatedValue = next;\n\n if (this.$fastController.isConnected && this.options) {\n const selectedIndex = this.findIndexOfValidOption(next);\n\n const prevSelectedValue = this.options[this.selectedIndex]?.text;\n const nextSelectedValue = this.options[selectedIndex]?.text;\n\n if (prevSelectedValue !== nextSelectedValue) {\n this.selectedIndex = selectedIndex;\n }\n\n updatedValue = this.firstSelectedOption?.text || updatedValue;\n }\n\n if (prev !== updatedValue) {\n this._value = updatedValue;\n super.valueChanged(prev, updatedValue);\n Observable.notify(this, 'value');\n }\n\n // Can remove when following resolved: https://github.com/microsoft/fast/issues/6749\n this.filter = next;\n this.filterOptions();\n this.selectedIndex = this.findIndexOfValidOption(this.value);\n }\n\n /**\n * The list of options.\n *\n * Overrides `Listbox.options`.\n */\n public override get options(): ListboxOption[] {\n Observable.track(this, 'options');\n return this.filteredOptions && this.filter\n ? this.filteredOptions\n : this._options;\n }\n\n public override set options(value: ListboxOption[]) {\n this._options = value;\n Observable.notify(this, 'options');\n }\n\n /**\n * The unique id for the internal listbox element.\n *\n * @internal\n */\n public listboxId: string = uniqueId('listbox-');\n\n /**\n * The space available in the viewport for the listbox when opened.\n *\n * @internal\n */\n @observable\n public availableViewportHeight = 0;\n\n private valueUpdatedByInput = false;\n private valueBeforeTextUpdate?: string;\n private _value = '';\n private filter = '';\n\n /**\n * The initial state of the position attribute.\n */\n private forcedPosition = false;\n\n private get isAutocompleteInline(): boolean {\n return (\n this.autocomplete === ComboboxAutocomplete.inline\n || this.isAutocompleteBoth\n );\n }\n\n private get isAutocompleteList(): boolean {\n return (\n this.autocomplete === ComboboxAutocomplete.list\n || this.isAutocompleteBoth\n );\n }\n\n private get isAutocompleteBoth(): boolean {\n return this.autocomplete === ComboboxAutocomplete.both;\n }\n\n public override slottedOptionsChanged(\n prev: HTMLElement[],\n next: HTMLElement[]\n ): void {\n // Workaround for https://github.com/microsoft/fast/issues/5773\n const value = this.value;\n super.slottedOptionsChanged(prev, next);\n this.updateValue();\n if (value) {\n this.value = value;\n }\n }\n\n public override connectedCallback(): void {\n super.connectedCallback();\n this.forcedPosition = !!this.positionAttribute;\n if (this.value) {\n this.initialValue = this.value;\n }\n this.setPositioning();\n this.updateInputAriaLabel();\n }\n\n /**\n * @internal\n */\n public override clickHandler(e: MouseEvent): boolean {\n if (this.disabled) {\n return false;\n }\n\n if (this.open) {\n const captured = (e.target as HTMLElement).closest<ListOption>(\n 'option,[role=option]'\n );\n\n if (!captured || captured.disabled) {\n return false;\n }\n\n this.selectedOptions = [captured];\n this.control.value = captured.text;\n this.clearSelectionRange();\n this.updateValue(true);\n }\n\n this.open = !this.open;\n\n if (this.open) {\n this.control.focus();\n }\n\n return true;\n }\n\n /**\n * @internal\n */\n public toggleButtonClickHandler(e: Event): void {\n e.stopImmediatePropagation();\n }\n\n /**\n * @internal\n */\n public toggleButtonChangeHandler(e: Event): void {\n this.open = this.dropdownButton!.checked;\n e.stopImmediatePropagation();\n }\n\n /**\n * @internal\n */\n public toggleButtonKeyDownHandler(e: KeyboardEvent): boolean {\n switch (e.key) {\n case keyArrowUp:\n case keyArrowDown:\n case keySpace:\n case keyEnter:\n this.open = true;\n this.stopPropagation(e);\n return false;\n default:\n return true;\n }\n }\n\n /**\n * @internal\n */\n public filterOptions(): void {\n if (\n !this.autocomplete\n || this.autocomplete === ComboboxAutocomplete.none\n ) {\n this.filter = '';\n }\n\n const filter = this.filter.toLowerCase();\n\n this.filteredOptions = this._options.filter(\n o => o.text.toLowerCase().startsWith(filter) && !o.hidden\n );\n\n if (this.isAutocompleteList) {\n this._options.forEach(o => {\n (o as ListOption).visuallyHidden = !this.filteredOptions.includes(o);\n });\n }\n }\n\n /**\n * @internal\n */\n public inputHandler(e: InputEvent): boolean {\n this.filter = this.control.value;\n this.filterOptions();\n\n if (!this.isAutocompleteInline) {\n this.selectedIndex = this.findIndexOfValidOption(\n this.control.value\n );\n }\n\n if (!e.inputType.includes('deleteContent') && this.filter.length) {\n if (this.isAutocompleteList && !this.open) {\n this.open = true;\n }\n\n if (this.isAutocompleteInline) {\n if (this.filteredOptions.length) {\n this.selectedOptions = [this.filteredOptions[0]!];\n this.selectedIndex = this.options.indexOf(\n this.firstSelectedOption\n );\n this.setInlineSelection();\n } else {\n this.selectedIndex = -1;\n }\n }\n }\n\n // This is a workaround for the issue described here: https://github.com/microsoft/fast/issues/6267\n // For now, we will update the value ourselves while a user types in text. Note that there is other\n // implementation related to this (like the 'keydownEventHandler') needed to create the complete set\n // of desired behavior described in the issue noted above.\n if (!this.valueUpdatedByInput) {\n this.valueBeforeTextUpdate = this.value;\n }\n this.valueUpdatedByInput = true;\n\n // This is a workaround for this FAST issue: https://github.com/microsoft/fast/issues/6776\n if (this.value !== this.control.value) {\n this.focusAndScrollOptionIntoView();\n }\n\n this.value = this.control.value;\n return true;\n }\n\n public override keydownHandler(e: KeyboardEvent): boolean {\n if (e.ctrlKey || e.altKey) {\n return true;\n }\n\n switch (e.key) {\n case keyEnter:\n this.syncValue();\n if (this.isAutocompleteInline) {\n this.filter = this.value;\n }\n\n this.open = false;\n this.clearSelectionRange();\n this.emitChangeIfValueUpdated();\n break;\n case keyEscape:\n if (!this.isAutocompleteInline) {\n this.selectedIndex = -1;\n }\n\n if (this.open) {\n this.open = false;\n break;\n }\n\n this.value = '';\n this.control.value = '';\n this.filter = '';\n this.filterOptions();\n break;\n case keyTab:\n this.setInputToSelection();\n\n if (!this.open) {\n return true;\n }\n\n e.preventDefault();\n this.open = false;\n break;\n case keyArrowDown:\n case keyArrowUp:\n this.filterOptions();\n\n if (!this.open) {\n this.open = true;\n break;\n }\n\n if (this.filteredOptions.length > 0) {\n super.keydownHandler(e);\n }\n\n if (this.isAutocompleteInline) {\n this.setInlineSelection();\n }\n\n if (this.open && this.valueUpdatedByInput) {\n this.valueUpdatedByInput = false;\n }\n break;\n default:\n return true;\n }\n return true;\n }\n\n /**\n * @internal\n */\n public keyupHandler(e: KeyboardEvent): boolean {\n const key = e.key;\n\n switch (key) {\n case 'ArrowLeft':\n case 'ArrowRight':\n case 'Backspace':\n case 'Delete':\n case 'Home':\n case 'End': {\n this.filter = this.control.value;\n this.selectedIndex = -1;\n this.filterOptions();\n break;\n }\n default: {\n break;\n }\n }\n\n return true;\n }\n\n /**\n * @internal\n */\n public override focusoutHandler(e: FocusEvent): boolean {\n this.syncValue();\n\n if (this.open) {\n const focusTarget = e.relatedTarget as HTMLElement;\n if (this.isSameNode(focusTarget)) {\n this.focus();\n }\n }\n\n this.open = false;\n this.emitChangeIfValueUpdated();\n return true;\n }\n\n /**\n * Reset the element to its first selectable option when its parent form is reset.\n *\n * @internal\n */\n public override formResetCallback(): void {\n super.formResetCallback();\n this.setDefaultSelectedOption();\n this.updateValue();\n }\n\n /** {@inheritDoc (FormAssociated:interface).validate} */\n public override validate(): void {\n super.validate(this.control);\n }\n\n /**\n * Set the default selected options at initialization or reset.\n *\n * @internal\n * @remarks\n * Overrides `Listbox.setDefaultSelectedOption`\n */\n public override setDefaultSelectedOption(): void {\n if (this.$fastController.isConnected && this.options) {\n const selectedIndex = this.options.findIndex(\n el => !el.disabled\n && (el.getAttribute('selected') !== null || el.selected)\n );\n\n this.selectedIndex = selectedIndex;\n if (!this.dirtyValue && this.firstSelectedOption) {\n this.value = this.firstSelectedOption.text;\n }\n this.setSelectedOptions();\n }\n }\n\n /**\n * @internal\n */\n public override selectedIndexChanged(\n prev: number | undefined,\n next: number\n ): void {\n if (this.$fastController.isConnected) {\n let pinnedSelectedIndex = limit(-1, this.options.length - 1, next);\n // Ensure selectedIndex doesn't get set to a disabled option\n if (this.options[pinnedSelectedIndex]?.disabled) {\n pinnedSelectedIndex = -1;\n }\n\n // we only want to call the super method when the selectedIndex is in range\n if (pinnedSelectedIndex !== this.selectedIndex) {\n this.selectedIndex = pinnedSelectedIndex;\n return;\n }\n\n super.selectedIndexChanged(prev, pinnedSelectedIndex);\n // the base class doesn't call this when no option is selected, but we need to,\n // otherwise selectedOptions, ariaActiveDescendant, and the previously selected\n // option's selected state won't be updated\n this.setSelectedOptions();\n }\n }\n\n /**\n * Synchronize the `aria-disabled` property when the `disabled` property changes.\n *\n * @internal\n */\n public override disabledChanged(prev: boolean, next: boolean): void {\n if (super.disabledChanged) {\n super.disabledChanged(prev, next);\n }\n this.ariaDisabled = this.disabled ? 'true' : 'false';\n }\n\n /**\n * Move focus to the next selectable option.\n *\n * @internal\n * @remarks Has the same behavior as `Listbox.selectNextOption` except it skips disabled options.\n * Overrides `Listbox.selectNextOption`\n */\n public override selectNextOption(): void {\n if (!this.disabled) {\n let newIndex = this.selectedIndex;\n do {\n if (newIndex + 1 >= this.options.length) {\n return;\n }\n newIndex += 1;\n } while (this.options[newIndex]!.disabled);\n this.selectedIndex = newIndex;\n }\n }\n\n /**\n * Move focus to the previous selectable option.\n *\n * @internal\n * @remarks Has the same behavior as `Listbox.selectPreviousOption` except it skips disabled options and allows moving focus to the input.\n * Overrides `Listbox.selectPreviousOption`\n */\n public override selectPreviousOption(): void {\n if (!this.disabled) {\n let newIndex = this.selectedIndex;\n do {\n newIndex -= 1;\n if (newIndex < 0) {\n break;\n }\n } while (this.options[newIndex]!.disabled);\n this.selectedIndex = newIndex;\n }\n }\n\n /**\n * @internal\n */\n public setPositioning(): void {\n // Workaround for https://github.com/microsoft/fast/issues/5123\n if (!this.$fastController.isConnected) {\n // Don't call setPositioning() until we're connected,\n // since this.forcedPosition isn't initialized yet.\n return;\n }\n const currentBox = this.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const availableBottom = viewportHeight - currentBox.bottom;\n\n if (this.forcedPosition) {\n this.position = this.positionAttribute;\n } else if (currentBox.top > availableBottom) {\n this.position = SelectPosition.above;\n } else {\n this.position = SelectPosition.below;\n }\n\n this.positionAttribute = this.forcedPosition\n ? this.positionAttribute\n : this.position;\n\n this.availableViewportHeight = this.position === SelectPosition.above\n ? Math.trunc(currentBox.top)\n : Math.trunc(availableBottom);\n }\n\n /**\n * Focus the control and scroll the first selected option into view.\n *\n * @internal\n * @remarks\n * Overrides: `Listbox.focusAndScrollOptionIntoView`\n */\n protected override focusAndScrollOptionIntoView(): void {\n if (this.open) {\n if (this.contains(document.activeElement)) {\n this.control.focus();\n if (this.firstSelectedOption) {\n requestAnimationFrame(() => {\n this.firstSelectedOption?.scrollIntoView({\n block: 'nearest'\n });\n });\n }\n }\n }\n }\n\n protected openChanged(): void {\n if (this.open) {\n this.ariaControls = this.listboxId;\n this.ariaExpanded = 'true';\n\n this.setPositioning();\n this.focusAndScrollOptionIntoView();\n\n // focus is directed to the element when `open` is changed programmatically\n DOM.queueUpdate(() => this.focus());\n } else {\n this.ariaControls = '';\n this.ariaExpanded = 'false';\n }\n\n if (this.dropdownButton) {\n this.dropdownButton.checked = this.open;\n }\n }\n\n protected placeholderChanged(): void {\n if (this.proxy instanceof HTMLInputElement) {\n this.proxy.placeholder = this.placeholder ?? '';\n }\n }\n\n /**\n * Need to update even when options is empty.\n * @internal\n * @remarks Same as `Listbox.setSelectedOptions` except does not check if options is non-empty.\n * Overrides: `Listbox.setSelectedOptions`\n */\n protected override setSelectedOptions(): void {\n this.selectedOptions = this.selectedIndex > -1 ? [this.options[this.selectedIndex]!] : [];\n this.ariaActiveDescendant = this.firstSelectedOption?.id ?? '';\n this.focusAndScrollOptionIntoView();\n }\n\n /**\n * Ensure that the entire list of options is used when setting the selected property.\n * @internal\n * @remarks\n * Overrides: `Listbox.selectedOptionsChanged`\n */\n protected override selectedOptionsChanged(\n _: ListboxOption[] | undefined,\n next: ListboxOption[]\n ): void {\n if (this.$fastController.isConnected) {\n this._options.forEach(o => {\n o.selected = next.includes(o);\n });\n }\n }\n\n protected positionChanged(\n _: SelectPosition | undefined,\n next: SelectPosition | undefined\n ): void {\n this.positionAttribute = next;\n this.setPositioning();\n }\n\n private regionChanged(\n _prev: AnchoredRegion | undefined,\n _next: AnchoredRegion | undefined\n ): void {\n if (this.region && this.controlWrapper) {\n this.region.anchorElement = this.controlWrapper;\n }\n }\n\n private controlWrapperChanged(\n _prev: HTMLElement | undefined,\n _next: HTMLElement | undefined\n ): void {\n if (this.region && this.controlWrapper) {\n this.region.anchorElement = this.controlWrapper;\n }\n }\n\n // Workaround for https://github.com/microsoft/fast/issues/6041.\n private ariaLabelChanged(_oldValue: string, _newValue: string): void {\n this.updateInputAriaLabel();\n }\n\n /**\n * Sets the value and to match the first selected option.\n */\n private updateValue(shouldEmit?: boolean): void {\n if (this.$fastController.isConnected) {\n this.value = this.firstSelectedOption?.text || this.control.value;\n this.control.value = this.value;\n }\n\n if (shouldEmit) {\n this.$emit('change');\n }\n }\n\n /**\n * Focus and set the content of the control based on the first selected option.\n */\n private setInputToSelection(): void {\n if (this.firstSelectedOption) {\n this.control.value = this.firstSelectedOption.text;\n this.control.focus();\n }\n }\n\n /**\n * Focus, set and select the content of the control based on the first selected option.\n */\n private setInlineSelection(): void {\n if (this.firstSelectedOption) {\n this.setInputToSelection();\n this.control.setSelectionRange(\n this.filter.length,\n this.control.value.length,\n 'backward'\n );\n }\n }\n\n private clearSelectionRange(): void {\n const controlValueLength = this.control.value.length;\n this.control.setSelectionRange(controlValueLength, controlValueLength);\n }\n\n /**\n * Determines if a value update should involve emitting a change event, then updates the value.\n */\n private syncValue(): void {\n const newValue = this.selectedIndex > -1\n ? this.firstSelectedOption?.text\n : this.control.value;\n this.updateValue(this.value !== newValue);\n }\n\n private updateInputAriaLabel(): void {\n const inputElement = this.shadowRoot?.querySelector('.selected-value');\n if (this.ariaLabel) {\n inputElement?.setAttribute('aria-label', this.ariaLabel);\n } else {\n inputElement?.removeAttribute('aria-label');\n }\n }\n\n /**\n * This will only emit a `change` event after text entry where the text in the input prior to\n * typing is different than the text present upon an attempt to commit (e.g. pressing <Enter>).\n * So, for a concrete example:\n * 1) User types 'Sue' (when Combobox input was blank).\n * 2) User presses <Enter> -> 'change' event fires\n * 3) User deletes 'Sue'\n * 4) User re-types 'Sue'\n * 5) User presses <Enter> -> NO 'change' event is fired\n */\n private emitChangeIfValueUpdated(): void {\n if (this.valueUpdatedByInput) {\n if (this.value !== this.valueBeforeTextUpdate) {\n this.$emit('change');\n }\n\n this.valueUpdatedByInput = false;\n }\n }\n\n private findIndexOfValidOption(optionText: string): number {\n return this.options.findIndex(\n o => !o.disabled && o.text === optionText\n );\n }\n}\n\nconst nimbleCombobox = Combobox.compose<ComboboxOptions>({\n baseName: 'combobox',\n baseClass: FormAssociatedCombobox,\n template,\n styles,\n shadowOptions: {\n delegatesFocus: true\n },\n end: html<Combobox>`\n <div class=\"end-slot-container\">\n <${iconExclamationMarkTag}\n severity=\"error\"\n class=\"error-icon\"\n ></${iconExclamationMarkTag}>\n <div class=\"separator\"></div>\n <${toggleButtonTag}\n ${ref('dropdownButton')}\n appearance=\"ghost\"\n ?checked=\"${x => x.open}\"\n ?disabled=\"${x => x.disabled}\"\n content-hidden=\"true\"\n @click=\"${(x, c) => x.toggleButtonClickHandler(c.event)}\"\n @change=\"${(x, c) => x.toggleButtonChangeHandler(c.event)}\"\n @keydown=\"${(x, c) => x.toggleButtonKeyDownHandler(c.event as KeyboardEvent)}\"\n class=\"dropdown-button\"\n part=\"button\"\n aria-hidden=\"true\"\n tabindex=\"-1\"\n >\n <${iconArrowExpanderDownTag}\n slot=\"start\"\n class=\"dropdown-icon\"\n >\n </${iconArrowExpanderDownTag}>\n </${toggleButtonTag}>\n </div>\n ${errorTextTemplate}\n `\n});\n\nexport interface Combobox extends StartEnd, DelegatesARIACombobox {}\napplyMixins(Combobox, StartEnd, DelegatesARIACombobox);\n\nDesignSystem.getOrCreate().withPrefix('nimble').register(nimbleCombobox());\nexport const comboboxTag = 'nimble-combobox';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/combobox/index.ts"],"names":[],"mappings":";AAAA,OAAO,EACH,GAAG,EACH,UAAU,EACV,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,GAAG,EACN,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACH,YAAY,EAEZ,oBAAoB,EACpB,cAAc,EAEd,qBAAqB,EACrB,WAAW,EACX,QAAQ,EACX,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACH,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,MAAM,EACN,KAAK,EACL,QAAQ,EACX,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAgB,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EACH,kBAAkB,EAErB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAE3E,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AAQjF;;GAEG;AACH,MAAM,OAAO,QACT,SAAQ,iBAAiB,CACrB,2BAA2B,CAAC,sBAAsB,CAAC,CACtD;IAHL;;QAMW,eAAU,GAAuB,kBAAkB,CAAC,SAAS,CAAC;QAcrE;;WAEG;QAEI,SAAI,GAAG,KAAK,CAAC;QAiDpB;;;;WAIG;QAEI,oBAAe,GAAoB,EAAE,CAAC;QAE7C,gBAAgB;QAET,gBAAW,GAAG,KAAK,CAAC;QAqD3B;;;;WAIG;QACI,cAAS,GAAW,QAAQ,CAAC,UAAU,CAAC,CAAC;QAEhD;;;;WAIG;QAEI,4BAAuB,GAAG,CAAC,CAAC;QAE3B,wBAAmB,GAAG,KAAK,CAAC;QAE5B,WAAM,GAAG,EAAE,CAAC;QACZ,WAAM,GAAG,EAAE,CAAC;QAEpB;;WAEG;QACK,mBAAc,GAAG,KAAK,CAAC;IA4nBnC,CAAC;IAtsBG,IAAoB,KAAK;QACrB,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,IAAoB,KAAK,CAAC,IAAY;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,IAAI,YAAY,GAAG,IAAI,CAAC;QAExB,IAAI,IAAI,CAAC,eAAe,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACnD,MAAM,aAAa,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;YAExD,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC;YACjE,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC;YAE5D,IAAI,iBAAiB,KAAK,iBAAiB,EAAE,CAAC;gBAC1C,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;YACvC,CAAC;YAED,YAAY,GAAG,IAAI,CAAC,mBAAmB,EAAE,IAAI,IAAI,YAAY,CAAC;QAClE,CAAC;QAED,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC;YAC3B,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YACvC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACrC,CAAC;QAED,oFAAoF;QACpF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjE,CAAC;IAED;;;;OAIG;IACH,IAAoB,OAAO;QACvB,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,MAAM;YACtC,CAAC,CAAC,IAAI,CAAC,eAAe;YACtB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;IACxB,CAAC;IAED,IAAoB,OAAO,CAAC,KAAsB;QAC9C,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACvC,CAAC;IA2BD,IAAY,oBAAoB;QAC5B,OAAO,CACH,IAAI,CAAC,YAAY,KAAK,oBAAoB,CAAC,MAAM;eAC9C,IAAI,CAAC,kBAAkB,CAC7B,CAAC;IACN,CAAC;IAED,IAAY,kBAAkB;QAC1B,OAAO,CACH,IAAI,CAAC,YAAY,KAAK,oBAAoB,CAAC,IAAI;eAC5C,IAAI,CAAC,kBAAkB,CAC7B,CAAC;IACN,CAAC;IAED,IAAY,kBAAkB;QAC1B,OAAO,IAAI,CAAC,YAAY,KAAK,oBAAoB,CAAC,IAAI,CAAC;IAC3D,CAAC;IAEe,qBAAqB,CACjC,IAAmB,EACnB,IAAmB;QAEnB,+DAA+D;QAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,KAAK,CAAC,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,KAAK,EAAE,CAAC;YACR,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACvB,CAAC;IACL,CAAC;IAEe,iBAAiB;QAC7B,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC;QAC/C,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAChC,CAAC;IAED;;OAEG;IACa,YAAY,CAAC,CAAa;QACtC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,MAAM,QAAQ,GAAI,CAAC,CAAC,MAAsB,CAAC,OAAO,CAC9C,sBAAsB,CACzB,CAAC;YAEF,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBACjC,OAAO,KAAK,CAAC;YACjB,CAAC;YAED,IAAI,CAAC,eAAe,GAAG,CAAC,QAAQ,CAAC,CAAC;YAClC,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC;YACnC,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QAED,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QAEvB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACzB,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,wBAAwB,CAAC,CAAQ;QACpC,CAAC,CAAC,wBAAwB,EAAE,CAAC;IACjC,CAAC;IAED;;OAEG;IACI,yBAAyB,CAAC,CAAQ;QACrC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,cAAe,CAAC,OAAO,CAAC;QACzC,CAAC,CAAC,wBAAwB,EAAE,CAAC;IACjC,CAAC;IAED;;OAEG;IACI,0BAA0B,CAAC,CAAgB;QAC9C,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC;YACZ,KAAK,UAAU,CAAC;YAChB,KAAK,YAAY,CAAC;YAClB,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ;gBACT,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;gBACjB,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;gBACxB,OAAO,KAAK,CAAC;YACjB;gBACI,OAAO,IAAI,CAAC;QACpB,CAAC;IACL,CAAC;IAED;;OAEG;IACI,aAAa;QAChB,IACI,CAAC,IAAI,CAAC,YAAY;eACf,IAAI,CAAC,YAAY,KAAK,oBAAoB,CAAC,IAAI,EACpD,CAAC;YACC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACrB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAEzC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CACvC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAC5D,CAAC;QAEF,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBACrB,CAAgB,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACzE,CAAC,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED;;OAEG;IACI,YAAY,CAAC,CAAa;QAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QACjC,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC7B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,sBAAsB,CAC5C,IAAI,CAAC,OAAO,CAAC,KAAK,CACrB,CAAC;QACN,CAAC;QAED,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAC/D,IAAI,IAAI,CAAC,kBAAkB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACxC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACrB,CAAC;YAED,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC5B,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;oBAC9B,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAE,CAAC,CAAC;oBAClD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CACrC,IAAI,CAAC,mBAAmB,CAC3B,CAAC;oBACF,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC9B,CAAC;qBAAM,CAAC;oBACJ,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;gBAC5B,CAAC;YACL,CAAC;QACL,CAAC;QAED,mGAAmG;QACnG,mGAAmG;QACnG,oGAAoG;QACpG,0DAA0D;QAC1D,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC5B,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,KAAK,CAAC;QAC5C,CAAC;QACD,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAEhC,0FAA0F;QAC1F,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACpC,IAAI,CAAC,4BAA4B,EAAE,CAAC;QACxC,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAChC,OAAO,IAAI,CAAC;IAChB,CAAC;IAEe,cAAc,CAAC,CAAgB;QAC3C,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC;YACZ,KAAK,QAAQ;gBACT,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjB,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;oBAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;gBAC7B,CAAC;gBAED,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;gBAClB,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC3B,IAAI,CAAC,wBAAwB,EAAE,CAAC;gBAChC,MAAM;YACV,KAAK,SAAS;gBACV,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;oBAC7B,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;gBAC5B,CAAC;gBAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;oBACZ,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;oBAClB,MAAM;gBACV,CAAC;gBAED,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;gBAChB,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC;gBACxB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;gBACjB,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrB,MAAM;YACV,KAAK,MAAM;gBACP,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAE3B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;oBACb,OAAO,IAAI,CAAC;gBAChB,CAAC;gBAED,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;gBAClB,MAAM;YACV,KAAK,YAAY,CAAC;YAClB,KAAK,UAAU;gBACX,IAAI,CAAC,aAAa,EAAE,CAAC;gBAErB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;oBACb,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;oBACjB,MAAM;gBACV,CAAC;gBAED,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAClC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;gBAC5B,CAAC;gBAED,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;oBAC5B,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC9B,CAAC;gBAED,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;oBACxC,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;gBACrC,CAAC;gBACD,MAAM;YACV;gBACI,OAAO,IAAI,CAAC;QACpB,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,YAAY,CAAC,CAAgB;QAChC,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;QAElB,QAAQ,GAAG,EAAE,CAAC;YACV,KAAK,WAAW,CAAC;YACjB,KAAK,YAAY,CAAC;YAClB,KAAK,WAAW,CAAC;YACjB,KAAK,QAAQ,CAAC;YACd,KAAK,MAAM,CAAC;YACZ,KAAK,KAAK,CAAC,CAAC,CAAC;gBACT,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;gBACjC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;gBACxB,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrB,MAAM;YACV,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACN,MAAM;YACV,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACa,eAAe,CAAC,CAAa;QACzC,IAAI,CAAC,SAAS,EAAE,CAAC;QAEjB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,MAAM,WAAW,GAAG,CAAC,CAAC,aAA4B,CAAC;YACnD,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;YACjB,CAAC;QACL,CAAC;QAED,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;QAClB,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACa,iBAAiB;QAC7B,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChC,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAED,wDAAwD;IACxC,QAAQ;QACpB,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAED;;;;;;OAMG;IACa,wBAAwB;QACpC,IAAI,IAAI,CAAC,eAAe,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACnD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CACxC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ;mBACX,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC,QAAQ,CAAC,CAC/D,CAAC;YAEF,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC/C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;YAC/C,CAAC;YACD,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC9B,CAAC;IACL,CAAC;IAED;;OAEG;IACa,oBAAoB,CAChC,IAAwB,EACxB,IAAY;QAEZ,IAAI,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;YACnC,IAAI,mBAAmB,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;YACnE,4DAA4D;YAC5D,IAAI,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,QAAQ,EAAE,CAAC;gBAC9C,mBAAmB,GAAG,CAAC,CAAC,CAAC;YAC7B,CAAC;YAED,2EAA2E;YAC3E,IAAI,mBAAmB,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC;gBAC7C,IAAI,CAAC,aAAa,GAAG,mBAAmB,CAAC;gBACzC,OAAO;YACX,CAAC;YAED,KAAK,CAAC,oBAAoB,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;YACtD,+EAA+E;YAC/E,+EAA+E;YAC/E,2CAA2C;YAC3C,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC9B,CAAC;IACL,CAAC;IAED;;;;OAIG;IACa,eAAe,CAAC,IAAa,EAAE,IAAa;QACxD,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;YACxB,KAAK,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IACzD,CAAC;IAED;;;;;;OAMG;IACa,gBAAgB;QAC5B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjB,IAAI,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC;YAClC,GAAG,CAAC;gBACA,IAAI,QAAQ,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;oBACtC,OAAO;gBACX,CAAC;gBACD,QAAQ,IAAI,CAAC,CAAC;YAClB,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAE,CAAC,QAAQ,EAAE;YAC3C,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;QAClC,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACa,oBAAoB;QAChC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjB,IAAI,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC;YAClC,GAAG,CAAC;gBACA,QAAQ,IAAI,CAAC,CAAC;gBACd,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;oBACf,MAAM;gBACV,CAAC;YACL,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAE,CAAC,QAAQ,EAAE;YAC3C,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;QAClC,CAAC;IACL,CAAC;IAED;;OAEG;IACI,cAAc;QACjB,+DAA+D;QAC/D,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;YACpC,qDAAqD;YACrD,mDAAmD;YACnD,OAAO;QACX,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAChD,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC;QAC1C,MAAM,eAAe,GAAG,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC;QAE3D,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAC3C,CAAC;aAAM,IAAI,UAAU,CAAC,GAAG,GAAG,eAAe,EAAE,CAAC;YAC1C,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC;QACzC,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC;QACzC,CAAC;QAED,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,cAAc;YACxC,CAAC,CAAC,IAAI,CAAC,iBAAiB;YACxB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;QAEpB,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,QAAQ,KAAK,cAAc,CAAC,KAAK;YACjE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;YAC5B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IACtC,CAAC;IAED;;;;;;OAMG;IACgB,4BAA4B;QAC3C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;gBACxC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACrB,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;oBAC3B,qBAAqB,CAAC,GAAG,EAAE;wBACvB,IAAI,CAAC,mBAAmB,EAAE,cAAc,CAAC;4BACrC,KAAK,EAAE,SAAS;yBACnB,CAAC,CAAC;oBACP,CAAC,CAAC,CAAC;gBACP,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAES,WAAW;QACjB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC;YACnC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;YAE3B,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,4BAA4B,EAAE,CAAC;YAEpC,2EAA2E;YAC3E,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;YACvB,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;QAChC,CAAC;QAED,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;QAC5C,CAAC;IACL,CAAC;IAES,kBAAkB;QACxB,IAAI,IAAI,CAAC,KAAK,YAAY,gBAAgB,EAAE,CAAC;YACzC,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;QACpD,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACgB,kBAAkB;QACjC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1F,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,CAAC;QAC/D,IAAI,CAAC,4BAA4B,EAAE,CAAC;IACxC,CAAC;IAED;;;;;OAKG;IACgB,sBAAsB,CACrC,CAA8B,EAC9B,IAAqB;QAErB,IAAI,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;YACnC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBACtB,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAES,eAAe,CACrB,CAA6B,EAC7B,IAAgC;QAEhC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC;IAEO,aAAa,CACjB,KAAiC,EACjC,KAAiC;QAEjC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACrC,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;QACpD,CAAC;IACL,CAAC;IAEO,qBAAqB,CACzB,KAA8B,EAC9B,KAA8B;QAE9B,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACrC,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;QACpD,CAAC;IACL,CAAC;IAED,gEAAgE;IACxD,gBAAgB,CAAC,SAAiB,EAAE,SAAiB;QACzD,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAChC,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,UAAoB;QACpC,IAAI,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;YACnC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,mBAAmB,EAAE,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YAClE,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACpC,CAAC;QAED,IAAI,UAAU,EAAE,CAAC;YACb,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;IACL,CAAC;IAED;;OAEG;IACK,mBAAmB;QACvB,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;YACnD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACzB,CAAC;IACL,CAAC;IAED;;OAEG;IACK,kBAAkB;QACtB,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAC1B,IAAI,CAAC,MAAM,CAAC,MAAM,EAClB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EACzB,UAAU,CACb,CAAC;QACN,CAAC;IACL,CAAC;IAEO,mBAAmB;QACvB,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;QACrD,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;IAC3E,CAAC;IAED;;OAEG;IACK,SAAS;QACb,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;YACpC,CAAC,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI;YAChC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAEO,oBAAoB;QACxB,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;QACvE,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,YAAY,EAAE,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7D,CAAC;aAAM,CAAC;YACJ,YAAY,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC;QAChD,CAAC;IACL,CAAC;IAED;;;;;;;;;OASG;IACK,wBAAwB;QAC5B,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC5C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACzB,CAAC;YAED,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACrC,CAAC;IACL,CAAC;IAEO,sBAAsB,CAAC,UAAkB;QAC7C,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CACzB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,CAC5C,CAAC;IACN,CAAC;CACJ;AArxBU;IADN,IAAI;4CACgE;AAM9D;IADN,IAAI,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;8CACX;AAMpC;IADN,IAAI,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;mDACU;AAMnC;IADN,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;sCACzB;AASb;IADN,IAAI;6CACuB;AAQrB;IADN,UAAU;0CACsB;AAM1B;IADN,UAAU;wCACoB;AAMxB;IADN,UAAU;gDACyB;AAM7B;IADN,UAAU;yCACuB;AAM3B;IADN,UAAU;yCACqB;AAMhB;IADf,UAAU;gDACmC;AAQvC;IADN,UAAU;iDACkC;AAItC;IADN,UAAU;6CACgB;AAkEpB;IADN,UAAU;yDACwB;AAwoBvC,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAkB;IACrD,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,sBAAsB;IACjC,QAAQ;IACR,MAAM;IACN,aAAa,EAAE;QACX,cAAc,EAAE,IAAI;KACvB;IACD,GAAG,EAAE,IAAI,CAAU;;eAER,sBAAsB;;;iBAGpB,sBAAsB;;eAExB,eAAe;kBACZ,GAAG,CAAC,gBAAgB,CAAC;;4BAEX,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;6BACV,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ;;0BAElB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,KAAK,CAAC;2BAC5C,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC;4BAC7C,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,KAAsB,CAAC;;;;;;mBAMzE,wBAAwB;;;;oBAIvB,wBAAwB;gBAC5B,eAAe;;UAErB,iBAAiB;KACtB;CACJ,CAAC,CAAC;AAGH,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CAAC;AAEvD,YAAY,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC;AAC3E,MAAM,CAAC,MAAM,WAAW,GAAG,iBAAiB,CAAC","sourcesContent":["import {\n DOM,\n Observable,\n attr,\n html,\n observable,\n ref\n} from '@microsoft/fast-element';\nimport {\n DesignSystem,\n ComboboxOptions,\n ComboboxAutocomplete,\n SelectPosition,\n ListboxOption,\n DelegatesARIACombobox,\n applyMixins,\n StartEnd\n} from '@microsoft/fast-foundation';\nimport {\n keyArrowDown,\n keyArrowUp,\n keyEnter,\n keyEscape,\n keySpace,\n keyTab,\n limit,\n uniqueId\n} from '@microsoft/fast-web-utilities';\nimport { ToggleButton, toggleButtonTag } from '../toggle-button';\nimport { errorTextTemplate } from '../patterns/error/template';\nimport { iconArrowExpanderDownTag } from '../icons/arrow-expander-down';\nimport { iconExclamationMarkTag } from '../icons/exclamation-mark';\n\nimport { styles } from './styles';\nimport { mixinErrorPattern } from '../patterns/error/types';\nimport {\n DropdownAppearance,\n type DropdownPattern\n} from '../patterns/dropdown/types';\nimport type { AnchoredRegion } from '../anchored-region';\nimport { template } from './template';\nimport { FormAssociatedCombobox } from './models/combobox-form-associated';\nimport type { ListOption } from '../list-option';\nimport { mixinRequiredVisiblePattern } from '../patterns/required-visible/types';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nimble-combobox': Combobox;\n }\n}\n\n/**\n * A nimble-styed HTML combobox\n */\nexport class Combobox\n extends mixinErrorPattern(\n mixinRequiredVisiblePattern(FormAssociatedCombobox)\n )\n implements DropdownPattern {\n @attr\n public appearance: DropdownAppearance = DropdownAppearance.underline;\n\n /**\n * The autocomplete attribute.\n */\n @attr({ attribute: 'autocomplete', mode: 'fromView' })\n public autocomplete?: ComboboxAutocomplete;\n\n /**\n * The placement for the listbox when the combobox is open.\n */\n @attr({ attribute: 'position' })\n public positionAttribute?: SelectPosition;\n\n /**\n * The open attribute.\n */\n @attr({ attribute: 'open', mode: 'boolean' })\n public open = false;\n\n /**\n * Sets the placeholder value of the element, generally used to provide a hint to the user.\n * @remarks Using a non-null assertion to mimic FAST's original improper typing of an\n * uninitialized property:\n * https://github.com/microsoft/fast/blob/0c27d027ff6e8616ad4fddc17f4432aa7f6cbad0/packages/web-components/fast-foundation/src/combobox/combobox.ts#L199\n */\n @attr\n public placeholder!: string;\n\n /**\n * The current state of the calculated position of the listbox.\n *\n * @public\n */\n @observable\n public position?: SelectPosition;\n\n /**\n * @internal\n */\n @observable\n public region?: AnchoredRegion;\n\n /**\n * @internal\n */\n @observable\n public controlWrapper!: HTMLElement;\n\n /**\n * @internal\n */\n @observable\n public control!: HTMLInputElement;\n\n /**\n * @internal\n */\n @observable\n public listbox!: HTMLDivElement;\n\n /**\n * @internal\n */\n @observable\n public readonly dropdownButton?: ToggleButton;\n\n /**\n * @internal\n *\n * The collection of currently filtered options.\n */\n @observable\n public filteredOptions: ListboxOption[] = [];\n\n /** @internal */\n @observable\n public hasOverflow = false;\n\n public override get value(): string {\n Observable.track(this, 'value');\n return this._value;\n }\n\n public override set value(next: string) {\n const prev = this._value;\n let updatedValue = next;\n\n if (this.$fastController.isConnected && this.options) {\n const selectedIndex = this.findIndexOfValidOption(next);\n\n const prevSelectedValue = this.options[this.selectedIndex]?.text;\n const nextSelectedValue = this.options[selectedIndex]?.text;\n\n if (prevSelectedValue !== nextSelectedValue) {\n this.selectedIndex = selectedIndex;\n }\n\n updatedValue = this.firstSelectedOption?.text || updatedValue;\n }\n\n if (prev !== updatedValue) {\n this._value = updatedValue;\n super.valueChanged(prev, updatedValue);\n Observable.notify(this, 'value');\n }\n\n // Can remove when following resolved: https://github.com/microsoft/fast/issues/6749\n this.filter = next;\n this.filterOptions();\n this.selectedIndex = this.findIndexOfValidOption(this.value);\n }\n\n /**\n * The list of options.\n *\n * Overrides `Listbox.options`.\n */\n public override get options(): ListboxOption[] {\n Observable.track(this, 'options');\n return this.filteredOptions && this.filter\n ? this.filteredOptions\n : this._options;\n }\n\n public override set options(value: ListboxOption[]) {\n this._options = value;\n Observable.notify(this, 'options');\n }\n\n /**\n * The unique id for the internal listbox element.\n *\n * @internal\n */\n public listboxId: string = uniqueId('listbox-');\n\n /**\n * The space available in the viewport for the listbox when opened.\n *\n * @internal\n */\n @observable\n public availableViewportHeight = 0;\n\n private valueUpdatedByInput = false;\n private valueBeforeTextUpdate?: string;\n private _value = '';\n private filter = '';\n\n /**\n * The initial state of the position attribute.\n */\n private forcedPosition = false;\n\n private get isAutocompleteInline(): boolean {\n return (\n this.autocomplete === ComboboxAutocomplete.inline\n || this.isAutocompleteBoth\n );\n }\n\n private get isAutocompleteList(): boolean {\n return (\n this.autocomplete === ComboboxAutocomplete.list\n || this.isAutocompleteBoth\n );\n }\n\n private get isAutocompleteBoth(): boolean {\n return this.autocomplete === ComboboxAutocomplete.both;\n }\n\n public override slottedOptionsChanged(\n prev: HTMLElement[],\n next: HTMLElement[]\n ): void {\n // Workaround for https://github.com/microsoft/fast/issues/5773\n const value = this.value;\n super.slottedOptionsChanged(prev, next);\n this.updateValue();\n if (value) {\n this.value = value;\n }\n }\n\n public override connectedCallback(): void {\n super.connectedCallback();\n this.forcedPosition = !!this.positionAttribute;\n if (this.value) {\n this.initialValue = this.value;\n }\n this.setPositioning();\n this.updateInputAriaLabel();\n }\n\n /**\n * @internal\n */\n public override clickHandler(e: MouseEvent): boolean {\n if (this.disabled) {\n return false;\n }\n\n if (this.open) {\n const captured = (e.target as HTMLElement).closest<ListOption>(\n 'option,[role=option]'\n );\n\n if (!captured || captured.disabled) {\n return false;\n }\n\n this.selectedOptions = [captured];\n this.control.value = captured.text;\n this.clearSelectionRange();\n this.updateValue(true);\n }\n\n this.open = !this.open;\n\n if (this.open) {\n this.control.focus();\n }\n\n return true;\n }\n\n /**\n * @internal\n */\n public toggleButtonClickHandler(e: Event): void {\n e.stopImmediatePropagation();\n }\n\n /**\n * @internal\n */\n public toggleButtonChangeHandler(e: Event): void {\n this.open = this.dropdownButton!.checked;\n e.stopImmediatePropagation();\n }\n\n /**\n * @internal\n */\n public toggleButtonKeyDownHandler(e: KeyboardEvent): boolean {\n switch (e.key) {\n case keyArrowUp:\n case keyArrowDown:\n case keySpace:\n case keyEnter:\n this.open = true;\n this.stopPropagation(e);\n return false;\n default:\n return true;\n }\n }\n\n /**\n * @internal\n */\n public filterOptions(): void {\n if (\n !this.autocomplete\n || this.autocomplete === ComboboxAutocomplete.none\n ) {\n this.filter = '';\n }\n\n const filter = this.filter.toLowerCase();\n\n this.filteredOptions = this._options.filter(\n o => o.text.toLowerCase().startsWith(filter) && !o.hidden\n );\n\n if (this.isAutocompleteList) {\n this._options.forEach(o => {\n (o as ListOption).visuallyHidden = !this.filteredOptions.includes(o);\n });\n }\n }\n\n /**\n * @internal\n */\n public inputHandler(e: InputEvent): boolean {\n this.filter = this.control.value;\n this.filterOptions();\n\n if (!this.isAutocompleteInline) {\n this.selectedIndex = this.findIndexOfValidOption(\n this.control.value\n );\n }\n\n if (!e.inputType.includes('deleteContent') && this.filter.length) {\n if (this.isAutocompleteList && !this.open) {\n this.open = true;\n }\n\n if (this.isAutocompleteInline) {\n if (this.filteredOptions.length) {\n this.selectedOptions = [this.filteredOptions[0]!];\n this.selectedIndex = this.options.indexOf(\n this.firstSelectedOption\n );\n this.setInlineSelection();\n } else {\n this.selectedIndex = -1;\n }\n }\n }\n\n // This is a workaround for the issue described here: https://github.com/microsoft/fast/issues/6267\n // For now, we will update the value ourselves while a user types in text. Note that there is other\n // implementation related to this (like the 'keydownEventHandler') needed to create the complete set\n // of desired behavior described in the issue noted above.\n if (!this.valueUpdatedByInput) {\n this.valueBeforeTextUpdate = this.value;\n }\n this.valueUpdatedByInput = true;\n\n // This is a workaround for this FAST issue: https://github.com/microsoft/fast/issues/6776\n if (this.value !== this.control.value) {\n this.focusAndScrollOptionIntoView();\n }\n\n this.value = this.control.value;\n return true;\n }\n\n public override keydownHandler(e: KeyboardEvent): boolean {\n if (e.ctrlKey || e.altKey) {\n return true;\n }\n\n switch (e.key) {\n case keyEnter:\n this.syncValue();\n if (this.isAutocompleteInline) {\n this.filter = this.value;\n }\n\n this.open = false;\n this.clearSelectionRange();\n this.emitChangeIfValueUpdated();\n break;\n case keyEscape:\n if (!this.isAutocompleteInline) {\n this.selectedIndex = -1;\n }\n\n if (this.open) {\n this.open = false;\n break;\n }\n\n this.value = '';\n this.control.value = '';\n this.filter = '';\n this.filterOptions();\n break;\n case keyTab:\n this.setInputToSelection();\n\n if (!this.open) {\n return true;\n }\n\n e.preventDefault();\n this.open = false;\n break;\n case keyArrowDown:\n case keyArrowUp:\n this.filterOptions();\n\n if (!this.open) {\n this.open = true;\n break;\n }\n\n if (this.filteredOptions.length > 0) {\n super.keydownHandler(e);\n }\n\n if (this.isAutocompleteInline) {\n this.setInlineSelection();\n }\n\n if (this.open && this.valueUpdatedByInput) {\n this.valueUpdatedByInput = false;\n }\n break;\n default:\n return true;\n }\n return true;\n }\n\n /**\n * @internal\n */\n public keyupHandler(e: KeyboardEvent): boolean {\n const key = e.key;\n\n switch (key) {\n case 'ArrowLeft':\n case 'ArrowRight':\n case 'Backspace':\n case 'Delete':\n case 'Home':\n case 'End': {\n this.filter = this.control.value;\n this.selectedIndex = -1;\n this.filterOptions();\n break;\n }\n default: {\n break;\n }\n }\n\n return true;\n }\n\n /**\n * @internal\n */\n public override focusoutHandler(e: FocusEvent): boolean {\n this.syncValue();\n\n if (this.open) {\n const focusTarget = e.relatedTarget as HTMLElement;\n if (this.isSameNode(focusTarget)) {\n this.focus();\n }\n }\n\n this.open = false;\n this.emitChangeIfValueUpdated();\n return true;\n }\n\n /**\n * Reset the element to its first selectable option when its parent form is reset.\n *\n * @internal\n */\n public override formResetCallback(): void {\n super.formResetCallback();\n this.setDefaultSelectedOption();\n this.updateValue();\n }\n\n /** {@inheritDoc (FormAssociated:interface).validate} */\n public override validate(): void {\n super.validate(this.control);\n }\n\n /**\n * Set the default selected options at initialization or reset.\n *\n * @internal\n * @remarks\n * Overrides `Listbox.setDefaultSelectedOption`\n */\n public override setDefaultSelectedOption(): void {\n if (this.$fastController.isConnected && this.options) {\n const selectedIndex = this.options.findIndex(\n el => !el.disabled\n && (el.getAttribute('selected') !== null || el.selected)\n );\n\n this.selectedIndex = selectedIndex;\n if (!this.dirtyValue && this.firstSelectedOption) {\n this.value = this.firstSelectedOption.text;\n }\n this.setSelectedOptions();\n }\n }\n\n /**\n * @internal\n */\n public override selectedIndexChanged(\n prev: number | undefined,\n next: number\n ): void {\n if (this.$fastController.isConnected) {\n let pinnedSelectedIndex = limit(-1, this.options.length - 1, next);\n // Ensure selectedIndex doesn't get set to a disabled option\n if (this.options[pinnedSelectedIndex]?.disabled) {\n pinnedSelectedIndex = -1;\n }\n\n // we only want to call the super method when the selectedIndex is in range\n if (pinnedSelectedIndex !== this.selectedIndex) {\n this.selectedIndex = pinnedSelectedIndex;\n return;\n }\n\n super.selectedIndexChanged(prev, pinnedSelectedIndex);\n // the base class doesn't call this when no option is selected, but we need to,\n // otherwise selectedOptions, ariaActiveDescendant, and the previously selected\n // option's selected state won't be updated\n this.setSelectedOptions();\n }\n }\n\n /**\n * Synchronize the `aria-disabled` property when the `disabled` property changes.\n *\n * @internal\n */\n public override disabledChanged(prev: boolean, next: boolean): void {\n if (super.disabledChanged) {\n super.disabledChanged(prev, next);\n }\n this.ariaDisabled = this.disabled ? 'true' : 'false';\n }\n\n /**\n * Move focus to the next selectable option.\n *\n * @internal\n * @remarks Has the same behavior as `Listbox.selectNextOption` except it skips disabled options.\n * Overrides `Listbox.selectNextOption`\n */\n public override selectNextOption(): void {\n if (!this.disabled) {\n let newIndex = this.selectedIndex;\n do {\n if (newIndex + 1 >= this.options.length) {\n return;\n }\n newIndex += 1;\n } while (this.options[newIndex]!.disabled);\n this.selectedIndex = newIndex;\n }\n }\n\n /**\n * Move focus to the previous selectable option.\n *\n * @internal\n * @remarks Has the same behavior as `Listbox.selectPreviousOption` except it skips disabled options and allows moving focus to the input.\n * Overrides `Listbox.selectPreviousOption`\n */\n public override selectPreviousOption(): void {\n if (!this.disabled) {\n let newIndex = this.selectedIndex;\n do {\n newIndex -= 1;\n if (newIndex < 0) {\n break;\n }\n } while (this.options[newIndex]!.disabled);\n this.selectedIndex = newIndex;\n }\n }\n\n /**\n * @internal\n */\n public setPositioning(): void {\n // Workaround for https://github.com/microsoft/fast/issues/5123\n if (!this.$fastController.isConnected) {\n // Don't call setPositioning() until we're connected,\n // since this.forcedPosition isn't initialized yet.\n return;\n }\n const currentBox = this.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const availableBottom = viewportHeight - currentBox.bottom;\n\n if (this.forcedPosition) {\n this.position = this.positionAttribute;\n } else if (currentBox.top > availableBottom) {\n this.position = SelectPosition.above;\n } else {\n this.position = SelectPosition.below;\n }\n\n this.positionAttribute = this.forcedPosition\n ? this.positionAttribute\n : this.position;\n\n this.availableViewportHeight = this.position === SelectPosition.above\n ? Math.trunc(currentBox.top)\n : Math.trunc(availableBottom);\n }\n\n /**\n * Focus the control and scroll the first selected option into view.\n *\n * @internal\n * @remarks\n * Overrides: `Listbox.focusAndScrollOptionIntoView`\n */\n protected override focusAndScrollOptionIntoView(): void {\n if (this.open) {\n if (this.contains(document.activeElement)) {\n this.control.focus();\n if (this.firstSelectedOption) {\n requestAnimationFrame(() => {\n this.firstSelectedOption?.scrollIntoView({\n block: 'nearest'\n });\n });\n }\n }\n }\n }\n\n protected openChanged(): void {\n if (this.open) {\n this.ariaControls = this.listboxId;\n this.ariaExpanded = 'true';\n\n this.setPositioning();\n this.focusAndScrollOptionIntoView();\n\n // focus is directed to the element when `open` is changed programmatically\n DOM.queueUpdate(() => this.focus());\n } else {\n this.ariaControls = '';\n this.ariaExpanded = 'false';\n }\n\n if (this.dropdownButton) {\n this.dropdownButton.checked = this.open;\n }\n }\n\n protected placeholderChanged(): void {\n if (this.proxy instanceof HTMLInputElement) {\n this.proxy.placeholder = this.placeholder ?? '';\n }\n }\n\n /**\n * Need to update even when options is empty.\n * @internal\n * @remarks Same as `Listbox.setSelectedOptions` except does not check if options is non-empty.\n * Overrides: `Listbox.setSelectedOptions`\n */\n protected override setSelectedOptions(): void {\n this.selectedOptions = this.selectedIndex > -1 ? [this.options[this.selectedIndex]!] : [];\n this.ariaActiveDescendant = this.firstSelectedOption?.id ?? '';\n this.focusAndScrollOptionIntoView();\n }\n\n /**\n * Ensure that the entire list of options is used when setting the selected property.\n * @internal\n * @remarks\n * Overrides: `Listbox.selectedOptionsChanged`\n */\n protected override selectedOptionsChanged(\n _: ListboxOption[] | undefined,\n next: ListboxOption[]\n ): void {\n if (this.$fastController.isConnected) {\n this._options.forEach(o => {\n o.selected = next.includes(o);\n });\n }\n }\n\n protected positionChanged(\n _: SelectPosition | undefined,\n next: SelectPosition | undefined\n ): void {\n this.positionAttribute = next;\n this.setPositioning();\n }\n\n private regionChanged(\n _prev: AnchoredRegion | undefined,\n _next: AnchoredRegion | undefined\n ): void {\n if (this.region && this.controlWrapper) {\n this.region.anchorElement = this.controlWrapper;\n }\n }\n\n private controlWrapperChanged(\n _prev: HTMLElement | undefined,\n _next: HTMLElement | undefined\n ): void {\n if (this.region && this.controlWrapper) {\n this.region.anchorElement = this.controlWrapper;\n }\n }\n\n // Workaround for https://github.com/microsoft/fast/issues/6041.\n private ariaLabelChanged(_oldValue: string, _newValue: string): void {\n this.updateInputAriaLabel();\n }\n\n /**\n * Sets the value and to match the first selected option.\n */\n private updateValue(shouldEmit?: boolean): void {\n if (this.$fastController.isConnected) {\n this.value = this.firstSelectedOption?.text || this.control.value;\n this.control.value = this.value;\n }\n\n if (shouldEmit) {\n this.$emit('change');\n }\n }\n\n /**\n * Focus and set the content of the control based on the first selected option.\n */\n private setInputToSelection(): void {\n if (this.firstSelectedOption) {\n this.control.value = this.firstSelectedOption.text;\n this.control.focus();\n }\n }\n\n /**\n * Focus, set and select the content of the control based on the first selected option.\n */\n private setInlineSelection(): void {\n if (this.firstSelectedOption) {\n this.setInputToSelection();\n this.control.setSelectionRange(\n this.filter.length,\n this.control.value.length,\n 'backward'\n );\n }\n }\n\n private clearSelectionRange(): void {\n const controlValueLength = this.control.value.length;\n this.control.setSelectionRange(controlValueLength, controlValueLength);\n }\n\n /**\n * Determines if a value update should involve emitting a change event, then updates the value.\n */\n private syncValue(): void {\n const newValue = this.selectedIndex > -1\n ? this.firstSelectedOption?.text\n : this.control.value;\n this.updateValue(this.value !== newValue);\n }\n\n private updateInputAriaLabel(): void {\n const inputElement = this.shadowRoot?.querySelector('.selected-value');\n if (this.ariaLabel) {\n inputElement?.setAttribute('aria-label', this.ariaLabel);\n } else {\n inputElement?.removeAttribute('aria-label');\n }\n }\n\n /**\n * This will only emit a `change` event after text entry where the text in the input prior to\n * typing is different than the text present upon an attempt to commit (e.g. pressing <Enter>).\n * So, for a concrete example:\n * 1) User types 'Sue' (when Combobox input was blank).\n * 2) User presses <Enter> -> 'change' event fires\n * 3) User deletes 'Sue'\n * 4) User re-types 'Sue'\n * 5) User presses <Enter> -> NO 'change' event is fired\n */\n private emitChangeIfValueUpdated(): void {\n if (this.valueUpdatedByInput) {\n if (this.value !== this.valueBeforeTextUpdate) {\n this.$emit('change');\n }\n\n this.valueUpdatedByInput = false;\n }\n }\n\n private findIndexOfValidOption(optionText: string): number {\n return this.options.findIndex(\n o => !o.disabled && o.text === optionText\n );\n }\n}\n\nconst nimbleCombobox = Combobox.compose<ComboboxOptions>({\n baseName: 'combobox',\n baseClass: FormAssociatedCombobox,\n template,\n styles,\n shadowOptions: {\n delegatesFocus: true\n },\n end: html<Combobox>`\n <div class=\"end-slot-container\">\n <${iconExclamationMarkTag}\n severity=\"error\"\n class=\"error-icon\"\n ></${iconExclamationMarkTag}>\n <div class=\"separator\"></div>\n <${toggleButtonTag}\n ${ref('dropdownButton')}\n appearance=\"ghost\"\n ?checked=\"${x => x.open}\"\n ?disabled=\"${x => x.disabled}\"\n content-hidden=\"true\"\n @click=\"${(x, c) => x.toggleButtonClickHandler(c.event)}\"\n @change=\"${(x, c) => x.toggleButtonChangeHandler(c.event)}\"\n @keydown=\"${(x, c) => x.toggleButtonKeyDownHandler(c.event as KeyboardEvent)}\"\n class=\"dropdown-button\"\n part=\"button\"\n aria-hidden=\"true\"\n tabindex=\"-1\"\n >\n <${iconArrowExpanderDownTag}\n slot=\"start\"\n class=\"dropdown-icon\"\n >\n </${iconArrowExpanderDownTag}>\n </${toggleButtonTag}>\n </div>\n ${errorTextTemplate}\n `\n});\n\nexport interface Combobox extends StartEnd, DelegatesARIACombobox {}\napplyMixins(Combobox, StartEnd, DelegatesARIACombobox);\n\nDesignSystem.getOrCreate().withPrefix('nimble').register(nimbleCombobox());\nexport const comboboxTag = 'nimble-combobox';\n"]}
@@ -2,6 +2,7 @@ import { css } from '@microsoft/fast-element';
2
2
  import { controlHeight, bodyDisabledFontColor, borderRgbPartialColor, smallPadding, borderHoverColor, borderWidth } from '../theme-provider/design-tokens';
3
3
  import { styles as dropdownStyles } from '../patterns/dropdown/styles';
4
4
  import { styles as errorStyles } from '../patterns/error/styles';
5
+ import { styles as requiredVisibleStyles } from '../patterns/required-visible/styles';
5
6
  import { focusVisible } from '../utilities/style/focus';
6
7
  import { appearanceBehavior } from '../utilities/style/appearance';
7
8
  import { DropdownAppearance } from '../select/types';
@@ -9,6 +10,7 @@ import { userSelectNone } from '../utilities/style/user-select';
9
10
  export const styles = css `
10
11
  ${dropdownStyles}
11
12
  ${errorStyles}
13
+ ${requiredVisibleStyles}
12
14
 
13
15
  :host {
14
16
  --ni-private-hover-bottom-border-width: 2px;
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/combobox/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EACH,aAAa,EACb,qBAAqB,EACrB,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACd,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,MAAM,IAAI,cAAc,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEhE,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;MACnB,cAAc;MACd,WAAW;;;;;;cAMH,aAAa,UAAU,WAAW;;;;;;UAMtC,cAAc;iBACP,qBAAqB;;;;;;;;+BAQP,gBAAgB;;;;;;;;;;;;;;;;;qBAiB1B,YAAY;;;;;;;;;;;yBAWR,YAAY;;;;;;uCAME,qBAAqB;uBACrC,aAAa;;;;;;UAM1B,aAAa,CAAC,iBAAiB;uBAClB,YAAY;;;;gBAInB,qBAAqB;;CAEpC,CAAC,aAAa,CACX,kBAAkB,CACd,kBAAkB,CAAC,KAAK,EACxB,GAAG,CAAA;;uCAE4B,WAAW;;;SAGzC,CACJ,CACJ,CAAC","sourcesContent":["import { css } from '@microsoft/fast-element';\nimport {\n controlHeight,\n bodyDisabledFontColor,\n borderRgbPartialColor,\n smallPadding,\n borderHoverColor,\n borderWidth\n} from '../theme-provider/design-tokens';\n\nimport { styles as dropdownStyles } from '../patterns/dropdown/styles';\nimport { styles as errorStyles } from '../patterns/error/styles';\nimport { focusVisible } from '../utilities/style/focus';\nimport { appearanceBehavior } from '../utilities/style/appearance';\nimport { DropdownAppearance } from '../select/types';\nimport { userSelectNone } from '../utilities/style/user-select';\n\nexport const styles = css`\n ${dropdownStyles}\n ${errorStyles}\n\n :host {\n --ni-private-hover-bottom-border-width: 2px;\n --ni-private-bottom-border-width: 1px;\n --ni-private-height-within-border: calc(\n ${controlHeight} - 2 * ${borderWidth}\n );\n }\n\n :host([disabled]) *,\n :host([disabled]) {\n ${userSelectNone}\n color: ${bodyDisabledFontColor};\n }\n\n .control {\n bottom-border-width: var(--ni-private-bottom-border-width);\n }\n\n .control:focus-within {\n border-bottom-color: ${borderHoverColor};\n }\n\n .selected-value {\n -webkit-appearance: none;\n background: transparent;\n border: none;\n color: inherit;\n margin: auto 0;\n width: 100%;\n font: inherit;\n height: var(--ni-private-height-within-border);\n }\n\n .selected-value:hover,\n .selected-value:disabled,\n .selected-value:active,\n .selected-value${focusVisible} {\n outline: none;\n }\n\n [part='indicator'] {\n display: none;\n }\n\n .end-slot-container {\n display: flex;\n align-items: baseline;\n padding-right: ${smallPadding};\n }\n\n .separator {\n display: inline;\n width: 2px;\n border-right: 2px solid rgba(${borderRgbPartialColor}, 0.15);\n height: calc(${controlHeight} - 12px);\n align-self: center;\n margin-left: 4px;\n }\n\n .dropdown-button {\n ${controlHeight.cssCustomProperty}: 24px;\n margin-left: ${smallPadding};\n }\n\n :host([disabled]) .dropdown-icon {\n fill: ${bodyDisabledFontColor};\n }\n`.withBehaviors(\n appearanceBehavior(\n DropdownAppearance.block,\n css`\n :host([error-visible]) .control {\n border-bottom-width: ${borderWidth};\n padding-bottom: 0;\n }\n `\n )\n);\n"]}
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/combobox/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EACH,aAAa,EACb,qBAAqB,EACrB,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACd,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,MAAM,IAAI,cAAc,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,MAAM,IAAI,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEhE,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;MACnB,cAAc;MACd,WAAW;MACX,qBAAqB;;;;;;cAMb,aAAa,UAAU,WAAW;;;;;;UAMtC,cAAc;iBACP,qBAAqB;;;;;;;;+BAQP,gBAAgB;;;;;;;;;;;;;;;;;qBAiB1B,YAAY;;;;;;;;;;;yBAWR,YAAY;;;;;;uCAME,qBAAqB;uBACrC,aAAa;;;;;;UAM1B,aAAa,CAAC,iBAAiB;uBAClB,YAAY;;;;gBAInB,qBAAqB;;CAEpC,CAAC,aAAa,CACX,kBAAkB,CACd,kBAAkB,CAAC,KAAK,EACxB,GAAG,CAAA;;uCAE4B,WAAW;;;SAGzC,CACJ,CACJ,CAAC","sourcesContent":["import { css } from '@microsoft/fast-element';\nimport {\n controlHeight,\n bodyDisabledFontColor,\n borderRgbPartialColor,\n smallPadding,\n borderHoverColor,\n borderWidth\n} from '../theme-provider/design-tokens';\n\nimport { styles as dropdownStyles } from '../patterns/dropdown/styles';\nimport { styles as errorStyles } from '../patterns/error/styles';\nimport { styles as requiredVisibleStyles } from '../patterns/required-visible/styles';\nimport { focusVisible } from '../utilities/style/focus';\nimport { appearanceBehavior } from '../utilities/style/appearance';\nimport { DropdownAppearance } from '../select/types';\nimport { userSelectNone } from '../utilities/style/user-select';\n\nexport const styles = css`\n ${dropdownStyles}\n ${errorStyles}\n ${requiredVisibleStyles}\n\n :host {\n --ni-private-hover-bottom-border-width: 2px;\n --ni-private-bottom-border-width: 1px;\n --ni-private-height-within-border: calc(\n ${controlHeight} - 2 * ${borderWidth}\n );\n }\n\n :host([disabled]) *,\n :host([disabled]) {\n ${userSelectNone}\n color: ${bodyDisabledFontColor};\n }\n\n .control {\n bottom-border-width: var(--ni-private-bottom-border-width);\n }\n\n .control:focus-within {\n border-bottom-color: ${borderHoverColor};\n }\n\n .selected-value {\n -webkit-appearance: none;\n background: transparent;\n border: none;\n color: inherit;\n margin: auto 0;\n width: 100%;\n font: inherit;\n height: var(--ni-private-height-within-border);\n }\n\n .selected-value:hover,\n .selected-value:disabled,\n .selected-value:active,\n .selected-value${focusVisible} {\n outline: none;\n }\n\n [part='indicator'] {\n display: none;\n }\n\n .end-slot-container {\n display: flex;\n align-items: baseline;\n padding-right: ${smallPadding};\n }\n\n .separator {\n display: inline;\n width: 2px;\n border-right: 2px solid rgba(${borderRgbPartialColor}, 0.15);\n height: calc(${controlHeight} - 12px);\n align-self: center;\n margin-left: 4px;\n }\n\n .dropdown-button {\n ${controlHeight.cssCustomProperty}: 24px;\n margin-left: ${smallPadding};\n }\n\n :host([disabled]) .dropdown-icon {\n fill: ${bodyDisabledFontColor};\n }\n`.withBehaviors(\n appearanceBehavior(\n DropdownAppearance.block,\n css`\n :host([error-visible]) .control {\n border-bottom-width: ${borderWidth};\n padding-bottom: 0;\n }\n `\n )\n);\n"]}
@@ -4,6 +4,12 @@ import { anchoredRegionTag } from '../anchored-region';
4
4
  import { DropdownPosition } from '../patterns/dropdown/types';
5
5
  import { overflow } from '../utilities/directive/overflow';
6
6
  import { filterNoResultsLabel } from '../label-provider/core/label-tokens';
7
+ import { createRequiredVisibleLabelTemplate } from '../patterns/required-visible/template';
8
+ const labelTemplate = createRequiredVisibleLabelTemplate(html `
9
+ <label part="label" class="label">
10
+ <slot></slot>
11
+ </label>
12
+ `);
7
13
  /* eslint-disable @typescript-eslint/indent */
8
14
  // prettier-ignore
9
15
  export const template = (context, definition) => html `
@@ -17,9 +23,7 @@ export const template = (context, definition) => html `
17
23
  @focusout="${(x, c) => x.focusoutHandler(c.event)}"
18
24
  @keydown="${(x, c) => x.keydownHandler(c.event)}"
19
25
  >
20
- <label part="label" class="label">
21
- <slot></slot>
22
- </label>
26
+ ${labelTemplate}
23
27
  <div class="control" part="control" ${ref('controlWrapper')}>
24
28
  ${startSlotTemplate(context, definition)}
25
29
  <slot name="control">
@@ -29,6 +33,7 @@ export const template = (context, definition) => html `
29
33
  aria-controls="${x => x.ariaControls}"
30
34
  aria-disabled="${x => x.ariaDisabled}"
31
35
  aria-expanded="${x => x.ariaExpanded}"
36
+ aria-required="${x => x.requiredVisible}"
32
37
  aria-haspopup="listbox"
33
38
  class="selected-value"
34
39
  part="selected-value"
@@ -1 +1 @@
1
- {"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/combobox/template.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type ViewTemplate,\n html,\n ref,\n slotted,\n when\n} from '@microsoft/fast-element';\nimport {\n type FoundationElementTemplate,\n type ComboboxOptions,\n startSlotTemplate,\n endSlotTemplate,\n Listbox\n} from '@microsoft/fast-foundation';\nimport type { Combobox } from '.';\nimport { anchoredRegionTag } from '../anchored-region';\nimport { DropdownPosition } from '../patterns/dropdown/types';\nimport { overflow } from '../utilities/directive/overflow';\nimport { filterNoResultsLabel } from '../label-provider/core/label-tokens';\n\n/* eslint-disable @typescript-eslint/indent */\n// prettier-ignore\nexport const template: FoundationElementTemplate<\nViewTemplate<Combobox>,\nComboboxOptions\n> = (context, definition) => html`\n <template\n aria-disabled=\"${x => x.ariaDisabled}\"\n autocomplete=\"${x => x.autocomplete}\"\n class=\"${x => (x.open ? 'open' : '')} ${x => (x.disabled ? 'disabled' : '')} ${x => x.position}\"\n ?open=\"${x => x.open}\"\n tabindex=\"${x => (!x.disabled ? '0' : null)}\"\n @click=\"${(x, c) => x.clickHandler(c.event as MouseEvent)}\"\n @focusout=\"${(x, c) => x.focusoutHandler(c.event as FocusEvent)}\"\n @keydown=\"${(x, c) => x.keydownHandler(c.event as KeyboardEvent)}\"\n >\n <label part=\"label\" class=\"label\">\n <slot></slot>\n </label>\n <div class=\"control\" part=\"control\" ${ref('controlWrapper')}>\n ${startSlotTemplate(context, definition)}\n <slot name=\"control\">\n <input\n aria-activedescendant=\"${x => (x.open ? x.ariaActiveDescendant : null)}\"\n aria-autocomplete=\"${x => x.ariaAutoComplete}\"\n aria-controls=\"${x => x.ariaControls}\"\n aria-disabled=\"${x => x.ariaDisabled}\"\n aria-expanded=\"${x => x.ariaExpanded}\"\n aria-haspopup=\"listbox\"\n class=\"selected-value\"\n part=\"selected-value\"\n placeholder=\"${x => x.placeholder}\"\n role=\"combobox\"\n type=\"text\"\n ?disabled=\"${x => x.disabled}\"\n :value=\"${x => x.value}\"\n @input=\"${(x, c) => x.inputHandler(c.event as InputEvent)}\"\n @keyup=\"${(x, c) => x.keyupHandler(c.event as KeyboardEvent)}\"\n ${ref('control')}\n ${overflow('hasOverflow')}\n title=${x => (x.hasOverflow && x.value ? x.value : null)}\n />\n <div class=\"indicator\" part=\"indicator\" aria-hidden=\"true\">\n <slot name=\"indicator\">\n ${definition.indicator || ''}\n </slot>\n </div>\n </slot>\n ${endSlotTemplate(context, definition)}\n </div>\n <${anchoredRegionTag}\n ${ref('region')}\n class=\"anchored-region\"\n fixed-placement\n auto-update-mode=\"auto\"\n vertical-default-position=\"${x => (x.positionAttribute === DropdownPosition.above ? 'top' : 'bottom')}\"\n vertical-positioning-mode=\"${x => (!x.positionAttribute ? 'dynamic' : 'locktodefault')}\"\n horizontal-default-position=\"center\"\n horizontal-positioning-mode=\"locktodefault\"\n horizontal-scaling=\"anchor\"\n ?hidden=\"${x => !x.open}\">\n <div\n class=\"\n listbox\n scrollable-region\n ${x => (x.filteredOptions.length === 0 ? 'empty' : '')}\n \"\n id=\"${x => x.listboxId}\"\n part=\"listbox\"\n role=\"listbox\"\n ?disabled=\"${x => x.disabled}\"\n style=\"--ni-private-listbox-available-viewport-height: ${x => x.availableViewportHeight}px;\"\n ${ref('listbox')}\n >\n <slot name=\"option\"\n ${slotted({\n filter: (n: Node) => n instanceof HTMLElement && Listbox.slottedOptionFilter(n),\n flatten: true,\n property: 'slottedOptions',\n })}\n ></slot>\n ${when(x => x.filteredOptions.length === 0, html<Combobox>`\n <span class=\"no-results-label\">\n ${x => filterNoResultsLabel.getValueFor(x)}\n </span>\n `)}\n </div>\n </${anchoredRegionTag}>\n </template>\n`;\n"]}
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/combobox/template.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type ViewTemplate,\n html,\n ref,\n slotted,\n when\n} from '@microsoft/fast-element';\nimport {\n type FoundationElementTemplate,\n type ComboboxOptions,\n startSlotTemplate,\n endSlotTemplate,\n Listbox\n} from '@microsoft/fast-foundation';\nimport type { Combobox } from '.';\nimport { anchoredRegionTag } from '../anchored-region';\nimport { DropdownPosition } from '../patterns/dropdown/types';\nimport { overflow } from '../utilities/directive/overflow';\nimport { filterNoResultsLabel } from '../label-provider/core/label-tokens';\nimport { createRequiredVisibleLabelTemplate } from '../patterns/required-visible/template';\n\nconst labelTemplate = createRequiredVisibleLabelTemplate(html<Combobox>`\n <label part=\"label\" class=\"label\">\n <slot></slot>\n </label>\n`);\n\n/* eslint-disable @typescript-eslint/indent */\n// prettier-ignore\nexport const template: FoundationElementTemplate<\nViewTemplate<Combobox>,\nComboboxOptions\n> = (context, definition) => html`\n <template\n aria-disabled=\"${x => x.ariaDisabled}\"\n autocomplete=\"${x => x.autocomplete}\"\n class=\"${x => (x.open ? 'open' : '')} ${x => (x.disabled ? 'disabled' : '')} ${x => x.position}\"\n ?open=\"${x => x.open}\"\n tabindex=\"${x => (!x.disabled ? '0' : null)}\"\n @click=\"${(x, c) => x.clickHandler(c.event as MouseEvent)}\"\n @focusout=\"${(x, c) => x.focusoutHandler(c.event as FocusEvent)}\"\n @keydown=\"${(x, c) => x.keydownHandler(c.event as KeyboardEvent)}\"\n >\n ${labelTemplate}\n <div class=\"control\" part=\"control\" ${ref('controlWrapper')}>\n ${startSlotTemplate(context, definition)}\n <slot name=\"control\">\n <input\n aria-activedescendant=\"${x => (x.open ? x.ariaActiveDescendant : null)}\"\n aria-autocomplete=\"${x => x.ariaAutoComplete}\"\n aria-controls=\"${x => x.ariaControls}\"\n aria-disabled=\"${x => x.ariaDisabled}\"\n aria-expanded=\"${x => x.ariaExpanded}\"\n aria-required=\"${x => x.requiredVisible}\"\n aria-haspopup=\"listbox\"\n class=\"selected-value\"\n part=\"selected-value\"\n placeholder=\"${x => x.placeholder}\"\n role=\"combobox\"\n type=\"text\"\n ?disabled=\"${x => x.disabled}\"\n :value=\"${x => x.value}\"\n @input=\"${(x, c) => x.inputHandler(c.event as InputEvent)}\"\n @keyup=\"${(x, c) => x.keyupHandler(c.event as KeyboardEvent)}\"\n ${ref('control')}\n ${overflow('hasOverflow')}\n title=${x => (x.hasOverflow && x.value ? x.value : null)}\n />\n <div class=\"indicator\" part=\"indicator\" aria-hidden=\"true\">\n <slot name=\"indicator\">\n ${definition.indicator || ''}\n </slot>\n </div>\n </slot>\n ${endSlotTemplate(context, definition)}\n </div>\n <${anchoredRegionTag}\n ${ref('region')}\n class=\"anchored-region\"\n fixed-placement\n auto-update-mode=\"auto\"\n vertical-default-position=\"${x => (x.positionAttribute === DropdownPosition.above ? 'top' : 'bottom')}\"\n vertical-positioning-mode=\"${x => (!x.positionAttribute ? 'dynamic' : 'locktodefault')}\"\n horizontal-default-position=\"center\"\n horizontal-positioning-mode=\"locktodefault\"\n horizontal-scaling=\"anchor\"\n ?hidden=\"${x => !x.open}\">\n <div\n class=\"\n listbox\n scrollable-region\n ${x => (x.filteredOptions.length === 0 ? 'empty' : '')}\n \"\n id=\"${x => x.listboxId}\"\n part=\"listbox\"\n role=\"listbox\"\n ?disabled=\"${x => x.disabled}\"\n style=\"--ni-private-listbox-available-viewport-height: ${x => x.availableViewportHeight}px;\"\n ${ref('listbox')}\n >\n <slot name=\"option\"\n ${slotted({\n filter: (n: Node) => n instanceof HTMLElement && Listbox.slottedOptionFilter(n),\n flatten: true,\n property: 'slottedOptions',\n })}\n ></slot>\n ${when(x => x.filteredOptions.length === 0, html<Combobox>`\n <span class=\"no-results-label\">\n ${x => filterNoResultsLabel.getValueFor(x)}\n </span>\n `)}\n </div>\n </${anchoredRegionTag}>\n </template>\n`;\n"]}
@@ -13,8 +13,7 @@ export const styles = css `
13
13
  }
14
14
 
15
15
  .icon {
16
- width: 100%;
17
- height: 100%;
16
+ display: contents;
18
17
  }
19
18
 
20
19
  :host([severity='error']) {
@@ -34,6 +33,7 @@ export const styles = css `
34
33
  }
35
34
 
36
35
  .icon svg {
36
+ display: inline-flex;
37
37
  fill: ${iconColor};
38
38
  width: 100%;
39
39
  height: 100%;
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/icon-base/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EACH,QAAQ,EACR,YAAY,EACZ,SAAS,EACT,SAAS,EACT,SAAS,EACT,gBAAgB,EACnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEhE,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;MACnB,OAAO,CAAC,aAAa,CAAC;;;;UAIlB,cAAc;iBACP,QAAQ;kBACP,QAAQ;;;;;;;;;UAShB,SAAS,CAAC,iBAAiB,KAAK,SAAS;;;;UAIzC,SAAS,CAAC,iBAAiB,KAAK,YAAY;;;;UAI5C,SAAS,CAAC,iBAAiB,KAAK,SAAS;;;;UAIzC,SAAS,CAAC,iBAAiB,KAAK,gBAAgB;;;;gBAI1C,SAAS;;;;CAIxB,CAAC","sourcesContent":["import { css } from '@microsoft/fast-element';\nimport { display } from '../utilities/style/display';\nimport {\n iconSize,\n warningColor,\n failColor,\n passColor,\n iconColor,\n informationColor\n} from '../theme-provider/design-tokens';\nimport { userSelectNone } from '../utilities/style/user-select';\n\nexport const styles = css`\n ${display('inline-flex')}\n\n :host {\n align-items: center;\n ${userSelectNone}\n width: ${iconSize};\n height: ${iconSize};\n }\n\n .icon {\n width: 100%;\n height: 100%;\n }\n\n :host([severity='error']) {\n ${iconColor.cssCustomProperty}: ${failColor};\n }\n\n :host([severity='warning']) {\n ${iconColor.cssCustomProperty}: ${warningColor};\n }\n\n :host([severity='success']) {\n ${iconColor.cssCustomProperty}: ${passColor};\n }\n\n :host([severity='information']) {\n ${iconColor.cssCustomProperty}: ${informationColor};\n }\n\n .icon svg {\n fill: ${iconColor};\n width: 100%;\n height: 100%;\n }\n`;\n"]}
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/icon-base/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EACH,QAAQ,EACR,YAAY,EACZ,SAAS,EACT,SAAS,EACT,SAAS,EACT,gBAAgB,EACnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEhE,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;MACnB,OAAO,CAAC,aAAa,CAAC;;;;UAIlB,cAAc;iBACP,QAAQ;kBACP,QAAQ;;;;;;;;UAQhB,SAAS,CAAC,iBAAiB,KAAK,SAAS;;;;UAIzC,SAAS,CAAC,iBAAiB,KAAK,YAAY;;;;UAI5C,SAAS,CAAC,iBAAiB,KAAK,SAAS;;;;UAIzC,SAAS,CAAC,iBAAiB,KAAK,gBAAgB;;;;;gBAK1C,SAAS;;;;CAIxB,CAAC","sourcesContent":["import { css } from '@microsoft/fast-element';\nimport { display } from '../utilities/style/display';\nimport {\n iconSize,\n warningColor,\n failColor,\n passColor,\n iconColor,\n informationColor\n} from '../theme-provider/design-tokens';\nimport { userSelectNone } from '../utilities/style/user-select';\n\nexport const styles = css`\n ${display('inline-flex')}\n\n :host {\n align-items: center;\n ${userSelectNone}\n width: ${iconSize};\n height: ${iconSize};\n }\n\n .icon {\n display: contents;\n }\n\n :host([severity='error']) {\n ${iconColor.cssCustomProperty}: ${failColor};\n }\n\n :host([severity='warning']) {\n ${iconColor.cssCustomProperty}: ${warningColor};\n }\n\n :host([severity='success']) {\n ${iconColor.cssCustomProperty}: ${passColor};\n }\n\n :host([severity='information']) {\n ${iconColor.cssCustomProperty}: ${informationColor};\n }\n\n .icon svg {\n display: inline-flex;\n fill: ${iconColor};\n width: 100%;\n height: 100%;\n }\n`;\n"]}
@@ -0,0 +1 @@
1
+ export declare const styles: import("@microsoft/fast-element").ElementStyles;
@@ -0,0 +1,17 @@
1
+ import { css } from '@microsoft/fast-element';
2
+ import { smallPadding } from '../../theme-provider/design-tokens';
3
+ export const styles = css `
4
+ .annotated-label {
5
+ display: flex;
6
+ flex-direction: row;
7
+ }
8
+
9
+ .required-icon {
10
+ flex: none;
11
+ width: 5px;
12
+ height: 5px;
13
+ margin-top: 3px;
14
+ margin-left: ${smallPadding};
15
+ }
16
+ `;
17
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../src/patterns/required-visible/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAElE,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;;uBAWF,YAAY;;CAElC,CAAC","sourcesContent":["import { css } from '@microsoft/fast-element';\nimport { smallPadding } from '../../theme-provider/design-tokens';\n\nexport const styles = css`\n .annotated-label {\n display: flex;\n flex-direction: row;\n }\n\n .required-icon {\n flex: none;\n width: 5px;\n height: 5px;\n margin-top: 3px;\n margin-left: ${smallPadding};\n }\n`;\n"]}
@@ -0,0 +1,9 @@
1
+ import { ViewTemplate } from '@microsoft/fast-element';
2
+ import type { RequiredVisiblePattern } from './types';
3
+ /**
4
+ * Given the template for a control label, creates a new template that includes
5
+ * an icon next to the label to indicate whether or not the control is required.
6
+ *
7
+ * This function is intended to be used with components leveraging `mixinRequiredVisiblePattern`.
8
+ */
9
+ export declare function createRequiredVisibleLabelTemplate(labelTemplate: ViewTemplate<RequiredVisiblePattern>): ViewTemplate<RequiredVisiblePattern>;
@@ -0,0 +1,20 @@
1
+ import { html, when } from '@microsoft/fast-element';
2
+ import { iconAsteriskTag } from '../../icons/asterisk';
3
+ /**
4
+ * Given the template for a control label, creates a new template that includes
5
+ * an icon next to the label to indicate whether or not the control is required.
6
+ *
7
+ * This function is intended to be used with components leveraging `mixinRequiredVisiblePattern`.
8
+ */
9
+ /* eslint-disable @typescript-eslint/indent */
10
+ export function createRequiredVisibleLabelTemplate(labelTemplate) {
11
+ return html `
12
+ <div class="annotated-label">
13
+ ${labelTemplate}
14
+ ${when(x => x.requiredVisible, html `
15
+ <${iconAsteriskTag} class="required-icon" severity="error"></${iconAsteriskTag}>
16
+ `)}
17
+ </div>
18
+ `;
19
+ }
20
+ //# sourceMappingURL=template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../../../src/patterns/required-visible/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,IAAI,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD;;;;;GAKG;AACH,8CAA8C;AAC9C,MAAM,UAAU,kCAAkC,CAC9C,aAAmD;IAEnD,OAAO,IAAI,CAAA;;cAED,aAAa;cACb,IAAI,CACF,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,EACtB,IAAI,CAAA;mBACD,eAAe,6CAA6C,eAAe;aACjF,CACA;;KAER,CAAC;AACN,CAAC","sourcesContent":["import { ViewTemplate, html, when } from '@microsoft/fast-element';\nimport { iconAsteriskTag } from '../../icons/asterisk';\nimport type { RequiredVisiblePattern } from './types';\n\n/**\n * Given the template for a control label, creates a new template that includes\n * an icon next to the label to indicate whether or not the control is required.\n *\n * This function is intended to be used with components leveraging `mixinRequiredVisiblePattern`.\n */\n/* eslint-disable @typescript-eslint/indent */\nexport function createRequiredVisibleLabelTemplate(\n labelTemplate: ViewTemplate<RequiredVisiblePattern>\n): ViewTemplate<RequiredVisiblePattern> {\n return html`\n <div class=\"annotated-label\">\n ${labelTemplate}\n ${when(\n x => x.requiredVisible,\n html`\n <${iconAsteriskTag} class=\"required-icon\" severity=\"error\"></${iconAsteriskTag}>\n `\n )}\n </div>\n `;\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import type { FoundationElement } from '@microsoft/fast-foundation';
2
+ /**
3
+ * A page object for the elements that use the required-visible mixin.
4
+ */
5
+ export declare class RequiredVisiblePatternPageObject {
6
+ private readonly element;
7
+ constructor(element: FoundationElement);
8
+ isRequiredVisibleIconVisible(): boolean;
9
+ private getRequiredVisibleIcon;
10
+ }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * A page object for the elements that use the required-visible mixin.
3
+ */
4
+ export class RequiredVisiblePatternPageObject {
5
+ constructor(element) {
6
+ this.element = element;
7
+ }
8
+ isRequiredVisibleIconVisible() {
9
+ const icon = this.getRequiredVisibleIcon();
10
+ if (!icon) {
11
+ return false;
12
+ }
13
+ return getComputedStyle(icon).display !== 'none';
14
+ }
15
+ getRequiredVisibleIcon() {
16
+ return this.element.shadowRoot.querySelector('.required-icon');
17
+ }
18
+ }
19
+ //# sourceMappingURL=required-visible-pattern.pageobject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"required-visible-pattern.pageobject.js","sourceRoot":"","sources":["../../../../../src/patterns/required-visible/testing/required-visible-pattern.pageobject.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAO,gCAAgC;IACzC,YAAoC,OAA0B;QAA1B,YAAO,GAAP,OAAO,CAAmB;IAAG,CAAC;IAE3D,4BAA4B;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC3C,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,MAAM,CAAC;IACrD,CAAC;IAEO,sBAAsB;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAW,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;IACpE,CAAC;CACJ","sourcesContent":["import type { FoundationElement } from '@microsoft/fast-foundation';\n\n/**\n * A page object for the elements that use the required-visible mixin.\n */\nexport class RequiredVisiblePatternPageObject {\n public constructor(private readonly element: FoundationElement) {}\n\n public isRequiredVisibleIconVisible(): boolean {\n const icon = this.getRequiredVisibleIcon();\n if (!icon) {\n return false;\n }\n return getComputedStyle(icon).display !== 'none';\n }\n\n private getRequiredVisibleIcon(): HTMLElement | null {\n return this.element.shadowRoot!.querySelector('.required-icon');\n }\n}\n"]}
@@ -0,0 +1,17 @@
1
+ import { FASTElement } from '@microsoft/fast-element';
2
+ export interface RequiredVisiblePattern {
3
+ /**
4
+ * Whether or not to show the required appearance of the control
5
+ */
6
+ requiredVisible: boolean;
7
+ }
8
+ type FASTElementConstructor = abstract new (...args: any[]) => FASTElement;
9
+ export declare function mixinRequiredVisiblePattern<TBase extends FASTElementConstructor>(base: TBase): (abstract new (...args: any[]) => {
10
+ requiredVisible: boolean;
11
+ readonly $fastController: import("@microsoft/fast-element").Controller;
12
+ $emit(type: string, detail?: any, options?: Omit<CustomEventInit<any>, "detail"> | undefined): boolean | void;
13
+ connectedCallback(): void;
14
+ disconnectedCallback(): void;
15
+ attributeChangedCallback(name: string, oldValue: string, newValue: string): void;
16
+ }) & TBase;
17
+ export {};
@@ -0,0 +1,21 @@
1
+ import { attr } from '@microsoft/fast-element';
2
+ // As the returned class is internal to the function, we can't write a signature that uses is directly, so rely on inference
3
+ // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/explicit-function-return-type
4
+ export function mixinRequiredVisiblePattern(base) {
5
+ /**
6
+ * The Mixin that provides the requiredVisible property and required-visible attribute
7
+ * to a component.
8
+ */
9
+ class RequiredVisibleElement extends base {
10
+ constructor() {
11
+ super(...arguments);
12
+ /*
13
+ * Show the required appearance of the control
14
+ */
15
+ this.requiredVisible = false;
16
+ }
17
+ }
18
+ attr({ attribute: 'required-visible', mode: 'boolean' })(RequiredVisibleElement.prototype, 'requiredVisible');
19
+ return RequiredVisibleElement;
20
+ }
21
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/patterns/required-visible/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAe,MAAM,yBAAyB,CAAC;AAY5D,4HAA4H;AAC5H,+HAA+H;AAC/H,MAAM,UAAU,2BAA2B,CAEzC,IAAW;IACT;;;OAGG;IACH,MAAe,sBACX,SAAQ,IAAI;QADhB;;YAGI;;eAEG;YACI,oBAAe,GAAG,KAAK,CAAC;QACnC,CAAC;KAAA;IAED,IAAI,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CACpD,sBAAsB,CAAC,SAAS,EAChC,iBAAiB,CACpB,CAAC;IACF,OAAO,sBAAsB,CAAC;AAClC,CAAC","sourcesContent":["import { attr, FASTElement } from '@microsoft/fast-element';\n\nexport interface RequiredVisiblePattern {\n /**\n * Whether or not to show the required appearance of the control\n */\n requiredVisible: boolean;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype FASTElementConstructor = abstract new (...args: any[]) => FASTElement;\n\n// As the returned class is internal to the function, we can't write a signature that uses is directly, so rely on inference\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/explicit-function-return-type\nexport function mixinRequiredVisiblePattern<\n TBase extends FASTElementConstructor\n>(base: TBase) {\n /**\n * The Mixin that provides the requiredVisible property and required-visible attribute\n * to a component.\n */\n abstract class RequiredVisibleElement\n extends base\n implements RequiredVisiblePattern {\n /*\n * Show the required appearance of the control\n */\n public requiredVisible = false;\n }\n\n attr({ attribute: 'required-visible', mode: 'boolean' })(\n RequiredVisibleElement.prototype,\n 'requiredVisible'\n );\n return RequiredVisibleElement;\n}\n"]}
@@ -15,6 +15,13 @@ declare const RadioGroup_base: (abstract new (...args: any[]) => {
15
15
  connectedCallback(): void;
16
16
  disconnectedCallback(): void;
17
17
  attributeChangedCallback(name: string, oldValue: string, newValue: string): void;
18
+ }) & (abstract new (...args: any[]) => {
19
+ requiredVisible: boolean;
20
+ readonly $fastController: import("@microsoft/fast-element").Controller;
21
+ $emit(type: string, detail?: any, options?: Omit<CustomEventInit<any>, "detail"> | undefined): boolean | void;
22
+ connectedCallback(): void;
23
+ disconnectedCallback(): void;
24
+ attributeChangedCallback(name: string, oldValue: string, newValue: string): void;
18
25
  }) & typeof FoundationRadioGroup;
19
26
  /**
20
27
  * A nimble-styled grouping element for radio buttons
@@ -3,11 +3,12 @@ import { Orientation } from '@microsoft/fast-web-utilities';
3
3
  import { styles } from './styles';
4
4
  import { template } from './template';
5
5
  import { mixinErrorPattern } from '../patterns/error/types';
6
+ import { mixinRequiredVisiblePattern } from '../patterns/required-visible/types';
6
7
  export { Orientation };
7
8
  /**
8
9
  * A nimble-styled grouping element for radio buttons
9
10
  */
10
- export class RadioGroup extends mixinErrorPattern(FoundationRadioGroup) {
11
+ export class RadioGroup extends mixinErrorPattern(mixinRequiredVisiblePattern(FoundationRadioGroup)) {
11
12
  }
12
13
  const nimbleRadioGroup = RadioGroup.compose({
13
14
  baseName: 'radio-group',
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/radio-group/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,UAAU,IAAI,oBAAoB,EAClC,YAAY,EACf,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAQ5D,OAAO,EAAE,WAAW,EAAE,CAAC;AAEvB;;GAEG;AACH,MAAM,OAAO,UAAW,SAAQ,iBAAiB,CAAC,oBAAoB,CAAC;CAAG;AAE1E,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAO,CAAC;IACxC,QAAQ,EAAE,aAAa;IACvB,SAAS,EAAE,oBAAoB;IAC/B,QAAQ;IACR,MAAM;IACN,aAAa,EAAE;QACX,cAAc,EAAE,IAAI;KACvB;CACJ,CAAC,CAAC;AAEH,YAAY,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC;AAC7E,MAAM,CAAC,MAAM,aAAa,GAAG,oBAAoB,CAAC","sourcesContent":["import {\n RadioGroup as FoundationRadioGroup,\n DesignSystem\n} from '@microsoft/fast-foundation';\nimport { Orientation } from '@microsoft/fast-web-utilities';\nimport { styles } from './styles';\nimport { template } from './template';\nimport { mixinErrorPattern } from '../patterns/error/types';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nimble-radio-group': RadioGroup;\n }\n}\n\nexport { Orientation };\n\n/**\n * A nimble-styled grouping element for radio buttons\n */\nexport class RadioGroup extends mixinErrorPattern(FoundationRadioGroup) {}\n\nconst nimbleRadioGroup = RadioGroup.compose({\n baseName: 'radio-group',\n baseClass: FoundationRadioGroup,\n template,\n styles,\n shadowOptions: {\n delegatesFocus: true\n }\n});\n\nDesignSystem.getOrCreate().withPrefix('nimble').register(nimbleRadioGroup());\nexport const radioGroupTag = 'nimble-radio-group';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/radio-group/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,UAAU,IAAI,oBAAoB,EAClC,YAAY,EACf,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AAQjF,OAAO,EAAE,WAAW,EAAE,CAAC;AAEvB;;GAEG;AACH,MAAM,OAAO,UAAW,SAAQ,iBAAiB,CAC7C,2BAA2B,CAAC,oBAAoB,CAAC,CACpD;CAAG;AAEJ,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAO,CAAC;IACxC,QAAQ,EAAE,aAAa;IACvB,SAAS,EAAE,oBAAoB;IAC/B,QAAQ;IACR,MAAM;IACN,aAAa,EAAE;QACX,cAAc,EAAE,IAAI;KACvB;CACJ,CAAC,CAAC;AAEH,YAAY,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC;AAC7E,MAAM,CAAC,MAAM,aAAa,GAAG,oBAAoB,CAAC","sourcesContent":["import {\n RadioGroup as FoundationRadioGroup,\n DesignSystem\n} from '@microsoft/fast-foundation';\nimport { Orientation } from '@microsoft/fast-web-utilities';\nimport { styles } from './styles';\nimport { template } from './template';\nimport { mixinErrorPattern } from '../patterns/error/types';\nimport { mixinRequiredVisiblePattern } from '../patterns/required-visible/types';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nimble-radio-group': RadioGroup;\n }\n}\n\nexport { Orientation };\n\n/**\n * A nimble-styled grouping element for radio buttons\n */\nexport class RadioGroup extends mixinErrorPattern(\n mixinRequiredVisiblePattern(FoundationRadioGroup)\n) {}\n\nconst nimbleRadioGroup = RadioGroup.compose({\n baseName: 'radio-group',\n baseClass: FoundationRadioGroup,\n template,\n styles,\n shadowOptions: {\n delegatesFocus: true\n }\n});\n\nDesignSystem.getOrCreate().withPrefix('nimble').register(nimbleRadioGroup());\nexport const radioGroupTag = 'nimble-radio-group';\n"]}
@@ -2,9 +2,11 @@ import { css } from '@microsoft/fast-element';
2
2
  import { display } from '../utilities/style/display';
3
3
  import { controlLabelDisabledFontColor, controlLabelFont, controlLabelFontColor, controlLabelFontLineHeight, smallPadding, standardPadding } from '../theme-provider/design-tokens';
4
4
  import { styles as errorStyles } from '../patterns/error/styles';
5
+ import { styles as requiredVisibleStyles } from '../patterns/required-visible/styles';
5
6
  export const styles = css `
6
7
  ${display('inline-block')}
7
8
  ${errorStyles}
9
+ ${requiredVisibleStyles}
8
10
 
9
11
  .positioning-region {
10
12
  display: flex;
@@ -22,7 +24,7 @@ export const styles = css `
22
24
 
23
25
  .label-container {
24
26
  display: flex;
25
- height: ${controlLabelFontLineHeight};
27
+ min-height: ${controlLabelFontLineHeight};
26
28
  gap: ${smallPadding};
27
29
  margin-bottom: ${smallPadding};
28
30
  }