q2-tecton-elements 1.48.1 → 1.48.2

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 +17 -54
  2. package/dist/cjs/click-elsewhere_2.cjs.entry.js.map +1 -1
  3. package/dist/cjs/{index-a93362ed.js → index-3f1498f7.js} +33 -1
  4. package/dist/cjs/index-3f1498f7.js.map +1 -0
  5. package/dist/cjs/q2-action-sheet.cjs.entry.js +1 -1
  6. package/dist/cjs/q2-btn_2.cjs.entry.js +1 -1
  7. package/dist/cjs/q2-calendar.cjs.entry.js +1 -1
  8. package/dist/cjs/q2-card.cjs.entry.js +1 -1
  9. package/dist/cjs/q2-carousel-pane.cjs.entry.js +1 -1
  10. package/dist/cjs/q2-carousel.cjs.entry.js +1 -1
  11. package/dist/cjs/q2-chart-area.cjs.entry.js +1 -1
  12. package/dist/cjs/q2-chart-bar.cjs.entry.js +1 -1
  13. package/dist/cjs/q2-chart-donut.cjs.entry.js +1 -1
  14. package/dist/cjs/q2-checkbox-group.cjs.entry.js +1 -1
  15. package/dist/cjs/q2-checkbox.cjs.entry.js +1 -1
  16. package/dist/cjs/q2-data-table.cjs.entry.js +1 -1
  17. package/dist/cjs/q2-detail.cjs.entry.js +1 -1
  18. package/dist/cjs/q2-dropdown-item.cjs.entry.js +1 -1
  19. package/dist/cjs/q2-dropdown.cjs.entry.js +4 -2
  20. package/dist/cjs/q2-dropdown.cjs.entry.js.map +1 -1
  21. package/dist/cjs/q2-editable-field.cjs.entry.js +1 -1
  22. package/dist/cjs/q2-icon.cjs.entry.js +1 -1
  23. package/dist/cjs/q2-input.cjs.entry.js +1 -1
  24. package/dist/cjs/q2-item.cjs.entry.js +1 -1
  25. package/dist/cjs/q2-list.cjs.entry.js +1 -1
  26. package/dist/cjs/q2-loc.cjs.entry.js +1 -1
  27. package/dist/cjs/q2-message.cjs.entry.js +1 -1
  28. package/dist/cjs/q2-month-picker.cjs.entry.js +1 -1
  29. package/dist/cjs/q2-optgroup.cjs.entry.js +1 -1
  30. package/dist/cjs/q2-option-list.cjs.entry.js +1 -1
  31. package/dist/cjs/q2-pagination.cjs.entry.js +1 -1
  32. package/dist/cjs/q2-pill.cjs.entry.js +1 -1
  33. package/dist/cjs/q2-radio-group.cjs.entry.js +1 -1
  34. package/dist/cjs/q2-radio.cjs.entry.js +1 -1
  35. package/dist/cjs/q2-relative-time.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 +48 -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-textarea.cjs.entry.js +1 -1
  45. package/dist/cjs/q2-tooltip.cjs.entry.js +1 -1
  46. package/dist/collection/components/q2-dropdown/q2-dropdown.js +3 -1
  47. package/dist/collection/components/q2-dropdown/q2-dropdown.js.map +1 -1
  48. package/dist/collection/components/q2-popover/q2-popover.js +17 -54
  49. package/dist/collection/components/q2-popover/q2-popover.js.map +1 -1
  50. package/dist/collection/components/q2-select/q2-select.js +47 -3
  51. package/dist/collection/components/q2-select/q2-select.js.map +1 -1
  52. package/dist/collection/utils/index.js +31 -0
  53. package/dist/collection/utils/index.js.map +1 -1
  54. package/dist/components/index2.js +32 -1
  55. package/dist/components/index2.js.map +1 -1
  56. package/dist/components/q2-dropdown.js +3 -1
  57. package/dist/components/q2-dropdown.js.map +1 -1
  58. package/dist/components/q2-popover2.js +17 -54
  59. package/dist/components/q2-popover2.js.map +1 -1
  60. package/dist/components/q2-select2.js +48 -4
  61. package/dist/components/q2-select2.js.map +1 -1
  62. package/dist/esm/click-elsewhere_2.entry.js +17 -54
  63. package/dist/esm/click-elsewhere_2.entry.js.map +1 -1
  64. package/dist/esm/{index-3c5cd75e.js → index-58266aeb.js} +33 -2
  65. package/dist/esm/index-58266aeb.js.map +1 -0
  66. package/dist/esm/q2-action-sheet.entry.js +1 -1
  67. package/dist/esm/q2-btn_2.entry.js +1 -1
  68. package/dist/esm/q2-calendar.entry.js +1 -1
  69. package/dist/esm/q2-card.entry.js +1 -1
  70. package/dist/esm/q2-carousel-pane.entry.js +1 -1
  71. package/dist/esm/q2-carousel.entry.js +1 -1
  72. package/dist/esm/q2-chart-area.entry.js +1 -1
  73. package/dist/esm/q2-chart-bar.entry.js +1 -1
  74. package/dist/esm/q2-chart-donut.entry.js +1 -1
  75. package/dist/esm/q2-checkbox-group.entry.js +1 -1
  76. package/dist/esm/q2-checkbox.entry.js +1 -1
  77. package/dist/esm/q2-data-table.entry.js +1 -1
  78. package/dist/esm/q2-detail.entry.js +1 -1
  79. package/dist/esm/q2-dropdown-item.entry.js +1 -1
  80. package/dist/esm/q2-dropdown.entry.js +4 -2
  81. package/dist/esm/q2-dropdown.entry.js.map +1 -1
  82. package/dist/esm/q2-editable-field.entry.js +1 -1
  83. package/dist/esm/q2-icon.entry.js +1 -1
  84. package/dist/esm/q2-input.entry.js +1 -1
  85. package/dist/esm/q2-item.entry.js +1 -1
  86. package/dist/esm/q2-list.entry.js +1 -1
  87. package/dist/esm/q2-loc.entry.js +1 -1
  88. package/dist/esm/q2-message.entry.js +1 -1
  89. package/dist/esm/q2-month-picker.entry.js +1 -1
  90. package/dist/esm/q2-optgroup.entry.js +1 -1
  91. package/dist/esm/q2-option-list.entry.js +1 -1
  92. package/dist/esm/q2-pagination.entry.js +1 -1
  93. package/dist/esm/q2-pill.entry.js +1 -1
  94. package/dist/esm/q2-radio-group.entry.js +1 -1
  95. package/dist/esm/q2-radio.entry.js +1 -1
  96. package/dist/esm/q2-relative-time.entry.js +1 -1
  97. package/dist/esm/q2-section.entry.js +1 -1
  98. package/dist/esm/q2-select.entry.js +48 -4
  99. package/dist/esm/q2-select.entry.js.map +1 -1
  100. package/dist/esm/q2-stepper-pane.entry.js +1 -1
  101. package/dist/esm/q2-stepper-vertical.entry.js +1 -1
  102. package/dist/esm/q2-stepper.entry.js +1 -1
  103. package/dist/esm/q2-tab-container.entry.js +1 -1
  104. package/dist/esm/q2-tag.entry.js +1 -1
  105. package/dist/esm/q2-textarea.entry.js +1 -1
  106. package/dist/esm/q2-tooltip.entry.js +1 -1
  107. package/dist/jest.setup.js +11 -0
  108. package/dist/jest.setup.js.map +1 -1
  109. package/dist/q2-tecton-elements/{p-3fe532bc.entry.js → p-05f5d0ab.entry.js} +2 -2
  110. package/dist/q2-tecton-elements/{p-1a628982.entry.js → p-0f9d4d30.entry.js} +2 -2
  111. package/dist/q2-tecton-elements/p-139926a3.entry.js +2 -0
  112. package/dist/q2-tecton-elements/p-139926a3.entry.js.map +1 -0
  113. package/dist/q2-tecton-elements/{p-77e6704d.entry.js → p-2cbb1756.entry.js} +2 -2
  114. package/dist/q2-tecton-elements/{p-46085a34.entry.js → p-3468d85d.entry.js} +2 -2
  115. package/dist/q2-tecton-elements/{p-0a211fb4.entry.js → p-3876d25b.entry.js} +2 -2
  116. package/dist/q2-tecton-elements/{p-6be0e333.entry.js → p-3d6e350e.entry.js} +2 -2
  117. package/dist/q2-tecton-elements/p-414c5d4e.entry.js +2 -0
  118. package/dist/q2-tecton-elements/p-414c5d4e.entry.js.map +1 -0
  119. package/dist/q2-tecton-elements/{p-132005d2.entry.js → p-48ecbcc9.entry.js} +2 -2
  120. package/dist/q2-tecton-elements/{p-de2f3111.entry.js → p-4ce69e38.entry.js} +2 -2
  121. package/dist/q2-tecton-elements/{p-e786ba03.entry.js → p-4e58e187.entry.js} +2 -2
  122. package/dist/q2-tecton-elements/{p-a2caa101.entry.js → p-50476216.entry.js} +2 -2
  123. package/dist/q2-tecton-elements/{p-6af21a10.entry.js → p-5234ced7.entry.js} +2 -2
  124. package/dist/q2-tecton-elements/{p-11982614.entry.js → p-5538d1df.entry.js} +2 -2
  125. package/dist/q2-tecton-elements/{p-fe1f1ff4.entry.js → p-5d339d72.entry.js} +2 -2
  126. package/dist/q2-tecton-elements/{p-8734e1cb.entry.js → p-63f9a5e5.entry.js} +2 -2
  127. package/dist/q2-tecton-elements/{p-1d824cdf.entry.js → p-646214e2.entry.js} +2 -2
  128. package/dist/q2-tecton-elements/{p-cfabf5d1.entry.js → p-65e7dab0.entry.js} +2 -2
  129. package/dist/q2-tecton-elements/{p-85a7b1ab.entry.js → p-7c5ee4aa.entry.js} +2 -2
  130. package/dist/q2-tecton-elements/p-7ea95f38.js +2 -0
  131. package/dist/q2-tecton-elements/p-7ea95f38.js.map +1 -0
  132. package/dist/q2-tecton-elements/{p-7deda459.entry.js → p-7fe8e174.entry.js} +2 -2
  133. package/dist/q2-tecton-elements/{p-84fc61f5.entry.js → p-803a5897.entry.js} +2 -2
  134. package/dist/q2-tecton-elements/{p-432532fe.entry.js → p-871bad24.entry.js} +2 -2
  135. package/dist/q2-tecton-elements/{p-5214296a.entry.js → p-8764a131.entry.js} +2 -2
  136. package/dist/q2-tecton-elements/{p-d6c8d94d.entry.js → p-8a2b4f10.entry.js} +2 -2
  137. package/dist/q2-tecton-elements/{p-68276771.entry.js → p-97774780.entry.js} +2 -2
  138. package/dist/q2-tecton-elements/{p-81bb9436.entry.js → p-9c129294.entry.js} +2 -2
  139. package/dist/q2-tecton-elements/{p-def9be7b.entry.js → p-a99e1dc6.entry.js} +2 -2
  140. package/dist/q2-tecton-elements/p-abf27f97.entry.js +2 -0
  141. package/dist/q2-tecton-elements/{p-fe2fd83b.entry.js.map → p-abf27f97.entry.js.map} +1 -1
  142. package/dist/q2-tecton-elements/{p-28b0de1c.entry.js → p-af3a383f.entry.js} +2 -2
  143. package/dist/q2-tecton-elements/{p-07f40176.entry.js → p-b85b6bc1.entry.js} +2 -2
  144. package/dist/q2-tecton-elements/{p-0d73466a.entry.js → p-b998e684.entry.js} +2 -2
  145. package/dist/q2-tecton-elements/{p-63038a54.entry.js → p-c30c53dc.entry.js} +2 -2
  146. package/dist/q2-tecton-elements/{p-76be9cad.entry.js → p-c37fff1e.entry.js} +2 -2
  147. package/dist/q2-tecton-elements/{p-572805fc.entry.js → p-c782a1d6.entry.js} +2 -2
  148. package/dist/q2-tecton-elements/{p-ca17f7ca.entry.js → p-cd225920.entry.js} +2 -2
  149. package/dist/q2-tecton-elements/{p-044b8914.entry.js → p-cdfe6e9d.entry.js} +2 -2
  150. package/dist/q2-tecton-elements/{p-75bb43b2.entry.js → p-d238dc6b.entry.js} +2 -2
  151. package/dist/q2-tecton-elements/{p-644d5b2e.entry.js → p-e08c6b8f.entry.js} +2 -2
  152. package/dist/q2-tecton-elements/{p-d5c182d8.entry.js → p-e41f47bc.entry.js} +2 -2
  153. package/dist/q2-tecton-elements/{p-4740e969.entry.js → p-e4241b1a.entry.js} +2 -2
  154. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
  155. package/dist/test/elements/q2-pagination-test.e2e.js +3 -2
  156. package/dist/test/elements/q2-pagination-test.e2e.js.map +1 -1
  157. package/dist/test/elements/q2-popover-test.spec.js +230 -154
  158. package/dist/test/elements/q2-popover-test.spec.js.map +1 -1
  159. package/dist/test/elements/q2-select-test.spec.js +146 -6
  160. package/dist/test/elements/q2-select-test.spec.js.map +1 -1
  161. package/dist/types/builds/q2e/development/tecton/tecton/packages/q2-tecton-elements/.stencil/jest.setup.d.ts +9 -0
  162. package/dist/types/components/q2-popover/q2-popover.d.ts +0 -2
  163. package/dist/types/components/q2-select/q2-select.d.ts +4 -0
  164. package/dist/types/utils/index.d.ts +1 -0
  165. package/package.json +3 -3
  166. package/dist/cjs/index-a93362ed.js.map +0 -1
  167. package/dist/esm/index-3c5cd75e.js.map +0 -1
  168. package/dist/q2-tecton-elements/p-25a0f807.entry.js +0 -2
  169. package/dist/q2-tecton-elements/p-25a0f807.entry.js.map +0 -1
  170. package/dist/q2-tecton-elements/p-84190698.js +0 -2
  171. package/dist/q2-tecton-elements/p-84190698.js.map +0 -1
  172. package/dist/q2-tecton-elements/p-eb45704f.entry.js +0 -2
  173. package/dist/q2-tecton-elements/p-eb45704f.entry.js.map +0 -1
  174. package/dist/q2-tecton-elements/p-fe2fd83b.entry.js +0 -2
  175. /package/dist/q2-tecton-elements/{p-3fe532bc.entry.js.map → p-05f5d0ab.entry.js.map} +0 -0
  176. /package/dist/q2-tecton-elements/{p-1a628982.entry.js.map → p-0f9d4d30.entry.js.map} +0 -0
  177. /package/dist/q2-tecton-elements/{p-77e6704d.entry.js.map → p-2cbb1756.entry.js.map} +0 -0
  178. /package/dist/q2-tecton-elements/{p-46085a34.entry.js.map → p-3468d85d.entry.js.map} +0 -0
  179. /package/dist/q2-tecton-elements/{p-0a211fb4.entry.js.map → p-3876d25b.entry.js.map} +0 -0
  180. /package/dist/q2-tecton-elements/{p-6be0e333.entry.js.map → p-3d6e350e.entry.js.map} +0 -0
  181. /package/dist/q2-tecton-elements/{p-132005d2.entry.js.map → p-48ecbcc9.entry.js.map} +0 -0
  182. /package/dist/q2-tecton-elements/{p-de2f3111.entry.js.map → p-4ce69e38.entry.js.map} +0 -0
  183. /package/dist/q2-tecton-elements/{p-e786ba03.entry.js.map → p-4e58e187.entry.js.map} +0 -0
  184. /package/dist/q2-tecton-elements/{p-a2caa101.entry.js.map → p-50476216.entry.js.map} +0 -0
  185. /package/dist/q2-tecton-elements/{p-6af21a10.entry.js.map → p-5234ced7.entry.js.map} +0 -0
  186. /package/dist/q2-tecton-elements/{p-11982614.entry.js.map → p-5538d1df.entry.js.map} +0 -0
  187. /package/dist/q2-tecton-elements/{p-fe1f1ff4.entry.js.map → p-5d339d72.entry.js.map} +0 -0
  188. /package/dist/q2-tecton-elements/{p-8734e1cb.entry.js.map → p-63f9a5e5.entry.js.map} +0 -0
  189. /package/dist/q2-tecton-elements/{p-1d824cdf.entry.js.map → p-646214e2.entry.js.map} +0 -0
  190. /package/dist/q2-tecton-elements/{p-cfabf5d1.entry.js.map → p-65e7dab0.entry.js.map} +0 -0
  191. /package/dist/q2-tecton-elements/{p-85a7b1ab.entry.js.map → p-7c5ee4aa.entry.js.map} +0 -0
  192. /package/dist/q2-tecton-elements/{p-7deda459.entry.js.map → p-7fe8e174.entry.js.map} +0 -0
  193. /package/dist/q2-tecton-elements/{p-84fc61f5.entry.js.map → p-803a5897.entry.js.map} +0 -0
  194. /package/dist/q2-tecton-elements/{p-432532fe.entry.js.map → p-871bad24.entry.js.map} +0 -0
  195. /package/dist/q2-tecton-elements/{p-5214296a.entry.js.map → p-8764a131.entry.js.map} +0 -0
  196. /package/dist/q2-tecton-elements/{p-d6c8d94d.entry.js.map → p-8a2b4f10.entry.js.map} +0 -0
  197. /package/dist/q2-tecton-elements/{p-68276771.entry.js.map → p-97774780.entry.js.map} +0 -0
  198. /package/dist/q2-tecton-elements/{p-81bb9436.entry.js.map → p-9c129294.entry.js.map} +0 -0
  199. /package/dist/q2-tecton-elements/{p-def9be7b.entry.js.map → p-a99e1dc6.entry.js.map} +0 -0
  200. /package/dist/q2-tecton-elements/{p-28b0de1c.entry.js.map → p-af3a383f.entry.js.map} +0 -0
  201. /package/dist/q2-tecton-elements/{p-07f40176.entry.js.map → p-b85b6bc1.entry.js.map} +0 -0
  202. /package/dist/q2-tecton-elements/{p-0d73466a.entry.js.map → p-b998e684.entry.js.map} +0 -0
  203. /package/dist/q2-tecton-elements/{p-63038a54.entry.js.map → p-c30c53dc.entry.js.map} +0 -0
  204. /package/dist/q2-tecton-elements/{p-76be9cad.entry.js.map → p-c37fff1e.entry.js.map} +0 -0
  205. /package/dist/q2-tecton-elements/{p-572805fc.entry.js.map → p-c782a1d6.entry.js.map} +0 -0
  206. /package/dist/q2-tecton-elements/{p-ca17f7ca.entry.js.map → p-cd225920.entry.js.map} +0 -0
  207. /package/dist/q2-tecton-elements/{p-044b8914.entry.js.map → p-cdfe6e9d.entry.js.map} +0 -0
  208. /package/dist/q2-tecton-elements/{p-75bb43b2.entry.js.map → p-d238dc6b.entry.js.map} +0 -0
  209. /package/dist/q2-tecton-elements/{p-644d5b2e.entry.js.map → p-e08c6b8f.entry.js.map} +0 -0
  210. /package/dist/q2-tecton-elements/{p-d5c182d8.entry.js.map → p-e41f47bc.entry.js.map} +0 -0
  211. /package/dist/q2-tecton-elements/{p-4740e969.entry.js.map → p-e4241b1a.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,
@@ -16,10 +21,7 @@ describe('popover', () => {
16
21
  platformDimensions: samplePlatformDimensions,
17
22
  };
18
23
  const enablePopoverAPI = () => {
19
- Object.defineProperty(HTMLElement.prototype, 'popover', {
20
- value: true,
21
- configurable: true,
22
- });
24
+ Object.defineProperty(HTMLElement.prototype, 'popover', { value: true, configurable: true });
23
25
  };
24
26
  describe('Props', () => {
25
27
  describe('align', () => {
@@ -426,7 +428,6 @@ describe('popover', () => {
426
428
  let visualViewportAddEventListenerSpy;
427
429
  let screenOrientationAddEventListenerSpy;
428
430
  beforeEach(() => {
429
- specPopover = new Q2Popover();
430
431
  windowAddEventListenerSpy = jest.spyOn(window, 'addEventListener');
431
432
  // Mock visualViewport
432
433
  const mockVisualViewport = {
@@ -453,6 +454,7 @@ describe('popover', () => {
453
454
  });
454
455
  global.screen = mockScreen;
455
456
  screenOrientationAddEventListenerSpy = jest.spyOn(mockScreenOrientation, 'addEventListener');
457
+ specPopover = new Q2Popover();
456
458
  });
457
459
  afterEach(() => {
458
460
  windowAddEventListenerSpy.mockRestore();
@@ -463,30 +465,56 @@ describe('popover', () => {
463
465
  delete window.visualViewport;
464
466
  delete window.screen;
465
467
  });
466
- it('adds resize listener to window with viewPortOrientationChanged handler', () => {
467
- specPopover.addViewportListeners();
468
- expect(windowAddEventListenerSpy).toHaveBeenCalledWith('resize', specPopover.viewPortOrientationChanged);
469
- });
470
- it('adds resize listener to visualViewport with viewPortChanged handler', () => {
471
- specPopover.addViewportListeners();
472
- expect(visualViewportAddEventListenerSpy).toHaveBeenCalledWith('resize', specPopover.viewPortChanged);
473
- });
474
- it('adds scroll listener to window with viewPortChanged handler and proper options', () => {
475
- specPopover.addViewportListeners();
476
- expect(windowAddEventListenerSpy).toHaveBeenCalledWith('scroll', specPopover.viewPortChanged, {
477
- passive: true,
478
- 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);
479
476
  });
480
477
  });
481
- it('adds orientationchange listener to screen.orientation with viewPortOrientationChanged handler', () => {
482
- specPopover.addViewportListeners();
483
- 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
+ });
484
506
  });
485
- it('adds orientationchange listener to window with viewPortOrientationChanged handler', () => {
486
- specPopover.addViewportListeners();
487
- 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
+ });
488
516
  });
489
- it('adds all expected listeners when called', () => {
517
+ it('adds all expected listeners when called', async () => {
490
518
  specPopover.addViewportListeners();
491
519
  expect(windowAddEventListenerSpy).toHaveBeenCalled();
492
520
  expect(visualViewportAddEventListenerSpy).toHaveBeenCalled();
@@ -523,48 +551,192 @@ describe('popover', () => {
523
551
  let specPopover;
524
552
  let controlElement;
525
553
  let containerElement;
526
- beforeEach(() => {
554
+ beforeEach(async () => {
527
555
  specPopover = new Q2Popover();
556
+ specPopover.setDirectionAndShow = jest.fn();
528
557
  controlElement = document.createElement('div');
529
- containerElement = document.createElement('div');
530
558
  specPopover.controlElement = controlElement;
559
+ containerElement = document.createElement('div');
531
560
  specPopover.containerElement = containerElement;
532
- window.visualViewport = { width: 800, height: 600 };
533
- specPopover.setDirectionAndShow = jest.fn();
534
561
  });
535
- it('sets the direction to up when control element has more space above it', async () => {
536
- const controlSpy = jest.spyOn(controlElement, 'getBoundingClientRect').mockReturnValue({
537
- top: 500,
538
- 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);
573
+ });
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
+ });
539
655
  });
540
- await specPopover.determinePopDirection();
541
- expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBe('490px');
542
- expect(specPopover.setDirectionAndShow).toHaveBeenCalledWith('up');
543
- controlSpy.mockRestore();
544
- });
545
- it('sets the direction to down when control element has more space below it', async () => {
546
- const controlSpy = jest.spyOn(controlElement, 'getBoundingClientRect').mockReturnValue({
547
- top: 100,
548
- bottom: 150,
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
+ });
549
678
  });
550
- await specPopover.determinePopDirection();
551
- expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBe('440px');
552
- expect(specPopover.setDirectionAndShow).toHaveBeenCalledWith('down');
553
- controlSpy.mockRestore();
554
679
  });
555
- it('sets the max-height CSS property on the container to a computed value when maxHeight is undefined', async () => {
556
- await specPopover.determinePopDirection();
557
- 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
+ });
558
705
  });
559
706
  });
560
707
  describe('handleMinHeight', () => {
561
708
  it('calls handleDeprecationWarning for minHeight', async () => {
562
709
  specPopover = new Q2Popover();
563
- const handleDeprecationMock = jest.fn();
564
- handleDeprecationWarning = handleDeprecationMock;
710
+ const mockHandleDeprecation = jest
711
+ .spyOn(utils, 'handleDeprecationWarning')
712
+ .mockImplementation(() => { });
565
713
  specPopover.minHeight = 100;
566
714
  specPopover.handleMinHeight();
567
- 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
+ });
568
740
  });
569
741
  });
570
742
  describe('removeViewportListeners', () => {
@@ -606,23 +778,23 @@ describe('popover', () => {
606
778
  delete window.visualViewport;
607
779
  delete window.screen;
608
780
  });
609
- it('removes resize listener from window with viewPortOrientationChanged handler', () => {
781
+ it('removes resize listener from window with viewPortOrientationChanged handler', async () => {
610
782
  specPopover.removeViewportListeners();
611
783
  expect(windowRemoveEventListenerSpy).toHaveBeenCalledWith('resize', specPopover.viewPortOrientationChanged);
612
784
  });
613
- it('removes resize listener from visualViewport with viewPortChanged handler', () => {
785
+ it('removes resize listener from visualViewport with viewPortChanged handler', async () => {
614
786
  specPopover.removeViewportListeners();
615
787
  expect(visualViewportRemoveEventListenerSpy).toHaveBeenCalledWith('resize', specPopover.viewPortChanged);
616
788
  });
617
- 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 () => {
618
790
  specPopover.removeViewportListeners();
619
791
  expect(windowRemoveEventListenerSpy).toHaveBeenNthCalledWith(2, 'scroll', specPopover.viewPortChanged, { capture: true });
620
792
  });
621
- it('removes orientationchange listener from screen.orientation with viewPortOrientationChanged handler', () => {
793
+ it('removes orientationchange listener from screen.orientation with viewPortOrientationChanged handler', async () => {
622
794
  specPopover.removeViewportListeners();
623
795
  expect(screenOrientationRemoveEventListenerSpy).toHaveBeenCalledWith('orientationchange', specPopover.viewPortOrientationChanged);
624
796
  });
625
- it('removes orientationchange listener from window with viewPortOrientationChanged handler', () => {
797
+ it('removes orientationchange listener from window with viewPortOrientationChanged handler', async () => {
626
798
  specPopover.removeViewportListeners();
627
799
  expect(windowRemoveEventListenerSpy).toHaveBeenCalledWith('orientationchange', specPopover.viewPortOrientationChanged);
628
800
  });
@@ -812,101 +984,5 @@ describe('popover', () => {
812
984
  });
813
985
  });
814
986
  });
815
- describe('when in a module', () => {
816
- let specPopover;
817
- let windowSpy;
818
- let controlElement;
819
- let containerElement;
820
- beforeEach(async () => {
821
- specPopover = new Q2Popover();
822
- windowSpy = jest.spyOn(window, 'top', 'get').mockReturnValue({});
823
- window.Tecton = sampleTectonWindow;
824
- expect(specPopover.isModule).toBe(true);
825
- controlElement = document.createElement('div');
826
- specPopover.controlElement = controlElement;
827
- containerElement = document.createElement('div');
828
- specPopover.containerElement = containerElement;
829
- });
830
- afterEach(() => {
831
- windowSpy.mockRestore();
832
- });
833
- describe("when the module is taller than the window's viewport", () => {
834
- beforeEach(() => {
835
- specPopover.open = true;
836
- window.visualViewport = { height: 1200 };
837
- });
838
- it('sets the direction to down when control element has more space below it', async () => {
839
- const controlSpy = jest.spyOn(controlElement, 'getBoundingClientRect').mockReturnValue({
840
- top: 20,
841
- bottom: 70,
842
- });
843
- await specPopover.determinePopDirection();
844
- expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBe('700px');
845
- expect(specPopover.currentDirection).toBe('down');
846
- controlSpy.mockRestore();
847
- });
848
- it('sets the direction to up when control element has more space above it', async () => {
849
- const controlSpy = jest.spyOn(controlElement, 'getBoundingClientRect').mockReturnValue({
850
- top: 600,
851
- bottom: 650,
852
- });
853
- await specPopover.determinePopDirection();
854
- expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBe('590px');
855
- expect(specPopover.currentDirection).toBe('up');
856
- controlSpy.mockRestore();
857
- });
858
- describe('when the outletOffset is less than 0', () => {
859
- beforeEach(() => {
860
- window.Tecton = Object.assign(Object.assign({}, sampleTectonWindow), { platformDimensions: Object.assign(Object.assign({}, samplePlatformDimensions), { outletOffset: -50 }) });
861
- });
862
- it('sets the direction to down when control element has more space below it', async () => {
863
- const controlSpy = jest.spyOn(controlElement, 'getBoundingClientRect').mockReturnValue({
864
- top: 20,
865
- bottom: 70,
866
- });
867
- await specPopover.determinePopDirection();
868
- expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBe('770px');
869
- expect(specPopover.currentDirection).toBe('down');
870
- controlSpy.mockRestore();
871
- });
872
- it('sets the direction to up when control element has more space above it', async () => {
873
- const controlSpy = jest.spyOn(controlElement, 'getBoundingClientRect').mockReturnValue({
874
- top: 600,
875
- bottom: 650,
876
- });
877
- await specPopover.determinePopDirection();
878
- expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBe('540px');
879
- expect(specPopover.currentDirection).toBe('up');
880
- controlSpy.mockRestore();
881
- });
882
- });
883
- });
884
- describe("when the module is shorter than the window's viewport", () => {
885
- beforeEach(() => {
886
- specPopover.open = true;
887
- window.visualViewport = { height: 600 };
888
- });
889
- it('sets the direction to down when control element has more space below it', async () => {
890
- const controlSpy = jest.spyOn(controlElement, 'getBoundingClientRect').mockReturnValue({
891
- top: 20,
892
- bottom: 70,
893
- });
894
- await specPopover.determinePopDirection();
895
- expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBe('520px');
896
- expect(specPopover.currentDirection).toBe('down');
897
- controlSpy.mockRestore();
898
- });
899
- it('sets the direction to up when control element has more space above it', async () => {
900
- const controlSpy = jest.spyOn(controlElement, 'getBoundingClientRect').mockReturnValue({
901
- top: 500,
902
- bottom: 550,
903
- });
904
- await specPopover.determinePopDirection();
905
- expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBe('490px');
906
- expect(specPopover.currentDirection).toBe('up');
907
- controlSpy.mockRestore();
908
- });
909
- });
910
- });
911
987
  });
912
988
  //# sourceMappingURL=q2-popover-test.spec.js.map