@mgdis/mg-components 5.19.2 → 5.19.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/{components.utils-dc9c8a53.js → components.utils-69435877.js} +2 -2
- package/dist/cjs/components.utils-69435877.js.map +1 -0
- package/dist/cjs/{index-c042e24b.js → index-60dd0c56.js} +143 -58
- package/dist/cjs/index-60dd0c56.js.map +1 -0
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/mg-action-more_34.cjs.entry.js +306 -238
- package/dist/cjs/mg-action-more_34.cjs.entry.js.map +1 -1
- package/dist/cjs/mg-components.cjs.js +3 -3
- package/dist/cjs/mg-components.cjs.js.map +1 -1
- package/dist/cjs/mg-item-more.cjs.entry.js +2 -2
- package/dist/cjs/mg-item-more.cjs.entry.js.map +1 -1
- package/dist/collection/assets/icons/index.js +190 -182
- package/dist/collection/collection-manifest.json +3 -3
- package/dist/collection/components/atoms/mg-button/mg-button.js +15 -0
- package/dist/collection/components/atoms/mg-button/mg-button.js.map +1 -1
- package/dist/collection/components/atoms/mg-button/test/mg-button.e2e.js +1 -1
- package/dist/collection/components/atoms/mg-button/test/mg-button.e2e.js.map +1 -1
- package/dist/collection/components/atoms/mg-button/test/mg-button.spec.js +54 -4
- package/dist/collection/components/atoms/mg-button/test/mg-button.spec.js.map +1 -1
- package/dist/collection/components/atoms/mg-card/test/mg-card.e2e.js +2 -2
- package/dist/collection/components/atoms/mg-card/test/mg-card.e2e.js.map +1 -1
- package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.js +1 -1
- package/dist/collection/components/atoms/mg-tooltip/test/mg-tooltip.spec.js +1 -1
- package/dist/collection/components/atoms/mg-tooltip/test/mg-tooltip.spec.js.map +1 -1
- package/dist/collection/components/molecules/inputs/MgInput.conf.js +8 -0
- package/dist/collection/components/molecules/inputs/MgInput.conf.js.map +1 -1
- package/dist/collection/components/molecules/inputs/MgInput.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-checkbox/MgInputCheckboxList.js +2 -2
- package/dist/collection/components/molecules/inputs/mg-input-checkbox/MgInputCheckboxList.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.js +13 -12
- package/dist/collection/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-checkbox/test/mg-input-checkbox.spec.js +4 -10
- package/dist/collection/components/molecules/inputs/mg-input-checkbox/test/mg-input-checkbox.spec.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-date/mg-input-date.js +9 -2
- package/dist/collection/components/molecules/inputs/mg-input-date/mg-input-date.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-date/test/mg-input-date.spec.js +4 -0
- package/dist/collection/components/molecules/inputs/mg-input-date/test/mg-input-date.spec.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-numeric/mg-input-numeric.js +11 -4
- package/dist/collection/components/molecules/inputs/mg-input-numeric/mg-input-numeric.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-numeric/test/mg-input-numeric.spec.js +4 -0
- package/dist/collection/components/molecules/inputs/mg-input-numeric/test/mg-input-numeric.spec.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-password/mg-input-password.js +9 -2
- package/dist/collection/components/molecules/inputs/mg-input-password/mg-input-password.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-password/test/mg-input-password.spec.js +4 -0
- package/dist/collection/components/molecules/inputs/mg-input-password/test/mg-input-password.spec.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-radio/mg-input-radio.js +7 -1
- package/dist/collection/components/molecules/inputs/mg-input-radio/mg-input-radio.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-radio/test/mg-input-radio.spec.js +4 -0
- package/dist/collection/components/molecules/inputs/mg-input-radio/test/mg-input-radio.spec.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-select/mg-input-select.js +9 -2
- package/dist/collection/components/molecules/inputs/mg-input-select/mg-input-select.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-select/test/mg-input-select.spec.js +4 -0
- package/dist/collection/components/molecules/inputs/mg-input-select/test/mg-input-select.spec.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-text/mg-input-text.conf.js +0 -4
- package/dist/collection/components/molecules/inputs/mg-input-text/mg-input-text.conf.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-text/mg-input-text.js +9 -2
- package/dist/collection/components/molecules/inputs/mg-input-text/mg-input-text.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-text/test/mg-input-text.spec.js +2 -0
- package/dist/collection/components/molecules/inputs/mg-input-text/test/mg-input-text.spec.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-textarea/mg-input-textarea.js +9 -2
- package/dist/collection/components/molecules/inputs/mg-input-textarea/mg-input-textarea.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-textarea/test/mg-input-textarea.spec.js +2 -0
- package/dist/collection/components/molecules/inputs/mg-input-textarea/test/mg-input-textarea.spec.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-toggle/test/mg-input-toggle.e2e.playwright.js +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-toggle/test/mg-input-toggle.e2e.playwright.js.map +1 -1
- package/dist/collection/components/molecules/menu/mg-menu-item/mg-menu-item.js +1 -1
- package/dist/collection/components/molecules/menu/mg-menu-item/mg-menu-item.js.map +1 -1
- package/dist/collection/components/molecules/menu/mg-menu-item/test/mg-menu-item.e2e.playwright.js +2 -2
- package/dist/collection/components/molecules/menu/mg-menu-item/test/mg-menu-item.e2e.playwright.js.map +1 -1
- package/dist/collection/components/molecules/mg-action-more/mg-action-more.conf.js.map +1 -1
- package/dist/collection/components/molecules/mg-action-more/mg-action-more.js +2 -2
- package/dist/collection/components/molecules/mg-action-more/mg-action-more.js.map +1 -1
- package/dist/collection/components/molecules/mg-action-more/test/mg-action-more.e2e.playwright.js +8 -0
- package/dist/collection/components/molecules/mg-action-more/test/mg-action-more.e2e.playwright.js.map +1 -1
- package/dist/collection/components/molecules/mg-action-more/test/mg-action-more.spec.js +8 -0
- package/dist/collection/components/molecules/mg-action-more/test/mg-action-more.spec.js.map +1 -1
- package/dist/collection/components/molecules/mg-form/mg-form.js +1 -9
- package/dist/collection/components/molecules/mg-form/mg-form.js.map +1 -1
- package/dist/collection/components/molecules/mg-form/test/mg-form.spec.js +44 -29
- package/dist/collection/components/molecules/mg-form/test/mg-form.spec.js.map +1 -1
- package/dist/collection/components/molecules/mg-modal/test/mg-modal.e2e.playwright.js +1 -1
- package/dist/collection/components/molecules/mg-modal/test/mg-modal.e2e.playwright.js.map +1 -1
- package/dist/collection/components/molecules/mg-panel/test/mg-panel.e2e.playwright.js +1 -1
- package/dist/collection/components/molecules/mg-panel/test/mg-panel.e2e.playwright.js.map +1 -1
- package/dist/collection/components/molecules/mg-popover/mg-popover.js +1 -1
- package/dist/collection/utils/behaviors.utils.js.map +1 -1
- package/dist/collection/utils/components.utils.js +1 -1
- package/dist/collection/utils/components.utils.js.map +1 -1
- package/dist/collection/utils/components.utils.spec.js +5 -0
- package/dist/collection/utils/components.utils.spec.js.map +1 -1
- package/dist/components/MgInput.js +9 -1
- package/dist/components/MgInput.js.map +1 -1
- package/dist/components/components.utils.js +1 -1
- package/dist/components/components.utils.js.map +1 -1
- package/dist/components/mg-action-more.js +1 -1
- package/dist/components/mg-action-more.js.map +1 -1
- package/dist/components/mg-button2.js +15 -0
- package/dist/components/mg-button2.js.map +1 -1
- package/dist/components/mg-form.js +1 -9
- package/dist/components/mg-form.js.map +1 -1
- package/dist/components/mg-icon2.js +198 -182
- package/dist/components/mg-icon2.js.map +1 -1
- package/dist/components/mg-input-checkbox-paginated2.js +2 -2
- package/dist/components/mg-input-checkbox-paginated2.js.map +1 -1
- package/dist/components/mg-input-checkbox.js +13 -12
- package/dist/components/mg-input-checkbox.js.map +1 -1
- package/dist/components/mg-input-date.js +9 -3
- package/dist/components/mg-input-date.js.map +1 -1
- package/dist/components/mg-input-numeric.js +11 -5
- package/dist/components/mg-input-numeric.js.map +1 -1
- package/dist/components/mg-input-password.js +9 -3
- package/dist/components/mg-input-password.js.map +1 -1
- package/dist/components/mg-input-radio.js +8 -3
- package/dist/components/mg-input-radio.js.map +1 -1
- package/dist/components/mg-input-select2.js +9 -3
- package/dist/components/mg-input-select2.js.map +1 -1
- package/dist/components/mg-input-text2.js +9 -3
- package/dist/components/mg-input-text2.js.map +1 -1
- package/dist/components/mg-input-textarea.js +9 -3
- package/dist/components/mg-input-textarea.js.map +1 -1
- package/dist/components/mg-item-more.js.map +1 -1
- package/dist/components/mg-menu-item2.js +2 -2
- package/dist/components/mg-menu-item2.js.map +1 -1
- package/dist/components/mg-message.js +1 -1
- package/dist/components/mg-message.js.map +1 -1
- package/dist/components/mg-popover-content2.js +1 -1
- package/dist/components/mg-popover-content2.js.map +1 -1
- package/dist/components/popper.js +6 -12
- package/dist/components/popper.js.map +1 -1
- package/dist/esm/{components.utils-0f76010d.js → components.utils-6cf27db1.js} +2 -2
- package/dist/esm/components.utils-6cf27db1.js.map +1 -0
- package/dist/esm/{index-ce01e63b.js → index-0f833068.js} +143 -58
- package/dist/esm/index-0f833068.js.map +1 -0
- package/dist/esm/loader.js +3 -3
- package/dist/esm/mg-action-more_34.entry.js +306 -238
- package/dist/esm/mg-action-more_34.entry.js.map +1 -1
- package/dist/esm/mg-components.js +4 -4
- package/dist/esm/mg-components.js.map +1 -1
- package/dist/esm/mg-item-more.entry.js +2 -2
- package/dist/esm/mg-item-more.entry.js.map +1 -1
- package/dist/mg-components/mg-components.css +1 -1
- package/dist/mg-components/mg-components.esm.js +1 -1
- package/dist/mg-components/mg-components.esm.js.map +1 -1
- package/dist/mg-components/p-10ed4425.entry.js +2 -0
- package/dist/mg-components/p-10ed4425.entry.js.map +1 -0
- package/dist/mg-components/{p-c9e2c669.js → p-36a51c5e.js} +2 -2
- package/dist/mg-components/p-36a51c5e.js.map +1 -0
- package/dist/mg-components/{p-01ebc95a.entry.js → p-91feda5a.entry.js} +2 -2
- package/dist/mg-components/p-91feda5a.entry.js.map +1 -0
- package/dist/mg-components/p-9b12021b.js +3 -0
- package/dist/mg-components/p-9b12021b.js.map +1 -0
- package/dist/types/components/atoms/mg-button/mg-button.d.ts +4 -0
- package/dist/types/components/molecules/inputs/MgInput.conf.d.ts +7 -0
- package/dist/types/components/molecules/inputs/MgInput.d.ts +2 -1
- package/dist/types/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.d.ts +4 -2
- package/dist/types/components/molecules/inputs/mg-input-date/mg-input-date.d.ts +1 -0
- package/dist/types/components/molecules/inputs/mg-input-numeric/mg-input-numeric.d.ts +1 -0
- package/dist/types/components/molecules/inputs/mg-input-password/mg-input-password.d.ts +1 -0
- package/dist/types/components/molecules/inputs/mg-input-radio/mg-input-radio.d.ts +1 -0
- package/dist/types/components/molecules/inputs/mg-input-select/mg-input-select.d.ts +1 -0
- package/dist/types/components/molecules/inputs/mg-input-text/mg-input-text.conf.d.ts +1 -6
- package/dist/types/components/molecules/inputs/mg-input-text/mg-input-text.d.ts +1 -0
- package/dist/types/components/molecules/inputs/mg-input-textarea/mg-input-textarea.d.ts +1 -0
- package/dist/types/components/molecules/menu/mg-menu-item/mg-menu-item.d.ts +1 -1
- package/dist/types/components/molecules/mg-action-more/mg-action-more.conf.d.ts +1 -0
- package/dist/types/components/molecules/mg-form/mg-form.d.ts +0 -1
- package/dist/types/components.d.ts +2 -2
- package/package.json +35 -35
- package/dist/cjs/components.utils-dc9c8a53.js.map +0 -1
- package/dist/cjs/index-c042e24b.js.map +0 -1
- package/dist/esm/components.utils-0f76010d.js.map +0 -1
- package/dist/esm/index-ce01e63b.js.map +0 -1
- package/dist/mg-components/p-01ebc95a.entry.js.map +0 -1
- package/dist/mg-components/p-1aa89acf.js +0 -3
- package/dist/mg-components/p-1aa89acf.js.map +0 -1
- package/dist/mg-components/p-71a5a848.entry.js +0 -2
- package/dist/mg-components/p-71a5a848.entry.js.map +0 -1
- package/dist/mg-components/p-c9e2c669.js.map +0 -1
|
@@ -13,12 +13,27 @@ import { MgInputText } from "../../inputs/mg-input-text/mg-input-text";
|
|
|
13
13
|
import { MgInputTextarea } from "../../inputs/mg-input-textarea/mg-input-textarea";
|
|
14
14
|
import { MgInputToggle } from "../../inputs/mg-input-toggle/mg-input-toggle";
|
|
15
15
|
import { setupMutationObserverMock, setupSubmitEventMock } from "../../../../utils/unit.test.utils";
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
import { MgInputTitle } from "../../../atoms/mg-input-title/mg-input-title";
|
|
17
|
+
const getPage = async (args, content) => {
|
|
18
|
+
const page = await newSpecPage({
|
|
19
|
+
components: [
|
|
20
|
+
MgForm,
|
|
21
|
+
MgInputCheckbox,
|
|
22
|
+
MgInputDate,
|
|
23
|
+
MgInputNumeric,
|
|
24
|
+
MgInputPassword,
|
|
25
|
+
MgInputRadio,
|
|
26
|
+
MgInputSelect,
|
|
27
|
+
MgInputText,
|
|
28
|
+
MgInputTextarea,
|
|
29
|
+
MgInputToggle,
|
|
30
|
+
MgButton,
|
|
31
|
+
MgInputTitle,
|
|
32
|
+
],
|
|
19
33
|
template: () => h("mg-form", Object.assign({}, args), content),
|
|
20
34
|
});
|
|
21
35
|
jest.runAllTimers();
|
|
36
|
+
await page.waitForChanges();
|
|
22
37
|
return page;
|
|
23
38
|
};
|
|
24
39
|
const getSlottedContent = () => [
|
|
@@ -146,32 +161,6 @@ describe('mg-form', () => {
|
|
|
146
161
|
await page.waitForChanges();
|
|
147
162
|
expect(page.root).toMatchSnapshot();
|
|
148
163
|
});
|
|
149
|
-
test.each([undefined, ...buttonTypes])('Should only emit "submit" event for <mg-button type="submit">, case type is %s', async (type) => {
|
|
150
|
-
const args = { identifier: 'identifier' };
|
|
151
|
-
const slot = [
|
|
152
|
-
...getSlottedContent(),
|
|
153
|
-
h("div", { slot: "actions" }, h("mg-button", { type: type }, "Submit")),
|
|
154
|
-
];
|
|
155
|
-
const page = await getPage(args, slot);
|
|
156
|
-
const mgForm = page.doc.querySelector('mg-form');
|
|
157
|
-
const form = mgForm.shadowRoot.querySelector('form');
|
|
158
|
-
const mgButton = page.doc.querySelector('mg-button');
|
|
159
|
-
const formSpy = jest.spyOn(form, 'dispatchEvent');
|
|
160
|
-
const mgFormSpy = jest.spyOn(page.rootInstance.formSubmit, 'emit');
|
|
161
|
-
mgButton.dispatchEvent(new Event('click', { bubbles: true }));
|
|
162
|
-
await page.waitForChanges();
|
|
163
|
-
if ([undefined, 'submit'].includes(type)) {
|
|
164
|
-
expect(formSpy).toHaveBeenCalledWith(expect.objectContaining({
|
|
165
|
-
type: 'submit',
|
|
166
|
-
cancelable: true,
|
|
167
|
-
}));
|
|
168
|
-
expect(mgFormSpy).toHaveBeenCalled();
|
|
169
|
-
}
|
|
170
|
-
else {
|
|
171
|
-
expect(formSpy).not.toHaveBeenCalled();
|
|
172
|
-
expect(mgFormSpy).not.toHaveBeenCalled();
|
|
173
|
-
}
|
|
174
|
-
});
|
|
175
164
|
test('Should update input list when element is added to DOM', async () => {
|
|
176
165
|
const args = { identifier: 'identifier' };
|
|
177
166
|
const slot = getSlottedContent();
|
|
@@ -273,5 +262,31 @@ describe('mg-form', () => {
|
|
|
273
262
|
const page = await getPage({ identifier: 'identifier' }, slot());
|
|
274
263
|
expect(page.rootInstance.requiredMessage).toBe(message);
|
|
275
264
|
});
|
|
265
|
+
test.each([undefined, ...buttonTypes])('Should only emit "submit" event for <mg-button type="submit">, case type is %s', async (type) => {
|
|
266
|
+
const args = { identifier: 'identifier' };
|
|
267
|
+
const slot = [
|
|
268
|
+
...getSlottedContent(),
|
|
269
|
+
h("div", { slot: "actions" }, h("mg-button", { type: type }, "Submit")),
|
|
270
|
+
];
|
|
271
|
+
const page = await getPage(args, slot);
|
|
272
|
+
const mgForm = page.doc.querySelector('mg-form');
|
|
273
|
+
const form = mgForm.shadowRoot.querySelector('form');
|
|
274
|
+
const mgButton = page.doc.querySelector('mg-button');
|
|
275
|
+
const formSpy = jest.spyOn(form, 'dispatchEvent');
|
|
276
|
+
const mgFormSpy = jest.spyOn(page.rootInstance.formSubmit, 'emit');
|
|
277
|
+
mgButton.dispatchEvent(new MouseEvent('click', { bubbles: true }));
|
|
278
|
+
await page.waitForChanges();
|
|
279
|
+
if ([undefined, 'submit'].includes(type)) {
|
|
280
|
+
expect(formSpy).toHaveBeenCalledWith(expect.objectContaining({
|
|
281
|
+
type: 'submit',
|
|
282
|
+
cancelable: true,
|
|
283
|
+
}));
|
|
284
|
+
expect(mgFormSpy).toHaveBeenCalled();
|
|
285
|
+
}
|
|
286
|
+
else {
|
|
287
|
+
expect(formSpy).not.toHaveBeenCalled();
|
|
288
|
+
expect(mgFormSpy).not.toHaveBeenCalled();
|
|
289
|
+
}
|
|
290
|
+
});
|
|
276
291
|
});
|
|
277
292
|
//# sourceMappingURL=mg-form.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mg-form.spec.js","sourceRoot":"","sources":["../../../../../src/components/molecules/mg-form/test/mg-form.spec.tsx"],"names":[],"mappings":"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","sourcesContent":["import { h } from '@stencil/core';\nimport { newSpecPage } from '@stencil/core/testing';\nimport { MgForm } from '../mg-form';\nimport { MgButton } from '../../../atoms/mg-button/mg-button';\nimport { buttonTypes } from '../../../atoms/mg-button/mg-button.conf';\nimport { MgInputCheckbox } from '../../inputs/mg-input-checkbox/mg-input-checkbox';\nimport { MgInputDate } from '../../inputs/mg-input-date/mg-input-date';\nimport { MgInputNumeric } from '../../inputs/mg-input-numeric/mg-input-numeric';\nimport { MgInputPassword } from '../../inputs/mg-input-password/mg-input-password';\nimport { MgInputRadio } from '../../inputs/mg-input-radio/mg-input-radio';\nimport { MgInputSelect } from '../../inputs/mg-input-select/mg-input-select';\nimport { MgInputText } from '../../inputs/mg-input-text/mg-input-text';\nimport { MgInputTextarea } from '../../inputs/mg-input-textarea/mg-input-textarea';\nimport { MgInputToggle } from '../../inputs/mg-input-toggle/mg-input-toggle';\nimport { HTMLMgInputsElement } from '../../inputs/MgInput.conf';\nimport { setupMutationObserverMock, setupSubmitEventMock } from '../../../../utils/unit.test.utils';\n\nconst getPage = (args, content?) => {\n const page = newSpecPage({\n components: [MgForm, MgInputCheckbox, MgInputDate, MgInputNumeric, MgInputPassword, MgInputRadio, MgInputSelect, MgInputText, MgInputTextarea, MgInputToggle, MgButton],\n template: () => <mg-form {...args}>{content}</mg-form>,\n });\n\n jest.runAllTimers();\n\n return page;\n};\n\nconst getSlottedContent = () => [\n <mg-input-checkbox\n identifier=\"mg-input-checkbox\"\n label=\"mg-input-checkbox label\"\n value={[\n { title: 'oui', value: true },\n { title: 'non', value: false },\n ]}\n ></mg-input-checkbox>,\n <mg-input-date identifier=\"mg-input-date\" label=\"mg-input-date label\"></mg-input-date>,\n <mg-input-numeric identifier=\"mg-input-numeric\" label=\"mg-input-numeric label\"></mg-input-numeric>,\n <mg-input-password identifier=\"mg-input-password\" label=\"mg-input-password label\"></mg-input-password>,\n <mg-input-radio identifier=\"mg-input-radio\" label=\"mg-input-radio label\" items={['blu', 'bli', 'bla', 'blo']}></mg-input-radio>,\n <mg-input-select identifier=\"mg-input-select\" label=\"mg-input-select label\" items={['blu', 'bli', 'bla', 'blo']}></mg-input-select>,\n <mg-input-text identifier=\"mg-input-text\" label=\"mg-input-text label\"></mg-input-text>,\n <mg-input-textarea identifier=\"mg-input-textarea\" label=\"mg-input-textarea label\"></mg-input-textarea>,\n <mg-input-toggle\n identifier=\"mg-input-toggle\"\n label=\"mg-input-toggle label\"\n items={[\n { title: 'non', value: false },\n { title: 'oui', value: true },\n ]}\n >\n <span slot=\"item-1\">non</span>\n <span slot=\"item-2\">oui</span>\n </mg-input-toggle>,\n];\n\nconst setCheckValitidy = (input: HTMLMgInputsElement): void => {\n const shadowInputs = input.shadowRoot.querySelectorAll('input, textarea, select') as NodeListOf<HTMLInputElement>;\n shadowInputs.forEach(input => {\n input.checkValidity = jest.fn(() => false);\n Object.defineProperty(input, 'validity', {\n get: jest.fn(() => ({\n valueMissing: true,\n })),\n });\n });\n};\n\nconst setMgInputChecboxeInvalid = (input: HTMLMgInputCheckboxElement): void => {\n input.required = true;\n input.value = [\n { title: 'oui', value: false },\n { title: 'non', value: false },\n ];\n};\n\ndescribe('mg-form', () => {\n let fireMo;\n\n beforeEach(() => {\n jest.useFakeTimers();\n\n setupMutationObserverMock({\n observe: function () {\n fireMo = this.cb;\n },\n disconnect: function () {\n return null;\n },\n takeRecords: () => [],\n });\n setupSubmitEventMock();\n });\n\n afterEach(() => jest.runOnlyPendingTimers());\n\n test.each([\n { args: { identifier: 'identifier' } },\n { args: { identifier: 'identifier', readonly: true } },\n { args: { identifier: 'identifier', disabled: true } },\n { args: { identifier: 'identifier' }, required: 'one' },\n { args: { identifier: 'identifier' }, required: 'all' },\n { args: { identifier: 'identifier' }, required: 'multiple' },\n { args: { identifier: 'identifier' }, required: 'single' },\n { args: { identifier: 'identifier' }, readonly: true },\n ])('Should render with args %o:', async ({ args, required, readonly }) => {\n const slot = required === 'single' ? getSlottedContent()[0] : getSlottedContent();\n if (required === 'one') slot[0].$attrs$.required = true;\n else if (required === 'all')\n slot.forEach(s => {\n s.$attrs$.required = true;\n });\n else if (required === 'multiple') {\n slot[0].$attrs$.required = true;\n slot[1].$attrs$.required = true;\n } else if (required === 'single') slot.$attrs$.required = true;\n\n if (readonly)\n slot.forEach(s => {\n s.$attrs$.readonly = true;\n });\n\n const { root } = await getPage(args, slot);\n expect(root).toMatchSnapshot();\n });\n\n test.each([false, true])('Should display components errors (readonly: %s)', async readonly => {\n const args = { identifier: 'identifier', readonly };\n\n const slot = getSlottedContent();\n // Set all elements required\n slot.forEach(s => {\n s.$attrs$.required = true;\n });\n\n const page = await getPage(args, slot);\n const mgForm = page.doc.querySelector('mg-form');\n\n if (!readonly) {\n // Mock all input validity\n const mgInputs = Array.from(mgForm.querySelectorAll('*')).filter(\n (node: Node) => node.nodeName.startsWith('MG-INPUT-') && node.nodeName !== 'MG-INPUT-TOGGLE',\n ) as HTMLMgInputsElement[];\n mgInputs.forEach(input => {\n if (input.nodeName.includes('CHECKBOX')) setMgInputChecboxeInvalid(input as HTMLMgInputCheckboxElement);\n setCheckValitidy(input);\n });\n await page.waitForChanges();\n\n await mgForm.displayError();\n }\n\n await page.waitForChanges();\n\n expect(page.root).toMatchSnapshot();\n });\n\n test.each(['fr', 'xx'])('display error message with locale: %s', async lang => {\n const args = { identifier: 'identifier', lang };\n\n const slot = getSlottedContent();\n // Set all elements required\n slot.forEach(s => {\n s.$attrs$.required = true;\n });\n\n const page = await getPage(args, slot);\n const mgForm = page.doc.querySelector('mg-form');\n\n // Mock all input validity\n const mgInputs = Array.from(mgForm.querySelectorAll('*')).filter(\n (node: Node) => node.nodeName.startsWith('MG-INPUT-') && node.nodeName !== 'MG-INPUT-TOGGLE',\n ) as HTMLMgInputsElement[];\n mgInputs.forEach(input => {\n if (input.nodeName.includes('CHECKBOX')) setMgInputChecboxeInvalid(input as HTMLMgInputCheckboxElement);\n setCheckValitidy(input);\n });\n await page.waitForChanges();\n\n await mgForm.displayError();\n\n await page.waitForChanges();\n\n expect(page.root).toMatchSnapshot();\n });\n\n test.each([undefined, ...buttonTypes])('Should only emit \"submit\" event for <mg-button type=\"submit\">, case type is %s', async type => {\n const args = { identifier: 'identifier' };\n const slot = [\n ...getSlottedContent(),\n <div slot=\"actions\">\n <mg-button type={type}>Submit</mg-button>\n </div>,\n ];\n const page = await getPage(args, slot);\n\n const mgForm = page.doc.querySelector('mg-form');\n const form = mgForm.shadowRoot.querySelector('form');\n const mgButton = page.doc.querySelector('mg-button');\n\n const formSpy = jest.spyOn(form, 'dispatchEvent');\n const mgFormSpy = jest.spyOn(page.rootInstance.formSubmit, 'emit');\n\n mgButton.dispatchEvent(new Event('click', { bubbles: true }));\n\n await page.waitForChanges();\n\n if ([undefined, 'submit'].includes(type)) {\n expect(formSpy).toHaveBeenCalledWith(\n expect.objectContaining({\n type: 'submit',\n cancelable: true,\n }),\n );\n expect(mgFormSpy).toHaveBeenCalled();\n } else {\n expect(formSpy).not.toHaveBeenCalled();\n expect(mgFormSpy).not.toHaveBeenCalled();\n }\n });\n\n test('Should update input list when element is added to DOM', async () => {\n const args = { identifier: 'identifier' };\n const slot = getSlottedContent();\n const page = await getPage(args, slot);\n\n spyOn(page.rootInstance, 'setMgInputs');\n\n expect(page.rootInstance.setMgInputs).not.toHaveBeenCalled();\n\n fireMo([]);\n await page.waitForChanges();\n\n expect(page.rootInstance.setMgInputs).toHaveBeenCalled();\n });\n\n test.each(['readonly', 'disabled'])('Should update input list when attribute % change', async attribute => {\n const args = { identifier: 'identifier' };\n const slot = getSlottedContent();\n const page = await getPage(args, slot);\n const mgForm = page.doc.querySelector('mg-form');\n\n spyOn(page.rootInstance, 'setMgInputs');\n spyOn(page.rootInstance, 'setRequiredMessage');\n\n expect(page.rootInstance.setMgInputs).not.toHaveBeenCalled();\n expect(page.rootInstance.setRequiredMessage).not.toHaveBeenCalled();\n\n mgForm[attribute] = true;\n await page.waitForChanges();\n\n expect(page.rootInstance.setMgInputs).toHaveBeenCalled();\n expect(page.rootInstance.setRequiredMessage).toHaveBeenCalled();\n });\n\n test.each([\n {\n slot: () => [<mg-input-text identifier=\"mg-input-text\" label=\"mg-input-text label\"></mg-input-text>],\n message: null,\n },\n {\n slot: () => [\n <mg-input-text identifier=\"mg-input-text\" label=\"mg-input-text label\"></mg-input-text>,\n <mg-input-toggle\n identifier=\"mg-input-toggle\"\n label=\"mg-input-toggle label\"\n items={[\n { title: 'non', value: false },\n { title: 'oui', value: true },\n ]}\n >\n <span slot=\"item-1\">non</span>\n <span slot=\"item-2\">oui</span>\n </mg-input-toggle>,\n ],\n message: null,\n },\n {\n slot: () => [<mg-input-text required identifier=\"mg-input-text\" label=\"mg-input-text label\"></mg-input-text>],\n message: 'The field is required',\n },\n {\n slot: () => [\n <mg-input-text required identifier=\"mg-input-text\" label=\"mg-input-text label\"></mg-input-text>,\n <mg-input-text required identifier=\"mg-input-text\" label=\"mg-input-text label\"></mg-input-text>,\n ],\n message: 'All fields are required',\n },\n {\n slot: () => [\n <mg-input-text required identifier=\"mg-input-text\" label=\"mg-input-text label\"></mg-input-text>,\n <mg-input-text identifier=\"mg-input-text\" label=\"mg-input-text label\"></mg-input-text>,\n ],\n message: 'Field with a <strong class=\"mg-u-is-asterisk\">*</strong> is required',\n },\n {\n slot: () => [\n <mg-input-text required identifier=\"mg-input-text\" label=\"mg-input-text label\"></mg-input-text>,\n <mg-input-text identifier=\"mg-input-text\" label=\"mg-input-text label\"></mg-input-text>,\n <mg-input-toggle\n identifier=\"mg-input-toggle\"\n label=\"mg-input-toggle label\"\n items={[\n { title: 'non', value: false },\n { title: 'oui', value: true },\n ]}\n >\n <span slot=\"item-1\">non</span>\n <span slot=\"item-2\">oui</span>\n </mg-input-toggle>,\n ],\n message: 'Field with a <strong class=\"mg-u-is-asterisk\">*</strong> is required',\n },\n {\n slot: () => [\n <mg-input-text required identifier=\"mg-input-text\" label=\"mg-input-text label\"></mg-input-text>,\n <mg-input-text required identifier=\"mg-input-text\" label=\"mg-input-text label\"></mg-input-text>,\n <mg-input-toggle\n identifier=\"mg-input-toggle\"\n label=\"mg-input-toggle label\"\n items={[\n { title: 'non', value: false },\n { title: 'oui', value: true },\n ]}\n >\n <span slot=\"item-1\">non</span>\n <span slot=\"item-2\">oui</span>\n </mg-input-toggle>,\n ],\n message: 'All fields are required',\n },\n {\n slot: () => [\n <mg-input-text required identifier=\"mg-input-text\" label=\"mg-input-text label\"></mg-input-text>,\n <mg-input-text required identifier=\"mg-input-text\" label=\"mg-input-text label\"></mg-input-text>,\n <mg-input-text identifier=\"mg-input-text\" label=\"mg-input-text label\"></mg-input-text>,\n ],\n message: 'Fields with a <strong class=\"mg-u-is-asterisk\">*</strong> are required',\n },\n {\n slot: () => [\n <mg-input-text required identifier=\"mg-input-text\" label=\"mg-input-text label\"></mg-input-text>,\n <mg-input-toggle\n identifier=\"mg-input-toggle\"\n label=\"mg-input-toggle label\"\n items={[\n { title: 'non', value: false },\n { title: 'oui', value: true },\n ]}\n >\n <span slot=\"item-1\">non</span>\n <span slot=\"item-2\">oui</span>\n </mg-input-toggle>,\n ],\n message: 'Field with a <strong class=\"mg-u-is-asterisk\">*</strong> is required',\n },\n ])('Should display needeed required message', async ({ slot, message }) => {\n const page = await getPage({ identifier: 'identifier' }, slot());\n\n expect(page.rootInstance.requiredMessage).toBe(message);\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"mg-form.spec.js","sourceRoot":"","sources":["../../../../../src/components/molecules/mg-form/test/mg-form.spec.tsx"],"names":[],"mappings":"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","sourcesContent":["import { h } from '@stencil/core';\nimport { newSpecPage } from '@stencil/core/testing';\nimport { MgForm } from '../mg-form';\nimport { MgButton } from '../../../atoms/mg-button/mg-button';\nimport { buttonTypes } from '../../../atoms/mg-button/mg-button.conf';\nimport { MgInputCheckbox } from '../../inputs/mg-input-checkbox/mg-input-checkbox';\nimport { MgInputDate } from '../../inputs/mg-input-date/mg-input-date';\nimport { MgInputNumeric } from '../../inputs/mg-input-numeric/mg-input-numeric';\nimport { MgInputPassword } from '../../inputs/mg-input-password/mg-input-password';\nimport { MgInputRadio } from '../../inputs/mg-input-radio/mg-input-radio';\nimport { MgInputSelect } from '../../inputs/mg-input-select/mg-input-select';\nimport { MgInputText } from '../../inputs/mg-input-text/mg-input-text';\nimport { MgInputTextarea } from '../../inputs/mg-input-textarea/mg-input-textarea';\nimport { MgInputToggle } from '../../inputs/mg-input-toggle/mg-input-toggle';\nimport { HTMLMgInputsElement } from '../../inputs/MgInput.conf';\nimport { setupMutationObserverMock, setupSubmitEventMock } from '../../../../utils/unit.test.utils';\nimport { MgInputTitle } from '../../../atoms/mg-input-title/mg-input-title';\n\nconst getPage = async (args, content?) => {\n const page = await newSpecPage({\n components: [\n MgForm,\n MgInputCheckbox,\n MgInputDate,\n MgInputNumeric,\n MgInputPassword,\n MgInputRadio,\n MgInputSelect,\n MgInputText,\n MgInputTextarea,\n MgInputToggle,\n MgButton,\n MgInputTitle,\n ],\n template: () => <mg-form {...args}>{content}</mg-form>,\n });\n\n jest.runAllTimers();\n\n await page.waitForChanges();\n\n return page;\n};\n\nconst getSlottedContent = () => [\n <mg-input-checkbox\n identifier=\"mg-input-checkbox\"\n label=\"mg-input-checkbox label\"\n value={[\n { title: 'oui', value: true },\n { title: 'non', value: false },\n ]}\n ></mg-input-checkbox>,\n <mg-input-date identifier=\"mg-input-date\" label=\"mg-input-date label\"></mg-input-date>,\n <mg-input-numeric identifier=\"mg-input-numeric\" label=\"mg-input-numeric label\"></mg-input-numeric>,\n <mg-input-password identifier=\"mg-input-password\" label=\"mg-input-password label\"></mg-input-password>,\n <mg-input-radio identifier=\"mg-input-radio\" label=\"mg-input-radio label\" items={['blu', 'bli', 'bla', 'blo']}></mg-input-radio>,\n <mg-input-select identifier=\"mg-input-select\" label=\"mg-input-select label\" items={['blu', 'bli', 'bla', 'blo']}></mg-input-select>,\n <mg-input-text identifier=\"mg-input-text\" label=\"mg-input-text label\"></mg-input-text>,\n <mg-input-textarea identifier=\"mg-input-textarea\" label=\"mg-input-textarea label\"></mg-input-textarea>,\n <mg-input-toggle\n identifier=\"mg-input-toggle\"\n label=\"mg-input-toggle label\"\n items={[\n { title: 'non', value: false },\n { title: 'oui', value: true },\n ]}\n >\n <span slot=\"item-1\">non</span>\n <span slot=\"item-2\">oui</span>\n </mg-input-toggle>,\n];\n\nconst setCheckValitidy = (input: HTMLMgInputsElement): void => {\n const shadowInputs = input.shadowRoot.querySelectorAll('input, textarea, select') as NodeListOf<HTMLInputElement>;\n shadowInputs.forEach(input => {\n input.checkValidity = jest.fn(() => false);\n Object.defineProperty(input, 'validity', {\n get: jest.fn(() => ({\n valueMissing: true,\n })),\n });\n });\n};\n\nconst setMgInputChecboxeInvalid = (input: HTMLMgInputCheckboxElement): void => {\n input.required = true;\n input.value = [\n { title: 'oui', value: false },\n { title: 'non', value: false },\n ];\n};\n\ndescribe('mg-form', () => {\n let fireMo;\n\n beforeEach(() => {\n jest.useFakeTimers();\n\n setupMutationObserverMock({\n observe: function () {\n fireMo = this.cb;\n },\n disconnect: function () {\n return null;\n },\n takeRecords: () => [],\n });\n setupSubmitEventMock();\n });\n\n afterEach(() => jest.runOnlyPendingTimers());\n\n test.each([\n { args: { identifier: 'identifier' } },\n { args: { identifier: 'identifier', readonly: true } },\n { args: { identifier: 'identifier', disabled: true } },\n { args: { identifier: 'identifier' }, required: 'one' },\n { args: { identifier: 'identifier' }, required: 'all' },\n { args: { identifier: 'identifier' }, required: 'multiple' },\n { args: { identifier: 'identifier' }, required: 'single' },\n { args: { identifier: 'identifier' }, readonly: true },\n ])('Should render with args %o:', async ({ args, required, readonly }) => {\n const slot = required === 'single' ? getSlottedContent()[0] : getSlottedContent();\n if (required === 'one') slot[0].$attrs$.required = true;\n else if (required === 'all')\n slot.forEach(s => {\n s.$attrs$.required = true;\n });\n else if (required === 'multiple') {\n slot[0].$attrs$.required = true;\n slot[1].$attrs$.required = true;\n } else if (required === 'single') slot.$attrs$.required = true;\n\n if (readonly)\n slot.forEach(s => {\n s.$attrs$.readonly = true;\n });\n\n const { root } = await getPage(args, slot);\n expect(root).toMatchSnapshot();\n });\n\n test.each([false, true])('Should display components errors (readonly: %s)', async readonly => {\n const args = { identifier: 'identifier', readonly };\n\n const slot = getSlottedContent();\n // Set all elements required\n slot.forEach(s => {\n s.$attrs$.required = true;\n });\n\n const page = await getPage(args, slot);\n const mgForm = page.doc.querySelector('mg-form');\n\n if (!readonly) {\n // Mock all input validity\n const mgInputs = Array.from(mgForm.querySelectorAll('*')).filter(\n (node: Node) => node.nodeName.startsWith('MG-INPUT-') && node.nodeName !== 'MG-INPUT-TOGGLE',\n ) as HTMLMgInputsElement[];\n mgInputs.forEach(input => {\n if (input.nodeName.includes('CHECKBOX')) setMgInputChecboxeInvalid(input as HTMLMgInputCheckboxElement);\n setCheckValitidy(input);\n });\n await page.waitForChanges();\n\n await mgForm.displayError();\n }\n\n await page.waitForChanges();\n\n expect(page.root).toMatchSnapshot();\n });\n\n test.each(['fr', 'xx'])('display error message with locale: %s', async lang => {\n const args = { identifier: 'identifier', lang };\n\n const slot = getSlottedContent();\n // Set all elements required\n slot.forEach(s => {\n s.$attrs$.required = true;\n });\n\n const page = await getPage(args, slot);\n const mgForm = page.doc.querySelector('mg-form');\n\n // Mock all input validity\n const mgInputs = Array.from(mgForm.querySelectorAll('*')).filter(\n (node: Node) => node.nodeName.startsWith('MG-INPUT-') && node.nodeName !== 'MG-INPUT-TOGGLE',\n ) as HTMLMgInputsElement[];\n mgInputs.forEach(input => {\n if (input.nodeName.includes('CHECKBOX')) setMgInputChecboxeInvalid(input as HTMLMgInputCheckboxElement);\n setCheckValitidy(input);\n });\n await page.waitForChanges();\n\n await mgForm.displayError();\n\n await page.waitForChanges();\n\n expect(page.root).toMatchSnapshot();\n });\n\n test('Should update input list when element is added to DOM', async () => {\n const args = { identifier: 'identifier' };\n const slot = getSlottedContent();\n const page = await getPage(args, slot);\n\n spyOn(page.rootInstance, 'setMgInputs');\n\n expect(page.rootInstance.setMgInputs).not.toHaveBeenCalled();\n\n fireMo([]);\n await page.waitForChanges();\n\n expect(page.rootInstance.setMgInputs).toHaveBeenCalled();\n });\n\n test.each(['readonly', 'disabled'])('Should update input list when attribute % change', async attribute => {\n const args = { identifier: 'identifier' };\n const slot = getSlottedContent();\n const page = await getPage(args, slot);\n const mgForm = page.doc.querySelector('mg-form');\n\n spyOn(page.rootInstance, 'setMgInputs');\n spyOn(page.rootInstance, 'setRequiredMessage');\n\n expect(page.rootInstance.setMgInputs).not.toHaveBeenCalled();\n expect(page.rootInstance.setRequiredMessage).not.toHaveBeenCalled();\n\n mgForm[attribute] = true;\n await page.waitForChanges();\n\n expect(page.rootInstance.setMgInputs).toHaveBeenCalled();\n expect(page.rootInstance.setRequiredMessage).toHaveBeenCalled();\n });\n\n test.each([\n {\n slot: () => [<mg-input-text identifier=\"mg-input-text\" label=\"mg-input-text label\"></mg-input-text>],\n message: null,\n },\n {\n slot: () => [\n <mg-input-text identifier=\"mg-input-text\" label=\"mg-input-text label\"></mg-input-text>,\n <mg-input-toggle\n identifier=\"mg-input-toggle\"\n label=\"mg-input-toggle label\"\n items={[\n { title: 'non', value: false },\n { title: 'oui', value: true },\n ]}\n >\n <span slot=\"item-1\">non</span>\n <span slot=\"item-2\">oui</span>\n </mg-input-toggle>,\n ],\n message: null,\n },\n {\n slot: () => [<mg-input-text required identifier=\"mg-input-text\" label=\"mg-input-text label\"></mg-input-text>],\n message: 'The field is required',\n },\n {\n slot: () => [\n <mg-input-text required identifier=\"mg-input-text\" label=\"mg-input-text label\"></mg-input-text>,\n <mg-input-text required identifier=\"mg-input-text\" label=\"mg-input-text label\"></mg-input-text>,\n ],\n message: 'All fields are required',\n },\n {\n slot: () => [\n <mg-input-text required identifier=\"mg-input-text\" label=\"mg-input-text label\"></mg-input-text>,\n <mg-input-text identifier=\"mg-input-text\" label=\"mg-input-text label\"></mg-input-text>,\n ],\n message: 'Field with a <strong class=\"mg-u-is-asterisk\">*</strong> is required',\n },\n {\n slot: () => [\n <mg-input-text required identifier=\"mg-input-text\" label=\"mg-input-text label\"></mg-input-text>,\n <mg-input-text identifier=\"mg-input-text\" label=\"mg-input-text label\"></mg-input-text>,\n <mg-input-toggle\n identifier=\"mg-input-toggle\"\n label=\"mg-input-toggle label\"\n items={[\n { title: 'non', value: false },\n { title: 'oui', value: true },\n ]}\n >\n <span slot=\"item-1\">non</span>\n <span slot=\"item-2\">oui</span>\n </mg-input-toggle>,\n ],\n message: 'Field with a <strong class=\"mg-u-is-asterisk\">*</strong> is required',\n },\n {\n slot: () => [\n <mg-input-text required identifier=\"mg-input-text\" label=\"mg-input-text label\"></mg-input-text>,\n <mg-input-text required identifier=\"mg-input-text\" label=\"mg-input-text label\"></mg-input-text>,\n <mg-input-toggle\n identifier=\"mg-input-toggle\"\n label=\"mg-input-toggle label\"\n items={[\n { title: 'non', value: false },\n { title: 'oui', value: true },\n ]}\n >\n <span slot=\"item-1\">non</span>\n <span slot=\"item-2\">oui</span>\n </mg-input-toggle>,\n ],\n message: 'All fields are required',\n },\n {\n slot: () => [\n <mg-input-text required identifier=\"mg-input-text\" label=\"mg-input-text label\"></mg-input-text>,\n <mg-input-text required identifier=\"mg-input-text\" label=\"mg-input-text label\"></mg-input-text>,\n <mg-input-text identifier=\"mg-input-text\" label=\"mg-input-text label\"></mg-input-text>,\n ],\n message: 'Fields with a <strong class=\"mg-u-is-asterisk\">*</strong> are required',\n },\n {\n slot: () => [\n <mg-input-text required identifier=\"mg-input-text\" label=\"mg-input-text label\"></mg-input-text>,\n <mg-input-toggle\n identifier=\"mg-input-toggle\"\n label=\"mg-input-toggle label\"\n items={[\n { title: 'non', value: false },\n { title: 'oui', value: true },\n ]}\n >\n <span slot=\"item-1\">non</span>\n <span slot=\"item-2\">oui</span>\n </mg-input-toggle>,\n ],\n message: 'Field with a <strong class=\"mg-u-is-asterisk\">*</strong> is required',\n },\n ])('Should display needeed required message', async ({ slot, message }) => {\n const page = await getPage({ identifier: 'identifier' }, slot());\n\n expect(page.rootInstance.requiredMessage).toBe(message);\n });\n\n test.each([undefined, ...buttonTypes])('Should only emit \"submit\" event for <mg-button type=\"submit\">, case type is %s', async type => {\n const args = { identifier: 'identifier' };\n const slot = [\n ...getSlottedContent(),\n <div slot=\"actions\">\n <mg-button type={type}>Submit</mg-button>\n </div>,\n ];\n const page = await getPage(args, slot);\n\n const mgForm = page.doc.querySelector('mg-form');\n const form = mgForm.shadowRoot.querySelector('form');\n const mgButton = page.doc.querySelector('mg-button');\n\n const formSpy = jest.spyOn(form, 'dispatchEvent');\n const mgFormSpy = jest.spyOn(page.rootInstance.formSubmit, 'emit');\n\n mgButton.dispatchEvent(new MouseEvent('click', { bubbles: true }));\n\n await page.waitForChanges();\n\n if ([undefined, 'submit'].includes(type)) {\n expect(formSpy).toHaveBeenCalledWith(\n expect.objectContaining({\n type: 'submit',\n cancelable: true,\n }),\n );\n expect(mgFormSpy).toHaveBeenCalled();\n } else {\n expect(formSpy).not.toHaveBeenCalled();\n expect(mgFormSpy).not.toHaveBeenCalled();\n }\n });\n});\n"]}
|
|
@@ -2,7 +2,7 @@ import { setPageContent, expect, describe, describeEach, testEach, test } from "
|
|
|
2
2
|
import { actions, contents, createHTML } from "./mg-modal.e2e.template";
|
|
3
3
|
describe('mg-modal', () => {
|
|
4
4
|
const slotsToTests = actions.flatMap(action => contents.map(content => ({ action, content })));
|
|
5
|
-
describeEach(slotsToTests)('render
|
|
5
|
+
describeEach(slotsToTests)('render with slots %s', slots => {
|
|
6
6
|
testEach([
|
|
7
7
|
{ closeButton: false, hide: false },
|
|
8
8
|
{ closeButton: true, hide: false },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mg-modal.e2e.playwright.js","sourceRoot":"","sources":["../../../../../src/components/molecules/mg-modal/test/mg-modal.e2e.playwright.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAY,IAAI,EAAE,MAAM,6CAA6C,CAAC;AACvI,OAAO,EAAe,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErF,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;EACxB,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;EAC/F,YAAY,CAAC,YAAY,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"mg-modal.e2e.playwright.js","sourceRoot":"","sources":["../../../../../src/components/molecules/mg-modal/test/mg-modal.e2e.playwright.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAY,IAAI,EAAE,MAAM,6CAA6C,CAAC;AACvI,OAAO,EAAe,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErF,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;EACxB,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;EAC/F,YAAY,CAAC,YAAY,CAAC,CAAC,sBAAsB,EAAE,KAAK,CAAC,EAAE;IACzD,QAAQ,CAAC;MACP,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE;MACnC,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE;MAClC;QACE,WAAW,EAAE,IAAI;QACjB,UAAU,EACR,wWAAwW;OAC3W;KACF,CAAC,CAAC,kBAAkB,EAAE,KAAK,EAAE,IAAc,EAAE,IAAiB,EAAE,EAAE;MACjE,MAAM,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;MAEpD,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACpF,CAAC,CAAC,CAAC;EACL,CAAC,CAAC,CAAC;EAEH,IAAI,CAAC,4BAA4B,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;IACpD,MAAM,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAEvD,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;EACxD,CAAC,CAAC,CAAC;EAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IACrB,IAAI,CAAC,kCAAkC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;MAC1D,MAAM,cAAc,CAClB,IAAI,EACJ;;;;SAIC,CACF,CAAC;MAEF,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC/D,CAAC,CAAC,CAAC;EACL,CAAC,CAAC,CAAC;EAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,IAAI,CAAC,uCAAuC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;MAC/D,MAAM,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;MAE9G,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;MAEtD,aAAa;MACb,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,KAAK,EAAE,CAAC;MAE5C,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;MAE7D,cAAc;MACd,MAAM,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,KAAK,EAAE,CAAC;MAEpD,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,+BAA+B,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;MACvD,MAAM,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;MAC9G,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;MAEtD,aAAa;MACb,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;MACjC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;MACnC,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;MAE7D,gBAAgB;MAChB,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;MACjC,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;MAC7D,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;MACjC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;MACjC,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;MAE7D,cAAc;MACd,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;MACnC,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACxD,CAAC,CAAC,CAAC;EACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { setPageContent, expect, describe, describeEach, testEach, PageType, test } from '../../../../utils/playwright.e2e.test.utils';\nimport { MgModalType, actions, contents, createHTML } from './mg-modal.e2e.template';\n\ndescribe('mg-modal', () => {\n const slotsToTests = actions.flatMap(action => contents.map(content => ({ action, content })));\n describeEach(slotsToTests)('render with slots %s', slots => {\n testEach([\n { closeButton: false, hide: false },\n { closeButton: true, hide: false },\n {\n closeButton: true,\n modalTitle:\n 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat',\n },\n ])('Should render %s', async (page: PageType, args: MgModalType) => {\n await setPageContent(page, createHTML(args, slots));\n\n await expect(page.locator(args.hide ? 'body' : '.mg-c-modal')).toHaveScreenshot();\n });\n });\n\n test('Should render hidden modal', async ({ page }) => {\n await setPageContent(page, createHTML({ hide: true }));\n\n await expect(page.locator('body')).toHaveScreenshot();\n });\n\n describe('style', () => {\n test('Should render with child mg-card', async ({ page }) => {\n await setPageContent(\n page,\n `<mg-modal modal-title=\"child mg-card\" class=\"custom-modal-card\">\n <mg-card slot=\"content\">child card</mg-card>\n </mg-modal>\n <style>.custom-modal-card {--mg-card-background: hsl(var(--color-danger));}</style>\n `,\n );\n\n await expect(page.locator('.mg-c-modal')).toHaveScreenshot();\n });\n });\n\n describe('navigation', () => {\n test('Should trigger modal and close modal.', async ({ page }) => {\n await setPageContent(page, createHTML({ closeButton: true, hide: true }, { action: true, content: 'short' }));\n\n await expect(page.locator('body')).toHaveScreenshot();\n\n // open modal\n await page.locator('#modal-button').click();\n\n await expect(page.locator('.mg-c-modal')).toHaveScreenshot();\n\n // close modal\n await page.locator('.mg-c-modal mg-button').click();\n\n await expect(page.locator('body')).toHaveScreenshot();\n });\n\n test('should navigate with keyboard', async ({ page }) => {\n await setPageContent(page, createHTML({ closeButton: true, hide: true }, { action: true, content: 'short' }));\n await expect(page.locator('body')).toHaveScreenshot();\n\n // open modal\n await page.keyboard.press('Tab');\n await page.keyboard.press('Enter');\n await expect(page.locator('.mg-c-modal')).toHaveScreenshot();\n\n // loop in modal\n await page.keyboard.press('Tab');\n await expect(page.locator('.mg-c-modal')).toHaveScreenshot();\n await page.keyboard.press('Tab');\n await page.keyboard.press('Tab');\n await expect(page.locator('.mg-c-modal')).toHaveScreenshot();\n\n // close modal\n await page.keyboard.press('Enter');\n await expect(page.locator('body')).toHaveScreenshot();\n });\n });\n});\n"]}
|
|
@@ -48,7 +48,7 @@ describe('mg-panel', () => {
|
|
|
48
48
|
Object.assign(Object.assign({}, baseArgs), { expanded: true, style: '--mg-panel-content-padding: 0', slot: '<div>Content without padding.</div>' }),
|
|
49
49
|
Object.assign(Object.assign({}, baseArgs), { expanded: true, style: '--mg-panel-background: none; --mg-panel-border-radius: 0; --mg-panel-box-shadow: none', slot: '<div>Transparent mg-panel</div>' }),
|
|
50
50
|
Object.assign(Object.assign({}, baseArgs), { expanded: true, slot: '<div>header right items should be vertically aligned</div><div slot="header-right"><mg-tag>Label</mg-tag><mg-icon size="small" icon="check-circle" variant="success"></mg-icon></div>' }),
|
|
51
|
-
Object.assign(Object.assign({}, baseArgs), { expanded: true, style: '--mg-panel-background: var(--color-danger)', slot: '<mg-card>Content
|
|
51
|
+
Object.assign(Object.assign({}, baseArgs), { expanded: true, style: '--mg-panel-background: var(--color-danger)', slot: '<mg-card>Content with child card.</mg-card>' }),
|
|
52
52
|
])('Should render with template %s', async (page, args) => {
|
|
53
53
|
await setPageContent(page, createHTML(Object.assign({}, args)));
|
|
54
54
|
await updateScreenshotClass(page, { width: '500px', height: '100%' });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mg-panel.e2e.playwright.js","sourceRoot":"","sources":["../../../../../src/components/molecules/mg-panel/test/mg-panel.e2e.playwright.ts"],"names":[],"mappings":"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","sourcesContent":["import { setPageContent, expect, describe, testEach, updateScreenshotClass, PageType, test } from '../../../../utils/playwright.e2e.test.utils';\nimport { createID } from '../../../../utils/components.utils';\nimport { renderAttributes, renderProperties } from '../../../../utils/e2e.test.utils';\nimport { type MgPanel } from '../mg-panel';\n\ntype ArgsType = Partial<MgPanel> & { slot?: SlotType };\nconst slots = ['default', 'flex'] as const;\ntype SlotType = (typeof slots)[number] | string;\n\nconst baseArgs = {\n panelTitle: 'panel title',\n};\n\nconst createHTML = (args: ArgsType): string => {\n const identifier = createID();\n const slot: SlotType = Boolean(args.slot) ? args.slot : slots[0];\n delete args.slot;\n\n const flexSlotContainer = (content: string): string => '<mg-badge variant=\"primary\" value=\"1\" label=\"label\"></mg-badge><div>' + content + '</div>';\n const slotContent = `\n <mg-button variant=\"secondary\" style=\"margin-left: 200px;\">\n <mg-icon icon=\"file-upload\"></mg-icon> Upload\n </mg-button>\n <mg-button is-icon variant=\"secondary\" label=\"delete\">\n <mg-icon icon=\"trash\"></mg-icon>\n </mg-button>\n `;\n\n return `\n <mg-panel ${renderAttributes({ ...args, identifier })}>\n ${\n slots.includes(slot as (typeof slots)[number])\n ? `\n <div>Content</div>\n <div slot=\"header-right\" ${slot === 'flex' ? 'style=\"display:flex; justify-content:space-between; align-items:center; width:100%;\"' : ''}>\n ${slot === 'flex' ? flexSlotContainer(slotContent) : slotContent}\n </div>`\n : slot\n }\n </mg-panel>\n <script>${renderProperties(args, `[identifier=\"${identifier}\"]`)}</script>`;\n};\n\ndescribe('mg-panel', () => {\n testEach([\n { ...baseArgs },\n { ...baseArgs, titlePosition: 'left' },\n { ...baseArgs, titlePosition: 'right' },\n { ...baseArgs, titlePosition: 'right', titleEditable: true },\n { ...baseArgs, expandToggleDisplay: 'text' },\n { ...baseArgs, expandToggleDisplay: 'icon' },\n { ...baseArgs, expandToggleDisplay: 'icon', titleEditable: true },\n { ...baseArgs, expanded: true },\n { ...baseArgs, titleEditable: true },\n {\n ...baseArgs,\n panelTitle:\n 'very long panel title very long panel title very long panel title very long panel title very long panel title very long panel title very long panel title very long panel title',\n },\n {\n ...baseArgs,\n titleEditable: true,\n panelTitle:\n 'very long panel title very long panel title very long panel title very long panel title very long panel title very long panel title very long panel title very long panel title',\n },\n { ...baseArgs, slot: 'flex' },\n {\n ...baseArgs,\n slot: 'flex',\n panelTitle:\n 'very long panel title very long panel title very long panel title very long panel title very long panel title very long panel title very long panel title very long panel title',\n },\n { ...baseArgs, expanded: true, style: '--mg-panel-content-padding: 0', slot: '<div>Content without padding.</div>' },\n { ...baseArgs, expanded: true, style: '--mg-panel-background: none; --mg-panel-border-radius: 0; --mg-panel-box-shadow: none', slot: '<div>Transparent mg-panel</div>' },\n {\n ...baseArgs,\n expanded: true,\n slot: '<div>header right items should be vertically aligned</div><div slot=\"header-right\"><mg-tag>Label</mg-tag><mg-icon size=\"small\" icon=\"check-circle\" variant=\"success\"></mg-icon></div>',\n },\n { ...baseArgs, expanded: true, style: '--mg-panel-background: var(--color-danger)', slot: '<mg-card>Content whith child card.</mg-card>' },\n ])('Should render with template %s', async (page: PageType, args: ArgsType) => {\n await setPageContent(\n page,\n createHTML({\n ...args,\n }),\n );\n\n await updateScreenshotClass(page, { width: '500px', height: '100%' });\n\n await expect(page.locator('mg-panel')).toHaveScreenshot();\n\n await page.keyboard.press('Tab');\n await page.keyboard.press('Enter');\n await expect(page.locator('mg-panel')).toHaveScreenshot();\n });\n\n describe('navigation', () => {\n testEach([\n { ...baseArgs, titleEditable: true },\n {\n ...baseArgs,\n titleEditable: true,\n panelTitle:\n 'very long panel title very long panel title very long panel title very long panel title very long panel title very long panel title very long panel title very long panel title',\n },\n ])('Should navigate throw editabled panel %s', async (page: PageType, args: ArgsType) => {\n await setPageContent(\n page,\n createHTML({\n ...args,\n }),\n );\n\n await expect(page.locator('mg-panel')).toHaveScreenshot();\n\n await page.locator('.mg-c-panel__header-title mg-button:last-of-type').click();\n\n // Hide caret for screenshots\n await page.locator('mg-panel input').evaluate(element => (element.style.caretColor = 'transparent'));\n\n await expect(page.locator('mg-panel')).toHaveScreenshot();\n\n const input = await page.locator('mg-panel mg-input-text input');\n\n await input.press('Space');\n await input.press('KeyU');\n await input.press('KeyP');\n await input.press('KeyD');\n await input.press('KeyA');\n await input.press('KeyT');\n await input.press('KeyE');\n await input.press('KeyD');\n\n await page.locator('mg-panel mg-input-text mg-button:last-of-type').click();\n\n await expect(page.locator('mg-panel')).toHaveScreenshot();\n });\n\n test('Should NOT update panel title, case input new value does NOT match pattern', async ({ page }) => {\n const args = {\n ...baseArgs,\n titleEditable: true,\n titlePattern: '^((?!joker).)*$',\n titlePatternErrorMessage: \"You can't enter a bad guy !\",\n };\n\n await setPageContent(page, createHTML(args));\n\n await page.locator('.mg-c-panel__header-title mg-button:last-of-type').click();\n\n // Hide caret for screenshots\n await page.locator('mg-panel input').evaluate(element => (element.style.caretColor = 'transparent'));\n\n await expect(page.locator('mg-panel')).toHaveScreenshot();\n\n const input = await page.locator('mg-panel mg-input-text input');\n\n await input.press('Backspace');\n await input.press('Backspace');\n await input.press('Backspace');\n await input.press('Backspace');\n await input.press('Backspace');\n await input.press('KeyJ');\n await input.press('KeyO');\n await input.press('KeyK');\n await input.press('KeyE');\n await input.press('KeyR');\n\n await page.locator('mg-panel mg-input-text mg-button:last-of-type').click();\n\n await expect(page.locator('mg-panel')).toHaveScreenshot();\n });\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"mg-panel.e2e.playwright.js","sourceRoot":"","sources":["../../../../../src/components/molecules/mg-panel/test/mg-panel.e2e.playwright.ts"],"names":[],"mappings":"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","sourcesContent":["import { setPageContent, expect, describe, testEach, updateScreenshotClass, PageType, test } from '../../../../utils/playwright.e2e.test.utils';\nimport { createID } from '../../../../utils/components.utils';\nimport { renderAttributes, renderProperties } from '../../../../utils/e2e.test.utils';\nimport { type MgPanel } from '../mg-panel';\n\ntype ArgsType = Partial<MgPanel> & { slot?: SlotType };\nconst slots = ['default', 'flex'] as const;\ntype SlotType = (typeof slots)[number] | string;\n\nconst baseArgs = {\n panelTitle: 'panel title',\n};\n\nconst createHTML = (args: ArgsType): string => {\n const identifier = createID();\n const slot: SlotType = Boolean(args.slot) ? args.slot : slots[0];\n delete args.slot;\n\n const flexSlotContainer = (content: string): string => '<mg-badge variant=\"primary\" value=\"1\" label=\"label\"></mg-badge><div>' + content + '</div>';\n const slotContent = `\n <mg-button variant=\"secondary\" style=\"margin-left: 200px;\">\n <mg-icon icon=\"file-upload\"></mg-icon> Upload\n </mg-button>\n <mg-button is-icon variant=\"secondary\" label=\"delete\">\n <mg-icon icon=\"trash\"></mg-icon>\n </mg-button>\n `;\n\n return `\n <mg-panel ${renderAttributes({ ...args, identifier })}>\n ${\n slots.includes(slot as (typeof slots)[number])\n ? `\n <div>Content</div>\n <div slot=\"header-right\" ${slot === 'flex' ? 'style=\"display:flex; justify-content:space-between; align-items:center; width:100%;\"' : ''}>\n ${slot === 'flex' ? flexSlotContainer(slotContent) : slotContent}\n </div>`\n : slot\n }\n </mg-panel>\n <script>${renderProperties(args, `[identifier=\"${identifier}\"]`)}</script>`;\n};\n\ndescribe('mg-panel', () => {\n testEach([\n { ...baseArgs },\n { ...baseArgs, titlePosition: 'left' },\n { ...baseArgs, titlePosition: 'right' },\n { ...baseArgs, titlePosition: 'right', titleEditable: true },\n { ...baseArgs, expandToggleDisplay: 'text' },\n { ...baseArgs, expandToggleDisplay: 'icon' },\n { ...baseArgs, expandToggleDisplay: 'icon', titleEditable: true },\n { ...baseArgs, expanded: true },\n { ...baseArgs, titleEditable: true },\n {\n ...baseArgs,\n panelTitle:\n 'very long panel title very long panel title very long panel title very long panel title very long panel title very long panel title very long panel title very long panel title',\n },\n {\n ...baseArgs,\n titleEditable: true,\n panelTitle:\n 'very long panel title very long panel title very long panel title very long panel title very long panel title very long panel title very long panel title very long panel title',\n },\n { ...baseArgs, slot: 'flex' },\n {\n ...baseArgs,\n slot: 'flex',\n panelTitle:\n 'very long panel title very long panel title very long panel title very long panel title very long panel title very long panel title very long panel title very long panel title',\n },\n { ...baseArgs, expanded: true, style: '--mg-panel-content-padding: 0', slot: '<div>Content without padding.</div>' },\n { ...baseArgs, expanded: true, style: '--mg-panel-background: none; --mg-panel-border-radius: 0; --mg-panel-box-shadow: none', slot: '<div>Transparent mg-panel</div>' },\n {\n ...baseArgs,\n expanded: true,\n slot: '<div>header right items should be vertically aligned</div><div slot=\"header-right\"><mg-tag>Label</mg-tag><mg-icon size=\"small\" icon=\"check-circle\" variant=\"success\"></mg-icon></div>',\n },\n { ...baseArgs, expanded: true, style: '--mg-panel-background: var(--color-danger)', slot: '<mg-card>Content with child card.</mg-card>' },\n ])('Should render with template %s', async (page: PageType, args: ArgsType) => {\n await setPageContent(\n page,\n createHTML({\n ...args,\n }),\n );\n\n await updateScreenshotClass(page, { width: '500px', height: '100%' });\n\n await expect(page.locator('mg-panel')).toHaveScreenshot();\n\n await page.keyboard.press('Tab');\n await page.keyboard.press('Enter');\n await expect(page.locator('mg-panel')).toHaveScreenshot();\n });\n\n describe('navigation', () => {\n testEach([\n { ...baseArgs, titleEditable: true },\n {\n ...baseArgs,\n titleEditable: true,\n panelTitle:\n 'very long panel title very long panel title very long panel title very long panel title very long panel title very long panel title very long panel title very long panel title',\n },\n ])('Should navigate throw editabled panel %s', async (page: PageType, args: ArgsType) => {\n await setPageContent(\n page,\n createHTML({\n ...args,\n }),\n );\n\n await expect(page.locator('mg-panel')).toHaveScreenshot();\n\n await page.locator('.mg-c-panel__header-title mg-button:last-of-type').click();\n\n // Hide caret for screenshots\n await page.locator('mg-panel input').evaluate(element => (element.style.caretColor = 'transparent'));\n\n await expect(page.locator('mg-panel')).toHaveScreenshot();\n\n const input = await page.locator('mg-panel mg-input-text input');\n\n await input.press('Space');\n await input.press('KeyU');\n await input.press('KeyP');\n await input.press('KeyD');\n await input.press('KeyA');\n await input.press('KeyT');\n await input.press('KeyE');\n await input.press('KeyD');\n\n await page.locator('mg-panel mg-input-text mg-button:last-of-type').click();\n\n await expect(page.locator('mg-panel')).toHaveScreenshot();\n });\n\n test('Should NOT update panel title, case input new value does NOT match pattern', async ({ page }) => {\n const args = {\n ...baseArgs,\n titleEditable: true,\n titlePattern: '^((?!joker).)*$',\n titlePatternErrorMessage: \"You can't enter a bad guy !\",\n };\n\n await setPageContent(page, createHTML(args));\n\n await page.locator('.mg-c-panel__header-title mg-button:last-of-type').click();\n\n // Hide caret for screenshots\n await page.locator('mg-panel input').evaluate(element => (element.style.caretColor = 'transparent'));\n\n await expect(page.locator('mg-panel')).toHaveScreenshot();\n\n const input = await page.locator('mg-panel mg-input-text input');\n\n await input.press('Backspace');\n await input.press('Backspace');\n await input.press('Backspace');\n await input.press('Backspace');\n await input.press('Backspace');\n await input.press('KeyJ');\n await input.press('KeyO');\n await input.press('KeyK');\n await input.press('KeyE');\n await input.press('KeyR');\n\n await page.locator('mg-panel mg-input-text mg-button:last-of-type').click();\n\n await expect(page.locator('mg-panel')).toHaveScreenshot();\n });\n });\n});\n"]}
|
|
@@ -221,7 +221,7 @@ export class MgPopover {
|
|
|
221
221
|
"Placement": {
|
|
222
222
|
"location": "import",
|
|
223
223
|
"path": "@popperjs/core",
|
|
224
|
-
"id": "../../node_modules/.pnpm/@popperjs+core@2.11.
|
|
224
|
+
"id": "../../node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/index.d.ts::Placement"
|
|
225
225
|
}
|
|
226
226
|
}
|
|
227
227
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"behaviors.utils.js","sourceRoot":"","sources":["../../src/utils/behaviors.utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,YAAY,GAAG,CAAC,OAAoB,EAAoC,EAAE,CAAC,OAAO,CAAC,QAAQ,KAAK,cAAc,CAAC;AAErH,MAAM,CAAN,IAAY,wBAGX;AAHD,WAAY,wBAAwB;EAClC,mEAAuC,CAAA;EACvC,qEAAyC,CAAA;AAC3C,CAAC,EAHW,wBAAwB,KAAxB,wBAAwB,QAGnC;AAED,MAAM,OAAO,gBAAgB;EAO3B,
|
|
1
|
+
{"version":3,"file":"behaviors.utils.js","sourceRoot":"","sources":["../../src/utils/behaviors.utils.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * MgItemMore type guard\n * @param element - element to control type\n * @returns truthy if element is mg-item-more\n */\nconst isMgItemMore = (element: HTMLElement): element is HTMLMgItemMoreElement => element.nodeName === 'MG-ITEM-MORE';\n\nexport enum OverflowBehaviorElements {\n BASE_INDEX = 'data-overflow-base-index',\n PROXY_INDEX = 'data-overflow-proxy-index',\n}\n\nexport class OverflowBehavior {\n // variables\n private _resizeObserver: ResizeObserver;\n private _moreElement: HTMLElement;\n private _baseChildren: Element[];\n private _proxyChildren: Element[];\n\n constructor(\n private element: Element,\n private render: () => HTMLElement,\n ) {\n if (this._resizeObserver === undefined) {\n // add resize observer\n this._resizeObserver = new ResizeObserver(entries => {\n entries.forEach(entry => {\n this.run(entry.contentRect.width);\n });\n });\n this._resizeObserver.observe(this.element);\n }\n this.run();\n }\n\n /**********\n * Public *\n **********/\n\n /**\n * Disconnect ResizeObserver\n */\n public disconnect = (): void => {\n this._resizeObserver.disconnect();\n };\n\n /************\n * Internal *\n ************/\n\n /**\n * run overflow behavior\n * @param width - width of the container. Optional.\n */\n private run = (width?: number): void => {\n if (this._moreElement === undefined) {\n // set moreElement\n this._moreElement = this.render();\n\n // set children\n this._baseChildren = this.getInteractiveItems(this.element);\n if (isMgItemMore(this._moreElement)) {\n this._proxyChildren = this.getInteractiveItems(this._moreElement.shadowRoot.querySelector('mg-menu'));\n }\n\n // update children\n this._baseChildren.forEach((child, index) => {\n child.setAttribute(OverflowBehaviorElements.BASE_INDEX, `${index}`);\n // set moreElement children\n this._proxyChildren[index].setAttribute(OverflowBehaviorElements.PROXY_INDEX, `${index}`);\n });\n }\n\n if (width !== undefined) this.updateDisplayedItems(width);\n };\n\n /**\n * Get interactive children filtred by authorized nodeName ['MG-MENU-ITEM', 'MG-BUTTON']\n * @param element - element to parse\n * @returns children\n */\n private getInteractiveItems = (element: Element) =>\n (element.children?.length > 0 ? Array.from(element.children) : []).filter(element => ['MG-MENU-ITEM', 'MG-BUTTON'].includes(element.nodeName));\n\n /**\n * Update displayed items in container from a given available space\n * @param availableWidth - available width in container to display child items\n */\n private updateDisplayedItems = (availableWidth: number): void => {\n this.restoreItems();\n const acc = { accWidth: 0, previousItem: null };\n [...this._baseChildren, this._moreElement].forEach((child: HTMLMgMenuItemElement | HTMLMgItemMoreElement) => {\n acc.accWidth += child.offsetWidth;\n const hasPreviuosItem = acc.previousItem !== null;\n const isPreviousItemHidden = hasPreviuosItem && acc.previousItem.getAttribute('hidden') !== null;\n // if previous item is hidden AND is NOT more element we hidde current\n // OR if item has an overflow we hidde current\n // OR if current item is more element AND have NOT previous hidden items, current more element item is an hidden item\n // ELSE current is a display item\n this.toggleItem(\n child,\n (isPreviousItemHidden && !this.isMoreElement(child)) || this.isOverflowElement(acc.accWidth, child, availableWidth) || (this.isMoreElement(child) && !isPreviousItemHidden),\n );\n\n // update previous item with current item\n acc.previousItem = child;\n });\n };\n\n /**\n * Utility method to know if item overflow partialy or totaly in the container\n * @param cumulateWidth - previous sibling elements cumulate width + item width\n * @param item - item HTML element\n * @param availableWidth - container available width\n * @returns truthy if element is overflow\n */\n private isOverflowElement = (cumulateWidth: number, item: HTMLElement, availableWidth: number): boolean => {\n if (item.previousElementSibling === null || this.isMoreElement(item)) return false;\n else if (!this.isMoreElement(item.nextElementSibling)) return cumulateWidth + this._moreElement.offsetWidth > availableWidth;\n else return cumulateWidth > availableWidth;\n };\n\n /**\n * Utility method to know if a given element is the 'MORE' element\n * @param element - element to match with 'MORE' element\n * @returns truthy if element is the 'MORE' element\n */\n private isMoreElement = (element: Element): boolean => element.nodeName === 'MG-ITEM-MORE';\n\n /**\n * Toggle display item element\n * @param item - item to control\n * @param isHidden - is item hidden\n */\n private toggleItem = (item: HTMLElement, isHidden: boolean): void => {\n const mgActionMenuindex = Number(item.getAttribute(OverflowBehaviorElements.BASE_INDEX));\n if (this.isMoreElement(item)) this.toggleElement(this._moreElement, isHidden);\n else if (mgActionMenuindex >= 0) {\n this.toggleElement(item, isHidden);\n this.toggleElement(this._proxyChildren[mgActionMenuindex], !isHidden);\n }\n };\n\n /**\n * Toggle element's hidde attribute\n * @param element - element to toggle\n * @param isHidden - element is hidden\n */\n private toggleElement = (element: Element, isHidden: boolean): void => {\n if (isHidden) element.setAttribute('hidden', '');\n else element.removeAttribute('hidden');\n };\n\n /**\n * Remove hidden attributes on all items\n */\n private restoreItems = (): void => {\n [...this._baseChildren, this._moreElement].forEach(item => item.removeAttribute('hidden'));\n };\n}\n"]}
|
|
@@ -8,7 +8,7 @@ export const createID = (prefix = '', length = 10) => {
|
|
|
8
8
|
const chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
|
|
9
9
|
const charsLength = chars.length;
|
|
10
10
|
let ID = '';
|
|
11
|
-
let now = Date.now();
|
|
11
|
+
let now = Math.floor(globalThis.crypto.getRandomValues(new Uint32Array(1))[0] * Date.now());
|
|
12
12
|
while (length > 0) {
|
|
13
13
|
now += Math.pow(10, 6); // Add 1 millisecond to the timestamp
|
|
14
14
|
const index = now % charsLength;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.utils.js","sourceRoot":"","sources":["../../src/utils/components.utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,MAAM,GAAG,EAAE,EAAU,EAAE;EAC3D,MAAM,KAAK,GAAG,sCAAsC,CAAC;EACrD,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC;EAEjC,IAAI,EAAE,GAAG,EAAE,CAAC;EACZ,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"components.utils.js","sourceRoot":"","sources":["../../src/utils/components.utils.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Create random ID\n * @param prefix - add prefix to created ID\n * @param length - ID length\n * @returns ID\n */\nexport const createID = (prefix = '', length = 10): string => {\n const chars = 'abcdefghijklmnopqrstuvwxyz0123456789';\n const charsLength = chars.length;\n\n let ID = '';\n let now = Math.floor(globalThis.crypto.getRandomValues(new Uint32Array(1))[0] * Date.now());\n while (length > 0) {\n now += Math.pow(10, 6); // Add 1 millisecond to the timestamp\n const index = now % charsLength;\n ID += chars.charAt(index);\n length--;\n }\n return (prefix !== '' ? `${prefix}-` : '') + ID;\n};\n\n/**\n * Class to manage component classlist\n * Set() are not working when imported in project\n */\nexport class ClassList {\n /**\n * Available classes\n */\n classes: string[];\n\n constructor(classlist: string[] = []) {\n this.classes = classlist;\n }\n\n /**\n * Add class\n * @param className - class name to add\n */\n add = (className: string): void => {\n if (!this.has(className)) {\n this.classes.push(className);\n }\n };\n\n /**\n * Delete class\n * @param className - class name to delete\n */\n delete = (className: string): void => {\n const index = this.classes.indexOf(className);\n if (index > -1) {\n this.classes.splice(index, 1);\n }\n };\n\n /**\n * Check if class exist in list\n * @param className - class name to check\n * @returns class name is in the list\n */\n has = (className: string): boolean => {\n return this.classes.includes(className);\n };\n\n /**\n * Join classes seperated by spaces\n * @returns joined values\n */\n join = (): string => {\n return this.classes.join(' ');\n };\n}\n\n/**\n * Check if all items are string\n * @param items - items to check\n * @returns all items are string\n */\nexport const allItemsAreString = (items: unknown): items is string[] => Array.isArray(items) && items.every(item => typeof item === 'string');\n\n/**\n * Check if element is a heading\n * @param element - slotted element\n * @param tagNames - allowed tag names list\n * @returns element is a heading\n */\nexport const isTagName = (element: Element, tagNames: string[]): boolean => {\n return tagNames.includes(element?.tagName.toLowerCase());\n};\n\n/**\n * Focusable elements query selector\n */\nexport const focusableElements = 'a[href], button, input, textarea, select, details, [tabindex]:not([tabindex=\"-1\"]), [identifier]';\n\n/**\n * Get windows\n * @param localWindow - the window we are lookink for other windows\n * @returns The list of windows found\n */\nexport const getWindows = (localWindow: Window): Window[] => {\n const parentWindows = getParentWindows(localWindow);\n const childWindows = getChildWindows(localWindow);\n return [localWindow, ...parentWindows, ...childWindows];\n};\n\n/**\n * Get parent windows\n * @param localWindow - the window we are lookink for parents\n * @param windows - The list of allready found windows\n * @returns The list of windows found\n */\nexport const getParentWindows = (localWindow: Window, windows: Window[] = []): Window[] => {\n // Check if is in iframe\n if (localWindow.self !== localWindow.top) {\n // Check if we have permission to access parent\n try {\n const parentWindow: Window = localWindow.parent;\n windows.push(parentWindow);\n return getParentWindows(parentWindow, windows);\n } catch (err) {\n console.error('Different hosts between iframes:', err);\n return windows;\n }\n }\n return windows;\n};\n\n/**\n * Get child windows\n * @param localWindow - the window we are lookink for children\n * @param windows - The list of allready found windows\n * @returns The list of windows found\n */\nconst getChildWindows = (localWindow: Window, windows: Window[] = []): Window[] => {\n if (localWindow.frames.length > 0) {\n for (const childWindow of Array.from(localWindow.frames)) {\n windows.push(childWindow);\n getChildWindows(childWindow, windows);\n }\n }\n return windows;\n};\n\n/**\n * Validate string\n * @param value - value to check\n * @returns if string is valid\n */\nexport const isValidString = (value: unknown): boolean => typeof value === 'string' && value.trim() !== '';\n\n/**\n * Clean string caraters\n * @param text - text to cliean\n * @returns cleanded string\n */\nexport const cleanString = (text: string): string =>\n typeof text === 'string' &&\n text\n .toLocaleLowerCase()\n .normalize('NFD')\n .replaceAll(/[\\u0300-\\u036f]/g, '');\n"]}
|
|
@@ -11,6 +11,11 @@ describe('components.utils', () => {
|
|
|
11
11
|
}
|
|
12
12
|
expect(id).toMatch(regexp);
|
|
13
13
|
});
|
|
14
|
+
test('Should generate a unique ID when both are created at the same time', () => {
|
|
15
|
+
const id1 = createID();
|
|
16
|
+
const id2 = createID();
|
|
17
|
+
expect(id1).not.toEqual(id2);
|
|
18
|
+
});
|
|
14
19
|
});
|
|
15
20
|
describe('ClassList', () => {
|
|
16
21
|
test('Should add classes to list', () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.utils.spec.js","sourceRoot":"","sources":["../../src/utils/components.utils.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,iBAAiB,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC/H,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,gBAAgB,EAAE,CAAC;AAEnB,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;EAChC,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,+CAA+C,EAAE,MAAM,CAAC,EAAE;MAC1F,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;MAC5B,IAAI,MAAM,GAAG,gBAAgB,CAAC;MAC9B,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,EAAE,EAAE;QACzC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,MAAM,gBAAgB,CAAC,CAAC;OACjD;MACD,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;EACL,CAAC,CAAC,CAAC;EAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,IAAI,CAAC,4BAA4B,EAAE,GAAG,EAAE;MACtC,MAAM,eAAe,GAAG,IAAI,SAAS,EAAE,CAAC;MACxC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;MAC5C,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;MAC3B,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;MACjD,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;MAC3B,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;MACxD,4CAA4C;MAC5C,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;MAC3B,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,iCAAiC,EAAE,GAAG,EAAE;MAC3C,MAAM,eAAe,GAAG,IAAI,SAAS,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;MACtD,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;MAC9B,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;MACjD,2DAA2D;MAC3D,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;MAC9B,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,uCAAuC,EAAE,GAAG,EAAE;MACjD,MAAM,eAAe,GAAG,IAAI,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;MAC/C,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;MACjD,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,4CAA4C,EAAE,GAAG,EAAE;MACtD,MAAM,eAAe,GAAG,IAAI,SAAS,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;MACtD,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;EACL,CAAC,CAAC,CAAC;EAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,IAAI,CAAC,IAAI,CAAC;MACR,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;MACvD,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE;KACpE,CAAC,CAAC,yCAAyC,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;MACpE,MAAM,CAAC,iBAAiB,CAAC,KAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;EACL,CAAC,CAAC,CAAC;EAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,IAAI,CAAC,IAAI,CAAC;MACR,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;MACvC,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE;MAC1C,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE;KAC1C,CAAC,CAAC,yCAAyC,EAAE,CAAC,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAE,EAAE;MAC5E,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;MAC1C,GAAG,CAAC,SAAS,GAAG,wBAAwB,CAAC;MACzC,MAAM,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;MAC7C,MAAM,CAAC,SAAS,CAAC,GAAkB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;EACL,CAAC,CAAC,CAAC;EAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,MAAM,sBAAsB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IACzC,MAAM,mBAAmB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IACtC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE;MACtC,KAAK,EAAE;QACL,IAAI,MAAM;UACR,OAAO,sBAAsB,EAAE,CAAC;QAClC,CAAC;QACD,IAAI,CAAC;UACH,OAAO,mBAAmB,EAAE,CAAC;QAC/B,CAAC;OACF;KACF,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;MACb,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,sCAAsC,EAAE,GAAG,EAAE;MAChD,sBAAsB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;MAC1C,MAAM,WAAW,GAAW,MAAM,CAAC;MACnC,MAAM,OAAO,GAAa,UAAU,CAAC,WAAW,CAAC,CAAC;MAClD,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;MAChC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,wCAAwC,EAAE,GAAG,EAAE;MAClD,sBAAsB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;MAC1C,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;MAC1F,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,sBAAsB,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC;MAEjG,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;MACnC,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;MAChC,MAAM,CAAC,aAAa,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;MACzC,MAAM,CAAC,eAAe,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,uCAAuC,EAAE,GAAG,EAAE;MACjD,sBAAsB,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;MACxF,mBAAmB,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;MAChD,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;MACnC,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,4DAA4D,EAAE,GAAG,EAAE;MACtE,sBAAsB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;MAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;MAChD,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;MAC1F,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,sBAAsB,CAAC,GAAG,EAAE;QACtF,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;MACzB,CAAC,CAAC,CAAC;MACH,MAAM,WAAW,GAAW,MAAM,CAAC;MACnC,MAAM,OAAO,GAAa,UAAU,CAAC,WAAW,CAAC,CAAC;MAClD,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;MAChC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;MACxC,MAAM,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;MACtC,MAAM,CAAC,aAAa,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;MACzC,MAAM,CAAC,eAAe,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;EACL,CAAC,CAAC,CAAC;EAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,0CAA0C,EAAE,KAAK,CAAC,EAAE;MACnG,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,sCAAsC,EAAE,KAAK,CAAC,EAAE;MAC/E,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;EACL,CAAC,CAAC,CAAC;EAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,IAAI,CAAC,IAAI,CAAC;MACR,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE;MACxC,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE;MACxC,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE;MACxC,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE;MAC5C,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE;MAC1C,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE;MAC1C,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE;KAC/C,CAAC,CAAC,+BAA+B,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;MAC3D,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;EACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { createID, ClassList, allItemsAreString, isTagName, getWindows, isValidString, cleanString } from './components.utils';\nimport { mockConsoleError } from './unit.test.utils';\n\nmockConsoleError();\n\ndescribe('components.utils', () => {\n describe('createID', () => {\n test.each([undefined, '', 'blu'])('Should generate a prefixed ID if defined : %s', prefix => {\n const id = createID(prefix);\n let regexp = /^[a-z0-9]{10}$/;\n if (prefix !== undefined && prefix !== '') {\n regexp = new RegExp(`^${prefix}-[a-z0-9]{10}$`);\n }\n expect(id).toMatch(regexp);\n });\n });\n\n describe('ClassList', () => {\n test('Should add classes to list', () => {\n const classCollection = new ClassList();\n expect(classCollection.classes).toEqual([]);\n classCollection.add('blu');\n expect(classCollection.classes).toEqual(['blu']);\n classCollection.add('bli');\n expect(classCollection.classes).toEqual(['blu', 'bli']);\n // Should not add classes if already in list\n classCollection.add('blu');\n expect(classCollection.classes).toEqual(['blu', 'bli']);\n });\n\n test('Should delete classes from list', () => {\n const classCollection = new ClassList(['blu', 'bli']);\n classCollection.delete('blu');\n expect(classCollection.classes).toEqual(['bli']);\n // List doesn't change if class name doesn't existe in list\n classCollection.delete('bla');\n expect(classCollection.classes).toEqual(['bli']);\n });\n\n test('Should check if class already in list', () => {\n const classCollection = new ClassList(['blu']);\n expect(classCollection.has('blu')).toEqual(true);\n expect(classCollection.has('bli')).toEqual(false);\n });\n\n test('Should return seperated space classes list', () => {\n const classCollection = new ClassList(['blu', 'bli']);\n expect(classCollection.join()).toEqual('blu bli');\n });\n });\n\n describe('allItemsAreString', () => {\n test.each([\n { items: ['blu', 'bli', 'blo', 'bla'], expected: true },\n { items: ['blu', 'bli', 'blo', { value: 'bla' }], expected: false },\n ])('Should test if all otems are string: %s', ({ items, expected }) => {\n expect(allItemsAreString(items as string[])).toEqual(expected);\n });\n });\n\n describe('isTagName', () => {\n test.each([\n { querySelector: 'h1', expected: true },\n { querySelector: 'span', expected: false },\n { querySelector: 'blu', expected: false },\n ])('Should test if all otems are string: %s', ({ querySelector, expected }) => {\n const div = document.createElement('div');\n div.innerHTML = '<h1></h1><span></span>';\n const elm = div.querySelector(querySelector);\n expect(isTagName(elm as HTMLElement, ['h1'])).toEqual(expected);\n });\n });\n\n describe('getWindows', () => {\n const mockWindowFramesLength = jest.fn();\n const mockWindowIndexZero = jest.fn();\n Object.defineProperty(window, 'frames', {\n value: {\n get length() {\n return mockWindowFramesLength();\n },\n get 0() {\n return mockWindowIndexZero();\n },\n },\n });\n\n afterEach(() => {\n jest.clearAllMocks();\n });\n\n test('Should return the window in an array', () => {\n mockWindowFramesLength.mockReturnValue(0);\n const localWindow: Window = window;\n const windows: Window[] = getWindows(localWindow);\n expect(windows).toHaveLength(1);\n expect(windows[0]).toEqual(localWindow);\n });\n\n test('Should return the window with a parent', () => {\n mockWindowFramesLength.mockReturnValue(0);\n const spyWindowSelf = jest.spyOn(window, 'self', 'get').mockImplementationOnce(jest.fn());\n const spyWindowParent = jest.spyOn(window, 'parent', 'get').mockImplementationOnce(() => window);\n\n const windows = getWindows(window);\n expect(windows).toHaveLength(2);\n expect(spyWindowSelf).toBeCalledTimes(2);\n expect(spyWindowParent).toBeCalledTimes(1);\n });\n\n test('Should return the window with a child', () => {\n mockWindowFramesLength.mockReturnValueOnce(1).mockReturnValueOnce(1).mockReturnValue(0);\n mockWindowIndexZero.mockReturnValueOnce(window);\n const windows = getWindows(window);\n expect(windows).toHaveLength(2);\n });\n\n test('Should throw an error when cannot access top parent window', () => {\n mockWindowFramesLength.mockReturnValue(0);\n const spyConsole = jest.spyOn(console, 'error');\n const spyWindowSelf = jest.spyOn(window, 'self', 'get').mockImplementationOnce(jest.fn());\n const spyWindowParent = jest.spyOn(window, 'parent', 'get').mockImplementationOnce(() => {\n throw new Error('non');\n });\n const localWindow: Window = window;\n const windows: Window[] = getWindows(localWindow);\n expect(windows).toHaveLength(1);\n expect(windows[0]).toEqual(localWindow);\n expect(spyConsole).toBeCalledTimes(1);\n expect(spyWindowSelf).toBeCalledTimes(1);\n expect(spyWindowParent).toBeCalledTimes(1);\n });\n });\n\n describe('isValidString', () => {\n test.each(['', ' ', null, undefined, 1, {}, []])('Should return \"false\" for invalid values', value => {\n expect(isValidString(value)).toEqual(false);\n });\n\n test.each(['batman', 'batman '])('Should return \"true\" for valid value', value => {\n expect(isValidString(value)).toEqual(true);\n });\n });\n\n describe('cleanString', () => {\n test.each([\n { string: 'batman', expected: 'batman' },\n { string: 'BATMAN', expected: 'batman' },\n { string: 'Batman', expected: 'batman' },\n { string: ' batman ', expected: ' batman ' },\n { string: ' batman', expected: ' batman' },\n { string: 'batman ', expected: 'batman ' },\n { string: 'âäàçéèêñù', expected: 'aaaceeenu' },\n ])('Should format string properly', ({ string, expected }) => {\n expect(cleanString(string)).toEqual(expected);\n });\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"components.utils.spec.js","sourceRoot":"","sources":["../../src/utils/components.utils.spec.ts"],"names":[],"mappings":"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","sourcesContent":["import { createID, ClassList, allItemsAreString, isTagName, getWindows, isValidString, cleanString } from './components.utils';\nimport { mockConsoleError } from './unit.test.utils';\n\nmockConsoleError();\n\ndescribe('components.utils', () => {\n describe('createID', () => {\n test.each([undefined, '', 'blu'])('Should generate a prefixed ID if defined : %s', prefix => {\n const id = createID(prefix);\n let regexp = /^[a-z0-9]{10}$/;\n if (prefix !== undefined && prefix !== '') {\n regexp = new RegExp(`^${prefix}-[a-z0-9]{10}$`);\n }\n expect(id).toMatch(regexp);\n });\n test('Should generate a unique ID when both are created at the same time', () => {\n const id1 = createID();\n const id2 = createID();\n expect(id1).not.toEqual(id2);\n });\n });\n\n describe('ClassList', () => {\n test('Should add classes to list', () => {\n const classCollection = new ClassList();\n expect(classCollection.classes).toEqual([]);\n classCollection.add('blu');\n expect(classCollection.classes).toEqual(['blu']);\n classCollection.add('bli');\n expect(classCollection.classes).toEqual(['blu', 'bli']);\n // Should not add classes if already in list\n classCollection.add('blu');\n expect(classCollection.classes).toEqual(['blu', 'bli']);\n });\n\n test('Should delete classes from list', () => {\n const classCollection = new ClassList(['blu', 'bli']);\n classCollection.delete('blu');\n expect(classCollection.classes).toEqual(['bli']);\n // List doesn't change if class name doesn't existe in list\n classCollection.delete('bla');\n expect(classCollection.classes).toEqual(['bli']);\n });\n\n test('Should check if class already in list', () => {\n const classCollection = new ClassList(['blu']);\n expect(classCollection.has('blu')).toEqual(true);\n expect(classCollection.has('bli')).toEqual(false);\n });\n\n test('Should return seperated space classes list', () => {\n const classCollection = new ClassList(['blu', 'bli']);\n expect(classCollection.join()).toEqual('blu bli');\n });\n });\n\n describe('allItemsAreString', () => {\n test.each([\n { items: ['blu', 'bli', 'blo', 'bla'], expected: true },\n { items: ['blu', 'bli', 'blo', { value: 'bla' }], expected: false },\n ])('Should test if all otems are string: %s', ({ items, expected }) => {\n expect(allItemsAreString(items as string[])).toEqual(expected);\n });\n });\n\n describe('isTagName', () => {\n test.each([\n { querySelector: 'h1', expected: true },\n { querySelector: 'span', expected: false },\n { querySelector: 'blu', expected: false },\n ])('Should test if all otems are string: %s', ({ querySelector, expected }) => {\n const div = document.createElement('div');\n div.innerHTML = '<h1></h1><span></span>';\n const elm = div.querySelector(querySelector);\n expect(isTagName(elm as HTMLElement, ['h1'])).toEqual(expected);\n });\n });\n\n describe('getWindows', () => {\n const mockWindowFramesLength = jest.fn();\n const mockWindowIndexZero = jest.fn();\n Object.defineProperty(window, 'frames', {\n value: {\n get length() {\n return mockWindowFramesLength();\n },\n get 0() {\n return mockWindowIndexZero();\n },\n },\n });\n\n afterEach(() => {\n jest.clearAllMocks();\n });\n\n test('Should return the window in an array', () => {\n mockWindowFramesLength.mockReturnValue(0);\n const localWindow: Window = window;\n const windows: Window[] = getWindows(localWindow);\n expect(windows).toHaveLength(1);\n expect(windows[0]).toEqual(localWindow);\n });\n\n test('Should return the window with a parent', () => {\n mockWindowFramesLength.mockReturnValue(0);\n const spyWindowSelf = jest.spyOn(window, 'self', 'get').mockImplementationOnce(jest.fn());\n const spyWindowParent = jest.spyOn(window, 'parent', 'get').mockImplementationOnce(() => window);\n\n const windows = getWindows(window);\n expect(windows).toHaveLength(2);\n expect(spyWindowSelf).toBeCalledTimes(2);\n expect(spyWindowParent).toBeCalledTimes(1);\n });\n\n test('Should return the window with a child', () => {\n mockWindowFramesLength.mockReturnValueOnce(1).mockReturnValueOnce(1).mockReturnValue(0);\n mockWindowIndexZero.mockReturnValueOnce(window);\n const windows = getWindows(window);\n expect(windows).toHaveLength(2);\n });\n\n test('Should throw an error when cannot access top parent window', () => {\n mockWindowFramesLength.mockReturnValue(0);\n const spyConsole = jest.spyOn(console, 'error');\n const spyWindowSelf = jest.spyOn(window, 'self', 'get').mockImplementationOnce(jest.fn());\n const spyWindowParent = jest.spyOn(window, 'parent', 'get').mockImplementationOnce(() => {\n throw new Error('non');\n });\n const localWindow: Window = window;\n const windows: Window[] = getWindows(localWindow);\n expect(windows).toHaveLength(1);\n expect(windows[0]).toEqual(localWindow);\n expect(spyConsole).toBeCalledTimes(1);\n expect(spyWindowSelf).toBeCalledTimes(1);\n expect(spyWindowParent).toBeCalledTimes(1);\n });\n });\n\n describe('isValidString', () => {\n test.each(['', ' ', null, undefined, 1, {}, []])('Should return \"false\" for invalid values', value => {\n expect(isValidString(value)).toEqual(false);\n });\n\n test.each(['batman', 'batman '])('Should return \"true\" for valid value', value => {\n expect(isValidString(value)).toEqual(true);\n });\n });\n\n describe('cleanString', () => {\n test.each([\n { string: 'batman', expected: 'batman' },\n { string: 'BATMAN', expected: 'batman' },\n { string: 'Batman', expected: 'batman' },\n { string: ' batman ', expected: ' batman ' },\n { string: ' batman', expected: ' batman' },\n { string: 'batman ', expected: 'batman ' },\n { string: 'âäàçéèêñù', expected: 'aaaceeenu' },\n ])('Should format string properly', ({ string, expected }) => {\n expect(cleanString(string)).toEqual(expected);\n });\n });\n});\n"]}
|
|
@@ -5,6 +5,14 @@ import { i as isValidString } from './components.utils.js';
|
|
|
5
5
|
* Possible input width
|
|
6
6
|
*/
|
|
7
7
|
const widths = [2, 4, 16, 'full'];
|
|
8
|
+
/**
|
|
9
|
+
* Available handlers
|
|
10
|
+
*/
|
|
11
|
+
var Handler;
|
|
12
|
+
(function (Handler) {
|
|
13
|
+
Handler["BLUR"] = "blur";
|
|
14
|
+
Handler["FOCUS"] = "focus";
|
|
15
|
+
})(Handler || (Handler = {}));
|
|
8
16
|
|
|
9
17
|
/**
|
|
10
18
|
* Apply in all input child node the aria-describedby attribute
|
|
@@ -133,6 +141,6 @@ const MgInput = (props, children, utils) => {
|
|
|
133
141
|
props.errorMessage && !props.readonly && !props.disabled && (h("div", { id: helpTextErrorId, class: "mg-c-input__error", innerHTML: props.errorMessage, "aria-live": "assertive" }))))));
|
|
134
142
|
};
|
|
135
143
|
|
|
136
|
-
export { MgInput as M };
|
|
144
|
+
export { Handler as H, MgInput as M };
|
|
137
145
|
|
|
138
146
|
//# sourceMappingURL=MgInput.js.map
|