q2-tecton-elements 1.53.2 → 1.53.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 (169) hide show
  1. package/dist/cjs/click-elsewhere_2.cjs.entry.js +19 -14
  2. package/dist/cjs/click-elsewhere_2.cjs.entry.js.map +1 -1
  3. package/dist/cjs/{index-76f63767.js → index-eec39d23.js} +68 -1
  4. package/dist/cjs/index-eec39d23.js.map +1 -0
  5. package/dist/cjs/loader.cjs.js +1 -1
  6. package/dist/cjs/q2-action-group.cjs.entry.js +1 -1
  7. package/dist/cjs/q2-action-sheet.cjs.entry.js +1 -1
  8. package/dist/cjs/q2-badge_7.cjs.entry.js +1 -1
  9. package/dist/cjs/q2-calendar.cjs.entry.js +1 -1
  10. package/dist/cjs/q2-card.cjs.entry.js +1 -1
  11. package/dist/cjs/q2-carousel-pane.cjs.entry.js +1 -1
  12. package/dist/cjs/q2-carousel.cjs.entry.js +1 -1
  13. package/dist/cjs/q2-chart-area.cjs.entry.js +1 -1
  14. package/dist/cjs/q2-chart-bar.cjs.entry.js +1 -1
  15. package/dist/cjs/q2-chart-donut.cjs.entry.js +1 -1
  16. package/dist/cjs/q2-checkbox-group.cjs.entry.js +1 -1
  17. package/dist/cjs/q2-checkbox.cjs.entry.js +1 -1
  18. package/dist/cjs/q2-data-table.cjs.entry.js +1 -1
  19. package/dist/cjs/q2-detail.cjs.entry.js +1 -1
  20. package/dist/cjs/q2-dropdown-item.cjs.entry.js +1 -1
  21. package/dist/cjs/q2-dropdown.cjs.entry.js +4 -2
  22. package/dist/cjs/q2-dropdown.cjs.entry.js.map +1 -1
  23. package/dist/cjs/q2-editable-field.cjs.entry.js +1 -1
  24. package/dist/cjs/q2-file-picker.cjs.entry.js +1 -1
  25. package/dist/cjs/q2-item_3.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-option.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-relative-time.cjs.entry.js +1 -1
  37. package/dist/cjs/q2-section.cjs.entry.js +1 -1
  38. package/dist/cjs/q2-select.cjs.entry.js +51 -3
  39. package/dist/cjs/q2-select.cjs.entry.js.map +1 -1
  40. package/dist/cjs/q2-stepper-pane.cjs.entry.js +1 -1
  41. package/dist/cjs/q2-stepper-vertical.cjs.entry.js +1 -1
  42. package/dist/cjs/q2-stepper.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-pill/test/q2-pill-test.e2e.js +1 -1
  50. package/dist/collection/components/q2-pill/test/q2-pill-test.e2e.js.map +1 -1
  51. package/dist/collection/components/q2-popover/q2-popover.js +19 -14
  52. package/dist/collection/components/q2-popover/q2-popover.js.map +1 -1
  53. package/dist/collection/components/q2-popover/test/q2-popover-test.spec.js +230 -147
  54. package/dist/collection/components/q2-popover/test/q2-popover-test.spec.js.map +1 -1
  55. package/dist/collection/components/q2-select/q2-select.js +57 -3
  56. package/dist/collection/components/q2-select/q2-select.js.map +1 -1
  57. package/dist/collection/components/q2-select/test/q2-select-test.spec.js +146 -6
  58. package/dist/collection/components/q2-select/test/q2-select-test.spec.js.map +1 -1
  59. package/dist/collection/utils/index.js +71 -0
  60. package/dist/collection/utils/index.js.map +1 -1
  61. package/dist/components/index2.js +66 -1
  62. package/dist/components/index2.js.map +1 -1
  63. package/dist/components/q2-dropdown.js +3 -1
  64. package/dist/components/q2-dropdown.js.map +1 -1
  65. package/dist/components/q2-popover2.js +19 -14
  66. package/dist/components/q2-popover2.js.map +1 -1
  67. package/dist/components/q2-select2.js +52 -4
  68. package/dist/components/q2-select2.js.map +1 -1
  69. package/dist/esm/click-elsewhere_2.entry.js +19 -14
  70. package/dist/esm/click-elsewhere_2.entry.js.map +1 -1
  71. package/dist/esm/{index-504f1a9e.js → index-52ca69b4.js} +67 -2
  72. package/dist/esm/index-52ca69b4.js.map +1 -0
  73. package/dist/esm/loader.js +1 -1
  74. package/dist/esm/q2-action-group.entry.js +1 -1
  75. package/dist/esm/q2-action-sheet.entry.js +1 -1
  76. package/dist/esm/q2-badge_7.entry.js +1 -1
  77. package/dist/esm/q2-calendar.entry.js +1 -1
  78. package/dist/esm/q2-card.entry.js +1 -1
  79. package/dist/esm/q2-carousel-pane.entry.js +1 -1
  80. package/dist/esm/q2-carousel.entry.js +1 -1
  81. package/dist/esm/q2-chart-area.entry.js +1 -1
  82. package/dist/esm/q2-chart-bar.entry.js +1 -1
  83. package/dist/esm/q2-chart-donut.entry.js +1 -1
  84. package/dist/esm/q2-checkbox-group.entry.js +1 -1
  85. package/dist/esm/q2-checkbox.entry.js +1 -1
  86. package/dist/esm/q2-data-table.entry.js +1 -1
  87. package/dist/esm/q2-detail.entry.js +1 -1
  88. package/dist/esm/q2-dropdown-item.entry.js +1 -1
  89. package/dist/esm/q2-dropdown.entry.js +4 -2
  90. package/dist/esm/q2-dropdown.entry.js.map +1 -1
  91. package/dist/esm/q2-editable-field.entry.js +1 -1
  92. package/dist/esm/q2-file-picker.entry.js +1 -1
  93. package/dist/esm/q2-item_3.entry.js +1 -1
  94. package/dist/esm/q2-loc.entry.js +1 -1
  95. package/dist/esm/q2-message.entry.js +1 -1
  96. package/dist/esm/q2-month-picker.entry.js +1 -1
  97. package/dist/esm/q2-optgroup.entry.js +1 -1
  98. package/dist/esm/q2-option-list.entry.js +1 -1
  99. package/dist/esm/q2-option.entry.js +1 -1
  100. package/dist/esm/q2-pagination.entry.js +1 -1
  101. package/dist/esm/q2-pill.entry.js +1 -1
  102. package/dist/esm/q2-radio-group.entry.js +1 -1
  103. package/dist/esm/q2-radio.entry.js +1 -1
  104. package/dist/esm/q2-relative-time.entry.js +1 -1
  105. package/dist/esm/q2-section.entry.js +1 -1
  106. package/dist/esm/q2-select.entry.js +51 -3
  107. package/dist/esm/q2-select.entry.js.map +1 -1
  108. package/dist/esm/q2-stepper-pane.entry.js +1 -1
  109. package/dist/esm/q2-stepper-vertical.entry.js +1 -1
  110. package/dist/esm/q2-stepper.entry.js +1 -1
  111. package/dist/esm/q2-tag.entry.js +1 -1
  112. package/dist/esm/q2-tecton-elements.js +1 -1
  113. package/dist/esm/q2-textarea.entry.js +1 -1
  114. package/dist/esm/q2-tooltip.entry.js +1 -1
  115. package/dist/jest.setup.js +11 -0
  116. package/dist/jest.setup.js.map +1 -1
  117. package/dist/q2-tecton-elements/click-elsewhere_2.entry.js +139 -134
  118. package/dist/q2-tecton-elements/click-elsewhere_2.entry.js.map +1 -1
  119. package/dist/q2-tecton-elements/{index-504f1a9e.js → index-52ca69b4.js} +121 -61
  120. package/dist/q2-tecton-elements/index-52ca69b4.js.map +1 -0
  121. package/dist/q2-tecton-elements/q2-action-group.entry.js +1 -1
  122. package/dist/q2-tecton-elements/q2-action-sheet.entry.js +1 -1
  123. package/dist/q2-tecton-elements/q2-badge_7.entry.js +1 -1
  124. package/dist/q2-tecton-elements/q2-calendar.entry.js +1 -1
  125. package/dist/q2-tecton-elements/q2-card.entry.js +1 -1
  126. package/dist/q2-tecton-elements/q2-carousel-pane.entry.js +1 -1
  127. package/dist/q2-tecton-elements/q2-carousel.entry.js +1 -1
  128. package/dist/q2-tecton-elements/q2-chart-area.entry.js +1 -1
  129. package/dist/q2-tecton-elements/q2-chart-bar.entry.js +78 -78
  130. package/dist/q2-tecton-elements/q2-chart-donut.entry.js +1 -1
  131. package/dist/q2-tecton-elements/q2-checkbox-group.entry.js +1 -1
  132. package/dist/q2-tecton-elements/q2-checkbox.entry.js +1 -1
  133. package/dist/q2-tecton-elements/q2-data-table.entry.js +1 -1
  134. package/dist/q2-tecton-elements/q2-detail.entry.js +1 -1
  135. package/dist/q2-tecton-elements/q2-dropdown-item.entry.js +1 -1
  136. package/dist/q2-tecton-elements/q2-dropdown.entry.js +13 -11
  137. package/dist/q2-tecton-elements/q2-dropdown.entry.js.map +1 -1
  138. package/dist/q2-tecton-elements/q2-editable-field.entry.js +1 -1
  139. package/dist/q2-tecton-elements/q2-file-picker.entry.js +1 -1
  140. package/dist/q2-tecton-elements/q2-item_3.entry.js +1 -1
  141. package/dist/q2-tecton-elements/q2-loc.entry.js +4 -4
  142. package/dist/q2-tecton-elements/q2-message.entry.js +1 -1
  143. package/dist/q2-tecton-elements/q2-month-picker.entry.js +1 -1
  144. package/dist/q2-tecton-elements/q2-optgroup.entry.js +1 -1
  145. package/dist/q2-tecton-elements/q2-option-list.entry.js +1 -1
  146. package/dist/q2-tecton-elements/q2-option.entry.js +1 -1
  147. package/dist/q2-tecton-elements/q2-pagination.entry.js +1 -1
  148. package/dist/q2-tecton-elements/q2-pill.entry.js +1 -1
  149. package/dist/q2-tecton-elements/q2-radio-group.entry.js +5 -5
  150. package/dist/q2-tecton-elements/q2-radio.entry.js +1 -1
  151. package/dist/q2-tecton-elements/q2-relative-time.entry.js +1 -1
  152. package/dist/q2-tecton-elements/q2-section.entry.js +1 -1
  153. package/dist/q2-tecton-elements/q2-select.entry.js +64 -17
  154. package/dist/q2-tecton-elements/q2-select.entry.js.map +1 -1
  155. package/dist/q2-tecton-elements/q2-stepper-pane.entry.js +1 -1
  156. package/dist/q2-tecton-elements/q2-stepper-vertical.entry.js +1 -1
  157. package/dist/q2-tecton-elements/q2-stepper.entry.js +1 -1
  158. package/dist/q2-tecton-elements/q2-tag.entry.js +1 -1
  159. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
  160. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js.map +1 -1
  161. package/dist/q2-tecton-elements/q2-textarea.entry.js +1 -1
  162. package/dist/q2-tecton-elements/q2-tooltip.entry.js +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 +10 -0
  165. package/dist/types/utils/index.d.ts +7 -0
  166. package/package.json +3 -3
  167. package/dist/cjs/index-76f63767.js.map +0 -1
  168. package/dist/esm/index-504f1a9e.js.map +0 -1
  169. package/dist/q2-tecton-elements/index-504f1a9e.js.map +0 -1
@@ -1,13 +1,18 @@
1
1
  import { newSpecPage } from "@stencil/core/testing";
2
2
  import { Q2Popover } from "../q2-popover";
3
- import { handleDeprecationWarning } from "../../../utils/index";
3
+ import * as utils from "../../../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,44 +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);
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
+ });
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
+ });
678
+ });
679
+ });
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();
536
694
  });
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,
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();
546
704
  });
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
705
  });
552
706
  });
553
707
  describe('handleMinHeight', () => {
554
708
  it('calls handleDeprecationWarning for minHeight', async () => {
555
709
  specPopover = new Q2Popover();
556
- const handleDeprecationMock = jest.fn();
557
- handleDeprecationWarning = handleDeprecationMock;
710
+ const mockHandleDeprecation = jest
711
+ .spyOn(utils, 'handleDeprecationWarning')
712
+ .mockImplementation(() => { });
558
713
  specPopover.minHeight = 100;
559
714
  specPopover.handleMinHeight();
560
- 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
+ });
561
740
  });
562
741
  });
563
742
  describe('removeViewportListeners', () => {
@@ -599,23 +778,23 @@ describe('popover', () => {
599
778
  delete window.visualViewport;
600
779
  delete window.screen;
601
780
  });
602
- it('removes resize listener from window with viewPortOrientationChanged handler', () => {
781
+ it('removes resize listener from window with viewPortOrientationChanged handler', async () => {
603
782
  specPopover.removeViewportListeners();
604
783
  expect(windowRemoveEventListenerSpy).toHaveBeenCalledWith('resize', specPopover.viewPortOrientationChanged);
605
784
  });
606
- it('removes resize listener from visualViewport with viewPortChanged handler', () => {
785
+ it('removes resize listener from visualViewport with viewPortChanged handler', async () => {
607
786
  specPopover.removeViewportListeners();
608
787
  expect(visualViewportRemoveEventListenerSpy).toHaveBeenCalledWith('resize', specPopover.viewPortChanged);
609
788
  });
610
- 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 () => {
611
790
  specPopover.removeViewportListeners();
612
791
  expect(windowRemoveEventListenerSpy).toHaveBeenNthCalledWith(2, 'scroll', specPopover.viewPortChanged, { capture: true });
613
792
  });
614
- it('removes orientationchange listener from screen.orientation with viewPortOrientationChanged handler', () => {
793
+ it('removes orientationchange listener from screen.orientation with viewPortOrientationChanged handler', async () => {
615
794
  specPopover.removeViewportListeners();
616
795
  expect(screenOrientationRemoveEventListenerSpy).toHaveBeenCalledWith('orientationchange', specPopover.viewPortOrientationChanged);
617
796
  });
618
- it('removes orientationchange listener from window with viewPortOrientationChanged handler', () => {
797
+ it('removes orientationchange listener from window with viewPortOrientationChanged handler', async () => {
619
798
  specPopover.removeViewportListeners();
620
799
  expect(windowRemoveEventListenerSpy).toHaveBeenCalledWith('orientationchange', specPopover.viewPortOrientationChanged);
621
800
  });
@@ -805,101 +984,5 @@ describe('popover', () => {
805
984
  });
806
985
  });
807
986
  });
808
- describe('when in a module', () => {
809
- let specPopover;
810
- let windowSpy;
811
- let controlElement;
812
- let containerElement;
813
- beforeEach(async () => {
814
- specPopover = new Q2Popover();
815
- windowSpy = jest.spyOn(window, 'top', 'get').mockReturnValue({});
816
- window.Tecton = sampleTectonWindow;
817
- expect(specPopover.isModule).toBe(true);
818
- controlElement = document.createElement('div');
819
- specPopover.controlElement = controlElement;
820
- containerElement = document.createElement('div');
821
- specPopover.containerElement = containerElement;
822
- });
823
- afterEach(() => {
824
- windowSpy.mockRestore();
825
- });
826
- describe("when the module is taller than the window's viewport", () => {
827
- beforeEach(() => {
828
- specPopover.open = true;
829
- window.visualViewport = { height: 1200 };
830
- });
831
- it('sets the direction to down when control element has more space below it', async () => {
832
- const controlSpy = jest.spyOn(controlElement, 'getBoundingClientRect').mockReturnValue({
833
- top: 20,
834
- bottom: 70,
835
- });
836
- await specPopover.determinePopDirection();
837
- expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBe('700px');
838
- expect(specPopover.currentDirection).toBe('down');
839
- controlSpy.mockRestore();
840
- });
841
- it('sets the direction to up when control element has more space above it', async () => {
842
- const controlSpy = jest.spyOn(controlElement, 'getBoundingClientRect').mockReturnValue({
843
- top: 600,
844
- bottom: 650,
845
- });
846
- await specPopover.determinePopDirection();
847
- expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBe('590px');
848
- expect(specPopover.currentDirection).toBe('up');
849
- controlSpy.mockRestore();
850
- });
851
- describe('when the outletOffset is less than 0', () => {
852
- beforeEach(() => {
853
- window.Tecton = Object.assign(Object.assign({}, sampleTectonWindow), { platformDimensions: Object.assign(Object.assign({}, samplePlatformDimensions), { outletOffset: -50 }) });
854
- });
855
- it('sets the direction to down when control element has more space below it', async () => {
856
- const controlSpy = jest.spyOn(controlElement, 'getBoundingClientRect').mockReturnValue({
857
- top: 20,
858
- bottom: 70,
859
- });
860
- await specPopover.determinePopDirection();
861
- expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBe('770px');
862
- expect(specPopover.currentDirection).toBe('down');
863
- controlSpy.mockRestore();
864
- });
865
- it('sets the direction to up when control element has more space above it', async () => {
866
- const controlSpy = jest.spyOn(controlElement, 'getBoundingClientRect').mockReturnValue({
867
- top: 600,
868
- bottom: 650,
869
- });
870
- await specPopover.determinePopDirection();
871
- expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBe('540px');
872
- expect(specPopover.currentDirection).toBe('up');
873
- controlSpy.mockRestore();
874
- });
875
- });
876
- });
877
- describe("when the module is shorter than the window's viewport", () => {
878
- beforeEach(() => {
879
- specPopover.open = true;
880
- window.visualViewport = { height: 600 };
881
- });
882
- it('sets the direction to down when control element has more space below it', async () => {
883
- const controlSpy = jest.spyOn(controlElement, 'getBoundingClientRect').mockReturnValue({
884
- top: 20,
885
- bottom: 70,
886
- });
887
- await specPopover.determinePopDirection();
888
- expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBe('520px');
889
- expect(specPopover.currentDirection).toBe('down');
890
- controlSpy.mockRestore();
891
- });
892
- it('sets the direction to up when control element has more space above it', async () => {
893
- const controlSpy = jest.spyOn(controlElement, 'getBoundingClientRect').mockReturnValue({
894
- top: 500,
895
- bottom: 550,
896
- });
897
- await specPopover.determinePopDirection();
898
- expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBe('490px');
899
- expect(specPopover.currentDirection).toBe('up');
900
- controlSpy.mockRestore();
901
- });
902
- });
903
- });
904
987
  });
905
988
  //# sourceMappingURL=q2-popover-test.spec.js.map