@mgdis/mg-components 5.26.0 → 5.27.1
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/{index-c585c382.js → index-4b43c17b.js} +97 -81
- package/dist/cjs/index-4b43c17b.js.map +1 -0
- package/dist/cjs/{index-0a2783ee.js → index-83102ab3.js} +23 -10
- package/dist/cjs/index-83102ab3.js.map +1 -0
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/{mg-action-more_34.cjs.entry.js → mg-action-more_36.cjs.entry.js} +995 -742
- package/dist/cjs/mg-action-more_36.cjs.entry.js.map +1 -0
- package/dist/cjs/mg-components.cjs.js +3 -3
- package/dist/cjs/mg-components.cjs.js.map +1 -1
- package/dist/cjs/mg-loader.cjs.entry.js +3 -3
- package/dist/cjs/mg-loader.cjs.entry.js.map +1 -1
- package/dist/collection/assets/icons/index.js +1 -206
- package/dist/collection/assets/icons/index.js.map +1 -1
- package/dist/collection/collection-manifest.json +4 -3
- package/dist/collection/components/atoms/mg-badge/mg-badge.js +2 -2
- package/dist/collection/components/atoms/mg-badge/mg-badge.js.map +1 -1
- package/dist/collection/components/atoms/mg-button/mg-button.js +9 -6
- package/dist/collection/components/atoms/mg-button/mg-button.js.map +1 -1
- package/dist/collection/components/atoms/mg-card/mg-card.js +5 -2
- package/dist/collection/components/atoms/mg-card/mg-card.js.map +1 -1
- package/dist/collection/components/atoms/mg-character-left/mg-character-left.js +2 -2
- package/dist/collection/components/atoms/mg-character-left/mg-character-left.js.map +1 -1
- package/dist/collection/components/atoms/mg-divider/mg-divider.js +1 -1
- package/dist/collection/components/atoms/mg-icon/mg-icon.conf.js.map +1 -1
- package/dist/collection/components/atoms/mg-icon/mg-icon.js +13 -8
- package/dist/collection/components/atoms/mg-icon/mg-icon.js.map +1 -1
- package/dist/collection/components/atoms/mg-input-title/mg-input-title.js +6 -3
- package/dist/collection/components/atoms/mg-input-title/mg-input-title.js.map +1 -1
- package/dist/collection/components/atoms/mg-tag/mg-tag.js +6 -3
- package/dist/collection/components/atoms/mg-tag/mg-tag.js.map +1 -1
- package/dist/collection/components/atoms/mg-tooltip/mg-tooltip-content/mg-tooltip-content.js +4 -1
- package/dist/collection/components/atoms/mg-tooltip/mg-tooltip-content/mg-tooltip-content.js.map +1 -1
- package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.conf.js +1 -0
- package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.conf.js.map +1 -1
- package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.js +13 -3
- package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input/mg-input.conf.js +21 -0
- package/dist/collection/components/molecules/inputs/mg-input/mg-input.conf.js.map +1 -0
- package/dist/collection/components/molecules/inputs/mg-input/mg-input.js +515 -0
- package/dist/collection/components/molecules/inputs/mg-input/mg-input.js.map +1 -0
- package/dist/collection/components/molecules/inputs/mg-input-checkbox/MgInputCheckboxList.js +1 -5
- 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-paginated/mg-input-checkbox-paginated.js +7 -7
- package/dist/collection/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox-paginated/mg-input-checkbox-paginated.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.conf.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.js +67 -45
- package/dist/collection/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-date/mg-input-date.conf.js +1 -0
- package/dist/collection/components/molecules/inputs/mg-input-date/mg-input-date.conf.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-date/mg-input-date.js +71 -22
- package/dist/collection/components/molecules/inputs/mg-input-date/mg-input-date.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-numeric/mg-input-numeric.js +52 -19
- package/dist/collection/components/molecules/inputs/mg-input-numeric/mg-input-numeric.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-password/mg-input-password.js +54 -15
- package/dist/collection/components/molecules/inputs/mg-input-password/mg-input-password.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-radio/mg-input-radio.js +40 -8
- package/dist/collection/components/molecules/inputs/mg-input-radio/mg-input-radio.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-select/mg-input-select.js +44 -13
- package/dist/collection/components/molecules/inputs/mg-input-select/mg-input-select.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-text/mg-input-text.js +72 -24
- package/dist/collection/components/molecules/inputs/mg-input-text/mg-input-text.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-textarea/mg-input-textarea.js +47 -15
- package/dist/collection/components/molecules/inputs/mg-input-textarea/mg-input-textarea.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-toggle/mg-input-toggle.js +34 -21
- package/dist/collection/components/molecules/inputs/mg-input-toggle/mg-input-toggle.js.map +1 -1
- package/dist/collection/components/molecules/menu/mg-menu/mg-menu.js +26 -24
- package/dist/collection/components/molecules/menu/mg-menu/mg-menu.js.map +1 -1
- package/dist/collection/components/molecules/menu/mg-menu-item/mg-menu-item.conf.js +4 -0
- package/dist/collection/components/molecules/menu/mg-menu-item/mg-menu-item.conf.js.map +1 -1
- package/dist/collection/components/molecules/menu/mg-menu-item/mg-menu-item.js +76 -9
- package/dist/collection/components/molecules/menu/mg-menu-item/mg-menu-item.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 +41 -41
- package/dist/collection/components/molecules/mg-action-more/mg-action-more.js.map +1 -1
- package/dist/collection/components/molecules/mg-details/mg-details.js +5 -1
- package/dist/collection/components/molecules/mg-details/mg-details.js.map +1 -1
- package/dist/collection/components/molecules/mg-form/mg-form.js +8 -4
- package/dist/collection/components/molecules/mg-form/mg-form.js.map +1 -1
- package/dist/collection/components/molecules/mg-illustrated-message/mg-illustrated-message.js +8 -3
- package/dist/collection/components/molecules/mg-illustrated-message/mg-illustrated-message.js.map +1 -1
- package/dist/collection/components/molecules/mg-item-more/mg-item-more.conf.js.map +1 -1
- package/dist/collection/components/molecules/mg-item-more/mg-item-more.js +20 -13
- package/dist/collection/components/molecules/mg-item-more/mg-item-more.js.map +1 -1
- package/dist/collection/components/molecules/mg-loader/mg-loader.js +3 -3
- package/dist/collection/components/molecules/mg-loader/mg-loader.js.map +1 -1
- package/dist/collection/components/molecules/mg-message/mg-message.js +7 -3
- package/dist/collection/components/molecules/mg-message/mg-message.js.map +1 -1
- package/dist/collection/components/molecules/mg-modal/mg-modal.js +6 -2
- package/dist/collection/components/molecules/mg-modal/mg-modal.js.map +1 -1
- package/dist/collection/components/molecules/mg-pagination/mg-pagination.js +4 -4
- package/dist/collection/components/molecules/mg-pagination/mg-pagination.js.map +1 -1
- package/dist/collection/components/molecules/mg-panel/mg-panel.js +8 -4
- package/dist/collection/components/molecules/mg-panel/mg-panel.js.map +1 -1
- package/dist/collection/components/molecules/mg-popover/mg-popover-content/mg-popover-content.js +4 -1
- package/dist/collection/components/molecules/mg-popover/mg-popover-content/mg-popover-content.js.map +1 -1
- package/dist/collection/components/molecules/mg-popover/mg-popover.js +6 -2
- package/dist/collection/components/molecules/mg-popover/mg-popover.js.map +1 -1
- package/dist/collection/components/molecules/mg-skip-links/mg-skip-links.js +1 -1
- package/dist/collection/components/molecules/mg-tabs/mg-tabs.js +4 -1
- package/dist/collection/components/molecules/mg-tabs/mg-tabs.js.map +1 -1
- package/dist/collection/locales/en/messages.json +10 -3
- package/dist/collection/locales/fr/messages.json +10 -3
- package/dist/collection/locales/index.conf.js +2 -0
- package/dist/collection/locales/index.conf.js.map +1 -0
- package/dist/collection/utils/playwright.fixture.js +1 -1
- package/dist/collection/utils/playwright.fixture.js.map +1 -1
- package/dist/components/index.es.js +24 -24
- package/dist/components/index.es.js.map +1 -1
- package/dist/components/index2.js +24 -8
- package/dist/components/index2.js.map +1 -1
- package/dist/components/mg-action-more.js +29 -25
- package/dist/components/mg-action-more.js.map +1 -1
- package/dist/components/mg-badge2.js +1 -1
- package/dist/components/mg-badge2.js.map +1 -1
- package/dist/components/mg-button2.js +1 -1
- package/dist/components/mg-button2.js.map +1 -1
- package/dist/components/mg-card2.js +2 -2
- package/dist/components/mg-card2.js.map +1 -1
- package/dist/components/mg-character-left2.js +1 -1
- package/dist/components/mg-character-left2.js.map +1 -1
- package/dist/components/mg-details.js +1 -1
- package/dist/components/mg-details.js.map +1 -1
- package/dist/components/mg-divider.js +1 -1
- package/dist/components/mg-form.js +1 -1
- package/dist/components/mg-form.js.map +1 -1
- package/dist/components/mg-icon2.js +4 -416
- package/dist/components/mg-icon2.js.map +1 -1
- package/dist/components/mg-illustrated-message.js +3 -3
- package/dist/components/mg-illustrated-message.js.map +1 -1
- package/dist/components/mg-input-checkbox-paginated2.js +13 -11
- package/dist/components/mg-input-checkbox-paginated2.js.map +1 -1
- package/dist/components/mg-input-checkbox.js +71 -49
- package/dist/components/mg-input-checkbox.js.map +1 -1
- package/dist/components/mg-input-date.js +69 -20
- package/dist/components/mg-input-date.js.map +1 -1
- package/dist/components/mg-input-numeric.js +42 -13
- package/dist/components/mg-input-numeric.js.map +1 -1
- package/dist/components/mg-input-password.js +56 -12
- package/dist/components/mg-input-password.js.map +1 -1
- package/dist/components/mg-input-radio.js +41 -10
- package/dist/components/mg-input-radio.js.map +1 -1
- package/dist/components/mg-input-select2.js +42 -12
- package/dist/components/mg-input-select2.js.map +1 -1
- package/dist/components/mg-input-text2.js +56 -18
- package/dist/components/mg-input-text2.js.map +1 -1
- package/dist/components/mg-input-textarea.js +44 -13
- package/dist/components/mg-input-textarea.js.map +1 -1
- package/dist/components/mg-input-title2.js +1 -1
- package/dist/components/mg-input-title2.js.map +1 -1
- package/dist/components/mg-input-toggle.js +35 -22
- package/dist/components/mg-input-toggle.js.map +1 -1
- package/dist/components/mg-input.d.ts +11 -0
- package/dist/components/mg-input.js +8 -0
- package/dist/components/mg-input.js.map +1 -0
- package/dist/components/mg-input2.js +352 -0
- package/dist/components/mg-input2.js.map +1 -0
- package/dist/components/mg-item-more.js +1 -338
- package/dist/components/mg-item-more.js.map +1 -1
- package/dist/components/mg-item-more2.js +592 -0
- package/dist/components/mg-item-more2.js.map +1 -0
- package/dist/components/mg-loader.js +1 -1
- package/dist/components/mg-loader.js.map +1 -1
- package/dist/components/mg-menu-item2.js +47 -8
- package/dist/components/mg-menu-item2.js.map +1 -1
- package/dist/components/mg-menu.js +1 -1
- package/dist/components/mg-message.js +1 -1
- package/dist/components/mg-message.js.map +1 -1
- package/dist/components/mg-modal.js +3 -3
- package/dist/components/mg-modal.js.map +1 -1
- package/dist/components/mg-pagination2.js +12 -6
- package/dist/components/mg-pagination2.js.map +1 -1
- package/dist/components/mg-panel.js +15 -9
- package/dist/components/mg-panel.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/mg-popover2.js +2 -2
- package/dist/components/mg-popover2.js.map +1 -1
- package/dist/components/mg-skip-links.js +1 -1
- package/dist/components/mg-tabs.js +1 -1
- package/dist/components/mg-tabs.js.map +1 -1
- package/dist/components/mg-tag.js +1 -1
- package/dist/components/mg-tag.js.map +1 -1
- package/dist/components/mg-tooltip-content2.js +1 -1
- package/dist/components/mg-tooltip-content2.js.map +1 -1
- package/dist/components/mg-tooltip2.js +10 -3
- package/dist/components/mg-tooltip2.js.map +1 -1
- package/dist/esm/{index-bb17de92.js → index-c4ed16b2.js} +97 -81
- package/dist/esm/index-c4ed16b2.js.map +1 -0
- package/dist/esm/{index-ad78ece7.js → index-d43d1c5d.js} +23 -10
- package/dist/esm/index-d43d1c5d.js.map +1 -0
- package/dist/esm/loader.js +3 -3
- package/dist/esm/{mg-action-more_34.entry.js → mg-action-more_36.entry.js} +982 -731
- package/dist/esm/mg-action-more_36.entry.js.map +1 -0
- package/dist/esm/mg-components.js +4 -4
- package/dist/esm/mg-components.js.map +1 -1
- package/dist/esm/mg-loader.entry.js +3 -3
- package/dist/esm/mg-loader.entry.js.map +1 -1
- package/dist/mg-components/locales/en/messages.json +10 -3
- package/dist/mg-components/locales/fr/messages.json +10 -3
- 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-350454b9.js +2 -0
- package/dist/mg-components/p-350454b9.js.map +1 -0
- package/dist/mg-components/p-9cdd1bc9.entry.js +2 -0
- package/dist/mg-components/p-9cdd1bc9.entry.js.map +1 -0
- package/dist/mg-components/p-cf0b0988.js +3 -0
- package/dist/mg-components/p-cf0b0988.js.map +1 -0
- package/dist/mg-components/{p-d80b844d.entry.js → p-d4084a15.entry.js} +2 -2
- package/dist/mg-components/{p-d80b844d.entry.js.map → p-d4084a15.entry.js.map} +1 -1
- package/dist/types/components/atoms/mg-badge/mg-badge.d.ts +1 -1
- package/dist/types/components/atoms/mg-button/mg-button.d.ts +8 -5
- package/dist/types/components/atoms/mg-card/mg-card.d.ts +4 -1
- package/dist/types/components/atoms/mg-character-left/mg-character-left.d.ts +1 -1
- package/dist/types/components/atoms/mg-icon/mg-icon.conf.d.ts +5 -0
- package/dist/types/components/atoms/mg-icon/mg-icon.d.ts +3 -3
- package/dist/types/components/atoms/mg-input-title/mg-input-title.d.ts +5 -2
- package/dist/types/components/atoms/mg-tag/mg-tag.d.ts +5 -2
- package/dist/types/components/atoms/mg-tooltip/mg-tooltip-content/mg-tooltip-content.d.ts +3 -0
- package/dist/types/components/atoms/mg-tooltip/mg-tooltip.conf.d.ts +2 -1
- package/dist/types/components/atoms/mg-tooltip/mg-tooltip.d.ts +4 -0
- package/dist/types/components/molecules/inputs/mg-input/mg-input.conf.d.ts +35 -0
- package/dist/types/components/molecules/inputs/mg-input/mg-input.d.ts +145 -0
- package/dist/types/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox-paginated/mg-input-checkbox-paginated.d.ts +5 -5
- package/dist/types/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.conf.d.ts +3 -5
- package/dist/types/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.d.ts +13 -12
- package/dist/types/components/molecules/inputs/mg-input-date/mg-input-date.conf.d.ts +2 -1
- package/dist/types/components/molecules/inputs/mg-input-date/mg-input-date.d.ts +19 -6
- package/dist/types/components/molecules/inputs/mg-input-numeric/mg-input-numeric.d.ts +15 -9
- package/dist/types/components/molecules/inputs/mg-input-password/mg-input-password.d.ts +16 -5
- package/dist/types/components/molecules/inputs/mg-input-radio/mg-input-radio.d.ts +7 -3
- package/dist/types/components/molecules/inputs/mg-input-select/mg-input-select.d.ts +7 -4
- package/dist/types/components/molecules/inputs/mg-input-text/mg-input-text.d.ts +21 -12
- package/dist/types/components/molecules/inputs/mg-input-textarea/mg-input-textarea.d.ts +12 -9
- package/dist/types/components/molecules/inputs/mg-input-toggle/mg-input-toggle.d.ts +16 -12
- package/dist/types/components/molecules/menu/mg-menu/mg-menu.d.ts +4 -1
- package/dist/types/components/molecules/menu/mg-menu-item/mg-menu-item.conf.d.ts +8 -0
- package/dist/types/components/molecules/menu/mg-menu-item/mg-menu-item.d.ts +25 -5
- package/dist/types/components/molecules/mg-action-more/mg-action-more.conf.d.ts +7 -16
- package/dist/types/components/molecules/mg-action-more/mg-action-more.d.ts +9 -9
- package/dist/types/components/molecules/mg-form/mg-form.d.ts +3 -3
- package/dist/types/components/molecules/mg-item-more/mg-item-more.conf.d.ts +3 -12
- package/dist/types/components/molecules/mg-item-more/mg-item-more.d.ts +4 -3
- package/dist/types/components/molecules/mg-loader/mg-loader.d.ts +2 -2
- package/dist/types/components/molecules/mg-message/mg-message.d.ts +2 -2
- package/dist/types/components/molecules/mg-pagination/mg-pagination.d.ts +2 -2
- package/dist/types/components/molecules/mg-panel/mg-panel.d.ts +3 -3
- package/dist/types/components/molecules/mg-popover/mg-popover-content/mg-popover-content.d.ts +3 -0
- package/dist/types/components/molecules/mg-popover/mg-popover.d.ts +5 -1
- package/dist/types/components/molecules/mg-tabs/mg-tabs.d.ts +3 -0
- package/dist/types/components.d.ts +208 -92
- package/dist/types/locales/index.conf.d.ts +4 -0
- package/ide/intellij/web-types.json +260 -96
- package/ide/vscode/html-custom-data.json +2596 -1222
- package/package.json +24 -28
- package/dist/cjs/index-0a2783ee.js.map +0 -1
- package/dist/cjs/index-c585c382.js.map +0 -1
- package/dist/cjs/mg-action-more_34.cjs.entry.js.map +0 -1
- package/dist/cjs/mg-item-more.cjs.entry.js +0 -272
- package/dist/cjs/mg-item-more.cjs.entry.js.map +0 -1
- package/dist/cjs/mg-menu.conf-c291eee6.js +0 -18
- package/dist/cjs/mg-menu.conf-c291eee6.js.map +0 -1
- package/dist/collection/components/molecules/inputs/MgInput.conf.js +0 -14
- package/dist/collection/components/molecules/inputs/MgInput.conf.js.map +0 -1
- package/dist/collection/components/molecules/inputs/MgInput.js +0 -125
- package/dist/collection/components/molecules/inputs/MgInput.js.map +0 -1
- package/dist/collection/utils/playwright.e2e.test.utils.js +0 -100
- package/dist/collection/utils/playwright.e2e.test.utils.js.map +0 -1
- package/dist/components/MgInput.js +0 -155
- package/dist/components/MgInput.js.map +0 -1
- package/dist/components/mg-menu.conf.js +0 -16
- package/dist/components/mg-menu.conf.js.map +0 -1
- package/dist/components/mg-menu2.js +0 -202
- package/dist/components/mg-menu2.js.map +0 -1
- package/dist/esm/index-ad78ece7.js.map +0 -1
- package/dist/esm/index-bb17de92.js.map +0 -1
- package/dist/esm/mg-action-more_34.entry.js.map +0 -1
- package/dist/esm/mg-item-more.entry.js +0 -268
- package/dist/esm/mg-item-more.entry.js.map +0 -1
- package/dist/esm/mg-menu.conf-9609bcb2.js +0 -16
- package/dist/esm/mg-menu.conf-9609bcb2.js.map +0 -1
- package/dist/mg-components/p-2db8355d.entry.js +0 -2
- package/dist/mg-components/p-2db8355d.entry.js.map +0 -1
- package/dist/mg-components/p-95653110.entry.js +0 -2
- package/dist/mg-components/p-95653110.entry.js.map +0 -1
- package/dist/mg-components/p-bc62d75e.js +0 -3
- package/dist/mg-components/p-bc62d75e.js.map +0 -1
- package/dist/mg-components/p-d41aa78b.js +0 -2
- package/dist/mg-components/p-d41aa78b.js.map +0 -1
- package/dist/mg-components/p-fe935e54.js +0 -2
- package/dist/mg-components/p-fe935e54.js.map +0 -1
- package/dist/types/components/molecules/inputs/MgInput.conf.d.ts +0 -46
- package/dist/types/components/molecules/inputs/MgInput.d.ts +0 -13
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
import { h } from '@stencil/core/internal/client';
|
|
2
|
-
import { B as Be } from './index.es.js';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Possible input width
|
|
6
|
-
*/
|
|
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 = {}));
|
|
16
|
-
const tooltipPositions = ['input', 'label'];
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Apply in all input child node the aria-describedby attribute
|
|
20
|
-
* @param children - Represent scoped elements
|
|
21
|
-
* @param ariaDescribedbyIDs - List of IDs
|
|
22
|
-
* @param utils - Stencil.js utils
|
|
23
|
-
* @returns Children with aria-describedby attribute
|
|
24
|
-
*/
|
|
25
|
-
const applyAriadescribedBy = (children, ariaDescribedbyIDs, utils) => utils.map(children, child => {
|
|
26
|
-
if (['input', 'select', 'textarea'].includes(child.vtag)) {
|
|
27
|
-
return Object.assign(Object.assign({}, child), { vattrs: Object.assign(Object.assign({}, child.vattrs), { 'aria-describedby': [...ariaDescribedbyIDs].join(' ') }) });
|
|
28
|
-
}
|
|
29
|
-
// we recursively apply ariadescribedBy attributes to child input nodes if exists
|
|
30
|
-
if (child.vchildren === null)
|
|
31
|
-
return Object.assign({}, child);
|
|
32
|
-
return Object.assign(Object.assign({}, child), { vchildren: applyAriadescribedBy(child.vchildren, ariaDescribedbyIDs, utils) });
|
|
33
|
-
});
|
|
34
|
-
/**
|
|
35
|
-
* Add classes based on props
|
|
36
|
-
* @param props - MgInput Interface Props
|
|
37
|
-
*/
|
|
38
|
-
const manageClasses = (props) => {
|
|
39
|
-
props.classCollection.add('mg-c-input');
|
|
40
|
-
if (props.labelOnTop)
|
|
41
|
-
props.classCollection.add('mg-c-input--label-on-top');
|
|
42
|
-
else
|
|
43
|
-
props.classCollection.delete('mg-c-input--label-on-top');
|
|
44
|
-
if (props.readonly)
|
|
45
|
-
props.classCollection.add('mg-c-input--readonly');
|
|
46
|
-
else
|
|
47
|
-
props.classCollection.delete('mg-c-input--readonly');
|
|
48
|
-
widths.forEach(width => {
|
|
49
|
-
props.classCollection.delete(`mg-c-input--width-${width}`);
|
|
50
|
-
});
|
|
51
|
-
if (props.mgWidth !== undefined)
|
|
52
|
-
props.classCollection.add(`mg-c-input--width-${props.mgWidth}`);
|
|
53
|
-
};
|
|
54
|
-
/**
|
|
55
|
-
* Check props configuration
|
|
56
|
-
* @param props - MgInput Interface Props
|
|
57
|
-
*/
|
|
58
|
-
const checkPropsConfig = (props) => {
|
|
59
|
-
if (!Be(props.identifier)) {
|
|
60
|
-
throw new Error('<mg-input> prop "identifier" is required.');
|
|
61
|
-
}
|
|
62
|
-
if (!Be(props.label)) {
|
|
63
|
-
throw new Error('<mg-input> prop "label" is required.');
|
|
64
|
-
}
|
|
65
|
-
if (props.labelOnTop && props.labelHide) {
|
|
66
|
-
throw new Error('<mg-input> prop "labelOnTop" must not be paired with the prop "labelHide".');
|
|
67
|
-
}
|
|
68
|
-
if (!tooltipPositions.includes(props.tooltipPosition)) {
|
|
69
|
-
throw new Error(`<mg-input> prop "tooltipPosition" must be one of: ${tooltipPositions.join(', ')}`);
|
|
70
|
-
}
|
|
71
|
-
};
|
|
72
|
-
/**
|
|
73
|
-
* Get tagname
|
|
74
|
-
* @param isFieldset - is fieldset
|
|
75
|
-
* @returns tag name
|
|
76
|
-
*/
|
|
77
|
-
const getTagName = (isFieldset, readOnly) => (!isFieldset || readOnly ? 'div' : 'fieldset');
|
|
78
|
-
/**
|
|
79
|
-
* MgInput Interface
|
|
80
|
-
*/
|
|
81
|
-
/**
|
|
82
|
-
* Get input template
|
|
83
|
-
* @param props - MgInput Interface Props
|
|
84
|
-
* @param children - Represent scoped elements
|
|
85
|
-
* @param utils - Stencil.js utils
|
|
86
|
-
* @returns input template
|
|
87
|
-
*/
|
|
88
|
-
const MgInput = (props, children, utils) => {
|
|
89
|
-
/**
|
|
90
|
-
* Check props config
|
|
91
|
-
*/
|
|
92
|
-
checkPropsConfig(props);
|
|
93
|
-
/**
|
|
94
|
-
* Set readonly value
|
|
95
|
-
*/
|
|
96
|
-
if (props.readonlyValue === undefined)
|
|
97
|
-
props.readonlyValue = props.value;
|
|
98
|
-
/**
|
|
99
|
-
* Component classes
|
|
100
|
-
*/
|
|
101
|
-
manageClasses(props);
|
|
102
|
-
/**
|
|
103
|
-
* a11y IDs
|
|
104
|
-
*/
|
|
105
|
-
const ariaDescribedbyIDs = new Set(props.ariaDescribedbyIDs);
|
|
106
|
-
// Help text
|
|
107
|
-
const helpTextId = `${props.identifier}-help-text`;
|
|
108
|
-
if (typeof props.helpText === 'string' && props.helpText !== '') {
|
|
109
|
-
ariaDescribedbyIDs.add(helpTextId);
|
|
110
|
-
}
|
|
111
|
-
// Error Message
|
|
112
|
-
const helpTextErrorId = `${props.identifier}-error`;
|
|
113
|
-
if (typeof props.errorMessage === 'string' && props.errorMessage !== '') {
|
|
114
|
-
ariaDescribedbyIDs.add(helpTextErrorId);
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Return template
|
|
118
|
-
*
|
|
119
|
-
* +--------+---------+--------------+---------+
|
|
120
|
-
* | label | tooltip | input | tooltip |
|
|
121
|
-
* |--------+---------+--------------+---------+
|
|
122
|
-
* | | nb Char Left |
|
|
123
|
-
* | +------------------------+
|
|
124
|
-
* | | Help Text |
|
|
125
|
-
* | +------------------------+
|
|
126
|
-
* | | Error |
|
|
127
|
-
* +------------------+------------------------+
|
|
128
|
-
*
|
|
129
|
-
* Error message is based on this aria method: https://www.w3.org/WAI/tutorials/forms/notifications/#on-focus-change
|
|
130
|
-
*/
|
|
131
|
-
const TagName = getTagName(props.isFieldset, props.readonly);
|
|
132
|
-
/**
|
|
133
|
-
* Get tooltip node
|
|
134
|
-
* @returns mg-tooltip
|
|
135
|
-
*/
|
|
136
|
-
const getTooltip = () => (h("mg-tooltip", { identifier: `${props.identifier}-tooltip`, message: props.tooltip },
|
|
137
|
-
h("mg-icon", { icon: "info-circle" })));
|
|
138
|
-
return (h(TagName, { class: props.classCollection.join() },
|
|
139
|
-
h("div", { class: { 'mg-c-input__title': true, 'mg-u-visually-hidden': props.labelHide } },
|
|
140
|
-
h("mg-input-title", { identifier: props.identifier, readonly: props.readonly, required: props.required && !props.disabled && !props.readonly, "is-legend": props.isFieldset }, props.label),
|
|
141
|
-
props.tooltip && !props.readonly && (props.tooltipPosition === 'label' || props.labelOnTop) && !props.labelHide && getTooltip()),
|
|
142
|
-
props.readonly ? (h("div", { class: "mg-c-input__input-container" },
|
|
143
|
-
Array.isArray(props.readonlyValue) ? (h("ul", null, props.readonlyValue.map(value => (h("li", { key: value },
|
|
144
|
-
h("strong", null, value)))))) : (h("strong", null, props.readonlyValue)),
|
|
145
|
-
children.filter(child => Object.values(child).includes('append-input')))) : (h("div", { class: "mg-c-input__input-container" },
|
|
146
|
-
h("div", { class: { 'mg-c-input__input': true, 'mg-c-input__input--has-error': props.errorMessage !== undefined } },
|
|
147
|
-
applyAriadescribedBy(children, ariaDescribedbyIDs, utils),
|
|
148
|
-
props.tooltip && !props.readonly && !props.labelOnTop && (props.tooltipPosition === 'input' || props.labelHide) && getTooltip()),
|
|
149
|
-
props.helpText && h("div", { id: helpTextId, class: "mg-c-input__help-text", innerHTML: props.helpText }),
|
|
150
|
-
props.errorMessage && !props.readonly && !props.disabled && (h("div", { id: helpTextErrorId, class: "mg-c-input__error", innerHTML: props.errorMessage, "aria-live": "assertive" }))))));
|
|
151
|
-
};
|
|
152
|
-
|
|
153
|
-
export { Handler as H, MgInput as M };
|
|
154
|
-
|
|
155
|
-
//# sourceMappingURL=MgInput.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"file":"MgInput.js","mappings":";;;AAgCA;;;AAGO,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,CAAU,CAAC;AAkBlD;;;IAGY;AAAZ,WAAY,OAAO;IACjB,wBAAa,CAAA;IACb,0BAAe,CAAA;AACjB,CAAC,EAHW,OAAO,KAAP,OAAO,QAGlB;AAEM,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,OAAO,CAAU;;ACzD3D;;;;;;;AAOA,MAAM,oBAAoB,GAAG,CAAC,QAAiB,EAAE,kBAA+B,EAAE,KAA0B,KAC1G,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK;IACvB,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAc,CAAC,EAAE;QAClE,uCACK,KAAK,KACR,MAAM,kCACD,KAAK,CAAC,MAAM,KACf,kBAAkB,EAAE,CAAC,GAAG,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAEvD;KACH;;IAGD,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI;QAAE,yBAAY,KAAK,EAAG;IAClD,uCACK,KAAK,KACR,SAAS,EAAE,oBAAoB,CAAC,KAAK,CAAC,SAAS,EAAE,kBAAkB,EAAE,KAAK,CAAC,IAC3E;AACJ,CAAC,CAAC,CAAC;AAEL;;;;AAIA,MAAM,aAAa,GAAG,CAAC,KAAmB;IACxC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAExC,IAAI,KAAK,CAAC,UAAU;QAAE,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;;QACvE,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC;IAE9D,IAAI,KAAK,CAAC,QAAQ;QAAE,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;;QACjE,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAE1D,MAAM,CAAC,OAAO,CAAC,KAAK;QAClB,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,qBAAqB,KAAK,EAAE,CAAC,CAAC;KAC5D,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;QAAE,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,qBAAqB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;AACnG,CAAC,CAAC;AAEF;;;;AAIA,MAAM,gBAAgB,GAAG,CAAC,KAAmB;IAC3C,IAAI,CAACA,EAAa,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE;QACpC,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;KAC9D;IACD,IAAI,CAACA,EAAa,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;QAC/B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;KACzD;IACD,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,SAAS,EAAE;QACvC,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC,CAAC;KAC/F;IACD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE;QACrD,MAAM,IAAI,KAAK,CAAC,qDAAqD,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KACrG;AACH,CAAC,CAAC;AAEF;;;;;AAKA,MAAM,UAAU,GAAG,CAAC,UAAsC,EAAE,QAAkC,MAAc,CAAC,UAAU,IAAI,QAAQ,GAAG,KAAK,GAAG,UAAU,CAAC,CAAC;AAE1J;;;AAIA;;;;;;;MAOa,OAAO,GAAsC,CAAC,KAAmB,EAAE,QAAiB,EAAE,KAA0B;;;;IAI3H,gBAAgB,CAAC,KAAK,CAAC,CAAC;;;;IAKxB,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS;QAAE,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC;;;;IAKzE,aAAa,CAAC,KAAK,CAAC,CAAC;;;;IAKrB,MAAM,kBAAkB,GAAgB,IAAI,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;;IAG1E,MAAM,UAAU,GAAG,GAAG,KAAK,CAAC,UAAU,YAAY,CAAC;IACnD,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,EAAE,EAAE;QAC/D,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;KACpC;;IAGD,MAAM,eAAe,GAAG,GAAG,KAAK,CAAC,UAAU,QAAQ,CAAC;IACpD,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,IAAI,KAAK,CAAC,YAAY,KAAK,EAAE,EAAE;QACvE,kBAAkB,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;KACzC;;;;;;;;;;;;;;;;IAkBD,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;;;;;IAM7D,MAAM,UAAU,GAAG,OACjB,kBAAY,UAAU,EAAE,GAAG,KAAK,CAAC,UAAU,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO;QAC3E,eAAS,IAAI,EAAC,aAAa,GAAW,CAC3B,CACd,CAAC;IAEF,QACE,EAAC,OAAO,IAAC,KAAK,EAAE,KAAK,CAAC,eAAe,CAAC,IAAI,EAAE;QAC1C,WAAK,KAAK,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,CAAC,SAAS,EAAE;YAChF,sBAAgB,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,eAAa,KAAK,CAAC,UAAU,IAChK,KAAK,CAAC,KAAK,CACG;YAChB,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,eAAe,KAAK,OAAO,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,UAAU,EAAE,CAC5H;QACL,KAAK,CAAC,QAAQ,IACb,WAAK,KAAK,EAAC,6BAA6B;YACrC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,IACjC,cACG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,KAC5B,UAAI,GAAG,EAAE,KAAK;gBACZ,kBAAS,KAAK,CAAU,CACrB,CACN,CAAC,CACC,KAEL,kBAAS,KAAK,CAAC,aAAa,CAAU,CACvC;YACA,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CACpE,KAEN,WAAK,KAAK,EAAC,6BAA6B;YACtC,WAAK,KAAK,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,8BAA8B,EAAE,KAAK,CAAC,YAAY,KAAK,SAAS,EAAE;gBACxG,oBAAoB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,KAAK,CAAC;gBACzD,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,UAAU,KAAK,KAAK,CAAC,eAAe,KAAK,OAAO,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,UAAU,EAAE,CAC5H;YACL,KAAK,CAAC,QAAQ,IAAI,WAAK,EAAE,EAAE,UAAU,EAAE,KAAK,EAAC,uBAAuB,EAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,GAAQ;YACtG,KAAK,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,KACvD,WAAK,EAAE,EAAE,eAAe,EAAE,KAAK,EAAC,mBAAmB,EAAC,SAAS,EAAE,KAAK,CAAC,YAAY,eAAY,WAAW,GAAO,CAChH,CACG,CACP,CACO,EACV;AACJ;;;;","names":["isValidString"],"sources":["src/components/molecules/inputs/MgInput.conf.ts","src/components/molecules/inputs/MgInput.tsx"],"sourcesContent":["import type { MgInputTitle } from '../../atoms/mg-input-title/mg-input-title';\nimport type { ClassList } from '@mgdis/stencil-helpers';\n\n/**\n * MgInput component props\n */\nexport interface MgInputProps {\n // Global\n identifier: string;\n classCollection: ClassList;\n // Label\n label: string;\n labelOnTop: boolean;\n labelHide: boolean;\n isFieldset: MgInputTitle['isLegend'];\n // Input\n value: string;\n readonlyValue: string | string[];\n required: boolean;\n readonly: boolean;\n mgWidth: Width;\n disabled: boolean;\n // Tooltip\n tooltip: string;\n tooltipPosition: TooltipPosition;\n // Help Text\n helpText: string;\n // Error Message\n errorMessage: string;\n // ariaDescribedbyIDs\n ariaDescribedbyIDs: string[];\n}\n/**\n * Possible input width\n */\nexport const widths = [2, 4, 16, 'full'] as const;\n\nexport type Width = (typeof widths)[number];\n\n/**\n * Possible Input types\n */\nexport type HTMLMgInputsElement =\n | HTMLMgInputCheckboxElement\n | HTMLMgInputDateElement\n | HTMLMgInputNumericElement\n | HTMLMgInputPasswordElement\n | HTMLMgInputRadioElement\n | HTMLMgInputSelectElement\n | HTMLMgInputTextElement\n | HTMLMgInputTextareaElement\n | (HTMLMgInputToggleElement & { required: true; invalid: false; displayError: () => void });\n\n/**\n * Available handlers\n */\nexport enum Handler {\n BLUR = 'blur',\n FOCUS = 'focus',\n}\n\nexport const tooltipPositions = ['input', 'label'] as const;\n\nexport type TooltipPosition = (typeof tooltipPositions)[number];\n","import { FunctionalComponent, h, VNode, FunctionalUtilities } from '@stencil/core';\nimport { widths, tooltipPositions, type MgInputProps } from './MgInput.conf';\nimport { isValidString } from '@mgdis/stencil-helpers';\n\n/**\n * Apply in all input child node the aria-describedby attribute\n * @param children - Represent scoped elements\n * @param ariaDescribedbyIDs - List of IDs\n * @param utils - Stencil.js utils\n * @returns Children with aria-describedby attribute\n */\nconst applyAriadescribedBy = (children: VNode[], ariaDescribedbyIDs: Set<string>, utils: FunctionalUtilities): VNode[] =>\n utils.map(children, child => {\n if (['input', 'select', 'textarea'].includes(child.vtag as string)) {\n return {\n ...child,\n vattrs: {\n ...child.vattrs,\n 'aria-describedby': [...ariaDescribedbyIDs].join(' '),\n },\n };\n }\n\n // we recursively apply ariadescribedBy attributes to child input nodes if exists\n if (child.vchildren === null) return { ...child };\n return {\n ...child,\n vchildren: applyAriadescribedBy(child.vchildren, ariaDescribedbyIDs, utils),\n };\n });\n\n/**\n * Add classes based on props\n * @param props - MgInput Interface Props\n */\nconst manageClasses = (props: MgInputProps): void => {\n props.classCollection.add('mg-c-input');\n\n if (props.labelOnTop) props.classCollection.add('mg-c-input--label-on-top');\n else props.classCollection.delete('mg-c-input--label-on-top');\n\n if (props.readonly) props.classCollection.add('mg-c-input--readonly');\n else props.classCollection.delete('mg-c-input--readonly');\n\n widths.forEach(width => {\n props.classCollection.delete(`mg-c-input--width-${width}`);\n });\n if (props.mgWidth !== undefined) props.classCollection.add(`mg-c-input--width-${props.mgWidth}`);\n};\n\n/**\n * Check props configuration\n * @param props - MgInput Interface Props\n */\nconst checkPropsConfig = (props: MgInputProps): void => {\n if (!isValidString(props.identifier)) {\n throw new Error('<mg-input> prop \"identifier\" is required.');\n }\n if (!isValidString(props.label)) {\n throw new Error('<mg-input> prop \"label\" is required.');\n }\n if (props.labelOnTop && props.labelHide) {\n throw new Error('<mg-input> prop \"labelOnTop\" must not be paired with the prop \"labelHide\".');\n }\n if (!tooltipPositions.includes(props.tooltipPosition)) {\n throw new Error(`<mg-input> prop \"tooltipPosition\" must be one of: ${tooltipPositions.join(', ')}`);\n }\n};\n\n/**\n * Get tagname\n * @param isFieldset - is fieldset\n * @returns tag name\n */\nconst getTagName = (isFieldset: MgInputProps['isFieldset'], readOnly: MgInputProps['readonly']): string => (!isFieldset || readOnly ? 'div' : 'fieldset');\n\n/**\n * MgInput Interface\n */\n\n/**\n * Get input template\n * @param props - MgInput Interface Props\n * @param children - Represent scoped elements\n * @param utils - Stencil.js utils\n * @returns input template\n */\nexport const MgInput: FunctionalComponent<MgInputProps> = (props: MgInputProps, children: VNode[], utils: FunctionalUtilities): VNode[] => {\n /**\n * Check props config\n */\n checkPropsConfig(props);\n\n /**\n * Set readonly value\n */\n if (props.readonlyValue === undefined) props.readonlyValue = props.value;\n\n /**\n * Component classes\n */\n manageClasses(props);\n\n /**\n * a11y IDs\n */\n const ariaDescribedbyIDs: Set<string> = new Set(props.ariaDescribedbyIDs);\n\n // Help text\n const helpTextId = `${props.identifier}-help-text`;\n if (typeof props.helpText === 'string' && props.helpText !== '') {\n ariaDescribedbyIDs.add(helpTextId);\n }\n\n // Error Message\n const helpTextErrorId = `${props.identifier}-error`;\n if (typeof props.errorMessage === 'string' && props.errorMessage !== '') {\n ariaDescribedbyIDs.add(helpTextErrorId);\n }\n\n /**\n * Return template\n *\n * +--------+---------+--------------+---------+\n * | label | tooltip | input | tooltip |\n * |--------+---------+--------------+---------+\n * | | nb Char Left |\n * | +------------------------+\n * | | Help Text |\n * | +------------------------+\n * | | Error |\n * +------------------+------------------------+\n *\n * Error message is based on this aria method: https://www.w3.org/WAI/tutorials/forms/notifications/#on-focus-change\n */\n\n const TagName = getTagName(props.isFieldset, props.readonly);\n\n /**\n * Get tooltip node\n * @returns mg-tooltip\n */\n const getTooltip = (): VNode[] => (\n <mg-tooltip identifier={`${props.identifier}-tooltip`} message={props.tooltip}>\n <mg-icon icon=\"info-circle\"></mg-icon>\n </mg-tooltip>\n );\n\n return (\n <TagName class={props.classCollection.join()}>\n <div class={{ 'mg-c-input__title': true, 'mg-u-visually-hidden': props.labelHide }}>\n <mg-input-title identifier={props.identifier} readonly={props.readonly} required={props.required && !props.disabled && !props.readonly} is-legend={props.isFieldset}>\n {props.label}\n </mg-input-title>\n {props.tooltip && !props.readonly && (props.tooltipPosition === 'label' || props.labelOnTop) && !props.labelHide && getTooltip()}\n </div>\n {props.readonly ? (\n <div class=\"mg-c-input__input-container\">\n {Array.isArray(props.readonlyValue) ? (\n <ul>\n {props.readonlyValue.map(value => (\n <li key={value}>\n <strong>{value}</strong>\n </li>\n ))}\n </ul>\n ) : (\n <strong>{props.readonlyValue}</strong>\n )}\n {children.filter(child => Object.values(child).includes('append-input'))}\n </div>\n ) : (\n <div class=\"mg-c-input__input-container\">\n <div class={{ 'mg-c-input__input': true, 'mg-c-input__input--has-error': props.errorMessage !== undefined }}>\n {applyAriadescribedBy(children, ariaDescribedbyIDs, utils)}\n {props.tooltip && !props.readonly && !props.labelOnTop && (props.tooltipPosition === 'input' || props.labelHide) && getTooltip()}\n </div>\n {props.helpText && <div id={helpTextId} class=\"mg-c-input__help-text\" innerHTML={props.helpText}></div>}\n {props.errorMessage && !props.readonly && !props.disabled && (\n <div id={helpTextErrorId} class=\"mg-c-input__error\" innerHTML={props.errorMessage} aria-live=\"assertive\"></div>\n )}\n </div>\n )}\n </TagName>\n );\n};\n"],"version":3}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Menu direction type
|
|
3
|
-
*/
|
|
4
|
-
var Direction;
|
|
5
|
-
(function (Direction) {
|
|
6
|
-
Direction["VERTICAL"] = "vertical";
|
|
7
|
-
Direction["HORIZONTAL"] = "horizontal";
|
|
8
|
-
})(Direction || (Direction = {}));
|
|
9
|
-
/**
|
|
10
|
-
* List of all possibles sizes
|
|
11
|
-
*/
|
|
12
|
-
const sizes = ['regular', 'medium', 'large'];
|
|
13
|
-
|
|
14
|
-
export { Direction as D, sizes as s };
|
|
15
|
-
|
|
16
|
-
//# sourceMappingURL=mg-menu.conf.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"file":"mg-menu.conf.js","mappings":"AAEA;;;IAGY;AAAZ,WAAY,SAAS;IACnB,kCAAqB,CAAA;IACrB,sCAAyB,CAAA;AAC3B,CAAC,EAHW,SAAS,KAAT,SAAS,QAGpB;AAOD;;;MAGa,KAAK,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO;;;;","names":[],"sources":["src/components/molecules/menu/mg-menu/mg-menu.conf.ts"],"sourcesContent":["import { MgItemMore } from '../../mg-item-more/mg-item-more';\n\n/**\n * Menu direction type\n */\nexport enum Direction {\n VERTICAL = 'vertical',\n HORIZONTAL = 'horizontal',\n}\n\n/**\n * ItemMore prop type\n */\nexport type ItemMoreType = Pick<MgItemMore, 'icon' | 'slotlabel' | 'size'>;\n\n/**\n * List of all possibles sizes\n */\nexport const sizes = ['regular', 'medium', 'large'] as const;\n\n/**\n * item Size from sizes\n */\nexport type MenuSizeType = (typeof sizes)[number];\n"],"version":3}
|
|
@@ -1,202 +0,0 @@
|
|
|
1
|
-
import { proxyCustomElement, HTMLElement, h, Host } from '@stencil/core/internal/client';
|
|
2
|
-
import { D as Direction, s as sizes } from './mg-menu.conf.js';
|
|
3
|
-
|
|
4
|
-
const mgMenuCss = ".mg-u-visually-hidden{position:absolute !important;overflow:hidden !important;width:.1rem !important;height:.1rem !important;padding:0 !important;border:0 !important;margin:-0.1rem !important;clip:rect(0.1rem, 0.1rem, 0.1rem, 0.1rem) !important;clip-path:inset(50%) !important;white-space:nowrap !important}*:focus:not(:focus-visible){outline:none}@media (prefers-reduced-motion){*{animation:none !important;transition:none !important}}:host{display:flex;background-color:hsl(var(--mg-menu-background-color-hsl, var(--color-light)))}:host([direction=vertical]){height:100%;flex-direction:column;overflow-y:auto}";
|
|
5
|
-
const MgMenuStyle0 = mgMenuCss;
|
|
6
|
-
|
|
7
|
-
const MgMenu = /*@__PURE__*/ proxyCustomElement(class MgMenu extends HTMLElement {
|
|
8
|
-
constructor() {
|
|
9
|
-
super();
|
|
10
|
-
this.__registerHost();
|
|
11
|
-
this.__attachShadow();
|
|
12
|
-
/************
|
|
13
|
-
* Internal *
|
|
14
|
-
************/
|
|
15
|
-
this.name = 'mg-menu';
|
|
16
|
-
this.menuItems = [];
|
|
17
|
-
this.focusedMenuItem = 0;
|
|
18
|
-
/*************
|
|
19
|
-
* Methods *
|
|
20
|
-
*************/
|
|
21
|
-
/**
|
|
22
|
-
* Close matching menu-item
|
|
23
|
-
* @param item - menu-item to close
|
|
24
|
-
* @param condition - addionnal condition
|
|
25
|
-
*/
|
|
26
|
-
this.closeMenuItem = (item, condition) => {
|
|
27
|
-
if (!this.isChildMenu && condition) {
|
|
28
|
-
item.expanded = false;
|
|
29
|
-
}
|
|
30
|
-
};
|
|
31
|
-
/**
|
|
32
|
-
* get mg-item-more element
|
|
33
|
-
* @returns mg-item-more element
|
|
34
|
-
*/
|
|
35
|
-
this.getItemMore = () => this.element.querySelector('mg-item-more');
|
|
36
|
-
/**
|
|
37
|
-
* get mg-item-more child mg-menu-item element
|
|
38
|
-
* @returns mg-menu-item element
|
|
39
|
-
*/
|
|
40
|
-
this.getItemMoreMenuItem = () => { var _a, _b; return (_b = (_a = this.getItemMore()) === null || _a === void 0 ? void 0 : _a.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('mg-menu-item'); };
|
|
41
|
-
/**
|
|
42
|
-
* Set item listend
|
|
43
|
-
* @param item - mg-menu-item element
|
|
44
|
-
* @param index - number
|
|
45
|
-
*/
|
|
46
|
-
this.setItemListener = (item, index) => {
|
|
47
|
-
['click', 'focus'].forEach(trigger => {
|
|
48
|
-
(item.shadowRoot.querySelector('button') || item.shadowRoot.querySelector('a')).addEventListener(trigger, () => {
|
|
49
|
-
this.focusedMenuItem = index;
|
|
50
|
-
// reset expanded on previous active menu item
|
|
51
|
-
(this.getItemMoreMenuItem() ? [...this.menuItems, this.getItemMoreMenuItem()] : this.menuItems).forEach((item, index) => {
|
|
52
|
-
this.closeMenuItem(item, index !== this.focusedMenuItem);
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
};
|
|
57
|
-
/**
|
|
58
|
-
* Store menu-items on component init and add listeners
|
|
59
|
-
*/
|
|
60
|
-
this.initMenuItemsListeners = () => {
|
|
61
|
-
// add listeners on menu item and edit index
|
|
62
|
-
this.menuItems.forEach((item, index) => {
|
|
63
|
-
this.setItemListener(item, index);
|
|
64
|
-
});
|
|
65
|
-
};
|
|
66
|
-
/**
|
|
67
|
-
* Handle item-loaded event on mg-item-more element
|
|
68
|
-
*/
|
|
69
|
-
this.handleItemLoaded = () => {
|
|
70
|
-
this.setItemListener(this.getItemMoreMenuItem(), this.menuItems.length);
|
|
71
|
-
};
|
|
72
|
-
/**
|
|
73
|
-
* render mg-item-more
|
|
74
|
-
*/
|
|
75
|
-
this.renderMgItemMore = () => {
|
|
76
|
-
// /!\ externalise item tag name to get a string type and bypass type checking when value is used in next createElement
|
|
77
|
-
// by doing this we prevent stencil to generate a circular dependencies graph at build time with mg-item-more component.
|
|
78
|
-
const item = 'mg-item-more';
|
|
79
|
-
const mgItemMore = document.createElement(item);
|
|
80
|
-
Object.assign(mgItemMore, this.itemmore);
|
|
81
|
-
mgItemMore.addEventListener('item-loaded', this.handleItemLoaded);
|
|
82
|
-
this.element.appendChild(mgItemMore);
|
|
83
|
-
};
|
|
84
|
-
this.label = undefined;
|
|
85
|
-
this.direction = Direction.HORIZONTAL;
|
|
86
|
-
this.itemmore = undefined;
|
|
87
|
-
this.size = 'regular';
|
|
88
|
-
this.isChildMenu = undefined;
|
|
89
|
-
}
|
|
90
|
-
validateLabel(newValue) {
|
|
91
|
-
if (newValue === undefined) {
|
|
92
|
-
throw new Error(`<${this.name}> prop "label" is required.`);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
validateDirection(newValue) {
|
|
96
|
-
if (![Direction.VERTICAL, Direction.HORIZONTAL].includes(newValue)) {
|
|
97
|
-
throw new Error(`<${this.name}> prop "direction" must be one of: ${Direction.HORIZONTAL}, ${Direction.VERTICAL}.`);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
validateItemMore(newValue) {
|
|
101
|
-
if (newValue !== undefined && this.direction !== Direction.HORIZONTAL) {
|
|
102
|
-
throw new Error(`<${this.name}> prop "itemmore" must be paired with direction ${Direction.HORIZONTAL}.`);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
validateSize(newValue) {
|
|
106
|
-
if (!sizes.includes(newValue)) {
|
|
107
|
-
throw new Error(`<${this.name}> prop "size" must be one of: ${sizes.join(', ')}.`);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
/*************
|
|
111
|
-
* Lifecycle *
|
|
112
|
-
*************/
|
|
113
|
-
/**
|
|
114
|
-
* Validate props
|
|
115
|
-
*/
|
|
116
|
-
componentWillLoad() {
|
|
117
|
-
this.validateDirection(this.direction);
|
|
118
|
-
this.validateLabel(this.label);
|
|
119
|
-
this.validateItemMore(this.itemmore);
|
|
120
|
-
this.validateSize(this.size);
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Check if component slots configuration
|
|
124
|
-
* @returns timeout
|
|
125
|
-
*/
|
|
126
|
-
componentDidLoad() {
|
|
127
|
-
// update props and states after componentDidLoad hook
|
|
128
|
-
// return a promise to process action only in the FIRST render().
|
|
129
|
-
// https://stenciljs.com/docs/component-lifecycle#componentwillload
|
|
130
|
-
return setTimeout(() => {
|
|
131
|
-
// store all menu-items
|
|
132
|
-
this.menuItems = Array.from(this.element.children).filter(child => child.nodeName === 'MG-MENU-ITEM');
|
|
133
|
-
this.isChildMenu = this.element.closest('mg-menu-item') !== null;
|
|
134
|
-
// add mg-item-more to manage OverflowBehavior
|
|
135
|
-
if (this.direction === Direction.HORIZONTAL && !this.isChildMenu)
|
|
136
|
-
this.renderMgItemMore();
|
|
137
|
-
// use mutation observer to improve reactivity
|
|
138
|
-
new MutationObserver(entries => {
|
|
139
|
-
const mgItemMore = this.getItemMore();
|
|
140
|
-
// prevent infinit loop by exclude mg-item-more deletion entry
|
|
141
|
-
if (entries.some(entry => entry.type === 'childList' && Array.from(entry.removedNodes).some(node => node.nodeName === 'MG-ITEM-MORE')))
|
|
142
|
-
return;
|
|
143
|
-
else if (mgItemMore !== null) {
|
|
144
|
-
// render a new mg-item-more
|
|
145
|
-
mgItemMore.remove();
|
|
146
|
-
mgItemMore.removeEventListener('item-loaded', this.handleItemLoaded);
|
|
147
|
-
this.renderMgItemMore();
|
|
148
|
-
}
|
|
149
|
-
}).observe(this.element, { childList: true, characterData: true, subtree: true });
|
|
150
|
-
}, 0);
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Add listeners to items
|
|
154
|
-
*/
|
|
155
|
-
componentDidRender() {
|
|
156
|
-
this.initMenuItemsListeners();
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* Render
|
|
160
|
-
* @returns HTML Element
|
|
161
|
-
*/
|
|
162
|
-
render() {
|
|
163
|
-
return (h(Host, { key: '22c0f16663ac432526aef9d0ec1c3d9152b8ca3a', role: "list", "aria-label": this.label }, h("slot", { key: 'de77bd6471725518cf14b9a75fb513a3d65a8033' })));
|
|
164
|
-
}
|
|
165
|
-
get element() { return this; }
|
|
166
|
-
static get watchers() { return {
|
|
167
|
-
"label": ["validateLabel"],
|
|
168
|
-
"direction": ["validateDirection"],
|
|
169
|
-
"itemmore": ["validateItemMore"],
|
|
170
|
-
"size": ["validateSize"]
|
|
171
|
-
}; }
|
|
172
|
-
static get style() { return MgMenuStyle0; }
|
|
173
|
-
}, [1, "mg-menu", {
|
|
174
|
-
"label": [1],
|
|
175
|
-
"direction": [513],
|
|
176
|
-
"itemmore": [16],
|
|
177
|
-
"size": [1],
|
|
178
|
-
"isChildMenu": [32]
|
|
179
|
-
}, undefined, {
|
|
180
|
-
"label": ["validateLabel"],
|
|
181
|
-
"direction": ["validateDirection"],
|
|
182
|
-
"itemmore": ["validateItemMore"],
|
|
183
|
-
"size": ["validateSize"]
|
|
184
|
-
}]);
|
|
185
|
-
function defineCustomElement() {
|
|
186
|
-
if (typeof customElements === "undefined") {
|
|
187
|
-
return;
|
|
188
|
-
}
|
|
189
|
-
const components = ["mg-menu"];
|
|
190
|
-
components.forEach(tagName => { switch (tagName) {
|
|
191
|
-
case "mg-menu":
|
|
192
|
-
if (!customElements.get(tagName)) {
|
|
193
|
-
customElements.define(tagName, MgMenu);
|
|
194
|
-
}
|
|
195
|
-
break;
|
|
196
|
-
} });
|
|
197
|
-
}
|
|
198
|
-
defineCustomElement();
|
|
199
|
-
|
|
200
|
-
export { MgMenu as M, defineCustomElement as d };
|
|
201
|
-
|
|
202
|
-
//# sourceMappingURL=mg-menu2.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"file":"mg-menu2.js","mappings":"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","names":[],"sources":["../styles/dist/components/mg-menu.css?tag=mg-menu&encapsulation=shadow","src/components/molecules/menu/mg-menu/mg-menu.tsx"],"sourcesContent":[".mg-u-visually-hidden{position:absolute !important;overflow:hidden !important;width:.1rem !important;height:.1rem !important;padding:0 !important;border:0 !important;margin:-0.1rem !important;clip:rect(0.1rem, 0.1rem, 0.1rem, 0.1rem) !important;clip-path:inset(50%) !important;white-space:nowrap !important}*:focus:not(:focus-visible){outline:none}@media(prefers-reduced-motion){*{animation:none !important;transition:none !important}}:host{display:flex;background-color:hsl(var(--mg-menu-background-color-hsl, var(--color-light)))}:host([direction=vertical]){height:100%;flex-direction:column;overflow-y:auto}/*# sourceMappingURL=mg-menu.css.map */\n","import { Component, h, Prop, State, Element, Watch, Host } from '@stencil/core';\nimport { Direction, sizes } from './mg-menu.conf';\nimport type { MenuSizeType, ItemMoreType } from './mg-menu.conf';\n\n@Component({\n tag: 'mg-menu',\n styleUrl: '../../../../../node_modules/@mgdis/styles/dist/components/mg-menu.css',\n shadow: true,\n})\nexport class MgMenu {\n /************\n * Internal *\n ************/\n\n private readonly name = 'mg-menu';\n private menuItems: HTMLMgMenuItemElement[] = [];\n private focusedMenuItem = 0;\n\n /**************\n * Decorators *\n **************/\n\n /**\n * Get component DOM element\n */\n @Element() element: HTMLMgMenuElement;\n\n /**\n * Menu label. Include short menu description.\n * Required for accessibility\n */\n @Prop() label!: string;\n @Watch('label')\n validateLabel(newValue: MgMenu['label']): void {\n if (newValue === undefined) {\n throw new Error(`<${this.name}> prop \"label\" is required.`);\n }\n }\n\n /**\n * Component display direction.\n */\n @Prop({ reflect: true }) direction: Direction = Direction.HORIZONTAL;\n @Watch('direction')\n validateDirection(newValue: MgMenu['direction']): void {\n if (![Direction.VERTICAL, Direction.HORIZONTAL].includes(newValue)) {\n throw new Error(`<${this.name}> prop \"direction\" must be one of: ${Direction.HORIZONTAL}, ${Direction.VERTICAL}.`);\n }\n }\n\n /**\n * Customize \"mg-item-more\" element\n * Used with direction: 'vertical' to manage overflow\n */\n @Prop() itemmore: ItemMoreType;\n @Watch('itemmore')\n validateItemMore(newValue: MgMenu['itemmore']): void {\n if (newValue !== undefined && this.direction !== Direction.HORIZONTAL) {\n throw new Error(`<${this.name}> prop \"itemmore\" must be paired with direction ${Direction.HORIZONTAL}.`);\n }\n }\n\n /**\n * Define mg-menu size\n */\n @Prop() size: MenuSizeType = 'regular';\n @Watch('size')\n validateSize(newValue: MgMenu['size']): void {\n if (!sizes.includes(newValue)) {\n throw new Error(`<${this.name}> prop \"size\" must be one of: ${sizes.join(', ')}.`);\n }\n }\n\n /**\n * is this menu a child menu. Used for conditional render.\n */\n @State() isChildMenu: boolean;\n\n /*************\n * Methods *\n *************/\n\n /**\n * Close matching menu-item\n * @param item - menu-item to close\n * @param condition - addionnal condition\n */\n private closeMenuItem = (item: HTMLMgMenuItemElement, condition: boolean): void => {\n if (!this.isChildMenu && condition) {\n item.expanded = false;\n }\n };\n\n /**\n * get mg-item-more element\n * @returns mg-item-more element\n */\n private getItemMore = (): HTMLMgItemMoreElement => this.element.querySelector('mg-item-more');\n\n /**\n * get mg-item-more child mg-menu-item element\n * @returns mg-menu-item element\n */\n private getItemMoreMenuItem = (): HTMLMgMenuItemElement => this.getItemMore()?.shadowRoot?.querySelector('mg-menu-item');\n\n /**\n * Set item listend\n * @param item - mg-menu-item element\n * @param index - number\n */\n private setItemListener = (item: HTMLMgMenuItemElement, index: MgMenu['focusedMenuItem']): void => {\n ['click', 'focus'].forEach(trigger => {\n (item.shadowRoot.querySelector('button') || item.shadowRoot.querySelector('a')).addEventListener(trigger, () => {\n this.focusedMenuItem = index;\n // reset expanded on previous active menu item\n (this.getItemMoreMenuItem() ? [...this.menuItems, this.getItemMoreMenuItem()] : this.menuItems).forEach((item, index) => {\n this.closeMenuItem(item, index !== this.focusedMenuItem);\n });\n });\n });\n };\n\n /**\n * Store menu-items on component init and add listeners\n */\n private initMenuItemsListeners = (): void => {\n // add listeners on menu item and edit index\n this.menuItems.forEach((item, index) => {\n this.setItemListener(item, index);\n });\n };\n\n /**\n * Handle item-loaded event on mg-item-more element\n */\n private handleItemLoaded = (): void => {\n this.setItemListener(this.getItemMoreMenuItem(), this.menuItems.length);\n };\n\n /**\n * render mg-item-more\n */\n private renderMgItemMore = (): void => {\n // /!\\ externalise item tag name to get a string type and bypass type checking when value is used in next createElement\n // by doing this we prevent stencil to generate a circular dependencies graph at build time with mg-item-more component.\n const item = 'mg-item-more';\n const mgItemMore = document.createElement(item);\n Object.assign(mgItemMore, this.itemmore);\n mgItemMore.addEventListener('item-loaded', this.handleItemLoaded);\n this.element.appendChild(mgItemMore);\n };\n\n /*************\n * Lifecycle *\n *************/\n\n /**\n * Validate props\n */\n componentWillLoad(): void {\n this.validateDirection(this.direction);\n this.validateLabel(this.label);\n this.validateItemMore(this.itemmore);\n this.validateSize(this.size);\n }\n\n /**\n * Check if component slots configuration\n * @returns timeout\n */\n componentDidLoad(): ReturnType<typeof setTimeout> {\n // update props and states after componentDidLoad hook\n // return a promise to process action only in the FIRST render().\n // https://stenciljs.com/docs/component-lifecycle#componentwillload\n return setTimeout(() => {\n // store all menu-items\n this.menuItems = Array.from(this.element.children).filter(child => child.nodeName === 'MG-MENU-ITEM') as HTMLMgMenuItemElement[];\n this.isChildMenu = this.element.closest('mg-menu-item') !== null;\n\n // add mg-item-more to manage OverflowBehavior\n if (this.direction === Direction.HORIZONTAL && !this.isChildMenu) this.renderMgItemMore();\n\n // use mutation observer to improve reactivity\n new MutationObserver(entries => {\n const mgItemMore = this.getItemMore();\n // prevent infinit loop by exclude mg-item-more deletion entry\n if (entries.some(entry => entry.type === 'childList' && Array.from(entry.removedNodes).some(node => node.nodeName === 'MG-ITEM-MORE'))) return;\n else if (mgItemMore !== null) {\n // render a new mg-item-more\n mgItemMore.remove();\n mgItemMore.removeEventListener('item-loaded', this.handleItemLoaded);\n this.renderMgItemMore();\n }\n }).observe(this.element, { childList: true, characterData: true, subtree: true });\n }, 0);\n }\n\n /**\n * Add listeners to items\n */\n componentDidRender(): void {\n this.initMenuItemsListeners();\n }\n\n /**\n * Render\n * @returns HTML Element\n */\n render(): HTMLElement {\n return (\n <Host role=\"list\" aria-label={this.label}>\n <slot></slot>\n </Host>\n );\n }\n}\n"],"version":3}
|