q2-tecton-elements 1.45.2 → 1.45.3

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 (80) hide show
  1. package/dist/cjs/click-elsewhere_2.cjs.entry.js +36 -4
  2. package/dist/cjs/click-elsewhere_2.cjs.entry.js.map +1 -1
  3. package/dist/cjs/loader.cjs.js +1 -1
  4. package/dist/cjs/q2-calendar.cjs.entry.js +2 -1
  5. package/dist/cjs/q2-calendar.cjs.entry.js.map +1 -1
  6. package/dist/cjs/q2-dropdown.cjs.entry.js +2 -1
  7. package/dist/cjs/q2-dropdown.cjs.entry.js.map +1 -1
  8. package/dist/cjs/q2-icon.cjs.entry.js +5 -3
  9. package/dist/cjs/q2-icon.cjs.entry.js.map +1 -1
  10. package/dist/cjs/q2-select.cjs.entry.js +4 -3
  11. package/dist/cjs/q2-select.cjs.entry.js.map +1 -1
  12. package/dist/cjs/q2-tecton-elements.cjs.js +1 -1
  13. package/dist/collection/components/q2-calendar/q2-calendar.js +23 -1
  14. package/dist/collection/components/q2-calendar/q2-calendar.js.map +1 -1
  15. package/dist/collection/components/q2-dropdown/q2-dropdown.js +23 -1
  16. package/dist/collection/components/q2-dropdown/q2-dropdown.js.map +1 -1
  17. package/dist/collection/components/q2-icon/q2-icon.js +6 -4
  18. package/dist/collection/components/q2-icon/q2-icon.js.map +1 -1
  19. package/dist/collection/components/q2-popover/q2-popover.css +3 -0
  20. package/dist/collection/components/q2-popover/q2-popover.js +53 -3
  21. package/dist/collection/components/q2-popover/q2-popover.js.map +1 -1
  22. package/dist/collection/components/q2-select/q2-select.js +25 -3
  23. package/dist/collection/components/q2-select/q2-select.js.map +1 -1
  24. package/dist/components/q2-calendar.js +3 -1
  25. package/dist/components/q2-calendar.js.map +1 -1
  26. package/dist/components/q2-dropdown.js +3 -1
  27. package/dist/components/q2-dropdown.js.map +1 -1
  28. package/dist/components/q2-icon2.js +6 -4
  29. package/dist/components/q2-icon2.js.map +1 -1
  30. package/dist/components/q2-popover2.js +37 -4
  31. package/dist/components/q2-popover2.js.map +1 -1
  32. package/dist/components/q2-select.js +5 -3
  33. package/dist/components/q2-select.js.map +1 -1
  34. package/dist/esm/click-elsewhere_2.entry.js +36 -4
  35. package/dist/esm/click-elsewhere_2.entry.js.map +1 -1
  36. package/dist/esm/loader.js +1 -1
  37. package/dist/esm/q2-calendar.entry.js +2 -1
  38. package/dist/esm/q2-calendar.entry.js.map +1 -1
  39. package/dist/esm/q2-dropdown.entry.js +2 -1
  40. package/dist/esm/q2-dropdown.entry.js.map +1 -1
  41. package/dist/esm/q2-icon.entry.js +6 -4
  42. package/dist/esm/q2-icon.entry.js.map +1 -1
  43. package/dist/esm/q2-select.entry.js +4 -3
  44. package/dist/esm/q2-select.entry.js.map +1 -1
  45. package/dist/esm/q2-tecton-elements.js +1 -1
  46. package/dist/q2-tecton-elements/p-68556733.entry.js +2 -0
  47. package/dist/q2-tecton-elements/p-68556733.entry.js.map +1 -0
  48. package/dist/q2-tecton-elements/p-bfe9d688.entry.js +2 -0
  49. package/dist/q2-tecton-elements/p-bfe9d688.entry.js.map +1 -0
  50. package/dist/q2-tecton-elements/{p-f1281e3f.entry.js → p-bffda54d.entry.js} +2 -2
  51. package/dist/q2-tecton-elements/p-bffda54d.entry.js.map +1 -0
  52. package/dist/q2-tecton-elements/p-cadceb00.entry.js +2 -0
  53. package/dist/q2-tecton-elements/p-cadceb00.entry.js.map +1 -0
  54. package/dist/q2-tecton-elements/p-f0813fb4.entry.js +2 -0
  55. package/dist/q2-tecton-elements/p-f0813fb4.entry.js.map +1 -0
  56. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
  57. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js.map +1 -1
  58. package/dist/test/elements/q2-calendar-test.e2e.js +20 -0
  59. package/dist/test/elements/q2-calendar-test.e2e.js.map +1 -1
  60. package/dist/test/elements/q2-dropdown-test.e2e.js +30 -0
  61. package/dist/test/elements/q2-dropdown-test.e2e.js.map +1 -1
  62. package/dist/test/elements/q2-icon-test.e2e.js +17 -0
  63. package/dist/test/elements/q2-icon-test.e2e.js.map +1 -1
  64. package/dist/test/elements/q2-popover-test.spec.js +99 -13
  65. package/dist/test/elements/q2-popover-test.spec.js.map +1 -1
  66. package/dist/test/elements/q2-select-test.e2e.js +24 -0
  67. package/dist/test/elements/q2-select-test.e2e.js.map +1 -1
  68. package/dist/types/components/q2-icon/q2-icon.d.ts +1 -0
  69. package/dist/types/components/q2-popover/q2-popover.d.ts +3 -1
  70. package/dist/types/components.d.ts +32 -0
  71. package/package.json +3 -3
  72. package/dist/q2-tecton-elements/p-4a332c2a.entry.js +0 -2
  73. package/dist/q2-tecton-elements/p-4a332c2a.entry.js.map +0 -1
  74. package/dist/q2-tecton-elements/p-7f663376.entry.js +0 -2
  75. package/dist/q2-tecton-elements/p-7f663376.entry.js.map +0 -1
  76. package/dist/q2-tecton-elements/p-c4c458b7.entry.js +0 -2
  77. package/dist/q2-tecton-elements/p-c4c458b7.entry.js.map +0 -1
  78. package/dist/q2-tecton-elements/p-f1281e3f.entry.js.map +0 -1
  79. package/dist/q2-tecton-elements/p-f162c670.entry.js +0 -2
  80. package/dist/q2-tecton-elements/p-f162c670.entry.js.map +0 -1
@@ -1,4 +1,8 @@
1
+ import { newSpecPage } from "@stencil/core/testing";
1
2
  import { setTestStrings, setup, dispatchEvent, promiseMap, testDeprecatedAriaLabel, getNestedElementProperty, getListOfStyleCompilationIssues, } from "../helpers";
3
+ import { Q2Popover } from "../../collection/components/q2-popover/q2-popover";
4
+ import { Q2Dropdown } from "../../collection/components/q2-dropdown/q2-dropdown";
5
+ import { Q2DropdownItem } from "../../collection/components/q2-dropdown-item/q2-dropdown-item";
2
6
  describe('q2-dropdown', () => {
3
7
  let page;
4
8
  let dropdown;
@@ -361,6 +365,32 @@ describe('q2-dropdown', () => {
361
365
  expect(dropdownButtonStyles.display).toBe('block');
362
366
  });
363
367
  });
368
+ describe('popoverMode', () => {
369
+ it('does not set any mode on the popover (default)', async () => {
370
+ const page = await newSpecPage({
371
+ components: [Q2Popover, Q2Dropdown, Q2DropdownItem],
372
+ html: `
373
+ <q2-dropdown>
374
+ <q2-dropdown-item>Item 1 Text</q2-dropdown-item>
375
+ <q2-dropdown-item>Item 2 Text</q2-dropdown-item>
376
+ </q2-dropdown>
377
+ `,
378
+ });
379
+ expect(page.root.shadowRoot.querySelector('q2-popover').mode).toBeNull();
380
+ });
381
+ it('sets the value of popoverMode as the mode on the popover', async () => {
382
+ const page = await newSpecPage({
383
+ components: [Q2Popover, Q2Dropdown, Q2DropdownItem],
384
+ html: `
385
+ <q2-dropdown popover-mode="legacy">
386
+ <q2-dropdown-item>Item 1 Text</q2-dropdown-item>
387
+ <q2-dropdown-item>Item 2 Text</q2-dropdown-item>
388
+ </q2-dropdown>
389
+ `,
390
+ });
391
+ expect(page.root.shadowRoot.querySelector('q2-popover').mode).toBe('legacy');
392
+ });
393
+ });
364
394
  });
365
395
  describe('Events', () => {
366
396
  describe('popoverStateChanged', () => {
@@ -1 +1 @@
1
- {"version":3,"file":"q2-dropdown-test.e2e.js","sourceRoot":"","sources":["../../../test/elements/q2-dropdown-test.e2e.ts"],"names":[],"mappings":"AACA,OAAO,EACH,cAAc,EACd,KAAK,EACL,aAAa,EACb,UAAU,EACV,uBAAuB,EACvB,wBAAwB,EACxB,+BAA+B,GAClC,MAAM,YAAY,CAAC;AAQpB,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IACzB,IAAI,IAAa,CAAC;IAClB,IAAI,QAAoB,CAAC;IACzB,IAAI,iBAA6B,CAAC;IAClC,IAAI,OAAmB,CAAC;IACxB,IAAI,cAA0B,CAAC;IAC/B,IAAI,cAAwB,CAAC;IAC7B,IAAI,WAAuB,CAAC;IAC5B,IAAI,aAAyB,CAAC;IAE9B,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,EAAE,IAAI,EAAE,6BAA6B,EAAE,CAAC,CAAC;QAClE,MAAM,CAAC,MAAM,+BAA+B,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;QAChC,IAAI,GAAG,MAAM,KAAK,CAAC;YACf,IAAI,EAAE;;;;aAIL;SACJ,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAChD,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAEhC,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC7E,MAAM,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;QAE3D,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QACrF,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAClD,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QACrD,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QACrD,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QACvD,MAAM,CAAC,MAAM,cAAc,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC1E,MAAM,CAAC,MAAM,cAAc,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACzE,MAAM,CAAC,MAAM,cAAc,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEtE,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACtE,MAAM,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE,CAAC;QAEtC,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QACpF,MAAM,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE,CAAC;QAEtC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAC7D,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAEpC,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC/E,MAAM,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;QAChC,IAAI,GAAG,MAAM,KAAK,CAAC;YACf,IAAI,EAAE;;;;;;;;aAQL;SACJ,CAAC,CAAC;QAEH,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QACrF,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAClD,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QACrD,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QACvD,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QAEzD,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACtE,MAAM,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC1C,MAAM,CAAC,kBAAkB,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAE/D,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QACpF,MAAM,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC1C,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAE3D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAChD,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACpC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,CAAC,cAAc,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAE9C,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACxC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAClD,MAAM,CAAC,cAAc,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,CAAC,cAAc,CAAC,CAAC,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;QAEtE,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAC1C,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,CAAC,cAAc,CAAC,CAAC,gBAAgB,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;QAExE,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACpC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAClD,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAErD,QAAQ,CAAC,WAAW,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;QACrD,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,CAAC,cAAc,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QACrD,MAAM,CAAC,cAAc,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;QAEpE,QAAQ,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACvC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,CAAC,cAAc,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QACxC,IAAI,GAAG,MAAM,KAAK,CAAC;YACf,IAAI,EAAE;;;;;aAKL;SACJ,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;QACzE,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,aAAa,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;QAChF,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;QACjD,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;QAEjD,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC,aAAa,EAAE,4BAA4B,CAAC,EAAE,SAAS,EAAE;YAChF,GAAG,EAAE,WAAW;SACnB,CAAC,CAAC;QACH,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;QAEjD,MAAM,aAAa,CAAC,IAAI,EAAE,4CAA4C,EAAE,SAAS,EAAE;YAC/E,GAAG,EAAE,WAAW;YAChB,OAAO,EAAE,IAAI;SAChB,CAAC,CAAC;QACH,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;QAEjD,MAAM,aAAa,CAAC,IAAI,EAAE,2CAA2C,EAAE,SAAS,EAAE;YAC9E,GAAG,EAAE,WAAW;YAChB,OAAO,EAAE,IAAI;SAChB,CAAC,CAAC;QACH,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;QAEjD,MAAM,aAAa,CAAC,IAAI,EAAE,4CAA4C,EAAE,SAAS,EAAE;YAC/E,GAAG,EAAE,MAAM;YACX,OAAO,EAAE,IAAI;SAChB,CAAC,CAAC;QACH,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;QAEjD,MAAM,aAAa,CAAC,IAAI,EAAE,2CAA2C,EAAE,SAAS,EAAE;YAC9E,GAAG,EAAE,MAAM;YACX,OAAO,EAAE,IAAI;SAChB,CAAC,CAAC;QACH,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;QAEjD,MAAM,aAAa,CAAC,IAAI,EAAE,4CAA4C,EAAE,SAAS,EAAE;YAC/E,GAAG,EAAE,SAAS;YACd,OAAO,EAAE,IAAI;SAChB,CAAC,CAAC;QACH,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;QAEjD,MAAM,aAAa,CAAC,IAAI,EAAE,2CAA2C,EAAE,SAAS,EAAE;YAC9E,GAAG,EAAE,SAAS;YACd,OAAO,EAAE,IAAI;SAChB,CAAC,CAAC;QACH,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;QAEjD,MAAM,aAAa,CAAC,IAAI,EAAE,4CAA4C,EAAE,SAAS,EAAE;YAC/E,GAAG,EAAE,IAAI;YACT,OAAO,EAAE,IAAI;SAChB,CAAC,CAAC;QACH,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;QAEjD,MAAM,aAAa,CAAC,IAAI,EAAE,2CAA2C,EAAE,SAAS,EAAE;YAC9E,GAAG,EAAE,IAAI;YACT,OAAO,EAAE,IAAI;SAChB,CAAC,CAAC;QACH,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAC5C,IAAI,GAAG,MAAM,KAAK,CAAC;YACf,IAAI,EAAE;;;;aAIL;SACJ,CAAC,CAAC;QAEH,MAAM,cAAc,CAAC,IAAI,EAAE;YACvB,gBAAgB,EAAE,YAAY;YAC9B,oBAAoB,EAAE,iBAAiB;SAC1C,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEhD,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;QAChD,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QACpF,MAAM,CAAC,kBAAkB,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAErD,QAAQ,CAAC,WAAW,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC;QACxD,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QACrF,MAAM,CAAC,cAAc,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACvE,IAAI,GAAG,MAAM,KAAK,CAAC;YACf,IAAI,EAAE;;;;;aAKL;SACJ,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC9D,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC,aAAa,EAAE,4BAA4B,CAAC,EAAE,OAAO,CAAC,CAAC;QAClF,MAAM,CAAC,MAAM,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACtD,IAAI,GAAG,MAAM,KAAK,CAAC;YACf,IAAI,EAAE;;;;;aAKL;SACJ,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC9D,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC,aAAa,EAAE,4BAA4B,CAAC,EAAE,OAAO,CAAC,CAAC;QAClF,MAAM,CAAC,MAAM,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC5D,IAAI,GAAG,MAAM,KAAK,CAAC;YACf,IAAI,EAAE;;;;;aAKL;SACJ,CAAC,CAAC;QACH,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QACrF,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAC9D,IAAI,GAAG,MAAM,KAAK,CAAC;YACf,IAAI,EAAE;;;;;aAKL;SACJ,CAAC,CAAC;QACH,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QACrF,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAEnD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QACnF,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE/C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAChD,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACtC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QACrF,MAAM,CAAC,cAAc,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAChC,MAAM,IAAI,GAAG;;;;;;2BAMM,CAAC;QAEpB,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;YAClD,IAAI,GAAG,MAAM,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7B,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,CAAC;YACpD,MAAM,iBAAiB,GAAG,KAAK,EAAE,IAAa,EAAE,EAAE;gBAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,CAAC,EAAE;;oBAClC,OAAO,MAAA,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,aAAa,0CAAE,YAAY,CAAC,SAAS,CAAC,CAAC;gBACnG,CAAC,CAAC,CAAC;YACP,CAAC,CAAC;YACF,MAAM,CAAC,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;YAC/C,IAAI,GAAG,MAAM,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAChD,MAAM,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YACrC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;YAC5B,MAAM,iBAAiB,GAAG,KAAK,EAAE,IAAa,EAAE,EAAE;gBAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,CAAC,EAAE;;oBAClC,OAAO,MAAA,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,aAAa,0CAAE,YAAY,CAAC,SAAS,CAAC,CAAC;gBACnG,CAAC,CAAC,CAAC;YACP,CAAC,CAAC;YACF,MAAM,CAAC,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAClD,IAAI,GAAG,MAAM,KAAK,CAAC;YACf,IAAI,EAAE;;;;;aAKL;SACJ,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE;YACpD,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACjC,OAAO;gBACH;oBACI,SAAS,EAAE,UAAU;oBACrB,MAAM,EAAE,YAAY;oBACpB,WAAW,EAAE,aAAa;iBAC7B;aACJ,CAAC;QACN,CAAC,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;QACtD,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;YACpB,IAAY,CAAC,cAAc,CAAC,WAAW,GAAG,WAAW,CAAC;QAC3D,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAE7C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAChD,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACxC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,CAAC,WAAW,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAE7C,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;QACzE,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QAC3E,IAAI,GAAG,MAAM,KAAK,CAAC;YACf,IAAI,EAAE;;;;;aAKL;SACJ,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QAC1D,IAAI,GAAG,MAAM,KAAK,CAAC;YACf,IAAI,EAAE;;;;;aAKL;SACJ,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QACnB,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;YAClB,EAAE,CAAC,kFAAkF,EAAE,KAAK,IAAI,EAAE;gBAC9F,IAAI,GAAG,MAAM,KAAK,CAAC;oBACf,IAAI,EAAE;;;;;qBAKL;iBACJ,CAAC,CAAC;gBACH,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC1C,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;gBACxD,MAAM,sBAAsB,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;gBAEhF,MAAM,CAAC,MAAM,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;gBAC3D,MAAM,CAAC,MAAM,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;gBAC1D,MAAM,CAAC,sBAAsB,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;gBAE3D,MAAM,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACzC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;gBAE5B,MAAM,CAAC,MAAM,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtD,MAAM,CAAC,MAAM,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACrD,MAAM,CAAC,sBAAsB,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;YAC/D,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;YACnB,UAAU,CAAC,KAAK,IAAI,EAAE;gBAClB,IAAI,GAAG,MAAM,KAAK,CAAC;oBACf,IAAI,EAAE;;;;;qBAKL;iBACJ,CAAC,CAAC;gBACH,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC1C,cAAc,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;gBAC/E,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAC5D,CAAC,CAAC,CAAC;YACH,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;gBAChF,MAAM,CAAC,MAAM,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvD,MAAM,CAAC,MAAM,cAAc,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC7D,MAAM,CAAC,MAAM,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1D,CAAC,CAAC,CAAC;YACH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;gBAC5E,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,gBAAgB,EAAE,CAAC;gBACzD,MAAM,oBAAoB,GAAG,MAAM,cAAc,CAAC,gBAAgB,EAAE,CAAC;gBAErE,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC7C,MAAM,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACpB,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;YACjC,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;gBACxE,IAAI,GAAG,MAAM,KAAK,CAAC;oBACf,IAAI,EAAE;;8BAEI,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;yBACvB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,0BAA0B,CAAC,0BAA0B,CAAC;yBAC/D,IAAI,CAAC,EAAE,CAAC;;qBAEpB;iBACJ,CAAC,CAAC;gBAEH,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC1C,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;gBAExD,MAAM,CAAC,MAAM,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtD,MAAM,CAAC,MAAM,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAErD,oCAAoC;gBACpC,MAAM,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;gBAC5D,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;gBAE5B,8BAA8B;gBAC9B,IAAI,kBAAkB,GAAG,MAAM,wBAAwB,CACnD,IAAI,EACJ,CAAC,aAAa,EAAE,YAAY,EAAE,YAAY,CAAC,EAC3C,WAAW,CACd,CAAC;gBACF,MAAM,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAExC,oBAAoB;gBACpB,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,CAAC,EAAE,CACjC,EAAE,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,qBAAqB,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CACxF,CAAC;gBAEF,MAAM,CAAC,MAAM,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACvD,MAAM,CAAC,MAAM,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAEtD,qCAAqC;gBACrC,kBAAkB,GAAG,MAAM,wBAAwB,CAC/C,IAAI,EACJ,CAAC,aAAa,EAAE,YAAY,EAAE,YAAY,CAAC,EAC3C,WAAW,CACd,CAAC;gBACF,MAAM,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QACnB,UAAU,CAAC,KAAK,IAAI,EAAE;YAClB,IAAI,GAAG,MAAM,KAAK,CAAC;gBACf,IAAI,EAAE;;;;;iBAKL;aACJ,CAAC,CAAC;YACH,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC1C,MAAM,CAAC,MAAM,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;YAE3D,cAAc,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;YAC/E,cAAc,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAC1D,MAAM,CAAC,cAAc,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;YAEnD,iBAAiB,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;YACvE,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YAC7C,MAAM,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;YAE3D,WAAW,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;YAC3C,MAAM,cAAc,CAAC,KAAK,EAAE,CAAC;YAE7B,MAAM,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YACzC,MAAM,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;YACvD,MAAM,CAAC,cAAc,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;YAEnD,cAAc,CAAC,MAAM,GAAG,EAAE,CAAC;YAE3B,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC;YAC1B,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YAC7C,MAAM,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;YAE3D,MAAM,CAAC,cAAc,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;YAEnD,cAAc,CAAC,MAAM,GAAG,EAAE,CAAC;YAE3B,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC,aAAa,EAAE,4BAA4B,CAAC,EAAE,OAAO,CAAC,CAAC;YAClF,MAAM,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;YAEvD,MAAM,CAAC,cAAc,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;YAEnD,cAAc,CAAC,MAAM,GAAG,EAAE,CAAC;YAE3B,aAAa,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;YACnE,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC;YAC5B,MAAM,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;YAE3D,MAAM,CAAC,cAAc,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACtB,UAAU,CAAC,KAAK,IAAI,EAAE;YAClB,IAAI,GAAG,MAAM,KAAK,CAAC;gBACf,IAAI,EAAE;;;;;iBAKL;aACJ,CAAC,CAAC;YACH,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC1C,MAAM,CAAC,MAAM,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;YAE3D,cAAc,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;YAC/E,cAAc,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAC1D,MAAM,CAAC,cAAc,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;YAEnD,iBAAiB,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;YACvE,MAAM,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAChE,MAAM,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACtC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;YAE5B,MAAM,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;YACvD,MAAM,CAAC,cAAc,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;YACnE,MAAM,cAAc,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACxC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;YAE5B,MAAM,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;YACvD,MAAM,CAAC,cAAc,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;YACvB,UAAU,CAAC,KAAK,IAAI,EAAE;gBAClB,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACnC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;gBAC5B,MAAM,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;gBACvD,cAAc,CAAC,MAAM,GAAG,EAAE,CAAC;YAC/B,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;gBACpE,MAAM,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACrC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;gBAE5B,MAAM,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;gBAC3D,MAAM,CAAC,cAAc,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;gBACzD,MAAM,cAAc,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBACxC,MAAM,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAClC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;gBAE5B,MAAM,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;gBACvD,MAAM,CAAC,cAAc,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YACpD,IAAI,GAAG,MAAM,KAAK,CAAC;gBACf,IAAI,EAAE;;;;;iBAKL;aACJ,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;YAC5B,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC1C,MAAM,CAAC,MAAM,QAAQ,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACjE,MAAM,CAAC,MAAM,QAAQ,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAErE,MAAM,QAAQ,CAAC,WAAW,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;YACnD,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;YAE5B,MAAM,CAAC,MAAM,QAAQ,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACnE,MAAM,CAAC,MAAM,QAAQ,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACjD,MAAM,KAAK,GAAG,UAAU,CAAC;YACzB,IAAI,GAAG,MAAM,KAAK,CAAC;gBACf,IAAI,EAAE;+CACyB,KAAK;;;;iBAInC;aACJ,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;YAC5B,MAAM,uBAAuB,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,CAAC;YACrE,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YAC9D,MAAM,CAAC,WAAW,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACrD,MAAM,CAAC,WAAW,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACjD,IAAI,GAAG,MAAM,KAAK,CAAC;gBACf,IAAI,EAAE;;;;;iBAKL;aACJ,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;YAC5B,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC1C,MAAM,CAAC,MAAM,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAChE,MAAM,CAAC,MAAM,QAAQ,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAEvE,MAAM,QAAQ,CAAC,WAAW,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACjD,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;YAE5B,MAAM,CAAC,MAAM,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACjE,MAAM,CAAC,MAAM,QAAQ,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC","sourcesContent":["import { E2EElement, E2EPage, EventSpy } from '@stencil/core/testing';\nimport {\n setTestStrings,\n setup,\n dispatchEvent,\n promiseMap,\n testDeprecatedAriaLabel,\n getNestedElementProperty,\n getListOfStyleCompilationIssues,\n} from '../helpers';\n\nexport type TectonWindow = typeof window & {\n resolveMenu: any;\n navigateTo: any;\n showOverpanel: any;\n};\n\ndescribe('q2-dropdown', () => {\n let page: E2EPage;\n let dropdown: E2EElement;\n let dropdownContainer: E2EElement;\n let popover: E2EElement;\n let dropdownButton: E2EElement;\n let buttonFocusSpy: EventSpy;\n let firstOption: E2EElement;\n let closeDropdown: E2EElement;\n\n it('properly compiles CSS vars and functions', async () => {\n const page = await setup({ html: '<q2-dropdown></q2-dropdown>' });\n expect(await getListOfStyleCompilationIssues(page, 'q2-dropdown')).toHaveLength(0);\n });\n\n it('renders base state', async () => {\n page = await setup({\n html: `\n <q2-dropdown>\n <q2-dropdown-item>Item Text</q2-dropdown-item>\n </q2-dropdown>\n `,\n });\n\n const dropdown = await page.find('q2-dropdown');\n expect(dropdown).not.toBeNull();\n\n const dropdownContainer = await page.find('q2-dropdown >>> click-elsewhere');\n expect(dropdownContainer).not.toHaveClass('dropdown-open');\n\n const dropdownButton = await page.find('q2-dropdown >>> [test-id=\"dropdownButton\"]');\n expect(dropdownButton).not.toHaveAttribute('fab');\n expect(dropdownButton).not.toHaveAttribute('intent');\n expect(dropdownButton).not.toHaveAttribute('active');\n expect(dropdownButton).not.toHaveAttribute('disabled');\n expect(await dropdownButton.getProperty('ariaExpanded')).toEqual('false');\n expect(await dropdownButton.getProperty('ariaHasPopup')).toEqual('menu');\n expect(await dropdownButton.getProperty('ariaLabel')).toBe(undefined);\n\n const dropdownButtonIcon = await page.find('q2-dropdown >>> q2-icon');\n expect(dropdownButtonIcon).toBeNull();\n\n const dropdownButtonText = await page.find('q2-dropdown >>> .dropdown-button-text');\n expect(dropdownButtonText).toBeNull();\n\n const dropdownSlot = await page.find('q2-dropdown >>> slot');\n expect(dropdownSlot).not.toBeNull();\n\n const dropdownCloseButton = await page.find('q2-dropdown >>> .close-dropdown');\n expect(dropdownCloseButton).toBeNull();\n });\n\n it('binds button props', async () => {\n page = await setup({\n html: `\n <q2-dropdown\n type=\"icon\"\n icon=\"options\"\n label=\"Label Text\"\n >\n <q2-dropdown-item>Item Text</q2-dropdown-item>\n </q2-dropdown>\n `,\n });\n\n const dropdownButton = await page.find('q2-dropdown >>> [test-id=\"dropdownButton\"]');\n expect(dropdownButton).not.toHaveAttribute('fab');\n expect(dropdownButton).not.toHaveAttribute('intent');\n expect(dropdownButton).not.toHaveAttribute('disabled');\n expect(dropdownButton).not.toHaveAttribute('aria-label');\n\n const dropdownButtonIcon = await page.find('q2-dropdown >>> q2-icon');\n expect(dropdownButtonIcon).not.toBeNull();\n expect(dropdownButtonIcon).toEqualAttribute('type', 'options');\n\n const dropdownButtonText = await page.find('q2-dropdown >>> .dropdown-button-text');\n expect(dropdownButtonText).not.toBeNull();\n expect(dropdownButtonText.innerText).toEqual('Label Text');\n\n const dropdown = await page.find('q2-dropdown');\n dropdown.setProperty('type', 'fab');\n await page.waitForChanges();\n\n expect(dropdownButton).not.toHaveAttribute('icon');\n expect(dropdownButton).toHaveAttribute('fab');\n\n dropdown.setProperty('type', 'primary');\n await page.waitForChanges();\n\n expect(dropdownButton).not.toHaveAttribute('fab');\n expect(dropdownButton).toHaveAttribute('intent');\n expect(dropdownButton).toEqualAttribute('intent', 'workflow-primary');\n\n dropdown.setProperty('type', 'secondary');\n await page.waitForChanges();\n\n expect(dropdownButton).toEqualAttribute('intent', 'workflow-secondary');\n\n dropdown.setProperty('type', 'foo');\n await page.waitForChanges();\n\n expect(dropdownButton).not.toHaveAttribute('icon');\n expect(dropdownButton).not.toHaveAttribute('fab');\n expect(dropdownButton).not.toHaveAttribute('intent');\n\n dropdown.setProperty('ariaLabel', 'Aria-Label Text');\n await page.waitForChanges();\n\n expect(dropdownButton).toHaveAttribute('hide-label');\n expect(dropdownButton).toEqualAttribute('label', 'Aria-Label Text');\n\n dropdown.setProperty('disabled', true);\n await page.waitForChanges();\n\n expect(dropdownButton).toHaveAttribute('disabled');\n });\n\n it('handles focus manipulation', async () => {\n page = await setup({\n html: `\n <q2-dropdown>\n <q2-dropdown-item>Item 1 Text</q2-dropdown-item>\n <q2-dropdown-item>Item 2 Text</q2-dropdown-item>\n </q2-dropdown>\n `,\n });\n\n const dropdownItems = await page.findAll('q2-dropdown q2-dropdown-item');\n const itemSpies = await promiseMap(dropdownItems, el => el.spyOnEvent('focus'));\n expect(itemSpies[0]).toHaveReceivedEventTimes(0);\n expect(itemSpies[1]).toHaveReceivedEventTimes(0);\n\n await dispatchEvent(page, ['q2-dropdown', '[test-id=\"dropdownButton\"]'], 'keydown', {\n key: 'ArrowDown',\n });\n expect(itemSpies[0]).toHaveReceivedEventTimes(1);\n\n await dispatchEvent(page, 'q2-dropdown q2-dropdown-item:first-of-type', 'keydown', {\n key: 'ArrowDown',\n bubbles: true,\n });\n expect(itemSpies[1]).toHaveReceivedEventTimes(1);\n\n await dispatchEvent(page, 'q2-dropdown q2-dropdown-item:last-of-type', 'keydown', {\n key: 'ArrowDown',\n bubbles: true,\n });\n expect(itemSpies[0]).toHaveReceivedEventTimes(2);\n\n await dispatchEvent(page, 'q2-dropdown q2-dropdown-item:first-of-type', 'keydown', {\n key: 'Down',\n bubbles: true,\n });\n expect(itemSpies[1]).toHaveReceivedEventTimes(2);\n\n await dispatchEvent(page, 'q2-dropdown q2-dropdown-item:last-of-type', 'keydown', {\n key: 'Down',\n bubbles: true,\n });\n expect(itemSpies[0]).toHaveReceivedEventTimes(3);\n\n await dispatchEvent(page, 'q2-dropdown q2-dropdown-item:first-of-type', 'keydown', {\n key: 'ArrowUp',\n bubbles: true,\n });\n expect(itemSpies[1]).toHaveReceivedEventTimes(3);\n\n await dispatchEvent(page, 'q2-dropdown q2-dropdown-item:last-of-type', 'keydown', {\n key: 'ArrowUp',\n bubbles: true,\n });\n expect(itemSpies[0]).toHaveReceivedEventTimes(4);\n\n await dispatchEvent(page, 'q2-dropdown q2-dropdown-item:first-of-type', 'keydown', {\n key: 'Up',\n bubbles: true,\n });\n expect(itemSpies[1]).toHaveReceivedEventTimes(4);\n\n await dispatchEvent(page, 'q2-dropdown q2-dropdown-item:last-of-type', 'keydown', {\n key: 'Up',\n bubbles: true,\n });\n expect(itemSpies[0]).toHaveReceivedEventTimes(5);\n });\n\n it('localizes label and aria-label', async () => {\n page = await setup({\n html: `\n <q2-dropdown>\n <q2-dropdown-item>Item Text</q2-dropdown-item>\n </q2-dropdown>\n `,\n });\n\n await setTestStrings(page, {\n 'dropdown.label': 'Label text',\n 'dropdown.ariaLabel': 'Aria-Label text',\n });\n\n const dropdown = await page.find('q2-dropdown');\n\n dropdown.setProperty('label', 'dropdown.label');\n await page.waitForChanges();\n\n const dropdownButtonText = await page.find('q2-dropdown >>> .dropdown-button-text');\n expect(dropdownButtonText).toEqualText('Label text');\n\n dropdown.setProperty('ariaLabel', 'dropdown.ariaLabel');\n await page.waitForChanges();\n\n const dropdownButton = await page.find('q2-dropdown >>> [test-id=\"dropdownButton\"]');\n expect(dropdownButton).toEqualAttribute('label', 'Aria-Label text');\n });\n\n it('regular dropdown with popover-direction=\"up\" opens upward', async () => {\n page = await setup({\n html: `\n <q2-dropdown popover-direction=\"up\">\n <q2-dropdown-item>Item 1 Text</q2-dropdown-item>\n <q2-dropdown-item>Item 2 Text</q2-dropdown-item>\n </q2-dropdown>\n `,\n });\n const popover = await page.find('q2-dropdown >>> q2-popover');\n await dispatchEvent(page, ['q2-dropdown', '[test-id=\"dropdownButton\"]'], 'click');\n expect(await popover.getProperty('direction')).toEqual('up');\n });\n\n it('with popover-alignment=\"left\" opens left', async () => {\n page = await setup({\n html: `\n <q2-dropdown popover-alignment=\"left\">\n <q2-dropdown-item>Item 1 Text</q2-dropdown-item>\n <q2-dropdown-item>Item 2 Text</q2-dropdown-item>\n </q2-dropdown>\n `,\n });\n const popover = await page.find('q2-dropdown >>> q2-popover');\n await dispatchEvent(page, ['q2-dropdown', '[test-id=\"dropdownButton\"]'], 'click');\n expect(await popover.getProperty('align')).toEqual('left');\n });\n\n it('if type custom, q2-btn icon attribute is false', async () => {\n page = await setup({\n html: `\n <q2-dropdown type=\"custom\">\n <q2-avatar slot=\"custom-dropdown-button\"></q2-avatar>\n <q2-dropdown-item>Item 1 Text</q2-dropdown-item>\n </q2-dropdown>\n `,\n });\n const dropdownCustom = await page.find('q2-dropdown >>> [test-id=\"dropdownButton\"]');\n expect(dropdownCustom).not.toHaveAttribute('icon');\n });\n\n it('if type custom, show custom-dropdown-button slot', async () => {\n page = await setup({\n html: `\n <q2-dropdown type=\"custom\">\n <q2-avatar slot=\"custom-dropdown-button\"></q2-avatar>\n <q2-dropdown-item>Item 1 Text</q2-dropdown-item>\n </q2-dropdown>\n `,\n });\n const dropdownCustom = await page.find('q2-dropdown >>> [test-id=\"dropdownButton\"]');\n expect(dropdownCustom).not.toHaveAttribute('icon');\n\n const dropdownSlot = await page.find('q2-dropdown >>> [test-id=\"dropdownCustom\"]');\n expect(dropdownSlot).not.toHaveClass('hidden');\n\n const dropdown = await page.find('q2-dropdown');\n dropdown.setAttribute('type', 'icon');\n await page.waitForChanges();\n\n const dropdownButton = await page.find('q2-dropdown >>> [test-id=\"dropdownCustom\"]');\n expect(dropdownButton).toHaveClass('hidden');\n });\n\n describe('focus transferring', () => {\n const html = `<q2-dropdown style=\"margin-top: 9999px\">\n <q2-dropdown-item>Item 1 Text</q2-dropdown-item>\n <q2-dropdown-item>Item 2 Text</q2-dropdown-item>\n <q2-dropdown-item>Item 3 Text</q2-dropdown-item>\n <q2-dropdown-item>Item 4 Text</q2-dropdown-item>\n <q2-dropdown-item>Item 5 Text</q2-dropdown-item>\n </q2-dropdown>`;\n\n it('focuses when focus event dispatched ', async () => {\n page = await setup({ html });\n await dispatchEvent(page, ['q2-dropdown'], 'focus');\n const innerActiveTestId = async (page: E2EPage) => {\n return page.$eval('q2-dropdown', el => {\n return el.shadowRoot.querySelector('q2-btn').shadowRoot.activeElement?.getAttribute('test-id');\n });\n };\n expect(await innerActiveTestId(page)).toEqual('q2BtnInnerButton');\n });\n\n it('focuses when focus method called ', async () => {\n page = await setup({ html });\n const dropdown = await page.find('q2-dropdown');\n await dropdown.triggerEvent('focus');\n await page.waitForChanges();\n const innerActiveTestId = async (page: E2EPage) => {\n return page.$eval('q2-dropdown', el => {\n return el.shadowRoot.querySelector('q2-btn').shadowRoot.activeElement?.getAttribute('test-id');\n });\n };\n expect(await innerActiveTestId(page)).toEqual('q2BtnInnerButton');\n });\n });\n\n it.skip('adds menu items from the config', async () => {\n page = await setup({\n html: `\n <q2-dropdown name=\"testMenu\" pop-direction=\"up\">\n <q2-dropdown-item>Item 1 Text</q2-dropdown-item>\n <q2-dropdown-item>Item 2 Text</q2-dropdown-item>\n </q2-dropdown>\n `,\n });\n\n const resolveMenu = jest.fn().mockImplementation(name => {\n expect(name).toEqual('testMenu');\n return [\n {\n itemLabel: 'testItem',\n action: 'navigateTo',\n featureName: 'testFeature',\n },\n ];\n });\n await page.exposeFunction('resolveMenu', resolveMenu);\n await page.evaluate(() => {\n (this as any).TectonElements.resolveMenu = resolveMenu;\n });\n expect(resolveMenu).toHaveBeenCalledTimes(0);\n\n const dropdown = await page.find('q2-dropdown');\n dropdown.setProperty('context', 'None');\n await page.waitForChanges();\n expect(resolveMenu).toHaveBeenCalledTimes(1);\n\n const dropdownItems = await page.findAll('q2-dropdown q2-dropdown-item');\n expect(dropdownItems.length).toEqual(3);\n });\n\n it.skip('replaces menu outlet items when the contextValue changes', async () => {\n page = await setup({\n html: `\n <q2-dropdown name=\"testMenu\" context=\"None\" contextValue=\"12345\" pop-direction=\"up\">\n <q2-dropdown-item>Item 1 Text</q2-dropdown-item>\n <q2-dropdown-item>Item 2 Text</q2-dropdown-item>\n </q2-dropdown>\n `,\n });\n });\n\n it.skip('still works with keyboard functionality', async () => {\n page = await setup({\n html: `\n <q2-dropdown name=\"testMenu\" context=\"None\" contextValue=\"12345\" pop-direction=\"up\">\n <q2-dropdown-item>Item 1 Text</q2-dropdown-item>\n <q2-dropdown-item>Item 2 Text</q2-dropdown-item>\n </q2-dropdown>\n `,\n });\n });\n\n describe('Props', () => {\n describe('open', () => {\n it('passes the open property to the popover and dispatches popoverStateChanged event', async () => {\n page = await setup({\n html: `\n <q2-dropdown>\n <q2-dropdown-item>Item 1 Text</q2-dropdown-item>\n <q2-dropdown-item>Item 2 Text</q2-dropdown-item>\n </q2-dropdown>\n `,\n });\n dropdown = await page.find('q2-dropdown');\n popover = await page.find('q2-dropdown >>> q2-popover');\n const popoverStateChangedSpy = await dropdown.spyOnEvent('popoverStateChanged');\n\n expect(await dropdown.getProperty('open')).toBeUndefined();\n expect(await popover.getProperty('open')).toBeUndefined();\n expect(popoverStateChangedSpy).toHaveReceivedEventTimes(0);\n\n await dropdown.setProperty('open', true);\n await page.waitForChanges();\n\n expect(await dropdown.getProperty('open')).toBe(true);\n expect(await popover.getProperty('open')).toBe(true);\n expect(popoverStateChangedSpy).toHaveReceivedEventTimes(1);\n });\n });\n\n describe('block', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-dropdown block>\n <q2-dropdown-item>Item 1 Text</q2-dropdown-item>\n <q2-dropdown-item>Item 2 Text</q2-dropdown-item>\n </q2-dropdown>\n `,\n });\n dropdown = await page.find('q2-dropdown');\n dropdownButton = await page.find('q2-dropdown >>> [test-id=\"dropdownButton\"]');\n popover = await page.find('q2-dropdown >>> q2-popover');\n });\n it('passes the block propery to the host, button, and popover elements', async () => {\n expect(await dropdown.getProperty('block')).toBe(true);\n expect(await dropdownButton.getProperty('block')).toBe(true);\n expect(await popover.getProperty('block')).toBe(true);\n });\n it('sets the display property to block on host and button elements', async () => {\n const dropdownStyles = await dropdown.getComputedStyle();\n const dropdownButtonStyles = await dropdownButton.getComputedStyle();\n\n expect(dropdownStyles.display).toBe('block');\n expect(dropdownButtonStyles.display).toBe('block');\n });\n });\n });\n\n describe('Events', () => {\n describe('popoverStateChanged', () => {\n it('updates open property and scrolls popover container to top', async () => {\n page = await setup({\n html: `\n <q2-dropdown open>\n ${Array.from({ length: 20 })\n .map(i => `<q2-dropdown-item>Item ${i} Text</q2-dropdown-item>`)\n .join('')}\n </q2-dropdown>\n `,\n });\n\n dropdown = await page.find('q2-dropdown');\n popover = await page.find('q2-dropdown >>> q2-popover');\n\n expect(await dropdown.getProperty('open')).toBe(true);\n expect(await popover.getProperty('open')).toBe(true);\n\n // Manually set the scrollTop to 100\n await popover.callMethod('scrollContainerTo', { top: 100 });\n await page.waitForChanges();\n\n // Ensure the scrollTop is 100\n let containerScrollTop = await getNestedElementProperty(\n page,\n ['q2-dropdown', 'q2-popover', '.container'],\n 'scrollTop'\n );\n expect(containerScrollTop).toEqual(100);\n\n // Close the popover\n await page.$eval('q2-dropdown', el =>\n el.dispatchEvent(new CustomEvent('popoverStateChanged', { detail: { open: false } }))\n );\n\n expect(await dropdown.getProperty('open')).toBe(false);\n expect(await popover.getProperty('open')).toBe(false);\n\n // Ensure the scrollTop is reset to 0\n containerScrollTop = await getNestedElementProperty(\n page,\n ['q2-dropdown', 'q2-popover', '.container'],\n 'scrollTop'\n );\n expect(containerScrollTop).toEqual(0);\n });\n });\n });\n\n describe('Mouse', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-dropdown icon=\"options\">\n <q2-dropdown-item test-id=\"option-1\">Item 1 Text</q2-dropdown-item>\n <q2-dropdown-item test-id=\"option-2\">Item 2 Text</q2-dropdown-item>\n </q2-dropdown>\n `,\n });\n dropdown = await page.find('q2-dropdown');\n expect(await dropdown.getProperty('open')).toBeUndefined();\n\n dropdownButton = await page.find('q2-dropdown >>> [test-id=\"dropdownButton\"]');\n buttonFocusSpy = await dropdownButton.spyOnEvent('focus');\n expect(buttonFocusSpy).toHaveReceivedEventTimes(0);\n\n dropdownContainer = await page.find('q2-dropdown >>> click-elsewhere');\n expect(dropdown).not.toHaveAttribute('open');\n expect(dropdownContainer).not.toHaveClass('dropdown-open');\n\n firstOption = await page.find('q2-dropdown-item:first-of-type');\n });\n\n it('opens and closes the dropdown', async () => {\n await dropdownButton.click();\n\n expect(dropdown).toHaveAttribute('open');\n expect(dropdownContainer).toHaveClass('dropdown-open');\n expect(buttonFocusSpy).toHaveReceivedEventTimes(1);\n\n buttonFocusSpy.events = [];\n\n await firstOption.click();\n expect(dropdown).not.toHaveAttribute('open');\n expect(dropdownContainer).not.toHaveClass('dropdown-open');\n\n expect(buttonFocusSpy).toHaveReceivedEventTimes(1);\n\n buttonFocusSpy.events = [];\n\n await dispatchEvent(page, ['q2-dropdown', '[test-id=\"dropdownButton\"]'], 'click');\n expect(dropdownContainer).toHaveClass('dropdown-open');\n\n expect(buttonFocusSpy).toHaveReceivedEventTimes(0);\n\n buttonFocusSpy.events = [];\n\n closeDropdown = await page.find('q2-dropdown >>> .close-dropdown');\n await closeDropdown.focus();\n expect(dropdownContainer).not.toHaveClass('dropdown-open');\n\n expect(buttonFocusSpy).toHaveReceivedEventTimes(0);\n });\n });\n\n describe('Keyboard', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-dropdown>\n <q2-dropdown-item test-id=\"option-1\">Item 1 Text</q2-dropdown-item>\n <q2-dropdown-item test-id=\"option-2\">Item 2 Text</q2-dropdown-item>\n </q2-dropdown>\n `,\n });\n dropdown = await page.find('q2-dropdown');\n expect(await dropdown.getProperty('open')).toBeUndefined();\n\n dropdownButton = await page.find('q2-dropdown >>> [test-id=\"dropdownButton\"]');\n buttonFocusSpy = await dropdownButton.spyOnEvent('focus');\n expect(buttonFocusSpy).toHaveReceivedEventTimes(0);\n\n dropdownContainer = await page.find('q2-dropdown >>> click-elsewhere');\n expect(dropdownContainer).not.toHaveClass('dropdown-open');\n });\n\n it('opens the popover and focuses last item on ArrowUp', async () => {\n await dropdownButton.press('ArrowUp');\n await page.waitForChanges();\n\n expect(dropdownContainer).toHaveClass('dropdown-open');\n expect(buttonFocusSpy).toHaveReceivedEventTimes(2);\n });\n\n it('opens the popover and focuses first item on ArrowDown', async () => {\n await dropdownButton.press('ArrowDown');\n await page.waitForChanges();\n\n expect(dropdownContainer).toHaveClass('dropdown-open');\n expect(buttonFocusSpy).toHaveReceivedEventTimes(2);\n });\n\n describe('when open', () => {\n beforeEach(async () => {\n dropdown.setProperty('open', true);\n await page.waitForChanges();\n expect(dropdownContainer).toHaveClass('dropdown-open');\n buttonFocusSpy.events = [];\n });\n\n it('closes the popover and focuses toggle button on Escape', async () => {\n await dropdownButton.press('Escape');\n await page.waitForChanges();\n\n expect(dropdownContainer).not.toHaveClass('dropdown-open');\n expect(buttonFocusSpy).toHaveReceivedEventTimes(2);\n });\n\n it('does not close or escape the popover on Tab', async () => {\n await dropdownButton.press('ArrowDown');\n await dropdownButton.press('Tab');\n await page.waitForChanges();\n\n expect(dropdownContainer).toHaveClass('dropdown-open');\n expect(buttonFocusSpy).toHaveReceivedEventTimes(4);\n });\n });\n });\n\n describe('Deprecations', () => {\n it('handles deprecated `popDirection` prop', async () => {\n page = await setup({\n html: `\n <q2-dropdown pop-direction=\"up\">\n <q2-dropdown-item>Item 1</q2-dropdown-item>\n <q2-dropdown-item>Item 2</q2-dropdown-item>\n </q2-dropdown>\n `,\n });\n await page.waitForChanges();\n dropdown = await page.find('q2-dropdown');\n expect(await dropdown.getProperty('popDirection')).toEqual('up');\n expect(await dropdown.getProperty('popoverDirection')).toEqual('up');\n\n await dropdown.setProperty('popDirection', 'down');\n await page.waitForChanges();\n\n expect(await dropdown.getProperty('popDirection')).toEqual('down');\n expect(await dropdown.getProperty('popoverDirection')).toEqual('down');\n });\n\n it('handles deprecated `ariaLabel` prop', async () => {\n const label = 'My Label';\n page = await setup({\n html: `\n <q2-dropdown aria-label=\"${label}\">\n <q2-dropdown-item>Item 1</q2-dropdown-item>\n <q2-dropdown-item>Item 2</q2-dropdown-item>\n </q2-dropdown>\n `,\n });\n await page.waitForChanges();\n await testDeprecatedAriaLabel(await page.find('q2-dropdown'), label);\n const innerButton = await page.find('q2-dropdown >>> q2-btn');\n expect(innerButton).toEqualAttribute('label', label);\n expect(innerButton).toHaveAttribute('hide-label');\n });\n\n it('handles deprecated `alignment` prop', async () => {\n page = await setup({\n html: `\n <q2-dropdown alignment=\"left\">\n <q2-dropdown-item>Item 1</q2-dropdown-item>\n <q2-dropdown-item>Item 2</q2-dropdown-item>\n </q2-dropdown>\n `,\n });\n await page.waitForChanges();\n dropdown = await page.find('q2-dropdown');\n expect(await dropdown.getProperty('alignment')).toEqual('left');\n expect(await dropdown.getProperty('popoverAlignment')).toEqual('left');\n\n await dropdown.setProperty('alignment', 'right');\n await page.waitForChanges();\n\n expect(await dropdown.getProperty('alignment')).toEqual('right');\n expect(await dropdown.getProperty('popoverAlignment')).toEqual('right');\n });\n });\n});\n"]}
1
+ {"version":3,"file":"q2-dropdown-test.e2e.js","sourceRoot":"","sources":["../../../test/elements/q2-dropdown-test.e2e.ts"],"names":[],"mappings":"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","sourcesContent":["import { E2EElement, E2EPage, EventSpy, newSpecPage } from '@stencil/core/testing';\nimport {\n setTestStrings,\n setup,\n dispatchEvent,\n promiseMap,\n testDeprecatedAriaLabel,\n getNestedElementProperty,\n getListOfStyleCompilationIssues,\n} from '../helpers';\nimport { Q2Popover } from 'src/components/q2-popover/q2-popover';\nimport { Q2Dropdown } from 'src/components/q2-dropdown/q2-dropdown';\nimport { Q2DropdownItem } from 'src/components/q2-dropdown-item/q2-dropdown-item';\n\nexport type TectonWindow = typeof window & {\n resolveMenu: any;\n navigateTo: any;\n showOverpanel: any;\n};\n\ndescribe('q2-dropdown', () => {\n let page: E2EPage;\n let dropdown: E2EElement;\n let dropdownContainer: E2EElement;\n let popover: E2EElement;\n let dropdownButton: E2EElement;\n let buttonFocusSpy: EventSpy;\n let firstOption: E2EElement;\n let closeDropdown: E2EElement;\n\n it('properly compiles CSS vars and functions', async () => {\n const page = await setup({ html: '<q2-dropdown></q2-dropdown>' });\n expect(await getListOfStyleCompilationIssues(page, 'q2-dropdown')).toHaveLength(0);\n });\n\n it('renders base state', async () => {\n page = await setup({\n html: `\n <q2-dropdown>\n <q2-dropdown-item>Item Text</q2-dropdown-item>\n </q2-dropdown>\n `,\n });\n\n const dropdown = await page.find('q2-dropdown');\n expect(dropdown).not.toBeNull();\n\n const dropdownContainer = await page.find('q2-dropdown >>> click-elsewhere');\n expect(dropdownContainer).not.toHaveClass('dropdown-open');\n\n const dropdownButton = await page.find('q2-dropdown >>> [test-id=\"dropdownButton\"]');\n expect(dropdownButton).not.toHaveAttribute('fab');\n expect(dropdownButton).not.toHaveAttribute('intent');\n expect(dropdownButton).not.toHaveAttribute('active');\n expect(dropdownButton).not.toHaveAttribute('disabled');\n expect(await dropdownButton.getProperty('ariaExpanded')).toEqual('false');\n expect(await dropdownButton.getProperty('ariaHasPopup')).toEqual('menu');\n expect(await dropdownButton.getProperty('ariaLabel')).toBe(undefined);\n\n const dropdownButtonIcon = await page.find('q2-dropdown >>> q2-icon');\n expect(dropdownButtonIcon).toBeNull();\n\n const dropdownButtonText = await page.find('q2-dropdown >>> .dropdown-button-text');\n expect(dropdownButtonText).toBeNull();\n\n const dropdownSlot = await page.find('q2-dropdown >>> slot');\n expect(dropdownSlot).not.toBeNull();\n\n const dropdownCloseButton = await page.find('q2-dropdown >>> .close-dropdown');\n expect(dropdownCloseButton).toBeNull();\n });\n\n it('binds button props', async () => {\n page = await setup({\n html: `\n <q2-dropdown\n type=\"icon\"\n icon=\"options\"\n label=\"Label Text\"\n >\n <q2-dropdown-item>Item Text</q2-dropdown-item>\n </q2-dropdown>\n `,\n });\n\n const dropdownButton = await page.find('q2-dropdown >>> [test-id=\"dropdownButton\"]');\n expect(dropdownButton).not.toHaveAttribute('fab');\n expect(dropdownButton).not.toHaveAttribute('intent');\n expect(dropdownButton).not.toHaveAttribute('disabled');\n expect(dropdownButton).not.toHaveAttribute('aria-label');\n\n const dropdownButtonIcon = await page.find('q2-dropdown >>> q2-icon');\n expect(dropdownButtonIcon).not.toBeNull();\n expect(dropdownButtonIcon).toEqualAttribute('type', 'options');\n\n const dropdownButtonText = await page.find('q2-dropdown >>> .dropdown-button-text');\n expect(dropdownButtonText).not.toBeNull();\n expect(dropdownButtonText.innerText).toEqual('Label Text');\n\n const dropdown = await page.find('q2-dropdown');\n dropdown.setProperty('type', 'fab');\n await page.waitForChanges();\n\n expect(dropdownButton).not.toHaveAttribute('icon');\n expect(dropdownButton).toHaveAttribute('fab');\n\n dropdown.setProperty('type', 'primary');\n await page.waitForChanges();\n\n expect(dropdownButton).not.toHaveAttribute('fab');\n expect(dropdownButton).toHaveAttribute('intent');\n expect(dropdownButton).toEqualAttribute('intent', 'workflow-primary');\n\n dropdown.setProperty('type', 'secondary');\n await page.waitForChanges();\n\n expect(dropdownButton).toEqualAttribute('intent', 'workflow-secondary');\n\n dropdown.setProperty('type', 'foo');\n await page.waitForChanges();\n\n expect(dropdownButton).not.toHaveAttribute('icon');\n expect(dropdownButton).not.toHaveAttribute('fab');\n expect(dropdownButton).not.toHaveAttribute('intent');\n\n dropdown.setProperty('ariaLabel', 'Aria-Label Text');\n await page.waitForChanges();\n\n expect(dropdownButton).toHaveAttribute('hide-label');\n expect(dropdownButton).toEqualAttribute('label', 'Aria-Label Text');\n\n dropdown.setProperty('disabled', true);\n await page.waitForChanges();\n\n expect(dropdownButton).toHaveAttribute('disabled');\n });\n\n it('handles focus manipulation', async () => {\n page = await setup({\n html: `\n <q2-dropdown>\n <q2-dropdown-item>Item 1 Text</q2-dropdown-item>\n <q2-dropdown-item>Item 2 Text</q2-dropdown-item>\n </q2-dropdown>\n `,\n });\n\n const dropdownItems = await page.findAll('q2-dropdown q2-dropdown-item');\n const itemSpies = await promiseMap(dropdownItems, el => el.spyOnEvent('focus'));\n expect(itemSpies[0]).toHaveReceivedEventTimes(0);\n expect(itemSpies[1]).toHaveReceivedEventTimes(0);\n\n await dispatchEvent(page, ['q2-dropdown', '[test-id=\"dropdownButton\"]'], 'keydown', {\n key: 'ArrowDown',\n });\n expect(itemSpies[0]).toHaveReceivedEventTimes(1);\n\n await dispatchEvent(page, 'q2-dropdown q2-dropdown-item:first-of-type', 'keydown', {\n key: 'ArrowDown',\n bubbles: true,\n });\n expect(itemSpies[1]).toHaveReceivedEventTimes(1);\n\n await dispatchEvent(page, 'q2-dropdown q2-dropdown-item:last-of-type', 'keydown', {\n key: 'ArrowDown',\n bubbles: true,\n });\n expect(itemSpies[0]).toHaveReceivedEventTimes(2);\n\n await dispatchEvent(page, 'q2-dropdown q2-dropdown-item:first-of-type', 'keydown', {\n key: 'Down',\n bubbles: true,\n });\n expect(itemSpies[1]).toHaveReceivedEventTimes(2);\n\n await dispatchEvent(page, 'q2-dropdown q2-dropdown-item:last-of-type', 'keydown', {\n key: 'Down',\n bubbles: true,\n });\n expect(itemSpies[0]).toHaveReceivedEventTimes(3);\n\n await dispatchEvent(page, 'q2-dropdown q2-dropdown-item:first-of-type', 'keydown', {\n key: 'ArrowUp',\n bubbles: true,\n });\n expect(itemSpies[1]).toHaveReceivedEventTimes(3);\n\n await dispatchEvent(page, 'q2-dropdown q2-dropdown-item:last-of-type', 'keydown', {\n key: 'ArrowUp',\n bubbles: true,\n });\n expect(itemSpies[0]).toHaveReceivedEventTimes(4);\n\n await dispatchEvent(page, 'q2-dropdown q2-dropdown-item:first-of-type', 'keydown', {\n key: 'Up',\n bubbles: true,\n });\n expect(itemSpies[1]).toHaveReceivedEventTimes(4);\n\n await dispatchEvent(page, 'q2-dropdown q2-dropdown-item:last-of-type', 'keydown', {\n key: 'Up',\n bubbles: true,\n });\n expect(itemSpies[0]).toHaveReceivedEventTimes(5);\n });\n\n it('localizes label and aria-label', async () => {\n page = await setup({\n html: `\n <q2-dropdown>\n <q2-dropdown-item>Item Text</q2-dropdown-item>\n </q2-dropdown>\n `,\n });\n\n await setTestStrings(page, {\n 'dropdown.label': 'Label text',\n 'dropdown.ariaLabel': 'Aria-Label text',\n });\n\n const dropdown = await page.find('q2-dropdown');\n\n dropdown.setProperty('label', 'dropdown.label');\n await page.waitForChanges();\n\n const dropdownButtonText = await page.find('q2-dropdown >>> .dropdown-button-text');\n expect(dropdownButtonText).toEqualText('Label text');\n\n dropdown.setProperty('ariaLabel', 'dropdown.ariaLabel');\n await page.waitForChanges();\n\n const dropdownButton = await page.find('q2-dropdown >>> [test-id=\"dropdownButton\"]');\n expect(dropdownButton).toEqualAttribute('label', 'Aria-Label text');\n });\n\n it('regular dropdown with popover-direction=\"up\" opens upward', async () => {\n page = await setup({\n html: `\n <q2-dropdown popover-direction=\"up\">\n <q2-dropdown-item>Item 1 Text</q2-dropdown-item>\n <q2-dropdown-item>Item 2 Text</q2-dropdown-item>\n </q2-dropdown>\n `,\n });\n const popover = await page.find('q2-dropdown >>> q2-popover');\n await dispatchEvent(page, ['q2-dropdown', '[test-id=\"dropdownButton\"]'], 'click');\n expect(await popover.getProperty('direction')).toEqual('up');\n });\n\n it('with popover-alignment=\"left\" opens left', async () => {\n page = await setup({\n html: `\n <q2-dropdown popover-alignment=\"left\">\n <q2-dropdown-item>Item 1 Text</q2-dropdown-item>\n <q2-dropdown-item>Item 2 Text</q2-dropdown-item>\n </q2-dropdown>\n `,\n });\n const popover = await page.find('q2-dropdown >>> q2-popover');\n await dispatchEvent(page, ['q2-dropdown', '[test-id=\"dropdownButton\"]'], 'click');\n expect(await popover.getProperty('align')).toEqual('left');\n });\n\n it('if type custom, q2-btn icon attribute is false', async () => {\n page = await setup({\n html: `\n <q2-dropdown type=\"custom\">\n <q2-avatar slot=\"custom-dropdown-button\"></q2-avatar>\n <q2-dropdown-item>Item 1 Text</q2-dropdown-item>\n </q2-dropdown>\n `,\n });\n const dropdownCustom = await page.find('q2-dropdown >>> [test-id=\"dropdownButton\"]');\n expect(dropdownCustom).not.toHaveAttribute('icon');\n });\n\n it('if type custom, show custom-dropdown-button slot', async () => {\n page = await setup({\n html: `\n <q2-dropdown type=\"custom\">\n <q2-avatar slot=\"custom-dropdown-button\"></q2-avatar>\n <q2-dropdown-item>Item 1 Text</q2-dropdown-item>\n </q2-dropdown>\n `,\n });\n const dropdownCustom = await page.find('q2-dropdown >>> [test-id=\"dropdownButton\"]');\n expect(dropdownCustom).not.toHaveAttribute('icon');\n\n const dropdownSlot = await page.find('q2-dropdown >>> [test-id=\"dropdownCustom\"]');\n expect(dropdownSlot).not.toHaveClass('hidden');\n\n const dropdown = await page.find('q2-dropdown');\n dropdown.setAttribute('type', 'icon');\n await page.waitForChanges();\n\n const dropdownButton = await page.find('q2-dropdown >>> [test-id=\"dropdownCustom\"]');\n expect(dropdownButton).toHaveClass('hidden');\n });\n\n describe('focus transferring', () => {\n const html = `<q2-dropdown style=\"margin-top: 9999px\">\n <q2-dropdown-item>Item 1 Text</q2-dropdown-item>\n <q2-dropdown-item>Item 2 Text</q2-dropdown-item>\n <q2-dropdown-item>Item 3 Text</q2-dropdown-item>\n <q2-dropdown-item>Item 4 Text</q2-dropdown-item>\n <q2-dropdown-item>Item 5 Text</q2-dropdown-item>\n </q2-dropdown>`;\n\n it('focuses when focus event dispatched ', async () => {\n page = await setup({ html });\n await dispatchEvent(page, ['q2-dropdown'], 'focus');\n const innerActiveTestId = async (page: E2EPage) => {\n return page.$eval('q2-dropdown', el => {\n return el.shadowRoot.querySelector('q2-btn').shadowRoot.activeElement?.getAttribute('test-id');\n });\n };\n expect(await innerActiveTestId(page)).toEqual('q2BtnInnerButton');\n });\n\n it('focuses when focus method called ', async () => {\n page = await setup({ html });\n const dropdown = await page.find('q2-dropdown');\n await dropdown.triggerEvent('focus');\n await page.waitForChanges();\n const innerActiveTestId = async (page: E2EPage) => {\n return page.$eval('q2-dropdown', el => {\n return el.shadowRoot.querySelector('q2-btn').shadowRoot.activeElement?.getAttribute('test-id');\n });\n };\n expect(await innerActiveTestId(page)).toEqual('q2BtnInnerButton');\n });\n });\n\n it.skip('adds menu items from the config', async () => {\n page = await setup({\n html: `\n <q2-dropdown name=\"testMenu\" pop-direction=\"up\">\n <q2-dropdown-item>Item 1 Text</q2-dropdown-item>\n <q2-dropdown-item>Item 2 Text</q2-dropdown-item>\n </q2-dropdown>\n `,\n });\n\n const resolveMenu = jest.fn().mockImplementation(name => {\n expect(name).toEqual('testMenu');\n return [\n {\n itemLabel: 'testItem',\n action: 'navigateTo',\n featureName: 'testFeature',\n },\n ];\n });\n await page.exposeFunction('resolveMenu', resolveMenu);\n await page.evaluate(() => {\n (this as any).TectonElements.resolveMenu = resolveMenu;\n });\n expect(resolveMenu).toHaveBeenCalledTimes(0);\n\n const dropdown = await page.find('q2-dropdown');\n dropdown.setProperty('context', 'None');\n await page.waitForChanges();\n expect(resolveMenu).toHaveBeenCalledTimes(1);\n\n const dropdownItems = await page.findAll('q2-dropdown q2-dropdown-item');\n expect(dropdownItems.length).toEqual(3);\n });\n\n it.skip('replaces menu outlet items when the contextValue changes', async () => {\n page = await setup({\n html: `\n <q2-dropdown name=\"testMenu\" context=\"None\" contextValue=\"12345\" pop-direction=\"up\">\n <q2-dropdown-item>Item 1 Text</q2-dropdown-item>\n <q2-dropdown-item>Item 2 Text</q2-dropdown-item>\n </q2-dropdown>\n `,\n });\n });\n\n it.skip('still works with keyboard functionality', async () => {\n page = await setup({\n html: `\n <q2-dropdown name=\"testMenu\" context=\"None\" contextValue=\"12345\" pop-direction=\"up\">\n <q2-dropdown-item>Item 1 Text</q2-dropdown-item>\n <q2-dropdown-item>Item 2 Text</q2-dropdown-item>\n </q2-dropdown>\n `,\n });\n });\n\n describe('Props', () => {\n describe('open', () => {\n it('passes the open property to the popover and dispatches popoverStateChanged event', async () => {\n page = await setup({\n html: `\n <q2-dropdown>\n <q2-dropdown-item>Item 1 Text</q2-dropdown-item>\n <q2-dropdown-item>Item 2 Text</q2-dropdown-item>\n </q2-dropdown>\n `,\n });\n dropdown = await page.find('q2-dropdown');\n popover = await page.find('q2-dropdown >>> q2-popover');\n const popoverStateChangedSpy = await dropdown.spyOnEvent('popoverStateChanged');\n\n expect(await dropdown.getProperty('open')).toBeUndefined();\n expect(await popover.getProperty('open')).toBeUndefined();\n expect(popoverStateChangedSpy).toHaveReceivedEventTimes(0);\n\n await dropdown.setProperty('open', true);\n await page.waitForChanges();\n\n expect(await dropdown.getProperty('open')).toBe(true);\n expect(await popover.getProperty('open')).toBe(true);\n expect(popoverStateChangedSpy).toHaveReceivedEventTimes(1);\n });\n });\n\n describe('block', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-dropdown block>\n <q2-dropdown-item>Item 1 Text</q2-dropdown-item>\n <q2-dropdown-item>Item 2 Text</q2-dropdown-item>\n </q2-dropdown>\n `,\n });\n dropdown = await page.find('q2-dropdown');\n dropdownButton = await page.find('q2-dropdown >>> [test-id=\"dropdownButton\"]');\n popover = await page.find('q2-dropdown >>> q2-popover');\n });\n it('passes the block propery to the host, button, and popover elements', async () => {\n expect(await dropdown.getProperty('block')).toBe(true);\n expect(await dropdownButton.getProperty('block')).toBe(true);\n expect(await popover.getProperty('block')).toBe(true);\n });\n it('sets the display property to block on host and button elements', async () => {\n const dropdownStyles = await dropdown.getComputedStyle();\n const dropdownButtonStyles = await dropdownButton.getComputedStyle();\n\n expect(dropdownStyles.display).toBe('block');\n expect(dropdownButtonStyles.display).toBe('block');\n });\n });\n\n describe('popoverMode', () => {\n it('does not set any mode on the popover (default)', async () => {\n const page = await newSpecPage({\n components: [Q2Popover, Q2Dropdown, Q2DropdownItem],\n html: `\n <q2-dropdown>\n <q2-dropdown-item>Item 1 Text</q2-dropdown-item>\n <q2-dropdown-item>Item 2 Text</q2-dropdown-item>\n </q2-dropdown>\n `,\n });\n expect(page.root.shadowRoot.querySelector('q2-popover').mode).toBeNull();\n });\n\n it('sets the value of popoverMode as the mode on the popover', async () => {\n const page = await newSpecPage({\n components: [Q2Popover, Q2Dropdown, Q2DropdownItem],\n html: `\n <q2-dropdown popover-mode=\"legacy\">\n <q2-dropdown-item>Item 1 Text</q2-dropdown-item>\n <q2-dropdown-item>Item 2 Text</q2-dropdown-item>\n </q2-dropdown>\n `,\n });\n expect(page.root.shadowRoot.querySelector('q2-popover').mode).toBe('legacy');\n });\n });\n });\n\n describe('Events', () => {\n describe('popoverStateChanged', () => {\n it('updates open property and scrolls popover container to top', async () => {\n page = await setup({\n html: `\n <q2-dropdown open>\n ${Array.from({ length: 20 })\n .map(i => `<q2-dropdown-item>Item ${i} Text</q2-dropdown-item>`)\n .join('')}\n </q2-dropdown>\n `,\n });\n\n dropdown = await page.find('q2-dropdown');\n popover = await page.find('q2-dropdown >>> q2-popover');\n\n expect(await dropdown.getProperty('open')).toBe(true);\n expect(await popover.getProperty('open')).toBe(true);\n\n // Manually set the scrollTop to 100\n await popover.callMethod('scrollContainerTo', { top: 100 });\n await page.waitForChanges();\n\n // Ensure the scrollTop is 100\n let containerScrollTop = await getNestedElementProperty(\n page,\n ['q2-dropdown', 'q2-popover', '.container'],\n 'scrollTop'\n );\n expect(containerScrollTop).toEqual(100);\n\n // Close the popover\n await page.$eval('q2-dropdown', el =>\n el.dispatchEvent(new CustomEvent('popoverStateChanged', { detail: { open: false } }))\n );\n\n expect(await dropdown.getProperty('open')).toBe(false);\n expect(await popover.getProperty('open')).toBe(false);\n\n // Ensure the scrollTop is reset to 0\n containerScrollTop = await getNestedElementProperty(\n page,\n ['q2-dropdown', 'q2-popover', '.container'],\n 'scrollTop'\n );\n expect(containerScrollTop).toEqual(0);\n });\n });\n });\n\n describe('Mouse', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-dropdown icon=\"options\">\n <q2-dropdown-item test-id=\"option-1\">Item 1 Text</q2-dropdown-item>\n <q2-dropdown-item test-id=\"option-2\">Item 2 Text</q2-dropdown-item>\n </q2-dropdown>\n `,\n });\n dropdown = await page.find('q2-dropdown');\n expect(await dropdown.getProperty('open')).toBeUndefined();\n\n dropdownButton = await page.find('q2-dropdown >>> [test-id=\"dropdownButton\"]');\n buttonFocusSpy = await dropdownButton.spyOnEvent('focus');\n expect(buttonFocusSpy).toHaveReceivedEventTimes(0);\n\n dropdownContainer = await page.find('q2-dropdown >>> click-elsewhere');\n expect(dropdown).not.toHaveAttribute('open');\n expect(dropdownContainer).not.toHaveClass('dropdown-open');\n\n firstOption = await page.find('q2-dropdown-item:first-of-type');\n });\n\n it('opens and closes the dropdown', async () => {\n await dropdownButton.click();\n\n expect(dropdown).toHaveAttribute('open');\n expect(dropdownContainer).toHaveClass('dropdown-open');\n expect(buttonFocusSpy).toHaveReceivedEventTimes(1);\n\n buttonFocusSpy.events = [];\n\n await firstOption.click();\n expect(dropdown).not.toHaveAttribute('open');\n expect(dropdownContainer).not.toHaveClass('dropdown-open');\n\n expect(buttonFocusSpy).toHaveReceivedEventTimes(1);\n\n buttonFocusSpy.events = [];\n\n await dispatchEvent(page, ['q2-dropdown', '[test-id=\"dropdownButton\"]'], 'click');\n expect(dropdownContainer).toHaveClass('dropdown-open');\n\n expect(buttonFocusSpy).toHaveReceivedEventTimes(0);\n\n buttonFocusSpy.events = [];\n\n closeDropdown = await page.find('q2-dropdown >>> .close-dropdown');\n await closeDropdown.focus();\n expect(dropdownContainer).not.toHaveClass('dropdown-open');\n\n expect(buttonFocusSpy).toHaveReceivedEventTimes(0);\n });\n });\n\n describe('Keyboard', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-dropdown>\n <q2-dropdown-item test-id=\"option-1\">Item 1 Text</q2-dropdown-item>\n <q2-dropdown-item test-id=\"option-2\">Item 2 Text</q2-dropdown-item>\n </q2-dropdown>\n `,\n });\n dropdown = await page.find('q2-dropdown');\n expect(await dropdown.getProperty('open')).toBeUndefined();\n\n dropdownButton = await page.find('q2-dropdown >>> [test-id=\"dropdownButton\"]');\n buttonFocusSpy = await dropdownButton.spyOnEvent('focus');\n expect(buttonFocusSpy).toHaveReceivedEventTimes(0);\n\n dropdownContainer = await page.find('q2-dropdown >>> click-elsewhere');\n expect(dropdownContainer).not.toHaveClass('dropdown-open');\n });\n\n it('opens the popover and focuses last item on ArrowUp', async () => {\n await dropdownButton.press('ArrowUp');\n await page.waitForChanges();\n\n expect(dropdownContainer).toHaveClass('dropdown-open');\n expect(buttonFocusSpy).toHaveReceivedEventTimes(2);\n });\n\n it('opens the popover and focuses first item on ArrowDown', async () => {\n await dropdownButton.press('ArrowDown');\n await page.waitForChanges();\n\n expect(dropdownContainer).toHaveClass('dropdown-open');\n expect(buttonFocusSpy).toHaveReceivedEventTimes(2);\n });\n\n describe('when open', () => {\n beforeEach(async () => {\n dropdown.setProperty('open', true);\n await page.waitForChanges();\n expect(dropdownContainer).toHaveClass('dropdown-open');\n buttonFocusSpy.events = [];\n });\n\n it('closes the popover and focuses toggle button on Escape', async () => {\n await dropdownButton.press('Escape');\n await page.waitForChanges();\n\n expect(dropdownContainer).not.toHaveClass('dropdown-open');\n expect(buttonFocusSpy).toHaveReceivedEventTimes(2);\n });\n\n it('does not close or escape the popover on Tab', async () => {\n await dropdownButton.press('ArrowDown');\n await dropdownButton.press('Tab');\n await page.waitForChanges();\n\n expect(dropdownContainer).toHaveClass('dropdown-open');\n expect(buttonFocusSpy).toHaveReceivedEventTimes(4);\n });\n });\n });\n\n describe('Deprecations', () => {\n it('handles deprecated `popDirection` prop', async () => {\n page = await setup({\n html: `\n <q2-dropdown pop-direction=\"up\">\n <q2-dropdown-item>Item 1</q2-dropdown-item>\n <q2-dropdown-item>Item 2</q2-dropdown-item>\n </q2-dropdown>\n `,\n });\n await page.waitForChanges();\n dropdown = await page.find('q2-dropdown');\n expect(await dropdown.getProperty('popDirection')).toEqual('up');\n expect(await dropdown.getProperty('popoverDirection')).toEqual('up');\n\n await dropdown.setProperty('popDirection', 'down');\n await page.waitForChanges();\n\n expect(await dropdown.getProperty('popDirection')).toEqual('down');\n expect(await dropdown.getProperty('popoverDirection')).toEqual('down');\n });\n\n it('handles deprecated `ariaLabel` prop', async () => {\n const label = 'My Label';\n page = await setup({\n html: `\n <q2-dropdown aria-label=\"${label}\">\n <q2-dropdown-item>Item 1</q2-dropdown-item>\n <q2-dropdown-item>Item 2</q2-dropdown-item>\n </q2-dropdown>\n `,\n });\n await page.waitForChanges();\n await testDeprecatedAriaLabel(await page.find('q2-dropdown'), label);\n const innerButton = await page.find('q2-dropdown >>> q2-btn');\n expect(innerButton).toEqualAttribute('label', label);\n expect(innerButton).toHaveAttribute('hide-label');\n });\n\n it('handles deprecated `alignment` prop', async () => {\n page = await setup({\n html: `\n <q2-dropdown alignment=\"left\">\n <q2-dropdown-item>Item 1</q2-dropdown-item>\n <q2-dropdown-item>Item 2</q2-dropdown-item>\n </q2-dropdown>\n `,\n });\n await page.waitForChanges();\n dropdown = await page.find('q2-dropdown');\n expect(await dropdown.getProperty('alignment')).toEqual('left');\n expect(await dropdown.getProperty('popoverAlignment')).toEqual('left');\n\n await dropdown.setProperty('alignment', 'right');\n await page.waitForChanges();\n\n expect(await dropdown.getProperty('alignment')).toEqual('right');\n expect(await dropdown.getProperty('popoverAlignment')).toEqual('right');\n });\n });\n});\n"]}
@@ -216,6 +216,13 @@ describe('q2-icon', () => {
216
216
  await specPage.waitForChanges();
217
217
  expect(specPage.root).toEqualHtml(closeIconMarkup);
218
218
  });
219
+ it('does not add the href to the use element if the icon is not found', async () => {
220
+ specPage = await newSpecPage({
221
+ components: [Q2Icon],
222
+ html: '<q2-icon type="not-found"></q2-icon>',
223
+ });
224
+ expect(specPage.root).toEqualHtml(notFoundIconMarkup);
225
+ });
219
226
  describe("when type is 'custom'", () => {
220
227
  it('it renders in a slot and adds necessary attributes', async () => {
221
228
  specPage = await newSpecPage({
@@ -448,6 +455,16 @@ describe('q2-icon', () => {
448
455
  });
449
456
  });
450
457
  });
458
+ const notFoundIconMarkup = `
459
+ <q2-icon type="not-found">
460
+ <mock:shadow-root>
461
+ <svg aria-hidden="true" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
462
+ <use></use>
463
+ <g></g>
464
+ </svg>
465
+ </mock:shadow-root>
466
+ </q2-icon>
467
+ `;
451
468
  const closeIconMarkup = `
452
469
  <q2-icon type="close">
453
470
  <mock:shadow-root>
@@ -1 +1 @@
1
- {"version":3,"file":"q2-icon-test.e2e.js","sourceRoot":"","sources":["../../../test/elements/q2-icon-test.e2e.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,WAAW,EAAY,MAAM,uBAAuB,CAAC;AACjF,OAAO,EAAE,+BAA+B,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnF,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAE9D,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACrB,IAAI,OAAgB,CAAC;IACrB,IAAI,QAAkB,CAAC;IAEvB,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,CAAC,CAAC;QAC1D,MAAM,CAAC,MAAM,+BAA+B,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QACxB,IAAI,sBAAgC,CAAC;QACrC,IAAI,oBAA8B,CAAC;QAEnC,UAAU,CAAC,KAAK,IAAI,EAAE;YAClB,OAAO,GAAG,MAAM,KAAK,CAAC;gBAClB,IAAI,EAAE,EAAE;aACX,CAAC,CAAC;YACH,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAChC,OAAO,CAAC,UAAU,CAAC,kCAAkC,CAAC,CAAC;YACvD,sBAAsB,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;YACzE,oBAAoB,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;YACrE,MAAM,OAAO,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC;YACjD,MAAM,OAAO,CAAC,eAAe,CAAC,yBAAyB,CAAC,CAAC;YACzD,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;YAC1C,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;YAClE,MAAM,CAAC,gBAAgB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAEzC,MAAM,eAAe,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;YAC5C,MAAM,CAAC,eAAe,CAAC,CAAC,UAAU,EAAE,CAAC;YACrC,MAAM,CAAC,CAAC,MAAM,eAAe,CAAC,gBAAgB,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC/E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;YAC7B,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;YACtE,MAAM,CAAC,cAAc,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAEvC,MAAM,aAAa,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC,aAAa,CAAC,CAAC,UAAU,EAAE,CAAC;YACnC,MAAM,CAAC,aAAa,CAAC,CAAC,gBAAgB,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC;YACvE,MAAM,CAAC,aAAa,CAAC,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;YACpC,MAAM,CAAC,sBAAsB,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;YAC3D,MAAM,CAAC,oBAAoB,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;YAChD,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACzD,MAAM,CAAC,UAAU,CAAC,CAAC,UAAU,EAAE,CAAC;YAChC,MAAM,CAAC,UAAU,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACnD,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;YAEnE,MAAM,CAAC,cAAc,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAEvC,MAAM,aAAa,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC,aAAa,CAAC,CAAC,UAAU,EAAE,CAAC;YACnC,MAAM,CAAC,aAAa,CAAC,CAAC,gBAAgB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAC1D,MAAM,CAAC,aAAa,CAAC,CAAC,WAAW,CAAC;;;;;;aAMjC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,kDAAkD,EAAE,GAAG,EAAE;YAC9D,UAAU,CAAC,KAAK,IAAI,EAAE;gBAClB,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC3C,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBAC1C,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC/B,MAAM,OAAO,CAAC,eAAe,CAAC,uBAAuB,CAAC,CAAC;YAC3D,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;gBACpD,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;gBAClE,MAAM,CAAC,gBAAgB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBAEzC,MAAM,eAAe,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;gBAC5C,MAAM,CAAC,eAAe,CAAC,CAAC,UAAU,EAAE,CAAC;gBACrC,MAAM,CAAC,CAAC,MAAM,eAAe,CAAC,gBAAgB,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC/E,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;gBAC7D,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;gBACtE,MAAM,CAAC,cAAc,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBAEvC,MAAM,gBAAgB,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;gBAC3C,MAAM,CAAC,gBAAgB,CAAC,CAAC,gBAAgB,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC;gBAE1E,MAAM,gBAAgB,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;gBAC3C,MAAM,CAAC,gBAAgB,CAAC,CAAC,UAAU,EAAE,CAAC;gBACtC,MAAM,CAAC,gBAAgB,CAAC,CAAC,gBAAgB,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;gBACxE,MAAM,CAAC,gBAAgB,CAAC,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;YAC5D,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;gBACpC,MAAM,CAAC,sBAAsB,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;gBAC3D,MAAM,CAAC,oBAAoB,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;YAC7D,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;gBAChD,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBACzD,MAAM,CAAC,UAAU,CAAC,CAAC,UAAU,EAAE,CAAC;gBAChC,MAAM,CAAC,UAAU,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;YAChE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;gBACnD,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;gBACnE,MAAM,CAAC,cAAc,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBAEvC,MAAM,aAAa,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;gBACxC,MAAM,CAAC,aAAa,CAAC,CAAC,UAAU,EAAE,CAAC;gBACnC,MAAM,CAAC,aAAa,CAAC,CAAC,gBAAgB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;gBAC5D,MAAM,CAAC,aAAa,CAAC,CAAC,WAAW,CAAC;;;;;iBAKjC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QACnB,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;YACpB,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;gBAC1D,OAAO,GAAG,MAAM,KAAK,CAAC;oBAClB,IAAI,EAAE,iCAAiC;iBAC1C,CAAC,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC3C,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxD,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAChD,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;gBACxD,OAAO,GAAG,MAAM,KAAK,CAAC;oBAClB,IAAI,EAAE,wCAAwC;iBACjD,CAAC,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC3C,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxD,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAChD,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;YACnB,UAAU,CAAC,KAAK,IAAI,EAAE;gBAClB,aAAa,CAAC;;;;;;iBAMb,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,SAAS,CAAC,GAAG,EAAE;gBACX,IAAI,CAAC,eAAe,EAAE,CAAC;YAC3B,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;gBACvD,QAAQ,GAAG,MAAM,WAAW,CAAC;oBACzB,UAAU,EAAE,CAAC,MAAM,CAAC;oBACpB,IAAI,EAAE,mDAAmD;iBAC5D,CAAC,CAAC;gBAEH,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;;;;;;;;;;;;;;;;;;iBAkBjC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;YAClB,UAAU,CAAC,KAAK,IAAI,EAAE;gBAClB,aAAa,CAAC;;;;;;iBAMb,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,SAAS,CAAC,GAAG,EAAE;gBACX,IAAI,CAAC,eAAe,EAAE,CAAC;YAC3B,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;gBAC/C,QAAQ,GAAG,MAAM,WAAW,CAAC;oBACzB,UAAU,EAAE,CAAC,MAAM,CAAC;oBACpB,IAAI,EAAE,qBAAqB;iBAC9B,CAAC,CAAC;gBAEH,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;gBACnD,QAAQ,GAAG,MAAM,WAAW,CAAC;oBACzB,UAAU,EAAE,CAAC,MAAM,CAAC;oBACpB,IAAI,EAAE,kCAAkC;iBAC3C,CAAC,CAAC;gBAEH,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;gBAC7C,QAAQ,GAAG,MAAM,WAAW,CAAC;oBACzB,UAAU,EAAE,CAAC,MAAM,CAAC;oBACpB,IAAI,EAAE,kCAAkC;iBAC3C,CAAC,CAAC;gBAEH,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;gBAEnD,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;gBAC/B,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAEhC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;gBAC5C,QAAQ,GAAG,MAAM,WAAW,CAAC;oBACzB,UAAU,EAAE,CAAC,MAAM,CAAC;oBACpB,IAAI,EAAE,qBAAqB;iBAC9B,CAAC,CAAC;gBAEH,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;gBAEnD,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;gBAC7B,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAEhC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;gBACnC,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;oBAChE,QAAQ,GAAG,MAAM,WAAW,CAAC;wBACzB,UAAU,EAAE,CAAC,MAAM,CAAC;wBACpB,IAAI,EAAE;;;;;;yBAML;qBACJ,CAAC,CAAC;oBAEH,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;oBAE/C,MAAM,CAAC,GAAG,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;oBAC5C,MAAM,CAAC,GAAG,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,4BAA4B,CAAC,CAAC;oBACpE,MAAM,CAAC,GAAG,CAAC,CAAC,gBAAgB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;oBACpD,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC;oBAEnD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;;;;;;;;;qBASjC,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;oBACvF,QAAQ,GAAG,MAAM,WAAW,CAAC;wBACzB,UAAU,EAAE,CAAC,MAAM,CAAC;wBACpB,IAAI,EAAE;;;;;;yBAML;qBACJ,CAAC,CAAC;oBAEH,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;oBAE/C,MAAM,CAAC,GAAG,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;oBAC5C,MAAM,CAAC,GAAG,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,4BAA4B,CAAC,CAAC;oBACpE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;oBAC/C,MAAM,CAAC,GAAG,CAAC,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC;oBAE/C,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;;;;;;;;;;;;qBAYjC,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACrB,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;YAClB,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;gBAC5D,OAAO,GAAG,MAAM,KAAK,CAAC;oBAClB,IAAI,EAAE,iDAAiD;iBAC1D,CAAC,CAAC;gBACH,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;gBAC/D,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;gBAC9D,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;gBAC9D,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;gBACtD,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;YAC5D,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;gBAC/C,OAAO,GAAG,MAAM,KAAK,CAAC;oBAClB,IAAI,EAAE,oIAAoI;iBAC7I,CAAC,CAAC;gBACH,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;gBAC/D,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;gBAC9D,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;gBAC9D,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;gBACpD,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;YACxD,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACrB,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;YACtB,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;gBAC1C,MAAM,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;gBACrB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,UAAU,EAAE,CAAC;YACvC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;gBAC/C,MAAM,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;gBACpB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,CAAC;YACtC,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;YAC5B,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;gBAC/C,MAAM,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;gBACrB,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,aAAa,EAAE,CAAC;YAChD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;gBAC1D,MAAM,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;gBACrB,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,aAAa,EAAE,CAAC;YAChD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;gBAC7D,MAAM,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;gBACpB,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACpD,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;YACtB,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;gBAC/C,MAAM,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;gBACrB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,aAAa,EAAE,CAAC;YAC1C,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;gBAC1D,MAAM,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;gBACrB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,aAAa,EAAE,CAAC;YAC1C,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;gBAC5D,MAAM,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;gBACpB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;YAC5D,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;YAC3B,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;gBACpD,MAAM,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;gBACrB,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,aAAa,EAAE,CAAC;YAC/C,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;gBAC3D,MAAM,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;gBAEpB,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBAC9C,OAAO,CAAC,EAAE,GAAG,wBAAwB,CAAC;gBACtC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBAEnC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,UAAU,EAAE,CAAC;gBAExC,OAAO,CAAC,MAAM,EAAE,CAAC;YACrB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;YAC7B,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;gBAC1D,MAAM,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;gBACrB,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,aAAa,EAAE,CAAC;YACjD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;gBAC7D,MAAM,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;gBACpB,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;YAChE,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACrB,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;YACxC,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;gBAC7C,MAAM,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;gBAC1B,MAAM,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBACtD,eAAe,CAAC,EAAE,GAAG,gBAAgB,CAAC;gBACtC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;gBAE3C,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;gBAEnE,eAAe,CAAC,MAAM,EAAE,CAAC;YAC7B,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;gBAClD,MAAM,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;gBAC1B,MAAM,eAAe,GAAG,IAAI,CAAC,0BAA0B,EAAE,CAAC;gBAE1D,MAAM,CAAC,eAAe,CAAC,CAAC,UAAU,EAAE,CAAC;gBACrC,MAAM,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;YACrE,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;YACzB,UAAU,CAAC,KAAK,IAAI,EAAE;gBAClB,aAAa,EAAE,CAAC;YACpB,CAAC,CAAC,CAAC;YAEH,SAAS,CAAC,GAAG,EAAE;gBACX,IAAI,CAAC,eAAe,EAAE,CAAC;YAC3B,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;gBACnD,MAAM,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;gBAC1B,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,aAAa,EAAE,CAAC;YAC/C,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;gBAC1E,MAAM,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;gBAEpB,MAAM,SAAS,GAAG,IAAI,CAAC,0BAA0B,EAAE,CAAC;gBACpD,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBACpD,aAAa,CAAC,EAAE,GAAG,wBAAwB,CAAC;gBAC5C,aAAa,CAAC,YAAY,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;gBAC9C,SAAS,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;gBAErC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;gBAElD,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;gBAEzB,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;gBAElD,aAAa,CAAC,MAAM,EAAE,CAAC;YAC3B,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;gBACrD,MAAM,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;gBAEpB,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;gBAEzB,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACpE,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;YAC7B,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;gBACzD,MAAM,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;gBACrB,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,aAAa,EAAE,CAAC;YAC3C,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;gBAC7C,MAAM,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;gBAEpB,MAAM,SAAS,GAAG,IAAI,CAAC,0BAA0B,EAAE,CAAC;gBAEpD,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBAC9C,OAAO,CAAC,EAAE,GAAG,WAAW,CAAC;gBACzB,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBAE/B,IAAI,CAAC,eAAe,EAAE,CAAC;gBAEvB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,CAAC;gBACpC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,gBAAgB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;gBAE3D,OAAO,CAAC,MAAM,EAAE,CAAC;YACrB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;CAevB,CAAC;AAEF,MAAM,eAAe,GAAG;;;;;;;;CAQvB,CAAC","sourcesContent":["import { E2EPage, EventSpy, newSpecPage, SpecPage } from '@stencil/core/testing';\nimport { getListOfStyleCompilationIssues, mockIconFetch, setup } from '../helpers';\nimport { Q2Icon } from '../../src/components/q2-icon/q2-icon';\n\ndescribe('q2-icon', () => {\n let e2ePage: E2EPage;\n let specPage: SpecPage;\n\n it('properly compiles CSS vars and functions', async () => {\n const page = await setup({ html: '<q2-icon></q2-icon>' });\n expect(await getListOfStyleCompilationIssues(page, 'q2-icon')).toHaveLength(0);\n });\n\n describe('SVG Sprite', () => {\n let standardLoadedEventSpy: EventSpy;\n let statusLoadedEventSpy: EventSpy;\n\n beforeEach(async () => {\n e2ePage = await setup({\n html: '',\n });\n e2ePage.setDefaultTimeout(5000);\n e2ePage.setContent(`<q2-icon type=\"close\"></q2-icon>`);\n standardLoadedEventSpy = await e2ePage.spyOnEvent('tct-loaded-standard');\n statusLoadedEventSpy = await e2ePage.spyOnEvent('tct-loaded-status');\n await e2ePage.waitForSelector('#tecton-sprites');\n await e2ePage.waitForSelector('#tecton-sprite-standard');\n await e2ePage.waitForChanges();\n });\n\n it('creates the sprite container', async () => {\n const spriteContainers = await e2ePage.findAll('#tecton-sprites');\n expect(spriteContainers).toHaveLength(1);\n\n const spriteContainer = spriteContainers[0];\n expect(spriteContainer).toBeTruthy();\n expect((await spriteContainer.getComputedStyle()).display).toEqual('none');\n });\n\n it('adds the sprite', async () => {\n const spriteElements = await e2ePage.findAll('#tecton-sprites > svg');\n expect(spriteElements).toHaveLength(1);\n\n const spriteElement = spriteElements[0];\n expect(spriteElement).toBeTruthy();\n expect(spriteElement).toEqualAttribute('id', 'tecton-sprite-standard');\n expect(spriteElement).toHaveAttribute('data-loaded');\n });\n\n it('fires the loaded event', async () => {\n expect(standardLoadedEventSpy).toHaveReceivedEventTimes(1);\n expect(statusLoadedEventSpy).toHaveReceivedEventTimes(0);\n });\n\n it('renders the use element to the SVG', async () => {\n const useElement = await e2ePage.find('q2-icon >>> use');\n expect(useElement).toBeTruthy();\n expect(useElement).toEqualAttribute('href', '#tct-close');\n });\n\n it('renders the symbol element to the SVG', async () => {\n const symbolElements = await e2ePage.findAll('q2-icon >>> symbol');\n\n expect(symbolElements).toHaveLength(1);\n\n const symbolElement = symbolElements[0];\n expect(symbolElement).toBeTruthy();\n expect(symbolElement).toEqualAttribute('id', 'tct-close');\n expect(symbolElement).toEqualHtml(`\n <symbol fill=\"none\" id=\"tct-close\" viewbox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <g class=\"stroke-primary\">\n <path d=\"m17.875 6-12 12m0-12 12 12\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </g>\n </symbol>\n `);\n });\n\n describe('when icon is updated to one in a separate sprite', () => {\n beforeEach(async () => {\n const icon = await e2ePage.find('q2-icon');\n await icon.setProperty('type', 'success');\n await e2ePage.waitForChanges();\n await e2ePage.waitForSelector('#tecton-sprite-status');\n });\n\n it('does not create a new sprite container', async () => {\n const spriteContainers = await e2ePage.findAll('#tecton-sprites');\n expect(spriteContainers).toHaveLength(1);\n\n const spriteContainer = spriteContainers[0];\n expect(spriteContainer).toBeTruthy();\n expect((await spriteContainer.getComputedStyle()).display).toEqual('none');\n });\n\n it('adds a new sprite without removing previous one', async () => {\n const spriteElements = await e2ePage.findAll('#tecton-sprites > svg');\n expect(spriteElements).toHaveLength(2);\n\n const oldSpriteElement = spriteElements[0];\n expect(oldSpriteElement).toEqualAttribute('id', 'tecton-sprite-standard');\n\n const newSpriteElement = spriteElements[1];\n expect(newSpriteElement).toBeTruthy();\n expect(newSpriteElement).toEqualAttribute('id', 'tecton-sprite-status');\n expect(newSpriteElement).toHaveAttribute('data-loaded');\n });\n\n it('fires the loaded event', async () => {\n expect(standardLoadedEventSpy).toHaveReceivedEventTimes(1);\n expect(statusLoadedEventSpy).toHaveReceivedEventTimes(1);\n });\n\n it('renders the use element to the SVG', async () => {\n const useElement = await e2ePage.find('q2-icon >>> use');\n expect(useElement).toBeTruthy();\n expect(useElement).toEqualAttribute('href', '#tct-success');\n });\n\n it('renders the symbol element to the SVG', async () => {\n const symbolElements = await e2ePage.findAll('q2-icon >>> symbol');\n expect(symbolElements).toHaveLength(1);\n\n const symbolElement = symbolElements[0];\n expect(symbolElement).toBeTruthy();\n expect(symbolElement).toEqualAttribute('id', 'tct-success');\n expect(symbolElement).toEqualHtml(`\n <symbol fill=\"none\" id=\"tct-success\" viewbox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 21.244a9.244 9.244 0 1 0 0-18.488 9.244 9.244 0 0 0 0 18.488Z\" stroke=\"var(--comp-status-color)\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n <path d=\"m7.754 12.739 2.613 2.613 5.88-5.88\" stroke=\"var(--comp-status-color)\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </symbol>\n `);\n });\n });\n });\n\n describe('Props', () => {\n describe('inline', () => {\n it('uses the default width and height when false', async () => {\n e2ePage = await setup({\n html: `<q2-icon type=\"a11y\"></q2-icon>`,\n });\n const icon = await e2ePage.find('q2-icon');\n const iconComputedStyle = await icon.getComputedStyle();\n expect(iconComputedStyle.width).toEqual('24px');\n expect(iconComputedStyle.height).toEqual('24px');\n });\n\n it('sets the width and height to 1em when true', async () => {\n e2ePage = await setup({\n html: `<q2-icon type=\"a11y\" inline></q2-icon>`,\n });\n const icon = await e2ePage.find('q2-icon');\n const iconComputedStyle = await icon.getComputedStyle();\n expect(iconComputedStyle.width).toEqual('16px');\n expect(iconComputedStyle.height).toEqual('16px');\n });\n });\n\n describe('label', () => {\n beforeEach(async () => {\n mockIconFetch(`\n <symbol fill=\"none\" id=\"tct-close\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <g class=\"close\">\n <path class=\"stroke-primary\" d=\"m17.875 6-12 12m0-12 12 12\"></path>\n </g>\n </symbol>\n `);\n });\n\n afterEach(() => {\n jest.restoreAllMocks();\n });\n\n it('renders the expected output when provided', async () => {\n specPage = await newSpecPage({\n components: [Q2Icon],\n html: '<q2-icon label=\"Iron Man\" type=\"close\"></q2-icon>',\n });\n\n expect(specPage.root).toEqualHtml(`\n <q2-icon label=\"Iron Man\" type=\"close\">\n <mock:shadow-root>\n <svg aria-labelledby=\"label\" role=\"img\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <title id=\"label\">\n Iron Man\n </title>\n <use href=\"#tct-close\"></use>\n <g>\n <symbol fill=\"none\" id=\"tct-close\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <g class=\"close\">\n <path class=\"stroke-primary\" d=\"m17.875 6-12 12m0-12 12 12\"></path>\n </g>\n </symbol>\n </g>\n </svg>\n </mock:shadow-root>\n </q2-icon>\n `);\n });\n });\n\n describe('type', () => {\n beforeEach(async () => {\n mockIconFetch(`\n <symbol fill=\"none\" id=\"tct-close\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <g class=\"close\">\n <path class=\"stroke-primary\" d=\"m17.875 6-12 12m0-12 12 12\"></path>\n </g>\n </symbol>\n `);\n });\n\n afterEach(() => {\n jest.restoreAllMocks();\n });\n\n it('renders nothing when not provided', async () => {\n specPage = await newSpecPage({\n components: [Q2Icon],\n html: '<q2-icon></q2-icon>',\n });\n\n expect(specPage.root).toEqualHtml(emptyIconMarkup);\n });\n\n it('renders expected output when provided', async () => {\n specPage = await newSpecPage({\n components: [Q2Icon],\n html: '<q2-icon type=\"close\"></q2-icon>',\n });\n\n expect(specPage.root).toEqualHtml(closeIconMarkup);\n });\n\n it('clears the content when removed', async () => {\n specPage = await newSpecPage({\n components: [Q2Icon],\n html: '<q2-icon type=\"close\"></q2-icon>',\n });\n\n expect(specPage.root).toEqualHtml(closeIconMarkup);\n\n specPage.root.type = undefined;\n await specPage.waitForChanges();\n\n expect(specPage.root).toEqualHtml(emptyIconMarkup);\n });\n\n it('updates the content when added', async () => {\n specPage = await newSpecPage({\n components: [Q2Icon],\n html: '<q2-icon></q2-icon>',\n });\n\n expect(specPage.root).toEqualHtml(emptyIconMarkup);\n\n specPage.root.type = 'close';\n await specPage.waitForChanges();\n\n expect(specPage.root).toEqualHtml(closeIconMarkup);\n });\n\n describe(\"when type is 'custom'\", () => {\n it('it renders in a slot and adds necessary attributes', async () => {\n specPage = await newSpecPage({\n components: [Q2Icon],\n html: `\n <q2-icon type=\"custom\">\n <svg viewBox=\"0 0 34 34\">\n <circle cx=\"17\" cy=\"17\" r=\"10\" />\n </svg>\n </q2-icon>\n `,\n });\n\n const svg = specPage.root.querySelector('svg');\n\n expect(svg).toEqualAttribute('role', 'img');\n expect(svg).toEqualAttribute('xmlns', 'http://www.w3.org/2000/svg');\n expect(svg).toEqualAttribute('aria-hidden', 'true');\n expect(svg).not.toHaveAttribute('aria-labelledby');\n\n expect(specPage.root).toEqualHtml(`\n <q2-icon type=\"custom\">\n <mock:shadow-root>\n <slot />\n </mock:shadow-root>\n <svg aria-hidden=\"true\" role=\"img\" viewBox=\"0 0 34 34\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"17\" cy=\"17\" r=\"10\" />\n </svg>\n </q2-icon>\n `);\n });\n\n it('it renders in a slot and adds necessary attributes when label is provided', async () => {\n specPage = await newSpecPage({\n components: [Q2Icon],\n html: `\n <q2-icon type=\"custom\" label=\"Iron Man\">\n <svg viewBox=\"0 0 34 34\">\n <circle cx=\"17\" cy=\"17\" r=\"10\" />\n </svg>\n </q2-icon>\n `,\n });\n\n const svg = specPage.root.querySelector('svg');\n\n expect(svg).toEqualAttribute('role', 'img');\n expect(svg).toEqualAttribute('xmlns', 'http://www.w3.org/2000/svg');\n expect(svg).not.toHaveAttribute('aria-hidden');\n expect(svg).toHaveAttribute('aria-labelledby');\n\n expect(specPage.root).toEqualHtml(`\n <q2-icon label=\"Iron Man\" type=\"custom\">\n <mock:shadow-root>\n <slot />\n </mock:shadow-root>\n <svg aria-labelledby=\"label-1000\" role=\"img\" viewBox=\"0 0 34 34\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"17\" cy=\"17\" r=\"10\" />\n <title id=\"label-1000\">\n Iron Man\n </title>\n </svg>\n </q2-icon>\n `);\n });\n });\n });\n });\n\n describe('Styling', () => {\n describe('fill', () => {\n it('uses fallback color when override not provided', async () => {\n e2ePage = await setup({\n html: `<q2-icon type=\"brand-facebook-color\"></q2-icon>`,\n });\n const pathElements = await e2ePage.findAll('q2-icon >>> path');\n const pathOneStyle = await pathElements[0].getComputedStyle();\n const pathTwoStyle = await pathElements[1].getComputedStyle();\n expect(pathOneStyle.fill).toEqual('rgb(57, 87, 154)');\n expect(pathTwoStyle.fill).toEqual('rgb(255, 255, 255)');\n });\n\n it('uses override color when provided', async () => {\n e2ePage = await setup({\n html: `<q2-icon type=\"brand-facebook-color\" style=\"--tct-icon-brand-fill-primary: blue; --tct-icon-brand-fill-secondary: red;\"></q2-icon>`,\n });\n const pathElements = await e2ePage.findAll('q2-icon >>> path');\n const pathOneStyle = await pathElements[0].getComputedStyle();\n const pathTwoStyle = await pathElements[1].getComputedStyle();\n expect(pathOneStyle.fill).toEqual('rgb(0, 0, 255)');\n expect(pathTwoStyle.fill).toEqual('rgb(255, 0, 0)');\n });\n });\n });\n\n describe('Getters', () => {\n describe('isCustom', () => {\n it(\"returns true when type is 'custom'\", () => {\n const icon = new Q2Icon();\n icon.type = 'custom';\n expect(icon.isCustom).toBeTruthy();\n });\n\n it(\"returns false when type is not 'custom'\", () => {\n const icon = new Q2Icon();\n icon.type = 'close';\n expect(icon.isCustom).toBeFalsy();\n });\n });\n\n describe('spriteFileName', () => {\n it(\"returns undefined when type is 'custom'\", () => {\n const icon = new Q2Icon();\n icon.type = 'custom';\n expect(icon.spriteFileName).toBeUndefined();\n });\n\n it('returns undefined when type does not map to a file', () => {\n const icon = new Q2Icon();\n icon.type = 'foobar';\n expect(icon.spriteFileName).toBeUndefined();\n });\n\n it(\"returns the sprite filename when type is not 'custom'\", () => {\n const icon = new Q2Icon();\n icon.type = 'close';\n expect(icon.spriteFileName).toEqual('standard');\n });\n });\n\n describe('spriteId', () => {\n it(\"returns undefined when type is 'custom'\", () => {\n const icon = new Q2Icon();\n icon.type = 'custom';\n expect(icon.spriteId).toBeUndefined();\n });\n\n it('returns undefined when spriteFileName is undefined', () => {\n const icon = new Q2Icon();\n icon.type = 'foobar';\n expect(icon.spriteId).toBeUndefined();\n });\n\n it('returns the sprite ID when spriteFileName is defined', () => {\n const icon = new Q2Icon();\n icon.type = 'close';\n expect(icon.spriteId).toEqual('tecton-sprite-standard');\n });\n });\n\n describe('spriteElement', () => {\n it('returns undefined when spriteId is undefined', () => {\n const icon = new Q2Icon();\n icon.type = 'foobar';\n expect(icon.spriteElement).toBeUndefined();\n });\n\n it('returns the sprite element when spriteId is defined', () => {\n const icon = new Q2Icon();\n icon.type = 'close';\n\n const element = document.createElement('div');\n element.id = 'tecton-sprite-standard';\n document.body.appendChild(element);\n\n expect(icon.spriteElement).toBeTruthy();\n\n element.remove();\n });\n });\n\n describe('spriteEventName', () => {\n it('returns undefined when spriteFileName is undefined', () => {\n const icon = new Q2Icon();\n icon.type = 'foobar';\n expect(icon.spriteEventName).toBeUndefined();\n });\n\n it('returns the event name when spriteFileName is defined', () => {\n const icon = new Q2Icon();\n icon.type = 'close';\n expect(icon.spriteEventName).toEqual('tct-loaded-standard');\n });\n });\n });\n\n describe('Methods', () => {\n describe('getOrCreateSpriteContainer', () => {\n it('returns the existing sprite container', () => {\n const icon = new Q2Icon();\n const spriteContainer = document.createElement('div');\n spriteContainer.id = 'tecton-sprites';\n document.body.appendChild(spriteContainer);\n\n expect(icon.getOrCreateSpriteContainer()).toEqual(spriteContainer);\n\n spriteContainer.remove();\n });\n\n it('creates and returns a new sprite container', () => {\n const icon = new Q2Icon();\n const spriteContainer = icon.getOrCreateSpriteContainer();\n\n expect(spriteContainer).toBeTruthy();\n expect(spriteContainer).toEqualAttribute('id', 'tecton-sprites');\n });\n });\n\n describe('fetchSprite', () => {\n beforeEach(async () => {\n mockIconFetch();\n });\n\n afterEach(() => {\n jest.restoreAllMocks();\n });\n\n it('does nothing when type is not defined', async () => {\n const icon = new Q2Icon();\n icon.fetchSprite();\n expect(icon.spriteElement).toBeUndefined();\n });\n\n it('does not try to recreate sprite element if it already exists', async () => {\n const icon = new Q2Icon();\n icon.type = 'close';\n\n const container = icon.getOrCreateSpriteContainer();\n const spriteElement = document.createElement('SVG');\n spriteElement.id = 'tecton-sprite-standard';\n spriteElement.setAttribute('data-loaded', '');\n container.appendChild(spriteElement);\n\n expect(icon.spriteElement).toEqual(spriteElement);\n\n await icon.fetchSprite();\n\n expect(icon.spriteElement).toEqual(spriteElement);\n\n spriteElement.remove();\n });\n\n it('fetches the sprite when type is defined', async () => {\n const icon = new Q2Icon();\n icon.type = 'close';\n\n await icon.fetchSprite();\n\n expect(icon.spriteElement.tagName.toUpperCase()).toEqual('SVG');\n });\n });\n\n describe('cloneSpriteNode', () => {\n it('returns undefined when spriteElement is undefined', () => {\n const icon = new Q2Icon();\n icon.type = 'foobar';\n icon.cloneSpriteNode();\n expect(icon.iconClone).toBeUndefined();\n });\n\n it('returns a clone of the sprite element', () => {\n const icon = new Q2Icon();\n icon.type = 'close';\n\n const container = icon.getOrCreateSpriteContainer();\n\n const element = document.createElement('div');\n element.id = 'tct-close';\n container.appendChild(element);\n\n icon.cloneSpriteNode();\n\n expect(icon.iconClone).toBeTruthy();\n expect(icon.iconClone).toEqualAttribute('id', 'tct-close');\n\n element.remove();\n });\n });\n });\n});\n\nconst closeIconMarkup = `\n <q2-icon type=\"close\">\n <mock:shadow-root>\n <svg aria-hidden=\"true\" role=\"img\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <use href=\"#tct-close\"></use>\n <g>\n <symbol fill=\"none\" id=\"tct-close\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <g class=\"close\">\n <path class=\"stroke-primary\" d=\"m17.875 6-12 12m0-12 12 12\"></path>\n </g>\n </symbol>\n </g>\n </svg>\n </mock:shadow-root>\n </q2-icon>\n`;\n\nconst emptyIconMarkup = `\n <q2-icon>\n <mock:shadow-root>\n <svg aria-hidden=\"true\" role=\"img\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <g></g>\n </svg>\n </mock:shadow-root>\n </q2-icon>\n`;\n"]}
1
+ {"version":3,"file":"q2-icon-test.e2e.js","sourceRoot":"","sources":["../../../test/elements/q2-icon-test.e2e.ts"],"names":[],"mappings":"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","sourcesContent":["import { E2EPage, EventSpy, newSpecPage, SpecPage } from '@stencil/core/testing';\nimport { getListOfStyleCompilationIssues, mockIconFetch, setup } from '../helpers';\nimport { Q2Icon } from '../../src/components/q2-icon/q2-icon';\n\ndescribe('q2-icon', () => {\n let e2ePage: E2EPage;\n let specPage: SpecPage;\n\n it('properly compiles CSS vars and functions', async () => {\n const page = await setup({ html: '<q2-icon></q2-icon>' });\n expect(await getListOfStyleCompilationIssues(page, 'q2-icon')).toHaveLength(0);\n });\n\n describe('SVG Sprite', () => {\n let standardLoadedEventSpy: EventSpy;\n let statusLoadedEventSpy: EventSpy;\n\n beforeEach(async () => {\n e2ePage = await setup({\n html: '',\n });\n e2ePage.setDefaultTimeout(5000);\n e2ePage.setContent(`<q2-icon type=\"close\"></q2-icon>`);\n standardLoadedEventSpy = await e2ePage.spyOnEvent('tct-loaded-standard');\n statusLoadedEventSpy = await e2ePage.spyOnEvent('tct-loaded-status');\n await e2ePage.waitForSelector('#tecton-sprites');\n await e2ePage.waitForSelector('#tecton-sprite-standard');\n await e2ePage.waitForChanges();\n });\n\n it('creates the sprite container', async () => {\n const spriteContainers = await e2ePage.findAll('#tecton-sprites');\n expect(spriteContainers).toHaveLength(1);\n\n const spriteContainer = spriteContainers[0];\n expect(spriteContainer).toBeTruthy();\n expect((await spriteContainer.getComputedStyle()).display).toEqual('none');\n });\n\n it('adds the sprite', async () => {\n const spriteElements = await e2ePage.findAll('#tecton-sprites > svg');\n expect(spriteElements).toHaveLength(1);\n\n const spriteElement = spriteElements[0];\n expect(spriteElement).toBeTruthy();\n expect(spriteElement).toEqualAttribute('id', 'tecton-sprite-standard');\n expect(spriteElement).toHaveAttribute('data-loaded');\n });\n\n it('fires the loaded event', async () => {\n expect(standardLoadedEventSpy).toHaveReceivedEventTimes(1);\n expect(statusLoadedEventSpy).toHaveReceivedEventTimes(0);\n });\n\n it('renders the use element to the SVG', async () => {\n const useElement = await e2ePage.find('q2-icon >>> use');\n expect(useElement).toBeTruthy();\n expect(useElement).toEqualAttribute('href', '#tct-close');\n });\n\n it('renders the symbol element to the SVG', async () => {\n const symbolElements = await e2ePage.findAll('q2-icon >>> symbol');\n\n expect(symbolElements).toHaveLength(1);\n\n const symbolElement = symbolElements[0];\n expect(symbolElement).toBeTruthy();\n expect(symbolElement).toEqualAttribute('id', 'tct-close');\n expect(symbolElement).toEqualHtml(`\n <symbol fill=\"none\" id=\"tct-close\" viewbox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <g class=\"stroke-primary\">\n <path d=\"m17.875 6-12 12m0-12 12 12\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </g>\n </symbol>\n `);\n });\n\n describe('when icon is updated to one in a separate sprite', () => {\n beforeEach(async () => {\n const icon = await e2ePage.find('q2-icon');\n await icon.setProperty('type', 'success');\n await e2ePage.waitForChanges();\n await e2ePage.waitForSelector('#tecton-sprite-status');\n });\n\n it('does not create a new sprite container', async () => {\n const spriteContainers = await e2ePage.findAll('#tecton-sprites');\n expect(spriteContainers).toHaveLength(1);\n\n const spriteContainer = spriteContainers[0];\n expect(spriteContainer).toBeTruthy();\n expect((await spriteContainer.getComputedStyle()).display).toEqual('none');\n });\n\n it('adds a new sprite without removing previous one', async () => {\n const spriteElements = await e2ePage.findAll('#tecton-sprites > svg');\n expect(spriteElements).toHaveLength(2);\n\n const oldSpriteElement = spriteElements[0];\n expect(oldSpriteElement).toEqualAttribute('id', 'tecton-sprite-standard');\n\n const newSpriteElement = spriteElements[1];\n expect(newSpriteElement).toBeTruthy();\n expect(newSpriteElement).toEqualAttribute('id', 'tecton-sprite-status');\n expect(newSpriteElement).toHaveAttribute('data-loaded');\n });\n\n it('fires the loaded event', async () => {\n expect(standardLoadedEventSpy).toHaveReceivedEventTimes(1);\n expect(statusLoadedEventSpy).toHaveReceivedEventTimes(1);\n });\n\n it('renders the use element to the SVG', async () => {\n const useElement = await e2ePage.find('q2-icon >>> use');\n expect(useElement).toBeTruthy();\n expect(useElement).toEqualAttribute('href', '#tct-success');\n });\n\n it('renders the symbol element to the SVG', async () => {\n const symbolElements = await e2ePage.findAll('q2-icon >>> symbol');\n expect(symbolElements).toHaveLength(1);\n\n const symbolElement = symbolElements[0];\n expect(symbolElement).toBeTruthy();\n expect(symbolElement).toEqualAttribute('id', 'tct-success');\n expect(symbolElement).toEqualHtml(`\n <symbol fill=\"none\" id=\"tct-success\" viewbox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 21.244a9.244 9.244 0 1 0 0-18.488 9.244 9.244 0 0 0 0 18.488Z\" stroke=\"var(--comp-status-color)\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n <path d=\"m7.754 12.739 2.613 2.613 5.88-5.88\" stroke=\"var(--comp-status-color)\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </symbol>\n `);\n });\n });\n });\n\n describe('Props', () => {\n describe('inline', () => {\n it('uses the default width and height when false', async () => {\n e2ePage = await setup({\n html: `<q2-icon type=\"a11y\"></q2-icon>`,\n });\n const icon = await e2ePage.find('q2-icon');\n const iconComputedStyle = await icon.getComputedStyle();\n expect(iconComputedStyle.width).toEqual('24px');\n expect(iconComputedStyle.height).toEqual('24px');\n });\n\n it('sets the width and height to 1em when true', async () => {\n e2ePage = await setup({\n html: `<q2-icon type=\"a11y\" inline></q2-icon>`,\n });\n const icon = await e2ePage.find('q2-icon');\n const iconComputedStyle = await icon.getComputedStyle();\n expect(iconComputedStyle.width).toEqual('16px');\n expect(iconComputedStyle.height).toEqual('16px');\n });\n });\n\n describe('label', () => {\n beforeEach(async () => {\n mockIconFetch(`\n <symbol fill=\"none\" id=\"tct-close\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <g class=\"close\">\n <path class=\"stroke-primary\" d=\"m17.875 6-12 12m0-12 12 12\"></path>\n </g>\n </symbol>\n `);\n });\n\n afterEach(() => {\n jest.restoreAllMocks();\n });\n\n it('renders the expected output when provided', async () => {\n specPage = await newSpecPage({\n components: [Q2Icon],\n html: '<q2-icon label=\"Iron Man\" type=\"close\"></q2-icon>',\n });\n\n expect(specPage.root).toEqualHtml(`\n <q2-icon label=\"Iron Man\" type=\"close\">\n <mock:shadow-root>\n <svg aria-labelledby=\"label\" role=\"img\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <title id=\"label\">\n Iron Man\n </title>\n <use href=\"#tct-close\"></use>\n <g>\n <symbol fill=\"none\" id=\"tct-close\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <g class=\"close\">\n <path class=\"stroke-primary\" d=\"m17.875 6-12 12m0-12 12 12\"></path>\n </g>\n </symbol>\n </g>\n </svg>\n </mock:shadow-root>\n </q2-icon>\n `);\n });\n });\n\n describe('type', () => {\n beforeEach(async () => {\n mockIconFetch(`\n <symbol fill=\"none\" id=\"tct-close\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <g class=\"close\">\n <path class=\"stroke-primary\" d=\"m17.875 6-12 12m0-12 12 12\"></path>\n </g>\n </symbol>\n `);\n });\n\n afterEach(() => {\n jest.restoreAllMocks();\n });\n\n it('renders nothing when not provided', async () => {\n specPage = await newSpecPage({\n components: [Q2Icon],\n html: '<q2-icon></q2-icon>',\n });\n\n expect(specPage.root).toEqualHtml(emptyIconMarkup);\n });\n\n it('renders expected output when provided', async () => {\n specPage = await newSpecPage({\n components: [Q2Icon],\n html: '<q2-icon type=\"close\"></q2-icon>',\n });\n\n expect(specPage.root).toEqualHtml(closeIconMarkup);\n });\n\n it('clears the content when removed', async () => {\n specPage = await newSpecPage({\n components: [Q2Icon],\n html: '<q2-icon type=\"close\"></q2-icon>',\n });\n\n expect(specPage.root).toEqualHtml(closeIconMarkup);\n\n specPage.root.type = undefined;\n await specPage.waitForChanges();\n\n expect(specPage.root).toEqualHtml(emptyIconMarkup);\n });\n\n it('updates the content when added', async () => {\n specPage = await newSpecPage({\n components: [Q2Icon],\n html: '<q2-icon></q2-icon>',\n });\n\n expect(specPage.root).toEqualHtml(emptyIconMarkup);\n\n specPage.root.type = 'close';\n await specPage.waitForChanges();\n\n expect(specPage.root).toEqualHtml(closeIconMarkup);\n });\n\n it('does not add the href to the use element if the icon is not found', async () => {\n specPage = await newSpecPage({\n components: [Q2Icon],\n html: '<q2-icon type=\"not-found\"></q2-icon>',\n });\n\n expect(specPage.root).toEqualHtml(notFoundIconMarkup);\n });\n\n describe(\"when type is 'custom'\", () => {\n it('it renders in a slot and adds necessary attributes', async () => {\n specPage = await newSpecPage({\n components: [Q2Icon],\n html: `\n <q2-icon type=\"custom\">\n <svg viewBox=\"0 0 34 34\">\n <circle cx=\"17\" cy=\"17\" r=\"10\" />\n </svg>\n </q2-icon>\n `,\n });\n\n const svg = specPage.root.querySelector('svg');\n\n expect(svg).toEqualAttribute('role', 'img');\n expect(svg).toEqualAttribute('xmlns', 'http://www.w3.org/2000/svg');\n expect(svg).toEqualAttribute('aria-hidden', 'true');\n expect(svg).not.toHaveAttribute('aria-labelledby');\n\n expect(specPage.root).toEqualHtml(`\n <q2-icon type=\"custom\">\n <mock:shadow-root>\n <slot />\n </mock:shadow-root>\n <svg aria-hidden=\"true\" role=\"img\" viewBox=\"0 0 34 34\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"17\" cy=\"17\" r=\"10\" />\n </svg>\n </q2-icon>\n `);\n });\n\n it('it renders in a slot and adds necessary attributes when label is provided', async () => {\n specPage = await newSpecPage({\n components: [Q2Icon],\n html: `\n <q2-icon type=\"custom\" label=\"Iron Man\">\n <svg viewBox=\"0 0 34 34\">\n <circle cx=\"17\" cy=\"17\" r=\"10\" />\n </svg>\n </q2-icon>\n `,\n });\n\n const svg = specPage.root.querySelector('svg');\n\n expect(svg).toEqualAttribute('role', 'img');\n expect(svg).toEqualAttribute('xmlns', 'http://www.w3.org/2000/svg');\n expect(svg).not.toHaveAttribute('aria-hidden');\n expect(svg).toHaveAttribute('aria-labelledby');\n\n expect(specPage.root).toEqualHtml(`\n <q2-icon label=\"Iron Man\" type=\"custom\">\n <mock:shadow-root>\n <slot />\n </mock:shadow-root>\n <svg aria-labelledby=\"label-1000\" role=\"img\" viewBox=\"0 0 34 34\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"17\" cy=\"17\" r=\"10\" />\n <title id=\"label-1000\">\n Iron Man\n </title>\n </svg>\n </q2-icon>\n `);\n });\n });\n });\n });\n\n describe('Styling', () => {\n describe('fill', () => {\n it('uses fallback color when override not provided', async () => {\n e2ePage = await setup({\n html: `<q2-icon type=\"brand-facebook-color\"></q2-icon>`,\n });\n const pathElements = await e2ePage.findAll('q2-icon >>> path');\n const pathOneStyle = await pathElements[0].getComputedStyle();\n const pathTwoStyle = await pathElements[1].getComputedStyle();\n expect(pathOneStyle.fill).toEqual('rgb(57, 87, 154)');\n expect(pathTwoStyle.fill).toEqual('rgb(255, 255, 255)');\n });\n\n it('uses override color when provided', async () => {\n e2ePage = await setup({\n html: `<q2-icon type=\"brand-facebook-color\" style=\"--tct-icon-brand-fill-primary: blue; --tct-icon-brand-fill-secondary: red;\"></q2-icon>`,\n });\n const pathElements = await e2ePage.findAll('q2-icon >>> path');\n const pathOneStyle = await pathElements[0].getComputedStyle();\n const pathTwoStyle = await pathElements[1].getComputedStyle();\n expect(pathOneStyle.fill).toEqual('rgb(0, 0, 255)');\n expect(pathTwoStyle.fill).toEqual('rgb(255, 0, 0)');\n });\n });\n });\n\n describe('Getters', () => {\n describe('isCustom', () => {\n it(\"returns true when type is 'custom'\", () => {\n const icon = new Q2Icon();\n icon.type = 'custom';\n expect(icon.isCustom).toBeTruthy();\n });\n\n it(\"returns false when type is not 'custom'\", () => {\n const icon = new Q2Icon();\n icon.type = 'close';\n expect(icon.isCustom).toBeFalsy();\n });\n });\n\n describe('spriteFileName', () => {\n it(\"returns undefined when type is 'custom'\", () => {\n const icon = new Q2Icon();\n icon.type = 'custom';\n expect(icon.spriteFileName).toBeUndefined();\n });\n\n it('returns undefined when type does not map to a file', () => {\n const icon = new Q2Icon();\n icon.type = 'foobar';\n expect(icon.spriteFileName).toBeUndefined();\n });\n\n it(\"returns the sprite filename when type is not 'custom'\", () => {\n const icon = new Q2Icon();\n icon.type = 'close';\n expect(icon.spriteFileName).toEqual('standard');\n });\n });\n\n describe('spriteId', () => {\n it(\"returns undefined when type is 'custom'\", () => {\n const icon = new Q2Icon();\n icon.type = 'custom';\n expect(icon.spriteId).toBeUndefined();\n });\n\n it('returns undefined when spriteFileName is undefined', () => {\n const icon = new Q2Icon();\n icon.type = 'foobar';\n expect(icon.spriteId).toBeUndefined();\n });\n\n it('returns the sprite ID when spriteFileName is defined', () => {\n const icon = new Q2Icon();\n icon.type = 'close';\n expect(icon.spriteId).toEqual('tecton-sprite-standard');\n });\n });\n\n describe('spriteElement', () => {\n it('returns undefined when spriteId is undefined', () => {\n const icon = new Q2Icon();\n icon.type = 'foobar';\n expect(icon.spriteElement).toBeUndefined();\n });\n\n it('returns the sprite element when spriteId is defined', () => {\n const icon = new Q2Icon();\n icon.type = 'close';\n\n const element = document.createElement('div');\n element.id = 'tecton-sprite-standard';\n document.body.appendChild(element);\n\n expect(icon.spriteElement).toBeTruthy();\n\n element.remove();\n });\n });\n\n describe('spriteEventName', () => {\n it('returns undefined when spriteFileName is undefined', () => {\n const icon = new Q2Icon();\n icon.type = 'foobar';\n expect(icon.spriteEventName).toBeUndefined();\n });\n\n it('returns the event name when spriteFileName is defined', () => {\n const icon = new Q2Icon();\n icon.type = 'close';\n expect(icon.spriteEventName).toEqual('tct-loaded-standard');\n });\n });\n });\n\n describe('Methods', () => {\n describe('getOrCreateSpriteContainer', () => {\n it('returns the existing sprite container', () => {\n const icon = new Q2Icon();\n const spriteContainer = document.createElement('div');\n spriteContainer.id = 'tecton-sprites';\n document.body.appendChild(spriteContainer);\n\n expect(icon.getOrCreateSpriteContainer()).toEqual(spriteContainer);\n\n spriteContainer.remove();\n });\n\n it('creates and returns a new sprite container', () => {\n const icon = new Q2Icon();\n const spriteContainer = icon.getOrCreateSpriteContainer();\n\n expect(spriteContainer).toBeTruthy();\n expect(spriteContainer).toEqualAttribute('id', 'tecton-sprites');\n });\n });\n\n describe('fetchSprite', () => {\n beforeEach(async () => {\n mockIconFetch();\n });\n\n afterEach(() => {\n jest.restoreAllMocks();\n });\n\n it('does nothing when type is not defined', async () => {\n const icon = new Q2Icon();\n icon.fetchSprite();\n expect(icon.spriteElement).toBeUndefined();\n });\n\n it('does not try to recreate sprite element if it already exists', async () => {\n const icon = new Q2Icon();\n icon.type = 'close';\n\n const container = icon.getOrCreateSpriteContainer();\n const spriteElement = document.createElement('SVG');\n spriteElement.id = 'tecton-sprite-standard';\n spriteElement.setAttribute('data-loaded', '');\n container.appendChild(spriteElement);\n\n expect(icon.spriteElement).toEqual(spriteElement);\n\n await icon.fetchSprite();\n\n expect(icon.spriteElement).toEqual(spriteElement);\n\n spriteElement.remove();\n });\n\n it('fetches the sprite when type is defined', async () => {\n const icon = new Q2Icon();\n icon.type = 'close';\n\n await icon.fetchSprite();\n\n expect(icon.spriteElement.tagName.toUpperCase()).toEqual('SVG');\n });\n });\n\n describe('cloneSpriteNode', () => {\n it('returns undefined when spriteElement is undefined', () => {\n const icon = new Q2Icon();\n icon.type = 'foobar';\n icon.cloneSpriteNode();\n expect(icon.iconClone).toBeUndefined();\n });\n\n it('returns a clone of the sprite element', () => {\n const icon = new Q2Icon();\n icon.type = 'close';\n\n const container = icon.getOrCreateSpriteContainer();\n\n const element = document.createElement('div');\n element.id = 'tct-close';\n container.appendChild(element);\n\n icon.cloneSpriteNode();\n\n expect(icon.iconClone).toBeTruthy();\n expect(icon.iconClone).toEqualAttribute('id', 'tct-close');\n\n element.remove();\n });\n });\n });\n});\n\nconst notFoundIconMarkup = `\n <q2-icon type=\"not-found\">\n <mock:shadow-root>\n <svg aria-hidden=\"true\" role=\"img\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <use></use>\n <g></g>\n </svg>\n </mock:shadow-root>\n </q2-icon>\n`;\n\nconst closeIconMarkup = `\n <q2-icon type=\"close\">\n <mock:shadow-root>\n <svg aria-hidden=\"true\" role=\"img\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <use href=\"#tct-close\"></use>\n <g>\n <symbol fill=\"none\" id=\"tct-close\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <g class=\"close\">\n <path class=\"stroke-primary\" d=\"m17.875 6-12 12m0-12 12 12\"></path>\n </g>\n </symbol>\n </g>\n </svg>\n </mock:shadow-root>\n </q2-icon>\n`;\n\nconst emptyIconMarkup = `\n <q2-icon>\n <mock:shadow-root>\n <svg aria-hidden=\"true\" role=\"img\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <g></g>\n </svg>\n </mock:shadow-root>\n </q2-icon>\n`;\n"]}