@ni/fast-foundation 0.0.2

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 (416) hide show
  1. package/README.md +58 -0
  2. package/dist/dts/accordion/accordion.d.ts +65 -0
  3. package/dist/dts/accordion/accordion.template.d.ts +8 -0
  4. package/dist/dts/accordion/index.d.ts +2 -0
  5. package/dist/dts/accordion-item/accordion-item.d.ts +76 -0
  6. package/dist/dts/accordion-item/accordion-item.template.d.ts +8 -0
  7. package/dist/dts/accordion-item/index.d.ts +2 -0
  8. package/dist/dts/anchor/anchor.d.ts +128 -0
  9. package/dist/dts/anchor/anchor.template.d.ts +8 -0
  10. package/dist/dts/anchor/index.d.ts +2 -0
  11. package/dist/dts/anchored-region/anchored-region-config.d.ts +117 -0
  12. package/dist/dts/anchored-region/anchored-region.d.ts +389 -0
  13. package/dist/dts/anchored-region/anchored-region.template.d.ts +8 -0
  14. package/dist/dts/anchored-region/index.d.ts +3 -0
  15. package/dist/dts/avatar/avatar.d.ts +62 -0
  16. package/dist/dts/avatar/avatar.template.d.ts +8 -0
  17. package/dist/dts/avatar/index.d.ts +2 -0
  18. package/dist/dts/badge/badge.d.ts +36 -0
  19. package/dist/dts/badge/badge.template.d.ts +8 -0
  20. package/dist/dts/badge/index.d.ts +2 -0
  21. package/dist/dts/breadcrumb/breadcrumb.d.ts +27 -0
  22. package/dist/dts/breadcrumb/breadcrumb.template.d.ts +8 -0
  23. package/dist/dts/breadcrumb/index.d.ts +2 -0
  24. package/dist/dts/breadcrumb-item/breadcrumb-item.d.ts +36 -0
  25. package/dist/dts/breadcrumb-item/breadcrumb-item.template.d.ts +8 -0
  26. package/dist/dts/breadcrumb-item/index.d.ts +2 -0
  27. package/dist/dts/button/button.d.ts +167 -0
  28. package/dist/dts/button/button.form-associated.d.ts +16 -0
  29. package/dist/dts/button/button.template.d.ts +8 -0
  30. package/dist/dts/button/index.d.ts +2 -0
  31. package/dist/dts/calendar/calendar.d.ts +178 -0
  32. package/dist/dts/calendar/calendar.template.d.ts +58 -0
  33. package/dist/dts/calendar/date-formatter.d.ts +124 -0
  34. package/dist/dts/calendar/index.d.ts +3 -0
  35. package/dist/dts/card/card.d.ts +10 -0
  36. package/dist/dts/card/card.template.d.ts +8 -0
  37. package/dist/dts/card/index.d.ts +2 -0
  38. package/dist/dts/checkbox/checkbox.d.ts +58 -0
  39. package/dist/dts/checkbox/checkbox.form-associated.d.ts +16 -0
  40. package/dist/dts/checkbox/checkbox.template.d.ts +8 -0
  41. package/dist/dts/checkbox/index.d.ts +2 -0
  42. package/dist/dts/combobox/combobox.d.ts +341 -0
  43. package/dist/dts/combobox/combobox.form-associated.d.ts +16 -0
  44. package/dist/dts/combobox/combobox.options.d.ts +15 -0
  45. package/dist/dts/combobox/combobox.template.d.ts +8 -0
  46. package/dist/dts/combobox/index.d.ts +3 -0
  47. package/dist/dts/data-grid/data-grid-cell.d.ts +62 -0
  48. package/dist/dts/data-grid/data-grid-cell.template.d.ts +9 -0
  49. package/dist/dts/data-grid/data-grid-row.d.ts +119 -0
  50. package/dist/dts/data-grid/data-grid-row.template.d.ts +10 -0
  51. package/dist/dts/data-grid/data-grid.d.ts +218 -0
  52. package/dist/dts/data-grid/data-grid.options.d.ts +49 -0
  53. package/dist/dts/data-grid/data-grid.template.d.ts +10 -0
  54. package/dist/dts/data-grid/index.d.ts +6 -0
  55. package/dist/dts/design-system/component-presentation.d.ts +66 -0
  56. package/dist/dts/design-system/design-system.d.ts +104 -0
  57. package/dist/dts/design-system/index.d.ts +3 -0
  58. package/dist/dts/design-system/registration-context.d.ts +106 -0
  59. package/dist/dts/design-token/custom-property-manager.d.ts +35 -0
  60. package/dist/dts/design-token/design-token.d.ts +139 -0
  61. package/dist/dts/design-token/interfaces.d.ts +31 -0
  62. package/dist/dts/di/di.d.ts +858 -0
  63. package/dist/dts/di/index.d.ts +1 -0
  64. package/dist/dts/dialog/dialog.d.ts +153 -0
  65. package/dist/dts/dialog/dialog.template.d.ts +8 -0
  66. package/dist/dts/dialog/index.d.ts +2 -0
  67. package/dist/dts/directives/reflect-attributes.d.ts +18 -0
  68. package/dist/dts/disclosure/disclosure.d.ts +59 -0
  69. package/dist/dts/disclosure/disclosure.template.d.ts +8 -0
  70. package/dist/dts/disclosure/index.d.ts +2 -0
  71. package/dist/dts/divider/divider.d.ts +28 -0
  72. package/dist/dts/divider/divider.options.d.ts +19 -0
  73. package/dist/dts/divider/divider.template.d.ts +8 -0
  74. package/dist/dts/divider/index.d.ts +2 -0
  75. package/dist/dts/flipper/flipper.d.ts +57 -0
  76. package/dist/dts/flipper/flipper.options.d.ts +13 -0
  77. package/dist/dts/flipper/flipper.template.d.ts +8 -0
  78. package/dist/dts/flipper/index.d.ts +2 -0
  79. package/dist/dts/form-associated/form-associated.d.ts +177 -0
  80. package/dist/dts/form-associated/index.d.ts +1 -0
  81. package/dist/dts/foundation-element/foundation-element.d.ts +120 -0
  82. package/dist/dts/foundation-element/index.d.ts +1 -0
  83. package/dist/dts/horizontal-scroll/horizontal-scroll.d.ts +242 -0
  84. package/dist/dts/horizontal-scroll/horizontal-scroll.template.d.ts +7 -0
  85. package/dist/dts/horizontal-scroll/index.d.ts +2 -0
  86. package/dist/dts/index-rollup.d.ts +2 -0
  87. package/dist/dts/index.d.ts +53 -0
  88. package/dist/dts/interfaces.d.ts +4 -0
  89. package/dist/dts/listbox/index.d.ts +3 -0
  90. package/dist/dts/listbox/listbox.d.ts +314 -0
  91. package/dist/dts/listbox/listbox.element.d.ts +223 -0
  92. package/dist/dts/listbox/listbox.template.d.ts +8 -0
  93. package/dist/dts/listbox-option/index.d.ts +2 -0
  94. package/dist/dts/listbox-option/listbox-option.d.ts +176 -0
  95. package/dist/dts/listbox-option/listbox-option.template.d.ts +8 -0
  96. package/dist/dts/menu/index.d.ts +2 -0
  97. package/dist/dts/menu/menu.d.ts +78 -0
  98. package/dist/dts/menu/menu.template.d.ts +8 -0
  99. package/dist/dts/menu-item/index.d.ts +2 -0
  100. package/dist/dts/menu-item/menu-item.d.ts +160 -0
  101. package/dist/dts/menu-item/menu-item.options.d.ts +29 -0
  102. package/dist/dts/menu-item/menu-item.template.d.ts +10 -0
  103. package/dist/dts/number-field/index.d.ts +2 -0
  104. package/dist/dts/number-field/number-field.d.ts +227 -0
  105. package/dist/dts/number-field/number-field.form-associated.d.ts +16 -0
  106. package/dist/dts/number-field/number-field.template.d.ts +8 -0
  107. package/dist/dts/patterns/aria-global.d.ts +189 -0
  108. package/dist/dts/patterns/index.d.ts +2 -0
  109. package/dist/dts/patterns/start-end.d.ts +65 -0
  110. package/dist/dts/picker/index.d.ts +10 -0
  111. package/dist/dts/picker/picker-list-item.d.ts +38 -0
  112. package/dist/dts/picker/picker-list-item.template.d.ts +8 -0
  113. package/dist/dts/picker/picker-list.d.ts +8 -0
  114. package/dist/dts/picker/picker-list.template.d.ts +8 -0
  115. package/dist/dts/picker/picker-menu-option.d.ts +37 -0
  116. package/dist/dts/picker/picker-menu-option.template.d.ts +8 -0
  117. package/dist/dts/picker/picker-menu.d.ts +46 -0
  118. package/dist/dts/picker/picker-menu.template.d.ts +8 -0
  119. package/dist/dts/picker/picker.d.ts +390 -0
  120. package/dist/dts/picker/picker.form-associated.d.ts +16 -0
  121. package/dist/dts/picker/picker.template.d.ts +8 -0
  122. package/dist/dts/progress/base-progress.d.ts +71 -0
  123. package/dist/dts/progress/index.d.ts +2 -0
  124. package/dist/dts/progress/progress.template.d.ts +8 -0
  125. package/dist/dts/progress-ring/index.d.ts +1 -0
  126. package/dist/dts/progress-ring/progress-ring.template.d.ts +8 -0
  127. package/dist/dts/radio/index.d.ts +2 -0
  128. package/dist/dts/radio/radio.d.ts +70 -0
  129. package/dist/dts/radio/radio.form-associated.d.ts +16 -0
  130. package/dist/dts/radio/radio.template.d.ts +8 -0
  131. package/dist/dts/radio-group/index.d.ts +2 -0
  132. package/dist/dts/radio-group/radio-group.d.ts +101 -0
  133. package/dist/dts/radio-group/radio-group.template.d.ts +8 -0
  134. package/dist/dts/search/index.d.ts +2 -0
  135. package/dist/dts/search/search.d.ts +162 -0
  136. package/dist/dts/search/search.form-associated.d.ts +16 -0
  137. package/dist/dts/search/search.template.d.ts +8 -0
  138. package/dist/dts/select/index.d.ts +3 -0
  139. package/dist/dts/select/select.d.ts +289 -0
  140. package/dist/dts/select/select.form-associated.d.ts +16 -0
  141. package/dist/dts/select/select.options.d.ts +13 -0
  142. package/dist/dts/select/select.template.d.ts +8 -0
  143. package/dist/dts/skeleton/index.d.ts +2 -0
  144. package/dist/dts/skeleton/skeleton.d.ts +47 -0
  145. package/dist/dts/skeleton/skeleton.template.d.ts +8 -0
  146. package/dist/dts/slider/index.d.ts +2 -0
  147. package/dist/dts/slider/slider-utilities.d.ts +5 -0
  148. package/dist/dts/slider/slider.d.ts +230 -0
  149. package/dist/dts/slider/slider.form-associated.d.ts +16 -0
  150. package/dist/dts/slider/slider.template.d.ts +8 -0
  151. package/dist/dts/slider-label/index.d.ts +2 -0
  152. package/dist/dts/slider-label/slider-label.d.ts +81 -0
  153. package/dist/dts/slider-label/slider-label.template.d.ts +8 -0
  154. package/dist/dts/switch/index.d.ts +2 -0
  155. package/dist/dts/switch/switch.d.ts +60 -0
  156. package/dist/dts/switch/switch.form-associated.d.ts +16 -0
  157. package/dist/dts/switch/switch.template.d.ts +8 -0
  158. package/dist/dts/tab/index.d.ts +2 -0
  159. package/dist/dts/tab/tab.d.ts +17 -0
  160. package/dist/dts/tab/tab.template.d.ts +8 -0
  161. package/dist/dts/tab-panel/index.d.ts +2 -0
  162. package/dist/dts/tab-panel/tab-panel.d.ts +10 -0
  163. package/dist/dts/tab-panel/tab-panel.template.d.ts +8 -0
  164. package/dist/dts/tabs/index.d.ts +2 -0
  165. package/dist/dts/tabs/tabs.d.ts +140 -0
  166. package/dist/dts/tabs/tabs.template.d.ts +8 -0
  167. package/dist/dts/test-utilities/fixture.d.ts +89 -0
  168. package/dist/dts/test-utilities/timeout.d.ts +4 -0
  169. package/dist/dts/text-area/index.d.ts +2 -0
  170. package/dist/dts/text-area/text-area.d.ts +149 -0
  171. package/dist/dts/text-area/text-area.form-associated.d.ts +16 -0
  172. package/dist/dts/text-area/text-area.options.d.ts +27 -0
  173. package/dist/dts/text-area/text-area.template.d.ts +8 -0
  174. package/dist/dts/text-field/index.d.ts +2 -0
  175. package/dist/dts/text-field/text-field.d.ts +166 -0
  176. package/dist/dts/text-field/text-field.form-associated.d.ts +16 -0
  177. package/dist/dts/text-field/text-field.options.d.ts +31 -0
  178. package/dist/dts/text-field/text-field.template.d.ts +8 -0
  179. package/dist/dts/toolbar/index.d.ts +2 -0
  180. package/dist/dts/toolbar/toolbar.d.ts +167 -0
  181. package/dist/dts/toolbar/toolbar.template.d.ts +9 -0
  182. package/dist/dts/tooltip/index.d.ts +2 -0
  183. package/dist/dts/tooltip/tooltip.d.ts +239 -0
  184. package/dist/dts/tooltip/tooltip.options.d.ts +69 -0
  185. package/dist/dts/tooltip/tooltip.template.d.ts +8 -0
  186. package/dist/dts/tree-item/index.d.ts +2 -0
  187. package/dist/dts/tree-item/tree-item.d.ts +141 -0
  188. package/dist/dts/tree-item/tree-item.template.d.ts +8 -0
  189. package/dist/dts/tree-view/index.d.ts +2 -0
  190. package/dist/dts/tree-view/tree-view.d.ts +99 -0
  191. package/dist/dts/tree-view/tree-view.template.d.ts +8 -0
  192. package/dist/dts/utilities/apply-mixins.d.ts +6 -0
  193. package/dist/dts/utilities/composed-contains.d.ts +12 -0
  194. package/dist/dts/utilities/composed-parent.d.ts +10 -0
  195. package/dist/dts/utilities/direction.d.ts +7 -0
  196. package/dist/dts/utilities/index.d.ts +8 -0
  197. package/dist/dts/utilities/intersection-service.d.ts +30 -0
  198. package/dist/dts/utilities/match-media-stylesheet-behavior.d.ts +124 -0
  199. package/dist/dts/utilities/property-stylesheet-behavior.d.ts +38 -0
  200. package/dist/dts/utilities/resize-observer.d.ts +31 -0
  201. package/dist/dts/utilities/root-active-element.d.ts +1 -0
  202. package/dist/dts/utilities/style/disabled.d.ts +5 -0
  203. package/dist/dts/utilities/style/display.d.ts +17 -0
  204. package/dist/dts/utilities/style/focus.d.ts +8 -0
  205. package/dist/dts/utilities/style/index.d.ts +3 -0
  206. package/dist/dts/utilities/whitespace-filter.d.ts +9 -0
  207. package/dist/esm/accordion/accordion.js +185 -0
  208. package/dist/esm/accordion/accordion.template.js +11 -0
  209. package/dist/esm/accordion/index.js +2 -0
  210. package/dist/esm/accordion-item/accordion-item.js +72 -0
  211. package/dist/esm/accordion-item/accordion-item.template.js +49 -0
  212. package/dist/esm/accordion-item/index.js +2 -0
  213. package/dist/esm/anchor/anchor.js +85 -0
  214. package/dist/esm/anchor/anchor.template.js +47 -0
  215. package/dist/esm/anchor/index.js +2 -0
  216. package/dist/esm/anchored-region/anchored-region-config.js +59 -0
  217. package/dist/esm/anchored-region/anchored-region.js +964 -0
  218. package/dist/esm/anchored-region/anchored-region.template.js +12 -0
  219. package/dist/esm/anchored-region/index.js +3 -0
  220. package/dist/esm/avatar/avatar.js +39 -0
  221. package/dist/esm/avatar/avatar.template.js +23 -0
  222. package/dist/esm/avatar/index.js +2 -0
  223. package/dist/esm/badge/badge.js +40 -0
  224. package/dist/esm/badge/badge.template.js +12 -0
  225. package/dist/esm/badge/index.js +2 -0
  226. package/dist/esm/breadcrumb/breadcrumb.js +70 -0
  227. package/dist/esm/breadcrumb/breadcrumb.template.js +14 -0
  228. package/dist/esm/breadcrumb/index.js +2 -0
  229. package/dist/esm/breadcrumb-item/breadcrumb-item.js +23 -0
  230. package/dist/esm/breadcrumb-item/breadcrumb-item.template.js +24 -0
  231. package/dist/esm/breadcrumb-item/index.js +2 -0
  232. package/dist/esm/button/button.form-associated.js +15 -0
  233. package/dist/esm/button/button.js +183 -0
  234. package/dist/esm/button/button.template.js +51 -0
  235. package/dist/esm/button/index.js +2 -0
  236. package/dist/esm/calendar/calendar.js +280 -0
  237. package/dist/esm/calendar/calendar.template.js +191 -0
  238. package/dist/esm/calendar/date-formatter.js +144 -0
  239. package/dist/esm/calendar/index.js +3 -0
  240. package/dist/esm/card/card.js +10 -0
  241. package/dist/esm/card/card.template.js +8 -0
  242. package/dist/esm/card/index.js +2 -0
  243. package/dist/esm/checkbox/checkbox.form-associated.js +15 -0
  244. package/dist/esm/checkbox/checkbox.js +75 -0
  245. package/dist/esm/checkbox/checkbox.template.js +35 -0
  246. package/dist/esm/checkbox/index.js +2 -0
  247. package/dist/esm/combobox/combobox.form-associated.js +15 -0
  248. package/dist/esm/combobox/combobox.js +587 -0
  249. package/dist/esm/combobox/combobox.options.js +10 -0
  250. package/dist/esm/combobox/combobox.template.js +66 -0
  251. package/dist/esm/combobox/index.js +3 -0
  252. package/dist/esm/data-grid/data-grid-cell.js +229 -0
  253. package/dist/esm/data-grid/data-grid-cell.template.js +23 -0
  254. package/dist/esm/data-grid/data-grid-row.js +203 -0
  255. package/dist/esm/data-grid/data-grid-row.template.js +47 -0
  256. package/dist/esm/data-grid/data-grid.js +440 -0
  257. package/dist/esm/data-grid/data-grid.options.js +31 -0
  258. package/dist/esm/data-grid/data-grid.template.js +36 -0
  259. package/dist/esm/data-grid/index.js +6 -0
  260. package/dist/esm/design-system/component-presentation.js +86 -0
  261. package/dist/esm/design-system/design-system.js +207 -0
  262. package/dist/esm/design-system/index.js +3 -0
  263. package/dist/esm/design-system/registration-context.js +1 -0
  264. package/dist/esm/design-token/custom-property-manager.js +216 -0
  265. package/dist/esm/design-token/design-token.js +657 -0
  266. package/dist/esm/design-token/interfaces.js +1 -0
  267. package/dist/esm/di/di.js +1341 -0
  268. package/dist/esm/di/index.js +1 -0
  269. package/dist/esm/dialog/dialog.js +280 -0
  270. package/dist/esm/dialog/dialog.template.js +30 -0
  271. package/dist/esm/dialog/index.js +2 -0
  272. package/dist/esm/directives/reflect-attributes.js +88 -0
  273. package/dist/esm/disclosure/disclosure.js +72 -0
  274. package/dist/esm/disclosure/disclosure.template.js +20 -0
  275. package/dist/esm/disclosure/index.js +2 -0
  276. package/dist/esm/divider/divider.js +39 -0
  277. package/dist/esm/divider/divider.options.js +14 -0
  278. package/dist/esm/divider/divider.template.js +8 -0
  279. package/dist/esm/divider/index.js +2 -0
  280. package/dist/esm/flipper/flipper.js +65 -0
  281. package/dist/esm/flipper/flipper.options.js +8 -0
  282. package/dist/esm/flipper/flipper.template.js +30 -0
  283. package/dist/esm/flipper/index.js +2 -0
  284. package/dist/esm/form-associated/form-associated.js +464 -0
  285. package/dist/esm/form-associated/index.js +1 -0
  286. package/dist/esm/foundation-element/foundation-element.js +132 -0
  287. package/dist/esm/foundation-element/index.js +1 -0
  288. package/dist/esm/horizontal-scroll/horizontal-scroll.js +380 -0
  289. package/dist/esm/horizontal-scroll/horizontal-scroll.template.js +62 -0
  290. package/dist/esm/horizontal-scroll/index.js +2 -0
  291. package/dist/esm/index-rollup.js +2 -0
  292. package/dist/esm/index.js +54 -0
  293. package/dist/esm/interfaces.js +1 -0
  294. package/dist/esm/listbox/index.js +3 -0
  295. package/dist/esm/listbox/listbox.element.js +448 -0
  296. package/dist/esm/listbox/listbox.js +528 -0
  297. package/dist/esm/listbox/listbox.template.js +27 -0
  298. package/dist/esm/listbox-option/index.js +2 -0
  299. package/dist/esm/listbox-option/listbox-option.js +200 -0
  300. package/dist/esm/listbox-option/listbox-option.template.js +25 -0
  301. package/dist/esm/menu/index.js +2 -0
  302. package/dist/esm/menu/menu.js +290 -0
  303. package/dist/esm/menu/menu.template.js +15 -0
  304. package/dist/esm/menu-item/index.js +2 -0
  305. package/dist/esm/menu-item/menu-item.js +251 -0
  306. package/dist/esm/menu-item/menu-item.options.js +26 -0
  307. package/dist/esm/menu-item/menu-item.template.js +78 -0
  308. package/dist/esm/number-field/index.js +2 -0
  309. package/dist/esm/number-field/number-field.form-associated.js +15 -0
  310. package/dist/esm/number-field/number-field.js +288 -0
  311. package/dist/esm/number-field/number-field.template.js +84 -0
  312. package/dist/esm/patterns/aria-global.js +70 -0
  313. package/dist/esm/patterns/index.js +2 -0
  314. package/dist/esm/patterns/start-end.js +84 -0
  315. package/dist/esm/picker/index.js +10 -0
  316. package/dist/esm/picker/picker-list-item.js +71 -0
  317. package/dist/esm/picker/picker-list-item.template.js +17 -0
  318. package/dist/esm/picker/picker-list.js +8 -0
  319. package/dist/esm/picker/picker-list.template.js +13 -0
  320. package/dist/esm/picker/picker-menu-option.js +61 -0
  321. package/dist/esm/picker/picker-menu-option.template.js +16 -0
  322. package/dist/esm/picker/picker-menu.js +59 -0
  323. package/dist/esm/picker/picker-menu.template.js +29 -0
  324. package/dist/esm/picker/picker.form-associated.js +15 -0
  325. package/dist/esm/picker/picker.js +759 -0
  326. package/dist/esm/picker/picker.template.js +97 -0
  327. package/dist/esm/progress/base-progress.js +69 -0
  328. package/dist/esm/progress/index.js +2 -0
  329. package/dist/esm/progress/progress.template.js +31 -0
  330. package/dist/esm/progress-ring/index.js +1 -0
  331. package/dist/esm/progress-ring/progress-ring.template.js +45 -0
  332. package/dist/esm/radio/index.js +2 -0
  333. package/dist/esm/radio/radio.form-associated.js +15 -0
  334. package/dist/esm/radio/radio.js +108 -0
  335. package/dist/esm/radio/radio.template.js +31 -0
  336. package/dist/esm/radio-group/index.js +2 -0
  337. package/dist/esm/radio-group/radio-group.js +390 -0
  338. package/dist/esm/radio-group/radio-group.template.js +29 -0
  339. package/dist/esm/search/index.js +2 -0
  340. package/dist/esm/search/search.form-associated.js +15 -0
  341. package/dist/esm/search/search.js +157 -0
  342. package/dist/esm/search/search.template.js +93 -0
  343. package/dist/esm/select/index.js +3 -0
  344. package/dist/esm/select/select.form-associated.js +15 -0
  345. package/dist/esm/select/select.js +490 -0
  346. package/dist/esm/select/select.options.js +8 -0
  347. package/dist/esm/select/select.template.js +72 -0
  348. package/dist/esm/skeleton/index.js +2 -0
  349. package/dist/esm/skeleton/skeleton.js +35 -0
  350. package/dist/esm/skeleton/skeleton.template.js +20 -0
  351. package/dist/esm/slider/index.js +2 -0
  352. package/dist/esm/slider/slider-utilities.js +11 -0
  353. package/dist/esm/slider/slider.form-associated.js +15 -0
  354. package/dist/esm/slider/slider.js +452 -0
  355. package/dist/esm/slider/slider.template.js +40 -0
  356. package/dist/esm/slider-label/index.js +2 -0
  357. package/dist/esm/slider-label/slider-label.js +158 -0
  358. package/dist/esm/slider-label/slider-label.template.js +24 -0
  359. package/dist/esm/switch/index.js +2 -0
  360. package/dist/esm/switch/switch.form-associated.js +15 -0
  361. package/dist/esm/switch/switch.js +79 -0
  362. package/dist/esm/switch/switch.template.js +37 -0
  363. package/dist/esm/tab/index.js +2 -0
  364. package/dist/esm/tab/tab.js +15 -0
  365. package/dist/esm/tab/tab.template.js +10 -0
  366. package/dist/esm/tab-panel/index.js +2 -0
  367. package/dist/esm/tab-panel/tab-panel.js +10 -0
  368. package/dist/esm/tab-panel/tab-panel.template.js +10 -0
  369. package/dist/esm/tabs/index.js +2 -0
  370. package/dist/esm/tabs/tabs.js +375 -0
  371. package/dist/esm/tabs/tabs.template.js +26 -0
  372. package/dist/esm/test-utilities/fixture.js +90 -0
  373. package/dist/esm/test-utilities/timeout.js +13 -0
  374. package/dist/esm/text-area/index.js +2 -0
  375. package/dist/esm/text-area/text-area.form-associated.js +15 -0
  376. package/dist/esm/text-area/text-area.js +146 -0
  377. package/dist/esm/text-area/text-area.options.js +22 -0
  378. package/dist/esm/text-area/text-area.template.js +64 -0
  379. package/dist/esm/text-field/index.js +2 -0
  380. package/dist/esm/text-field/text-field.form-associated.js +15 -0
  381. package/dist/esm/text-field/text-field.js +183 -0
  382. package/dist/esm/text-field/text-field.options.js +26 -0
  383. package/dist/esm/text-field/text-field.template.js +70 -0
  384. package/dist/esm/toolbar/index.js +2 -0
  385. package/dist/esm/toolbar/toolbar.js +271 -0
  386. package/dist/esm/toolbar/toolbar.template.js +37 -0
  387. package/dist/esm/tooltip/index.js +2 -0
  388. package/dist/esm/tooltip/tooltip.js +512 -0
  389. package/dist/esm/tooltip/tooltip.options.js +63 -0
  390. package/dist/esm/tooltip/tooltip.template.js +32 -0
  391. package/dist/esm/tree-item/index.js +2 -0
  392. package/dist/esm/tree-item/tree-item.js +150 -0
  393. package/dist/esm/tree-item/tree-item.template.js +52 -0
  394. package/dist/esm/tree-view/index.js +2 -0
  395. package/dist/esm/tree-view/tree-view.js +268 -0
  396. package/dist/esm/tree-view/tree-view.template.js +18 -0
  397. package/dist/esm/utilities/apply-mixins.js +20 -0
  398. package/dist/esm/utilities/composed-contains.js +22 -0
  399. package/dist/esm/utilities/composed-parent.js +23 -0
  400. package/dist/esm/utilities/direction.js +10 -0
  401. package/dist/esm/utilities/index.js +8 -0
  402. package/dist/esm/utilities/intersection-service.js +91 -0
  403. package/dist/esm/utilities/match-media-stylesheet-behavior.js +140 -0
  404. package/dist/esm/utilities/property-stylesheet-behavior.js +52 -0
  405. package/dist/esm/utilities/resize-observer.js +5 -0
  406. package/dist/esm/utilities/root-active-element.js +8 -0
  407. package/dist/esm/utilities/style/disabled.js +5 -0
  408. package/dist/esm/utilities/style/display.js +14 -0
  409. package/dist/esm/utilities/style/focus.js +9 -0
  410. package/dist/esm/utilities/style/index.js +3 -0
  411. package/dist/esm/utilities/whitespace-filter.js +13 -0
  412. package/dist/fast-foundation.d.ts +9744 -0
  413. package/dist/fast-foundation.js +19097 -0
  414. package/dist/fast-foundation.min.js +19 -0
  415. package/dist/tsdoc-metadata.json +11 -0
  416. package/package.json +101 -0
@@ -0,0 +1 @@
1
+ export * from "./di.js";
@@ -0,0 +1,280 @@
1
+ import { __decorate } from "tslib";
2
+ import { attr, DOM, Observable } from "@ni/fast-element";
3
+ import { keyEscape, keyTab } from "@ni/fast-web-utilities";
4
+ import { isTabbable } from "tabbable";
5
+ import { FoundationElement } from "../foundation-element/foundation-element.js";
6
+ /**
7
+ * A Switch Custom HTML Element.
8
+ * Implements the {@link https://www.w3.org/TR/wai-aria-1.1/#dialog | ARIA dialog }.
9
+ *
10
+ * @slot - The default slot for the dialog content
11
+ * @csspart positioning-region - A wrapping element used to center the dialog and position the modal overlay
12
+ * @csspart overlay - The modal dialog overlay
13
+ * @csspart control - The dialog element
14
+ * @fires cancel - Fires a custom 'cancel' event when the modal overlay is clicked
15
+ * @fires close - Fires a custom 'close' event when the dialog is hidden
16
+ *
17
+ * @public
18
+ */
19
+ export class Dialog extends FoundationElement {
20
+ constructor() {
21
+ super(...arguments);
22
+ /**
23
+ * Indicates the element is modal. When modal, user mouse interaction will be limited to the contents of the element by a modal
24
+ * overlay. Clicks on the overlay will cause the dialog to emit a "dismiss" event.
25
+ * @public
26
+ * @defaultValue - true
27
+ * @remarks
28
+ * HTML Attribute: modal
29
+ */
30
+ this.modal = true;
31
+ /**
32
+ * The hidden state of the element.
33
+ *
34
+ * @public
35
+ * @defaultValue - false
36
+ * @remarks
37
+ * HTML Attribute: hidden
38
+ */
39
+ this.hidden = false;
40
+ /**
41
+ * Indicates that the dialog should trap focus.
42
+ *
43
+ * @public
44
+ * @defaultValue - true
45
+ * @remarks
46
+ * HTML Attribute: trap-focus
47
+ */
48
+ this.trapFocus = true;
49
+ this.trapFocusChanged = () => {
50
+ if (this.$fastController.isConnected) {
51
+ this.updateTrapFocus();
52
+ }
53
+ };
54
+ /**
55
+ * @internal
56
+ */
57
+ this.isTrappingFocus = false;
58
+ this.handleDocumentKeydown = (e) => {
59
+ if (!e.defaultPrevented && !this.hidden) {
60
+ switch (e.key) {
61
+ case keyEscape:
62
+ this.dismiss();
63
+ e.preventDefault();
64
+ break;
65
+ case keyTab:
66
+ this.handleTabKeyDown(e);
67
+ break;
68
+ }
69
+ }
70
+ };
71
+ this.handleDocumentFocus = (e) => {
72
+ if (!e.defaultPrevented && this.shouldForceFocus(e.target)) {
73
+ this.focusFirstElement();
74
+ e.preventDefault();
75
+ }
76
+ };
77
+ this.handleTabKeyDown = (e) => {
78
+ if (!this.trapFocus || this.hidden) {
79
+ return;
80
+ }
81
+ const bounds = this.getTabQueueBounds();
82
+ if (bounds.length === 0) {
83
+ return;
84
+ }
85
+ if (bounds.length === 1) {
86
+ // keep focus on single element
87
+ bounds[0].focus();
88
+ e.preventDefault();
89
+ return;
90
+ }
91
+ if (e.shiftKey && e.target === bounds[0]) {
92
+ bounds[bounds.length - 1].focus();
93
+ e.preventDefault();
94
+ }
95
+ else if (!e.shiftKey && e.target === bounds[bounds.length - 1]) {
96
+ bounds[0].focus();
97
+ e.preventDefault();
98
+ }
99
+ return;
100
+ };
101
+ this.getTabQueueBounds = () => {
102
+ const bounds = [];
103
+ return Dialog.reduceTabbableItems(bounds, this);
104
+ };
105
+ /**
106
+ * focus on first element of tab queue
107
+ */
108
+ this.focusFirstElement = () => {
109
+ const bounds = this.getTabQueueBounds();
110
+ if (bounds.length > 0) {
111
+ bounds[0].focus();
112
+ }
113
+ else {
114
+ if (this.dialog instanceof HTMLElement) {
115
+ this.dialog.focus();
116
+ }
117
+ }
118
+ };
119
+ /**
120
+ * we should only focus if focus has not already been brought to the dialog
121
+ */
122
+ this.shouldForceFocus = (currentFocusElement) => {
123
+ return this.isTrappingFocus && !this.contains(currentFocusElement);
124
+ };
125
+ /**
126
+ * we should we be active trapping focus
127
+ */
128
+ this.shouldTrapFocus = () => {
129
+ return this.trapFocus && !this.hidden;
130
+ };
131
+ /**
132
+ *
133
+ *
134
+ * @internal
135
+ */
136
+ this.updateTrapFocus = (shouldTrapFocusOverride) => {
137
+ const shouldTrapFocus = shouldTrapFocusOverride === undefined
138
+ ? this.shouldTrapFocus()
139
+ : shouldTrapFocusOverride;
140
+ if (shouldTrapFocus && !this.isTrappingFocus) {
141
+ this.isTrappingFocus = true;
142
+ // Add an event listener for focusin events if we are trapping focus
143
+ document.addEventListener("focusin", this.handleDocumentFocus);
144
+ DOM.queueUpdate(() => {
145
+ if (this.shouldForceFocus(document.activeElement)) {
146
+ this.focusFirstElement();
147
+ }
148
+ });
149
+ }
150
+ else if (!shouldTrapFocus && this.isTrappingFocus) {
151
+ this.isTrappingFocus = false;
152
+ // remove event listener if we are not trapping focus
153
+ document.removeEventListener("focusin", this.handleDocumentFocus);
154
+ }
155
+ };
156
+ }
157
+ /**
158
+ * @internal
159
+ */
160
+ dismiss() {
161
+ this.$emit("dismiss");
162
+ // implement `<dialog>` interface
163
+ this.$emit("cancel");
164
+ }
165
+ /**
166
+ * The method to show the dialog.
167
+ *
168
+ * @public
169
+ */
170
+ show() {
171
+ this.hidden = false;
172
+ }
173
+ /**
174
+ * The method to hide the dialog.
175
+ *
176
+ * @public
177
+ */
178
+ hide() {
179
+ this.hidden = true;
180
+ // implement `<dialog>` interface
181
+ this.$emit("close");
182
+ }
183
+ /**
184
+ * @internal
185
+ */
186
+ connectedCallback() {
187
+ super.connectedCallback();
188
+ document.addEventListener("keydown", this.handleDocumentKeydown);
189
+ this.notifier = Observable.getNotifier(this);
190
+ this.notifier.subscribe(this, "hidden");
191
+ this.updateTrapFocus();
192
+ }
193
+ /**
194
+ * @internal
195
+ */
196
+ disconnectedCallback() {
197
+ super.disconnectedCallback();
198
+ // remove keydown event listener
199
+ document.removeEventListener("keydown", this.handleDocumentKeydown);
200
+ // if we are trapping focus remove the focusin listener
201
+ this.updateTrapFocus(false);
202
+ this.notifier.unsubscribe(this, "hidden");
203
+ }
204
+ /**
205
+ * @internal
206
+ */
207
+ handleChange(source, propertyName) {
208
+ switch (propertyName) {
209
+ case "hidden":
210
+ this.updateTrapFocus();
211
+ break;
212
+ default:
213
+ break;
214
+ }
215
+ }
216
+ /**
217
+ * Reduce a collection to only its focusable elements.
218
+ *
219
+ * @param elements - Collection of elements to reduce
220
+ * @param element - The current element
221
+ *
222
+ * @internal
223
+ */
224
+ static reduceTabbableItems(elements, element) {
225
+ if (element.getAttribute("tabindex") === "-1") {
226
+ return elements;
227
+ }
228
+ if (isTabbable(element) ||
229
+ (Dialog.isFocusableFastElement(element) && Dialog.hasTabbableShadow(element))) {
230
+ elements.push(element);
231
+ return elements;
232
+ }
233
+ if (element.childElementCount) {
234
+ return elements.concat(Array.from(element.children).reduce(Dialog.reduceTabbableItems, []));
235
+ }
236
+ return elements;
237
+ }
238
+ /**
239
+ * Test if element is focusable fast element
240
+ *
241
+ * @param element - The element to check
242
+ *
243
+ * @internal
244
+ */
245
+ static isFocusableFastElement(element) {
246
+ var _a, _b;
247
+ return !!((_b = (_a = element.$fastController) === null || _a === void 0 ? void 0 : _a.definition.shadowOptions) === null || _b === void 0 ? void 0 : _b.delegatesFocus);
248
+ }
249
+ /**
250
+ * Test if the element has a focusable shadow
251
+ *
252
+ * @param element - The element to check
253
+ *
254
+ * @internal
255
+ */
256
+ static hasTabbableShadow(element) {
257
+ var _a, _b;
258
+ return Array.from((_b = (_a = element.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelectorAll("*")) !== null && _b !== void 0 ? _b : []).some(x => {
259
+ return isTabbable(x);
260
+ });
261
+ }
262
+ }
263
+ __decorate([
264
+ attr({ mode: "boolean" })
265
+ ], Dialog.prototype, "modal", void 0);
266
+ __decorate([
267
+ attr({ mode: "boolean" })
268
+ ], Dialog.prototype, "hidden", void 0);
269
+ __decorate([
270
+ attr({ attribute: "trap-focus", mode: "boolean" })
271
+ ], Dialog.prototype, "trapFocus", void 0);
272
+ __decorate([
273
+ attr({ attribute: "aria-describedby" })
274
+ ], Dialog.prototype, "ariaDescribedby", void 0);
275
+ __decorate([
276
+ attr({ attribute: "aria-labelledby" })
277
+ ], Dialog.prototype, "ariaLabelledby", void 0);
278
+ __decorate([
279
+ attr({ attribute: "aria-label" })
280
+ ], Dialog.prototype, "ariaLabel", void 0);
@@ -0,0 +1,30 @@
1
+ import { html, ref, when } from "@ni/fast-element";
2
+ /**
3
+ * The template for the {@link @ni/fast-foundation#Dialog} component.
4
+ * @public
5
+ */
6
+ export const dialogTemplate = (context, definition) => html `
7
+ <div class="positioning-region" part="positioning-region">
8
+ ${when(x => x.modal, html `
9
+ <div
10
+ class="overlay"
11
+ part="overlay"
12
+ role="presentation"
13
+ @click="${x => x.dismiss()}"
14
+ ></div>
15
+ `)}
16
+ <div
17
+ role="dialog"
18
+ tabindex="-1"
19
+ class="control"
20
+ part="control"
21
+ aria-modal="${x => x.modal}"
22
+ aria-describedby="${x => x.ariaDescribedby}"
23
+ aria-labelledby="${x => x.ariaLabelledby}"
24
+ aria-label="${x => x.ariaLabel}"
25
+ ${ref("dialog")}
26
+ >
27
+ <slot></slot>
28
+ </div>
29
+ </div>
30
+ `;
@@ -0,0 +1,2 @@
1
+ export * from "./dialog.template.js";
2
+ export * from "./dialog.js";
@@ -0,0 +1,88 @@
1
+ import { AttachedBehaviorHTMLDirective, DOM, SubscriberSet, } from "@ni/fast-element";
2
+ const observer = new MutationObserver((mutations) => {
3
+ for (const mutation of mutations) {
4
+ AttributeReflectionSubscriptionSet.getOrCreateFor(mutation.target).notify(mutation.attributeName);
5
+ }
6
+ });
7
+ class AttributeReflectionSubscriptionSet extends SubscriberSet {
8
+ subscribe(subscriber) {
9
+ super.subscribe(subscriber);
10
+ if (!this.watchedAttributes.has(subscriber.attributes)) {
11
+ this.watchedAttributes.add(subscriber.attributes);
12
+ this.observe();
13
+ }
14
+ }
15
+ constructor(source) {
16
+ super(source);
17
+ this.watchedAttributes = new Set();
18
+ AttributeReflectionSubscriptionSet.subscriberCache.set(source, this);
19
+ }
20
+ unsubscribe(subscriber) {
21
+ super.unsubscribe(subscriber);
22
+ if (this.watchedAttributes.has(subscriber.attributes)) {
23
+ this.watchedAttributes.delete(subscriber.attributes);
24
+ this.observe();
25
+ }
26
+ }
27
+ static getOrCreateFor(source) {
28
+ return (this.subscriberCache.get(source) ||
29
+ new AttributeReflectionSubscriptionSet(source));
30
+ }
31
+ observe() {
32
+ const attributeFilter = [];
33
+ for (const attributes of this.watchedAttributes.values()) {
34
+ for (let i = 0; i < attributes.length; i++) {
35
+ attributeFilter.push(attributes[i]);
36
+ }
37
+ }
38
+ observer.observe(this.source, { attributeFilter });
39
+ }
40
+ }
41
+ AttributeReflectionSubscriptionSet.subscriberCache = new WeakMap();
42
+ class ReflectAttrBehavior {
43
+ constructor(target, attributes) {
44
+ this.target = target;
45
+ this.attributes = Object.freeze(attributes);
46
+ }
47
+ bind(source) {
48
+ AttributeReflectionSubscriptionSet.getOrCreateFor(source).subscribe(this);
49
+ // Reflect any existing attributes because MutationObserver will only
50
+ // handle *changes* to attributes.
51
+ if (source.hasAttributes()) {
52
+ for (let i = 0; i < source.attributes.length; i++) {
53
+ this.handleChange(source, source.attributes[i].name);
54
+ }
55
+ }
56
+ }
57
+ unbind(source) {
58
+ AttributeReflectionSubscriptionSet.getOrCreateFor(source).unsubscribe(this);
59
+ }
60
+ handleChange(source, arg) {
61
+ // In cases where two or more ReflectAttrBehavior instances are bound to the same element,
62
+ // they will share a Subscriber implementation. In that case, this handle change can be invoked with
63
+ // attributes an instances doesn't need to reflect. This guards against reflecting attrs
64
+ // that shouldn't be reflected.
65
+ if (this.attributes.includes(arg)) {
66
+ DOM.setAttribute(this.target, arg, source.getAttribute(arg));
67
+ }
68
+ }
69
+ }
70
+ /**
71
+ * Reflects attributes from the host element to the target element of the directive.
72
+ * @param attributes - The attributes to reflect
73
+ *
74
+ * @beta
75
+ * @example
76
+ * ```ts
77
+ * const template = html`
78
+ * <button
79
+ * ${reflectAttributes("aria-label", "aria-describedby")}
80
+ * >
81
+ * hello world
82
+ * </button
83
+ * `
84
+ * ```
85
+ */
86
+ export function reflectAttributes(...attributes) {
87
+ return new AttachedBehaviorHTMLDirective("fast-reflect-attr", ReflectAttrBehavior, attributes);
88
+ }
@@ -0,0 +1,72 @@
1
+ import { __decorate } from "tslib";
2
+ import { attr } from "@ni/fast-element";
3
+ import { FoundationElement } from "../foundation-element/foundation-element.js";
4
+ /**
5
+ * A Disclosure Custom HTML Element.
6
+ * Based largely on the {@link https://w3c.github.io/aria-practices/#disclosure | disclosure element }.
7
+ *
8
+ * @slot start - Content which can be provided before the summary content
9
+ * @slot end - Content which can be provided after the summary content
10
+ * @slot title - The summary content
11
+ * @slot - The default slot for the disclosure content
12
+ * @fires toggle - fires a toggle event when the summary is toggled
13
+ *
14
+ * @public
15
+ */
16
+ export class Disclosure extends FoundationElement {
17
+ /**
18
+ * @internal
19
+ */
20
+ connectedCallback() {
21
+ super.connectedCallback();
22
+ this.setup();
23
+ }
24
+ /**
25
+ * @internal
26
+ */
27
+ disconnectedCallback() {
28
+ super.disconnectedCallback();
29
+ this.details.removeEventListener("toggle", this.onToggle);
30
+ }
31
+ /**
32
+ * Show extra content.
33
+ */
34
+ show() {
35
+ this.details.open = true;
36
+ }
37
+ /**
38
+ * Hide extra content.
39
+ */
40
+ hide() {
41
+ this.details.open = false;
42
+ }
43
+ /**
44
+ * Toggle the current(expanded/collapsed) state.
45
+ */
46
+ toggle() {
47
+ this.details.open = !this.details.open;
48
+ }
49
+ /**
50
+ * Register listener and set default disclosure mode
51
+ */
52
+ setup() {
53
+ this.onToggle = this.onToggle.bind(this);
54
+ this.details.addEventListener("toggle", this.onToggle);
55
+ if (this.expanded) {
56
+ this.show();
57
+ }
58
+ }
59
+ /**
60
+ * Update the aria attr and fire `toggle` event
61
+ */
62
+ onToggle() {
63
+ this.expanded = this.details.open;
64
+ this.$emit("toggle");
65
+ }
66
+ }
67
+ __decorate([
68
+ attr({ mode: "boolean" })
69
+ ], Disclosure.prototype, "expanded", void 0);
70
+ __decorate([
71
+ attr
72
+ ], Disclosure.prototype, "title", void 0);
@@ -0,0 +1,20 @@
1
+ import { html, ref } from "@ni/fast-element";
2
+ /**
3
+ * The template for the {@link @ni/fast-foundation#Disclosure} component.
4
+ * @public
5
+ */
6
+ export const disclosureTemplate = (context, definition) => html `
7
+ <details class="disclosure" ${ref("details")}>
8
+ <summary
9
+ class="invoker"
10
+ role="button"
11
+ aria-controls="disclosure-content"
12
+ aria-expanded="${x => x.expanded}"
13
+ >
14
+ <slot name="start"></slot>
15
+ <slot name="title">${x => x.title}</slot>
16
+ <slot name="end"></slot>
17
+ </summary>
18
+ <div id="disclosure-content"><slot></slot></div>
19
+ </details>
20
+ `;
@@ -0,0 +1,2 @@
1
+ export * from "./disclosure.template.js";
2
+ export * from "./disclosure.js";
@@ -0,0 +1,39 @@
1
+ import { __decorate } from "tslib";
2
+ import { attr } from "@ni/fast-element";
3
+ import { Orientation } from "@ni/fast-web-utilities";
4
+ import { FoundationElement } from "../foundation-element/foundation-element.js";
5
+ import { DividerRole } from "./divider.options.js";
6
+ export { DividerRole };
7
+ /**
8
+ * A Divider Custom HTML Element.
9
+ * Implements the {@link https://www.w3.org/TR/wai-aria-1.1/#separator | ARIA separator } or {@link https://www.w3.org/TR/wai-aria-1.1/#presentation | ARIA presentation}.
10
+ *
11
+ * @public
12
+ */
13
+ export class Divider extends FoundationElement {
14
+ constructor() {
15
+ super(...arguments);
16
+ /**
17
+ * The role of the element.
18
+ *
19
+ * @public
20
+ * @remarks
21
+ * HTML Attribute: role
22
+ */
23
+ this.role = DividerRole.separator;
24
+ /**
25
+ * The orientation of the divider.
26
+ *
27
+ * @public
28
+ * @remarks
29
+ * HTML Attribute: orientation
30
+ */
31
+ this.orientation = Orientation.horizontal;
32
+ }
33
+ }
34
+ __decorate([
35
+ attr
36
+ ], Divider.prototype, "role", void 0);
37
+ __decorate([
38
+ attr
39
+ ], Divider.prototype, "orientation", void 0);
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Divider roles
3
+ * @public
4
+ */
5
+ export const DividerRole = {
6
+ /**
7
+ * The divider semantically separates content
8
+ */
9
+ separator: "separator",
10
+ /**
11
+ * The divider has no semantic value and is for visual presentation only.
12
+ */
13
+ presentation: "presentation",
14
+ };
@@ -0,0 +1,8 @@
1
+ import { html } from "@ni/fast-element";
2
+ /**
3
+ * The template for the {@link @ni/fast-foundation#Divider} component.
4
+ * @public
5
+ */
6
+ export const dividerTemplate = (context, definition) => html `
7
+ <template role="${x => x.role}" aria-orientation="${x => x.orientation}"></template>
8
+ `;
@@ -0,0 +1,2 @@
1
+ export * from "./divider.template.js";
2
+ export * from "./divider.js";
@@ -0,0 +1,65 @@
1
+ import { __decorate } from "tslib";
2
+ import { attr, booleanConverter } from "@ni/fast-element";
3
+ import { FoundationElement, } from "../foundation-element/foundation-element.js";
4
+ import { FlipperDirection } from "./flipper.options.js";
5
+ export { FlipperDirection };
6
+ /**
7
+ * A Flipper Custom HTML Element.
8
+ * Flippers are a form of button that implies directional content navigation, such as in a carousel.
9
+ *
10
+ * @slot next - The next flipper content
11
+ * @slot previous - The previous flipper content
12
+ * @csspart next - Wraps the next flipper content
13
+ * @csspart previous - Wraps the previous flipper content
14
+ * @fires click - Fires a custom 'click' event when Enter or Space is invoked via keyboard and the flipper is exposed to assistive technologies.
15
+ *
16
+ * @public
17
+ */
18
+ export class Flipper extends FoundationElement {
19
+ constructor() {
20
+ super(...arguments);
21
+ /**
22
+ * Indicates the flipper should be hidden from assistive technology. Because flippers are often supplementary navigation, they are often hidden from assistive technology.
23
+ *
24
+ * @public
25
+ * @defaultValue - true
26
+ * @remarks
27
+ * HTML Attribute: aria-hidden
28
+ */
29
+ this.hiddenFromAT = true;
30
+ /**
31
+ * The direction that the flipper implies navigating.
32
+ *
33
+ * @public
34
+ * @remarks
35
+ * HTML Attribute: direction
36
+ */
37
+ this.direction = FlipperDirection.next;
38
+ }
39
+ /**
40
+ * Simulate a click event when the flipper has focus and the user hits enter or space keys
41
+ * Blur focus if the user hits escape key
42
+ * @param e - Keyboard event
43
+ * @public
44
+ */
45
+ keyupHandler(e) {
46
+ if (!this.hiddenFromAT) {
47
+ const key = e.key;
48
+ if (key === "Enter" || key === "Space") {
49
+ this.$emit("click", e);
50
+ }
51
+ if (key === "Escape") {
52
+ this.blur();
53
+ }
54
+ }
55
+ }
56
+ }
57
+ __decorate([
58
+ attr({ mode: "boolean" })
59
+ ], Flipper.prototype, "disabled", void 0);
60
+ __decorate([
61
+ attr({ attribute: "aria-hidden", converter: booleanConverter })
62
+ ], Flipper.prototype, "hiddenFromAT", void 0);
63
+ __decorate([
64
+ attr
65
+ ], Flipper.prototype, "direction", void 0);
@@ -0,0 +1,8 @@
1
+ /**
2
+ * The direction options for flipper.
3
+ * @public
4
+ */
5
+ export const FlipperDirection = {
6
+ next: "next",
7
+ previous: "previous",
8
+ };
@@ -0,0 +1,30 @@
1
+ import { html, when } from "@ni/fast-element";
2
+ import { FlipperDirection } from "./flipper.options.js";
3
+ /**
4
+ * The template for the {@link @ni/fast-foundation#Flipper} component.
5
+ * @public
6
+ */
7
+ export const flipperTemplate = (context, definition) => html `
8
+ <template
9
+ role="button"
10
+ aria-disabled="${x => (x.disabled ? true : void 0)}"
11
+ tabindex="${x => (x.hiddenFromAT ? -1 : 0)}"
12
+ class="${x => x.direction} ${x => (x.disabled ? "disabled" : "")}"
13
+ @keyup="${(x, c) => x.keyupHandler(c.event)}"
14
+ >
15
+ ${when(x => x.direction === FlipperDirection.next, html `
16
+ <span part="next" class="next">
17
+ <slot name="next">
18
+ ${definition.next || ""}
19
+ </slot>
20
+ </span>
21
+ `)}
22
+ ${when(x => x.direction === FlipperDirection.previous, html `
23
+ <span part="previous" class="previous">
24
+ <slot name="previous">
25
+ ${definition.previous || ""}
26
+ </slot>
27
+ </span>
28
+ `)}
29
+ </template>
30
+ `;
@@ -0,0 +1,2 @@
1
+ export * from "./flipper.template.js";
2
+ export * from "./flipper.js";