@spectrum-web-components/menu 0.14.2 → 0.14.5-devmode.0

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 (111) hide show
  1. package/custom-elements.json +11 -1
  2. package/package.json +55 -20
  3. package/sp-menu-divider.dev.js +3 -0
  4. package/sp-menu-divider.dev.js.map +7 -0
  5. package/sp-menu-divider.js +3 -14
  6. package/sp-menu-divider.js.map +7 -1
  7. package/sp-menu-group.dev.js +3 -0
  8. package/sp-menu-group.dev.js.map +7 -0
  9. package/sp-menu-group.js +3 -14
  10. package/sp-menu-group.js.map +7 -1
  11. package/sp-menu-item.dev.js +3 -0
  12. package/sp-menu-item.dev.js.map +7 -0
  13. package/sp-menu-item.js +3 -14
  14. package/sp-menu-item.js.map +7 -1
  15. package/sp-menu.dev.js +3 -0
  16. package/sp-menu.dev.js.map +7 -0
  17. package/sp-menu.js +3 -14
  18. package/sp-menu.js.map +7 -1
  19. package/src/Menu.dev.js +495 -0
  20. package/src/Menu.dev.js.map +7 -0
  21. package/src/Menu.js +487 -574
  22. package/src/Menu.js.map +7 -1
  23. package/src/MenuDivider.dev.js +13 -0
  24. package/src/MenuDivider.dev.js.map +7 -0
  25. package/src/MenuDivider.js +11 -25
  26. package/src/MenuDivider.js.map +7 -1
  27. package/src/MenuGroup.dev.js +82 -0
  28. package/src/MenuGroup.dev.js.map +7 -0
  29. package/src/MenuGroup.js +67 -71
  30. package/src/MenuGroup.js.map +7 -1
  31. package/src/MenuItem.d.ts +2 -1
  32. package/src/MenuItem.dev.js +424 -0
  33. package/src/MenuItem.dev.js.map +7 -0
  34. package/src/MenuItem.js +399 -415
  35. package/src/MenuItem.js.map +7 -1
  36. package/src/index.dev.js +5 -0
  37. package/src/index.dev.js.map +7 -0
  38. package/src/index.js +5 -16
  39. package/src/index.js.map +7 -1
  40. package/src/menu-divider.css.dev.js +6 -0
  41. package/src/menu-divider.css.dev.js.map +7 -0
  42. package/src/menu-divider.css.js +3 -14
  43. package/src/menu-divider.css.js.map +7 -1
  44. package/src/menu-group.css.dev.js +8 -0
  45. package/src/menu-group.css.dev.js.map +7 -0
  46. package/src/menu-group.css.js +3 -14
  47. package/src/menu-group.css.js.map +7 -1
  48. package/src/menu-item.css.dev.js +73 -0
  49. package/src/menu-item.css.dev.js.map +7 -0
  50. package/src/menu-item.css.js +3 -14
  51. package/src/menu-item.css.js.map +7 -1
  52. package/src/menu.css.dev.js +61 -0
  53. package/src/menu.css.dev.js.map +7 -0
  54. package/src/menu.css.js +3 -14
  55. package/src/menu.css.js.map +7 -1
  56. package/src/spectrum-checkmark.css.dev.js +10 -0
  57. package/src/spectrum-checkmark.css.dev.js.map +7 -0
  58. package/src/spectrum-checkmark.css.js +3 -14
  59. package/src/spectrum-checkmark.css.js.map +7 -1
  60. package/src/spectrum-chevron.css.dev.js +10 -0
  61. package/src/spectrum-chevron.css.dev.js.map +7 -0
  62. package/src/spectrum-chevron.css.js +3 -14
  63. package/src/spectrum-chevron.css.js.map +7 -1
  64. package/src/spectrum-itemLabel.css.dev.js +6 -0
  65. package/src/spectrum-itemLabel.css.dev.js.map +7 -0
  66. package/src/spectrum-itemLabel.css.js +3 -14
  67. package/src/spectrum-itemLabel.css.js.map +7 -1
  68. package/src/spectrum-menu-divider.css.dev.js +6 -0
  69. package/src/spectrum-menu-divider.css.dev.js.map +7 -0
  70. package/src/spectrum-menu-divider.css.js +3 -14
  71. package/src/spectrum-menu-divider.css.js.map +7 -1
  72. package/src/spectrum-menu-item.css.dev.js +65 -0
  73. package/src/spectrum-menu-item.css.dev.js.map +7 -0
  74. package/src/spectrum-menu-item.css.js +3 -14
  75. package/src/spectrum-menu-item.css.js.map +7 -1
  76. package/src/spectrum-menu-sectionHeading.css.dev.js +8 -0
  77. package/src/spectrum-menu-sectionHeading.css.dev.js.map +7 -0
  78. package/src/spectrum-menu-sectionHeading.css.js +3 -14
  79. package/src/spectrum-menu-sectionHeading.css.js.map +7 -1
  80. package/src/spectrum-menu.css.dev.js +61 -0
  81. package/src/spectrum-menu.css.dev.js.map +7 -0
  82. package/src/spectrum-menu.css.js +3 -14
  83. package/src/spectrum-menu.css.js.map +7 -1
  84. package/stories/menu-group.stories.js +51 -58
  85. package/stories/menu-group.stories.js.map +7 -1
  86. package/stories/menu-item.stories.js +12 -32
  87. package/stories/menu-item.stories.js.map +7 -1
  88. package/stories/menu.stories.js +22 -33
  89. package/stories/menu.stories.js.map +7 -1
  90. package/stories/submenu.stories.js +125 -136
  91. package/stories/submenu.stories.js.map +7 -1
  92. package/test/benchmark/test-basic.js +8 -19
  93. package/test/benchmark/test-basic.js.map +7 -1
  94. package/test/menu-group.test-vrt.js +4 -15
  95. package/test/menu-group.test-vrt.js.map +7 -1
  96. package/test/menu-group.test.js +161 -168
  97. package/test/menu-group.test.js.map +7 -1
  98. package/test/menu-item.test-vrt.js +4 -15
  99. package/test/menu-item.test-vrt.js.map +7 -1
  100. package/test/menu-item.test.js +93 -99
  101. package/test/menu-item.test.js.map +7 -1
  102. package/test/menu-selects.test.js +488 -494
  103. package/test/menu-selects.test.js.map +7 -1
  104. package/test/menu.test-vrt.js +4 -15
  105. package/test/menu.test-vrt.js.map +7 -1
  106. package/test/menu.test.js +240 -257
  107. package/test/menu.test.js.map +7 -1
  108. package/test/submenu.test-vrt.js +4 -15
  109. package/test/submenu.test-vrt.js.map +7 -1
  110. package/test/submenu.test.js +480 -464
  111. package/test/submenu.test.js.map +7 -1
@@ -1,117 +1,106 @@
1
- /*
2
- Copyright 2020 Adobe. All rights reserved.
3
- This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
- you may not use this file except in compliance with the License. You may obtain a copy
5
- of the License at http://www.apache.org/licenses/LICENSE-2.0
6
-
7
- Unless required by applicable law or agreed to in writing, software distributed under
8
- the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
- OF ANY KIND, either express or implied. See the License for the specific language
10
- governing permissions and limitations under the License.
11
- */
12
- import { html, render } from '@spectrum-web-components/base';
13
- import '@spectrum-web-components/action-menu/sp-action-menu.js';
14
- import '@spectrum-web-components/menu/sp-menu-item.js';
15
- import '@spectrum-web-components/menu/sp-menu-divider.js';
16
- import '@spectrum-web-components/menu/sp-menu-group.js';
17
- import { openOverlay, VirtualTrigger } from '@spectrum-web-components/overlay';
18
- import '@spectrum-web-components/popover/sp-popover.js';
19
- import '@spectrum-web-components/icons-workflow/icons/sp-icon-show-menu.js';
1
+ import { html, render } from "@spectrum-web-components/base";
2
+ import "@spectrum-web-components/action-menu/sp-action-menu.js";
3
+ import "@spectrum-web-components/menu/sp-menu-item.js";
4
+ import "@spectrum-web-components/menu/sp-menu-divider.js";
5
+ import "@spectrum-web-components/menu/sp-menu-group.js";
6
+ import { openOverlay, VirtualTrigger } from "@spectrum-web-components/overlay";
7
+ import "@spectrum-web-components/popover/sp-popover.js";
8
+ import "@spectrum-web-components/icons-workflow/icons/sp-icon-show-menu.js";
20
9
  export default {
21
- component: 'sp-menu',
22
- title: 'Menu/Submenu',
10
+ component: "sp-menu",
11
+ title: "Menu/Submenu"
23
12
  };
24
13
  function nextFrame() {
25
- return new Promise((res) => requestAnimationFrame(() => res()));
14
+ return new Promise((res) => requestAnimationFrame(() => res()));
26
15
  }
27
16
  class SubmenuReady extends HTMLElement {
28
- constructor() {
29
- super();
30
- this.handleMenuOpened = async (event) => {
31
- await nextFrame();
32
- await event.target.updateComplete;
33
- const submenu = document.querySelector('#submenu-item-1');
34
- if (!submenu) {
35
- return;
36
- }
37
- submenu.addEventListener('sp-opened', this.handleSubmenuOpened, {
38
- once: true,
39
- });
40
- submenu.dispatchEvent(new PointerEvent('pointerenter', { bubbles: true, composed: true }));
41
- };
42
- this.handleSubmenuOpened = async (event) => {
43
- await nextFrame();
44
- await event.target.updateComplete;
45
- const submenu = document.querySelector('#submenu-item-2');
46
- if (!submenu) {
47
- return;
48
- }
49
- submenu.addEventListener('sp-opened', this.handleSubmenuChildOpened, {
50
- once: true,
51
- });
52
- submenu.dispatchEvent(new PointerEvent('pointerenter', { bubbles: true, composed: true }));
53
- };
54
- this.handleSubmenuChildOpened = async (event) => {
55
- await nextFrame();
56
- await event.target.updateComplete;
57
- this.ready(true);
58
- };
59
- this.readyPromise = Promise.resolve(false);
60
- this.readyPromise = new Promise((res) => {
61
- this.ready = res;
62
- this.setup();
63
- });
64
- }
65
- async setup() {
66
- await nextFrame();
67
- const menu = document.querySelector(`sp-action-menu`);
68
- menu.addEventListener('sp-opened', this.handleMenuOpened, {
69
- once: true,
70
- });
71
- menu.open = true;
72
- }
73
- get updateComplete() {
74
- return this.readyPromise;
75
- }
17
+ constructor() {
18
+ super();
19
+ this.handleMenuOpened = async (event) => {
20
+ await nextFrame();
21
+ await event.target.updateComplete;
22
+ const submenu2 = document.querySelector("#submenu-item-1");
23
+ if (!submenu2) {
24
+ return;
25
+ }
26
+ submenu2.addEventListener("sp-opened", this.handleSubmenuOpened, {
27
+ once: true
28
+ });
29
+ submenu2.dispatchEvent(new PointerEvent("pointerenter", { bubbles: true, composed: true }));
30
+ };
31
+ this.handleSubmenuOpened = async (event) => {
32
+ await nextFrame();
33
+ await event.target.updateComplete;
34
+ const submenu2 = document.querySelector("#submenu-item-2");
35
+ if (!submenu2) {
36
+ return;
37
+ }
38
+ submenu2.addEventListener("sp-opened", this.handleSubmenuChildOpened, {
39
+ once: true
40
+ });
41
+ submenu2.dispatchEvent(new PointerEvent("pointerenter", { bubbles: true, composed: true }));
42
+ };
43
+ this.handleSubmenuChildOpened = async (event) => {
44
+ await nextFrame();
45
+ await event.target.updateComplete;
46
+ this.ready(true);
47
+ };
48
+ this.readyPromise = Promise.resolve(false);
49
+ this.readyPromise = new Promise((res) => {
50
+ this.ready = res;
51
+ this.setup();
52
+ });
53
+ }
54
+ async setup() {
55
+ await nextFrame();
56
+ const menu = document.querySelector(`sp-action-menu`);
57
+ menu.addEventListener("sp-opened", this.handleMenuOpened, {
58
+ once: true
59
+ });
60
+ menu.open = true;
61
+ }
62
+ get updateComplete() {
63
+ return this.readyPromise;
64
+ }
76
65
  }
77
- customElements.define('submenu-ready', SubmenuReady);
66
+ customElements.define("submenu-ready", SubmenuReady);
78
67
  const submenuDecorator = (story) => {
79
- return html `
68
+ return html`
80
69
  ${story()}
81
70
  <submenu-ready></submenu-ready>
82
71
  `;
83
72
  };
84
73
  export const submenu = () => {
85
- const getValueEls = () => {
86
- return {
87
- root: document.querySelector('#root-value'),
88
- first: document.querySelector('#first-value'),
89
- second: document.querySelector('#second-value'),
90
- };
91
- };
92
- const clearValues = () => {
93
- const valueEls = getValueEls();
94
- valueEls.root.textContent = '';
95
- valueEls.first.textContent = '';
96
- valueEls.second.textContent = '';
97
- };
98
- const handleRootChange = (event) => {
99
- const valueEls = getValueEls();
100
- valueEls.root.textContent = event.target.value;
74
+ const getValueEls = () => {
75
+ return {
76
+ root: document.querySelector("#root-value"),
77
+ first: document.querySelector("#first-value"),
78
+ second: document.querySelector("#second-value")
101
79
  };
102
- const handleFirstDescendantChange = (event) => {
103
- const valueEls = getValueEls();
104
- valueEls.first.textContent = event.target.selected[0] || '';
105
- };
106
- const handleSecondDescendantChange = (event) => {
107
- const valueEls = getValueEls();
108
- valueEls.second.textContent = event.target.selected[0] || '';
109
- };
110
- return html `
80
+ };
81
+ const clearValues = () => {
82
+ const valueEls = getValueEls();
83
+ valueEls.root.textContent = "";
84
+ valueEls.first.textContent = "";
85
+ valueEls.second.textContent = "";
86
+ };
87
+ const handleRootChange = (event) => {
88
+ const valueEls = getValueEls();
89
+ valueEls.root.textContent = event.target.value;
90
+ };
91
+ const handleFirstDescendantChange = (event) => {
92
+ const valueEls = getValueEls();
93
+ valueEls.first.textContent = event.target.selected[0] || "";
94
+ };
95
+ const handleSecondDescendantChange = (event) => {
96
+ const valueEls = getValueEls();
97
+ valueEls.second.textContent = event.target.selected[0] || "";
98
+ };
99
+ return html`
111
100
  <sp-action-menu @change=${handleRootChange} @sp-opened=${clearValues}>
112
101
  <sp-icon-show-menu slot="icon"></sp-icon-show-menu>
113
102
  <sp-menu-group
114
- @change=${() => console.log('group change')}
103
+ @change=${() => console.log("group change")}
115
104
  role="none"
116
105
  >
117
106
  <span slot="header">New York</span>
@@ -175,13 +164,13 @@ export const submenu = () => {
175
164
  };
176
165
  submenu.decorators = [submenuDecorator];
177
166
  export const contextMenu = () => {
178
- const contextMenuTemplate = () => html `
167
+ const contextMenuTemplate = () => html`
179
168
  <sp-popover
180
169
  style="max-width: 33vw;"
181
170
  @click=${(event) => {
182
- var _a;
183
- return (_a = event.target) === null || _a === void 0 ? void 0 : _a.dispatchEvent(new Event('close', { bubbles: true }));
184
- }}
171
+ var _a;
172
+ return (_a = event.target) == null ? void 0 : _a.dispatchEvent(new Event("close", { bubbles: true }));
173
+ }}
185
174
  >
186
175
  <sp-menu @change=${handleRootChange}>
187
176
  <sp-menu-group>
@@ -244,40 +233,40 @@ export const contextMenu = () => {
244
233
  </sp-menu>
245
234
  </sp-popover>
246
235
  `;
247
- const pointerenter = async (event) => {
248
- event.preventDefault();
249
- const trigger = event.target;
250
- const virtualTrigger = new VirtualTrigger(event.clientX, event.clientY);
251
- const fragment = document.createDocumentFragment();
252
- render(contextMenuTemplate(), fragment);
253
- const popover = fragment.querySelector('sp-popover');
254
- clearValues();
255
- openOverlay(trigger, 'modal', popover, {
256
- placement: 'right-start',
257
- receivesFocus: 'auto',
258
- virtualTrigger,
259
- });
260
- };
261
- const getValueEls = () => {
262
- return {
263
- root: document.querySelector('#root-value'),
264
- first: document.querySelector('#first-value'),
265
- };
266
- };
267
- const clearValues = () => {
268
- const valueEls = getValueEls();
269
- valueEls.root.textContent = '';
270
- valueEls.first.textContent = '';
271
- };
272
- const handleRootChange = (event) => {
273
- const valueEls = getValueEls();
274
- valueEls.root.textContent = event.target.value;
275
- };
276
- const handleFirstDescendantChange = (event) => {
277
- const valueEls = getValueEls();
278
- valueEls.first.textContent = event.target.selected[0] || '';
236
+ const pointerenter = async (event) => {
237
+ event.preventDefault();
238
+ const trigger = event.target;
239
+ const virtualTrigger = new VirtualTrigger(event.clientX, event.clientY);
240
+ const fragment = document.createDocumentFragment();
241
+ render(contextMenuTemplate(), fragment);
242
+ const popover = fragment.querySelector("sp-popover");
243
+ clearValues();
244
+ openOverlay(trigger, "modal", popover, {
245
+ placement: "right-start",
246
+ receivesFocus: "auto",
247
+ virtualTrigger
248
+ });
249
+ };
250
+ const getValueEls = () => {
251
+ return {
252
+ root: document.querySelector("#root-value"),
253
+ first: document.querySelector("#first-value")
279
254
  };
280
- return html `
255
+ };
256
+ const clearValues = () => {
257
+ const valueEls = getValueEls();
258
+ valueEls.root.textContent = "";
259
+ valueEls.first.textContent = "";
260
+ };
261
+ const handleRootChange = (event) => {
262
+ const valueEls = getValueEls();
263
+ valueEls.root.textContent = event.target.value;
264
+ };
265
+ const handleFirstDescendantChange = (event) => {
266
+ const valueEls = getValueEls();
267
+ valueEls.first.textContent = event.target.selected[0] || "";
268
+ };
269
+ return html`
281
270
  <style>
282
271
  .app-root {
283
272
  position: absolute;
@@ -299,4 +288,4 @@ export const contextMenu = () => {
299
288
  </div>
300
289
  `;
301
290
  };
302
- //# sourceMappingURL=submenu.stories.js.map
291
+ //# sourceMappingURL=submenu.stories.js.map
@@ -1 +1,7 @@
1
- {"version":3,"file":"submenu.stories.js","sourceRoot":"","sources":["submenu.stories.ts"],"names":[],"mappings":"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","sourcesContent":["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport { html, render, TemplateResult } from '@spectrum-web-components/base';\n\nimport '@spectrum-web-components/action-menu/sp-action-menu.js';\nimport '@spectrum-web-components/menu/sp-menu-item.js';\nimport '@spectrum-web-components/menu/sp-menu-divider.js';\nimport '@spectrum-web-components/menu/sp-menu-group.js';\nimport { openOverlay, VirtualTrigger } from '@spectrum-web-components/overlay';\nimport type { Popover } from '@spectrum-web-components/popover';\nimport '@spectrum-web-components/popover/sp-popover.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-show-menu.js';\nimport type { ActionMenu } from '@spectrum-web-components/action-menu';\nimport type { Menu, MenuItem } from '..';\n\nexport default {\n component: 'sp-menu',\n title: 'Menu/Submenu',\n};\n\nfunction nextFrame(): Promise<void> {\n return new Promise((res) => requestAnimationFrame(() => res()));\n}\n\nclass SubmenuReady extends HTMLElement {\n ready!: (value: boolean | PromiseLike<boolean>) => void;\n\n constructor() {\n super();\n this.readyPromise = new Promise((res) => {\n this.ready = res;\n this.setup();\n });\n }\n\n async setup(): Promise<void> {\n await nextFrame();\n\n const menu = document.querySelector(`sp-action-menu`) as ActionMenu;\n menu.addEventListener('sp-opened', this.handleMenuOpened, {\n once: true,\n });\n menu.open = true;\n }\n\n handleMenuOpened = async (event: Event): Promise<void> => {\n await nextFrame();\n await (event.target as ActionMenu).updateComplete;\n\n const submenu = document.querySelector('#submenu-item-1') as MenuItem;\n if (!submenu) {\n return;\n }\n submenu.addEventListener('sp-opened', this.handleSubmenuOpened, {\n once: true,\n });\n submenu.dispatchEvent(\n new PointerEvent('pointerenter', { bubbles: true, composed: true })\n );\n };\n\n handleSubmenuOpened = async (event: Event): Promise<void> => {\n await nextFrame();\n await (event.target as MenuItem).updateComplete;\n\n const submenu = document.querySelector('#submenu-item-2') as MenuItem;\n if (!submenu) {\n return;\n }\n submenu.addEventListener('sp-opened', this.handleSubmenuChildOpened, {\n once: true,\n });\n submenu.dispatchEvent(\n new PointerEvent('pointerenter', { bubbles: true, composed: true })\n );\n };\n\n handleSubmenuChildOpened = async (event: Event): Promise<void> => {\n await nextFrame();\n await (event.target as MenuItem).updateComplete;\n\n this.ready(true);\n };\n\n private readyPromise: Promise<boolean> = Promise.resolve(false);\n\n get updateComplete(): Promise<boolean> {\n return this.readyPromise;\n }\n}\n\ncustomElements.define('submenu-ready', SubmenuReady);\n\nconst submenuDecorator = (story: () => TemplateResult): TemplateResult => {\n return html`\n ${story()}\n <submenu-ready></submenu-ready>\n `;\n};\n\nexport const submenu = (): TemplateResult => {\n const getValueEls = (): {\n root: HTMLElement;\n first: HTMLElement;\n second: HTMLElement;\n } => {\n return {\n root: document.querySelector('#root-value') as HTMLElement,\n first: document.querySelector('#first-value') as HTMLElement,\n second: document.querySelector('#second-value') as HTMLElement,\n };\n };\n const clearValues = (): void => {\n const valueEls = getValueEls();\n valueEls.root.textContent = '';\n valueEls.first.textContent = '';\n valueEls.second.textContent = '';\n };\n const handleRootChange = (event: Event & { target: ActionMenu }): void => {\n const valueEls = getValueEls();\n valueEls.root.textContent = event.target.value;\n };\n const handleFirstDescendantChange = (\n event: Event & { target: Menu }\n ): void => {\n const valueEls = getValueEls();\n valueEls.first.textContent = event.target.selected[0] || '';\n };\n const handleSecondDescendantChange = (\n event: Event & { target: Menu }\n ): void => {\n const valueEls = getValueEls();\n valueEls.second.textContent = event.target.selected[0] || '';\n };\n return html`\n <sp-action-menu @change=${handleRootChange} @sp-opened=${clearValues}>\n <sp-icon-show-menu slot=\"icon\"></sp-icon-show-menu>\n <sp-menu-group\n @change=${() => console.log('group change')}\n role=\"none\"\n >\n <span slot=\"header\">New York</span>\n <sp-menu-item>Bronx</sp-menu-item>\n <sp-menu-item id=\"submenu-item-1\">\n Brooklyn\n <sp-menu\n slot=\"submenu\"\n @change=${handleFirstDescendantChange}\n >\n <sp-menu-item id=\"submenu-item-2\">\n Ft. Greene\n <sp-menu\n slot=\"submenu\"\n @change=${handleSecondDescendantChange}\n >\n <sp-menu-item>S. Oxford St</sp-menu-item>\n <sp-menu-item>S. Portland Ave</sp-menu-item>\n <sp-menu-item>S. Elliot Pl</sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n <sp-menu-item disabled>Park Slope</sp-menu-item>\n <sp-menu-item>Williamsburg</sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n <sp-menu-item>\n Manhattan\n <sp-menu\n slot=\"submenu\"\n @change=${handleFirstDescendantChange}\n >\n <sp-menu-item disabled>SoHo</sp-menu-item>\n <sp-menu-item>\n Union Square\n <sp-menu\n slot=\"submenu\"\n @change=${handleSecondDescendantChange}\n >\n <sp-menu-item>14th St</sp-menu-item>\n <sp-menu-item>Broadway</sp-menu-item>\n <sp-menu-item>Park Ave</sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n <sp-menu-item>Upper East Side</sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n </sp-menu-group>\n </sp-action-menu>\n <div>\n Root value:\n <span id=\"root-value\"></span>\n <br />\n First descendant value:\n <span id=\"first-value\"></span>\n <br />\n Second descendant value:\n <span id=\"second-value\"></span>\n <br />\n </div>\n `;\n};\n\nsubmenu.decorators = [submenuDecorator];\n\nexport const contextMenu = (): TemplateResult => {\n const contextMenuTemplate = (): TemplateResult => html`\n <sp-popover\n style=\"max-width: 33vw;\"\n @click=${(event: Event) =>\n event.target?.dispatchEvent(\n new Event('close', { bubbles: true })\n )}\n >\n <sp-menu @change=${handleRootChange}>\n <sp-menu-group>\n <span slot=\"header\">Options</span>\n <sp-menu-item>\n Copy\n <span slot=\"value\">⌘​S</span>\n </sp-menu-item>\n <sp-menu-item>\n Paste\n <span slot=\"value\">⌘​P</span>\n </sp-menu-item>\n <sp-menu-item>\n Cut\n <span slot=\"value\">⌘​X</span>\n </sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item>\n Select layer\n <sp-menu\n slot=\"submenu\"\n selects=\"single\"\n @change=${handleFirstDescendantChange}\n >\n <sp-menu-item selected>Ellipse 1</sp-menu-item>\n <sp-menu-item>Rectangle</sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n <sp-menu-item>\n Group\n <span slot=\"value\">⌘​G</span>\n </sp-menu-item>\n <sp-menu-item>\n Unlock\n <span slot=\"value\">⌘​L</span>\n </sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item>\n Bring to front\n <span slot=\"value\">⇧​⌘​​]</span>\n </sp-menu-item>\n <sp-menu-item>\n Bring forward\n <span slot=\"value\">⌘​​]</span>\n </sp-menu-item>\n <sp-menu-item>\n Send backward\n <span slot=\"value\">⌘​​[</span>\n </sp-menu-item>\n <sp-menu-item>\n Send to back\n <span slot=\"value\">⇧​⌘​​[</span>\n </sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item>\n Delete\n <span slot=\"value\">DEL</span>\n </sp-menu-item>\n </sp-menu-group>\n </sp-menu>\n </sp-popover>\n `;\n const pointerenter = async (event: PointerEvent): Promise<void> => {\n event.preventDefault();\n const trigger = event.target as HTMLElement;\n const virtualTrigger = new VirtualTrigger(event.clientX, event.clientY);\n const fragment = document.createDocumentFragment();\n render(contextMenuTemplate(), fragment);\n const popover = fragment.querySelector('sp-popover') as Popover;\n clearValues();\n openOverlay(trigger, 'modal', popover, {\n placement: 'right-start',\n receivesFocus: 'auto',\n virtualTrigger,\n });\n };\n const getValueEls = (): { root: HTMLElement; first: HTMLElement } => {\n return {\n root: document.querySelector('#root-value') as HTMLElement,\n first: document.querySelector('#first-value') as HTMLElement,\n };\n };\n const clearValues = (): void => {\n const valueEls = getValueEls();\n valueEls.root.textContent = '';\n valueEls.first.textContent = '';\n };\n const handleRootChange = (event: Event & { target: ActionMenu }): void => {\n const valueEls = getValueEls();\n valueEls.root.textContent = event.target.value;\n };\n const handleFirstDescendantChange = (\n event: Event & { target: Menu }\n ): void => {\n const valueEls = getValueEls();\n valueEls.first.textContent = event.target.selected[0] || '';\n };\n return html`\n <style>\n .app-root {\n position: absolute;\n inset: 0;\n }\n active-overlay::part(theme) {\n --swc-menu-width: 200px;\n }\n </style>\n <div class=\"app-root\" @contextmenu=${pointerenter}>\n <div>\n Root value:\n <span id=\"root-value\"></span>\n <br />\n First descendant value:\n <span id=\"first-value\"></span>\n <br />\n </div>\n </div>\n `;\n};\n"]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["submenu.stories.ts"],
4
+ "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport { html, render, TemplateResult } from '@spectrum-web-components/base';\n\nimport '@spectrum-web-components/action-menu/sp-action-menu.js';\nimport '@spectrum-web-components/menu/sp-menu-item.js';\nimport '@spectrum-web-components/menu/sp-menu-divider.js';\nimport '@spectrum-web-components/menu/sp-menu-group.js';\nimport { openOverlay, VirtualTrigger } from '@spectrum-web-components/overlay';\nimport type { Popover } from '@spectrum-web-components/popover';\nimport '@spectrum-web-components/popover/sp-popover.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-show-menu.js';\nimport type { ActionMenu } from '@spectrum-web-components/action-menu';\nimport type { Menu, MenuItem } from '@spectrum-web-components/menu';\n\nexport default {\n component: 'sp-menu',\n title: 'Menu/Submenu',\n};\n\nfunction nextFrame(): Promise<void> {\n return new Promise((res) => requestAnimationFrame(() => res()));\n}\n\nclass SubmenuReady extends HTMLElement {\n ready!: (value: boolean | PromiseLike<boolean>) => void;\n\n constructor() {\n super();\n this.readyPromise = new Promise((res) => {\n this.ready = res;\n this.setup();\n });\n }\n\n async setup(): Promise<void> {\n await nextFrame();\n\n const menu = document.querySelector(`sp-action-menu`) as ActionMenu;\n menu.addEventListener('sp-opened', this.handleMenuOpened, {\n once: true,\n });\n menu.open = true;\n }\n\n handleMenuOpened = async (event: Event): Promise<void> => {\n await nextFrame();\n await (event.target as ActionMenu).updateComplete;\n\n const submenu = document.querySelector('#submenu-item-1') as MenuItem;\n if (!submenu) {\n return;\n }\n submenu.addEventListener('sp-opened', this.handleSubmenuOpened, {\n once: true,\n });\n submenu.dispatchEvent(\n new PointerEvent('pointerenter', { bubbles: true, composed: true })\n );\n };\n\n handleSubmenuOpened = async (event: Event): Promise<void> => {\n await nextFrame();\n await (event.target as MenuItem).updateComplete;\n\n const submenu = document.querySelector('#submenu-item-2') as MenuItem;\n if (!submenu) {\n return;\n }\n submenu.addEventListener('sp-opened', this.handleSubmenuChildOpened, {\n once: true,\n });\n submenu.dispatchEvent(\n new PointerEvent('pointerenter', { bubbles: true, composed: true })\n );\n };\n\n handleSubmenuChildOpened = async (event: Event): Promise<void> => {\n await nextFrame();\n await (event.target as MenuItem).updateComplete;\n\n this.ready(true);\n };\n\n private readyPromise: Promise<boolean> = Promise.resolve(false);\n\n get updateComplete(): Promise<boolean> {\n return this.readyPromise;\n }\n}\n\ncustomElements.define('submenu-ready', SubmenuReady);\n\nconst submenuDecorator = (story: () => TemplateResult): TemplateResult => {\n return html`\n ${story()}\n <submenu-ready></submenu-ready>\n `;\n};\n\nexport const submenu = (): TemplateResult => {\n const getValueEls = (): {\n root: HTMLElement;\n first: HTMLElement;\n second: HTMLElement;\n } => {\n return {\n root: document.querySelector('#root-value') as HTMLElement,\n first: document.querySelector('#first-value') as HTMLElement,\n second: document.querySelector('#second-value') as HTMLElement,\n };\n };\n const clearValues = (): void => {\n const valueEls = getValueEls();\n valueEls.root.textContent = '';\n valueEls.first.textContent = '';\n valueEls.second.textContent = '';\n };\n const handleRootChange = (event: Event & { target: ActionMenu }): void => {\n const valueEls = getValueEls();\n valueEls.root.textContent = event.target.value;\n };\n const handleFirstDescendantChange = (\n event: Event & { target: Menu }\n ): void => {\n const valueEls = getValueEls();\n valueEls.first.textContent = event.target.selected[0] || '';\n };\n const handleSecondDescendantChange = (\n event: Event & { target: Menu }\n ): void => {\n const valueEls = getValueEls();\n valueEls.second.textContent = event.target.selected[0] || '';\n };\n return html`\n <sp-action-menu @change=${handleRootChange} @sp-opened=${clearValues}>\n <sp-icon-show-menu slot=\"icon\"></sp-icon-show-menu>\n <sp-menu-group\n @change=${() => console.log('group change')}\n role=\"none\"\n >\n <span slot=\"header\">New York</span>\n <sp-menu-item>Bronx</sp-menu-item>\n <sp-menu-item id=\"submenu-item-1\">\n Brooklyn\n <sp-menu\n slot=\"submenu\"\n @change=${handleFirstDescendantChange}\n >\n <sp-menu-item id=\"submenu-item-2\">\n Ft. Greene\n <sp-menu\n slot=\"submenu\"\n @change=${handleSecondDescendantChange}\n >\n <sp-menu-item>S. Oxford St</sp-menu-item>\n <sp-menu-item>S. Portland Ave</sp-menu-item>\n <sp-menu-item>S. Elliot Pl</sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n <sp-menu-item disabled>Park Slope</sp-menu-item>\n <sp-menu-item>Williamsburg</sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n <sp-menu-item>\n Manhattan\n <sp-menu\n slot=\"submenu\"\n @change=${handleFirstDescendantChange}\n >\n <sp-menu-item disabled>SoHo</sp-menu-item>\n <sp-menu-item>\n Union Square\n <sp-menu\n slot=\"submenu\"\n @change=${handleSecondDescendantChange}\n >\n <sp-menu-item>14th St</sp-menu-item>\n <sp-menu-item>Broadway</sp-menu-item>\n <sp-menu-item>Park Ave</sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n <sp-menu-item>Upper East Side</sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n </sp-menu-group>\n </sp-action-menu>\n <div>\n Root value:\n <span id=\"root-value\"></span>\n <br />\n First descendant value:\n <span id=\"first-value\"></span>\n <br />\n Second descendant value:\n <span id=\"second-value\"></span>\n <br />\n </div>\n `;\n};\n\nsubmenu.decorators = [submenuDecorator];\n\nexport const contextMenu = (): TemplateResult => {\n const contextMenuTemplate = (): TemplateResult => html`\n <sp-popover\n style=\"max-width: 33vw;\"\n @click=${(event: Event) =>\n event.target?.dispatchEvent(\n new Event('close', { bubbles: true })\n )}\n >\n <sp-menu @change=${handleRootChange}>\n <sp-menu-group>\n <span slot=\"header\">Options</span>\n <sp-menu-item>\n Copy\n <span slot=\"value\">\u2318\u200BS</span>\n </sp-menu-item>\n <sp-menu-item>\n Paste\n <span slot=\"value\">\u2318\u200BP</span>\n </sp-menu-item>\n <sp-menu-item>\n Cut\n <span slot=\"value\">\u2318\u200BX</span>\n </sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item>\n Select layer\n <sp-menu\n slot=\"submenu\"\n selects=\"single\"\n @change=${handleFirstDescendantChange}\n >\n <sp-menu-item selected>Ellipse 1</sp-menu-item>\n <sp-menu-item>Rectangle</sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n <sp-menu-item>\n Group\n <span slot=\"value\">\u2318\u200BG</span>\n </sp-menu-item>\n <sp-menu-item>\n Unlock\n <span slot=\"value\">\u2318\u200BL</span>\n </sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item>\n Bring to front\n <span slot=\"value\">\u21E7\u200B\u2318\u200B\u200B]</span>\n </sp-menu-item>\n <sp-menu-item>\n Bring forward\n <span slot=\"value\">\u2318\u200B\u200B]</span>\n </sp-menu-item>\n <sp-menu-item>\n Send backward\n <span slot=\"value\">\u2318\u200B\u200B[</span>\n </sp-menu-item>\n <sp-menu-item>\n Send to back\n <span slot=\"value\">\u21E7\u200B\u2318\u200B\u200B[</span>\n </sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item>\n Delete\n <span slot=\"value\">DEL</span>\n </sp-menu-item>\n </sp-menu-group>\n </sp-menu>\n </sp-popover>\n `;\n const pointerenter = async (event: PointerEvent): Promise<void> => {\n event.preventDefault();\n const trigger = event.target as HTMLElement;\n const virtualTrigger = new VirtualTrigger(event.clientX, event.clientY);\n const fragment = document.createDocumentFragment();\n render(contextMenuTemplate(), fragment);\n const popover = fragment.querySelector('sp-popover') as Popover;\n clearValues();\n openOverlay(trigger, 'modal', popover, {\n placement: 'right-start',\n receivesFocus: 'auto',\n virtualTrigger,\n });\n };\n const getValueEls = (): { root: HTMLElement; first: HTMLElement } => {\n return {\n root: document.querySelector('#root-value') as HTMLElement,\n first: document.querySelector('#first-value') as HTMLElement,\n };\n };\n const clearValues = (): void => {\n const valueEls = getValueEls();\n valueEls.root.textContent = '';\n valueEls.first.textContent = '';\n };\n const handleRootChange = (event: Event & { target: ActionMenu }): void => {\n const valueEls = getValueEls();\n valueEls.root.textContent = event.target.value;\n };\n const handleFirstDescendantChange = (\n event: Event & { target: Menu }\n ): void => {\n const valueEls = getValueEls();\n valueEls.first.textContent = event.target.selected[0] || '';\n };\n return html`\n <style>\n .app-root {\n position: absolute;\n inset: 0;\n }\n active-overlay::part(theme) {\n --swc-menu-width: 200px;\n }\n </style>\n <div class=\"app-root\" @contextmenu=${pointerenter}>\n <div>\n Root value:\n <span id=\"root-value\"></span>\n <br />\n First descendant value:\n <span id=\"first-value\"></span>\n <br />\n </div>\n </div>\n `;\n};\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -1,21 +1,10 @@
1
- /*
2
- Copyright 2020 Adobe. All rights reserved.
3
- This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
- you may not use this file except in compliance with the License. You may obtain a copy
5
- of the License at http://www.apache.org/licenses/LICENSE-2.0
6
-
7
- Unless required by applicable law or agreed to in writing, software distributed under
8
- the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
- OF ANY KIND, either express or implied. See the License for the specific language
10
- governing permissions and limitations under the License.
11
- */
12
- import '@spectrum-web-components/menu/sp-menu.js';
13
- import '@spectrum-web-components/menu/sp-menu-item.js';
14
- import '@spectrum-web-components/menu/sp-menu-group.js';
15
- import '@spectrum-web-components/menu/sp-menu-divider.js';
16
- import { html } from 'lit';
17
- import { measureFixtureCreation } from '../../../../test/benchmark/helpers.js';
18
- measureFixtureCreation(html `
1
+ import "@spectrum-web-components/menu/sp-menu.js";
2
+ import "@spectrum-web-components/menu/sp-menu-item.js";
3
+ import "@spectrum-web-components/menu/sp-menu-group.js";
4
+ import "@spectrum-web-components/menu/sp-menu-divider.js";
5
+ import { html } from "lit";
6
+ import { measureFixtureCreation } from "../../../../test/benchmark/helpers.js";
7
+ measureFixtureCreation(html`
19
8
  <sp-menu selects="multiple">
20
9
  <sp-menu-group selects="inherit">
21
10
  <span slot="header">Section Heading</span>
@@ -31,4 +20,4 @@ measureFixtureCreation(html `
31
20
  </sp-menu-group>
32
21
  </sp-menu>
33
22
  `);
34
- //# sourceMappingURL=test-basic.js.map
23
+ //# sourceMappingURL=test-basic.js.map
@@ -1 +1,7 @@
1
- {"version":3,"file":"test-basic.js","sourceRoot":"","sources":["test-basic.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;EAUE;AAEF,OAAO,0CAA0C,CAAC;AAClD,OAAO,+CAA+C,CAAC;AACvD,OAAO,gDAAgD,CAAC;AACxD,OAAO,kDAAkD,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAE/E,sBAAsB,CAAC,IAAI,CAAA;;;;;;;;;;;;;;;CAe1B,CAAC,CAAC","sourcesContent":["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport '@spectrum-web-components/menu/sp-menu.js';\nimport '@spectrum-web-components/menu/sp-menu-item.js';\nimport '@spectrum-web-components/menu/sp-menu-group.js';\nimport '@spectrum-web-components/menu/sp-menu-divider.js';\nimport { html } from 'lit';\nimport { measureFixtureCreation } from '../../../../test/benchmark/helpers.js';\n\nmeasureFixtureCreation(html`\n <sp-menu selects=\"multiple\">\n <sp-menu-group selects=\"inherit\">\n <span slot=\"header\">Section Heading</span>\n <sp-menu-item>Action 1</sp-menu-item>\n <sp-menu-item>Action 2</sp-menu-item>\n <sp-menu-item>Action 3</sp-menu-item>\n </sp-menu-group>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-group selects=\"inherit\">\n <span slot=\"header\">Section Heading</span>\n <sp-menu-item>Save</sp-menu-item>\n <sp-menu-item disabled>Download</sp-menu-item>\n </sp-menu-group>\n </sp-menu>\n`);\n"]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["test-basic.ts"],
4
+ "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport '@spectrum-web-components/menu/sp-menu.js';\nimport '@spectrum-web-components/menu/sp-menu-item.js';\nimport '@spectrum-web-components/menu/sp-menu-group.js';\nimport '@spectrum-web-components/menu/sp-menu-divider.js';\nimport { html } from 'lit';\nimport { measureFixtureCreation } from '../../../../test/benchmark/helpers.js';\n\nmeasureFixtureCreation(html`\n <sp-menu selects=\"multiple\">\n <sp-menu-group selects=\"inherit\">\n <span slot=\"header\">Section Heading</span>\n <sp-menu-item>Action 1</sp-menu-item>\n <sp-menu-item>Action 2</sp-menu-item>\n <sp-menu-item>Action 3</sp-menu-item>\n </sp-menu-group>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-group selects=\"inherit\">\n <span slot=\"header\">Section Heading</span>\n <sp-menu-item>Save</sp-menu-item>\n <sp-menu-item disabled>Download</sp-menu-item>\n </sp-menu-group>\n </sp-menu>\n`);\n"],
5
+ "mappings": "AAYA;AACA;AACA;AACA;AACA;AACA;AAEA,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAetB;",
6
+ "names": []
7
+ }
@@ -1,15 +1,4 @@
1
- /*
2
- Copyright 2020 Adobe. All rights reserved.
3
- This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
- you may not use this file except in compliance with the License. You may obtain a copy
5
- of the License at http://www.apache.org/licenses/LICENSE-2.0
6
-
7
- Unless required by applicable law or agreed to in writing, software distributed under
8
- the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
- OF ANY KIND, either express or implied. See the License for the specific language
10
- governing permissions and limitations under the License.
11
- */
12
- import * as stories from '../stories/menu-group.stories.js';
13
- import { regressVisuals } from '../../../test/visual/test.js';
14
- regressVisuals('MenuGroupStories', stories);
15
- //# sourceMappingURL=menu-group.test-vrt.js.map
1
+ import * as stories from "../stories/menu-group.stories.js";
2
+ import { regressVisuals } from "../../../test/visual/test.js";
3
+ regressVisuals("MenuGroupStories", stories);
4
+ //# sourceMappingURL=menu-group.test-vrt.js.map
@@ -1 +1,7 @@
1
- {"version":3,"file":"menu-group.test-vrt.js","sourceRoot":"","sources":["menu-group.test-vrt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;EAUE;AAEF,OAAO,KAAK,OAAO,MAAM,kCAAkC,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,cAAc,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC","sourcesContent":["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport * as stories from '../stories/menu-group.stories.js';\nimport { regressVisuals } from '../../../test/visual/test.js';\n\nregressVisuals('MenuGroupStories', stories);\n"]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["menu-group.test-vrt.ts"],
4
+ "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport * as stories from '../stories/menu-group.stories.js';\nimport { regressVisuals } from '../../../test/visual/test.js';\n\nregressVisuals('MenuGroupStories', stories);\n"],
5
+ "mappings": "AAYA;AACA;AAEA,eAAe,oBAAoB,OAAO;",
6
+ "names": []
7
+ }