@spectrum-web-components/dialog 0.11.13 → 0.11.15-overlay.8
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.
- package/package.json +10 -10
- package/src/Dialog.dev.js +0 -1
- package/src/Dialog.dev.js.map +2 -2
- package/src/Dialog.js +2 -2
- package/src/Dialog.js.map +2 -2
- package/src/DialogBase.dev.js +0 -3
- package/src/DialogBase.dev.js.map +2 -2
- package/src/DialogBase.js +2 -2
- package/src/DialogBase.js.map +2 -2
- package/src/dialog.css.dev.js +9 -35
- package/src/dialog.css.dev.js.map +2 -2
- package/src/dialog.css.js +9 -35
- package/src/dialog.css.js.map +2 -2
- package/src/spectrum-config.js +85 -111
- package/src/spectrum-dialog.css.dev.js +9 -35
- package/src/spectrum-dialog.css.dev.js.map +2 -2
- package/src/spectrum-dialog.css.js +9 -35
- package/src/spectrum-dialog.css.js.map +2 -2
- package/stories/dialog-base.stories.js +31 -24
- package/stories/dialog-base.stories.js.map +2 -2
- package/stories/dialog-wrapper.stories.js +2 -2
- package/stories/dialog-wrapper.stories.js.map +2 -2
- package/test/dialog-base.test.js +8 -20
- package/test/dialog-base.test.js.map +2 -2
- package/test/dialog-wrapper.test.js +30 -42
- package/test/dialog-wrapper.test.js.map +2 -2
- package/custom-elements.json +0 -1321
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["dialog-base.test.ts"],
|
|
4
|
-
"sourcesContent": ["/*\nCopyright 2022 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 {\n elementUpdated,\n expect,\n fixture,\n html,\n
|
|
5
|
-
"mappings": ";AAYA;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AAGP,OAAO;AACP,OAAO;AACP,OAAO;AAGP,OAAO;AACP,SAAS,wBAAwB;AAIjC,eAAe,cACX,OACU;AACV,QAAM,OAAO,MAAM,QAAe;AAAA;AAAA,cAExB;AAAA;AAAA,KAET;AACD,SAAO,KAAK,SAAS,CAAC;AAC1B;AAEA,MAAM,iBAAiB,CAAC,UAAgD;AAAA;AAAA;AAAA,UAG9D,MAAM;AAAA;AAAA;AAIhB,SAAS,eAAe,MAAM;AAC1B,KAAG,2DAA2D,YAAY;
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2022 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 {\n aTimeout,\n elementUpdated,\n expect,\n fixture,\n html,\n oneEvent,\n} from '@open-wc/testing';\nimport { TemplateResult } from '@spectrum-web-components/base';\n\nimport '@spectrum-web-components/theme/sp-theme.js';\nimport '@spectrum-web-components/theme/src/themes.js';\nimport '@spectrum-web-components/dialog/sp-dialog-base.js';\nimport { Theme } from '@spectrum-web-components/theme';\nimport { OverlayTrigger } from '@spectrum-web-components/overlay';\nimport '@spectrum-web-components/overlay/overlay-trigger.js';\nimport { alertDestructive } from '../stories/dialog.stories.js';\nimport { Button } from '@spectrum-web-components/button/src/Button.js';\nimport { DialogBase } from '@spectrum-web-components/dialog';\n\nasync function styledFixture<T extends Element>(\n story: TemplateResult\n): Promise<T> {\n const test = await fixture<Theme>(html`\n <sp-theme theme=\"spectrum\" scale=\"medium\" color=\"dark\">\n ${story}\n </sp-theme>\n `);\n return test.children[0] as T;\n}\n\nconst overlayTrigger = (story: () => TemplateResult): TemplateResult => html`\n <overlay-trigger type=\"modal\">\n <sp-button slot=\"trigger\" variant=\"primary\">Toggle Dialog</sp-button>\n ${story()}\n </overlay-trigger>\n`;\n\ndescribe('dialog base', () => {\n it('does not close by default with interacting with buttons', async () => {\n const el = await styledFixture<OverlayTrigger>(\n overlayTrigger(\n () => html`\n <sp-dialog-base underlay slot=\"click-content\">\n ${alertDestructive()}\n </sp-dialog-base>\n `\n )\n );\n await elementUpdated(el);\n\n const dialog = el.querySelector('sp-dialog-base') as DialogBase;\n await elementUpdated(dialog);\n const secondaryButton = el.querySelector(\n '[variant=\"secondary\"]'\n ) as Button;\n const negativeButton = el.querySelector(\n '[variant=\"negative\"]'\n ) as Button;\n\n expect(el.open).to.be.undefined;\n expect(dialog.open).to.be.false;\n const opened = oneEvent(el, 'sp-opened');\n el.open = 'click';\n await opened;\n\n expect(dialog.open).to.be.true;\n expect(el.open).to.be.equal('click');\n\n secondaryButton.click();\n // Give time to ensure reactions DO NOT close the dialog.\n await aTimeout(100);\n\n expect(el.open).to.be.equal('click');\n\n negativeButton.click();\n // Give time to ensure reactions DO NOT close the dialog.\n await aTimeout(100);\n\n expect(el.open).to.be.equal('click');\n\n const closed = oneEvent(el, 'sp-closed');\n dialog.open = false;\n await closed;\n await elementUpdated(el);\n\n expect(dialog.open).to.be.false;\n });\n it('does not close by default when interacting with buttons when recycled', async () => {\n const el = await styledFixture<OverlayTrigger>(\n overlayTrigger(\n () => html`\n <sp-dialog-base underlay slot=\"click-content\">\n ${alertDestructive()}\n </sp-dialog-base>\n `\n )\n );\n await elementUpdated(el);\n\n const dialog = el.querySelector('sp-dialog-base') as DialogBase;\n await elementUpdated(dialog);\n const secondaryButton = el.querySelector(\n '[variant=\"secondary\"]'\n ) as Button;\n const negativeButton = el.querySelector(\n '[variant=\"negative\"]'\n ) as Button;\n\n expect(el.open).to.be.undefined;\n expect(dialog.open).to.be.false;\n const opened = oneEvent(el, 'sp-opened');\n el.open = 'click';\n await opened;\n\n expect(dialog.open).to.be.true;\n expect(el.open).to.be.equal('click');\n\n secondaryButton.click();\n // Give time to ensure reactions DO NOT close the dialog.\n await aTimeout(100);\n\n expect(el.open).to.be.equal('click');\n\n negativeButton.click();\n // Give time to ensure reactions DO NOT close the dialog.\n await aTimeout(100);\n\n expect(el.open).to.be.equal('click');\n\n const closed = oneEvent(el, 'sp-closed');\n dialog.open = false;\n await closed;\n await elementUpdated(el);\n\n expect(dialog.open).to.be.false;\n });\n});\n"],
|
|
5
|
+
"mappings": ";AAYA;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AAGP,OAAO;AACP,OAAO;AACP,OAAO;AAGP,OAAO;AACP,SAAS,wBAAwB;AAIjC,eAAe,cACX,OACU;AACV,QAAM,OAAO,MAAM,QAAe;AAAA;AAAA,cAExB;AAAA;AAAA,KAET;AACD,SAAO,KAAK,SAAS,CAAC;AAC1B;AAEA,MAAM,iBAAiB,CAAC,UAAgD;AAAA;AAAA;AAAA,UAG9D,MAAM;AAAA;AAAA;AAIhB,SAAS,eAAe,MAAM;AAC1B,KAAG,2DAA2D,YAAY;AACtE,UAAM,KAAK,MAAM;AAAA,MACb;AAAA,QACI,MAAM;AAAA;AAAA,0BAEI,iBAAiB;AAAA;AAAA;AAAA,MAG/B;AAAA,IACJ;AACA,UAAM,eAAe,EAAE;AAEvB,UAAM,SAAS,GAAG,cAAc,gBAAgB;AAChD,UAAM,eAAe,MAAM;AAC3B,UAAM,kBAAkB,GAAG;AAAA,MACvB;AAAA,IACJ;AACA,UAAM,iBAAiB,GAAG;AAAA,MACtB;AAAA,IACJ;AAEA,WAAO,GAAG,IAAI,EAAE,GAAG,GAAG;AACtB,WAAO,OAAO,IAAI,EAAE,GAAG,GAAG;AAC1B,UAAM,SAAS,SAAS,IAAI,WAAW;AACvC,OAAG,OAAO;AACV,UAAM;AAEN,WAAO,OAAO,IAAI,EAAE,GAAG,GAAG;AAC1B,WAAO,GAAG,IAAI,EAAE,GAAG,GAAG,MAAM,OAAO;AAEnC,oBAAgB,MAAM;AAEtB,UAAM,SAAS,GAAG;AAElB,WAAO,GAAG,IAAI,EAAE,GAAG,GAAG,MAAM,OAAO;AAEnC,mBAAe,MAAM;AAErB,UAAM,SAAS,GAAG;AAElB,WAAO,GAAG,IAAI,EAAE,GAAG,GAAG,MAAM,OAAO;AAEnC,UAAM,SAAS,SAAS,IAAI,WAAW;AACvC,WAAO,OAAO;AACd,UAAM;AACN,UAAM,eAAe,EAAE;AAEvB,WAAO,OAAO,IAAI,EAAE,GAAG,GAAG;AAAA,EAC9B,CAAC;AACD,KAAG,yEAAyE,YAAY;AACpF,UAAM,KAAK,MAAM;AAAA,MACb;AAAA,QACI,MAAM;AAAA;AAAA,0BAEI,iBAAiB;AAAA;AAAA;AAAA,MAG/B;AAAA,IACJ;AACA,UAAM,eAAe,EAAE;AAEvB,UAAM,SAAS,GAAG,cAAc,gBAAgB;AAChD,UAAM,eAAe,MAAM;AAC3B,UAAM,kBAAkB,GAAG;AAAA,MACvB;AAAA,IACJ;AACA,UAAM,iBAAiB,GAAG;AAAA,MACtB;AAAA,IACJ;AAEA,WAAO,GAAG,IAAI,EAAE,GAAG,GAAG;AACtB,WAAO,OAAO,IAAI,EAAE,GAAG,GAAG;AAC1B,UAAM,SAAS,SAAS,IAAI,WAAW;AACvC,OAAG,OAAO;AACV,UAAM;AAEN,WAAO,OAAO,IAAI,EAAE,GAAG,GAAG;AAC1B,WAAO,GAAG,IAAI,EAAE,GAAG,GAAG,MAAM,OAAO;AAEnC,oBAAgB,MAAM;AAEtB,UAAM,SAAS,GAAG;AAElB,WAAO,GAAG,IAAI,EAAE,GAAG,GAAG,MAAM,OAAO;AAEnC,mBAAe,MAAM;AAErB,UAAM,SAAS,GAAG;AAElB,WAAO,GAAG,IAAI,EAAE,GAAG,GAAG,MAAM,OAAO;AAEnC,UAAM,SAAS,SAAS,IAAI,WAAW;AACvC,WAAO,OAAO;AACd,UAAM;AACN,UAAM,eAAe,EAAE;AAEvB,WAAO,OAAO,IAAI,EAAE,GAAG,GAAG;AAAA,EAC9B,CAAC;AACL,CAAC;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -3,8 +3,8 @@ import {
|
|
|
3
3
|
elementUpdated,
|
|
4
4
|
expect,
|
|
5
5
|
fixture,
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
oneEvent,
|
|
7
|
+
waitUntil
|
|
8
8
|
} from "@open-wc/testing";
|
|
9
9
|
import { spy, stub } from "sinon";
|
|
10
10
|
import "@spectrum-web-components/theme/sp-theme.js";
|
|
@@ -60,35 +60,47 @@ describe("Dialog Wrapper", () => {
|
|
|
60
60
|
});
|
|
61
61
|
it("opens and closes", async () => {
|
|
62
62
|
const closeSpy = spy();
|
|
63
|
-
const
|
|
63
|
+
const openedSpy = spy();
|
|
64
|
+
const test = await styledFixture(html`
|
|
65
|
+
<div @sp-opened=${() => openedSpy()}>${longContent()}</div>
|
|
66
|
+
`);
|
|
67
|
+
const overlayTrigger = test.querySelector(
|
|
68
|
+
"overlay-trigger"
|
|
69
|
+
);
|
|
64
70
|
const el = test.querySelector("sp-dialog-wrapper");
|
|
65
71
|
el.addEventListener("close", () => closeSpy());
|
|
66
|
-
await
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
72
|
+
await waitUntil(
|
|
73
|
+
() => openedSpy.calledOnce,
|
|
74
|
+
"click content projected to overlay",
|
|
75
|
+
{ timeout: 2e3 }
|
|
76
|
+
);
|
|
70
77
|
expect(el.open).to.be.true;
|
|
71
|
-
const closed = oneEvent(
|
|
72
|
-
|
|
78
|
+
const closed = oneEvent(overlayTrigger, "sp-closed");
|
|
79
|
+
overlayTrigger.open = void 0;
|
|
73
80
|
await closed;
|
|
74
|
-
await nextFrame();
|
|
75
81
|
expect(el.open).to.be.false;
|
|
76
82
|
expect(closeSpy.callCount).to.equal(1);
|
|
77
83
|
});
|
|
78
84
|
it("opens and closes when element is recycled", async () => {
|
|
79
85
|
const closeSpy = spy();
|
|
80
|
-
const
|
|
86
|
+
const openedSpy = spy();
|
|
87
|
+
const test = await styledFixture(html`
|
|
88
|
+
<div @sp-opened=${() => openedSpy()}>${longContent()}</div>
|
|
89
|
+
`);
|
|
90
|
+
const overlayTrigger = test.querySelector(
|
|
91
|
+
"overlay-trigger"
|
|
92
|
+
);
|
|
81
93
|
const el = test.querySelector("sp-dialog-wrapper");
|
|
82
94
|
el.addEventListener("close", () => closeSpy());
|
|
83
|
-
await
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
95
|
+
await waitUntil(
|
|
96
|
+
() => openedSpy.calledOnce,
|
|
97
|
+
"click content projected to overlay",
|
|
98
|
+
{ timeout: 2e3 }
|
|
99
|
+
);
|
|
87
100
|
expect(el.open).to.be.true;
|
|
88
|
-
const closed = oneEvent(
|
|
89
|
-
|
|
101
|
+
const closed = oneEvent(overlayTrigger, "sp-closed");
|
|
102
|
+
overlayTrigger.open = void 0;
|
|
90
103
|
await closed;
|
|
91
|
-
await nextFrame();
|
|
92
104
|
expect(el.open).to.be.false;
|
|
93
105
|
expect(closeSpy.callCount).to.equal(1);
|
|
94
106
|
});
|
|
@@ -163,30 +175,6 @@ describe("Dialog Wrapper", () => {
|
|
|
163
175
|
await elementUpdated(el);
|
|
164
176
|
expect(el.open).to.be.false;
|
|
165
177
|
});
|
|
166
|
-
it("manages entry focus - dismissable", async () => {
|
|
167
|
-
const el = await styledFixture(wrapperDismissable());
|
|
168
|
-
await elementUpdated(el);
|
|
169
|
-
expect(el.open).to.be.true;
|
|
170
|
-
expect(document.activeElement !== el, "no focused").to.be.true;
|
|
171
|
-
const dialog = el.shadowRoot.querySelector("sp-dialog");
|
|
172
|
-
const dialogRoot = dialog.shadowRoot ? dialog.shadowRoot : dialog;
|
|
173
|
-
const dismissButton = dialogRoot.querySelector(
|
|
174
|
-
".close-button"
|
|
175
|
-
);
|
|
176
|
-
el.focus();
|
|
177
|
-
await elementUpdated(el);
|
|
178
|
-
expect(
|
|
179
|
-
document.activeElement === el,
|
|
180
|
-
`focused generally, ${document.activeElement}`
|
|
181
|
-
).to.be.true;
|
|
182
|
-
expect(
|
|
183
|
-
dismissButton.getRootNode().activeElement !== dismissButton,
|
|
184
|
-
`does not focus specifically, ${dismissButton.getRootNode().activeElement}`
|
|
185
|
-
).to.be.true;
|
|
186
|
-
dismissButton.click();
|
|
187
|
-
await elementUpdated(el);
|
|
188
|
-
expect(el.open).to.be.false;
|
|
189
|
-
});
|
|
190
178
|
it("manages entry focus - buttons", async () => {
|
|
191
179
|
var _a;
|
|
192
180
|
const el = await styledFixture(wrapperButtons());
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["dialog-wrapper.test.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 {\n elementUpdated,\n expect,\n fixture,\n nextFrame,\n oneEvent,\n} from '@open-wc/testing';\nimport { spy, stub } from 'sinon';\n\nimport '@spectrum-web-components/theme/sp-theme.js';\nimport '@spectrum-web-components/theme/src/themes.js';\nimport '@spectrum-web-components/dialog/sp-dialog-wrapper.js';\nimport { Dialog, DialogWrapper } from '@spectrum-web-components/dialog';\nimport { ActionButton } from '@spectrum-web-components/action-button';\nimport { Button } from '@spectrum-web-components/button';\nimport { Underlay } from '@spectrum-web-components/underlay';\nimport {\n longContent,\n wrapperButtons,\n wrapperButtonsUnderlay,\n wrapperDismissable,\n wrapperDismissableUnderlayError,\n wrapperFullscreen,\n wrapperHeadlineVisibilityNone,\n wrapperLabeledHero,\n wrapperWithHeadline,\n wrapperWithHeadlineNoDivider,\n} from '../stories/dialog-wrapper.stories.js';\nimport { OverlayTrigger } from '@spectrum-web-components/overlay';\nimport { html, TemplateResult } from '@spectrum-web-components/base';\nimport { Theme } from '@spectrum-web-components/theme';\nimport { testForLitDevWarnings } from '../../../test/testing-helpers.js';\nimport { Divider } from '@spectrum-web-components/divider/src/Divider.js';\n\nasync function styledFixture<T extends Element>(\n story: TemplateResult\n): Promise<T> {\n const test = await fixture<Theme>(html`\n <sp-theme theme=\"classic\" scale=\"medium\" color=\"dark\">\n ${story}\n </sp-theme>\n `);\n return test.children[0] as T;\n}\n\ndescribe('Dialog Wrapper', () => {\n testForLitDevWarnings(\n async () => await styledFixture<DialogWrapper>(wrapperDismissable())\n );\n it('loads wrapped dialog accessibly', async () => {\n const el = await styledFixture<DialogWrapper>(wrapperDismissable());\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n it('loads labeled hero dialog accessibly', async () => {\n const el = await styledFixture<DialogWrapper>(wrapperLabeledHero());\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n it('loads fullscreen wrapped dialog accessibly', async () => {\n const el = await styledFixture<DialogWrapper>(wrapperFullscreen());\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n xit('loads with underlay and no headline accessibly', async () => {\n const el = await styledFixture<DialogWrapper>(wrapperButtonsUnderlay());\n await elementUpdated(el);\n el.headline = '';\n await elementUpdated(el);\n await expect(el).to.be.accessible();\n });\n it('opens and closes', async () => {\n const closeSpy = spy();\n const test = await styledFixture<OverlayTrigger>(longContent());\n const el = test.querySelector('sp-dialog-wrapper') as DialogWrapper;\n el.addEventListener('close', () => closeSpy());\n\n await elementUpdated(el);\n\n const opened = oneEvent(test, 'sp-opened');\n test.open = 'click';\n await opened;\n\n expect(el.open).to.be.true;\n\n const closed = oneEvent(test, 'sp-closed');\n test.open = undefined;\n await closed;\n await nextFrame();\n\n expect(el.open).to.be.false;\n expect(closeSpy.callCount).to.equal(1);\n });\n it('opens and closes when element is recycled', async () => {\n const closeSpy = spy();\n const test = await styledFixture<OverlayTrigger>(longContent());\n const el = test.querySelector('sp-dialog-wrapper') as DialogWrapper;\n el.addEventListener('close', () => closeSpy());\n\n await elementUpdated(el);\n\n const opened = oneEvent(test, 'sp-opened');\n test.open = 'click';\n await opened;\n\n expect(el.open).to.be.true;\n\n const closed = oneEvent(test, 'sp-closed');\n test.open = undefined;\n await closed;\n await nextFrame();\n\n expect(el.open).to.be.false;\n expect(closeSpy.callCount).to.equal(1);\n });\n it(\"shows header divider when there's a header\", async () => {\n const wrapper = await styledFixture<DialogWrapper>(\n wrapperWithHeadline()\n );\n await elementUpdated(wrapper);\n\n const dialog = wrapper.shadowRoot.querySelector('sp-dialog') as Dialog;\n const divider = dialog.shadowRoot.querySelector(\n 'sp-divider.divider'\n ) as Divider;\n\n expect(divider).to.be.not.null;\n });\n it('hides header divider when there\\'s a header but \"no-divider\"', async () => {\n const wrapper = await styledFixture<DialogWrapper>(\n wrapperWithHeadlineNoDivider()\n );\n await elementUpdated(wrapper);\n\n await expect(wrapper).to.be.accessible();\n\n const dialog = wrapper.shadowRoot.querySelector('sp-dialog') as Dialog;\n const divider = dialog.shadowRoot.querySelector(\n 'sp-divider.divider'\n ) as Divider;\n\n expect(divider).to.be.null;\n });\n it(\"hides header divider when there's no header\", async () => {\n const wrapper = await styledFixture<DialogWrapper>(\n wrapperHeadlineVisibilityNone()\n );\n await elementUpdated(wrapper);\n\n await expect(wrapper).to.be.accessible();\n\n const dialog = wrapper.shadowRoot.querySelector('sp-dialog') as Dialog;\n const divider = dialog.shadowRoot.querySelector(\n 'sp-divider.divider'\n ) as Divider;\n\n expect(divider).to.be.null;\n });\n it('dismisses via clicking the underlay when [dismissable]', async () => {\n const test = await styledFixture<DialogWrapper>(\n wrapperDismissableUnderlayError()\n );\n const el = test.querySelector('sp-dialog-wrapper') as DialogWrapper;\n await elementUpdated(el);\n expect(el.open).to.be.true;\n el.dismissable = true;\n const underlay = el.shadowRoot.querySelector('sp-underlay') as Underlay;\n underlay.click();\n await elementUpdated(el);\n expect(el.open).to.be.false;\n });\n it('does not dismiss via clicking the underlay :not([dismissable])', async () => {\n const el = await styledFixture<DialogWrapper>(wrapperButtonsUnderlay());\n await elementUpdated(el);\n expect(el.open).to.be.true;\n const underlay = el.shadowRoot.querySelector('sp-underlay') as Underlay;\n underlay.click();\n await elementUpdated(el);\n expect(el.open).to.be.true;\n });\n it('dismisses', async () => {\n const el = await styledFixture<DialogWrapper>(wrapperDismissable());\n\n await elementUpdated(el);\n expect(el.open).to.be.true;\n\n const root = el.shadowRoot ? el.shadowRoot : el;\n const dialog = root.querySelector('sp-dialog') as Dialog;\n const dialogRoot = dialog.shadowRoot ? dialog.shadowRoot : dialog;\n const dismissButton = dialogRoot.querySelector(\n '.close-button'\n ) as HTMLButtonElement;\n dismissButton.click();\n\n await elementUpdated(el);\n expect(el.open).to.be.false;\n });\n it('manages entry focus - dismissable', async () => {\n const el = await styledFixture<DialogWrapper>(wrapperDismissable());\n\n await elementUpdated(el);\n expect(el.open).to.be.true;\n expect(document.activeElement !== el, 'no focused').to.be.true;\n\n const dialog = el.shadowRoot.querySelector('sp-dialog') as Dialog;\n const dialogRoot = dialog.shadowRoot ? dialog.shadowRoot : dialog;\n const dismissButton = dialogRoot.querySelector(\n '.close-button'\n ) as ActionButton;\n\n el.focus();\n await elementUpdated(el);\n expect(\n document.activeElement === el,\n `focused generally, ${document.activeElement}`\n ).to.be.true;\n expect(\n (dismissButton.getRootNode() as Document).activeElement !==\n dismissButton,\n `does not focus specifically, ${\n (dismissButton.getRootNode() as Document).activeElement\n }`\n ).to.be.true;\n\n dismissButton.click();\n await elementUpdated(el);\n expect(el.open).to.be.false;\n });\n it('manages entry focus - buttons', async () => {\n const el = await styledFixture<DialogWrapper>(wrapperButtons());\n\n await elementUpdated(el);\n expect(el.open).to.be.true;\n expect(document.activeElement !== el, 'no focused').to.be.true;\n\n const button = el.shadowRoot.querySelector('sp-button') as Button;\n\n el.focus();\n await elementUpdated(el);\n expect(\n document.activeElement === el,\n `focused generally, ${document.activeElement}`\n ).to.be.true;\n expect(\n (button.getRootNode() as Document).activeElement === button,\n `focused specifically, ${\n (button.getRootNode() as Document).activeElement?.outerHTML\n }`\n ).to.be.true;\n });\n it('dispatches `confirm`, `cancel` and `secondary`', async () => {\n const confirmSpy = spy();\n const cancelSpy = spy();\n const secondarySpy = spy();\n const handleConfirm = (): void => confirmSpy();\n const handleCancel = (): void => cancelSpy();\n const handleSecondary = (): void => secondarySpy();\n const el = await styledFixture<DialogWrapper>(wrapperButtons());\n el.addEventListener('confirm', handleConfirm);\n el.addEventListener('cancel', handleCancel);\n el.addEventListener('secondary', handleSecondary);\n\n await elementUpdated(el);\n expect(confirmSpy.called).to.be.false;\n expect(cancelSpy.called).to.be.false;\n expect(secondarySpy.called).to.be.false;\n\n const accentButton = el.shadowRoot.querySelector(\n '[variant=\"accent\"]'\n ) as Button;\n const primaryButton = el.shadowRoot.querySelector(\n '[variant=\"primary\"]'\n ) as Button;\n const secondaryButton = el.shadowRoot.querySelector(\n '[variant=\"secondary\"]'\n ) as Button;\n\n accentButton.click();\n\n await elementUpdated(el);\n expect(confirmSpy.called, 'dispatched `confirm`').to.be.true;\n expect(secondarySpy.called).to.be.false;\n expect(cancelSpy.called).to.be.false;\n\n primaryButton.click();\n\n await elementUpdated(el);\n expect(confirmSpy.callCount).to.equal(1);\n expect(secondarySpy.called, 'dispatched `cancel`').to.be.true;\n expect(cancelSpy.called).to.be.false;\n\n secondaryButton.click();\n\n await elementUpdated(el);\n expect(confirmSpy.callCount).to.equal(1);\n expect(secondarySpy.callCount).to.equal(1);\n expect(cancelSpy.called, 'dispatched `secondary`').to.be.true;\n });\n\n it('warns in Dev Mode when accessible attributes are not leveraged', async () => {\n const consoleWarnStub = stub(console, 'warn');\n const el = await fixture<DialogWrapper>(html`\n <sp-dialog-wrapper></sp-dialog-wrapper>\n `);\n\n await elementUpdated(el);\n\n expect(consoleWarnStub.called).to.be.true;\n const spyCall = consoleWarnStub.getCall(0);\n expect(\n spyCall.args.at(0).includes('accessible'),\n 'confirm accessibility-centric message'\n ).to.be.true;\n expect(spyCall.args.at(-1), 'confirm `data` shape').to.deep.equal({\n data: {\n localName: 'sp-dialog-wrapper',\n type: 'accessibility',\n level: 'default',\n },\n });\n consoleWarnStub.restore();\n });\n});\n"],
|
|
5
|
-
"mappings": ";AAYA;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AACP,SAAS,KAAK,YAAY;AAE1B,OAAO;AACP,OAAO;AACP,OAAO;
|
|
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 {\n elementUpdated,\n expect,\n fixture,\n oneEvent,\n waitUntil,\n} from '@open-wc/testing';\nimport { spy, stub } from 'sinon';\n\nimport '@spectrum-web-components/theme/sp-theme.js';\nimport '@spectrum-web-components/theme/src/themes.js';\nimport '@spectrum-web-components/dialog/sp-dialog-wrapper.js';\nimport { Dialog, DialogWrapper } from '@spectrum-web-components/dialog';\nimport { Button } from '@spectrum-web-components/button';\nimport { Underlay } from '@spectrum-web-components/underlay';\nimport {\n longContent,\n wrapperButtons,\n wrapperButtonsUnderlay,\n wrapperDismissable,\n wrapperDismissableUnderlayError,\n wrapperFullscreen,\n wrapperHeadlineVisibilityNone,\n wrapperLabeledHero,\n wrapperWithHeadline,\n wrapperWithHeadlineNoDivider,\n} from '../stories/dialog-wrapper.stories.js';\nimport { OverlayTrigger } from '@spectrum-web-components/overlay';\nimport { html, TemplateResult } from '@spectrum-web-components/base';\nimport { Theme } from '@spectrum-web-components/theme';\nimport { testForLitDevWarnings } from '../../../test/testing-helpers.js';\nimport { Divider } from '@spectrum-web-components/divider/src/Divider.js';\n\nasync function styledFixture<T extends Element>(\n story: TemplateResult\n): Promise<T> {\n const test = await fixture<Theme>(html`\n <sp-theme theme=\"classic\" scale=\"medium\" color=\"dark\">\n ${story}\n </sp-theme>\n `);\n return test.children[0] as T;\n}\n\ndescribe('Dialog Wrapper', () => {\n testForLitDevWarnings(\n async () => await styledFixture<DialogWrapper>(wrapperDismissable())\n );\n it('loads wrapped dialog accessibly', async () => {\n const el = await styledFixture<DialogWrapper>(wrapperDismissable());\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n it('loads labeled hero dialog accessibly', async () => {\n const el = await styledFixture<DialogWrapper>(wrapperLabeledHero());\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n it('loads fullscreen wrapped dialog accessibly', async () => {\n const el = await styledFixture<DialogWrapper>(wrapperFullscreen());\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n xit('loads with underlay and no headline accessibly', async () => {\n const el = await styledFixture<DialogWrapper>(wrapperButtonsUnderlay());\n await elementUpdated(el);\n el.headline = '';\n await elementUpdated(el);\n await expect(el).to.be.accessible();\n });\n it('opens and closes', async () => {\n const closeSpy = spy();\n const openedSpy = spy();\n const test = await styledFixture<OverlayTrigger>(html`\n <div @sp-opened=${() => openedSpy()}>${longContent()}</div>\n `);\n const overlayTrigger = test.querySelector(\n 'overlay-trigger'\n ) as OverlayTrigger;\n const el = test.querySelector('sp-dialog-wrapper') as DialogWrapper;\n el.addEventListener('close', () => closeSpy());\n\n await waitUntil(\n () => openedSpy.calledOnce,\n 'click content projected to overlay',\n { timeout: 2000 }\n );\n\n expect(el.open).to.be.true;\n const closed = oneEvent(overlayTrigger, 'sp-closed');\n overlayTrigger.open = undefined;\n await closed;\n\n expect(el.open).to.be.false;\n expect(closeSpy.callCount).to.equal(1);\n });\n it('opens and closes when element is recycled', async () => {\n const closeSpy = spy();\n const openedSpy = spy();\n const test = await styledFixture<OverlayTrigger>(html`\n <div @sp-opened=${() => openedSpy()}>${longContent()}</div>\n `);\n const overlayTrigger = test.querySelector(\n 'overlay-trigger'\n ) as OverlayTrigger;\n const el = test.querySelector('sp-dialog-wrapper') as DialogWrapper;\n el.addEventListener('close', () => closeSpy());\n\n await waitUntil(\n () => openedSpy.calledOnce,\n 'click content projected to overlay',\n { timeout: 2000 }\n );\n\n expect(el.open).to.be.true;\n const closed = oneEvent(overlayTrigger, 'sp-closed');\n overlayTrigger.open = undefined;\n await closed;\n\n expect(el.open).to.be.false;\n expect(closeSpy.callCount).to.equal(1);\n });\n it(\"shows header divider when there's a header\", async () => {\n const wrapper = await styledFixture<DialogWrapper>(\n wrapperWithHeadline()\n );\n await elementUpdated(wrapper);\n\n const dialog = wrapper.shadowRoot.querySelector('sp-dialog') as Dialog;\n const divider = dialog.shadowRoot.querySelector(\n 'sp-divider.divider'\n ) as Divider;\n\n expect(divider).to.be.not.null;\n });\n it('hides header divider when there\\'s a header but \"no-divider\"', async () => {\n const wrapper = await styledFixture<DialogWrapper>(\n wrapperWithHeadlineNoDivider()\n );\n await elementUpdated(wrapper);\n\n await expect(wrapper).to.be.accessible();\n\n const dialog = wrapper.shadowRoot.querySelector('sp-dialog') as Dialog;\n const divider = dialog.shadowRoot.querySelector(\n 'sp-divider.divider'\n ) as Divider;\n\n expect(divider).to.be.null;\n });\n it(\"hides header divider when there's no header\", async () => {\n const wrapper = await styledFixture<DialogWrapper>(\n wrapperHeadlineVisibilityNone()\n );\n await elementUpdated(wrapper);\n\n await expect(wrapper).to.be.accessible();\n\n const dialog = wrapper.shadowRoot.querySelector('sp-dialog') as Dialog;\n const divider = dialog.shadowRoot.querySelector(\n 'sp-divider.divider'\n ) as Divider;\n\n expect(divider).to.be.null;\n });\n it('dismisses via clicking the underlay when [dismissable]', async () => {\n const test = await styledFixture<DialogWrapper>(\n wrapperDismissableUnderlayError()\n );\n const el = test.querySelector('sp-dialog-wrapper') as DialogWrapper;\n await elementUpdated(el);\n expect(el.open).to.be.true;\n el.dismissable = true;\n const underlay = el.shadowRoot.querySelector('sp-underlay') as Underlay;\n underlay.click();\n await elementUpdated(el);\n expect(el.open).to.be.false;\n });\n it('does not dismiss via clicking the underlay :not([dismissable])', async () => {\n const el = await styledFixture<DialogWrapper>(wrapperButtonsUnderlay());\n await elementUpdated(el);\n expect(el.open).to.be.true;\n const underlay = el.shadowRoot.querySelector('sp-underlay') as Underlay;\n underlay.click();\n await elementUpdated(el);\n expect(el.open).to.be.true;\n });\n it('dismisses', async () => {\n const el = await styledFixture<DialogWrapper>(wrapperDismissable());\n\n await elementUpdated(el);\n expect(el.open).to.be.true;\n\n const root = el.shadowRoot ? el.shadowRoot : el;\n const dialog = root.querySelector('sp-dialog') as Dialog;\n const dialogRoot = dialog.shadowRoot ? dialog.shadowRoot : dialog;\n const dismissButton = dialogRoot.querySelector(\n '.close-button'\n ) as HTMLButtonElement;\n dismissButton.click();\n\n await elementUpdated(el);\n expect(el.open).to.be.false;\n });\n it('manages entry focus - buttons', async () => {\n const el = await styledFixture<DialogWrapper>(wrapperButtons());\n\n await elementUpdated(el);\n expect(el.open).to.be.true;\n expect(document.activeElement !== el, 'no focused').to.be.true;\n\n const button = el.shadowRoot.querySelector('sp-button') as Button;\n\n el.focus();\n await elementUpdated(el);\n expect(\n document.activeElement === el,\n `focused generally, ${document.activeElement}`\n ).to.be.true;\n expect(\n (button.getRootNode() as Document).activeElement === button,\n `focused specifically, ${\n (button.getRootNode() as Document).activeElement?.outerHTML\n }`\n ).to.be.true;\n });\n it('dispatches `confirm`, `cancel` and `secondary`', async () => {\n const confirmSpy = spy();\n const cancelSpy = spy();\n const secondarySpy = spy();\n const handleConfirm = (): void => confirmSpy();\n const handleCancel = (): void => cancelSpy();\n const handleSecondary = (): void => secondarySpy();\n const el = await styledFixture<DialogWrapper>(wrapperButtons());\n el.addEventListener('confirm', handleConfirm);\n el.addEventListener('cancel', handleCancel);\n el.addEventListener('secondary', handleSecondary);\n\n await elementUpdated(el);\n expect(confirmSpy.called).to.be.false;\n expect(cancelSpy.called).to.be.false;\n expect(secondarySpy.called).to.be.false;\n\n const accentButton = el.shadowRoot.querySelector(\n '[variant=\"accent\"]'\n ) as Button;\n const primaryButton = el.shadowRoot.querySelector(\n '[variant=\"primary\"]'\n ) as Button;\n const secondaryButton = el.shadowRoot.querySelector(\n '[variant=\"secondary\"]'\n ) as Button;\n\n accentButton.click();\n\n await elementUpdated(el);\n expect(confirmSpy.called, 'dispatched `confirm`').to.be.true;\n expect(secondarySpy.called).to.be.false;\n expect(cancelSpy.called).to.be.false;\n\n primaryButton.click();\n\n await elementUpdated(el);\n expect(confirmSpy.callCount).to.equal(1);\n expect(secondarySpy.called, 'dispatched `cancel`').to.be.true;\n expect(cancelSpy.called).to.be.false;\n\n secondaryButton.click();\n\n await elementUpdated(el);\n expect(confirmSpy.callCount).to.equal(1);\n expect(secondarySpy.callCount).to.equal(1);\n expect(cancelSpy.called, 'dispatched `secondary`').to.be.true;\n });\n\n it('warns in Dev Mode when accessible attributes are not leveraged', async () => {\n const consoleWarnStub = stub(console, 'warn');\n const el = await fixture<DialogWrapper>(html`\n <sp-dialog-wrapper></sp-dialog-wrapper>\n `);\n\n await elementUpdated(el);\n\n expect(consoleWarnStub.called).to.be.true;\n const spyCall = consoleWarnStub.getCall(0);\n expect(\n spyCall.args.at(0).includes('accessible'),\n 'confirm accessibility-centric message'\n ).to.be.true;\n expect(spyCall.args.at(-1), 'confirm `data` shape').to.deep.equal({\n data: {\n localName: 'sp-dialog-wrapper',\n type: 'accessibility',\n level: 'default',\n },\n });\n consoleWarnStub.restore();\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|