@mgdis/mg-components 5.7.0 → 5.8.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/loader.cjs.js +1 -1
- package/dist/cjs/mg-action-more_31.cjs.entry.js +351 -600
- package/dist/cjs/mg-components.cjs.js +1 -1
- package/dist/cjs/mg-item-more.cjs.entry.js +273 -0
- package/dist/cjs/mg-menu.conf-9afe6571.js +242 -0
- package/dist/collection/collection-manifest.json +2 -1
- package/dist/collection/components/atoms/mg-button/mg-button.js +24 -0
- package/dist/collection/components/atoms/mg-icon/mg-icon.conf.js +8 -0
- package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.js +6 -2
- package/dist/collection/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.js +14 -10
- package/dist/collection/components/molecules/inputs/mg-input-select/mg-input-select.js +91 -21
- package/dist/collection/components/molecules/menu/mg-menu/mg-menu.conf.js +0 -13
- package/dist/collection/components/molecules/menu/mg-menu/mg-menu.js +80 -76
- package/dist/collection/components/molecules/menu/mg-menu-item/mg-menu-item.css +7 -5
- package/dist/collection/components/molecules/menu/mg-menu-item/mg-menu-item.js +174 -78
- package/dist/collection/components/molecules/mg-form/mg-form.js +1 -1
- package/dist/collection/components/molecules/mg-item-more/mg-item-more.conf.js +1 -0
- package/dist/collection/components/molecules/mg-item-more/mg-item-more.css +30 -0
- package/dist/collection/components/molecules/mg-item-more/mg-item-more.js +200 -0
- package/dist/collection/components/molecules/mg-tabs/mg-tabs.css +0 -2
- package/dist/collection/styles/navigation-button.scss +1 -1
- package/dist/collection/utils/behaviors.utils.js +33 -29
- package/dist/collection/utils/components.utils.js +2 -4
- package/dist/collection/utils/unit.test.utils.js +25 -0
- package/dist/components/components.utils.js +2 -4
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.js +1 -0
- package/dist/components/mg-action-more.js +2 -1
- package/dist/components/mg-button2.js +4 -1
- package/dist/components/mg-form.js +1 -1
- package/dist/components/mg-icon2.js +8 -0
- package/dist/components/mg-input-checkbox.js +5 -4
- package/dist/components/mg-input-select2.js +83 -17
- package/dist/components/mg-item-more.d.ts +11 -0
- package/dist/components/mg-item-more.js +336 -0
- package/dist/components/mg-menu-item2.js +138 -251
- package/dist/components/mg-menu.conf.js +14 -0
- package/dist/components/mg-menu2.js +76 -111
- package/dist/components/mg-tabs.js +1 -1
- package/dist/components/mg-tooltip2.js +6 -2
- package/dist/esm/loader.js +1 -1
- package/dist/esm/mg-action-more_31.entry.js +321 -570
- package/dist/esm/mg-components.js +1 -1
- package/dist/esm/mg-item-more.entry.js +269 -0
- package/dist/esm/mg-menu.conf-881fbd82.js +235 -0
- package/dist/mg-components/mg-components.css +1 -1
- package/dist/mg-components/mg-components.esm.js +1 -1
- package/dist/mg-components/p-1221773c.entry.js +1 -0
- package/dist/mg-components/p-30bc87db.entry.js +1 -0
- package/dist/mg-components/p-367f92d2.js +1 -0
- package/dist/mg-components/styles/navigation-button.scss +1 -1
- package/dist/types/components/atoms/mg-button/mg-button.d.ts +5 -0
- package/dist/types/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.d.ts +3 -3
- package/dist/types/components/molecules/inputs/mg-input-select/mg-input-select.d.ts +39 -4
- package/dist/types/components/molecules/menu/mg-menu/mg-menu.conf.d.ts +3 -27
- package/dist/types/components/molecules/menu/mg-menu/mg-menu.d.ts +38 -30
- package/dist/types/components/molecules/menu/mg-menu-item/mg-menu-item.conf.d.ts +5 -0
- package/dist/types/components/molecules/menu/mg-menu-item/mg-menu-item.d.ts +69 -16
- package/dist/types/components/molecules/mg-item-more/mg-item-more.conf.d.ts +26 -0
- package/dist/types/components/molecules/mg-item-more/mg-item-more.d.ts +74 -0
- package/dist/types/components.d.ts +75 -17
- package/dist/types/utils/behaviors.utils.d.ts +12 -5
- package/dist/types/utils/components.utils.d.ts +2 -2
- package/dist/types/utils/unit.test.utils.d.ts +11 -0
- package/package.json +1 -1
- package/dist/mg-components/p-4cfd5423.entry.js +0 -1
|
@@ -31,6 +31,7 @@ export const icons = {
|
|
|
31
31
|
'bell': () => (h("path", { fill: "currentColor", d: "M8 15.33a1.7 1.7 0 0 0 1.52-1.83h-3A1.7 1.7 0 0 0 8 15.33ZM13.13 11c-.46-.59-1.32-1.48-1.32-4.42a4.4 4.4 0 0 0-3.05-4.4v-.6A.85.85 0 0 0 8 .67a.85.85 0 0 0-.76.91v.6a4.4 4.4 0 0 0-3 4.44c0 2.94-.86 3.83-1.32 4.42a1 1 0 0 0-.2.63.85.85 0 0 0 .76.91h9.14a.85.85 0 0 0 .76-.91 1.05 1.05 0 0 0-.25-.67Z" })),
|
|
32
32
|
'briefcase': () => (h("path", { fill: "currentColor", d: "M14 4.5h-3v-1c0-.55-.45-1-1-1H6c-.55 0-1 .45-1 1v1H2c-.55 0-1 .45-1 1v7c0 .55.45 1 1 1h12c.55 0 1-.45 1-1v-7c0-.55-.45-1-1-1Zm-8-1h4v1H6v-1Z" })),
|
|
33
33
|
'briefcase-outline': () => (h("path", { fill: "currentColor", d: "M14 4.5h-3v-1c0-.55-.45-1-1-1H6c-.55 0-1 .45-1 1v1H2c-.55 0-1 .45-1 1v7c0 .55.45 1 1 1h12c.55 0 1-.45 1-1v-7c0-.55-.45-1-1-1Zm-8-1h4v1H6v-1Zm8 9H2v-7h12v7Z" })),
|
|
34
|
+
'building-outline': () => (h("path", { fill: "currentColor", d: "M4 2h8v12H9v-1a1 1 0 1 0-2 0v1H4V2Zm4 13h4a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h4ZM7 4H5v2h2V4Zm2 0h2v2H9V4Zm2 4H9v2h2V8ZM5 8h2v2H5V8Z" })),
|
|
34
35
|
'calculator': () => (h("path", { fill: "currentColor", d: "M12.83.67H3.17a.5.5 0 0 0-.5.5v13.66a.5.5 0 0 0 .5.5h9.66a.5.5 0 0 0 .5-.5V1.17a.5.5 0 0 0-.5-.5ZM5.58 13.39a.29.29 0 0 1-.28.3H4.1a.29.29 0 0 1-.3-.28v-1.2a.29.29 0 0 1 .28-.3h1.2a.29.29 0 0 1 .3.28v1.2Zm0-3.28a.29.29 0 0 1-.3.3H4.1a.29.29 0 0 1-.3-.3V8.93a.29.29 0 0 1 .28-.3h1.2a.29.29 0 0 1 .3.28v1.2Zm3.29 3.28a.29.29 0 0 1-.3.3H7.38a.29.29 0 0 1-.3-.3v-1.18a.29.29 0 0 1 .3-.3h1.19a.29.29 0 0 1 .3.3Zm0-3.28a.32.32 0 0 1-.3.3H7.38a.32.32 0 0 1-.3-.3V8.93a.29.29 0 0 1 .3-.3h1.19a.29.29 0 0 1 .3.3Zm3.33 3.28a.29.29 0 0 1-.28.3h-1.25a.29.29 0 0 1-.3-.28V8.93a.29.29 0 0 1 .28-.3h1.25a.29.29 0 0 1 .3.28v4.48Zm0-7.15a.29.29 0 0 1-.3.3H4.1a.29.29 0 0 1-.3-.3V2.61a.29.29 0 0 1 .28-.3h7.82a.29.29 0 0 1 .3.28v3.65Z" })),
|
|
35
36
|
'calendar': () => (h("path", { fill: "currentColor", d: "M14 3.5c0-.55-.45-1-1-1h-1v-1h-1v1H5v-1H4v1H3c-.55 0-1 .45-1 1v.98s0 .02.02.02H2v9c0 .55.45 1 1 1h10c.55 0 1-.45 1-1v-9h-.02s.02 0 .02-.02V3.5Zm-11 10v-8h10v8H3Z" })),
|
|
36
37
|
'calendar-outline': () => (h("path", { fill: "currentColor", d: "M13 2.5h-1v-1h-1v1H5v-1H4v1H3c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h10c.55 0 1-.45 1-1v-10c0-.55-.45-1-1-1Zm-10 11v-8h10v8H3Zm0-9v-1h10v1H3Z" })),
|
|
@@ -146,6 +147,7 @@ export const icons = {
|
|
|
146
147
|
'pen': () => (h("path", { fill: "currentColor", d: "M1.67,11.69v2.64h2.64l7.78-7.78-2.64-2.64L1.67,11.69ZM14.13,4.51c.27-.28,.27-.72,0-1h0l-1.65-1.64c-.28-.27-.72-.27-1,0h0l-1.28,1.29,2.64,2.64,1.29-1.29Z" })),
|
|
147
148
|
'pen-circle': () => (h("path", { fill: "currentColor", d: "M8 .44C3.82.44.44 3.82.44 8S3.83 15.56 8 15.56s7.56-3.39 7.56-7.56C15.56 3.82 12.18.44 8 .44M5.47 12.19H3.62v-1.85l5.46-5.45 1.85 1.86-5.45 5.45Zm6.88-6.89-.9.9-1.86-1.85.9-.9c.19-.19.51-.19.7 0l1.16 1.15c.19.19.19.51 0 .7" })),
|
|
148
149
|
'pen-fancy': () => (h("path", { fill: "currentColor", d: "M3.63,8.65c-.24,.07-.43,.26-.5,.5l-1.46,4.37,.11,.12,2.3-2.3c0-.06,0-.13,0-.19,0-.44,.35-.8,.79-.81,.44,0,.8,.35,.81,.79,0,.44-.35,.8-.79,.81,0,0-.01,0-.02,0h-.19l-2.3,2.3,.12,.11,4.37-1.46c.24-.07,.43-.26,.5-.5l.82-2.08-2.49-2.48-2.07,.82ZM10.8,2.35L6.27,7.28l2.42,2.42,4.94-4.52c2.1-1.86-.99-4.92-2.83-2.83Z" })),
|
|
150
|
+
'pen-fancy-files-outline': () => (h("path", { fill: "currentColor", d: "M12 2H6v10h6V8.946l.023-.058.085-.078.892-.813V12a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v.112a2.298 2.298 0 0 0-.974.66L12 2.8V2Zm1 4.643-1 .913-.566.515-1.528-1.524L12 4.275l.767-.832c.075-.085.153-.156.233-.215 1.167-.857 2.796.9 1.555 1.997L13 6.643ZM4 3H3v11.5a.5.5 0 0 0 .5.5H11v-1H4V3Zm4.238 4.41a.466.466 0 0 0-.316.315L7 10.477l.07.076 1.452-1.449v-.12a.51.51 0 0 1 .5-.51.51.51 0 0 1 .511.498.51.51 0 0 1-.499.51h-.133L7.45 10.931l.075.069 2.76-.92a.466.466 0 0 0 .317-.314l.518-1.31-1.573-1.562-1.308.516Z" })),
|
|
149
151
|
'pen-fancy-outline': () => (h("path", { fill: "currentColor", d: "M12.24 1.67c-.49 0-1 .21-1.44.7L6.27 7.3l2.42 2.42 4.94-4.52c1.6-1.42.19-3.53-1.39-3.53ZM8.72 8.34 7.66 7.28l3.9-4.24c.22-.24.44-.36.69-.36.41 0 .87.34 1.03.78.14.37.04.7-.32 1.02L8.73 8.36ZM5.7 7.86l-2.08.82c-.24.08-.42.26-.5.5l-1.46 4.37.12.12.56.56.12.12 4.37-1.46c.24-.08.42-.26.5-.5l.81-2.08L5.7 7.87Zm-2.57 4.46L4 9.72c.03-.08.09-.15.17-.18l1.29-.51 1.52 1.52-.5 1.29c-.03.08-.1.15-.19.18l-2.6.87.95-.95c.06.02.12.04.19.04.44 0 .79-.35.79-.79s-.35-.79-.79-.79-.79.35-.79.79c0 .07.02.13.04.19l-.95.95Z" })),
|
|
150
152
|
'phone': () => (h("path", { fill: "currentColor", d: "M13.97 10.62 11.2 9.43a.6.6 0 0 0-.69.17l-1.23 1.5A9.137 9.137 0 0 1 4.9 6.72l1.5-1.23c.21-.17.28-.45.17-.69L5.38 2.03a.589.589 0 0 0-.68-.34l-2.57.59a.59.59 0 0 0-.46.58c0 6.34 5.14 11.48 11.48 11.48.28 0 .52-.19.58-.46l.59-2.57a.595.595 0 0 0-.35-.68Z" })),
|
|
151
153
|
'picture': () => (h("path", { fill: "currentColor", d: "M14.33 12.93V3.07a1.4 1.4 0 0 0-1.4-1.4H3.07a1.4 1.4 0 0 0-1.4 1.4v9.86a1.4 1.4 0 0 0 1.4 1.4h9.86a1.4 1.4 0 0 0 1.4-1.4ZM5.54 9.06l1.76 2.11L9.76 8l3.17 4.22H3.07Z" })),
|
|
@@ -164,6 +166,8 @@ export const icons = {
|
|
|
164
166
|
h("path", { key: "tags-2", fill: "currentColor", d: "M15 7.37 10.15 3a1.12 1.12 0 0 0-.77-.29H8.26l4.5 4.09a1.76 1.76 0 0 1 0 2.65L8.77 13a1.17 1.17 0 0 0 1.55 0L15 8.79a.94.94 0 0 0 0-1.42Z" }),
|
|
165
167
|
],
|
|
166
168
|
'thumb-up': () => (h("path", { fill: "currentColor", d: "M2.11 14.36h1a.45.45 0 0 0 .45-.44V7.17a.45.45 0 0 0-.45-.44h-1a.44.44 0 0 0-.44.44v6.75a.44.44 0 0 0 .44.44Zm12.22-7a1.27 1.27 0 0 0-1.27-1.27H9.71l.61-2.91v-.2a1.07 1.07 0 0 0-.28-.68l-.68-.66-4.17 4.19a1.26 1.26 0 0 0-.37.9v6.36a1.27 1.27 0 0 0 1.27 1.27h5.06a1.24 1.24 0 0 0 1.17-.77l1.92-4.49a1.22 1.22 0 0 0 .09-.46V7.42Z" })),
|
|
169
|
+
'thumbtack': () => (h("path", { fill: "currentColor", d: "M8.91 2 7.71 5.594 2.364 7.09 5.274 10l-.707.706-1.687 1.687-.264.264-.09.09-.209.498L2 14l.755-.317.498-.21.09-.089.264-.264 1.687-1.687.706-.706 2.91 2.908 1.496-5.347L14 7.09 8.91 2Z" })),
|
|
170
|
+
'thumbtack-outline': () => (h("path", { fill: "currentColor", "fill-rule": "evenodd", d: "m5.273 10-2.91 2.91L2 14l1.09-.364L6 10.727l2.91 2.91 1.496-5.348L14 7.09 8.91 2 7.71 5.594 2.364 7.09 5.273 10Zm3.241-3.563-4.18 1.17 4.059 4.059 1.17-4.18 2.533-.845-2.737-2.737-.845 2.533Z" })),
|
|
167
171
|
'trash': () => [
|
|
168
172
|
h("path", { key: "trash-1", fill: "currentColor", d: "M3.27 14.17c0 .66.54 1.19 1.2 1.2h7l-.05-.02h.08c.64-.02 1.14-.56 1.12-1.2V4.32H3.27v9.85Zm5.97-7.12c0-.33.27-.6.6-.6s.6.27.6.6v5.3c0 .33-.27.6-.6.6s-.6-.27-.6-.6v-5.3Zm-3.5 0c0-.33.27-.59.6-.6.32.02.58.28.6.6v5.3c-.02.32-.28.58-.6.6a.645.645 0 0 1-.6-.6v-5.3Zm7.28-5.39h-2.6V.95a.28.28 0 0 0-.28-.28H5.87a.28.28 0 0 0-.28.28v.72H2.91a.28.28 0 0 0-.28.28V3.1c0 .15.12.28.28.28h10.11c.15 0 .28-.12.28-.28V1.94a.28.28 0 0 0-.28-.28Z" }),
|
|
169
173
|
h("path", { key: "trash-2", fill: "currentColor", d: "M13,2h-2.9L9.9,1.6 C9.8,1.4,9.6,1.2,9.4,1.2H6.6c-0.2,0-0.4,0.1-0.5,0.3L5.8,2H2.9C2.7,2,2.5,2.2,2.5,2.4c0,0,0,0,0,0v0.8c0,0.2,0.2,0.4,0.4,0.4H13 c0.2,0,0.4-0.2,0.4-0.4V2.4C13.4,2.2,13.2,2,13,2z" }),
|
|
@@ -174,6 +178,10 @@ export const icons = {
|
|
|
174
178
|
'upload': () => (h("path", { fill: "currentColor", d: "M9.58 10.74V6.59a.31.31 0 0 1 .31-.3H12a.3.3 0 0 0 .21-.52l-4-4a.29.29 0 0 0-.42 0l-4 4a.3.3 0 0 0 .21.52h2.11a.31.31 0 0 1 .31.3v4.15a.3.3 0 0 0 .3.3h2.56a.3.3 0 0 0 .3-.3ZM14.33 14v-1a.29.29 0 0 0-.29-.3H2a.29.29 0 0 0-.29.3v1a.29.29 0 0 0 .29.29h12a.29.29 0 0 0 .33-.29Z" })),
|
|
175
179
|
'user': () => (h("path", { fill: "currentColor", d: "M8 8.79a3.56 3.56 0 1 0-3.56-3.56A3.56 3.56 0 0 0 8 8.79Zm3.17.79H9.8a4.27 4.27 0 0 1-3.6 0H4.83a3.16 3.16 0 0 0-3.16 3.17v.4a1.18 1.18 0 0 0 1.18 1.18h10.3a1.18 1.18 0 0 0 1.18-1.18v-.4a3.16 3.16 0 0 0-3.16-3.17Z" })),
|
|
176
180
|
'user-circle': () => (h("path", { fill: "currentColor", d: "M8 .62C3.95.61.66 3.9.65 7.95c0 4.05 3.28 7.34 7.33 7.35 4.04 0 7.33-3.26 7.35-7.3.02-4.05-3.25-7.36-7.3-7.38H8Zm0 .75c3.64 0 6.59 2.96 6.58 6.6V8c0 1.35-.41 2.66-1.19 3.76a2.713 2.713 0 0 0-2.66-2.37H9.54c-.98.46-2.1.46-3.08 0H5.28c-1.36 0-2.5 1.02-2.67 2.37A6.483 6.483 0 0 1 1.42 8a6.59 6.59 0 0 1 6.55-6.63H8ZM5 5.63c0-1.68 1.37-3.05 3.05-3.05 1.68 0 3.05 1.37 3.05 3.05 0 1.68-1.37 3.05-3.05 3.05H8c-1.66-.03-3-1.39-3-3.05Z" })),
|
|
181
|
+
'user-pen-fancy-outline': () => [
|
|
182
|
+
h("path", { fill: "currentColor", d: "M7.5 7a2.5 2.5 0 0 1 0-5 2.5 2.5 0 0 1 0 5Zm0-4C6.67 3 6 3.67 6 4.5S6.67 6 7.5 6 9 5.33 9 4.5 8.33 3 7.5 3ZM11.12 11.46l-.22.54-.3.77s-.04.09-.06.13c-.03.04-.06.07-.1.1-.05.04-.1.07-.16.08L7.52 14l-.07-.07 1.45-1.45h.13c.15 0 .27-.06.36-.16a.56.56 0 0 0 .1-.15c.01-.02.02-.04.03-.07v-.02s.01-.05.01-.08v-.03c0-.28-.23-.5-.51-.5-.28.01-.5.24-.5.51v.14l-.76.75-.14.13-.55.55-.07-.07.16-.48.1-.29.24-.71.42-1.27c.05-.16.17-.28.32-.32l1.31-.52 1.57 1.57ZM14.56 8.22l-2.05 1.87-.7.64-.06.05-.32.29-1.52-1.52.28-.31.06-.06.64-.7 1.88-2.04c1.16-1.31 3.11.61 1.79 1.78Z" }),
|
|
183
|
+
h("path", { fill: "currentColor", d: "M9 8H6c-2.21 0-4 1.79-4 4 0 .55.45 1 1 1h3.11l.33-1H3c0-1.66 1.34-3 3-3h3.05l.12-.13.71-.77C9.6 8.03 9.3 8 9 8Z" }),
|
|
184
|
+
],
|
|
177
185
|
'user-group': () => (h("path", { fill: "currentColor", d: "M13.15 4.12c-.81-.01-1.47.65-1.48 1.46 0 .82.65 1.47 1.46 1.48s1.47-.65 1.48-1.46-.65-1.47-1.46-1.48Zm-10.04.01a1.47 1.47 0 0 0-1.58 1.59c.06.71.62 1.28 1.34 1.34.81.07 1.52-.53 1.59-1.34.06-.81-.54-1.52-1.35-1.59Zm7.36.39c-.22-.84-.87-1.51-1.71-1.75-1.36-.41-2.8.36-3.22 1.72-.18.61-.13 1.27.14 1.85.41.9 1.33 1.48 2.32 1.45 1.41.01 2.56-1.14 2.57-2.55 0-.24-.03-.49-.1-.72Zm-.71 4h-.19c-.99.49-2.14.49-3.13 0h-.19c-1.46 0-2.64 1.18-2.64 2.64v2.69c1.23.93 2.74 1.47 4.39 1.47s3.17-.55 4.4-1.48v-2.68c0-1.46-1.18-2.64-2.64-2.64Zm5.52.25a7.282 7.282 0 0 1-1.65 3.91c-.08.1-.16.19-.25.28-.08.09-.17.18-.25.27v-.55h.03v-.72s.01-.07 0-.1v-.66c.01-1.25-.66-2.4-1.76-3 .27-.26.63-.41 1-.41h1.51c.63.01 1.17.41 1.37.98ZM2.86 11.16v1.52h.01v.55l-.28-.31c-.08-.08-.15-.16-.22-.24A7.238 7.238 0 0 1 .74 8.86c.16-.62.72-1.07 1.4-1.07h1.47c.37-.01.73.12 1.01.37-1.1.6-1.77 1.75-1.76 3Z" })),
|
|
178
186
|
'user-plus': () => (h("path", { fill: "currentColor", d: "M14,3.33H12.65V2a.36.36,0,0,0-.35-.33h-.65A.36.36,0,0,0,11.3,2V3.33H10a.34.34,0,0,0-.33.34v.66a.34.34,0,0,0,.33.34H11.3V6a.37.37,0,0,0,.35.33h.65A.37.37,0,0,0,12.65,6V4.67H14a.34.34,0,0,0,.32-.34V3.67A.34.34,0,0,0,14,3.33ZM9.28,9.77h-.2a5.19,5.19,0,0,1-3.91,0H5A3,3,0,0,0,1.7,12.46h0v.72A1.27,1.27,0,0,0,3,14.33h8.25a1.26,1.26,0,0,0,1.36-1.14v-.68A3,3,0,0,0,9.37,9.76H9.28ZM7.13,3.7A2.64,2.64,0,1,1,4.5,6.34h0A2.64,2.64,0,0,1,7.13,3.7Z" })),
|
|
179
187
|
'user-question-outline': () => (h("path", { fill: "currentColor", d: "M5.23 11.14c.86-.66 1.01-1.9.35-2.75s-1.9-1.01-2.75-.35a1.96 1.96 0 0 0 0 3.1c-.72.42-1.16 1.2-1.16 2.03v.8c0 .2.17.37.37.37h3.98c.2 0 .37-.17.37-.37v-.8c0-.83-.44-1.61-1.16-2.03ZM2.81 9.59c0-.67.55-1.22 1.22-1.22s1.22.55 1.22 1.22-.55 1.22-1.22 1.22-1.22-.55-1.22-1.22Zm2.83 4H2.41v-.42c0-.89.72-1.62 1.62-1.62s1.62.72 1.62 1.62v.42h-.01Zm7.13-11.93H8c-.86 0-1.56.7-1.56 1.56v7.16c0 .21.17.37.37.37.08 0 .16-.03.22-.07l1.49-1.12h4.25c.86 0 1.56-.7 1.56-1.56V3.22c0-.86-.7-1.56-1.56-1.56Zm.82 6.33c0 .45-.37.82-.82.82H8.4a.41.41 0 0 0-.22.07l-1 .75V3.22c0-.45.37-.82.82-.82h4.77c.45 0 .82.37.82.82v4.77Zm-2.8-.42c0 .23-.18.41-.41.41s-.41-.18-.41-.41.18-.41.41-.41c.23 0 .41.18.41.41Zm-.41-4.34c-.83 0-1.5.67-1.5 1.5 0 .23.18.41.41.41s.41-.18.41-.41c0-.38.31-.68.69-.68.38 0 .68.31.68.69 0 .38-.31.68-.68.68-.23 0-.41.18-.41.41v.44c0 .23.18.41.41.41s.41-.18.41-.41v-.09c.8-.23 1.26-1.06 1.04-1.85-.18-.65-.77-1.09-1.44-1.09Z" })),
|
|
@@ -157,6 +157,7 @@ export class MgTooltip {
|
|
|
157
157
|
if (typeof newValue !== 'string' || newValue.trim() === '') {
|
|
158
158
|
throw new Error('<mg-tooltip> prop "message" is required.');
|
|
159
159
|
}
|
|
160
|
+
this.popper.update();
|
|
160
161
|
}
|
|
161
162
|
handleDisplay(newValue) {
|
|
162
163
|
if (newValue) {
|
|
@@ -188,10 +189,13 @@ export class MgTooltip {
|
|
|
188
189
|
this.tooltipedElement = interactiveElement || slotElement;
|
|
189
190
|
// Check if slotted element is a disabled mg-button
|
|
190
191
|
// In this case we wrap the mg-button into a div to enable the tooltip
|
|
191
|
-
if (
|
|
192
|
+
if (['MG-BUTTON', 'BUTTON'].includes(slotElement.tagName)) {
|
|
192
193
|
new MutationObserver(mutationList => {
|
|
193
|
-
if (mutationList.some(mutation =>
|
|
194
|
+
if (mutationList.some(mutation => ['aria-disabled', 'disabled'].includes(mutation.attributeName))) {
|
|
194
195
|
this.setMgButtonWrapper(slotElement);
|
|
196
|
+
// Since Firefox doesn't trigger a "blur" event when the "disabled" attribute is added or removed from a button
|
|
197
|
+
// we have to manually unlock the guard because the "blur" handler of the tooltipedElement won't do it.
|
|
198
|
+
this.resetGuard();
|
|
195
199
|
this.initTooltip(slotElement, interactiveElement);
|
|
196
200
|
}
|
|
197
201
|
}).observe(slotElement, { attributes: true });
|
|
@@ -6,10 +6,11 @@ import { initLocales } from '../../../../locales';
|
|
|
6
6
|
/**
|
|
7
7
|
* type CheckboxItem validation function
|
|
8
8
|
*
|
|
9
|
-
* @param {
|
|
10
|
-
* @returns {boolean} match item
|
|
9
|
+
* @param {unknown} items Checkbox item
|
|
10
|
+
* @returns {boolean} match item type
|
|
11
11
|
*/
|
|
12
|
-
const
|
|
12
|
+
const isCheckboxItems = (items) => Array.isArray(items) &&
|
|
13
|
+
items.every(item => typeof item === 'object' && typeof item.title === 'string' && (item.value === null || typeof item.value === 'boolean') && item.value !== undefined);
|
|
13
14
|
export class MgInputCheckbox {
|
|
14
15
|
constructor() {
|
|
15
16
|
/************
|
|
@@ -87,7 +88,7 @@ export class MgInputCheckbox {
|
|
|
87
88
|
this.checkboxItems = [];
|
|
88
89
|
}
|
|
89
90
|
validateValue(newValue) {
|
|
90
|
-
if (newValue
|
|
91
|
+
if (isCheckboxItems(newValue)) {
|
|
91
92
|
this.checkboxItems = newValue.map((item, index) => ({
|
|
92
93
|
id: `${this.identifier}_${index.toString()}`,
|
|
93
94
|
title: item.title,
|
|
@@ -437,12 +438,11 @@ export class MgInputCheckbox {
|
|
|
437
438
|
"text": "Emitted event when value change"
|
|
438
439
|
},
|
|
439
440
|
"complexType": {
|
|
440
|
-
"original": "
|
|
441
|
+
"original": "MgInputCheckbox['value']",
|
|
441
442
|
"resolved": "CheckboxValue[]",
|
|
442
443
|
"references": {
|
|
443
|
-
"
|
|
444
|
-
"location": "
|
|
445
|
-
"path": "./mg-input-checkbox.conf"
|
|
444
|
+
"MgInputCheckbox": {
|
|
445
|
+
"location": "global"
|
|
446
446
|
}
|
|
447
447
|
}
|
|
448
448
|
}
|
|
@@ -457,9 +457,13 @@ export class MgInputCheckbox {
|
|
|
457
457
|
"text": "Emited event when checking validity"
|
|
458
458
|
},
|
|
459
459
|
"complexType": {
|
|
460
|
-
"original": "
|
|
460
|
+
"original": "MgInputCheckbox['valid']",
|
|
461
461
|
"resolved": "boolean",
|
|
462
|
-
"references": {
|
|
462
|
+
"references": {
|
|
463
|
+
"MgInputCheckbox": {
|
|
464
|
+
"location": "global"
|
|
465
|
+
}
|
|
466
|
+
}
|
|
463
467
|
}
|
|
464
468
|
}];
|
|
465
469
|
}
|
|
@@ -7,10 +7,24 @@ import { initLocales } from '../../../../locales';
|
|
|
7
7
|
/**
|
|
8
8
|
* Check if item is a well configured option
|
|
9
9
|
*
|
|
10
|
-
* @param {
|
|
10
|
+
* @param {unknown} option select option
|
|
11
11
|
* @returns {boolean} select option type is valid
|
|
12
12
|
*/
|
|
13
13
|
const isOption = (option) => typeof option === 'object' && typeof option.title === 'string';
|
|
14
|
+
/**
|
|
15
|
+
* Check if items[] is SelectOption
|
|
16
|
+
*
|
|
17
|
+
* @param {unknown[]} items select option
|
|
18
|
+
* @returns {boolean} select option array type is valid
|
|
19
|
+
*/
|
|
20
|
+
const allItemsAreOptions = (items) => Array.isArray(items) && items.every(item => isOption(item));
|
|
21
|
+
/**
|
|
22
|
+
* Check if item is a well configured optgroup
|
|
23
|
+
*
|
|
24
|
+
* @param {unknown} optgroup select option
|
|
25
|
+
* @returns {boolean} select optgroup type is valid
|
|
26
|
+
*/
|
|
27
|
+
const isOptGroup = (optgroup) => typeof optgroup === 'object' && typeof optgroup.group === 'string' && allItemsAreOptions(optgroup.options);
|
|
14
28
|
/**
|
|
15
29
|
* Group options
|
|
16
30
|
*
|
|
@@ -46,17 +60,50 @@ export class MgInputSelect {
|
|
|
46
60
|
this.hasDisplayedError = false;
|
|
47
61
|
/**
|
|
48
62
|
* Handle input event
|
|
63
|
+
*
|
|
64
|
+
* @returns {void}
|
|
49
65
|
*/
|
|
50
66
|
this.handleInput = () => {
|
|
51
|
-
this.
|
|
52
|
-
if (this.hasDisplayedError)
|
|
67
|
+
this.updateValue();
|
|
68
|
+
if (this.hasDisplayedError)
|
|
53
69
|
this.setErrorMessage();
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Method to compare item.title with input.value
|
|
73
|
+
*
|
|
74
|
+
* @param {SelectOption} item item to compare with
|
|
75
|
+
* @returns {boolean} truthy if input.value is an item
|
|
76
|
+
*/
|
|
77
|
+
this.isInputValue = (item) => { var _a; return item.title === ((_a = this.input) === null || _a === void 0 ? void 0 : _a.value); };
|
|
78
|
+
/**
|
|
79
|
+
* value props setter
|
|
80
|
+
*
|
|
81
|
+
* @param {MgInputSelect['value']} newValue value to update with
|
|
82
|
+
* @returns {void}
|
|
83
|
+
*/
|
|
84
|
+
this.setValue = (newValue) => {
|
|
85
|
+
this.checkValidity();
|
|
86
|
+
this.value = newValue;
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Update value from input.value
|
|
90
|
+
*
|
|
91
|
+
* @returns {void}
|
|
92
|
+
*/
|
|
93
|
+
this.updateValue = () => {
|
|
94
|
+
if (this.input.value === '') {
|
|
95
|
+
this.setValue(null);
|
|
54
96
|
}
|
|
55
|
-
if (this.input.value
|
|
56
|
-
this.
|
|
97
|
+
else if (allItemsAreString(this.items) && this.items.includes(this.input.value)) {
|
|
98
|
+
this.setValue(this.input.value);
|
|
99
|
+
}
|
|
100
|
+
else if (allItemsAreOptions(this.items) && typeof this.input.value === 'string' && this.items.some(this.isInputValue)) {
|
|
101
|
+
this.setValue(this.items.find(this.isInputValue).value);
|
|
57
102
|
}
|
|
58
103
|
else {
|
|
59
|
-
|
|
104
|
+
// before set newValue with push to options[] the unknown input.value with a disable satus
|
|
105
|
+
this.options.push({ title: this.input.value, value: this.input.value, disabled: true });
|
|
106
|
+
this.setValue(this.input.value);
|
|
60
107
|
}
|
|
61
108
|
};
|
|
62
109
|
/**
|
|
@@ -65,12 +112,18 @@ export class MgInputSelect {
|
|
|
65
112
|
this.handleBlur = () => {
|
|
66
113
|
this.displayError();
|
|
67
114
|
};
|
|
115
|
+
/**
|
|
116
|
+
* Input value is disabled
|
|
117
|
+
*
|
|
118
|
+
* @returns {boolean} truthy if input value is disabled
|
|
119
|
+
*/
|
|
120
|
+
this.isDisabledValue = () => { var _a; return allItemsAreOptions(this.options) && ((_a = this.options.find(this.isInputValue)) === null || _a === void 0 ? void 0 : _a.disabled) === true; };
|
|
68
121
|
/**
|
|
69
122
|
* Check if input is valid
|
|
70
123
|
*/
|
|
71
124
|
this.checkValidity = () => {
|
|
72
125
|
var _a;
|
|
73
|
-
this.valid = this.readonly || this.disabled || (((_a = this.input) === null || _a === void 0 ? void 0 : _a.checkValidity) !== undefined ? this.input.checkValidity() : true);
|
|
126
|
+
this.valid = !this.isDisabledValue() && (this.readonly || this.disabled || (((_a = this.input) === null || _a === void 0 ? void 0 : _a.checkValidity) !== undefined ? this.input.checkValidity() : true));
|
|
74
127
|
this.invalid = !this.valid;
|
|
75
128
|
// We need to send valid event even if it is the same value
|
|
76
129
|
this.inputValid.emit(this.valid);
|
|
@@ -85,6 +138,13 @@ export class MgInputSelect {
|
|
|
85
138
|
this.errorMessage = this.messages.errors.required;
|
|
86
139
|
}
|
|
87
140
|
};
|
|
141
|
+
/**
|
|
142
|
+
* Render option
|
|
143
|
+
*
|
|
144
|
+
* @param {SelectOption} option to render
|
|
145
|
+
* @returns {HTMLElement} render option
|
|
146
|
+
*/
|
|
147
|
+
this.renderOption = (option) => (h("option", { key: option.title, value: option.title, selected: JSON.stringify(this.value) === JSON.stringify(option.value), disabled: option.disabled }, option.title));
|
|
88
148
|
this.value = undefined;
|
|
89
149
|
this.items = undefined;
|
|
90
150
|
this.identifier = undefined;
|
|
@@ -109,9 +169,13 @@ export class MgInputSelect {
|
|
|
109
169
|
this.valueExist = undefined;
|
|
110
170
|
this.readonlyValue = undefined;
|
|
111
171
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
172
|
+
validateValue(newValue) {
|
|
173
|
+
var _a, _b;
|
|
174
|
+
if (allItemsAreString(this.items) && typeof newValue === 'string') {
|
|
175
|
+
this.readonlyValue = Boolean((_a = this.input) === null || _a === void 0 ? void 0 : _a.value) ? this.input.value : newValue;
|
|
176
|
+
}
|
|
177
|
+
else if (allItemsAreOptions(this.items)) {
|
|
178
|
+
this.readonlyValue = (_b = this.items.find(item => item.value === newValue)) === null || _b === void 0 ? void 0 : _b.title;
|
|
115
179
|
}
|
|
116
180
|
else {
|
|
117
181
|
this.readonlyValue = null;
|
|
@@ -125,14 +189,15 @@ export class MgInputSelect {
|
|
|
125
189
|
}
|
|
126
190
|
// String array
|
|
127
191
|
else if (allItemsAreString(newValue)) {
|
|
128
|
-
|
|
129
|
-
|
|
192
|
+
if (typeof this.value === 'string')
|
|
193
|
+
this.valueExist = newValue.includes(this.value);
|
|
194
|
+
this.options = newValue.map(item => ({ title: item, value: item }));
|
|
130
195
|
}
|
|
131
196
|
// Object array
|
|
132
|
-
else if (newValue
|
|
197
|
+
else if (allItemsAreOptions(newValue)) {
|
|
133
198
|
this.valueExist = newValue.map(item => item.value).includes(this.value);
|
|
134
199
|
// Grouped object options
|
|
135
|
-
if (newValue.some(item => item.group
|
|
200
|
+
if (newValue.some(item => Boolean(item.group))) {
|
|
136
201
|
this.options = newValue.reduce(groupOptions, []);
|
|
137
202
|
}
|
|
138
203
|
// Standart object options
|
|
@@ -177,6 +242,7 @@ export class MgInputSelect {
|
|
|
177
242
|
this.messages = initLocales(this.element).messages;
|
|
178
243
|
// Validate
|
|
179
244
|
this.validateItems(this.items);
|
|
245
|
+
this.validateValue(this.value);
|
|
180
246
|
// Set default placeholder
|
|
181
247
|
if (this.placeholder === undefined || this.placeholder === '') {
|
|
182
248
|
this.placeholder = this.messages.input.select.placeholder;
|
|
@@ -194,11 +260,11 @@ export class MgInputSelect {
|
|
|
194
260
|
* @returns {HTMLElement} HTML Element
|
|
195
261
|
*/
|
|
196
262
|
render() {
|
|
197
|
-
return (h(MgInput, { identifier: this.identifier, classList: this.classList, ariaDescribedbyIDs: [], label: this.label, labelOnTop: this.labelOnTop, labelHide: this.labelHide, required: this.required, readonly: this.readonly, mgWidth: this.mgWidth, disabled: this.disabled, value:
|
|
263
|
+
return (h(MgInput, { identifier: this.identifier, classList: this.classList, ariaDescribedbyIDs: [], label: this.label, labelOnTop: this.labelOnTop, labelHide: this.labelHide, required: this.required, readonly: this.readonly, mgWidth: this.mgWidth, disabled: this.disabled, value: undefined, readonlyValue: this.readonlyValue, tooltip: this.tooltip, helpText: this.helpText, errorMessage: this.errorMessage, isFieldset: false }, h("select", { class: "mg-input__box", id: this.identifier, name: this.name, title: this.placeholder, disabled: this.disabled, required: this.required, onInput: this.handleInput, onBlur: this.handleBlur, ref: el => {
|
|
198
264
|
if (el !== null)
|
|
199
265
|
this.input = el;
|
|
200
266
|
} }, (!this.placeholderHide || !this.valueExist) && ( // In case passed value does not match any option we display the placeholder
|
|
201
|
-
h("option", { value: "", disabled: this.placeholderDisabled && this.valueExist }, this.placeholder)), this.options.map(option => option
|
|
267
|
+
h("option", { value: "", disabled: this.placeholderDisabled && this.valueExist }, this.placeholder)), this.options.map(option => isOptGroup(option) ? h("optgroup", { label: option.group }, option.options.map(this.renderOption)) : isOption(option) && this.renderOption(option)))));
|
|
202
268
|
}
|
|
203
269
|
static get is() { return "mg-input-select"; }
|
|
204
270
|
static get encapsulation() { return "shadow"; }
|
|
@@ -235,8 +301,8 @@ export class MgInputSelect {
|
|
|
235
301
|
"type": "unknown",
|
|
236
302
|
"mutable": false,
|
|
237
303
|
"complexType": {
|
|
238
|
-
"original": "string
|
|
239
|
-
"resolved": "
|
|
304
|
+
"original": "(string | SelectOption)[]",
|
|
305
|
+
"resolved": "(string | SelectOption)[]",
|
|
240
306
|
"references": {
|
|
241
307
|
"SelectOption": {
|
|
242
308
|
"location": "import",
|
|
@@ -558,9 +624,13 @@ export class MgInputSelect {
|
|
|
558
624
|
"text": "Emited event when value change"
|
|
559
625
|
},
|
|
560
626
|
"complexType": {
|
|
561
|
-
"original": "
|
|
627
|
+
"original": "MgInputSelect['value']",
|
|
562
628
|
"resolved": "any",
|
|
563
|
-
"references": {
|
|
629
|
+
"references": {
|
|
630
|
+
"MgInputSelect": {
|
|
631
|
+
"location": "global"
|
|
632
|
+
}
|
|
633
|
+
}
|
|
564
634
|
}
|
|
565
635
|
}, {
|
|
566
636
|
"method": "inputValid",
|
|
@@ -606,7 +676,7 @@ export class MgInputSelect {
|
|
|
606
676
|
static get watchers() {
|
|
607
677
|
return [{
|
|
608
678
|
"propName": "value",
|
|
609
|
-
"methodName": "
|
|
679
|
+
"methodName": "validateValue"
|
|
610
680
|
}, {
|
|
611
681
|
"propName": "items",
|
|
612
682
|
"methodName": "validateItems"
|
|
@@ -6,19 +6,6 @@ export var Direction;
|
|
|
6
6
|
Direction["VERTICAL"] = "vertical";
|
|
7
7
|
Direction["HORIZONTAL"] = "horizontal";
|
|
8
8
|
})(Direction || (Direction = {}));
|
|
9
|
-
/**
|
|
10
|
-
* More item type guard
|
|
11
|
-
*
|
|
12
|
-
* @param {unknown} element element to control
|
|
13
|
-
* @returns {boolean} truthy if element is more-item
|
|
14
|
-
*/
|
|
15
|
-
export const isMoreItem = (element) => {
|
|
16
|
-
var _a, _b, _c;
|
|
17
|
-
const item = element;
|
|
18
|
-
return (item === undefined ||
|
|
19
|
-
(typeof item === 'object' &&
|
|
20
|
-
(typeof item.size === 'string' || typeof ((_a = item.mgIcon) === null || _a === void 0 ? void 0 : _a.icon) === 'string' || typeof ((_b = item.slotLabel) === null || _b === void 0 ? void 0 : _b.label) === 'string' || typeof ((_c = item.slotLabel) === null || _c === void 0 ? void 0 : _c.display) === 'boolean')));
|
|
21
|
-
};
|
|
22
9
|
/**
|
|
23
10
|
* List of all possibles sizes
|
|
24
11
|
*/
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { h, Host } from '@stencil/core';
|
|
2
|
-
import {
|
|
3
|
-
import { Direction, isMoreItem, sizes } from './mg-menu.conf';
|
|
4
|
-
import { initLocales } from '../../../../locales';
|
|
2
|
+
import { Direction, sizes } from './mg-menu.conf';
|
|
5
3
|
export class MgMenu {
|
|
6
4
|
constructor() {
|
|
7
5
|
/************
|
|
@@ -10,6 +8,9 @@ export class MgMenu {
|
|
|
10
8
|
this.name = 'mg-menu';
|
|
11
9
|
this.menuItems = [];
|
|
12
10
|
this.focusedMenuItem = 0;
|
|
11
|
+
/*************
|
|
12
|
+
* Methods *
|
|
13
|
+
*************/
|
|
13
14
|
/**
|
|
14
15
|
* Close matching menu-item
|
|
15
16
|
*
|
|
@@ -22,68 +23,74 @@ export class MgMenu {
|
|
|
22
23
|
item.expanded = false;
|
|
23
24
|
}
|
|
24
25
|
};
|
|
25
|
-
/*************
|
|
26
|
-
* Methods *
|
|
27
|
-
*************/
|
|
28
26
|
/**
|
|
29
|
-
*
|
|
27
|
+
* get mg-item-more element
|
|
30
28
|
*
|
|
29
|
+
* @returns {HTMLMgItemMoreElement} mg-item-more element
|
|
30
|
+
*/
|
|
31
|
+
this.getItemMore = () => this.element.querySelector('mg-item-more');
|
|
32
|
+
/**
|
|
33
|
+
* get mg-item-more >>> mg-menu-item element
|
|
34
|
+
*
|
|
35
|
+
* @returns {HTMLMgMenuItemElement} mg-item-more >>> mg-menu-item element
|
|
36
|
+
*/
|
|
37
|
+
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'); };
|
|
38
|
+
/**
|
|
39
|
+
* Set item listend
|
|
40
|
+
*
|
|
41
|
+
* @param {HTMLMgMenuItemElement} item mg-menu-item element
|
|
42
|
+
* @param {MgMenu['focusedMenuItem']} index number
|
|
31
43
|
* @returns {void}
|
|
32
44
|
*/
|
|
33
|
-
this.
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
this.menuItems.forEach((item, index) => {
|
|
41
|
-
this.closeMenuItem(item, index !== this.focusedMenuItem);
|
|
42
|
-
});
|
|
45
|
+
this.setItemListener = (item, index) => {
|
|
46
|
+
['click', 'focus'].forEach(trigger => {
|
|
47
|
+
(item.shadowRoot.querySelector('button') || item.shadowRoot.querySelector('a')).addEventListener(trigger, () => {
|
|
48
|
+
this.focusedMenuItem = index;
|
|
49
|
+
// reset expanded on previous active menu item
|
|
50
|
+
(Boolean(this.getItemMoreMenuItem()) ? [...this.menuItems, this.getItemMoreMenuItem()] : this.menuItems).forEach((item, index) => {
|
|
51
|
+
this.closeMenuItem(item, index !== this.focusedMenuItem);
|
|
43
52
|
});
|
|
44
53
|
});
|
|
45
54
|
});
|
|
46
55
|
};
|
|
47
56
|
/**
|
|
48
|
-
*
|
|
57
|
+
* Store menu-items on component init and add listeners
|
|
49
58
|
*
|
|
50
|
-
* @returns {
|
|
59
|
+
* @returns {void}
|
|
51
60
|
*/
|
|
52
|
-
this.
|
|
53
|
-
|
|
54
|
-
this.menuItems.forEach((
|
|
55
|
-
|
|
56
|
-
moreElement.querySelector('mg-menu').appendChild(proxy);
|
|
57
|
-
});
|
|
58
|
-
const allMenuItem = Array.from(this.element.querySelectorAll('mg-menu-item:not([data-overflow-more])'));
|
|
59
|
-
Array.from(moreElement.querySelectorAll('mg-menu-item:not([data-overflow-more])')).forEach((proxy, index) => {
|
|
60
|
-
// manage click on proxy to mirror it on initial element
|
|
61
|
-
proxy.addEventListener('click', () => {
|
|
62
|
-
(allMenuItem[index].shadowRoot.querySelector('a') || allMenuItem[index].shadowRoot.querySelector('button')).dispatchEvent(new MouseEvent('click', { bubbles: true }));
|
|
63
|
-
});
|
|
64
|
-
// manage status change miror in proxy
|
|
65
|
-
allMenuItem[index].addEventListener('status-change', (event) => {
|
|
66
|
-
proxy.setAttribute('status', event.detail);
|
|
67
|
-
});
|
|
61
|
+
this.initMenuItemsListeners = () => {
|
|
62
|
+
// add listeners on menu item and edit index
|
|
63
|
+
this.menuItems.forEach((item, index) => {
|
|
64
|
+
this.setItemListener(item, index);
|
|
68
65
|
});
|
|
69
|
-
this.element.appendChild(moreElement);
|
|
70
|
-
return this.element.querySelector(`[${OverflowBehaviorElements.MORE}]`);
|
|
71
66
|
};
|
|
72
67
|
/**
|
|
73
|
-
*
|
|
68
|
+
* Handle item-loaded event on mg-item-more element
|
|
74
69
|
*
|
|
75
|
-
* @returns {
|
|
70
|
+
* @returns {void}
|
|
76
71
|
*/
|
|
77
|
-
this.
|
|
78
|
-
|
|
79
|
-
|
|
72
|
+
this.handleItemLoaded = () => {
|
|
73
|
+
this.setItemListener(this.getItemMoreMenuItem(), this.menuItems.length);
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* render mg-item-more
|
|
77
|
+
*
|
|
78
|
+
* @returns {void}
|
|
79
|
+
*/
|
|
80
|
+
this.renderMgItemMore = () => {
|
|
81
|
+
// /!\ externalise item tag name to get a string type and bypass type checking when value is used in next createElement
|
|
82
|
+
// by doing this we prevent stencil to generate a circular dependencies graph at build time with mg-item-more component.
|
|
83
|
+
const item = 'mg-item-more';
|
|
84
|
+
const mgItemMore = document.createElement(item);
|
|
85
|
+
Object.assign(mgItemMore, this.itemmore);
|
|
86
|
+
mgItemMore.addEventListener('item-loaded', this.handleItemLoaded);
|
|
87
|
+
this.element.appendChild(mgItemMore);
|
|
80
88
|
};
|
|
81
89
|
this.label = undefined;
|
|
82
90
|
this.direction = Direction.HORIZONTAL;
|
|
83
|
-
this.
|
|
91
|
+
this.itemmore = undefined;
|
|
84
92
|
this.size = 'regular';
|
|
85
93
|
this.isChildMenu = undefined;
|
|
86
|
-
this.hasOverflow = false;
|
|
87
94
|
}
|
|
88
95
|
validateLabel(newValue) {
|
|
89
96
|
if (newValue === undefined) {
|
|
@@ -95,12 +102,9 @@ export class MgMenu {
|
|
|
95
102
|
throw new Error(`<${this.name}> prop "direction" must be one of: ${Direction.HORIZONTAL}, ${Direction.VERTICAL}.`);
|
|
96
103
|
}
|
|
97
104
|
}
|
|
98
|
-
|
|
105
|
+
validateItemMore(newValue) {
|
|
99
106
|
if (newValue !== undefined && this.direction !== Direction.HORIZONTAL) {
|
|
100
|
-
throw new Error(`<${this.name}> prop "
|
|
101
|
-
}
|
|
102
|
-
else if (newValue !== undefined && !isMoreItem(newValue)) {
|
|
103
|
-
throw new Error(`<${this.name}> prop "moreitem" must match MoreItemType.`);
|
|
107
|
+
throw new Error(`<${this.name}> prop "itemmore" must be paired with direction ${Direction.HORIZONTAL}.`);
|
|
104
108
|
}
|
|
105
109
|
}
|
|
106
110
|
validateSize(newValue) {
|
|
@@ -117,11 +121,9 @@ export class MgMenu {
|
|
|
117
121
|
* @returns {void}
|
|
118
122
|
*/
|
|
119
123
|
componentWillLoad() {
|
|
120
|
-
this.messages = initLocales(this.element).messages.plusMenu;
|
|
121
|
-
// validation
|
|
122
124
|
this.validateDirection(this.direction);
|
|
123
125
|
this.validateLabel(this.label);
|
|
124
|
-
this.
|
|
126
|
+
this.validateItemMore(this.itemmore);
|
|
125
127
|
this.validateSize(this.size);
|
|
126
128
|
}
|
|
127
129
|
/**
|
|
@@ -137,36 +139,39 @@ export class MgMenu {
|
|
|
137
139
|
// store all menu-items
|
|
138
140
|
this.menuItems = Array.from(this.element.children).filter(child => child.nodeName === 'MG-MENU-ITEM');
|
|
139
141
|
this.isChildMenu = this.element.closest('mg-menu-item') !== null;
|
|
140
|
-
|
|
141
|
-
if (this.
|
|
142
|
-
this.
|
|
142
|
+
// add mg-item-more to manage OverflowBehavior
|
|
143
|
+
if (this.direction === Direction.HORIZONTAL && !this.isChildMenu)
|
|
144
|
+
this.renderMgItemMore();
|
|
145
|
+
// use mutation observer to improve reactivity
|
|
146
|
+
new MutationObserver(entries => {
|
|
147
|
+
const mgItemMore = this.getItemMore();
|
|
148
|
+
// prevent infinit loop by exclude mg-item-more deletion entry
|
|
149
|
+
if (entries.some(entry => entry.type === 'childList' && Array.from(entry.removedNodes).some(node => node.nodeName === 'MG-ITEM-MORE')))
|
|
150
|
+
return;
|
|
151
|
+
else if (mgItemMore !== null) {
|
|
152
|
+
// render a new mg-item-more
|
|
153
|
+
mgItemMore.remove();
|
|
154
|
+
mgItemMore.removeEventListener('item-loaded', this.handleItemLoaded);
|
|
155
|
+
this.renderMgItemMore();
|
|
156
|
+
}
|
|
157
|
+
}).observe(this.element, { childList: true, characterData: true, subtree: true });
|
|
143
158
|
}, 0);
|
|
144
159
|
}
|
|
145
160
|
/**
|
|
146
|
-
*
|
|
161
|
+
* Add listeners to items
|
|
147
162
|
*
|
|
148
163
|
* @returns {void}
|
|
149
164
|
*/
|
|
150
165
|
componentDidRender() {
|
|
151
|
-
// add menu items listeners
|
|
152
166
|
this.initMenuItemsListeners();
|
|
153
167
|
}
|
|
154
|
-
/**
|
|
155
|
-
* Disconnect overflow ResizeObserver
|
|
156
|
-
*
|
|
157
|
-
* @returns {void} run overflow resize obeserver disconnexion
|
|
158
|
-
*/
|
|
159
|
-
disconnectedCallback() {
|
|
160
|
-
if (this.hasOverflow)
|
|
161
|
-
this.overflowBehavior.disconnect();
|
|
162
|
-
}
|
|
163
168
|
/**
|
|
164
169
|
* Render
|
|
165
170
|
*
|
|
166
171
|
* @returns {HTMLElement} HTML Element
|
|
167
172
|
*/
|
|
168
173
|
render() {
|
|
169
|
-
return (h(Host, { role: this.isChildMenu ? 'menu' : 'menubar', "aria-label": this.label }, h("slot", null)
|
|
174
|
+
return (h(Host, { role: this.isChildMenu ? 'menu' : 'menubar', "aria-label": this.label }, h("slot", null)));
|
|
170
175
|
}
|
|
171
176
|
static get is() { return "mg-menu"; }
|
|
172
177
|
static get encapsulation() { return "shadow"; }
|
|
@@ -222,14 +227,14 @@ export class MgMenu {
|
|
|
222
227
|
"reflect": true,
|
|
223
228
|
"defaultValue": "Direction.HORIZONTAL"
|
|
224
229
|
},
|
|
225
|
-
"
|
|
230
|
+
"itemmore": {
|
|
226
231
|
"type": "unknown",
|
|
227
232
|
"mutable": false,
|
|
228
233
|
"complexType": {
|
|
229
|
-
"original": "
|
|
230
|
-
"resolved": "{
|
|
234
|
+
"original": "ItemMoreType",
|
|
235
|
+
"resolved": "{ size: \"regular\" | \"large\" | \"medium\"; icon: IconType; slotlabel: SlotLabelType; }",
|
|
231
236
|
"references": {
|
|
232
|
-
"
|
|
237
|
+
"ItemMoreType": {
|
|
233
238
|
"location": "import",
|
|
234
239
|
"path": "./mg-menu.conf"
|
|
235
240
|
}
|
|
@@ -239,7 +244,7 @@ export class MgMenu {
|
|
|
239
244
|
"optional": false,
|
|
240
245
|
"docs": {
|
|
241
246
|
"tags": [],
|
|
242
|
-
"text": "Customize mg-
|
|
247
|
+
"text": "Customize \"mg-item-more\" element\nUsed with direction: 'vertical' to manage overflow"
|
|
243
248
|
}
|
|
244
249
|
},
|
|
245
250
|
"size": {
|
|
@@ -269,8 +274,7 @@ export class MgMenu {
|
|
|
269
274
|
}
|
|
270
275
|
static get states() {
|
|
271
276
|
return {
|
|
272
|
-
"isChildMenu": {}
|
|
273
|
-
"hasOverflow": {}
|
|
277
|
+
"isChildMenu": {}
|
|
274
278
|
};
|
|
275
279
|
}
|
|
276
280
|
static get elementRef() { return "element"; }
|
|
@@ -282,8 +286,8 @@ export class MgMenu {
|
|
|
282
286
|
"propName": "direction",
|
|
283
287
|
"methodName": "validateDirection"
|
|
284
288
|
}, {
|
|
285
|
-
"propName": "
|
|
286
|
-
"methodName": "
|
|
289
|
+
"propName": "itemmore",
|
|
290
|
+
"methodName": "validateItemMore"
|
|
287
291
|
}, {
|
|
288
292
|
"propName": "size",
|
|
289
293
|
"methodName": "validateSize"
|