@ni/nimble-components 21.4.0 → 21.5.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 (547) hide show
  1. package/dist/all-components-bundle.js +864 -73
  2. package/dist/all-components-bundle.js.map +1 -1
  3. package/dist/all-components-bundle.min.js +3598 -3450
  4. package/dist/all-components-bundle.min.js.map +1 -1
  5. package/dist/esm/all-components.js.map +1 -1
  6. package/dist/esm/anchor/index.js.map +1 -1
  7. package/dist/esm/anchor/styles.js.map +1 -1
  8. package/dist/esm/anchor/template.js.map +1 -1
  9. package/dist/esm/anchor/types.js.map +1 -1
  10. package/dist/esm/anchor-base/index.js.map +1 -1
  11. package/dist/esm/anchor-button/index.js.map +1 -1
  12. package/dist/esm/anchor-button/styles.js.map +1 -1
  13. package/dist/esm/anchor-button/template.js.map +1 -1
  14. package/dist/esm/anchor-button/types.js.map +1 -1
  15. package/dist/esm/anchor-menu-item/index.js.map +1 -1
  16. package/dist/esm/anchor-menu-item/styles.js.map +1 -1
  17. package/dist/esm/anchor-menu-item/template.js.map +1 -1
  18. package/dist/esm/anchor-tab/index.js.map +1 -1
  19. package/dist/esm/anchor-tab/styles.js.map +1 -1
  20. package/dist/esm/anchor-tab/template.js.map +1 -1
  21. package/dist/esm/anchor-tabs/index.js.map +1 -1
  22. package/dist/esm/anchor-tabs/styles.js.map +1 -1
  23. package/dist/esm/anchor-tabs/template.js.map +1 -1
  24. package/dist/esm/anchor-tree-item/index.js.map +1 -1
  25. package/dist/esm/anchor-tree-item/styles.js.map +1 -1
  26. package/dist/esm/anchor-tree-item/template.js.map +1 -1
  27. package/dist/esm/anchored-region/index.js.map +1 -1
  28. package/dist/esm/anchored-region/styles.js +6 -1
  29. package/dist/esm/anchored-region/styles.js.map +1 -1
  30. package/dist/esm/banner/index.js.map +1 -1
  31. package/dist/esm/banner/styles.js.map +1 -1
  32. package/dist/esm/banner/template.js.map +1 -1
  33. package/dist/esm/banner/types.js.map +1 -1
  34. package/dist/esm/breadcrumb/index.js.map +1 -1
  35. package/dist/esm/breadcrumb/styles.js.map +1 -1
  36. package/dist/esm/breadcrumb/types.js.map +1 -1
  37. package/dist/esm/breadcrumb-item/index.js.map +1 -1
  38. package/dist/esm/breadcrumb-item/styles.js.map +1 -1
  39. package/dist/esm/button/index.js.map +1 -1
  40. package/dist/esm/button/styles.js.map +1 -1
  41. package/dist/esm/button/types.js.map +1 -1
  42. package/dist/esm/card/index.js.map +1 -1
  43. package/dist/esm/card/styles.js.map +1 -1
  44. package/dist/esm/card/template.js.map +1 -1
  45. package/dist/esm/card-button/index.js.map +1 -1
  46. package/dist/esm/card-button/styles.js.map +1 -1
  47. package/dist/esm/checkbox/index.js.map +1 -1
  48. package/dist/esm/checkbox/styles.js.map +1 -1
  49. package/dist/esm/combobox/index.js.map +1 -1
  50. package/dist/esm/combobox/styles.js.map +1 -1
  51. package/dist/esm/combobox/template.js.map +1 -1
  52. package/dist/esm/combobox/types.js.map +1 -1
  53. package/dist/esm/dialog/index.js.map +1 -1
  54. package/dist/esm/dialog/styles.js.map +1 -1
  55. package/dist/esm/dialog/template.js.map +1 -1
  56. package/dist/esm/drawer/index.js.map +1 -1
  57. package/dist/esm/drawer/styles.js.map +1 -1
  58. package/dist/esm/drawer/template.js.map +1 -1
  59. package/dist/esm/drawer/types.js.map +1 -1
  60. package/dist/esm/icon-base/index.js.map +1 -1
  61. package/dist/esm/icon-base/styles.js.map +1 -1
  62. package/dist/esm/icon-base/template.js.map +1 -1
  63. package/dist/esm/icon-base/types.js.map +1 -1
  64. package/dist/esm/icons/add.js.map +1 -1
  65. package/dist/esm/icons/all-icons.js.map +1 -1
  66. package/dist/esm/icons/arrow-down-right-and-arrow-up-left.js.map +1 -1
  67. package/dist/esm/icons/arrow-down.js.map +1 -1
  68. package/dist/esm/icons/arrow-expander-down.js.map +1 -1
  69. package/dist/esm/icons/arrow-expander-left.js.map +1 -1
  70. package/dist/esm/icons/arrow-expander-right.js.map +1 -1
  71. package/dist/esm/icons/arrow-expander-up.js.map +1 -1
  72. package/dist/esm/icons/arrow-in-circle.js.map +1 -1
  73. package/dist/esm/icons/arrow-left-from-line.js.map +1 -1
  74. package/dist/esm/icons/arrow-out-circle.js.map +1 -1
  75. package/dist/esm/icons/arrow-partial-rotate-left.js.map +1 -1
  76. package/dist/esm/icons/arrow-right-to-line.js.map +1 -1
  77. package/dist/esm/icons/arrow-rotate-right.js.map +1 -1
  78. package/dist/esm/icons/arrow-u-rotate-left.js.map +1 -1
  79. package/dist/esm/icons/arrow-up-left-and-arrow-down-right.js.map +1 -1
  80. package/dist/esm/icons/arrow-up-right-from-square.js.map +1 -1
  81. package/dist/esm/icons/arrow-up.js.map +1 -1
  82. package/dist/esm/icons/arrows-maximize.js.map +1 -1
  83. package/dist/esm/icons/arrows-repeat.js.map +1 -1
  84. package/dist/esm/icons/at.js.map +1 -1
  85. package/dist/esm/icons/bars.js.map +1 -1
  86. package/dist/esm/icons/bell-and-comment.js.map +1 -1
  87. package/dist/esm/icons/bell-circle.js.map +1 -1
  88. package/dist/esm/icons/bell-solid-circle.js.map +1 -1
  89. package/dist/esm/icons/bell.js.map +1 -1
  90. package/dist/esm/icons/block-with-ribbon.js.map +1 -1
  91. package/dist/esm/icons/bold-b.js.map +1 -1
  92. package/dist/esm/icons/book-magnifying-glass.js.map +1 -1
  93. package/dist/esm/icons/calendar-check-lines.js.map +1 -1
  94. package/dist/esm/icons/calendar-day.js.map +1 -1
  95. package/dist/esm/icons/calendar.js.map +1 -1
  96. package/dist/esm/icons/chart-diagram-child-focus.js.map +1 -1
  97. package/dist/esm/icons/chart-diagram-parent-focus-two-child.js.map +1 -1
  98. package/dist/esm/icons/chart-diagram-parent-focus.js.map +1 -1
  99. package/dist/esm/icons/chart-diagram.js.map +1 -1
  100. package/dist/esm/icons/check-dot.js.map +1 -1
  101. package/dist/esm/icons/check-large.js.map +1 -1
  102. package/dist/esm/icons/check.js.map +1 -1
  103. package/dist/esm/icons/circle-broken.js.map +1 -1
  104. package/dist/esm/icons/circle-check.js.map +1 -1
  105. package/dist/esm/icons/circle-filled.js.map +1 -1
  106. package/dist/esm/icons/circle-partial-broken.js.map +1 -1
  107. package/dist/esm/icons/circle-slash.js.map +1 -1
  108. package/dist/esm/icons/circle-x.js.map +1 -1
  109. package/dist/esm/icons/circle.js.map +1 -1
  110. package/dist/esm/icons/clipboard.js.map +1 -1
  111. package/dist/esm/icons/clock-cog.js.map +1 -1
  112. package/dist/esm/icons/clock-exclamation.js.map +1 -1
  113. package/dist/esm/icons/clock-triangle.js.map +1 -1
  114. package/dist/esm/icons/clock.js.map +1 -1
  115. package/dist/esm/icons/clone.js.map +1 -1
  116. package/dist/esm/icons/cloud-upload.js.map +1 -1
  117. package/dist/esm/icons/cloud-with-arrow.js.map +1 -1
  118. package/dist/esm/icons/cloud.js.map +1 -1
  119. package/dist/esm/icons/cog-database-inset.js.map +1 -1
  120. package/dist/esm/icons/cog-database.js.map +1 -1
  121. package/dist/esm/icons/cog-small-cog.js.map +1 -1
  122. package/dist/esm/icons/cog-zoomed.js.map +1 -1
  123. package/dist/esm/icons/cog.js.map +1 -1
  124. package/dist/esm/icons/comment.js.map +1 -1
  125. package/dist/esm/icons/computer-and-monitor.js.map +1 -1
  126. package/dist/esm/icons/copy-text.js.map +1 -1
  127. package/dist/esm/icons/copy.js.map +1 -1
  128. package/dist/esm/icons/dashboard-builder-legend.js.map +1 -1
  129. package/dist/esm/icons/dashboard-builder-templates.js.map +1 -1
  130. package/dist/esm/icons/dashboard-builder-tile.js.map +1 -1
  131. package/dist/esm/icons/dashboard-builder.js.map +1 -1
  132. package/dist/esm/icons/database-check.js.map +1 -1
  133. package/dist/esm/icons/database.js.map +1 -1
  134. package/dist/esm/icons/desktop.js.map +1 -1
  135. package/dist/esm/icons/donut-chart.js.map +1 -1
  136. package/dist/esm/icons/dot-solid-dot-stroke-measurement.js.map +1 -1
  137. package/dist/esm/icons/dot-solid-dot-stroke.js.map +1 -1
  138. package/dist/esm/icons/down-right-from-square.js.map +1 -1
  139. package/dist/esm/icons/download.js.map +1 -1
  140. package/dist/esm/icons/electronic-chip-zoomed.js.map +1 -1
  141. package/dist/esm/icons/exclamation-mark.js.map +1 -1
  142. package/dist/esm/icons/eye.js.map +1 -1
  143. package/dist/esm/icons/fancy-a.js.map +1 -1
  144. package/dist/esm/icons/file-arrow-curved-right.js.map +1 -1
  145. package/dist/esm/icons/file-drawer.js.map +1 -1
  146. package/dist/esm/icons/file-search.js.map +1 -1
  147. package/dist/esm/icons/file.js.map +1 -1
  148. package/dist/esm/icons/filter.js.map +1 -1
  149. package/dist/esm/icons/floppy-disk-checkmark.js.map +1 -1
  150. package/dist/esm/icons/floppy-disk-pen.js.map +1 -1
  151. package/dist/esm/icons/floppy-disk-star-arrow-right.js.map +1 -1
  152. package/dist/esm/icons/floppy-disk-three-dots.js.map +1 -1
  153. package/dist/esm/icons/floppy-disk.js.map +1 -1
  154. package/dist/esm/icons/folder-open.js.map +1 -1
  155. package/dist/esm/icons/folder.js.map +1 -1
  156. package/dist/esm/icons/forward-slash.js.map +1 -1
  157. package/dist/esm/icons/four-dots-square.js.map +1 -1
  158. package/dist/esm/icons/function.js.map +1 -1
  159. package/dist/esm/icons/gauge-simple.js.map +1 -1
  160. package/dist/esm/icons/grid-three-by-three.js.map +1 -1
  161. package/dist/esm/icons/grid-two-by-two.js.map +1 -1
  162. package/dist/esm/icons/hammer.js.map +1 -1
  163. package/dist/esm/icons/hashtag.js.map +1 -1
  164. package/dist/esm/icons/home.js.map +1 -1
  165. package/dist/esm/icons/hourglass.js.map +1 -1
  166. package/dist/esm/icons/indent.js.map +1 -1
  167. package/dist/esm/icons/indeterminant-checkbox.js.map +1 -1
  168. package/dist/esm/icons/info-circle.js.map +1 -1
  169. package/dist/esm/icons/info.js.map +1 -1
  170. package/dist/esm/icons/italic-i.js.map +1 -1
  171. package/dist/esm/icons/key.js.map +1 -1
  172. package/dist/esm/icons/laptop.js.map +1 -1
  173. package/dist/esm/icons/layer-group.js.map +1 -1
  174. package/dist/esm/icons/lightning-bolt.js.map +1 -1
  175. package/dist/esm/icons/link-cancel.js.map +1 -1
  176. package/dist/esm/icons/link.js.map +1 -1
  177. package/dist/esm/icons/list-tree-database.js.map +1 -1
  178. package/dist/esm/icons/list-tree.js.map +1 -1
  179. package/dist/esm/icons/list.js.map +1 -1
  180. package/dist/esm/icons/lock.js.map +1 -1
  181. package/dist/esm/icons/magnifying-glass.js.map +1 -1
  182. package/dist/esm/icons/markdown.js.map +1 -1
  183. package/dist/esm/icons/minus-wide.js.map +1 -1
  184. package/dist/esm/icons/minus.js.map +1 -1
  185. package/dist/esm/icons/mobile.js.map +1 -1
  186. package/dist/esm/icons/ni.js.map +1 -1
  187. package/dist/esm/icons/notebook.js.map +1 -1
  188. package/dist/esm/icons/number-list.js.map +1 -1
  189. package/dist/esm/icons/outdent.js.map +1 -1
  190. package/dist/esm/icons/paste.js.map +1 -1
  191. package/dist/esm/icons/pause.js.map +1 -1
  192. package/dist/esm/icons/pencil.js.map +1 -1
  193. package/dist/esm/icons/play.js.map +1 -1
  194. package/dist/esm/icons/pot-with-lid.js.map +1 -1
  195. package/dist/esm/icons/question.js.map +1 -1
  196. package/dist/esm/icons/rectangle-check-lines.js.map +1 -1
  197. package/dist/esm/icons/running-arrow.js.map +1 -1
  198. package/dist/esm/icons/screen-check-lines-calendar.js.map +1 -1
  199. package/dist/esm/icons/screen-check-lines.js.map +1 -1
  200. package/dist/esm/icons/server.js.map +1 -1
  201. package/dist/esm/icons/share-nodes.js.map +1 -1
  202. package/dist/esm/icons/shield-check.js.map +1 -1
  203. package/dist/esm/icons/shield-xmark.js.map +1 -1
  204. package/dist/esm/icons/signal-bars.js.map +1 -1
  205. package/dist/esm/icons/sine-graph.js.map +1 -1
  206. package/dist/esm/icons/skip-arrow.js.map +1 -1
  207. package/dist/esm/icons/spinner.js.map +1 -1
  208. package/dist/esm/icons/square-check.js.map +1 -1
  209. package/dist/esm/icons/square-t.js.map +1 -1
  210. package/dist/esm/icons/stop-square.js.map +1 -1
  211. package/dist/esm/icons/systemlink.js.map +1 -1
  212. package/dist/esm/icons/t.js.map +1 -1
  213. package/dist/esm/icons/tablet.js.map +1 -1
  214. package/dist/esm/icons/tag.js.map +1 -1
  215. package/dist/esm/icons/tags.js.map +1 -1
  216. package/dist/esm/icons/target-crosshairs-progress.js.map +1 -1
  217. package/dist/esm/icons/target-crosshairs.js.map +1 -1
  218. package/dist/esm/icons/three-dots-line.js.map +1 -1
  219. package/dist/esm/icons/three-vertical-lines.js.map +1 -1
  220. package/dist/esm/icons/thumbtack.js.map +1 -1
  221. package/dist/esm/icons/tile-size.js.map +1 -1
  222. package/dist/esm/icons/times.js.map +1 -1
  223. package/dist/esm/icons/trash.js.map +1 -1
  224. package/dist/esm/icons/triangle-filled.js.map +1 -1
  225. package/dist/esm/icons/triangle-two-lines-horizontal.js.map +1 -1
  226. package/dist/esm/icons/triangle.js.map +1 -1
  227. package/dist/esm/icons/true-false-rectangle.js.map +1 -1
  228. package/dist/esm/icons/two-squares-in-brackets.js.map +1 -1
  229. package/dist/esm/icons/two-triangles-between-lines.js.map +1 -1
  230. package/dist/esm/icons/unlink.js.map +1 -1
  231. package/dist/esm/icons/unlock.js.map +1 -1
  232. package/dist/esm/icons/up-right-from-square.js.map +1 -1
  233. package/dist/esm/icons/upload.js.map +1 -1
  234. package/dist/esm/icons/user.js.map +1 -1
  235. package/dist/esm/icons/watch.js.map +1 -1
  236. package/dist/esm/icons/waveform.js.map +1 -1
  237. package/dist/esm/icons/webvi-custom.js.map +1 -1
  238. package/dist/esm/icons/webvi-host.js.map +1 -1
  239. package/dist/esm/icons/window-code.js.map +1 -1
  240. package/dist/esm/icons/window-text.js.map +1 -1
  241. package/dist/esm/icons/wrench-hammer.js.map +1 -1
  242. package/dist/esm/icons/xmark-check.js.map +1 -1
  243. package/dist/esm/icons/xmark.js.map +1 -1
  244. package/dist/esm/label-provider/base/index.js.map +1 -1
  245. package/dist/esm/label-provider/core/index.d.ts +6 -0
  246. package/dist/esm/label-provider/core/index.js +10 -2
  247. package/dist/esm/label-provider/core/index.js.map +1 -1
  248. package/dist/esm/label-provider/core/label-token-defaults.js +3 -1
  249. package/dist/esm/label-provider/core/label-token-defaults.js.map +1 -1
  250. package/dist/esm/label-provider/core/label-tokens.d.ts +2 -0
  251. package/dist/esm/label-provider/core/label-tokens.js +8 -0
  252. package/dist/esm/label-provider/core/label-tokens.js.map +1 -1
  253. package/dist/esm/label-provider/rich-text/index.js.map +1 -1
  254. package/dist/esm/label-provider/rich-text/label-token-defaults.js.map +1 -1
  255. package/dist/esm/label-provider/rich-text/label-tokens.js.map +1 -1
  256. package/dist/esm/label-provider/table/index.js.map +1 -1
  257. package/dist/esm/label-provider/table/label-token-defaults.js.map +1 -1
  258. package/dist/esm/label-provider/table/label-tokens.js.map +1 -1
  259. package/dist/esm/list-option/index.js.map +1 -1
  260. package/dist/esm/list-option/styles.js.map +1 -1
  261. package/dist/esm/list-option/template.js.map +1 -1
  262. package/dist/esm/listbox/index.js.map +1 -1
  263. package/dist/esm/listbox/styles.js.map +1 -1
  264. package/dist/esm/mapping/base/index.js.map +1 -1
  265. package/dist/esm/mapping/base/template.js.map +1 -1
  266. package/dist/esm/mapping/base/types.js.map +1 -1
  267. package/dist/esm/mapping/icon/index.js.map +1 -1
  268. package/dist/esm/mapping/spinner/index.js.map +1 -1
  269. package/dist/esm/mapping/text/index.js.map +1 -1
  270. package/dist/esm/mapping/user/index.js.map +1 -1
  271. package/dist/esm/menu/index.js.map +1 -1
  272. package/dist/esm/menu/styles.js.map +1 -1
  273. package/dist/esm/menu-button/index.js.map +1 -1
  274. package/dist/esm/menu-button/styles.js.map +1 -1
  275. package/dist/esm/menu-button/template.js.map +1 -1
  276. package/dist/esm/menu-button/types.js.map +1 -1
  277. package/dist/esm/menu-item/index.js.map +1 -1
  278. package/dist/esm/menu-item/styles.js.map +1 -1
  279. package/dist/esm/number-field/index.js.map +1 -1
  280. package/dist/esm/number-field/styles.js.map +1 -1
  281. package/dist/esm/number-field/types.js.map +1 -1
  282. package/dist/esm/patterns/button/styles.js.map +1 -1
  283. package/dist/esm/patterns/button/types.js.map +1 -1
  284. package/dist/esm/patterns/dialog/types.js.map +1 -1
  285. package/dist/esm/patterns/dropdown/styles.js +0 -4
  286. package/dist/esm/patterns/dropdown/styles.js.map +1 -1
  287. package/dist/esm/patterns/dropdown/types.js.map +1 -1
  288. package/dist/esm/patterns/error/styles.js.map +1 -1
  289. package/dist/esm/patterns/error/template.js.map +1 -1
  290. package/dist/esm/patterns/error/types.js.map +1 -1
  291. package/dist/esm/patterns/expand-collapse/styles.js.map +1 -1
  292. package/dist/esm/radio/index.js.map +1 -1
  293. package/dist/esm/radio/styles.js.map +1 -1
  294. package/dist/esm/radio-group/index.js.map +1 -1
  295. package/dist/esm/radio-group/styles.js.map +1 -1
  296. package/dist/esm/rich-text/base/index.js.map +1 -1
  297. package/dist/esm/rich-text/base/types.js.map +1 -1
  298. package/dist/esm/rich-text/editor/index.js.map +1 -1
  299. package/dist/esm/rich-text/editor/models/create-tiptap-editor.js.map +1 -1
  300. package/dist/esm/rich-text/editor/styles.js.map +1 -1
  301. package/dist/esm/rich-text/editor/template.js.map +1 -1
  302. package/dist/esm/rich-text/editor/testing/rich-text-editor-utils.js.map +1 -1
  303. package/dist/esm/rich-text/editor/testing/rich-text-editor.pageobject.js.map +1 -1
  304. package/dist/esm/rich-text/editor/testing/types.js.map +1 -1
  305. package/dist/esm/rich-text/editor/types.js.map +1 -1
  306. package/dist/esm/rich-text/mention-listbox/index.js.map +1 -1
  307. package/dist/esm/rich-text/mention-listbox/styles.js.map +1 -1
  308. package/dist/esm/rich-text/mention-listbox/template.js.map +1 -1
  309. package/dist/esm/rich-text/mention-listbox/types.js.map +1 -1
  310. package/dist/esm/rich-text/models/configuration.js.map +1 -1
  311. package/dist/esm/rich-text/models/editor-configuration.js.map +1 -1
  312. package/dist/esm/rich-text/models/markdown-parser-mention-configuration.js.map +1 -1
  313. package/dist/esm/rich-text/models/markdown-parser.js.map +1 -1
  314. package/dist/esm/rich-text/models/markdown-serializer.js.map +1 -1
  315. package/dist/esm/rich-text/models/mention-extension-configuration.js.map +1 -1
  316. package/dist/esm/rich-text/models/rich-text-tracker.js.map +1 -1
  317. package/dist/esm/rich-text/models/rich-text-validator.js.map +1 -1
  318. package/dist/esm/rich-text/models/testing/markdown-parser-utils.js.map +1 -1
  319. package/dist/esm/rich-text/viewer/index.js.map +1 -1
  320. package/dist/esm/rich-text/viewer/styles.js.map +1 -1
  321. package/dist/esm/rich-text/viewer/template.js.map +1 -1
  322. package/dist/esm/rich-text/viewer/testing/rich-text-viewer.pageobject.js.map +1 -1
  323. package/dist/esm/rich-text-mention/base/index.js.map +1 -1
  324. package/dist/esm/rich-text-mention/base/models/mapping-config.js.map +1 -1
  325. package/dist/esm/rich-text-mention/base/models/mention-internals.js.map +1 -1
  326. package/dist/esm/rich-text-mention/base/models/mention-validator.js.map +1 -1
  327. package/dist/esm/rich-text-mention/base/template.js.map +1 -1
  328. package/dist/esm/rich-text-mention/base/types.js.map +1 -1
  329. package/dist/esm/rich-text-mention/base/view/index.js.map +1 -1
  330. package/dist/esm/rich-text-mention/users/index.js.map +1 -1
  331. package/dist/esm/rich-text-mention/users/models/mapping-user-config.js.map +1 -1
  332. package/dist/esm/rich-text-mention/users/models/rich-text-mention-users-validator.js.map +1 -1
  333. package/dist/esm/rich-text-mention/users/view/index.js.map +1 -1
  334. package/dist/esm/rich-text-mention/users/view/styles.js.map +1 -1
  335. package/dist/esm/rich-text-mention/users/view/template.js.map +1 -1
  336. package/dist/esm/rich-text-mention/users/view/testing/rich-text-mention-users-view.pageobject.js.map +1 -1
  337. package/dist/esm/select/index.d.ts +251 -7
  338. package/dist/esm/select/index.js +653 -19
  339. package/dist/esm/select/index.js.map +1 -1
  340. package/dist/esm/select/models/select-form-associated.d.ts +16 -0
  341. package/dist/esm/select/models/select-form-associated.js +19 -0
  342. package/dist/esm/select/models/select-form-associated.js.map +1 -0
  343. package/dist/esm/select/styles.js +89 -1
  344. package/dist/esm/select/styles.js.map +1 -1
  345. package/dist/esm/select/template.js +71 -37
  346. package/dist/esm/select/template.js.map +1 -1
  347. package/dist/esm/select/testing/select.pageobject.d.ts +32 -0
  348. package/dist/esm/select/testing/select.pageobject.js +128 -0
  349. package/dist/esm/select/testing/select.pageobject.js.map +1 -0
  350. package/dist/esm/select/types.d.ts +9 -0
  351. package/dist/esm/select/types.js +8 -0
  352. package/dist/esm/select/types.js.map +1 -1
  353. package/dist/esm/spinner/index.js.map +1 -1
  354. package/dist/esm/spinner/styles.js.map +1 -1
  355. package/dist/esm/spinner/template.js.map +1 -1
  356. package/dist/esm/spinner/types.js.map +1 -1
  357. package/dist/esm/switch/index.js.map +1 -1
  358. package/dist/esm/switch/styles.js.map +1 -1
  359. package/dist/esm/switch/template.js.map +1 -1
  360. package/dist/esm/tab/index.js.map +1 -1
  361. package/dist/esm/tab/styles.js.map +1 -1
  362. package/dist/esm/tab-panel/index.js.map +1 -1
  363. package/dist/esm/tab-panel/styles.js.map +1 -1
  364. package/dist/esm/table/components/cell/index.js.map +1 -1
  365. package/dist/esm/table/components/cell/styles.js.map +1 -1
  366. package/dist/esm/table/components/cell/template.js.map +1 -1
  367. package/dist/esm/table/components/group-row/index.js.map +1 -1
  368. package/dist/esm/table/components/group-row/styles.js.map +1 -1
  369. package/dist/esm/table/components/group-row/template.js.map +1 -1
  370. package/dist/esm/table/components/header/index.js.map +1 -1
  371. package/dist/esm/table/components/header/styles.js.map +1 -1
  372. package/dist/esm/table/components/header/template.js.map +1 -1
  373. package/dist/esm/table/components/row/index.js.map +1 -1
  374. package/dist/esm/table/components/row/styles.js.map +1 -1
  375. package/dist/esm/table/components/row/template.js.map +1 -1
  376. package/dist/esm/table/index.js.map +1 -1
  377. package/dist/esm/table/models/array-to-tree.js.map +1 -1
  378. package/dist/esm/table/models/data-hierarchy-manager.js.map +1 -1
  379. package/dist/esm/table/models/expansion-manager.js.map +1 -1
  380. package/dist/esm/table/models/interactive-selection-manager.js.map +1 -1
  381. package/dist/esm/table/models/selection-managers/disabled-selection-manager.js.map +1 -1
  382. package/dist/esm/table/models/selection-managers/multi-selection-manager.js.map +1 -1
  383. package/dist/esm/table/models/selection-managers/selection-manager-base.js.map +1 -1
  384. package/dist/esm/table/models/selection-managers/single-selection-manager.js.map +1 -1
  385. package/dist/esm/table/models/sort-operations.js.map +1 -1
  386. package/dist/esm/table/models/table-layout-manager.js.map +1 -1
  387. package/dist/esm/table/models/table-update-tracker.js.map +1 -1
  388. package/dist/esm/table/models/table-validator.js.map +1 -1
  389. package/dist/esm/table/models/virtualizer.js.map +1 -1
  390. package/dist/esm/table/styles.js.map +1 -1
  391. package/dist/esm/table/template.js.map +1 -1
  392. package/dist/esm/table/testing/table.pageobject.js.map +1 -1
  393. package/dist/esm/table/types.js.map +1 -1
  394. package/dist/esm/table-column/anchor/cell-view/index.js.map +1 -1
  395. package/dist/esm/table-column/anchor/cell-view/styles.js.map +1 -1
  396. package/dist/esm/table-column/anchor/cell-view/template.js.map +1 -1
  397. package/dist/esm/table-column/anchor/index.js.map +1 -1
  398. package/dist/esm/table-column/base/cell-view/index.js.map +1 -1
  399. package/dist/esm/table-column/base/cell-view/template.js.map +1 -1
  400. package/dist/esm/table-column/base/group-header-view/index.js.map +1 -1
  401. package/dist/esm/table-column/base/group-header-view/template.js.map +1 -1
  402. package/dist/esm/table-column/base/index.js.map +1 -1
  403. package/dist/esm/table-column/base/models/column-internals.js.map +1 -1
  404. package/dist/esm/table-column/base/models/column-validator.js.map +1 -1
  405. package/dist/esm/table-column/base/styles.js.map +1 -1
  406. package/dist/esm/table-column/base/template.js.map +1 -1
  407. package/dist/esm/table-column/base/types.js.map +1 -1
  408. package/dist/esm/table-column/date-text/cell-view/index.js.map +1 -1
  409. package/dist/esm/table-column/date-text/group-header-view/index.js.map +1 -1
  410. package/dist/esm/table-column/date-text/index.js.map +1 -1
  411. package/dist/esm/table-column/date-text/models/format-helper.js.map +1 -1
  412. package/dist/esm/table-column/date-text/models/table-column-date-text-validator.js.map +1 -1
  413. package/dist/esm/table-column/date-text/testing/table-column-date-text.pageobject.js.map +1 -1
  414. package/dist/esm/table-column/date-text/types.js.map +1 -1
  415. package/dist/esm/table-column/duration-text/cell-view/index.js.map +1 -1
  416. package/dist/esm/table-column/duration-text/group-header-view/index.js.map +1 -1
  417. package/dist/esm/table-column/duration-text/index.js.map +1 -1
  418. package/dist/esm/table-column/duration-text/models/duration-formatter.js.map +1 -1
  419. package/dist/esm/table-column/duration-text/testing/table-column-duration-text.pageobject.js.map +1 -1
  420. package/dist/esm/table-column/enum-base/index.js.map +1 -1
  421. package/dist/esm/table-column/enum-base/models/mapping-config.js.map +1 -1
  422. package/dist/esm/table-column/enum-base/models/mapping-icon-config.js.map +1 -1
  423. package/dist/esm/table-column/enum-base/models/mapping-key-resolver.js.map +1 -1
  424. package/dist/esm/table-column/enum-base/models/mapping-spinner-config.js.map +1 -1
  425. package/dist/esm/table-column/enum-base/models/mapping-text-config.js.map +1 -1
  426. package/dist/esm/table-column/enum-base/models/table-column-enum-base-validator.js.map +1 -1
  427. package/dist/esm/table-column/enum-base/styles.js.map +1 -1
  428. package/dist/esm/table-column/enum-base/template.js.map +1 -1
  429. package/dist/esm/table-column/enum-base/types.js.map +1 -1
  430. package/dist/esm/table-column/enum-text/cell-view/index.js.map +1 -1
  431. package/dist/esm/table-column/enum-text/group-header-view/index.js.map +1 -1
  432. package/dist/esm/table-column/enum-text/index.js.map +1 -1
  433. package/dist/esm/table-column/enum-text/models/table-column-enum-text-validator.js.map +1 -1
  434. package/dist/esm/table-column/icon/cell-view/index.js.map +1 -1
  435. package/dist/esm/table-column/icon/cell-view/template.js.map +1 -1
  436. package/dist/esm/table-column/icon/group-header-view/index.js.map +1 -1
  437. package/dist/esm/table-column/icon/group-header-view/styles.js.map +1 -1
  438. package/dist/esm/table-column/icon/group-header-view/template.js.map +1 -1
  439. package/dist/esm/table-column/icon/index.js.map +1 -1
  440. package/dist/esm/table-column/icon/models/table-column-icon-validator.js.map +1 -1
  441. package/dist/esm/table-column/mixins/fractional-width-column.js.map +1 -1
  442. package/dist/esm/table-column/mixins/groupable-column.js.map +1 -1
  443. package/dist/esm/table-column/number-text/cell-view/index.js.map +1 -1
  444. package/dist/esm/table-column/number-text/group-header-view/index.js.map +1 -1
  445. package/dist/esm/table-column/number-text/index.js.map +1 -1
  446. package/dist/esm/table-column/number-text/models/number-text-unit-format.js.map +1 -1
  447. package/dist/esm/table-column/number-text/models/table-column-number-text-validator.js.map +1 -1
  448. package/dist/esm/table-column/number-text/template.js.map +1 -1
  449. package/dist/esm/table-column/number-text/types.js.map +1 -1
  450. package/dist/esm/table-column/testing/table-column-formatted-text.pageobject.js.map +1 -1
  451. package/dist/esm/table-column/text/cell-view/index.js.map +1 -1
  452. package/dist/esm/table-column/text/group-header-view/index.js.map +1 -1
  453. package/dist/esm/table-column/text/index.js.map +1 -1
  454. package/dist/esm/table-column/text-base/cell-view/index.js.map +1 -1
  455. package/dist/esm/table-column/text-base/cell-view/styles.js.map +1 -1
  456. package/dist/esm/table-column/text-base/cell-view/template.js.map +1 -1
  457. package/dist/esm/table-column/text-base/cell-view/types.js.map +1 -1
  458. package/dist/esm/table-column/text-base/group-header-view/index.js.map +1 -1
  459. package/dist/esm/table-column/text-base/group-header-view/styles.js.map +1 -1
  460. package/dist/esm/table-column/text-base/group-header-view/template.js.map +1 -1
  461. package/dist/esm/table-column/text-base/index.js.map +1 -1
  462. package/dist/esm/tabs/index.js.map +1 -1
  463. package/dist/esm/tabs/styles.js.map +1 -1
  464. package/dist/esm/tabs-toolbar/index.js.map +1 -1
  465. package/dist/esm/tabs-toolbar/styles.js.map +1 -1
  466. package/dist/esm/tabs-toolbar/template.js.map +1 -1
  467. package/dist/esm/testing/async-helpers.js.map +1 -1
  468. package/dist/esm/text-area/index.js.map +1 -1
  469. package/dist/esm/text-area/styles.js.map +1 -1
  470. package/dist/esm/text-area/template.js.map +1 -1
  471. package/dist/esm/text-area/types.js.map +1 -1
  472. package/dist/esm/text-field/index.js.map +1 -1
  473. package/dist/esm/text-field/styles.js.map +1 -1
  474. package/dist/esm/text-field/types.js.map +1 -1
  475. package/dist/esm/theme-provider/design-token-comments.js.map +1 -1
  476. package/dist/esm/theme-provider/design-token-names.js.map +1 -1
  477. package/dist/esm/theme-provider/design-tokens-static.js.map +1 -1
  478. package/dist/esm/theme-provider/design-tokens.js.map +1 -1
  479. package/dist/esm/theme-provider/index.js.map +1 -1
  480. package/dist/esm/theme-provider/styles.js.map +1 -1
  481. package/dist/esm/theme-provider/template.js.map +1 -1
  482. package/dist/esm/theme-provider/types.js.map +1 -1
  483. package/dist/esm/toggle-button/index.js.map +1 -1
  484. package/dist/esm/toggle-button/styles.js.map +1 -1
  485. package/dist/esm/toggle-button/template.js.map +1 -1
  486. package/dist/esm/toggle-button/types.js.map +1 -1
  487. package/dist/esm/toolbar/index.js.map +1 -1
  488. package/dist/esm/toolbar/styles.js.map +1 -1
  489. package/dist/esm/tooltip/index.js.map +1 -1
  490. package/dist/esm/tooltip/styles.js.map +1 -1
  491. package/dist/esm/tooltip/template.js.map +1 -1
  492. package/dist/esm/tooltip/types.js.map +1 -1
  493. package/dist/esm/tree-item/index.js.map +1 -1
  494. package/dist/esm/tree-item/styles.js.map +1 -1
  495. package/dist/esm/tree-view/index.js.map +1 -1
  496. package/dist/esm/tree-view/styles.js.map +1 -1
  497. package/dist/esm/tree-view/template.js.map +1 -1
  498. package/dist/esm/tree-view/types.js.map +1 -1
  499. package/dist/esm/unit/base/template.js.map +1 -1
  500. package/dist/esm/unit/base/unit.js.map +1 -1
  501. package/dist/esm/unit/byte/index.js.map +1 -1
  502. package/dist/esm/unit/volt/index.js.map +1 -1
  503. package/dist/esm/utilities/directive/overflow.js.map +1 -1
  504. package/dist/esm/utilities/models/converter.js.map +1 -1
  505. package/dist/esm/utilities/models/document-element-lang.js.map +1 -1
  506. package/dist/esm/utilities/models/string-normalizers.js.map +1 -1
  507. package/dist/esm/utilities/models/tracker.js.map +1 -1
  508. package/dist/esm/utilities/models/update-tracker.js.map +1 -1
  509. package/dist/esm/utilities/models/validator.js.map +1 -1
  510. package/dist/esm/utilities/style/accessibly-hidden.js.map +1 -1
  511. package/dist/esm/utilities/style/appearance.js.map +1 -1
  512. package/dist/esm/utilities/style/colors.js.map +1 -1
  513. package/dist/esm/utilities/style/direction.js.map +1 -1
  514. package/dist/esm/utilities/style/focus.js.map +1 -1
  515. package/dist/esm/utilities/style/multivalue-property-stylesheet-behavior.js.map +1 -1
  516. package/dist/esm/utilities/style/prefers-reduced-motion.js.map +1 -1
  517. package/dist/esm/utilities/style/theme.js.map +1 -1
  518. package/dist/esm/utilities/style/types.js.map +1 -1
  519. package/dist/esm/utilities/style/user-select.js.map +1 -1
  520. package/dist/esm/utilities/unit-format/decimal-unit-format.js.map +1 -1
  521. package/dist/esm/utilities/unit-format/default-unit-format.js.map +1 -1
  522. package/dist/esm/utilities/unit-format/scaled-unit/scaled-unit.js.map +1 -1
  523. package/dist/esm/utilities/unit-format/scaled-unit-format/intl-number-format-scaled-unit-format.js.map +1 -1
  524. package/dist/esm/utilities/unit-format/scaled-unit-format/manually-translated-scaled-unit-format.js.map +1 -1
  525. package/dist/esm/utilities/unit-format/scaled-unit-format/scaled-unit-format.js.map +1 -1
  526. package/dist/esm/utilities/unit-format/unit-format.js.map +1 -1
  527. package/dist/esm/utilities/unit-format/unit-scale/byte-1024-unit-scale.js.map +1 -1
  528. package/dist/esm/utilities/unit-format/unit-scale/byte-unit-scale.js.map +1 -1
  529. package/dist/esm/utilities/unit-format/unit-scale/passthrough-unit-scale.js.map +1 -1
  530. package/dist/esm/utilities/unit-format/unit-scale/unit-scale.js.map +1 -1
  531. package/dist/esm/utilities/unit-format/unit-scale/utilities/metrix-prefixes.js.map +1 -1
  532. package/dist/esm/utilities/unit-format/unit-scale/volt-unit-scale.js.map +1 -1
  533. package/dist/esm/utilities/wait-until-custom-elements-defined-async.js.map +1 -1
  534. package/dist/esm/wafer-map/index.js.map +1 -1
  535. package/dist/esm/wafer-map/modules/computations.js.map +1 -1
  536. package/dist/esm/wafer-map/modules/data-manager.js.map +1 -1
  537. package/dist/esm/wafer-map/modules/event-coordinator.js.map +1 -1
  538. package/dist/esm/wafer-map/modules/hover-handler.js.map +1 -1
  539. package/dist/esm/wafer-map/modules/prerendering.js.map +1 -1
  540. package/dist/esm/wafer-map/modules/rendering.js.map +1 -1
  541. package/dist/esm/wafer-map/modules/wafer-map-update-tracker.js.map +1 -1
  542. package/dist/esm/wafer-map/modules/wafer-map-validator.js.map +1 -1
  543. package/dist/esm/wafer-map/modules/zoom-handler.js.map +1 -1
  544. package/dist/esm/wafer-map/styles.js.map +1 -1
  545. package/dist/esm/wafer-map/template.js.map +1 -1
  546. package/dist/esm/wafer-map/types.js.map +1 -1
  547. package/package.json +5 -2
@@ -1,75 +1,708 @@
1
1
  import { __decorate } from "tslib";
2
- import { attr, html, observable } from '@microsoft/fast-element';
3
- import { DesignSystem, Select as FoundationSelect } from '@microsoft/fast-foundation';
2
+ // Based on: https://github.com/microsoft/fast/blob/%40microsoft/fast-foundation_v2.49.5/packages/web-components/fast-foundation/src/select/select.ts
3
+ import { attr, html, observable, Observable, volatile } from '@microsoft/fast-element';
4
+ import { DesignSystem, Select as FoundationSelect, SelectPosition, applyMixins, StartEnd, DelegatesARIASelect, Listbox } from '@microsoft/fast-foundation';
5
+ import { keyArrowDown, keyArrowUp, keyEnd, keyEnter, keyEscape, keyHome, keySpace, keyTab, uniqueId } from '@microsoft/fast-web-utilities';
4
6
  import { arrowExpanderDown16X16 } from '@ni/nimble-tokens/dist/icons/js';
5
7
  import { styles } from './styles';
6
8
  import { DropdownAppearance } from '../patterns/dropdown/types';
7
9
  import { errorTextTemplate } from '../patterns/error/template';
8
10
  import { iconExclamationMarkTag } from '../icons/exclamation-mark';
9
11
  import { template } from './template';
12
+ import { FilterMode } from './types';
13
+ import { diacriticInsensitiveStringNormalizer } from '../utilities/models/string-normalizers';
14
+ import { FormAssociatedSelect } from './models/select-form-associated';
10
15
  /**
11
- * A nimble-styled HTML select
16
+ * A nimble-styled HTML select.
12
17
  */
13
- export class Select extends FoundationSelect {
18
+ export class Select extends FormAssociatedSelect {
14
19
  constructor() {
15
20
  super(...arguments);
16
21
  this.appearance = DropdownAppearance.underline;
17
22
  this.errorVisible = false;
23
+ this.filterMode = FilterMode.none;
24
+ /**
25
+ * @internal
26
+ */
27
+ this.open = false;
28
+ /**
29
+ * The unique id for the internal listbox element.
30
+ *
31
+ * @internal
32
+ */
33
+ this.listboxId = uniqueId('listbox-');
18
34
  /** @internal */
19
35
  this.hasOverflow = false;
36
+ /**
37
+ * @internal
38
+ */
39
+ this.filteredOptions = [];
40
+ /**
41
+ * @internal
42
+ */
43
+ this.filter = '';
44
+ /**
45
+ * @internal
46
+ */
47
+ this.committedSelectedOption = undefined;
48
+ /**
49
+ * The max height for the listbox when opened.
50
+ *
51
+ * @internal
52
+ */
53
+ this.maxHeight = 0;
54
+ this._value = '';
55
+ this.forcedPosition = false;
56
+ }
57
+ /**
58
+ * The component is collapsible when in single-selection mode with no size attribute.
59
+ *
60
+ * @internal
61
+ */
62
+ get collapsible() {
63
+ return !(this.multiple || typeof this.size === 'number');
64
+ }
65
+ /**
66
+ * @internal
67
+ */
68
+ connectedCallback() {
69
+ super.connectedCallback();
70
+ this.forcedPosition = !!this.positionAttribute;
71
+ this.initializeOpenState();
72
+ }
73
+ /**
74
+ * The list of options. This mirrors FAST's override implementation for this
75
+ * member for the Combobox to support a filtered list in the dropdown.
76
+ *
77
+ * @public
78
+ * @remarks
79
+ * Overrides `Listbox.options`.
80
+ */
81
+ get options() {
82
+ Observable.track(this, 'options');
83
+ return this.filteredOptions?.length
84
+ ? this.filteredOptions
85
+ : this._options;
86
+ }
87
+ set options(value) {
88
+ this._options = value;
89
+ Observable.notify(this, 'options');
90
+ }
91
+ get value() {
92
+ Observable.track(this, 'value');
93
+ return this._value;
94
+ }
95
+ set value(next) {
96
+ const prev = this._value;
97
+ let newValue = next;
98
+ // use 'options' here instead of '_options' as 'selectedIndex' may be relative
99
+ // to filtered set
100
+ if (this.options?.length) {
101
+ const newValueIndex = this.options.findIndex(el => el.value === newValue);
102
+ const prevSelectedValue = this.options[this.selectedIndex]?.value ?? null;
103
+ const nextSelectedValue = this.options[newValueIndex]?.value ?? null;
104
+ if (newValueIndex === -1
105
+ || prevSelectedValue !== nextSelectedValue) {
106
+ newValue = '';
107
+ this.selectedIndex = newValueIndex;
108
+ }
109
+ newValue = this.firstSelectedOption?.value ?? newValue;
110
+ }
111
+ if (prev !== newValue && !(this.open && this.selectedIndex < 0)) {
112
+ this._value = newValue;
113
+ super.valueChanged(prev, newValue);
114
+ if (!this.open) {
115
+ this.committedSelectedOption = this._options.find(o => o.value === newValue);
116
+ }
117
+ Observable.notify(this, 'value');
118
+ if (this.collapsible) {
119
+ Observable.notify(this, 'displayValue');
120
+ }
121
+ }
122
+ }
123
+ /**
124
+ * @internal
125
+ */
126
+ get displayValue() {
127
+ Observable.track(this, 'displayValue');
128
+ return this.committedSelectedOption?.text ?? '';
129
+ }
130
+ /**
131
+ * @internal
132
+ */
133
+ anchoredRegionChanged(_prev, _next) {
134
+ if (this.anchoredRegion && this.control) {
135
+ this.anchoredRegion.anchorElement = this.control;
136
+ }
137
+ }
138
+ /**
139
+ * @internal
140
+ */
141
+ controlChanged(_prev, _next) {
142
+ if (this.anchoredRegion && this.control) {
143
+ this.anchoredRegion.anchorElement = this.control;
144
+ }
145
+ }
146
+ /**
147
+ * @internal
148
+ */
149
+ slottedOptionsChanged(prev, next) {
150
+ const value = this.value;
151
+ this._options.forEach(o => {
152
+ const notifier = Observable.getNotifier(o);
153
+ notifier.unsubscribe(this, 'value');
154
+ });
155
+ super.slottedOptionsChanged(prev, next);
156
+ this._options.forEach(o => {
157
+ const notifier = Observable.getNotifier(o);
158
+ notifier.subscribe(this, 'value');
159
+ });
160
+ this.setProxyOptions();
161
+ this.updateValue();
162
+ // We need to force an update to the filteredOptions observable
163
+ // (by calling 'filterOptions()) so that the template correctly updates.
164
+ this.filterOptions();
165
+ if (value) {
166
+ this.value = value;
167
+ }
168
+ this.committedSelectedOption = this.options[this.selectedIndex];
169
+ }
170
+ /**
171
+ * @internal
172
+ */
173
+ clickHandler(e) {
174
+ // do nothing if the select is disabled
175
+ if (this.disabled) {
176
+ return;
177
+ }
178
+ if (this.open) {
179
+ const captured = e.target.closest('option,[role=option]');
180
+ if (!captured?.disabled) {
181
+ this.updateSelectedIndexFromFilteredSet();
182
+ }
183
+ if (captured?.disabled) {
184
+ return;
185
+ }
186
+ }
187
+ super.clickHandler(e);
188
+ this.open = this.collapsible && !this.open;
189
+ if (!this.open && this.indexWhenOpened !== this.selectedIndex) {
190
+ this.updateValue(true);
191
+ }
192
+ }
193
+ /**
194
+ * Updates the value when an option's value changes.
195
+ *
196
+ * @param source - the source object
197
+ * @param propertyName - the property to evaluate
198
+ *
199
+ * @internal
200
+ * @override
201
+ */
202
+ handleChange(source, propertyName) {
203
+ super.handleChange(source, propertyName);
204
+ if (propertyName === 'value') {
205
+ this.updateValue();
206
+ }
207
+ }
208
+ /**
209
+ * Prevents focus when size is set and a scrollbar is clicked.
210
+ *
211
+ * @param e - the mouse event object
212
+ *
213
+ * @override
214
+ * @internal
215
+ */
216
+ mousedownHandler(e) {
217
+ if (e.offsetX >= 0 && e.offsetX <= this.listbox?.scrollWidth) {
218
+ return super.mousedownHandler(e);
219
+ }
220
+ return this.collapsible;
221
+ }
222
+ /**
223
+ * @internal
224
+ */
225
+ regionLoadedHandler() {
226
+ this.focusAndScrollOptionIntoView();
227
+ }
228
+ /**
229
+ * Sets the multiple property on the proxy element.
230
+ *
231
+ * @param prev - the previous multiple value
232
+ * @param next - the current multiple value
233
+ */
234
+ multipleChanged(prev, next) {
235
+ super.multipleChanged(prev, next);
236
+ if (this.proxy) {
237
+ this.proxy.multiple = next;
238
+ }
239
+ }
240
+ /**
241
+ * @internal
242
+ */
243
+ inputClickHandler(e) {
244
+ e.stopPropagation(); // clicking in filter input shouldn't close dropdown
245
+ }
246
+ /**
247
+ * @internal
248
+ */
249
+ changeValueHandler() {
250
+ this.committedSelectedOption = this.options.find(option => option.selected);
251
+ }
252
+ /**
253
+ * @internal
254
+ */
255
+ updateDisplayValue() {
256
+ if (this.collapsible) {
257
+ Observable.notify(this, 'displayValue');
258
+ }
259
+ }
260
+ /**
261
+ * Handle content changes on the control input.
262
+ *
263
+ * @param e - the input event
264
+ * @internal
265
+ */
266
+ inputHandler(e) {
267
+ this.filter = this.filterInput?.value ?? '';
268
+ if (!this.committedSelectedOption) {
269
+ this.committedSelectedOption = this._options.find(option => option.selected);
270
+ }
271
+ this.clearSelection();
272
+ this.filterOptions();
273
+ if (this.filteredOptions.length > 0
274
+ && this.committedSelectedOption
275
+ && !this.filteredOptions.includes(this.committedSelectedOption)) {
276
+ const enabledOptions = this.filteredOptions.filter(o => !o.disabled);
277
+ if (enabledOptions.length > 0) {
278
+ enabledOptions[0].selected = true;
279
+ }
280
+ else {
281
+ // only filtered option is disabled
282
+ this.selectedOptions = [];
283
+ this.selectedIndex = -1;
284
+ }
285
+ }
286
+ else if (this.committedSelectedOption) {
287
+ this.committedSelectedOption.selected = true;
288
+ }
289
+ if (e.inputType.includes('deleteContent') || !this.filter.length) {
290
+ return true;
291
+ }
292
+ e.stopPropagation();
293
+ return true;
294
+ }
295
+ /**
296
+ * @internal
297
+ */
298
+ focusoutHandler(e) {
299
+ this.updateSelectedIndexFromFilteredSet();
300
+ super.focusoutHandler(e);
301
+ if (!this.open) {
302
+ return true;
303
+ }
304
+ const focusTarget = e.relatedTarget;
305
+ if (this.isSameNode(focusTarget)) {
306
+ this.focus();
307
+ return true;
308
+ }
309
+ if (!this.options?.includes(focusTarget)) {
310
+ this.open = false;
311
+ if (this.indexWhenOpened !== this.selectedIndex) {
312
+ this.updateValue(true);
313
+ }
314
+ }
315
+ return true;
316
+ }
317
+ /**
318
+ * @internal
319
+ */
320
+ keydownHandler(e) {
321
+ super.keydownHandler(e);
322
+ const key = e.key;
323
+ if (e.ctrlKey || e.shiftKey) {
324
+ return true;
325
+ }
326
+ switch (key) {
327
+ case keySpace: {
328
+ // when dropdown is open allow user to enter a space for filter text
329
+ if (this.open && this.filterMode !== FilterMode.none) {
330
+ break;
331
+ }
332
+ e.preventDefault();
333
+ if (this.collapsible && this.typeAheadExpired) {
334
+ this.open = !this.open;
335
+ }
336
+ if (!this.open) {
337
+ this.focus();
338
+ }
339
+ break;
340
+ }
341
+ case keyHome:
342
+ case keyEnd: {
343
+ e.preventDefault();
344
+ break;
345
+ }
346
+ case keyEnter: {
347
+ e.preventDefault();
348
+ if (this.filteredOptions.length === 0
349
+ || this.filteredOptions.every(o => o.disabled)) {
350
+ return false;
351
+ }
352
+ this.updateSelectedIndexFromFilteredSet();
353
+ this.open = !this.open;
354
+ if (!this.open) {
355
+ this.focus();
356
+ }
357
+ break;
358
+ }
359
+ case keyEscape: {
360
+ // clear filter as update to "selectedIndex" will result in processing
361
+ // "options" and not "_options"
362
+ this.filter = '';
363
+ if (this.committedSelectedOption) {
364
+ this.clearSelection();
365
+ this.selectedIndex = this._options.indexOf(this.committedSelectedOption);
366
+ }
367
+ if (this.collapsible && this.open) {
368
+ e.preventDefault();
369
+ this.open = false;
370
+ }
371
+ // reset 'selected' state otherwise the selected state doesn't stick.
372
+ const selectedOption = this._options[this.selectedIndex];
373
+ if (selectedOption) {
374
+ selectedOption.selected = true;
375
+ }
376
+ this.focus();
377
+ break;
378
+ }
379
+ case keyTab: {
380
+ if (this.collapsible && this.open) {
381
+ e.preventDefault();
382
+ this.open = false;
383
+ }
384
+ return true;
385
+ }
386
+ default: {
387
+ break;
388
+ }
389
+ }
390
+ if (!this.open && this.indexWhenOpened !== this.selectedIndex) {
391
+ this.updateValue(true);
392
+ this.indexWhenOpened = this.selectedIndex;
393
+ }
394
+ return !(key === keyArrowDown || key === keyArrowUp);
395
+ }
396
+ /**
397
+ * Updates the proxy value when the selected index changes.
398
+ *
399
+ * @param prev - the previous selected index
400
+ * @param next - the next selected index
401
+ *
402
+ * @internal
403
+ */
404
+ selectedIndexChanged(prev, next) {
405
+ super.selectedIndexChanged(prev, next);
406
+ this.updateValue();
407
+ }
408
+ /**
409
+ * Synchronize the `aria-disabled` property when the `disabled` property changes.
410
+ *
411
+ * @param prev - The previous disabled value
412
+ * @param next - The next disabled value
413
+ *
414
+ * @internal
415
+ */
416
+ disabledChanged(prev, next) {
417
+ if (super.disabledChanged) {
418
+ super.disabledChanged(prev, next);
419
+ }
420
+ this.ariaDisabled = this.disabled ? 'true' : 'false';
421
+ }
422
+ /**
423
+ * Reset the element to its first selectable option when its parent form is reset.
424
+ *
425
+ * @internal
426
+ */
427
+ formResetCallback() {
428
+ this.setProxyOptions();
429
+ // Call the base class's implementation setDefaultSelectedOption instead of the select's
430
+ // override, in order to reset the selectedIndex without using the value property.
431
+ super.setDefaultSelectedOption();
432
+ if (this.selectedIndex === -1) {
433
+ this.selectedIndex = 0;
434
+ }
435
+ }
436
+ // Prevents parent classes from resetting selectedIndex to a positive
437
+ // value while filtering, which can result in a disabled option being
438
+ // selected.
439
+ setSelectedOptions() {
440
+ if (this.open && this.selectedIndex === -1) {
441
+ return;
442
+ }
443
+ super.setSelectedOptions();
444
+ }
445
+ focusAndScrollOptionIntoView() {
446
+ super.focusAndScrollOptionIntoView();
447
+ if (this.open) {
448
+ window.requestAnimationFrame(() => {
449
+ this.filterInput?.focus();
450
+ });
451
+ }
452
+ }
453
+ positionChanged(_, next) {
454
+ this.positionAttribute = next;
455
+ this.setPositioning();
456
+ }
457
+ /**
458
+ * Updates the proxy's size property when the size attribute changes.
459
+ *
460
+ * @param prev - the previous size
461
+ * @param next - the current size
462
+ *
463
+ * @override
464
+ * @internal
465
+ */
466
+ sizeChanged(prev, next) {
467
+ super.sizeChanged(prev, next);
468
+ if (this.proxy) {
469
+ this.proxy.size = next;
470
+ }
471
+ }
472
+ openChanged() {
473
+ if (!this.collapsible) {
474
+ return;
475
+ }
476
+ if (this.open) {
477
+ this.initializeOpenState();
478
+ this.indexWhenOpened = this.selectedIndex;
479
+ return;
480
+ }
481
+ this.filter = '';
482
+ if (this.filterInput) {
483
+ this.filterInput.value = '';
484
+ }
485
+ this.ariaControls = '';
486
+ this.ariaExpanded = 'false';
487
+ }
488
+ /**
489
+ * Updates the selectedness of each option when the list of selected options changes.
490
+ *
491
+ * @param prev - the previous list of selected options
492
+ * @param next - the current list of selected options
493
+ *
494
+ * @override
495
+ * @internal
496
+ */
497
+ selectedOptionsChanged(prev, next) {
498
+ super.selectedOptionsChanged(prev, next);
499
+ this.options?.forEach((o, i) => {
500
+ const proxyOption = this.proxy?.options.item(i);
501
+ if (proxyOption) {
502
+ proxyOption.selected = o.selected;
503
+ }
504
+ });
505
+ }
506
+ /**
507
+ * Sets the selected index to match the first option with the selected attribute, or
508
+ * the first selectable option.
509
+ *
510
+ * @override
511
+ * @internal
512
+ */
513
+ setDefaultSelectedOption() {
514
+ const options = this.options
515
+ ?? Array.from(this.children).filter(o => Listbox.slottedOptionFilter(o));
516
+ const selectedIndex = options?.findIndex(el => el.hasAttribute('selected')
517
+ || el.selected
518
+ || el.value === this.value);
519
+ if (selectedIndex !== -1) {
520
+ this.selectedIndex = selectedIndex;
521
+ return;
522
+ }
523
+ this.selectedIndex = 0;
20
524
  }
21
- // Workaround for https://github.com/microsoft/fast/issues/5123
22
525
  setPositioning() {
23
526
  if (!this.$fastController.isConnected) {
24
527
  // Don't call setPositioning() until we're connected,
25
528
  // since this.forcedPosition isn't initialized yet.
26
529
  return;
27
530
  }
28
- super.setPositioning();
531
+ const currentBox = this.getBoundingClientRect();
532
+ const viewportHeight = window.innerHeight;
533
+ const availableBottom = viewportHeight - currentBox.bottom;
534
+ if (this.forcedPosition) {
535
+ this.position = this.positionAttribute;
536
+ }
537
+ else if (currentBox.top > availableBottom) {
538
+ this.position = SelectPosition.above;
539
+ }
540
+ else {
541
+ this.position = SelectPosition.below;
542
+ }
543
+ this.positionAttribute = this.forcedPosition
544
+ ? this.positionAttribute
545
+ : this.position;
546
+ this.maxHeight = this.position === SelectPosition.above
547
+ ? Math.trunc(currentBox.top)
548
+ : Math.trunc(availableBottom);
29
549
  this.updateListboxMaxHeightCssVariable();
30
550
  }
31
- // Workaround for https://github.com/microsoft/fast/issues/5773
32
- slottedOptionsChanged(prev, next) {
33
- const value = this.value;
34
- super.slottedOptionsChanged(prev, next);
35
- if (value) {
36
- this.value = value;
551
+ /**
552
+ * Filter available options by text value.
553
+ *
554
+ * @public
555
+ */
556
+ filterOptions() {
557
+ const filter = this.filter.toLowerCase();
558
+ if (filter) {
559
+ this.filteredOptions = this._options.filter(option => {
560
+ return diacriticInsensitiveStringNormalizer(option.text).includes(diacriticInsensitiveStringNormalizer(filter));
561
+ });
562
+ }
563
+ else {
564
+ this.filteredOptions = this._options;
37
565
  }
566
+ this._options.forEach(o => {
567
+ o.hidden = !this.filteredOptions.includes(o);
568
+ });
38
569
  }
39
- regionChanged(_prev, _next) {
40
- if (this.region && this.control) {
41
- this.region.anchorElement = this.control;
570
+ /**
571
+ * Sets the value and display value to match the first selected option.
572
+ *
573
+ * @param shouldEmit - if true, the input and change events will be emitted
574
+ *
575
+ * @internal
576
+ */
577
+ updateValue(shouldEmit) {
578
+ if (this.$fastController.isConnected) {
579
+ this.value = this.firstSelectedOption?.value ?? '';
580
+ }
581
+ if (shouldEmit) {
582
+ this.$emit('input');
583
+ this.$emit('change', this, {
584
+ bubbles: true,
585
+ composed: undefined
586
+ });
42
587
  }
43
588
  }
44
- controlChanged(_prev, _next) {
45
- if (this.region && this.control) {
46
- this.region.anchorElement = this.control;
589
+ /**
590
+ * Resets and fills the proxy to match the component's options.
591
+ *
592
+ * @internal
593
+ */
594
+ setProxyOptions() {
595
+ if (this.proxy instanceof HTMLSelectElement && this.options) {
596
+ this.proxy.options.length = 0;
597
+ this.options.forEach(option => {
598
+ const proxyOption = option.proxy
599
+ || (option instanceof HTMLOptionElement
600
+ ? option.cloneNode()
601
+ : null);
602
+ if (proxyOption) {
603
+ this.proxy.options.add(proxyOption);
604
+ }
605
+ });
47
606
  }
48
607
  }
608
+ clearSelection() {
609
+ this.options.forEach(option => {
610
+ option.selected = false;
611
+ });
612
+ }
613
+ filterChanged() {
614
+ this.filterOptions();
615
+ }
49
616
  maxHeightChanged() {
50
617
  this.updateListboxMaxHeightCssVariable();
51
618
  }
619
+ initializeOpenState() {
620
+ if (!this.open) {
621
+ this.ariaExpanded = 'false';
622
+ this.ariaControls = '';
623
+ return;
624
+ }
625
+ this.committedSelectedOption = this._options[this.selectedIndex];
626
+ this.ariaControls = this.listboxId;
627
+ this.ariaExpanded = 'true';
628
+ this.setPositioning();
629
+ this.focusAndScrollOptionIntoView();
630
+ }
52
631
  updateListboxMaxHeightCssVariable() {
53
632
  if (this.listbox) {
54
633
  this.listbox.style.setProperty('--ni-private-select-max-height', `${this.maxHeight}px`);
55
634
  }
56
635
  }
636
+ updateSelectedIndexFromFilteredSet() {
637
+ const selectedItem = this.filteredOptions.length > 0
638
+ ? this.options[this.selectedIndex]
639
+ ?? this.committedSelectedOption
640
+ : this.committedSelectedOption;
641
+ if (!selectedItem) {
642
+ return;
643
+ }
644
+ // Clear filter so any logic resolving against 'this.options' resolves against all options,
645
+ // since selectedIndex should be relative to entire set.
646
+ this.filter = '';
647
+ // translate selectedIndex for filtered list to selectedIndex for all items
648
+ this.selectedIndex = this._options.indexOf(selectedItem);
649
+ // force selected to true again if the selection hasn't actually changed
650
+ if (selectedItem === this.committedSelectedOption) {
651
+ selectedItem.selected = true;
652
+ }
653
+ }
57
654
  }
58
655
  __decorate([
59
656
  attr
60
657
  ], Select.prototype, "appearance", void 0);
658
+ __decorate([
659
+ attr({ attribute: 'position' })
660
+ ], Select.prototype, "positionAttribute", void 0);
61
661
  __decorate([
62
662
  attr({ attribute: 'error-text' })
63
663
  ], Select.prototype, "errorText", void 0);
64
664
  __decorate([
65
665
  attr({ attribute: 'error-visible', mode: 'boolean' })
66
666
  ], Select.prototype, "errorVisible", void 0);
667
+ __decorate([
668
+ attr({ attribute: 'filter-mode' })
669
+ ], Select.prototype, "filterMode", void 0);
670
+ __decorate([
671
+ attr({ attribute: 'open', mode: 'boolean' })
672
+ ], Select.prototype, "open", void 0);
673
+ __decorate([
674
+ observable
675
+ ], Select.prototype, "position", void 0);
676
+ __decorate([
677
+ observable
678
+ ], Select.prototype, "control", void 0);
679
+ __decorate([
680
+ observable
681
+ ], Select.prototype, "scrollableRegion", void 0);
67
682
  __decorate([
68
683
  observable
69
- ], Select.prototype, "region", void 0);
684
+ ], Select.prototype, "filterInput", void 0);
685
+ __decorate([
686
+ observable
687
+ ], Select.prototype, "anchoredRegion", void 0);
70
688
  __decorate([
71
689
  observable
72
690
  ], Select.prototype, "hasOverflow", void 0);
691
+ __decorate([
692
+ observable
693
+ ], Select.prototype, "filteredOptions", void 0);
694
+ __decorate([
695
+ observable
696
+ ], Select.prototype, "filter", void 0);
697
+ __decorate([
698
+ observable
699
+ ], Select.prototype, "committedSelectedOption", void 0);
700
+ __decorate([
701
+ observable
702
+ ], Select.prototype, "maxHeight", void 0);
703
+ __decorate([
704
+ volatile
705
+ ], Select.prototype, "collapsible", null);
73
706
  const nimbleSelect = Select.compose({
74
707
  baseName: 'select',
75
708
  baseClass: FoundationSelect,
@@ -84,6 +717,7 @@ const nimbleSelect = Select.compose({
84
717
  ${errorTextTemplate}
85
718
  `
86
719
  });
720
+ applyMixins(Select, StartEnd, DelegatesARIASelect);
87
721
  DesignSystem.getOrCreate().withPrefix('nimble').register(nimbleSelect());
88
722
  export const selectTag = 'nimble-select';
89
723
  //# sourceMappingURL=index.js.map