@lion/ui 0.18.1 → 0.20.0-menu-system.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 (279) hide show
  1. package/collapsible.js +1 -0
  2. package/components/button/src/LionButton.js +4 -0
  3. package/components/button/test-suites/LionButton.suite.js +1 -0
  4. package/components/calendar/src/LionCalendar.js +2 -0
  5. package/components/collapsible/src/DisclosureMixin.js +313 -0
  6. package/components/collapsible/test-suites/DisclosureMixin.suite.js +30 -0
  7. package/components/collapsible/types/DisclosureMixinTypes.ts +48 -0
  8. package/components/combobox/test/lion-combobox.test.js +1 -0
  9. package/components/form-core/src/form-group/FormGroupMixin.js +7 -0
  10. package/components/form-core/src/registration/FormRegistrarMixin.js +11 -0
  11. package/components/form-core/test/FormControlMixin.test.js +1 -0
  12. package/components/form-core/test/validate/Validator.test.js +2 -0
  13. package/components/form-core/test-suites/ValidateMixin.suite.js +2 -0
  14. package/components/form-core/test-suites/ValidateMixinFeedbackPart.suite.js +1 -0
  15. package/components/input-amount-dropdown/src/LionInputAmountDropdown.js +6 -4
  16. package/components/input-amount-dropdown/test/LionInputAmountDropdown.test.js +20 -1
  17. package/components/input-amount-dropdown/test-suites/LionInputAmountDropdown.suite.js +24 -0
  18. package/components/input-datepicker/src/localizeNamespaceLoader.js +1 -0
  19. package/components/input-datepicker/test/lion-input-datepicker.test.js +5 -6
  20. package/components/localize/test/date/formatDate.test.js +1 -0
  21. package/components/menu/CHANGELOG.md +37 -0
  22. package/components/menu/README.md +335 -0
  23. package/components/menu/index.js +2 -0
  24. package/components/menu/lion-menu-overlay.js +3 -0
  25. package/components/menu/lion-menu.js +3 -0
  26. package/components/menu/lion-spinbutton.js +3 -0
  27. package/components/menu/lion-toolbar.js +3 -0
  28. package/components/menu/lion-tree.js +3 -0
  29. package/components/menu/package.json +46 -0
  30. package/components/menu/requirements.temp.md +12 -0
  31. package/components/menu/src/InteractiveListMixin.js +840 -0
  32. package/components/menu/src/LionMenu.js +250 -0
  33. package/components/menu/src/LionMenuHybrid.js +46 -0
  34. package/components/menu/src/LionMenuOverlay.js +155 -0
  35. package/components/menu/src/LionSpinbutton.js +213 -0
  36. package/components/menu/src/LionToolbar.js +94 -0
  37. package/components/menu/src/LionTree.js +52 -0
  38. package/components/menu/src/MoreButtonMenuMixin.js +278 -0
  39. package/components/menu/src/MultiLevelListMixin.js +311 -0
  40. package/components/menu/src/utils/isInView.js +26 -0
  41. package/components/menu/src/utils/listItemInteractions.js +124 -0
  42. package/components/menu/test/InteractiveListMixin.test.js +3 -0
  43. package/components/menu/test/MoreButtonMenuMixin.test.js +4 -0
  44. package/components/menu/test/MultiLevelListMixin.test.js +3 -0
  45. package/components/menu/test/lion-menu-hybrid.test.js +3 -0
  46. package/components/menu/test/lion-menu.test.js +11 -0
  47. package/components/menu/test/lion-toolbar.test.js +8 -0
  48. package/components/menu/test/lion-tree.test.js +7 -0
  49. package/components/menu/test-helpers/mimicKeyPress.js +9 -0
  50. package/components/menu/test-suites/InteractiveListMixin.suite.js +454 -0
  51. package/components/menu/test-suites/LionMenu.suite.js +113 -0
  52. package/components/menu/test-suites/LionMenuHybrid.suite.js +583 -0
  53. package/components/menu/test-suites/MoreButtonMenuMixin.suite.js +372 -0
  54. package/components/menu/test-suites/MultiLevelListMixin.suite.js +303 -0
  55. package/components/menu/types/InteractiveListMixinTypes.d.ts +84 -0
  56. package/components/navigation-bar/README.md +1 -0
  57. package/components/navigation-bar/src/LionNavigationBar.js +439 -0
  58. package/components/navigation-bar/src/types.js +41 -0
  59. package/components/overlays/NEXT.md +49 -0
  60. package/components/overlays/src/OverlayController.js +278 -110
  61. package/components/overlays/src/OverlayMixin.js +58 -11
  62. package/components/overlays/src/OverlaysManager.js +2 -2
  63. package/components/overlays/src/configurations/visibility-trigger-partials/withHoverInteraction.js +100 -26
  64. package/components/overlays/src/utils/adopt-styles.js +3 -2
  65. package/components/overlays/src/utils/get-focusable-elements.js +4 -0
  66. package/components/overlays/src/utils/is-equal-config.js +10 -6
  67. package/components/overlays/test/OverlayController.test.js +127 -14
  68. package/components/overlays/test/utils-tests/is-equal-config.test.js +1 -1
  69. package/components/overlays/test/withHoverInteraction.test.js +90 -0
  70. package/components/overlays/test-suites/OverlayMixin.suite.js +8 -8
  71. package/components/overlays/types/ArrowMixinTypes.ts +3 -1
  72. package/components/overlays/types/OverlayConfig.ts +20 -5
  73. package/components/overlays/types/OverlayMixinTypes.ts +2 -0
  74. package/components/select-rich/test/lion-select-rich.test.js +3 -0
  75. package/custom-elements.json +30446 -17381
  76. package/dist-types/components/button/src/LionButton.d.ts +1 -0
  77. package/dist-types/components/button/src/LionButton.d.ts.map +1 -1
  78. package/dist-types/components/button/test-suites/LionButton.suite.d.ts.map +1 -1
  79. package/dist-types/components/calendar/src/LionCalendar.d.ts.map +1 -1
  80. package/dist-types/components/collapsible/src/DisclosureMixin.d.ts +3 -0
  81. package/dist-types/components/collapsible/src/DisclosureMixin.d.ts.map +1 -0
  82. package/dist-types/components/collapsible/test-suites/DisclosureMixin.suite.d.ts +2 -0
  83. package/dist-types/components/collapsible/test-suites/DisclosureMixin.suite.d.ts.map +1 -0
  84. package/dist-types/components/collapsible/types/DisclosureMixinTypes.d.ts +24 -0
  85. package/dist-types/components/collapsible/types/DisclosureMixinTypes.d.ts.map +1 -0
  86. package/dist-types/components/combobox/src/LionCombobox.d.ts +1 -1
  87. package/dist-types/components/dialog/src/LionDialog.d.ts +6 -2
  88. package/dist-types/components/dialog/src/LionDialog.d.ts.map +1 -1
  89. package/dist-types/components/form-core/src/form-group/FormGroupMixin.d.ts.map +1 -1
  90. package/dist-types/components/form-core/src/registration/FormRegistrarMixin.d.ts.map +1 -1
  91. package/dist-types/components/form-core/test-suites/ValidateMixin.suite.d.ts.map +1 -1
  92. package/dist-types/components/form-core/test-suites/ValidateMixinFeedbackPart.suite.d.ts.map +1 -1
  93. package/dist-types/components/input-amount-dropdown/src/LionInputAmountDropdown.d.ts +0 -9
  94. package/dist-types/components/input-amount-dropdown/src/LionInputAmountDropdown.d.ts.map +1 -1
  95. package/dist-types/components/input-amount-dropdown/test/LionInputAmountDropdown.test.d.ts.map +1 -1
  96. package/dist-types/components/input-amount-dropdown/test-suites/LionInputAmountDropdown.suite.d.ts.map +1 -1
  97. package/dist-types/components/input-datepicker/src/LionInputDatepicker.d.ts +1 -1
  98. package/dist-types/components/input-datepicker/src/localizeNamespaceLoader.d.ts.map +1 -1
  99. package/dist-types/components/menu/index.d.ts +3 -0
  100. package/dist-types/components/menu/index.d.ts.map +1 -0
  101. package/dist-types/components/menu/lion-menu-overlay.d.ts +2 -0
  102. package/dist-types/components/menu/lion-menu-overlay.d.ts.map +1 -0
  103. package/dist-types/components/menu/lion-menu.d.ts +2 -0
  104. package/dist-types/components/menu/lion-menu.d.ts.map +1 -0
  105. package/dist-types/components/menu/lion-spinbutton.d.ts +2 -0
  106. package/dist-types/components/menu/lion-spinbutton.d.ts.map +1 -0
  107. package/dist-types/components/menu/lion-toolbar.d.ts +2 -0
  108. package/dist-types/components/menu/lion-toolbar.d.ts.map +1 -0
  109. package/dist-types/components/menu/lion-tree.d.ts +2 -0
  110. package/dist-types/components/menu/lion-tree.d.ts.map +1 -0
  111. package/dist-types/components/menu/src/InteractiveListMixin.d.ts +617 -0
  112. package/dist-types/components/menu/src/InteractiveListMixin.d.ts.map +1 -0
  113. package/dist-types/components/menu/src/LionMenu.d.ts +635 -0
  114. package/dist-types/components/menu/src/LionMenu.d.ts.map +1 -0
  115. package/dist-types/components/menu/src/LionMenuHybrid.d.ts +19 -0
  116. package/dist-types/components/menu/src/LionMenuHybrid.d.ts.map +1 -0
  117. package/dist-types/components/menu/src/LionMenuOverlay.d.ts +1015 -0
  118. package/dist-types/components/menu/src/LionMenuOverlay.d.ts.map +1 -0
  119. package/dist-types/components/menu/src/LionSpinbutton.d.ts +58 -0
  120. package/dist-types/components/menu/src/LionSpinbutton.d.ts.map +1 -0
  121. package/dist-types/components/menu/src/LionToolbar.d.ts +8 -0
  122. package/dist-types/components/menu/src/LionToolbar.d.ts.map +1 -0
  123. package/dist-types/components/menu/src/LionTree.d.ts +447 -0
  124. package/dist-types/components/menu/src/LionTree.d.ts.map +1 -0
  125. package/dist-types/components/menu/src/MoreButtonMenuMixin.d.ts +39 -0
  126. package/dist-types/components/menu/src/MoreButtonMenuMixin.d.ts.map +1 -0
  127. package/dist-types/components/menu/src/MultiLevelListMixin.d.ts +503 -0
  128. package/dist-types/components/menu/src/MultiLevelListMixin.d.ts.map +1 -0
  129. package/dist-types/components/menu/src/utils/isInView.d.ts +9 -0
  130. package/dist-types/components/menu/src/utils/isInView.d.ts.map +1 -0
  131. package/dist-types/components/menu/src/utils/listItemInteractions.d.ts +48 -0
  132. package/dist-types/components/menu/src/utils/listItemInteractions.d.ts.map +1 -0
  133. package/dist-types/components/menu/test/InteractiveListMixin.test.d.ts +2 -0
  134. package/dist-types/components/menu/test/InteractiveListMixin.test.d.ts.map +1 -0
  135. package/dist-types/components/menu/test/MoreButtonMenuMixin.test.d.ts +2 -0
  136. package/dist-types/components/menu/test/MoreButtonMenuMixin.test.d.ts.map +1 -0
  137. package/dist-types/components/menu/test/MultiLevelListMixin.test.d.ts +2 -0
  138. package/dist-types/components/menu/test/MultiLevelListMixin.test.d.ts.map +1 -0
  139. package/dist-types/components/menu/test/lion-menu-hybrid.test.d.ts +2 -0
  140. package/dist-types/components/menu/test/lion-menu-hybrid.test.d.ts.map +1 -0
  141. package/dist-types/components/menu/test/lion-menu.test.d.ts +2 -0
  142. package/dist-types/components/menu/test/lion-menu.test.d.ts.map +1 -0
  143. package/dist-types/components/menu/test/lion-toolbar.test.d.ts +2 -0
  144. package/dist-types/components/menu/test/lion-toolbar.test.d.ts.map +1 -0
  145. package/dist-types/components/menu/test/lion-tree.test.d.ts +2 -0
  146. package/dist-types/components/menu/test/lion-tree.test.d.ts.map +1 -0
  147. package/dist-types/components/menu/test-helpers/mimicKeyPress.d.ts +7 -0
  148. package/dist-types/components/menu/test-helpers/mimicKeyPress.d.ts.map +1 -0
  149. package/dist-types/components/menu/test-suites/InteractiveListMixin.suite.d.ts +14 -0
  150. package/dist-types/components/menu/test-suites/InteractiveListMixin.suite.d.ts.map +1 -0
  151. package/dist-types/components/menu/test-suites/LionMenu.suite.d.ts +9 -0
  152. package/dist-types/components/menu/test-suites/LionMenu.suite.d.ts.map +1 -0
  153. package/dist-types/components/menu/test-suites/LionMenuHybrid.suite.d.ts +5 -0
  154. package/dist-types/components/menu/test-suites/LionMenuHybrid.suite.d.ts.map +1 -0
  155. package/dist-types/components/menu/test-suites/MoreButtonMenuMixin.suite.d.ts +14 -0
  156. package/dist-types/components/menu/test-suites/MoreButtonMenuMixin.suite.d.ts.map +1 -0
  157. package/dist-types/components/menu/test-suites/MultiLevelListMixin.suite.d.ts +11 -0
  158. package/dist-types/components/menu/test-suites/MultiLevelListMixin.suite.d.ts.map +1 -0
  159. package/dist-types/components/navigation-bar/src/LionNavigationBar.d.ts +238 -0
  160. package/dist-types/components/navigation-bar/src/LionNavigationBar.d.ts.map +1 -0
  161. package/dist-types/components/navigation-bar/src/types.d.ts +85 -0
  162. package/dist-types/components/navigation-bar/src/types.d.ts.map +1 -0
  163. package/dist-types/components/overlays/src/OverlayController.d.ts +24 -12
  164. package/dist-types/components/overlays/src/OverlayController.d.ts.map +1 -1
  165. package/dist-types/components/overlays/src/OverlayMixin.d.ts.map +1 -1
  166. package/dist-types/components/overlays/src/configurations/visibility-trigger-partials/withHoverInteraction.d.ts +8 -2
  167. package/dist-types/components/overlays/src/configurations/visibility-trigger-partials/withHoverInteraction.d.ts.map +1 -1
  168. package/dist-types/components/overlays/src/utils/get-focusable-elements.d.ts.map +1 -1
  169. package/dist-types/components/overlays/src/utils/is-equal-config.d.ts.map +1 -1
  170. package/dist-types/components/overlays/test/withHoverInteraction.test.d.ts +2 -0
  171. package/dist-types/components/overlays/test/withHoverInteraction.test.d.ts.map +1 -0
  172. package/dist-types/components/overlays/types/ArrowMixinTypes.d.ts.map +1 -1
  173. package/dist-types/components/overlays/types/OverlayConfig.d.ts +12 -2
  174. package/dist-types/components/overlays/types/OverlayConfig.d.ts.map +1 -1
  175. package/dist-types/components/overlays/types/OverlayMixinTypes.d.ts +1 -0
  176. package/dist-types/components/overlays/types/OverlayMixinTypes.d.ts.map +1 -1
  177. package/dist-types/components/select-rich/src/LionSelectRich.d.ts +11 -3
  178. package/dist-types/components/select-rich/src/LionSelectRich.d.ts.map +1 -1
  179. package/dist-types/components/tooltip/src/LionTooltip.d.ts +1 -1
  180. package/dist-types/exports/define/lion-item.d.ts +2 -0
  181. package/dist-types/exports/define/lion-item.d.ts.map +1 -0
  182. package/dist-types/exports/define/lion-menu-overlay.d.ts +2 -0
  183. package/dist-types/exports/define/lion-menu-overlay.d.ts.map +1 -0
  184. package/dist-types/exports/define/lion-menu.d.ts +2 -0
  185. package/dist-types/exports/define/lion-menu.d.ts.map +1 -0
  186. package/dist-types/exports/define/lion-navigation-bar.d.ts +2 -0
  187. package/dist-types/exports/define/lion-navigation-bar.d.ts.map +1 -0
  188. package/dist-types/exports/define/lion-toolbar.d.ts +2 -0
  189. package/dist-types/exports/define/lion-toolbar.d.ts.map +1 -0
  190. package/dist-types/exports/define/lion-tree.d.ts +2 -0
  191. package/dist-types/exports/define/lion-tree.d.ts.map +1 -0
  192. package/dist-types/exports/menu-test-suites.d.ts +4 -0
  193. package/dist-types/exports/menu-test-suites.d.ts.map +1 -0
  194. package/dist-types/exports/menu.d.ts +7 -0
  195. package/dist-types/exports/menu.d.ts.map +1 -0
  196. package/dist-types/exports/navigation-bar.d.ts +2 -0
  197. package/dist-types/exports/navigation-bar.d.ts.map +1 -0
  198. package/dist-types/exports/overlays.d.ts +3 -0
  199. package/dist-types/exports/overlays.d.ts.map +1 -1
  200. package/dist-types/tsconfig.tsbuildinfo +1 -1
  201. package/docs/components/checkbox-group/overview.md +2 -2
  202. package/docs/components/collapsible/overview.md +1 -1
  203. package/docs/components/combobox/api-table.md +21 -8
  204. package/docs/components/combobox/overview.md +1 -1
  205. package/docs/components/combobox/use-cases.md +1 -1
  206. package/docs/components/dialog/api-table.md +31 -6
  207. package/docs/components/dialog/overview.md +1 -1
  208. package/docs/components/fieldset/overview.md +5 -5
  209. package/docs/components/form/overview.md +3 -3
  210. package/docs/components/form/use-cases.md +2 -2
  211. package/docs/components/icon/use-cases.md +1 -1
  212. package/docs/components/input/overview.md +1 -1
  213. package/docs/components/input-amount/overview.md +3 -3
  214. package/docs/components/input-amount-dropdown/api-table.md +1 -1
  215. package/docs/components/input-date/overview.md +3 -3
  216. package/docs/components/input-datepicker/api-table.md +21 -4
  217. package/docs/components/input-datepicker/overview.md +5 -5
  218. package/docs/components/input-email/overview.md +2 -2
  219. package/docs/components/input-file/overview.md +1 -1
  220. package/docs/components/input-iban/overview.md +2 -2
  221. package/docs/components/input-range/overview.md +2 -2
  222. package/docs/components/input-stepper/overview.md +1 -1
  223. package/docs/components/input-tel/overview.md +1 -1
  224. package/docs/components/input-tel/use-cases.md +6 -6
  225. package/docs/components/input-tel-dropdown/overview.md +1 -1
  226. package/docs/components/listbox/use-cases.md +1 -1
  227. package/docs/components/menu/api-table.md +460 -0
  228. package/docs/components/menu/applyMenuDemoStyles.js +173 -0
  229. package/docs/components/menu/extensions.md +262 -0
  230. package/docs/components/menu/index.md +13 -0
  231. package/docs/components/menu/overview.md +422 -0
  232. package/docs/components/menu/use-cases.md +77 -0
  233. package/docs/components/radio-group/overview.md +3 -3
  234. package/docs/components/select/use-cases.md +1 -1
  235. package/docs/components/select-rich/api-table.md +21 -5
  236. package/docs/components/select-rich/use-cases.md +2 -2
  237. package/docs/components/tabs/examples.md +1 -1
  238. package/docs/components/tooltip/api-table.md +36 -11
  239. package/docs/components/tooltip/use-cases.md +22 -0
  240. package/docs/fundamentals/index.md +4 -4
  241. package/docs/fundamentals/node-tools/publish-docs/overview.md +3 -3
  242. package/docs/fundamentals/node-tools/rocket-preset-extend-lion-docs/overview.md +2 -2
  243. package/docs/fundamentals/rationales/accessibility.md +1 -1
  244. package/docs/fundamentals/systems/core/SlotMixin.md +1 -1
  245. package/docs/fundamentals/systems/core/overview.md +1 -1
  246. package/docs/fundamentals/systems/form/formatting-and-parsing.md +4 -4
  247. package/docs/fundamentals/systems/form/model-value.md +1 -1
  248. package/docs/fundamentals/systems/form/overview.md +28 -28
  249. package/docs/fundamentals/systems/form/validate.md +2 -2
  250. package/docs/fundamentals/systems/localize/overview.md +4 -4
  251. package/docs/fundamentals/systems/overlays/api-table.md +36 -34
  252. package/docs/fundamentals/systems/overlays/configuration.md +2 -2
  253. package/docs/fundamentals/systems/overlays/overview.md +5 -5
  254. package/docs/fundamentals/systems/overlays/use-cases.md +2 -2
  255. package/docs/fundamentals/tools/helpers/overview.md +1 -1
  256. package/docs/fundamentals/tools/singleton-manager/overview.md +4 -4
  257. package/docs/guides/how-to/create-a-custom-field.md +5 -5
  258. package/docs/guides/how-to/create-a-form.md +4 -4
  259. package/docs/guides/how-to/extend-a-native-input.md +2 -2
  260. package/docs/guides/how-to/index.md +1 -1
  261. package/docs/guides/index.md +8 -8
  262. package/docs/guides/principles/index.md +5 -5
  263. package/docs/guides/principles/styling.md +1 -1
  264. package/exports/collapsible.js +1 -0
  265. package/exports/define/lion-item.js +3 -0
  266. package/exports/define/lion-menu-overlay.js +3 -0
  267. package/exports/define/lion-menu.js +3 -0
  268. package/exports/define/lion-navigation-bar.js +3 -0
  269. package/exports/define/lion-toolbar.js +3 -0
  270. package/exports/define/lion-tree.js +3 -0
  271. package/exports/menu-test-suites.js +4 -0
  272. package/exports/menu.js +7 -0
  273. package/exports/navigation-bar.js +1 -0
  274. package/exports/overlays.js +6 -0
  275. package/menu-test-suites.js +4 -0
  276. package/menu.js +7 -0
  277. package/navigation-bar.js +1 -0
  278. package/overlays.js +6 -0
  279. package/package.json +1 -1
@@ -0,0 +1,90 @@
1
+ import { OverlayController } from '@lion/ui/overlays.js';
2
+ import { expect, fixtureSync, html } from '@open-wc/testing';
3
+ import sinon from 'sinon';
4
+ import { withHoverInteraction } from '../src/configurations/visibility-trigger-partials/withHoverInteraction.js';
5
+
6
+ function makeCtrl(opts = {}) {
7
+ return new OverlayController({
8
+ placementMode: 'local',
9
+ contentNode: /** @type {HTMLElement} */ (fixtureSync(html`<div>content</div>`)),
10
+ invokerNode: /** @type {HTMLElement} */ (fixtureSync(html`<button>invoker</button>`)),
11
+ ...withHoverInteraction(opts),
12
+ });
13
+ }
14
+
15
+ describe('withHoverInteraction (isHoverSupported: false)', () => {
16
+ /** @type {sinon.SinonFakeTimers} */
17
+ let clock;
18
+ /** @type {OverlayController} */
19
+ let ctrl;
20
+
21
+ beforeEach(() => {
22
+ clock = sinon.useFakeTimers();
23
+ ctrl = makeCtrl({ isHoverSupported: false });
24
+ });
25
+
26
+ afterEach(() => {
27
+ ctrl.teardown();
28
+ clock.restore();
29
+ });
30
+
31
+ it('opens after holding for longpressDuration (500ms)', async () => {
32
+ ctrl.invokerNode?.dispatchEvent(
33
+ new PointerEvent('pointerdown', { pointerType: 'touch', bubbles: true }),
34
+ );
35
+ clock.runAll();
36
+ await Promise.resolve();
37
+ expect(ctrl.isShown).to.equal(true);
38
+ });
39
+
40
+ it('stays hidden on brief touch: pointerup cancels the timer', () => {
41
+ ctrl.invokerNode?.dispatchEvent(
42
+ new PointerEvent('pointerdown', { pointerType: 'touch', bubbles: true }),
43
+ );
44
+ ctrl.invokerNode?.dispatchEvent(
45
+ new PointerEvent('pointerup', { pointerType: 'touch', bubbles: true }),
46
+ );
47
+ clock.tick(500);
48
+ expect(ctrl.isShown).to.equal(false);
49
+ });
50
+
51
+ it('ignores non-touch pointer events (mouse)', () => {
52
+ ctrl.invokerNode?.dispatchEvent(
53
+ new PointerEvent('pointerdown', { pointerType: 'mouse', bubbles: true }),
54
+ );
55
+ clock.tick(500);
56
+ expect(ctrl.isShown).to.equal(false);
57
+ });
58
+
59
+ it('auto-closes after longpressDuration once press ends', async () => {
60
+ ctrl.invokerNode?.dispatchEvent(
61
+ new PointerEvent('pointerdown', { pointerType: 'touch', bubbles: true }),
62
+ );
63
+ clock.runAll();
64
+ await Promise.resolve();
65
+ expect(ctrl.isShown).to.equal(true);
66
+
67
+ ctrl.invokerNode?.dispatchEvent(
68
+ new PointerEvent('pointerup', { pointerType: 'touch', bubbles: true }),
69
+ );
70
+ await clock.tickAsync(501);
71
+ expect(ctrl.isShown).to.equal(false);
72
+ });
73
+
74
+ it('disables text selection on the invoker on init and restores it on teardown', () => {
75
+ const { invokerNode } = ctrl;
76
+ const getUserSelect = () =>
77
+ invokerNode?.style.getPropertyValue('user-select') ||
78
+ invokerNode?.style.getPropertyValue('-webkit-user-select');
79
+ expect(getUserSelect()).to.equal('none');
80
+
81
+ ctrl.teardown();
82
+ expect(getUserSelect()).to.equal('');
83
+ });
84
+
85
+ it('does not open on tap-triggered focusin', () => {
86
+ ctrl.invokerNode?.dispatchEvent(new Event('focusin', { bubbles: true }));
87
+ clock.tick(300);
88
+ expect(ctrl.isShown).to.equal(false);
89
+ });
90
+ });
@@ -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
- switched: { type: Boolean },
540
+ showOverlay: { type: Boolean },
541
541
  };
542
542
 
543
543
  constructor() {
544
544
  super();
545
545
 
546
- this.switched = false;
546
+ this.showOverlay = true;
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.switched
556
- ? html`something else`
557
- : html`<${tag} id="myOverlay">
555
+ this.showOverlay
556
+ ? html`<${tag} id="myOverlay">
558
557
  <div slot="content">content b</div>
559
558
  <button slot="invoker">invoker button b</button>
560
- </${tag}>`,
559
+ </${tag}>`
560
+ : html`something else`,
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.switched = true;
581
+ el.showOverlay = false;
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.switched = false;
591
+ el.showOverlay = true;
592
592
  await el.updateComplete;
593
593
  expect(setupSpy.callCount).to.equal(1);
594
594
 
@@ -26,7 +26,9 @@ export declare class ArrowHost {
26
26
 
27
27
  protected _defineOverlayConfig(): OverlayConfig;
28
28
 
29
- protected _getPopperArrowConfig(popperConfigToExtendFrom: Partial<PopperOptions>): Partial<PopperOptions>;
29
+ protected _getPopperArrowConfig(
30
+ popperConfigToExtendFrom: Partial<PopperOptions>,
31
+ ): Partial<PopperOptions>;
30
32
 
31
33
  private __setupRepositionCompletePromise(): void;
32
34
 
@@ -21,7 +21,6 @@ export type OverlayPhase =
21
21
  | 'add'
22
22
  | 'remove';
23
23
 
24
-
25
24
  export interface ViewportConfig {
26
25
  placement: ViewportPlacement;
27
26
  }
@@ -97,14 +96,30 @@ export interface OverlayConfig {
97
96
  /** By default, the tooltip content is a 'description' for the invoker (uses aria-describedby) Setting this property to 'label' makes the content function as a label (via aria-labelledby) */
98
97
  invokerRelation?: 'label' | 'description';
99
98
 
100
- /** render a div instead of dialog */
101
- _noDialogEl?: Boolean;
102
-
103
99
  /**
104
100
  * Determines the conditions hiding/showing should be based on. It gets the OverlayController as input and returns an object with
105
101
  * functions with Overlay phases as keys
106
102
  */
107
103
  visibilityTriggerFunction?: Function;
108
- }
109
104
 
105
+ /**
106
+ * Whether the overlay content should receive focus when shown.
107
+ */
108
+ focusContentOnOpen?: boolean;
109
+
110
+ /*
111
+ * By default, we function either as overlay or disclosure. In some cases, this should be dynamically set (think of responsive changes).
112
+ * or it depends on the context (a top level menu is not openable (unless it's a context menu), its children menus are).
113
+ */
114
+ isActivated?: boolean;
115
+
116
+ /**
117
+ * By default, an error is thrown when contentNode is not connected to the DOM.
118
+ * This allows to prepare nodes and later connect them to dom.
119
+ */
120
+ requireConnectedNodes?: boolean;
121
+
122
+ syncChildrenCloseState?: boolean;
110
123
 
124
+ _shouldTeardownDomStructure?: boolean;
125
+ }
@@ -17,6 +17,8 @@ export interface DefineOverlayConfig {
17
17
  }
18
18
 
19
19
  export declare class OverlayHost {
20
+ static _getFocusableInvokerEl(focusableElOrWrapper: Element): Element | null;
21
+
20
22
  opened: Boolean;
21
23
  get config(): Partial<OverlayConfig>;
22
24
  set config(value: Partial<OverlayConfig>);
@@ -832,6 +832,7 @@ describe('lion-select-rich', () => {
832
832
  await waitUntil(isSelectRichRendered);
833
833
  getInvoker()?.click();
834
834
  await waitUntil(isDialogVisible);
835
+ // @ts-ignore - NodeList array access
835
836
  const optionBlue = /** @type { HTMLElement | undefined } */ (
836
837
  wrapperElementShadowRoot?.querySelectorAll('lion-option')
837
838
  )?.[1];
@@ -955,6 +956,7 @@ describe('lion-select-rich', () => {
955
956
  await waitUntil(isSelectRichRendered);
956
957
  getInvoker()?.click();
957
958
  await waitUntil(isDialogVisible);
959
+ // @ts-ignore - NodeList array access
958
960
  const optionBlue = /** @type { HTMLElement | undefined } */ (
959
961
  wrapperElementShadowRoot?.querySelectorAll('lion-option')
960
962
  )?.[1];
@@ -1082,6 +1084,7 @@ describe('lion-select-rich', () => {
1082
1084
  await waitUntil(isSelectRichRendered);
1083
1085
  getInvoker()?.click();
1084
1086
  await waitUntil(isDialogVisible);
1087
+ // @ts-ignore - NodeList array access
1085
1088
  const optionBlue = /** @type { HTMLElement | undefined } */ (
1086
1089
  wrapperElementShadowRoot?.querySelectorAll('lion-option')
1087
1090
  )?.[1];