@lion/ui 0.20.0-menu-system.0 → 0.21.0

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 (414) hide show
  1. package/calendar-suites.js +1 -0
  2. package/collapsible.js +0 -1
  3. package/components/button/src/LionButton.js +0 -4
  4. package/components/button/test-suites/LionButton.suite.js +0 -1
  5. package/components/calendar/src/LionCalendar.js +1 -3
  6. package/components/calendar/test/lion-calendar.test.js +67 -47
  7. package/components/calendar/test-suites/LionCalendar.suite.js +79 -0
  8. package/components/combobox/test/lion-combobox.test.js +0 -1
  9. package/components/form-core/src/FormatMixin.js +17 -7
  10. package/components/form-core/src/form-group/FormGroupMixin.js +0 -7
  11. package/components/form-core/src/registration/FormRegistrarMixin.js +0 -11
  12. package/components/form-core/test/FormControlMixin.test.js +0 -1
  13. package/components/form-core/test/FormatMixin.test.js +4 -1
  14. package/components/form-core/test/validate/Validator.test.js +0 -2
  15. package/components/form-core/test-helpers/mimicUserInput.js +1 -0
  16. package/components/form-core/test-suites/FormatMixin.suite.js +273 -79
  17. package/components/form-core/test-suites/ValidateMixin.suite.js +0 -2
  18. package/components/form-core/test-suites/ValidateMixinFeedbackPart.suite.js +0 -1
  19. package/components/input/test/input-integrations.test.js +3 -2
  20. package/components/input/test/lion-input-integrations.test.js +2 -1
  21. package/components/input-amount/test/lion-input-amount-integrations.test.js +1 -1
  22. package/components/input-amount-dropdown/src/LionInputAmountDropdown.js +72 -11
  23. package/components/input-amount-dropdown/test/lion-input-amount-dropdown-integrations.test.js +27 -0
  24. package/components/input-amount-dropdown/test-suites/LionInputAmountDropdown.suite.js +60 -3
  25. package/components/input-date/test/lion-input-date-integrations.test.js +1 -1
  26. package/components/input-datepicker/src/LionInputDatepicker.js +4 -0
  27. package/components/input-datepicker/src/localizeNamespaceLoader.js +0 -1
  28. package/components/input-datepicker/test/lion-input-datepicker-integrations.test.js +1 -1
  29. package/components/input-datepicker/test/lion-input-datepicker.test.js +74 -9
  30. package/components/input-datepicker/test-suites/LionInputDatepicker.suite.js +35 -0
  31. package/components/input-email/src/LionInputEmail.js +2 -0
  32. package/components/input-email/test/lion-input-email-integrations.test.js +1 -1
  33. package/components/input-email/test/lion-input-email.test.js +6 -0
  34. package/components/input-file/src/validators.js +31 -1
  35. package/components/input-file/test/FileValidators.test.js +31 -0
  36. package/components/input-file/translations/bg.js +1 -0
  37. package/components/input-file/translations/cs.js +1 -0
  38. package/components/input-file/translations/de.js +2 -0
  39. package/components/input-file/translations/en.js +1 -0
  40. package/components/input-file/translations/es.js +1 -0
  41. package/components/input-file/translations/fr.js +1 -0
  42. package/components/input-file/translations/hu.js +1 -0
  43. package/components/input-file/translations/id.js +1 -0
  44. package/components/input-file/translations/it.js +1 -0
  45. package/components/input-file/translations/nl.js +1 -0
  46. package/components/input-file/translations/pl.js +1 -0
  47. package/components/input-file/translations/ro.js +1 -0
  48. package/components/input-file/translations/ru.js +1 -0
  49. package/components/input-file/translations/sk.js +1 -0
  50. package/components/input-file/translations/uk.js +1 -0
  51. package/components/input-file/translations/zh.js +1 -0
  52. package/components/input-iban/test/lion-input-iban-integrations.test.js +1 -1
  53. package/components/input-range/src/LionInputRange.js +51 -8
  54. package/components/input-range/test/lion-input-range.test.js +114 -0
  55. package/components/input-stepper/test-suites/lion-input-stepper.integration.suite.js +2 -2
  56. package/components/input-tel/src/LionInputTel.js +1 -1
  57. package/components/input-tel/test-suites/LionInputTel.suite.js +7 -0
  58. package/components/localize/test/date/formatDate.test.js +0 -1
  59. package/components/overlays/src/OverlayController.js +110 -278
  60. package/components/overlays/src/OverlayMixin.js +11 -58
  61. package/components/overlays/src/OverlaysManager.js +2 -2
  62. package/components/overlays/src/configurations/visibility-trigger-partials/withHoverInteraction.js +41 -9
  63. package/components/overlays/src/utils/adopt-styles.js +2 -3
  64. package/components/overlays/src/utils/get-focusable-elements.js +0 -4
  65. package/components/overlays/src/utils/is-equal-config.js +6 -10
  66. package/components/overlays/test/OverlayController.test.js +14 -127
  67. package/components/overlays/test/utils-tests/is-equal-config.test.js +1 -1
  68. package/components/overlays/test-suites/OverlayMixin.suite.js +8 -8
  69. package/components/overlays/test-suites/WithHoverInteraction.suite.js +212 -0
  70. package/components/overlays/types/ArrowMixinTypes.ts +1 -3
  71. package/components/overlays/types/OverlayConfig.ts +5 -20
  72. package/components/overlays/types/OverlayMixinTypes.ts +0 -2
  73. package/components/select-rich/test/lion-select-rich.test.js +0 -3
  74. package/components/textarea/test/lion-textarea-integrations.test.js +2 -1
  75. package/components/tooltip/test/lion-tooltip.test.js +9 -1
  76. package/custom-elements.json +20629 -32907
  77. package/dist-types/components/button/src/LionButton.d.ts +0 -1
  78. package/dist-types/components/button/src/LionButton.d.ts.map +1 -1
  79. package/dist-types/components/button/test-suites/LionButton.suite.d.ts.map +1 -1
  80. package/dist-types/components/calendar/src/LionCalendar.d.ts.map +1 -1
  81. package/dist-types/components/calendar/test/lion-calendar.test.d.ts.map +1 -1
  82. package/dist-types/components/calendar/test-suites/LionCalendar.suite.d.ts +5 -0
  83. package/dist-types/components/calendar/test-suites/LionCalendar.suite.d.ts.map +1 -0
  84. package/dist-types/components/combobox/src/LionCombobox.d.ts +1 -1
  85. package/dist-types/components/dialog/src/LionDialog.d.ts +2 -6
  86. package/dist-types/components/dialog/src/LionDialog.d.ts.map +1 -1
  87. package/dist-types/components/form-core/src/FormatMixin.d.ts.map +1 -1
  88. package/dist-types/components/form-core/src/form-group/FormGroupMixin.d.ts.map +1 -1
  89. package/dist-types/components/form-core/src/registration/FormRegistrarMixin.d.ts.map +1 -1
  90. package/dist-types/components/form-core/test-helpers/mimicUserInput.d.ts.map +1 -1
  91. package/dist-types/components/form-core/test-suites/FormatMixin.suite.d.ts +58 -5
  92. package/dist-types/components/form-core/test-suites/FormatMixin.suite.d.ts.map +1 -1
  93. package/dist-types/components/form-core/test-suites/ValidateMixin.suite.d.ts.map +1 -1
  94. package/dist-types/components/form-core/test-suites/ValidateMixinFeedbackPart.suite.d.ts.map +1 -1
  95. package/dist-types/components/icon/src/LionIcon.d.ts +2 -2
  96. package/dist-types/components/input-amount-dropdown/src/LionInputAmountDropdown.d.ts +24 -6
  97. package/dist-types/components/input-amount-dropdown/src/LionInputAmountDropdown.d.ts.map +1 -1
  98. package/dist-types/components/input-amount-dropdown/test/lion-input-amount-dropdown-integrations.test.d.ts +2 -0
  99. package/dist-types/components/input-amount-dropdown/test/lion-input-amount-dropdown-integrations.test.d.ts.map +1 -0
  100. package/dist-types/components/input-amount-dropdown/test-suites/LionInputAmountDropdown.suite.d.ts.map +1 -1
  101. package/dist-types/components/input-datepicker/src/LionInputDatepicker.d.ts +2 -1
  102. package/dist-types/components/input-datepicker/src/LionInputDatepicker.d.ts.map +1 -1
  103. package/dist-types/components/input-datepicker/src/localizeNamespaceLoader.d.ts.map +1 -1
  104. package/dist-types/components/input-datepicker/test/lion-input-datepicker.test.d.ts.map +1 -1
  105. package/dist-types/components/input-datepicker/test-suites/LionInputDatepicker.suite.d.ts +7 -0
  106. package/dist-types/components/input-datepicker/test-suites/LionInputDatepicker.suite.d.ts.map +1 -0
  107. package/dist-types/components/input-email/src/LionInputEmail.d.ts.map +1 -1
  108. package/dist-types/components/input-file/src/validators.d.ts +11 -0
  109. package/dist-types/components/input-file/src/validators.d.ts.map +1 -1
  110. package/dist-types/components/input-file/translations/bg-BG.d.ts +1 -0
  111. package/dist-types/components/input-file/translations/bg.d.ts +1 -0
  112. package/dist-types/components/input-file/translations/cs-CZ.d.ts +1 -0
  113. package/dist-types/components/input-file/translations/cs.d.ts +1 -0
  114. package/dist-types/components/input-file/translations/de-DE.d.ts +1 -0
  115. package/dist-types/components/input-file/translations/de.d.ts +1 -0
  116. package/dist-types/components/input-file/translations/en-AU.d.ts +1 -0
  117. package/dist-types/components/input-file/translations/en-GB.d.ts +1 -0
  118. package/dist-types/components/input-file/translations/en-PH.d.ts +1 -0
  119. package/dist-types/components/input-file/translations/en-US.d.ts +1 -0
  120. package/dist-types/components/input-file/translations/en.d.ts +1 -0
  121. package/dist-types/components/input-file/translations/es-ES.d.ts +1 -0
  122. package/dist-types/components/input-file/translations/es.d.ts +1 -0
  123. package/dist-types/components/input-file/translations/fr-BE.d.ts +1 -0
  124. package/dist-types/components/input-file/translations/fr-FR.d.ts +1 -0
  125. package/dist-types/components/input-file/translations/fr.d.ts +1 -0
  126. package/dist-types/components/input-file/translations/hu-HU.d.ts +1 -0
  127. package/dist-types/components/input-file/translations/hu.d.ts +1 -0
  128. package/dist-types/components/input-file/translations/id-ID.d.ts +1 -0
  129. package/dist-types/components/input-file/translations/id.d.ts +1 -0
  130. package/dist-types/components/input-file/translations/it-IT.d.ts +1 -0
  131. package/dist-types/components/input-file/translations/it.d.ts +1 -0
  132. package/dist-types/components/input-file/translations/nl-BE.d.ts +1 -0
  133. package/dist-types/components/input-file/translations/nl-NL.d.ts +1 -0
  134. package/dist-types/components/input-file/translations/nl.d.ts +1 -0
  135. package/dist-types/components/input-file/translations/pl-PL.d.ts +1 -0
  136. package/dist-types/components/input-file/translations/pl.d.ts +1 -0
  137. package/dist-types/components/input-file/translations/ro-RO.d.ts +1 -0
  138. package/dist-types/components/input-file/translations/ro.d.ts +1 -0
  139. package/dist-types/components/input-file/translations/ru-RU.d.ts +1 -0
  140. package/dist-types/components/input-file/translations/ru.d.ts +1 -0
  141. package/dist-types/components/input-file/translations/sk-SK.d.ts +1 -0
  142. package/dist-types/components/input-file/translations/sk.d.ts +1 -0
  143. package/dist-types/components/input-file/translations/uk-UA.d.ts +1 -0
  144. package/dist-types/components/input-file/translations/uk.d.ts +1 -0
  145. package/dist-types/components/input-file/translations/zh-CN.d.ts +1 -0
  146. package/dist-types/components/input-file/translations/zh.d.ts +1 -0
  147. package/dist-types/components/input-range/src/LionInputRange.d.ts +11 -0
  148. package/dist-types/components/input-range/src/LionInputRange.d.ts.map +1 -1
  149. package/dist-types/components/input-tel/src/LionInputTel.d.ts.map +1 -1
  150. package/dist-types/components/input-tel/test-suites/LionInputTel.suite.d.ts.map +1 -1
  151. package/dist-types/components/overlays/src/OverlayController.d.ts +12 -24
  152. package/dist-types/components/overlays/src/OverlayController.d.ts.map +1 -1
  153. package/dist-types/components/overlays/src/OverlayMixin.d.ts.map +1 -1
  154. package/dist-types/components/overlays/src/configurations/visibility-trigger-partials/withHoverInteraction.d.ts.map +1 -1
  155. package/dist-types/components/overlays/src/utils/get-focusable-elements.d.ts.map +1 -1
  156. package/dist-types/components/overlays/src/utils/is-equal-config.d.ts.map +1 -1
  157. package/dist-types/components/overlays/test-suites/WithHoverInteraction.suite.d.ts +17 -0
  158. package/dist-types/components/overlays/test-suites/WithHoverInteraction.suite.d.ts.map +1 -0
  159. package/dist-types/components/overlays/types/ArrowMixinTypes.d.ts.map +1 -1
  160. package/dist-types/components/overlays/types/OverlayConfig.d.ts +2 -12
  161. package/dist-types/components/overlays/types/OverlayConfig.d.ts.map +1 -1
  162. package/dist-types/components/overlays/types/OverlayMixinTypes.d.ts +0 -1
  163. package/dist-types/components/overlays/types/OverlayMixinTypes.d.ts.map +1 -1
  164. package/dist-types/components/select-rich/src/LionSelectRich.d.ts +3 -11
  165. package/dist-types/components/select-rich/src/LionSelectRich.d.ts.map +1 -1
  166. package/dist-types/components/tooltip/src/LionTooltip.d.ts +1 -1
  167. package/dist-types/components/tooltip/test/lion-tooltip.test.d.ts.map +1 -1
  168. package/dist-types/exports/calendar-suites.d.ts +2 -0
  169. package/dist-types/exports/calendar-suites.d.ts.map +1 -0
  170. package/dist-types/exports/input-datepicker-suites.d.ts +2 -0
  171. package/dist-types/exports/input-datepicker-suites.d.ts.map +1 -0
  172. package/dist-types/exports/input-file.d.ts +1 -1
  173. package/dist-types/exports/overlays-test-suites.d.ts +1 -0
  174. package/dist-types/exports/overlays.d.ts +0 -3
  175. package/dist-types/exports/overlays.d.ts.map +1 -1
  176. package/dist-types/tsconfig.tsbuildinfo +1 -1
  177. package/docs/components/checkbox-group/api-table.md +4 -2
  178. package/docs/components/checkbox-group/overview.md +2 -2
  179. package/docs/components/collapsible/overview.md +1 -1
  180. package/docs/components/combobox/api-table.md +8 -21
  181. package/docs/components/combobox/overview.md +1 -1
  182. package/docs/components/combobox/use-cases.md +1 -1
  183. package/docs/components/dialog/api-table.md +6 -31
  184. package/docs/components/dialog/overview.md +1 -1
  185. package/docs/components/fieldset/overview.md +5 -5
  186. package/docs/components/form/overview.md +3 -3
  187. package/docs/components/form/use-cases.md +2 -2
  188. package/docs/components/icon/use-cases.md +1 -1
  189. package/docs/components/input/api-table.md +2 -1
  190. package/docs/components/input/overview.md +1 -1
  191. package/docs/components/input-amount/api-table.md +2 -1
  192. package/docs/components/input-amount/overview.md +3 -3
  193. package/docs/components/input-amount-dropdown/api-table.md +3 -2
  194. package/docs/components/input-date/api-table.md +2 -1
  195. package/docs/components/input-date/overview.md +3 -3
  196. package/docs/components/input-datepicker/api-table.md +6 -22
  197. package/docs/components/input-datepicker/overview.md +5 -5
  198. package/docs/components/input-email/api-table.md +3 -2
  199. package/docs/components/input-email/overview.md +2 -2
  200. package/docs/components/input-file/api-table.md +2 -1
  201. package/docs/components/input-file/overview.md +1 -1
  202. package/docs/components/input-file/use-cases.md +18 -0
  203. package/docs/components/input-iban/api-table.md +2 -1
  204. package/docs/components/input-iban/overview.md +2 -2
  205. package/docs/components/input-range/api-table.md +7 -1
  206. package/docs/components/input-range/overview.md +2 -2
  207. package/docs/components/input-range/use-cases.md +14 -0
  208. package/docs/components/input-stepper/api-table.md +2 -1
  209. package/docs/components/input-stepper/overview.md +1 -1
  210. package/docs/components/input-tel/api-table.md +3 -2
  211. package/docs/components/input-tel/overview.md +1 -1
  212. package/docs/components/input-tel/use-cases.md +6 -6
  213. package/docs/components/input-tel-dropdown/api-table.md +3 -2
  214. package/docs/components/input-tel-dropdown/overview.md +1 -1
  215. package/docs/components/listbox/api-table.md +2 -1
  216. package/docs/components/listbox/use-cases.md +1 -1
  217. package/docs/components/radio-group/api-table.md +2 -1
  218. package/docs/components/radio-group/overview.md +3 -3
  219. package/docs/components/select/api-table.md +2 -1
  220. package/docs/components/select/use-cases.md +1 -1
  221. package/docs/components/select-rich/api-table.md +5 -21
  222. package/docs/components/select-rich/use-cases.md +2 -2
  223. package/docs/components/switch/api-table.md +2 -1
  224. package/docs/components/tabs/examples.md +1 -1
  225. package/docs/components/textarea/api-table.md +2 -1
  226. package/docs/components/tooltip/api-table.md +11 -36
  227. package/docs/components/tooltip/use-cases.md +34 -1
  228. package/docs/fundamentals/index.md +4 -4
  229. package/docs/fundamentals/node-tools/publish-docs/overview.md +3 -3
  230. package/docs/fundamentals/node-tools/rocket-preset-extend-lion-docs/overview.md +2 -2
  231. package/docs/fundamentals/rationales/accessibility.md +1 -1
  232. package/docs/fundamentals/systems/core/SlotMixin.md +1 -1
  233. package/docs/fundamentals/systems/core/overview.md +1 -1
  234. package/docs/fundamentals/systems/form/api-table.md +2 -1
  235. package/docs/fundamentals/systems/form/formatting-and-parsing.md +4 -4
  236. package/docs/fundamentals/systems/form/model-value.md +1 -1
  237. package/docs/fundamentals/systems/form/overview.md +28 -28
  238. package/docs/fundamentals/systems/form/validate.md +2 -2
  239. package/docs/fundamentals/systems/localize/overview.md +4 -4
  240. package/docs/fundamentals/systems/overlays/api-table.md +34 -36
  241. package/docs/fundamentals/systems/overlays/configuration.md +2 -2
  242. package/docs/fundamentals/systems/overlays/overview.md +5 -5
  243. package/docs/fundamentals/systems/overlays/use-cases.md +2 -2
  244. package/docs/fundamentals/tools/helpers/overview.md +1 -1
  245. package/docs/fundamentals/tools/singleton-manager/overview.md +4 -4
  246. package/docs/guides/how-to/create-a-custom-field.md +5 -5
  247. package/docs/guides/how-to/create-a-form.md +4 -4
  248. package/docs/guides/how-to/extend-a-native-input.md +2 -2
  249. package/docs/guides/how-to/index.md +1 -1
  250. package/docs/guides/index.md +8 -8
  251. package/docs/guides/principles/index.md +5 -5
  252. package/docs/guides/principles/styling.md +1 -1
  253. package/exports/calendar-suites.js +1 -0
  254. package/exports/collapsible.js +0 -1
  255. package/exports/input-datepicker-suites.js +1 -0
  256. package/exports/input-file.js +5 -1
  257. package/exports/overlays-test-suites.js +1 -0
  258. package/exports/overlays.js +0 -6
  259. package/input-datepicker-suites.js +1 -0
  260. package/input-file.js +5 -1
  261. package/overlays-test-suites.js +1 -0
  262. package/overlays.js +0 -6
  263. package/package.json +2 -2
  264. package/components/collapsible/src/DisclosureMixin.js +0 -313
  265. package/components/collapsible/test-suites/DisclosureMixin.suite.js +0 -30
  266. package/components/collapsible/types/DisclosureMixinTypes.ts +0 -48
  267. package/components/menu/CHANGELOG.md +0 -37
  268. package/components/menu/README.md +0 -335
  269. package/components/menu/index.js +0 -2
  270. package/components/menu/lion-menu-overlay.js +0 -3
  271. package/components/menu/lion-menu.js +0 -3
  272. package/components/menu/lion-spinbutton.js +0 -3
  273. package/components/menu/lion-toolbar.js +0 -3
  274. package/components/menu/lion-tree.js +0 -3
  275. package/components/menu/package.json +0 -46
  276. package/components/menu/requirements.temp.md +0 -12
  277. package/components/menu/src/InteractiveListMixin.js +0 -840
  278. package/components/menu/src/LionMenu.js +0 -250
  279. package/components/menu/src/LionMenuHybrid.js +0 -46
  280. package/components/menu/src/LionMenuOverlay.js +0 -155
  281. package/components/menu/src/LionSpinbutton.js +0 -213
  282. package/components/menu/src/LionToolbar.js +0 -94
  283. package/components/menu/src/LionTree.js +0 -52
  284. package/components/menu/src/MoreButtonMenuMixin.js +0 -278
  285. package/components/menu/src/MultiLevelListMixin.js +0 -311
  286. package/components/menu/src/utils/isInView.js +0 -26
  287. package/components/menu/src/utils/listItemInteractions.js +0 -124
  288. package/components/menu/test/InteractiveListMixin.test.js +0 -3
  289. package/components/menu/test/MoreButtonMenuMixin.test.js +0 -4
  290. package/components/menu/test/MultiLevelListMixin.test.js +0 -3
  291. package/components/menu/test/lion-menu-hybrid.test.js +0 -3
  292. package/components/menu/test/lion-menu.test.js +0 -11
  293. package/components/menu/test/lion-toolbar.test.js +0 -8
  294. package/components/menu/test/lion-tree.test.js +0 -7
  295. package/components/menu/test-helpers/mimicKeyPress.js +0 -9
  296. package/components/menu/test-suites/InteractiveListMixin.suite.js +0 -454
  297. package/components/menu/test-suites/LionMenu.suite.js +0 -113
  298. package/components/menu/test-suites/LionMenuHybrid.suite.js +0 -583
  299. package/components/menu/test-suites/MoreButtonMenuMixin.suite.js +0 -372
  300. package/components/menu/test-suites/MultiLevelListMixin.suite.js +0 -303
  301. package/components/menu/types/InteractiveListMixinTypes.d.ts +0 -84
  302. package/components/navigation-bar/README.md +0 -1
  303. package/components/navigation-bar/src/LionNavigationBar.js +0 -439
  304. package/components/navigation-bar/src/types.js +0 -41
  305. package/components/overlays/NEXT.md +0 -49
  306. package/components/overlays/test/withHoverInteraction.test.js +0 -90
  307. package/dist-types/components/collapsible/src/DisclosureMixin.d.ts +0 -3
  308. package/dist-types/components/collapsible/src/DisclosureMixin.d.ts.map +0 -1
  309. package/dist-types/components/collapsible/test-suites/DisclosureMixin.suite.d.ts +0 -2
  310. package/dist-types/components/collapsible/test-suites/DisclosureMixin.suite.d.ts.map +0 -1
  311. package/dist-types/components/collapsible/types/DisclosureMixinTypes.d.ts +0 -24
  312. package/dist-types/components/collapsible/types/DisclosureMixinTypes.d.ts.map +0 -1
  313. package/dist-types/components/menu/index.d.ts +0 -3
  314. package/dist-types/components/menu/index.d.ts.map +0 -1
  315. package/dist-types/components/menu/lion-menu-overlay.d.ts +0 -2
  316. package/dist-types/components/menu/lion-menu-overlay.d.ts.map +0 -1
  317. package/dist-types/components/menu/lion-menu.d.ts +0 -2
  318. package/dist-types/components/menu/lion-menu.d.ts.map +0 -1
  319. package/dist-types/components/menu/lion-spinbutton.d.ts +0 -2
  320. package/dist-types/components/menu/lion-spinbutton.d.ts.map +0 -1
  321. package/dist-types/components/menu/lion-toolbar.d.ts +0 -2
  322. package/dist-types/components/menu/lion-toolbar.d.ts.map +0 -1
  323. package/dist-types/components/menu/lion-tree.d.ts +0 -2
  324. package/dist-types/components/menu/lion-tree.d.ts.map +0 -1
  325. package/dist-types/components/menu/src/InteractiveListMixin.d.ts +0 -617
  326. package/dist-types/components/menu/src/InteractiveListMixin.d.ts.map +0 -1
  327. package/dist-types/components/menu/src/LionMenu.d.ts +0 -635
  328. package/dist-types/components/menu/src/LionMenu.d.ts.map +0 -1
  329. package/dist-types/components/menu/src/LionMenuHybrid.d.ts +0 -19
  330. package/dist-types/components/menu/src/LionMenuHybrid.d.ts.map +0 -1
  331. package/dist-types/components/menu/src/LionMenuOverlay.d.ts +0 -1015
  332. package/dist-types/components/menu/src/LionMenuOverlay.d.ts.map +0 -1
  333. package/dist-types/components/menu/src/LionSpinbutton.d.ts +0 -58
  334. package/dist-types/components/menu/src/LionSpinbutton.d.ts.map +0 -1
  335. package/dist-types/components/menu/src/LionToolbar.d.ts +0 -8
  336. package/dist-types/components/menu/src/LionToolbar.d.ts.map +0 -1
  337. package/dist-types/components/menu/src/LionTree.d.ts +0 -447
  338. package/dist-types/components/menu/src/LionTree.d.ts.map +0 -1
  339. package/dist-types/components/menu/src/MoreButtonMenuMixin.d.ts +0 -39
  340. package/dist-types/components/menu/src/MoreButtonMenuMixin.d.ts.map +0 -1
  341. package/dist-types/components/menu/src/MultiLevelListMixin.d.ts +0 -503
  342. package/dist-types/components/menu/src/MultiLevelListMixin.d.ts.map +0 -1
  343. package/dist-types/components/menu/src/utils/isInView.d.ts +0 -9
  344. package/dist-types/components/menu/src/utils/isInView.d.ts.map +0 -1
  345. package/dist-types/components/menu/src/utils/listItemInteractions.d.ts +0 -48
  346. package/dist-types/components/menu/src/utils/listItemInteractions.d.ts.map +0 -1
  347. package/dist-types/components/menu/test/InteractiveListMixin.test.d.ts +0 -2
  348. package/dist-types/components/menu/test/InteractiveListMixin.test.d.ts.map +0 -1
  349. package/dist-types/components/menu/test/MoreButtonMenuMixin.test.d.ts +0 -2
  350. package/dist-types/components/menu/test/MoreButtonMenuMixin.test.d.ts.map +0 -1
  351. package/dist-types/components/menu/test/MultiLevelListMixin.test.d.ts +0 -2
  352. package/dist-types/components/menu/test/MultiLevelListMixin.test.d.ts.map +0 -1
  353. package/dist-types/components/menu/test/lion-menu-hybrid.test.d.ts +0 -2
  354. package/dist-types/components/menu/test/lion-menu-hybrid.test.d.ts.map +0 -1
  355. package/dist-types/components/menu/test/lion-menu.test.d.ts +0 -2
  356. package/dist-types/components/menu/test/lion-menu.test.d.ts.map +0 -1
  357. package/dist-types/components/menu/test/lion-toolbar.test.d.ts +0 -2
  358. package/dist-types/components/menu/test/lion-toolbar.test.d.ts.map +0 -1
  359. package/dist-types/components/menu/test/lion-tree.test.d.ts +0 -2
  360. package/dist-types/components/menu/test/lion-tree.test.d.ts.map +0 -1
  361. package/dist-types/components/menu/test-helpers/mimicKeyPress.d.ts +0 -7
  362. package/dist-types/components/menu/test-helpers/mimicKeyPress.d.ts.map +0 -1
  363. package/dist-types/components/menu/test-suites/InteractiveListMixin.suite.d.ts +0 -14
  364. package/dist-types/components/menu/test-suites/InteractiveListMixin.suite.d.ts.map +0 -1
  365. package/dist-types/components/menu/test-suites/LionMenu.suite.d.ts +0 -9
  366. package/dist-types/components/menu/test-suites/LionMenu.suite.d.ts.map +0 -1
  367. package/dist-types/components/menu/test-suites/LionMenuHybrid.suite.d.ts +0 -5
  368. package/dist-types/components/menu/test-suites/LionMenuHybrid.suite.d.ts.map +0 -1
  369. package/dist-types/components/menu/test-suites/MoreButtonMenuMixin.suite.d.ts +0 -14
  370. package/dist-types/components/menu/test-suites/MoreButtonMenuMixin.suite.d.ts.map +0 -1
  371. package/dist-types/components/menu/test-suites/MultiLevelListMixin.suite.d.ts +0 -11
  372. package/dist-types/components/menu/test-suites/MultiLevelListMixin.suite.d.ts.map +0 -1
  373. package/dist-types/components/navigation-bar/src/LionNavigationBar.d.ts +0 -238
  374. package/dist-types/components/navigation-bar/src/LionNavigationBar.d.ts.map +0 -1
  375. package/dist-types/components/navigation-bar/src/types.d.ts +0 -85
  376. package/dist-types/components/navigation-bar/src/types.d.ts.map +0 -1
  377. package/dist-types/components/overlays/test/withHoverInteraction.test.d.ts +0 -2
  378. package/dist-types/components/overlays/test/withHoverInteraction.test.d.ts.map +0 -1
  379. package/dist-types/exports/define/lion-item.d.ts +0 -2
  380. package/dist-types/exports/define/lion-item.d.ts.map +0 -1
  381. package/dist-types/exports/define/lion-menu-overlay.d.ts +0 -2
  382. package/dist-types/exports/define/lion-menu-overlay.d.ts.map +0 -1
  383. package/dist-types/exports/define/lion-menu.d.ts +0 -2
  384. package/dist-types/exports/define/lion-menu.d.ts.map +0 -1
  385. package/dist-types/exports/define/lion-navigation-bar.d.ts +0 -2
  386. package/dist-types/exports/define/lion-navigation-bar.d.ts.map +0 -1
  387. package/dist-types/exports/define/lion-toolbar.d.ts +0 -2
  388. package/dist-types/exports/define/lion-toolbar.d.ts.map +0 -1
  389. package/dist-types/exports/define/lion-tree.d.ts +0 -2
  390. package/dist-types/exports/define/lion-tree.d.ts.map +0 -1
  391. package/dist-types/exports/menu-test-suites.d.ts +0 -4
  392. package/dist-types/exports/menu-test-suites.d.ts.map +0 -1
  393. package/dist-types/exports/menu.d.ts +0 -7
  394. package/dist-types/exports/menu.d.ts.map +0 -1
  395. package/dist-types/exports/navigation-bar.d.ts +0 -2
  396. package/dist-types/exports/navigation-bar.d.ts.map +0 -1
  397. package/docs/components/menu/api-table.md +0 -460
  398. package/docs/components/menu/applyMenuDemoStyles.js +0 -173
  399. package/docs/components/menu/extensions.md +0 -262
  400. package/docs/components/menu/index.md +0 -13
  401. package/docs/components/menu/overview.md +0 -422
  402. package/docs/components/menu/use-cases.md +0 -77
  403. package/exports/define/lion-item.js +0 -3
  404. package/exports/define/lion-menu-overlay.js +0 -3
  405. package/exports/define/lion-menu.js +0 -3
  406. package/exports/define/lion-navigation-bar.js +0 -3
  407. package/exports/define/lion-toolbar.js +0 -3
  408. package/exports/define/lion-tree.js +0 -3
  409. package/exports/menu-test-suites.js +0 -4
  410. package/exports/menu.js +0 -7
  411. package/exports/navigation-bar.js +0 -1
  412. package/menu-test-suites.js +0 -4
  413. package/menu.js +0 -7
  414. package/navigation-bar.js +0 -1
@@ -3,7 +3,6 @@ import { deepContains } from './utils/deep-contains.js';
3
3
  import { overlayShadowDomStyle } from './overlayShadowDomStyle.js';
4
4
  import { _adoptStyleUtils } from './utils/adopt-styles.js';
5
5
  import { getFocusableElements } from './utils/get-focusable-elements.js';
6
- import { isEqualConfig } from './utils/is-equal-config.js';
7
6
 
8
7
  /**
9
8
  * @typedef {import('@lion/ui/types/overlays.js').OverlayPhase} OverlayPhase
@@ -33,37 +32,27 @@ import { isEqualConfig } from './utils/is-equal-config.js';
33
32
  * `<slot name="my-content">` belonging to `<div slot="content"/>` will be wrapped with wrappingDialogNodeL1 and contentWrapperNodeL2
34
33
  * inside shadow dom. With the help of temp markers, `<slot name="my-content">`'s original position will be respected.
35
34
  *
36
- * @param {{
37
- * wrappingDialogNodeL1: HTMLDialogElement|HTMLDivElement;
38
- * contentWrapperNodeL2:Element;
39
- * contentNodeL3: Element;
40
- * }} opts
35
+ * @param {{ wrappingDialogNodeL1:HTMLDialogElement|HTMLDivElement; contentWrapperNodeL2:Element; contentNodeL3: Element }} opts
41
36
  */
42
37
  function rearrangeNodes({ wrappingDialogNodeL1, contentWrapperNodeL2, contentNodeL3 }) {
43
- // if contentWrapperNode is provided by the user,
44
- // we assume it lives in shadow dom around a slot.
45
- const hasLegacyMethodOfProvidingWrapperNode = Boolean(contentWrapperNodeL2.isConnected);
46
- // We could be initialized via a directive (in offline dom). It's important that we know about the parents,
47
- // as we cannot deal with single content nodes
48
- const hasContentNodeAttachmentPoints = Boolean(contentNodeL3.parentNode);
49
-
50
- if (!hasLegacyMethodOfProvidingWrapperNode && !hasContentNodeAttachmentPoints) {
38
+ if (!(contentWrapperNodeL2.isConnected || contentNodeL3.isConnected)) {
51
39
  throw new Error(
52
- '[OverlayController] Could not find a render target, makes sure contentNode has a parent element (or contentWrapperNode is connected)',
40
+ '[OverlayController] Could not find a render target, since the provided contentNode is not connected to the DOM. Make sure that it is connected, e.g. by doing "document.body.appendChild(contentNode)", before passing it on.',
53
41
  );
54
42
  }
55
43
 
56
- /** @type {Node} */
57
44
  let parentElement;
58
- const tempMarker = document.createComment('overlay-insertion-marker');
45
+ const tempMarker = document.createComment('tempMarker');
59
46
 
60
- if (hasLegacyMethodOfProvidingWrapperNode) {
47
+ if (contentWrapperNodeL2.isConnected) {
61
48
  // This is the case when contentWrapperNode (living in shadow dom, wrapping <slot name="my-content-outlet">) is already provided via controller.
62
49
  parentElement = contentWrapperNodeL2.parentElement || contentWrapperNodeL2.getRootNode();
63
50
  parentElement.insertBefore(tempMarker, contentWrapperNodeL2);
64
51
  // Wrap...
65
52
  wrappingDialogNodeL1.appendChild(contentWrapperNodeL2);
66
- } else {
53
+ }
54
+ // if contentNodeL3.isConnected
55
+ else {
67
56
  const contentIsProjected = contentNodeL3.assignedSlot;
68
57
  if (contentIsProjected) {
69
58
  parentElement =
@@ -104,22 +93,7 @@ function rearrangeNodes({ wrappingDialogNodeL1, contentWrapperNodeL2, contentNod
104
93
  * ```
105
94
  */
106
95
  parentElement.insertBefore(wrappingDialogNodeL1, tempMarker);
107
-
108
- return function cleanup() {
109
- if (hasLegacyMethodOfProvidingWrapperNode) {
110
- parentElement?.insertBefore(contentWrapperNodeL2, tempMarker);
111
- } else {
112
- parentElement?.insertBefore(contentNodeL3, tempMarker);
113
- if (parentElement.contains(contentWrapperNodeL2)) {
114
- contentWrapperNodeL2.remove();
115
- }
116
- }
117
- parentElement?.removeChild(tempMarker);
118
-
119
- if (parentElement.contains(wrappingDialogNodeL1)) {
120
- parentElement?.removeChild(wrappingDialogNodeL1);
121
- }
122
- };
96
+ parentElement?.removeChild(tempMarker);
123
97
  }
124
98
 
125
99
  /**
@@ -132,21 +106,6 @@ async function preloadPopper() {
132
106
 
133
107
  const childDialogsClosedInEventLoopWeakmap = new WeakMap();
134
108
 
135
- /**
136
- * @param {HTMLElement | null} el
137
- * @param {string} selector
138
- * @returns {HTMLElement | null}
139
- */
140
- function deepClosest(el, selector) {
141
- // @ts-ignore - comparing HTMLElement to document/window for safety
142
- return (
143
- // @ts-ignore - type comparison check
144
- (el && el !== document && el !== window && el.closest(selector)) ||
145
- // @ts-ignore - host property on ShadowRoot
146
- deepClosest(el.getRootNode().host, selector)
147
- );
148
- }
149
-
150
109
  /**
151
110
  * OverlayController is the fundament for every single type of overlay. With the right
152
111
  * configuration, it can be used to build (modal) dialogs, tooltips, dropdowns, popovers,
@@ -237,25 +196,10 @@ export class OverlayController extends EventTarget {
237
196
  placement: 'center',
238
197
  },
239
198
  zIndex: 9999,
240
- isActivated: true,
241
- focusContentOnOpen: false,
242
- // This means that content will have visually-hidden / sr-only styles. This is handy for:
243
- // - hidden menus that should be "indexable" by screen readers (like the Links list in VO: https://support.apple.com/en-gb/guide/voiceover/mchlp2719/mac)
244
- // - "more" menus that put content in a dropdown that do not fit in the current row
245
- // - menus that should generally open on tab.
246
- // @ts-ignore - hideVisually is an extension property
247
- hideVisually: false,
248
- requireConnectedNodes: true,
249
-
250
- // hides children overlays when parent is closed...
251
- syncChildrenCloseState: false,
252
- // // In next major, we remove this prop. Now we disable it for backwards compatibility and enable it in the places we need it internally
253
- // _shouldTeardownDomStructure: false,
254
199
  };
255
200
 
256
201
  /** @protected */
257
202
  this._contentId = `overlay-content--${Math.random().toString(36).slice(2, 10)}`;
258
-
259
203
  /** @private */
260
204
  this.__originalAttrs = new Map();
261
205
  /** @private */
@@ -276,8 +220,6 @@ export class OverlayController extends EventTarget {
276
220
  this.__escKeyHandlerCalled = false;
277
221
  }
278
222
 
279
- __hasSetup = false;
280
-
281
223
  /**
282
224
  * The invokerNode
283
225
  * @type {HTMLElement | undefined}
@@ -296,7 +238,7 @@ export class OverlayController extends EventTarget {
296
238
 
297
239
  /**
298
240
  * Determines the connection point in DOM (body vs next to invoker).
299
- * @type {'global' | 'local' | 'custom' | undefined}
241
+ * @type {'global' | 'local' | undefined}
300
242
  */
301
243
  get placementMode() {
302
244
  return this.config?.placementMode;
@@ -521,14 +463,17 @@ export class OverlayController extends EventTarget {
521
463
  * @param { OverlayConfig } cfgToAdd
522
464
  */
523
465
  updateConfig(cfgToAdd) {
466
+ // Teardown all previous configs
467
+ this.teardown();
468
+
524
469
  /**
525
470
  * @type {OverlayConfig}
526
471
  * @private
527
472
  */
528
- const prevConfig = this.config;
473
+ this.__prevConfig = this.config;
529
474
 
530
475
  /** @type {OverlayConfig} */
531
- const newConfig = {
476
+ this.config = {
532
477
  ...this._defaultConfig, // our basic ingredients
533
478
  ...this.__sharedConfig, // the initial configured overlayController
534
479
  ...cfgToAdd, // the added config
@@ -544,18 +489,12 @@ export class OverlayController extends EventTarget {
544
489
  },
545
490
  };
546
491
 
547
- const shouldUpdate = !this.__hasSetup || !isEqualConfig(prevConfig, newConfig);
548
- if (!shouldUpdate) return;
549
- // Teardown all previous configs
550
-
551
- this.teardown();
552
-
553
- this.config = newConfig;
554
-
555
492
  /** @private */
556
493
  this.__validateConfiguration(this.config);
557
494
  /** @protected */
558
495
  this._init();
496
+ /** @private */
497
+ this.__elementToFocusAfterHide = undefined;
559
498
 
560
499
  if (!this.#isRegisteredOnManager()) {
561
500
  this.manager.add(this);
@@ -577,7 +516,7 @@ export class OverlayController extends EventTarget {
577
516
  '[OverlayController] You need to provide a .placementMode ("global"|"local")',
578
517
  );
579
518
  }
580
- if (!['global', 'local', 'custom'].includes(newConfig.placementMode)) {
519
+ if (!['global', 'local'].includes(newConfig.placementMode)) {
581
520
  throw new Error(
582
521
  `[OverlayController] "${newConfig.placementMode}" is not a valid .placementMode, use ("global"|"local")`,
583
522
  );
@@ -596,23 +535,14 @@ export class OverlayController extends EventTarget {
596
535
  * @protected
597
536
  */
598
537
  _init() {
599
- if (!this.config.isActivated) return;
600
-
601
- // TODO: should not be behind a flag when we are fully tearing down...
602
- // TODO 2: When we move away from dialog (use popover to paint to top layer)
603
- // and popper.js, (use popover and anchor positioning and popperjs as fallback, but we can put styles on contentNode),
604
- // we dont need to create complex wrappers
605
- // if (!this.__contentHasBeenInitialized) {
606
- this.__initContentDomStructure();
607
- // this.__contentHasBeenInitialized = true;
608
- // }
609
- this.__initVisibility();
538
+ if (!this.__contentHasBeenInitialized) {
539
+ this.__initContentDomStructure();
540
+ this.__contentHasBeenInitialized = true;
541
+ }
610
542
 
611
543
  // Reset all positioning styles (local, c.q. Popper) and classes (global)
612
- if (this.contentWrapperNode !== this.contentNode) {
613
- this.contentWrapperNode.removeAttribute('style');
614
- this.contentWrapperNode.removeAttribute('class');
615
- }
544
+ this.contentWrapperNode.removeAttribute('style');
545
+ this.contentWrapperNode.removeAttribute('class');
616
546
 
617
547
  if (this.placementMode === 'local') {
618
548
  // Lazily load Popper as soon as the first local overlay is used...
@@ -622,27 +552,8 @@ export class OverlayController extends EventTarget {
622
552
  }
623
553
  this.__handleOverlayStyles({ phase: 'init' });
624
554
  this._handleFeatures({ phase: 'init' });
625
-
626
- /** @private */
627
- this.__elementToFocusAfterHide = undefined;
628
-
629
- this.contentNode.dataset.content = '';
630
-
631
- // Use event delegation to listen for clicks on close buttons...
632
- this.contentNode.addEventListener('click', this.#hideOnCloseButtonClick);
633
-
634
- this.__hasSetup = true;
635
555
  }
636
556
 
637
- #hideOnCloseButtonClick = (/** @type {{ target: any; }} */ ev) => {
638
- const isOurCloseButton =
639
- ev.target.hasAttribute('data-close') &&
640
- deepClosest(ev.target, '[data-content]') === this.contentNode;
641
- if (!isOurCloseButton) return;
642
-
643
- this.hide();
644
- };
645
-
646
557
  /**
647
558
  * @param {{ phase: OverlayPhase }} config
648
559
  * @private
@@ -683,108 +594,84 @@ export class OverlayController extends EventTarget {
683
594
  * @private
684
595
  */
685
596
  __initContentDomStructure() {
686
- if (this.placementMode !== 'custom') {
687
- const wrappingDialogElement = document.createElement('dialog');
688
- // We use a dialog for its visual capabilities: it renders to the top layer.
689
- // A11y will depend on the type of overlay and is arranged on contentNode level.
690
- // Also see: https://www.scottohara.me/blog/2019/03/05/open-dialog.html
691
- //
692
- // The role="dialog" is set on the contentNode (or another role), so role="none"
693
- // is valid here, although AXE complains about this setup.
694
- // For now we need to add `ignoredRules: ['aria-allowed-role']` in your AXE tests.
695
- // see: https://lion.js.org/fundamentals/systems/overlays/rationale/#considerations
696
- wrappingDialogElement.setAttribute('role', 'none');
697
- wrappingDialogElement.setAttribute('data-overlay-outer-wrapper', '');
698
- // N.B. position: fixed is needed to escape out of 'overflow: hidden'
699
- // We give a high z-index for non-modal dialogs, so that we at least win from all siblings of our
700
- // parent stacking context
701
- // padding reset so we don't get a weird dialog visual square showing up
702
- wrappingDialogElement.style.cssText = `display:none; z-index: ${this.config.zIndex}; padding: 0;`;
703
- // @ts-ignore - 'custom' is a valid extension of placementMode
704
- if (this.config.placementMode === 'custom') {
705
- // The user should have full freedom to control the content node, so its wrapper nodes should remain neutral.
706
- wrappingDialogElement.style.cssText += `position: static;`;
707
- }
708
- this.__wrappingDialogNode = wrappingDialogElement;
597
+ const wrappingDialogElement = document.createElement('dialog');
598
+ // We use a dialog for its visual capabilities: it renders to the top layer.
599
+ // A11y will depend on the type of overlay and is arranged on contentNode level.
600
+ // Also see: https://www.scottohara.me/blog/2019/03/05/open-dialog.html
601
+ //
602
+ // The role="dialog" is set on the contentNode (or another role), so role="none"
603
+ // is valid here, although AXE complains about this setup.
604
+ // For now we need to add `ignoredRules: ['aria-allowed-role']` in your AXE tests.
605
+ // see: https://lion.js.org/fundamentals/systems/overlays/rationale/#considerations
606
+ wrappingDialogElement.setAttribute('role', 'none');
607
+ wrappingDialogElement.setAttribute('data-overlay-outer-wrapper', '');
608
+ // N.B. position: fixed is needed to escape out of 'overflow: hidden'
609
+ // We give a high z-index for non-modal dialogs, so that we at least win from all siblings of our
610
+ // parent stacking context
611
+ // padding reset so we don't get a weird dialog visual square showing up
612
+ wrappingDialogElement.style.cssText = `display:none; z-index: ${this.config.zIndex}; padding: 0;`;
613
+ this.__wrappingDialogNode = wrappingDialogElement;
709
614
 
710
- /**
711
- * Based on the configuration of the developer, multiple scenarios are accounted for
712
- * A. We already have a contentWrapperNode ()
713
- */
714
- if (!this.config?.contentWrapperNode) {
715
- this.__contentWrapperNode = document.createElement('div');
716
- }
717
- this.contentWrapperNode.setAttribute('data-id', 'content-wrapper');
718
- // 'hack' that makes sure popperjs (that is applied one level lower) works correctly in deeply nested shadow roots
719
- this.contentWrapperNode.style.transform = 'translateZ(0px)';
720
-
721
- this.__rearrangeNodesCleanup = rearrangeNodes({
722
- wrappingDialogNodeL1: wrappingDialogElement,
723
- contentWrapperNodeL2: this.contentWrapperNode,
724
- contentNodeL3: this.contentNode,
725
- // requireConnectedNodes: Boolean(this.config.requireConnectedNodes),
726
- });
727
- wrappingDialogElement.open = true;
615
+ /**
616
+ * Based on the configuration of the developer, multiple scenarios are accounted for
617
+ * A. We already have a contentWrapperNode ()
618
+ */
619
+ if (!this.config?.contentWrapperNode) {
620
+ this.__contentWrapperNode = document.createElement('div');
621
+ }
622
+ this.contentWrapperNode.setAttribute('data-id', 'content-wrapper');
623
+ // 'hack' that makes sure popperjs (that is applied one level lower) works correctly in deeply nested shadow roots
624
+ this.contentWrapperNode.style.transform = 'translateZ(0px)';
728
625
 
729
- if (this.isTooltip) {
730
- // needed to prevent tooltip getting focus in Safari and Firefox
731
- wrappingDialogElement.setAttribute('tabindex', '-1');
732
- }
733
- this.contentWrapperNode.style.zIndex = '1';
734
- if (getComputedStyle(this.contentNode).position === 'absolute') {
735
- // Having a _contWrapperNode and a contentNode with 'position:absolute' results in
736
- // computed height of 0...
737
- this.contentNode.style.position = 'static';
738
- }
626
+ rearrangeNodes({
627
+ wrappingDialogNodeL1: wrappingDialogElement,
628
+ contentWrapperNodeL2: this.contentWrapperNode,
629
+ contentNodeL3: this.contentNode,
630
+ });
631
+ wrappingDialogElement.open = true;
739
632
 
740
- // Here we prevent any interference of the native <dialog> element with the keyboard behavior
741
- // as defined by the OverlayController. This is needed until we can configure `closedby="none"`
742
- // on the native dialog for all browsers: https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/dialog#closedby
743
- const hasClosedBySupport = HTMLDialogElement && 'closedBy' in HTMLDialogElement.prototype;
744
- if (hasClosedBySupport) {
745
- // @ts-ignore - closedBy is a newer property not in all TypeScript versions
746
- wrappingDialogElement.closedBy = 'none';
747
- } else {
748
- wrappingDialogElement.addEventListener(
749
- 'keydown',
750
- (/** @type {* & KeyboardEvent} */ event) => {
751
- if (event.key === 'Escape') {
752
- event.preventDefault();
753
- }
754
- },
755
- );
756
- wrappingDialogElement.addEventListener(
757
- 'keyup',
758
- (/** @type {* & KeyboardEvent} */ event) => {
759
- if (event.key === 'Escape') {
760
- event.preventDefault();
761
- }
762
- },
763
- );
764
- wrappingDialogElement.addEventListener('cancel', event => {
765
- event.stopPropagation();
766
- });
767
- wrappingDialogElement.addEventListener('close', event => {
768
- event.stopPropagation();
769
- });
770
- }
771
- } else {
772
- // quick hack to make none-popper/global flows work...
773
- this.__contentWrapperNode = this.contentNode;
774
- this.__wrappingDialogNode = this.contentNode;
633
+ if (this.isTooltip) {
634
+ // needed to prevent tooltip getting focus in Safari and Firefox
635
+ wrappingDialogElement.setAttribute('tabindex', '-1');
775
636
  }
776
- }
777
637
 
778
- __initVisibility() {
779
- // TODO: allow defaultOpen?
780
- /** @type {HTMLDialogElement} */ (this.__wrappingDialogNode).style.display = 'none';
781
- }
638
+ this.__wrappingDialogNode.style.display = 'none';
639
+ this.contentWrapperNode.style.zIndex = '1';
782
640
 
783
- // Clean up the DOM structure, leaving it as we found it.
784
- // TODO: __teardownContentDomStructure method... use Resettable (rename ro Restorable) found in VisibilitToggleCtrl
785
- __teardownVisibility() {
786
- // TODO: full structure. For now we just reset display prop...
787
- /** @type {HTMLDialogElement} */ (this.__wrappingDialogNode).style.display = '';
641
+ if (getComputedStyle(this.contentNode).position === 'absolute') {
642
+ // Having a _contWrapperNode and a contentNode with 'position:absolute' results in
643
+ // computed height of 0...
644
+ this.contentNode.style.position = 'static';
645
+ }
646
+
647
+ // Here we prevent any interference of the native <dialog> element with the keyboard behavior
648
+ // as defined by the OverlayController. This is needed until we can configure `closedby="none"`
649
+ // on the native dialog for all browsers: https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/dialog#closedby
650
+ const hasClosedBySupport = HTMLDialogElement && 'closedBy' in HTMLDialogElement.prototype;
651
+ if (hasClosedBySupport) {
652
+ // @ts-expect-error
653
+ wrappingDialogElement.closedBy = 'none';
654
+ } else {
655
+ wrappingDialogElement.addEventListener(
656
+ 'keydown',
657
+ (/** @type {* & KeyboardEvent} */ event) => {
658
+ if (event.key === 'Escape') {
659
+ event.preventDefault();
660
+ }
661
+ },
662
+ );
663
+ wrappingDialogElement.addEventListener('keyup', (/** @type {* & KeyboardEvent} */ event) => {
664
+ if (event.key === 'Escape') {
665
+ event.preventDefault();
666
+ }
667
+ });
668
+ wrappingDialogElement.addEventListener('cancel', event => {
669
+ event.stopPropagation();
670
+ });
671
+ wrappingDialogElement.addEventListener('close', event => {
672
+ event.stopPropagation();
673
+ });
674
+ }
788
675
  }
789
676
 
790
677
  /**
@@ -855,7 +742,6 @@ export class OverlayController extends EventTarget {
855
742
  * @private
856
743
  */
857
744
  __storeOriginalAttrs(node, attrs) {
858
- /** @type {Record<string, string | null>} */
859
745
  const attrMap = {};
860
746
  attrs.forEach(attrName => {
861
747
  attrMap[attrName] = node.getAttribute(attrName);
@@ -912,7 +798,6 @@ export class OverlayController extends EventTarget {
912
798
  if ('HTMLDialogElement' in window && this.__wrappingDialogNode instanceof HTMLDialogElement) {
913
799
  this.__wrappingDialogNode.open = true;
914
800
  }
915
-
916
801
  // @ts-ignore
917
802
  this.__wrappingDialogNode.style.display = '';
918
803
  this._keepBodySize({ phase: 'before-show' });
@@ -926,14 +811,6 @@ export class OverlayController extends EventTarget {
926
811
  contentNode: this.contentNode,
927
812
  });
928
813
  }
929
-
930
- // a styling/debug hook for open state
931
- this.contentNode.setAttribute('data-open', '');
932
-
933
- if (this.config.focusContentOnOpen) {
934
- this.contentNode.focus({ preventScroll: true });
935
- }
936
-
937
814
  /** @type {function} */
938
815
  (this._showResolve)();
939
816
  }
@@ -966,7 +843,6 @@ export class OverlayController extends EventTarget {
966
843
  await this.__createPopperInstance();
967
844
  this._popper.forceUpdate();
968
845
  }
969
- // N.B. leave it up to the user if placementMode === 'custom'
970
846
  }
971
847
 
972
848
  /**
@@ -974,7 +850,9 @@ export class OverlayController extends EventTarget {
974
850
  * @protected
975
851
  */
976
852
  _keepBodySize({ phase }) {
977
- if (!this.preventsScroll) return;
853
+ if (!this.preventsScroll) {
854
+ return;
855
+ }
978
856
 
979
857
  this.manager.requestToKeepBodySize({ phase });
980
858
  }
@@ -984,9 +862,6 @@ export class OverlayController extends EventTarget {
984
862
  * @event hide right after the overlay is hidden
985
863
  */
986
864
  async hide() {
987
- // Function like a no-op for dynamic edge cases...
988
- if (!this.config.isActivated) return;
989
-
990
865
  this._hideComplete = new Promise(resolve => {
991
866
  this._hideResolve = resolve;
992
867
  });
@@ -1019,6 +894,7 @@ export class OverlayController extends EventTarget {
1019
894
  if ('HTMLDialogElement' in window && this.__wrappingDialogNode instanceof HTMLDialogElement) {
1020
895
  this.__wrappingDialogNode.close();
1021
896
  }
897
+
1022
898
  // @ts-ignore
1023
899
  this.__wrappingDialogNode.style.display = 'none';
1024
900
  this._handleFeatures({ phase: 'hide' });
@@ -1027,8 +903,6 @@ export class OverlayController extends EventTarget {
1027
903
  this._restoreFocus();
1028
904
  }
1029
905
  /** @type {function} */ (this._hideResolve)();
1030
-
1031
- this.contentNode.removeAttribute('data-open');
1032
906
  }
1033
907
 
1034
908
  /**
@@ -1139,53 +1013,23 @@ export class OverlayController extends EventTarget {
1139
1013
  if (this.visibilityTriggerFunction) {
1140
1014
  this._handleVisibilityTriggers({ phase });
1141
1015
  }
1142
- if (this.config.syncChildrenCloseState) {
1143
- this._handleSyncChildrenCloseState({ phase });
1144
- }
1145
- if (this.config.focusContentOnOpen) {
1146
- this._handleFocusContentOnOpen({ phase });
1147
- }
1148
- }
1149
-
1150
- /**
1151
- * @param {{phase: OverlayPhase}} opts
1152
- * @returns {void}
1153
- */
1154
- _handleFocusContentOnOpen({ phase }) {
1155
- if (phase === 'init') {
1156
- this.contentNode?.setAttribute('tabindex', '-1');
1157
- } else if (phase === 'teardown') {
1158
- // TODO: capture initial attr, use Resettable mechanism of VisibilityToggleCtrl in whole Controller
1159
- this.contentNode?.removeAttribute('tabindex');
1160
- }
1161
- }
1162
-
1163
- /**
1164
- * @param {{phase: OverlayPhase}} opts
1165
- * @returns {void}
1166
- */
1167
- _handleSyncChildrenCloseState({ phase }) {
1168
- if (phase !== 'hide') return;
1169
-
1170
- const visibleChildren = this.manager.shownList.filter(
1171
- ctrl => ctrl !== this && deepContains(this.contentNode, ctrl.contentNode),
1172
- );
1173
- visibleChildren.forEach(ctrl => ctrl.hide());
1174
1016
  }
1175
1017
 
1176
1018
  /**
1177
1019
  * @param {{ phase: OverlayPhase }} config
1178
1020
  */
1179
1021
  _handleVisibilityTriggers({ phase }) {
1180
- if (typeof this.visibilityTriggerFunction !== 'function') return;
1181
-
1182
- // Here we initialize the __visibilityTriggerHandler of our invokerNode. It's important that we ONLY do this on init,
1183
- // otherwise we risk not being able to properly clean up listeners...
1184
- if (phase === 'init') {
1185
- this.__visibilityTriggerHandler = this.visibilityTriggerFunction({ controller: this });
1022
+ if (typeof this.visibilityTriggerFunction === 'function') {
1023
+ if (phase === 'init') {
1024
+ this.__visibilityTriggerHandler = this.visibilityTriggerFunction({
1025
+ phase,
1026
+ controller: this,
1027
+ });
1028
+ }
1029
+ if (this.__visibilityTriggerHandler[phase]) {
1030
+ this.__visibilityTriggerHandler[phase]();
1031
+ }
1186
1032
  }
1187
- // Here we run the appropriate lifecycle, if defined in our handler
1188
- this.__visibilityTriggerHandler[phase]?.();
1189
1033
  }
1190
1034
 
1191
1035
  /**
@@ -1342,9 +1186,7 @@ export class OverlayController extends EventTarget {
1342
1186
  if (phase === 'show') {
1343
1187
  this.#handleShiftKeyPress();
1344
1188
  this.#handleFocusInsideDialog();
1345
- // @ts-ignore - HTMLDialogElement methods
1346
1189
  this.__wrappingDialogNode?.close();
1347
- // @ts-ignore - HTMLDialogElement methods
1348
1190
  this.__wrappingDialogNode?.showModal();
1349
1191
  /**
1350
1192
  * At this moment `#handleFocusInsideDialog` should handle the focus.
@@ -1595,7 +1437,6 @@ export class OverlayController extends EventTarget {
1595
1437
  }
1596
1438
 
1597
1439
  teardown() {
1598
- if (!this.__hasSetup) return;
1599
1440
  this.__handleOverlayStyles({ phase: 'teardown' });
1600
1441
  if (this.isShown) {
1601
1442
  this._keepBodySize({ phase: 'teardown' });
@@ -1604,15 +1445,6 @@ export class OverlayController extends EventTarget {
1604
1445
  if (this.#isRegisteredOnManager()) {
1605
1446
  this.manager.remove(this);
1606
1447
  }
1607
-
1608
- this.contentNode?.removeEventListener('click', this.#hideOnCloseButtonClick);
1609
-
1610
- // if (this.config._shouldTeardownDomStructure) {
1611
- this.__rearrangeNodesCleanup?.();
1612
- // }
1613
- this.__teardownVisibility();
1614
-
1615
- this.__hasSetup = false;
1616
1448
  }
1617
1449
 
1618
1450
  /** @private */