@fabric-msft/fabric-web 4.0.0 → 5.0.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 (435) hide show
  1. package/CHANGELOG.json +334 -0
  2. package/CHANGELOG.md +108 -1
  3. package/dist/dts/components/accordion-menu/accordion-menu.d.ts +2 -2
  4. package/dist/dts/components/accordion-menu/accordion-menu.d.ts.map +1 -1
  5. package/dist/dts/components/accordion-menu/accordion-menu.template.d.ts +1 -1
  6. package/dist/dts/components/accordion-menu/accordion-menu.template.d.ts.map +1 -1
  7. package/dist/dts/components/accordion-menu-panel/accordion-menu-panel.d.ts +2 -2
  8. package/dist/dts/components/accordion-menu-panel/accordion-menu-panel.d.ts.map +1 -1
  9. package/dist/dts/components/accordion-menu-panel/accordion-menu-panel.template.d.ts +1 -1
  10. package/dist/dts/components/accordion-menu-panel/accordion-menu-panel.template.d.ts.map +1 -1
  11. package/dist/dts/components/button/button.d.ts +1 -1
  12. package/dist/dts/components/button/button.d.ts.map +1 -1
  13. package/dist/dts/components/card/card.template.d.ts +1 -1
  14. package/dist/dts/components/card/card.template.d.ts.map +1 -1
  15. package/dist/dts/components/card-footer/card-footer.template.d.ts +1 -1
  16. package/dist/dts/components/card-footer/card-footer.template.d.ts.map +1 -1
  17. package/dist/dts/components/card-header/card-header.template.d.ts +1 -1
  18. package/dist/dts/components/card-header/card-header.template.d.ts.map +1 -1
  19. package/dist/dts/components/card-preview/card-preview.template.d.ts +1 -1
  20. package/dist/dts/components/card-preview/card-preview.template.d.ts.map +1 -1
  21. package/dist/dts/components/carousel/carousel.template.d.ts +1 -1
  22. package/dist/dts/components/carousel/carousel.template.d.ts.map +1 -1
  23. package/dist/dts/components/component-register.d.ts +67 -0
  24. package/dist/dts/components/component-register.d.ts.map +1 -0
  25. package/dist/dts/components/compound-button/compound-button.d.ts +1 -1
  26. package/dist/dts/components/compound-button/compound-button.d.ts.map +1 -1
  27. package/dist/dts/components/compound-button/compound-button.options.d.ts +1 -1
  28. package/dist/dts/components/compound-button/compound-button.options.d.ts.map +1 -1
  29. package/dist/dts/components/counter-badge/counter-badge.definition.d.ts +1 -1
  30. package/dist/dts/components/counter-badge/counter-badge.definition.d.ts.map +1 -1
  31. package/dist/dts/components/counter-badge/counter-badge.options.d.ts +64 -0
  32. package/dist/dts/components/counter-badge/counter-badge.options.d.ts.map +1 -0
  33. package/dist/dts/components/counter-badge/index.d.ts +4 -3
  34. package/dist/dts/components/counter-badge/index.d.ts.map +1 -1
  35. package/dist/dts/components/field/field.d.ts +32 -1
  36. package/dist/dts/components/field/field.d.ts.map +1 -1
  37. package/dist/dts/components/filter-pill/filter-pill.d.ts +2 -2
  38. package/dist/dts/components/filter-pill/filter-pill.d.ts.map +1 -1
  39. package/dist/dts/components/filter-pill/filter-pill.styles.d.ts.map +1 -1
  40. package/dist/dts/components/filter-pill/filter-pill.template.d.ts +1 -1
  41. package/dist/dts/components/filter-pill/filter-pill.template.d.ts.map +1 -1
  42. package/dist/dts/components/listbox/listbox.d.ts +1 -1
  43. package/dist/dts/components/listbox/listbox.d.ts.map +1 -1
  44. package/dist/dts/components/loading-button/loading-button.template.d.ts +1 -1
  45. package/dist/dts/components/loading-button/loading-button.template.d.ts.map +1 -1
  46. package/dist/dts/components/menu/menu.d.ts +71 -83
  47. package/dist/dts/components/menu/menu.d.ts.map +1 -1
  48. package/dist/dts/components/menu/menu.positioning.d.ts +26 -67
  49. package/dist/dts/components/menu/menu.positioning.d.ts.map +1 -1
  50. package/dist/dts/components/menu/menu.styles.d.ts.map +1 -1
  51. package/dist/dts/components/menu/menu.template.d.ts +1 -1
  52. package/dist/dts/components/menu/menu.template.d.ts.map +1 -1
  53. package/dist/dts/components/menu-item/menu-item.d.ts +4 -4
  54. package/dist/dts/components/menu-item/menu-item.d.ts.map +1 -1
  55. package/dist/dts/components/menu-list/menu-list.d.ts +1 -1
  56. package/dist/dts/components/menu-list/menu-list.d.ts.map +1 -1
  57. package/dist/dts/components/multi-view/multi-view.template.d.ts +1 -1
  58. package/dist/dts/components/multi-view/multi-view.template.d.ts.map +1 -1
  59. package/dist/dts/components/multi-view-controller/multi-view-controller.styles.d.ts.map +1 -1
  60. package/dist/dts/components/multi-view-controller/multi-view-controller.template.d.ts +1 -1
  61. package/dist/dts/components/multi-view-controller/multi-view-controller.template.d.ts.map +1 -1
  62. package/dist/dts/components/multi-view-group/multi-view-group.template.d.ts +1 -1
  63. package/dist/dts/components/multi-view-group/multi-view-group.template.d.ts.map +1 -1
  64. package/dist/dts/components/option-group/option-group.d.ts +1 -1
  65. package/dist/dts/components/option-group/option-group.d.ts.map +1 -1
  66. package/dist/dts/components/option-group/option-group.template.d.ts +1 -1
  67. package/dist/dts/components/option-group/option-group.template.d.ts.map +1 -1
  68. package/dist/dts/components/popover/index.d.ts +1 -1
  69. package/dist/dts/components/popover/index.d.ts.map +1 -1
  70. package/dist/dts/components/popover/popover.d.ts +53 -74
  71. package/dist/dts/components/popover/popover.d.ts.map +1 -1
  72. package/dist/dts/components/popover/popover.definition.d.ts +1 -1
  73. package/dist/dts/components/popover/popover.definition.d.ts.map +1 -1
  74. package/dist/dts/components/popover/popover.options.d.ts +25 -10
  75. package/dist/dts/components/popover/popover.options.d.ts.map +1 -1
  76. package/dist/dts/components/popover/popover.positioning.d.ts +92 -0
  77. package/dist/dts/components/popover/popover.positioning.d.ts.map +1 -0
  78. package/dist/dts/components/popover/popover.styles.d.ts.map +1 -1
  79. package/dist/dts/components/popover/popover.template.d.ts +1 -1
  80. package/dist/dts/components/popover/popover.template.d.ts.map +1 -1
  81. package/dist/dts/components/search-box/index.d.ts +1 -1
  82. package/dist/dts/components/search-box/index.d.ts.map +1 -1
  83. package/dist/dts/components/search-box/search-box.d.ts +1 -1
  84. package/dist/dts/components/search-box/search-box.d.ts.map +1 -1
  85. package/dist/dts/components/search-box/search-box.options.d.ts.map +1 -1
  86. package/dist/dts/components/search-box/search-box.template.d.ts +1 -1
  87. package/dist/dts/components/search-box/search-box.template.d.ts.map +1 -1
  88. package/dist/dts/components/svg-icon/scripts/sprite-builder.d.ts +1 -1
  89. package/dist/dts/components/svg-icon/scripts/sprite-builder.d.ts.map +1 -1
  90. package/dist/dts/components/svg-icon/svg-icon.styles.d.ts.map +1 -1
  91. package/dist/dts/components/table/index.d.ts +6 -5
  92. package/dist/dts/components/table/index.d.ts.map +1 -1
  93. package/dist/dts/components/table/table.d.ts +2 -2
  94. package/dist/dts/components/table/table.d.ts.map +1 -1
  95. package/dist/dts/components/table/table.options.d.ts +4 -4
  96. package/dist/dts/components/table/table.options.d.ts.map +1 -1
  97. package/dist/dts/components/table/table.styles.d.ts.map +1 -1
  98. package/dist/dts/components/table/table.template.d.ts +1 -1
  99. package/dist/dts/components/table/table.template.d.ts.map +1 -1
  100. package/dist/dts/components/table-cell/index.d.ts +6 -5
  101. package/dist/dts/components/table-cell/index.d.ts.map +1 -1
  102. package/dist/dts/components/table-cell/table-cell.options.d.ts +2 -2
  103. package/dist/dts/components/table-cell/table-cell.options.d.ts.map +1 -1
  104. package/dist/dts/components/table-cell/table-cell.template.d.ts +1 -1
  105. package/dist/dts/components/table-cell/table-cell.template.d.ts.map +1 -1
  106. package/dist/dts/components/tag/tag.d.ts +1 -1
  107. package/dist/dts/components/tag/tag.d.ts.map +1 -1
  108. package/dist/dts/components/tag/tag.styles.d.ts.map +1 -1
  109. package/dist/dts/components/tag/tag.template.d.ts +1 -1
  110. package/dist/dts/components/tag/tag.template.d.ts.map +1 -1
  111. package/dist/dts/components/teaching-bubble/index.d.ts +2 -0
  112. package/dist/dts/components/teaching-bubble/index.d.ts.map +1 -1
  113. package/dist/dts/components/teaching-bubble/teaching-bubble.d.ts +1 -12
  114. package/dist/dts/components/teaching-bubble/teaching-bubble.d.ts.map +1 -1
  115. package/dist/dts/components/teaching-bubble/teaching-bubble.styles.d.ts.map +1 -1
  116. package/dist/dts/components/teaching-bubble/teaching-bubble.template.d.ts +1 -1
  117. package/dist/dts/components/teaching-bubble/teaching-bubble.template.d.ts.map +1 -1
  118. package/dist/dts/components/text/index.d.ts +4 -3
  119. package/dist/dts/components/text/index.d.ts.map +1 -1
  120. package/dist/dts/components/text/text.d.ts +3 -3
  121. package/dist/dts/components/text/text.options.d.ts +35 -0
  122. package/dist/dts/components/text/text.options.d.ts.map +1 -0
  123. package/dist/dts/components/text-input/index.d.ts +1 -1
  124. package/dist/dts/components/text-input/index.d.ts.map +1 -1
  125. package/dist/dts/components/text-input/text-input.base.d.ts +3 -3
  126. package/dist/dts/components/text-input/text-input.base.d.ts.map +1 -1
  127. package/dist/dts/components/text-input/text-input.d.ts.map +1 -1
  128. package/dist/dts/components/text-input/text-input.styles.d.ts.map +1 -1
  129. package/dist/dts/components/text-input/text-input.template.d.ts +1 -2
  130. package/dist/dts/components/text-input/text-input.template.d.ts.map +1 -1
  131. package/dist/dts/components/textarea/index.d.ts +5 -3
  132. package/dist/dts/components/textarea/index.d.ts.map +1 -1
  133. package/dist/dts/components/textarea/textarea.options.d.ts +39 -0
  134. package/dist/dts/components/textarea/textarea.options.d.ts.map +1 -0
  135. package/dist/dts/components/tooltip/tooltip.d.ts +27 -0
  136. package/dist/dts/components/tooltip/tooltip.d.ts.map +1 -1
  137. package/dist/dts/components/tooltip/tooltip.template.d.ts +13 -0
  138. package/dist/dts/components/tooltip/tooltip.template.d.ts.map +1 -0
  139. package/dist/dts/components/tree/tree.d.ts +16 -0
  140. package/dist/dts/components/tree/tree.d.ts.map +1 -1
  141. package/dist/dts/components/tree-item/index.d.ts +2 -1
  142. package/dist/dts/components/tree-item/index.d.ts.map +1 -1
  143. package/dist/dts/components/tree-item/tree-item.definition.d.ts.map +1 -1
  144. package/dist/dts/components/tree-item/tree-item.styles.d.ts +2 -0
  145. package/dist/dts/components/tree-item/tree-item.styles.d.ts.map +1 -0
  146. package/dist/dts/components/tree-item/tree-item.template.d.ts +4 -0
  147. package/dist/dts/components/tree-item/tree-item.template.d.ts.map +1 -0
  148. package/dist/dts/components/wizard/index.d.ts +1 -1
  149. package/dist/dts/components/wizard/index.d.ts.map +1 -1
  150. package/dist/dts/components/wizard/wizard.d.ts +1 -1
  151. package/dist/dts/components/wizard/wizard.d.ts.map +1 -1
  152. package/dist/dts/components/wizard/wizard.template.d.ts +1 -1
  153. package/dist/dts/components/wizard/wizard.template.d.ts.map +1 -1
  154. package/dist/dts/components/wizard-panel/wizard-panel.template.d.ts +1 -1
  155. package/dist/dts/components/wizard-panel/wizard-panel.template.d.ts.map +1 -1
  156. package/dist/dts/components/wizard-step/index.d.ts +1 -1
  157. package/dist/dts/components/wizard-step/index.d.ts.map +1 -1
  158. package/dist/dts/components/wizard-step/wizard-step.d.ts +1 -1
  159. package/dist/dts/components/wizard-step/wizard-step.d.ts.map +1 -1
  160. package/dist/dts/components/wizard-step/wizard-step.styles.d.ts.map +1 -1
  161. package/dist/dts/components/wizard-step/wizard-step.template.d.ts +1 -1
  162. package/dist/dts/components/wizard-step/wizard-step.template.d.ts.map +1 -1
  163. package/dist/dts/index.d.ts +20 -13
  164. package/dist/dts/index.d.ts.map +1 -1
  165. package/dist/dts/util/accessibility-utilities.d.ts +23 -0
  166. package/dist/dts/util/accessibility-utilities.d.ts.map +1 -0
  167. package/dist/dts/util/attribute-utilities.d.ts +9 -0
  168. package/dist/dts/util/attribute-utilities.d.ts.map +1 -0
  169. package/dist/dts/util/debounce.d.ts.map +1 -0
  170. package/dist/dts/util/debug.d.ts +32 -0
  171. package/dist/dts/util/debug.d.ts.map +1 -0
  172. package/dist/dts/util/direction.d.ts +193 -0
  173. package/dist/dts/util/direction.d.ts.map +1 -1
  174. package/dist/dts/util/dom.d.ts +2 -0
  175. package/dist/dts/util/dom.d.ts.map +1 -0
  176. package/dist/dts/util/element-internal-mocks.d.ts +67 -0
  177. package/dist/dts/util/element-internal-mocks.d.ts.map +1 -0
  178. package/dist/dts/util/focus-management.d.ts +132 -0
  179. package/dist/dts/util/focus-management.d.ts.map +1 -0
  180. package/dist/dts/util/hash-utilities.d.ts +8 -0
  181. package/dist/dts/util/hash-utilities.d.ts.map +1 -0
  182. package/dist/dts/util/index.d.ts +13 -6
  183. package/dist/dts/util/index.d.ts.map +1 -1
  184. package/dist/dts/util/positioning/flexible-position-strategy.d.ts +87 -0
  185. package/dist/dts/util/positioning/flexible-position-strategy.d.ts.map +1 -0
  186. package/dist/dts/util/positioning/index.d.ts +9 -0
  187. package/dist/dts/util/positioning/index.d.ts.map +1 -0
  188. package/dist/dts/util/positioning/position-calculator.d.ts +46 -0
  189. package/dist/dts/util/positioning/position-calculator.d.ts.map +1 -0
  190. package/dist/dts/util/positioning/types.d.ts +181 -0
  191. package/dist/dts/util/positioning/types.d.ts.map +1 -0
  192. package/dist/dts/util/template-helpers.d.ts +2 -1
  193. package/dist/dts/util/template-helpers.d.ts.map +1 -1
  194. package/dist/esm/components/accordion-menu/accordion-menu.js +1 -1
  195. package/dist/esm/components/accordion-menu/accordion-menu.js.map +1 -1
  196. package/dist/esm/components/accordion-menu/accordion-menu.styles.js +1 -1
  197. package/dist/esm/components/accordion-menu/accordion-menu.template.js.map +1 -1
  198. package/dist/esm/components/accordion-menu-panel/accordion-menu-panel.js +3 -2
  199. package/dist/esm/components/accordion-menu-panel/accordion-menu-panel.js.map +1 -1
  200. package/dist/esm/components/accordion-menu-panel/accordion-menu-panel.styles.js +3 -2
  201. package/dist/esm/components/accordion-menu-panel/accordion-menu-panel.styles.js.map +1 -1
  202. package/dist/esm/components/accordion-menu-panel/accordion-menu-panel.template.js.map +1 -1
  203. package/dist/esm/components/button/button.js.map +1 -1
  204. package/dist/esm/components/card/card.js.map +1 -1
  205. package/dist/esm/components/card/card.styles.js +1 -1
  206. package/dist/esm/components/card/card.template.js.map +1 -1
  207. package/dist/esm/components/card-footer/card-footer.styles.js +1 -1
  208. package/dist/esm/components/card-footer/card-footer.template.js.map +1 -1
  209. package/dist/esm/components/card-header/card-header.styles.js +1 -1
  210. package/dist/esm/components/card-header/card-header.template.js.map +1 -1
  211. package/dist/esm/components/card-preview/card-preview.styles.js +1 -1
  212. package/dist/esm/components/card-preview/card-preview.template.js.map +1 -1
  213. package/dist/esm/components/carousel/carousel.js +1 -1
  214. package/dist/esm/components/carousel/carousel.js.map +1 -1
  215. package/dist/esm/components/carousel/carousel.styles.js +1 -1
  216. package/dist/esm/components/carousel/carousel.template.js.map +1 -1
  217. package/dist/esm/components/component-register.js +67 -0
  218. package/dist/esm/components/component-register.js.map +1 -0
  219. package/dist/esm/components/compound-button/compound-button.js.map +1 -1
  220. package/dist/esm/components/compound-button/compound-button.options.js +1 -1
  221. package/dist/esm/components/counter-badge/counter-badge.definition.js.map +1 -1
  222. package/dist/esm/components/counter-badge/counter-badge.options.js +32 -0
  223. package/dist/esm/components/counter-badge/counter-badge.options.js.map +1 -0
  224. package/dist/esm/components/counter-badge/define.js +2 -2
  225. package/dist/esm/components/counter-badge/define.js.map +1 -1
  226. package/dist/esm/components/counter-badge/index.js +3 -3
  227. package/dist/esm/components/counter-badge/index.js.map +1 -1
  228. package/dist/esm/components/field/field.js +68 -1
  229. package/dist/esm/components/field/field.js.map +1 -1
  230. package/dist/esm/components/filter-pill/filter-pill.js +1 -1
  231. package/dist/esm/components/filter-pill/filter-pill.js.map +1 -1
  232. package/dist/esm/components/filter-pill/filter-pill.options.js +1 -1
  233. package/dist/esm/components/filter-pill/filter-pill.styles.js +5 -3
  234. package/dist/esm/components/filter-pill/filter-pill.styles.js.map +1 -1
  235. package/dist/esm/components/filter-pill/filter-pill.template.js.map +1 -1
  236. package/dist/esm/components/listbox/listbox.js +1 -1
  237. package/dist/esm/components/listbox/listbox.js.map +1 -1
  238. package/dist/esm/components/loading-button/loading-button.js.map +1 -1
  239. package/dist/esm/components/loading-button/loading-button.template.js +3 -5
  240. package/dist/esm/components/loading-button/loading-button.template.js.map +1 -1
  241. package/dist/esm/components/menu/menu.js +159 -230
  242. package/dist/esm/components/menu/menu.js.map +1 -1
  243. package/dist/esm/components/menu/menu.options.js +1 -1
  244. package/dist/esm/components/menu/menu.options.js.map +1 -1
  245. package/dist/esm/components/menu/menu.positioning.js +98 -201
  246. package/dist/esm/components/menu/menu.positioning.js.map +1 -1
  247. package/dist/esm/components/menu/menu.styles.js +2 -2
  248. package/dist/esm/components/menu/menu.styles.js.map +1 -1
  249. package/dist/esm/components/menu/menu.template.js.map +1 -1
  250. package/dist/esm/components/menu-item/menu-item.js +4 -4
  251. package/dist/esm/components/menu-item/menu-item.js.map +1 -1
  252. package/dist/esm/components/menu-item/menu-item.styles.js +4 -3
  253. package/dist/esm/components/menu-item/menu-item.styles.js.map +1 -1
  254. package/dist/esm/components/menu-item/menu-item.template.js +1 -0
  255. package/dist/esm/components/menu-item/menu-item.template.js.map +1 -1
  256. package/dist/esm/components/menu-list/menu-list.js +1 -1
  257. package/dist/esm/components/menu-list/menu-list.js.map +1 -1
  258. package/dist/esm/components/menu-list/menu-list.styles.js +1 -1
  259. package/dist/esm/components/multi-view/multi-view.styles.js +1 -1
  260. package/dist/esm/components/multi-view/multi-view.template.js +1 -0
  261. package/dist/esm/components/multi-view/multi-view.template.js.map +1 -1
  262. package/dist/esm/components/multi-view-controller/multi-view-controller.styles.js +3 -2
  263. package/dist/esm/components/multi-view-controller/multi-view-controller.styles.js.map +1 -1
  264. package/dist/esm/components/multi-view-controller/multi-view-controller.template.js.map +1 -1
  265. package/dist/esm/components/multi-view-group/multi-view-group.js +1 -0
  266. package/dist/esm/components/multi-view-group/multi-view-group.js.map +1 -1
  267. package/dist/esm/components/multi-view-group/multi-view-group.styles.js +1 -1
  268. package/dist/esm/components/multi-view-group/multi-view-group.template.js.map +1 -1
  269. package/dist/esm/components/option-group/option-group.js +1 -1
  270. package/dist/esm/components/option-group/option-group.js.map +1 -1
  271. package/dist/esm/components/option-group/option-group.template.js.map +1 -1
  272. package/dist/esm/components/popover/define.js +2 -2
  273. package/dist/esm/components/popover/define.js.map +1 -1
  274. package/dist/esm/components/popover/index.js +1 -1
  275. package/dist/esm/components/popover/index.js.map +1 -1
  276. package/dist/esm/components/popover/popover.definition.js.map +1 -1
  277. package/dist/esm/components/popover/popover.js +88 -127
  278. package/dist/esm/components/popover/popover.js.map +1 -1
  279. package/dist/esm/components/popover/popover.options.js +13 -10
  280. package/dist/esm/components/popover/popover.options.js.map +1 -1
  281. package/dist/esm/components/popover/popover.positioning.js +314 -0
  282. package/dist/esm/components/popover/popover.positioning.js.map +1 -0
  283. package/dist/esm/components/popover/popover.styles.js +26 -4
  284. package/dist/esm/components/popover/popover.styles.js.map +1 -1
  285. package/dist/esm/components/popover/popover.template.js +1 -2
  286. package/dist/esm/components/popover/popover.template.js.map +1 -1
  287. package/dist/esm/components/search-box/index.js +1 -1
  288. package/dist/esm/components/search-box/index.js.map +1 -1
  289. package/dist/esm/components/search-box/search-box.js +1 -1
  290. package/dist/esm/components/search-box/search-box.js.map +1 -1
  291. package/dist/esm/components/search-box/search-box.options.js +8 -2
  292. package/dist/esm/components/search-box/search-box.options.js.map +1 -1
  293. package/dist/esm/components/search-box/search-box.styles.js +3 -2
  294. package/dist/esm/components/search-box/search-box.styles.js.map +1 -1
  295. package/dist/esm/components/search-box/search-box.template.js.map +1 -1
  296. package/dist/esm/components/simple-table/simple-table.styles.js +2 -1
  297. package/dist/esm/components/svg-icon/scripts/sprite-builder.js.map +1 -1
  298. package/dist/esm/components/svg-icon/svg-icon.js.map +1 -1
  299. package/dist/esm/components/svg-icon/svg-icon.styles.js +3 -2
  300. package/dist/esm/components/svg-icon/svg-icon.styles.js.map +1 -1
  301. package/dist/esm/components/svg-icon/svg-icon.template.js +1 -0
  302. package/dist/esm/components/svg-icon/svg-icon.template.js.map +1 -1
  303. package/dist/esm/components/table/index.js +5 -5
  304. package/dist/esm/components/table/index.js.map +1 -1
  305. package/dist/esm/components/table/table.js +1 -1
  306. package/dist/esm/components/table/table.js.map +1 -1
  307. package/dist/esm/components/table/table.options.js +2 -2
  308. package/dist/esm/components/table/table.options.js.map +1 -1
  309. package/dist/esm/components/table/table.styles.js +3 -2
  310. package/dist/esm/components/table/table.styles.js.map +1 -1
  311. package/dist/esm/components/table/table.template.js +3 -3
  312. package/dist/esm/components/table/table.template.js.map +1 -1
  313. package/dist/esm/components/table-cell/index.js +5 -5
  314. package/dist/esm/components/table-cell/index.js.map +1 -1
  315. package/dist/esm/components/table-cell/table-cell.options.js +2 -2
  316. package/dist/esm/components/table-cell/table-cell.options.js.map +1 -1
  317. package/dist/esm/components/table-cell/table-cell.styles.js +2 -2
  318. package/dist/esm/components/table-cell/table-cell.styles.js.map +1 -1
  319. package/dist/esm/components/table-cell/table-cell.template.js.map +1 -1
  320. package/dist/esm/components/tag/tag.js.map +1 -1
  321. package/dist/esm/components/tag/tag.styles.js +3 -2
  322. package/dist/esm/components/tag/tag.styles.js.map +1 -1
  323. package/dist/esm/components/tag/tag.template.js.map +1 -1
  324. package/dist/esm/components/teaching-bubble/index.js +2 -0
  325. package/dist/esm/components/teaching-bubble/index.js.map +1 -1
  326. package/dist/esm/components/teaching-bubble/teaching-bubble.js +7 -22
  327. package/dist/esm/components/teaching-bubble/teaching-bubble.js.map +1 -1
  328. package/dist/esm/components/teaching-bubble/teaching-bubble.styles.js +3 -2
  329. package/dist/esm/components/teaching-bubble/teaching-bubble.styles.js.map +1 -1
  330. package/dist/esm/components/teaching-bubble/teaching-bubble.template.js +1 -0
  331. package/dist/esm/components/teaching-bubble/teaching-bubble.template.js.map +1 -1
  332. package/dist/esm/components/text/define.js +2 -2
  333. package/dist/esm/components/text/define.js.map +1 -1
  334. package/dist/esm/components/text/index.js +3 -3
  335. package/dist/esm/components/text/index.js.map +1 -1
  336. package/dist/esm/components/text/text.definition.js.map +1 -1
  337. package/dist/esm/components/text/text.js +3 -3
  338. package/dist/esm/components/text/text.options.js +16 -0
  339. package/dist/esm/components/text/text.options.js.map +1 -0
  340. package/dist/esm/components/text-input/index.js +1 -1
  341. package/dist/esm/components/text-input/index.js.map +1 -1
  342. package/dist/esm/components/text-input/text-input.base.js +3 -3
  343. package/dist/esm/components/text-input/text-input.base.js.map +1 -1
  344. package/dist/esm/components/text-input/text-input.js +1 -0
  345. package/dist/esm/components/text-input/text-input.js.map +1 -1
  346. package/dist/esm/components/text-input/text-input.styles.js +3 -2
  347. package/dist/esm/components/text-input/text-input.styles.js.map +1 -1
  348. package/dist/esm/components/text-input/text-input.template.js +2 -3
  349. package/dist/esm/components/text-input/text-input.template.js.map +1 -1
  350. package/dist/esm/components/textarea/index.js +4 -3
  351. package/dist/esm/components/textarea/index.js.map +1 -1
  352. package/dist/esm/components/textarea/textarea.options.js +22 -0
  353. package/dist/esm/components/textarea/textarea.options.js.map +1 -0
  354. package/dist/esm/components/tooltip/tooltip.js +82 -1
  355. package/dist/esm/components/tooltip/tooltip.js.map +1 -1
  356. package/dist/esm/components/tooltip/tooltip.template.js +16 -0
  357. package/dist/esm/components/tooltip/tooltip.template.js.map +1 -0
  358. package/dist/esm/components/tree/tree.js +38 -1
  359. package/dist/esm/components/tree/tree.js.map +1 -1
  360. package/dist/esm/components/tree-item/index.js +2 -1
  361. package/dist/esm/components/tree-item/index.js.map +1 -1
  362. package/dist/esm/components/tree-item/tree-item.definition.js +4 -3
  363. package/dist/esm/components/tree-item/tree-item.definition.js.map +1 -1
  364. package/dist/esm/components/tree-item/tree-item.styles.js +9 -0
  365. package/dist/esm/components/tree-item/tree-item.styles.js.map +1 -0
  366. package/dist/esm/components/tree-item/tree-item.template.js +6 -0
  367. package/dist/esm/components/tree-item/tree-item.template.js.map +1 -0
  368. package/dist/esm/components/wizard/index.js.map +1 -1
  369. package/dist/esm/components/wizard/wizard.js +5 -3
  370. package/dist/esm/components/wizard/wizard.js.map +1 -1
  371. package/dist/esm/components/wizard/wizard.styles.js +1 -1
  372. package/dist/esm/components/wizard/wizard.template.js +2 -1
  373. package/dist/esm/components/wizard/wizard.template.js.map +1 -1
  374. package/dist/esm/components/wizard-panel/wizard-panel.styles.js +1 -1
  375. package/dist/esm/components/wizard-panel/wizard-panel.template.js +1 -0
  376. package/dist/esm/components/wizard-panel/wizard-panel.template.js.map +1 -1
  377. package/dist/esm/components/wizard-step/wizard-step.js +1 -1
  378. package/dist/esm/components/wizard-step/wizard-step.js.map +1 -1
  379. package/dist/esm/components/wizard-step/wizard-step.styles.js +3 -2
  380. package/dist/esm/components/wizard-step/wizard-step.styles.js.map +1 -1
  381. package/dist/esm/components/wizard-step/wizard-step.template.js +1 -0
  382. package/dist/esm/components/wizard-step/wizard-step.template.js.map +1 -1
  383. package/dist/esm/components/wizard-step/wizard-step.unit.component.js +1 -0
  384. package/dist/esm/components/wizard-step/wizard-step.unit.component.js.map +1 -1
  385. package/dist/esm/index.js +27 -12
  386. package/dist/esm/index.js.map +1 -1
  387. package/dist/esm/util/accessibility-utilities.js +40 -0
  388. package/dist/esm/util/accessibility-utilities.js.map +1 -0
  389. package/dist/esm/util/attribute-utilities.js +12 -0
  390. package/dist/esm/util/attribute-utilities.js.map +1 -0
  391. package/dist/esm/util/debounce.js.map +1 -0
  392. package/dist/esm/util/debug.js +74 -0
  393. package/dist/esm/util/debug.js.map +1 -0
  394. package/dist/esm/util/direction.js +240 -8
  395. package/dist/esm/util/direction.js.map +1 -1
  396. package/dist/esm/util/dom.js +3 -0
  397. package/dist/esm/util/dom.js.map +1 -0
  398. package/dist/esm/util/element-internal-mocks.js +114 -0
  399. package/dist/esm/util/element-internal-mocks.js.map +1 -0
  400. package/dist/esm/util/focus-management.js +247 -0
  401. package/dist/esm/util/focus-management.js.map +1 -0
  402. package/dist/esm/util/hash-utilities.js +12 -0
  403. package/dist/esm/util/hash-utilities.js.map +1 -0
  404. package/dist/esm/util/index.js +13 -6
  405. package/dist/esm/util/index.js.map +1 -1
  406. package/dist/esm/util/positioning/flexible-position-strategy.js +232 -0
  407. package/dist/esm/util/positioning/flexible-position-strategy.js.map +1 -0
  408. package/dist/esm/util/positioning/index.js +10 -0
  409. package/dist/esm/util/positioning/index.js.map +1 -0
  410. package/dist/esm/util/positioning/position-calculator.js +196 -0
  411. package/dist/esm/util/positioning/position-calculator.js.map +1 -0
  412. package/dist/esm/util/positioning/types.js +30 -0
  413. package/dist/esm/util/positioning/types.js.map +1 -0
  414. package/dist/esm/util/template-helpers.js.map +1 -1
  415. package/dist/index.d.ts +904 -270
  416. package/dist/index.d.ts.map +1 -1
  417. package/dist/index.js +15978 -14624
  418. package/dist/index.js.map +1 -1
  419. package/dist/index.min.js +137 -112
  420. package/dist/index.min.js.map +1 -1
  421. package/package.json +9 -11
  422. package/dist/component-utilities.js +0 -43
  423. package/dist/dts/components/popover/positioning.d.ts +0 -51
  424. package/dist/dts/components/popover/positioning.d.ts.map +0 -1
  425. package/dist/dts/util/positioning.d.ts +0 -129
  426. package/dist/dts/util/positioning.d.ts.map +0 -1
  427. package/dist/dts/utils/debounce.d.ts.map +0 -1
  428. package/dist/esm/component-utilities.js +0 -13
  429. package/dist/esm/components/popover/positioning.js +0 -189
  430. package/dist/esm/components/popover/positioning.js.map +0 -1
  431. package/dist/esm/util/positioning.js +0 -130
  432. package/dist/esm/util/positioning.js.map +0 -1
  433. package/dist/esm/utils/debounce.js.map +0 -1
  434. /package/dist/dts/{utils → util}/debounce.d.ts +0 -0
  435. /package/dist/esm/{utils → util}/debounce.js +0 -0
@@ -1,5 +1,88 @@
1
- //Copied from @microsoft/fast-foundation
2
- import { Direction } from "@microsoft/fast-web-utilities";
1
+ import { Direction } from '@microsoft/fast-web-utilities';
2
+
3
+ /**
4
+ * This module provides a composable system for detecting and monitoring text direction
5
+ * (LTR/RTL) changes in web applications. It follows a strategy/observer pattern to allow
6
+ * flexibility for the many ways that direction can be controlled in the document.
7
+ *
8
+ * ## Architecture
9
+ *
10
+ * The system uses two complementary interfaces:
11
+ *
12
+ * - **DirectionStrategy**: Detection - reads direction from a source (CSS, attributes, etc.)
13
+ * - **DirectionObserver**: Change monitoring - watches for direction changes and notifies
14
+ *
15
+ * The `DirectionDetector` class combines the detection and observer strategies to provide
16
+ * robust direction detection with automatic change notifications.
17
+ *
18
+ * ## Built-in Strategies
19
+ *
20
+ * - `DirAttributeStrategy`: Reads the `dir` attribute from elements
21
+ * - `ElementCssStrategy`: Reads computed CSS `direction` property
22
+ *
23
+ * ## Built-in Observers
24
+ *
25
+ * - `DirAttributeObserver`: Watches for `dir` attribute mutations via MutationObserver
26
+ *
27
+ * ## Global DirectionDetector
28
+ *
29
+ * A singleton detector is available via `globalDirectionDetector()`. By default, it
30
+ * monitors the `dir` attribute on the `<html>` element. This is the detector used by the
31
+ * components in this package to correctly adjust layout, keyboard navigation, etc.
32
+ *
33
+ * To customize the global detector, call `setGlobalDirectionDetector()`:
34
+ *
35
+ * ```typescript
36
+ * import {
37
+ * setGlobalDirectionDetector,
38
+ * DirectionDetector,
39
+ * DirAttributeStrategy,
40
+ * DirAttributeObserver
41
+ * } from "@fabric-msft/fabric-web";
42
+ *
43
+ * setGlobalDirectionDetector(
44
+ * new DirectionDetector({
45
+ * strategies: [new DirAttributeStrategy([document.documentElement])],
46
+ * observers: [new DirAttributeObserver("html")],
47
+ * onChange: (dir) => console.log("Global direction:", dir)
48
+ * })
49
+ * );
50
+ * ```
51
+ *
52
+ * ## Defaults
53
+ *
54
+ * The default global DirectionDetector will monitor the `dir` attribute on the
55
+ * `html` element. You do not need to set anything if this is the strategy that your app
56
+ * uses to control document direction.
57
+ *
58
+ * ```html
59
+ * <html dir="rtl">
60
+ * ```
61
+ *
62
+ * ## Custom DirectionDetector
63
+ *
64
+ * ```typescript
65
+ * import {
66
+ * DirectionDetector,
67
+ * DirAttributeStrategy,
68
+ * DirAttributeObserver
69
+ * } from "@fabric-msft/fabric-web";
70
+ *
71
+ * const detector = new DirectionDetector({
72
+ * strategies: [new DirAttributeStrategy([document.documentElement])],
73
+ * observers: [new DirAttributeObserver("html")],
74
+ * onChange: (dir, { previous }) => {
75
+ * console.log(`Direction changed: ${previous} → ${dir}`);
76
+ * }
77
+ * });
78
+ *
79
+ * // Access current direction
80
+ * console.log(detector.value); // 'ltr' or 'rtl'
81
+ *
82
+ * // Clean up when done
83
+ * detector.stop();
84
+ * ```
85
+ */
3
86
  /**
4
87
  * Determines the current localization direction of an element.
5
88
  *
@@ -8,10 +91,159 @@ import { Direction } from "@microsoft/fast-web-utilities";
8
91
  *
9
92
  * @public
10
93
  */
11
- export const getDirection = (rootNode) => {
12
- var _a;
13
- return ((_a = rootNode.closest("[dir]")) === null || _a === void 0 ? void 0 : _a.dir) === "rtl"
14
- ? Direction.rtl
15
- : Direction.ltr;
94
+ const getDirection = rootNode => {
95
+ var _a;
96
+ return ((_a = rootNode.closest("[dir]")) === null || _a === void 0 ? void 0 : _a.dir) === "rtl" ? Direction.rtl : Direction.ltr;
16
97
  };
17
- //# sourceMappingURL=direction.js.map
98
+ function isRtl() {
99
+ return globalDirectionDetector().value === Direction.rtl;
100
+ }
101
+ /**
102
+ * Strategy that reads direction from the dir attribute.
103
+ * Takes a list of elements and checks each element until it finds one with a "dir" attribute specified.
104
+ * @public
105
+ */
106
+ class DirAttributeStrategy {
107
+ constructor(elements) {
108
+ this.elements = elements;
109
+ }
110
+ getDirection() {
111
+ var _a;
112
+ for (const el of this.elements) {
113
+ const raw = ((_a = el.getAttribute("dir")) !== null && _a !== void 0 ? _a : "").trim().toLowerCase();
114
+ if (raw === Direction.rtl || raw === Direction.ltr) return raw;
115
+ if (raw === "auto") return null;
116
+ }
117
+ return null;
118
+ }
119
+ }
120
+ /**
121
+ * Observer that watches for dir attribute changes using MutationObserver.
122
+ * @public
123
+ */
124
+ class DirAttributeObserver {
125
+ constructor(target = "html", doc = document) {
126
+ this.mo = null;
127
+ this.target = target;
128
+ this.doc = doc;
129
+ }
130
+ start(notify) {
131
+ var _a;
132
+ if (this.mo) return;
133
+ const observeEl = typeof this.target === "string" ? (_a = this.doc.querySelector(this.target)) !== null && _a !== void 0 ? _a : this.doc.documentElement : this.target;
134
+ if (!observeEl) return;
135
+ this.mo = new MutationObserver(() => notify());
136
+ this.mo.observe(observeEl, {
137
+ attributes: true,
138
+ attributeFilter: ["dir"]
139
+ });
140
+ }
141
+ stop() {
142
+ var _a;
143
+ (_a = this.mo) === null || _a === void 0 ? void 0 : _a.disconnect();
144
+ this.mo = null;
145
+ }
146
+ }
147
+ /**
148
+ * Detects and (optionally) observes direction using a chain of strategies.
149
+ * The first strategy to return a non-null direction wins.
150
+ * @public
151
+ */
152
+ class DirectionDetector {
153
+ constructor(options) {
154
+ var _a;
155
+ this.rafId = null;
156
+ this._value = null;
157
+ this.observing = false;
158
+ this.strategies = options.strategies;
159
+ this.observers = (_a = options.observers) !== null && _a !== void 0 ? _a : [];
160
+ this.onChange = options.onChange;
161
+ this._value = this.computeDirection();
162
+ if (this.observers.length > 0) this.start();
163
+ }
164
+ get value() {
165
+ var _a;
166
+ return (_a = this._value) !== null && _a !== void 0 ? _a : Direction.ltr;
167
+ }
168
+ /**
169
+ * Start all observers.
170
+ */
171
+ start() {
172
+ if (this.observing) return;
173
+ this.observing = true;
174
+ const scheduleRefresh = () => {
175
+ if (this.rafId != null) return;
176
+ if (typeof requestAnimationFrame === "undefined") {
177
+ this.refresh();
178
+ return;
179
+ }
180
+ this.rafId = requestAnimationFrame(() => {
181
+ this.rafId = null;
182
+ this.refresh();
183
+ });
184
+ };
185
+ for (const observer of this.observers) {
186
+ observer.start(scheduleRefresh);
187
+ }
188
+ // Initial refresh after starting observation
189
+ this.refresh();
190
+ }
191
+ /**
192
+ * Stop observing and cancel any scheduled refresh.
193
+ */
194
+ stop() {
195
+ if (this.rafId != null && typeof cancelAnimationFrame !== "undefined") {
196
+ cancelAnimationFrame(this.rafId);
197
+ }
198
+ this.rafId = null;
199
+ for (const observer of this.observers) {
200
+ observer.stop();
201
+ }
202
+ this.observing = false;
203
+ }
204
+ stable() {
205
+ return this.rafId == null;
206
+ }
207
+ /**
208
+ * Force recomputation; invokes onChange only if the resolved direction changed.
209
+ */
210
+ refresh() {
211
+ var _a;
212
+ const previous = this._value;
213
+ const next = this.computeDirection();
214
+ if (next !== previous) {
215
+ this._value = next;
216
+ try {
217
+ (_a = this.onChange) === null || _a === void 0 ? void 0 : _a.call(this, next, {
218
+ previous
219
+ });
220
+ } catch {
221
+ // ignore callback errors
222
+ }
223
+ }
224
+ return this._value;
225
+ }
226
+ computeDirection() {
227
+ for (const strategy of this.strategies) {
228
+ const dir = strategy.getDirection();
229
+ if (dir) return dir;
230
+ }
231
+ return null;
232
+ }
233
+ }
234
+ let _globalDetector = null;
235
+ function setGlobalDirectionDetector(detector) {
236
+ _globalDetector = detector;
237
+ }
238
+ function globalDirectionDetector() {
239
+ if (!_globalDetector) {
240
+ // Default to a strategy that expects dir to be on the root html element.
241
+ _globalDetector = new DirectionDetector({
242
+ strategies: [new DirAttributeStrategy([document.documentElement])],
243
+ observers: [new DirAttributeObserver("html")]
244
+ });
245
+ }
246
+ return _globalDetector;
247
+ }
248
+
249
+ export { DirAttributeObserver, DirAttributeStrategy, DirectionDetector, getDirection, globalDirectionDetector, isRtl, setGlobalDirectionDetector };
@@ -1 +1 @@
1
- {"version":3,"file":"direction.js","sourceRoot":"","sources":["../../../../../../src/util/direction.ts"],"names":[],"mappings":"AAAA,wCAAwC;AAExC,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE1D;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,QAAqB,EAAa,EAAE;;IAC/D,OAAO,CAAA,MAAA,QAAQ,CAAC,OAAO,CAAc,OAAO,CAAC,0CAAE,GAAG,MAAK,KAAK;QAC1D,CAAC,CAAC,SAAS,CAAC,GAAG;QACf,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC;AACpB,CAAC,CAAC"}
1
+ {"version":3,"file":"direction.js","sourceRoot":"","sources":["../../../../../../src/util/direction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ const inputElementMethods = ["blur", "click", "focus", "select", "setSelectionRange", "setRangeText", "setCustomValidity", "showPicker", "checkValidity", "reportValidity", "stepUp", "stepDown"];
2
+
3
+ export { inputElementMethods };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom.js","sourceRoot":"","sources":["../../../../../../src/util/dom.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,MAAM;IACN,OAAO;IACP,OAAO;IACP,QAAQ;IACR,mBAAmB;IACnB,cAAc;IACd,mBAAmB;IACnB,YAAY;IACZ,eAAe;IACf,gBAAgB;IAChB,QAAQ;IACR,UAAU;CACX,CAAC"}
@@ -0,0 +1,114 @@
1
+ class MockElementInternals {
2
+ constructor(element) {
3
+ this.ariaDescription = null;
4
+ this.ariaBrailleLabel = null;
5
+ this.ariaBrailleRoleDescription = null;
6
+ this._form = null;
7
+ this._labels = document.createDocumentFragment().childNodes;
8
+ // ARIA properties
9
+ this.role = "";
10
+ this.ariaAtomic = "";
11
+ this.ariaAutoComplete = "";
12
+ this.ariaBusy = "";
13
+ this.ariaChecked = "";
14
+ this.ariaColCount = "";
15
+ this.ariaColIndex = "";
16
+ this.ariaColIndexText = "";
17
+ this.ariaColSpan = "";
18
+ this.ariaCurrent = "";
19
+ this.ariaDisabled = "";
20
+ this.ariaExpanded = "";
21
+ this.ariaHasPopup = "";
22
+ this.ariaHidden = "";
23
+ this.ariaInvalid = "";
24
+ this.ariaKeyShortcuts = "";
25
+ this.ariaLabel = "";
26
+ this.ariaLevel = "";
27
+ this.ariaLive = "";
28
+ this.ariaModal = "";
29
+ this.ariaMultiLine = "";
30
+ this.ariaMultiSelectable = "";
31
+ this.ariaOrientation = "";
32
+ this.ariaPlaceholder = "";
33
+ this.ariaPosInSet = "";
34
+ this.ariaPressed = "";
35
+ this.ariaReadOnly = "";
36
+ this.ariaRelevant = "";
37
+ this.ariaRequired = "";
38
+ this.ariaRoleDescription = "";
39
+ this.ariaRowCount = "";
40
+ this.ariaRowIndex = "";
41
+ this.ariaRowIndexText = "";
42
+ this.ariaRowSpan = "";
43
+ this.ariaSelected = "";
44
+ this.ariaSetSize = "";
45
+ this.ariaSort = "";
46
+ this.ariaValueMax = "";
47
+ this.ariaValueMin = "";
48
+ this.ariaValueNow = "";
49
+ this.ariaValueText = "";
50
+ // add the element to the MockElementInternals class
51
+ // the constructor is called when attachInternals is called on the element using ElementInternals.
52
+ this._element = element;
53
+ }
54
+ get form() {
55
+ if (!this._form) {
56
+ // get the closest form element from the element
57
+ this._form = this._element.closest("form");
58
+ }
59
+ return this._form;
60
+ }
61
+ get labels() {
62
+ return this._labels;
63
+ }
64
+ get shadowRoot() {
65
+ return null;
66
+ }
67
+ get states() {
68
+ return new Set();
69
+ }
70
+ // Validation properties
71
+ get validationMessage() {
72
+ return "";
73
+ }
74
+ get validity() {
75
+ return {
76
+ badInput: false,
77
+ customError: false,
78
+ patternMismatch: false,
79
+ rangeOverflow: false,
80
+ rangeUnderflow: false,
81
+ stepMismatch: false,
82
+ tooLong: false,
83
+ tooShort: false,
84
+ typeMismatch: false,
85
+ valid: true,
86
+ valueMissing: false
87
+ };
88
+ }
89
+ get willValidate() {
90
+ return true;
91
+ }
92
+ // Methods
93
+ checkValidity() {
94
+ return true;
95
+ }
96
+ reportValidity() {
97
+ return true;
98
+ }
99
+ setFormValue(_value, _state) {}
100
+ setValidity(_flags, _message, _anchor) {}
101
+ }
102
+ /**
103
+ * If the HTMLElement prototype does not have the attachInternals method, add it.
104
+ * This is used to create a new MockElementInternals instance when the element is attached to the DOM.
105
+ */
106
+ function attachMockElementInternals() {
107
+ if (!HTMLElement.prototype.attachInternals) {
108
+ HTMLElement.prototype.attachInternals = function () {
109
+ return new MockElementInternals(this);
110
+ };
111
+ }
112
+ }
113
+
114
+ export { MockElementInternals, attachMockElementInternals };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element-internal-mocks.js","sourceRoot":"","sources":["../../../../../../src/util/element-internal-mocks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,247 @@
1
+ import { keyHome, keyEnd, keyArrowUp, keyArrowRight, keyArrowLeft, keyArrowDown } from '@microsoft/fast-web-utilities';
2
+
3
+ /**
4
+ * Default disabled check: matches disabled, aria-disabled="true", or inert attributes.
5
+ */
6
+ const defaultIsDisabled = el => el.matches('[disabled], [aria-disabled="true"], [inert]');
7
+ /**
8
+ * Creates a roving focus controller for managing keyboard navigation
9
+ * across a list of elements using the roving tabindex pattern.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * const controller = createRovingFocusController({
14
+ * items: () => this.slottedPills ?? [],
15
+ * orientation: "vertical",
16
+ * enableHomeEnd: true,
17
+ * wrap: true
18
+ * });
19
+ *
20
+ * // In connectedCallback or setup:
21
+ * controller.applyTabindex();
22
+ *
23
+ * // In keydown handler:
24
+ * if (controller.handleKeydown(event)) return;
25
+ * // ...handle other keys like Escape
26
+ * ```
27
+ *
28
+ * @public
29
+ */
30
+ function createRovingFocusController(options) {
31
+ const {
32
+ items,
33
+ isDisabled = defaultIsDisabled,
34
+ orientation = "vertical",
35
+ enableHomeEnd = true,
36
+ wrap = true,
37
+ preventDefault = true,
38
+ focusItem,
39
+ onFocusChange,
40
+ isRtl
41
+ } = options;
42
+ /**
43
+ * Find the currently active item (the one with tabindex="0").
44
+ */
45
+ const findActiveItem = () => {
46
+ var _a;
47
+ const allItems = items();
48
+ return (_a = allItems.find(el => el.getAttribute("tabindex") === "0")) !== null && _a !== void 0 ? _a : null;
49
+ };
50
+ /**
51
+ * Set tabindex on all items, making the specified element active.
52
+ * Disabled items are always set to -1 regardless of activeEl.
53
+ */
54
+ const setActive = (activeEl, allItems) => {
55
+ const list = allItems !== null && allItems !== void 0 ? allItems : items();
56
+ for (const el of list) {
57
+ const shouldBeActive = el === activeEl && !isDisabled(el);
58
+ el.tabIndex = shouldBeActive ? 0 : -1;
59
+ el.setAttribute("tabindex", shouldBeActive ? "0" : "-1");
60
+ }
61
+ };
62
+ /**
63
+ * Focus an element using custom focusItem or default focus().
64
+ */
65
+ const doFocus = el => {
66
+ if (focusItem) {
67
+ focusItem(el);
68
+ } else {
69
+ el.focus();
70
+ }
71
+ };
72
+ /**
73
+ * Activate an item: set tabindex, optionally focus, and fire callback.
74
+ * Centralizes the repeated setActive + doFocus + onFocusChange pattern.
75
+ */
76
+ const activate = (el, enabledIndex, shouldFocus, allItems) => {
77
+ setActive(el, allItems);
78
+ if (shouldFocus) doFocus(el);
79
+ if (enabledIndex !== null) onFocusChange === null || onFocusChange === void 0 ? void 0 : onFocusChange(el, enabledIndex);
80
+ };
81
+ /**
82
+ * Apply roving tabindex. Preserves current active if still valid;
83
+ * otherwise falls back to first enabled.
84
+ */
85
+ const applyTabindex = () => {
86
+ const allItems = items();
87
+ if (allItems.length === 0) return;
88
+ const enabled = allItems.filter(el => !isDisabled(el));
89
+ if (enabled.length === 0) {
90
+ // No enabled items - all get -1
91
+ setActive(null, allItems);
92
+ return;
93
+ }
94
+ // Try to preserve current active if still valid and enabled
95
+ const currentActive = findActiveItem();
96
+ if (currentActive && enabled.includes(currentActive)) {
97
+ // Current active is still valid - keep it
98
+ setActive(currentActive, allItems);
99
+ return;
100
+ }
101
+ // Fall back to first enabled
102
+ setActive(enabled[0], allItems);
103
+ };
104
+ /**
105
+ * Move focus by delta, with optional wrapping.
106
+ * Uses tabindex=0 to determine current position (Shadow DOM safe).
107
+ */
108
+ const move = delta => {
109
+ const allItems = items();
110
+ const enabled = allItems.filter(el => !isDisabled(el));
111
+ if (enabled.length === 0) return false;
112
+ // Single item: nowhere to move
113
+ if (enabled.length === 1) return false;
114
+ // Find current index via tabindex=0 (not document.activeElement - Shadow DOM safe)
115
+ const currentActive = findActiveItem();
116
+ let currentIndex = currentActive ? enabled.indexOf(currentActive) : -1;
117
+ if (currentIndex === -1) currentIndex = 0;
118
+ // Calculate next index
119
+ let nextIndex = currentIndex + delta;
120
+ if (wrap) {
121
+ nextIndex = (nextIndex + enabled.length) % enabled.length;
122
+ } else {
123
+ // Clamp to bounds
124
+ if (nextIndex < 0 || nextIndex >= enabled.length) {
125
+ return false; // At boundary, can't move
126
+ }
127
+ }
128
+ const nextEl = enabled[nextIndex];
129
+ activate(nextEl, nextIndex, true, allItems);
130
+ return true;
131
+ };
132
+ /**
133
+ * Focus first enabled item.
134
+ */
135
+ const focusFirst = () => {
136
+ const allItems = items();
137
+ const enabled = allItems.filter(el => !isDisabled(el));
138
+ if (enabled.length === 0) return false;
139
+ activate(enabled[0], 0, true, allItems);
140
+ return true;
141
+ };
142
+ /**
143
+ * Focus last enabled item.
144
+ */
145
+ const focusLast = () => {
146
+ const allItems = items();
147
+ const enabled = allItems.filter(el => !isDisabled(el));
148
+ if (enabled.length === 0) return false;
149
+ const lastIndex = enabled.length - 1;
150
+ activate(enabled[lastIndex], lastIndex, true, allItems);
151
+ return true;
152
+ };
153
+ /**
154
+ * Focus specific item.
155
+ */
156
+ const focus = item => {
157
+ const allItems = items();
158
+ if (!allItems.includes(item)) return false;
159
+ if (isDisabled(item)) return false;
160
+ const enabled = allItems.filter(el => !isDisabled(el));
161
+ const index = enabled.indexOf(item);
162
+ activate(item, index !== -1 ? index : null, true, allItems);
163
+ return true;
164
+ };
165
+ /**
166
+ * Sync tabindex to target without focusing (for click/focusin handlers).
167
+ * Fires onFocusChange to maintain consistency with other activation methods.
168
+ */
169
+ const sync = target => {
170
+ if (!target || !(target instanceof HTMLElement)) return false;
171
+ const allItems = items();
172
+ // Find the closest managed item (target might be a child of a managed item)
173
+ const item = allItems.find(el => el === target || el.contains(target));
174
+ if (!item) return false;
175
+ if (isDisabled(item)) return false;
176
+ const enabled = allItems.filter(el => !isDisabled(el));
177
+ const index = enabled.indexOf(item);
178
+ // Use activate with shouldFocus=false to avoid refocus jump
179
+ activate(item, index !== -1 ? index : null, false, allItems);
180
+ return true;
181
+ };
182
+ /**
183
+ * Check if a key matches the navigation direction.
184
+ * Respects RTL mode for horizontal navigation.
185
+ */
186
+ const isNavigationKey = (key, direction) => {
187
+ const rtl = isRtl();
188
+ if (direction === "prev") {
189
+ if (orientation === "vertical" || orientation === "both") {
190
+ if (key === keyArrowUp) return true;
191
+ }
192
+ if (orientation === "horizontal" || orientation === "both") {
193
+ // In RTL, ArrowRight goes to previous
194
+ if (rtl ? key === keyArrowRight : key === keyArrowLeft) return true;
195
+ }
196
+ } else {
197
+ if (orientation === "vertical" || orientation === "both") {
198
+ if (key === keyArrowDown) return true;
199
+ }
200
+ if (orientation === "horizontal" || orientation === "both") {
201
+ // In RTL, ArrowLeft goes to next
202
+ if (rtl ? key === keyArrowLeft : key === keyArrowRight) return true;
203
+ }
204
+ }
205
+ return false;
206
+ };
207
+ /**
208
+ * Handle keydown event.
209
+ */
210
+ const handleKeydown = event => {
211
+ const {
212
+ key
213
+ } = event;
214
+ let handled = false;
215
+ if (isNavigationKey(key, "prev")) {
216
+ handled = move(-1);
217
+ } else if (isNavigationKey(key, "next")) {
218
+ handled = move(1);
219
+ } else if (enableHomeEnd && key === keyHome) {
220
+ handled = focusFirst();
221
+ } else if (enableHomeEnd && key === keyEnd) {
222
+ handled = focusLast();
223
+ }
224
+ if (handled && preventDefault) {
225
+ event.preventDefault();
226
+ }
227
+ return handled;
228
+ };
229
+ /**
230
+ * Cleanup (no-op for now, kept for lifecycle symmetry).
231
+ */
232
+ const destroy = () => {
233
+ // No listeners to clean up - component handles that
234
+ };
235
+ return {
236
+ applyTabindex,
237
+ move,
238
+ focusFirst,
239
+ focusLast,
240
+ focus,
241
+ sync,
242
+ handleKeydown,
243
+ destroy
244
+ };
245
+ }
246
+
247
+ export { createRovingFocusController };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focus-management.js","sourceRoot":"","sources":["../../../../../../src/util/focus-management.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Creates a unique ID string using a prefix and counter as salt for the random hex.
3
+ * @param prefix - The prefix string for the ID
4
+ * @param counter - Optional. A counter value used as salt for additional uniqueness
5
+ * @returns A unique ID string in the format `{prefix}{counter}-{randomHex}`
6
+ */
7
+ function createUniqueId(prefix, counter = 0) {
8
+ const randomHex = Math.round((Math.random() + counter) * 0x10000).toString(16).slice(0, 8);
9
+ return `${prefix}${counter}-${randomHex}`;
10
+ }
11
+
12
+ export { createUniqueId };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash-utilities.js","sourceRoot":"","sources":["../../../../../../src/util/hash-utilities.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,UAAkB,CAAC;IAChE,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC;SAC9D,QAAQ,CAAC,EAAE,CAAC;SACZ,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACf,OAAO,GAAG,MAAM,GAAG,OAAO,IAAI,SAAS,EAAE,CAAC;AAC5C,CAAC"}