@ni/nimble-components 29.0.0 → 29.1.1

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 (164) hide show
  1. package/dist/all-components-bundle.js +267 -198
  2. package/dist/all-components-bundle.js.map +1 -1
  3. package/dist/all-components-bundle.min.js +3032 -2995
  4. package/dist/all-components-bundle.min.js.map +1 -1
  5. package/dist/esm/anchor/styles.js +1 -1
  6. package/dist/esm/anchor/styles.js.map +1 -1
  7. package/dist/esm/anchor-menu-item/styles.js +1 -1
  8. package/dist/esm/anchor-menu-item/styles.js.map +1 -1
  9. package/dist/esm/anchor-tab/styles.js +1 -1
  10. package/dist/esm/anchor-tab/styles.js.map +1 -1
  11. package/dist/esm/anchor-tabs/styles.js +1 -1
  12. package/dist/esm/anchor-tabs/styles.js.map +1 -1
  13. package/dist/esm/anchor-tree-item/styles.js +1 -1
  14. package/dist/esm/anchor-tree-item/styles.js.map +1 -1
  15. package/dist/esm/anchored-region/styles.js +5 -2
  16. package/dist/esm/anchored-region/styles.js.map +1 -1
  17. package/dist/esm/banner/styles.js +1 -1
  18. package/dist/esm/banner/styles.js.map +1 -1
  19. package/dist/esm/breadcrumb/styles.js +1 -1
  20. package/dist/esm/breadcrumb/styles.js.map +1 -1
  21. package/dist/esm/breadcrumb-item/styles.js +1 -1
  22. package/dist/esm/breadcrumb-item/styles.js.map +1 -1
  23. package/dist/esm/card/styles.js +1 -1
  24. package/dist/esm/card/styles.js.map +1 -1
  25. package/dist/esm/card-button/styles.js +1 -1
  26. package/dist/esm/card-button/styles.js.map +1 -1
  27. package/dist/esm/checkbox/styles.js +1 -1
  28. package/dist/esm/checkbox/styles.js.map +1 -1
  29. package/dist/esm/dialog/styles.js +1 -1
  30. package/dist/esm/dialog/styles.js.map +1 -1
  31. package/dist/esm/drawer/styles.js +1 -1
  32. package/dist/esm/drawer/styles.js.map +1 -1
  33. package/dist/esm/icon-base/index.js +1 -2
  34. package/dist/esm/icon-base/index.js.map +1 -1
  35. package/dist/esm/icon-base/styles.js +1 -1
  36. package/dist/esm/icon-base/styles.js.map +1 -1
  37. package/dist/esm/label-provider/base/styles.d.ts +1 -0
  38. package/dist/esm/label-provider/base/styles.js +6 -0
  39. package/dist/esm/label-provider/base/styles.js.map +1 -0
  40. package/dist/esm/label-provider/core/index.js +3 -1
  41. package/dist/esm/label-provider/core/index.js.map +1 -1
  42. package/dist/esm/label-provider/rich-text/index.js +3 -1
  43. package/dist/esm/label-provider/rich-text/index.js.map +1 -1
  44. package/dist/esm/label-provider/table/index.js +3 -1
  45. package/dist/esm/label-provider/table/index.js.map +1 -1
  46. package/dist/esm/list-option/styles.js +1 -1
  47. package/dist/esm/list-option/styles.js.map +1 -1
  48. package/dist/esm/listbox/styles.js +1 -1
  49. package/dist/esm/listbox/styles.js.map +1 -1
  50. package/dist/esm/mapping/base/styles.d.ts +1 -0
  51. package/dist/esm/mapping/base/styles.js +6 -0
  52. package/dist/esm/mapping/base/styles.js.map +1 -0
  53. package/dist/esm/mapping/empty/index.js +3 -1
  54. package/dist/esm/mapping/empty/index.js.map +1 -1
  55. package/dist/esm/mapping/icon/index.js +3 -1
  56. package/dist/esm/mapping/icon/index.js.map +1 -1
  57. package/dist/esm/mapping/spinner/index.js +3 -1
  58. package/dist/esm/mapping/spinner/index.js.map +1 -1
  59. package/dist/esm/mapping/text/index.js +3 -1
  60. package/dist/esm/mapping/text/index.js.map +1 -1
  61. package/dist/esm/mapping/user/index.js +3 -1
  62. package/dist/esm/mapping/user/index.js.map +1 -1
  63. package/dist/esm/menu/styles.js +1 -1
  64. package/dist/esm/menu/styles.js.map +1 -1
  65. package/dist/esm/menu-button/styles.js +1 -1
  66. package/dist/esm/menu-button/styles.js.map +1 -1
  67. package/dist/esm/menu-item/styles.js +1 -1
  68. package/dist/esm/menu-item/styles.js.map +1 -1
  69. package/dist/esm/number-field/styles.js +1 -1
  70. package/dist/esm/number-field/styles.js.map +1 -1
  71. package/dist/esm/patterns/button/styles.js +1 -1
  72. package/dist/esm/patterns/button/styles.js.map +1 -1
  73. package/dist/esm/patterns/dropdown/styles.js +2 -2
  74. package/dist/esm/patterns/dropdown/styles.js.map +1 -1
  75. package/dist/esm/radio/styles.js +1 -1
  76. package/dist/esm/radio/styles.js.map +1 -1
  77. package/dist/esm/radio-group/styles.js +1 -1
  78. package/dist/esm/radio-group/styles.js.map +1 -1
  79. package/dist/esm/rich-text/editor/styles.js +1 -1
  80. package/dist/esm/rich-text/editor/styles.js.map +1 -1
  81. package/dist/esm/rich-text/viewer/styles.js +1 -1
  82. package/dist/esm/rich-text/viewer/styles.js.map +1 -1
  83. package/dist/esm/rich-text-mention/base/styles.d.ts +1 -0
  84. package/dist/esm/rich-text-mention/base/styles.js +6 -0
  85. package/dist/esm/rich-text-mention/base/styles.js.map +1 -0
  86. package/dist/esm/rich-text-mention/users/index.js +3 -1
  87. package/dist/esm/rich-text-mention/users/index.js.map +1 -1
  88. package/dist/esm/rich-text-mention/users/view/styles.js +1 -1
  89. package/dist/esm/rich-text-mention/users/view/styles.js.map +1 -1
  90. package/dist/esm/select/index.d.ts +4 -6
  91. package/dist/esm/select/index.js +49 -31
  92. package/dist/esm/select/index.js.map +1 -1
  93. package/dist/esm/select/styles.js +8 -1
  94. package/dist/esm/select/styles.js.map +1 -1
  95. package/dist/esm/select/template.js +13 -1
  96. package/dist/esm/select/template.js.map +1 -1
  97. package/dist/esm/select/testing/select.pageobject.d.ts +3 -1
  98. package/dist/esm/select/testing/select.pageobject.js +17 -9
  99. package/dist/esm/select/testing/select.pageobject.js.map +1 -1
  100. package/dist/esm/spinner/styles.js +1 -1
  101. package/dist/esm/spinner/styles.js.map +1 -1
  102. package/dist/esm/switch/styles.js +1 -1
  103. package/dist/esm/switch/styles.js.map +1 -1
  104. package/dist/esm/tab/styles.js +1 -1
  105. package/dist/esm/tab/styles.js.map +1 -1
  106. package/dist/esm/tab-panel/styles.js +1 -1
  107. package/dist/esm/tab-panel/styles.js.map +1 -1
  108. package/dist/esm/table/components/cell/styles.js +1 -3
  109. package/dist/esm/table/components/cell/styles.js.map +1 -1
  110. package/dist/esm/table/components/group-row/styles.js +1 -2
  111. package/dist/esm/table/components/group-row/styles.js.map +1 -1
  112. package/dist/esm/table/components/header/styles.js +1 -1
  113. package/dist/esm/table/components/header/styles.js.map +1 -1
  114. package/dist/esm/table/components/row/styles.js +2 -2
  115. package/dist/esm/table/components/row/styles.js.map +1 -1
  116. package/dist/esm/table/styles.js +1 -1
  117. package/dist/esm/table/styles.js.map +1 -1
  118. package/dist/esm/table-column/anchor/cell-view/styles.js +4 -0
  119. package/dist/esm/table-column/anchor/cell-view/styles.js.map +1 -1
  120. package/dist/esm/table-column/base/styles.js +2 -3
  121. package/dist/esm/table-column/base/styles.js.map +1 -1
  122. package/dist/esm/table-column/mapping/cell-view/styles.js +1 -1
  123. package/dist/esm/table-column/mapping/cell-view/styles.js.map +1 -1
  124. package/dist/esm/table-column/mapping/group-header-view/styles.js +1 -1
  125. package/dist/esm/table-column/mapping/group-header-view/styles.js.map +1 -1
  126. package/dist/esm/table-column/text-base/cell-view/styles.js +7 -0
  127. package/dist/esm/table-column/text-base/cell-view/styles.js.map +1 -1
  128. package/dist/esm/table-column/text-base/group-header-view/styles.js +3 -0
  129. package/dist/esm/table-column/text-base/group-header-view/styles.js.map +1 -1
  130. package/dist/esm/tabs/styles.js +1 -1
  131. package/dist/esm/tabs/styles.js.map +1 -1
  132. package/dist/esm/tabs-toolbar/styles.js +1 -1
  133. package/dist/esm/tabs-toolbar/styles.js.map +1 -1
  134. package/dist/esm/text-area/styles.js +1 -1
  135. package/dist/esm/text-area/styles.js.map +1 -1
  136. package/dist/esm/text-field/styles.js +1 -1
  137. package/dist/esm/text-field/styles.js.map +1 -1
  138. package/dist/esm/theme-provider/styles.js +2 -3
  139. package/dist/esm/theme-provider/styles.js.map +1 -1
  140. package/dist/esm/toolbar/styles.js +3 -0
  141. package/dist/esm/toolbar/styles.js.map +1 -1
  142. package/dist/esm/tooltip/styles.js +1 -1
  143. package/dist/esm/tooltip/styles.js.map +1 -1
  144. package/dist/esm/tree-item/styles.js +1 -1
  145. package/dist/esm/tree-item/styles.js.map +1 -1
  146. package/dist/esm/tree-view/styles.js +1 -1
  147. package/dist/esm/tree-view/styles.js.map +1 -1
  148. package/dist/esm/unit/base/styles.d.ts +1 -0
  149. package/dist/esm/unit/base/styles.js +6 -0
  150. package/dist/esm/unit/base/styles.js.map +1 -0
  151. package/dist/esm/unit/byte/index.js +3 -1
  152. package/dist/esm/unit/byte/index.js.map +1 -1
  153. package/dist/esm/unit/celsius/index.js +3 -1
  154. package/dist/esm/unit/celsius/index.js.map +1 -1
  155. package/dist/esm/unit/fahrenheit/index.js +3 -1
  156. package/dist/esm/unit/fahrenheit/index.js.map +1 -1
  157. package/dist/esm/unit/volt/index.js +3 -1
  158. package/dist/esm/unit/volt/index.js.map +1 -1
  159. package/dist/esm/utilities/style/display.d.ts +6 -0
  160. package/dist/esm/utilities/style/display.js +9 -0
  161. package/dist/esm/utilities/style/display.js.map +1 -0
  162. package/dist/esm/wafer-map/styles.js +3 -1
  163. package/dist/esm/wafer-map/styles.js.map +1 -1
  164. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/select/index.ts"],"names":[],"mappings":"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","sourcesContent":["// Based on: https://github.com/microsoft/fast/blob/%40microsoft/fast-foundation_v2.49.5/packages/web-components/fast-foundation/src/select/select.ts\nimport {\n attr,\n html,\n observable,\n Observable,\n volatile\n} from '@microsoft/fast-element';\nimport {\n AnchoredRegion,\n DesignSystem,\n Select as FoundationSelect,\n ListboxOption,\n SelectOptions,\n SelectPosition,\n applyMixins,\n StartEnd,\n DelegatesARIASelect\n} from '@microsoft/fast-foundation';\nimport {\n findLastIndex,\n keyArrowDown,\n keyArrowUp,\n keyEnd,\n keyEnter,\n keyEscape,\n keyHome,\n keySpace,\n uniqueId\n} from '@microsoft/fast-web-utilities';\nimport { arrowExpanderDown16X16 } from '@ni/nimble-tokens/dist/icons/js';\nimport { styles } from './styles';\nimport {\n DropdownAppearance,\n ListOptionOwner\n} from '../patterns/dropdown/types';\nimport { errorTextTemplate } from '../patterns/error/template';\nimport type { ErrorPattern } from '../patterns/error/types';\nimport { iconExclamationMarkTag } from '../icons/exclamation-mark';\nimport { template } from './template';\nimport { ListOption } from '../list-option';\nimport { FilterMode } from './types';\nimport { diacriticInsensitiveStringNormalizer } from '../utilities/models/string-normalizers';\nimport { FormAssociatedSelect } from './models/select-form-associated';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nimble-select': Select;\n }\n}\n\n// Used in overrides of base class methods\n// eslint-disable-next-line @typescript-eslint/no-invalid-void-type\ntype BooleanOrVoid = boolean | void;\n\nconst isNimbleListOption = (el: Element | undefined): el is ListOption => {\n return el instanceof ListOption;\n};\n\nconst isOptionSelectable = (el: ListOption): boolean => {\n return !el.visuallyHidden && !el.disabled && !el.hidden;\n};\n\n/**\n * A nimble-styled HTML select.\n */\nexport class Select\n extends FormAssociatedSelect\n implements ErrorPattern, ListOptionOwner {\n @attr\n public appearance: DropdownAppearance = DropdownAppearance.underline;\n\n /**\n * Reflects the placement for the listbox when the select is open.\n *\n * @public\n */\n @attr({ attribute: 'position' })\n public positionAttribute?: SelectPosition;\n\n /**\n * A message explaining why the value is invalid.\n *\n * @public\n * @remarks\n * HTML Attribute: error-text\n */\n @attr({ attribute: 'error-text' })\n public errorText: string | undefined;\n\n @attr({ attribute: 'error-visible', mode: 'boolean' })\n public errorVisible = false;\n\n @attr({ attribute: 'filter-mode' })\n public filterMode: FilterMode = FilterMode.none;\n\n /**\n * @internal\n */\n @observable\n public displayPlaceholder = false;\n\n /**\n * @internal\n */\n @attr({ attribute: 'open', mode: 'boolean' })\n public open = false;\n\n /**\n * Holds the current state for the calculated position of the listbox.\n *\n * @public\n */\n @observable\n public position?: SelectPosition;\n\n /**\n * The ref to the internal `.control` element.\n *\n * @internal\n */\n @observable\n public control!: HTMLElement;\n\n /**\n * Reference to the internal listbox element.\n *\n * @internal\n */\n public listbox!: HTMLDivElement;\n\n /**\n * The unique id for the internal listbox element.\n *\n * @internal\n */\n public listboxId: string = uniqueId('listbox-');\n\n /**\n * @internal\n */\n @observable\n public scrollableRegion!: HTMLElement;\n\n /**\n * @internal\n */\n @observable\n public filterInput?: HTMLInputElement;\n\n /**\n * @internal\n */\n @observable\n public anchoredRegion!: AnchoredRegion;\n\n /** @internal */\n @observable\n public hasOverflow = false;\n\n /**\n * @internal\n */\n @observable\n public filteredOptions: ListboxOption[] = [];\n\n /**\n * @internal\n */\n @observable\n public filter = '';\n\n /**\n * @internal\n */\n @observable\n public committedSelectedOption?: ListboxOption;\n\n /**\n * The max height for the listbox when opened.\n *\n * @internal\n */\n @observable\n public maxHeight = 0;\n\n /**\n * The component is collapsible when in single-selection mode with no size attribute.\n *\n * @internal\n */\n @volatile\n public get collapsible(): boolean {\n return !(this.multiple || typeof this.size === 'number');\n }\n\n private _value = '';\n private forcedPosition = false;\n private openActiveIndex?: number;\n\n /**\n * @internal\n */\n public override connectedCallback(): void {\n super.connectedCallback();\n this.forcedPosition = !!this.positionAttribute;\n if (this.open) {\n this.initializeOpenState();\n }\n }\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 newValue = next;\n\n if (this.options?.length) {\n const newValueIndex = this.options.findIndex(\n el => el.value === newValue\n );\n const prevSelectedValue = this.options[this.selectedIndex]?.value ?? null;\n const nextSelectedValue = this.options[newValueIndex]?.value ?? null;\n\n if (\n newValueIndex === -1\n || prevSelectedValue !== nextSelectedValue\n ) {\n newValue = '';\n this.selectedIndex = newValueIndex;\n }\n\n newValue = this.firstSelectedOption?.value ?? newValue;\n }\n\n if (prev !== newValue && !(this.open && this.selectedIndex < 0)) {\n this._value = newValue;\n super.valueChanged(prev, newValue);\n if (!this.open) {\n this.committedSelectedOption = this.options.find(\n o => o.value === newValue\n );\n }\n Observable.notify(this, 'value');\n if (this.collapsible) {\n Observable.notify(this, 'displayValue');\n }\n }\n }\n\n /**\n * @internal\n */\n @volatile\n public get displayValue(): string {\n Observable.track(this, 'displayValue');\n return this.committedSelectedOption?.text ?? '';\n }\n\n /**\n * @internal\n */\n public anchoredRegionChanged(\n _prev: AnchoredRegion | undefined,\n _next: AnchoredRegion | undefined\n ): void {\n if (this.anchoredRegion && this.control) {\n this.anchoredRegion.anchorElement = this.control;\n }\n }\n\n /**\n * @internal\n */\n public controlChanged(\n _prev: HTMLElement | undefined,\n _next: HTMLElement | undefined\n ): void {\n if (this.anchoredRegion && this.control) {\n this.anchoredRegion.anchorElement = this.control;\n }\n }\n\n /**\n * @internal\n */\n public override slottedOptionsChanged(\n prev: Element[],\n next: Element[]\n ): void {\n const value = this.value;\n this.options.forEach(o => {\n const notifier = Observable.getNotifier(o);\n notifier.unsubscribe(this, 'value');\n notifier.unsubscribe(this, 'hidden');\n notifier.unsubscribe(this, 'disabled');\n });\n\n super.slottedOptionsChanged(prev, next);\n\n this.options.forEach(o => {\n const notifier = Observable.getNotifier(o);\n notifier.subscribe(this, 'value');\n notifier.subscribe(this, 'hidden');\n notifier.subscribe(this, 'disabled');\n });\n this.setProxyOptions();\n this.updateValue();\n // We need to force an update to the filteredOptions observable\n // (by calling 'filterOptions()) so that the template correctly updates.\n this.filterOptions();\n if (value) {\n this.value = value;\n }\n this.committedSelectedOption = this.options[this.selectedIndex];\n }\n\n /**\n * @internal\n */\n public override clickHandler(e: MouseEvent): BooleanOrVoid {\n // do nothing if the select is disabled\n if (this.disabled) {\n return;\n }\n\n let optionClicked = false;\n if (this.open) {\n const captured = (e.target as HTMLElement).closest<ListOption>(\n 'option,[role=option]'\n );\n optionClicked = captured !== null;\n\n if (captured?.disabled) {\n return;\n }\n }\n\n const previousSelectedIndex = this.selectedIndex;\n super.clickHandler(e);\n\n this.open = this.collapsible && !this.open;\n if (\n !this.open\n && this.selectedIndex !== previousSelectedIndex\n && optionClicked\n ) {\n this.updateValue(true);\n }\n }\n\n /**\n * Updates the value when an option's value changes.\n *\n * @param source - the source object\n * @param propertyName - the property to evaluate\n *\n * @internal\n * @override\n */\n public override handleChange(source: unknown, propertyName: string): void {\n // don't call super.handleChange so hidden options can be selected programmatically\n const sourceElement = source as Element;\n switch (propertyName) {\n case 'value': {\n this.updateValue();\n break;\n }\n case 'selected': {\n if (isNimbleListOption(sourceElement)) {\n this.selectedIndex = this.options.indexOf(sourceElement);\n }\n this.setSelectedOptions();\n this.updateDisplayValue();\n break;\n }\n case 'hidden': {\n if (isNimbleListOption(sourceElement)) {\n sourceElement.visuallyHidden = sourceElement.hidden;\n }\n this.updateDisplayValue();\n break;\n }\n case 'disabled': {\n this.updateDisplayValue();\n break;\n }\n default:\n break;\n }\n }\n\n /**\n * Prevents focus when size is set and a scrollbar is clicked.\n *\n * @param e - the mouse event object\n *\n * @override\n * @internal\n */\n public override mousedownHandler(e: MouseEvent): BooleanOrVoid {\n if (e.offsetX >= 0 && e.offsetX <= this.listbox?.scrollWidth) {\n return super.mousedownHandler(e);\n }\n\n return this.collapsible;\n }\n\n /**\n * @internal\n */\n public regionLoadedHandler(): void {\n this.focusAndScrollOptionIntoView();\n }\n\n /**\n * Sets the multiple property on the proxy element.\n *\n * @param prev - the previous multiple value\n * @param next - the current multiple value\n */\n public override multipleChanged(\n prev: boolean | undefined,\n next: boolean\n ): void {\n super.multipleChanged(prev, next);\n\n if (this.proxy) {\n this.proxy.multiple = next;\n }\n }\n\n /**\n * @internal\n */\n public inputClickHandler(e: MouseEvent): void {\n e.stopPropagation(); // clicking in filter input shouldn't close dropdown\n }\n\n /**\n * @internal\n */\n public changeValueHandler(): void {\n this.committedSelectedOption = this.options.find(\n option => option.selected\n );\n }\n\n /**\n * @internal\n */\n public updateDisplayValue(): void {\n if (\n this.committedSelectedOption?.disabled\n && this.committedSelectedOption?.hidden\n && this.committedSelectedOption?.selected\n ) {\n this.displayPlaceholder = true;\n } else {\n this.displayPlaceholder = false;\n }\n\n if (this.collapsible) {\n Observable.notify(this, 'displayValue');\n }\n }\n\n /**\n * Handle content changes on the control input.\n *\n * @param e - the input event\n * @internal\n */\n public inputHandler(e: InputEvent): boolean {\n this.filter = this.filterInput?.value ?? '';\n this.filterOptions();\n\n const enabledOptions = this.filteredOptions.filter(o => !o.disabled);\n let activeOptionIndex = this.filter !== ''\n ? this.openActiveIndex ?? this.selectedIndex\n : this.selectedIndex;\n\n if (\n enabledOptions.length > 0\n && !enabledOptions.find(o => o === this.options[activeOptionIndex])\n ) {\n activeOptionIndex = this.options.indexOf(enabledOptions[0]!);\n } else if (enabledOptions.length === 0) {\n activeOptionIndex = -1;\n }\n this.setActiveOption(activeOptionIndex);\n\n if (e.inputType.includes('deleteContent') || !this.filter.length) {\n return true;\n }\n\n e.stopPropagation();\n return true;\n }\n\n /**\n * @internal\n */\n public override focusoutHandler(e: FocusEvent): BooleanOrVoid {\n super.focusoutHandler(e);\n if (!this.open) {\n return true;\n }\n\n this.open = false;\n const focusTarget = e.relatedTarget as HTMLElement;\n if (this.isSameNode(focusTarget)) {\n this.focus();\n return true;\n }\n\n return true;\n }\n\n /**\n * @internal\n */\n public override keydownHandler(e: KeyboardEvent): BooleanOrVoid {\n const initialSelectedIndex = this.selectedIndex;\n super.keydownHandler(e);\n const key = e.key;\n if (e.ctrlKey || e.shiftKey) {\n return true;\n }\n\n let currentActiveIndex = this.openActiveIndex ?? this.selectedIndex;\n switch (key) {\n case keySpace: {\n // when dropdown is open allow user to enter a space for filter text\n if (this.open && this.filterMode !== FilterMode.none) {\n break;\n }\n\n e.preventDefault();\n if (this.collapsible && this.typeAheadExpired) {\n this.open = !this.open;\n }\n if (!this.open) {\n this.focus();\n }\n break;\n }\n case keyHome:\n case keyEnd: {\n e.preventDefault();\n break;\n }\n case keyEnter: {\n e.preventDefault();\n if (\n this.filteredOptions.length === 0\n || this.filteredOptions.every(o => o.disabled)\n ) {\n return false;\n }\n this.open = !this.open;\n if (!this.open) {\n this.focus();\n }\n break;\n }\n case keyEscape: {\n if (!this.open) {\n break;\n }\n\n if (this.collapsible && this.open) {\n e.preventDefault();\n this.open = false;\n }\n\n currentActiveIndex = this.selectedIndex;\n this.focus();\n break;\n }\n\n default: {\n break;\n }\n }\n\n if (!this.open && this.selectedIndex !== currentActiveIndex) {\n this.selectedIndex = currentActiveIndex;\n }\n\n if (!this.open && initialSelectedIndex !== this.selectedIndex) {\n this.updateValue(true);\n }\n\n return !(key === keyArrowDown || key === keyArrowUp);\n }\n\n /**\n * Updates the proxy value when the selected index changes.\n *\n * @param prev - the previous selected index\n * @param next - the next selected index\n *\n * @internal\n */\n public override selectedIndexChanged(\n _: number | undefined,\n __: number\n ): void {\n // Don't call super.selectedIndexChanged as this will disallow disabled options\n // from being valid initial selected values. Our setDefaultSelectedOption\n // implementation handles skipping non-selected disabled options for the initial\n // selected value.\n this.setSelectedOptions();\n if (this.open) {\n this.setActiveOption(this.selectedIndex);\n }\n this.updateValue();\n }\n\n /**\n * @internal\n * Fork of Listbox implementation, so that the selectedIndex is not changed while the dropdown\n * is open.\n */\n public override typeaheadBufferChanged(_: string, __: string): void {\n if (this.$fastController.isConnected) {\n const typeaheadMatches = this.getTypeaheadMatches();\n\n if (typeaheadMatches.length) {\n const activeOptionIndex = this.options.indexOf(\n typeaheadMatches[0] as ListOption\n );\n if (!(this.open && this.filterMode !== FilterMode.none)) {\n this.setActiveOption(activeOptionIndex);\n }\n }\n\n this.typeaheadExpired = false;\n }\n }\n\n /**\n * Synchronize the `aria-disabled` property when the `disabled` property changes.\n *\n * @param prev - The previous disabled value\n * @param next - The next disabled value\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 * Reset the element to its first selectable option when its parent form is reset.\n *\n * @internal\n */\n public override formResetCallback(): void {\n this.setProxyOptions();\n // Call the base class's implementation setDefaultSelectedOption instead of the select's\n // override, in order to reset the selectedIndex without using the value property.\n super.setDefaultSelectedOption();\n if (this.selectedIndex === -1) {\n this.selectedIndex = 0;\n }\n }\n\n /**\n * @internal\n */\n public override selectNextOption(): void {\n // don't call super.selectNextOption as that relies on side-effecty\n // behavior to not select disabled option (which no longer works)\n const startIndex = this.openActiveIndex ?? this.selectedIndex;\n for (let i = startIndex + 1; i < this.options.length; i++) {\n const listOption = this.options[i]!;\n if (\n isNimbleListOption(listOption)\n && isOptionSelectable(listOption)\n ) {\n this.setActiveOption(i);\n break;\n }\n }\n }\n\n /**\n * @internal\n */\n public override selectPreviousOption(): void {\n // don't call super.selectPreviousOption as that relies on side-effecty\n // behavior to not select disabled option (which no longer works)\n const startIndex = this.openActiveIndex ?? this.selectedIndex;\n for (let i = startIndex - 1; i >= 0; i--) {\n const listOption = this.options[i]!;\n if (\n isNimbleListOption(listOption)\n && isOptionSelectable(listOption)\n ) {\n this.setActiveOption(i);\n break;\n }\n }\n }\n\n /**\n * @internal\n */\n public override selectFirstOption(): void {\n const newActiveOptionIndex = this.options.findIndex(\n o => isNimbleListOption(o) && isOptionSelectable(o)\n );\n this.setActiveOption(newActiveOptionIndex);\n }\n\n /**\n * @internal\n */\n public override selectLastOption(): void {\n const newActiveOptionIndex = findLastIndex(\n this.options,\n o => isNimbleListOption(o) && isOptionSelectable(o)\n );\n this.setActiveOption(newActiveOptionIndex);\n }\n\n /**\n * @internal\n */\n public registerOption(option: ListOption): void {\n if (this.options.includes(option)) {\n return;\n }\n\n // Adding an option to the end, ultimately, isn't the correct\n // thing to do, as this will mean the option's index in the options,\n // at least temporarily, does not match the DOM order. However, it\n // is expected that a successive run of `slottedOptionsChanged` will\n // correct this order issue. See 'https://github.com/ni/nimble/issues/1915'\n // for more info.\n this.options.push(option);\n }\n\n // Prevents parent classes from resetting selectedIndex to a positive\n // value while filtering, which can result in a disabled option being\n // selected.\n protected override setSelectedOptions(): void {\n if (this.open && this.selectedIndex === -1) {\n return;\n }\n super.setSelectedOptions();\n }\n\n protected override focusAndScrollOptionIntoView(): void {\n if (this.open) {\n super.focusAndScrollOptionIntoView();\n window.requestAnimationFrame(() => {\n this.filterInput?.focus();\n });\n }\n }\n\n protected override getTypeaheadMatches(): ListboxOption[] {\n const matches = super.getTypeaheadMatches();\n // Don't allow placeholder to be matched\n return matches.filter(o => !o.hidden && !o.disabled);\n }\n\n protected positionChanged(\n _: SelectPosition | undefined,\n next: SelectPosition | undefined\n ): void {\n this.positionAttribute = next;\n this.setPositioning();\n }\n\n /**\n * Updates the proxy's size property when the size attribute changes.\n *\n * @param prev - the previous size\n * @param next - the current size\n *\n * @override\n * @internal\n */\n protected override sizeChanged(\n prev: number | undefined,\n next: number\n ): void {\n super.sizeChanged(prev, next);\n\n if (this.proxy) {\n this.proxy.size = next;\n }\n }\n\n protected openChanged(): void {\n if (!this.collapsible) {\n return;\n }\n\n if (this.open) {\n this.initializeOpenState();\n return;\n }\n\n const activeOption = this.options[this.openActiveIndex ?? this.selectedIndex];\n if (isNimbleListOption(activeOption)) {\n activeOption.activeOption = false;\n }\n this.openActiveIndex = undefined;\n this.filter = '';\n if (this.filterInput) {\n this.filterInput.value = '';\n }\n\n this.ariaControls = '';\n this.ariaExpanded = 'false';\n }\n\n /**\n * Updates the selectedness of each option when the list of selected options changes.\n *\n * @param prev - the previous list of selected options\n * @param next - the current list of selected options\n *\n * @override\n * @internal\n */\n protected override selectedOptionsChanged(\n _prev: ListboxOption[] | undefined,\n next: ListboxOption[]\n ): void {\n // don't call super.selectedOptionsChanged so we don't filter out hidden elements\n // when updating 'selected' state (copied relevant super implementation)\n this.options?.forEach((o, i) => {\n const notifier = Observable.getNotifier(o);\n notifier.unsubscribe(this, 'selected');\n o.selected = next.includes(o);\n notifier.subscribe(this, 'selected');\n const proxyOption = this.proxy?.options.item(i);\n if (proxyOption) {\n proxyOption.selected = o.selected;\n }\n });\n }\n\n /**\n * Sets the selected index to match the first option with the selected attribute, or\n * the first selectable option.\n *\n * @override\n * @internal\n */\n protected override setDefaultSelectedOption(): void {\n const options: ListboxOption[] = this.options\n ?? Array.from(this.children).filter(o => isNimbleListOption(o));\n\n const optionIsSelected = (option: ListboxOption): boolean => {\n return option.hasAttribute('selected') || option.selected;\n };\n let selectedIndex = -1;\n let firstValidOptionIndex = -1;\n for (let i = 0; i < options?.length; i++) {\n const option = options[i];\n if (optionIsSelected(option!) || option?.value === this.value) {\n selectedIndex = i;\n }\n if (\n firstValidOptionIndex === -1\n && isOptionSelectable(option! as ListOption)\n ) {\n firstValidOptionIndex = i;\n }\n }\n\n if (selectedIndex !== -1) {\n this.selectedIndex = selectedIndex;\n } else if (firstValidOptionIndex !== -1) {\n this.selectedIndex = firstValidOptionIndex;\n } else {\n this.selectedIndex = 0;\n }\n this.committedSelectedOption = options[this.selectedIndex];\n }\n\n private setActiveOption(newActiveIndex: number): void {\n const activeOption = this.options[newActiveIndex];\n if (this.open) {\n if (isNimbleListOption(activeOption)) {\n activeOption.activeOption = true;\n }\n\n const previousActiveIndex = this.openActiveIndex ?? this.selectedIndex;\n const previousActiveOption = this.options[previousActiveIndex];\n if (\n previousActiveIndex !== newActiveIndex\n && isNimbleListOption(previousActiveOption)\n ) {\n previousActiveOption.activeOption = false;\n }\n\n this.openActiveIndex = newActiveIndex;\n this.focusAndScrollActiveOptionIntoView();\n } else {\n this.selectedIndex = newActiveIndex;\n }\n\n this.ariaActiveDescendant = activeOption?.id ?? '';\n }\n\n private focusAndScrollActiveOptionIntoView(): void {\n const optionToFocus = this.options[this.openActiveIndex ?? this.selectedIndex];\n // Copied from FAST: To ensure that the browser handles both `focus()` and\n // `scrollIntoView()`, the timing here needs to guarantee that they happen on\n // different frames. Since this function is typically called from the `openChanged`\n // observer, `DOM.queueUpdate` causes the calls to be grouped into the same frame.\n // To prevent this, `requestAnimationFrame` is used instead of `DOM.queueUpdate`.\n if (optionToFocus !== undefined && this.contains(optionToFocus)) {\n optionToFocus.focus();\n requestAnimationFrame(() => {\n optionToFocus.scrollIntoView({ block: 'nearest' });\n });\n }\n }\n\n private committedSelectedOptionChanged(): void {\n this.updateDisplayValue();\n }\n\n private setPositioning(): void {\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.maxHeight = this.position === SelectPosition.above\n ? Math.trunc(currentBox.top)\n : Math.trunc(availableBottom);\n this.updateListboxMaxHeightCssVariable();\n }\n\n /**\n * Filter available options by text value.\n *\n * @public\n */\n private filterOptions(): void {\n const filter = this.filter.toLowerCase();\n\n if (filter) {\n this.filteredOptions = this.options.filter(option => {\n const normalizedFilter = diacriticInsensitiveStringNormalizer(filter);\n return (\n !option.hidden\n && diacriticInsensitiveStringNormalizer(option.text).includes(\n normalizedFilter\n )\n );\n });\n } else {\n this.filteredOptions = this.options.filter(\n option => !option.hidden\n );\n }\n\n this.options.forEach(o => {\n if (isNimbleListOption(o)) {\n if (!this.filteredOptions.includes(o)) {\n o.visuallyHidden = true;\n } else {\n o.visuallyHidden = false;\n }\n }\n });\n }\n\n /**\n * Sets the value and display value to match the first selected option.\n *\n * @param shouldEmit - if true, the input and change events will be emitted\n *\n * @internal\n */\n private updateValue(shouldEmit?: boolean): void {\n if (this.$fastController.isConnected) {\n this.value = this.firstSelectedOption?.value ?? '';\n }\n\n if (shouldEmit) {\n this.$emit('input');\n this.$emit('change', this, {\n bubbles: true,\n composed: undefined\n });\n }\n }\n\n /**\n * Resets and fills the proxy to match the component's options.\n *\n * @internal\n */\n private setProxyOptions(): void {\n if (this.proxy instanceof HTMLSelectElement && this.options) {\n this.proxy.options.length = 0;\n this.options.forEach(option => {\n const proxyOption = option.proxy\n || (option instanceof HTMLOptionElement\n ? option.cloneNode()\n : null);\n\n if (proxyOption) {\n this.proxy.options.add(proxyOption);\n }\n });\n }\n }\n\n private filterChanged(): void {\n this.filterOptions();\n }\n\n private maxHeightChanged(): void {\n this.updateListboxMaxHeightCssVariable();\n }\n\n private initializeOpenState(): void {\n this.committedSelectedOption = this.options[this.selectedIndex];\n this.setActiveOption(this.selectedIndex);\n this.ariaControls = this.listboxId;\n this.ariaExpanded = 'true';\n\n this.setPositioning();\n this.focusAndScrollOptionIntoView();\n }\n\n private updateListboxMaxHeightCssVariable(): void {\n if (this.listbox) {\n this.listbox.style.setProperty(\n '--ni-private-select-max-height',\n `${this.maxHeight}px`\n );\n }\n }\n}\n\nconst nimbleSelect = Select.compose<SelectOptions>({\n baseName: 'select',\n baseClass: FoundationSelect,\n template,\n styles,\n indicator: arrowExpanderDown16X16.data,\n end: html<Select>`\n <${iconExclamationMarkTag}\n severity=\"error\"\n class=\"error-icon\"\n ></${iconExclamationMarkTag}>\n ${errorTextTemplate}\n `\n});\n\napplyMixins(Select, StartEnd, DelegatesARIASelect);\nDesignSystem.getOrCreate().withPrefix('nimble').register(nimbleSelect());\nexport const selectTag = 'nimble-select';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/select/index.ts"],"names":[],"mappings":"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","sourcesContent":["// Based on: https://github.com/microsoft/fast/blob/%40microsoft/fast-foundation_v2.49.5/packages/web-components/fast-foundation/src/select/select.ts\nimport {\n attr,\n html,\n observable,\n Observable,\n volatile\n} from '@microsoft/fast-element';\nimport {\n AnchoredRegion,\n DesignSystem,\n Select as FoundationSelect,\n ListboxOption,\n SelectOptions,\n SelectPosition,\n applyMixins,\n StartEnd,\n DelegatesARIASelect\n} from '@microsoft/fast-foundation';\nimport {\n findLastIndex,\n keyArrowDown,\n keyArrowUp,\n keyEnd,\n keyEnter,\n keyEscape,\n keyHome,\n keySpace,\n uniqueId\n} from '@microsoft/fast-web-utilities';\nimport { arrowExpanderDown16X16 } from '@ni/nimble-tokens/dist/icons/js';\nimport { styles } from './styles';\nimport {\n DropdownAppearance,\n ListOptionOwner\n} from '../patterns/dropdown/types';\nimport { errorTextTemplate } from '../patterns/error/template';\nimport type { ErrorPattern } from '../patterns/error/types';\nimport { iconExclamationMarkTag } from '../icons/exclamation-mark';\nimport { template } from './template';\nimport { ListOption } from '../list-option';\nimport { FilterMode } from './types';\nimport { diacriticInsensitiveStringNormalizer } from '../utilities/models/string-normalizers';\nimport { FormAssociatedSelect } from './models/select-form-associated';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nimble-select': Select;\n }\n}\n\n// Used in overrides of base class methods\n// eslint-disable-next-line @typescript-eslint/no-invalid-void-type\ntype BooleanOrVoid = boolean | void;\n\nconst isNimbleListOption = (el: Element | undefined): el is ListOption => {\n return el instanceof ListOption;\n};\n\nconst isOptionSelectable = (el: ListOption): boolean => {\n return !el.visuallyHidden && !el.disabled && !el.hidden;\n};\n\nconst isOptionPlaceholder = (el: ListboxOption): boolean => {\n return el.disabled && el.hidden;\n};\n\n/**\n * A nimble-styled HTML select.\n */\nexport class Select\n extends FormAssociatedSelect\n implements ErrorPattern, ListOptionOwner {\n @attr\n public appearance: DropdownAppearance = DropdownAppearance.underline;\n\n /**\n * Reflects the placement for the listbox when the select is open.\n *\n * @public\n */\n @attr({ attribute: 'position' })\n public positionAttribute?: SelectPosition;\n\n /**\n * A message explaining why the value is invalid.\n *\n * @public\n * @remarks\n * HTML Attribute: error-text\n */\n @attr({ attribute: 'error-text' })\n public errorText: string | undefined;\n\n @attr({ attribute: 'error-visible', mode: 'boolean' })\n public errorVisible = false;\n\n @attr({ attribute: 'filter-mode' })\n public filterMode: FilterMode = FilterMode.none;\n\n @attr({ attribute: 'clearable', mode: 'boolean' })\n public clearable = false;\n\n /**\n * @internal\n */\n @observable\n public displayPlaceholder = false;\n\n /**\n * @internal\n */\n @attr({ attribute: 'open', mode: 'boolean' })\n public open = false;\n\n /**\n * Holds the current state for the calculated position of the listbox.\n *\n * @public\n */\n @observable\n public position?: SelectPosition;\n\n /**\n * The ref to the internal `.control` element.\n *\n * @internal\n */\n @observable\n public control!: HTMLElement;\n\n /**\n * Reference to the internal listbox element.\n *\n * @internal\n */\n public listbox!: HTMLDivElement;\n\n /**\n * The unique id for the internal listbox element.\n *\n * @internal\n */\n public listboxId: string = uniqueId('listbox-');\n\n /**\n * @internal\n */\n @observable\n public scrollableRegion!: HTMLElement;\n\n /**\n * @internal\n */\n @observable\n public filterInput?: HTMLInputElement;\n\n /**\n * @internal\n */\n @observable\n public anchoredRegion!: AnchoredRegion;\n\n /** @internal */\n @observable\n public hasOverflow = false;\n\n /**\n * @internal\n */\n @observable\n public filteredOptions: ListboxOption[] = [];\n\n /**\n * @internal\n */\n @observable\n public filter = '';\n\n /**\n * The max height for the listbox when opened.\n *\n * @internal\n */\n @observable\n public maxHeight = 0;\n\n /**\n * The component is collapsible when in single-selection mode with no size attribute.\n *\n * @internal\n */\n @volatile\n public get collapsible(): boolean {\n return !(this.multiple || typeof this.size === 'number');\n }\n\n private _value = '';\n private forcedPosition = false;\n private openActiveIndex?: number;\n\n /**\n * @internal\n */\n public override connectedCallback(): void {\n super.connectedCallback();\n this.forcedPosition = !!this.positionAttribute;\n if (this.open) {\n this.initializeOpenState();\n }\n }\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 newValue = next;\n\n if (this.options?.length) {\n const newValueIndex = this.options.findIndex(\n el => el.value === newValue\n );\n const prevSelectedValue = this.options[this.selectedIndex]?.value ?? null;\n const nextSelectedValue = this.options[newValueIndex]?.value ?? null;\n\n if (\n newValueIndex === -1\n || prevSelectedValue !== nextSelectedValue\n ) {\n newValue = '';\n this.selectedIndex = newValueIndex;\n }\n\n newValue = this.firstSelectedOption?.value ?? newValue;\n }\n\n if (prev !== newValue && !(this.open && this.selectedIndex < 0)) {\n this._value = newValue;\n super.valueChanged(prev, newValue);\n Observable.notify(this, 'value');\n this.updateDisplayValue();\n }\n }\n\n /**\n * @internal\n */\n @volatile\n public get displayValue(): string {\n Observable.track(this, 'displayValue');\n return this.firstSelectedOption?.text ?? '';\n }\n\n /**\n * @internal\n */\n public anchoredRegionChanged(\n _prev: AnchoredRegion | undefined,\n _next: AnchoredRegion | undefined\n ): void {\n if (this.anchoredRegion && this.control) {\n this.anchoredRegion.anchorElement = this.control;\n }\n }\n\n /**\n * @internal\n */\n public controlChanged(\n _prev: HTMLElement | undefined,\n _next: HTMLElement | undefined\n ): void {\n if (this.anchoredRegion && this.control) {\n this.anchoredRegion.anchorElement = this.control;\n }\n }\n\n /**\n * @internal\n */\n public override slottedOptionsChanged(\n prev: Element[],\n next: Element[]\n ): void {\n const value = this.value;\n this.options.forEach(o => {\n const notifier = Observable.getNotifier(o);\n notifier.unsubscribe(this, 'value');\n notifier.unsubscribe(this, 'hidden');\n notifier.unsubscribe(this, 'disabled');\n });\n\n super.slottedOptionsChanged(prev, next);\n\n this.options.forEach(o => {\n const notifier = Observable.getNotifier(o);\n notifier.subscribe(this, 'value');\n notifier.subscribe(this, 'hidden');\n notifier.subscribe(this, 'disabled');\n });\n this.setProxyOptions();\n this.updateValue();\n // We need to force an update to the filteredOptions observable\n // (by calling 'filterOptions()) so that the template correctly updates.\n this.filterOptions();\n if (value) {\n this.value = value;\n }\n }\n\n /**\n * @internal\n */\n public override clickHandler(e: MouseEvent): BooleanOrVoid {\n // do nothing if the select is disabled\n if (this.disabled) {\n return;\n }\n\n let optionClicked = false;\n if (this.open) {\n const captured = (e.target as HTMLElement).closest<ListOption>(\n 'option,[role=option]'\n );\n optionClicked = captured !== null;\n\n if (captured?.disabled) {\n return;\n }\n }\n\n const previousSelectedIndex = this.selectedIndex;\n super.clickHandler(e);\n\n this.open = this.collapsible && !this.open;\n if (\n !this.open\n && this.selectedIndex !== previousSelectedIndex\n && optionClicked\n ) {\n this.updateValue(true);\n }\n }\n\n /**\n * Updates the value when an option's value changes.\n *\n * @param source - the source object\n * @param propertyName - the property to evaluate\n *\n * @internal\n * @override\n */\n public override handleChange(source: unknown, propertyName: string): void {\n // don't call super.handleChange so hidden options can be selected programmatically\n const sourceElement = source as Element;\n switch (propertyName) {\n case 'value': {\n this.updateValue();\n break;\n }\n case 'selected': {\n if (\n isNimbleListOption(sourceElement)\n && sourceElement.selected\n ) {\n this.selectedIndex = this.options.indexOf(sourceElement);\n } else {\n this.clearSelect();\n }\n break;\n }\n case 'hidden': {\n if (isNimbleListOption(sourceElement)) {\n sourceElement.visuallyHidden = sourceElement.hidden;\n }\n this.updateDisplayValue();\n break;\n }\n case 'disabled': {\n this.updateDisplayValue();\n break;\n }\n default:\n break;\n }\n }\n\n /**\n * Prevents focus when size is set and a scrollbar is clicked.\n *\n * @param e - the mouse event object\n *\n * @override\n * @internal\n */\n public override mousedownHandler(e: MouseEvent): BooleanOrVoid {\n if (e.offsetX >= 0 && e.offsetX <= this.listbox?.scrollWidth) {\n return super.mousedownHandler(e);\n }\n\n return this.collapsible;\n }\n\n /**\n * @internal\n */\n public regionLoadedHandler(): void {\n this.focusAndScrollOptionIntoView();\n }\n\n /**\n * Sets the multiple property on the proxy element.\n *\n * @param prev - the previous multiple value\n * @param next - the current multiple value\n */\n public override multipleChanged(\n prev: boolean | undefined,\n next: boolean\n ): void {\n super.multipleChanged(prev, next);\n\n if (this.proxy) {\n this.proxy.multiple = next;\n }\n }\n\n /**\n * @internal\n */\n public inputClickHandler(e: MouseEvent): void {\n e.stopPropagation(); // clicking in filter input shouldn't close dropdown\n }\n\n /**\n * @internal\n */\n public clearClickHandler(e: MouseEvent): void {\n this.open = false;\n this.clearSelect();\n this.updateValue(true);\n e.stopPropagation();\n }\n\n /**\n * @internal\n */\n public updateDisplayValue(): void {\n const placeholderOption = this.getPlaceholderOption();\n if (\n placeholderOption\n && this.firstSelectedOption === placeholderOption\n ) {\n this.displayPlaceholder = true;\n } else {\n this.displayPlaceholder = false;\n }\n\n Observable.notify(this, 'displayValue');\n }\n\n /**\n * Handle content changes on the control input.\n *\n * @param e - the input event\n * @internal\n */\n public inputHandler(e: InputEvent): boolean {\n this.filter = this.filterInput?.value ?? '';\n this.filterOptions();\n\n const enabledOptions = this.filteredOptions.filter(o => !o.disabled);\n let activeOptionIndex = this.filter !== ''\n ? this.openActiveIndex ?? this.selectedIndex\n : this.selectedIndex;\n\n if (\n enabledOptions.length > 0\n && !enabledOptions.find(o => o === this.options[activeOptionIndex])\n ) {\n activeOptionIndex = this.options.indexOf(enabledOptions[0]!);\n } else if (enabledOptions.length === 0) {\n activeOptionIndex = -1;\n }\n this.setActiveOption(activeOptionIndex);\n\n if (e.inputType.includes('deleteContent') || !this.filter.length) {\n return true;\n }\n\n e.stopPropagation();\n return true;\n }\n\n /**\n * @internal\n */\n public override focusoutHandler(e: FocusEvent): BooleanOrVoid {\n super.focusoutHandler(e);\n if (!this.open) {\n return true;\n }\n\n this.open = false;\n const focusTarget = e.relatedTarget as HTMLElement;\n if (this.isSameNode(focusTarget)) {\n this.focus();\n return true;\n }\n\n return true;\n }\n\n /**\n * @internal\n */\n public override keydownHandler(e: KeyboardEvent): BooleanOrVoid {\n const initialSelectedIndex = this.selectedIndex;\n super.keydownHandler(e);\n const key = e.key;\n if (e.ctrlKey || e.shiftKey) {\n return true;\n }\n\n let currentActiveIndex = this.openActiveIndex ?? this.selectedIndex;\n switch (key) {\n case keySpace: {\n // when dropdown is open allow user to enter a space for filter text\n if (this.open && this.filterMode !== FilterMode.none) {\n break;\n }\n\n e.preventDefault();\n if (this.collapsible && this.typeAheadExpired) {\n this.open = !this.open;\n }\n if (!this.open) {\n this.focus();\n }\n break;\n }\n case keyHome:\n case keyEnd: {\n e.preventDefault();\n break;\n }\n case keyEnter: {\n e.preventDefault();\n if (\n this.filteredOptions.length === 0\n || this.filteredOptions.every(o => o.disabled)\n ) {\n return false;\n }\n this.open = !this.open;\n if (!this.open) {\n this.focus();\n }\n break;\n }\n case keyEscape: {\n if (!this.open) {\n if (this.clearable) {\n this.clearSelect();\n this.updateValue(true);\n return true;\n }\n\n break;\n }\n\n if (this.collapsible && this.open) {\n e.preventDefault();\n this.open = false;\n }\n\n currentActiveIndex = this.selectedIndex;\n this.focus();\n break;\n }\n\n default: {\n break;\n }\n }\n\n if (!this.open && this.selectedIndex !== currentActiveIndex) {\n this.selectedIndex = currentActiveIndex;\n }\n\n if (!this.open && initialSelectedIndex !== this.selectedIndex) {\n this.updateValue(true);\n }\n\n return !(key === keyArrowDown || key === keyArrowUp);\n }\n\n /**\n * Updates the proxy value when the selected index changes.\n *\n * @param prev - the previous selected index\n * @param next - the next selected index\n *\n * @internal\n */\n public override selectedIndexChanged(\n _: number | undefined,\n __: number\n ): void {\n // Don't call super.selectedIndexChanged as this will disallow disabled options\n // from being valid initial selected values. Our setDefaultSelectedOption\n // implementation handles skipping non-selected disabled options for the initial\n // selected value.\n this.setSelectedOptions();\n if (this.open) {\n this.setActiveOption(this.selectedIndex);\n }\n this.updateValue();\n }\n\n /**\n * @internal\n * Fork of Listbox implementation, so that the selectedIndex is not changed while the dropdown\n * is open.\n */\n public override typeaheadBufferChanged(_: string, __: string): void {\n if (this.$fastController.isConnected) {\n const typeaheadMatches = this.getTypeaheadMatches();\n\n if (typeaheadMatches.length) {\n const activeOptionIndex = this.options.indexOf(\n typeaheadMatches[0] as ListOption\n );\n if (!(this.open && this.filterMode !== FilterMode.none)) {\n this.setActiveOption(activeOptionIndex);\n }\n }\n\n this.typeaheadExpired = false;\n }\n }\n\n /**\n * Synchronize the `aria-disabled` property when the `disabled` property changes.\n *\n * @param prev - The previous disabled value\n * @param next - The next disabled value\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 * Reset the element to its first selectable option when its parent form is reset.\n *\n * @internal\n */\n public override formResetCallback(): void {\n this.setProxyOptions();\n // Call the base class's implementation setDefaultSelectedOption instead of the select's\n // override, in order to reset the selectedIndex without using the value property.\n super.setDefaultSelectedOption();\n if (this.selectedIndex === -1) {\n this.selectedIndex = 0;\n }\n }\n\n /**\n * @internal\n */\n public override selectNextOption(): void {\n // don't call super.selectNextOption as that relies on side-effecty\n // behavior to not select disabled option (which no longer works)\n const startIndex = this.openActiveIndex ?? this.selectedIndex;\n for (let i = startIndex + 1; i < this.options.length; i++) {\n const listOption = this.options[i]!;\n if (\n isNimbleListOption(listOption)\n && isOptionSelectable(listOption)\n ) {\n this.setActiveOption(i);\n break;\n }\n }\n }\n\n /**\n * @internal\n */\n public override selectPreviousOption(): void {\n // don't call super.selectPreviousOption as that relies on side-effecty\n // behavior to not select disabled option (which no longer works)\n const startIndex = this.openActiveIndex ?? this.selectedIndex;\n for (let i = startIndex - 1; i >= 0; i--) {\n const listOption = this.options[i]!;\n if (\n isNimbleListOption(listOption)\n && isOptionSelectable(listOption)\n ) {\n this.setActiveOption(i);\n break;\n }\n }\n }\n\n /**\n * @internal\n */\n public override selectFirstOption(): void {\n const newActiveOptionIndex = this.options.findIndex(\n o => isNimbleListOption(o) && isOptionSelectable(o)\n );\n this.setActiveOption(newActiveOptionIndex);\n }\n\n /**\n * @internal\n */\n public override selectLastOption(): void {\n const newActiveOptionIndex = findLastIndex(\n this.options,\n o => isNimbleListOption(o) && isOptionSelectable(o)\n );\n this.setActiveOption(newActiveOptionIndex);\n }\n\n /**\n * @internal\n */\n public registerOption(option: ListOption): void {\n if (this.options.includes(option)) {\n return;\n }\n\n // Adding an option to the end, ultimately, isn't the correct\n // thing to do, as this will mean the option's index in the options,\n // at least temporarily, does not match the DOM order. However, it\n // is expected that a successive run of `slottedOptionsChanged` will\n // correct this order issue. See 'https://github.com/ni/nimble/issues/1915'\n // for more info.\n this.options.push(option);\n }\n\n protected override setSelectedOptions(): void {\n // Prevents parent classes from resetting selectedIndex to a positive\n // value while filtering, which can result in a disabled option being\n // selected.\n if (this.open && this.selectedIndex === -1) {\n return;\n }\n super.setSelectedOptions();\n }\n\n protected override focusAndScrollOptionIntoView(): void {\n if (this.open) {\n super.focusAndScrollOptionIntoView();\n window.requestAnimationFrame(() => {\n this.filterInput?.focus();\n });\n }\n }\n\n protected override getTypeaheadMatches(): ListboxOption[] {\n const matches = super.getTypeaheadMatches();\n // Don't allow placeholder to be matched\n return matches.filter(o => !o.hidden && !o.disabled);\n }\n\n protected positionChanged(\n _: SelectPosition | undefined,\n next: SelectPosition | undefined\n ): void {\n this.positionAttribute = next;\n this.setPositioning();\n }\n\n /**\n * Updates the proxy's size property when the size attribute changes.\n *\n * @param prev - the previous size\n * @param next - the current size\n *\n * @override\n * @internal\n */\n protected override sizeChanged(\n prev: number | undefined,\n next: number\n ): void {\n super.sizeChanged(prev, next);\n\n if (this.proxy) {\n this.proxy.size = next;\n }\n }\n\n protected openChanged(): void {\n if (!this.collapsible) {\n return;\n }\n\n if (this.open) {\n this.initializeOpenState();\n return;\n }\n\n const activeOption = this.options[this.openActiveIndex ?? this.selectedIndex];\n if (isNimbleListOption(activeOption)) {\n activeOption.activeOption = false;\n }\n this.openActiveIndex = undefined;\n this.filter = '';\n if (this.filterInput) {\n this.filterInput.value = '';\n }\n\n this.ariaControls = '';\n this.ariaExpanded = 'false';\n }\n\n /**\n * Updates the selectedness of each option when the list of selected options changes.\n *\n * @param prev - the previous list of selected options\n * @param next - the current list of selected options\n *\n * @override\n * @internal\n */\n protected override selectedOptionsChanged(\n _prev: ListboxOption[] | undefined,\n next: ListboxOption[]\n ): void {\n // don't call super.selectedOptionsChanged so we don't filter out hidden elements\n // when updating 'selected' state (copied relevant super implementation)\n this.options?.forEach((o, i) => {\n const notifier = Observable.getNotifier(o);\n notifier.unsubscribe(this, 'selected');\n o.selected = next.includes(o);\n notifier.subscribe(this, 'selected');\n const proxyOption = this.proxy?.options.item(i);\n if (proxyOption) {\n proxyOption.selected = o.selected;\n }\n });\n }\n\n /**\n * Sets the selected index to match the first option with the selected attribute, or\n * the first selectable option.\n *\n * @override\n * @internal\n */\n protected override setDefaultSelectedOption(): void {\n const options: ListboxOption[] = this.options\n ?? Array.from(this.children).filter(o => isNimbleListOption(o));\n\n const optionIsSelected = (option: ListboxOption): boolean => {\n return option.hasAttribute('selected') || option.selected;\n };\n let selectedIndex = -1;\n let firstValidOptionIndex = -1;\n let placeholderIndex = -1;\n for (let i = 0; i < options?.length; i++) {\n const option = options[i]!;\n if (optionIsSelected(option) || option.value === this.value) {\n selectedIndex = i;\n break;\n } else if (placeholderIndex === -1 && isOptionPlaceholder(option)) {\n placeholderIndex = i;\n } else if (\n firstValidOptionIndex === -1\n && isOptionSelectable(option as ListOption)\n ) {\n firstValidOptionIndex = i;\n }\n }\n\n if (selectedIndex !== -1) {\n this.selectedIndex = selectedIndex;\n } else if (placeholderIndex !== -1) {\n this.selectedIndex = placeholderIndex;\n } else if (firstValidOptionIndex !== -1) {\n this.selectedIndex = firstValidOptionIndex;\n } else {\n this.selectedIndex = 0;\n }\n }\n\n private setActiveOption(newActiveIndex: number): void {\n const activeOption = this.options[newActiveIndex];\n if (this.open) {\n if (isNimbleListOption(activeOption)) {\n activeOption.activeOption = true;\n }\n\n const previousActiveIndex = this.openActiveIndex ?? this.selectedIndex;\n const previousActiveOption = this.options[previousActiveIndex];\n if (\n previousActiveIndex !== newActiveIndex\n && isNimbleListOption(previousActiveOption)\n ) {\n previousActiveOption.activeOption = false;\n }\n\n this.openActiveIndex = newActiveIndex;\n this.focusAndScrollActiveOptionIntoView();\n } else {\n this.selectedIndex = newActiveIndex;\n }\n\n this.ariaActiveDescendant = activeOption?.id ?? '';\n }\n\n private focusAndScrollActiveOptionIntoView(): void {\n const optionToFocus = this.options[this.openActiveIndex ?? this.selectedIndex];\n // Copied from FAST: To ensure that the browser handles both `focus()` and\n // `scrollIntoView()`, the timing here needs to guarantee that they happen on\n // different frames. Since this function is typically called from the `openChanged`\n // observer, `DOM.queueUpdate` causes the calls to be grouped into the same frame.\n // To prevent this, `requestAnimationFrame` is used instead of `DOM.queueUpdate`.\n if (optionToFocus !== undefined && this.contains(optionToFocus)) {\n optionToFocus.focus();\n requestAnimationFrame(() => {\n optionToFocus.scrollIntoView({ block: 'nearest' });\n });\n }\n }\n\n private getPlaceholderOption(): ListOption | undefined {\n return this.options.find(o => o.hidden && o.disabled) as ListOption;\n }\n\n private setPositioning(): void {\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.maxHeight = this.position === SelectPosition.above\n ? Math.trunc(currentBox.top)\n : Math.trunc(availableBottom);\n this.updateListboxMaxHeightCssVariable();\n }\n\n /**\n * Filter available options by text value.\n *\n * @public\n */\n private filterOptions(): void {\n const filter = this.filter.toLowerCase();\n\n if (filter) {\n this.filteredOptions = this.options.filter(option => {\n const normalizedFilter = diacriticInsensitiveStringNormalizer(filter);\n return (\n !option.hidden\n && diacriticInsensitiveStringNormalizer(option.text).includes(\n normalizedFilter\n )\n );\n });\n } else {\n this.filteredOptions = this.options.filter(\n option => !option.hidden\n );\n }\n\n this.options.forEach(o => {\n if (isNimbleListOption(o)) {\n if (!this.filteredOptions.includes(o)) {\n o.visuallyHidden = true;\n } else {\n o.visuallyHidden = false;\n }\n }\n });\n }\n\n /**\n * Sets the value and display value to match the first selected option.\n *\n * @param shouldEmit - if true, the input and change events will be emitted\n *\n * @internal\n */\n private updateValue(shouldEmit?: boolean): void {\n if (this.$fastController.isConnected) {\n this.value = this.firstSelectedOption?.value ?? '';\n }\n\n if (shouldEmit) {\n this.$emit('input');\n this.$emit('change', this, {\n bubbles: true,\n composed: undefined\n });\n }\n }\n\n private clearSelect(): void {\n const placeholder = this.getPlaceholderOption();\n this.selectedIndex = placeholder\n ? this.options.indexOf(placeholder)\n : -1;\n }\n\n /**\n * Resets and fills the proxy to match the component's options.\n *\n * @internal\n */\n private setProxyOptions(): void {\n if (this.proxy instanceof HTMLSelectElement && this.options) {\n this.proxy.options.length = 0;\n this.options.forEach(option => {\n const proxyOption = option.proxy\n || (option instanceof HTMLOptionElement\n ? option.cloneNode()\n : null);\n\n if (proxyOption) {\n this.proxy.options.add(proxyOption);\n }\n });\n }\n }\n\n private filterChanged(): void {\n this.filterOptions();\n }\n\n private maxHeightChanged(): void {\n this.updateListboxMaxHeightCssVariable();\n }\n\n private initializeOpenState(): void {\n this.setActiveOption(this.selectedIndex);\n this.ariaControls = this.listboxId;\n this.ariaExpanded = 'true';\n\n this.setPositioning();\n this.focusAndScrollOptionIntoView();\n }\n\n private updateListboxMaxHeightCssVariable(): void {\n if (this.listbox) {\n this.listbox.style.setProperty(\n '--ni-private-select-max-height',\n `${this.maxHeight}px`\n );\n }\n }\n}\n\nconst nimbleSelect = Select.compose<SelectOptions>({\n baseName: 'select',\n baseClass: FoundationSelect,\n template,\n styles,\n indicator: arrowExpanderDown16X16.data,\n end: html<Select>`\n <${iconExclamationMarkTag}\n severity=\"error\"\n class=\"error-icon\"\n ></${iconExclamationMarkTag}>\n ${errorTextTemplate}\n `\n});\n\napplyMixins(Select, StartEnd, DelegatesARIASelect);\nDesignSystem.getOrCreate().withPrefix('nimble').register(nimbleSelect());\nexport const selectTag = 'nimble-select';\n"]}
@@ -25,8 +25,15 @@ export const styles = css `
25
25
  order: 1;
26
26
  }
27
27
 
28
- [part='indicator'] {
28
+ .clear-button {
29
29
  order: 3;
30
+ width: auto;
31
+ height: auto;
32
+ margin-left: ${smallPadding};
33
+ }
34
+
35
+ [part='indicator'] {
36
+ order: 4;
30
37
  }
31
38
 
32
39
  .error-icon {
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/select/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,kDAAkD,CAAC;AACzE,OAAO,EAAE,MAAM,IAAI,cAAc,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EACH,qBAAqB,EACrB,WAAW,EACX,aAAa,EACb,cAAc,EACd,sBAAsB,EACtB,iBAAiB,EACjB,aAAa,EACb,oBAAoB,EACpB,YAAY,EACf,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;MACnB,cAAc;MACd,WAAW;;MAEX;AACE;gGACgG,CAAC,EACrG;;;iBAGa,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAmCnB,aAAa;;;;;;;;8BAQD,qBAAqB;uBAC5B,aAAa,MAAM,YAAY,MAAM,WAAW;;;;kCAIrC,WAAW;;;;;;;8BAOf,qBAAqB;oBAC/B,aAAa,MAAM,YAAY,MAAM,WAAW;;;;kCAIlC,WAAW;;;;wBAIrB,YAAY;;;;;;;;;qBASf,YAAY,MAAM,aAAa;;;;;iBAKnC,oBAAoB;;;mBAGlB,YAAY;;;;;;;;;;;;;4BAaH,cAAc;;;;4BAId,iBAAiB;;;;4BAIjB,sBAAsB;;;;iBAIjC,oBAAoB;kBACnB,aAAa;;;mBAGZ,YAAY,IAAI,aAAa;;CAE/C,CAAC,aAAa,CACX,kBAAkB,CACd,kBAAkB,CAAC,KAAK,EACxB,GAAG,CAAA;;uCAE4B,WAAW;;;SAGzC,CACJ,EACD,aAAa,CACT,KAAK,CAAC,KAAK,EACX,GAAG,CAAA;;;8BAGmB,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC;;SAEnD,CACJ,CACJ,CAAC","sourcesContent":["import { css } from '@microsoft/fast-element';\nimport { White } from '@ni/nimble-tokens/dist/styledictionary/js/tokens';\nimport { styles as dropdownStyles } from '../patterns/dropdown/styles';\nimport { styles as errorStyles } from '../patterns/error/styles';\nimport {\n borderRgbPartialColor,\n borderWidth,\n controlHeight,\n fillHoverColor,\n fillHoverSelectedColor,\n fillSelectedColor,\n mediumPadding,\n placeholderFontColor,\n smallPadding\n} from '../theme-provider/design-tokens';\nimport { appearanceBehavior } from '../utilities/style/appearance';\nimport { DropdownAppearance } from './types';\nimport { focusVisible } from '../utilities/style/focus';\nimport { themeBehavior } from '../utilities/style/theme';\nimport { Theme } from '../theme-provider/types';\nimport { hexToRgbaCssColor } from '../utilities/style/colors';\n\nexport const styles = css`\n ${dropdownStyles}\n ${errorStyles}\n\n ${\n /* We are using flex `order` to define the visual ordering of the selected value,\n error icon, and dropdown arrow because they are not \"interactive\" i.e. part of the tab order */ ''\n }\n\n .selected-value.placeholder {\n color: ${placeholderFontColor};\n }\n\n .selected-value {\n order: 1;\n }\n\n [part='indicator'] {\n order: 3;\n }\n\n .error-icon {\n order: 2;\n }\n\n [part='end'] {\n display: contents;\n }\n\n .listbox {\n overflow-x: clip;\n }\n\n .listbox.empty slot {\n display: none;\n }\n\n .listbox.above {\n flex-flow: column-reverse;\n }\n\n .filter-field {\n display: flex;\n flex-direction: row;\n align-items: center;\n height: ${controlHeight};\n background: transparent;\n }\n\n .filter-field::before {\n content: '';\n position: absolute;\n height: 0px;\n border-bottom: rgba(${borderRgbPartialColor}, 0.1) 2px solid;\n bottom: calc(${controlHeight} + ${smallPadding} - ${borderWidth});\n }\n\n .filter-field.above::before {\n width: calc(100% - (2 * ${borderWidth}));\n }\n\n .filter-field::after {\n content: '';\n position: absolute;\n height: 0px;\n border-bottom: rgba(${borderRgbPartialColor}, 0.1) 2px solid;\n top: calc(${controlHeight} + ${smallPadding} - ${borderWidth});\n }\n\n .filter-field:not(.above)::after {\n width: calc(100% - (2 * ${borderWidth}));\n }\n\n .filter-icon {\n padding-left: ${smallPadding};\n }\n\n .filter-input {\n background: transparent;\n border: none;\n color: inherit;\n font: inherit;\n height: var(--ni-nimble-control-height);\n padding: 0 ${smallPadding} 0 ${mediumPadding};\n width: 100%;\n }\n\n .filter-input::placeholder {\n color: ${placeholderFontColor};\n }\n\n .filter-input${focusVisible} {\n outline: 0px;\n }\n\n .scrollable-region {\n overflow: auto;\n }\n\n ::slotted([role='option']) {\n background-color: transparent;\n }\n\n ::slotted([role='option']:hover) {\n background-color: ${fillHoverColor};\n }\n\n ::slotted([role='option'][active-option]) {\n background-color: ${fillSelectedColor};\n }\n\n ::slotted([role='option'][active-option]:hover) {\n background-color: ${fillHoverSelectedColor};\n }\n\n .no-results-label {\n color: ${placeholderFontColor};\n height: ${controlHeight};\n display: inline-flex;\n align-items: center;\n padding: ${smallPadding} ${mediumPadding};\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 themeBehavior(\n Theme.color,\n css`\n .filter-field,\n .no-results-label {\n background: ${hexToRgbaCssColor(White, 0.15)};\n }\n `\n )\n);\n"]}
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/select/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,kDAAkD,CAAC;AACzE,OAAO,EAAE,MAAM,IAAI,cAAc,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EACH,qBAAqB,EACrB,WAAW,EACX,aAAa,EACb,cAAc,EACd,sBAAsB,EACtB,iBAAiB,EACjB,aAAa,EACb,oBAAoB,EACpB,YAAY,EACf,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;MACnB,cAAc;MACd,WAAW;;MAEX;AACE;gGACgG,CAAC,EACrG;;;iBAGa,oBAAoB;;;;;;;;;;;uBAWd,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA+BjB,aAAa;;;;;;;;8BAQD,qBAAqB;uBAC5B,aAAa,MAAM,YAAY,MAAM,WAAW;;;;kCAIrC,WAAW;;;;;;;8BAOf,qBAAqB;oBAC/B,aAAa,MAAM,YAAY,MAAM,WAAW;;;;kCAIlC,WAAW;;;;wBAIrB,YAAY;;;;;;;;;qBASf,YAAY,MAAM,aAAa;;;;;iBAKnC,oBAAoB;;;mBAGlB,YAAY;;;;;;;;;;;;;4BAaH,cAAc;;;;4BAId,iBAAiB;;;;4BAIjB,sBAAsB;;;;iBAIjC,oBAAoB;kBACnB,aAAa;;;mBAGZ,YAAY,IAAI,aAAa;;CAE/C,CAAC,aAAa,CACX,kBAAkB,CACd,kBAAkB,CAAC,KAAK,EACxB,GAAG,CAAA;;uCAE4B,WAAW;;;SAGzC,CACJ,EACD,aAAa,CACT,KAAK,CAAC,KAAK,EACX,GAAG,CAAA;;;8BAGmB,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC;;SAEnD,CACJ,CACJ,CAAC","sourcesContent":["import { css } from '@microsoft/fast-element';\nimport { White } from '@ni/nimble-tokens/dist/styledictionary/js/tokens';\nimport { styles as dropdownStyles } from '../patterns/dropdown/styles';\nimport { styles as errorStyles } from '../patterns/error/styles';\nimport {\n borderRgbPartialColor,\n borderWidth,\n controlHeight,\n fillHoverColor,\n fillHoverSelectedColor,\n fillSelectedColor,\n mediumPadding,\n placeholderFontColor,\n smallPadding\n} from '../theme-provider/design-tokens';\nimport { appearanceBehavior } from '../utilities/style/appearance';\nimport { DropdownAppearance } from './types';\nimport { focusVisible } from '../utilities/style/focus';\nimport { themeBehavior } from '../utilities/style/theme';\nimport { Theme } from '../theme-provider/types';\nimport { hexToRgbaCssColor } from '../utilities/style/colors';\n\nexport const styles = css`\n ${dropdownStyles}\n ${errorStyles}\n\n ${\n /* We are using flex `order` to define the visual ordering of the selected value,\n error icon, and dropdown arrow because they are not \"interactive\" i.e. part of the tab order */ ''\n }\n\n .selected-value.placeholder {\n color: ${placeholderFontColor};\n }\n\n .selected-value {\n order: 1;\n }\n\n .clear-button {\n order: 3;\n width: auto;\n height: auto;\n margin-left: ${smallPadding};\n }\n\n [part='indicator'] {\n order: 4;\n }\n\n .error-icon {\n order: 2;\n }\n\n [part='end'] {\n display: contents;\n }\n\n .listbox {\n overflow-x: clip;\n }\n\n .listbox.empty slot {\n display: none;\n }\n\n .listbox.above {\n flex-flow: column-reverse;\n }\n\n .filter-field {\n display: flex;\n flex-direction: row;\n align-items: center;\n height: ${controlHeight};\n background: transparent;\n }\n\n .filter-field::before {\n content: '';\n position: absolute;\n height: 0px;\n border-bottom: rgba(${borderRgbPartialColor}, 0.1) 2px solid;\n bottom: calc(${controlHeight} + ${smallPadding} - ${borderWidth});\n }\n\n .filter-field.above::before {\n width: calc(100% - (2 * ${borderWidth}));\n }\n\n .filter-field::after {\n content: '';\n position: absolute;\n height: 0px;\n border-bottom: rgba(${borderRgbPartialColor}, 0.1) 2px solid;\n top: calc(${controlHeight} + ${smallPadding} - ${borderWidth});\n }\n\n .filter-field:not(.above)::after {\n width: calc(100% - (2 * ${borderWidth}));\n }\n\n .filter-icon {\n padding-left: ${smallPadding};\n }\n\n .filter-input {\n background: transparent;\n border: none;\n color: inherit;\n font: inherit;\n height: var(--ni-nimble-control-height);\n padding: 0 ${smallPadding} 0 ${mediumPadding};\n width: 100%;\n }\n\n .filter-input::placeholder {\n color: ${placeholderFontColor};\n }\n\n .filter-input${focusVisible} {\n outline: 0px;\n }\n\n .scrollable-region {\n overflow: auto;\n }\n\n ::slotted([role='option']) {\n background-color: transparent;\n }\n\n ::slotted([role='option']:hover) {\n background-color: ${fillHoverColor};\n }\n\n ::slotted([role='option'][active-option]) {\n background-color: ${fillSelectedColor};\n }\n\n ::slotted([role='option'][active-option]:hover) {\n background-color: ${fillHoverSelectedColor};\n }\n\n .no-results-label {\n color: ${placeholderFontColor};\n height: ${controlHeight};\n display: inline-flex;\n align-items: center;\n padding: ${smallPadding} ${mediumPadding};\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 themeBehavior(\n Theme.color,\n css`\n .filter-field,\n .no-results-label {\n background: ${hexToRgbaCssColor(White, 0.15)};\n }\n `\n )\n);\n"]}
@@ -6,6 +6,8 @@ import { overflow } from '../utilities/directive/overflow';
6
6
  import { iconMagnifyingGlassTag } from '../icons/magnifying-glass';
7
7
  import { filterNoResultsLabel, filterSearchLabel } from '../label-provider/core/label-tokens';
8
8
  import { FilterMode } from './types';
9
+ import { buttonTag } from '../button';
10
+ import { iconXmarkTag } from '../icons/xmark';
9
11
  /* eslint-disable @typescript-eslint/indent */
10
12
  // prettier-ignore
11
13
  export const template = (context, definition) => html `
@@ -26,7 +28,6 @@ export const template = (context, definition) => html `
26
28
  role="combobox"
27
29
  tabindex="${x => (!x.disabled ? '0' : null)}"
28
30
  @click="${(x, c) => x.clickHandler(c.event)}"
29
- @change="${x => x.changeValueHandler()}"
30
31
  @contentchange="${x => x.updateDisplayValue()}"
31
32
  @focusin="${(x, c) => x.focusinHandler(c.event)}"
32
33
  @focusout="${(x, c) => x.focusoutHandler(c.event)}"
@@ -45,6 +46,17 @@ export const template = (context, definition) => html `
45
46
  <div class="selected-value ${x => (x.displayPlaceholder ? 'placeholder' : '')}" part="selected-value" ${overflow('hasOverflow')} title=${x => (x.hasOverflow && x.displayValue ? x.displayValue : null)}>
46
47
  <slot name="selected-value">${x => x.displayValue}</slot>
47
48
  </div>
49
+ ${when(x => !x.disabled && x.clearable && !x.displayPlaceholder && x.selectedIndex >= 0, html `
50
+ <${buttonTag}
51
+ class="clear-button"
52
+ tabindex="-1"
53
+ part="clear-button"
54
+ content-hidden
55
+ appearance="ghost"
56
+ @click="${(x, c) => x.clearClickHandler(c.event)}">
57
+ <${iconXmarkTag} slot="start"></${iconXmarkTag}>
58
+ </${buttonTag}>
59
+ `)}
48
60
  <div aria-hidden="true" class="indicator" part="indicator">
49
61
  <slot name="indicator">
50
62
  ${definition.indicator || ''}
@@ -1 +1 @@
1
- {"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/select/template.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n html,\n ref,\n slotted,\n ViewTemplate,\n when\n} from '@microsoft/fast-element';\nimport {\n endSlotTemplate,\n FoundationElementTemplate,\n SelectOptions,\n startSlotTemplate,\n isListboxOption\n} from '@microsoft/fast-foundation';\nimport type { Select } from '.';\nimport { anchoredRegionTag } from '../anchored-region';\nimport { DropdownPosition } from '../patterns/dropdown/types';\nimport { overflow } from '../utilities/directive/overflow';\nimport { iconMagnifyingGlassTag } from '../icons/magnifying-glass';\nimport {\n filterNoResultsLabel,\n filterSearchLabel\n} from '../label-provider/core/label-tokens';\nimport { FilterMode } from './types';\n\n/* eslint-disable @typescript-eslint/indent */\n// prettier-ignore\nexport const template: FoundationElementTemplate<\nViewTemplate<Select>,\nSelectOptions\n> = (context, definition) => html<Select>`\n <template\n class=\"${x => [\n x.collapsible && 'collapsible',\n x.collapsible && x.open && 'open',\n x.disabled && 'disabled',\n x.collapsible && x.position,\n ].filter(Boolean).join(' ')}\"\n aria-activedescendant=\"${x => (x.filterMode === FilterMode.none ? x.ariaActiveDescendant : null)}\"\n aria-controls=\"${x => (x.filterMode === FilterMode.none ? x.ariaControls : null)}\"\n aria-disabled=\"${x => x.ariaDisabled}\"\n aria-expanded=\"${x => x.ariaExpanded}\"\n aria-haspopup=\"${x => (x.collapsible ? 'listbox' : null)}\"\n aria-multiselectable=\"${x => x.ariaMultiSelectable}\"\n ?open=\"${x => x.open}\"\n role=\"combobox\"\n tabindex=\"${x => (!x.disabled ? '0' : null)}\"\n @click=\"${(x, c) => x.clickHandler(c.event as MouseEvent)}\"\n @change=\"${x => x.changeValueHandler()}\"\n @contentchange=\"${x => x.updateDisplayValue()}\"\n @focusin=\"${(x, c) => x.focusinHandler(c.event as FocusEvent)}\"\n @focusout=\"${(x, c) => x.focusoutHandler(c.event as FocusEvent)}\"\n @keydown=\"${(x, c) => x.keydownHandler(c.event as KeyboardEvent)}\"\n @mousedown=\"${(x, c) => x.mousedownHandler(c.event as MouseEvent)}\"\n >\n ${when(x => x.collapsible, html<Select>`\n <div\n class=\"control\"\n part=\"control\"\n ?disabled=\"${x => x.disabled}\"\n ${ref('control')}\n >\n ${startSlotTemplate(context, definition)}\n <slot name=\"button-container\">\n <div class=\"selected-value ${x => (x.displayPlaceholder ? 'placeholder' : '')}\" part=\"selected-value\" ${overflow('hasOverflow')} title=${x => (x.hasOverflow && x.displayValue ? x.displayValue : null)}>\n <slot name=\"selected-value\">${x => x.displayValue}</slot>\n </div>\n <div aria-hidden=\"true\" class=\"indicator\" part=\"indicator\">\n <slot name=\"indicator\">\n ${definition.indicator || ''}\n </slot>\n </div>\n </slot>\n ${endSlotTemplate(context, definition)}\n </div>\n `)\n }\n <${anchoredRegionTag}\n ${ref('anchoredRegion')}\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 @loaded=\"${x => x.regionLoadedHandler()}\"\n ?hidden=\"${x => (x.collapsible ? !x.open : false)}\">\n <div class=\"listbox-background\">\n <div\n class=\"\n listbox \n ${x => (x.filteredOptions.length === 0 ? 'empty' : '')}\n ${x => x.positionAttribute}\n \"\n id=\"${x => x.listboxId}\"\n part=\"listbox\"\n role=\"listbox\"\n ?disabled=\"${x => x.disabled}\"\n ${ref('listbox')}\n >\n ${when(x => x.filterMode !== FilterMode.none, html<Select>`\n <div class=\"filter-field ${x => x.positionAttribute}\">\n <${iconMagnifyingGlassTag} class=\"filter-icon\"></${iconMagnifyingGlassTag}>\n <input\n ${ref('filterInput')}\n class=\"filter-input\"\n aria-controls=\"${x => x.ariaControls}\"\n aria-activedescendant=\"${x => x.ariaActiveDescendant}\"\n @input=\"${(x, c) => x.inputHandler(c.event as InputEvent)}\"\n @click=\"${(x, c) => x.inputClickHandler(c.event as MouseEvent)}\"\n placeholder=\"${x => filterSearchLabel.getValueFor(x)}\"\n value=\"${x => x.filter}\"\n />\n </div>\n `)}\n <div ${ref('scrollableRegion')}\n class=\"scrollable-region\">\n <slot\n ${slotted({\n filter: (n: Node) => n instanceof HTMLElement && isListboxOption(n),\n flatten: true,\n property: 'slottedOptions',\n })}\n ></slot>\n </div>\n ${when(x => (x.filterMode !== FilterMode.none && x.filteredOptions.length === 0), html<Select>`\n <span class=\"no-results-label ${x => x.positionAttribute}\">\n ${x => filterNoResultsLabel.getValueFor(x)}\n </span>\n `)}\n </div>\n </div>\n </${anchoredRegionTag}>\n </template>\n`;\n"]}
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/select/template.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n html,\n ref,\n slotted,\n ViewTemplate,\n when\n} from '@microsoft/fast-element';\nimport {\n endSlotTemplate,\n FoundationElementTemplate,\n SelectOptions,\n startSlotTemplate,\n isListboxOption\n} from '@microsoft/fast-foundation';\nimport type { Select } from '.';\nimport { anchoredRegionTag } from '../anchored-region';\nimport { DropdownPosition } from '../patterns/dropdown/types';\nimport { overflow } from '../utilities/directive/overflow';\nimport { iconMagnifyingGlassTag } from '../icons/magnifying-glass';\nimport {\n filterNoResultsLabel,\n filterSearchLabel\n} from '../label-provider/core/label-tokens';\nimport { FilterMode } from './types';\nimport { buttonTag } from '../button';\nimport { iconXmarkTag } from '../icons/xmark';\n\n/* eslint-disable @typescript-eslint/indent */\n// prettier-ignore\nexport const template: FoundationElementTemplate<\nViewTemplate<Select>,\nSelectOptions\n> = (context, definition) => html<Select>`\n <template\n class=\"${x => [\n x.collapsible && 'collapsible',\n x.collapsible && x.open && 'open',\n x.disabled && 'disabled',\n x.collapsible && x.position,\n ].filter(Boolean).join(' ')}\"\n aria-activedescendant=\"${x => (x.filterMode === FilterMode.none ? x.ariaActiveDescendant : null)}\"\n aria-controls=\"${x => (x.filterMode === FilterMode.none ? x.ariaControls : null)}\"\n aria-disabled=\"${x => x.ariaDisabled}\"\n aria-expanded=\"${x => x.ariaExpanded}\"\n aria-haspopup=\"${x => (x.collapsible ? 'listbox' : null)}\"\n aria-multiselectable=\"${x => x.ariaMultiSelectable}\"\n ?open=\"${x => x.open}\"\n role=\"combobox\"\n tabindex=\"${x => (!x.disabled ? '0' : null)}\"\n @click=\"${(x, c) => x.clickHandler(c.event as MouseEvent)}\"\n @contentchange=\"${x => x.updateDisplayValue()}\"\n @focusin=\"${(x, c) => x.focusinHandler(c.event as FocusEvent)}\"\n @focusout=\"${(x, c) => x.focusoutHandler(c.event as FocusEvent)}\"\n @keydown=\"${(x, c) => x.keydownHandler(c.event as KeyboardEvent)}\"\n @mousedown=\"${(x, c) => x.mousedownHandler(c.event as MouseEvent)}\"\n >\n ${when(x => x.collapsible, html<Select>`\n <div\n class=\"control\"\n part=\"control\"\n ?disabled=\"${x => x.disabled}\"\n ${ref('control')}\n >\n ${startSlotTemplate(context, definition)}\n <slot name=\"button-container\">\n <div class=\"selected-value ${x => (x.displayPlaceholder ? 'placeholder' : '')}\" part=\"selected-value\" ${overflow('hasOverflow')} title=${x => (x.hasOverflow && x.displayValue ? x.displayValue : null)}>\n <slot name=\"selected-value\">${x => x.displayValue}</slot>\n </div>\n ${when(x => !x.disabled && x.clearable && !x.displayPlaceholder && x.selectedIndex >= 0, html<Select>`\n <${buttonTag} \n class=\"clear-button\"\n tabindex=\"-1\"\n part=\"clear-button\"\n content-hidden\n appearance=\"ghost\"\n @click=\"${(x, c) => x.clearClickHandler(c.event as MouseEvent)}\">\n <${iconXmarkTag} slot=\"start\"></${iconXmarkTag}>\n </${buttonTag}>\n `)}\n <div aria-hidden=\"true\" class=\"indicator\" part=\"indicator\">\n <slot name=\"indicator\">\n ${definition.indicator || ''}\n </slot>\n </div>\n </slot>\n ${endSlotTemplate(context, definition)}\n </div>\n `)\n }\n <${anchoredRegionTag}\n ${ref('anchoredRegion')}\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 @loaded=\"${x => x.regionLoadedHandler()}\"\n ?hidden=\"${x => (x.collapsible ? !x.open : false)}\">\n <div class=\"listbox-background\">\n <div\n class=\"\n listbox \n ${x => (x.filteredOptions.length === 0 ? 'empty' : '')}\n ${x => x.positionAttribute}\n \"\n id=\"${x => x.listboxId}\"\n part=\"listbox\"\n role=\"listbox\"\n ?disabled=\"${x => x.disabled}\"\n ${ref('listbox')}\n >\n ${when(x => x.filterMode !== FilterMode.none, html<Select>`\n <div class=\"filter-field ${x => x.positionAttribute}\">\n <${iconMagnifyingGlassTag} class=\"filter-icon\"></${iconMagnifyingGlassTag}>\n <input\n ${ref('filterInput')}\n class=\"filter-input\"\n aria-controls=\"${x => x.ariaControls}\"\n aria-activedescendant=\"${x => x.ariaActiveDescendant}\"\n @input=\"${(x, c) => x.inputHandler(c.event as InputEvent)}\"\n @click=\"${(x, c) => x.inputClickHandler(c.event as MouseEvent)}\"\n placeholder=\"${x => filterSearchLabel.getValueFor(x)}\"\n value=\"${x => x.filter}\"\n />\n </div>\n `)}\n <div ${ref('scrollableRegion')}\n class=\"scrollable-region\">\n <slot\n ${slotted({\n filter: (n: Node) => n instanceof HTMLElement && isListboxOption(n),\n flatten: true,\n property: 'slottedOptions',\n })}\n ></slot>\n </div>\n ${when(x => (x.filterMode !== FilterMode.none && x.filteredOptions.length === 0), html<Select>`\n <span class=\"no-results-label ${x => x.positionAttribute}\">\n ${x => filterNoResultsLabel.getValueFor(x)}\n </span>\n `)}\n </div>\n </div>\n </${anchoredRegionTag}>\n </template>\n`;\n"]}
@@ -26,6 +26,7 @@ export declare class SelectPageObject {
26
26
  * @param value The text of the option to be selected
27
27
  */
28
28
  clickOptionWithDisplayText(displayText: string): void;
29
+ clickClearButton(): void;
29
30
  clickAway(): Promise<void>;
30
31
  pressEnterKey(): void;
31
32
  pressEscapeKey(): void;
@@ -35,10 +36,11 @@ export declare class SelectPageObject {
35
36
  pressCharacterKey(character: string): void;
36
37
  pressSpaceKey(): Promise<void>;
37
38
  isDropdownVisible(): boolean;
39
+ isClearButtonVisible(): boolean;
38
40
  isFilterInputVisible(): boolean;
39
41
  isOptionVisible(index: number): boolean;
40
42
  isNoResultsLabelVisible(): boolean;
41
43
  getFilterInputText(): string;
42
- waitForChange(): Promise<string>;
43
44
  private getFilterInput;
45
+ private getClearButton;
44
46
  }
@@ -93,6 +93,17 @@ export class SelectPageObject {
93
93
  }
94
94
  this.clickOption(optionIndex);
95
95
  }
96
+ clickClearButton() {
97
+ if (!this.selectElement.clearable) {
98
+ throw new Error('Select must set "clearable" in order to click clear button');
99
+ }
100
+ if (this.selectElement.selectedIndex === -1
101
+ || this.selectElement.displayPlaceholder) {
102
+ throw new Error('Select must have a selected element in order to click clear button');
103
+ }
104
+ const clearButton = this.getClearButton();
105
+ clearButton?.click();
106
+ }
96
107
  async clickAway() {
97
108
  this.selectElement.dispatchEvent(new Event('focusout'));
98
109
  await waitForUpdatesAsync();
@@ -147,6 +158,9 @@ export class SelectPageObject {
147
158
  isDropdownVisible() {
148
159
  return (this.selectElement.shadowRoot?.querySelector('.listbox') !== null);
149
160
  }
161
+ isClearButtonVisible() {
162
+ return this.getClearButton() != null;
163
+ }
150
164
  isFilterInputVisible() {
151
165
  return (this.selectElement.shadowRoot?.querySelector('.filter-field')
152
166
  !== null);
@@ -165,20 +179,14 @@ export class SelectPageObject {
165
179
  getFilterInputText() {
166
180
  return this.selectElement.filterInput?.value ?? '';
167
181
  }
168
- async waitForChange() {
169
- return new Promise(resolve => {
170
- this.selectElement.addEventListener('change', () => {
171
- resolve(this.selectElement.value);
172
- }, {
173
- once: true
174
- });
175
- });
176
- }
177
182
  getFilterInput() {
178
183
  if (this.selectElement.filterMode === FilterMode.none) {
179
184
  throw new Error('Select has filterMode of "none" so there is no filter input');
180
185
  }
181
186
  return this.selectElement.filterInput;
182
187
  }
188
+ getClearButton() {
189
+ return this.selectElement.shadowRoot?.querySelector('.clear-button');
190
+ }
183
191
  }
184
192
  //# sourceMappingURL=select.pageobject.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"select.pageobject.js","sourceRoot":"","sources":["../../../../src/select/testing/select.pageobject.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n keyEnter,\n keyEscape,\n keyArrowDown,\n keyArrowUp,\n keySpace,\n keyTab\n} from '@microsoft/fast-web-utilities';\nimport type { Select } from '..';\nimport type { ListOption } from '../../list-option';\nimport { waitForUpdatesAsync } from '../../testing/async-helpers';\nimport { FilterMode } from '../types';\n\n/**\n * Page object for the `nimble-select` component to provide consistent ways\n * of querying and interacting with the component during tests.\n */\nexport class SelectPageObject {\n public constructor(private readonly selectElement: Select) {}\n\n public async openAndSetFilterText(filterText: string): Promise<void> {\n if (this.selectElement.filterMode === FilterMode.none) {\n throw new Error(\n 'Can not set filter text with filterMode set to \"none\".'\n );\n }\n this.clickSelect();\n const filterInput = this.getFilterInput();\n if (filterInput) {\n filterInput.value = filterText;\n }\n\n await waitForUpdatesAsync();\n const inputEvent = new InputEvent('input');\n filterInput?.dispatchEvent(inputEvent);\n await waitForUpdatesAsync();\n }\n\n public async closeDropdown(): Promise<void> {\n this.selectElement.open = false;\n await waitForUpdatesAsync();\n }\n\n public async setOptions(options: ListOption[]): Promise<void> {\n options.forEach(option => {\n option.setAttribute('role', 'option');\n });\n this.selectElement.slottedOptions = options;\n await waitForUpdatesAsync();\n }\n\n public getFilteredOptions(): ListOption[] {\n return this.selectElement.filteredOptions as ListOption[];\n }\n\n public getSelectedOption(): ListOption | null {\n return (this.selectElement.selectedOptions[0] as ListOption) ?? null;\n }\n\n public getActiveOption(): ListOption | null {\n return (\n (this.selectElement.options.find(\n o => (o as ListOption).activeOption\n ) as ListOption) ?? null\n );\n }\n\n public getDisplayText(): string {\n const displayText = this.selectElement.shadowRoot?.querySelector('.selected-value')\n ?.textContent ?? '';\n return displayText.trim();\n }\n\n /**\n * Either opens or closes the dropdown depending on its current state\n */\n public clickSelect(): void {\n this.selectElement.click();\n }\n\n public clickActiveItem(): void {\n if (!this.selectElement.open) {\n throw new Error('Select must be open to click selectedItem');\n }\n\n const selectedOption = this.getActiveOption();\n if (!selectedOption) {\n throw new Error('No option is selected to click');\n }\n this.clickOption(this.selectElement.options.indexOf(selectedOption));\n }\n\n public async clickFilterInput(): Promise<void> {\n if (!this.selectElement.filterInput) {\n throw new Error('Filter input is not available.');\n }\n this.selectElement.filterInput.click();\n await waitForUpdatesAsync();\n }\n\n public clickOption(index: number): void {\n if (index >= this.selectElement.options.length) {\n throw new Error(\n '\"index\" greater than number of current displayed options'\n );\n }\n\n const option = this.selectElement.options[index]!;\n option.scrollIntoView();\n option.click();\n }\n\n /**\n * Click the option with the text provided by the 'displayText' parameter.\n * @param value The text of the option to be selected\n */\n public clickOptionWithDisplayText(displayText: string): void {\n if (!this.selectElement.open) {\n this.clickSelect();\n }\n const optionIndex = this.selectElement.options.findIndex(\n o => o.text === displayText\n );\n if (optionIndex === -1) {\n throw new Error(`No option with \"text\" of ${displayText}`);\n }\n\n this.clickOption(optionIndex);\n }\n\n public async clickAway(): Promise<void> {\n this.selectElement.dispatchEvent(new Event('focusout'));\n await waitForUpdatesAsync();\n }\n\n public pressEnterKey(): void {\n this.selectElement.dispatchEvent(\n new KeyboardEvent('keydown', { key: keyEnter })\n );\n }\n\n public pressEscapeKey(): void {\n this.selectElement.dispatchEvent(\n new KeyboardEvent('keydown', { key: keyEscape })\n );\n }\n\n public pressTabKey(): void {\n this.selectElement.dispatchEvent(\n new KeyboardEvent('keydown', { key: keyTab })\n );\n this.selectElement.dispatchEvent(new FocusEvent('focusout'));\n }\n\n public pressArrowDownKey(): void {\n this.selectElement.dispatchEvent(\n new KeyboardEvent('keydown', { key: keyArrowDown })\n );\n }\n\n public pressArrowUpKey(): void {\n this.selectElement.dispatchEvent(\n new KeyboardEvent('keydown', { key: keyArrowUp })\n );\n }\n\n public pressCharacterKey(character: string): void {\n if (character.length !== 1) {\n throw new Error(\n 'character parameter must contain only a single character'\n );\n }\n\n if (\n this.selectElement.open\n && this.selectElement.filterMode !== FilterMode.none\n ) {\n const filterInput = this.selectElement.filterInput!;\n filterInput.value += character;\n }\n const inputElement = this.selectElement.open\n && this.selectElement.filterMode !== FilterMode.none\n ? this.selectElement.filterInput\n : this.selectElement;\n inputElement!.dispatchEvent(new InputEvent('input'));\n this.selectElement.dispatchEvent(\n new KeyboardEvent('keydown', { key: character })\n );\n }\n\n public async pressSpaceKey(): Promise<void> {\n const alreadyOpen = this.selectElement.open;\n this.selectElement.dispatchEvent(\n new KeyboardEvent('keydown', { key: keySpace, bubbles: true })\n );\n await waitForUpdatesAsync();\n if (\n this.selectElement.filterMode === FilterMode.standard\n && alreadyOpen\n ) {\n // add space to end of current filter\n const filterValue = `${\n this.selectElement.filterInput?.value ?? ''\n } `;\n if (this.selectElement.filterInput) {\n this.selectElement.filterInput.value = filterValue;\n }\n this.selectElement.filterInput?.dispatchEvent(\n new InputEvent('input', { inputType: 'insertText' })\n );\n }\n await waitForUpdatesAsync();\n }\n\n public isDropdownVisible(): boolean {\n return (\n this.selectElement.shadowRoot?.querySelector('.listbox') !== null\n );\n }\n\n public isFilterInputVisible(): boolean {\n return (\n this.selectElement.shadowRoot?.querySelector('.filter-field')\n !== null\n );\n }\n\n public isOptionVisible(index: number): boolean {\n if (index >= this.selectElement.options.length) {\n throw new Error('Indexing past number of options');\n }\n const option = this.selectElement.options[index]!;\n const optionRects = option.getClientRects();\n return optionRects.length > 0 && optionRects[0]!.height !== 0;\n }\n\n public isNoResultsLabelVisible(): boolean {\n return (\n this.selectElement.shadowRoot?.querySelector(\n '.no-results-label'\n ) !== null\n );\n }\n\n public getFilterInputText(): string {\n return this.selectElement.filterInput?.value ?? '';\n }\n\n public async waitForChange(): Promise<string> {\n return new Promise(resolve => {\n this.selectElement.addEventListener(\n 'change',\n () => {\n resolve(this.selectElement.value);\n },\n {\n once: true\n }\n );\n });\n }\n\n private getFilterInput(): HTMLInputElement | null | undefined {\n if (this.selectElement.filterMode === FilterMode.none) {\n throw new Error(\n 'Select has filterMode of \"none\" so there is no filter input'\n );\n }\n return this.selectElement.filterInput;\n }\n}\n"]}
1
+ {"version":3,"file":"select.pageobject.js","sourceRoot":"","sources":["../../../../src/select/testing/select.pageobject.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n keyEnter,\n keyEscape,\n keyArrowDown,\n keyArrowUp,\n keySpace,\n keyTab\n} from '@microsoft/fast-web-utilities';\nimport type { Select } from '..';\nimport type { ListOption } from '../../list-option';\nimport { waitForUpdatesAsync } from '../../testing/async-helpers';\nimport { FilterMode } from '../types';\nimport type { Button } from '../../button';\n\n/**\n * Page object for the `nimble-select` component to provide consistent ways\n * of querying and interacting with the component during tests.\n */\nexport class SelectPageObject {\n public constructor(private readonly selectElement: Select) {}\n\n public async openAndSetFilterText(filterText: string): Promise<void> {\n if (this.selectElement.filterMode === FilterMode.none) {\n throw new Error(\n 'Can not set filter text with filterMode set to \"none\".'\n );\n }\n this.clickSelect();\n const filterInput = this.getFilterInput();\n if (filterInput) {\n filterInput.value = filterText;\n }\n\n await waitForUpdatesAsync();\n const inputEvent = new InputEvent('input');\n filterInput?.dispatchEvent(inputEvent);\n await waitForUpdatesAsync();\n }\n\n public async closeDropdown(): Promise<void> {\n this.selectElement.open = false;\n await waitForUpdatesAsync();\n }\n\n public async setOptions(options: ListOption[]): Promise<void> {\n options.forEach(option => {\n option.setAttribute('role', 'option');\n });\n this.selectElement.slottedOptions = options;\n await waitForUpdatesAsync();\n }\n\n public getFilteredOptions(): ListOption[] {\n return this.selectElement.filteredOptions as ListOption[];\n }\n\n public getSelectedOption(): ListOption | null {\n return (this.selectElement.selectedOptions[0] as ListOption) ?? null;\n }\n\n public getActiveOption(): ListOption | null {\n return (\n (this.selectElement.options.find(\n o => (o as ListOption).activeOption\n ) as ListOption) ?? null\n );\n }\n\n public getDisplayText(): string {\n const displayText = this.selectElement.shadowRoot?.querySelector('.selected-value')\n ?.textContent ?? '';\n return displayText.trim();\n }\n\n /**\n * Either opens or closes the dropdown depending on its current state\n */\n public clickSelect(): void {\n this.selectElement.click();\n }\n\n public clickActiveItem(): void {\n if (!this.selectElement.open) {\n throw new Error('Select must be open to click selectedItem');\n }\n\n const selectedOption = this.getActiveOption();\n if (!selectedOption) {\n throw new Error('No option is selected to click');\n }\n this.clickOption(this.selectElement.options.indexOf(selectedOption));\n }\n\n public async clickFilterInput(): Promise<void> {\n if (!this.selectElement.filterInput) {\n throw new Error('Filter input is not available.');\n }\n this.selectElement.filterInput.click();\n await waitForUpdatesAsync();\n }\n\n public clickOption(index: number): void {\n if (index >= this.selectElement.options.length) {\n throw new Error(\n '\"index\" greater than number of current displayed options'\n );\n }\n\n const option = this.selectElement.options[index]!;\n option.scrollIntoView();\n option.click();\n }\n\n /**\n * Click the option with the text provided by the 'displayText' parameter.\n * @param value The text of the option to be selected\n */\n public clickOptionWithDisplayText(displayText: string): void {\n if (!this.selectElement.open) {\n this.clickSelect();\n }\n const optionIndex = this.selectElement.options.findIndex(\n o => o.text === displayText\n );\n if (optionIndex === -1) {\n throw new Error(`No option with \"text\" of ${displayText}`);\n }\n\n this.clickOption(optionIndex);\n }\n\n public clickClearButton(): void {\n if (!this.selectElement.clearable) {\n throw new Error(\n 'Select must set \"clearable\" in order to click clear button'\n );\n }\n\n if (\n this.selectElement.selectedIndex === -1\n || this.selectElement.displayPlaceholder\n ) {\n throw new Error(\n 'Select must have a selected element in order to click clear button'\n );\n }\n\n const clearButton = this.getClearButton();\n clearButton?.click();\n }\n\n public async clickAway(): Promise<void> {\n this.selectElement.dispatchEvent(new Event('focusout'));\n await waitForUpdatesAsync();\n }\n\n public pressEnterKey(): void {\n this.selectElement.dispatchEvent(\n new KeyboardEvent('keydown', { key: keyEnter })\n );\n }\n\n public pressEscapeKey(): void {\n this.selectElement.dispatchEvent(\n new KeyboardEvent('keydown', { key: keyEscape })\n );\n }\n\n public pressTabKey(): void {\n this.selectElement.dispatchEvent(\n new KeyboardEvent('keydown', { key: keyTab })\n );\n this.selectElement.dispatchEvent(new FocusEvent('focusout'));\n }\n\n public pressArrowDownKey(): void {\n this.selectElement.dispatchEvent(\n new KeyboardEvent('keydown', { key: keyArrowDown })\n );\n }\n\n public pressArrowUpKey(): void {\n this.selectElement.dispatchEvent(\n new KeyboardEvent('keydown', { key: keyArrowUp })\n );\n }\n\n public pressCharacterKey(character: string): void {\n if (character.length !== 1) {\n throw new Error(\n 'character parameter must contain only a single character'\n );\n }\n\n if (\n this.selectElement.open\n && this.selectElement.filterMode !== FilterMode.none\n ) {\n const filterInput = this.selectElement.filterInput!;\n filterInput.value += character;\n }\n const inputElement = this.selectElement.open\n && this.selectElement.filterMode !== FilterMode.none\n ? this.selectElement.filterInput\n : this.selectElement;\n inputElement!.dispatchEvent(new InputEvent('input'));\n this.selectElement.dispatchEvent(\n new KeyboardEvent('keydown', { key: character })\n );\n }\n\n public async pressSpaceKey(): Promise<void> {\n const alreadyOpen = this.selectElement.open;\n this.selectElement.dispatchEvent(\n new KeyboardEvent('keydown', { key: keySpace, bubbles: true })\n );\n await waitForUpdatesAsync();\n if (\n this.selectElement.filterMode === FilterMode.standard\n && alreadyOpen\n ) {\n // add space to end of current filter\n const filterValue = `${\n this.selectElement.filterInput?.value ?? ''\n } `;\n if (this.selectElement.filterInput) {\n this.selectElement.filterInput.value = filterValue;\n }\n this.selectElement.filterInput?.dispatchEvent(\n new InputEvent('input', { inputType: 'insertText' })\n );\n }\n await waitForUpdatesAsync();\n }\n\n public isDropdownVisible(): boolean {\n return (\n this.selectElement.shadowRoot?.querySelector('.listbox') !== null\n );\n }\n\n public isClearButtonVisible(): boolean {\n return this.getClearButton() != null;\n }\n\n public isFilterInputVisible(): boolean {\n return (\n this.selectElement.shadowRoot?.querySelector('.filter-field')\n !== null\n );\n }\n\n public isOptionVisible(index: number): boolean {\n if (index >= this.selectElement.options.length) {\n throw new Error('Indexing past number of options');\n }\n const option = this.selectElement.options[index]!;\n const optionRects = option.getClientRects();\n return optionRects.length > 0 && optionRects[0]!.height !== 0;\n }\n\n public isNoResultsLabelVisible(): boolean {\n return (\n this.selectElement.shadowRoot?.querySelector(\n '.no-results-label'\n ) !== null\n );\n }\n\n public getFilterInputText(): string {\n return this.selectElement.filterInput?.value ?? '';\n }\n\n private getFilterInput(): HTMLInputElement | null | undefined {\n if (this.selectElement.filterMode === FilterMode.none) {\n throw new Error(\n 'Select has filterMode of \"none\" so there is no filter input'\n );\n }\n return this.selectElement.filterInput;\n }\n\n private getClearButton(): Button | null | undefined {\n return this.selectElement.shadowRoot?.querySelector<Button>(\n '.clear-button'\n );\n }\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import { css } from '@microsoft/fast-element';
2
- import { display } from '@microsoft/fast-foundation';
3
2
  import { Black15, Black91, DigitalGreenLight, PowerGreen, White } from '@ni/nimble-tokens/dist/styledictionary/js/tokens';
3
+ import { display } from '../utilities/style/display';
4
4
  import { spinnerSmallHeight } from '../theme-provider/design-tokens';
5
5
  import { Theme } from '../theme-provider/types';
6
6
  import { themeBehavior } from '../utilities/style/theme';
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/spinner/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EACH,OAAO,EACP,OAAO,EACP,iBAAiB,EACjB,UAAU,EACV,KAAK,EACR,MAAM,kDAAkD,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;MACnB,OAAO,CAAC,aAAa,CAAC;;;kBAGV,kBAAkB;;;;;mBAKjB,YAAY,CAAC,OAAO;;;;;;;;UAQ7B;AACE;;;;;;GAMG;AACH,EACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwHP,CAAC,aAAa,CACX,aAAa,CACT,KAAK,CAAC,KAAK,EACX,GAAG,CAAA;;8DAEmD,OAAO;;;8DAGP,iBAAiB;;SAEtE,CACJ,EACD,aAAa,CACT,KAAK,CAAC,IAAI,EACV,GAAG,CAAA;;8DAEmD,OAAO;;;8DAGP,UAAU;;SAE/D,CACJ,EACD,aAAa,CACT,KAAK,CAAC,KAAK,EACX,GAAG,CAAA;;8DAEmD,KAAK;;;8DAGL,UAAU;;SAE/D,CACJ,CACJ,CAAC","sourcesContent":["import { css } from '@microsoft/fast-element';\nimport { display } from '@microsoft/fast-foundation';\nimport {\n Black15,\n Black91,\n DigitalGreenLight,\n PowerGreen,\n White\n} from '@ni/nimble-tokens/dist/styledictionary/js/tokens';\nimport { spinnerSmallHeight } from '../theme-provider/design-tokens';\nimport { Theme } from '../theme-provider/types';\nimport { themeBehavior } from '../utilities/style/theme';\nimport { ZIndexLevels } from '../utilities/style/types';\n\nexport const styles = css`\n ${display('inline-grid')}\n\n :host {\n height: ${spinnerSmallHeight};\n aspect-ratio: 1 / 1;\n }\n\n div.overlay {\n z-index: ${ZIndexLevels.zIndex1};\n margin: max(2px, 6.25%);\n grid-area: 1/1;\n }\n\n div.container {\n margin: max(2px, 6.25%);\n grid-area: 1/1;\n ${\n /**\n * At some spinner sizes / browser zoom levels, the spinner bits/squares appear to slightly overlap visually.\n * If we set a color with transparency on each bit, it'll look wrong in the overlapping region (since the opacity\n * combines and affects the color at the overlapping spot).\n * Currently all 3 themes use a color with opacity = 0.6, so that's applied here on the parent element instead,\n * which avoids that issue.\n */\n ''\n }\n opacity: 0.6;\n }\n\n :host([appearance='accent']) div.container {\n opacity: 1;\n }\n\n div.bit1,\n div.bit2 {\n background: var(--ni-private-spinner-bits-background-color);\n width: 50%;\n height: 50%;\n margin: auto;\n animation-duration: 1600ms;\n animation-iteration-count: infinite;\n animation-play-state: var(\n --ni-private-spinner-animation-play-state,\n running\n );\n animation-timing-function: cubic-bezier(0.65, 0, 0.35, 0);\n }\n\n div.bit1 {\n animation-name: ni-private-spinner-keyframes-1;\n }\n\n div.bit2 {\n animation-name: ni-private-spinner-keyframes-2;\n }\n\n @media (prefers-reduced-motion) {\n div.bit1,\n div.bit2 {\n animation-timing-function: ease-in-out, steps(1);\n animation-duration: 3200ms;\n }\n\n div.bit1 {\n animation-name: ni-private-spinner-no-motion-opacity-keyframes,\n ni-private-spinner-no-motion-transform-keyframes-1;\n }\n\n div.bit2 {\n animation-name: ni-private-spinner-no-motion-opacity-keyframes,\n ni-private-spinner-no-motion-transform-keyframes-2;\n }\n }\n\n @keyframes ni-private-spinner-keyframes-1 {\n 0%,\n 100% {\n transform: translate(-50%, 0);\n }\n\n 25% {\n transform: translate(50%, 0);\n }\n\n 50% {\n transform: translate(50%, 100%);\n }\n\n 75% {\n transform: translate(-50%, 100%);\n }\n }\n\n @keyframes ni-private-spinner-keyframes-2 {\n 0%,\n 100% {\n transform: translate(50%, 0);\n }\n\n 25% {\n transform: translate(-50%, 0);\n }\n\n 50% {\n transform: translate(-50%, -100%);\n }\n\n 75% {\n transform: translate(50%, -100%);\n }\n }\n\n @keyframes ni-private-spinner-no-motion-opacity-keyframes {\n 0%,\n 50%,\n 100% {\n opacity: 0;\n }\n\n 25%,\n 75% {\n opacity: 1;\n }\n }\n\n @keyframes ni-private-spinner-no-motion-transform-keyframes-1 {\n 0%,\n 100% {\n transform: translate(-50%, 0);\n }\n 50% {\n transform: translate(50%, 0);\n }\n }\n\n @keyframes ni-private-spinner-no-motion-transform-keyframes-2 {\n 0%,\n 100% {\n transform: translate(50%, 0);\n }\n\n 50% {\n transform: translate(-50%, 0);\n }\n }\n`.withBehaviors(\n themeBehavior(\n Theme.light,\n css`\n :host {\n --ni-private-spinner-bits-background-color: ${Black91};\n }\n :host([appearance='accent']) {\n --ni-private-spinner-bits-background-color: ${DigitalGreenLight};\n }\n `\n ),\n themeBehavior(\n Theme.dark,\n css`\n :host {\n --ni-private-spinner-bits-background-color: ${Black15};\n }\n :host([appearance='accent']) {\n --ni-private-spinner-bits-background-color: ${PowerGreen};\n }\n `\n ),\n themeBehavior(\n Theme.color,\n css`\n :host {\n --ni-private-spinner-bits-background-color: ${White};\n }\n :host([appearance='accent']) {\n --ni-private-spinner-bits-background-color: ${PowerGreen};\n }\n `\n )\n);\n"]}
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/spinner/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EACH,OAAO,EACP,OAAO,EACP,iBAAiB,EACjB,UAAU,EACV,KAAK,EACR,MAAM,kDAAkD,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;MACnB,OAAO,CAAC,aAAa,CAAC;;;kBAGV,kBAAkB;;;;;mBAKjB,YAAY,CAAC,OAAO;;;;;;;;UAQ7B;AACE;;;;;;GAMG;AACH,EACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwHP,CAAC,aAAa,CACX,aAAa,CACT,KAAK,CAAC,KAAK,EACX,GAAG,CAAA;;8DAEmD,OAAO;;;8DAGP,iBAAiB;;SAEtE,CACJ,EACD,aAAa,CACT,KAAK,CAAC,IAAI,EACV,GAAG,CAAA;;8DAEmD,OAAO;;;8DAGP,UAAU;;SAE/D,CACJ,EACD,aAAa,CACT,KAAK,CAAC,KAAK,EACX,GAAG,CAAA;;8DAEmD,KAAK;;;8DAGL,UAAU;;SAE/D,CACJ,CACJ,CAAC","sourcesContent":["import { css } from '@microsoft/fast-element';\nimport {\n Black15,\n Black91,\n DigitalGreenLight,\n PowerGreen,\n White\n} from '@ni/nimble-tokens/dist/styledictionary/js/tokens';\nimport { display } from '../utilities/style/display';\nimport { spinnerSmallHeight } from '../theme-provider/design-tokens';\nimport { Theme } from '../theme-provider/types';\nimport { themeBehavior } from '../utilities/style/theme';\nimport { ZIndexLevels } from '../utilities/style/types';\n\nexport const styles = css`\n ${display('inline-grid')}\n\n :host {\n height: ${spinnerSmallHeight};\n aspect-ratio: 1 / 1;\n }\n\n div.overlay {\n z-index: ${ZIndexLevels.zIndex1};\n margin: max(2px, 6.25%);\n grid-area: 1/1;\n }\n\n div.container {\n margin: max(2px, 6.25%);\n grid-area: 1/1;\n ${\n /**\n * At some spinner sizes / browser zoom levels, the spinner bits/squares appear to slightly overlap visually.\n * If we set a color with transparency on each bit, it'll look wrong in the overlapping region (since the opacity\n * combines and affects the color at the overlapping spot).\n * Currently all 3 themes use a color with opacity = 0.6, so that's applied here on the parent element instead,\n * which avoids that issue.\n */\n ''\n }\n opacity: 0.6;\n }\n\n :host([appearance='accent']) div.container {\n opacity: 1;\n }\n\n div.bit1,\n div.bit2 {\n background: var(--ni-private-spinner-bits-background-color);\n width: 50%;\n height: 50%;\n margin: auto;\n animation-duration: 1600ms;\n animation-iteration-count: infinite;\n animation-play-state: var(\n --ni-private-spinner-animation-play-state,\n running\n );\n animation-timing-function: cubic-bezier(0.65, 0, 0.35, 0);\n }\n\n div.bit1 {\n animation-name: ni-private-spinner-keyframes-1;\n }\n\n div.bit2 {\n animation-name: ni-private-spinner-keyframes-2;\n }\n\n @media (prefers-reduced-motion) {\n div.bit1,\n div.bit2 {\n animation-timing-function: ease-in-out, steps(1);\n animation-duration: 3200ms;\n }\n\n div.bit1 {\n animation-name: ni-private-spinner-no-motion-opacity-keyframes,\n ni-private-spinner-no-motion-transform-keyframes-1;\n }\n\n div.bit2 {\n animation-name: ni-private-spinner-no-motion-opacity-keyframes,\n ni-private-spinner-no-motion-transform-keyframes-2;\n }\n }\n\n @keyframes ni-private-spinner-keyframes-1 {\n 0%,\n 100% {\n transform: translate(-50%, 0);\n }\n\n 25% {\n transform: translate(50%, 0);\n }\n\n 50% {\n transform: translate(50%, 100%);\n }\n\n 75% {\n transform: translate(-50%, 100%);\n }\n }\n\n @keyframes ni-private-spinner-keyframes-2 {\n 0%,\n 100% {\n transform: translate(50%, 0);\n }\n\n 25% {\n transform: translate(-50%, 0);\n }\n\n 50% {\n transform: translate(-50%, -100%);\n }\n\n 75% {\n transform: translate(50%, -100%);\n }\n }\n\n @keyframes ni-private-spinner-no-motion-opacity-keyframes {\n 0%,\n 50%,\n 100% {\n opacity: 0;\n }\n\n 25%,\n 75% {\n opacity: 1;\n }\n }\n\n @keyframes ni-private-spinner-no-motion-transform-keyframes-1 {\n 0%,\n 100% {\n transform: translate(-50%, 0);\n }\n 50% {\n transform: translate(50%, 0);\n }\n }\n\n @keyframes ni-private-spinner-no-motion-transform-keyframes-2 {\n 0%,\n 100% {\n transform: translate(50%, 0);\n }\n\n 50% {\n transform: translate(-50%, 0);\n }\n }\n`.withBehaviors(\n themeBehavior(\n Theme.light,\n css`\n :host {\n --ni-private-spinner-bits-background-color: ${Black91};\n }\n :host([appearance='accent']) {\n --ni-private-spinner-bits-background-color: ${DigitalGreenLight};\n }\n `\n ),\n themeBehavior(\n Theme.dark,\n css`\n :host {\n --ni-private-spinner-bits-background-color: ${Black15};\n }\n :host([appearance='accent']) {\n --ni-private-spinner-bits-background-color: ${PowerGreen};\n }\n `\n ),\n themeBehavior(\n Theme.color,\n css`\n :host {\n --ni-private-spinner-bits-background-color: ${White};\n }\n :host([appearance='accent']) {\n --ni-private-spinner-bits-background-color: ${PowerGreen};\n }\n `\n )\n);\n"]}