@internetarchive/modal-manager 2.0.5-webdev-8155.8 → 2.0.5-webdev-8155.9

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.
@@ -1 +1 @@
1
- {"version":3,"file":"modal-manager.test.js","sourceRoot":"","sources":["../../test/modal-manager.test.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n fixture,\n oneEvent,\n elementUpdated,\n nextFrame,\n fixtureCleanup,\n} from '@open-wc/testing-helpers';\nimport { describe, test, expect, afterEach } from 'vitest';\nimport { TemplateResult, html } from 'lit';\n\nimport '../src/modal-manager';\nimport { ModalConfig } from '../src/modal-config';\nimport { ModalManager } from '../src/modal-manager';\nimport { ModalManagerMode } from '../src/modal-manager-mode';\nimport { ModalManagerInterface } from '../src/modal-manager-interface';\n\nimport { getTabbableElements } from '../src/shoelace/tabbable';\n\ndescribe('Modal Manager', () => {\n afterEach(() => {\n fixtureCleanup();\n });\n\n test('defaults to closed', async () => {\n const el = (await fixture(html`\n <modal-manager></modal-manager>\n `)) as ModalManager;\n\n expect(el.mode).to.equal('closed');\n });\n\n test('can be closed by calling closeModal', async () => {\n const el = (await fixture(html`\n <modal-manager .mode=${ModalManagerMode.Open}></modal-manager>\n `)) as ModalManager;\n\n el.customModalContent = 'foo' as unknown as TemplateResult;\n await elementUpdated(el);\n\n expect(el.customModalContent).to.equal('foo');\n el.closeModal();\n await elementUpdated(el);\n\n expect(el.mode).to.equal('closed');\n expect(el.customModalContent).to.equal(undefined);\n });\n\n test('can be closed by clicking on the backdrop', async () => {\n const el = (await fixture(html`\n <modal-manager .mode=${ModalManagerMode.Open}></modal-manager>\n `)) as ModalManager;\n\n const backdrop = el.shadowRoot?.querySelector('.backdrop');\n const clickEvent = new MouseEvent('click');\n\n backdrop?.dispatchEvent(clickEvent);\n await elementUpdated(el);\n\n expect(el.mode).to.equal('closed');\n });\n\n test('emits a modeChanged event when opening', async () => {\n const el = (await fixture(html`\n <modal-manager></modal-manager>\n `)) as ModalManager;\n\n const config = new ModalConfig();\n\n setTimeout(() => {\n el.showModal({ config });\n });\n const response = await oneEvent(el, 'modeChanged');\n expect(response.detail.mode).to.equal(ModalManagerMode.Open);\n });\n\n test('emits a modeChanged event when closing', async () => {\n const el = (await fixture(html`\n <modal-manager></modal-manager>\n `)) as ModalManager;\n\n const config = new ModalConfig();\n await el.showModal({ config });\n await elementUpdated(el);\n await nextFrame();\n\n setTimeout(() => {\n el.closeModal();\n });\n const response = await oneEvent(el, 'modeChanged');\n expect(response.detail.mode).to.equal(ModalManagerMode.Closed);\n });\n\n test('can show a modal', async () => {\n const el = (await fixture(html`\n <modal-manager></modal-manager>\n `)) as ModalManager;\n\n const config = new ModalConfig();\n el.showModal({ config });\n await elementUpdated(el);\n expect(el.mode).to.equal(ModalManagerMode.Open);\n });\n\n test('sets the --containerHeight CSS property when the window resizes', async () => {\n const el = (await fixture(html`\n <modal-manager></modal-manager>\n `)) as ModalManager;\n\n const config = new ModalConfig();\n el.showModal({ config });\n await elementUpdated(el);\n const event = new Event('resize');\n const propBefore = el.style.getPropertyValue('--containerHeight');\n expect(propBefore).to.equal('');\n window.dispatchEvent(event);\n await elementUpdated(el);\n const propAfter = el.style.getPropertyValue('--containerHeight');\n expect(propAfter).to.not.equal('');\n });\n\n test('calls the userClosedModalCallback when the user taps the backdrop', async () => {\n const el = (await fixture(html`\n <modal-manager></modal-manager>\n `)) as ModalManager;\n\n const config = new ModalConfig();\n let callbackCalled = false;\n const callback = (): void => {\n callbackCalled = true;\n };\n el.showModal({\n config,\n userClosedModalCallback: callback,\n });\n await elementUpdated(el);\n\n const backdrop = el.shadowRoot?.querySelector('.backdrop');\n const clickEvent = new MouseEvent('click');\n backdrop?.dispatchEvent(clickEvent);\n\n await elementUpdated(el);\n\n expect(callbackCalled).to.equal(true);\n });\n\n test('does not call the userClosedModalCallback when the modal just closes', async () => {\n const el = (await fixture(html`\n <modal-manager></modal-manager>\n `)) as ModalManager;\n\n const config = new ModalConfig();\n let callbackCalled = false;\n const callback = (): void => {\n callbackCalled = true;\n };\n el.showModal({\n config,\n userClosedModalCallback: callback,\n });\n await elementUpdated(el);\n el.closeModal();\n await elementUpdated(el);\n expect(callbackCalled).to.equal(false);\n });\n\n test('calls the userPressedLeftNavButtonCallback when the user clicks the left nav button', async () => {\n const el = (await fixture(html`\n <modal-manager></modal-manager>\n `)) as ModalManager;\n\n const config = new ModalConfig();\n config.showLeftNavButton = true;\n\n let callbackCalled = false;\n const callback = (): void => {\n callbackCalled = true;\n };\n el.showModal({\n config,\n userPressedLeftNavButtonCallback: callback,\n });\n await elementUpdated(el);\n\n const modalTemplate = el.shadowRoot?.querySelector('modal-template');\n expect(modalTemplate).to.exist;\n\n modalTemplate?.dispatchEvent(new Event('leftNavButtonPressed'));\n\n await elementUpdated(el);\n\n expect(callbackCalled).to.equal(true);\n });\n\n test('mode is set to closed when close button is pressed', async () => {\n const el = (await fixture(html`\n <modal-manager></modal-manager>\n `)) as ModalManager;\n\n const config = new ModalConfig();\n el.showModal({ config });\n await elementUpdated(el);\n\n expect(el.mode).to.equal('open');\n\n const modal = el.shadowRoot?.querySelector('modal-template');\n const closeButton = modal?.shadowRoot?.querySelector('.close-button');\n const clickEvent = new MouseEvent('click');\n closeButton?.dispatchEvent(clickEvent);\n\n await elementUpdated(el);\n\n expect(el.mode).to.equal('closed');\n });\n\n test('mode is set to closed when close button gets spacebar pressed', async () => {\n const el = (await fixture(html`\n <modal-manager></modal-manager>\n `)) as ModalManager;\n\n const config = new ModalConfig();\n el.showModal({ config });\n await elementUpdated(el);\n\n expect(el.mode).to.equal('open');\n\n const modal = el.shadowRoot?.querySelector('modal-template');\n const closeButton = modal?.shadowRoot?.querySelector('.close-button');\n\n // Close with keyboard\n const spacebarEvent = new KeyboardEvent('keydown', { key: ' ' });\n closeButton?.dispatchEvent(spacebarEvent);\n\n await elementUpdated(el);\n\n expect(el.mode).to.equal('closed');\n });\n\n test('mode remains open when close button gets non-button keypress', async () => {\n const el = (await fixture(html`\n <modal-manager></modal-manager>\n `)) as ModalManager;\n\n const config = new ModalConfig();\n el.showModal({ config });\n await elementUpdated(el);\n\n expect(el.mode).to.equal('open');\n\n const modal = el.shadowRoot?.querySelector('modal-template');\n const closeButton = modal?.shadowRoot?.querySelector('.close-button');\n\n // Close with keyboard\n const keyboardEvent = new KeyboardEvent('keydown', { key: '.' });\n closeButton?.dispatchEvent(keyboardEvent);\n\n await elementUpdated(el);\n\n expect(el.mode).to.equal('open');\n });\n\n test('allows the user to close by clicking on the backdrop if configured to', async () => {\n const el = (await fixture(html`\n <modal-manager></modal-manager>\n `)) as ModalManager;\n\n const config = new ModalConfig();\n config.closeOnBackdropClick = true;\n el.showModal({ config });\n await elementUpdated(el);\n\n const backdrop = el.shadowRoot?.querySelector('.backdrop');\n const clickEvent = new MouseEvent('click');\n backdrop?.dispatchEvent(clickEvent);\n\n await elementUpdated(el);\n\n expect(el.mode).to.equal('closed');\n });\n\n test(\"doesn't allow the user to close by clicking on the backdrop if configured to\", async () => {\n const el = (await fixture(html`\n <modal-manager></modal-manager>\n `)) as ModalManagerInterface;\n\n const config = new ModalConfig();\n config.closeOnBackdropClick = false;\n el.showModal({ config });\n await elementUpdated(el);\n\n const backdrop = el.shadowRoot?.querySelector('.backdrop');\n const clickEvent = new MouseEvent('click');\n backdrop?.dispatchEvent(clickEvent);\n\n await elementUpdated(el);\n\n expect(el.getMode()).to.equal('open');\n });\n\n test('ia logo should not visible on modal', async () => {\n const el = (await fixture(html`\n <modal-manager></modal-manager>\n `)) as ModalManagerInterface;\n\n const config = new ModalConfig();\n config.showHeaderLogo = false;\n el.showModal({ config });\n await elementUpdated(el);\n\n const logoIcon = el.shadowRoot?.querySelector('.logo-icon');\n expect(logoIcon).to.not.exist;\n });\n\n test('should trap Tab key', async () => {\n const el = (await fixture(html`\n <modal-manager></modal-manager>\n `)) as ModalManager;\n\n const config = new ModalConfig();\n el.showModal({ config });\n await elementUpdated(el);\n\n expect(el.mode).to.equal('open');\n\n // Tab once to focus\n const tabEvent = new KeyboardEvent('keydown', { key: 'Tab' });\n document.dispatchEvent(tabEvent);\n await elementUpdated(el);\n await nextFrame();\n\n // Should be only one tabbable element\n const modal = el.shadowRoot?.querySelector('modal-template') as HTMLElement;\n const tabbableElements = getTabbableElements(modal);\n expect(tabbableElements?.length).to.equal(1);\n\n const closeButton = modal?.shadowRoot?.querySelector(\n '.close-button',\n ) as HTMLElement;\n expect(modal?.shadowRoot?.activeElement).to.equal(closeButton);\n\n // Tab again\n el.dispatchEvent(tabEvent);\n await elementUpdated(el);\n await nextFrame();\n\n // Should be only one tabbable element\n expect(modal?.shadowRoot?.activeElement).to.equal(closeButton);\n\n // Shift + Tab\n const shiftTabEvent = new KeyboardEvent('keydown', {\n key: 'Tab',\n shiftKey: true,\n });\n document.dispatchEvent(shiftTabEvent);\n await elementUpdated(el);\n await nextFrame();\n\n // Should be only one tabbable element\n expect(modal?.shadowRoot?.activeElement).to.equal(closeButton);\n });\n\n test('returns keyboard focus to the triggering element on close', async () => {\n const config = new ModalConfig();\n const el = (await fixture(html`\n <div>\n <button>Another button</button>\n <button\n id=\"open-modal-btn\"\n @click=${() => {\n const modal = el.querySelector('modal-manager') as ModalManager;\n modal.showModal({ config });\n }}\n >\n Open modal\n </button>\n <modal-manager></modal-manager>\n </div>\n `)) as HTMLDivElement;\n\n const openBtn = el.querySelector('#open-modal-btn') as HTMLButtonElement;\n const modal = el.querySelector('modal-manager') as ModalManager;\n\n // Focus is initially on the Open button\n openBtn.focus();\n expect(document.activeElement).to.equal(openBtn);\n\n // Focus enters the modal when it is opened\n openBtn.click();\n await nextFrame();\n expect(document.activeElement).to.equal(modal);\n\n // With the modal already open, simulate showing different content.\n // This step is to ensure that even if showModal is called multiple times, we still\n // maintain the originally-focused element (subsequent calls do not overwrite it).\n modal.showModal({ config: new ModalConfig() });\n await nextFrame();\n\n // Focus returns to the Open button when the modal closes\n modal.closeModal();\n await modal.updateComplete;\n expect(document.activeElement).to.equal(openBtn);\n });\n});\n"]}
1
+ {"version":3,"file":"modal-manager.test.js","sourceRoot":"","sources":["../../test/modal-manager.test.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n fixture,\n oneEvent,\n elementUpdated,\n nextFrame,\n fixtureCleanup,\n} from '@open-wc/testing-helpers';\nimport { describe, it, expect, afterEach } from 'vitest';\nimport { TemplateResult, html } from 'lit';\n\nimport '../src/modal-manager';\nimport { ModalConfig } from '../src/modal-config';\nimport { ModalManager } from '../src/modal-manager';\nimport { ModalManagerMode } from '../src/modal-manager-mode';\nimport { ModalManagerInterface } from '../src/modal-manager-interface';\n\nimport { getTabbableElements } from '../src/shoelace/tabbable';\n\ndescribe('Modal Manager', () => {\n afterEach(() => {\n fixtureCleanup();\n });\n\n it('defaults to closed', async () => {\n const el = (await fixture(html`\n <modal-manager></modal-manager>\n `)) as ModalManager;\n\n expect(el.mode).to.equal('closed');\n });\n\n it('can be closed by calling closeModal', async () => {\n const el = (await fixture(html`\n <modal-manager .mode=${ModalManagerMode.Open}></modal-manager>\n `)) as ModalManager;\n\n el.customModalContent = 'foo' as unknown as TemplateResult;\n await elementUpdated(el);\n\n expect(el.customModalContent).to.equal('foo');\n el.closeModal();\n await elementUpdated(el);\n\n expect(el.mode).to.equal('closed');\n expect(el.customModalContent).to.equal(undefined);\n });\n\n it('can be closed by clicking on the backdrop', async () => {\n const el = (await fixture(html`\n <modal-manager .mode=${ModalManagerMode.Open}></modal-manager>\n `)) as ModalManager;\n\n const backdrop = el.shadowRoot?.querySelector('.backdrop');\n const clickEvent = new MouseEvent('click');\n\n backdrop?.dispatchEvent(clickEvent);\n await elementUpdated(el);\n\n expect(el.mode).to.equal('closed');\n });\n\n it('emits a modeChanged event when opening', async () => {\n const el = (await fixture(html`\n <modal-manager></modal-manager>\n `)) as ModalManager;\n\n const config = new ModalConfig();\n\n setTimeout(() => {\n el.showModal({ config });\n });\n const response = await oneEvent(el, 'modeChanged');\n expect(response.detail.mode).to.equal(ModalManagerMode.Open);\n });\n\n it('emits a modeChanged event when closing', async () => {\n const el = (await fixture(html`\n <modal-manager></modal-manager>\n `)) as ModalManager;\n\n const config = new ModalConfig();\n await el.showModal({ config });\n await elementUpdated(el);\n await nextFrame();\n\n setTimeout(() => {\n el.closeModal();\n });\n const response = await oneEvent(el, 'modeChanged');\n expect(response.detail.mode).to.equal(ModalManagerMode.Closed);\n });\n\n it('can show a modal', async () => {\n const el = (await fixture(html`\n <modal-manager></modal-manager>\n `)) as ModalManager;\n\n const config = new ModalConfig();\n el.showModal({ config });\n await elementUpdated(el);\n expect(el.mode).to.equal(ModalManagerMode.Open);\n });\n\n it('sets the --containerHeight CSS property when the window resizes', async () => {\n const el = (await fixture(html`\n <modal-manager></modal-manager>\n `)) as ModalManager;\n\n const config = new ModalConfig();\n el.showModal({ config });\n await elementUpdated(el);\n const event = new Event('resize');\n const propBefore = el.style.getPropertyValue('--containerHeight');\n expect(propBefore).to.equal('');\n window.dispatchEvent(event);\n await elementUpdated(el);\n const propAfter = el.style.getPropertyValue('--containerHeight');\n expect(propAfter).to.not.equal('');\n });\n\n it('calls the userClosedModalCallback when the user taps the backdrop', async () => {\n const el = (await fixture(html`\n <modal-manager></modal-manager>\n `)) as ModalManager;\n\n const config = new ModalConfig();\n let callbackCalled = false;\n const callback = (): void => {\n callbackCalled = true;\n };\n el.showModal({\n config,\n userClosedModalCallback: callback,\n });\n await elementUpdated(el);\n\n const backdrop = el.shadowRoot?.querySelector('.backdrop');\n const clickEvent = new MouseEvent('click');\n backdrop?.dispatchEvent(clickEvent);\n\n await elementUpdated(el);\n\n expect(callbackCalled).to.equal(true);\n });\n\n it('does not call the userClosedModalCallback when the modal just closes', async () => {\n const el = (await fixture(html`\n <modal-manager></modal-manager>\n `)) as ModalManager;\n\n const config = new ModalConfig();\n let callbackCalled = false;\n const callback = (): void => {\n callbackCalled = true;\n };\n el.showModal({\n config,\n userClosedModalCallback: callback,\n });\n await elementUpdated(el);\n el.closeModal();\n await elementUpdated(el);\n expect(callbackCalled).to.equal(false);\n });\n\n it('calls the userPressedLeftNavButtonCallback when the user clicks the left nav button', async () => {\n const el = (await fixture(html`\n <modal-manager></modal-manager>\n `)) as ModalManager;\n\n const config = new ModalConfig();\n config.showLeftNavButton = true;\n\n let callbackCalled = false;\n const callback = (): void => {\n callbackCalled = true;\n };\n el.showModal({\n config,\n userPressedLeftNavButtonCallback: callback,\n });\n await elementUpdated(el);\n\n const modalTemplate = el.shadowRoot?.querySelector('modal-template');\n expect(modalTemplate).to.exist;\n\n modalTemplate?.dispatchEvent(new Event('leftNavButtonPressed'));\n\n await elementUpdated(el);\n\n expect(callbackCalled).to.equal(true);\n });\n\n it('mode is set to closed when close button is pressed', async () => {\n const el = (await fixture(html`\n <modal-manager></modal-manager>\n `)) as ModalManager;\n\n const config = new ModalConfig();\n el.showModal({ config });\n await elementUpdated(el);\n\n expect(el.mode).to.equal('open');\n\n const modal = el.shadowRoot?.querySelector('modal-template');\n const closeButton = modal?.shadowRoot?.querySelector('.close-button');\n const clickEvent = new MouseEvent('click');\n closeButton?.dispatchEvent(clickEvent);\n\n await elementUpdated(el);\n\n expect(el.mode).to.equal('closed');\n });\n\n it('mode is set to closed when close button gets spacebar pressed', async () => {\n const el = (await fixture(html`\n <modal-manager></modal-manager>\n `)) as ModalManager;\n\n const config = new ModalConfig();\n el.showModal({ config });\n await elementUpdated(el);\n\n expect(el.mode).to.equal('open');\n\n const modal = el.shadowRoot?.querySelector('modal-template');\n const closeButton = modal?.shadowRoot?.querySelector('.close-button');\n\n // Close with keyboard\n const spacebarEvent = new KeyboardEvent('keydown', { key: ' ' });\n closeButton?.dispatchEvent(spacebarEvent);\n\n await elementUpdated(el);\n\n expect(el.mode).to.equal('closed');\n });\n\n it('mode remains open when close button gets non-button keypress', async () => {\n const el = (await fixture(html`\n <modal-manager></modal-manager>\n `)) as ModalManager;\n\n const config = new ModalConfig();\n el.showModal({ config });\n await elementUpdated(el);\n\n expect(el.mode).to.equal('open');\n\n const modal = el.shadowRoot?.querySelector('modal-template');\n const closeButton = modal?.shadowRoot?.querySelector('.close-button');\n\n // Close with keyboard\n const keyboardEvent = new KeyboardEvent('keydown', { key: '.' });\n closeButton?.dispatchEvent(keyboardEvent);\n\n await elementUpdated(el);\n\n expect(el.mode).to.equal('open');\n });\n\n it('allows the user to close by clicking on the backdrop if configured to', async () => {\n const el = (await fixture(html`\n <modal-manager></modal-manager>\n `)) as ModalManager;\n\n const config = new ModalConfig();\n config.closeOnBackdropClick = true;\n el.showModal({ config });\n await elementUpdated(el);\n\n const backdrop = el.shadowRoot?.querySelector('.backdrop');\n const clickEvent = new MouseEvent('click');\n backdrop?.dispatchEvent(clickEvent);\n\n await elementUpdated(el);\n\n expect(el.mode).to.equal('closed');\n });\n\n it(\"doesn't allow the user to close by clicking on the backdrop if configured to\", async () => {\n const el = (await fixture(html`\n <modal-manager></modal-manager>\n `)) as ModalManagerInterface;\n\n const config = new ModalConfig();\n config.closeOnBackdropClick = false;\n el.showModal({ config });\n await elementUpdated(el);\n\n const backdrop = el.shadowRoot?.querySelector('.backdrop');\n const clickEvent = new MouseEvent('click');\n backdrop?.dispatchEvent(clickEvent);\n\n await elementUpdated(el);\n\n expect(el.getMode()).to.equal('open');\n });\n\n it('ia logo should not visible on modal', async () => {\n const el = (await fixture(html`\n <modal-manager></modal-manager>\n `)) as ModalManagerInterface;\n\n const config = new ModalConfig();\n config.showHeaderLogo = false;\n el.showModal({ config });\n await elementUpdated(el);\n\n const logoIcon = el.shadowRoot?.querySelector('.logo-icon');\n expect(logoIcon).to.not.exist;\n });\n\n it('should trap Tab key', async () => {\n const el = (await fixture(html`\n <modal-manager></modal-manager>\n `)) as ModalManager;\n\n const config = new ModalConfig();\n el.showModal({ config });\n await elementUpdated(el);\n\n expect(el.mode).to.equal('open');\n\n // Tab once to focus\n const tabEvent = new KeyboardEvent('keydown', { key: 'Tab' });\n document.dispatchEvent(tabEvent);\n await elementUpdated(el);\n await nextFrame();\n\n // Should be only one tabbable element\n const modal = el.shadowRoot?.querySelector('modal-template') as HTMLElement;\n const tabbableElements = getTabbableElements(modal);\n expect(tabbableElements?.length).to.equal(1);\n\n const closeButton = modal?.shadowRoot?.querySelector(\n '.close-button',\n ) as HTMLElement;\n expect(modal?.shadowRoot?.activeElement).to.equal(closeButton);\n\n // Tab again\n el.dispatchEvent(tabEvent);\n await elementUpdated(el);\n await nextFrame();\n\n // Should be only one tabbable element\n expect(modal?.shadowRoot?.activeElement).to.equal(closeButton);\n\n // Shift + Tab\n const shiftTabEvent = new KeyboardEvent('keydown', {\n key: 'Tab',\n shiftKey: true,\n });\n document.dispatchEvent(shiftTabEvent);\n await elementUpdated(el);\n await nextFrame();\n\n // Should be only one tabbable element\n expect(modal?.shadowRoot?.activeElement).to.equal(closeButton);\n });\n\n it('returns keyboard focus to the triggering element on close', async () => {\n const config = new ModalConfig();\n const el = (await fixture(html`\n <div>\n <button>Another button</button>\n <button\n id=\"open-modal-btn\"\n @click=${() => {\n const modal = el.querySelector('modal-manager') as ModalManager;\n modal.showModal({ config });\n }}\n >\n Open modal\n </button>\n <modal-manager></modal-manager>\n </div>\n `)) as HTMLDivElement;\n\n const openBtn = el.querySelector('#open-modal-btn') as HTMLButtonElement;\n const modal = el.querySelector('modal-manager') as ModalManager;\n\n // Focus is initially on the Open button\n openBtn.focus();\n expect(document.activeElement).to.equal(openBtn);\n\n // Focus enters the modal when it is opened\n openBtn.click();\n await nextFrame();\n expect(document.activeElement).to.equal(modal);\n\n // With the modal already open, simulate showing different content.\n // This step is to ensure that even if showModal is called multiple times, we still\n // maintain the originally-focused element (subsequent calls do not overwrite it).\n modal.showModal({ config: new ModalConfig() });\n await nextFrame();\n\n // Focus returns to the Open button when the modal closes\n modal.closeModal();\n await modal.updateComplete;\n expect(document.activeElement).to.equal(openBtn);\n });\n});\n"]}
@@ -1,10 +1,10 @@
1
1
  import { fixture, oneEvent } from '@open-wc/testing-helpers';
2
- import { describe, test, expect } from 'vitest';
2
+ import { describe, it, expect } from 'vitest';
3
3
  import { html } from 'lit';
4
4
  import '../src/modal-template';
5
5
  import { ModalConfig } from '../src/modal-config';
6
6
  describe('Modal Template', () => {
7
- test('has correct default configuration', async () => {
7
+ it('has correct default configuration', async () => {
8
8
  const el = await fixture(html `
9
9
  <modal-template></modal-template>
10
10
  `);
@@ -17,7 +17,7 @@ describe('Modal Template', () => {
17
17
  expect(title).to.not.exist;
18
18
  expect('hidden' in processingLogo.classList);
19
19
  });
20
- test('does not show the title if one not provided', async () => {
20
+ it('does not show the title if one not provided', async () => {
21
21
  const config = new ModalConfig();
22
22
  config.title = undefined;
23
23
  const el = await fixture(html `
@@ -26,7 +26,7 @@ describe('Modal Template', () => {
26
26
  const title = el.shadowRoot?.querySelector('h1.title');
27
27
  expect(title).to.not.exist;
28
28
  });
29
- test('emits closeButtonPressed event when close button is pressed', async () => {
29
+ it('emits closeButtonPressed event when close button is pressed', async () => {
30
30
  const el = await fixture(html `
31
31
  <modal-template></modal-template>
32
32
  `);
@@ -38,7 +38,7 @@ describe('Modal Template', () => {
38
38
  const response = await oneEvent(el, 'closeButtonPressed');
39
39
  expect(response).to.exist;
40
40
  });
41
- test('emits closeButtonPressed event when close button gets spacebar pressed', async () => {
41
+ it('emits closeButtonPressed event when close button gets spacebar pressed', async () => {
42
42
  const el = await fixture(html `
43
43
  <modal-template></modal-template>
44
44
  `);
@@ -50,7 +50,7 @@ describe('Modal Template', () => {
50
50
  const response = await oneEvent(el, 'closeButtonPressed');
51
51
  expect(response).to.exist;
52
52
  });
53
- test('emits leftNavButtonPressed event when left nav button is pressed', async () => {
53
+ it('emits leftNavButtonPressed event when left nav button is pressed', async () => {
54
54
  const config = new ModalConfig();
55
55
  config.showLeftNavButton = true;
56
56
  const el = await fixture(html `
@@ -64,7 +64,7 @@ describe('Modal Template', () => {
64
64
  const response = await oneEvent(el, 'leftNavButtonPressed');
65
65
  expect(response).to.exist;
66
66
  });
67
- test('emits leftNavButtonPressed event when left nav button gets spacebar pressed', async () => {
67
+ it('emits leftNavButtonPressed event when left nav button gets spacebar pressed', async () => {
68
68
  const config = new ModalConfig();
69
69
  config.showLeftNavButton = true;
70
70
  const el = await fixture(html `
@@ -78,7 +78,7 @@ describe('Modal Template', () => {
78
78
  const response = await oneEvent(el, 'leftNavButtonPressed');
79
79
  expect(response).to.exist;
80
80
  });
81
- test('shows the processing indicator if configured to', async () => {
81
+ it('shows the processing indicator if configured to', async () => {
82
82
  const config = new ModalConfig();
83
83
  config.showProcessingIndicator = true;
84
84
  const el = await fixture(html `
@@ -88,7 +88,7 @@ describe('Modal Template', () => {
88
88
  const classList = processingLogo?.classList ?? [];
89
89
  expect('hidden' in classList).to.equal(false);
90
90
  });
91
- test('shows the left nav button if configured to', async () => {
91
+ it('shows the left nav button if configured to', async () => {
92
92
  const config = new ModalConfig();
93
93
  config.showLeftNavButton = true;
94
94
  const el = await fixture(html `
@@ -97,7 +97,7 @@ describe('Modal Template', () => {
97
97
  const leftNavButton = el.shadowRoot?.querySelector('.back-button');
98
98
  expect(leftNavButton).to.exist;
99
99
  });
100
- test('hides the left nav button if configured to', async () => {
100
+ it('hides the left nav button if configured to', async () => {
101
101
  const config = new ModalConfig();
102
102
  config.showCloseButton = false;
103
103
  const el = await fixture(html `
@@ -106,7 +106,7 @@ describe('Modal Template', () => {
106
106
  const closeButton = el.shadowRoot?.querySelector('.close-button');
107
107
  expect(closeButton).to.not.exist;
108
108
  });
109
- test('uses custom text for the left nav button if configured to', async () => {
109
+ it('uses custom text for the left nav button if configured to', async () => {
110
110
  const config = new ModalConfig();
111
111
  config.showLeftNavButton = true;
112
112
  config.leftNavButtonText = 'Previous';
@@ -117,7 +117,7 @@ describe('Modal Template', () => {
117
117
  expect(leftNavButton).to.exist;
118
118
  expect(leftNavButton?.innerHTML).to.contain('Previous');
119
119
  });
120
- test('does not use any text for the left nav button if not configured to', async () => {
120
+ it('does not use any text for the left nav button if not configured to', async () => {
121
121
  const config = new ModalConfig();
122
122
  config.showLeftNavButton = true;
123
123
  const el = await fixture(html `
@@ -126,7 +126,7 @@ describe('Modal Template', () => {
126
126
  const leftNavButton = el.shadowRoot?.querySelector('.back-button');
127
127
  expect(leftNavButton?.innerHTML).not.to.contain('Previous');
128
128
  });
129
- test('shows the close button if configured to', async () => {
129
+ it('shows the close button if configured to', async () => {
130
130
  const config = new ModalConfig();
131
131
  config.showCloseButton = true;
132
132
  const el = await fixture(html `
@@ -135,7 +135,7 @@ describe('Modal Template', () => {
135
135
  const closeButton = el.shadowRoot?.querySelector('.close-button');
136
136
  expect(closeButton).to.exist;
137
137
  });
138
- test('hides the close button if configured to', async () => {
138
+ it('hides the close button if configured to', async () => {
139
139
  const config = new ModalConfig();
140
140
  config.showCloseButton = false;
141
141
  const el = await fixture(html `
@@ -144,7 +144,7 @@ describe('Modal Template', () => {
144
144
  const closeButton = el.shadowRoot?.querySelector('.close-button');
145
145
  expect(closeButton).to.not.exist;
146
146
  });
147
- test('shows the properties from the config', async () => {
147
+ it('shows the properties from the config', async () => {
148
148
  const config = new ModalConfig();
149
149
  config.title = html `Boop`;
150
150
  config.subtitle = html `Bop`;
@@ -1 +1 @@
1
- {"version":3,"file":"modal-template.test.js","sourceRoot":"","sources":["../../test/modal-template.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { fixture, oneEvent } from '@open-wc/testing-helpers';\nimport { describe, test, expect } from 'vitest';\nimport { html } from 'lit';\nimport '../src/modal-template';\nimport { ModalConfig } from '../src/modal-config';\nimport type { ModalTemplate } from '../src/modal-template';\n\ndescribe('Modal Template', () => {\n test('has correct default configuration', async () => {\n const el = await fixture<ModalTemplate>(html`\n <modal-template></modal-template>\n `);\n\n const processingLogo = el.shadowRoot?.querySelector('.processing-logo');\n const headline = el.shadowRoot?.querySelector('.headline');\n const message = el.shadowRoot?.querySelector('.message');\n const title = el.shadowRoot?.querySelector('h1.title') as HTMLElement;\n\n expect(headline).to.not.exist;\n expect(message).to.not.exist;\n expect(title).to.not.exist;\n\n expect('hidden' in processingLogo!.classList);\n });\n\n test('does not show the title if one not provided', async () => {\n const config = new ModalConfig();\n config.title = undefined;\n\n const el = await fixture<ModalTemplate>(html`\n <modal-template .config=${config}></modal-template>\n `);\n\n const title = el.shadowRoot?.querySelector('h1.title');\n expect(title).to.not.exist;\n });\n\n test('emits closeButtonPressed event when close button is pressed', async () => {\n const el = await fixture<ModalTemplate>(html`\n <modal-template></modal-template>\n `);\n const closeButton = el.shadowRoot?.querySelector('.close-button');\n const clickEvent = new MouseEvent('click');\n\n setTimeout(() => {\n closeButton?.dispatchEvent(clickEvent);\n });\n const response = await oneEvent(el, 'closeButtonPressed');\n expect(response).to.exist;\n });\n\n test('emits closeButtonPressed event when close button gets spacebar pressed', async () => {\n const el = await fixture<ModalTemplate>(html`\n <modal-template></modal-template>\n `);\n\n const closeButton = el.shadowRoot?.querySelector('.close-button');\n const clickEvent = new KeyboardEvent('keydown', { key: ' ' });\n\n setTimeout(() => {\n closeButton?.dispatchEvent(clickEvent);\n });\n const response = await oneEvent(el, 'closeButtonPressed');\n expect(response).to.exist;\n });\n\n test('emits leftNavButtonPressed event when left nav button is pressed', async () => {\n const config = new ModalConfig();\n config.showLeftNavButton = true;\n const el = await fixture<ModalTemplate>(html`\n <modal-template .config=${config}></modal-template>\n `);\n\n const leftNavButton = el.shadowRoot?.querySelector('.back-button');\n const clickEvent = new MouseEvent('click');\n\n setTimeout(() => {\n leftNavButton?.dispatchEvent(clickEvent);\n });\n const response = await oneEvent(el, 'leftNavButtonPressed');\n expect(response).to.exist;\n });\n\n test('emits leftNavButtonPressed event when left nav button gets spacebar pressed', async () => {\n const config = new ModalConfig();\n config.showLeftNavButton = true;\n const el = await fixture<ModalTemplate>(html`\n <modal-template .config=${config}></modal-template>\n `);\n\n const leftNavButton = el.shadowRoot?.querySelector('.back-button');\n const clickEvent = new KeyboardEvent('keydown', { key: ' ' });\n\n setTimeout(() => {\n leftNavButton?.dispatchEvent(clickEvent);\n });\n const response = await oneEvent(el, 'leftNavButtonPressed');\n expect(response).to.exist;\n });\n\n test('shows the processing indicator if configured to', async () => {\n const config = new ModalConfig();\n config.showProcessingIndicator = true;\n\n const el = await fixture<ModalTemplate>(html`\n <modal-template .config=${config}></modal-template>\n `);\n\n const processingLogo = el.shadowRoot?.querySelector('.processing-logo');\n const classList = processingLogo?.classList ?? [];\n expect('hidden' in classList).to.equal(false);\n });\n\n test('shows the left nav button if configured to', async () => {\n const config = new ModalConfig();\n config.showLeftNavButton = true;\n const el = await fixture<ModalTemplate>(html`\n <modal-template .config=${config}></modal-template>\n `);\n\n const leftNavButton = el.shadowRoot?.querySelector('.back-button');\n expect(leftNavButton).to.exist;\n });\n\n test('hides the left nav button if configured to', async () => {\n const config = new ModalConfig();\n config.showCloseButton = false;\n const el = await fixture<ModalTemplate>(html`\n <modal-template .config=${config}></modal-template>\n `);\n\n const closeButton = el.shadowRoot?.querySelector('.close-button');\n expect(closeButton).to.not.exist;\n });\n\n test('uses custom text for the left nav button if configured to', async () => {\n const config = new ModalConfig();\n config.showLeftNavButton = true;\n config.leftNavButtonText = 'Previous';\n const el = await fixture<ModalTemplate>(html`\n <modal-template .config=${config}></modal-template>\n `);\n\n const leftNavButton = el.shadowRoot?.querySelector('.back-button');\n\n expect(leftNavButton).to.exist;\n expect(leftNavButton?.innerHTML).to.contain('Previous');\n });\n\n test('does not use any text for the left nav button if not configured to', async () => {\n const config = new ModalConfig();\n config.showLeftNavButton = true;\n\n const el = await fixture<ModalTemplate>(html`\n <modal-template .config=${config}></modal-template>\n `);\n\n const leftNavButton = el.shadowRoot?.querySelector('.back-button');\n expect(leftNavButton?.innerHTML).not.to.contain('Previous');\n });\n\n test('shows the close button if configured to', async () => {\n const config = new ModalConfig();\n config.showCloseButton = true;\n const el = await fixture<ModalTemplate>(html`\n <modal-template .config=${config}></modal-template>\n `);\n\n const closeButton = el.shadowRoot?.querySelector('.close-button');\n expect(closeButton).to.exist;\n });\n\n test('hides the close button if configured to', async () => {\n const config = new ModalConfig();\n config.showCloseButton = false;\n const el = await fixture<ModalTemplate>(html`\n <modal-template .config=${config}></modal-template>\n `);\n\n const closeButton = el.shadowRoot?.querySelector('.close-button');\n expect(closeButton).to.not.exist;\n });\n\n test('shows the properties from the config', async () => {\n const config = new ModalConfig();\n config.title = html`Boop`;\n config.subtitle = html`Bop`;\n config.headline = html`Foo`;\n config.message = html`Bar`;\n\n const el = await fixture<ModalTemplate>(html`\n <modal-template .config=${config}></modal-template>\n `);\n\n const title = el.shadowRoot?.querySelector('h1');\n const subtitle = el.shadowRoot?.querySelector('h2');\n\n const headline = el.shadowRoot?.querySelector('.headline');\n const message = el.shadowRoot?.querySelector('.message');\n\n expect(title).to.exist;\n expect(title?.innerText).to.equal('Boop');\n\n expect(subtitle).to.exist;\n expect(subtitle?.innerText).to.equal('Bop');\n\n expect(headline).to.exist;\n expect(headline?.textContent).to.equal('Foo');\n\n expect(message).to.exist;\n expect(message?.textContent).to.equal('Bar');\n });\n});\n"]}
1
+ {"version":3,"file":"modal-template.test.js","sourceRoot":"","sources":["../../test/modal-template.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { fixture, oneEvent } from '@open-wc/testing-helpers';\nimport { describe, it, expect } from 'vitest';\nimport { html } from 'lit';\nimport '../src/modal-template';\nimport { ModalConfig } from '../src/modal-config';\nimport type { ModalTemplate } from '../src/modal-template';\n\ndescribe('Modal Template', () => {\n it('has correct default configuration', async () => {\n const el = await fixture<ModalTemplate>(html`\n <modal-template></modal-template>\n `);\n\n const processingLogo = el.shadowRoot?.querySelector('.processing-logo');\n const headline = el.shadowRoot?.querySelector('.headline');\n const message = el.shadowRoot?.querySelector('.message');\n const title = el.shadowRoot?.querySelector('h1.title') as HTMLElement;\n\n expect(headline).to.not.exist;\n expect(message).to.not.exist;\n expect(title).to.not.exist;\n\n expect('hidden' in processingLogo!.classList);\n });\n\n it('does not show the title if one not provided', async () => {\n const config = new ModalConfig();\n config.title = undefined;\n\n const el = await fixture<ModalTemplate>(html`\n <modal-template .config=${config}></modal-template>\n `);\n\n const title = el.shadowRoot?.querySelector('h1.title');\n expect(title).to.not.exist;\n });\n\n it('emits closeButtonPressed event when close button is pressed', async () => {\n const el = await fixture<ModalTemplate>(html`\n <modal-template></modal-template>\n `);\n const closeButton = el.shadowRoot?.querySelector('.close-button');\n const clickEvent = new MouseEvent('click');\n\n setTimeout(() => {\n closeButton?.dispatchEvent(clickEvent);\n });\n const response = await oneEvent(el, 'closeButtonPressed');\n expect(response).to.exist;\n });\n\n it('emits closeButtonPressed event when close button gets spacebar pressed', async () => {\n const el = await fixture<ModalTemplate>(html`\n <modal-template></modal-template>\n `);\n\n const closeButton = el.shadowRoot?.querySelector('.close-button');\n const clickEvent = new KeyboardEvent('keydown', { key: ' ' });\n\n setTimeout(() => {\n closeButton?.dispatchEvent(clickEvent);\n });\n const response = await oneEvent(el, 'closeButtonPressed');\n expect(response).to.exist;\n });\n\n it('emits leftNavButtonPressed event when left nav button is pressed', async () => {\n const config = new ModalConfig();\n config.showLeftNavButton = true;\n const el = await fixture<ModalTemplate>(html`\n <modal-template .config=${config}></modal-template>\n `);\n\n const leftNavButton = el.shadowRoot?.querySelector('.back-button');\n const clickEvent = new MouseEvent('click');\n\n setTimeout(() => {\n leftNavButton?.dispatchEvent(clickEvent);\n });\n const response = await oneEvent(el, 'leftNavButtonPressed');\n expect(response).to.exist;\n });\n\n it('emits leftNavButtonPressed event when left nav button gets spacebar pressed', async () => {\n const config = new ModalConfig();\n config.showLeftNavButton = true;\n const el = await fixture<ModalTemplate>(html`\n <modal-template .config=${config}></modal-template>\n `);\n\n const leftNavButton = el.shadowRoot?.querySelector('.back-button');\n const clickEvent = new KeyboardEvent('keydown', { key: ' ' });\n\n setTimeout(() => {\n leftNavButton?.dispatchEvent(clickEvent);\n });\n const response = await oneEvent(el, 'leftNavButtonPressed');\n expect(response).to.exist;\n });\n\n it('shows the processing indicator if configured to', async () => {\n const config = new ModalConfig();\n config.showProcessingIndicator = true;\n\n const el = await fixture<ModalTemplate>(html`\n <modal-template .config=${config}></modal-template>\n `);\n\n const processingLogo = el.shadowRoot?.querySelector('.processing-logo');\n const classList = processingLogo?.classList ?? [];\n expect('hidden' in classList).to.equal(false);\n });\n\n it('shows the left nav button if configured to', async () => {\n const config = new ModalConfig();\n config.showLeftNavButton = true;\n const el = await fixture<ModalTemplate>(html`\n <modal-template .config=${config}></modal-template>\n `);\n\n const leftNavButton = el.shadowRoot?.querySelector('.back-button');\n expect(leftNavButton).to.exist;\n });\n\n it('hides the left nav button if configured to', async () => {\n const config = new ModalConfig();\n config.showCloseButton = false;\n const el = await fixture<ModalTemplate>(html`\n <modal-template .config=${config}></modal-template>\n `);\n\n const closeButton = el.shadowRoot?.querySelector('.close-button');\n expect(closeButton).to.not.exist;\n });\n\n it('uses custom text for the left nav button if configured to', async () => {\n const config = new ModalConfig();\n config.showLeftNavButton = true;\n config.leftNavButtonText = 'Previous';\n const el = await fixture<ModalTemplate>(html`\n <modal-template .config=${config}></modal-template>\n `);\n\n const leftNavButton = el.shadowRoot?.querySelector('.back-button');\n\n expect(leftNavButton).to.exist;\n expect(leftNavButton?.innerHTML).to.contain('Previous');\n });\n\n it('does not use any text for the left nav button if not configured to', async () => {\n const config = new ModalConfig();\n config.showLeftNavButton = true;\n\n const el = await fixture<ModalTemplate>(html`\n <modal-template .config=${config}></modal-template>\n `);\n\n const leftNavButton = el.shadowRoot?.querySelector('.back-button');\n expect(leftNavButton?.innerHTML).not.to.contain('Previous');\n });\n\n it('shows the close button if configured to', async () => {\n const config = new ModalConfig();\n config.showCloseButton = true;\n const el = await fixture<ModalTemplate>(html`\n <modal-template .config=${config}></modal-template>\n `);\n\n const closeButton = el.shadowRoot?.querySelector('.close-button');\n expect(closeButton).to.exist;\n });\n\n it('hides the close button if configured to', async () => {\n const config = new ModalConfig();\n config.showCloseButton = false;\n const el = await fixture<ModalTemplate>(html`\n <modal-template .config=${config}></modal-template>\n `);\n\n const closeButton = el.shadowRoot?.querySelector('.close-button');\n expect(closeButton).to.not.exist;\n });\n\n it('shows the properties from the config', async () => {\n const config = new ModalConfig();\n config.title = html`Boop`;\n config.subtitle = html`Bop`;\n config.headline = html`Foo`;\n config.message = html`Bar`;\n\n const el = await fixture<ModalTemplate>(html`\n <modal-template .config=${config}></modal-template>\n `);\n\n const title = el.shadowRoot?.querySelector('h1');\n const subtitle = el.shadowRoot?.querySelector('h2');\n\n const headline = el.shadowRoot?.querySelector('.headline');\n const message = el.shadowRoot?.querySelector('.message');\n\n expect(title).to.exist;\n expect(title?.innerText).to.equal('Boop');\n\n expect(subtitle).to.exist;\n expect(subtitle?.innerText).to.equal('Bop');\n\n expect(headline).to.exist;\n expect(headline?.textContent).to.equal('Foo');\n\n expect(message).to.exist;\n expect(message?.textContent).to.equal('Bar');\n });\n});\n"]}
@@ -5,7 +5,7 @@ import viteConfig from './vite.config';
5
5
  // https://vitest.dev/config
6
6
  export default mergeConfig(viteConfig, defineConfig({
7
7
  server: {
8
- host: '0.0.0.0',
8
+ host: '127.0.0.1',
9
9
  port: 8080,
10
10
  },
11
11
  test: {
@@ -1 +1 @@
1
- {"version":3,"file":"vitest.config.ci.js","sourceRoot":"","sources":["../vitest.config.ci.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AACvD,OAAO,UAAU,MAAM,eAAe,CAAC;AAEvC,4BAA4B;AAC5B,eAAe,WAAW,CACxB,UAAU,EACV,YAAY,CAAC;IACX,MAAM,EAAE;QACN,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,IAAI;KACX;IACD,IAAI,EAAE;QACJ,OAAO,EAAE;YACP,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,UAAU,EAAE;YACtB,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;SACrC;QACD,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE;YACR,OAAO,EAAE,CAAC,aAAa,CAAC;SACzB;KACF;CACF,CAAC,CACH,CAAC","sourcesContent":["/// <reference types=\"vitest\" />\nimport { defineConfig, mergeConfig } from 'vitest/config';\nimport { playwright } from '@vitest/browser-playwright'\nimport viteConfig from './vite.config';\n\n// https://vitest.dev/config\nexport default mergeConfig(\n viteConfig,\n defineConfig({\n server: {\n host: '0.0.0.0',\n port: 8080,\n },\n test: {\n browser: {\n headless: true,\n enabled: true,\n provider: playwright(),\n instances: [{ browser: 'chromium' }],\n },\n watch: false,\n coverage: {\n include: ['src/**/*.ts'],\n },\n },\n }),\n);\n"]}
1
+ {"version":3,"file":"vitest.config.ci.js","sourceRoot":"","sources":["../vitest.config.ci.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,UAAU,MAAM,eAAe,CAAC;AAEvC,4BAA4B;AAC5B,eAAe,WAAW,CACxB,UAAU,EACV,YAAY,CAAC;IACX,MAAM,EAAE;QACN,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,IAAI;KACX;IACD,IAAI,EAAE;QACJ,OAAO,EAAE;YACP,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,UAAU,EAAE;YACtB,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;SACrC;QACD,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE;YACR,OAAO,EAAE,CAAC,aAAa,CAAC;SACzB;KACF;CACF,CAAC,CACH,CAAC","sourcesContent":["/// <reference types=\"vitest\" />\nimport { defineConfig, mergeConfig } from 'vitest/config';\nimport { playwright } from '@vitest/browser-playwright';\nimport viteConfig from './vite.config';\n\n// https://vitest.dev/config\nexport default mergeConfig(\n viteConfig,\n defineConfig({\n server: {\n host: '127.0.0.1',\n port: 8080,\n },\n test: {\n browser: {\n headless: true,\n enabled: true,\n provider: playwright(),\n instances: [{ browser: 'chromium' }],\n },\n watch: false,\n coverage: {\n include: ['src/**/*.ts'],\n },\n },\n }),\n);\n"]}
package/eslint.config.mjs CHANGED
@@ -1,30 +1,10 @@
1
- import typescriptEslint from '@typescript-eslint/eslint-plugin';
1
+ import tseslint from 'typescript-eslint';
2
2
  import html from 'eslint-plugin-html';
3
- import tsParser from '@typescript-eslint/parser';
4
- import path from 'node:path';
5
- import { fileURLToPath } from 'node:url';
6
- import js from '@eslint/js';
7
- import { FlatCompat } from '@eslint/eslintrc';
8
3
 
9
- const __filename = fileURLToPath(import.meta.url);
10
- const __dirname = path.dirname(__filename);
11
- const compat = new FlatCompat({
12
- baseDirectory: __dirname,
13
- recommendedConfig: js.configs.recommended,
14
- allConfig: js.configs.all,
15
- });
16
-
17
- export default [
18
- ...compat.extends('plugin:@typescript-eslint/recommended'),
4
+ export default tseslint.config(
5
+ ...tseslint.configs.recommended,
19
6
  {
20
- plugins: {
21
- '@typescript-eslint': typescriptEslint,
22
- html,
23
- },
24
-
25
- languageOptions: {
26
- parser: tsParser,
27
- },
7
+ plugins: { html },
28
8
 
29
9
  settings: {
30
10
  'import/resolver': {
@@ -36,8 +16,8 @@ export default [
36
16
  },
37
17
 
38
18
  rules: {
39
- '@typescript-eslint/no-unsafe-function-type': 'warn',
40
- '@typescript-eslint/no-unused-vars': 'warn',
19
+ '@typescript-eslint/no-unsafe-function-type': 'error',
20
+ '@typescript-eslint/no-unused-vars': 'error',
41
21
  '@typescript-eslint/no-explicit-any': 'warn',
42
22
  },
43
23
  },
@@ -50,4 +30,4 @@ export default [
50
30
  '@typescript-eslint/no-unused-expressions': 'off',
51
31
  },
52
32
  },
53
- ];
33
+ );
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@internetarchive/modal-manager",
3
- "version": "2.0.5-webdev-8155.8",
3
+ "version": "2.0.5-webdev-8155.9",
4
4
  "description": "A Modal Manager Web Component",
5
5
  "repository": {
6
6
  "type": "git",
@@ -18,7 +18,7 @@
18
18
  "build": "tsc",
19
19
  "tsc:watch": "tsc --watch",
20
20
  "format": "eslint --fix && prettier --write \"src/**/*.ts\" \"test/**/*.ts\" \"demo/**/*.ts\"",
21
- "lint": "eslint && prettier --check \"src/**/*.ts\" \"test/**/*.ts\"",
21
+ "lint": "eslint && prettier --check \"src/**/*.ts\" \"test/**/*.ts\" \"demo/**/*.ts\"",
22
22
  "circular": "madge --circular .",
23
23
  "test": "npm run circular && npm run lint && vitest run --config ./vitest.config.ci.ts --coverage",
24
24
  "test:watch": "npm run circular && npm run lint && vitest",
@@ -28,32 +28,31 @@
28
28
  "@internetarchive/ia-activity-indicator": "^0.0.6",
29
29
  "@internetarchive/icon-close": "^1.4.0",
30
30
  "@internetarchive/icon-user": "^1.4.0",
31
- "lit": "^2.7.0 || ^3.0.0",
31
+ "lit": "^2.8.0 || ^3.3.2",
32
32
  "throttle-debounce": "^5.0.2"
33
33
  },
34
34
  "devDependencies": {
35
35
  "@open-wc/testing-helpers": "^3.0.1",
36
- "@types/node": "^25.2.0",
36
+ "@types/node": "^25.3.0",
37
37
  "@types/throttle-debounce": "^5.0.2",
38
- "@typescript-eslint/eslint-plugin": "^8.54.0",
39
- "@typescript-eslint/parser": "^8.54.0",
38
+ "typescript-eslint": "^8.54.0",
40
39
  "@vitest/browser": "^4.0.18",
41
40
  "@vitest/browser-playwright": "^4.0.18",
42
41
  "@vitest/coverage-v8": "^4.0.18",
43
42
  "concurrently": "^9.2.1",
44
43
  "deepmerge": "^4.3.1",
45
- "eslint": "^9.39.2",
44
+ "eslint": "^10.0.0",
46
45
  "eslint-config-prettier": "^10.1.8",
47
46
  "eslint-plugin-html": "^8.1.4",
48
47
  "husky": "^9.1.7",
49
48
  "jiti": "^2.6.1",
50
49
  "lint-staged": "^16.2.7",
51
50
  "madge": "^8.0.0",
52
- "playwright": "^1.58.1",
51
+ "playwright": "^1.58.2",
53
52
  "prettier": "^3.8.1",
54
- "rimraf": "^6.1.2",
53
+ "rimraf": "^6.1.3",
55
54
  "tslib": "^2.8.1",
56
- "typedoc": "^0.28.16",
55
+ "typedoc": "^0.28.17",
57
56
  "typescript": "^5.9.3",
58
57
  "vite": "^7.3.1",
59
58
  "vitest": "^4.0.18"
@@ -69,7 +69,6 @@ export class ModalManager extends LitElement implements ModalManagerInterface {
69
69
 
70
70
  async firstUpdated(): Promise<void> {
71
71
  // Give the browser a chance to paint
72
-
73
72
  await new Promise((r) => setTimeout(r, 0));
74
73
 
75
74
  if (this.closeOnBackdropClick) {
@@ -1,10 +1,10 @@
1
- import { describe, test, expect } from 'vitest';
1
+ import { describe, it, expect } from 'vitest';
2
2
  import { html } from 'lit';
3
3
 
4
4
  import { ModalConfig } from '../src/modal-config';
5
5
 
6
6
  describe('Modal Config', () => {
7
- test('can be instantiated properly', async () => {
7
+ it('can be instantiated properly', async () => {
8
8
  const config = new ModalConfig();
9
9
  const title = html`Foo`;
10
10
  config.title = title;
@@ -14,7 +14,7 @@ describe('Modal Config', () => {
14
14
  expect(config.headerColor).to.equal('green');
15
15
  });
16
16
 
17
- test('can be instantiated properly with constructor', async () => {
17
+ it('can be instantiated properly with constructor', async () => {
18
18
  const title = html`Foo`;
19
19
  const subtitle = html`Bar`;
20
20
  const headline = html`Baz`;
@@ -59,7 +59,7 @@ describe('Modal Config', () => {
59
59
  expect(config.closeOnBackdropClick).to.equal(closeOnBackdropClick);
60
60
  });
61
61
 
62
- test('instantiates properly with defaults', async () => {
62
+ it('instantiates properly with defaults', async () => {
63
63
  const config = new ModalConfig();
64
64
  expect(config.title).to.equal(undefined);
65
65
  expect(config.subtitle).to.equal(undefined);