@lion/ui 0.20.0-menu-system.0 → 0.20.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 (390) 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 +7 -2
  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-suites/FormatMixin.suite.js +242 -65
  16. package/components/form-core/test-suites/ValidateMixin.suite.js +0 -2
  17. package/components/form-core/test-suites/ValidateMixinFeedbackPart.suite.js +0 -1
  18. package/components/input/test/input-integrations.test.js +3 -2
  19. package/components/input/test/lion-input-integrations.test.js +2 -1
  20. package/components/input-amount/test/lion-input-amount-integrations.test.js +1 -1
  21. package/components/input-amount-dropdown/src/LionInputAmountDropdown.js +22 -4
  22. package/components/input-amount-dropdown/test/lion-input-amount-dropdown-integrations.test.js +22 -0
  23. package/components/input-amount-dropdown/test-suites/LionInputAmountDropdown.suite.js +59 -3
  24. package/components/input-date/test/lion-input-date-integrations.test.js +1 -1
  25. package/components/input-datepicker/src/localizeNamespaceLoader.js +0 -1
  26. package/components/input-datepicker/test/lion-input-datepicker-integrations.test.js +1 -1
  27. package/components/input-datepicker/test/lion-input-datepicker.test.js +19 -9
  28. package/components/input-datepicker/test-suites/LionInputDatepicker.suite.js +35 -0
  29. package/components/input-email/src/LionInputEmail.js +2 -0
  30. package/components/input-email/test/lion-input-email-integrations.test.js +1 -1
  31. package/components/input-email/test/lion-input-email.test.js +6 -0
  32. package/components/input-file/src/validators.js +31 -1
  33. package/components/input-file/test/FileValidators.test.js +31 -0
  34. package/components/input-file/translations/bg.js +1 -0
  35. package/components/input-file/translations/cs.js +1 -0
  36. package/components/input-file/translations/de.js +2 -0
  37. package/components/input-file/translations/en.js +1 -0
  38. package/components/input-file/translations/es.js +1 -0
  39. package/components/input-file/translations/fr.js +1 -0
  40. package/components/input-file/translations/hu.js +1 -0
  41. package/components/input-file/translations/id.js +1 -0
  42. package/components/input-file/translations/it.js +1 -0
  43. package/components/input-file/translations/nl.js +1 -0
  44. package/components/input-file/translations/pl.js +1 -0
  45. package/components/input-file/translations/ro.js +1 -0
  46. package/components/input-file/translations/ru.js +1 -0
  47. package/components/input-file/translations/sk.js +1 -0
  48. package/components/input-file/translations/uk.js +1 -0
  49. package/components/input-file/translations/zh.js +1 -0
  50. package/components/input-iban/test/lion-input-iban-integrations.test.js +1 -1
  51. package/components/input-stepper/test-suites/lion-input-stepper.integration.suite.js +2 -2
  52. package/components/input-tel/src/LionInputTel.js +1 -1
  53. package/components/input-tel/test-suites/LionInputTel.suite.js +7 -0
  54. package/components/localize/test/date/formatDate.test.js +0 -1
  55. package/components/overlays/src/OverlayController.js +110 -278
  56. package/components/overlays/src/OverlayMixin.js +11 -58
  57. package/components/overlays/src/OverlaysManager.js +2 -2
  58. package/components/overlays/src/configurations/visibility-trigger-partials/withHoverInteraction.js +41 -9
  59. package/components/overlays/src/utils/adopt-styles.js +2 -3
  60. package/components/overlays/src/utils/get-focusable-elements.js +0 -4
  61. package/components/overlays/src/utils/is-equal-config.js +6 -10
  62. package/components/overlays/test/OverlayController.test.js +14 -127
  63. package/components/overlays/test/utils-tests/is-equal-config.test.js +1 -1
  64. package/components/overlays/test-suites/OverlayMixin.suite.js +8 -8
  65. package/components/overlays/test-suites/WithHoverInteraction.suite.js +212 -0
  66. package/components/overlays/types/ArrowMixinTypes.ts +1 -3
  67. package/components/overlays/types/OverlayConfig.ts +5 -20
  68. package/components/overlays/types/OverlayMixinTypes.ts +0 -2
  69. package/components/select-rich/test/lion-select-rich.test.js +0 -3
  70. package/components/textarea/test/lion-textarea-integrations.test.js +2 -1
  71. package/components/tooltip/test/lion-tooltip.test.js +9 -1
  72. package/custom-elements.json +18086 -30683
  73. package/dist-types/components/button/src/LionButton.d.ts +0 -1
  74. package/dist-types/components/button/src/LionButton.d.ts.map +1 -1
  75. package/dist-types/components/button/test-suites/LionButton.suite.d.ts.map +1 -1
  76. package/dist-types/components/calendar/src/LionCalendar.d.ts.map +1 -1
  77. package/dist-types/components/calendar/test/lion-calendar.test.d.ts.map +1 -1
  78. package/dist-types/components/calendar/test-suites/LionCalendar.suite.d.ts +5 -0
  79. package/dist-types/components/calendar/test-suites/LionCalendar.suite.d.ts.map +1 -0
  80. package/dist-types/components/combobox/src/LionCombobox.d.ts +1 -1
  81. package/dist-types/components/dialog/src/LionDialog.d.ts +2 -6
  82. package/dist-types/components/dialog/src/LionDialog.d.ts.map +1 -1
  83. package/dist-types/components/form-core/src/FormatMixin.d.ts.map +1 -1
  84. package/dist-types/components/form-core/src/form-group/FormGroupMixin.d.ts.map +1 -1
  85. package/dist-types/components/form-core/src/registration/FormRegistrarMixin.d.ts.map +1 -1
  86. package/dist-types/components/form-core/test-suites/FormatMixin.suite.d.ts +50 -5
  87. package/dist-types/components/form-core/test-suites/FormatMixin.suite.d.ts.map +1 -1
  88. package/dist-types/components/form-core/test-suites/ValidateMixin.suite.d.ts.map +1 -1
  89. package/dist-types/components/form-core/test-suites/ValidateMixinFeedbackPart.suite.d.ts.map +1 -1
  90. package/dist-types/components/icon/src/LionIcon.d.ts +2 -2
  91. package/dist-types/components/input-amount-dropdown/src/LionInputAmountDropdown.d.ts.map +1 -1
  92. package/dist-types/components/input-amount-dropdown/test/lion-input-amount-dropdown-integrations.test.d.ts +2 -0
  93. package/dist-types/components/input-amount-dropdown/test/lion-input-amount-dropdown-integrations.test.d.ts.map +1 -0
  94. package/dist-types/components/input-amount-dropdown/test-suites/LionInputAmountDropdown.suite.d.ts.map +1 -1
  95. package/dist-types/components/input-datepicker/src/LionInputDatepicker.d.ts +1 -1
  96. package/dist-types/components/input-datepicker/src/localizeNamespaceLoader.d.ts.map +1 -1
  97. package/dist-types/components/input-datepicker/test/lion-input-datepicker.test.d.ts.map +1 -1
  98. package/dist-types/components/input-datepicker/test-suites/LionInputDatepicker.suite.d.ts +7 -0
  99. package/dist-types/components/input-datepicker/test-suites/LionInputDatepicker.suite.d.ts.map +1 -0
  100. package/dist-types/components/input-email/src/LionInputEmail.d.ts.map +1 -1
  101. package/dist-types/components/input-file/src/validators.d.ts +11 -0
  102. package/dist-types/components/input-file/src/validators.d.ts.map +1 -1
  103. package/dist-types/components/input-file/translations/bg-BG.d.ts +1 -0
  104. package/dist-types/components/input-file/translations/bg.d.ts +1 -0
  105. package/dist-types/components/input-file/translations/cs-CZ.d.ts +1 -0
  106. package/dist-types/components/input-file/translations/cs.d.ts +1 -0
  107. package/dist-types/components/input-file/translations/de-DE.d.ts +1 -0
  108. package/dist-types/components/input-file/translations/de.d.ts +1 -0
  109. package/dist-types/components/input-file/translations/en-AU.d.ts +1 -0
  110. package/dist-types/components/input-file/translations/en-GB.d.ts +1 -0
  111. package/dist-types/components/input-file/translations/en-PH.d.ts +1 -0
  112. package/dist-types/components/input-file/translations/en-US.d.ts +1 -0
  113. package/dist-types/components/input-file/translations/en.d.ts +1 -0
  114. package/dist-types/components/input-file/translations/es-ES.d.ts +1 -0
  115. package/dist-types/components/input-file/translations/es.d.ts +1 -0
  116. package/dist-types/components/input-file/translations/fr-BE.d.ts +1 -0
  117. package/dist-types/components/input-file/translations/fr-FR.d.ts +1 -0
  118. package/dist-types/components/input-file/translations/fr.d.ts +1 -0
  119. package/dist-types/components/input-file/translations/hu-HU.d.ts +1 -0
  120. package/dist-types/components/input-file/translations/hu.d.ts +1 -0
  121. package/dist-types/components/input-file/translations/id-ID.d.ts +1 -0
  122. package/dist-types/components/input-file/translations/id.d.ts +1 -0
  123. package/dist-types/components/input-file/translations/it-IT.d.ts +1 -0
  124. package/dist-types/components/input-file/translations/it.d.ts +1 -0
  125. package/dist-types/components/input-file/translations/nl-BE.d.ts +1 -0
  126. package/dist-types/components/input-file/translations/nl-NL.d.ts +1 -0
  127. package/dist-types/components/input-file/translations/nl.d.ts +1 -0
  128. package/dist-types/components/input-file/translations/pl-PL.d.ts +1 -0
  129. package/dist-types/components/input-file/translations/pl.d.ts +1 -0
  130. package/dist-types/components/input-file/translations/ro-RO.d.ts +1 -0
  131. package/dist-types/components/input-file/translations/ro.d.ts +1 -0
  132. package/dist-types/components/input-file/translations/ru-RU.d.ts +1 -0
  133. package/dist-types/components/input-file/translations/ru.d.ts +1 -0
  134. package/dist-types/components/input-file/translations/sk-SK.d.ts +1 -0
  135. package/dist-types/components/input-file/translations/sk.d.ts +1 -0
  136. package/dist-types/components/input-file/translations/uk-UA.d.ts +1 -0
  137. package/dist-types/components/input-file/translations/uk.d.ts +1 -0
  138. package/dist-types/components/input-file/translations/zh-CN.d.ts +1 -0
  139. package/dist-types/components/input-file/translations/zh.d.ts +1 -0
  140. package/dist-types/components/input-tel/src/LionInputTel.d.ts.map +1 -1
  141. package/dist-types/components/input-tel/test-suites/LionInputTel.suite.d.ts.map +1 -1
  142. package/dist-types/components/overlays/src/OverlayController.d.ts +12 -24
  143. package/dist-types/components/overlays/src/OverlayController.d.ts.map +1 -1
  144. package/dist-types/components/overlays/src/OverlayMixin.d.ts.map +1 -1
  145. package/dist-types/components/overlays/src/configurations/visibility-trigger-partials/withHoverInteraction.d.ts.map +1 -1
  146. package/dist-types/components/overlays/src/utils/get-focusable-elements.d.ts.map +1 -1
  147. package/dist-types/components/overlays/src/utils/is-equal-config.d.ts.map +1 -1
  148. package/dist-types/components/overlays/test-suites/WithHoverInteraction.suite.d.ts +17 -0
  149. package/dist-types/components/overlays/test-suites/WithHoverInteraction.suite.d.ts.map +1 -0
  150. package/dist-types/components/overlays/types/ArrowMixinTypes.d.ts.map +1 -1
  151. package/dist-types/components/overlays/types/OverlayConfig.d.ts +2 -12
  152. package/dist-types/components/overlays/types/OverlayConfig.d.ts.map +1 -1
  153. package/dist-types/components/overlays/types/OverlayMixinTypes.d.ts +0 -1
  154. package/dist-types/components/overlays/types/OverlayMixinTypes.d.ts.map +1 -1
  155. package/dist-types/components/select-rich/src/LionSelectRich.d.ts +3 -11
  156. package/dist-types/components/select-rich/src/LionSelectRich.d.ts.map +1 -1
  157. package/dist-types/components/tooltip/src/LionTooltip.d.ts +1 -1
  158. package/dist-types/components/tooltip/test/lion-tooltip.test.d.ts.map +1 -1
  159. package/dist-types/exports/calendar-suites.d.ts +2 -0
  160. package/dist-types/exports/calendar-suites.d.ts.map +1 -0
  161. package/dist-types/exports/input-datepicker-suites.d.ts +2 -0
  162. package/dist-types/exports/input-datepicker-suites.d.ts.map +1 -0
  163. package/dist-types/exports/input-file.d.ts +1 -1
  164. package/dist-types/exports/overlays-test-suites.d.ts +1 -0
  165. package/dist-types/exports/overlays.d.ts +0 -3
  166. package/dist-types/exports/overlays.d.ts.map +1 -1
  167. package/dist-types/tsconfig.tsbuildinfo +1 -1
  168. package/docs/components/checkbox-group/overview.md +2 -2
  169. package/docs/components/collapsible/overview.md +1 -1
  170. package/docs/components/combobox/api-table.md +8 -21
  171. package/docs/components/combobox/overview.md +1 -1
  172. package/docs/components/combobox/use-cases.md +1 -1
  173. package/docs/components/dialog/api-table.md +6 -31
  174. package/docs/components/dialog/overview.md +1 -1
  175. package/docs/components/fieldset/overview.md +5 -5
  176. package/docs/components/form/overview.md +3 -3
  177. package/docs/components/form/use-cases.md +2 -2
  178. package/docs/components/icon/use-cases.md +1 -1
  179. package/docs/components/input/overview.md +1 -1
  180. package/docs/components/input-amount/overview.md +3 -3
  181. package/docs/components/input-amount-dropdown/api-table.md +2 -2
  182. package/docs/components/input-date/overview.md +3 -3
  183. package/docs/components/input-datepicker/api-table.md +4 -21
  184. package/docs/components/input-datepicker/overview.md +5 -5
  185. package/docs/components/input-email/api-table.md +1 -1
  186. package/docs/components/input-email/overview.md +2 -2
  187. package/docs/components/input-file/overview.md +1 -1
  188. package/docs/components/input-file/use-cases.md +18 -0
  189. package/docs/components/input-iban/overview.md +2 -2
  190. package/docs/components/input-range/overview.md +2 -2
  191. package/docs/components/input-stepper/overview.md +1 -1
  192. package/docs/components/input-tel/api-table.md +1 -1
  193. package/docs/components/input-tel/overview.md +1 -1
  194. package/docs/components/input-tel/use-cases.md +6 -6
  195. package/docs/components/input-tel-dropdown/api-table.md +1 -1
  196. package/docs/components/input-tel-dropdown/overview.md +1 -1
  197. package/docs/components/listbox/use-cases.md +1 -1
  198. package/docs/components/radio-group/overview.md +3 -3
  199. package/docs/components/select/use-cases.md +1 -1
  200. package/docs/components/select-rich/api-table.md +5 -21
  201. package/docs/components/select-rich/use-cases.md +2 -2
  202. package/docs/components/tabs/examples.md +1 -1
  203. package/docs/components/tooltip/api-table.md +11 -36
  204. package/docs/components/tooltip/use-cases.md +34 -1
  205. package/docs/fundamentals/index.md +4 -4
  206. package/docs/fundamentals/node-tools/publish-docs/overview.md +3 -3
  207. package/docs/fundamentals/node-tools/rocket-preset-extend-lion-docs/overview.md +2 -2
  208. package/docs/fundamentals/rationales/accessibility.md +1 -1
  209. package/docs/fundamentals/systems/core/SlotMixin.md +1 -1
  210. package/docs/fundamentals/systems/core/overview.md +1 -1
  211. package/docs/fundamentals/systems/form/formatting-and-parsing.md +4 -4
  212. package/docs/fundamentals/systems/form/model-value.md +1 -1
  213. package/docs/fundamentals/systems/form/overview.md +28 -28
  214. package/docs/fundamentals/systems/form/validate.md +2 -2
  215. package/docs/fundamentals/systems/localize/overview.md +4 -4
  216. package/docs/fundamentals/systems/overlays/api-table.md +34 -36
  217. package/docs/fundamentals/systems/overlays/configuration.md +2 -2
  218. package/docs/fundamentals/systems/overlays/overview.md +5 -5
  219. package/docs/fundamentals/systems/overlays/use-cases.md +2 -2
  220. package/docs/fundamentals/tools/helpers/overview.md +1 -1
  221. package/docs/fundamentals/tools/singleton-manager/overview.md +4 -4
  222. package/docs/guides/how-to/create-a-custom-field.md +5 -5
  223. package/docs/guides/how-to/create-a-form.md +4 -4
  224. package/docs/guides/how-to/extend-a-native-input.md +2 -2
  225. package/docs/guides/how-to/index.md +1 -1
  226. package/docs/guides/index.md +8 -8
  227. package/docs/guides/principles/index.md +5 -5
  228. package/docs/guides/principles/styling.md +1 -1
  229. package/exports/calendar-suites.js +1 -0
  230. package/exports/collapsible.js +0 -1
  231. package/exports/input-datepicker-suites.js +1 -0
  232. package/exports/input-file.js +5 -1
  233. package/exports/overlays-test-suites.js +1 -0
  234. package/exports/overlays.js +0 -6
  235. package/input-datepicker-suites.js +1 -0
  236. package/input-file.js +5 -1
  237. package/overlays-test-suites.js +1 -0
  238. package/overlays.js +0 -6
  239. package/package.json +2 -2
  240. package/components/collapsible/src/DisclosureMixin.js +0 -313
  241. package/components/collapsible/test-suites/DisclosureMixin.suite.js +0 -30
  242. package/components/collapsible/types/DisclosureMixinTypes.ts +0 -48
  243. package/components/menu/CHANGELOG.md +0 -37
  244. package/components/menu/README.md +0 -335
  245. package/components/menu/index.js +0 -2
  246. package/components/menu/lion-menu-overlay.js +0 -3
  247. package/components/menu/lion-menu.js +0 -3
  248. package/components/menu/lion-spinbutton.js +0 -3
  249. package/components/menu/lion-toolbar.js +0 -3
  250. package/components/menu/lion-tree.js +0 -3
  251. package/components/menu/package.json +0 -46
  252. package/components/menu/requirements.temp.md +0 -12
  253. package/components/menu/src/InteractiveListMixin.js +0 -840
  254. package/components/menu/src/LionMenu.js +0 -250
  255. package/components/menu/src/LionMenuHybrid.js +0 -46
  256. package/components/menu/src/LionMenuOverlay.js +0 -155
  257. package/components/menu/src/LionSpinbutton.js +0 -213
  258. package/components/menu/src/LionToolbar.js +0 -94
  259. package/components/menu/src/LionTree.js +0 -52
  260. package/components/menu/src/MoreButtonMenuMixin.js +0 -278
  261. package/components/menu/src/MultiLevelListMixin.js +0 -311
  262. package/components/menu/src/utils/isInView.js +0 -26
  263. package/components/menu/src/utils/listItemInteractions.js +0 -124
  264. package/components/menu/test/InteractiveListMixin.test.js +0 -3
  265. package/components/menu/test/MoreButtonMenuMixin.test.js +0 -4
  266. package/components/menu/test/MultiLevelListMixin.test.js +0 -3
  267. package/components/menu/test/lion-menu-hybrid.test.js +0 -3
  268. package/components/menu/test/lion-menu.test.js +0 -11
  269. package/components/menu/test/lion-toolbar.test.js +0 -8
  270. package/components/menu/test/lion-tree.test.js +0 -7
  271. package/components/menu/test-helpers/mimicKeyPress.js +0 -9
  272. package/components/menu/test-suites/InteractiveListMixin.suite.js +0 -454
  273. package/components/menu/test-suites/LionMenu.suite.js +0 -113
  274. package/components/menu/test-suites/LionMenuHybrid.suite.js +0 -583
  275. package/components/menu/test-suites/MoreButtonMenuMixin.suite.js +0 -372
  276. package/components/menu/test-suites/MultiLevelListMixin.suite.js +0 -303
  277. package/components/menu/types/InteractiveListMixinTypes.d.ts +0 -84
  278. package/components/navigation-bar/README.md +0 -1
  279. package/components/navigation-bar/src/LionNavigationBar.js +0 -439
  280. package/components/navigation-bar/src/types.js +0 -41
  281. package/components/overlays/NEXT.md +0 -49
  282. package/components/overlays/test/withHoverInteraction.test.js +0 -90
  283. package/dist-types/components/collapsible/src/DisclosureMixin.d.ts +0 -3
  284. package/dist-types/components/collapsible/src/DisclosureMixin.d.ts.map +0 -1
  285. package/dist-types/components/collapsible/test-suites/DisclosureMixin.suite.d.ts +0 -2
  286. package/dist-types/components/collapsible/test-suites/DisclosureMixin.suite.d.ts.map +0 -1
  287. package/dist-types/components/collapsible/types/DisclosureMixinTypes.d.ts +0 -24
  288. package/dist-types/components/collapsible/types/DisclosureMixinTypes.d.ts.map +0 -1
  289. package/dist-types/components/menu/index.d.ts +0 -3
  290. package/dist-types/components/menu/index.d.ts.map +0 -1
  291. package/dist-types/components/menu/lion-menu-overlay.d.ts +0 -2
  292. package/dist-types/components/menu/lion-menu-overlay.d.ts.map +0 -1
  293. package/dist-types/components/menu/lion-menu.d.ts +0 -2
  294. package/dist-types/components/menu/lion-menu.d.ts.map +0 -1
  295. package/dist-types/components/menu/lion-spinbutton.d.ts +0 -2
  296. package/dist-types/components/menu/lion-spinbutton.d.ts.map +0 -1
  297. package/dist-types/components/menu/lion-toolbar.d.ts +0 -2
  298. package/dist-types/components/menu/lion-toolbar.d.ts.map +0 -1
  299. package/dist-types/components/menu/lion-tree.d.ts +0 -2
  300. package/dist-types/components/menu/lion-tree.d.ts.map +0 -1
  301. package/dist-types/components/menu/src/InteractiveListMixin.d.ts +0 -617
  302. package/dist-types/components/menu/src/InteractiveListMixin.d.ts.map +0 -1
  303. package/dist-types/components/menu/src/LionMenu.d.ts +0 -635
  304. package/dist-types/components/menu/src/LionMenu.d.ts.map +0 -1
  305. package/dist-types/components/menu/src/LionMenuHybrid.d.ts +0 -19
  306. package/dist-types/components/menu/src/LionMenuHybrid.d.ts.map +0 -1
  307. package/dist-types/components/menu/src/LionMenuOverlay.d.ts +0 -1015
  308. package/dist-types/components/menu/src/LionMenuOverlay.d.ts.map +0 -1
  309. package/dist-types/components/menu/src/LionSpinbutton.d.ts +0 -58
  310. package/dist-types/components/menu/src/LionSpinbutton.d.ts.map +0 -1
  311. package/dist-types/components/menu/src/LionToolbar.d.ts +0 -8
  312. package/dist-types/components/menu/src/LionToolbar.d.ts.map +0 -1
  313. package/dist-types/components/menu/src/LionTree.d.ts +0 -447
  314. package/dist-types/components/menu/src/LionTree.d.ts.map +0 -1
  315. package/dist-types/components/menu/src/MoreButtonMenuMixin.d.ts +0 -39
  316. package/dist-types/components/menu/src/MoreButtonMenuMixin.d.ts.map +0 -1
  317. package/dist-types/components/menu/src/MultiLevelListMixin.d.ts +0 -503
  318. package/dist-types/components/menu/src/MultiLevelListMixin.d.ts.map +0 -1
  319. package/dist-types/components/menu/src/utils/isInView.d.ts +0 -9
  320. package/dist-types/components/menu/src/utils/isInView.d.ts.map +0 -1
  321. package/dist-types/components/menu/src/utils/listItemInteractions.d.ts +0 -48
  322. package/dist-types/components/menu/src/utils/listItemInteractions.d.ts.map +0 -1
  323. package/dist-types/components/menu/test/InteractiveListMixin.test.d.ts +0 -2
  324. package/dist-types/components/menu/test/InteractiveListMixin.test.d.ts.map +0 -1
  325. package/dist-types/components/menu/test/MoreButtonMenuMixin.test.d.ts +0 -2
  326. package/dist-types/components/menu/test/MoreButtonMenuMixin.test.d.ts.map +0 -1
  327. package/dist-types/components/menu/test/MultiLevelListMixin.test.d.ts +0 -2
  328. package/dist-types/components/menu/test/MultiLevelListMixin.test.d.ts.map +0 -1
  329. package/dist-types/components/menu/test/lion-menu-hybrid.test.d.ts +0 -2
  330. package/dist-types/components/menu/test/lion-menu-hybrid.test.d.ts.map +0 -1
  331. package/dist-types/components/menu/test/lion-menu.test.d.ts +0 -2
  332. package/dist-types/components/menu/test/lion-menu.test.d.ts.map +0 -1
  333. package/dist-types/components/menu/test/lion-toolbar.test.d.ts +0 -2
  334. package/dist-types/components/menu/test/lion-toolbar.test.d.ts.map +0 -1
  335. package/dist-types/components/menu/test/lion-tree.test.d.ts +0 -2
  336. package/dist-types/components/menu/test/lion-tree.test.d.ts.map +0 -1
  337. package/dist-types/components/menu/test-helpers/mimicKeyPress.d.ts +0 -7
  338. package/dist-types/components/menu/test-helpers/mimicKeyPress.d.ts.map +0 -1
  339. package/dist-types/components/menu/test-suites/InteractiveListMixin.suite.d.ts +0 -14
  340. package/dist-types/components/menu/test-suites/InteractiveListMixin.suite.d.ts.map +0 -1
  341. package/dist-types/components/menu/test-suites/LionMenu.suite.d.ts +0 -9
  342. package/dist-types/components/menu/test-suites/LionMenu.suite.d.ts.map +0 -1
  343. package/dist-types/components/menu/test-suites/LionMenuHybrid.suite.d.ts +0 -5
  344. package/dist-types/components/menu/test-suites/LionMenuHybrid.suite.d.ts.map +0 -1
  345. package/dist-types/components/menu/test-suites/MoreButtonMenuMixin.suite.d.ts +0 -14
  346. package/dist-types/components/menu/test-suites/MoreButtonMenuMixin.suite.d.ts.map +0 -1
  347. package/dist-types/components/menu/test-suites/MultiLevelListMixin.suite.d.ts +0 -11
  348. package/dist-types/components/menu/test-suites/MultiLevelListMixin.suite.d.ts.map +0 -1
  349. package/dist-types/components/navigation-bar/src/LionNavigationBar.d.ts +0 -238
  350. package/dist-types/components/navigation-bar/src/LionNavigationBar.d.ts.map +0 -1
  351. package/dist-types/components/navigation-bar/src/types.d.ts +0 -85
  352. package/dist-types/components/navigation-bar/src/types.d.ts.map +0 -1
  353. package/dist-types/components/overlays/test/withHoverInteraction.test.d.ts +0 -2
  354. package/dist-types/components/overlays/test/withHoverInteraction.test.d.ts.map +0 -1
  355. package/dist-types/exports/define/lion-item.d.ts +0 -2
  356. package/dist-types/exports/define/lion-item.d.ts.map +0 -1
  357. package/dist-types/exports/define/lion-menu-overlay.d.ts +0 -2
  358. package/dist-types/exports/define/lion-menu-overlay.d.ts.map +0 -1
  359. package/dist-types/exports/define/lion-menu.d.ts +0 -2
  360. package/dist-types/exports/define/lion-menu.d.ts.map +0 -1
  361. package/dist-types/exports/define/lion-navigation-bar.d.ts +0 -2
  362. package/dist-types/exports/define/lion-navigation-bar.d.ts.map +0 -1
  363. package/dist-types/exports/define/lion-toolbar.d.ts +0 -2
  364. package/dist-types/exports/define/lion-toolbar.d.ts.map +0 -1
  365. package/dist-types/exports/define/lion-tree.d.ts +0 -2
  366. package/dist-types/exports/define/lion-tree.d.ts.map +0 -1
  367. package/dist-types/exports/menu-test-suites.d.ts +0 -4
  368. package/dist-types/exports/menu-test-suites.d.ts.map +0 -1
  369. package/dist-types/exports/menu.d.ts +0 -7
  370. package/dist-types/exports/menu.d.ts.map +0 -1
  371. package/dist-types/exports/navigation-bar.d.ts +0 -2
  372. package/dist-types/exports/navigation-bar.d.ts.map +0 -1
  373. package/docs/components/menu/api-table.md +0 -460
  374. package/docs/components/menu/applyMenuDemoStyles.js +0 -173
  375. package/docs/components/menu/extensions.md +0 -262
  376. package/docs/components/menu/index.md +0 -13
  377. package/docs/components/menu/overview.md +0 -422
  378. package/docs/components/menu/use-cases.md +0 -77
  379. package/exports/define/lion-item.js +0 -3
  380. package/exports/define/lion-menu-overlay.js +0 -3
  381. package/exports/define/lion-menu.js +0 -3
  382. package/exports/define/lion-navigation-bar.js +0 -3
  383. package/exports/define/lion-toolbar.js +0 -3
  384. package/exports/define/lion-tree.js +0 -3
  385. package/exports/menu-test-suites.js +0 -4
  386. package/exports/menu.js +0 -7
  387. package/exports/navigation-bar.js +0 -1
  388. package/menu-test-suites.js +0 -4
  389. package/menu.js +0 -7
  390. package/navigation-bar.js +0 -1
@@ -33,7 +33,10 @@ export const OverlayMixinImplementation = superclass => {
33
33
  class OverlayMixin extends superclass {
34
34
  static get properties() {
35
35
  return {
36
- opened: { type: Boolean, reflect: true },
36
+ opened: {
37
+ type: Boolean,
38
+ reflect: true,
39
+ },
37
40
  };
38
41
  }
39
42
 
@@ -59,17 +62,6 @@ export const OverlayMixinImplementation = superclass => {
59
62
  this.open = this.open.bind(this);
60
63
  /** @type {EventListener} */
61
64
  this.close = this.close.bind(this);
62
-
63
- // // By default, we go for disclosure behavior
64
- // // TODO: in the future, bring disclosure behavior to a controller (and therefore directive).
65
- // // Take inspiration from VisibilityToggleCtrl of portal elements
66
- // /**
67
- // * Terminology aligned with https://open-ui.org/components/openable.explainer/
68
- // * @type {'disclosure'|'overlay'}
69
- // */
70
- // this.openableMode = 'disclosure';
71
-
72
- // allow hybrid disclosure/overlay components
73
65
  }
74
66
 
75
67
  get config() {
@@ -78,7 +70,6 @@ export const OverlayMixinImplementation = superclass => {
78
70
 
79
71
  /** @param {OverlayConfig} value */
80
72
  set config(value) {
81
- // TODO: built-in in overlayCtrl now... delete here
82
73
  const shouldUpdate = !isEqualConfig(this.config, value);
83
74
 
84
75
  if (this._overlayCtrl && shouldUpdate) {
@@ -170,8 +161,6 @@ export const OverlayMixinImplementation = superclass => {
170
161
  */
171
162
  // eslint-disable-next-line class-methods-use-this
172
163
  _setupOpenCloseListeners() {
173
- // Keeps the close-overlay event private for the controller.
174
- // (we already have )
175
164
  /**
176
165
  * @param {{ stopPropagation: () => void; }} ev
177
166
  */
@@ -229,11 +218,11 @@ export const OverlayMixinImplementation = superclass => {
229
218
  // @ts-expect-error
230
219
  static enabledWarnings = super.enabledWarnings?.filter(w => w !== 'change-in-update') || [];
231
220
 
232
- // get _overlayInvokerNode() {
233
- // return /** @type {HTMLElement | undefined} */ (
234
- // Array.from(this.children).find(child => child.slot === 'invoker')
235
- // );
236
- // }
221
+ get _overlayInvokerNode() {
222
+ return /** @type {HTMLElement | undefined} */ (
223
+ Array.from(this.children).find(child => child.slot === 'invoker')
224
+ );
225
+ }
237
226
 
238
227
  /**
239
228
  * @overridable
@@ -267,46 +256,13 @@ export const OverlayMixinImplementation = superclass => {
267
256
  );
268
257
  }
269
258
 
270
- /**
271
- * @param {Element} focusableElOrWrapper
272
- * @returns {Element|null}
273
- */
274
- static _getFocusableInvokerEl(focusableElOrWrapper) {
275
- // return focusableElOrWrapper;
276
- return (
277
- focusableElOrWrapper &&
278
- (focusableElOrWrapper.hasAttribute('tabindex') || focusableElOrWrapper.tagName === 'BUTTON'
279
- ? focusableElOrWrapper
280
- : focusableElOrWrapper.querySelector('[role=button], button'))
281
- );
282
- }
283
-
284
- get _overlayInvokerNode() {
285
- const ctor = /** @type {typeof OverlayMixin} */ (this.constructor);
286
- if (!this.__invokerNode) {
287
- const slottedNode = Array.from(this.children).find(child => child.slot === 'invoker');
288
- if (slottedNode) {
289
- this.__invokerNode = ctor._getFocusableInvokerEl(slottedNode);
290
- } else {
291
- // Look for preceeding sibling with [data-invoker] attribute, and try to find a focusable element in it (either itself or a child)
292
- this.__invokerNode =
293
- this.previousElementSibling?.hasAttribute('data-invoker') &&
294
- ctor._getFocusableInvokerEl(this.previousElementSibling);
295
- }
296
- }
297
- return this.__invokerNode;
298
- }
299
-
300
259
  /** @protected */
301
260
  _setupOverlayCtrl() {
302
261
  if (this.#hasSetup) return;
303
-
304
- const invokerNode = this._overlayInvokerNode;
305
-
306
262
  const config = {
307
263
  contentNode: this._overlayContentNode,
308
264
  contentWrapperNode: this._overlayContentWrapperNode,
309
- invokerNode: invokerNode && invokerNode instanceof HTMLElement ? invokerNode : undefined,
265
+ invokerNode: this._overlayInvokerNode,
310
266
  referenceNode: this._overlayReferenceNode,
311
267
  backdropNode: this._overlayBackdropNode,
312
268
  };
@@ -326,8 +282,6 @@ export const OverlayMixinImplementation = superclass => {
326
282
 
327
283
  /** @protected */
328
284
  _teardownOverlayCtrl() {
329
- // Make sure that dynamic behavior (e.g. responsive) is possible by allowing multiple setups and teardowns of the overlay controller.
330
- this.#hasSetup = false;
331
285
  if (!this._overlayCtrl) return;
332
286
 
333
287
  this._teardownOpenCloseListeners();
@@ -480,7 +434,6 @@ export const OverlayMixinImplementation = superclass => {
480
434
  for (const postProcessor of overlayMixinPostProcessors) {
481
435
  postProcessor(OverlayMixin);
482
436
  }
483
- // @ts-ignore https://github.com/microsoft/TypeScript/issues/36821#issuecomment-588375051
484
- return OverlayMixin;
437
+ return /** @type {* & OverlayMixin} */ (OverlayMixin);
485
438
  };
486
439
  export const OverlayMixin = dedupeMixin(OverlayMixinImplementation);
@@ -209,9 +209,9 @@ export class OverlaysManager {
209
209
  const newMarginBottom = this.__bodySizeVars.marginBottom + scrollbarHeight;
210
210
  // @ts-expect-error [external]: CSS not yet typed
211
211
  if (window.CSS?.number && document.body.attributeStyleMap?.set) {
212
- // @ts-ignore - CSS Typed OM not fully typed
212
+ // @ts-ignore
213
213
  document.body.attributeStyleMap.set('margin-right', CSS.px(newMarginRight));
214
- // @ts-ignore - CSS Typed OM not fully typed
214
+ // @ts-ignore
215
215
  document.body.attributeStyleMap.set('margin-bottom', CSS.px(newMarginBottom));
216
216
  } else {
217
217
  document.body.style.marginRight = `${newMarginRight}px`;
@@ -37,11 +37,29 @@ export function withHoverInteraction({
37
37
  /** @type {NodeJS.Timeout} */
38
38
  let pendingLongpressTimeout;
39
39
  let longpressCompleted = false;
40
+ // A tap fires pointerdown → pointerup → focusin because the browser moves keyboard focus to
41
+ // the tapped element. We only want focusin to open the tooltip when triggered by keyboard (Tab),
42
+ // not by tap. isLastPointerTouch marks that the preceding pointer event was a touch so the
43
+ // focusin handler can skip it.
44
+ let isLastPointerTouch = false;
45
+ // A tap fires the full mouse compatibility sequence: pointerdown → pointerup → mousedown → mouseup → click.
46
+ // Browsers generate these compatibility events automatically so touch works with mouse-only code.
47
+ // After a longpress the same click fires, which would trigger any click handler on the invoker
48
+ // e.g. opening a dialog alongside the tooltip. We register a capture-phase listener at longpress
49
+ // completion to intercept it, as capture runs before bubble so we stop it regardless of registration order.
50
+ /** @type {((e: Event) => void) | null} */
51
+ let pendingClickSuppressor = null;
40
52
 
41
53
  function resetActive() {
42
54
  isFocused = false;
43
55
  isHovered = false;
44
56
  longpressCompleted = false;
57
+ if (pendingClickSuppressor) {
58
+ controller.invokerNode?.removeEventListener('click', pendingClickSuppressor, {
59
+ capture: true,
60
+ });
61
+ pendingClickSuppressor = null;
62
+ }
45
63
  }
46
64
 
47
65
  /**
@@ -59,17 +77,17 @@ export function withHoverInteraction({
59
77
  /**
60
78
  * @param {Event|PointerEvent} event
61
79
  */
62
- async function handleHoverAndFocus(event) {
80
+ function handleHoverAndFocus(event) {
63
81
  const { type } = event;
64
82
  isFocused = type === 'focusout' ? false : isFocused || type === 'focusin';
65
83
  isHovered = type === 'mouseleave' ? false : isHovered || type === 'mouseenter';
66
- // On touch devices, only open on keyboard-triggered focus, not tap-triggered focus
67
- if (
68
- !isHoverSupported &&
69
- type === 'focusin' &&
70
- !controller.invokerNode?.matches(':focus-visible')
71
- )
72
- return;
84
+ if (!isHoverSupported && type === 'focusin') {
85
+ if (isLastPointerTouch) {
86
+ isLastPointerTouch = false;
87
+ return;
88
+ }
89
+ if (!controller.invokerNode?.matches(':focus-visible')) return;
90
+ }
73
91
  const shouldOpen = isFocused || isHovered;
74
92
  openClose({ shouldOpen, openTimeout: delayIn, closeTimeout: delayOut });
75
93
  }
@@ -80,15 +98,23 @@ export function withHoverInteraction({
80
98
  }
81
99
 
82
100
  /** @param {PointerEvent} event */
83
- async function handleLongpress(event) {
101
+ function handleLongpress(event) {
84
102
  clearTimeout(pendingLongpressTimeout);
85
103
  if (event.pointerType !== 'touch') return;
86
104
  const { type } = event;
87
105
 
88
106
  if (type === 'pointerdown') {
89
107
  longpressCompleted = false;
108
+ isLastPointerTouch = true;
90
109
  pendingLongpressTimeout = setTimeout(() => {
91
110
  longpressCompleted = true;
111
+ // Intercept the compatibility click the browser generates at the end of the touch sequence.
112
+ // Capture phase ensures we run before any bubble-phase handler (e.g. a dialog opener).
113
+ pendingClickSuppressor = e => e.stopImmediatePropagation();
114
+ controller.invokerNode?.addEventListener('click', pendingClickSuppressor, {
115
+ once: true, // auto-removes after first click
116
+ capture: true,
117
+ });
92
118
  openClose({ shouldOpen: true });
93
119
  }, longpressDuration);
94
120
  } else {
@@ -140,6 +166,12 @@ export function withHoverInteraction({
140
166
  controller.invokerNode?.removeEventListener('pointerdown', handleLongpress);
141
167
  controller.invokerNode?.removeEventListener('pointerup', handleLongpress);
142
168
  controller.invokerNode?.removeEventListener('pointerleave', handleLongpress);
169
+ if (pendingClickSuppressor) {
170
+ controller.invokerNode?.removeEventListener('click', pendingClickSuppressor, {
171
+ capture: true,
172
+ });
173
+ pendingClickSuppressor = null;
174
+ }
143
175
  }
144
176
  },
145
177
  };
@@ -56,8 +56,7 @@ function adoptStyleWhenAdoptedStylesheetsNotSupported(
56
56
  const styleEl = document.createElement('style');
57
57
  // keep notation, so it's not renamed in minification/build
58
58
  // eslint-disable-next-line dot-notation
59
- // @ts-ignore - litNonce is a custom property
60
- const nonce = window.litNonce;
59
+ const nonce = window['litNonce'];
61
60
  if (nonce !== undefined) {
62
61
  styleEl.setAttribute('nonce', nonce);
63
62
  }
@@ -125,7 +124,7 @@ export function adoptStyle(renderRoot, style, { teardown = false } = {}) {
125
124
  if (!teardown) {
126
125
  // @ts-ignore
127
126
  // eslint-disable-next-line no-param-reassign
128
- renderRoot.adoptedStyleSheets = [...(renderRoot.adoptedStyleSheets || []), sheet];
127
+ renderRoot.adoptedStyleSheets = [...renderRoot.adoptedStyleSheets, sheet];
129
128
  } else if (renderRoot.adoptedStyleSheets.includes(sheet)) {
130
129
  // @ts-ignore
131
130
  // eslint-disable-next-line no-param-reassign
@@ -8,7 +8,6 @@ import { isVisible } from './is-visible.js';
8
8
  import { sortByTabIndex } from './sort-by-tabindex.js';
9
9
 
10
10
  // IE11 supports matches as 'msMatchesSelector'
11
- /** @type {'matches' | 'msMatchesSelector'} */
12
11
  const matchesFunc = 'matches' in Element.prototype ? 'matches' : 'msMatchesSelector';
13
12
 
14
13
  /**
@@ -17,14 +16,11 @@ const matchesFunc = 'matches' in Element.prototype ? 'matches' : 'msMatchesSelec
17
16
  */
18
17
  function isFocusable(element) {
19
18
  // Elements that cannot be focused if they have [disabled] attribute.
20
- // @ts-ignore - msMatchesSelector is legacy
21
19
  if (element[matchesFunc]('input, select, textarea, button, object')) {
22
- // @ts-ignore
23
20
  return element[matchesFunc](':not([disabled])');
24
21
  }
25
22
 
26
23
  // Elements that can be focused even if they have [disabled] attribute.
27
- // @ts-ignore
28
24
  return element[matchesFunc]('a[href], area[href], iframe, [tabindex], [contentEditable]');
29
25
  }
30
26
 
@@ -12,17 +12,13 @@
12
12
  */
13
13
  export function isEqualConfig(a, b) {
14
14
  if (typeof a !== 'object' || typeof b !== 'object' || a === null || b === null) {
15
- if (typeof a === 'function' && typeof b === 'function') {
16
- return /** @type {Function} */ (a).toString() === /** @type {Function} */ (b).toString();
17
- }
18
15
  return a === b;
19
16
  }
20
- if (a instanceof Node && b instanceof Node) {
21
- return a === b;
17
+ const aProps = Object.keys(a);
18
+ const bProps = Object.keys(b);
19
+ if (aProps.length !== bProps.length) {
20
+ return false;
22
21
  }
23
-
24
- return Array.from(new Set([...Object.keys(a), ...Object.keys(b)])).every(prop =>
25
- // @ts-ignore - dynamic property access
26
- isEqualConfig(a[prop], b[prop], prop),
27
- );
22
+ const isEqual = /** @param {string} prop */ prop => isEqualConfig(a[prop], b[prop]);
23
+ return aProps.every(isEqual);
28
24
  }
@@ -115,35 +115,26 @@ const withLocalTestConfig = () =>
115
115
  */
116
116
  async function createNestedEscControllers(parentContent) {
117
117
  const childContent = /** @type {HTMLDivElement} */ (parentContent.querySelector('div[id]'));
118
+ // Assert valid fixure
119
+ const isValidFixture =
120
+ (parentContent.id.startsWith('parent-overlay--hidesOnEsc') ||
121
+ parentContent.id.startsWith('parent-overlay--hidesOnOutsideEsc')) &&
122
+ (childContent.id.startsWith('child-overlay--hidesOnEsc') ||
123
+ childContent.id.startsWith('child-overlay--hidesOnOutsideEsc'));
124
+ if (!isValidFixture) {
125
+ throw new Error('Provide a valid fixture');
126
+ }
118
127
 
119
128
  if (parentContent.hasAttribute('data-convert-to-shadow-root')) {
120
129
  const shadowRootParent = parentContent.attachShadow({ mode: 'open' });
121
130
  shadowRootParent.appendChild(childContent);
122
131
  }
123
132
 
124
- const parentConfig = {};
125
- const childConfig = {};
126
-
127
133
  const parentHasOutsideOnEsc = parentContent.id.startsWith('parent-overlay--hidesOnOutsideEsc');
128
134
  const childHasOutsideOnEsc = childContent.id.startsWith('child-overlay--hidesOnOutsideEsc');
129
135
 
130
- if (parentHasOutsideOnEsc) {
131
- parentConfig.hidesOnOutsideEsc = true;
132
- } else {
133
- parentConfig.hidesOnEsc = true;
134
- }
135
- if (childHasOutsideOnEsc) {
136
- childConfig.hidesOnOutsideEsc = true;
137
- } else {
138
- childConfig.hidesOnEsc = true;
139
- }
140
-
141
- const parentHasSyncChildrenCloseState =
142
- parentContent.dataset.syncChildrenCloseState !== undefined;
143
-
144
- if (parentHasSyncChildrenCloseState) {
145
- parentConfig.syncChildrenCloseState = true;
146
- }
136
+ const parentConfig = parentHasOutsideOnEsc ? { hidesOnOutsideEsc: true } : { hidesOnEsc: true };
137
+ const childConfig = childHasOutsideOnEsc ? { hidesOnOutsideEsc: true } : { hidesOnEsc: true };
147
138
 
148
139
  const parentOverlay = new OverlayController({
149
140
  ...withGlobalTestConfig(),
@@ -292,9 +283,8 @@ describe('OverlayController', () => {
292
283
  contentNode,
293
284
  });
294
285
  };
295
-
296
286
  expect(createOverlayController).to.throw(
297
- '[OverlayController] Could not find a render target, makes sure contentNode has a parent element (or contentWrapperNode is connected)',
287
+ '[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.',
298
288
  );
299
289
  });
300
290
 
@@ -356,21 +346,6 @@ describe('OverlayController', () => {
356
346
  await ctrl.hide();
357
347
  expect(ctrl.isShown).to.be.false;
358
348
  });
359
-
360
- // it('cleans up the dom structure it created', async () => {
361
- // const contentNode = /** @type {HTMLElement} */ (fixtureSync(html`<div>my content</div>`));
362
- // const ctrl = new OverlayController({
363
- // placementMode: 'global',
364
- // contentNode,
365
- // });
366
- // await ctrl.show();
367
- // expect(ctrl.contentWrapperNode).to.exist;
368
- // expect(ctrl.__wrappingDialogNode).to.exist;
369
-
370
- // await ctrl.teardown();
371
- // expect(ctrl.contentWrapperNode).to.not.exist;
372
- // expect(ctrl.__wrappingDialogNode).to.not.exist;
373
- // });
374
349
  });
375
350
 
376
351
  describe('Node Configuration', () => {
@@ -428,7 +403,7 @@ describe('OverlayController', () => {
428
403
  { ignoreAttributes: ['closedby'] },
429
404
  );
430
405
 
431
- expect(el).lightDom.to.equal(`<div data-content="" slot="content">projected</div>`);
406
+ expect(el).lightDom.to.equal(`<div slot="content">projected</div>`);
432
407
  });
433
408
  });
434
409
 
@@ -450,7 +425,7 @@ describe('OverlayController', () => {
450
425
  `
451
426
  <dialog data-overlay-outer-wrapper="" open="" role="none" style="${wrappingDialogNodeStyle}">
452
427
  <div data-id="content-wrapper">
453
- <div data-content="" id="content">non projected</div>
428
+ <div id="content">non projected</div>
454
429
  </div>
455
430
  </dialog>
456
431
  `,
@@ -645,7 +620,6 @@ describe('OverlayController', () => {
645
620
  });
646
621
  });
647
622
 
648
- // TODO: make features modular (so they can be treeshaken) and test their lifecycle within this desrcibe
649
623
  describe('Feature Configuration', () => {
650
624
  describe('trapsKeyboardFocus', () => {
651
625
  it('focuses the overlay on show', async () => {
@@ -1014,7 +988,6 @@ describe('OverlayController', () => {
1014
988
  });
1015
989
  });
1016
990
  });
1017
-
1018
991
  describe('hidesOnOutsideClick', () => {
1019
992
  it('hides on outside click', async () => {
1020
993
  const contentNode = /** @type {HTMLElement} */ (await fixture('<div>Content</div>'));
@@ -1735,91 +1708,6 @@ describe('OverlayController', () => {
1735
1708
  expect(ctrl1.hasActiveBackdrop).to.be.true;
1736
1709
  });
1737
1710
  });
1738
-
1739
- describe('focusContentOnOpen', () => {
1740
- it('adds tabindex="-1" to the content node when focusContentOnOpen is true', async () => {
1741
- const ctrl = new OverlayController({
1742
- ...withGlobalTestConfig(),
1743
- isBlocking: false,
1744
- focusContentOnOpen: true,
1745
- });
1746
- const contentNode = /** @type {HTMLElement} */ (await fixture('<div>Content</div>'));
1747
- ctrl.updateConfig({ contentNode });
1748
- await ctrl.show();
1749
- expect(contentNode.getAttribute('tabindex')).to.equal('-1');
1750
- });
1751
-
1752
- it('makes contentNode the root of "next tab flow"', async () => {
1753
- const ctrl = new OverlayController({
1754
- ...withGlobalTestConfig(),
1755
- isBlocking: false,
1756
- focusContentOnOpen: true,
1757
- });
1758
- const contentNode = /** @type {HTMLElement} */ (
1759
- await fixture('<div><button>Button</button></div>')
1760
- );
1761
- ctrl.updateConfig({ contentNode });
1762
- await ctrl.show();
1763
- const button = /** @type {HTMLButtonElement} */ (contentNode.querySelector('button'));
1764
- button.focus();
1765
- expect(isActiveElement(button)).to.be.true;
1766
- });
1767
- });
1768
-
1769
- describe('syncChildrenCloseState', () => {
1770
- it('does not close all children of nested controllers when syncChildrenCloseState is false', async () => {
1771
- const parentContent = /** @type {HTMLDivElement} */ (
1772
- await fixture(
1773
- html` <!-- -->
1774
- <div data-sync-children-close-state id="parent-overlay">
1775
- <div id="child-overlay">we open our child and it will close when parent does</div>
1776
- </div>`,
1777
- )
1778
- );
1779
- const { parentOverlay, childOverlay } = await createNestedEscControllers(parentContent);
1780
- expect(parentOverlay.isShown).to.be.true;
1781
- expect(childOverlay.isShown).to.be.true;
1782
-
1783
- await parentOverlay.hide();
1784
- await childOverlay._hideComplete;
1785
- expect(parentOverlay.isShown).to.be.false;
1786
- expect(childOverlay.isShown).to.be.false;
1787
- });
1788
-
1789
- it('does not close all children of nested controllers when syncChildrenCloseState is false', async () => {
1790
- const parentContent = /** @type {HTMLDivElement} */ (
1791
- await fixture(
1792
- html` <!-- -->
1793
- <div id="parent-overlay">
1794
- <div id="child-overlay">
1795
- we open our child and it will not close when parent does
1796
- </div>
1797
- </div>`,
1798
- )
1799
- );
1800
- const { parentOverlay, childOverlay } = await createNestedEscControllers(parentContent);
1801
- expect(parentOverlay.isShown).to.be.true;
1802
- expect(childOverlay.isShown).to.be.true;
1803
-
1804
- await parentOverlay.hide();
1805
- expect(parentOverlay.isShown).to.be.false;
1806
- expect(childOverlay.isShown).to.be.true;
1807
- });
1808
- });
1809
-
1810
- describe('isActivated', () => {
1811
- it('allows to conditionally disable overlay/openable functionality (for responsive context like nav menus, accordions/collapsibles vs plain headings/content etc.)', async () => {
1812
- const ctrl = new OverlayController({
1813
- ...withGlobalTestConfig(),
1814
- isActivated: false,
1815
- });
1816
- expect(ctrl.__hasSetup).to.be.false;
1817
- ctrl.updateConfig({
1818
- isActivated: true,
1819
- });
1820
- expect(ctrl.__hasSetup).to.be.true;
1821
- });
1822
- });
1823
1711
  });
1824
1712
 
1825
1713
  describe('Show / Hide / Toggle', () => {
@@ -2410,7 +2298,6 @@ describe('OverlayController', () => {
2410
2298
  });
2411
2299
 
2412
2300
  it('should run with scroll prevention', async () => {
2413
- await overlayControllerPreventsScroll.hide();
2414
2301
  await overlayControllerPreventsScroll.show();
2415
2302
 
2416
2303
  expect(
@@ -48,7 +48,7 @@ describe('isEqualConfig()', () => {
48
48
  expect(isEqualConfig({ ...config, isBlocking: true }, config)).eql(false);
49
49
  });
50
50
 
51
- it.skip('regards missing props different from ones with undefined value', () => {
51
+ it('regards missing props different from ones with undefined value', () => {
52
52
  const config = TestConfig();
53
53
  expect(isEqualConfig(config, { ...config, referenceNode: undefined })).eql(false);
54
54
  });
@@ -537,13 +537,13 @@ export function runOverlayMixinSuite({ tagString, tag, suffix = '' }) {
537
537
  it('works with cache directive when reconnected', async () => {
538
538
  class CachingContext extends LitElement {
539
539
  static properties = {
540
- showOverlay: { type: Boolean },
540
+ switched: { type: Boolean },
541
541
  };
542
542
 
543
543
  constructor() {
544
544
  super();
545
545
 
546
- this.showOverlay = true;
546
+ this.switched = false;
547
547
  }
548
548
 
549
549
  get overlayEl() {
@@ -552,12 +552,12 @@ export function runOverlayMixinSuite({ tagString, tag, suffix = '' }) {
552
552
 
553
553
  render() {
554
554
  return html`${cache(
555
- this.showOverlay
556
- ? html`<${tag} id="myOverlay">
555
+ this.switched
556
+ ? html`something else`
557
+ : html`<${tag} id="myOverlay">
557
558
  <div slot="content">content b</div>
558
559
  <button slot="invoker">invoker button b</button>
559
- </${tag}>`
560
- : html`something else`,
560
+ </${tag}>`,
561
561
  )}`;
562
562
  }
563
563
  }
@@ -578,7 +578,7 @@ export function runOverlayMixinSuite({ tagString, tag, suffix = '' }) {
578
578
  // @ts-expect-error [allow-protected] in tests
579
579
  const setupSpy = sinon.spy(el.overlayEl, '_setupOverlayCtrl');
580
580
 
581
- el.showOverlay = false;
581
+ el.switched = true;
582
582
  // render the new content
583
583
  await el.updateComplete;
584
584
  // wait for the teardown to complete
@@ -588,7 +588,7 @@ export function runOverlayMixinSuite({ tagString, tag, suffix = '' }) {
588
588
  expect(teardownSpy.callCount).to.equal(1);
589
589
  expect(setupSpy.callCount).to.equal(0);
590
590
 
591
- el.showOverlay = true;
591
+ el.switched = false;
592
592
  await el.updateComplete;
593
593
  expect(setupSpy.callCount).to.equal(1);
594
594