@mgdis/mg-components 5.18.0 → 5.19.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.
Files changed (358) hide show
  1. package/dist/cjs/{mg-menu.conf-43aacf30.js → components.utils-dc9c8a53.js} +160 -7
  2. package/dist/cjs/components.utils-dc9c8a53.js.map +1 -0
  3. package/dist/cjs/index-c042e24b.js +18 -1
  4. package/dist/cjs/loader.cjs.js +1 -1
  5. package/dist/cjs/mg-action-more_34.cjs.entry.js +381 -465
  6. package/dist/cjs/mg-action-more_34.cjs.entry.js.map +1 -1
  7. package/dist/cjs/mg-components.cjs.js +1 -1
  8. package/dist/cjs/mg-item-more.cjs.entry.js +7 -6
  9. package/dist/cjs/mg-item-more.cjs.entry.js.map +1 -1
  10. package/dist/collection/components/atoms/mg-badge/mg-badge.js +10 -10
  11. package/dist/collection/components/atoms/mg-badge/mg-badge.js.map +1 -1
  12. package/dist/collection/components/atoms/mg-badge/test/mg-badge.spec.js +5 -5
  13. package/dist/collection/components/atoms/mg-badge/test/mg-badge.spec.js.map +1 -1
  14. package/dist/collection/components/atoms/mg-button/mg-button.js +13 -12
  15. package/dist/collection/components/atoms/mg-button/mg-button.js.map +1 -1
  16. package/dist/collection/components/atoms/mg-button/test/mg-button.e2e.js +4 -4
  17. package/dist/collection/components/atoms/mg-button/test/mg-button.e2e.js.map +1 -1
  18. package/dist/collection/components/atoms/mg-button/test/mg-button.spec.js +3 -3
  19. package/dist/collection/components/atoms/mg-button/test/mg-button.spec.js.map +1 -1
  20. package/dist/collection/components/atoms/mg-card/mg-card.js +13 -13
  21. package/dist/collection/components/atoms/mg-card/mg-card.js.map +1 -1
  22. package/dist/collection/components/atoms/mg-character-left/mg-character-left.js +3 -3
  23. package/dist/collection/components/atoms/mg-character-left/mg-character-left.js.map +1 -1
  24. package/dist/collection/components/atoms/mg-divider/mg-divider.js +4 -4
  25. package/dist/collection/components/atoms/mg-divider/mg-divider.js.map +1 -1
  26. package/dist/collection/components/atoms/mg-icon/mg-icon.js +15 -17
  27. package/dist/collection/components/atoms/mg-icon/mg-icon.js.map +1 -1
  28. package/dist/collection/components/atoms/mg-icon/test/mg-icon.spec.js +4 -4
  29. package/dist/collection/components/atoms/mg-icon/test/mg-icon.spec.js.map +1 -1
  30. package/dist/collection/components/atoms/mg-input-title/mg-input-title.js +24 -5
  31. package/dist/collection/components/atoms/mg-input-title/mg-input-title.js.map +1 -1
  32. package/dist/collection/components/atoms/mg-input-title/test/mg-input-title.e2e.playwright.js +12 -0
  33. package/dist/collection/components/atoms/mg-input-title/test/mg-input-title.e2e.playwright.js.map +1 -0
  34. package/dist/collection/components/atoms/mg-input-title/test/mg-input-title.spec.js +1 -5
  35. package/dist/collection/components/atoms/mg-input-title/test/mg-input-title.spec.js.map +1 -1
  36. package/dist/collection/components/atoms/mg-tag/mg-tag.js +9 -9
  37. package/dist/collection/components/atoms/mg-tag/mg-tag.js.map +1 -1
  38. package/dist/collection/components/atoms/mg-tag/test/mg-tag.e2e.playwright.js +23 -0
  39. package/dist/collection/components/atoms/mg-tag/test/mg-tag.e2e.playwright.js.map +1 -0
  40. package/dist/collection/components/atoms/mg-tag/test/mg-tag.spec.js +5 -5
  41. package/dist/collection/components/atoms/mg-tag/test/mg-tag.spec.js.map +1 -1
  42. package/dist/collection/components/atoms/mg-tooltip/mg-tooltip-content/mg-tooltip-content.js +2 -2
  43. package/dist/collection/components/atoms/mg-tooltip/mg-tooltip-content/mg-tooltip-content.js.map +1 -1
  44. package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.js +7 -7
  45. package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.js.map +1 -1
  46. package/dist/collection/components/atoms/mg-tooltip/test/mg-tooltip.e2e.js +1 -1
  47. package/dist/collection/components/atoms/mg-tooltip/test/mg-tooltip.e2e.js.map +1 -1
  48. package/dist/collection/components/atoms/mg-tooltip/test/mg-tooltip.spec.js +1 -1
  49. package/dist/collection/components/atoms/mg-tooltip/test/mg-tooltip.spec.js.map +1 -1
  50. package/dist/collection/components/molecules/inputs/MgInput.js +14 -13
  51. package/dist/collection/components/molecules/inputs/MgInput.js.map +1 -1
  52. package/dist/collection/components/molecules/inputs/mg-input-checkbox/MgInputCheckboxList.js +7 -4
  53. package/dist/collection/components/molecules/inputs/mg-input-checkbox/MgInputCheckboxList.js.map +1 -1
  54. package/dist/collection/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox-paginated/mg-input-checkbox-paginated.js +20 -2
  55. package/dist/collection/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox-paginated/mg-input-checkbox-paginated.js.map +1 -1
  56. package/dist/collection/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.conf.js.map +1 -1
  57. package/dist/collection/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.js +25 -27
  58. package/dist/collection/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.js.map +1 -1
  59. package/dist/collection/components/molecules/inputs/mg-input-checkbox/test/mg-input-checkbox.e2e.playwright.js +21 -27
  60. package/dist/collection/components/molecules/inputs/mg-input-checkbox/test/mg-input-checkbox.e2e.playwright.js.map +1 -1
  61. package/dist/collection/components/molecules/inputs/mg-input-checkbox/test/mg-input-checkbox.spec.js +9 -7
  62. package/dist/collection/components/molecules/inputs/mg-input-checkbox/test/mg-input-checkbox.spec.js.map +1 -1
  63. package/dist/collection/components/molecules/inputs/mg-input-date/mg-input-date.js +6 -6
  64. package/dist/collection/components/molecules/inputs/mg-input-date/mg-input-date.js.map +1 -1
  65. package/dist/collection/components/molecules/inputs/mg-input-numeric/mg-input-numeric.js +11 -10
  66. package/dist/collection/components/molecules/inputs/mg-input-numeric/mg-input-numeric.js.map +1 -1
  67. package/dist/collection/components/molecules/inputs/mg-input-password/mg-input-password.js +6 -6
  68. package/dist/collection/components/molecules/inputs/mg-input-password/mg-input-password.js.map +1 -1
  69. package/dist/collection/components/molecules/inputs/mg-input-radio/mg-input-radio.js +6 -6
  70. package/dist/collection/components/molecules/inputs/mg-input-radio/mg-input-radio.js.map +1 -1
  71. package/dist/collection/components/molecules/inputs/mg-input-radio/test/mg-input-radio.e2e.js +1 -1
  72. package/dist/collection/components/molecules/inputs/mg-input-radio/test/mg-input-radio.e2e.js.map +1 -1
  73. package/dist/collection/components/molecules/inputs/mg-input-select/mg-input-select.js +8 -8
  74. package/dist/collection/components/molecules/inputs/mg-input-select/mg-input-select.js.map +1 -1
  75. package/dist/collection/components/molecules/inputs/mg-input-text/mg-input-text.conf.js +6 -0
  76. package/dist/collection/components/molecules/inputs/mg-input-text/mg-input-text.conf.js.map +1 -0
  77. package/dist/collection/components/molecules/inputs/mg-input-text/mg-input-text.js +52 -14
  78. package/dist/collection/components/molecules/inputs/mg-input-text/mg-input-text.js.map +1 -1
  79. package/dist/collection/components/molecules/inputs/mg-input-text/test/mg-input-text.e2e.playwright.js +147 -0
  80. package/dist/collection/components/molecules/inputs/mg-input-text/test/mg-input-text.e2e.playwright.js.map +1 -0
  81. package/dist/collection/components/molecules/inputs/mg-input-text/test/mg-input-text.spec.js +12 -2
  82. package/dist/collection/components/molecules/inputs/mg-input-text/test/mg-input-text.spec.js.map +1 -1
  83. package/dist/collection/components/molecules/inputs/mg-input-textarea/mg-input-textarea.js +12 -12
  84. package/dist/collection/components/molecules/inputs/mg-input-textarea/mg-input-textarea.js.map +1 -1
  85. package/dist/collection/components/molecules/inputs/mg-input-textarea/test/mg-input-textarea.spec.js +2 -2
  86. package/dist/collection/components/molecules/inputs/mg-input-textarea/test/mg-input-textarea.spec.js.map +1 -1
  87. package/dist/collection/components/molecules/inputs/mg-input-toggle/mg-input-toggle.js +86 -10
  88. package/dist/collection/components/molecules/inputs/mg-input-toggle/mg-input-toggle.js.map +1 -1
  89. package/dist/collection/components/molecules/inputs/mg-input-toggle/test/mg-input-toggle.e2e.playwright.js +108 -0
  90. package/dist/collection/components/molecules/inputs/mg-input-toggle/test/mg-input-toggle.e2e.playwright.js.map +1 -0
  91. package/dist/collection/components/molecules/inputs/mg-input-toggle/test/mg-input-toggle.spec.js +46 -2
  92. package/dist/collection/components/molecules/inputs/mg-input-toggle/test/mg-input-toggle.spec.js.map +1 -1
  93. package/dist/collection/components/molecules/menu/mg-menu/mg-menu.js +3 -3
  94. package/dist/collection/components/molecules/menu/mg-menu/mg-menu.js.map +1 -1
  95. package/dist/collection/components/molecules/menu/mg-menu/test/{mg-menu.e2e.js → mg-menu.e2e.playwright.js} +67 -96
  96. package/dist/collection/components/molecules/menu/mg-menu/test/mg-menu.e2e.playwright.js.map +1 -0
  97. package/dist/collection/components/molecules/menu/mg-menu-item/mg-menu-item.js +8 -9
  98. package/dist/collection/components/molecules/menu/mg-menu-item/mg-menu-item.js.map +1 -1
  99. package/dist/collection/components/molecules/menu/mg-menu-item/test/mg-menu-item.e2e.playwright.js +100 -0
  100. package/dist/collection/components/molecules/menu/mg-menu-item/test/mg-menu-item.e2e.playwright.js.map +1 -0
  101. package/dist/collection/components/molecules/mg-action-more/mg-action-more.conf.js.map +1 -1
  102. package/dist/collection/components/molecules/mg-action-more/mg-action-more.js +7 -7
  103. package/dist/collection/components/molecules/mg-action-more/mg-action-more.js.map +1 -1
  104. package/dist/collection/components/molecules/mg-details/mg-details.js +5 -4
  105. package/dist/collection/components/molecules/mg-details/mg-details.js.map +1 -1
  106. package/dist/collection/components/molecules/mg-details/test/mg-details.spec.js +1 -1
  107. package/dist/collection/components/molecules/mg-details/test/mg-details.spec.js.map +1 -1
  108. package/dist/collection/components/molecules/mg-form/mg-form.js +6 -5
  109. package/dist/collection/components/molecules/mg-form/mg-form.js.map +1 -1
  110. package/dist/collection/components/molecules/mg-form/test/mg-form.spec.js +4 -4
  111. package/dist/collection/components/molecules/mg-form/test/mg-form.spec.js.map +1 -1
  112. package/dist/collection/components/molecules/mg-illustrated-message/mg-illustrated-message.js +7 -7
  113. package/dist/collection/components/molecules/mg-illustrated-message/mg-illustrated-message.js.map +1 -1
  114. package/dist/collection/components/molecules/mg-item-more/mg-item-more.js +5 -4
  115. package/dist/collection/components/molecules/mg-item-more/mg-item-more.js.map +1 -1
  116. package/dist/collection/components/molecules/mg-message/mg-message.js +8 -8
  117. package/dist/collection/components/molecules/mg-message/mg-message.js.map +1 -1
  118. package/dist/collection/components/molecules/mg-message/test/mg-message.spec.js +11 -11
  119. package/dist/collection/components/molecules/mg-message/test/mg-message.spec.js.map +1 -1
  120. package/dist/collection/components/molecules/mg-modal/mg-modal.js +8 -8
  121. package/dist/collection/components/molecules/mg-modal/mg-modal.js.map +1 -1
  122. package/dist/collection/components/molecules/mg-modal/test/mg-modal.e2e.playwright.js +7 -7
  123. package/dist/collection/components/molecules/mg-modal/test/mg-modal.e2e.playwright.js.map +1 -1
  124. package/dist/collection/components/molecules/mg-modal/test/mg-modal.firefox.e2e.playwright.js +3 -3
  125. package/dist/collection/components/molecules/mg-modal/test/mg-modal.firefox.e2e.playwright.js.map +1 -1
  126. package/dist/collection/components/molecules/mg-modal/test/mg-modal.spec.js +1 -1
  127. package/dist/collection/components/molecules/mg-modal/test/mg-modal.spec.js.map +1 -1
  128. package/dist/collection/components/molecules/mg-pagination/mg-pagination.js +3 -3
  129. package/dist/collection/components/molecules/mg-pagination/mg-pagination.js.map +1 -1
  130. package/dist/collection/components/molecules/mg-panel/mg-panel.js +9 -9
  131. package/dist/collection/components/molecules/mg-panel/mg-panel.js.map +1 -1
  132. package/dist/collection/components/molecules/mg-panel/test/mg-panel.e2e.playwright.js +2 -2
  133. package/dist/collection/components/molecules/mg-panel/test/mg-panel.e2e.playwright.js.map +1 -1
  134. package/dist/collection/components/molecules/mg-panel/test/mg-panel.spec.js +8 -8
  135. package/dist/collection/components/molecules/mg-panel/test/mg-panel.spec.js.map +1 -1
  136. package/dist/collection/components/molecules/mg-popover/mg-popover-content/mg-popover-content.js +4 -4
  137. package/dist/collection/components/molecules/mg-popover/mg-popover-content/mg-popover-content.js.map +1 -1
  138. package/dist/collection/components/molecules/mg-popover/mg-popover.js +2 -2
  139. package/dist/collection/components/molecules/mg-popover/mg-popover.js.map +1 -1
  140. package/dist/collection/components/molecules/mg-popover/test/{mg-popover.e2e.js → mg-popover.e2e.playwright.js} +46 -65
  141. package/dist/collection/components/molecules/mg-popover/test/mg-popover.e2e.playwright.js.map +1 -0
  142. package/dist/collection/components/molecules/mg-skip-links/mg-skip-links.js +5 -6
  143. package/dist/collection/components/molecules/mg-skip-links/mg-skip-links.js.map +1 -1
  144. package/dist/collection/components/molecules/mg-tabs/mg-tabs.js +34 -34
  145. package/dist/collection/components/molecules/mg-tabs/mg-tabs.js.map +1 -1
  146. package/dist/collection/components/molecules/mg-tabs/test/mg-tabs.spec.js +13 -13
  147. package/dist/collection/components/molecules/mg-tabs/test/mg-tabs.spec.js.map +1 -1
  148. package/dist/collection/locales/en/messages.json +3 -3
  149. package/dist/collection/locales/fr/messages.json +3 -3
  150. package/dist/collection/utils/behaviors.utils.js +2 -1
  151. package/dist/collection/utils/behaviors.utils.js.map +1 -1
  152. package/dist/collection/utils/components.utils.js +10 -0
  153. package/dist/collection/utils/components.utils.js.map +1 -1
  154. package/dist/collection/utils/components.utils.spec.js +14 -1
  155. package/dist/collection/utils/components.utils.spec.js.map +1 -1
  156. package/dist/collection/utils/playwright.e2e.test.utils.js +3 -3
  157. package/dist/collection/utils/playwright.e2e.test.utils.js.map +1 -1
  158. package/dist/collection/utils/unit.test.utils.js +0 -3
  159. package/dist/collection/utils/unit.test.utils.js.map +1 -1
  160. package/dist/collection/variables.css +1 -275
  161. package/dist/components/MgInput.js +19 -18
  162. package/dist/components/MgInput.js.map +1 -1
  163. package/dist/components/components.utils.js +11 -1
  164. package/dist/components/components.utils.js.map +1 -1
  165. package/dist/components/index2.js +6 -6
  166. package/dist/components/mg-action-more.js +6 -6
  167. package/dist/components/mg-action-more.js.map +1 -1
  168. package/dist/components/mg-badge2.js +9 -9
  169. package/dist/components/mg-badge2.js.map +1 -1
  170. package/dist/components/mg-button2.js +12 -11
  171. package/dist/components/mg-button2.js.map +1 -1
  172. package/dist/components/mg-card2.js +12 -12
  173. package/dist/components/mg-card2.js.map +1 -1
  174. package/dist/components/mg-character-left2.js +1 -1
  175. package/dist/components/mg-character-left2.js.map +1 -1
  176. package/dist/components/mg-details.js +4 -3
  177. package/dist/components/mg-details.js.map +1 -1
  178. package/dist/components/mg-divider.js +3 -3
  179. package/dist/components/mg-divider.js.map +1 -1
  180. package/dist/components/mg-form.js +5 -4
  181. package/dist/components/mg-form.js.map +1 -1
  182. package/dist/components/mg-icon2.js +14 -16
  183. package/dist/components/mg-icon2.js.map +1 -1
  184. package/dist/components/mg-illustrated-message.js +7 -7
  185. package/dist/components/mg-illustrated-message.js.map +1 -1
  186. package/dist/components/mg-input-checkbox-paginated2.js +13 -8
  187. package/dist/components/mg-input-checkbox-paginated2.js.map +1 -1
  188. package/dist/components/mg-input-checkbox.js +24 -26
  189. package/dist/components/mg-input-checkbox.js.map +1 -1
  190. package/dist/components/mg-input-date.js +5 -5
  191. package/dist/components/mg-input-date.js.map +1 -1
  192. package/dist/components/mg-input-numeric.js +10 -9
  193. package/dist/components/mg-input-numeric.js.map +1 -1
  194. package/dist/components/mg-input-password.js +5 -5
  195. package/dist/components/mg-input-password.js.map +1 -1
  196. package/dist/components/mg-input-radio.js +5 -5
  197. package/dist/components/mg-input-radio.js.map +1 -1
  198. package/dist/components/mg-input-select2.js +7 -7
  199. package/dist/components/mg-input-select2.js.map +1 -1
  200. package/dist/components/mg-input-text2.js +29 -12
  201. package/dist/components/mg-input-text2.js.map +1 -1
  202. package/dist/components/mg-input-textarea.js +12 -12
  203. package/dist/components/mg-input-textarea.js.map +1 -1
  204. package/dist/components/mg-input-title2.js +7 -4
  205. package/dist/components/mg-input-title2.js.map +1 -1
  206. package/dist/components/mg-input-toggle.js +48 -10
  207. package/dist/components/mg-input-toggle.js.map +1 -1
  208. package/dist/components/mg-item-more.js +6 -4
  209. package/dist/components/mg-item-more.js.map +1 -1
  210. package/dist/components/mg-menu-item2.js +7 -8
  211. package/dist/components/mg-menu-item2.js.map +1 -1
  212. package/dist/components/mg-menu2.js +2 -2
  213. package/dist/components/mg-menu2.js.map +1 -1
  214. package/dist/components/mg-message.js +7 -7
  215. package/dist/components/mg-message.js.map +1 -1
  216. package/dist/components/mg-modal.js +7 -7
  217. package/dist/components/mg-modal.js.map +1 -1
  218. package/dist/components/mg-pagination2.js +2 -2
  219. package/dist/components/mg-pagination2.js.map +1 -1
  220. package/dist/components/mg-panel.js +8 -8
  221. package/dist/components/mg-panel.js.map +1 -1
  222. package/dist/components/mg-popover-content2.js +4 -4
  223. package/dist/components/mg-popover-content2.js.map +1 -1
  224. package/dist/components/mg-popover2.js.map +1 -1
  225. package/dist/components/mg-skip-links.js +4 -5
  226. package/dist/components/mg-skip-links.js.map +1 -1
  227. package/dist/components/mg-tabs.js +33 -33
  228. package/dist/components/mg-tabs.js.map +1 -1
  229. package/dist/components/mg-tag.js +8 -8
  230. package/dist/components/mg-tag.js.map +1 -1
  231. package/dist/components/mg-tooltip-content2.js +1 -1
  232. package/dist/components/mg-tooltip-content2.js.map +1 -1
  233. package/dist/components/mg-tooltip2.js +5 -5
  234. package/dist/components/mg-tooltip2.js.map +1 -1
  235. package/dist/esm/{mg-menu.conf-012fc9b4.js → components.utils-0f76010d.js} +153 -8
  236. package/dist/esm/components.utils-0f76010d.js.map +1 -0
  237. package/dist/esm/index-ce01e63b.js +18 -1
  238. package/dist/esm/loader.js +1 -1
  239. package/dist/esm/mg-action-more_34.entry.js +315 -399
  240. package/dist/esm/mg-action-more_34.entry.js.map +1 -1
  241. package/dist/esm/mg-components.js +1 -1
  242. package/dist/esm/mg-item-more.entry.js +6 -5
  243. package/dist/esm/mg-item-more.entry.js.map +1 -1
  244. package/dist/mg-components/locales/en/messages.json +3 -3
  245. package/dist/mg-components/locales/fr/messages.json +3 -3
  246. package/dist/mg-components/mg-components.css +1 -1
  247. package/dist/mg-components/mg-components.esm.js +1 -1
  248. package/dist/mg-components/mg-components.esm.js.map +1 -1
  249. package/dist/mg-components/p-01ebc95a.entry.js +2 -0
  250. package/dist/mg-components/p-01ebc95a.entry.js.map +1 -0
  251. package/dist/mg-components/p-71a5a848.entry.js +2 -0
  252. package/dist/mg-components/p-71a5a848.entry.js.map +1 -0
  253. package/dist/mg-components/p-c9e2c669.js +2 -0
  254. package/dist/mg-components/p-c9e2c669.js.map +1 -0
  255. package/dist/mg-components/variables.css +1 -275
  256. package/dist/types/components/atoms/mg-card/mg-card.d.ts +1 -1
  257. package/dist/types/components/atoms/mg-input-title/mg-input-title.d.ts +5 -1
  258. package/dist/types/components/atoms/mg-tag/test/mg-tag.e2e.playwright.d.ts +1 -0
  259. package/dist/types/components/atoms/mg-tooltip/mg-tooltip.d.ts +2 -2
  260. package/dist/types/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox-paginated/mg-input-checkbox-paginated.d.ts +5 -1
  261. package/dist/types/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.conf.d.ts +5 -8
  262. package/dist/types/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.d.ts +2 -2
  263. package/dist/types/components/molecules/inputs/mg-input-text/mg-input-text.conf.d.ts +9 -0
  264. package/dist/types/components/molecules/inputs/mg-input-text/mg-input-text.d.ts +13 -1
  265. package/dist/types/components/molecules/inputs/mg-input-text/test/mg-input-text.e2e.playwright.d.ts +1 -0
  266. package/dist/types/components/molecules/inputs/mg-input-toggle/mg-input-toggle.d.ts +22 -0
  267. package/dist/types/components/molecules/inputs/mg-input-toggle/test/mg-input-toggle.e2e.playwright.d.ts +1 -0
  268. package/dist/types/components/molecules/menu/mg-menu/test/mg-menu.e2e.playwright.d.ts +1 -0
  269. package/dist/types/components/molecules/menu/mg-menu-item/test/mg-menu-item.e2e.playwright.d.ts +1 -0
  270. package/dist/types/components/molecules/mg-action-more/mg-action-more.conf.d.ts +1 -3
  271. package/dist/types/components/molecules/mg-action-more/mg-action-more.d.ts +2 -1
  272. package/dist/types/components/molecules/mg-panel/mg-panel.d.ts +2 -2
  273. package/dist/types/components/molecules/mg-popover/mg-popover.d.ts +1 -1
  274. package/dist/types/components/molecules/mg-popover/test/mg-popover.e2e.playwright.d.ts +1 -0
  275. package/dist/types/components/molecules/mg-tabs/mg-tabs.d.ts +6 -5
  276. package/dist/types/components.d.ts +34 -2
  277. package/dist/types/utils/components.utils.d.ts +6 -0
  278. package/package.json +21 -22
  279. package/readme.md +0 -31
  280. package/dist/cjs/mg-menu.conf-43aacf30.js.map +0 -1
  281. package/dist/collection/components/atoms/mg-badge/mg-badge.css +0 -116
  282. package/dist/collection/components/atoms/mg-button/mg-button.css +0 -182
  283. package/dist/collection/components/atoms/mg-card/mg-card.css +0 -75
  284. package/dist/collection/components/atoms/mg-character-left/mg-character-left.css +0 -3
  285. package/dist/collection/components/atoms/mg-divider/mg-divider.css +0 -9
  286. package/dist/collection/components/atoms/mg-icon/mg-icon.css +0 -138
  287. package/dist/collection/components/atoms/mg-input-title/mg-input-title.css +0 -12
  288. package/dist/collection/components/atoms/mg-input-title/test/mg-input-title.e2e.js +0 -18
  289. package/dist/collection/components/atoms/mg-input-title/test/mg-input-title.e2e.js.map +0 -1
  290. package/dist/collection/components/atoms/mg-tag/mg-tag.css +0 -131
  291. package/dist/collection/components/atoms/mg-tag/test/mg-tag.e2e.js +0 -37
  292. package/dist/collection/components/atoms/mg-tag/test/mg-tag.e2e.js.map +0 -1
  293. package/dist/collection/components/atoms/mg-tooltip/mg-tooltip-content/mg-tooltip-content.css +0 -43
  294. package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.css +0 -3
  295. package/dist/collection/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.css +0 -268
  296. package/dist/collection/components/molecules/inputs/mg-input-date/mg-input-date.css +0 -211
  297. package/dist/collection/components/molecules/inputs/mg-input-numeric/mg-input-numeric.css +0 -257
  298. package/dist/collection/components/molecules/inputs/mg-input-password/mg-input-password.css +0 -254
  299. package/dist/collection/components/molecules/inputs/mg-input-radio/mg-input-radio.css +0 -179
  300. package/dist/collection/components/molecules/inputs/mg-input-select/mg-input-select.css +0 -264
  301. package/dist/collection/components/molecules/inputs/mg-input-text/mg-input-text.css +0 -304
  302. package/dist/collection/components/molecules/inputs/mg-input-text/test/mg-input-text.e2e.js +0 -171
  303. package/dist/collection/components/molecules/inputs/mg-input-text/test/mg-input-text.e2e.js.map +0 -1
  304. package/dist/collection/components/molecules/inputs/mg-input-textarea/mg-input-textarea.css +0 -303
  305. package/dist/collection/components/molecules/inputs/mg-input-toggle/mg-input-toggle.css +0 -233
  306. package/dist/collection/components/molecules/inputs/mg-input-toggle/test/mg-input-toggle.e2e.js +0 -125
  307. package/dist/collection/components/molecules/inputs/mg-input-toggle/test/mg-input-toggle.e2e.js.map +0 -1
  308. package/dist/collection/components/molecules/menu/mg-menu/mg-menu.css +0 -37
  309. package/dist/collection/components/molecules/menu/mg-menu/test/mg-menu.e2e.js.map +0 -1
  310. package/dist/collection/components/molecules/menu/mg-menu-item/mg-menu-item.css +0 -377
  311. package/dist/collection/components/molecules/menu/mg-menu-item/test/mg-menu-item.e2e.js +0 -119
  312. package/dist/collection/components/molecules/menu/mg-menu-item/test/mg-menu-item.e2e.js.map +0 -1
  313. package/dist/collection/components/molecules/mg-action-more/mg-action-more.css +0 -39
  314. package/dist/collection/components/molecules/mg-details/mg-details.css +0 -64
  315. package/dist/collection/components/molecules/mg-form/mg-form.css +0 -19
  316. package/dist/collection/components/molecules/mg-illustrated-message/mg-illustrated-message.css +0 -45
  317. package/dist/collection/components/molecules/mg-item-more/mg-item-more.css +0 -30
  318. package/dist/collection/components/molecules/mg-message/mg-message.css +0 -82
  319. package/dist/collection/components/molecules/mg-modal/mg-modal.css +0 -67
  320. package/dist/collection/components/molecules/mg-pagination/mg-pagination.css +0 -47
  321. package/dist/collection/components/molecules/mg-panel/mg-panel.css +0 -64
  322. package/dist/collection/components/molecules/mg-popover/mg-popover-content/mg-popover-content.css +0 -135
  323. package/dist/collection/components/molecules/mg-popover/mg-popover.css +0 -11
  324. package/dist/collection/components/molecules/mg-popover/test/mg-popover.e2e.js.map +0 -1
  325. package/dist/collection/components/molecules/mg-skip-links/mg-skip-links.css +0 -28
  326. package/dist/collection/components/molecules/mg-tabs/mg-tabs.css +0 -99
  327. package/dist/collection/styles/a11y.scss +0 -36
  328. package/dist/collection/styles/fonts.scss +0 -21
  329. package/dist/collection/styles/form.scss +0 -3
  330. package/dist/collection/styles/global.scss +0 -80
  331. package/dist/collection/styles/layout.scss +0 -29
  332. package/dist/collection/styles/main.scss +0 -23
  333. package/dist/collection/styles/mg-icon-animation.scss +0 -6
  334. package/dist/collection/styles/navigation-button.scss +0 -77
  335. package/dist/collection/styles/reset-mg-card-slotted-variables.scss +0 -11
  336. package/dist/collection/styles/typography.scss +0 -82
  337. package/dist/collection/styles/utilities.scss +0 -21
  338. package/dist/collection/test/typography.e2e.playwright.js +0 -12
  339. package/dist/collection/test/typography.e2e.playwright.js.map +0 -1
  340. package/dist/esm/mg-menu.conf-012fc9b4.js.map +0 -1
  341. package/dist/mg-components/p-1d7d6fa0.js +0 -2
  342. package/dist/mg-components/p-1d7d6fa0.js.map +0 -1
  343. package/dist/mg-components/p-9257e8f1.entry.js +0 -2
  344. package/dist/mg-components/p-9257e8f1.entry.js.map +0 -1
  345. package/dist/mg-components/p-ff3ca349.entry.js +0 -2
  346. package/dist/mg-components/p-ff3ca349.entry.js.map +0 -1
  347. package/dist/mg-components/styles/a11y.scss +0 -36
  348. package/dist/mg-components/styles/fonts.scss +0 -21
  349. package/dist/mg-components/styles/form.scss +0 -3
  350. package/dist/mg-components/styles/global.scss +0 -80
  351. package/dist/mg-components/styles/layout.scss +0 -29
  352. package/dist/mg-components/styles/main.scss +0 -23
  353. package/dist/mg-components/styles/mg-icon-animation.scss +0 -6
  354. package/dist/mg-components/styles/navigation-button.scss +0 -77
  355. package/dist/mg-components/styles/reset-mg-card-slotted-variables.scss +0 -11
  356. package/dist/mg-components/styles/typography.scss +0 -82
  357. package/dist/mg-components/styles/utilities.scss +0 -21
  358. /package/dist/types/{test/typography.e2e.playwright.d.ts → components/atoms/mg-input-title/test/mg-input-title.e2e.playwright.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"mg-tabs.js","sourceRoot":"","sources":["../../../../src/components/molecules/mg-tabs/mg-tabs.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Event, EventEmitter, h, Prop, State, Element, Watch } from '@stencil/core';\nimport { createID, ClassList, allItemsAreString } from '../../../utils/components.utils';\nimport { TabItem, sizes, Status, SizeType } from './mg-tabs.conf';\n\n/**\n * type TabItem validation function\n * @param tab - tab item\n * @returns tab item type is valid\n */\nconst isTabItem = (tab: TabItem): boolean => typeof tab === 'object' && typeof tab.label === 'string';\n\n@Component({\n tag: 'mg-tabs',\n styleUrl: 'mg-tabs.scss',\n shadow: true,\n})\nexport class MgTabs {\n /************\n * Internal *\n ************/\n\n // classes\n private readonly tabPanel = 'panel';\n private readonly buttonTabBaseClass = 'mg-tabs__navigation-button';\n\n // variables\n private tabFocus: number;\n private startIndex = 1;\n\n /**************\n * Decorators *\n **************/\n\n /**\n * Get component DOM element\n */\n @Element() element: HTMLMgTabsElement;\n\n /**\n * Identifier is used for the element ID (id is a reserved prop in Stencil.js)\n * If not set, it will be created.\n */\n @Prop() identifier: string = createID('mg-tabs');\n\n /**\n * Tabs label. Include short tabs description.\n * Required for accessibility\n */\n @Prop() label!: string;\n @Watch('label')\n validateLabel(newValue: MgTabs['label']): void {\n if (typeof newValue !== 'string' || newValue.trim() === '') {\n throw new Error('<mg-tabs> prop \"label\" is required.');\n }\n }\n\n /**\n * Define tabs size\n */\n @Prop() size: SizeType = 'regular';\n @Watch('size')\n validateSize(newValue: MgTabs['size']): void {\n if (!sizes.includes(newValue)) {\n throw new Error(`<mg-tabs> prop \"size\" must be one of: ${sizes.join(', ')}`);\n }\n this.classCollection.add(`mg-tabs--size-${this.size}`);\n }\n\n /**\n * Tabs items\n */\n @Prop() items!: string[] | TabItem[];\n @Watch('items')\n validateItems(newValue: MgTabs['items']): void {\n // String array\n if (allItemsAreString(newValue as string[])) {\n this.tabs = (newValue as string[]).map((item, index) => ({ label: item, status: index === 0 ? Status.ACTIVE : Status.VISIBLE }));\n }\n // Object array\n else if (newValue && newValue.length > 0 && (newValue as TabItem[]).every(item => isTabItem(item))) {\n this.tabs = newValue as TabItem[];\n // init active tabs if not set. Default: index 0.\n if (this.tabs.find(tab => this.tabHasStatus(tab, Status.ACTIVE)) === undefined) this.tabs[0].status = Status.ACTIVE;\n } else {\n throw new Error('<mg-tabs> prop \"items\" is required and all items must be the same type: TabItem.');\n }\n }\n\n /**\n * Active tab number\n */\n @Prop({ reflect: true, mutable: true }) activeTab: number;\n @Watch('activeTab')\n validateActiveTab(newValue: MgTabs['activeTab']): void {\n if (typeof newValue === 'number' && newValue >= 1 && newValue <= this.tabs.length) {\n this.tabs.forEach((tab, index) => {\n const isNewActiveTab = index === newValue - this.startIndex;\n // reset active tabs\n if (this.tabHasStatus(tab, Status.ACTIVE) && !isNewActiveTab) tab.status = Status.VISIBLE;\n // set active tab from given tab key\n else if ((tab.status === undefined || this.tabHasStatus(tab, Status.VISIBLE)) && isNewActiveTab) tab.status = Status.ACTIVE;\n });\n // emit change active tab key event\n if (this.tabs.find(tab => this.tabHasStatus(tab, Status.ACTIVE)) !== undefined) {\n this.activeTabChange.emit(newValue);\n }\n } else if (newValue !== undefined) {\n throw new Error('<mg-tabs> prop \"activeTab\" must be between 1 and tabs length.');\n }\n }\n\n /**\n * Component tabs\n */\n @State() tabs: TabItem[] = [];\n\n /**\n * Component classes\n */\n @State() classCollection: ClassList = new ClassList(['mg-tabs']);\n\n /**\n * Emited event when active tab change\n */\n @Event({ eventName: 'active-tab-change' }) activeTabChange: EventEmitter<number>;\n\n /**\n * Method to know if given tab has the given status\n * @param tab - item tab key to set to ACTIVE status\n * @param status - status to valide\n * @returns status comparaison\n */\n private tabHasStatus = (tab: TabItem, status: Status): boolean => tab.status === status;\n\n /**\n * Method to get element id from index\n * @param element - to get id\n * @param index - to generate id\n * @returns generated element id\n */\n private getElementId = (element: string, index: number): string => `${element}-${this.getTabItemIndex(index)}`;\n\n /**\n * Method to get tab item index\n * @param index - to get\n * @returns index\n */\n private getTabItemIndex = (index: number): number => index + this.startIndex;\n\n /**\n * Method to get the active-tab value\n * @returns of the active-tab\n */\n private getActiveTab = (): number =>\n this.activeTab || this.getTabItemIndex(this.tabs.map((tab, index) => ({ ...tab, index })).find(tab => this.tabHasStatus(tab, Status.ACTIVE)).index);\n\n /**\n * Handle click events on tabs\n * @param event - mouse event\n */\n private handleClick = (event: MouseEvent & { currentTarget: HTMLElement }): void => {\n const tabId = event.currentTarget.dataset.index;\n const tab = this.tabs[Number(tabId) - this.startIndex];\n if (this.tabHasStatus(tab, Status.HIDDEN) || this.tabHasStatus(tab, Status.DISABLED)) {\n event.preventDefault();\n } else {\n this.activeTab = Number(tabId);\n this.tabFocus = undefined;\n }\n };\n\n /**\n * get navigation button class from given status\n * @param status - button tab status\n * @returns button class/selector variant\n */\n private getNavigationButtonClass = (status: Status): string => `${this.buttonTabBaseClass}--${status}`;\n\n /**\n * Handle keyboard event on tabs\n * @param event - mouse event\n */\n private handleKeydown = (event: KeyboardEvent & { target: HTMLElement }): void => {\n const parent = event.target.parentElement;\n if (['ArrowRight', 'ArrowLeft'].includes(event.key)) {\n this.tabFocus = Number(event.target.dataset.index);\n parent.querySelector(`[data-index=\"${this.tabFocus}\"]`).setAttribute('tabindex', '-1');\n\n // Move right\n if (event.key === 'ArrowRight') {\n this.tabFocus++;\n // If we're at the end, go to the start\n if (this.tabFocus > this.tabs.length) this.tabFocus = this.startIndex;\n // Move left\n } else if (event.key === 'ArrowLeft') {\n this.tabFocus--;\n // If we're at the start, move to the end\n if (this.tabFocus < this.startIndex) this.tabFocus = this.tabs.length;\n }\n\n const parentButtonElement: HTMLButtonElement = parent.querySelector(`[data-index=\"${this.tabFocus}\"]`);\n // if focus item is ['hidden'] we recursively repeat action\n if (this.tabHasStatus(this.tabs[this.tabFocus - 1], Status.HIDDEN)) {\n parentButtonElement.dispatchEvent(new KeyboardEvent('keydown', { key: event.key, bubbles: true }));\n // else run focus methods on tabFocus element\n } else {\n parentButtonElement.setAttribute('tabindex', '0');\n parentButtonElement.focus();\n }\n } else if (event.key === 'Tab') {\n this.resetFocus();\n }\n };\n\n /**\n * Method to reset focus behavior\n */\n private resetFocus = (): void => {\n // update asynchronously tabindex to prevent get focus on new tabindex at then end of event process\n setTimeout(() => {\n this.tabFocus = undefined;\n Array.from(this.element.shadowRoot.querySelectorAll('[data-index]')).forEach((tab, index) => {\n tab.setAttribute('tabindex', this.getActiveTab() - this.startIndex !== index ? '-1' : '0');\n });\n }, 0);\n };\n\n /**\n * Validate slots setting\n */\n private validateSlots = (): void => {\n const slots = Array.from(this.element.children).filter(slot => slot.getAttribute('slot')?.includes('tab_content-'));\n if (slots.length !== this.tabs.length) throw new Error('<mg-tabs> Must have slots counts equal to tabs count.');\n };\n\n /*************\n * Lifecycle *\n *************/\n\n /**\n * Check if component props are well configured on init\n */\n componentWillLoad(): void {\n // Check tabs format\n this.validateLabel(this.label);\n this.validateItems(this.items);\n this.validateActiveTab(this.activeTab);\n this.validateSize(this.size);\n this.validateSlots();\n }\n\n /**\n * add listners\n */\n componentDidLoad(): void {\n document.addEventListener(\n 'click',\n (event: MouseEvent & { target: HTMLElement }) => {\n if (event.target.closest('mg-tabs') !== this.element) this.resetFocus();\n },\n false,\n );\n }\n\n /**\n * Render\n * @returns HTML Element\n */\n render(): HTMLElement {\n return (\n <div class={this.classCollection.join()}>\n <header role=\"tablist\" aria-label={this.label} class=\"mg-tabs__header\">\n {this.tabs.map((tab, index) => (\n <button\n key={tab.label}\n role=\"tab\"\n id={this.getElementId(this.identifier, index)}\n class={{\n [`${this.buttonTabBaseClass}`]: true,\n [`${this.buttonTabBaseClass}--horizontal`]: true,\n [`${this.getNavigationButtonClass(Status.ACTIVE)}`]: this.tabHasStatus(tab, Status.ACTIVE),\n [`${this.getNavigationButtonClass(Status.DISABLED)}`]: this.tabHasStatus(tab, Status.DISABLED),\n [`${this.getNavigationButtonClass(Status.HIDDEN)}`]: this.tabHasStatus(tab, Status.HIDDEN),\n }}\n tabindex={this.tabHasStatus(tab, Status.ACTIVE) ? 0 : -1}\n aria-selected={this.tabHasStatus(tab, Status.ACTIVE).toString()}\n aria-controls={this.getElementId(this.tabPanel, index)}\n aria-disabled={this.tabHasStatus(tab, Status.DISABLED)}\n onClick={this.handleClick}\n onKeyDown={this.handleKeydown}\n data-index={this.getTabItemIndex(index)}\n >\n {tab.icon !== undefined && <mg-icon icon={tab.icon}></mg-icon>}\n {tab.label}\n {tab.badge !== undefined && <mg-badge variant=\"text-color\" value={tab.badge.value} label={tab.badge.label} outline={tab.badge.role === 'information'}></mg-badge>}\n </button>\n ))}\n </header>\n {this.tabs.map((tab, index) => (\n <article\n key={tab.label}\n role=\"tabpanel\"\n id={this.getElementId(this.tabPanel, index)}\n hidden={!this.tabHasStatus(tab, Status.ACTIVE)}\n aria-labelledby={this.getElementId(this.identifier, index)}\n tabindex={this.tabHasStatus(tab, Status.ACTIVE) ? 0 : -1}\n class=\"mg-tabs__content-container\"\n >\n <slot name={this.getElementId('tab_content', index)}></slot>\n </article>\n ))}\n </div>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"mg-tabs.js","sourceRoot":"","sources":["../../../../src/components/molecules/mg-tabs/mg-tabs.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Event, EventEmitter, h, Prop, State, Element, Watch } from '@stencil/core';\nimport { createID, ClassList, allItemsAreString, isValidString } from '../../../utils/components.utils';\nimport { TabItem, sizes, Status, SizeType } from './mg-tabs.conf';\n\n/**\n * type TabItem validation function\n * @param tab - tab item\n * @returns tab item type is valid\n */\nconst isTabItem = (tab: unknown): tab is TabItem => typeof tab === 'object' && typeof (tab as TabItem).label === 'string';\n\n@Component({\n tag: 'mg-tabs',\n styleUrl: '../../../../node_modules/@mgdis/styles/dist/components/mg-tabs.css',\n shadow: true,\n})\nexport class MgTabs {\n /************\n * Internal *\n ************/\n\n // classes\n private readonly tabPanel = 'panel';\n private readonly buttonTabBaseClass = 'mg-c-tabs__navigation-button';\n\n // variables\n private tabFocus: number;\n private startIndex = 1;\n\n /**************\n * Decorators *\n **************/\n\n /**\n * Get component DOM element\n */\n @Element() element: HTMLMgTabsElement;\n\n /**\n * Identifier is used for the element ID (id is a reserved prop in Stencil.js)\n * If not set, it will be created.\n */\n @Prop() identifier: string = createID('mg-tabs');\n\n /**\n * Tabs label. Include short tabs description.\n * Required for accessibility\n */\n @Prop() label!: string;\n @Watch('label')\n validateLabel(newValue: MgTabs['label']): void {\n if (!isValidString(newValue)) {\n throw new Error('<mg-tabs> prop \"label\" is required.');\n }\n }\n\n /**\n * Define tabs size\n */\n @Prop() size: SizeType = 'regular';\n @Watch('size')\n validateSize(newValue: MgTabs['size']): void {\n if (!sizes.includes(newValue)) {\n throw new Error(`<mg-tabs> prop \"size\" must be one of: ${sizes.join(', ')}`);\n }\n this.classCollection.add(`mg-c-tabs--size-${this.size}`);\n }\n\n /**\n * Tabs items\n */\n @Prop() items!: string[] | TabItem[];\n @Watch('items')\n validateItems(newValue: MgTabs['items']): void {\n // String array\n if (allItemsAreString(newValue)) this.tabs = newValue.map(item => ({ label: item, status: Status.VISIBLE }));\n // Object array\n else if (Array.isArray(newValue) && newValue.length > 0 && newValue.every(isTabItem)) this.tabs = newValue;\n else throw new Error('<mg-tabs> prop \"items\" is required and all items must be the same type: TabItem.');\n }\n\n /**\n * Active tab number\n */\n @Prop({ reflect: true, mutable: true }) activeTab: number;\n @Watch('activeTab')\n validateActiveTab(newValue: MgTabs['activeTab']): void {\n // when `active-tab` is undefined we set default value by searching an item with `Status.ACTIVE` or we use the `startIndex` has fallback value\n // after setting new value to `active-tab` the validate will be triggered again with the updated value and process the tab update\n if (newValue === undefined) {\n this.activeTab = this.tabs.some(tab => this.tabHasStatus(tab, Status.ACTIVE))\n ? this.getTabItemIndex(this.tabs.findIndex(tab => this.tabHasStatus(tab, Status.ACTIVE)))\n : this.startIndex;\n } else if (typeof newValue === 'number' && newValue >= this.startIndex && newValue <= this.tabs.length && this.isActivableTab(this.tabs[newValue - this.startIndex])) {\n // if new 'active-tab' is activable we update tab status to ACTIVE and toggle past ACTIVE to VISIBLE\n this.tabs.forEach((tab, index) => {\n const isNewActiveTab = index === newValue - this.startIndex;\n // reset active tabs\n if (this.tabHasStatus(tab, Status.ACTIVE) && !isNewActiveTab) tab.status = Status.VISIBLE;\n // set active tab from given tab key\n else if (this.isActivableTab(tab) && isNewActiveTab) tab.status = Status.ACTIVE;\n });\n // emit change active tab key event\n this.activeTabChange.emit(newValue);\n } else {\n throw new Error(`<mg-tabs> prop \"activeTab\" must be a number between ${this.startIndex} and ${this.tabs.length} and new value must be \"activable\".`);\n }\n }\n\n /**\n * Component tabs\n */\n @State() tabs: TabItem[] = [];\n\n /**\n * Component classes\n */\n @State() classCollection: ClassList = new ClassList(['mg-c-tabs']);\n\n /**\n * Emited event when active tab change\n */\n @Event({ eventName: 'active-tab-change' }) activeTabChange: EventEmitter<number>;\n\n /**\n * Validate that new tab status can be `Status.ACTIVE`\n * @param tab - tab item\n * @returns true when tab match condition to get a `Status.ACTIVE`\n */\n private isActivableTab = (tab: TabItem): boolean => [undefined, Status.ACTIVE, Status.VISIBLE].includes(tab.status);\n\n /**\n * Method to know if given tab has the given status\n * @param tab - item tab key to set to ACTIVE status\n * @param status - status to valide\n * @returns status comparaison\n */\n private tabHasStatus = (tab: TabItem, status: Status): boolean => tab.status === status;\n\n /**\n * Method to get element id from index\n * @param element - to get id\n * @param index - to generate id\n * @returns generated element id\n */\n private getElementId = (element: string, index: number): string => `${element}-${this.getTabItemIndex(index)}`;\n\n /**\n * Method to get tab item index\n * @param index - to get\n * @returns index\n */\n private getTabItemIndex = (index: number): number => index + this.startIndex;\n\n /**\n * Handle click events on tabs\n * @param event - mouse event\n */\n private handleClick = (event: MouseEvent & { currentTarget: HTMLElement }): void => {\n const tabId = event.currentTarget.dataset.index;\n if (!this.isActivableTab(this.tabs[Number(tabId) - this.startIndex])) {\n event.preventDefault();\n } else {\n this.activeTab = Number(tabId);\n this.tabFocus = undefined;\n }\n };\n\n /**\n * get navigation button class from given status\n * @param status - button tab status\n * @returns button class/selector variant\n */\n private getNavigationButtonClass = (status: Status): string => `${this.buttonTabBaseClass}--${status}`;\n\n /**\n * Handle keyboard event on tabs\n * @param event - mouse event\n */\n private handleKeydown = (event: KeyboardEvent & { target: HTMLElement }): void => {\n const parent = event.target.parentElement;\n if (['ArrowRight', 'ArrowLeft'].includes(event.key)) {\n this.tabFocus = Number(event.target.dataset.index);\n parent.querySelector(`[data-index=\"${this.tabFocus}\"]`).setAttribute('tabindex', '-1');\n\n // Move right\n if (event.key === 'ArrowRight') {\n this.tabFocus++;\n // If we're at the end, go to the start\n if (this.tabFocus > this.tabs.length) this.tabFocus = this.startIndex;\n // Move left\n } else if (event.key === 'ArrowLeft') {\n this.tabFocus--;\n // If we're at the start, move to the end\n if (this.tabFocus < this.startIndex) this.tabFocus = this.tabs.length;\n }\n\n const parentButtonElement: HTMLButtonElement = parent.querySelector(`[data-index=\"${this.tabFocus}\"]`);\n // if focus item is ['hidden'] we recursively repeat action\n if (this.tabHasStatus(this.tabs[this.tabFocus - 1], Status.HIDDEN)) {\n parentButtonElement.dispatchEvent(new KeyboardEvent('keydown', { key: event.key, bubbles: true }));\n // else run focus methods on tabFocus element\n } else {\n parentButtonElement.setAttribute('tabindex', '0');\n parentButtonElement.focus();\n }\n } else if (event.key === 'Tab') {\n this.resetFocus();\n }\n };\n\n /**\n * Method to reset focus behavior\n */\n private resetFocus = (): void => {\n // update asynchronously tabindex to prevent get focus on new tabindex at then end of event process\n setTimeout(() => {\n this.tabFocus = undefined;\n Array.from(this.element.shadowRoot.querySelectorAll('[data-index]')).forEach((tab, index) => {\n tab.setAttribute('tabindex', this.activeTab - this.startIndex !== index ? '-1' : '0');\n });\n }, 0);\n };\n\n /**\n * Validate slots setting\n */\n private validateSlots = (): void => {\n const slots = Array.from(this.element.children).filter(slot => slot.getAttribute('slot')?.includes('tab_content-'));\n if (slots.length !== this.tabs.length) throw new Error('<mg-tabs> Must have slots counts equal to tabs count.');\n };\n\n /*************\n * Lifecycle *\n *************/\n\n /**\n * Check if component props are well configured on init\n */\n componentWillLoad(): void {\n // Check tabs format\n this.validateLabel(this.label);\n this.validateItems(this.items);\n this.validateActiveTab(this.activeTab);\n this.validateSize(this.size);\n this.validateSlots();\n }\n\n /**\n * add listners\n */\n componentDidLoad(): void {\n document.addEventListener(\n 'click',\n (event: MouseEvent & { target: HTMLElement }) => {\n if (event.target.closest('mg-tabs') !== this.element) this.resetFocus();\n },\n false,\n );\n }\n\n /**\n * Render\n * @returns HTML Element\n */\n render(): HTMLElement {\n return (\n <div class={this.classCollection.join()}>\n <header role=\"tablist\" aria-label={this.label} class=\"mg-c-tabs__header\">\n {this.tabs.map((tab, index) => (\n <button\n key={tab.label}\n role=\"tab\"\n id={this.getElementId(this.identifier, index)}\n class={{\n [`${this.buttonTabBaseClass}`]: true,\n [`${this.buttonTabBaseClass}--horizontal`]: true,\n [`${this.getNavigationButtonClass(Status.ACTIVE)}`]: this.tabHasStatus(tab, Status.ACTIVE),\n [`${this.getNavigationButtonClass(Status.DISABLED)}`]: this.tabHasStatus(tab, Status.DISABLED),\n [`${this.getNavigationButtonClass(Status.HIDDEN)}`]: this.tabHasStatus(tab, Status.HIDDEN),\n }}\n tabindex={this.tabHasStatus(tab, Status.ACTIVE) ? 0 : -1}\n aria-selected={this.tabHasStatus(tab, Status.ACTIVE).toString()}\n aria-controls={this.getElementId(this.tabPanel, index)}\n aria-disabled={this.tabHasStatus(tab, Status.DISABLED)}\n onClick={this.handleClick}\n onKeyDown={this.handleKeydown}\n data-index={this.getTabItemIndex(index)}\n >\n {tab.icon !== undefined && <mg-icon icon={tab.icon}></mg-icon>}\n {tab.label}\n {tab.badge !== undefined && <mg-badge variant=\"text-color\" value={tab.badge.value} label={tab.badge.label} outline={tab.badge.role === 'information'}></mg-badge>}\n </button>\n ))}\n </header>\n {this.tabs.map((tab, index) => (\n <article\n key={tab.label}\n role=\"tabpanel\"\n id={this.getElementId(this.tabPanel, index)}\n hidden={!this.tabHasStatus(tab, Status.ACTIVE)}\n aria-labelledby={this.getElementId(this.identifier, index)}\n tabindex={this.tabHasStatus(tab, Status.ACTIVE) ? 0 : -1}\n class=\"mg-c-tabs__content-container\"\n >\n <slot name={this.getElementId('tab_content', index)}></slot>\n </article>\n ))}\n </div>\n );\n }\n}\n"]}
@@ -103,13 +103,13 @@ describe('mg-tabs', () => {
103
103
  expect(err.message).toMatch('<mg-tabs> Must have slots counts equal to tabs count.');
104
104
  }
105
105
  });
106
- test.each([0, 3])('should trown an error with invalid tabItem props', async (activeTab) => {
106
+ test.each([0, 3, null, { test: 'fail' }, 'string'])('should trown an error with invalid range for "activeTab" props', async (activeTab) => {
107
107
  expect.assertions(1);
108
108
  try {
109
109
  await getPage({ label: 'Sample label', items: ['Tab 1', 'Tab 2'], activeTab }, createSlots());
110
110
  }
111
111
  catch (err) {
112
- expect(err.message).toMatch('<mg-tabs> prop "activeTab" must be between 1 and tabs length.');
112
+ expect(err.message).toMatch(`<mg-tabs> prop "activeTab" must be a number between 1 and 2 and new value must be "activable".`);
113
113
  }
114
114
  });
115
115
  test('should trown an error with invalid tabItem props', async () => {
@@ -127,22 +127,22 @@ describe('mg-tabs', () => {
127
127
  const page = await getPage({ label: 'Sample label', items, identifier: 'id' }, createSlots());
128
128
  expect(page.root).toMatchSnapshot();
129
129
  const element = page.doc.querySelector('mg-tabs');
130
- let activeTab = element.shadowRoot.querySelector('.mg-tabs__navigation-button--active');
130
+ let activeTab = element.shadowRoot.querySelector('.mg-c-tabs__navigation-button--active');
131
131
  expect(activeTab).toHaveProperty('id', 'id-1');
132
132
  jest.spyOn(page.rootInstance.activeTabChange, 'emit');
133
133
  const nextTab = element.shadowRoot.getElementById('id-2');
134
134
  nextTab.dispatchEvent(new MouseEvent('click', { bubbles: true }));
135
135
  await page.waitForChanges();
136
- expect(page.root).toMatchSnapshot();
137
136
  expect(page.rootInstance.activeTabChange.emit).toHaveBeenCalledWith(2);
138
- activeTab = element.shadowRoot.querySelector('.mg-tabs__navigation-button--active');
137
+ expect(page.root).toMatchSnapshot();
138
+ activeTab = element.shadowRoot.querySelector('.mg-c-tabs__navigation-button--active');
139
139
  expect(activeTab).toHaveProperty('id', 'id-2');
140
140
  });
141
141
  test.each([Status.HIDDEN, Status.DISABLED])('should prevent click on tab with status %s', async (status) => {
142
142
  const page = await getPage({ label: 'Sample label', items: [{ label: 'Batman' }, { label: 'Joker', status }], identifier: 'id' }, createSlots());
143
143
  expect(page.root).toMatchSnapshot();
144
144
  const element = page.doc.querySelector('mg-tabs');
145
- let activeTab = element.shadowRoot.querySelector('.mg-tabs__navigation-button--active');
145
+ let activeTab = element.shadowRoot.querySelector('.mg-c-tabs__navigation-button--active');
146
146
  expect(activeTab).toHaveProperty('id', 'id-1');
147
147
  jest.spyOn(page.rootInstance.activeTabChange, 'emit');
148
148
  const nextTab = element.shadowRoot.getElementById('id-2');
@@ -150,7 +150,7 @@ describe('mg-tabs', () => {
150
150
  await page.waitForChanges();
151
151
  expect(page.root).toMatchSnapshot();
152
152
  expect(page.rootInstance.activeTabChange.emit).not.toHaveBeenCalled();
153
- activeTab = element.shadowRoot.querySelector('.mg-tabs__navigation-button--active');
153
+ activeTab = element.shadowRoot.querySelector('.mg-c-tabs__navigation-button--active');
154
154
  expect(activeTab).toHaveProperty('id', 'id-1');
155
155
  });
156
156
  test('should go to next tab on keyboard event', async () => {
@@ -163,7 +163,7 @@ describe('mg-tabs', () => {
163
163
  buttons.forEach(button => {
164
164
  button.focus = jest.fn();
165
165
  });
166
- let activeTab = element.shadowRoot.querySelector('.mg-tabs__navigation-button--active');
166
+ let activeTab = element.shadowRoot.querySelector('.mg-c-tabs__navigation-button--active');
167
167
  activeTab.dispatchEvent(new CustomEvent('focus', { bubbles: true }));
168
168
  await page.waitForChanges();
169
169
  expect(page.root).toMatchSnapshot();
@@ -180,7 +180,7 @@ describe('mg-tabs', () => {
180
180
  element.shadowRoot.querySelector(`[data-index="${action.from + 1}"]`).dispatchEvent(new KeyboardEvent('keydown', { key: action.key }));
181
181
  await page.waitForChanges();
182
182
  expect(page.root).toMatchSnapshot();
183
- activeTab = element.shadowRoot.querySelector('.mg-tabs__navigation-button--active');
183
+ activeTab = element.shadowRoot.querySelector('.mg-c-tabs__navigation-button--active');
184
184
  expect(activeTab).toHaveProperty('id', 'id-1');
185
185
  expect(buttons[action.to].focus).toHaveBeenCalledTimes(action.key === key.next ? 1 : 2);
186
186
  expect(activeTabChangeSpy).not.toHaveBeenCalled();
@@ -210,7 +210,7 @@ describe('mg-tabs', () => {
210
210
  buttons.forEach(button => {
211
211
  button.focus = jest.fn();
212
212
  });
213
- let activeTab = element.shadowRoot.querySelector('.mg-tabs__navigation-button--active');
213
+ let activeTab = element.shadowRoot.querySelector('.mg-c-tabs__navigation-button--active');
214
214
  activeTab.dispatchEvent(new CustomEvent('focus', { bubbles: true }));
215
215
  await page.waitForChanges();
216
216
  expect(page.root).toMatchSnapshot();
@@ -234,7 +234,7 @@ describe('mg-tabs', () => {
234
234
  element.shadowRoot.querySelector(`[data-index="${action.from + 1}"]`).dispatchEvent(new KeyboardEvent('keydown', { key: action.key }));
235
235
  await page.waitForChanges();
236
236
  expect(page.root).toMatchSnapshot();
237
- activeTab = element.shadowRoot.querySelector('.mg-tabs__navigation-button--active');
237
+ activeTab = element.shadowRoot.querySelector('.mg-c-tabs__navigation-button--active');
238
238
  expect(activeTab).toHaveProperty('id', 'id-1');
239
239
  if (action.to === 2) {
240
240
  const button = buttons[action.key === key.next ? action.from - 1 : action.from + 1];
@@ -292,7 +292,7 @@ describe('mg-tabs', () => {
292
292
  expect(page.root).toMatchSnapshot();
293
293
  const element = page.doc.querySelector('mg-tabs');
294
294
  const spys = Array.from(element.shadowRoot.querySelectorAll('button')).map(button => jest.spyOn(button, 'setAttribute'));
295
- const activeTab = element.shadowRoot.querySelector('.mg-tabs__navigation-button--active');
295
+ const activeTab = element.shadowRoot.querySelector('.mg-c-tabs__navigation-button--active');
296
296
  activeTab.dispatchEvent(new CustomEvent('focus', { bubbles: true }));
297
297
  await page.waitForChanges();
298
298
  expect(page.root).toMatchSnapshot();
@@ -312,7 +312,7 @@ describe('mg-tabs', () => {
312
312
  expect(page.root).toMatchSnapshot();
313
313
  const element = page.doc.querySelector('mg-tabs');
314
314
  const spys = Array.from(element.shadowRoot.querySelectorAll('button')).map(button => jest.spyOn(button, 'setAttribute'));
315
- const activeTab = element.shadowRoot.querySelector('.mg-tabs__navigation-button--active');
315
+ const activeTab = element.shadowRoot.querySelector('.mg-c-tabs__navigation-button--active');
316
316
  activeTab.dispatchEvent(new CustomEvent('focus', { bubbles: true }));
317
317
  await page.waitForChanges();
318
318
  expect(page.root).toMatchSnapshot();
@@ -1 +1 @@
1
- {"version":3,"file":"mg-tabs.spec.js","sourceRoot":"","sources":["../../../../../src/components/molecules/mg-tabs/test/mg-tabs.spec.tsx"],"names":[],"mappings":"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","sourcesContent":["import { h } from '@stencil/core';\nimport { newSpecPage } from '@stencil/core/testing';\nimport { MgTabs } from '../mg-tabs';\nimport { sizes, Status } from '../mg-tabs.conf';\n\nconst getPage = (args, slots?) =>\n newSpecPage({\n components: [MgTabs],\n template: () => <mg-tabs {...args}>{slots && slots.map(content => content && content())}</mg-tabs>,\n });\n\nconst createSlots = (slotNumber = 2) => {\n const slots = [];\n for (let i = 1; slotNumber > slots.length; i++) {\n slots.push(() => <div slot={`tab_content-${i}`}>{`Content ${i}`}</div>);\n }\n return slots;\n};\n\nconst badge = { value: 2, label: 'messages' };\n\nconst key = { next: 'ArrowRight', prev: 'ArrowLeft' };\n\ndescribe('mg-tabs', () => {\n describe.each(sizes)('template', size => {\n test.each([\n [['Batman', 'Joker', 'Bane']],\n [\n [\n { label: 'Batman', icon: 'check', badge },\n { label: 'Joker', icon: 'cross', badge: { ...badge, role: 'information' }, status: Status.DISABLED },\n { label: 'Bane', icon: 'trash', badge, status: Status.HIDDEN },\n ],\n ],\n ])('render', async items => {\n const { root } = await getPage({ label: 'Sample label', items, identifier: 'identifier', size }, createSlots(3));\n expect(root).toMatchSnapshot();\n });\n\n test('display only slots with name \"tab_content-*\"', async () => {\n const { root } = await getPage({ label: 'Sample label', items: ['Batman', 'Joker'], identifier: 'identifier' }, [...createSlots(), () => <div>dummy content</div>]);\n expect(root).toMatchSnapshot();\n });\n\n test.each([\n {\n items: ['Tab 1', 'Tab 2', 'Tab 3'],\n activeTab: 2,\n },\n {\n items: [{ label: 'Batman' }, { label: 'Joker', status: Status.ACTIVE }, { label: 'Bane' }],\n },\n {\n items: [{ label: 'Batman' }, { label: 'Joker' }, { label: 'Bane' }],\n activeTab: 2,\n },\n {\n items: [{ label: 'Batman' }, { label: 'Joker', status: Status.ACTIVE }, { label: 'Bane' }],\n activeTab: 2,\n },\n {\n items: [{ label: 'Batman' }, { label: 'Joker', status: Status.ACTIVE }, { label: 'Bane' }],\n activeTab: 3,\n },\n ])(`display ${size} tabs with activeProps set by props`, async props => {\n const { root } = await getPage({ label: 'Sample label', identifier: 'identifier', ...props }, createSlots(3));\n expect(root).toMatchSnapshot();\n });\n });\n\n describe('errors', () => {\n test.each(['', ' ', undefined])('Should throw error with invalid label property: %s', async label => {\n expect.assertions(1);\n try {\n await getPage({ label, items: ['Batman', 'Joker'] }, createSlots());\n } catch (err) {\n expect(err.message).toMatch('<mg-tabs> prop \"label\" is required.');\n }\n });\n\n test.each([\n [undefined, 'batman'],\n [['batman', { batman: 'batman' }]],\n [[true, false]],\n [[1, 2, 3]],\n [[true, 1, 'batman']],\n [[{ label: 'batman', icon: 'batman' }, { batman: 'batman' }]],\n [[{ label: undefined, icon: 'batman' }, { label: 'batman' }]],\n ])('Should throw error with invalid items property', async items => {\n expect.assertions(1);\n try {\n await getPage({ label: 'Sample label', items }, createSlots());\n } catch (err) {\n expect(err.message).toMatch('<mg-tabs> prop \"items\" is required and all items must be the same type: TabItem.');\n }\n });\n\n test.each([[[]], [createSlots(1)], [[undefined, createSlots(2)[1]], [createSlots(3)]]])('should trown an error with invalid slots', async slots => {\n expect.assertions(1);\n try {\n await getPage({ label: 'Sample label', items: ['Tab 1', 'Tab 2'] }, slots);\n } catch (err) {\n expect(err.message).toMatch('<mg-tabs> Must have slots counts equal to tabs count.');\n }\n });\n\n test.each([0, 3])('should trown an error with invalid tabItem props', async activeTab => {\n expect.assertions(1);\n try {\n await getPage({ label: 'Sample label', items: ['Tab 1', 'Tab 2'], activeTab }, createSlots());\n } catch (err) {\n expect(err.message).toMatch('<mg-tabs> prop \"activeTab\" must be between 1 and tabs length.');\n }\n });\n\n test('should trown an error with invalid tabItem props', async () => {\n expect.assertions(1);\n try {\n await getPage({ label: 'Sample label', items: ['Tab 1', 'Tab 2'], size: 'batman' }, createSlots());\n } catch (err) {\n expect(err.message).toMatch(`<mg-tabs> prop \"size\" must be one of: ${sizes.join(', ')}`);\n }\n });\n });\n\n describe('navigation', () => {\n test.each([[['batman', 'joker']], [[{ label: 'Batman' }, { label: 'Joker' }]]])('should go to next tab on click event', async items => {\n const page = await getPage({ label: 'Sample label', items, identifier: 'id' }, createSlots());\n expect(page.root).toMatchSnapshot();\n\n const element = page.doc.querySelector('mg-tabs');\n let activeTab = element.shadowRoot.querySelector('.mg-tabs__navigation-button--active');\n expect(activeTab).toHaveProperty('id', 'id-1');\n\n jest.spyOn(page.rootInstance.activeTabChange, 'emit');\n\n const nextTab = element.shadowRoot.getElementById('id-2');\n nextTab.dispatchEvent(new MouseEvent('click', { bubbles: true }));\n await page.waitForChanges();\n\n expect(page.root).toMatchSnapshot();\n expect(page.rootInstance.activeTabChange.emit).toHaveBeenCalledWith(2);\n\n activeTab = element.shadowRoot.querySelector('.mg-tabs__navigation-button--active');\n expect(activeTab).toHaveProperty('id', 'id-2');\n });\n\n test.each([Status.HIDDEN, Status.DISABLED])('should prevent click on tab with status %s', async status => {\n const page = await getPage({ label: 'Sample label', items: [{ label: 'Batman' }, { label: 'Joker', status }], identifier: 'id' }, createSlots());\n expect(page.root).toMatchSnapshot();\n\n const element = page.doc.querySelector('mg-tabs');\n let activeTab = element.shadowRoot.querySelector('.mg-tabs__navigation-button--active');\n expect(activeTab).toHaveProperty('id', 'id-1');\n\n jest.spyOn(page.rootInstance.activeTabChange, 'emit');\n\n const nextTab = element.shadowRoot.getElementById('id-2');\n nextTab.dispatchEvent(new MouseEvent('click', { bubbles: true }));\n await page.waitForChanges();\n\n expect(page.root).toMatchSnapshot();\n expect(page.rootInstance.activeTabChange.emit).not.toHaveBeenCalled();\n\n activeTab = element.shadowRoot.querySelector('.mg-tabs__navigation-button--active');\n expect(activeTab).toHaveProperty('id', 'id-1');\n });\n\n test('should go to next tab on keyboard event', async () => {\n const page = await getPage({ label: 'Sample label', items: ['batman', 'joker'], identifier: 'id' }, createSlots());\n const activeTabChangeSpy = jest.spyOn(page.rootInstance.activeTabChange, 'emit');\n expect(page.root).toMatchSnapshot();\n\n const element = page.doc.querySelector('mg-tabs');\n const buttons = Array.from(element.shadowRoot.querySelectorAll('button'));\n buttons.forEach(button => {\n button.focus = jest.fn();\n });\n\n let activeTab: HTMLElement = element.shadowRoot.querySelector('.mg-tabs__navigation-button--active');\n activeTab.dispatchEvent(new CustomEvent('focus', { bubbles: true }));\n\n await page.waitForChanges();\n expect(page.root).toMatchSnapshot();\n\n for await (const action of [\n { key: key.next, from: 0, to: 1 },\n { key: key.next, from: 1, to: 0 },\n { key: key.prev, from: 0, to: 1 },\n { key: key.prev, from: 1, to: 0 },\n ]) {\n element.shadowRoot.querySelector(`[data-index=\"${action.from + 1}\"]`).dispatchEvent(new KeyboardEvent('keydown', { key: action.key }));\n await page.waitForChanges();\n\n expect(page.root).toMatchSnapshot();\n\n activeTab = element.shadowRoot.querySelector('.mg-tabs__navigation-button--active');\n expect(activeTab).toHaveProperty('id', 'id-1');\n expect(buttons[action.to].focus).toHaveBeenCalledTimes(action.key === key.next ? 1 : 2);\n expect(activeTabChangeSpy).not.toHaveBeenCalled();\n }\n });\n\n test.each([Status.HIDDEN, Status.DISABLED])('should go to next VISIBLE tab on keyboard event', async status => {\n const page = await getPage({ label: 'Sample label', items: [{ label: 'Batman' }, { label: 'Joker' }, { label: 'Bane', status }], identifier: 'id' }, createSlots(3));\n const activeTabChangeSpy = jest.spyOn(page.rootInstance.activeTabChange, 'emit');\n expect(page.root).toMatchSnapshot();\n\n const element = page.doc.querySelector('mg-tabs');\n const buttons = Array.from(element.shadowRoot.querySelectorAll('button'));\n buttons.forEach(button => {\n button.focus = jest.fn();\n });\n\n let activeTab: HTMLElement = element.shadowRoot.querySelector('.mg-tabs__navigation-button--active');\n\n activeTab.dispatchEvent(new CustomEvent('focus', { bubbles: true }));\n await page.waitForChanges();\n expect(page.root).toMatchSnapshot();\n\n await page.waitForChanges();\n\n for await (const actions of [\n [\n { key: key.next, from: 0, to: 1 },\n { key: key.next, from: 1, to: 2 },\n ],\n [{ key: key.prev, from: 0, to: 2 }],\n ]) {\n for await (const action of actions) {\n element.shadowRoot.querySelector(`[data-index=\"${action.from + 1}\"]`).dispatchEvent(new KeyboardEvent('keydown', { key: action.key }));\n await page.waitForChanges();\n\n expect(page.root).toMatchSnapshot();\n\n activeTab = element.shadowRoot.querySelector('.mg-tabs__navigation-button--active');\n expect(activeTab).toHaveProperty('id', 'id-1');\n if (action.to === 2) {\n const button = buttons[action.key === key.next ? action.from - 1 : action.from + 1];\n if (status === Status.HIDDEN) {\n expect(buttons[action.to].focus).not.toHaveBeenCalled();\n expect(button.focus).toHaveBeenCalledTimes(action.key === key.next ? 1 : 2);\n } else {\n expect(buttons[action.to].focus).toHaveBeenCalledTimes(action.key === key.next ? 1 : 2);\n if (action.key === key.next) {\n expect(button.focus).not.toHaveBeenCalled();\n } else {\n expect(button.focus).toHaveBeenCalledTimes(1);\n }\n }\n } else {\n expect(buttons[action.to].focus).toHaveBeenCalledTimes(1);\n }\n expect(activeTabChangeSpy).not.toHaveBeenCalled();\n }\n }\n });\n\n test('should manage Tab key', async () => {\n const page = await getPage({ label: 'Sample label', items: ['batman', 'joker'], identifier: 'id' }, createSlots());\n expect(page.root).toMatchSnapshot();\n\n const element = page.doc.querySelector('mg-tabs');\n const spys = Array.from(element.shadowRoot.querySelectorAll('button')).map(button => jest.spyOn(button, 'setAttribute'));\n\n const activeTab: HTMLElement = element.shadowRoot.querySelector('.mg-tabs__navigation-button--active');\n\n activeTab.dispatchEvent(new CustomEvent('focus', { bubbles: true }));\n await page.waitForChanges();\n\n expect(page.root).toMatchSnapshot();\n\n activeTab.dispatchEvent(new KeyboardEvent('keydown', { key: key.next }));\n await page.waitForChanges();\n\n activeTab.dispatchEvent(new KeyboardEvent('keydown', { key: 'Tab' }));\n await page.waitForChanges();\n jest.runOnlyPendingTimers();\n\n expect(spys[0]).toHaveBeenCalledTimes(2);\n expect(spys[0]).toHaveBeenLastCalledWith('tabindex', '0');\n expect(spys[1]).toHaveBeenCalledTimes(2);\n expect(spys[1]).toHaveBeenLastCalledWith('tabindex', '-1');\n\n expect(page.root).toMatchSnapshot();\n });\n\n test('should manage mixed navigation', async () => {\n const page = await getPage({ label: 'Sample label', items: ['batman', 'joker'], identifier: 'id' }, createSlots());\n expect(page.root).toMatchSnapshot();\n\n const element = page.doc.querySelector('mg-tabs');\n const spys = Array.from(element.shadowRoot.querySelectorAll('button')).map(button => jest.spyOn(button, 'setAttribute'));\n\n const activeTab: HTMLElement = element.shadowRoot.querySelector('.mg-tabs__navigation-button--active');\n\n activeTab.dispatchEvent(new CustomEvent('focus', { bubbles: true }));\n await page.waitForChanges();\n\n expect(page.root).toMatchSnapshot();\n\n activeTab.dispatchEvent(new KeyboardEvent('keydown', { key: key.next }));\n await page.waitForChanges();\n\n document.dispatchEvent(new MouseEvent('click', { bubbles: true }));\n await page.waitForChanges();\n jest.runOnlyPendingTimers();\n\n expect(spys[0]).toHaveBeenCalledTimes(2);\n expect(spys[0]).toHaveBeenLastCalledWith('tabindex', '0');\n expect(spys[1]).toHaveBeenCalledTimes(2);\n expect(spys[1]).toHaveBeenLastCalledWith('tabindex', '-1');\n\n expect(page.root).toMatchSnapshot();\n });\n });\n});\n"]}
1
+ {"version":3,"file":"mg-tabs.spec.js","sourceRoot":"","sources":["../../../../../src/components/molecules/mg-tabs/test/mg-tabs.spec.tsx"],"names":[],"mappings":"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","sourcesContent":["import { h } from '@stencil/core';\nimport { newSpecPage } from '@stencil/core/testing';\nimport { MgTabs } from '../mg-tabs';\nimport { sizes, Status } from '../mg-tabs.conf';\n\nconst getPage = (args, slots?) =>\n newSpecPage({\n components: [MgTabs],\n template: () => <mg-tabs {...args}>{slots && slots.map(content => content && content())}</mg-tabs>,\n });\n\nconst createSlots = (slotNumber = 2) => {\n const slots = [];\n for (let i = 1; slotNumber > slots.length; i++) {\n slots.push(() => <div slot={`tab_content-${i}`}>{`Content ${i}`}</div>);\n }\n return slots;\n};\n\nconst badge = { value: 2, label: 'messages' };\n\nconst key = { next: 'ArrowRight', prev: 'ArrowLeft' };\n\ndescribe('mg-tabs', () => {\n describe.each(sizes)('template', size => {\n test.each([\n [['Batman', 'Joker', 'Bane']],\n [\n [\n { label: 'Batman', icon: 'check', badge },\n { label: 'Joker', icon: 'cross', badge: { ...badge, role: 'information' }, status: Status.DISABLED },\n { label: 'Bane', icon: 'trash', badge, status: Status.HIDDEN },\n ],\n ],\n ])('render', async items => {\n const { root } = await getPage({ label: 'Sample label', items, identifier: 'identifier', size }, createSlots(3));\n expect(root).toMatchSnapshot();\n });\n\n test('display only slots with name \"tab_content-*\"', async () => {\n const { root } = await getPage({ label: 'Sample label', items: ['Batman', 'Joker'], identifier: 'identifier' }, [...createSlots(), () => <div>dummy content</div>]);\n expect(root).toMatchSnapshot();\n });\n\n test.each([\n {\n items: ['Tab 1', 'Tab 2', 'Tab 3'],\n activeTab: 2,\n },\n {\n items: [{ label: 'Batman' }, { label: 'Joker', status: Status.ACTIVE }, { label: 'Bane' }],\n },\n {\n items: [{ label: 'Batman' }, { label: 'Joker' }, { label: 'Bane' }],\n activeTab: 2,\n },\n {\n items: [{ label: 'Batman' }, { label: 'Joker', status: Status.ACTIVE }, { label: 'Bane' }],\n activeTab: 2,\n },\n {\n items: [{ label: 'Batman' }, { label: 'Joker', status: Status.ACTIVE }, { label: 'Bane' }],\n activeTab: 3,\n },\n ])(`display ${size} tabs with activeProps set by props`, async props => {\n const { root } = await getPage({ label: 'Sample label', identifier: 'identifier', ...props }, createSlots(3));\n expect(root).toMatchSnapshot();\n });\n });\n\n describe('errors', () => {\n test.each(['', ' ', undefined])('Should throw error with invalid label property: %s', async label => {\n expect.assertions(1);\n try {\n await getPage({ label, items: ['Batman', 'Joker'] }, createSlots());\n } catch (err) {\n expect(err.message).toMatch('<mg-tabs> prop \"label\" is required.');\n }\n });\n\n test.each([\n [undefined, 'batman'],\n [['batman', { batman: 'batman' }]],\n [[true, false]],\n [[1, 2, 3]],\n [[true, 1, 'batman']],\n [[{ label: 'batman', icon: 'batman' }, { batman: 'batman' }]],\n [[{ label: undefined, icon: 'batman' }, { label: 'batman' }]],\n ])('Should throw error with invalid items property', async items => {\n expect.assertions(1);\n try {\n await getPage({ label: 'Sample label', items }, createSlots());\n } catch (err) {\n expect(err.message).toMatch('<mg-tabs> prop \"items\" is required and all items must be the same type: TabItem.');\n }\n });\n\n test.each([[[]], [createSlots(1)], [[undefined, createSlots(2)[1]], [createSlots(3)]]])('should trown an error with invalid slots', async slots => {\n expect.assertions(1);\n try {\n await getPage({ label: 'Sample label', items: ['Tab 1', 'Tab 2'] }, slots);\n } catch (err) {\n expect(err.message).toMatch('<mg-tabs> Must have slots counts equal to tabs count.');\n }\n });\n\n test.each([0, 3, null, { test: 'fail' }, 'string'])('should trown an error with invalid range for \"activeTab\" props', async activeTab => {\n expect.assertions(1);\n try {\n await getPage({ label: 'Sample label', items: ['Tab 1', 'Tab 2'], activeTab }, createSlots());\n } catch (err) {\n expect(err.message).toMatch(`<mg-tabs> prop \"activeTab\" must be a number between 1 and 2 and new value must be \"activable\".`);\n }\n });\n\n test('should trown an error with invalid tabItem props', async () => {\n expect.assertions(1);\n try {\n await getPage({ label: 'Sample label', items: ['Tab 1', 'Tab 2'], size: 'batman' }, createSlots());\n } catch (err) {\n expect(err.message).toMatch(`<mg-tabs> prop \"size\" must be one of: ${sizes.join(', ')}`);\n }\n });\n });\n\n describe('navigation', () => {\n test.each([[['batman', 'joker']], [[{ label: 'Batman' }, { label: 'Joker' }]]])('should go to next tab on click event', async items => {\n const page = await getPage({ label: 'Sample label', items, identifier: 'id' }, createSlots());\n expect(page.root).toMatchSnapshot();\n\n const element = page.doc.querySelector('mg-tabs');\n let activeTab = element.shadowRoot.querySelector('.mg-c-tabs__navigation-button--active');\n expect(activeTab).toHaveProperty('id', 'id-1');\n\n jest.spyOn(page.rootInstance.activeTabChange, 'emit');\n\n const nextTab = element.shadowRoot.getElementById('id-2');\n nextTab.dispatchEvent(new MouseEvent('click', { bubbles: true }));\n await page.waitForChanges();\n\n expect(page.rootInstance.activeTabChange.emit).toHaveBeenCalledWith(2);\n expect(page.root).toMatchSnapshot();\n\n activeTab = element.shadowRoot.querySelector('.mg-c-tabs__navigation-button--active');\n expect(activeTab).toHaveProperty('id', 'id-2');\n });\n\n test.each([Status.HIDDEN, Status.DISABLED])('should prevent click on tab with status %s', async status => {\n const page = await getPage({ label: 'Sample label', items: [{ label: 'Batman' }, { label: 'Joker', status }], identifier: 'id' }, createSlots());\n expect(page.root).toMatchSnapshot();\n\n const element = page.doc.querySelector('mg-tabs');\n let activeTab = element.shadowRoot.querySelector('.mg-c-tabs__navigation-button--active');\n expect(activeTab).toHaveProperty('id', 'id-1');\n\n jest.spyOn(page.rootInstance.activeTabChange, 'emit');\n\n const nextTab = element.shadowRoot.getElementById('id-2');\n nextTab.dispatchEvent(new MouseEvent('click', { bubbles: true }));\n await page.waitForChanges();\n\n expect(page.root).toMatchSnapshot();\n expect(page.rootInstance.activeTabChange.emit).not.toHaveBeenCalled();\n\n activeTab = element.shadowRoot.querySelector('.mg-c-tabs__navigation-button--active');\n expect(activeTab).toHaveProperty('id', 'id-1');\n });\n\n test('should go to next tab on keyboard event', async () => {\n const page = await getPage({ label: 'Sample label', items: ['batman', 'joker'], identifier: 'id' }, createSlots());\n const activeTabChangeSpy = jest.spyOn(page.rootInstance.activeTabChange, 'emit');\n expect(page.root).toMatchSnapshot();\n\n const element = page.doc.querySelector('mg-tabs');\n const buttons = Array.from(element.shadowRoot.querySelectorAll('button'));\n buttons.forEach(button => {\n button.focus = jest.fn();\n });\n\n let activeTab: HTMLElement = element.shadowRoot.querySelector('.mg-c-tabs__navigation-button--active');\n activeTab.dispatchEvent(new CustomEvent('focus', { bubbles: true }));\n\n await page.waitForChanges();\n expect(page.root).toMatchSnapshot();\n\n for await (const action of [\n { key: key.next, from: 0, to: 1 },\n { key: key.next, from: 1, to: 0 },\n { key: key.prev, from: 0, to: 1 },\n { key: key.prev, from: 1, to: 0 },\n ]) {\n element.shadowRoot.querySelector(`[data-index=\"${action.from + 1}\"]`).dispatchEvent(new KeyboardEvent('keydown', { key: action.key }));\n await page.waitForChanges();\n\n expect(page.root).toMatchSnapshot();\n\n activeTab = element.shadowRoot.querySelector('.mg-c-tabs__navigation-button--active');\n expect(activeTab).toHaveProperty('id', 'id-1');\n expect(buttons[action.to].focus).toHaveBeenCalledTimes(action.key === key.next ? 1 : 2);\n expect(activeTabChangeSpy).not.toHaveBeenCalled();\n }\n });\n\n test.each([Status.HIDDEN, Status.DISABLED])('should go to next VISIBLE tab on keyboard event', async status => {\n const page = await getPage({ label: 'Sample label', items: [{ label: 'Batman' }, { label: 'Joker' }, { label: 'Bane', status }], identifier: 'id' }, createSlots(3));\n const activeTabChangeSpy = jest.spyOn(page.rootInstance.activeTabChange, 'emit');\n expect(page.root).toMatchSnapshot();\n\n const element = page.doc.querySelector('mg-tabs');\n const buttons = Array.from(element.shadowRoot.querySelectorAll('button'));\n buttons.forEach(button => {\n button.focus = jest.fn();\n });\n\n let activeTab: HTMLElement = element.shadowRoot.querySelector('.mg-c-tabs__navigation-button--active');\n\n activeTab.dispatchEvent(new CustomEvent('focus', { bubbles: true }));\n await page.waitForChanges();\n expect(page.root).toMatchSnapshot();\n\n await page.waitForChanges();\n\n for await (const actions of [\n [\n { key: key.next, from: 0, to: 1 },\n { key: key.next, from: 1, to: 2 },\n ],\n [{ key: key.prev, from: 0, to: 2 }],\n ]) {\n for await (const action of actions) {\n element.shadowRoot.querySelector(`[data-index=\"${action.from + 1}\"]`).dispatchEvent(new KeyboardEvent('keydown', { key: action.key }));\n await page.waitForChanges();\n\n expect(page.root).toMatchSnapshot();\n\n activeTab = element.shadowRoot.querySelector('.mg-c-tabs__navigation-button--active');\n expect(activeTab).toHaveProperty('id', 'id-1');\n if (action.to === 2) {\n const button = buttons[action.key === key.next ? action.from - 1 : action.from + 1];\n if (status === Status.HIDDEN) {\n expect(buttons[action.to].focus).not.toHaveBeenCalled();\n expect(button.focus).toHaveBeenCalledTimes(action.key === key.next ? 1 : 2);\n } else {\n expect(buttons[action.to].focus).toHaveBeenCalledTimes(action.key === key.next ? 1 : 2);\n if (action.key === key.next) {\n expect(button.focus).not.toHaveBeenCalled();\n } else {\n expect(button.focus).toHaveBeenCalledTimes(1);\n }\n }\n } else {\n expect(buttons[action.to].focus).toHaveBeenCalledTimes(1);\n }\n expect(activeTabChangeSpy).not.toHaveBeenCalled();\n }\n }\n });\n\n test('should manage Tab key', async () => {\n const page = await getPage({ label: 'Sample label', items: ['batman', 'joker'], identifier: 'id' }, createSlots());\n expect(page.root).toMatchSnapshot();\n\n const element = page.doc.querySelector('mg-tabs');\n const spys = Array.from(element.shadowRoot.querySelectorAll('button')).map(button => jest.spyOn(button, 'setAttribute'));\n\n const activeTab: HTMLElement = element.shadowRoot.querySelector('.mg-c-tabs__navigation-button--active');\n\n activeTab.dispatchEvent(new CustomEvent('focus', { bubbles: true }));\n await page.waitForChanges();\n\n expect(page.root).toMatchSnapshot();\n\n activeTab.dispatchEvent(new KeyboardEvent('keydown', { key: key.next }));\n await page.waitForChanges();\n\n activeTab.dispatchEvent(new KeyboardEvent('keydown', { key: 'Tab' }));\n await page.waitForChanges();\n jest.runOnlyPendingTimers();\n\n expect(spys[0]).toHaveBeenCalledTimes(2);\n expect(spys[0]).toHaveBeenLastCalledWith('tabindex', '0');\n expect(spys[1]).toHaveBeenCalledTimes(2);\n expect(spys[1]).toHaveBeenLastCalledWith('tabindex', '-1');\n\n expect(page.root).toMatchSnapshot();\n });\n\n test('should manage mixed navigation', async () => {\n const page = await getPage({ label: 'Sample label', items: ['batman', 'joker'], identifier: 'id' }, createSlots());\n expect(page.root).toMatchSnapshot();\n\n const element = page.doc.querySelector('mg-tabs');\n const spys = Array.from(element.shadowRoot.querySelectorAll('button')).map(button => jest.spyOn(button, 'setAttribute'));\n\n const activeTab: HTMLElement = element.shadowRoot.querySelector('.mg-c-tabs__navigation-button--active');\n\n activeTab.dispatchEvent(new CustomEvent('focus', { bubbles: true }));\n await page.waitForChanges();\n\n expect(page.root).toMatchSnapshot();\n\n activeTab.dispatchEvent(new KeyboardEvent('keydown', { key: key.next }));\n await page.waitForChanges();\n\n document.dispatchEvent(new MouseEvent('click', { bubbles: true }));\n await page.waitForChanges();\n jest.runOnlyPendingTimers();\n\n expect(spys[0]).toHaveBeenCalledTimes(2);\n expect(spys[0]).toHaveBeenLastCalledWith('tabindex', '0');\n expect(spys[1]).toHaveBeenCalledTimes(2);\n expect(spys[1]).toHaveBeenLastCalledWith('tabindex', '-1');\n\n expect(page.root).toMatchSnapshot();\n });\n });\n});\n"]}
@@ -2,7 +2,7 @@
2
2
  "errors": {
3
3
  "required": "This field is required.",
4
4
  "date": {
5
- "badInput": "The date format must be <span aria-hidden=\"true\">mm/dd/yyyy</span><span class=\"sr-only\">m m / d d / y y y y</span> and the date must be greater than {min}",
5
+ "badInput": "The date format must be <span aria-hidden=\"true\">mm/dd/yyyy</span><span class=\"mg-u-visually-hidden\">m m / d d / y y y y</span> and the date must be greater than {min}",
6
6
  "min": "The date cannot be earlier than {min}",
7
7
  "max": "The date cannot be later than {max}",
8
8
  "minMax": "The date must be between {min} and {max}"
@@ -44,8 +44,8 @@
44
44
  }
45
45
  },
46
46
  "form": {
47
- "required": "Fields with a <strong class=\"is-asterisk\">*</strong> are required",
48
- "requiredSingle": "Field with a <strong class=\"is-asterisk\">*</strong> is required",
47
+ "required": "Fields with a <strong class=\"mg-u-is-asterisk\">*</strong> are required",
48
+ "requiredSingle": "Field with a <strong class=\"mg-u-is-asterisk\">*</strong> is required",
49
49
  "allRequired": "All fields are required",
50
50
  "allRequiredSingle": "The field is required"
51
51
  },
@@ -2,7 +2,7 @@
2
2
  "errors": {
3
3
  "required": "Ce champ est obligatoire.",
4
4
  "date": {
5
- "badInput": "Le format de la date doit être du type <span aria-hidden=\"true\">jj/mm/aaaa</span><span class=\"sr-only\">j j / m m / a a a a</span> et la date supérieure au {min}",
5
+ "badInput": "Le format de la date doit être du type <span aria-hidden=\"true\">jj/mm/aaaa</span><span class=\"mg-u-visually-hidden\">j j / m m / a a a a</span> et la date supérieure au {min}",
6
6
  "min": "La date ne peut pas être antérieure au {min}",
7
7
  "max": "La date ne peut pas être postérieure au {max}",
8
8
  "minMax": "La date doit être comprise entre le {min} et le {max}"
@@ -44,8 +44,8 @@
44
44
  }
45
45
  },
46
46
  "form": {
47
- "required": "Les champs marqués d'un <strong class=\"is-asterisk\">*</strong> sont obligatoires",
48
- "requiredSingle": "Le champ marqué d'un <strong class=\"is-asterisk\">*</strong> est obligatoire",
47
+ "required": "Les champs marqués d'un <strong class=\"mg-u-is-asterisk\">*</strong> sont obligatoires",
48
+ "requiredSingle": "Le champ marqué d'un <strong class=\"mg-u-is-asterisk\">*</strong> est obligatoire",
49
49
  "allRequired": "Tous les champs sont obligatoires",
50
50
  "allRequiredSingle": "Le champ est obligatoire"
51
51
  },
@@ -63,7 +63,8 @@ export class OverflowBehavior {
63
63
  const acc = { accWidth: 0, previousItem: null };
64
64
  [...this._baseChildren, this._moreElement].forEach((child) => {
65
65
  acc.accWidth += child.offsetWidth;
66
- const isPreviousItemHidden = acc.previousItem !== null && acc.previousItem.getAttribute('hidden') !== null;
66
+ const hasPreviuosItem = acc.previousItem !== null;
67
+ const isPreviousItemHidden = hasPreviuosItem && acc.previousItem.getAttribute('hidden') !== null;
67
68
  // if previous item is hidden AND is NOT more element we hidde current
68
69
  // OR if item has an overflow we hidde current
69
70
  // OR if current item is more element AND have NOT previous hidden items, current more element item is an hidden item
@@ -1 +1 @@
1
- {"version":3,"file":"behaviors.utils.js","sourceRoot":"","sources":["../../src/utils/behaviors.utils.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * MgItemMore type guard\n * @param element - element to control type\n * @returns truthy if element is mg-item-more\n */\nconst isMgItemMore = (element: HTMLElement): element is HTMLMgItemMoreElement => element.nodeName === 'MG-ITEM-MORE';\n\nexport enum OverflowBehaviorElements {\n BASE_INDEX = 'data-overflow-base-index',\n PROXY_INDEX = 'data-overflow-proxy-index',\n}\n\nexport class OverflowBehavior {\n // variables\n private _resizeObserver: ResizeObserver;\n private _moreElement: HTMLElement;\n private _baseChildren: Element[];\n private _proxyChildren: Element[];\n\n constructor(private element: Element, private render: () => HTMLElement) {\n if (this._resizeObserver === undefined) {\n // add resize observer\n this._resizeObserver = new ResizeObserver(entries => {\n entries.forEach(entry => {\n this.run(entry.contentRect.width);\n });\n });\n this._resizeObserver.observe(this.element);\n }\n this.run();\n }\n\n /**********\n * Public *\n **********/\n\n /**\n * Disconnect ResizeObserver\n */\n public disconnect = (): void => {\n this._resizeObserver.disconnect();\n };\n\n /************\n * Internal *\n ************/\n\n /**\n * run overflow behavior\n * @param width - width of the container. Optional.\n */\n private run = (width?: number): void => {\n if (this._moreElement === undefined) {\n // set moreElement\n this._moreElement = this.render();\n\n // set children\n this._baseChildren = this.getInteractiveItems(this.element);\n if (isMgItemMore(this._moreElement)) {\n this._proxyChildren = this.getInteractiveItems(this._moreElement.shadowRoot.querySelector('mg-menu'));\n }\n\n // update children\n this._baseChildren.forEach((child, index) => {\n child.setAttribute(OverflowBehaviorElements.BASE_INDEX, `${index}`);\n // set moreElement children\n this._proxyChildren[index].setAttribute(OverflowBehaviorElements.PROXY_INDEX, `${index}`);\n });\n }\n\n if (width !== undefined) this.updateDisplayedItems(width);\n };\n\n /**\n * Get interactive children filtred by authorized nodeName ['MG-MENU-ITEM', 'MG-BUTTON']\n * @param element - element to parse\n * @returns children\n */\n private getInteractiveItems = (element: Element) =>\n (element.children?.length > 0 ? Array.from(element.children) : []).filter(element => ['MG-MENU-ITEM', 'MG-BUTTON'].includes(element.nodeName));\n\n /**\n * Update displayed items in container from a given available space\n * @param availableWidth - available width in container to display child items\n */\n private updateDisplayedItems = (availableWidth: number): void => {\n this.restoreItems();\n const acc = { accWidth: 0, previousItem: null };\n [...this._baseChildren, this._moreElement].forEach((child: HTMLMgMenuItemElement | HTMLMgItemMoreElement) => {\n acc.accWidth += child.offsetWidth;\n const isPreviousItemHidden = acc.previousItem !== null && acc.previousItem.getAttribute('hidden') !== null;\n // if previous item is hidden AND is NOT more element we hidde current\n // OR if item has an overflow we hidde current\n // OR if current item is more element AND have NOT previous hidden items, current more element item is an hidden item\n // ELSE current is a display item\n this.toggleItem(\n child,\n (isPreviousItemHidden && !this.isMoreElement(child)) || this.isOverflowElement(acc.accWidth, child, availableWidth) || (this.isMoreElement(child) && !isPreviousItemHidden),\n );\n\n // update previous item with current item\n acc.previousItem = child;\n });\n };\n\n /**\n * Utility method to know if item overflow partialy or totaly in the container\n * @param cumulateWidth - previous sibling elements cumulate width + item width\n * @param item - item HTML element\n * @param availableWidth - container available width\n * @returns truthy if element is overflow\n */\n private isOverflowElement = (cumulateWidth: number, item: HTMLElement, availableWidth: number): boolean => {\n if (item.previousElementSibling === null || this.isMoreElement(item)) return false;\n else if (!this.isMoreElement(item.nextElementSibling)) return cumulateWidth + this._moreElement.offsetWidth > availableWidth;\n else return cumulateWidth > availableWidth;\n };\n\n /**\n * Utility method to know if a given element is the 'MORE' element\n * @param element - element to match with 'MORE' element\n * @returns truthy if element is the 'MORE' element\n */\n private isMoreElement = (element: Element): boolean => element.nodeName === 'MG-ITEM-MORE';\n\n /**\n * Toggle display item element\n * @param item - item to control\n * @param isHidden - is item hidden\n */\n private toggleItem = (item: HTMLElement, isHidden: boolean): void => {\n const mgActionMenuindex = Number(item.getAttribute(OverflowBehaviorElements.BASE_INDEX));\n if (this.isMoreElement(item)) this.toggleElement(this._moreElement, isHidden);\n else if (mgActionMenuindex >= 0) {\n this.toggleElement(item, isHidden);\n this.toggleElement(this._proxyChildren[mgActionMenuindex], !isHidden);\n }\n };\n\n /**\n * Toggle element's hidde attribute\n * @param element - element to toggle\n * @param isHidden - element is hidden\n */\n private toggleElement = (element: Element, isHidden: boolean): void => {\n if (isHidden) element.setAttribute('hidden', '');\n else element.removeAttribute('hidden');\n };\n\n /**\n * Remove hidden attributes on all items\n */\n private restoreItems = (): void => {\n [...this._baseChildren, this._moreElement].forEach(item => item.removeAttribute('hidden'));\n };\n}\n"]}
1
+ {"version":3,"file":"behaviors.utils.js","sourceRoot":"","sources":["../../src/utils/behaviors.utils.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * MgItemMore type guard\n * @param element - element to control type\n * @returns truthy if element is mg-item-more\n */\nconst isMgItemMore = (element: HTMLElement): element is HTMLMgItemMoreElement => element.nodeName === 'MG-ITEM-MORE';\n\nexport enum OverflowBehaviorElements {\n BASE_INDEX = 'data-overflow-base-index',\n PROXY_INDEX = 'data-overflow-proxy-index',\n}\n\nexport class OverflowBehavior {\n // variables\n private _resizeObserver: ResizeObserver;\n private _moreElement: HTMLElement;\n private _baseChildren: Element[];\n private _proxyChildren: Element[];\n\n constructor(private element: Element, private render: () => HTMLElement) {\n if (this._resizeObserver === undefined) {\n // add resize observer\n this._resizeObserver = new ResizeObserver(entries => {\n entries.forEach(entry => {\n this.run(entry.contentRect.width);\n });\n });\n this._resizeObserver.observe(this.element);\n }\n this.run();\n }\n\n /**********\n * Public *\n **********/\n\n /**\n * Disconnect ResizeObserver\n */\n public disconnect = (): void => {\n this._resizeObserver.disconnect();\n };\n\n /************\n * Internal *\n ************/\n\n /**\n * run overflow behavior\n * @param width - width of the container. Optional.\n */\n private run = (width?: number): void => {\n if (this._moreElement === undefined) {\n // set moreElement\n this._moreElement = this.render();\n\n // set children\n this._baseChildren = this.getInteractiveItems(this.element);\n if (isMgItemMore(this._moreElement)) {\n this._proxyChildren = this.getInteractiveItems(this._moreElement.shadowRoot.querySelector('mg-menu'));\n }\n\n // update children\n this._baseChildren.forEach((child, index) => {\n child.setAttribute(OverflowBehaviorElements.BASE_INDEX, `${index}`);\n // set moreElement children\n this._proxyChildren[index].setAttribute(OverflowBehaviorElements.PROXY_INDEX, `${index}`);\n });\n }\n\n if (width !== undefined) this.updateDisplayedItems(width);\n };\n\n /**\n * Get interactive children filtred by authorized nodeName ['MG-MENU-ITEM', 'MG-BUTTON']\n * @param element - element to parse\n * @returns children\n */\n private getInteractiveItems = (element: Element) =>\n (element.children?.length > 0 ? Array.from(element.children) : []).filter(element => ['MG-MENU-ITEM', 'MG-BUTTON'].includes(element.nodeName));\n\n /**\n * Update displayed items in container from a given available space\n * @param availableWidth - available width in container to display child items\n */\n private updateDisplayedItems = (availableWidth: number): void => {\n this.restoreItems();\n const acc = { accWidth: 0, previousItem: null };\n [...this._baseChildren, this._moreElement].forEach((child: HTMLMgMenuItemElement | HTMLMgItemMoreElement) => {\n acc.accWidth += child.offsetWidth;\n const hasPreviuosItem = acc.previousItem !== null;\n const isPreviousItemHidden = hasPreviuosItem && acc.previousItem.getAttribute('hidden') !== null;\n // if previous item is hidden AND is NOT more element we hidde current\n // OR if item has an overflow we hidde current\n // OR if current item is more element AND have NOT previous hidden items, current more element item is an hidden item\n // ELSE current is a display item\n this.toggleItem(\n child,\n (isPreviousItemHidden && !this.isMoreElement(child)) || this.isOverflowElement(acc.accWidth, child, availableWidth) || (this.isMoreElement(child) && !isPreviousItemHidden),\n );\n\n // update previous item with current item\n acc.previousItem = child;\n });\n };\n\n /**\n * Utility method to know if item overflow partialy or totaly in the container\n * @param cumulateWidth - previous sibling elements cumulate width + item width\n * @param item - item HTML element\n * @param availableWidth - container available width\n * @returns truthy if element is overflow\n */\n private isOverflowElement = (cumulateWidth: number, item: HTMLElement, availableWidth: number): boolean => {\n if (item.previousElementSibling === null || this.isMoreElement(item)) return false;\n else if (!this.isMoreElement(item.nextElementSibling)) return cumulateWidth + this._moreElement.offsetWidth > availableWidth;\n else return cumulateWidth > availableWidth;\n };\n\n /**\n * Utility method to know if a given element is the 'MORE' element\n * @param element - element to match with 'MORE' element\n * @returns truthy if element is the 'MORE' element\n */\n private isMoreElement = (element: Element): boolean => element.nodeName === 'MG-ITEM-MORE';\n\n /**\n * Toggle display item element\n * @param item - item to control\n * @param isHidden - is item hidden\n */\n private toggleItem = (item: HTMLElement, isHidden: boolean): void => {\n const mgActionMenuindex = Number(item.getAttribute(OverflowBehaviorElements.BASE_INDEX));\n if (this.isMoreElement(item)) this.toggleElement(this._moreElement, isHidden);\n else if (mgActionMenuindex >= 0) {\n this.toggleElement(item, isHidden);\n this.toggleElement(this._proxyChildren[mgActionMenuindex], !isHidden);\n }\n };\n\n /**\n * Toggle element's hidde attribute\n * @param element - element to toggle\n * @param isHidden - element is hidden\n */\n private toggleElement = (element: Element, isHidden: boolean): void => {\n if (isHidden) element.setAttribute('hidden', '');\n else element.removeAttribute('hidden');\n };\n\n /**\n * Remove hidden attributes on all items\n */\n private restoreItems = (): void => {\n [...this._baseChildren, this._moreElement].forEach(item => item.removeAttribute('hidden'));\n };\n}\n"]}
@@ -132,4 +132,14 @@ const getChildWindows = (localWindow, windows = []) => {
132
132
  * @returns if string is valid
133
133
  */
134
134
  export const isValidString = (value) => typeof value === 'string' && value.trim() !== '';
135
+ /**
136
+ * Clean string caraters
137
+ * @param text - text to cliean
138
+ * @returns cleanded string
139
+ */
140
+ export const cleanString = (text) => typeof text === 'string' &&
141
+ text
142
+ .toLocaleLowerCase()
143
+ .normalize('NFD')
144
+ .replaceAll(/[\u0300-\u036f]/g, '');
135
145
  //# sourceMappingURL=components.utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"components.utils.js","sourceRoot":"","sources":["../../src/utils/components.utils.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Create random ID\n * @param prefix - add prefix to created ID\n * @param length - ID length\n * @returns ID\n */\nexport const createID = (prefix = '', length = 10): string => {\n const chars = 'abcdefghijklmnopqrstuvwxyz0123456789';\n const charsLength = chars.length;\n\n let ID = '';\n let now = Date.now();\n while (length > 0) {\n now += Math.pow(10, 6); // Add 1 millisecond to the timestamp\n const index = now % charsLength;\n ID += chars.charAt(index);\n length--;\n }\n return (prefix !== '' ? `${prefix}-` : '') + ID;\n};\n\n/**\n * Class to manage component classlist\n * Set() are not working when imported in project\n */\nexport class ClassList {\n /**\n * Available classes\n */\n classes: string[];\n\n constructor(classlist: string[] = []) {\n this.classes = classlist;\n }\n\n /**\n * Add class\n * @param className - class name to add\n */\n add = (className: string): void => {\n if (!this.has(className)) {\n this.classes.push(className);\n }\n };\n\n /**\n * Delete class\n * @param className - class name to delete\n */\n delete = (className: string): void => {\n const index = this.classes.indexOf(className);\n if (index > -1) {\n this.classes.splice(index, 1);\n }\n };\n\n /**\n * Check if class exist in list\n * @param className - class name to check\n * @returns class name is in the list\n */\n has = (className: string): boolean => {\n return this.classes.includes(className);\n };\n\n /**\n * Join classes seperated by spaces\n * @returns joined values\n */\n join = (): string => {\n return this.classes.join(' ');\n };\n}\n\n/**\n * Check if all items are string\n * @param items - items to check\n * @returns all items are string\n */\nexport const allItemsAreString = (items: unknown): items is string[] => Array.isArray(items) && items.every(item => typeof item === 'string');\n\n/**\n * Check if element is a heading\n * @param element - slotted element\n * @param tagNames - allowed tag names list\n * @returns element is a heading\n */\nexport const isTagName = (element: Element, tagNames: string[]): boolean => {\n return tagNames.includes(element?.tagName.toLowerCase());\n};\n\n/**\n * Focusable elements query selector\n */\nexport const focusableElements = 'a[href], button, input, textarea, select, details, [tabindex]:not([tabindex=\"-1\"]), [identifier]';\n\n/**\n * Get windows\n * @param localWindow - the window we are lookink for other windows\n * @returns The list of windows found\n */\nexport const getWindows = (localWindow: Window): Window[] => {\n const parentWindows = getParentWindows(localWindow);\n const childWindows = getChildWindows(localWindow);\n return [localWindow, ...parentWindows, ...childWindows];\n};\n\n/**\n * Get parent windows\n * @param localWindow - the window we are lookink for parents\n * @param windows - The list of allready found windows\n * @returns The list of windows found\n */\nexport const getParentWindows = (localWindow: Window, windows: Window[] = []): Window[] => {\n // Check if is in iframe\n if (localWindow.self !== localWindow.top) {\n // Check if we have permission to access parent\n try {\n const parentWindow: Window = localWindow.parent;\n windows.push(parentWindow);\n return getParentWindows(parentWindow, windows);\n } catch (err) {\n console.error('Different hosts between iframes:', err);\n return windows;\n }\n }\n return windows;\n};\n\n/**\n * Get child windows\n * @param localWindow - the window we are lookink for children\n * @param windows - The list of allready found windows\n * @returns The list of windows found\n */\nconst getChildWindows = (localWindow: Window, windows: Window[] = []): Window[] => {\n if (localWindow.frames.length > 0) {\n for (const childWindow of Array.from(localWindow.frames)) {\n windows.push(childWindow);\n getChildWindows(childWindow, windows);\n }\n }\n return windows;\n};\n\n/**\n * Validate string\n * @param value - value to check\n * @returns if string is valid\n */\nexport const isValidString = (value: unknown): boolean => typeof value === 'string' && value.trim() !== '';\n"]}
1
+ {"version":3,"file":"components.utils.js","sourceRoot":"","sources":["../../src/utils/components.utils.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Create random ID\n * @param prefix - add prefix to created ID\n * @param length - ID length\n * @returns ID\n */\nexport const createID = (prefix = '', length = 10): string => {\n const chars = 'abcdefghijklmnopqrstuvwxyz0123456789';\n const charsLength = chars.length;\n\n let ID = '';\n let now = Date.now();\n while (length > 0) {\n now += Math.pow(10, 6); // Add 1 millisecond to the timestamp\n const index = now % charsLength;\n ID += chars.charAt(index);\n length--;\n }\n return (prefix !== '' ? `${prefix}-` : '') + ID;\n};\n\n/**\n * Class to manage component classlist\n * Set() are not working when imported in project\n */\nexport class ClassList {\n /**\n * Available classes\n */\n classes: string[];\n\n constructor(classlist: string[] = []) {\n this.classes = classlist;\n }\n\n /**\n * Add class\n * @param className - class name to add\n */\n add = (className: string): void => {\n if (!this.has(className)) {\n this.classes.push(className);\n }\n };\n\n /**\n * Delete class\n * @param className - class name to delete\n */\n delete = (className: string): void => {\n const index = this.classes.indexOf(className);\n if (index > -1) {\n this.classes.splice(index, 1);\n }\n };\n\n /**\n * Check if class exist in list\n * @param className - class name to check\n * @returns class name is in the list\n */\n has = (className: string): boolean => {\n return this.classes.includes(className);\n };\n\n /**\n * Join classes seperated by spaces\n * @returns joined values\n */\n join = (): string => {\n return this.classes.join(' ');\n };\n}\n\n/**\n * Check if all items are string\n * @param items - items to check\n * @returns all items are string\n */\nexport const allItemsAreString = (items: unknown): items is string[] => Array.isArray(items) && items.every(item => typeof item === 'string');\n\n/**\n * Check if element is a heading\n * @param element - slotted element\n * @param tagNames - allowed tag names list\n * @returns element is a heading\n */\nexport const isTagName = (element: Element, tagNames: string[]): boolean => {\n return tagNames.includes(element?.tagName.toLowerCase());\n};\n\n/**\n * Focusable elements query selector\n */\nexport const focusableElements = 'a[href], button, input, textarea, select, details, [tabindex]:not([tabindex=\"-1\"]), [identifier]';\n\n/**\n * Get windows\n * @param localWindow - the window we are lookink for other windows\n * @returns The list of windows found\n */\nexport const getWindows = (localWindow: Window): Window[] => {\n const parentWindows = getParentWindows(localWindow);\n const childWindows = getChildWindows(localWindow);\n return [localWindow, ...parentWindows, ...childWindows];\n};\n\n/**\n * Get parent windows\n * @param localWindow - the window we are lookink for parents\n * @param windows - The list of allready found windows\n * @returns The list of windows found\n */\nexport const getParentWindows = (localWindow: Window, windows: Window[] = []): Window[] => {\n // Check if is in iframe\n if (localWindow.self !== localWindow.top) {\n // Check if we have permission to access parent\n try {\n const parentWindow: Window = localWindow.parent;\n windows.push(parentWindow);\n return getParentWindows(parentWindow, windows);\n } catch (err) {\n console.error('Different hosts between iframes:', err);\n return windows;\n }\n }\n return windows;\n};\n\n/**\n * Get child windows\n * @param localWindow - the window we are lookink for children\n * @param windows - The list of allready found windows\n * @returns The list of windows found\n */\nconst getChildWindows = (localWindow: Window, windows: Window[] = []): Window[] => {\n if (localWindow.frames.length > 0) {\n for (const childWindow of Array.from(localWindow.frames)) {\n windows.push(childWindow);\n getChildWindows(childWindow, windows);\n }\n }\n return windows;\n};\n\n/**\n * Validate string\n * @param value - value to check\n * @returns if string is valid\n */\nexport const isValidString = (value: unknown): boolean => typeof value === 'string' && value.trim() !== '';\n\n/**\n * Clean string caraters\n * @param text - text to cliean\n * @returns cleanded string\n */\nexport const cleanString = (text: string): string =>\n typeof text === 'string' &&\n text\n .toLocaleLowerCase()\n .normalize('NFD')\n .replaceAll(/[\\u0300-\\u036f]/g, '');\n"]}
@@ -1,4 +1,4 @@
1
- import { createID, ClassList, allItemsAreString, isTagName, getWindows, isValidString } from "./components.utils";
1
+ import { createID, ClassList, allItemsAreString, isTagName, getWindows, isValidString, cleanString } from "./components.utils";
2
2
  import { mockConsoleError } from "./unit.test.utils";
3
3
  mockConsoleError();
4
4
  describe('components.utils', () => {
@@ -124,5 +124,18 @@ describe('components.utils', () => {
124
124
  expect(isValidString(value)).toEqual(true);
125
125
  });
126
126
  });
127
+ describe('cleanString', () => {
128
+ test.each([
129
+ { string: 'batman', expected: 'batman' },
130
+ { string: 'BATMAN', expected: 'batman' },
131
+ { string: 'Batman', expected: 'batman' },
132
+ { string: ' batman ', expected: ' batman ' },
133
+ { string: ' batman', expected: ' batman' },
134
+ { string: 'batman ', expected: 'batman ' },
135
+ { string: 'âäàçéèêñù', expected: 'aaaceeenu' },
136
+ ])('Should format string properly', ({ string, expected }) => {
137
+ expect(cleanString(string)).toEqual(expected);
138
+ });
139
+ });
127
140
  });
128
141
  //# sourceMappingURL=components.utils.spec.js.map