@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,6 +1,7 @@
1
1
  import { attr, observable, FASTElement, Updates } from '@microsoft/fast-element';
2
2
  import { keyEnter, keySpace, keyEscape } from '@microsoft/fast-web-utilities';
3
- import { debounce } from '../../utils/debounce.js';
3
+ import { debounce } from '../../util/debounce.js';
4
+ import '../menu-list/menu-list.js';
4
5
  import { MenuPositions, MenuRepositionModes } from './menu.options.js';
5
6
  import { MenuPositioning } from './menu.positioning.js';
6
7
 
@@ -15,6 +16,12 @@ var __decorate = globalThis && globalThis.__decorate || function (decorators, ta
15
16
  * Menu
16
17
  * @summary A Menu component that provides an interactive menu interface with support for various trigger and open behaviors.
17
18
  *
19
+ * When `reposition-mode="auto"` is set the component creates a {@link MenuPositioning} manager backed by
20
+ * `FlexiblePositionStrategy`. On every open/resize/scroll cycle the strategy measures available space, picks
21
+ * the best-fitting position from the preferred position plus its fallbacks, and resizes the menu if there is
22
+ * not enough available space. Supply `overflowBoundary` to scope collision detection to a specific scrolling
23
+ * container instead of the viewport.
24
+ *
18
25
  * @example
19
26
  * ```html
20
27
  * <fabric-menu open-on-hover="true" open-on-context="true" close-on-scroll="true" persist-on-item-click="true">
@@ -32,8 +39,10 @@ var __decorate = globalThis && globalThis.__decorate || function (decorators, ta
32
39
  * @attr {boolean | undefined} close-on-scroll - Determines if the menu should close on scroll.
33
40
  * @attr {boolean | undefined} persist-on-item-click - Determines if the menu open state should persist on click of a menu item.
34
41
  * @attr {boolean | undefined} split - Determines if the menu is in split state (for split button pattern).
35
- * @attr {MenuPosition | undefined} menu-position - Determines whether the menu list is above or below the trigger.
36
- * @attr {MenuRepositionMode | undefined} reposition-mode - The mode for repositioning the menu. Default is "none".
42
+ * @attr {MenuPosition | undefined} menu-position - Determines whether the menu list is above or below the trigger. Defaults to `"below"`.
43
+ * @attr {MenuRepositionMode | undefined} reposition-mode - Controls JS-based repositioning. `"auto"` enables
44
+ * `FlexiblePositionStrategy` which detects collisions and flips the menu to the best-fitting position on
45
+ * every resize/scroll cycle. `"none"` (default) disables JS repositioning and relies on CSS anchored positioning.
37
46
  *
38
47
  * @prop {boolean | undefined} openOnHover - Determines if the menu should open on hover.
39
48
  * @prop {boolean | undefined} openOnContext - Determines if the menu should open on right click.
@@ -42,9 +51,12 @@ var __decorate = globalThis && globalThis.__decorate || function (decorators, ta
42
51
  * @prop {boolean | undefined} split - Determines if the menu is in split state.
43
52
  * @prop {MenuList[]} slottedMenuList - Holds the slotted menu list.
44
53
  * @prop {HTMLElement[]} slottedTriggers - Holds the slotted triggers.
45
- * @prop {MenuPosition | undefined} menuPosition - Determines whether the menu list is above or below the trigger.
46
- * @prop {MenuRepositionMode | undefined} repositionMode - The mode for repositioning the menu.
47
- * @prop {HTMLElement | undefined} overflowBoundary - The overflow boundary element reference.
54
+ * @prop {MenuPosition | undefined} menuPosition - Reflects the active resolved position (`"above"` or `"below"`). May
55
+ * differ from the authored `menu-position` attribute when `reposition-mode="auto"` has flipped the menu.
56
+ * @prop {MenuRepositionMode | undefined} repositionMode - The active repositioning mode (`"auto"` | `"none"`).
57
+ * @prop {HTMLElement | undefined} overflowBoundary - An optional scrolling container used by the
58
+ * `FlexiblePositionStrategy` as the collision boundary instead of the viewport. Only relevant when
59
+ * `reposition-mode="auto"`.
48
60
  *
49
61
  * @slot primary-action - Slot for the primary action element (used when split is true).
50
62
  * @slot trigger - Slot for the trigger element.
@@ -72,10 +84,10 @@ class Menu extends FASTElement {
72
84
  constructor() {
73
85
  super(...arguments);
74
86
  /**
75
- * The array of open positions based on collision detection.
87
+ * The positioning instance for the menu.
76
88
  * @private
77
89
  */
78
- this.openPositions = [];
90
+ this.positioning = null;
79
91
  /**
80
92
  * Determines if the menu should open on hover.
81
93
  * @public
@@ -108,8 +120,15 @@ class Menu extends FASTElement {
108
120
  this.menuPosition = MenuPositions.below;
109
121
  /**
110
122
  * The mode for repositioning the menu when it overflows the boundary.
123
+ *
124
+ * - `"none"` (default) — no JS-based repositioning; positioning is handled entirely by CSS anchored positioning.
125
+ * - `"auto"` — enables `FlexiblePositionStrategy`. On every open, resize, and scroll event the strategy
126
+ * measures available space, picks the best-fitting position from the preferred position plus its fallbacks,
127
+ * and re-applies layout. When the chosen position is `"above"`, bottom-anchored positioning keeps the
128
+ * menu's bottom edge pinned to the anchor's top edge so that height constraints shrink it upward.
129
+ *
111
130
  * @public
112
- * @default "auto"
131
+ * @default "none"
113
132
  */
114
133
  this.repositionMode = MenuRepositionModes.none;
115
134
  /**
@@ -128,111 +147,75 @@ class Menu extends FASTElement {
128
147
  */
129
148
  this._open = false;
130
149
  /**
131
- * Creates the overflow handler using IntersectionObserver.
132
- * Note: When a custom overflowBoundary is set, we use direct rect calculations
133
- * instead because popovers render in the top layer and IntersectionObserver
134
- * with a custom root won't work correctly.
135
- * @private
136
- */
137
- this.createOverflowHandler = () => {
138
- // Only use IntersectionObserver when no custom boundary is set
139
- // (uses document/viewport as root)
140
- if (!this.overflowBoundary) {
141
- const options = {
142
- root: document
143
- };
144
- this.intersectionObserver = new IntersectionObserver(this.handleOverflow, options);
145
- }
146
- };
147
- /**
148
- * Checks overflow against custom boundary using direct rect calculations.
149
- * Delegates to MenuPositioning for the actual calculation.
150
+ * Internal open handler used by multiple entry points.
150
151
  * @private
151
152
  */
152
- this.checkOverflowWithBoundary = () => {
153
- if (!this.positioning || !this._menuList || !this.overflowBoundary) {
153
+ this.openMenuInternal = e => {
154
+ if (this._open) {
154
155
  return;
155
156
  }
156
- const {
157
- hasOverflow,
158
- suggestedPosition
159
- } = this.positioning.checkOverflowWithBoundary();
160
- if (hasOverflow) {
161
- if (suggestedPosition) {
162
- this.openPositions = [suggestedPosition];
163
- this.repositionMenu(this.openPositions);
164
- }
165
- // Apply height constraint if still needed
166
- this.applyHeightConstraint();
167
- } else {
168
- // Menu fits, release any previous constraints
169
- if (this.openPositions.length > 0) {
170
- this.releasePositions();
171
- this.clearHeightConstraint();
172
- }
157
+ if (this.repositionMode == MenuRepositionModes.auto) {
158
+ this.addRepositioningHandlers();
159
+ this.createPositioningManager();
160
+ this.scheduleReposition();
173
161
  }
174
- };
175
- /**
176
- * Handles overflow collisions with the menu.
177
- * @private
178
- */
179
- this.handleOverflow = entries => {
180
- if (this.positioning) {
181
- this.positioning.position = this.originalMenuPosition || this.menuPosition || MenuPositions.below;
162
+ this.setMenuOpenState(true);
163
+ this.focusMenuList();
164
+ if (e && this.openOnContext) {
165
+ e.preventDefault();
166
+ }
167
+ document.addEventListener("click", this.documentClickHandler);
168
+ if (this.closeOnScroll) {
169
+ document.addEventListener("scroll", this.closeMenu);
182
170
  }
183
- entries.forEach(entry => {
184
- if (entry.intersectionRatio < 1 && this.positioning) {
185
- // Try to reposition (flip) first
186
- this.openPositions = this.positioning.findOpenPositionsFromCollision(entry);
187
- if (this.openPositions.length > 0) {
188
- this.repositionMenu(this.openPositions);
189
- }
190
- // After repositioning, constrain height if still needed
191
- this.applyHeightConstraint();
192
- } else if (this.openPositions.length > 0) {
193
- this.releasePositions();
194
- this.clearHeightConstraint();
195
- }
196
- });
197
171
  };
198
172
  /**
199
- * Repositions the menu based on collisions.
173
+ * Internal close handler used by multiple entry points.
200
174
  * @private
201
175
  */
202
- this.repositionMenu = openPositions => {
203
- this.menuPosition = openPositions[0];
204
- if (this.positioning) {
205
- this.positioning.position = this.menuPosition;
176
+ this.closeMenuInternal = () => {
177
+ if (!this._open) {
178
+ return;
179
+ }
180
+ this.setMenuOpenState(false);
181
+ this.removeRepositioningListeners();
182
+ document.removeEventListener("click", this.documentClickHandler);
183
+ if (this.closeOnScroll) {
184
+ document.removeEventListener("scroll", this.closeMenu);
206
185
  }
207
186
  };
208
187
  /**
209
- * Updates the menu position on window changes.
188
+ * Delegates resize + flip logic to the positioning strategy.
210
189
  * @private
211
190
  */
212
- this.updateMenuPosition = () => {
213
- if (this._open) {
214
- this.observeMenuOverflow();
191
+ this.repositionMenu = () => {
192
+ var _a;
193
+ if (!this.positioning || !this._menuList) {
194
+ return;
215
195
  }
196
+ this.positioning.position = (_a = this.menuPosition) !== null && _a !== void 0 ? _a : MenuPositions.below;
197
+ this.positioning.reposition();
216
198
  };
217
199
  /**
218
- * Debounced handler for window changes.
200
+ * Debounced handler for window resize/scroll changes.
219
201
  * @private
220
202
  */
221
203
  this.handleWindowChanges = debounce(() => {
222
- this.updateMenuPosition();
204
+ if (this._open) {
205
+ this.scheduleReposition();
206
+ }
223
207
  }, 50);
224
208
  /**
225
209
  * Toggles the open state of the menu.
226
210
  * @public
227
211
  */
228
212
  this.toggleMenu = () => {
229
- var _a;
230
213
  this.setComponent();
231
- (_a = this._menuList) === null || _a === void 0 ? void 0 : _a.togglePopover(!this._open);
232
214
  if (this._open) {
233
- this.focusMenuList();
234
- } else {
215
+ this.closeMenuInternal();
235
216
  this.focusTrigger();
217
+ } else {
218
+ this.openMenuInternal();
236
219
  }
237
220
  };
238
221
  /**
@@ -240,57 +223,14 @@ class Menu extends FASTElement {
240
223
  * @public
241
224
  */
242
225
  this.closeMenu = () => {
243
- var _a;
244
- if (this._open) {
245
- (_a = this._menuList) === null || _a === void 0 ? void 0 : _a.togglePopover(false);
246
- }
247
- if (this.closeOnScroll) {
248
- document.removeEventListener("scroll", this.closeMenu);
249
- }
226
+ this.closeMenuInternal();
250
227
  };
251
228
  /**
252
229
  * Opens the menu.
253
230
  * @public
254
231
  */
255
232
  this.openMenu = e => {
256
- var _a;
257
- if (!this._open) {
258
- (_a = this._menuList) === null || _a === void 0 ? void 0 : _a.togglePopover(true);
259
- }
260
- if (e && this.openOnContext) {
261
- e.preventDefault();
262
- }
263
- if (this.closeOnScroll) {
264
- document.addEventListener("scroll", this.closeMenu);
265
- }
266
- };
267
- /**
268
- * Handles the 'toggle' event on the popover.
269
- * @public
270
- * @param e - the event
271
- * @returns void
272
- */
273
- this.toggleHandler = e => {
274
- var _a;
275
- if ("newState" in e) {
276
- const event = e;
277
- const newState = event.newState === "open" ? true : false;
278
- (_a = this._trigger) === null || _a === void 0 ? void 0 : _a.setAttribute("aria-expanded", `${newState}`);
279
- this._open = newState;
280
- if (newState) {
281
- // Menu is opening - add repositioning handlers
282
- if (!this.originalMenuPosition) {
283
- this.originalMenuPosition = this.menuPosition;
284
- }
285
- this.addRepositioningHandlers();
286
- this.createPositioningManager();
287
- this.observeMenuOverflow();
288
- this.focusMenuList();
289
- } else {
290
- // Menu is closing - remove repositioning handlers
291
- this.removeRepositioningListeners();
292
- }
293
- }
233
+ this.openMenuInternal(e);
294
234
  };
295
235
  /**
296
236
  * Handles keyboard interaction for the trigger. Toggles the menu when the Space or Enter key is pressed. If the menu
@@ -314,84 +254,75 @@ class Menu extends FASTElement {
314
254
  }
315
255
  };
316
256
  /**
317
- * Handles document click events to close a menu opened with contextmenu in popover="manual" mode.
257
+ * Handles document click events to close the menu when clicking outside (light dismiss).
318
258
  * @internal
319
259
  * @param e - The event triggered on document click.
320
260
  */
321
261
  this.documentClickHandler = e => {
262
+ if (!this._open) {
263
+ return;
264
+ }
322
265
  if (!e.composedPath().some(el => el === this._trigger || el === this._menuList)) {
323
266
  this.closeMenu();
324
267
  }
325
268
  };
326
269
  }
327
270
  /**
328
- * Applies height constraint to make menu scrollable when space is limited.
329
- * @private
271
+ * Handles changes to the menuPosition attribute.
272
+ * Updates the positioning strategy and triggers a reposition if
273
+ * the menu is currently open, without mutating the public attribute.
274
+ * @public
330
275
  */
331
- applyHeightConstraint() {
332
- if (!this.positioning || !this._menuList) {
333
- return;
276
+ menuPositionChanged() {
277
+ var _a;
278
+ if (this.positioning) {
279
+ this.positioning.position = (_a = this.menuPosition) !== null && _a !== void 0 ? _a : MenuPositions.below;
334
280
  }
335
- const {
336
- needsConstraint,
337
- maxHeight
338
- } = this.positioning.calculateConstrainedHeight();
339
- if (needsConstraint && maxHeight !== null) {
340
- this.style.setProperty("--menu-max-height", `${maxHeight}px`);
341
- this._menuList.style.overflow = "auto";
342
- } else {
343
- this.clearHeightConstraint();
281
+ if (this._open) {
282
+ this.scheduleReposition();
344
283
  }
345
284
  }
346
285
  /**
347
- * Clears height constraint from the menu.
348
- * @private
286
+ * Handles menu list slot changes.
287
+ * @internal
349
288
  */
350
- clearHeightConstraint() {
351
- this.style.removeProperty("--menu-max-height");
352
- if (this._menuList) {
353
- this._menuList.style.overflow = "";
289
+ slottedMenuListChanged() {
290
+ this.setComponent();
291
+ if (this._open) {
292
+ this.scheduleReposition();
354
293
  }
355
294
  }
356
295
  /**
357
- * Releases positions and restores original if valid.
358
- * @private
296
+ * Handles trigger slot changes.
297
+ * @internal
359
298
  */
360
- releasePositions() {
361
- this.openPositions = [];
362
- if (this.positioning) {
363
- for (const key in MenuPositions) {
364
- const position = MenuPositions[key];
365
- const positionOpen = this.positioning.checkPosition(position);
366
- if (positionOpen) {
367
- this.openPositions.push(position);
368
- if (position === this.originalMenuPosition) {
369
- this.menuPosition = this.originalMenuPosition;
370
- }
371
- }
372
- }
299
+ slottedTriggersChanged() {
300
+ this.setComponent();
301
+ if (this._open) {
302
+ this.scheduleReposition();
373
303
  }
374
304
  }
375
305
  /**
376
- * Observes the menu for overflow.
306
+ * Updates menu list open state and ARIA expanded.
377
307
  * @private
378
308
  */
379
- observeMenuOverflow() {
380
- var _a, _b;
381
- if (this.overflowBoundary) {
382
- // Use direct rect calculations for custom boundary
383
- // Need a small delay to ensure menu is rendered and positioned
384
- requestAnimationFrame(() => {
385
- this.checkOverflowWithBoundary();
386
- });
387
- } else {
388
- // Use IntersectionObserver for viewport
389
- (_a = this.intersectionObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
390
- if (this._menuList) {
391
- (_b = this.intersectionObserver) === null || _b === void 0 ? void 0 : _b.observe(this._menuList);
392
- }
309
+ setMenuOpenState(isOpen) {
310
+ var _a;
311
+ this._open = isOpen;
312
+ (_a = this._trigger) === null || _a === void 0 ? void 0 : _a.setAttribute("aria-expanded", `${isOpen}`);
313
+ if (this._menuList) {
314
+ this._menuList.classList.toggle("menu-open", isOpen);
393
315
  }
394
316
  }
317
+ /**
318
+ * Schedules a reposition on the next microtask.
319
+ * @private
320
+ */
321
+ scheduleReposition() {
322
+ Updates.enqueue(() => {
323
+ this.repositionMenu();
324
+ });
325
+ }
395
326
  /**
396
327
  * Adds window event listeners.
397
328
  * @private
@@ -423,7 +354,6 @@ class Menu extends FASTElement {
423
354
  */
424
355
  addRepositioningHandlers() {
425
356
  if (this.repositionMode !== MenuRepositionModes.none) {
426
- this.createOverflowHandler();
427
357
  this.addWindowEventListeners();
428
358
  this.addOverflowBoundaryEventListeners();
429
359
  }
@@ -434,11 +364,11 @@ class Menu extends FASTElement {
434
364
  */
435
365
  createPositioningManager() {
436
366
  if (this._menuList && this._trigger && this.repositionMode !== MenuRepositionModes.none) {
367
+ this.positioning = null;
437
368
  this.positioning = new MenuPositioning({
438
369
  menuReference: this._menuList,
439
370
  anchorReference: this._trigger,
440
- overflowBoundaryReference: this.overflowBoundary,
441
- repositionMode: this.repositionMode
371
+ overflowBoundaryReference: this.overflowBoundary
442
372
  });
443
373
  }
444
374
  }
@@ -447,11 +377,8 @@ class Menu extends FASTElement {
447
377
  * @private
448
378
  */
449
379
  removeRepositioningListeners() {
450
- var _a;
451
380
  if (this._menuList) {
452
381
  this.removeWindowEventListeners();
453
- (_a = this.intersectionObserver) === null || _a === void 0 ? void 0 : _a.unobserve(this._menuList);
454
- this.clearHeightConstraint();
455
382
  }
456
383
  }
457
384
  /**
@@ -462,7 +389,6 @@ class Menu extends FASTElement {
462
389
  super.connectedCallback();
463
390
  Updates.enqueue(() => {
464
391
  this.setComponent();
465
- this.setMenuPosition();
466
392
  });
467
393
  }
468
394
  /**
@@ -473,6 +399,8 @@ class Menu extends FASTElement {
473
399
  super.disconnectedCallback();
474
400
  this.removeListeners();
475
401
  this.removeRepositioningListeners();
402
+ document.removeEventListener("click", this.documentClickHandler);
403
+ document.removeEventListener("scroll", this.closeMenu);
476
404
  }
477
405
  /**
478
406
  * Sets the component.
@@ -484,19 +412,10 @@ class Menu extends FASTElement {
484
412
  this._menuList = this.slottedMenuList[0];
485
413
  this._trigger.setAttribute("aria-haspopup", "true");
486
414
  this._trigger.setAttribute("aria-expanded", `${this._open}`);
487
- this._menuList.setAttribute("popover", this.openOnContext ? "manual" : "");
415
+ this._menuList.setAttribute("data-menu-list", "");
488
416
  this.addListeners();
489
417
  }
490
418
  }
491
- /**
492
- * Sets the menu position.
493
- * @public
494
- */
495
- setMenuPosition() {
496
- if (this.$fastController.isConnected) {
497
- this.style.setProperty("--menu-position-area", this.menuPosition === MenuPositions.above ? "block-start span-inline-end" : "block-end span-inline-end");
498
- }
499
- }
500
419
  /**
501
420
  * Focuses on the menu list.
502
421
  * @public
@@ -523,7 +442,7 @@ class Menu extends FASTElement {
523
442
  * @param newValue - The new value of 'openOnHover'.
524
443
  * @public
525
444
  */
526
- openOnHoverChanged(oldValue, newValue) {
445
+ openOnHoverChanged(_oldValue, newValue) {
527
446
  var _a, _b;
528
447
  if (newValue) {
529
448
  (_a = this._trigger) === null || _a === void 0 ? void 0 : _a.addEventListener("mouseover", this.openMenu);
@@ -538,7 +457,7 @@ class Menu extends FASTElement {
538
457
  * @param oldValue - The previous value of 'persistOnItemClick'.
539
458
  * @param newValue - The new value of 'persistOnItemClick'.
540
459
  */
541
- persistOnItemClickChanged(oldValue, newValue) {
460
+ persistOnItemClickChanged(_oldValue, newValue) {
542
461
  var _a, _b;
543
462
  if (!newValue) {
544
463
  (_a = this._menuList) === null || _a === void 0 ? void 0 : _a.addEventListener("change", this.closeMenu);
@@ -547,25 +466,40 @@ class Menu extends FASTElement {
547
466
  }
548
467
  }
549
468
  /**
550
- * Called whenever the 'menuPosition' property changes.
469
+ * Called whenever the 'repositionMode' property changes.
551
470
  *
552
- * @param oldValue - The previous value of 'menuPosition'.
553
- * @param newValue - The new value of 'menuPosition'.
554
471
  * @public
472
+ * @param oldValue - The previous value of 'repositionMode'.
473
+ * @param newValue - The new value of 'repositionMode'.
555
474
  */
556
- menuPositionChanged() {
557
- this.setMenuPosition();
475
+ repositionModeChanged(_oldValue, newValue) {
476
+ if (newValue === MenuRepositionModes.none) {
477
+ this.positioning = null;
478
+ } else if (!this.positioning && this._open) {
479
+ this.createPositioningManager();
480
+ }
481
+ if (this._open) {
482
+ this.scheduleReposition();
483
+ }
558
484
  }
559
485
  /**
560
- * Called whenever the 'repositionMode' property changes.
486
+ * Called whenever the 'overflowBoundary' property changes.
561
487
  *
562
488
  * @public
563
- * @param oldValue - The previous value of 'repositionMode'.
564
- * @param newValue - The new value of 'repositionMode'.
565
489
  */
566
- repositionModeChanged(oldValue, newValue) {
567
- if (this.positioning) {
568
- this.positioning.repositionMode = newValue;
490
+ overflowBoundaryChanged(oldValue, newValue) {
491
+ var _a;
492
+ if (oldValue) {
493
+ oldValue.removeEventListener("scroll", this.handleWindowChanges);
494
+ }
495
+ if (this._open && this.repositionMode !== MenuRepositionModes.none) {
496
+ if (newValue) {
497
+ newValue.addEventListener("scroll", this.handleWindowChanges);
498
+ }
499
+ (_a = this.positioning) === null || _a === void 0 ? void 0 : _a.setOverflowBoundaryReference(newValue !== null && newValue !== void 0 ? newValue : null);
500
+ this.scheduleReposition();
501
+ } else if (this.positioning) {
502
+ this.positioning.setOverflowBoundaryReference(newValue !== null && newValue !== void 0 ? newValue : null);
569
503
  }
570
504
  }
571
505
  /**
@@ -575,7 +509,7 @@ class Menu extends FASTElement {
575
509
  * @param oldValue - The previous value of 'openOnContext'.
576
510
  * @param newValue - The new value of 'openOnContext'.
577
511
  */
578
- openOnContextChanged(oldValue, newValue) {
512
+ openOnContextChanged(_oldValue, newValue) {
579
513
  var _a, _b;
580
514
  if (newValue) {
581
515
  (_a = this._trigger) === null || _a === void 0 ? void 0 : _a.addEventListener("contextmenu", this.openMenu);
@@ -590,7 +524,7 @@ class Menu extends FASTElement {
590
524
  * @param oldValue - The previous value of 'closeOnScroll'.
591
525
  * @param newValue - The new value of 'closeOnScroll'.
592
526
  */
593
- closeOnScrollChanged(oldValue, newValue) {
527
+ closeOnScrollChanged(_oldValue, newValue) {
594
528
  if (newValue) {
595
529
  document.addEventListener("scroll", this.closeMenu);
596
530
  } else {
@@ -603,19 +537,17 @@ class Menu extends FASTElement {
603
537
  * @internal
604
538
  */
605
539
  addListeners() {
606
- var _a, _b, _c, _d, _e, _f;
607
- (_a = this._menuList) === null || _a === void 0 ? void 0 : _a.addEventListener("toggle", this.toggleHandler);
608
- (_b = this._trigger) === null || _b === void 0 ? void 0 : _b.addEventListener("keydown", this.triggerKeydownHandler);
540
+ var _a, _b, _c, _d, _e;
541
+ (_a = this._trigger) === null || _a === void 0 ? void 0 : _a.addEventListener("keydown", this.triggerKeydownHandler);
609
542
  if (!this.persistOnItemClick) {
610
- (_c = this._menuList) === null || _c === void 0 ? void 0 : _c.addEventListener("change", this.closeMenu);
543
+ (_b = this._menuList) === null || _b === void 0 ? void 0 : _b.addEventListener("change", this.closeMenu);
611
544
  }
612
545
  if (this.openOnHover) {
613
- (_d = this._trigger) === null || _d === void 0 ? void 0 : _d.addEventListener("mouseover", this.openMenu);
546
+ (_c = this._trigger) === null || _c === void 0 ? void 0 : _c.addEventListener("mouseover", this.openMenu);
614
547
  } else if (this.openOnContext) {
615
- (_e = this._trigger) === null || _e === void 0 ? void 0 : _e.addEventListener("contextmenu", this.openMenu);
616
- document.addEventListener("click", this.documentClickHandler);
548
+ (_d = this._trigger) === null || _d === void 0 ? void 0 : _d.addEventListener("contextmenu", this.openMenu);
617
549
  } else {
618
- (_f = this._trigger) === null || _f === void 0 ? void 0 : _f.addEventListener("click", this.toggleMenu);
550
+ (_e = this._trigger) === null || _e === void 0 ? void 0 : _e.addEventListener("click", this.toggleMenu);
619
551
  }
620
552
  }
621
553
  /**
@@ -624,20 +556,18 @@ class Menu extends FASTElement {
624
556
  * @internal
625
557
  */
626
558
  removeListeners() {
627
- var _a, _b, _c, _d, _e, _f;
628
- (_a = this._menuList) === null || _a === void 0 ? void 0 : _a.removeEventListener("toggle", this.toggleHandler);
629
- (_b = this._trigger) === null || _b === void 0 ? void 0 : _b.removeEventListener("keydown", this.triggerKeydownHandler);
559
+ var _a, _b, _c, _d, _e;
560
+ (_a = this._trigger) === null || _a === void 0 ? void 0 : _a.removeEventListener("keydown", this.triggerKeydownHandler);
630
561
  if (!this.persistOnItemClick) {
631
- (_c = this._menuList) === null || _c === void 0 ? void 0 : _c.removeEventListener("change", this.closeMenu);
562
+ (_b = this._menuList) === null || _b === void 0 ? void 0 : _b.removeEventListener("change", this.closeMenu);
632
563
  }
633
564
  if (this.openOnHover) {
634
- (_d = this._trigger) === null || _d === void 0 ? void 0 : _d.removeEventListener("mouseover", this.openMenu);
565
+ (_c = this._trigger) === null || _c === void 0 ? void 0 : _c.removeEventListener("mouseover", this.openMenu);
635
566
  }
636
567
  if (this.openOnContext) {
637
- (_e = this._trigger) === null || _e === void 0 ? void 0 : _e.removeEventListener("contextmenu", this.openMenu);
638
- document.removeEventListener("click", this.documentClickHandler);
568
+ (_d = this._trigger) === null || _d === void 0 ? void 0 : _d.removeEventListener("contextmenu", this.openMenu);
639
569
  } else {
640
- (_f = this._trigger) === null || _f === void 0 ? void 0 : _f.removeEventListener("click", this.toggleMenu);
570
+ (_e = this._trigger) === null || _e === void 0 ? void 0 : _e.removeEventListener("click", this.toggleMenu);
641
571
  }
642
572
  }
643
573
  /**
@@ -647,7 +577,6 @@ class Menu extends FASTElement {
647
577
  * @public
648
578
  */
649
579
  menuKeydownHandler(e) {
650
- var _a;
651
580
  if (e.defaultPrevented) {
652
581
  return;
653
582
  }
@@ -656,7 +585,7 @@ class Menu extends FASTElement {
656
585
  case keyEscape:
657
586
  e.preventDefault();
658
587
  if (this._open) {
659
- (_a = this._menuList) === null || _a === void 0 ? void 0 : _a.togglePopover(false);
588
+ this.closeMenuInternal();
660
589
  this.focusTrigger();
661
590
  }
662
591
  break;