@lion/ui 0.17.0-menu-system.1 → 0.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (221) hide show
  1. package/collapsible.js +0 -1
  2. package/components/button/src/LionButton.js +0 -4
  3. package/components/button/test-suites/LionButton.suite.js +0 -1
  4. package/components/calendar/src/LionCalendar.js +0 -2
  5. package/components/combobox/test/lion-combobox.test.js +0 -1
  6. package/components/form-core/src/form-group/FormGroupMixin.js +0 -7
  7. package/components/form-core/src/registration/FormRegistrarMixin.js +0 -11
  8. package/components/form-core/test/FormControlMixin.test.js +0 -1
  9. package/components/form-core/test/validate/Validator.test.js +0 -2
  10. package/components/form-core/test-suites/ValidateMixin.suite.js +0 -2
  11. package/components/form-core/test-suites/ValidateMixinFeedbackPart.suite.js +0 -1
  12. package/components/input-datepicker/src/localizeNamespaceLoader.js +0 -1
  13. package/components/input-datepicker/test/lion-input-datepicker.test.js +6 -5
  14. package/components/localize/test/date/formatDate.test.js +0 -1
  15. package/components/overlays/src/OverlayController.js +111 -244
  16. package/components/overlays/src/OverlayMixin.js +11 -58
  17. package/components/overlays/src/OverlaysManager.js +2 -2
  18. package/components/overlays/src/configurations/withDropdownConfig.js +2 -22
  19. package/components/overlays/src/configurations/withPopoverConfig.js +32 -0
  20. package/components/overlays/src/utils/adopt-styles.js +1 -2
  21. package/components/overlays/src/utils/get-focusable-elements.js +0 -4
  22. package/components/overlays/src/utils/is-equal-config.js +6 -10
  23. package/components/overlays/test/OverlayController.test.js +3 -5
  24. package/components/overlays/test/utils-tests/is-equal-config.test.js +1 -1
  25. package/components/overlays/test-suites/OverlayMixin.suite.js +8 -8
  26. package/components/overlays/types/OverlayConfig.ts +5 -16
  27. package/components/select-rich/test/lion-select-rich.test.js +0 -3
  28. package/custom-elements.json +1891 -13818
  29. package/dist-types/components/button/src/LionButton.d.ts +0 -1
  30. package/dist-types/components/button/src/LionButton.d.ts.map +1 -1
  31. package/dist-types/components/button/test-suites/LionButton.suite.d.ts.map +1 -1
  32. package/dist-types/components/calendar/src/LionCalendar.d.ts.map +1 -1
  33. package/dist-types/components/dialog/src/LionDialog.d.ts +1 -3
  34. package/dist-types/components/dialog/src/LionDialog.d.ts.map +1 -1
  35. package/dist-types/components/form-core/src/form-group/FormGroupMixin.d.ts.map +1 -1
  36. package/dist-types/components/form-core/src/registration/FormRegistrarMixin.d.ts.map +1 -1
  37. package/dist-types/components/form-core/test-suites/ValidateMixin.suite.d.ts.map +1 -1
  38. package/dist-types/components/form-core/test-suites/ValidateMixinFeedbackPart.suite.d.ts.map +1 -1
  39. package/dist-types/components/input-datepicker/src/localizeNamespaceLoader.d.ts.map +1 -1
  40. package/dist-types/components/overlays/src/OverlayController.d.ts +13 -9
  41. package/dist-types/components/overlays/src/OverlayController.d.ts.map +1 -1
  42. package/dist-types/components/overlays/src/OverlayMixin.d.ts.map +1 -1
  43. package/dist-types/components/overlays/src/configurations/withDropdownConfig.d.ts +0 -1
  44. package/dist-types/components/overlays/src/configurations/withDropdownConfig.d.ts.map +1 -1
  45. package/dist-types/components/overlays/src/configurations/withPopoverConfig.d.ts +6 -0
  46. package/dist-types/components/overlays/src/configurations/withPopoverConfig.d.ts.map +1 -0
  47. package/dist-types/components/overlays/src/utils/get-focusable-elements.d.ts.map +1 -1
  48. package/dist-types/components/overlays/src/utils/is-equal-config.d.ts.map +1 -1
  49. package/dist-types/components/overlays/types/OverlayConfig.d.ts +2 -10
  50. package/dist-types/components/overlays/types/OverlayConfig.d.ts.map +1 -1
  51. package/dist-types/components/select-rich/src/LionSelectRich.d.ts +2 -8
  52. package/dist-types/components/select-rich/src/LionSelectRich.d.ts.map +1 -1
  53. package/dist-types/exports/overlays.d.ts +1 -3
  54. package/dist-types/exports/overlays.d.ts.map +1 -1
  55. package/dist-types/tsconfig.tsbuildinfo +1 -1
  56. package/docs/components/checkbox-group/overview.md +2 -2
  57. package/docs/components/collapsible/overview.md +1 -1
  58. package/docs/components/combobox/api-table.md +8 -21
  59. package/docs/components/combobox/overview.md +1 -1
  60. package/docs/components/combobox/use-cases.md +1 -1
  61. package/docs/components/dialog/api-table.md +6 -31
  62. package/docs/components/dialog/overview.md +1 -1
  63. package/docs/components/fieldset/overview.md +5 -5
  64. package/docs/components/form/overview.md +3 -3
  65. package/docs/components/form/use-cases.md +2 -2
  66. package/docs/components/icon/use-cases.md +1 -1
  67. package/docs/components/input/overview.md +1 -1
  68. package/docs/components/input-amount/overview.md +3 -3
  69. package/docs/components/input-date/overview.md +3 -3
  70. package/docs/components/input-datepicker/api-table.md +4 -21
  71. package/docs/components/input-datepicker/overview.md +5 -5
  72. package/docs/components/input-email/overview.md +2 -2
  73. package/docs/components/input-file/overview.md +1 -1
  74. package/docs/components/input-iban/overview.md +2 -2
  75. package/docs/components/input-range/overview.md +2 -2
  76. package/docs/components/input-stepper/overview.md +1 -1
  77. package/docs/components/input-tel/overview.md +1 -1
  78. package/docs/components/input-tel/use-cases.md +6 -6
  79. package/docs/components/input-tel-dropdown/overview.md +1 -1
  80. package/docs/components/listbox/use-cases.md +1 -1
  81. package/docs/components/radio-group/overview.md +3 -3
  82. package/docs/components/select/use-cases.md +1 -1
  83. package/docs/components/select-rich/api-table.md +5 -21
  84. package/docs/components/select-rich/use-cases.md +2 -2
  85. package/docs/components/tabs/examples.md +1 -1
  86. package/docs/components/tooltip/api-table.md +11 -36
  87. package/docs/fundamentals/index.md +4 -4
  88. package/docs/fundamentals/node-tools/publish-docs/overview.md +3 -3
  89. package/docs/fundamentals/node-tools/rocket-preset-extend-lion-docs/overview.md +2 -2
  90. package/docs/fundamentals/rationales/accessibility.md +1 -1
  91. package/docs/fundamentals/systems/core/SlotMixin.md +1 -1
  92. package/docs/fundamentals/systems/core/overview.md +1 -1
  93. package/docs/fundamentals/systems/form/formatting-and-parsing.md +4 -4
  94. package/docs/fundamentals/systems/form/model-value.md +1 -1
  95. package/docs/fundamentals/systems/form/overview.md +28 -28
  96. package/docs/fundamentals/systems/form/validate.md +2 -2
  97. package/docs/fundamentals/systems/localize/overview.md +4 -4
  98. package/docs/fundamentals/systems/overlays/api-table.md +34 -34
  99. package/docs/fundamentals/systems/overlays/configuration.md +2 -2
  100. package/docs/fundamentals/systems/overlays/overview.md +5 -5
  101. package/docs/fundamentals/systems/overlays/use-cases.md +2 -2
  102. package/docs/fundamentals/tools/helpers/overview.md +1 -1
  103. package/docs/fundamentals/tools/singleton-manager/overview.md +4 -4
  104. package/docs/guides/how-to/create-a-custom-field.md +5 -5
  105. package/docs/guides/how-to/create-a-form.md +4 -4
  106. package/docs/guides/how-to/extend-a-native-input.md +2 -2
  107. package/docs/guides/how-to/index.md +1 -1
  108. package/docs/guides/index.md +8 -8
  109. package/docs/guides/principles/index.md +5 -5
  110. package/docs/guides/principles/styling.md +1 -1
  111. package/exports/collapsible.js +0 -1
  112. package/exports/overlays.js +1 -6
  113. package/overlays.js +1 -6
  114. package/package.json +1 -1
  115. package/components/collapsible/src/DisclosureMixin.js +0 -313
  116. package/components/collapsible/types/DisclosureMixinTypes.ts +0 -48
  117. package/components/menu/CHANGELOG.md +0 -37
  118. package/components/menu/README.md +0 -335
  119. package/components/menu/index.js +0 -2
  120. package/components/menu/lion-menu-overlay.js +0 -3
  121. package/components/menu/lion-menu.js +0 -3
  122. package/components/menu/lion-spinbutton.js +0 -3
  123. package/components/menu/lion-toolbar.js +0 -3
  124. package/components/menu/lion-tree.js +0 -3
  125. package/components/menu/package.json +0 -46
  126. package/components/menu/requirements.temp.md +0 -12
  127. package/components/menu/src/InteractiveListMixin.js +0 -796
  128. package/components/menu/src/LionMenu.js +0 -250
  129. package/components/menu/src/LionMenuHybrid.js +0 -46
  130. package/components/menu/src/LionMenuOverlay.js +0 -155
  131. package/components/menu/src/LionSpinbutton.js +0 -213
  132. package/components/menu/src/LionToolbar.js +0 -94
  133. package/components/menu/src/LionTree.js +0 -52
  134. package/components/menu/src/MultiLevelListMixin.js +0 -274
  135. package/components/menu/src/utils/isInView.js +0 -26
  136. package/components/menu/src/utils/listItemInteractions.js +0 -104
  137. package/components/menu/src/utils/uuid.js +0 -3
  138. package/components/menu/test/lion-menu.test.js +0 -3
  139. package/components/menu/test-suites/InteractiveListMixin.suite.js +0 -142
  140. package/components/menu/types/InteractiveListMixinTypes.d.ts +0 -82
  141. package/components/navigation-bar/README.md +0 -1
  142. package/components/navigation-bar/src/LionNavigationBar.js +0 -422
  143. package/components/navigation-bar/src/types.js +0 -41
  144. package/components/overlays/NEXT.md +0 -49
  145. package/dist-types/components/collapsible/src/DisclosureMixin.d.ts +0 -3
  146. package/dist-types/components/collapsible/src/DisclosureMixin.d.ts.map +0 -1
  147. package/dist-types/components/collapsible/types/DisclosureMixinTypes.d.ts +0 -24
  148. package/dist-types/components/collapsible/types/DisclosureMixinTypes.d.ts.map +0 -1
  149. package/dist-types/components/menu/index.d.ts +0 -3
  150. package/dist-types/components/menu/index.d.ts.map +0 -1
  151. package/dist-types/components/menu/lion-menu-overlay.d.ts +0 -2
  152. package/dist-types/components/menu/lion-menu-overlay.d.ts.map +0 -1
  153. package/dist-types/components/menu/lion-menu.d.ts +0 -2
  154. package/dist-types/components/menu/lion-menu.d.ts.map +0 -1
  155. package/dist-types/components/menu/lion-spinbutton.d.ts +0 -2
  156. package/dist-types/components/menu/lion-spinbutton.d.ts.map +0 -1
  157. package/dist-types/components/menu/lion-toolbar.d.ts +0 -2
  158. package/dist-types/components/menu/lion-toolbar.d.ts.map +0 -1
  159. package/dist-types/components/menu/lion-tree.d.ts +0 -2
  160. package/dist-types/components/menu/lion-tree.d.ts.map +0 -1
  161. package/dist-types/components/menu/src/InteractiveListMixin.d.ts +0 -611
  162. package/dist-types/components/menu/src/InteractiveListMixin.d.ts.map +0 -1
  163. package/dist-types/components/menu/src/LionMenu.d.ts +0 -563
  164. package/dist-types/components/menu/src/LionMenu.d.ts.map +0 -1
  165. package/dist-types/components/menu/src/LionMenuHybrid.d.ts +0 -19
  166. package/dist-types/components/menu/src/LionMenuHybrid.d.ts.map +0 -1
  167. package/dist-types/components/menu/src/LionMenuOverlay.d.ts +0 -1007
  168. package/dist-types/components/menu/src/LionMenuOverlay.d.ts.map +0 -1
  169. package/dist-types/components/menu/src/LionSpinbutton.d.ts +0 -58
  170. package/dist-types/components/menu/src/LionSpinbutton.d.ts.map +0 -1
  171. package/dist-types/components/menu/src/LionToolbar.d.ts +0 -8
  172. package/dist-types/components/menu/src/LionToolbar.d.ts.map +0 -1
  173. package/dist-types/components/menu/src/LionTree.d.ts +0 -445
  174. package/dist-types/components/menu/src/LionTree.d.ts.map +0 -1
  175. package/dist-types/components/menu/src/MultiLevelListMixin.d.ts +0 -493
  176. package/dist-types/components/menu/src/MultiLevelListMixin.d.ts.map +0 -1
  177. package/dist-types/components/menu/src/utils/isInView.d.ts +0 -9
  178. package/dist-types/components/menu/src/utils/isInView.d.ts.map +0 -1
  179. package/dist-types/components/menu/src/utils/listItemInteractions.d.ts +0 -42
  180. package/dist-types/components/menu/src/utils/listItemInteractions.d.ts.map +0 -1
  181. package/dist-types/components/menu/src/utils/uuid.d.ts +0 -2
  182. package/dist-types/components/menu/src/utils/uuid.d.ts.map +0 -1
  183. package/dist-types/components/menu/test/lion-menu.test.d.ts +0 -2
  184. package/dist-types/components/menu/test/lion-menu.test.d.ts.map +0 -1
  185. package/dist-types/components/menu/test-suites/InteractiveListMixin.suite.d.ts +0 -13
  186. package/dist-types/components/menu/test-suites/InteractiveListMixin.suite.d.ts.map +0 -1
  187. package/dist-types/components/navigation-bar/src/LionNavigationBar.d.ts +0 -238
  188. package/dist-types/components/navigation-bar/src/LionNavigationBar.d.ts.map +0 -1
  189. package/dist-types/components/navigation-bar/src/types.d.ts +0 -85
  190. package/dist-types/components/navigation-bar/src/types.d.ts.map +0 -1
  191. package/dist-types/exports/define/lion-item.d.ts +0 -2
  192. package/dist-types/exports/define/lion-item.d.ts.map +0 -1
  193. package/dist-types/exports/define/lion-menu-overlay.d.ts +0 -2
  194. package/dist-types/exports/define/lion-menu-overlay.d.ts.map +0 -1
  195. package/dist-types/exports/define/lion-menu.d.ts +0 -2
  196. package/dist-types/exports/define/lion-menu.d.ts.map +0 -1
  197. package/dist-types/exports/define/lion-navigation-bar.d.ts +0 -2
  198. package/dist-types/exports/define/lion-navigation-bar.d.ts.map +0 -1
  199. package/dist-types/exports/define/lion-toolbar.d.ts +0 -2
  200. package/dist-types/exports/define/lion-toolbar.d.ts.map +0 -1
  201. package/dist-types/exports/define/lion-tree.d.ts +0 -2
  202. package/dist-types/exports/define/lion-tree.d.ts.map +0 -1
  203. package/dist-types/exports/menu.d.ts +0 -7
  204. package/dist-types/exports/menu.d.ts.map +0 -1
  205. package/dist-types/exports/navigation-bar.d.ts +0 -2
  206. package/dist-types/exports/navigation-bar.d.ts.map +0 -1
  207. package/docs/components/menu/api-table.md +0 -450
  208. package/docs/components/menu/applyMenuDemoStyles.js +0 -173
  209. package/docs/components/menu/extensions.md +0 -216
  210. package/docs/components/menu/index.md +0 -13
  211. package/docs/components/menu/overview.md +0 -422
  212. package/exports/define/lion-item.js +0 -3
  213. package/exports/define/lion-menu-overlay.js +0 -3
  214. package/exports/define/lion-menu.js +0 -3
  215. package/exports/define/lion-navigation-bar.js +0 -3
  216. package/exports/define/lion-toolbar.js +0 -3
  217. package/exports/define/lion-tree.js +0 -3
  218. package/exports/menu.js +0 -6
  219. package/exports/navigation-bar.js +0 -1
  220. package/menu.js +0 -6
  221. 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`;
@@ -1,24 +1,4 @@
1
- import { withClickInteraction } from './visibility-trigger-partials/withClickInteraction.js';
2
-
3
- /**
4
- * @typedef {import('../../types/OverlayConfig.js').OverlayConfig} OverlayConfig
5
- */
1
+ import { withPopoverConfig } from './withPopoverConfig.js';
6
2
 
7
3
  export const withDropdownConfig = () =>
8
- /** @type {OverlayConfig} */ ({
9
- placementMode: 'local',
10
- inheritsReferenceWidth: 'min',
11
- hidesOnOutsideClick: true,
12
- hidesOnEsc: true,
13
- popperConfig: {
14
- placement: 'bottom-start',
15
- modifiers: [
16
- {
17
- name: 'offset',
18
- enabled: false,
19
- },
20
- ],
21
- },
22
- handlesAccessibility: true,
23
- ...withClickInteraction(),
24
- });
4
+ withPopoverConfig({ horizontalFallback: false, placement: 'bottom-start' });
@@ -0,0 +1,32 @@
1
+ import { withClickInteraction } from './visibility-trigger-partials/withClickInteraction.js';
2
+
3
+ /**
4
+ * @typedef {import('../../types/OverlayConfig.js').OverlayConfig} OverlayConfig
5
+ */
6
+
7
+ export const withPopoverConfig = ({ horizontalFallback = true, placement = 'auto' } = {}) =>
8
+ /** @type {OverlayConfig} */ ({
9
+ placementMode: 'local',
10
+ inheritsReferenceWidth: 'min',
11
+ hidesOnOutsideClick: true,
12
+ hidesOnEsc: true,
13
+ popperConfig: {
14
+ placement,
15
+ modifiers: [
16
+ {
17
+ name: 'offset',
18
+ enabled: false,
19
+ },
20
+ {
21
+ name: 'flip',
22
+ options: {
23
+ fallbackPlacements: horizontalFallback
24
+ ? ['bottom', 'top', 'right', 'left']
25
+ : ['bottom', 'top'],
26
+ },
27
+ },
28
+ ],
29
+ },
30
+ handlesAccessibility: true,
31
+ ...withClickInteraction(),
32
+ });
@@ -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
  }
@@ -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
  }
@@ -283,9 +283,8 @@ describe('OverlayController', () => {
283
283
  contentNode,
284
284
  });
285
285
  };
286
-
287
286
  expect(createOverlayController).to.throw(
288
- '[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.',
289
288
  );
290
289
  });
291
290
 
@@ -404,7 +403,7 @@ describe('OverlayController', () => {
404
403
  { ignoreAttributes: ['closedby'] },
405
404
  );
406
405
 
407
- expect(el).lightDom.to.equal(`<div data-content="" slot="content">projected</div>`);
406
+ expect(el).lightDom.to.equal(`<div slot="content">projected</div>`);
408
407
  });
409
408
  });
410
409
 
@@ -426,7 +425,7 @@ describe('OverlayController', () => {
426
425
  `
427
426
  <dialog data-overlay-outer-wrapper="" open="" role="none" style="${wrappingDialogNodeStyle}">
428
427
  <div data-id="content-wrapper">
429
- <div data-content="" id="content">non projected</div>
428
+ <div id="content">non projected</div>
430
429
  </div>
431
430
  </dialog>
432
431
  `,
@@ -2293,7 +2292,6 @@ describe('OverlayController', () => {
2293
2292
  });
2294
2293
 
2295
2294
  it('should run with scroll prevention', async () => {
2296
- await overlayControllerPreventsScroll.hide();
2297
2295
  await overlayControllerPreventsScroll.show();
2298
2296
 
2299
2297
  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
 
@@ -21,6 +21,7 @@ export type OverlayPhase =
21
21
  | 'add'
22
22
  | 'remove';
23
23
 
24
+
24
25
  export interface ViewportConfig {
25
26
  placement: ViewportPlacement;
26
27
  }
@@ -96,26 +97,14 @@ export interface OverlayConfig {
96
97
  /** 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) */
97
98
  invokerRelation?: 'label' | 'description';
98
99
 
100
+ /** render a div instead of dialog */
101
+ _noDialogEl?: Boolean;
102
+
99
103
  /**
100
104
  * Determines the conditions hiding/showing should be based on. It gets the OverlayController as input and returns an object with
101
105
  * functions with Overlay phases as keys
102
106
  */
103
107
  visibilityTriggerFunction?: Function;
108
+ }
104
109
 
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
- isOpenable?: boolean;
115
110
 
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
- }
@@ -832,7 +832,6 @@ describe('lion-select-rich', () => {
832
832
  await waitUntil(isSelectRichRendered);
833
833
  getInvoker()?.click();
834
834
  await waitUntil(isDialogVisible);
835
- // @ts-ignore - NodeList array access
836
835
  const optionBlue = /** @type { HTMLElement | undefined } */ (
837
836
  wrapperElementShadowRoot?.querySelectorAll('lion-option')
838
837
  )?.[1];
@@ -956,7 +955,6 @@ describe('lion-select-rich', () => {
956
955
  await waitUntil(isSelectRichRendered);
957
956
  getInvoker()?.click();
958
957
  await waitUntil(isDialogVisible);
959
- // @ts-ignore - NodeList array access
960
958
  const optionBlue = /** @type { HTMLElement | undefined } */ (
961
959
  wrapperElementShadowRoot?.querySelectorAll('lion-option')
962
960
  )?.[1];
@@ -1084,7 +1082,6 @@ describe('lion-select-rich', () => {
1084
1082
  await waitUntil(isSelectRichRendered);
1085
1083
  getInvoker()?.click();
1086
1084
  await waitUntil(isDialogVisible);
1087
- // @ts-ignore - NodeList array access
1088
1085
  const optionBlue = /** @type { HTMLElement | undefined } */ (
1089
1086
  wrapperElementShadowRoot?.querySelectorAll('lion-option')
1090
1087
  )?.[1];