q2-tecton-elements 1.47.2 → 1.47.4

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 (211) hide show
  1. package/dist/cjs/click-elsewhere_2.cjs.entry.js +16 -11
  2. package/dist/cjs/click-elsewhere_2.cjs.entry.js.map +1 -1
  3. package/dist/cjs/{index-a93362ed.js → index-f70484ba.js} +68 -1
  4. package/dist/cjs/index-f70484ba.js.map +1 -0
  5. package/dist/cjs/loader.cjs.js +1 -1
  6. package/dist/cjs/q2-action-sheet.cjs.entry.js +1 -1
  7. package/dist/cjs/q2-btn_2.cjs.entry.js +1 -1
  8. package/dist/cjs/q2-calendar.cjs.entry.js +1 -1
  9. package/dist/cjs/q2-card.cjs.entry.js +1 -1
  10. package/dist/cjs/q2-carousel-pane.cjs.entry.js +1 -1
  11. package/dist/cjs/q2-carousel.cjs.entry.js +1 -1
  12. package/dist/cjs/q2-chart-area.cjs.entry.js +1 -1
  13. package/dist/cjs/q2-chart-bar.cjs.entry.js +1 -1
  14. package/dist/cjs/q2-chart-donut.cjs.entry.js +1 -1
  15. package/dist/cjs/q2-checkbox-group.cjs.entry.js +1 -1
  16. package/dist/cjs/q2-checkbox.cjs.entry.js +1 -1
  17. package/dist/cjs/q2-data-table.cjs.entry.js +1 -1
  18. package/dist/cjs/q2-detail.cjs.entry.js +1 -1
  19. package/dist/cjs/q2-dropdown-item.cjs.entry.js +1 -1
  20. package/dist/cjs/q2-dropdown.cjs.entry.js +4 -2
  21. package/dist/cjs/q2-dropdown.cjs.entry.js.map +1 -1
  22. package/dist/cjs/q2-editable-field.cjs.entry.js +1 -1
  23. package/dist/cjs/q2-icon.cjs.entry.js +1 -1
  24. package/dist/cjs/q2-input.cjs.entry.js +1 -1
  25. package/dist/cjs/q2-item.cjs.entry.js +1 -1
  26. package/dist/cjs/q2-list.cjs.entry.js +1 -1
  27. package/dist/cjs/q2-loc.cjs.entry.js +1 -1
  28. package/dist/cjs/q2-message.cjs.entry.js +1 -1
  29. package/dist/cjs/q2-month-picker.cjs.entry.js +1 -1
  30. package/dist/cjs/q2-optgroup.cjs.entry.js +1 -1
  31. package/dist/cjs/q2-option-list.cjs.entry.js +1 -1
  32. package/dist/cjs/q2-pagination.cjs.entry.js +1 -1
  33. package/dist/cjs/q2-pill.cjs.entry.js +1 -1
  34. package/dist/cjs/q2-radio-group.cjs.entry.js +1 -1
  35. package/dist/cjs/q2-radio.cjs.entry.js +1 -1
  36. package/dist/cjs/q2-section.cjs.entry.js +1 -1
  37. package/dist/cjs/q2-select.cjs.entry.js +56 -4
  38. package/dist/cjs/q2-select.cjs.entry.js.map +1 -1
  39. package/dist/cjs/q2-stepper-pane.cjs.entry.js +1 -1
  40. package/dist/cjs/q2-stepper-vertical.cjs.entry.js +1 -1
  41. package/dist/cjs/q2-stepper.cjs.entry.js +1 -1
  42. package/dist/cjs/q2-tab-container.cjs.entry.js +1 -1
  43. package/dist/cjs/q2-tag.cjs.entry.js +1 -1
  44. package/dist/cjs/q2-tecton-elements.cjs.js +1 -1
  45. package/dist/cjs/q2-textarea.cjs.entry.js +1 -1
  46. package/dist/cjs/q2-tooltip.cjs.entry.js +1 -1
  47. package/dist/collection/components/q2-dropdown/q2-dropdown.js +3 -1
  48. package/dist/collection/components/q2-dropdown/q2-dropdown.js.map +1 -1
  49. package/dist/collection/components/q2-popover/q2-popover.js +16 -11
  50. package/dist/collection/components/q2-popover/q2-popover.js.map +1 -1
  51. package/dist/collection/components/q2-select/q2-select.js +62 -4
  52. package/dist/collection/components/q2-select/q2-select.js.map +1 -1
  53. package/dist/collection/utils/index.js +65 -0
  54. package/dist/collection/utils/index.js.map +1 -1
  55. package/dist/components/index2.js +66 -1
  56. package/dist/components/index2.js.map +1 -1
  57. package/dist/components/q2-dropdown.js +3 -1
  58. package/dist/components/q2-dropdown.js.map +1 -1
  59. package/dist/components/q2-popover2.js +16 -11
  60. package/dist/components/q2-popover2.js.map +1 -1
  61. package/dist/components/q2-select2.js +57 -5
  62. package/dist/components/q2-select2.js.map +1 -1
  63. package/dist/esm/click-elsewhere_2.entry.js +16 -11
  64. package/dist/esm/click-elsewhere_2.entry.js.map +1 -1
  65. package/dist/esm/{index-3c5cd75e.js → index-c14ec4b5.js} +67 -2
  66. package/dist/esm/index-c14ec4b5.js.map +1 -0
  67. package/dist/esm/loader.js +1 -1
  68. package/dist/esm/q2-action-sheet.entry.js +1 -1
  69. package/dist/esm/q2-btn_2.entry.js +1 -1
  70. package/dist/esm/q2-calendar.entry.js +1 -1
  71. package/dist/esm/q2-card.entry.js +1 -1
  72. package/dist/esm/q2-carousel-pane.entry.js +1 -1
  73. package/dist/esm/q2-carousel.entry.js +1 -1
  74. package/dist/esm/q2-chart-area.entry.js +1 -1
  75. package/dist/esm/q2-chart-bar.entry.js +1 -1
  76. package/dist/esm/q2-chart-donut.entry.js +1 -1
  77. package/dist/esm/q2-checkbox-group.entry.js +1 -1
  78. package/dist/esm/q2-checkbox.entry.js +1 -1
  79. package/dist/esm/q2-data-table.entry.js +1 -1
  80. package/dist/esm/q2-detail.entry.js +1 -1
  81. package/dist/esm/q2-dropdown-item.entry.js +1 -1
  82. package/dist/esm/q2-dropdown.entry.js +4 -2
  83. package/dist/esm/q2-dropdown.entry.js.map +1 -1
  84. package/dist/esm/q2-editable-field.entry.js +1 -1
  85. package/dist/esm/q2-icon.entry.js +1 -1
  86. package/dist/esm/q2-input.entry.js +1 -1
  87. package/dist/esm/q2-item.entry.js +1 -1
  88. package/dist/esm/q2-list.entry.js +1 -1
  89. package/dist/esm/q2-loc.entry.js +1 -1
  90. package/dist/esm/q2-message.entry.js +1 -1
  91. package/dist/esm/q2-month-picker.entry.js +1 -1
  92. package/dist/esm/q2-optgroup.entry.js +1 -1
  93. package/dist/esm/q2-option-list.entry.js +1 -1
  94. package/dist/esm/q2-pagination.entry.js +1 -1
  95. package/dist/esm/q2-pill.entry.js +1 -1
  96. package/dist/esm/q2-radio-group.entry.js +1 -1
  97. package/dist/esm/q2-radio.entry.js +1 -1
  98. package/dist/esm/q2-section.entry.js +1 -1
  99. package/dist/esm/q2-select.entry.js +56 -4
  100. package/dist/esm/q2-select.entry.js.map +1 -1
  101. package/dist/esm/q2-stepper-pane.entry.js +1 -1
  102. package/dist/esm/q2-stepper-vertical.entry.js +1 -1
  103. package/dist/esm/q2-stepper.entry.js +1 -1
  104. package/dist/esm/q2-tab-container.entry.js +1 -1
  105. package/dist/esm/q2-tag.entry.js +1 -1
  106. package/dist/esm/q2-tecton-elements.js +1 -1
  107. package/dist/esm/q2-textarea.entry.js +1 -1
  108. package/dist/esm/q2-tooltip.entry.js +1 -1
  109. package/dist/jest.setup.js +11 -0
  110. package/dist/jest.setup.js.map +1 -1
  111. package/dist/q2-tecton-elements/{p-59551fa4.entry.js → p-0097a699.entry.js} +2 -2
  112. package/dist/q2-tecton-elements/p-0d8de2f9.entry.js +2 -0
  113. package/dist/q2-tecton-elements/{p-e9e66809.entry.js.map → p-0d8de2f9.entry.js.map} +1 -1
  114. package/dist/q2-tecton-elements/{p-fce6bc58.entry.js → p-108f6df7.entry.js} +2 -2
  115. package/dist/q2-tecton-elements/{p-c5ae8890.entry.js → p-131d9d76.entry.js} +2 -2
  116. package/dist/q2-tecton-elements/{p-2de3e7b1.entry.js → p-15569220.entry.js} +2 -2
  117. package/dist/q2-tecton-elements/{p-3030d55f.entry.js → p-1a9c313d.entry.js} +2 -2
  118. package/dist/q2-tecton-elements/{p-ca17f7ca.entry.js → p-2d10b3c4.entry.js} +2 -2
  119. package/dist/q2-tecton-elements/{p-0a211fb4.entry.js → p-2fa050ba.entry.js} +2 -2
  120. package/dist/q2-tecton-elements/p-34eff2c8.js +2 -0
  121. package/dist/q2-tecton-elements/p-34eff2c8.js.map +1 -0
  122. package/dist/q2-tecton-elements/{p-6be0e333.entry.js → p-3530e050.entry.js} +2 -2
  123. package/dist/q2-tecton-elements/{p-81bb9436.entry.js → p-39c66aa0.entry.js} +2 -2
  124. package/dist/q2-tecton-elements/{p-fe1f1ff4.entry.js → p-3c22599b.entry.js} +2 -2
  125. package/dist/q2-tecton-elements/{p-07f40176.entry.js → p-4bb841ca.entry.js} +2 -2
  126. package/dist/q2-tecton-elements/{p-044b8914.entry.js → p-4f04df58.entry.js} +2 -2
  127. package/dist/q2-tecton-elements/{p-d6c8d94d.entry.js → p-546a1b35.entry.js} +2 -2
  128. package/dist/q2-tecton-elements/{p-cb8e7ebb.entry.js → p-62215dd6.entry.js} +2 -2
  129. package/dist/q2-tecton-elements/{p-def9be7b.entry.js → p-69a18ec3.entry.js} +2 -2
  130. package/dist/q2-tecton-elements/{p-85a7b1ab.entry.js → p-6a66ff01.entry.js} +2 -2
  131. package/dist/q2-tecton-elements/{p-ccbc168f.entry.js → p-6c7f0232.entry.js} +2 -2
  132. package/dist/q2-tecton-elements/{p-5214296a.entry.js → p-6d80a94c.entry.js} +2 -2
  133. package/dist/q2-tecton-elements/{p-f450db0b.entry.js → p-7907d63b.entry.js} +2 -2
  134. package/dist/q2-tecton-elements/{p-84fc61f5.entry.js → p-7c701caa.entry.js} +2 -2
  135. package/dist/q2-tecton-elements/{p-132005d2.entry.js → p-82bfca30.entry.js} +2 -2
  136. package/dist/q2-tecton-elements/{p-644d5b2e.entry.js → p-83ccd9e7.entry.js} +2 -2
  137. package/dist/q2-tecton-elements/{p-4ef5222b.entry.js → p-845c8abb.entry.js} +2 -2
  138. package/dist/q2-tecton-elements/{p-4740e969.entry.js → p-8b5639df.entry.js} +2 -2
  139. package/dist/q2-tecton-elements/{p-a2caa101.entry.js → p-8cd46d16.entry.js} +2 -2
  140. package/dist/q2-tecton-elements/{p-1d824cdf.entry.js → p-917a8c98.entry.js} +2 -2
  141. package/dist/q2-tecton-elements/{p-572805fc.entry.js → p-a57750a2.entry.js} +2 -2
  142. package/dist/q2-tecton-elements/{p-68276771.entry.js → p-aa7e150c.entry.js} +2 -2
  143. package/dist/q2-tecton-elements/{p-432532fe.entry.js → p-ab844234.entry.js} +2 -2
  144. package/dist/q2-tecton-elements/{p-08d5de5c.entry.js → p-ad858047.entry.js} +2 -2
  145. package/dist/q2-tecton-elements/{p-e1c642fa.entry.js → p-b236e9da.entry.js} +2 -2
  146. package/dist/q2-tecton-elements/{p-46085a34.entry.js → p-bcd6b43b.entry.js} +2 -2
  147. package/dist/q2-tecton-elements/{p-aa768c36.entry.js → p-caba8948.entry.js} +2 -2
  148. package/dist/q2-tecton-elements/p-d7a3301b.entry.js +2 -0
  149. package/dist/q2-tecton-elements/p-d7a3301b.entry.js.map +1 -0
  150. package/dist/q2-tecton-elements/{p-e786ba03.entry.js → p-df2ed4f8.entry.js} +2 -2
  151. package/dist/q2-tecton-elements/{p-63038a54.entry.js → p-e3b49661.entry.js} +2 -2
  152. package/dist/q2-tecton-elements/p-eef9966c.entry.js +2 -0
  153. package/dist/q2-tecton-elements/p-eef9966c.entry.js.map +1 -0
  154. package/dist/q2-tecton-elements/{p-28b0de1c.entry.js → p-fa43dced.entry.js} +2 -2
  155. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
  156. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js.map +1 -1
  157. package/dist/test/elements/q2-pagination-test.e2e.js +2 -1
  158. package/dist/test/elements/q2-pagination-test.e2e.js.map +1 -1
  159. package/dist/test/elements/q2-popover-test.spec.js +229 -150
  160. package/dist/test/elements/q2-popover-test.spec.js.map +1 -1
  161. package/dist/test/elements/q2-select-test.spec.js +146 -6
  162. package/dist/test/elements/q2-select-test.spec.js.map +1 -1
  163. package/dist/types/builds/q2e/development/tecton/tecton/packages/q2-tecton-elements/.stencil/jest.setup.d.ts +9 -0
  164. package/dist/types/components/q2-select/q2-select.d.ts +5 -0
  165. package/dist/types/utils/index.d.ts +5 -0
  166. package/package.json +5 -5
  167. package/dist/cjs/index-a93362ed.js.map +0 -1
  168. package/dist/esm/index-3c5cd75e.js.map +0 -1
  169. package/dist/q2-tecton-elements/p-0499abaa.entry.js +0 -2
  170. package/dist/q2-tecton-elements/p-0499abaa.entry.js.map +0 -1
  171. package/dist/q2-tecton-elements/p-84190698.js +0 -2
  172. package/dist/q2-tecton-elements/p-84190698.js.map +0 -1
  173. package/dist/q2-tecton-elements/p-c9866d11.entry.js +0 -2
  174. package/dist/q2-tecton-elements/p-c9866d11.entry.js.map +0 -1
  175. package/dist/q2-tecton-elements/p-e9e66809.entry.js +0 -2
  176. /package/dist/q2-tecton-elements/{p-59551fa4.entry.js.map → p-0097a699.entry.js.map} +0 -0
  177. /package/dist/q2-tecton-elements/{p-fce6bc58.entry.js.map → p-108f6df7.entry.js.map} +0 -0
  178. /package/dist/q2-tecton-elements/{p-c5ae8890.entry.js.map → p-131d9d76.entry.js.map} +0 -0
  179. /package/dist/q2-tecton-elements/{p-2de3e7b1.entry.js.map → p-15569220.entry.js.map} +0 -0
  180. /package/dist/q2-tecton-elements/{p-3030d55f.entry.js.map → p-1a9c313d.entry.js.map} +0 -0
  181. /package/dist/q2-tecton-elements/{p-ca17f7ca.entry.js.map → p-2d10b3c4.entry.js.map} +0 -0
  182. /package/dist/q2-tecton-elements/{p-0a211fb4.entry.js.map → p-2fa050ba.entry.js.map} +0 -0
  183. /package/dist/q2-tecton-elements/{p-6be0e333.entry.js.map → p-3530e050.entry.js.map} +0 -0
  184. /package/dist/q2-tecton-elements/{p-81bb9436.entry.js.map → p-39c66aa0.entry.js.map} +0 -0
  185. /package/dist/q2-tecton-elements/{p-fe1f1ff4.entry.js.map → p-3c22599b.entry.js.map} +0 -0
  186. /package/dist/q2-tecton-elements/{p-07f40176.entry.js.map → p-4bb841ca.entry.js.map} +0 -0
  187. /package/dist/q2-tecton-elements/{p-044b8914.entry.js.map → p-4f04df58.entry.js.map} +0 -0
  188. /package/dist/q2-tecton-elements/{p-d6c8d94d.entry.js.map → p-546a1b35.entry.js.map} +0 -0
  189. /package/dist/q2-tecton-elements/{p-cb8e7ebb.entry.js.map → p-62215dd6.entry.js.map} +0 -0
  190. /package/dist/q2-tecton-elements/{p-def9be7b.entry.js.map → p-69a18ec3.entry.js.map} +0 -0
  191. /package/dist/q2-tecton-elements/{p-85a7b1ab.entry.js.map → p-6a66ff01.entry.js.map} +0 -0
  192. /package/dist/q2-tecton-elements/{p-ccbc168f.entry.js.map → p-6c7f0232.entry.js.map} +0 -0
  193. /package/dist/q2-tecton-elements/{p-5214296a.entry.js.map → p-6d80a94c.entry.js.map} +0 -0
  194. /package/dist/q2-tecton-elements/{p-f450db0b.entry.js.map → p-7907d63b.entry.js.map} +0 -0
  195. /package/dist/q2-tecton-elements/{p-84fc61f5.entry.js.map → p-7c701caa.entry.js.map} +0 -0
  196. /package/dist/q2-tecton-elements/{p-132005d2.entry.js.map → p-82bfca30.entry.js.map} +0 -0
  197. /package/dist/q2-tecton-elements/{p-644d5b2e.entry.js.map → p-83ccd9e7.entry.js.map} +0 -0
  198. /package/dist/q2-tecton-elements/{p-4ef5222b.entry.js.map → p-845c8abb.entry.js.map} +0 -0
  199. /package/dist/q2-tecton-elements/{p-4740e969.entry.js.map → p-8b5639df.entry.js.map} +0 -0
  200. /package/dist/q2-tecton-elements/{p-a2caa101.entry.js.map → p-8cd46d16.entry.js.map} +0 -0
  201. /package/dist/q2-tecton-elements/{p-1d824cdf.entry.js.map → p-917a8c98.entry.js.map} +0 -0
  202. /package/dist/q2-tecton-elements/{p-572805fc.entry.js.map → p-a57750a2.entry.js.map} +0 -0
  203. /package/dist/q2-tecton-elements/{p-68276771.entry.js.map → p-aa7e150c.entry.js.map} +0 -0
  204. /package/dist/q2-tecton-elements/{p-432532fe.entry.js.map → p-ab844234.entry.js.map} +0 -0
  205. /package/dist/q2-tecton-elements/{p-08d5de5c.entry.js.map → p-ad858047.entry.js.map} +0 -0
  206. /package/dist/q2-tecton-elements/{p-e1c642fa.entry.js.map → p-b236e9da.entry.js.map} +0 -0
  207. /package/dist/q2-tecton-elements/{p-46085a34.entry.js.map → p-bcd6b43b.entry.js.map} +0 -0
  208. /package/dist/q2-tecton-elements/{p-aa768c36.entry.js.map → p-caba8948.entry.js.map} +0 -0
  209. /package/dist/q2-tecton-elements/{p-e786ba03.entry.js.map → p-df2ed4f8.entry.js.map} +0 -0
  210. /package/dist/q2-tecton-elements/{p-63038a54.entry.js.map → p-e3b49661.entry.js.map} +0 -0
  211. /package/dist/q2-tecton-elements/{p-28b0de1c.entry.js.map → p-fa43dced.entry.js.map} +0 -0
@@ -1,13 +1,18 @@
1
1
  import { newSpecPage } from "@stencil/core/testing";
2
2
  import { Q2Popover } from "../../src/components/q2-popover/q2-popover";
3
- import { handleDeprecationWarning } from "../../collection/utils/index";
3
+ import * as utils from "../../collection/utils/index";
4
4
  describe('popover', () => {
5
5
  let specPopover;
6
+ afterEach(() => {
7
+ jest.restoreAllMocks();
8
+ });
6
9
  const samplePlatformDimensions = {
7
10
  scrollY: 0,
8
11
  innerHeight: 800,
9
12
  innerWidth: 600,
10
13
  outletOffset: 20,
14
+ top: 0,
15
+ bottom: 0,
11
16
  };
12
17
  const sampleTectonWindow = {
13
18
  inMobileApp: false,
@@ -423,7 +428,6 @@ describe('popover', () => {
423
428
  let visualViewportAddEventListenerSpy;
424
429
  let screenOrientationAddEventListenerSpy;
425
430
  beforeEach(() => {
426
- specPopover = new Q2Popover();
427
431
  windowAddEventListenerSpy = jest.spyOn(window, 'addEventListener');
428
432
  // Mock visualViewport
429
433
  const mockVisualViewport = {
@@ -450,6 +454,7 @@ describe('popover', () => {
450
454
  });
451
455
  global.screen = mockScreen;
452
456
  screenOrientationAddEventListenerSpy = jest.spyOn(mockScreenOrientation, 'addEventListener');
457
+ specPopover = new Q2Popover();
453
458
  });
454
459
  afterEach(() => {
455
460
  windowAddEventListenerSpy.mockRestore();
@@ -460,30 +465,56 @@ describe('popover', () => {
460
465
  delete window.visualViewport;
461
466
  delete window.screen;
462
467
  });
463
- it('adds resize listener to window with viewPortOrientationChanged handler', () => {
464
- specPopover.addViewportListeners();
465
- expect(windowAddEventListenerSpy).toHaveBeenCalledWith('resize', specPopover.viewPortOrientationChanged);
466
- });
467
- it('adds resize listener to visualViewport with viewPortChanged handler', () => {
468
- specPopover.addViewportListeners();
469
- expect(visualViewportAddEventListenerSpy).toHaveBeenCalledWith('resize', specPopover.viewPortChanged);
470
- });
471
- it('adds scroll listener to window with viewPortChanged handler and proper options', () => {
472
- specPopover.addViewportListeners();
473
- expect(windowAddEventListenerSpy).toHaveBeenCalledWith('scroll', specPopover.viewPortChanged, {
474
- passive: true,
475
- capture: true,
468
+ describe('resize', () => {
469
+ it('adds resize listener to window with viewPortOrientationChanged handler', async () => {
470
+ specPopover.addViewportListeners();
471
+ expect(windowAddEventListenerSpy).toHaveBeenCalledWith('resize', specPopover.viewPortOrientationChanged);
472
+ });
473
+ it('adds resize listener to visualViewport with viewPortChanged handler', async () => {
474
+ specPopover.addViewportListeners();
475
+ expect(visualViewportAddEventListenerSpy).toHaveBeenCalledWith('resize', specPopover.viewPortChanged);
476
476
  });
477
477
  });
478
- it('adds orientationchange listener to screen.orientation with viewPortOrientationChanged handler', () => {
479
- specPopover.addViewportListeners();
480
- expect(screenOrientationAddEventListenerSpy).toHaveBeenCalledWith('orientationchange', specPopover.viewPortOrientationChanged);
478
+ describe('scroll', () => {
479
+ it('adds scroll listener to window when in scrollable container on desktop only', async () => {
480
+ jest.spyOn(utils, 'isInScrollableContainer').mockReturnValue(true);
481
+ jest.spyOn(utils, 'isMobile').mockReturnValue(false);
482
+ specPopover.addViewportListeners();
483
+ expect(windowAddEventListenerSpy).toHaveBeenCalledWith('scroll', specPopover.viewPortChanged, {
484
+ passive: true,
485
+ capture: true,
486
+ });
487
+ });
488
+ it('does not add scroll listener on mobile', async () => {
489
+ jest.spyOn(utils, 'isInScrollableContainer').mockReturnValue(true);
490
+ jest.spyOn(utils, 'isMobile').mockReturnValue(true);
491
+ specPopover.addViewportListeners();
492
+ expect(windowAddEventListenerSpy).not.toHaveBeenCalledWith('scroll', specPopover.viewPortChanged, {
493
+ passive: true,
494
+ capture: true,
495
+ });
496
+ });
497
+ it('does not add scroll listener in non-scrollable container', async () => {
498
+ jest.spyOn(utils, 'isInScrollableContainer').mockReturnValue(false);
499
+ jest.spyOn(utils, 'isMobile').mockReturnValue(false);
500
+ specPopover.addViewportListeners();
501
+ expect(windowAddEventListenerSpy).not.toHaveBeenCalledWith('scroll', specPopover.viewPortChanged, {
502
+ passive: true,
503
+ capture: true,
504
+ });
505
+ });
481
506
  });
482
- it('adds orientationchange listener to window with viewPortOrientationChanged handler', () => {
483
- specPopover.addViewportListeners();
484
- expect(windowAddEventListenerSpy).toHaveBeenCalledWith('orientationchange', specPopover.viewPortOrientationChanged);
507
+ describe('orientationchange', () => {
508
+ it('adds orientationchange listener to screen.orientation with viewPortOrientationChanged handler', async () => {
509
+ specPopover.addViewportListeners();
510
+ expect(screenOrientationAddEventListenerSpy).toHaveBeenCalledWith('orientationchange', specPopover.viewPortOrientationChanged);
511
+ });
512
+ it('adds orientationchange listener to window with viewPortOrientationChanged handler', async () => {
513
+ specPopover.addViewportListeners();
514
+ expect(windowAddEventListenerSpy).toHaveBeenCalledWith('orientationchange', specPopover.viewPortOrientationChanged);
515
+ });
485
516
  });
486
- it('adds all expected listeners when called', () => {
517
+ it('adds all expected listeners when called', async () => {
487
518
  specPopover.addViewportListeners();
488
519
  expect(windowAddEventListenerSpy).toHaveBeenCalled();
489
520
  expect(visualViewportAddEventListenerSpy).toHaveBeenCalled();
@@ -520,48 +551,192 @@ describe('popover', () => {
520
551
  let specPopover;
521
552
  let controlElement;
522
553
  let containerElement;
523
- beforeEach(() => {
554
+ beforeEach(async () => {
524
555
  specPopover = new Q2Popover();
556
+ specPopover.setDirectionAndShow = jest.fn();
525
557
  controlElement = document.createElement('div');
526
- containerElement = document.createElement('div');
527
558
  specPopover.controlElement = controlElement;
559
+ containerElement = document.createElement('div');
528
560
  specPopover.containerElement = containerElement;
529
- window.visualViewport = { width: 800, height: 600 };
530
- specPopover.setDirectionAndShow = jest.fn();
531
561
  });
532
- it('sets the direction to up when control element has more space above it', async () => {
533
- const controlSpy = jest.spyOn(controlElement, 'getBoundingClientRect').mockReturnValue({
534
- top: 500,
535
- bottom: 550,
562
+ afterEach(() => {
563
+ delete window.visualViewport;
564
+ delete window.Tecton;
565
+ delete window.innerHeight;
566
+ });
567
+ describe('when in a module', () => {
568
+ beforeEach(async () => {
569
+ window.Tecton = sampleTectonWindow;
570
+ jest.spyOn(window, 'top', 'get').mockReturnValue({});
571
+ specPopover.open = true;
572
+ expect(specPopover.isModule).toBe(true);
536
573
  });
537
- await specPopover.determinePopDirection();
538
- expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBe('490px');
539
- expect(specPopover.setDirectionAndShow).toHaveBeenCalledWith('up');
540
- controlSpy.mockRestore();
541
- });
542
- it('sets the direction to down when control element has more space below it', async () => {
543
- const controlSpy = jest.spyOn(controlElement, 'getBoundingClientRect').mockReturnValue({
544
- top: 100,
545
- bottom: 150,
574
+ describe("when the module is taller than the window's viewport", () => {
575
+ beforeEach(() => {
576
+ window.innerHeight = 1200;
577
+ });
578
+ it('sets the direction to down when control element has more space below it', async () => {
579
+ jest.spyOn(controlElement, 'getBoundingClientRect').mockReturnValue({
580
+ top: 20,
581
+ bottom: 70,
582
+ });
583
+ await specPopover.determinePopDirection();
584
+ expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBe('700px');
585
+ expect(specPopover.setDirectionAndShow).toHaveBeenCalledWith('down');
586
+ });
587
+ it('sets the direction to up when control element has more space above it', async () => {
588
+ jest.spyOn(controlElement, 'getBoundingClientRect').mockReturnValue({
589
+ top: 600,
590
+ bottom: 650,
591
+ });
592
+ await specPopover.determinePopDirection();
593
+ expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBe('590px');
594
+ expect(specPopover.setDirectionAndShow).toHaveBeenCalledWith('up');
595
+ });
596
+ describe('when the outletOffset is 0 or less', () => {
597
+ beforeEach(() => {
598
+ window.Tecton = Object.assign(Object.assign({}, sampleTectonWindow), { platformDimensions: Object.assign(Object.assign({}, samplePlatformDimensions), { outletOffset: -50 }) });
599
+ });
600
+ it('sets the direction to down when control element has more space below it', async () => {
601
+ jest.spyOn(controlElement, 'getBoundingClientRect').mockReturnValue({
602
+ top: 20,
603
+ bottom: 70,
604
+ });
605
+ await specPopover.determinePopDirection();
606
+ expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBe('770px');
607
+ expect(specPopover.setDirectionAndShow).toHaveBeenCalledWith('down');
608
+ });
609
+ it('sets the direction to up when control element has more space above it', async () => {
610
+ jest.spyOn(controlElement, 'getBoundingClientRect').mockReturnValue({
611
+ top: 600,
612
+ bottom: 650,
613
+ });
614
+ await specPopover.determinePopDirection();
615
+ expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBe('540px');
616
+ expect(specPopover.setDirectionAndShow).toHaveBeenCalledWith('up');
617
+ });
618
+ });
619
+ describe('when the "top" platformDimension has a value', () => {
620
+ beforeEach(() => {
621
+ window.Tecton = Object.assign(Object.assign({}, sampleTectonWindow), { platformDimensions: Object.assign(Object.assign({}, samplePlatformDimensions), { outletOffset: 0, top: 50 }) });
622
+ });
623
+ it('takes the "top" into account when opening up', async () => {
624
+ jest.spyOn(controlElement, 'getBoundingClientRect').mockReturnValue({
625
+ top: 600,
626
+ bottom: 650,
627
+ });
628
+ await specPopover.determinePopDirection();
629
+ expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBe('540px');
630
+ expect(specPopover.setDirectionAndShow).toHaveBeenCalledWith('up');
631
+ });
632
+ it('ignores "top" when outletOffset is positive', async () => {
633
+ window.Tecton = Object.assign(Object.assign({}, sampleTectonWindow), { platformDimensions: Object.assign(Object.assign({}, samplePlatformDimensions), { outletOffset: 20 }) });
634
+ jest.spyOn(controlElement, 'getBoundingClientRect').mockReturnValue({
635
+ top: 600,
636
+ bottom: 650,
637
+ });
638
+ await specPopover.determinePopDirection();
639
+ expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBe('590px');
640
+ expect(specPopover.setDirectionAndShow).toHaveBeenCalledWith('up');
641
+ });
642
+ });
643
+ describe('when the "bottom" platformDimension has a value', () => {
644
+ it('takes "bottom" into account when calculating space below', async () => {
645
+ window.Tecton = Object.assign(Object.assign({}, sampleTectonWindow), { platformDimensions: Object.assign(Object.assign({}, samplePlatformDimensions), { bottom: 50 }) });
646
+ jest.spyOn(controlElement, 'getBoundingClientRect').mockReturnValue({
647
+ top: 20,
648
+ bottom: 70,
649
+ });
650
+ await specPopover.determinePopDirection();
651
+ expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBe('650px');
652
+ expect(specPopover.setDirectionAndShow).toHaveBeenCalledWith('down');
653
+ });
654
+ });
655
+ });
656
+ describe("when the module is shorter than the window's viewport", () => {
657
+ beforeEach(() => {
658
+ window.innerHeight = 600;
659
+ });
660
+ it('sets the direction to down when control element has more space below it', async () => {
661
+ jest.spyOn(controlElement, 'getBoundingClientRect').mockReturnValue({
662
+ top: 20,
663
+ bottom: 70,
664
+ });
665
+ await specPopover.determinePopDirection();
666
+ expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBe('520px');
667
+ expect(specPopover.setDirectionAndShow).toHaveBeenCalledWith('down');
668
+ });
669
+ it('sets the direction to up when control element has more space above it', async () => {
670
+ jest.spyOn(controlElement, 'getBoundingClientRect').mockReturnValue({
671
+ top: 500,
672
+ bottom: 550,
673
+ });
674
+ await specPopover.determinePopDirection();
675
+ expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBe('490px');
676
+ expect(specPopover.setDirectionAndShow).toHaveBeenCalledWith('up');
677
+ });
546
678
  });
547
- await specPopover.determinePopDirection();
548
- expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBe('440px');
549
- expect(specPopover.setDirectionAndShow).toHaveBeenCalledWith('down');
550
- controlSpy.mockRestore();
551
679
  });
552
- it('sets the max-height CSS property on the container to a computed value when maxHeight is undefined', async () => {
553
- await specPopover.determinePopDirection();
554
- expect(specPopover.containerElement.style.getPropertyValue('--comp-pop-max-height')).toBeTruthy();
680
+ describe('when at the platform level', () => {
681
+ beforeEach(async () => {
682
+ window.innerHeight = 600;
683
+ expect(specPopover.isModule).toBe(false);
684
+ });
685
+ it('sets the direction to up when control element has more space above it', async () => {
686
+ const controlSpy = jest.spyOn(controlElement, 'getBoundingClientRect').mockReturnValue({
687
+ top: 500,
688
+ bottom: 550,
689
+ });
690
+ await specPopover.determinePopDirection();
691
+ expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBe('490px');
692
+ expect(specPopover.setDirectionAndShow).toHaveBeenCalledWith('up');
693
+ controlSpy.mockRestore();
694
+ });
695
+ it('sets the direction to down when control element has more space below it', async () => {
696
+ const controlSpy = jest.spyOn(controlElement, 'getBoundingClientRect').mockReturnValue({
697
+ top: 100,
698
+ bottom: 150,
699
+ });
700
+ await specPopover.determinePopDirection();
701
+ expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBe('440px');
702
+ expect(specPopover.setDirectionAndShow).toHaveBeenCalledWith('down');
703
+ controlSpy.mockRestore();
704
+ });
555
705
  });
556
706
  });
557
707
  describe('handleMinHeight', () => {
558
708
  it('calls handleDeprecationWarning for minHeight', async () => {
559
709
  specPopover = new Q2Popover();
560
- const handleDeprecationMock = jest.fn();
561
- handleDeprecationWarning = handleDeprecationMock;
710
+ const mockHandleDeprecation = jest
711
+ .spyOn(utils, 'handleDeprecationWarning')
712
+ .mockImplementation(() => { });
562
713
  specPopover.minHeight = 100;
563
714
  specPopover.handleMinHeight();
564
- expect(handleDeprecationWarning).toHaveBeenCalled();
715
+ expect(mockHandleDeprecation).toHaveBeenCalled();
716
+ });
717
+ });
718
+ describe('handlePopoverToggleEvent', () => {
719
+ it('emits the popoverStateChanged event', async () => {
720
+ specPopover = new Q2Popover();
721
+ const mockEmit = jest.spyOn(specPopover.popoverStateChanged, 'emit');
722
+ specPopover.handlePopoverToggleEvent({});
723
+ expect(mockEmit).toHaveBeenCalled();
724
+ });
725
+ describe('when the newState from the ToggleEvent is "open"', () => {
726
+ it('emits the popoverStateChanged event open as true', async () => {
727
+ specPopover = new Q2Popover();
728
+ const mockEmit = jest.spyOn(specPopover.popoverStateChanged, 'emit');
729
+ specPopover.handlePopoverToggleEvent({ newState: 'open' });
730
+ expect(mockEmit).toHaveBeenCalledWith({ open: true });
731
+ });
732
+ });
733
+ describe('when the newState from the ToggleEvent is "closed"', () => {
734
+ it('emits the popoverStateChanged event open as false', async () => {
735
+ specPopover = new Q2Popover();
736
+ const mockEmit = jest.spyOn(specPopover.popoverStateChanged, 'emit');
737
+ specPopover.handlePopoverToggleEvent({ newState: 'closed' });
738
+ expect(mockEmit).toHaveBeenCalledWith({ open: false });
739
+ });
565
740
  });
566
741
  });
567
742
  describe('removeViewportListeners', () => {
@@ -603,23 +778,23 @@ describe('popover', () => {
603
778
  delete window.visualViewport;
604
779
  delete window.screen;
605
780
  });
606
- it('removes resize listener from window with viewPortOrientationChanged handler', () => {
781
+ it('removes resize listener from window with viewPortOrientationChanged handler', async () => {
607
782
  specPopover.removeViewportListeners();
608
783
  expect(windowRemoveEventListenerSpy).toHaveBeenCalledWith('resize', specPopover.viewPortOrientationChanged);
609
784
  });
610
- it('removes resize listener from visualViewport with viewPortChanged handler', () => {
785
+ it('removes resize listener from visualViewport with viewPortChanged handler', async () => {
611
786
  specPopover.removeViewportListeners();
612
787
  expect(visualViewportRemoveEventListenerSpy).toHaveBeenCalledWith('resize', specPopover.viewPortChanged);
613
788
  });
614
- it('removes scroll listener from window with viewPortChanged handler and proper options', () => {
789
+ it('removes scroll listener from window with viewPortChanged handler and proper options', async () => {
615
790
  specPopover.removeViewportListeners();
616
791
  expect(windowRemoveEventListenerSpy).toHaveBeenNthCalledWith(2, 'scroll', specPopover.viewPortChanged, { capture: true });
617
792
  });
618
- it('removes orientationchange listener from screen.orientation with viewPortOrientationChanged handler', () => {
793
+ it('removes orientationchange listener from screen.orientation with viewPortOrientationChanged handler', async () => {
619
794
  specPopover.removeViewportListeners();
620
795
  expect(screenOrientationRemoveEventListenerSpy).toHaveBeenCalledWith('orientationchange', specPopover.viewPortOrientationChanged);
621
796
  });
622
- it('removes orientationchange listener from window with viewPortOrientationChanged handler', () => {
797
+ it('removes orientationchange listener from window with viewPortOrientationChanged handler', async () => {
623
798
  specPopover.removeViewportListeners();
624
799
  expect(windowRemoveEventListenerSpy).toHaveBeenCalledWith('orientationchange', specPopover.viewPortOrientationChanged);
625
800
  });
@@ -809,101 +984,5 @@ describe('popover', () => {
809
984
  });
810
985
  });
811
986
  });
812
- describe('when in a module', () => {
813
- let specPopover;
814
- let windowSpy;
815
- let controlElement;
816
- let containerElement;
817
- beforeEach(async () => {
818
- specPopover = new Q2Popover();
819
- windowSpy = jest.spyOn(window, 'top', 'get').mockReturnValue({});
820
- window.Tecton = sampleTectonWindow;
821
- expect(specPopover.isModule).toBe(true);
822
- controlElement = document.createElement('div');
823
- specPopover.controlElement = controlElement;
824
- containerElement = document.createElement('div');
825
- specPopover.containerElement = containerElement;
826
- });
827
- afterEach(() => {
828
- windowSpy.mockRestore();
829
- });
830
- describe("when the module is taller than the window's viewport", () => {
831
- beforeEach(() => {
832
- specPopover.open = true;
833
- window.visualViewport = { height: 1200 };
834
- });
835
- it('sets the direction to down when control element has more space below it', async () => {
836
- const controlSpy = jest.spyOn(controlElement, 'getBoundingClientRect').mockReturnValue({
837
- top: 20,
838
- bottom: 70,
839
- });
840
- await specPopover.determinePopDirection();
841
- expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBe('700px');
842
- expect(specPopover.currentDirection).toBe('down');
843
- controlSpy.mockRestore();
844
- });
845
- it('sets the direction to up when control element has more space above it', async () => {
846
- const controlSpy = jest.spyOn(controlElement, 'getBoundingClientRect').mockReturnValue({
847
- top: 600,
848
- bottom: 650,
849
- });
850
- await specPopover.determinePopDirection();
851
- expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBe('590px');
852
- expect(specPopover.currentDirection).toBe('up');
853
- controlSpy.mockRestore();
854
- });
855
- describe('when the outletOffset is less than 0', () => {
856
- beforeEach(() => {
857
- window.Tecton = Object.assign(Object.assign({}, sampleTectonWindow), { platformDimensions: Object.assign(Object.assign({}, samplePlatformDimensions), { outletOffset: -50 }) });
858
- });
859
- it('sets the direction to down when control element has more space below it', async () => {
860
- const controlSpy = jest.spyOn(controlElement, 'getBoundingClientRect').mockReturnValue({
861
- top: 20,
862
- bottom: 70,
863
- });
864
- await specPopover.determinePopDirection();
865
- expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBe('770px');
866
- expect(specPopover.currentDirection).toBe('down');
867
- controlSpy.mockRestore();
868
- });
869
- it('sets the direction to up when control element has more space above it', async () => {
870
- const controlSpy = jest.spyOn(controlElement, 'getBoundingClientRect').mockReturnValue({
871
- top: 600,
872
- bottom: 650,
873
- });
874
- await specPopover.determinePopDirection();
875
- expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBe('540px');
876
- expect(specPopover.currentDirection).toBe('up');
877
- controlSpy.mockRestore();
878
- });
879
- });
880
- });
881
- describe("when the module is shorter than the window's viewport", () => {
882
- beforeEach(() => {
883
- specPopover.open = true;
884
- window.visualViewport = { height: 600 };
885
- });
886
- it('sets the direction to down when control element has more space below it', async () => {
887
- const controlSpy = jest.spyOn(controlElement, 'getBoundingClientRect').mockReturnValue({
888
- top: 20,
889
- bottom: 70,
890
- });
891
- await specPopover.determinePopDirection();
892
- expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBe('520px');
893
- expect(specPopover.currentDirection).toBe('down');
894
- controlSpy.mockRestore();
895
- });
896
- it('sets the direction to up when control element has more space above it', async () => {
897
- const controlSpy = jest.spyOn(controlElement, 'getBoundingClientRect').mockReturnValue({
898
- top: 500,
899
- bottom: 550,
900
- });
901
- await specPopover.determinePopDirection();
902
- expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBe('490px');
903
- expect(specPopover.currentDirection).toBe('up');
904
- controlSpy.mockRestore();
905
- });
906
- });
907
- });
908
987
  });
909
988
  //# sourceMappingURL=q2-popover-test.spec.js.map