diff --git a/package.json b/package.json index 6ccc365..94be2ea 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "babel-eslint": "^10.1.0", "broccoli-asset-rev": "^3.0.0", "dotenv-cli": "^4.0.0", - "ember-auto-import": "^1.11.2", + "ember-auto-import": "^2.2.0", "ember-cli": "~3.27.0", "ember-cli-dependency-checker": "^3.2.0", "ember-cli-deprecation-workflow": "^2.0.0", @@ -99,6 +99,7 @@ "ember-maybe-import-regenerator": "^0.1.6", "ember-on-helper": "^0.1.0", "ember-page-title": "^6.2.1", + "ember-popperjs": "^1.0.0", "ember-qunit": "^5.1.4", "ember-resolver": "^8.0.2", "ember-source": "~3.28.0", @@ -126,7 +127,8 @@ "tailwindcss": "^2.2.7", "testdouble": "^3.16.1", "testdouble-qunit": "^3.0.0", - "typescript": "^4.4.3" + "typescript": "^4.4.3", + "webpack": "^5.56.0" }, "resolutions": { "@embroider/core": "^0.43.5", diff --git a/tests/accessibility-assertions.js b/tests/accessibility-assertions.js index 65ff871..eb3802b 100644 --- a/tests/accessibility-assertions.js +++ b/tests/accessibility-assertions.js @@ -129,86 +129,81 @@ function assertDialog(options, dialog = getDialog()) { return; } - try { - switch (options.state) { - case DialogState.InvisibleHidden: { - if (dialog === null) { - Qunit.assert.notEqual(dialog, null); - - return; - } + switch (options.state) { + case DialogState.InvisibleHidden: { + if (dialog === null) { + Qunit.assert.notEqual(dialog, null); - assertHidden(dialog); + return; + } - Qunit.assert.dom(dialog).hasAttribute('role', 'dialog'); - Qunit.assert.dom(dialog).doesNotHaveAttribute('aria-modal'); + assertHidden(dialog); - if (options.textContent) { - Qunit.assert.dom(dialog).hasText(options.textContent); - } + Qunit.assert.dom(dialog).hasAttribute('role', 'dialog'); + Qunit.assert.dom(dialog).doesNotHaveAttribute('aria-modal'); - for (let attributeName in options.attributes) { - let attributeValue = options.attributes[attributeName]; + if (options.textContent) { + Qunit.assert.dom(dialog).hasText(options.textContent); + } - if (attributeName === 'class') { - attributeValue = `ember-view ${attributeValue}`; - } + for (let attributeName in options.attributes) { + let attributeValue = options.attributes[attributeName]; - if (attributeName === 'id') { - attributeValue = new RegExp(`${attributeValue}$`); - } + if (attributeName === 'class') { + attributeValue = `ember-view ${attributeValue}`; + } - Qunit.assert.dom(dialog).hasAttribute(attributeName, attributeValue); + if (attributeName === 'id') { + attributeValue = new RegExp(`${attributeValue}$`); } - break; + Qunit.assert.dom(dialog).hasAttribute(attributeName, attributeValue); } - case DialogState.Visible: { - if (dialog === null) { - Qunit.assert.notEqual(dialog, null); + break; + } - return; - } + case DialogState.Visible: { + if (dialog === null) { + Qunit.assert.notEqual(dialog, null); - assertVisible(dialog); + return; + } - Qunit.assert.dom(dialog).hasAttribute('role', 'dialog'); - Qunit.assert.dom(dialog).hasAttribute('aria-modal', 'true'); + assertVisible(dialog); - if (options.textContent) { - Qunit.assert.dom(dialog).hasText(options.textContent); - } + Qunit.assert.dom(dialog).hasAttribute('role', 'dialog'); + Qunit.assert.dom(dialog).hasAttribute('aria-modal', 'true'); - for (let attributeName in options.attributes) { - let attributeValue = options.attributes[attributeName]; + if (options.textContent) { + Qunit.assert.dom(dialog).hasText(options.textContent); + } - if (attributeName === 'class') { - attributeValue = `ember-view ${attributeValue}`; - } + for (let attributeName in options.attributes) { + let attributeValue = options.attributes[attributeName]; - if (attributeName === 'id') { - attributeValue = new RegExp(`${attributeValue}$`); - } + if (attributeName === 'class') { + attributeValue = `ember-view ${attributeValue}`; + } - Qunit.assert.dom(dialog).hasAttribute(attributeName, attributeValue); + if (attributeName === 'id') { + attributeValue = new RegExp(`${attributeValue}$`); } - break; + Qunit.assert.dom(dialog).hasAttribute(attributeName, attributeValue); } - case DialogState.InvisibleUnmounted: { - Qunit.assert.equal(dialog, null); - break; - } + break; + } - default: { - assertNever(options.state); - } + case DialogState.InvisibleUnmounted: { + Qunit.assert.equal(dialog, null); + break; + } + + default: { + assertNever(options.state); } - } catch (err) { - Error.captureStackTrace(err, assertDialog); - throw err; } } @@ -225,81 +220,76 @@ function assertDialogOverlay(options, overlay = getDialogOverlay()) { return; } - try { - switch (options.state) { - case DialogState.InvisibleHidden: { - if (overlay === null) { - Qunit.assert.notEqual(overlay, null); - - return; - } + switch (options.state) { + case DialogState.InvisibleHidden: { + if (overlay === null) { + Qunit.assert.notEqual(overlay, null); - assertHidden(overlay); + return; + } - if (options.textContent) { - Qunit.assert.dom(overlay).hasText(options.textContent); - } + assertHidden(overlay); - for (let attributeName in options.attributes) { - let attributeValue = options.attributes[attributeName]; + if (options.textContent) { + Qunit.assert.dom(overlay).hasText(options.textContent); + } - if (attributeName === 'class') { - attributeValue = `ember-view ${attributeValue}`; - } + for (let attributeName in options.attributes) { + let attributeValue = options.attributes[attributeName]; - if (attributeName === 'id') { - attributeValue = new RegExp(`${attributeValue}$`); - } + if (attributeName === 'class') { + attributeValue = `ember-view ${attributeValue}`; + } - Qunit.assert.dom(overlay).hasAttribute(attributeName, attributeValue); + if (attributeName === 'id') { + attributeValue = new RegExp(`${attributeValue}$`); } - break; + Qunit.assert.dom(overlay).hasAttribute(attributeName, attributeValue); } - case DialogState.Visible: { - if (overlay === null) { - Qunit.assert.notEqual(overlay, null); + break; + } - return; - } + case DialogState.Visible: { + if (overlay === null) { + Qunit.assert.notEqual(overlay, null); - assertVisible(overlay); + return; + } - if (options.textContent) { - Qunit.assert.dom(overlay).hasText(options.textContent); - } + assertVisible(overlay); - for (let attributeName in options.attributes) { - let attributeValue = options.attributes[attributeName]; + if (options.textContent) { + Qunit.assert.dom(overlay).hasText(options.textContent); + } - if (attributeName === 'class') { - attributeValue = `ember-view ${attributeValue}`; - } + for (let attributeName in options.attributes) { + let attributeValue = options.attributes[attributeName]; - if (attributeName === 'id') { - attributeValue = new RegExp(`${attributeValue}$`); - } + if (attributeName === 'class') { + attributeValue = `ember-view ${attributeValue}`; + } - Qunit.assert.dom(overlay).hasAttribute(attributeName, attributeValue); + if (attributeName === 'id') { + attributeValue = new RegExp(`${attributeValue}$`); } - break; + Qunit.assert.dom(overlay).hasAttribute(attributeName, attributeValue); } - case DialogState.InvisibleUnmounted: { - Qunit.assert.equal(overlay, null); + break; + } - break; - } + case DialogState.InvisibleUnmounted: { + Qunit.assert.equal(overlay, null); - default: { - assertNever(options.state); - } + break; + } + + default: { + assertNever(options.state); } - } catch (err) { - Error.captureStackTrace(err, assertDialogOverlay); - throw err; } } @@ -320,99 +310,94 @@ function assertDialogTitle( return; } - try { - switch (options.state) { - case DialogState.InvisibleHidden: { - if (title === null) { - Qunit.assert.notEqual(title, null); - - return; - } + switch (options.state) { + case DialogState.InvisibleHidden: { + if (title === null) { + Qunit.assert.notEqual(title, null); - if (dialog === null) { - Qunit.assert.notEqual(dialog, null); + return; + } - return; - } + if (dialog === null) { + Qunit.assert.notEqual(dialog, null); - assertHidden(title); + return; + } - Qunit.assert.dom(title).hasAttribute('id'); - Qunit.assert.dom(dialog).hasAttribute('aria-labelledby', title.id); + assertHidden(title); - if (options.textContent) { - Qunit.assert.dom(title).hasText(options.textContent); - } + Qunit.assert.dom(title).hasAttribute('id'); + Qunit.assert.dom(dialog).hasAttribute('aria-labelledby', title.id); - for (let attributeName in options.attributes) { - let attributeValue = options.attributes[attributeName]; + if (options.textContent) { + Qunit.assert.dom(title).hasText(options.textContent); + } - if (attributeName === 'class') { - attributeValue = `ember-view ${attributeValue}`; - } + for (let attributeName in options.attributes) { + let attributeValue = options.attributes[attributeName]; - if (attributeName === 'id') { - attributeValue = new RegExp(`${attributeValue}$`); - } + if (attributeName === 'class') { + attributeValue = `ember-view ${attributeValue}`; + } - Qunit.assert.dom(title).hasAttribute(attributeName, attributeValue); + if (attributeName === 'id') { + attributeValue = new RegExp(`${attributeValue}$`); } - break; + Qunit.assert.dom(title).hasAttribute(attributeName, attributeValue); } - case DialogState.Visible: { - if (title === null) { - Qunit.assert.notEqual(title, null); + break; + } - return; - } + case DialogState.Visible: { + if (title === null) { + Qunit.assert.notEqual(title, null); - if (dialog === null) { - Qunit.assert.notEqual(dialog, null); + return; + } - return; - } + if (dialog === null) { + Qunit.assert.notEqual(dialog, null); - assertVisible(title); + return; + } - Qunit.assert.dom(title).hasAttribute('id'); - Qunit.assert.dom(dialog).hasAttribute('aria-labelledby', title.id); + assertVisible(title); - if (options.textContent) { - Qunit.assert.dom(title).hasText(options.textContent); - } + Qunit.assert.dom(title).hasAttribute('id'); + Qunit.assert.dom(dialog).hasAttribute('aria-labelledby', title.id); - for (let attributeName in options.attributes) { - let attributeValue = options.attributes[attributeName]; + if (options.textContent) { + Qunit.assert.dom(title).hasText(options.textContent); + } - if (attributeName === 'class') { - attributeValue = `ember-view ${attributeValue}`; - } + for (let attributeName in options.attributes) { + let attributeValue = options.attributes[attributeName]; - if (attributeName === 'id') { - attributeValue = new RegExp(`${attributeValue}$`); - } + if (attributeName === 'class') { + attributeValue = `ember-view ${attributeValue}`; + } - Qunit.assert.dom(title).hasAttribute(attributeName, attributeValue); + if (attributeName === 'id') { + attributeValue = new RegExp(`${attributeValue}$`); } - break; + Qunit.assert.dom(title).hasAttribute(attributeName, attributeValue); } - case DialogState.InvisibleUnmounted: { - Qunit.assert.equal(title, null); + break; + } - break; - } + case DialogState.InvisibleUnmounted: { + Qunit.assert.equal(title, null); - default: { - assertNever(options.state); - } + break; + } + + default: { + assertNever(options.state); } - } catch (err) { - Error.captureStackTrace(err, assertDialogTitle); - throw err; } } @@ -433,107 +418,98 @@ function assertDialogDescription( return; } - try { - switch (options.state) { - case DialogState.InvisibleHidden: { - if (description === null) { - Qunit.assert.notEqual(description, null); - - return; - } + switch (options.state) { + case DialogState.InvisibleHidden: { + if (description === null) { + Qunit.assert.notEqual(description, null); - if (dialog === null) { - Qunit.assert.notEqual(dialog, null); + return; + } - return; - } + if (dialog === null) { + Qunit.assert.notEqual(dialog, null); - assertHidden(description); + return; + } - Qunit.assert.dom(description).hasAttribute('id'); - Qunit.assert - .dom(dialog) - .hasAttribute('aria-describedby', description.id); + assertHidden(description); - if (options.textContent) { - Qunit.assert.dom(description).hasText(options.textContent); - } + Qunit.assert.dom(description).hasAttribute('id'); + Qunit.assert.dom(dialog).hasAttribute('aria-describedby', description.id); - for (let attributeName in options.attributes) { - let attributeValue = options.attributes[attributeName]; + if (options.textContent) { + Qunit.assert.dom(description).hasText(options.textContent); + } - if (attributeName === 'class') { - attributeValue = `ember-view ${attributeValue}`; - } + for (let attributeName in options.attributes) { + let attributeValue = options.attributes[attributeName]; - if (attributeName === 'id') { - attributeValue = new RegExp(`${attributeValue}$`); - } + if (attributeName === 'class') { + attributeValue = `ember-view ${attributeValue}`; + } - Qunit.assert - .dom(description) - .hasAttribute(attributeName, attributeValue); + if (attributeName === 'id') { + attributeValue = new RegExp(`${attributeValue}$`); } - break; + Qunit.assert + .dom(description) + .hasAttribute(attributeName, attributeValue); } - case DialogState.Visible: { - if (description === null) { - Qunit.assert.notEqual(description, null); + break; + } - return; - } + case DialogState.Visible: { + if (description === null) { + Qunit.assert.notEqual(description, null); - if (dialog === null) { - Qunit.assert.notEqual(dialog, null); + return; + } - return; - } + if (dialog === null) { + Qunit.assert.notEqual(dialog, null); - assertVisible(description); + return; + } - Qunit.assert.dom(description).hasAttribute('id'); - Qunit.assert - .dom(dialog) - .hasAttribute('aria-describedby', description.id); + assertVisible(description); - if (options.textContent) { - Qunit.assert.dom(description).hasText(options.textContent); - } + Qunit.assert.dom(description).hasAttribute('id'); + Qunit.assert.dom(dialog).hasAttribute('aria-describedby', description.id); - for (let attributeName in options.attributes) { - let attributeValue = options.attributes[attributeName]; + if (options.textContent) { + Qunit.assert.dom(description).hasText(options.textContent); + } - if (attributeName === 'class') { - attributeValue = `ember-view ${attributeValue}`; - } + for (let attributeName in options.attributes) { + let attributeValue = options.attributes[attributeName]; - if (attributeName === 'id') { - attributeValue = new RegExp(`${attributeValue}$`); - } + if (attributeName === 'class') { + attributeValue = `ember-view ${attributeValue}`; + } - Qunit.assert - .dom(description) - .hasAttribute(attributeName, attributeValue); + if (attributeName === 'id') { + attributeValue = new RegExp(`${attributeValue}$`); } - break; + Qunit.assert + .dom(description) + .hasAttribute(attributeName, attributeValue); } - case DialogState.InvisibleUnmounted: { - Qunit.assert.equal(description, null); + break; + } - break; - } + case DialogState.InvisibleUnmounted: { + Qunit.assert.equal(description, null); - default: { - assertNever(options.state); - } + break; + } + + default: { + assertNever(options.state); } - } catch (err) { - Error.captureStackTrace(err, assertDialogDescription); - throw err; } } @@ -561,44 +537,39 @@ function assertListboxButton( { state, attributes, textContent }, button = getListboxButton() ) { - try { - if (button === null) return Qunit.assert.ok(button); - Qunit.assert.dom(button).hasAttribute('id'); - Qunit.assert.dom(button).hasAria('haspopup', 'listbox'); - if (textContent) { - Qunit.assert.dom(button).hasText(textContent); - } - switch (state) { - case ListboxState.InvisibleUnmounted: { - Qunit.assert.dom(button).doesNotHaveAria('listbox'); - if (button.hasAttribute('disabled')) { - Qunit.assert.dom(button).doesNotHaveAria('expanded'); - Qunit.assert.dom(button).isDisabled(); - } else { - Qunit.assert.dom(button).hasAria('expanded', 'false'); - } - break; - } - case ListboxState.Visible: { - Qunit.assert.dom(button).hasAria('controls', { any: true }); - Qunit.assert.dom(button).hasAria('expanded', 'true'); - break; + if (button === null) return Qunit.assert.ok(button); + Qunit.assert.dom(button).hasAttribute('id'); + Qunit.assert.dom(button).hasAria('haspopup', 'listbox'); + if (textContent) { + Qunit.assert.dom(button).hasText(textContent); + } + switch (state) { + case ListboxState.InvisibleUnmounted: { + Qunit.assert.dom(button).doesNotHaveAria('listbox'); + if (button.hasAttribute('disabled')) { + Qunit.assert.dom(button).doesNotHaveAria('expanded'); + Qunit.assert.dom(button).isDisabled(); + } else { + Qunit.assert.dom(button).hasAria('expanded', 'false'); } - default: - Qunit.assert.ok( - state, - 'you have to provide state to assertListboxButton' - ); + break; } - - for (let attributeName in attributes) { - Qunit.assert - .dom(button) - .hasAttribute(attributeName, attributes[attributeName]); + case ListboxState.Visible: { + Qunit.assert.dom(button).hasAria('controls', { any: true }); + Qunit.assert.dom(button).hasAria('expanded', 'true'); + break; } - } catch (err) { - Error.captureStackTrace(err, assertListboxButton); - throw err; + default: + Qunit.assert.ok( + state, + 'you have to provide state to assertListboxButton' + ); + } + + for (let attributeName in attributes) { + Qunit.assert + .dom(button) + .hasAttribute(attributeName, attributes[attributeName]); } } @@ -606,166 +577,126 @@ function assertListboxLabelLinkedWithListbox( label = getListboxLabel(), listbox = getListbox() ) { - try { - if (label === null) return Qunit.assert.ok(label); - if (listbox === null) return Qunit.assert.ok(listbox); + if (label === null) return Qunit.assert.ok(label); + if (listbox === null) return Qunit.assert.ok(listbox); - Qunit.assert - .dom(listbox) - .hasAttribute('aria-labelledby', label.getAttribute('id')); - } catch (err) { - Error.captureStackTrace(err, assertListboxLabelLinkedWithListbox); - throw err; - } + Qunit.assert + .dom(listbox) + .hasAttribute('aria-labelledby', label.getAttribute('id')); } function assertListboxButtonLinkedWithListbox( button = getListboxButton(), listbox = getListbox() ) { - try { - if (button === null) return Qunit.assert.ok(button); - if (listbox === null) return Qunit.assert.ok(listbox); - - // Ensure link between button & listbox is correct - Qunit.assert - .dom(button) - .hasAttribute('aria-controls', listbox.getAttribute('id')); - Qunit.assert - .dom(listbox) - .hasAttribute('aria-labelledby', button.getAttribute('id')); - } catch (err) { - Error.captureStackTrace(err, assertListboxButtonLinkedWithListbox); - throw err; - } + if (button === null) return Qunit.assert.ok(button); + if (listbox === null) return Qunit.assert.ok(listbox); + + // Ensure link between button & listbox is correct + Qunit.assert + .dom(button) + .hasAttribute('aria-controls', listbox.getAttribute('id')); + Qunit.assert + .dom(listbox) + .hasAttribute('aria-labelledby', button.getAttribute('id')); } function assertActiveListboxOption(item, listbox = getListbox()) { - try { - if (item === null) return Qunit.assert.ok(item); - if (listbox === null) return Qunit.assert.ok(listbox); + if (item === null) return Qunit.assert.ok(item); + if (listbox === null) return Qunit.assert.ok(listbox); - // Ensure link between listbox & listbox item is correct - Qunit.assert - .dom(listbox) - .hasAttribute('aria-activedescendant', item.getAttribute('id')); - } catch (err) { - Error.captureStackTrace(err, assertActiveListboxOption); - throw err; - } + // Ensure link between listbox & listbox item is correct + Qunit.assert + .dom(listbox) + .hasAttribute('aria-activedescendant', item.getAttribute('id')); } function assertNoActiveListboxOption(listbox = getListbox()) { - try { - if (listbox === null) return Qunit.assert.ok(listbox); + if (listbox === null) return Qunit.assert.ok(listbox); - // Ensure we don't have an active listbox - Qunit.assert.dom(listbox).doesNotHaveAttribute('aria-activedescendant'); - } catch (err) { - Error.captureStackTrace(err, assertNoActiveListboxOption); - throw err; - } + // Ensure we don't have an active listbox + Qunit.assert.dom(listbox).doesNotHaveAttribute('aria-activedescendant'); } function assertNoSelectedListboxOption(items = getListboxOptions()) { - try { - for (let item of items) - Qunit.assert.dom(item).doesNotHaveAttribute('aria-selected'); - } catch (err) { - Error.captureStackTrace(err, assertNoSelectedListboxOption); - throw err; - } + for (let item of items) + Qunit.assert.dom(item).doesNotHaveAttribute('aria-selected'); } function assertListboxButtonLinkedWithListboxLabel( button = getListboxButton(), label = getListboxLabel() ) { - try { - if (button === null) return Qunit.assert.ok(button); - if (label === null) return Qunit.assert.ok(label); + if (button === null) return Qunit.assert.ok(button); + if (label === null) return Qunit.assert.ok(label); - // Ensure link between button & label is correct - Qunit.assert - .dom(button) - .hasAttribute('aria-labelledby', `${label.id} ${button.id}`); - } catch (err) { - Error.captureStackTrace(err, assertListboxButtonLinkedWithListboxLabel); - throw err; - } + // Ensure link between button & label is correct + Qunit.assert + .dom(button) + .hasAttribute('aria-labelledby', `${label.id} ${button.id}`); } function assertListboxLabel( { attributes, tag, textContent }, label = getListboxLabel() ) { - try { - if (label === null) return Qunit.assert.ok(label); + if (label === null) return Qunit.assert.ok(label); - // Ensure menu button have these properties - Qunit.assert.dom(label).hasAttribute('id'); + // Ensure menu button have these properties + Qunit.assert.dom(label).hasAttribute('id'); - if (textContent) { - Qunit.assert.dom(label).hasText(textContent); - } + if (textContent) { + Qunit.assert.dom(label).hasText(textContent); + } - if (tag) { - Qunit.assert.dom(label).hasTagName(tag); - } + if (tag) { + Qunit.assert.dom(label).hasTagName(tag); + } - // Ensure menu button has the following attributes - for (let attributeName in attributes) { - Qunit.assert - .dom(label) - .hasAttribute(attributeName, attributes[attributeName]); - } - } catch (err) { - Error.captureStackTrace(err, assertListboxLabel); - throw err; + // Ensure menu button has the following attributes + for (let attributeName in attributes) { + Qunit.assert + .dom(label) + .hasAttribute(attributeName, attributes[attributeName]); } } export function assertListboxOption({ tag, attributes, selected }, item) { - try { - if (item === null) return Qunit.assert.notOk(item); + if (item === null) return Qunit.assert.notOk(item); - // Check that some attributes exists, doesn't really matter what the values are at this point in - // time, we just require them. - Qunit.assert.dom(item).hasAttribute('id'); + // Check that some attributes exists, doesn't really matter what the values are at this point in + // time, we just require them. + Qunit.assert.dom(item).hasAttribute('id'); - // Check that we have the correct values for certain attributes - Qunit.assert.dom(item).hasAttribute('role', 'option'); - if (!item.getAttribute('aria-disabled')) - Qunit.assert.dom(item).hasAttribute('tabindex', '-1'); + // Check that we have the correct values for certain attributes + Qunit.assert.dom(item).hasAttribute('role', 'option'); + if (!item.getAttribute('aria-disabled')) + Qunit.assert.dom(item).hasAttribute('tabindex', '-1'); - // Ensure listbox button has the following attributes - if (!tag && !attributes && !selected) return; + // Ensure listbox button has the following attributes + if (!tag && !attributes && !selected) return; - for (let attributeName in attributes) { - Qunit.assert - .dom(item) - .hasAttribute(attributeName, attributes[attributeName]); - } + for (let attributeName in attributes) { + Qunit.assert + .dom(item) + .hasAttribute(attributeName, attributes[attributeName]); + } - if (tag) { - Qunit.assert.dom(item).hasTagName(tag); - } + if (tag) { + Qunit.assert.dom(item).hasTagName(tag); + } - if (selected != null) { - switch (selected) { - case true: - return Qunit.assert.dom(item).hasAttribute('aria-selected', 'true'); + if (selected != null) { + switch (selected) { + case true: + return Qunit.assert.dom(item).hasAttribute('aria-selected', 'true'); - case false: - return Qunit.assert.dom(item).doesNotHaveAttribute('aria-selected'); + case false: + return Qunit.assert.dom(item).doesNotHaveAttribute('aria-selected'); - default: - Qunit.assert.ok(); - } + default: + Qunit.assert.ok(); } - } catch (err) { - Error.captureStackTrace(err, assertListboxOption); - throw err; } } @@ -774,53 +705,48 @@ function assertListbox( listbox = getListbox(), orientation = 'vertical' ) { - try { - switch (state) { - case ListboxState.InvisibleHidden: { - if (listbox === null) return Qunit.assert.dom(listbox).exists(); + switch (state) { + case ListboxState.InvisibleHidden: { + if (listbox === null) return Qunit.assert.dom(listbox).exists(); - assertHidden(listbox); + assertHidden(listbox); - Qunit.assert.dom(listbox).hasAria('labelledby'); - Qunit.assert.dom(listbox).hasAria('orientation', orientation); - Qunit.assert.dom(listbox).hasAttribute('role', 'listbox'); + Qunit.assert.dom(listbox).hasAria('labelledby'); + Qunit.assert.dom(listbox).hasAria('orientation', orientation); + Qunit.assert.dom(listbox).hasAttribute('role', 'listbox'); - if (textContent) Qunit.assert.dom(listbox).hasText(textContent); + if (textContent) Qunit.assert.dom(listbox).hasText(textContent); - for (let attributeName in attributes) { - Qunit.assert - .dom(listbox) - .hasAttribute(attributeName, attributes[attributeName]); - } - break; - } - case ListboxState.InvisibleUnmounted: { - Qunit.assert.dom(listbox).doesNotExist(); - break; + for (let attributeName in attributes) { + Qunit.assert + .dom(listbox) + .hasAttribute(attributeName, attributes[attributeName]); } - case ListboxState.Visible: { - // Qunit.assert.dom(listbox).isVisible(); - Qunit.assert.dom(listbox).exists(); + break; + } + case ListboxState.InvisibleUnmounted: { + Qunit.assert.dom(listbox).doesNotExist(); + break; + } + case ListboxState.Visible: { + // Qunit.assert.dom(listbox).isVisible(); + Qunit.assert.dom(listbox).exists(); - Qunit.assert.dom(listbox).hasAria('labelledby', { any: true }); - Qunit.assert.dom(listbox).hasAttribute('aria-orientation', orientation); - Qunit.assert.dom(listbox).hasAttribute('role', 'listbox'); + Qunit.assert.dom(listbox).hasAria('labelledby', { any: true }); + Qunit.assert.dom(listbox).hasAttribute('aria-orientation', orientation); + Qunit.assert.dom(listbox).hasAttribute('role', 'listbox'); - if (textContent) Qunit.assert.dom(listbox).hasText(textContent); + if (textContent) Qunit.assert.dom(listbox).hasText(textContent); - for (let attributeName in attributes) { - Qunit.assert - .dom(listbox) - .hasAttribute(attributeName, attributes[attributeName]); - } - break; + for (let attributeName in attributes) { + Qunit.assert + .dom(listbox) + .hasAttribute(attributeName, attributes[attributeName]); } - default: - Qunit.assert.ok(state, 'you have to provide state to assertListbox'); + break; } - } catch (err) { - Error.captureStackTrace(err, assertListbox); - throw err; + default: + Qunit.assert.ok(state, 'you have to provide state to assertListbox'); } } diff --git a/tests/dummy/app/templates/index.hbs b/tests/dummy/app/templates/index.hbs index 5b27ab2..cd24e6f 100644 --- a/tests/dummy/app/templates/index.hbs +++ b/tests/dummy/app/templates/index.hbs @@ -10,7 +10,7 @@ Menu (basic)
  • - Menu with Popper [todo] + Menu with Popper
  • diff --git a/tests/dummy/app/templates/menu/menu-with-popper.hbs b/tests/dummy/app/templates/menu/menu-with-popper.hbs index 623476f..85bf3b7 100644 --- a/tests/dummy/app/templates/menu/menu-with-popper.hbs +++ b/tests/dummy/app/templates/menu/menu-with-popper.hbs @@ -1 +1,69 @@ -menu-with-popper will go here \ No newline at end of file +
    +
    + + + + + Options + + + + + + +
    +

    Signed in as

    +

    tom@example.com

    +
    + +
    + + Account settings + + + Support + + + New + feature (soon) + + + License + +
    +
    + + Sign out + +
    +
    +
    +
    +
    +
    \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 959ea18..c524f21 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1228,6 +1228,19 @@ semver "^7.3.5" typescript-memoize "^1.0.1" +"@embroider/shared-internals@^0.40.0": + version "0.40.0" + resolved "https://registry.npmjs.org/@embroider/shared-internals/-/shared-internals-0.40.0.tgz#2f768c60f4f35ba5f9228f046f70324851e8bfe2" + integrity sha512-Ovr/i0Qgn6W6jdGXMvYJKlRoRpyBY9uhYozDSFKlBjeEmRJ0Plp7OST41+O5Td6Pqp+Rv2jVSnGzhA/MpC++NQ== + dependencies: + ember-rfc176-data "^0.3.17" + fs-extra "^7.0.1" + lodash "^4.17.10" + pkg-up "^3.1.0" + resolve-package-path "^1.2.2" + semver "^7.3.2" + typescript-memoize "^1.0.0-alpha.3" + "@embroider/test-setup@^0.43.5": version "0.43.5" resolved "https://registry.yarnpkg.com/@embroider/test-setup/-/test-setup-0.43.5.tgz#79944cb50038802cc71d50aa0d5d7a0955ee6349" @@ -1622,6 +1635,11 @@ dependencies: "@octokit/openapi-types" "^7.2.3" +"@popperjs/core@^2.10.2": + version "2.10.2" + resolved "https://registry.npmjs.org/@popperjs/core/-/core-2.10.2.tgz#0798c03351f0dea1a5a4cabddf26a55a7cbee590" + integrity sha512-IXf3XA7+XyN7CP9gGh/XB0UxVMlvARGEgGXLubFICsUMGz6Q+DU+i4gGlpOxTjKvXjkJDJC8YdqdKkDj9qZHEQ== + "@simple-dom/interface@^1.4.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@simple-dom/interface/-/interface-1.4.0.tgz#e8feea579232017f89b0138e2726facda6fbb71f" @@ -1948,7 +1966,15 @@ resolved "https://registry.npmjs.org/@types/ember__utils/-/ember__utils-3.16.2.tgz#3fa9a0666a3e8204262e2a2960289aaf01f29467" integrity sha512-tBbqewgegiKSpGZvGh3pbcoXwLCMvKVdLRE97vys75nAEz/vBzkGJm+PDz1HVaTkRukWbRhlDiTm2qFH8qRnSw== -"@types/eslint@^7.2.12": +"@types/eslint-scope@^3.7.0": + version "3.7.1" + resolved "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz#8dc390a7b4f9dd9f1284629efce982e41612116e" + integrity sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*", "@types/eslint@^7.2.12": version "7.28.0" resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.28.0.tgz#7e41f2481d301c68e14f483fe10b017753ce8d5a" integrity sha512-07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A== @@ -1961,6 +1987,11 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.48.tgz#18dc8091b285df90db2f25aa7d906cfc394b7f74" integrity sha512-LfZwXoGUDo0C3me81HXgkBg5CTQYb6xzEl+fNmbO4JdRiSKQ8A0GD1OBBvKAIsbCUgoyAty7m99GqqMQe784ew== +"@types/estree@^0.0.50": + version "0.0.50" + resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83" + integrity sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw== + "@types/express-serve-static-core@^4.17.18": version "4.17.21" resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.21.tgz#a427278e106bca77b83ad85221eae709a3414d42" @@ -2048,7 +2079,7 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== -"@types/json-schema@^7.0.7": +"@types/json-schema@^7.0.7", "@types/json-schema@^7.0.8": version "7.0.9" resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== @@ -2237,6 +2268,14 @@ "@typescript-eslint/types" "4.32.0" eslint-visitor-keys "^2.0.0" +"@webassemblyjs/ast@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" + integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== + dependencies: + "@webassemblyjs/helper-numbers" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ast@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" @@ -2246,16 +2285,31 @@ "@webassemblyjs/helper-wasm-bytecode" "1.9.0" "@webassemblyjs/wast-parser" "1.9.0" +"@webassemblyjs/floating-point-hex-parser@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" + integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== + "@webassemblyjs/floating-point-hex-parser@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== +"@webassemblyjs/helper-api-error@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" + integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== + "@webassemblyjs/helper-api-error@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== +"@webassemblyjs/helper-buffer@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" + integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== + "@webassemblyjs/helper-buffer@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" @@ -2280,11 +2334,35 @@ dependencies: "@webassemblyjs/ast" "1.9.0" +"@webassemblyjs/helper-numbers@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" + integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" + integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== + "@webassemblyjs/helper-wasm-bytecode@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== +"@webassemblyjs/helper-wasm-section@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" + integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/helper-wasm-section@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" @@ -2295,6 +2373,13 @@ "@webassemblyjs/helper-wasm-bytecode" "1.9.0" "@webassemblyjs/wasm-gen" "1.9.0" +"@webassemblyjs/ieee754@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" + integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== + dependencies: + "@xtuc/ieee754" "^1.2.0" + "@webassemblyjs/ieee754@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" @@ -2302,6 +2387,13 @@ dependencies: "@xtuc/ieee754" "^1.2.0" +"@webassemblyjs/leb128@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" + integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== + dependencies: + "@xtuc/long" "4.2.2" + "@webassemblyjs/leb128@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" @@ -2309,11 +2401,30 @@ dependencies: "@xtuc/long" "4.2.2" +"@webassemblyjs/utf8@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" + integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== + "@webassemblyjs/utf8@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== +"@webassemblyjs/wasm-edit@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" + integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/helper-wasm-section" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-opt" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + "@webassemblyjs/wast-printer" "1.11.1" + "@webassemblyjs/wasm-edit@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" @@ -2328,6 +2439,17 @@ "@webassemblyjs/wasm-parser" "1.9.0" "@webassemblyjs/wast-printer" "1.9.0" +"@webassemblyjs/wasm-gen@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" + integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + "@webassemblyjs/wasm-gen@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" @@ -2339,6 +2461,16 @@ "@webassemblyjs/leb128" "1.9.0" "@webassemblyjs/utf8" "1.9.0" +"@webassemblyjs/wasm-opt@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" + integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + "@webassemblyjs/wasm-opt@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" @@ -2349,6 +2481,18 @@ "@webassemblyjs/wasm-gen" "1.9.0" "@webassemblyjs/wasm-parser" "1.9.0" +"@webassemblyjs/wasm-parser@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" + integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + "@webassemblyjs/wasm-parser@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" @@ -2373,6 +2517,14 @@ "@webassemblyjs/helper-fsm" "1.9.0" "@xtuc/long" "4.2.2" +"@webassemblyjs/wast-printer@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" + integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@xtuc/long" "4.2.2" + "@webassemblyjs/wast-printer@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" @@ -2418,6 +2570,11 @@ acorn-globals@^6.0.0: acorn "^7.1.1" acorn-walk "^7.1.1" +acorn-import-assertions@^1.7.6: + version "1.7.6" + resolved "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.7.6.tgz#580e3ffcae6770eebeec76c3b9723201e9d01f78" + integrity sha512-FlVvVFA1TX6l3lp8VjDnYYq7R1nyW6x3svAt4nDgrWQ9SBaSh9CnbwgSUTasgfNfOG5HlM1ehugCvM+hjo56LA== + acorn-jsx@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" @@ -2452,6 +2609,11 @@ acorn@^8.2.4: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.3.0.tgz#1193f9b96c4e8232f00b11a9edff81b2c8b98b88" integrity sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw== +acorn@^8.4.1: + version "8.5.0" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz#4512ccb99b3698c752591e9bb4472e38ad43cee2" + integrity sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q== + agent-base@5: version "5.1.1" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-5.1.1.tgz#e8fb3f242959db44d63be665db7a8e739537a32c" @@ -2498,7 +2660,7 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4: +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -3114,7 +3276,7 @@ babel-plugin-htmlbars-inline-precompile@^4.2.0: dependencies: babel-plugin-ember-modules-api-polyfill "^3.4.0" -babel-plugin-htmlbars-inline-precompile@^5.0.0: +babel-plugin-htmlbars-inline-precompile@^5.0.0, babel-plugin-htmlbars-inline-precompile@^5.2.1: version "5.3.0" resolved "https://registry.yarnpkg.com/babel-plugin-htmlbars-inline-precompile/-/babel-plugin-htmlbars-inline-precompile-5.3.0.tgz#eeaff07c35415264aea4d6bafb5e71167f6ffb2f" integrity sha512-WeLBQM5Y9rx2GbwfxKy47lWh+u23afdlb48sM+5RTMTLwO90oILA7znzzOls7e+bcj06Nw0H+xpRWuyhlS37hg== @@ -4367,6 +4529,17 @@ browserslist@^3.2.6: caniuse-lite "^1.0.30000844" electron-to-chromium "^1.3.47" +browserslist@^4.14.5: + version "4.17.2" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.17.2.tgz#aa15dbd2fab399a399fe4df601bb09363c5458a6" + integrity sha512-jSDZyqJmkKMEMi7SZAgX5UltFdR5NAO43vY0AwTpu4X3sGH7GLLQ83KiUomgrnvZRCeW0yPPnKqnxPqQOER9zQ== + dependencies: + caniuse-lite "^1.0.30001261" + electron-to-chromium "^1.3.854" + escalade "^3.1.1" + nanocolors "^0.2.12" + node-releases "^1.1.76" + browserslist@^4.16.6: version "4.16.6" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" @@ -4589,6 +4762,11 @@ caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30001219: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001236.tgz#0a80de4cdf62e1770bb46a30d884fc8d633e3958" integrity sha512-o0PRQSrSCGJKCPZcgMzl5fUaj5xHe8qA2m4QRvnyY4e1lITqoNkr7q/Oh1NcpGSy0Th97UZ35yoKcINPoq7YOQ== +caniuse-lite@^1.0.30001261: + version "1.0.30001264" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001264.tgz#88f625a60efb6724c7c62ac698bc8dbd9757e55b" + integrity sha512-Ftfqqfcs/ePiUmyaySsQ4PUsdcYyXG2rfoBVsk3iY1ahHaJEw65vfb7Suzqm+cEkwwPIv/XWkg27iCpRavH4zA== + capture-exit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" @@ -5309,6 +5487,22 @@ crypto-random-string@^2.0.0: resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== +css-loader@^5.2.0: + version "5.2.7" + resolved "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz#9b9f111edf6fb2be5dc62525644cbc9c232064ae" + integrity sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg== + dependencies: + icss-utils "^5.1.0" + loader-utils "^2.0.0" + postcss "^8.2.15" + postcss-modules-extract-imports "^3.0.0" + postcss-modules-local-by-default "^4.0.0" + postcss-modules-scope "^3.0.0" + postcss-modules-values "^4.0.0" + postcss-value-parser "^4.1.0" + schema-utils "^3.0.0" + semver "^7.3.5" + css-tree@^1.0.0-alpha.39: version "1.1.3" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" @@ -5703,6 +5897,11 @@ electron-to-chromium@^1.3.47, electron-to-chromium@^1.3.723: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz#0728587f1b9b970ec9ffad932496429aef750d09" integrity sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A== +electron-to-chromium@^1.3.854: + version "1.3.857" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.857.tgz#dcc239ff8a12b6e4b501e6a5ad20fd0d5a3210f9" + integrity sha512-a5kIr2lajm4bJ5E4D3fp8Y/BRB0Dx2VOcCRE5Gtb679mXIME/OFhWler8Gy2ksrf8gFX+EFCSIGA33FB3gqYpg== + elliptic@^6.5.3: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" @@ -5751,6 +5950,44 @@ ember-auto-import@^1.10.1, ember-auto-import@^1.11.2: walk-sync "^0.3.3" webpack "^4.43.0" +ember-auto-import@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/ember-auto-import/-/ember-auto-import-2.2.0.tgz#6206be37e676fb490f03dd20afab973d5abe9da9" + integrity sha512-ngluzmtV31mTY+1ceOnWfGUIgGyZt850xFncMX/14Dfx0OhXaUKBpFjKjIor/Cen4WEF+OrdgNJAjH3sM07o6w== + dependencies: + "@babel/core" "^7.1.6" + "@babel/plugin-proposal-class-properties" "^7.13.0" + "@babel/plugin-proposal-decorators" "^7.13.5" + "@babel/preset-env" "^7.10.2" + "@babel/traverse" "^7.1.6" + "@embroider/shared-internals" "^0.40.0" + babel-loader "^8.0.6" + babel-plugin-ember-modules-api-polyfill "^3.5.0" + babel-plugin-htmlbars-inline-precompile "^5.2.1" + babel-plugin-syntax-dynamic-import "^6.18.0" + broccoli-debug "^0.6.4" + broccoli-funnel "^3.0.8" + broccoli-merge-trees "^4.2.0" + broccoli-plugin "^4.0.0" + broccoli-source "^3.0.0" + css-loader "^5.2.0" + debug "^4.3.1" + ember-cli-babel "^7.0.0" + fs-extra "^6.0.1" + fs-tree-diff "^2.0.0" + handlebars "^4.3.1" + js-string-escape "^1.0.1" + lodash "^4.17.19" + mkdirp "^0.5.1" + parse5 "^6.0.1" + resolve "^1.20.0" + resolve-package-path "^3.1.0" + rimraf "^2.6.2" + semver "^7.3.4" + style-loader "^2.0.0" + typescript-memoize "^1.0.0-alpha.3" + walk-sync "^0.3.3" + ember-cli-babel-plugin-helpers@^1.0.0, ember-cli-babel-plugin-helpers@^1.1.0, ember-cli-babel-plugin-helpers@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ember-cli-babel-plugin-helpers/-/ember-cli-babel-plugin-helpers-1.1.1.tgz#5016b80cdef37036c4282eef2d863e1d73576879" @@ -6304,6 +6541,19 @@ ember-page-title@^6.2.1: dependencies: ember-cli-babel "^7.23.1" +ember-popperjs@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/ember-popperjs/-/ember-popperjs-1.0.0.tgz#d9d0817750ed50182453cbe70d36752e1a3315ea" + integrity sha512-FVjlWzSacvxijguM1zYodlUGElKD2jPbXzGRC9zby0ksnKrRGw50q9VpHa+GkBRotARVL2bxRkZeCbakqTyZIA== + dependencies: + "@glimmer/component" "^1.0.4" + "@glimmer/tracking" "^1.0.4" + "@popperjs/core" "^2.10.2" + ember-auto-import "^2.2.0" + ember-cli-babel "^7.26.6" + ember-cli-htmlbars "^5.7.1" + ember-cli-typescript "^4.2.1" + ember-qunit@^5.1.4: version "5.1.4" resolved "https://registry.yarnpkg.com/ember-qunit/-/ember-qunit-5.1.4.tgz#bc69f963a0f5409ce33bee1e4d8146b1407147bf" @@ -6564,6 +6814,14 @@ enhanced-resolve@^4.0.0, enhanced-resolve@^4.5.0: memory-fs "^0.5.0" tapable "^1.0.0" +enhanced-resolve@^5.8.3: + version "5.8.3" + resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz#6d552d465cce0423f5b3d718511ea53826a7b2f0" + integrity sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + enquirer@^2.3.5, enquirer@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" @@ -6670,6 +6928,11 @@ es-abstract@^1.19.0: string.prototype.trimstart "^1.0.4" unbox-primitive "^1.0.1" +es-module-lexer@^0.9.0: + version "0.9.2" + resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.2.tgz#d0a8c72c5d904014111fac7fab4c92b9ac545564" + integrity sha512-YkAGWqxZq2B4FxQ5y687UwywDwvLQhIMCZ+SDU7ZW729SDHOEI6wVFXwTRecz+yiwJzCsVwC6V7bxyNbZSB1rg== + es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" @@ -6860,6 +7123,14 @@ eslint-plugin-simple-import-sort@^7.0.0: resolved "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-7.0.0.tgz#a1dad262f46d2184a90095a60c66fef74727f0f8" integrity sha512-U3vEDB5zhYPNfxT5TYR7u01dboFZp+HNpnGhkDB2g/2E4wZ/g1Q9Ton8UwCLfRV9yAKyYqDh62oHOamvkFxsvw== +eslint-scope@5.1.1, eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + eslint-scope@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" @@ -6868,14 +7139,6 @@ eslint-scope@^4.0.3: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - eslint-utils@^2.0.0, eslint-utils@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" @@ -7014,7 +7277,7 @@ events-to-array@^1.0.1: resolved "https://registry.yarnpkg.com/events-to-array/-/events-to-array-1.1.2.tgz#2d41f563e1fe400ed4962fe1a4d5c6a7539df7f6" integrity sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y= -events@^3.0.0: +events@^3.0.0, events@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== @@ -7962,6 +8225,11 @@ glob-parent@^6.0.0: dependencies: is-glob "^4.0.1" +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + glob@^5.0.10: version "5.0.15" resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" @@ -8156,6 +8424,11 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3 resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== +graceful-fs@^4.2.4: + version "4.2.8" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" + integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== + "graceful-readlink@>= 1.0.0": version "1.0.1" resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" @@ -8540,6 +8813,11 @@ iconv-lite@^0.6.2: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" +icss-utils@^5.0.0, icss-utils@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" + integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== + ieee754@^1.1.13, ieee754@^1.1.4: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" @@ -9242,6 +9520,15 @@ isurl@^1.0.0-alpha5: has-to-string-tag-x "^1.2.0" is-object "^1.0.1" +jest-worker@^27.0.6: + version "27.2.4" + resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-27.2.4.tgz#881455df75e22e7726a53f43703ab74d6b36f82d" + integrity sha512-Zq9A2Pw59KkVjBBKD1i3iE2e22oSjXhUKKuAK1HGX8flGwkm6NMozyEYzKd41hXc64dbd/0eWFeEEuxqXyhM+g== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + jquery@^3.5.1: version "3.6.0" resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.6.0.tgz#c72a09f15c1bdce142f49dbf1170bdf8adac2470" @@ -9600,6 +9887,11 @@ loader-runner@^2.4.0: resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== +loader-runner@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" + integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw== + loader-utils@^1.2.3, loader-utils@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" @@ -9609,6 +9901,15 @@ loader-utils@^1.2.3, loader-utils@^1.4.0: emojis-list "^3.0.0" json5 "^1.0.1" +loader-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" + integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + loader.js@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/loader.js/-/loader.js-4.7.0.tgz#a1a52902001c83631efde9688b8ab3799325ef1f" @@ -9832,7 +10133,7 @@ lodash.uniqby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302" integrity sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI= -lodash@4.17.21, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.21, lodash@^4.7.0: +lodash@4.17.21, lodash@^4.17.10, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.21, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -10196,6 +10497,11 @@ mime-db@1.47.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c" integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw== +mime-db@1.50.0: + version "1.50.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz#abd4ac94e98d3c0e185016c67ab45d5fde40c11f" + integrity sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A== + "mime-db@>= 1.43.0 < 2": version "1.48.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d" @@ -10215,6 +10521,13 @@ mime-types@^2.1.12, mime-types@^2.1.18, mime-types@^2.1.26, mime-types@~2.1.24: dependencies: mime-db "1.44.0" +mime-types@^2.1.27: + version "2.1.33" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz#1fa12a904472fafd068e48d9e8401f74d3f70edb" + integrity sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g== + dependencies: + mime-db "1.50.0" + mime@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" @@ -10457,11 +10770,21 @@ nan@^2.12.1: resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== +nanocolors@^0.2.12, nanocolors@^0.2.2: + version "0.2.12" + resolved "https://registry.npmjs.org/nanocolors/-/nanocolors-0.2.12.tgz#4d05932e70116078673ea4cc6699a1c56cc77777" + integrity sha512-SFNdALvzW+rVlzqexid6epYdt8H9Zol7xDoQarioEFcFN0JHo4CYNztAxmtfgGTVRCmFlEOqqhBpoFGKqSAMug== + nanoid@^3.1.23: version "3.1.25" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.25.tgz#09ca32747c0e543f0e1814b7d3793477f9c8e152" integrity sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q== +nanoid@^3.1.25: + version "3.1.28" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.1.28.tgz#3c01bac14cb6c5680569014cc65a2f26424c6bd4" + integrity sha512-gSu9VZ2HtmoKYe/lmyPFES5nknFrHa+/DT9muUFWFMi6Jh9E1I7bkvlQ8xxf1Kos9pi9o8lBnIOkatMhKX/YUw== + nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -10489,7 +10812,7 @@ negotiator@0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== -neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1: +neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1, neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== @@ -10575,6 +10898,11 @@ node-releases@^1.1.71: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.73.tgz#dd4e81ddd5277ff846b80b52bb40c49edf7a7b20" integrity sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg== +node-releases@^1.1.76: + version "1.1.77" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-1.1.77.tgz#50b0cfede855dd374e7585bf228ff34e57c1c32e" + integrity sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ== + node-watch@0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/node-watch/-/node-watch-0.7.1.tgz#0caaa6a6833b0d533487f953c52a6c787769ba7c" @@ -10949,7 +11277,7 @@ p-limit@^2.0.0, p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-limit@^3.0.2: +p-limit@^3.0.2, p-limit@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== @@ -11358,6 +11686,34 @@ postcss-load-config@^3.1.0: lilconfig "^2.0.3" yaml "^1.10.2" +postcss-modules-extract-imports@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" + integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== + +postcss-modules-local-by-default@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" + integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== + dependencies: + icss-utils "^5.0.0" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" + integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== + dependencies: + postcss-selector-parser "^6.0.4" + +postcss-modules-values@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" + integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== + dependencies: + icss-utils "^5.0.0" + postcss-nested@5.0.5: version "5.0.5" resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-5.0.5.tgz#f0a107d33a9fab11d7637205f5321e27223e3603" @@ -11392,6 +11748,15 @@ postcss@^8.1.4, postcss@^8.1.6, postcss@^8.2.1: nanoid "^3.1.23" source-map-js "^0.6.2" +postcss@^8.2.15: + version "8.3.8" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.3.8.tgz#9ebe2a127396b4b4570ae9f7770e7fb83db2bac1" + integrity sha512-GT5bTjjZnwDifajzczOC+r3FI3Cu+PgPvrsjhQdRqa2kTJ4968/X9CUce9xttIB0xOs5c6xf0TCWZo/y9lF6bA== + dependencies: + nanocolors "^0.2.2" + nanoid "^3.1.25" + source-map-js "^0.6.2" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -12136,7 +12501,7 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve-package-path@^1.0.11, resolve-package-path@^1.2.6: +resolve-package-path@^1.0.11, resolve-package-path@^1.2.2, resolve-package-path@^1.2.6: version "1.2.7" resolved "https://registry.yarnpkg.com/resolve-package-path/-/resolve-package-path-1.2.7.tgz#2a7bc37ad96865e239330e3102c31322847e652e" integrity sha512-fVEKHGeK85bGbVFuwO9o1aU0n3vqQGrezPc51JGu9UTXpFQfWq5qCeKxyaRUSvephs+06c5j5rPq/dzHGEo8+Q== @@ -12382,6 +12747,15 @@ schema-utils@^2.6.5: ajv "^6.12.4" ajv-keywords "^3.5.2" +schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" + integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + semver-compare@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" @@ -12447,6 +12821,13 @@ serialize-javascript@^4.0.0: dependencies: randombytes "^2.1.0" +serialize-javascript@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== + dependencies: + randombytes "^2.1.0" + serve-static@1.14.1: version "1.14.1" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" @@ -12747,6 +13128,14 @@ source-map-support@~0.5.12, source-map-support@~0.5.19: buffer-from "^1.0.0" source-map "^0.6.0" +source-map-support@~0.5.20: + version "0.5.20" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz#12166089f8f5e5e8c56926b377633392dd2cb6c9" + integrity sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + source-map-url@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.3.0.tgz#7ecaf13b57bcd09da8a40c5d269db33799d4aaf9" @@ -13114,6 +13503,14 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= +style-loader@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz#9669602fd4690740eaaec137799a03addbbc393c" + integrity sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + styled_string@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/styled_string/-/styled_string-0.0.1.tgz#d22782bd81295459bc4f1df18c4bad8e94dd124a" @@ -13145,6 +13542,13 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + symbol-tree@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" @@ -13245,6 +13649,11 @@ tapable@^1.0.0, tapable@^1.1.3: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== +tapable@^2.1.1, tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + tar@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.0.tgz#d1724e9bcc04b977b18d5c573b333a2207229a83" @@ -13280,6 +13689,18 @@ terser-webpack-plugin@^1.4.3: webpack-sources "^1.4.0" worker-farm "^1.7.0" +terser-webpack-plugin@^5.1.3: + version "5.2.4" + resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.4.tgz#ad1be7639b1cbe3ea49fab995cbe7224b31747a1" + integrity sha512-E2CkNMN+1cho04YpdANyRrn8CyN4yMy+WdFKZIySFZrGXZxJwJP6PMNGGc/Mcr6qygQHUUqRxnAPmi0M9f00XA== + dependencies: + jest-worker "^27.0.6" + p-limit "^3.1.0" + schema-utils "^3.1.1" + serialize-javascript "^6.0.0" + source-map "^0.6.1" + terser "^5.7.2" + terser@^4.1.2: version "4.8.0" resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" @@ -13298,6 +13719,15 @@ terser@^5.3.0: source-map "~0.7.2" source-map-support "~0.5.19" +terser@^5.7.2: + version "5.9.0" + resolved "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz#47d6e629a522963240f2b55fcaa3c99083d2c351" + integrity sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ== + dependencies: + commander "^2.20.0" + source-map "~0.7.2" + source-map-support "~0.5.20" + testdouble-qunit@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/testdouble-qunit/-/testdouble-qunit-3.0.0.tgz#142e7fe32cbd3d3f442cd8539f236dea63db2fa8" @@ -14095,6 +14525,14 @@ watchpack@^1.7.4: chokidar "^3.4.1" watchpack-chokidar2 "^2.0.1" +watchpack@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz#47d78f5415fe550ecd740f99fe2882323a58b1ce" + integrity sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + wcwidth@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" @@ -14120,6 +14558,11 @@ webpack-sources@^1.4.0, webpack-sources@^1.4.1: source-list-map "^2.0.0" source-map "~0.6.1" +webpack-sources@^3.2.0: + version "3.2.1" + resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.1.tgz#251a7d9720d75ada1469ca07dbb62f3641a05b6d" + integrity sha512-t6BMVLQ0AkjBOoRTZgqrWm7xbXMBzD+XDq2EZ96+vMfn3qKgsvdXZhbPZ4ElUOpdv4u+iiGe+w3+J75iy/bYGA== + webpack@^4.43.0: version "4.46.0" resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.46.0.tgz#bf9b4404ea20a073605e0a011d188d77cb6ad542" @@ -14149,6 +14592,36 @@ webpack@^4.43.0: watchpack "^1.7.4" webpack-sources "^1.4.1" +webpack@^5.56.0: + version "5.56.0" + resolved "https://registry.npmjs.org/webpack/-/webpack-5.56.0.tgz#91a04de09c85765002818678538c319b6e461324" + integrity sha512-pJ7esw2AGkpZL0jqsEAKnDEfRZdrc9NVjAWA+d1mFkwj68ng9VQ6+Wnrl+kS5dlDHvrat5ASK5vd7wp6I7f53Q== + dependencies: + "@types/eslint-scope" "^3.7.0" + "@types/estree" "^0.0.50" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/wasm-edit" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + acorn "^8.4.1" + acorn-import-assertions "^1.7.6" + browserslist "^4.14.5" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.8.3" + es-module-lexer "^0.9.0" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.4" + json-parse-better-errors "^1.0.2" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.1.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.1.3" + watchpack "^2.2.0" + webpack-sources "^3.2.0" + websocket-driver@>=0.5.1: version "0.7.4" resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760"